amule-adunanza-2012.1+2.3.1~dfsg1.orig/0000755000175000017500000000000012217574451015540 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/0000755000175000017500000000000012053222073016044 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/uintmax_t.m40000644000175000017500000000211410753565633020335 0ustar l3onl3on# uintmax_t.m4 serial 6 (gettext-0.11) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. AC_PREREQ(2.13) # Define uintmax_t to `unsigned long' or `unsigned long long' # if does not exist. AC_DEFUN([jm_AC_TYPE_UINTMAX_T], [ AC_REQUIRE([jm_AC_HEADER_INTTYPES_H]) AC_REQUIRE([jm_AC_HEADER_STDINT_H]) if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG]) test $ac_cv_type_unsigned_long_long = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, [Define to unsigned long or unsigned long long if and don't define.]) fi ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/gettext.m40000644000175000017500000005730110753565633020021 0ustar l3onl3on# gettext.m4 serial 17 (gettext-0.11.5) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can 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 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-2002. 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([$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], [no], [yes])) define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], [])) 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 test "$gt_cv_func_gnugettext_libc" != "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]) ]) 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) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= 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. dnl Add a version number to the cache macros. define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, [AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#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 ], [])[extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], gt_cv_func_gnugettext_libc=yes, gt_cv_func_gnugettext_libc=no)]) if test "$gt_cv_func_gnugettext_libc" != "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_cv_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_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#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 ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], gt_cv_func_gnugettext_libintl=yes, gt_cv_func_gnugettext_libintl=no) dnl Now see whether libintl exists and depends on libiconv. if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#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 ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_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 test "$gt_cv_func_gnugettext_libc" = "yes" \ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ && test "$PACKAGE" != gettext; }; 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. INTLOBJS="\$(GETTOBJS)" BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi 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 "$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 if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext_libintl" = "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; 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) AC_SUBST(INTLOBJS) 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 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 Checks for all prerequisites of the po subdirectory, dnl except for USE_NLS. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl 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 >/dev/null 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 Search for GNU xgettext 0.11 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= /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= /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 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 >/dev/null 2>&1], :) dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU msgfmt. if test "$GMSGFMT" != ":"; then dnl If it is no GNU msgfmt we define it as : so that the dnl Makefiles still can work. if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` AC_MSG_RESULT( [found $GMSGFMT program is not GNU msgfmt; ignore it]) GMSGFMT=":" fi fi dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is no GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po fi AC_OUTPUT_COMMANDS([ 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 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" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES 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 "$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" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' fi case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= GMOFILES= UPDATEPOFILES= DUMMYPOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" 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|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|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, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it # from automake. eval 'ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Checks for all prerequisites of the intl subdirectory, dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_ISC_POSIX])dnl AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_C_CONST])dnl AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_OFF_T])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([jm_GLIBC21])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h]) AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \ strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) AM_ICONV AM_LANGINFO_CODESET if test $ac_cv_header_locale_h = yes; then AM_LC_MESSAGES fi dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi ]) AC_DEFUN([AM_MKINSTALLDIRS], [ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but $(top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/GeoIP.m40000644000175000017500000000760412050266603017264 0ustar l3onl3on# -*- Autoconf -*- # This file is part of the aMule Project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # Any parts of this program derived from the xMule, lMule or eMule project, # or contributed by third-party developers are copyrighted by their # respective authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # dnl --------------------------------------------------------------------------- dnl MULE_CHECK_GEOIP dnl dnl Checks if the GeoIP library is requested, exists, and whether it should and dnl could be linked statically. dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_GEOIP], [ MULE_ARG_ENABLE([geoip], [no], [compile with GeoIP IP2Country library]) MULE_IF_ENABLED([geoip], [ AC_ARG_WITH([geoip-headers], AS_HELP_STRING([--with-geoip-headers=DIR], [GeoIP include files location]), [GEOIP_CPPFLAGS="-I$withval"]) AC_ARG_WITH([geoip-lib], AS_HELP_STRING([--with-geoip-lib=DIR], [GeoIP library location]), [GEOIP_LDFLAGS="-L$withval"]) MULE_BACKUP([CPPFLAGS]) MULE_APPEND([CPPFLAGS], [$GEOIP_CPPFLAGS]) MULE_BACKUP([LDFLAGS]) MULE_APPEND([LDFLAGS], [$GEOIP_LDFLAGS]) AC_CHECK_HEADER([GeoIP.h], [ AS_IF([test x$SYS = xwin32], [ AC_MSG_CHECKING([for WinSock library needed by GeoIP]) # Actually, we might not need any if GeoIP is linked as a .dll # - but that's even harder to check for AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #include #if (defined _WINSOCK2API_ || defined _WINSOCK2_H) I do know it's not the best approach, but at least works with MinGW stock headers. (tested with w32api-3.12) #endif ]]) ], [ GEOIP_WINSOCK_LIB="-lwsock32" ], [ GEOIP_WINSOCK_LIB="-lws2_32" ]) AC_MSG_RESULT([$GEOIP_WINSOCK_LIB]) ]) AC_CHECK_LIB([GeoIP], [GeoIP_open], [ AC_DEFINE([SUPPORT_GEOIP], [1], [Define if you want GeoIP support.]) GEOIP_LIBS="-lGeoIP" AS_IF([test x$SYS = xwin32], [MULE_APPEND([GEOIP_LIBS], [$GEOIP_WINSOCK_LIB])]) MULE_APPEND([GEOIP_CPPFLAGS], [-DENABLE_IP2COUNTRY=1]) AC_ARG_WITH([geoip-static], AS_HELP_STRING([--with-geoip-static], [Explicitly link GeoIP statically (default=no)]), [ AS_IF([test "$withval" != "no" -a ${enable_static:-no} = no], [ MULE_BACKUP([LIBS]) MULE_PREPEND([LIBS], [-Wl,-Bstatic $GEOIP_LIBS -Wl,-Bdynamic]) AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include ]], [[ GeoIP *g = GeoIP_new(GEOIP_STANDARD); ]]) ], [ GEOIP_LIBS="-Wl,-Bstatic $GEOIP_LIBS -Wl,-Bdynamic" ], [ MULE_WARNING([Cannot link GeoIP statically, because your linker ($LD) does not support it.]) ]) MULE_RESTORE([LIBS]) ]) ]) ], [ MULE_ENABLEVAR([geoip])=disabled MULE_WARNING([GeoIP support has been disabled because the GeoIP libraries were not found]) ], [${GEOIP_WINSOCK_LIB:-}]) ], [ MULE_ENABLEVAR([geoip])=disabled MULE_WARNING([GeoIP support has been disabled because the GeoIP header files were not found]) ]) MULE_RESTORE([CPPFLAGS]) MULE_RESTORE([LDFLAGS]) ]) ]) AC_SUBST([GEOIP_CPPFLAGS])dnl AC_SUBST([GEOIP_LDFLAGS])dnl AC_SUBST([GEOIP_LIBS])dnl amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/lib-ld.m40000644000175000017500000000626010753565633017476 0ustar l3onl3on# lib-ld.m4 serial 1 (gettext-0.11) dnl Copyright (C) 1996-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-1.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/build-tools.m40000644000175000017500000001021412050266603020545 0ustar l3onl3on# -*- Autoconf -*- # This file is part of the aMule Project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # Any parts of this program derived from the xMule, lMule or eMule project, # or contributed by third-party developers are copyrighted by their # respective authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # # # This package has been tested with GNU Autoconf 2.59, and not guaranteed to # work with any other version. However, you only need to worry about it if # you're cross-compiling. # _AC_CHECK_BUILD_PREFIX # ----------------------- # Checks and sets the build prefix, if it is given by --build. AC_DEFUN([_AC_CHECK_BUILD_PREFIX], [ac_build_prefix= test -n "$build_alias" && ac_build_prefix=$build_alias- ]) # AC_CHECK_BUILD_PREFIX # AC_PROG_BUILD_CC([COMPILER ...]) # -------------------------- # COMPILER ... is a space separated list of C compilers to search for. # This just gives the user an opportunity to specify an alternative # search list for the C compiler. # # IMPORTANT: Run all other compiler tests *before* calling this macro! # # This is a stripped-down check, it checks only what we need, # i.e. BUILD_CC and BUILD_EXEEXT # AC_DEFUN([AC_PROG_BUILD_CC], [AC_REQUIRE([_AC_CHECK_BUILD_PREFIX])dnl dnl Set new names of important variables. pushdef([ac_tool_prefix], [ac_build_prefix])dnl pushdef([CC], [BUILD_CC])dnl pushdef([EXEEXT], [BUILD_EXEEXT])dnl pushdef([ac_cv_exeext], [ac_cv_build_exeext])dnl pushdef([ac_exeext], [ac_build_exeext])dnl dnl Don't use the values for the cross-compiler pushdef([CPPFLAGS], [BUILD_CPPFLAGS])dnl pushdef([CFLAGS], [BUILD_CFLAGS])dnl pushdef([LDFLAGS], [BUILD_LDFLAGS])dnl pushdef([LIBS], [BUILD_LIBS])dnl # Even if we're cross-compiling, we want a compiler here # that is not a cross-compiler. saved_cross=$cross_compiling cross_compiling=no dnl From now on, this is just a mere copy of Autoconf's AC_PROG_CC macro. AC_LANG_PUSH(C)dnl m4_ifval([$1], [AC_CHECK_TOOLS(CC, [$1])], [AC_CHECK_TOOL(CC, gcc) if test -z "$CC"; then AC_CHECK_TOOL(CC, cc) fi if test -z "$CC"; then AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc) fi if test -z "$CC"; then AC_CHECK_TOOLS(CC, cl) fi ]) test -z "$CC" && AC_MSG_FAILURE([no acceptable C compiler found in \$PATH]) # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for _AC_LANG compiler version" >&AS_MESSAGE_LOG_FD ac_compiler=`set X $ac_compile; echo $[2]` _AC_EVAL([$ac_compiler --version &AS_MESSAGE_LOG_FD]) _AC_EVAL([$ac_compiler -v &AS_MESSAGE_LOG_FD]) _AC_EVAL([$ac_compiler -V &AS_MESSAGE_LOG_FD]) dnl Forcibly include _AC_COMPILER_EXEEXT, to determine the build exeext. _AC_COMPILER_EXEEXT dnl End of copy, here some parts are stripped out. We only want a working C dnl compiler, and doesn't need the objext, the preprocessor, the dependency dnl style, whether it's gnu or not, etc. # Restore configuration environment cross_compiling=$saved_cross dnl Restore variable names. popdef([LIBS])dnl popdef([LDFLAGS])dnl popdef([CFLAGS])dnl popdef([CPPFLAGS])dnl popdef([ac_exeext])dnl popdef([ac_cv_exeext])dnl popdef([EXEEXT])dnl popdef([CC])dnl popdef([ac_tool_prefix])dnl dnl dnl AC_LANG_POP(C) must be called after the variable names are restored, thus dnl it will restore the correct (host) environment, not the build environment. AC_LANG_POP(C)dnl dnl Substitute variables for the build compiler AC_SUBST(BUILD_EXEEXT)dnl AC_SUBST(BUILD_CPPFLAGS)dnl AC_SUBST(BUILD_CFLAGS)dnl AC_SUBST(BUILD_LDFLAGS)dnl ]) # AC_PROG_BUILD_CC amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/gdlib.m40000644000175000017500000001143512050266603017377 0ustar l3onl3on# -*- Autoconf -*- # This file is part of the aMule Project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # Any parts of this program derived from the xMule, lMule or eMule project, # or contributed by third-party developers are copyrighted by their # respective authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # dnl --------------------------------------------------------------------------- dnl MULE_CHECK_GDLIB([VERSION = 2.0.0], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl dnl adds support for --with-gdlib-prefix and --with-gdlib-config dnl command line options dnl dnl Test for gdlib, and define GDLIB_CFLAGS, GDLIB_LIBS and GDLIB_CONFIG_NAME dnl environment variable to override the default name of the gdlib-config script dnl to use. Set GDLIB_CONFIG_PATH to specify the full path to gdlib-config - dnl in this case the macro won't even waste time on tests for its existence. dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_GDLIB], [dnl m4_define([REQUIRED_VERSION], [m4_ifval([$1], [$1], [2.0.0])])dnl m4_define([REQUIRED_VERSION_MAJOR], [m4_bregexp(REQUIRED_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\1])])dnl m4_define([REQUIRED_VERSION_MINOR], [m4_bregexp(REQUIRED_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\2])])dnl m4_define([REQUIRED_VERSION_MICRO], [m4_bregexp(REQUIRED_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\3])])dnl AC_ARG_WITH([gdlib-prefix], [AS_HELP_STRING([--with-gdlib-prefix=PREFIX], [prefix where gdlib is installed (optional)])]) AC_ARG_WITH([gdlib-config], [AS_HELP_STRING([--with-gdlib-config=CONFIG], [gdlib-config script to use (optional)])]) GDLIB_VERSION= # do we have gdlib-config name: it can be gdlib-config or gd-config or ... AS_IF([test x${GDLIB_CONFIG_NAME+set} != xset], [GDLIB_CONFIG_NAME=gdlib-config]) AS_IF([test -n "$with_gdlib_config"], [GDLIB_CONFIG_NAME="$with_gdlib_config"]) # deal with optional prefix AS_IF([test -n "$with_gdlib_prefix"], [GDLIB_LOOKUP_PATH="$with_gdlib_prefix/bin"]) # don't search the PATH if GDLIB_CONFIG_NAME is absolute filename AS_IF([test -x "$GDLIB_CONFIG_NAME"], [ AC_MSG_CHECKING([for gdlib-config]) GDLIB_CONFIG_PATH="$GDLIB_CONFIG_NAME" AC_MSG_RESULT([$GDLIB_CONFIG_PATH]) ], [AC_PATH_PROG([GDLIB_CONFIG_PATH], [$GDLIB_CONFIG_NAME], [no], [$GDLIB_LOOKUP_PATH:$PATH])]) AS_IF([test ${GDLIB_CONFIG_PATH:-no} != no], [ AC_MSG_CHECKING([for gdlib version >= REQUIRED_VERSION]) GDLIB_CONFIG_WITH_ARGS="$GDLIB_CONFIG_PATH $gdlib_config_args" GDLIB_VERSION=`$GDLIB_CONFIG_WITH_ARGS --version` gdlib_config_major_version=`echo $GDLIB_VERSION | sed ['s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/']` gdlib_config_minor_version=`echo $GDLIB_VERSION | sed ['s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/']` gdlib_config_micro_version=`echo $GDLIB_VERSION | sed ['s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/']` gdlib_ver_ok= MULE_IF([test $gdlib_config_major_version -gt REQUIRED_VERSION_MAJOR], [gdlib_ver_ok=yes], [test $gdlib_config_major_version -eq REQUIRED_VERSION_MAJOR], [ MULE_IF([test $gdlib_config_minor_version -gt REQUIRED_VERSION_MINOR], [gdlib_ver_ok=yes], [test $gdlib_config_minor_version -eq REQUIRED_VERSION_MINOR], [MULE_IF([test $gdlib_config_micro_version -ge REQUIRED_VERSION_MICRO], [gdlib_ver_ok=yes])]) ]) AS_IF([test -z "$gdlib_ver_ok"], [ AS_IF([test -z "$GDLIB_VERSION"], [AC_MSG_RESULT([no])], [ AC_MSG_RESULT([no (version $GDLIB_VERSION is not new enough)]) GDLIB_VERSION= ]) ], [ AC_MSG_RESULT([yes (version $GDLIB_VERSION)]) GDLIB_CFLAGS="`$GDLIB_CONFIG_WITH_ARGS --cflags`" GDLIB_LDFLAGS="`$GDLIB_CONFIG_WITH_ARGS --ldflags`" GDLIB_LIBS="`$GDLIB_CONFIG_WITH_ARGS --libs`" MULE_BACKUP([CFLAGS]) MULE_APPEND([CFLAGS], [$GDLIB_CFLAGS]) AC_CHECK_HEADER([gd.h],, [GDLIB_VERSION=]) MULE_RESTORE([CFLAGS]) ]) ]) AS_IF([test -n "$GDLIB_VERSION"], [$2], [$3]) AC_SUBST([GDLIB_CFLAGS])dnl AC_SUBST([GDLIB_LDFLAGS])dnl AC_SUBST([GDLIB_LIBS])dnl m4_undefine([REQUIRED_VERSION])dnl m4_undefine([REQUIRED_VERSION_MAJOR])dnl m4_undefine([REQUIRED_VERSION_MINOR])dnl m4_undefine([REQUIRED_VERSION_MICRO])dnl ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/progtest.m40000644000175000017500000000407410753565633020203 0ustar l3onl3on# progtest.m4 serial 2 (gettext-0.10.40) dnl Copyright (C) 1996-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can 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 package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. # 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], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/inttypes.m40000644000175000017500000000171710753565633020214 0ustar l3onl3on# inttypes.m4 serial 1 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_INTTYPES_H if exists and doesn't clash with # . AC_DEFUN([gt_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, [ AC_TRY_COMPILE( [#include #include ], [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) ]) if test $gt_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, [Define if exists and doesn't clash with .]) fi ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/intdiv0.m40000644000175000017500000000356510753565633017715 0ustar l3onl3on# intdiv0.m4 serial 1 (gettext-0.11.3) dnl Copyright (C) 2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([gt_INTDIV0], [ AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], gt_cv_int_divbyzero_sigfpe, [ AC_TRY_RUN([ #include #include static void #ifdef __cplusplus sigfpe_handler (int sig) #else sigfpe_handler (sig) int sig; #endif { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (1); } ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, [ # Guess based on the CPU. case "$host_cpu" in alpha* | i[34567]86 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac ]) ]) case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, [Define if integer division by zero raises signal SIGFPE.]) ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/isc-posix.m40000644000175000017500000000213310753565633020244 0ustar l3onl3on# isc-posix.m4 serial 2 (gettext-0.11.2) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # This file is not needed with autoconf-2.53 and newer. Remove it in 2005. # This test replaces the one in autoconf. # Currently this macro should have the same name as the autoconf macro # because gettext's gettext.m4 (distributed in the automake package) # still uses it. Otherwise, the use in gettext.m4 makes autoheader # give these diagnostics: # configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX # configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX undefine([AC_ISC_POSIX]) AC_DEFUN([AC_ISC_POSIX], [ dnl This test replaces the obsolescent AC_ISC_POSIX kludge. AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) ] ) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/cryptopp.m40000644000175000017500000001465612050266603020206 0ustar l3onl3on# -*- Autoconf -*- # This file is part of the aMule Project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # Any parts of this program derived from the xMule, lMule or eMule project, # or contributed by third-party developers are copyrighted by their # respective authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # dnl -------------------------------------------------------------------------- dnl MULE_CHECK_CRYPTOPP([VERSION = 5.1], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl dnl Check for cryptopp library dnl -------------------------------------------------------------------------- dnl dnl This macro sets these variables: dnl - CRYPTOPP_PREFIX dnl This is the user or system directory where crypto++ is installed or sources dnl - CRYPTOPP_VERSION_STRING dnl Something like "5.5.2" dnl - CRYPTOPP_VERSION_NUMBER dnl Something like 5005002 dnl - CRYPTOPP_STYLE dnl "sources", "installed" or "gentoo_debian" dnl - CRYPTOPP_LIB_NAME dnl "cryptopp" or "crypto++" dnl - CRYPTOPP_INCLUDE_PREFIX dnl The string that goes here: #include <@CRYPTOPP_INCLUDE_PREFIX@/rsa.h> dnl - CRYPTOPP_CPPFLAGS dnl Flags to be added to CPPFLAGS dnl - CRYPTOPP_LDFLAGS dnl Flags to be added to LDFLAGS dnl - CRYPTOPP_LIBS dnl Library to be added to LIBS dnl dnl The CRYPTOPP_CPPFLAGS, CRYPTOPP_LDFLAGS and CRYPTOPP_LIBS variables are also substituted. dnl dnl Worth notice: dnl - cryptopp_includedir dnl The string that goes in -I on CPPFLAGS dnl - cryptopp_libdir dnl The string that goes in -L on LDFLAGS dnl - cryptopp_header_path dnl The file we use to discover the version of cryptopp dnl AC_DEFUN([MULE_CHECK_CRYPTOPP], [dnl AC_REQUIRE([AC_PROG_EGREP])dnl m4_define([MIN_CRYPTO_VERSION], [m4_ifval([$1], [$1], [5.1])])dnl AC_ARG_WITH([crypto-prefix], [AS_HELP_STRING([--with-crypto-prefix=PREFIX], [prefix where crypto++ is installed])]) AC_MSG_CHECKING([for crypto++ version >= MIN_CRYPTO_VERSION]) cryptopp_file_with_version="cryptlib.h" CRYPTOPP_STYLE="unknown" CRYPTOPP_LIB_NAME="unknown" cryptopp_includedir="unknown" CRYPTOPP_INCLUDE_PREFIX="unknown" cryptopp_libdir="unknown" AS_IF([test -n "$with_crypto_prefix"], [ CRYPTOPP_PREFIX="$with_crypto_prefix" # Find the Cryptopp header in the user-provided location MULE_IF([test -f $CRYPTOPP_PREFIX/$cryptopp_file_with_version], [ CRYPTOPP_STYLE="sources" CRYPTOPP_LIB_NAME="cryptopp" cryptopp_includedir= CRYPTOPP_INCLUDE_PREFIX="$CRYPTOPP_PREFIX" cryptopp_libdir= ], [test -f $CRYPTOPP_PREFIX/include/cryptopp/$cryptopp_file_with_version], [ CRYPTOPP_STYLE="installed" CRYPTOPP_LIB_NAME="cryptopp" cryptopp_includedir="$CRYPTOPP_PREFIX/include" CRYPTOPP_INCLUDE_PREFIX="$CRYPTOPP_LIB_NAME" cryptopp_libdir="$CRYPTOPP_PREFIX/lib" ], [test -f $CRYPTOPP_PREFIX/include/crypto++/$cryptopp_file_with_version], [ # Debian uses libcrypto++5.1 - it's not my fault, please soda patch the package CRYPTOPP_STYLE="gentoo_debian" CRYPTOPP_LIB_NAME="crypto++" cryptopp_includedir="$CRYPTOPP_PREFIX/include" CRYPTOPP_INCLUDE_PREFIX="$CRYPTOPP_LIB_NAME" cryptopp_libdir="$CRYPTOPP_PREFIX/lib" ]) ], [ for CRYPTOPP_PREFIX in /usr /usr/local /opt /opt/local /usr/pkg /mingw ; do # Find the Cryptopp header in system locations MULE_IF([test -f $CRYPTOPP_PREFIX/$cryptopp_file_with_version], [ CRYPTOPP_STYLE="sources" CRYPTOPP_LIB_NAME="cryptopp" cryptopp_includedir= CRYPTOPP_INCLUDE_PREFIX="$CRYPTOPP_PREFIX" cryptopp_libdir= break ], [test -f $CRYPTOPP_PREFIX/include/cryptopp/$cryptopp_file_with_version], [ CRYPTOPP_STYLE="installed" CRYPTOPP_LIB_NAME="cryptopp" cryptopp_includedir="$CRYPTOPP_PREFIX/include" CRYPTOPP_INCLUDE_PREFIX="$CRYPTOPP_LIB_NAME" cryptopp_libdir="$CRYPTOPP_PREFIX/lib" break ], [test -f $CRYPTOPP_PREFIX/include/crypto++/$cryptopp_file_with_version], [ # Debian uses libcrypto++5.1 - it's not my fault, please soda patch the package CRYPTOPP_STYLE="gentoo_debian" CRYPTOPP_LIB_NAME="crypto++" cryptopp_includedir="$CRYPTOPP_PREFIX/include" CRYPTOPP_INCLUDE_PREFIX="$CRYPTOPP_LIB_NAME" cryptopp_libdir="$CRYPTOPP_PREFIX/lib" break ]) done ]) AS_IF([test $CRYPTOPP_STYLE = "unknown"], [result=no; resultstr=""], [ # Find out the crypto++ version and check against the minimum required cryptopp_header_path="${cryptopp_includedir+$cryptopp_includedir/}$CRYPTOPP_INCLUDE_PREFIX/$cryptopp_file_with_version" CRYPTOPP_VERSION_STRING=`$EGREP "Reference Manual|API Reference" $cryptopp_header_path | sed -e ['s/[^0-9]*\([0-9.]*\).*/\1/']` CRYPTOPP_VERSION_NUMBER=`echo $CRYPTOPP_VERSION_STRING | $AWK 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 1000 + [$]2) * 1000 + [$]3;}'` minvers=`echo MIN_CRYPTO_VERSION | $AWK 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 1000 + [$]2) * 1000 + [$]3;}'` AS_IF([test -n "$CRYPTOPP_VERSION_NUMBER" && test "$CRYPTOPP_VERSION_NUMBER" -ge $minvers], [ result=yes resultstr=" (version $CRYPTOPP_VERSION_STRING, $CRYPTOPP_STYLE)" AS_IF([test -n "$cryptopp_includedir"], [CRYPTOPP_CPPFLAGS="-I$cryptopp_includedir"], [CRYPTOPP_CPPFLAGS=]) AS_IF([test -n "$cryptopp_libdir"], [ CRYPTOPP_LDFLAGS="-L$cryptopp_libdir" CRYPTOPP_LIBS="-l$CRYPTOPP_LIB_NAME" ], [ CRYPTOPP_LDFLAGS= CRYPTOPP_LIBS="${CRYPTOPP_INCLUDE_PREFIX}/lib${CRYPTOPP_LIB_NAME}.a" ]) AH_TEMPLATE([CRYPTOPP_INCLUDE_PREFIX], [Define this to the include prefix of crypto++]) AC_DEFINE_UNQUOTED([CRYPTOPP_INCLUDE_PREFIX], $CRYPTOPP_INCLUDE_PREFIX) ], [ result=no resultstr=" (version $CRYPTOPP_VERSION_STRING is not new enough)" ]) ]) AC_MSG_RESULT([$result$resultstr]) AS_IF([test ${result:-no} = yes], [$2], [$3]) dnl Exported symbols AC_SUBST([CRYPTOPP_CPPFLAGS])dnl AC_SUBST([CRYPTOPP_LDFLAGS])dnl AC_SUBST([CRYPTOPP_LIBS])dnl m4_undefine([MIN_CRYPTO_VERSION])dnl ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/kde.m40000644000175000017500000001102512050266603017054 0ustar l3onl3onAC_DEFUN([KDE_CONFIG_OPTIONS], [ AC_ARG_WITH( [kde4-config], [AS_HELP_STRING([--with-kde4-config=PATH], [kde4-config script to use])], [KDE4_CONFIG=$withval], [KDE4_CONFIG=""]) AC_ARG_ENABLE( [kde-in-home], [AS_HELP_STRING([--enable-kde-in-home], [install KDE related stuff in your home dir])], [KDE_IN_HOME=$enableval], [KDE_IN_HOME=no]) ]) AC_DEFUN([KDE_CONFIG_CHECK], [ AS_IF([test -z ${KDE4_CONFIG}], [ AC_PATH_PROG(KDE4_CONFIG, kde4-config) ], [ AC_MSG_CHECKING(for kde4-config) AS_IF([test ! -x KDE4_CONFIG], [ KDE4_CONFIG="not found" AC_MSG_RESULT(not found) exit 1 ]) ]) AS_IF([ test "${KDE4_CONFIG}" != "not found"], [ KDE_CONF_VER=`${KDE4_CONFIG} --version | grep KDE | sed -e 's/^.*: //' -e 's/ (.*$//'` AS_IF([test `echo ${KDE_CONF_VER} | sed -e 's/\..*$//'` = 4], [ AC_MSG_RESULT(found ${KDE4_CONFIG} with version ${KDE_CONF_VER}) ], [ AC_MSG_RESULT(at least version 4 required) exit 1 ]) ], [ AC_MSG_RESULT(not found) exit 1 ]) AC_SUBST(KDE4_CONFIG) ]) AC_DEFUN([KDE_HEADER_CHECK], [ AC_MSG_CHECKING(for kde4 headers) [KDE_HEADER_DIR=`${KDE4_CONFIG} --path include`] AS_IF([test -f ${KDE_HEADER_DIR}kdirwatch.h], [ AS_IF([test -f ${KDE_HEADER_DIR}plasma/dataengine.h], [ AC_MSG_RESULT(${KDE_HEADER_DIR}) ], [ AC_MSG_RESULT(dataengine.h not found) exit 1 ]) ], [ AC_MSG_RESULT(kdirwatch.h not found) exit 1 ]) AC_SUBST(KDE_HEADER_DIR) ]) AC_DEFUN([KDE_SERVICE_PATH_CHECK], [ AC_REQUIRE([AC_PROG_EGREP]) AC_MSG_CHECKING(for kde4 services Path) AS_IF([test `echo ${prefix} | grep home | wc -l` == 1], [ KDE_IN_HOME="yes" ]) AS_IF([test ${KDE_IN_HOME} = "yes"], [ KDE_SERVICE_PATH=`${KDE4_CONFIG} --path services | tr ":" "\n" | $EGREP '(/home|/root)' | head -1` ], [ KDE_SERVICE_PATH=`${KDE4_CONFIG} --path services | tr ":" "\n" | grep /usr | head -1` ]) AC_MSG_RESULT(${KDE_SERVICE_PATH}) AC_SUBST(KDE_SERVICE_PATH) ]) AC_DEFUN([KDE_MODULE_PATH_CHECK], [ AC_REQUIRE([AC_PROG_EGREP]) AC_MSG_CHECKING(for kde4 plugins Path) AS_IF([test `echo ${prefix} | grep home | wc -l` == 1], [ KDE_IN_HOME="yes" ]) AS_IF([test ${KDE_IN_HOME} = "yes"], [ KDE_MODULE_PATH=`${KDE4_CONFIG} --path module | tr ":" "\n" | $EGREP '(/home|/root)' | head -1` ], [ KDE_MODULE_PATH=`${KDE4_CONFIG} --path module | tr ":" "\n" | grep /usr | head -1` ]) AC_MSG_RESULT(${KDE_MODULE_PATH}) AC_SUBST(KDE_MODULE_PATH) ]) AC_DEFUN([KDE_ICON_PATH_CHECK], [ AC_REQUIRE([AC_PROG_EGREP]) AC_MSG_CHECKING(for kde4 icons Path) AS_IF([test `echo ${prefix} | grep home | wc -l` == 1], [ KDE_IN_HOME="yes" ]) AS_IF([test ${KDE_IN_HOME} = "yes"], [ KDE_ICON_PATH=`${KDE4_CONFIG} --path icon | tr ":" "\n" | $EGREP '(/home|/root)' | head -1` ], [ KDE_ICON_PATH=`${KDE4_CONFIG} --path icon | tr ":" "\n" | grep /usr | head -1` ]) KDE_ICON_PATH=${KDE_ICON_PATH}hicolor/scalable/mimetypes/ AC_MSG_RESULT(${KDE_ICON_PATH}) AC_SUBST(KDE_ICON_PATH) ]) AC_DEFUN([KDE_MIME_PATH_CHECK], [ AC_REQUIRE([AC_PROG_EGREP]) AC_MSG_CHECKING(for location for mime-type installation) AS_IF([test `echo ${prefix} | grep home | wc -l` == 1], [ KDE_IN_HOME="yes" ]) AS_IF([test ${KDE_IN_HOME} = "yes"], [ KDE_MIME_PATH=`${KDE4_CONFIG} --path xdgdata-mime | tr ":" "\n" | $EGREP '(/home|/root)' | head -1` ], [ AS_IF([test -n ${prefix}], [ KDE_MIME_PATH=`${KDE4_CONFIG} --path xdgdata-mime | tr ":" "\n" | grep ${prefix} | head -1` AS_IF([test -n ${KDE_MIME_PATH}], [ KDE_MIME_PATH=`${KDE4_CONFIG} --path xdgdata-mime | tr ":" "\n" | $EGREP -v '(/home|/root)' | head -1` ]) ], [ KDE_MIME_PATH=`${KDE4_CONFIG} --path xdgdata-mime | tr ":" "\n" | $EGREP -v '(/home|/root)' | head -1` ]) ]) AC_MSG_RESULT(${KDE_MIME_PATH}) AC_SUBST(KDE_MIME_PATH) ]) AC_DEFUN([KDE_APPLNK_PATH_CHECK], [ AC_REQUIRE([AC_PROG_EGREP]) AC_MSG_CHECKING(for kde4 applinks Path) AS_IF([test `echo ${prefix} | grep home | wc -l` == 1], [ KDE_IN_HOME="yes" ]) AS_IF([test ${KDE_IN_HOME} = "yes"], [ KDE_APPLNK_PATH=`${KDE4_CONFIG} --path xdgdata-apps | tr ":" "\n" | $EGREP '(/home|/root)' | head -1` ], [ AS_IF([test -n ${prefix}], [ KDE_APPLNK_PATH=`${KDE4_CONFIG} --path xdgdata-apps | tr ":" "\n" | grep ${prefix} | head -1` AS_IF([test -n ${KDE_APPLNK_PATH}], [ KDE_APPLNK_PATH=`${KDE4_CONFIG} --path xdgdata-apps | tr ":" "\n" | grep -vE '(/home|/root)' | head -1` ]) ], [ KDE_APPLNK_PATH=`${KDE4_CONFIG} --path xdgdata-apps | tr ":" "\n" | grep -vE '(/home|/root)' | head -1` ]) ]) AC_MSG_RESULT(${KDE_APPLNK_PATH}) AC_SUBST(KDE_APPLNK_PATH) ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/lcmessage.m40000644000175000017500000000261610753565633020277 0ustar l3onl3on# lcmessage.m4 serial 3 (gettext-0.11.3) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can 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 package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995. # Check whether LC_MESSAGES is available in . AC_DEFUN([AM_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/inttypes_h.m40000644000175000017500000000207310753565633020517 0ustar l3onl3on# inttypes_h.m4 serial 4 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([jm_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1;], jm_ac_cv_header_inttypes_h=yes, jm_ac_cv_header_inttypes_h=no)]) if test $jm_ac_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/ulonglong.m40000644000175000017500000000200010753565633020323 0ustar l3onl3on# ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40) dnl Copyright (C) 1999-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG], [ AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, [AC_TRY_LINK([unsigned long long ull = 1; int i = 63;], [unsigned long long ullmax = (unsigned long long) -1; return ull << i | ull >> i | ullmax / ull | ullmax % ull;], ac_cv_type_unsigned_long_long=yes, ac_cv_type_unsigned_long_long=no)]) if test $ac_cv_type_unsigned_long_long = yes; then AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, [Define if you have the unsigned long long type.]) fi ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/lib-prefix.m40000644000175000017500000001175510753565633020401 0ustar l3onl3on# lib-prefix.m4 serial 1 (gettext-0.11) dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/libpng.m40000644000175000017500000001266712050266603017601 0ustar l3onl3on# -*- Autoconf -*- # This file is part of the aMule Project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # Any parts of this program derived from the xMule, lMule or eMule project, # or contributed by third-party developers are copyrighted by their # respective authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # dnl --------------------------------------------------------------------------- dnl MULE_CHECK_LIBPNG([VERSION = 1.2.0], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl dnl adds support for --with-libpng-prefix and --with-libpng-config dnl command line options dnl dnl Test for libpng, and define LIBPNG_CFLAGS, LIBPNG_LIBS and LIBPNG_CONFIG_NAME dnl environment variable to override the default name of the libpng-config script dnl to use. Set LIBPNG_CONFIG_PATH to specify the full path to libpng-config - dnl in this case the macro won't even waste time on tests for its existence. dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_LIBPNG], [dnl m4_define([REQUIRED_VERSION], [m4_ifval([$1], [$1], [1.2.0])])dnl m4_define([REQUIRED_VERSION_MAJOR], [m4_bregexp(REQUIRED_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\1])])dnl m4_define([REQUIRED_VERSION_MINOR], [m4_bregexp(REQUIRED_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\2])])dnl m4_define([REQUIRED_VERSION_MICRO], [m4_bregexp(REQUIRED_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\3])])dnl AC_ARG_WITH([libpng-prefix], [AS_HELP_STRING([--with-libpng-prefix=PREFIX], [prefix where libpng is installed (optional)])]) AC_ARG_WITH([libpng-config], [AS_HELP_STRING([--with-libpng-config=CONFIG], [libpng-config script to use (optional)])]) LIBPNG_VERSION= # do we have libpng-config name: it can be libpng-config or libpng12-config or ... AS_IF([test x${LIBPNG_CONFIG_NAME+set} != xset], [LIBPNG_CONFIG_NAME=libpng-config]) AS_IF([test -n "$with_libpng_config"], [LIBPNG_CONFIG_NAME="$with_libpng_config"]) # deal with optional prefix AS_IF([test -n "$with_libpng_prefix"], [LIBPNG_LOOKUP_PATH="$with_libpng_prefix/bin"]) # don't search the PATH if LIBPNG_CONFIG_NAME is absolute filename AS_IF([test -x "$LIBPNG_CONFIG_NAME"], [ AC_MSG_CHECKING([for libpng-config]) LIBPNG_CONFIG_PATH="$LIBPNG_CONFIG_NAME" AC_MSG_RESULT($LIBPNG_CONFIG_PATH) ], [AC_PATH_PROG([LIBPNG_CONFIG_PATH], [$LIBPNG_CONFIG_NAME], [no], [$LIBPNG_LOOKUP_PATH:$PATH])]) AS_IF([test ${LIBPNG_CONFIG_PATH:-no} != no], [ AC_MSG_CHECKING([for libpng version >= REQUIRED_VERSION]) LIBPNG_CONFIG_WITH_ARGS="$LIBPNG_CONFIG_PATH $libpng_config_args" LIBPNG_VERSION=`$LIBPNG_CONFIG_WITH_ARGS --version` libpng_config_major_version=`echo $LIBPNG_VERSION | sed ['s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/']` libpng_config_minor_version=`echo $LIBPNG_VERSION | sed ['s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/']` libpng_config_micro_version=`echo $LIBPNG_VERSION | sed ['s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/']` libpng_ver_ok= MULE_IF([test $libpng_config_major_version -gt REQUIRED_VERSION_MAJOR], [libpng_ver_ok=yes], [test $libpng_config_major_version -eq REQUIRED_VERSION_MAJOR], [ MULE_IF([test $libpng_config_minor_version -gt REQUIRED_VERSION_MINOR], [libpng_ver_ok=yes], [test $libpng_config_minor_version -eq REQUIRED_VERSION_MINOR], [MULE_IF([test $libpng_config_micro_version -ge REQUIRED_VERSION_MICRO], [libpng_ver_ok=yes])]) ]) AS_IF([test -z "$libpng_ver_ok"], [ AS_IF([test -z "$LIBPNG_VERSION"], [AC_MSG_RESULT([no])], [ AC_MSG_RESULT([no (version $LIBPNG_VERSION is not new enough)]) LIBPNG_VERSION= ]) ], [ LIBPNG_LIBS=`$LIBPNG_CONFIG_WITH_ARGS --libs` LIBPNG_LDFLAGS=`$LIBPNG_CONFIG_WITH_ARGS --ldflags | sed -e "s/ *${LIBPNG_LIBS}$//"` LIBPNG_CFLAGS=`$LIBPNG_CONFIG_WITH_ARGS --cflags` AC_MSG_RESULT([yes (version $LIBPNG_VERSION)]) AC_MSG_CHECKING([if libpng is usable]) SAVED_CFLAGS=$CFLAGS SAVED_LDFLAGS=$LDFLAGS SAVED_LIBS=$LIBS CFLAGS="$CFLAGS $LIBPNG_CFLAGS" LDFLAGS="$LDFLAGS $LIBPNG_LDFLAGS" LIBS="$LIBS $LIBPNG_LIBS" AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include #include ]], [[ png_uint_32 libpng_vn = png_access_version_number(); printf("\nlibpng version %i\n\n", libpng_vn); ]]) ], [ AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no (failed to compile and link test program)]) LIBPNG_LIBS= LIBPNG_LDFLAGS= LIBPNG_CFLAGS= LIBPNG_VERSION= ]) CFLAGS=$SAVED_CFLAGS LDFLAGS=$SAVED_LDFLAGS LIBS=$SAVED_LIBS ]) ]) AS_IF([test -n "$LIBPNG_VERSION"], [$2], [$3]) AC_SUBST([LIBPNG_CFLAGS])dnl AC_SUBST([LIBPNG_LDFLAGS])dnl AC_SUBST([LIBPNG_LIBS])dnl m4_undefine([REQUIRED_VERSION])dnl m4_undefine([REQUIRED_VERSION_MAJOR])dnl m4_undefine([REQUIRED_VERSION_MINOR])dnl m4_undefine([REQUIRED_VERSION_MICRO])dnl ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/libupnp.m40000644000175000017500000000646512050266603017776 0ustar l3onl3on# -*- Autoconf -*- # This file is part of the aMule project. # This file is part of the libupnp library project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # dnl -------------------------------------------------------------------------- dnl LIBUPNP_CHECK([VERSION = 1.6.6], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl dnl Check for the libupnp library dnl -------------------------------------------------------------------------- dnl dnl This macro sets these variables: dnl - LIBUPNP_VERSION dnl Something like "1.6.7" dnl - LIBUPNP_CPPFLAGS dnl Flags to be added to CPPFLAGS dnl - LIBUPNP_CFLAGS dnl Flags to be added to CFLAGS dnl - LIBUPNP_LDFLAGS dnl Flags to be added to LDFLAGS dnl - LIBUPNP_LIBS dnl Library to be added to LIBS dnl dnl The LIBUPNP_CPPFLAGS, LIBUPNP_CFLAGS, LIBUPNP_LDFLAGS and LIBUPNP_LIBS variables are also substituted. dnl AC_DEFUN([LIBUPNP_CHECK], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) m4_define([MIN_LIBUPNP_VERSION], [m4_ifval([$1], [$1], [1.6.6])]) dnl Test for --with-libupnp-prefix AC_ARG_WITH( [libupnp-prefix], [AS_HELP_STRING( [--with-libupnp-prefix=PREFIX], [UPnP library location])], [export PKG_CONFIG_PATH=$withval/lib/pkgconfig]) dnl Check for libupnp >= MIN_LIBUPNP_VERSION AS_IF([test $cross_compiling = no], [ AC_MSG_CHECKING([for libupnp version >= MIN_LIBUPNP_VERSION]) AS_IF([test -n "$PKG_CONFIG"], [ AS_IF([$PKG_CONFIG libupnp --exists], [ LIBUPNP_VERSION=`$PKG_CONFIG libupnp --modversion` AS_IF([$PKG_CONFIG libupnp --atleast-version=MIN_LIBUPNP_VERSION], [ result=yes resultstr=" (version $LIBUPNP_VERSION)" LIBUPNP_CPPFLAGS=`$PKG_CONFIG libupnp --cflags-only-I` LIBUPNP_CFLAGS=`$PKG_CONFIG libupnp --cflags-only-other` LIBUPNP_LDFLAGS=`$PKG_CONFIG libupnp --libs-only-L` LIBUPNP_LIBS=`$PKG_CONFIG libupnp --libs-only-other` LIBUPNP_LIBS="$LIBUPNP_LIBS `$PKG_CONFIG libupnp --libs-only-l`" ], [ result=no resultstr=" (version $LIBUPNP_VERSION is not new enough)" ]) ], [ result=no resultstr=" (try to use --with-libupnp-prefix=PREFIX)" ]) ], [ result=no resultstr=" (pkg-config not found)" ]) AC_MSG_RESULT([$result$resultstr]) libupnp_error="libupnp >= MIN_LIBUPNP_VERSION not found$resultstr" ], [ dnl Currently cross-compilation with libupnp is not supported. result=no libupnp_error="cross compiling" ]) dnl Execute the right action. AS_IF([test ${result:-no} = yes], [$2], [$3]) dnl Exported symbols AC_SUBST([LIBUPNP_CPPFLAGS]) AC_SUBST([LIBUPNP_CFLAGS]) AC_SUBST([LIBUPNP_LDFLAGS]) AC_SUBST([LIBUPNP_LIBS]) m4_undefine([MIN_LIBUPNP_VERSION]) ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/stdint_h.m40000644000175000017500000000204310753565633020142 0ustar l3onl3on# stdint_h.m4 serial 2 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([jm_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1;], jm_ac_cv_header_stdint_h=yes, jm_ac_cv_header_stdint_h=no)]) if test $jm_ac_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/pkg.m40000644000175000017500000001207312050266603017076 0ustar l3onl3on# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright (c) 2004-2011 Scott James Remnant ( scott@netsplit.com ). # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # 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. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl 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 ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure 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_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- 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`], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- 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 ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # 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 _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [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 ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [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 .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/plasmamule.m40000644000175000017500000000170612050266603020456 0ustar l3onl3onm4_define([DISABLE_PLASMAMULE], [MULE_ENABLEVAR([plasmamule])=disabled]) AC_DEFUN([PLASMAMULE_CHECKS], [ CHECK_MOC_VERSION AS_IF([test "${QT_MOC}" = "not found"], [DISABLE_PLASMAMULE]) MULE_IF_ENABLED([plasmamule], [ CHECK_QT_HEADERS AS_IF([test -z "${QT_CORE_CXXFLAGS}"], [DISABLE_PLASMAMULE]) ]) MULE_IF_ENABLED([plasmamule], [ KDE_CONFIG_CHECK AS_IF([test "${KDE4_CONFIG}" = "not found"], [DISABLE_PLASMAMULE]) ]) MULE_IF_ENABLED([plasmamule], [ KDE_HEADER_CHECK AS_IF([test -z ${KDE_HEADER_DIR}], [DISABLE_PLASMAMULE]) ]) MULE_IF_ENABLED([plasmamule], [ AS_IF([test -e `$BUILD_CC -print-file-name=libplasma.so` && test -e `$BUILD_CC -print-file-name=libkdecore.so`], [ KDE_APPLNK_PATH_CHECK KDE_SERVICE_PATH_CHECK KDE_MODULE_PATH_CHECK KDE_ICON_PATH_CHECK KDE_MIME_PATH_CHECK ], [DISABLE_PLASMAMULE]) ]) MULE_IF_ENABLED([debug], [ DEBUGFLAG="-D__DEBUG__" AC_SUBST(DEBUGFLAG) ]) ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/zlib.m40000644000175000017500000001130512050266603017252 0ustar l3onl3on# -*- Autoconf -*- # This file is part of the aMule Project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # Any parts of this program derived from the xMule, lMule or eMule project, # or contributed by third-party developers are copyrighted by their # respective authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # dnl ---------------------------------------------------- dnl MULE_CHECK_ZLIB([MIN_ZLIB_VERSION = 1.1.4], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl dnl check if zlib is on the system and is at least MIN_ZLIB_VERSION dnl dnl Add support for --with-zlib command-line parameter. dnl PREFIX may be a directory prefix where zlib is installed, e.g. /usr/local dnl or may be one of the following special keywords: dnl sys - use system zlib dnl dnl Will set the output variables: dnl ZLIB_CPPFLAGS dnl ZLIB_LDFLAGS dnl ZLIB_LIBS dnl ---------------------------------------------------- AC_DEFUN([MULE_CHECK_ZLIB], [dnl m4_define([MIN_ZLIB_VERSION], [m4_ifval([$1], [$1], [1.1.4])])dnl m4_define([zver_max], [m4_bregexp(MIN_ZLIB_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\1])])dnl m4_define([zver_mid], [m4_bregexp(MIN_ZLIB_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\2])])dnl m4_define([zver_min], [m4_bregexp(MIN_ZLIB_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\3])])dnl AC_ARG_WITH([zlib], AS_HELP_STRING([--with-zlib=PREFIX], [use zlib in PREFIX])) case "${with_zlib:-yes}" in no) $3 ;; yes | sys) ;; *) zlib_prefix="$with_zlib" esac MULE_BACKUP([CPPFLAGS]) MULE_BACKUP([LDFLAGS]) MULE_BACKUP([LIBS]) AS_IF([test -n "$zlib_prefix"], [ ZLIB_CPPFLAGS="-I$zlib_prefix/include" ZLIB_LDFLAGS="-L$zlib_prefix/lib" MULE_APPEND([CPPFLAGS], [$ZLIB_CPPFLAGS]) MULE_APPEND([LDFLAGS], [$ZLIB_LDFLAGS]) ], [ ZLIB_CPPFLAGS= ZLIB_LDFLAGS= ]) ZLIB_LIBS="-lz" MULE_PREPEND([LIBS], [$ZLIB_LIBS]) AC_MSG_CHECKING([for zlib >= $1]) AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #include #include ]], [dnl Do not use double-quoting here! char *zver = zlibVersion(); FILE *f=fopen("conftestval", "w"); if (!f) return 1; fprintf(f, "%s", zver[[0]] > 'zver_max' || (zver[[0]] == 'zver_max' && (zver[[2]] > 'zver_mid' || (zver[[2]] == 'zver_mid' && zver[[4]] >= 'zver_min'))) ? "yes" : "no"); fclose(f); f=fopen("conftestver", "w"); if (f) { fprintf(f, "%s", ZLIB_VERSION); fclose(f); } ]) ], [ AS_IF([test -f conftestval], [result=`cat conftestval`], [result=no]) AS_IF([test ${result:-no} = yes], [ AS_IF([test -f conftestver], [ ZLIB_VERSION=`cat conftestver` z_version=" (version $ZLIB_VERSION)" ], [z_version=]) ]) AC_MSG_RESULT([$result$z_version]) ], [ result=no AC_MSG_RESULT([$result]) ], [ result=no z_version= AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include #include ]], [[ printf("\nZLIB_VERSION_START" ZLIB_VERSION "ZLIB_VERSION_END\n\n"); zlibVersion(); ]]) ], [ ZLIB_VERSION=`grep -a '^ZLIB_VERSION_START.*ZLIB_VERSION_END$' conftest$ac_exeext | sed 's/^ZLIB_VERSION_START\(.*\)ZLIB_VERSION_END$/\1/'` cross_zver_max="`echo $ZLIB_VERSION | cut -d. -f1`" cross_zver_mid="`echo $ZLIB_VERSION | cut -d. -f2`" cross_zver_min="`echo $ZLIB_VERSION | cut -d. -f3`" MULE_IF([test "$cross_zver_max" -gt "zver_max"], [result=yes], [test "$cross_zver_max" -eq "zver_max"], [ MULE_IF([test "$cross_zver_mid" -gt "zver_mid"], [result=yes], [test "$cross_zver_mid" -eq "zver_mid"], [MULE_IF([test "$cross_zver_min" -ge "zver_min"], [result=yes])]) ]) AS_IF([test ${result:-no} = yes], [z_version=" (version $ZLIB_VERSION)"]) ]) AC_MSG_RESULT([$result$z_version]) ]) MULE_RESTORE([CPPFLAGS]) MULE_RESTORE([LDFLAGS]) MULE_RESTORE([LIBS]) AS_IF([test ${result:-no} = no], [ ZLIB_CPPFLAGS= ZLIB_LDFLAGS= ZLIB_LIBS= $3 ], [$2]) AC_SUBST([ZLIB_CPPFLAGS])dnl AC_SUBST([ZLIB_LDFLAGS])dnl AC_SUBST([ZLIB_LIBS])dnl m4_undefine([zver_max])dnl m4_undefine([zver_mid])dnl m4_undefine([zver_min])dnl m4_undefine([MIN_ZLIB_VERSION])dnl ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/glibc21.m40000644000175000017500000000172710753565633017561 0ustar l3onl3on# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # Test for the GNU C Library, version 2.1 or newer. # From Bruno Haible. AC_DEFUN([jm_GLIBC21], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, ac_cv_gnu_library_2_1, [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2_1=yes, ac_cv_gnu_library_2_1=no) ] ) AC_SUBST(GLIBC21) GLIBC21="$ac_cv_gnu_library_2_1" ] ) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/lib-link.m40000644000175000017500000005563310753565633020044 0ustar l3onl3on# lib-link.m4 serial 3 (gettext-0.11.3) dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, dnl hardcode_direct, hardcode_minus_L, dnl sys_lib_search_path_spec, sys_lib_dlsearch_path_spec. AC_DEFUN([AC_LIB_RPATH], [ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec" sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH([lib$1-prefix], [ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib$1-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/wxwin.m40000644000175000017500000011136412050266603017474 0ustar l3onl3ondnl --------------------------------------------------------------------------- dnl Author: wxWidgets development team, dnl Francesco Montorsi, dnl Bob McCown (Mac-testing) dnl Creation date: 24/11/2001 dnl RCS-ID: $Id: wxwin.m4 10580 2011-06-13 10:24:37Z gonosztopi $ dnl --------------------------------------------------------------------------- dnl =========================================================================== dnl Table of Contents of this macro file: dnl ------------------------------------- dnl dnl SECTION A: wxWidgets main macros dnl - WX_CONFIG_OPTIONS dnl - WX_CONFIG_CHECK dnl - WXRC_CHECK dnl - WX_STANDARD_OPTIONS dnl - WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS dnl - WX_DETECT_STANDARD_OPTION_VALUES dnl dnl SECTION B: wxWidgets-related utilities dnl - WX_LIKE_LIBNAME dnl - WX_ARG_ENABLE_YESNOAUTO dnl - WX_ARG_WITH_YESNOAUTO dnl dnl SECTION C: messages to the user dnl - WX_STANDARD_OPTIONS_SUMMARY_MSG dnl - WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN dnl - WX_STANDARD_OPTIONS_SUMMARY_MSG_END dnl - WX_BOOLOPT_SUMMARY dnl dnl The special "WX_DEBUG_CONFIGURE" variable can be set to 1 to enable extra dnl debug output on stdout from these macros. dnl =========================================================================== dnl --------------------------------------------------------------------------- dnl Macros for wxWidgets detection. Typically used in configure.in as: dnl dnl AC_ARG_ENABLE(...) dnl AC_ARG_WITH(...) dnl ... dnl WX_CONFIG_OPTIONS dnl ... dnl ... dnl WX_CONFIG_CHECK([2.6.0], [wxWin=1]) dnl if test "$wxWin" != 1; then dnl AC_MSG_ERROR([ dnl wxWidgets must be installed on your system dnl but wx-config script couldn't be found. dnl dnl Please check that wx-config is in path, the directory dnl where wxWidgets libraries are installed (returned by dnl 'wx-config --libs' command) is in LD_LIBRARY_PATH or dnl equivalent variable and wxWidgets version is 2.3.4 or above. dnl ]) dnl fi dnl CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS" dnl CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS_ONLY" dnl CFLAGS="$CFLAGS $WX_CFLAGS_ONLY" dnl dnl LIBS="$LIBS $WX_LIBS" dnl dnl If you want to support standard --enable-debug/unicode/shared options, you dnl may do the following: dnl dnl ... dnl AC_CANONICAL_SYSTEM dnl dnl # define configure options dnl WX_CONFIG_OPTIONS dnl WX_STANDARD_OPTIONS([debug,unicode,shared,toolkit,wxshared]) dnl dnl # basic configure checks dnl ... dnl dnl # we want to always have DEBUG==WX_DEBUG and UNICODE==WX_UNICODE dnl WX_DEBUG=$DEBUG dnl WX_UNICODE=$UNICODE dnl dnl WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS dnl WX_CONFIG_CHECK([2.8.0], [wxWin=1],,[html,core,net,base],[$WXCONFIG_FLAGS]) dnl WX_DETECT_STANDARD_OPTION_VALUES dnl dnl # write the output files dnl AC_CONFIG_FILES([Makefile ...]) dnl AC_OUTPUT dnl dnl # optional: just to show a message to the user dnl WX_STANDARD_OPTIONS_SUMMARY_MSG dnl dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl WX_CONFIG_OPTIONS dnl dnl adds support for --wx-prefix, --wx-exec-prefix, --with-wxdir and dnl --wx-config command line options dnl --------------------------------------------------------------------------- AC_DEFUN([WX_CONFIG_OPTIONS], [ AC_ARG_WITH(wxdir, [ --with-wxdir=PATH Use uninstalled version of wxWidgets in PATH], [ wx_config_name="$withval/wx-config" wx_config_args="--inplace"]) AC_ARG_WITH(wx-config, [ --with-wx-config=CONFIG wx-config script to use (optional)], wx_config_name="$withval" ) AC_ARG_WITH(wx-prefix, [ --with-wx-prefix=PREFIX Prefix where wxWidgets is installed (optional)], wx_config_prefix="$withval", wx_config_prefix="") AC_ARG_WITH(wx-exec-prefix, [ --with-wx-exec-prefix=PREFIX Exec prefix where wxWidgets is installed (optional)], wx_config_exec_prefix="$withval", wx_config_exec_prefix="") ]) dnl Helper macro for checking if wx version is at least $1.$2.$3, set's dnl wx_ver_ok=yes if it is: AC_DEFUN([_WX_PRIVATE_CHECK_VERSION], [ wx_ver_ok="" if test "x$WX_VERSION_FULL" != x ; then if test $wx_config_major_version -gt $1; then wx_ver_ok=yes else if test $wx_config_major_version -eq $1; then if test $wx_config_minor_version -gt $2; then wx_ver_ok=yes else if test $wx_config_minor_version -eq $2; then if test $wx_config_micro_version -ge $3; then wx_ver_ok=yes fi fi fi fi fi fi ]) dnl --------------------------------------------------------------------------- dnl WX_CONFIG_CHECK(VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND dnl [, WX-LIBS [, ADDITIONAL-WX-CONFIG-FLAGS]]]]) dnl dnl Test for wxWidgets, and define WX_C*FLAGS, WX_LIBS and WX_LIBS_STATIC dnl (the latter is for static linking against wxWidgets). Set WX_CONFIG_NAME dnl environment variable to override the default name of the wx-config script dnl to use. Set WX_CONFIG_PATH to specify the full path to wx-config - in this dnl case the macro won't even waste time on tests for its existence. dnl dnl Optional WX-LIBS argument contains comma- or space-separated list of dnl wxWidgets libraries to link against (it may include contrib libraries). If dnl it is not specified then WX_LIBS and WX_LIBS_STATIC will contain flags to dnl link with all of the core wxWidgets libraries. dnl dnl Optional ADDITIONAL-WX-CONFIG-FLAGS argument is appended to wx-config dnl invocation command in present. It can be used to fine-tune lookup of dnl best wxWidgets build available. dnl dnl Example use: dnl WX_CONFIG_CHECK([2.6.0], [wxWin=1], [wxWin=0], [html,core,net] dnl [--unicode --debug]) dnl --------------------------------------------------------------------------- dnl dnl Get the cflags and libraries from the wx-config script dnl AC_DEFUN([WX_CONFIG_CHECK], [ dnl do we have wx-config name: it can be wx-config or wxd-config or ... if test x${WX_CONFIG_NAME+set} != xset ; then WX_CONFIG_NAME=wx-config fi if test "x$wx_config_name" != x ; then WX_CONFIG_NAME="$wx_config_name" fi dnl deal with optional prefixes if test x$wx_config_exec_prefix != x ; then wx_config_args="$wx_config_args --exec-prefix=$wx_config_exec_prefix" WX_LOOKUP_PATH="$wx_config_exec_prefix/bin" fi if test x$wx_config_prefix != x ; then wx_config_args="$wx_config_args --prefix=$wx_config_prefix" WX_LOOKUP_PATH="$WX_LOOKUP_PATH:$wx_config_prefix/bin" fi if test "$cross_compiling" = "yes"; then wx_config_args="$wx_config_args --host=$host_alias" fi dnl don't search the PATH if WX_CONFIG_NAME is absolute filename if test -x "$WX_CONFIG_NAME" ; then AC_MSG_CHECKING(for wx-config) WX_CONFIG_PATH="$WX_CONFIG_NAME" AC_MSG_RESULT($WX_CONFIG_PATH) else AC_PATH_PROG(WX_CONFIG_PATH, $WX_CONFIG_NAME, no, "$WX_LOOKUP_PATH:$PATH") fi if test "$WX_CONFIG_PATH" != "no" ; then WX_VERSION_FULL="" min_wx_version=ifelse([$1], ,2.8.0,$1) if test -z "$5" ; then AC_MSG_CHECKING([for wxWidgets version >= $min_wx_version]) else AC_MSG_CHECKING([for wxWidgets version >= $min_wx_version ($5)]) fi WX_CONFIG_WITH_ARGS="$WX_CONFIG_PATH $wx_config_args $5 $4" WX_VERSION_FULL=`$WX_CONFIG_WITH_ARGS --version 2>/dev/null` wx_config_major_version=`echo $WX_VERSION_FULL | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` wx_config_minor_version=`echo $WX_VERSION_FULL | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` wx_config_micro_version=`echo $WX_VERSION_FULL | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` wx_requested_major_version=`echo $min_wx_version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` wx_requested_minor_version=`echo $min_wx_version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` wx_requested_micro_version=`echo $min_wx_version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` _WX_PRIVATE_CHECK_VERSION([$wx_requested_major_version], [$wx_requested_minor_version], [$wx_requested_micro_version]) if test -n "$wx_ver_ok"; then AC_MSG_RESULT(yes (version $WX_VERSION_FULL)) WX_LIBS=`$WX_CONFIG_WITH_ARGS --libs` WX_RESCOMP=`$WX_CONFIG_WITH_ARGS --rescomp` WX_CPPFLAGS=`$WX_CONFIG_WITH_ARGS --cppflags` WX_CXXFLAGS=`$WX_CONFIG_WITH_ARGS --cxxflags` WX_CFLAGS=`$WX_CONFIG_WITH_ARGS --cflags` WX_CFLAGS_ONLY=`echo $WX_CFLAGS | sed "s@^$WX_CPPFLAGS *@@"` WX_CXXFLAGS_ONLY=`echo $WX_CXXFLAGS | sed "s@^$WX_CFLAGS *@@"` ifelse([$2], , :, [$2]) else if test "x$WX_VERSION_FULL" = x; then dnl no wx-config at all AC_MSG_RESULT(no) else AC_MSG_RESULT(no (version $WX_VERSION_FULL is not new enough)) fi WX_CFLAGS="" WX_CPPFLAGS="" WX_CXXFLAGS="" WX_LIBS="" WX_RESCOMP="" if test ! -z "$5"; then wx_error_message=" The configuration you asked for $PACKAGE_NAME requires a wxWidgets build with the following settings: $5 but such build is not available. To see the wxWidgets builds available on this system, please use 'wx-config --list' command. To use the default build, returned by 'wx-config --selected-config', use the options with their 'auto' default values." fi wx_error_message=" The requested wxWidgets build couldn't be found. $wx_error_message If you still get this error, then check that 'wx-config' is in path, the directory where wxWidgets libraries are installed (returned by 'wx-config --libs' command) is in LD_LIBRARY_PATH or equivalent variable and wxWidgets version is $1 or above." ifelse([$3], , AC_MSG_ERROR([$wx_error_message]), [$3]) fi else WX_CFLAGS="" WX_CPPFLAGS="" WX_CXXFLAGS="" WX_LIBS="" WX_RESCOMP="" ifelse([$3], , :, [$3]) fi AC_SUBST(WX_CPPFLAGS) AC_SUBST(WX_CFLAGS) AC_SUBST(WX_CXXFLAGS) AC_SUBST(WX_CFLAGS_ONLY) AC_SUBST(WX_CXXFLAGS_ONLY) AC_SUBST(WX_LIBS) AC_SUBST(WX_VERSION_FULL) AC_SUBST(WX_RESCOMP) dnl need to export also WX_VERSION_MINOR and WX_VERSION_MAJOR symbols dnl to support wxpresets bakefiles WX_VERSION_MAJOR="$wx_config_major_version" WX_VERSION_MINOR="$wx_config_minor_version" AC_SUBST(WX_VERSION_MAJOR) AC_SUBST(WX_VERSION_MINOR) ]) dnl --------------------------------------------------------------------------- dnl Get information on the wxrc program for making C++, Python and xrs dnl resource files. dnl dnl AC_ARG_ENABLE(...) dnl AC_ARG_WITH(...) dnl ... dnl WX_CONFIG_OPTIONS dnl ... dnl WX_CONFIG_CHECK(2.6.0, wxWin=1) dnl if test "$wxWin" != 1; then dnl AC_MSG_ERROR([ dnl wxWidgets must be installed on your system dnl but wx-config script couldn't be found. dnl dnl Please check that wx-config is in path, the directory dnl where wxWidgets libraries are installed (returned by dnl 'wx-config --libs' command) is in LD_LIBRARY_PATH or dnl equivalent variable and wxWidgets version is 2.6.0 or above. dnl ]) dnl fi dnl dnl WXRC_CHECK([HAVE_WXRC=1], [HAVE_WXRC=0]) dnl if test "x$HAVE_WXRC" != x1; then dnl AC_MSG_ERROR([ dnl The wxrc program was not installed or not found. dnl dnl Please check the wxWidgets installation. dnl ]) dnl fi dnl dnl CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS" dnl CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS_ONLY" dnl CFLAGS="$CFLAGS $WX_CFLAGS_ONLY" dnl dnl LDFLAGS="$LDFLAGS $WX_LIBS" dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl WXRC_CHECK([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) dnl dnl Test for wxWidgets' wxrc program for creating either C++, Python or XRS dnl resources. The variable WXRC will be set and substituted in the configure dnl script and Makefiles. dnl dnl Example use: dnl WXRC_CHECK([wxrc=1], [wxrc=0]) dnl --------------------------------------------------------------------------- dnl dnl wxrc program from the wx-config script dnl AC_DEFUN([WXRC_CHECK], [ AC_ARG_VAR([WXRC], [Path to wxWidget's wxrc resource compiler]) if test "x$WX_CONFIG_NAME" = x; then AC_MSG_ERROR([The wxrc tests must run after wxWidgets test.]) else AC_MSG_CHECKING([for wxrc]) if test "x$WXRC" = x ; then dnl wx-config --utility is a new addition to wxWidgets: _WX_PRIVATE_CHECK_VERSION(2,5,3) if test -n "$wx_ver_ok"; then WXRC=`$WX_CONFIG_WITH_ARGS --utility=wxrc` fi fi if test "x$WXRC" = x ; then AC_MSG_RESULT([not found]) ifelse([$2], , :, [$2]) else AC_MSG_RESULT([$WXRC]) ifelse([$1], , :, [$1]) fi AC_SUBST(WXRC) fi ]) dnl --------------------------------------------------------------------------- dnl WX_LIKE_LIBNAME([output-var] [prefix], [name]) dnl dnl Sets the "output-var" variable to the name of a library named with same dnl wxWidgets rule. dnl E.g. for output-var=='lib', name=='test', prefix='mine', sets dnl the $lib variable to: dnl 'mine_gtk2ud_test-2.8' dnl if WX_PORT=gtk2, WX_UNICODE=1, WX_DEBUG=1 and WX_VERSION=28 dnl --------------------------------------------------------------------------- AC_DEFUN([WX_LIKE_LIBNAME], [ wx_temp="$2""_""$WX_PORT" dnl add the [u][d] string if test "$WX_UNICODE" = "1"; then wx_temp="$wx_temp""u" fi if test "$WX_DEBUG" = "1"; then wx_temp="$wx_temp""d" fi dnl complete the name of the lib wx_temp="$wx_temp""_""$3""-$WX_VERSION_MAJOR.$WX_VERSION_MINOR" dnl save it in the user's variable $1=$wx_temp ]) dnl --------------------------------------------------------------------------- dnl WX_ARG_ENABLE_YESNOAUTO/WX_ARG_WITH_YESNOAUTO dnl dnl Two little custom macros which define the ENABLE/WITH configure arguments. dnl Macro arguments: dnl $1 = the name of the --enable / --with feature dnl $2 = the name of the variable associated dnl $3 = the description of that feature dnl $4 = the default value for that feature dnl $5 = additional action to do in case option is given with "yes" value dnl --------------------------------------------------------------------------- AC_DEFUN([WX_ARG_ENABLE_YESNOAUTO], [AC_ARG_ENABLE($1, AC_HELP_STRING([--enable-$1], [$3 (default is $4)]), [], [enableval="$4"]) dnl Show a message to the user about this option AC_MSG_CHECKING([for the --enable-$1 option]) if test "$enableval" = "yes" ; then AC_MSG_RESULT([yes]) $2=1 $5 elif test "$enableval" = "no" ; then AC_MSG_RESULT([no]) $2=0 elif test "$enableval" = "auto" ; then AC_MSG_RESULT([will be automatically detected]) $2="auto" else AC_MSG_ERROR([ Unrecognized option value (allowed values: yes, no, auto) ]) fi ]) AC_DEFUN([WX_ARG_WITH_YESNOAUTO], [AC_ARG_WITH($1, AC_HELP_STRING([--with-$1], [$3 (default is $4)]), [], [withval="$4"]) dnl Show a message to the user about this option AC_MSG_CHECKING([for the --with-$1 option]) if test "$withval" = "yes" ; then AC_MSG_RESULT([yes]) $2=1 $5 dnl NB: by default we don't allow --with-$1=no option dnl since it does not make much sense ! elif test "$6" = "1" -a "$withval" = "no" ; then AC_MSG_RESULT([no]) $2=0 elif test "$withval" = "auto" ; then AC_MSG_RESULT([will be automatically detected]) $2="auto" else AC_MSG_ERROR([ Unrecognized option value (allowed values: yes, auto) ]) fi ]) dnl --------------------------------------------------------------------------- dnl WX_STANDARD_OPTIONS([options-to-add]) dnl dnl Adds to the configure script one or more of the following options: dnl --enable-[debug|unicode|shared|wxshared|wxdebug] dnl --with-[gtk|msw|motif|x11|mac|mgl|dfb] dnl Then checks for their presence and eventually set the DEBUG, UNICODE, SHARED, dnl PORT, WX_SHARED, WX_DEBUG, variables to one of the "yes", "no", "auto" values. dnl dnl Note that e.g. UNICODE != WX_UNICODE; the first is the value of the dnl --enable-unicode option (in boolean format) while the second indicates dnl if wxWidgets was built in Unicode mode (and still is in boolean format). dnl --------------------------------------------------------------------------- AC_DEFUN([WX_STANDARD_OPTIONS], [ dnl the following lines will expand to WX_ARG_ENABLE_YESNOAUTO calls if and only if dnl the $1 argument contains respectively the debug,unicode or shared options. ifelse(regexp([$1], [\bdebug]), [-1],, [WX_ARG_ENABLE_YESNOAUTO([debug], [DEBUG], [Build in debug mode], [auto])]) ifelse(index([$1], [unicode]), [-1],, [WX_ARG_ENABLE_YESNOAUTO([unicode], [UNICODE], [Build in Unicode mode], [auto])]) ifelse(regexp([$1], [\bshared]), [-1],, [WX_ARG_ENABLE_YESNOAUTO([shared], [SHARED], [Build as shared library], [auto])]) dnl WX_ARG_WITH_YESNOAUTO cannot be used for --with-toolkit since it's an option dnl which must be able to accept the auto|gtk1|gtk2|msw|... values ifelse(index([$1], [toolkit]), [-1],, [ AC_ARG_WITH([toolkit], AC_HELP_STRING([--with-toolkit], [Build against a specific wxWidgets toolkit (default is auto)]), [], [withval="auto"]) dnl Show a message to the user about this option AC_MSG_CHECKING([for the --with-toolkit option]) if test "$withval" = "auto" ; then AC_MSG_RESULT([will be automatically detected]) TOOLKIT="auto" else TOOLKIT="$withval" dnl PORT must be one of the allowed values if test "$TOOLKIT" != "gtk1" -a "$TOOLKIT" != "gtk2" -a \ "$TOOLKIT" != "msw" -a "$TOOLKIT" != "motif" -a \ "$TOOLKIT" != "x11" -a "$TOOLKIT" != "mac" -a \ "$TOOLKIT" != "mgl" -a "$TOOLKIT" != "dfb" -a \ "$TOOLKIT" != "base" -a "$TOOLKIT" != "cocoa" -a \ "$TOOLKIT" != "osx_cocoa"; then AC_MSG_ERROR([ Unrecognized option value (allowed values: auto, gtk1, gtk2, msw, motif, x11, mac, mgl, dfb, base, cocoa, osx_cocoa) ]) fi AC_MSG_RESULT([$TOOLKIT]) fi ]) dnl ****** IMPORTANT ******* dnl Unlike for the UNICODE setting, you can build your program in dnl shared mode against a static build of wxWidgets. Thus we have the dnl following option which allows these mixtures. E.g. dnl dnl ./configure --disable-shared --with-wxshared dnl dnl will build your library in static mode against the first available dnl shared build of wxWidgets. dnl dnl Note that's not possible to do the viceversa: dnl dnl ./configure --enable-shared --without-wxshared dnl dnl Doing so you would try to build your library in shared mode against a static dnl build of wxWidgets. This is not possible (you would mix PIC and non PIC code) ! dnl A check for this combination of options is in WX_DETECT_STANDARD_OPTION_VALUES dnl (where we know what 'auto' should be expanded to). dnl dnl If you try to build something in ANSI mode against a UNICODE build dnl of wxWidgets or in RELEASE mode against a DEBUG build of wxWidgets, dnl then at best you'll get ton of linking errors ! dnl ************************ ifelse(index([$1], [wxshared]), [-1],, [ WX_ARG_WITH_YESNOAUTO( [wxshared], [WX_SHARED], [Force building against a shared build of wxWidgets, even if --disable-shared is given], [auto], [], [1]) ]) dnl Just like for SHARED and WX_SHARED it may happen that some adventurous dnl peoples will want to mix a wxWidgets release build with a debug build of dnl his app/lib. So, we have both DEBUG and WX_DEBUG variables. ifelse(index([$1], [wxdebug]), [-1],, [ WX_ARG_WITH_YESNOAUTO( [wxdebug], [WX_DEBUG], [Force building against a debug build of wxWidgets, even if --disable-debug is given], [auto], [], [1]) ]) dnl WX_ARG_WITH_YESNOAUTO cannot be used for --with-wxversion since it's an option dnl which must be able to accept the auto|28|29... values ifelse(index([$1], [wxversion]), [-1],, [ AC_ARG_WITH([wxversion], AC_HELP_STRING([--with-wxversion], [Build against a specific version of wxWidgets (default is auto)]), [], [withval="auto"]) dnl Show a message to the user about this option AC_MSG_CHECKING([for the --with-wxversion option]) if test "$withval" = "auto" ; then AC_MSG_RESULT([will be automatically detected]) WX_VERSION="auto" else wx_requested_major_version=`echo $withval | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).*/\1/'` wx_requested_minor_version=`echo $withval | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).*/\2/'` dnl both vars above must be exactly 1 digit if test "${#wx_requested_major_version}" != "1" -o \ "${#wx_requested_minor_version}" != "1" ; then AC_MSG_ERROR([ Unrecognized option value (allowed values: auto, 2.8, 2.9) ]) fi WX_VERSION="$wx_requested_major_version"".""$wx_requested_minor_version" AC_MSG_RESULT([$WX_VERSION]) fi ]) if test "$WX_DEBUG_CONFIGURE" = "1"; then echo "[[dbg]] DEBUG: $DEBUG, WX_DEBUG: $WX_DEBUG" echo "[[dbg]] UNICODE: $UNICODE, WX_UNICODE: $WX_UNICODE" echo "[[dbg]] SHARED: $SHARED, WX_SHARED: $WX_SHARED" echo "[[dbg]] TOOLKIT: $TOOLKIT, WX_TOOLKIT: $WX_TOOLKIT" echo "[[dbg]] VERSION: $VERSION, WX_VERSION: $WX_VERSION" fi ]) dnl --------------------------------------------------------------------------- dnl WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS dnl dnl Sets the WXCONFIG_FLAGS string using the SHARED,DEBUG,UNICODE variable values dnl which are different from "auto". dnl Thus this macro needs to be called only once all options have been set. dnl --------------------------------------------------------------------------- AC_DEFUN([WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS], [ if test "$WX_SHARED" = "1" ; then WXCONFIG_FLAGS="--static=no " elif test "$WX_SHARED" = "0" ; then WXCONFIG_FLAGS="--static=yes " fi if test "$WX_DEBUG" = "1" ; then WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--debug=yes " elif test "$WX_DEBUG" = "0" ; then WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--debug=no " fi dnl The user should have set WX_UNICODE=UNICODE if test "$WX_UNICODE" = "1" ; then WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--unicode=yes " elif test "$WX_UNICODE" = "0" ; then WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--unicode=no " fi if test "$TOOLKIT" != "auto" ; then WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--toolkit=$TOOLKIT " fi if test "$WX_VERSION" != "auto" ; then WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--version=$WX_VERSION " fi dnl strip out the last space of the string WXCONFIG_FLAGS=${WXCONFIG_FLAGS% } if test "$WX_DEBUG_CONFIGURE" = "1"; then echo "[[dbg]] WXCONFIG_FLAGS: $WXCONFIG_FLAGS" fi ]) dnl --------------------------------------------------------------------------- dnl _WX_SELECTEDCONFIG_CHECKFOR([RESULTVAR], [STRING], [MSG] dnl [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) dnl dnl Outputs the given MSG. Then searches the given STRING in the wxWidgets dnl additional CPP flags and put the result of the search in WX_$RESULTVAR dnl also adding the "yes" or "no" message result to MSG. dnl --------------------------------------------------------------------------- AC_DEFUN([_WX_SELECTEDCONFIG_CHECKFOR], [ if test "$$1" = "auto" ; then dnl The user does not have particular preferences for this option; dnl so we will detect the wxWidgets relative build setting and use it AC_MSG_CHECKING([$3]) dnl set WX_$1 variable to 1 if the $WX_SELECTEDCONFIG contains the $2 dnl string or to 0 otherwise. dnl NOTE: 'expr match STRING REGEXP' cannot be used since on Mac it dnl doesn't work; we use 'expr STRING : REGEXP' instead WX_$1=$(expr "$WX_SELECTEDCONFIG" : ".*$2.*") if test "$WX_$1" != "0"; then WX_$1=1 AC_MSG_RESULT([yes]) ifelse([$4], , :, [$4]) else WX_$1=0 AC_MSG_RESULT([no]) ifelse([$5], , :, [$5]) fi else dnl Use the setting given by the user WX_$1=$$1 fi ]) dnl --------------------------------------------------------------------------- dnl WX_DETECT_STANDARD_OPTION_VALUES dnl dnl Detects the values of the following variables: dnl 1) WX_VERSION dnl 2) WX_UNICODE dnl 3) WX_DEBUG dnl 4) WX_SHARED (and also WX_STATIC) dnl 5) WX_PORT dnl from the previously selected wxWidgets build; this macro in fact must be dnl called *after* calling the WX_CONFIG_CHECK macro. dnl dnl Note that the WX_VERSION_MAJOR, WX_VERSION_MINOR symbols are already set dnl by WX_CONFIG_CHECK macro dnl --------------------------------------------------------------------------- AC_DEFUN([WX_DETECT_STANDARD_OPTION_VALUES], [ WX_VERSION="$WX_VERSION_MAJOR""$WX_VERSION_MINOR" dnl The wx-config we are using understands the "--selected_config" dnl option which returns an easy-parseable string ! WX_SELECTEDCONFIG=$($WX_CONFIG_WITH_ARGS --selected_config) if test "$WX_DEBUG_CONFIGURE" = "1"; then echo "[[dbg]] Using wx-config --selected-config" echo "[[dbg]] WX_SELECTEDCONFIG: $WX_SELECTEDCONFIG" fi dnl we could test directly for WX_SHARED with a line like: dnl _WX_SELECTEDCONFIG_CHECKFOR([SHARED], [shared], dnl [if wxWidgets was built in SHARED mode]) dnl but wx-config --selected-config DOES NOT outputs the 'shared' dnl word when wx was built in shared mode; it rather outputs the dnl 'static' word when built in static mode. if test $WX_SHARED = "1"; then STATIC=0 elif test $WX_SHARED = "0"; then STATIC=1 elif test $WX_SHARED = "auto"; then STATIC="auto" fi dnl Now set the WX_UNICODE, WX_DEBUG, WX_STATIC variables _WX_SELECTEDCONFIG_CHECKFOR([UNICODE], [unicode], [if wxWidgets was built with UNICODE enabled]) _WX_SELECTEDCONFIG_CHECKFOR([DEBUG], [debug], [if wxWidgets was built in DEBUG mode]) _WX_SELECTEDCONFIG_CHECKFOR([STATIC], [static], [if wxWidgets was built in STATIC mode]) dnl init WX_SHARED from WX_STATIC if test "$WX_STATIC" != "0"; then WX_SHARED=0 else WX_SHARED=1 fi AC_SUBST(WX_UNICODE) AC_SUBST(WX_DEBUG) AC_SUBST(WX_SHARED) dnl detect the WX_PORT to use if test "$TOOLKIT" = "auto" ; then dnl The user does not have particular preferences for this option; dnl so we will detect the wxWidgets relative build setting and use it AC_MSG_CHECKING([which wxWidgets toolkit was selected]) WX_GTKPORT1=$(expr "$WX_SELECTEDCONFIG" : ".*gtk1.*") WX_GTKPORT2=$(expr "$WX_SELECTEDCONFIG" : ".*gtk2.*") WX_MSWPORT=$(expr "$WX_SELECTEDCONFIG" : ".*msw.*") WX_MOTIFPORT=$(expr "$WX_SELECTEDCONFIG" : ".*motif.*") WX_MACPORT=$(expr "$WX_SELECTEDCONFIG" : ".*mac.*") WX_X11PORT=$(expr "$WX_SELECTEDCONFIG" : ".*x11.*") WX_MGLPORT=$(expr "$WX_SELECTEDCONFIG" : ".*mgl.*") WX_DFBPORT=$(expr "$WX_SELECTEDCONFIG" : ".*dfb.*") WX_BASEPORT=$(expr "$WX_SELECTEDCONFIG" : ".*base.*") WX_COCOAPORT=$(expr "$WX_SELECTEDCONFIG" : ".*cocoa.*") WX_OSXCOCOAPORT=$(expr "$WX_SELECTEDCONFIG" : ".*osx_cocoa.*") WX_PORT="unknown" if test "$WX_GTKPORT1" != "0"; then WX_PORT="gtk1"; fi if test "$WX_GTKPORT2" != "0"; then WX_PORT="gtk2"; fi if test "$WX_MSWPORT" != "0"; then WX_PORT="msw"; fi if test "$WX_MOTIFPORT" != "0"; then WX_PORT="motif"; fi if test "$WX_MACPORT" != "0"; then WX_PORT="mac"; fi if test "$WX_X11PORT" != "0"; then WX_PORT="x11"; fi if test "$WX_MGLPORT" != "0"; then WX_PORT="mgl"; fi if test "$WX_DFBPORT" != "0"; then WX_PORT="dfb"; fi if test "$WX_BASEPORT" != "0"; then WX_PORT="base"; fi if test "$WX_COCOAPORT" != "0"; then WX_PORT="cocoa"; fi if test "$WX_OSXCOCOAPORT" != "0"; then WX_PORT="osx_cocoa"; fi dnl check at least one of the WX_*PORT has been set ! if test "$WX_PORT" = "unknown" ; then AC_MSG_ERROR([ Cannot detect the currently installed wxWidgets port ! Please check your 'wx-config --cxxflags'... ]) fi AC_MSG_RESULT([$WX_PORT]) else dnl Use the setting given by the user if test -n "$TOOLKIT" ; then WX_PORT=$TOOLKIT else dnl try with PORT WX_PORT=$PORT fi fi AC_SUBST(WX_PORT) if test "$WX_DEBUG_CONFIGURE" = "1"; then echo "[[dbg]] Values of all WX_* options after final detection:" echo "[[dbg]] WX_DEBUG: $WX_DEBUG" echo "[[dbg]] WX_UNICODE: $WX_UNICODE" echo "[[dbg]] WX_SHARED: $WX_SHARED" echo "[[dbg]] WX_VERSION: $WX_VERSION" echo "[[dbg]] WX_PORT: $WX_PORT" fi dnl Avoid problem described in the WX_STANDARD_OPTIONS which happens when dnl the user gives the options: dnl ./configure --enable-shared --without-wxshared dnl or just do dnl ./configure --enable-shared dnl but there is only a static build of wxWidgets available. if test "$WX_SHARED" = "0" -a "$SHARED" = "1"; then AC_MSG_ERROR([ Cannot build shared library against a static build of wxWidgets ! This error happens because the wxWidgets build which was selected has been detected as static while you asked to build $PACKAGE_NAME as shared library and this is not possible. Use the '--disable-shared' option to build $PACKAGE_NAME as static library or '--with-wxshared' to use wxWidgets as shared library. ]) fi dnl now we can finally update the DEBUG,UNICODE,SHARED options dnl to their final values if they were set to 'auto' if test "$DEBUG" = "auto"; then DEBUG=$WX_DEBUG dnl in case user wants a BUILD=debug/release var... if test "$DEBUG" = "1"; then BUILD="debug" elif test "$DEBUG" = ""; then BUILD="release" fi fi if test "$UNICODE" = "auto"; then UNICODE=$WX_UNICODE fi if test "$SHARED" = "auto"; then SHARED=$WX_SHARED fi if test "$TOOLKIT" = "auto"; then TOOLKIT=$WX_PORT fi ]) dnl --------------------------------------------------------------------------- dnl WX_BOOLOPT_SUMMARY([name of the boolean variable to show summary for], dnl [what to print when var is 1], dnl [what to print when var is 0]) dnl dnl Prints $2 when variable $1 == 1 and prints $3 when variable $1 == 0. dnl This macro mainly exists just to make configure.ac scripts more readable. dnl dnl NOTE: you need to use the [" my message"] syntax for 2nd and 3rd arguments dnl if you want that m4 avoid to throw away the spaces prefixed to the dnl argument value. dnl --------------------------------------------------------------------------- AC_DEFUN([WX_BOOLOPT_SUMMARY], [ if test "x$$1" = "x1" ; then echo $2 elif test "x$$1" = "x0" ; then echo $3 else echo "$1 is $$1" fi ]) dnl --------------------------------------------------------------------------- dnl WX_STANDARD_OPTIONS_SUMMARY_MSG dnl dnl Shows a summary message to the user about the WX_* variable contents. dnl This macro is used typically at the end of the configure script. dnl --------------------------------------------------------------------------- AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG], [ echo echo " The wxWidgets build which will be used by $PACKAGE_NAME $PACKAGE_VERSION" echo " has the following settings:" WX_BOOLOPT_SUMMARY([WX_DEBUG], [" - DEBUG build"], [" - RELEASE build"]) WX_BOOLOPT_SUMMARY([WX_UNICODE], [" - UNICODE mode"], [" - ANSI mode"]) WX_BOOLOPT_SUMMARY([WX_SHARED], [" - SHARED mode"], [" - STATIC mode"]) echo " - VERSION: $WX_VERSION_FULL" echo " - PORT: $WX_PORT" ]) dnl --------------------------------------------------------------------------- dnl WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN, WX_STANDARD_OPTIONS_SUMMARY_MSG_END dnl dnl Like WX_STANDARD_OPTIONS_SUMMARY_MSG macro but these two macros also gives info dnl about the configuration of the package which used the wxpresets. dnl dnl Typical usage: dnl WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN dnl echo " - Package setting 1: $SETTING1" dnl echo " - Package setting 2: $SETTING1" dnl ... dnl WX_STANDARD_OPTIONS_SUMMARY_MSG_END dnl dnl --------------------------------------------------------------------------- AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN], [ echo echo " ----------------------------------------------------------------" echo " Configuration for $PACKAGE_NAME $PACKAGE_VERSION successfully completed." echo " Summary of main configuration settings for $PACKAGE_NAME:" WX_BOOLOPT_SUMMARY([DEBUG], [" - DEBUG build"], [" - RELEASE build"]) WX_BOOLOPT_SUMMARY([UNICODE], [" - UNICODE mode"], [" - ANSI mode"]) WX_BOOLOPT_SUMMARY([SHARED], [" - SHARED mode"], [" - STATIC mode"]) ]) AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG_END], [ WX_STANDARD_OPTIONS_SUMMARY_MSG echo echo " Now, just run make." echo " ----------------------------------------------------------------" echo ]) dnl --------------------------------------------------------------------------- dnl Deprecated macro wrappers dnl --------------------------------------------------------------------------- AC_DEFUN([AM_OPTIONS_WXCONFIG], [WX_CONFIG_OPTIONS]) AC_DEFUN([AM_PATH_WXCONFIG], [ WX_CONFIG_CHECK([$1],[$2],[$3],[$4],[$5]) ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/nls.m40000644000175000017500000001053112050266603017106 0ustar l3onl3on# -*- Autoconf -*- # This file is part of the aMule Project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # Any parts of this program derived from the xMule, lMule or eMule project, # or contributed by third-party developers are copyrighted by their # respective authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # dnl ---------------------------------------------------- dnl MULE_CHECK_AUTOPOINT([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl check if autopoint is installed dnl ---------------------------------------------------- AC_DEFUN([MULE_CHECK_AUTOPOINT], [ AC_MSG_CHECKING([for autopoint]) autopoint_version=`autopoint --version | head -n 1 | sed -e 's/.*[[^0-9.]]\([[0-9]]\{1,\}\(\.[[0-9]]\{1,\}\)\{1,2\}\)[[^0-9.]]*/\1/'` AS_IF([test -n "$autopoint_version"], [ AC_MSG_RESULT([yes ($autopoint_version)]) $1 ], [ AC_MSG_RESULT([no]) $2 ]) ]) dnl --------------------------------------------------------------------------- dnl GENERATE_MANS_TO_INSTALL(TESTNAME, BASENAMEPATH) dnl dnl This function will generate the list of manpages to be installed. dnl dnl TESTNAME is the name of a FEATURE selected by MULE_ARG_ENABLE() if this dnl set of manpages need installing. The list of files will be returned in dnl the TESTNAME_MANPAGES variable. dnl dnl BASENAMEPATH is the path and basename of the manpages we test for, relative dnl to the package root (top_srcdir) dnl --------------------------------------------------------------------------- AC_DEFUN([GENERATE_MANS_TO_INSTALL], [m4_define([MANPAGES], [m4_translit([$1], [a-z-], [A-Z_])[]_MANPAGES])dnl MULE_IF_ENABLED([$1], [ AS_IF([test -z "$LINGUAS"], [MANPAGES=`ls -1 ${srcdir}/$2.* | sed -e 's:.*/::g'`], [ MANPAGES=`ls -1 ${srcdir}/$2.* | sed -e 's:.*/::g' | grep $Generate_Langs` MANPAGES="`basename $2.1` $[]MANPAGES" ]) MANPAGES=`echo $[]MANPAGES | tr -d '\n'` ], [MANPAGES=]) AC_SUBST(MANPAGES)dnl m4_undefine([MANPAGES])dnl ]) dnl --------------------------------------------------------------------------- dnl MULE_CHECK_NLS dnl dnl Checks and tests everything needed for Native Language Support dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_NLS], [ AC_ARG_WITH([language], [AS_HELP_STRING([--with-language=], [Specify a comma-separated list of languages you want to have installed. See po/LINGUAS for available languages])], [AS_IF([test "$withval" != "all"], [LINGUAS="`echo $withval | sed -e 's/,/ /g'`"])]) AM_GNU_GETTEXT([no-libtool], [need-ngettext]) AS_IF([test $USE_INCLUDED_LIBINTL = yes], [INCINTL=-I\${top_builddir}/intl]) AS_IF([test x$USE_NLS = xyes], [MULE_CHECK_AUTOPOINT(, [USE_NLS=no])]) AS_IF([test x$USE_NLS = xno -a x${enable_nls:-yes} = xyes], [MULE_WARNING([You need to install GNU gettext/gettext-tools to compile aMule with i18n support.])]) AS_IF([test ${USE_NLS:-no} = yes], [ AC_MSG_CHECKING([for requested languages]) Generate_Langs=`echo $LINGUAS | $AWK ['OFS="\\\\|" { for (i = 1; i <= NF; ++i) $i = "\\\\." $i; print }']` GENERATE_MANS_TO_INSTALL([amule-daemon], [docs/man/amuled]) GENERATE_MANS_TO_INSTALL([amulecmd], [docs/man/amulecmd]) GENERATE_MANS_TO_INSTALL([webserver], [docs/man/amuleweb]) GENERATE_MANS_TO_INSTALL([amule-gui], [docs/man/amulegui]) GENERATE_MANS_TO_INSTALL([cas], [src/utils/cas/docs/cas]) GENERATE_MANS_TO_INSTALL([wxcas], [src/utils/wxCas/docs/wxcas]) GENERATE_MANS_TO_INSTALL([ed2k], [docs/man/ed2k]) GENERATE_MANS_TO_INSTALL([alc], [src/utils/aLinkCreator/docs/alc]) GENERATE_MANS_TO_INSTALL([alcc], [src/utils/aLinkCreator/docs/alcc]) GENERATE_MANS_TO_INSTALL([monolithic], [docs/man/amule]) AC_MSG_RESULT([${LINGUAS:-all}]) ]) AC_SUBST([INCINTL])dnl ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/readline.m40000644000175000017500000000420012050266603020071 0ustar l3onl3ondnl dnl Copyright (c) 2003-2011 aMule Team (http://www.amule.org) dnl Copyright (c) 1995-2008 Free Software Foundation, Inc. dnl dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl Original file available from the GNU Autoconf Macro Archive at: dnl http://www.gnu.org/software/ac-archive/htmldoc/vl_lib_readline.html dnl AC_DEFUN([VL_LIB_READLINE], [ AC_CACHE_CHECK([for a readline compatible library], vl_cv_lib_readline, [ ORIG_LIBS="$LIBS" for readline_lib in readline edit editline; do for termcap_lib in "" termcap curses ncurses; do if test -z "$termcap_lib"; then TRY_LIB="-l$readline_lib" else TRY_LIB="-l$readline_lib -l$termcap_lib" fi LIBS="$ORIG_LIBS $TRY_LIB" AC_TRY_LINK_FUNC(readline, vl_cv_lib_readline="$TRY_LIB") if test -n "$vl_cv_lib_readline"; then break fi done if test -n "$vl_cv_lib_readline"; then break fi done if test -z "$vl_cv_lib_readline"; then vl_cv_lib_readline="no" LIBS="$ORIG_LIBS" READLINE_LIBS="" else READLINE_LIBS="$vl_cv_lib_readline" fi ]) if test "$vl_cv_lib_readline" != "no"; then AC_DEFINE(HAVE_LIBREADLINE, 1, [Define if you have a readline compatible library]) AC_CHECK_HEADERS(readline.h readline/readline.h) AC_CACHE_CHECK([whether readline supports history], vl_cv_lib_readline_history, [ vl_cv_lib_readline_history="no" AC_TRY_LINK_FUNC(add_history, vl_cv_lib_readline_history="yes") ]) if test "$vl_cv_lib_readline_history" = "yes"; then AC_DEFINE(HAVE_READLINE_HISTORY, 1, [Define if your readline library has \`add_history']) AC_CHECK_HEADERS(history.h readline/history.h) fi fi AC_SUBST(READLINE_LIBS) LIBS="$ORIG_LIBS" ])dnl amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/codeset.m40000644000175000017500000000157610753565633017766 0ustar l3onl3on# codeset.m4 serial AM1 (gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(CODESET);], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have and nl_langinfo(CODESET).]) fi ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/qt.m40000644000175000017500000000353412050266603016743 0ustar l3onl3onAC_DEFUN([QT_CONFIG_OPTIONS], [ AC_ARG_WITH( [moc], [AS_HELP_STRING([--with-moc=PATH], [Search in PATH for Qt's meta object compiler])], [QT_MOC=$withval], [QT_MOC=""]) ]) AC_DEFUN([CHECK_MOC_VERSION], [ AS_IF([test -z ${QT_MOC}], [ AC_PATH_PROGS(QT_MOC, moc-qt4 moc) AS_IF([test -z ${QT_MOC}], [ echo moc not found exit 1 ]) ], [ AC_MSG_CHECKING(for moc) AS_IF([test -x ${QT_MOC}], [ AC_MSG_RESULT(${QT_MOC}) AC_SUBST(QT_MOC) ], [ AC_MSG_RESULT("not found") QT_MOC="not found" exit 1 ]) ]) AS_IF([test "${QT_MOC}" != "not found"], [ AC_MSG_CHECKING(for moc version >= 4) QT_MOC_VERSION=`${QT_MOC} -v 2>&1 | sed -e 's/^.* (/(/'` AS_IF([test `echo ${QT_MOC_VERSION} | sed -e 's/^.* //' -e 's/\..*$//'` = 4], [ AC_MSG_RESULT(found ${QT_MOC_VERSION}) ], [ AC_MSG_RESULT(not found ${QT_MOC_VERSION} is too old) QT_MOC="not found" exit 1 ]) ]) ]) AC_DEFUN([CHECK_QT_HEADERS], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_MSG_CHECKING(for qt) AS_IF([test `${PKG_CONFIG} QtCore` --exists && `${PKG_CONFIG} QtGui --exists`], [ AC_MSG_RESULT(found) AC_MSG_CHECKING(for qt core cflags) QT_CORE_CXXFLAGS=`${PKG_CONFIG} --cflags QtCore` AC_MSG_RESULT($QT_CORE_CFLAGS) AC_MSG_CHECKING(for qt core libs) QT_CORE_LIBS=`${PKG_CONFIG} --libs QtCore` AC_MSG_RESULT($QT_CORE_LIBS) AC_MSG_CHECKING(for qt gui cflags) QT_GUI_CXXFLAGS=`${PKG_CONFIG} --cflags QtGui` AC_MSG_RESULT($QT_GUI_CFLAGS) AC_MSG_CHECKING(for qt gui libs) QT_GUI_LIBS=`${PKG_CONFIG} --libs QtGui` AC_MSG_RESULT($QT_GUI_LIBS) ], [AC_MSG_RESULT(not found)] exit 1 ) AS_IF([test `${PKG_CONFIG} QtDBus --modversion | sed -e 's/\.//g'` -ge 470 ], [ QT_DBUS_LDFLAGS="-lQtDBus" AC_SUBST(QT_DBUS_LDFLAGS) ]) AC_SUBST(QT_CORE_CXXFLAGS) AC_SUBST(QT_CORE_LIBS) AC_SUBST(QT_GUI_CXXFLAGS) AC_SUBST(QT_GUI_LIBS) ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/inttypes-pri.m40000644000175000017500000000222710753565633021001 0ustar l3onl3on# inttypes-pri.m4 serial 1 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. # Define PRI_MACROS_BROKEN if exists and defines the PRI* # macros to non-string values. This is the case on AIX 4.3.3. AC_DEFUN([gt_INTTYPES_PRI], [ AC_REQUIRE([gt_HEADER_INTTYPES_H]) if test $gt_cv_header_inttypes_h = yes; then AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], gt_cv_inttypes_pri_broken, [ AC_TRY_COMPILE([#include #ifdef PRId32 char *p = PRId32; #endif ], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) ]) fi if test "$gt_cv_inttypes_pri_broken" = yes; then AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, [Define if exists and defines unusable PRI* macros.]) fi ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/fallocate.m40000644000175000017500000000454412050266603020253 0ustar l3onl3on# -*- Autoconf -*- # This file is part of the aMule Project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # Any parts of this program derived from the xMule, lMule or eMule project, # or contributed by third-party developers are copyrighted by their # respective authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # AC_DEFUN([MULE_CHECK_FALLOCATE], [ AC_MSG_CHECKING([for fallocate]) MULE_BACKUP([CPPFLAGS]) MULE_APPEND([CPPFLAGS], [$WX_CPPFLAGS]) AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #define _GNU_SOURCE #ifdef HAVE_FCNTL_H # include #endif #include ]], [[ fallocate(0, 0, 0, 0); ]]) ], [ AH_TEMPLATE([HAVE_FALLOCATE], [Define to 1 if you have the fallocate() function.]) AC_DEFINE([HAVE_FALLOCATE]) AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) ]) MULE_RESTORE([CPPFLAGS]) AC_MSG_CHECKING([for SYS_fallocate]) AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include #include #include ]], [[ syscall(SYS_fallocate, 0, (loff_t)0, (loff_t)0); ]]) ], [ AH_TEMPLATE([HAVE_SYS_FALLOCATE], [Define to 1 if you have the SYS_fallocate syscall number.]) AC_DEFINE([HAVE_SYS_FALLOCATE]) AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) ]) AC_MSG_CHECKING([for posix_fallocate]) AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #define _XOPEN_SOURCE 600 #include #ifdef HAVE_FCNTL_H # include #endif ]], [[ posix_fallocate(0, 0, 0); ]]) ], [ AH_TEMPLATE([HAVE_POSIX_FALLOCATE], [Define to 1 if you have posix_fallocate() and it should be used.]) AC_DEFINE([HAVE_POSIX_FALLOCATE]) AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) ]) ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/m4/iconv.m40000644000175000017500000000665310753565633017457 0ustar l3onl3on# iconv.m4 serial AM4 (gettext-0.11.3) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/amuleadunanza.desktop0000644000175000017500000000017211332327377021760 0ustar l3onl3on[Desktop Entry] Name=aMule-AdunanzA Exec=amule Icon=amuleadunanza Terminal=false Type=Application Categories=Network;P2P; amule-adunanza-2012.1+2.3.1~dfsg1.orig/amule.png0000644000175000017500000004345210753565633017366 0ustar l3onl3on‰PNG  IHDR€€Ã>aË IDATxœì½y”ÝÇußù©úÕo{{¿ÞèÐØ €À¤(Q»m‰vb;±=QâÈrf¢dÙñÅžäÌ;3sâÉØÉxì3GödŽ—‰íر¥X²%96[6"  @bGcí½û­¿½jþø½^‚-À£Ëó#^¿WïýêW÷[÷Þº÷Ö-‹oÓë‘ÔþèTfåÃxlûûÆåh4þ—üði‹òÂôôt˜ÞuW’¼Ý¸CIò§ú§kÏ<ó¬óðƒ·O´~fŸßüÉÉÁÊSáÜ7;;ëW«Uçvwô­Ò·ðZ½Kýþïÿ¾4Z”–NüíBÖý›“û“L8¾ê€ßh4¬ÞwîZ  nwî0Zeþ#0"¾Ç™>ú7wnèsËýb!˜q’Ùív[‘O q{»üÖèÛàµd}ö³Ÿ­?~¼pïÖÑÇ’ÙÓŸ¬W*ãc›·H“¦©j¶1Fq—3¾ €õ$ëñÇ/¼òÊ+¥O}êSºWžýá%59^uÔ@½ÂòÂ4« 2Çñ»bìÞñ6’5??_¨õõmô¯<ó}NÝ[²¥S¯WXlD¤4Ú.ÄB}›ûú¶Ð·“¬={öø—.], ùúQæ/ä¢ùV“œ4IŠår¹ê†sï#Gr†EкWE÷>p`÷Äè¶{[RZÝr¹Ìâââ­\_ @i­‹ÆF7îêK>Yˆ{Ê%‹–ap Ê¦-“X¶âêÅ‹´–Û´SM”jªõþÎÕ¤ô¯¾úê)­uˆna?ßzÇŒÀjµj=ýôÓóʼn=ÇãÙJjË©zJî\Ùxô½ï³O<ùvº\ „ÅþÁ±û†ød=k((iÕlƒ[)Q«142H{~–Ë͘v³C¢!2R÷¼ø[ÿéó_ ‚`hñÛÔ¯ÛFï”ÈÈ+8räȉ¦]?³ÖŒ8˰!ÒÄô¹çÿêñÝÖ…ÿã{¿óýŸJ“xCåÀÖ–Œß* @þÀþ`iffÆß·}Ó½¢}íA©lòÙ_tmê¢8œˆ‚6Ý•[:~Ö £©0 ƒÞ³Üõ>xg`ÈÅetZ­ö¢¨½ØIŒ–dèž ‚”,6DØ®Y¸²‡ÓOüøƒ…ÿéÀ»Nœ8Q|Àæ­©ëÂùóî¦M›GÔòǪ$ÃR*j.X¶¤RÀö]’ ba$Ä)B*a‚]¨èå®^B„ä^À»Ú¼Bï”0äž³.Мk†Ç¼b©¡±ð,hPƱ, ˆ Æ-; ªÓO?¾¿üìüíïÿèàààÐàà`errr½4øëAêòåËîƒ÷ï÷£ÅC¾NŸJóÙ_-S+¬ G7Œ°fÖ~^øå, ù4M#Þ% xgl€Zq¾¨ééélÏþý–¦g¶:JŠª•fp¥á9e(ϲ]«ÐÝhéà‘CïyïÈ膉¥ ›å–-›³“'O®ļ™ƒüv»]yìþ]ßã·.¾¿lKË–‚‚§(=jÊE®^›cqf†¦“C¨%rÃ}Í ÓË_=sæÌ É»`ï¬+xÅè$I²øôÑs_­ÕŠ‹Ýn—‚¯Å0ƒ®°mðLаlé·§Gº§þüZ?]*WÞŸ$ÉØÇ?þñk*€3gÎ ~ö³Ÿÿá×ýfö‚”¥T!‰£1+K@qÙCTëØc{h7šD­…Õ/ÅFà a¤T3SSSÓ¼‹f?¼óáà5иpáÂùvmÛ7\s¦™f°­b±Ø]³­Zjƒë8øÂxÅ«Ï?0¸ðìOlÛ¶ý‡¢$ÛøðÃ×z’lÛ¶ms”ç/]6?ò#?r#$ Ê¥’_VÉ Qk0¡ÏJ²»«ÎŸõäd°ôbæO]¹r¥Á·ð-“aM ´µÖ —¦ç¿Vk,v3Î4sæÏ††®ÓÎÿµ¡¦ PòlkñÊçôW>upKÿ§¢(ét:Erˆá¡!ûøËÇŒÖ^«T___ÉD튭ÃÕŽUŠkŒOÃ6K™"Kríh* ÃøJ§Óéð.‰®ÐíH‰°tüøñiÿäóÆ¬ ¨eY-XŽzª ÉßµÀµ,FG7["SOÿðǽï'<ÏV@ K¥’366j|õñ»¿û»ëƒ]²\.+Û¶mc‰ôHŠ~©rÝì/`Ù­0S^š›Ÿ»<44”’à]1ûáÀú%a;I’ùS§Nµ2±un¥A–edYF7ÎýÝÐ&¹ã|ÜK;ÅxŸWQg¾öý?ðÝù§ããã#ô@ððÃwöîÝ[¾ï¾{“'OZŸÿüçW¶o ¥”l4™6=÷PtÊËC¿I±ÜíÍüLæ1€86±?¼†ÑìÎ;9ÞK@¸=ÀÐSY–-=vìD\Úð™6«2¹I™0,'y÷º¡!Bb’€é8¥æví½Ÿ±Á‘buæð'ÿÖwôÓ•JeE8'N¼’ÍÏ/ˆf³é=ÿüóö?úô?r‘$ €I×08æ'sæøY(¼‹G޹`)ò.ÒÿðÎ.oFÂcÍÌL/oßwߨ•K—6”\%MšËý8“ô{6Ä iP”.}uFï} mgéÚ…[î{O0=·x~tdDïÝw¯óâK/é$ Üçž{ÎLÏÌÈ$Iœ(Ž‹¾ïìÙ<ô]²»4d9ŠJ‘¡±tšÑ "‚N“ø¢fA„Ä~ÿÒ…®ÿ_^xá…#çÏ›&7bß5jàv`uã8&1Vc÷Öñ]W®ÍÔ<{ê–‹‘YóØš( Hº1ƒ[¶rðÑàGËîµéÙý{ùˆwìå—_þ£?úÃN©Xtسõƒ~¶ãÌåùù$I¼r¹\/‹Ã»F‹ß©‚¥ºç(úË>Cƒ@€¨9O%¤2d)L³YY;ñÿ( Ã+iš.!ï"p'ÀcÌòòrRH²]©GoŸj’Њ uW’ BCÔDé.²¾‰í{îWNñâÆ•É‘ÝÌœ?{öJ³ÕR÷zô¾ËçNýØÎm['voß²3 ÃÂ…KW¢]Û¶¼¿ÍdiÆÄ@gp›ftbXš›c)“tÂ8½Èð_}õì3“““˳³³ËäêËðöE(o+Ýδðõîá%!ÄôÓÏ|ýIªƒ_H2Ý^^g Óµ±^5 “”¥¹˯>‹]äßûÔÃk%,>d)5œ&IßôÕ«õš#'.Ÿ<ö©é—žúgû¼O !ê’¤¦&óüÜ>¬%‹«¿Ÿ†­üža„Q~ÚHìkA´|ðÁ×{×ÿ{×Òí¶ —[§µÖÆ3·°Ðزsw!XšÞÛ³Ü;X²!ÔOIì RqÑÅÆ’0¸ãAʦk?y´¿¾ãPëêÕ+m. çîYZL3\ãz…M;ö¦2iVü¬5\”¨ZÙgplm:Íh,.°ØNè&)éÐd2Ÿ•Ÿ¹pþü‰jµÚýçÿüØuèÐÃËŸþô§Gyä‘öŸüÉŸ¬ä1ÞµtÇ€^‚…²,9¿Ô\Ý4¹%i- )€¢çI’XX–£)&mRU`ÓøfÛ‘8ñÜ“"ÌL£80¡ÎN]š«(½¿ê«²£2n»Ee&U°4ÖíFn ÑŒSʃ›ð{Ž¡ùÅ%—Û´£”¸¾]Æyåø‰W^øÁòÔÔT<6>!ì,˜L£NIDd$J,¶Ðh-Rf…4ãÊ+OsåüYæZ]v¢q¥ÓÝv´¼i¢jla×\*KiëŽ[²RÛw¤@ ÂTsúüÍV“Vbe1Q¢\Ùº,¬`yö…K­§“$i6ÍN­VK7Œd¿òÿüûwÅrðNÀJ:¸9î\èû¾¸páÂòàø¤N:m­(ñ] Aª±h)±„ÀhRF-®.µyõÒÓm#¢8qý`¡\/ªÁ²rÊžEOR²%[Pð-|GRµ ¶mã³Ü¸ºÔ&Ê``xíCE "”ÑÐn?+ ¿xöÜù)ÏóBÇq’?øâ—Þ̇;§DÌÊ`¦@§Ùlλ®ë]˜ºøÌû¼oï¹cGjj;·Ø‚OYt“¯\ Ò0®.:‘ îgÔP:ùâ7v&ÂñC1Vv 3 04"èDš±Š¤è[T]ð¤@X $8–È£A–cr/p;–\ ºÑaßþlß¾~ó835ÃÑ8b¬æjS•WŽŸxešž”šØ¸‘»v‰b±À±cÇÞÒóïÛ·ï-}ÿ­ÒmÀM(%w¶4’$qN:õb­VK·ß{ðoŸ}啽­NÇšÅCZ9ÂTPòcI½(ðl(¸¹f[a¼ïHƒåØHÓ"š[ⵋ̜9‚S¥¯>B;–Ô ‘6Ìw`ÞUA³ÕJ饢ýæoÿöªø?vìØ]=ûá@±PX}}íÚ53::*ÈA={ötŸxâ‰Sc£#¯ŒT ;[ŽG!ÓxŒT¡Û¢fÊ‚¢­°l-$RŠãÁwÔêbͳ–°p\‰!É Áì%šW.`E¤p0:åôÆÝ»w9rä|š¦ò¡‡’‡Î6Žo|‡Gëí§Û€?ûê]÷÷oþê¿7ïGÿ;MOaØØ»wÏÈ¥© £Íå¦t\8 )X$ݨ%[ m‰cY«³Þq+iþEWáɛټÛØE€ÈhÒ8­!2ÂjÏ>pÿÁ¼òÊ+ϵÛmuøða~í×M~ï÷~ï»"'à¶à Hÿ·Ÿúde¹Õñ¤Ñ…Â@µ$&6Èo<÷‚v\OŒ”„v©õľ°Äó]…ãH,qsƯßü±BQ–KsWH\WbéŒàÐtêVûÐÈèXߙӧæk ^ËÈ’[?ïÝÑBþß_ûùr¹Ü¹tùÊ«±QyâÕÓçýBñÂxŸ;—Fí¤æBÍ\ ×V×1¿hIú}÷:æm´ºïÌ(Übº#päù#àÀý4k9x²P(´ŒÉšÊ+‚6¦'Æ])°âŒ‚“‚ññE‚Q–²°ÕÓ®)J¸ôœƒè4Æß´—úüÕ¾Õ><úXÀó¿óoèþ=%™ û¾çÑK>}ï{‰'žøÓ»^ Üv(çõ»pìØ1Óó”e@R(Ò8ŽRß–º(‘R¬Øÿàcˆ>Á†ô2ǾöU²Ë/`ÛET.óq8Ò[eü Y¶Kí‘O\Ç|Ïó¹ÿ¿ù)Nt¦9yø 1RO†‹ÅR‰µtfgfß¾¸MtÛÁ~~øðaóÐC¥I’ Ü"aÚ¡NBql'ßýw?ÅУŸXýÎûçìø)Úg¿kåN!%Ö˜/guù£úÆð·¿÷¦÷ö<ŸûãÜù³"ÌœòÐÐÐà©S§VjpÿßâÓß~ºíøÚ_üù›nE¡PJI!…å™ã×ø;ÿø'éÛ÷ÑëÚU+Uîùÿ'×þ¿ÿž«§^¦¿ZZýÌrÖD€°]Š{>Šçù¯{Ï¡G?ÁΧ?ϵ³ýÍ[&'Ÿ}öÙg{+É»`ƒÈm@­¯þf›Š8N¨÷W]mì‚N1±ûCo8{GÿI¢ø%[¸ˆå×Rw¤…p|°*›|Óß÷âÜ«Z½¾··P€h4Zo¶ïw,Ývô Ž½Ù¦B)ûêõ’cë²Æ'·½áìõ6ìføýŸbæþ5RH„èA@¹`Ûôo=ý›¿éãâ}.Ò$ÑŽr¹\jµZ6`=ôÐCÙáÇïjCð¶` V|3Í ²,®ëì¢]Hšžô*ßô‹}û>ЏöÓ‡¿‚U.ö~L‚1!V†Áë‚ÉÝ÷8â÷~Uˆ`yh||bàêÕ«é‚QœÞô;w Ývl³ME·Ûåb±`ÉÔuÝ7`—·çqäɧé4»+6H„ .ކÿóOÿ4ôùßcß}ø·ÿ×/°qãÄußw‡ mA)ž+ŒÝœ ßš=úž‡ïj;àŽŽÜ„YE!m)Âæüë6<}ú$¥üsoÃn†v¾‘ôtvºÈùÓ?ÿŸû¥_äìÅKüÁ~‰ûs?÷šßò<Ÿm[6!…pújµ‡¶mÛÖ8€”½¤Õ»•î*t:ìêÕk4ÍBë›êÞ0 øÉŸúI¾û#æãûO=ýu ×ã®å@7ÆÈ“µq:Wé,/à¨\¶šÍ›Þ[ l§Z¯‘%;·NNn«ÕjEr)pWà¶«€ßþÍÿðfš­¤gs3ÓÍtÇæF;IÍ•+—_3øùçÂç~é‰Ó”Ó—®òóÿûÿÆ£_º>ç Ò°ÍÅç^âïœïù›ßË_ýÙlÜ4Á?ú'Ÿ¹iúûë˜Áªp½l<ËÞß××÷ÒòòrH¤”fiyé®4o;†‡ßlSd­v»µÐè\rÜ{/Î7e£Ù Z©®6êF9òEk… ®u3I~¿%ÝG§ÓD¼ü$Ÿû•_áÂÙ ŒŒ0<<üš‡a@¥¯ùÚ(#ýE¿Ò¹ôÈþýû¿¦lÕ8}êôúâÑwÝv”˵7ÛTY£Ñ¢ =ãoÜbŠJкüÐùä|ŠÏÿîdtt˜ÏþÔ¿àôéS¼jm¢ß…Ôîc :À½n@Ì]½Ê}î{Ý{ž?²›í¥!²ö¬¬Ú¦Ùù…÷K!‘ŒJúj}æÌÙ³wn;úêßÜôÕ¯~Õ|ìc3€v]7ó‹O Òç‡Ì]¹pÕ^­Tùù÷ïøÇÿäŸ200Àðð0GžýK®F>;÷¢2ºÜ¾ïã8Š8N‰2͹óçql‹r±ðš¸ÀÌÌ ~¡€_(ÀÐ8÷Tæý#/4ܾíI’,Ÿ;w.ô¶­[õ݂ۀ¡Úë;rnBÆs]©l§ÔW­ Ùç³té$zìºFžç³gO^õëòå‹d©æž÷~wÎ@ Kc4Vo§g¾Žo-çÆßÂÜêê Ž£°T¾ÔÔQˆ±äêߣ£Ãâ½ï{ÿæ«W.?^­VŽ‘—MxåwîºíȬÂ7móÐC­îÆu\W a¼¾þ~±u¸LCç3ôfºûòå‹„íõ±MÝ.­å&I–Å)Y“¦ iÔ^m±V'(‹BÒ4F)ßÏAÚß߀ïûÜwß>wêÜCt»ÁwNŽ.\»v-ôû¤+áì»n;šÍÆ›m*kß¾}ƒ®ãÖdÿ!7ŒÑ´–¯@£Ù`aa‘ Û%n/Њ ì,­ˆiS)ºéA¯X”m+<µ–F–º6I’Òj5X˜mÄ)—/_æÈóÏ1ØßÏÿè?à}øpßÉSg~HØîÅ/¿ü_ÏŸ?ŸÁûdw n;¾y£œ$ +•rŸÎ’rÿ€¨“¥1Vu8äb|aižf³EšÆ¤I†²-*E¯ØGµ\¥\«P,ðœ^V‰e_·,˦ÕlpêÔi¦¯\æÜ…)?ó$¶ë16¾}üqùá~dò‹_øÂ=öØcø“óçÏÏÑ݂ۀƒ÷?øf› @N]˜jMn,K@ˆLc,I–ÆL/´XXX`fv…&èùé}G¡ü*^±ãã×mF ãOîõÝ$É‹iw"Ò¨M§\8—ocË´àÙg¾ÎƒrðàAuáÜÙÝgÏžûôC?2}þüùÃä+½s÷Žoàm"ȃ–´1®í¸ªP(¥1X’8N™™™fúÊešÝœq–ÑȼF‹Ó§O37=AÈ똯“iÛDsaôõÎC©Z'Hi£u#ÐÆBg)JJdÏEÜmµh‡kN%[j cÆÆFxðýßå}å¾ø¡~øý/?õÔS¿J¾É5=ùÊ©;:XtÛP-W¿y£<ôê¤iZªUjì¿ÿÁÁB¡ λÀ7?K¥TFÚ6:M±- ÂB§iÎ<Ñ wȼ¢B ­ëw IÙÓÿFæŸej]æRŠ §h.Îa)ËõPne+fgçq‡ýïçä‰ãÕË—¯}ßG?òÑÿú§OüiˆÜ@ßɶÀ :pÿ•3Í›7ׯ7n<¸cǶ7oÞì%©æ+øE¾ðûÿ‰©KSHÑ+ÜKúX™¹Îz{ý4 5:MÐI‚NóÉ©³,oÓ{½žt–¡„Ag¹Z0Bá(Iµ\¤\® Ðè,æ‘÷<(‚n{llxà^ò. úû¸ÙõWO|ñ–Žß›¡Û€r­òºWà:thW¡àÿ­}ûnΟãäÉ“„Ý._ÿú³´K«Ì_!f×K!AJ¤²WU°V ÆðéÐí†LM]ÄR6¾£p”ÃÈè(^¡Ä¢(a˶]lÞ´Å_jµwNLLT镳Ÿ˜Ø|ÇF o;^¶mݺ:û:4ÔßWýp¹R;pðàA§Ù\fvf–( ñ š‹s<÷ÜóÜš—ÊÊ/«w©5æ^7ãß°è›&É2–æç–…ëy*&7o"#²¢,#‹#„TìàA' ºCŽãTéå Ø¶{ÝõËŸûÜÛ=dßÝvüñW¾ÂéS§^sõȼ-[¶lo·;÷ïÞµ£P­–‰ãe[”Kec»'OŸáÚµ«=U°F:ÍVE¼N30=¦¯–©$· Ðùgi²ª6òv‚ è§ ޲‘¶Ã=÷ÜCßÀiš’¦ YeÐí¶Ø²i‹(xÞ`_­:ð3?ó3“½g W÷àŽ£Û€—½ÙÛ‚\„ú÷„Ýî–mÛ¶ËLKÒ8¥\®R®”±\L „IyáùçÑëŠ?¯êó+ùè9óWUÀº×½ÏR­9î:Ëð‹&·laï¾{‰ã˜X›Õ%c–Æ´›] ¥‚ܼuÛ˜ïyO>ùW1kgrüøË?þ2¿ô‹¿ðö Þ[¤;G_|ž‘¡‘Õ‹Þ €EÑ„ÁômظQdiLœØ˜åë IDATF”ÊU6On¥äyyàÚ•Kœ?wi©ÕÙ¾ÆäuWo¶gfÍý“† C’edÚ¤&ËX˜ŸÃÅàÀî ?ÓÀ²(mV7·¤YŠí8¢¿¿Äóœ­Ï}㹤÷ àøK/ò¥ÿü…wpT¿9Ý1¸ @mß¾½Új5ûGFFìþþ~Ò8%N",³k÷.ÊõübiYdiÂË/¾DE ÅêŒÎ™»î29£Á ³ŒdEEdå1Bi²$ß–Å µJ‰÷¾ï1F†êDÑÚn¦ ‰£Ü'Búûê¾òŠŠ¥R™\H€—ŽÞTÒÝVº£ð_ø=NŸ=Éé³'¡üBxK sÅþÁ!é8Š$Ë+µÇôõõ³ÿ¾}T«5ªÕ*¶ë13;Íå‹ç‘R§É:ææWšd¤‰&M4I%Ñ W²ú:NºA@EuêÔé/ùË‹¬Vý¶ƒàV`õ¨ØÏ|æ3Ãåri$IR·Õj©( ‰âXcLš$Rk­<Ï©¦q꣬JœjÕj4ÒùÙ™¬ÝlîðürÿÊN\cÌZaá•™ØÅZk2“qÿpöôi†^›*öf(‹cR¡píÜNŽâ[Ý|¸‚ ì,Åvg¾ö%¶s2úŒá}[DzDÖ_4Ab=bz‡N,¸ýB§†Ìhâ ¡T¢Ói›DkÅYBO=ôЃ¿üå/ùwXWNÿ[z˜7 [ øZg;ý™Yø¡êø–ÉÕ‘ÓY.¾3cÄ ­çð”ÀÂÂÊ B‘ÚŠ²Ay,OŸ&Y<ëÓZ\Îs°Óx•á7£j©H×1mv¯Q–$tÃB¯¨¤çyhi‘Æ1I¦±l;ÿmzÖ‹$:˰m›‘á>^üŸÅ×!B€¥ à®ŸÆ1z]ÅÐ8]û, ¤¥(”Ë=Ï_Ïi2À¶$I’$ i£|•û-M±Tf ¯À‘ÿø³Ðœ'Vb]bynËú¾ ÒFXbÍëÖ @&q“A1E\é£ãâ—¢0Ķ%JZ)T«Ý^)MwKœv· PaºI’L”Êåzf»´¢›¼r§Î@ÎeS÷Uª¶BôùkgÁ ­`…‡Bç5¯œ?É©ÃÌÆû>ÄÉãßÄ­j4RÙ«³˜LÓhw)¹ «W-*KbÒL£Ö­ ¢0DYrµM’i¢ÞAÒÆRÞGßgãØfìÎñËÿ ŽŽ±m‘ +WžÞŽ®¡ Cæïû‡”‡7 {»”‹…:¹paŠ8I…â–1n­  JÅ¢Ÿ¥Ù_.+›”r-ßreM&$öÀwb¦‚™—¨àÃuǸZ ×VìR@Íáüù÷Œ¹;÷<ÎéS¯&¯_´Y÷êè,EZвï$)– 1%%®í%1YçL·ÖÛQ¢qmI–Ä´º›m—­÷î£ò¹_äW¯½€_t±=Ìz]†^…rbUü+q½Ú‰²Œ…Pâ¼ü;dÎP裂àù#/27=Ñ毹lýëÒ­Œv’f~·Ó'ÏN‘]úk”«Uj•2•tžÅù„”Ü(Ì¥«¥ÞW”Ÿ4‚Á’àé?øu.ÿÙ¯0:X¥paÌš¸X¥•ÈÞJp'ëy¹Q®Uú´Ötí|ö¯Ìz×–Ääï¥IÂŤKås¿Hka¿³4ŠÔ"[s\x’UG•k++®¢ë)ŠRÆ÷ÂlÿHÞ[é±°°À—¾ôE^8ü,åå¼o¯³êx»èVýº|¥Tuó¦ñûÒ$Ùßi5¬3gNÑívÙ¼e3Ò’$Óg(¨Ü°²­„bïh¸†gZ“¦¶%‰“”TƒI!¸|êUæNuñâÅ«äl¾í‰n%Ü4MËÛwì˜;íG,2åyE¶íØÉ†Í“ðGw`m¼— à/ŸA8 oýHƒ”iš­  Äe!'Nž¥qòI–Î>OÒYÆOš\ÉðèPW¯]Ã+1ZãØ ¥ìüµëa[ÛuóeßDô;!•R‘­c쪥2óÓ—I=oç³_YàÛǵq!Å:H e*ë#‹æLiIâ8Â04<ÌŽ=÷ráÌãúÞÕ Sÿjnnný¡Õo+ÝÊU€ô@ÿ`{6‰Òz½ŸúÄߣR)“$)‘vq€Ö̸z_$hY½v0·Š•gÎK¼­ÅPLša)Á@YÐjw™º8{æ2õ‚¦Tðð-¶i*ºL¡Ó%¾%Б‡Ìb|íàe1õz¾zŠØÃ/wqjÂæ"^e­ …èäÎ,óÀî]åÅô<8«Ÿ¯®ÿ4‚›'–FèF-âuKMÛ’hÙ^uPyáËÍŽ‘–Õš_\žy{Ys=ÝJ@ë,‹t…a˜å¥%Å)Y“ôbôAöÀ"H*¡µ*Ü®ÊõfW[¤×Ý@XXÎ.‚e <)®³¶}GâõÄþPA"Ëåü}·´V5p- e‰ug l£è–$j´^‚²ô;½}’(ñÎZT8)f8ÊF+IØlày.‘å ,I"%ÒR¤qLÐí©¬™V«Õ$÷MÝ’õà­´4ÙŽ!ƒ…ù9Š•Êªç Ét’‘»†c£xEU9п„b%N/Nm‚$#ÌR£q„a&†@ú}‰bíÔ0ßËOõäkYaþŒ—B h#À’8Ãz&ïG¼œ+Y-B&í0¸t^¹BÒŸbÅÕ®Â+Xô§ÄRæ!mÃl–-\ÇÆéÍþN;ÀRy¸ÚQ6RI`i~N _Ž¢hÅú¿ë`mÛv¬”ìL_½jêõ:ífѽ.S'ì¹u;YÊ©‚b›Ó“ò´ÛI¬mÚiÆtfqµ[ayî*ý%•×;D@Î<;g¾o¯É„õgÝÈ|%%ÒZ³ôV0g¦Ó“<5ð×ù „*ÂsçWÿ¡ÈZŠ+‹ÆTǀ潂J¥ 6[]®u,‚Ä aæj °-‹L(»—bÇhmâN^lµZmnQ$n½H yµÚB§ÓN—› ò#Z-±LJœ\Ÿ‘%)—²>ö»tŒà\Cs±kqjÖ â¯&ù9¿iÜa\ œÞ²KÚk"}=Ó¥\aøÍ™/…@*‰»®@„à8eFk«ƒ9š3æF)ÀCKøg62ê(Ùp~°õdMsfª›^)×—‚N³qüùn©è›rÕѶ`QjQ”i*„a¹"Ö& ÑiއŹÙLÙöé©‹’/ÿbîÂ| ¤ÓÓ3‹¥Rñ™0 öÏÌÌLTJE`²</¬5fé8@§†ÓGòŠS3ÚDs ËËFXMÏ/týÂpf²Ø50^Š—Ë¿ÞÁf z³ŠX+@¸áœÀõÌgó ×í Æ¶(ï·Ñ•&¦“ÓÅpà°a~>I,UCÈ`‹‚vÐ]ntÃ'.œ?w¶\©šb±X¾”é¡á‘‘At4ÔN‚~­¥ãØÒ¶¤t¤%åúÒIC¥&[\Z¼¤ÜÂçOŸ>}è°€·ÞNܸL1@<=3³Ô ‚ÿlqnúo(k´j)G¡S R­ÛÍeÝìFÚ“imÂe¿8Ûn/ÍkÄékÓs§;NG¡µÖ6PݸaÓ^üAü<±`ÕU,-|ëµÝqáºÙ¿¾Ë޼ ó¥•'’:Ä1þwø_ècéÌL'%ê4‰—»$%‰3ªèÔ#„‘`i|_›­n«ûÇÇçO´;‹ÍV»EÎ<ûâÅ)ϲ¬b¡P(¹Žãk­+¾çõû¾7 XÀèŽçÅÅrå¾|âY–-¡»’p³1~KôvàÆ¼?¸>÷/n6›Ë•rù/¶ ÑÅK[Š…ÂpšeVš™¤ÓnÎx…âÒðð°,VjݹékS§Ïž½Ün·›Y–u´Ö¹@ÁóÜÔèl°V”¸\y£§}åö+O¹öz½ÞwlgM8¬d )·ç±•ùð: “¦d÷5©í²h¼âà¦U"ÕÀ0è$˜ު71x±}c½ïðÕd\Hy´ÕjÍ “$±“$qÂ0´É7Ž:–eù–e\×):ôðÆV«•ÌÏÏ¿˜$É ó{1ÆÕHóê kÝ¿+ïÿµé­`e¯ý±ïúŽÁf£QÙ³ç»ÙîZ:Ó´Z-}öÜ9377g‡aвxtzæêycŒ2ÆX'IÒÖZ‡/]NÊåJ677» „Zëˆ+•Šéïïwëõ¾r§Óõ‹¾(ë¶vè¬#={m÷·³.§Øê%£9«çÜu¹ë‚M+g)±&ÛÉL:Ï 6)hŠ{ ͧè,Ãä‹0ˆ,1LÖT±Z.}àž½÷¾òÔ“O.j£ã$I#˲LÇQ–e«ã–e™›e™Çñâ‹GŽ,gY.-/Ï8Ž£kµ¾Ê@½Z,øÒ`²n7Hê^»Õíž»p~É¢ V²‡Wñ×Â[ÀêöíGßóžš4¼wqnæ±?{b¦ì(cƒ±”­&¬”",é{…âä†J½Ä–r’(J’$¹–¦Ù|’¦3 œ¨—2mðU. ¤,eMÄFÙÕ¤g d ?¸åRQÚ¯íœu´Ì3xÖ“bîÈ–RöäXO¬ª‹¬7T1Ø`+¡•å?‘²n?‰À'’µjm¢ÓnbÓæM£Ž²:ŽãÔl¥ã8žît»Sq’uØåRy§ë¹“£²$Î,Kµã$¹lÛŽð<·_ZVÁ–Òä·‘‰kËR_µoi` þŠRêL'ˆŽ>óÌ3 yçXó£¿Iz«ÀüZ_ߎ §Nüý{>øØ=÷Üãdñšeoçw0=&ë錨^ýºèd –¬{Œ±ôB¨:ÈR @ÅZ¸Q*| RƒÖ Y"˜O%*]`1ÕÈ•)o‰<|°b»‰I®h§œV%ÅzS@g ]nJVžºÂÿµKó¿-z1º¼TKõ’w¹[8Ð_°w€I…Ì|¡3[ÙB*~Võ¬t9Ì„²UV©˜¶WƤ‘)8®.©”TI™„‰Xh#R#´ƶ¬xiqqnphøË?þøÿýå/ù*ß‚x«ÀÞµkWµ±¸ð×óxßûóWâí¶-‰‚©\t!•K¤¡¿9C©$)GUí4ƒ )„U6Ú”c!e )M”0Vžé)ƒ0k3\HV×Ôy¼øúÇÊŒÎÕÀ·šý 4U›øæIÖD@бÏÜŒÒü,á4±{¿‰côª#¨'7RrÉÿygÒ#Ç‘Ýñ_Ddfefm½²Iv³¹‰",QÒŒ ÆÀ0|òÆø3ðñÕGòÙðÑ'ûJØÇA˜±ERRS¢ÈæÚ[­Y¹F„™Y•Ý$eŠëâ•Ý]™ïÿ–xñÞ h¼Sœ‚±†´(•V: –:Ú>ë´;æ€:‡%”À«h_Zp!.-¼úèúJøMÈgI`€Äd´”àPxø3¬®®’Ä1YQà9!~ðÍîÝÛE*eêüæ÷Úð[-™ä¹Íµæ»ïîñèÁc~úþû|øÑGdÚ°b'¨Ëïb—ûd‡÷)|Èd€ù('Å©À# ±õ7mã³\ D©Æ•ªë’9¡M–ƒçcT[BWZMš)Úž(õ·c0iFày‹záËÅJe,¸ßÖÜ_~o˜ìÅÇC÷dEé”@藍pÕ ¤µ€QQ@š}õ+Â7†O)¹¾¾ù7oÝ"Ë3²,Ç“/ž?Ð÷·×@ØnÛ"‰Ä½oïpáòÞzû-.¾yåµð²”Þ?ç¼ßæÑ_òä—ÿ€™ã³&úqË}ÑD韩¨(ªJ¯PrÐJ¨¥`¬¥Üas‚§ÆÒâ´@¶À¯–ˆ:·UUxM‘)œ -Çgàœ°5 ]×aª˜¿º¡¦´7rk¸”Rh‹S¶x¢T=Mý_Ç$¨z3¬Šˆ®[T”/ݹöLjµ+¸ÝeB‘`ýe~õïŸñ_¿ý Yah·Zf6 ‡,j ¼t{}„mºkk<޽ǟÿâ/¸rå q£³R§ÉýïØýõ?£¢˜bmcŠÊÄÓøN™úUùQD%«&…@aŸûVZk#™%à»?/æuÿÆ+½R”'FãתrU©·O€¢“FH£Y ™µš¹¸ ׃8e”ê9ñ¡6ŸÕÿÍ ÑÆVQ.œ-DqFwí þö{xr>ü˜µ5~ýé§|uû6Ý嵨ÝéÖ{&?hÛøµ0´'Œ=»uŽ3§ÖÙÛ{²ÈׯôûÑhDûÚŸ¡ön’Žn“„K”TOa^5 òñkð° Æ ˜5üIj)E˜ƒß‚X[‚ŠqPÐn9s`ì\›¤hL¦Xi†…ÍzÀ’ÙR,¦·ý¹fj £AÄWƒc™×b¡ÿëæ«Rüsý_XUz(«ç.€DY|)ÉoÿKyŸ«ó1‚ àí÷~Âúé³üÍ­¿f}uÕÇ­Ò?.â8¶#GÈ3bïhD—At¹Öè,!ÓÙ 1Ž‚Ë>~ú9aå ²®¹.WÕ„^M¼ùN ÏSõj Ë-Ã8:,¤@œåžK”.@€T´Šå8 §ªš+¤,¹{>9Èj§¶)‡ Ó<'Ï,ûSÍýƒ…upœã¯¹¼Õ‹xÄòsþ/PYÒ¢Ãä?" 6péâV縞GREUûAÀöö%¢ÃÖ´×›ÄÿñÐò\e íL‡LÒ §ÈÈ9mz4"ª +ÏYåI¶Éн‹ @8‹*j!‹po¨–…åù/lnØ%ŸMx Œ±Øžh¿äö(Êi·O€€’;%¢\”AnÁÕÇ3/ÒiS›2Ma<Ä RKª-oAüõ¿„¶~Ã5X€Ì£†›&ñ£<àëÎÇ zeL6¤[–m5Êóq•ÂA;äñå¸iúJI>¯ € •´ö÷9:< 7š¬ÐóTk(³p…”h,³\s¤—8¬°EýëJâÜà{‚Y\Šýø÷«ÛPƒ’@1›íÑDðh¢YíhÎ,{l´©†4ÊY kH#1h¤€V¡P L5Î÷øÆ,Lg)ƒÌp0JÙ‹s’Ôà·$ë`^°ôž,wÁwB•ú¿4¨¾‘—Î2¼l0ÿK.ªZžz2¦p<ÆÓ q4ÃÚÃ0àò^AE¦G£ Ãê0k …6i‚tä3 ¹‘Üw$«®K“ç’*!$«~•UŽžTƒÍ!I1$Ö%–,· Rì0—DqbC¿e•벫=~û$=Uˆóg{âCAκ¯ˆRA  s$[êllYÇMˆÒõ\Má,7Ìò‚ÑLóÍ‘æî¡a2ž"‚Ïè‚S¾ Á¼‘>ÙIDATKŸ%w†–ÒhR­êˆ‚4·¥÷„D©¹¿ŽW°î&»3LH\…4åz%CDÊu«üãŒÇ#¨ÍÍÍãE¶^J ¼, >|mn¬ÝŸŒ†Ùd<êHßÜH¤)PŽ$©r|ß'Ir­ù®°l÷`e>ß–Y&Hl ‰ȱ¥¨ût¬Ɖhß6É ø­Ôñ¼ñúéÍé…ÀIî|ýurê̦í÷zúñ“'­°Ý>}c÷~øÙD´\%”몞M‚ÕÐU ”Çžôúm#‹Igi™Æ–aoZ­p.th©°­ŽÌËK}¡m.ª¼Òê䳺FšåH§ÅÎ7ß 'êôûÿ½³³³Ç+„¿Ž¨B/iW‹4ùK…ùÓ••Ñ,¶Yš ¥Jƒ0úíΠ(б”òðÜùóGûûƒû÷îï[8œL&ã¢(f”ÜVsxJ¹AØ$|™%z¼|M´&q$ âÖ;d5(<àhšý¶Ñë±›÷:9¹õ=œô:ú·Õ¸ö¤”¡ã8¥~ÿ̵k×N?~ò´?W–za?M’0Kâ~al?ôÜ ×í:V)¼VKôÚ¾ï£üƒƒ}¾¼}K¿÷Ón ×ýÛëׯFYNnÌqIõ¿ñuš¤Üxí§/_ºø‘Î’ŸÏfñ¦ç8þÊúº~ãÍ«Ó[7oî †_k÷¢(šÆqQ¶&pÜøya.8°Iˆ&±Oz½ž;/NôfÙÚñãÇŠ37ïñ}ÙèêÄu ÅB9”€hQî߀ßn‡½s››½ƒÃÖÎóÎWÞ<5¶¢éd«Ó6t¡û³$umQé8"M“ââ¥ËO?üßýÓ'Ÿ|òÀ ™GðRíuPKXêtÚg¥”««kkû{O}©+¥Œ¢h:Ëób‚ÐM1Þ¼>ÉmM‚7¹ïu"Ä ®_4îËÜë䘵TQ< º¦zQo¹®J){Ž’ËWÞ¼ºšŖɳӧOw³, ³$;X9uêÓëׯÿ%ñ÷)±Ï^ò™ŸyðWm’êl t)QÛõfYÝOêíçqöInû½çÄýHíyÒ¨)1š¢©:j 'zò¥)™iPrþ„r~ÐnàïõKÍ-m/U‹Ð¦HokÏáÿZÓÿÛTMMõQ¯`j¢60ëyÍ(©¦ÕgMü4‡ÿ¡l\ŽB+°[IEND®B`‚amule-adunanza-2012.1+2.3.1~dfsg1.orig/amuleguiadunanza.desktop0000644000175000017500000000054311332327377022467 0ustar l3onl3on[Desktop Entry] Name=aMule-AdunanzA_GUI Exec=amulegui Icon=amuleguiadunanza Terminal=false Type=Application Categories=Network;P2P; Comment=aMule AdunanzA remote control Comment[de]=aMule AdunanzA-Fernsteuerung Comment[fr]=Contrôle à distance d'aMule-AdunanzA Comment[hu]=aMule AdunanzA távoli vezérlÅ‘ Comment[it]=Controllo remoto per aMule-AdunanzA amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/0000755000175000017500000000000012053222074017347 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/0000755000175000017500000000000012053222075021145 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Frameworks/0000755000175000017500000000000012053222075023265 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Frameworks/libupnp.3.dylib0000755000175000017500000076256010753565633026166 0ustar l3onl3onÊþº¾ë¨ åp þíúÎ …H__TEXT__text__TEXTÌNÌ€__picsymbolstub1__TEXTbèàbè€ __cstring__TEXTrÈrÈ__const__TEXT‰Ø%‰ØÐ__DATA __data__DATAü__dyld__DATA’ü’ü__la_symbol_ptr__DATA“ü“__nl_symbol_ptr__DATA•\•þ__common__DATA•\D__bss__DATA¥ 8__LINKEDIT°K¨ K¨ HG5×ë@executable_path/../Frameworks/libupnp.3.dylib¦àèÊœ! P**>h€Â>ÄÄ8™½À Ü P@executable_path/../Frameworks/libthreadutil.2.dylib H@executable_path/../Frameworks/libixml.2.dylib 4/usr/lib/libgcc_s.1.dylib 4X/usr/lib/libSystem.B.dylib|¦BŸ}ˆ¦|¦}€cx=ŒŒ~(}‰¦| x=ŒŒ{,N€ }‹cxKÿÿÌ|¦BŸ}h¦|¦=kk}ô}i¦N€ |¦“áÿüBŸè¦”!ÿ <8c]˜88Kÿÿ½€8/€Až| ¦<| x€cÐN€!8!`€ƒáÿü|¦N€ |¦¿¡ÿô|}x8`8Ý8ýà”!ÿ°9,9=”€€½]H£ëxHQí8!P8`€»¡ÿô|¦N€ |¦¿!ÿä|~xBŸ}Cx|š#xè¦|¹+x|Û3x”!ÿP|ü;x8axH])/ž88@„]@žt<_<ß“a<“AH“!P8B]D==_A8<_=8Æ] 8B]P9k]\9]$‰ãxA@<_9J]<8ax‘aD8B]d8€8 8àÈALH•™HÔ+žAÔ/ž@ž<_;Â]lH <_;Â]x<_=“H“aP“AX“Á`“!l8B]¬9k]¼<ßA8<_==_‘a<8B]$=8lAD<_8Æ]„9k]d@8B]D9] 9J]¤‘ahAL<_8ax8B]À8€8 8àAT<_9 8B]ÈA\<_8B]PAdH”Å/ƒ@ž8axH[¥}8axH[Ñ8!°€»!ÿä|¦N€ |¦¿Aÿè|š#x|@&BŸ8€ 8è¦||xA”!ù°;¡@<¥ëxHfY/ƒAž¼<Ÿ£ëx8„\ HX|~y@‚¤ƒãx8€ ¥ëxHf)/ƒAžŒ£ëx8€ Hf}.|{xAtƒãx¥ëx8€Heù/ƒAž\!@€AD;h„ãx©®É®½t€a@H±!@€AD/ƒÿÿ©®Až$<_ƒÂ}`ÃóxHV%8a88 ‘~HT)“¾<ŸÅóxƒãx8„ýÔHKq<Ÿƒãx€„}XHK/›@0/› 8@<ffbþp`fg|–|p|P`ØP.A‘;`HUa†ãx8 |ÛÖ|dx<8à€c}\9|ÙÖ|€ PHL8!P€a»Aÿè|¦}p N€ |¦¿!ÿä|yxBŸ|š#x|½+x覔!ÿ<€c{LHOI88€a88 8`HS™¥ëx„ãxFÓx'Ëx8`98; ÿ˜Kÿù €8/€Až 8a<8€8¡8KÿüÉ|}x€a8HJ±8!0£ëx€»!ÿä|¦N€ |¦¿Aÿè|#xBŸ|Û3x|ú;x覦ëx8”!þà|~x<Ÿ8„VÈ;<8ƒãxHRñ¤ëx…ãxfÛxGÓx8`98; ÿ˜Kÿøa€8/€Až Ãóx8€8¡8Kÿü!|}x€a8HJ 8! £ëx€»Aÿè|¦N€ |¦¿!ÿä|{xBŸ|œ#x|º+xè¦8|Ù3x”!þÐ<8cUÈ;¡L˜=HK1<Ÿ8la@eÛx8„V †ãx£ëx°>HR-¥ëx„ãxFÓx'Ëx8`98; ÿ˜Kÿ÷€8/€Až 8a<8€8¡8Kÿû]|}x€a8HIE8!0£ëx€»!ÿä|¦N€ |¦¾áÿÜ|wx|@&BŸ.8è¦|˜#x|Ý3x|û;x}CxA”!þ@8uÃóxHEMH¸€};`H>]8£ëxƒ½H>I€a<Äóx8 8cœH9•HP€A<8bœƒ"H9áH(ƒ¾€€]‚Ažÿ¤€a<Äóx8cœH9ù/ƒ|~x@žÿÔ; ;`€zlHD½/›Až)¦¥ëx8`8€,ËxN€!ƒãxH=µ8!p€»!ÿä|¦N€ |¦¾!ÿÄ|}xBŸ|ž#x|¸+xè¦8”!ý<€cjô8H>éa@ÃóxHí8ÿ›/ƒÿÿ|zxAž`8` ÄHB…8ÿ˜|yyA‚L/:€@/P:€PA´ëx<_;¡ô<Ÿ8Àl9"Iì€BIì£ëx8„J€ iI Y<_‘y;‚Ix‘Y …ãx  €I°YHEa¤ëx#ËxHEõ<Ÿ#Ëx8„JHEå/”@$<Ÿ£ëx~…£x8„J,HE)#Ëx¤ëxHE½/žAž$<Ÿ£ëxÅóx8„J8HE#Ëx¤ëxHE•<Ÿ#Ëx:at>_8„JD:¡8:!DHEu8@8ƒãxADAPAHAL˜EH=‘8€8 €8laH~c›x°FHAµ‚òjø<_8‚Âjðw~óxUbèúUkþ|Bª|X0"<|KxŸƒÔc Ãóx8á¸HE£ëxH8ÝÃóxH7µ<Ÿ£ëx8„BøH7E|~yA‚ä8€H7µ/ƒAžÔH8)/ƒAžÈH8Ý,A‚¼|dxÃxH=éA’X/–@ž(€Á8 |€á#ËxÃx}ç{x8Æ KÿíÍH(€á8 |€á#ËxÃx}Æsx}è{x8ç Kÿç H/•AžPA/•AžHè/•AžP/•@žØH€á8 | á~C“x$ËxÃx~è»x8ç KÿêyH¬/œ@ž¤~C“x$Ëx8 H8/‘AžHˆ/€Až<~#‹xÃxH<…/ƒ@žl~C“x$Ëx8 €á8Ãx~è»x9 8ç HD€a¸H=$Ëx|ex€a¸H=!/ƒ@ž(€á8~C“x$Ëx8 Ãx~è»x9 8ç Kÿë•€A8„ãx€b€H6%|}yA‚DÃóxH5õ<Ÿ£ëx8„BüH5…|~yA‚$;@;`ÃóxdÛxH5é|}yA‚ôCÓxH5¹£ëx8CH5M|zyA‚Ð8€H5½/ƒAžÀH61/ƒAž´H6å,A‚¨|dx~c›xH;ñA’D/–@ž €¡8Ãx~d›x}æ{x8¥ KÿèAHt€¡8Ãx~d›x}æ{x8¥ Kÿæ¹HX/•Až4/•@žH/Až@~ƒxH;Í~d›x|ex~ƒxH;Ý/ƒ@ž €Á8~C“x~d›xÃx~ç»x8Æ Kÿç%;{KÿÿCÓxH4ÉÃóx;ÀH4½;œKÿüx8!€a¹¡ÿ´|¦}p N€ |¦¿Áÿø|~xBŸè¦”!ÿ H\M/ƒ@ž €/€@žÜˆ¸/€AžÐH,/ƒ@žÄ€/€Až/€Až€@/€Hd€@/€Až\€/€@žŒ€ž€¾<8c=DH;/ƒ@žpÃóx8€8¡8HGM/ƒAžX<Ÿ8a88„>¸H9 /ƒ@ž@€/€Až€@/€@žÃóx8žÜ8 8ÀKÿìHÃóx8žÜKÿà]ÃóxKÿúE8!`€»Áÿø|¦N€ |¦¿aÿì||xBŸ8`ìè¦8”!õ 8H5e|~y@‚ ;¡lHP<_€BX˜œ@ž8€HG•HHK‰8~ 8€ ÄH9/ƒ@ž ƒ¾ HÃóx;¡l;ÀH/Ƀãx¤ëx8  Ã8À8á<98H7-||y@ ;`}ᮀa@H15/žAž€¤€^ ;¡L<ŸÅóx8„þÈ£ëx|¤|®€A@!DaH€<^à‘>äÜ‘~èH,!<Ÿ£ëx8„úH,18€£ëxH,E<¤ëx8 €c]¬H,Q/ƒAž ÃóxKÿøá8! `€»aÿì|¦N€ |¦¿aÿì8€BŸ; |{xè¦8`8”!ÿp8 ˜8“¡<“¡@H7-8ÿ3/ƒÿÿ||xAž08€8  8Á88àH6‰ƒãxKÿô­<_8`8€8 “‚W4H6é/ƒÿÿ|~x@¾ 8€ƒãxH6qƒãxH-‰8ÿ3HÔ8€8 “¡<8Á<`„ÿÿ8àH6%|iyA‚,8€ƒãxH61ƒãxH-IÃóx8€H6ÃóxHÜ88@l‘!P‘!T‘!X‘!\˜Q°ARÃóx8P8 H,å,A‚48€ÃóxH5ÑÃóxH,é8€ƒãxH5½ƒãxH,Õ8ÿ5H <_aLaHƒ¢\@£ëxH.õaL<8c:ÄH.å8ÁH8€aH8  Ãóx8àH5I|`yA‚48€ÃóxH5U8€ƒãxH5IÃóxH,aƒãxH,Y8ÿ0H¤£ëxDH.…8ÁD8€aD8  8àÃóxH4é8€8  8Á88àÃóxH4Ñ8€Ãóx8  8Á@`„ÿÿ8àH4µ/ƒA¾48€ÃóxH4Á8€ƒãxH4µÃóxH+̓ãxH+Å8ÿ8H“Û“›88!|x€»aÿì|¦N€ |¦¿ÿà|¹+xBŸ|xx|Û3xè¦|€#x”!ÿ@|x<Ÿ88„:;AtX;ÁdCÓxH4­CÓxH5å;ƒ=#ËxH5Ù€›`8¡\8Á`œ€{\;œNHe1Ãóxãx;€H7Y<_=_€\€¡`<ß=“AD“!LJT¤8B:9k7Ô8Æ: ˆãxA8<_©ëxÃóx‘a<8B:$8àôA@<_8B;DAH<_8B;dAPHoÝ/ƒ@ž €Ád€áh<¿Ãx8X8¥;´HeÃóxH6Ù8!À€»ÿà|¦N€ |¦¿Aÿè|š#xBŸ|»+x;Àÿ覔!ÿ <Ÿ<¿8„:|8¥:¨H-e|}yA‚h8€H./ƒAžLH.‰|~yA‚@H.½||xÃóxH.‘|dxcÛxH4%/ƒ@žCÓx„ãx;ÀH4 /ƒAž;Àÿ£ëxH-™8!`Ãóx€»Aÿè|¦N€ |¦¿!ÿä|#xBŸ|¹+x8€è¦”!ÿ8¡8H@¹|~yA‚€~/ƒAž 8cH/Y||y@¢H* ;Àÿ˜Hô€ž €¾;@H45€ƒãx8€#\®H3A|{y@¢ƒãx;ÀÿH,›[£ëxH3¡;ÃÃóxH.õ|zy@¢ƒãx;Àÿ˜H)¡HŒ<¿¦ëxÄóx;Àÿ8¥9ôH1åƒãxDÓxH2ù|}y@‚L;Û8€"ÃóxH2Á,A‚›£ˆ/€AžÃóxH3y€;Àÿ˜/€Až;ÀƒãxH)!CÓxKÿÿx;Àÿ8!pÃóx€»!ÿä|¦N€ |¦¾aÿÌ9`BŸ||x|#xè¦|¹+x|×3x”!ÿp|ø;x}Cx?_}5Kx‘a@€CƒÃ€zVL|®}~®|tH/¡8a<88HàÁ/ƒ@¾ì€a8Äóx8c„H# |tyA‚Ô/AžT>ƒãx8¡@8“8”Kÿýý,A‚/ƒÿ˜; ÿ@ž°€¡@8“8”#ËxKÿý|}x€a@H()/AžLHˆ€”ƒãx8¡@Kÿý±,A‚ /ƒÿ˜@žd€”€¡@#ËxKÿüÕ|}x€a@H'á/@ž@€”Ãx; H65€”~ã»xH6)€A8€"‘5H; ÿÿH; ÿ‘€€zVL~®H.i8!£ëx€ºaÿÌ|¦N€ |¦¾AÿÈ|ƒ#xBŸ|ž#x|¸+xè¦8”!ú ?_ƒ:OÀXHš/ƒAž¬€/€ @ž$:áHÃóx8€~å»xH=•/ƒ@žÄH€:áHÃóx8€ ~å»xH=u/ƒAžd€aH€L<¿8Át8á„8¥7ÌHLÕ/ƒ@ž@;”ƒãxH2E€„€¡ˆƒãxH2Ý/ƒÿ˜Až<Ÿƒãx8„7ÜH1-/ƒÿ˜@žƒãx;€‘H2%Hø€”ÃóxH<|}xƒãxH2 /AžÔ€ H€]ALaH€AL88€#}+®| ®};tƒ¡H£ëxH/,@‚€AL;€‘}®Hˆ8c€L<¿|P;¡|8¥7è|€ P¦ëxHKí/ƒAž!H€AL;€‘i®HH<_£ëx;‚7ì„ãxH.,@‚ a€a|€AH!L8XbI®€~˜H*M,A‚ /ƒf;€ÿ˜Až;€õ<_;"8H胡€/@ž ƒaXcÛxH)/ƒAžäH)/ƒAžØH(ù|zyA‚ÌH)m/ƒAžÀ„ãxH//ƒAž°CÓxH(Í/ƒAž H(Á;A”H)y|dxCÓxH3ÃóxeÛx8€8Á8á9\9!lKÿûÕ/ƒ@ž`:ÁP<Ÿ;€~óx8„8 H2ÝDÓx8a“¡HH3 €€A\~ä»x8`“€¡l|I¦|LxN€!ƒa/›@ž$<¿Ãx8€”Æóx€¥OÈ;€Kÿ÷ùHÈ€H/„Až(ˆP~óx/€Až<_8€”€bOÈ|exH€€ž`€~\88¡d8Á`;A„hH]McÛxH-Ñ;ƒCÓxH/q<_=_€d€¡`ãx<ß“aD8B54JO¼;€=A8<_8Æ89k2ì8B8 ˆãx©ëxCÓx‘aÿ€{OÐH*Õ||xCÓxH*Éœ€wOÌH*½=_€l€¡pœ<ßJO¼<_=ãx;€8B549k2ì8Æ9@ˆãx©ëx~óxA8‘a<8àÈHe /ƒ@ždƒ›OЃ·ÕãxH*U|{xCÓxH*I“¡ÿ>ß;ÁD“¡L8.€8V+ÀÃóx8€ÃxD8Á8AHKÿýE/ƒ@¾¸€a8H ]|~y@‚ ;€H\dÛxH /ƒ@žx;€; Hà/œ@žp“Ú>ß>ÿ;ÁD96+À<_8.€Ãóx‘!H=?8B.Œ8€D9).¨ALÃx8Á8‘!PKÿüµ/ƒ@¾(€a8KÿýU/ƒAžüH¡;À;€; zH\€<<8¡88c.°Kÿûù/ƒ@¾È€a8Kÿý/ƒAž¸H}/ƒ|}xyA;À;€H/œ@žP€<<8¡88c.¼Kÿû¥/ƒ@¾t€a8Kÿü½/ƒAždH /ƒzAžT;À;€; H¼@²@€aÿ>ß;ÁD88W.€=?ÃóxAD<_8+À8B.Ð9).ØHÃxAL<_8€8Á<‘!P8B.àATKÿû9/ƒ@žÿKÿþ¬€a@HÃóxHEƒãxH=8!£ëx€aºÁÿØ|¦}p N€ |¦¿!ÿä|}xBŸ|º+x|™#xè¦8;Àÿ””!þ@;l;a|ƒãxH$i£ëxH"µeÛx|dx£ëxHš/ƒ@¾82€Aœ#Ëx;Àÿ˜x€ A88!p|x€|¦N€ |¦¿Aÿè8 BŸ|zx|#xè¦;À8`”!ÿ€8€“Á8H8ÿ3||yA€H+¿ÿA ; c½À€88@“Á<;a<“Á@“ÁD˜A=“ÁH/€Až`8€8 8Á88à`„ÿÿHÁ/ƒÿÿ@¾8€ƒãxHŒƒãxdÛx8 H½/ƒÿÿAž`ƒãx8€€H©/ƒÿÿ@¾Hp8ƒãx³¡>dÛx8 T>H/ƒÿÿ@žÿÈH •ƒÃH €/€0AžÿÈ/ž@žÿÀ<8c&TH ƒãx8€HAƒãxHY8ÿ5HH8€ƒãxH%ƒãxH=8ÿ2H,ƒãxKÿþYTc>/ƒ@ž8€ƒãxHõHèz8€8`8 H=/ƒÿÿ|~x@¾ 8€ƒãxHŃãxH Ý8ÿ3HÌ<8@88c&/ƒ°bC²@¾48€ÃóxH!ƒãx8€HÃóxH -ƒãxH %8üqH“Úz 8“š8!€|x€»Aÿè|¦N€ |¦¿aÿì|}xBŸ;Àüq覔!ÿ€?Ÿ€K˜/€@¾X8`;Àÿ˜H¹|{yA‚D¤ëxKÿý|~y@‚<cÛxKÿÞq|~yA‚8€{8€He€{H }€{8€HQ€{H icÛxH !Hð<ŸeÛx8a8;À8„ìH å8€8a8H <Ÿ8a8€„:üH é<888 €c;H 5/ƒ@¼$€{8€;Àÿ˜H@8`;Þ`cÃPH­€K˜/€Až/ž'@žÿàH /ž'@\€{8€;ÀüqH€{8€H‘€{8€H…€{8€Hy€{H ‘€{H ‰€{H €{H yHƒÛ8!€Ãóx€»aÿì|¦N€ |¦¿ÿð|~xBŸè¦8”!þÀ``€ƒ€£;¡@ Ã<£ëxH ©/ƒAžÃóxH Å8aLH!iHð;L£ëx8 8Á<„ãx8á8HK©/ƒ@ž”€AP+‚ A$8|0pa@‚@p@‚ p@‚$8ô/€8@žXHL<_€JH<_€JH <_€J/€AžÿÈ| ¦| xƒãx„ãx¥ëxN€!8Kÿÿ¬88€8/„@€¡¨€Á¬£ëxHY-8€£ëxHÙƒãxH ÃóxH Í8!@€»ÿð|¦N€ |¦½¡ÿ´BŸè¦”!ý<_aA8@ÂÀ!£ްˆIH }Àsx@œ~À³x€h@@œ} kx|x€ˆƒ@@œ|xVÉþUÀþ9ã:Aì‘!„U©þ€:!l€ˆ‘!|V×èú;Á8UÕèúU¸èúTþ|P0x!„€€|ZH0!||S0€ˆ|TH08A<9!lTèúA˜<_‘!ŒA”8€8 €~C“xµòHu8€8 €~#‹xHe€´}7ò}xò}Yò}ã{x€I4~D“x8 ~&‹x8à~`x´BxI4€ ´@x ´```€K´~‚xK´`€ ´~x ´HÕ/ƒÿÿAžÿh€´€A€|0p A‚À€˜8}ÃsxÅóx8HÁ/ƒÿÿ|{xAžÿ08` H-||y@‚ €|Ht“|;¡L<Ÿ…ãx8„þ”£ëx€@ A>°\H‘<Ÿ£ëx8„ø¬H¡8€£ëxHµ<¤ëx8 €c8 HÁ/ƒAž ƒãxHqcÛx8€H…cÛxH|Yò€´€Ax|0p A‚ €aˆKÿ×ñ|Xò€´€A||0p A‚ }£kxKÿ×Ñ|Wò€´€A„|0p A‚þ@€Œ€á˜; 8~óx8 8ÀÈóx8“¡<“¡@“¡D“¡HHM|`y@þ|^€a@›¢4H U€A”€aŒ8‚ °H%/ƒAžýØ8€}ÃsxH±}ÃsxHÉ8€~óxH~óxHµ8€}£kxH‰}£kxH¡€aˆ8€Hu€aˆH€aHE€A8!ð€“¢H ¹¡ÿ´|¦N€ |¦¿¡ÿô|ž#x|}x|dx8 )Ãóx”!ÿ°H €],=088}<}4]88ž<˜)^,‘>0‘~4‘^8H„á/ƒ@ž 8H8!P€»¡ÿô|¦N€ ,M‚ 8cŸHÌ~ã»xdÛxHþ¹/œAž´8t ,~¤«x8¡$ƒ¾DÓx£ëxH©/ƒ@žÿä.HHA’€$$H €$€€ð@ž“6ƒž$ÃóxKÿþ%/œAž ƒ¼žãx£ëxDÓxHI/ƒAžÿ¬;{›ÀAœÿ4~ã»xHýÍ8!€8`€aºÿÐ|¦}p N€ |¦¿ÿð|ž#x|}x;€”!ÿ 8a8H)/žAžh€^H/‚Až\"4/‰Až4€8‰@œ(€H|CxH“‚HKÿöQ€]8Bÿÿ]Kÿÿ¼€8/€@ž |^xKÿÿ¨|CxH8`8!`€»ÿð|¦N€ |¦¿¡ÿô|}x”!ÿ```€ 88€Kÿÿ1€€8!  €»¡ÿô|¦N€ |@&|¦¿Aÿè;€|š#x|}x-œ;`A”!ÿ`ƒÄ H0Ãóx¤ëxHÙ/ƒ@ž-žÜóxH€HÛóx|x.A’ AŽÿÌHAŽ`8a8HÝ€\4/‚AžL€8‚@œ@/›Až€HHH €H 8ƒãxH;€Kÿôý€Z8BÿÿZ8!pƒãxa€»Aÿè|¦}q }p N€ |¦¿Aÿè|œ#x|{x; ;@”!ÿ ``ƒÄ H`cÛxÄóxHé/ƒ@ž@/Až€HHH €H “^HÃóxKÿôa€\88Bÿÿ\H €HÝóx|x/ž@žÿ 8!`€»Aÿè|¦N€ |¦¿ÿð||x8d|#x”!ÿ°Hý|~yA‚„ãx¥ëxHýI8|é®8!PÃóx€»ÿð|¦N€ |¦¿ÿð|œ#x”!ÿ°``ƒÃ€cÅóxH|}y@‚ƒãxHMž@@œ; ÿÿ8!P£ëx€»ÿð|¦N€ |¦¿ÿð|~x|œ#x”!ÿ°`€c€¾H!|}y@‚ƒãxHñ€€@@œ; ÿÿ8!P£ëx€»ÿð|¦N€ |¦¿ÿð|}x|œ#x”!ÿ°`€€ @A,#„H@@x€C |€ P„@@œ|DxÉ"H€€ƒ |P€ @@HÜ"€}8žHýµ,@¢ €}8œHý¡8ÿ˜,A‚žãx8“Ý}H88!P|x€»ÿð|¦N€ |¦¿Aÿè|Ý3y|š#x|»+x||x”!ÿ A€x€ƒ Al/šAžl/…Ažd|„*Kÿþù|~y@‚X€|€¼|}|½(P|dx|cÚHûY€|DÓxeÛx|}Hû%€\<|[\É®H;ÀþH;À8!`Ãóx€»Aÿè|¦N€ |¦¿ÿð||x|ƒ#x|#x”!ÿ°Hÿ)8!P€Ü¤ëx|exƒãx€»ÿð|¦Kÿÿ€ÃKÿþü|¦¿ÿð||x|¾+x”!ÿ°`€C/‚AžP|*‚@| P@œ ÄP8 €||d|ƒòHúmƒ¼ƒãx¾èP¤ëxKÿýÕ€\8“¼|é®8!P€»ÿð|¦N€ €C8|CxN€ 8@8C CCN€ |¦¿Áÿø|~y”!ÿ°A‚$€~Hô=8@8^ ^^8!P€»Áÿø|¦N€ |¦¿aÿì||x|½+x|›#x”!ÿ Kÿÿ™“¼“|8!`“¼€»aÿì|¦N€ |¦¿aÿì|›#y|¾+x||x”!ÿ @‚KÿÿU; H8|¤+xKÿü¹|}y@‚(/žAž€|dÛxÅóxHøý€\¢ñ®“Ü8!`£ëx€»aÿì|¦N€ |¦¿ÿð||x|ƒ#x|#x”!ÿ°Hý8!P¤ëx|exƒãx€»ÿð|¦KÿÿL|@&|¦¿aÿì.|»+x;¦ÿÿ;€A”!ÿa8€€A8|J€@ž,<ÿ8@ÿý`ÿÿ|€@@HæÙ€/€"@ž 8`ÿÿH£ëx8!`€»¡ÿô|¦N€ |¦¿aÿì8 Ü|›#x8€|}x;€”!ÿ Hî88@“À£ëx´˜]¸Kÿým89=Ð8] 8!`˜  ˜X]Г¼“}@``»aÿì€|¦N€ |¦¿aÿì|~x|›#x; ”!ÿ #€C| ®|tHHæ5€^|bé®;½>| è®|t/ƒ@žÿà€^dÛx|bI®ƒ¾£ëxHñý€^8ÿÿ,®A‚ €|P8!`|x€»aÿì|¦N€ |¦¿Áÿø8  BŸè¦”!ÿ°<_;´ÄóxKÿôµ8/ƒÿÿAž T`8|.8!P|x€»Áÿø|¦N€ |¦¿ÿà|yxBŸ|›#x|¸+x覔!ÿ €C#€€B‚¢JàAž¬|H®|t8^ÿàTB>+‚^At?_Äóx8zÿHïå/ƒ@ž\;Ý“»H;Þˆ|t8DÿàTB>+‚^A8zÿHï­/ƒA¾ÿ؈/€@ž œðAž0|ðP9 HX/ž Až /ž @žP8]“»H8Bˆ|t/€ Ažÿð/€ Ažÿèˆ/€@ž œAžØ|P9 H(/ž @ž08“»œAž°ˆ9 /€ @žÔ9 8KÿÿÈ/ž 9 Až¸/ž"@ž”9=“»Hlˆ 9i|t/‚"Ažh/‚\@¾ œX@@Dˆ 9i/€@ž4H¸T@>+€@ /‚@ž/‚ Až/‚ Až /‚ @žŒ}i[x‰à@Aœÿ”8`H||XP9 Kÿÿ$<Äóx8cÿHîA/ƒAž9 “»8KÿþüWÀ>+€@ /ž@ž08“»9 €[€8`|‘8H8`8!`€»ÿà|¦N€ |¦¿ÿð8€8 Ü|}x;€”!ÿ°Hê 88@“À£ëx´˜]¸Kÿùu89=Ð8] 8!P˜  ›X]м```»ÿð€|¦N€ |¦¾ÿÐ9`BŸ/ ||xè¦|¹+x:à”!ÿ```‚£HL/ƒ%@ž,ˆ;d|t9>ÿà+‰XA <_U):8Bh| .|| ¦N€ ÔììììÔììììììììììÈìììììììììììììììììììììììììììlììì¬ìdˆìˆìììììììììììì쌴ììììüìììì8ììDìdìììp´|ƒ8:Àƒ¹:€;9;AT;Á<€K|X]ƒãxDÓxÅóxKÿúå/|kx@šd/–@ž0€|kxH8<€\€ ‚@@œ)/—8|I®|ZtAžžÐAžä9`HôÃóxHÜÝ|}xCÓxHÜÑ9`@žÐHÈ9`:àHÄ€™ƒãx8¡8;9Kÿ÷5/|kx@š¨€8/€Kÿÿœƒãx8D8¡8Kÿ÷ /|kx@š€€8/€AžX€€AH|PH`9`9€;9/  HD€\<€‰@žÿ4€B|H®/€Kÿÿ 9`H/ƒ Až„/ƒ @ž¤;AT;Á<ƒãxDÓxƒ¼ÅóxKÿöm/ƒ@ž8€À+‰A¼<_U):8B8| .|| ¦N€ œäp¼ôt€¤~Ì>Ä| P€H@œAœ8@€^ 8|I|Y®~Ì>Ä€^ 88`‘>œ¼|BZHp;¾Ð<Ÿ8¾È8Á8£ëx8„æàƒKÿñ‘/ƒAž“/ƒAžÿ8HÌ€½8~ „ãx|¼(PKÿØi“€È/€@ž$€Ô>Ì8@^À| Pœ8`Kÿþð8Ht€^Ô€¤€žÈ|P€ Aœd¢"<Ÿ8~Г¾Ô8„æèKÿðý/ƒAž€Ô€^È|PÔKÿÿ`€¾Ô8~ ¤ëx|½(PKÿ×Ñ€^œ>È8“¾ÔÀ|BJ^œKÿÿtÃóxƒ¾ÔKÿóm/ƒ@žÿ€ €^̤ëx~¼€¾Ô8~ ||½(P˜Kÿ×u8`“¾ÔH¸€¤>Ì8`€^ Ô| P|BJœ^˜H>Љ~X8^Ô€I/‹œ‘^Ì|BR^˜Až$€^+‚At8|0pìA‚dHP€^D/‚ÌAžD/‚0Až<8ÿœ+€c@0€@/€Až$/€Až/€Až/€Až /€@ž88`¼Hè;¾d;@88€£ëx…ãxHHÇ1,A‚4#<Ÿ8a88„æØ€I A8€ À8´Á´á¸‘¼‘!À‘AÄ8Hp/€I@¾d€A888ƒƒXàƒxä/š@œ~Úþp~Û³x/šA@ž<`ÿÿ›@AvÛx8vHÊ¥|syA‚X:ó H/€f@ž´€A8.88€bA’0€/€Až$<_8€€Bóˆ€| ¦| xN€!H<Ÿ8„ÞüHĽ/ƒ|yxAžÜA’ü€/€Ažð€/€Až¨<_€˜Ø€¸Ü8À€Bóˆ€| ¦| xN€!HA’¼~Üþp~ݳxœÐA<@ž –Ø@A0€/€Až#Ëx~ä»x~ųxH,~ã»x8€~ųxHD€/€Až,#Ëx~ä»xeÛx<_€Bóˆ€| ¦| xN€!H~ã»x8€eÛx&ËxHÃù€à|~xÂþp/€cØBÑ@œ(šãx»ëxH~ã»x8€~ųx&ËxHý|~x/ž@ž0A’ð€/€Ažä<Ÿ~£«x~†£x8 8„ßKÿØuHÀA’”€/€Ažˆ8 ;¡<<ŸÅóx|».£ëx8„ßHÌ<Ÿ£ëx8„ÒÀHÌ¥£ëxHÍ=¤ëx|ex|c¸PHÈÍ£ëxHÍ%~†£x|£ò|ƒ¸P~£«x8¥Kÿ×ù||x£ëxHÍ|~8cœH~£«x~ä»xÅóx~†£xKÿ×Éž@ž @Ûy@‚þD;À@’H8;Àþ Kÿÿô€/€Až$<_#Ëx€Bóˆ€| ¦| xN€!H #ËxHÂ%~c›xH/€b@žH€A888`!8€‚8 8ƒ©/Až~£«x¥ëx~†£xKÿ×%@žˆ;Þ|t/€@žü„~c›x;ÀH$€˜Ø€¸Ü8ÀHÂ/ƒAžÿ(~c›x;Àþ H H;Àÿ˜8!Ãóx€aºaÿÌ|¦}p N€ |¦¿Aÿè|~y|š#x|¼+x”!÷ Á„A‚0/…Až¬€¥/…Až /„Až€¼/€@žH,/…Až€8 8`ÿ›H@Kÿòý/ƒ@žHÈ€¼;`HÌ/ƒAžÿð/ƒAžÿè/ƒAžÿà8 8`ÿ¼H48~Ü888 8Á„KÿÕí,@L|ex888~ KÿËñ/ƒ@žèÃóxKÿò/ƒAžP/ƒAžT/ƒAžL/ƒA¾D8`ÿHÄ@‚À/›Až8¼H$|88`ÿ‰´H¤€¼;`H€¼€^è>œ|*€H@@(ƒ¾ì/@ž€¼/€@žÿ8|¢HP¼€^耞̀ CÓx|„|„HÅÍ€^ì<8`ÿ.€è/‚|Jè@ž$8`H8ô8`´“¼H8`ÿ›8!`€»Aÿè|¦N€ |¦/…¿AÿèBŸ||x|ž#xè¦|Ý3x|ú;x”!÷ @ž|ƒ#xKÿÛUH|¤+xÃóxKÿ×I;`H;`ƒãx888 ¦ëxKÿÔU,@\|ex88ÃóxKÿð,@‚(<_>Ä€Bíh€‰@@\8`þ8H4/ƒAž/ƒ|~x@¾X888 8£ëxHÂ9<Ÿ8}8„ÕŒH1i/ƒ@ž0€$/€Až$€/€@ž<_“Ý8BÕ”]H8`ÿ”8!€»¡ÿô|¦N€ |¦¿¡ÿô|#xBŸ|dx8 8覣ëx”!ÿ°HÁ±<Ÿ8}8„ÔðH0á/ƒ@ž0€$/€Až$€/€@ž<_88BÔø]8`8€8 HÄ]/ƒÿÿ|~x@ž ;Àÿ3H08(8 H»/ƒÿÿ@¾Ãóx8€HÃÉÃóx;Àÿ4HºÝ8!PÃóx€»¡ÿô|¦N€ |¦¾!ÿÄ||xBŸ|š#x|¹+xè¦|Þ3x”!þ`?>ÿ>ß>¿>Ÿ>>_>?8È;aˆáȑ̑!БAÔLH xH¿MEÓx|dxcÛxKÿøi||y@¢ä#ËxKÿÀÙcÛxH¿%€A8cÛxT6|Ð|AnH¿ ;¡P8€8££ëxHºÕdÛx£ëxH¾©<Ÿ£ëx8„ÏÐH¿y,A‚|;£8€/£ëxH¾A|{yA‚d››£ëxH¾­8/<ß=_8€˜a<8ÆÏÔ#Ëx“¡8“@9JÁl8 8à:Kÿù ||yA‚#ËxKÿÀ%H;€ÿ”€!ƒãx€»ÿà|¦N€ |¦¾ÁÿØ|~yBŸ|˜#x|¹+xè¦|×3x|ú;x”!þP}Cx};Kx‘AäA‚ xHº•€A8cÛxT6|Ð|AnHºyEÓx;P|dxcÛxKÿó‘|}y@¢Ì#ËxKÿ¼dÛxƒãxHº <Ÿƒãx8„ËHºÙ,A‚œ:ã8€/~ã»xH¹¡||yA‚„›¼~ã»xHº /˜8/|}x˜AžcÛxH¹ñ|ixcÛxH :€z<ß=_“¡<’á8|hx8ÆËH9J¼´#Ëx8€8 8àKÿôM|}yA‚#ËxKÿ»eH; ÿ”€!£ëx€ºáÿÜ|¦N€ |¦¾ÁÿØ|¸+x|@&BŸ/ƒ|Ú3xè¦|ù;x}Cx|œ#xA”!ÿ‘!0Až4/…Až,/†Až$/ˆAž8:ÁD;¡T~ųx¦ëxKÿþ=|~y@‚ð/œ·ëxAž$ƒãx;¡ŒH¸Ý¥ëx·ëx|dxƒãxKÿñõ8`ð;Àÿ˜H´|}yA‚°88€;Àÿ0ìèKÿÆU8`8€8 H·-/ƒÿÿAž\;Ü|dx;Àÿ0ƒãxKÿÀu/ƒ@ž €}Ü8—(8 H­Ù/ƒÿÿ@ž;Àÿ4.ƒãx8€KÿÀYH:á0€ÁD€áH<¿ƒãx~ä»x8¥¾ôKÿè.|~xA’ ƒãxKÿÿăãx~å»x¤ëx8Á8Kÿå-/ƒ@ž¼£ëxKÿ×!/ƒAž /ƒ@ž¤€D£ëx8€8¡<KÿÄ]/ƒ@ž “ÚH €<€¼/€@ž;À8.HP€À/€@ž;À8ÿý.H4/€@ž;À€Ä.H/€;À@ž;À8ÿü.H ;Àÿ.“¸~óxKÿ¸åA’£ëxKÿÂÝH;Àÿ›8!Ãóx€aºÁÿØ|¦}p N€ | +x|Â3x|ë;x} Cx|…#x|x|Gx}h[x8€KÿýH|¦¾áÿÜ|Ù3xBŸ|ø;x|—#xè¦|º+x||x”!ÿp|> xH¶€A8ƒãxT6|Ð|AnH¶qEÓx;a`|dxƒãxKÿï‰|}y@¢\~ã»xKÿ·ù„ãxcÛxH¶<ŸcÛx8„ÇH¶Ñ,A‚,;c8€/cÛxHµ™||yA‚›¼cÛxH¶/™8/|bx˜AœP:<ß=_+þp~ã»x“a8A<“@“!H‘aD8ÆÇP9J¸°8€8 8àKÿðM|}xH”/™ÿý@žD:<ß=_~ã»x8€“a8A<“@8ÆÇ\9J¸°8 8àKÿð|}xHL/™ÿü; ÿ›@žH:<ß=_~ã»x8€“a8A<“@8ÆÇh9J¸°8 8àKÿï¹|}x/Až~ã»xKÿ¶ÍH; ÿ”€!£ëx€ºáÿÜ|¦N€ |¦¿aÿì/ƒBŸ|œ#x|Ý3x覔!ÿPáØAžä/„AžÜ/…AžÔ8|§+x8¡H88KÿýÕ|~y@¢¸8`;Àÿ˜H¯Ý|{yA‚¤“» 8`8€8 ;Àÿ0H²ý/ƒÿÿAžp|dxcÛxKÿ¼M/ƒ@žP€{8p8 H©±/ƒÿÿ@žcÛx8€;Àÿ4H0€Á8€á<<¿cÛx8Ø8¥º`Kÿä|~yA‚cÛx8€Kÿ¼8a8Kÿµ©“|H;Àÿ›8!°Ãóx€»aÿì|¦N€ |¦¾¡ÿÔ|—#xBŸ|¶+x|Ø3xè¦|ù;x|}x”!þP|> xH³‰€A;^`8£ëxT6|Ð|AnH³iEÓx;aP|dx£ëxKÿì||y@¢”:¾P~£«xKÿ´í¤ëxcÛxH²õ<ŸcÛx8„ÄH³Å,A‚`;£8€/£ëxH²|{yA‚H››£ëxH²ù8/<ß=_8€˜8ÆÄ@a<8 “¡89Jµ¬~£«x8àp>tKÿí]||y@‚4;~˜€žP€¾TCÓx~ç»x8ÀhÛxKÿê•||yA‚cÛxKÿ¾Q~£«xKÿ´EHÀ/™AžHcÛx8€8¾HKÿ¿/ƒ@ž ›™H(ƒ¾L+³@; ³€žH#Ëx¥ëxH­Ñ™é®€4/€@ž HDƒžÜ/œÈ@žÿ€8~8ƒ¾0Kÿ³€¸¤ëx||x8¥H­©€˜ƒãx8„H¯9vƒžÜ/œÈ@žÿ@;€Kÿÿ8;€ÿ”€!ƒãx€º¡ÿÔ|¦N€ |¦¿Aÿè|{xBŸè¦”!ÿ ?_ˆå¸/€@ž<_=?;©å¼ƒÂш;“ÝÃóx;½H±Uà|cò;Ã@žÿä<_=?;©åăÂÑ„;“ÝÃóx;½H±!à|cò;Ã@žÿä<_=?;©åàƒÂÑ€; “ÝÃóx;½H°íœè|cò;Ã@žÿä<_=?;©æƒÂÑ|;H“ÝÃóx;½H°¹œè|cò;Ã@žÿä<_=?;©æHƒÂÑx;“ÝÃóx;½H°…œè|cò;Ã@žÿä8˜å¸<Qëbþp`…|–|.p}"P/‰ d|ØP@ž/€A˜<_T:8Bå¼H /‰@ž /€Ax<_T:8BåÄ|b.Hh/‰@ž/€AT<_T:8BåàKÿÿÜ/‰@ž/€A4<_T:8BæKÿÿ¼/‰@ž/€A<_T:8BæHKÿÿœ8`8!`€»Aÿè|¦N€ |¦¿ÿà|˜#xBŸ8€.è¦8”!ÿ H¯å,A‚h<_;C;€;`D;"äL|âCÓx|p½” |™.ÀÊH®i/ƒ@;›à@œÿÐH@œ ;}ÿÿKÿÿ샞ƒÞH<_=?8BÏx;‰ÀpƒÂÃóxH®Ý|}xƒãxH®Ñ½8}Hª%8ÿ˜|}yA‚0<ŸÅóx†ãx8„À€H­e£ëxH¦x£ëxH¤±88!`|x€»ÿà|¦N€ |¦¿Aÿè9 BŸè¦”!ÿ ?€[Ò€/€@žÔ<_=?ƒ¢Ît<_;Éã0;BÎ\H@“¾ÿô£ëxH®½ˆ;½“¾ÿü£ëx|tT:|Z.^ÿøH­õ½;½ˆ;Þ |t/œ@žÿ´<?¿;½æl8c×ôKÿ¯q8}Kÿ¯i£ëxKÿ¯a<_“ “$€BÒ <8€8c攓‚H©Ñ9 ÿ˜/ƒÿÿAž€[Ò89 8!`}#Kx€»Aÿè|¦N€ |¦¿ÿð|dxBŸè¦”!ÿ°?Ÿ;ÜÖÜÃóxKÿ¯ý|}y@‚8€ž/„Až(€\ÖÜ8„ÿÿ| ®/€/@žÃóx8 Kÿ®H; 8!P£ëx€»ÿð|¦N€ |¦¿aÿì|{xBŸè¦”!ÿ <_€BÐtƒ‚Hd;ÜÃóxH¬¥|Câ|}xˆ/€/@žÃóx¥ëxdÛxH¬Á/ƒH$ÃóxdÛx¥ëxH¬©/ƒ@ž|è®/€/Ažƒœ/œ@žÿœ8`H8`8!`€»aÿì|¦N€ |¦¿¡ÿô|}x;À”!ÿ°H|}ð®|ctH Á|}ñ®;Þ£ëxH«ñžAœÿà8!P8`€»¡ÿô|¦N€ |¦¿aÿì|œ#x|{x”!ÿ H«µ8cH§ |~yA‚€ƒãxH«8cH¦õ|}y@‚Ãóx;ÀHTdÛxÃóxH«5„ãx£ëxH«)ÃóxKÿÿ=£ëxKÿÿ5Ãóx¤ëxH«í,A‚ |PÃóxÛH¡U£ëxH¡MH;À8!`Ãóx€»aÿì|¦N€ |¦¿aÿì||x|›#x”!ÿ `ƒ£/Až4£ëxH«}|~yA‚ 8cÛx˜HªÅ|~|H“Ü8!`£ëx€»aÿì|¦N€ |¦¿aÿì9 ÿÿ9@ÿÿBŸ|#x|¾+x覔!ÿ‘!@‘AD‘!8‘A<€/€Až<Ÿ8„»KÿÿE8€-||xH©Á|{yA‚ø8 <Ÿƒãx8¡8˜8„»”8Á@H©€8/€ÿÿ@ž€‘^H8ÿÿH 9kKÿÿ|8!p|x€»aÿì|¦N€ |¦¿Aÿè||y|Ú3xBŸ|¾+x|#xè¦88@”!ÿ€šàºäA‚pH¨Ù8cH¤18@ÿ˜|{yA‚X„ãxH¨}<ŸcÛx8„ºKÿüá/ƒAž <ŸcÛx8„º$KÿüÉ/ƒa8@žcÛxHž¡88@H/88Aœè8a88@8¡HKÿý¹/ƒÿÿAžЀ¡@€ÁD…èAÀ@ž †ð@A´/…Aœð€áHL/‡Aœ„…8A”@ž †@@Aˆ8A @ž ž@@A1ÿÿ|ýÔáH‘LºØÚÜ|f@|E9<Ÿ1C}"”8z8„º(‘:à‘Zä©ëxÊóxH¦ecÛxH½8@ÈH(/‡ÿÿ@ž/ˆÿÿ@ž (A@žž0@@ø|fð|Eé<ŸºØ©ëxÚÜzäZà8z8„º(Êóx1ÿÿ|ýÔKÿÿ”/…ÿÿ@ž¸/†ÿÿ@ž°€áHL/‡A@žœ+ˆ@”8AL@ž ž@@A@8@8`“ºà“ÚäzÜZØ<Ÿ8z8„ºL§ëxÈóx0Þÿÿ|½ÔH¥Kÿÿ}Hð}'é<Ÿúà‘ä§ëx‘:Ø‘ZÜ0Ê|©”Èóx8z8„º(Êóx©ëxKÿþØcÛxHœ•8@ 8!€|Cx€»Aÿè|¦N€ |¦¾¡ÿÔ|~xBŸ8`´|˜#xè¦|Ö3x|µ+x”!ÿH¡‰|{yA‚@;>d:àÈ#ËxH—ñH¨ƒÜ<_8À!8àƒBÉô€~€žEÓxKÿ¨õ€¾|}x+…³@$cÛxH›ñ€~8cH¡%|{yA‚Ü€¾€ž cÛxH¡M/€^8|®Aœ(W¢8|BÒ€B/‚#Ažx/‚$Až(/‚AžX„ãx#ËxH—‰/ƒ||x@žÿTHl;ÀcÛx“ØH¥I+ƒ@ÿÐ<ŸcÛx8„·°Kÿùe/ƒAžÿ¸“Ø Kÿÿ°cÛxHš9xèKÿÿ cÛx~¤«x~ųxÃxKÿûå/ƒÈ|wxAžÿ€cÛxH› H:àÿ˜8!p~ã»x€º¡ÿÔ|¦N€ |¦¾ÿÐ|Õ3yBŸ|~x|™#xè¦8|£+x”!û€8A‚4€/€Až(<_8€€BÈT€| ¦| xN€!8 ôH<Ÿ8„¶,Hš98 ‘|vyA‚<_9 :à; ‚‚ÈT;@;;a<‘>¼H˜ãx/‰AžÃóxKÿ˱|}x/@ž;@—ÂH´/Ažÿô/Ažÿì/Ažÿä~óxH™yH`8 #ËxdÛx8Á8Kÿ®¥|ey@L8~ dÛxKÿ¤­/ƒ@žDÃóxKÿË=/ƒ|}xAžH/ƒAžD/ƒAž¼H8 8Hô;@€^œœ@@€¼/€@žÿ`~øP˜º€žÌ€ cÛx~å»x|˜"|„Hž­€/€Až@€ ~óxdÛx~å»x| ¦| xN€!/ƒ@¼8€~óx| ¦| xN€!H|cÛx8€~å»x~ƳxH™Q/ƒAœX>¼/‰@žþ|€œ€à@žþp€/€AžD<_~óx€BÈT€| ¦| xN€!H,8 ô8ô´H ~óxH—í8 ôH~óxH—Ý8 È8!€|£+x€ºÿÐ|¦N€ |¦¿¡ÿô|~xBŸè¦”!ÿ°<_;¢Ú@£ëxHžU€/€Až<~$€K8BÿÿK>$€ /€A8~Kÿ£‰ÃóxKÿ£€~$H—Ñ8!P£ëx€»¡ÿô|¦Hž|¦¿ÿðBŸè¦”!ÿ°<_ƒÂÅ0€/€@žX<?¿?Ÿ8cË;½Ù”;œÙ¼Kÿ££ëxKÿÿ-ƒãxH¡8€8 (£ëxHƒãxH©ƒãxHA88!P€»ÿð|¦N€ |¦¿!ÿä|}xBŸ|š#x|»+xè¦|Ù3x”!ÿp<_;‚ØüƒãxKÿþ±/8`AžØ;ÁHÃóxKÿ¢a8a8Kÿ¢Yˆ8@A\/€/Až<Ÿ8a88„¯ÀKÿ£U/ƒ@ž|¤ëx8a8Kÿ¡1/ƒ@žh8`H›Å/ƒ|bxa\AžP8?¿DÓxeÛxÃóx;½Ù$Kÿ¢I£ëx“!XHœ‰888 (ƒãxH›¹£ëxHœ‘8`H 8a8Kÿ¡ÉÃóxKÿ¡Á€a\H–8`ÿ˜8!€»!ÿä|¦N€ |¦¾áÿÜ|˜#x;ÀBŸ|}x覔!ÿ0“Ø88HžÉ/ƒÿÿAžt @T&/‚@@ž8 H8`€‚@žH“Ø <Ÿ£ëx8„±KÿÿÄ|dP±eN€ |¦¿¡ÿô|}xTƒ:Ý"”!ÿ°HŒí8ÿ˜,A‚\8«ëx¢ëx8àÿÿHÔ/€.@žˆ‚èAžˆÿÿ/€/@ž|9ž@Ažˆ|t/€/@ž 8BH”/€.9+@ž|8žAžˆ/€/@žd/‡8B@8çÿÿTà:}c.HTH‡8ÿ”H¸/€/Až99+H(8ç9+9Tà:}#.```‰B™K}Cx}+Kx‚ð@@œ\‰B}@t/€?Až/€#@žÿH ‰BH(8}"ðP})¦€ð@A /ž@¾ 8| ¦™K8B9kBÿÈ8˜ H†M88!P|x€»¡ÿô|¦N€ |¦¿ÿà9%|@&BŸ|¹+x8Pè¦||x|›#x;À;ÿÿA”!ß`<_° ƒB³”8@EEIEH;Þ|ð®/€.@žØóx~ð@‘„|ாâ|t/ƒ:Až`/ƒ/AžXT`1@‚ Tb:|BÒ€4p|ÐTþH8€HƒÍ0Cÿÿ|/€@žÿˆ|t/€.Ažÿ€/€-Ažÿx@±|ð®/€:Až;¾ÛóxH(;¾8¹ |}ØP|œê;`ÿ”Kÿü¹,A‚Ð}£ëxHŠ=|}y@‚ ;`ÿ˜H´„ãxÅóxHŠa/˜ÿÿ8|ñ®Až°8€ð@œ¤|]ˆ|t+€ÿA<_T :€B³”})€ 4pA‚t8`¤ëx8¹ H†E/ƒ@ž8˜ H(88@ ˜Y HØ€ALD9!p8;Á<H‘"€K!L€€I€a8Hˆ<Ÿ;À8;@8„žÀ£ëx“ÁP“Á\X“Á`“Ád“Áh“Ál“AT8¡P8Á8H„/ƒ@žL€a8|kxH$€ /€@ž€Kˆ/€AžÿXk/‹@žÿÜ;ÀHƒ½/ž@ž HH›Y “Ù £ëx;`ÿ”Hƒ}H@~/‹@ž$€ /€@ž€^"€ ™y  £ëxHƒE“™“y8!  cÛx€a»ÿà|¦}p N€ |¦¿!ÿä|›#yBŸ|¹+x||xè¦8”!ÿ A‚àˆ|tT`1@‚ =?Tb:)°„|BJ€4TÇþH8€H0Cÿÿ|/€Ažœ<_;ÀƒB°„HdT`1@‚ Tb:|BÒ€4p|ÐTþH8€H€É0Cÿÿ|/€@ž$ˆ|t/€+Až/€-Až /€.@ž0;Þ›ð@$|ð®¼ò|t/ƒ:@žÿˆ“™“ÙH;À8!`Ãóx€»!ÿä|¦N€ |¦¿ÿð|}x|ž#x”!ÿ°`€cH‹­8;ƒƒãxH†ñ€~T02T8|`PH†Ù€~/€Ažp/ƒAžh€…ãx|xH†ñ8 8€8ÀH0€]>8¥|0.| 1.€]>~|F}&J€B|P‘I}k‘i€]>|B2})2€ €]>~|F}&J€B|P‘I}k‘i€]~^|F}fZ€"|P‘+}J‘K=~^}&J}fZ€I$K$€ |P}J‘K €]>|F}&J8Æ88B(9i(‰09I0€‰ âŠ ™ °ë€…AœþÌ8`H8`ÿ˜8!P€»ÿð|¦N€ |¦¿Áÿø|~xBŸè¦T`1”!ÿ°@‚(=?Tb:)­l|BJ€4p|ÐTþH8€H~0Cÿÿ|/€@ž <Äóx8cœHˆõ8/ƒAž88!P|x€»Áÿø|¦N€ |¦¿!ÿä|}xBŸ|›#x|¹+xè¦;À”!ÿ ?_H;Þ›ð@P|}ð®ò|ctKÿÿ!/ƒ@žÿà|ð®8z›\|„tHˆi/ƒ@žÿÈ8›@ƒãxKÿô¡/ƒ@žÿ¬“¹“Ù8!`Ãóx€»!ÿä|¦N€ |¦¿aÿì|½+x8¥||x|›#x”!ÿ Kÿû‰,A‚$9c88@8c}i[x] H89`8`9  ›|kâ@L|H®||J/€/@ž<|\Zˆ/€/@ž,;Ë8½ ||ò|žØPKÿ÷õ,A€ Þ||òH 8@8}~[x] °*],]$|žØP8½Kÿþ}€|~/€Až€]ˆ/€/@ž 8 ›@,|®/€#@ž 8c8½|ƒØP||Kÿþ-8`H88`8!`€»aÿì|¦N€ |¦¿aÿì||y|›#x”!ÿ 8/˜8A‚T/„AžØH‡|}xcÛxH‡ ½8}H‚a|~yA‚´cÛxH†ñ8¡t|dxcÛxKÿþA/ƒAž H€/„Ažˆ|ƒ#xH†¥|~xH|€tdÛx/€Až@ƒãxH†¥8¡<|dxƒãxKÿýõ/ƒ@ž8€?H}ÑÄóx#ËxH}Ń¢,ÃxH{~C“x8H{ Äóx#ËxH{ƒŸ\ÃxHxU~ƒ£x88H)-/ƒ|}xAžcÛx; ÿœHt€a8Äóx…ãx8c„Kÿj‰,@¢cÛx; ÿ‘HL|dx~£«xKÿwe||yA‚€8/€AžcÛx; ÿ“H “¼8~ã»xHuÑ|vy@¢$cÛx; ÿ›Hp½CÓxHpµ#ËxHp­H88`dHuá|wy@¢0cÛx; ÿ˜Hp#ËxHp…CÓxHp}~óxHsuÃxHü~óxHzE<Ÿ8£~ã»x8„PHxñ8`HHu‰|~yA‚˜“º“>~¤«x8~“~ ’þ’Þ;¡Ÿ:ÀÿœHx1<Ÿ8£CÓx8„ŒœHvÝ€tœ¨Hu5~c›x88H& /ƒ@ž€a8Äóx¥ëx:Àÿ‘8c„Kÿgu|uyA‚ôKÿt9à>|}x;a<>?>_HÈ8`HHs|~yA‚À€\8~¤ëx8B\“ž@“ ’þ“^“>HwE€],8^<,’~D€,/€@œ‘ý,Åóx8ŒcÛxHjQ8‘õàcÛxHje8€cÛxHjy€rœØdÛx8 Hj‰|vyA‚< –@ž(:Àÿ˜H ¤ëx~£«xKÿr™|}x/@žÿ8:À€/€@ž,ƒãxHlýCÓxHlõ#ËxHoíÃxHlå~ã»xHlÝ€tœ¨Hsµ8!À~óx€¹áÿ¼|¦N€ |¦¿ÿà|~xBŸè¦”!ÿ0?¿ƒš ƒãxHsQ€~D88H$i/ƒ@žx€a8€ž€¾ 8c„KÿeÕ,A‚ €/€Až;^|dxCÓxKÿr­|{yA‚ü;!\$ËxKÿe /ƒ@žè€0€^<‚AžX;¡<<ŸÅóx8„ÿð£ëxHhá<Ÿ£ëx8„óDHhñ£ëx8€Hi<¤ëx8 €cšßHs­<Ÿ8£Ãx8„ˆ(HrY€v˜4Hp±~ƒ£x8?|}x;a@>_>> HÀ8`HHn…|~yA‚¼€\8~¤ëx8B\“ž@“^ “>“€8Hr­€],8^<,’žD€,/€@œ‘ý,Åóx8‘þcÛxHe¹8’ñlcÛxHeÍ8€cÛxHeá€s˜ddÛx8 Heñ|uyA‚ •€Až ¤ëx~ã»xKÿn |}x/@žÿ@H: ÿ˜€/€@ž,ƒãxHhmÃxHhe€a8Hk]CÓxHhU#ËxHhM€v˜4Ho%8!À~£«x€¹áÿ¼|¦N€ |¦¾aÿÌ|ž#xBŸ|{x|ƒ#xè¦8€8 ”!þ°;¡T8¥ëxKÿ~u/ƒAžH<Ÿ£ëx8„…ÄKÿp•/ƒAžcÛxÅóx8€œH-H¨Ãóx8€8 Kÿ~1/ƒAžcÛxÅóx8€KÿÿÔ€~€žKÿo‘|}y@‚cÛxÅóx8€ôKÿÿ°>߃–•|ƒãxHna8a@8ÿƒTÃxHiCÓx8@H!/ƒAž £ëxÅóx8€œHIcÛxKÿm}H„€a@€T8c„Kÿ[¥||xcÛxKÿm]/œAž$€/€Až#Ëx„ãxKÿgý|{y@‚£ëxÅóx8€œHé€wTH$€A@€B/‚ÿÿAž4€‚@œ(Åóx£ëx8€ôHµcÛx„ãxKÿhÃxHä;ALÃóx8€EÓxKÿw¥/ƒAžH€aL€P<¿8Á<8¥€¨Kÿ‡ /ƒAž(<ŸCÓx8„€¸Kÿi¥8ÿÿ/ƒAž8 <€A@€”/€ÿÿAž€AÿƒŒÃxHfA$Ëx8aÿ|Ù3x8H]ƒ·„ä;Á<£ëxH^CÓxÄóxH/ƒAž£ëx;€ÿœH^HD£ëx?H]ñ€x…H]I~ijx8 8Á8cÛxKÿú…||x£ëxH]é/œ@žÄóxCÓxH¹/ƒAž;€ÿœ; ;ÀH¼;¡@;P£ëxHHÝ£ëx„ãxHHU<Ÿ…ãx#Ëx8„dTH_-cÛxH`e8cH[½|~y@‚;€ÿ˜; HhdÛxH`8`ÿ;!Dƒw€xcÛxHXÙ8a8$ËxH m/ƒ@žü€AD;XÃx€b˜Kÿc=|~y@‚€€<8@888` ˜hAh})¦},Kx€¾8HH;£ €c8¾¤ëxKÿóu€¤ëxad8a8hHR½€<€¾8888` | ¦| xN€!HÄ€£D;£ 8Á@8ƒ 8£ëx@Kÿ4)€D¤ëxa88a<a<Ÿ£ëx€„pxH>q8€£ëxH>…<¤ëx8 8cz H>‘8H8ÿ›H8ÿ˜8! |x€ºÁÿØ|¦N€ |¦¿!ÿä|}xBŸ|œ#x|»+xè¦8|ú;x”!ÿ}Cx8`ÿŒ<_€Bk/‚8@ž|<_;Âu,ÃóxHG£ëx88Kÿø¥/ƒAžÃóxHG‘8`ÿœHHÃóxHG/œAž4/›Až,/šAž$/™AžƒãxdÛxEÓx&ËxKÿ+¹H8`ÿ›8!p€»!ÿä|¦N€ |¦¿ÿà|ù;xBŸ}Cx};Kxè¦8|}x”!ÿ|š#x|¸+x<_€Bjß;Ör|ÃóxHDÕ#Ëx88Kÿõí/ƒAžÃóxHDÙ8`ÿœHt/˜Až/Až /š@¾ ÃóxH /œAž/›Až /—@œ8vr|HD‘8`ÿ›H,ÃóxHD#ËxÃx¥ëx†ãxgÛx~è»xIÓxKÿÈ©8!€€ºÁÿØ|¦N€ |¦¿Aÿè||xBŸ|›#x|½+xè¦8|Ú3x”!ÿ8`ÿŒ<_€BgX/‚8@žt<_;ÂqtÃóxHCÙƒãx88Kÿôñ/ƒAžÃóxHCÝ8`ÿœH@/›Až /@¾ÃóxHC½8`ÿ›H ÃóxHC­ƒãxdÛx¥ëxFÓxKÿÍe8!p€»Aÿè|¦N€ |¦¾áÿÜ|zxBŸ|™#x|½+xè¦8|Ü3x”!ÿ€|û;x}Cx<_8`ÿŒ€Bf/‚8@žœ>ÿ;×p¬ÃóxHC CÓx88Kÿô!/ƒAžÃóxHC 8`ÿœHh/™Až /@¾ ÃóxH /œAž/›Až /˜@œ8wp¬HBÍ8`ÿ›H(ÃóxHB½CÓx$Ëx¥ëx†ãxgÛxÃxKÿÐá8!€€ºáÿÜ|¦N€ |¦¿ÿà|zxBŸ|œ#x|»+xè¦8|Ù3x”!ÿp|ø;x<_€Be˜/‚88ÿŒ@žø?¿;Ýo´ÃóxHBCÓx88Kÿó-/ƒA¾ÃóxHB8ÿœHÄ/œÿÿAž/œÃóx@/›@¾8}o´HAí8ÿ›H˜/™Ažÿì8}o´HAÕ8`LH@-8ÿ˜|~yA‚t8 “^dÛx8~ ;¡<“8<ŸÅóx“ž8„ñP£ëxH7…<Ÿ£ëx€„hôH7•8€£ëxH7©<¤ëx8 8crœH7µ88!|x€»ÿà|¦N€ |¦¿aÿì||xBŸ|›#x|½+xè¦88`ÿŒ”!ÿ<_€BdD/‚8@žp<_;Ân`ÃóxH@Ƀãx88Kÿñá/ƒA¾ÃóxH@Í8`ÿœH18ÿ˜|~yA‚l“¾“ždÛx8~ ;¡8<ŸÅóx8„ï<£ëxH5‘<Ÿ£ëx€„fàH5¡8€£ëxH5µ<¤ëx8 8cpˆH5Á88!|x€»!ÿä|¦N€ |¦¿ÿð|}xBŸ|œ#x8`ÿŒè¦8”!ÿ <_€BbP/‚8@žd<_;ÂllÃóxH>Ù£ëx88Kÿïñ/ƒA¾ÃóxH>Ý8`ÿœH0/œ@¾ÃóxH>Å8`ÿ›HÃóxH>µ£ëx„ãxKÿß58!`€»ÿð|¦N€ |¦¿Aÿè|{xBŸ|š#x|½+xè¦8|Ü3x”!ÿ8`ÿŒ<_€Ba /‚8@ž|<_;Âk¼ÃóxH>!cÛx88Kÿï9/ƒA¾ÃóxH>%8`ÿœHH/šAž/Až /œ@¾ÃóxH=ý8`ÿ›H ÃóxH=ícÛxDÓx¥ëx†ãxKÿßi8!p€»Aÿè|¦N€ |¦¿ÿà|{xBŸ|š#x|¼+xè¦8|Ù3x”!ÿp|ø;x<_€B`Ð/‚88ÿŒ@žü?ß;¾jì£ëxH=McÛx88Kÿîe/ƒA¾£ëxH=Q8ÿœHÈ/šAž/œÿÿAž/œA½ £ëxH/™@ž8~jìH=8ÿ›H8~jìH= 8`LH;a8ÿ˜|~yA‚t8“~DÓx8~ ;¡<<ŸÅóx“88„숣ëxH2¹<Ÿ£ëx€„d,H2É8€£ëxH2Ý<¤ëx8 8cmÔH2é88!|x€»ÿà|¦N€ |¦¿ÿð|}xBŸ|œ#x8`ÿŒè¦8”!ÿ <_€B_x/‚8@žT<_;Âi”ÃóxHÿ8Ç9 | ¦8WgL8B€9)/€Až 8BBÿì8ÿš/€ÿš@¾H$/‰È8 ÿÿ@žÿèKÿÿà8`ÔH0õ|zy@¢8y`H2…8`ÿ˜Hd; “z“š“º“º˜8€8 8zœH'Y8ÿÿ“ºt97gL8@”8y`€XVlT:I.H2)8`H8`ÿ›8!p€ºáÿÜ|¦N€ |¦/ƒ¿ÿðBŸ|#x覔!þðAž€/„Ažx;@8€8¡88Á<‡ãxKÿ |~y@ ;Àÿ”HT@‚P<Ÿ8 ƒãx8„FtH4½€a8¤ëxH/q|}x€a8H*¥/Až/f;Àÿ˜Až;Àÿ•H;Àÿ›8!Ãóx€»ÿð|¦N€ |¦¾ÿÐ||xBŸ|#x|Ú3xè¦|ù;x}Cx”!ÿ};Kx;ÀÿŒ<_€BTX/‚@¾ø/‰Ažì/‡Ažä>Ÿ>¿;Ô^tÃóxH1€TT/€A¾Ãóx;ÀÿˆH`?ß8Ç9 | ¦8^e08B€9)/€Až 8BBÿì8ÿš/€ÿš@¾(H/‰È8 ÿÿ@žÿèKÿÿà8t^t;Àÿ˜H0mHX8`ÔH.Á|wyA¢ÿä€[/œ9>e08;—x:× TB:~âI.Ð@ž´/š@ž¬/;Àÿ›Až¤£ëx;ÀÿŠH3+ƒ³A¤ëx~óxH2½£ëx„ãxKÿýí|~y@‚p8;€“7““×Г×|t“—“×€;·œ8€8 £ëxH$±8ÿÿ“ט€wx<Ÿ”8„@ÀH+/ƒw|@¾ß;Ø\$ÃóxH.Í€R/€A¾Ãóx; ÿˆH0/›Až /™Až/œAžˆ/€@ž8x\$; ÿ›H.eH|?¿8Ç9 | ¦8]bà8B€9)/€Až 8BBÿì8ÿš/€ÿš@¾H$/‰È8 ÿÿ@žÿèKÿÿà8`ÔH,e|~y@¢8x\$; ÿ˜KÿÿŒ€8]bà: ; ;^ „ãx;žœCÓxT:Â.“¾Ð’¾H0}8“¾|“¾€“¾x“>t’þ8€8 ƒãxH"‘8ÿÿ“¾˜CÓx8žx”Kÿûq|}yA‚ƒãx8€H"H8€~x<Ÿ8„>pH(Í/ƒ~|@¾,8€ƒãx; ÿ•H!Ñ€~xH(‰€{KÿôÁ8x\$H0€~x<Ÿ8„>8H(‰8ž„EÓx~€€~xKÿ'=’¶R8x\$H,é8!p£ëx€º¡ÿÔ|¦N€ |¦¿ÿð8`ÿŒBŸè¦”!ÿ ?߀OÜ/€@žÈ;¡@8a8¤ëxKÿÝá/ƒ@ž €a8Kÿõ­¤ëx8aÄ;¡@¡à8 IÁäáè‘ì‘!ð‘Aô£ëxH"u£ëx8¸|zx€a˜ ÿý|DJ.˜Kÿþ`|H®9)˜ ÿÿ‰(@9kAœÿÌN€ |¦½¡ÿ´9c|ox9£}h¦9à |Š#x9;Áÿh€ÿ¨8| ¦€ã€Ã‚ã ˆJ|@®‰*‰j9JTB@.U)€UkÀ|x|Kx|[x|ñ.9BÿÌ€¡ÿh~à8x|ë08€ÿl‚aÿp9€:}kx€ÿ¨€aÿt‚Aÿxƒ¡ÿ|}k*ƒÿ€ƒaÿ„ƒAÿˆ‚!ÿŒ}`Zƒ!ÿƒÿ”‚Áÿœ‚¡ÿ =k×k‚ÿ¤9k¤xUk8>}gZ|ÀXx|êX8}Jx}J"}WR‚áÿ˜=JèÈ9J·VUJ`>}KR|àPx}iP8})x8@| ¦})š}&J=)$ 9)pÛU)ˆ>}*J}`Hx}BH8|Bx|B|G|I}Hx} 8|Cx|’}k=kõ|9k¯Uk8>}bZ}(Xx|@X8|Cx|ê}J=JGˆ9JÆ*UJ`>}KR|HPx}`P8|Cx|â})=)¨09)FU)ˆ>}*J}hHx}@H8|Cx|Ú|B|I}Hx} 8|Cx|Ò}k=ki9k˜ØUk8>}bZ}(Xx|@X8|Cx|Š}J=J‹E9J÷¯UJ`>}KR|HPx}`P8|Cx|Ê})=)ÿÿ9)[±U)ˆ>}*J}hHx}@H8|Cx|Â|B|I}Hx} 8|Cx|º}k=kk9k"Uk8>}bZ}(Xx|@X8|Cx|²}J=Jý˜9Jq“UJ`>}KR}FPø}`P8|H08|Cx|ª})=)¦y9)CŽU)ˆ>}*J}'Hø}@H8|ÆH8}h88|Cx|¢|B|I}@8|ç8|3x|}k=kö9k%bUk(>}bZ} X8}hx|;x|}J=JÀA9J³@UJH>}KR|@P8}GXx|Cx|})=)&^9)ZQU)p>}*J}`H8}(Px|;x||B|I}@8|GHx|Cx|}k=kÖ/9k]Uk(>}bZ} X8}hx|;x|}J=JD9JSUJH>}KR|@P8}GXx|Cx|})=)Ø¢9)æU)p>}*J}`H8}(Px|;x||B|I}@8|GHx|Cx|}k=k!â9kÍæUk(>}bZ} X8}hx|;x|}J=JÃ79JÖUJH>}KR|@P8}GXx|Cx|})=)ôÕ9) ‡U)p>}*J}`H8}(Px|;x||B|I}@8|GHx|Cx|}k=k©ä9kéUk(>}bZ} X8}fx|;x€áÿ¨|}J=Jüð9J£øUJH>}KR|@P8}HXx|3x|})=)go9)ÙU)p>}*J}`H8|Cx||B|I} x}@x|}k=kÿú9k9BUk >}bZ|@Zx} x|}J=J‡r9JöUJX>}KR}`Rx|@x|})=)m9)a"U)€>}*J}@Jx}`x||B|I} x}@x|}k=k¤¿9kêDUk >}bZ|@Zx} x|}J=JKß9JÏ©UJX>}KR}`Rx|@x|})=)ö»9)K`U)€>}*J}@Jx}`x||B|I} x}@x|}k=k(›9k~ÆUk >}bZ|@Zx} x|}J=Jê¡9J'úUJX>}KR}`Rx|@x|})=)Ôï9)0…U)€>}*J}@Jx}`x||B|I} x}@x|}k=kÙÕ9kÐ9Uk >}bZ|@Zx} x|}J=JæÜ9J™åUJX>}KR}`Rx|@x|})=)¢9)|øU)€>}*J}@Jx}`x||B|I|@S8} x|¥}k*=kô)9k"DUk0>}bZ}`K8|@x{}JÚ=JC+9Jÿ—UJP>}KR}@8}`x~µ})ª=)«”9)#§U)x>}*J} [8}@x½|Bê|I|@S8} x~÷}kº=ke[9kYÃUk0>}bZ}`K8|@x|c}J=J 9JÌ’UJP>}KR}@8}`x9})Ê=)ÿð9)ô}U)x>}*J} [8}@x|„|B"|I|@S8} xZ}kÒ=ko¨9k~OUk0>}bZ}`K8|@x~”}J¢=Jþ-9JæàUJP>}KR}@8}`xœ})â=)£9)CU)x>}*J} [8}@x~Ö|B²|I|@S8} x~R}k’=k÷S9k~‚Uk0>}bZ}`K8} :|è¦|@x‘}JÂ=J½;9Jò5UJP>}KR}@8}`x~s})š=)*Ø9)Ò»U)x>}*J}+[8}KZx~1Z|BŠ|I|BBG€ })‘-€}J‘N~ ñ®9ŒBÿø€¹¡ÿ´|¦N€ |¦¿!ÿäT©8||x|»+x|™#x”!ÿ ``€C|JTB@@#9)‘#H##Â@W`~›ð@|J@œ|Dx;\89 H|/ž;\89 |Z| ¦@¾8| ¦H|H®|I®9)BÿôƒãxDÓx¹ò;Þ?KÿõH¤ëxƒãx;Þ@;½@Kÿõu›ð@Aÿè8ÿÁ8€| x|@ØP}Z"9`|™J/‚8B|I¦@¾8| ¦H|X®| Y®9kBÿô8!`€»!ÿä|¦N€ |¦¿¡ÿô8 BŸ|ž#x|}xè¦8„”!ÿ 8a8Kÿô™€Tî¾+€7  8@  x<ŸÃóx8„;ŒKÿþeÃóx8 88KÿþU£ëxÄóx8 KÿôQ9 X8@8})¦|ñ®8BBÿø8!`€»¡ÿô|¦N€ |¦¿¡ÿô8€|}x”!ÿ 8a8H€A8<˜!<=@8!``–€aJ@|BÖU+8U)<})Z|BJ= ²|Cxa)Ò|Bþp}ƒP}bI‘}‘€»¡ÿô|¦N€ |¦¿ÿð8  ||x8€”!þ@;¡£ëxHý£ëx8€Hq8€8a˜Hå8a8Kÿó¤ëx8a88  Kÿý=ƒãx88Kÿþy8!À€»ÿð|¦N€ |¦¿¡ÿô|}xBŸè¦”!ÿ ?߀Q /€@ž@8a8KÿÿYˆ88@ÿ€=9+Q|x A<˜88°IQ €A8KQH=8KQ€ Q8!`¡"±=``»¡ÿô€|¦N€ |¦¿ÿðBŸè¦”!ÿ‹ƒˆ ‹£€£ Ã ã‰‰# ‰C ˆC ‰c |ƒ#x<Ÿ8“¡D“H8„0 A<‘a@H‰8!p€»ÿð|¦N€ |¦¾¡ÿÔ|yxBŸè¦”!ÿp>¿€u;pHí=?€ P$/€@ž?Ÿ88@°P(IP$H?Ÿ?¿:áP;ÝP0~ã»xKÿý~€APž€aT‹@ž ŒAž8|lx|Kx°P(H \P(+‚ÿAÿ¼8°P( |P(8@9=P0?Ì«8a8“©“ÉKÿþ€P/€AžD>ß8a88>8 8VP8  "£Bƒbƒ‚°B‘!>H/ƒAž`H>ß?Ÿ€P /€@ž<~ã»xKÿüµ€AP€TTI°T ²¾TK²¾},cx‘aP}cbx‘TH-8P HTz>H$›è@A›è@žœð@@ 8T>W£„>¡A<8ÿ€³¹WKƾ›Y Ti>}kxa)±Y™y±9€8“Ù``ˆA=‰!< D±AH|Ht})tˆ;ˆA:|tˆ9|FtˆA8|t€P|Jt/€@ž =88KPP“¢“ÂH=€ P8VP89kP™B³B™ ™" ˜â ˜Â ˜¢ “¢“€è@A<€è@ž€ €ð@A(=@õaJá|~R||k|Ð|@êK€u;pHy8!8`€º¡ÿÔ|¦N€ |¦¿Aÿè}Cx}:Kx|}x”!ÿ áÁ;X¡Hüƒãxˆ ˆA ‰!‰a‰A‰ á Áˆ¡˜Vˆ ˜AU™!T™aR™AQ™P°áN°ÁL˜W˜¡SKÿîqƒãx8H8 Kÿø•ƒãxdÛxEÓxKÿø…„ãx8a8KÿùÁ€A@€U)¾`B0})x°]™=``»Aÿè€|¦N€ €C€‚Až‚@Aœ|8`N€  C ‚@žÿä C ‚@žÿÔˆCˆ‚@žÿĈC ˆ ‚@žÿ´8| ¦ˆC ˆ ‚@AœAÿ 8c8„Bÿä8`N€ 8`ÿÿN€ |¦¾ÿÐ|wxBŸ|#x|õ;xè¦|¹+x|Ô3x”!þ€``€d;;HH ­ Ý<Ÿ|exÃx8„+XH•8a8KÿyƒãxKÿq<_~ã»x;´ÄóxH 1|zy@‚¼Äóx~ã»xH ½|vyA‚<Ÿ8a88„+`KÿA/ƒ@ž8a8ÃxKÿ-/ƒ@žð<_8a8;Â!ìÄóxKÿ/ƒ@žÔÄóxƒãxKÿý/ƒ@žÀ~ã»xH /ƒAž¸~ijxH Á|~y &@‚Ä€8~ã»x;`H E|dyA‚¸~óxH •HL8€H IH Å|}yA‚lH y|~yA‚tHÍ8¡X|dxÃóxKÿ‰/ƒAœX€X/€@žL€\€¡`8a8Kÿí/ƒ@ž<Ÿ8a88„+hKÿ=/ƒ@ž8a8ÃxKÿ)/ƒ@žì€¡l/…Až€hˆ/€/Až<<_8a8;Â!ìÄóxKÿñ/ƒ@ž´ÄóxƒãxKÿÝ/ƒ@ž €¡l€h8a8Kÿ /ƒ@žˆ€h€¡lƒãxKÿñ/ƒ@žp€8€A<|Dˆÿÿ/€/Až$<Ÿ8a88 8„!ìKÿ½/ƒ@ž<€8£ëxH i|~y &@‚L;Àƒãx/ž &W½àKÿ|{xH8;Àÿ˜H;Àÿ•/ž &W½àH;Àÿ”, &8`;`H CÓxH ƒãxKÿ8a8Kÿù¸ A‚;@;€HDcÛxH|}yA‚ |[êˆÿÿ/€/@ž<_;ÂìH <_;Â!ìˆ/€/@ž;9ÃóxHѽ#ËxHŽ8}H ||y@‚;Àÿ˜;@,\Óx &HÀdÛxHQÄóxƒãxHå$ËxƒãxHÙÃxHq;£ƒãxHe½+³@;ÀÿŠ;@,Hl<_Ãx~£«x9"+`€B+`€ UH…„ãx~£«xHy~ã»xH |zy@‚ &;ÀH$HùDÓx~†£x|exƒãxKÿmå|~y &cÛxHõƒãxHí¸ A‚ CÓxHÝ8!€Ãóx€ºÿÐ|¦N€ |¦BŸ}h¦=k|¦…‹0}‰¦N€ |¦BŸ}h¦=k|¦…‹/ø}‰¦N€ |¦BŸ}h¦=k|¦…‹/Ü}‰¦N€ |¦BŸ}h¦=k|¦…‹/À}‰¦N€ |¦BŸ}h¦=k|¦…‹/¤}‰¦N€ |¦BŸ}h¦=k|¦…‹/ˆ}‰¦N€ |¦BŸ}h¦=k|¦…‹/l}‰¦N€ |¦BŸ}h¦=k|¦…‹/P}‰¦N€ |¦BŸ}h¦=k|¦…‹/4}‰¦N€ |¦BŸ}h¦=k|¦…‹/}‰¦N€ |¦BŸ}h¦=k|¦…‹.ü}‰¦N€ |¦BŸ}h¦=k|¦…‹.à}‰¦N€ |¦BŸ}h¦=k|¦…‹.Ä}‰¦N€ |¦BŸ}h¦=k|¦…‹.¨}‰¦N€ |¦BŸ}h¦=k|¦…‹.Œ}‰¦N€ |¦BŸ}h¦=k|¦…‹.p}‰¦N€ |¦BŸ}h¦=k|¦…‹.T}‰¦N€ |¦BŸ}h¦=k|¦…‹.8}‰¦N€ |¦BŸ}h¦=k|¦…‹.}‰¦N€ |¦BŸ}h¦=k|¦…‹.}‰¦N€ |¦BŸ}h¦=k|¦…‹-ä}‰¦N€ |¦BŸ}h¦=k|¦…‹-È}‰¦N€ |¦BŸ}h¦=k|¦…‹-¬}‰¦N€ |¦BŸ}h¦=k|¦…‹-}‰¦N€ |¦BŸ}h¦=k|¦…‹-t}‰¦N€ |¦BŸ}h¦=k|¦…‹-X}‰¦N€ |¦BŸ}h¦=k|¦…‹-<}‰¦N€ |¦BŸ}h¦=k|¦…‹- }‰¦N€ |¦BŸ}h¦=k|¦…‹-}‰¦N€ |¦BŸ}h¦=k|¦…‹,è}‰¦N€ |¦BŸ}h¦=k|¦…‹,Ì}‰¦N€ |¦BŸ}h¦=k|¦…‹,°}‰¦N€ |¦BŸ}h¦=k|¦…‹,”}‰¦N€ |¦BŸ}h¦=k|¦…‹,x}‰¦N€ |¦BŸ}h¦=k|¦…‹,\}‰¦N€ |¦BŸ}h¦=k|¦…‹,@}‰¦N€ |¦BŸ}h¦=k|¦…‹,$}‰¦N€ |¦BŸ}h¦=k|¦…‹,}‰¦N€ |¦BŸ}h¦=k|¦…‹+ì}‰¦N€ |¦BŸ}h¦=k|¦…‹+Ð}‰¦N€ |¦BŸ}h¦=k|¦…‹+´}‰¦N€ |¦BŸ}h¦=k|¦…‹+˜}‰¦N€ |¦BŸ}h¦=k|¦…‹+|}‰¦N€ |¦BŸ}h¦=k|¦…‹+`}‰¦N€ |¦BŸ}h¦=k|¦…‹+D}‰¦N€ |¦BŸ}h¦=k|¦…‹+(}‰¦N€ |¦BŸ}h¦=k|¦…‹+ }‰¦N€ |¦BŸ}h¦=k|¦…‹*ð}‰¦N€ |¦BŸ}h¦=k|¦…‹*Ô}‰¦N€ |¦BŸ}h¦=k|¦…‹*¸}‰¦N€ |¦BŸ}h¦=k|¦…‹*œ}‰¦N€ |¦BŸ}h¦=k|¦…‹*€}‰¦N€ |¦BŸ}h¦=k|¦…‹*d}‰¦N€ |¦BŸ}h¦=k|¦…‹*H}‰¦N€ |¦BŸ}h¦=k|¦…‹*,}‰¦N€ |¦BŸ}h¦=k|¦…‹*}‰¦N€ |¦BŸ}h¦=k|¦…‹)ô}‰¦N€ |¦BŸ}h¦=k|¦…‹)Ø}‰¦N€ |¦BŸ}h¦=k|¦…‹)¼}‰¦N€ |¦BŸ}h¦=k|¦…‹) }‰¦N€ |¦BŸ}h¦=k|¦…‹)„}‰¦N€ |¦BŸ}h¦=k|¦…‹)h}‰¦N€ |¦BŸ}h¦=k|¦…‹)L}‰¦N€ |¦BŸ}h¦=k|¦…‹)0}‰¦N€ |¦BŸ}h¦=k|¦…‹)}‰¦N€ |¦BŸ}h¦=k|¦…‹(ø}‰¦N€ |¦BŸ}h¦=k|¦…‹(Ü}‰¦N€ |¦BŸ}h¦=k|¦…‹(À}‰¦N€ |¦BŸ}h¦=k|¦…‹(¤}‰¦N€ |¦BŸ}h¦=k|¦…‹(ˆ}‰¦N€ |¦BŸ}h¦=k|¦…‹(l}‰¦N€ |¦BŸ}h¦=k|¦…‹(P}‰¦N€ |¦BŸ}h¦=k|¦…‹(4}‰¦N€ |¦BŸ}h¦=k|¦…‹(}‰¦N€ |¦BŸ}h¦=k|¦…‹'ü}‰¦N€ |¦BŸ}h¦=k|¦…‹'à}‰¦N€ |¦BŸ}h¦=k|¦…‹'Ä}‰¦N€ |¦BŸ}h¦=k|¦…‹'¨}‰¦N€ |¦BŸ}h¦=k|¦…‹'Œ}‰¦N€ |¦BŸ}h¦=k|¦…‹'p}‰¦N€ |¦BŸ}h¦=k|¦…‹'T}‰¦N€ |¦BŸ}h¦=k|¦…‹'8}‰¦N€ |¦BŸ}h¦=k|¦…‹'}‰¦N€ |¦BŸ}h¦=k|¦…‹'}‰¦N€ |¦BŸ}h¦=k|¦…‹&ä}‰¦N€ |¦BŸ}h¦=k|¦…‹&È}‰¦N€ |¦BŸ}h¦=k|¦…‹&¬}‰¦N€ |¦BŸ}h¦=k|¦…‹&}‰¦N€ |¦BŸ}h¦=k|¦…‹&t}‰¦N€ |¦BŸ}h¦=k|¦…‹&X}‰¦N€ |¦BŸ}h¦=k|¦…‹&<}‰¦N€ |¦BŸ}h¦=k|¦…‹& }‰¦N€ |¦BŸ}h¦=k|¦…‹&}‰¦N€ |¦BŸ}h¦=k|¦…‹%è}‰¦N€ |¦BŸ}h¦=k|¦…‹%Ì}‰¦N€ |¦BŸ}h¦=k|¦…‹%°}‰¦N€ |¦BŸ}h¦=k|¦…‹%”}‰¦N€ |¦BŸ}h¦=k|¦…‹%x}‰¦N€ |¦BŸ}h¦=k|¦…‹%\}‰¦N€ |¦BŸ}h¦=k|¦…‹%@}‰¦N€ |¦BŸ}h¦=k|¦…‹%$}‰¦N€ |¦BŸ}h¦=k|¦…‹%}‰¦N€ |¦BŸ}h¦=k|¦…‹$ì}‰¦N€ |¦BŸ}h¦=k|¦…‹$Ð}‰¦N€ |¦BŸ}h¦=k|¦…‹$´}‰¦N€ |¦BŸ}h¦=k|¦…‹$˜}‰¦N€ |¦BŸ}h¦=k|¦…‹$|}‰¦N€ |¦BŸ}h¦=k|¦…‹$`}‰¦N€ |¦BŸ}h¦=k|¦…‹$D}‰¦N€ |¦BŸ}h¦=k|¦…‹$(}‰¦N€ |¦BŸ}h¦=k|¦…‹$ }‰¦N€ |¦BŸ}h¦=k|¦…‹#ð}‰¦N€ |¦BŸ}h¦=k|¦…‹#Ô}‰¦N€ |¦BŸ}h¦=k|¦…‹#¸}‰¦N€ |¦BŸ}h¦=k|¦…‹#œ}‰¦N€ |¦BŸ}h¦=k|¦…‹#€}‰¦N€ |¦BŸ}h¦=k|¦…‹#d}‰¦N€ |¦BŸ}h¦=k|¦…‹#H}‰¦N€ |¦BŸ}h¦=k|¦…‹#,}‰¦N€ |¦BŸ}h¦=k|¦…‹#}‰¦N€ |¦BŸ}h¦=k|¦…‹"ô}‰¦N€ |¦BŸ}h¦=k|¦…‹"Ø}‰¦N€ |¦BŸ}h¦=k|¦…‹"¼}‰¦N€ |¦BŸ}h¦=k|¦…‹" }‰¦N€ |¦BŸ}h¦=k|¦…‹"„}‰¦N€ |¦BŸ}h¦=k|¦…‹"h}‰¦N€ |¦BŸ}h¦=k|¦…‹"L}‰¦N€ __dyld_call_module_initializers_for_dylibRsdcDscsscSXcsscssccCACHE-CONTROL: max-age=EXT:LOCATION: redsonicST: USN: ssdp:alivessdp:byebyeQsssdcsdcsscsscsscSXcsscc*HOST: 239.255.255.250:NT: NTS: "ssdp:discover"%s::upnp:rootdeviceupnp:rootdevice%s::%s%imax-age = %d%0M-SEARCH * HTTP/1.1 HOST: %s:%d MAN: "ssdp:discover" MX: %d ST: %s uuid:schemas:deviceuuid:%surn%suuid::urn::service:urn:device::all:rootdeviceuuid:deviceTypeUDNserviceserviceType239.255.255.250:1900CONTENT-TYPE: text/xml; charset="utf-8" Invalid ActionAction FailedInvalid Var%dRNsDsSXccsssssEXT: s:Client UPnPError bhttp://schemas.xmlsoap.org/soap/envelope/Body"%surn:schemas-upnp-org:control-1-0 %q%i ; ns = %s-SOAPACTION%sQueryStateVariableXML errorRNsDsSXccsss RNsDsSXccbbbbOut of memory%s:%s%0M-MAN: "http://schemas.xmlsoap.org/soap/envelope/"; ns=01 01-SOAPACTION:EnvelopeQueryStateVariableResponsereturnerrorCodeerrorDescriptionFaultdetailUPnPErrorQsbcNssUccsssSOAPACTION: "urn:schemas-upnp-org:control-1-0#QueryStateVariable" <%s:%sqNssssbscUcbbbbbbbSOAPACTION: "#" ResponseqNssssbscUcbbb 127.0.0.1ShutDownmserv start: bind failedserviceListserviceIdSCPDURLcontrolURLeventSubURLdevicerootURLBaseACCEPTACCEPT-CHARSETACCEPT-ENCODINGACCEPT-LANGUAGEACCEPT-RANGESCACHE-CONTROLCALLBACKCONTENT-ENCODINGCONTENT-LANGUAGECONTENT-LENGTHCONTENT-LOCATIONCONTENT-RANGECONTENT-TYPEDATEEXTHOSTIF-RANGELOCATIONMANMXNTNTSRANGESEQSERVERSIDSOAPACTIONSTTETIMEOUTTRANSFER-ENCODINGUSER-AGENTUSNGETHEADM-POSTM-SEARCHNOTIFYPOSTSUBSCRIBEUNSUBSCRIBE ()<>@,;:\"/[]?={}%ihttp%w/%w%L%c%d . %d %d : %R%c, chunked%x%L%c%c%s %S%w%c%s %S %ihttp%w/%w%L%c%d . %dhttp/%x %s/%s, UPnP/1.0, Portable SDK for UPnP devices/1.6.1 rb0 %xTRANSFER-ENCODING: chunked %zu%qdDATE: %s%s, %02d %s %d %02d:%02d:%02d GMT%sCONNECTION: close shcCONTENT-LENGTH: SERVER: USER-AGENT: ssX-User-Agent: HTTP/%d.%d %d ssc%s%d %s%s

NTcstext/htmlssbsdsdc HTTP/.QsbcCONTENT-TYPE: //QsbcGDCUcRange: bytes=%d-%d RSCBQsbcDCUcQsbcDCUTNcQsbcDCUTKcQsbcDCUTcaudiovideoimageapplicationtextoctet-stream%s/%s,%qd%qdbytes=CONTENT-RANGE: bytes %qd-%qd/%qd CONTENT-RANGE: bytes 0-%qd/%qd trailerswbrtext/xmlindex.html/index.htmlRTGKDstcSXcCcLAST-MODIFIED: RKTDstcSXcCcRNTDstcSXcCcRTDstcSXcCcIbfIbbRTDSXcCcRNTGDstcSXcCc%itext%w/%wxml;/?:@&=+$,{}-_.!~*'()%2x <%s>%s TIMEOUT: Second-%dTIMEOUT: Second-infiniteRDSNXcsscsccSID: ssscsdccSEQ: qsbbCONTENT-TYPE: text/xml CONTENT-LENGTH: %zu NT: upnp:event NTS: upnp:propchange CONTENT-TYPE: text/xml CONTENT-LENGTH: %ld NT: upnp:event NTS: upnp:propchange upnp:event%iSecond-%d%0Second-infiniteqsscUcinfiniteqsscssccTIMEOUT: Second-qsssdscscssccCALLBACK: NT: upnp:event%d%0upnp:propchangeUPNP_E_SUCCESSUPNP_E_INVALID_HANDLEUPNP_E_INVALID_PARAMUPNP_E_OUTOF_HANDLEUPNP_E_OUTOF_CONTEXTUPNP_E_OUTOF_MEMORUPNP_E_INITUPNP_E_BUFFER_TOO_SMALLUPNP_E_INVALID_DESCUPNP_E_INVALID_URLUPNP_E_INVALID_SIDUPNP_E_INVALID_DEVICEUPNP_E_INVALID_SERVICEUPNP_E_BAD_RESPONSEUPNP_E_BAD_REQUESTUPNP_E_INVALID_ACTIONUPNP_E_FINISHUPNP_E_INIT_FAILEDUPNP_E_BAD_HTTPMSGUPNP_E_NETWORK_ERRORUPNP_E_SOCKET_WRITEUPNP_E_SOCKET_READUPNP_E_SOCKET_BINDUPNP_E_SOCKET_CONNECTUPNP_E_OUTOF_SOCKETUPNP_E_LISTENUPNP_E_EVENT_PROTOCOLUPNP_E_SUBSCRIBE_UNACCEPTEDUPNP_E_UNSUBSCRIBE_UNACCEPTEDUPNP_E_NOTIFY_UNACCEPTEDUPNP_E_INTERNAL_ERRORUPNP_E_INVALID_ARGUMENTUPNP_E_OUTOF_BOUNDSUnknown Error e:property%8.8x-%4.4x-%4.4x-%2.2x%2.2x-%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%s:%dhttp://://`SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecInternal Server ErrorNot ImplementedBad GatewayService UnavailableGateway TimeoutHTTP Version Not SupportedBad RequestUnauthorizedPayment RequiredForbiddenNot FoundMethod Not AllowedNot AcceptableProxy Authentication RequiredRequest TimeoutConflictGoneLength RequiredPrecondition FailedRequest Entity Too LargeRequest-URI Too LongUnsupported Media TypeRequested Range Not SatisfiableExpectation FailedMultiple ChoicesMoved PermanentlyFoundSee OtherNot ModifiedUse ProxyTemporary RedirectOKCreatedAcceptedNon-Authoratative InformationNo ContentReset ContentPartial ContentContinueSwitching Protocols`aifaiffaifcaiffaiffaiffasfx-ms-asfasxx-ms-asfaubasicavimsvideobmpbmpdcrx-directordibbmpdirx-directordxrx-directorgifgifhtahtahtmhtmlhtmlhtmljarjava-archivejfifpjpegjpejpegjpegjpegjpgjpegjsx-javascriptkarmidim3umpegurlmidmidimidimidimovquicktimemp2vx-mpeg2mp3mpegmpempegmpegmpegmpgmpegmpvmpegmpv2x-mpeg2pdfpdfpjpjpegpjpegjpegplghtmlplsscplspngpngqtquicktimeramx-pn-realaudiormimidrmmx-pn-realaudiortfrtfshtmlhtmlsmfmidisndbasicsplfuturesplashssmstreamingmediaswfx-shockwave-flashtartartclx-tcltextplaintiftifftifftifftxtplainulwbasicwavwavwaxx-ms-waxwmx-ms-wmwmax-ms-wmawmvx-ms-wmvwvxx-ms-wvxxbmx-xbitmapxmlxmlxslxmlzx-compresszipzipuu@uPu`wxw~(~0~@~P~`~p~€~Œ~ ~´~Ä ~Ø!~è~ø " $ ( ,04#<@HLX\$`h|ˆŒ˜ ¬´¼È´ Š(Šœ‹ØŒ8Œ”‚P‚X‚`‚h‚tŒ´>€†ÿÿÿœ†ÿÿÿ›†,ÿÿÿš†Dÿÿÿ™†Xÿÿÿ˜†pÿÿÿ—†„ÿÿÿ–†ÿÿÿ•†¨ÿÿÿ”†¼ÿÿÿ“†Ðÿÿÿ’†äÿÿÿ‘†üÿÿÿ‡ÿÿÿއ(ÿÿÿ‡<ÿÿÿŒ‡Tÿÿÿ‹‡dÿÿÿ‰‡xÿÿÿ8‡Œÿÿÿ7‡¤ÿÿÿ6‡¸ÿÿÿ5‡Ìÿÿÿ4‡àÿÿÿ3‡øÿÿÿ2ˆ ÿÿþÔˆÿÿþÓˆ4ÿÿþÒˆPÿÿþшpÿÿüqˆŒÿÿþ ˆ¤ÿÿþˆ¼€ààÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ›,›ÄœDœü \¢‘¬‘°¢  ž¬œø¢(u„l›@<¢T@@ @@@@@ @(@0@8@@@H@P@X@`@h@p@x@€@ˆ@@˜@ @¨@°@¸@À@È@Ð@Ø@à@è@ð@ø@‘@‘@‘@‘@‘ @‘(@‘0@‘8@‘@@‘H@‘P@‘X@‘`@‘h@‘p@‘t@‘x@‘|@‘€@‘ˆ@‘Œ@‘@‘”@‘˜@‘œ@‘¸@‘À@‘È@‘Ð@‘Ø@‘à@‘è@‘ð@‘ø@’@’@’@’@’ @’(@’0@’8@’@@’H@’P@’X@’`@’h@’p@’x@’€@’ˆ@’@’˜@’ @’¨@’°@’¸@“@“@“ @“@“@“@“@“ @“$@“(@“,@“0@“4@“8@“<@“@@“D@“H@“L@“P@“T@“X@“\@“`@“d@“h@“l@“p@“t@“x@“|@“€@“„@“ˆ@“Œ@“@“”@“˜@“œ@“ @“¤@“¨@“¬@“°@“´@“¸@“¼@“À@“Ä@“È@“Ì@“Ð@“Ô@“Ø@“Ü@“à@“ä@“è@“ì@“ð@“ô@“ø@“ü@”@”@”@” @”@”@”@”@” @”$@”(@”,@”0@”4@”8@”<@”@@”D@”H@”L@”P@”T@”X@”\@”`@”d@”h@”l@”p@”t@”x@”|@”€@”„@”ˆ@”Œ@”@””@”˜@”œ@” @”¤@”¨@”¬@”°@”´@”¸@”¼@”À@”Ä@”È@”Ì@”Ð@”Ô@”Ø@”Ü@”à@”ä@”è@”ì@”ð@”ô@”ø@”ü@ r „Ì ü µ È$ à´ ó1ˆ 64 ,;T A< R=L l>° }H` ‹I šI€ ®J0 ¾Jt ÙKt íU¬W[” \ô/yø@|˜Q|°b€¼uƒ¼~‹Œ…Ïl”Ñ´£í¸îDÌîÀØúðê 0 @ 8#¸>EÌKGWKä_L,m ”¨ºÉÚ‘(í‘pù‘t‘x‘|‘€)‘„6‘œJ’¼S ¥ ` ¥¤n ¥¨} ¥¬Œ ¥°š ¥´¨ ¥¼¶ ¥ØÄ ¥øÒ ¦@à ¦Xð ©”û ©¼ ©è ©ð$ ©ø1 ªA ªN ª [ ªq ª ª …1И5ä§Ë4¾ÑÈpðØ!X€'¼7‘´F •\Pb8kaŒ„a“6(Ÿ® HÃy4ÚxàñÔmÈØ+Œ:ÆðHm ]nq ¢( ›Äž ¢€« ¾DÎ œDÚ œøæW ðK¤ùUضȲ&ºÌ7-ÔO9`žÄ|xD–o­* ½ HȼÞìPýUUX"Ut3NLRô\PnYøUðż—Æ€ŸÅd¬i ½€Ö‘°ç^\úå¼ vœ#Ûè5`„HWwøjjèwdˆjœša¬cÐÂÜÑwpëu„þ ›  \' œü8 ž¬IY ›,g ¢Ts‘¬‡l•òÐ¥õ ¸ð¬ÄüÈÓøTåèü 2ð0H„i¨”ÿ€·pÙhìbäýdØ hÐc@-Áü?XÀYWXqXH‚¡,8À¢Wȳ9´ÅÚðÛ üõ „  ¤¨Ä0«P>½ÐMª´]œôj L€¬(’º¤¤³P¸¸Ï¼¨â¥Èô§´ÌÄ©ˆ5¡ŒGµì`€t¿èˆ}T™~,«}¼Á|ìÏİãÝ\ïÛ øÛXç¨uØvP+u@;t”K°UrˆgrD}sÜtT¥sœ·rÉsPÜsîs4þqˆpÄ$p0pdC€dR ›dvn ¢ á|ßP›ä©èè´ì`Ìè@ؘÌçÈ’œ™()ŽX?‹ÐZƒ<o@…9@‘ÄŸ~”«7\¿k¤ÓßààÞøöÝÔêD(à'"ì;@<Qy¤_yŒj||}|lˆ|t” ›¢#0º˜Ö1é08ýo° Ý8 Üh )ÜÐ ;., P]Ä ^YØ k\¬ ‚Y\  ¢ £Óx ¸Ïô ÌÃ ÝЈ óÄ0)8(X7IPHI(aIxw<Ѝ¬¯˜ÂJhÙ¸î<„@A¼#-EB¨Zxm ¼†!ˆ¤´¹BÀÃlÛH`ëHÄ+*@œ/¤B Xj°{;$?§=@À0Údð-T,#El3‘ L‘¤e‘¨r3`ƒ&ˆ“"Ш'\º$|Ñ4,è:„þ(2 62ÀO¨k/øz0ÈŽ`¦6¼7°Ö/Hç.ý”*7AKU_k~–­Â×âø 2BVgz¤¸ÁÍØãëôú&-3ANV^kx„‘«³¾ÉÔè!4W|ްÔçú  " 8 P h  ™ ² È Þ õ   2 A I Q Y a j r z ‘ ¥ ¹ Ï ç ü  * A G P V ` h n v ‚ Œ “ ¥ ­ ¾ Å Õ Û ç ï ÷ ÿ    $ - 6 ? G O U \hijklmnopqrstuvwxyz{|}~‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçhijklmnopqrstuvwxyz{|}~‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæç€€€€€€€€€€€€€€€€€€€€€€*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg d*>™*OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()hijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæç_UpnpAcceptSubscription_UpnpAcceptSubscriptionExt_UpnpAddToAction_UpnpAddToActionResponse_UpnpAddToPropertySet_UpnpAddVirtualDir_UpnpCancelHttpGet_UpnpCloseHttpGet_UpnpCloseHttpPost_UpnpCreatePropertySet_UpnpDownloadUrlItem_UpnpDownloadXmlDoc_UpnpEnableWebserver_UpnpFinish_UpnpFree_UpnpGetErrorMessage_UpnpGetServerIpAddress_UpnpGetServerPort_UpnpGetServiceVarStatus_UpnpGetServiceVarStatusAsync_UpnpHttpGetProgress_UpnpInit_UpnpIsWebserverEnabled_UpnpMakeAction_UpnpMakeActionResponse_UpnpNotify_UpnpNotifyExt_UpnpOpenHttpGet_UpnpOpenHttpGetEx_UpnpOpenHttpGetProxy_UpnpOpenHttpPost_UpnpReadHttpGet_UpnpRegisterClient_UpnpRegisterRootDevice_UpnpRegisterRootDevice2_UpnpRemoveAllVirtualDirs_UpnpRemoveVirtualDir_UpnpRenewSubscription_UpnpRenewSubscriptionAsync_UpnpResolveURL_UpnpSdkClientRegistered_UpnpSdkDeviceRegistered_UpnpSdkInit_UpnpSearchAsync_UpnpSendAction_UpnpSendActionAsync_UpnpSendActionEx_UpnpSendActionExAsync_UpnpSendAdvertisement_UpnpSetContentLength_UpnpSetMaxContentLength_UpnpSetMaxSubscriptionTimeOut_UpnpSetMaxSubscriptions_UpnpSetVirtualDirCallbacks_UpnpSubscribe_UpnpSubscribeAsync_UpnpThreadDistribution_UpnpUnRegisterClient_UpnpUnRegisterRootDevice_UpnpUnSubscribe_UpnpUnSubscribeAsync_UpnpWriteHttpPost_ListAddTail_ListDelNode_ListDestroy_ListFind_ListHead_ListInit_ListNext_TPAttrInit_TPAttrSetIdleTime_TPAttrSetJobsPerThread_TPAttrSetMaxJobsTotal_TPAttrSetMaxThreads_TPAttrSetMinThreads_TPJobInit_TPJobSetFreeFunction_TPJobSetPriority_ThreadPoolAdd_ThreadPoolAddPersistent_ThreadPoolInit_ThreadPoolShutdown_TimerThreadInit_TimerThreadRemove_TimerThreadSchedule_TimerThreadShutdown__DefaultRuneLocale___error___maskrune___tolower___toupper_accept_asctime_atoi_bind_close_connect_fclose_fcntl_fopen_fread_free_freeaddrinfo_freeifaddrs_fseeko_fwrite_getaddrinfo_gethostname_getifaddrs_getsockname_getsockopt_gettimeofday_gmtime_inet_addr_inet_ntoa_inet_pton_ixmlCloneDOMString_ixmlDocument_createElement_ixmlDocument_createTextNode_ixmlDocument_free_ixmlDocument_getElementsByTagName_ixmlDocument_getElementsByTagNameNS_ixmlElement_free_ixmlElement_getElementsByTagName_ixmlElement_getElementsByTagNameNS_ixmlFreeDOMString_ixmlNodeList_free_ixmlNodeList_item_ixmlNodeList_length_ixmlNode_appendChild_ixmlNode_getChildNodes_ixmlNode_getFirstChild_ixmlNode_getLocalName_ixmlNode_getNamespaceURI_ixmlNode_getNextSibling_ixmlNode_getNodeName_ixmlNode_getNodeType_ixmlNode_getNodeValue_ixmlNode_setNodeValue_ixmlParseBufferEx_ixmlPrintDocument_ixmlPrintNode_listen_malloc_memcmp_memcpy_memmove_memset_perror_pthread_mutex_destroy_pthread_mutex_init_pthread_mutex_lock_pthread_mutex_unlock_pthread_rwlock_destroy_pthread_rwlock_init_pthread_rwlock_rdlock_pthread_rwlock_unlock_pthread_rwlock_wrlock_rand_realloc_recv_recvfrom_select_send_sendto_setsockopt_shutdown_sleep_snprintf$LDBL128_socket_sprintf$LDBL128_srand_sscanf$LDBL128_stat_strcasecmp_strcat_strchr_strcmp_strcpy_strdup_strlen_strncasecmp_strncmp_strncpy_strrchr_strstr_strtol_time_uname_usleepsingle module__mh_dylib_headerdyld_stub_binding_helpercfm_stub_binding_helper__dyld_func_lookup___initialize_Cplusplus_NewRequestHandler_free_ssdp_event_handler_data_ssdp_event_handler_thread_send_error_response_check_soap_body_check_soap_action_header_get_device_info_dom_cmp_name_dom_find_node_dom_find_deep_node_get_node_value_soap_request_and_response_get_response_value_free_handle_request_arg_get_port_handle_request_RunMiniServer_sock_read_write_httpmsg_compare_httpheader_free_scanner_get_token_vfmatch_match_alias_release_get_file_info_GeneratePropertySet_free_notify_struct_respond_ok_genaNotifyThread_ScheduleGenaAutoRenew_gena_unsubscribe_gena_subscribe_GenaAutoRenewSubscription_addToAction_makeAction_Encode_MD5Transformdyld__mach_header_Soap_Invalid_Action_Soap_Action_Failed_Soap_Invalid_Var_end_body.6132_start_body.6131_Http_Method_Table_Http5xxStr_Http4xxStr_Http3xxStr_Http2xxStr_Http1xxStr_gMediaTypes_gEncodedMediaTypes_PADDING_gMServState_gGetCallback_gGenaCallback_gSoapCallback_gInitialized_Http1xxCodes_Http2xxCodes_Http3xxCodes_Http4xxCodes_Http5xxCodes_gMediaTypeList_gAliasDoc_gWebMutex_saved_node.2997_inited.2996_stateInited_next_save.3778_inited.3802_inited.3788_uuids_this_tick.3787_time_last.3786_st_AdvertiseAndReply_AutoAdvertise_CheckOtherHTTPHeaders_ContentTypeHeader_CreateHTTPRangeResponseHeader_CreateServicePacket_DeviceAdvertisement_DeviceReply_DeviceShutdown_ErrorMessages_ErrotEvt_FindServiceControlURLPath_FindServiceEventURLPath_FindServiceId_FreeHandle_GetCallBackFn_GetClientHandleInfo_GetClientSubActualSID_GetClientSubClientSID_GetDeviceHandleInfo_GetFirstSubscription_GetFreeHandle_GetHandleInfo_GetNextRange_GetNextSubscription_GetSubscriptionSID_GlobalClientSubscribeMutex_GlobalHndRWLock_HandleTable_Http_Header_Names_InitHandleList_LOCAL_HOST_LOCAL_PORT_MD5Final_MD5Init_MD5Update_MakeGetMessage_MakeGetMessageEx_MakePostMessage_Make_Socket_NoBlocking_PrintHandleInfo_ReadResponseLineAndHeaders_RemoveClientSubClientSID_RemoveSubscriptionSID_SearchByTarget_SendReply_ServiceAdvertisement_ServiceReply_ServiceShutdown_SetGenaCallback_SetHTTPGetCallback_SetSoapCallback_SoapGetServiceVarStatus_SoapSendAction_SoapSendActionEx_StartMiniServer_StopMiniServer_StrStr_StrTok_ToUpperCase_addServiceTable_advertiseAndReplyThread_bWebServerState_configure_urlbase_copy_URL_list_copy_client_subscription_copy_sockaddr_in_copy_subscription_error_respond_freeClientSubList_freeService_freeServiceList_freeServiceTable_freeSubscription_freeSubscriptionList_free_URL_list_free_client_subscription_free_upnp_timeout_gDocumentRootDir_gMiniServerThreadPool_gRecvThreadPool_gSendThreadPool_gSsdpReqSocket_gTimerThread_gUUIDMutex_g_maxContentLength_genaCallback_genaInitNotify_genaInitNotifyExt_genaNotify_genaNotifyAll_genaNotifyAllExt_genaRenewSubscription_genaSubscribe_genaUnSubscribe_genaUnregisterClient_genaUnregisterDevice_gena_process_notification_event_gena_process_subscription_renewal_request_gena_process_subscription_request_gena_process_unsubscribe_request_getAllServiceList_getElementValue_getServiceList_getServiceTable_getSubElement_get_content_type_get_ieee_node_identifier_get_miniserver_sockets_get_random_info_get_sdk_info_get_ssdp_sockets_get_system_time_getlocalhostname_has_xml_content_type_http_CalcResponseVersion_http_CancelHttpGet_http_CloseHttpGet_http_CloseHttpPost_http_Connect_http_Download_http_FixStrUrl_http_FixUrl_http_HttpGetProgress_http_MakeMessage_http_OpenHttpGet_http_OpenHttpGetEx_http_OpenHttpGetProxy_http_OpenHttpPost_http_ReadHttpGet_http_RecvMessage_http_RecvPostMessage_http_RequestAndResponse_http_SendMessage_http_SendStatusResponse_http_WriteHttpPost_http_get_code_text_httpmsg_destroy_httpmsg_find_hdr_httpmsg_find_hdr_str_httpmsg_init_isFileInVirtualDir_is_escaped_is_mark_is_reserved_is_unreserved_linecopy_linecopylen_map_int_to_str_map_str_to_int_matchstr_membuffer_append_membuffer_append_str_membuffer_assign_membuffer_assign_str_membuffer_attach_membuffer_delete_membuffer_destroy_membuffer_detach_membuffer_init_membuffer_insert_membuffer_set_size_memptr_cmp_memptr_cmp_nocase_method_to_str_miniStopSockPort_namecopy_pVirtualDirList_parse_hostport_parse_port_parse_scheme_parse_uri_parse_uri_and_unescape_parse_uric_parser_append_parser_get_entity_read_method_parser_parse_parser_parse_entity_parser_parse_headers_parser_parse_responseline_parser_request_init_parser_response_init_printNodes_raw_find_str_raw_to_int_readFromSSDPSocket_removeServiceTable_remove_dots_remove_escaped_chars_replace_escaped_resolve_rel_url_searchExpired_send_search_result_soap_device_callback_sock_destroy_sock_init_sock_init_with_ip_sock_read_sock_write_ssdpStopPort_ssdp_handle_ctrlpt_msg_ssdp_handle_device_request_ssdp_request_type_ssdp_request_type1_str_alloc_token_cmp_token_string_casecmp_token_string_cmp_unique_service_name_uuid_compare_uuid_create_uuid_create_from_name_uuid_unpack_virtualDirCallback_web_server_callback_web_server_destroy_web_server_init_web_server_set_alias_web_server_set_root_dirÎúíþ ô…__TEXT€€__text__TEXT€ ®Y€ €__cstring__TEXT0e¦0e__const__TEXTØy%ØyH__DATA€ €__data__DATA€@€__dyld__DATA@ƒ@ƒ__common__DATA`ƒÀ__bss__DATA ”ÐÀ__IMPORT __pointers__IMPORT X__jump_table__IMPORT€ £€8__LINKEDIT°pE pE Hë×5G@executable_path/../Frameworks/libupnp.3.dylibè¢æ¬ÄÄ P((>f€$¼>¾H¾™°¹ ] P@executable_path/../Frameworks/libthreadutil.2.dylib H@executable_path/../Frameworks/libixml.2.dylib 4/usr/lib/libgcc_s.1.dylib 4X/usr/lib/libSystem.B.dylibèXÿ°{t‹€»wÿàèX‹€«wÿàU‰åVƒì$‹u‹‰D$†”‰D$F,‰D$†à‰D$F‰D$ ‹F‰D$‹FÇ$‰D$èH‰4$èW•ƒÄ$1À^ÉÃU‰å숉]ôè[‰uø‹u‰}ü}؉<$è}e‹EƒþÇEäÇ…‡ƒ!Y‹U‰D$4‹E ÇD$ÈÇD$‰T$8‹U‰D$0ƒ'Y‰D$,ƒµh‰D$(ƒ,Y‰D$ ƒ7Y‰D$‹E‰T$$ÇD$‰<$‰D$ƒ…… õÿÿ‰D$…¼úÿÿ‰$è&……Àõÿÿ‰D$…pûÿÿ‰$è…‹U€zX„´‰|$ÇD$‰$è¢]…À„FƒçJ‰D$‰<$èÎP…ÀtƒòJ‰D$‰<$è¸P…À„ð逵&ôÿÿ€µ'ôÿÿ¶&ôÿÿ 'ôÿÿ…ð€½Øüÿÿ„ã‹úÿÿ…ÉŽÕº‹…,ôÿÿ‰$‰D$…úÿÿ‰D$ÿ•(ôÿÿ鮋U‰|$ÇD$‰$èë\1É…Àt1‹EØEܶ0Æ…Dôÿÿ‰D$‹E؉$èÒ ‹UØ‹}Ü…À‰ð”Áˆ:‹UzDÈ…P‹•úÿÿ…ÒŽB€½Øüÿÿ”À€µ'ôÿÿ …'ôÿÿ…%„É„‹³w…‰4$è;ƒ‹ ôÿÿ‹…ôÿÿ‰L$‰$èR…Àt‰4$龋Eàœ‰$è'錋•0ôÿÿ‹R‰•4ôÿÿƒz ‡Y‹B ‹„ƒ Øÿà³(Iwƒ½Hôÿÿë}‹EÜ‹4ôÿÿ‰D$‹E؉D$‹A‰$è#ƒëZ‹…4ôÿÿ‹uÜ‹x‰<$胉<$9ÆCð‹E؉t$‰D$èõ‚ë,‹•4ôÿÿ‹uÜ‹z‰<$èÕ‚‰<$9ÆCð‹E؉t$‰D$èÇ‚…À”À¶À…À„ Ç$ÀèÙ…À‰Æ„Š…úÿÿ‰4$ÇD$¸‰D$è¿‹4ôÿÿ‹A‰†¸‹…(ôÿÿ‰†¼ƒÃÿÿÿ‰t$u¸‰D$‰4$è€ÇD$‰4$耋ƒo…‰4$‰D$耋ƒƒ…ÇD$‰t$‰$èñ‹Eà‹•0ôÿÿœ‰T$‰$è ‰…0ôÿÿ‹…0ôÿÿ…À…`þÿÿ‹ƒw…‰$èOë&€µ&ôÿÿº€µ'ôÿÿ¶&ôÿÿ 'ôÿÿ„0ýÿÿÄì [^_ÉÃU‰åWVSè[ƒì<ÇEäÿÿÿÿÇEà‹³ª~‰4$èö€Eà‰D$Eä‰$è…Àt[‹E‰$讉4$èÈ€éÀ‹F‰$è–‹V‰UÔÇF‰4$¾è|‹EàÇD$‰|$œ‰$è˜~ëG‹Eà‹Pœ‰$‰UÐè~ë ‹w‹U‹;t™‹Eà‰|$œ‰$èw~…À‰ÇuÚÇEÔ1ö‹ƒª~‰$è+€…öt‹EÔÇD$Ç$‰D$ÿUЋU‰$èá~ƒÄ<[^_ÉÃU‰åìH‰]ôè[‰uø‰}ü‹} ÇE䋃‡}‰$èê~‰<$‰EÜè9‰Æ¸›ÿÿÿƒþÿ„xÇ$Ä è^‰…ìýÿÿ‹•ìýÿÿ¸˜ÿÿÿ…Ò„Sƒ}Ç…ôýÿÿ~ƒ}Q¸PLE‰…ôýÿÿ‹•ìýÿÿƒCÇM-SEÇBARCHÇB * HÇB TTP/ÇB1.1 fÇB •þÿÿ‰…èýÿÿ‰D$ƒC‰•äýÿÿ‰$ÇD$ l‰D$èO‹•ìýÿÿ‹…äýÿÿ‰$‰D$èU‹…ìýÿÿ‰$è`…ìýÿÿÇMAN:Ç@ "ssÇ@dp:dÇ@ iscoÇ@ver"fÇ@ Æ@‹…ôýÿÿ…À~:ƒ›C‹•ôýÿÿ‰D$‹…äýÿÿ‰T$‰$èË~‹•äýÿÿ‹…ìýÿÿ‰T$‰$èÑ~…ÿt4‹•äýÿÿƒ¤C‰|$‰D$‰$è“~‹…äýÿÿ‹•ìýÿÿ‰D$‰$è™~‹…ìýÿÿ‰$è¤~UÌ…ìýÿÿfÇ Æ@‹…èýÿÿ‰•ðýÿÿÇEÌÇEÐÇEÔÇEØÆE͉$èû|•,ÿÿÿ‰•àýÿÿ‰$fÇEÎlÇD$€ÇD$‰EÐè‚}‹ƒ‹}‹¸‰ÊƒáÁêÓà „•,ÿÿÿ‹“ƒ}‰$èˆ}Eä‰D$Eà‰$è¥ÿ…Àt‹ƒƒ}‰$è_}‹•ìýÿÿ‰$é„Ç$èÿ|‰<$‰…Üýÿÿè´}‹•Üýÿÿ‰B‹E‰r u¬‰BÇ$èÐ|‰4$‰Ç‰D$ƒÎþÿÿ‰D$èU{ÇD$‰4$èO{‹ƒ{}‰4$‰D$è8{‹•ôýÿÿ‹ƒ}‰|$ÇD$‰T$‰t$ ÇD$‰$è0{‹‹•Üýÿÿ‰‹Eä‰T$œ‰$èŸz‹ƒƒ}‰$è€|‹“‹}EÜÇD$‰D$ ÇD$ ÇD$‹‰$èƒ|‹…àýÿÿ‹“‹}ÇD$ÇD$ ‰D$ÇD$‹@‰$èA|@u]è©zƒ8 tèŸzƒ8tè•zƒ8tè‹z‹³‹}ÇD$‹‰$è|‹‰$è‘z‹…ìýÿÿ‰$è¦z¸qüÿÿ醋“‹}‹ ‰ÈƒáÁè‹„…,ÿÿÿÓø¨tV1ö‰×‹•ìýÿÿF‹…ðýÿÿÇD$ÇD$ ‰$‰D$èö{‰D$‹…ìýÿÿ‰D$‹‰$è‰{Ç$ †èÿ{ƒþu®‹•ìýÿÿ‰$èz¸‹]ô‹uø‹}üÉÃU‰åVƒì‹uÇD$ÇD$‰4$èÕy‰4$ÇD$ƒÈ‰D$è¾y@•ÀƒÄ^¶ÀÉHÃU‰åWVSè[ì\ƒž>‰D$‹E‰$èZ{…À„Ѓ«>‰D$‹E‰$è={…À„@ÇD$:‰$è÷z…À„ê@ÇD$:‰$èÞz…À‰Æ„Ï@‰D$ƒ³>‰D$‹E ƒÀ‰$è’z‹EÇD$:‰$è¢z…À„•‰÷)ǵ¼þÿÿ‰|$‰D$‰4$è£zƒ»>Æ„=¼þÿÿ‰D$‹E ‰t$ȉ$è7zé@ƒÁ>‰D$‹E‰$èmzÇ…´þÿÿ…À‰ÇtYƒÆ>‰D$‹E‰$èHz…Àt$‰Æ‹E )þ‰t$‰|$ƒÀ‰$è z‹E ÆDë‹E ‰|$ƒÀ‰$èëyÇ…´þÿÿ‹E³É>‰t$‰$èïy…ÀtPƒÎ>‰D$‹E‰$èÖy…Àt7ƒØ>‰D$‹E‰$è½y…Àt‰D$‹E |‰$è‚yÇ…´þÿÿ‹E‰t$‰$èŒy…ÀtJƒÜ>‰D$‹E‰$èsy…Àt1ƒØ>‰D$‹E‰$èZy…Àt‰D$‹E ȉ$èy1Àë‹•´þÿÿ1À…Òu¸ÿÿÿÿÄ\[^_ÉÃU‰åƒì‰]øè[‰uü‹u‰4$ƒƒ<‰D$èûx1Ò…À…‡ƒˆ<‰D$‰4$èßxº…Àulƒ”<‰D$‰4$èÄxº…ÀuQƒg<‰D$‰4$è©x…Àt6ƒz<‰D$‰4$è“xº…Àu ƒl<‰D$‰4$èxxº…Àuºÿÿÿÿ‹]ø‰Ð‹uüÉÃU‰åƒì‰uø‹u‰}ü‹} ÇD$¼ÇD$‰<$ènw‰|$‰4$è©üÿÿÇG‰4$èùþÿÿ1Ò‰G@u ÇGúÿÿÿºÿÿÿÿ‹uø‰Ð‹}üÉÃU‰åVƒì‹u…öt‰4$èÓO‰uƒÄ^ÉévƒÄ^ÉÃU‰åWVSè[ìLÇE䋳Çt‰4$è wEä‰D$‹E ‰$è¥øHt'‰4$èõv¸œÿÿÿé\‹ƒÇt‰$èÝv1ÀéG‹Eä1ÿ‹€t‰…àýÿÿ…ðýÿÿ‰…Ôýÿÿ‰$èÔr…ÿÿÿ‰…ÐýÿÿE€‰…Ìýÿÿ…¸þÿÿÇ…Øýÿÿ‰…Èýÿÿ‹…Øýÿÿ‰D$‹Eä‹€|‰$èÐu…À‰Æ„vÿÿÿ‰$èëu‰<$è±uƒO;‰D$‰4$èu…À‰Ç„›‰4$è¿uÇD$‰<$è‚u…À„{‰$è†u…À„k‰$è™u…À„[‰D$‹…Ðýÿÿ‰$è[v‰4$èmu‰<$è3uƒZ;‰D$‰4$èu…À‰Ç„ÇD$‰$è u…À„‰$èu…À„õ‰$è#u…À„å‰D$‹…Ìýÿÿ‰$èåu‹E…À„Œƒ}u>‹E$‰D$‹EäƒÀ ‰D$ ‹…Ìýÿÿ‰D$1Àƒ½Øýÿÿ”À‰D$‹…Ðýÿÿ‰$è3ëÿÿ雋E$‰D$‹EäƒÀ ‰D$‹…Ôýÿÿ‰D$ ‹…Ìýÿÿ‰D$1Àƒ½Øýÿÿ”À‰D$‹…Ðýÿÿ‰$è¢ãÿÿéSƒ}to ‹E…Àté?ƒ}„˜ƒ}…+黋…àýÿÿ‰D$‹EäƒÀ ‰D$‹…Ìýÿÿ‰D$ 1Àƒ½Øýÿÿ”À‰D$‹…Ðýÿÿ‰D$‹E‰$èçÿÿéÞ‹…Øýÿÿ…À…Ћ…àýÿÿÇD$ÇD$‰D$‹EäƒÀ ‰D$‹…Ìýÿÿ‰D$ 鈋E…Àt+‹E€8t#‹…Ìýÿÿ‰D$‹E‰$è`t…ÀuuÇD$ë0‹E‰$èet‰D$‹…Ðýÿÿ‰D$‹E‰$èQt…ÀuCÇD$‹…àýÿÿÇD$‰D$‹EäƒÀ ‰D$‹…Ìýÿÿ‰D$ ‹…Ðýÿÿ‰D$‹E‰$è^èÿÿ‹…Øýÿÿ‰D$‹Eä‹€€‰$èÍr…À‰Æ„ĉ<$è¶rƒ^;‰D$‰4$è•r…À‰Ç„ Ç…äýÿÿÇ…Üýÿÿ‹…Üýÿÿ‰<$‰D$èyr…À‰Æ„X‹…äýÿÿ‰$è\rƒf;‰D$‰4$è;r…À‰…äýÿÿ„ÇD$‰$è1r…À„‰$è5r…À„÷‰$èHr…À„ç‰D$‹…Èýÿÿ‰$è s‹E…Àt_ƒ}u.‹E$‰D$ ‹EäƒÀ ‰D$‹…Èýÿÿ‰D$‹…Ìýÿÿ‰$èWäÿÿéš‹E$‰D$ ‹EäƒÀ ‰D$‹…Èýÿÿ‰D$‹…Ìýÿÿ‰$èÉâÿÿëo‹u…öt5ƒ}ub‹M …Ét[‹E ‰$èr‰D$‹…Èýÿÿ‰D$‹E ‰$è{r…Àu3‹…àýÿÿ‰D$‹EäƒÀ ‰D$ ‹…Ìýÿÿ‰D$‹…Èýÿÿ‰D$‹E‰$èãÿÿÿ…ÜýÿÿéŒþÿÿ‹…äýÿÿ‰$èq‰<$1ÿèúpÿ…Øýÿÿé ûÿÿÄL[^_ÉÃU‰åƒì8‰]ôè[‰uø‹u‰}ü‰4$è]ƒøuƒ~…Þ€¾¸„Ñë…À…Ç‹Fƒø•ƒø•À„Ðtƒ~@ëjƒ~@tfƒ~…ž‹Fº‹NƒøM‰D$ƒ1:‰L$‰$èzq…Àus}à‰|$ÇD$‰4$èJ…ÀtXƒº5‰D$‰<$è0=…ÀuBƒ~tƒ~@u$†ÜÇD$ ÇD$‰D$‰4$è¢èÿÿë†Ü‰D$‰4$èÆÛÿÿ‰4$è ùÿÿ‹]ô‹uø‹}üÉÃU‰åWVSè[ì< ‹uÇEäÇ$ìèöo‰Ç…ÿ…ðõÿÿtB;³îMuÇD$‰<$èJë‰<$èsM‡ ÇD$Ä ‰$è=…Àu‹‡ ‰…äõÿÿë‰<$1ÿèºn…ðõÿÿ‰…äõÿÿEä‰D$‹…äõÿÿUÔ‰4$‰T$ÇD$ ÇD$à ‰D$è¾o…À‰ÆŽª‹…äõÿÿÆ0‹E؉$è¥n…ÿ„•‹‡ ·¤Æ‹EÔu´‰‡Ü‹E؉‡à‹E܉‡ä‹Eà‰‡èƒÕþÿÿ‰|$‰D$‰4$èƒmƒ÷øÿÿ‰D$‰4$èvmÇD$‰4$èkm‹ƒþmÇD$‰t$‰$èVm…Àt‰<$è‚÷ÿÿÄ< [^_ÉÃU‰åWVSè[ƒìlÇD$ÇEàÆEçÇEÜÇD$Ç$èân‰E´¸3ÿÿÿƒ}´ÿ„ì‹U´EçÇD$‰E°‰D$ ‰$ÇD$ ÇD$èn‹E´‰$è%óÿÿ‹U´ÇD$ÇD$Ç$‰“cLèsnƒøÿ‰Çu(‹E´ÇD$‰$èJn‹U´‰$èÃl¸3ÿÿÿé`EàÇEàÇD$‰D$ ÇD$ÇD$ÿÿ‰<$èn…Àt6‹E´ÇD$‰$èðm‹U´‰$èilÇD$‰<$èÕm‰<$é EÀÇEÀÇEÈÇEÌÆEÁÇEÄfÇEÂlÇD$‰D$‰<$èl…Àt@ÇD$‰<$è|m‰<$èøk‹E´ÇD$‰$èam‹U´‰$èÚk¸5ÿÿÿéw‹ƒkluÐÇEÐÇEÔ‰$èl‰EÔƒû1‰$èlÇD$‰t$ ÇD$ ÇD$‰<$‰EÐèðl…Àt@ÇD$‰<$èál‹U´ÇD$‰$èÎl‰<$èJk‹E´‰$è?k¸0ÿÿÿéÜ‹“kluØÇE؉$èkÇD$‰t$ ÇD$ ÇD$‰<$‰EØèml‹E°ÇD$ÇD$ ÇD$‰D$ ‰<$èFlEÜÇD$‰D$ ÇD$ ÇD$ÿÿ‰<$èl…Àt=ÇD$‰<$èl‹U´ÇD$‰$èýk‰<$èyj‹E´‰$ènj¸8ÿÿÿë‹E´‹U‰B1À‰zƒÄl[^_ÉÃU‰åWV‰ÎSè[윉Eœ‰T$ÇEäƒ50‰D$E®‰E˜‰$è§k‹U˜‰$èÓk‰4$¸=èÅk‹UÇE¤DN‰E E܉D$ Eà‰D$‹B`}̉D$‹B\‰$èøf‰<$è9:ƒ:0‹U¤‰D$8ƒŠ0‰D$0‹E˜‰t$4‰T$ÇD$ô‰D$,ƒª0‰D$(ƒÞ=‰D$$ƒÊ1‰D$ ‹ƒ"I‰<$‰D$‹E ‰D$ƒÑ1‰D$ ‹E܉D$‹Eà‰D$è¯m…Àu*‹EЋUœ‰D$‹Ẻ$‰D$ ƒà1‰D$Eä‰D$èÙf‰<$è©9Äœ[^_ÉÃU‰åƒì8‰]ôè[‰Uà‰uø¾ÿÿÿ‰}ü‰M܉$“”0‰T$“œ0‰T$èTi…À‰ÇtmÇD$‰$è\i…ÀtL‰$èdi…À‰Æt>‰$è`i‰4$‰EäèPi‰D$‹E܉$è6j…Àu‹Eä1ö‰D$‹Eà‰$èj…Àt¾ÿÿÿ‰<$èúh‰ð‹]ô‹uø‹}üÉÃU‰åƒìH‰]ôè[‰}ü‰×Uà‰uø‰MЉT$ÇD$‰$è‰B…À‰Æ„/‹@…À„$@‰$èøh…À‰EÌu Ç$ëp‹F‰D$‹F ‰D$‹Ẻ$è¦i‹F‹UÌÆÇD$#‰$èii…À‰EÔu‹Ẻ$èÇgéÁ‹UÔÆ‰<$èXip‰4$è…h…À‰EÈu‹Ẻ$è—g¾˜ÿÿÿé‘‹Uȃ 0‰t$¾ÿÿÿ‰|$ ‰D$‰$èÎh‹EÈ‹ỦD$‰$èîh…Àu<‹uÔÇD$"F‰4$èÑh…ÀtÆ‹EÔ€xt ‰4$èÈh‹UЉ‹EЃ8öƒæ˜‹Ủ$èg‹Eȉ$ègë¾ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åƒìH‰]ô‰uø‰Ö‰}ü‰ẺMÈÇEÜ‹x‹@è[¶ ˆMׯ‹ƒe‰$èÓgEä‰D$Eà‰$è’éH…ô‹Eä‰|$„‰$è¹'…À‰EЄՅötP‹EÌ“y.¾ÿÿÿMÜèïýÿÿ…À•ƒø˜•À„Ð…´‹MÜ“y.‹EÈèýÿÿ‰Æ‹E܉$è)f…ötEé‹EÐMÜ‹‹EÌè¥ýÿÿ…À•ƒø˜•À„Ðui‹EЋMÜ‹‹EÈèÊüÿÿ‰Æ‹E܉$èäe…öuH‹UÐ1ö‹M ‹B‰ $‰D$èf8‹UЋM‹B‰ $‰D$èQ8‹Uä‹M‹B‰‹B‹U‰ë ¾ÿÿÿÿ뾑ÿÿÿ‹M̶U׋Aˆ‹ƒe‰$èšf‰ð‹]ô‹uø‹}üÉÃU‰åìX‰]ô‹U è[‰uø‰}üÇEä‰$‹ƒD‰…ûÿÿ蹟„À„% ‹M ƒy u-…,ûÿÿ‰…ðúÿÿ‰D$ÇD$‰ $èS?…À…îéï‹M •,ûÿÿ‰•ðúÿÿ‰T$ÇD$ ‰ $è#?…À„ÄE¬‰D$EĉD$ ƒÌ-‰D$‹…0ûÿÿ‰D$‹…,ûÿÿ‰$èÀL…À…Œ½øþÿÿ‰<$èÚ4‹E°‰<$‰D$‹E¬‰D$èM5ƒø˜tƒÛ-‰D$‰<$èÁ3ƒø˜u ‰<$èÃ4é?‹…øþÿÿ‰D$‹E ‰$è0>‰<$‰ÆèŸ4…ö„‹F ‰…,ûÿÿ‹F‰…0ûÿÿ‹…,ûÿÿ…0ûÿÿ¶8Æ‹µ,ûÿÿÇD$#‰4$ève…Àu‹…0ûÿÿ‰úˆéÊHE¼‰Ê‰…ûÿÿ)ò‰D$ ƒç-‰D$‹…0ûÿÿ‰ $)ЉD$èÄKƒøt‹•,ûÿÿ‰ù‹…0ûÿÿˆ é}‹•ûÿÿƒê-‰…üúÿÿ‰D$‰$èü0…ÀuÇE¼ÇEÀ‹•,ûÿÿ‰ù‹…0ûÿÿˆ ‹U Eä‰D$‹‚˜‰$èôc…Àt$‹ý-ƒøf¾˜ÿÿÿ‰ûÿÿ„ ¾õé‹EÀ…À…²‹}ä‰<$è‰c…À„)‰$èyc…À„‰$èic…À‰Æ„‰$èpc…À„÷‹•üúÿÿ‰$‰T$è_d…À„݉4$è-c…À„͉$µøþÿÿèc‰$è2c‰4$‰D$è×4EЉù‰D$ EຉD$…èüÿÿ‰D$…èûÿÿ‰$‹E èIûÿÿ…Àuƒ(+½4ûÿÿ‰D$‰<$è‹4…èýÿÿ‰$Ç…,ûÿÿ‰t$è4‹MÇ…ìþÿÿ‹AÇ$‰…èþÿÿ‹EЉD$‹…ðúÿÿ‰D$ÿUà‹•ìþÿÿ…Ò‰•ûÿÿu%ë‹M ‰ $ë‹E ‰$‹‹Dº”ë.‹U ‰$ëë‹•,ûÿÿ…Òt)€½4ûÿÿ‰ùt ‹‹Dº”‹E ‰$‹Eèøöÿÿé‹U EÜ1ÿ‰D$ EØÇEÔ‰D$‹B`‰D$‹B\‰$èF^‹ûÿÿ‰ $èÑb‰ÆE¬‰…øúÿÿ‰$èi1ƒ .‹•ûÿÿ‰D$0ƒN.‹øúÿÿ‰D$(ƒÎ8‰D$$ƒº,‰D$ ‹ƒD‰T$,‰t$‰|$‰D$ƒ'/‰D$ ‹EÜÇD$ȉ $‰D$‹E؉D$èêd…Àt ‹…øúÿÿ‰$ë3‹E°‹U‰D$‹E¬‰$‰D$ ƒÐ,‰D$EÔ‰D$è ^‹øúÿÿ‰ $èÓ0‹…ìþÿÿ‰$èË`1öéD‹M¼‹UäÇEÜÇEÔȉ•ûÿÿ‰$ûÿÿ‰… ûÿÿ‹• ûÿÿÇ…ìþÿÿ¶ˆ…ûÿÿÆ‹‹D‹…ûÿÿÇE܉ûÿÿ‰$è}`…À‰Âu1ö1ÿÇ…ûÿÿÿÿÿÿ鵃Ò,‰D$ƒ4/‰D$‰$è%`…À‰Ç„ƒÇD$‰$è`…Àto‰$è"`…À‰Æta‰$è-`…ÀtU‹•$ûÿÿ‰$‰T$è a…Àt?‰4$è)`Ç…ûÿÿÿÿÿÿ…À‰Æt3E܉D$‰4$è`Ç…ûÿÿ…Àt‰4$èŸ_ë1öÇ…ûÿÿÿÿÿÿ‰4$è‰_…ÿt‰<$è‚_ƒ½ûÿÿÿ¿‘„ EÔ‹ûÿÿ1Ò‰D$ E؉D$…èýÿÿ‰D$…èüÿÿ‰$‹E èÎ÷ÿÿ…À‰Ç…e‹$ûÿÿ…èûÿÿ‰$µ4ûÿÿ‰L$è21ƒ(+‰D$‰4$èò0‹EÜ‹UÇ…ìþÿÿ‹ðúÿÿÇ…,ûÿÿ‰…èþÿÿ‹B‰L$Ç$‰…ðþÿÿ‹EÔ‰D$ÿUØ‹½,ûÿÿ…ÿt*€½4ûÿÿt ‰µûÿÿéÓ‹ƒD¿õ‰…ûÿÿ齋µìþÿÿ…öu‹“D¿õ‰•ûÿÿ飋M ẺD$ EÐÇEà‰D$‹A`‰D$‹A\‰$èÌZ…øþÿÿ‰…ôúÿÿ‰$è.‰4$èw^…À‰… ûÿÿ„ ƒÎ8‰D$$ƒº,‰D$ ‹ƒD‰D$‹ƒ&D‰$è_‹• ûÿÿ‰$‰Æèÿ^Æ‹ƒ"D‰$èï^‹ôúÿÿÇD$ÇD$ȉ $‰D$ƒ6/‰D$ ‹ẺD$‹EЉD$èUa…Àu|‹³"D‹»&D‰4$èš^‰t$$1ö‰D$(‹… ûÿÿ‰$è‚^‹• ûÿÿ‰<$‰T$‰D$ èl^‹M‰|$‰ $‰D$‹…üþÿÿ‰D$‹…øþÿÿ‰D$ ƒ@/‰D$Eà‰D$è/Z뾘ÿÿÿ‹… ûÿÿ‰$èø\‹•ôúÿÿ‰$èä,…öt‹M ºõ‹E‰ $‹E/èÜñÿÿ1ÿ‹µìþÿÿ‰4$1öè\‹E܉$è’\¶…ûÿÿ…ÿ‹• ûÿÿˆt‹M ‰ú‹E‰ $‹ûÿÿè–ñÿÿ뾑‹Eä‰$èW\…öt‹E ‰ò‹ûÿÿ‰$‹Eèjñÿÿ‹]ô‹uø‹}üÉÃU‰åƒìH‰]ôè[‰uø‰}ü‰Ç‰$èh\‰Æ¸˜ÿÿÿ…öt]‰t$‰<$è2]…ÀtDEà‰D$E؉D$ ƒÄ%‰D$‰4$è]‰4$‰D$è‘Cƒøu‹Eà‰|$‰$èî\…Àu1À븋]ô‹uø‹}üÉÃU‰åƒì(…À‰uø‰Ö”Â…ö‰}ü‰Ç”À‰Môu.‰4$è³[ë‰ò‰øè:ÿÿÿ…Àu ‹Eô‰01Àë‰4$è¢[…À‰Æuܸþÿÿ‹uø‹}üÉÃU‰åW‰×V‰Êƒì0‰Î‰Eä‹èúþÿÿ…Àu7ƒÿu2‹E‰0ë‹Eô‹U‰1Àë/‹EäMô‹°‰EÔè_ÿÿÿ…ÀuF9þtÚ‹Uôë‰ò¾9þ|Ö¸þÿÿƒÄ0^_ÉÃU‰åƒì‰$è[1Ò…Àt ‰$è[‰ÂɉÐÃU‰åƒìH‰}ü‰Ç‹G‰]ôè[‰uø‰D$‹‰Uä‰Mà‰L$ÇD$ÇD$ ‰D$‰$èis…À‰Æ…²‹EàxD•…´ƒJ$ÇD$ ÇD$‰D$‰<$è‰(…À……‹7ƒM$‰D$‰4$èx[ÇD$<‰<$)ð‰D$ ƒZ$‰D$èM(…ÀuM‹Eà‰$è53‹EàÇD$ÇD$‰D$‹G‰D$ ‹‰D$‹Eä‰$è³r…À‰Æt‹Eà‰$èõ2뾘ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åƒìh‰]ô‰uø‰Æ‰}ü‰Ï‰UÀÇEäÇEàÇEÜ‹@Dè[=È•Â=ô•À„Ð…B‰4$èh“„À„2E܉D$‹†˜‰$èY…À…‹E܉$èOY…À‰Æ„ƒ}À…Œ‹E “Y#‰ñǃ€ ‰E´‰EÌEä‰}Ð}ȉU¸‰UȺ‰$‰øè€ýÿÿ…À…Ø‹E俘ÿÿÿ‰$èYÇEÄ…À‰Æ„‹U ¿‰$‰T$èðXÇEÄ…À„áésƒ}À…p‹E“Y#‰ñ}Èǃ€ ‰E´‰Ẽc#‰EЃ~#‰EÔEä‰U¸‰UȺ‰$‰øèÛüÿÿ…À…3‹Eäè5ýÿÿ…À„þ‰$1ö¿èéW‹U‰ÇEÄéP‹UàEä‰E¼‰Áƒ…#è1üÿÿ…À…À‹Eäèçüÿÿ…À„°‰$1öè#W‹U=‰Ç‰ÇEÄŽÿƒ}ÀuC‹Uàƒ#‹M¼èßûÿÿ…Àur‹Eäè™üÿÿ…Àtf‰$èXW‹U…À‰tU¿ÇEÄ鶃}Àu>‹Eà1ö¿˜ÿÿÿ‰$è¨W…À‰EÄ„“‹E f¿ÿ‹UĉD$‰$è}W…Àuy¿ër1öÇEÄ¿ÿÿÿëbƒY#“€ ‰E¸}ȉU´‹E‰ñÇ‹E´‹U¸‰Ẽ #‰EЃ¦#‰EÔƒ­#‰EØEà‰UȺ‰$‰øè\ûÿÿ…Àu“é°þÿÿ‹E܉$èŒV‰4$è¢V‹Uĉ$è—V‰ø‹]ô‹uø‹}üÉÃU‰å쨉]ô‹Eè[‰uø‹u‰}ü}Ôlj<$è2&Eœ‰4$‰…´þÿÿ‰D$èmW‰4$¾”ÿÿÿ‰D$謙H…ƒ¬ f¾˜ÿ‰D$@‹E ÇEà2‰D$<ƒð ‰D$8ƒÈ!‰D$4‹ƒÄT‹‰D$0‹E ‰$èWÇD$,ÇD$ ÇD$ÇD$‰<$‰D$(‹EÀ‰D$$‹E¼‰D$ ƒt'‰D$‹E°‰D$‹E¬‰D$ƒ "‰D$ èPY…Àuq‹•´þÿÿ…Àþÿÿ‰Á‰…°þÿÿ‰øè‘úÿÿ‰<$‰ÆèW%…öuH‹E1ɺÇD$‰D$Eä‰$‹…°þÿÿè}ûÿÿ‰Æ‹…°þÿÿ‰$èN.ƒþuf1öëƒþDuä‰ð‹]ô‹uø‹}üÉÃU‰åì‰]ô‹EU°è[‰}ü‰uøÇ‰•„þÿÿ‰$è©$EÀ‰…€þÿÿ‰$è˜$‹E‰$è U…À‰ÇuÇ…þÿÿéq‹U‰$èëT…À‰…þÿÿ„XEؾÿÿÿ‰D$EЉD$ ƒ’ ‰D$‹…þÿÿ‰$è„U‹•þÿÿ‰$‰D$èò;Æ…—þÿÿƒø… ‹U…xÿÿÿf¾”ÿ‰…Œþÿÿ‰D$‰$èCU‰D$‹E‰$è`LÆ…—þÿÿ…À…ã‹•þÿÿ‰$èU‰<$‰Æè U“š ‰T$l‹•þÿÿÇD$p‰t$hÇD$`‰T$d“µ ‰T$\“¾ ‰T$T“Ì ‰T$D“Û ‰T$<“Z!‰T$8‹U܉D$P„0¹ÇD$X ‰|$L‰T$4‹UØÇD$H ÇD$@~ÇE¼2‰T$0“\!‰T$,‹U ‰T$(“^!‰T$$‹“;S‹‰D$‹…ŒþÿÿÇD$ÇD$ ‰T$ ‰D$ƒl!‰D$ ‹•„þÿÿÇD$ÇD$‰$è­V…À…«…œþÿÿ‹•Œþÿÿ‰…ˆþÿÿ‰Á‹…„þÿÿèæ÷ÿÿÆ…—þÿÿ…À‰Æ…‹EÜ‹•€þÿÿ‰D$‹E؉$‰D$è³!…Àudƒ!‰D$‹…€þÿÿ‰$è^!…ÀuHEà‹U‰D$Eä‹MÀ‰$‹…ˆþÿÿ‰T$ºè“øÿÿÆ…—þÿÿƒøt!ƒø‰Æu‹uäëÆ…—þÿÿëÆ…—þÿÿ¾˜ÿÿÿ‹…þÿÿ‰$è R‰<$èR‹•„þÿÿ‰$èñ!‹…€þÿÿ‰$èã!€½—þÿÿt…œþÿÿ‰$èþ*‰ð‹]ô‹uø‹}üÉÃU‰åìè‰]ô‹EU°è[‰}ü‰uøÇ‰•„þÿÿ‰$èj!EÀ‰…ˆþÿÿ‰$èY!‹E‰$èÌQ…À‰Ç„öEؾÿÿÿ‰D$EЉD$ ƒS‰D$‰<$èoR‰<$‰D$èã8Æ…—þÿÿƒø…Ê‹E•xÿÿÿf¾”ÿ‰•þÿÿ‰T$‰$è4R‹U‰$‰D$èQIÆ…—þÿÿ…À…‰<$èR“I‰T$L“h‰T$<“‰T$8‹UÜÇD$P‰|$D‰D$H¢‰T$4‹UØÇD$@†ÇE¼2‰T$0“‰T$,‹U ‰T$(“‰T$$‹“üO‹‰D$‹…þÿÿÇD$ÇD$ ‰T$ ‹•„þÿÿ‰D$ƒï‰D$ ÇD$ÇD$‰$èôS…À…«…œþÿÿ‹•þÿÿ‰…Œþÿÿ‰Á‹…„þÿÿè-õÿÿÆ…—þÿÿ…À‰Æ…‹EÜ‹•ˆþÿÿ‰D$‹E؉$‰D$èú…Àudƒ@‰D$‹…ˆþÿÿ‰$襅ÀuHEà‹U‰D$Eä‹MÀ‰$‹…Œþÿÿ‰T$ºèÚõÿÿÆ…—þÿÿƒøt!ƒø‰Æu‹uäëÆ…—þÿÿëÆ…—þÿÿ¾˜ÿÿÿ‰<$èZO‹…„þÿÿ‰$èF‹•ˆþÿÿ‰$è8€½—þÿÿt…œþÿÿ‰$èS(‰ð‹]ô‹uø‹}üÉÃUèY‰å‹E‰nAÉÃUèY‰å‹E‰bAÉÃUèY‰å‹E‰JAÉÃU‰åVƒì‹uÇD$‹‰$èžO‹‰$èN‰uƒÄ^Éé.NU‰åWVSè[ìLÇD$÷ÇD$‹ƒú‰…Øþÿÿ‹ƒþ‰…Üþÿÿ¶ƒˆ…àþÿÿ…áþÿÿ‰$èÎN…Øþÿÿ‰…Ìþÿÿ‰Æ‹ƒÆÿþþþ÷Ð!Â €€té‰ÐÁè÷€€DÐFDðÒƒÞ+µÌþÿÿƒ»ö@…àǃö@ÇD$ÇD$Ç$èÊNƒøÿ‰Ç„¯ƒð‰…ÐþÿÿE؉…Ôþÿÿëv‹…ÐþÿÿÆEÙ‰$èoMÇD$ÇD$ ‰t$‰<$‰EÜ·ƒô5fÁÀf‰EÚ‹…Ôþÿÿ‰D$‹…Ìþÿÿ‰D$è;NÇ$èè±N‹“ö@…ÒtÇ$è(N‹ƒö@…Àu€ÇD$‰<$è N‰<$è…LÄL1À[^_ÉÃU‰åì8‰uø‹u‰]ô‰}ü}ÔÇEà·Fè[‰D$ ‹F‰D$‹‰<$‰D$è+%…Àt‰4$èML…øþÿÿ‰$èè%éêEä‰D$Eà‰D$ …øþÿÿÇD$‰…ôþÿÿ‰D$‰<$è…c…Àukƒ½üþÿÿ w‹üþÿÿ°Óà©au)©u¨u¸ô…À‰Eäu:ë1‹ƒR?닃N?닃J?…ÀtØ‹•ôþÿÿ‰|$‰T$‰$ÿÐ1ÀëÆÇEä‹Uä…Ò~ ‹…Xÿÿÿ‰T$‰<$‰D$ ‹…Tÿÿÿ‰D$è¥hÇD$‰<$èò ‹…ôþÿÿ‰$è%‰4$èPK‹]ô‹uø‹}üÉÃU‰åƒì8UôMä‰T$ÇEô‰L$‰$èJKºÿÿÿÿ@t ·EæfÁÀ·ÐɉÐÃU‰åWVSè[ƒì\·} ÇEäÇD$ÇD$Ç$è=L‰EÄ‹uĸ3ÿÿÿ…öˆÂ‹Mäfÿÿ¿¸ÀÿÿFøEÔÇEԅɉEÀÇEÜÇEàÆEÕÇEØ„„‹UÄEäÇD$‰D$ ÇD$ÇD$ÿÿ‰$è®K@u‹EÄÇD$‰$èK‹Uĉ$饋EÀ‹UÄÇD$‰D$‰$è÷I@ta‹EÄÇD$€‰$èàJ@…¥ë{·ÇG‰ÂÁâfÁè ЋUÀf‰EÖ‹EÄÇD$‰T$‰$è«I@u´è€I‹0èyIƒ80t¿…öu»ƒà‰$è§J‹UÄÇD$‰$èóJ‹Eĉ$èlI¸5ÿÿÿé…‹UÄÇD$‰$èËJ‹Eĉ$èDI¸2ÿÿÿé]‹EÄèþÿÿf…Àu‹UÄÇD$‰$è–Jé‹U·À‰BÇD$ÇD$Ç$è{Jƒøÿ‰Æu(‹EÄÇD$‰$èRJ‹Uĉ$èËH¸3ÿÿÿéäƒÍÇEÔÇEØÇEÜÇEàÆEÕ‰$è÷HÇD$‰4$‰EØ‹EÀ‰D$ètH@u6‹UÄÇD$‰$èßI‹Eĉ$èXHÇD$‰4$èÄI‰4$éÏþÿÿ‰ðèýÿÿf…Àf‰ƒÑ2u=ÇD$‰4$è™I‹UÄÇD$‰$è†I‰4$èH‹Eĉ$è÷G¸qüÿÿë‹U·À‰B ‹Eĉr‰1ÀƒÄ\[^_ÉÃU‰åƒìX‰]ôè[‰uø·u‰}ü¿qüÿÿ‹ƒ½:…À…gÇ$f¿˜ÿè˜H…À‰EÄ„L·Æ‰D$‹Eĉ$è”üÿÿ…À‰Çt‹Uĉ$ë]‹Eĉ$èÏÙÿÿ…À‰ÇtV‹UÄÇD$‹‰$èÄH‹UÄ‹‰$è;G‹UÄÇD$‹B‰$è¡H‹UÄ‹B‰$èG‹Eĉ$è/GéÅ‹UÄuȃ’‰4$‰D$‰T$è‡F‰4$ÇD$èF‹ƒF‰4$‰D$èjF‹ƒ¹F‰t$1öÇD$‰$è]F…À‰¥‹UÄ¿˜ÿÿÿÇD$‹‰$èH‹UÄÇD$‹B‰$èñG‹UÄÇD$‹B‰$èÛG‹UÄÇD$‹B‰$èÅG‹UÄ‹‰$è@‰D$‹E ‰$è‚…Àt`‹vEÀ‰E„E˜‰E€EЉ…|ÿÿÿëB‹~ …ÿt8‹E„‰<$‰D$èû?‰<$‰D$è?‚…Àt‹E€‰D$‹…|ÿÿÿ‰$ècz…Àt ‹v$…öuº1ö‰ð‹}ü‹uøÉÃU‰åVƒì‹E‰$è¤>…À‰Æt#‰$è´>fƒøu‰4$è«>‰EƒÄ^Éé0>ƒÄ1À^ÉÃU‰åWVƒì‹E ‹}‰$è]>‰Æ‹EÇë:‰4$èf>fHu$‰4$èU>‰|$‰$è*?…Àu ‹E‰0¸ë‰4$è'>‰Æ…öuÂ1ÀƒÄ^_ÉÃU‰åWVƒì‹}ëG<‹wH‰$èÂx‰<$èK=‰÷…ÿuäƒÄ^_ÉÃU‰åWVƒì‹}ë|‹…Àt‰$è =‹G…Àt‰$è‘=‹G…Àt‰$è=‹G …Àt‰$èö<‹G…Àt‰$èç<‹G…Àt‰$èU=‹G …Àt‰$è[ÿÿÿÇG‹w$‰<$è·<‰÷…ÿu€ƒÄ^_ÉÃU‰åƒìh‰]ôEàè[‰uø‹u‰D$‰}üÇEØÇEàƒçÇEÜÇEäÇEÔÇEÐÇẺt$‰$èpþÿÿ…À„E؉D$ƒ’ ‰t$‰$èOþÿÿ…À„ôƒë‰D$‹E؉$è}<ÇE°ÇE´…À‰E¼„±‰$èu<ÇE°ÇE´ÇE¸ÇEĉEÀén‹EÄ‹U¼‰D$‰$è:<‹M´…ɉE¬tÇ$(èy<‹U´‰B$‰U¸ëÇ$(èb<‰E°‰E´‹U´…Ò„?‹E´Ç@$Ç@ Ç@ÇÇ@Ç@Ç@Ç@ Ç@‹Eà‰$èýÿÿ‹U´…À‰B”À¶øE܉D$‹E¬‰D$ƒó‰$è'ýÿÿ…Àt‹E܉$èÕüÿÿ‹U´…À‰u¿Eä‰D$‹E¬‰D$ƒž ‰$èîüÿÿ…Àt‹Eä‰$èœüÿÿ‹U´…À‰Bu¿EÔ‰D$‹E¬‰D$ƒ¨ ‰$è´üÿÿ…Àu1öë*‹EÔ‰$è^üÿÿ…À‰Æt‹U‰D$‰$è‹U´…À‰Bu¿‰4$1öèÈ:EЉD$‹E¬‰D$ƒ° ‰$èWüÿÿ…Àt*‹EЉ$èüÿÿ…À‰Æt‹U‰D$‰$è7‹U´…À‰B u ‹E´1ÿÇ@ ‰4$1öèh:‹U¬ẺD$ƒ» ‰$‰T$è÷ûÿÿ…Àt*‹Ẻ$è¥ûÿÿ…À‰Æt‰D$‹E‰$è×~‹U´…À‰Bu ‹E´1ÿÇ@‰4$è :…ÿt/‹U´‰$è@üÿÿ‹E¸…ÀuÇE´ÇE°ë ‹E¸Ç@$‰E´ÿEÄ‹UÀ9UÄŒ†ýÿÿ‹E¼‰$èÂ9‹E´‹U ‰ë‹U°‰$èíûÿÿÇE°‹E°‹]ô‹uø‹}üÉÃU‰åWVSè[ƒìL‹EÇEäÇEàǃ9‰D$‹E‰$èN9ÇEÌ…À‰EЄ†‰$1ÿèK9UàÇẺUȉEÔEä‰EÄëT‹UЉ|$‰$è9‹uÌ…öt$‹U ‹uä‰$‰T$‹UȉT$èÎûÿÿ‰F$‹Eà‰Eäë‹U ‰$‰T$‹UĉT$è­ûÿÿ‰EÌG;}Ô|§‹EЉ$èÅ8‹Eä‹U‰‹ẼÄL[^_ÉÃU‰åVSè[ƒì ‹u Eô‰D$‹EÇEôÇEð‰D$ƒ[‰$èúÿÿ…ÀtmEð‰D$‹Eô‰D$ƒ`‰$èýùÿÿ…Àt ‹Eð‰$è«ùÿÿë‹E…Àt‹Eëƒ÷ý‰$èú7‰F‰D$‹‰D$‹Eô‰$èzþÿÿº…À‰Fu1ÒƒÄ ‰Ð[^ÉÃU‰åƒì8‰}ü‹} ‰]ô‰uøÇEäÇEàÇEÜ‹è[…Àt‰$è>7ÇEä‰D$‹E‰D$ƒ€‰$èDùÿÿ…ÀtxEà‰D$‹Eä‰D$ƒ…‰$è$ùÿÿ…Àt ‹Eà‰$èÒøÿÿë‹E…Àt‹Eëƒý‰$è!7‰EÜ‹w‰D$‹‰D$‹Eä‰$èžýÿÿ…À‰F$t ‹E܉G¸ë1À‹]ô‹uø‹}üÉÃU‰åVƒì‹u‹‰$èü6‹F‰$è6ùÿÿÇFÇFƒÄ^ÉÃU‰åVƒì‹u…öt|‹…Àt‰$èÁ6‹F…Àt‰$è²6‹F…Àt‰$è&6‹F …Àt‰$è6‹F…Àt‰$è6‹F…Àt‰$èv6‹F …Àt‰$è|øÿÿÇF‰uƒÄ^ÉéÖ5ƒÄ^ÉÃU‰åWVSè[ƒìLEä‰D$‹EÇEäÇEà‰D$ƒú‰$è¿÷ÿÿ…À„*‹U ƒó‹R‰D$‹Eä‰Uȉ$èä5…À‰EÄ„‰$èê5ÇEÌÇEÔ‰EÐéÌ‹EÔ‹UĉD$‰$è½5‹EÈ…À„¬Eà‰D$‹E‰D$ƒû‰$è7÷ÿÿ…À„ˆ‹Eà‰$èáöÿÿ‹uÈ…À‰Çu ër‹v$‹V$‰Ủ|$‹F‰$èn6…ÀuäëA‹EÌ…Àt ‹F$‹ỦB$ë ‹F$‹U ‰B‹E 9pu‹ỦP‹F$‰4$‰EÈè<þÿÿ‹EÈ…Àt‹uȉ|$‹F‰$è6…Àt¬ÿEÔ‹UÐ9UÔŒ(ÿÿÿ‹Eĉ$èç4ƒÄL¸[^_ÉÃU‰åW¿Vƒì0‹u Eô‰$è6ÇEäëI‹VH…Òu ÇEäë5‹B4…Àt$;Eô}‹BH‰FHÇBH‰$è•öÿÿ‹E‰òÿHë ‹B8…Àt‰Uä1ÿ‰Ö…ö‰ú•À„Âu¬‹EäƒÄ0^_ÉÃU‰åVƒìd‹u‹F ‰4$‰EôE¬‰D$è_ÿÿÿ‹Uô‰V ƒÄd^ÉÃU‰åW1ÿVƒì0‹E ‹p ÇEäë‹U‰4$‰T$è5…Àu‰÷ë‰uä‹vH…ö•Â…ÿ”À„ÐuÕ…ÿtIEô‰$è5‹G4…Àt7;Eô}2‹Uä…Òt ‹GH‹Uä‰BHë ‹GH‹U ‰B ÇGH‰<$1ÿè²õÿÿ‹E ÿHƒÄ0‰ø^_ÉÃU‰åW1ÿVƒì‹E ‹p ëH‹U‰t$‰$è…4…Àu.…ÿt‹FH‰GHë ‹FH‹U ‰B ÇFH‰4$èZõÿÿ‹E ÿH1Àë‹FH‰÷‰Æ…öu´ƒÄ^_ÉÃU‰åƒì‰}ü‹} ‰uøG‰$èn3…À‰Æt‹E‰|$‰4$‰D$è_3Æ>‰ð‹}ü‹uøÉÃU‰åƒì‹E‰uø‹U ‰}ü‹x‰T$‰|$‹‰$èò3…À‰Æu‹E ‰$è×39ǸÿÿÿÿBð‰ð‹}ü‹uøÉÃU‰åƒì‰}ü‹}‰uø‹G‰D$‹E ‰D$‹‰$è¡3…À‰Æu‹E ‰$è‹39G¸ÿÿÿÿBð‰ð‹}ü‹uøÉÃU‰åWVƒì‹}‹G;E w‹O9M v^‹U )‰ЋW 9ÐBÂ4ë‹W ‹G+E 9Ðv=‹u ÖF‰D$‹‰$è¶2…Àu‹E @‰D$‹‰$è 2º˜ÿÿÿ…Àt ‹u ‰‰w1҃ĉÐ^_ÉÃU‰åƒì‰uø‹u‰}ü…öˆ‹E‹H9΂‹U ‹E…Ҕ…À”À1ÿÂuq‹U‹M‰D$‰ $è,ÿÿÿ…À‰ÇuV‹E‰ò‹@‰T$U)ð‰D$‰$èÄ1‹E‹U‹M 0‰T$‰L$‰4$è¤1‹E‹UP‰P‹M‹Æë¿þÿÿ‰ø‹uø‹}üÉÃU‰åƒì‰}ü‹}‰uø‹u ‹G‰4$‰D$ è2‰t$‰<$‰D$èÿÿÿ‹uø‹}üÉÃU‰åƒì‹U‹B‰$‰D$ ‹E‰D$‹E ‰D$èëþÿÿÉÃU‰åƒì‹M‰}ü‹U ‰uø‹}‹A…ÀtI :9Ès‰Ç1À)×ë)È‹M‰D$:‰$‰D$èÝ0‹E‹p‰$)þ‰t$è þÿÿ‹U‹‰rÆ0‹uø‹}üÉÃU‰å‹U‹ÇÇBÇBÉÃU‰å‹EÇ@ ÇÇ@Ç@ÉÃU‰åVƒì‹u…öt%‹‰$èq/ÇF ÇÇFÇFƒÄ^ÉÃU‰åƒì‰uø‹u‰}ü‹}‰4$è­ÿÿÿ‹E ‰~‰~‰‹uø‹}üÉÃU‰åƒì‹M ‰}ü‹}‰uø…Éu‹E1ö‰$èwÿÿÿë@‹U‰|$‰$èýÿÿ…À‰Æu+…ÿt!‹U‹‹U ‰|$‰$‰T$è³/‹U‹Æ8‹E‰x‰ð‹}ü‹uøÉÃU‰åVƒì‹u ‰4$èF0‰t$‰D$‹E‰$èlÿÿÿƒÄ^ÉÃU‰åWVƒì0¶E‹UÇEàˆEß‹EJ‰Uä‰Eð‹E ‰EôEð‰EØëU‹UàUä‰ÐÁè4Ñþ€}߉÷t‹U‹ò‰D$‹E؉$èÀûÿÿë‹U‹ò‰D$‹E؉$èõûÿÿƒø~F‰uàë}N‰uä‹Uä9Uà~£¿ÿÿÿÿƒÄ0‰ø^_ÉÃU1ɉåW‹U V‹}‹uë ‹BƒÂ9øt A9Îñ¹ÿÿÿÿ^‰È_ÉÃU‰åVƒì‹u…öt‹F …Àt‰$è¤-‰uƒÄ^Éé—-ƒÄ^ÉÃU‰åVƒì‹u‹E ÇD$³‰4$‰D$è#/Ɔ³ƒÄ^ÉÃU‰åVƒì‹u‹E ÇD$ÿ‰4$‰D$èõ.ƆÿƒÄ^ÉÃU‰åƒì‹E‰uø¾³‰}ü‹}=´Bð‹E ‰t$‰<$‰D$è¶.Æ7‹uø‹}üÉÃU‰åWVƒì ‹}‹u ‹G,‰$è‚.@‰Eð‹G0‰$ès.@‰Eô‹‰‹G‰F‹G‰F‹G ‰F ‹G‰F‹G‰F‹G‰F‹G‰F‹G ‰F ‹G$‰F$¶G(ÆF)ˆF(‹Eð‰$èW-º˜ÿÿÿ…À‰F,ti‹Mô‰ $è@-…À‰F0u‹F,‰$èR,º˜ÿÿÿëE‹V,‹G,‹Mð‰$‰D$‰L$è-‹V0‹G0‹Mô‰$‰D$‰L$èÿ,ºÇF4ÿÿÿÿÇF8ƒÄ ‰Ð^_ÉÃU‰åƒì8‰uü‹u‰]øè[…ötU‹F,…Àt‰$èÕ+‹F0…Àt‰$èÆ+‹V4ƒúÿt(E؉D$‹ƒ *‰T$‰$èF+…Àu ‹E܉$èÕýÿÿÇF4ÿÿÿÿ‹]ø‹uüÉÃU‰åWVƒì‹}ë‰<$èuÿÿÿ‹w8‰<$èg+‰÷…ÿuçƒÄ^_ÉÃU‰åW1ÿVƒì‹E‹0ëA‹U ‰t$‰$èÏ,…Àu'…ÿt‹F8‰G8ë‹F8‹U‰ÇF8‰4$èŒÿÿÿ1Àë‹F8‰÷‰Æ…öu»ƒÄ^_ÉÃU‰åWVƒì‹} ‹uë‰|$‰4$èv,…Àt‹v8…öuéƒÄ‰ð^_ÉÃU‰åWVƒì‹} ‹uë‹N,‹‹G‰ $‰T$‰D$è†+…Àt‹v8…öu݃ĉð^_ÉÃU‰å‹EÇ@Ç@‹U ‰1ÀÉÃU‰åVƒì‹u‹E ‰D$‹‰$è²+‹‰$è,*‰Â¸0ÿÿÿBºEƒÄ^ÉÃU‰åWV‰Æìp¶E ‰•Ìþÿÿ‰ÈþÿÿÇ$ˆ…ÇþÿÿèÑ+‹U‰…Ðþÿÿ‹‹>…Òˆ=…dÿÿÿ‰…´þÿÿÇD$€ÇD$‰$èÆ*•äþÿÿ‰•¸þÿÿÇD$€ÇD$‰$è¢*€½Çþÿÿt‰ú‰ùÁêƒá¸Óà „•dÿÿÿë‰ú‰ùÁêƒá¸Óà „•äþÿÿ‹Uw‹ÇEè‰EäE䉅Àþÿÿ‹U‹…Àu&‹…¸þÿÿ‹•´þÿÿÇD$ÇD$ ‰D$‰T$ë&‹…Àþÿÿ‹•¸þÿÿÇD$ ‰D$‹…´þÿÿ‰T$‰D$‰4$è?*…À„:@uèŸ(ƒ8tŽé_UôE쉕¼þÿÿ‰T$ ÇEðÇEì‰D$ÇD$"ÇD$ÿÿ‰<$èÓ(EðÇD$‰D$ ÇD$"ÇD$ÿÿ‰<$èÓ)‹µÈþÿÿ€½ÇþÿÿÇ…ÔþÿÿtS‹•Ìþÿÿ‰t$ÇD$ ‰<$‰T$èƒ)‰Æë;‹…Ôþÿÿ…ÌþÿÿÇD$ ‰t$‰D$‰<$èj)ƒøÿtj…Ôþÿÿ)Æ…öË‹µÔþÿÿ‹EìÇD$"ÇD$ÿÿ‰<$‰D$‹…¼þÿÿ‰D$ è4)…öx[‹U‹:…ÿtWÇ$èŽ)+…Ðþÿÿ)Ç‹E‰8ë<¾1ÿÿÿë5‹Eì¾ÿÿÿÿ‹•¼þÿÿÇD$"ÇD$ÿÿ‰D$‰T$ ‰<$è×(ë¾0ÿÿÿÄp‰ð^_ÉÃU‰åV‹u‹E‹U ‹MÇE ‰u^ÉéýÿÿU‰åV‹u‹E‹U ‹MÇE ‰u^ÉéõüÿÿU‰å‹UÇB‹E ‰‹E‰B‹Ef‰B1ÀÉÃU‰å‹E‹P‹E ;PÉ”À¶ÀÃU‰åVƒì‹uF‰$èT÷ÿÿF ‰$èI÷ÿÿ‰uƒÄ^ÉéÅ&U‰åƒì‰]øè[‰uü‹uǃÅÿÿÿdž˜Ç†œ‰D$ƒ®ÿÿÿ‰D$Fd‰$èÃ%† ƒÆH‰$èºöÿÿ‹]ø‰u‹uüÉé«öÿÿU‰åVƒì‹uƒ>u@FdÇD$‰$èr%† ‰$èžöÿÿFH‰$è“öÿÿ‹†°‰$è&ǃÄ^ÉÃU‰åWVƒì ‹EƒÀd‰Eô‰$è0%ë%‹~‹E ‰<$‰D$è¶óÿÿ…Àt‹Eô‰t$‰$è%…À‰ÆuÕ1ÿƒÄ ‰ø^_ÉÃU‰åVƒìD‹E ‹uÇD$‰EÔẺD$‹EƒÀd‰$èÆ$1Ò…Àt…ö‹Pt ‹B ‰‹B‰FƒÄD‰Ð^ÉÃU‰åƒì(‰uø‹u‰}ü‹F…ÀtHèþ$Ç‹E ‰D$Eô‰D$‹‰$èí&…À‰Çx‹F;Eôu‡ÿÿÿƒøývèÀ$ƒ8"u¸ÿÿÿÿë‰ø‹uø‹}üÉÃU‰åVƒì‹uÇD$ÜÇD$‰4$èÈ%dž´džÀƆ¸‰4$èëýÿÿ–І ÇBÆB‰†ÐÆFX‹E dž¼‰F@ƒÄ^ÉÃU‰åWV1öƒì ‹}‹‹G¶ˆE÷ë¾À‰$è$‹ˆ2‹F¶2„Àuå‹GÆ‹7‹E ‰4$‰D$èè%¶M÷‰Â‹G…Òˆ ¸ÿÿÿÿt‰Ð+ƒÄ ^_ÉÃU‰åƒì‰]ø‹Eè[‰uüÇD$ ‰$³í‰t$èïõÿÿ1Òƒøÿt‹Æ‹]ø‰Ð‹uüÉÃU‰åWVSƒì<‰E܉MÔ‹M܉UØ‹è[‹‰ÇBy‰Eä9Ç„¶7‰ð¾À‰EàFà<^wt‹Màƒ^ó‰EЉ$‰L$èü$…ÀuX‹MØw‰9‹EЉEÌëF¶¾Ðƒè <^w‹M̉T$‰ $èË$…Àtß‹EÜ€x”Â9uä”À„Ð…‹MØ)þ1Ò‰qél‰ð< ”Â< ”ÀÂtF‹M؉9OëA¶< ”Â< ”ÀÂuî‹EÜ€x”Â9Mä”À„Ð…Å‹EØ)ùº‰Hé‰ñ€ù u+‹E؉8G9Eä„›€ t‹MØéä‹EØÇ@ë‰ñ€ù u‹E؉8Ç@ºéljñ€ù"us‹E؉8GëN¶p€ù"tO€ù\u9uäv7€xpu.é±€ù—€ù•À„Ðu€ù ”€ù ”ÀÂu €ù …ˆ‰ð;Eär­¸ë‹MØ)þº‰qëM‹Eà‰D$ƒ^ó‰$èl#…Àt‹Mغ‰9ÇAë!‰ð<–Â<”ÀÐt/‹M؉9ÇAº‹MÜ‹A‹MØA‹M܉A‹EÔ‰¸ë¸ƒÄ<[^_ÉÃU‰åVƒì‹uÇD$ÜÇD$‰4$èL"dž´džÀƆ¸‰4$èoúÿÿ–І ÇBÆB‰†ÐÆFXdž¼ƒÄ^ÉÃU‰åW‰ÇV¾Sè[윉xÿÿÿ‹@ÆE‡‰E€éê€ù%…ý¶rƒÂ‰U´‰ñ¾ÑBàƒøX‡¾‹„ƒLØÿà2þþþþ2þþþþþþþþþþ þþþþþþþþþþþþþþþþþþþþþþþþþþþÇþþþðþ°ÅþÅþþþþþþþþþþþþþÖ÷þþþþúþþþþþþ–þ¨þþþÀ÷‹…xÿÿÿMàƒ…xÿÿÿ‹‰E¬‹G‹U¬‰E”‹‹E”ÇB‰EÄÆEÇE‰lÿÿÿ‰…tÿÿÿ‹lÿÿÿ‰ø‹•tÿÿÿèûÿÿƒø‰ÆuH€}u"ƒ}àu‹EÈ‹WÆE)‰Uë‹EÈ‹M¬A뾃}àu‹U¬‹BEȉBÆE릋M‰Oë?‹E”醋U¬‹¶L0ÿ€ù •€ù •À„Ðt€ù •€ù •À„Ð…n‹M¬Fÿ‰A‹E¬‹p…öu¿éV‹…xÿÿÿM䃅xÿÿÿ‹‰øèhúÿÿƒø‰Æ…7‹Mä…Éé„M䉸UÔèFúÿÿƒø‰Æ…ƒ}äéc‹…xÿÿÿ‰òƒ…xÿÿÿ€úd‹OUÄ‹ÇEˆ ‰M˜‰•tÿÿÿ‰E°¸DEˆ‰EˆEà‰Á‰øèíùÿÿƒøuy‹Uà°…ÒupèWÇEÜ‹Mˆ‰D$‹EĉL$‰$èE…À‰Æx,‹EÄEÈ;EÜu!†ÿÿÿƒøýv èƒ8"t º¸ë º¸‹M°ƒú‰1„à‰Ð‹U˜‰WéÓ‰ñ€ùSEÌu‹…xÿÿÿƒ…xÿÿÿ‹‰…|ÿÿÿ‹W‹|ÿÿÿ‰U UÜÇA‹‹G‰Eĉ…tÿÿÿ‰•pÿÿÿ‹pÿÿÿ‰ø‹•tÿÿÿèùÿÿƒø‰Eœ…ú‹E܃øtƒøt‹|ÿÿÿ‹AEȉAëËG+EȉGë€t‹…|ÿÿÿƒxÒ÷҃‰Uœë‹M ‰O‰ðƒ|Æu ‹UÇB ‹|ÆE¨‰D$‹EÇD$‰}°ƒÀd‰$è“…Àt=‹Hë0‹EÜEà¶0Æ‹E܉D$‹E‰$è(ðÿÿ‹}à‹U܉Á‰ðˆ:¿ÿÿÿÿ…É…ÉÇ$,èà…À‰Æ„¤@‰E˜‰$è@æÿÿV ‰Uœ‰$è2æÿÿ‹EØ…Àuƒïï‰EÔÇEØ‹Eà‰D$‹E܉D$‹E˜‰$è‹æÿÿ…Àu‹EØ‹Uœ‰D$‹EÔ‰$‰D$ènæÿÿ…Àt ‰4$è…釋F‰~‰‹F ‰F‹E‰t$ƒÀd‰$蓃}¤˜…þÿÿ‹UÇ‚´ôë[‹uØ…ö„ôýÿÿq ƒMç‰D$‰4$èäÿÿ‰4$‰E¤‹E؉D$‹EÔ‰D$è¯äÿÿƒ}¤˜”ƒø˜”À„±ýÿÿ‹EÇ€´ô¸ÄŒ[^_ÉÃU‰åƒìx‰uø‹u‰]ô‰}üè[‹†Ð‹†Ô€~Xdžœ‰†˜‹†Ô‰†Ìtƒ~w^‹N¸Óà¨ìtPë=‹NDùÌ”Âù0”ÀÂu$Aœƒøcv‹F@ƒøtƒøtƒøt ƒøtƒøu1Àdž¼éèE´~dÇE¼‰E¤‰D$ÇD$‰<$èN…Àt7‹P‹B ‰Eà‹B‰E䃱ä‰D$Eà‰$èkïÿÿ…ÀxdžÀé„‹E¤ÇE¼ÇD$‰<$‰D$èõ…Àt4‹P‹B ‰Eà‹BÇD$ ‰EäEà‰$è)îÿÿdžÀ‰†Äë.€~Xtƒ~uƆ¸¸dž´›ëdžÀ¸‹]ô‹uø‹}üÉÃU‰åWVSè[쌋U‹‚¼ƒø„Š‚Zƒø„Aƒø…ĺ‹Mƒ¹À‡Ç‹À‹„ƒYØÿàf ÌuÒ—}/‹u‹ŽÌ‹†¤‹–Ä)È9Љ†œr2v– Æ ‹ŽÌ‹–Ä‹Eˆ ‰œ‰ˆ˜éºé(‹uUÌ‹EÆÐÈ‹~‰D$ƒ&ã‰T$ ‰D$‰4$è…øÿÿƒø‰Ât‰~ƒú„ ÿÿÿé•‹F‰|$)ø‰D$‹E ‰$èÃáÿÿ‰~‹M‹¹È…ÿu&‹Ô+ÌÇÀ‰œºéÈþÿÿ‹udžÀëç‹E‹ˆÔ‹È‹€¤)È9ÐŒ,ÿÿÿ‹E4‰°Ôƒ-ã‰D$‹EЉ$èÆ÷ÿÿƒø‰Ât‹M‹Ô+ȉÔé*ÿÿÿ‹U‹‚Ô‰t$)ð‰D$‰Ð ‰$èöàÿÿ‹M‹œȉ±ÔÇÀ‰œé5ÿÿÿ‹E‹°Ô‰$èzùÿÿƒø‰Â…Âþÿÿ‹U‹‚ ‚ÌÇ‚¼‰‚˜‹‚Ô‰t$)ð‰D$‰Ð ‰$èràÿÿ‹M‰±Ôéå‹u‹†¤‹–̉Á)Ñ– ‰Žœ‰†Ô‰–˜ºé.‹U‹‚Ћ‚Ô€zXÇ‚œ‰‚˜‹‚Ô‰‚Ìt#ƒzwo‹J¸Óà¨ìtaÇ‚¼éZ‹u‹NDùÌ”Âù0”ÀÂu$Aœƒøcv‹F@ƒøtƒøtƒøt ƒøtƒøu‹EÇ€¼é‹u} ÇE¨‰|$ÇD$ƒÆd‰4$èÜ…Àt:‹P‹B ‰EÜ‹B‰Eàƒã‰D$E܉$èùêÿÿ…Àx‹UÇ‚ÀéŽýÿÿÇE¨‰|$ÇD$‰4$胅Àt:‹P‹B ‰EÜ‹BÇD$ ‰EàE܉$è·éÿÿ‹MÇÀ‰Äé5ýÿÿ‹u€~Xtƒ~uƆ¸‹EÇ€´›éž‹UÇ‚Àéûüÿÿ‹M‰ $èF÷ÿÿé5‹uẺE}äÆÐ‹U‰ù‰ðèÓêÿÿƒø‰Âu‹EäHƒøvä‹F+EЉFƒú…AUÔƒ0ã}܉U”‰T$ ‰|$‰D$‰4$è¬ôÿÿƒø…ž‹Eà³%óÇD$ÇD$ ‰t$‰D$‹E܉$è˜ßÿÿ…ÀˆÏƒ|Æ…—‹MÇA ‹E؉D$‹EÔ‰$èFÛÿÿ‹u…À‰Â‰†°„w‰ðƒÀ‰D$‹E؉$‰D$è»QH…ƒdž¼1ÒéwE ‰D$‹E”‰|$‰4$‰D$ ƒ:ã‰D$èáóÿÿƒø‰Â…H‹E؉D$‹EÔ‰$èÂÚÿÿ‹M…À‰Â‰°„‰ÈƒÀ‰D$‹E؉$‰D$è7QH…ÿ‹E E¤¶0Æ‹EƒÀ`‰D$ ‹EƒÀ\‰D$ƒPã‰D$‹E ‰$胋M ‹U¤‰Ç‰ðƒÿˆ…´‹U‹r\…öˆ¦‹J`…Ɉ›‹Eà³%óÇD$ÇD$ ‰t$‰D$‹E܉$è#Þÿÿ…Àx^‹DÆ‹M‰AǼédùÿÿ‹u‰4$èóòÿÿ‰Âƒú„Nùÿÿë?‹UÇ‚´ë+‹MÇ´ôë‹udž´ôë ‹EÇ€´õºÄŒ‰Ð[^_ÉÃU‰åVƒì‹E‹u‰D$‹E ‰D$† ‰$è¦Ûÿÿ…Àu ‰uƒÄ^Éé·øÿÿdž´ôƒÄ¸^ÉÃUº‰åWVSè[ƒìl‹uƒ¾À‡»‹†À‹„ƒ&ØÿàÏfB“4>Ô‹ŽÌ‹†¤‹–Ä)È9Љ†œ‚v– Æ ‹ŽÌ‹–ÄŽ ‰–œ‰Ž˜éV¾Ð‹G‰<$‰E¤Eà‰D$ †È‰D$ƒÃÛ‰D$ècñÿÿƒø‰Ât‹E¤‰Gƒú„/ÿÿÿé ‹G+E¤‰D$‹E¤‰D$† ‰$èœÚÿÿ‹E¤‰G‹†È…Àu&‹†Ô+†ÌdžÀ‰†œºéÕþÿÿdžÀëꋎԋ†¤‹–È)È9ÐŒ‰<ƒÊÛ‰¾Ô‰D$†Ð‰$èªðÿÿƒø‰Ât‹†Ô+†È‰†Ôé6ÿÿÿ‹†Ô‰|$)ø‰D$† ‰$èáÙÿÿ‹†œ†È‰¾Ô‰†œét‹¾Ô‰4$èuòÿÿƒø‰Â…âþÿÿ‹† †Ìdž¼‰†˜‹†Ô‰|$)ø‰D$† ‰$èqÙÿÿ‰¾Ô1Òé´‹†¤‹–̉Á)Ñ– ‰Žœ‰†Ô‰–˜ºé‚‹†Ð‹†Ô€~Xdžœ‰†˜‹†Ô‰†Ìtƒ~w\‹N¸Óà¨ìtNë=‹NDùÌ”Âù0”ÀÂu$Aœƒøcv‹F@ƒøtƒøtƒøt ƒøtƒøudž¼é5ÿÿÿE´~dÇE¼‰E ‰D$ÇD$‰<$èõ…Àt7‹P‹B ‰Eà‹B‰E䃻ۉD$Eà‰$èäÿÿ…ÀxdžÀéÑýÿÿ‹E ÇE¼ÇD$‰<$‰D$蜅Àt7‹P‹B ‰Eà‹BÇD$ ‰EäEà‰$èÐâÿÿdžÀ‰†Äéxýÿÿ€~Xtƒ~uƆ¸ºdž´›ëdžÀéEýÿÿºƒÄl‰Ð[^_ÉÃU‰åVSƒì‹U‹u è[‹‰‹B‰F‹B‰F‹B ‰F ‹B‰F‹B‰F‹B‰F‹B‰F‹B ‰F ‹B$‰F$‹B(‰F(‹B,‰F,‹B0‰F0‹B4‰F4ƒñ׉D$F‰$èC…Àu"‹N$…Ét‹V…Òuƒö׉F1ÀÇF블ÿÿÿƒÄ[^ÉÃU‰åVƒìT‹E uÀ‰t$‰D$‹E‰$èKº”ÿÿÿHu‹E‰4$‰D$èÿÿÿ‰ÂƒÄT‰Ð^ÉÃU‰åWVƒì‹} ‹E‰|$‰$èøþÿÿÇD$ÇD$Ç$è!ƒøÿ‰Æuf¾3ÿë7G(ÇD$‰D$‰4$èw@u‰4$ÇD$èÛ‰4$¾4ÿÿÿèRƒÄ‰ð^_ÉÃU‰åƒì8‹E‰]ôè[‰}ü‹} …À‹E”‰uø…À”ÀÂu"‹E‹…Ò•Á…ÿ”À„Èu‹Eƒx ý…°ë#‹}¾›ÿÿÿ…ÿ„ç‹U¾›ÿÿÿÇéÔ„Éu 1ÿ1ÒÇEäëB¾˜ÿÿÿ‰$è¶…À‰E䄨‹M‹‰D$ƒ‰Ö‰D$‹Eä‰$è‹Uä‰$èJ‹M‹uä‰EàÆ‹‰|$¿‰4$‰D$èj‹U‹fÇ ‹MàTë‰}ä1ÿE‰D$ ‹Eä‰T$‹U‰D$‰$èÿÝÿÿ…ÿ‰Æt ‹Mä‰ $è=…öy ‹EÇë‹U‰21ö‰ð‹]ô‹uø‹}üÉÃU‰åWVì‹} ‰<$èsëÿÿ¹ƒøtwáÿÿÿƒø‰Â…Bëd‹Eµø÷ÿÿ‹MÇD$‰t$‰D$ ‰ $èSÝÿÿƒø‰Â~1‰D$‡ ‰t$‰$èGÔÿÿ…ÀuY‰<$è ëÿÿƒøtƒøt©éÁ…Èë/…Ét˜‰<$èÿìÿÿƒøuƒ¿¼ºë1Òƒø…餋EÇëºLJ´ô鎋MǺ‰ÿÿÿë~‹Eµø÷ÿÿ‹MÇD$‰t$‰D$ ‰ $è‘Üÿÿƒø‰Â~;‰D$‡ ‰t$‰$è…Óÿÿ…Àu—‰<$è`ìÿÿƒøu ƒ¿¼t‰Âëƒøtœëõtˆ‹‡´‹M‰ë …Òt‡ºÄ‰Ð^_ÉÃU‰å‹MV‹u …ɔ…ö”ÀÂu‹E…Àt‹œ‰‹Ä‹U‰1À븛ÿÿÿ^ÉÃU¸›ÿÿÿ‰å‹U…Òt Ç‚ì1ÀÉÃU¸›ÿÿÿ‰åVƒì‹u…öt2†ÜÇD$‰$è£Øÿÿ‰4$è¸Üÿÿdžè‰4$èý1ÀƒÄ^ÉÃU‰åƒ}V‹M‹u‹E ”Â…ÀŸÀ„ÐtÇÇë ‹E‰‹E ‰^ÉÃU‰åì(‰]ôè[‰uøµèúÿÿ‰}ü‹}‰4$è^@uÆ…èüÿÿ‰D$ ƒÝÒ‰t$‰<$‰D$èÙ‹]ô‹uø‹}üÉÃU‰åWVSè[ƒì\‹}E‰EäÇEÀÇEÄÇEÈÇEÌÇEÐÇEÔéÞ‹U…Ò„3Ç‹E‹U‰ $‰D$E ‰D$E؉T$ ‰E‰D$è¦ýÿÿ…À‰Æ…Ç$¾˜ÿÿÿèï…À‰E”„å‹Uf¾0ÿ‰P ÇD$ÇD$Ç$èiïƒøÿ„Ÿ‰D$‹E”‰$èXÃÿÿ…Àt‹U”ÇD$‰$ëw‹U”EÈÇD$‰D$‹‰$è›í@u‹E”¾4ÿÿÿÇD$‰$è*ÃÿÿëC‹EÜ‹U”‰D$‹E؉$‰D$ ƒ¶‰D$E‰D$èëÿÿ…À‰Æt‹E”ÇD$‰$èåÂÿÿ‹U‰$èŽÿÿ‹E”‰ë¾›ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åƒìH‰]ô‹Eè[‰}ü‹}‰uø‰D$‰<$è²î‰<$‰D$èÒåÿÿ…À‰Æ…ø‹U ‰$èA½ÿÿ‰<$è‰îƒÀƒàð)ĉ<$t$0èuîÇD$‰4$@‰D$è±í‰|$‰4$èJ¾‰D$‰4$è[î…À„‘xÇD$/‰<$èî…À‰ÆtxƉ<$èîÆ/‹U‰|$ ‰T$(‹U‰D$$ƒŸ¾‰D$‹B‰D$‹BÇD$ÇD$ÇD$‰D$ƒè¾‰D$ ‹E ‰$è_ðÿÿ…À‰Æt‹U ‰$è~¼ÿÿë¾”ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰å숉}ü‹}‹E ‰]ôè[…ÿ”Â…À”À‰uø…‹u‹M…ö”Â…É”ÀÂ…û‹E¾qüÿÿÇ‹U Ç‹EÇ‹UEÌÇ‹U 9U‰…œþÿÿ˵¨þÿÿ‰4$ÇD$ìÇD$èDì‹E ‹U‰D$ ƒ§½‰D$…¸þÿÿ‰T$‰$è–ìẺ…œþÿÿ‰$èl»ÿÿ‹•œþÿÿE”‰t$ ‰D$‰<$‰T$èÆýÿÿ…À‰Æ…OÇ$ð¾˜ÿÿÿè¼ë…À‰Ç„4ÇD$ðÇD$‰$è³ëLJèÇD$‰<$è¯ÅÿÿÇD$ÇD$Ç$èðëƒøÿu‰<$f¾0ÿèwêéЗ܉•¤þÿÿ‰D$‰$èÉ¿ÿÿ…Àt(‹…¤þÿÿ¾0ÿÿÿÇD$‰$èÇ¿ÿÿ‰<$è3êéŒE¼ÇD$‰D$‹‡Ü‰$èóé@u(‹•¤þÿÿ¾4ÿÿÿÇD$‰$è¿ÿÿ‰<$èëééD‹EЋ•¤þÿÿ‰D$‹Ẻ$‰D$ ƒR³‰D$E$‰… þÿÿ‰D$èRçÿÿ…À‰Æt#‹…¤þÿÿÇD$‰$è#¿ÿÿ‰<$èééèEä‹• þÿÿ‰D$ ‹…¤þÿÿ‰|$‰T$‰$èMäÿÿƒøu‰<$è~Ôÿÿƒø•Â…À•À„Ðt‰<$¾ÿÿÿè>éé—‹GD‹U‰E܉D$ÇD$‰<$èiÃÿÿ…Àu ‹EÇë‹EÜ‹U‰ƒ¿¼u ‹EÇë6‹‡Àƒøu ‹UÇýÿÿÿë ƒøu ‹‡Ä‹U‰ëƒøu ‹EÇüÿÿÿ‹U 1ö‰:ëE̾›ÿÿÿ‰…œþÿÿ‹•œþÿÿ‰$è ¹ÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åWVSì,‹Eè[‹} ƒøu ‰<$èéÆÿÿë ‰D$‰<$è_Ãÿÿµè÷ÿÿÆ…ç÷ÿÿëÆ…ç÷ÿÿ‹U‹EÇD$‰t$‰$‰D$ è°Àÿÿƒø‰Â~E‰D$‰t$‰<$èÞÛÿÿ…Àu ‹ƒNç‹—Ä;vV‹MºþÿÿÇëHƒøt/ƒøt–ƒøu˜ë5u€½ç÷ÿÿu*‹EÇ닇´‹M‰ë‹‡´‹U‰º‰ÿÿÿë1ÒÄ,‰Ð[^_ÉÃU‰åì(‰}ü‹}‹E ‰]ôè[…ÿ”Â…À”À‰uø¾›ÿÿÿ…¤E‰…ÿÿÿƒ ýu‰D$ ƒã·ÇD$‰D$‰<$èß¿ÿÿ…ÿÿÿ‰…ÿÿÿ‰$ÇD$èÂÿÿEä‹•ÿÿÿ‰D$‹…ÿÿÿÇD$‰<$‰T$ ‰D$è`þÿÿ‹U ‰Æ‹Eä‰ÇD$‰<$èY¼ÿÿ‹…ÿÿÿ‰$èhÀÿÿ‰<$è·æ‰ð‹]ô‹uø‹}üÉÃU‰åWVSè[ƒìLÇD$ÇD$Ç$èççƒøÿt#u؉D$‰4$èÚ»ÿÿ…Àt.ÇD$‰4$èã»ÿÿ‹E‰D$‹E‰$èPÁÿÿÇEÔ0ÿÿÿéÔ‹EÇD$ƒÀ(‰D$‹E؉$èþå@u.ÇD$‰4$è•»ÿÿ‹E‰D$‹E‰$èÁÿÿÇEÔ4ÿÿÿ醋E}‰|$‰4$‰D$‹E ‰D$ ƒ®‰D$ècãÿÿ…À‰EÔt$ÇD$‰4$è9»ÿÿ‹E‰D$‹E‰$è¦Àÿÿë4Eä‰D$‹E‰|$ ‰4$‰D$‹E‰D$èñüÿÿÇD$‰4$‰EÔèñºÿÿ‹EÔƒÄL[^_ÉÃU‰å숉]ôè[‰}ü‹}‰uø‰<$èÛæU˜‰•°þÿÿƒÀƒàð)ÄD$0‰T$‰…´þÿÿ‰<$è´æ‰<$‰D$èÔÝÿÿ…À‰Æ…EЉ…¨þÿÿ‰$è=µÿÿ‹•´þÿÿ‰|$‰$èqæƒß¶‰D$‹…´þÿÿ‰$è|æ…À„ÔxÇD$/‰<$è4æ…À‰Æ„·Ɖ<$è3æÆ/‹•¨þÿÿ‰|$ ÇD$ÇD$ÇD$‰D$$ƒÄ¶‰D$‹E¬‰$‰D$‹E¨‰D$ƒâ¶‰D$ èƒèÿÿ…À‰Æt ‹…¨þÿÿ‰$ëX‹E •¼þÿÿ‰•¬þÿÿ‰T$‹•°þÿÿÇD$ ‰D$‹EÔ‰$‰D$‹EЉD$èFýÿÿ…À‰Æt!‹…¬þÿÿ‰$è…½ÿÿ‹•¨þÿÿ‰$èE´ÿÿéë‹E…ÀtWEà‰D$‹…¬þÿÿÇD$‰$èô½ÿÿ…Àu‹UÆë.‹u丳þ´Cð‹Eà‰t$‰D$‹E‰$èXä‹UÆ2‹…Xÿÿÿ‹U…À‰u ‹EÇëU‹µÿÿÿþÈ…Uÿÿÿ…\ÿÿÿ‹µTÿÿÿ‰$èa³ÿÿ‹U‰Ç‹‰t$‰<$@‰D$èþã‹U‹‰<$@‰D$è7ä‹U‰‹µÿÿÿ¸þÈDðéùþÿÿ¾”ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åƒìh‰]ôè[ƒ}‰uø‰}ü‹E”‹M‹u…ÀŸÀ„ЉMÄt ÇEľ}Ô‰<$èÛ²ÿÿ‹E ‹Mĉt$ÇEàF‰D$‰D$ƒ¦´‰D$ ‰L$‰<$èŸæÿÿ…À‰Æu3‹EØÇEä‰D$‹EÔ‰D$ ƒ<ª‰D$Eä‰D$‹E‰$èÀßÿÿ‰Æ‰<$莲ÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åWVSè[ƒì<€»òÔ…Ï‹³J»öÔG‰Eä‰7ƒÇ‰4$èsã;}ät0uꋳF»þÔG‰Eà‰7ƒÇ‰4$èKã;}àt0uꋳB»2ÕG ‰E܉7ƒÇ‰4$è#ã9}Üt0uꋳ>»RÕGH‰E؉7ƒÇ‰4$èûâ9}Øt0uꋳ:»šÕG‰EÔ‰7ƒÇ‰4$èÓâ9}Ôt0uêÆƒòÔ‹Eº…ëQ‹M÷êÁùÁú‰Ö)Ê)ΉÑkÆd‹u)ƃú”ƒþžÀ„Ðt ‹Œ³öÔëdƒù”ƒþžÀ„Ðt ‹Œ³þÔëKƒù”ƒþžÀ„Ðt ‹Œ³2Õë2ƒù”ƒþžÀ„Ðt ‹Œ³RÕëƒù”ƒþžÀ1É„Ðt‹Œ³šÕƒÄ<‰È[^_ÉÃU‰åWVSƒì<‹E è[Ç‹EÇD$.‰$èâ…Àto@1ÿ“Ô‰EàÇEäD‰UÔ‹Uäú‰ÐÁè4Ñþv…‰UØ‹UÔ‹‚‰D$‹Eà‰$è…áƒø~ ~9}ä}Âë}N‰uäëñ‹EØEÔ‹P‰UÜ‹x닃ÃÀ»r²‰EÜ‹U܉$èaá‰<$‰ÆèWáD‰$èƒà‰Æ¸˜ÿÿÿ…öt4‹E܉|$ ‰4$‰D$ƒ²‰D$èìà‰4$èÇß‹U ‰‰4$èjß1ÀƒÄ<[^_ÉÃU1Ò‰åƒì8‰]ôè[‰uø‰}ü‹ƒ/Þ‹…À…‹³·¿ƒŸ¿»Ó‰Eäë-‰wô‰4$è»à‹Mä¾Br‹‰wü‰4$‰GøèàtƒÇ €>u˃#lj$è3¯ÿÿƒSÖ‰$è%¯ÿÿƒCÖ‰$è¯ÿÿ‹ƒ3ÞǃgÖǃcÖǃƒÖÇD$‰$è‘ߺ˜ÿÿÿ@t‹ƒ/Þ1ÒÇ‹]ô‰Ð‹uø‹}üÉÃU‰åƒì(‰]ô‹Eè[‰}ü‰uø‰D$»,Ɖ<$茯ÿÿ…À‰Æu1‹ƒ0Æ…Àt%Pÿ‹ƒ,Æ€</uÇD$‰T$‰<$èÖ­ÿÿë1ö‰ð‹]ô‹uø‹}üÉÃU‰åWVSè[ƒì,‹ƒÔÜëT‹}äƒÇ‰<$è{߉ƋEä€|/u‹E‰t$‰<$‰D$èfß…Àë‹E‰t$‰<$‰D$èOß…Àu ‹E€<0/t‹E䋉Eä‹Uä…Òu 1À븃Ä,[^_ÉÃU‰åW1ÿVƒìë‹uþ¾Fÿ‰$è݈Fÿ‹E‰þG‰$èêÞ9ðڃĸ^_ÉÃU‰åWVƒì ‹E‰$èÇÞƒÀ‰$èôÝ…À‰Æt~‹E ‰$è«ÞƒÀ‰$èØÝ…À‰Çu ‰4$èîÜëX‹E‰4$‰D$èwÞ‹E ‰<$‰D$èhÞ‰4$èRÿÿÿ‰<$èJÿÿÿ‰|$‰4$èoÞ…Àt)ðE‰4$‰EôèžÜ‰<$è–ÜëÇEô‹EôƒÄ ^_ÉÃU‰åƒì‹E‰uø‰}ü‹8…ÿt6‹U ‰<$‰T$èÞ…À‰ÆtÆ‹E ‰$èïÝ‹U‰ë ‹Eljø‹uø‹}üÉÃU‰åƒì8‹U‰]ô‰uø‰}üÇEàÿÿÿÿÇEäÿÿÿÿÇEØÿÿÿÿÇEÜÿÿÿÿ‹ è[…É„σ®‰$‰D$è[ÿÿÿÇD$-‰$‰Çè\Ý…À‰Æ„¡Æ E؉D$ Eà‰D$ƒ®‰D$‰<$èÝ‹Eà#Eä@t ‹EØ#EÜ@u3Æ-‰<$è&Ý1ɉÆ9ñ}6¶<-t.¾ÐúÿwM‹ƒÌÚöD5t@‹Eà‹Uä‹M ‰‰Q‹EØ‹UÜë‹EØ‹UÜ‹M ‰‰Q‹Eà‹Uä‹M‰¸‰Që ¸ÿÿÿÿëA뙋]ô‹uø‹}üÉÃU‰å숉uø‹E‰}ü‹u ‹}‰]ôÇ@‰°à‰¸ä‹M¸è[…É„ ‹U‰$èaÜ@‰$èÛ‰EÄ‹Uĸ˜ÿÿÿ…Ò„ù‹M‹EĉL$‰$è)Ü‹Uăû¬‰D$‰$èDýÿÿ…Àt‹Mă­‰D$‰ $è+ýÿÿ…À‰Eäu‹Eĉ$èOÚ‹U¸ÇBé“@…ÿ‰EäˆwEЉD$E؉D$Eä‰$èèýÿÿ@„W‹UÜ‹EØ9׉E°‰U´Œ99Æ‚1‹E´…ÀˆA‹UÔ‹EÐ…Ò‰E¸‰U¼ˆÀ‹U¼9U´| 9E°‡û;}¼|;u¸w‰ð‰úƒÀÿƒÒÿ‰E¸‰U¼‰EЉUÔ‹U°‹M´‹E‰Ø‰ˆÜ‹E¸+E°‹U¼U´‹MƒÀƒÒ‰à‰‘ä‹E¸‹U¼‹M´‰t$‰D$ƒ­‰T$‹U°‰D$‹E‰|$‰L$ ‰T$ƒÀ‰$è”Ú‹Mĉ $èÙ¸Èéj‹E¸#E¼@…E;}´Œ< ;u°†1‹E°‹U´‹M‰Ø‰ð‰‘܉ú+E°U´‰à‰‘ä‹E°‹U´‰t$ƒÆÿ‰|$ƒ×ÿ‰t$‰|$éÌ‹E°#E´@…Ø‹MÔ‹UЃù‰U¸‰M¼ŒÃ ƒú†¸;}¼H|;u¸wA‹Mƒ(­‰±à‰¹äÇØÇ܉t$ƒÆÿ‰|$ƒ×ÿ‰t$‰|$ ë`‹M‰ð‰ú+E¸U¼‰E ‰U¤‰Ø‰‘Ü‹E¸‹U¼‹M‰à‰‘äƒE ƒU¤‹E ‹U¤‰t$‰|$‰t$‰|$‰D$ƒ­‰T$ ‰D$‰ÈéŽþÿÿ‹Uĉ$ë‹Mĉ $è­×¸ ‹]ô‹uø‹}üÉÃU‰åWVSè[ƒìL‹E‹UÇ$´‰EЉUÔèRØ…À‰Eä„‹UƒÂd‰U؉$è¡ÖÇEàȉEÜé·‹EÜ‹“yÖ‹pÇD$ÇD$ !‰T$‹F‰D$‹‰$葨ÿÿ~³‰Çv"‹Eä‰$è׋F@‰$èÔ×…À‰Eä„‹V‹F ‰T$‹Uä‰D$‰$èº×‹F…ÿ‹UäÆx‹“yÖ‹Dúƒø#„„ƒø$t*ƒøtd‹EÜ‹U؉D$‰$èèÕ‰EÜ‹uÜ…ö…>ÿÿÿé‹‹E Ç@‹Uä‰$è؃øvÁƒ ª‰D$‹Eä‰$èùÿÿ…Àt¨‹U ÇB 뜋Eä‰$è Ö‹U ‰‚è놋E ‹UÔ‰D$ ‹EЉT$‹Uä‰D$‰$èûÿÿ=ȉEà„Xÿÿÿ‹Eä‰$ë‹Uä‰$èîÕëÇEà˜ÿÿÿ‹EàƒÄL[^_ÉÃU‰åWVSìL‹uè[‹}ÇEä…öt-‹E‹…Ét$‹U‹ƒÔÇD$‰$ÿP‰…Èûÿÿ¸ôë ƒG¨‰D$‹E‰$èkÕ‰…Èûÿÿ¸‘‹•Èûÿÿ…Ò„ •äûÿÿ¾LJ¼Ç…ÄûÿÿÆ…ÏûÿÿÇ…Ðûÿÿ‰•Àûÿÿë ‹…Ôûÿÿ‰…Ðûÿÿƒ¿¼t ‰<$è(Éÿÿ‰ÆƒþuÆ…Ïûÿÿ‹•Äûÿÿ•Ðûÿÿ‰•ÔûÿÿéÏ…ö•ƒþ•À„ÐtÚƒþtÕ‹…Èûÿÿ‰$è§Ôé—Eä‹•Àûÿÿ‰D$ ‹E ÇD$‰T$‰$è'­ÿÿƒø~I‹•Àûÿÿ‰D$‡ ‰$‰T$è¤ÿÿ…À…~‰<$è‡Èÿÿƒø‰ÆtE…À•ƒø•À„Ðt=ƒþt8ë%…‡€½Ïûÿÿt LJ¼ëLJ´¸é^Æ…Ïûÿÿ‹‡œ9…Ôûÿÿv'ƒ¿¼…=ÿÿÿ‹•Ðûÿÿ+…Ðûÿÿ‰…Äûÿÿ‰•Ôûÿÿ‹‡Ì…Ðûÿÿ‹…Äûÿÿ‹— •Ðûÿÿ‹•Ðûÿÿ‰D$‹…Àûÿÿ‰T$‰$èŠÔ‹U‹…ÀtA‹…Äûÿÿ‹•Àûÿÿ‰D$‹…Èûÿÿ‰T$‹“Ô‰$ÿR …ÀyE‹…Èûÿÿ‹“Ô‰$ÿRé„‹…Èûÿÿ‹•ÄûÿÿÇD$‰D$ ‹…Àûÿÿ‰T$‰$èDÓ…ÀxHƒ¿¼…ûýÿÿ‹•Ôûÿÿ9—œ…éýÿÿ‹E‹8…ÿt5‹•Èûÿÿ‹ƒÔ‰$ÿPë/LJ´ôë‹…Èûÿÿ‰$è½Ò¸ôë‹•Èûÿÿ‰$è¨Ò¸ÈÄL[^_ÉÃU‰åƒì(‰]ôè[‰uø‰Æ‰}ü»Öɉ<$è•Ó‹F…Àt,‹F$ÿ‹F$‹…ÀF‰$èã¢ÿÿ‰4$èÛ¢ÿÿ‹F$‰$èYÒ‰<$è_Ó‹]ô‹uø‹}üÉÃU‰åƒì8‰]ôè[‰uø‰}ü‹³у>uVƒ º‰$»+É艢ÿÿƒ+ÉèVÿÿÿƒkɉEä‰$èÿÒ1À¹ üó«‹Eä‰$èïÒ‹Eä‰$èÕÒÇ‹]ô‹uø‹}üÉÃU‰åƒìh‰]ôè[‰uø‹u‰}üƒªÈèñþÿÿ1À…ö„&EÐ}À‰E´‰$èÛ¡ÿÿ‰<$èÓ¡ÿÿÇEä€>/tƒã¡‰D$‰<$è­¢ÿÿ…À…ĉt$‰<$èµ ÿÿ…À…°Ç$èÒ…À‰E䄙NjE³êȉD$‹E ‰D$‹E´‰$蹡ÿÿ‹E‰4$‰EàèÒ‹EÀ‰4$‰ƒªÈ‹Eĉƒ®È‹Eȉƒ²È‹Ẻƒ¶È‹EЉƒºÈ‹EÔ‰ƒ¾È‹E؉ƒÂÈ‹E܉ƒÆÈ‹Eà‰ƒÊÈ‹E䉃ÎÈè§Ñ1Àë#‰<$è¡ÿÿ‹E´‰$èù ÿÿ‹Eä‰$èwи˜ÿÿÿ‹]ô‹uø‹}üÉÃU‰åWV‰ÆSè[ìœEˆ‰•pÿÿÿÇB‰D$‰4$è¸Ñ@„зE%ð=@u‹…pÿÿÿÇ@ ë=€…¦‹•pÿÿÿÇB ƒà¢‰D$‰4$èÝÏ‹pÿÿÿ‰Â1À…Ò•À…Ò‰At‰$è°Ï‹E¸‹U¼‹pÿÿÿ‰‰Q‹E¨‰A‹…pÿÿÿƒÁ‰xÿÿÿÇ@ÇD$.‰4$èDÑ…À„@1ÿ“ ĉE€ÇE„D‰•hÿÿÿ‹U„ú‰ÐÁè4‹•hÿÿÿÑþv …‰lÿÿÿ‹M€‹‚‰ $‰D$èºÐƒø~ ~;}„~¼ë"}N‰u„ëñ‹…lÿÿÿ…hÿÿÿ‹P‰•|ÿÿÿ‹xë‹‹¹°»h¢‰|ÿÿÿ‹…|ÿÿÿ‰$è‡Ð‰<$‰Æè}ÐD‰$è©ÏÇ…tÿÿÿ˜ÿÿÿ…À‰ÆtB‹•|ÿÿÿƒu¢‰|$ ‰D$‰4$‰T$è Љ4$èå΋xÿÿÿ‰‰4$è…ÎÇ…tÿÿÿ‹…pÿÿÿƒÀ‰$è¦Î‰$è0Îë Ç…tÿÿÿÿÿÿÿ‹…tÿÿÿÄœ[^_ÉÃU‰åWVSè[ìÜEȉ…Tþÿÿ‰$ÇEäÇ…ŒþÿÿÇ…þÿÿÇ…”þÿÿÇ…˜þÿÿèGžÿÿU¸‰•Xþÿÿ‰$è6žÿÿ‹U E܉D$ Eà‹u ÇE´‰D$‹B`ƒÆ‰D$‹B\‰$è½Êÿÿ‹F@‰$è‚Î…À‰…\þÿÿ„Œ‹F‹V‰D$‹…\þÿÿ‰T$‰$èb΋F‹•\þÿÿƉEØE؉$‰D$èõ ‹F‰D$‹…\þÿÿ‰$è …À…=‹•\þÿÿ€:/t¿Æ…‡þÿÿéD‹…\þÿÿ‰$èïÿÿ…Àt=‹•\þÿÿ‹…XþÿÿÇ…Œþÿÿ‰T$‰$è<žÿÿ…À…Ü‹U ‹B…À„¤é‹ƒ=ÅÆ…‡þÿÿ…À„¤³mʼn4$è»Í‹ƒ-ʼn…xÿÿÿ‹ƒ1ʼn…|ÿÿÿ‹ƒ5ʼnE€‹ƒ9ʼnE„‹ƒ=ʼnEˆ‹ƒAʼnEŒ‹ƒEʼnE‹ƒIʼnE”‹ƒMʼnE˜‹ƒQʼnEœÿ‰4$èVÍ‹…\þÿÿ‰D$‹…xÿÿÿ‰$èÅÍ…À‰Âu!‹EŒÇE¤ÇE°ÇE¬‰E ‹E˜‰E¨…Ò”…gþÿÿ€½gþÿÿ…ïƒÂ ‰$è5Ì…À‰E´u Æ…‡þÿÿ鿯…‡þÿÿÆ…hþÿÿÆ…gþÿÿ齋E¸} ‹³͉|$‰$ÿ…À…¦‹E¬…ÀtS‹E¼“Ë ‹M¸€|ÿ/ƒÖ EЉT$‹•Xþÿÿ‰$èКÿÿ…À…T‹E¸‰|$‰$ÿ…À…W‹E¬…À…L‹E°…À„3Æ…‡þÿÿÆ…hþÿÿé!Æ…‡þÿÿ‹ƒ¶…À„"‹ƒ ¶‰D$‹…Xþÿÿ‰$èBœÿÿ…À…‹•\þÿÿ‹…Xþÿÿ‰T$‰$è>šÿÿ…À…âëBÿ‹•XþÿÿÇD$‰D$‰$èxšÿÿ‹U¼…Òt ‹E¸€|ÿ/tÒ‹E ‹x…ÿ„‡‹E¸} ‰úèúÿÿ…À…–‹u¬…ötQ‹E¼“Ë ‹M¸€|ÿ/ƒÖ EЉT$‹•Xþÿÿ‰$è°™ÿÿ…À…T‹E¸‰úèÏùÿÿ…À…I‹M¬…É…>‹U°¿“Ç…`þÿÿ…Ò„3Æ…hþÿÿÆ…gþÿÿ‹E µŒþÿÿ‹U¤‰t$‰…lÿÿÿ‰D$‹E ‰•pÿÿÿ‰T$ ‰$è/òÿÿÇ…`þÿÿ=ȉÇ…ß‹U f1ÿÇ…`þÿÿ‹B…À„Ä‹…”þÿÿ…ÀtG‹…þÿÿ…À„žƒ±¡‰D$$E¨‰D$ ƒã ‰D$‹E´‰t$ÇD$ΉD$ƒó é­‹…þÿÿ…Àt2ƒ±¡‰D$ E¨‰D$ƒã ‰D$‹E´ÇD$ȉD$ƒ¡ë}‹pÿÿÿ‹•lÿÿÿ…Éx=ƒ±¡‰D$(E¨‰D$$ƒã ‰D$ ‹E´‰T$‰L$ÇD$ȉD$ƒ¡é$ƒ±¡‰D$ E¨‰D$ƒã ‰D$‹E´ÇD$ȉD$ƒ¡‰D$ ‹EÜ‹•Tþÿÿ‰D$‹Eà‰$‰D$è·Ìÿÿ¿È…À…ƒ‹U 1ÿ‹BÇ…`þÿÿƒøtv€½gþÿÿÇ…`þÿÿu¶•hþÿÿÁâÁúƒâ‰•`þÿÿ1ÿƒø uF‹…Tþÿÿ‰$è…˜ÿÿë6Æ…‡þÿÿë¿“Æ…‡þÿÿëÆ…‡þÿÿë¿ô뿔Dž`þÿÿ‹•\þÿÿ‰$èÈÇ‹E´‰$è:È…ÿ•À„…‡þÿÿ‰Æt …xÿÿÿèòôÿÿ‰ò„Òt%‹U ‹B`‰D$ ‹B\‰|$‰D$‹E‰$è¬äÿÿéMƒ½`þÿÿ‡@‹•`þÿÿ‹„“áØÿàGõåG‚‹EŒ‹U‰D$‹Eˆ‰$‰D$‹ẺD$‹EȉD$…Œþÿÿ‰D$ ƒ+¡‰D$Eä‰D$è¢Äÿÿ…xÿÿÿèGôÿÿéÈ‹E¸‰D$‹ẺD$‹EȉD$…Œþÿÿ‰D$ ƒ'¡‰D$Eä‰D$‹E‰$鈅Œþÿÿ‹U‰D$ ‹E¸‰$‰D$‹E‰D$è»ðÿÿ“±¡‰T$“1¡‰T$ÇD$ÇD$‰D$ƒ;¡‰D$ ‹…Tþÿÿ‰$èœÊÿÿ‹EÌ‹U‰D$‹Eȉ$‰D$ ƒ³•‰D$Eä‰D$èÊÃÿÿ‹…Tþÿÿ‰$è”–ÿÿ‹•Xþÿÿ‰$膖ÿÿÄÜ[^_ÉÀ½gþÿÿÆ…‡þÿÿÆ…hþÿÿ…îûÿÿéÁúÿÿƒ±¡‹•pÿÿÿ‰D$,E¨‰D$(ƒã ‰D$$‹E´‰t$ ‰T$ÇD$ΉD$‹…lÿÿÿ‰D$ƒD¡‰D$ ‹E܉D$‹Eà‰D$‹…Tþÿÿ‰$éýÿÿU‰åSè[ƒì$Eð‰D$‹EÇD$‰$褟ÿÿ…Àt&ƒ‹˜‰D$‹Eô‰D$‹Eð‰$èY­ÿÿºƒøt1ÒƒÄ$‰Ð[ÉÃU‰åSè[ƒì¾E‰D$ƒ?˜‰$èŽÆ…À•ÀƒÄ[¶ÀÉÃU‰åSè[ƒì¾E‰D$ƒ˜‰$è]Æ…À•ÀƒÄ[¶ÀÉÃU‰å‹M‹U ¶AÇBÇB ˆB·Af‰B‹A‰BÉÃU‰åVƒì‹u‹F…Àt‰$èxÄ‹F…Àt‰$èiÄǃÄ^ÉÃU‰åƒì‰}ü‹E‹} ‰uø‹p‰<$èäź9Æu‹U‰t$‰|$‹‰$èËʼn‹uø‰Ð‹}üÉÃU‰åƒì‰}ü‹E‹} ‰uø‹p‰<$èź9Æu‹U‰t$‰|$‹‰$è‰Å‰Â‹uø‰Ð‹}üÉÃU¸‰åVƒì‹U‹u ‹J;Nu‹‹‰L$‰$‰D$è‚ăÄ^ÉÃU‰å‹ESè[€8%u1¾Púÿw%‹‹bÂöD‘6t¾Púÿw öD‘6¸u1À[ÉÃU‰åƒìh‰uø‹u ‰}ü‹}‰]ôÇEäè[€<>%…²7P‰U̾Púÿ‡™‹‹ÂöD‘6„ˆ¾@=ÿw}öD6tvEä‰D$ƒp–‰D$‹Ẻ$èKÄHuW¶UäF1ɉEÔˆUÓë+¶EÓ‰U´ˆ2‹UÔ‹EÆEÓÊ;s ‹U´‹EÔ¶ˆUÓA‹E‹9ÂwÉBþ‹U‰¸ë1À‹]ô‹uø‹}üÉÃU‰åWV1öƒì‹} ë‹E‰t$F‰|$‰$èòþÿÿ;7rèƒÄ1À^_ÉÃU‰åƒì‰]ô‹E‰}ü‹} è[‰uø1öø‰ù‰Eð;Mðs/¶¾Â=ÿˆUïw‹“ôÀöD‚5tf¾Uï·ÆA€tBÐëÌ‹EfÁÆ)ùf‰0‹]ô‰È‹uø‹}üÉÃU‰åWVƒì ‹E ‹UÂÁà‰Uð‰$è…‰Eì‹U츘ÿÿÿ…Ò„Ü‹}ìÇ‹uÇEôÿÿÿÿ‰ñ鎀ú.ua;Mt€yÿ/u[y9}ðt¶AE¼‰D$‹E‰$èÆ»‹U‰$‰D$èþÿÿH…'‹u¼…ö…‹E €8u‹U‰T$‰<$è„»é ‹Eĉ<$‰D$‹EÀ‰D$赺‰øEÄÆ:‹M¨P‰•tÿÿÿ…Ét ‹E ‰$‰D$뼋Uà…Òt(fÇ@//p‹Eà‰4$‰D$‹E܉D$èkºuà‰µtÿÿÿ‹E…Àu‹U ‹…tÿÿÿ‰T$‰$éqÿÿÿ‹EÐ…Àu E÷ÇEЉEÌ‹•tÿÿÿ1ɉÖ눋EÌ€</tBër‰ðA‰Â9MÐv ‹E̶fÇF8 ‰MÔëW‰4$è·ðÇfÇ@ ‹Eà‹MÜ‹¸‰T$‹¹G‰T$‰4$‰D$ ‹EÔ‰D$èÙ¶‰$è—¶;}Ø|¤‰4$èÁ¶ðÇfÇ@ Æ@‰4$è>µ‹U‰‰4$èá´1ÀƒÄL[^_ÉÃU‰åVƒì‹u‹F@ÿ‹F@‹…Àu6‹‰$èµ´‹F‰$è'µ‹F‰$蟴‹F ‰$è”´‹F@‰$艴‰uƒÄ^Éé|´U‰åWV‰ÖSìÌ‹U‰…dÿÿÿEà‰D$ Eä‰`ÿÿÿÇE܉D$‹B`è[‰D$‹B\‰$è=±ÿÿ…öx‰t$ƒ ‡µhÿÿÿ‰D$‰4$èµëFÇ…hÿÿÿTIMEµhÿÿÿÇ…lÿÿÿOUT:Ç…pÿÿÿ SecÇ…tÿÿÿond-Ç…xÿÿÿinfiÇ…|ÿÿÿniteÆE€}̉<$è„ÿÿ‹…`ÿÿÿÇE؉t$(ÇD$‰D$$ƒ³‡‰D$ ƒ¹‡‰D$ƒÂ‡‰D$ ‹EàÇD$ÇD$ȉ<$‰D$‹Eä‰D$襷ÿÿ…Àt,‰<$¾˜ÿÿÿèăÿÿ‹U‹…dÿÿÿÇD$ô‰T$‰$èÏ-ë7‹EЋ•dÿÿÿ‰D$‹Ẻ$‰D$ ƒ»{‰D$E܉D$è °ÿÿ‰<$‰ÆènƒÿÿÄ̉ð[^_ÉÃU‰åƒì(‰]øè[‰uü‹³—±‰4$èñ³Eô‰D$‹E‰$è5Ht‰4$èϳ¸œÿÿÿë‹Eô„‰$è|ÿÿ‰4$è°³1À‹]ø‹uüÉÃU‰åWVSè[ì¬E´‰…„þÿÿ‰$赂ÿÿ‹U‹B0‰T$ÇD$ÇD$‰D$ ƒ†‰D$ƒê…‰D$‹E‰D$ƒ†‰D$ ‹…„þÿÿ‰$èW¶ÿÿ…Àu¾ÿÿÿÿÇ…þÿÿÇ…”þÿÿëz‹•„þÿÿ¾˜ÿÿÿ‰$èU‚ÿÿé-‹U½|ÿÿÿ‹…”þÿÿ‰|$BD‰$è̪ÿÿ…À‰Æx1‰D$EÔ‰…Œþÿÿ‰$è‡ÿÿ…À‰Æt6‹•ŒþÿÿÇD$‰$è‡ÿÿÿ…þÿÿƒ…”þÿÿ8‹E‹•þÿÿ;P<|éyEĉ…ˆþÿÿ‰$è§ÿÿ‹E´‹•ˆþÿÿ‰|$ÇD$‰D$ƒ†‰D$ ÇD$ÇD$‰$è_µÿÿ…Àt.‹…ˆþÿÿ¾˜ÿÿÿ‰$èxÿÿ‹•ŒþÿÿÇD$‰$èw†ÿÿébÿÿÿ‹E }àÇEà‰$èu²‹U ‰|$‰T$@‰D$‹EȉD$‹EĉD$ ƒ†‰D$‹…Œþÿÿ‰$è:®ÿÿ…À‰Æt$‹•ˆþÿÿ‰$èþ€ÿÿ‹…ŒþÿÿÇD$‰$éèþÿÿ‹•ŒþÿÿEä‰|$ ½ þÿÿ‰D$ÇD$‰|$‰$è¿Çÿÿ…À‰Æt1‹…ˆþÿÿ‰$è©€ÿÿ‹•ŒþÿÿÇD$‰$訅ÿÿ‰<$轉ÿÿé‹þÿÿ‹…ŒþÿÿÇD$‰$è……ÿÿ‹•ˆþÿÿ‰$èb€ÿÿ‹…„þÿÿ‰$èT€ÿÿ…öu-‹…äþÿÿ=Èt=œ¾÷ÿÿÿ¸ÑþÿÿEð… þÿÿ‰$èU‰ÿÿĬ‰ð[^_ÉÃU‰åWVSè[ƒìl‹u ÇEäÇ$èV°ÇE´˜ÿÿÿ…À‰E°„Jlj4$èþ°@‰$è-°…À‰Çt#‹U‰$èä°@‰$è°…À‰E¬u‰<$è(¯‹E°‰$è¯ÇE´˜ÿÿÿéó‰t$‰<$蟰‹U‹E¬‰T$‰$è°‹“O®‰$è °Eà‰D$‹E‰$èš1Ht8‰<$èÈ®‹U°‰$è½®‹E¬‰$è²®‹“O®‰$èÆ¯ÇE´œÿÿÿéz‹E‰t$‰D$‹Eà„‰$èºnÿÿ…Àu8‰<$èq®‹U°‰$èf®‹E¬‰$è[®‹“O®‰$èo¯ÇE´‘ÿÿÿé#‰D$‹E ‰$è‡zÿÿ…À‰Æt‹P8…Òt8‰<$讋U°‰$讋E¬‰$讋“O®‰$è¯ÇE´“ÿÿÿéÏÇ@8Eä‹M‰$‹U‹EèY÷ÿÿ…À‰E´t‰<$èí‹E°‰$踭‹U¬‰$é|Ç$dè}®…À‰E¨u<‹Eä‰$è ®‰<$臭‹U¬‰$è|­‹E°‰$èq­‹“O®‰$è…®éAþÿÿ‹Eä‰$è÷®@‰D$ƒ;ƒ‰D$‹E¨‰$覮Ç$Hè ®…À‰E¤„°‹U°Ç‹U¬‰x ‰P‹U¨‰‹U¤‹Eä‰B‹E ‰D$‰ÐƒÀ‰$舮‹F,‹U¤‰B<@‰F,‹E°uÀ‰B@‹E‰BDƒ' ‰T$‰D$‰4$è5¬ƒ½úÿÿ‰D$‰4$è(¬ÇD$‰4$謋ƒ®ÇD$‰t$‰$謅À‰E´tM= uÇE´˜ÿÿÿ‹U°‰$è`¬‰<$èX¬‹E¬‰$èM¬‹U¤‰$èB¬‹Eä‰$è´¬‹E¨‰$è,¬‹ƒO®‰$è@­‹E´ƒÄl[^_ÉÃU‰åWVSè[ƒìl‹u ‹}Ç$èάÇE°˜ÿÿÿ…À‰E¬„blj4$èv­@‰$襬…À‰E¨t#‰<$è^­@‰$謅À‰E¤u"‹E¨‰$蟫‹E¬‰$蔫ÇE°˜ÿÿÿé ‹E¨‰t$‰$è­‹E¤‰|$‰$è­‹ƒÃª‰$胬Eä‰D$‹E‰$è.Ht;‹E¨‰$è<«‹E¬‰$è1«‹E¤‰$è&«‹ƒÃª‰$è:¬ÇE°œÿÿÿ鎋Eä‰t$‰|$„‰$è1kÿÿ…Àu;‹E¨‰$è媋E¬‰$èÚª‹E¤‰$èϪ‹ƒÃª‰$èã«ÇE°‘ÿÿÿé7‰D$‹E‰$èûvÿÿ…À‰Æt‹H8…Ét;‹E¨‰$莪‹E¬‰$胪‹E¤‰$èxª‹ƒÃª‰$茫ÇE°“ÿÿÿéàÇ@8‹E‰$è«…À‰E´u;‹E¨‰$è:ª‹E¬‰$è/ª‹E¤‰$è$ª‹ƒÃª‰$è8«ÇE°›ÿÿÿéŒÇ$dèÚª…À‰E u?‹E¨‰$èì©‹E¤‰$èá©‹E¬‰$èÖ©‹E´‰$èHª‹ƒÃª‰$èߪé$þÿÿ‹E´‰$èQ«@‰D$ƒ€‰D$‹E ‰$è«Ç$Hècª…À‰Ç„«‹E¬Ç‹E¤‰G‹E¨‰G ‹E ‰‹E´‰G‹E‰D$G‰$è媋F,‰G<@‰F,‹E¬uĉG@‹E‰GDƒ›‰|$‰D$‰4$蕨ƒ1÷ÿÿ‰D$‰4$舨ÇD$‰4$è}¨‹ƒóªÇD$‰t$‰$èh¨…À‰E°tM= uÇE°˜ÿÿÿ‹E´‰$è=©‹E¬‰$赨‹E¨‰$誨‹E¤‰$蟨‰<$è—¨‹E ‰$茨‹ƒÃª‰$è ©‹E°ƒÄl[^_ÉÃU‰åWVSè[ƒì|‹u ‹}Ç$è.©ÇE¬˜ÿÿÿ…À‰E¤„Èlj4$èÖ©@‰$è©…À‰E t#‰<$辩@‰$èí¨…À‰Eœu"‹E ‰$èÿ§‹E¤‰$èô§ÇE¬˜ÿÿÿép‹E ‰t$‰$ès©‹Eœ‰|$‰$èd©‹E‰$葨…À‰E°u-‹E ‰$è­§‹Eœ‰$袧‹E¤‰$è—§ÇE¬›ÿÿÿéÇ$dè[¨…À‰E˜u&‹E ‰$èm§‹Eœ‰$èb§‹E°‰$èÔ§éSÿÿÿ‹E°‰$èë¨@‰D$ƒc|‰D$‹E˜‰$蚨‹ƒ#§‰$èF¨Eä‰D$‹E‰$èÔ)ÇE¬œÿÿÿH…<‹Eä‰t$‰|$„‰$è$gÿÿÇE¬‘ÿÿÿ…À‰E´„‰$è÷rÿÿ‰Çƒû‰E¨EĉE”éåÇ$H臧…À‰Æ„׋E¤ÿ‰F@‹E ‰F ‹Eœ‰F‹E˜‰‹E°‰FF‰|$‰$è ¨‹G,‰F<@‰G,‹E‰FD‹G,…ÀyÇG,‹E¨‰t$‰D$‹E”‰$踥ƒ‘óÿÿ‰D$‹E”‰$訥‹E”ÇD$‰$蚥‹E”ÇD$‰D$‹ƒS§‰$è‚¥…À‰E¬t= u)ÇE¬˜ÿÿÿë ‹E´‰|$‰$è|qÿÿ‰Ç…ÿ…ÿÿÿÇE¬‹E¤‹0…öu4‰$è²¥‹E˜‰$è§¥‹E°‰$見E ‰$è‘¥‹Eœ‰$膥‹ƒ#§‰$蚦‹E¬ƒÄ|[^_ÉÃU‰å츉]ôè[‰uø‹u‰}ü‹ƒ¤‰$èa¦U䉕hÿÿÿ‰T$‹FD‰$èó'H…¸‹F ‰D$‹F‰D$‹E䄉$èDeÿÿ…À„’‹H…É„‡V‰•lÿÿÿ‰D$‰$è4qÿÿ…À‰Ç„h…xÿÿÿ‰…dÿÿÿ‰D$‰<$èTdÿÿH…I‹F<;G0th‰t$ƒïÿÿÿuĉD$‰4$褃…ðÿÿ‰D$‰4$è¤ÇD$‰4$èö£‹ƒG¤ÇD$‰t$‰$èᣋ•dÿÿÿ‰$èpdÿÿéá‹“¤‰$èZ¥‹…dÿÿÿ‰D$‹F‰D$‹‰$è™ñÿÿ‹•dÿÿÿ‰$‰…pÿÿÿè.dÿÿ‹ƒ¤‰$è"¥‹•hÿÿÿ‰T$‹FD‰$è­&ƒø‰Çur‹F ‰D$‹F‰D$‹E䄉$èþcÿÿ…À‰…tÿÿÿtJ‹P…ÒtC‹•lÿÿÿ‰D$‰$èóoÿÿ…À‰Ât+‹@0@Iø‰z0ƒ½pÿÿÿ÷u‹…tÿÿÿ‹•lÿÿÿ‰D$‰$è\pÿÿ‰4$èŽîÿÿ‹ƒ¤‰$èy¤‹]ô‹uø‹}üÉÃU‰åWVSè[ƒìl‹u ‹}ÇEäÇ$è¤ÇE°˜ÿÿÿ…À‰E¨„Èlj4$訤@‰$è×£…À‰E¤t#‰<$è¤@‰$è¿£…À‰E u"‹E¤‰$èÑ¢‹E¨‰$èÆ¢ÇE°˜ÿÿÿép‹E¤‰t$‰$èE¤‹E ‰|$‰$è6¤Eä‹M‰$‹U‹Eèìÿÿ…À‰E°t&‹E¤‰$èv¢‹E ‰$èk¢‹E¨‰$è`¢éÇ$dè+£…À‰Eœu&‹E¤‰$è=¢‹E ‰$è2¢‹Eä‰$褢éQÿÿÿ‹Eä‰$軣@‰D$ƒT‹•ôþÿÿƒ(e‹üþÿÿ‰D$‰T$‰ $蜋Uä‹üþÿÿ‹E‰<$è æÿÿ…Àt!‹…üþÿÿ‰$è]ÿÿ‹ƒéž‰$臛逋•ÿÿÿ‹üþÿÿ‹B ‰AH‹B‰J ÿB‰…Tÿÿÿ‹B‰L$‰…Xÿÿÿ…Tÿÿÿ‰…ðþÿÿ…\ÿÿÿ‰$è²›‹Eà‹P‰•ÿÿÿ‹p‹ƒéž‰$蛋ðþÿÿ‰t$Ç$‰L$ÿ•ÿÿÿ‹]ô‹uø‹}üÉÃU‰å옉]ôè[‰uø‹u ‰}üÇEà ÇD$ÇD$‰4$èêsÿÿ…ÀuÇD$ÇD$‰4$èÎsÿÿ…Àt‰t$ÇD$é‘EÔ‰D$ÇD$‰4$è¢sÿÿ…Àt‹E؃ø)v‹U‰t$ÇD$œ‰$èÏé‰D$‹EÔU‰U€}¼‰$‰D$èõ™‹E؉<$ÆDèSiÿÿ‹F‰D$‹F‰<$‰D$èŠhÿÿ…Àt‰t$ÇD$ô‹E‰$뜋“˜‰$èê™E܉D$Eä‰$è©Ht$‹E‰t$ÇD$œ‰$è6‰<$èiÿÿés‹E¼‰D$‹EÜ„‰$èYÿÿ‰<$‰E„èßhÿÿ‹}„…ÿt‹U„‹J…Ét‹E€‰T$‰$èdÿÿ…À‰Çu‹U‰t$ÇD$œ‰$èÊé‹EÜ‹€ƒøÿt$‹U„;B}‹E‰t$ÇD$ô‰$è˜éÀỦ•|ÿÿÿ‰T$ÇD$‰4$è&rÿÿ…ÀtMEà‰D$ ƒn‰D$‹EЉD$‹Ẻ$èÔÿÿƒøt%ƒ,n‰D$‹…|ÿÿÿ‰$èteÿÿƒøÀ ‰Eà‹EÜ‹€”ƒøÿt‹Uàƒúÿt9Ð}‰Eàƒ}àÿu ÇG4ëÇ$è™Eà‰G4‹Uà‰ù‹E‰4$è¼âÿÿ…Àt‹U„‰<$‰T$èdÿÿ‹ƒ˜‰$è9˜‹]ô‹uø‹}üÉÃU‰å숉]ôè[‰uø‹u ‰}üÇD$ÇD$‰4$è(qÿÿ…ÀuÇD$ÇD$‰4$è qÿÿ…Àt‰t$ÇD$é—E؉D$ÇD$‰4$èàpÿÿ…Àt‹E܃ø)v‹U‰t$ÇD$œ‰$è é+‰D$‹EØUœ‰U”‰$‰D$è6—‹EÜÆDœEȉE‰$èŽfÿÿ‹F‹U‰D$‹F‰$‰D$èÂeÿÿ…Àt‰t$ÇD$ô‹E‰$ë–‹“¶•‰$è"—Eä‰D$Eà‰$èáHt$‹E‰t$ÇD$œ‰$èn‹U‰$è;fÿÿëv‹EȉD$‹E䄉$è:Vÿÿ‹U‰$‰Çèfÿÿ…ÿt‹G…Àt‹E”‰|$‰$èÙaÿÿ…Àu‰t$ÇD$œë‹E”‰|$‰$èRbÿÿ‰t$ÇD$È‹U‰$è닃¶•‰$è`–‹]ô‹uø‹}üÉÃU‰åƒìh‰]ô‰uø1öè[ƒúÿ‰}ü‰×‰EĉMÀ„Ç$4¾˜ÿÿÿèÖ•…À‰E¼„Ç$è¿•…À‰E¸„Ó‹UÀuÈ‹E¼‰T$‰$è]–‹U¼ÇB,‹UÀÇD$ÿ‹B0‰D$‹E¼ƒÀ0‰$èL–‹E¼‰¸0‹U¸‹EĉB‹E¼‰B ƒ§ ‰T$‰4$‰D$èä“‹ƒ”‰4$‰D$èד‰4$ÇD$èÌ“‹E¸‰t$ ÇD$ÇD$ƒÀ‰D$Gö‰D$‹ƒ×“‰$輓…À‰Æt‹U¸‰$蔋E¼‰$èú“ë ‹U¸‹B‹UÀ‰B4‰ð‹]ô‹uø‹}üÉÃU‰å옉]ôè[‰uø‰ÆE ‰}ü‰×‰M”‰4$‰E‰D$èR•‰4$‰D$èrŒÿÿ…À‰Æ…ÑE؉EŒ‰$èÞcÿÿƒ?g‰D$‹EÇEä‰|$ÇD$‰D$ƒFh‰D$ ‹EŒÇD$ÇD$‰$舗ÿÿ…À‰Æt ‹EŒ‰$è§cÿÿëg‹E”ÇD$ÇD$ ‰D$‹E܉D$‹E؉D$‹E‰$èT¬ÿÿ‰Æ‹EŒ‰$èhcÿÿ…öt ‹E”‰$è‹lÿÿë‹E”xDÈt ‰$¾Òþÿÿèplÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åW‰ÇVS쬋Eè[…Ò‰•”þÿÿ‰þÿÿÇu Ç$¾˜ÿÿÿèX“…À‰…”þÿÿué÷‹…”þÿÿ‹Bÿƒø w ÇD$ë…Òx‰T$ƒrX‰D$E¯‰$裓ëÇE¯infiÇE³niteÆE·•tÿÿÿ‰•ˆþÿÿ‰T$‰<$讓‰<$‰D$èΊÿÿ…À‰Æ…~}ȉ<$è=bÿÿ‹•þÿÿÇEÔ…Òt^E¯‹•ˆþÿÿ‰D$$ƒ#g‰D$ ‹…þÿÿÇD$‰T$ÇD$‰D$ƒf‰D$ƒ4g‰D$ ÇD$‰<$èÆ•ÿÿé„E¯‰D$4ƒ#g‰D$0ƒ=g‰D$,ƒLg‰D$(‹ƒ“‘·ÇD$ÇD$ÇD$‰D$$ƒñV‰D$ ‹ƒc‘‰<$‰D$ƒOg‰D$‹…ˆþÿÿ‰D$ƒbg‰D$ è=•ÿÿ…À‰Æ…v‹EÌ•˜þÿÿ‰•Œþÿÿ‰T$ÇD$‰D$‹EÈÇD$ ‰D$‹…ˆþÿÿ‰$èªÿÿ‰<$‰Æèaÿÿ…öt‹•Œþÿÿ‰$é½ÜþÿÿÈt‹…Œþÿÿ¾Óþÿÿ‰$èjÿÿéú‹•ŒþÿÿEà‰D$ÇD$‰$è¢jÿÿ…Àt/‹Eä…Àt(‹…Œþÿÿ}؉|$ÇD$‰$èzjÿÿ…Àt‹UÜ…Òu ‹•Œþÿÿ‰$ëp‹…”þÿÿ‰T$‰D$ ƒþf‰D$‹E؉$èxÿÿƒøt"ƒ g‰D$‰<$è¼]ÿÿ…Àu)‹•”þÿÿÇÿÿÿÿ‹Eä‰D$‹Eà‰$è ]ÿÿ‹U…À‰u,ë‹…Œþÿÿ‰$èIiÿÿ¾ÿÿÿë#‹•Œþÿÿ¾˜ÿÿÿ‰$è/iÿÿë‹…Œþÿÿ‰$èiÿÿĬ‰ð[^_ÉÃU‰åWVSè[EäìL‰…Äþÿÿ…ÌþÿÿÇEä}¨‰…Àþÿÿ‹ƒމ$èQ‹…Äþÿÿ‰D$‹E‰$èÜ…Àuv‹Uä‹‚˜…Àte‰|$‰$èbÿÿƒø‰Æuk‹Eä‰|$˜‰$èƒcÿÿ‹ƒމ$èñ‹UÔ‹EØ‹Àþÿÿèßúÿÿ…Àu‹…Àþÿÿ‰$èUhÿÿ‰<$è§bÿÿégÿÿÿ1ö닃޾œÿÿÿ‰$èªë‹Uä‹‚˜‰$èîbÿÿ‹ƒމ$è‰ÄL‰ð[^_ÉÃU‰åWVSè[ìL‹³ ‰4$èa‹UE䉅Äþÿÿ‰D$‰$èé…À…«‹E ‰D$‹Eä‹€˜‰$ècÿÿ…Àu‰4$¿“ÿÿÿèé«U¨‰•Àþÿÿ‰T$‰$èà`ÿÿ‰4$èñŽ…Ìþÿÿ‹UÔ‰…¼þÿÿ‹EØ‹¼þÿÿèÓùÿÿ…À‰Çu‹•¼þÿÿ‰$èGgÿÿ‹…Àþÿÿ‰$è“aÿÿ‰4$诎‹•Äþÿÿ‹E‰T$‰$è:…Àt‰4$¿œÿÿÿ脎ë‹Eä‹U ˜‰T$‰$èïaÿÿ‰4$ècŽÄL‰ø[^_ÉÃU1À‰å¹ WVSè[ƒì|‹}üÇEä󫋳݋‰4$è Ž‹UEà‰E‰D$‰$èµ…Àt‰4$¿œÿÿÿèÿép‰4$èò‹ƒŒ‰$èËEä‹U‰$‹E 1Éèõùÿÿ‰4$1ö‰ÇèÊ…ÿÇE”…ò‹M‹E‰L$‰$èI…Àt¿œÿÿÿÇE”éË}Ðu¤‰<$ècF‰t$‰<$¿˜ÿÿÿèÑE‹UƒR‰t$‰D$‰$袋M ‰ $èÎ@‰$èýŒÇE”…À‰Ætr‹E ‰4$‰D$èŸÇ$<èÕŒ…À‰E”tP‰p0‹U”‹Eä‰B,‹M‰$‰L$èq‹E”Ç@4ÿÿÿÿ‹Uà‹M”‹‚˜‰A8‰Š˜‹E‹M”‹‹Eèuöÿÿ…À‰Çt‹Eä‰$è—‹‰4$è‹‹U”‰$è„‹‹ƒÝ‹‰$蘌‹ƒŒ‰$èvŒƒÄ|‰ø[^_ÉÃU‰åWVSè[윋} ‹ƒЉ$èbŒE䉅tÿÿÿ‰D$‹E‰$èê …Àt‹ƒЉ$è3ŒéÙ‹Eä‰|$‹€˜‰$èú_ÿÿ…À‰Æ„üEÀ‰D$‹F4‰D$‹ƒ Љ$èrŠ…Àu ‹Eĉ$è]ÿÿE„ÇF4ÿÿÿÿ‰4$‰…pÿÿÿ‰D$è¯]ÿÿ‰Æ‹ƒЉ$踋ƒþ…Uà‹M°‰$‹E´‹Uè¿÷ÿÿ‰Æ‹ƒЉ$è‹‹…tÿÿÿ‰D$‹E‰$è …Àt'‹ƒЉ$èd‹…öu ‹Eà‰$è3оœÿÿÿ飅öuo‹Eä‰|$‹€˜‰$è_ÿÿ…À‰Çu.‹Eà‰$èÿ‰‹…pÿÿÿ‰$èô]ÿÿ‹ƒо“ÿÿÿ‰$è‹ëV‹@,‰$èщ‹Eà‰ù‰G,‹E‹‹Eè‰ôÿÿ…À‰Æt‹Eä‰|$˜‰$èH^ÿÿ‹…pÿÿÿ‰$è—]ÿÿ‹ƒЉ$訊Ĝ‰ð[^_ÉÃU‰åƒìH‰}ü‹}‰]ô‰uøè[‹w †0‰D$‰t$‹G‰$èçýÿÿ…À‰F,tEƒø“t@ƒøœuNë9‰4$èLŠë/‹Eä‹P‰UÔ‹p‹ƒˆ‰$è0Љt$‹G Ç$ ‰D$ÿUÔ‰<$è0[ÿÿ‹]ô‹uø‹}üÉ˳ˆ‰4$èõ‰Eä‰D$‹G‰$è …Àuë˜U‰å츉]ôE¸è[‰uø‹u ‰}ü‹}‰D$ÇD$‰4$èÚbÿÿ…À„â‹E¸ÇD$‰4$‰EÀ‹E¼‰EÄEȉD$è¯bÿÿ…Àt(Eà‰D$ ƒx]‰D$‹ẺD$‹Eȉ$è]pÿÿƒøt‰t$ÇD$‰<$è¿é¯E°‰…lÿÿÿ‰D$ÇD$‰4$èMbÿÿ…ÀtÆUЉ•hÿÿÿ‰T$ÇD$‰4$è,bÿÿ…Àt¥ƒû\‰D$‹…lÿÿÿ‰$èVUÿÿ…Àu‹•hÿÿÿƒ}]‰D$‰$è:Uÿÿ…Àt‰t$ÇD$œéhÿÿÿ‰4$è Âÿÿ„À„Lÿÿÿ‹†¤…À„>ÿÿÿE܉D$‹†˜‰$è%ˆ…À…!ÿÿÿ‹ƒg‡‰$ènˆUØE䉕dÿÿÿ‰T$‰…`ÿÿÿ‰$è …Àt‰t$ÇD$œ‰<$è°éŸEÀ‰…\ÿÿÿ‰D$‹EØ‹€˜‰$è!\ÿÿ…À‰…pÿÿÿ…Û‹Mà…É…<‹“g‡‰$è釋ƒŸ‡‰$臋“g‡‰$èÒ‡‹…dÿÿÿ‹•`ÿÿÿ‰D$‰$èé …Àt0‰t$ÇD$œ‰<$苃Ÿ‡‰$è{‡‹“g‡‰$éã‹…\ÿÿÿ‰D$‹EØ‹€˜‰$èw[ÿÿ…À‰…pÿÿÿu'‰t$ÇD$œ‰<$èÅ‹“Ÿ‡‰$è&‡éŽ‹“Ÿ‡‰$臉t$‰<$½|ÿÿÿÇD$È芋…pÿÿÿ‰<$‰D$ès‡‹Eà‰E¨‹E܉E¬‹EØ‹P‰•tÿÿÿ‹p‹ƒg‡‰$èÒ†‰t$‰|$Ç$ ÿ•tÿÿÿë"‰t$ÇD$œ‰<$è$‹ƒg‡‰$虆‹E܉$èË…‹]ô‹uø‹}üÉÃU‰åƒì(‹UEð‰D$ Eô‰D$‹B`‰D$‹B\‰$èC‚ÿÿ‹Eð‰D$ ‹Eô‰D$‹E ‰D$‹E‰$èG¢ÿÿÉÃU‰åƒì‰uø‹u ‰}ü‹}‹Fƒøu@ÇD$ÇD$‰4$è3_ÿÿ…Àu‰u ‹uø‰}‹}üÉéùêÿÿ‰u ‹uø‰}‹}üÉé}äÿÿƒøu‰u ‹uø‰}‹}üÉé™íÿÿƒøu‰u ‹uø‰}‹}üÉéÎûÿÿ‰u‹uø‰}‹}üÇE õÉéÿÿÿèYU‰å#t ǃÀ9ÐuóÉÃèY1ÀU‰åƒ¹¿du·nÉÃèY1ÀU‰åƒ¹¢dÉ‘BmDÂÃèY¸U‰å‘Ås‹J@…ÉtƒÂ=Èuÿÿÿë=ÈtòHÉÃU‰åVSè[ƒìƒ»Idu"‹ƒÕrë ‹0‰$è·ƒ‰ð…ÀuðǃÕrƒÄ[^ÉÃU‰åÉéâ”ÿÿU‰åÉé"}ÿÿU‰åÉéõ›ÿÿU‰åÉé—’ÿÿU‰åÉé9ÿÿU‰åÉéw—ÿÿU‰åÉé€ÿÿU‰åÉé€ÿÿU‰åÉé…ÿÿU‰åÉé«ÿÿU‰åVƒì4‹u‹M …ö”Â…É”ÀÂu4‹E…Àt-‹E‰L$ÇD$‰4$‰D$Eô‰D$ è¨ÿÿ…À~ ¸”ÿÿÿ븛ÿÿÿƒÄ4^ÉÃUèY‰å‹E‹„™r‹@ÉÃU¸Œÿÿÿ‰åì8‰]ôè[‰uø‰}üƒ»1c…‹E…À„‹U¶„À„ó‹E …Àt‹E…Àu‰4$è¬p¸›ÿÿÿë!‰4$èp‹E ‰D$‹E‰D$‹E‰$èäÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒìH‰]øè[‰uüÇEôƒ»ºO…³ÚW‰4$è>pEô‰D$‹E‰$èÖñÿÿ…Àt‰4$è%p¸œÿÿÿéÍ‹E …Àt‹E…Àu‰4$èp¸›ÿÿÿé­‰4$èóoÇ$Lè¡o‰Æ¸˜ÿÿÿ…ö„ŠÇ‹E‰F‹E ‰D$† ‰$è/p‹E‰†<‹E‰†8ƒ4ïÿÿ‰t$uÔ‰D$‰4$èãm‹ƒúm‰4$‰D$èÖmÇD$‰4$èËmƒÚZÇD$‰t$‰$è¶m1À‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»„Nuc³¤V‰4$è oEô‰D$‹E‰$è¤ðÿÿ…Àt‰4$èón¸œÿÿÿë0‹U …Òu‰4$èÝn¸›ÿÿÿë‰4$èÎn‹E ‰D$‹E‰$è@ßÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»òMu³V‰4$èznEô‰D$‹E‰$èðÿÿ…Àt‰4$èan¸œÿÿÿëL‹E …Àt‹E…Àt‹M…Éu‰4$è=n¸›ÿÿÿë(‰4$è.n‹E‰D$ ‹E‰D$‹E ‰D$‹E‰$è¸ßÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åVSè[ƒì@ÇEôƒ»HM…³hU‰4$èÌmEô‰D$‹E‰$èdïÿÿ…Àt‰4$è³m¸œÿÿÿéæ‹E …Àt‹Eƒ}ÿ•Â…ÀžÀ„Ðu‹E…Àu‰4$è€m¸›ÿÿÿ鳉4$ènmÇ$Lèm‰Æ¸˜ÿÿÿ…ö„Ç‹E‰F‹E ‰D$† ‰$èªm‹E‰F‹E‰†<‹E‰†8ƒÂìÿÿ‰t$uÔ‰D$‰4$èXk‹ƒˆk‰4$‰D$èKkÇD$‰4$è@kƒhXÇD$‰t$‰$è+k1ÀƒÄ@[^ÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»úKuN³T‰4$èŒlƒ} ÿ|Eô‰D$‹E‰$èîÿÿHt‰4$èdl¸œÿÿÿë‹Eô‹U ‰”‰4$èIl1À‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»}KuN³S‰4$èlƒ} ÿ|Eô‰D$‹E‰$è—íÿÿHt‰4$èçk¸œÿÿÿë‹Eô‹U ‰‰4$èÌk1À‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»Ku}³ S‰4$èˆkEô‰D$‹E‰$è íÿÿ…Àt‰4$èok¸œÿÿÿëJ‹U ¸…ÒOE ‰E ‹E…Àu‰4$èHk¸›ÿÿÿë#‰4$è9k‹E‰D$‹E‰D$‹E ‰$è%ëþÿ1À‹]ø‹uüÉÃU‰åƒìx‰]ôè[‰uø¾Œÿÿÿ‰}ü‹} ÇE䃻YJ…ëƒyR‰E´‰$èÙj‹EUä‰U°‰T$‰$èdìÿÿHt‹U´f¾œÿ‰$è­jé®…ÿ¸Nø‹E䉸t‹E´‰$èŠj‹U‰|$ÇD$ÇD$ÇD$ÇD$ ÇD$‰T$Ç$èóþÿ…À‰Æ…GÇ$¾˜ÿÿÿèêi…À‰E¬„+Ç$èÓi…À‰E¨u ‹E¬‰$éû‹U¬‰:‹U‹E¨‰P‹U¬‰P ‹E´‰$èíi‹U°‹E‰T$‰$è{ëÿÿHt+‹U´¾œÿÿÿ‰$èÃi‹E¨‰$è–h‹U¬‰$è‹h鮋E¨uĉ4$‰D$ƒ‰D$èãg‹ƒÝh‰4$‰D$èÖg‰4$ÇD$èËg‹E¨‰t$ ÇD$ÇD$ƒÀ‰D$‰øÁèøÑøƒè‰D$ƒÙQ‰$è²g…À‰Æt#‹U´‰$èi‹E¨‰$èðg‹U¬‰$èågë ‹E´‰$èúh‰ð‹]ô‹uø‹}üÉÃU‰åVƒì‹u‹F ‹‰D$‹F‰$è¹ýÿÿ‰uƒÄ^Ééß9ÿÿU‰åƒì(‰uø‹u‰]ôè[‰}üFÿ=Æw »?W‹·…Àt‰$èig1ÀǷ븜ÿÿÿ‹]ô‹uø‹}üÉÃUºŒÿÿÿ‰åƒìH‰]ôè[‰uø‰}üƒ»®G…ûƒÎO‰EÔ‰$è=h‹‹¦G…ÉtE‹EÔ‰$è#h‹E‰$è×ÿÿºœÿÿÿ…À…½‹EÔ‰$èhEä‰D$‹E‰$è“éÿÿƒøœuK‹EÔ‰$èÞgºœÿÿÿ醋w…öt‹F‰$è f‰4$è˜f‹EäÇD$‰|$œ‰$è´e‹E䜉$è³e…À‰Çu´‹EäÇD$œ‰$è‹e‹E‰$è£þÿÿ‹EÔǃ¦G‰$èPg1Ò‹]ô‰Ð‹uø‹}üÉÃU‰åƒìX‰]ôè[‰uø¾Œÿÿÿ‰}üÇE䃻„F…W»¤N‰<$è g‹ƒ€F…Àu‰<$f¾œÿèïfé.‰<$¾œÿÿÿèÝf‹E‰$èÆ²ÿÿ…À…‰<$èÇfEä‰EÔ‰D$‹E‰$èRèÿÿƒøœ„à‰<$èœf‹Eä‹€tÇD$ÇD$ÇD$‰D$‹EÇD$ ÇD$Ç$ÿÿÿÿ‰D$èïþÿ‰<$‰ÆèOf‹EÔ‰D$‹E‰$èÝçÿÿƒøœu‰<$¾œÿÿÿè&fëh‹Eä‹€|‰$èse‹Eä‹€€‰$èbe‹Eä‹€x‰$è.e‹EäÇD$œ‰$èôc‹E‰$è ýÿÿǃ€F‰<$è¼e‰ð‹]ô‹uø‹}üÉÃèYU‰å‹U;Tƒ<ÉÀƒàœÃU‰åW1ÿVƒì ‹E‰$èñd‰Eô‹E @‰Eð‹Eô‰|$‰$èÉd…À‰Æt-‹EðG‰4$‰D$è¼ÿÿÿ‰4$èÝd‰4$èÚd‰4$èÈdƒÿdu¾ƒÄ ^_ÉÃU‰åVƒì$Eô‰$èd…Àuk‹Uô‰Öë‹F¨u¨t‹F €xu xu‹6…öu݉$èÊc1À…öu8ë1‹@‰$èócÇD$´‰D$‹E‰$èIe‹EÆ€³‹Uô뿸—ÿÿÿƒÄ$^ÉÃU‰åƒì8‰]ôè[‰uø¾Œÿÿÿ‰}üÇE䃻áC»Lu<‰<$f¾œÿègdEä‰D$‹E‰$èõåÿÿHu} }f¾þ‹E ¾‰ƒåC‰<$è*d‰ð‹]ô‹uø‹}üÉÃU¹Œÿÿÿ‰åƒì8‰]ôè[‰uø‰}üƒ»[C…‹E±›‹}…À”Â…ÿ”ÀÂ…»{K‰<$èÓc‹³SC…öt‰<$è¼c¹ˆÿÿÿé׃›Rº‰Eä‹HB…ÉtƒÀúÈuí¸šÿÿÿ‹Uƒøš‰uëúÈBÿuéëâÇ$Ôè!c…À‰Æu‰<$èYc¹˜ÿÿÿëwÇ‹E‰F‹U †œdž˜‰VÇD$ÇD$‰$èBadžtdžÿÿÿÿdž”ÿÿÿÿ‹U‹‹UäǃSC‰4‚‰<$èÝb1É‹]ô‰È‹uø‹}üÉÃU‰åì‹M‰}ü‹} ‰]ôè[…ɔ…ÿ”ÀЉuø…•„Ò……,ÿÿÿ‰…$ÿÿÿ‰D$Eà‰D$ Eä‰D$ÇD$‰ $èì{ÿÿƒø‰Æ~¾”ÿÿÿëVuTƒ4‰D$‹…$ÿÿÿÇD$‰$è¿b‹Eä‰|$‰$èÏa‰Ç‹Eä‰$èú`…ÿtƒÿf”À¶ðtv•ë¾›ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åƒìH‰]ôè[‰uø¾Œÿÿÿ‰}üƒ»:A…“‹E f¾›ÿ…À‹E”Â…À”ÀÂ…wƒZI‰EÔ‰$è¨a‹ƒ6A…Àt‹UÔf¾ˆÿ‰$èŠaéH³zPº‰ð‹xB…ÿtƒÀúÈuí¸šÿÿÿ‹U ƒøš‰uë úÈBÿuéëâ‹EÔ‰$ëÇ$Ôèí`…À‰Çu‹UÔ‰$è"a¾˜ÿÿÿéÛ‹U ‹—x‰<†G ¾þÿÿLJЋM‰Uä‹U‰Eà…É•À…Ò•EÛ EÛuO‹E f¾›ÿ…ÀtD‹E f¾Šÿ‰$èDa=³w.‹U ‹Eà‰T$‰$è!a‹Uä‹E ‰T$‰$èÉýÿÿ…À‰Æ„¬‹U ‹‰$è¾÷ÿÿ銋Uܾ•ÿÿÿÇD$‰$è~^‹‡x‰$è’_‹U ‹‰$è†÷ÿÿ‹EÔ‰$è=`éûƒÀ.‰D$‹‡x‰$èb_‰‡€‹Uà‡„‰D$‰T$‹‡x‰$è©&ÿÿǃ6A‹EÔ‰$èæ_餶EÛlj‡Ð‹U‰W‹E—œLJtLJ|LJ€‰G‰U܉$ÇD$ÇD$è°]ƒõ.LJ˜LJÿÿÿÿLJ”ÿÿÿÿ‰D$‹‡x‰$è’^…À‰‡|… ÿÿÿéÂþÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åƒì8‰]ôè[‰}ü¿Œÿÿÿ‰uøƒ»s>…hƒ“F‰E܉$èý^‹ƒo>…Àt‹UÜf¿ˆÿ‰$èß^é9‹E‹} …À”Â…ÿ”ÀÂu‹u…öt‹E€8u‹UÜ¿›ÿÿÿ‰$è§^黳Mº‰ø‹HB…ÉtƒÀúÈuí¸šÿÿÿ‹Uƒøš‰uë úÈBÿuéëâ‹E܉$ëÇ$Ôè ^…À‰Æu‹U܉$è?^¿˜ÿÿÿ锋U‹‰4‡F džÐÇ‹U‰Eà‰$‰T$è€^‹E ‰F‹U†œdžtdž|dž€‰Vdžx‰EäÇD$ÇD$‰$èÝ[†xdž˜džÿÿÿÿdž”ÿÿÿÿ‹Uà‰D$‰$è²úÿÿ…À‰Çt%‹EäÇD$‰$è‚[‹U‹‰$è˜ôÿÿ驃.,‰D$‹†x‰$è\…À‰†|u@‹Uä¿•ÿÿÿÇD$‰$è6[‹†x‰$èJ\‹U‹‰$è>ôÿÿ‹E܉$èõ\ëRƒù+‰D$‹†x‰$è\‰†€‹Uà†„‰D$‰T$‹†x‰$èd#ÿÿǃo>‹E܉$è¡\‰ø‹]ô‹uø‹}üÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüƒ»Ò;…ÎEôuì‰t$‰$è4ÞÿÿHu ‹Eô‰$èõÿÿEð‰t$‰$èuÞÿÿ…Àu ‹Eð‰$èÂóÿÿƒRC‰$è­ZèÏ ÿÿƒòF‰$è†Zƒ2E‰$èxZƒ’J‰$èÒ[ƒòC‰$èØ[ƒÒJ‰$è¶[ƒ»Ò;u"‹ƒ^Jë ‹0‰$èœZ‰ð…Àuðǃ^JǃÒ;1À‹]ø‹uüÉÃU‰åƒìX‰]ôè[‰uø¾—ÿÿÿ‰}ü·} ƒ»Ý:„<‹ƒiY³ýB‰$è*ÿÿÇ$èô[‰$èœ[ÇD$‰4$è-[…À…AƒÝIÇD$‰$èûZ…À…#ƒIÇD$‰$èÝZ…À…‰4$èðZ‹E…Àt-‹E‰D$ƒ}C‰$èG[‹‹Ý:ƒJ …Ét3ëƒ}C‰$èõÿÿ…ÀtÖ‰4$èZ骉4$¾—ÿÿÿè‹ZéSǃÀ9Ðuó‰4$uÌènZ‰4$èšXÇD$ ‰4$èžXÇD$‰4$è˜XÇD$ ‰4$ètXÇD$ˆ‰4$è_XÇD$d‰4$èYXƒýE‰t$‰Eĉ$èqX…ÀtǃÝ:èZýÿÿ¾‹ÿÿÿ鱃=D‰t$‰$èBX…Àuу½G‰t$‰$è,X…Àu»‹ƒmYǃÝ:‰$èõ ÿÿ‹ƒeY‰$èû ÿÿ‹EĉD$ƒ]B‰$è÷W…À‰ÆtǃÝ:èÔüÿÿë3·Ç‰$èAÿÿ…À‰Æè¼üÿÿƒþÿǃÝ:uéNÿÿÿf‰ƒ1D1ö‰ð‹]ô‹uø‹}üÉÃU1ɉåWV‹uSè[»‡8‰ú‹ƒÂ9ðu‹DÏë Aƒù!uëƒ{/[^_ÉÃU¸›ÿÿÿ‰åVƒì‹U …Òt3‹E‰T$‰$èÕœÿÿ‰Æ¸”ÿÿÿ…öt‹E‰t$‰$è)Y‰4$è‡W1ÀƒÄ^ÉÃU‰åƒìH‰Eà‹E‰]ôè[…ɉ}ü‰×”Â…À”À‰uø‰Î¹›ÿÿÿ…ô‹…À……Ç$ÐèX…À‰EÜ„΋Mà…Ét‹E‰t$‰t$‰D$ ƒ/ë‹E‰t$‰t$‰D$ ƒ//‰D$‹E܉$èSX‹E܉|$‰$èŸW‰Æ‹E܉$èÊV…öt ƒþf¹•ÿÿÿugë`‹U 1É…Òt\‹‰$èBW‰Eä‹E ‰D$‹‰$èèV‰Æ‹E…Àt‹E‰D$‹‰$èÓV‰4$‰D$èþV‹Eä‰t$‰$èïV1É빘ÿÿÿ‹]ô‰È‹uø‹}üÉÃU‰åƒìh‰]ôè[…Ò‰}ü‰×”…ɉEÈ”À‰uø‰Î…#Ç$ÐèêV…À‰EÄ„ ‹EÈ…ÀtƒÑ-‰|$‰t$ ‰|$ë‰|$ƒþ-‰t$ ‰|$‰D$‹Eĉ$è4WEä‰D$‹Eĉ$è}V…Àt‹Eĉ$è¦U骋Eĉ$è–U‹Eä…À„”‹E…ÀŽ„‹u ÇEЋEƒÀ…ö‰EÌ‹E‹8tM‹Eä‰$èôU‰t$‰EÔ‹Eä‰$èœU…ÿ‰Æt‹Eä‰|$‰$èŒU‰4$‰D$è·U‹EÔ‰t$‰$è¨UÿEЋEÐ9Et‹ẼÀ‰E‹EÌ‹0놋Eäë1À‹]ô‹uø‹}üÉÃU‰åƒì(E‹U‰Eô‹M ‰D$‹E‰D$‹E‰$1ÀèxþÿÿÉÃU‰åƒì(E‹U‰Eô‹M ‰D$‹E‰D$‹E‰$¸èIþÿÿÉÃU‰åV‹E‹u‹U‹M ‰E‹E‰u‰E ¸^ÉéèüÿÿU‰åV‹E‹u‹U‹M ‰E‹E‰u‰E 1À^ÉéÃüÿÿU‰åWVSè[ƒì|uŸÇD$I‰4$ƒ&,‰D$èüT‹M º›ÿÿÿ…É„¥‹E‹…Òu‰D$‰4$è¹Tº˜ÿÿÿ…À…ƒ‹U‹‰$èrT‹U‰E”ƒ,‰D$‹‰$èT‹U‰Ç‹E ‰D$‹‰$èüS‰Æ‹E…Àt ‹E‹U‰D$‹‰$èäS‰4$‰D$èT‰t$‰<$èT‹E”‰|$‰$èôS1ÒƒÄ|‰Ð[^_ÉÃU‰å옉]ôè[‰uøu—‰}üÇD$I‰4$ƒ5+‰D$èTEà‰D$‰4$èÛS…À…Ë‹u…öŽÀ‹u E‰EäÇE„éš‹Uä…öB‰Eä‹:t}‹Eà‰$èlS‰…|ÿÿÿƒ'+‰D$‹Eà‰$è S‰t$‰E€‹Eà‰$èùR…ÿ‰Æt‹Eà‰|$‰$èéR‰4$‰D$èS‹E€‰t$‰$èS‹E€‰D$‹…|ÿÿÿ‰$èðR‹UäB‰Eä‹2ÿE„‹E„9E…Zÿÿÿ‹Eàë1À‹]ô‹uø‹}üÉÃU‰å‹EÇ@Ç@Ç#EgÇ@‰«ÍïÇ@þܺ˜Ç@ vT2ÉÃU‰åW‰ÏV1öƒì‰Eô‰Uðë)‹Uð‹Môò‹ñƒÆˆ‹ÁèˆA‹ÁèˆA‹ÁèˆA9þrÓƒÄ^_ÉÃU‰åWV¾ìà‰E˜‹J‰…(ÿÿÿ‹E˜ƒÀ‰Eœ‹E˜‹@‰E¨‹E˜ƒÀ‰E ‹E˜‹@‰E¬‹E˜ƒÀ ‰E¤‹E˜‹x E¸‰…,ÿÿÿ¶Aý¶QüÁà ¶AþÁà ¶AÿƒÁÁà ‹…,ÿÿÿ‰T°üFƒþu΋E¨‹U¨#U¬÷Ð!ø ‹…(ÿÿÿU¸Œx¤j׋U¨ÁÉM¨‰È!Ê÷Ð#E¬ ÂU¼¼V·Çè‰ÊÁÏ<9‰ø!ú÷Ð#E¨ ‹E¬UÀ´Ûp $‰úÁÎ47‰ð!ò÷Ð!È Â‹E¨UÄ”îνÁ‰ðÁÊ !ЉE”‰Ð÷Ð!ø E”‹E”EÈŒ¯|õ‰ÐÁÉ !ȉE‰È÷Ð!ð E‹EE̼*ƇG‰ÈÁÏ<9!ø‰EŒ‰ø÷Ð!Ð EŒ‹EŒEдF0¨‰øÁÎ47!ð‰Eˆ‰ð÷Ð!È Eˆ‹EˆEÔ”•Fý‰ðÁÊ !ЉE„‰Ð÷Ð!ø E„‹E„EØŒؘ€i‰ÐÁÉ !ȉE€‰È÷Ð!ð E€‹E€Eܼ¯÷D‹‰ÈÁÏ<9!ø‰…|ÿÿÿ‰ø÷Ð!Ð …|ÿÿÿ‹…|ÿÿÿEà´±[ÿÿ‰øÁÎ47!ð‰…xÿÿÿ‰ð÷Ð!È …xÿÿÿ‹…xÿÿÿE䔾×\‰‰ðÁÊ !Љ…tÿÿÿ‰Ð÷Ð!ø …tÿÿÿ‹…tÿÿÿEèŒ"k‰ÐÁÉ !ȉ…pÿÿÿ‰È÷Ð!ð …pÿÿÿ‹…pÿÿÿE켓q˜ýÁÏ<9‰ø÷ЉE´‰È!ø‰…$ÿÿÿ‹E´!Ð …$ÿÿÿ‹…$ÿÿÿEð´ŽCy¦ÁÎ47‰ð÷ЉE°‰ø!ð‰…$ÿÿÿ‹E°!u´!È …$ÿÿÿ‹…$ÿÿÿEô”!´I‰øÁÊ !Ð E´E¼!U°Œb%ö‰ðÁÉ !È E°Eм@³@À‰ÐÁÏ<9!ø‰…dÿÿÿ‰Ð÷Ð!È …dÿÿÿ‹Eä…dÿÿÿ´QZ^&‰ÈÁÎ47!ð‰…`ÿÿÿ‰È÷Ð!ø …`ÿÿÿ‹E¸…`ÿÿÿ”ªÇ¶é‰øÁÊ !Љ…\ÿÿÿ‰ø÷Ð!ð …\ÿÿÿ‹EÌ…\ÿÿÿŒ]/Ö‰ðÁÉ !ȉ…Xÿÿÿ‰ð÷Ð!Ð …Xÿÿÿ‹Eà…Xÿÿÿ¼SD‰ÐÁÏ<9!ø‰…Tÿÿÿ‰Ð÷Ð!È …Tÿÿÿ‹Eô…Tÿÿÿ´æ¡Ø‰ÈÁÎ47!ð‰…Pÿÿÿ‰È÷Ð!ø …Pÿÿÿ‹EÈ…Pÿÿÿ”ÈûÓç‰øÁÊ !Љ…Lÿÿÿ‰ø÷Ð!ð …Lÿÿÿ‹EÜ…LÿÿÿŒæÍá!‰ðÁÉ !ȉ…Hÿÿÿ‰ð÷Ð!Ð …Hÿÿÿ‹Eð…Hÿÿÿ¼Ö7ÉÐÁÏ<9!ø‰…Dÿÿÿ‰Ð÷Ð!È …Dÿÿÿ‹EÄ…Dÿÿÿ´‡ Õô‰ÈÁÎ47!ð‰…@ÿÿÿ‰È÷Ð!ø …@ÿÿÿ‹EØ…@ÿÿÿ”íZE‰øÁÊ !Љ…<ÿÿÿ‰ø÷Ð!ð …<ÿÿÿ‹Eì…<ÿÿÿŒé㩉ðÁÉ !ȉ…8ÿÿÿ‰ð÷Ð!Ð …8ÿÿÿ‹EÀ…8ÿÿÿ¼ø£ïü‰ÐÁÏ<9!ø‰…4ÿÿÿ‰Ð÷Ð!È …4ÿÿÿ‹EÔ…4ÿÿÿ´Ùog‰ÈÁÎ47!ð‰…0ÿÿÿ‰È÷Ð!ø …0ÿÿÿ‹Eè…0ÿÿÿ”ŠL*‰ðÁÊ 1Ð1øEÌŒB9úÿ‰ÐÁÉ 1È1ðEؼöq‡‰ÈÁÏ<91ø1ÐEä´"am‰øÁÎ471ð1ÈEð” 8åý‰ðÁÊ 1Ð1øE¼ŒD꾤‰ÐÁÉ 1È1ðEȼ©ÏÞK‰ÈÁÏ<91ø1ÐEÔ´`K»ö‰øÁÎ471ð1ÈEà”p¼¿¾‰ðÁÊ 1Ð1øEìŒÆ~›(‰ÐÁÉ 1È1ðE¸¼ú'¡ê‰ÈÁÏ<91ø1ÐEÄ´…0ïÔ‰øÁÎ471ð1ÈEДˆ‰ðÁÊ 1Ð1øEÜŒ9ÐÔÙ‰ÐÁÉ 1È1ðEè¼å™Ûæ‰ÈÁÏ<91ø1ÐEô´ø|¢‰øÁÎ471ð1ÈEÀ”eV¬Ä‰øÁÊ ÷Ð Ð1ðE¸ŒD")ô‰ðÁÉ÷Ð È1ÐEÔ¼—ÿ*C‰ÐÁÏ÷Ð<9 ø1ÈEð´§#”«‰ÈÁÎ÷Ð47 ð1øEÌ”9 “ü‰øÁÊ ÷Ð Ð1ðEèŒÃY[e‰ðÁÉ÷Ð È1ÐEļ’Ì ‰ÐÁÏ÷Ð<9 ø1ÈEà´}ôïÿ‰ÈÁÎ÷Ð47 ð1øE¼”Ñ]„…‰øÁÊ ÷Ð Ð1ðEØŒO~¨o‰ðÁÉ÷Ð È1ÐEô¼àæ,þ‰ÐÁÏ÷Ð<9 ø1ÈEдC£‰ÈÁÎ÷Ð47 ð1øE씡N‰øÁÊ ÷Ð Ð1ðEÈŒ‚~S÷‰ðÁÉ÷Ð È1ÐEä¼5ò:½‰ÐÁÏ÷Ð<9 ø1ÈEÀ´»Ò×*‰ÈÁÎ÷Ð47 ð1øEÜ(ÿÿÿ”‘Ó†ë‹E˜ÁÊ ‰‹Eœ‹U 2‹E¤8¸‹•,ÿÿÿÆDÿ@ƒøAuïÄà^_ÉÃU‰åWVƒì‹U‹u‹B‹U‰ÁÁâÁéЃá?9‰Fv ‹VB‰Vë‹}‹W‹E¾@)ÎÁèЋU‰B9us‹u‰Ê1À1ɃƉuôëM‹}1ÒƒÇù‰}ôë ‹} ¶ˆB9òrñ‹Uô~?‹EèÈöÿÿu ë‹E‰òƒÇ@ƒÆ@è³öÿÿ9}wëGÁ1Ò‰Á‹}‹u Uô)ÇÎ1É불 A9ùrôƒÄ^_ÉÃU¹‰åWVSè[ƒì,‹u }à‰øVèöÿÿ‹Fº8Áèƒà?ƒø7vºx)ƒà)‰T$‰D$‰4$èÙþÿÿÇD$‰|$‰4$èÅþÿÿ‹E¹‰òèÄõÿÿ¸ÆDÿ@ƒøYuõƒÄ,[^_ÉÃU‰åƒì(EðÇD$‰$èÌG‹EôiMð€–˜€A‹M‰ÂÁú@ÒÒ²‰‰QÉÃU‰åWV쀽”þÿÿu ‰<$ÇD$ ÇD$è4H‰<$ÇD$èfG…œþÿÿÇD$‰$è7G‰4$èÞôÿÿ‰|$‰4$ÇD$ èíýÿÿ‹E‰t$‰$è±þÿÿÄ€^_ÉÃU‰åƒì(‰]øè[‰uü‹u‹ƒ=>…Àu-Eè‰$èOÿÿÿ€M耋Eèǃ=>‰ƒ5>·Eìf‰ƒ9>‹ƒ5>‰·ƒ9>f‰F‹]ø‹uüÉÃU‰åSƒìD‹Uè[¶B‰D$0¶B‰D$,¶B ‰D$(¶B ‰D$$¶B ‰D$ ¶B ‰D$¶B ‰D$¶B‰D$·B‰D$·B‰D$ ‹‰D$ƒ©‰D$‹E ‰$èoGƒÄD[ÉÃU‰åWVSè[쌋ƒøD‰$èåF‹ƒp=…Àufǃt=ǃp=EȉE˜‹U˜‰$èþÿÿ‹ƒ|=‹“€=‹uÈ‹}̉E¸‹E¸‰U¼‹U¼1ð1ú Â…·ƒt=f=ÿw¾@f‰ƒt=·ƒt=‹U¸‹M¼ÇE¬‰E¨U¨M¬‹U¬‹E¨‰“€=U≃|=‰U¤‰$èNþÿÿ‹»\=…ÿt]‹ƒ„=‹“ˆ=·‹’=‹u¤‰E°‹ƒŒ=‰U´UÜüf‰M”‰EÜ·ƒ=‰×ÇE ¹f‰Eàó¦¸t ¶Fÿ¶Oÿ)È…Àt[‹³l=…öu2‹M˜‰ $èýÿÿ‹UÌ‹EȬРÁê ‰EÈ1ЉỦ$èFǃl=è¶Ef‰E”ë*fǃt=‰u¸‰}¼éÿÿÿ‹}´9}¬wr‹E°9E¨sfÿE”·U”‹}â·uæ‹E‰Uœ‰Ñ‹U¨‰}Öf‰uÚ‰‹U¬‹E¨‰Ð1Ò‹Uf‰B‹U¬‹E¨‰Ð1Ò‹UÁèf%ÿ€ÌˆJ á?ÁéƒÉ€f‰BˆJ‰z f‰r¶Eæ¶Mç¶Uâ¶uäˆE–‹ƒ\=ˆM—¶}ã¶MåˆUÇ…Àu‹E¨‹U¬Çƒ\=‰ƒd=‰“h=·Uœ‹E¨ˆ‹=‰ùˆ‹=f‰“’=‹U¬‰ƒ„=¶E–‰“ˆ=¶U—ˆƒ=¶ELj“‘=‰òˆ“Ž=‹U¬;“h=ˆƒŒ=r*w ‹M¨;‹d=rE¨áõƒU¬‹E¨‹U¬‰ƒd=‰“h=‹ƒøD‰$è)DÄŒ¸[^_ÉÃU‰å‹M ‹UV‹9t rJ¸ëH·Af9Buí·Af9Buã¶A8BuÚ¶A 8B uщ։ʹ¶B 8F r w¿FBIuð1Àë¸ÿÿÿÿ^ÉÃU‰åWVì¶E·u·M‹}ˆEç¶Ef‰uÞfÁÆ‹U f‰MÜfÁÁf‰uÞu€ˆEæ¶EÊf‰M܉U؈Eå¶E‰4$ˆEä¶EˆEã¶EˆEâ¶EˆEá¶EˆEàèûïÿÿE؉D$‰4$ÇD$èùÿÿ‹E ‰4$‰D$‹E‰D$èñøÿÿEè‰t$‰$èµùÿÿ‹U艋EìʉG‹Eð‰G‹EôfÁG‰‰G ·GfÁÀf%ÿ€Ì0f‰G¶Gƒà?ƒÈ€ˆGÄ^_ÉÃU‰åWVSìL‹E è[·p‹@fÁƉ$·öèÃA‰t$ ³Î‰D$ƒ ‰D$…Üþÿÿ‰…¼þÿÿ‰$è¾BU؉•Àþÿÿ‰$è”ÿÿEȉ…Äþÿÿ‰$èƒÿÿ‹U‰t$‰$è„A…À‰…Ôþÿÿ…ñ‹E‰t$‰$èXA…À‰Æ„‹‹•Àþÿÿƒ‰D$‰$èIÿÿ…À…k‹…¼þÿÿ‹•Àþÿÿ‰D$‰$è)ÿÿ…À…K‹…Àþÿÿ»À‰|$‰$è ÿÿ…À…+‹•Äþÿÿ‰|$‰$èïÿÿ…À…‹E‰$èA…À„‰t$‰$èñ@…À‰Ç…û‹EØ‹U‰D$‰$èž@Ç…Èþÿÿ…À„í‰D$‰4$è·@é•‹…ÔþÿÿÇD$‰$è’@‰$èž@…À‰Ç„’‰$è¯@…À‰Æ„‡E‰D$‰4$è|A‰4$‰D$èÀƒÿÿ…Àˆd‹U…Ò…Y‹E˜‹•Àþÿÿ‰D$‹E”‰$‰D$èzÿÿ…À…'ƒ‰D$‹…Àþÿÿ‰$èåÿÿ…À…‹•¼þÿÿ‹…Àþÿÿ‰T$‰$èÅÿÿ…À…ç‹E¤…Àt‹U €:/t=‹•Àþÿÿ³À‰t$‰$è–ÿÿ…À…¸‹…Äþÿÿ‰t$‰$è|ÿÿ…À…ž‹U ‹E¤‰T$‹•Àþÿÿ‰D$‰$è‘ÿÿ…Àu~‹E¤‰D$‹E ‰D$‹…Äþÿÿ‰$èqÿÿ…Àu^‹UØ‹EÜ€|ÿ/t'‹•ÀþÿÿƒÀÇD$‰D$‰$è@ÿÿ…Àu-‹U؉T$‰<$èO?…À‰Çu+‹…Äþÿÿ1ÿ‰$è¬ÿÿ‰…Èþÿÿë)¿˜ÿÿÿë ¿•ÿÿÿë¿”ÿÿÿÇ$è½>Ç…Èþÿÿ‹•Ôþÿÿ‰$è¹>‹…Äþÿÿ‰$è ÿÿ‹•Àþÿÿ‰$è’ÿÿ…ÿÇ…ÐþÿÿÇ…Ìþÿÿ…¥‹…Èþÿÿ‰$è•?…À‰Æt‹•Èþÿÿ»e€|ÿ/t»À‹E€8/‰<$”À¶ÀEè_?‹U‰$ÆèR?D‰$è~>…À‰…Ìþÿÿu¿˜ÿÿÿÇ…Ðþÿÿé*‹•Èþÿÿ‹…Ìþÿÿ‰T$‰$è?‹•Ìþÿÿ‰|$‰$èå>‹E‹•Ìþÿÿ‰D$‰$èÐ>‹¼þÿÿ‹ƒÁÿþþþ÷Ð!Â €€té‰Ð¿ŠÿÿÿÁè÷€€DÐADÈ‹…ÌþÿÿÒƒÙ+¼þÿÿ‰$qè—>Ç…ÐþÿÿÆþ³‡‹U1ÿÇhttpÇB://‹…¼þÿÿ‰$‰D$èB>‹•Ìþÿÿ‹E‰T$‰$è->‹U‰$èd=…À‰…Ðþÿÿt3‹•Ðþÿÿ‹E‰$‰D$ è>‹•Ìþÿÿ‰$‰D$‹…Ðþÿÿ‰D$è—jÿÿ‰Ç‹…Èþÿÿ‰$èL<‹•Ìþÿÿ‰$è><…ÿt‹…Ðþÿÿ‰$è©<ÄL‰ø[^_ÉÃUSN: ST: LOCATION: EXT:CACHE-CONTROL: max-age=RsdcDscsscSXcsscssccssdp:alivessdp:byebyeNTS: NT: :239.255.255.250QsssdcsdcsscsscsscSXcsscc"ssdp:discover"%s::upnp:rootdeviceupnp:rootdevice%s::%s%imax-age = %d%0HOST: %s:%d MX: %d ST: %s uuid:schemas:deviceuuid:%surn%suuid::urn::service:urn:device::all:rootdeviceuuid:deviceTypeUDNserviceserviceType239.255.255.250:1900CONTENT-TYPE: text/xml; charset="utf-8" Invalid ActionAction FailedInvalid Var%d
s:Client UPnPError EXT: RNsDsSXccsssssbBodyhttp://schemas.xmlsoap.org/soap/envelope/"%surn:schemas-upnp-org:control-1-0 %q%i ; ns = %s-SOAPACTION%sQueryStateVariableXML error RNsDsSXccsss*RNsDsSXccbbbbOut of memory%s:%s%0M-SOAPACTION:MAN: "http://schemas.xmlsoap.org/soap/envelope/"; ns=01 01-EnvelopeQueryStateVariableResponsereturnerrorCodeerrorDescriptionFaultdetailUPnPError SOAPACTION: "urn:schemas-upnp-org:control-1-0#QueryStateVariable"QsbcNssUccsss <%s:%s "#SOAPACTION: "qNssssbscUcbbbbbbbResponse qNssssbscUcbbb127.0.0.1ShutDownmserv start: bind failedserviceListserviceIdSCPDURLcontrolURLeventSubURLdevicerootURLBaseACCEPTACCEPT-CHARSETACCEPT-ENCODINGACCEPT-LANGUAGEACCEPT-RANGESCACHE-CONTROLCALLBACKCONTENT-ENCODINGCONTENT-LANGUAGECONTENT-LENGTHCONTENT-LOCATIONCONTENT-RANGECONTENT-TYPEDATEEXTHOSTIF-RANGELOCATIONMANMXNTNTSRANGESEQSERVERSIDSOAPACTIONSTTETIMEOUTTRANSFER-ENCODINGUSER-AGENTUSNGETHEADM-POSTM-SEARCHNOTIFYPOSTSUBSCRIBEUNSUBSCRIBE ()<>@,;:\"/[]?={}%ihttp%w/%w%L%c%d . %d %d : %R%c, chunked%x%L%c%c%s %S%w%c%s %S %ihttp%w/%w%L%c%d . %dhttp/%x %s/%s, UPnP/1.0, Portable SDK for UPnP devices/1.6.1 rb0 %xTRANSFER-ENCODING: chunked %zu%qdDATE: %s%s, %02d %s %d %02d:%02d:%02d GMT%sCONNECTION: close CONTENT-LENGTH: shcSERVER: USER-AGENT: ssX-User-Agent: HTTP/%d.%d %d ssc

%s%d %s%sNTcs. HTTP/ ssbsdsdcHOST: QsbcCONTENT-TYPE: //QsbcDCUcQsbcDCUTNcQsbcDCUTKcQsbcDCUTcQsbcGDCUcRange: bytes=%d-%d RSCBaudiovideoimageapplicationtextoctet-stream%s/%s,%qd%qdbytes=CONTENT-RANGE: bytes %qd-%qd/%qd CONTENT-RANGE: bytes 0-%qd/%qd trailerswbrtext/xmlindex.html/index.htmlLAST-MODIFIED: RTGKDstcSXcCcRKTDstcSXcCcRNTDstcSXcCcRTDstcSXcCcIbfIbbtext/htmlRTDSXcCcRNTGDstcSXcCc%itext%w/%wxml;/?:@&=+$,{}-_.!~*'()%2x<%s>%s TIMEOUT: Second-%dSID: redsonicRDSNXcsscsccSEQ: ssscsdccqsbbCONTENT-TYPE: text/xml CONTENT-LENGTH: %zu NT: upnp:event NTS: upnp:propchange CONTENT-TYPE: text/xml CONTENT-LENGTH: %ld NT: upnp:event NTS: upnp:propchange upnp:event%iSecond-%d%0Second-infiniteqsscUcTIMEOUT: Second-qsscssccNT: upnp:event/>CALLBACK: e:property%8.8x-%4.4x-%4.4x-%2.2x%2.2x-%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%s:%dhttp://://JanFebMarAprMayJunJulAugSepOctNovDecSunMonTueWedThuFriSatInternal Server ErrorNot ImplementedBad GatewayService UnavailableGateway TimeoutHTTP Version Not SupportedBad RequestUnauthorizedPayment RequiredForbiddenNot FoundMethod Not AllowedNot AcceptableProxy Authentication RequiredRequest TimeoutConflictGoneLength RequiredPrecondition FailedRequest Entity Too LargeRequest-URI Too LongUnsupported Media TypeRequested Range Not SatisfiableExpectation FailedMultiple ChoicesMoved PermanentlyFoundSee OtherNot ModifiedUse ProxyTemporary RedirectOKCreatedAcceptedNon-Authoratative InformationNo ContentReset ContentPartial ContentContinueSwitching Protocolsaifaiffaifcaiffaiffaiffasfx-ms-asfasxx-ms-asfaubasicavimsvideobmpbmpdcrx-directordibbmpdirx-directordxrx-directorgifgifhtahtahtmhtmlhtmlhtmljarjava-archivejfifpjpegjpejpegjpegjpegjpgjpegjsx-javascriptkarmidim3umpegurlmidmidimidimidimovquicktimemp2vx-mpeg2mp3mpegmpempegmpegmpegmpgmpegmpvmpegmpv2x-mpeg2pdfpdfpjpjpegpjpegjpegplghtmlplsscplspngpngqtquicktimeramx-pn-realaudiormimidrmmx-pn-realaudiortfrtfshtmlhtmlsmfmidisndbasicsplfuturesplashssmstreamingmediaswfx-shockwave-flashtartartclx-tcltextplaintiftifftifftifftxtplainulwbasicwavwavwaxx-ms-waxwmx-ms-wmwmax-ms-wmawmvx-ms-wmvwvxx-ms-wvxxbmx-xbitmapxmlxmlxslxmlzx-compresszipzipÈfòfgg!isDsJsVs´|€>0vœÿÿÿ?v›ÿÿÿUvšÿÿÿjv™ÿÿÿ~v˜ÿÿÿ“v—ÿÿÿ¦v–ÿÿÿ²v•ÿÿÿÊv”ÿÿÿÞv“ÿÿÿñv’ÿÿÿw‘ÿÿÿwÿÿÿ1wŽÿÿÿEwÿÿÿXwŒÿÿÿnw‹ÿÿÿ|w‰ÿÿÿw8ÿÿÿ¢w7ÿÿÿ·w6ÿÿÿËw5ÿÿÿÞw4ÿÿÿñw3ÿÿÿx2ÿÿÿxÔþÿÿ)xÓþÿÿ?xÒþÿÿ[xÑþÿÿyxqüÿÿ’x þÿÿ¨xþÿÿÀx€àà@‰à‰`Š€ ‹€ ŽPÄÈL €àŒ‹€Œs7 ‰â;Àôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô€€ €€€€€ €(€0€8€@€H€P€X€`€h€p€x€€€ˆ€€˜€ €¨€°€¸€À€È€ЀØ€à€è€ð€ø€ @HPX`hpx€ˆŒ”˜ ¤¨¬°´äìôü‚ ‚‚‚$‚,‚4‚<‚D‚L‚T‚\‚d‚l‚t‚|‚„‚Œ‚”‚œ‚¤‚¬‚´‚¼‚Ă̂Ԃ܂ä‚Z l € … ” ˜ «  +É ë0ä Ù6ù &8 â8$ ^:5 zEC  FR hFf ÒFv ôF‘ H¥ ìR¾ ²TÎ VØ õ[ç wø Dz [z…}-J€6£‡=œÎLæÐ[Ôêpvì„Ñìàû¢ ¹n Ë“ÛÔöÎIKKO“O%€7 €L€`€r€€’@¥ˆ±Œ½É”Õ˜áœî´ƒ  ”$”&(”5,”D@”RD”`L”n€”| ”Šè”˜•¨@˜³€˜¾¬˜Ï´˜Ü¸˜éÀ˜ùȘ̘И)ؘ9à˜=6+P‚9_°Év€‰Aƨþ ½Ò$ß6ïàþ`ƒ‡b#Üa<ŠaK­9Waf£${€v’Pv©E$¾wmÔ6ã$òÅõl¢m)€Eà‰V‘c €v؆`Š’‹žY¨O±=X¼Ä«Ì´Þ¦°ïB'À<3œ4óuN?C§x@ÀmÚ¿ðS1 0#‚I3¸L¼eÀr­6ƒF+“'¨ý+ºÞ(ÑY7èÑ=þ!³5606O¨ k»3zi4Ž:!¦ÿ9¼.;Ö)3çó1ý¶*7AKU_k~–­Â×âø 2BVgz¤¸ÁÍØãëôú&-3ANV^kx„‘«³¾ÉÔè!4W|ްÔçú " 8 P h  ™ ² È Þ õ   2 A I Q Y a j r z ‘ ¥ ¹ Ï ç ü  * A G P V ` h n v ‚ Œ “  ¥ ® µ ½ à Ï × ß ç ï ÷ ÿ    ' / 7 = D €€€€€€€~€€€€€€€€€€€€€fghijklmnopq@rstuvwxyz{|}@€‚ƒ„…†‡ˆ‰Š@‹ŒŽ‘’“”•–@—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®@¯°±²³´µ¶·¸¹º@»¼½¾¿ÀÁÂÃÄÅÆ@ÇÈÉÊËÌÍÎÏÐÑÒ@ÓÔÕÖרÙÚÛÜÝÞßàáâãäå()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeL (>™(MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'fghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäå_UpnpAcceptSubscription_UpnpAcceptSubscriptionExt_UpnpAddToAction_UpnpAddToActionResponse_UpnpAddToPropertySet_UpnpAddVirtualDir_UpnpCancelHttpGet_UpnpCloseHttpGet_UpnpCloseHttpPost_UpnpCreatePropertySet_UpnpDownloadUrlItem_UpnpDownloadXmlDoc_UpnpEnableWebserver_UpnpFinish_UpnpFree_UpnpGetErrorMessage_UpnpGetServerIpAddress_UpnpGetServerPort_UpnpGetServiceVarStatus_UpnpGetServiceVarStatusAsync_UpnpHttpGetProgress_UpnpInit_UpnpIsWebserverEnabled_UpnpMakeAction_UpnpMakeActionResponse_UpnpNotify_UpnpNotifyExt_UpnpOpenHttpGet_UpnpOpenHttpGetEx_UpnpOpenHttpGetProxy_UpnpOpenHttpPost_UpnpReadHttpGet_UpnpRegisterClient_UpnpRegisterRootDevice_UpnpRegisterRootDevice2_UpnpRemoveAllVirtualDirs_UpnpRemoveVirtualDir_UpnpRenewSubscription_UpnpRenewSubscriptionAsync_UpnpResolveURL_UpnpSdkClientRegistered_UpnpSdkDeviceRegistered_UpnpSdkInit_UpnpSearchAsync_UpnpSendAction_UpnpSendActionAsync_UpnpSendActionEx_UpnpSendActionExAsync_UpnpSendAdvertisement_UpnpSetContentLength_UpnpSetMaxContentLength_UpnpSetMaxSubscriptionTimeOut_UpnpSetMaxSubscriptions_UpnpSetVirtualDirCallbacks_UpnpSubscribe_UpnpSubscribeAsync_UpnpThreadDistribution_UpnpUnRegisterClient_UpnpUnRegisterRootDevice_UpnpUnSubscribe_UpnpUnSubscribeAsync_UpnpWriteHttpPost_ListAddTail_ListDelNode_ListDestroy_ListFind_ListHead_ListInit_ListNext_TPAttrInit_TPAttrSetIdleTime_TPAttrSetJobsPerThread_TPAttrSetMaxJobsTotal_TPAttrSetMaxThreads_TPAttrSetMinThreads_TPJobInit_TPJobSetFreeFunction_TPJobSetPriority_ThreadPoolAdd_ThreadPoolAddPersistent_ThreadPoolInit_ThreadPoolShutdown_TimerThreadInit_TimerThreadRemove_TimerThreadSchedule_TimerThreadShutdown__DefaultRuneLocale___error___maskrune___tolower___toupper_accept_asctime_atoi_bind_close_connect_fclose_fcntl_fopen_fread_free_freeaddrinfo_freeifaddrs_fseeko_fwrite_getaddrinfo_gethostname_getifaddrs_getsockname_getsockopt_gettimeofday_gmtime_inet_addr_inet_ntoa_inet_pton_ixmlCloneDOMString_ixmlDocument_createElement_ixmlDocument_createTextNode_ixmlDocument_free_ixmlDocument_getElementsByTagName_ixmlDocument_getElementsByTagNameNS_ixmlElement_free_ixmlElement_getElementsByTagName_ixmlElement_getElementsByTagNameNS_ixmlFreeDOMString_ixmlNodeList_free_ixmlNodeList_item_ixmlNodeList_length_ixmlNode_appendChild_ixmlNode_getChildNodes_ixmlNode_getFirstChild_ixmlNode_getLocalName_ixmlNode_getNamespaceURI_ixmlNode_getNextSibling_ixmlNode_getNodeName_ixmlNode_getNodeType_ixmlNode_getNodeValue_ixmlNode_setNodeValue_ixmlParseBufferEx_ixmlPrintDocument_ixmlPrintNode_listen_malloc_memcmp_memcpy_memmove_memset_perror_pthread_mutex_destroy_pthread_mutex_init_pthread_mutex_lock_pthread_mutex_unlock_pthread_rwlock_destroy_pthread_rwlock_init_pthread_rwlock_rdlock_pthread_rwlock_unlock_pthread_rwlock_wrlock_rand_realloc_recv_recvfrom_select_send_sendto_setsockopt_shutdown_sleep_snprintf_socket_sprintf_srand_sscanf_stat_strcasecmp_strcat_strchr_strcmp_strcpy_strdup_strlen_strncasecmp_strncmp_strncpy_strrchr_strstr_strtol_time_uname_usleepsingle module__mh_dylib_headerdyld_stub_binding_helper__dyld_func_lookup_NewRequestHandler_free_ssdp_event_handler_data_ssdp_event_handler_thread_send_error_response_check_soap_body_check_soap_action_header_get_device_info_dom_cmp_name_dom_find_node_dom_find_deep_node_get_node_value_soap_request_and_response_get_response_value_free_handle_request_arg_handle_request_get_port_RunMiniServer_sock_read_write_httpmsg_compare_httpheader_free_scanner_get_token_vfmatch_match_alias_release_get_file_info_GeneratePropertySet_free_notify_struct_respond_ok_genaNotifyThread_ScheduleGenaAutoRenew_gena_unsubscribe_gena_subscribe_GenaAutoRenewSubscription_addToAction_makeAction_Encode_MD5Transformdyld__mach_header_Soap_Invalid_Action_Soap_Action_Failed_Soap_Invalid_Var_end_body.6465_start_body.6464_Http_Method_Table_Http5xxStr_Http4xxStr_Http3xxStr_Http2xxStr_Http1xxStr_gMediaTypes_gEncodedMediaTypes_PADDING_gMServState_gGetCallback_gGenaCallback_gSoapCallback_gInitialized_Http1xxCodes_Http2xxCodes_Http3xxCodes_Http4xxCodes_Http5xxCodes_gMediaTypeList_gAliasDoc_gWebMutex_saved_node.3331_inited.3330_stateInited_next_save.4113_inited.4137_inited.4123_uuids_this_tick.4122_time_last.4121_st_AdvertiseAndReply_AutoAdvertise_CheckOtherHTTPHeaders_ContentTypeHeader_CreateHTTPRangeResponseHeader_CreateServicePacket_DeviceAdvertisement_DeviceReply_DeviceShutdown_ErrorMessages_ErrotEvt_FindServiceControlURLPath_FindServiceEventURLPath_FindServiceId_FreeHandle_GetCallBackFn_GetClientHandleInfo_GetClientSubActualSID_GetClientSubClientSID_GetDeviceHandleInfo_GetFirstSubscription_GetFreeHandle_GetHandleInfo_GetNextRange_GetNextSubscription_GetSubscriptionSID_GlobalClientSubscribeMutex_GlobalHndRWLock_HandleTable_Http_Header_Names_InitHandleList_LOCAL_HOST_LOCAL_PORT_MD5Final_MD5Init_MD5Update_MakeGetMessage_MakeGetMessageEx_MakePostMessage_Make_Socket_NoBlocking_PrintHandleInfo_ReadResponseLineAndHeaders_RemoveClientSubClientSID_RemoveSubscriptionSID_SearchByTarget_SendReply_ServiceAdvertisement_ServiceReply_ServiceShutdown_SetGenaCallback_SetHTTPGetCallback_SetSoapCallback_SoapGetServiceVarStatus_SoapSendAction_SoapSendActionEx_StartMiniServer_StopMiniServer_StrStr_StrTok_ToUpperCase_addServiceTable_advertiseAndReplyThread_bWebServerState_configure_urlbase_copy_URL_list_copy_client_subscription_copy_sockaddr_in_copy_subscription_error_respond_freeClientSubList_freeService_freeServiceList_freeServiceTable_freeSubscription_freeSubscriptionList_free_URL_list_free_client_subscription_free_upnp_timeout_gDocumentRootDir_gMiniServerThreadPool_gRecvThreadPool_gSendThreadPool_gSsdpReqSocket_gTimerThread_gUUIDMutex_g_maxContentLength_genaCallback_genaInitNotify_genaInitNotifyExt_genaNotify_genaNotifyAll_genaNotifyAllExt_genaRenewSubscription_genaSubscribe_genaUnSubscribe_genaUnregisterClient_genaUnregisterDevice_gena_process_notification_event_gena_process_subscription_renewal_request_gena_process_subscription_request_gena_process_unsubscribe_request_getAllServiceList_getElementValue_getServiceList_getServiceTable_getSubElement_get_content_type_get_ieee_node_identifier_get_miniserver_sockets_get_random_info_get_sdk_info_get_ssdp_sockets_get_system_time_getlocalhostname_has_xml_content_type_http_CalcResponseVersion_http_CancelHttpGet_http_CloseHttpGet_http_CloseHttpPost_http_Connect_http_Download_http_FixStrUrl_http_FixUrl_http_HttpGetProgress_http_MakeMessage_http_OpenHttpGet_http_OpenHttpGetEx_http_OpenHttpGetProxy_http_OpenHttpPost_http_ReadHttpGet_http_RecvMessage_http_RecvPostMessage_http_RequestAndResponse_http_SendMessage_http_SendStatusResponse_http_WriteHttpPost_http_get_code_text_httpmsg_destroy_httpmsg_find_hdr_httpmsg_find_hdr_str_httpmsg_init_isFileInVirtualDir_is_escaped_is_mark_is_reserved_is_unreserved_linecopy_linecopylen_map_int_to_str_map_str_to_int_matchstr_membuffer_append_membuffer_append_str_membuffer_assign_membuffer_assign_str_membuffer_attach_membuffer_delete_membuffer_destroy_membuffer_detach_membuffer_init_membuffer_insert_membuffer_set_size_memptr_cmp_memptr_cmp_nocase_method_to_str_miniStopSockPort_namecopy_pVirtualDirList_parse_hostport_parse_port_parse_scheme_parse_uri_parse_uri_and_unescape_parse_uric_parser_append_parser_get_entity_read_method_parser_parse_parser_parse_entity_parser_parse_headers_parser_parse_responseline_parser_request_init_parser_response_init_printNodes_raw_find_str_raw_to_int_readFromSSDPSocket_removeServiceTable_remove_dots_remove_escaped_chars_replace_escaped_resolve_rel_url_searchExpired_send_search_result_soap_device_callback_sock_destroy_sock_init_sock_init_with_ip_sock_read_sock_write_ssdpStopPort_ssdp_handle_ctrlpt_msg_ssdp_handle_device_request_ssdp_request_type_ssdp_request_type1_str_alloc_token_cmp_token_string_casecmp_token_string_cmp_unique_service_name_uuid_compare_uuid_create_uuid_create_from_name_uuid_unpack_virtualDirCallback_web_server_callback_web_server_destroy_web_server_init_web_server_set_alias_web_server_set_root_diramule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Frameworks/libixml.2.dylib0000755000175000017500000025752410753565633026153 0ustar l3onl3onÊþº¾ € ÀŸT þíúÎà…__TEXTpp__text__TEXT Ô^< Ô€__picsymbolstub1__TEXTl`l€ __cstring__TEXTnpŽnpŒ__DATApp__data__DATApdp__dyld__DATAudud__la_symbol_ptr__DATAulLul__nl_symbol_ptr__DATAu¸u¸&__bss__DATAu¼8__LINKEDIT€ €€ € HG5×Ö@executable_path/../Frameworks/libixml.2.dylibºÔ¬ P**}§Šd}ŽLŽ€•‰È'€" 4/usr/lib/libgcc_s.1.dylib 4X/usr/lib/libSystem.B.dylib|¦BŸ}ˆ¦|¦}€cx=ŒŒgˆ}‰¦| x=ŒŒb$N€ }‹cxKÿÿÌ|¦BŸ}h¦|¦=kkgT}i¦N€ |¦“áÿüBŸè¦”!ÿ <8c`888Kÿÿ½€8/€Až| ¦<| x€cg€N€!8!`€ƒáÿü|¦N€ |¦¿aÿì|#yBŸ|{x覔!ÿ A‚(£ëx;ÀH_||xH |]ð®|ò|Bt9"ÿÞ+‰Aè<_U):8B\| .|| ¦N€ ¸ÈÈȘ¨ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈtÈ„<ŸcÛx8„`H<ŸcÛx8„` HAÁH<<ŸcÛx8„`Kÿÿì<ŸcÛx8„`KÿÿÜ<ŸcÛx8„`$KÿÿÌcÛxHAÉ;ÞžàAœþô8!`€»aÿì|¦N€ |¦¿aÿì|~xBŸ|#x覔!ÿ /žAžpÃóxH 9|{xÃóxH å||xÃóxH e+ƒ AH<_Ti:8B\| .|| ¦N€ (0Ô(D((p(È8!`£ëx„ãx€»aÿì|¦Kÿýø<Ÿ£ëx8„^ÐH@¥„ãx£ëxH@™<Ÿ£ëx8„^ÜHH<Ÿ£ëx8„^àH@ydÛx£ëxH@m<Ÿ£ëx8„^äH@]£ëx„ãxKÿý•<Ÿ£ëx8„^è8!`€»aÿì|¦H@0ÃóxH ¡HPdÛx£ëxH@<Ÿ£ëx8„^ìH@ £ëx„ãxKÿýA<Ÿ£ëx8„^ðH?í€(/€Až<Ÿ£ëx8„^äH?уÞ(Kÿþˆ<Ÿ£ëx8„^ôH?¹£ëxdÛxH?­€,/€Až <Ÿ£ëx8„^äH?‘€~,¤ëxKÿþ%ÃóxH õ/ƒAž H ¹/ƒ@ž<Ÿ£ëx8„^øH<Ÿ£ëx8„^üH?IÃóxH ¹¤ëxKÿýÙ<Ÿ£ëx8„_H?)dÛx£ëxH?ÃóxH é/ƒAž H Q/ƒ@ž<Ÿ£ëx8„^üH<Ÿ£ëx8„^øH>áÃóxH ­|~xKÿý8!`€»aÿì|¦N€ |¦¿aÿì|~yBŸ|#x覔!ÿ A‚|/„AžtH‘|{xÃóxH=||xÃóxH½+ƒ AP8@|`4|@0p˜@‚p@‚dp@‚$H(8!`Ãóx¤ëx€»aÿì|¦KÿüÈdÛx£ëxH><Ÿ£ëx8„\DH> £ëx„ãxKÿûE<Ÿ£ëx8„\HHÀ<Ÿ£ëx8„\LH=á£ëxdÛxH=Õ€,/€Až <Ÿ£ëx8„\ €0“Ý/‰0@ž8`“¾ H8€I(H |Ix€B(/‚@žÿô8`‘=$“©(H8`iH8`8!P€»¡ÿô|¦N€ |¦¿ÿð|~y|#x|¼+x”!ÿ°A‚ø/„Ažð€+€A,+€@œä/€Až(£ëxÄóxKÿ÷M/ƒ@¾àD*|#x;€b÷ÿÿ;`ÿ€Ð@@œ´/Až¸“<```ˆ]|Ft/†&AžÀ/†@T8ÿ÷+€@0/† Až(8ÿà+€×ß@=&ÿÿ8 +€ý@ ‰¸@A8|^t8Kÿÿ¨<Ÿ£ëx8 ;À'8„9ìH7u/ƒAžÿ„<Ÿ£ëx8 8„9äH7Y/ƒ@ž;À&8Kÿÿ`<Ÿ£ëx8 8„:¸H71/ƒ@žx<_:Ý;À‚¢;pHD/˜9AW 6|X;ÂÿÐH(/˜FAW 6|X;ÂÿÉHW 6|X;Âÿ©:Öˆ~£«x|tÃxH6A/ƒ@žÿ¨H`<Ÿ£ëx8 8„:¼H6¡/ƒ@žœ<_:Ý;À‚¢;lH^ :Ö|X;ÂÿЈ~£«x|tÃxH5á/ƒ@žÿØ–èAžT/˜;@žL8ÿ÷+€@0/ž Až(8ÿà+€×ß@<^ÿÿ8 +€ý@ ‚¸@A|]°P8BA@žp;À}Hd/€>AžX88Kÿð©8€Kÿüu/ƒAžÿ°ƒÁ8H €8Þ€}88|~Kÿðy8€KÿüE/ƒ@žÿÜ€}H €};À|dxÅóx£ëxKÿöý/ƒ@žÿX€|8!`Ãóx€»¡ÿô|¦N€ |¦¾áÿÜ9 hBŸ|{x|š#xè¦|¼+x”!ÿ€``ƒÃˆ/€AžÌ€8/€Až?ƒ¸2H“Ã<_ƒ¢2H ;Þ“Ûˆ|t/„Až Ø£ëxH/||y@‚ÿÜ“Á8```ˆ/€<@¾T?¿ƒ½20£ëxH/-¤ëx|yxÃóx%ËxH/Y/ƒ@ž>ÿ9ò?Àƒ24<ËxcÞÿÿH(ÃxH.íÃx|exƒãxH//ƒAžP;œˆ|t8]ÿ÷+‚@0/ Až(8ÿà+€×ß@<]ÿÿ8 +€ý@ ‚ð@A /@žÿ˜ÙàQ@è/Ažà8~H-q/ƒzAžÌ$ËxÅóxH.¹€Z8<8c1Œ|ñ®Kÿî5/ƒzAžœ8€w24H.%9 ||{a8H”?¿ƒ½2 £ëxH.¤ëx|exÃóxH.1/ƒ@ž8a8Kÿó]/ƒAžØHAž<Ÿ£ëx€„2,H+I|yy@‚°cÛxKÿú5/ƒAžè€{/ƒAžÜKÿëU/ƒzAžÔ8“:ƒ¸2H ;Þ“ÛƒÛˆ|t/„Až£ëxH*½/ƒ@žÿØcÛxKÿùÉ/ƒAž|€{/ƒAžp<Ÿ8„0ôH*­/ƒ@ž\9 8HX/ž<@žÌcÛxKÿù/ƒAž4€{/ƒAž(Kÿê¡/ƒzAž |dx8{ H/ƒ@žôCÓxKÿð™,@‚ä; zcÛx“º€Kÿù/ƒAžЃÛ<Ÿ8„1XÃóxH*,@‚ƒÛ9 {8Kÿþ<ŸÃóx8„0ôH)Ý/ƒAžlƒÛ9 “»8Kÿýô<Ÿ£ëx€„2(H)µ/ƒ@ž0€{ /ƒAžXKÿéÑ/ƒzAžP89 Kÿþè€8/€@ž,€0/€Až /88Až88£ëxKÿéÁ8€Kÿõ/ƒAžô£ëxKÿéi/ƒzAžàcÛxKÿø/ƒAžЀ[ˆ/€=@žÀcÛxKÿ÷ý/ƒAž°€›ˆ|t/€"Až /€'@ž”ƒÛÃóxH)‘||y@‚(H|ˆ|t/€@ž ;ÞÿÿH /€"@ž8c8€"H"m,A‚h4cA‚ /žAž ˆ|t/€@žÿ¨HD/ž@ž<}ƒãxKÿïÝ|{y@‚,€Kx/ž@ž$HD€B/‚@žÿЀ8/€@žH € /€@žKÿàÙ~ ƒÁHH ƒÁH“Ü,€|4ÄóxKÿÖu|{y@‚Tƒ¡H/“¼4Ažœ8`H¥|~yA‚4“~“~“~“~“~ €}Kÿàu/ƒ~@žÃóxH ;`fH €}/ƒAžKÿàI/ƒ~Až €} /ƒAž Kÿà-/ƒ~@žÃóxKÿâåKÿÿ°€0“Ü0;`H`€a@€P8¡8H©|{y@‚œ€|4€8H$€a@€P8¡DH9|{y@‚x€|4€DKÿÕuHxHƒa@ƒ¡L€\4ƒÂ,H€~¤ëxH]/ƒAž8ƒÞ(/ž@žÿäcÛx¤ëx8¡HH|{y@‚€aH$ËxKÿÓ½|{y@‚€|4€H8 Hµ|{yA¢˜Hè€T/€@ž\ƒ|0€L€{Hå/ƒ@žÀ€cÛx0KÿáÍƒÛ HÃóxƒ¾Kÿâ1Ãóx¾ëxH/ž@žÿäcÛxH}ƒÜ4€aL€žH/ƒ@žh€^8;`8\48#Ëx(/‚Až“¢(/‰Až“©$žØ@ž“¼,/šAžd8`“ÚH\€[(iÛxH |Ix€B(/‚@žÿô‘=$“©(H“}(“¼,“}$/šAž88`H8`iH8`8!`€»Aÿè|¦N€ |¦¿aÿì||y|ž#x|»+x”!ÿA‚ð/„Ažè/…Ažà|ƒ#xKÿä 8/ƒAžØƒ¼,H€}ÄóxHÑ/ƒAž„ƒ½(/@žÿä€|0Äóx8¡8H …|c4/ƒ|`x@žcÛxƒ¡8H±/ƒ}@ž€a8H u8fHh€8ƒãx8 Kÿþ |~4/žAžH€a8H IÀóxH<€}/ƒAžHcÛxHQ8f/ƒ}@žH8iH88!p|x€»aÿì|¦N€ |¦,¿ÿð|œ#x”!ÿ°A‚X/„AžPƒÃ,H€~„ãxHÁ|}yA‚ƒÞ(/ž@žÿä8`H$€~/ƒAžÿðHu8`“¾H8`i8!P€»ÿð|¦N€ |¦,¿¡ÿô|#x”!ÿ°A‚(/‚Až“¢(/‰Až“©$žØ@ž“¼,8`“ÚHP€[(iÛxH |Ix€B(/‚@žÿô“©(H“}(“¼,“}$/š8`Až8H8`i8!`€»Aÿè|¦N€ |¦¾áÿÜ|yyBŸ|›#x|¼+xè¦|×3x”!ÿPA‚/„Ažø/…Ažð/†Ažè|£+x;ÀKÿßi/ƒAžØ;A<;ÀfCÓxKÿ¼ÉƒãxHQ/ƒa(/‚Až‘"(/‰AžI$€,ž@ž‘<,88`($“ÛH8`i8!`€»aÿì|¦N€ /ƒMž 8€8  =""<> > #document*/>01234567890123456789ABCDEFabcdef&#x&##cdata-section#textxmlnsxmlns:rbxmlhttp://www.w3.org/XML/1998/namespacehttp://www.w3.org/2000/xmlns/o o,o4o<nÔo@oHoPoTnônÄnÐoXod--..09··ÐÐÑÑE`a‡‡ƒ†‘¡£¹»½¿¿ÁÂÄÄ@@KR`ippÖÜÝßàäçèêíðù   < < > L M M Q T b c f o ƒ ¼ ¼ ¾ ¾ ¿ ¿ À Ä Ç È Ë Í × × â ã æ ï   < < > > ? ? @ B G H K M f o p q ƒ ¼ ¼ ¾ Å Ç É Ë Í æ ï   < < > C G H K M V W f o ‚ ƒ ¾ Â Æ È Ê Í × × ç ï   > D F H J M U V f o ‚ ƒ ¾ Ä Æ È Ê Í Õ Ö æ ï   > C F H J M W W f o114:FFGNPY±±´¹»¼ÆÆÈÍÐÙ )557799>>??q„†‹•——™­±·¹¹ Ð Ü á á000*0/01050™0™0š0š00ž0ü0þ::AZ__azÀÖØöøÿ14>AHJ~€ÃÍðôõúP¨»Á††ˆŠŒŒŽ¡£ÎÐÖÚÚÜÜÞÞààâó OQ\^ÄÇÈËÌÐëîõøù1VYYa†Ðêðò!:AJq·º¾ÀÎÐÓÕÕåæ  9 = = X a … Œ “ ¨ ª ° ² ² ¶ ¹ Ü Ý ß á ð ñ     ( * 0 2 3 5 6 8 9 Y \ ^ ^ r t … ‹ ‘ “ ¨ ª ° ² ³ µ ¹ ½ ½ à à     ( * 0 2 3 6 9 = = \ ] _ a … Š Ž ’ • ™ š œ œ ž Ÿ £ ¤ ¨ ª ® µ · ¹     ( * 3 5 9 ` a … Œ Ž ’ ¨ ª ³ µ ¹ Þ Þ à á     ( * 9 ` a.0023@E‚„„‡ˆŠŠ”—™Ÿ¡£¥¥§§ª«­®°°²³½½ÀÄ@GIi ÅÐö    <<>>@@LLNNPPTUYY_acceeggiimnrsuužž¨¨««®¯·¸ºº¼Âëëððùù› ù EHMPWYY[[]]_}€´¶¼¾¾ÂÄÆÌÐÓÖÛàìòôöü!&!&!*!+!.!.!€!‚000!0)0A0”0¡0ú11,NŸ¥¬×£àà Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ôp@p@p@p @p@p@p@p@p @p$@p(@p,@p0@p4@p8@ul@up@ut@ux@u|@u€@u„@uˆ@uŒ@u@u”@u˜@uœ@u @u¤@u¨@u¬@u°@u´@ ì þ Ô  / B, Zˆ l-Ä y. ‹0 ¨1 º1ô Ç2¨ Ú3L î4¸9Ø; $<Œ9=ìMO¨cpup„pp ™p¡p«pµpÄp Ñp$Þp(æp,ïp0öp4p8p<r("u¼0HlE1h]:¨t-è‰3ä`ˆ`t"<9,P|dd ‚ch¢eÂd<äeìe0(hìEh\dbL€aœžfà¼fÜc8ùb|` +g¨HgkgXa©`”¼`¬Ûœñ<X%_¬7TÌQY,mX$‹]à«XìÍ^lñTD ^´#_ ?T0QWœn]8_¸®VlÈZôäU8Y¸"T\:ˆM”_Ìsjp—iÈ®iÎiœêk4 iŒ j7SlSRÀfRyRüŒR ¡Ü¹#€Ïøã ´ý*„ ä)!X@-`T,”l*ì*¥8·àÆ8ߌ÷ 'œ.)(O(Hy'¡¼¹ÔÐ`çÐ  H 0Œ F ]0 x¤ è ¤ ÁD Ù ñ $° H ,È ?"ô U%ä l` ƒx p ³"( Ï æì úì ü ,Ô =H Pô cŒ uä T ŸD °Qˆ ÄQD ÜQà ðRP Q” Pl /Pˆ C K R Y _ f m u } † Ž — Ÿ § ¯ · Ä Í Ö§¨©ª«¬­®¯°±²³´µ¶·¸¹§¨©ª«¬­®¯°±²³´µ¶·¸¹€*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦ Þ*}•*%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹_ixmlAttr_free_ixmlAttr_init_ixmlCDATASection_free_ixmlCDATASection_init_ixmlCloneDOMString_ixmlDocument_createAttribute_ixmlDocument_createAttributeEx_ixmlDocument_createAttributeNS_ixmlDocument_createAttributeNSEx_ixmlDocument_createCDATASection_ixmlDocument_createCDATASectionEx_ixmlDocument_createDocument_ixmlDocument_createDocumentEx_ixmlDocument_createElement_ixmlDocument_createElementEx_ixmlDocument_createElementNS_ixmlDocument_createElementNSEx_ixmlDocument_createTextNode_ixmlDocument_createTextNodeEx_ixmlDocument_free_ixmlDocument_getElementById_ixmlDocument_getElementsByTagName_ixmlDocument_getElementsByTagNameNS_ixmlDocument_importNode_ixmlDocument_init_ixmlDocument_setOwnerDocument_ixmlDocumenttoString_ixmlDomTreetoString_ixmlElement_findAttributeNode_ixmlElement_free_ixmlElement_getAttribute_ixmlElement_getAttributeNS_ixmlElement_getAttributeNode_ixmlElement_getAttributeNodeNS_ixmlElement_getElementsByTagName_ixmlElement_getElementsByTagNameNS_ixmlElement_getTagName_ixmlElement_hasAttribute_ixmlElement_hasAttributeNS_ixmlElement_init_ixmlElement_removeAttribute_ixmlElement_removeAttributeNS_ixmlElement_removeAttributeNode_ixmlElement_setAttribute_ixmlElement_setAttributeNS_ixmlElement_setAttributeNode_ixmlElement_setAttributeNodeNS_ixmlElement_setTagName_ixmlFreeDOMString_ixmlLoadDocument_ixmlLoadDocumentEx_ixmlNamedNodeMap_addToNamedNodeMap_ixmlNamedNodeMap_free_ixmlNamedNodeMap_getItemNumber_ixmlNamedNodeMap_getLength_ixmlNamedNodeMap_getNamedItem_ixmlNamedNodeMap_init_ixmlNamedNodeMap_item_ixmlNodeList_addToNodeList_ixmlNodeList_free_ixmlNodeList_init_ixmlNodeList_item_ixmlNodeList_length_ixmlNode_allowChildren_ixmlNode_appendChild_ixmlNode_cloneAttr_ixmlNode_cloneAttrDirect_ixmlNode_cloneCDATASect_ixmlNode_cloneDoc_ixmlNode_cloneElement_ixmlNode_cloneNode_ixmlNode_cloneNodeTree_ixmlNode_cloneNodeTreeRecursive_ixmlNode_cloneTextNode_ixmlNode_compare_ixmlNode_free_ixmlNode_freeSingleNode_ixmlNode_getAttributes_ixmlNode_getChildNodes_ixmlNode_getElementsByTagName_ixmlNode_getElementsByTagNameNS_ixmlNode_getElementsByTagNameNSRecursive_ixmlNode_getElementsByTagNameRecursive_ixmlNode_getFirstChild_ixmlNode_getLastChild_ixmlNode_getLocalName_ixmlNode_getNamespaceURI_ixmlNode_getNextSibling_ixmlNode_getNodeName_ixmlNode_getNodeType_ixmlNode_getNodeValue_ixmlNode_getOwnerDocument_ixmlNode_getParentNode_ixmlNode_getPrefix_ixmlNode_getPreviousSibling_ixmlNode_hasAttributes_ixmlNode_hasChildNodes_ixmlNode_init_ixmlNode_insertBefore_ixmlNode_isAncestor_ixmlNode_isParent_ixmlNode_removeChild_ixmlNode_replaceChild_ixmlNode_setLocalName_ixmlNode_setNamespaceURI_ixmlNode_setNodeName_ixmlNode_setNodeProperties_ixmlNode_setNodeValue_ixmlNode_setPrefix_ixmlNode_setSiblingNodesParent_ixmlNodetoString_ixmlParseBuffer_ixmlParseBufferEx_ixmlPrintDocument_ixmlPrintDomTree_ixmlPrintDomTreeRecursive_ixmlPrintNode_ixmlRelaxParser_ixml_membuf_append_ixml_membuf_append_str_ixml_membuf_assign_ixml_membuf_assign_str_ixml_membuf_destroy_ixml_membuf_init_ixml_membuf_insert_fclose_fopen_fread_free_fseek_ftell_malloc_memcpy_memmove_memset_realloc_strchr_strcmp_strdup_strlen_strncasecmp_strncmp_strncpy_strstrsingle module__mh_dylib_headerdyld_stub_binding_helpercfm_stub_binding_helper__dyld_func_lookup___initialize_Cplusplus_copy_with_escape_safe_strdup_Parser_UTF8ToInt_Parser_freeElementStackItem_Parser_freeNsURI_Parser_free_Parser_skipString_Parser_skipComment_Parser_copyToken_Parser_isNameChar_Parser_skipMisc_Parser_getNextToken_Parser_getNextNode_ixml_membuf_set_sizedyld__mach_header_BEGIN_DOCTYPE_XMLDECL_WHITESPACE_END_PI_BEGIN_PI_XMLDECL2_BEGIN_COMMENT_END_COMMENT_COMPLETETAG_ENDTAG_CDSTART_CDEND_DEC_NUMBERS_HEX_NUMBERS_NameChar_Letter_g_error_char_Parser_LoadDocument_Parser_freeNodeContent_Parser_isValidXmlName_Parser_setErrorChar_Parser_setNodePrefixAndLocalNameÎúíþ …À__TEXT``__text__TEXTh gSh €__cstring__TEXTÐ^-Ð^__DATA``__data__DATA`œ`__dyld__DATAœeœe__bss__DATA¤e|__IMPORTpp__jump_table__IMPORTpdp8__LINKEDIT€T€T HÖ×5G@executable_path/../Frameworks/libixml.2.dylibx€¸Ø| P((}¥h‰}P„•‰€ 4/usr/lib/libgcc_s.1.dylib 4X/usr/lib/libSystem.B.dylibèXÿ°“T‹€/ZÿàèX‹€ZÿàU‰åWV‰ÖSƒì,è[…Ò‰Eà„ñ‰$1ÿè™d‰EäéÖ¾ƒè"ƒø‡¶‹„ƒ8ØÿàÛãããËÓãããããããããããããããããããã¬ã´ƒ4Sëƒ9S‰D$‹Eà‰$è:<ë'ƒ>SëçƒDSë߃KSë׋Eà‰t$‰$èJ<GF;}äŒ!ÿÿÿƒÄ,[^_ÉÃU‰åƒì8‰]ô‹E è[‰uø‹u‰}ü‰Eà…ö„§‰4$è ‰Eä‰4$è; ‰4$‰Çè— ·Àƒø ‡~‹„ƒJØÿ༚,r†¼¼»¼‰ú‹Eà‹]ô‹uø‹}üÉéTþÿÿƒ:‹Uä‰T$‹Eà‰$è,:‹F,…Àt'ƒMR‰D$‹Uà‰$è:‹Eà‰D$‹F,‰$èþÿÿ‰4$èõ…Àt‰$èÆfHuƒZR‰D$‹Uà‰$ëƒ^R‰D$‹Eà‰$è¿9‰4$è¶‹Uà‰T$‰$èªýÿÿƒ`R‰D$‹Eà‰$è“9‹Uä‰T$‹Eà‰$è9‰4$躅Àt ‰$èIfƒøuƒ^R‰D$‹Uà‰$ëƒZR‰D$‹Eà‰$è@9‰4$èy‰ÆéQýÿÿ‹]ô‹uø‹}üÉÃU‰åƒì8‰uø‹u‰}ü‹} ‰]ôè[…ö”Â…ÿ”ÀÂ…q‰4$è.‰Eà‰4$è\‰Eä‰4$è·fƒø ‡I¿È¸Ó੘u ¨uT¨ué+‰} ‹]ô‰u‹}ü‹uøÉé üÿÿ‹Eà‰<$‰D$è8ƒrO‰D$‰<$è}8‹U䉸è`ûÿÿƒuOé˃wO‰D$‰<$èV8‹Eà‰<$‰D$èG8‹N,…Ét!ƒlO‰D$‰<$è.8‰|$‹F,‰$è!üÿÿ‰4$è…Àt#‰$èçfHuƒyO‰E܉D$‰<$èò7ëƒ}O‰D$‰<$èÞ7ƒyO‰E܉4$è̉|$‰$èÃûÿÿƒO‰D$‰<$è¯7‹Eà‰<$‰D$è 7‹E܉}‹]ô‰E ‹uø‹}üÉéˆ7‹]ô‹uø‹}üÉÃU‰åƒì8‰uø‹u‰}ü‹} ‰]ôè[…ö”Â…ÿ”ÀÂ…P‰4$è…‰Eà‰4$賉Eä‰4$èfƒø ‡(¿È¸Ó੘u ¨uT¨ué ‰} ‹]ô‰u‹}ü‹uøÉé÷úÿÿ‹Eà‰<$‰D$èæ6ƒÉM‰D$‰<$èÔ6‹U䉸è·ùÿÿƒÌM骃ÎM‰D$‰<$è­6‹Eà‰<$‰D$èž6‹F,…Àt!ƒÃM‰D$‰<$è…6‰|$‹F,‰$èxúÿÿ‰4$èm…Àt‰$è>ƒÔM‰E܉D$‰<$èM6‰4$èD‰|$‰$è;úÿÿƒÖM‰D$‰<$è'6‹Eà‰<$‰D$è6‹E܉}‹]ô‰E ‹uø‹}üÉé6‹]ô‹uø‹}üÉÃU¹i‰åƒì‰uø‹u‰}ü‹} …ö”Â…ÿ”ÀÂuÇD$‰t$‰<$èð,‰Á‹uø‰È‹}üÉÃU1À‰åƒì8‰}ü‹}‰]ôè[‰uø…ÿt,u؉4$èÁ4ƒL‰D$‰4$èu5‰t$‰<$èCüÿÿ‹EØ‹]ô‹uø‹}üÉÃU1À‰åƒì(‰}ü‹}‰uø…ÿtuè‰4$èu4‰t$‰<$è üÿÿ‹Eè‹uø‹}üÉÃU1À‰åƒì8‰}ü‹}‰]ôè[‰uø…ÿt,u؉4$è54ƒ„K‰D$‰4$èé4‰t$‰<$è`ýÿÿ‹EØ‹]ô‹uø‹}üÉÃU1À‰åƒì(‰}ü‹}‰uø…ÿtuè‰4$èé3‰t$‰<$è&ýÿÿ‹Eè‹uø‹}üÉÃU‰å¾E‰EÉéÉU‰åVƒì‹M‹u …ɔ…ö”ÀÂu€9tÇD$‰L$‰4$èˆ+ë¸iƒÄ^ÉÃU‰å‹E…ÀtÉéÞ[É1ÀÃU‰å‹E…ÀtÉé“[ÉÃU‰åƒì(‹EÇEô…Àt‰D$EôÇD$‰$è*+‹EôÉÃU‰åƒì(‹EÇEô…Àt€8t‰D$EôÇD$‰$èõ*‹EôÉÃU¹ ‰å1ÀW‹}üó«_ÉÃU¹ ‰å1ÀW‹}üó«_ÉÃU‰åVƒì‹u…öth‹…Àt‰$èçZ‹F…Àt‰$èØZ‹F …Àt‰$èÉZ‹F…Àt‰$èºZ‹F…Àt‰$è«Zƒ~u ‹F4‰$èšZ‰uƒÄ^ÉéZƒÄ^ÉÃU‰åVƒì‹u…öt.‹F ‰$èçÿÿÿ‹F(‰$èÜÿÿÿ‹F,‰$èÑÿÿÿ‰uƒÄ^ÉéHÿÿÿƒÄ^ÉÃU‰å‹E…ÀtÉé®ÿÿÿÉÃU1À‰å‹U…Òt‹ÉÃU1À‰å‹U…Òt‹BÉÃUºi‰åƒì‰uø‹u‰}ü‹} …öt0‹F …Àt‰$èèYÇF …ÿt‰<$è Zºf…À‰F t1Ò‹uø‰Ð‹}üÉÃUºi‰åƒì‰uø‹u‰}ü‹} …öt0‹F…Àt‰$è“YÇF…ÿt‰<$è·Yºf…À‰Ft1Ò‹uø‰Ð‹}üÉÃU‰åƒì‰uø‹u‰}ü‹} ‹F…Àt‰$èGYÇF…ÿt‰<$èkYºf…À‰Ft1Ò‹uø‰Ð‹}üÉÃU1À‰å‹U…Òt‹B ÉÃU1À‰å‹U…Òt‹BÉÃU1À‰å‹U…Òt‹BÉÃUºi‰åƒì‰uø‹u‰}ü‹} …öt0‹F…Àt‰$è¿XÇF…ÿt‰<$èãXºf…À‰Ft1Ò‹uø‰Ð‹}üÉÃU1À‰å‹U…Òt·BÉÃU1À‰å‹U…Òt‹BÉÃU1À‰å‹U…Òt‹B ÉÃU1ɉå‹E…Àt‹P ‰Áë‰Ñ‹R(…Òu÷ɉÈÃU1À‰å‹U…Òt‹B$ÉÃU1À‰å‹U…Òt‹B(ÉÃU1À‰å‹U…Òt‹B0ÉÃU‰åWVƒì‹u‹} …ö•Â…ÿ•À„Ðu1Àë";wt‰|$‹F ‰$èÌÿÿÿ…Àu ‹v(ëѸƒÄ^_ÉÃU‰å‹U ‹E9BÉ”À¶ÀÃU‰å‹E‹@ƒøwƒøs0Ht¸ë(ƒø uôë‹U ‹Bƒø”ƒø ”ÀÂë‹E ƒxtÓ1ÀÉÃU‰åƒì‰uø‹u ‰}ü‹}9÷tt‹‰D$‹‰$èuW…Àug‹F‰D$‹G‰$è_W…ÀuQ‹G;FuI‹F ‰D$‹G ‰$èAW…Àu3‹F‰D$‹G‰$è+W…Àu‹F‰D$‹G‰$èW…Àu¸ë1À‹uø‹}üÉÃU‰å‹E‹Pë‰P‹@(…ÀuöÉÃU‰åƒì(‰uø‹u‰}ü…ötJÇ$è§V…À‰Eôt7‰$}ôè?0‹v ë‰t$‰<$è»0…Àu ‹v(…öué‹Eôë ‹Eô‰$è<01À‹uø‹}üÉÃU‰åƒì(‰uø‹u‰}üÇEô…ötPƒ~uJÇ$è3V…À‰Eôt7‰$}ôè0C‹v,ë‰t$‰<$èµC…Àu ‹v(…öué‹Eôë ‹Eô‰$è3C1À‹uø‹}üÉÃU1À‰å‹U…Òt 1Àƒz •ÀÉÃU‰å‹U…Òtƒzu ‹R,¸…Òu1ÀÉÃU‰åWVƒì‹}‹…Àt‰$èŒUÇ‹M 1ö…Ét-‹E f¾f‰$è¥U…À‰t‰<$èâ…À‰Æt ‹‰$èPUƒÄ‰ð^_ÉÃU‰åWVƒì‹}Ç$<è?U…À‰Æty‰$è^:‹‰4$‰D$èoÿÿÿ…ÀuL‹G‰4$‰D$èüÿÿ…Àu9‹G ‰4$‰D$èÜúÿÿ…Àu&‹G‰4$‰D$èûÿÿ…Àu‹G‰4$‰D$è`ûÿÿ…Àt ‰4$1öè:ëÇFƒÄ‰ð^_ÉÃU‰åƒì‹E‰$èPÿÿÿ…ÀtÇ@4ÉÃU‰åƒì‰]øè[‰uüÇ$4è{T…À‰Æt1‰$èÆ9ƒšC‰D$‰4$è§þÿÿ…Àt ‰4$1öèº9ëÇF ‰ð‹]ø‹uüÉÃU‰åWVƒì‹}Ç$8è#T…À‰Æ„Œ‰$èÇ.‹G4‰4$‰D$èã.…Àu^‹‰4$‰D$è<þÿÿ…ÀuL‹G‰4$‰D$èåúÿÿ…Àu9‹G ‰4$‰D$è©ùÿÿ…Àu&‹G‰4$‰D$èëùÿÿ…Àu‹G‰4$‰D$è-úÿÿ…Àt ‰4$1öè'8ëÇFƒÄ‰ð^_ÉÃU‰åWVƒì‹} ‹u‹G‰4$‰D$èoúÿÿ…Àu0‹G‰4$‰D$èÝùÿÿ…Àu‹G‰4$‰D$èuùÿÿ…Àu ‹G‰F1ÀëJ‹…Àt‰$èSÇ‹F…Àt‰$èSÇF‹V¸f…Òt‰$èæR¸fÇFƒÄ^_ÉÃU¹i‰åW‹}V‹u …ÿ”Â…ö”ÀÂuN;~±uG‹V$…Òt‹F(‰B(;w u‹F(‰G ë‹F(…Àt‰P$ÇF(1ÉÇF$ÇF‹}…ÿt‹E‰0^‰È_ÉÃU¹i‰åWVƒì‹u‹} …ö”Â…ÿ”ÀÂ… ‹G0…Àt ;F0±…މt$‰<$èúÿÿHtz‹FƒøwƒøsmHt;wu8ë"ƒø uôë‹Gƒø”ƒø ”ÀÂëƒtÙëAÇD$‰|$‰4$èûþÿÿ‹V ‹F0‰w…Ò‰G0u‰~ ë‹B(ë‰Â‹@(…Àu÷‰z(‰W$1É빃ĉÈ^_ÉÃU¹i‰åWVƒì‹}‹u …ÿ”Â…ö”ÀÂ…·‹Gƒøw ƒøƒ¡Ht‰|$‰4$èAùÿÿHu'銃ø uçë‹Fƒø”ƒø ”ÀÂëƒ~tÌëh‹G0¹;F0u`‹E±;xuV;~u"ÇD$‰t$‰<$è!þÿÿÇF(ÇF$‹U‹B$‰V(…Àt‰p(‰F$‹E‰p$‹F$…Àu‰w 1ɉ~빃ĉÈ^_ÉÃU‰åWVƒì ‹u‹U‹} ‹E…ö‰Uð”Â…ÿ‰Eô”ÀÂ…‘‹Eô…À„†‰t$‰<$è^øÿÿHt~‹FƒøwƒøsqHt‹F0;G0t$ëkƒø uñë‹Gƒø”ƒø ”ÀÂëƒtÖëB‹Uô¸;ruA‰T$‰|$‰4$è|þÿÿ…Àu-‹Eð‹Uô‰u‰E‰U ƒÄ ^_Ééýÿÿ¸ië ¸ë¸ƒÄ ^_ÉÃU‰åWVSè[ƒì,ƒô>‰Eä‹E…Àt}‹UfƒzuI‹‹} ‰D$‰<$èÏO…Àt"‰þ‹}ä¹üó¦¸t ¶Fÿ¶Oÿ)È…Àu‹E‹U‰D$‰$è«)‹}‹E ‹U‰|$‰D$‹B ‰$èrÿÿÿ‹}‹(‰}é|ÿÿÿƒÄ,[^_ÉÃU‰åƒìh‹E‰uø‹U ‹u‰]ôè[…À‰}ü‰EÔ‰Uä‰uàtZfƒxuL‹‰$‰D$è%O…Àt(‹uäƒA>¹ü‰Çó¦¸t ¶Fÿ¶Oÿ)È…Àu‹uÔ‰t$‹}à‰<$èû(‹EÔ…Àu1Àë‹UÔ‹B ‹uà‹}ä‰E‹]ô‰u‹uø‰} ‹}üÉé¯þÿÿU‰åWVSè[ƒì,ƒ£=‰Eà‹E…À„Ø‹Ufƒz…œ‹z‰}ä‹J …ÿ•Â…É•À„Є‹E ‰L$‰$è]N…Àt#‹u ¹‹}àüó¦¸t ¶Fÿ¶Oÿ)È…ÀuK‹E‹Uä‰D$‰$è$N…Àt#‹u¹‹}àüó¦¸t ¶Fÿ¶Oÿ)È…Àu‹E‹U‰D$‰$èÿ'‹}‹E‹U ‰|$ ‹}‰D$‰T$‹G ‰$èÿÿÿ‹G(‰EéÿÿÿƒÄ,[^_ÉÃU‰åƒìx‹E‰uø‹U ‰}ü‹u‹}‰]ôè[…À‰EĉUà‰u܉}Ø„¶fƒx…¤‹@‹UĉEä…À‹J •Â…É•À„Є†‰L$‹uà‰4$èHM…Àt&»‹<¹ü‰}Àó¦¸t ¶Fÿ¶Oÿ)È…ÀuM‹u܉t$‹}ä‰<$è M…Àt%ƒ‹<¹ü‰Çó¦¸t ¶Fÿ¶Oÿ)È…Àu‹uĉt$‹}؉<$èå&‹EÄ…Àu1Àë‹UÄ‹B ‹uØ‹}Ü‹Uà‰E‹]ô‰u‹uø‰}‹}ü‰U ÉéäýÿÿU‰åƒìÇ$4‰uø‰}üèaL…À‰Æt6ü1À¹ ‰÷ó«‹U‹‰4$‰D$èŠöÿÿ‹U‹B‰4$‰D$è4óÿÿÇF‰ð‹}ü‹uøÉÃU‰åƒìÇ$4‰uø‰}üèL…À‰Æt6ü1À¹ ‰÷ó«‹U‹‰4$‰D$è,öÿÿ‹U‹B‰4$‰D$èÖòÿÿÇF‰ð‹}ü‹uøÉÃU‰åƒì8‰uø‹u‹E ‰]ôè[…ö‰}ü‰EÜ„Pƒ~ ‡F‹F‹„ƒ(Øÿà_PÞ ____0‰4$è÷ÿÿ‹U܉Eà‰T$‹F,‰$è|ÿÿÿ‹Uà‰×‰B,‹MÜ…É„á‹E܉D$‹F ‰$èWÿÿÿ‹Uà‰×…À‰B t‰Pë‹Uà‰P‹@(…Àuó‹E܉D$‹F(‰$è'ÿÿÿ‹Uà…À‰B(u‰×鎋Uà‰P$郉4$èjõÿÿ‰Eä‹E܉D$‹F(‰$èîþÿÿ‹Uä‰×…À‰B(tZ‰P$ëU‰u‹]ô‹uø‹}üÉéþÿÿ‰u‹]ô‹uø‹}üÉé[þÿÿ‰4$èÕõÿÿ‹UÜ…Ò‰Çt ‹E܉D$‹F ‰$è–þÿÿ…À‰G t‰xë1ÿ‰ø‹]ô‹uø‹}üÉÃU‰åƒì‰uø‹u‰}ü‹Fƒøw ƒøs`Huë ƒø tV1Àëa‰4$èÌõÿÿ‰Ç‹E ‰D$‹F,‰$è5þÿÿ‰G,‹E …Àt(‹E ‰D$‹F ‰$èþÿÿ‰G ë‰x‹@(…ÀuöÇG(‰øë‹E ‰4$‰D$èðýÿÿÇ@‹uø‹}üÉÃU1À‰åƒì‹U‹M …Òt'ƒzu‰$è(ôÿÿ…ÀtÇ@4ë ‰M ‰UÉé-ÿÿÿÉÃU‰åSƒìè[…ÀuƒÀ8‰$èlIƒÄ[ÉÃUèY‰å‹Eˆ¾>ÉÃU‰åV‰ÆS¶è[ƒù Çé‰È%à=Àu ¶F%ÀƒÀ€uǶFƒáÁáëF‰È%ð=àuB¶F%ÀƒÀ€u4¶F%ÀƒÀ€u&ǶFƒáÁá ƒà?Áà Á¶Fƒà? Á韉È%ø=ðuT¶F%ÀƒÀ€uF¶F%ÀƒÀ€u8¶F%ÀƒÀ€u*ǶFƒáÁáƒà?Áà Á¶Fƒà?Áà Á¶F딉È%ü=øuq¶F%ÀƒÀ€uc¶F%ÀƒÀ€uU¶F%ÀƒÀ€uG¶F%ÀƒÀ€u9ǶFƒáÁáƒà?Áà Á¶Fƒà?Áà Á¶Fƒà?Áà Á¶Féÿÿÿ‰È%þ=ü…‹¶F%ÀƒÀ€u}¶F%ÀƒÀ€uo¶F%ÀƒÀ€ua¶F%ÀƒÀ€uS¶F%ÀƒÀ€uEǶFƒáÁáƒà?Áà Á¶Fƒà?Áà Á¶Fƒà?Áà Á¶Fƒà?Áà Á¶Féxþÿÿ¶ƒ¡>„Àt ¾ÈÇë ǹÿÿÿÿ[‰È^ÉÃU‰åV‰Æƒì‹…Àt‰$èÁFÇ‹F…Àt‰$è¬FÇF‹F…Àt‰$è–FÇFƒÄ^ÉÃU‰åV‰Æƒì‹…Àt‰$èrF‹F…Àt‰$ècFƒÄ^ÉÃU‰åVƒì‹u…ötO‹…Àt‰$èAF‹F…Àt‰$è2F‹F …Àt‰$è#F‹F…Àt‰$èF‹F…Àt ‰EƒÄ^ÉéFƒÄ^ÉÃU‰åWVƒì …À‰Eð„€‹…Àt‰$èÙE‹EðƒÀ‰$轋EðƒÀ ‰$诋Eð‹@0‰Eôë9‹EôèÒþÿÿ‹Uô‹z ë‰ø‹wèÿÿÿ‰<$èE‰÷…ÿuè‹Eô‹p‰$è|E‰uô‹Eô…ÀuÀ‹Uð‰$ègEƒÄ ^_ÉÃU¹j‰åW‰×Vƒì ‰Eô‹…Ҕ…ÿ”ÀÂtëF¹ ë?‹UôF‰‹Eô‹0€>tç‰<$èWE‰|$‰4$‰D$èQE…ÀuÒ‰<$è;E‹Uô1Éð‰ƒÄ ‰È^_ÉÃU‰åƒì8‰]ô‰Eà‰uø‰}ü‹8¸jè[…ÿtA‹ƒü4‰<$‰Eä‰D$èE…À‰Æt!9Çt€xÿ-t‹Uä‰$èÖD‹Uà‰1Àë¸ ‹]ô‹uø‹}üÉÃU¸j‰åWVƒì ‹}…ÿ„ž‹7ÇD$:‰4$è|D…ÀuÇG‰ðèîúÿÿ…À‰Gtn1ÀëoP)ð‰ÆF‰Uð‰Eô‰4$è0D…À‰GtM‰t$ÇD$‰$è$D‹Eô‰D$‹‰D$‹G‰$è9D‹Eðè’úÿÿ…À‰Gu¤‹G‰$èÔCÇG¸fƒÄ ^_ÉÃU‰åWV‰ÖSƒì\è[…Ò”…ɉE°žÀÂ… ‰÷‰M´;}´ƒö…ÿ„õÇEà¶<&„¬„À~Q¾ÈA÷ƒø–ƒù ”ÀÂu$Aà=ß×v ÿÿ=ýv ÿÿ=ÿÿwÇEà¾7…ö†éŽUà‰øèöùÿÿ‰Æ@÷ƒø–ƒþ ”ÀÂuÔFà=ß×vʆ ÿÿ=ýv½†ÿÿ=ÿÿv°¶ƒF9„À„<¾ð뜃‰2ÇD$‰D$‰<$èëB…ÀuÇEà¾"ƒ}à…ékƒr2ÇD$‰D$‰<$è²B…Àu¾<ÇEàëŃw2ÇD$‰D$‰<$è†B…Àu¾>ÇEà뙃‚2ÇD$‰D$‰<$èZB…Àu¾'ÇEàéjÿÿÿƒ|2ÇD$‰D$‰<$è+B…Àu ÇEàé°ƒ*3ÇD$‰D$‰<$èB…À…Å‹“ö3G1ö‰EȉUÀë7€}»9‹ỦðÁàtÐë €}»F‹ỦðÁàtÉë ‹ỦðÁàt©ÿEÈ‹Eȶ¾ÐˆE»‹EÀ‰ỦT$‰$èxA…Àu§9}È„€}»;…ûF÷ƒø–ƒþ ”ÀÂu(Fà=ß×v† ÿÿ=ýv†ÿÿ=ÿÿ‡À)}È‹EÈ鬃.3ÇD$‰D$‰<$èA…À…“‹ƒò3W1ö‰UЉEÄë ‹U¼¶ÿEÐtBЋEж¾ÐˆE׋EĉU¼‰T$‰$è»@…ÀuÑ9}ÐtL€}×;uFF÷ƒø–ƒþ ”ÀÂu$Fà=ß×v† ÿÿ=ýv †ÿÿ=ÿÿw)}ЋEÐ@‰Eàéýÿÿ€»F9„¤ÇEà¾&é†ýÿÿEç‰ò‰D$‹E°GˆUçƒÀ‰$èÎémüÿÿƒþ&‰ðˆEØÆEÙE؉D$‹E°ƒÀ‰$èm}àéBüÿÿþÿ‰ðÁøƒÈÀˆE؉ðƒà?ƒÈ€ˆEÙÆEÚë¿þÿÿ*‰ðÁø ƒÈàˆE؉ðÁøƒà?ƒÈ€ˆEÙ‰ðƒà?ƒÈ€ˆEÚÆEÛëþÿÿ;‰ðÁøƒÈðˆE؉ðÁø ƒà?ƒÈ€ˆEÙ‰ðÁøƒà?ƒÈ€ˆEÚ‰ðƒà?ƒÈ€ˆEÛÆEÜéJÿÿÿþÿÿÿI‰ðÁøƒÈøˆE؉ðÁøƒà?ƒÈ€ˆEÙ‰ðÁø ƒà?ƒÈ€ˆEÚ‰ðÁøƒà?ƒÈ€ˆEÛ‰ðƒà?ƒÈ€ˆEÜÆEÝéùþÿÿ‰ðÁøƒÈüˆE؉ðÁøƒà?ƒÈ€ˆEÙ‰ðÁøƒà?ƒÈ€ˆEÚ‰ðÁø ƒà?ƒÈ€ˆEÛ‰ðÁøƒà?ƒÈ€ˆE܉ðƒà?ƒÈ€ˆEÝÆEÞé¢þÿÿ1À9}´s¸jƒÄ\[^_ÉÃU‰åW¿ÏV1öSè[ƒì‰Eð‰U샿0‰Eä7‰ÂÁê‹EäÑú ·9Eð}zÿë ·A9Eð~u^f¾‰WëU<>tLEô‰Â‰Eä‹Eàèòÿÿ1Òè#ýÿÿ…Àt¾‹uôëuô‹Uä‰ðGèoòÿÿºèýÿÿ…Àuâ‹W‰Uàë ‹G‰EྋUà‰ñ‰øèœ÷ÿÿ…À…tÿÿÿwƒÄ0‰ð^_ÉÃU‰å츉]ô‰uø‰}ü‰E°‰U¬‰M¨‹xè[€?u¸hÇéÉ ‹E°ƒx8t ‹³?+雋U°‰z‹³?+ë‹M°G‰y¶„Àt¾À‰D$‰4$èù:…Àu߀?„i‰}ä€?<…V‹³_+‰4$èæ:‰t$‰<$‰E¤‰D$èÝ:…À…ù‹³c+}¤‰}Èë‰4$èµ:‰t$‰<$‰D$è¯:…ÀtGG¶¾ÈˆE·A÷ƒø–ƒù ”ÀÂu$Aà=ß×v ÿÿ=ýv ÿÿ=ÿÿw€}·u‰þ+uÈ…öŽ· €}·„­ F‰$è :‹U¬…À‰B„” ‹Mȉt$‰$‰L$è&:‹U¬‹BÆ0ƒ¦*èrðÿÿ‹M¬…À‰„_ ÇA‹ƒc+‰$èà9‹}°‰Eä‰Gë;‹³O+‰4$èÄ9‰t$‰<$‰D$è¾9…Àu Eäèôÿÿ…À… ‹}ä‹E°‰x1Àé ‹³G+‰4$è‚9‰t$‰<$‰D$è|9…À…½‹³;+‰4$è\9‰t$‰<$‰D$èQ9…À„®‹³K+‰4$è69‰t$‰D$‹Eä‰$è(9…À„…‹³G+‰4$è 9‰t$‰D$‹Eä‰$èÿ8…Àu;‹ƒC+‹}ä‰D$‰<$èõ8…À‰Æ„A9Ç„9‹ƒG+‰$èÁ8‰Eä‹}ä‹U°‰zéÿÿÿ‹M°ÇA8éÿÿÿ‹E°“*‹x‰x‰}ä‰U”ë‹E„@‰Eä‹Mä‰M„¶<<ˆEÏt/‹}”‰Î¹üÇE ó¦¸t ¶Fÿ¶Oÿ)È…Àt€}Ïuº‹u„¹‹}”üÇEœó¦¸t ¶Fÿ¶Oÿ)È…À„}‹}°‹u„‰øƒÀ+w‰$賋W‰ø‰ñèôóÿÿ…À…S‹G…À„HèIîÿÿ‹U¬…À‰B„5ƒµ*è0îÿÿ‹M¬…À‰„ÇAwé þÿÿ‹E°G‰x¶„Àt¾À‰D$‰4$ès7…Àuß‹E°èîúÿÿ…Àu‹U°‹B0…Àu ‹B€8„Êýÿÿ‹M°‹y …ÿ„Ä‹y¶7‰ð<>„¬ýÿÿ‹ƒ[+‰<$‰D$è'7…À…Ö‹E°è”úÿÿ…À„Š‹U°‹B…À„|èvíÿÿ‹M¬…À‰„qÇAÇA‹»?+‰}¸ë ‹E°~‰x‹U°‹r¶„Àt‹M¸¾À‰D$‰ $è¤6…ÀuÔ‹E°èúÿÿ…À„‹}°‹…ÿ‰}„„ƒ'*‰þüÇE˜‰Ç¹ó¦¸t ¶Fÿ¶Oÿ)È…À…Ò‹M¨ÇéЉð<<…‹E°è´ùÿÿ…À„ª‹U°‹B…À„œè–ìÿÿ‹M¬…À‰„‘‰D$‹E°ƒÀ ‰$èY…À…i‹}¬‰<$è:ñÿÿ…À…VÇGÇG‹U°‹B‰B‰ÐèAùÿÿ…À„7‹M°»y*ü‹I‰}€‰MЋuйó¦¸t ¶Fÿ¶Oÿ)È…Àu‹M°‹yÇA8‰yéü‹uл'*¹ü‰}€ó¦¸t ¶Fÿ¶Oÿ)È…Àu‹M°ÇA8éÄ‹}°ÇG8‹E°‹xé˜ûÿÿ‹ƒW+‰<$‰D$è5…Àu5‹U°‹B …À„èyëÿÿ‹M¬…À‰„tÇA‹}¨ÇéPûÿÿ‹E°ƒx8…K‹p0…ö„@…ÿÇEä„1U䉸è_ëÿÿ1Òèóõÿÿ…À„‰øèëÿÿ‹U¬…À‰„‹E°èþ÷ÿÿ…À„ô‹M°‹A€8=…å‰Èèà÷ÿÿ…À„Ö‹}°‹O¶<"•Â<'•À„Ð…»‹w‰L$‰4$èO4…À‰Çué¡¶<<„–<&”À¶Àt9þrå‹E°ƒÀ‰$è½ ‹E°‹P9×t‰ù)Ñè÷ïÿÿ…À…]‹U°G‹B‰z…ÀtèIêÿÿ‹M¬…À‰Aué;Ç$è‘3‹}¬‰GÆ‹E¬»»*üÇ@‹U°‹R0‰UÄ‹‰}€‰M¼‹u¼¹ó¦¸t ¶Fÿ¶Oÿ)È…Àu!‹MÄ‹A…Àt‰$è&3‹}¬‹G…ÀuvéI‹u¼»Á*¹ü‰}€ó¦¸t ¶Fÿ¶Oÿ)È…À…‹M¬‰ $èaîÿÿ…À…„‹MÄ…É„y‹}Ä‹W…Òt,‹M¬‹A‰$‰D$èâ2…Àu‹}¬‹GèMéÿÿ‹UĉBéÀ‹MÄ‹q ‰÷ë"‹V…Òt‹}¬‹G‰$‰D$è¥2…Àt~‰÷‹v…öuÚÇ$ èi2…À‰Æ„ýÇÇ@Ç@‹U¬‹BèÝèÿÿ…À‰Ft‹M¬‹AèËèÿÿ…À‰u‰ðè‰ëÿÿ‰4$è 2鲋EÄ‹P …Òu‰p ë(‰wë#‹…Àt‰$èã1‹U¬‹Bè„èÿÿ‰…À„{‹M°‹I,…ɉMÀ„Ø‹}°‹w0‹y…ÿuA‹‰D$‹‰$èÒ1…À…E‹F…Àtè8èÿÿ‹UÀ…À‰B „+‹M°ÇA,銋‹UÀ‰D$‹‰$èŽ1…Àt‹F‰<$‰D$è{1…À…î‹~‰|$‰<$èd1…Àt%‹v ë‰|$‹F‰$èL1…Àt ‹v…öuæë(‹ë‹F…Àtè©çÿÿ‹MÀ…À‰A „œ‹}°ÇG,‹U°‹B‰B‰Ðè„ôÿÿ…Àt~‹M°»!*ü‹I‰}€‰MÔ‹uÔ¹ó¦¸t ¶Fÿ¶Oÿ)È…ÀtL‹uÔ»'*¹‰}€ó¦¸t ¶Fÿ¶Oÿ)È…Àt‹M°‹A‰Aé÷ÿÿ‹}°ÇG8éÿöÿÿ¸jë ¸ ë¸f‹]ô‹uø‹}üÉÃU‰åWVSè[ìŒÇ$@è-0ÇEˆf…À‰E„„C‹}„1À¹üó«‹E„ƒÀ‰$軋E„ƒÀ ‰$è­‹E…À„ƒÓ‰D$‹E ‰$è¹/…À‰Æ„ÇD$ÇD$‰$è¦/‰4$è£/…À‰Çu‰4$è|/ÇEˆ é®@‰$èƒ/‹U„…À‰u‰4$èT/ÇEˆfé†ÇD$ÇD$‰4$èD/‹M„‰t$ ‰|$ÇD$‹‰$è/‹M„‹Æ‰4$è/‹U„M ‹‰B‰M€‰ $ÇEÜÇEàÇEäÇEØè´ÓÿÿE܉$è …À‰Eˆt"éá‹E èlåÿÿ‹U„…À‰ÇEˆfuŸéÚ‹EÜ‹M„‰A4‹³J ëÇEˆe齋U„G‰B‹M„‹y¶„Àt¾À‰D$‰4$è‘.…Àu׋³F ‰4$è“.‰t$‰<$‰D$è.…ÀuP‹E„‹“N ƒÀèÒèÿÿ‹»J ‰Eˆë ‹U„F‰B‹M„‹q¶„Àt¾À‰D$‰<$è*.…Àu׋Eˆ…À… ‹E„èjðÿÿ…À‰Eˆ…ù‹³B ‹E„‹x‰4$è.‰t$‰<$‰D$è.…Àum‹U„G¾‰Á‰×ƒÇ…À‰Bu5é‚<uNë!<"uAÇD$"‰$è-…À‰Á„}A…ɕ…ö•À„Ðt¶„Àu»…ö…_‰‹E„èÂïÿÿ…À‰Eˆ…Q‹Eà…À…‹M€‰ $è÷Ñÿÿ‹U€Mà‹E„èËñÿÿ…À…î‹Eà…À…4‹E¨ƒø„…w H…·ëƒø„ƒø…£é%‹E„ÇEÔ‹U܃x<u ‹@0…Àu鯋M„ÇA<‹M„‹A‰AEÔ‰D$‹E ‰$‰D$èÈ…À‰Eˆ…™‹E€‰D$‹EÔ‰$èùØÿÿ…À‰Eˆ…h‹}°…ÿth‹U„‹R0‰UŒëT‹ë ‹MŒ‹A…Àt‰|$‰$èi,…Àu ‹UŒ‹B‹uÔëO‹MŒ‹q ë‰|$‹F‰$èC,…Àt¼‹v…öuæ‹EŒ‹@‰EŒ‹EŒ…Àu©ëG‹M„‹Q0‹MÔë‹r…öu‹B…Àt‰Î…öuë/‹R…Òuã‹E„ƒx8uë‹V …Òuèaâÿÿ‰F ‹uÔë ‹uÔ‹U„‰r,‹M„‰t$‹A4‰$è1Ùÿÿ…À‰Eˆ…Œ‹}Ô‹E„…ÿ‰x4„:Ç$èy+…À‰Æt7ÇÇ@Ç@Ç@ Ç@‹èçáÿÿ…À‰u‰4$è-+ÇEˆfé:‹G…Àt èÁáÿÿ…À‰Ft‹G …Àtè®áÿÿ…À‰Fu ‰ðèäÿÿ뽋U„‹B0‰F‰r0é¥Eä‰D$‹E¤‰D$‹E܉$è½…À‰Eˆ…Ö‹Eä‹M„‰D$‹A4ë1E؉D$‹E¤‰D$‹E܉$èó…À‰Eˆ…£‹EØ‹U„‰D$‹B4‰$èØÿÿé“‹MÜ‹U„ÇEÔ‹} ‰M‹B4‹p,ë‰|$‹‰$èy*…À„Q‹v(…öuã‹MEÔ‰D$‰|$‰ $èê…À‰Eˆ…0‹E€‰D$‹EÔ‰$èÖÿÿ…À‰Eˆ…‹EÔ‹U„ÇD$‰D$‹B4‰$èf…À‰Eˆ„éæƒ}¨u`‹M„‹E ‹I0‰D$‰M”‹‰$èß)…À…·‹U”‹M„‹B‰A0‰Ðèºâÿÿ‹E”‹x ë‰ø‹wè÷âÿÿ‰<$èx)‰÷…ÿuè‹U”‰$èg)‹M„‹q4‹‰D$‹E ‰$è‚)…Àu^‹F‹U„‰B4ÇB8ÇEˆ‹M€ÇEà‰ $èÆâÿÿéæûÿÿƒ}àt ÇEˆjë(‹E„‹@0…Àu‹EÜ‹U‰ë*‹EÔ‰$è ëÇEˆ ‹M€‰ $èâÿÿ‹E܉$èM‹E„èÏâÿÿ‹EˆÄŒ[^_ÉÃU‰åW‰×V‰Æƒì ‹@9Ðw‹N9Êv`)‰ЋV 9ÐBÂÁ‰Môë‹F‹V )ø9ÐvA‰Uô‹Eô@‰D$‹‰$è(…ÀuG‰D$‹‰$èx(ºf…Àt ‰}ô‰‹Eô‰F1ÒƒÄ ‰Ð^_ÉÃU‰å‹EÇ@ ÇÇ@Ç@ÉÃU‰åƒì(‰uø‹u‰}ü‹}…öx{‹O9Ît‹U ‹EÇEô…Ҕ…À”ÀÂu`‹E‰øèÿÿÿ…À‰EôuL‰ò‹G‰T$)ðU‰D$‰$èÄ'‹E7‰D$‹E ‰4$‰D$è§'‹U‹W‰WÆëÇEô‹Eô‹uø‹}üÉÃU‰åƒì‰}ü‹}‰uø‹u ‹G‰4$‰D$ è‹'‰t$‰<$‰D$è,ÿÿÿ‹uø‹}üÉÃU‰åƒì‹U‹BÇD$‰$‰D$ ‹E ‰D$èýþÿÿÉÃU‰åVƒì‹u…öt%‹‰$èö&ÇF ÇÇFÇFƒÄ^ÉÃU‰åƒì‹M ‰}ü‹}‰uø…Éu‹E1ö‰$è¤ÿÿÿë4‹E‰úèëýÿÿ…À‰Æu$‹U‹‹U ‰|$‰$‰T$èœ&‹U‹Æ8‰z‰ð‹}ü‹uøÉÃU‰åVƒì‹u ‰4$èœ&‰t$‰D$‹E‰$èxÿÿÿƒÄ^ÉÃU‰å‹EÇÇ@ÉÃU1À‰å‹Uë‹R@…ÒuøÉÃU‰åVƒì‹Eë ‹p‰$è&‰ð…ÀuïƒÄ^ÉÃU‰å‹MV…Ét1‰Ê1À‹R@…ÒuøH1ö;E rë‹IF;u ’Â…É•À„Ðuí…Ét‹ë1À^ÉÃU¸j‰åWVƒì‹} ‹u…ÿta‹…ÒuÇ$è %…À‰tDÇÇ@‹6‹…Àu‰>ë'‹F…Àt‰ÆëõÇ$èj%…Àt‰F‰8Ç@1Àë¸fƒÄ^_ÉÃU‰å‹UW…Òt ü¹1À‰×ó«_ÉÃU1À‰å‹U…Òt‹B4ÉÃU¹j‰åƒì‰uø‹u‰}ü‹} …ö”Â…ÿ”ÀÂu"‹F4…Àt‰$èÜ$‰<$è %ƒøɉF4ƒáf‹uø‰È‹}üÉÃU‰åWVƒì‹M‹} …ɔ…ÿ”ÀÂu#‹q,ë‰|$‹‰$èÂ$…Àu‹Fë ‹v(…öuâ1ÀƒÄ^_ÉÃU¹i‰åWVƒì ‹E‹} …À”Â…ÿ”ÀÂ…»‹U±‹G0;B0…ª‹w8± …ö…‰W8‹B,‰Æ‰Eô닉D$‹‰$èI$…Àt‹v(…öuå‹Mô…Éu/ëF‹F$‹V(…Àt‰x(…Òt‰z$‹U;r,u‰z,‹U…ÒtD‹E‰0ë=‹Uô‹B(ë‰Â‹@(…Àu÷‰z(‰W$ë‹EÇG$ÇG(‰x,‹E…Àt ‹UÇ1ÉƒÄ ‰È^_ÉÃU‰åWVƒì ‹E‹} …À”Â…ÿ”ÀÂ…ê‹E…À„߉<$èŒåÿÿº…À„Ó‹E‹p,ë‰|$‹‰$èj#…À„„‹v(…öuã‹UEô‰D$‰|$‹B0‰$èØ f…À¿Ð…‰‹E‹uô‰$è-#…À‰Fu‹Eô‰$è:ºfëb‹Eô‹UÇD$‰D$‰$èLþÿÿf…À‰Æt?‹Eô‰$è¿Öë1‹F…Àt‰$è"‹E‰$èÉ"ºf…À‰Fu ë ºië1ÒƒÄ ‰Ð^_ÉÃU¹i‰åWVƒì‹u‹} …ö”Â…ÿ”ÀÂu8‹v,ë‰|$‹‰$èp"…Àt ‹v(…öuçë‹F…Àt‰$è""ÇF1ɃĉÈ^_ÉÃU‰åWVƒì‹u‹} …ö”Â…ÿ”À1ÉÂu ‹v,ë‰|$‹‰$è"…Àt‹v(…öuç‰ñƒÄ‰È^_ÉÃU‰åWVƒì‹E‹} ‹p,ë‰|$‰4$èAÊÿÿHt‹v(…öuêƒÄ‰ð^_ÉÃU‰åVƒì$‹u‹M ÇEô…ö•Â…É•À„ÐtEô‰D$‰L$‰4$è/Òÿÿ‹EôƒÄ$^ÉÃU‰åƒì‹M‰}ü‹} ‰uø…ɔ…ÿ”ÀÂuA‹E…Àt:‹q,ë1‹E‰D$‹F‰$èM!…Àu‰|$‹F ‰$è:!…Àu‹Fë ‹v(…öuË1À‹uø‹}üÉÃU¹i‰åWVƒì ‹U‹} …Ҕ…ÿ”ÀÂ…Ò‹U±‹G0;B0…Á‹G8…Àt 9± …°‹E‰G8‹P,‰Ö‰Uôë/‹G‰D$‹F‰$è· …Àu‹G ‰D$‹F ‰$è¡ …Àt‹v(…öuÍ‹Eô…Àu*ë>‹F$‹V(…Àt‰x(…Òt‰z$‹E;p,u‰x,‹U1ɉ2ë<‹Uô‹B(ë‰Â‹@(…Àu÷‰z(ë‹EÇG$ÇG(‰x,‹E1É…Àt ‹UÇƒÄ ‰È^_ÉÃU‰åWVS윋E è[…À”À‰Ç‹E‰ú…À”ÀÂ…m‹E‹u…À”Â…ö”ÀÂ…U‹E¾‰$èÉáÿÿ…À„BU°f¾f‰U¤‰$èSÄÿÿ‹E‰$誅À‰E°„‹U¤‰$èßÚÿÿ…À‰Æt‹}¤‰<$èïØÿÿéù‹EÀ‰ú…À‰E •À„Ð…’‹u »¹ü‰}”ó¦¸t ¶Fÿ¶Oÿ)È…Àu‹} ƒƒ‰D$‰<$è&…ÀuP‹uƒo¹ü‰Çó¦¸t ¶Fÿ¶Oÿ)È…Àu=‹u »ª¹‰}”ó¦¸t ¶Fÿ¶Oÿ)È…Àt‹}¤¾‰<$è3Øÿÿé=‹E‹}Ä‹p,ë,‰|$‹F‰$装Àu‹U ‰T$‹F ‰$è…Àt6‹v(…öuÐEä‹}‰D$ ‹U‹E ‰|$‰D$‹B0‰$è©…À‰Æ…Õëm‹F…Àt‰$è‹}À‰} ‹E ‰$è8…À‰Fu‹U¤‰$ë2‹F…Àt‰$èã‹}‰<$è…À‰Fuo‹F‰$èÆ‹E¤‰$è^×ÿÿ¾fëf‹U‹uä‰$è݉F‹Eä‹H…Éu ‰$èçëÔ‹}ÇD$‰D$‰<$èŠüÿÿ…Àt‹Eä¾j‰$èºë‹E¤1ö‰$èøÖÿÿë¾iÄœ‰ð[^_ÉÃU‰åWVƒì‹M‹E ‹}…ɔ…À”ÀÂuU…ÿtQ‹q,ë,‰|$‹F‰$è<…Àu‹E ‰D$‹F ‰$è&…Àt ‹v(…öuÐë‹F…Àt‰$èØÇF1Àë¸iƒÄ^_ÉÃU‰åWVƒì‹M‹E ‹}…ɔ…À”ÀÂu=…ÿt9‹q,ë,‰|$‹F‰$è¼…Àu‹E ‰D$‹F ‰$覅Àt‹v(…öuЉðë1ÀƒÄ^_ÉÃU‰åƒì(‰}ü‹}‰uø‹u ‹MÇEô…ÿ•Â…ö•À„Ðt…ÉtEô‰D$ ‰L$‰t$‰<$è”Îÿÿ‹Eô‹uø‹}üÉÃU‰åWVƒì‹M‹} …ɔ…ÿ”ÀÂu"‹q,ë‰|$‹‰$è…Àu°ë ‹v(…öuã1ÀƒÄ^_ÉÃU‰åWVƒì‹M‹E ‹}…ɔ…À”ÀÂu=…ÿt9‹q,ë0‰|$‹F‰$èÀ…Àu‹E ‰D$‹F ‰$誅Àu°ë ‹v(…öuÌ1ÀƒÄ^_ÉÃU‰å‹E…ÀtÉéÉÀÿÿÉÃU¹i‰åWVƒì‹U‹} …Ҕ…ÿ”ÀÂu`‹E‹p,ë‰|$‰4$è°ÃÿÿHt‹v(…öuê¹ë;‹F$‹V(…Àt‰P(…Òt‰B$‹E;p,u‰P,ÇF1ÉÇF$ÇF(‹E‰0ƒÄ‰È^_ÉÃU‰å‹UW…Òt ü¹1À‰×ó«_ÉÃU‰å‹E…ÀtÉéÀÿÿÉÃU¹ ‰å1ÀW‹}üó«_ÉÃU‰å‹E…ÀtÉéí¿ÿÿÉÃU‰åWVƒì‹}‹u ë!‰~0‰4$èæÁÿÿ‰<$‰D$èÙÿÿÿ‰4$èÂÿÿ‰Æ…öuÛƒÄ^_ÉÃU¹i‰åWVƒì‹}‹u Ç‹E…À”Â…ö”ÀÂu@‰4$èpÁÿÿ¹ fƒø t-‹E‰4$‰D$è[Ðÿÿ¹j…À‰Æt‰D$‹E‰$è^ÿÿÿ1ɉ7ƒÄ‰È^_ÉÃU¹i‰åWVƒì‹U‹} …Ҕ…ÿ”À1öÂu\Ç$8裹f…À‰ÆtE‰$èFôÿÿ‰<$è°…À‰F4tÇF‰<$èš…À‰u‰4$1öèóýÿÿ¹fë‹E1ɉF0‹E‰0ƒÄ‰È^_ÉÃU‰åƒì(Eô‰D$‹E ÇEô‰D$‹E‰$èMÿÿÿ‹EôÉÃU‰åƒì(‹M‰}ü‹} ‰]ôè[…ɹi”Â…ÿ”À‰uø1öÂufÇ$4èÞ¹f…À‰ÆtO‰$葽ÿÿƒƒ‰$èå…À‰t…ÿt ‰<$èÓ…À‰Fu‰4$1öè¾ÿÿ¹fëÇF‹E1ɉF0‹E‰0‹]ô‰È‹uø‹}üÉÃU‰åƒì(Eô‰D$‹E ÇEô‰D$‹E‰$è2ÿÿÿ‹EôÉÃU‰åVƒìÇ$<è4ºf…À‰Æt^‹E…À‹E ”Â…À”ÀÂt‰4$1öèRýÿÿºië9‰4$è)ýÿÿÇF‹E ‰$è…À‰u‰4$1öè!ýÿÿºfë‹E1Ò‰F0‹E‰0ƒÄ‰Ð^ÉÃU‰åƒì(Eô‰D$‹E ÇEô‰D$‹E‰$èQÿÿÿ‹EôÉÃU‰åWVƒì ‹M‹u ‹}ÇEô…ɔ…ö”ÀÂut…ÿtpEô‰D$‰|$‰ $èÿÿÿ…À‰Æu\‹E ‹uô‰$èj‰F ‹Eô‹P …Òu‰$¾fèoüÿÿÇEôë+‰|$‰$è_Áÿÿ…À‰Æt‹Eô‰$èIüÿÿÇEôë¾i‹E‹Uô‰ƒÄ ‰ð^_ÉÃU‰åƒì(Eô‰D$ ‹EÇEô‰D$‹E ‰D$‹E‰$è#ÿÿÿ‹EôÉÃU¹i‰åƒì(‹E‰}ü‹} ‰]ôè[…À”Â…ÿ”À‰uø1öÂubÇ$4èu¹f…À‰ÆtK‰$è<»ÿÿƒÇF‰$èu…À‰t‰<$èg…À‰Fu‰4$1öèÚ»ÿÿ¹fë‹E1ɉF0‹E‰0‹]ô‰È‹uø‹}üÉÃU‰åƒì(Eô‰D$‹E ÇEô‰D$‹E‰$è6ÿÿÿ‹EôÉÃU‰åWVƒì ‹M‹} ÇEô…ɔ…ÿ”ÀÂ…‹u…ö„„Eô‰D$‹E‰ $‰D$èÈûÿÿ…À‰Çum‹U ‹uô‰$讉F ‹Eô‹P …Òu‰$f¿fèþùÿÿÇEôë=‹U‰$‰T$è¡¿ÿÿ…Àt‹Eô¿f‰$èÒùÿÿÇEôë‹EôÇ@ë¿i‹E‹Uô‰ƒÄ ‰ø^_ÉÃU‰åƒì(Eô‰D$ ‹EÇEô‰D$‹E ‰D$‹E‰$èÿÿÿ‹EôÉÃU‰åƒì(‰}ü‹}‰uø‹u ÇEô…ÿ”Â…ö”À1ÉÂuEô‰D$‰t$‰<$èfÅÿÿ‹Mô‹uø‰È‹}üÉÃU‰åVƒì$‹u‹M ÇEô…ö”Â…É”ÀÂu&‹E…ÀtEô‰D$ ‹E‰L$‰4$‰D$èÆÆÿÿ‹Eôë1ÀƒÄ$^ÉÃU‰åWVƒì‹u‹} …ö”Â…ÿ”ÀÂuP‰4$è„»ÿÿfHu ‰4$èÙ¹ÿÿ…Àt8‰D$‰<$è.…Àu‰ðë&‰4$è{»ÿÿ‰|$‰$è¤ÿÿÿ…Àu‰4$襻ÿÿ‰Æë¢1ÀƒÄ^_ÉÃU‰åƒì(‰]ôè[‰uø‰}üÇ$4赺f…À‰Æt=ü1À¹ ‰÷ó«ƒ×‰$踅À‰u‰4$1öèê¸ÿÿºfë ÇF 1Ò‰v0‹E‰0‹]ô‰Ð‹uø‹}üÉÃU‰åƒì(EôÇEô‰$èmÿÿÿ‹EôÉÃU‰åWVƒì‹M‹E …ɔ…À”ÀÂu#‹11ÿ닉D$‹E ‰$è.…Àt ‹v(G…öuã¿kƒÄ‰ø^_ÉÃU‰å‹EÇÇ@ÉÃU1À‰å‹U…Òt ‹ë‹R(@…ÒuøÉÃU‰åVƒì‹Eë ‹p‰$蜉ð…ÀuïƒÄ^ÉÃU‰å‹EW‹} V…Àt-‹1À‰Êë‹R(@…ÒuøH1ö9øsë‹I(F9þ’Â…É•À„Ðuîë1É^‰È_ÉÃU1À‰åWVƒì‹} ‹u…ÿta‹…ÉuÇ$è5…À‰tDÇÇ@‹6‹…Òu‰>ë'‹F…Àt‰ÆëõÇ$èÿ…Àt‰F‰8Ç@1Àë¸fƒÄ^_ÉÃU‰åWVƒì ‹U‹u …Ò”Eó…ö”À Eóug‹:ÇEô‰þ닉D$‹E ‰$èÆ…Àt ‹v(ÿEô…öuáë9‹Môƒùkt11À‰ú€}óu'ë‹R(@…ÒuøH1ö9Ávë‹(F9Î’Â…ÿ•À„Ðuîë1ÿƒÄ ‰ø^_ÉÃ<>&'" =""<> > #document*/>01234567890123456789ABCDEFabcdef&#x&##cdata-section#textxmlnsxmlns:rbxmlhttp://www.w3.org/XML/1998/namespacehttp://www.w3.org/2000/xmlns/9_C_J_O_ü^R_Y_^_b__î^ø^e_p_--..09··ÐÐÑÑE`a‡‡ƒ†‘¡£¹»½¿¿ÁÂÄÄ@@KR`ippÖÜÝßàäçèêíðù  < < > L M M Q T b c f o ƒ ¼ ¼ ¾ ¾ ¿ ¿ À Ä Ç È Ë Í × × â ã æ ï   < < > > ? ? @ B G H K M f o p q ƒ ¼ ¼ ¾ Å Ç É Ë Í æ ï   < < > C G H K M V W f o ‚ ƒ ¾ Â Æ È Ê Í × × ç ï   > D F H J M U V f o ‚ ƒ ¾ Ä Æ È Ê Í Õ Ö æ ï   > C F H J M W W f o 114:FFGNPY±±´¹»¼ÆÆÈÍÐÙ )557799>>??q„†‹•——™­±·¹¹Ð Ü á á 00*0/01050™0™0š0š00ž0ü0þ0::AZ__azÀÖØöøÿ14>AHJ~€ÃÍðôõúP¨»Á††ˆŠŒŒŽ¡£ÎÐÖÚÚÜÜÞÞààâó OQ\^ÄÇÈËÌÐëîõøù1VYYa†Ðêðò!:AJq·º¾ÀÎÐÓÕÕåæ 9 = = X a … Œ “ ¨ ª ° ² ² ¶ ¹ Ü Ý ß á ð ñ     ( * 0 2 3 5 6 8 9 Y \ ^ ^ r t … ‹ ‘ “ ¨ ª ° ² ³ µ ¹ ½ ½ à à     ( * 0 2 3 6 9 = = \ ] _ a … Š Ž ’ • ™ š œ œ ž Ÿ £ ¤ ¨ ª ® µ · ¹     ( * 3 5 9 ` a … Œ Ž ’ ¨ ª ³ µ ¹ Þ Þ à á     ( * 9 ` a .0023@E‚„„‡ˆŠŠ”—™Ÿ¡£¥¥§§ª«­®°°²³½½ÀÄ@GIi ÅÐö    <<>>@@LLNNPPTUYY_acceeggiimnrsuužž¨¨««®¯·¸ºº¼Âëëððùù› ù EHMPWYY[[]]_}€´¶¼¾¾ÂÄÆÌÐÓÖÛàìòôöü&!&!*!+!.!.!€!‚!00!0)0A0”0¡0ú01,1N¥Ÿ¬£×ààôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô` `$`(`,`0`4`8`<`@`D`H`L`P`T`ì þ h  | * Œ < »&I ô&[ 7)x †)Š *— ¯*ª "+¾ N,Ð 1ã Ž2ô ¾3 Æ4TG3`E `T$`](`i,`q0`{4`…8`”<`¡@`®D`¶H`¿L`ÆP`ÓT`à``ê`bò¤eÓ?²)-@2Dà&Y‘+eUKU"Ê9øPXd`X‚×W¢;Y‹XäZmY(Ã\EH\dÙV€LVž[¼?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤Þ (}•(#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·_ixmlAttr_free_ixmlAttr_init_ixmlCDATASection_free_ixmlCDATASection_init_ixmlCloneDOMString_ixmlDocument_createAttribute_ixmlDocument_createAttributeEx_ixmlDocument_createAttributeNS_ixmlDocument_createAttributeNSEx_ixmlDocument_createCDATASection_ixmlDocument_createCDATASectionEx_ixmlDocument_createDocument_ixmlDocument_createDocumentEx_ixmlDocument_createElement_ixmlDocument_createElementEx_ixmlDocument_createElementNS_ixmlDocument_createElementNSEx_ixmlDocument_createTextNode_ixmlDocument_createTextNodeEx_ixmlDocument_free_ixmlDocument_getElementById_ixmlDocument_getElementsByTagName_ixmlDocument_getElementsByTagNameNS_ixmlDocument_importNode_ixmlDocument_init_ixmlDocument_setOwnerDocument_ixmlDocumenttoString_ixmlDomTreetoString_ixmlElement_findAttributeNode_ixmlElement_free_ixmlElement_getAttribute_ixmlElement_getAttributeNS_ixmlElement_getAttributeNode_ixmlElement_getAttributeNodeNS_ixmlElement_getElementsByTagName_ixmlElement_getElementsByTagNameNS_ixmlElement_getTagName_ixmlElement_hasAttribute_ixmlElement_hasAttributeNS_ixmlElement_init_ixmlElement_removeAttribute_ixmlElement_removeAttributeNS_ixmlElement_removeAttributeNode_ixmlElement_setAttribute_ixmlElement_setAttributeNS_ixmlElement_setAttributeNode_ixmlElement_setAttributeNodeNS_ixmlElement_setTagName_ixmlFreeDOMString_ixmlLoadDocument_ixmlLoadDocumentEx_ixmlNamedNodeMap_addToNamedNodeMap_ixmlNamedNodeMap_free_ixmlNamedNodeMap_getItemNumber_ixmlNamedNodeMap_getLength_ixmlNamedNodeMap_getNamedItem_ixmlNamedNodeMap_init_ixmlNamedNodeMap_item_ixmlNodeList_addToNodeList_ixmlNodeList_free_ixmlNodeList_init_ixmlNodeList_item_ixmlNodeList_length_ixmlNode_allowChildren_ixmlNode_appendChild_ixmlNode_cloneAttr_ixmlNode_cloneAttrDirect_ixmlNode_cloneCDATASect_ixmlNode_cloneDoc_ixmlNode_cloneElement_ixmlNode_cloneNode_ixmlNode_cloneNodeTree_ixmlNode_cloneNodeTreeRecursive_ixmlNode_cloneTextNode_ixmlNode_compare_ixmlNode_free_ixmlNode_freeSingleNode_ixmlNode_getAttributes_ixmlNode_getChildNodes_ixmlNode_getElementsByTagName_ixmlNode_getElementsByTagNameNS_ixmlNode_getElementsByTagNameNSRecursive_ixmlNode_getElementsByTagNameRecursive_ixmlNode_getFirstChild_ixmlNode_getLastChild_ixmlNode_getLocalName_ixmlNode_getNamespaceURI_ixmlNode_getNextSibling_ixmlNode_getNodeName_ixmlNode_getNodeType_ixmlNode_getNodeValue_ixmlNode_getOwnerDocument_ixmlNode_getParentNode_ixmlNode_getPrefix_ixmlNode_getPreviousSibling_ixmlNode_hasAttributes_ixmlNode_hasChildNodes_ixmlNode_init_ixmlNode_insertBefore_ixmlNode_isAncestor_ixmlNode_isParent_ixmlNode_removeChild_ixmlNode_replaceChild_ixmlNode_setLocalName_ixmlNode_setNamespaceURI_ixmlNode_setNodeName_ixmlNode_setNodeProperties_ixmlNode_setNodeValue_ixmlNode_setPrefix_ixmlNode_setSiblingNodesParent_ixmlNodetoString_ixmlParseBuffer_ixmlParseBufferEx_ixmlPrintDocument_ixmlPrintDomTree_ixmlPrintDomTreeRecursive_ixmlPrintNode_ixmlRelaxParser_ixml_membuf_append_ixml_membuf_append_str_ixml_membuf_assign_ixml_membuf_assign_str_ixml_membuf_destroy_ixml_membuf_init_ixml_membuf_insert_fclose_fopen_fread_free_fseek_ftell_malloc_memcpy_memmove_memset_realloc_strchr_strcmp_strdup_strlen_strncasecmp_strncmp_strncpy_strstrsingle module__mh_dylib_headerdyld_stub_binding_helper__dyld_func_lookup_copy_with_escape_safe_strdup_Parser_UTF8ToInt_Parser_freeElementStackItem_Parser_freeNsURI_Parser_free_Parser_skipString_Parser_skipComment_Parser_copyToken_Parser_isNameChar_Parser_skipMisc_Parser_getNextToken_Parser_getNextNode_ixml_membuf_set_sizedyld__mach_header_BEGIN_DOCTYPE_XMLDECL_WHITESPACE_END_PI_BEGIN_PI_XMLDECL2_BEGIN_COMMENT_END_COMMENT_COMPLETETAG_ENDTAG_CDSTART_CDEND_DEC_NUMBERS_HEX_NUMBERS_NameChar_Letter_g_error_char_Parser_LoadDocument_Parser_freeNodeContent_Parser_isValidXmlName_Parser_setErrorChar_Parser_setNodePrefixAndLocalNameamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Frameworks/libthreadutil.2.dylib0000755000175000017500000013560410753565633027341 0ustar l3onl3onÊþº¾M `[„ þíúÎè…H__TEXT00__text__TEXT$L€__picsymbolstub1__TEXT*Üà*Ü€ __cstring__TEXT-¼+-¼__literal8__TEXT/è/èH__DATA00__data__DATA00__dyld__DATA00__la_symbol_ptr__DATA0 \0 __nl_symbol_ptr__DATA0h0h.8__LINKEDIT@@  P@executable_path/../Frameworks/libthreadutil.2.dylib@ÀQGä8 P+9EL+F¤FØCDŒ0@ 4/usr/lib/libgcc_s.1.dylib 4X/usr/lib/libSystem.B.dylib|¦BŸ}ˆ¦|¦}€cx=ŒŒ)l}‰¦| x=ŒŒ)hN€ }‹cxKÿÿÌ|¦BŸ}h¦|¦=kk)8}i¦N€ |¦“áÿüBŸè¦”!ÿ <8c&È88Kÿÿ½€8/€Až| ¦<| x€c)tN€!8!`€ƒáÿü|¦N€ ,8A‚8ƒ£ |xN€ |iy8`M‚ €i/ƒ@ž €iH#´€I €8Bÿÿ I N€ |¦,9 ”!ÿ°A‚D/„Až0€C €8B‚@œ€9 C ƒH|ƒ#xH# 9 8!P}#Kx€|¦N€ |¦¿¡ÿô|~y8`”!ÿ°@‚H ƒ£H"É“¾€~/ƒ@žÿì~ 8!P€»¡ÿô|¦N€ |¦¿¡ÿô|~y8`”!ÿ°A‚D; ž0¾,“¾8~8€ 8 dKÿþ­8 “¾“¾“¾“¾“Þ 8`8!P€»¡ÿô|¦N€ |¦¿ÿð|~y|œ#x|½+x”!ÿ°A‚L/…AžD8~Kÿþq,A‚48“£“ƒ=}i‘#€^8B^H8`8!P€»ÿð|¦N€ |eyM‚ 8¥ Kÿÿt|¦¿ÿð|}y|¼+x”!ÿ°A‚x Ažp8 „Ažd/„Až\$€8}ƒÄ €D‘"Kÿýñ€]/œ8Bÿÿ]Až,€,/€Až | ¦Ãóx| x;ÀN€!H;À8!PÃóx€»ÿð|¦N€ |¦¿aÿì|~y|›#x8`”!ÿ A‚@€ž;ž Hƒ¤ÃóxeÛxKÿÿ¤ëx„à@žÿè88~Kÿý±8`8!`€»aÿì|¦N€ ,A‚€/€Až €cN€ 8`N€ ,A‚€/€Až €c N€ 8`N€ |byA‚/„Až€d8 ƒLž 8`N€ |`yA‚/„Až€dƒLž 8`N€ |¦¿aÿì|}y|»+x”!ÿ A‚`/„@ž¤ëxƒÄ; H@€0/€Až$| ¦cÛx€ž| xN€!/ƒAžH €€ØAžƒÞžà@žÿÀ;À8!`Ãóx€»aÿì|¦N€ ,8A‚€|xN€ |¦¿ÿð|~y|œ#x|½+x”!ÿ°A‚L/…AžD8~Kÿû…,A‚48“£“ƒ=}i‘#€^8B^H8`8!P€»ÿð|¦N€ |eyM‚ Kÿÿx€€d|x C|bN€ |¦¿ÿð|}x8et|œ#x”!ÿ°Kÿúñ|~yA‚H€€]8~ =} ^‘>‘~ €€]=“ž^‘>HU8!PÃóx€»ÿð|¦N€ |¦¿ÿð|~xBŸè¦”!ÿ €(€Cl/€ÿÿ;¢Až?€ Ad<¿8a88€Æóx8¥ PH)||y@‚0€a8H9||xH8~HÄóxHå€^lAÿìH€^l€œ€@œ^œ8!`ƒãx€»ÿð|¦N€ ,8A‚89 9`8@d8'‘#‘cC‘# ‘c8ô8|xN€ |¦¿ÿð|~y|œ#x|½+x”!ÿ 8ÿÿ8A‚À/„Až¸/…@ž;¡8< H¹€^l€(‚@œ(ÃóxKÿþ©€ždƒãxÅóxKÿþ,A‚H$€p|P/€@žÿØÃóxH<` HP~ 8~,HyH8~HÄóxH©€ /€@žÿì€^dÃóx8]dHE8`H8`8!`€»ÿð|¦N€ |¦¿¡ÿô|~y|#x”!ÿ°A‚t/„Ažl€h/€@žHÑ€$€^(8`>,~0]‘=‘} €4€^8><]‘=€h/€@žÃóxH¡8`H8`8!P€»¡ÿô|¦N€ ,A‚,/„Až$88@ƒ£8H8@|CxN€ ,A‚+„A8ƒH8|xN€ ,8A‚ ƒ8|xN€ ,8A‚ ƒ8|xN€ ,8A‚ ƒ8|xN€ ,8A‚ ƒ8|xN€ ,8A‚ ƒ 8|xN€ ,8A‚ ƒ8|xN€ ,8A‚ ƒ8|xN€ |¦¿Áÿø|~yBŸè¦”!ÿ A‚L8`H±|dx<8c0H¡€ž`<8cPH‘€žh<8chH€žd<8c€Hq€ž €¾<8c˜@¡DÈ!@HQ€ž €¾$<8cÐ@¡DÈ!@H1€ž4€¾8<8c@¡DÈ!@H€ž\<8c8H€žL<8cPHñ€žT<8clHသP<8cŒHÑ€žX<8c¨HÁ€ž<€¾@<8c¼@¡DÈ!@H¡€žD€¾H<8cè@¡DÈ!@8!`€»Áÿø|¦Hp8!`€»Áÿø|¦N€ ,8A‚ ƒ8|xN€ |¦¿¡ÿô|}yBŸ|ž#x覔!ÿ A‚X/„AžP€h/€@žHeÃóx8@8 pHÕ€/€@4<@C0l€A8<<_É¢˜È8Éžüh(ýŒ$Ùž H<_È Ø €/€@4<@C0l€A@D<_É¢˜È@Éžüh(ýŒ$Ùž H<_È Ø €0/€@4<@C0l€AHL<_É¢˜ÈHÉž(üh(ýŒ$Ùž4H<_È Ø4€]l8}ì^X€pTKÿø-~`8}„Kÿø!~d8}¸Kÿø8@~h€h/€@ž£ëxHQ8@H8@8!`|Cx€»¡ÿô|¦N€ |¦¿ÿð|½+xBŸ|~x|œ#x覔!ÿ8a8H!€] €8=`C0/œ¡]¡!<‘aH‘aP‘aXlB€l€}*HPAT<_Lm)€Éb<_‘!\ÈPÉHÉ¡XüX(ýŒX(ý­X(ýŒ(Èý¬h:Až0+œAœD/œ@žTÈ@€^H8Bü *^HØ@H8ÈT€^\8Bü *^\ØTHÈh€^p8Bü *^pØh8!p€»ÿð|¦N€ |¦¿!ÿä|~yBŸ|#x|¼+xè¦8ÿÿ”!ÿ8A‚X/„AžPH½€€^œ>Ð~4|| J…XAœ(<<Ÿ?@ €ct8„Ð8c°HÃóxH8/œ@ž;8< £ëxÅóx€ždKÿöÙ|yy@‚Ãóx?@ HaHЀ}/ƒ@žD8~ì$Ëx;@Kÿó•/ƒ@ž?@ €>œ~Ð^l€^p|J¢PP`ZH0/ƒ@ž 8~¸Kÿÿ¸8~„Kÿÿ°ÃóxKÿöÙ/ƒ@ž ;½/Ažÿè|ëÖ€^0€@œÿØ/š@ž8~,H½H$Ëx8~tKÿñU€^dÃóx8\dKÿÿ4;@8!pCÓx€»!ÿä|¦N€ |¦¿Aÿè|{y|#x|¾+x”!ÿ€8A‚`/…@ž;Á8;›ì“¡TH8€ƒãx8¡8KÿôA,@‚ ;›¸8€8¡8ƒãxKÿô%,A‚ƒ£|dxH(;›„8€8¡8ƒãxKÿóý|zyA‚hƒºDÓx€€]ƒãx8 =} ^‘>‘~ €€]=}^‘>‘~Kÿññ¤ëx8{tKÿð)Hl[ /ŠAžp€ @žd€ €J8{t*j ^‘>‘~ € €J*j^‘>‘~€› KÿïÁ“[ cÛxH 8HcÛxHý< 8!€|x€»Aÿè|¦N€ |¦¿Aÿè|}y”!ÿ 8A‚ôH¡;}ì;]tHLcÛxKÿò-ƒÃ||x€/€Až| ¦€~| xN€!ÄóxCÓxKÿï%cÛx„ãx8 KÿðÑ€/€@žÿ°cÛx8€;}¸KÿñaHLcÛxKÿñŃÃ||x€/€Až| ¦€~| xN€!ÄóxCÓxKÿî½cÛx„ãx8 Kÿði€Ð/€@žÿ°cÛx8€;}„KÿðùHLcÛxKÿñ]ƒÃ||x€/€Až| ¦€~| xN€!ÄóxCÓxKÿîUcÛx„ãx8 KÿðƒÝœ/ž@žÿ°cÛx8€Kÿ𕃠/œAž0€/€Až| ¦€|| xN€!„ãxCÓxKÿíù“Ý 8;,;ÝHhƒãxHÕHÃóx¤ëxHe€l/€AÿìƒãxHÑ/ƒ@žÿôÃóxHÁ/ƒ@žÿôCÓxKÿî£ëxHé£ëxH/ƒ@žÿô88!`|x€»Aÿè|¦N€ |@&|¦¾ÿ¨|~x;#H;€;`ÿÿ>àC0H A”!þðBŸè¦8.:Þì:ž¸:¾„?8HI€^l#Ëx;AH8B^lHñÃóxHICÓxHaH] La<``€a<|`H8a8H™<_˘tËb„ÃóxHåA’„ãx8~tKÿì€^8`Ëþ|8B^H]€A8’áXɸt|P8a8l€\`ÈXüh(ÿÿ*Ûþ|H)/›@žØ€^p8Bÿÿ^pHÜ€€^Œ/€9"‘>Œ@4~óx;`Kÿîí8€ƒƒ|}xÃóx.…ãxKÿø)~óxH8/ˆ@@~ƒ£x;`Kÿîµ8€ƒƒ|}xÃóx…ãx.Kÿ÷ñ~ƒ£x¤ëx8 KÿímHl/Š@„~£«x;`Kÿîq8€ƒƒ|}xÃóx.…ãxKÿ÷­~£«xKÿÿ¼/›@ž€^Œ8Bÿÿ^Œ?`b?€8`c{MÓcœB@H /ƒ<@ž>l€$‰A€(/€ÿÿAž,>l€H@¼ €^9)ÿÿ#Ëx‘>l8Bÿÿ^Hôƒ¾,CÓxHi¡aL8~,Äóx|Ø–¢þp8¡@|6p|P€AH è|©èP@½Z½áÖ“¡DH%€œ/€@ž4€Ð/€@ž(€/€@ž€ /€@ž€h/€Ažÿ,€^8`Ëþ„?€C0ÿÀàÿ Ø8Bÿÿ^H%€A8’á`ɸt|P8a8l€d`È`üh(ÿÿ*Ûþ„HñCÓxH ‰Ð/ˆAž¸€H€ž¼~8¡!Ll€ƒ¤“hmk€l€ “pl€tÉh ]“x‘a„“€ýŒð(}"HPm)€‘!|Èpüð(ýŒ(É¡€ý­ð(Èxüð(ýŒzÿŒhOÝó‚@ž4ÈT€^\8~¸8 8Bü *^\ØTKÿë¤ëx8~ìHÀ^œ/ŠAž¼€H€žˆ~,¡!Ll€ƒ¤“ˆmk€Œ€ “l€”Ɉ ]“˜‘a¤“ ýŒð(}"HPm)€‘!œÈüð(ýŒ(É¡ ý­ð(Șüð(ýŒzÿŒhOÝó‚@ž8Èh€^p8~„8 8Bü *^pØhKÿêY¤ëx8~¸Kÿê=Kÿþ€€h/€Až€^l#Ëx9"ÿÿ‘>lHdƒž .A’ü,€^p #Ëx;`8B^pH =ÃóxH •€€|| ¦| xN€!Kÿût€^l8 ÿÿ#ËxŒ8Bÿÿ^lH ÃóxH Y8!8`a€ºÿ¨|¦}p H ø|¦¿aÿì|~yBŸ|œ#x;`覔!ÿ A‚è8€;`#H Å|}xÃóxH Ù8€½8~,H É8€½8~HH ¹½/@ž¤/œAž@€€\<| $^(‘>,‘~0€€\<<^4‘>8H<5^$A‚48'9 9`8@d 8ô‘*J‘j ‘* ‘~$8€ 8 d8~t?¿Kÿæ…=?8^@8;½ìpÈ ||x8 X¤ëx8~ì0LPT\Ø4Ø@ØØ(Ø<ØDØ Ø Kÿç9¤ëx8 œ8~¸Kÿç%¤ëx8 œ8~„Kÿç|A‚;`#, &HT;€p dhlHÃóxKÿëY|{y &@‚$;œ€$œAœÿà;`/› &W½àÃóxH =¸ A‚ ÃóxKÿöQ8!`cÛx€»aÿì|¦N€ |@&|¦¿ÿð|~y|#x;€A”!ÿ°A‚¼H É/@ž$9@d9`ô9 88@ 8€'9 H  ]}=€€]€ƒ¾l‘^4‘~8‘><^(ž,‘0$@œ(ÃóxKÿê].||x@’€$;½€èAÿà;€.8~,H IÃóxH AA’ ÃóxKÿõY8!Pƒãx€a»ÿð|¦}p N€ |¦¿ÿà|~yBŸ|›#x覔!ÿ€A‚ð/„Ažè8€;,;>„;^LH •;€#|}xÃóxH ¥8€½ÃxH•8€,8 d½#ËxKÿãé8“~”8€½H€CÓx8 Kÿäá½/@ž8<ŸÅóx8a88„4Kÿëá8€8a8KÿìcÛx888 Kÿê%||xÃóxH 5/œAž0ÃxHåÃóxH½#ËxKÿä)CÓx8€KÿæH;€8!€ƒãx€»ÿà|¦N€ |¦¿!ÿä||y”!ÿ 8A‚èH©8;|L;<„€cÛxKÿæ1|~xHTÄóxcÛxƒ¾KÿæaÄóx8 |zxcÛxKÿäé€/€Až| ¦€}| xN€!¤ëx#Ëx^ÓxKÿã/ž@žÿ¬8€cÛx;Ü,KÿåQ#ËxKÿãMÃóxHÑHÃóx„ãxHa€€/€@žÿìƒãxH ÃóxHÅ/ƒ@žÿôƒãxH•/ƒ@žÿô88!`|x€»!ÿä|¦N€ |¦¿Aÿè|}x;€;@;},”!ÿH€€/€@žÄ€d;À/€@8}LKÿå ƒÃ||xƒ^ 8`Hõ/žAž€šAT€$/€Až€}”Äóx8¡8Kÿè-H€}”Äóx8¡8Kÿï!„ãx8}L8 Kÿã‰Äóx8}„KÿáÁKÿÿl8cÛx¤ëx8¡<@€ ~ [‘;‘{ €€^>~[‘;‘{Äóx8z„;ÀKÿß H£ëxKÿâ!/ƒ|dx@žÿ|?À CÓxHA8!`Ãóx€a»Aÿè|¦}p N€ |@&|¦¾áÿÜ||x|ƒ#x|š#x|¸+x|×3x;`ÿÿA”!ÿ€á¨‘¬‘!°‘A´H/ƒ|Ažä.ÿÿ]Óx;!¨MH |Ýóx€|¤ëx~å»x&Ëx“!8H=|{y@€DAŽ ÀAžŒWZÐM <Z Pg `t  ‹ |•`Ÿ Ä© ì³ ¤½  Ç ˜Ó8æTþ$*?ŒUpn€yä¼¡è° àÉÜÜ@ðȨˆ(!ì; O"ì`'ès&Pˆ$(à©*4¹¿ÐÖÝåíý+>Sk~ŽžµÉÝó :;<=>?@ABCDEFGHIJKLMNOP:;<=>?@ABCDEFGHIJKLMNOP€9 !"#$%&'()*+,-./012345678*+C !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP __mh_dylib_headerdyld_stub_binding_helpercfm_stub_binding_helper__dyld_func_lookup___initialize_Cplusplus_CmpThreadPoolJob_CreateThreadPoolJob_CreateWorker_CalcWaitTime_WorkerThread_TimerThreadWorkersaveFPrestFPdyld__mach_header_FreeListAlloc_FreeListDestroy_FreeListFree_FreeListInit_ListAddAfter_ListAddBefore_ListAddHead_ListAddTail_ListDelNode_ListDestroy_ListFind_ListHead_ListInit_ListNext_ListPrev_ListSize_ListTail_TPAttrInit_TPAttrSetIdleTime_TPAttrSetJobsPerThread_TPAttrSetMaxJobsTotal_TPAttrSetMaxThreads_TPAttrSetMinThreads_TPAttrSetSchedPolicy_TPAttrSetStarvationTime_TPJobInit_TPJobSetFreeFunction_TPJobSetPriority_ThreadPoolAdd_ThreadPoolAddPersistent_ThreadPoolGetAttr_ThreadPoolGetStats_ThreadPoolInit_ThreadPoolPrintStats_ThreadPoolRemove_ThreadPoolSetAttr_ThreadPoolShutdown_TimerThreadInit_TimerThreadRemove_TimerThreadSchedule_TimerThreadShutdown_iasnprintf_iasnprintfFree___sF_fprintf$LDBL128_free_ftime_malloc_memcpy_printf$LDBL128_pthread_cond_broadcast_pthread_cond_destroy_pthread_cond_init_pthread_cond_signal_pthread_cond_timedwait_pthread_cond_wait_pthread_create_pthread_detach_pthread_mutex_destroy_pthread_mutex_init_pthread_mutex_lock_pthread_mutex_unlock_pthread_self_realloc_srand_time_vsnprintf$LDBL128single moduleÎúíþ Ü…__TEXT00__text__TEXTˆ q ˆ €__cstring__TEXTü-ûü-__literal8__TEXTø/ø/À__DATA00__data__DATA00__dyld__DATA00À__IMPORT@@__pointers__IMPORT@@__jump_table__IMPORT@@x@@8__LINKEDITPP„  P@executable_path/../Frameworks/libthreadutil.2.dylibPM Vä P +5T+`U”UC¤SP 4/usr/lib/libgcc_s.1.dylib 4X/usr/lib/libSystem.B.dylibèXÿ°s"‹€w"ÿàèX‹€g"ÿàU¸‰å‹U…Òt‹E ‰B‹EÇÇB ‰B1ÀÉÃU1À‰å‹U…Òt‹ …Éu ‹B‰EÉé[2‹ÿJ ‰‰ÈÉÃU¸‰åƒì‹U‹M …Òt"…Ét‹B @;B} ‰B ‹‰‰ ë‰ $è21ÀÉÃU¸‰åWVƒì‹}…ÿuë‹0‰$èí1‰7‹…ÀuîÇG ƒÄ^_ÉÃU¸‰åVƒì‹u…ötTÇF‹E ‰F0‹E‰F,FÇD$dÇD$ ‰$èûþÿÿF ‰F1ÀÇFÇÇF‰v ÇFƒÄ^ÉÃU‰åƒì‰}ü‹}‰uø‹u…ÿ”Â…ö”ÀÂu.G‰$èÐþÿÿ…À‰ÂtÇ‹E ‰r‰B‹‰‰P‰ÿGë1Ò‹uø‰Ð‹}üÉÃU1À‰åƒì‹U…ÒtB ‰D$‹E ‰$‰D$èÿÿÿÉÃU‰åƒì‰}ü‹}‰uø…ÿtT;} tO‹M G 9E ”Â…É”ÀÂu:‹E ‹‰Á‹p‹@‰B‹A‰G‰L$‰$èRþÿÿÿO‹E…Àt‹G,…Àt‰4$ÿÐ1ö‰ð‹}ü‹uøÉÃU¸‰åWVƒì‹u…ötC‹U‹Bz ë‹p‹U ‰D$‹E‰T$‰$èUÿÿÿ‰ð9øuá‹U‰ÐƒÀÇB‰$èþÿÿ1ÀƒÄ^_ÉÃU‰å‹E…Àt ‹P…Òt‹@ë1ÀÉÃU‰å‹E…Àt ‹H…Ét‹@ ë1ÀÉÃU‰åV‹u‹M …ö”Â…É”ÀÂu ‹QF 9Âu1Ò^‰ÐÉÃU‰åV‹u‹M …ö”Â…É”ÀÂu‹9ðu1À^ÉÃU‰åWVƒì‹u‹E …öt?…ÀDE‹p‹Ex ë*‹E‹P0…Òt‹F‰D$‹E‰$ÿÒ…Àt ë‹U9Vt ‹v9þuÒ1öƒÄ‰ð^_ÉÃU¸‰å‹U…Òt‹BÉÃU‰åƒì‰}ü‹}‰uø‹u…ÿ”Â…ö”ÀÂu0G‰$èŽüÿÿ…À‰ÂtÇ@‹E ‰2‰B‹F‰V‰‰BÿGë1Ò‹uø‰Ð‹}üÉÃU1À‰åƒì‹U…Òt‹E ‰T$‰$‰D$è‚ÿÿÿÉÃU‰å‹E‹P‹E ;PÉ”À¶ÀÃUƒÁt‰åW‰ÇVƒì ‰ $‰Uôè üÿÿ…À‰Æt9‹‰‹G‰F‹G‰F‹G ‰F ‹G‰F‹G‰F‹G‰F‹Eô‰FF ‰$è?.ƒÄ ‰ð^_ÉÃU‰åƒìH‰]ô‰uø‰Æ‰}ü‹@lè[@‰EÔ‹†(ƒøÿt 9EÔÇEÐ `ƒ¡ ‰D$Eä‰t$ ÇD$‰$è.…À‰EÐu'‹Eä~H‰$è.‰EÐë ‰t$‰<$èç-‹EÔ;Flì‹Fl9†œ}‰†œ‹EЋ]ô‹uø‹}üÉÃU¸‰å‹U…Òt5ÇB %ÿÿÿÇB'ÇB ÇÇBÇBôÇBdÉÃU‰åWVƒì0‹u‹M ‹}ÇEôÿÿÿÿ…ö”Â…É”À¹Â…•…ÿEôDøÇ ‰4$èS-‹Fl;†(}‰ðèÀþÿÿ‹Vd‰ñ‹E èSþÿÿ…Àtë+FpHuç‰4$è%-¹ ëE‰† F,‰$èà,FH‰Eäë‹Eä‰t$‰$èÓ,‹† …Àuç‹Fd‰@‰Fd‰4$èÛ,1ɃÄ0‰È^_ÉÃU¹‰åWVƒì‹u‹} …ö”Â…ÿ”ÀÂu`‹Fh…Àu‰4$è›,‹†$1ɉ‹†(‰G‹†,‰G‹†0‰G ‹†4‰G‹†8‰G‹†<‰G‹~h…ÿu ‰4$èQ,1ɃĉÈ^_ÉÃU‰åƒì‹M‰|$‹} ‰4$¾…ɔ…ÿ”ÀÂu‰9‹Ef1öÇAÇA‰A‰ð‹|$‹4$ÉÃU‰å‹U‹E …Òt ƒøw‰B1Àë¸ÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU¸‰å‹U…Òt‹E ‰1ÀÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU¸‰å‹U…Òt‹E ‰B 1ÀÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU‰åVSƒì‹uè[…ö„CÇ$è+‰D$ƒ€‰$è¶*‹F`‰D$ƒž‰$è¡*‹Fh‰D$ƒµ‰$èŒ*‹Fd‰D$ƒË‰$èw*ƒäòF ‰$òD$è^*ƒòF ‰$òD$èE*ƒPòF4‰$òD$è,*‹F\‰D$ƒ„‰$è*‹FL‰D$ƒœ‰$è*‹FT‰D$ƒ¸‰$èí)‹FP‰D$ƒØ‰$èØ)‹FX‰D$ƒò‰$èÃ)ƒòF<‰$òD$èª)ƒ4òFD‰$òD$è‘)ƒÄ[^ÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU¹‰åWVSƒì‹}‹u …ÿ”Â…ö”ÀÂ…õ‹Gh…Àu‰<$èx)‡@ÇD$l‰D$‰4$è)‹F…À~ò*Èòò^ÁòF ëÇF ÇF‹F…À~ò*ÈòFò^ÁòF ëÇF ÇF$‹F0…À~ò*ÈòF(ò^ÁòF4ëÇF4ÇF8‹Gl‰FX‹Gp‰FT‡ì‰$è>ùÿÿ‰F`‡„‰$è-ùÿÿ‰Fd‡¸‰$èùÿÿ1ɉFh‹Gh…Àu ‰<$è™(1ɃĉÈ[^_ÉÃU‰åƒìH‰]ôè[‰uø‰Î‰}ü‰ÇE܉UÔ‰$è(·Eàò*F ·Vò*MÜò\ÈòY‹Ý)Ѓ}Ôò*ÀòXÈt r6ƒ}ÔuFÿ‡HòX@ò@ë.ÿ‡\òXTòTëÿ‡pòXhòh‹]ô‹uø‹}üÉÃU‰åƒìH‰}ü‹}‰uø‹u ‰]ôè[…ÿ”Â…ö”ÀÂÇEäÿÿÿÿÇEÌ…V‰<$è—'‹‡‡œ‡Ð;‡4|#‰D$ƒ‰D$‹ƒ+'°‰$è'ë(‹UEä‰ù…ÒEE‰EÇ ‹Wd‰ðèXøÿÿ…À‰EÐu‰<$è/'ÇEÌ éÕ‹FƒøuG‹EЉD$‡ì‰$è¡õÿÿ…ÀuOÇEÌ ‹—‰UÔ‹‡œ‰UÔ‹‡Ð‰UÔ‹wl+wpë6Hu‹UЇ¸‰T$ë´‹EЉD$‡„ë¥ÇEÌ믉øèøÿÿ…ÀuF…ötð‹UÔ‰ÐÁú÷þ;‡0}Þ‹EÌ…Àu G,‰$èI&ë‹UÐGt‰$‰T$èÇóÿÿ‹Gd‹U‰@‰Gd‰<$èN&‹EÌ‹]ô‹uø‹}üÉÃU¸‰åWVƒì@‹M‹}…É„…ÿuØu‰÷‹U‹E ‰$‰Eôè&‹E‰t$ÇD$ì‰Ẻ$èÿõÿÿ…À‰ÂtE‹p‹‰‹F‰G‹F‰G‹F ‰G ‹F‰G‹F‰G‹F‰G‹F‰G‰T$‹UÌÇD$é÷‹U‰t$ÇD$¸‰UЉ$è”õÿÿ…À‰Âtl‹p‹‰‹F‰G‹F‰G‹F ‰G ‹F‰G‹F‰G‹F‰G‹F‰G‹EЉT$ÇD$‰$èõóÿÿ‹E‰t$ƒÀt‰$è†òÿÿ‹U‰$è%1Àé‹E‰t$ÇD$„‰EÔ‰$èõÿÿ…À‰Ât_‹p‹‰‹F‰G‹F‰G‹F ‰G ‹F‰G‹F‰G‹F‰G‹F‰G‰T$‹UÔÇD$‰$èdóÿÿ‹E‰t$ƒÀt‰$èõñÿÿ‹Eëj‹E‹ …Òte‹E ;Bu]‹‰‹B‰G‹B‰G‹B ‰G ‹B‰G‹B‰G‹B‰G‹B‰G‹U‹‚ ‰D$‰ÐƒÀt‰$è“ñÿÿ‹EÇ€ ‰$éþþÿÿ‹U‰$è$¸ ƒÄ@^_ÉÃU¸‰åWVƒì ‹U…Ò„‹E‰$èÚ#‹Eì‰Eè‹EƒÀt‰EôëE‹Eè‰$èQóÿÿ‹p‰Ç‹V…Òt‹F‰$ÿÒ‹Eô‰t$‰$èñÿÿ‹EèÇD$‰|$‰$èFòÿÿ‹E‹€…Àu®‹EèÇD$‰$è™òÿÿ‹E¸‰EðëE‹Eð‰$èßòÿÿ‹p‰Ç‹V…Òt‹F‰$ÿÒ‹Eô‰t$‰$èŽðÿÿ‹EðÇD$‰|$‰$èÔñÿÿ‹E‹€Ð…Àu®‹EðÇD$‰$è'òÿÿ‹E„‰EìëE‹Eì‰$èmòÿÿ‹p‰Ç‹V…Òt‹F‰$ÿÒ‹Eô‰t$‰$èðÿÿ‹EìÇD$‰|$‰$èbñÿÿ‹E‹€œ…Àu®‹EìÇD$‰$èµñÿÿ‹E‹° …öt+‹V…Òt‹F‰$ÿÒ‹Eô‰t$‰$èºïÿÿ‹EÇ€ ‹E‰ÇƒÇ,Ç@h‰<$èõ!‹EpHë‹E‰4$‰D$è÷!‹E‹@l…Àç‰<$èÑ!…Àuô‰4$èÅ!…Àuô‹Eô‰$è‹ïÿÿ‹E‰$èâ!‹E‰$èÈ!…ÀuñƒÄ ^_ÉÃU‰åWV¾ÿÿÿÿSè[ƒìl‹}ÇEä‰<$è¡!GHÿGl‰E¤‰$èY!‰<$è!ỦUœ‰$è/!è!‰Eà·EЋUàЉ$èu!Eä‰E ‰$èl!—쇸‰U¸—„ÇEĉE¼‰UÀ‰E˜‰<$è&!‹EÄ…Àt‹EĉD$Gt‰$èwîÿÿÿ‡ò‡|òE¨Ç$è!+Eäò*ÀòXE¨ò‡|‹E ‰$èè ƒþ…ÝÿOpéß‹‡Œ‹@…ɉ‡Œ~5‹U¸‰$è4ðÿÿº‰Æ‹@‰EĉÁ‰øèþ÷ÿÿ‹U¸ÇD$‰t$é„‹—Ð…Ò~?‹E¼‰$èõïÿÿ‹P‰Æ‰ø‰UĉѺè¿÷ÿÿ‹E¼ÇD$‰t$‰$è÷îÿÿ1öé‹·œ…öާ‹UÀ‰$è¨ïÿÿ1҉Ƌ@‰EĉÁ‰øèu÷ÿÿ‹UÀÇD$‰t$‰$ë´…öuÿŒ1À鋃ø?@A@BCDEFGHIJKL  !"#$%&'()*+,-./01234Ô +C     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL __mh_dylib_headerdyld_stub_binding_helper__dyld_func_lookup_CmpThreadPoolJob_CreateThreadPoolJob_CreateWorker_CalcWaitTime_WorkerThread_TimerThreadWorkerdyld__mach_header_FreeListAlloc_FreeListDestroy_FreeListFree_FreeListInit_ListAddAfter_ListAddBefore_ListAddHead_ListAddTail_ListDelNode_ListDestroy_ListFind_ListHead_ListInit_ListNext_ListPrev_ListSize_ListTail_TPAttrInit_TPAttrSetIdleTime_TPAttrSetJobsPerThread_TPAttrSetMaxJobsTotal_TPAttrSetMaxThreads_TPAttrSetMinThreads_TPAttrSetSchedPolicy_TPAttrSetStarvationTime_TPJobInit_TPJobSetFreeFunction_TPJobSetPriority_ThreadPoolAdd_ThreadPoolAddPersistent_ThreadPoolGetAttr_ThreadPoolGetStats_ThreadPoolInit_ThreadPoolPrintStats_ThreadPoolRemove_ThreadPoolSetAttr_ThreadPoolShutdown_TimerThreadInit_TimerThreadRemove_TimerThreadSchedule_TimerThreadShutdown_iasnprintf_iasnprintfFree___sF_fprintf_free_ftime_malloc_memcpy_printf_pthread_cond_broadcast_pthread_cond_destroy_pthread_cond_init_pthread_cond_signal_pthread_cond_timedwait_pthread_cond_wait_pthread_create_pthread_detach_pthread_mutex_destroy_pthread_mutex_init_pthread_mutex_lock_pthread_mutex_unlock_pthread_self_realloc_srand_time_vsnprintfsingle moduleamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/PkgInfo0000644000175000017500000000001010753565633022433 0ustar l3onl3onAPPLaMulamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Info.plist0000644000175000017500000000214212050266603023116 0ustar l3onl3on CFBundleDevelopmentRegion English CFBundleExecutable amule CFBundleName amule CFBundleGetInfoString 2.3.1, Copyright 2003-2011 aMule Project (http://www.amule.org) CFBundleIconFile amule CFBundleIdentifier org.amule.aMule CFBundleInfoDictionaryVersion 2.3.1 CFBundlePackageType APPL CFBundleShortVersionString 2.3.1 CFBundleSignature aMul CFBundleVersion 2.3.1 NSHumanReadableCopyright Copyright 2003-2011 aMule Project (http://www.amule.org) NSMainNibFile NSMainNibFile NSPrincipalClass NSApplication amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Resources/0000755000175000017500000000000012053222075023117 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Resources/English.lproj/0000755000175000017500000000000012053222075025635 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Resources/English.lproj/MainMenu.nib/0000755000175000017500000000000012053222075030115 5ustar l3onl3on././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Resources/English.lproj/MainMenu.nib/objects.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Resources/English.lproj/MainMenu.nib/objec0000755000175000017500000001226210753565633031147 0ustar l3onl3on typedstreamè„@„„„NSIBObjectDataà„„NSObject…’„„„NSCustomObject)”„@@„„„NSMutableString„„NSString”„+ NSApplication†…†„i@–„„„ NSMenuItemŸ”’„„„NSMenuÌ”„i@@@„™™NewApplication†„„„NSMutableArray„„NSArray”š ’„›’œ„ i@@IIi@@@@:i@„™™About NewApplication†„™™†‚ÿÿÿ…„„„NSCustomResource)”–„™™NSImage†„™™NSMenuCheckmark††…„¦–§„™™NSMenuMixedState††……’…’…†’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’š’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Services†¤‚‚ÿÿÿ…¥…©„submenuAction:…’…’„„˜™Services†„ š†„™™_NSServicesMenu†††’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Hide NewApplication†„™™h†‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™ Hide Others†„™™h†‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Show All†¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Quit NewApplication†„™™q†‚‚ÿÿÿ…¥…©……’…’…††„™™ _NSAppleMenu†† „™™Preferences…†„™™,†‚‚ÿÿÿ…¥…©……’…’…†œ–„„˜™ Open Recent†„ š’„›’à„™™ Clear Menu†¤‚‚ÿÿÿ…¥…©……’…’…††„™™_NSRecentDocumentsMenu††„›’„„˜™File†„ š ’„›’Ê „™™New†„™™n†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Open...†„™™o†‚‚ÿÿÿ…¥…©……’…’…†’É’„›’Ê ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Close†„™™w†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Save†„™™s†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™ Save As…†„™™S†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Revert†¤‚ÿÿÿ…¥…©……’…’…†’„›’Ê ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™ Page Setup…†„™™P†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Print…†„™™p†‚‚ÿÿÿ…¥…©……’…’…††…† „™™ Open Recent†¤‚‚ÿÿÿ…¥…©¢…’…’Æ–„›’„„˜™Window†„ š’„›’è „™™Zoom†¤‚‚ÿÿÿ…¥…©……’…’…†’„›’è „™™Minimize†„™™m†‚‚ÿÿÿ…¥…©……’…’…†’ç’„›’è „™™Bring All to Front†¤‚‚ÿÿÿ…¥…©……’…’…††„™™_NSWindowsMenu†† ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†è–„›’„„˜™Edit†„ š ’„›’ô „™™Undo†„™™z†‚‚ÿÿÿ…¥…©……’…’…†’ó’„›’ô ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Cut†„™™x†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Copy†„™™c†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Paste†„™™v†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Delete†¤‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™ Select All†„™™a†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Find†¤‚‚ÿÿÿ…¥…©¢…’…’„„˜™Find†„ š’„›’  „™™Find…†„™™f†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™ Find Next†„™™g†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™ Find Previous†„™™G†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Use Selection for Find†„™™e†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Jump to Selection†„™™j†‚‚ÿÿÿ…¥…©……’…’…††…††’„›’ô „™™Spelling†¤‚‚ÿÿÿ…¥…©¢…’…’„„ š’„›’  „™™ Spelling…†„™™:†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Check Spelling†„™™;†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Check Spelling as You Type†¤‚‚ÿÿÿ…¥…©……’…’…††…†††…† „™™Redo†„™™Z†‚‚ÿÿÿ…¥…©……’…’…†ô–ÓÊ–ô–­œ–¼œ–þô–ßÊ–„›’„„™™MainMenu†„ š’„›’- ž¤‚‚ÿÿÿ…¥…©¢…’…’œ†’„›’- „™™File†¤‚‚ÿÿÿ…¥…©¢…’…’ʆ’„›’- „™™Edit†¤‚‚ÿÿÿ…¥…©¢…’…’ô†’„›’- „™™Window†¤‚‚ÿÿÿ…¥…©¢…’…’膒,†„™™ _NSMainMenu†† „™™Help†¤‚‚ÿÿÿ…¥…©¢…’…’„8„ š’„›’9 „™™NewApplication Help†„™™?†‚‚ÿÿÿ…¥…©……’…’…††…††-–´œ–1-–ëè–œ0–„„„NSWindowTemplateø”„ iiffffi@@@@@cܱàh‚px„™™Window†„™™NSWindow†„˜™View†„„„NSView)„„ NSResponder”’…š„ @@@@ffffffff„ š†……… àhàh’…’…’…’…†…„ffff@š„c„ffÕ’…©†•–9,–-•–;9– –3-–( – –ÔÊ–½œ–ÆÃ–àÊ–Ê1–¬œ– – ô–¯­–è5–·œ–¢œ–ô–5-–úô–ÚÊ–0-–ÍÊ– –÷ô–ðè–×Ê–" –ãÊ–ô3–ÐÊ–ÉÊ–ºœ–íè– ô–«œ–ÝÊ–ûô–ô–C>– –³œ–ô– –% – š-–Ú„˜™8†–•„˜™ File's Owner†–3„™™ NSMenuItem†–è…–ß„˜™2†–ㄘ™6†–þ„™™ NSMenuItem1†– „™™NSMenu†–„™™ NSMenuItem4†–Ê„˜™†–ׄ˜™3†–Ó„˜™7†–çO–-„˜™MainMenu†– „™™ NSMenuItem7†–„™™ NSMenuItem4†–÷„™™ NSMenuItem2†–9„˜™2†–%„™™ NSMenuItem8†–1O–„™™ NSMenuItem2†–ú„™™ NSMenuItem†–ÐO– „™™ NSMenuItem12†–;O–à„˜™5†–Ý„˜™10†–û„™™ NSMenuItem3†–š„™™121†–Ô„˜™1†–„™™ NSMenuItem13†–„™™ NSMenuItem10†–"„™™ NSMenuItem6†– „™™NSMenu†–„™™ NSMenuItem9†–ó„™™ NSMenuItem11†–„™™ NSMenuItem†–ô„™™NSMenu†–„™™ NSMenuItem3†–(„™™ NSMenuItem†–,„˜™1†–½„™™1111†–„™™ NSMenuItem1†–>„™™Window†–Í„˜™9†’„„„ NSMutableSet„„NSSet”„I’>†’„ š’„„„NSNibControlConnectorÏ„„NSNibConnector”„@@@í…„˜™performMiniaturize:††’„t°ð…„˜™arrangeInFront:††’„t°ã…„˜™print:††’„t°à…„˜™runPageLayout:††’„t°;…„˜™ showHelp:††’„t°Æ…„˜™clearRecentDocuments:††’„t°½•„˜™ terminate:††’„t°¢•„˜™orderFrontStandardAboutPanel:††’„t°·•„™™hideOtherApplications:††’„t°´•„™™hide:††’„t°º•„™™unhideAllApplications:††’„t°û…„˜™cut:††’„t°…„˜™paste:††’„t°ó…„˜™redo:††’„t°…„˜™ selectAll:††’„t°÷…„˜™undo:††’„t°þ…„˜™copy:††’„t°"…„˜™showGuessPanel:††’„t°%…„˜™checkSpelling:††’„t°(…„™™toggleContinuousSpellChecking:††’„t°Ô…„™™ performClose:††’„t°…„™™delete:††’„t°ë…„™™ performZoom:††’„t°…„™™performFindPanelAction:††’„t°…„™™performFindPanelAction:††’„t°…„™™performFindPanelAction:††’„t°…„™™performFindPanelAction:††’„t°…„™™centerSelectionInVisibleArea:†††’…š]„@i¼•±¬±Ýp±É|±è±•µ±{W±ÓO±«Ë±ãN±¡± ¨±9j±•±ó­±™¾±¡Æ±«±± ®±š± ¹±¯‚±ÊQ±‰™±%½±û ±œ9±º–±ÚP±§É±àM±;o±×K±ÍR±²±3£±>±ƒŽ±1S±¢±"»±¬±08±Æ~±ëű“´±­ƒ±£Ç±ç\±yV±Á±·‘±½ˆ±,g±—¼±}z±«Ä±ÔI±‹¯±§±s%±©Ê±³±›À±ð±¤±´†±Ã}±ßJ±¸±‹±í±ÐH± Ÿ±°±¢:±ô©±w'±÷ž±ŸÃ±5±úœ±¥È±‡˜±›±C±‘³±š±…’±(¿±-±þšÌš’„˜™IBCocoaFramework††././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Resources/English.lproj/MainMenu.nib/info.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Resources/English.lproj/MainMenu.nib/info.0000755000175000017500000000111510753565633031071 0ustar l3onl3on IBDocumentLocation 126 126 356 240 0 0 1600 1178 IBEditorPositions 29 125 407 318 44 0 0 1600 1178 IBFramework Version 328.0 IBOpenObjects 21 29 IBSystem Version 7B8 ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Resources/English.lproj/MainMenu.nib/classes.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/Resources/English.lproj/MainMenu.nib/class0000755000175000017500000000015610753565633031171 0ustar l3onl3on{ IBClasses = ({CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }); IBVersion = 1; }amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/0000755000175000017500000000000012053222075022107 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/0000755000175000017500000000000012053222075026040 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/0000755000175000017500000000000012053222075027635 5ustar l3onl3on././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/PkgInfoamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/PkgInf0000644000175000017500000000001010753565633030744 0ustar l3onl3onAPPLaELH././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/Info.plistamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/Info.p0000644000175000017500000000171410753565633030733 0ustar l3onl3on CFBundleName ed2kHelperScript CFBundleDevelopmentRegion English CFBundleExecutable applet CFBundleIdentifier org.amule.ed2kHelperScript CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature aELH CFBundleURLTypes CFBundleURLName ED2K URL CFBundleURLSchemes ed2k CFBundleTypeRole Viewer LSPrefersCarbon LSUIElement 1 ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resources/amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resour0000755000175000017500000000000012053222075031035 5ustar l3onl3on././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resources/Scripts/amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resour0000755000175000017500000000000012053222075031035 5ustar l3onl3on././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resources/Scripts/main.scptamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resour0000644000175000017500000000456610753565633031071 0ustar l3onl3onFasdUAS 1.101.10ÿÿÿÿ lÿþ i Iÿýÿü ÿý.GURLGURLnullÿÿ€ÿÿ€TEXT oÿû ÿû0theurltheURLÿü l7 k7   r  f oÿú ÿú0theapptheApp  r  l ÿù I ÿøÿ÷ ÿø.earsffdralis afdr oÿö ÿö0theapptheAppÿ÷ÿù oÿõ ÿõ0thepaththePath O  k r lÿô n 1ÿó ÿó ctnr oÿò ÿò0thepaththePathÿô oÿñ ÿñ0thepaththePath!ÿð !r"# "n$% $1ÿï ÿï posx %oÿî ÿî0thepaththePath #oÿí ÿí0 theposixpath thePosixPathÿð m &&Únulls߀ÿœuýSystem Events.app刊˜Øåÿ¿rÔ£? PÎ>øåÿ¿k†˜ØˆŠ˜ p> xæÿ¿0y†˜ ìsevsalis|Future¿óò~H+uýSystem Events.appÑÜ¿Ô> ÿÿÿÿ CoreServices¿ôFÞ¿Ô’j uýuÙuØ4Future:System:Library:CoreServices:System Events.app$System Events.appFuture-System/Library/CoreServices/System Events.app/ÿÿ'( 'r")* )b +, +oÿì ÿì0 theposixpath thePosixPath ,m- - /ed2k *oÿë ÿë0 ed2kprogram ed2kProgram(./ .r#.01 0b#,23 2b#(45 4n#&67 61$&ÿê ÿê strq 7o#$ÿé ÿé0 ed2kprogram ed2kProgram 5m&'8 8  3n(+9: 91)+ÿè ÿè strq :o()ÿç ÿç0theurltheURL 1oÿæ ÿæ0 thecommand theCommand/;< ;I/4ÿå=ÿä ÿå.sysoexecTEXTÿÿ€TEXT =o/0ÿã ÿã0 thecommand theCommandÿä<>ÿâ >L57ÿáÿáÿâ "error reporting shouldReportÿþÿà?@ÿà?ÿß ÿß.GURLGURLnullÿÿ€ÿÿ€TEXT@ÿÞÿÝÿÜABÿÛ ÿÞ.GURLGURLnullÿÿ€ÿÿ€TEXT ÿÝ0theurltheURLÿÜAÿÚÿÙÿØÿ×ÿÖÿÕ ÿÚ0theurltheURL ÿÙ0theapptheApp ÿØ0thepaththePath ÿ×0 theposixpath thePosixPath ÿÖ0 ed2kprogram ed2kProgram ÿÕ0 thecommand theCommandBÿÔ&ÿÓÿÒ-ÿÑ8ÿÐ ÿÔ.earsffdralis afdr ÿÓ ctnr ÿÒ posx ÿÑ strq ÿÐ.sysoexecTEXTÿÿ€TEXTÿÛ8)E±O¡j E²Oá ¢â,E²O¢ã,E³UO£ä%E´O¤å,æ% å,%EµO¥j Ohascr úÞÞ­././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resources/applet.rsrcamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resour0000644000175000017500000000055210753565633031060 0ustar l3onl3on$$F@$$F¸Þ!¦Fscszspshÿÿÿÿamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/MacOS/0000755000175000017500000000000012053222075030577 5ustar l3onl3on././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/MacOS/appletamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Contents/MacOS/ed2kHelperScript.app/Contents/MacOS/0000755000175000017500000010171410753565633030627 0ustar l3onl3onÊþº¾EÔ `#Ì þíúÎ Ø•8__PAGEZEROŒ__TEXT00__text__TEXT+Ø ÜØ€__picsymbol_stub__TEXT5´%´€$__symbol_stub__TEXT5´%´€__picsymbolstub1__TEXT5À %À€ __cstring__TEXT7`0'`Œ__DATA@0__data__DATA@0__nl_symbol_ptr__DATA@0 __la_symbol_ptr__DATA@$40$__dyld__DATA@X0X__common__DATA@€48__LINKEDITPÔ@Ô /usr/lib/dyld dCV§Î/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices 4CV§ÎX/usr/lib/libSystem.B.dylibh`/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServicesôÞ0/usr/lib/libSystem.B.dylib €F@*0€X 0€‰ ¡`–Р´#GÇœxш€ùíð °”Ý <¿ÿÓÿçÿÿÿÿÿÿÿÿÿÿÿ'üs€þãÿüùÿÿÿÿÿÃ?Àð×€‡1 `G¬‘gÂ`ð(è! D x~xž|8`8€(H-|`x8€^8€x€^8€|€^88(8`-Hy|`x€^88`-€ž8HÁ€!€|¦»ÁÿøN€ |¦BŸ}ˆ¦=Œ|¦9Œ }‰¦N€ |¦BŸ}ˆ¦=Œ|¦9Œ }‰¦N€ |¦BŸ}ˆ¦=Œ|¦9Œ€}‰¦N€ |¦¿Áÿø”!ÿ |> x~xž|888`-HÁ|`x@8@ xBŸè¦HM<_€B Ѐ8€8/€Až€^8 T>+€A<_8bý`H±<_8bþHHÅ€!€|¦»ÁÿøN€ |¦BŸ}ˆ¦=Œ|¦9Œ¤}‰¦N€ |¦BŸ}ˆ¦=Œ|¦9Œd}‰¦N€ |¦BŸ}ˆ¦=Œ|¦9Œ¤}‰¦N€ |¦8@8”!ÿ a<8a8°:˜A9˜A8H8!`€|¦N€ |¦<`ap<€sc`clt`„pt”!ÿ Hµ|iy@¢ 8`H(8@88a8˜A9°:‘!<˜A8H¥8`8!`€|¦N€ |¦BŸ}h¦=k|¦…‹ \}‰¦N€ |¦BŸ}h¦=k|¦…‹ @}‰¦N€ |¦BŸ}h¦=k|¦…‹ $}‰¦N€ |¦BŸ}h¦=k|¦…‹ }‰¦N€ |¦BŸ}h¦=k|¦…‹ ì}‰¦N€ |¦BŸ}h¦=k|¦…‹ Ð}‰¦N€ |¦BŸ}h¦=k|¦…‹ ´}‰¦N€ |¦BŸ}h¦=k|¦…‹ ˜}‰¦N€ |¦BŸ}h¦=k|¦…‹ |}‰¦N€ |¦BŸ}h¦=k|¦…‹ `}‰¦N€ |¦BŸ}h¦=k|¦…‹ D}‰¦N€ |¦BŸ}h¦=k|¦…‹ (}‰¦N€ |¦BŸ}h¦=k|¦…‹ }‰¦N€ __dyld_mod_term_funcs__dyld_make_delayed_module_initializer_calls__dyld_image_count__dyld_get_image_name__dyld_get_image_header__dyld_NSLookupSymbolInImage__dyld_NSAddressOfSymbollibobjc__objcInitThe kernel support for the dynamic linker is not present to run this program. 7`48 ü ô ¸ \ F€£ø´ôp `tIœ¢ÀZtÖP…hÍÎðÍdàà1ˆ©@,1ˆ©@(1ˆ©@$1ˆ©@L1ˆ©@H1ˆ©@D1ˆ©@@1ˆ©@<1ˆ©@81ˆ©@41ˆ©@01ˆ©@T1ˆ©@P1ˆ@ @@ 4 @€K @„h @ˆŽ @Œ¡ @» @”Ö @˜ó @œ  @ . @¤P @¨t @¬•@ž @°¯ ÍdÆ ÍÎðÜ £øÿ  \   ¸'  `J tp ¢À~ Iœ¤ ÖPÌ ôpÓ ´Û …hã  ôê F€ð Ztö  ü|j‡ˆ(*8:?[ó4=UÆ8 !" !_NXArgc_NXArgv___progname__mh_execute_header_catch_exception_raise_catch_exception_raise_state_catch_exception_raise_state_identity_clock_alarm_reply_do_mach_notify_dead_name_do_mach_notify_no_senders_do_mach_notify_port_deleted_do_mach_notify_send_once_do_seqnos_mach_notify_dead_name_do_seqnos_mach_notify_no_senders_do_seqnos_mach_notify_port_deleted_do_seqnos_mach_notify_send_once_environ_receive_samples_CallComponentDispatch_OpenDefaultComponent___keymgr_dwarf2_register_sections___keymgr_global__cthread_init_routine__dyld_register_func_for_add_image__dyld_register_func_for_remove_image__init_keymgr__keymgr_get_and_lock_processwide_ptr__keymgr_set_and_unlock_processwide_ptr_abort_atexit_calloc_errno_exit_free_mach_init_routineÎúíþ H…8__PAGEZEROÐ__TEXT__text__TEXT\Ï\ €__picsymbol_stub__TEXT++€__symbol_stub__TEXT++€__cstring__TEXT,L,__picsymbolstub2__TEXTx}x€__textcoal_nt__TEXTõõ €Œ__DATA __data__DATA __nl_symbol_ptr__DATA __la_sym_ptr2__DATA __dyld__DATA0 0__common__DATAP 48__LINKEDIT0Ì Ì /usr/lib/dyld d:ÌLC/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices 4ý¶LCX/usr/lib/libSystem.B.dylib Œ!@ PX! 8!P\j‰åƒäðƒì‹]‰\$M‰L$ƒÃÁãˉ\$èôU‰åWVSƒì,èe‹E‰ƒl‹E ‰ƒp‹E‰ƒt‹ƒ|‹…ÀtÿЋƒ„‹…ÀtÿÐèÁè°Eä‰D$ƒœ‰$èÒ‹Eä…Àt‰$豋ƒ€Ç‹E ‹8…ÿudë'€ù/D‰ò¶v„Éuî…Àt ƒÀ‰ƒx뉻x‹Eƒ8t ‹EƒÀƒ8uøƒÀ‰D$ ‹E‰D$‹E ‰D$‹E‰$è‰$è¶„Ét¸w‰ú¸ë‹U‰åSƒì$èhEô‰D$ƒ·‰$èÿUôƒÄ$[]Ãhÿ%0 ÿ%4 U‰åƒì(ÆEðÆEñfÇEò‹E‰EôEð‰$èõÉÃU‰åƒì(ÇD$tpcsÇ$tlpaèÀ…Àu°ëÆEðÆEñfÇEò‰EôEð‰$èµ1ÀÉÃ__dyld_mod_term_funcs__dyld_make_delayed_module_initializer_callsèx‹‰Ÿÿ቗Qéÿÿÿè_‹‰ŠÿቂQéÿÿÿèF‹‰uÿá‰mQéíþÿÿè-‹‰`ÿá‰XQéÔþÿÿ苉Kÿá‰CQé»þÿÿ‹ $Ë$Ã,…ž·Ðé°   4 P K T h X Ž \ ¡ ` » d Ö h ó l  p . t P x t | • ž € ¯ÆÜÿ%+|jzý½ÅÛ‚_NXArgc_NXArgv___progname__mh_execute_header_catch_exception_raise_catch_exception_raise_state_catch_exception_raise_state_identity_clock_alarm_reply_do_mach_notify_dead_name_do_mach_notify_no_senders_do_mach_notify_port_deleted_do_mach_notify_send_once_do_seqnos_mach_notify_dead_name_do_seqnos_mach_notify_no_senders_do_seqnos_mach_notify_port_deleted_do_seqnos_mach_notify_send_once_environ_receive_samples_CallComponentDispatch_OpenDefaultComponent___keymgr_dwarf2_register_sections__cthread_init_routine_atexit_errno_exit_mach_init_routineamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMule.app/Icon0000755000175000017500000000000010753565633020173 0ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/Compilation.flags.in0000644000175000017500000001670012050266603021435 0ustar l3onl3on# @configure_input@ @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ INSTALL = @INSTALL@ build_triplet = @build@ host_triplet = @host@ ACLOCAL = @ACLOCAL@ ALCC_FALSE = @ALCC_FALSE@ ALCC_MANPAGES = @ALCC_MANPAGES@ ALCC_TRUE = @ALCC_TRUE@ ALC_FALSE = @ALC_FALSE@ ALC_MANPAGES = @ALC_MANPAGES@ ALC_TRUE = @ALC_TRUE@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AMULECMD_MANPAGES = @AMULECMD_MANPAGES@ AMULEWEB_DEFS = @AMULEWEB_DEFS@ AMULE_DAEMON_FALSE = @AMULE_DAEMON_FALSE@ AMULE_DAEMON_MANPAGES = @AMULE_DAEMON_MANPAGES@ AMULE_DAEMON_TRUE = @AMULE_DAEMON_TRUE@ AMULE_GUI_FALSE = @AMULE_GUI_FALSE@ AMULE_GUI_MANPAGES = @AMULE_GUI_MANPAGES@ AMULE_GUI_TRUE = @AMULE_GUI_TRUE@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_CPPFLAGS = @BFD_CPPFLAGS@ BFD_LIBS = @BFD_LIBS@ BUILD_CC = @BUILD_CC@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CAS_DEFS = @CAS_DEFS@ CAS_FALSE = @CAS_FALSE@ CAS_MANPAGES = @CAS_MANPAGES@ CAS_TRUE = @CAS_TRUE@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMPILE_CMD_FALSE = @COMPILE_CMD_FALSE@ COMPILE_CMD_TRUE = @COMPILE_CMD_TRUE@ COMPILE_LIB_COMMON_FALSE = @COMPILE_LIB_COMMON_FALSE@ COMPILE_LIB_COMMON_TRUE = @COMPILE_LIB_COMMON_TRUE@ COMPILE_LIB_EC_FALSE = @COMPILE_LIB_EC_FALSE@ COMPILE_LIB_EC_TRUE = @COMPILE_LIB_EC_TRUE@ COMPILE_NLS_FALSE = @COMPILE_NLS_FALSE@ COMPILE_NLS_TRUE = @COMPILE_NLS_TRUE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CRYPTOPP_CPPFLAGS = @CRYPTOPP_CPPFLAGS@ CRYPTOPP_LDFLAGS = @CRYPTOPP_LDFLAGS@ CRYPTOPP_LIBS = @CRYPTOPP_LIBS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEBUGFLAG = @DEBUGFLAG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ED2K_FALSE = @ED2K_FALSE@ ED2K_MANPAGES = @ED2K_MANPAGES@ ED2K_TRUE = @ED2K_TRUE@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FILEVIEW_FALSE = @FILEVIEW_FALSE@ FILEVIEW_TRUE = @FILEVIEW_TRUE@ GDLIB_CFLAGS = @GDLIB_CFLAGS@ GDLIB_CONFIG_PATH = @GDLIB_CONFIG_PATH@ GDLIB_LDFLAGS = @GDLIB_LDFLAGS@ GDLIB_LIBS = @GDLIB_LIBS@ GENCAT = @GENCAT@ GENERATE_FLEX_HEADER_FALSE = @GENERATE_FLEX_HEADER_FALSE@ GENERATE_FLEX_HEADER_TRUE = @GENERATE_FLEX_HEADER_TRUE@ GEOIP_CPPFLAGS = @GEOIP_CPPFLAGS@ GEOIP_LDFLAGS = @GEOIP_LDFLAGS@ GEOIP_LIBS = @GEOIP_LIBS@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ INCINTL = @INCINTL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SKINS_FALSE = @INSTALL_SKINS_FALSE@ INSTALL_SKINS_TRUE = @INSTALL_SKINS_TRUE@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ KBUILDSYCOCA = @KBUILDSYCOCA@ KDE4_CONFIG = @KDE4_CONFIG@ KDE_APPLNK_PATH = @KDE_APPLNK_PATH@ KDE_HEADER_DIR = @KDE_HEADER_DIR@ KDE_ICON_PATH = @KDE_ICON_PATH@ KDE_MIME_PATH = @KDE_MIME_PATH@ KDE_MODULE_PATH = @KDE_MODULE_PATH@ KDE_SERVICE_PATH = @KDE_SERVICE_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ LIBPNG_CONFIG_PATH = @LIBPNG_CONFIG_PATH@ LIBPNG_LDFLAGS = @LIBPNG_LDFLAGS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBUPNP_CFLAGS = @LIBUPNP_CFLAGS@ LIBUPNP_CPPFLAGS = @LIBUPNP_CPPFLAGS@ LIBUPNP_LDFLAGS = @LIBUPNP_LDFLAGS@ LIBUPNP_LIBS = @LIBUPNP_LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONOLITHIC_FALSE = @MONOLITHIC_FALSE@ MONOLITHIC_MANPAGES = @MONOLITHIC_MANPAGES@ MONOLITHIC_TRUE = @MONOLITHIC_TRUE@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MULECFLAGS = @MULECFLAGS@ MULECPPFLAGS = @MULECPPFLAGS@ MULECXXFLAGS = @MULECXXFLAGS@ MULELDFLAGS = @MULELDFLAGS@ MULERCFLAGS = @MULERCFLAGS@ NEED_CORESERVICES_FALSE = @NEED_CORESERVICES_FALSE@ NEED_CORESERVICES_TRUE = @NEED_CORESERVICES_TRUE@ NEED_RC_FALSE = @NEED_RC_FALSE@ NEED_RC_TRUE = @NEED_RC_TRUE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PLASMAMULE_FALSE = @PLASMAMULE_FALSE@ PLASMAMULE_TRUE = @PLASMAMULE_TRUE@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ QT_CORE_CXXFLAGS = @QT_CORE_CXXFLAGS@ QT_CORE_LIBS = @QT_CORE_LIBS@ QT_DBUS_LDFLAGS = @QT_DBUS_LDFLAGS@ QT_GUI_CXXFLAGS = @QT_GUI_CXXFLAGS@ QT_GUI_LIBS = @QT_GUI_LIBS@ QT_MOC = @QT_MOC@ RANLIB = @RANLIB@ RC = @RC@ RCFLAGS = @RCFLAGS@ READLINE_LIBS = @READLINE_LIBS@ RESOLV_LIB = @RESOLV_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SVNDATE = @SVNDATE@ SYS_WIN32_FALSE = @SYS_WIN32_FALSE@ SYS_WIN32_TRUE = @SYS_WIN32_TRUE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ USER_INSTALL_HOOK = @USER_INSTALL_HOOK@ VERSION = @VERSION@ WEBSERVER_MANPAGES = @WEBSERVER_MANPAGES@ WEB_FALSE = @WEB_FALSE@ WEB_TRUE = @WEB_TRUE@ WXBASE_CPPFLAGS = @WXBASE_CPPFLAGS@ WXBASE_LIBS = @WXBASE_LIBS@ WXCAS_FALSE = @WXCAS_FALSE@ WXCAS_MANPAGES = @WXCAS_MANPAGES@ WXCAS_TRUE = @WXCAS_TRUE@ WX_CFLAGS = @WX_CFLAGS@ WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ WX_CONFIG_PATH = @WX_CONFIG_PATH@ WX_CPPFLAGS = @WX_CPPFLAGS@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ WX_DEBUG = @WX_DEBUG@ WX_LIBS = @WX_LIBS@ WX_PORT = @WX_PORT@ WX_RESCOMP = @WX_RESCOMP@ WX_SHARED = @WX_SHARED@ WX_UNICODE = @WX_UNICODE@ WX_VERSION_FULL = @WX_VERSION_FULL@ WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ WX_VERSION_MINOR = @WX_VERSION_MINOR@ XAS_FALSE = @XAS_FALSE@ XAS_TRUE = @XAS_TRUE@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@ ZLIB_LDFLAGS = @ZLIB_LDFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ ac_ct_AR = @ac_ct_AR@ ac_ct_BUILD_CC = @ac_ct_BUILD_CC@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_LD = @ac_ct_LD@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_RC = @ac_ct_RC@ ac_ct_STRIP = @ac_ct_STRIP@ ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ amule-adunanza-2012.1+2.3.1~dfsg1.orig/Makefile.in0000644000175000017500000010261712053222406017600 0ustar l3onl3on# Makefile.in generated by automake 1.11.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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@ @COMPILE_NLS_TRUE@am__append_1 = intl po # ADUNANZA BEGIN # dist_icon_DATA += amule.xpm # dist_util_DATA += amule.desktop @MONOLITHIC_TRUE@am__append_2 = amuleadunanza.xpm @MONOLITHIC_TRUE@am__append_3 = amuleadunanza.desktop # ADUNANZA END # ADUNANZA BEGIN # dist_icon_DATA += amulegui.xpm # dist_util_DATA += amulegui.desktop @AMULE_GUI_TRUE@am__append_4 = amuleguiadunanza.xpm @AMULE_GUI_TRUE@am__append_5 = amuleguiadunanza.desktop DIST_COMMON = $(am__configure_deps) $(am__dist_icon_DATA_DIST) \ $(am__dist_util_DATA_DIST) $(srcdir)/Compilation.flags.in \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(srcdir)/version.rc.in \ $(top_srcdir)/automake/dist-hook.am $(top_srcdir)/configure \ $(top_srcdir)/intl/Makefile.in ABOUT-NLS config.guess \ config.rpath config.sub depcomp install-sh missing \ mkinstalldirs subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/GeoIP.m4 \ $(top_srcdir)/m4/build-tools.m4 $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/cryptopp.m4 $(top_srcdir)/m4/fallocate.m4 \ $(top_srcdir)/m4/gdlib.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/kde.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libpng.m4 $(top_srcdir)/m4/libupnp.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/plasmamule.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/qt.m4 $(top_srcdir)/m4/readline.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/wxwin.m4 \ $(top_srcdir)/m4/zlib.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = intl/Makefile Compilation.flags version.rc CONFIG_CLEAN_VPATH_FILES = 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_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__dist_icon_DATA_DIST = amuleadunanza.xpm amuleguiadunanza.xpm am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" "$(DESTDIR)$(utildir)" am__dist_util_DATA_DIST = amuleadunanza.desktop \ amuleguiadunanza.desktop DATA = $(dist_icon_DATA) $(dist_util_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = intl po docs src unittests 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__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 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@ ALCC_MANPAGES = @ALCC_MANPAGES@ ALC_MANPAGES = @ALC_MANPAGES@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AMULECMD_MANPAGES = @AMULECMD_MANPAGES@ AMULEWEB_DEFS = @AMULEWEB_DEFS@ AMULE_DAEMON_MANPAGES = @AMULE_DAEMON_MANPAGES@ AMULE_GUI_MANPAGES = @AMULE_GUI_MANPAGES@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_CPPFLAGS = @BFD_CPPFLAGS@ BFD_LIBS = @BFD_LIBS@ BUILD_CC = @BUILD_CC@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CAS_DEFS = @CAS_DEFS@ CAS_MANPAGES = @CAS_MANPAGES@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CRYPTOPP_CPPFLAGS = @CRYPTOPP_CPPFLAGS@ CRYPTOPP_LDFLAGS = @CRYPTOPP_LDFLAGS@ CRYPTOPP_LIBS = @CRYPTOPP_LIBS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEBUGFLAG = @DEBUGFLAG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ED2K_MANPAGES = @ED2K_MANPAGES@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDLIB_CFLAGS = @GDLIB_CFLAGS@ GDLIB_CONFIG_PATH = @GDLIB_CONFIG_PATH@ GDLIB_LDFLAGS = @GDLIB_LDFLAGS@ GDLIB_LIBS = @GDLIB_LIBS@ GENCAT = @GENCAT@ GEOIP_CPPFLAGS = @GEOIP_CPPFLAGS@ GEOIP_LDFLAGS = @GEOIP_LDFLAGS@ GEOIP_LIBS = @GEOIP_LIBS@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INCINTL = @INCINTL@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ KDE4_CONFIG = @KDE4_CONFIG@ KDE_APPLNK_PATH = @KDE_APPLNK_PATH@ KDE_HEADER_DIR = @KDE_HEADER_DIR@ KDE_ICON_PATH = @KDE_ICON_PATH@ KDE_MIME_PATH = @KDE_MIME_PATH@ KDE_MODULE_PATH = @KDE_MODULE_PATH@ KDE_SERVICE_PATH = @KDE_SERVICE_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ LIBPNG_CONFIG_PATH = @LIBPNG_CONFIG_PATH@ LIBPNG_LDFLAGS = @LIBPNG_LDFLAGS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBUPNP_CFLAGS = @LIBUPNP_CFLAGS@ LIBUPNP_CPPFLAGS = @LIBUPNP_CPPFLAGS@ LIBUPNP_LDFLAGS = @LIBUPNP_LDFLAGS@ LIBUPNP_LIBS = @LIBUPNP_LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONOLITHIC_MANPAGES = @MONOLITHIC_MANPAGES@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MULECFLAGS = @MULECFLAGS@ MULECPPFLAGS = @MULECPPFLAGS@ MULECXXFLAGS = @MULECXXFLAGS@ MULELDFLAGS = @MULELDFLAGS@ MULERCFLAGS = @MULERCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ QT_CORE_CXXFLAGS = @QT_CORE_CXXFLAGS@ QT_CORE_LIBS = @QT_CORE_LIBS@ QT_DBUS_LDFLAGS = @QT_DBUS_LDFLAGS@ QT_GUI_CXXFLAGS = @QT_GUI_CXXFLAGS@ QT_GUI_LIBS = @QT_GUI_LIBS@ QT_MOC = @QT_MOC@ RANLIB = @RANLIB@ RC = @RC@ RCFLAGS = @RCFLAGS@ READLINE_LIBS = @READLINE_LIBS@ RESOLV_LIB = @RESOLV_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SVNDATE = @SVNDATE@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBSERVER_MANPAGES = @WEBSERVER_MANPAGES@ WXBASE_CPPFLAGS = @WXBASE_CPPFLAGS@ WXBASE_LIBS = @WXBASE_LIBS@ WXCAS_MANPAGES = @WXCAS_MANPAGES@ WX_CFLAGS = @WX_CFLAGS@ WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ WX_CONFIG_PATH = @WX_CONFIG_PATH@ WX_CPPFLAGS = @WX_CPPFLAGS@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ WX_DEBUG = @WX_DEBUG@ WX_LIBS = @WX_LIBS@ WX_PORT = @WX_PORT@ WX_RESCOMP = @WX_RESCOMP@ WX_SHARED = @WX_SHARED@ WX_UNICODE = @WX_UNICODE@ WX_VERSION_FULL = @WX_VERSION_FULL@ WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ WX_VERSION_MINOR = @WX_VERSION_MINOR@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@ ZLIB_LDFLAGS = @ZLIB_LDFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_BUILD_CC = @ac_ct_BUILD_CC@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ 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@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = $(am__append_1) docs src unittests # ADUNANZA BEGIN # EXTRA_DIST = amule.rc amule.ico amule.png convert.ico \ # README.Debian-Packages aMule.spec \ # amule_build_install.sh autogen.sh \ # po/l10n.xsl # EXTRA_DIST = amule.rc amule.ico amule.png convert.ico \ aMuleAdunanzA.spec \ amule_build_install.sh autogen.sh \ po/l10n.xsl # ADUNANZA END dist_icon_DATA = $(am__append_2) $(am__append_4) icondir = $(datadir)/pixmaps dist_util_DATA = $(am__append_3) $(am__append_5) utildir = $(datadir)/applications # ADUNANZA END ACLOCAL_AMFLAGS = -I m4 DISTCHECK_CONFIGURE_FLAGS = \ --enable-amulecmd \ --enable-webserver \ --enable-amule-daemon \ --enable-amule-gui \ --enable-cas \ --enable-wxcas \ --enable-plasmamule \ --enable-alc \ --enable-alcc \ --enable-adu-nslu2 MAINTAINERCLEANFILES = ABOUT-NLS \ Makefile.in \ aclocal.m4 \ config.guess \ config.h.in \ config.rpath \ config.sub \ configure \ depcomp \ install-sh \ missing \ mkinstalldirs # ADUNANZA BEGIN # EXTRA__DIST__SUBDIRS = aMule.app debian EXTRA__DIST__SUBDIRS = aMuleAdunanzA.app aMuleGUIAdunanzA.app all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/automake/dist-hook.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 .PRECIOUS: 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/automake/dist-hook.am: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi 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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ Compilation.flags: $(top_builddir)/config.status $(srcdir)/Compilation.flags.in cd $(top_builddir) && $(SHELL) ./config.status $@ version.rc: $(top_builddir)/config.status $(srcdir)/version.rc.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-dist_iconDATA: $(dist_icon_DATA) @$(NORMAL_INSTALL) @list='$(dist_icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-dist_iconDATA: @$(NORMAL_UNINSTALL) @list='$(dist_icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) install-dist_utilDATA: $(dist_util_DATA) @$(NORMAL_INSTALL) @list='$(dist_util_DATA)'; test -n "$(utildir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(utildir)'"; \ $(MKDIR_P) "$(DESTDIR)$(utildir)" || 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)$(utildir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(utildir)" || exit $$?; \ done uninstall-dist_utilDATA: @$(NORMAL_UNINSTALL) @list='$(dist_util_DATA)'; test -n "$(utildir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(utildir)'; $(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. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; 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" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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 CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__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*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(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*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(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 \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ --with-included-gettext \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(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__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: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(icondir)" "$(DESTDIR)$(utildir)"; 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." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_iconDATA install-dist_utilDATA 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 $(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 pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_iconDATA uninstall-dist_utilDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-hook dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_iconDATA \ install-dist_utilDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-dist_iconDATA uninstall-dist_utilDATA # Avoid everything getting built when doing "make check" check-recursive: SUBDIRS = unittests dist-hook: test -z "$(EXTRA__DIST__SUBDIRS)" || \ for d in $(EXTRA__DIST__SUBDIRS) ; do \ mkdir $(distdir)/$$d ; \ for f in `find $(srcdir)/$$d -name '.svn' -prune -o -printf "%P\n"` ; do \ if test -d $(srcdir)/$$d/$$f ; then \ mkdir $(distdir)/$$d/$$f ; \ else \ cp -p $(srcdir)/$$d/$$f $(distdir)/$$d/$$f ; \ fi ; \ done ; \ done # ADUNANZA END # 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: amule-adunanza-2012.1+2.3.1~dfsg1.orig/amule.ico0000644000175000017500000007753610753565633017366 0ustar l3onl3onhV ¨¾00¨f@@(€€(L63( @ÿÿÿE^Ô¬¬­:GXwz~ÀÑæ#YRŽØMe‡–©!IyFx·1Räêðœ²Ì½¿Àˆ‹Ž0i±Xs•XYÂ9WDn¡lmo9Z;eA‚ÓÊËÌŸ ¡#R‹5rÀMf’””•µµ¶-b¢&=\+OUmŠx€‰9pµ;k¨Hˆ×5a®$Eq¥¥¦}‚%]¤*\š/eª³¸½‘uvx†‡‰An¨Xqލ©ª5k±/`žI{¹ ÿÿÀÀðàøøü?ü?üüøóÿÿÿÿÿ( @€ÿÿÿ7zÏ­®¯KLPo|Œr¤à"RÆÙñ$29:Íghä8bFmœ”•–efhÇÇÇZÉœ´Óèèè&c°F_|68=MaÌ4Ij[ªØØÙ‰¥ÈFx^rÃp“¾+J=q³H‡Øsuv‡‡‰\˜Ýº»»_p…-^œ•ž¨›¬ÀTX‰.Q{Œš,m¿Z[^L‚Ç+-0Uq”/Xº¹ÅÑTZÚ&5M~¤Ô=bÏg€ŸNv§adÊ1XŽ}€%Dk£¤¥4g¬hlw?d“Hz¶DBÒõ÷ùÍÏÑ2V L‚¸¿Æ@ÕßßßPÚIe…?m,Jq&Y–nopŒŽhs6m¿Ij“)CbTVYêíðÂÈÏ,T‡0j´'M•1rÅ,e¨6U{4c¤.>@D¡§­(h¹ÂÂÂ2K?r½$9Tˆ˜B|Ʋ³³`adl~“#Q‡/6?+\£yz{8vÈ?fš/P"J{*X‚‚‚§¨©3n¹"HuœŸ¢“—œ:v»Lb|6[Cr¾¿¿JÙ&9Bw¿$_¬˜˜™)_Ÿ[|¥,£ò¶êùú×b}º¦v©ãµ¶ó(ÎÎYßH턪 •_ºîÆ¡¦}rLñ°È8#ÑûyŸªÏã}Þ!œ¤¥õ«=·dÒ¼"0´Ï‹æ¦ÆP†7XS.[A;ZT»õN 4cžÌIáŠqð-Ríz³÷2C ¨¦W<Ð[ÁBh Ø€UUU@*:`‰°ägá™”È ®GÎ""²²uÿ1“anmÔoÀu¸{¿<ÝG‚…ô˜˜VÝ<|ýþŠŠŠÎÎpi|#ÍŠŠÍÍå±…G­%ÊššÅå\š]MEOøÛô±3ÚÛè$Ó–)6¦¡DŒÔ×Ù}ŽF¾eR׋Ùçö é—ì’9ü‡Ç5=/ÉÄw~¹tK  ˆ‘ Üâk+ƒ›¬·?àí?½ÿÿÿÿøþøøøøþàÿþ?ü?ü?ü?ÿÀÿÿàÿÿàÿÿàÿÿàÿÿðÿÿàÿÿàÿÿðÿÿà?ÿÿà?ÿÿÀ?ÿÿ„?ÿÿŽ?ÿÿ?ÿÿ?ÿþÿÿÿÿŸÿÿÿŸÿÿÿßÿÿÿÿÿ(0`€ ÿÿÿ7yÍ®¯°LMP€LŒ61Ël¢àרØ"5¢ÃìOp™kkäv®">bRWÅefh>Ww$b°—˜™…ŠÔU‰Éåíö79=¿ÄÊ?R¤‰¨Îim–Vj‚–£±.MDt²0]–EGÓ'IsÏßñqƒ–3U¼DhÕ@cŒÃÐßY\Þ*,0D…Økwƒf‹»Š‹V“Ú+9N,nÁT\f#.T„;=½[È>o–ºæRx«IS_\v•DEIPSÖI~UVYŠš¬k‡ª?u¾ÙÞäF`~!$*ž«¸+b¥1Y(@Fq¦&2Cd›Úwyz!P˜#)5š¢'EiVnŠ*T9_’DTi¿¿À2Nq7uÄPcxN_¿#7UPŽÚ^eà‘‘“Su¡……†ÌÕàLk‘?yÓM†Í/26.?S::Í"Pˆ-Pz(h·1lµµµ¶[\_&Xª;iekÜ-Fw=>B©ª«ëîò)_ŸDkž2U•0a­\n‚Þäê)?]jlr6`#HŠIeˆ2Q&Z˜áââÇÈÈ`bd3c¤€Ô%^¦6epˆ¥h€/BF“—›SS+s+ÕÏJªÍSÔÉ!«MM““{(xAvðæW]]YÂÉvÄÄa#ŠºÂévó2 Ŷ>[Õã/n-ÞAêúEŒEvôÇy££££yÇvé€ê¦2¼š/Ðãç³§xÈv€Eáè¸ëÇy£f¼Üf£yvé¸AâÜíNÒÛ>;IUâóȸ€}æév„¢£fÜûûûÜf£Ç€òÈxÑÜfm;lã/`Çx¦®òéèæú®Uy£ÜûÃjÃûÜ£¢ò€®µ•­//Òã㚦®òÉðáæL®UyfÜ,j0j,Üfy#ø_˜×Ø‹¶ÅºL®UyfÜ,j0j¯¬fyJþÕt΀êU¢£¥,Ã'uÆD”Û““{3•ya_év¢y£Üq"k~†°§c««MJÝãì·Üµê}LêëëôUÇ&ñ* |âà¶>[{JãO•2¦vwŽIgß` 6K hAx¼8»ÐÅ«ã^—⦨^ùÊ>¶¶¶¶¶‹®ÑܱlÏ/·¼Ñx ;»»Ê¾>¾>>>>ÝЛ®óµÜ•9¾Å>>¤bÙ<‚ÐÐ/ÒÒÒ[[¾Ò»»™¢P©ìüÌ÷‚Ê“nnüüün»ùùÿH’²/JÒÝÝ///ã¾;;‚zd÷J«ÊÊÊlnçzÌ;Ên»[Ï;ddÅ»»»ÝÕ’Êddù»»;ç‚»J>d繑d²õ ¹ zÐ%Q?žÓB’Bžõž;Rö sœÁCƒTpC>ojZ«M‰ˆ  Þ )5$Ú,j=€X±fÜûFƒ¿}ê„¢yfff–7SL®„Çyyy¢ÇÙ4 áLê„UU”ë]æèáELv½.ä„ E…(æE!@aWï}v¡1Öý±êÍïŒÖGåòý:\1áéaŸL±ýôeááEúwòîrAwiŒ}€ÉÈr‡˜áèÀ–P¸VÖËý¸±ËU´#¸Pòîaê½ÿÿÿÿÿÿÿ?ÿÿþ?þÿÿ€?þþ?þþþþ?ÿÿ€ÿÿÿÁ€óÿÿÀÿÿÀÿÿ€ÿÿ€ÿÿÀÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿøÿÿÿð>ÿÿÿð~ÿÿÿáþÿÿÿãÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿÿÇÿÿÿÿÿçÿÿÿÿÿçÿÿÿÿÿÿÿÿ(@€ÿÿÿCeׯ°°MNP~€Mu¨â¾Ôî&86-Êd‡¶Lj9dzz䣦Ú%d´Šš«QÚÇÇÇdfiçèê5Ot8:>Eyµ8K²``á*2°‘‘“BDÐ3_™5EZay”:|ÑרØJP”|‹žŸ ¡#5K¬¸ÆyžÌFxOu¤°Ø6VÆ×æø++.Vh|—¦¸[F}Å&-;6b»O‡ÎÚâë1k´my…%V‘$Kž6>µvwy€•¬Hc„oppÑÑÐ>SÐ>fœ?WrÁÂÂ{¤Ø<8ÎLNÖ3@RZcn<_‡u„”ððï!BnˆŸ¶5wÊ*JsHƒ9q¸To/27x€‰0^¯,5D>sÐ>w¿+k½$_­Þàá!²µ¸Tk†Gr¤0QµIl™)]ž:W{Xb„,UŠr Ù3HfRSV :[–ž¥#JzT‹Ð[„·%(.¢ª*X¦8iƃ„†=>Bhgä0PÅÊÏ S›V“Ú8_'4¸Š‹dmv9fŸúúú5^šš›acf"P‹.Y‘+:R9@L@rŒ–¢.f®jžßJ€5ZºW|ª8zÉ>m~£Î;PÊKˆJŠÙ3nºÓÔÕ29B6J_'[˜@r²;d“Q|®$2E'B.FŒ“8zÍ6uÄ)_¤!6%Ac"S”‡ˆ‰EsUÕkln"$)3X]^`ËÌÌ=?Í5VŠ6j°Vx¤F}G M„)P{|}1j­º¿Ä,M"Vš]ƒ²)-6³´µ46:%It(h¹%S¡AzÂR‚¾˜œ "\¦.h³Dbˆ"5Ovë¤è§Ì®®[ÈÈÈÈú®¢xš¬è§ÌF®®[[®®‡ûx š¬è§]ÌÖFÖ2Ì]×E íþ*è§]2)ħ‡Tך °KŽßþ¬*æ*§‡Ö ×í *+,Mš ¬Í‘ÖºÃÑM¤¬¨,+luVÜ®Æ{ÑME¬K ïuöÜ[çííšµæÎu}ÜvÙªíš *ÆKu[ÜvœE¤¤¬æóu•‘öœ°Ž ¤¬*æœ}‘õ°¤¤ *Æ®ÜzÆgU¤ t朽öˆ¤Et[YÙéæîYÖ°Æ}vææÖ½ÆÆVîæ®äÆ}tÖKÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÀÿÿÿÿÿÿ€ÿÀÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿÿÿüÿÿÿü>ÿÿÿøÿÿøÿÿøÿÿøÿÿøÿÿðÿÿøÿÿøÿÿÿðÿÿÿøÿÿÿÿøÿÿÿÿøÿÿÿÿøÿÿÿÿøÿÿÿÿü?ÿÿÿÿþ?ÿÿÿÿþÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿðÿÿÿÿÿà0ÿÿÿÿÿÀ6ÿÿÿÿÿ€~ÿÿÿÿÿ€þÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿþþÿÿÿÿþÿÿÿÿÿü?ÿÿÿÿÿüÿÿÿÿÿÿÿÿÿƒÿÿÿÿÿÿÿÃÿÿÿÿÿÿÿÃÿÿÿÿÿÿÿãÿÿÿÿÿÿÿáÿÿÿÿÿÿÿñÿÿÿÿÿÿÿùÿÿÿÿÿÿÿÿÿÿÿ(€Hÿÿÿ6zÐQQS®¯¯"$½€‚;uЏî%(,×××vuäBg’~žÃBDÑbƒ¨V“ÙQ˜^gq#7S—˜™9Sp3]µÃÃÃ<<=¹Ñí=B¦Cy²íïï{“¨‘žäSXܪ»Ê_v L:GX™ª¼¤Ãè&B0l£Õãösƒ–&BiNYi4)ÊefäF‡Ø=YË%?ž-Xf“Ìrst-nÀ4W#`®‹ŒŽZ„¹E\y¢£¤Puœ3.a”ZZ[„„¢+5B*6ÂàââCzÄBm£"ÎÍθ¸¸DEHµ¯Ïpz†’¬Ë024RoŒõöö9c%RŠRe{2?NjlmCs `o€6Kc8v¹FPX:@Æ%\†‘Q‰Ñ`cf€‰’.Osˆ¤ *;-g®¥®·˜¤®†–¨;€Û#¿ÅÌ?~Ï5uÈD1QwMSÓ7\—+b¥»¼Å9iœDi†84ËpjåMÙCVi&e¶Kˆ%Iu3j·:nŒ“¯´·Z~§Q€»=AE$=_aŠ&O{,l·Av½iow“‘"V¢Tr” ),1JKN,c-Ij!Q‘ÉÈÉ;OhU[c,29N‹Ù7w±I[p :i5F`ghk4a¯4a¤Ba‚ÒÓÓ¿¾¾$$&?{Ñ/NqBr©Kf„,,-6\‡"N‡#WšF‚Î%\¥"5]l|%,?@Ö0m®’“”EKSedb@^~,9N Fs5qÀ,f·(a­Ax:|Âbz•RÚ&X›8s¸3U|R_n6n¤3o¸+^3g¥#99;5Niþ°ª°œœ°°M©œœ°ý œ F°°ýªªM‚ó«ÝI©‚««I‚–ªœýFþ¿ýýý'‘ª‚ó««««««« œ¿««««««««‚‚+åiiý°Fœ¿F¿œý=a{>Ysö“I«««““??«ýI“««««««««ZЬyÇÔÞ‘ýiF¿MÄMMMÄÄ¿MMþŸÄ MM F°ýÊa‹ÆŒ×ÖÕîîî¤,“““?ãããã_ãýI°ããã??ã“?«xüÖy7ÇÇ®Æ#‹ˆ'=ýý°FœIFþIMFýF='aaˆ++aa'Êœœ°Mþ¿œýýœý=‘ˆ‹U#ÆQÇ7y5lîîîîRããã___¹¹TT4ª TTT¹____ãã?tú£y7ÉÇ®ÆÆžÔUU}Pa'Êýýœ¿ý=#Æ\ûqßßdd||úúúdßé{'‘'aP‹+UÔUÔž#ÆÇÉyy5îîîî¹¹TT4444……ݳ–……4444TTT¹_E55y77ÇÇÆÆ#žÔU}Pˆˆˆa'''ˆÔÆQQ\éßßdd£úúúúúúúúúúúdûÆÔ‹ÔÔÔÔÔžžÆQÇÉyy5lîîîîî‡4…………””8«³«~””…44…Nú££77ŒÇÇÆÆ#žÔU}PPˆa'ÞUïÆÆ®ééßßd£|úúúÕúúúúúúúúú£déÆÔ‹ÔÔÔžžÆÆÇŒ7y5lîîîîÂë”””~~~Ï;“M«Ï~8¦88‡ù£££77\ÇÇÆÆïžÔU}PPˆaaPUïÆÆQééßßd£úúúúÕÕÕÕÕllÕÕúúúúd߆U‹ÔÔÔžÆÆ®Ç7y55lîîîî•Â*~;;;«Aþ;;;;~`¨¬Î55y7É\ÇÆÆÆïžÔU}PPaaˆUï#ÆÆ†éßßdÖúúúÕÕllîîîllllÕÕÕúú|ßÇÔÔÔÔž#ÆÆÇ7y55lîîõqEgH¾; Iý¾HàòÅz(£££y7ÉÇÇÆÆÆ#ÔUUPPÞaåPUïÆÆÆéßßdd|úúÕllîîîîîîîîîllÕúúú|déÔÔÔÔžÆÆÇÉ755lîîîîYég˜HHH~“ªMª«…;H¾g†ß£££77ŒÇÇÆÆÆžÔUUPPÞaÞUï#ÆÆééßdd|úúÕllîîîÍÍÍÍÀÀîîîlÕúúúdß#‹ÔÔžzÆÇŒ7y5lîîîîYßgfeH…IŸ«œ«I«…bÚ †ß£££77ŒÇÇÆÆïžÔUUPÞaaÞUïÆÆ®éßdddúúúllîîÍÍÍÍÍÍÍÍÀkîîlÕúú|d\ÔÔÔÔÆÆÇŒ7y5lîî•ßÇêb”?“ª_Ï;`6méd55£77ÉÇÇÆÆ#žÔUUPÞ'ˆPžïÆÆ†éßdd|úÕllîîÍÍÍÍ//ÍÍÍÍÍkîîlÕúúddÆÔÔÔ#Æ®Ç7755îî•|éb;;;8¹–T~;*Æéd55y77ÇÇ®ÆÆžžUU}PˆaÞ‹ïïÆÆÜqßd||úÕlîîÍÍÍ///////ÍÍÍîîlÕúú£déÔÔÔžÆÆÇÉ755îîîdÉ€”M…~~ÏÏ”ÅzÉ555y7Édž®ÆÆžÔUUPPaaÞUïÆÆ†éqßd||úÕîîkÍÍ///´´´///ÍÍÍîîlÕúúdéÔÔÔžÆÆÇŒ755lîîîîîúqp‡Ï~88~4¿¹8”””‡¼Qq555y7ÉÇÇÆÆÆžÔU}PPaaÞUïÆÆ†éqdd|úÕlîîÍÍ//´ÛÛÛÛ´´/ÍÍÍîîlÕúúdßžÔÔžÆÆÇŒ7y5ÕîõõÂ*~8””””8?M“8””””””ëE5££7ÉÇÇ®ÆÆ#ÔUU}PPaåÞÔïÆÆ†éqd||úÕlîîÍÍ//ÛÛÛÛ´/ÍÍîîîÕúúÎßÔÔÔÔžÆÆÇÉ×Öçlîîõ9”8”””888~ŸªÏÏ~Ï~Ϧ£dÉ\ÇQÆÆ#ÔÔU·PPÞaåÞÔïÆÆ†éqddúúÕlîîÍÍ/´ÛÛÛ´/ÍÍõîîÕúú£ü¢ÔÔÔÔžÆQÇÉÖ|çÕll*ë”ë”””8Tª“………ëëëëÚq鯯ÆÔ{{{+++‹·ˆ'åÞÔïzƆéqddúúÕlîîÍÍ/´ÛÛÛ´//ÍõîîÕúúúqM––––––ô–Ýôô‚ÝÝôóIóIIóI‚Mij ª MÌaÞU#zƆéqddúúÕlîîÍÍ/´ÛÛÛÛ´//ÍÀîlÕúú|q– aPUïzƆéqddúúÕlîîÍÍ//´ÛÛÛÛ´´//õîllÕúú|ê ¿Mª FFaˆUïÆÆ†éqßdúúúlîîÍÍÍ//´wÛÛ´´/h0o0‰lÕú||nª‚III󖪪 M 'ˆ‹žÆÆ†éqßd|úúÕlîîÍÍÍ////w/´ u--u[0—||Î ª Ÿ«««««««ó‚+¸Ý Mþþ‘ˆ‹UÆÆQéqßdd|úúlîîîÍÍÍ/////--u ||»ªþ³M––ÝIó‚ M“““««««INõ•üŸ+–ˆ‹UÆÆÆ†éqdd|úúÕlîîîÍÍÍÍ/Í0--uo Ûv06–IþMÝôô‚óó««««««þþ___ãããã“““‰îlç|qÜ¢¸aPUïÆÆQéqddd|úúÕlîîîkÍÍÍÀu-- .vvv0¸‚¸¸ê•:««««““––“4T44T¹¹_Ñkîîlç×Ɇ®ÔˆUžÆÆÆ†éqddd|úúÕlîîîîîî0-uuo .. 0\†ûº|Õl• «“???ãã___þ–¹”………444ð<îîîl5y7ÇÆ#Þ‹UïÆÆÆ†éé×ddúúúúÕlîîîî[-u ..vJÇ××ÖÕîîîÂã__ã_¹TT44«þ4~888”””‡kîîîl55y7ÇÆ#ÔåUU#ÆÆQ†é†Æ¢Æ##ÆQƆÇü|u-u ...vJ07×55î¹T4444……“I‚4˜;;]8îîîîl5y77Çz#ÔÞPžÆÆÆÆÆØUmz®§ŒŒ7q†1B-.... Jv1§7755lîîî4…”8`Ï_I‚“¾H˜HòE5Ùîîîîl5y7\Çz##U2PU#ÆQnż EEEE5lîB- ...  1ÇÉ755lîîîÀ€`~ÏÏ_–‚«˜H˜bú•îîîl5y7\ÇQï‹¢ÅÚbgeòT4444444444¥‡K 1-.v. .1®ÇÇÉy5lîîî€H˜““‚IITb€ÂYîîîîl55y7ÉÇmQ;~”4¹4ðT4Tð¹4Tð4¹ðð41. .[ï®®ÇÉy5lîîk5HHHàÏãIIIÑ~;;g dÙîîîîl5yy7\z84TT44¹¹T44T444T44ð44ëo[-mÆÆ®ÇÉ755lîîîÕ3gfH“Ý«“”€d•îîîîl5yy7Q ¯~4T4T¹4ðT4TT4TT44T4T4@ro}žÆÆÆ®Œ7y5lîîîî•dÂf;4“«”””8”Nß|•îîîl5yyg¯Ï444ÑT44T¹T44¹T444TT~H%¢#ÆÆ®§7y55îîîk5ò˜;;;;…ŸÝ”~””””K€Ù•îîl55£ŒÂG;;~…4444444T4444444444~;ÅÆQ®ÇÉ755îîîkúÂbÏ8I…¦€D•ll—£ÖŒ!¾;~…………4…………4¹4444444…ÏÅ®®ÇÉ7y5lîîõk¤Ú`~888…I«…ë””888”¤lÕÕçߌÂGH;;………………………44……T4……4fQ†ÇÇÉÖçÕ•îî~”””””¹««ÐЄ$„¸]›˜;;;;;¹…èèè………4…………~;QÇÇûqdñÕ¤9”””””8`”Ÿ HH;;;;…“…èRnnn6ż:::_ãã“?““«Ÿ HH;;…ÝT8ò;;;“? H¾H¹ÝI8888””””””…;;;;;;;H“ ¾H”“‚M¹Ï8888888888”””””¹;;;;;;;¯T›¾¾H”“I–I¦8~~~888888888888”è«ò;;;;½” ¯¾H8“I–M…ÏÏÏÏÏÏÏÏ~~~~~~~~8”I…˜;HH Ϲ½G?I–ª«ÏÏÏÏÏÏÏ~Ï«‚àHH›Ï¾½¯«ÝMM…ÏÏÏ“M?HH¾¾›“; GHãŸMM«ϹMI¹˜H¾¾ 4? ½Ý–M8–ÝI˜H¾¾GG?¯ ;I–ª?ÏÝ–‚“;H¾¯›޾«ªŸ~«MÝ«¯G …¹½›4–…òTªMI¹H¯½“C¾84ªMŸ?¯ …_ C½Ï~ŸªÝ“;››;““¯ ½¾;;àHH˜˜HH¾HH«ªÝC“¾› ¯H;;;¾›ŽŽŽŽŽŽŽŽŽCC ãªM㯠”_“H› ›CCG¾;¾G›ŽC¾;ª–C“?jj ›½j¾HHH¾¾¾¾¾H;¹…›¯_gL%ŽC ›½G¯¾¾˜˜˜HH¯¯½ ”*%Cj½›› ››½½GGG½ ›› ››C‡€jO½Žjg%j¯½ ½½›CŽ›››¯T¼¨C¹ ¾ Úbg % ½j!žNVVäI&¤€€ÚN%GŽO!gT²UVä«&Í/^È9 “M¯%"²ï O4ý–&Í/ww;VVäãgNã#  îwÛ&˜VääT:¶ïL)wÈw&O4œCO¼:¶ØLÍwwÛOE±’ Í///´O&ETX’€O)õ////Û) mQO™ÕÍÍÍ///´&^ Uz &35îîÀÍÍ///™O&ÂWmïzé3j&9yÕllîÀÍÍÍÍÍO3ÉšU#Æ®ÇÉ×Ö£úÕllîîÀÍÍõ™O ydUïÆÆééddÖ|úÕllîîîîîl&&9y|dæÞïzÆ®éÉddÖ|úúÕllllllÕ5×ÖÖd×EáUÆzƆéqddd|úúúúÕÕÕúúú|Ödd7¨FýcaPïÆÆÆ†éqddddúúúúúúú|£ddddÉNóó°ˆUUïÆÆ†ééßdddd|||||ddddßéé˰°ÊaÞUïÆÆÆ†éééßdddddddddßqéÇpc°aÞUï#ÆÆ††\ééqßßddßÉÇÇdž†ÃIý°Êa'aÞUUÆÆÆÆ††Ü\\¬ÜÇqÂ9ê®ÆQIi°°=aÞÞa'Þ‹Uï#ÆÆÆQ®†êE9&&&üï#éË=ýý=a2P‹‹a'åPUUïÆÆzƆü¤3 üÆQdüË=i=='aÞPUïUÞaa2ÞUUUïïÆÆzïmØUÆüÕ7íc==Ê'aÞPUUpüêÔƒ 'ˆÞPU‹UUUUU†ü×®z–=ÊÊ'aˆPUU®€& U'aaa ƒÞ}ï9^^d®mR=ÊÊÊaåP}U# 3n'''S„Uzd^|ÇzÒ'Ê'''a}PUmp9†¸‘a$xØz|Û^úŒzžc''''aa}UUzÂL& ÒSxmm|3^¤Œ®m$='''aaP}Uïp &9:ìØzd^Õ×§mXÐ=a'''2}}žžp9 Â÷Øzd^¤×1mnáaaÌ'aPPÔm6E9pÔÁm®×^^¤dÇzÔ$aaaaaÞPUUïp †ïØzß^^¤dÇzØøaaaaaˆPUUïÆpzÔØzéÈÈdŒ®ïì aaaaaP}UUzÆm{ì’z§l^Èü§®ï{aaÞ}aP}ÔUïUØ÷¶Øz§|^^|Œ®zžƒ2}PaÞP}ïïØÔ¶Øz1ü9^^|Œ®ÆïWaÞPÞaP}UžmÁUz®Œ|^™¤Œ®zU˃ÞPP}}žØUìÔm®§dÈ^d1ÆØÒåÞÞÞÞPUØÔØïŒ¤^úÇÆØ÷ÓÞÞÞÞ‹‹Ø÷‹ïz§d^0ézz{ÞÞÞÞPP‹mzq¤™Èü®zU2ÞåÞÞ#Uïz§|^|zUšƒ2å2åØzd^ú§zØ¡ƒ22Øï®Ç|^ŒzØÒØzd^^|®m÷âzzŒ¤|ïžØï®|^ȧzØâï®Ç^^×zØØzú3|®Øï®×^Èmÿâ#¤^qz­mzd^|mmØz§^ÈzïØ®|^Ç}UzŒ^×Uâz¤¤’§¤mm|®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿàÿÿÿà?ÿÿÿÿÿÿüÿÿÿàÿÿÿÿÿÿÿÿÿÀÿð€?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀ?ÿÿÿÀÿÿÿÀÿÿÿàÿÿÿÿÿàÿ€ÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿðøÿÿÿÿÿÿÿÿàüÿÇÿÿÿÿÿÿÀðÿÿÿÿÿÿÀÿÿÿÿÿÿÀÿÿÿÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿÀÿÿÿÿÿÿÀÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿ€¿ÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿø?ÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿü?ÿÿÿÿÿÿÿÿÿÿÿø?ÿÿÿÿÿÿÿÿÿÿÿü?ÿÿÿÿÿÿÿÿÿÿÿà?ÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿðxÿÿÿÿÿÿÿÿÿÿÿàøÿÿÿÿÿÿÿÿÿÿÀ?øÿÿÿÿÿÿÿÿÿÿÀøÿÿÿÿÿÿÿÿÿÿ€ÿø?ÿÿÿÿÿÿÿÿÿÿ€ÿø?ÿÿÿÿÿÿÿÿÿÿÿø?ÿÿÿÿÿÿÿÿÿÿÿø?ÿÿÿÿÿÿÿÿÿþÿüÿÿÿÿÿÿÿÿÿþ?ÿüÿÿÿÿÿÿÿÿÿüÿüÿÿÿÿÿÿÿÿÿüÿÿþÿÿÿÿÿÿÿÿÿøÿÿþÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿ€ÿÿÿÿÿÿÿÿÿñÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿamule-adunanza-2012.1+2.3.1~dfsg1.orig/amule_build_install.sh0000755000175000017500000001377412050266603022113 0ustar l3onl3on#! /bin/bash # # Copyright (c) 2004-2011 Marcelo Roberto Jimenez ( phoenix@amule.org ) # # All rights reserved. This script is provided under the terms of the GPL. # # # Example usage: copy all tarballs to a directory, cd to it and # $ ./amule_build_install.sh # SCRIPT_VERSION="2.0.0" USERHOME=$(echo ~) DEFAULT_PREFIX="${USERHOME}/usr" DEFAULT_TARDIR=$(pwd) DEFAULT_UNTARDIR=${DEFAULT_TARDIR}/untars JOBS=4 # # This function uses three parameters: # $1 - an input parameter specifying a mask for the distribution, # e.g., 'aMule-CVS-*' for cvs tarballs or 'aMule-*' for distro tarballs. # $2 - an output parameter with the name of the variable that will # receive the full file name of the tar archive # $3 - an output parameter with the name of the variable that will # receive the basename of the distribution # function lookup_distro { # assign the filename of distribution # the following is equivalent to execute XXX_FILENAME=$(ls ${TARDIR}/$1) eval $2=$(ls ${TARDIR}/$1) # Now we use indirection to dereference $2 #echo $2 # evaluates to XXX_FILENAME #echo ${!2} # evaluates to /home/user/dir/xxx-y.z.t.tar.gz # remove the directory and the extension parts and assing it # to XXX_DISTRO in $3 case ${!2} in *.gz) eval $3=$(basename ${!2} .tar.gz) ;; *.bz2) eval $3=$(basename ${!2} .tar.bz2) ;; *.zip) eval $3=$(basename ${!2} .zip) ;; esac } function untar_distro { # $1 evaluates to /home/user/dir/xxx-y.z.t.tar.gz or .bz2 local TARCMD= case $1 in *.gz) TARCMD="tar zxf" ;; *.bz2) TARCMD="tar jxf" ;; *.zip) TARCMD="unzip -ao" ;; esac $TARCMD $1 } function init_package_versions { # # Put the software distributions in directory $TARDIR and the # script does the rest. There can even be a mixture of .tar.gz and # .tar.bz2 because the untarring routine tests it on the fly # # single quotes have to be used here to avoid expansion # lookup_distro 'cryptopp*' CRYPTOPP_FILENAME CRYPTOPP_DISTRO lookup_distro 'libupnp-*' LIBUPNP_FILENAME LIBUPNP_DISTRO lookup_distro 'wxWidgets-*.*.*.tar.*' WXWIDGETS_FILENAME WXWIDGETS_DISTRO lookup_distro 'aMule-*' AMULE_FILENAME AMULE_DISTRO echo echo "Software packacge versions:" echo " cryptopp : $CRYPTOPP_DISTRO" echo " libupnp : $LIBUPNP_DISTRO" echo " wxWidgets : $WXWIDGETS_DISTRO" echo " aMule : $AMULE_DISTRO" echo } function init_environment { echo echo aMule building script, version $SCRIPT_VERSION echo # only prompt if we're missing information if [ x$PREFIX = x ] || [ x$TARDIR = x ] || [ x$UNTARDIR = x ] ; then PREFIX=${DEFAULT_PREFIX} echo "Where to install?" read -p "[${PREFIX}]: " if [ x$REPLY != x ]; then PREFIX=${REPLY}; fi echo echo "Where are the tarballs?" TARDIR=${DEFAULT_TARDIR} read -p "[${TARDIR}]: " if [ x$REPLY != x ]; then TARDIR=${REPLY}; fi echo echo "Where to untar?" UNTARDIR=${DEFAULT_UNTARDIR} read -p "[${UNTARDIR}]: " if [ x$REPLY != x ]; then UNTARDIR=${REPLY}; fi fi # test that we have write permissions to the install dir TST_DIR=${PREFIX}/tmp TST_FILE=${TST_DIR}/test-if-has-write-permission mkdir -p ${TST_DIR} touch ${TST_FILE} if [ ! -w ${TST_FILE} ]; then echo "You don't appear to have write permissions to ${PREFIX}." echo "You must fix that before continuing." exit fi rm -f ${TST_FILE} echo echo "Building for:" echo " --prefix=${PREFIX}" echo " tarballs are at ${TARDIR}" echo " tarballs will be untarred at ${UNTARDIR}" echo # Initialize package version variables init_package_versions } # # cryptopp # function build_cryptopp { CRYPTOPP_INSTALL_DIR="${PREFIX}/cryptopp" CRYPTOPP_SOURCES_DIR="cryptopp_tmpdir" rm -rf ${CRYPTOPP_SOURCES_DIR} mkdir -p ${CRYPTOPP_SOURCES_DIR} cd ${CRYPTOPP_SOURCES_DIR} untar_distro ${CRYPTOPP_FILENAME} make -f GNUmakefile -j${JOBS} PREFIX=${CRYPTOPP_INSTALL_DIR} make install cd .. } # # libUPnP # function build_libupnp { untar_distro ${LIBUPNP_FILENAME} LIBUPNP_INSTALL_DIR="${PREFIX}/libupnp" cd libupnp-?.?.? ./configure \ --enable-debug \ --prefix=${LIBUPNP_INSTALL_DIR} \ && \ make -j${JOBS} > /dev/null && \ make install > /dev/null cd .. } # # wxWidgets # function build_wxwidgets { untar_distro ${WXWIDGETS_FILENAME} WXWIDGETS_INSTALL_DIR="${PREFIX}/wxWidgets" cd wxWidgets-?.?.? ./configure \ --enable-mem_tracing \ --enable-debug \ --disable-optimise \ --enable-debug_flag \ --enable-debug_info \ --enable-debug_gdb \ --with-opengl \ --enable-gtk2 \ --enable-unicode \ --enable-largefile \ --prefix=${WXWIDGETS_INSTALL_DIR} \ && \ make -j${JOBS} > /dev/null && make install > /dev/null cd .. } # # aMule # function build_amule { untar_distro ${AMULE_FILENAME} AMULE_INSTALL_DIR="${PREFIX}/amule" cd amule-cvs ./configure \ --enable-ccache \ --with-denoise-level=3 \ --enable-debug \ --disable-optimize \ --enable-verbose \ --enable-geoip \ --enable-cas \ --enable-wxcas \ --enable-amule-gui \ --enable-webserver \ --enable-amulecmd \ --enable-amule-daemon \ --with-wx-config=${WXWIDGETS_INSTALL_DIR}/bin/wx-config \ --prefix=${AMULE_INSTALL_DIR} \ --with-crypto-prefix=${CRYPTOPP_INSTALL_DIR} \ --with-libupnp-prefix=${LIBUPNP_INSTALL_DIR} \ && \ LD_LIBRARY_PATH=${WXWIDGETS_INSTALL_DIR}/lib make -j${JOBS} && \ LD_LIBRARY_PATH=${WXWIDGETS_INSTALL_DIR}/lib make install > /dev/null } # # Here is where the fun begins... # init_environment # # Go to ${UNTARDIR} # mkdir -p ${UNTARDIR} cd ${UNTARDIR} # # Build stuff # build_cryptopp build_libupnp build_wxwidgets build_amule # # Leave ${UNTARDIR} # cd .. echo echo Finished compilation. echo You should run aMule like this: echo '$LD_LIBRARY_PATH'=${WXWIDGETS_INSTALL_DIR}/lib:${LIBUPNP_INSTALL_DIR}/lib LANG=en_US.UTF-8 ${AMULE_INSTALL_DIR}/bin/amule echo echo Of course you may choose to use a different locale. echo amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/0000755000175000017500000000000012053222166021340 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/0000755000175000017500000000000012053222166023135 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/SharedSupport/0000755000175000017500000000000012053222166025740 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/SharedSupport/locale/0000755000175000017500000000000012053222166027177 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Frameworks/0000755000175000017500000000000012053222166025255 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/PkgInfo0000644000175000017500000000001112004563664024414 0ustar l3onl3onAPPLAdGU amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Info.plist0000644000175000017500000000225712004563664025122 0ustar l3onl3on CFBundleDevelopmentRegion English CFBundleExecutable amulegui CFBundleName amuleguiadunanza CFBundleGetInfoString 2012.1 AdunanzA based on amulegui (aMule Project http://www.amule.org) CFBundleIconFile amuleadunanza CFBundleIdentifier net.adunanza.aMuleGUI CFBundleInfoDictionaryVersion 2012.1 CFBundlePackageType APPL CFBundleShortVersionString 2012.1 CFBundleSignature AdGU CFBundleVersion 2012.1 NSHumanReadableCopyright Copyright 2003-2012 AdunanzA Project (http://www.adunanza.net) - based on aMule (www.amule.org) NSMainNibFile NSMainNibFile NSPrincipalClass NSApplication amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Resources/0000755000175000017500000000000012053222166025107 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Resources/English.lproj/0000755000175000017500000000000012053222166027625 5ustar l3onl3on././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Resources/English.lproj/MainMenu.nib/amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Resources/English.lproj/MainMen0000755000175000017500000000000012053222166031072 5ustar l3onl3on././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Resources/English.lproj/MainMenu.nib/objects.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Resources/English.lproj/MainMen0000644000175000017500000001226212004563664031106 0ustar l3onl3on typedstreamè„@„„„NSIBObjectDataà„„NSObject…’„„„NSCustomObject)”„@@„„„NSMutableString„„NSString”„+ NSApplication†…†„i@–„„„ NSMenuItemŸ”’„„„NSMenuÌ”„i@@@„™™NewApplication†„„„NSMutableArray„„NSArray”š ’„›’œ„ i@@IIi@@@@:i@„™™About NewApplication†„™™†‚ÿÿÿ…„„„NSCustomResource)”–„™™NSImage†„™™NSMenuCheckmark††…„¦–§„™™NSMenuMixedState††……’…’…†’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’š’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Services†¤‚‚ÿÿÿ…¥…©„submenuAction:…’…’„„˜™Services†„ š†„™™_NSServicesMenu†††’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Hide NewApplication†„™™h†‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™ Hide Others†„™™h†‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Show All†¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Quit NewApplication†„™™q†‚‚ÿÿÿ…¥…©……’…’…††„™™ _NSAppleMenu†† „™™Preferences…†„™™,†‚‚ÿÿÿ…¥…©……’…’…†œ–„„˜™ Open Recent†„ š’„›’à„™™ Clear Menu†¤‚‚ÿÿÿ…¥…©……’…’…††„™™_NSRecentDocumentsMenu††„›’„„˜™File†„ š ’„›’Ê „™™New†„™™n†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Open...†„™™o†‚‚ÿÿÿ…¥…©……’…’…†’É’„›’Ê ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Close†„™™w†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Save†„™™s†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™ Save As…†„™™S†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Revert†¤‚ÿÿÿ…¥…©……’…’…†’„›’Ê ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™ Page Setup…†„™™P†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Print…†„™™p†‚‚ÿÿÿ…¥…©……’…’…††…† „™™ Open Recent†¤‚‚ÿÿÿ…¥…©¢…’…’Æ–„›’„„˜™Window†„ š’„›’è „™™Zoom†¤‚‚ÿÿÿ…¥…©……’…’…†’„›’è „™™Minimize†„™™m†‚‚ÿÿÿ…¥…©……’…’…†’ç’„›’è „™™Bring All to Front†¤‚‚ÿÿÿ…¥…©……’…’…††„™™_NSWindowsMenu†† ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†è–„›’„„˜™Edit†„ š ’„›’ô „™™Undo†„™™z†‚‚ÿÿÿ…¥…©……’…’…†’ó’„›’ô ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Cut†„™™x†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Copy†„™™c†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Paste†„™™v†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Delete†¤‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™ Select All†„™™a†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Find†¤‚‚ÿÿÿ…¥…©¢…’…’„„˜™Find†„ š’„›’  „™™Find…†„™™f†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™ Find Next†„™™g†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™ Find Previous†„™™G†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Use Selection for Find†„™™e†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Jump to Selection†„™™j†‚‚ÿÿÿ…¥…©……’…’…††…††’„›’ô „™™Spelling†¤‚‚ÿÿÿ…¥…©¢…’…’„„ š’„›’  „™™ Spelling…†„™™:†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Check Spelling†„™™;†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Check Spelling as You Type†¤‚‚ÿÿÿ…¥…©……’…’…††…†††…† „™™Redo†„™™Z†‚‚ÿÿÿ…¥…©……’…’…†ô–ÓÊ–ô–­œ–¼œ–þô–ßÊ–„›’„„™™MainMenu†„ š’„›’- ž¤‚‚ÿÿÿ…¥…©¢…’…’œ†’„›’- „™™File†¤‚‚ÿÿÿ…¥…©¢…’…’ʆ’„›’- „™™Edit†¤‚‚ÿÿÿ…¥…©¢…’…’ô†’„›’- „™™Window†¤‚‚ÿÿÿ…¥…©¢…’…’膒,†„™™ _NSMainMenu†† „™™Help†¤‚‚ÿÿÿ…¥…©¢…’…’„8„ š’„›’9 „™™NewApplication Help†„™™?†‚‚ÿÿÿ…¥…©……’…’…††…††-–´œ–1-–ëè–œ0–„„„NSWindowTemplateø”„ iiffffi@@@@@cܱàh‚px„™™Window†„™™NSWindow†„˜™View†„„„NSView)„„ NSResponder”’…š„ @@@@ffffffff„ š†……… àhàh’…’…’…’…†…„ffff@š„c„ffÕ’…©†•–9,–-•–;9– –3-–( – –ÔÊ–½œ–ÆÃ–àÊ–Ê1–¬œ– – ô–¯­–è5–·œ–¢œ–ô–5-–úô–ÚÊ–0-–ÍÊ– –÷ô–ðè–×Ê–" –ãÊ–ô3–ÐÊ–ÉÊ–ºœ–íè– ô–«œ–ÝÊ–ûô–ô–C>– –³œ–ô– –% – š-–Ú„˜™8†–•„˜™ File's Owner†–3„™™ NSMenuItem†–è…–ß„˜™2†–ㄘ™6†–þ„™™ NSMenuItem1†– „™™NSMenu†–„™™ NSMenuItem4†–Ê„˜™†–ׄ˜™3†–Ó„˜™7†–çO–-„˜™MainMenu†– „™™ NSMenuItem7†–„™™ NSMenuItem4†–÷„™™ NSMenuItem2†–9„˜™2†–%„™™ NSMenuItem8†–1O–„™™ NSMenuItem2†–ú„™™ NSMenuItem†–ÐO– „™™ NSMenuItem12†–;O–à„˜™5†–Ý„˜™10†–û„™™ NSMenuItem3†–š„™™121†–Ô„˜™1†–„™™ NSMenuItem13†–„™™ NSMenuItem10†–"„™™ NSMenuItem6†– „™™NSMenu†–„™™ NSMenuItem9†–ó„™™ NSMenuItem11†–„™™ NSMenuItem†–ô„™™NSMenu†–„™™ NSMenuItem3†–(„™™ NSMenuItem†–,„˜™1†–½„™™1111†–„™™ NSMenuItem1†–>„™™Window†–Í„˜™9†’„„„ NSMutableSet„„NSSet”„I’>†’„ š’„„„NSNibControlConnectorÏ„„NSNibConnector”„@@@í…„˜™performMiniaturize:††’„t°ð…„˜™arrangeInFront:††’„t°ã…„˜™print:††’„t°à…„˜™runPageLayout:††’„t°;…„˜™ showHelp:††’„t°Æ…„˜™clearRecentDocuments:††’„t°½•„˜™ terminate:††’„t°¢•„˜™orderFrontStandardAboutPanel:††’„t°·•„™™hideOtherApplications:††’„t°´•„™™hide:††’„t°º•„™™unhideAllApplications:††’„t°û…„˜™cut:††’„t°…„˜™paste:††’„t°ó…„˜™redo:††’„t°…„˜™ selectAll:††’„t°÷…„˜™undo:††’„t°þ…„˜™copy:††’„t°"…„˜™showGuessPanel:††’„t°%…„˜™checkSpelling:††’„t°(…„™™toggleContinuousSpellChecking:††’„t°Ô…„™™ performClose:††’„t°…„™™delete:††’„t°ë…„™™ performZoom:††’„t°…„™™performFindPanelAction:††’„t°…„™™performFindPanelAction:††’„t°…„™™performFindPanelAction:††’„t°…„™™performFindPanelAction:††’„t°…„™™centerSelectionInVisibleArea:†††’…š]„@i¼•±¬±Ýp±É|±è±•µ±{W±ÓO±«Ë±ãN±¡± ¨±9j±•±ó­±™¾±¡Æ±«±± ®±š± ¹±¯‚±ÊQ±‰™±%½±û ±œ9±º–±ÚP±§É±àM±;o±×K±ÍR±²±3£±>±ƒŽ±1S±¢±"»±¬±08±Æ~±ëű“´±­ƒ±£Ç±ç\±yV±Á±·‘±½ˆ±,g±—¼±}z±«Ä±ÔI±‹¯±§±s%±©Ê±³±›À±ð±¤±´†±Ã}±ßJ±¸±‹±í±ÐH± Ÿ±°±¢:±ô©±w'±÷ž±ŸÃ±5±úœ±¥È±‡˜±›±C±‘³±š±…’±(¿±-±þšÌš’„˜™IBCocoaFramework††././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Resources/English.lproj/MainMenu.nib/info.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Resources/English.lproj/MainMen0000644000175000017500000000111512004563664031101 0ustar l3onl3on IBDocumentLocation 126 126 356 240 0 0 1600 1178 IBEditorPositions 29 125 407 318 44 0 0 1600 1178 IBFramework Version 328.0 IBOpenObjects 21 29 IBSystem Version 7B8 ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Resources/English.lproj/MainMenu.nib/classes.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/Resources/English.lproj/MainMen0000644000175000017500000000015412004563664031103 0ustar l3onl3on{ IBClasses = ({CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }); IBVersion = 1; }amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Contents/MacOS/0000755000175000017500000000000012053222166024077 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleGUIAdunanzA.app/Icon0000644000175000017500000000000012004563664022150 0ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/convert.ico0000644000175000017500000000257610753565633017733 0ustar l3onl3onh( €€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿ'''777GGGWWWgggwww‡‡‡———§§§···ÇÇÇ×××ççç÷÷÷L²åÿLLþÿ²²ÿL&²1åJÿLrþšÿ²Âÿ L6L²bå{ÿL™þ¶ÿ²Óÿ1LQr²“å­ÿL¿þÑÿ²ãÿALm™²ÄåÞÿLåþìÿ²ôÿLGv²¥åÕÿîLþòÿõ²ÿùL6[²å£ÿ½LþÌÿÚ²ÿéL&?²YårÿŒLþ¥ÿ¿²ÿØL$²3åAÿ[Lþÿ£²ÿÈL ² åÿ)LþYÿˆ²ÿ· L² å:ÿfþL‘ÿ½ÿ²L-?²QåkÿŒþL­ÿÍÿ²+LHe²ƒåœÿ²þLÈÿÞÿ² c #BD7743", ", c #7F4418", "' c #795A42", ") c #6A3D17", "! c #87491C", "~ c #7E3F0F", "{ c #6B5E52", "] c #70431D", "^ c #86491B", "/ c #A45822", "( c #D18951", "_ c #AD642B", ": c #734219", "< c #715E4F", "[ c #785436", "} c #764016", "| c #924E1D", "1 c #9B5524", "2 c #6F391B", "3 c #6F6359", "4 c #784016", "5 c #88491C", "6 c #A15320", "7 c #CD8145", "8 c #894A1C", "9 c #7F471D", "0 c #716C66", "a c #68462A", "b c #7E4418", "c c #AF672F", "d c #814518", "e c #7C451C", "f c #6E3C15", "g c #814A21", "h c #99511C", "i c #A4602A", "j c #884A1C", "k c #6A492D", "l c #693C1B", "m c #7D461C", "n c #915223", "o c #804418", "p c #694E35", "q c #664F3A", "r c #794117", "s c #B96F36", "t c #CC9366", "u c #934E1D", "v c #6A523D", "w c #6A3D18", "x c #804921", "y c #784117", "z c #675A4F", "A c #6A4E36", "B c #824A21", "C c #6C6156", "D c #6F3F18", "E c #D69258", "F c #81481D", "G c #774820", "H c #6D675F", "I c #5B3B22", "J c #512D14", "K c #724F2F", "L c #7D5533", "M c #6B6660", "N c #634025", "O c #5A2E12", "P c #542B11", "Q c #5A3E26", "R c #743F16", "S c #80481D", "T c #7A4217", "U c #7D5D3F", "V c #5E3D23", "W c #5C2F12", "X c #573117", "Y c #592E11", "Z c #593216", "` c #715B45", " . c #6B4F36", ".. c #894E1E", "+. c #8A613E", "@. c #695B4E", "#. c #5F361B", "$. c #613618", "%. c #5F3518", "&. c #7E4D25", "*. c #766D65", "=. c #70411A", "-. c #754319", ";. c #886F5A", ">. c #5C341A", ",. c #67391B", "'. c #6E441D", "). c #716254", "!. c #684D35", "~. c #DD985F", "{. c #A56734", "]. c #78451C", "^. c #776E65", "/. c #4E392C", "(. c #6A3F1C", "_. c #7B5532", ":. c #756C64", "<. c #69411C", "[. c #CC573E", "}. c #9C5E28", "|. c #784B25", "1. c #6C665E", "2. c #4F4842", "3. c #563117", "4. c #71411C", "5. c #754720", "6. c #7E6753", "7. c #8A5022", "8. c #5C5C5C", "9. c #5E3C23", "0. c #523625", "a. c #713A1B", "b. c #794921", "c. c #74563B", "d. c #724723", "e. c #9E3E25", "f. c #7E5E40", "g. c #5C5044", "h. c #4C2B18", "i. c #4D2C18", "j. c #79461C", "k. c #804518", "l. c #714E2F", "m. c #7A6B5E", "n. c #77451C", "o. c #7D6D5D", "p. c #5C3B23", "q. c #552C11", "r. c #70451D", "s. c #6E5B4A", "t. c #66584B", "u. c #BB845B", "v. c #834D1F", "w. c #80471D", "x. c #7F6F61", "y. c #504B47", "z. c #4C2C18", "A. c #72461E", "B. c #7D5633", "C. c #6E6E6E", "D. c #735C46", "E. c #6D6C6A", "F. c #5A4232", "G. c #51311A", "H. c #744924", "I. c #75665A", "J. c #72553A", "K. c #7F400F", "L. c #C47537", "M. c #754924", "N. c #656464", "O. c #565554", "P. c #502F1B", "Q. c #57321B", "R. c #995D38", "S. c #764720", "T. c #7B6C5F", "U. c #71543A", "V. c #50504F", "W. c #5A493B", "X. c #946843", "Y. c #935828", "Z. c #7F4820", "`. c #675E56", " + c #6F5338", ".+ c #A7652C", "++ c #6E5F52", "@+ c #545556", "#+ c #4A2A17", "$+ c #3F2C25", "%+ c #452819", "&+ c #815734", "*+ c #A46E42", "=+ c #706962", "-+ c #714E2E", ";+ c #66605A", ">+ c #534B44", ",+ c #351E11", "'+ c #C39E7E", ")+ c #AA7243", "!+ c #7C5432", "~+ c #705339", "{+ c #754F2F", "]+ c #4D4D4D", "^+ c #564538", "/+ c #361F11", "(+ c #E8C3A4", "_+ c #775A44", ":+ c #747373", "<+ c #73553A", "[+ c #C07236", "}+ c #644B33", "|+ c #3C3B3A", "1+ c #392822", "2+ c #CBAC92", "3+ c #4E3F33", "4+ c #615750", "5+ c #665D55", "6+ c #695646", "7+ c #7D4317", "8+ c #52473C", "9+ c #393737", "0+ c #402517", "a+ c #352219", "b+ c #EDD1B9", "c+ c #EEB88A", "d+ c #905627", "e+ c #685F57", "f+ c #595656", "g+ c #5E4535", "h+ c #453023", "i+ c #4E2E1A", "j+ c #574639", "k+ c #6B5641", "l+ c #DC8E54", "m+ c #7C4720", "n+ c #434241", "o+ c #443D38", "p+ c #331E10", "q+ c #814D21", "r+ c #CB9266", "s+ c #785130", "t+ c #585959", "u+ c #392E25", "v+ c #432718", "w+ c #4D3E31", "x+ c #4E4D4D", "y+ c #5E4C39", "z+ c #74431B", "A+ c #DA9457", "B+ c #4C4D4D", "C+ c #3B3632", "D+ c #331F15", "E+ c #A67C5A", "F+ c #73431B", "G+ c #5D4B39", "H+ c #454545", "I+ c #3D2416", "J+ c #50301A", "K+ c #603E24", "L+ c #603618", "M+ c #796351", "N+ c #595755", "O+ c #3D3D3C", "P+ c #3D2B1F", "Q+ c #351F11", "R+ c #996136", "S+ c #71451E", "T+ c #5F3D24", "U+ c #563F30", "V+ c #3E2514", "W+ c #5B331A", "X+ c #874D1E", "Y+ c #734929", "Z+ c #363534", "`+ c #301F17", " @ c #241811", ".@ c #5F3517", "+@ c #AD6022", "@@ c #896A4E", "#@ c #534B45", "$@ c #311E14", "%@ c #251D1A", "&@ c #935624", "*@ c #885328", "=@ c #A46734", "-@ c #7D6C5D", ";@ c #434343", ">@ c #494745", ",@ c #221710", "'@ c #1D1816", ")@ c #824B21", "!@ c #824D21", "~@ c #895022", "{@ c #8B5327", "]@ c #9B5D28", "^@ c #7C6C5F", "/@ c #474542", "(@ c #241C19", "_@ c #17110E", ":@ c #935726", "<@ c #995726", "[@ c #9C5D28", "}@ c #9E6029", "|@ c #9D5925", "1@ c #875228", "2@ c #686463", "3@ c #474645", "4@ c #3C2A23", "5@ c #834D1E", "6@ c #884E21", "7@ c #935724", "8@ c #A4612C", "9@ c #A7652F", "0@ c #AD672F", "a@ c #AF672E", "b@ c #AA642D", "c@ c #A15C26", "d@ c #9C5723", "e@ c #925624", "f@ c #84664B", "g@ c #2A2725", "h@ c #1C1715", "i@ c #995D28", "j@ c #A8662D", "k@ c #955A36", "l@ c #696867", "m@ c #4B443E", "n@ c #4C4540", "o@ c #824B1E", "p@ c #9B5E28", "q@ c #7B6B5B", "r@ c #454342", "s@ c #221D1B", "t@ c #201B19", "u@ c #3A291D", "v@ c #4E2F19", "w@ c #B96F31", "x@ c #B96F33", "y@ c #B66A2F", "z@ c #AE652C", "A@ c #AC652C", "B@ c #A65D22", "C@ c #8F6E51", "D@ c #383636", "E@ c #292A2B", "F@ c #322921", "G@ c #4D2B14", "H@ c #894E1F", "I@ c #C07036", "J@ c #B86A30", "K@ c #B6682F", "L@ c #AE6225", "M@ c #927153", "N@ c #565655", "O@ c #483528", "P@ c #5D3417", "Q@ c #915323", "R@ c #995D26", "S@ c #A45E28", "T@ c #AD652B", "U@ c #C47536", "V@ c #C07132", "W@ c #BE6A29", "X@ c #B8682B", "Y@ c #B7682C", "Z@ c #AF682F", "`@ c #A16C41", " # c #63615F", ".# c #55351D", "+# c #CB7937", "@# c #CA7633", "## c #B86829", "$# c #AD662E", "%# c #646463", "&# c #593D25", "*# c #744219", "=# c #B8682A", "-# c #B76C30", ";# c #BB7033", "># c #C07033", ",# c #CD7A38", "'# c #D17B3F", ")# c #D6813F", "!# c #D47D39", "~# c #EFEDEA", "{# c #FEFEFE", "]# c #F6F6F5", "^# c #AE662F", "/# c #70665E", "(# c #624227", "_# c #CDC7C0", ":# c #C07134", "<# c #D78240", "[# c #A55D22", "}# c #886F59", "|# c #634932", "1# c #EFF0EF", "2# c #C07031", "3# c #CB7836", "4# c #CD7A37", "5# c #D78745", "6# c #D98745", "7# c #806F5F", "8# c #C37233", "9# c #DA8C4C", "0# c #916641", "a# c #5C5D5E", "b# c #624A38", "c# c #7D3F0F", "d# c #F6E3D5", "e# c #D37F3A", "f# c #D68745", "g# c #D98948", "h# c #DA8F51", "i# c #926742", "j# c #6C6F70", "k# c #684F3B", "l# c #D88847", "m# c #D98D4F", "n# c #DA9456", "o# c #EDB789", "p# c #A36E42", "q# c #6B6A69", "r# c #6D5A49", "s# c #D68240", "t# c #D98F4B", "u# c #DA9355", "v# c #6C6159", "w# c #705C4B", "x# c #D89150", "y# c #CE8346", "z# c #D9914B", "A# c #DA9356", "B# c #747574", "C# c #28221F", "D# c #555150", "E# c #E2E2E0", "F# c #846243", "G# c #785B44", "H# c #695F56", "I# c #824D1F", "J# c #D9D9D7", "K# c #CF7E39", "L# c #B1B5B6", "M# c #0B0806", "N# c #050402", "O# c #6F6D6B", "P# c #A88362", "Q# c #7A5C45", "R# c #606162", "S# c #655B53", "T# c #393633", "U# c #C3C4C6", "V# c #A6A5A5", "W# c #625F5D", "X# c #A99787", "Y# c #896E53", "Z# c #615E5D", "`# c #615B56", " $ c #B8B5AF", ".$ c #000000", "+$ c #4F4C4A", "@$ c #DAD6D5", "#$ c #585756", "$$ c #1B1412", "%$ c #373330", "&$ c #CACACA", "*$ c #BCAA99", "=$ c #90765F", "-$ c #5E5B5A", ";$ c #4E4C4B", ">$ c #8A6F54", ",$ c #AEAEAE", "'$ c #484542", ")$ c #957A62", "!$ c #CFCDCF", "~$ c #E7E7E7", "{$ c #CABBAA", "]$ c #A8937B", "^$ c #A89686", "/$ c #6C6B69", "($ c #47433F", "_$ c #805F41", ":$ c #957355", "<$ c #6A6867", "[$ c #302A25", "}$ c #BCBCBB", "|$ c #A48873", "1$ c #D3D3D3", "2$ c #9F9996", "3$ c #565756", "4$ c #504E4D", "5$ c #847362", "6$ c #CAC3BE", "7$ c #DCDDDD", "8$ c #C9C9C9", "9$ c #6E6D6B", "0$ c #545353", "a$ c #958272", "b$ c #D7D9DA", "c$ c #AAAAAA", "d$ c #54524F", "e$ c #555452", "f$ c #A69585", "g$ c #C0C0C0", "h$ c #AAAAA8", "i$ c #B7B7B7", "j$ c #8B8885", "k$ c #4A4846", "l$ c #5C5A59", "m$ c #A8A8A6", "n$ c #A4A19F", "o$ c #9B9B9B", "p$ c #7F7B7A", "q$ c #C8C8C8", "r$ c #646261", "s$ c #5A5754", "t$ c #BBBBBA", "u$ c #828180", "v$ c #342F2B", "w$ c #999895", "x$ c #A7A7A5", "y$ c #585553", "z$ c #565350", "A$ c #BEBEBE", "B$ c #A0A1A1", "C$ c #D6D7D9", "D$ c #363434", "E$ c #878582", "F$ c #646260", "G$ c #5B5957", "H$ c #969798", "I$ c #999696", "J$ c #ACB0B5", "K$ c #4E4948", "L$ c #3F3A38", "M$ c #525254", "N$ c #C2C3C5", "O$ c #71665D", "P$ c #706F6C", "Q$ c #817E7C", "R$ c #D7D7D5", "S$ c #999996", "T$ c #999797", "U$ c #979899", "V$ c #959595", "W$ c #918E8E", "X$ c #424140", "Y$ c #575452", "Z$ c #D9DADA", "`$ c #5C5956", " % c #807E7A", ".% c #454242", "+% c #B1B1B1", "@% c #E1E1DF", "#% c #8B8A89", "$% c #9B9A9A", "%% c #999798", "&% c #999898", "*% c #999896", "=% c #9F9F9F", "-% c #71706F", ";% c #5B5B5C", ">% c #AAAAA9", ",% c #C9CACC", "'% c #D6D7D8", ")% c #6B6866", "!% c #D1D1D1", "~% c #767371", "{% c #7A7977", "]% c #9D9C9C", "^% c #999796", "/% c #A3A09E", "(% c #D4D4D2", "_% c #5B5855", ":% c #4B4A49", "<% c #989898", "[% c #312C29", "}% c #918D8B", "|% c #999899", "1% c #BFC1C2", "2% c #C3C4C0", "3% c #CAC7C9", "4% c #CDCDCD", "5% c #7B7776", "6% c #4E4E4D", "7% c #6A6866", "8% c #585859", "9% c #5D5958", "0% c #949393", "a% c #464240", "b% c #BBBBBB", "c% c #CAC7C6", "d% c #DADBDB", "e% c #ABABAB", "f% c #474543", "g% c #5E5C5B", "h% c #81807F", "i% c #484746", "j% c #B5B5B5", "k% c #D0D1CE", "l% c #CCCACC", "m% c #514D4B", "n% c #565251", "o% c #A5A4A4", "p% c #AFAFAF", "q% c #C4C3C4", "r% c #D6D6D6", "s% c #6F6F6F", "t% c #555250", "u% c #C9C9C8", "v% c #9D9E9F", "w% c #969696", "x% c #969695", "y% c #949292", "z% c #B7B5B6", "A% c #DBDCDC", "B% c #848382", "C% c #464441", "D% c #626261", "E% c #6D6A68", "F% c #C3C4C1", "G% c #C6C3C0", "H% c #999999", "I% c #949290", "J% c #B3B1AD", "K% c #B1B0B5", "L% c #B8B7B7", "M% c #979494", "N% c #4A4C4C", "O% c #514F4C", "P% c #807F7E", "Q% c #939291", "R% c #929193", "S% c #918F8C", "T% c #918E8C", "U% c #8A8987", "V% c #B0B3B4", "W% c #ACAEA8", "X% c #B7B5B5", "Y% c #4E4B4A", "Z% c #454546", "`% c #979693", " & c #C2C3C4", ".& c #848788", "+& c #8D9193", "@& c #908D8B", "#& c #8D8D8B", "$& c #898788", "%& c #7E7E7E", "&& c #A2A09E", "*& c #A5A3A1", "=& c #AEAFAE", "-& c #AFB0AF", ";& c #888786", ">& c #4A4645", ",& c #3C3A39", "'& c #9D9E9E", ")& c #B7B5AF", "!& c #AEADAA", "~& c #8B8C8C", "{& c #888788", "]& c #888784", "^& c #838281", "/& c #A09E9D", "(& c #A4A1A1", "_& c #ACACA7", ":& c #6F6E6D", "<& c #555453", "[& c #383434", "}& c #ACACAC", "|& c #BABABA", "1& c #A8A7A7", "2& c #838585", "3& c #A09E9B", "4& c #A0A19F", "5& c #575655", "6& c #676663", "7& c #434141", "8& c #A9A9A7", "9& c #6E6B69", "0& c #9D9D9D", "a& c #A49E9B", "b& c #A7A5A3", "c& c #555556", "d& c #545251", "e& c #505253", "f& c #58595A", "g& c #4F4E4E", "h& c #4B4B4C", "i& c #494B4C", "j& c #4F4D4C", "k& c #545351", "l& c #575756", "m& c #605F5E", "n& c #626160", "o& c #676363", "p& c #6E6A6A", "q& c #2B2A29", "r& c #3F4144", "s& c #9A9A9A", "t& c #B9B9B9", "u& c #A2A3A1", "v& c #ADADAD", "w& c #7B7C7E", "x& c #969797", "y& c #A09B9B", "z& c #A9A8A3", "A& c #7C6653", "B& c #775232", "C& c #765132", "D& c #805634", "E& c #865C37", "F& c #836142", "G& c #795C45", "H& c #66635F", "I& c #645F5E", "J& c #615E5C", "K& c #5C5857", "L& c #5A5A5B", "M& c #505052", "N& c #504D4C", "O& c #444240", "P& c #453F3A", "Q& c #464341", "R& c #454341", "S& c #454240", "T& c #4D4640", "U& c #464443", "V& c #474544", "W& c #4E4C4A", "X& c #5E4C3E", "Y& c #5A483B", "Z& c #5B493C", "`& c #9C9085", " * c #9A9A99", ".* c #7F7C7E", "+* c #7F7C7D", "@* c #A3A3A1", "#* c #8D5123", "$* c #945622", "%* c #975A24", "&* c #A05E2A", "** c #A9632F", "=* c #B26732", "-* c #B76538", ";* c #C27038", ">* c #BC7642", ",* c #B68358", "'* c #898784", ")* c #888382", "!* c #928980", "~* c #54504F", "{* c #62605E", "]* c #4F4B49", "^* c #4C4947", "/* c #7E7A79", "(* c #837E79", "_* c #878281", ":* c #908C8A", "<* c #908D8D", "[* c #8A8988", "}* c #C77636", "|* c #C37539", "1* c #BE7137", "2* c #BC6930", "3* c #A9642F", "4* c #A55B21", "5* c #B7B7B5", "6* c #AEAEAA", "7* c #7B7978", "8* c #9F9C9C", "9* c #AEA498", "0* c #8A542A", "a* c #925523", "b* c #995622", "c* c #A65D25", "d* c #B6642C", "e* c #C06E31", "f* c #C27034", "g* c #CA7A38", "h* c #CF7B39", "i* c #CF7C3D", "j* c #423F3E", "k* c #3C3937", "l* c #A88059", "m* c #C47A43", "n* c #CA7A39", "o* c #CA7738", "p* c #C47336", "q* c #C06E34", "r* c #B66A2C", "s* c #B66829", "t* c #A65A1E", "u* c #BEBEC1", "v* c #AAA5A5", "w* c #959494", "x* c #9B9B99", "y* c #9E9D9D", "z* c #B7B4AE", "A* c #875C35", "B* c #905222", "C* c #935322", "D* c #9C5722", "E* c #AE6023", "F* c #B76525", "G* c #C26E2C", "H* c #CF7B38", "I* c #D17B38", "J* c #D17E39", "K* c #CE803F", "L* c #928F8C", "M* c #797876", "N* c #464342", "O* c #413D3B", "P* c #867A70", "Q* c #C37B37", "R* c #CA7C39", "S* c #CF7A37", "T* c #CA7634", "U* c #C27230", "V* c #BE6E2C", "W* c #B66A29", "X* c #A95C20", "Y* c #A8A6A4", "Z* c #9B9898", "`* c #A4A4A5", " = c #875C36", ".= c #874E21", "+= c #8A5222", "@= c #915322", "#= c #A65D23", "$= c #AE6024", "%= c #C06E2C", "&= c #C27031", "*= c #CB7934", "== c #D17B39", "-= c #CF7E3F", ";= c #B87135", ">= c #8F8C8C", ",= c #474644", "'= c #4D4A48", ")= c #C47B39", "!= c #CF7C39", "~= c #CF7A34", "{= c #C77330", "]= c #B76829", "^= c #B46324", "/= c #C4C6C9", "(= c #9D9B9B", "_= c #939190", ":= c #626465", "<= c #6A6B6D", "[= c #827F7D", "}= c #968E8E", "|= c #9B9797", "1= c #B7B5B8", "2= c #7C4D27", "3= c #875022", "4= c #A15722", "5= c #B66424", "6= c #CF7E3E", "7= c #C26F2D", "8= c #41403F", "9= c #444241", "0= c #565351", "a= c #C77533", "b= c #AC6122", "c= c #8B5022", "d= c #9FA0A0", "e= c #6B7071", "f= c #757574", "g= c #A28484", "h= c #C5BCBB", "i= c #D3534D", "j= c #7A4522", "k= c #874D22", "l= c #894D22", "m= c #C87B3B", "n= c #403E3C", "o= c #3F3E3E", "p= c #4C4847", "q= c #AE672D", "r= c #C07B39", "s= c #A05C23", "t= c #AEB0B1", "u= c #9C9A9A", "v= c #999795", "w= c #8E8D8A", "x= c #847F7A", "y= c #C6403A", "z= c #CA2934", "A= c #7C4319", "B= c #884A22", "C= c #8A4D22", "D= c #915022", "E= c #9B5522", "F= c #A65A23", "G= c #C27030", "H= c #D17A37", "I= c #C17437", "J= c #4D4847", "K= c #44403E", "L= c #BA7939", "M= c #975521", "N= c #834619", "O= c #B6B3AE", "P= c #AEAEAD", "Q= c #A2A0A0", "R= c #9A9998", "S= c #96918B", "T= c #8C8484", "U= c #6C6D6A", "V= c #73685F", "W= c #A6423D", "X= c #D14442", "Y= c #E46665", "Z= c #E47576", "`= c #915023", " - c #935222", ".- c #9C5622", "+- c #C77331", "@- c #D07E3F", "#- c #605D5A", "$- c #474441", "%- c #474746", "&- c #3D3836", "*- c #453E39", "=- c #B87032", "-- c #9C5D23", ";- c #935622", ">- c #80491D", ",- c #7B4D26", "'- c #875D37", ")- c #B6ADA4", "!- c #A19C9A", "~- c #776F69", "{- c #877564", "]- c #BD2422", "^- c #E56A70", "/- c #934F22", "(- c #9C5522", "_- c #9E5723", ":- c #D17B3A", "<- c #D07C38", "[- c #585654", "}- c #45423F", "|- c #C16F2D", "1- c #C27D3E", "2- c #9C5D22", "3- c #7E4C1E", "4- c #63391B", "5- c #C2362A", "6- c #DC5853", "7- c #E49E91", "8- c #9E4025", "9- c #9D5723", "0- c #D17A38", "a- c #D17A39", "b- c #CE7A3F", "c- c #686561", "d- c #524F4E", "e- c #46403B", "f- c #9D9186", "g- c #B27943", "h- c #CF7E3A", "i- c #995722", "j- c #74461E", "k- c #673B1B", "l- c #7B481D", "m- c #834C21", "n- c #884F21", "o- c #844E20", "p- c #AE6022", "q- c #CFAFB5", "r- c #A15723", "s- c #AE5D23", "t- c #D17A3A", "u- c #BB8051", "v- c #474241", "w- c #3D3A38", "x- c #897563", "y- c #CD7B3F", "z- c #53321A", "A- c #72431B", "B- c #79431C", "C- c #814D1F", "D- c #8A5224", "E- c #945828", "F- c #975E28", "G- c #935A29", "H- c #CB3438", "I- c #9C531D", "J- c #AE5D25", "K- c #AE6026", "L- c #CB7A39", "M- c #CC7A3F", "N- c #494544", "O- c #3B3531", "P- c #696766", "Q- c #9C7550", "R- c #D17A34", "S- c #814C1E", "T- c #6A3D1A", "U- c #75461C", "V- c #935826", "W- c #B86E32", "X- c #CB7938", "Y- c #D07838", "Z- c #AE5E27", "`- c #AE6029", " ; c #B76531", ".; c #C07034", "+; c #CB7936", "@; c #CC7939", "#; c #66615F", "$; c #4B4947", "%; c #3A3635", "&; c #D17A36", "*; c #BE6A31", "=; c #935623", "-; c #8F5122", ";; c #56341A", ">; c #72461C", ",; c #79461D", "'; c #CD7A39", "); c #D07C3B", "!; c #9B5D27", "~; c #94542B", "{; c #9C5E2E", "]; c #AF6134", "^; c #B76A37", "/; c #C27237", "(; c #CA7638", "_; c #C97B39", ":; c #3E3937", "<; c #3E3C3A", "[; c #A77243", "}; c #CB7739", "|; c #CA7636", "1; c #BE6A34", "2; c #B56933", "3; c #A85E2E", "4; c #9A5926", "5; c #7B5326", "6; c #614734", "7; c #643D1B", "8; c #75431C", "9; c #81481E", "0; c #8A5324", "a; c #AD652C", "b; c #D17E3F", "c; c #D6803F", "d; c #B35D32", "e; c #614736", "f; c #604635", "g; c #9C6436", "h; c #AA7241", "i; c #CA7937", "j; c #7B5D46", "k; c #47494C", "l; c #3C3736", "m; c #474646", "n; c #403F3E", "o; c #35312E", "p; c #D27D39", "q; c #C77C39", "r; c #654126", "s; c #3D3C3E", "t; c #56351B", "u; c #D9813F", "v; c #D98242", "w; c #C95B3C", "x; c #B65D34", "y; c #835734", "z; c #454547", "A; c #35312F", "B; c #403A35", "C; c #4F4033", "D; c #504034", "E; c #45413F", "F; c #4D4641", "G; c #403C3B", "H; c #2D2925", "I; c #413B36", "J; c #2C2824", "K; c #2B2927", "L; c #333231", "M; c #3C3C3D", "N; c #3B3938", "O; c #3A3938", "P; c #57391B", "Q; c #884E1F", "R; c #A46028", "S; c #AF6A30", "T; c #CD7E3A", "U; c #D7813F", "V; c #B86A34", "W; c #B66734", "X; c #A46134", "Y; c #312F2C", "Z; c #2E2E2E", "`; c #0E0D0C", " > c #1B1B1B", ".> c #262626", "+> c #232324", "@> c #3A3B3C", "#> c #39342F", "$> c #373231", "%> c #3D3733", "&> c #403935", "*> c #423C37", "=> c #464340", "-> c #2C2825", ";> c #232223", ">> c #2F2B27", ",> c #454340", "'> c #403730", ")> c #322D29", "!> c #312C28", "~> c #2F2A27", "{> c #363331", "]> c #282726", "^> c #030303", "/> c #1F1E1E", "(> c #412618", "_> c #57391C", ":> c #7A461C", "<> c #A46029", "[> c #D3803F", "}> c #D98D4B", "|> c #DA8A4B", "1> c #CC593E", "2> c #C16B37", "3> c #B96A36", "4> c #B66A34", "5> c #AD6A32", "6> c #54361F", "7> c #171616", "8> c #201E1E", "9> c #292726", "0> c #2A2623", "a> c #302E2B", "b> c #373533", "c> c #22201E", "d> c #282523", "e> c #332F2D", "f> c #2F2C2A", "g> c #2B2929", "h> c #201D1B", "i> c #3F3E3D", "j> c #4A4C4D", "k> c #353434", "l> c #1E1C1B", "m> c #57361C", "n> c #B66E31", "o> c #D37F3F", "p> c #D78948", "q> c #DA8E4F", "r> c #DA8E51", "s> c #DA8D4F", "t> c #D9894B", "u> c #DB803B", "v> c #CD753D", "w> c #CB7037", "x> c #C06F36", "y> c #B96F34", "z> c #B66A33", "A> c #B56A31", "B> c #795231", "C> c #1E1C1A", "D> c #444444", "E> c #373737", "F> c #0A0909", "G> c #090808", "H> c #080707", "I> c #080808", "J> c #333131", "K> c #302724", "L> c #4F2E19", "M> c #5F361C", "N> c #72431C", "O> c #A4642A", "P> c #DA9154", "Q> c #DA8D50", "R> c #D78245", "S> c #D37F3E", "T> c #CC793A", "U> c #CB7637", "V> c #CA7237", "W> c #9B6234", "X> c #2D2926", "Y> c #292420", "Z> c #232020", "`> c #29241F", " , c #28231F", "., c #2B2724", "+, c #261F1D", "@, c #26221F", "#, c #2E2C2A", "$, c #38312B", "%, c #221E1C", "&, c #1D1A18", "*, c #1E1A17", "=, c #282421", "-, c #2A2523", ";, c #2D2823", ">, c #2F2623", ",, c #512F19", "', c #A7642B", "), c #DA9151", "!, c #D9894F", "~, c #D37A3E", "{, c #B66A31", "], c #A4622D", "^, c #3D3C3C", "/, c #2C2C2B", "(, c #383634", "_, c #373432", ":, c #333232", "<, c #3A3A39", "[, c #3A3736", "}, c #343231", "|, c #413F3E", "1, c #484443", "2, c #444445", "3, c #494645", "4, c #2B2521", "5, c #827E79", "6, c #894F22", "7, c #764924", "8, c #774924", "9, c #714725", "0, c #6A4326", "a, c #6A4226", "b, c #6C4125", "c, c #6A3F21", "d, c #673A22", "e, c #533624", "f, c #72461D", "g, c #CA7637", "h, c #B86E33", "i, c #A7642C", "j, c #36322F", "k, c #3F3630", "l, c #3F362F", "m, c #403831", "n, c #413831", "o, c #413932", "p, c #514135", "q, c #504134", "r, c #34302E", "s, c #B46C2C", "t, c #B16529", "u, c #A85E26", "v, c #9C5A23", "w, c #8A5023", "x, c #894E23", "y, c #834D23", "z, c #7B4D23", "A, c #754622", "B, c #714621", "C, c #71411F", "D, c #6A3A1E", "E, c #54311A", "F, c #824A1E", "G, c #D98950", "H, c #D88745", "I, c #B86E2F", "J, c #A66734", "K, c #714524", "L, c #724621", "M, c #724620", "N, c #734622", "O, c #7B4723", "P, c #854E23", "Q, c #8E5224", "R, c #9B5924", "S, c #A65B29", "T, c #B3622A", "U, c #B66832", "V, c #BF6E33", "W, c #978474", "X, c #312A25", "Y, c #B96B2A", "Z, c #B76A29", "`, c #915222", " ' c #834D21", ".' c #7B4D21", "+' c #75461F", "@' c #71431E", "#' c #6A3A1B", "$' c #57311A", "%' c #894E21", "&' c #935723", "*' c #AE672F", "=' c #DA8D51", "-' c #D98F50", ";' c #D8894F", ">' c #AF6E2F", ",' c #AA652D", "'' c #7B4821", ")' c #834D22", "!' c #A65A24", "~' c #B66530", "{' c #BE6A33", "]' c #C77335", "^' c #CC7938", "/' c #D77F39", "(' c #42403E", "_' c #1B1513", ":' c #6C6967", "<' c #C07030", "[' c #BE6A2A", "}' c #79491F", "|' c #71431C", "1' c #512E19", "2' c #D98D51", "3' c #A6652C", "4' c #784921", "5' c #79461E", "6' c #A65A22", "7' c #C27231", "8' c #34312E", "9' c #1D1B1B", "0' c #787775", "a' c #75461E", "b' c #71461C", "c' c #71411B", "d' c #4E2C18", "e' c #A7672F", "f' c #B96E30", "g' c #7B481E", "h' c #D27B39", "i' c #282524", "j' c #656362", "k' c #25221F", "l' c #6D6B69", "m' c #AD672B", "n' c #BE6A2B", "o' c #995723", "p' c #79461F", "q' c #703A1B", "r' c #5D351B", "s' c #6A3F1B", "t' c #824A1F", "u' c #9C5828", "v' c #CD7A3F", "w' c #D27B38", "x' c #CC7A3D", "y' c #241D1B", "z' c #AD682C", "A' c #8A5021", "B' c #7B491F", "C' c #79481E", "D' c #5A341B", "E' c #AF672C", "F' c #884F23", "G' c #C47837", "H' c #383532", "I' c #4E4B49", "J' c #1C1816", "K' c #B4B1B0", "L' c #935525", "M' c #A9652C", "N' c #B86A2A", "O' c #B86A29", "P' c #814A1F", "Q' c #4F2D18", "R' c #A5652C", "S' c #D27E3F", "T' c #9F5F28", "U' c #C47937", "V' c #A7662C", "W' c #322F2C", "X' c #3E3D3C", "Y' c #221E1A", "Z' c #302B28", "`' c #915828", " ) c #A7682C", ".) c #894E22", "+) c #5D351A", "@) c #CF7A3F", "#) c #B97036", "$) c #B66F33", "%) c #AA662D", "&) c #6E431D", "*) c #B97537", "=) c #A7672E", "-) c #B8AFA6", ";) c #3D3A39", ">) c #241D1A", ",) c #8A4D1F", "') c #A36C30", ")) c #B86A2C", "!) c #55331A", "~) c #AD6830", "{) c #CB7B39", "]) c #B97438", "^) c #302B29", "/) c #353433", "() c #36312E", "_) c #9C642C", ":) c #AE6E30", "<) c #9C5A22", "[) c #81491E", "}) c #58361B", "|) c #B96E33", "1) c #BE6F36", "2) c #AA682E", "3) c #9B5723", "4) c #70451E", "5) c #C77E39", "6) c #B17737", "7) c #2F2A25", "8) c #4A4746", "9) c #272522", "0) c #9E9FA1", "a) c #8B8D8F", "b) c #A46E36", "c) c #B86E2C", "d) c #81491F", "e) c #52311A", "f) c #61371B", "g) c #8A5223", "h) c #BE7036", "i) c #AD6A2C", "j) c #A8642B", "k) c #6E421D", "l) c #C47839", "m) c #AA7343", "n) c #42352B", "o) c #25211F", "p) c #8C6F51", "q) c #B66E30", "r) c #B76E2C", "s) c #79491E", "t) c #74431C", "u) c #81481F", "v) c #BE6F33", "w) c #B96E2C", "x) c #AD672C", "y) c #6B401C", "z) c #A45823", "A) c #AA7342", "B) c #2B2825", "C) c #57361B", "D) c #583419", "E) c #71451F", "F) c #885022", "G) c #8A5323", "H) c #A7652A", "I) c #AF682C", "J) c #AD642C", "K) c #9C5E2A", "L) c #744520", "M) c #CB7B3A", "N) c #312D2B", "O) c #292625", "P) c #866944", "Q) c #B76E31", "R) c #935122", "S) c #71411E", "T) c #71421E", "U) c #6A3A1C", "V) c #5F381B", "W) c #4C2E1A", "X) c #462919", "Y) c #1A1412", "Z) c #27211E", "`) c #321F15", " ! c #513923", ".! c #7E4B21", "+! c #865323", "@! c #9B5B26", "#! c #9C5E29", "$! c #A5612C", "%! c #A7652E", "&! c #A8652D", "*! c #AF6A2F", "=! c #B76A30", "-! c #B86B31", ";! c #AF6A31", ">! c #A5652D", ",! c #965B2A", "'! c #734927", ")! c #463123", "!! c #724820", "~! c #74461D", "{! c #39312B", "]! c #312D2A", "^! c #665743", "/! c #A46531", "(! c #B6652C", "_! c #8E5122", ":! c #865022", "~ c #111111", ",~ c #252525", "'~ c #2F2F2F", ")~ c #2F2F2E", "!~ c #2A2A2A", "~~ c #201F1F", "{~ c #222221", "]~ c #313130", "^~ c #272727", "/~ c #3F3F3F", "(~ c #292928", "_~ c #181715", ":~ c #383939", "<~ c #262525", "[~ c #221F1F", "}~ c #252322", "|~ c #26201D", "1~ c #4F2F1B", "2~ c #764B28", "3~ c #94612E", "4~ c #B87537", "5~ c #9C6939", "6~ c #B8733E", "7~ c #514E4D", "8~ c #130E0C", "9~ c #332926", "0~ c #1A1311", "a~ c #191311", "b~ c #23201F", "c~ c #3A3A3B", "d~ c #2A2A2B", "e~ c #1E1D1C", "f~ c #282828", "g~ c #131312", "h~ c #131211", "i~ c #2B2A2A", "j~ c #252424", "k~ c #221D1A", "l~ c #221A18", "m~ c #422618", "n~ c #332E2A", "o~ c #443E39", "p~ c #25201D", "q~ c #5D5D5C", "r~ c #13100F", "s~ c #16100D", "t~ c #2A2826", "u~ c #262422", "v~ c #282624", "w~ c #454543", "x~ c #161515", "y~ c #29292A", "z~ c #1B1A1C", "A~ c #2B2826", "B~ c #24201E", "C~ c #1E1815", "D~ c #1A1614", "E~ c #322926", "F~ c #464242", "G~ c #201C19", "H~ c #161210", "I~ c #1C1614", "J~ c #2E2B29", "K~ c #525150", "L~ c #282625", "M~ c #110E0D", "N~ c #353333", "O~ c #1D1917", "P~ c #16110E", "Q~ c #373331", "R~ c #6C6C6C", "S~ c #303030", "T~ c #2B2C2C", "U~ c #3B3937", "V~ c #353131", "W~ c #474747", " . ", " + @ # $ ", " % & * = - ", " . ; > , ' ", " ) ! > > ~ { ", " ] ^ / ( _ : < ", " [ } | * ( 1 2 3 ", " 4 5 6 ( 7 8 9 0 ", " a b 8 c ( * d e ", " f g h > ( i j k ", " l m n _ ( 7 h o p ", " q r j h s t * u r v ", " w x u 1 ( ( _ 8 y z ", " A } B u * ( 7 6 8 y C ", " D j 8 / > E * h F G H ", " I J K r 8 h c ( ( * n d L M ", " N O P Q R S u 1 * E ( / 8 T U ", " V W X Y Z ` .r ..h c ( E s 6 8 T +. ", " @.W #.X $.%.&.*. =.S ..6 * ( E * h 8 -.;. ", " >.$.#.#.,.,.'.). !.b 8 h i > ~.7 {.u 8 ].^. ", " /.$.#.$.$.(.(.y _.:. <.S 8 6 c ( E [.}...8 |.1. ", " 2.3.$.#.$.$.,.4.T 5.6. p y B h / > E ( s 1 7.T L 8. ", " 9.#.,.0.,.a.a.b.T : c. d.d u 6 c 7 E ( c e.7.T f. ", " g.h.#.,.#.i.,.a.j.b.k.l.m. { n.8 u / * ( ~.> / u ..j.o. ", " p.q.a.,.i.#.,.a.F F T r.s. t.T 8 e.{.u.( ( * / u v.w.x. ", " y.z.i.#.a.i.,.a.A.j.F j.r B.C. D.T ..6 * ( E ( * / u 8 G E. ", " F.i.i.i.i.G.,.a.j.j.8 v.o H.I. J.K...6 L.( E 7 {.6 u S M.N. ", " O.h.i.i.P.P.Q.,.4.j.F 7.R.j S.T. U.T ..}.7 E E 7 c / n w.c.V. ", " W.i.i.i.i.i.$.,.4.j.B R.X.Y.Z.`. +T ...+( E ( > c 1 8 r ++ ", " @+#+i.i.$+%+G.,.,.A.d &+*+u.R.S.=+ -+d u _ ( E ( > c 1 8 S.;+ ", " >+,+i.%+%+%+q.a.a.b.b.R.u.'+)+!+;+ ~+T ..c E E ( > _ e.k.{+]+ ", " ^+/+%+%+%+i.i.,.a.j.B R.'+(+u._+:+ <+T ..c E E ( [+_ 6 , }+ ", " |+1+%+%+%+%+i.i.a.4.j.8 )+2+(+X.f. 3+4+5+ 6+k.d * t E ( > / n 7+8+ ", " 9+0+a+%+%+%+i.a.,.4.d R.u.b+c+d+e+ f+g+h+i+j+ k+y ..* l+E ( s / 8 m+n+ ", " o+p+a+a+a+i.X ,.a.-.q+X.'+b+r+s+t+ u+v+%+%+w+x+y+z+8 c A+E ( * 1 j f.B+ ", " C+D+a+a+%+i.Q.,.4.j.n E+(+'+F+G+H+ I+P.P.J+F.K+L+a.B u.( ( c u d M+N+ ", " O+P+Q+D+a+%+G.$.,.4.j.R.{.R+S+T+U+V+W+#.,.4.(.4.4.4.4.4.Y.{._ h n X+Y+ ", " Z+`+ @D+D+%+G.#.,.4.F j.$.G.G.W .@4.-.j.F F v.v.8 B d T -.7.{.[++@@@ ", " #@$@%@%@D+i.q.,.(.(.P.%+X ,.4.j.F v.v...7.&@{.> t '+'+{.v.*@c =@-@ ", " ;@>@,@'@'@D+i.#.#.P.%+#.(.j.F )@!@~@7.{@n &@R+*+u.(+(+(+{.F q+]@^@ ", " /@(@_@'@a+i.%+G.#.4.j.v.v.~@7.&@:@<@[@[@}@|@1 i )+u.R+n 7.1@2@ ", " 3@4@_@_@'@0.i.$.-.S 5@6@7.&@7@[@}.}.8@.+9@0@a@b@c@d@d@d@Y.e@f@ ", " g@h@'@_@a+i.$.4.F v.~@7.&@i@}.}..+c c c c c c c c c j@i }.d@k@l@ ", " m@n@_@'@0.Q.4.j.o@~@7.:@i@}..+c c c c * * * * * c c c c .+}.p@q@ ", " r@s@t@u@v@,.F v.~@7.:@i@i c c c c w@x@x@x@x@x@w@* y@c c z@A@B@C@ ", " D@E@F@G@-.v.H@7.:@i@i c c c * x@x@x@s [+[+I@x@x@w@J@K@c c L@M@N@ ", " O@P@F 8 7.Q@R@S@T@c K@* x@s [+U@L.L.U@U@U@V@W@_ X@Y@Z@_ `@ # ", " .#: B 7.7.R@}.T@c K@J@x@I@L.L.+#+#+#+#+#@#E (+(+c+u.##* $#%# ", " &#*#q+7.n d@B@_ =#-#;#>#U@L.+#,#'#)#)#!#~.~#{#{#{#]#'+##^#/# ", " (#, B ..}.t _#(+u.##:#L.L.+#'#)#)#)#)#<#b+{#{#{#{#{#]#t [#}# ", " |#n.8 X.(+{#{#{#1#t 2#3#4#'#)#)#5#6#6#~.]#{#{#{#{#{#{#(+)+7# ", " }+, *@b+{#{#{#{#{#]#~.8#)#)#)#6#6#6#9#(+{#{#{#{#{#{#{#{#( 0#a# ", " b#c#E+]#{#{#{#{#{#{#d#E e#f#5#6#g#h#A+d#{#{#{#{#{#{#{#{#c+i#j# ", " k#~ '+{#{#{#{#{#{#{#{#b+)#l#g#g#m#n#o#]#{#{#{#{#{#{#{#{#(+p#q# ", " r#r 2+{#{#{#{#{#{#{#{#{#c+s#t#t#h#u#c+{#{#]#{#{#{#{#{#{#1#*+v# ", " w#S 2+{#{#{#{#{#{#{#{#{#d#x#y#z#A#A+(+]#B#C#D#E#{#{#{#{#]#F#G# ", " H#I#'+{#{#{#{#{#{#J#~#{#{#c+K#z#h#A+(+L#M#N#N#O#{#{#{#{#{#P#Q#R# ", " S#w.'+{#{#{#{#]#B#%@T#U#{#(+)#6#z#z#c+V#M#M#N#W#{#{#{#{#{#X#Y#Z# ", " `#*#P#{#{#{#{# $M#N#.$+${#(+)#6#( 7 u.@$#$$$%$&${#{#{#{#{#*$P#=$-$ ", " ;$G >$1#{#{#{#,$M#M#N#'${#(+> E+E+)$>$*$1#!$~${#{#{#{#{#]#{$]$^$/$ ", " ($_$:$E#{#{#{#1#<$_@[$}${#'+)$P#|$X#'+*$@${#{#{#{#{#{#{#{#1$_#{$2$3$ ", " 4$5$E+_#{#{#{#{#]#1$~${#_#X#*$6$&$1$J#1$1$7$E#~#{#{#{#{#~$7$7$7$8$9$ ", " 0$a$]$*${#{#{#{#{#{#{#E#6$1$7$7$J#b$b$1$1$!$!$!$1$J#7$7$@$J#7$7$E#c$d$ ", " e$f$2+*$~${#{#{#{#{#E#@$7$1$!$&$U#g$}$ $ $ $L#L#L#,$h$,$i$i$&$&$1$J#j$k$ ", " l$m$_#_#@${#{#{#1#7$1$_#g$ $,$,$h$ $i$i$i$}$g$g$g$}$i$h$n$o$o$<$p$7$q$r$ ", " s$t$7$J#J#7$E#E#!$}$,$h$V#h$ $g$!$7$~$~#~#1#1#1#1#~#1#E#}$n$u$v$T#w$E#x$y$ ", " z$A$7$@$J#J#&$i$B$n$o$o$n$,$g$7$~$~$~$~$~$~$~$~$~$E#E#C$ $o$W#v$D$W#&$J#E$F$ ", " G$q$J#J#1$}$n$H$H$I$o$o$o$B$,$J$,$i$i$L#L#i$i$}$i$i$,$o$o$o$K$v$L$M$,$E#N$O$P$ ", " Q$R$E#1$,$I$I$H$I$o$o$I$o$I$S$T$T$T$T$o$S$o$S$S$U$V$T$o$o$W$X$v$L$Y$V#Z$7$V#`$ % ", " .%+%@%g$#%I$o$T$$%o$T$o$%%o$&%*%&%o$o$o$o$o$o$&%o$&%o$o$o$=%-%v$%$X$;%>%U#,%'%p$r$ ", " )%!%7$~%T#{%]%%%o$o$o$o$I$&%I$I$I$^%I$%%o$&%&%&%&%&%o$o$&%/%O#v$D$'$<$i$U#&$(% $_% ", " :%<%~$}$+$[%X$}%|%o$o$o$%%%%&%&%%%&%o$o$%%o$%%%%%%o$&%o$o$&%I$4$%$L$K$u$1%2%3%4%J#5%6% ", " 7%8%&$J#V#'$T#v$9%$%o$o$o$o$o$o$o$o$&%o$&%%%&%&%%%&%o$&%o$o$*%0%L$T#a%#$n$b%g$U#c%d%e%f% ", " g%h%J#1$h$D#L$T#D$u$]%o$o$o$%%&%&%%%%%&%%%%%%%^%^%%%^%^%&%&%T$#%T#L$i%u$j%i$}$g$U#k%l%m% ", " n%o%C$!$i$W#X$D$%$4$o$o$o$&%%%%%%%%%%%%%^%^%I$I$I$I$I$I$*%^%V$<$%$'$<$,$p%L#i$g$g$q%r%-% ", " s%t%g$1$u%U#u$K$L$%$%${%v%%%%%^%I$I$I$I$^%I$w%w%I$w%x%x%0%x%0%y%Y$D$9%o$+%,$,$z%i$g$g$A%B%C% ", " D%E%1$!$F%G%h$;%'$T#v$K$H$H%I$I$w%w%w%w%x%x%x%0%0%0%0%0%0%0%W$I%4$a%I$J%h$,$,$,$K%L%L%7$M%N% ", " O%P%J#&$2%g$b%#%Y$'$T#%${%o$Q%0%0%0%0%R%R%R%S%T%T%T%T%W$T%T%#%U%i%{%V%V#h$h$h$W%,$X%X%@$M%Y% ", " Z%`%7$ &g$}$i$+%.&#$'$T#'$+&@&}%}%}%#&#&#%#%#%#%#%#%#%#%#%#%$&%&+$&&*&V#V#V#h$h$h$=&-&1$;&>& ", " ,&'&J#G%g$i$)&,$!&.&Y$a%%$<$0%~&#%#%#%#%#%#%#%#%#%{&{&{&{&]&B%^&<$/&n$(&V#V#V#V#V#h$_&&$:&<& ", " [&}&J#|&}$i$)&,$h$1&I$<$L$'$#%#%#%#%$&$&{&.&.&B%B%B%B%B%B%u$u$2&{%o$3&n$n$n$4&n$(&V#V#i$5&6& ", " 7&8&J#|&L%,$,$h$h$V#1&o%{%L$9&#%B%B%B%u$u$u$u$u$u$u$u$u$u$u$u$u$u$0&o$o$o$o$o$o$a&n$b&B$M$c&d&e&f&g&h&i&j&k&l&m&n&o&p&-% ", " q&r&s&J#t&i$,$h$h$V#V#V#u&v&{%Y$u$u$u$u$u$u$u$u$u$u$u$u$u$u$p$w&u$u$x&o$o$o$o$o$o$o$y&z&A&B&B&C&D&E&F&Q#G&G&H&I&J&K&L&K&5&M&N& ", " O&P&Q&R&S&T&U&V&W&N&#@#@X&Y&Z&g+`&7$j%,$h$V#V#V#V#(&4&0& *<${%u$u$u$u$u$.*w&+*{%u${%{%B#{%{%{%{%}%&%o$o$o$o$o$o$@*]$#*$*%*&***=*-*;*>*,*'*.&)*'*'*#%!*)*~*{* ", " ]*^*/*(*_*_*:*:*<*[*>*}*|*1*2*3*4*)+!$5*6*h$V#(&4&4&4&o$o$o$u${%7*{%{%{%{%{%{%{%B#~%{%{%9&-%{%{%B#u$x%&%o$o$o$o$8*9*0*a*b*d@c*d*e*f*g*h*i*P#W$.&'*u$'*)*'*E%j* ", " k*/*o$o$o$w$w$H$+&l*m*n*o*p*q*r*s*t*{$u*v*V#4&o$o$o$o$o$o$o$}%{%{%{%{%B#{%{%{%{%-%<$B#B#~%B#~%-%B#{%w*%%x*o$&%y*z*A*B*C*D*B@E*F*G*@#H*I*J*K*> )$!*L*#%#%#%M*N* ", " O*_*W$'*.&'*)*P*E+Q*R*H*S*T*U*V*W*X*)+!$Y*n$o$o$o$o$o$o$o$&%}%{%~%B#B#B#B#B#B#O#-%B#-%-%-%-%-%~%-%-%W$%%Z*x*`* $ =.=+=@=D*#=$=%=&=*=I*I*==-=;=)+|$w$o$0%w$>=f% ", " ,='=.&.&'*#%'*>$.+* )=!=I*I*~={=G*]=^=h X#/=(=o$o$o$o$o$o$o$^%_=~%-%-%:=9&-%-%9&<$9&-%-%<$9&-%-%-%<=<=[=}=|=1=*$2=)@3=7.@=4=E*5=%=&=*=I*I*==6=7=a&L#V#V#V#n$M*8= ", " 9=0='*H$H$I$H$o$E+T@)=H*I*I*S*a=G*]=5=b=c='+/=d=o$o$o$o$o$o$^%}%~%O#-%O#<$-%e=O#-%9&9&-%<=9&-%-%<=-%9&f=g=h=i=a.j=k=l=7.C*/ $=F*G*@#S*I*I*==m=c )+9* $,$V#-%K&n= ", " o=p=:=W$h$V#V#X#X.q=r=H*I*I*I*@#G*##5=E*s=..P# $t=u=Z*o$o$o$v=w=-%O#O#-%-%<$<$O#-%-%9&-%-%-%<=-%-%e=-%-%x=i=y=z=A=B=C=D=E=F=$=W@G=@#H=I*I*==I=t X#9*i$o$#$L$J=n= ", " O&K='$'$O#h$h$|$E+)+L=h*H*I*I*@#G*G*5=E*F=M=N=*@P#h$O=P=Q=R=S=T=-%<$-%e=U=-%U=e=<$-%O#e=-%<$e=e=~%V=W=e.X=Y=Z=Y=y=w.`= -.-#=5=W@+-*=H=I*==@-G*]$i$i$i$J$0%#-$-N* ", " %-&-*-K$u$L# $i$L#|$=-)=I*I*I*~=@#G*5=E*--;-+=>-(.,-'-)$|$X#)-!-O#B#-%B#B#-%B#B#B#B#-%~-{-P*X.W=e.z=]-]-Y=^-Y=Z=Y=e./-(-_-#=F*%=@#*=H=I*:-<-)+E+w$h$h$,$i$L#K&[- ", " }-Y$,$}$i$L#i$a&*+|-1-==I*I*I*@#G*F*E*2-;-H@5@3-4.W 4--.q+7.*@B&'-F#X.X.X.X.*+*+*+*+2#{=K#5-]-z=X=6-6-Y=Y=Y=Z=7-6-8-9-#=$=W@G*@#+#0-a-b-E+!*W$0%0%I$I$o$h$c-d- ", " e--%L#h$n$n$o$f-#%P#g-h-==I*I*@#G*F*$=E*i-H@5@j-#.k-l-m-n-7.o-v.T j.d ..u h h 6 t*t*p-i Y.e.5-z=X=X=Y=Y=Y=Y=Z=q-^-e.r-s-$=W@G*@#+#,#t-u-B#p$u$u$u$.&#%!*0%c-v- ", " w--%w$L*#%#%#%'*.&.&x-y-:-==I*@#&=W@F*E*D*7.5@A.z-A-B-C-7.7.D-E-F-G-7.,-v.q+q+7.*@7.Y.1 {.* H-z=H-X=6-Y=Y=Y=^-q-7-[.I-J-K-W@&=*=+#L-M-~-<$9&-%-%~%B#{%{%u$#$N- ", " O-P-'*u$p${%{%-%~%B#e=Q-:-==I*R-@#%=F*E*D*~@S-#.T-U-F v.7.7.V-}.}._ c c W-x@x@x@[+L.+#+#X-Y-y=z=H-X=6-6-Y=Y=^-q-7-X=d@Z-`- ;.;+;X-@;)+#-#;c-#-c-<$9&O#-%~%j&$; ", " %;0=B#O#-%-%U=<$<$c-:=V=y-==I*&;T**;`-c*=;-;A.;;>;,;v.~@7.V-}.i c c c * x@x@[+L.+#+#,#H*';);[.z=H-H-X=i=6-Y=Y=7-Z=[.!;~;{;];^;/;(;_;X.4$Y$9%9%9%#-#-#;c-c-:;d- ", " <;:;c-#;#;W##-#-#-#$#$Y$[;};,#|;1;2;3;4;5;6;G.7;8;9;v.7.0;i@i a;c c * x@x@[+L.+#+#h*b;c;c;c;b-H-z=z=X=6-6-Y=^-^-^-[.d;e;a%f;f;g;h;i;j;k;4$+$4$4$D#M$#$#$D#l;m; ", " n;o;#$#$Y$M$D#+$+$+$+$i%>$p;q;{.'-e;r;s;s;T#t;(.j.v.v.7.V-i@i c c * x@x@[+L.+#,#h-)#)#)#u;6#v;[.z=z=H-X=i=6-l+^-X=w;x;y;&-z;,&A;B;C;D;E;n@F;K$K$+$K$4$4$:;G; ", " H;8=+$+$K$K$+$+$+$F;a%r;e;I;J;K;L;M;N;O;h+P;(.j.v.Q;0;R@R;.+c S;* x@x@L.+#,#T;)#)#U;6#6#6#6#6#X=z=z=H-X=6-6-X=X=V;W;X;Y;Z;`; >.>+>@>O;#>$>%>&>*>=>n@E;-> ", " ;>>>,>i%'$'$n@'>)>!>~>{>g@]> ^>/>(>_>(.:>v.7.&@R@<>.+c * x@x@[+L.+#';[>)#U;6#6#g#6#}>6#|>6-H-z=z=H-y=1>2>3>4>5>6> 7>8>9>g@0>a>b> ", " c>d>e>f>g>h>]>i>j>k> l>G.m>4.9;v.7.&@i@i .+c n>x@x@L.+#+#o>)#)#p>g#m#q>h#r>s>t>6#u>[.i=[.v>w>x>y>z>A>B>C> D>E> ", " F>G>H>I> J>K>L>M>N>9;H@7.7@}.O>a;Z@x@x@I@L.+#,#c;)#5#g#m#h#h#A+P>h#Q>t>6#R>S>T>U>V>I@x@x@* W>X> ", " Y>Z>`> ,.,0>+,@,#,$,->a>.,@,%,&, *,=,-,X>;,>,o;$+,,#.N>5@H@7.7@}.',a;Z@w@x@I@L.+#h*)#)#p>t>h#),A+A+A+P>h#!,6#5#)#~,+#U>[+x@x@{,],&-^,/, (,w-_, :,<,O;_,[,},9+|,n+1,1,2,$;3, ", " 4,5&h%/*/*/*(*(*5,(*)$i R@7.7.6,S.7,8,9,0,a,b,c,d,e,Q.%+z-#.f,9;H@7.Y.}.',a;S;x@x@I@g,+#K#)#)#5#!,h#),A+A+A+A+),m#6#5#)#e#+#+#[+s x@h,i,0.j,k,l,m,n,o,n,D;m,o+p,p,E;o+o+q,n@$-n@$-$-n@$-E;r,3, ", " )>0%o$0%w$L*0%L*0%+&P#s,t,u,v,d@w,x,y,z,A,B,C,D,,.,.#.i.E,#.f,F,7.7.7@}.',a;S;n>x@[+g,+#K#)#)#5#!,h#),A+A+A+A+h#G,H,)#)#e#+#+#[+x@x@I,J,,-K,L,M,N,O,P,Q,R,S,T,U,V,[+@#L.W,u$x=)*x=)*)*)*#%9&)> ", " X,0=#%'*'*.&.&.&.&x=*+W@Y,Z,$=#=d@D*`,x, '.'+'@'4.#',.,.i.$'#.f,9;%'7.&'}.',*'* * x@[+L.+#K#)#)#5#g#='h#A+A+A+),-';'5#)#)#h-+#+#x>x@x@>','A.A.A.A.'')'7.;-!'`-~'{']'+#^'/'u.'*#%'*.&.&#%#%#%}%8=(' ", " _':'#%.&'*)*u${-F#*@i <'['W@5=E*#=D*;-7.%'v.}'A.|'a.,.,.i.1'#.N>9; '7.7@}.i *'S;* x@[+L.+#+#)#)#f#6#t>2'h#h#h#Q>m#p>)#)#)#h-+#L.x>x@x@c 3'4'A.A.5'v.7.;-6'E*5=W@7'*=H=0-p;e#)+W,}%#%'*)*'*.&#%;%8' ", " 9'0'I$W$L*0%0%)*'-..B@['['W@5=E*#=d@=;n %' '}'a'b'c',.,.i.d'#.N>F '7.&'}.i e'c * * s [++#+#b;)#)#5#g#g#!,!,m#g#p>f#)#)#)#';+#L.x>x@f'c }.A.A.A.g'v.7.D*6'E*W@G*@#+#I*I*h'+#x@i R.{-0%L*#%#%}%~%i'j' ", " k'l'}%B$o$o$o$h$W,v.}.m'n'n'5=E*E*d@o'n %' '}'p'>;4.q',.Q.i.r's'F t'7.7.u'i e'c * * x@[+L.+#';)#)#)#5#5#p>p>p>5#f#)#)#)#v'+#L.[+x@x@y@c R@A.A.A.g'7.7.D*B@E*W@G**=H=w'I*I*x'c B@E+o$o$o$w$I$o$'*j,Z# ", " y'~*c-0%V#h$h$!*&+d R@z'n'n'Z,E*E*F=D*;-A' 'B'C'f,4.c',.#.%+D',.,;9;7.7.Y.}..+c c * w@I@L.L.+#h*)#)#)#)#f#f#)#)#)#)#)#-=+#+#L.I@x@f'c E'F'A.A.A.C-7.`,D*p-E*W@G=*=H=w'I*H*G'* }.|$,$V#B$V#,$#%<$H'I' ", " J'j&'$K$p$K',$|$)$X.L'M'N'N'O'E*p-6'D*;-7.%'P'C'A.4.4.,.#.i.Q'#.8;F '7.n }.R'c c c w@x@s L.L.+#';c;)#)#)#)#)#)#)#S'-=+#+#L.[+x@x@* c T'A.A.A.A.)'7.;-6'E*5=%=+-*=H=w'I*H*U'V'd@R+|$,$,$h$)*9%Y$W'X' ", " Y'Z'4${%B$i$K'}$U#X#`' )N'O'O'$=p-6'D*;-7..)v.C'A.N>4.,.,.#.P.+)c'F q+7.7.}.}..+c c * x@x@x>L.L.+#';v')#)#)#)#S'@)';+#+#L.[+#)x@$)S;%)q+&)A.A.5'H@7.D*6'E*F*%=@#*=I*I*I*H**)=)P#X#9*-)i${%'$X$J= , ", " ;)>)o$g$i$K'K'J$a&'-,)')r*))O'5=p-B@D*D*7..)v.B'a'N>4.,.,.#.i.!),.j.F 7.7.7.}..+.+c c * x@x@x>L.L.+#+#+#+#+#+#+#+#+#g,U@[+s x@x@* ~)R@A.A.A.A.g'.)7.D*B@E*W@G*@#~=I*I*h*{)])}.X#L#i$i$i$,$}%Y$^)/) ", " ():;K'h$V#V#n$n$L*!*:$_):)V*V*F*p-B@<)D*7.7.v.[)C'f,4.a.,.,.i.i.})4.F q+7.7.Y.}..+.+c K@|)x@x@1)I@U@L.+#+#+#g,g,|;U@[+I@x>x@x@* 2)3)A.4)A.A.5'C-.)7.D*E*5=W@G=@#+#I*J*K#5)6)i *+X#,$,$,$i$}$V#7)8) ", " 9)J=0)I$I$0%}%#%+&a)#%{-b)c)c)W*p-p-<)D*;-7. 'd)C'A.4.a.,.,.Q.i.e)f)8;F 7.7.g)}.}..+.+c y@|)x@x@x@h)[+[+[+[+U@U@[+I@x@x@x@w@i)j)Y.-.k)A.A.A.5'v..)@=D*E*F*W@&=@#S*I*==h-l)m)W,}%H$o$o$B$V#V#,$J=n) ", " o)J=W$.&)*u$u$u$p$B#B#{%p)q)r)r)E*E*6'D*;-7.%'C-s)A.4.a.,.,.Q.0.i.%+%.t)u)7.7.Q@}.}..+.+E'y@J@f'w@x@v)x@x@x@x@x@x@x@x@x@w)x)}.v.A.y)A.A.A.5'g'v.~@D*z)E*F*%=+-*=S*====h-A)x=.&.&.&W$W$}%0%I$n$0=r, ", " B)H'p${%B#-%-%-%9&O#U=<$c-*+%=%=F*E*E*d@b*7.%'C-s)A.4.a.,.C)D'Q.i.%+%+%+D)E)F)w,G)[@}.H).+x)I)y@f'w@w@x@x@x@x@x@x@x@|)J)K)F'A.(.A.L)A.A.A.5'g'v.+=D*#=5=##G*@#+#S*==:-M){-B#{%{%{%p$u$u$)*.&#%J=$, ", " N)O)O#O#9&<$#;c-#;#;W##-;%P)Q)r)F*E*#=D*R)7. 's)A.S)T)U)V)W)X)a+%@Y)(@Z)i'(@`) !.!+!@!#!$!%!&!0@*!=!-!|)x@x@;!>!,!'!0.%+)!%+G.,.(.r;U-!!~!A.5'C- 'D*F=5=##G**=+#h'h't-)+<$<$U=9&-%-%-%B#{%{%u$L${! ", " ]!h@W##-#-;%9%#-#$D#9%D#4$^!/!(!F*p-d@$*_!:!)s!t!u!v!w!i'x!y!z!A! B!C!n;D!E!F!G!H!J>I!J!K!J>J>b!L!M!K;H+N!O!P!Q!R!N!S!T!U!i>~>9!V!(@W!G.(.X!Y!Z!`! ~+;4#.~+~@~M$Y$Y$#$9%#-#-W#W#c-W#%@1, ", " #~K!D#K$K$K$K$+$K$K$K$a%*-r;$~%~s!&~*~=~-~(';~>~ ,~'~)~!~~~{~]~^~ /~(~_~P!:~<~[~}~|~(@,+1~2~3~4~5~6~Y$i%4$4$4$D#D#Y$Y$9%9%K$(@7~ ", " 8~E;+$K$i%*-T#9~C#(@Y)0~a~b~c~d~e~B!Z+ f~g~h~i~j~k~8!l~m~h+n~o~F;K$K$K$4$4$4$4$M$O)p~q~ ", " r~s~C#C#'@_@a~k~t~u~v~w~5! x~L!y~z~A~B~C~D~(@E~[%%$*-F;4$L$_@F~ ", " G~H~I~J~K~L~x~ M~N~i'O~Y>|~J'$$'@P~Q~R~ ", " S~T~9>|,U~V~W~ ", " ", " "}; amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/0000755000175000017500000000000012053222140017526 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/0000755000175000017500000000000012053222137021166 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/0000755000175000017500000000000012053222137022027 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/fixwxGUIDs.pl0000644000175000017500000000233211772155611024376 0ustar l3onl3on#!perl # # This script is only useful if your source is in a SVN working copy! # # Problem: whenever you add a new wxWidgets version and convert the VC6 projects, # they are converted to VC8 XML .vcproj . In the process, a new project GUID is created. # When you then open your solution, all GUIDs are updated. # # To avoid this: # 1) Open and close wx.dsw, creating the .vcproj # 2) Run this script. It will replace the new GUIDs in the wx vcproj by the old ones from the aMule-MSVCE-ExtLibs.sln . # 3) Now load aMule-MSVCE-ExtLibs.sln. It won't be changed anymore. # use strict; open(sln, 'aMule-MSVCE-ExtLibs.sln'); #Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxregex", "..\..\wxWidgets\build\msw\wx_wxregex.vcproj", "{B4ACF599-824F-4806-8390-414B2DF64922}" while () { if (/^Project.*, \"(.+)\", (\".+\")/) { my ($path, $guid) = ($1, $2); next unless $path =~ /\\wxWidgets/; $path =~ s-\\-/-g; print "fix $path\n"; open(prj, $path) or die "$path $!"; my @content = ; close prj; foreach (@content) { if (/ProjectGUID=/) { $_ = "\tProjectGUID=$guid\n"; print $_; last; } } open(prj, ">$path") or die; print prj @content; close prj; } } amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/PCH.h0000644000175000017500000000462511772155611022632 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Stu Redman ( sturedman@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef PCH_H #define PCH_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "CryptoPP_Inc.h" #include "amule.h" #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include "ClientCreditsList.h" #include "ClientList.h" #include "ClientRef.h" #include "ClientUDPSocket.h" #include "ExternalConn.h" #include "InternalEvents.h" #include "KnownFileList.h" #include "ListenSocket.h" #include "Logger.h" #include "MD4Hash.h" #include "OtherFunctions.h" #include "PartFile.h" #include "Preferences.h" #include "ScopedPtr.h" #include "Server.h" #include "Statistics.h" #include "ThreadTasks.h" #include "UserEvents.h" #ifndef CLIENT_GUI #include "kademlia/kademlia/Kademlia.h" #include "kademlia/kademlia/Prefs.h" #include "IPFilter.h" #endif #ifndef AMULE_DAEMON #include "amuleDlg.h" #include "muuli_wdr.h" #endif #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMuleGUI/0000755000175000017500000000000012053222137023437 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMuleGUI/aMuleGUI.vcproj0000644000175000017500000006356112012204604026301 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/0000755000175000017500000000000012053222137022760 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libmulecommon/0000755000175000017500000000000012053222136025621 5ustar l3onl3on././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libmulecommon/libmulecommon.vcprojamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libmulecommon/libmulecommon.vcpr0000644000175000017500000002333012012204604031353 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libmuleexternalwxlistctrl/0000755000175000017500000000000012053222137030314 5ustar l3onl3on././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libmuleexternalwxlistctrl/libmuleexternalwxlistctrl.vcprojamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libmuleexternalwxlistctrl/libmul0000644000175000017500000001557112012204604031526 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libGeoIP/0000755000175000017500000000000012053222137024412 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libGeoIP/readme.txt0000644000175000017500000000106011772155611026416 0ustar l3onl3onHow to build aMule with GeoIP support The MaxMind GeoIP library can detect the country an IP adress comes from. aMule uses this information to display a little country flag for each source or ed2k server. Since this is an external library it is disabled by default. This is how to enable it: Download the free GeoIP C library from http://www.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz From the folder libGeoIP take GeoIP.h and GeoIP.c and put them into "MSVC Solution\libs\libGeoIP" (removing the dummy files there). Rebuild aMule. That's it. :-) amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libGeoIP/libGeoIP.vcproj0000644000175000017500000001020312012204604027257 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libGeoIP/GeoIP.cmd0000644000175000017500000000061411772155611026054 0ustar l3onl3on@echo off if exist geoip.h goto h_exist echo creating GeoIP.h echo #undef ENABLE_IP2COUNTRY > GeoIP.h echo typedef void GeoIP; >> GeoIP.h :h_exist if exist geoip.c goto c_exist echo creating GeoIP.c echo // Dummy > GeoIP.c :c_exist if exist geoip_x.c goto finish echo creating GeoIP_X.c echo #pragma warning(disable:4996) > GeoIP_X.c echo #include "GeoIP.c" >> GeoIP_X.c :finish amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libext/0000755000175000017500000000000012053222136024246 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libext/buildlibext.vcproj0000644000175000017500000002212211772155611030013 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libext/libext.vcproj0000644000175000017500000001251511772155611027000 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libmuleec/0000755000175000017500000000000012053222136024720 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/libs/libmuleec/libmuleec.vcproj0000644000175000017500000002105612012204604030105 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/PCH.cpp0000644000175000017500000000016611772155611023161 0ustar l3onl3on// This file is used to build the precompiled headers. // Since PCH.h is included by compiler option, it's just empty.amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/makeconfig.cmd0000644000175000017500000000240412012204604024611 0ustar l3onl3on@echo off echo #ifndef CONFIG_H>config.h echo #define CONFIG_H>>config.h rem Tarballs have a .svn-revision for identification if not exist .svn-revision goto svn1 FOR /F %%i IN (.svn-revision) DO set svnv=%%i goto :foundsvnversion :svn1 rem Try to get version from a SVN working copy, svnversion must be in path set svnv=exported call svnversion >nul 2>&1 if errorlevel 1 goto nosvnversion FOR /F %%i IN ('svnversion src') DO set svnv=%%i if %svnv%==exported goto nosvnversion if %svnv%==Unversioned goto nosvnversion :foundsvnversion echo SVNDATE is %svnv% echo #define SVNDATE "rev. %svnv%">>config.h echo #define VERSION "SVN">>config.h echo #define __PRERELEASE__>>config.h goto finish :nosvnversion echo release build, version from ^ echo #include ^ >>config.h :finish echo #define CRYPTOPP_INCLUDE_PREFIX ../cryptopp>>config.h echo #define PACKAGE "amule">>config.h echo #define HAVE_ERRNO_H>>config.h echo #define HAVE_STRERROR>>config.h rem ADUNANZA BEGIN echo #if !defined(ENABLE_IP2COUNTRY)>>config.h echo #define ENABLE_IP2COUNTRY>>config.h echo #endif>>config.h echo #if !defined(YY_NO_UNISTD_H)>>config.h echo #define YY_NO_UNISTD_H>>config.h echo #endif>>config.h rem ADUNANZA END echo #endif>>config.h amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMuleWeb/0000755000175000017500000000000012053222137023530 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMuleWeb/aMuleWeb.vcproj0000644000175000017500000003005412012204604026452 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/version.rc0000644000175000017500000000424212052527717024057 0ustar l3onl3on#include #define HAVE_CONFIG_H #include "../../../src/include/common/ClientVersion.h" // two-level macro to transform macro-number in string #define MYTOSTRING(a) BASEMYTOSTRING(a) #define BASEMYTOSTRING(a) #a #define ADU_VER_MAJ 2012 #define ADU_VER_MIN 1 // IMPOSTARE LA SEG. ADU_BETA_MAJ A 0 PER LE VERSIONI RILASCIATE UFFICIALMENTE #define ADU_BETA_MAJ 0 #define ADU_BETA_MIN #ifdef __PRERELEASE__ # define VER_PRERELEASE VS_FF_PRERELEASE # undef VER_RELEASE # define VER_RELEASE 0 # if ADU_BETA_MAJ > 0 # define VER_PRODUCTVERSION_STR MYTOSTRING(ADU_VER_MAJ) "." MYTOSTRING(ADU_VER_MIN) "b" MYTOSTRING(ADU_BETA_MAJ) " " SVNDATE # else # define VER_PRODUCTVERSION_STR MYTOSTRING(ADU_VER_MAJ) "." MYTOSTRING(ADU_VER_MIN) " " SVNDATE # endif #else # define VER_PRERELEASE 0 # ifndef VER_RELEASE # define VER_RELEASE 1 # if ADU_BETA_MAJ > 0 # define VER_PRODUCTVERSION_STR MYTOSTRING(ADUVER_MAJ) "." MYTOSTRING(ADU_VER_MIN) "b" MYTOSTRING(ADU_BETA_MAJ) # else # define VER_PRODUCTVERSION_STR MYTOSTRING(ADUVER_MAJ) "." MYTOSTRING(ADU_VER_MIN) # endif # endif #endif #ifdef __DEBUG__ #define VER_DEBUG VS_FF_DEBUG #else #define VER_DEBUG 0 #endif VS_VERSION_INFO VERSIONINFO FILEVERSION ADU_VER_MAJ, ADU_VER_MIN, ADU_BETA_MAJ, VER_RELEASE PRODUCTVERSION ADU_VER_MAJ, ADU_VER_MIN, ADU_BETA_MAJ, VER_RELEASE FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS VER_DEBUG | VER_PRERELEASE FILEOS VOS__WINDOWS32 FILETYPE VFT_APP FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "http://www.adunanza.net, based on aMule (http://www.amule.org)" VALUE "FileDescription", VER_FILEDESCRIPTION_STR VALUE "FileVersion", VER_PRODUCTVERSION_STR VALUE "InternalName", VER_INTERNALNAME_STR VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR VALUE "ProductName", "aMule AdunanzA" VALUE "ProductVersion", VER_PRODUCTVERSION_STR VALUE "LegalCopyright", "The AdunanzA Team" VALUE "CompanyName", "AdunanzA (http://www.adunanza.net)" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 1200 END END amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMule-MSVCE-ExtLibs.sln0000644000175000017500000003220512012204604026027 0ustar l3onl3onMicrosoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "buildlibext", "libs\libext\buildlibext.vcproj", "{F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}" ProjectSection(ProjectDependencies) = postProject {FCC5DC3F-A2EA-4EB6-A65E-DE4A402F1E24} = {FCC5DC3F-A2EA-4EB6-A65E-DE4A402F1E24} {E20CCFA6-7CD0-4BE0-BC8D-05BF60629797} = {E20CCFA6-7CD0-4BE0-BC8D-05BF60629797} {D8936878-2AF0-4136-824D-3691D1C94028} = {D8936878-2AF0-4136-824D-3691D1C94028} {5C72D82B-61BB-4A67-89AC-E84D1FFA74E9} = {5C72D82B-61BB-4A67-89AC-E84D1FFA74E9} {C59AA3E7-8FF1-4FCA-A912-8EA326E4C298} = {C59AA3E7-8FF1-4FCA-A912-8EA326E4C298} {1352F942-901D-4F7E-ABED-C1FDD0BBC78F} = {1352F942-901D-4F7E-ABED-C1FDD0BBC78F} {7280A40D-31B8-4C4E-A19A-25EFEB3AC059} = {7280A40D-31B8-4C4E-A19A-25EFEB3AC059} {ABB3429A-85FC-40B1-9F2E-497E9411E89F} = {ABB3429A-85FC-40B1-9F2E-497E9411E89F} {89432086-E75D-43B1-83E5-CE5640DA756C} = {89432086-E75D-43B1-83E5-CE5640DA756C} {78F2968B-D08D-4196-AB2E-0F80A8FF37AC} = {78F2968B-D08D-4196-AB2E-0F80A8FF37AC} {D9EEFEA3-0728-4F5C-A806-580218598D8E} = {D9EEFEA3-0728-4F5C-A806-580218598D8E} {D3EABC3A-7839-49E4-9920-FC74EE3A10A1} = {D3EABC3A-7839-49E4-9920-FC74EE3A10A1} {3423EC9A-52E4-4A4D-9753-EDEBC38785EF} = {3423EC9A-52E4-4A4D-9753-EDEBC38785EF} {36E773AF-F10F-4D51-ADC1-AA48DDBB2BD3} = {36E773AF-F10F-4D51-ADC1-AA48DDBB2BD3} {968FAC3F-B0C2-404A-8DA7-F2640446A4EF} = {968FAC3F-B0C2-404A-8DA7-F2640446A4EF} {1808D009-7D24-4359-9807-572AB9B90952} = {1808D009-7D24-4359-9807-572AB9B90952} {D1F47933-1765-468A-A6DD-8DEDDFB32975} = {D1F47933-1765-468A-A6DD-8DEDDFB32975} {C42DF1C2-BC02-4224-842E-45856C659ABE} = {C42DF1C2-BC02-4224-842E-45856C659ABE} {3DA0A52B-5AB3-42F8-A5A8-3FF9D79CC370} = {3DA0A52B-5AB3-42F8-A5A8-3FF9D79CC370} {C0218A65-550A-4BFF-A8BE-DB9939434FC3} = {C0218A65-550A-4BFF-A8BE-DB9939434FC3} {B2123222-B12C-4698-A291-5CBB3053F04F} = {B2123222-B12C-4698-A291-5CBB3053F04F} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cryptlib", "..\..\..\..\cryptopp\cryptlib.vcproj", "{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxregex", "..\..\..\..\wxWidgets\build\msw\wx_wxregex.vcproj", "{36E773AF-F10F-4D51-ADC1-AA48DDBB2BD3}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxzlib", "..\..\..\..\wxWidgets\build\msw\wx_wxzlib.vcproj", "{5C72D82B-61BB-4A67-89AC-E84D1FFA74E9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxpng", "..\..\..\..\wxWidgets\build\msw\wx_wxpng.vcproj", "{ABB3429A-85FC-40B1-9F2E-497E9411E89F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxjpeg", "..\..\..\..\wxWidgets\build\msw\wx_wxjpeg.vcproj", "{C0218A65-550A-4BFF-A8BE-DB9939434FC3}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxtiff", "..\..\..\..\wxWidgets\build\msw\wx_wxtiff.vcproj", "{968FAC3F-B0C2-404A-8DA7-F2640446A4EF}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxexpat", "..\..\..\..\wxWidgets\build\msw\wx_wxexpat.vcproj", "{C42DF1C2-BC02-4224-842E-45856C659ABE}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "..\..\..\..\wxWidgets\build\msw\wx_base.vcproj", "{89432086-E75D-43B1-83E5-CE5640DA756C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net", "..\..\..\..\wxWidgets\build\msw\wx_net.vcproj", "{D8936878-2AF0-4136-824D-3691D1C94028}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "..\..\..\..\wxWidgets\build\msw\wx_core.vcproj", "{1808D009-7D24-4359-9807-572AB9B90952}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adv", "..\..\..\..\wxWidgets\build\msw\wx_adv.vcproj", "{D1F47933-1765-468A-A6DD-8DEDDFB32975}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "media", "..\..\..\..\wxWidgets\build\msw\wx_media.vcproj", "{C59AA3E7-8FF1-4FCA-A912-8EA326E4C298}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "odbc", "..\..\..\..\wxWidgets\build\msw\wx_odbc.vcproj", "{7280A40D-31B8-4C4E-A19A-25EFEB3AC059}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbgrid", "..\..\..\..\wxWidgets\build\msw\wx_dbgrid.vcproj", "{FCC5DC3F-A2EA-4EB6-A65E-DE4A402F1E24}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "html", "..\..\..\..\wxWidgets\build\msw\wx_html.vcproj", "{D3EABC3A-7839-49E4-9920-FC74EE3A10A1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qa", "..\..\..\..\wxWidgets\build\msw\wx_qa.vcproj", "{1352F942-901D-4F7E-ABED-C1FDD0BBC78F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "..\..\..\..\wxWidgets\build\msw\wx_xml.vcproj", "{D9EEFEA3-0728-4F5C-A806-580218598D8E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrc", "..\..\..\..\wxWidgets\build\msw\wx_xrc.vcproj", "{78F2968B-D08D-4196-AB2E-0F80A8FF37AC}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "..\..\..\..\wxWidgets\build\msw\wx_aui.vcproj", "{B2123222-B12C-4698-A291-5CBB3053F04F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "..\..\..\..\wxWidgets\build\msw\wx_richtext.vcproj", "{E20CCFA6-7CD0-4BE0-BC8D-05BF60629797}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gl", "..\..\..\..\wxWidgets\build\msw\wx_gl.vcproj", "{3DA0A52B-5AB3-42F8-A5A8-3FF9D79CC370}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug|Win32.ActiveCfg = Debug|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug|Win32.Build.0 = Debug|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release|Win32.ActiveCfg = Release|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release|Win32.Build.0 = Release|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.ActiveCfg = Debug|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.Build.0 = Debug|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.ActiveCfg = Release|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.Build.0 = Release|Win32 {36E773AF-F10F-4D51-ADC1-AA48DDBB2BD3}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {36E773AF-F10F-4D51-ADC1-AA48DDBB2BD3}.Debug|Win32.Build.0 = Unicode Debug|Win32 {36E773AF-F10F-4D51-ADC1-AA48DDBB2BD3}.Release|Win32.ActiveCfg = Unicode Release|Win32 {36E773AF-F10F-4D51-ADC1-AA48DDBB2BD3}.Release|Win32.Build.0 = Unicode Release|Win32 {5C72D82B-61BB-4A67-89AC-E84D1FFA74E9}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {5C72D82B-61BB-4A67-89AC-E84D1FFA74E9}.Debug|Win32.Build.0 = Unicode Debug|Win32 {5C72D82B-61BB-4A67-89AC-E84D1FFA74E9}.Release|Win32.ActiveCfg = Unicode Release|Win32 {5C72D82B-61BB-4A67-89AC-E84D1FFA74E9}.Release|Win32.Build.0 = Unicode Release|Win32 {ABB3429A-85FC-40B1-9F2E-497E9411E89F}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {ABB3429A-85FC-40B1-9F2E-497E9411E89F}.Debug|Win32.Build.0 = Unicode Debug|Win32 {ABB3429A-85FC-40B1-9F2E-497E9411E89F}.Release|Win32.ActiveCfg = Unicode Release|Win32 {ABB3429A-85FC-40B1-9F2E-497E9411E89F}.Release|Win32.Build.0 = Unicode Release|Win32 {C0218A65-550A-4BFF-A8BE-DB9939434FC3}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {C0218A65-550A-4BFF-A8BE-DB9939434FC3}.Debug|Win32.Build.0 = Unicode Debug|Win32 {C0218A65-550A-4BFF-A8BE-DB9939434FC3}.Release|Win32.ActiveCfg = Unicode Release|Win32 {C0218A65-550A-4BFF-A8BE-DB9939434FC3}.Release|Win32.Build.0 = Unicode Release|Win32 {968FAC3F-B0C2-404A-8DA7-F2640446A4EF}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {968FAC3F-B0C2-404A-8DA7-F2640446A4EF}.Debug|Win32.Build.0 = Unicode Debug|Win32 {968FAC3F-B0C2-404A-8DA7-F2640446A4EF}.Release|Win32.ActiveCfg = Unicode Release|Win32 {968FAC3F-B0C2-404A-8DA7-F2640446A4EF}.Release|Win32.Build.0 = Unicode Release|Win32 {C42DF1C2-BC02-4224-842E-45856C659ABE}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {C42DF1C2-BC02-4224-842E-45856C659ABE}.Debug|Win32.Build.0 = Unicode Debug|Win32 {C42DF1C2-BC02-4224-842E-45856C659ABE}.Release|Win32.ActiveCfg = Unicode Release|Win32 {C42DF1C2-BC02-4224-842E-45856C659ABE}.Release|Win32.Build.0 = Unicode Release|Win32 {89432086-E75D-43B1-83E5-CE5640DA756C}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {89432086-E75D-43B1-83E5-CE5640DA756C}.Debug|Win32.Build.0 = Unicode Debug|Win32 {89432086-E75D-43B1-83E5-CE5640DA756C}.Release|Win32.ActiveCfg = Unicode Release|Win32 {89432086-E75D-43B1-83E5-CE5640DA756C}.Release|Win32.Build.0 = Unicode Release|Win32 {D8936878-2AF0-4136-824D-3691D1C94028}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {D8936878-2AF0-4136-824D-3691D1C94028}.Debug|Win32.Build.0 = Unicode Debug|Win32 {D8936878-2AF0-4136-824D-3691D1C94028}.Release|Win32.ActiveCfg = Unicode Release|Win32 {D8936878-2AF0-4136-824D-3691D1C94028}.Release|Win32.Build.0 = Unicode Release|Win32 {1808D009-7D24-4359-9807-572AB9B90952}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {1808D009-7D24-4359-9807-572AB9B90952}.Debug|Win32.Build.0 = Unicode Debug|Win32 {1808D009-7D24-4359-9807-572AB9B90952}.Release|Win32.ActiveCfg = Unicode Release|Win32 {1808D009-7D24-4359-9807-572AB9B90952}.Release|Win32.Build.0 = Unicode Release|Win32 {D1F47933-1765-468A-A6DD-8DEDDFB32975}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {D1F47933-1765-468A-A6DD-8DEDDFB32975}.Debug|Win32.Build.0 = Unicode Debug|Win32 {D1F47933-1765-468A-A6DD-8DEDDFB32975}.Release|Win32.ActiveCfg = Unicode Release|Win32 {D1F47933-1765-468A-A6DD-8DEDDFB32975}.Release|Win32.Build.0 = Unicode Release|Win32 {C59AA3E7-8FF1-4FCA-A912-8EA326E4C298}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {C59AA3E7-8FF1-4FCA-A912-8EA326E4C298}.Debug|Win32.Build.0 = Unicode Debug|Win32 {C59AA3E7-8FF1-4FCA-A912-8EA326E4C298}.Release|Win32.ActiveCfg = Unicode Release|Win32 {C59AA3E7-8FF1-4FCA-A912-8EA326E4C298}.Release|Win32.Build.0 = Unicode Release|Win32 {7280A40D-31B8-4C4E-A19A-25EFEB3AC059}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {7280A40D-31B8-4C4E-A19A-25EFEB3AC059}.Debug|Win32.Build.0 = Unicode Debug|Win32 {7280A40D-31B8-4C4E-A19A-25EFEB3AC059}.Release|Win32.ActiveCfg = Unicode Release|Win32 {7280A40D-31B8-4C4E-A19A-25EFEB3AC059}.Release|Win32.Build.0 = Unicode Release|Win32 {FCC5DC3F-A2EA-4EB6-A65E-DE4A402F1E24}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {FCC5DC3F-A2EA-4EB6-A65E-DE4A402F1E24}.Debug|Win32.Build.0 = Unicode Debug|Win32 {FCC5DC3F-A2EA-4EB6-A65E-DE4A402F1E24}.Release|Win32.ActiveCfg = Unicode Release|Win32 {FCC5DC3F-A2EA-4EB6-A65E-DE4A402F1E24}.Release|Win32.Build.0 = Unicode Release|Win32 {D3EABC3A-7839-49E4-9920-FC74EE3A10A1}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {D3EABC3A-7839-49E4-9920-FC74EE3A10A1}.Debug|Win32.Build.0 = Unicode Debug|Win32 {D3EABC3A-7839-49E4-9920-FC74EE3A10A1}.Release|Win32.ActiveCfg = Unicode Release|Win32 {D3EABC3A-7839-49E4-9920-FC74EE3A10A1}.Release|Win32.Build.0 = Unicode Release|Win32 {1352F942-901D-4F7E-ABED-C1FDD0BBC78F}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {1352F942-901D-4F7E-ABED-C1FDD0BBC78F}.Debug|Win32.Build.0 = Unicode Debug|Win32 {1352F942-901D-4F7E-ABED-C1FDD0BBC78F}.Release|Win32.ActiveCfg = Unicode Release|Win32 {1352F942-901D-4F7E-ABED-C1FDD0BBC78F}.Release|Win32.Build.0 = Unicode Release|Win32 {D9EEFEA3-0728-4F5C-A806-580218598D8E}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {D9EEFEA3-0728-4F5C-A806-580218598D8E}.Debug|Win32.Build.0 = Unicode Debug|Win32 {D9EEFEA3-0728-4F5C-A806-580218598D8E}.Release|Win32.ActiveCfg = Unicode Release|Win32 {D9EEFEA3-0728-4F5C-A806-580218598D8E}.Release|Win32.Build.0 = Unicode Release|Win32 {78F2968B-D08D-4196-AB2E-0F80A8FF37AC}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {78F2968B-D08D-4196-AB2E-0F80A8FF37AC}.Debug|Win32.Build.0 = Unicode Debug|Win32 {78F2968B-D08D-4196-AB2E-0F80A8FF37AC}.Release|Win32.ActiveCfg = Unicode Release|Win32 {78F2968B-D08D-4196-AB2E-0F80A8FF37AC}.Release|Win32.Build.0 = Unicode Release|Win32 {B2123222-B12C-4698-A291-5CBB3053F04F}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {B2123222-B12C-4698-A291-5CBB3053F04F}.Debug|Win32.Build.0 = Unicode Debug|Win32 {B2123222-B12C-4698-A291-5CBB3053F04F}.Release|Win32.ActiveCfg = Unicode Release|Win32 {B2123222-B12C-4698-A291-5CBB3053F04F}.Release|Win32.Build.0 = Unicode Release|Win32 {E20CCFA6-7CD0-4BE0-BC8D-05BF60629797}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {E20CCFA6-7CD0-4BE0-BC8D-05BF60629797}.Debug|Win32.Build.0 = Unicode Debug|Win32 {E20CCFA6-7CD0-4BE0-BC8D-05BF60629797}.Release|Win32.ActiveCfg = Unicode Release|Win32 {E20CCFA6-7CD0-4BE0-BC8D-05BF60629797}.Release|Win32.Build.0 = Unicode Release|Win32 {3DA0A52B-5AB3-42F8-A5A8-3FF9D79CC370}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {3DA0A52B-5AB3-42F8-A5A8-3FF9D79CC370}.Debug|Win32.Build.0 = Unicode Debug|Win32 {3DA0A52B-5AB3-42F8-A5A8-3FF9D79CC370}.Release|Win32.ActiveCfg = Unicode Release|Win32 {3DA0A52B-5AB3-42F8-A5A8-3FF9D79CC370}.Release|Win32.Build.0 = Unicode Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aLinkCreator/0000755000175000017500000000000012053222137024405 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aLinkCreator/aLinkCreator.vcproj0000644000175000017500000002520412012204604030205 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aLinkCreator/alcc.vcproj0000644000175000017500000002430412012204604026531 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/wxCas/0000755000175000017500000000000012053222136023113 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/wxCas/wxCas.vcproj0000644000175000017500000003025012012204604025420 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMule/0000755000175000017500000000000012053222137023072 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMule/aMule.vcproj0000644000175000017500000011330112020750302025353 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/fileview/0000755000175000017500000000000012053222137023641 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/fileview/fileview.vcproj0000644000175000017500000002245212012204604026677 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMule-MSVC.sln0000644000175000017500000006671612012204604024370 0ustar l3onl3onMicrosoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wxWidgets", "wxWidgets", "{04ECC032-1961-45B0-B0C3-0064A8E3B880}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "external libraries", "external libraries", "{138CD730-94FC-41BA-92BB-E88E1DF41CC3}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aMule libraries", "aMule libraries", "{29E96B92-653C-431E-BE45-756B048E5A11}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aMule Applications", "aMule Applications", "{CB2CC2C4-0882-434D-8B96-4984740BCC23}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".NET Remote GUI", ".NET Remote GUI", "{D176CBB0-E9BB-4827-8A37-2F05423EC07F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Monolithic build", "Monolithic build", "{91C69AB8-8B41-4320-99F8-CB97A5258E2D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extras", "Extras", "{9AC4A7BC-3E72-4C97-81FF-D8708331CC54}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnitTests", "UnitTests", "{660C24AD-2ABA-406B-B56A-BF9AE52AD432}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{02262EFC-86BC-45B1-8401-A26BB365E717}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Remote access clients", "Remote access clients", "{BD53B16D-3577-4245-A420-070A890D35AB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Daemon", "Daemon", "{B601F0F8-B6DC-4DF5-B4CD-2E1807E0E68D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cryptlib", "..\..\cryptopp\cryptlib.vcproj", "{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxregex", "..\..\wxWidgets\build\msw\wx_wxregex.vcproj", "{A7E8610D-C16C-4E9F-81D7-05508FA68C2F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxzlib", "..\..\wxWidgets\build\msw\wx_wxzlib.vcproj", "{DA795A0D-1E89-465D-96E2-1AEC329E728E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxpng", "..\..\wxWidgets\build\msw\wx_wxpng.vcproj", "{CB546C7C-30F5-41D9-B9D8-9E4159A972C8}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxjpeg", "..\..\wxWidgets\build\msw\wx_wxjpeg.vcproj", "{51F225E6-8757-48E6-8119-44A8A992FE18}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxtiff", "..\..\wxWidgets\build\msw\wx_wxtiff.vcproj", "{3089B813-6093-42BD-B85E-3BD7CDADD9A0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxexpat", "..\..\wxWidgets\build\msw\wx_wxexpat.vcproj", "{83822AAB-07F6-4A23-9E3B-C07B4216F158}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "..\..\wxWidgets\build\msw\wx_base.vcproj", "{8C6176E5-C842-41AD-AB9F-A70A3FE39BCE}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net", "..\..\wxWidgets\build\msw\wx_net.vcproj", "{DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "..\..\wxWidgets\build\msw\wx_core.vcproj", "{CD15DE1F-CF9E-480D-A6E2-DE766CAB404E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adv", "..\..\wxWidgets\build\msw\wx_adv.vcproj", "{884329BD-14AD-4397-8834-4A079C07535A}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "media", "..\..\wxWidgets\build\msw\wx_media.vcproj", "{664F45D6-70DD-4B98-B0E2-3AEA40F18EEC}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "odbc", "..\..\wxWidgets\build\msw\wx_odbc.vcproj", "{C40BC4E3-26C2-41DA-9696-42FD156DF487}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbgrid", "..\..\wxWidgets\build\msw\wx_dbgrid.vcproj", "{76AE7A3F-F0B7-4289-913B-3923526BF78D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "html", "..\..\wxWidgets\build\msw\wx_html.vcproj", "{FECE6716-BB92-45A1-BF79-90CFAFD68E58}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qa", "..\..\wxWidgets\build\msw\wx_qa.vcproj", "{CDDC3AFD-B608-4889-A03A-2A7378041D33}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "..\..\wxWidgets\build\msw\wx_xml.vcproj", "{B2189BF6-0953-4C43-84DD-52125127F707}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrc", "..\..\wxWidgets\build\msw\wx_xrc.vcproj", "{45E5400D-93BF-4DBC-AA12-87C4F37F07BD}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "..\..\wxWidgets\build\msw\wx_aui.vcproj", "{63855B80-FD40-4862-8BB9-13D623FD5D41}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "..\..\wxWidgets\build\msw\wx_richtext.vcproj", "{6E5AEC08-9F05-461A-87F6-855A1BB4DD21}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gl", "..\..\wxWidgets\build\msw\wx_gl.vcproj", "{499FAA01-4407-420D-8928-416AE21FC1C7}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmuleec", "libs\libmuleec\libmuleec.vcproj", "{5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmulecommon", "libs\libmulecommon\libmulecommon.vcproj", "{293E6133-239A-4ED4-838E-9182B07C6B35}" ProjectSection(ProjectDependencies) = postProject {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} = {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libkad", "libs\libkad\libkad.vcproj", "{DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {3423EC9A-52E4-4A4D-9753-EDEBC38785EF} = {3423EC9A-52E4-4A4D-9753-EDEBC38785EF} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMule", "aMule\aMule.vcproj", "{5FCAFC30-922E-446F-8DF5-D71819ABC2FE}" ProjectSection(ProjectDependencies) = postProject {884329BD-14AD-4397-8834-4A079C07535A} = {884329BD-14AD-4397-8834-4A079C07535A} {DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE} = {DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE} {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {CD15DE1F-CF9E-480D-A6E2-DE766CAB404E} = {CD15DE1F-CF9E-480D-A6E2-DE766CAB404E} {16C7A051-9097-41A5-BA26-FEC1EA1F16EF} = {16C7A051-9097-41A5-BA26-FEC1EA1F16EF} {A7E8610D-C16C-4E9F-81D7-05508FA68C2F} = {A7E8610D-C16C-4E9F-81D7-05508FA68C2F} {3089B813-6093-42BD-B85E-3BD7CDADD9A0} = {3089B813-6093-42BD-B85E-3BD7CDADD9A0} {CB546C7C-30F5-41D9-B9D8-9E4159A972C8} = {CB546C7C-30F5-41D9-B9D8-9E4159A972C8} {DA795A0D-1E89-465D-96E2-1AEC329E728E} = {DA795A0D-1E89-465D-96E2-1AEC329E728E} {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C} = {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C} {3423EC9A-52E4-4A4D-9753-EDEBC38785EF} = {3423EC9A-52E4-4A4D-9753-EDEBC38785EF} {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} = {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} {51F225E6-8757-48E6-8119-44A8A992FE18} = {51F225E6-8757-48E6-8119-44A8A992FE18} {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} = {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmuleexternalwxlistctrl", "libs\libmuleexternalwxlistctrl\libmuleexternalwxlistctrl.vcproj", "{16C7A051-9097-41A5-BA26-FEC1EA1F16EF}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aLinkCreator", "aLinkCreator\aLinkCreator.vcproj", "{FF560C5D-4369-4DEF-B2EC-6F507D554DB5}" ProjectSection(ProjectDependencies) = postProject {CD15DE1F-CF9E-480D-A6E2-DE766CAB404E} = {CD15DE1F-CF9E-480D-A6E2-DE766CAB404E} {A7E8610D-C16C-4E9F-81D7-05508FA68C2F} = {A7E8610D-C16C-4E9F-81D7-05508FA68C2F} {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} = {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmuleunittest", "UnitTests\libmuleunittest\libmuleunittest.vcproj", "{5FE132E5-83CB-4880-B2D9-CA828E008786}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} = {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FileDataIO", "UnitTests\FileDataIO\FileDataIO.vcproj", "{C27E39F5-BA92-4245-A537-7B7852508900}" ProjectSection(ProjectDependencies) = postProject {DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE} = {DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE} {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {5FE132E5-83CB-4880-B2D9-CA828E008786} = {5FE132E5-83CB-4880-B2D9-CA828E008786} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Format", "UnitTests\FormatTest\FormatTest.vcproj", "{269AD4B7-8245-4476-9179-E4659F6E217F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StringFunctions", "UnitTests\StringFunctions\StringFunctions.vcproj", "{5A024799-C5ED-41CF-BF0C-914A11799234}" ProjectSection(ProjectDependencies) = postProject {5FE132E5-83CB-4880-B2D9-CA828E008786} = {5FE132E5-83CB-4880-B2D9-CA828E008786} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NetworkFunctions", "UnitTests\NetworkFunctions\NetworkFunctions.vcproj", "{6B452F4F-43C9-408E-BDF3-C70FCA9F257D}" ProjectSection(ProjectDependencies) = postProject {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C} = {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C} {5FE132E5-83CB-4880-B2D9-CA828E008786} = {5FE132E5-83CB-4880-B2D9-CA828E008786} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RangeMap", "UnitTests\RangeMap\RangeMap.vcproj", "{9A19C692-FFBD-467C-B8A8-63166F421940}" ProjectSection(ProjectDependencies) = postProject {5FE132E5-83CB-4880-B2D9-CA828E008786} = {5FE132E5-83CB-4880-B2D9-CA828E008786} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMuleCMD", "aMuleCMD\aMuleCMD.vcproj", "{EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}" ProjectSection(ProjectDependencies) = postProject {CDDC3AFD-B608-4889-A03A-2A7378041D33} = {CDDC3AFD-B608-4889-A03A-2A7378041D33} {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {DA795A0D-1E89-465D-96E2-1AEC329E728E} = {DA795A0D-1E89-465D-96E2-1AEC329E728E} {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C} = {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C} {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} = {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} = {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMuleGUI", "aMuleGUI\aMuleGUI.vcproj", "{9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}" ProjectSection(ProjectDependencies) = postProject {884329BD-14AD-4397-8834-4A079C07535A} = {884329BD-14AD-4397-8834-4A079C07535A} {DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE} = {DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE} {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {CD15DE1F-CF9E-480D-A6E2-DE766CAB404E} = {CD15DE1F-CF9E-480D-A6E2-DE766CAB404E} {16C7A051-9097-41A5-BA26-FEC1EA1F16EF} = {16C7A051-9097-41A5-BA26-FEC1EA1F16EF} {A7E8610D-C16C-4E9F-81D7-05508FA68C2F} = {A7E8610D-C16C-4E9F-81D7-05508FA68C2F} {3089B813-6093-42BD-B85E-3BD7CDADD9A0} = {3089B813-6093-42BD-B85E-3BD7CDADD9A0} {CB546C7C-30F5-41D9-B9D8-9E4159A972C8} = {CB546C7C-30F5-41D9-B9D8-9E4159A972C8} {DA795A0D-1E89-465D-96E2-1AEC329E728E} = {DA795A0D-1E89-465D-96E2-1AEC329E728E} {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C} = {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C} {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} = {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} {51F225E6-8757-48E6-8119-44A8A992FE18} = {51F225E6-8757-48E6-8119-44A8A992FE18} {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} = {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ed2k", "ed2k\ed2k.vcproj", "{FF560C5D-4369-4DEF-B2EC-6F507D554DB6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.ActiveCfg = Debug|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.Build.0 = Debug|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.ActiveCfg = Release|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.Build.0 = Release|Win32 {A7E8610D-C16C-4E9F-81D7-05508FA68C2F}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {A7E8610D-C16C-4E9F-81D7-05508FA68C2F}.Debug|Win32.Build.0 = Unicode Debug|Win32 {A7E8610D-C16C-4E9F-81D7-05508FA68C2F}.Release|Win32.ActiveCfg = Unicode Release|Win32 {A7E8610D-C16C-4E9F-81D7-05508FA68C2F}.Release|Win32.Build.0 = Unicode Release|Win32 {DA795A0D-1E89-465D-96E2-1AEC329E728E}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {DA795A0D-1E89-465D-96E2-1AEC329E728E}.Debug|Win32.Build.0 = Unicode Debug|Win32 {DA795A0D-1E89-465D-96E2-1AEC329E728E}.Release|Win32.ActiveCfg = Unicode Release|Win32 {DA795A0D-1E89-465D-96E2-1AEC329E728E}.Release|Win32.Build.0 = Unicode Release|Win32 {CB546C7C-30F5-41D9-B9D8-9E4159A972C8}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {CB546C7C-30F5-41D9-B9D8-9E4159A972C8}.Debug|Win32.Build.0 = Unicode Debug|Win32 {CB546C7C-30F5-41D9-B9D8-9E4159A972C8}.Release|Win32.ActiveCfg = Unicode Release|Win32 {CB546C7C-30F5-41D9-B9D8-9E4159A972C8}.Release|Win32.Build.0 = Unicode Release|Win32 {51F225E6-8757-48E6-8119-44A8A992FE18}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {51F225E6-8757-48E6-8119-44A8A992FE18}.Debug|Win32.Build.0 = Unicode Debug|Win32 {51F225E6-8757-48E6-8119-44A8A992FE18}.Release|Win32.ActiveCfg = Unicode Release|Win32 {51F225E6-8757-48E6-8119-44A8A992FE18}.Release|Win32.Build.0 = Unicode Release|Win32 {3089B813-6093-42BD-B85E-3BD7CDADD9A0}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {3089B813-6093-42BD-B85E-3BD7CDADD9A0}.Debug|Win32.Build.0 = Unicode Debug|Win32 {3089B813-6093-42BD-B85E-3BD7CDADD9A0}.Release|Win32.ActiveCfg = Unicode Release|Win32 {3089B813-6093-42BD-B85E-3BD7CDADD9A0}.Release|Win32.Build.0 = Unicode Release|Win32 {83822AAB-07F6-4A23-9E3B-C07B4216F158}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {83822AAB-07F6-4A23-9E3B-C07B4216F158}.Debug|Win32.Build.0 = Unicode Debug|Win32 {83822AAB-07F6-4A23-9E3B-C07B4216F158}.Release|Win32.ActiveCfg = Unicode Release|Win32 {83822AAB-07F6-4A23-9E3B-C07B4216F158}.Release|Win32.Build.0 = Unicode Release|Win32 {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE}.Debug|Win32.Build.0 = Unicode Debug|Win32 {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE}.Release|Win32.ActiveCfg = Unicode Release|Win32 {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE}.Release|Win32.Build.0 = Unicode Release|Win32 {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C}.Debug|Win32.Build.0 = Unicode Debug|Win32 {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C}.Release|Win32.ActiveCfg = Unicode Release|Win32 {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C}.Release|Win32.Build.0 = Unicode Release|Win32 {CD15DE1F-CF9E-480D-A6E2-DE766CAB404E}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {CD15DE1F-CF9E-480D-A6E2-DE766CAB404E}.Debug|Win32.Build.0 = Unicode Debug|Win32 {CD15DE1F-CF9E-480D-A6E2-DE766CAB404E}.Release|Win32.ActiveCfg = Unicode Release|Win32 {CD15DE1F-CF9E-480D-A6E2-DE766CAB404E}.Release|Win32.Build.0 = Unicode Release|Win32 {884329BD-14AD-4397-8834-4A079C07535A}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {884329BD-14AD-4397-8834-4A079C07535A}.Debug|Win32.Build.0 = Unicode Debug|Win32 {884329BD-14AD-4397-8834-4A079C07535A}.Release|Win32.ActiveCfg = Unicode Release|Win32 {884329BD-14AD-4397-8834-4A079C07535A}.Release|Win32.Build.0 = Unicode Release|Win32 {664F45D6-70DD-4B98-B0E2-3AEA40F18EEC}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {664F45D6-70DD-4B98-B0E2-3AEA40F18EEC}.Debug|Win32.Build.0 = Unicode Debug|Win32 {664F45D6-70DD-4B98-B0E2-3AEA40F18EEC}.Release|Win32.ActiveCfg = Unicode Release|Win32 {664F45D6-70DD-4B98-B0E2-3AEA40F18EEC}.Release|Win32.Build.0 = Unicode Release|Win32 {C40BC4E3-26C2-41DA-9696-42FD156DF487}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {C40BC4E3-26C2-41DA-9696-42FD156DF487}.Debug|Win32.Build.0 = Unicode Debug|Win32 {C40BC4E3-26C2-41DA-9696-42FD156DF487}.Release|Win32.ActiveCfg = Unicode Release|Win32 {C40BC4E3-26C2-41DA-9696-42FD156DF487}.Release|Win32.Build.0 = Unicode Release|Win32 {76AE7A3F-F0B7-4289-913B-3923526BF78D}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {76AE7A3F-F0B7-4289-913B-3923526BF78D}.Debug|Win32.Build.0 = Unicode Debug|Win32 {76AE7A3F-F0B7-4289-913B-3923526BF78D}.Release|Win32.ActiveCfg = Unicode Release|Win32 {76AE7A3F-F0B7-4289-913B-3923526BF78D}.Release|Win32.Build.0 = Unicode Release|Win32 {FECE6716-BB92-45A1-BF79-90CFAFD68E58}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {FECE6716-BB92-45A1-BF79-90CFAFD68E58}.Debug|Win32.Build.0 = Unicode Debug|Win32 {FECE6716-BB92-45A1-BF79-90CFAFD68E58}.Release|Win32.ActiveCfg = Unicode Release|Win32 {FECE6716-BB92-45A1-BF79-90CFAFD68E58}.Release|Win32.Build.0 = Unicode Release|Win32 {CDDC3AFD-B608-4889-A03A-2A7378041D33}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {CDDC3AFD-B608-4889-A03A-2A7378041D33}.Debug|Win32.Build.0 = Unicode Debug|Win32 {CDDC3AFD-B608-4889-A03A-2A7378041D33}.Release|Win32.ActiveCfg = Unicode Release|Win32 {CDDC3AFD-B608-4889-A03A-2A7378041D33}.Release|Win32.Build.0 = Unicode Release|Win32 {B2189BF6-0953-4C43-84DD-52125127F707}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {B2189BF6-0953-4C43-84DD-52125127F707}.Debug|Win32.Build.0 = Unicode Debug|Win32 {B2189BF6-0953-4C43-84DD-52125127F707}.Release|Win32.ActiveCfg = Unicode Release|Win32 {B2189BF6-0953-4C43-84DD-52125127F707}.Release|Win32.Build.0 = Unicode Release|Win32 {45E5400D-93BF-4DBC-AA12-87C4F37F07BD}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {45E5400D-93BF-4DBC-AA12-87C4F37F07BD}.Debug|Win32.Build.0 = Unicode Debug|Win32 {45E5400D-93BF-4DBC-AA12-87C4F37F07BD}.Release|Win32.ActiveCfg = Unicode Release|Win32 {45E5400D-93BF-4DBC-AA12-87C4F37F07BD}.Release|Win32.Build.0 = Unicode Release|Win32 {63855B80-FD40-4862-8BB9-13D623FD5D41}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {63855B80-FD40-4862-8BB9-13D623FD5D41}.Debug|Win32.Build.0 = Unicode Debug|Win32 {63855B80-FD40-4862-8BB9-13D623FD5D41}.Release|Win32.ActiveCfg = Unicode Release|Win32 {63855B80-FD40-4862-8BB9-13D623FD5D41}.Release|Win32.Build.0 = Unicode Release|Win32 {6E5AEC08-9F05-461A-87F6-855A1BB4DD21}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {6E5AEC08-9F05-461A-87F6-855A1BB4DD21}.Debug|Win32.Build.0 = Unicode Debug|Win32 {6E5AEC08-9F05-461A-87F6-855A1BB4DD21}.Release|Win32.ActiveCfg = Unicode Release|Win32 {6E5AEC08-9F05-461A-87F6-855A1BB4DD21}.Release|Win32.Build.0 = Unicode Release|Win32 {499FAA01-4407-420D-8928-416AE21FC1C7}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {499FAA01-4407-420D-8928-416AE21FC1C7}.Debug|Win32.Build.0 = Unicode Debug|Win32 {499FAA01-4407-420D-8928-416AE21FC1C7}.Release|Win32.ActiveCfg = Unicode Release|Win32 {499FAA01-4407-420D-8928-416AE21FC1C7}.Release|Win32.Build.0 = Unicode Release|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Debug|Win32.ActiveCfg = Debug|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Debug|Win32.Build.0 = Debug|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Release|Win32.ActiveCfg = Release|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Release|Win32.Build.0 = Release|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Debug|Win32.ActiveCfg = Debug|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Debug|Win32.Build.0 = Debug|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Release|Win32.ActiveCfg = Release|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Release|Win32.Build.0 = Release|Win32 {DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE}.Debug|Win32.ActiveCfg = Debug|Win32 {DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE}.Debug|Win32.Build.0 = Debug|Win32 {DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE}.Release|Win32.ActiveCfg = Release|Win32 {DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE}.Release|Win32.Build.0 = Release|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Debug|Win32.ActiveCfg = Debug|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Debug|Win32.Build.0 = Debug|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Release|Win32.ActiveCfg = Release|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Release|Win32.Build.0 = Release|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Debug|Win32.ActiveCfg = Debug|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Debug|Win32.Build.0 = Debug|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Release|Win32.ActiveCfg = Release|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Release|Win32.Build.0 = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Debug|Win32.ActiveCfg = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Debug|Win32.Build.0 = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Release|Win32.ActiveCfg = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Release|Win32.Build.0 = Release|Win32 {5FE132E5-83CB-4880-B2D9-CA828E008786}.Debug|Win32.ActiveCfg = Debug|Win32 {5FE132E5-83CB-4880-B2D9-CA828E008786}.Debug|Win32.Build.0 = Debug|Win32 {5FE132E5-83CB-4880-B2D9-CA828E008786}.Release|Win32.ActiveCfg = Release|Win32 {5FE132E5-83CB-4880-B2D9-CA828E008786}.Release|Win32.Build.0 = Release|Win32 {C27E39F5-BA92-4245-A537-7B7852508900}.Debug|Win32.ActiveCfg = Debug|Win32 {C27E39F5-BA92-4245-A537-7B7852508900}.Debug|Win32.Build.0 = Debug|Win32 {C27E39F5-BA92-4245-A537-7B7852508900}.Release|Win32.ActiveCfg = Release|Win32 {C27E39F5-BA92-4245-A537-7B7852508900}.Release|Win32.Build.0 = Release|Win32 {269AD4B7-8245-4476-9179-E4659F6E217F}.Debug|Win32.ActiveCfg = Debug|Win32 {269AD4B7-8245-4476-9179-E4659F6E217F}.Release|Win32.ActiveCfg = Release|Win32 {5A024799-C5ED-41CF-BF0C-914A11799234}.Debug|Win32.ActiveCfg = Debug|Win32 {5A024799-C5ED-41CF-BF0C-914A11799234}.Debug|Win32.Build.0 = Debug|Win32 {5A024799-C5ED-41CF-BF0C-914A11799234}.Release|Win32.ActiveCfg = Release|Win32 {5A024799-C5ED-41CF-BF0C-914A11799234}.Release|Win32.Build.0 = Release|Win32 {6B452F4F-43C9-408E-BDF3-C70FCA9F257D}.Debug|Win32.ActiveCfg = Debug|Win32 {6B452F4F-43C9-408E-BDF3-C70FCA9F257D}.Debug|Win32.Build.0 = Debug|Win32 {6B452F4F-43C9-408E-BDF3-C70FCA9F257D}.Release|Win32.ActiveCfg = Release|Win32 {6B452F4F-43C9-408E-BDF3-C70FCA9F257D}.Release|Win32.Build.0 = Release|Win32 {9A19C692-FFBD-467C-B8A8-63166F421940}.Debug|Win32.ActiveCfg = Debug|Win32 {9A19C692-FFBD-467C-B8A8-63166F421940}.Debug|Win32.Build.0 = Debug|Win32 {9A19C692-FFBD-467C-B8A8-63166F421940}.Release|Win32.ActiveCfg = Release|Win32 {9A19C692-FFBD-467C-B8A8-63166F421940}.Release|Win32.Build.0 = Release|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Debug|Win32.ActiveCfg = Debug|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Debug|Win32.Build.0 = Debug|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Release|Win32.ActiveCfg = Release|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Release|Win32.Build.0 = Release|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Debug|Win32.ActiveCfg = Debug|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Debug|Win32.Build.0 = Debug|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Release|Win32.ActiveCfg = Release|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Release|Win32.Build.0 = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Debug|Win32.ActiveCfg = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Debug|Win32.Build.0 = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Release|Win32.ActiveCfg = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {04ECC032-1961-45B0-B0C3-0064A8E3B880} = {138CD730-94FC-41BA-92BB-E88E1DF41CC3} {3423EC9A-52E4-4A4D-9753-EDEBC38785EF} = {138CD730-94FC-41BA-92BB-E88E1DF41CC3} {A7E8610D-C16C-4E9F-81D7-05508FA68C2F} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {DA795A0D-1E89-465D-96E2-1AEC329E728E} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {CB546C7C-30F5-41D9-B9D8-9E4159A972C8} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {51F225E6-8757-48E6-8119-44A8A992FE18} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {3089B813-6093-42BD-B85E-3BD7CDADD9A0} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {83822AAB-07F6-4A23-9E3B-C07B4216F158} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {8C6176E5-C842-41AD-AB9F-A70A3FE39BCE} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {DC45CA46-4AA0-4A5B-BFEE-FCFDA38B7D3C} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {CD15DE1F-CF9E-480D-A6E2-DE766CAB404E} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {884329BD-14AD-4397-8834-4A079C07535A} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {664F45D6-70DD-4B98-B0E2-3AEA40F18EEC} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {C40BC4E3-26C2-41DA-9696-42FD156DF487} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {76AE7A3F-F0B7-4289-913B-3923526BF78D} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {FECE6716-BB92-45A1-BF79-90CFAFD68E58} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {CDDC3AFD-B608-4889-A03A-2A7378041D33} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {B2189BF6-0953-4C43-84DD-52125127F707} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {45E5400D-93BF-4DBC-AA12-87C4F37F07BD} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {63855B80-FD40-4862-8BB9-13D623FD5D41} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {6E5AEC08-9F05-461A-87F6-855A1BB4DD21} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {499FAA01-4407-420D-8928-416AE21FC1C7} = {04ECC032-1961-45B0-B0C3-0064A8E3B880} {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} = {29E96B92-653C-431E-BE45-756B048E5A11} {293E6133-239A-4ED4-838E-9182B07C6B35} = {29E96B92-653C-431E-BE45-756B048E5A11} {DBADF72E-2572-403F-B0D6-AC8C9B3ECCFE} = {29E96B92-653C-431E-BE45-756B048E5A11} {16C7A051-9097-41A5-BA26-FEC1EA1F16EF} = {29E96B92-653C-431E-BE45-756B048E5A11} {D176CBB0-E9BB-4827-8A37-2F05423EC07F} = {CB2CC2C4-0882-434D-8B96-4984740BCC23} {91C69AB8-8B41-4320-99F8-CB97A5258E2D} = {CB2CC2C4-0882-434D-8B96-4984740BCC23} {9AC4A7BC-3E72-4C97-81FF-D8708331CC54} = {CB2CC2C4-0882-434D-8B96-4984740BCC23} {BD53B16D-3577-4245-A420-070A890D35AB} = {CB2CC2C4-0882-434D-8B96-4984740BCC23} {B601F0F8-B6DC-4DF5-B4CD-2E1807E0E68D} = {CB2CC2C4-0882-434D-8B96-4984740BCC23} {5FCAFC30-922E-446F-8DF5-D71819ABC2FE} = {91C69AB8-8B41-4320-99F8-CB97A5258E2D} {FF560C5D-4369-4DEF-B2EC-6F507D554DB5} = {9AC4A7BC-3E72-4C97-81FF-D8708331CC54} {FF560C5D-4369-4DEF-B2EC-6F507D554DB6} = {9AC4A7BC-3E72-4C97-81FF-D8708331CC54} {02262EFC-86BC-45B1-8401-A26BB365E717} = {660C24AD-2ABA-406B-B56A-BF9AE52AD432} {5FE132E5-83CB-4880-B2D9-CA828E008786} = {660C24AD-2ABA-406B-B56A-BF9AE52AD432} {C27E39F5-BA92-4245-A537-7B7852508900} = {02262EFC-86BC-45B1-8401-A26BB365E717} {269AD4B7-8245-4476-9179-E4659F6E217F} = {02262EFC-86BC-45B1-8401-A26BB365E717} {5A024799-C5ED-41CF-BF0C-914A11799234} = {02262EFC-86BC-45B1-8401-A26BB365E717} {6B452F4F-43C9-408E-BDF3-C70FCA9F257D} = {02262EFC-86BC-45B1-8401-A26BB365E717} {9A19C692-FFBD-467C-B8A8-63166F421940} = {02262EFC-86BC-45B1-8401-A26BB365E717} {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA} = {BD53B16D-3577-4245-A420-070A890D35AB} {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7} = {BD53B16D-3577-4245-A420-070A890D35AB} EndGlobalSection EndGlobal amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMuleCMD/0000755000175000017500000000000012053222136023415 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMuleCMD/aMuleCMD.vcproj0000644000175000017500000002533512012204604026234 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/README - MSVC.txt0000644000175000017500000000742411772155611024413 0ustar l3onl3onHow to build aMule with Visual Studio See also http://www.amule.org/wiki/index.php/HowTo_compile_with_Visual_Studio This solution for Microsoft's Visual Studio 2008 has been configured to be as easy as possible to set up. However, given the size of the aMule project and the libraries it uses, along with limitations in the way Visual Studio works, a couple of items must be setup separately. Additionally, some source code files might need patching due to incompatibilities with some generated files. The solution expects to find the following items: * wxWidgets ( http://www.wxwidgets.org ) at a specific location: ..\..\wxWidgets\ from the solution directory. * crypto++ ( http://www.cryptopp.com/ ) at a specific location: ..\..\cryptopp\ from the solution directory. This means you must create a folder where you will compile aMule, and it must have this structure: - - Your main folder. You can name it whatever you want. | | - wxWidgets ( wxWidgets sources, no intermediate subfolder ) | | - wxWidgets29 ( wxWidgets 2.9 sources, only required if you want to build against unstable wx 2.9 ) | | - cryptopp ( Crypto++ sources, no intermediate subfolder ) | | - ( aMule sources, no intermediate subfolder, can have any name ) I hope this is simple enough to get you started. If wxWidgets fails to compile, please read http://wiki.wxwidgets.org/Microsoft_Visual_CPP_Guide There is sometimes a problem with the cryptopp project in the release and debug build, if some projects fail to link and give you a warning about redefined symbols, go to the properties on the cryptopp project, configuration "release" and change the "Configuration Properties"->"C/C++"->"Code generation"->"Runtime library" to "Multithreaded DLL (/MD)" in the release build or "Multithreaded Debug DLL (/MDd)" for the debug build. There are four solutions: 1) aMule-MSVCE.sln which includes aMule, aMule tools and aMule's internal libs 2) aMule-MSVCE-ExtLibs.sln includes only wxWidgets and Crypto++ and builds a single library libext.lib from them. You must first build this solution before building aMule-MSVCE.sln 3) aMule-MSVCE-ExtLibs29.sln same but using wxWidgets 2.9 4) aMule-MSVC.sln includes everything and is organized in folders. It only works with the commercial edition of MSVC and is outdated now. The Debug/Release configs build against wxWidgets 2.8 (stable), Debug29/Release29 configs build against wxWidgets 2.9 (unstable) To build aMule with GeoIP see libs\libGeoIP\readme.txt . Without it you get an error building libGeoIP when you build the full solution. Just ignore it or unload the libGeoIP project. If aMule fails to compile, here are some guidelines/patches to the most common problems: [*] If Scanner.cpp fails to compile, apply this change around line 1545: - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + b->yy_is_interactive = 0; if necessary. [*] The file muuli_wdr.cpp can also fail if it hasn't been patched for MSVC in the current code. The most common problem comes from this kind of lines: _("For a film you can say its length, its story, language ...\n" "and if it's a fake, you can tell that to other users of aMule."), Notice the opening and closing parentheses are on a different line, and the quotes opened again. While this is ok for gcc, Visual Studio won't allow it. Change this lines to be a single-line quoted text. In the above example, the result will be: _("For a film you can say its length, its story, language ...\nand if it's a fake, you can tell that to other users of aMule."), And that should be it. Feel free to ask in the aMule forum at forum.amule.org, "Compilation problems" section if you have further doubts. amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/0000755000175000017500000000000012053222137023771 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/FileDataIO/0000755000175000017500000000000012053222137025672 5ustar l3onl3on././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/FileDataIO/FileDataIO.vcprojamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/FileDataIO/FileDataIO.vcpro0000644000175000017500000001231611772155611030662 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/RangeMap/0000755000175000017500000000000012053222137025463 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/RangeMap/RangeMap.vcproj0000644000175000017500000001154611772155611030422 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/FormatTest/0000755000175000017500000000000012053222137026061 5ustar l3onl3on././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/FormatTest/FormatTest.vcprojamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/FormatTest/FormatTest.vcpro0000644000175000017500000001154411772155611031242 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/StringFunctions/0000755000175000017500000000000012053222137027130 5ustar l3onl3on././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/StringFunctions/StringFunctions.vcprojamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/StringFunctions/StringFunct0000644000175000017500000001157311772155611031341 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/libmuleunittest/0000755000175000017500000000000012053222137027222 5ustar l3onl3on././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/libmuleunittest/libmuleunittest.vcprojamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/libmuleunittest/libmuleunit0000644000175000017500000001052611772155611031513 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/NetworkFunctions/0000755000175000017500000000000012053222137027313 5ustar l3onl3on././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/NetworkFunctions/NetworkFunctions.vcprojamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/UnitTests/NetworkFunctions/NetworkFun0000644000175000017500000001172711772155611031361 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/ed2k/0000755000175000017500000000000012053222136022653 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/ed2k/ed2k.vcproj0000644000175000017500000001242612012204604024725 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMule-MSVCE-ExtLibs29.sln0000644000175000017500000002701711772155611026226 0ustar l3onl3onMicrosoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "buildlibext", "libs\libext\buildlibext.vcproj", "{F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}" ProjectSection(ProjectDependencies) = postProject {7FB0902D-8579-5DCE-B883-DAF66A885005} = {7FB0902D-8579-5DCE-B883-DAF66A885005} {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00} = {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00} {8B867186-A0B5-5479-B824-E176EDD27C40} = {8B867186-A0B5-5479-B824-E176EDD27C40} {8BD8F8D9-4275-5B42-A8F4-F1DB2970A550} = {8BD8F8D9-4275-5B42-A8F4-F1DB2970A550} {E21129E0-7C08-5936-9D8C-0D60B5319BA7} = {E21129E0-7C08-5936-9D8C-0D60B5319BA7} {8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0} = {8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0} {3FCC50C2-81E9-5DB2-B8D8-2129427568B1} = {3FCC50C2-81E9-5DB2-B8D8-2129427568B1} {09F2F96A-1CC6-5E43-AF1D-956EC2A4888D} = {09F2F96A-1CC6-5E43-AF1D-956EC2A4888D} {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6} = {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6} {33CC42F9-7756-5587-863C-8D4461B7C5DD} = {33CC42F9-7756-5587-863C-8D4461B7C5DD} {3423EC9A-52E4-4A4D-9753-EDEBC38785EF} = {3423EC9A-52E4-4A4D-9753-EDEBC38785EF} {56A4B526-BB81-5D01-AAA9-16D23BBB169D} = {56A4B526-BB81-5D01-AAA9-16D23BBB169D} {75596CE6-5AE7-55C9-B890-C07B0A657A83} = {75596CE6-5AE7-55C9-B890-C07B0A657A83} {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75} = {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75} {24C45343-FD20-5C92-81C1-35A2AE841E79} = {24C45343-FD20-5C92-81C1-35A2AE841E79} {A1A8355B-0988-528E-9CC2-B971D6266669} = {A1A8355B-0988-528E-9CC2-B971D6266669} {DA8B15EF-6750-5928-BC0E-C748213CF9B2} = {DA8B15EF-6750-5928-BC0E-C748213CF9B2} {6053CC38-CDEE-584C-8BC8-4B000D800FC7} = {6053CC38-CDEE-584C-8BC8-4B000D800FC7} {A16D3832-0F42-57CE-8F48-50E06649ADE8} = {A16D3832-0F42-57CE-8F48-50E06649ADE8} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cryptlib", "..\..\..\..\cryptopp\cryptlib.vcproj", "{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxregex", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxregex.vcproj", "{56A4B526-BB81-5D01-AAA9-16D23BBB169D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxzlib", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxzlib.vcproj", "{8B867186-A0B5-5479-B824-E176EDD27C40}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxpng", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxpng.vcproj", "{8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxjpeg", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxjpeg.vcproj", "{6053CC38-CDEE-584C-8BC8-4B000D800FC7}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxtiff", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxtiff.vcproj", "{75596CE6-5AE7-55C9-B890-C07B0A657A83}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxexpat", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxexpat.vcproj", "{A1A8355B-0988-528E-9CC2-B971D6266669}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_base.vcproj", "{3FCC50C2-81E9-5DB2-B8D8-2129427568B1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_net.vcproj", "{69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_core.vcproj", "{6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adv", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_adv.vcproj", "{24C45343-FD20-5C92-81C1-35A2AE841E79}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "media", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_media.vcproj", "{8BD8F8D9-4275-5B42-A8F4-F1DB2970A550}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "html", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_html.vcproj", "{33CC42F9-7756-5587-863C-8D4461B7C5DD}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qa", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_qa.vcproj", "{E21129E0-7C08-5936-9D8C-0D60B5319BA7}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_xml.vcproj", "{3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrc", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_xrc.vcproj", "{09F2F96A-1CC6-5E43-AF1D-956EC2A4888D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_aui.vcproj", "{A16D3832-0F42-57CE-8F48-50E06649ADE8}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_richtext.vcproj", "{7FB0902D-8579-5DCE-B883-DAF66A885005}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gl", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_gl.vcproj", "{DA8B15EF-6750-5928-BC0E-C748213CF9B2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug|Win32.ActiveCfg = Debug29|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug|Win32.Build.0 = Debug29|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release|Win32.ActiveCfg = Release29|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release|Win32.Build.0 = Release29|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.ActiveCfg = Debug|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.Build.0 = Debug|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.ActiveCfg = Release|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.Build.0 = Release|Win32 {56A4B526-BB81-5D01-AAA9-16D23BBB169D}.Debug|Win32.ActiveCfg = Debug|Win32 {56A4B526-BB81-5D01-AAA9-16D23BBB169D}.Debug|Win32.Build.0 = Debug|Win32 {56A4B526-BB81-5D01-AAA9-16D23BBB169D}.Release|Win32.ActiveCfg = Release|Win32 {56A4B526-BB81-5D01-AAA9-16D23BBB169D}.Release|Win32.Build.0 = Release|Win32 {8B867186-A0B5-5479-B824-E176EDD27C40}.Debug|Win32.ActiveCfg = Debug|Win32 {8B867186-A0B5-5479-B824-E176EDD27C40}.Debug|Win32.Build.0 = Debug|Win32 {8B867186-A0B5-5479-B824-E176EDD27C40}.Release|Win32.ActiveCfg = Release|Win32 {8B867186-A0B5-5479-B824-E176EDD27C40}.Release|Win32.Build.0 = Release|Win32 {8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0}.Debug|Win32.ActiveCfg = Debug|Win32 {8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0}.Debug|Win32.Build.0 = Debug|Win32 {8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0}.Release|Win32.ActiveCfg = Release|Win32 {8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0}.Release|Win32.Build.0 = Release|Win32 {6053CC38-CDEE-584C-8BC8-4B000D800FC7}.Debug|Win32.ActiveCfg = Debug|Win32 {6053CC38-CDEE-584C-8BC8-4B000D800FC7}.Debug|Win32.Build.0 = Debug|Win32 {6053CC38-CDEE-584C-8BC8-4B000D800FC7}.Release|Win32.ActiveCfg = Release|Win32 {6053CC38-CDEE-584C-8BC8-4B000D800FC7}.Release|Win32.Build.0 = Release|Win32 {75596CE6-5AE7-55C9-B890-C07B0A657A83}.Debug|Win32.ActiveCfg = Debug|Win32 {75596CE6-5AE7-55C9-B890-C07B0A657A83}.Debug|Win32.Build.0 = Debug|Win32 {75596CE6-5AE7-55C9-B890-C07B0A657A83}.Release|Win32.ActiveCfg = Release|Win32 {75596CE6-5AE7-55C9-B890-C07B0A657A83}.Release|Win32.Build.0 = Release|Win32 {A1A8355B-0988-528E-9CC2-B971D6266669}.Debug|Win32.ActiveCfg = Debug|Win32 {A1A8355B-0988-528E-9CC2-B971D6266669}.Debug|Win32.Build.0 = Debug|Win32 {A1A8355B-0988-528E-9CC2-B971D6266669}.Release|Win32.ActiveCfg = Release|Win32 {A1A8355B-0988-528E-9CC2-B971D6266669}.Release|Win32.Build.0 = Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.ActiveCfg = Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.Build.0 = Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.ActiveCfg = Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.Build.0 = Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.ActiveCfg = Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.Build.0 = Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.ActiveCfg = Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.Build.0 = Release|Win32 {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|Win32.ActiveCfg = Debug|Win32 {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|Win32.Build.0 = Debug|Win32 {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|Win32.ActiveCfg = Release|Win32 {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|Win32.Build.0 = Release|Win32 {24C45343-FD20-5C92-81C1-35A2AE841E79}.Debug|Win32.ActiveCfg = Debug|Win32 {24C45343-FD20-5C92-81C1-35A2AE841E79}.Debug|Win32.Build.0 = Debug|Win32 {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release|Win32.ActiveCfg = Release|Win32 {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release|Win32.Build.0 = Release|Win32 {8BD8F8D9-4275-5B42-A8F4-F1DB2970A550}.Debug|Win32.ActiveCfg = Debug|Win32 {8BD8F8D9-4275-5B42-A8F4-F1DB2970A550}.Debug|Win32.Build.0 = Debug|Win32 {8BD8F8D9-4275-5B42-A8F4-F1DB2970A550}.Release|Win32.ActiveCfg = Release|Win32 {8BD8F8D9-4275-5B42-A8F4-F1DB2970A550}.Release|Win32.Build.0 = Release|Win32 {33CC42F9-7756-5587-863C-8D4461B7C5DD}.Debug|Win32.ActiveCfg = Debug|Win32 {33CC42F9-7756-5587-863C-8D4461B7C5DD}.Debug|Win32.Build.0 = Debug|Win32 {33CC42F9-7756-5587-863C-8D4461B7C5DD}.Release|Win32.ActiveCfg = Release|Win32 {33CC42F9-7756-5587-863C-8D4461B7C5DD}.Release|Win32.Build.0 = Release|Win32 {E21129E0-7C08-5936-9D8C-0D60B5319BA7}.Debug|Win32.ActiveCfg = Debug|Win32 {E21129E0-7C08-5936-9D8C-0D60B5319BA7}.Debug|Win32.Build.0 = Debug|Win32 {E21129E0-7C08-5936-9D8C-0D60B5319BA7}.Release|Win32.ActiveCfg = Release|Win32 {E21129E0-7C08-5936-9D8C-0D60B5319BA7}.Release|Win32.Build.0 = Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.ActiveCfg = Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.Build.0 = Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.ActiveCfg = Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.Build.0 = Release|Win32 {09F2F96A-1CC6-5E43-AF1D-956EC2A4888D}.Debug|Win32.ActiveCfg = Debug|Win32 {09F2F96A-1CC6-5E43-AF1D-956EC2A4888D}.Debug|Win32.Build.0 = Debug|Win32 {09F2F96A-1CC6-5E43-AF1D-956EC2A4888D}.Release|Win32.ActiveCfg = Release|Win32 {09F2F96A-1CC6-5E43-AF1D-956EC2A4888D}.Release|Win32.Build.0 = Release|Win32 {A16D3832-0F42-57CE-8F48-50E06649ADE8}.Debug|Win32.ActiveCfg = Debug|Win32 {A16D3832-0F42-57CE-8F48-50E06649ADE8}.Debug|Win32.Build.0 = Debug|Win32 {A16D3832-0F42-57CE-8F48-50E06649ADE8}.Release|Win32.ActiveCfg = Release|Win32 {A16D3832-0F42-57CE-8F48-50E06649ADE8}.Release|Win32.Build.0 = Release|Win32 {7FB0902D-8579-5DCE-B883-DAF66A885005}.Debug|Win32.ActiveCfg = Debug|Win32 {7FB0902D-8579-5DCE-B883-DAF66A885005}.Debug|Win32.Build.0 = Debug|Win32 {7FB0902D-8579-5DCE-B883-DAF66A885005}.Release|Win32.ActiveCfg = Release|Win32 {7FB0902D-8579-5DCE-B883-DAF66A885005}.Release|Win32.Build.0 = Release|Win32 {DA8B15EF-6750-5928-BC0E-C748213CF9B2}.Debug|Win32.ActiveCfg = Debug|Win32 {DA8B15EF-6750-5928-BC0E-C748213CF9B2}.Debug|Win32.Build.0 = Debug|Win32 {DA8B15EF-6750-5928-BC0E-C748213CF9B2}.Release|Win32.ActiveCfg = Release|Win32 {DA8B15EF-6750-5928-BC0E-C748213CF9B2}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMuleD/0000755000175000017500000000000012053222137023176 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMuleD/aMuleD.vcproj0000644000175000017500000005056412012204604025576 0ustar l3onl3on amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC9/aMule-MSVCE.sln0000644000175000017500000003643611772155611024510 0ustar l3onl3onMicrosoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMule", "aMule\aMule.vcproj", "{5FCAFC30-922E-446F-8DF5-D71819ABC2FE}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {16C7A051-9097-41A5-BA26-FEC1EA1F16EF} = {16C7A051-9097-41A5-BA26-FEC1EA1F16EF} {8CA0F896-7689-4CE0-9D16-99C9C83847E1} = {8CA0F896-7689-4CE0-9D16-99C9C83847E1} {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} = {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} = {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmuleec", "libs\libmuleec\libmuleec.vcproj", "{5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmulecommon", "libs\libmulecommon\libmulecommon.vcproj", "{293E6133-239A-4ED4-838E-9182B07C6B35}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmuleexternalwxlistctrl", "libs\libmuleexternalwxlistctrl\libmuleexternalwxlistctrl.vcproj", "{16C7A051-9097-41A5-BA26-FEC1EA1F16EF}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aLinkCreator", "aLinkCreator\aLinkCreator.vcproj", "{FF560C5D-4369-4DEF-B2EC-6F507D554DB5}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} = {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMuleCMD", "aMuleCMD\aMuleCMD.vcproj", "{EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} = {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} = {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMuleGUI", "aMuleGUI\aMuleGUI.vcproj", "{9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {16C7A051-9097-41A5-BA26-FEC1EA1F16EF} = {16C7A051-9097-41A5-BA26-FEC1EA1F16EF} {8CA0F896-7689-4CE0-9D16-99C9C83847E1} = {8CA0F896-7689-4CE0-9D16-99C9C83847E1} {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} = {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} = {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ed2k", "ed2k\ed2k.vcproj", "{FF560C5D-4369-4DEF-B2EC-6F507D554DB6}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libext", "libs\libext\libext.vcproj", "{F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fileview", "fileview\fileview.vcproj", "{02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} = {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libGeoIP", "libs\libGeoIP\libGeoIP.vcproj", "{8CA0F896-7689-4CE0-9D16-99C9C83847E1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMuleD", "aMuleD\aMuleD.vcproj", "{10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} = {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} = {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMuleWeb", "aMuleWeb\aMuleWeb.vcproj", "{EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} = {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} = {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCas", "wxCas\wxCas.vcproj", "{5FCAFC30-922E-446F-8DF5-D71819AB6356}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} = {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "alcc", "aLinkCreator\alcc.vcproj", "{FF560C5D-4369-4DEF-B2EC-6F507D994DB6}" ProjectSection(ProjectDependencies) = postProject {293E6133-239A-4ED4-838E-9182B07C6B35} = {293E6133-239A-4ED4-838E-9182B07C6B35} {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} = {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug29|Win32 = Debug29|Win32 Release|Win32 = Release|Win32 Release29|Win32 = Release29|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Debug|Win32.ActiveCfg = Debug|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Debug|Win32.Build.0 = Debug|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Debug29|Win32.ActiveCfg = Debug29|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Debug29|Win32.Build.0 = Debug29|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Release|Win32.ActiveCfg = Release|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Release|Win32.Build.0 = Release|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Release29|Win32.ActiveCfg = Release29|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Release29|Win32.Build.0 = Release29|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Debug|Win32.ActiveCfg = Debug|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Debug|Win32.Build.0 = Debug|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Debug29|Win32.ActiveCfg = Debug29|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Debug29|Win32.Build.0 = Debug29|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Release|Win32.ActiveCfg = Release|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Release|Win32.Build.0 = Release|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Release29|Win32.ActiveCfg = Release29|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Release29|Win32.Build.0 = Release29|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Debug|Win32.ActiveCfg = Debug|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Debug|Win32.Build.0 = Debug|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Debug29|Win32.ActiveCfg = Debug29|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Debug29|Win32.Build.0 = Debug29|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Release|Win32.ActiveCfg = Release|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Release|Win32.Build.0 = Release|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Release29|Win32.ActiveCfg = Release29|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Release29|Win32.Build.0 = Release29|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Debug|Win32.ActiveCfg = Debug|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Debug|Win32.Build.0 = Debug|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Debug29|Win32.ActiveCfg = Debug29|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Debug29|Win32.Build.0 = Debug29|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Release|Win32.ActiveCfg = Release|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Release|Win32.Build.0 = Release|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Release29|Win32.ActiveCfg = Release29|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Release29|Win32.Build.0 = Release29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Debug|Win32.ActiveCfg = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Debug|Win32.Build.0 = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Debug29|Win32.ActiveCfg = Debug29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Debug29|Win32.Build.0 = Debug29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Release|Win32.ActiveCfg = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Release|Win32.Build.0 = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Release29|Win32.ActiveCfg = Release29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Release29|Win32.Build.0 = Release29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Debug|Win32.ActiveCfg = Debug|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Debug|Win32.Build.0 = Debug|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Debug29|Win32.ActiveCfg = Debug29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Debug29|Win32.Build.0 = Debug29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Release|Win32.ActiveCfg = Release|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Release|Win32.Build.0 = Release|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Release29|Win32.ActiveCfg = Release29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Release29|Win32.Build.0 = Release29|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Debug|Win32.ActiveCfg = Debug|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Debug|Win32.Build.0 = Debug|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Debug29|Win32.ActiveCfg = Debug29|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Debug29|Win32.Build.0 = Debug29|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Release|Win32.ActiveCfg = Release|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Release|Win32.Build.0 = Release|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Release29|Win32.ActiveCfg = Release29|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Release29|Win32.Build.0 = Release29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Debug|Win32.ActiveCfg = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Debug|Win32.Build.0 = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Debug29|Win32.ActiveCfg = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Debug29|Win32.Build.0 = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Release|Win32.ActiveCfg = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Release|Win32.Build.0 = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Release29|Win32.ActiveCfg = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Release29|Win32.Build.0 = Release|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug|Win32.ActiveCfg = Debug|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug|Win32.Build.0 = Debug|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug29|Win32.ActiveCfg = Debug29|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug29|Win32.Build.0 = Debug29|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release|Win32.ActiveCfg = Release|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release|Win32.Build.0 = Release|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release29|Win32.ActiveCfg = Release29|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release29|Win32.Build.0 = Release29|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Debug|Win32.ActiveCfg = Debug|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Debug|Win32.Build.0 = Debug|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Debug29|Win32.ActiveCfg = Debug29|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Debug29|Win32.Build.0 = Debug29|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Release|Win32.ActiveCfg = Release|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Release|Win32.Build.0 = Release|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Release29|Win32.ActiveCfg = Release29|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Release29|Win32.Build.0 = Release29|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Debug|Win32.ActiveCfg = Debug|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Debug|Win32.Build.0 = Debug|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Debug29|Win32.ActiveCfg = Debug|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Debug29|Win32.Build.0 = Debug|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Release|Win32.ActiveCfg = Release|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Release|Win32.Build.0 = Release|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Release29|Win32.ActiveCfg = Release|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Release29|Win32.Build.0 = Release|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Debug|Win32.ActiveCfg = Debug|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Debug|Win32.Build.0 = Debug|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Debug29|Win32.ActiveCfg = Debug29|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Debug29|Win32.Build.0 = Debug29|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Release|Win32.ActiveCfg = Release|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Release|Win32.Build.0 = Release|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Release29|Win32.ActiveCfg = Release29|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Release29|Win32.Build.0 = Release29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Debug|Win32.ActiveCfg = Debug|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Debug|Win32.Build.0 = Debug|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Debug29|Win32.ActiveCfg = Debug29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Debug29|Win32.Build.0 = Debug29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Release|Win32.ActiveCfg = Release|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Release|Win32.Build.0 = Release|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Release29|Win32.ActiveCfg = Release29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Release29|Win32.Build.0 = Release29|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Debug|Win32.ActiveCfg = Debug|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Debug|Win32.Build.0 = Debug|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Debug29|Win32.ActiveCfg = Debug29|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Debug29|Win32.Build.0 = Debug29|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Release|Win32.ActiveCfg = Release|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Release|Win32.Build.0 = Release|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Release29|Win32.ActiveCfg = Release29|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Release29|Win32.Build.0 = Release29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Debug|Win32.ActiveCfg = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Debug|Win32.Build.0 = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Debug29|Win32.ActiveCfg = Debug29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Debug29|Win32.Build.0 = Debug29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Release|Win32.ActiveCfg = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Release|Win32.Build.0 = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Release29|Win32.ActiveCfg = Release29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Release29|Win32.Build.0 = Release29|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/0000755000175000017500000000000012053222140022071 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/fixwxGUIDs.pl0000644000175000017500000000263411772155611024453 0ustar l3onl3on#!perl # # This script is only useful if your source is in a SVN working copy! # # Problem: whenever you add a new wxWidgets version and convert the VC6 projects, # they are converted to VC8 XML .vcproj . In the process, a new project GUID is created. # When you then open your solution, all GUIDs are updated. # # To avoid this: # 1) Open and close wx.dsw with VS9 to convert to wx.sln (VS10 can't open them) # 2) Open and close wx.sln, creating the .vcxproj # 3) Run this script. It will replace the new GUIDs in the wx vcxproj by the old ones from the aMule-MSVC10E-ExtLibs.sln . # 4) Now load aMule-MSVCE-ExtLibs.sln. It won't be changed anymore. # use strict; open(sln, 'aMule-MSVC10E-ExtLibs.sln') or die $!; #Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxregex", "..\..\..\..\wxWidgets\build\msw\wx_wxregex.vcxproj", "{A960D0AD-C20E-4FD6-B477-6509232C7D94}" # {B499DD81-BCA2-42D8-986C-E0FBAAC25B13} while () { if (/^Project.*, \"(.+)\", \"(.+)\"/) { my ($path, $guid) = ($1, $2); next unless $path =~ /\\wxWidgets/; $path =~ s-\\-/-g; print "fix $path\n"; open(prj, $path) or die "$path $!"; my @content = ; close prj; foreach (@content) { if (//) { $_ = " $guid\n"; print $_; last; } } open(prj, ">$path") or die; print prj @content; close prj; } } amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/PCH.h0000644000175000017500000000462511772155611022702 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Stu Redman ( sturedman@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef PCH_H #define PCH_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "CryptoPP_Inc.h" #include "amule.h" #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include "ClientCreditsList.h" #include "ClientList.h" #include "ClientRef.h" #include "ClientUDPSocket.h" #include "ExternalConn.h" #include "InternalEvents.h" #include "KnownFileList.h" #include "ListenSocket.h" #include "Logger.h" #include "MD4Hash.h" #include "OtherFunctions.h" #include "PartFile.h" #include "Preferences.h" #include "ScopedPtr.h" #include "Server.h" #include "Statistics.h" #include "ThreadTasks.h" #include "UserEvents.h" #ifndef CLIENT_GUI #include "kademlia/kademlia/Kademlia.h" #include "kademlia/kademlia/Prefs.h" #include "IPFilter.h" #endif #ifndef AMULE_DAEMON #include "amuleDlg.h" #include "muuli_wdr.h" #endif #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleGUI/0000755000175000017500000000000012053222140023501 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleGUI/aMuleGUI.vcxproj.filters0000644000175000017500000005241712012015471030210 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {26a80d8b-0652-4504-9031-910968275e24} Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Resource Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleGUI/aMuleGUI.vcxproj0000644000175000017500000006415512012204604026541 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7} aMuleGUI Win32Proj Application Unicode true Application Unicode Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false /MP /Zm120 %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;CLIENT_GUI;ENABLE_NLS;ENABLE_IP2COUNTRY;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Remote GUI\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows false MachineX86 /MP /Zm120 %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;CLIENT_GUI;ENABLE_NLS;ENABLE_IP2COUNTRY;%(PreprocessorDefinitions) MultiThreaded Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Remote GUI\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows true true false MachineX86 /MP /Zm120 %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;CLIENT_GUI;ENABLE_NLS;ENABLE_IP2COUNTRY;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Remote GUI\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows false MachineX86 /MP /Zm120 %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;ENABLE_IP2COUNTRY;HAVE_CONFIG_H;CLIENT_GUI;ENABLE_NLS;%(PreprocessorDefinitions) MultiThreadedDLL Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Remote GUI\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;$(OutDir)libext.lib;%(AdditionalDependencies) false Windows true true false MachineX86 Create Create Create Create {8ca0f896-7689-4ce0-9d16-99c9c83847e1} false {293e6133-239a-4ed4-838e-9182b07c6b35} false {5a9ec6a5-68a3-43c8-960e-f7f03b16f1d1} false {16c7a051-9097-41a5-ba26-fec1ea1f16ef} false amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/0000755000175000017500000000000012053222137023030 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmulecommon/0000755000175000017500000000000012053222137025672 5ustar l3onl3on././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmulecommon/libmulecommon.vcxprojamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmulecommon/libmulecommon.vcx0000644000175000017500000002635712012015471031267 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {293E6133-239A-4ED4-838E-9182B07C6B35} libmulecommon Win32Proj StaticLibrary Unicode true StaticLibrary Unicode StaticLibrary Unicode true StaticLibrary Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\..\;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\..\;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) _LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\..\;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\..\;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) _LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase Create config.h cd "$(SolutionDir)..\..\.." "$(SolutionDir)makeconfig.cmd" $(SolutionDir)..\..\..\config.h;%(Outputs) Create config.h cd "$(SolutionDir)..\..\.." "$(SolutionDir)makeconfig.cmd" $(SolutionDir)..\..\..\config.h;%(Outputs) Create config.h cd "$(SolutionDir)..\..\.." "$(SolutionDir)makeconfig.cmd" $(SolutionDir)..\..\..\config.h;%(Outputs) Create config.h cd "$(SolutionDir)..\..\.." "$(SolutionDir)makeconfig.cmd" $(SolutionDir)..\..\..\config.h;%(Outputs) ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmulecommon/libmulecommon.vcxproj.filtersamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmulecommon/libmulecommon.vcx0000644000175000017500000000576311772155611031302 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmuleexternalwxlistctrl/0000755000175000017500000000000012053222137030364 5ustar l3onl3on././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmuleexternalwxlistctrl/libmuleexternalwxlistctrl.vcxproj.filtersamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmuleexternalwxlistctrl/libmu0000644000175000017500000000216412012015471031416 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmuleexternalwxlistctrl/libmuleexternalwxlistctrl.vcxprojamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmuleexternalwxlistctrl/libmu0000644000175000017500000002051212012015471031413 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF} libmuleexternalwxlistctrl Win32Proj StaticLibrary Unicode true StaticLibrary Unicode StaticLibrary Unicode true StaticLibrary Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\..\;%(AdditionalIncludeDirectories) _LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\..\;%(AdditionalIncludeDirectories) _LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libGeoIP/0000755000175000017500000000000012053222137024462 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libGeoIP/readme.txt0000644000175000017500000000106011772155611026466 0ustar l3onl3onHow to build aMule with GeoIP support The MaxMind GeoIP library can detect the country an IP adress comes from. aMule uses this information to display a little country flag for each source or ed2k server. Since this is an external library it is disabled by default. This is how to enable it: Download the free GeoIP C library from http://www.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz From the folder libGeoIP take GeoIP.h and GeoIP.c and put them into "MSVC Solution\libs\libGeoIP" (removing the dummy files there). Rebuild aMule. That's it. :-) ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libGeoIP/libGeoIP.vcxproj.filtersamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libGeoIP/libGeoIP.vcxproj.filte0000644000175000017500000000231411772155611030644 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files Header Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libGeoIP/libGeoIP.vcxproj0000644000175000017500000001211712012015471027527 0ustar l3onl3on Debug Win32 Release Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1} libGeoIP Win32Proj StaticLibrary MultiByte true StaticLibrary Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ /MP %(AdditionalOptions) Disabled %(AdditionalIncludeDirectories) WIN32;_DEBUG;__DEBUG__;_LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase /MP %(AdditionalOptions) Full %(AdditionalIncludeDirectories) WIN32;_LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase create dummy files GeoIP.cmd GeoIP_X.c;%(Outputs) create dummy files GeoIP.cmd GeoIP_X.c;%(Outputs) amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libGeoIP/GeoIP_X.hpp0000644000175000017500000000043411772155611026437 0ustar l3onl3on#pragma warning(disable:4996) #define ssize_t int #include #include char PACKAGE_VERSION[] = ""; ssize_t pread(int fildes, void *buf, size_t nbyte, size_t offset) { lseek(fildes, offset, SEEK_SET); return read(fildes, buf, nbyte); } #include "GeoIP.c" amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libGeoIP/GeoIP.cmd0000644000175000017500000000054011772155611026122 0ustar l3onl3on@echo off if exist geoip.h goto h_exist echo creating GeoIP.h echo #undef ENABLE_IP2COUNTRY > GeoIP.h echo typedef void GeoIP; >> GeoIP.h :h_exist if exist geoip.c goto c_exist echo creating GeoIP.c echo // Dummy > GeoIP.c :c_exist if exist geoip_x.c goto finish echo creating GeoIP_X.c echo #include "GeoIP_X.hpp" >> GeoIP_X.c :finish amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libext/0000755000175000017500000000000012053222137024317 5ustar l3onl3on././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libext/buildlibext.vcxproj.filtersamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libext/buildlibext.vcxproj.filt0000644000175000017500000000165311772155611031216 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Header Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libext/buildlibext.vcxproj0000644000175000017500000004754711772155611030275 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6} MSVCExpressExtLibs Utility MultiByte true Utility MultiByte Utility MultiByte true Utility MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ join external libs if not exist ..\..\$(Configuration) mkdir ..\..\$(Configuration) lib /LTCG /out:..\..\$(Configuration)\libext.lib "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28ud_media.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxjpegd.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28ud_adv.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxregexud.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28ud_richtext.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxzlibd.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxbase28ud.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28ud_qa.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxbase28ud_xml.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxbase28ud_odbc.lib" "..\..\..\..\..\..\cryptopp\win32\output\debug\cryptlib.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxtiffd.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxbase28ud_net.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28ud_core.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28ud_gl.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxpngd.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28ud_dbgrid.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28ud_xrc.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxexpatd.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28ud_html.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28ud_aui.lib" join external libs if not exist ..\..\$(Configuration) mkdir ..\..\$(Configuration) lib /LTCG /out:..\..\$(Configuration)\libext.lib "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28u_media.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxjpeg.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28u_adv.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxregexu.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28u_richtext.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxzlib.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxbase28u.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28u_qa.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxbase28u_xml.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxbase28u_odbc.lib" "..\..\..\..\..\..\cryptopp\win32\output\release\cryptlib.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxtiff.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxbase28u_net.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28u_core.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28u_gl.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxpng.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28u_dbgrid.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28u_xrc.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxexpat.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28u_html.lib" "..\..\..\..\..\..\wxwidgets\lib\vc_lib\wxmsw28u_aui.lib" join external libs if not exist ..\..\$(Configuration) mkdir ..\..\$(Configuration) lib /LTCG /out:..\..\$(Configuration)\libext.lib "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29ud_media.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxjpegd.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29ud_adv.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxregexud.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29ud_richtext.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxzlibd.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxbase29ud.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29ud_qa.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxbase29ud_xml.lib" "..\..\..\..\..\..\cryptopp\win32\output\debug\cryptlib.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxtiffd.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxbase29ud_net.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29ud_core.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29ud_gl.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxpngd.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29ud_xrc.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxexpatd.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29ud_html.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29ud_aui.lib" join external libs if not exist ..\..\$(Configuration) mkdir ..\..\$(Configuration) lib /LTCG /out:..\..\$(Configuration)\libext.lib "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29u_media.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxjpeg.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29u_adv.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxregexu.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29u_richtext.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxzlib.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxbase29u.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29u_qa.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxbase29u_xml.lib" "..\..\..\..\..\..\cryptopp\win32\output\release\cryptlib.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxtiff.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxbase29u_net.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29u_core.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29u_gl.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxpng.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29u_xrc.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxexpat.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29u_html.lib" "..\..\..\..\..\..\wxWidgets29\lib\vc_lib\wxmsw29u_aui.lib" {24c45343-fd20-5c92-81c1-35a2ae841e79} false {a16d3832-0f42-57ce-8f48-50e06649ade8} false {3fcc50c2-81e9-5db2-b8d8-2129427568b1} false {6744dad8-9c70-574a-bff2-9f8dddb24a75} false {da8b15ef-6750-5928-bc0e-c748213cf9b2} false {33cc42f9-7756-5587-863c-8d4461b7c5dd} false {8bd8f8d9-4275-5b42-a8f4-f1db2970a550} false {69f2ede4-7d21-5738-9bc0-f66f61c9ae00} false {e21129e0-7c08-5936-9d8c-0d60b5319ba7} false {7fb0902d-8579-5dce-b883-daf66a885005} false {a1a8355b-0988-528e-9cc2-b971d6266669} false {6053cc38-cdee-584c-8bc8-4b000d800fc7} false {8acc122a-ca6a-5aa6-9c97-9cdd2e533db0} false {56a4b526-bb81-5d01-aaa9-16d23bbb169d} false {75596ce6-5ae7-55c9-b890-c07b0a657a83} false {8b867186-a0b5-5479-b824-e176edd27c40} false {3e6dca27-5fa3-53ec-bbd6-2d42294b7ae6} false {09f2f96a-1cc6-5e43-af1d-956ec2a4888d} false {fe8c58ce-6828-4125-8563-28f929d307c2} false {64dd39fc-b3fa-4625-86ba-d8a7ae7d1d2c} false {3ea1ce4c-c6fa-42c0-a152-10fda37fe935} false {83e249bf-12a0-4d0d-b9a5-b9560fde0ba1} false {c4590207-2d76-445f-833d-d59bb14d2c51} false {8cf291f4-6284-4118-98a7-9d2146c6d5ea} false {8e917a7a-cc97-45c8-80a1-2ebd30936d23} false {6b245136-054c-4400-bf21-d30b05c231cd} false {c963a510-37eb-4d71-85b9-2380fcd4b3d3} false {b535be44-fccc-4911-862f-a7ed6cc6b597} false {ae383b44-ee53-4353-9bf0-2f3767d6ce51} false {4740520c-adf1-464d-97c5-85fcfeecf76d} false {474a0ed2-5969-47f0-b37f-7bc05c44f99b} false {4c6519fa-63b7-4631-b087-a17a368dbcd9} false {4f88c347-8c7a-47c1-84c8-d4e154a33d30} false {a960d0ad-c20e-4fd6-b477-6509232c7d94} false {456e58bd-84ca-4190-a88b-0a9b30dfd6d6} false {99a6cd35-a635-4e39-93ff-f9a359e356d2} false {46b97e73-8e57-42c1-a46e-af0495d625dd} false {ba59346e-5eb2-4d25-94a7-132d9c953a05} false amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmuleec/0000755000175000017500000000000012053222137024771 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmuleec/libmuleec.vcxproj0000644000175000017500000002363112012015471030350 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1} libmuleec Win32Proj StaticLibrary Unicode true StaticLibrary Unicode StaticLibrary Unicode true StaticLibrary Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ $(SolutionDir)$(Configuration)\ $(Configuration)\ /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib\;%(AdditionalIncludeDirectories) _LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib\;%(AdditionalIncludeDirectories) _LIB;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase {293e6133-239a-4ed4-838e-9182b07c6b35} false ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmuleec/libmuleec.vcxproj.filtersamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/libs/libmuleec/libmuleec.vcxproj.fil0000644000175000017500000000552312012015471031121 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/PCH.cpp0000644000175000017500000000016611772155611023231 0ustar l3onl3on// This file is used to build the precompiled headers. // Since PCH.h is included by compiler option, it's just empty.amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/makeconfig.cmd0000644000175000017500000000240412012015471024663 0ustar l3onl3on@echo off echo #ifndef CONFIG_H>config.h echo #define CONFIG_H>>config.h rem Tarballs have a .svn-revision for identification if not exist .svn-revision goto svn1 FOR /F %%i IN (.svn-revision) DO set svnv=%%i goto :foundsvnversion :svn1 rem Try to get version from a SVN working copy, svnversion must be in path set svnv=exported call svnversion >nul 2>&1 if errorlevel 1 goto nosvnversion FOR /F %%i IN ('svnversion src') DO set svnv=%%i if %svnv%==exported goto nosvnversion if %svnv%==Unversioned goto nosvnversion :foundsvnversion echo SVNDATE is %svnv% echo #define SVNDATE "rev. %svnv%">>config.h echo #define VERSION "SVN">>config.h echo #define __PRERELEASE__>>config.h goto finish :nosvnversion echo release build, version from ^ echo #include ^ >>config.h :finish echo #define CRYPTOPP_INCLUDE_PREFIX ../cryptopp>>config.h echo #define PACKAGE "amule">>config.h echo #define HAVE_ERRNO_H>>config.h echo #define HAVE_STRERROR>>config.h rem ADUNANZA BEGIN echo #if !defined(ENABLE_IP2COUNTRY)>>config.h echo #define ENABLE_IP2COUNTRY>>config.h echo #endif>>config.h echo #if !defined(YY_NO_UNISTD_H)>>config.h echo #define YY_NO_UNISTD_H>>config.h echo #endif>>config.h rem ADUNANZA END echo #endif>>config.h amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleWeb/0000755000175000017500000000000012053222137023600 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleWeb/aMuleWeb.vcxproj.filters0000644000175000017500000000720711772155611030404 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Resource Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleWeb/aMuleWeb.vcxproj0000644000175000017500000003544712012204604026725 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA} aMuleWeb Win32Proj Application Unicode true Application Unicode Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Web Server\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;%(AdditionalIncludeDirectories) _CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Web Server\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console true true false MachineX86 /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;$(SolutionDir)..\..\..\..\wxWidgets29\src\png;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;WITH_LIBPNG;HAVE_CONFIG_H;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Web Server\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;$(SolutionDir)..\..\..\..\wxWidgets29\src\png;%(AdditionalIncludeDirectories) _CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;WITH_LIBPNG;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Web Server\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) false Console true true false MachineX86 {293e6133-239a-4ed4-838e-9182b07c6b35} false {5a9ec6a5-68a3-43c8-960e-f7f03b16f1d1} false amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/version.rc0000644000175000017500000000424212052527717024127 0ustar l3onl3on#include #define HAVE_CONFIG_H #include "../../../src/include/common/ClientVersion.h" // two-level macro to transform macro-number in string #define MYTOSTRING(a) BASEMYTOSTRING(a) #define BASEMYTOSTRING(a) #a #define ADU_VER_MAJ 2012 #define ADU_VER_MIN 1 // IMPOSTARE LA SEG. ADU_BETA_MAJ A 0 PER LE VERSIONI RILASCIATE UFFICIALMENTE #define ADU_BETA_MAJ 0 #define ADU_BETA_MIN #ifdef __PRERELEASE__ # define VER_PRERELEASE VS_FF_PRERELEASE # undef VER_RELEASE # define VER_RELEASE 0 # if ADU_BETA_MAJ > 0 # define VER_PRODUCTVERSION_STR MYTOSTRING(ADU_VER_MAJ) "." MYTOSTRING(ADU_VER_MIN) "b" MYTOSTRING(ADU_BETA_MAJ) " " SVNDATE # else # define VER_PRODUCTVERSION_STR MYTOSTRING(ADU_VER_MAJ) "." MYTOSTRING(ADU_VER_MIN) " " SVNDATE # endif #else # define VER_PRERELEASE 0 # ifndef VER_RELEASE # define VER_RELEASE 1 # if ADU_BETA_MAJ > 0 # define VER_PRODUCTVERSION_STR MYTOSTRING(ADUVER_MAJ) "." MYTOSTRING(ADU_VER_MIN) "b" MYTOSTRING(ADU_BETA_MAJ) # else # define VER_PRODUCTVERSION_STR MYTOSTRING(ADUVER_MAJ) "." MYTOSTRING(ADU_VER_MIN) # endif # endif #endif #ifdef __DEBUG__ #define VER_DEBUG VS_FF_DEBUG #else #define VER_DEBUG 0 #endif VS_VERSION_INFO VERSIONINFO FILEVERSION ADU_VER_MAJ, ADU_VER_MIN, ADU_BETA_MAJ, VER_RELEASE PRODUCTVERSION ADU_VER_MAJ, ADU_VER_MIN, ADU_BETA_MAJ, VER_RELEASE FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS VER_DEBUG | VER_PRERELEASE FILEOS VOS__WINDOWS32 FILETYPE VFT_APP FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "http://www.adunanza.net, based on aMule (http://www.amule.org)" VALUE "FileDescription", VER_FILEDESCRIPTION_STR VALUE "FileVersion", VER_PRODUCTVERSION_STR VALUE "InternalName", VER_INTERNALNAME_STR VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR VALUE "ProductName", "aMule AdunanzA" VALUE "ProductVersion", VER_PRODUCTVERSION_STR VALUE "LegalCopyright", "The AdunanzA Team" VALUE "CompanyName", "AdunanzA (http://www.adunanza.net)" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 1200 END END amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMule-MSVC10E.sln0000644000175000017500000002663111772155611024715 0ustar l3onl3onMicrosoft Visual Studio Solution File, Format Version 11.00 # Visual C++ Express 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMule", "aMule\aMule.vcxproj", "{5FCAFC30-922E-446F-8DF5-D71819ABC2FE}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmuleec", "libs\libmuleec\libmuleec.vcxproj", "{5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmulecommon", "libs\libmulecommon\libmulecommon.vcxproj", "{293E6133-239A-4ED4-838E-9182B07C6B35}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmuleexternalwxlistctrl", "libs\libmuleexternalwxlistctrl\libmuleexternalwxlistctrl.vcxproj", "{16C7A051-9097-41A5-BA26-FEC1EA1F16EF}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aLinkCreator", "aLinkCreator\aLinkCreator.vcxproj", "{FF560C5D-4369-4DEF-B2EC-6F507D554DB5}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMuleCMD", "aMuleCMD\aMuleCMD.vcxproj", "{EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMuleGUI", "aMuleGUI\aMuleGUI.vcxproj", "{9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ed2k", "ed2k\ed2k.vcxproj", "{FF560C5D-4369-4DEF-B2EC-6F507D554DB6}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fileview", "fileview\fileview.vcxproj", "{02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libGeoIP", "libs\libGeoIP\libGeoIP.vcxproj", "{8CA0F896-7689-4CE0-9D16-99C9C83847E1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMuleD", "aMuleD\aMuleD.vcxproj", "{10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aMuleWeb", "aMuleWeb\aMuleWeb.vcxproj", "{EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCas", "wxCas\wxCas.vcxproj", "{5FCAFC30-922E-446F-8DF5-D71819AB6356}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "alcc", "aLinkCreator\alcc.vcxproj", "{FF560C5D-4369-4DEF-B2EC-6F507D994DB6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug29|Win32 = Debug29|Win32 Release|Win32 = Release|Win32 Release29|Win32 = Release29|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Debug|Win32.ActiveCfg = Debug|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Debug|Win32.Build.0 = Debug|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Debug29|Win32.ActiveCfg = Debug29|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Debug29|Win32.Build.0 = Debug29|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Release|Win32.ActiveCfg = Release|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Release|Win32.Build.0 = Release|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Release29|Win32.ActiveCfg = Release29|Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE}.Release29|Win32.Build.0 = Release29|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Debug|Win32.ActiveCfg = Debug|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Debug|Win32.Build.0 = Debug|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Debug29|Win32.ActiveCfg = Debug29|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Debug29|Win32.Build.0 = Debug29|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Release|Win32.ActiveCfg = Release|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Release|Win32.Build.0 = Release|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Release29|Win32.ActiveCfg = Release29|Win32 {5A9EC6A5-68A3-43C8-960E-F7F03B16F1D1}.Release29|Win32.Build.0 = Release29|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Debug|Win32.ActiveCfg = Debug|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Debug|Win32.Build.0 = Debug|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Debug29|Win32.ActiveCfg = Debug29|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Debug29|Win32.Build.0 = Debug29|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Release|Win32.ActiveCfg = Release|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Release|Win32.Build.0 = Release|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Release29|Win32.ActiveCfg = Release29|Win32 {293E6133-239A-4ED4-838E-9182B07C6B35}.Release29|Win32.Build.0 = Release29|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Debug|Win32.ActiveCfg = Debug|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Debug|Win32.Build.0 = Debug|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Debug29|Win32.ActiveCfg = Debug29|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Debug29|Win32.Build.0 = Debug29|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Release|Win32.ActiveCfg = Release|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Release|Win32.Build.0 = Release|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Release29|Win32.ActiveCfg = Release29|Win32 {16C7A051-9097-41A5-BA26-FEC1EA1F16EF}.Release29|Win32.Build.0 = Release29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Debug|Win32.ActiveCfg = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Debug|Win32.Build.0 = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Debug29|Win32.ActiveCfg = Debug29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Debug29|Win32.Build.0 = Debug29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Release|Win32.ActiveCfg = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Release|Win32.Build.0 = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Release29|Win32.ActiveCfg = Release29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5}.Release29|Win32.Build.0 = Release29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Debug|Win32.ActiveCfg = Debug|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Debug|Win32.Build.0 = Debug|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Debug29|Win32.ActiveCfg = Debug29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Debug29|Win32.Build.0 = Debug29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Release|Win32.ActiveCfg = Release|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Release|Win32.Build.0 = Release|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Release29|Win32.ActiveCfg = Release29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA}.Release29|Win32.Build.0 = Release29|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Debug|Win32.ActiveCfg = Debug|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Debug|Win32.Build.0 = Debug|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Debug29|Win32.ActiveCfg = Debug29|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Debug29|Win32.Build.0 = Debug29|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Release|Win32.ActiveCfg = Release|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Release|Win32.Build.0 = Release|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Release29|Win32.ActiveCfg = Release29|Win32 {9E601FE7-C3E1-48A8-8EAB-A1EEB501FBC7}.Release29|Win32.Build.0 = Release29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Debug|Win32.ActiveCfg = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Debug|Win32.Build.0 = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Debug29|Win32.ActiveCfg = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Debug29|Win32.Build.0 = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Release|Win32.ActiveCfg = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Release|Win32.Build.0 = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Release29|Win32.ActiveCfg = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6}.Release29|Win32.Build.0 = Release|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Debug|Win32.ActiveCfg = Debug|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Debug|Win32.Build.0 = Debug|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Debug29|Win32.ActiveCfg = Debug29|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Debug29|Win32.Build.0 = Debug29|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Release|Win32.ActiveCfg = Release|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Release|Win32.Build.0 = Release|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Release29|Win32.ActiveCfg = Release29|Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6}.Release29|Win32.Build.0 = Release29|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Debug|Win32.ActiveCfg = Debug|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Debug|Win32.Build.0 = Debug|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Debug29|Win32.ActiveCfg = Debug|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Debug29|Win32.Build.0 = Debug|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Release|Win32.ActiveCfg = Release|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Release|Win32.Build.0 = Release|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Release29|Win32.ActiveCfg = Release|Win32 {8CA0F896-7689-4CE0-9D16-99C9C83847E1}.Release29|Win32.Build.0 = Release|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Debug|Win32.ActiveCfg = Debug|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Debug|Win32.Build.0 = Debug|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Debug29|Win32.ActiveCfg = Debug29|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Debug29|Win32.Build.0 = Debug29|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Release|Win32.ActiveCfg = Release|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Release|Win32.Build.0 = Release|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Release29|Win32.ActiveCfg = Release29|Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F}.Release29|Win32.Build.0 = Release29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Debug|Win32.ActiveCfg = Debug|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Debug|Win32.Build.0 = Debug|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Debug29|Win32.ActiveCfg = Debug29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Debug29|Win32.Build.0 = Debug29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Release|Win32.ActiveCfg = Release|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Release|Win32.Build.0 = Release|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Release29|Win32.ActiveCfg = Release29|Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09473BA}.Release29|Win32.Build.0 = Release29|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Debug|Win32.ActiveCfg = Debug|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Debug|Win32.Build.0 = Debug|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Debug29|Win32.ActiveCfg = Debug29|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Debug29|Win32.Build.0 = Debug29|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Release|Win32.ActiveCfg = Release|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Release|Win32.Build.0 = Release|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Release29|Win32.ActiveCfg = Release29|Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356}.Release29|Win32.Build.0 = Release29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Debug|Win32.ActiveCfg = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Debug|Win32.Build.0 = Debug|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Debug29|Win32.ActiveCfg = Debug29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Debug29|Win32.Build.0 = Debug29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Release|Win32.ActiveCfg = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Release|Win32.Build.0 = Release|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Release29|Win32.ActiveCfg = Release29|Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6}.Release29|Win32.Build.0 = Release29|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aLinkCreator/0000755000175000017500000000000012053222140024447 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aLinkCreator/alcc.vcxproj.filters0000644000175000017500000000402611772155611030456 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Header Files Header Files Header Files Header Files Resource Files Resource Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aLinkCreator/alcc.vcxproj0000644000175000017500000003245512012204604026777 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {FF560C5D-4369-4DEF-B2EC-6F507D994DB6} alcc Win32Proj Application Unicode true Application Unicode Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)ALC\ false $(SolutionDir)$(Configuration)\ $(Configuration)ALC\ false $(SolutionDir)$(Configuration)\ $(Configuration)ALC\ false $(SolutionDir)$(Configuration)\ $(Configuration)ALC\ false /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;HAVE_CONFIG_H;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Link Creator\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) _CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Link Creator\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console true true false MachineX86 /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;HAVE_CONFIG_H;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Link Creator\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) _CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Link Creator\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) false Console true true false MachineX86 {293e6133-239a-4ed4-838e-9182b07c6b35} false ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aLinkCreator/aLinkCreator.vcxproj.filtersamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aLinkCreator/aLinkCreator.vcxproj.fi0000644000175000017500000000524411772155611031063 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Source Files Source Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Resource Files Resource Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aLinkCreator/aLinkCreator.vcxproj0000644000175000017500000003305712012204604030452 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB5} aLinkCreator Win32Proj Application Unicode true Application Unicode Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;HAVE_CONFIG_H;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Link Creator\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) NDEBUG;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Link Creator\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows true true false MachineX86 /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;HAVE_CONFIG_H;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Link Creator\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\;%(AdditionalIncludeDirectories) NDEBUG;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Link Creator\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;$(OutDir)libext.lib;%(AdditionalDependencies) false Windows true true false MachineX86 {293e6133-239a-4ed4-838e-9182b07c6b35} false amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMule-MSVC10E-ExtLibs.sln0000644000175000017500000002704411772155611026264 0ustar l3onl3onMicrosoft Visual Studio Solution File, Format Version 11.00 # Visual C++ Express 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "buildlibext", "libs\libext\buildlibext.vcxproj", "{F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}" ProjectSection(ProjectDependencies) = postProject {3423EC9A-52E4-4A4D-9753-EDEBC38785EF} = {3423EC9A-52E4-4A4D-9753-EDEBC38785EF} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxregex", "..\..\..\..\wxWidgets\build\msw\wx_wxregex.vcxproj", "{A960D0AD-C20E-4FD6-B477-6509232C7D94}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxzlib", "..\..\..\..\wxWidgets\build\msw\wx_wxzlib.vcxproj", "{99A6CD35-A635-4E39-93FF-F9A359E356D2}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxpng", "..\..\..\..\wxWidgets\build\msw\wx_wxpng.vcxproj", "{4F88C347-8C7A-47C1-84C8-D4E154A33D30}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxjpeg", "..\..\..\..\wxWidgets\build\msw\wx_wxjpeg.vcxproj", "{4C6519FA-63B7-4631-B087-A17A368DBCD9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxtiff", "..\..\..\..\wxWidgets\build\msw\wx_wxtiff.vcxproj", "{456E58BD-84CA-4190-A88B-0A9B30DFD6D6}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxexpat", "..\..\..\..\wxWidgets\build\msw\wx_wxexpat.vcxproj", "{474A0ED2-5969-47F0-B37F-7BC05C44F99B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "..\..\..\..\wxWidgets\build\msw\wx_base.vcxproj", "{3EA1CE4C-C6FA-42C0-A152-10FDA37FE935}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net", "..\..\..\..\wxWidgets\build\msw\wx_net.vcxproj", "{C963A510-37EB-4D71-85B9-2380FCD4B3D3}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "..\..\..\..\wxWidgets\build\msw\wx_core.vcxproj", "{83E249BF-12A0-4D0D-B9A5-B9560FDE0BA1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adv", "..\..\..\..\wxWidgets\build\msw\wx_adv.vcxproj", "{FE8C58CE-6828-4125-8563-28F929D307C2}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "media", "..\..\..\..\wxWidgets\build\msw\wx_media.vcxproj", "{6B245136-054C-4400-BF21-D30B05C231CD}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "odbc", "..\..\..\..\wxWidgets\build\msw\wx_odbc.vcxproj", "{B535BE44-FCCC-4911-862F-A7ED6CC6B597}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbgrid", "..\..\..\..\wxWidgets\build\msw\wx_dbgrid.vcxproj", "{C4590207-2D76-445F-833D-D59BB14D2C51}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "html", "..\..\..\..\wxWidgets\build\msw\wx_html.vcxproj", "{8E917A7A-CC97-45C8-80A1-2EBD30936D23}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qa", "..\..\..\..\wxWidgets\build\msw\wx_qa.vcxproj", "{AE383B44-EE53-4353-9BF0-2F3767D6CE51}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "..\..\..\..\wxWidgets\build\msw\wx_xml.vcxproj", "{46B97E73-8E57-42C1-A46E-AF0495D625DD}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrc", "..\..\..\..\wxWidgets\build\msw\wx_xrc.vcxproj", "{BA59346E-5EB2-4D25-94A7-132D9C953A05}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "..\..\..\..\wxWidgets\build\msw\wx_aui.vcxproj", "{64DD39FC-B3FA-4625-86BA-D8A7AE7D1D2C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "..\..\..\..\wxWidgets\build\msw\wx_richtext.vcxproj", "{4740520C-ADF1-464D-97C5-85FCFEECF76D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gl", "..\..\..\..\wxWidgets\build\msw\wx_gl.vcxproj", "{8CF291F4-6284-4118-98A7-9D2146C6D5EA}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cryptlib", "..\..\..\..\cryptopp\cryptlib.vcxproj", "{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug|Win32.ActiveCfg = Debug|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug|Win32.Build.0 = Debug|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release|Win32.ActiveCfg = Release|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release|Win32.Build.0 = Release|Win32 {A960D0AD-C20E-4FD6-B477-6509232C7D94}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {A960D0AD-C20E-4FD6-B477-6509232C7D94}.Debug|Win32.Build.0 = Unicode Debug|Win32 {A960D0AD-C20E-4FD6-B477-6509232C7D94}.Release|Win32.ActiveCfg = Unicode Release|Win32 {A960D0AD-C20E-4FD6-B477-6509232C7D94}.Release|Win32.Build.0 = Unicode Release|Win32 {99A6CD35-A635-4E39-93FF-F9A359E356D2}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {99A6CD35-A635-4E39-93FF-F9A359E356D2}.Debug|Win32.Build.0 = Unicode Debug|Win32 {99A6CD35-A635-4E39-93FF-F9A359E356D2}.Release|Win32.ActiveCfg = Unicode Release|Win32 {99A6CD35-A635-4E39-93FF-F9A359E356D2}.Release|Win32.Build.0 = Unicode Release|Win32 {4F88C347-8C7A-47C1-84C8-D4E154A33D30}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {4F88C347-8C7A-47C1-84C8-D4E154A33D30}.Debug|Win32.Build.0 = Unicode Debug|Win32 {4F88C347-8C7A-47C1-84C8-D4E154A33D30}.Release|Win32.ActiveCfg = Unicode Release|Win32 {4F88C347-8C7A-47C1-84C8-D4E154A33D30}.Release|Win32.Build.0 = Unicode Release|Win32 {4C6519FA-63B7-4631-B087-A17A368DBCD9}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {4C6519FA-63B7-4631-B087-A17A368DBCD9}.Debug|Win32.Build.0 = Unicode Debug|Win32 {4C6519FA-63B7-4631-B087-A17A368DBCD9}.Release|Win32.ActiveCfg = Unicode Release|Win32 {4C6519FA-63B7-4631-B087-A17A368DBCD9}.Release|Win32.Build.0 = Unicode Release|Win32 {456E58BD-84CA-4190-A88B-0A9B30DFD6D6}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {456E58BD-84CA-4190-A88B-0A9B30DFD6D6}.Debug|Win32.Build.0 = Unicode Debug|Win32 {456E58BD-84CA-4190-A88B-0A9B30DFD6D6}.Release|Win32.ActiveCfg = Unicode Release|Win32 {456E58BD-84CA-4190-A88B-0A9B30DFD6D6}.Release|Win32.Build.0 = Unicode Release|Win32 {474A0ED2-5969-47F0-B37F-7BC05C44F99B}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {474A0ED2-5969-47F0-B37F-7BC05C44F99B}.Debug|Win32.Build.0 = Unicode Debug|Win32 {474A0ED2-5969-47F0-B37F-7BC05C44F99B}.Release|Win32.ActiveCfg = Unicode Release|Win32 {474A0ED2-5969-47F0-B37F-7BC05C44F99B}.Release|Win32.Build.0 = Unicode Release|Win32 {3EA1CE4C-C6FA-42C0-A152-10FDA37FE935}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {3EA1CE4C-C6FA-42C0-A152-10FDA37FE935}.Debug|Win32.Build.0 = Unicode Debug|Win32 {3EA1CE4C-C6FA-42C0-A152-10FDA37FE935}.Release|Win32.ActiveCfg = Unicode Release|Win32 {3EA1CE4C-C6FA-42C0-A152-10FDA37FE935}.Release|Win32.Build.0 = Unicode Release|Win32 {C963A510-37EB-4D71-85B9-2380FCD4B3D3}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {C963A510-37EB-4D71-85B9-2380FCD4B3D3}.Debug|Win32.Build.0 = Unicode Debug|Win32 {C963A510-37EB-4D71-85B9-2380FCD4B3D3}.Release|Win32.ActiveCfg = Unicode Release|Win32 {C963A510-37EB-4D71-85B9-2380FCD4B3D3}.Release|Win32.Build.0 = Unicode Release|Win32 {83E249BF-12A0-4D0D-B9A5-B9560FDE0BA1}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {83E249BF-12A0-4D0D-B9A5-B9560FDE0BA1}.Debug|Win32.Build.0 = Unicode Debug|Win32 {83E249BF-12A0-4D0D-B9A5-B9560FDE0BA1}.Release|Win32.ActiveCfg = Unicode Release|Win32 {83E249BF-12A0-4D0D-B9A5-B9560FDE0BA1}.Release|Win32.Build.0 = Unicode Release|Win32 {FE8C58CE-6828-4125-8563-28F929D307C2}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {FE8C58CE-6828-4125-8563-28F929D307C2}.Debug|Win32.Build.0 = Unicode Debug|Win32 {FE8C58CE-6828-4125-8563-28F929D307C2}.Release|Win32.ActiveCfg = Unicode Release|Win32 {FE8C58CE-6828-4125-8563-28F929D307C2}.Release|Win32.Build.0 = Unicode Release|Win32 {6B245136-054C-4400-BF21-D30B05C231CD}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {6B245136-054C-4400-BF21-D30B05C231CD}.Debug|Win32.Build.0 = Unicode Debug|Win32 {6B245136-054C-4400-BF21-D30B05C231CD}.Release|Win32.ActiveCfg = Unicode Release|Win32 {6B245136-054C-4400-BF21-D30B05C231CD}.Release|Win32.Build.0 = Unicode Release|Win32 {B535BE44-FCCC-4911-862F-A7ED6CC6B597}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {B535BE44-FCCC-4911-862F-A7ED6CC6B597}.Debug|Win32.Build.0 = Unicode Debug|Win32 {B535BE44-FCCC-4911-862F-A7ED6CC6B597}.Release|Win32.ActiveCfg = Unicode Release|Win32 {B535BE44-FCCC-4911-862F-A7ED6CC6B597}.Release|Win32.Build.0 = Unicode Release|Win32 {C4590207-2D76-445F-833D-D59BB14D2C51}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {C4590207-2D76-445F-833D-D59BB14D2C51}.Debug|Win32.Build.0 = Unicode Debug|Win32 {C4590207-2D76-445F-833D-D59BB14D2C51}.Release|Win32.ActiveCfg = Unicode Release|Win32 {C4590207-2D76-445F-833D-D59BB14D2C51}.Release|Win32.Build.0 = Unicode Release|Win32 {8E917A7A-CC97-45C8-80A1-2EBD30936D23}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {8E917A7A-CC97-45C8-80A1-2EBD30936D23}.Debug|Win32.Build.0 = Unicode Debug|Win32 {8E917A7A-CC97-45C8-80A1-2EBD30936D23}.Release|Win32.ActiveCfg = Unicode Release|Win32 {8E917A7A-CC97-45C8-80A1-2EBD30936D23}.Release|Win32.Build.0 = Unicode Release|Win32 {AE383B44-EE53-4353-9BF0-2F3767D6CE51}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {AE383B44-EE53-4353-9BF0-2F3767D6CE51}.Debug|Win32.Build.0 = Unicode Debug|Win32 {AE383B44-EE53-4353-9BF0-2F3767D6CE51}.Release|Win32.ActiveCfg = Unicode Release|Win32 {AE383B44-EE53-4353-9BF0-2F3767D6CE51}.Release|Win32.Build.0 = Unicode Release|Win32 {46B97E73-8E57-42C1-A46E-AF0495D625DD}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {46B97E73-8E57-42C1-A46E-AF0495D625DD}.Debug|Win32.Build.0 = Unicode Debug|Win32 {46B97E73-8E57-42C1-A46E-AF0495D625DD}.Release|Win32.ActiveCfg = Unicode Release|Win32 {46B97E73-8E57-42C1-A46E-AF0495D625DD}.Release|Win32.Build.0 = Unicode Release|Win32 {BA59346E-5EB2-4D25-94A7-132D9C953A05}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {BA59346E-5EB2-4D25-94A7-132D9C953A05}.Debug|Win32.Build.0 = Unicode Debug|Win32 {BA59346E-5EB2-4D25-94A7-132D9C953A05}.Release|Win32.ActiveCfg = Unicode Release|Win32 {BA59346E-5EB2-4D25-94A7-132D9C953A05}.Release|Win32.Build.0 = Unicode Release|Win32 {64DD39FC-B3FA-4625-86BA-D8A7AE7D1D2C}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {64DD39FC-B3FA-4625-86BA-D8A7AE7D1D2C}.Debug|Win32.Build.0 = Unicode Debug|Win32 {64DD39FC-B3FA-4625-86BA-D8A7AE7D1D2C}.Release|Win32.ActiveCfg = Unicode Release|Win32 {64DD39FC-B3FA-4625-86BA-D8A7AE7D1D2C}.Release|Win32.Build.0 = Unicode Release|Win32 {4740520C-ADF1-464D-97C5-85FCFEECF76D}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {4740520C-ADF1-464D-97C5-85FCFEECF76D}.Debug|Win32.Build.0 = Unicode Debug|Win32 {4740520C-ADF1-464D-97C5-85FCFEECF76D}.Release|Win32.ActiveCfg = Unicode Release|Win32 {4740520C-ADF1-464D-97C5-85FCFEECF76D}.Release|Win32.Build.0 = Unicode Release|Win32 {8CF291F4-6284-4118-98A7-9D2146C6D5EA}.Debug|Win32.ActiveCfg = Unicode Debug|Win32 {8CF291F4-6284-4118-98A7-9D2146C6D5EA}.Debug|Win32.Build.0 = Unicode Debug|Win32 {8CF291F4-6284-4118-98A7-9D2146C6D5EA}.Release|Win32.ActiveCfg = Unicode Release|Win32 {8CF291F4-6284-4118-98A7-9D2146C6D5EA}.Release|Win32.Build.0 = Unicode Release|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.ActiveCfg = Debug|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.Build.0 = Debug|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.ActiveCfg = Release|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/wxCas/0000755000175000017500000000000012053222137023164 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/wxCas/wxCas.vcxproj.filters0000644000175000017500000000615211772155611027352 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Resource Files Resource Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/wxCas/wxCas.vcxproj0000644000175000017500000003535012012204604025666 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {5FCAFC30-922E-446F-8DF5-D71819AB6356} wxCas Win32Proj Application Unicode true Application Unicode Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;ENABLE_NLS;ENABLE_IP2COUNTRY;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"Graphical aMule Statistics\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;ENABLE_NLS;ENABLE_IP2COUNTRY;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"Graphical aMule Statistics\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows true true false MachineX86 /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;ENABLE_NLS;ENABLE_IP2COUNTRY;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"Graphical aMule Statistics\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;ENABLE_NLS;ENABLE_IP2COUNTRY;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"Graphical aMule Statistics\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) false Windows true true false MachineX86 {293e6133-239a-4ed4-838e-9182b07c6b35} false amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMule/0000755000175000017500000000000012053222137023142 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMule/aMule.vcxproj.filters0000644000175000017500000010605612012015471027275 0ustar l3onl3on {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {cc8a6595-b6d5-4afe-8d44-0e3fed36e009} {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {ac85d3b7-e7e5-48af-ba9c-3bbd46cebb91} {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files Source Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files KAD Header Files Header Files Resource Files Resource Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMule/aMule.vcxproj0000644000175000017500000010565312012204604025626 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {5FCAFC30-922E-446F-8DF5-D71819ABC2FE} aMule Win32Proj Application Unicode true Application Unicode Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false /MP /Zm120 %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;ENABLE_NLS;ENABLE_IP2COUNTRY;HAVE_CONFIG_H;%(PreprocessorDefinitions);YY_NO_UNISTD_H EnableFastChecks MultiThreadedDebugDLL Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"All-Platform P2P Client Based on eMule\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows false MachineX86 /MP /Zm120 %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;ENABLE_NLS;ENABLE_IP2COUNTRY;HAVE_CONFIG_H;%(PreprocessorDefinitions);YY_NO_UNISTD_H MultiThreaded Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"All-Platform P2P Client Based on eMule\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";wxUSE_NO_MANIFEST=1;%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows true true false MachineX86 /MP /Zm150 %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;ENABLE_NLS;ENABLE_IP2COUNTRY;HAVE_CONFIG_H;%(PreprocessorDefinitions);YY_NO_UNISTD_H EnableFastChecks MultiThreadedDebugDLL Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"All-Platform P2P Client Based on eMule\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Windows false MachineX86 /MP /Zm120 %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;$(SolutionDir)libs\libGeoIP;%(AdditionalIncludeDirectories) USE_WX_EXTENSIONS;CONVAMULE_CPP;_CRT_SECURE_NO_WARNINGS;ENABLE_NLS;ENABLE_IP2COUNTRY;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDLL Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"All-Platform P2P Client Based on eMule\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) comctl32.lib;ws2_32.lib;rpcrt4.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) false Windows true true false MachineX86 4065;%(DisableSpecificWarnings) 4065;%(DisableSpecificWarnings) 4065;%(DisableSpecificWarnings) 4065;%(DisableSpecificWarnings) Create Create Create Create 4003;%(DisableSpecificWarnings) 4003;%(DisableSpecificWarnings) 4003;%(DisableSpecificWarnings) 4003;%(DisableSpecificWarnings) {8ca0f896-7689-4ce0-9d16-99c9c83847e1} false {293e6133-239a-4ed4-838e-9182b07c6b35} false {5a9ec6a5-68a3-43c8-960e-f7f03b16f1d1} false {16c7a051-9097-41a5-ba26-fec1ea1f16ef} false amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/fileview/0000755000175000017500000000000012053222140023703 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/fileview/fileview.vcxproj0000644000175000017500000002735212012204604027143 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {02A90868-EC36-4EA2-8D46-3B0BB33AEAC6} fileview Win32Proj Application Unicode true Application Unicode Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\..\;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_SCL_SECURE_NO_WARNINGS;wxUSE_GUI=0;USE_WX_EXTENSIONS;MULEUNIT;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\..\;%(AdditionalIncludeDirectories) _SCL_SECURE_NO_WARNINGS;wxUSE_GUI=0;USE_WX_EXTENSIONS;MULEUNIT;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console true true false MachineX86 /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\..\;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_SCL_SECURE_NO_WARNINGS;wxUSE_GUI=0;USE_WX_EXTENSIONS;MULEUNIT;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\..\;%(AdditionalIncludeDirectories) _SCL_SECURE_NO_WARNINGS;wxUSE_GUI=0;USE_WX_EXTENSIONS;MULEUNIT;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) false Console true true false MachineX86 {293e6133-239a-4ed4-838e-9182b07c6b35} false amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/fileview/fileview.vcxproj.filters0000644000175000017500000000441711772155611030626 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Header Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleCMD/0000755000175000017500000000000012053222137023466 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleCMD/aMuleCMD.vcxproj0000644000175000017500000003336412012204604026475 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {EC3DE6B0-0C01-4D64-928A-4ADDB09472BA} aMuleCMD Win32Proj Application Unicode true Application Unicode Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Text Client\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;%(AdditionalIncludeDirectories) _CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Text Client\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console true true false MachineX86 /MP %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Text Client\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console false MachineX86 /MP %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;%(AdditionalIncludeDirectories) _CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Text Client\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;$(OutDir)libext.lib;%(AdditionalDependencies) false Console true true false MachineX86 {293e6133-239a-4ed4-838e-9182b07c6b35} false {5a9ec6a5-68a3-43c8-960e-f7f03b16f1d1} false amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleCMD/aMuleCMD.vcxproj.filters0000644000175000017500000000402311772155611030151 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Source Files Source Files Header Files Header Files Header Files Header Files Resource Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/README - MSVC.txt0000644000175000017500000000743711772155611024467 0ustar l3onl3onHow to build aMule with Visual Studio 2010 Express Edition See also http://www.amule.org/wiki/index.php/HowTo_compile_with_Visual_Studio This solution for Microsoft's Visual Studio 2010 has been configured to be as easy as possible to set up. However, given the size of the aMule project and the libraries it uses, along with limitations in the way Visual Studio works, a couple of items must be setup separately. Additionally, some source code files might need patching due to incompatibilities with some generated files. The solution expects to find the following items: * wxWidgets ( http://www.wxwidgets.org ) at a specific location: ..\..\wxWidgets\ from the solution directory. * crypto++ ( http://www.cryptopp.com/ ) at a specific location: ..\..\cryptopp\ from the solution directory. This means you must create a folder where you will compile aMule, and it must have this structure: - - Your main folder. You can name it whatever you want. | | - wxWidgets ( wxWidgets sources, no intermediate subfolder ) | | - wxWidgets29 ( wxWidgets 2.9 sources, only required if you want to build against unstable wx 2.9 ) | | - cryptopp ( Crypto++ sources, no intermediate subfolder ) | | - ( aMule sources, no intermediate subfolder, can have any name ) I hope this is simple enough to get you started. If wxWidgets fails to compile, please read http://wiki.wxwidgets.org/Microsoft_Visual_CPP_Guide There is sometimes a problem with the cryptopp project in the release and debug build, if some projects fail to link and give you a warning about redefined symbols, go to the properties on the cryptopp project, configuration "release" and change the "Configuration Properties"->"C/C++"->"Code generation"->"Runtime library" to "Multithreaded DLL (/MD)" in the release build or "Multithreaded Debug DLL (/MDd)" for the debug build. There are 3 solutions: 1) aMule-MSVC10E.sln which includes aMule, aMule tools and aMule's internal libs 2) aMule-MSVC10E-ExtLibs.sln includes only wxWidgets and Crypto++ and builds a single library libext.lib from them. You must first build this solution before building aMule-MSVCE.sln 3) aMule-MSVC10E-ExtLibs29.sln same but using wxWidgets 2.9 The Debug/Release configs build against wxWidgets 2.8 (stable), Debug29/Release29 configs build against wxWidgets 2.9 (unstable) To build aMule with GeoIP see libs\libGeoIP\readme.txt . Without it you get an error building libGeoIP when you build the full solution. Just ignore it or unload the libGeoIP project. If aMule fails to compile, here are some guidelines/patches to the most common problems: [*] If Scanner.cpp fails to compile, apply this change around line 1545: - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + b->yy_is_interactive = 0; if necessary. [*] The file muuli_wdr.cpp can also fail if it hasn't been patched for MSVC in the current code. The most common problem comes from this kind of lines: _("For a film you can say its length, its story, language ...\n" "and if it's a fake, you can tell that to other users of aMule."), Notice the opening and closing parentheses are on a different line, and the quotes opened again. While this is ok for gcc, Visual Studio won't allow it. Change this lines to be a single-line quoted text. In the above example, the result will be: _("For a film you can say its length, its story, language ...\nand if it's a fake, you can tell that to other users of aMule."), And that should be it. Feel free to ask in the aMule forum at forum.amule.org, "Compilation problems" section if you have further doubts. If you want to run aMule from inside Visual Studio, always set _NO_DEBUG_HEAP=1 in Properties / Debugging / Environment! amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/ed2k/0000755000175000017500000000000012053222137022724 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/ed2k/ed2k.vcxproj0000644000175000017500000001560212012204604025164 0ustar l3onl3on Debug Win32 Release Win32 {FF560C5D-4369-4DEF-B2EC-6F507D554DB6} ed2k Win32Proj Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false /MP %(AdditionalOptions) Disabled %(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;USE_STD_STRING;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Async EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"ED2K Links Handler\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) shlwapi.lib;%(AdditionalDependencies) true Console false MachineX86 /MP %(AdditionalOptions) Full %(AdditionalIncludeDirectories) USE_STD_STRING;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"ED2K Links Handler\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) shlwapi.lib;%(AdditionalDependencies) false Console true true false MachineX86 {293e6133-239a-4ed4-838e-9182b07c6b35} false amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/ed2k/ed2k.vcxproj.filters0000644000175000017500000000324512012015471026635 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Header Files Header Files Header Files Resource Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMule-MSVC10E-ExtLibs29.sln0000644000175000017500000002366711772155611026446 0ustar l3onl3onMicrosoft Visual Studio Solution File, Format Version 11.00 # Visual C++ Express 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "buildlibext", "libs\libext\buildlibext.vcxproj", "{F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cryptlib", "..\..\..\..\cryptopp\cryptlib.vcxproj", "{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxregex", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxregex.vcxproj", "{56A4B526-BB81-5D01-AAA9-16D23BBB169D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxzlib", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxzlib.vcxproj", "{8B867186-A0B5-5479-B824-E176EDD27C40}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxpng", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxpng.vcxproj", "{8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxjpeg", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxjpeg.vcxproj", "{6053CC38-CDEE-584C-8BC8-4B000D800FC7}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxtiff", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxtiff.vcxproj", "{75596CE6-5AE7-55C9-B890-C07B0A657A83}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxexpat", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_wxexpat.vcxproj", "{A1A8355B-0988-528E-9CC2-B971D6266669}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_base.vcxproj", "{3FCC50C2-81E9-5DB2-B8D8-2129427568B1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_net.vcxproj", "{69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_core.vcxproj", "{6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adv", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_adv.vcxproj", "{24C45343-FD20-5C92-81C1-35A2AE841E79}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "media", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_media.vcxproj", "{8BD8F8D9-4275-5B42-A8F4-F1DB2970A550}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "html", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_html.vcxproj", "{33CC42F9-7756-5587-863C-8D4461B7C5DD}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qa", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_qa.vcxproj", "{E21129E0-7C08-5936-9D8C-0D60B5319BA7}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_xml.vcxproj", "{3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrc", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_xrc.vcxproj", "{09F2F96A-1CC6-5E43-AF1D-956EC2A4888D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_aui.vcxproj", "{A16D3832-0F42-57CE-8F48-50E06649ADE8}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_richtext.vcxproj", "{7FB0902D-8579-5DCE-B883-DAF66A885005}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gl", "..\..\..\..\wxWidgets29\build\msw\wx_vc9_gl.vcxproj", "{DA8B15EF-6750-5928-BC0E-C748213CF9B2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug|Win32.ActiveCfg = Debug29|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Debug|Win32.Build.0 = Debug29|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release|Win32.ActiveCfg = Release29|Win32 {F8C2C7F5-CBF1-46C1-81C9-22AD406B52C6}.Release|Win32.Build.0 = Release29|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.ActiveCfg = Debug|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.Build.0 = Debug|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.ActiveCfg = Release|Win32 {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.Build.0 = Release|Win32 {56A4B526-BB81-5D01-AAA9-16D23BBB169D}.Debug|Win32.ActiveCfg = Debug|Win32 {56A4B526-BB81-5D01-AAA9-16D23BBB169D}.Debug|Win32.Build.0 = Debug|Win32 {56A4B526-BB81-5D01-AAA9-16D23BBB169D}.Release|Win32.ActiveCfg = Release|Win32 {56A4B526-BB81-5D01-AAA9-16D23BBB169D}.Release|Win32.Build.0 = Release|Win32 {8B867186-A0B5-5479-B824-E176EDD27C40}.Debug|Win32.ActiveCfg = Debug|Win32 {8B867186-A0B5-5479-B824-E176EDD27C40}.Debug|Win32.Build.0 = Debug|Win32 {8B867186-A0B5-5479-B824-E176EDD27C40}.Release|Win32.ActiveCfg = Release|Win32 {8B867186-A0B5-5479-B824-E176EDD27C40}.Release|Win32.Build.0 = Release|Win32 {8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0}.Debug|Win32.ActiveCfg = Debug|Win32 {8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0}.Debug|Win32.Build.0 = Debug|Win32 {8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0}.Release|Win32.ActiveCfg = Release|Win32 {8ACC122A-CA6A-5AA6-9C97-9CDD2E533DB0}.Release|Win32.Build.0 = Release|Win32 {6053CC38-CDEE-584C-8BC8-4B000D800FC7}.Debug|Win32.ActiveCfg = Debug|Win32 {6053CC38-CDEE-584C-8BC8-4B000D800FC7}.Debug|Win32.Build.0 = Debug|Win32 {6053CC38-CDEE-584C-8BC8-4B000D800FC7}.Release|Win32.ActiveCfg = Release|Win32 {6053CC38-CDEE-584C-8BC8-4B000D800FC7}.Release|Win32.Build.0 = Release|Win32 {75596CE6-5AE7-55C9-B890-C07B0A657A83}.Debug|Win32.ActiveCfg = Debug|Win32 {75596CE6-5AE7-55C9-B890-C07B0A657A83}.Debug|Win32.Build.0 = Debug|Win32 {75596CE6-5AE7-55C9-B890-C07B0A657A83}.Release|Win32.ActiveCfg = Release|Win32 {75596CE6-5AE7-55C9-B890-C07B0A657A83}.Release|Win32.Build.0 = Release|Win32 {A1A8355B-0988-528E-9CC2-B971D6266669}.Debug|Win32.ActiveCfg = Debug|Win32 {A1A8355B-0988-528E-9CC2-B971D6266669}.Debug|Win32.Build.0 = Debug|Win32 {A1A8355B-0988-528E-9CC2-B971D6266669}.Release|Win32.ActiveCfg = Release|Win32 {A1A8355B-0988-528E-9CC2-B971D6266669}.Release|Win32.Build.0 = Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.ActiveCfg = Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.Build.0 = Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.ActiveCfg = Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.Build.0 = Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.ActiveCfg = Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.Build.0 = Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.ActiveCfg = Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.Build.0 = Release|Win32 {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|Win32.ActiveCfg = Debug|Win32 {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|Win32.Build.0 = Debug|Win32 {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|Win32.ActiveCfg = Release|Win32 {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|Win32.Build.0 = Release|Win32 {24C45343-FD20-5C92-81C1-35A2AE841E79}.Debug|Win32.ActiveCfg = Debug|Win32 {24C45343-FD20-5C92-81C1-35A2AE841E79}.Debug|Win32.Build.0 = Debug|Win32 {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release|Win32.ActiveCfg = Release|Win32 {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release|Win32.Build.0 = Release|Win32 {8BD8F8D9-4275-5B42-A8F4-F1DB2970A550}.Debug|Win32.ActiveCfg = Debug|Win32 {8BD8F8D9-4275-5B42-A8F4-F1DB2970A550}.Debug|Win32.Build.0 = Debug|Win32 {8BD8F8D9-4275-5B42-A8F4-F1DB2970A550}.Release|Win32.ActiveCfg = Release|Win32 {8BD8F8D9-4275-5B42-A8F4-F1DB2970A550}.Release|Win32.Build.0 = Release|Win32 {33CC42F9-7756-5587-863C-8D4461B7C5DD}.Debug|Win32.ActiveCfg = Debug|Win32 {33CC42F9-7756-5587-863C-8D4461B7C5DD}.Debug|Win32.Build.0 = Debug|Win32 {33CC42F9-7756-5587-863C-8D4461B7C5DD}.Release|Win32.ActiveCfg = Release|Win32 {33CC42F9-7756-5587-863C-8D4461B7C5DD}.Release|Win32.Build.0 = Release|Win32 {E21129E0-7C08-5936-9D8C-0D60B5319BA7}.Debug|Win32.ActiveCfg = Debug|Win32 {E21129E0-7C08-5936-9D8C-0D60B5319BA7}.Debug|Win32.Build.0 = Debug|Win32 {E21129E0-7C08-5936-9D8C-0D60B5319BA7}.Release|Win32.ActiveCfg = Release|Win32 {E21129E0-7C08-5936-9D8C-0D60B5319BA7}.Release|Win32.Build.0 = Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.ActiveCfg = Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.Build.0 = Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.ActiveCfg = Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.Build.0 = Release|Win32 {09F2F96A-1CC6-5E43-AF1D-956EC2A4888D}.Debug|Win32.ActiveCfg = Debug|Win32 {09F2F96A-1CC6-5E43-AF1D-956EC2A4888D}.Debug|Win32.Build.0 = Debug|Win32 {09F2F96A-1CC6-5E43-AF1D-956EC2A4888D}.Release|Win32.ActiveCfg = Release|Win32 {09F2F96A-1CC6-5E43-AF1D-956EC2A4888D}.Release|Win32.Build.0 = Release|Win32 {A16D3832-0F42-57CE-8F48-50E06649ADE8}.Debug|Win32.ActiveCfg = Debug|Win32 {A16D3832-0F42-57CE-8F48-50E06649ADE8}.Debug|Win32.Build.0 = Debug|Win32 {A16D3832-0F42-57CE-8F48-50E06649ADE8}.Release|Win32.ActiveCfg = Release|Win32 {A16D3832-0F42-57CE-8F48-50E06649ADE8}.Release|Win32.Build.0 = Release|Win32 {7FB0902D-8579-5DCE-B883-DAF66A885005}.Debug|Win32.ActiveCfg = Debug|Win32 {7FB0902D-8579-5DCE-B883-DAF66A885005}.Debug|Win32.Build.0 = Debug|Win32 {7FB0902D-8579-5DCE-B883-DAF66A885005}.Release|Win32.ActiveCfg = Release|Win32 {7FB0902D-8579-5DCE-B883-DAF66A885005}.Release|Win32.Build.0 = Release|Win32 {DA8B15EF-6750-5928-BC0E-C748213CF9B2}.Debug|Win32.ActiveCfg = Debug|Win32 {DA8B15EF-6750-5928-BC0E-C748213CF9B2}.Debug|Win32.Build.0 = Debug|Win32 {DA8B15EF-6750-5928-BC0E-C748213CF9B2}.Release|Win32.ActiveCfg = Release|Win32 {DA8B15EF-6750-5928-BC0E-C748213CF9B2}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleD/0000755000175000017500000000000012053222137023246 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleD/aMuleD.vcxproj.filters0000644000175000017500000003026512012015471027503 0ustar l3onl3on {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {a595d5a5-1d4c-4c56-ba8f-b0ac15403f03} Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files KAD Source Files Source Files Header Files Resource Files amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Windows/MSVC10/aMuleD/aMuleD.vcxproj0000644000175000017500000005316412012204604026035 0ustar l3onl3on Debug29 Win32 Debug Win32 Release29 Win32 Release Win32 {10E42FDA-AA34-4F8E-BC7C-B51EACA4E75F} aMuleD Win32Proj Application Unicode true Application Unicode Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false $(SolutionDir)$(Configuration)\ $(Configuration)\ false /MP /Zm120 %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;AMULE_DAEMON;%(PreprocessorDefinitions);YY_NO_UNISTD_H EnableFastChecks MultiThreadedDebugDLL Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Daemon\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console false MachineX86 /MP /Zm120 %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets\include;$(SolutionDir)..\..\..\..\wxWidgets\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets\src\zlib;%(AdditionalIncludeDirectories) _CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;AMULE_DAEMON;%(PreprocessorDefinitions);YY_NO_UNISTD_H MultiThreaded Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Daemon\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console true true false MachineX86 /MP /Zm120 %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswud;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;%(AdditionalIncludeDirectories) _DEBUG;__DEBUG__;_CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;AMULE_DAEMON;%(PreprocessorDefinitions);YY_NO_UNISTD_H EnableFastChecks MultiThreadedDebugDLL Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Daemon\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) true Console false MachineX86 /MP /Zm120 %(AdditionalOptions) Full $(SolutionDir)..\..\..\..\wxWidgets29\include;$(SolutionDir)..\..\..\..\wxWidgets29\lib\vc_lib\mswu;$(SolutionDir)..\..\..\src\libs;$(SolutionDir)..\..\..\src;$(SolutionDir)..\..\..\src\include;$(SolutionDir)..\..\..\;$(SolutionDir)..\..\..\..\wxWidgets29\src\zlib;%(AdditionalIncludeDirectories) _CONSOLE;wxUSE_GUI=0;USE_WX_EXTENSIONS;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;AMULE_DAEMON;YY_NO_UNISTD_H;%(PreprocessorDefinitions);YY_NO_UNISTD_H MultiThreadedDLL Use $(SolutionDir)PCH.h Level3 ProgramDatabase $(SolutionDir)PCH.h;%(ForcedIncludeFiles) _UNICODE;UNICODE;VER_FILEDESCRIPTION_STR=\"aMule Daemon\";VER_INTERNALNAME_STR=\"$(ProjectName)\";VER_ORIGINALFILENAME_STR=\"$(TargetFileName)\";%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(SolutionDir)..\..\..\src\include;%(AdditionalIncludeDirectories) ws2_32.lib;shlwapi.lib;$(OutDir)libext.lib;%(AdditionalDependencies) false Console true true false MachineX86 4065;%(DisableSpecificWarnings) 4065;%(DisableSpecificWarnings) 4065;%(DisableSpecificWarnings) 4065;%(DisableSpecificWarnings) Create Create Create Create 4003;%(DisableSpecificWarnings) 4003;%(DisableSpecificWarnings) 4003;%(DisableSpecificWarnings) 4003;%(DisableSpecificWarnings) {293e6133-239a-4ed4-838e-9182b07c6b35} false {5a9ec6a5-68a3-43c8-960e-f7f03b16f1d1} false amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Optware/0000755000175000017500000000000012053222136021154 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Optware/rc.amuledadunanza0000644000175000017500000000105412016754523024504 0ustar l3onl3on#!/bin/sh PATH=/sbin:/bin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin start() { set backup=$HOME echo "Starting amuled AdunanzA..." echo "Configuration's setting are located in /opt/share/amuleadunanza" export HOME=/opt/share/amuleadunanza /opt/bin/amuled -f export HOME=$backup echo "done" } stop() { echo -n "Shutting down amuled AdunanzA... " killall amuled killall amuleweb echo "done" } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; *) echo "Usage: $0 (start|stop|restart)" exit 1 ;; esac amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Optware/dd-wrt/0000755000175000017500000000000012053222136022355 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Optware/dd-wrt/amuleadunanza.mk0000644000175000017500000002526512052527717025561 0ustar l3onl3on########################################################### # # amuleadunanza # ########################################################### # # AMULEADUNANZA_VERSION, AMULEADUNANZA_SITE and AMULEADUNANZA_SOURCE define # the upstream location of the source code for the package. # AMULEADUNANZA_DIR is the directory which is created when the source # archive is unpacked. # AMULEADUNANZA_UNZIP is the command used to unzip the source. # It is usually "zcat" (for .gz) or "bzcat" (for .bz2) # # You should change all these variables to suit your package. # Please make sure that you add a description, and that you # list all your packages' dependencies, seperated by commas. # # If you list yourself as MAINTAINER, please give a valid email # address, and indicate your irc nick if it cannot be easily deduced # from your name or email address. If you leave MAINTAINER set to # "NSLU2 Linux" other developers will feel free to edit. # http://developer.berlios.de/projects/amule/ #AMULEADUNANZA_SITE=http://download.berlios.de/amule AMULEADUNANZA_VERSION=2012.1 #AMULEADUNANZA_SITE=http://$(SOURCEFORGE_MIRROR)/sourceforge/amule # AMULEADUNANZA_SITE=http://$(SOURCEFORGE_MIRROR)/project/amule/aMule/$(AMULEADUNANZA_VERSION) AMULEADUNANZA_SITE=ftp://192.168.1.1/AdunanzA/testoptware/src AMULEADUNANZA_SOURCE=aMuleAdunanzA-$(AMULEADUNANZA_VERSION).tar.bz2 AMULEADUNANZA_DIR=aMuleAdunanzA-$(AMULEADUNANZA_VERSION) AMULEADUNANZA_UNZIP=bzcat AMULEADUNANZA_MAINTAINER=NSLU2 Linux AMULEADUNANZA_DESCRIPTION=non-gui part of aMuleiAdunanzA ed2k client (amuled,amulweb,amulecmd of MOD AdunanzA for Italian ISP Fastweb) AMULEADUNANZA_SECTION=net AMULEADUNANZA_PRIORITY=optional # AMULEADUNANZA_DEPENDS=libstdc++, wxbase, zlib, libcurl, libpng, libgd, libupnp, readline, ncurses AMULEADUNANZA_DEPENDS=libstdc++, wxbase, zlib, libpng, libgd, libupnp AMULEADUNANZA_SUGGESTS= AMULEADUNANZA_CONFLICTS= # # AMULEADUNANZA_IPK_VERSION should be incremented when the ipk changes. # AMULEADUNANZA_IPK_VERSION=1 # # AMULEADUNANZA_CONFFILES should be a list of user-editable files ## AMULEADUNANZA_CONFFILES=/opt/etc/amule.conf /opt/etc/init.d/SXXamule # # AMULEADUNANZA_PATCHES should list any patches, in the the order in # which they should be applied to the source code. # AMULEADUNANZA_PATCHES=#$(AMULEADUNANZA_SOURCE_DIR)/uintptr_t.patch \ #$(AMULEADUNANZA_SOURCE_DIR)/libupnp-cross.patch # ifeq ($(LIBC_STYLE), uclibc) # AMULEADUNANZA_PATCHES+=$(AMULEADUNANZA_SOURCE_DIR)/amule-1gb-uclibc-mipsel.patch # endif # # If the compilation of the package requires additional # compilation or linking flags, then list them here. # AMULEADUNANZA_CPPFLAGS= ifeq ($(OPTWARE_TARGET), ts101) AMULEADUNANZA_CPPFLAGS+= -fno-builtin-log -fno-builtin-exp endif AMULEADUNANZA_LDFLAGS= AMULEADUNANZA_CONFIGURE_OPTS = ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes ifeq ($(LIBC_STYLE), uclibc) ifdef TARGET_GXX AMULEADUNANZA_CONFIGURE_OPTS += CXX=$(TARGET_GXX) endif endif AMULEADUNANZA_CONFIGURE_ARGS = \ --build=$(GNU_HOST_NAME) \ --host=$(GNU_TARGET_NAME) \ --target=$(GNU_TARGET_NAME) \ --prefix=/opt \ --disable-debug \ --enable-optimize \ --enable-alcc \ --enable-amule-daemon \ --enable-webserver \ --enable-amulecmd \ --enable-upnp \ --disable-monolithic \ --disable-alc \ --disable-amulecmdgui \ --disable-cas \ --disable-wxcas \ --disable-systray \ --enable-adu-nslu2 \ --with-curl-config=$(STAGING_DIR)/bin/curl-config \ --with-gdlib-prefix=$(STAGING_PREFIX) \ --with-libpng-prefix=$(STAGING_PREFIX) \ --with-libupnp-prefix=$(STAGING_PREFIX) \ --with-wxbase-config=$(STAGING_DIR)/opt/bin/wx-config \ --with-wx-config=$(STAGING_DIR)/opt/bin/wx-config \ --with-wx-prefix=$(STAGING_PREFIX) \ --with-crypto-prefix=$(STAGING_PREFIX) \ --with-zlib=$(STAGING_PREFIX) \ --disable-nls \ --disable-static # # AMULEADUNANZA_BUILD_DIR is the directory in which the build is done. # AMULEADUNANZA_SOURCE_DIR is the directory which holds all the # patches and ipkg control files. # AMULEADUNANZA_IPK_DIR is the directory in which the ipk is built. # AMULEADUNANZA_IPK is the name of the resulting ipk files. # # You should not change any of these variables. # AMULEADUNANZA_BUILD_DIR=$(BUILD_DIR)/amuleadunanza AMULEADUNANZA_SOURCE_DIR=$(SOURCE_DIR)/amuleadunanza AMULEADUNANZA_IPK_DIR=$(BUILD_DIR)/amuleadunanza-$(AMULEADUNANZA_VERSION)-ipk AMULEADUNANZA_IPK=$(BUILD_DIR)/amuleadunanza_$(AMULEADUNANZA_VERSION)-$(AMULEADUNANZA_IPK_VERSION)_$(TARGET_ARCH).ipk .PHONY: amuleadunanza-source amuleadunanza-unpack amuleadunanza amuleadunanza-stage amuleadunanza-ipk amuleadunanza-clean amuleadunanza-dirclean amuleadunanza-check # # This is the dependency on the source code. If the source is missing, # then it will be fetched from the site using wget. # $(DL_DIR)/$(AMULEADUNANZA_SOURCE): $(WGET) -P $(@D) $(AMULEADUNANZA_SITE)/$(@F) || \ $(WGET) -P $(@D) $(SOURCES_NLO_SITE)/$(@F) # # The source code depends on it existing within the download directory. # This target will be called by the top level Makefile to download the # source code's archive (.tar.gz, .bz2, etc.) # amuleadunanza-source: $(DL_DIR)/$(AMULEADUNANZA_SOURCE) $(AMULEADUNANZA_PATCHES) # # This target unpacks the source code in the build directory. # If the source archive is not .tar.gz or .tar.bz2, then you will need # to change the commands here. Patches to the source code are also # applied in this target as required. # # This target also configures the build within the build directory. # Flags such as LDFLAGS and CPPFLAGS should be passed into configure # and NOT $(MAKE) below. Passing it to configure causes configure to # correctly BUILD the Makefile with the right paths, where passing it # to Make causes it to override the default search paths of the compiler. # # If the compilation of the package requires other packages to be staged # first, then do that first (e.g. "$(MAKE) -stage -stage"). # # If the package uses GNU libtool, you should invoke $(PATCH_LIBTOOL) as # shown below to make various patches to it. # # $(AMULEADUNANZA_BUILD_DIR)/.configured: $(DL_DIR)/$(AMULEADUNANZA_SOURCE) $(AMULEADUNANZA_PATCHES) $(MAKE) libstdc++-stage crypto++-stage ncurses-stage $(MAKE) wxbase-stage libcurl-stage zlib-stage libpng-stage libgd-stage libupnp-stage readline-stage rm -rf $(BUILD_DIR)/$(AMULEADUNANZA_DIR) $(@D) $(AMULEADUNANZA_UNZIP) $(DL_DIR)/$(AMULEADUNANZA_SOURCE) | tar -C $(BUILD_DIR) -xvf - if test -n "$(AMULEADUNANZA_PATCHES)" ; \ then cat $(AMULEADUNANZA_PATCHES) | \ patch -bd $(BUILD_DIR)/$(AMULEADUNANZA_DIR) -p1 ; \ fi if test "$(BUILD_DIR)/$(AMULEADUNANZA_DIR)" != "$(@D)" ; \ then mv $(BUILD_DIR)/$(AMULEADUNANZA_DIR) $(@D) ; \ fi (cd $(@D); \ $(TARGET_CONFIGURE_OPTS) \ CPPFLAGS="$(STAGING_CPPFLAGS) $(AMULEADUNANZA_CPPFLAGS)" \ LDFLAGS="$(STAGING_LDFLAGS) $(AMULEADUNANZA_LDFLAGS)" \ $(AMULEADUNANZA_CONFIGURE_OPTS) \ ./configure \ $(AMULEADUNANZA_CONFIGURE_ARGS) \ ) ## $(PATCH_LIBTOOL) $(@D)/libtool touch $@ amuleadunanza-unpack: $(AMULEADUNANZA_BUILD_DIR)/.configured # # This builds the actual binary. # $(AMULEADUNANZA_BUILD_DIR)/.built: $(AMULEADUNANZA_BUILD_DIR)/.configured rm -f $@ $(MAKE) -C $(@D) HOSTCC=$(HOSTCC) touch $@ # # This is the build convenience target. # amuleadunanza: $(AMULEADUNANZA_BUILD_DIR)/.built # # If you are building a library, then you need to stage it too. # $(AMULEADUNANZA_BUILD_DIR)/.staged: $(AMULEADUNANZA_BUILD_DIR)/.built rm -f $(AMULEADUNANZA_BUILD_DIR)/.staged $(MAKE) -C $(AMULEADUNANZA_BUILD_DIR) DESTDIR=$(STAGING_DIR) install touch $(AMULEADUNANZA_BUILD_DIR)/.staged # amuleadunanza-stage: $(AMULEADUNANZA_BUILD_DIR)/.staged # # This rule creates a control file for ipkg. It is no longer # necessary to create a seperate control file under sources/amule # $(AMULEADUNANZA_IPK_DIR)/CONTROL/control: @install -d $(@D) @rm -f $@ @echo "Package: amule" >>$@ @echo "Architecture: $(TARGET_ARCH)" >>$@ @echo "Priority: $(AMULEADUNANZA_PRIORITY)" >>$@ @echo "Section: $(AMULEADUNANZA_SECTION)" >>$@ @echo "Version: $(AMULEADUNANZA_VERSION)-$(AMULEADUNANZA_IPK_VERSION)" >>$@ @echo "Maintainer: $(AMULEADUNANZA_MAINTAINER)" >>$@ @echo "Source: $(AMULEADUNANZA_SITE)/$(AMULEADUNANZA_SOURCE)" >>$@ @echo "Description: $(AMULEADUNANZA_DESCRIPTION)" >>$@ @echo "Depends: $(AMULEADUNANZA_DEPENDS)" >>$@ @echo "Suggests: $(AMULEADUNANZA_SUGGESTS)" >>$@ @echo "Conflicts: $(AMULEADUNANZA_CONFLICTS)" >>$@ # # This builds the IPK file. # # Binaries should be installed into $(AMULEADUNANZA_IPK_DIR)/opt/sbin or $(AMULEADUNANZA_IPK_DIR)/opt/bin # (use the location in a well-known Linux distro as a guide for choosing sbin or bin). # Libraries and include files should be installed into $(AMULEADUNANZA_IPK_DIR)/opt/{lib,include} # Configuration files should be installed in $(AMULEADUNANZA_IPK_DIR)/opt/etc/amule/... # Documentation files should be installed in $(AMULEADUNANZA_IPK_DIR)/opt/doc/amule/... # Daemon startup scripts should be installed in $(AMULEADUNANZA_IPK_DIR)/opt/etc/init.d/S??amule # # You may need to patch your application to make it use these locations. # $(AMULEADUNANZA_IPK): $(AMULEADUNANZA_BUILD_DIR)/.built rm -rf $(AMULEADUNANZA_IPK_DIR) $(BUILD_DIR)/amuleadunanza_*_$(TARGET_ARCH).ipk $(MAKE) -C $(AMULEADUNANZA_BUILD_DIR) DESTDIR=$(AMULEADUNANZA_IPK_DIR) program_transform_name=s/^$(GNU_TARGET_NAME)-// install-strip # install -d $(AMULEADUNANZA_IPK_DIR)/opt/etc/ # install -m 644 $(AMULEADUNANZA_SOURCE_DIR)/amule.conf $(AMULEADUNANZA_IPK_DIR)/opt/etc/amule.conf install -d $(AMULEADUNANZA_IPK_DIR)/opt/etc/init.d install -m 755 $(AMULEADUNANZA_SOURCE_DIR)/platforms/Optware/rc.amuledadunanza $(AMULEADUNANZA_IPK_DIR)/opt/etc/init.d/S57amuledadunanza $(MAKE) $(AMULEADUNANZA_IPK_DIR)/CONTROL/control # install -m 755 $(AMULEADUNANZA_SOURCE_DIR)/postinst $(AMULEADUNANZA_IPK_DIR)/CONTROL/postinst # install -m 755 $(AMULEADUNANZA_SOURCE_DIR)/prerm $(AMULEADUNANZA_IPK_DIR)/CONTROL/prerm echo $(AMULEADUNANZA_CONFFILES) | sed -e 's/ /\n/g' > $(AMULEADUNANZA_IPK_DIR)/CONTROL/conffiles cd $(BUILD_DIR); $(IPKG_BUILD) $(AMULEADUNANZA_IPK_DIR) $(WHAT_TO_DO_WITH_IPK_DIR) $(AMULEADUNANZA_IPK_DIR) # # This is called from the top level makefile to create the IPK file. # amuleadunanza-ipk: $(AMULEADUNANZA_IPK) # # This is called from the top level makefile to clean all of the built files. # amuleadunanza-clean: rm -f $(AMULEADUNANZA_BUILD_DIR)/.built -$(MAKE) -C $(AMULEADUNANZA_BUILD_DIR) clean # # This is called from the top level makefile to clean all dynamically created # directories. # amuleadunanza-dirclean: rm -rf $(BUILD_DIR)/$(AMULEADUNANZA_DIR) $(AMULEADUNANZA_BUILD_DIR) rm -rf $(AMULEADUNANZA_IPK_DIR) $(AMULEADUNANZA_IPK) # # # Some sanity check for the package. # amuleadunanza-check: $(AMULEADUNANZA_IPK) perl scripts/optware-check-package.pl --target=$(OPTWARE_TARGET) $^ amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Optware/rc.amulewebadunanza0000644000175000017500000000000012016754523025024 0ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/0000755000175000017500000000000012053222136020625 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/0000755000175000017500000000000012053222136022651 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/EC.mm0000644000175000017500000004774211772155611023523 0ustar l3onl3on #import "EC.h" #import @implementation ECTag @synthesize tagName = m_name; @synthesize tagType = m_type; @synthesize subtags = m_subtags; + (id)tagFromBuffer:(uint8_t **) buffer withLenght:(int) length { ECTag *tag = nil; //[[ECTag alloc] init]; if ( length < 4 ) { NSLog(@"[EC] buffer for tag is too short"); return nil; } uint16_t name16 = *(uint16_t *)(*buffer); name16 = ntohs(name16); bool have_subtags = (name16 & 1) != 0; name16 >>= 1; ECTagNames tag_name = (ECTagNames)(name16); *buffer += sizeof(name16); uint8_t type8 = *(*buffer); ECTagTypes tag_type = (ECTagTypes)type8; *buffer += sizeof(type8); uint32_t size32 = *(uint32_t *)(*buffer); size32 = ntohl(size32); *buffer += sizeof(uint32_t); NSMutableArray *subtags = have_subtags ? [ECTag readSubtags:buffer withLenght:(length-3)] : nil; switch (tag_type) { case EC_TAGTYPE_UINT8: tag = [ECTagInt8 tagFromBuffer:buffer]; break; case EC_TAGTYPE_UINT16: tag = [ECTagInt16 tagFromBuffer:buffer]; break; case EC_TAGTYPE_UINT32: tag = [ECTagInt32 tagFromBuffer:buffer]; break; case EC_TAGTYPE_UINT64: tag = [ECTagInt64 tagFromBuffer:buffer]; break; case EC_TAGTYPE_HASH16: tag = [ECTagMD5 tagFromBuffer:buffer]; break; case EC_TAGTYPE_STRING: tag = [ECTagString tagFromBuffer:buffer]; break; default: ; break; } if ( tag != nil ) { tag->m_name = tag_name; tag->m_subtags = subtags; } return tag; } + (NSMutableArray *)readSubtags:(uint8_t **) buffer withLenght:(int) length { uint16_t count16 = *(uint16_t *)(*buffer); count16 = ntohs(count16); *buffer += sizeof(count16); NSMutableArray *array = [[NSMutableArray alloc] init]; [array retain]; for(int i = 0; i < count16; i++) { id tag = [ECTag tagFromBuffer:buffer withLenght:length]; if ( tag != nil ) { [array addObject:tag]; } } return array; } - (void)writeToSocket:(NSOutputStream *) socket { uint16_t name16 = (uint16_t)m_name; name16 <<= 1; uint8_t type8 = (uint8_t)m_type; if ( [m_subtags count] ) { name16 |= 1; } name16 = htons(name16); [socket write:(uint8_t *)&name16 maxLength:sizeof(name16)]; [socket write:&type8 maxLength:sizeof(type8)]; uint32_t size32 = [self getSize]; size32 = htonl(size32); [socket write:(uint8_t *)&size32 maxLength:sizeof(size32)]; } - (void)writeSubtagsToSocket:(NSOutputStream *) socket { uint16_t count16 = [m_subtags count]; count16 = htons(count16); [socket write:(uint8_t *)&count16 maxLength:sizeof(count16)]; for (ECTag *t in m_subtags) { [t writeToSocket:socket]; } } - (int)getSize { int total_size = m_size; for (ECTag *t in m_subtags) { total_size += [t getSize]; // name + type + size total_size += (2 + 1 + 4); if ([t->m_subtags count]) { total_size += 2; } } return total_size; } - (id)tagByName:(ECTagNames) tagname { ECTag *mytag = nil; for (ECTag *t in m_subtags) { if (t.tagName == tagname) { mytag = t; break; } } return mytag; } - (void)initSubtags { m_subtags = [NSMutableArray array]; [m_subtags retain]; } - (void) dealloc { [m_subtags release]; [super dealloc]; } - (uint64_t)tagInt64ByName: (ECTagNames) tagname { ECTag *st = [self tagByName: tagname]; if (st == nil) { return 0; } uint64_t value = 0; switch ([st getSize]) { case 1: { ECTagInt8 *t = (ECTagInt8 *)st; value = t.uint8Value; break; } case 2: { ECTagInt16 *t = (ECTagInt16 *)st; value = t.uint16Value; break; } case 4: { ECTagInt32 *t = (ECTagInt32 *)st; value = t.uint32Value; break; } case 8: { ECTagInt64 *t = (ECTagInt64 *)st; value = t.uint64Value; break; } } return value; } - (int)tagCount { return [m_subtags count]; } @end @implementation ECTagInt8 @synthesize uint8Value = m_val; + (id)tagFromInt8:(uint8_t) value withName:(ECTagNames) name { ECTagInt8 *tag = [[ECTagInt8 alloc] init]; tag->m_val = value; tag->m_size = 1; tag->m_type = EC_TAGTYPE_UINT8; tag->m_name = name; return tag; } + (id)tagFromBuffer:(uint8_t **) buffer { ECTagInt8 *tag = [[ECTagInt8 alloc] init]; tag->m_val = **buffer; tag->m_size = 1; tag->m_type = EC_TAGTYPE_UINT8; *buffer += 1; return tag; } - (void)writeToSocket:(NSOutputStream *) socket { [super writeToSocket:socket]; [socket write:&m_val maxLength:sizeof(m_val)]; } @end @implementation ECTagInt16 @synthesize uint16Value = m_val; + (id)tagFromInt16:(uint16_t) value withName:(ECTagNames) name { ECTagInt16 *tag = [[ECTagInt16 alloc] init]; tag->m_val = value; tag->m_size = 2; tag->m_type = EC_TAGTYPE_UINT16; tag->m_name = name; return tag; } + (id)tagFromBuffer:(uint8_t **) buffer { ECTagInt16 *tag = [[ECTagInt16 alloc] init]; tag->m_val = ntohs(*((uint16_t *)(*buffer))); tag->m_size = 2; tag->m_type = EC_TAGTYPE_UINT16; *buffer += 2; return tag; } @end @implementation ECTagInt32 @synthesize uint32Value = m_val; + (id)tagFromInt32:(uint32_t) value withName:(ECTagNames) name { ECTagInt32 *tag = [[ECTagInt32 alloc] init]; tag->m_val = value; tag->m_size = 4; tag->m_type = EC_TAGTYPE_UINT32; tag->m_name = name; return tag; } + (id)tagFromBuffer:(uint8_t **) buffer { ECTagInt32 *tag = [[ECTagInt32 alloc] init]; tag->m_val = ntohl(*((uint32_t *)(*buffer))); tag->m_size = 4; tag->m_type = EC_TAGTYPE_UINT32; *buffer += 4; return tag; } @end @implementation ECTagInt64 @synthesize uint64Value = m_val; + (id)tagFromInt64:(uint64_t) value withName:(ECTagNames) name { ECTagInt64 *tag = [[ECTagInt64 alloc] init]; tag->m_val = value; tag->m_size = 8; tag->m_type = EC_TAGTYPE_UINT64; tag->m_name = name; return tag; } + (id)tagFromBuffer:(uint8_t **) buffer { ECTagInt64 *tag = [[ECTagInt64 alloc] init]; uint64_t lo, hi; uint32 val32 = *((uint32_t *)(*buffer)); hi = ntohl(val32); *buffer += 4; val32 = *((uint32_t *)(*buffer)); lo = ntohl(val32); *buffer += 4; tag->m_val = (hi << 32) | lo; tag->m_size = 8; tag->m_type = EC_TAGTYPE_UINT64; return tag; } - (void)writeToSocket:(NSOutputStream *) socket { [super writeToSocket:socket]; uint32_t val32 = m_val >> 32; val32 = htonl(val32); [socket write:(uint8_t *)&val32 maxLength:sizeof(val32)]; val32 = m_val & 0xffffffff; val32 = htonl(val32); [socket write:(uint8_t *)&val32 maxLength:sizeof(val32)]; } @end @implementation ECTagData - (void)writeToSocket:(NSOutputStream *) socket { [super writeToSocket:socket]; [socket write:(const uint8_t *)[m_data bytes] maxLength:m_size]; } - (void) dealloc { [m_data release]; [super dealloc]; } + (id)tagFromBuffer:(uint8_t **) buffer withLenght:(int) length { ECTagData *tag = [[ECTagData alloc] init]; tag->m_data = [NSData dataWithBytes: *buffer length: length]; [tag->m_data retain]; return tag; } @end @implementation ECTagMD5 + (id)tagFromString:(NSString *) string withName:(ECTagNames) name { ECTagMD5 *tag = [[ECTagMD5 alloc] init]; CC_MD5_CTX ctx; unsigned char md5data[16]; CC_MD5_Init(&ctx); CC_MD5_Update(&ctx, [string UTF8String], [string length]); CC_MD5_Final(md5data, &ctx); tag->m_data = [NSData dataWithBytes: md5data length: sizeof(md5data)]; [tag->m_data retain]; tag->m_size = 16; tag->m_type = EC_TAGTYPE_HASH16; tag->m_name = name; return tag; } + (id)tagFromBuffer:(uint8_t **) buffer { ECTagMD5 *tag = [[ECTagMD5 alloc] init]; tag->m_data = 0; tag->m_val.lo = *((uint64_t *)(*buffer)); (*buffer) += 8; tag->m_val.hi = *((uint64_t *)(*buffer)); (*buffer) += 8; return tag; } - (MD5Data)getMD5Data { if ( m_data ) { uint8_t *data_ptr = (uint8_t *)[m_data bytes]; uint64_t hi = *(uint64_t *)data_ptr; data_ptr += 8; uint64_t lo = *(uint64_t *)data_ptr; MD5Data md5 = {hi, lo}; return md5; } else { return m_val; } } - (NSString *)stringKey { NSString *s = [NSString stringWithFormat:@"%qx%qx", m_val.hi, m_val.lo]; return s; } @end @implementation ECTagString @synthesize stringValue = m_val; + tagFromString:(NSString *) string withName:(ECTagNames) name { ECTagString *tag = [[ECTagString alloc] init]; const char *rawstring = [string UTF8String]; tag->m_size = strlen(rawstring) + 1; tag->m_data = [NSData dataWithBytes: rawstring length: tag->m_size]; [tag->m_data retain]; tag->m_type = EC_TAGTYPE_STRING; tag->m_name = name; return tag; } + (id)tagFromBuffer:(uint8_t **) buffer { ECTagString *tag = [[ECTagString alloc] init]; tag->m_val = [NSString stringWithCString:(char *)(*buffer) encoding:NSUTF8StringEncoding]; *buffer += [tag->m_val length] + 1; return tag; } @end @implementation ECPacket @synthesize opcode = m_opcode; + (id)packetWithOpcode:(ec_opcode_t) opcode { ECPacket *p = [[ECPacket alloc] init]; [p initWithOpcode:opcode]; return p; } - (void)initWithOpcode:(ec_opcode_t) opcode { m_opcode = opcode; m_flags = 0x20; // allow notification push to my client m_flags |= EC_FLAG_NOTIFY | EC_FLAG_ACCEPTS; [self initSubtags]; } + (id)packetFromBuffer:(uint8_t *) buffer withLength:(int)length { if ( length < 11 ) { return nil; } ECPacket *p = [[ECPacket alloc] init]; uint8_t *data = buffer; p->m_flags = ntohl(*((uint32_t *)data)); data += 4; uint32_t packet_size = ntohl(*((uint32_t *)data)); data += 4; if ( packet_size > 1024*1024 ) { return nil; } p->m_opcode = (ec_opcode_t)(*data); data++; uint16_t tag_count = ntohs(*((uint16_t *)data)); data += 2; if ( tag_count ) { p->m_subtags = [[NSMutableArray alloc] init]; [p->m_subtags retain]; uint8_t *start_ptr = data; for(int i = 0; i < tag_count; i++) { ECTag *tag = [ECTag tagFromBuffer:&data withLenght:(length - (data - start_ptr))]; // some tags are not supported yet if ( tag != nil ) { [p->m_subtags addObject:tag]; } } } return p; } - (void)writeToSocket:(NSOutputStream *) socket { // 1 (command) + 2 (tag count) int packet_size = [self getSize] + 1 + 2; // No need for zlib on client side // if ( packet_size > MaxUncompressedPacket ) { // m_flags |= (Int32)ECFlags.EC_FLAG_ZLIB; // } uint32_t val32 = htonl(m_flags); [socket write:(uint8_t *)&val32 maxLength:sizeof(val32)]; if ( m_flags & EC_FLAG_ACCEPTS ) { [socket write:(uint8_t *)&val32 maxLength:sizeof(val32)]; } val32 = htonl(packet_size); [socket write:(uint8_t *)&val32 maxLength:sizeof(val32)]; [socket write:(uint8_t *)&m_opcode maxLength:sizeof(m_opcode)]; if ( [m_subtags count] ) { [self writeSubtagsToSocket:socket]; } else { uint16_t val16 = 0; [socket write:(uint8_t *)&val16 maxLength:sizeof(val16)]; } } @end @implementation ECLoginAuthPacket - (NSString *)getMD5_Str:(NSString *) str { CC_MD5_CTX ctx; unsigned char md5data[16]; CC_MD5_Init(&ctx); CC_MD5_Update(&ctx, [str UTF8String], [str length]); CC_MD5_Final(md5data, &ctx); NSString *MD5str = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", md5data[0], md5data[1],md5data[2],md5data[3], md5data[4],md5data[5],md5data[6],md5data[7], md5data[8],md5data[9],md5data[10],md5data[11], md5data[12],md5data[13],md5data[14],md5data[15] ]; return MD5str; } + (id)loginPacket:(NSString *) password withSalt:(uint64_t) salt { ECLoginAuthPacket *p = [[ECLoginAuthPacket alloc] init]; [p initWithOpcode:EC_OP_AUTH_PASSWD]; NSString *saltStr = [NSString stringWithFormat:@"%llX", salt]; // CC_MD5_CTX ctx; // unsigned char md5data[16]; // CC_MD5_Init(&ctx); // CC_MD5_Update(&ctx, [saltStr UTF8String], [saltStr length]); // CC_MD5_Final(md5data, &ctx); // NSString *saltMD5 = [NSString stringWithFormat:@"%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x", // md5data[0], md5data[1],md5data[2],md5data[3], // md5data[4],md5data[5],md5data[6],md5data[7], // md5data[8],md5data[9],md5data[10],md5data[11], // md5data[12],md5data[13],md5data[14],md5data[15] // ]; NSString *saltMD5 = [p getMD5_Str: saltStr]; NSString *newPass = [NSString stringWithFormat:@"%@%@", [p getMD5_Str: password], saltMD5]; NSLog(@"[EC] using salt=%@ saltHash=%@ newPass=%@\n", saltStr, saltMD5, newPass); ECTagMD5 *passtag = [ECTagMD5 tagFromString: newPass withName:EC_TAG_PASSWD_HASH]; [p->m_subtags addObject:passtag]; return p; } @end @implementation ECLoginRequestPacket + (id)loginPacket:(NSString *) version { ECLoginRequestPacket *p = [[ECLoginRequestPacket alloc] init]; [p initWithOpcode:EC_OP_AUTH_REQ]; ECTagString *version_tag = [ECTagString tagFromString:version withName:EC_TAG_CLIENT_VERSION]; [p->m_subtags addObject:version_tag]; ECTagString *client_name_tag = [ECTagString tagFromString:@"cocoa-frontend" withName:EC_TAG_CLIENT_NAME]; [p->m_subtags addObject:client_name_tag]; ECTagInt64 *proto_version_tag = [ECTagInt64 tagFromInt64:EC_CURRENT_PROTOCOL_VERSION withName:EC_TAG_PROTOCOL_VERSION]; [p->m_subtags addObject:proto_version_tag]; return p; } @end @implementation ECRemoteConnection @synthesize error = m_error; + (id)remoteConnection { ECRemoteConnection *p = [[ECRemoteConnection alloc] init]; // // rx buffer can be resized as needed // p->m_rxbuf = [NSMutableData dataWithLength:1024]; [p->m_rxbuf retain]; p->m_login_handler = [amuleLoginHandler initWithConnection:p]; [p->m_login_handler retain]; // // client only transmit commands, which are // quite small in size. "big enough" buffer will do the trick // // p->m_txbuf = [NSMutableData dataWithLength:1024]; // [p->m_txbuf retain]; p->m_txbuf = nil; return p; } - (void) dealloc { [m_rxbuf release]; [m_txbuf release]; [m_istream release]; [m_ostream release]; [super dealloc]; } - (bool)isIpv4Address:(NSString *) address { NSArray *ar = [address componentsSeparatedByString:@"."]; if ( [ar count] != 4 ) { return false; } for (NSString *s in ar) { const char *p = [s UTF8String]; while ( *p ) { if ( !isdigit(*p) ) { return false; } p++; } } return true; } - (void)connectToAddress:(NSString *) hostname withPort:(int)trgport { m_error = false; NSHost *host = [NSHost hostWithName:hostname]; NSString *addr = nil; // // On Mac localhost has ipv6 address (linklocal), but amuled listen // only on ipv4 // for (NSString *ad in host.addresses) { NSLog(@"host have address=%@ is_ipv4=%d\n", ad, [self isIpv4Address:ad]); if ( [self isIpv4Address:ad] ) { addr = ad; break; } } if ( addr == nil ) { return; } host = [NSHost hostWithAddress:addr]; [NSStream getStreamsToHost:host port:trgport inputStream:&m_istream outputStream:&m_ostream]; [m_istream retain]; [m_ostream retain]; [m_istream setDelegate:self]; [m_ostream setDelegate:self]; [m_istream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [m_ostream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [m_istream open]; [m_ostream open]; m_remaining_size = 8; m_rx_size = 0; } - (void)sendLogin:(NSString *) password { [m_login_handler usePass: password]; ECLoginRequestPacket *p = [ECLoginRequestPacket loginPacket:@"0.1"]; [self sendPacket:p]; } - (void)sendPacket:(ECPacket *) packet { NSOutputStream *memstream = [NSOutputStream outputStreamToMemory]; [memstream open]; [packet writeToSocket:memstream]; id data = [memstream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]; m_tx_size = [data length]; NSLog(@"[EC] sending packet %d bytes\n", m_tx_size); m_tx_ptr = [m_ostream write:(const uint8_t *)[data bytes] maxLength:[data length]]; NSLog(@"[EC] %d bytes sent\n", m_tx_ptr); if ( m_tx_ptr == m_tx_size ) { m_txbuf = nil; } else { m_txbuf = (NSData *)data; [m_txbuf retain]; } NSStreamStatus stream_status = [m_ostream streamStatus]; switch ( stream_status ) { case NSStreamStatusNotOpen: case NSStreamStatusClosed: case NSStreamStatusError: NSLog(@"[EC] error in output stream\n"); m_error = true; break; default:; } // NSLog(@"[EC] status in output stream=%d\n", stream_status); } - (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode { switch(eventCode) { case NSStreamEventOpenCompleted: { NSLog(@"[EC] open complete\n"); break; } case NSStreamEventErrorOccurred: { NSError *e = [stream streamError]; NSString *description = [e localizedDescription]; NSLog(@"[EC] socket error [%s]\n", [description UTF8String]); break; } case NSStreamEventHasBytesAvailable: { uint8_t *data_ptr = (uint8_t *)[m_rxbuf mutableBytes]; unsigned int len = [m_rxbuf length]; len = [(NSInputStream *)stream read:data_ptr + m_rx_size maxLength:len]; #ifdef EC_RX_DEBUG NSLog(@"[EC] receiving %d bytes, %d in total, %d remaining\n", len, m_rx_size, m_remaining_size); #endif if ( len == 0 ) { // // Remote side must be closed connection // m_error = true; if ( [delegate respondsToSelector:@selector(handleError)] ) { [delegate performSelector:@selector(handleError)]; } } int total_len = len; int packet_offset = 0; while ( total_len != 0 ) { len = ( m_remaining_size > total_len ) ? total_len : m_remaining_size; total_len -= len; // are we still waiting for flags and size? if ( m_rx_size < 8 ) { if ( (m_rx_size + len) >= 8 ) { // got flags and packet size - may proceed //uint32_t flags = *(((uint32_t *)[m_rxbuf mutableBytes]) + 0); uint32_t val32 = *((uint32_t *)(data_ptr + 4 + packet_offset)); int delta = 8 - m_rx_size; m_remaining_size = ntohl(val32) - (len - delta); #ifdef EC_RX_DEBUG NSLog(@"[EC] rx got flags+size, remaining count %d\n", m_remaining_size); #endif } else { m_remaining_size -= len; } } else { m_remaining_size -= len; } m_rx_size += len; if ( m_remaining_size == 0 ) { // // full packet received, call handler // uint8_t *packet_start = data_ptr + packet_offset; int packet_length = [m_rxbuf length] - packet_offset; ECPacket *packet = [ECPacket packetFromBuffer:packet_start withLength:packet_length]; packet_offset += m_rx_size; if ( [m_login_handler loginOK] ) { #ifdef EC_RX_DEBUG NSLog(@"[EC] calling delegate\n"); #endif if ( [delegate respondsToSelector:@selector(handlePacket:)] ) { [delegate performSelector:@selector(handlePacket:) withObject:packet]; } } else { NSLog(@"[EC] login handler\n"); [m_login_handler handlePacket: packet]; } m_remaining_size = 8; m_rx_size = 0; } } break; } case NSStreamEventHasSpaceAvailable: { if ( m_txbuf != nil ) { int remaining = [m_txbuf length] - m_tx_ptr; if ( remaining ) { const uint8_t *txdata = ((const uint8_t *)[m_txbuf bytes]) + m_tx_ptr; int txcount = [m_ostream write:txdata maxLength:remaining]; m_tx_ptr += txcount; } else { [m_txbuf release]; m_txbuf = nil; } } break; } } } - (void)setDelegate:(id)val { delegate = val; } - (id)delegate { return delegate; } @end @implementation amuleLoginHandler + (id)initWithConnection:(ECRemoteConnection *) connection { amuleLoginHandler *obj = [[amuleLoginHandler alloc] init]; obj->m_connection = connection; obj->m_state = LOGIN_REQUEST_SENT; return obj; } - (void)usePass:(NSString *) pass { m_pass = pass; } - (void)handlePacket:(ECPacket *) packet { switch(m_state) { case LOGIN_IDLE: NSLog(@"[EC]: error - no packet should come until request is sent\n"); break; case LOGIN_REQUEST_SENT: if ( packet.opcode == EC_OP_AUTH_SALT ) { uint64_t salt = [packet tagInt64ByName:EC_TAG_PASSWD_SALT]; ECLoginAuthPacket *auth_packet = [ECLoginAuthPacket loginPacket:m_pass withSalt:salt]; [m_connection sendPacket:auth_packet]; m_state = LOGIN_PASS_SENT; } else { NSLog(@"[EC]: error - expecting packet with EC_OP_AUTH_SALT, not [%d]\n", packet.opcode); m_state = LOGIN_IDLE; } break; case LOGIN_PASS_SENT: if ( packet.opcode == EC_OP_AUTH_OK ) { m_state = LOGIN_OK; } else { NSLog(@"[EC]: error - login failed, core replied with code=[%d]\n", packet.opcode); } break; case LOGIN_OK: NSLog(@"[EC]: error - this delegate should be replaced after login completed\n"); break; } } - (void)reset { m_state = LOGIN_IDLE; } - (bool)loginOK { return m_state == LOGIN_OK; } @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/DownloadsViewController.h0000644000175000017500000000074411772155611027672 0ustar l3onl3on#import #import "amuleData.h" @interface DownloadsViewController : NSObject { IBOutlet NSTableView *m_tableview; amuleFileSet *m_fileset; amuleData *m_amuledata; } - (void)saveGui; // TableView datasource methods - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex; - (int)numberOfRowsInTableView:(NSTableView *)aTableView; - (void)linkAmuleData:(amuleData *)amuledata; - (void)reload; @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/EC.h0000644000175000017500000001000511772155611023317 0ustar l3onl3on#import #include "ECCodes.h" #include "ECTagTypes.h" @interface ECTag : NSObject { ECTagTypes m_type; ECTagNames m_name; int m_size; NSMutableArray *m_subtags; } + (id)tagFromBuffer:(uint8_t **) buffer withLenght:(int) length; + (NSMutableArray *)readSubtags:(uint8_t **) buffer withLenght:(int) length; - (void)initSubtags; - (void)writeToSocket:(NSOutputStream *) socket; - (void)writeSubtagsToSocket:(NSOutputStream *) socket; - (int)getSize; - (int)tagCount; - (id)tagByName:(ECTagNames) tagname; - (uint64_t)tagInt64ByName:(ECTagNames) tagname; @property (readonly) ECTagTypes tagType; @property (readonly) ECTagNames tagName; // needed for fast enumeration of subtags in data updates @property (readonly) NSMutableArray *subtags; @end @interface ECTagInt8 : ECTag { uint8_t m_val; } + (id)tagFromInt8:(uint8_t) value withName:(ECTagNames) name; + (id)tagFromBuffer:(uint8_t **) buffer; @property (readonly)uint8_t uint8Value; @end @interface ECTagInt16 : ECTag { uint16_t m_val; } + (id)tagFromInt16:(uint16_t) value withName:(ECTagNames) name; + (id)tagFromBuffer:(uint8_t **) buffer; @property (readonly)uint16_t uint16Value; @end @interface ECTagInt32 : ECTag { uint32_t m_val; } + (id)tagFromInt32:(uint32_t) value withName:(ECTagNames) name; + (id)tagFromBuffer:(uint8_t **) buffer; @property (readonly)uint32_t uint32Value; @end @interface ECTagInt64 : ECTag { uint64_t m_val; } + (id)tagFromInt64:(uint64_t) value withName:(ECTagNames) name; + (id)tagFromBuffer:(uint8_t **) buffer; @property (readonly)uint64_t uint64Value; @end @interface ECTagData : ECTag { NSData *m_data; } - (void)writeToSocket:(NSOutputStream *) socket; + (id)tagFromBuffer:(uint8_t **) buffer withLenght:(int) length; @end typedef struct { uint64_t lo, hi; } MD5Data; @interface ECTagMD5 : ECTagData { // contain either raw data (in case of hashed string) or 2 64-bit words (in case of tag coming from ec) MD5Data m_val; } + (id)tagFromString:(NSString *) string withName:(ECTagNames) name; + (id)tagFromBuffer:(uint8_t **) buffer; - (MD5Data)getMD5Data; - (NSString *)stringKey; @end @interface ECTagString : ECTagData { // string NSString *m_val; } + tagFromString:(NSString *) string withName:(ECTagNames) name; + (id)tagFromBuffer:(uint8_t **) buffer; @property (readonly) NSString * stringValue; @end @interface ECPacket : ECTag { ec_opcode_t m_opcode; uint32_t m_flags; } + (id)packetWithOpcode:(ec_opcode_t) opcode; + (id)packetFromBuffer:(uint8_t *) buffer withLength:(int)length; - (void)initWithOpcode:(ec_opcode_t) opcode; - (void)writeToSocket:(NSOutputStream *) socket; @property (readonly) ec_opcode_t opcode; @end @interface ECLoginAuthPacket : ECPacket { } + (id)loginPacket:(NSString *) password withSalt:(uint64_t) salt; - (NSString *)getMD5_Str:(NSString *) str; @end @interface ECLoginRequestPacket : ECPacket { } + (id)loginPacket:(NSString *) version; @end @class ECRemoteConnection; @interface amuleLoginHandler : NSObject { enum LOGIN_REQUEST_STATE { LOGIN_IDLE, LOGIN_REQUEST_SENT, LOGIN_PASS_SENT, LOGIN_OK } m_state; ECRemoteConnection *m_connection; NSString *m_pass; } + (id)initWithConnection:(ECRemoteConnection *) connection; - (void)handlePacket:(ECPacket *) packet; - (void)usePass:(NSString *) pass; - (void)reset; - (bool)loginOK; @end @interface NSObject (ECRemoteConnection) - (void)handlePacket:(ECPacket *) packet; @end @interface ECRemoteConnection : NSObject { NSInputStream *m_istream; NSOutputStream *m_ostream; NSMutableData *m_rxbuf; int m_rx_size; int m_remaining_size; NSData *m_txbuf; int m_tx_ptr; int m_tx_size; amuleLoginHandler *m_login_handler; id delegate; bool m_error; } + (id)remoteConnection; - (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode; - (void)connectToAddress:(NSString *) hostname withPort:(int)trgport; - (void)sendLogin:(NSString *) password; - (void)sendPacket:(ECPacket *) packet; @property (readonly) bool error; - (void)setDelegate:(id) val; - (id)delegate; @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/AppController.mm0000644000175000017500000001423611772155611026010 0ustar l3onl3on#import "AppController.h" #import "LoginDialogController.h" #import "DownloadsViewController.h" #import "AddLinkDialogController.h" #include #include @implementation AppController - (IBAction)show_Networks:(id)sender { [m_main_tabview selectTabViewItemAtIndex: 2]; // ECLoginPacket *p = [ECLoginPacket loginPacket:@"123456" withVersion:@"0.1"]; // NSOutputStream *stream = [NSOutputStream outputStreamToMemory]; // uint8_t buffer[1024]; // memset(buffer, 0, 1024); // NSOutputStream *stream = [NSOutputStream outputStreamToBuffer:buffer capacity:1024]; // [stream open]; // [p writeToSocket:stream]; // id data = [stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]; // int off = [data length]; // NSLog(@"off=%d", off); // [m_connection sendPacket:p]; } - (IBAction)show_Search:(id)sender { [m_main_tabview selectTabViewItemAtIndex: 1]; } - (IBAction)show_Sharing:(id)sender { [m_main_tabview selectTabViewItemAtIndex: 3]; } - (IBAction)show_Stats:(id)sender { [m_main_tabview selectTabViewItemAtIndex: 4]; } - (IBAction)show_Xfers:(id)sender { [m_main_tabview selectTabViewItemAtIndex: 0]; } -(IBAction)show_Preferences:(id)sender { } -(IBAction)show_About:(id)sender { } - (IBAction)addLink:(id)sender;{ bool dlgResult = [m_add_link_dlg showDlg:nil]; if ( dlgResult ) { ECPacket *packet = [ECPacket packetWithOpcode:EC_OP_ADD_LINK]; [packet.subtags addObject:[ECTagString tagFromString:[m_add_link_dlg link] withName:EC_TAG_ED2K_ID] ]; [m_connection sendPacket:packet]; } } - (bool)askCoreParams { LoginDialogController *dlg = [[LoginDialogController alloc] init]; bool dlgResult = [dlg showDlg:nil]; m_targetaddr = dlg.host; m_targetport = dlg.port; m_corepass = dlg.pass; return dlgResult; } - (void)applicationWillTerminate:(NSNotification *)aNotification { // // Save gui state in all views // if ([m_dload_controller respondsToSelector:@selector(saveGui)]) { [m_dload_controller performSelector:@selector(saveGui)]; } // // Save main window // [[NSUserDefaults standardUserDefaults] setInteger:[m_main_tabview indexOfTabViewItem: [m_main_tabview selectedTabViewItem] ] forKey:@"activeTab"]; // // If we have slave daemon process, terminate it // if ( m_daemon_pid ) { // // started in local mode - terminate daemon // kill(m_daemon_pid, SIGTERM); } NSLog(@"Exiting ...\n"); } - (void)restoreMainWindow { int activeTab = [[NSUserDefaults standardUserDefaults] integerForKey:@"activeTab"]; [m_main_tabview selectTabViewItemAtIndex: activeTab]; } - (void)awakeFromNib { NSUserDefaults *args = [NSUserDefaults standardUserDefaults]; NSString *mode = [args stringForKey:@"mode"]; NSLog(@"amule controller started, mode = [%@]\n", mode); [[NSApplication sharedApplication] setDelegate:self]; [self restoreMainWindow]; m_targetaddr = 0; m_targetport = 0; m_corepass = nil; m_daemon_pid = 0; if ( (mode != nil) && ([mode compare:@"guitest"] == NSOrderedSame) ) { NSLog(@"Started in GUI test mode - will not connect to core"); return; } if ( (mode != nil) && ([mode compare:@"remote"] == NSOrderedSame) ) { m_targetaddr = @"127.0.0.1"; m_targetaddr = @"localhost"; m_targetport = 4712; if (![self askCoreParams] ) { // "Cancel" selected on login dialog [[NSApplication sharedApplication] terminate:self]; } [[NSUserDefaults standardUserDefaults] setObject:m_targetaddr forKey:@"LastTargetHost"]; [[NSUserDefaults standardUserDefaults] setInteger:m_targetport forKey:@"LastTargetPort"]; [[NSUserDefaults standardUserDefaults] synchronize]; NSLog(@"Remote mode selected, target=%@:%d\n", m_targetaddr, m_targetport); } else { NSLog(@"Local mode selected - starting daemon\n"); m_targetaddr = @"127.0.0.1"; m_targetport = 4712; if ( [self startDaemon] == -1 ) { NSRunCriticalAlertPanel(@"Daemon startup error", @"Unable to start core daemon (amuled)", @"OK", nil,nil); [[NSApplication sharedApplication] terminate:self]; } } m_connection = [ECRemoteConnection remoteConnection]; [m_connection retain]; m_data = [amuleData initWithConnection:m_connection]; [m_data retain]; // // bind datastructure to GUI controllers // [m_dload_controller linkAmuleData:m_data]; [m_search_controller linkAmuleData:m_data]; [m_shared_controller linkAmuleData:m_data]; // // daemon (either local or remote) must be running by now // // try to connect 3 times, hopefully giving daemon enough // time to start listening for EC // for(int i = 0; i < 3; i++) { sleep(1); [m_connection connectToAddress:m_targetaddr withPort:m_targetport]; [m_connection sendLogin:@"123456"]; if ( !m_connection.error ) { break; } } if ( m_connection.error ) { NSRunCriticalAlertPanel(@"Connection error", @"Unable to start communication with daemon", @"OK", nil,nil); exit(-1); } } - (int)startDaemon { int pid = fork(); if ( pid == -1 ) { // fork failed return -1; } else if ( pid > 0 ) { sleep(2); NSLog(@"Parent running, calling waitpid for pid %d\n", pid); // parent int status; switch ( waitpid(pid, &status, WNOHANG) ) { case -1: NSLog(@"waitpid() call failed with code %d\n", errno); break; case 0: NSLog(@"Daemon running on pid %d status %d\n", pid, status); m_daemon_pid = pid; break; default: //NSLog(@"waitpid returned pid=%d status=%x\n", pid, status); if ( WIFEXITED(status) ) { int exit_code = WEXITSTATUS(status); NSLog(@"Daemon exec failed - child process exited with status %d", exit_code); return -1; } else if ( WIFSIGNALED(status) ) { int sig_num = WTERMSIG(status); NSLog(@"Child process terminated on signal %d", sig_num); return -1; } else if ( WIFSTOPPED(status) ) { NSLog(@"Child process stopped. Not supposed to happen."); return -1; } else { NSLog(@"Should not get here: child status unknown = %x", status); } break; } return 0; } else { // child NSLog(@"Child running, calling execlp\n"); //execlp("/usr/bin/touch", "/usr/bin/touch", "xxxx", 0); execlp("/Users/lfroen/prog/amule/src/amuled", "/Users/lfroen/prog/amule/src/amuled", 0); NSLog(@"execlp() failed\n"); exit(-1); } return 0; } @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/SourceViewController.m0000644000175000017500000001467011772155611027210 0ustar l3onl3on#import "SourceViewController.h" @implementation BaseItem +(BaseItem*)initWithText:(NSString *)text withViewId:(NSString *) viewId { BaseItem *node = [[BaseItem alloc] init]; node->m_text = [NSString stringWithString:text]; [node->m_text retain]; node->m_subitems = [NSMutableArray arrayWithCapacity:16]; [node->m_subitems retain]; node->m_subitems_count = 0; node->m_view_id = viewId; if ( viewId != nil ) { [node->m_view_id retain]; } // NSString* imageName = [[NSBundle mainBundle] pathForResource:@"Client_Transfer" ofType:@"png"]; // NSImage* imageObj = [[NSImage alloc] initWithContentsOfFile:imageName]; NSString *imageName = @"Client_Transfer"; NSImage* imageObj = [NSImage imageNamed:imageName]; [imageObj retain]; assert(imageObj); node->m_icon = imageObj; return node; } - (void)dealloc { [m_text release]; [m_subitems release]; [super dealloc]; } -(int)subitemsCount { return m_subitems_count; } - (NSString *)text { return m_text; } - (NSString *)viewId { return m_view_id; } - (NSImage *)icon { return m_icon; } - (BaseItem*)itemAtIndex: (int) index { if ( m_subitems_count ) { return [m_subitems objectAtIndex:index]; } return nil; } - (void)activateView:(NSTabView *) view { } - (void)addSubItem:(BaseItem *) item { [m_subitems insertObject:item atIndex:m_subitems_count]; m_subitems_count++; } @end @implementation CategoryItemFactory + (BaseItem *)initFilesItem { BaseItem *it = [BaseItem initWithText:@"Files" withViewId:nil]; BaseItem *all = [BaseItem initWithText:@"All files" withViewId:@"all"]; BaseItem *dl = [BaseItem initWithText:@"Downloads" withViewId:@"downloads"]; BaseItem *ul = [BaseItem initWithText:@"Uploads" withViewId:@"upload"]; BaseItem *sh = [BaseItem initWithText:@"Shared" withViewId:@"shared"]; [it addSubItem:all]; [it addSubItem:dl]; [it addSubItem:ul]; [it addSubItem:sh]; return it; } + (BaseItem *)initNetworksItem { BaseItem *it = [BaseItem initWithText:@"Networks" withViewId:nil]; return it; } + (BaseItem *)initSearchItem { BaseItem *it = [BaseItem initWithText:@"Search" withViewId:nil]; return it; } @end @implementation amuleSourceListDataSource + (amuleSourceListDataSource *)initWithData { amuleSourceListDataSource *obj = [[amuleSourceListDataSource alloc] init]; obj->g_root_items[RootItemFiles] = [CategoryItemFactory initFilesItem]; obj->g_root_items[RootItemNetwork] = [CategoryItemFactory initNetworksItem]; obj->g_root_items[RootItemSearch] = [CategoryItemFactory initSearchItem]; return obj; } - (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item { if ( item == nil ) { return RootItemLast; } return [item subitemsCount]; } - (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item { if ( item == nil ) { return YES; } return [item subitemsCount] ? YES : NO; } - (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item { if ( item == nil ) { return g_root_items[index]; } return [item itemAtIndex: index]; } - (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item { NSString *columnId = [tableColumn identifier]; if ( [columnId compare:@"status"] == NSOrderedSame ) { return nil; } NSString *s = [item text]; return s; } @end @implementation CellWithIcon - (id)init { self = [super init]; if (self != nil) { [self setLineBreakMode:NSLineBreakByTruncatingTail]; } return self; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; return self; } - (id)copyWithZone:(NSZone *)zone { CellWithIcon *result = [super copyWithZone:zone]; if (result != nil) { result->m_icon = nil; [result setIcon:[self icon]]; } return result; } - (void)dealloc { [m_icon release]; [super dealloc]; } - (NSImage *)icon { return m_icon; } - (void)setIcon:(NSImage *)icon { if (icon != m_icon) { [m_icon release]; m_icon = [icon retain]; } } #define PADDING_BEFORE_IMAGE 5.0 #define PADDING_BETWEEN_TITLE_AND_IMAGE 4.0 - (NSRect)imageRectForBounds:(NSRect)bounds { NSRect result = bounds; result.origin.x += PADDING_BEFORE_IMAGE; result.size = [m_icon size]; return result; } - (NSRect)titleRectForBounds:(NSRect)bounds { NSAttributedString *text = [self attributedStringValue]; NSRect result = bounds; NSRect icon_size; icon_size.size = [m_icon size]; result.origin.x += PADDING_BEFORE_IMAGE + icon_size.size.width + PADDING_BETWEEN_TITLE_AND_IMAGE; if (text != nil) { result.size = [text size]; } else { result.size = NSZeroSize; } CGFloat maxX = NSMaxX(bounds) - icon_size.size.height; CGFloat maxWidth = maxX - NSMinX(result); if (maxWidth < 0) { maxWidth = 0; } result.size.width = MIN(NSWidth(result), maxWidth); return result; } - (void)drawInteriorWithFrame:(NSRect)bounds inView:(NSView *)controlView { NSRect imageRect = [self imageRectForBounds:bounds]; [m_icon setFlipped:[controlView isFlipped]]; [m_icon drawInRect:imageRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; NSRect titleRect = [self titleRectForBounds:bounds]; NSAttributedString *title = [self attributedStringValue]; if ([title length] > 0) { [title drawInRect:titleRect]; } } @end @implementation SourceViewController - (void)awakeFromNib { [m_outline_view setDelegate:self]; id datasource = [amuleSourceListDataSource initWithData]; [m_outline_view setDataSource:datasource]; [m_outline_view reloadData]; int i; for(i = 0; i < [m_outline_view numberOfRows];i++) { id item = [m_outline_view itemAtRow:i]; [m_outline_view expandItem:item]; } } - (void)outlineViewSelectionDidChange:(NSNotification *)notification { int selRow = [m_outline_view selectedRow]; id item = [m_outline_view itemAtRow:selRow]; id viewId = [item viewId]; NSLog(@"select tab=%@\n", viewId); [m_tab_view selectTabViewItemWithIdentifier:viewId]; } - (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item { id viewId = [item viewId]; return (viewId == nil) ? NO : YES; } - (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item { // if (tableColumn && [[tableColumn identifier] isEqualToString:@"status"]) { NSImage *icon = [item icon]; if ( [cell isKindOfClass:[CellWithIcon class]] ) { [cell setIcon:icon]; } } @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/main.m0000644000175000017500000000037311772155611023770 0ustar l3onl3on// // main.m // cocoa-mule // // Created by leonid on 13/09/08. // Copyright __MyCompanyName__ 2008. All rights reserved. // #import int main(int argc, char *argv[]) { return NSApplicationMain(argc, (const char **) argv); } amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/amuleData.mm0000644000175000017500000002652011772155611025120 0ustar l3onl3on #import "amuleData.h" @implementation amuleFile @synthesize name = m_name; @synthesize size = m_size; - (unsigned)hash { return m_hash.lo ^ m_hash.hi; } - (NSString *)key { NSString *s = [NSString stringWithFormat:@"%qx%qx", m_hash.hi, m_hash.lo]; return s; } - (BOOL)isEqual: (id) object { if ([object isKindOfClass:[amuleFile class]]) { amuleFile *myobj = (amuleFile *)object; return ((myobj->m_hash.lo == m_hash.lo) && (myobj->m_hash.hi == m_hash.hi)); } else { return false; } } - (NSString *)convertWithPrefix:(uint64_t)number { NSString *res = nil; double dnum = number; if ( number < 1024 ) { // bytes res = [NSString stringWithFormat:@"%llu bytes", number]; } else if ( number < 1024*1024 ) { // K res = [NSString stringWithFormat:@"%0.2f Kb", dnum / 1024.0]; } else if ( number < 1024*1024*1024 ) { // M res = [NSString stringWithFormat:@"%.2f Mb", dnum / 1048576.0]; } else { res = [NSString stringWithFormat:@"%.2f Gb", dnum / 1073741824.0]; } return res; } @end @implementation DownloadingFile @synthesize src_count = m_src_count; @synthesize non_current_src_count = m_non_current_src_count; @synthesize xfer_src_count = m_xfer_src_count; @synthesize a4af_src_count = m_a4af_src_count; @synthesize speed = m_speed; @synthesize size_done = m_size_done; @synthesize size_xfer = m_size_xfer; @synthesize prio = m_prio; @dynamic sprio; - (NSString *)sprio { return [self prioToString: m_prio]; } + (id)createFromEC: (ECTagMD5 *) tag { DownloadingFile *obj = [[DownloadingFile alloc] init]; obj->m_hash = [tag getMD5Data]; ECTag *nametag = [tag tagByName: EC_TAG_PARTFILE_NAME]; ECTagString *stag = (ECTagString *)nametag; obj->m_name = stag.stringValue;; obj->m_size = [tag tagInt64ByName: EC_TAG_PARTFILE_SIZE_FULL]; NSLog(@"[EC]: added partfile [%@]\n", obj->m_name); [obj updateFromEC:tag]; return obj; } - (void)updateFromEC:(ECTagMD5 *) tag { NSLog(@"[EC]: updating partfile [%@]\n", m_name); m_size_done = [tag tagInt64ByName: EC_TAG_PARTFILE_SIZE_DONE]; m_size_xfer = [tag tagInt64ByName:EC_TAG_PARTFILE_SIZE_XFER]; m_speed = [tag tagInt64ByName:EC_TAG_PARTFILE_SPEED]; m_src_count = [tag tagInt64ByName: EC_TAG_PARTFILE_SOURCE_COUNT]; m_non_current_src_count = [tag tagInt64ByName: EC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT]; m_xfer_src_count = [tag tagInt64ByName: EC_TAG_PARTFILE_SOURCE_COUNT_XFER]; m_a4af_src_count = [tag tagInt64ByName: EC_TAG_PARTFILE_SOURCE_COUNT_A4AF]; m_prio = [tag tagInt64ByName:EC_TAG_PARTFILE_PRIO]; if ( m_prio > 10 ) { m_auto_prio = true; m_prio -= 10; } else { m_auto_prio = false; } } - (NSString *)prioToString:(int)prio { NSString *s = nil; switch (prio) { case 0: s = @"Low"; break; case 1: s = @"Normal"; break; case 2: s = @"High"; break; case 3: s = @"Very High"; break; case 4: s = @"Very Low"; break; case 5: s = @"Auto"; break; case 6: s = @"PowerShare"; break; default: break; } if ( m_auto_prio ) { s = [s stringByAppendingString:@" (auto)"]; } return s; } @end @implementation SearchFile @synthesize src_count = m_src_count; @synthesize complete_src_count = m_complete_src_count; + (id)createFromEC: (ECTagMD5 *) tag { SearchFile *obj = [[SearchFile alloc] init]; obj->m_hash = [tag getMD5Data]; ECTag *nametag = [tag tagByName: EC_TAG_PARTFILE_NAME]; ECTagString *stag = (ECTagString *)nametag; obj->m_name = stag.stringValue;; obj->m_size = [tag tagInt64ByName: EC_TAG_PARTFILE_SIZE_FULL]; obj->m_known = ([tag tagByName: EC_TAG_KNOWNFILE] == nil) ? false : true; [obj updateFromEC:tag]; return obj; } - (void)updateFromEC:(ECTagMD5 *) tag { m_src_count = [tag tagInt64ByName: EC_TAG_PARTFILE_SOURCE_COUNT]; m_complete_src_count = [tag tagInt64ByName: EC_TAG_PARTFILE_SOURCE_COUNT_XFER]; } @end @implementation SharedFile @synthesize size_xfer = m_size_xfer; @synthesize size_xfer_all = m_size_xfer_all; @synthesize req_count = m_req_count; @synthesize req_count_all = m_req_count_all; @synthesize accept_count = m_accept_count; @synthesize accept_count_all = m_accept_count_all; @synthesize prio = m_prio; @dynamic sprio; - (NSString *)sprio { return [self prioToString: m_prio]; } + (id)createFromEC: (ECTagMD5 *) tag { SharedFile *obj = [[SharedFile alloc] init]; obj->m_hash = [tag getMD5Data]; ECTag *nametag = [tag tagByName: EC_TAG_PARTFILE_NAME]; ECTagString *stag = (ECTagString *)nametag; obj->m_name = stag.stringValue;; obj->m_size = [tag tagInt64ByName: EC_TAG_PARTFILE_SIZE_FULL]; [obj updateFromEC:tag]; return obj; } - (NSString *)prioToString:(int)prio { NSString *s = nil; switch (prio) { case 0: s = @"Low"; break; case 1: s = @"Normal"; break; case 2: s = @"High"; break; case 3: s = @"Very High"; break; case 4: s = @"Very Low"; break; case 5: s = @"Auto"; break; case 6: s = @"PowerShare"; break; default: break; } if ( m_auto_prio ) { s = [s stringByAppendingString:@" (auto)"]; } return s; } - (void)updateFromEC:(ECTagMD5 *) tag { m_req_count = [tag tagInt64ByName: EC_TAG_KNOWNFILE_REQ_COUNT]; m_req_count_all = [tag tagInt64ByName: EC_TAG_KNOWNFILE_REQ_COUNT_ALL]; m_accept_count = [tag tagInt64ByName: EC_TAG_KNOWNFILE_ACCEPT_COUNT]; m_accept_count_all = [tag tagInt64ByName: EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL]; m_size_xfer = [tag tagInt64ByName: EC_TAG_KNOWNFILE_XFERRED]; m_size_xfer_all = [tag tagInt64ByName: EC_TAG_KNOWNFILE_XFERRED_ALL]; m_prio = [tag tagInt64ByName:EC_TAG_PARTFILE_PRIO]; if ( m_prio > 10 ) { m_auto_prio = true; m_prio -= 10; } else { m_auto_prio = false; } } @end @implementation amuleFileSet - (id)init { if ((self = [super init])) { m_file_dict = [NSMutableDictionary dictionaryWithCapacity:256]; m_file_array = [[NSMutableArray alloc] init]; } return self; } - (int)count { return [m_file_dict count]; } - (void)insertObject:(id)object { id objKey = [object key]; [m_file_dict setObject:object forKey:objKey]; [m_file_array addObject:object]; [self reloadGui]; } - (void)reloadGui { if ([m_gui_controller respondsToSelector:@selector(reload:)]) { [m_gui_controller performSelector:@selector(reload:)]; } else { NSLog(@"Internal error: gui controller doesnt respond to 'reload'\n"); } // if ([m_gui_controller respondsToSelector:[m_gui_controller reload]) { // [m_gui_controller performSelector:@selector(reload)]; // } else { // NSLog(@"Internal error: gui controller doesnt respond to 'reload'\n"); // } } - (id)objectAtIndex:(int)index { return [m_file_array objectAtIndex:index]; } - (id)objectForKey:(id)key { return [m_file_dict objectForKey:key]; } - (void)removeAtIndex:(int)index { id curr_obj = [m_file_array objectAtIndex:index]; id key = [curr_obj key]; [m_file_dict removeObjectForKey:key]; [m_file_array removeObjectAtIndex:index]; [self reloadGui]; } - (void)removeAtKey:(id)key { [m_file_dict removeObjectForKey:key]; int index = -1; for (int i = 0; i < [m_file_array count]; i++) { id curr_obj = [m_file_array objectAtIndex:i]; if ([curr_obj key] == key) { index = i; break; } } if ( index != -1 ) { [m_file_array removeObjectAtIndex:index]; } else { NSLog(@"Internal error: object not found in array\n"); } [self reloadGui]; } - (void)setGuiController:(id)controller { m_gui_controller = controller; } @end @implementation amuleData @synthesize downloads = m_downloads; @synthesize shared = m_shared; @synthesize search_resuls = m_search_results; + (id)initWithConnection:(ECRemoteConnection *) connection { amuleData *obj = [[amuleData alloc] init]; connection.delegate = obj; obj->m_connection = connection; obj->m_downloads = [[amuleFileSet alloc] init]; obj->m_shared = [[amuleFileSet alloc] init]; obj->m_search_results = [[amuleFileSet alloc] init]; return obj; } - (void)handlePacket:(ECPacket *) packet { switch(packet.opcode) { case EC_OP_STATS : { break; } case EC_OP_DLOAD_QUEUE: { [self handleDownloadQueueUpdate: packet]; break; } case EC_OP_SHARED_FILES: { [self handleSharedFilesUpdate: packet]; break; } case EC_OP_SEARCH_RESULTS: { [self handleSearchUpdate: packet]; break; } default: { NSLog(@"[EC] packet with opcode %d not handled\n", packet.opcode); } } } - (void)handleError { NSRunCriticalAlertPanel(@"Daemon communication error", @"Connection with core daemon (amuled) failed", @"Quit", nil,nil); exit(-1); } - (void)handleDownloadQueueUpdate:(ECPacket *) packet { for (ECTag *t in packet.subtags) { if ( [t isKindOfClass:[ECTagMD5 class]] ) { ECTagMD5 *tag = (ECTagMD5 *)t; if ( [tag tagCount] == 0 ) { // // Only hash here - indication to remove the object // [m_downloads removeAtKey:[tag stringKey]]; } else { NSLog(@"[EC] filehash=[%@]\n", [tag stringKey]); DownloadingFile *file = [m_downloads objectForKey:[tag stringKey]]; if ( file == nil ) { file = [DownloadingFile createFromEC:tag]; [m_downloads insertObject:file]; } else { DownloadingFile *file = [m_downloads objectForKey:[tag stringKey]]; [file updateFromEC:tag]; } } } else { NSLog(@"[EC] bad tag type '%s'\n", [t class]); } } } - (void)handleSharedFilesUpdate:(ECPacket *) packet { for (ECTag *t in packet.subtags) { if ( [t isKindOfClass:[ECTagMD5 class]] ) { ECTagMD5 *tag = (ECTagMD5 *)t; if ( [tag tagCount] == 0 ) { // // Only hash here - indication to remove the object // [m_shared removeAtKey:[tag stringKey]]; } else { NSLog(@"[EC] filehash=[%@]\n", [tag stringKey]); SharedFile *file = [m_shared objectForKey:[tag stringKey]]; if ( file == nil ) { file = [SharedFile createFromEC:tag]; [m_shared insertObject:file]; } else { SharedFile *file = [m_shared objectForKey:[tag stringKey]]; [file updateFromEC:tag]; } } } else { NSLog(@"[EC] bad tag type '%s'\n", [t class]); } } } - (void)handleSearchUpdate:(ECPacket *) packet { for (ECTag *t in packet.subtags) { if ( [t isKindOfClass:[ECTagMD5 class]] ) { ECTagMD5 *tag = (ECTagMD5 *)t; SearchFile *file = [m_search_results objectForKey:[tag stringKey]]; if ( file == nil ) { file = [SearchFile createFromEC:tag]; [m_search_results insertObject:file]; } else { SearchFile *file = [m_search_results objectForKey:[tag stringKey]]; [file updateFromEC:tag]; } } } } - (void)handleStatusUpdate:(ECPacket *) packet { } - (void)startSearch:(NSString *)text searchType:(EC_SEARCH_TYPE)searchType minSize:(uint64_t)minSize maxSize:(uint64_t)maxSize avail:(uint32_t)avail { ECPacket *packet = [ECPacket packetWithOpcode:EC_OP_SEARCH_START]; ECTagInt8 *searchtag = [ECTagInt8 tagFromInt8:searchType withName:EC_TAG_SEARCH_TYPE]; [searchtag.subtags addObject:[ECTagString tagFromString:text withName:EC_TAG_SEARCH_NAME]]; if ( minSize ) { [searchtag.subtags addObject:[ECTagInt64 tagFromInt64:minSize withName:EC_TAG_SEARCH_MIN_SIZE]]; } if ( maxSize ) { [searchtag.subtags addObject:[ECTagInt64 tagFromInt64:maxSize withName:EC_TAG_SEARCH_MAX_SIZE]]; } if ( avail ) { [searchtag.subtags addObject:[ECTagInt32 tagFromInt32:avail withName:EC_TAG_SEARCH_AVAILABILITY]]; } [packet.subtags addObject:searchtag]; [m_connection sendPacket:packet]; m_search_running = true; } - (void)stopSearch { ECPacket *packet = [ECPacket packetWithOpcode:EC_OP_SEARCH_STOP]; [m_connection sendPacket:packet]; m_search_running = false; } @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/SharedFilesViewController.h0000644000175000017500000000072611772155611030131 0ustar l3onl3on#import #import "amuleData.h" @interface SharedFilesViewController : NSObject { IBOutlet NSTableView *m_table_view; amuleFileSet *m_fileset; amuleData *m_amuledata; } // TableView datasource methods - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex; - (int)numberOfRowsInTableView:(NSTableView *)aTableView; - (void)linkAmuleData:(amuleData *)amuledata; - (void)reload; @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/LoginDialogController.m0000644000175000017500000000234311772155611027277 0ustar l3onl3on#import "LoginDialogController.h" @implementation LoginDialogController @synthesize host = m_host; @synthesize pass = m_pass; @synthesize port = m_port; - (bool)showDlg:(NSWindow *)window { if ( m_dlg == nil ) { [NSBundle loadNibNamed: @"LoginDialog" owner: self]; } NSString *default_host = [[NSUserDefaults standardUserDefaults] stringForKey:@"LastTargetHost"]; if ( default_host != nil ) { [m_host_field setStringValue: default_host]; } NSString *default_port = [[NSUserDefaults standardUserDefaults] stringForKey:@"LastTargetPort"]; if ( default_port != nil ) { [m_port_field setStringValue:[[NSUserDefaults standardUserDefaults] stringForKey:@"LastTargetPort"]]; } [NSApp beginSheet: m_dlg modalForWindow: window modalDelegate: nil didEndSelector: nil contextInfo: nil]; [NSApp runModalForWindow: m_dlg]; [NSApp endSheet: m_dlg]; [m_dlg orderOut: self]; return m_dlg_result; } - (IBAction)closeCancel:(id)sender { m_dlg_result = false; [NSApp stopModal]; } - (IBAction)closeOK:(id)sender { m_dlg_result = true; m_host = [m_host_field stringValue]; NSString *port = [m_port_field stringValue]; m_port = [port intValue]; m_pass = [m_pass_field stringValue]; [NSApp stopModal]; } @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/SharedFilesViewController.mm0000644000175000017500000000241011772155611030303 0ustar l3onl3on#import "SharedFilesViewController.h" @implementation SharedFilesViewController - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { id value = nil; NSString *columnId = [aTableColumn identifier]; SharedFile *i = [m_fileset objectAtIndex:rowIndex]; if ( [columnId compare:@"filename"] == NSOrderedSame ) { value = i.name; } else if ( [columnId compare:@"size"] == NSOrderedSame ) { value = [i convertWithPrefix: i.size]; } else if ( [columnId compare:@"xfer"] == NSOrderedSame ) { value = [i convertWithPrefix: i.size_xfer]; } else if ( [columnId compare:@"xfer_all"] == NSOrderedSame ) { value = [i convertWithPrefix: i.size_xfer_all]; } else if ( [columnId compare:@"prio"] == NSOrderedSame ) { value = i.sprio; } else { value = @"ERROR: bad column id"; } return value; } - (int)numberOfRowsInTableView:(NSTableView *)aTableView { return [m_fileset count]; } - (void)linkAmuleData:(amuleData *)amuledata { m_amuledata = amuledata; m_fileset = m_amuledata.shared; [amuledata.shared setGuiController:self]; } - (void)reload { [m_table_view reloadData]; } - (void)awakeFromNib { [m_table_view setDelegate:self]; [m_table_view setDataSource:self]; // // load column status // } @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/AddLinkDialogController.m0000644000175000017500000000104411772155611027532 0ustar l3onl3on#import "AddLinkDialogController.h" @implementation AddLinkDialogController - (bool)showDlg:(NSWindow *)window { [m_link setStringValue:@""]; [NSApp beginSheet: m_dlg modalForWindow: window modalDelegate: nil didEndSelector: nil contextInfo: nil]; [NSApp runModalForWindow: m_dlg]; [NSApp endSheet: m_dlg]; [m_dlg orderOut: self]; return m_dlg_result; } - (IBAction)closeOK:(id)sender { [NSApp stopModal]; m_link_val = [m_link stringValue]; m_dlg_result = true; } - (NSString *)link { return m_link_val; } @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/cocoa-mule_Prefix.pch0000644000175000017500000000022711772155611026721 0ustar l3onl3on// // Prefix header for all source files of the 'cocoa-mule' target in the 'cocoa-mule' project // #ifdef __OBJC__ #import #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/LoginDialogController.h0000644000175000017500000000076411772155611027277 0ustar l3onl3on#import @interface LoginDialogController : NSObject { IBOutlet id m_dlg; IBOutlet NSTextField *m_host_field; IBOutlet NSTextField *m_port_field; IBOutlet NSTextField *m_pass_field; bool m_dlg_result; NSString *m_host, *m_pass; int m_port; } - (bool)showDlg:(NSWindow *)window; - (IBAction)closeCancel:(id)sender; - (IBAction)closeOK:(id)sender; @property (readonly) NSString *host; @property (readonly) int port; @property (readonly) NSString *pass; @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/cocoa-mule.xcodeproj/0000755000175000017500000000000012053222136026671 5ustar l3onl3on././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/cocoa-mule.xcodeproj/project.pbxprojamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/cocoa-mule.xcodeproj/project.pbxp0000644000175000017500000011251011772155611031244 0ustar l3onl3on// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 44; objects = { /* Begin PBXBuildFile section */ 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; }; 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; B201E59A0F77F945002001E0 /* BWToolkitFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B203F8B10F719AE100054498 /* BWToolkitFramework.framework */; }; B203F8EF0F719B4C00054498 /* BWToolkitFramework.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = B203F8B10F719AE100054498 /* BWToolkitFramework.framework */; }; B20467430F20DD1E00972AD8 /* AddLinkDialogController.m in Sources */ = {isa = PBXBuildFile; fileRef = B20467420F20DD1E00972AD8 /* AddLinkDialogController.m */; }; B20E7E300EFD313400EF0D8D /* LoginDialog.nib in Resources */ = {isa = PBXBuildFile; fileRef = B20E7E2F0EFD313400EF0D8D /* LoginDialog.nib */; }; B20E7E360EFD322C00EF0D8D /* LoginDialogController.m in Sources */ = {isa = PBXBuildFile; fileRef = B20E7E350EFD322C00EF0D8D /* LoginDialogController.m */; }; B228A7A60E7C426B009B94B4 /* EC.mm in Sources */ = {isa = PBXBuildFile; fileRef = B228A7A50E7C426B009B94B4 /* EC.mm */; }; B2499CA70E7CBBF400F67575 /* Client_A4AFNoNeededPartsQueueFull.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C7E0E7CBBF400F67575 /* Client_A4AFNoNeededPartsQueueFull.png */; }; B2499CA80E7CBBF400F67575 /* Client_aMule.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C7F0E7CBBF400F67575 /* Client_aMule.png */; }; B2499CA90E7CBBF400F67575 /* Client_BadGuy.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C800E7CBBF400F67575 /* Client_BadGuy.png */; }; B2499CAA0E7CBBF400F67575 /* Client_CommentOnly.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C810E7CBBF400F67575 /* Client_CommentOnly.png */; }; B2499CAB0E7CBBF400F67575 /* Client_Connecting.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C820E7CBBF400F67575 /* Client_Connecting.png */; }; B2499CAC0E7CBBF400F67575 /* Client_CreditsGrey.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C830E7CBBF400F67575 /* Client_CreditsGrey.png */; }; B2499CAD0E7CBBF400F67575 /* Client_CreditsYellow.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C840E7CBBF400F67575 /* Client_CreditsYellow.png */; }; B2499CAE0E7CBBF400F67575 /* Client_eDonkeyHybrid.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C850E7CBBF400F67575 /* Client_eDonkeyHybrid.png */; }; B2499CAF0E7CBBF400F67575 /* Client_eMule.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C860E7CBBF400F67575 /* Client_eMule.png */; }; B2499CB00E7CBBF400F67575 /* Client_Encrypted.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C870E7CBBF400F67575 /* Client_Encrypted.png */; }; B2499CB10E7CBBF400F67575 /* Client_ExcellentRatingOnFile.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C880E7CBBF400F67575 /* Client_ExcellentRatingOnFile.png */; }; B2499CB20E7CBBF400F67575 /* Client_ExtendedProtocol.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C890E7CBBF400F67575 /* Client_ExtendedProtocol.png */; }; B2499CB30E7CBBF400F67575 /* Client_FairRatingOnFile.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C8A0E7CBBF400F67575 /* Client_FairRatingOnFile.png */; }; B2499CB40E7CBBF400F67575 /* Client_Friend.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C8B0E7CBBF400F67575 /* Client_Friend.png */; }; B2499CB50E7CBBF400F67575 /* Client_GoodRatingOnFile.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C8C0E7CBBF400F67575 /* Client_GoodRatingOnFile.png */; }; B2499CB60E7CBBF400F67575 /* Client_InvalidRatingOnFile.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C8D0E7CBBF400F67575 /* Client_InvalidRatingOnFile.png */; }; B2499CB70E7CBBF400F67575 /* Client_lphant.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C8E0E7CBBF400F67575 /* Client_lphant.png */; }; B2499CB80E7CBBF400F67575 /* Client_mlDonkey.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C8F0E7CBBF400F67575 /* Client_mlDonkey.png */; }; B2499CB90E7CBBF400F67575 /* Client_OnQueue.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C900E7CBBF400F67575 /* Client_OnQueue.png */; }; B2499CBA0E7CBBF400F67575 /* Client_PoorRatingOnFile.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C910E7CBBF400F67575 /* Client_PoorRatingOnFile.png */; }; B2499CBB0E7CBBF400F67575 /* Client_SecIdent.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C920E7CBBF400F67575 /* Client_SecIdent.png */; }; B2499CBC0E7CBBF400F67575 /* Client_Shareaza.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C930E7CBBF400F67575 /* Client_Shareaza.png */; }; B2499CBD0E7CBBF400F67575 /* Client_StatusUnknown.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C940E7CBBF400F67575 /* Client_StatusUnknown.png */; }; B2499CBE0E7CBBF400F67575 /* Client_Transfer.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C950E7CBBF400F67575 /* Client_Transfer.png */; }; B2499CBF0E7CBBF400F67575 /* Client_Unknown.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C960E7CBBF400F67575 /* Client_Unknown.png */; }; B2499CC00E7CBBF400F67575 /* Client_Upload.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C970E7CBBF400F67575 /* Client_Upload.png */; }; B2499CC10E7CBBF400F67575 /* Client_xMule.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C980E7CBBF400F67575 /* Client_xMule.png */; }; B2499CC30E7CBBF400F67575 /* Toolbar_About.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C9A0E7CBBF400F67575 /* Toolbar_About.png */; }; B2499CC40E7CBBF400F67575 /* Toolbar_Blink.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C9B0E7CBBF400F67575 /* Toolbar_Blink.png */; }; B2499CC50E7CBBF400F67575 /* Toolbar_Connect.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C9C0E7CBBF400F67575 /* Toolbar_Connect.png */; }; B2499CC60E7CBBF400F67575 /* Toolbar_Connecting.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C9D0E7CBBF400F67575 /* Toolbar_Connecting.png */; }; B2499CC70E7CBBF400F67575 /* Toolbar_Disconnect.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C9E0E7CBBF400F67575 /* Toolbar_Disconnect.png */; }; B2499CC80E7CBBF400F67575 /* Toolbar_Import.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499C9F0E7CBBF400F67575 /* Toolbar_Import.png */; }; B2499CC90E7CBBF400F67575 /* Toolbar_Messages.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499CA00E7CBBF400F67575 /* Toolbar_Messages.png */; }; B2499CCA0E7CBBF400F67575 /* Toolbar_Network.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499CA10E7CBBF400F67575 /* Toolbar_Network.png */; }; B2499CCB0E7CBBF400F67575 /* Toolbar_Prefs.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499CA20E7CBBF400F67575 /* Toolbar_Prefs.png */; }; B2499CCC0E7CBBF400F67575 /* Toolbar_Search.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499CA30E7CBBF400F67575 /* Toolbar_Search.png */; }; B2499CCD0E7CBBF400F67575 /* Toolbar_Shared.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499CA40E7CBBF400F67575 /* Toolbar_Shared.png */; }; B2499CCE0E7CBBF400F67575 /* Toolbar_Stats.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499CA50E7CBBF400F67575 /* Toolbar_Stats.png */; }; B2499CCF0E7CBBF400F67575 /* Toolbar_Transfers.png in Resources */ = {isa = PBXBuildFile; fileRef = B2499CA60E7CBBF400F67575 /* Toolbar_Transfers.png */; }; B253EAAB0F87465E000EC011 /* SharedFilesViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = B253EAA90F87465E000EC011 /* SharedFilesViewController.mm */; }; B257A4550F1A7AD800DC958E /* SearchViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = B257A4540F1A7AD800DC958E /* SearchViewController.mm */; }; B291B8130F7E122500FF9F46 /* SourceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B291B8110F7E122500FF9F46 /* SourceViewController.m */; }; B2B307A40F05470200AE5E79 /* DownloadsViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = B2B307A30F05470200AE5E79 /* DownloadsViewController.mm */; }; B2CDC5AD0E9541D5009370D9 /* amuleData.mm in Sources */ = {isa = PBXBuildFile; fileRef = B2CDC5AC0E9541D5009370D9 /* amuleData.mm */; }; B2DD60230E7BC65400987099 /* AppController.mm in Sources */ = {isa = PBXBuildFile; fileRef = B2DD60220E7BC65400987099 /* AppController.mm */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ B203F8C60F719B1F00054498 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( B203F8EF0F719B4C00054498 /* BWToolkitFramework.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* cocoa-mule_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "cocoa-mule_Prefix.pch"; sourceTree = ""; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8D1107320486CEB800E47090 /* cocoa-mule.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "cocoa-mule.app"; sourceTree = BUILT_PRODUCTS_DIR; }; B203F8B10F719AE100054498 /* BWToolkitFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BWToolkitFramework.framework; path = ../../BWToolkit/BWToolkitFramework.framework; sourceTree = SOURCE_ROOT; }; B20467410F20DD1E00972AD8 /* AddLinkDialogController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddLinkDialogController.h; sourceTree = ""; }; B20467420F20DD1E00972AD8 /* AddLinkDialogController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AddLinkDialogController.m; sourceTree = ""; }; B20E7E340EFD322C00EF0D8D /* LoginDialogController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginDialogController.h; sourceTree = ""; }; B20E7E350EFD322C00EF0D8D /* LoginDialogController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginDialogController.m; sourceTree = ""; }; B228A7A40E7C426B009B94B4 /* EC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EC.h; sourceTree = ""; }; B228A7A50E7C426B009B94B4 /* EC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = EC.mm; sourceTree = ""; }; B228A7BA0E7C438A009B94B4 /* ECCodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ECCodes.h; path = ../src/libs/ec/cpp/ECCodes.h; sourceTree = SOURCE_ROOT; }; B228A7C70E7C43E1009B94B4 /* ECTagTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ECTagTypes.h; path = ../src/libs/ec/cpp/ECTagTypes.h; sourceTree = SOURCE_ROOT; }; B228A7CA0E7C441A009B94B4 /* ECVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ECVersion.h; path = ../src/libs/ec/cpp/ECVersion.h; sourceTree = SOURCE_ROOT; }; B2499C7E0E7CBBF400F67575 /* Client_A4AFNoNeededPartsQueueFull.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_A4AFNoNeededPartsQueueFull.png; sourceTree = ""; }; B2499C7F0E7CBBF400F67575 /* Client_aMule.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_aMule.png; sourceTree = ""; }; B2499C800E7CBBF400F67575 /* Client_BadGuy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_BadGuy.png; sourceTree = ""; }; B2499C810E7CBBF400F67575 /* Client_CommentOnly.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_CommentOnly.png; sourceTree = ""; }; B2499C820E7CBBF400F67575 /* Client_Connecting.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_Connecting.png; sourceTree = ""; }; B2499C830E7CBBF400F67575 /* Client_CreditsGrey.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_CreditsGrey.png; sourceTree = ""; }; B2499C840E7CBBF400F67575 /* Client_CreditsYellow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_CreditsYellow.png; sourceTree = ""; }; B2499C850E7CBBF400F67575 /* Client_eDonkeyHybrid.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_eDonkeyHybrid.png; sourceTree = ""; }; B2499C860E7CBBF400F67575 /* Client_eMule.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_eMule.png; sourceTree = ""; }; B2499C870E7CBBF400F67575 /* Client_Encrypted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_Encrypted.png; sourceTree = ""; }; B2499C880E7CBBF400F67575 /* Client_ExcellentRatingOnFile.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_ExcellentRatingOnFile.png; sourceTree = ""; }; B2499C890E7CBBF400F67575 /* Client_ExtendedProtocol.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_ExtendedProtocol.png; sourceTree = ""; }; B2499C8A0E7CBBF400F67575 /* Client_FairRatingOnFile.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_FairRatingOnFile.png; sourceTree = ""; }; B2499C8B0E7CBBF400F67575 /* Client_Friend.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_Friend.png; sourceTree = ""; }; B2499C8C0E7CBBF400F67575 /* Client_GoodRatingOnFile.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_GoodRatingOnFile.png; sourceTree = ""; }; B2499C8D0E7CBBF400F67575 /* Client_InvalidRatingOnFile.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_InvalidRatingOnFile.png; sourceTree = ""; }; B2499C8E0E7CBBF400F67575 /* Client_lphant.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_lphant.png; sourceTree = ""; }; B2499C8F0E7CBBF400F67575 /* Client_mlDonkey.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_mlDonkey.png; sourceTree = ""; }; B2499C900E7CBBF400F67575 /* Client_OnQueue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_OnQueue.png; sourceTree = ""; }; B2499C910E7CBBF400F67575 /* Client_PoorRatingOnFile.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_PoorRatingOnFile.png; sourceTree = ""; }; B2499C920E7CBBF400F67575 /* Client_SecIdent.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_SecIdent.png; sourceTree = ""; }; B2499C930E7CBBF400F67575 /* Client_Shareaza.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_Shareaza.png; sourceTree = ""; }; B2499C940E7CBBF400F67575 /* Client_StatusUnknown.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_StatusUnknown.png; sourceTree = ""; }; B2499C950E7CBBF400F67575 /* Client_Transfer.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_Transfer.png; sourceTree = ""; }; B2499C960E7CBBF400F67575 /* Client_Unknown.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_Unknown.png; sourceTree = ""; }; B2499C970E7CBBF400F67575 /* Client_Upload.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_Upload.png; sourceTree = ""; }; B2499C980E7CBBF400F67575 /* Client_xMule.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Client_xMule.png; sourceTree = ""; }; B2499C9A0E7CBBF400F67575 /* Toolbar_About.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_About.png; sourceTree = ""; }; B2499C9B0E7CBBF400F67575 /* Toolbar_Blink.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Blink.png; sourceTree = ""; }; B2499C9C0E7CBBF400F67575 /* Toolbar_Connect.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Connect.png; sourceTree = ""; }; B2499C9D0E7CBBF400F67575 /* Toolbar_Connecting.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Connecting.png; sourceTree = ""; }; B2499C9E0E7CBBF400F67575 /* Toolbar_Disconnect.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Disconnect.png; sourceTree = ""; }; B2499C9F0E7CBBF400F67575 /* Toolbar_Import.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Import.png; sourceTree = ""; }; B2499CA00E7CBBF400F67575 /* Toolbar_Messages.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Messages.png; sourceTree = ""; }; B2499CA10E7CBBF400F67575 /* Toolbar_Network.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Network.png; sourceTree = ""; }; B2499CA20E7CBBF400F67575 /* Toolbar_Prefs.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Prefs.png; sourceTree = ""; }; B2499CA30E7CBBF400F67575 /* Toolbar_Search.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Search.png; sourceTree = ""; }; B2499CA40E7CBBF400F67575 /* Toolbar_Shared.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Shared.png; sourceTree = ""; }; B2499CA50E7CBBF400F67575 /* Toolbar_Stats.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Stats.png; sourceTree = ""; }; B2499CA60E7CBBF400F67575 /* Toolbar_Transfers.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toolbar_Transfers.png; sourceTree = ""; }; B253EAA90F87465E000EC011 /* SharedFilesViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SharedFilesViewController.mm; sourceTree = ""; }; B253EAAA0F87465E000EC011 /* SharedFilesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedFilesViewController.h; sourceTree = ""; }; B257A4530F1A7AD800DC958E /* SearchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchViewController.h; sourceTree = ""; }; B257A4540F1A7AD800DC958E /* SearchViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SearchViewController.mm; sourceTree = ""; }; B291B8110F7E122500FF9F46 /* SourceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SourceViewController.m; sourceTree = ""; }; B291B8120F7E122500FF9F46 /* SourceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceViewController.h; sourceTree = ""; }; B29E77B50EFC357600F4C677 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/LoginDialog.nib; sourceTree = ""; }; B2B307A20F05470200AE5E79 /* DownloadsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DownloadsViewController.h; sourceTree = ""; }; B2B307A30F05470200AE5E79 /* DownloadsViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DownloadsViewController.mm; sourceTree = ""; }; B2CDC5AB0E9541D5009370D9 /* amuleData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = amuleData.h; sourceTree = ""; }; B2CDC5AC0E9541D5009370D9 /* amuleData.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = amuleData.mm; sourceTree = ""; }; B2DD601F0E7BC62A00987099 /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; B2DD60220E7BC65400987099 /* AppController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AppController.mm; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 8D11072E0486CEB800E47090 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( B201E59A0F77F945002001E0 /* BWToolkitFramework.framework in Frameworks */, 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( B2CDC5AB0E9541D5009370D9 /* amuleData.h */, B2CDC5AC0E9541D5009370D9 /* amuleData.mm */, B2B307A20F05470200AE5E79 /* DownloadsViewController.h */, B2B307A30F05470200AE5E79 /* DownloadsViewController.mm */, B253EAA90F87465E000EC011 /* SharedFilesViewController.mm */, B253EAAA0F87465E000EC011 /* SharedFilesViewController.h */, B257A4530F1A7AD800DC958E /* SearchViewController.h */, B257A4540F1A7AD800DC958E /* SearchViewController.mm */, B291B8110F7E122500FF9F46 /* SourceViewController.m */, B291B8120F7E122500FF9F46 /* SourceViewController.h */, 32CA4F630368D1EE00C91783 /* cocoa-mule_Prefix.pch */, ); name = Classes; sourceTree = ""; }; 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( B203F8B10F719AE100054498 /* BWToolkitFramework.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, ); name = "Linked Frameworks"; sourceTree = ""; }; 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { isa = PBXGroup; children = ( 29B97324FDCFA39411CA2CEA /* AppKit.framework */, 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, 29B97325FDCFA39411CA2CEA /* Foundation.framework */, ); name = "Other Frameworks"; sourceTree = ""; }; 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( 8D1107320486CEB800E47090 /* cocoa-mule.app */, ); name = Products; sourceTree = ""; }; 29B97314FDCFA39411CA2CEA /* cocoa-mule */ = { isa = PBXGroup; children = ( B2499C7D0E7CBBF400F67575 /* images */, B228A7C30E7C4393009B94B4 /* EC */, 080E96DDFE201D6D7F000001 /* Classes */, 29B97315FDCFA39411CA2CEA /* GUI */, 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, ); name = "cocoa-mule"; sourceTree = ""; }; 29B97315FDCFA39411CA2CEA /* GUI */ = { isa = PBXGroup; children = ( 29B97316FDCFA39411CA2CEA /* main.m */, B2DD60220E7BC65400987099 /* AppController.mm */, B2DD601F0E7BC62A00987099 /* AppController.h */, B20467410F20DD1E00972AD8 /* AddLinkDialogController.h */, B20467420F20DD1E00972AD8 /* AddLinkDialogController.m */, B20E7E350EFD322C00EF0D8D /* LoginDialogController.m */, B20E7E340EFD322C00EF0D8D /* LoginDialogController.h */, ); name = GUI; sourceTree = ""; }; 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( 8D1107310486CEB800E47090 /* Info.plist */, 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, 29B97318FDCFA39411CA2CEA /* MainMenu.nib */, B20E7E2F0EFD313400EF0D8D /* LoginDialog.nib */, ); name = Resources; sourceTree = ""; }; 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, ); name = Frameworks; sourceTree = ""; }; B228A7C30E7C4393009B94B4 /* EC */ = { isa = PBXGroup; children = ( B228A7A50E7C426B009B94B4 /* EC.mm */, B228A7A40E7C426B009B94B4 /* EC.h */, B228A7BA0E7C438A009B94B4 /* ECCodes.h */, B228A7CA0E7C441A009B94B4 /* ECVersion.h */, B228A7C70E7C43E1009B94B4 /* ECTagTypes.h */, ); name = EC; sourceTree = ""; }; B2499C7D0E7CBBF400F67575 /* images */ = { isa = PBXGroup; children = ( B2499C7E0E7CBBF400F67575 /* Client_A4AFNoNeededPartsQueueFull.png */, B2499C7F0E7CBBF400F67575 /* Client_aMule.png */, B2499C800E7CBBF400F67575 /* Client_BadGuy.png */, B2499C810E7CBBF400F67575 /* Client_CommentOnly.png */, B2499C820E7CBBF400F67575 /* Client_Connecting.png */, B2499C830E7CBBF400F67575 /* Client_CreditsGrey.png */, B2499C840E7CBBF400F67575 /* Client_CreditsYellow.png */, B2499C850E7CBBF400F67575 /* Client_eDonkeyHybrid.png */, B2499C860E7CBBF400F67575 /* Client_eMule.png */, B2499C870E7CBBF400F67575 /* Client_Encrypted.png */, B2499C880E7CBBF400F67575 /* Client_ExcellentRatingOnFile.png */, B2499C890E7CBBF400F67575 /* Client_ExtendedProtocol.png */, B2499C8A0E7CBBF400F67575 /* Client_FairRatingOnFile.png */, B2499C8B0E7CBBF400F67575 /* Client_Friend.png */, B2499C8C0E7CBBF400F67575 /* Client_GoodRatingOnFile.png */, B2499C8D0E7CBBF400F67575 /* Client_InvalidRatingOnFile.png */, B2499C8E0E7CBBF400F67575 /* Client_lphant.png */, B2499C8F0E7CBBF400F67575 /* Client_mlDonkey.png */, B2499C900E7CBBF400F67575 /* Client_OnQueue.png */, B2499C910E7CBBF400F67575 /* Client_PoorRatingOnFile.png */, B2499C920E7CBBF400F67575 /* Client_SecIdent.png */, B2499C930E7CBBF400F67575 /* Client_Shareaza.png */, B2499C940E7CBBF400F67575 /* Client_StatusUnknown.png */, B2499C950E7CBBF400F67575 /* Client_Transfer.png */, B2499C960E7CBBF400F67575 /* Client_Unknown.png */, B2499C970E7CBBF400F67575 /* Client_Upload.png */, B2499C980E7CBBF400F67575 /* Client_xMule.png */, B2499C9A0E7CBBF400F67575 /* Toolbar_About.png */, B2499C9B0E7CBBF400F67575 /* Toolbar_Blink.png */, B2499C9C0E7CBBF400F67575 /* Toolbar_Connect.png */, B2499C9D0E7CBBF400F67575 /* Toolbar_Connecting.png */, B2499C9E0E7CBBF400F67575 /* Toolbar_Disconnect.png */, B2499C9F0E7CBBF400F67575 /* Toolbar_Import.png */, B2499CA00E7CBBF400F67575 /* Toolbar_Messages.png */, B2499CA10E7CBBF400F67575 /* Toolbar_Network.png */, B2499CA20E7CBBF400F67575 /* Toolbar_Prefs.png */, B2499CA30E7CBBF400F67575 /* Toolbar_Search.png */, B2499CA40E7CBBF400F67575 /* Toolbar_Shared.png */, B2499CA50E7CBBF400F67575 /* Toolbar_Stats.png */, B2499CA60E7CBBF400F67575 /* Toolbar_Transfers.png */, ); path = images; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 8D1107260486CEB800E47090 /* cocoa-mule */ = { isa = PBXNativeTarget; buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "cocoa-mule" */; buildPhases = ( 8D1107290486CEB800E47090 /* Resources */, 8D11072C0486CEB800E47090 /* Sources */, 8D11072E0486CEB800E47090 /* Frameworks */, B203F8C60F719B1F00054498 /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); name = "cocoa-mule"; productInstallPath = "$(HOME)/Applications"; productName = "cocoa-mule"; productReference = 8D1107320486CEB800E47090 /* cocoa-mule.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "cocoa-mule" */; compatibilityVersion = "Xcode 3.0"; hasScannedForEncodings = 1; mainGroup = 29B97314FDCFA39411CA2CEA /* cocoa-mule */; projectDirPath = ""; projectRoot = ""; targets = ( 8D1107260486CEB800E47090 /* cocoa-mule */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 8D1107290486CEB800E47090 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */, 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, B2499CA70E7CBBF400F67575 /* Client_A4AFNoNeededPartsQueueFull.png in Resources */, B2499CA80E7CBBF400F67575 /* Client_aMule.png in Resources */, B2499CA90E7CBBF400F67575 /* Client_BadGuy.png in Resources */, B2499CAA0E7CBBF400F67575 /* Client_CommentOnly.png in Resources */, B2499CAB0E7CBBF400F67575 /* Client_Connecting.png in Resources */, B2499CAC0E7CBBF400F67575 /* Client_CreditsGrey.png in Resources */, B2499CAD0E7CBBF400F67575 /* Client_CreditsYellow.png in Resources */, B2499CAE0E7CBBF400F67575 /* Client_eDonkeyHybrid.png in Resources */, B2499CAF0E7CBBF400F67575 /* Client_eMule.png in Resources */, B2499CB00E7CBBF400F67575 /* Client_Encrypted.png in Resources */, B2499CB10E7CBBF400F67575 /* Client_ExcellentRatingOnFile.png in Resources */, B2499CB20E7CBBF400F67575 /* Client_ExtendedProtocol.png in Resources */, B2499CB30E7CBBF400F67575 /* Client_FairRatingOnFile.png in Resources */, B2499CB40E7CBBF400F67575 /* Client_Friend.png in Resources */, B2499CB50E7CBBF400F67575 /* Client_GoodRatingOnFile.png in Resources */, B2499CB60E7CBBF400F67575 /* Client_InvalidRatingOnFile.png in Resources */, B2499CB70E7CBBF400F67575 /* Client_lphant.png in Resources */, B2499CB80E7CBBF400F67575 /* Client_mlDonkey.png in Resources */, B2499CB90E7CBBF400F67575 /* Client_OnQueue.png in Resources */, B2499CBA0E7CBBF400F67575 /* Client_PoorRatingOnFile.png in Resources */, B2499CBB0E7CBBF400F67575 /* Client_SecIdent.png in Resources */, B2499CBC0E7CBBF400F67575 /* Client_Shareaza.png in Resources */, B2499CBD0E7CBBF400F67575 /* Client_StatusUnknown.png in Resources */, B2499CBE0E7CBBF400F67575 /* Client_Transfer.png in Resources */, B2499CBF0E7CBBF400F67575 /* Client_Unknown.png in Resources */, B2499CC00E7CBBF400F67575 /* Client_Upload.png in Resources */, B2499CC10E7CBBF400F67575 /* Client_xMule.png in Resources */, B2499CC30E7CBBF400F67575 /* Toolbar_About.png in Resources */, B2499CC40E7CBBF400F67575 /* Toolbar_Blink.png in Resources */, B2499CC50E7CBBF400F67575 /* Toolbar_Connect.png in Resources */, B2499CC60E7CBBF400F67575 /* Toolbar_Connecting.png in Resources */, B2499CC70E7CBBF400F67575 /* Toolbar_Disconnect.png in Resources */, B2499CC80E7CBBF400F67575 /* Toolbar_Import.png in Resources */, B2499CC90E7CBBF400F67575 /* Toolbar_Messages.png in Resources */, B2499CCA0E7CBBF400F67575 /* Toolbar_Network.png in Resources */, B2499CCB0E7CBBF400F67575 /* Toolbar_Prefs.png in Resources */, B2499CCC0E7CBBF400F67575 /* Toolbar_Search.png in Resources */, B2499CCD0E7CBBF400F67575 /* Toolbar_Shared.png in Resources */, B2499CCE0E7CBBF400F67575 /* Toolbar_Stats.png in Resources */, B2499CCF0E7CBBF400F67575 /* Toolbar_Transfers.png in Resources */, B20E7E300EFD313400EF0D8D /* LoginDialog.nib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 8D11072C0486CEB800E47090 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 8D11072D0486CEB800E47090 /* main.m in Sources */, B2DD60230E7BC65400987099 /* AppController.mm in Sources */, B228A7A60E7C426B009B94B4 /* EC.mm in Sources */, B2CDC5AD0E9541D5009370D9 /* amuleData.mm in Sources */, B20E7E360EFD322C00EF0D8D /* LoginDialogController.m in Sources */, B2B307A40F05470200AE5E79 /* DownloadsViewController.mm in Sources */, B257A4550F1A7AD800DC958E /* SearchViewController.mm in Sources */, B20467430F20DD1E00972AD8 /* AddLinkDialogController.m in Sources */, B291B8130F7E122500FF9F46 /* SourceViewController.m in Sources */, B253EAAB0F87465E000EC011 /* SharedFilesViewController.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C165DFE840E0CC02AAC07 /* English */, ); name = InfoPlist.strings; sourceTree = ""; }; 29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = { isa = PBXVariantGroup; children = ( 29B97319FDCFA39411CA2CEA /* English */, ); name = MainMenu.nib; sourceTree = ""; }; B20E7E2F0EFD313400EF0D8D /* LoginDialog.nib */ = { isa = PBXVariantGroup; children = ( B29E77B50EFC357600F4C677 /* English */, ); name = LoginDialog.nib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../bin/BWToolkit\"", "\"$(SRCROOT)/../../BWToolkit\"", ); GCC_DEBUGGING_SYMBOLS = full; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_ENABLE_OBJC_GC = supported; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "cocoa-mule_Prefix.pch"; GCC_SYMBOLS_PRIVATE_EXTERN = NO; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = "cocoa-mule"; WRAPPER_EXTENSION = app; ZERO_LINK = YES; }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../bin/BWToolkit\"", "\"$(SRCROOT)/../../BWToolkit\"", ); GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "cocoa-mule_Prefix.pch"; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = "cocoa-mule"; WRAPPER_EXTENSION = app; }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CURRENT_PROJECT_VERSION = 2.2; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = YES; GCC_WARN_UNUSED_VARIABLE = YES; PREBINDING = NO; SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; PREBINDING = NO; SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "cocoa-mule" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4B08A954540054247B /* Debug */, C01FCF4C08A954540054247B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; C01FCF4E08A954540054247B /* Build configuration list for PBXProject "cocoa-mule" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4F08A954540054247B /* Debug */, C01FCF5008A954540054247B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/0000755000175000017500000000000012053222136025367 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/InfoPlist.strings0000644000175000017500000000030211772155611030716 0ustar l3onl3onÿþ/* Localized versions of Info.plist keys */ NSHumanReadableCopyright = "© aMule project, 2008";amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/LoginDialog.nib/0000755000175000017500000000000012053222136030326 5ustar l3onl3on././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/LoginDialog.nib/keyedobjects.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/LoginDialog.nib/key0000644000175000017500000001725511772155611031065 0ustar l3onl3onbplist00Ô X$versionT$topY$archiverX$objects† Ñ]IB.objectdata€_NSKeyedArchiver¯· 156<=AENVfo p„…Ž‘›œ¢¤©ª­±²µºÁÂÆËãäåèìïú¿û$%'*+,349<>AIJ]^_bemnuvw€ˆ‰Ž’—˜š¢£ª«³´¾ÆÇÏÛßåíîõöþÿ  %&( ),-./2389<ABGHMNadexŠœžŸ ¡¢£¤¥¦§¨©ª«¯³Íçèé˜êëìíîïðñòóôàÖõö÷øùúûþU$nullß  !"#$%&'()*+,-./0VNSRootV$class]NSObjectsKeys_NSClassesValues_NSAccessibilityOidsValues]NSConnections[NSNamesKeys[NSFramework]NSClassesKeysZNSOidsKeys]NSNamesValues_NSAccessibilityConnectors]NSFontManager_NSVisibleWindows_NSObjectsValues_NSAccessibilityOidsKeysYNSNextOid\NSOidsValues€€¶€ƒ€™€µ€€‡€€˜€š€ˆ€³€€€†€´A€›Ò234[NSClassName€€_LoginDialogControllerÒ789:X$classesZ$classname¢:;^NSCustomObjectXNSObject_IBCocoaFrameworkÒ>?@ZNS.objects€ Ò78BC£CD;\NSMutableSetUNSSetÒ>FG€2¦HIJKLM€ €"€z€}€€ÔOPQRSU]NSDestinationXNSSourceWNSLabel€!€ €€ ØWXYZ[\]^_`abcd^_NSNextResponderWNSFrameVNSCellXNSvFlagsYNSEnabledXNSWindow[NSSuperview€ €€ € € € ×WXgZ\]hijkldhZNSSubviews€[€1€m€]€ €[_{{84, 27}, {180, 22}}Úqrstuvwxyz{|}~Scƒ_NSAllowedInputLocales[NSCellFlags_NSBackgroundColorZNSContentsYNSSupport]NSControlView\NSCellFlags2_NSDrawsBackground[NSTextColor€aþ@€€€€€ @ €PÔ†‡ˆ‰Š‹ŒVNSSizeVNSNameXNSfFlags€#@*€\LucidaGrandeÒ78¢;VNSFontÕ’“”•–—˜™šWNSColor\NSColorSpace[NSColorName]NSCatalogName€€€€VSystem_textBackgroundColorÓ“ž– ¡WNSWhite€B1Ò78£’¢’;Õ’“”•–¦˜§š€€€€YtextColorÓ“ž– ¬€B0Ò>®¯€¡°€_&NSAllRomanInputSourcesLocaleIdentifierÒ78³´¢´;WNSArrayÒ78¶·¥·¸¹Y;_NSSecureTextFieldCell_NSTextFieldCell\NSActionCellÒ78»¼¦¼½¾¿À;_NSSecureTextField[NSTextFieldYNSControlVNSView[NSResponder\m_pass_fieldÒ78ÃÄ£ÄÅ;_NSNibOutletConnector^NSNibConnectorÔOPQRÈÊ€!€#€€yÜÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâ\NSWindowView\NSScreenRect]NSWindowTitleYNSWTFlags]NSWindowClass\NSWindowRectYNSMaxSize_NSWindowBacking_NSWindowStyleMaskYNSMinSize[NSViewClass€)€x€u€%px€&€$€w€v€(_{{242, 477}, {568, 282}}_Connect to aMule coreÒæç\YNS.string€'Ò78éê£êë;_NSMutableStringXNSStringÒæçî€'TViewÙWðgZñ\2]dóôõlödøù_NSOriginalClassName[NSFrameSize€ €t€+€,€r€ €*€s[loginDialogÒ>Fý€2¨þÿh€-€;€B€G€Q€U€X€[ÞWX gZ \  ] ×bdß×YNSBoxType[NSTitleCell]NSTransparent\NSBorderTypeYNSOffsets_NSTitlePosition]NSContentView€)€:€5€3€.€ €4€)€/Ò>F€2¡€/ÖWXZ\]þi!ldþ€-€1€0€ €-_{{1, 1}, {529, 61}}Ò78&¿£¿À;Ò78()£)´;^NSMutableArray_{{17, 185}, {531, 77}}V{0, 0}×rstuwy-.}012þ€9€€6€7€8_aMule core running at:Ô†‡ˆ‰6‹8€#@&€ Ó“ž– ;€M0 0.80000001Ò78=¸¤¸¹Y;Ò78?@¤@¿À;UNSBoxØWXYZ[\]×CDEbcd×€)€A€<€= € €)_{{155, 36}, {96, 32}}ÜrKLMNtuvOwPQR~TUVWÿZ[\_NSAlternateContents_NSPeriodicInterval^NSButtonFlags2_NSKeyEquivalent_NSPeriodicDelay]NSButtonFlagsÿÿÿÿ„þ€@€€?€>€€;Èÿÿÿÿ†‚@ÿROKQ Ò78`a¤a¹Y;\NSButtonCellÒ78cd¥d¾¿À;XNSButtonØWXYZ[\]×Chibcd×€)€A€C€D € €)_{{312, 36}, {96, 32}}ÜrKLMNtuvOwP-R~TUqrZ[\€@€€F€E€€BVCancelQØWXYZ[\]×yz{bcd×€)€P€H€I € €)_{{33, 217}, {38, 17}}Ørstuvwy.ƒ„‡þ@€9€K€J€€G€NUHost:Õ’“”•–‹˜Œš€€M€L€\controlColorÓ“ž– ‘€K0.66666669Õ’“”•–¦˜•š€€€O€_controlTextColorÒ78™½¥½¾¿À;ØWXYZ[\]×yžbcd×€)€P€R€S € €)_{{322, 217}, {38, 17}}Ørstuvwy.ƒ¦‡€9€K€T€€Q€NUPort:ØWXYZ[\]×y®¯bcd×€)€P€V€W € €)_{{365, 215}, {96, 22}}Ùrstuvwxyµ.}~»cƒÿÿÿÿ”qþA€9€€€€U@$ €ØWXYZ[\]×yÁÂbcd×€)€P€Y€Z € €)_{{80, 215}, {191, 22}}Ùrstuvwxyµ.}~cƒ€9€€€€X €ÞWX gZ \  ] ×ÒÓÕÖdß×^€)€:€o€n€\ € €4€)€ Ò>FÝ€2¡^€ Ò>Fá€2£âSä€^€ €bØWXYZ[\]^yèébcd^€ €P€_€` € € _{{15, 29}, {64, 17}}Ørstuvwy.ƒñ⇀9€K€a€€^€NXPasswordØWXYZ[\]^Cùúbcd^€ €A€c€d € € _{{340, 28}, {126, 18}}ÞrKLMNtuvOwPQR~Tß~äZ ]NSNormalImage_NSAlternateImage€@€€f€j€€e€€bH®P€¯^×UhâÈäSÿþ€U€ €)€Q€„€[€/€X€^€#€B€b€ €;€-€GÒ23c€€…]NSApplicationÒ>®g€¯×hÈ××þ×^×^^×××€)€[€#€)€€)€-€)€ €€)€ € €)€)€)Ò>®z€¯×ÈâUähSÿþ€U€)€Q€#€^€„€B€b€[€€ €;€-€G€XÒ>®Œ€¯Ž‘’“”•–—˜™š›€‰€Š€‹€Œ€€Ž€€€‘€’€“€”€•€–€—ZText Field]login Dialog_Static Text (Port:)VWindow_Static Text (Password)[Application_Push Button (Cancel)_Check Box (Save password)_Box (Authentication)\File's Owner\Text Field-2_Push Button (OK)_Box (aMule core running at:)_Static Text (Host:)\Text Field-1Ò>®­€¡×€)Ò>®±€¡ø€*Ò>®µ€¯JI×H^UhLKâÈäSMÿþ€U€z€"€)€Q€ € €„€[€€€/€X€}€^€#€B€b€ €€;€-€GÒ>®Ï€¯ÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäå怜€€ž€Ÿ€ €¡€¢€£€¤€¥€¦€§€¨€©€ª€«€¬€­€®€¯€°€±€²# ";?ÿÿÿÿÿÿÿý4>@$:5<69  !Ò>Fý€2 Ò>®€ Ò>®€ Ò78¢;^NSIBObjectData"'1:?DRTf×Ý(/6DVr€Œ˜¦±¿Ûéü(2?ACEGIKMOQSUWY[]_aclxz|”¦±¶ÅÎáêõ÷ø$&3579;=?P^goqsuw˜ª²¹ÂÌÕáãåçéìíïñ!$&(@i¡¬¶ÄÑåñóøúüþ  #*35>@CPY^ez‚›©«­¯±³ºÐÝåçéìõú!.03<>ACluz‚‹–®ÀÍÖã÷  -6=Tctvxz|­ºÇÕßíú   * 4 @ B D F H M O Q S U W Y [ v Ž — ¡ £ ¬ ³ Å Î × Ù Þ   % ' ) + - / 1 3 5 A J L ] _ a c e g i k m ¦ ° ¼ Ê × á ó           ! # & ( A C E G I K a j q z © ° Í Ò Ô Ö Ø Ú Ü õ      # % 3 < E N W ] ~ € ‚ „ † ‡ ‰ ‹ £ Ô ê ÿ  2 @ I K M O Q S U W Y [ ` i l n w € – ¡ ª Ë Í Ï Ñ Ó Ô Ö Ø ð!#%')+-46WY[]_`bd|¢¤¦¨ª¬®´ÉËÍÏÑÞëíù)2=^`bdfgik„¥§©«­¯±·ØÚÜÞàáãåþ#,.0246;<>_aceghjl…ª¬®°²´µ·ðòôöøùûýÿ ')+-NPRTVWY[r“•—™›Ÿ¨ÉËÍÏÑÒÔÖï(6IKMOQSUWY^lyˆŠŒŽ–Ÿ¨­ÀÉÕ×Ùâçý,IKMOQSboq|…Š™±¼Ùâçú&/6N_acegt…‡‰‹–§©«­¯¼ÅÇêìîðòôöøúüþ %.0SUWY[]_acegikmoqs|~Ÿ¡£¥§©«­¯±³µ·¹»½ÆÈéëíïñóõ÷ùûýÿ 6=Vby•¬¹ÆÙø$&)+469;DFwy{}ƒ…‡‰‹‘“•—™›Ÿ¡£¥®°áãåçéëíïñóõ÷ùûýÿ   $&(*,.02468:<>GIJSUV_abkp././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/LoginDialog.nib/info.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/LoginDialog.nib/inf0000644000175000017500000000105611772155611031041 0ustar l3onl3on IBFramework Version 629 IBLastKnownRelativeProjectPath ../../cocoa-mule.xcodeproj IBOldestOS 5 IBOpenObjects 6 IBSystem Version 9G55 targetFramework IBCocoaFramework ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/LoginDialog.nib/classes.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/LoginDialog.nib/cla0000644000175000017500000000220611772155611031022 0ustar l3onl3on IBClasses CLASS FirstResponder LANGUAGE ObjC SUPERCLASS NSObject ACTIONS closeCancel id closeOK id CLASS LoginDialogController LANGUAGE ObjC OUTLETS m_dlg id m_host_field NSTextField m_pass_field NSTextField m_port_field NSTextField SUPERCLASS NSObject CLASS NSObject LANGUAGE ObjC IBVersion 1 amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/MainMenu.nib/0000755000175000017500000000000012053222136027647 5ustar l3onl3on././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/MainMenu.nib/designable.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/MainMenu.nib/design0000644000175000017500000062132711772155611031070 0ustar l3onl3on 1050 9G55 677 949.43 353.00 YES YES com.brandonwalkin.BWToolkit com.apple.InterfaceBuilderKit com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES NSApplication FirstResponder NSApplication AMainMenu YES aMule 1048576 2147483647 NSImage NSMenuCheckmark NSImage NSMenuMixedState submenuAction: aMule YES About aMule 2147483647 YES YES 1048576 2147483647 UHJlZmVyZW5jZXPigKY , 1048576 2147483647 YES YES 1048576 2147483647 Services 1048576 2147483647 submenuAction: Services YES _NSServicesMenu YES YES 1048576 2147483647 Hide aMule h 1048576 2147483647 Hide Others h 1572864 2147483647 Show All 1048576 2147483647 YES YES 1048576 2147483647 Quit aMule q 1048576 2147483647 _NSAppleMenu File 1048576 2147483647 submenuAction: File YES Add ed2k link n 1048576 2147483647 YES YES 1048576 2147483647 Page Setup... P 1179648 2147483647 UHJpbnTigKY p 1048576 2147483647 View 1048576 2147483647 submenuAction: View YES Show Toolbar t 1572864 2147483647 Window 1048576 2147483647 submenuAction: Window YES Minimize m 1048576 2147483647 Zoom 1048576 2147483647 YES YES 1048576 2147483647 Bring All to Front 1048576 2147483647 _NSWindowsMenu Help 1048576 2147483647 submenuAction: Help YES aMule Help ? 1048576 2147483647 _NSMainMenu 15 2 {{335, 74}, {1008, 676}} 1946157056 aMule NSWindow 4914F9B0-9937-4196-9689-7544DD4FD074 YES YES NO NO 1 1 YES YES 159427B1-5D8B-4F3C-A2FC-F2F453EA1D14 62AA47AC-884E-456B-9F94-1F3F04647AF6 767BD347-1697-4006-B735-86CBF19465F8 958D1D36-B9A4-4CDD-8CDC-7693F081D29B D068E44F-D3FF-4B1C-BB88-295078B93B92 NSToolbarCustomizeToolbarItem NSToolbarFlexibleSpaceItem NSToolbarPrintItem NSToolbarSeparatorItem NSToolbarShowColorsItem NSToolbarShowFontsItem NSToolbarSpaceItem YES 159427B1-5D8B-4F3C-A2FC-F2F453EA1D14 Transfers Transfers NSImage Toolbar_Transfers {0, 0} {0, 0} YES YES -1 YES 0 62AA47AC-884E-456B-9F94-1F3F04647AF6 Shared Shared NSImage Toolbar_Shared {0, 0} {0, 0} YES YES -1 YES 0 767BD347-1697-4006-B735-86CBF19465F8 Stats Stats NSImage Toolbar_Stats {0, 0} {0, 0} YES YES -1 YES 0 958D1D36-B9A4-4CDD-8CDC-7693F081D29B Network Network NSImage Toolbar_Network {0, 0} {0, 0} YES YES -1 YES 0 D068E44F-D3FF-4B1C-BB88-295078B93B92 Search Search NSImage Toolbar_Search {0, 0} {0, 0} YES YES -1 YES 0 NSToolbarCustomizeToolbarItem Customize Customize Customize Toolbar 683671552 {32, 32} YES YES TU0AKgAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAICAgbAAAABAAAAAAEBAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAQEBAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAENDQ0dJSUlW11dXbBpaWnDb29vzyAgIGUPDw8xAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAABsbGyUoKChIHh4ePSkpKUonJycsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDCEJCQoWvr6/i9fX1/fX19f7h4eH82dnZ+YODg9sYGBg8 AAAAAAAAAAAAAAAAAAAAAAAAAAJFRUV6ZGRkvf39/f/+/v7//////0NDQ7QAAAAEAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8PDx9ISEiH2tra8/7+/v/j4+P/2NjY/7a2tv+ysrL/ i4uL7j09PeUKCgoSAAAAAAAAAAAAAAAAUVFRlo2NjfTIyMj6x8fH/56env97e3v/ISEhMAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDw8lRUVFjtDQ0Pb+/v7/4eHh/dDQ0P+NjY3/ Tk5O6yoqKrIfHx+gGhoarCIiImwAAAABAAAAADg4OGWenp7/y8vL/d3d3f+8vLz/hYWF/0RERE0AAAAA AAAAAAAAAAAfHx8sAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj8/P2za2try9/f3/+vr6/7Kysr/ dnZ2/D4+PvwgICB+EBAQNAICAgcAAAAPERERPQMDAwkQEBASh4eH2MHBwf/o6Oj/39/f/3R0dP88PDxO AAAAAAAAAAAAAAAAcnJylkNDQ58HBwcIAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgYMfn5+uMvLy/3Hx8f+ u7u7/5OTk/9CQkL7HRYL7AICAgQAAAAAAAAAAAAAAAAAAAAAAgICBS4uLjOWlpbz6urq/+7u7v+rq6v/ IyMj0wAAAAAAAAAAAAAAAIGBgZGLi4v/QkJC2Q0NDSYAAAAAAAAAAAAAAAAAAAAAGRkZJF5eXoylpaXz pqam/4qKiv91dXX/YWFh+iwkHvojEADrJhcGoAgICA0AAAAAAAAAAAAAAAAAAAAAPj4+RJaWlvr19fX/ 6+vr/7W1tfVaWlrlAwMDbAAAAACKioqcoqKi/7+/v/9HR0fnDg4OJwAAAAAAAAAAHR0dK3V1dZ+pqanC +vr6/9vb2/99fX3+Y2Nj+EhISOgMCAP4JhIA8jgaAPBxNADsNyMMjgcHBwsAAAAAAAAAAAAAAAAMDAwO m5ub+Orq6v/y8vL/0NDQ7ICAgMtkZGTqcHBwzLOzs//Pz8//0tLS/0xMTNoJCQkhAAAAABoaGjZ/f3+4 //////j4+P/9/f3/9vb2/0dHR/8oKCjkKSkpoAQCAJUNBQDXVSgA5XY5AOuTSADcOiUOewYGBgoAAAAA AAAAAB4eHmFlZWX76Ojo/+7u7v/5+fn/5OTk9Li4uO3f39//8PDw/+Hh4f/Ly8v/Ozs7rQICAgMAAAAA GBgYL3x8fP///////////7S0tP+np6f/QEBA+xUVFXUJCQkkBAQEDgcFA20jEQC7YzIA3n9BAOiiUwDK NiMObgYGBgoTExNIOzs74bGxsf3Dw8P/1dXV////////////////////////////8/Pz/3R0dOcPDw9H AAAAAQAAAAAAAAAAVVVVooCAgP/v7+//v7+//2VlZf86OjrLAQEBBgAAAAAAAAAAAAAAABENCVctFwCl ZTQA1oZFAOCqWgDAMiMTgzExMcKzs7P4wcHB/5+fn//W1tb///////v7+/v//////////729vfOFhYXy IyMjdAAAAAMAAAABAAAAAAAAAAAAAAAASkpKmlpaWv+RkZH/Nzc38hgYGG4AAAABAAAAAAAAAAAAAAAA AAAAAAsFAEUwGACbaDcAzXpCAOFnRiLjs7Kx+MTExP+pqan/09PT/3p6evpdXV3rbGxs6l1dXfVXV1fs UlJSxykpKWMAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBmiMjI/8cHBysBQUFHQAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAsFAEAuGACfSzAT47y4s/24uLj/lJSU/9TU1P+Dg4PkMzMzzwYGBgw6OjpB QEBASQ8PDxYbGxshAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIimgoKCi4AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAwJBYS9u7n4r6+v/4GBgf/Pz8//iISB6CYmJqoDAwMK AAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAABUwcHB7qurq/9ubm7/zs7O/5yOgPhlPhbf MhsCegAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMnCgoKZsvLy++pqan/Wlpa/9LS0v+Nh4Hq SCYE4IdDAeSbTgDLNxsAhwAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMOxoaGobV1dXzq6ur/0ZGRv/Z2dn/ hoaGxQkEAIY6HgCyaDMA2YVAAOuWSQDZPh4AngAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGFEoKCio0tLS86urq/8xMTH/ 4uLi/4+Pj84AAABIAAAAAg8HAGg6HQDKaDIA4YI+APCVRQDsRSEAuAAAABMAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFhYrNTU1z9ra2vb8/Pz/ FxcX/+rq6v+amprZAAAASAAAAAIAAAAAAAAAABAIAIY4GwDiaTEA6X46APeVRAD/SyIA0gAAABIAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICBT8/P4asrKz3 0dHR//39/f/z8/P/paWl5gUFBVkAAAACAAAAAAAAAAAAAAAAAAAAABIJAKUxFgD6bTMA9no4AP9uLwD/ KxIAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBwcO QUFBmpqamv+pqan/+Pj4/7GxsfIXFxeBAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHAMogDgD/ WSkA/zwaAPcuEwCyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAEBAQMnJydWUFBQ85aWlvqoqKjfKioqrQEBAQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAsFAOUXCQD6IA4AwgQCADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAgICBBR0dHmi4uLnACAgIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAgDAMwFAgA9AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE AAAACQAAABAAAAAYAAAAIAAAACoAAAAxAAAANgAAADkAAAA4AQEBOQAAAC8AAAAnAAAAHQAAABUAAAAO AAAACgAAAAsAAAAPAAAAFwAAACAAAAAqAAAAMQAAADQAAAAzAAAALQAAACQAAAAbAAAAEgAAAAsAAAAA AAAAAAAAAAQAAAAJAAAAEAAAABgAAAAgAAAAKgAAADEAAAA2AAAAOQAAADgAAAA1AAAALwAAACcAAAAd AAAAFQAAAA4AAAAKAAAACwAAAA8AAAAXAAAAIAAAACoAAAAxAAAANAAAADMAAAAtAAAAJAAAABsAAAAS AAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA EKoBAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE AAABFgADAAAAAQD8AAABFwAEAAAAAQAAEAABHAADAAAAAQABAAABUgADAAAAAQABAAABUwADAAAABAAA ELIAAAAAAAgACAAIAAgAAQABAAEAAQ 3 MCAwAA runToolbarCustomizationPalette: {0, 0} {0, 0} YES YES -1 YES 0 NSToolbarFlexibleSpaceItem Flexible Space {1, 5} {20000, 32} YES YES -1 YES 0 YES YES 1048576 2147483647 NSToolbarPrintItem Print Print Print 750780416 {32, 32} YES YES YES YES imageNameKey widget YES image.ToolbarPrint image {32, 32} 0 YES printDocument: {0, 0} {0, 0} YES YES -1 YES 0 NSToolbarSeparatorItem Separator {12, 5} {12, 1000} YES YES -1 YES 0 YES YES 1048576 2147483647 NSToolbarShowColorsItem Colors Colors Show Color Panel 683671552 {32, 32} YES YES TU0AKgAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCQEOEzkMUylkF5BChyLCWqEq6G+wL/1voSro ZYciwlFkGJAyOQxTCAkBDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkEPXiWEIbtJyTf/Yt9C/370Tf+d/lf/ tv9c/77+V/+/9E7/u99C/7XJOf9+hCK7QUAOXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxQHHRZjIY42zEH+RvBI/2r/W/9//2D/ kf9k/6L/Zv+w/mf/wf9m/9T/Zv/l/2H//v9e/+/ySv/Mwzj+Y1kXjhQRAx0AAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMUCR0adDOgP91f/1n/c/9c/2P/ aP5i/4P+bv+Y/nL/qP53/7r+d//K/nb/2P5z/+f+bv/5/2f///9i///8W//dwD//dF4coBQPAx0AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFmM0jj7dc/9Z/4r/ Yf5//2z+ff9y/nX/iP59/6H+hf+w/on/wf6K/9H+if/g/ob/7/6A////eP//823//uNk///kXf/drT// Y0cXjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1BKF41zHv+ WP+m/2H+mP9s/pb/eP6T/4L+jf+P/or/p/6V/7j+mv/L/p3/2/6a/+f+lv/8/5D///uH//7pe//+3G// /sxk///MXf/Mizj+QSkOXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCQYO IIRau0fwov9d/6//a/6q/3j+qv+H/qj/k/6l/5r+nv+s/qL/wv6q/9T+rP/i/qv/8v+m////n//+8ZX/ /uGK//7Se//+w23//7hh//CdSv+ETiK7CQUBDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAw5K1M2yZX/Wv/K/2P+vv90/rz/hP67/5L+uv+f/rr/qf60/7L+sP/K/rr/2/69/+z+u//8/7X/ //mt//7nov/+2Jb//sqJ//65eP/+q2f//6Re/8htOf85GwxSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAFmRRkD7ftv9d/9f/a/7O/3r+zv+M/s//mv7N/6r+zP+3/s3/wP7F/87+yP/l/s// 9v/N////xP/+7bv//t6t//7Qn//+v5D//q+A//6fbv//lGH/321C/2MrGI8AAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAfh3fCSfTW/2D/4/9v/t//g/7f/5H+3/+k/t//sv7g/8H+3v/Q/t7/ 2P7Z/+3+4P///93///fT//7kxP/+17T//sSo//61l//+pYb//pRz//+FZv/0bU7/hzIiwgAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACihmehT/vn/Yv/z/3L/8f+F//H/lv/z/6f/8/+3//H/ yf/x/9n/8v/o//D/+P/x///97f/+6dv//tnK//7Iuv/+tqr//qeZ//6WiP/+hXb//3Nl//5jVv+hMyno AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK62w/Vb///9j/v//dP7//4b+//+X/v// qP7//7f+///L/v//3P7//+////////////L0//7e4P/+zc///ru9//6qrP/+mZv//oiK//51d//+ZWf/ /1pc/7AvMf0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAolqHoUfX+/2Hu//9x7f7/ hO3+/5ft/v+m7f7/tu3+/8jt/v/X7P7/5Or+//Xt////6f///tvt//7K3f/+usv//qq7//6YrP/+h5r/ /neK//9md//+VWj/oSk26AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB91h8JJ0fT/ Yd///27b/v+A2/7/kdv+/6Hc/v+w2v7/wNv+/8rX/v/V1P7/69z+//7Z////0Pn//sLm//602P/+pcj/ /pW3//6EqP/+cpb//2WJ//RNcP+HIjTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA FlBkkD+x3/9a0f//asr+/3rL/v+Kyf7/mcr+/6fH/v+0x/7/u8D+/83F/v/ky/7/8sn///+////+uPD/ /qng//6d0f/+jsP//n6y//5uov//Xpf/30Jx/2MXLI8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAALKjlTNJLJ/1jG//9huP7/crf+/4G2/v+Ptf7/nLP+/6av/v+xrP7/yLb+/9q3/v/qt/7/ +7L///+q+//+n+n//pPa//6Fy//+dLz//mWu//9cqP/IN3D/OAwbUgAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAEGCQ4eWIS7RZ3w/1us//9npf7/daX+/4Wj/v+OoP7/l5j+/6qg/v/Apv7/ 0Kj+/+Cn/v/wpP7//5r///+S8//+h+P//njU//5sxf//X7r/8Emd/4QhT7sJAQUOAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0mQV4zd8z+V6D//16T/v9pkf7/dY7+/3+G/v+Nh/7/ pZH+/7aX/v/Jl/7/2Zb+/+aR/v/3jP///4L+//556//+bN7//mHO//9Zzv/MNo3+QA0pXQAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUyY446bt3/VoX//156/v9ndv7/ bm7+/4d3/v+fgv7/roP+/7+G/v/Phf7/3oL+/+18/v//dP///2v2//5h5f//Web/3T2u/2MWSI4AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwgUHRkwdKA6WN3/ VWz//1le//9nX/7/gWr+/5Ru/v+ncf7/tnT+/8hy/v/Wb/7/5mr+//Rj////Xf///1j+/90+wv90Gl+g EwMOHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA BAcWHxciaJMzPMz+RkTw/2hY//98Wv//j2H//6Bh//+uY/7/v2L//9Jg///jXf///Fr//+5H8v/MNcX+ aBhdkxUEEh4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAACAAAABRMTU3QoI5TMSDPI/2FA3/9+SfT/mVH+/7RW//+8U/7/vUn0/7o+3/+zNcj/ jSSUzFMSUnMAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAQIAAAkFAAAVCAAAIg8EEkEmFl+UPCGOyE8op+dgK7D3biux/ncrsPd9KKfn dSGOyFkWX5QbBBJBCAAAIgUAABUCAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgIAABAFAAAcCAAAKQwAADkRAABIFQAAVRgAAF0YAABf GAAAXRUAAFURAABIDAAAOQgAACkFAAAcAgAAEAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAUAAAAIAAAACwAAAA4AAAAS AAAAFAAAABUAAAAUAAAAEgAAAA4AAAALAAAACAAAAAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA EKoBAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE AAABFgADAAAAAQD8AAABFwAEAAAAAQAAEAABHAADAAAAAQABAAABUgADAAAAAQABAAABUwADAAAABAAA ELIAAAAAAAgACAAIAAgAAQABAAEAAQ orderFrontColorPanel: {0, 0} {0, 0} YES YES -1 YES 0 NSToolbarShowFontsItem Fonts Fonts Show Font Panel 683671552 {32, 32} YES YES TU0AKgAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAABQfL3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAOFiJQLkdt/wsRG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg+X+AuR23/FB8vcAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXIzaALkdt/y5Hbf8XIzaAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgNICtCZvAuR23/Lkdt/yI1UsAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcLESgJTlY0C5Hbf8uR23/ JTlY0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgNIC5Hbf8LERtA Lkdt/y5Hbf8uR23/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiNVLA IjVSwAAAAAAoPl/gLkdt/y5Hbf8IDRQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA CxEbQC5Hbf8FCA0gAAAAACI1UsAuR23/Lkdt/wsRG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAiNVLAHCxEoAAAAAAAAAAAHzFLsC5Hbf8uR23/FyM2gAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAACxEbQC5Hbf8FCA0gAAAAAAAAAAAXIzaALkdt/y5Hbf8cLESgAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAiNVLAIjVSwAsRG0ALERtACxEbQBwsRKAuR23/Lkdt/yI1UsAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxEbQC5Hbf8uR23/Lkdt/y5Hbf8uR23/Lkdt/y5Hbf8uR23/ K0Jm8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiNVLAHCxEoAAAAAAAAAAAAAAAAAAAAAAFCA0g Lkdt/y5Hbf8uR23/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxEbQC5Hbf8FCA0gAAAAAAAAAAAAAAAA AAAAAAAAAAAuR23/Lkdt/y5Hbf8LERtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiNVLAIjVSwAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAACg+X+AuR23/Lkdt/xEaKWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxEbQC5Hbf8LERtA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIjVSwC5Hbf8uR23/FyM2gAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUIDSArQmbw Lkdt/wIEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiNVLALkdt/y5Hbf8fMUuwAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAYQ JTlY0C5Hbf8uR23/JTlY0AgNFDAAAAAAAAAAAAAAAAAAAAAADhYiUCg+X+AuR23/Lkdt/y5Hbf8IDRQw AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAP AAAAFiU5WNUlOVjWIjVRyiI1UcsiNVLMKD5f5gAAADQAAAA2AAAANhEaKYAuR23/JTlY2SI1UcsiNVHK JTlY1i5Hbf8FCQ0zAAAADwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAACAAAAA8AAAAWAAAAHQAAACIAAAAnAAAALAAAAC8AAAAyAAAANAAAADYAAAA2AAAANAAAADIAAAAv AAAALAAAACcAAAAiAAAAHQAAABYAAAAPAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA EKoBAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE AAABFgADAAAAAQD8AAABFwAEAAAAAQAAEAABHAADAAAAAQABAAABUgADAAAAAQABAAABUwADAAAABAAA ELIAAAAAAAgACAAIAAgAAQABAAEAAQ orderFrontFontPanel: {0, 0} {0, 0} YES YES -1 YES 0 NSToolbarSpaceItem Space {32, 5} {32, 32} YES YES -1 YES 0 YES YES 1048576 2147483647 YES YES YES {3.40282e+38, 3.40282e+38} 274 YES 274 YES 274 YES 256 YES 274 YES 2304 YES 256 {212, 639} YES -2147483392 {{-26, 0}, {16, 17}} YES source 1.500000e+02 1.600000e+01 1.000000e+03 75628032 0 LucidaGrande 1.100000e+01 3100 3 MC4zMzMzMzI5OQA 6 System headerTextColor 3 MAA 337772096 2048 Text Cell LucidaGrande 1.300000e+01 1044 6 System controlBackgroundColor 3 MC42NjY2NjY2OQA 6 System controlTextColor 3 YES status 5.600000e+01 4.000000e+01 1.000000e+03 75628032 0 337772096 2048 Text Cell 2 YES 3.000000e+00 6 System _sourceListBackgroundColor 1 MC44MzkyMTU3IDAuODY2NjY2NjcgMC44OTgwMzkyMgA 6 System gridColor 3 MC41AA 2.000000e+01 -767557632 4 15 0 YES 1 1.400000e+01 {{1, 1}, {212, 639}} 6 System selectedControlColor 3 MQA 2 -2147483392 {{198, 1}, {15, 624}} _doScroller: 9.984375e-01 -2147483392 {{1, 625}, {197, 15}} 1 _doScroller: 9.953052e-01 {{0, 1}, {214, 641}} 562 QSAAAEEgAABBoAAAQaAAAA {214, 642} NSView 258 YES 18 {{-8, -10}, {808, 658}} YES downloads 274 YES 274 YES 274 YES 274 YES 2304 YES 256 {794, 605} YES 256 {794, 17} -2147483392 {{-26, 0}, {16, 17}} YES filename 2.000000e+02 4.000000e+01 1.000000e+03 75628032 0 Filename 3 MC4zMzMzMzI5OQA 337772096 2048 Text Cell 3 YES progress 1.000000e+02 4.000000e+01 1.000000e+03 75628032 0 Progress 337772096 2048 Text Cell 3 YES YES size 6.400000e+01 1.000000e+01 3.402823e+38 75628032 0 Size 6 System headerColor 337772096 2048 Text Cell 3 YES YES xferred 7.000000e+01 1.000000e+01 3.402823e+38 75628032 0 Transferred 337772096 2048 Text Cell 3 YES YES completed 6.400000e+01 1.000000e+01 3.402823e+38 75628032 0 %% 337772096 2048 Text Cell 3 YES YES speed 6.400000e+01 1.000000e+01 3.402823e+38 75628032 0 Speed 337772096 2048 Text Cell 3 YES YES prio 6.400000e+01 1.000000e+01 3.402823e+38 75628032 0 Priority 337772096 2048 Text Cell 3 YES YES timerem 6.400000e+01 1.000000e+01 3.402823e+38 75628032 0 Rem. time 337772096 2048 Text Cell 3 YES YES lastcomp 6.400000e+01 1.000000e+01 3.402823e+38 75628032 0 Last seen complete 337772096 2048 Text Cell 3 YES YES lastrx 1.000000e+01 1.000000e+01 3.402823e+38 75628032 0 337772096 2048 Text Cell 3 YES YES 3.000000e+00 2.000000e+00 1.700000e+01 -698351616 1 4 15 0 YES {{1, 17}, {785, 605}} 4 -2147483392 {{771, 17}, {15, 605}} _doScroller: 9.758065e-01 256 {{1, 622}, {785, 15}} YES 1 _doScroller: 9.886650e-01 2304 YES {{1, 0}, {785, 17}} 4 {787, 638} 690 QSAAAEEgAABBmAAAQZgAAA {796, 658} NSView {{2, -3}, {796, 658}} 2 {{10, 7}, {788, 638}} Downloads 6 System controlColor search 256 {{10, 7}, {788, 638}} Search network 256 {{10, 7}, {788, 638}} Network shared 256 YES 274 YES 2304 YES 274 {792, 623} YES 256 {792, 17} -2147483392 {{778, 0}, {16, 17}} YES filename 1.010000e+02 4.000000e+01 1.000000e+03 75628032 0 Name 3 MC4zMzMzMzI5OQA 337772096 2048 Text Cell 3 YES size 8.000000e+01 4.000000e+01 1.000000e+02 75628032 0 Size 337772096 2048 Text Cell 3 YES req 6.400000e+01 1.000000e+01 1.000000e+02 75628032 0 Requested 337772096 2048 Text Cell 3 YES req_all 8.400000e+01 1.000000e+01 3.402823e+38 75628032 0 Total Requests 337772096 2048 Text Cell 3 YES accept 6.400000e+01 1.000000e+01 3.402823e+38 75628032 0 Accepted 337772096 2048 Text Cell 3 YES accept_all 9.400000e+01 1.000000e+01 3.402823e+38 75628032 0 Total Accepted 337772096 2048 Text Cell 3 YES xfer 8.400000e+01 1.000000e+01 3.402823e+38 75628032 0 Transferred 337772096 2048 Text Cell 3 YES xfer_all 1.970000e+02 1.000000e+01 3.402823e+38 75628032 0 Total Transferred 337772096 2048 Text Cell 3 YES 3.000000e+00 2.000000e+00 1.700000e+01 -692060160 4 15 0 YES {{1, 17}, {792, 623}} 4 -2147483392 {{778, 17}, {15, 608}} _doScroller: 9.759229e-01 -2147483392 {{1, 625}, {792, 15}} 1 _doScroller: 9.753695e-01 2304 YES {{1, 0}, {792, 17}} 4 {{0, -5}, {794, 641}} 562 QSAAAEEgAABBmAAAQZgAAA {{10, 7}, {788, 638}} Sharing 5 256 {{10, 7}, {788, 638}} Statistics 4 YES YES YES {{215, 0}, {792, 642}} NSView {1007, 642} YES 2 NO YES YES YES YES YES YES YES YES YES YES YES YES 1 NO 270 {{1008, 0}, {0, 642}} {{0, 34}, {1008, 642}} YES 2 NO YES YES YES YES YES YES 0 NO 268 {{8, 12}, {300, 14}} YES 68288064 272761856 Conection status {1008, 676} {{0, 0}, {1440, 878}} {3.40282e+38, 3.40282e+38} AppController DownloadsViewController SearchViewController 3 2 {{196, 428}, {752, 82}} 1946157056 Add link NSWindow {3.40282e+38, 3.40282e+38} 256 YES 268 {{20, 40}, {481, 22}} YES -1804468671 272630784 YES 6 System textBackgroundColor 6 System textColor 268 {{501, 37}, {100, 26}} YES -2076049856 2048 109199615 1 400 75 Category 1048576 2147483647 1 _popUpItemAction: YES OtherViews YES Item 2 1048576 2147483647 _popUpItemAction: Item 3 1048576 2147483647 _popUpItemAction: 1 YES YES 2 268 {{621, 33}, {96, 32}} YES 67239424 134217728 OK -2038284033 129 200 25 {752, 82} {{0, 0}, {1440, 878}} {3.40282e+38, 3.40282e+38} AddLinkDialogController SourceViewController SharedFilesViewController YES performMiniaturize: 37 arrangeInFront: 39 print: 86 runPageLayout: 87 performZoom: 240 showHelp: 360 toggleToolbarShown: 366 hide: 367 hideOtherApplications: 368 terminate: 369 unhideAllApplications: 370 show_Preferences: 376 show_About: 377 show_Xfers: 406 show_Networks: 407 show_Search: 408 show_Sharing: 409 show_Stats: 410 m_dload_controller 428 m_search_controller 489 addLink: 502 closeOK: 505 m_cat 506 m_link 507 m_dlg 508 m_add_link_dlg 509 m_tableview 810 m_main_tabview 813 m_tab_view 825 m_outline_view 826 m_connection_status_text 837 m_shared_controller 860 m_table_view 861 YES 0 YES -2 RmlsZSdzIE93bmVyA -1 First Responder -3 Application 29 YES MainMenu 19 YES 56 YES 103 YES 1 83 YES 81 YES 78 6 82 9 77 5 79 7 106 YES 2 111 57 YES 58 134 150 136 1111 144 129 121 143 236 131 YES 149 145 130 24 YES 92 5 239 23 295 YES 296 YES 297 371 YES 372 YES 375 378 YES 379 380 381 382 383 384 385 401 402 403 404 405 427 486 490 YES 491 YES 492 YES 493 494 YES 495 YES 496 YES 497 498 499 500 YES 501 504 510 YES 574 575 YES 576 YES 577 YES 690 YES 691 YES 692 YES 693 YES 694 YES 724 YES 743 744 YES 745 695 YES 696 YES 697 YES 698 YES 772 YES 773 774 775 YES 776 777 YES 778 YES 779 780 781 YES 782 783 YES 784 785 YES 786 787 YES 788 789 YES 790 791 YES 792 793 YES 794 795 YES 796 821 798 YES 801 YES 804 YES 805 803 YES 806 800 799 835 YES 836 838 YES 839 840 841 YES 842 843 YES 844 YES 845 846 847 YES 848 849 YES 850 851 YES 852 853 YES 854 855 YES 856 857 YES 858 859 Object YES YES -1.IBPluginDependency -2.IBPluginDependency -3.IBPluginDependency 103.IBPluginDependency 103.ImportedFromIB2 106.IBPluginDependency 106.ImportedFromIB2 106.editorWindowContentRectSynchronizationRect 111.IBPluginDependency 111.ImportedFromIB2 129.IBPluginDependency 129.ImportedFromIB2 130.IBPluginDependency 130.ImportedFromIB2 130.editorWindowContentRectSynchronizationRect 131.IBPluginDependency 131.ImportedFromIB2 134.IBPluginDependency 134.ImportedFromIB2 136.IBPluginDependency 136.ImportedFromIB2 143.IBPluginDependency 143.ImportedFromIB2 144.IBPluginDependency 144.ImportedFromIB2 145.IBPluginDependency 145.ImportedFromIB2 149.IBPluginDependency 149.ImportedFromIB2 150.IBPluginDependency 150.ImportedFromIB2 19.IBPluginDependency 19.ImportedFromIB2 23.IBPluginDependency 23.ImportedFromIB2 236.IBPluginDependency 236.ImportedFromIB2 239.IBPluginDependency 239.ImportedFromIB2 24.IBPluginDependency 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 29.IBPluginDependency 29.ImportedFromIB2 29.WindowOrigin 29.editorWindowContentRectSynchronizationRect 295.IBPluginDependency 296.IBPluginDependency 296.editorWindowContentRectSynchronizationRect 297.IBPluginDependency 371.IBEditorWindowLastContentRect 371.IBViewEditorWindowController.showingBoundsRectangles 371.IBViewEditorWindowController.showingLayoutRectangles 371.IBWindowTemplateEditedContentRect 371.NSWindowTemplate.visibleAtLaunch 371.editorWindowContentRectSynchronizationRect 372.IBPluginDependency 375.IBPluginDependency 378.IBEditorWindowLastContentRect 378.IBPluginDependency 378.editorWindowContentRectSynchronizationRect 379.IBPluginDependency 380.IBPluginDependency 382.IBPluginDependency 385.IBPluginDependency 401.IBPluginDependency 402.IBPluginDependency 403.IBPluginDependency 404.IBPluginDependency 405.IBPluginDependency 427.IBPluginDependency 486.IBPluginDependency 490.IBEditorWindowLastContentRect 490.IBWindowTemplateEditedContentRect 490.NSWindowTemplate.visibleAtLaunch 490.editorWindowContentRectSynchronizationRect 491.IBPluginDependency 492.IBPluginDependency 493.IBPluginDependency 494.IBPluginDependency 495.IBPluginDependency 496.IBPluginDependency 497.IBPluginDependency 498.IBPluginDependency 499.IBPluginDependency 5.IBPluginDependency 5.ImportedFromIB2 500.IBPluginDependency 501.IBPluginDependency 504.IBPluginDependency 510.IBPluginDependency 56.IBPluginDependency 56.ImportedFromIB2 57.IBPluginDependency 57.ImportedFromIB2 57.editorWindowContentRectSynchronizationRect 574.IBPluginDependency 575.IBPluginDependency 576.IBPluginDependency 577.IBPluginDependency 58.IBPluginDependency 58.ImportedFromIB2 690.IBPluginDependency 691.IBPluginDependency 692.IBPluginDependency 693.IBPluginDependency 694.IBPluginDependency 695.IBPluginDependency 696.IBPluginDependency 697.IBPluginDependency 698.IBPluginDependency 724.IBPluginDependency 743.IBPluginDependency 744.IBPluginDependency 745.IBPluginDependency 77.IBPluginDependency 77.ImportedFromIB2 772.IBPluginDependency 773.IBPluginDependency 774.IBPluginDependency 775.IBPluginDependency 776.IBPluginDependency 777.IBPluginDependency 778.IBPluginDependency 779.IBPluginDependency 78.IBPluginDependency 78.ImportedFromIB2 780.IBPluginDependency 781.IBPluginDependency 782.IBPluginDependency 783.IBPluginDependency 784.IBPluginDependency 785.IBPluginDependency 786.IBPluginDependency 787.IBPluginDependency 788.IBPluginDependency 789.IBPluginDependency 79.IBPluginDependency 79.ImportedFromIB2 790.IBPluginDependency 791.IBPluginDependency 792.IBPluginDependency 793.IBPluginDependency 794.IBPluginDependency 795.IBPluginDependency 796.IBPluginDependency 798.IBPluginDependency 799.IBPluginDependency 800.IBPluginDependency 801.IBPluginDependency 803.IBPluginDependency 804.IBPluginDependency 805.IBPluginDependency 806.CustomClassName 806.IBPluginDependency 81.IBPluginDependency 81.ImportedFromIB2 81.editorWindowContentRectSynchronizationRect 82.IBPluginDependency 82.ImportedFromIB2 821.IBPluginDependency 83.IBPluginDependency 83.ImportedFromIB2 835.IBPluginDependency 836.IBPluginDependency 838.IBPluginDependency 839.IBPluginDependency 840.IBPluginDependency 841.IBPluginDependency 842.IBPluginDependency 843.IBPluginDependency 844.IBPluginDependency 845.IBPluginDependency 846.IBPluginDependency 859.IBPluginDependency 92.IBPluginDependency 92.ImportedFromIB2 YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilderKit com.apple.InterfaceBuilderKit com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{599, 444}, {150, 23}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{436, 809}, {64, 6}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{528, 394}, {197, 73}} com.apple.InterfaceBuilder.CocoaPlugin {74, 862} {{366, 467}, {297, 20}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{478, 444}, {184, 23}} com.apple.InterfaceBuilder.CocoaPlugin {{170, -73}, {1008, 676}} {{170, -73}, {1008, 676}} {{318, 123}, {905, 557}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{381, 800}, {616, 0}} com.apple.InterfaceBuilder.CocoaPlugin {{408, 770}, {617, 0}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{315, 763}, {752, 82}} {{315, 763}, {752, 82}} {{318, 428}, {752, 82}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.brandonwalkin.BWToolkit com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{378, 284}, {186, 183}} com.brandonwalkin.BWToolkit com.brandonwalkin.BWToolkit com.brandonwalkin.BWToolkit com.brandonwalkin.BWToolkit com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin CellWithIcon com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{439, 394}, {188, 73}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.brandonwalkin.BWToolkit com.brandonwalkin.BWToolkit com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES YES YES 861 YES AddLinkDialogController NSObject closeOK: id YES YES m_cat m_dlg m_link YES NSPopUpButton id NSTextField IBProjectSource AddLinkDialogController.h AddLinkDialogController NSObject IBUserSource AppController NSObject YES YES addLink: show_About: show_Networks: show_Preferences: show_Search: show_Sharing: show_Stats: show_Xfers: YES id id id id id id id id YES YES m_add_link_dlg m_connection_status_text m_dload_controller m_main_tabview m_search_controller m_shared_controller YES id id id id id id IBProjectSource AppController.h AppController NSObject IBUserSource CellWithIcon NSTextFieldCell IBProjectSource SourceViewController.h DownloadsViewController NSObject m_tableview NSTableView IBProjectSource DownloadsViewController.h DownloadsViewController NSObject IBUserSource NSObject IBProjectSource EC.h SearchViewController NSObject startSearch: id YES YES m_result_list m_search_text YES NSOutlineView NSTextField IBProjectSource SearchViewController.h SearchViewController NSObject IBUserSource SharedFilesViewController NSObject m_table_view NSTableView IBProjectSource SharedFilesViewController.h SharedFilesViewController NSObject IBUserSource SourceViewController NSObject YES YES m_outline_view m_tab_view YES id id SourceViewController NSObject IBUserSource 0 ../cocoa-mule.xcodeproj 3 ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/MainMenu.nib/keyedobjects.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/English.lproj/MainMenu.nib/keyedo0000644000175000017500000014543011772155611031073 0ustar l3onl3onbplist00Ô X$versionT$topY$archiverX$objects† Ñ]IB.objectdata€_NSKeyedArchiver¯» 156<=BZ[\]vz~›œžŸ ¡¢£¤¥¦§›ÇÈÉÓÔØ·Ýáâæéìòô÷øùüœ   Ó 123451GöLMPTUXZžijkÓpty|}~1”•¤¦§«¬¡¼½¾¿ÇÉ¢ØÙÓßãèðøùúýþÓ¤-.Ó/79HJKOP_abfgv„‡ˆ •š´¹ÈÍÖÚíó$%*+05HIU\]`cklmpvƒs„…Š“˜™œŸ¨©¯¶¸½¾ÂÇÈËÏÐÕÖÙÜèéêíö÷øû.ü   $+/>FPTfgnxy|‚ƒŽ–—ž §°±·¸¿ÈÉÏÐÕÖ„Ýæçíîõüý ")*018@AGHOQR[\efjklmopx‚‡‹‘•œ ­µ¾ÂÐÑ×àá*æó–û #°,·29BC0IPXY_`gopvw~†‡Ž•ž¤¥¬´µ»¼ÃËÌÒÙÚâãìíñòóôö÷lúû  ll#$%,-l1 2456:>oFNQXY\]aekqz{„…‰ Ї‹Ž’¶½ÀÁÄÅÆÊÎÖÜÝÞßâçèíðñøýþ"&'()/8'9B'CEJNOTUZ]^_dno‡pv}~ˆŽ“”–ž«¬®°Š‡±²¶¾ÂÃÄÅÊÍÎÏÔרÙÞßäëìíñøüýþÿ       # $ % & * 1 6 7 8 9 = D H I J K O V W X ] ^ b i j k p q v w | ƒ „ … † ‹ Œ š › œ ¢ £ ¨ ¯ ° ± ² · ¸ ½ ¾ Â É Ê Ë Ð Ñ a b f o y ~  ˆ ~ ‰ Ž ‘ ’ “ š £ ¤ ­ ~ ¶ ¿ ~ È Ö ß à é ì õ ~ ö ú  ~    ¥ 6 Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?2 @ A B C D E F G H I J K L M N O P Q R V Z ¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>£?@ABCDEFGHIJKLM¤NOPQRSTUVWXYZ[\]^_`abcdefghijknqtU$nullß  !"#$%&'()*+,-./0VNSRootV$class]NSObjectsKeys_NSClassesValues_NSAccessibilityOidsValues]NSConnections[NSNamesKeys[NSFramework]NSClassesKeysZNSOidsKeys]NSNamesValues_NSAccessibilityConnectors]NSFontManager_NSVisibleWindows_NSObjectsValues_NSAccessibilityOidsKeysYNSNextOid\NSOidsValues€ºN¹ªv€w·€€u¸_Ò234[NSClassName€€]NSApplicationÒ789:X$classesZ$classname¢:;^NSCustomObjectXNSObject_IBCocoaFrameworkÒ>?@ZNS.objects©¡A€ÜCDEFGHIJKLMNOPQRSTUVWXY\NSWindowView_NSWindowContentMaxSize\NSScreenRect]NSWindowTitleYNSWTFlags]NSWindowClass\NSWindowRectYNSMaxSize_NSWindowBacking_NSWindowStyleMask[NSViewClass€“¨€’¦€ t€ €§€ _{{335, 74}, {1008, 676}}UaMuleXNSWindowÝ^_`abcdefghijklmnop+lntou_NSToolbarIBDefaultItems_NSToolbarShowsBaselineSeparator_NSToolbarIBAllowedItems_NSToolbarAutosavesConfiguration_NSToolbarSizeMode_NSToolbarIBIdentifiedItems_NSToolbarDelegate_NSToolbarPrefersToBeShown_ NSToolbarAllowsUserCustomization_NSToolbarIBSelectableItems_NSToolbarDisplayMode_NSToolbarIdentifier€‘€ €Ž€€ €€ ÒwxyYNS.string€ _$4914F9B0-9937-4196-9689-7544DD4FD074Ò78{|£|};_NSMutableStringXNSStringÓ>€ŽWNS.keys€t¬‚ƒ„…†‡ˆ‰Š‹Œ€€€€€€€€€€€€¬‘’“”•–—˜™š€€/€:€J€U€[€`€g€x€}€„€‰_NSToolbarShowColorsItem_NSToolbarShowFontsItem_NSToolbarSeparatorItem_NSToolbarCustomizeToolbarItem_$767BD347-1697-4006-B735-86CBF19465F8_$62AA47AC-884E-456B-9F94-1F3F04647AF6_NSToolbarFlexibleSpaceItem_NSToolbarPrintItem_$D068E44F-D3FF-4B1C-BB88-295078B93B92_NSToolbarSpaceItem_$159427B1-5D8B-4F3C-A2FC-F2F453EA1D14_$958D1D36-B9A4-4CDD-8CDC-7693F081D29Bߨ©ª«¬­®¯°±²³´µ¶·¸+l»l+l¿ÀÁÂÃÃÀÆ_NSToolbarItemVisibilityPriority_NSToolbarItemView_NSToolbarItemEnabled_NSToolbarItemAction_NSToolbarIsUserRemovable_NSToolbarItemTarget_NSToolbarItemAutovalidates_NSToolbarItemIdentifier_NSToolbarItemPaletteLabel_NSToolbarItemToolTip_NSToolbarItemTag_NSToolbarItemMaxSize_NSToolbarItemMinSize_NSToolbarItemLabel_NSToolbarItemImage€.€ €, € €€€ÿÿÿÿÿÿÿÿ€-€-€€VColors_Show Color PanelÕÊËÌÍÎÏÐÑÒVNSSize\NSImageFlagsVNSRepsWNSColor€+€ (À€!€)X{32, 32}Ò>ÕÖ€(¡×€"Ò>ÙÚ€'¢ÛÜ€#€$ÒÞßà_NSTIFFRepresentation€&€%OºMM* 9 S)dB‡"ÂZ¡*èo°/ýo¡*èe‡"ÂQd29 S A^%„!»IÉ7ÿbßBÿ~ôMÿþWÿ¶ÿ\ÿ¾þWÿ¿ôNÿ»ßBÿµÉ9ÿ~„"»A@^c!Ž6ÌAþFðHÿjÿ[ÿÿ`ÿ‘ÿdÿ¢ÿfÿ°þgÿÁÿfÿÔÿfÿåÿaÿþÿ^ÿïòJÿÌÃ8þcYŽ t3 ?Ý_ÿYÿsÿ\ÿcÿhþbÿƒþnÿ˜þrÿ¨þwÿºþwÿÊþvÿØþsÿçþnÿùÿgÿÿÿbÿÿü[ÿÝÀ?ÿt^ c4Ž>ÝsÿYÿŠÿaþÿlþ}ÿrþuÿˆþ}ÿ¡þ…ÿ°þ‰ÿÁþŠÿÑþ‰ÿàþ†ÿïþ€ÿÿÿxÿÿómÿþãdÿÿä]ÿÝ­?ÿcGŽ A(^5Ì{þXÿ¦ÿaþ˜ÿlþ–ÿxþ“ÿ‚þÿþŠÿ§þ•ÿ¸þšÿËþÿÛþšÿçþ–ÿüÿÿÿû‡ÿþé{ÿþÜoÿþÌdÿÿÌ]ÿÌ‹8þA)^  „Z»Gð¢ÿ]ÿ¯ÿkþªÿxþªÿ‡þ¨ÿ“þ¥ÿšþžÿ¬þ¢ÿÂþªÿÔþ¬ÿâþ«ÿòÿ¦ÿÿÿŸÿþñ•ÿþáŠÿþÒ{ÿþÃmÿÿ¸aÿðJÿ„N"»  9+S6É•ÿZÿÊÿcþ¾ÿtþ¼ÿ„þ»ÿ’þºÿŸþºÿ©þ´ÿ²þ°ÿÊþºÿÛþ½ÿìþ»ÿüÿµÿÿù­ÿþç¢ÿþØ–ÿþʉÿþ¹xÿþ«gÿÿ¤^ÿÈm9ÿ9 RdQ>ß¶ÿ]ÿ×ÿkþÎÿzþÎÿŒþÏÿšþÍÿªþÌÿ·þÍÿÀþÅÿÎþÈÿåþÏÿöÿÍÿÿÿÄÿþí»ÿþÞ­ÿþПÿþ¿ÿþ¯€ÿþŸnÿÿ”aÿßmBÿc+‡wÂIôÖÿ`ÿãÿoþßÿƒþßÿ‘þßÿ¤þßÿ²þàÿÁþÞÿÐþÞÿØþÙÿíþàÿÿÿÝÿÿ÷ÓÿþäÄÿþ×´ÿþĨÿþµ—ÿþ¥†ÿþ”sÿÿ…fÿômNÿ‡2"Â(¡™èSþùÿbÿóÿrÿñÿ…ÿñÿ–ÿóÿ§ÿóÿ·ÿñÿÉÿñÿÙÿòÿèÿðÿøÿñÿÿýíÿþéÛÿþÙÊÿþȺÿþ¶ªÿþ§™ÿþ–ˆÿþ…vÿÿseÿþcVÿ¡3)è+­°ýVÿÿÿcþÿÿtþÿÿ†þÿÿ—þÿÿ¨þÿÿ·þÿÿËþÿÿÜþÿÿïÿÿÿÿÿÿÿÿòôÿþÞàÿþÍÏÿþ»½ÿþª¬ÿþ™›ÿþˆŠÿþuwÿþegÿÿZ\ÿ°/1ý(–¡èQõþÿaîÿÿqíþÿ„íþÿ—íþÿ¦íþÿ¶íþÿÈíþÿ×ìþÿäêþÿõíÿÿÿéÿÿþÛíÿþÊÝÿþºËÿþª»ÿþ˜¬ÿþ‡šÿþwŠÿÿfwÿþUhÿ¡)6èu‡ÂIÑôÿaßÿÿnÛþÿ€Ûþÿ‘Ûþÿ¡Üþÿ°ÚþÿÀÛþÿÊ×þÿÕÔþÿëÜþÿþÙÿÿÿÐùÿþÂæÿþ´Øÿþ¥Èÿþ•·ÿþ„¨ÿþr–ÿÿe‰ÿôMpÿ‡"4ÂPd?±ßÿZÑÿÿjÊþÿzËþÿŠÉþÿ™Êþÿ§Çþÿ´Çþÿ»ÀþÿÍÅþÿäËþÿòÉÿÿÿ¿ÿÿþ¸ðÿþ©àÿþÑÿþŽÃÿþ~²ÿþn¢ÿÿ^—ÿßBqÿc, *9S4’ÉÿXÆÿÿa¸þÿr·þÿ¶þÿµþÿœ³þÿ¦¯þÿ±¬þÿȶþÿÚ·þÿê·þÿû²ÿÿÿªûÿþŸéÿþ“Úÿþ…Ëÿþt¼ÿþe®ÿÿ\¨ÿÈ7pÿ8 R X„»Eðÿ[¬ÿÿg¥þÿu¥þÿ…£þÿŽ þÿ—˜þÿª þÿÀ¦þÿШþÿà§þÿð¤þÿÿšÿÿÿ’óÿþ‡ãÿþxÔÿþlÅÿÿ_ºÿðIÿ„!O»  &A^3wÌþW ÿÿ^“þÿi‘þÿuŽþÿ†þÿ‡þÿ¥‘þÿ¶—þÿÉ—þÿÙ–þÿæ‘þÿ÷Œÿÿÿ‚þÿþyëÿþlÞÿþaÎÿÿYÎÿÌ6þ@ )]2cŽ:nÝÿV…ÿÿ^zþÿgvþÿnnþÿ‡wþÿŸ‚þÿ®ƒþÿ¿†þÿÏ…þÿÞ‚þÿí|þÿÿtÿÿÿköÿþaåÿÿYæÿÝ=®ÿcHŽ0t :XÝÿUlÿÿY^ÿÿg_þÿjþÿ”nþÿ§qþÿ¶tþÿÈrþÿÖoþÿæjþÿôcÿÿÿ]ÿÿÿXþÿÝ>Âÿt_ "h“3<ÌþFDðÿhXÿÿ|Zÿÿaÿÿ aÿÿ®cþÿ¿bÿÿÒ`ÿÿã]ÿÿüZÿÿîGòÿÌ5Åþh]“St(#”ÌH3Èÿa@ßÿ~Iôÿ™Qþÿ´Vÿÿ¼Sþÿ½Iôÿº>ßÿ³5Èÿ$”ÌSRs "A&_”Õ€(¡€6Ò>Ù€'¢Û€#€7ÒÞ߀&€8OºMM*/p"P.Gmÿ @(>_à.Gmÿ/p#6€.Gmÿ.Gmÿ#6€ +Bfð.Gmÿ.Gmÿ"5RÀ,D %9XÐ.Gmÿ.Gmÿ%9XÐ .Gmÿ @.Gmÿ.Gmÿ.Gmÿ"5RÀ"5RÀ(>_à.Gmÿ.Gmÿ 0 @.Gmÿ "5RÀ.Gmÿ.Gmÿ @"5RÀ,D 1K°.Gmÿ.Gmÿ#6€ @.Gmÿ #6€.Gmÿ.Gmÿ,D "5RÀ"5RÀ @ @ @,D .Gmÿ.Gmÿ"5RÀ @.Gmÿ.Gmÿ.Gmÿ.Gmÿ.Gmÿ.Gmÿ.Gmÿ.Gmÿ+Bfð"5RÀ,D  .Gmÿ.Gmÿ.Gmÿ @.Gmÿ .Gmÿ.Gmÿ.Gmÿ @"5RÀ"5RÀ(>_à.Gmÿ.Gmÿ)` @.Gmÿ @"5RÀ.Gmÿ.Gmÿ#6€ +Bfð.Gmÿ"5RÀ.Gmÿ.Gmÿ1K°%9XÐ.Gmÿ.Gmÿ%9XÐ 0"P(>_à.Gmÿ.Gmÿ.Gmÿ 0%9XÕ%9XÖ"5QÊ"5QË"5RÌ(>_æ466)€.Gmÿ%9XÙ"5QË"5QÊ%9XÖ.Gmÿ 3"',/246642/,'"   ªüRS²_orderFrontFontPanel:ߨ!©ª«¬­®¯°±²³´µ¶·"#+l+l+l*++Â-./+_#NSToolbarItemMenuFormRepresentation€I€@€ € € €;€=€€?€>€<€PYSeparatorW{12, 5}Z{12, 1000}Ù6789:;<=>?@l?lDEFWNSTitle_NSKeyEquivModMask]NSIsSeparatorZNSKeyEquiv\NSIsDisabled]NSMnemonicLocYNSOnImage\NSMixedImage€H€A €A ÿÿÿ€B€FÓ2HIJK^NSResourceName€E€C€D_NSMenuCheckmarkÒ78NO¢O;_NSCustomResourceÓ2HIJS€E€C€G_NSMenuMixedStateÒ78VW¢W;ZNSMenuItemÒ78Y£û;ߨ©ª«¬­®¯°±²³´µ¶·¸+l^l+lbcdÂÃÃch€.€ €T € €K€L€M€-€-€L€NYCustomize_Customize ToolbarÕÊËÌÍÎmÐnÒ€+€O€P€)Ò>Õr€(¡s€QÒ>Ùv€'¢Ûx€#€RÒÞß{€&€SOºMM* %%%[]]]°iiiÃoooÏ e1%(((H=)))J''',BBB…¯¯¯âõõõýõõõþáááüÙÙÙùƒƒƒÛ<EEEzddd½ýýýÿþþþÿÿÿÿÿCCC´HHH‡ÚÚÚóþþþÿãããÿØØØÿ¶¶¶ÿ²²²ÿ‹‹‹î===å QQQ–ôÈÈÈúÇÇÇÿžžžÿ{{{ÿ!!!0%EEEŽÐÐÐöþþþÿáááýÐÐÐÿÿNNNë***² ¬"""l888ežžžÿËËËýÝÝÝÿ¼¼¼ÿ………ÿDDDM,???lÚÚÚò÷÷÷ÿëëëþÊÊÊÿvvvü>>>ü ~4= ‡‡‡ØÁÁÁÿèèèÿßßßÿtttÿ<<>>D–––úõõõÿëëëÿµµµõZZZålŠŠŠœ¢¢¢ÿ¿¿¿ÿGGGç'+uuuŸ©©©ÂúúúÿÛÛÛÿ}}}þcccøHHHè ø&ò8ðq4ì7# Ž ›››øêêêÿòòòÿÐÐÐ쀀€Ëdddêppp̳³³ÿÏÏÏÿÒÒÒÿLLLÚ !6¸ÿÿÿÿøøøÿýýýÿöööÿGGGÿ(((ä))) • ×U(åv9ë“HÜ:%{ aeeeûèèèÿîîîÿùùùÿäääô¸¸¸íßßßÿðððÿáááÿËËËÿ;;;­/|||ÿÿÿÿÿÿÿÿÿ´´´ÿ§§§ÿ@@@ûu $m#»c2ÞAè¢SÊ6#n H;;;á±±±ýÃÃÃÿÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóÿtttçGUUU¢€€€ÿïïïÿ¿¿¿ÿeeeÿ:::Ë W-¥e4Ö†EàªZÀ2#ƒ111³³³øÁÁÁÿŸŸŸÿÖÖÖÿÿÿÿÿûûûûÿÿÿÿÿÿÿÿ½½½ó………ò###tJJJšZZZÿ‘‘‘ÿ777òn E0›h7ÍzBágF"ã³²±øÄÄÄÿ©©©ÿÓÓÓÿzzzú]]]ëlllê]]]õWWWìRRRÇ)))cAAAš###ÿ¬ @.ŸK0㼸³ý¸¸¸ÿ”””ÿÔÔÔÿƒƒƒä333Ï :::A@@@I!"""š . „½»¹ø¯¯¯ÿÿÏÏÏÿˆ„è&&&ª TÁÁÁî«««ÿnnnÿÎÎÎÿœŽ€øe>ß2z ' fËËËï©©©ÿZZZÿÒÒÒÿ‡êH&à‡Cä›NË7‡ ;†ÕÕÕó«««ÿFFFÿÙÙÙÿ†††Å †:²h3Ù…@ë–IÙ>žQ(((¨ÒÒÒó«««ÿ111ÿâââÿÎHh:Êh2á‚>ð•EìE!¸+555ÏÚÚÚöüüüÿÿêêêÿšššÙH†8âi1é~:÷•DÿK"Ò???†¬¬¬÷ÑÑÑÿýýýÿóóóÿ¥¥¥æY ¥1úm3öz8ÿn/ÿ+ÄAAAššššÿ©©©ÿøøøÿ±±±òÊ ÿY)ÿ<÷.²'''VPPPó–––ú¨¨¨ß***­ å ú Â3 AGGGš...pÌ=  *16989/'  *143-$   *16985/'  *143-$   ªüRS²_runToolbarCustomizationPalette:ߨ©ª«¬­®¯°±²³´µ¶·¸+l+l+l†‡ˆÂÃÇŒ€.€ € € €V€W€X€-€-€W€YÒwxŸ€ UStatsÓ2HIJ“€E€C€Z]Toolbar_Statsߨ©ª«¬­®¯°±²³´µ¶·¸+l+l+lžˆÂÃÞ£€.€ € € €\€]€X€-€-€]€^Òwx € VSharedÓ2HIJª€E€C€_^Toolbar_Sharedߨ!©ª«¬­®¯°±²³´µ¶·­®+l+l+lµ¶+¸¹/+€f€e€ € € €a€b€€d€c€<€^Flexible SpaceV{1, 5}[{20000, 32}Ù6789:;<=>?@l?lDEF€H€A €A €B€FÒ78È¡£¡û;ߨ©ª«¬­®¯°±²³´µ¶·¸+lÍl+lÑÒÒÂÃÃÒ×€.€ €w € €h€i€i€-€-€i€jUPrintÕÊËÌÍÎÛÜÝÒ€+€k,À€l€)Ò>Õá€(¡â€mÒ>Ùå€'¢Ûç€#€nÕéÊêëìíî·l_NSCoreUIImageOptions_NSBitsPerSampleZNSHasAlpha€v€o€u Ó>€òõ€t¢óô€p€q¢ö÷€r€s\imageNameKeyVwidgetÒwxü€ _image.ToolbarPrintUimageÒ78ÿ£;_NSMutableDictionary\NSDictionaryÒ78£å;_NSCoreUIImageRep^printDocument:ߨ©ª«¬­®¯°±²³´µ¶·¸+l+l+lˆÂÃÀ.€ € € €y€z€X€-€-€z€{Òwx£€ VSearchÓ2HIJ€E€C€|^Toolbar_Searchߨ!©ª«¬­®¯°±²³´µ¶·+l+l+l&'+Â)*/+€ƒ€‚€ € € €~€€€€€€<€USpaceW{32, 5}Ù6789:;<=>?@l?lDEF€H€A €A €B€FÒ788¤£¤û;ߨ©ª«¬­®¯°±²³´µ¶·¸+l+l+lABˆÂÃÃBG€.€ € € €…€†€X€-€-€†€‡Òwx¥€ YTransfersÓ2HIJN€E€C€ˆ_Toolbar_Transfersߨ©ª«¬­®¯°±²³´µ¶·¸+l+l+lXYˆÂÃÃY^€.€ € € €Š€‹€X€-€-€‹€ŒÒwx¦€ WNetworkÓ2HIJe€E€C€_Toolbar_NetworkÒ>Ùi€'¬‘–˜•’™š—”“€€/€:€g€}€`€J€„€‰€x€[€UÒ>Õx€(¨‘™š—”“˜•€:€„€‰€x€[€U€}€`Ò>Õƒ€( Ò78…†¢†;YNSToolbar_{3.40282e+38, 3.40282e+38}׉ЋŒ\Ž‘’Ž”_NSNextResponderZNSSubviewsXNSvFlags[NSFrameSize[NSSuperview€”#€•¤€”¥Ò>Õ—€(¢˜™€–Ÿß‰›œžŸŠ‹ ¡\¢£¤¥N·n¨©ªn¬‘­WޝNl²³_BWSVCollapsiblePopupSelection_BWSVDividerCanCollapseWNSFrame\BWSVMaxUnits_BWSVColorIsEnabledYBWSVColor^NSDividerStyle\BWSVMinUnits\NSIsVertical]BWSVMaxValues]BWSVMinValues€“–šž€—€°€”€“ œ›Ò>Õ¶€(¢·¸€˜—߉›œžŸŠ‹Œ ¡\¢£¤¥˜on¨½n¿‘À­WŽÃ˜lÆÇ€––•€™€°€”“€– ’‘Ò>ÕÊ€(¢ËÌ€š€ÚØ‰Š‹Œ\2·ÏÐÑÒŽÔ·€˜€Ù€›€×€”€Ø€˜Ò>ÕØ€(¡Ù€œÝ‰ÛÜŠÝ‹\ÞßàËâãäåæç‘ŽËêëë[NSHScrollerXNSsFlags\NSScrollAmts[NSVScroller]NSNextKeyView]NSContentView€š€Ó€Ö€Õ2€OA A A A €”€š€Ï€ž€žÒ>Õï€(£ëꄀπÓÛ‰ôŠ‹õ\ößÙøùWúûüŽþÙüYNScvFlagsYNSDocViewYNSBGColor€œ€Î€Ê€Ÿ € €”€Ë€œ€ Ò>Õ€(¡ü€ ß‰     ‹Œ\ë·olÑlŽ Xë"#_NSDraggingSourceMaskForNonLocalYNSTvFlags_"NSTableViewSelectionHighlightStyle_NSBackgroundColor_NSAllowsTypeSelect\NSCornerView_NSIntercellSpacingWidth_NSColumnAutoresizingStyle_#NSOutlineViewIndentationPerLevelKeyYNSEnabled[NSGridColor_NSDraggingSourceMaskForLocal^NSTableColumns[NSRowHeight€ž€ÉÿÿÿÿÒ@€Ã €¢#@"A`€¡ €”€Æ€ž€¥#@4Z{212, 639}Ô‰‹+'()€€¤€£ÿÿÿÿ€_{{-26, 0}, {16, 17}}Ò78,-¤-./;]_NSCornerViewVNSView[NSResponderÒ>Õ2€(¢34€¦€¾Ú6789:;<=>l@ABCDðEFü^NSIsResizeable\NSHeaderCell\NSIdentifierWNSWidthZNSDataCell^NSResizingMaskZNSMinWidthZNSMaxWidth[NSTableView €½€¨€§#@bÀ€²#@0#@@€ Vsource×J KLMNOPQˆS·T[NSCellFlagsZNSContentsYNSSupport\NSCellFlags2[NSTextColorþ€±€¬€X€©€­ÔÊVWXYZ[VNSNameXNSfFlags€«#@&€ª \LucidaGrandeÒ78^_¢_;VNSFontÓíîïðb€*K0.33333299ÕÍídeï­hij[NSColorName]NSCatalogName€*€°€¯€®VSystem_headerTextColorÓíîïðo€*B0Ò78qr¥rstu;_NSTableHeaderCell_NSTextFieldCell\NSActionCellVNSCellÚJw KLxM2Nyz{|}~ü€‚_NSOriginalClassName]NSControlView!þ@€¼€´€·€µ€¶€ €³€º\CellWithIconYText CellÔÊVWX‡Z‰€«#@*€ªÕÍídeïŒhj€*€¹€¸€®_controlBackgroundColorÓíîïð’€*K0.66666669ÕÍídeï­h–j€*€°€»€®_controlTextColorÒ78𛢛;^NSClassSwapperÒ78ž¢ž;]NSTableColumnÚ6789:;<=>l@¢£¤¥W¦Fü €½€À€¿#@L€Á#@D€ Vstatus×J KLMNOPQˆS·T€±€¬€X€©€­ØJ KLxMNy°|}~ü€‚€Â€·€µ€¶€ €ºÒ78·s¤stu;ÕÍídeïºh»j€*€Å€Ä€®__sourceListBackgroundColorÓí¿ïoÁUNSRGB€*O 0.8392157 0.86666667 0.89803922ÕÍídeïÄhÅj€*€È€Ç€®YgridColorÓíîïðÊ€*D0.5Ò78ÌͦÍ>Î./;]NSOutlineViewYNSControl_{{1, 1}, {212, 639}}ÕÍídeïÒhÓj€*€Í€Ì€®_selectedControlColorÓíîïðØ€*B1Ò78ÚÛ¤Û./;ZNSClipViewى݋\ÞßÙÙâã)ŽåÙçXNSTargetXNSActionYNSPercent€œ€œ€Ò€Ð€”€Ñ€œ#?ïó3@_{{198, 1}, {15, 624}}\_doScroller:Ò78ëì¥ìÎ./;ZNSScrollerÚ‰ÝÜ‹\ÞßÙÙâño)ŽåÙõ€œ€œ€Ò€Ô€”€Ñ€œ#?ïÙŠ@_{{1, 625}, {197, 15}}_{{0, 1}, {214, 641}}Ò78ùú¤ú./;\NSScrollViewZ{214, 642}Ò78ýþ¥þÿ./;\BWCustomView\NSCustomViewØ‰Š‹\2·ÏŽÔ·€˜€Ù€Û€”€Ø€˜Ò>Õ €(¡ €ÜÞ‰_Š‹\Ì~ŽlÌl^NSTabViewItems_NSDrawsBackground_NSAllowTruncatedLabels_NSSelectedTabViewItemZNSDelegate€ÚŽ%$€¶€Ý€” €Ú …Ò>Õ"€(¡#€Þ׉Ћ\ '(ÑŽ €Ü#"€ß€”€ÜÒ>Õ-€(¡.€à߉ÛÜ 0ŠÝ‹\Þßà#2ã4å5678‘Ž#;<<_NSHeaderClipView€Þ€Ö!€ê€ç€áOA A A˜A˜€”€Þ€â€âÒ>Õ@€(¥<;265€â€ç€êÛ‰ôŠ‹õ\öß.øIJûKŽ|.K€à€Î€ã€ä€”€·€à€äÒ>ÕR€(¡K€ä߉U     V‹Œ\<·XYZ|l5^‘_lŽ X<de\NSHeaderView_NSIntercellSpacingHeight€âÿÿÿÿÖÀ€æ€· €ê#@€å €”€Æ€â€ì#@1Z{792, 623}׉‹Œ\>6iÑjŽ6K€ç€é€è€”€ç€äÛ‰ôŠ‹õ\öß.øqrûZŽ|.Z€à€Î €æ€”€·€à€æY{792, 17}Ò78z{¤{./;_NSTableHeaderViewÖ‰‹\.')Ž.€à€¤€ë€”€à_{{778, 0}, {16, 17}}Ò>Õ…€(¨†‡ˆ‰Š‹Œ€í€ó€ø Ú6789:;<=>l@‘’“”ð¦FK €½€ï€î#@Y@€ò€äXfilename×J KLMNOP™šS·T€±€ñ€ð€©€­TNameÓíîïðb€*ØJ KLxMNy°|}~K€‚€Â€·€µ€¶€ä€ºÚ6789:;<=>l@ª«¬­ð¦®K €½€õ€ô#@T€÷#@Y€äTsize×J KLMNOP™´S·T€±€ñ€ö€©€­TSizeØJ KLxMNy°|}~K€‚€Â€·€µ€¶€ä€ºÚ6789:;<=>l@ÂÃÄÅðÆ®K €½€ú€ù#@P€þ#@$€äSreq×J KLMNOPËÌS·T€±€ü€û€©€­YRequestedÕÍídeïÒhÓj€*€Í€ý€®[headerColorØJ KLxMNy°|Ù~K€‚€Â€·€ÿ€¶€ä€ºÚ6789:;<=>l@àáâãðÆäK €½#@U#Gïÿÿà€äWreq_all×J KLMNOPËêS·T€±€ü€©€­^Total RequestsØJ KLxMNy°|Ù~K€‚€Â€·€ÿ€¶€ä€ºÚ6789:;<=>l@øùÄúðÆäK €½ €äVaccept×J KLMNOPËS·T€±€ü€©€­XAcceptedØJ KLxMNy°|Ù~K€‚€Â€·€ÿ€¶€ä€ºÚ6789:;<=>l@ðÆäK €½  #@W€€äZaccept_all×J KLMNOPËS·T€±€ü €©€­^Total AcceptedØJ KLxMNy°|Ù~K€‚€Â€·€ÿ€¶€ä€ºÚ6789:;<=>l@%&â'ðÆäK €½€äTxfer×J KLMNOPË-S·T€±€ü€©€­[TransferredØJ KLxMNy°|Ù~K€‚€Â€·€ÿ€¶€ä€ºÚ6789:;<=>l@;<=>ðÆäK €½#@h €äXxfer_all×J KLMNOPËDS·T€±€ü€©€­_Total TransferredØJ KLxMNy°|Ù~K€‚€Â€·€ÿ€¶€ä€ºÒ78P>¥>Î./;_{{1, 17}, {792, 623}}ى݋\Þß..âV)Žå.Z€à€à€Ò€”€Ñ€à#?ï:ÂÀ_{{778, 17}, {15, 608}}Ú‰ÝÜ‹\Þß..â`o)Žå.d€à€à€Ò€”€Ñ€à#?ï6:_{{1, 625}, {792, 15}}Ò>Õh€(¡Z€æ_{{1, 0}, {792, 17}}_{{0, -5}, {794, 641}}_{{10, 7}, {788, 638}}Ò78n.£./;_{{-8, -10}, {808, 658}}Ò>Õr€(¥stuw&}…ˆÖ8.yÍz{|} €YNSTabViewWNSLabel|'(€ÜzyYdownloadsՉЋ+…†‘€#x)Ò>Õ‰€(¡Š*׉Ћ¡}Ž‘W}(wv+(Ò>Õ“€(¡”,׉ЋŒ2Š—˜‘™ÔŠ*u-t€Ø*Ò>Õž€(¡Ÿ.Þ‰ÛÜ 0ŠÝ‹ŒÞßà”¢ã¤¥¦§8‘¨”ª««,o€Ö²75/s,m00Ò>Õ¯€(¥«ª¢¦¥0mo57Ú‰ôŠ‹õöߟø¸¹ûº|Ÿº.€Îl12€·.2Ò>ÕÀ€(¡º2߉U     V‹ŒÃ«·XÆÇÒl¥^ÑËl o«ÏXe_NSGridStyleMask0ÿÿÿÿÖ`4€Í 73 €Æ09Z{794, 605}Ö‰‹Œ>¦iÑÔ¦º5€é652Ú‰ôŠ‹õöߟøÚÛûÇ|ŸÇ.€Îrq4€·.4Y{794, 17}Õ‰‹Ÿ'ä)Ÿ.€¤8.Ò>Õè€(ªéêëìíîïðñò:@EJOTY^chÚ6789:;<=>l@ö÷øùð¦Fº €½<;#@i?2×J KLMNOPýþS·T€±>=€©€­XFilenameÓíîïðb€*ØJ KLxMNy°|}~º€‚€Â€·€µ€¶2€ºÛ6789:;<= >l@®ð¦Flº\NSIsEditable €½BAD 2Xprogress×J KLMNOPýS·T€±>C€©€­XProgressØJ KLxMNy°|}~º€‚€Â€·€µ€¶2€ºÛ6789:;<= >l@&'Ä(ðÆ)lº €½GFI#Gïÿÿ  2×J KLMNOPË/S·T€±€üH€©€­ØJ KLxMNy°|}~º€‚€Â€·€µ€¶2€ºÛ6789:;<= >l@<=>?ðÆ)lº €½LK#@Q€N 2Wxferred×J KLMNOPËFS·T€±€üM€©€­ØJ KLxMNy°|}~º€‚€Â€·€µ€¶2€ºÛ6789:;<= >l@STÄUðÆ)lº €½QPS 2Ycompleted×J KLMNOPË\S·T€±€üR€©€­R%%ØJ KLxMNy°|}~º€‚€Â€·€µ€¶2€ºÛ6789:;<= >l@jkÄlðÆ)lº €½VUX 2Uspeed×J KLMNOPËsS·T€±€üW€©€­USpeedØJ KLxMNy°|}~º€‚€Â€·€µ€¶2€ºÛ6789:;<= >l@‚ăðÆ)lº €½[Z] 2Tprio×J KLMNOPËŠS·T€±€ü\€©€­XPriorityØJ KLxMNy°|}~º€‚€Â€·€µ€¶2€ºÛ6789:;<= >l@˜™ÄšðÆ)lº €½`_b 2Wtimerem×J KLMNOPË¡S·T€±€üa€©€­YRem. timeØJ KLxMNy°|}~º€‚€Â€·€µ€¶2€ºÛ6789:;<= >l@¯°Ä±ðÆ)lº €½edg 2Xlastcomp×J KLMNOP˸S·T€±€üf€©€­_Last seen completeØJ KLxMNy°|}~º€‚€Â€·€µ€¶2€ºÛ6789:;<= >l@ÆÇÆÈðÆ)lº €½jik 2Vlastrx×J KLMNOPˈS·T€±€ü€X€©€­ØJ KLxMNy°|}~º€‚€Â€·€µ€¶2€º_{{1, 17}, {785, 605}}؉݋ÞߟŸâÞ)åŸá..€Òn€Ñ.#?ï9΀_{{771, 17}, {15, 605}}Ú‰ÝÜ‹ÞߟŸâçoÑlåŸë..€Òp €Ñ.#?ï£$À_{{1, 622}, {785, 15}}Ò>Õï€(¡Ç4_{{1, 0}, {785, 17}}Z{787, 638}Z{796, 658}Ò78õÿ¤ÿ./;_{{2, -3}, {796, 658}}Ò78øù¤ù./;[NSSplitViewYDownloadsÕÍídeïŒhþj€*€¹{€®\controlColorÒ78¢;]NSTabViewItemÖ8.yÍz{ |~€Üz€zVsearchÔ‰‹+Ñ€#€Ö8.yÍz{ Y|‚ƒ€Üz€‹WnetworkÔ‰‹+Ñ€#„Ö8.yÍz{# "|†€Þ€Üz‡VsharedWSharingÖ8.yÍz{'( +|‰Š€ÜzŒQ5Ô‰‹+0Ñ€#‹ZStatisticsÒ783y¤y./;_{{215, 0}, {792, 642}}[{1007, 642}Ó>€89€t  Ó>€<=€t  Ó>€@C€t¢AÛ”€#¢ÛÛ€#€#Ó>€HK€t¢AÛ”€#¢ÛÛ€#€#Ò78OP¥Pù./;[BWSplitViewÖ‰‹\˜STUŽ˜€–™˜€”€–_{{1008, 0}, {0, 642}}Ò78Z[¤[./;_BWAddRegularBottomBar_{{0, 34}, {1008, 642}}Ó>€_`€t  Ó>€cd€t  Ó>€gi€t¡Û€#¡Û€#Ó>€mo€t¡Û€#¡Û€#؉u‹\NstuvlŽN€“£ ¡ €”€“_{{8, 12}, {300, 14}}ØJ KLxMN|°S™‚‚þ@€Âz¢€©ŸB€º_Conection statusÒ78†‡¦‡ˆÎ./;_BWInsetTextField[NSTextField[{1008, 676}_{{0, 0}, {1440, 878}}Ò78Œ¢;_NSWindowTemplateÒ78£‘;\NSMutableSetUNSSetÒ>Õ”€(¯!•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ«²¹»ÒÔØðöúþ #')-/168=?DFHLÔ·¸z¹º»¼]NSDestinationXNSSource±®¬°Ò23¿€­]AppControllerÒ23À¯_DownloadsViewController_m_dload_controllerÒ78ÇÈ£ÈÉ;_NSNibOutletConnector^NSNibConnectorÓ¸zËÌ͸³·Ø679;<=Ï>Ñ@ÒDEFÕVNSMenu€Hµ¶€B€F´Ô6VרRÚÛ[NSMenuItems΀ geZQuit aMuleQqZterminate:Ò78àá£áÉ;_NSNibControlConnectorÔ·¸zË»™æ¸¬€„º[show_Xfers:Ô·¸z¹êëì±¾¼ÑÒ23_AddLinkDialogController׉u‹òóôõvlò¿ÐÀÁ ¿Õ‰Š‹Œ+ûÑü€#Ýì_{{501, 37}, {100, 26}}ßJÿLWxMÏ  lWˆ oˆ~êoll€_NSMenuItemRespectAlignment_NSArrowPosition_NSAlternateContents_NSPeriodicInterval^NSButtonFlags2_NSKeyEquivalent_NSPreferredEdge_NSUsesItemFromMenu]NSAltersState_NSPeriodicDelay]NSButtonFlagsÿÿÿÿ„Aþ@ €XKÏ€X€¶Â¾ Â@ÿÛÝ679;<=ÏÞõ>@ˆDEF!oWNSStateÁ€HÄ€X€B€FÃÅÓ6ר$%ÎÆÇXCategory__popUpItemAction:ZOtherViewsÒ>Õ+€(£-.ÂÈËÚÝ679;<=ÏÞõ>2@ˆDEF7Á€HÉ€X€B€FÃÊVItem 2ÚÝ679;<=ÏÞõ><@ˆDEFAÁ€HÌ€X€B€FÃÍVItem 3Ò78DÏ¢Ï;Ò78FG¦GHItu;_NSPopUpButtonCell^NSMenuItemCell\NSButtonCellÒ78KL¦LMÎ./;]NSPopUpButtonXNSButtonUm_catÔ·¸zË»”S¸¬€[Ó]show_Sharing:Ô·¸z¹W»Y±Õ¬×Ò23\€Ö_SearchViewController_m_search_controllerÔ·¸z¹aëc±Ù¼ïÜCDEFGHIJKLMòOghiSTklWð+¿¨ÜíÛ€ Úî€_{{196, 428}, {752, 82}}XAdd linkÒ>Õr€(£sêuÞ¾æ×‰u‹òxyzvlò¿åßà ¿_{{20, 40}, {481, 22}}ÙJ KLxMN°ˆ~s…l‡ÿÿÿÿ”qþA€Âá€X€¶Þ@ ãÕÍídeïÒh‹j€*€Í‮_textBackgroundColorÕÍídeï­h‘j€*€°䀮YtextColorÒ78•ˆ¥ˆÎ./;׉u‹ò˜™švlò¿ëçè ¿_{{621, 33}, {96, 32}}ÜJKLxM Ÿ ˆ¢£ˆ¥~u¨©ªþê€X€X逶æÈÿÿÿÿ†‚@ÿROKÒ78­I¤Itu;Ò78¯M¥MÎ./;Y{752, 82}Um_dlgÓ¸zË´µ¸ñõØ679;<=Ï>¸¹ºDEF½€Hóô€B€FòÓ6רÀÁÎOP\Show ToolbarQt_toggleToolbarShown:Ô·¸z¹Ç»É±÷¬ùÒ23Ì€ø_SharedFilesViewController_m_shared_controllerÔ·¸z¹ ÒÓ±€ÜûýÒ23Ö€ü_SourceViewControllerZm_tab_viewÔ·¸z¹KÇݱ€ä÷ÿ\m_table_viewÔ·¸zË»â㸬×69;<=Ï>æˆDEFÕ€H€X€B€F´[About aMule[show_About:Ó¸zËïð¸ Ø679;<=Ï>ó@ôDEF÷€H€B€FÓ6רúûÎkmZaMule HelpQ?YshowHelp:Ó¸zË  ¸  Ø679;<=Ï> @ˆDEFÕ€H €X€B€F´XShow All_unhideAllApplications:Ô·¸z¹ » ±€Ü¬^m_main_tabviewÔ·¸zË»— ¸¬€x\show_Search:Ó¸zË  ¸Ø679;<=Ï> ¹ DEFÕ€H€B€F´[Hide OthersQh_hideOtherApplications:Ó¸zË ( )¸Ø679;<=Ï> ,@ -DEF 0€H€B€FÔ6Vר 3 4 5Î[^\XMinimizeQm_performMiniaturize:Ó¸zË ; <¸"Ø679;<=Ï> ?@ @DEF C€H !€B€FÓ6ר F GÎoqfPrint &QpVprint:Ó¸zË M N¸$&Ø679;<=Ï> Q@ˆDEF 0€H%€X€B€FTZoom\performZoom:Ô·¸z¹ë» \±¼¬(^m_add_link_dlgÓ¸zË ` a¸*,Ø679;<=Ï> d@ DEFÕ€H+€B€F´ZHide aMuleUhide:Ô·¸z¹™» o±Ÿ¬._m_connection_status_textÔ·¸zËëu u¸¼æ0XcloseOK:Ô·¸zË» z {¸¬25Ø679;<=Ï> ~@ DEF C€H34€B€F]Add ed2k linkQnXaddLink:Ô·¸zË»š Š¸¬€‰7^show_Networks:Ó¸zË Ž ¸9<Ù ‘679;<=Ï>ˆ ” • –DEF CYNSToolTip€H€X:;€B€F]Page Setup...QP^runPageLayout:Ô·¸z¹üÒ ¡±€ û>^m_outline_viewÔ·¸zË» ¦ §¸¬@CØ679;<=Ï> ª@ «DEFÕ€HAB€B€F´lPreferences &Q,_show_Preferences:Ô·¸z¹ºº ¶±2®E[m_tableviewÔ·¸z¹së ¼±Þ¼GVm_linkÓ¸zË À Á¸IKØ679;<=Ï> Ä@ˆDEF 0€HJ€X€B€F_Bring All to Front_arrangeInFront:Ô·¸zË»“ ϸ¬€UM[show_Stats:Ò>Ù Ó€'¯¢( ”}š½zëëâs ä å»í”êˆl ŽÌZ2(?Ç M õ¸-Ÿâï‡Ç 0 þwŠ ’êòÒ• ;Èð ùõ ‘sDïü3ŠÅ‹Œºñ™̘™W "UªêK· ( (>u , .“  z 2†' Ct.Ë 9ò˜ ¦ãNÙ”uAƒY­ ` G‰ì±– Múé4#´.š—ºa;u÷šîÕ À¥oŠ …,D€/(èòàE¼&QR¬O€[€Ï€øƒX9³€æIN÷$U—È.€ÓY€ó4_ˆ*`€J¾hû€`k^€b?Ác€:Þ€²€ €¦€þ 2cŸ€Ú€}€„ÕÃhSm@€ä€˜ijn€U2f€í}Ë€šX¿€–@€“€œ€ò¡€]€ €÷*SJg€g€Ü] :€¾€Þñ€à€‰€x®ÙÂæbT´I€ÁTViewÒ>Õ d€(¡´ñÚ6789:;<=Ï>ˆ@lˆlDEFÕ€H€X €X €B€F´Ú p679;<=ÏÞ>½À@ˆDEF G xYNSSubmenu€HòO€X€B€FSTÔ6Vר { | }Îrts^submenuAction:Ú p679;<=ÏÞ> 9 ‚@ˆDEFÕ ‡€HXV€X€B€F´WXServicesÔ6Vר ‚ Œ ÎVZYÒ>Õ €( __NSServicesMenuVWindowÒ>Õ •€(¤ ( M M À$]IÚ6789:;<=Ï>ˆ@lˆlDEF 0€H€X €X €B€F^_NSWindowsMenuÚ6789:;<=Ï>ˆ@lˆlDEFÕ€H€X €X €B€F´Ú p679;<=ÏÞ> 0 3@ˆDEF G µ€H[€X€B€FSaÚ6789:;<=Ï>ˆ@lˆlDEFÕ€H€X €X €B€F´Ú p679;<=ÏÞ>ÕR@ˆDEF G Ç€H´€ €X€B€FSdÒ>Õ Ê€(«â ¦ 2 õ þ `   äÌb@fU_* Q³Ú6789:;<=Ï>ˆ@lˆlDEFÕ€H€X €X €B€F´\_NSAppleMenuÚ6789:;<=Ï>ˆ@lˆlDEF C€H€X €X €B€FÒ234€€Ú p679;<=ÏÞ>÷ú@ˆDEF G ô€Hk€X€B€FSlTHelpÒ>Õ ø€(¡ïÚ p679;<=ÏÞ> C F@ˆDEF G €Ho€X€B€FSpTFileÒ>Õ €(¤ z " Ž ;2h9YAMainMenuÒ>Õ €(¥  . å  ,cnR`j[_NSMainMenuÒ>Ù €'¯ŸwÕ ŠêYsu åsºKÕ Õ GºYÙKuî CÕ..ëì 0Õ˜”ÙºKŸ Õ } GY‹òºY CòºYÕéê GYò3÷ÙüKˆKKŸºN·YYõ Cퟺ.˜ 0 Gt GYÕ CÕKŒ . · õaNÕ‰Aˆ™ïA‡ÕKºñYÌ 0Šºü½#YY.ò ,ðº  04.ˆ´€Ü*@€ &æRÞ2€ä€´€Ü´S€2€ €œ€äT´€à€àEJ€´€–Ã,€œ2€ä.`´€Ü(S€  ¿2€€ h2€ ´:¾S€ ¿€¦€œ€ €ä€ø€ä€ä.2€“€˜€ € €ÁO.2€à€–€€ÜS}S€ ´´€än€ÜÀ˜UÙ€“´€€š€íŸ€Y€€ó´€€ä2c€ €Ú2€ …ò€Þ€ € €€€àÿj^2c€¾Ò>Ù §€'¯Ž¢ š(}”½zëëâs ä å»í”êˆlÇÌ ŽZ2(? M õ¸-ŸâLJï 0 þwŠ ’êÒò• ;Èð ùõ ‘sD™ïü3Š‹™˜ŒÅW̺ñ "UªêK· ( (>u , .“  z 2†' C.tËò 9˜ ¦ãN—uYAÙ”­ ` G–‰ìƒ Mšú4#´º.é±a;u÷šîÕ À¥o…€/ €èŠ(,òàDE¼&QR¬O€[€Ï€øƒX÷³9€æIN$U—È.€Ó4€óY_ˆ*`€J¾ûh€`k€^b?Ác€:Þ€²€„€ €¦ Ÿ€}€þÕ€ÚÃ2chSm@€ä€˜ijn€U2f€íË}€š¿X€–@€“€x¡€ €€œ€ò€÷*S€gJ]€Ü]€‰ €¾€Þñ®€à:gÙÂæbT´I€ÁÒ>Ù 8€'¯Ž 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T' V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶À ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“‰”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôOõö÷øùúûüýþÿ_Horizontal Scroller-2_ Selected Tab View Item (Sharing)_Toolbar Item (Fonts)_Menu Item (Show All)\File's Owner_Button Cell (OK)VView-2VView-1]Custom View-2[Menu (View)_Text Field Cell_Text Field Cell (Text Cell)-15_Table Column (size)-1_Table Column (xfer_all)_Add Link Dialog Controller_Menu Item (About aMule)_Tab View Item (Downloads)[Separator-1_Menu Item (View)^App Controller_Table Column (completed)_Toolbar Item (Shared)_Vertical Scroller_Table Column (req)VView-3_Text Field Cell (Text Cell)-18VObjectT1111_Table Header View_Horizontal Scroller-1_Text Field Cell (Text Cell)-9_Text Field Cell (Text Cell)-16_Menu Item (Zoom)_Menu Item (Services)_Add Regular Bottom Bar_Menu Item (Item 2)_#Bordered Scroll View (Table View)-1_Horizontal Scroller_Table Header View-1_Table Column (size)_Table Column (prio)]Menu (Window)[Separator-2_Tab View Item (Statistics)\Split View-2_Menu Item (Window)_Toolbar Item (Customize)_Popup Button (Category)_Text Field Cell (Text Cell)-5_Source View Controller_Table Column (lastrx)_,Toolbar Flexible Space Item (Flexible Space)Q6_Text Field Cell (Text Cell)-12_Toolbar Item (Colors)_Table Column (timerem)[Separator-3_Text Field Cell (Text Cell)-17_Pop Up Button Cell (Category)_Menu Item (aMule)_"Toolbar Separator Item (Separator)ZText Field_Cell With Icon (Text Cell)_Toolbar Item (Transfers)_Menu Item (aMule Help)\Outline View_Table Column (source)_Table Column (accept)_Table Column (accept_all)_Static Text (Conection status)_Toolbar Space Item (Space)_Table Column (xfer)_Text Field Cell (Text Cell)-2_Search View Controller[Custom View_Menu (OtherViews)_fTable View (Filename, Progress, Size, Transferred, %%, Speed, Priority, Rem. time, Last seen complete)_Table Column (lastcomp)Q7_Text Field Cell (Text Cell)-10_Vertical Scroller-2_Table Column (progress)_lTable View (Name, Size, Requested, Total Requests, Accepted, Total Accepted, Transferred, Total Transferred)\Split View-1[Application_Menu Item (Minimize)_Text Field Cell (Text Cell)-1_Tab View Item (Network)Q1VView-4_Menu Item (File)_Toolbar Item (Stats)_Menu Item (Hide Others)Q9[Separator-4_Table Column (filename)_Text Field Cell (Text Cell)-6[Menu (File)_Menu Item (Item 3)_Tab View Item (Search)]Custom View-1^Content View-1_Menu (Services)ZSplit ViewS121_Text Field Cell (Text Cell)-8\Content View_Toolbar Item (Search)_"Text Field Cell (Conection status)WToolbar^Window (aMule)_#Bordered Scroll View (Outline View)_Text Field Cell (Text Cell)-7_Text Field Cell (Text Cell)-3_Menu Item (Hide aMule)XMainMenu_Toolbar Item (Print)_Table Column (req_all)_Table Column (xferred)_Text Field Cell (Text Cell)-11_BNo Tabs Tab View (Downloads, Search, Network, Sharing, Statistics)_Toolbar Item (Network)_Text Field Cell (Text Cell)-4_Table Column (status)_Menu Item (Show Toolbar)_Downloads View Controller_!Bordered Scroll View (Table View)_Table Column (filename)-1_Text Field Cell (Text Cell)-14_Window (Add link)_Vertical Scroller-1_Menu Item (Category)_Push Button (OK)Q2_Text Field Cell (Text Cell)-13_Table Column (speed)\Menu (aMule)_Menu Item (Bring All to Front)_Text Field Cell (Text Cell)Ò>Ù T€'¡D€²Ò>Ù X€'¡€³Ò>Ù \€'¯¯¢( ”}½zšë¦³ëâs› ä 岻픥ꭈl– ŽÌZ2(?Ç M õž¸-Ÿâ¬ï‡Ç 0£ þwŠ ’êòÒ•—˜ ;Èð ùõ ‘ °sDïü3ŠÅ‹Œºñ™̘™W¡® "UŸªê¯K· ( (¢>u , .“¨´  z 2†'™ C«µt.Ë 9ò˜ ¦ãNÙ”uAƒY­ ` G‰ì±– Múé4#´.š—ºœ§a©;u÷šî±ªÕ À¥•¤šoŠ …€,D(€/òàèEF¼&ØQRD¬O€[€Ï1€øƒX²9³€æIN÷$Uú—È.€Ó/Y€ó4_ˆ*`€J¾hû€`¹»k^€b?Ác€:=Þ€²€ €¦€þ 2cŸ€Ú€}€„ÕÃ6hSþm@8€ä€˜i jn€U#H2f€íÒ-L}Ë€šX¿€–@€“€œ€ò¡€]€ €÷*SJg€g€Ü] :€¾€Þñ€à€‰€x®ðÙ'ÂöæbT?)´I€Á«ÔÒ>Ù€'¯¯ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶é–´^º ¸|(íõ %ûYø:·ü•'*w”pöOçqMˆJH[ïƒ9>ò ùL-³¹Vî5€–úN{ì ï8}y:ì&o!#SPUWCA‘æðh—O] WI?ÿÿÿÿÿÿÿýrZµgÔS•ð'‘RKX™QEš¶ó@‚ëþRtNDszM†Q~\T $è)F’“«nVêýGñ\ôjxo9%¬˜éÒ>Õm€( Ò>Ùp€' Ò>Ùs€' Ò78uv¢v;^NSIBObjectData"'1:?DRTfàæ18?M_{‰•¡¯ºÈäò   1 ; H J M P S V Y \ ^ a d g j l n q t w z ƒ ‘ “ ¡ ª ³ ¾ Ã Ò Û î ÷    ; H a n | † ” ¡ « ½ Ñ Ý ß â ä ç é î ð ò õ ÷ ù û   % Z t – ° Ò æ   3 V s Š   ¢ ¤ ¥ § ¨ ª ¬ ® ¯ ° ² ´ ½ Ç É ð ù   ( 0 2 K M O Q S U W Y [ ] _ a c | ~ € ‚ „ † ˆ Š Œ Ž ’ ” ® Ç à'Nk€§¼ã Moƒš°Ëáþ4K^uŒ¡¶¸º¼½¿ÀÂÃÅÇÉÒÔÖØÚáô $,.0579BKMPR[]bdfo†ˆŠ"H"Q"X"k"v""„"Œ"•"œ"«"¸"Å"Í"Ï"Ñ"Ö"ß"ä"í"ò"ú###"#'#5#x#z#|#}##€#‚#ƒ#…#‡#‰#‹###‘#—#©#¾#À#Â#Ä#Æ#Ï#Ñ#Ô#Ö#ß#á#æ#è#ê#ó#õ#÷4µ4Ì5595;5=5?5@5B5C5E5F5H5J5L5N5P5R5T5U5_5g5r5—5Ÿ5³5Á5Ì5Ù5ç5ñ5þ66666 6 6666!606264666H6Q6V6i6v6x6z6|66˜66¨6±6¸6û6ý6ÿ7777777 7 77777727G7I7K7M7O7X7Z7]7_7h7j7o7q7s7|7~7€H>H`H£H¥H§H¨HªH«H­H®H°H²H´H¶H¸HºH¼HÅHÇHÍHÚHÜHÞHàHîI1I3I5I6I8I9I;II@IBIDIFIHIJISIUI\IiIkImIoI~IÅIÇIÉIËIÌIÎIÏIÑIÒIÔIÖIØIÚIÜIÞIàIïIöJJ'J)J+J,J.J/J1J3JL@LBLCLELFLHLILKLMLOLQLSLULWL`LbLiLvLxLzL|L‹LÒLÔLÖLØLÙLÛLÜLÞLßLáLãLåLçLéLëLíLóLûM M"M$M%M'M(M*M,M5MVGVIVLVYVbVgVnV{V}V‰VžVªV¸VºV¼V¾VÀVÂVÉVÛVèVêVíVöWWW'W4W;WdWzWˆWWW‘W“W•W—W™WœWžW W­W·WÈWÊWÓWÕWØWíWïWñWóWõXXXX)X>X@XBXDXFXYXbXgXvXX„X’X»X¼X¾XÀXÂXËXÍXÖXØXßXüXþYYYYY'Y)Y+Y-Y/Y1Y3Y\@\y\ˆ\œ\µ\Í\Ø\Ú\Ý\à\ã\å\ç\é\ë\ì\î\ï\ò\õ\þ]]]]"]$]']*],].]0]9];]>]@]]’]”]—]™]œ]ž] ]¢]µ]·]¹]¼]¾]À]É]Ë]Ö]Ø]Û]Þ]à]â^^^^^^^^^ ^"^+^-^0^2^…^’^­^¯^²^»^½^¿^À^Â^Ë^Í^Î^Ð^Ò^Ô^Ö^ß^ê__ _ _ ____@_B_D_G_J_L_N_P_R_T_^_g_p_„__Ÿ_¡_£_¥_§_¾_Ç_É_Ú_Ü_Þ_à_ã_æ_é_ì_ï``````(`*`,`5`R`T`V`X`Z`\`a`n`p`‘`“`•`—`™`›``Æ`Ç`É`Ë`Í`Ö`Ø`á`ã`èaaa a a aaa5a7a9a;a=a?aAajakamaoaqaza|a…a‡a‹a¨aªa¬a®a°a²a¼aÑaÓaÕa×aÙaåbbb b bbbb;bbAbDbMbPbYb[bcb€b‚b„b‡b‰b‹bšb»b½b¿bÁbÃbÅbÇbðbñbóböbùbübþcc"c$c&c)c+c-c6cWcYc[c]c_cacccŒccc’c•cžc¡c£c®cËcÍcÏcÒcÔcÖcåddd d dddd;ddAdDdGdIdNdkdmdodrdtdvd‚d£d¥d§d©d«d­d¯dØdÙdÛdÞdádêdídïdøeeeeee e4eUeWeYe[e]e_eaejeuee²e´e¶e¸e»e½e¿eÁeÊeãf ffffffff$fgAgDgGgPgRgUgXgugxg{g~gg„ggg’g•g²gµg¸g»g¾gÀgÃgÌgÎgÑgÔh hhhhhhh!h$h'h*h-h0h9h;hFhIhLhOhRhUh~hhƒh†h‰hŒhŽh‘h”hhŸh¢h¥høi i iiiiii"i%i&i(i+i.i9iRiUiWiZi]i`i‰iŒiŽi‘i”i—i™iœiŸi©i¾iÁiÃiÆiÉiÒiÔiéiìiïiòiõiøiûiþjjjj0j1j3j6j9jBjEjHjejgjjjmjojqjzj‡j‰jªj¬j®j°j²jµj·jäjñjòjôj÷jújýjþkk k'k)k,k/k1k3krErVrXr[r^rwrzr}r€r‚r…r‡rr r¢r¥r¨rÁrÄrÇrÉrËrÎrÑrØràrùrürÿssss s sss"s%s0s9sBs[sgstsvswsxs…s‡sˆs‰s–s˜ss s¢s§s©s«s¸sºs¿sÂsÄsÉsËsÍsÖsásíttt ttttt-t6t?tWtpt}tt€ttŽtt‘t’tŸt¡t¤t¦t©t«t¸tºt½t¿tÂtÄtåtçtêtítðtótôtötøuu0u5u7u:u=u?uBuGuIu\ueuru…u‘uuµu¾uÃuÖußuæuóuùvvvIvLvOvRvUvXv[v^vavdvgvjvmvpvsvvvyv|vv‚v…vˆv‹vŽv‘v”v—všvv v£v¦v©v¬v½vËvÔv×vÚvÝvàvévëvîvüwww w$w9wBwIw`wow|ww‚w…w¦w­w¯w²wµw·w¹w¼wÍwÙwÜwÞwáwäwïwñwüxx x$x5x8x;x=x@xLx]x`xcxfxixrxtxwx‘x®x±x´x·xºx»x¾xÓxÕxØxÛxÞx÷yBy_yqy‡yœy«y½yÏyäyòzzzzzz z#z%z'z*z-z.z/z2z5z:zgzozrztzwzyz{z}z€zƒzz“z–z™z¢z¶zÁzÊzÌzÓzÖzÙzÜ{{{ { {{{{{{ {I{L{N{Q{S{U{W{Z{]{d{m{r{{{ˆ{œ{«{¸{Á{Î{Ü{å{ë{ü{ÿ|||||&|)|,|/|2|;|=|@|W|m|~||„|‡|Š|»|¾|Á|Ä|Ç|Ê|Ì|Ï|Ò|Ô|î|÷}}} } }}}/}2}5}8};}<}?}W}|}…}‡}Š}Œ}Ž}‘}–}—}š}¯}±}³}¶}¸}Î}ã}å}ç}ê}ì}ö}ÿ~ ~'~*~-~0~3~4~7~O~€~…~ˆ~Š~Œ~Ž~~“~•~˜~š~Ÿ~¨~«~´~½~Æ~Ñ~Û~á~î~ñ~ô~÷"%'),9<?BOQgx{~„’®ÄÕØÚÝàéë€!€$€&€)€,€9€J€M€P€S€V€s€u€x€z€|€~€€€™€¦€©€¬€¯€Ð€Ò€Õ€Ø€Ú€Ü€ß€ì€ï€ò€õ "CEHJLNQZs„‡‰Œž¯²µ·ºÇÔ×ÚÝþ‚‚‚‚‚ ‚ ‚‚‚4‚A‚D‚G‚J‚k‚m‚p‚s‚u‚w‚z‚‹‚Ž‚‘‚”‚—‚ ‚¢‚¸‚łȂ˂΂ï‚ñ‚ô‚÷‚ù‚û‚þƒ ƒƒƒƒ!ƒ#ƒ*ƒ7ƒ:ƒ=ƒ@ƒaƒcƒfƒhƒjƒlƒoƒtƒƒ’ƒ•ƒ˜ƒ›ƒžƒ­ƒºƒ½ƒÀƒÃƒäƒæƒéƒìƒîƒðƒóƒþ„„„„„„!„<„M„P„S„V„Y„b„s„v„y„|„„ „¢„¥„¨„ª„¬„¯„½„¿„Ȅل܄߄á„ä„ó………… ….…8…:…<…?…D…G…I…K…N…\…^…m…~……ƒ…†…‰…˜…©…¬…¯…²…µ…Ö…Ø…Û…Þ…à…â…å…þ†††%†(†+†.†1†=†N†Q†T†W†Z†a†n†q†t†w†˜†š††Ÿ†¡†£†¦†»†Í†Þ†á†ä†æ†é†õ†þ‡ˆˆ ˆ#ˆ&ˆ)ˆ,ˆ/ˆ1ˆ4ˆ7ˆ:ˆ=ˆ@ˆCˆFˆIˆLˆOˆRˆUˆXˆZˆ\ˆ^ˆaˆdˆgˆjˆlˆoˆrˆuˆxˆ{ˆ~ˆˆ„ˆ‡ˆ‰ˆŒˆŽˆ‘ˆ”ˆ—ˆšˆˆ ˆ¢ˆ¥ˆ¨ˆ«ˆ®ˆ°ˆ³ˆ¶ˆ¹ˆ»ˆ¾ˆÁˆÄˆÇˆÉˆÌˆÎˆÑˆÓˆÕˆØˆÚˆÝˆàˆãˆæˆéˆëˆíˆïˆòˆõˆøˆûˆþ‰‰‰‰‰ ‰‰‰‰‰‰‰‰"‰%‰'‰*‰-‰0‰3‰5‰8‰;‰=‰@‰C‰E‰G‰I‰L‰N‰Q‰S‰U‰X‰[‰^‰a‰d‰f‰h‰k‰n‰q‰s‰u‰x‰z‰|‰~‰‰„‰‡‰Š‰‰‰“‰–‰™‰œ‰ž‰£‰¬‰®‰±‰´‰Ý‰ß‰á‰â‰ä‰å‰ç‰é‰ìŠŠŠ!Š$Š'Š)Š+Š-Š0Š3ŠDŠGŠJŠMŠPŠ_ŠˆŠŠŠŠŠ’Š”Š–Š™ŠœŠ¥Š¶Š¹Š¼Š¿ŠÂŠËŠÍŠÎŠàŠçŠðŠòŠûŠþ‹‹‹‹0‹2‹4‹5‹7‹8‹:‹<‹?‹N‹w‹y‹{‹|‹~‹‹‹ƒ‹†‹¯‹±‹´‹·‹¹‹»‹½‹À‹Ã‹ì‹î‹ð‹ñ‹ó‹ô‹ö‹ø‹ûŒ$Œ&Œ)Œ+Œ-Œ/Œ1Œ4Œ7Œ@ŒBŒYŒ\Œ_ŒbŒeŒhŒkŒnŒqŒtŒwŒzŒ£Œ¥Œ§Œ¨ŒªŒ«Œ­Œ¯Œ²Œ¿ŒèŒêŒìŒíŒïŒðŒòŒôŒ÷-/2579;>AFOQTW€‚…ˆŠŒŽ‘”™¢¤­°³¶¹ÃÌÎÙÜßâåèôýÿ"%'*-/258;>@BEGJMORTVX[^adfhknpsvx{~€ƒ…ˆ‹Ž“–˜›ž¡£¥¨«®°³¶¹¼¾ÁÃÆÈÊÌÎÐÒÕØÚÜÞàâåèëîñóõ÷úýÿ  "%(*-02469;>@BEGILOQSVY\^adfhjlnpsvy|‚…‡’‘±‘´‘·‘¹‘¼‘¾‘Á‘đǑʑ͑Бӑّܑ֑ߑâ‘å‘è‘ë‘î‘ð‘ò‘ô‘÷‘ú‘ý’’’’’ ’’’’’’’’"’$’'’*’-’0’3’6’8’;’>’A’D’F’I’L’N’Q’T’W’Z’]’_’b’d’f’i’k’m’p’s’v’x’{’}’€’‚’…’ˆ’‹’Ž’‘’”’—’™’›’ž’¡’¤’§’ª’­’°’²’µ’¸’»’½’À’Ã’Æ’É’Ë’Î’Ñ’Ó’Ö’Ù’Û’Ý’à’â’ä’æ’è’ê’í’ð’ò’õ’ø’û’ý“““““ “ “““““““ “#“&“)“,“/“2“4“=“?”^”a”d”g”j”m”p”s”v”y”|””‚”…”ˆ”‹”Ž”‘”””—”š”” ”£”¦”©”¬”¯”²”µ”¸”»”¾”Á”Ĕǔʔ͔ДӔ֔ٔܔߔâ”å”è”ë”î”ñ”ô”÷”ú”ý•••• • •••••••!•$•'•*•-•0•3•6•9•<•?•B•E•H•K•N•Q•T•W•Z•]•`•c•f•i•l•o•r•u•x•{•~••„•‡•Š•••“•–•™•œ•Ÿ•¢•¥•¨•«•®•±•´•·•º•½•À•Õƕɕ̕ϕҕՕؕەޕá•ä•ç•ê•í•ð•ó•ö•ù•ü•ÿ–––– –C–Z–q–~–‘–˜–Ÿ–­–¹–Ë–ì———;—U—q—}——Ÿ—º—Ò—æ—û˜˜#˜*˜/˜C˜[˜{˜œ˜¯˜Æ˜ß˜ô™™0™F™\™r™€™Œ™©™¶™Ë™æšš š9šQš€š‚š£š»šÔšà››!›5›Z›e›‚››¶›Ã›Û›óœœ0œMœcœƒœœœ¨œ¼%?Abx’žžžž1žQžkžmžtž‡žžž¸žºžÆžàŸŸ Ÿ!Ÿ:ŸHŸWŸiŸtŸxŸ˜Ÿ¥Ÿ½ŸâŸêŸù  ? _ x  ˜ ± Ê ë¡0¡I¡i¡¡œ¡¸¡Ü¡ø¢¢-¢C¢Z¢m¢o¢¢§¢´¢Õ¢ó¢ü¢þ£££ £££££¤¤‚¤…¤ˆ¤‹¤¤¤“¤–¤˜¤›¤ž¤¡¤¤¤§¤ª¤­¤°¤³¤¶¤¹¤¼¤¿¤Â¤Å¤È¤Ê¤Í¤Ï¤Ò¤Ô¤×¤Ú¤Ý¤à¤ã¤å¤è¤ë¤î¤ñ¤ô¤÷¤ú¤ý¥¥¥¥¥ ¥ ¥¥¥¥¥¥¥"¥$¥'¥*¥-¥0¥2¥5¥8¥;¥>¥A¥C¥F¥I¥L¥O¥Q¥T¥W¥Z¥\¥_¥a¥c¥f¥h¥k¥n¥q¥t¥w¥y¥{¥}¥€¥ƒ¥†¥‰¥Œ¥¥’¥•¥˜¥›¥¥Ÿ¥¢¥¥¥¨¥«¥®¥±¥´¥·¥¹¥¼¥¿¥Â¥Å¥È¥Ê¥Í¥Ð¥Ó¥Ö¥Ù¥Ü¥ß¥á¥ä¥ç¥é¥ì¥ï¥ñ¥ó¥õ¥ø¥ú¥ý¥ÿ¦¦¦¦ ¦ ¦¦¦¦¦¦¦¦!¦$¦&¦(¦*¦-¦0¦3¦6¦9¦<¦?¦B¦E¦H¦K¦N¦Q¦T¦W¦Z¦\¦_¦b¦e¦n¦p§Ñ§Ô§×§Ú§Ý§à§ã§æ§é§ì§ï§ò§õ§ø§û§þ¨¨¨¨ ¨ ¨¨¨¨¨¨¨"¨%¨(¨+¨.¨1¨4¨7¨:¨=¨@¨C¨F¨I¨L¨O¨R¨U¨X¨[¨^¨a¨d¨g¨j¨m¨p¨s¨v¨y¨|¨¨‚¨…¨ˆ¨‹¨Ž¨‘¨”¨—¨š¨¨ ¨£¨¦¨©¨¬¨¯¨²¨µ¨¸¨»¨¾¨Á¨Ä¨Ç¨Ê¨Í¨Ð¨Ó¨Ö¨Ù¨Ü¨ß¨â¨å¨è¨ë¨î¨ñ¨ô¨÷¨ú¨ý©©©© © ©©©©©©©!©$©'©*©-©0©3©6©9©<©?©B©E©H©K©N©Q©T©W©Z©]©`©c©f©i©l©o©r©u©x©{©~©©„©‡©Š©©©“©–©™©œ©Ÿ©¢©¥©¨©«©®©±©´©·©º©½©À©Ã©Æ©É©Ì©Ï©Ò©Õ©Ø©Û©Þ©á©ä©æ©é©ì©ï©ò©õ©ø©û©þªªªª ª ªªªªªªªª"ª%ª(ª+ª.ª1ª4ª7ª:ª=ª?ªAªDªGªJªMªPªRªTªWªZª]ª`ªcªfªiªlªoªqªtªvªyª|ª~ªª„ª‡ªŠªªª“ª–ª˜ª›ªžª¡ª£ª¦ª©ª«ª®ª±ª´ª·ªºª¼ª¿ªÂªÅªÈªËªÎªÑªÔª×ªÚªÝªàªãªæªéªìªîªñªôª÷ªúªüªÿ«« « ««««««« «"«$«&«(«*«-«0«3«5«8«;«>«A«D«F«I«L«O«R«U«X«[«^«a«d«g«i«k«n«q«t«w«y«|««‚«…«ˆ«‹«Ž«‘«”«—«™«œ«Ÿ«¢«¥«¨«««­«°«³«¶«¹«»«½«À«Ã«Æ«É«Ò«Ô«Õ«Þ«à«á«ê«ì«í«ö«ûw¬ amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/AppController.h0000644000175000017500000000143511772155611025623 0ustar l3onl3on#import #import "EC.h" #import "amuleData.h" @interface AppController : NSObject { IBOutlet id m_main_tabview; IBOutlet id m_dload_controller; IBOutlet id m_search_controller; IBOutlet id m_shared_controller; IBOutlet id m_add_link_dlg; IBOutlet id m_connection_status_text; ECRemoteConnection *m_connection; amuleData *m_data; int m_daemon_pid; NSString *m_targetaddr; int m_targetport; NSString *m_corepass; } - (IBAction)show_Networks:(id)sender; - (IBAction)show_Search:(id)sender; - (IBAction)show_Sharing:(id)sender; - (IBAction)show_Stats:(id)sender; - (IBAction)show_Xfers:(id)sender; - (IBAction)show_Preferences:(id)sender; - (IBAction)show_About:(id)sender; - (IBAction)addLink:(id)sender; - (int)startDaemon; - (bool)askCoreParams; @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/Info.plist0000644000175000017500000000171111772155611024633 0ustar l3onl3on CFBundleDevelopmentRegion English CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile CFBundleIdentifier org.amule.aMule CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString 1.0.0 CFBundleSignature ???? CFBundleVersion 100 NSHumanReadableCopyright © 2009, aMule project NSMainNibFile MainMenu NSPrincipalClass NSApplication amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/SourceViewController.h0000644000175000017500000000265611772155611027204 0ustar l3onl3on#import @interface BaseItem : NSObject { NSString *m_text; NSString *m_view_id; NSMutableArray *m_subitems; int m_subitems_count; NSImage *m_icon; } + (BaseItem *) initWithText:(NSString *)text withViewId:(NSString *) viewId; - (void)activateView:(NSTabView *) view; - (int)subitemsCount; - (BaseItem *)itemAtIndex: (int) index; - (void)addSubItem:(BaseItem *) item; - (NSString *)text; - (NSString *)viewId; - (NSImage *)icon; @end @interface CategoryItemFactory : BaseItem { } + (BaseItem *)initFilesItem; + (BaseItem *)initNetworksItem; + (BaseItem *)initSearchItem; @end enum { RootItemNetwork = 0, RootItemFiles, RootItemSearch, RootItemLast }; @interface amuleSourceListDataSource : NSObject { BaseItem *g_root_items[RootItemLast]; } + (amuleSourceListDataSource *)initWithData; - (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item; - (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item; - (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item; - (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item; @end @interface CellWithIcon : NSTextFieldCell { @private NSImage *m_icon; } - (NSImage *)icon; - (void)setIcon:(NSImage *)icon; @end @interface SourceViewController : NSObject { IBOutlet id m_outline_view; IBOutlet id m_tab_view; } @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/AddLinkDialogController.h0000644000175000017500000000046711772155611027535 0ustar l3onl3on#import @interface AddLinkDialogController : NSObject { IBOutlet NSPopUpButton *m_cat; IBOutlet NSTextField *m_link; IBOutlet id m_dlg; bool m_dlg_result; NSString *m_link_val; } - (bool)showDlg:(NSWindow *)window; - (IBAction)closeOK:(id)sender; - (NSString *)link; @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/amuleData.h0000644000175000017500000000651111772155611024734 0ustar l3onl3on#import #import "EC.h" @interface amuleFile : NSObject { NSString *m_name; uint64_t m_size; MD5Data m_hash; } - (unsigned)hash; - (NSString *)key; - (BOOL)isEqual: (id) object; - (NSString *)convertWithPrefix:(uint64_t)number; @property (readonly) NSString *name; @property (readonly) uint64_t size; @end @interface DownloadingFile : amuleFile { int m_src_count; int m_non_current_src_count; int m_xfer_src_count; int m_a4af_src_count; uint64_t m_size_done; uint64_t m_size_xfer; int m_prio; bool m_auto_prio; int m_speed; } + (id)createFromEC:(ECTagMD5 *) tag; - (void)updateFromEC:(ECTagMD5 *) tag; - (NSString *)prioToString:(int)prio; @property (readonly) int src_count; @property (readonly) int non_current_src_count; @property (readonly) int xfer_src_count; @property (readonly) int a4af_src_count; @property (readonly) int speed; @property (readonly) uint64_t size_done; @property (readonly) uint64_t size_xfer; @property (readonly) int prio; @property (copy, readonly) NSString * sprio; @end @interface SearchFile : amuleFile { int m_src_count; int m_complete_src_count; bool m_known; } + (id)createFromEC:(ECTagMD5 *) tag; - (void)updateFromEC:(ECTagMD5 *) tag; @property (readonly) int src_count; @property (readonly) int complete_src_count; @end @interface SharedFile : amuleFile { int m_req_count; int m_req_count_all; int m_accept_count; int m_accept_count_all; uint64_t m_size_xfer; uint64_t m_size_xfer_all; int m_prio; bool m_auto_prio; } + (id)createFromEC:(ECTagMD5 *) tag; - (void)updateFromEC:(ECTagMD5 *) tag; - (NSString *)prioToString:(int)prio; @property (readonly) int req_count; @property (readonly) int req_count_all; @property (readonly) int accept_count; @property (readonly) int accept_count_all; @property (readonly) uint64_t size_xfer; @property (readonly) uint64_t size_xfer_all; @property (readonly) int prio; @property (copy, readonly) NSString * sprio; @end @interface amuleFileSet : NSObject { NSMutableDictionary *m_file_dict; NSMutableArray *m_file_array; id m_gui_controller; } - (id)init; - (int)count; - (void)insertObject:(id)object; - (id)objectAtIndex:(int)index; - (id)objectForKey:(id)key; - (void)removeAtIndex:(int)index; - (void)removeAtKey:(id)key; - (void)setGuiController:(id)controller; - (void)reloadGui; @end @interface amuleData : NSObject { // // Core status // uint32_t m_ed2k_id; bool m_ed2k_connected; bool m_kad_connected; NSString *m_ed2k_server; int m_down_speed; int m_up_speed; amuleFileSet *m_downloads; amuleFileSet *m_shared; // // Search info // bool m_search_running; amuleFileSet *m_search_results; ECRemoteConnection *m_connection; } + (id)initWithConnection:(ECRemoteConnection *) connection; // // Binding to EC // - (void)handlePacket:(ECPacket *) packet; - (void)handleError; - (void)handleDownloadQueueUpdate:(ECPacket *) packet; - (void)handleSharedFilesUpdate:(ECPacket *) packet; - (void)handleSearchUpdate:(ECPacket *) packet; - (void)handleStatusUpdate:(ECPacket *) packet; - (void)startSearch:(NSString *)text searchType:(EC_SEARCH_TYPE)searchType minSize:(uint64_t)minSize maxSize:(uint64_t)maxSize avail:(uint32_t)avail; - (void)stopSearch; @property (readonly) amuleFileSet *downloads; @property (readonly) amuleFileSet *shared; @property (readonly) amuleFileSet *search_resuls; @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/DownloadsViewController.mm0000644000175000017500000000747111772155611030060 0ustar l3onl3on#import "DownloadsViewController.h" @implementation DownloadsViewController - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { id value = nil; NSString *columnId = [aTableColumn identifier]; DownloadingFile *i = [m_fileset objectAtIndex:rowIndex]; // if ( [columnId compare:@"filename"] == NSOrderedSame ) { // value = @"val-for-filename"; // } else if ( [columnId compare:@"progress"] == NSOrderedSame ) { // value = @"val-for-progress"; // } else if ( [columnId compare:@"size"] == NSOrderedSame ) { // value = @"val-for-name"; // } else if ( [columnId compare:@"xferred"] == NSOrderedSame ) { // value = @"val-for-size"; // } else if ( [columnId compare:@"completed"] == NSOrderedSame ) { // value = @"val-for-completed"; // } else if ( [columnId compare:@"speed"] == NSOrderedSame ) { // value = @"val-for-speed"; // } else if ( [columnId compare:@"prio"] == NSOrderedSame ) { // value = @"val-for-prio"; // } else if ( [columnId compare:@"timerem"] == NSOrderedSame ) { // value = @"val-for-timerem"; // } else if ( [columnId compare:@"lastcomp"] == NSOrderedSame ) { // value = @"val-for-lastcomp"; // } else if ( [columnId compare:@"lastrx"] == NSOrderedSame ) { // value = @"val-for-lastrx"; // } else { // value = @"ERROR: bad column id"; // } if ( [columnId compare:@"filename"] == NSOrderedSame ) { value = i.name; } else if ( [columnId compare:@"progress"] == NSOrderedSame ) { value = @"progress-colored-bar"; } else if ( [columnId compare:@"size"] == NSOrderedSame ) { value = [i convertWithPrefix: i.size]; } else if ( [columnId compare:@"xferred"] == NSOrderedSame ) { value = [i convertWithPrefix: i.size_xfer]; } else if ( [columnId compare:@"completed"] == NSOrderedSame ) { value = [i convertWithPrefix: i.size_done]; } else if ( [columnId compare:@"speed"] == NSOrderedSame ) { value = ( i.speed ) ? [[i convertWithPrefix: i.speed] stringByAppendingString: @"/sec"] : @""; } else if ( [columnId compare:@"prio"] == NSOrderedSame ) { value = i.sprio; } else if ( [columnId compare:@"timerem"] == NSOrderedSame ) { value = @"val-for-timerem"; } else if ( [columnId compare:@"lastcomp"] == NSOrderedSame ) { value = @"val-for-lastcomp"; } else if ( [columnId compare:@"lastrx"] == NSOrderedSame ) { value = @"val-for-lastrx"; } else { value = @"ERROR: bad column id"; } return value; } - (int)numberOfRowsInTableView:(NSTableView *)aTableView { // return 3; return [m_fileset count]; } - (void)linkAmuleData:(amuleData *)amuledata { m_amuledata = amuledata; m_fileset = m_amuledata.downloads; [amuledata.downloads setGuiController:self]; } - (void)reload { [m_tableview reloadData]; } - (void)awakeFromNib { [m_tableview setDelegate:self]; [m_tableview setDataSource:self]; // // load column status // for (NSTableColumn *c in [m_tableview tableColumns]) { NSString *columnId = [c identifier]; NSString *keyWidth = [NSString stringWithFormat:@"DownloadView.Column_%@_Width", columnId]; int width = [[NSUserDefaults standardUserDefaults] integerForKey:keyWidth]; if ( width ) { NSLog(@"Column %@ setting width %d\n", columnId, width); [c setWidth:width]; } NSString *keyHide = [NSString stringWithFormat:@"DownloadView.Column_%@_Hide", columnId]; int hide = [[NSUserDefaults standardUserDefaults] integerForKey:keyHide]; [c setHidden:hide]; } } - (void)saveGui { for (NSTableColumn *c in [m_tableview tableColumns]) { NSString *columnId = [c identifier]; NSString *keyWidth = [NSString stringWithFormat:@"DownloadView.Column_%@_Width", columnId]; [[NSUserDefaults standardUserDefaults] setInteger:c.width forKey:keyWidth]; NSString *keyHide = [NSString stringWithFormat:@"DownloadView.Column_%@_Hide", columnId]; [[NSUserDefaults standardUserDefaults] setInteger:[c isHidden] forKey:keyHide]; } } @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/SearchViewController.h0000644000175000017500000000050111772155611027134 0ustar l3onl3on#import #import "amuleData.h" @interface SearchViewController : NSObject { IBOutlet NSOutlineView *m_result_list; IBOutlet NSTextField *m_search_text; amuleFileSet *m_fileset; amuleData *m_amuledata; } - (IBAction)startSearch:(id)sender; - (void)linkAmuleData:(amuleData *)amuledata; @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/cocoa-mule/SearchViewController.mm0000644000175000017500000000044011772155611027320 0ustar l3onl3on#import "SearchViewController.h" @implementation SearchViewController - (IBAction)startSearch:(id)sender { } - (void)linkAmuleData:(amuleData *)amuledata { m_amuledata = amuledata; m_fileset = m_amuledata.search_resuls; [amuledata.search_resuls setGuiController:self]; } @end amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/aMule-Xcode/0000755000175000017500000000000012053222136022730 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/aMule-Xcode/README BEFORE BUILDING.rtf0000644000175000017500000001215111772155611026515 0ustar l3onl3on{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf290 {\fonttbl\f0\fnil\fcharset0 Monaco;\f1\fmodern\fcharset0 Courier;\f2\fnil\fcharset128 KozGoPro-Heavy; } {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \f0\fs20 \cf0 This project allows for compilation of aMule in Xcode \ul without\ulnone macports / fink. THIS IS NOT AN EASY PROCESS, so only attempt it if you're familiar with the terminal, and compiling programs there, as wxWidgets and cryptopp are still compiled via the terminal. I hope to automate this process in the future to eliminate that requirement.\ \ Compiling aMule on Xcode is important to automate the build of different configurations, ensure proper compatibility, and allow developers to use the Xcode interface to gdb which is tremendously useful to track and solve bugs. \ \ Current configuration supports i386/ppc build on SDK 10.4 (for Tiger), without country flags or UPnP, using wxWidgets 2.8.x. Other configurations will be added later.\ \ It's important for building that the following steps/requirements are met:\ \ 1) This folder structure is needed for compilation:\ \ \ |\ |-> aMule sources\ |\ |-> wxWidgets-2.8 (or wxWidgets for 2.9+)\ |\ |-> cryptopp (or cryptopp-64bits if you are using Snow Leopard and plan to use wxWidgets 2.9+ and SDK 10.6)\ \ It's essential that the folders are named exactly like shown. If you want to change this, take a look at CFLAGS and link flags in the "aMule" target's properties.\ \ 2) wxWidgets has to be compiled with universal binary support and static library. When using wxWidgets 2.8 on Snow Leopard, it's important that gcc-4.0 is used because gcc-4.2 defaults to 64bits builds, which wxWidgets 2.8.x doesn't support (see {\field{\*\fldinst{HYPERLINK "http://wiki.wxwidgets.org/Development:_wxMac#Building_on_Snow_Leopard_for_Snow_Leopard"}}{\fldrslt http://wiki.wxwidgets.org/Development:_wxMac#Building_on_Snow_Leopard_for_Snow_Leopard}} for more info).\ \ Personally I check out the sources using the following:\ \ \pard\pardeftab720\ql\qnatural \f1\fs24 \cf0 svn checkout http://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH wxWidgets-2.8\ \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \f0\fs20 \cf0 for wxWidgets 2.8, and\ \ \pard\pardeftab720\ql\qnatural \f1\fs24 \cf0 svn checkout http://svn.wxwidgets.org/svn/wx/wxWidgets/ wxWidgets \f0\fs20 \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \cf0 \ for wxWidgets 2.9+, and configure with\ \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \f1\fs24 \cf0 ./configure CC=gcc-4.0 CXX=g++-4.0 LD=g++-4.0 --enable-debug --with-macosx-sdk=/Developer/SDKs/MacOSX10.4u.sdk --with-macosx-version-min=10.4 --enable-universal_binary --disable-universal --disable-shared \ \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \f0\fs20 \cf0 for wxWidgets 2.8, and\ \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \f1\fs24 \cf0 ./configure --enable-unicode --disable-shared --enable-debug --enable-debug_gdb --with-osx_cocoa --with-macosx-version-min=10.6 \f0\fs20 \ \ for wxWidgets 2.9+ on Snow Leopard for SDK 10.6.\ \f1\fs24 \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \f0\fs20 \cf0 After that, just type "make" as usual. Do not "make install".\ \ 3) Compiling cryptopp is complicated due to lack of proper support for building on MacOSX, especially for universal binaries. First download a cryptopp release from {\field{\*\fldinst{HYPERLINK "http://www.cryptopp.com/#download"}}{\fldrslt http://www.cryptopp.com/#download}} (latest are at the bottom) and uncompress it to the folder named "cryptopp" or "cryptopp-64bits" as shown in the folder structure above. If you are using wxWidgets 2.9+, then configure and compile as usual. If using wxWidgets 2.8 in Snow Leopard, edit the file named GNUmake and add the following lines at the beginning:\ \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \f1\fs24 \cf0 CXXFLAGS = -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -DNDEBUG -g -O2\ LDFLAGS = -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4\ CXX=c++-4.0\ CC=gcc-4.0\ \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \f0\fs20 \cf0 Save the file, then type "make" as usual. \f2\b\fs24 Do not "make install" \f0\b0\fs20 .\ \ Once you have finished compiling cryptopp and wxWidgets, and they are in the right folders, this project should compile correctly. If you get errors, please review all the steps before posting in the forum.\ \ Good luck! \f1\fs24 \ \pard\pardeftab720\ql\qnatural \cf0 \ - Kry\ }amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/aMule-Xcode/English.lproj/0000755000175000017500000000000012053222136025446 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/aMule-Xcode/English.lproj/en0000644000175000017500000000005511772155611026005 0ustar l3onl3on/* Localized versions of Info.plist keys */ amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/aMule-Xcode/aMule_Xcode-Info.plist0000644000175000017500000000176711772155611027110 0ustar l3onl3on CFBundleDevelopmentRegion English CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile amule.icns CFBundleIdentifier com.amuleproject.${PRODUCT_NAME:rfc1034identifier} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 3.0 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSMainNibFile MainMenu NSPrincipalClass NSApplication amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/aMule-Xcode/aMule.xcodeproj/0000755000175000017500000000000012053222136025767 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/aMule-Xcode/aMule.xcodeproj/project.pbxproj0000644000175000017500000044067311772155611031073 0ustar l3onl3on// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 483344701196275F00D9BE75 /* amule.icns in Resources */ = {isa = PBXBuildFile; fileRef = 4833446F1196275F00D9BE75 /* amule.icns */; }; 4848D2CF1192E83100ED40CC /* GenericClientListCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4848D2CD1192E83100ED40CC /* GenericClientListCtrl.cpp */; }; 4848DC291192E85A00ED40CC /* SharedFilePeersListCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4848D8091192E85900ED40CC /* SharedFilePeersListCtrl.cpp */; }; 4848DC2A1192E85A00ED40CC /* SourceListCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4848D80B1192E85900ED40CC /* SourceListCtrl.cpp */; }; 487911DA11925E61002C086E /* CFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879119511925E61002C086E /* CFile.cpp */; }; 487911DB11925E61002C086E /* DataToText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879119711925E61002C086E /* DataToText.cpp */; }; 487911DC11925E61002C086E /* ED2KLink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879119911925E61002C086E /* ED2KLink.cpp */; }; 487911DD11925E61002C086E /* GapList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879119B11925E61002C086E /* GapList.cpp */; }; 487911DE11925E61002C086E /* MagnetURI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879119D11925E61002C086E /* MagnetURI.cpp */; }; 487911DF11925E61002C086E /* MemFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879119F11925E61002C086E /* MemFile.cpp */; }; 487911E111925E61002C086E /* Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911A311925E61002C086E /* Packet.cpp */; }; 487911E211925E61002C086E /* RLE.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911A511925E61002C086E /* RLE.cpp */; }; 487911E311925E61002C086E /* SafeFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911A711925E61002C086E /* SafeFile.cpp */; }; 487911E411925E61002C086E /* SHA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911A911925E61002C086E /* SHA.cpp */; }; 487911E511925E61002C086E /* Tag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911AB11925E61002C086E /* Tag.cpp */; }; 487911E611925E61002C086E /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911AD11925E61002C086E /* Timer.cpp */; }; 4879120211925FDD002C086E /* AsyncDNS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911E811925FDD002C086E /* AsyncDNS.cpp */; }; 4879120311925FDD002C086E /* DeadSourceList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911EA11925FDD002C086E /* DeadSourceList.cpp */; }; 4879120411925FDD002C086E /* FileArea.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911EC11925FDD002C086E /* FileArea.cpp */; }; 4879120511925FDD002C086E /* FileAutoClose.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911EE11925FDD002C086E /* FileAutoClose.cpp */; }; 4879120611925FDD002C086E /* Friend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911F011925FDD002C086E /* Friend.cpp */; }; 4879120711925FDD002C086E /* Parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911F211925FDD002C086E /* Parser.cpp */; }; 4879120811925FDD002C086E /* PlatformSpecific.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911F411925FDD002C086E /* PlatformSpecific.cpp */; }; 4879120911925FDD002C086E /* RandomFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911F611925FDD002C086E /* RandomFunctions.cpp */; }; 4879120A11925FDD002C086E /* RC4Encrypt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911F811925FDD002C086E /* RC4Encrypt.cpp */; }; 4879120B11925FDD002C086E /* Scanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911FA11925FDD002C086E /* Scanner.cpp */; }; 4879120C11925FDD002C086E /* StateMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911FC11925FDD002C086E /* StateMachine.cpp */; }; 4879120D11925FDD002C086E /* ThreadScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487911FE11925FDD002C086E /* ThreadScheduler.cpp */; }; 4879120E11925FDD002C086E /* UPnPBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879120011925FDD002C086E /* UPnPBase.cpp */; }; 48791C961192601F002C086E /* Entry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487917E11192601E002C086E /* Entry.cpp */; }; 48791C971192601F002C086E /* SearchManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487917E31192601E002C086E /* SearchManager.cpp */; }; 48791D081192607A002C086E /* Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791CD91192607A002C086E /* Contact.cpp */; }; 48791D091192607A002C086E /* RoutingBin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791CDB1192607A002C086E /* RoutingBin.cpp */; }; 48791D0C119260A0002C086E /* UInt128.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D0A119260A0002C086E /* UInt128.cpp */; }; 48791D2A11926A0E002C086E /* BarShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D0E11926A0E002C086E /* BarShader.cpp */; }; 48791D2B11926A0E002C086E /* ChatWnd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D1011926A0E002C086E /* ChatWnd.cpp */; }; 48791D2C11926A0E002C086E /* ColorFrameCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D1211926A0E002C086E /* ColorFrameCtrl.cpp */; }; 48791D2D11926A0E002C086E /* CommentDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D1411926A0E002C086E /* CommentDialog.cpp */; }; 48791D2E11926A0E002C086E /* CommentDialogLst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D1611926A0E002C086E /* CommentDialogLst.cpp */; }; 48791D2F11926A0E002C086E /* EditServerListDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D1811926A0E002C086E /* EditServerListDlg.cpp */; }; 48791D3011926A0E002C086E /* FileDetailListCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D1A11926A0E002C086E /* FileDetailListCtrl.cpp */; }; 48791D3111926A0E002C086E /* IP2Country.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D1C11926A0E002C086E /* IP2Country.cpp */; }; 48791D3211926A0E002C086E /* MuleCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D1E11926A0E002C086E /* MuleCollection.cpp */; }; 48791D3311926A0E002C086E /* MuleGifCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D2011926A0E002C086E /* MuleGifCtrl.cpp */; }; 48791D3411926A0E002C086E /* MuleListCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D2211926A0E002C086E /* MuleListCtrl.cpp */; }; 48791D3511926A0E002C086E /* MuleNotebook.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D2411926A0E002C086E /* MuleNotebook.cpp */; }; 48791D3611926A0E002C086E /* MuleTextCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D2611926A0E002C086E /* MuleTextCtrl.cpp */; }; 48791D3711926A0E002C086E /* muuli_wdr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D2811926A0E002C086E /* muuli_wdr.cpp */; }; 48791D3B11926A2E002C086E /* listctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D3911926A2E002C086E /* listctrl.cpp */; }; 48791D7C11926AEE002C086E /* amule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D3D11926AEE002C086E /* amule.cpp */; }; 48791D7D11926AEE002C086E /* BaseClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D3F11926AEE002C086E /* BaseClient.cpp */; }; 48791D7E11926AEE002C086E /* CanceledFileList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D4011926AEE002C086E /* CanceledFileList.cpp */; }; 48791D7F11926AEE002C086E /* ClientCreditsList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D4211926AEE002C086E /* ClientCreditsList.cpp */; }; 48791D8011926AEE002C086E /* ClientList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D4411926AEE002C086E /* ClientList.cpp */; }; 48791D8111926AEE002C086E /* ClientTCPSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D4611926AEE002C086E /* ClientTCPSocket.cpp */; }; 48791D8211926AEE002C086E /* ClientUDPSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D4811926AEE002C086E /* ClientUDPSocket.cpp */; }; 48791D8311926AEE002C086E /* CorruptionBlackBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D4A11926AEE002C086E /* CorruptionBlackBox.cpp */; }; 48791D8411926AEE002C086E /* DownloadClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D4C11926AEE002C086E /* DownloadClient.cpp */; }; 48791D8511926AEE002C086E /* DownloadQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D4D11926AEE002C086E /* DownloadQueue.cpp */; }; 48791D8611926AEE002C086E /* ECSpecialCoreTags.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D4F11926AEE002C086E /* ECSpecialCoreTags.cpp */; }; 48791D8711926AEE002C086E /* EMSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D5011926AEE002C086E /* EMSocket.cpp */; }; 48791D8811926AEE002C086E /* EncryptedDatagramSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D5211926AEE002C086E /* EncryptedDatagramSocket.cpp */; }; 48791D8911926AEE002C086E /* EncryptedStreamSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D5411926AEE002C086E /* EncryptedStreamSocket.cpp */; }; 48791D8A11926AEE002C086E /* ExternalConn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D5611926AEE002C086E /* ExternalConn.cpp */; }; 48791D8B11926AEE002C086E /* FriendList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D5711926AEE002C086E /* FriendList.cpp */; }; 48791D8C11926AEE002C086E /* HTTPDownload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D5911926AEE002C086E /* HTTPDownload.cpp */; }; 48791D8D11926AEE002C086E /* IPFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D5B11926AEE002C086E /* IPFilter.cpp */; }; 48791D8E11926AEE002C086E /* KnownFileList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D5D11926AEE002C086E /* KnownFileList.cpp */; }; 48791D8F11926AEE002C086E /* ListenSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D5F11926AEE002C086E /* ListenSocket.cpp */; }; 48791D9011926AEE002C086E /* MuleUDPSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D6111926AEE002C086E /* MuleUDPSocket.cpp */; }; 48791D9111926AEE002C086E /* PartFileConvert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D6311926AEE002C086E /* PartFileConvert.cpp */; }; 48791D9211926AEE002C086E /* SearchFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D6511926AEE002C086E /* SearchFile.cpp */; }; 48791D9311926AEE002C086E /* SearchList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D6711926AEE002C086E /* SearchList.cpp */; }; 48791D9411926AEE002C086E /* ServerConnect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D6911926AEE002C086E /* ServerConnect.cpp */; }; 48791D9511926AEE002C086E /* ServerList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D6B11926AEE002C086E /* ServerList.cpp */; }; 48791D9611926AEE002C086E /* ServerSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D6D11926AEE002C086E /* ServerSocket.cpp */; }; 48791D9711926AEE002C086E /* ServerUDPSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D6F11926AEE002C086E /* ServerUDPSocket.cpp */; }; 48791D9811926AEE002C086E /* SharedFileList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D7111926AEE002C086E /* SharedFileList.cpp */; }; 48791D9911926AEE002C086E /* TerminationProcessAmuleweb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D7311926AEE002C086E /* TerminationProcessAmuleweb.cpp */; }; 48791D9A11926AEE002C086E /* ThreadTasks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D7511926AEE002C086E /* ThreadTasks.cpp */; }; 48791D9B11926AEE002C086E /* UploadBandwidthThrottler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D7711926AEE002C086E /* UploadBandwidthThrottler.cpp */; }; 48791D9C11926AEE002C086E /* UploadClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D7911926AEE002C086E /* UploadClient.cpp */; }; 48791D9D11926AEE002C086E /* UploadQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791D7A11926AEE002C086E /* UploadQueue.cpp */; }; 48791E1211926B21002C086E /* KademliaUDPListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791DE311926B21002C086E /* KademliaUDPListener.cpp */; }; 48791E1311926B21002C086E /* PacketTracking.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791DE511926B21002C086E /* PacketTracking.cpp */; }; 48791E3611926B41002C086E /* Indexed.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791E2511926B41002C086E /* Indexed.cpp */; }; 48791E3711926B41002C086E /* Kademlia.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791E2711926B41002C086E /* Kademlia.cpp */; }; 48791E3811926B41002C086E /* Prefs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791E2911926B41002C086E /* Prefs.cpp */; }; 48791E3911926B41002C086E /* Search.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791E2B11926B41002C086E /* Search.cpp */; }; 48791E3A11926B41002C086E /* UDPFirewallTester.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791E2D11926B41002C086E /* UDPFirewallTester.cpp */; }; 48791EA911926B54002C086E /* RoutingZone.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791E7C11926B54002C086E /* RoutingZone.cpp */; }; 48791EDC11926CC7002C086E /* AddFriend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EAB11926CC7002C086E /* AddFriend.cpp */; }; 48791EDD11926CC7002C086E /* amule-gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EAD11926CC7002C086E /* amule-gui.cpp */; }; 48791EDE11926CC7002C086E /* amuleDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EAE11926CC7002C086E /* amuleDlg.cpp */; }; 48791EDF11926CC7002C086E /* CatDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EB011926CC7002C086E /* CatDialog.cpp */; }; 48791EE011926CC7002C086E /* ChatSelector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EB211926CC7002C086E /* ChatSelector.cpp */; }; 48791EE111926CC7002C086E /* ClientDetailDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EB411926CC7002C086E /* ClientDetailDialog.cpp */; }; 48791EE311926CC7002C086E /* DirectoryTreeCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EB811926CC7002C086E /* DirectoryTreeCtrl.cpp */; }; 48791EE411926CC7002C086E /* DownloadListCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EBA11926CC7002C086E /* DownloadListCtrl.cpp */; }; 48791EE511926CC7002C086E /* FileDetailDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EBC11926CC7002C086E /* FileDetailDialog.cpp */; }; 48791EE611926CC7002C086E /* FriendListCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EBE11926CC7002C086E /* FriendListCtrl.cpp */; }; 48791EE711926CC7002C086E /* KadDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EC011926CC7002C086E /* KadDlg.cpp */; }; 48791EE811926CC7002C086E /* MuleColour.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EC211926CC7002C086E /* MuleColour.cpp */; }; 48791EE911926CC7002C086E /* MuleTrayIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EC411926CC7002C086E /* MuleTrayIcon.cpp */; }; 48791EEA11926CC7002C086E /* OScopeCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EC611926CC7002C086E /* OScopeCtrl.cpp */; }; 48791EEB11926CC7002C086E /* PartFileConvertDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EC811926CC7002C086E /* PartFileConvertDlg.cpp */; }; 48791EEC11926CC7002C086E /* PrefsUnifiedDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791ECA11926CC7002C086E /* PrefsUnifiedDlg.cpp */; }; 48791EED11926CC7002C086E /* SearchDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791ECC11926CC7002C086E /* SearchDlg.cpp */; }; 48791EEE11926CC7002C086E /* SearchListCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791ECE11926CC7002C086E /* SearchListCtrl.cpp */; }; 48791EEF11926CC7002C086E /* ServerListCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791ED011926CC7002C086E /* ServerListCtrl.cpp */; }; 48791EF011926CC7002C086E /* ServerWnd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791ED211926CC7002C086E /* ServerWnd.cpp */; }; 48791EF111926CC7002C086E /* SharedFilesCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791ED411926CC7002C086E /* SharedFilesCtrl.cpp */; }; 48791EF211926CC7002C086E /* SharedFilesWnd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791ED611926CC7002C086E /* SharedFilesWnd.cpp */; }; 48791EF311926CC7002C086E /* StatisticsDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791ED811926CC7002C086E /* StatisticsDlg.cpp */; }; 48791EF411926CC7002C086E /* TransferWnd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791EDA11926CC7002C086E /* TransferWnd.cpp */; }; 48791F8411926F24002C086E /* amuleAppCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F6611926F24002C086E /* amuleAppCommon.cpp */; }; 48791F8511926F24002C086E /* ClientCredits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F6711926F24002C086E /* ClientCredits.cpp */; }; 48791F8611926F24002C086E /* ECSpecialMuleTags.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F6911926F24002C086E /* ECSpecialMuleTags.cpp */; }; 48791F8711926F24002C086E /* GetTickCount.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F6A11926F24002C086E /* GetTickCount.cpp */; }; 48791F8811926F24002C086E /* GuiEvents.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F6C11926F24002C086E /* GuiEvents.cpp */; }; 48791F8911926F24002C086E /* KnownFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F6E11926F24002C086E /* KnownFile.cpp */; }; 48791F8A11926F24002C086E /* Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F7011926F24002C086E /* Logger.cpp */; }; 48791F8B11926F24002C086E /* PartFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F7211926F24002C086E /* PartFile.cpp */; }; 48791F8C11926F24002C086E /* Preferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F7411926F24002C086E /* Preferences.cpp */; }; 48791F8D11926F24002C086E /* Proxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F7611926F24002C086E /* Proxy.cpp */; }; 48791F8E11926F24002C086E /* Server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F7811926F24002C086E /* Server.cpp */; }; 48791F8F11926F24002C086E /* SHAHashSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F7A11926F24002C086E /* SHAHashSet.cpp */; }; 48791F9011926F24002C086E /* Statistics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F7C11926F24002C086E /* Statistics.cpp */; }; 48791F9111926F24002C086E /* StatTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F7E11926F24002C086E /* StatTree.cpp */; }; 48791F9211926F24002C086E /* TerminationProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F8011926F24002C086E /* TerminationProcess.cpp */; }; 48791F9311926F24002C086E /* UserEvents.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791F8211926F24002C086E /* UserEvents.cpp */; }; 4879200511926F74002C086E /* NetworkFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791FD611926F74002C086E /* NetworkFunctions.cpp */; }; 4879200611926F74002C086E /* OtherFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48791FD811926F74002C086E /* OtherFunctions.cpp */; }; 487920371192730F002C086E /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 487920361192730F002C086E /* libz.dylib */; }; 4879206A119274FA002C086E /* FileFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879205C119274FA002C086E /* FileFunctions.cpp */; }; 4879206B119274FA002C086E /* Format.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879205E119274FA002C086E /* Format.cpp */; }; 4879206C119274FA002C086E /* MD5Sum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48792060119274FA002C086E /* MD5Sum.cpp */; }; 4879206D119274FA002C086E /* MuleDebug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48792062119274FA002C086E /* MuleDebug.cpp */; }; 4879206E119274FA002C086E /* Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48792064119274FA002C086E /* Path.cpp */; }; 4879206F119274FA002C086E /* StringFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48792066119274FA002C086E /* StringFunctions.cpp */; }; 48792070119274FA002C086E /* TextFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48792068119274FA002C086E /* TextFile.cpp */; }; 487921EA11927582002C086E /* ECMuleSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879213211927582002C086E /* ECMuleSocket.cpp */; }; 487921EB11927582002C086E /* ECPacket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879213411927582002C086E /* ECPacket.cpp */; }; 487921EC11927582002C086E /* ECSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879213611927582002C086E /* ECSocket.cpp */; }; 487921ED11927582002C086E /* ECSpecialTags.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879213811927582002C086E /* ECSpecialTags.cpp */; }; 487921EE11927582002C086E /* ECTag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879213A11927582002C086E /* ECTag.cpp */; }; 487921EF11927582002C086E /* RemoteConnect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4879213C11927582002C086E /* RemoteConnect.cpp */; }; 4879238511927626002C086E /* CaptchaDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487922C811927626002C086E /* CaptchaDialog.cpp */; }; 4879238611927626002C086E /* CaptchaGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 487922CA11927626002C086E /* CaptchaGenerator.cpp */; }; 488D4E8F1192CB880089BF8E /* README BEFORE BUILDING.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 488D4E8E1192CB880089BF8E /* README BEFORE BUILDING.rtf */; }; 48CB3DB611B58AA80051CAF2 /* IPFilterScanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48CB3DB411B58AA80051CAF2 /* IPFilterScanner.cpp */; }; 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 089C165DFE840E0CC02AAC07 /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = en; path = English.lproj/en; sourceTree = ""; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; 256AC3F00F4B6AF500CF3369 /* aMule_Xcode_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aMule_Xcode_Prefix.pch; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 4833446F1196275F00D9BE75 /* amule.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = amule.icns; sourceTree = ""; }; 4848D2CD1192E83100ED40CC /* GenericClientListCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GenericClientListCtrl.cpp; path = ../../../src/GenericClientListCtrl.cpp; sourceTree = SOURCE_ROOT; }; 4848D2CE1192E83100ED40CC /* GenericClientListCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GenericClientListCtrl.h; path = ../../../src/GenericClientListCtrl.h; sourceTree = SOURCE_ROOT; }; 4848D8091192E85900ED40CC /* SharedFilePeersListCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SharedFilePeersListCtrl.cpp; path = ../../../src/SharedFilePeersListCtrl.cpp; sourceTree = SOURCE_ROOT; }; 4848D80A1192E85900ED40CC /* SharedFilePeersListCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SharedFilePeersListCtrl.h; path = ../../../src/SharedFilePeersListCtrl.h; sourceTree = SOURCE_ROOT; }; 4848D80B1192E85900ED40CC /* SourceListCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SourceListCtrl.cpp; path = ../../../src/SourceListCtrl.cpp; sourceTree = SOURCE_ROOT; }; 4848D80C1192E85900ED40CC /* SourceListCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SourceListCtrl.h; path = ../../../src/SourceListCtrl.h; sourceTree = SOURCE_ROOT; }; 48636E2A119E5A4300BC3DB6 /* ArchSpecific.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ArchSpecific.h; path = ../../../src/ArchSpecific.h; sourceTree = SOURCE_ROOT; }; 48636E2B119E5A4300BC3DB6 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Constants.h; path = ../../../src/Constants.h; sourceTree = SOURCE_ROOT; }; 48636E2C119E5A4300BC3DB6 /* CryptoPP_Inc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CryptoPP_Inc.h; path = ../../../src/CryptoPP_Inc.h; sourceTree = SOURCE_ROOT; }; 4879119511925E61002C086E /* CFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFile.cpp; path = ../../../src/CFile.cpp; sourceTree = SOURCE_ROOT; }; 4879119611925E61002C086E /* CFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CFile.h; path = ../../../src/CFile.h; sourceTree = SOURCE_ROOT; }; 4879119711925E61002C086E /* DataToText.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DataToText.cpp; path = ../../../src/DataToText.cpp; sourceTree = SOURCE_ROOT; }; 4879119811925E61002C086E /* DataToText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataToText.h; path = ../../../src/DataToText.h; sourceTree = SOURCE_ROOT; }; 4879119911925E61002C086E /* ED2KLink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ED2KLink.cpp; path = ../../../src/ED2KLink.cpp; sourceTree = SOURCE_ROOT; }; 4879119A11925E61002C086E /* ED2KLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ED2KLink.h; path = ../../../src/ED2KLink.h; sourceTree = SOURCE_ROOT; }; 4879119B11925E61002C086E /* GapList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GapList.cpp; path = ../../../src/GapList.cpp; sourceTree = SOURCE_ROOT; }; 4879119C11925E61002C086E /* GapList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GapList.h; path = ../../../src/GapList.h; sourceTree = SOURCE_ROOT; }; 4879119D11925E61002C086E /* MagnetURI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MagnetURI.cpp; path = ../../../src/MagnetURI.cpp; sourceTree = SOURCE_ROOT; }; 4879119E11925E61002C086E /* MagnetURI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MagnetURI.h; path = ../../../src/MagnetURI.h; sourceTree = SOURCE_ROOT; }; 4879119F11925E61002C086E /* MemFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MemFile.cpp; path = ../../../src/MemFile.cpp; sourceTree = SOURCE_ROOT; }; 487911A011925E61002C086E /* MemFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MemFile.h; path = ../../../src/MemFile.h; sourceTree = SOURCE_ROOT; }; 487911A311925E61002C086E /* Packet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Packet.cpp; path = ../../../src/Packet.cpp; sourceTree = SOURCE_ROOT; }; 487911A411925E61002C086E /* Packet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Packet.h; path = ../../../src/Packet.h; sourceTree = SOURCE_ROOT; }; 487911A511925E61002C086E /* RLE.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RLE.cpp; path = ../../../src/RLE.cpp; sourceTree = SOURCE_ROOT; }; 487911A611925E61002C086E /* RLE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RLE.h; path = ../../../src/RLE.h; sourceTree = SOURCE_ROOT; }; 487911A711925E61002C086E /* SafeFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SafeFile.cpp; path = ../../../src/SafeFile.cpp; sourceTree = SOURCE_ROOT; }; 487911A811925E61002C086E /* SafeFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SafeFile.h; path = ../../../src/SafeFile.h; sourceTree = SOURCE_ROOT; }; 487911A911925E61002C086E /* SHA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SHA.cpp; path = ../../../src/SHA.cpp; sourceTree = SOURCE_ROOT; }; 487911AA11925E61002C086E /* SHA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SHA.h; path = ../../../src/SHA.h; sourceTree = SOURCE_ROOT; }; 487911AB11925E61002C086E /* Tag.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tag.cpp; path = ../../../src/Tag.cpp; sourceTree = SOURCE_ROOT; }; 487911AC11925E61002C086E /* Tag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Tag.h; path = ../../../src/Tag.h; sourceTree = SOURCE_ROOT; }; 487911AD11925E61002C086E /* Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Timer.cpp; path = ../../../src/Timer.cpp; sourceTree = SOURCE_ROOT; }; 487911AE11925E61002C086E /* Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Timer.h; path = ../../../src/Timer.h; sourceTree = SOURCE_ROOT; }; 487911E811925FDD002C086E /* AsyncDNS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AsyncDNS.cpp; path = ../../../src/AsyncDNS.cpp; sourceTree = SOURCE_ROOT; }; 487911E911925FDD002C086E /* AsyncDNS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AsyncDNS.h; path = ../../../src/AsyncDNS.h; sourceTree = SOURCE_ROOT; }; 487911EA11925FDD002C086E /* DeadSourceList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DeadSourceList.cpp; path = ../../../src/DeadSourceList.cpp; sourceTree = SOURCE_ROOT; }; 487911EB11925FDD002C086E /* DeadSourceList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DeadSourceList.h; path = ../../../src/DeadSourceList.h; sourceTree = SOURCE_ROOT; }; 487911EC11925FDD002C086E /* FileArea.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileArea.cpp; path = ../../../src/FileArea.cpp; sourceTree = SOURCE_ROOT; }; 487911ED11925FDD002C086E /* FileArea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileArea.h; path = ../../../src/FileArea.h; sourceTree = SOURCE_ROOT; }; 487911EE11925FDD002C086E /* FileAutoClose.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileAutoClose.cpp; path = ../../../src/FileAutoClose.cpp; sourceTree = SOURCE_ROOT; }; 487911EF11925FDD002C086E /* FileAutoClose.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileAutoClose.h; path = ../../../src/FileAutoClose.h; sourceTree = SOURCE_ROOT; }; 487911F011925FDD002C086E /* Friend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Friend.cpp; path = ../../../src/Friend.cpp; sourceTree = SOURCE_ROOT; }; 487911F111925FDD002C086E /* Friend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Friend.h; path = ../../../src/Friend.h; sourceTree = SOURCE_ROOT; }; 487911F211925FDD002C086E /* Parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Parser.cpp; path = ../../../src/Parser.cpp; sourceTree = SOURCE_ROOT; }; 487911F311925FDD002C086E /* Parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Parser.hpp; path = ../../../src/Parser.hpp; sourceTree = SOURCE_ROOT; }; 487911F411925FDD002C086E /* PlatformSpecific.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PlatformSpecific.cpp; path = ../../../src/PlatformSpecific.cpp; sourceTree = SOURCE_ROOT; }; 487911F511925FDD002C086E /* PlatformSpecific.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlatformSpecific.h; path = ../../../src/PlatformSpecific.h; sourceTree = SOURCE_ROOT; }; 487911F611925FDD002C086E /* RandomFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RandomFunctions.cpp; path = ../../../src/RandomFunctions.cpp; sourceTree = SOURCE_ROOT; }; 487911F711925FDD002C086E /* RandomFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RandomFunctions.h; path = ../../../src/RandomFunctions.h; sourceTree = SOURCE_ROOT; }; 487911F811925FDD002C086E /* RC4Encrypt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RC4Encrypt.cpp; path = ../../../src/RC4Encrypt.cpp; sourceTree = SOURCE_ROOT; }; 487911F911925FDD002C086E /* RC4Encrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RC4Encrypt.h; path = ../../../src/RC4Encrypt.h; sourceTree = SOURCE_ROOT; }; 487911FA11925FDD002C086E /* Scanner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Scanner.cpp; path = ../../../src/Scanner.cpp; sourceTree = SOURCE_ROOT; }; 487911FB11925FDD002C086E /* Scanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Scanner.h; path = ../../../src/Scanner.h; sourceTree = SOURCE_ROOT; }; 487911FC11925FDD002C086E /* StateMachine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StateMachine.cpp; path = ../../../src/StateMachine.cpp; sourceTree = SOURCE_ROOT; }; 487911FD11925FDD002C086E /* StateMachine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StateMachine.h; path = ../../../src/StateMachine.h; sourceTree = SOURCE_ROOT; }; 487911FE11925FDD002C086E /* ThreadScheduler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadScheduler.cpp; path = ../../../src/ThreadScheduler.cpp; sourceTree = SOURCE_ROOT; }; 487911FF11925FDD002C086E /* ThreadScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadScheduler.h; path = ../../../src/ThreadScheduler.h; sourceTree = SOURCE_ROOT; }; 4879120011925FDD002C086E /* UPnPBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UPnPBase.cpp; path = ../../../src/UPnPBase.cpp; sourceTree = SOURCE_ROOT; }; 4879120111925FDD002C086E /* UPnPBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UPnPBase.h; path = ../../../src/UPnPBase.h; sourceTree = SOURCE_ROOT; }; 487917E11192601E002C086E /* Entry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Entry.cpp; path = ../../../src/kademlia/kademlia/Entry.cpp; sourceTree = SOURCE_ROOT; }; 487917E21192601E002C086E /* Entry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Entry.h; path = ../../../src/kademlia/kademlia/Entry.h; sourceTree = SOURCE_ROOT; }; 487917E31192601E002C086E /* SearchManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SearchManager.cpp; path = ../../../src/kademlia/kademlia/SearchManager.cpp; sourceTree = SOURCE_ROOT; }; 487917E41192601E002C086E /* SearchManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SearchManager.h; path = ../../../src/kademlia/kademlia/SearchManager.h; sourceTree = SOURCE_ROOT; }; 48791CD91192607A002C086E /* Contact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Contact.cpp; path = ../../../src/kademlia/routing/Contact.cpp; sourceTree = SOURCE_ROOT; }; 48791CDA1192607A002C086E /* Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Contact.h; path = ../../../src/kademlia/routing/Contact.h; sourceTree = SOURCE_ROOT; }; 48791CDB1192607A002C086E /* RoutingBin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RoutingBin.cpp; path = ../../../src/kademlia/routing/RoutingBin.cpp; sourceTree = SOURCE_ROOT; }; 48791CDC1192607A002C086E /* RoutingBin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RoutingBin.h; path = ../../../src/kademlia/routing/RoutingBin.h; sourceTree = SOURCE_ROOT; }; 48791D0A119260A0002C086E /* UInt128.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UInt128.cpp; path = ../../../src/kademlia/utils/UInt128.cpp; sourceTree = SOURCE_ROOT; }; 48791D0B119260A0002C086E /* UInt128.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UInt128.h; path = ../../../src/kademlia/utils/UInt128.h; sourceTree = SOURCE_ROOT; }; 48791D0E11926A0E002C086E /* BarShader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BarShader.cpp; path = ../../../src/BarShader.cpp; sourceTree = SOURCE_ROOT; }; 48791D0F11926A0E002C086E /* BarShader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BarShader.h; path = ../../../src/BarShader.h; sourceTree = SOURCE_ROOT; }; 48791D1011926A0E002C086E /* ChatWnd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChatWnd.cpp; path = ../../../src/ChatWnd.cpp; sourceTree = SOURCE_ROOT; }; 48791D1111926A0E002C086E /* ChatWnd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChatWnd.h; path = ../../../src/ChatWnd.h; sourceTree = SOURCE_ROOT; }; 48791D1211926A0E002C086E /* ColorFrameCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ColorFrameCtrl.cpp; path = ../../../src/ColorFrameCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791D1311926A0E002C086E /* ColorFrameCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ColorFrameCtrl.h; path = ../../../src/ColorFrameCtrl.h; sourceTree = SOURCE_ROOT; }; 48791D1411926A0E002C086E /* CommentDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CommentDialog.cpp; path = ../../../src/CommentDialog.cpp; sourceTree = SOURCE_ROOT; }; 48791D1511926A0E002C086E /* CommentDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommentDialog.h; path = ../../../src/CommentDialog.h; sourceTree = SOURCE_ROOT; }; 48791D1611926A0E002C086E /* CommentDialogLst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CommentDialogLst.cpp; path = ../../../src/CommentDialogLst.cpp; sourceTree = SOURCE_ROOT; }; 48791D1711926A0E002C086E /* CommentDialogLst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommentDialogLst.h; path = ../../../src/CommentDialogLst.h; sourceTree = SOURCE_ROOT; }; 48791D1811926A0E002C086E /* EditServerListDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EditServerListDlg.cpp; path = ../../../src/EditServerListDlg.cpp; sourceTree = SOURCE_ROOT; }; 48791D1911926A0E002C086E /* EditServerListDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditServerListDlg.h; path = ../../../src/EditServerListDlg.h; sourceTree = SOURCE_ROOT; }; 48791D1A11926A0E002C086E /* FileDetailListCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileDetailListCtrl.cpp; path = ../../../src/FileDetailListCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791D1B11926A0E002C086E /* FileDetailListCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileDetailListCtrl.h; path = ../../../src/FileDetailListCtrl.h; sourceTree = SOURCE_ROOT; }; 48791D1C11926A0E002C086E /* IP2Country.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IP2Country.cpp; path = ../../../src/IP2Country.cpp; sourceTree = SOURCE_ROOT; }; 48791D1D11926A0E002C086E /* IP2Country.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IP2Country.h; path = ../../../src/IP2Country.h; sourceTree = SOURCE_ROOT; }; 48791D1E11926A0E002C086E /* MuleCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MuleCollection.cpp; path = ../../../src/MuleCollection.cpp; sourceTree = SOURCE_ROOT; }; 48791D1F11926A0E002C086E /* MuleCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MuleCollection.h; path = ../../../src/MuleCollection.h; sourceTree = SOURCE_ROOT; }; 48791D2011926A0E002C086E /* MuleGifCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MuleGifCtrl.cpp; path = ../../../src/MuleGifCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791D2111926A0E002C086E /* MuleGifCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MuleGifCtrl.h; path = ../../../src/MuleGifCtrl.h; sourceTree = SOURCE_ROOT; }; 48791D2211926A0E002C086E /* MuleListCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MuleListCtrl.cpp; path = ../../../src/MuleListCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791D2311926A0E002C086E /* MuleListCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MuleListCtrl.h; path = ../../../src/MuleListCtrl.h; sourceTree = SOURCE_ROOT; }; 48791D2411926A0E002C086E /* MuleNotebook.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MuleNotebook.cpp; path = ../../../src/MuleNotebook.cpp; sourceTree = SOURCE_ROOT; }; 48791D2511926A0E002C086E /* MuleNotebook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MuleNotebook.h; path = ../../../src/MuleNotebook.h; sourceTree = SOURCE_ROOT; }; 48791D2611926A0E002C086E /* MuleTextCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MuleTextCtrl.cpp; path = ../../../src/MuleTextCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791D2711926A0E002C086E /* MuleTextCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MuleTextCtrl.h; path = ../../../src/MuleTextCtrl.h; sourceTree = SOURCE_ROOT; }; 48791D2811926A0E002C086E /* muuli_wdr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = muuli_wdr.cpp; path = ../../../src/muuli_wdr.cpp; sourceTree = SOURCE_ROOT; }; 48791D2911926A0E002C086E /* muuli_wdr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = muuli_wdr.h; path = ../../../src/muuli_wdr.h; sourceTree = SOURCE_ROOT; }; 48791D3911926A2E002C086E /* listctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = listctrl.cpp; path = ../../../src/extern/wxWidgets/listctrl.cpp; sourceTree = SOURCE_ROOT; }; 48791D3A11926A2E002C086E /* listctrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = listctrl.h; path = ../../../src/extern/wxWidgets/listctrl.h; sourceTree = SOURCE_ROOT; }; 48791D3D11926AEE002C086E /* amule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = amule.cpp; path = ../../../src/amule.cpp; sourceTree = SOURCE_ROOT; }; 48791D3E11926AEE002C086E /* amule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = amule.h; path = ../../../src/amule.h; sourceTree = SOURCE_ROOT; }; 48791D3F11926AEE002C086E /* BaseClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BaseClient.cpp; path = ../../../src/BaseClient.cpp; sourceTree = SOURCE_ROOT; }; 48791D4011926AEE002C086E /* CanceledFileList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CanceledFileList.cpp; path = ../../../src/CanceledFileList.cpp; sourceTree = SOURCE_ROOT; }; 48791D4111926AEE002C086E /* CanceledFileList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CanceledFileList.h; path = ../../../src/CanceledFileList.h; sourceTree = SOURCE_ROOT; }; 48791D4211926AEE002C086E /* ClientCreditsList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClientCreditsList.cpp; path = ../../../src/ClientCreditsList.cpp; sourceTree = SOURCE_ROOT; }; 48791D4311926AEE002C086E /* ClientCreditsList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClientCreditsList.h; path = ../../../src/ClientCreditsList.h; sourceTree = SOURCE_ROOT; }; 48791D4411926AEE002C086E /* ClientList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClientList.cpp; path = ../../../src/ClientList.cpp; sourceTree = SOURCE_ROOT; }; 48791D4511926AEE002C086E /* ClientList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClientList.h; path = ../../../src/ClientList.h; sourceTree = SOURCE_ROOT; }; 48791D4611926AEE002C086E /* ClientTCPSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClientTCPSocket.cpp; path = ../../../src/ClientTCPSocket.cpp; sourceTree = SOURCE_ROOT; }; 48791D4711926AEE002C086E /* ClientTCPSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClientTCPSocket.h; path = ../../../src/ClientTCPSocket.h; sourceTree = SOURCE_ROOT; }; 48791D4811926AEE002C086E /* ClientUDPSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClientUDPSocket.cpp; path = ../../../src/ClientUDPSocket.cpp; sourceTree = SOURCE_ROOT; }; 48791D4911926AEE002C086E /* ClientUDPSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClientUDPSocket.h; path = ../../../src/ClientUDPSocket.h; sourceTree = SOURCE_ROOT; }; 48791D4A11926AEE002C086E /* CorruptionBlackBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CorruptionBlackBox.cpp; path = ../../../src/CorruptionBlackBox.cpp; sourceTree = SOURCE_ROOT; }; 48791D4B11926AEE002C086E /* CorruptionBlackBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CorruptionBlackBox.h; path = ../../../src/CorruptionBlackBox.h; sourceTree = SOURCE_ROOT; }; 48791D4C11926AEE002C086E /* DownloadClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DownloadClient.cpp; path = ../../../src/DownloadClient.cpp; sourceTree = SOURCE_ROOT; }; 48791D4D11926AEE002C086E /* DownloadQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DownloadQueue.cpp; path = ../../../src/DownloadQueue.cpp; sourceTree = SOURCE_ROOT; }; 48791D4E11926AEE002C086E /* DownloadQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DownloadQueue.h; path = ../../../src/DownloadQueue.h; sourceTree = SOURCE_ROOT; }; 48791D4F11926AEE002C086E /* ECSpecialCoreTags.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ECSpecialCoreTags.cpp; path = ../../../src/ECSpecialCoreTags.cpp; sourceTree = SOURCE_ROOT; }; 48791D5011926AEE002C086E /* EMSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EMSocket.cpp; path = ../../../src/EMSocket.cpp; sourceTree = SOURCE_ROOT; }; 48791D5111926AEE002C086E /* EMSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EMSocket.h; path = ../../../src/EMSocket.h; sourceTree = SOURCE_ROOT; }; 48791D5211926AEE002C086E /* EncryptedDatagramSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EncryptedDatagramSocket.cpp; path = ../../../src/EncryptedDatagramSocket.cpp; sourceTree = SOURCE_ROOT; }; 48791D5311926AEE002C086E /* EncryptedDatagramSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EncryptedDatagramSocket.h; path = ../../../src/EncryptedDatagramSocket.h; sourceTree = SOURCE_ROOT; }; 48791D5411926AEE002C086E /* EncryptedStreamSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EncryptedStreamSocket.cpp; path = ../../../src/EncryptedStreamSocket.cpp; sourceTree = SOURCE_ROOT; }; 48791D5511926AEE002C086E /* EncryptedStreamSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EncryptedStreamSocket.h; path = ../../../src/EncryptedStreamSocket.h; sourceTree = SOURCE_ROOT; }; 48791D5611926AEE002C086E /* ExternalConn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ExternalConn.cpp; path = ../../../src/ExternalConn.cpp; sourceTree = SOURCE_ROOT; }; 48791D5711926AEE002C086E /* FriendList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FriendList.cpp; path = ../../../src/FriendList.cpp; sourceTree = SOURCE_ROOT; }; 48791D5811926AEE002C086E /* FriendList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FriendList.h; path = ../../../src/FriendList.h; sourceTree = SOURCE_ROOT; }; 48791D5911926AEE002C086E /* HTTPDownload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = HTTPDownload.cpp; path = ../../../src/HTTPDownload.cpp; sourceTree = SOURCE_ROOT; }; 48791D5A11926AEE002C086E /* HTTPDownload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPDownload.h; path = ../../../src/HTTPDownload.h; sourceTree = SOURCE_ROOT; }; 48791D5B11926AEE002C086E /* IPFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IPFilter.cpp; path = ../../../src/IPFilter.cpp; sourceTree = SOURCE_ROOT; }; 48791D5C11926AEE002C086E /* IPFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPFilter.h; path = ../../../src/IPFilter.h; sourceTree = SOURCE_ROOT; }; 48791D5D11926AEE002C086E /* KnownFileList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KnownFileList.cpp; path = ../../../src/KnownFileList.cpp; sourceTree = SOURCE_ROOT; }; 48791D5E11926AEE002C086E /* KnownFileList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KnownFileList.h; path = ../../../src/KnownFileList.h; sourceTree = SOURCE_ROOT; }; 48791D5F11926AEE002C086E /* ListenSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ListenSocket.cpp; path = ../../../src/ListenSocket.cpp; sourceTree = SOURCE_ROOT; }; 48791D6011926AEE002C086E /* ListenSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ListenSocket.h; path = ../../../src/ListenSocket.h; sourceTree = SOURCE_ROOT; }; 48791D6111926AEE002C086E /* MuleUDPSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MuleUDPSocket.cpp; path = ../../../src/MuleUDPSocket.cpp; sourceTree = SOURCE_ROOT; }; 48791D6211926AEE002C086E /* MuleUDPSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MuleUDPSocket.h; path = ../../../src/MuleUDPSocket.h; sourceTree = SOURCE_ROOT; }; 48791D6311926AEE002C086E /* PartFileConvert.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PartFileConvert.cpp; path = ../../../src/PartFileConvert.cpp; sourceTree = SOURCE_ROOT; }; 48791D6411926AEE002C086E /* PartFileConvert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PartFileConvert.h; path = ../../../src/PartFileConvert.h; sourceTree = SOURCE_ROOT; }; 48791D6511926AEE002C086E /* SearchFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SearchFile.cpp; path = ../../../src/SearchFile.cpp; sourceTree = SOURCE_ROOT; }; 48791D6611926AEE002C086E /* SearchFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SearchFile.h; path = ../../../src/SearchFile.h; sourceTree = SOURCE_ROOT; }; 48791D6711926AEE002C086E /* SearchList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SearchList.cpp; path = ../../../src/SearchList.cpp; sourceTree = SOURCE_ROOT; }; 48791D6811926AEE002C086E /* SearchList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SearchList.h; path = ../../../src/SearchList.h; sourceTree = SOURCE_ROOT; }; 48791D6911926AEE002C086E /* ServerConnect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ServerConnect.cpp; path = ../../../src/ServerConnect.cpp; sourceTree = SOURCE_ROOT; }; 48791D6A11926AEE002C086E /* ServerConnect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ServerConnect.h; path = ../../../src/ServerConnect.h; sourceTree = SOURCE_ROOT; }; 48791D6B11926AEE002C086E /* ServerList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ServerList.cpp; path = ../../../src/ServerList.cpp; sourceTree = SOURCE_ROOT; }; 48791D6C11926AEE002C086E /* ServerList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ServerList.h; path = ../../../src/ServerList.h; sourceTree = SOURCE_ROOT; }; 48791D6D11926AEE002C086E /* ServerSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ServerSocket.cpp; path = ../../../src/ServerSocket.cpp; sourceTree = SOURCE_ROOT; }; 48791D6E11926AEE002C086E /* ServerSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ServerSocket.h; path = ../../../src/ServerSocket.h; sourceTree = SOURCE_ROOT; }; 48791D6F11926AEE002C086E /* ServerUDPSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ServerUDPSocket.cpp; path = ../../../src/ServerUDPSocket.cpp; sourceTree = SOURCE_ROOT; }; 48791D7011926AEE002C086E /* ServerUDPSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ServerUDPSocket.h; path = ../../../src/ServerUDPSocket.h; sourceTree = SOURCE_ROOT; }; 48791D7111926AEE002C086E /* SharedFileList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SharedFileList.cpp; path = ../../../src/SharedFileList.cpp; sourceTree = SOURCE_ROOT; }; 48791D7211926AEE002C086E /* SharedFileList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SharedFileList.h; path = ../../../src/SharedFileList.h; sourceTree = SOURCE_ROOT; }; 48791D7311926AEE002C086E /* TerminationProcessAmuleweb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TerminationProcessAmuleweb.cpp; path = ../../../src/TerminationProcessAmuleweb.cpp; sourceTree = SOURCE_ROOT; }; 48791D7411926AEE002C086E /* TerminationProcessAmuleweb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TerminationProcessAmuleweb.h; path = ../../../src/TerminationProcessAmuleweb.h; sourceTree = SOURCE_ROOT; }; 48791D7511926AEE002C086E /* ThreadTasks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadTasks.cpp; path = ../../../src/ThreadTasks.cpp; sourceTree = SOURCE_ROOT; }; 48791D7611926AEE002C086E /* ThreadTasks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadTasks.h; path = ../../../src/ThreadTasks.h; sourceTree = SOURCE_ROOT; }; 48791D7711926AEE002C086E /* UploadBandwidthThrottler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UploadBandwidthThrottler.cpp; path = ../../../src/UploadBandwidthThrottler.cpp; sourceTree = SOURCE_ROOT; }; 48791D7811926AEE002C086E /* UploadBandwidthThrottler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UploadBandwidthThrottler.h; path = ../../../src/UploadBandwidthThrottler.h; sourceTree = SOURCE_ROOT; }; 48791D7911926AEE002C086E /* UploadClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UploadClient.cpp; path = ../../../src/UploadClient.cpp; sourceTree = SOURCE_ROOT; }; 48791D7A11926AEE002C086E /* UploadQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UploadQueue.cpp; path = ../../../src/UploadQueue.cpp; sourceTree = SOURCE_ROOT; }; 48791D7B11926AEE002C086E /* UploadQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UploadQueue.h; path = ../../../src/UploadQueue.h; sourceTree = SOURCE_ROOT; }; 48791DE311926B21002C086E /* KademliaUDPListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KademliaUDPListener.cpp; path = ../../../src/kademlia/net/KademliaUDPListener.cpp; sourceTree = SOURCE_ROOT; }; 48791DE411926B21002C086E /* KademliaUDPListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KademliaUDPListener.h; path = ../../../src/kademlia/net/KademliaUDPListener.h; sourceTree = SOURCE_ROOT; }; 48791DE511926B21002C086E /* PacketTracking.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PacketTracking.cpp; path = ../../../src/kademlia/net/PacketTracking.cpp; sourceTree = SOURCE_ROOT; }; 48791DE611926B21002C086E /* PacketTracking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PacketTracking.h; path = ../../../src/kademlia/net/PacketTracking.h; sourceTree = SOURCE_ROOT; }; 48791E2511926B41002C086E /* Indexed.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Indexed.cpp; path = ../../../src/kademlia/kademlia/Indexed.cpp; sourceTree = SOURCE_ROOT; }; 48791E2611926B41002C086E /* Indexed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Indexed.h; path = ../../../src/kademlia/kademlia/Indexed.h; sourceTree = SOURCE_ROOT; }; 48791E2711926B41002C086E /* Kademlia.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Kademlia.cpp; path = ../../../src/kademlia/kademlia/Kademlia.cpp; sourceTree = SOURCE_ROOT; }; 48791E2811926B41002C086E /* Kademlia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Kademlia.h; path = ../../../src/kademlia/kademlia/Kademlia.h; sourceTree = SOURCE_ROOT; }; 48791E2911926B41002C086E /* Prefs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Prefs.cpp; path = ../../../src/kademlia/kademlia/Prefs.cpp; sourceTree = SOURCE_ROOT; }; 48791E2A11926B41002C086E /* Prefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Prefs.h; path = ../../../src/kademlia/kademlia/Prefs.h; sourceTree = SOURCE_ROOT; }; 48791E2B11926B41002C086E /* Search.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Search.cpp; path = ../../../src/kademlia/kademlia/Search.cpp; sourceTree = SOURCE_ROOT; }; 48791E2C11926B41002C086E /* Search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Search.h; path = ../../../src/kademlia/kademlia/Search.h; sourceTree = SOURCE_ROOT; }; 48791E2D11926B41002C086E /* UDPFirewallTester.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UDPFirewallTester.cpp; path = ../../../src/kademlia/kademlia/UDPFirewallTester.cpp; sourceTree = SOURCE_ROOT; }; 48791E2E11926B41002C086E /* UDPFirewallTester.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UDPFirewallTester.h; path = ../../../src/kademlia/kademlia/UDPFirewallTester.h; sourceTree = SOURCE_ROOT; }; 48791E7C11926B54002C086E /* RoutingZone.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RoutingZone.cpp; path = ../../../src/kademlia/routing/RoutingZone.cpp; sourceTree = SOURCE_ROOT; }; 48791E7D11926B54002C086E /* RoutingZone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RoutingZone.h; path = ../../../src/kademlia/routing/RoutingZone.h; sourceTree = SOURCE_ROOT; }; 48791EAB11926CC7002C086E /* AddFriend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AddFriend.cpp; path = ../../../src/AddFriend.cpp; sourceTree = SOURCE_ROOT; }; 48791EAC11926CC7002C086E /* AddFriend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AddFriend.h; path = ../../../src/AddFriend.h; sourceTree = SOURCE_ROOT; }; 48791EAD11926CC7002C086E /* amule-gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "amule-gui.cpp"; path = "../../../src/amule-gui.cpp"; sourceTree = SOURCE_ROOT; }; 48791EAE11926CC7002C086E /* amuleDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = amuleDlg.cpp; path = ../../../src/amuleDlg.cpp; sourceTree = SOURCE_ROOT; }; 48791EAF11926CC7002C086E /* amuleDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = amuleDlg.h; path = ../../../src/amuleDlg.h; sourceTree = SOURCE_ROOT; }; 48791EB011926CC7002C086E /* CatDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CatDialog.cpp; path = ../../../src/CatDialog.cpp; sourceTree = SOURCE_ROOT; }; 48791EB111926CC7002C086E /* CatDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CatDialog.h; path = ../../../src/CatDialog.h; sourceTree = SOURCE_ROOT; }; 48791EB211926CC7002C086E /* ChatSelector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChatSelector.cpp; path = ../../../src/ChatSelector.cpp; sourceTree = SOURCE_ROOT; }; 48791EB311926CC7002C086E /* ChatSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChatSelector.h; path = ../../../src/ChatSelector.h; sourceTree = SOURCE_ROOT; }; 48791EB411926CC7002C086E /* ClientDetailDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClientDetailDialog.cpp; path = ../../../src/ClientDetailDialog.cpp; sourceTree = SOURCE_ROOT; }; 48791EB511926CC7002C086E /* ClientDetailDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClientDetailDialog.h; path = ../../../src/ClientDetailDialog.h; sourceTree = SOURCE_ROOT; }; 48791EB811926CC7002C086E /* DirectoryTreeCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DirectoryTreeCtrl.cpp; path = ../../../src/DirectoryTreeCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791EB911926CC7002C086E /* DirectoryTreeCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryTreeCtrl.h; path = ../../../src/DirectoryTreeCtrl.h; sourceTree = SOURCE_ROOT; }; 48791EBA11926CC7002C086E /* DownloadListCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DownloadListCtrl.cpp; path = ../../../src/DownloadListCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791EBB11926CC7002C086E /* DownloadListCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DownloadListCtrl.h; path = ../../../src/DownloadListCtrl.h; sourceTree = SOURCE_ROOT; }; 48791EBC11926CC7002C086E /* FileDetailDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileDetailDialog.cpp; path = ../../../src/FileDetailDialog.cpp; sourceTree = SOURCE_ROOT; }; 48791EBD11926CC7002C086E /* FileDetailDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileDetailDialog.h; path = ../../../src/FileDetailDialog.h; sourceTree = SOURCE_ROOT; }; 48791EBE11926CC7002C086E /* FriendListCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FriendListCtrl.cpp; path = ../../../src/FriendListCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791EBF11926CC7002C086E /* FriendListCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FriendListCtrl.h; path = ../../../src/FriendListCtrl.h; sourceTree = SOURCE_ROOT; }; 48791EC011926CC7002C086E /* KadDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KadDlg.cpp; path = ../../../src/KadDlg.cpp; sourceTree = SOURCE_ROOT; }; 48791EC111926CC7002C086E /* KadDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KadDlg.h; path = ../../../src/KadDlg.h; sourceTree = SOURCE_ROOT; }; 48791EC211926CC7002C086E /* MuleColour.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MuleColour.cpp; path = ../../../src/MuleColour.cpp; sourceTree = SOURCE_ROOT; }; 48791EC311926CC7002C086E /* MuleColour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MuleColour.h; path = ../../../src/MuleColour.h; sourceTree = SOURCE_ROOT; }; 48791EC411926CC7002C086E /* MuleTrayIcon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MuleTrayIcon.cpp; path = ../../../src/MuleTrayIcon.cpp; sourceTree = SOURCE_ROOT; }; 48791EC511926CC7002C086E /* MuleTrayIcon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MuleTrayIcon.h; path = ../../../src/MuleTrayIcon.h; sourceTree = SOURCE_ROOT; }; 48791EC611926CC7002C086E /* OScopeCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OScopeCtrl.cpp; path = ../../../src/OScopeCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791EC711926CC7002C086E /* OScopeCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OScopeCtrl.h; path = ../../../src/OScopeCtrl.h; sourceTree = SOURCE_ROOT; }; 48791EC811926CC7002C086E /* PartFileConvertDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PartFileConvertDlg.cpp; path = ../../../src/PartFileConvertDlg.cpp; sourceTree = SOURCE_ROOT; }; 48791EC911926CC7002C086E /* PartFileConvertDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PartFileConvertDlg.h; path = ../../../src/PartFileConvertDlg.h; sourceTree = SOURCE_ROOT; }; 48791ECA11926CC7002C086E /* PrefsUnifiedDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PrefsUnifiedDlg.cpp; path = ../../../src/PrefsUnifiedDlg.cpp; sourceTree = SOURCE_ROOT; }; 48791ECB11926CC7002C086E /* PrefsUnifiedDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrefsUnifiedDlg.h; path = ../../../src/PrefsUnifiedDlg.h; sourceTree = SOURCE_ROOT; }; 48791ECC11926CC7002C086E /* SearchDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SearchDlg.cpp; path = ../../../src/SearchDlg.cpp; sourceTree = SOURCE_ROOT; }; 48791ECD11926CC7002C086E /* SearchDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SearchDlg.h; path = ../../../src/SearchDlg.h; sourceTree = SOURCE_ROOT; }; 48791ECE11926CC7002C086E /* SearchListCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SearchListCtrl.cpp; path = ../../../src/SearchListCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791ECF11926CC7002C086E /* SearchListCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SearchListCtrl.h; path = ../../../src/SearchListCtrl.h; sourceTree = SOURCE_ROOT; }; 48791ED011926CC7002C086E /* ServerListCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ServerListCtrl.cpp; path = ../../../src/ServerListCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791ED111926CC7002C086E /* ServerListCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ServerListCtrl.h; path = ../../../src/ServerListCtrl.h; sourceTree = SOURCE_ROOT; }; 48791ED211926CC7002C086E /* ServerWnd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ServerWnd.cpp; path = ../../../src/ServerWnd.cpp; sourceTree = SOURCE_ROOT; }; 48791ED311926CC7002C086E /* ServerWnd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ServerWnd.h; path = ../../../src/ServerWnd.h; sourceTree = SOURCE_ROOT; }; 48791ED411926CC7002C086E /* SharedFilesCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SharedFilesCtrl.cpp; path = ../../../src/SharedFilesCtrl.cpp; sourceTree = SOURCE_ROOT; }; 48791ED511926CC7002C086E /* SharedFilesCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SharedFilesCtrl.h; path = ../../../src/SharedFilesCtrl.h; sourceTree = SOURCE_ROOT; }; 48791ED611926CC7002C086E /* SharedFilesWnd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SharedFilesWnd.cpp; path = ../../../src/SharedFilesWnd.cpp; sourceTree = SOURCE_ROOT; }; 48791ED711926CC7002C086E /* SharedFilesWnd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SharedFilesWnd.h; path = ../../../src/SharedFilesWnd.h; sourceTree = SOURCE_ROOT; }; 48791ED811926CC7002C086E /* StatisticsDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StatisticsDlg.cpp; path = ../../../src/StatisticsDlg.cpp; sourceTree = SOURCE_ROOT; }; 48791ED911926CC7002C086E /* StatisticsDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatisticsDlg.h; path = ../../../src/StatisticsDlg.h; sourceTree = SOURCE_ROOT; }; 48791EDA11926CC7002C086E /* TransferWnd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TransferWnd.cpp; path = ../../../src/TransferWnd.cpp; sourceTree = SOURCE_ROOT; }; 48791EDB11926CC7002C086E /* TransferWnd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransferWnd.h; path = ../../../src/TransferWnd.h; sourceTree = SOURCE_ROOT; }; 48791F6611926F24002C086E /* amuleAppCommon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = amuleAppCommon.cpp; path = ../../../src/amuleAppCommon.cpp; sourceTree = SOURCE_ROOT; }; 48791F6711926F24002C086E /* ClientCredits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClientCredits.cpp; path = ../../../src/ClientCredits.cpp; sourceTree = SOURCE_ROOT; }; 48791F6811926F24002C086E /* ClientCredits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClientCredits.h; path = ../../../src/ClientCredits.h; sourceTree = SOURCE_ROOT; }; 48791F6911926F24002C086E /* ECSpecialMuleTags.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ECSpecialMuleTags.cpp; path = ../../../src/ECSpecialMuleTags.cpp; sourceTree = SOURCE_ROOT; }; 48791F6A11926F24002C086E /* GetTickCount.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GetTickCount.cpp; path = ../../../src/GetTickCount.cpp; sourceTree = SOURCE_ROOT; }; 48791F6B11926F24002C086E /* GetTickCount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GetTickCount.h; path = ../../../src/GetTickCount.h; sourceTree = SOURCE_ROOT; }; 48791F6C11926F24002C086E /* GuiEvents.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GuiEvents.cpp; path = ../../../src/GuiEvents.cpp; sourceTree = SOURCE_ROOT; }; 48791F6D11926F24002C086E /* GuiEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GuiEvents.h; path = ../../../src/GuiEvents.h; sourceTree = SOURCE_ROOT; }; 48791F6E11926F24002C086E /* KnownFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KnownFile.cpp; path = ../../../src/KnownFile.cpp; sourceTree = SOURCE_ROOT; }; 48791F6F11926F24002C086E /* KnownFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KnownFile.h; path = ../../../src/KnownFile.h; sourceTree = SOURCE_ROOT; }; 48791F7011926F24002C086E /* Logger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Logger.cpp; path = ../../../src/Logger.cpp; sourceTree = SOURCE_ROOT; }; 48791F7111926F24002C086E /* Logger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logger.h; path = ../../../src/Logger.h; sourceTree = SOURCE_ROOT; }; 48791F7211926F24002C086E /* PartFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PartFile.cpp; path = ../../../src/PartFile.cpp; sourceTree = SOURCE_ROOT; }; 48791F7311926F24002C086E /* PartFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PartFile.h; path = ../../../src/PartFile.h; sourceTree = SOURCE_ROOT; }; 48791F7411926F24002C086E /* Preferences.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Preferences.cpp; path = ../../../src/Preferences.cpp; sourceTree = SOURCE_ROOT; }; 48791F7511926F24002C086E /* Preferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Preferences.h; path = ../../../src/Preferences.h; sourceTree = SOURCE_ROOT; }; 48791F7611926F24002C086E /* Proxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Proxy.cpp; path = ../../../src/Proxy.cpp; sourceTree = SOURCE_ROOT; }; 48791F7711926F24002C086E /* Proxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Proxy.h; path = ../../../src/Proxy.h; sourceTree = SOURCE_ROOT; }; 48791F7811926F24002C086E /* Server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Server.cpp; path = ../../../src/Server.cpp; sourceTree = SOURCE_ROOT; }; 48791F7911926F24002C086E /* Server.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Server.h; path = ../../../src/Server.h; sourceTree = SOURCE_ROOT; }; 48791F7A11926F24002C086E /* SHAHashSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SHAHashSet.cpp; path = ../../../src/SHAHashSet.cpp; sourceTree = SOURCE_ROOT; }; 48791F7B11926F24002C086E /* SHAHashSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SHAHashSet.h; path = ../../../src/SHAHashSet.h; sourceTree = SOURCE_ROOT; }; 48791F7C11926F24002C086E /* Statistics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Statistics.cpp; path = ../../../src/Statistics.cpp; sourceTree = SOURCE_ROOT; }; 48791F7D11926F24002C086E /* Statistics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Statistics.h; path = ../../../src/Statistics.h; sourceTree = SOURCE_ROOT; }; 48791F7E11926F24002C086E /* StatTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StatTree.cpp; path = ../../../src/StatTree.cpp; sourceTree = SOURCE_ROOT; }; 48791F7F11926F24002C086E /* StatTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatTree.h; path = ../../../src/StatTree.h; sourceTree = SOURCE_ROOT; }; 48791F8011926F24002C086E /* TerminationProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TerminationProcess.cpp; path = ../../../src/TerminationProcess.cpp; sourceTree = SOURCE_ROOT; }; 48791F8111926F24002C086E /* TerminationProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TerminationProcess.h; path = ../../../src/TerminationProcess.h; sourceTree = SOURCE_ROOT; }; 48791F8211926F24002C086E /* UserEvents.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UserEvents.cpp; path = ../../../src/UserEvents.cpp; sourceTree = SOURCE_ROOT; }; 48791F8311926F24002C086E /* UserEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UserEvents.h; path = ../../../src/UserEvents.h; sourceTree = SOURCE_ROOT; }; 48791FD611926F74002C086E /* NetworkFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkFunctions.cpp; path = ../../../src/NetworkFunctions.cpp; sourceTree = SOURCE_ROOT; }; 48791FD711926F74002C086E /* NetworkFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkFunctions.h; path = ../../../src/NetworkFunctions.h; sourceTree = SOURCE_ROOT; }; 48791FD811926F74002C086E /* OtherFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OtherFunctions.cpp; path = ../../../src/OtherFunctions.cpp; sourceTree = SOURCE_ROOT; }; 48791FD911926F74002C086E /* OtherFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OtherFunctions.h; path = ../../../src/OtherFunctions.h; sourceTree = SOURCE_ROOT; }; 487920361192730F002C086E /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; 4879205C119274FA002C086E /* FileFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileFunctions.cpp; path = ../../../src/libs/common/FileFunctions.cpp; sourceTree = SOURCE_ROOT; }; 4879205D119274FA002C086E /* FileFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileFunctions.h; path = ../../../src/libs/common/FileFunctions.h; sourceTree = SOURCE_ROOT; }; 4879205E119274FA002C086E /* Format.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Format.cpp; path = ../../../src/libs/common/Format.cpp; sourceTree = SOURCE_ROOT; }; 4879205F119274FA002C086E /* Format.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Format.h; path = ../../../src/libs/common/Format.h; sourceTree = SOURCE_ROOT; }; 48792060119274FA002C086E /* MD5Sum.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MD5Sum.cpp; path = ../../../src/libs/common/MD5Sum.cpp; sourceTree = SOURCE_ROOT; }; 48792061119274FA002C086E /* MD5Sum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MD5Sum.h; path = ../../../src/libs/common/MD5Sum.h; sourceTree = SOURCE_ROOT; }; 48792062119274FA002C086E /* MuleDebug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MuleDebug.cpp; path = ../../../src/libs/common/MuleDebug.cpp; sourceTree = SOURCE_ROOT; }; 48792063119274FA002C086E /* MuleDebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MuleDebug.h; path = ../../../src/libs/common/MuleDebug.h; sourceTree = SOURCE_ROOT; }; 48792064119274FA002C086E /* Path.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Path.cpp; path = ../../../src/libs/common/Path.cpp; sourceTree = SOURCE_ROOT; }; 48792065119274FA002C086E /* Path.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Path.h; path = ../../../src/libs/common/Path.h; sourceTree = SOURCE_ROOT; }; 48792066119274FA002C086E /* StringFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StringFunctions.cpp; path = ../../../src/libs/common/StringFunctions.cpp; sourceTree = SOURCE_ROOT; }; 48792067119274FA002C086E /* StringFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StringFunctions.h; path = ../../../src/libs/common/StringFunctions.h; sourceTree = SOURCE_ROOT; }; 48792068119274FA002C086E /* TextFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TextFile.cpp; path = ../../../src/libs/common/TextFile.cpp; sourceTree = SOURCE_ROOT; }; 48792069119274FA002C086E /* TextFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextFile.h; path = ../../../src/libs/common/TextFile.h; sourceTree = SOURCE_ROOT; }; 4879213211927582002C086E /* ECMuleSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ECMuleSocket.cpp; path = ../../../src/libs/ec/cpp/ECMuleSocket.cpp; sourceTree = SOURCE_ROOT; }; 4879213311927582002C086E /* ECMuleSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ECMuleSocket.h; path = ../../../src/libs/ec/cpp/ECMuleSocket.h; sourceTree = SOURCE_ROOT; }; 4879213411927582002C086E /* ECPacket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ECPacket.cpp; path = ../../../src/libs/ec/cpp/ECPacket.cpp; sourceTree = SOURCE_ROOT; }; 4879213511927582002C086E /* ECPacket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ECPacket.h; path = ../../../src/libs/ec/cpp/ECPacket.h; sourceTree = SOURCE_ROOT; }; 4879213611927582002C086E /* ECSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ECSocket.cpp; path = ../../../src/libs/ec/cpp/ECSocket.cpp; sourceTree = SOURCE_ROOT; }; 4879213711927582002C086E /* ECSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ECSocket.h; path = ../../../src/libs/ec/cpp/ECSocket.h; sourceTree = SOURCE_ROOT; }; 4879213811927582002C086E /* ECSpecialTags.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ECSpecialTags.cpp; path = ../../../src/libs/ec/cpp/ECSpecialTags.cpp; sourceTree = SOURCE_ROOT; }; 4879213911927582002C086E /* ECSpecialTags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ECSpecialTags.h; path = ../../../src/libs/ec/cpp/ECSpecialTags.h; sourceTree = SOURCE_ROOT; }; 4879213A11927582002C086E /* ECTag.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ECTag.cpp; path = ../../../src/libs/ec/cpp/ECTag.cpp; sourceTree = SOURCE_ROOT; }; 4879213B11927582002C086E /* ECTag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ECTag.h; path = ../../../src/libs/ec/cpp/ECTag.h; sourceTree = SOURCE_ROOT; }; 4879213C11927582002C086E /* RemoteConnect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RemoteConnect.cpp; path = ../../../src/libs/ec/cpp/RemoteConnect.cpp; sourceTree = SOURCE_ROOT; }; 4879213D11927582002C086E /* RemoteConnect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RemoteConnect.h; path = ../../../src/libs/ec/cpp/RemoteConnect.h; sourceTree = SOURCE_ROOT; }; 487922C811927626002C086E /* CaptchaDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CaptchaDialog.cpp; path = ../../../src/CaptchaDialog.cpp; sourceTree = SOURCE_ROOT; }; 487922C911927626002C086E /* CaptchaDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CaptchaDialog.h; path = ../../../src/CaptchaDialog.h; sourceTree = SOURCE_ROOT; }; 487922CA11927626002C086E /* CaptchaGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CaptchaGenerator.cpp; path = ../../../src/CaptchaGenerator.cpp; sourceTree = SOURCE_ROOT; }; 487922CB11927626002C086E /* CaptchaGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CaptchaGenerator.h; path = ../../../src/CaptchaGenerator.h; sourceTree = SOURCE_ROOT; }; 488D4E8E1192CB880089BF8E /* README BEFORE BUILDING.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = "README BEFORE BUILDING.rtf"; sourceTree = ""; }; 48CB3DB411B58AA80051CAF2 /* IPFilterScanner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IPFilterScanner.cpp; path = ../../../src/IPFilterScanner.cpp; sourceTree = SOURCE_ROOT; }; 48CB3DB511B58AA80051CAF2 /* IPFilterScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPFilterScanner.h; path = ../../../src/IPFilterScanner.h; sourceTree = SOURCE_ROOT; }; 8D1107310486CEB800E47090 /* aMule_Xcode-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "aMule_Xcode-Info.plist"; sourceTree = ""; }; 8D1107320486CEB800E47090 /* aMule.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = aMule.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 8D11072E0486CEB800E47090 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, 487920371192730F002C086E /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( 48791F9411926F44002C086E /* remote_common_sources */, 48791F6511926D4E002C086E /* common_sources */, 48791EAA11926B8E002C086E /* gui_sources */, 48791D3C11926A40002C086E /* core_sources */, 48791D0D119269A0002C086E /* libmuleappgui */, 487911E711925EA7002C086E /* libmuleappcore */, 4879114A11925DEC002C086E /* libmuleappcommon */, ); name = Classes; sourceTree = ""; }; 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, 487920361192730F002C086E /* libz.dylib */, ); name = "Linked Frameworks"; sourceTree = ""; }; 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { isa = PBXGroup; children = ( 29B97324FDCFA39411CA2CEA /* AppKit.framework */, 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, 29B97325FDCFA39411CA2CEA /* Foundation.framework */, ); name = "Other Frameworks"; sourceTree = ""; }; 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( 8D1107320486CEB800E47090 /* aMule.app */, ); name = Products; sourceTree = ""; }; 29B97314FDCFA39411CA2CEA /* aMule-Xcode */ = { isa = PBXGroup; children = ( 488D4E8E1192CB880089BF8E /* README BEFORE BUILDING.rtf */, 48792056119274B2002C086E /* libs */, 080E96DDFE201D6D7F000001 /* Classes */, 29B97315FDCFA39411CA2CEA /* Other Sources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, ); name = "aMule-Xcode"; sourceTree = ""; }; 29B97315FDCFA39411CA2CEA /* Other Sources */ = { isa = PBXGroup; children = ( 48636E2A119E5A4300BC3DB6 /* ArchSpecific.h */, 48636E2B119E5A4300BC3DB6 /* Constants.h */, 48636E2C119E5A4300BC3DB6 /* CryptoPP_Inc.h */, 256AC3F00F4B6AF500CF3369 /* aMule_Xcode_Prefix.pch */, ); name = "Other Sources"; sourceTree = ""; }; 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( 4833446F1196275F00D9BE75 /* amule.icns */, 8D1107310486CEB800E47090 /* aMule_Xcode-Info.plist */, 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, ); name = Resources; sourceTree = ""; }; 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, ); name = Frameworks; sourceTree = ""; }; 4879114A11925DEC002C086E /* libmuleappcommon */ = { isa = PBXGroup; children = ( 4879119511925E61002C086E /* CFile.cpp */, 4879119611925E61002C086E /* CFile.h */, 4879119711925E61002C086E /* DataToText.cpp */, 4879119811925E61002C086E /* DataToText.h */, 4879119911925E61002C086E /* ED2KLink.cpp */, 4879119A11925E61002C086E /* ED2KLink.h */, 4879119B11925E61002C086E /* GapList.cpp */, 4879119C11925E61002C086E /* GapList.h */, 4879119D11925E61002C086E /* MagnetURI.cpp */, 4879119E11925E61002C086E /* MagnetURI.h */, 4879119F11925E61002C086E /* MemFile.cpp */, 487911A011925E61002C086E /* MemFile.h */, 487911A311925E61002C086E /* Packet.cpp */, 487911A411925E61002C086E /* Packet.h */, 487911A511925E61002C086E /* RLE.cpp */, 487911A611925E61002C086E /* RLE.h */, 487911A711925E61002C086E /* SafeFile.cpp */, 487911A811925E61002C086E /* SafeFile.h */, 487911A911925E61002C086E /* SHA.cpp */, 487911AA11925E61002C086E /* SHA.h */, 487911AB11925E61002C086E /* Tag.cpp */, 487911AC11925E61002C086E /* Tag.h */, 487911AD11925E61002C086E /* Timer.cpp */, 487911AE11925E61002C086E /* Timer.h */, ); name = libmuleappcommon; sourceTree = ""; }; 487911E711925EA7002C086E /* libmuleappcore */ = { isa = PBXGroup; children = ( 29B97317FDCFA39411CA2CEA /* Resources */, 4879120F11925FE2002C086E /* kademlia */, 487911E811925FDD002C086E /* AsyncDNS.cpp */, 487911E911925FDD002C086E /* AsyncDNS.h */, 487911EA11925FDD002C086E /* DeadSourceList.cpp */, 487911EB11925FDD002C086E /* DeadSourceList.h */, 487911EC11925FDD002C086E /* FileArea.cpp */, 487911ED11925FDD002C086E /* FileArea.h */, 487911EE11925FDD002C086E /* FileAutoClose.cpp */, 487911EF11925FDD002C086E /* FileAutoClose.h */, 487911F011925FDD002C086E /* Friend.cpp */, 487911F111925FDD002C086E /* Friend.h */, 487911F211925FDD002C086E /* Parser.cpp */, 487911F311925FDD002C086E /* Parser.hpp */, 487911F411925FDD002C086E /* PlatformSpecific.cpp */, 487911F511925FDD002C086E /* PlatformSpecific.h */, 487911F611925FDD002C086E /* RandomFunctions.cpp */, 487911F711925FDD002C086E /* RandomFunctions.h */, 487911F811925FDD002C086E /* RC4Encrypt.cpp */, 487911F911925FDD002C086E /* RC4Encrypt.h */, 487911FA11925FDD002C086E /* Scanner.cpp */, 487911FB11925FDD002C086E /* Scanner.h */, 487911FC11925FDD002C086E /* StateMachine.cpp */, 487911FD11925FDD002C086E /* StateMachine.h */, 487911FE11925FDD002C086E /* ThreadScheduler.cpp */, 487911FF11925FDD002C086E /* ThreadScheduler.h */, 4879120011925FDD002C086E /* UPnPBase.cpp */, 4879120111925FDD002C086E /* UPnPBase.h */, ); name = libmuleappcore; sourceTree = ""; }; 4879120F11925FE2002C086E /* kademlia */ = { isa = PBXGroup; children = ( 4879121211925FF9002C086E /* utils */, 4879121111925FF4002C086E /* routing */, 4879121011925FEF002C086E /* kademlia */, ); name = kademlia; sourceTree = ""; }; 4879121011925FEF002C086E /* kademlia */ = { isa = PBXGroup; children = ( 487917E11192601E002C086E /* Entry.cpp */, 487917E21192601E002C086E /* Entry.h */, 487917E31192601E002C086E /* SearchManager.cpp */, 487917E41192601E002C086E /* SearchManager.h */, ); name = kademlia; sourceTree = ""; }; 4879121111925FF4002C086E /* routing */ = { isa = PBXGroup; children = ( 48791CD91192607A002C086E /* Contact.cpp */, 48791CDA1192607A002C086E /* Contact.h */, 48791CDB1192607A002C086E /* RoutingBin.cpp */, 48791CDC1192607A002C086E /* RoutingBin.h */, ); name = routing; sourceTree = ""; }; 4879121211925FF9002C086E /* utils */ = { isa = PBXGroup; children = ( 48791D0A119260A0002C086E /* UInt128.cpp */, 48791D0B119260A0002C086E /* UInt128.h */, ); name = utils; sourceTree = ""; }; 48791D0D119269A0002C086E /* libmuleappgui */ = { isa = PBXGroup; children = ( 48791D3811926A11002C086E /* extern */, 48791D0E11926A0E002C086E /* BarShader.cpp */, 48791D0F11926A0E002C086E /* BarShader.h */, 48791D1011926A0E002C086E /* ChatWnd.cpp */, 48791D1111926A0E002C086E /* ChatWnd.h */, 48791D1211926A0E002C086E /* ColorFrameCtrl.cpp */, 48791D1311926A0E002C086E /* ColorFrameCtrl.h */, 48791D1411926A0E002C086E /* CommentDialog.cpp */, 48791D1511926A0E002C086E /* CommentDialog.h */, 48791D1611926A0E002C086E /* CommentDialogLst.cpp */, 48791D1711926A0E002C086E /* CommentDialogLst.h */, 48791D1811926A0E002C086E /* EditServerListDlg.cpp */, 48791D1911926A0E002C086E /* EditServerListDlg.h */, 48791D1A11926A0E002C086E /* FileDetailListCtrl.cpp */, 48791D1B11926A0E002C086E /* FileDetailListCtrl.h */, 48791D1C11926A0E002C086E /* IP2Country.cpp */, 48791D1D11926A0E002C086E /* IP2Country.h */, 48791D1E11926A0E002C086E /* MuleCollection.cpp */, 48791D1F11926A0E002C086E /* MuleCollection.h */, 48791D2011926A0E002C086E /* MuleGifCtrl.cpp */, 48791D2111926A0E002C086E /* MuleGifCtrl.h */, 48791D2211926A0E002C086E /* MuleListCtrl.cpp */, 48791D2311926A0E002C086E /* MuleListCtrl.h */, 48791D2411926A0E002C086E /* MuleNotebook.cpp */, 48791D2511926A0E002C086E /* MuleNotebook.h */, 48791D2611926A0E002C086E /* MuleTextCtrl.cpp */, 48791D2711926A0E002C086E /* MuleTextCtrl.h */, 48791D2811926A0E002C086E /* muuli_wdr.cpp */, 48791D2911926A0E002C086E /* muuli_wdr.h */, ); name = libmuleappgui; sourceTree = ""; }; 48791D3811926A11002C086E /* extern */ = { isa = PBXGroup; children = ( 48791D3911926A2E002C086E /* listctrl.cpp */, 48791D3A11926A2E002C086E /* listctrl.h */, ); name = extern; sourceTree = ""; }; 48791D3C11926A40002C086E /* core_sources */ = { isa = PBXGroup; children = ( 48791D9E11926AF6002C086E /* kademlia */, 48791D3D11926AEE002C086E /* amule.cpp */, 48791D3E11926AEE002C086E /* amule.h */, 48791D3F11926AEE002C086E /* BaseClient.cpp */, 48791D4011926AEE002C086E /* CanceledFileList.cpp */, 48791D4111926AEE002C086E /* CanceledFileList.h */, 48791D4211926AEE002C086E /* ClientCreditsList.cpp */, 48791D4311926AEE002C086E /* ClientCreditsList.h */, 48791D4411926AEE002C086E /* ClientList.cpp */, 48791D4511926AEE002C086E /* ClientList.h */, 48791D4611926AEE002C086E /* ClientTCPSocket.cpp */, 48791D4711926AEE002C086E /* ClientTCPSocket.h */, 48791D4811926AEE002C086E /* ClientUDPSocket.cpp */, 48791D4911926AEE002C086E /* ClientUDPSocket.h */, 48791D4A11926AEE002C086E /* CorruptionBlackBox.cpp */, 48791D4B11926AEE002C086E /* CorruptionBlackBox.h */, 48791D4C11926AEE002C086E /* DownloadClient.cpp */, 48791D4D11926AEE002C086E /* DownloadQueue.cpp */, 48791D4E11926AEE002C086E /* DownloadQueue.h */, 48791D4F11926AEE002C086E /* ECSpecialCoreTags.cpp */, 48791D5011926AEE002C086E /* EMSocket.cpp */, 48791D5111926AEE002C086E /* EMSocket.h */, 48791D5211926AEE002C086E /* EncryptedDatagramSocket.cpp */, 48791D5311926AEE002C086E /* EncryptedDatagramSocket.h */, 48791D5411926AEE002C086E /* EncryptedStreamSocket.cpp */, 48791D5511926AEE002C086E /* EncryptedStreamSocket.h */, 48791D5611926AEE002C086E /* ExternalConn.cpp */, 48791D5711926AEE002C086E /* FriendList.cpp */, 48791D5811926AEE002C086E /* FriendList.h */, 48791D5911926AEE002C086E /* HTTPDownload.cpp */, 48791D5A11926AEE002C086E /* HTTPDownload.h */, 48791D5B11926AEE002C086E /* IPFilter.cpp */, 48791D5C11926AEE002C086E /* IPFilter.h */, 48CB3DB511B58AA80051CAF2 /* IPFilterScanner.h */, 48CB3DB411B58AA80051CAF2 /* IPFilterScanner.cpp */, 48791D5D11926AEE002C086E /* KnownFileList.cpp */, 48791D5E11926AEE002C086E /* KnownFileList.h */, 48791D5F11926AEE002C086E /* ListenSocket.cpp */, 48791D6011926AEE002C086E /* ListenSocket.h */, 48791D6111926AEE002C086E /* MuleUDPSocket.cpp */, 48791D6211926AEE002C086E /* MuleUDPSocket.h */, 48791D6311926AEE002C086E /* PartFileConvert.cpp */, 48791D6411926AEE002C086E /* PartFileConvert.h */, 48791D6511926AEE002C086E /* SearchFile.cpp */, 48791D6611926AEE002C086E /* SearchFile.h */, 48791D6711926AEE002C086E /* SearchList.cpp */, 48791D6811926AEE002C086E /* SearchList.h */, 48791D6911926AEE002C086E /* ServerConnect.cpp */, 48791D6A11926AEE002C086E /* ServerConnect.h */, 48791D6B11926AEE002C086E /* ServerList.cpp */, 48791D6C11926AEE002C086E /* ServerList.h */, 48791D6D11926AEE002C086E /* ServerSocket.cpp */, 48791D6E11926AEE002C086E /* ServerSocket.h */, 48791D6F11926AEE002C086E /* ServerUDPSocket.cpp */, 48791D7011926AEE002C086E /* ServerUDPSocket.h */, 48791D7111926AEE002C086E /* SharedFileList.cpp */, 48791D7211926AEE002C086E /* SharedFileList.h */, 48791D7311926AEE002C086E /* TerminationProcessAmuleweb.cpp */, 48791D7411926AEE002C086E /* TerminationProcessAmuleweb.h */, 48791D7511926AEE002C086E /* ThreadTasks.cpp */, 48791D7611926AEE002C086E /* ThreadTasks.h */, 48791D7711926AEE002C086E /* UploadBandwidthThrottler.cpp */, 48791D7811926AEE002C086E /* UploadBandwidthThrottler.h */, 48791D7911926AEE002C086E /* UploadClient.cpp */, 48791D7A11926AEE002C086E /* UploadQueue.cpp */, 48791D7B11926AEE002C086E /* UploadQueue.h */, ); name = core_sources; sourceTree = ""; }; 48791D9E11926AF6002C086E /* kademlia */ = { isa = PBXGroup; children = ( 48791DA111926B07002C086E /* routing */, 48791DA011926B03002C086E /* kademlia */, 48791D9F11926AFF002C086E /* net */, ); name = kademlia; sourceTree = ""; }; 48791D9F11926AFF002C086E /* net */ = { isa = PBXGroup; children = ( 48791DE311926B21002C086E /* KademliaUDPListener.cpp */, 48791DE411926B21002C086E /* KademliaUDPListener.h */, 48791DE511926B21002C086E /* PacketTracking.cpp */, 48791DE611926B21002C086E /* PacketTracking.h */, ); name = net; sourceTree = ""; }; 48791DA011926B03002C086E /* kademlia */ = { isa = PBXGroup; children = ( 48791E2511926B41002C086E /* Indexed.cpp */, 48791E2611926B41002C086E /* Indexed.h */, 48791E2711926B41002C086E /* Kademlia.cpp */, 48791E2811926B41002C086E /* Kademlia.h */, 48791E2911926B41002C086E /* Prefs.cpp */, 48791E2A11926B41002C086E /* Prefs.h */, 48791E2B11926B41002C086E /* Search.cpp */, 48791E2C11926B41002C086E /* Search.h */, 48791E2D11926B41002C086E /* UDPFirewallTester.cpp */, 48791E2E11926B41002C086E /* UDPFirewallTester.h */, ); name = kademlia; sourceTree = ""; }; 48791DA111926B07002C086E /* routing */ = { isa = PBXGroup; children = ( 48791E7C11926B54002C086E /* RoutingZone.cpp */, 48791E7D11926B54002C086E /* RoutingZone.h */, ); name = routing; sourceTree = ""; }; 48791EAA11926B8E002C086E /* gui_sources */ = { isa = PBXGroup; children = ( 4848D8091192E85900ED40CC /* SharedFilePeersListCtrl.cpp */, 4848D80A1192E85900ED40CC /* SharedFilePeersListCtrl.h */, 4848D80B1192E85900ED40CC /* SourceListCtrl.cpp */, 4848D80C1192E85900ED40CC /* SourceListCtrl.h */, 4848D2CD1192E83100ED40CC /* GenericClientListCtrl.cpp */, 4848D2CE1192E83100ED40CC /* GenericClientListCtrl.h */, 48791EAB11926CC7002C086E /* AddFriend.cpp */, 48791EAC11926CC7002C086E /* AddFriend.h */, 48791EAD11926CC7002C086E /* amule-gui.cpp */, 48791EAE11926CC7002C086E /* amuleDlg.cpp */, 48791EAF11926CC7002C086E /* amuleDlg.h */, 48791EB011926CC7002C086E /* CatDialog.cpp */, 48791EB111926CC7002C086E /* CatDialog.h */, 48791EB211926CC7002C086E /* ChatSelector.cpp */, 48791EB311926CC7002C086E /* ChatSelector.h */, 48791EB411926CC7002C086E /* ClientDetailDialog.cpp */, 48791EB511926CC7002C086E /* ClientDetailDialog.h */, 48791EB811926CC7002C086E /* DirectoryTreeCtrl.cpp */, 48791EB911926CC7002C086E /* DirectoryTreeCtrl.h */, 48791EBA11926CC7002C086E /* DownloadListCtrl.cpp */, 48791EBB11926CC7002C086E /* DownloadListCtrl.h */, 48791EBC11926CC7002C086E /* FileDetailDialog.cpp */, 48791EBD11926CC7002C086E /* FileDetailDialog.h */, 48791EBE11926CC7002C086E /* FriendListCtrl.cpp */, 48791EBF11926CC7002C086E /* FriendListCtrl.h */, 48791EC011926CC7002C086E /* KadDlg.cpp */, 48791EC111926CC7002C086E /* KadDlg.h */, 48791EC211926CC7002C086E /* MuleColour.cpp */, 48791EC311926CC7002C086E /* MuleColour.h */, 48791EC411926CC7002C086E /* MuleTrayIcon.cpp */, 48791EC511926CC7002C086E /* MuleTrayIcon.h */, 48791EC611926CC7002C086E /* OScopeCtrl.cpp */, 48791EC711926CC7002C086E /* OScopeCtrl.h */, 48791EC811926CC7002C086E /* PartFileConvertDlg.cpp */, 48791EC911926CC7002C086E /* PartFileConvertDlg.h */, 48791ECA11926CC7002C086E /* PrefsUnifiedDlg.cpp */, 48791ECB11926CC7002C086E /* PrefsUnifiedDlg.h */, 48791ECC11926CC7002C086E /* SearchDlg.cpp */, 48791ECD11926CC7002C086E /* SearchDlg.h */, 48791ECE11926CC7002C086E /* SearchListCtrl.cpp */, 48791ECF11926CC7002C086E /* SearchListCtrl.h */, 48791ED011926CC7002C086E /* ServerListCtrl.cpp */, 48791ED111926CC7002C086E /* ServerListCtrl.h */, 48791ED211926CC7002C086E /* ServerWnd.cpp */, 48791ED311926CC7002C086E /* ServerWnd.h */, 48791ED411926CC7002C086E /* SharedFilesCtrl.cpp */, 48791ED511926CC7002C086E /* SharedFilesCtrl.h */, 48791ED611926CC7002C086E /* SharedFilesWnd.cpp */, 48791ED711926CC7002C086E /* SharedFilesWnd.h */, 48791ED811926CC7002C086E /* StatisticsDlg.cpp */, 48791ED911926CC7002C086E /* StatisticsDlg.h */, 48791EDA11926CC7002C086E /* TransferWnd.cpp */, 48791EDB11926CC7002C086E /* TransferWnd.h */, ); name = gui_sources; sourceTree = ""; }; 48791F6511926D4E002C086E /* common_sources */ = { isa = PBXGroup; children = ( 487922C811927626002C086E /* CaptchaDialog.cpp */, 487922C911927626002C086E /* CaptchaDialog.h */, 487922CA11927626002C086E /* CaptchaGenerator.cpp */, 487922CB11927626002C086E /* CaptchaGenerator.h */, 48791F6611926F24002C086E /* amuleAppCommon.cpp */, 48791F6711926F24002C086E /* ClientCredits.cpp */, 48791F6811926F24002C086E /* ClientCredits.h */, 48791F6911926F24002C086E /* ECSpecialMuleTags.cpp */, 48791F6A11926F24002C086E /* GetTickCount.cpp */, 48791F6B11926F24002C086E /* GetTickCount.h */, 48791F6C11926F24002C086E /* GuiEvents.cpp */, 48791F6D11926F24002C086E /* GuiEvents.h */, 48791F6E11926F24002C086E /* KnownFile.cpp */, 48791F6F11926F24002C086E /* KnownFile.h */, 48791F7011926F24002C086E /* Logger.cpp */, 48791F7111926F24002C086E /* Logger.h */, 48791F7211926F24002C086E /* PartFile.cpp */, 48791F7311926F24002C086E /* PartFile.h */, 48791F7411926F24002C086E /* Preferences.cpp */, 48791F7511926F24002C086E /* Preferences.h */, 48791F7611926F24002C086E /* Proxy.cpp */, 48791F7711926F24002C086E /* Proxy.h */, 48791F7811926F24002C086E /* Server.cpp */, 48791F7911926F24002C086E /* Server.h */, 48791F7A11926F24002C086E /* SHAHashSet.cpp */, 48791F7B11926F24002C086E /* SHAHashSet.h */, 48791F7C11926F24002C086E /* Statistics.cpp */, 48791F7D11926F24002C086E /* Statistics.h */, 48791F7E11926F24002C086E /* StatTree.cpp */, 48791F7F11926F24002C086E /* StatTree.h */, 48791F8011926F24002C086E /* TerminationProcess.cpp */, 48791F8111926F24002C086E /* TerminationProcess.h */, 48791F8211926F24002C086E /* UserEvents.cpp */, 48791F8311926F24002C086E /* UserEvents.h */, ); name = common_sources; sourceTree = ""; }; 48791F9411926F44002C086E /* remote_common_sources */ = { isa = PBXGroup; children = ( 48791FD611926F74002C086E /* NetworkFunctions.cpp */, 48791FD711926F74002C086E /* NetworkFunctions.h */, 48791FD811926F74002C086E /* OtherFunctions.cpp */, 48791FD911926F74002C086E /* OtherFunctions.h */, ); name = remote_common_sources; sourceTree = ""; }; 48792056119274B2002C086E /* libs */ = { isa = PBXGroup; children = ( 48792058119274BB002C086E /* ec */, 48792057119274B7002C086E /* common */, ); name = libs; sourceTree = ""; }; 48792057119274B7002C086E /* common */ = { isa = PBXGroup; children = ( 4879205C119274FA002C086E /* FileFunctions.cpp */, 4879205D119274FA002C086E /* FileFunctions.h */, 4879205E119274FA002C086E /* Format.cpp */, 4879205F119274FA002C086E /* Format.h */, 48792060119274FA002C086E /* MD5Sum.cpp */, 48792061119274FA002C086E /* MD5Sum.h */, 48792062119274FA002C086E /* MuleDebug.cpp */, 48792063119274FA002C086E /* MuleDebug.h */, 48792064119274FA002C086E /* Path.cpp */, 48792065119274FA002C086E /* Path.h */, 48792066119274FA002C086E /* StringFunctions.cpp */, 48792067119274FA002C086E /* StringFunctions.h */, 48792068119274FA002C086E /* TextFile.cpp */, 48792069119274FA002C086E /* TextFile.h */, ); name = common; sourceTree = ""; }; 48792058119274BB002C086E /* ec */ = { isa = PBXGroup; children = ( 487921F011927592002C086E /* cpp */, ); name = ec; sourceTree = ""; }; 487921F011927592002C086E /* cpp */ = { isa = PBXGroup; children = ( 4879213211927582002C086E /* ECMuleSocket.cpp */, 4879213311927582002C086E /* ECMuleSocket.h */, 4879213411927582002C086E /* ECPacket.cpp */, 4879213511927582002C086E /* ECPacket.h */, 4879213611927582002C086E /* ECSocket.cpp */, 4879213711927582002C086E /* ECSocket.h */, 4879213811927582002C086E /* ECSpecialTags.cpp */, 4879213911927582002C086E /* ECSpecialTags.h */, 4879213A11927582002C086E /* ECTag.cpp */, 4879213B11927582002C086E /* ECTag.h */, 4879213C11927582002C086E /* RemoteConnect.cpp */, 4879213D11927582002C086E /* RemoteConnect.h */, ); name = cpp; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 8D1107260486CEB800E47090 /* aMule */ = { isa = PBXNativeTarget; buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "aMule" */; buildPhases = ( 8D1107290486CEB800E47090 /* Resources */, 8D11072C0486CEB800E47090 /* Sources */, 8D11072E0486CEB800E47090 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = aMule; productInstallPath = "$(HOME)/Applications"; productName = "aMule-Xcode"; productReference = 8D1107320486CEB800E47090 /* aMule.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "aMule" */; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 1; mainGroup = 29B97314FDCFA39411CA2CEA /* aMule-Xcode */; projectDirPath = ""; projectRoots = ( "", .., ); targets = ( 8D1107260486CEB800E47090 /* aMule */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 8D1107290486CEB800E47090 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, 488D4E8F1192CB880089BF8E /* README BEFORE BUILDING.rtf in Resources */, 483344701196275F00D9BE75 /* amule.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 8D11072C0486CEB800E47090 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 487911DA11925E61002C086E /* CFile.cpp in Sources */, 487911DB11925E61002C086E /* DataToText.cpp in Sources */, 487911DC11925E61002C086E /* ED2KLink.cpp in Sources */, 487911DD11925E61002C086E /* GapList.cpp in Sources */, 487911DE11925E61002C086E /* MagnetURI.cpp in Sources */, 487911DF11925E61002C086E /* MemFile.cpp in Sources */, 487911E111925E61002C086E /* Packet.cpp in Sources */, 487911E211925E61002C086E /* RLE.cpp in Sources */, 487911E311925E61002C086E /* SafeFile.cpp in Sources */, 487911E411925E61002C086E /* SHA.cpp in Sources */, 487911E511925E61002C086E /* Tag.cpp in Sources */, 487911E611925E61002C086E /* Timer.cpp in Sources */, 4879120211925FDD002C086E /* AsyncDNS.cpp in Sources */, 4879120311925FDD002C086E /* DeadSourceList.cpp in Sources */, 4879120411925FDD002C086E /* FileArea.cpp in Sources */, 4879120511925FDD002C086E /* FileAutoClose.cpp in Sources */, 4879120611925FDD002C086E /* Friend.cpp in Sources */, 4879120711925FDD002C086E /* Parser.cpp in Sources */, 4879120811925FDD002C086E /* PlatformSpecific.cpp in Sources */, 4879120911925FDD002C086E /* RandomFunctions.cpp in Sources */, 4879120A11925FDD002C086E /* RC4Encrypt.cpp in Sources */, 4879120B11925FDD002C086E /* Scanner.cpp in Sources */, 4879120C11925FDD002C086E /* StateMachine.cpp in Sources */, 4879120D11925FDD002C086E /* ThreadScheduler.cpp in Sources */, 4879120E11925FDD002C086E /* UPnPBase.cpp in Sources */, 48791C961192601F002C086E /* Entry.cpp in Sources */, 48791C971192601F002C086E /* SearchManager.cpp in Sources */, 48791D081192607A002C086E /* Contact.cpp in Sources */, 48791D091192607A002C086E /* RoutingBin.cpp in Sources */, 48791D0C119260A0002C086E /* UInt128.cpp in Sources */, 48791D2A11926A0E002C086E /* BarShader.cpp in Sources */, 48791D2B11926A0E002C086E /* ChatWnd.cpp in Sources */, 48791D2C11926A0E002C086E /* ColorFrameCtrl.cpp in Sources */, 48791D2D11926A0E002C086E /* CommentDialog.cpp in Sources */, 48791D2E11926A0E002C086E /* CommentDialogLst.cpp in Sources */, 48791D2F11926A0E002C086E /* EditServerListDlg.cpp in Sources */, 48791D3011926A0E002C086E /* FileDetailListCtrl.cpp in Sources */, 48791D3111926A0E002C086E /* IP2Country.cpp in Sources */, 48791D3211926A0E002C086E /* MuleCollection.cpp in Sources */, 48791D3311926A0E002C086E /* MuleGifCtrl.cpp in Sources */, 48791D3411926A0E002C086E /* MuleListCtrl.cpp in Sources */, 48791D3511926A0E002C086E /* MuleNotebook.cpp in Sources */, 48791D3611926A0E002C086E /* MuleTextCtrl.cpp in Sources */, 48791D3711926A0E002C086E /* muuli_wdr.cpp in Sources */, 48791D3B11926A2E002C086E /* listctrl.cpp in Sources */, 48791D7C11926AEE002C086E /* amule.cpp in Sources */, 48791D7D11926AEE002C086E /* BaseClient.cpp in Sources */, 48791D7E11926AEE002C086E /* CanceledFileList.cpp in Sources */, 48791D7F11926AEE002C086E /* ClientCreditsList.cpp in Sources */, 48791D8011926AEE002C086E /* ClientList.cpp in Sources */, 48791D8111926AEE002C086E /* ClientTCPSocket.cpp in Sources */, 48791D8211926AEE002C086E /* ClientUDPSocket.cpp in Sources */, 48791D8311926AEE002C086E /* CorruptionBlackBox.cpp in Sources */, 48791D8411926AEE002C086E /* DownloadClient.cpp in Sources */, 48791D8511926AEE002C086E /* DownloadQueue.cpp in Sources */, 48791D8611926AEE002C086E /* ECSpecialCoreTags.cpp in Sources */, 48791D8711926AEE002C086E /* EMSocket.cpp in Sources */, 48791D8811926AEE002C086E /* EncryptedDatagramSocket.cpp in Sources */, 48791D8911926AEE002C086E /* EncryptedStreamSocket.cpp in Sources */, 48791D8A11926AEE002C086E /* ExternalConn.cpp in Sources */, 48791D8B11926AEE002C086E /* FriendList.cpp in Sources */, 48791D8C11926AEE002C086E /* HTTPDownload.cpp in Sources */, 48791D8D11926AEE002C086E /* IPFilter.cpp in Sources */, 48791D8E11926AEE002C086E /* KnownFileList.cpp in Sources */, 48791D8F11926AEE002C086E /* ListenSocket.cpp in Sources */, 48791D9011926AEE002C086E /* MuleUDPSocket.cpp in Sources */, 48791D9111926AEE002C086E /* PartFileConvert.cpp in Sources */, 48791D9211926AEE002C086E /* SearchFile.cpp in Sources */, 48791D9311926AEE002C086E /* SearchList.cpp in Sources */, 48791D9411926AEE002C086E /* ServerConnect.cpp in Sources */, 48791D9511926AEE002C086E /* ServerList.cpp in Sources */, 48791D9611926AEE002C086E /* ServerSocket.cpp in Sources */, 48791D9711926AEE002C086E /* ServerUDPSocket.cpp in Sources */, 48791D9811926AEE002C086E /* SharedFileList.cpp in Sources */, 48791D9911926AEE002C086E /* TerminationProcessAmuleweb.cpp in Sources */, 48791D9A11926AEE002C086E /* ThreadTasks.cpp in Sources */, 48791D9B11926AEE002C086E /* UploadBandwidthThrottler.cpp in Sources */, 48791D9C11926AEE002C086E /* UploadClient.cpp in Sources */, 48791D9D11926AEE002C086E /* UploadQueue.cpp in Sources */, 48791E1211926B21002C086E /* KademliaUDPListener.cpp in Sources */, 48791E1311926B21002C086E /* PacketTracking.cpp in Sources */, 48791E3611926B41002C086E /* Indexed.cpp in Sources */, 48791E3711926B41002C086E /* Kademlia.cpp in Sources */, 48791E3811926B41002C086E /* Prefs.cpp in Sources */, 48791E3911926B41002C086E /* Search.cpp in Sources */, 48791E3A11926B41002C086E /* UDPFirewallTester.cpp in Sources */, 48791EA911926B54002C086E /* RoutingZone.cpp in Sources */, 48791EDC11926CC7002C086E /* AddFriend.cpp in Sources */, 48791EDD11926CC7002C086E /* amule-gui.cpp in Sources */, 48791EDE11926CC7002C086E /* amuleDlg.cpp in Sources */, 48791EDF11926CC7002C086E /* CatDialog.cpp in Sources */, 48791EE011926CC7002C086E /* ChatSelector.cpp in Sources */, 48791EE111926CC7002C086E /* ClientDetailDialog.cpp in Sources */, 48791EE311926CC7002C086E /* DirectoryTreeCtrl.cpp in Sources */, 48791EE411926CC7002C086E /* DownloadListCtrl.cpp in Sources */, 48791EE511926CC7002C086E /* FileDetailDialog.cpp in Sources */, 48791EE611926CC7002C086E /* FriendListCtrl.cpp in Sources */, 48791EE711926CC7002C086E /* KadDlg.cpp in Sources */, 48791EE811926CC7002C086E /* MuleColour.cpp in Sources */, 48791EE911926CC7002C086E /* MuleTrayIcon.cpp in Sources */, 48791EEA11926CC7002C086E /* OScopeCtrl.cpp in Sources */, 48791EEB11926CC7002C086E /* PartFileConvertDlg.cpp in Sources */, 48791EEC11926CC7002C086E /* PrefsUnifiedDlg.cpp in Sources */, 48791EED11926CC7002C086E /* SearchDlg.cpp in Sources */, 48791EEE11926CC7002C086E /* SearchListCtrl.cpp in Sources */, 48791EEF11926CC7002C086E /* ServerListCtrl.cpp in Sources */, 48791EF011926CC7002C086E /* ServerWnd.cpp in Sources */, 48791EF111926CC7002C086E /* SharedFilesCtrl.cpp in Sources */, 48791EF211926CC7002C086E /* SharedFilesWnd.cpp in Sources */, 48791EF311926CC7002C086E /* StatisticsDlg.cpp in Sources */, 48791EF411926CC7002C086E /* TransferWnd.cpp in Sources */, 48791F8411926F24002C086E /* amuleAppCommon.cpp in Sources */, 48791F8511926F24002C086E /* ClientCredits.cpp in Sources */, 48791F8611926F24002C086E /* ECSpecialMuleTags.cpp in Sources */, 48791F8711926F24002C086E /* GetTickCount.cpp in Sources */, 48791F8811926F24002C086E /* GuiEvents.cpp in Sources */, 48791F8911926F24002C086E /* KnownFile.cpp in Sources */, 48791F8A11926F24002C086E /* Logger.cpp in Sources */, 48791F8B11926F24002C086E /* PartFile.cpp in Sources */, 48791F8C11926F24002C086E /* Preferences.cpp in Sources */, 48791F8D11926F24002C086E /* Proxy.cpp in Sources */, 48791F8E11926F24002C086E /* Server.cpp in Sources */, 48791F8F11926F24002C086E /* SHAHashSet.cpp in Sources */, 48791F9011926F24002C086E /* Statistics.cpp in Sources */, 48791F9111926F24002C086E /* StatTree.cpp in Sources */, 48791F9211926F24002C086E /* TerminationProcess.cpp in Sources */, 48791F9311926F24002C086E /* UserEvents.cpp in Sources */, 4879200511926F74002C086E /* NetworkFunctions.cpp in Sources */, 4879200611926F74002C086E /* OtherFunctions.cpp in Sources */, 4879206A119274FA002C086E /* FileFunctions.cpp in Sources */, 4879206B119274FA002C086E /* Format.cpp in Sources */, 4879206C119274FA002C086E /* MD5Sum.cpp in Sources */, 4879206D119274FA002C086E /* MuleDebug.cpp in Sources */, 4879206E119274FA002C086E /* Path.cpp in Sources */, 4879206F119274FA002C086E /* StringFunctions.cpp in Sources */, 48792070119274FA002C086E /* TextFile.cpp in Sources */, 487921EA11927582002C086E /* ECMuleSocket.cpp in Sources */, 487921EB11927582002C086E /* ECPacket.cpp in Sources */, 487921EC11927582002C086E /* ECSocket.cpp in Sources */, 487921ED11927582002C086E /* ECSpecialTags.cpp in Sources */, 487921EE11927582002C086E /* ECTag.cpp in Sources */, 487921EF11927582002C086E /* RemoteConnect.cpp in Sources */, 4879238511927626002C086E /* CaptchaDialog.cpp in Sources */, 4879238611927626002C086E /* CaptchaGenerator.cpp in Sources */, 4848D2CF1192E83100ED40CC /* GenericClientListCtrl.cpp in Sources */, 4848DC291192E85A00ED40CC /* SharedFilePeersListCtrl.cpp in Sources */, 4848DC2A1192E85A00ED40CC /* SourceListCtrl.cpp in Sources */, 48CB3DB611B58AA80051CAF2 /* IPFilterScanner.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C165DFE840E0CC02AAC07 /* en */, ); name = InfoPlist.strings; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 48636E0A119E4DBA00BC3DB6 /* Development Debug - wxWidgets 2.9+ */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(NATIVE_ARCH_ACTUAL)"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_OPTIMIZATION_LEVEL = 0; GCC_THREADSAFE_STATICS = NO; GCC_VERSION = 4.0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "../../src/**"; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( "-I../../../..//wxWidgets/lib/wx/include/osx_cocoa-unicode-static-2.9", "-I../../../../wxWidgets/include", "-D_FILE_OFFSET_BITS=64", "-D__WXMAC__", "-D__WXOSX__", "-D__WXOSX_COCOA__", ); OTHER_LDFLAGS = "-L../../../../wxWidgets/lib"; PREBINDING = NO; SDKROOT = macosx10.4; VALID_ARCHS = "$(NATIVE_ARCH_ACTUAL)"; }; name = "Development Debug - wxWidgets 2.9+"; }; 48636E0B119E4DBA00BC3DB6 /* Development Debug - wxWidgets 2.9+ */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(NATIVE_ARCH_ACTUAL)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = aMule_Xcode_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = ( USE_WX_EXTENSIONS, "CRYPTOPP_INCLUDE_PREFIX=cryptopp-64bits", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = ""; HEADER_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../src\"", "\"$(SRCROOT)/../../../src/libs/\"/**", "\"$(SRCROOT)/../../../src/include/\"/**", ); INFOPLIST_FILE = "aMule_Xcode-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../src\"", "\"$(SRCROOT)/../src/libs/\"/**", "\"$(SRCROOT)/../src/libs/ec/cpp\"", ); MACOSX_DEPLOYMENT_TARGET = 10.6; OTHER_CFLAGS = ( "-I../../../../", "-I../../../../wxWidgets/lib/wx/include/osx_cocoa-unicode-static-2.9", "-I../../../../wxWidgets/include", "-D_FILE_OFFSET_BITS=64", "-D__WXMAC__", "-D__WXOSX__", "-D__WXOSX_COCOA__", ); OTHER_LDFLAGS = ( "-L../../../../cryptopp-64bits/", "-lcryptopp", "-L../../../../wxWidgets/lib", "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", AudioToolbox, "-framework", System, "-framework", OpenGL, "-framework", QuickTime, "../../../../wxWidgets/lib/libwx_osx_cocoau_xrc-2.9.a", "../../../../wxWidgets/lib/libwx_osx_cocoau_html-2.9.a", "../../../../wxWidgets/lib/libwx_osx_cocoau_qa-2.9.a", "../../../../wxWidgets/lib/libwx_osx_cocoau_adv-2.9.a", "../../../../wxWidgets/lib/libwx_osx_cocoau_core-2.9.a", "../../../../wxWidgets/lib/libwx_baseu_xml-2.9.a", "../../../../wxWidgets/lib/libwx_baseu_net-2.9.a", "../../../../wxWidgets/lib/libwx_baseu-2.9.a", "-framework", WebKit, "-lexpat", "-lwxregexu-2.9", "-lwxtiff-2.9", "-lwxjpeg-2.9", "-lwxpng-2.9", "-lz", "-lpthread", "-liconv", ); PRODUCT_NAME = aMule; SDKROOT = macosx10.6; VALID_ARCHS = "ppc i386 x86_64"; }; name = "Development Debug - wxWidgets 2.9+"; }; 48636E0C119E4DC400BC3DB6 /* Deployment Debug - wxWidgets 2.9+ */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_OPTIMIZATION_LEVEL = 0; GCC_THREADSAFE_STATICS = NO; GCC_VERSION = 4.0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "../../src/**"; ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = ( "-I../../../../wxWidgets-2.8/lib/wx/include/mac-unicode-debug-2.8", "-I../../../../wxWidgets-2.8/include", "-I../../../../wxWidgets-2.8/contrib/include", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXDEBUG__", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-L../../../../wxWidgets-2.8/lib", "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "-lwx_macud_richtext-2.8", "-lwx_macud_aui-2.8", "-lwx_macud_xrc-2.8", "-lwx_macud_qa-2.8", "-lwx_macud_html-2.8", "-lwx_macud_adv-2.8", "-lwx_macud_core-2.8", "-lwx_base_carbonud_xml-2.8", "-lwx_base_carbonud_net-2.8", "-lwx_base_carbonud-2.8", ); PREBINDING = NO; SDKROOT = macosx10.4; VALID_ARCHS = "i386 ppc"; }; name = "Deployment Debug - wxWidgets 2.9+"; }; 48636E0D119E4DC400BC3DB6 /* Deployment Debug - wxWidgets 2.9+ */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = aMule_Xcode_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = USE_WX_EXTENSIONS; GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = 4.0; HEADER_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../src\"", "\"$(SRCROOT)/../../../src/libs/\"/**", "\"$(SRCROOT)/../../../src/include/\"/**", ); INFOPLIST_FILE = "aMule_Xcode-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../src\"", "\"$(SRCROOT)/../src/libs/\"/**", "\"$(SRCROOT)/../src/libs/ec/cpp\"", ); MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ( "-I../../../../", "-I../../../../wxWidgets-2.8/lib/wx/include/mac-unicode-debug-static-2.8", "-I../../../../wxWidgets-2.8/include", "-I../../../../wxWidgets-2.8/contrib/include", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXDEBUG__", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-L../../../../cryptopp/", "-lcryptopp", "-L../../../../wxWidgets-2.8/lib", "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "../../../../wxWidgets-2.8/lib/libwx_macud_richtext-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_aui-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_xrc-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_qa-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_html-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_adv-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_core-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud_xml-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud_net-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud-2.8.a", "-framework", WebKit, "-lwxregexud-2.8", "-lwxexpatd-2.8", "-lwxtiffd-2.8", "-lwxjpegd-2.8", "-lwxpngd-2.8", "-lz", "-lpthread", "-liconv", ); PRODUCT_NAME = aMule; SDKROOT = macosx10.4; VALID_ARCHS = "ppc i386"; }; name = "Deployment Debug - wxWidgets 2.9+"; }; 48636E0E119E4DCB00BC3DB6 /* Deployment Release - wxWidgets 2.9+ */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_THREADSAFE_STATICS = NO; GCC_VERSION = 4.0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "../../src/**"; OTHER_CFLAGS = ( "-I../../../../wxWidgets-2.8/lib/wx/include/mac-unicode-debug-2.8", "-I../../../../wxWidgets-2.8/include", "-I../../../../wxWidgets-2.8/contrib/include", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXDEBUG__", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-L../../../../wxWidgets-2.8/lib", "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "-lwx_macud_richtext-2.8", "-lwx_macud_aui-2.8", "-lwx_macud_xrc-2.8", "-lwx_macud_qa-2.8", "-lwx_macud_html-2.8", "-lwx_macud_adv-2.8", "-lwx_macud_core-2.8", "-lwx_base_carbonud_xml-2.8", "-lwx_base_carbonud_net-2.8", "-lwx_base_carbonud-2.8", ); PREBINDING = NO; SDKROOT = macosx10.4; VALID_ARCHS = "i386 ppc"; }; name = "Deployment Release - wxWidgets 2.9+"; }; 48636E0F119E4DCB00BC3DB6 /* Deployment Release - wxWidgets 2.9+ */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_32_BIT)"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = aMule_Xcode_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = USE_WX_EXTENSIONS; GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = 4.0; HEADER_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../src\"", "\"$(SRCROOT)/../../../src/libs/\"/**", "\"$(SRCROOT)/../../../src/include/\"/**", ); INFOPLIST_FILE = "aMule_Xcode-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../src\"", "\"$(SRCROOT)/../src/libs/\"/**", "\"$(SRCROOT)/../src/libs/ec/cpp\"", ); MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ( "-I../../../../", "-I../../../../wxWidgets-2.8/lib/wx/include/mac-unicode-debug-static-2.8", "-I../../../../wxWidgets-2.8/include", "-I../../../../wxWidgets-2.8/contrib/include", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXDEBUG__", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-L../../../../cryptopp/", "-lcryptopp", "-L../../../../wxWidgets-2.8/lib", "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "../../../../wxWidgets-2.8/lib/libwx_macud_richtext-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_aui-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_xrc-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_qa-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_html-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_adv-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_core-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud_xml-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud_net-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud-2.8.a", "-framework", WebKit, "-lwxregexud-2.8", "-lwxexpatd-2.8", "-lwxtiffd-2.8", "-lwxjpegd-2.8", "-lwxpngd-2.8", "-lz", "-lpthread", "-liconv", ); PRODUCT_NAME = aMule; SDKROOT = macosx10.4; VALID_ARCHS = "ppc i386"; }; name = "Deployment Release - wxWidgets 2.9+"; }; 4875E6EA1192DCF9004ABCD5 /* Deployment Debug - wxWidgets 2.8 */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_OPTIMIZATION_LEVEL = 0; GCC_THREADSAFE_STATICS = NO; GCC_VERSION = 4.0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "../../src/**"; ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = ( "-I../../../../wxWidgets-2.8/lib/wx/include/mac-unicode-debug-2.8", "-I../../../../wxWidgets-2.8/include", "-I../../../../wxWidgets-2.8/contrib/include", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXDEBUG__", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-L../../../../wxWidgets-2.8/lib", "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "-lwx_macud_richtext-2.8", "-lwx_macud_aui-2.8", "-lwx_macud_xrc-2.8", "-lwx_macud_qa-2.8", "-lwx_macud_html-2.8", "-lwx_macud_adv-2.8", "-lwx_macud_core-2.8", "-lwx_base_carbonud_xml-2.8", "-lwx_base_carbonud_net-2.8", "-lwx_base_carbonud-2.8", ); PREBINDING = NO; SDKROOT = macosx10.4; VALID_ARCHS = "i386 ppc"; }; name = "Deployment Debug - wxWidgets 2.8"; }; 4875E6EB1192DCF9004ABCD5 /* Deployment Debug - wxWidgets 2.8 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = aMule_Xcode_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = USE_WX_EXTENSIONS; GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = 4.0; HEADER_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../src\"", "\"$(SRCROOT)/../../../src/libs/\"/**", "\"$(SRCROOT)/../../../src/include/\"/**", ); INFOPLIST_FILE = "aMule_Xcode-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../src\"", "\"$(SRCROOT)/../src/libs/\"/**", "\"$(SRCROOT)/../src/libs/ec/cpp\"", ); MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ( "-I../../../../", "-I../../../../wxWidgets-2.8/lib/wx/include/mac-unicode-debug-static-2.8", "-I../../../../wxWidgets-2.8/include", "-I../../../../wxWidgets-2.8/contrib/include", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXDEBUG__", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-L../../../../cryptopp/", "-lcryptopp", "-L../../../../wxWidgets-2.8/lib", "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "../../../../wxWidgets-2.8/lib/libwx_macud_richtext-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_aui-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_xrc-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_qa-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_html-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_adv-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_core-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud_xml-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud_net-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud-2.8.a", "-framework", WebKit, "-lwxregexud-2.8", "-lwxexpatd-2.8", "-lwxtiffd-2.8", "-lwxjpegd-2.8", "-lwxpngd-2.8", "-lz", "-lpthread", "-liconv", ); PRODUCT_NAME = aMule; SDKROOT = macosx10.4; VALID_ARCHS = "ppc i386"; }; name = "Deployment Debug - wxWidgets 2.8"; }; C01FCF4B08A954540054247B /* Development Debug - wxWidgets 2.8 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = aMule_Xcode_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = USE_WX_EXTENSIONS; GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = 4.0; HEADER_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../src\"", "\"$(SRCROOT)/../../../src/libs/\"/**", "\"$(SRCROOT)/../../../src/include/\"/**", ); INFOPLIST_FILE = "aMule_Xcode-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../src\"", "\"$(SRCROOT)/../src/libs/\"/**", "\"$(SRCROOT)/../src/libs/ec/cpp\"", ); MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ( "-I../../../../", "-I../../../../wxWidgets-2.8/lib/wx/include/mac-unicode-debug-static-2.8", "-I../../../../wxWidgets-2.8/include", "-I../../../../wxWidgets-2.8/contrib/include", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXDEBUG__", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-L../../../../cryptopp/", "-lcryptopp", "-L../../../../wxWidgets-2.8/lib", "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "../../../../wxWidgets-2.8/lib/libwx_macud_richtext-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_aui-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_xrc-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_qa-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_html-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_adv-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_core-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud_xml-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud_net-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud-2.8.a", "-framework", WebKit, "-lwxregexud-2.8", "-lwxexpatd-2.8", "-lwxtiffd-2.8", "-lwxjpegd-2.8", "-lwxpngd-2.8", "-lz", "-lpthread", "-liconv", ); PRODUCT_NAME = aMule; SDKROOT = macosx10.4; VALID_ARCHS = "ppc i386"; }; name = "Development Debug - wxWidgets 2.8"; }; C01FCF4C08A954540054247B /* Deployment Release - wxWidgets 2.8 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_32_BIT)"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = aMule_Xcode_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = USE_WX_EXTENSIONS; GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = 4.0; HEADER_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../src\"", "\"$(SRCROOT)/../../../src/libs/\"/**", "\"$(SRCROOT)/../../../src/include/\"/**", ); INFOPLIST_FILE = "aMule_Xcode-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../src\"", "\"$(SRCROOT)/../src/libs/\"/**", "\"$(SRCROOT)/../src/libs/ec/cpp\"", ); MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ( "-I../../../../", "-I../../../../wxWidgets-2.8/lib/wx/include/mac-unicode-debug-static-2.8", "-I../../../../wxWidgets-2.8/include", "-I../../../../wxWidgets-2.8/contrib/include", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXDEBUG__", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-L../../../../cryptopp/", "-lcryptopp", "-L../../../../wxWidgets-2.8/lib", "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "../../../../wxWidgets-2.8/lib/libwx_macud_richtext-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_aui-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_xrc-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_qa-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_html-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_adv-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_macud_core-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud_xml-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud_net-2.8.a", "../../../../wxWidgets-2.8/lib/libwx_base_carbonud-2.8.a", "-framework", WebKit, "-lwxregexud-2.8", "-lwxexpatd-2.8", "-lwxtiffd-2.8", "-lwxjpegd-2.8", "-lwxpngd-2.8", "-lz", "-lpthread", "-liconv", ); PRODUCT_NAME = aMule; SDKROOT = macosx10.4; VALID_ARCHS = "ppc i386"; }; name = "Deployment Release - wxWidgets 2.8"; }; C01FCF4F08A954540054247B /* Development Debug - wxWidgets 2.8 */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(NATIVE_ARCH_ACTUAL)"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_OPTIMIZATION_LEVEL = 0; GCC_THREADSAFE_STATICS = NO; GCC_VERSION = 4.0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "../../src/**"; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( "-I../../../../wxWidgets-2.8/lib/wx/include/mac-unicode-debug-2.8", "-I../../../../wxWidgets-2.8/include", "-I../../../../wxWidgets-2.8/contrib/include", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXDEBUG__", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-L../../../../wxWidgets-2.8/lib", "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "-lwx_macud_richtext-2.8", "-lwx_macud_aui-2.8", "-lwx_macud_xrc-2.8", "-lwx_macud_qa-2.8", "-lwx_macud_html-2.8", "-lwx_macud_adv-2.8", "-lwx_macud_core-2.8", "-lwx_base_carbonud_xml-2.8", "-lwx_base_carbonud_net-2.8", "-lwx_base_carbonud-2.8", ); PREBINDING = NO; SDKROOT = macosx10.4; VALID_ARCHS = "$(NATIVE_ARCH_ACTUAL)"; }; name = "Development Debug - wxWidgets 2.8"; }; C01FCF5008A954540054247B /* Deployment Release - wxWidgets 2.8 */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_THREADSAFE_STATICS = NO; GCC_VERSION = 4.0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "../../src/**"; OTHER_CFLAGS = ( "-I../../../../wxWidgets-2.8/lib/wx/include/mac-unicode-debug-2.8", "-I../../../../wxWidgets-2.8/include", "-I../../../../wxWidgets-2.8/contrib/include", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXDEBUG__", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-L../../../../wxWidgets-2.8/lib", "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "-lwx_macud_richtext-2.8", "-lwx_macud_aui-2.8", "-lwx_macud_xrc-2.8", "-lwx_macud_qa-2.8", "-lwx_macud_html-2.8", "-lwx_macud_adv-2.8", "-lwx_macud_core-2.8", "-lwx_base_carbonud_xml-2.8", "-lwx_base_carbonud_net-2.8", "-lwx_base_carbonud-2.8", ); PREBINDING = NO; SDKROOT = macosx10.4; VALID_ARCHS = "i386 ppc"; }; name = "Deployment Release - wxWidgets 2.8"; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "aMule" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4B08A954540054247B /* Development Debug - wxWidgets 2.8 */, 48636E0B119E4DBA00BC3DB6 /* Development Debug - wxWidgets 2.9+ */, 4875E6EB1192DCF9004ABCD5 /* Deployment Debug - wxWidgets 2.8 */, 48636E0D119E4DC400BC3DB6 /* Deployment Debug - wxWidgets 2.9+ */, C01FCF4C08A954540054247B /* Deployment Release - wxWidgets 2.8 */, 48636E0F119E4DCB00BC3DB6 /* Deployment Release - wxWidgets 2.9+ */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = "Deployment Release - wxWidgets 2.8"; }; C01FCF4E08A954540054247B /* Build configuration list for PBXProject "aMule" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4F08A954540054247B /* Development Debug - wxWidgets 2.8 */, 48636E0A119E4DBA00BC3DB6 /* Development Debug - wxWidgets 2.9+ */, 4875E6EA1192DCF9004ABCD5 /* Deployment Debug - wxWidgets 2.8 */, 48636E0C119E4DC400BC3DB6 /* Deployment Debug - wxWidgets 2.9+ */, C01FCF5008A954540054247B /* Deployment Release - wxWidgets 2.8 */, 48636E0E119E4DCB00BC3DB6 /* Deployment Release - wxWidgets 2.9+ */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = "Deployment Release - wxWidgets 2.8"; }; /* End XCConfigurationList section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/aMule-Xcode/amule.icns0000644000175000017500000011033311772155611024724 0ustar l3onl3onicnsÛit32PËÅb"Tgu{1õ)Zr”—wô+(f|¶’€ô9;ou£½yó tij‡½½~kò KKop†¤Ñ­sqò 7[xv’¶Ñ›oo ñ +qxˆ¡Ñ͉qð 38h~‰¯Ñ¶|\ñ !Vn™½Ñ¤ˆj7ð Gi}‘­ÑÍ™€iñ fyˆ™¹Ì¶“yj Ê€’  Hj€“›ÑÑ­‰xgÊz²œBž @jv‚“¶ÑÍ¡‰xlËVdlNœ foˆ‰¤½Ö¶™wmËU[QO60-¥š 7ry‰™¯ÑѶ‘}kÊ }cZTZR"˜-at€“›¶ÖѤ‰z}^Ë K^\WYYq\0%–%ky‰™¯ÑÖ¹¡‰zŠZÉ i\_Wa_~v+q“9Np€‰¡¶ÑÖ¶™‰uˆUË >\a__ggnqR%M’$h~‰™¤½ÝÍ¥“‰xw Ì Na_aajjx{uI1UQi€‰¡¯ÑÖÌœ‰‰xlÍ OVa_aagqzu~D5%ix‚™¤½Öѹ›Šz}\Í:^_gRgqqyzst\"ŒZr“¡¯ÍÖѯžŠz~TÎ\L_g_Mgqyy€qz`\OŒkw‰“¤¶Ñݽ¤“‰y}HÏ"\UqgM_gqzpnhJJÜt£ƒfz‰ž¥»ÑѶ¤“ƒ€)ÏPLM_qMgqryyy}nC8€¥‚`‚sz‰¡¶ÑÖѶ¤“‰wmÐ3ZM Qgqyy‰ƒ€tu1 €¼W^‚!r‰¡ÄÑÖÍ¥¡“€ueÐVLMMPPWgqyŠ™ˆv{€Èq7©€ &qz‰œÍÖÖͯ¤‘€tPÐ0Z‚M agqy‚™”“g€f‚­oz‰§ÑÖѽ¯›‰ynH@Ñ+TJMM?EQggr¤»™vpsRtzh q“­ÑÖѽ¯›‰vfCÒS5M€E!Uqqyy™»Ãª|f&x5O04 pz‰¯ÖÖѽ­ž€uMÔ&V6€E"MMgqy‚™Ãè»wt &nc'&sz‰¯ÖÖÑÀ­¡d# Ô<9E!MMqqy‰ªËè”~gqNaf;i€¶ÌÖѽ¤‘}R ,Ô9@5€E Mqgq™»íîh Y^ENWkx‰¶ÜÖѹ¤‰|CaÖD3€5$MWgqu”ÃíËxX9CEEMN^t‰¯ÚÖѶ›ˆ~LC–‚¨Ò;355EMWgqy‘¦èÃs]E=€PZ``q‚»Ñѯ“yY8B„WÒC ==535EQagqy™¥™q_V>[_gqj‚q “¥­™‘‡s 7xÔ'60$33EQ_gqyaQQ\_quyƒƒ‰‚zuŠ¥À­‰F(Ö(S1%%3MUgjjPEWgqyƒƒ‰Š“¥½ÌÃÃ¥ƒˆ¯¤}E>=“΀ÜCI"3M__PE_jy‚‚‰Š‹‘“™¤»€è ¥›|\‚žÓ½€Ü‚!-G$5MEQ_qyƒƒ‰Š““™œœž›¤ª»™‘Їh ‚ŽÓ½çHG<RMau€ƒˆŠ““€œ¤§§­¯ª¡€œ“’„56Žï½‚¤€?0*5Maqƒ‰Š“™œœ§†¯ ¨¤œœ•i Ÿï½‚¤dTAKLRWqy‚‰Š“™œ§¯‚¶¯§œ›{$³ï½‚¤€a$E" :Ngƒ‰Š“™¤¯„¹¶¶¯¯®¬¦;€ï½‚Ï€ . 8)2Muƒ‰Š“™¤€¯¶¹€À€¹ ¸¶¯¯®’VbÏ,H]‰Š‘™¤­¯¶¶¹¹ÀƒÄ À¾­¸·¯­¡c Ó½‚σ Us‚ŠŠ™œ­¯¶¸¹ÀÄÄ‚Ë ÊÖèè¶­dĽ„ÏYtŠ‘œ¦­¸·»ÀÄÄËÍÑÖÖÔÝï€þöø®p€Ž¼½…Ó€ b‚‰œÌÍ軸ÀÄÄËÑÖ×í‚þöÌ¥ˆ&€Ž¦½†Ê$cw‰”è€þ ïÌÀËÍÑÖÖ×ÙÙÝöƒþ誀<€ŽÙ½†‹dˆí‚þöÝÀրÙÚè…þÑ‘\ŽÙ½†›)b}¦öƒþ öÖÓÖ×ÙÙÚÚö…þî’l ŽÊ½†¬:h~Ã…þíÖØ€ÙÚíö…þè£k€Ê½†ÀAmyˆþ îÖÙÙÚÚîþþöƒþï¤l7€Ã½†Ü Np€Ë†þ öØÎÙÚÚèöt(Uâþö„xO€þ½†Ü Ni‚ÃþÙïþþîÏÙÚÚè± o‚þ¨z`$€Œþ½†Ü€4e€Ãþöt%9ÃþèÖ€Ùî¦ b‚þ©‰aGŒþ½†‚€at¨þ¸ OþèÖÙÑÍ»ÚX7Ê‚þ¼¨^!€‹ï½†™€NwŠï€þ® Hþ车¦•мïÏç‚þöʨ¨lQ%‹ï½†¦€G€•â€þ ïj0¼þÕ¨¤©Ã¼Ú…þÓÍÊŸV'€ŠÜ½‡· P„¦ÍþöÓçþÍ©¼ÊÊÓÙÓÓÜâïþç€ÜÉnN"€‰Ü½‡ÍT•¨¼„þ âÊÓÜÜÙ××ÓÓ€Ï ÓÙÜÜÚÙÜÜâªT1€‰Ï½†Ê€U¦Ë¼ç‚þâÚÜÓÏÊÃÀ¼€¸€± ®ª®··ÊÊÓÙ‹J€ˆÏ½†¼€E\¨ÍÍÚ€þ ïÜÓÍÀ¸®®ª¸€·¼€À ¼·ª¤››jÜÈdK!€‡Ï½†ª€SZ»ÜÙÙÜââϼ®ª¦ª¸ÀÏÜç…ï ⼤‚49™â§X_!€†Ï½†Ü€4V¾ÜÚÙÙÊ· ¤››¤®À܆ç ââÖ¸›b46bÊÙ‡dW€†ö½†Ü 22[ÈÙÙÓ¼¤––™€›  ®¬®··±±··¼··®€› N4?R®âÂqp;€…ö½…À€(5×âÓ®™™–™››™›ƒ™›™›™™—•™››‘B4?W¦Ùܦ\€€…Ͻ…Ï€$E±áÀ‹™›™››™›™›€™ƒ›™›™€› Ÿq47B[ªÃÉÖdE€„Ͻ„Ï€ AkÑÜv9z™›…™›‚™››™£o46Hj·ÃÊÔ¸[_€ƒâ’½„Ü€ WK˜ç¼O1B‘™€›ƒ™››™›€™›™››™™P7?N‚¿ÃÊÍÙ{N€‚â’½ƒÜ€ 7jXÊÙ¦H94]†›™›ƒ™›™››™”?9FX¤»ÀÃÊÚ«G$€çz’½”‚·€ X^ÙÓªU?96‚€›Ž™‹9?H‚µ·¼ÀÃÐÌQ5€€€çz’½”‹·€ vV¥ÖÏ·bB67P€›Ž™•j7Hj®¯±·ÀÀÄÖq>D€¼¼zz’½”‹‰€Ï€ oUÀÓÉÂN?77z†™––™€–”–””W6]›±®®··ÀÀÛ„F€‘nzz’½”‹‰€Ï%bmÓÏÃÆª[H94N–€™„–„”‘”PF™³ª€®±¸¸Ü—J€bnzz’½”‹‰ªª&Q€ÙÊÃÀ»‹WH97z›“”€’…‘‹ŠHz°¦€ª¬®··Ú—N,€bnzz’½”‹‰t€E—ÜÂÀ¼·±„XH9H€‘‡‹‰~O¢¥€¦€ª®¯ÓˆJ‚zz’½”‹‰t€ <ÙÆÀ··®®„WF7j”‡‹‚ˆ„ƒj ¤¤‚¦ª¬ÊoUÍ8¬Ùº¼··®ª¨™j?H‹‰‰ˆ…„‚‚ƒz› €¤ ¤¤¦¦·Wg)Fh:"  ¿7C©Ùº¸®®ªª¦¨¥z?n‹€„‹‚ƒ›¤¤§ RUTPXOKIOTW`bgnqmqK®mzuhaZYUS[WWQD0+?šÙ¹·®ªª€¦¢­zW‹‚{‚‚–„› ©|wwv€†ƒzyyfda\Z\WPP®kDEFEEMFGNPSS^Z[^œÜµ®ª¦¤ šjz‚‚{z‚zztz‘™ƒ›£¨”— ©²·Â¼¶‰„ˆ‰‰‹’ˆTb8¬.OL~ƒ‡‡€мÇþ¼©¥ªÏ·®ª¦¤€ €›‚z{„z tvzznqzzt‚–™›Ÿ®Š’™œ¦¶ÀÂÊÏϨ‘„‰‚‰ˆ‰mB?¬=<~€›™™–¨ÄÊÊÄÀ¶¶¦Ê¾ª¦ „›‘ztz!qjttvtvqtz•™››™ž·‡“œ¦®·ÂÊÏÑÑν•’’€‹yF5«LA‡‘‰„‰ˆ†¦ÃÊÏÏʾ¶©ªÏ¨¤„›™‘zvƒtoqt‚qvqq‘™››¤¸‡‡Š‘œ¦®ÀÂË€Ñ Ï¸ª¤™›”™G(¬GM„„‰‹‰Š§¶ÄÏÑÑÏÇ·´™©Ä„›™“vqqbnqqnjnqqjn€qjj‚–›·¼|‚‡Š‘¡®¶ÀÂË€ÑϤ±€¦¤yA)« DV‰––™–›¦­ÄÏÑÑÏÇ·¶¬‹ÃÄŸƒ›$™‘voqojqkoqnnqjnqqjqnu¢ÅÓqz‡‰Š“¤®·ÂÊÏ€Ñ È¯ª®¸®¦q\@(« ?Lb‘ª¦¦©”®ÀÏ€Ñ Ê¸¶® ‰¨¸®œ› ™Žqooqqjjoqqn€qjqqkqq„ÓÆÊ|ˆŠ‘›¦®¾ÂÊÑ ÁÌ©®·›X?M@+«5 DDHHoªª¤¦ªºÏÏÑÑʶ®¦—ƒˆ¨ª¶®¢š–Œqjqklqlkjqokqjkkvs¦žÑ€ä Æ€‘“œ¦¶¾ÇË€ÑШ€·¬”`GF<¬ G=EN‚±¸·±¤¸Ä€ÑÏʶ®œ“Š€j{‡•¤©¶¡otqttqt qw‡†”¦žÊ½½äå€äž“œž¦·ÀÊË€Ñ Ðª¦™ªª®·±\X*¬ [EW®¼·±·¤¤ÁÂÑÊ·®œ“‰ƒ~q\cuŠˆw‡„”¤ÀÇϽÊÑÜÜ‚äÜž¦®¾ÂÊËÑÑΦ’‘””™™›ªhRB¬ GFq±ª¤¤›‹¨²Ï€Ñ"Ê·®®™‰ƒt_g{ƒˆŠ„ƒzy‰“™™¡¦¦®¤“žÂÊÑÑ‚äÏåž¡®®¾ÂÊËÍÑ»t€‚„‹’”hG5¬0=q™’€‹‰„„‰Í€Ñ ʾ·®œŠƒrSry€Š”—“Š{ƒŠˆŠ“›¥¶ËÊËÑÜ€äåÏäÌœ®®¾Â€Ë Ìwjnqqvtzz‚XI!¬ .;i‰‚zzqvtkœÑÊÀ·®œ‰_juƒŠŠ“œœ­¯¯¸€¹ÀÄ€Ë"ÐÆÊËÑÜÜääåÏäÑœ®®·ÀËË̪`fh`hjnoqvOK¬ 3:VtoqqljjhbsÍ€Ñʾ®¦“rVryƒ‰Š“œ¤€¯¶¹¹ÀÄËËÍÏÍÐÌÊËËÑÓÜä Ì›”œ¯·ÂÊÉ”PW€]``fhh>R ¬8>>hffb€`!XXW§ËÍʾµ¨š{aQduƒŠŠ™¤­¯¯¶¹¹ÀÄËËÏÑ€ÖÎËÊÊÑÜÜä€å̳aF``œªÊ{GPOPPURXXU@(­<-AOONN€O MFeaA,+3<;:EWjyƒˆŠ™¤§¯¯¶¹¹ÄËÍÍÖÖׂÙÑÊÊËÑÜÜÑѸ¶¤1.&#::97=@BFLE,0®#/E€H"L@21/6*(AWjzƒŠ“™¤§¯¶¹¹ÀÄËÍÓÖ׃٠ÚÜËÊÊËÆÌÁ¹¶­T  )**07 ° "(3/+ (?J5QWqƒŠ“™¤§¯¶¹¹ÄËËÓÖÖ×ÙÙÚÙÙÛÌÓÌÍËÀ¹¶µy … D7#¨1I;fXVI&  !3(30O_r‰Š“œ¤­¯¹¹ÀÄËÍÖÖ×ÙÙƒÚÙÙ×ÓÌËÊÀ¹¹¶›-H  ƒ $/.$8, ž1;K)#)(+*&&.8,0+&"(*--/5?Q_rƒ‰Š“œ§­¯¹¹ÀÄËÏÖÖ×Ù„Ú&ÙÙ×ÖÓËËÀ¹¹¶¤==,28=7,&&3::7:49ACHHDKI@D9K+W€~*ƒƒ‚ƒ•¤™ŠŠ‰vvwqjjljgSWES_r‰Š“œ§­¯¹¹ÀÊËÏÖÖ×Ù„ÚÙÙ×ÖÓËËÀ¹¹¸§R6??@€AP@DQQEDDPLGLGGLGE4IK›2(<2”›”™’”’”¨´±¨œœŠ‰ƒ{uqqjgg_MT_r‚ŠŠ“œ§­¯¶¹ÀÊËÏÖÖ×Ù„Ú ÙØÖÖÓËËÀ¹¹¸¦{qrrs{…Ž›¦³¶¿ÀÊÄ—‚„ˆ„€ˆ‹n2Vš!1V‹‰‰‚„'¤¾¹·®¦œœ‘‰ƒ{uqqjggMW_r‰Š“œ§®¶¶¹ÀÄËÏÖÖ×ÙƒÚ ÙØ×ÖÖÏËËÀ¹¹¯ªr{ƒŠ“¦®¶¾ÇËÌ×»‰‹‰„„€‹‘AB;š.%l‹„‰ˆ‚‡„ˆ¤À¾¾¶®¦œ“ЉƒyrqqggMQ_rƒŠ“œ¤®¯¶¹ÀÄËË€Ö€ÙÚÙ×€Ö$ÏËÄÀ¹¹¯¦xrryƒŠ“¦®¶¾ÂËÑÑÒÓª—‘‹‰ˆ‰„‹[4Kš x™‘’””ˆ‡‰¦€¾#¶®¦œ“‘‰ƒyuqqggMN_rƒŠ“œ¤§¯¶¶¹ÀËËÑÖÖ׃Ù×ÖÍËÄÀ¹¹¯œ€r{ƒŠœ¦®¾ÂÊËÑÑÒ˹¤™‡”’‹‹‘v(eš%m‘ €›'ª—ƒœ­¾¾¶®®œ™‘‰ƒyyrqpgWM]j‚ŠŠœ¤§¯¶¶¹ÀÄËÍ€Öƒ×ÖÍËÄÀ¹¹¶¯™€r{ŠŠœ¦®¾ÂËÑÒÑÑ̯¦¦€›™™›‰6aš0$Th”¦ªª’™­¾¾·®®¦œ“Šƒ{yrqqg_EZgyŠŠ“œ§¯¯¶¹ÀÄÄËÏˆÖ ÏËËÄÀ¹¹¯¯ˆ€rŠ‘œ®®¾ÂËÑÒÑÏĶœ¤®¦ ¦®‹j8Nš OHN´®¤•”“©€¸®®¦œ“Љyrqqg_MO_uƒŠ‘œ¥€¯€¹ÄÄËÍ…Ö ÒÏËËÄÀ¹¹¶¯ŸrƒŠ“¦®¶ÀÇËÑÒÑÏħœ™¤®®ªˆ]W2>š &"0Pz ·´¼Ã©‘§€¸#®®¦œ“Љƒyrrqgg_P]qŠŠœœ§¯¯¶¹¹ÀÄÄËÍÍÖÒÏÍËËÄÀ¹¹¶¯ªnrry‰Šœ¦®·ÀÊË€Ñ Ï¹§¨©®¸·zHBM(2š#0=$›À·´´¬¤‡Š£¶¸¸¶®¦œœŠ‰ƒ{urqgg_MUgy€Š œ§§¯¯¶¹¹ÀÄĆËÊÄÀ€¹¶­™r{‰Šœ¦®¾ÂÊÏÑÑÏ˹œ©±€·®‘W05@š,!6>´ª¦¦¤¤’’•œ®¾¾·®¦œœŠŠƒyrqqggMMXqŠŠ“œ§§¯¶€¹¾ÀÄĀˀÊÄ€À¹¹¶ª›rprry‰Šœ®¶¾ÂÊËÑÑÏDZ¤¤©€®·¼¦/JKš$'Mž™™”‘‹‹‹‡¤¸¸¶®®œœ“ŠƒyrqqggWMRau€Šœœ§§¯¶¹¾ÀÄÄÀÀ¹­¨“un€ryƒ‰‘œ®·¾ÂÊÏÑÑÏĪ—‘–›› ¦¦®MB@š%M‘„ˆ€‚&ttzŒ¶··®®¦œ“ЉyrqqggWRME_tŠŠ‘œœ§§¯¶¸€¹¾‡¹­œƒrk€ry{ƒ‰œ¤®·ÀÇËÏÑÑϪ„€‘”™¤V49š(+8zt€qnoljh¤ÀÀ·®®œ™Š‰yrqqgWZWM€E XqˆŠŠœœ§§­¯¶ˆ¹­œˆrjrt€ry{ƒŠœ¦¶¸ÂÊËÏÑÑˇt€z‚‚ˆ„‹M8Cš11)oonjfhffb`[†€·!®¦œ“Šƒyrqqj_LF5%$'($2Q~†›œ¥§¨­¯·¸€¹!¯¥–sREFEQgjeurtryƒœ¦¶¸ÂËËÒÒѪjjln€qtzz‚?9^šT1b``[]`XU]UPf¤¶·®œ”ކ~m\E5$$%):E!:I0<$!$2EQQWeeRPQE5('29''$$'%6FWjx‚‡Œœ®·¾ÊËÒÑÎ|€b fhhjjnnq1>}š)GWRPP€O€NXyž³œwaE$##%0(+D, €<9.@!/413,*'339B/+EU14D"˜-Y?HNUj’‰XJB]^Ë K=/1.2[\0%–$OANQg‰’oSJBaZÉ [/6165Mm+p“9IAHNSj‰’jQJCoUË>4€699DbR%N’%MDJQ`w˜gNJEn Ì 96??AUlI1VJAHJSg‰’W^NJKfÍH169ABGgD5%NAJQXw’‰oUPBU\Í:<6969::IBBV["ŒWGENSg’‰g>PB^TÎP+696,9:FIENk[\OŒ^EJNXj‰˜wXNNFmHÏ";,:9,69:HHBE[iJJÜt ƒXBJ>g„‰‰jXNMGo)ÏK,,6:,9:FFHFAVnE8€¦ƒ`‚\BNSj‰’‰jXNJHlÐ3B, 19:FFJMDIf1 €¼W^‚!U@NSu‰’gSNHIdÐU+,,//29AFHP]JGl€Èq6©€ &TBN^’’gXRGVPÐ/I‚, 69AFJ]hXH^€e‚­SBNe‰’‰wgUJA_H@ÑU*€,%(199FEWn„]GisQtzg NENd‰’‰wgUJG`DÒK,€(!,::II]„žrT`%y6M/4 SBNg’’‰wd>EOMÔ&E€(",,9:FJ]žÃ„Zs &dR'&UBNg’’‰rdSDK" Ô;‚(!,,:AFJr¬Ãh^hp?W]5VEEj“’‰wXRCG ,Ô7%"€( ,:9AE]„ѸV_ VE0.FVANjŽ’‰oXJGBaÖ=€"$,19:CMhžÑ’QY.'((>MLCJg”’‰jUJ^MC–‚¨Ò*6""(,29AFR|ÞCKE$//0B>6:J„‰‰gNEcW8B„VÒD =+"(169AF]gaE=?%369A?‚A XgdQRMI 7wÔ'5(169AHF611/5ACFHHMMJJEBCPgr`jD(Ö(K,,9??/(19AFHMMNPVgw“žžgMSgglC>=“΀ÝCG,66/(6?FHKMPPSRVan„€Ã gHM]lZ‚žÓ½€Ý‚!-E",(16AFMMPPVWW]]`YU`r„aRPRd ‚ŽÓ½çHF*6,6CHMNPVW]^^aeeggd\€WXVf56Žð½‚ž€@0'",6AHMPPV]^^e†g f`^WZh  ð½‚žaT?DE62AFKPPW]^eg‚jge^^k%²í½‚ž€a#C)/9HMPPW]`g„ojjggee]n<€í½‚Í€ . 6*)+CMNPW]`€gjorrp€o jhggbqVí½‚Í,54HJPS]^eghjoorƒuqjd€hdla Ó½‚̓ 5BJPP]^eghjopuu‚y v’Ãø„hjfdƽ„Í=BMPRW]dhlppuuyz{}˜í€þöžhff€Ž¼½…Ó€ BDJN^“ÇÄhquuy{‚Ñ‚þö“]o&€Ž¥½†Ê$IEJhÀþð“pxz{€‡˜öƒþÃro<€ŽÙ½†ŠKDSÑ‚þö˜r€€‡ŒÃ…þ‰f]ŽÙ½†›*J?|öƒþã’€‡‰”ã…þ¸go ŽÊ½†°'« >HdŽª¥¥—hg‚{ vnhd`\Nƒµ°š˜€› —pmmpphhmppk€pk‚pS@)CJMPUZ`jpvz€{ t“—¤·›W:H>*« B@EEmªªˆ|ry{8vnnd`ZUFSƒª³® ™‘„phppmpmphpmpphppshB>Dfuf@GPRV]djsyz{{~n“€·°“]DC<¬ G8>Iµµ·µˆp{zvnd`]VRI?M]zˆ—­œmupuupu&pouzhB>)$$fjfuf>OUW]envyz{{|r|˜ªª®·µXV*¬ ZBT®¼·µ·žno}{vne`]VNMLA/9CMPSR]bhnps~6$)DXX€f užX@W]`jnvy€z |‰Ž““––›ªeOA¬ I@pµª¡¡›‘Šƒy~€{"vne``WNMF6;HLOPNMBFENNQQSZZ``X>6)DDfu¯j>W]`jnvyzz€u{€‡Š‰“eB3¬0:p˜€Š€‡u{vpje`WPMF2CCMPPRX^ZPM PSPXUgj4)4DX€fj¯žWS]`jpyyzzohkppsuyyWE!¬ -5g‡{yypsupu€{zvne`WPL6=FHMPPX^^dggn€oru€yx@)4DXXffj¯žDW^`ep€y r]ae]ehkmpsMI¬ 36Sumppmhhedh€{zvj`]VQF4FFMPPX^`€g!jooruyyz{z|W)44DSXffžuW]T^ajrv{hNT€Y]]aee9O ¬8<9eaa_€]!WWTrwzvji^YSG1=CHMPS]`eggjooruyy{~€€z4))DXXf€jW]GBFFdry]INLNNQRWWQ7F­/?1WWTRQLGo}|g]GA<<65?FMMPX]`ggjooruyz~!‡‚W))4DSXŽjD[]W8E:1:@@AEFIILINN9<(­;)@LLII€LFBAG;()2<9909?FMNS]`egjjoouyz~€‚‡D))4DXXDDjga/. &#;94279L4+16AHMPV]`egnoouyy‰‰ŽŽ‰‡€WSWupoojjR … D7#¨JH9dXUH&  !3(1'.6CHNPW^dehoopuyz€‡‰”‘‰‡‚yvrpoojb)H  ƒ #--#7* ž3:G$ $#'&",1(.'"$%)(&1,/6CMNPW^dehoopuy{‰‰‘€” ‘‰‡‡zyvroojb8<,06:4*%&2:94727?B€DIF>B9K%V€€z~(z`]PPOGIIGCBA?:62(26FHNPX^dejoopvy~‡‰‘”‘‡‡yyroond62668898@8=€A ==AEDEDDEDA0FK›4(9-“›“˜““‘ƒle^ZWPNMMFFA:996,16FJPPW^dejnorvy~‡‰‘”‰‡yyroongME€FGNRY[bhnrvu„ƒ€ƒŠk-Uš*SŠƒ‡*njkj`]WWRNMMFCA:99,16FHNPW^dgjjoruy~‡‰€”‘‰‡~yy€oneFHMPVZ`ejsyy„‡Š€‡€Š@@;š4#iЇ‡ƒubS`pjjd`]WVPNMIFC:99,.6CHMPW^`gjjoruyy‡‡‰€‰€~yu€ogeI€FMPVZ`djryzz}r„Їƒ‡‡Š[1Lš w–Ž““ƒ]N]€j#d`]WVRNMIFFA99,,6CHMPW^`ggjjoryy~‡‰‰‰‡€zyuoong^€F HMPWZ`jnvy€{ yo`]u“ŠŠs%cš"k¡€›'ª„M^gjjd``WWRNMIFFA:92,5?HJPPX`ggjjoruyz€‡‡€‰‡‡€zyuroojg]€F HPPW]`jnyz€{zg]|€›˜–›‡2^š Pe“¥ªª‰WE]h€j ``ZWVPMIHFAA96(49FHPPX^eggjopuuy{‡‡‚ ~yyuponggO€F MPRW``jpyz€{ xj^ˆ®¥¡¥®Šh5Kš MEI{±®ˆzhUe€j``ZWVPNJHFAA96,-6CHMPR^e€g€ouuyz€„ ~~yyuroojg_F MPVZ`dnsyz€{ yfWaˆ®®ªƒYT/=š &+Ny¡·±¼Ä—Xh€j``ZWVPNMHFCA996/5AHMPP^^eggj€ouuyzz ~zzyyurpoojfMC€FNPWZ`envy{ ugƒ—¤¯·yEAH#1š 0:›À·±±°ž]Ml€jd`]WWPNMIFCA996,39FH€P^eeggj€ouu†yvur€ojh]F HNPW]`jnvz{t^—µ€·®T+4@š !19±ª¥¥¡¡‰sd€ne`]ZWPPMIHFA:99,,6AHMPPX^eeghn€opuu€y€vurp€ojhWFE€F MNPW`djpvy{€~w`n—€®·¼¥*GKš %HŸ––“Š‘Šu€nj``ZWVPMIHFA:992,17CHPPR^^eegjn€opruurpojdXCBFMNSW`ejpvz{{~xs„—››¡¥¥®H5@š!Hއƒ€{uuyo€n``ZWVPNMIFA:9926,(5CHPPS^^eegjjn‰ong^MF@FHMPWX`ensyz{{~s€‡ŽŽ“–¡S09š((5{yu€pkmmhe€ne``WVPNMIFA:9642,€( 4EPPS]^eeghjn†ond^OF?FEF HMRW]dhnvyz€{uu€y{ƒ‡ŠH1CšD1-&mmkhaeaa_][inne`]WQPMIFAB:8.)"!%9KS[^aeegjjknooje[I6(1(19?AFH€FMMWZdhnyy{{zrhhmk€puyy:1^š-_]][Y]WQYQNW€eB`WVQPMB6(%:C:H0;(112AA6/1(""!08%!!12?FNPSW`ejvyzz{f€_ aeehhkkp,<}š'FTRNN€L€IP[ecWH60$/%(C, €<9-? .3/1*)$118A-)ET04=TI23>*"1?OZagnyzyuYRTTWY]]__e_DW› $QIL€IB>A2"@/! %//*"1'‡?)49%# /KauisTG€N QQTTYYIN%›%ALIG>6)" :*95ª (*$&0.>F€INR& ]""($&E0·A)( ),3>FN:BGž "+Q&  &3%$ 3lŸ ! É  0,'?91Gÿÿ‰Å`"O)H1õ)T!Nô+'*0Eô9;<"CBó tTCCRò KKo"Q+Oò 7\60Q$Y ñ +Z QEfð 28*/Q0\ñ !B!CQ*-8ð @#+QE5ñ :6f0= Ê€’  D!$QQ+OÊz²œCž @6!0QE VËJXoN‘œ W"CX0 _ËK"450-¦š 6//QQ0#3`Ê }%&:"˜-S$0XQ"?^Ë K#E[0%–#6/QX6 >ZÉ N%e+q“8D 0QX0ZWË=TR%O’&5*C_E4e Ì ,2dI1VE /QX>(%^Í B SD5%5!"CXQ6$"3\Í:#%€!;Y"ŒU# /EXQ/%"@TÎD€ !/^W\NŒR"0Q_C"]HÏ"#€JjIJÜt ƒK%4[QQ0"a)ÏG3nG8€¦„`‚F 0QXQ0" jÐ32€$Z0 €¼W^‚!: 7QXE4 $dÐT€"8 _€Èp5©€ &:(EXXE/"#;OÐ/;ƒ !8C( V€œc‚­8,QXQC/$RH@Ñ+V%4B[8 bsPtzh .+QXQC/$ ZDÒD€!!!8[~C2Z%z6L/4 9/XXQC+%/MÔ&8€"!8~¤[Ds &\B'&:/XXQ6+ 3" Ô:"€C’¤C@ip3PU1F0fXQC"#< ,Ô7 8[¹Š'W V5#9A0TXQ6" AaÖ8€$!C~¹f0Y%1M9/WXQ0$@MC”‚¨Ò2€##Z¤~9E2$![QQ/QU7B„UÒD <846$0„ (4+#) 7uÔ'4!"46"NC(Ö(E"$4Cf~~4(/4]B>=“΀ÝCE€!!""'#$6B[€¤ 4!(_Z‚žÓ½€Ý‚!-B""$&&(()%$*C[6#"(c ‚ŽÓ½çHE#%!"$$€(,,//.-&€#($K56Žï½‚›€@/%""$€(,†/ -*(#6g Ÿï½‚›_T>>@%""&((,/‚0/,(([&¯ê½‚›€a#B""&(*/1‚310€/,,"Q=€ê½‚Ï€ . 6+!"&(*€/0€363310€/%SU꽂Ï+("#&(+//03€677€6 2)++,/+A_ Ó½‚σ !""&(+//036„7 3X¤¤Š[)0.cɽ„Ï%!"##"+*0336778€?9_ê€þõ~)/^€Ž»½…Ó€ '!(fÀ¤[)4€7‚?@¹‚þõf"Y&€Ž¥½†Ê$2C¤€þïf167€?€E_õƒþ¤C_<€Ž×½†‰3(¹‚þõ_3€?€EL¤…þQA^Ž×½†›+8ZõƒþÕX:€EHQWÕ…þŠBp ŽÊ½†µ=;~…þ¹?GHHOV‰õ…þ¤Bi€Ê½†ÀDI’†þ Š@KKQUŠþþõƒþïBY8€Æ½†Ý OK’†þ ÕPFKVW¤õtPàþõCDR€þ½†Ý OV~ƒþ×êþþŠ9KQW¤¶k‚þbEb$€Œþ½†Ý€6S~þõt3Æþ¤?EKKŠ¥]‚þ‡S]FŒþ½†€€Vbþ¯Jþ¤?EQE[ÕV0Ê‚þ™b_Z!€‹ï½†•€K Tï€þ®Bþ¤CZZbT™ïÏç‚þõª{†iQ%‹ï½†¥€?AUà€þ ïg%»þ~bbs‡~™Õ…þÓÀª–V'€ŠÝ½‡· MbZÀþõÓçþÀ‡™¾ÊÓ×ÓÓÝàêþç€ÝÉkK"€‰Ý½‡ÀSr{™„þ à¾ÓÝÝ×ÚÚÓÓ€Ï Ó×ÝÝÕ×ÝÝàªO0€‰Ï½†Ê€R…’™ç‚þàÕÝÓÏÊÆÀ»€¯€¶ ®¨®··ÊÊÓ×…F€ˆÏ½†»€EY¦ÀÀÕ€þ ïÝÓÀÀ¯®®¨¯€·»€À »·¨Ÿ››gzÝÈaM!€‡Ï½†¨€RTºÝ××ÝààÏ»®¨¥¨¯ÀÏÝçêêï êïໟ€+3•à¥S_!€†Ï½†Ý€3P¾ÝÕ××Ê·¡Ÿ››Ÿ®À݆ç ààÙ¯›]+4]Êׂ`Z€†õ½†Ý 22WÈ××Ó»Ÿ˜˜–€› ¡®µ®··¶¶··»··®€› H+8T®àÅ]l;€…õ½…À€(2|ÕàÓ®––˜–››–›––—›–›––™•—››Ž@+8R¥ÚÝ¥Vz€…Ͻ…Ï€$B±ßÀ‰–›—š›—›˜›˜–˜ƒ›˜›˜€› Ÿo+0@\©ÆÌØzaE€„Ͻ„Ï€ @fÑÝq3wœ˜›–˜‚–˜›‚˜››˜žk+4Bg·ÆÊÒ¯UY€ƒà€½„Ý€ WI˜ç»J)@‹™€›ƒ˜››˜›€˜›˜››˜–M08H€ÂÀÉÍ×vM€‚à€½ƒÝ€ 7fYÊ×¥B3+Xš…›˜›ƒ˜›˜››–“83@VŸ»ÀÆÆÛ«C$€çw€½“‚·€ X[×Ó¨P834€œ€›†˜––˜––˜˜—‰38F€µ·»ÀÆÎÌK3€€€çw€½“‰·€ vQ¤ÙÏ·]@40M€›„˜‡–•g0Bg®¯¶·ÀÀÄÖo;C€»»ww€½“‰„€Ï€oPÀÓÈÆ€H800wŸ˜˜ˆ–••“•“’R4X›±®®¶·ÀÀÜ‚A€‹iww€½“‰„€Ï%ahÓÏÁÀ¨\B3+H˜™ƒ–€•„“ŽM@–­¨€®µ··Ý”L€]iww€½“‰„z¨¨&L~×ÊÀÀ»‰RB30w›‘„“‚ŒŽŒŒ‰‡Fw´¥¨®µµÕ”J*€]iww€½“‰„zt€F“ÝÄÀ»·±ˆVB3B“ƒ‹‡‰ˆ~Jž¡€¥€¨®¯Ó†E‚ww€½“‰„zt€ 9ž×ÀÀ·¯®ªˆR@0g“Œ†‰ˆ„‚gŸ¡‚¥¨§ÊmSÍ4¬×º»·¯®¨§–g8B‰‚ˆƒ‚€€…w››‚Ÿ¡¥¥·Uc)Fh6   ¿7A§×º·®®¨¨¥§¤w8i‰€‚‹€„›Ÿ£¡TVQSZN€L QV^`cjoiqK®myuh`ZYTRXTWUF/)Dš×¹·®¨¨€¥¡­wR‹€z~€€—…›£S€247B€E _^\W[WURL€®j@:AA@@CDJLEE>;<5…ݵ®¨¥¡Ÿ™gw‚€~~}w€wwtw‹˜ƒ›¡{#"$*/288BX„ˆ‚„„‰€‚O^8¬.IGyyŠŠˆB6970/!Cϵª¨¥¡€Ÿ€›€wx„w tqwwiowwt€•˜›œ˜*#"#%,1489=bŽˆ„€„‚„h>@¬=7y€›••˜“YC9864,)ªÁ¥¥Ÿ„›‹wtwogttqtqotw”˜™›˜®5" #%,3889?Cb€Œ€‰vB3«I;Ž„ˆ„‚pZ798740,) CϤŸ„›˜‹wqƒtkot‚o qooŽ˜˜™¥¯6!€"#$,14889?5Cs•›“•ŒC'¬DHˆˆ„‰„T,0998840,)$‡É…›–qooeiooigioogi€omm}Ž—¸™'!" #$,14889>-›¶€¥Ÿv?(« AQ„˜˜–˜›Z+9€8 73,)$""~É ƒ›–‹qkokgoqkoiiomioomoit„»Mƒ"$%,37889;/C˜¯®¥oW<&« >Geލ¥¥‡C-98 3,)$##b¯±š˜€› •Šokkooggkooi€o mooqoozM:4"#$)0378897f‡˜·›V8G<)« @>BBk¨¨sZC99€83,,$##!(b¨®­ ˜‹„ogoqjojqgokqog€q_=%Beve:#""#$)14789?,{€·µ“ZAB<¬ F69H€¶¯·¶s29€843,$##""&7bs‡¤šktottot&oidpC=%4""epeve%""##%,3478:8CZ•¨¨®·¶WT*¬ [?R®»·¶·›B->9€83,%#""!"(27‚CB109*"4BSS€ev‘S%##$),3789?Z€Ž““––›¨aN@¬2J;o¶¨ŸŸ›†‰bC:9883,%$#"!!"  "*(%*4BBevµp%##$),378:Qtz€€ˆ‰€“aA1¬/8o•Œ€‰+„ˆˆc?:9831)%#""""$(()"&!!"("($40848BS€epµ‘>%&)1479?igiooqtww€VD!¬%,1f„€zwwoqtqP:9843,%#""""&((+//2€36€7#88:48BSSeepµ‘B#')14689CZ_aZagikoqLG¬ 35Qtkoojggae_?98641)%#"""&(*€/0336€7889;>488BMSee‘v>'+.47789CMR€XZZ_aa7N ¬8:7a__]€ZVVRC98643.&&4"$(*,//0336€79‚?844BSSe€p>26@556A7FLMJMMPTVVP6F­.>.VVRTPJFT99476&>>3"&(*//0336778:?!EB>448BMSTpB<446G9/534?@AHHJHMM7;(­9%?JJHH€JA@&66$'1=88#$&(,/0033778:€?‚EB448BSSBB€4,. &$<8/1357@@?%/®#'@FBB@0)('1%&€ "$&),/0336779€?EEHEKEKS8448:>7642 &%#+3 ° #-*)&=M4"$(*,/133€7€?HHOOQQOKE;>M>=764311 … D7#¨JF7aWUH&  !2(1$"$(*,/336778??EHOQQWTQPKEE>:7763304&H  ƒ #,+"4* ž3:F $#*+%+$!#&##.%"$(+,/136779??HKQQ€W(TQOEE?>776331-6<+.482(%%2982617>ACCEGE<@9K!U„yb*&€"" $$%&&%!"$"((+,0336779??EOQQW(QOEE?:776633,%/0/112141855?884@A@AA@A?.EK›(8)“›“•Œ“Œ““b,)&ƒ#"!€""$(+,0136779??EOQQW!QPE??:77633/4&$! "##$$)*23637t€z‚z€‚‰i)Tš%Q‰„„ˆzB)*)$##""#!!€!"#(+/0036779??EHQQ€W QPOE??:77633/-!€" $)035789[„‰„ˆˆ€‰‹?>;š#g‰ˆ„‚€dC(*0*)$##€"!€!"$(*/0036€7??EEKQPOH€?:77633/,!€€"#$)14789:Ct‹‰„‚„ˆ‰\.Lšu–ŽŒ““‚7"**)$‚#!!€!"#(*//006677€?EHH€OHHE€?977630/(€"#),3788973*8d“Œ‰‰‹q$bši‹¡€›¨t(€+$‚#!!€""(*//0036779€?EE€HEE?77633//&"#),47€8=/"Z€›•–›„/]šOa“¥¨¨€4&,++)€#""!!€""((,//016€79?EEƒ?€7630/,#€"#)047€8 70(s®¥¡¥®‰g2IšLBHz°®sbC%,**)#‚"!!"#(,€/136€79‡?€76330/("#$,147€8 7,#6s®®¨‚XR,<š%(Mw¡·°»Æ‡(,*))$ƒ"!""((,//0336€79„?9€766330-!€€"#%,348 7.b‡˜¦·wB@G0š09›À·°°µ›70,,)$ƒ"€€"(,,//0336‰7€63300&‚" #),3488998(‡¶€·®‹R)3@š!.7°¨¥¥ŸŸŒ€U,0,,%ƒ"€ !""((,,//€3€6ƒ7‚6330.#‚€"#$)0378€97*B‡€®·»¥%FKš"G¡––“‹‰“‰d6,,)ƒ"! ""#((,,//3†6€31,+(€"#%)13789:9Ct‹˜››¡¥¥®G+@šGŽˆ‚€€ zttwQ0,,##"! %""#((€,/001ˆ3,,(‚""##%,14799:Bz€ˆŽŽ‹“–ŸQ.9š'%2zwt€oikjgaB,,%€#""!‚"##((*€,/011…3,*# ‚""#$),3779::dt€wz€€‚ˆ‰G+Cš1+%kkig_a__]Z\D1,%##€"!$#!#&),.-//01€3!1-*'%#& !"#$),4799:Cggji€otww€8+^š*]ZZ\XZVPXPMC1,%"#€"= "=A9G/:&&%0:$##"##%)4799:S€] _aaggiio)9}š'ERTMM€J€HF1/%$#&.$(C, €<9,>-5/1-,#11:A-'ET/3>TH13='!!)*4679=NTRRVXZZ]]a]CX› #PHJ€H@9& >0! %/.*!0'‡?(39%"(.79>RF€M PPRRXXHM%›% ?JHF93&;+94ª (*$#*9A€HMT%\ &"$C/·A*&&)09AM8BGž !)P%  % 3$ 1lŸ ! É  0,&>71Gÿÿ‰t8mk@0u´Z ;ëõ‰#+ìþû›,+xÞýÿü 0i×ûÿÿû¥4$ZÆùÿÿÿü¤6@«ôÿÿÿÿûž4#{äþÿÿÿÿû”2=±úÿÿÿÿÿö~-&mÞþÿÿÿÿþã`(D¶÷ÿÿÿÿÿýËM# (†êÿÿÿÿÿÿü¶A   PÌüÿÿÿÿÿÿûª;Q# 9ªõÿÿÿÿÿÿÿûž5 *-& !uéÿÿÿÿÿÿÿÿú—2/¢ˆD)>¿ûÿÿÿÿÿÿÿÿøŒ/fóï͇F!  uîÿÿÿÿÿÿÿÿÿò~- OÞÿýðךJ 7µüÿÿÿÿÿÿÿÿÿíu+ ;³þÿÿþ÷ׂ+ gåþÿÿÿÿÿÿÿÿÿèk'4}õÿÿÿÿþî­I 5­úÿÿÿÿÿÿÿÿÿýÂG" +SÑÿÿÿÿÿÿøÓ2 câÿÿÿÿÿÿÿÿÿÿú£>  A¡ýÿÿÿÿÿÿþð®= 4¬ùÿÿÿÿÿÿÿÿÿÿø‘63tîÿÿÿÿÿÿÿÿùÄ_#  dãÿÿÿÿÿÿÿÿÿÿÿõ|/%I¶ýÿÿÿÿÿÿÿÿýçG+%‘ùÿÿÿÿÿÿÿÿÿÿÿìk) 7mëÿÿÿÿÿÿÿÿÿÿ÷Æj./«ýÿÿÿÿÿÿÿÿÿÿþÕS$ (L¶þÿÿÿÿÿÿÿÿÿÿúÛ…3 8Åÿÿÿÿÿÿÿÿÿÿÿü¶D  9wïÿÿÿÿÿÿÿÿÿÿÿüæ”1 DÓÿÿÿÿÿÿÿÿÿÿÿô›9(M¼üÿÿÿÿÿÿÿÿÿÿÿþñ¢( IÔÿÿÿÿÿÿÿÿÿÿþã5 9sçÿÿÿÿÿÿÿÿÿÿÿÿÿô”+  !FÐÿÿÿÿÿÿÿÿÿÿýÒi6'I§÷ÿÿÿÿÿÿÿÿÿÿÿÿÿó’'    !GÐÿÿÿÿÿÿÿÿÿÿú´I.  4]Äüÿÿÿÿÿÿÿÿÿÿÿÿÿï‚)$IÔÿÿÿÿÿÿÿÿÿÿëˆ7 !?rßÿÿÿÿÿÿÿÿÿÿÿÿÿþð”)XZ !4UÛÿÿÿÿÿÿÿÿÿüÉ\.(HŒíþÿÿÿÿÿÿÿÿÿÿÿÿÿës)$mÑ–‚eV×ÿÿÿÿÿÿÿÿÿù¤G* 0P›òÿÿÿÿÿÿÿÿÿÿÿÿÿ÷©@5ï÷òÄhÍüÿÿÿÿÿÿÿÿõ‹;6  5Y¯öÿÿÿÿÿÿÿÿÿÿÿÿþæ†Qšòÿÿë¥Çøÿÿÿÿÿÿÿÿõ‡7,D$ >dÎýÿÿÿÿÿÿÿÿÿÿÿÿó­ƒyåÿÿüòöþÿÿÿÿÿÿÿÿø–6 4F‹æþÿÿÿÿÿÿÿÿÿÿÿýòãÍöÿÿÿÿÿÿÿÿÿÿÿÿÿÿü³: /M—îÿÿÿÿÿÿÿÿÿÿÿÿÿþúþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ^  7^Ãùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçc "?€ÏöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌK (P|ÐüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÃG"  FV§÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþßa&7^Àùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø¥-?hÌûýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÜ> 4@ŽÚÝéúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñX  *G€¸ðþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø„' +HyÈøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¢/ 2YÃüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý´7%KºüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýË? !G¸ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþâK  !G¸ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï`"  "I»ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø‚) "PÅüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü®1 $\ÒüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÔ= %fÜþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêQ  &pãþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷{' 'näÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý±: $_ÜþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþØ^  !QÍýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ/ D´ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÖ^ ;úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ18¥úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþØh! :±ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø³;<¹üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì‚(QÉýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÙd"  bÖþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÒe  UÍýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÌM  ,\Ñýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷­20uáþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï <©öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÒ? &nÞþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìm NÁùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ”-,‘òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûª<QÄüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü¿P8  {åþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÙn2 (™öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ‘-7¬ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¬:?·ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüºIBµüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû°@ =©üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¯G"  B²ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÁZFRG(  *kÑþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÀ·ÇÁ¢„‚…Š‘‰mA 6=AACBDHW`nrnk‘äþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüýüúøøùùùúûúùôÕm Dš¸º¼¼½½ÃÍÖáãÝÕâùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø¦. %ˆìüüüüüüüýýýþýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü»>@¿ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÅM gäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÉU %…öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÊX .›úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÊX 3¤ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÊX 2šúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÇT /‚÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÈQ -vóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÝo! )mêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãl" &bßþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÖU"  $[×ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¿G  !UÎýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû£= OÃüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿõ…1H°øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûêÛçôùûýþþþÿÿÿÿÿüÐW'6wàþÿÿÿÿÿÿÿÿÿÿþ÷çÙÏÌÓðýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ릃‚¥ºÐãéîôúüþûÞ}; %GëúþÿÿýûùöîØÄŸzomr¶÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþá|^QOT\gs|бÅáÛ“H( 7_§ÈßâÝÆµ·­ŽrdYPKLVnËýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò™N8138>CIOXbo‹†V5  ,14421©ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó$ A¬ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¦*@¬ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù®-B«ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë‚-A¬ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý×g*A¬ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌ^%>«ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÊZ" =­üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÉW @µüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÍZ C¼üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÕc! C¹üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýüüüýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýØm" 8›öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýüûùòäØÐÈÇÄËãíîïòûþÿÿÿÿÿÿÿÿÿÿþûùõöùùûüýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÙq# .lÜýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýúôëàѲ£ŽupbbdpŠ•–—¢Ëäðöø÷÷ööõñêÕ¼®¦§¢¤®½ÉÜêðòöûýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÓh" #J­õÿÿÿÿÿÿÿÿÿÿÿÿþýúôèÝÑ¿¥Ž~q_XRLE@<98:>CHLQXfs‚•–‹Œ„zse^YUTTUX^dy‰”¦·Îâðöùûþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû·L  >xÜþÿÿÿÿÿþýüûúõåÍ®šŽ†zgWKC=71,'#"%(+17?FJLMMLJHD@:51.--.14:@FKPXam|„Œ˜­Ëæïóúýýþÿÿÿÿÿÿÿÿÿÿð†6'N®õýþýýöæÕÇ´¢‘|i[QJC=6.("  #&((('&%"#'+/4:AFLR\h™¨ºÉÓâñúþþÿÿÿÿÿüÑb+ 1g¯ÊÒÏî‡qeZRKC:2+&"    $(,3:CLTbpwƒ™µÑè÷üýþúã’; 9Pdlk`VI@82,'!  "(.4:@GQ_pƒŸ¶Ã͹€D()3774-&  %+4=FOW[XO>*    $*/21+! amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/MacOSX/aMule-Xcode/aMule_Xcode_Prefix.pch0000644000175000017500000000023111772155611027134 0ustar l3onl3on// // Prefix header for all source files of the 'aMule-Xcode' target in the 'aMule-Xcode' project // #ifdef __OBJC__ #import #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Slackware/0000755000175000017500000000000012053222140021442 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Slackware/aMule-AdunanzA-current.SlackBuild0000644000175000017500000001315312052761625027645 0ustar l3onl3on#!/bin/sh # # Mr Hyde revision date 2007/12/28 # # Based on what you can read at # # http://slackwiki.org/Writing_A_SlackBuild_Script # # Thanks also to Carlos Coracho for his kaffeine.SlackBuild # (and his support to SLAMD64 and his job on acer_acpi) # # Set initial variables: CWD=`pwd` if [ "$TMP" = "" ]; then TMP=/tmp fi # The application's name APP=aMule-AdunanzA-current # The version which appears in the application's filename VERSION=2012.1 # And now a little awk script to parse file SVNDATE and to retrieve its corresponding # date in format YYYYMMDD # SCRIPT BEGIN awkscript=' BEGIN { months["Jan"] = "01" months["Feb"] = "02" months["Mar"] = "03" months["Apr"] = "04" months["May"] = "05" months["Jun"] = "06" months["Jul"] = "07" months["Aug"] = "08" months["Sep"] = "09" months["Oct"] = "10" months["Nov"] = "11" months["Dec"] = "12" } { split ($0, date, " ") date[3]=sprintf ("%02d" , date[3] ) date[2]=months[date[2]] print date[6]date[2]date[3] }' # SCRIPT END # # Mr Hyde: Se vuoi installare anche aMule ufficiale # metti qualcosa in PRGPREFIX (e/o PRGSUFFIX) # per differenziare i file da quelli di aMule ufficiale # PRGPREFIX=adu_ PRGPREFIX= PRGSUFFIX=_AdunanzA # PRGSUFFIX= # If the version conflicts with the Slackware package standard # The dash character ("-") is not allowed in the VERSION string # You can set the PKG_VERSION to something else than VERSION PKG_VERSION=$VERSION # the version which appears in the package name. # The target distro DISTRO=${DISTRO:-slamd64} ARCH=${ARCH:-x86_64} # the architecture on which you want to build your package if [ $DISTRO = slackware ]; then PKGARCH=$ARCH else PKGARCH=${ARCH}_${DISTRO} fi if [ $DISTRO = slamd64 ]; then LIBSUFFIX=64 SLKLDFLAGS="-L/usr/lib64" else LIBSUFFIX= SLKLDFLAGS= fi # The installation directory of the package (where its actual directory # structure will be created) PKG=$TMP/package-$APP # to change for 64bit distro LIBSUFFIX= if [ "$ARCH" = "i386" ]; then SLKCFLAGS="-O2 -march=i386 -mtune=i686" elif [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBSUFFIX=64 fi # Delete the leftover directories if they exist (due to a previous build) # and (re)create the packaging directory rm -rf $PKG mkdir -p $TMP $PKG rm -rf $TMP/$APP-$VERSION # Change to the TMP directory cd $TMP || exit 1 # Extract the application source in TMP # Note: if your application comes as a tar.bz2, you need tar -jxvf # tar -zxvf $CWD/$APP-$VERSION.tar.gz || exit 1 # tar -jxvf $CWD/$APP-$VERSION.tar.bz2 || exit 1 tar -jxvf $CWD/$APP.tar.bz2 || exit 1 # Change to the application source directory # cd $APP-$VERSION || exit 1 cd $APP || exit 1 # First digit is the build number, which specifies how many times it has been built. # Second string is the short form of the authors name, typical three initials:w # # Mr Hyde: decido di usare come BUILD la CVSDATE # DEFAULT_PKG_REV=`awk "$awkscript" "SVNDATE"` BUILD=${BUILD:-${DEFAULT_PKG_REV}_mrh} # Apply the patch ONLY IF YOU USE compiz-0.5.0 # (without it does not compile with success) # zcat $CWD/libcompizconfig.diff.gz | patch -p1 || exit # Change ownership and permissions if necessary # This may not be needed in some source tarballs, but it never hurts chown -R root:root . chmod -R u+w,go+r-w,a-s . # Set configure options # If your app is written in C++, you'll also need to add a line for CXXFLAGS CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ LDFLAGS="$SLKLDFLAGS" \ ./autogen.sh ; \ ./configure \ --prefix=/usr \ --libdir=/usr/lib$LIBSUFFIX \ --sysconfdir=/etc \ --localstatedir=/var \ --mandir=/usr/man \ --program-prefix=$PRGPREFIX \ --program-suffix=$PRGSUFFIX \ --enable-amule-daemon \ --enable-amulecmd \ --enable-webserver \ --enable-amule-gui \ --enable-alc \ --enable-alcc \ --enable-geoip \ --build=$ARCH-$DISTRO-linux \ --host=$ARCH-$DISTRO-linux # compile the source, but exit if anything goes wrong make || exit # Install everything into the package directory, but exit if anything goes wrong make install DESTDIR=$PKG || exit # INSTALL DOCUMENTATION # remove usr/share/doc/amule rm -rf usr/share/doc/amule # Create a directory for package documentation mkdir -p $PKG/usr/doc/$APP-$VERSION # Copy documentation to the docs directory and fix permissions cp -a \ ABOUT-NLS LEGGIMI.AdunanzA Changelog.AdunanzA README* \ $PKG/usr/doc/$APP-$VERSION mkdir $PKG/usr/doc/$APP-$VERSION/docs cp -a docs/A* docs/C* docs/ED2K* docs/INSTALL docs/README docs/Rele* docs/TODO docs/*.txt docs/socks4.protocol \ $PKG/usr/doc/$APP-$VERSION/docs find $PKG/usr/doc/$APP-$VERSION -type f -exec chmod 644 {} \; # Create the ./install directory and copy the slack-desc into it mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc # Strip some libraries and binaries ( cd $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) # Compress man pages if they exist if [ -d $PKG/usr/man ]; then ( cd $PKG/usr/man find . -type f -exec gzip -9 {} \; for i in $(find . -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done ) fi # Compress info pages if they exist (and remove the dir file) if [ -d $PKG/usr/info ]; then gzip -9 $PKG/usr/info/*.info rm -f $PKG/usr/info/dir fi # Build the package cd $PKG /sbin/makepkg -l y -c n $TMP/$APP-$PKG_VERSION-$PKGARCH-$BUILD$TAG.tgz # Clean up the extra stuff: if [ "$1" = "--cleanup" ]; then rm -rf $TMP/$PKGNAM-$VERSION rm -rf $PKG fi amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Slackware/slack-desc0000644000175000017500000000115212052761625023414 0ustar l3onl3on# |-----handy-ruler------------------------------------------------------| aMule-AdunanzA: aMule-AdunanzA - aMule-AdunanzA for Fastweb users. aMule-AdunanzA: aMule-AdunanzA: aMule is a peer to peer file sharing client, based on aMule-AdunanzA: the well known eMule. aMule-AdunanzA: Starting with 2.0.0 aMule works on Linux, Mac, *BSD and Windows, aMule-AdunanzA: which makes it the first multi-platform edonkey network client. aMule-AdunanzA: aMule-AdunanzA: aMule-AdunanzA is the modified version of aMule, designed specifically aMule-AdunanzA: for Fastweb users. aMule-AdunanzA: aMule-AdunanzA: amule-adunanza-2012.1+2.3.1~dfsg1.orig/platforms/Slackware/aMule-AdunanzA.SlackBuild0000644000175000017500000001174612052761625026173 0ustar l3onl3on#!/bin/sh # # Mr Hyde revision date 2009/09/20 # # Based on what you can read at # # http://slackwiki.org/Writing_A_SlackBuild_Script # # Thanks also to Carlos Coracho for his kaffeine.SlackBuild # (and his support to SLAMD64 and his job on acer_acpi) # # # SOME EXAMPLE ABOUT HOW TO USE THIS SILLY SCRYPT: # To build on a i686 32bit Slackware system type the following command: # ARCH=i686 DISTRO=slackware ./aMule-AdunanzA.Slackbuild # # To build on a x86_64 64bit Slamd64 system type the following command: # ARCH=x86_64 DISTRO=slamd ./aMule-AdunanzA.Slackbuild # # # Set initial variables: DEFAULT_PKG_BUILD=1 PACKAGER_TAG=mrh CWD=`pwd` if [ "$TMP" = "" ]; then TMP=/tmp fi # The application's name APP=aMuleAdunanzA # The version which appears in the application's filename VERSION=2012.1 # # Mr Hyde: Se vuoi installare anche aMule ufficiale # metti qualcosa in PRGPREFIX (e/o PRGSUFFIX) # per differenziare i file da quelli di aMule ufficiale # PRGPREFIX=adu_ PRGPREFIX= # PRGSUFFIX=adunanza PRGSUFFIX= # If the version conflicts with the Slackware package standard # The dash character ("-") is not allowed in the VERSION string # You can set the PKG_VERSION to something else than VERSION PKG_VERSION=$VERSION # the version which appears in the package name. # The target distro DISTRO=${DISTRO:-slamd64} ARCH=${ARCH:-x86_64} # the architecture on which you want to build your package TAG= if [ $DISTRO = slackware ]; then PKGARCH=$ARCH TAG=${PACKAGER_TAG} LIBSUFFIX= SLKLDFLAGS= else PKGARCH=${ARCH}_${DISTRO} TAG=_${PACKAGER_TAG} LIBSUFFIX=64 SLKLDFLAGS="-L/usr/lib64" fi # The installation directory of the package (where its actual directory # structure will be created) PKG=$TMP/package-$APP # to change for 64bit distro TAG= LIBSUFFIX= if [ "$ARCH" = "i386" ]; then SLKCFLAGS="-O2 -march=i386 -mtune=i686" elif [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBSUFFIX=64 fi # Delete the leftover directories if they exist (due to a previous build) # and (re)create the packaging directory rm -rf $PKG mkdir -p $TMP $PKG rm -rf $TMP/$APP-$VERSION # Change to the TMP directory cd $TMP || exit 1 # Extract the application source in TMP # Note: if your application comes as a tar.bz2, you need tar -jxvf tar -jxvf $CWD/$APP-$VERSION.tar.bz2 || exit 1 # Change to the application source directory cd $APP-$VERSION || exit 1 BUILD=${BUILD:-$DEFAULT_PKG_BUILD} # Change ownership and permissions if necessary # This may not be needed in some source tarballs, but it never hurts chown -R root:root . chmod -R u+w,go+r-w,a-s . # Set configure options # If your app is written in C++, you'll also need to add a line for CXXFLAGS CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ LDFLAGS="$SLKLDFLAGS" \ ./autogen.sh ; \ ./configure \ --prefix=/usr \ --libdir=/usr/lib$LIBSUFFIX \ --sysconfdir=/etc \ --localstatedir=/var \ --mandir=/usr/man \ --docdir=/usr/doc/$APP-$VERSION \ --program-prefix=$PRGPREFIX \ --program-suffix=$PRGSUFFIX \ --enable-amule-daemon \ --enable-amulecmd \ --enable-webserver \ --enable-amule-gui \ --enable-alc \ --enable-alcc \ --enable-geoip \ --build=$ARCH-$DISTRO-linux \ --host=$ARCH-$DISTRO-linux # compile the source, but exit if anything goes wrong make || exit # Install everything into the package directory, but exit if anything goes wrong make install DESTDIR=$PKG || exit # INSTALL DOCUMENTATION # # remove usr/share/doc/amule # rm -rf usr/share/doc/amule-adunanza # Create a directory for package documentation mkdir -p $PKG/usr/doc/$APP-$VERSION # Copy documentation to the docs directory and fix permissions cp -a \ ABOUT-NLS LEGGIMI.AdunanzA Changelog.AdunanzA README* \ $PKG/usr/doc/$APP-$VERSION mkdir $PKG/usr/doc/$APP-$VERSION/docs cp -a docs/A* docs/C* docs/ED2K* docs/INSTALL docs/README docs/Rele* docs/TODO docs/*.txt docs/socks4.protocol \ $PKG/usr/doc/$APP-$VERSION/docs find $PKG/usr/doc/$APP-$VERSION -type f -exec chmod 644 {} \; # Create the ./install directory and copy the slack-desc into it mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc # Strip some libraries and binaries ( cd $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) # Compress man pages if they exist if [ -d $PKG/usr/man ]; then ( cd $PKG/usr/man find . -type f -exec gzip -9 {} \; for i in $(find . -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done ) fi # Compress info pages if they exist (and remove the dir file) if [ -d $PKG/usr/info ]; then gzip -9 $PKG/usr/info/*.info rm -f $PKG/usr/info/dir fi # Build the package cd $PKG /sbin/makepkg -l y -c n $TMP/$APP-$PKG_VERSION-$PKGARCH-$BUILD$TAG.txz # Clean up the extra stuff: if [ "$1" = "--cleanup" ]; then rm -rf $TMP/$PKGNAM-$VERSION rm -rf $PKG fi amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/0000755000175000017500000000000012053222164020771 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/0000755000175000017500000000000012053222165022567 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/SharedSupport/0000755000175000017500000000000012053222165025372 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Frameworks/0000755000175000017500000000000012053222165024707 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Frameworks/libupnp.3.dylib0000755000175000017500000076710411332327377027602 0ustar l3onl3onÊþº¾ î< îD þíúÎ  (…H__TEXT__text__TEXT0Rè0€__picsymbolstub1__TEXTcÀc€ __cstring__TEXTrØrØ__const__TEXT‰Ø%‰ØÐ__DATA __data__DATAü__dyld__DATA’ü’ü__la_symbol_ptr__DATA“ø“~__nl_symbol_ptr__DATA”ü\”üü__common__DATA•XD__bss__DATA¥ 8__LINKEDIT°N< N< HJ¤b@executable_path/../Frameworks/libupnp.3.dylibÈõìøÌ2w_凤Ý7¨ðæÌ”!¨ P((?gÄ?ÅüÆ0™¿¸ Û¦Ø P@executable_path/../Frameworks/libthreadutil.2.dylib H@executable_path/../Frameworks/libixml.2.dylib 4/usr/lib/libgcc_s.1.dylib 4o/usr/lib/libSystem.B.dylib|¦BŸ}ˆ¦|¦}€cx=ŒŒ‚Ä}‰¦| x=ŒŒÈN€ }‹cxKÿÿÌ|¦BŸ}h¦|¦=kk‚}i¦N€ |¦¿¡ÿô|}x8`8Ý8ýà”!ÿ°9,9=”€€½]H¡£ëxHW8!P8`€»¡ÿô|¦N€ |¦¿!ÿä|~xBŸ}Cx|š#xè¦|¹+x|Û3x”!ÿP|ü;x8axH_a/ž88@„]@žt<_<ß“a<“AH“!P8Bb ==_A8<_=8Æaè8Bb,9kb89b‰ãxA@<_9Jb8ax‘aD8Bb@8€8 8àÈALH—éHÔ+žAÔ/ž@ž<_;ÂbHH <_;ÂbT<_=“H“aP“AX“Á`“!l8Bbˆ9kb˜<ßA8<_==_‘a<8Bb=8lAD<_8Æb`9kb@@8Bb 9b|9Jb€‘ahAL<_8ax8Bbœ8€8 8àAT<_9 8Bb¤A\<_8Bb,AdH—/ƒ@ž8axH]Ý}8axH^ 8!°€»!ÿä|¦N€ |¦¿Aÿè|š#x|@&BŸ8€ 8è¦||xA”!ù°;¡@<¥ëxHh‘/ƒAž¼<Ÿ£ëx8„`èHZQ|~y@‚¤ƒãx8€ ¥ëxHha/ƒAžŒ£ëx8€ Hhµ.|{xAtƒãx¥ëx8€Hh1/ƒAž\!@€AD;d„ãx©®É®½t€a@H5!@€AD/ƒÿÿ©®Až$<_ƒÂ‚PÃóxH[ 8a88 ‘~HY1“¾<ŸÅóxƒãx8„ýÔHP™<Ÿƒãx€„‚HHP©/›@0/› 8@<ffbþp`fg|–|p|P`ØP.A‘;`HZI†ãx8 |ÛÖ|dx<8à€c‚L9|ÙÖ|€ PHQ=8!P€a»Aÿè|¦}p N€ |¦¿!ÿä|yxBŸ|š#x|½+x覔!þ<€c€HXm¥ëx„ãxFÓx'Ëx8`98; ÿ˜Kÿøõ€8/€Až 8a<8€8¡8Kÿüµ|}x€a8HOÅ8!0£ëx€»!ÿä|¦N€ |¦¿Aÿè|#xBŸ|Û3x|ú;x覦ëx8”!þà|~x<Ÿ8„[;<8ƒãxHWŤëx…ãxfÛxGÓx8`98; ÿ˜KÿøM€8/€Až Ãóx8€8¡8Kÿü |}x€a8HO8! £ëx€»Aÿè|¦N€ |¦¿!ÿä|{xBŸ|œ#x|º+xè¦8|Ù3x”!þÐ<8cZ;¡L˜=HP%<Ÿ8la@eÛx8„Zè†ãx£ëx°>HW¥ëx„ãxFÓx'Ëx8`98; ÿ˜Kÿ÷‰€8/€Až 8a<8€8¡8KÿûI|}x€a8HNY8!0£ëx€»!ÿä|¦N€ |¦¾áÿÜ|wx|@&BŸ.8è¦|˜#x|Ý3x|û;x}CxA”!þ@8©HP€A<8bœƒ"H>õH(ƒ¾€€]‚Ažÿ¤€a<Äóx8cœH? /ƒ|~x@žÿÔ; ;`€zpøHI‘/›Až)¦¥ëx8`8€,ËxN€!ƒãxHBÉ8!p€»!ÿä|¦N€ |¦¾AÿÈ”!ü|B¦4d€|C¦BŸ8è¦|}x|ž#x<|·+x<€co¼HCÍa@ÃóxHM8ÿ›/ƒÿÿ|zxAžl8` ÄHGi8ÿ˜|yyA‚X/:`@/P:`PA³ëx<_;¡ð<Ÿ8Àl9"N €BN £ëx8„N¸€ iI Y<_‘y;‚N,‘Y …ãx  €I°YHJ%¤ëx#ËxHJ¹<Ÿ#Ëx8„NÈHJ©/“@$<Ÿ£ëx~e›x8„NàHIí#Ëx¤ëxHJ/žAž$<Ÿ£ëxÅóx8„NìHIÅ#Ëx¤ëxHJY<Ÿ#Ëx;p:88„Nø:@HJ=8@8ƒãxADAP˜EAHALHByÄ8p8@aH|ÁÎ|Î8 |Î8@0|Î8@|Î8@P|Î8`|Î<_|Î8l‚ÂoÀ<_°F‚¢o¸6~£«xU"èúU)þ|B¢~IH0b8})[x‘"8HGU~ƒ£x8±#ËxH?i8üqH|€TèúTþ|B¢~@0"8|H9A‚P~ܳx;À;aDƒ¼#Ëx;ÞHHå$Ëx8À|exgÛx9£ëxHF©<``c† HIÝ/ž@žÿÄ#ËxH>í84|x}€C¦8!p€ºAÿÈ|¦N€ |¦¿¡ÿô8€8 |}x”!ÿ°H>I8€`e£ëxH>98!P|cø»¡ÿô0Cÿÿ||x€8cÿÿ|¦N€ |¦¿!ÿä|š#xBŸ||x覔!þp<Ÿ8„JÌHH¥|{yA‚¨<Ÿƒãx8„JÜHH,A‚ø8c8€:HG9,A‚ä8c8€:HG%|}yA‚Ð<Ÿ8½8z8„JäHFIƒãx8€:HFý,A‚¨£èP|dx8a8¥ëxHGá8A8<Ÿ88zÈ8„Jì|Ex|é®HF8`Hp<Ÿƒãx; 8„JôHGå|~yA‚P<Ÿƒãx8„JüHGÍ,A‚(¾PÄóx8z; ¥ëx½ÒHGi›}HÄóx8z; HF‘?߃ãx8žKHG/ƒAžD<Ÿƒãx8„KHGi/ƒAž,<Ÿƒãx8„KHGQ,A‚|dx8z|; HF98žKƒãxHG-/ƒAžD<Ÿƒãx8„KHG/ƒAž,<Ÿƒãx8„KHFý,A‚|dx8zÈ; HEå<Ÿƒãx8„K$HFÕ,A‚4œAž,¼P„ãx8z¥ëx½ÒHFm88`˜H/™8`@ž8`ÿÿ8!€»!ÿä|¦N€ |¦¿Áÿø|~xBŸè¦”!ÿ°<Ÿ8„HàHFQ8/ƒ@ž<ŸÃóx8„HèHF58/ƒ@žt<ŸÃóx8„HôHF8/ƒ@žX<ŸÃóx8„H¨HEý/ƒAž<<ŸÃóx8„HÀHEå8/ƒ@ž$<ŸÃóx8„H°HEÉ8/ƒ@¾8ÿÿ8!P|x€»Áÿø|¦N€ |¦¿¡ÿô8 ¼|ž#x|}x|ƒ#x8€”!ÿ°H@¹Äóx£ëxKÿü¡8£ëxKÿþé8@/ƒÿÿ~@¾8ÿú8@ÿÿ8!P|Cx€»¡ÿô|¦N€ |¦¿Áÿø|~y”!ÿ°A‚ HMi8!PÃóx€»Áÿø|¦H:”8!P€»Áÿø|¦N€ |@&|¦½¡ÿ´|#x|wx|¸+xBŸ8|Ñ3xè¦A}Cx”!ý`}4Kx}OSx>ƒÓgŒÃóx8áÈH@©£ëx88Hïu/ƒAž$ÃóxH@­8`ÿœH$€sgŒH@8`H/˜€A89Áh.-—}Ãsx-|&Tà/”;À;€;! :Á<=¿:A8|&Tà/˜<|&Tà@‚¢tHp]€A8„ãx€b|H<|}yA‚ÿtH=‘ÃóxH| Tà>AžPA/˜AžHè/˜AžP/˜@žØH€á8 | á~#‹x$Ëx~Ƴx~¨«x8ç KÿéÅH¬/œ@ž¤~#‹x$Ëx8 H8/AžHˆ/€Až<~ƒx~ijxH@¥/ƒ@žl~#‹x$Ëx8 €á8~Ƴx~¨«x9 8ç HD€aÈHAQ$Ëx|ex€aÈHAa/ƒ@ž(€á8~#‹x$Ëx8 ~Ƴx~¨«x9 8ç Kÿêá€A8„ãx€b€H:e|}yA‚TÃóxH:5<Ÿ£ëx8„GhH9Å|~yA‚4;@;`ÃóxdÛxH:)|}yA‚CÓxH9ù£ëx8GpH9|zyA‚à8€H9ý/ƒAžÐH:q/ƒAžÄH;%,A‚¸|dx~C“xH@A’@@Ž €¡8~óx~D“x}æ{x8¥ Kÿç‘Hˆ€¡8~óx~D“x}æ{x8¥ Kÿæ HlAŠL€8T >| Tà>@žT€| Tà>Až@~ƒ£xH?ý~D“x|ex~ƒ£xH@ /ƒ@ž €Á8~#‹x~D“x~ųx~§«x8Æ Kÿæa;{KÿþðCÓxH8ùÃóx;ÀH8í;œKÿü\8! a€¹¡ÿ´|¦}r }q }p N€ |¦¿Áÿø|~xBŸè¦”!ÿ H]å/ƒ@ž €/€@žôˆ¸/€AžèHäÜ‘~èH0Q<Ÿ£ëx8„ù¨H0a8€£ëxH0u<¤ëx8 €ca¤H0/ƒAž ÃóxKÿøm8! `€»aÿì|¦N€ |¦¿Aÿè”!þp|B¦td€|C¦BŸ;`8è¦|zx8€8`8 ˜8“a@“a”H2i8ÁH8€aH8  Ãóx8àH8­/ƒÿÿ@¾HH/!8 8`€cH:q8€ÃóxH8¥8€ƒãxH8™ÃóxH/ñƒãxH/é8`ÿ0HÔcÛx“¡DH1õ8ÁD8€aD8  Ãóx8àH89/ƒÿÿ@žH.­8`8 €cH9ý8€8  8Á88àÃóxH88€Ãóx8  8Á<`„ÿÿ8àH7é/ƒÿÿ@¾HH.]8 8`€cH9­8€ÃóxH7á8€ƒãxH7ÕÃóxH/-ƒãxH/%8`ÿ8H“Ú“š8`t}€C¦8!€»Aÿè|¦N€ |¦¿ÿà|¹+xBŸ|xx|Û3xè¦|€#x”!ÿ@|x<Ÿ88„=,;AtX;ÁdCÓxH7ÉCÓxH9!;ƒ=#ËxH9€›`8¡\8Á`œ€{\;œNHeÙÃóxãx;€H7Å<_=_€\€¡`<ß=“AD“!LJWÐ8B=@9k:ä8Æ=0ˆãxA8<_©ëxÃóx‘a<8B=H8àôA@<_8B>hAH<_8B>ˆAPHpa/ƒ@ž €Ád€áh<¿Ãx8X8¥>ØHeÅÃóxH7E8!À€»ÿà|¦N€ |¦¿Aÿè|š#xBŸ|»+x;Àÿ覔!ÿ <Ÿ<¿8„= 8¥=ÌH0¡|}yA‚t8€H1Q/ƒAžXH1Å|~yA‚LH1ù||xÃóxH1Í|dyA‚4/œAž,cÛxH75/ƒ@žCÓx„ãx;ÀH7/ƒAž;Àÿ£ëxH0É8!`Ãóx€»Aÿè|¦N€ |¦¿!ÿä|#xBŸ|¹+x8€è¦”!ÿ8¡8HA|~yA‚€~/ƒAž 8cH2‰||y@¢H-];Àÿ˜Hô€ž €¾;@H7e€ƒãx8€#\®H6Q|{y@¢ƒãx;ÀÿH,›[£ëxH6Ñ;ÃÃóxH2%|zy@¢ƒãx;Àÿ˜H,ñHŒ<¿¦ëxÄóx;Àÿ8¥= H4õƒãxDÓxH6 |}y@‚L;Û8€"ÃóxH5Ñ,A‚›£ˆ/€AžÃóxH6y€;Àÿ˜/€Až;ÀƒãxH,qCÓxKÿÿx;Àÿ8!pÃóx€»!ÿä|¦N€ |¦¾aÿÌ9`BŸ||x|#xè¦|¹+x|×3x”!ÿp|ø;x}Cx?_}5Kx‘a@€CƒÃ€zYd|®}~®|tH2±8a<88Há…/ƒ@¾ì€a8Äóx8c„H#m|tyA‚Ô/AžT>ƒãx8¡@8“;¬Kÿýý,A‚/ƒÿ˜; ÿ@ž°€¡@8“;¬#ËxKÿý|}x€a@H+y/AžLHˆ€”ƒãx8¡@Kÿý±,A‚ /ƒÿ˜@žd€”€¡@#ËxKÿüÉ|}x€a@H+1/@ž@€”Ãx; H6•€”~ã»xH6‰€A8€"‘5H; ÿÿH; ÿ‘€€zYd~®H1y8!£ëx€ºaÿÌ|¦N€ |¦¾AÿÈ|ƒ#xBŸ|ž#x|¸+xè¦8”!ú ?_ƒ:RàXH›/ƒAž¬€/€ @ž$:áHÃóx8€~å»xH=õ/ƒ@žÄH€:áHÃóx8€ ~å»xH=Õ/ƒAžd€aH€L<¿8Át8á„8¥:äHMu/ƒ@ž@;”ƒãxH2¥€„€¡ˆƒãxH3=/ƒÿ˜Až<Ÿƒãx8„:ôH1/ƒÿ˜@žƒãx;€‘H2…Hø€”ÃóxH<á|}xƒãxH2i/AžÔ€ H€]ALaH€AL88€#}+®| ®};tƒ¡H£ëxH2‘,@‚€AL;€‘}®Hˆ8c€L<¿|P;¡|8¥;|€ P¦ëxHL/ƒAž!H€AL;€‘i®HH<_£ëx;‚;„ãxH.q,@‚ a€a|€AH!L8XbI®€~˜H-},A‚ /ƒf;€ÿ˜Až;€õ<_;";H胡€/@ž ƒaXcÛxH,A/ƒAžäH,5/ƒAžØH,)|zyA‚ÌH,/ƒAžÀ„ãxH2Í/ƒAž°CÓxH+ý/ƒAž H+ñ;A”H,©|dxCÓxH3}ÃóxeÛx8€8Á8á9\9!lKÿûÕ/ƒ@ž`:ÁP<Ÿ;€~óx8„;$H3=DÓx8a“¡HH3i€€A\~ä»x8`“€¡l|I¦|LxN€!ƒa/›@ž$<¿Ãx8€”Æóx€¥Rè;€Kÿ÷íHÈ€H/„Až(ˆP~óx/€Až<_8€”€bRè|exH€€ž`€~\88¡d8Á`;A„hH]écÛxH1;ƒCÓxH/Ñ<_=_€d€¡`ãx<ß“aD8B8LJRÜ;€=A8<_8Æ;(9k5ð8B;8ˆãx©ëxCÓx‘aÿ€{RðH.||xCÓxH-ùœ€wRìH-í=_€l€¡pœ<ßJRÜ<_=ãx;€8B8L9k5ð8Æÿ>ß;ÁD“¡L81˜8V.ØÃóx8€ÃxD8Á8AHKÿýE/ƒ@¾¸€a8H#|~y@‚ ;€H\dÛxH#5/ƒ@žx;€; Hà/œ@žp“Ú>ß>ÿ;ÁD96.Ø<_81˜Ãóx‘!H=?8B1¤8€D9)1ÀALÃx8Á8‘!PKÿüµ/ƒ@¾(€a8KÿýU/ƒAžüHÑ;À;€; zH\€<<8¡88c1ÈKÿûù/ƒ@¾È€a8Kÿý/ƒAž¸HÍ/ƒ|}xyA;À;€H/œ@žP€<<8¡88c1ÔKÿû¥/ƒ@¾t€a8Kÿü½/ƒAždH9/ƒzAžT;À;€; H¼@²@€aÿ>ß;ÁD88W1˜=?ÃóxAD<_8.Ø8B1è9)1ðHÃxAL<_8€8Á<‘!P8B1øATKÿû9/ƒ@žÿKÿþ¬€a@H½ÃóxHuƒãxHm8!£ëx€aºÁÿØ|¦}p N€ |¦¿!ÿä|}xBŸ|º+x|™#xè¦8;Àÿ””!þ@;l;a|ƒãxH$É£ëxH%åeÛx|dx£ëxHš/ƒ@¾82€Aœ#Ëx;Àÿ˜x€ A88!p|x€|¦N€ |¦¿Aÿè8 BŸ|zx|#xè¦;À8`”!þ€8€“Á8H™8ÿ3/ƒÿÿ||xAžt+¿ÿA ; c½À€88@“Á<;a<“Á@“ÁD˜A=“ÁH/€Až`8€8 8Á88à`„ÿÿH¹/ƒÿÿ@¾8€ƒãxH”ƒãxdÛx8 Hõ/ƒÿÿAž`ƒãx8€€HÁ/ƒÿÿ@¾¬Hx8ƒãx³¡>dÛx8 T>H¹/ƒÿÿ@žÿÈH̓ÃHÅ€/€0AžÿÈ/ž@žÿÀH­8L8 €cHýƒãx8€H1ƒãxH‰8ÿ5HlH}8 8L€cHÍ8€ƒãxHƒãxHY8ÿ2H<ƒãxKÿþ9Tc>/ƒ@ž8€ƒãxHøz8€8`8 H/ƒÿÿ|~x@¾4H 8 8L€cH]8€ƒãxH‘ƒãxHé8ÿ3HÌ<8@88c)@A/ƒ°bFº@¾48€ÃóxHíÃóxHEƒãx8€HÙƒãxH18üqH“Úz 8“š8!€|x€»Aÿè|¦N€ |¦¿aÿì|}xBŸ;Àüq覔!ÿ€?Ÿ€Nt/€@¾X8`;Àÿ˜H¥|{yA‚D¤ëxKÿüé|~y@‚<cÛxKÿÝM|~yA‚8€{8€H1€{H‰€{8€H€{HucÛxH-Hð<ŸeÛx8a8;À8„ìH ñ8€8a8H %<Ÿ8a8€„=ÐH õ<888 €c=ìH A/ƒ@¼$€{8€;Àÿ˜H@8`;Þ`cÃPH™€Nt/€Až/ž'@žÿàH /ž'@\€{8€;ÀüqHi€{HÁ€{8€HU€{H­€{8€HA€{H™€{8€H-€{H…HƒÛ8!€Ãóx€»aÿì|¦N€ |¦¿ÿð|~xBŸè¦8”!þÀ``€ƒ€£;¡@ Ã<£ëxH Å/ƒAžÃóxHÑ8aLH!…Hð;L£ëx8 8Á<„ãx8á8HKÝ/ƒ@ž”€AP+‚ A$8|0pa@‚@p@‚ p@‚$8ô/€8@žXHL<_€LäH<_€LàH <_€LÜ/€AžÿÈ| ¦| xƒãx„ãx¥ëxN€!8Kÿÿ¬88€8/„@€¡¨€Á¬£ëxHY]8€£ëxHõƒãxH ÃóxH Ù8!@€»ÿð|¦N€ |¦½¡ÿ´BŸè¦”!üa‚c‚ƒ‚£“ ~`›x@œ~€£x€€@@œ~ƒx€h@|x@œ}£kxV€þ<_8cVÙ~ˆ8Al;a8ahK|VbþVþAŒU¢þVnÙ~„8èA|8Ahx80€°}70€K0Àx°‚x€|€ah€x€ÁtK0}:0€ °€x °€H°~âxH°`€ °@x °H/ƒÿÿ@ž$H q8h8 €cHÁ8`HKÿÿ €°Â9A‚Ø€8~c›xeÛx8H ±/ƒÿÿ|yx@žH !8h8 €cHqKÿþØ8` Hå|~y@‚ €~Ht“>;¡L<ŸÅóx8„þ”£ëx€@ A>°^Hi<Ÿ£ëx8„øhHy8€£ëxH<¤ëx8 €c:ôH™/ƒAž ÃóxH I#Ëx8€H#ËxH u|XÚ€°B9A‚ }£kxKÿÖ¡|VÚ€°~â9A‚ ~ƒxKÿÖ‰|UÚ€°‚9A‚þ€€€á;À8~ƒ£x8 8ÀhÛx8“Á<“Á@“ÁD“ÁHHý|`y@ýÀ|[€a@›Â0H %€Ap€a€8‚#„Hõ/ƒAžý˜8€~c›xHa~c›xH ¹8€~ƒ£xHM~ƒ£xH ¥8€~ƒxH9~ƒxH ‘8€}£kxH%}£kxH }€aH 5€Al8!ð€“ÂK|¹¡ÿ´|¦N€ |¦¿¡ÿô|ž#x|}x|dx8 )Ãóx”!ÿ°HQ€],=088}<}4]88ž<˜)^,‘>0‘~4‘^8H…/ƒ@ž 8H8!P€»¡ÿô|¦N€ ,M‚ 8cŸHÌ~ã»xdÛxH‰/œAž´8t ä~¤«x8¡$ƒ¾DÓx£ëxHY/ƒ@žÿä.HHA’€$$H €$€€ð@ž“6ƒž$ÃóxKÿþ%/œAž ƒ¼žãx£ëxDÓxHù/ƒAžÿ¬;{›ÀAœÿ4~ã»xH8!€8`€aºÿÐ|¦}p N€ |¦¿ÿð|ž#x|}x;€”!ÿ 8a8Hù/žAžh€^H/‚Až\"4/‰Až4€8‰@œ(€H|CxH“‚HKÿöQ€]8Bÿÿ]Kÿÿ¼€8/€@ž |^xKÿÿ¨|CxH8`8!`€»ÿð|¦N€ |¦¿¡ÿô|}x”!ÿ```€ 88€Kÿÿ1€€8!  €»¡ÿô|¦N€ |@&|¦¿Aÿè;€|š#x|}x-œ;`A”!ÿ`ƒÄ H0Ãóx¤ëxH‰/ƒ@ž-žÜóxH€HÛóx|x.A’ AŽÿÌHAŽ`8a8H­€\4/‚AžL€8‚@œ@/›Až€HHH €H 8ƒãxH;€Kÿôý€Z8BÿÿZ8!pƒãxa€»Aÿè|¦}q }p N€ |¦¿Aÿè|œ#x|{x; ;@”!ÿ ``ƒÄ H`cÛxÄóxH™/ƒ@ž@/Až€HHH €H “^HÃóxKÿôa€\88Bÿÿ\H €HÝóx|x/ž@žÿ 8!`€»Aÿè|¦N€ |¦¿ÿð||x8d|#x”!ÿ°Hÿí|~yA‚„ãx¥ëxH8|é®8!PÃóx€»ÿð|¦N€ |¦¿ÿð|œ#x”!ÿ°``ƒÃ€cÅóxHm|}y@‚ƒãxHž@@œ; ÿÿ8!P£ëx€»ÿð|¦N€ |¦¿ÿð|~x|œ#x”!ÿ°`€c€¾Hñ|}y@‚ƒãxHÁ€€@@œ; ÿÿ8!P£ëx€»ÿð|¦N€ |¦¿ÿð|}x|œ#x”!ÿ°`€€ @A,#„H@@x€C |€ P„@@œ|DxÉ"H€€ƒ |P€ @@HÜ"€}8žHe,@¢ €}8œHQ8ÿ˜,A‚žãx8“Ý}H88!P|x€»ÿð|¦N€ |¦¿Aÿè|Ý3y|š#x|»+x||x”!ÿ A€x€ƒ Al/šAžl/…Ažd|„*Kÿþù|~y@‚X€|€¼|}|½(P|dx|cÚHþ)€|DÓxeÛx|}Hýõ€\<|[\É®H;ÀþH;À8!`Ãóx€»Aÿè|¦N€ |¦¿ÿð||x|ƒ#x|#x”!ÿ°Hù8!P€Ü¤ëx|exƒãx€»ÿð|¦Kÿÿ€ÃKÿþü|¦¿ÿð||x|¾+x”!ÿ°`€C/‚AžP|*‚@| P@œ ÄP8 €||d|ƒòHý=ƒ¼ƒãx¾èP¤ëxKÿýÕ€\8“¼|é®8!P€»ÿð|¦N€ €C8|CxN€ 8@8C CCN€ |¦¿Áÿø|~y”!ÿ°A‚$€~H÷-8@8^ ^^8!P€»Áÿø|¦N€ |¦¿aÿì||x|½+x|›#x”!ÿ Kÿÿ™“¼“|8!`“¼€»aÿì|¦N€ |¦¿aÿì|›#y|¾+x||x”!ÿ @‚KÿÿU; H8|¤+xKÿü¹|}y@‚(/žAž€|dÛxÅóxHûÍ€\¢ñ®“Ü8!`£ëx€»aÿì|¦N€ |¦¿ÿð||x|ƒ#x|#x”!ÿ°Hÿé8!P¤ëx|exƒãx€»ÿð|¦KÿÿL|@&|¦¿aÿì.|»+x;¦ÿÿ;€A”!ÿa8€€A8|J€@ž,<ÿ8@ÿý`ÿÿ|€@@HéÉ€/€"@ž 8`ÿÿH£ëx8!`€»¡ÿô|¦N€ |¦¿aÿì8 Ü|›#x8€|}x;€”!ÿ HðÕ88@“À£ëx´˜]¸Kÿým89=Ð8] 8!`˜  ˜X]Г¼“}@``»aÿì€|¦N€ |¦¿aÿì|~x|›#x; ”!ÿ #€C| ®|tHHé%€^|bé®;½>| è®|t/ƒ@žÿà€^dÛx|bI®ƒ¾£ëxHôÍ€^8ÿÿ,®A‚ €|P8!`|x€»aÿì|¦N€ |¦¿Áÿø8  BŸè¦”!ÿ°<_;ÂtÄóxKÿôµ8/ƒÿÿAž T`8|.8!P|x€»Áÿø|¦N€ |¦¿ÿà|yxBŸ|š#x|¸+x覔!ÿ €C#€€B‚¢JàAžØ|H®|t8^ÿàTB>+‚^A <Äóx8c¤Hò•8/ƒAž8/€Ažp;Ý?“ºH;Þˆ|t8DÿàTB>+‚^A8{¤HòI8/ƒAž8/€@žÿȈ/€@ž œðAž8|ðP9 HX/ž Až /ž @žP8]“ºH8Bˆ|t/€ Ažÿð/€ Ažÿèˆ/€@ž œAžà|P9 H@/ž @ž08“ºœAž¸ˆ9 /€ @žÜ9 8KÿÿÈ/ž 9 AžÀ/ž"@žœ9=“ºHtˆ 9i|t/‚"Ažp/‚\@¾œX@@Lˆ 9iH8T@>+€@ /‚@ž /‚ Až/‚ Až/‚ 8@ž8/€Ažœ}i[x‰à@AœÿŒ8`HŒ|XP9 Kÿÿ<Äóx8c¤HðÅ/ƒAž9 “º8KÿþôWÀ>+€@/ž8@ž8/€Až08“º9 €Z€8`|‘8H8`8!`€»ÿà|¦N€ |¦¿ÿð8€8 Ü|}x;€”!ÿ°Hì¡88@“À£ëx´˜]¸Kÿù989=Ð8] 8!P˜  ›X]м```»ÿð€|¦N€ |¦¾ÿÐ9`|@&BŸ/ ||xè¦|¹+x:àA”!ÿ```‚£H@/ƒ%@ž$ˆ;d|t9>ÿà+‰XA<_U):8Bl| .|| ¦N€ ÌääääÌääääääääääÀääääääääääääääääääääääääääädäää¤äd€ä€ääääääääääää䌴ääääðääää0ää<ädäääh´|ƒ8:Àƒ¹:€;9;AT;Á<€K|X]ƒãxDÓxÅóxKÿú¡/|kx@šd/–@ž0€|kxH4<€\€ ‚@@œ )/—8|I®|ZtAžžÐAžä9`HðÃóxHß‘|}xCÓxHß…9`@žÌHÄ9`:àHÀ€™ƒãx8¡8;9Kÿöù/|kx@š¤€8/€Kÿÿœƒãx8D8¡8KÿöÑ/|kx@š|€8/€AžX€€AH|PH\9`9€;9/  H@€\<€‰@žÿ4€B|H®/€Kÿÿ 9`H/ƒ Až€/ƒ @ž ;AT;Á<ƒãxDÓxƒ¼ÅóxKÿö1/ƒ@ž8€À+‰A¼<_U):8B8| .|| ¦N€ œäp¼ôt€¤~Ì>Ä| P€H@œAœ8@€^ 8|I|Y®~Ì>Ä€^ 88`‘>œ¼|BZHp;¾Ð<Ÿ8¾È8Á8£ëx8„é<ƒKÿñ‘/ƒAž“/ƒAžÿ8HÌ€½8~ „ãx|¼(PKÿØ)“€È/€@ž$€Ô>Ì8@^À| Pœ8`Kÿþð8Ht€^Ô€¤€žÈ|P€ Aœd¢"<Ÿ8~Г¾Ô8„éDKÿðý/ƒAž€Ô€^È|PÔKÿÿ`€¾Ô8~ ¤ëx|½(PKÿב€^œ>È8“¾ÔÀ|BJ^œKÿÿtÃóxƒ¾ÔKÿóm/ƒ@žÿ€ €^̤ëx~¼€¾Ô8~ ||½(P˜Kÿ×58`“¾ÔH¸€¤>Ì8`€^ Ô| P|BJœ^˜H>Љ~X8^Ô€I/‹œ‘^Ì|BR^˜Až$€^+‚At8|0pìA‚dHP€^D/‚ÌAžD/‚0Až<8ÿœ+€c@0€@/€Až$/€Až/€Až/€Až /€@ž88`¼Hè;¾d;@88€£ëx…ãxHHÉá,A‚4#<Ÿ8a88„é4€I A8€ À8´Á´á¸‘¼‘!À‘AÄ8HL/€I@¾d€A888ƒƒXàƒxä/š@œ~Úþp~Û³x/šA@ž<`ÿÿ›@AvÛx8vHÍ9|syA‚4:ó Hä/€f@ž€A8.88€bA’0€/€Až$<_8€€Bö€| ¦| xN€!H<Ÿ8„á\HÇq/ƒ|yxAž¸A’Ø€/€AžÌ€/€Až„<_€˜Ø€¸Ü8À€Bö€| ¦| xN€!HlA’˜~Üþp~ݳxfÛxœÐA@ž –Ø@A¦ëx€/€Až,<_|Å3x#Ëx~ä»x€Bö€| ¦| xN€!H|Å3x~ã»x8€&ËxHÆÑ€à|~xÂþp/€cØBÑ@œ(šãx»ëxH~ã»x8€~ųx&ËxHÆ•|~x/ž@ž0A’ð€/€Ažä<Ÿ~£«x~†£x8 8„á`KÿØ]HÀA’”€/€Ažˆ8 ;¡<<ŸÅóx|».£ëx8„áhHέ<Ÿ£ëx8„Õ(HÏ=£ëxHÏõ¤ëx|ex|c¸PHË…£ëxHÏÝ~†£x|£ò|ƒ¸P~£«x8¥Kÿ×á||x£ëxHϹ|~8cœH~£«x~ä»xÅóx~†£xKÿ×±ž@ž @Ûy@‚þh;À@’H8;Àþ Kÿÿô€/€Až$<_#Ëx€Bö€| ¦| xN€!H #ËxHÄý~c›xH/€b@žH€A888`!8€‚8 8ƒ©/Až~£«x¥ëx~†£xKÿ× @žˆ;Þ|t/€@žü¨~c›x;ÀH$€˜Ø€¸Ü8ÀHÅ9/ƒAžÿ(~c›x;Àþ HÄåH;Àÿ˜8!Ãóx€aºaÿÌ|¦}p N€ |¦¿Aÿè|~y|š#x|¼+x”!÷ Á„A‚0/…Až¬€¥/…Až /„Až€¼/€@žH,/…Až€8 8`ÿ›H@Kÿó%/ƒ@žHÈ€¼;`HÌ/ƒAžÿð/ƒAžÿè/ƒAžÿà8 8`ÿ¼H48~Ü888 8Á„KÿÕÕ,@L|ex888~ KÿËÙ/ƒ@žèÃóxKÿò©/ƒAžP/ƒAžT/ƒAžL/ƒA¾D8`ÿHÄ@‚À/›Až8¼H$|88`ÿ‰´H¤€¼;`H€¼€^è>œ|*€H@@(ƒ¾ì/@ž€¼/€@žÿ8|¢HP¼€^耞̀ CÓx|„|„HÈ…€^ì<8`ÿ.€è/‚|Jè@ž$8`H8ô8`´“¼H8`ÿ›8!`€»Aÿè|¦N€ |¦/…¿AÿèBŸ||x|ž#xè¦|Ý3x|ú;x”!÷ @ž|ƒ#xKÿÛyH|¤+xÃóxKÿ×1;`H;`ƒãx888 ¦ëxKÿÔ=,@\|ex88ÃóxKÿðÅ,@‚(<_>Ä€Bð€‰@@\8`þ8H4/ƒAžÿ>ß>¿>Ÿ>>_>?>=ÿ=ß=¿8Ø;aˆáܑؑ!à‘AäLH(/€s@ž €AL8Lƒ¢£ëxHÇ…HH/€K@ž<Ÿƒãx8 8„ÖøKÿÅ•HÜ/€G@ž0€AL8Lƒ¢;½£ëxHÇ=|ex¤ëxƒãxKÿÿÈ/€b@ž,€ALƒãx8L!L€‚8 L€©Kÿÿ˜/€c@žƒãx8˜Ê´8 Kÿÿ€/€d@ž0€AL<ŸcÛx8„×8L€¢HÅ]cÛxHƵH8/€h@ž@€AL<ŸcÛx8„×8L€¢€ÂHÅ%cÛxHÆ}|exdÛxƒãxKÿÿ/€tAž0/€D@ž¬8`;¸Ê´HÇ1aH8aHH½Å<_8¢×$H$€AL8L€bH½¥<_8¢ÎÀ|½+x€€ã <_=C€Ã8—×,#8BàL9kàh8TÆ:U:9)l|Æ}Z€cÛx“¡@ xH EÓx|dxcÛxKÿøm||y@¢ä#ËxKÿÀÅcÛxHÁá€A8cÛxT6|Ð|AnHÁÅ;¡P8€8££ëxH½‘dÛx£ëxHÁE<Ÿ£ëx8„Ò\HÂ5,A‚|;£8€/£ëxHÀÝ|{yA‚d››£ëxHÁi8/<ß=_8€˜a<8ÆÒ`#Ëx“¡8“@9JÃü8 8à:Kÿù||yA‚#ËxKÿÀH;€ÿ”€!ƒãx€»ÿà|¦N€ |¦¾ÁÿØ|~yBŸ|˜#x|¹+xè¦|×3x|ú;x”!þP}Cx};Kx‘AäA‚ xH½Q€A8cÛxT6|Ð|AnH½5EÓx;P|dxcÛxKÿó•|}y@¢Ì#ËxKÿ»ídÛxƒãxH¼¥<Ÿƒãx8„ͤH½•,A‚œ:ã8€/~ã»xH¼=||yA‚„›¼~ã»xH¼É/˜8/|}x˜AžcÛxH¼­|ixcÛxH :€z<ß=_“¡<’á8|hx8ÆÍÔ9J¿D#Ëx8€8 8àKÿôQ|}yA‚#ËxKÿ»QH; ÿ”€!£ëx€ºáÿÜ|¦N€ |¦¾ÁÿØ|¸+x|@&BŸ/ƒ|Ú3xè¦|ù;x}Cx|œ#xA”!ÿ‘!0Až4/…Až,/†Až$/ˆAž8:ÁD;¡T~ųx¦ëxKÿþ=|~y@‚ð/œ·ëxAž$ƒãx;¡ŒH»™¥ëx·ëx|dxƒãxKÿñù8`ð;Àÿ˜H¶Ù|}yA‚°88€;Àÿ0ìèKÿÆA8`8€8 H¹É/ƒÿÿAž\;Ü|dx;Àÿ0ƒãxKÿÀa/ƒ@ž €}Ü8—(8 H°µ/ƒÿÿ@ž;Àÿ4.ƒãx8€KÿÀEH:á0€ÁD€áH<¿ƒãx~ä»x8¥Á˜KÿèE.|~xA’ ƒãxKÿÿăãx~å»x¤ëx8Á8KÿåU/ƒ@ž¼£ëxKÿ×M/ƒAž /ƒ@ž¤€D£ëx8€8¡<KÿÄI/ƒ@ž “ÚH €<€¼/€@ž;À8.HP€À/€@ž;À8ÿý.H4/€@ž;À€Ä.H/€;À@ž;À8ÿü.H ;Àÿ.“¸~óxKÿ¸ÑA’£ëxKÿÂÉH;Àÿ›8!Ãóx€aºÁÿØ|¦}p N€ | +x|Â3x|ë;x} Cx|…#x|x|Gx}h[x8€KÿýH|¦¾áÿÜ|Ù3xBŸ|ø;x|—#xè¦|º+x||x”!ÿp|> xH¹I€A8ƒãxT6|Ð|AnH¹-EÓx;a`|dxƒãxKÿï|}y@¢\~ã»xKÿ·å„ãxcÛxH¸<ŸcÛx8„É H¹,A‚,;c8€/cÛxH¸5||yA‚›¼cÛxH¸Á/™8/|bx˜AœP:<ß=_+þp~ã»x“a8A<“@“!H‘aD8ÆÉÜ9J»@8€8 8àKÿðQ|}xH”/™ÿý@žD:<ß=_~ã»x8€“a8A<“@8ÆÉè9J»@8 8àKÿð |}xHL/™ÿü; ÿ›@žH:<ß=_~ã»x8€“a8A<“@8ÆÉô9J»@8 8àKÿï½|}x/Až~ã»xKÿ¶¹H; ÿ”€!£ëx€ºáÿÜ|¦N€ |¦¿aÿì/ƒBŸ|œ#x|Ý3x覔!ÿPáØAžä/„AžÜ/…AžÔ8|§+x8¡H88KÿýÕ|~y@¢¸8`;Àÿ˜H²™|{yA‚¤“» 8`8€8 ;Àÿ0Hµ™/ƒÿÿAžp|dxcÛxKÿ¼9/ƒ@žP€{8p8 H¬/ƒÿÿ@žcÛx8€;Àÿ4H0€Á8€á<<¿cÛx8Ø8¥½Kÿä)|~yA‚cÛx8€Kÿ»ñ8a8Kÿµ•“|H;Àÿ›8!°Ãóx€»aÿì|¦N€ |¦¾¡ÿÔ|—#xBŸ|¶+x|Ø3xè¦|ù;x|}x”!þP|> xH¶E€A;^`8£ëxT6|Ð|AnH¶%EÓx;aP|dx£ëxKÿì…||y@¢”:¾P~£«xKÿ´Ù¤ëxcÛxHµ‘<ŸcÛx8„ÆœH¶,A‚`;£8€/£ëxHµ)|{yA‚H››£ëxHµµ8/<ß=_8€˜8ÆÆÌa<8 “¡89J¸<~£«x8àp>tKÿía||y@‚4;~˜€žP€¾TCÓx~ç»x8ÀhÛxKÿê™||yA‚cÛxKÿ¾=~£«xKÿ´1HÀ/™AžHcÛx8€8¾HKÿ¾ñ/ƒ@ž ›™H(ƒ¾L+³@; ³€žH#Ëx¥ëxH°™é®€4/€@ž HDƒžÜ/œÈ@žÿ€8~8ƒ¾0Kÿ³y€¸¤ëx||x8¥H°e€˜ƒãx8„H±ÕvƒžÜ/œÈ@žÿ@;€Kÿÿ8;€ÿ”€!ƒãx€º¡ÿÔ|¦N€ |¦¿Aÿè|{xBŸè¦”!ÿ ?_ˆèd/€@ž<_=?;©èhƒÂÔ4;“ÝÃóx;½H´à|cò;Ã@žÿä<_=?;©èpƒÂÔ0;“ÝÃóx;½H³Ýà|cò;Ã@žÿä<_=?;©èŒƒÂÔ,; “ÝÃóx;½H³©œè|cò;Ã@žÿä<_=?;©è¬ƒÂÔ(;H“ÝÃóx;½H³uœè|cò;Ã@žÿä<_=?;©èôƒÂÔ$;“ÝÃóx;½H³Aœè|cò;Ã@žÿä8˜èd<Qëbþp`…|–|.p}"P/‰ d|ØP@ž/€A˜<_T:8BèhH /‰@ž /€Ax<_T:8Bèp|b.Hh/‰@ž/€AT<_T:8BèŒKÿÿÜ/‰@ž/€A4<_T:8Bè¬Kÿÿ¼/‰@ž/€A<_T:8BèôKÿÿœ8`8!`€»Aÿè|¦N€ |¦¿ÿà|˜#xBŸ8€.è¦8”!ÿ H²¡,A‚h<_;C;€;`D;"æø|âCÓx|p½” |™.ÀÊH±/ƒ@;›à@œÿÐH@œ ;}ÿÿKÿÿ샞ƒÞH<_=?8BÒ$;‰ÂüƒÂÃóxH±™|}xƒãxH±½8}H¬á8ÿ˜|}yA‚0<ŸÅóx†ãx8„à H°£ëxH©Yx£ëxH§88!`|x€»ÿà|¦N€ |¦¿Aÿè9 BŸè¦”!ÿ ?€[Ô¬€/€@žÔ<_=?ƒ¢Ñ <_;ÉåÜ;BÑH@“¾ÿô£ëxH°Ù½ˆ;½“¾ÿü£ëx|tT:|Z.^ÿøH°±½;½ˆ;Þ |t/œ@žÿ´<?¿;½é8cÚœKÿ¯]8}Kÿ¯U£ëxKÿ¯M<_“ “$€BÔ°<8€8cé@“‚H¬m9 ÿ˜/ƒÿÿAž€[Ô¬89 8!`}#Kx€»Aÿè|¦N€ |¦¿ÿð|dxBŸè¦”!ÿ°?Ÿ;ÜÙ„ÃóxKÿ¯é|}y@‚8€ž/„Až(€\Ù„8„ÿÿ| ®/€/@žÃóx8 Kÿ­ñH; 8!P£ëx€»ÿð|¦N€ |¦¿aÿì|{xBŸè¦”!ÿ <_€BÓƒ‚Hx;ÜÃóxH¯a|Câ|}xˆ/€/@žÃóx¥ëxdÛxH¯}/ƒH8ÃóxdÛx¥ëxH¯e/ƒ@ž$|è®|t/€/Až(/€Až /€?Ažƒœ/œ@žÿˆ8`H8`8!`€»aÿì|¦N€ |¦¿¡ÿô|}x;À”!ÿ°H|}ð®|ctH£‰|}ñ®;Þ£ëxH®™žAœÿà8!P8`€»¡ÿô|¦N€ |¦¿aÿì|œ#x|{x”!ÿ H®]8cH©µ|~yA‚€ƒãxH®E8cH©|}y@‚Ãóx;ÀHTdÛxÃóxH­½„ãx£ëxH­±ÃóxKÿÿ=£ëxKÿÿ5Ãóx¤ëxH®•,A‚ |PÃóxÛH¤£ëxH¤H;À8!`Ãóx€»aÿì|¦N€ |¦¿aÿì||x|›#x”!ÿ `ƒ£/Až4£ëxH®%|~yA‚ 8cÛx˜H­m|~|H“Ü8!`£ëx€»aÿì|¦N€ |¦¿aÿì9 ÿÿ9@ÿÿBŸ|#x|¾+x覔!ÿ‘!@‘AD‘!8‘A<€/€Až<Ÿ8„¾KÿÿE8€-||xH¬I|{yA‚ø8 <Ÿƒãx8¡8˜8„¾ 8Á@H«¡€8/€ÿÿ@ž€‘^H8ÿÿH 9kKÿÿ|8!p|x€»aÿì|¦N€ |¦¿Aÿè||y|Ú3xBŸ|¾+x|#xè¦88@”!ÿ€šàºäA‚pH«8cH¦Ù8@ÿ˜|{yA‚X„ãxH«<ŸcÛx8„¼˜Kÿüá/ƒAž <ŸcÛx8„¼ KÿüÉ/ƒa8@žcÛxH¡i88@H/88Aœè8a88@8¡HKÿý¹/ƒÿÿAžЀ¡@€ÁD…èAÀ@ž †ð@A´/…Aœð€áHL/‡Aœ„…8A”@ž †@@Aˆ8A @ž ž@@A1ÿÿ|ýÔáH‘LºØÚÜ|f@|E9<Ÿ1C}"”8z8„¼¤‘:à‘Zä©ëxÊóxH¨ícÛxH …8@ÈH(/‡ÿÿ@ž/ˆÿÿ@ž (A@žž0@@ø|fð|Eé<ŸºØ©ëxÚÜzäZà8z8„¼¤Êóx1ÿÿ|ýÔKÿÿ”/…ÿÿ@ž¸/†ÿÿ@ž°€áHL/‡A@žœ+ˆ@”8AL@ž ž@@A@8@8`“ºà“ÚäzÜZØ<Ÿ8z8„¼Ì§ëxÈóx0Þÿÿ|½ÔH¨ Kÿÿ}Hð}'é<Ÿúà‘ä§ëx‘:Ø‘ZÜ0Ê|©”Èóx8z8„¼¤Êóx©ëxKÿþØcÛxHŸ]8@ 8!€|Cx€»Aÿè|¦N€ |¦¾¡ÿÔ|~xBŸ8`´|˜#xè¦|Ö3x|µ+x”!ÿH¤1|{yA‚@;>d:àÈ#ËxHš¹H¨ƒÜ<_8À!8àƒBÌ„€~€žEÓxKÿ¨Í€¾|}x+…³@$cÛxHž¹€~8cH£Í|{yA‚Ü€¾€ž cÛxH£õ/€^8|®Aœ(W¢8|BÒ€B/‚#Ažx/‚$Až(/‚AžX„ãx#ËxHšQ/ƒ||x@žÿTHl;ÀcÛx“ØH§ñ+ƒ@ÿÐ<ŸcÛx8„º0Kÿùe/ƒAžÿ¸“Ø Kÿÿ°cÛxHxèKÿÿ cÛx~¤«x~ųxÃxKÿûå/ƒÈ|wxAžÿ€cÛxHÑH:àÿ˜8!p~ã»x€º¡ÿÔ|¦N€ |¦¾ÿÐ|Õ3yBŸ|}x|™#xè¦8|£+x”!û€8A‚4€/€Až(<_8€€BÊä€| ¦| xN€!8 ôH<Ÿ8„¸¬H8 ‘|vyA‚$8<_:à;€¼‚‚Êä;`;/€Až£ëxKÿËÕ||x/œ@ž ;`H¸/œAž°/œAž¨/œA¾ ~óxHœQH`8 #ËxDÓx8Á8Kÿ®|ey@L8} DÓxKÿ¤•/ƒ@ž`£ëxKÿËe/ƒ||xAžH/ƒAžP/ƒAžH/ƒA¾@8 HX@‚T/›Až8¼H 8 8H;`H ;A<×€]œž@@€¼/€@žÿTH ‚ð@@œ ~øP×€̀ CÓx~å»x|˜"Øóx|„H¡I€/€Až@€ DÓx~óx~å»x| ¦| xN€!/ƒ@¼8€~óx| ¦| xN€!H|CÓx8€~å»x~ƳxH›í/ƒAœX€¼/€@žþh€œž@žþp€/€AžD<_~óx€BÊä€| ¦| xN€!H,8 ô8ô´H ~óxHš©8 ôH~óxHš™8 È8!€|£+x€ºÿÐ|¦N€ |¦¿¡ÿô|~xBŸè¦”!ÿ°<_;¢ÜÌ£ëxH Ñ€/€Až<~$€K8BÿÿK>$€ /€A8~Kÿ£UÃóxKÿ£M€~$Hš8!P£ëx€»¡ÿô|¦H ”|¦¿ÿðBŸè¦”!ÿ°<_ƒÂÇ´€/€@žX<?¿?Ÿ8cͤ;½Ü ;œÜHKÿ¢å£ëxKÿÿ-ƒãxH 8€8 (£ëxHŸ­ƒãxH %ƒãxHŸ½88!P€»ÿð|¦N€ |¦¿!ÿä|}xBŸ|š#x|»+xè¦|Ù3x”!ÿp<_;‚ÛˆƒãxKÿþ±/8`AžØ;ÁHÃóxKÿ¢-8a8Kÿ¢%ˆ8@A\/€/Až<Ÿ8a88„²(Kÿ£!/ƒ@ž|¤ëx8a8Kÿ ý/ƒ@žh8`Hža/ƒ|bxa\AžP8?¿DÓxeÛxÃóx;½Û°Kÿ¢£ëx“!XHŸ888 (ƒãxHžU£ëxHŸ 8`H 8a8Kÿ¡•ÃóxKÿ¡€a\H˜Í8`ÿ˜8!€»!ÿä|¦N€ |¦¾áÿÜ|˜#x;ÀBŸ|}x覔!ÿ0“Ø88H¡E/ƒÿÿAžt @T&/‚@@ž8 H8`€‚@žH“Ø <Ÿ£ëx8„³°H—ý/ƒ1#ÿÿ| AžH—¥!hAl8£ëx€AX8€.:ø‘8‘XXH¢5,A‚h<_;C;€;`D;"×|âCÓx|p½” |™.ÀÊH ™/ƒ@;œØ@ÿÐH@œ ;}ÿÿKÿÿ샞ƒÞH<_=?8BÂH;‰³ ƒÂÃóx;`ÿ˜H¡)|}xƒãxH¡½8}Hœq|}yA‚0<ŸÅóx†ãx;`8„³0HŸ‘£ëxH˜éw£ëxH—8xH˜UH•ñH;`ÿÿ8!ÐcÛx€ºáÿÜ|¦N€ |¦¾aÿÌ;ÀBŸ|vx|›#xè¦|¸+x”!þ;»;AX;!h“ÁH“Á¸“Á¼“ÁÀ“ÁÄCÓxKÿŸ=#ËxKÿŸ5€{\€›`8¡L8ÁP“ÁŒKÿÍ!€}8cH›•||yA‚ø€½€H›Á€8TƒãxÜ®TH €ƒãxH 5/ƒ@žȈ/€/Až:à;ÀHЃãxKÿðA/ƒAž08#Ëx„ãx¸KÿŸµ/ƒ@ž|€/€Až|HÈ<_:à;ÂØ˜€/€Ažl?¿;½ØÀ£ëxH›¹Äóx8 (8aH› !´£ëx€I8BIH›±€a„ãxHžÅ,@‚(a„!°88@€a¤ˆAx‘!€a|~ &Vµþ/•@žp<:à8c±ôH–ù/ƒaŒAžÔ:à:`: HÐ?¿;Áx€ah€]Ä$Äóx€| ¦| xN€!/ƒ@ž€„/€Ažp€Ah€l|B‰"ÿÿ/‰/@ž<_8‚²H <_8‚² #ËxKÿœ]/ƒ@ž4€]Ä$Äóx€ah€| ¦| xN€!/ƒ@ž$€„/€@ž€ˆ/€Až:à:`H=?8IÊ€/€Ažô€‰Ê#ËxKÿý/ƒ@žà#Ëx„ãxKÿ›Ù/ƒ@žÌH8„ÿÿ#Ëx8 Kÿœ €l/„Až€Ah|B"ˆÿÿ/€/AžÿÔ€/€Až;Áx€ahÄóxKÿû%/ƒ@ž|€„/€Až`€Ah€l|B‰"ÿÿ/‰/@ž<_8‚²H <_8‚² #ËxKÿ›9/ƒ@ž,€ahÄóxKÿúÉ/ƒ@ž €„/€@ž€ˆ/€Ažð:`: !xA|:¸cÛx; ~„£x}%Kx}FSx‘!˜‘AœKÿóé/ƒÈ|~x@žЀ/€@ž;À; H¸€À/€AžT€¼/€Až$<ß=_€L€¡P<_Œ8€8Ʋ~‰£x8B¢ 9J²(8CÓx8àÎAKÿÿÄ|dP±eN€ |¦¿ÿà9%|@&BŸ|»+x8Pè¦||x|š#x;À;ÿÿA”!ÿ <_° ƒ"µô8@EEIEH;Þ|ð®/€.@žØóx~ð@‘¬|ð®¼ò|t/ƒ:Až`/ƒ/AžXT`1@‚ Tb:|BÊ€4p|ÐTþH8€H†e0Cÿÿ|/€@žÿˆ|t/€.Ažÿ€/€-Ažÿx@‘8|ð®/€:@¾,;¾8» |}ÐP|œê;@ÿ”Kÿþa,A‚$]H Úóx;¾£ëxHŒµ|}y@‚ ;@ÿ˜Hü„ãxÅóxHŒÙ/˜ÿÿ8|ñ®Ažx8ž@l|]ˆ|t+€ÿAX<_T :€Bµô})€ 4pA‚<8`¤ëx8» Hˆ½/ƒ@ž8˜ HT88@ ˜[ H`£ëxH‡m,A‚Dc/‹@ž$€ /€@ž€C"€ ™{  £ëxH†±“›“[H8{ ˜ £ëx;@ÿ”H†8!`CÓx€a»ÿà|¦}p N€ |¦¿!ÿä|›#yBŸ|¹+x||xè¦8”!ÿ A‚àˆ|tT`1@‚ =?Tb:)³œ|BJ€4TÇþH8€H„e0Cÿÿ|/€Ažœ<_;ÀƒB³œHdT`1@‚ Tb:|BÒ€4p|ÐTþH8€H„0Cÿÿ|/€@ž$ˆ|t/€+Až/€-Až /€.@ž0;Þ›ð@$|ð®¼ò|t/ƒ:@žÿˆ“™“ÙH;À8!`Ãóx€»!ÿä|¦N€ |¦¿Áÿø|~xBŸè¦T`1”!ÿ°@‚(=?Tb:)²p|BJ€4p|ÐTþH8€HƒQ0Cÿÿ|/€@ž <Äóx8c øHñ8/ƒAž88!P|x€»Áÿø|¦N€ |¦¿ÿð|}x|ž#x”!ÿ°`€cHŽE8;ƒƒãxH‰‰€~T02T8|`PH‰q€~/€Ažp/ƒAžh€…ãx|xH‰‰8 8€8ÀH0€]>8¥|0.| 1.€]>~|F}&J€B|P‘I}k‘i€]>|B2})2€ €]>~|F}&J€B|P‘I}k‘i€]~^|F}fZ€"|P‘+}J‘K=~^}&J}fZ€I$K$€ |P}J‘K €]>|F}&J8Æ88B(9i(‰09I0€‰ âŠ ™ °ë€…AœþÌ8`H8`ÿ˜8!P€»ÿð|¦N€ |¦¿!ÿä|}xBŸ|›#x|¹+xè¦;À”!ÿ ?_H;Þ›ð@P|}ð®ò|ctKÿý5/ƒ@žÿà|ð®8zžd|„tH‹y/ƒ@žÿÈ8›@ƒãxKÿöõ/ƒ@žÿ¬“¹“Ù8!`Ãóx€»!ÿä|¦N€ |¦¿aÿì|½+x8¥|{x|œ#x”!ÿ Kÿû‰,A‚88@8c] H88` 8œ@D|®/€/@ž8|[ˆ/€/@ž(;Ã8½ |{ò|žàPKÿøÁ,A€ ÞH 8@8|~x] °*],]$|{ò|žàP8½Kÿþ‘€|~/€Až€]ˆ/€/@ž 8 œ@,|®/€#@ž 8c8½|ƒàP|{KÿþA8`H88`8!`€»aÿì|¦N€ |¦¿aÿì||y|›#x”!ÿ 8/˜8A‚T/„AžØHŠ]|}xcÛxHŠQ½8}H…¥|~yA‚´cÛxHŠ58¡t|dxcÛxKÿþU/ƒAž H€/„Ažˆ|ƒ#xH‰É|~xH|€tdÛx/€Až@ƒãxH‰é8¡<|dxƒãxKÿþ /ƒ@ž8€?H€õÄóx#ËxH€éƒ¥XÃxH~=~C“x8H~1Äóx#ËxH~%ƒ¢ˆÃxH{y~ƒ£x88H*/ƒ|}xAžcÛx; ÿœHt€a8Äóx…ãx8c„Kÿjý,@¢cÛx; ÿ‘HL|dx~£«xKÿwÙ||yA‚€8/€AžcÛx; ÿ“H “¼8~ã»xHy|vy@¢$cÛx; ÿ›Ht!CÓxHt#ËxHtH88`dHy%|wy@¢0cÛx; ÿ˜Hsñ#ËxHséCÓxHsá~óxHv¹ÃxHü~óxH}‰<Ÿ8£~ã»x8„’lH|8`HHxÍ|~yA‚˜“º“>~¤«x8~“~ ’þ’Þ;¡Ÿ:ÀÿœH{u<Ÿ8£CÓx8„¸Hz€tŸÔHxY~c›x88H&å/ƒ@ž€a8Äóx¥ëx:Àÿ‘8c„Kÿgé|uyA‚ôKÿt‘9à>|}x;a<>?>_HÈ8`HHv]|~yA‚À€\8~¤ëx8B\“ž@“ ’þ“^“>Hzi€],8^<,’~D€,/€@œ‘ý,Åóx8ŒcÛxHmµ8‘õàcÛxHmÉ8€cÛxHmÝ€r dÛx8 Hmí|vyA‚< –@ž(:Àÿ˜H ¤ëx~£«xKÿs |}x/@žÿ8:À€/€@ž,ƒãxHpaCÓxHpY#ËxHs1ÃxHpI~ã»xHpA€tŸÔHvÙ8!°~óx€¹áÿ¼|¦N€ |¦¿ÿà|~xBŸè¦”!ÿ0?¿ƒ8ƒãxHvu€~D88H%A/ƒ@žx€a8€ž€¾ 8c„KÿfI,A‚ €/€Až;^|dxCÓxKÿs!|{yA‚ü;!X$ËxKÿe/ƒ@žè€0€^<‚AžX;¡<<ŸÅóx8„ÿð£ëxHlE<Ÿ£ëx8„óDHlU£ëx8€Hli<¤ëx8 €chHlu#ËxKÿe™HȃãxHuÁ€ž€~%ËxKÿô±|xx#ËxKÿeqƒãxHu½€~D88H$I/ƒ|yx@ž|€a8€ž€¾ 8c„KÿeM|{yA‚$€/€AžCÓxdÛxKÿr),@‚ÃóxKÿñÙ€}8H<€C08B/‚C0@œ“#0/˜ÿ÷@žCÓxdÛxKÿrÝÃóxKÿñƒãxHtý8!Ѐ»ÿà|¦N€ |¦½áÿ¼|txBŸ;À8`è¦|›#x|½+x”!ÿ@|Ø3x|÷;x}Cx: ÿ˜“Á8Hs%||yA‚X“ÜcÛxHw±8cHs |zyA‚(£ëxHw™8cHrñ|yy@¢CÓx: ÿ˜Hm½ƒãxHmµH dÛxCÓxHw¤ëx#ËxHvùÃx~ä»x~ųx8Á8Kÿï‰|uyA‚CÓxHmu#ËxKÿÿ°8`dHr…|xy@¢$CÓx: ÿ˜HmQ#ËxHmI€a8Hp!Kÿÿ„€a8>ßHvñ<Ÿ8£Ãx8„‹DHu}€v›`HsÕ~ƒ£x8?|}x;a@>_>> HÀ8`HHqÉ|~yA‚¼€\8~¤ëx8B\“ž@“^ “>“€8HuÑ€],8^<,’žD€,/€@œ‘ý,Åóx8‘þcÛxHi8’ñlcÛxHi18€cÛxHiE€s›dÛx8 HiU|uyA‚ •€Až ¤ëx~ã»xKÿn|}x/@žÿ@H: ÿ˜€/€@ž,ƒãxHkÑÃxHkÉ€a8Hn¡CÓxHk¹#ËxHk±€v›`HrI8!À~£«x€¹áÿ¼|¦N€ |¦¾AÿÈ|ž#xBŸ|{x|ƒ#xè¦8€8 ”!þ°;¡T8¥ëxKÿ~é/ƒAžH<Ÿ£ëx8„ˆàKÿq /ƒAžcÛxÅóx8€œHH”Ãóx8€8 Kÿ~¥/ƒAžcÛxÅóx8€KÿÿÔ€~€žKÿp|}y@‚cÛxÅóx8€ôKÿÿ°>ƒ“˜¨ƒãxHq…8a@8ÿƒ“”ÃxHl9CÓx8@H /ƒAž £ëxÅóx8€œHIcÛxKÿnH„€a@€T8c„Kÿ\-||xcÛxKÿmå/œAž$€/€Až#Ëx„ãxKÿh…|{y@‚£ëxÅóx8€œHé€w“”H$€A@€B/‚ÿÿAž4€‚@œ(Åóx£ëx8€ôHµcÛx„ãxKÿi%ÃxHä;ALÃóx8€EÓxKÿx-/ƒAžH€aL€P<¿8Á<8¥ƒØKÿ‡Ñ/ƒAž(<ŸCÓx8„ƒèKÿj-8ÿÿ/ƒAž8 <€A@€”/€ÿÿAž€AÿƒÌÃxHiy$Ëx8aÿ|Ù3x8H`iƒ·ˆ$;Á<£ëxHa9CÓxÄóxH/ƒAž£ëx;€ÿœHa9HD£ëx?Ha)€xˆ\H`~ijx8 8Á8cÛxKÿú…||x£ëxHa!/œ@žÄóxCÓxH¥/ƒAž;€ÿœ; ;ÀH¼;¡@;P£ëxHLU£ëx„ãxHKÍ<Ÿ…ãx#Ëx8„g€HbecÛxHc½8cH_|~y@‚;€ÿ˜; HhdÛxHc98`ÿ;!Dƒwƒ¸cÛxH\8a8$ËxH Y/ƒ@žü€AD;XÃx€b˜KÿcÅ|~y@‚€€<8@888` ˜hAh})¦},Kx€¾8HH;£ €c8¾¤ëxKÿò‰€¤ëxad8a8hHU €<€¾8888` | ¦| xN€!HÄ€£D;£ 8Á@8ƒ 8£ëx@Kÿ3e€D¤ëxa88a<ß;ÖtÔÃóxHG!#Ëx88Kÿõí/ƒAžÃóxHG%8`ÿœHt/˜Až/Až /š@¾ ÃóxH /œAž/›Až /—@œ8vtÔHFÝ8`ÿ›H,ÃóxHFÍ#ËxÃx¥ëx†ãxgÛx~è»xIÓxKÿÇÑ8!€€ºÁÿØ|¦N€ |¦¿Aÿè||xBŸ|›#x|½+xè¦8|Ú3x”!ÿ8`ÿŒ<_€Bi´/‚8@žt<_;ÂsÌÃóxHF%ƒãx88Kÿôñ/ƒAžÃóxHF)8`ÿœH@/›Až /@¾ÃóxHF 8`ÿ›H ÃóxHEùƒãxdÛx¥ëxFÓxKÿÌ8!p€»Aÿè|¦N€ |¦¾áÿÜ|zxBŸ|™#x|½+xè¦8|Ü3x”!ÿ€|û;x}Cx<_8`ÿŒ€Bhì/‚8@žœ>ÿ;×sÃóxHEUCÓx88Kÿô!/ƒAžÃóxHEY8`ÿœHh/™Až /@¾ ÃóxH /œAž/›Až /˜@œ8wsHE8`ÿ›H(ÃóxHE CÓx$Ëx¥ëx†ãxgÛxÃxKÿÐ 8!€€ºáÿÜ|¦N€ |¦¿ÿà|zxBŸ|œ#x|»+xè¦8|Ù3x”!ÿ€|ø;x<_€Bgô/‚88ÿŒ@žø?¿;Ýr ÃóxHDaCÓx88Kÿó-/ƒA¾ÃóxHDe8ÿœHÄ/œÿÿAž/œÃóx@/›@¾8}r HD98ÿ›H˜/™Ažÿì8}r HD!8`LHB™8ÿ˜|~yA‚t8 “^dÛx8~ ;¡<“8<ŸÅóx“ž8„ñP£ëxH:<Ÿ£ëx€„kHH:!8€£ëxH:5<¤ëx8 8ctôH:A88!€|x€»ÿà|¦N€ |¦¿aÿì||xBŸ|›#x|½+xè¦88`ÿŒ”!ÿ<_€Bf /‚8@žp<_;Âp¸ÃóxHCƒãx88Kÿñá/ƒA¾ÃóxHC8`ÿœH8<ŸÅóx8„ï<£ëxH8<Ÿ£ëx€„i4H8-8€£ëxH8A<¤ëx8 8cràH8M88!€|x€»!ÿä|¦N€ |¦¿ÿð|}xBŸ|œ#x8`ÿŒè¦8”!ÿ <_€Bd¬/‚8@žd<_;ÂnÄÃóxHA%£ëx88Kÿïñ/ƒA¾ÃóxHA)8`ÿœH0/œ@¾ÃóxHA8`ÿ›HÃóxHA£ëx„ãxKÿÞI8!`€»ÿð|¦N€ |¦¿Aÿè|{xBŸ|š#x|½+xè¦8|Ü3x”!ÿ8`ÿŒ<_€Bcü/‚8@ž|<_;ÂnÃóxH@mcÛx88Kÿï9/ƒA¾ÃóxH@q8`ÿœHH/šAž/Až /œ@¾ÃóxH@I8`ÿ›H ÃóxH@9cÛxDÓx¥ëx†ãxKÿÞ}8!p€»Aÿè|¦N€ |¦¿ÿà|{xBŸ|š#x|¼+xè¦8|Ù3x”!ÿ€|ø;x<_€Bc,/‚88ÿŒ@žü?ß;¾mD£ëxH?™cÛx88Kÿîe/ƒA¾£ëxH?8ÿœHÈ/šAž/œÿÿAž/œA½ £ëxH/™@ž8~mDH?e8ÿ›H8~mDH?U8`LH=Í8ÿ˜|~yA‚t8“~DÓx8~ ;¡<<ŸÅóx“88„숣ëxH5E<Ÿ£ëx€„f€H5U8€£ëxH5i<¤ëx8 8cp,H5u88!€|x€»ÿà|¦N€ |¦¿ÿð|}xBŸ|œ#x8`ÿŒè¦8”!ÿ <_€BaÔ/‚8@žT<_;ÂkìÃóxH>/œÿÿAœ£ëx88Kÿí/ƒAžÃóxH>I8`ÿœH€A8Ãóx“‚”H>18`8!`€»ÿð|¦N€ |¦¿ÿð|}xBŸ|œ#x8`ÿŒè¦8”!ÿ <_€Ba4/‚8@žT<_;ÂkLÃóxH=í/œÿÿAœ£ëx88Kÿìq/ƒAžÃóxH=©8`ÿœH€A8Ãóx“‚H=‘8`8!`€»ÿð|¦N€ |¦¿Aÿè||xBŸ|ž#x|»+xè¦8|Ú3x”!ÿ8`ÿŒ<_€B`”/‚8@žx<_;¢j¬£ëxH=ƒãx88KÿëÑ/ƒA¾£ëxH= 8`ÿœHD/žA;À/›@¾£ëxH<å8`ÿ›H £ëxH<ÕÃóxdÛxEÓxKþóu8`8!p€»Aÿè|¦N€ |¦¿!ÿä||xBŸ|ž#x; ÿŒè¦8”!ÿ€<_€B_È/‚8@žh<_;biàcÛxH<ƒãx88Kÿë /ƒAžcÛx; ÿœHü|¦¿¡ÿôBŸè¦8ÿÿ”!ÿ°+€ÆA0<_T~:;¢n¤|~è./ƒAžH3Ñ88`|é.H8`ÿœ8!P€»¡ÿô|¦N€ |¦¿Aÿè||xBŸè¦8ÿŒ”!ÿ<_€B]d/‚@žÜ??_;Ûg|ÃóxH:%€]\/€Až<ÃóxH9ñƒãxKÿÖA8ÿœ/ƒ@ž ÃóxH9õƒãx88Kÿè/ƒÿœ@¾DÃóxH9¹8ÿœHtƒÝ/žAž€~H2ýÃóxH2õ€a8¤ëx8 8cœH.A€a88cœH.•/ƒ|}x@žÿ¼€a88€8cœH.9ƒãxKÿþ¥8{g|“º]\H9E88!p|x€»Aÿè|¦N€ |¦¿Aÿè||xBŸ;ÀÿŒè¦8”!ÿ<_€B\D/‚8@ž0<_?;¢f\£ëxH8ý€\@/€Až˜£ëx;ÀÿœH8ŃãxKÿ·A|zy@‚ô£ëxH8̓ãx88KÿçY/ƒÿœ@¾£ëxH8‘HÌ£ëxH8…€A8„ãx8 8À8à99 8`ÿÿBtKþ÷A|~x£ëxH8qƒãx88Kÿæý/ƒÿœ@¾£ëx;ÀÿœKÿÿ €A8€b|H4…€A8€b€H4y€A8€bxH3€a88€8cœH,Ý€A8€Ð/€Až8`8€8 8ÀKÿ—]ƒãxKÿý%£ëx“[\@H7Å8!pÃóx€»Aÿè|¦N€ |¦Tc:9 BŸ}H¦|¦ÿ8Ç9 | ¦8Wi€8B€9)/€Až 8BBÿì8ÿš/€ÿš@¾H$/‰È8 ÿÿ@žÿèKÿÿà8`ÔH3=|zy@¢8ybÄH4­8`ÿ˜Hd; “z“š“º“º˜8€8 8zœH)Á8ÿÿ“ºt97i€8@”8ybÄ€XX¤T:I.H4Q8`H8`ÿ›8!p€ºáÿÜ|¦N€ |¦/ƒ¿ÿðBŸ|#x覔!þðAž€/„Ažx;@8€8¡88Á<‡ãxKÿ€™|~y@ ;Àÿ”HT@‚P<Ÿ8 ƒãx8„H”H7€a8¤ëxH1¹|}x€a8H- /Až/f;Àÿ˜Až;Àÿ•H;Àÿ›8!Ãóx€»ÿð|¦N€ |¦½Áÿ¸|ž#xBŸ|{x|Ú3xè¦|ø;x}Cx”!þ@}9Kx|œ#x<_; ÿŒ€BV/‚@¾H/‰Ažß;Ø\ÃóxH.¡€Qè/€A¾Ãóx; ÿˆH0/›Až /™Až/œAžˆ/€@ž8x\; ÿ›H.9H|?¿8Ç9 | ¦8]bÀ8B€9)/€Až 8BBÿì8ÿš/€ÿš@¾H$/‰È8 ÿÿ@žÿèKÿÿà8`ÔH,Y|~y@¢8x\; ÿ˜KÿÿŒ€8]bÀ: ; ;^ „ãx;žœCÓxT:Â.“¾Ð’¾H0Q8“¾|“¾€“¾x“>t’þ8€8 ƒãxH"¥8ÿÿ“¾˜CÓx8žx”Kÿù|}yA‚ƒãx8€H"H8€~x<Ÿ8„>0H(Á/ƒ~|@¾,8€ƒãx; ÿ•H!å€~xH(}€{KÿòI8x\H0€~x<Ÿ8„=øH(}8ž„EÓx~€€~xKÿ$a’¶Qè8x\H,½8!p£ëx€º¡ÿÔ|¦N€ |¦¿ÿð8`ÿŒBŸè¦”!ÿ ?߀OÀ/€@žØ;¡@8a8¤ëxKÿÛi/ƒ@ž €a8Kÿó5¤ëx8aˆ;¡@¡à8 IÁäáè‘ì‘!ð‘Aô£ëxH"I£ëx8||zx€a˜ ÿý|DJ.˜Kÿþ`|H®9)˜ ÿÿ‰(@9kAœÿÌN€ |¦½¡ÿ´9c|ox9£}h¦9à |Š#x9;Áÿh€ÿ¨8| ¦€ã€Ã‚ã ˆJ|@®‰*‰j9JTB@.U)€UkÀ|x|Kx|[x|ñ.9BÿÌ€¡ÿh~à8x|ë08€ÿl‚aÿp9€:}kx€ÿ¨€aÿt‚Aÿxƒ¡ÿ|}k*ƒÿ€ƒaÿ„ƒAÿˆ‚!ÿŒ}`Zƒ!ÿƒÿ”‚Áÿœ‚¡ÿ =k×k‚ÿ¤9k¤xUk8>}gZ|ÀXx|êX8}Jx}J"}WR‚áÿ˜=JèÈ9J·VUJ`>}KR|àPx}iP8})x8@| ¦})š}&J=)$ 9)pÛU)ˆ>}*J}`Hx}BH8|Bx|B|G|I}Hx} 8|Cx|’}k=kõ|9k¯Uk8>}bZ}(Xx|@X8|Cx|ê}J=JGˆ9JÆ*UJ`>}KR|HPx}`P8|Cx|â})=)¨09)FU)ˆ>}*J}hHx}@H8|Cx|Ú|B|I}Hx} 8|Cx|Ò}k=ki9k˜ØUk8>}bZ}(Xx|@X8|Cx|Š}J=J‹E9J÷¯UJ`>}KR|HPx}`P8|Cx|Ê})=)ÿÿ9)[±U)ˆ>}*J}hHx}@H8|Cx|Â|B|I}Hx} 8|Cx|º}k=kk9k"Uk8>}bZ}(Xx|@X8|Cx|²}J=Jý˜9Jq“UJ`>}KR}FPø}`P8|H08|Cx|ª})=)¦y9)CŽU)ˆ>}*J}'Hø}@H8|ÆH8}h88|Cx|¢|B|I}@8|ç8|3x|}k=kö9k%bUk(>}bZ} X8}hx|;x|}J=JÀA9J³@UJH>}KR|@P8}GXx|Cx|})=)&^9)ZQU)p>}*J}`H8}(Px|;x||B|I}@8|GHx|Cx|}k=kÖ/9k]Uk(>}bZ} X8}hx|;x|}J=JD9JSUJH>}KR|@P8}GXx|Cx|})=)Ø¢9)æU)p>}*J}`H8}(Px|;x||B|I}@8|GHx|Cx|}k=k!â9kÍæUk(>}bZ} X8}hx|;x|}J=JÃ79JÖUJH>}KR|@P8}GXx|Cx|})=)ôÕ9) ‡U)p>}*J}`H8}(Px|;x||B|I}@8|GHx|Cx|}k=k©ä9kéUk(>}bZ} X8}fx|;x€áÿ¨|}J=Jüð9J£øUJH>}KR|@P8}HXx|3x|})=)go9)ÙU)p>}*J}`H8|Cx||B|I} x}@x|}k=kÿú9k9BUk >}bZ|@Zx} x|}J=J‡r9JöUJX>}KR}`Rx|@x|})=)m9)a"U)€>}*J}@Jx}`x||B|I} x}@x|}k=k¤¿9kêDUk >}bZ|@Zx} x|}J=JKß9JÏ©UJX>}KR}`Rx|@x|})=)ö»9)K`U)€>}*J}@Jx}`x||B|I} x}@x|}k=k(›9k~ÆUk >}bZ|@Zx} x|}J=Jê¡9J'úUJX>}KR}`Rx|@x|})=)Ôï9)0…U)€>}*J}@Jx}`x||B|I} x}@x|}k=kÙÕ9kÐ9Uk >}bZ|@Zx} x|}J=JæÜ9J™åUJX>}KR}`Rx|@x|})=)¢9)|øU)€>}*J}@Jx}`x||B|I|@S8} x|¥}k*=kô)9k"DUk0>}bZ}`K8|@x{}JÚ=JC+9Jÿ—UJP>}KR}@8}`x~µ})ª=)«”9)#§U)x>}*J} [8}@x½|Bê|I|@S8} x~÷}kº=ke[9kYÃUk0>}bZ}`K8|@x|c}J=J 9JÌ’UJP>}KR}@8}`x9})Ê=)ÿð9)ô}U)x>}*J} [8}@x|„|B"|I|@S8} xZ}kÒ=ko¨9k~OUk0>}bZ}`K8|@x~”}J¢=Jþ-9JæàUJP>}KR}@8}`xœ})â=)£9)CU)x>}*J} [8}@x~Ö|B²|I|@S8} x~R}k’=k÷S9k~‚Uk0>}bZ}`K8} :|è¦|@x‘}JÂ=J½;9Jò5UJP>}KR}@8}`x~s})š=)*Ø9)Ò»U)x>}*J}+[8}KZx~1Z|BŠ|I|BBG€ })‘-€}J‘N~ ñ®9ŒBÿø€¹¡ÿ´|¦N€ |¦¿!ÿäT©8|™#x||x|»+x”!ÿ ``€C|JTD@@€C8BCH€C#Ä@W`~›ð@|@œ;\8Hx/ž;\89 |Z"| ¦@¾8| ¦H|H®| ®9)BÿôƒãxDÓx¹ò;Þ?Kÿõ•H¤ëxƒãx;Þ@;½@Kÿõ}›ð@Aÿè8ÿÁ8€|@ØP}Z"9`|€Ê/‚8B|I¦@¾8| ¦H|X®| Y®9kBÿô8!`€»!ÿä|¦N€ |¦¿¡ÿô8 BŸ|ž#x|}xè¦8„”!ÿ 8a8Kÿô¥€Tî¾+€7  8@  x<ŸÃóx8„;\KÿþqÃóx8 88Kÿþa£ëxÄóx8 Kÿô]9 X8@8})¦|ñ®8BBÿø8!`€»¡ÿô|¦N€ |¦¿¡ÿô8€|}x”!ÿ 8a8Hå€A8<˜!<=@8!``–€aJ@|BÖU+8U)<})Z|BJ= ²|Cxa)Ò|Bþp}ƒP}bI‘}‘€»¡ÿô|¦N€ |¦¿ÿð8  ||x8€”!þ@;¡£ëxHÝ£ëx8€HQ8€8a˜HÅ8a8Kÿó%¤ëx8a88  KÿýIƒãx88Kÿþy8!À€»ÿð|¦N€ |¦¿¡ÿô|}xBŸè¦”!ÿ ?߀Pð/€@ž@8a8KÿÿYˆ88@ÿ€=9+Pè|x A<˜88°IPð€A8KPèH=8KPè€ Pè8!`¡"±=``»¡ÿô€|¦N€ |¦¿ÿðBŸè¦”!ÿ‹ƒˆ ‹£€£ Ã ã‰‰# ‰C ˆC ‰c |ƒ#x<Ÿ8“¡D“H8„/ðA<‘a@HI8!p€»ÿð|¦N€ |¦¾¡ÿÔ|yxBŸè¦”!ÿp>¿€u;ß8a88>8 8VP  "£Bƒbƒ‚°B‘!>Hý/ƒAž`H>ß?Ÿ€Oð/€@ž<~ã»xKÿüµ€AP€TTI°T ²¾TK²¾},cx‘aP}cbx‘THí8OðHATz>H$›è@A›è@žœð@@ 8T>W£„>¡A<8ÿ€³¹WKƾ›Y Ti>}kxa)±Y™y±9€8“Ù``ˆA=‰!< D±AH|Ht})tˆ;ˆA:|tˆ9|FtˆA8|t€Oà|Jt/€@ž =88KOèOà“¢“ÂH=€ Oè8VP9kOè™B³B™ ™" ˜â ˜Â ˜¢ “¢“€è@A<€è@ž€ €ð@A(=@õaJá|~R||k|Ð|@êK€u;U)¾`B0})x°]™=``»Aÿè€|¦N€ €C€‚Až‚@Aœ|8`N€  C ‚@žÿä C ‚@žÿÔˆCˆ‚@žÿĈC ˆ ‚@žÿ´8| ¦ˆC ˆ ‚@AœAÿ 8c8„Bÿä8`N€ 8`ÿÿN€ |¦¾ÿÐ|wxBŸ|#x|õ;xè¦|¹+x|Ô3x”!þ€``€d;;HH  Ý<Ÿ|exÃx8„+(HU8a8Kÿ‰ƒãxKÿ<_~ã»x;Â`ÄóxH |zy@‚¼Äóx~ã»xH |vyA‚<Ÿ8a88„+0KÿQ/ƒ@ž8a8ÃxKÿ=/ƒ@žð<_8a8;Â!˜ÄóxKÿ!/ƒ@žÔÄóxƒãxKÿ /ƒ@žÀ~ã»xH ñ/ƒAž¸~ijxH ¡|~y &@‚Ä€8~ã»x;`H %|dyA‚¸~óxH uHL8€H )H ¥|}yA‚lH Y|~yA‚tH­8¡X|dxÃóxKÿ…Í/ƒAœX€X/€@žL€\€¡`8a8Kÿý/ƒ@ž<Ÿ8a88„+8KÿM/ƒ@ž8a8ÃxKÿ9/ƒ@žì€¡l/…Až€hˆ/€/Až<<_8a8;Â!˜ÄóxKÿ/ƒ@ž´ÄóxƒãxKÿí/ƒ@ž €¡l€h8a8Kÿ/ƒ@žˆ€h€¡lƒãxKÿ/ƒ@žp€8€A<|Dˆÿÿ/€/Až$<Ÿ8a88 8„!˜KÿÍ/ƒ@ž<€8£ëxH I|~y &@‚L;Àƒãx/ž &W½àKÿ%|{xH8;Àÿ˜H;Àÿ•/ž &W½àH;Àÿ”, &8`;`HéCÓxH aƒãxKÿ8a8Kÿ ¸ A‚;@;€HDcÛxHõ|}yA‚ |[êˆÿÿ/€/@ž<_;´H <_;Â!˜ˆ/€/@ž;9ÃóxH±½#ËxH¥½8}H ù||y@‚;Àÿ˜;@,\Óx &HÀdÛxHÄóxƒãxH¥$ËxƒãxH™ÃxHQ;£ƒãxHE½+³@;ÀÿŠ;@,Hl<_Ãx~£«x9"+0€B+0€ UHE„ãx~£«xH9~ã»xH ñ|zy@‚ &;ÀH$HÙDÓx~†£x|exƒãxKÿk)|~y &cÛxHõƒãxHí¸ A‚ CÓxH½8!€Ãóx€ºÿÐ|¦N€ |¦BŸ}h¦=k|¦…‹0à}‰¦N€ |¦BŸ}h¦=k|¦…‹0Ì}‰¦N€ |¦BŸ}h¦=k|¦…‹/ä}‰¦N€ |¦BŸ}h¦=k|¦…‹/À}‰¦N€ |¦BŸ}h¦=k|¦…‹0€}‰¦N€ |¦BŸ}h¦=k|¦…‹/ˆ}‰¦N€ |¦BŸ}h¦=k|¦…‹00}‰¦N€ |¦BŸ}h¦=k|¦…‹/¼}‰¦N€ |¦BŸ}h¦=k|¦…‹/Œ}‰¦N€ |¦BŸ}h¦=k|¦…‹/p}‰¦N€ |¦BŸ}h¦=k|¦…‹/H}‰¦N€ |¦BŸ}h¦=k|¦…‹/8}‰¦N€ |¦BŸ}h¦=k|¦…‹/}‰¦N€ |¦BŸ}h¦=k|¦…‹/¤}‰¦N€ |¦BŸ}h¦=k|¦…‹/€}‰¦N€ |¦BŸ}h¦=k|¦…‹/}‰¦N€ |¦BŸ}h¦=k|¦…‹.ô}‰¦N€ |¦BŸ}h¦=k|¦…‹.8}‰¦N€ |¦BŸ}h¦=k|¦…‹.D}‰¦N€ |¦BŸ}h¦=k|¦…‹.L}‰¦N€ |¦BŸ}h¦=k|¦…‹.}‰¦N€ |¦BŸ}h¦=k|¦…‹-œ}‰¦N€ |¦BŸ}h¦=k|¦…‹.x}‰¦N€ |¦BŸ}h¦=k|¦…‹-Ð}‰¦N€ |¦BŸ}h¦=k|¦…‹.,}‰¦N€ |¦BŸ}h¦=k|¦…‹-¬}‰¦N€ |¦BŸ}h¦=k|¦…‹,Ø}‰¦N€ |¦BŸ}h¦=k|¦…‹,Œ}‰¦N€ |¦BŸ}h¦=k|¦…‹,Ô}‰¦N€ |¦BŸ}h¦=k|¦…‹-0}‰¦N€ |¦BŸ}h¦=k|¦…‹-¤}‰¦N€ |¦BŸ}h¦=k|¦…‹-¸}‰¦N€ |¦BŸ}h¦=k|¦…‹-}‰¦N€ |¦BŸ}h¦=k|¦…‹+Ü}‰¦N€ |¦BŸ}h¦=k|¦…‹+Ä}‰¦N€ |¦BŸ}h¦=k|¦…‹-t}‰¦N€ |¦BŸ}h¦=k|¦…‹+Œ}‰¦N€ |¦BŸ}h¦=k|¦…‹+h}‰¦N€ |¦BŸ}h¦=k|¦…‹,˜}‰¦N€ |¦BŸ}h¦=k|¦…‹+Ø}‰¦N€ |¦BŸ}h¦=k|¦…‹+}‰¦N€ |¦BŸ}h¦=k|¦…‹*È}‰¦N€ |¦BŸ}h¦=k|¦…‹+„}‰¦N€ |¦BŸ}h¦=k|¦…‹+ }‰¦N€ |¦BŸ}h¦=k|¦…‹+<}‰¦N€ |¦BŸ}h¦=k|¦…‹+¼}‰¦N€ |¦BŸ}h¦=k|¦…‹*t}‰¦N€ |¦BŸ}h¦=k|¦…‹*}‰¦N€ |¦BŸ}h¦=k|¦…‹)ø}‰¦N€ |¦BŸ}h¦=k|¦…‹+}‰¦N€ |¦BŸ}h¦=k|¦…‹+\}‰¦N€ |¦BŸ}h¦=k|¦…‹*h}‰¦N€ |¦BŸ}h¦=k|¦…‹*è}‰¦N€ |¦BŸ}h¦=k|¦…‹)Ü}‰¦N€ |¦BŸ}h¦=k|¦…‹)¸}‰¦N€ |¦BŸ}h¦=k|¦…‹*}‰¦N€ |¦BŸ}h¦=k|¦…‹)´}‰¦N€ |¦BŸ}h¦=k|¦…‹*t}‰¦N€ |¦BŸ}h¦=k|¦…‹)$}‰¦N€ |¦BŸ}h¦=k|¦…‹*T}‰¦N€ |¦BŸ}h¦=k|¦…‹)ø}‰¦N€ |¦BŸ}h¦=k|¦…‹)Ü}‰¦N€ |¦BŸ}h¦=k|¦…‹)ø}‰¦N€ |¦BŸ}h¦=k|¦…‹)à}‰¦N€ |¦BŸ}h¦=k|¦…‹(L}‰¦N€ |¦BŸ}h¦=k|¦…‹(T}‰¦N€ |¦BŸ}h¦=k|¦…‹(€}‰¦N€ |¦BŸ}h¦=k|¦…‹)P}‰¦N€ |¦BŸ}h¦=k|¦…‹) }‰¦N€ |¦BŸ}h¦=k|¦…‹(ð}‰¦N€ |¦BŸ}h¦=k|¦…‹(¬}‰¦N€ |¦BŸ}h¦=k|¦…‹(Ü}‰¦N€ |¦BŸ}h¦=k|¦…‹'P}‰¦N€ |¦BŸ}h¦=k|¦…‹(Œ}‰¦N€ |¦BŸ}h¦=k|¦…‹'(}‰¦N€ |¦BŸ}h¦=k|¦…‹( }‰¦N€ |¦BŸ}h¦=k|¦…‹&à}‰¦N€ |¦BŸ}h¦=k|¦…‹'Ô}‰¦N€ |¦BŸ}h¦=k|¦…‹&œ}‰¦N€ |¦BŸ}h¦=k|¦…‹'l}‰¦N€ |¦BŸ}h¦=k|¦…‹&8}‰¦N€ |¦BŸ}h¦=k|¦…‹'(}‰¦N€ |¦BŸ}h¦=k|¦…‹&}‰¦N€ |¦BŸ}h¦=k|¦…‹'d}‰¦N€ |¦BŸ}h¦=k|¦…‹&X}‰¦N€ |¦BŸ}h¦=k|¦…‹%P}‰¦N€ |¦BŸ}h¦=k|¦…‹%$}‰¦N€ |¦BŸ}h¦=k|¦…‹%ü}‰¦N€ |¦BŸ}h¦=k|¦…‹%¨}‰¦N€ |¦BŸ}h¦=k|¦…‹%€}‰¦N€ |¦BŸ}h¦=k|¦…‹%Ä}‰¦N€ |¦BŸ}h¦=k|¦…‹%ð}‰¦N€ |¦BŸ}h¦=k|¦…‹%Ô}‰¦N€ |¦BŸ}h¦=k|¦…‹%œ}‰¦N€ |¦BŸ}h¦=k|¦…‹$„}‰¦N€ |¦BŸ}h¦=k|¦…‹$P}‰¦N€ |¦BŸ}h¦=k|¦…‹% }‰¦N€ |¦BŸ}h¦=k|¦…‹%¸}‰¦N€ |¦BŸ}h¦=k|¦…‹#ì}‰¦N€ |¦BŸ}h¦=k|¦…‹$¼}‰¦N€ |¦BŸ}h¦=k|¦…‹$¤}‰¦N€ |¦BŸ}h¦=k|¦…‹$t}‰¦N€ |¦BŸ}h¦=k|¦…‹$ }‰¦N€ |¦BŸ}h¦=k|¦…‹$¤}‰¦N€ |¦BŸ}h¦=k|¦…‹$0}‰¦N€ |¦BŸ}h¦=k|¦…‹#ì}‰¦N€ |¦BŸ}h¦=k|¦…‹#d}‰¦N€ |¦BŸ}h¦=k|¦…‹"´}‰¦N€ |¦BŸ}h¦=k|¦…‹#T}‰¦N€ |¦BŸ}h¦=k|¦…‹$}‰¦N€ |¦BŸ}h¦=k|¦…‹#(}‰¦N€ |¦BŸ}h¦=k|¦…‹#ì}‰¦N€ |¦BŸ}h¦=k|¦…‹#ˆ}‰¦N€ |¦BŸ}h¦=k|¦…‹"è}‰¦N€ |¦BŸ}h¦=k|¦…‹"¤}‰¦N€ |¦BŸ}h¦=k|¦…‹"È}‰¦N€ |¦BŸ}h¦=k|¦…‹" }‰¦N€ |¦BŸ}h¦=k|¦…‹#}‰¦N€ |¦BŸ}h¦=k|¦…‹"<}‰¦N€ |¦BŸ}h¦=k|¦…‹"è}‰¦N€ |¦BŸ}h¦=k|¦…‹ ô}‰¦N€ |¦BŸ}h¦=k|¦…‹"°}‰¦N€ |¦BŸ}h¦=k|¦…‹ Ü}‰¦N€ |¦BŸ}h¦=k|¦…‹ è}‰¦N€ |¦BŸ}h¦=k|¦…‹ }‰¦N€ |¦BŸ}h¦=k|¦…‹!x}‰¦N€ RsdcDscsscSXcsscssccCACHE-CONTROL: max-age=EXT:LOCATION: redsonicST: USN: ssdp:alivessdp:byebyeQsssdcsdcsscsscsscSXcsscc*HOST: 239.255.255.250:NT: NTS: "ssdp:discover"%s::upnp:rootdeviceupnp:rootdevice%s::%s%imax-age = %d%0M-SEARCH * HTTP/1.1 HOST: %s:%d MAN: "ssdp:discover" MX: %d ST: %s uuid:schemas:deviceuuid:%surn%suuid::urn::service:urn:device:::upnp:rootdevice:all:rootdeviceuuid:deviceTypeUDNserviceserviceType239.255.255.250:1900CONTENT-TYPE: text/xml; charset="utf-8" Invalid ActionAction FailedInvalid Var%dRNsDsSXccsssssEXT: s:Client UPnPError bhttp://schemas.xmlsoap.org/soap/envelope/Body"%surn:schemas-upnp-org:control-1-0 %q%i ; ns = %s-SOAPACTION%sQueryStateVariableXML errorRNsDsSXccsss RNsDsSXccbbbbOut of memory%s:%s%0M-MAN: "http://schemas.xmlsoap.org/soap/envelope/"; ns=01 01-SOAPACTION:EnvelopeQueryStateVariableResponsereturnerrorCodeerrorDescriptionFaultdetailUPnPErrorQsbcNssUccsssSOAPACTION: "urn:schemas-upnp-org:control-1-0#QueryStateVariable" <%s:%sqNssssbscUcbbbbbbbSOAPACTION: "#" ResponseqNssssbscUcbbb 127.0.0.1ShutDownserviceListserviceIdSCPDURLcontrolURLeventSubURLdevicerootURLBaseACCEPTACCEPT-CHARSETACCEPT-ENCODINGACCEPT-LANGUAGEACCEPT-RANGESCACHE-CONTROLCALLBACKCONTENT-ENCODINGCONTENT-LANGUAGECONTENT-LENGTHCONTENT-LOCATIONCONTENT-RANGECONTENT-TYPEDATEEXTHOSTIF-RANGELOCATIONMANMXNTNTSRANGESEQSERVERSIDSOAPACTIONSTTETIMEOUTTRANSFER-ENCODINGUSER-AGENTUSNGETHEADM-POSTM-SEARCHNOTIFYPOSTSUBSCRIBEUNSUBSCRIBE ()<>@,;:\"/[]?={}%ihttp%w/%w%L%c%d . %d %d : %R%c, chunked%x%L%c%c%s %S%w%c%s %S %ihttp%w/%w%L%c%d . %dhttp/%x %s/%s, UPnP/1.0, Portable SDK for UPnP devices/1.6.6 rb0 %xTRANSFER-ENCODING: chunked %zu%lldDATE: %s%s, %02d %s %d %02d:%02d:%02d GMT%sCONNECTION: close shcCONTENT-LENGTH: SERVER: USER-AGENT: ssX-User-Agent: HTTP/%d.%d %d ssc%s%d %s%s

NTcstext/htmlssbsdsdc HTTP/.QsbcCONTENT-TYPE: //QsbcGDCUcRange: bytes=%d-%d RSCBQsbcDCUcQsbcDCUTNcQsbcDCUTKcQsbcDCUTcaudiovideoimageapplicationtextoctet-stream%s/%s,%lld%lldbytes=CONTENT-RANGE: bytes %lld-%lld/%lld CONTENT-RANGE: bytes 0-%lld/%lld trailerswbrtext/xmlindex.html/index.htmlRTGKDstcSXcCcLAST-MODIFIED: RKTDstcSXcCcRNTDstcSXcCcRTDstcSXcCcIbfIbbRTDSXcCcRNTGDstcSXcCc%itext%w/%wxml;/?:@&=+$,{}-_.!~*'()%2x <%s>%s TIMEOUT: Second-%dTIMEOUT: Second-infiniteRDSNXcsscsccSID: ssscsdccSEQ: qsbbCONTENT-TYPE: text/xml CONTENT-LENGTH: %zu NT: upnp:event NTS: upnp:propchange CONTENT-TYPE: text/xml CONTENT-LENGTH: %ld NT: upnp:event NTS: upnp:propchange upnp:event%iSecond-%d%0Second-infiniteqsscUcinfiniteqsscssccTIMEOUT: Second-qsssdscscssccCALLBACK: NT: upnp:event%d%0upnp:propchangedescription.xml.xmlUPNP_E_SUCCESSUPNP_E_INVALID_HANDLEUPNP_E_INVALID_PARAMUPNP_E_OUTOF_HANDLEUPNP_E_OUTOF_CONTEXTUPNP_E_OUTOF_MEMORUPNP_E_INITUPNP_E_BUFFER_TOO_SMALLUPNP_E_INVALID_DESCUPNP_E_INVALID_URLUPNP_E_INVALID_SIDUPNP_E_INVALID_DEVICEUPNP_E_INVALID_SERVICEUPNP_E_BAD_RESPONSEUPNP_E_BAD_REQUESTUPNP_E_INVALID_ACTIONUPNP_E_FINISHUPNP_E_INIT_FAILEDUPNP_E_BAD_HTTPMSGUPNP_E_NETWORK_ERRORUPNP_E_SOCKET_WRITEUPNP_E_SOCKET_READUPNP_E_SOCKET_BINDUPNP_E_SOCKET_CONNECTUPNP_E_OUTOF_SOCKETUPNP_E_LISTENUPNP_E_EVENT_PROTOCOLUPNP_E_SUBSCRIBE_UNACCEPTEDUPNP_E_UNSUBSCRIBE_UNACCEPTEDUPNP_E_NOTIFY_UNACCEPTEDUPNP_E_INTERNAL_ERRORUPNP_E_INVALID_ARGUMENTUPNP_E_OUTOF_BOUNDSUnknown Error e:property%8.8x-%4.4x-%4.4x-%2.2x%2.2x-%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%s:%dhttp://://`SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecInternal Server ErrorNot ImplementedBad GatewayService UnavailableGateway TimeoutHTTP Version Not SupportedBad RequestUnauthorizedPayment RequiredForbiddenNot FoundMethod Not AllowedNot AcceptableProxy Authentication RequiredRequest TimeoutConflictGoneLength RequiredPrecondition FailedRequest Entity Too LargeRequest-URI Too LongUnsupported Media TypeRequested Range Not SatisfiableExpectation FailedMultiple ChoicesMoved PermanentlyFoundSee OtherNot ModifiedUse ProxyTemporary RedirectOKCreatedAcceptedNon-Authoratative InformationNo ContentReset ContentPartial ContentContinueSwitching Protocols`aifaiffaifcaiffaiffaiffasfx-ms-asfasxx-ms-asfaubasicavimsvideobmpbmpdcrx-directordibbmpdirx-directordxrx-directorgifgifhtahtahtmhtmlhtmlhtmljarjava-archivejfifpjpegjpejpegjpegjpegjpgjpegjsx-javascriptkarmidim3umpegurlmidmidimidimidimovquicktimemp2vx-mpeg2mp3mpegmpempegmpegmpegmpgmpegmpvmpegmpv2x-mpeg2pdfpdfpjpjpegpjpegjpegplghtmlplsscplspngpngqtquicktimeramx-pn-realaudiormimidrmmx-pn-realaudiortfrtfshtmlhtmlsmfmidisndbasicsplfuturesplashssmstreamingmediaswfx-shockwave-flashtartartclx-tcltextplaintiftifftifftifftxtplainulwbasicwavwavwaxx-ms-waxwmx-ms-wmwmax-ms-wmawmvx-ms-wmvwvxx-ms-wvxxbmx-xbitmapxmlxmlxslxmlzx-compresszipzipu u8uHuXwpwˆ~~ ~~,~<~L~\~h~|~~  ~´!~Ä~Ô~Ü~à~è"~ô    #$(48$<DXdhlt|ˆ˜¤ Š(Šœ‹ØŒ8Œ”‚0‚8‚@‚H‚TŒ´>€†ÿÿÿœ†ÿÿÿ›†,ÿÿÿš†Dÿÿÿ™†Xÿÿÿ˜†pÿÿÿ—†„ÿÿÿ–†ÿÿÿ•†¨ÿÿÿ”†¼ÿÿÿ“†Ðÿÿÿ’†äÿÿÿ‘†üÿÿÿ‡ÿÿÿއ(ÿÿÿ‡<ÿÿÿŒ‡Tÿÿÿ‹‡dÿÿÿ‰‡xÿÿÿ8‡Œÿÿÿ7‡¤ÿÿÿ6‡¸ÿÿÿ5‡Ìÿÿÿ4‡àÿÿÿ3‡øÿÿÿ2ˆ ÿÿþÔˆÿÿþÓˆ4ÿÿþÒˆPÿÿþшpÿÿüqˆŒÿÿþ ˆ¤ÿÿþˆ¼€àà000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000›(›Àœ@œø X¢ ‘¬‘°¢ ž¨œô¢$rÄ=Ðì$›¢P@@ @@@@@ @(@0@8@@@H@P@X@`@h@p@x@€@ˆ@@˜@ @¨@°@¸@À@È@Ð@Ø@à@è@ð@ø@‘@‘@‘@‘@‘ @‘(@‘0@‘8@‘@@‘H@‘P@‘X@‘`@‘h@‘p@‘t@‘x@‘|@‘€@‘ˆ@‘Œ@‘@‘”@‘˜@‘œ@‘¸@‘À@‘È@‘Ð@‘Ø@‘à@‘è@‘ð@‘ø@’@’@’@’@’ @’(@’0@’8@’@@’H@’P@’X@’`@’h@’p@’x@’€@’ˆ@’@’˜@’ @’¨@’°@’¸@“@“@“ @“@“@“@“@“ @“$@“(@“,@“0@“4@“8@“<@“@@“D@“H@“L@“P@“T@“X@“\@“`@“d@“h@“l@“p@“t@“x@“|@“€@“„@“ˆ@“Œ@“@“”@“˜@“œ@“ @“¤@“¨@“¬@“°@“´@“¸@“¼@“À@“Ä@“È@“Ì@“Ð@“Ô@“Ø@“Ü@“à@“ä@“è@“ì@“ð@“ô@“ø@“ü@”@”@”@” @”@”@”@”@” @”$@”(@”,@”0@”4@”8@”<@”@@”D@”H@”L@”P@”T@”X@”\@”`@”d@”h@”l@”p@”t@”x@”|@”€@”„@”ˆ@”Œ@”@””@”˜@”œ@” @”¤@”¨@”¬@”°@”´@”¸@”¼@”À@”Ä@”È@”Ì@”Ð@”Ô@”Ø@”Ü@”à@”ä@”è@”ì@”ð@”ô@”ø@Ä $ˆ¤`\  |È ¤Ô ü ðÈÜŒŒ€àÐì!SÍh!gÀl!xÍü!ŽÁ„&Ü%ü7IŒHIdaI´wtŠ`d¯PÂJ¤Ùpî:LxAØ#À-ETB`Z0m`†,¤l¹BìÃÛHœëI(¬'äT/\BXXHjh{8ì?¬§;ÀèÚœð*ø)¤#E¨3‘ L‘¤e‘¨r1ƒ$,“ t¨%º" Ñ1Ðè8LþÌ/Ä60dOLkô„-œ“.l§¿44Õ5Tï,ì+¸L)6CPZdnx„—¯ÆÛðû#2K[o€“¨½ÑÚæñü +;MUelsy†ŽŸ®»ÇÝé÷ÿ  4Pm€£ÈÚü  3 F Y n „ œ ´ Ë å þ  * A X k ~  ž ¦ ® ¶ ¿ Ç Þ ò   = [ { › » Á Ê Ù ì ý   ) 3 C U ] n u … ‹ — Ÿ § ¯ · ¿ Ë Ó à é ò û    ghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãä徑ƒ½à˜‰ŠŒäÓ‚âjilÊÇ–¸|ºÆã¨°„x¶´¢²“—©ž{yqopsrnÁÒÀz~ ”ª’›…Ô¼¿gÚÖhmwvÞkÂÙшÍåËÜÌۀЙ}Åut¹·ÃÄŽ•Άœ®Ÿµ¤¥³Ïج­¡‡šÈÝÕ±«£¦¯§»ß×á‹ÉŽ€€€€€€€€€€€€€€€€€€€€€()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef )(?™(MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'ghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäå_UpnpAcceptSubscription_UpnpAcceptSubscriptionExt_UpnpAddToAction_UpnpAddToActionResponse_UpnpAddToPropertySet_UpnpAddVirtualDir_UpnpCancelHttpGet_UpnpCloseHttpGet_UpnpCloseHttpPost_UpnpCreatePropertySet_UpnpDownloadUrlItem_UpnpDownloadXmlDoc_UpnpEnableWebserver_UpnpFinish_UpnpFree_UpnpGetErrorMessage_UpnpGetServerIpAddress_UpnpGetServerPort_UpnpGetServiceVarStatus_UpnpGetServiceVarStatusAsync_UpnpHttpGetProgress_UpnpInit_UpnpIsWebserverEnabled_UpnpMakeAction_UpnpMakeActionResponse_UpnpNotify_UpnpNotifyExt_UpnpOpenHttpGet_UpnpOpenHttpGetEx_UpnpOpenHttpGetProxy_UpnpOpenHttpPost_UpnpReadHttpGet_UpnpRegisterClient_UpnpRegisterRootDevice_UpnpRegisterRootDevice2_UpnpRemoveAllVirtualDirs_UpnpRemoveVirtualDir_UpnpRenewSubscription_UpnpRenewSubscriptionAsync_UpnpResolveURL_UpnpSdkClientRegistered_UpnpSdkDeviceRegistered_UpnpSdkInit_UpnpSearchAsync_UpnpSendAction_UpnpSendActionAsync_UpnpSendActionEx_UpnpSendActionExAsync_UpnpSendAdvertisement_UpnpSetContentLength_UpnpSetMaxContentLength_UpnpSetMaxSubscriptionTimeOut_UpnpSetMaxSubscriptions_UpnpSetVirtualDirCallbacks_UpnpSetWebServerRootDir_UpnpSubscribe_UpnpSubscribeAsync_UpnpThreadDistribution_UpnpUnRegisterClient_UpnpUnRegisterRootDevice_UpnpUnSubscribe_UpnpUnSubscribeAsync_UpnpWriteHttpPost_ListAddTail_ListDelNode_ListDestroy_ListFind_ListHead_ListInit_ListNext_TPAttrInit_TPAttrSetIdleTime_TPAttrSetJobsPerThread_TPAttrSetMaxJobsTotal_TPAttrSetMaxThreads_TPAttrSetMinThreads_TPJobInit_TPJobSetFreeFunction_TPJobSetPriority_ThreadPoolAdd_ThreadPoolAddPersistent_ThreadPoolInit_ThreadPoolShutdown_TimerThreadInit_TimerThreadRemove_TimerThreadSchedule_TimerThreadShutdown__DefaultRuneLocale___error___maskrune___tolower___toupper_accept$UNIX2003_asctime_atoi_bind$UNIX2003_close$UNIX2003_connect$UNIX2003_fclose_fcntl$UNIX2003_fopen_fread_free_freeifaddrs_fseeko_fwrite$UNIX2003_gethostbyname_gethostname_getifaddrs_getsockname$UNIX2003_getsockopt_gettimeofday_gmtime_inet_addr_inet_ntoa_inet_pton_ixmlCloneDOMString_ixmlDocument_createElement_ixmlDocument_createTextNode_ixmlDocument_free_ixmlDocument_getElementsByTagName_ixmlDocument_getElementsByTagNameNS_ixmlElement_free_ixmlElement_getElementsByTagName_ixmlElement_getElementsByTagNameNS_ixmlFreeDOMString_ixmlNodeList_free_ixmlNodeList_item_ixmlNodeList_length_ixmlNode_appendChild_ixmlNode_getChildNodes_ixmlNode_getFirstChild_ixmlNode_getLocalName_ixmlNode_getNamespaceURI_ixmlNode_getNextSibling_ixmlNode_getNodeName_ixmlNode_getNodeType_ixmlNode_getNodeValue_ixmlNode_setNodeValue_ixmlParseBufferEx_ixmlPrintDocument_ixmlPrintNode_listen$UNIX2003_malloc_memcmp_memcpy_memmove_memset_pthread_mutex_destroy_pthread_mutex_init_pthread_mutex_lock_pthread_mutex_unlock_pthread_rwlock_destroy$UNIX2003_pthread_rwlock_init$UNIX2003_pthread_rwlock_rdlock$UNIX2003_pthread_rwlock_unlock$UNIX2003_pthread_rwlock_wrlock$UNIX2003_rand_realloc_recv$UNIX2003_recvfrom$UNIX2003_select$UNIX2003_send$UNIX2003_sendto$UNIX2003_setsockopt_shutdown_sleep$UNIX2003_snprintf$LDBL128_socket_sprintf$LDBL128_srand_sscanf$LDBL128_stat_strcasecmp_strcat_strchr_strcmp_strcpy_strdup_strerror_r_strlen_strncasecmp_strncmp_strncpy_strrchr_strstr_strtol_time_uname_usleep$UNIX2003single module__mh_dylib_headerdyld_stub_binding_helpercfm_stub_binding_helper__dyld_func_lookup_NewRequestHandler_free_ssdp_event_handler_data_ssdp_event_handler_thread_send_error_response_check_soap_body_check_soap_action_header_get_device_info_dom_cmp_name_dom_find_node_dom_find_deep_node_get_node_value_soap_request_and_response_get_response_value_free_handle_request_arg_get_port_handle_request_RunMiniServer_sock_read_write_httpmsg_compare_httpheader_free_scanner_get_token_vfmatch_match_alias_release_get_file_info_GeneratePropertySet_free_notify_struct_respond_ok_genaNotifyThread_ScheduleGenaAutoRenew_gena_unsubscribe_gena_subscribe_GenaAutoRenewSubscription_addToAction_makeAction_Encode_MD5Transform_Soap_Invalid_Action_Soap_Action_Failed_Soap_Invalid_Var_end_body.6404_start_body.6403_Http_Method_Table_Http5xxStr_Http4xxStr_Http3xxStr_Http2xxStr_Http1xxStr_gMediaTypes_gEncodedMediaTypes_PADDING_gMServState_gGetCallback_gGenaCallback_gSoapCallback_gInitialized_Http1xxCodes_Http2xxCodes_Http3xxCodes_Http4xxCodes_Http5xxCodes_gMediaTypeList_gAliasDoc_gWebMutex_saved_node.2864_inited.2863_stateInited_next_save.3898_inited.3922_inited.3908_uuids_this_tick.3907_time_last.3906_st_AdvertiseAndReply_AutoAdvertise_CheckOtherHTTPHeaders_ContentTypeHeader_CreateHTTPRangeResponseHeader_CreateServicePacket_DeviceAdvertisement_DeviceReply_DeviceShutdown_ErrorMessages_ErrotEvt_FindServiceControlURLPath_FindServiceEventURLPath_FindServiceId_FreeHandle_GetCallBackFn_GetClientHandleInfo_GetClientSubActualSID_GetClientSubClientSID_GetDeviceHandleInfo_GetFirstSubscription_GetFreeHandle_GetHandleInfo_GetNextRange_GetNextSubscription_GetSubscriptionSID_GlobalClientSubscribeMutex_GlobalHndRWLock_HandleTable_Http_Header_Names_InitHandleList_LOCAL_HOST_LOCAL_PORT_MD5Final_MD5Init_MD5Update_MakeGetMessage_MakeGetMessageEx_MakePostMessage_Make_Socket_NoBlocking_PrintHandleInfo_ReadResponseLineAndHeaders_RemoveClientSubClientSID_RemoveSubscriptionSID_SearchByTarget_SendReply_ServiceAdvertisement_ServiceReply_ServiceShutdown_SetGenaCallback_SetHTTPGetCallback_SetSoapCallback_SoapGetServiceVarStatus_SoapSendAction_SoapSendActionEx_StartMiniServer_StopMiniServer_StrStr_StrTok_ToUpperCase_addServiceTable_advertiseAndReplyThread_bWebServerState_configure_urlbase_copy_URL_list_copy_client_subscription_copy_sockaddr_in_copy_subscription_error_respond_freeClientSubList_freeService_freeServiceList_freeServiceTable_freeSubscription_freeSubscriptionList_free_URL_list_free_client_subscription_free_upnp_timeout_gDocumentRootDir_gMiniServerThreadPool_gRecvThreadPool_gSendThreadPool_gSsdpReqSocket_gTimerThread_gUUIDMutex_g_maxContentLength_genaCallback_genaInitNotify_genaInitNotifyExt_genaNotify_genaNotifyAll_genaNotifyAllExt_genaRenewSubscription_genaSubscribe_genaUnSubscribe_genaUnregisterClient_genaUnregisterDevice_gena_process_notification_event_gena_process_subscription_renewal_request_gena_process_subscription_request_gena_process_unsubscribe_request_getAllServiceList_getElementValue_getServiceList_getServiceTable_getSubElement_get_content_type_get_ieee_node_identifier_get_miniserver_sockets_get_random_info_get_sdk_info_get_ssdp_sockets_get_system_time_getlocalhostname_has_xml_content_type_http_CalcResponseVersion_http_CancelHttpGet_http_CloseHttpGet_http_CloseHttpPost_http_Connect_http_Download_http_FixStrUrl_http_FixUrl_http_HttpGetProgress_http_MakeMessage_http_OpenHttpGet_http_OpenHttpGetEx_http_OpenHttpGetProxy_http_OpenHttpPost_http_ReadHttpGet_http_RecvMessage_http_RecvPostMessage_http_RequestAndResponse_http_SendMessage_http_SendStatusResponse_http_WriteHttpPost_http_get_code_text_httpmsg_destroy_httpmsg_find_hdr_httpmsg_find_hdr_str_httpmsg_init_isFileInVirtualDir_is_escaped_is_mark_is_reserved_is_unreserved_linecopy_linecopylen_map_int_to_str_map_str_to_int_matchstr_membuffer_append_membuffer_append_str_membuffer_assign_membuffer_assign_str_membuffer_attach_membuffer_delete_membuffer_destroy_membuffer_detach_membuffer_init_membuffer_insert_membuffer_set_size_memptr_cmp_memptr_cmp_nocase_method_to_str_miniStopSockPort_namecopy_pVirtualDirList_parse_hostport_parse_port_parse_scheme_parse_uri_parse_uri_and_unescape_parse_uric_parser_append_parser_get_entity_read_method_parser_parse_parser_parse_entity_parser_parse_headers_parser_parse_responseline_parser_request_init_parser_response_init_printNodes_raw_find_str_raw_to_int_readFromSSDPSocket_removeServiceTable_remove_dots_remove_escaped_chars_replace_escaped_resolve_rel_url_searchExpired_send_search_result_soap_device_callback_sock_destroy_sock_init_sock_init_with_ip_sock_read_sock_write_ssdpStopPort_ssdp_handle_ctrlpt_msg_ssdp_handle_device_request_ssdp_request_type_ssdp_request_type1_str_alloc_token_cmp_token_string_casecmp_token_string_cmp_unique_service_name_uuid_compare_uuid_create_uuid_create_from_name_uuid_unpack_virtualDirCallback_web_server_callback_web_server_destroy_web_server_init_web_server_set_alias_web_server_set_root_dirÎúíþ …__TEXT€€__text__TEXTl·_l€__cstring__TEXT$e²$e__const__TEXTØy%ØyH__DATA€ €__data__DATA€@€__dyld__DATA@ƒ@ƒ__common__DATA`ƒÀ__bss__DATA ”ÐÀ__IMPORT __pointers__IMPORT \__jump_table__IMPORT€ ž€8__LINKEDIT°DN DN Hb¤J@executable_path/../Frameworks/libupnp.3.dylib¯pŒÀ¶½i 60ˆAü¡ «åÌÌx! P''?f<Ä?4ÆhÆ™ÈÁ ]è¢$ P@executable_path/../Frameworks/libthreadutil.2.dylib H@executable_path/../Frameworks/libixml.2.dylib 4/usr/lib/libgcc_s.1.dylib 4o/usr/lib/libSystem.B.dylibèXÿ°z‹€Ï}ÿàèX‹€¿}ÿàU‰åVƒì$‹u‹‰D$†”‰D$F,‰D$†à‰D$F‰D$ ‹F‰D$‹FÇ$‰D$èï‰4$èk›ƒÄ$1À^ÉÃU‰å숉]ôè[‰uø‹u‰}ü}؉<$èh‹EƒþÇEäÇ…‡ƒ)_‹U‰D$4‹E ÇD$ÈÇD$‰T$8‹U‰D$0ƒ/_‰D$,ƒÅn‰D$(ƒ4_‰D$ ƒ?_‰D$‹E‰T$$ÇD$‰<$‰D$ƒD_‰D$ƒ\_‰D$ èU›éÖƒþ‡Ñƒ|_“q_EЋE‰T$H‹U ÇD$(lÇD$‰D$Tƒ)_‰D$PƒÅn‰D$Lƒˆ_‰D$DƒŽ_‰D$<‹E‰T$@‹UÇD$ÇD$‰D$8ƒ4_‰D$4ƒD_‰D$,ƒ“_‰D$$ƒ•_‰D$ ƒ½l‰D$ƒ7e‰D$ƒ¥_‰T$0‰D$ ÇD$‰<$èzš…Àu‰<$èvf‹U‰‰<$èªf‹]ô‹uø‹}üÉÃU‰åìH‰]ôè[‰}ü‹}‰uøuØÇEà‰t$ÇD$ ‰<$è=p…À„ƒÿ]‰D$‰4$èjc…À…ê‰t$ÇD$ ‰<$èp…À„ÎÇD$ ‰4$è–Eä‰D$‹E‰|$Ç$‰D$ ‹…ÿÿÿ‰D$‹E‰D$èIùÿÿ‹E …Àt‹}Ü…ÿt‹uà…öt‹Mä…Éu(‹Eܾ˜ÿÿÿ‰$耔‹Eà‰$èu”‹Eä‰$èj”ëM‹U …Òt‹ ÿÿÿE̺ë‹ÿÿÿE̺èëüÿÿ‰Æ‹E܉$è1”‹Eà‰$è&”‹Eä‰$è”Ä ‰ð[^_ÉÃU‰åì‰]ôè[‰uøµ ÿÿÿ‰}ü}äÆEÕƒ@X‰$蔉4$fÇEÖl‰EØ‹E ‰D$ ‹E‰D$ƒžX‰D$è•‹E‰t$¾˜ÿÿÿ‰|$Ç$‰D$‹E‰D$ ‹E ‰D$è!øÿÿ‹Eä…ÀtEÔ‰ùºèüÿÿ‰Æ‹Eä‰$èa“‰ð‹]ô‹uø‹}üÉÃU‰åìø‹E ‰]ôè[‰uøµ0ÿÿÿ‰D$ ‹E‰}ü}ä‰4$ÇEä‰D$ƒáW‰D$èo”‹E‰t$¾˜ÿÿÿ‰|$Ç$‰D$‹E‰D$ ‹E ‰D$è{÷ÿÿ‹Eä…Àt‹E‰ùºèuûÿÿ‰Æ‹Eä‰$è»’‰ð‹]ô‹uø‹}üÉÃU‰åì‰]ôè[‰uøµ ÿÿÿ‰}ü}äÆEÕƒàV‰$è·’‰4$fÇEÖl‰EØ‹E ‰D$ ‹E‰D$ƒ>W‰D$赓‹E‰t$¾˜ÿÿÿ‰|$Ç$‰D$‹E‰D$ ‹E ‰D$èÁöÿÿ‹Eä…ÀtEÔ‰ùºè»úÿÿ‰Æ‹Eä‰$è’‰ð‹]ô‹uø‹}üÉÃU‰åWVS켋Eè[‹}ÇEÜÇEà…ÀÇE䄇…(ÿÿÿ‰…\þÿÿµtþÿÿƒ]VÇ…(ÿÿÿupnpÇ…,ÿÿÿ:rooÇ…0ÿÿÿtdevÇ…4ÿÿÿice‰|$‰D$‰4$èÒ’E܉…`þÿÿ‰D$‹E‰t$Ç$‰D$‹E‰D$ ‹…\þÿÿ‰D$è×õÿÿë…(ÿÿÿ‰…\þÿÿEܵtþÿÿ‰…`þÿÿ‹…\þÿÿ‰|$‰$è›’‰|$‰4$è’Eà‰…dþÿÿ‰D$‹E‰t$Ç$‰D$‹E‰D$ ‹…\þÿÿ‰D$ègõÿÿ‹E ‰D$‹…\þÿÿ‰$èE’‹E ‰|$‰4$‰D$ ƒV‰D$èû‘Eä‰D$‹E‰t$Ç$‰D$‹E‰D$ ‹…\þÿÿ‰D$èõÿÿ‹}…ÿt‹uÜ…öt‹Mà…Ét‹Uä…Òu(‹Eܾ˜ÿÿÿ‰$è=‹Eà‰$è2‹Eä‰$è'ëJ‹E…Àt ‹`þÿÿºë ‹dþÿÿº‹Eè«øÿÿ‰Æ‹E܉$èñ‹Eà‰$èæ‹Eä‰$èÛļ‰ð[^_ÉÃU‰åì‹M‰]ô‹Eè[‰}ü‹}…ɉuøÇEàÇEät@‰D$µ,ÿÿÿƒ4T‰D$‰4$èâ‹UEà‰…$ÿÿÿ‰D$ƒHT‰|$‰T$ ‰t$ëg‹U …ÒuUà‰•$ÿÿÿ‰T$‹U‰|$‰D$‰T$ ëB‹U µ,ÿÿÿ‰D$ƒXT‰D$‰4$‰T$ èvEà‹U‰…$ÿÿÿ‰D$‹E ‰|$‰T$ ‰t$‰D$Ç$èóÿÿ‹Eà…ÀuÇ$¾˜ÿÿÿèÌŽë$‹$ÿÿÿº‹Eèd÷ÿÿ‰Æ‹Eà…Àt‰$覎‰ð‹]ô‹uø‹}üÉÃU‰åWVSè[ì ‹u‹}ÆE̓ÑR‰$諎fÇEÎlÇEÜÇEàÇEä‰EÐ…ÿÿÿ‰…ÿÿÿE܉… ÿÿÿ‹E …ÀtTƒ S‰D$…ÿÿÿ‰t$‰$è|E܉… ÿÿÿ‰D$‹E‰|$Ç$‰D$ ‹…ÿÿÿ‰D$ƒS‰D$è~òÿÿEà‰…ÿÿÿ‰D$‹E‰|$‰t$‰t$‰D$ Ç$èRòÿÿ‹E‰t$‰D$ ƒ/S‰D$‹…ÿÿÿ‰$èõŽEä‰D$‹E‰|$Ç$‰D$ ‹…ÿÿÿ‰D$‹E‰D$èòÿÿ‹E …Àt‹EÜ…Àt‹Eà…Àt‹}ä…ÿu(‹Eܾ˜ÿÿÿ‰$è7‹Eà‰$è,‹Eä‰$è!ëM‹u …öt‹ ÿÿÿE̺ë‹ÿÿÿE̺è¢õÿÿ‰Æ‹E܉$è茋Eà‰$èÝŒ‹Eä‰$èÒŒÄ ‰ð[^_ÉÃU‰åVƒì‹u‹†¸‰t$Ç$‰D$ÿ–¼‰uƒÄ^É铌U‰åWVSè[ìÜ ¶}ÇEà‹³C‹‰4$è{EàU䉅0ôÿÿ‰D$‰•,ôÿÿ‰$èð …À…~‹Eà‹H‰8ôÿÿ‹@‰4$‰…<ôÿÿè=‰ø„Àt‹UÇD$Ç$‰T$éz‹M}ØÇ…úÿÿÇ…úÿÿÿÿÿÿ‰|$ÇD$‰ $è©b…Àt/…úÿÿ‰D$ ƒ0Q‰D$‹E܉D$‹E؉$è|pƒø…Ò‹EÆ…Dþÿÿ‰|$ÇD$‰$èXb…Àt‹E܉D$‹E؉D$…Dþÿÿ‰$èµZ‹U ‹M‹‰E¬‹B‰E°‹B‰E´‹B Æ…øþÿÿ‰|$ÇD$‰E¸‰ $èb…Àt‹E܉D$‹E؉D$…øþÿÿ‰$è]Z‹EÆ…Üüÿÿ‰|$ÇD$ ‰$èÂa…Àt‹E܉D$‹E؉D$…Üüÿÿ‰$èZ‹UÆ…ýÿÿ‰|$ÇD$‰$è„a…Àu‹M‰|$ÇD$‰ $èia…Àt‹E܉D$‹E؉D$…ýÿÿ‰$èÆY‹EÆ… úÿÿÆ…ÀúÿÿÆ…tûÿÿÆ…(üÿÿÆ…\ôÿÿÆ…õÿÿÆ…Äõÿÿ‰|$ÇD$‰$èaÆ…6ôÿÿ…Àt5‹EØEܶ0Æ…Hôÿÿ‰D$‹E؉$èò ‹U؉ñ…À‹EÜ”…6ôÿÿˆ ‹E‰|$ÇD$‰$èª`Æ…7ôÿÿ…Àt5‹EØEܶ0Æ…Hôÿÿ‰D$‹E؉$è, ‹U؉ñ…À‹EÜ”…7ôÿÿˆ ¶…6ôÿÿ …7ôÿÿtH…\ôÿÿ‰D$… úÿÿ‰$è‹…õÿÿ‰D$…Àúÿÿ‰$è芅Äõÿÿ‰D$…tûÿÿ‰$èЊ‹U€zX„´‰|$ÇD$‰$èò_…À„Fƒ§P‰D$‰<$èS…Àtƒ²P‰D$‰<$è S…À„ð逵6ôÿÿ€µ7ôÿÿ¶6ôÿÿ 7ôÿÿ…ð€½Üüÿÿ„ã‹úÿÿ…ÉŽÕº‹…<ôÿÿ‰$‰D$…úÿÿ‰D$ÿ•8ôÿÿ鮋U‰|$ÇD$‰$è;_1É…Àt1‹EØEܶ0Æ…Hôÿÿ‰D$‹E؉$è1 ‹UØ‹}Ü…À‰ð”Áˆ:‹UzDÈ…P‹•úÿÿ…ÒŽB€½Üüÿÿ”À€µ7ôÿÿ …7ôÿÿ…%„É„‹³C‹‰4$èýˆ‹0ôÿÿ‹…,ôÿÿ‰L$‰$èn…Àt‰4$龋Eàœ‰$èó†éŒ‹•@ôÿÿ‹R‰•Dôÿÿƒz ‡Y‹B ‹„ƒ Øÿà³(Iwƒ½Lôÿÿë}‹EÜ‹Dôÿÿ‰D$‹E؉D$‹A‰$èêˆëZ‹…Dôÿÿ‹uÜ‹x‰<$èʈ‰<$9ÆCð‹E؉t$‰D$輈ë,‹•Dôÿÿ‹uÜ‹z‰<$蜈‰<$9ÆCð‹E؉t$‰D$莈…À”À¶À…À„ Ç$Àè ‡…À‰Æ„Š…úÿÿ‰4$ÇD$¸‰D$膇‹Dôÿÿ‹A‰†¸‹…8ôÿÿ‰†¼ƒÃÿÿÿ‰t$u¼‰D$‰4$èê…ÇD$‰4$èä…‹ƒ;‹‰4$‰D$èÍ…‹ƒO‹ÇD$‰t$‰$è½…‹Eà‹•@ôÿÿœ‰T$‰$èl…‰…@ôÿÿ‹…@ôÿÿ…À…`þÿÿ‹ƒC‹‰$è‡ë&€µ6ôÿÿº€µ7ôÿÿ¶6ôÿÿ 7ôÿÿ„0ýÿÿÄÜ [^_ÉÃU‰åWVSè[ƒì<ÇEäÿÿÿÿÇEà‹³v„‰4$踆Eà‰D$Eä‰$è/…Àt[‹E‰$èz…‰4$芆éÀ‹F‰$èb…‹V‰UÔÇF‰4$¾èH…‹EàÇD$‰|$œ‰$èd„ëG‹Eà‹Pœ‰$‰UÐè[„ë ‹w‹U‹;t™‹Eà‰|$œ‰$èC„…À‰ÇuÚÇEÔ1ö‹ƒv„‰$èí……öt‹EÔÇD$Ç$‰D$ÿUЋU‰$è­„ƒÄ<[^_ÉÃU‰åìH‰]ôè[‰uø‰}ü‹} ÇEà‹ƒSƒ‰$豄‰<$‰EÜ蘉Ƹ›ÿÿÿƒþÿ„‰Ç$Ä è%…‰…ðüÿÿ‹•ðüÿÿ¸˜ÿÿÿ…Ò„dƒ}Ç…ôüÿÿ~ƒ}Q¸PLE‰…ôüÿÿ‹•ðüÿÿƒ×HÇM-SEÇBARCHÇB * HÇB TTP/ÇB1.1 fÇB •ýÿÿ‰…ìüÿÿ‰D$ƒMI‰•èüÿÿ‰$ÇD$ l‰D$è…‹•ðüÿÿ‹…èüÿÿ‰$‰D$è…‹…ðüÿÿ‰$è'……ðüÿÿÇMAN:Ç@ "ssÇ@dp:dÇ@ iscoÇ@ver"fÇ@ Æ@‹…ôüÿÿ…À~:ƒ[I‹•ôüÿÿ‰D$‹…èüÿÿ‰T$‰$è„‹•èüÿÿ‹…ðüÿÿ‰T$‰$è“„…ÿt4‹•èüÿÿƒdI‰|$‰D$‰$èU„‹…èüÿÿ‹•ðüÿÿ‰D$‰$è[„‹…ðüÿÿ‰$èk„…ðüÿÿfÇ Æ@‹•ìüÿÿÇEÌÇEÐÇEÔ‰$ÇEØÆEÍèË‚fÇEÎlÇD$€ÇD$‰EÐ…0ÿÿÿ‰…äüÿÿ‰$èMƒ‹“Wƒ‹ ºÇ…àüÿÿ‰ÈƒáÁèÓâ ”…0ÿÿÿ‹ƒOƒ‰$èIƒEà‰D$Eä‰$èÀ…Àt‹“Oƒ‰$è ƒéÇ$è΂‰<$‰…Üüÿÿè~ƒ‹•Üüÿÿ‰B‹E‰r u°‰BÇ$蟂‰4$‰Ç‰D$ƒÎþÿÿ‰D$è)ÇD$‰4$è#‹ƒGƒ‰4$‰D$è ‹•ôüÿÿ‹ƒKƒ‰|$ÇD$‰T$‰t$ ÇD$‰$è‹‹•Üüÿÿ‰‹Eà‰T$œ‰$ès€‹ƒOƒ‰$èJ‚‹“WƒEÜÇD$‰D$ ÇD$ ÇD$‹‰$èM‚‹…äüÿÿ‹“WƒÇD$ÇD$ ‰D$ÇD$‹@‰$è ‚@uaè}€•0þÿÿ‰T$ÇD$‹‰$èF‚‹“WƒÇD$‹‰$èã‹“Wƒ‹‰$èa€‹…ðüÿÿ‰$èv€¸qüÿÿ雋“Wƒ‹ ‰ÈƒáÓ¥àüÿÿÁè‹•àüÿÿ…”…0ÿÿÿtc‹»WƒEÌ1ö‰…Øüÿÿ‹•ØüÿÿF‹…ðüÿÿÇD$ÇD$ ‰T$‰$謋•ðüÿÿ‰T$‰D$‹‰$è:Ç$ †èµƒþu®‹…ðüÿÿ‰$èÖ¸‹]ô‹uø‹}üÉÃU‰åVƒì‹uÇD$ÇD$‰4$è‰4$ÇD$ƒÈ‰D$èy@•ÀƒÄ^¶ÀÉHÃU‰åWVSè[ì\ƒMD‰D$‹E‰$è…À„ЃZD‰D$‹E‰$èó€…À„Q@ÇD$:‰$言…À„8@ÇD$:‰$者À‰Æ„@‰D$ƒbD‰D$‹E ƒÀ‰$èC€‹EÇD$:‰$èS€…À„ã‰÷)ǵ¼þÿÿ‰|$‰D$‰4$èY€ƒjDÆ„=¼þÿÿ‰D$‹E ‰t$ȉ$èè鎃pD‰D$‹E‰$è#€Ç…´þÿÿ…À‰ÇtYƒuD‰D$‹E‰$èþ…Àt$‰Æ‹E )þ‰t$‰|$ƒÀ‰$èÖ‹E ÆDë‹E ‰|$ƒÀ‰$èœÇ…´þÿÿ‹E³xD‰t$‰$襅ÀtPƒ}D‰D$‹E‰$茅Àt7ƒ‡D‰D$‹E‰$ès…Àt‰D$‹E |‰$è3Ç…´þÿÿ‹E‰t$‰$èB…ÀtPƒ‹D‰D$‹E‰$è)…Àt7ƒ‡D‰D$‹E‰$è…Àt‰D$‹E ȉ$èÐ~Ç…´þÿÿƒ”D‰D$‹E‰$èÙ~…Àt/9Et*‰Æ‹E+u‰D$‹E ‰t$ƒÀ‰$è¨~‹E ÆD1Àë‹•´þÿÿ1À…Òu¸ÿÿÿÿÄ\[^_ÉÃU‰åƒì‰]øè[‰uü‹u‰4$ƒöA‰D$èc~1Ò…À…‡ƒûA‰D$‰4$èG~º…ÀulƒB‰D$‰4$è,~º…ÀuQƒÈA‰D$‰4$è~…Àt6ƒÛA‰D$‰4$èû}º…Àu ƒÍA‰D$‰4$èà}º…Àuºÿÿÿÿ‹]ø‰Ð‹uüÉÃU‰åƒì‰uø‹u‰}ü‹} ÇD$¼ÇD$‰<$èÑ|‰|$‰4$è[üÿÿÇG‰4$èùþÿÿ1Ò‰G@u ÇGúÿÿÿºÿÿÿÿ‹uø‰Ð‹}üÉÃU‰åVƒì‹u…öt‰4$èÄQ‰uƒÄ^ÉéŠ{ƒÄ^ÉÃU‰åWVSè[ìLÇE䋳4z‰4$èp|Eä‰D$‹E ‰$èbúHt'‰4$èX|¸œÿÿÿé\‹ƒ4z‰$è@|1ÀéG‹Eä1ÿ‹€t‰…àýÿÿ…ðýÿÿ‰…Ôýÿÿ‰$èët…ÿÿÿ‰…ÐýÿÿE€‰…Ìýÿÿ…¸þÿÿÇ…Øýÿÿ‰…Èýÿÿ‹…Øýÿÿ‰D$‹Eä‹€|‰$è8{…À‰Æ„vÿÿÿ‰$èN{‰<$è{ƒÂ@‰D$‰4$èøz…À‰Ç„›‰4$è"{ÇD$‰<$èêz…À„{‰$èîz…À„k‰$è{…À„[‰D$‹…Ðýÿÿ‰$è¾{‰4$èÐz‰<$è›zƒÍ@‰D$‰4$èzz…À‰Ç„ÇD$‰$ètz…À„‰$èxz…À„õ‰$è‹z…À„å‰D$‹…Ìýÿÿ‰$èH{‹E…À„Œƒ}u>‹E$‰D$‹EäƒÀ ‰D$ ‹…Ìýÿÿ‰D$1Àƒ½Øýÿÿ”À‰D$‹…Ðýÿÿ‰$èÕêÿÿ雋E$‰D$‹EäƒÀ ‰D$‹…Ôýÿÿ‰D$ ‹…Ìýÿÿ‰D$1Àƒ½Øýÿÿ”À‰D$‹…Ðýÿÿ‰$èDãÿÿéSƒ}to ‹E…Àté?ƒ}„˜ƒ}…+黋…àýÿÿ‰D$‹EäƒÀ ‰D$‹…Ìýÿÿ‰D$ 1Àƒ½Øýÿÿ”À‰D$‹…Ðýÿÿ‰D$‹E‰$è½æÿÿéÞ‹…Øýÿÿ…À…Ћ…àýÿÿÇD$ÇD$‰D$‹EäƒÀ ‰D$‹…Ìýÿÿ‰D$ 鈋E…Àt+‹E€8t#‹…Ìýÿÿ‰D$‹E‰$èÃy…ÀuuÇD$ë0‹E‰$èÍy‰D$‹…Ðýÿÿ‰D$‹E‰$è¹y…ÀuCÇD$‹…àýÿÿÇD$‰D$‹EäƒÀ ‰D$‹…Ìýÿÿ‰D$ ‹…Ðýÿÿ‰D$‹E‰$èèÿÿ‹…Øýÿÿ‰D$‹Eä‹€€‰$è5x…À‰Æ„ĉ<$èxƒÑ@‰D$‰4$èýw…À‰Ç„ Ç…äýÿÿÇ…Üýÿÿ‹…Üýÿÿ‰<$‰D$èáw…À‰Æ„X‹…äýÿÿ‰$èÄwƒÙ@‰D$‰4$è£w…À‰…äýÿÿ„ÇD$‰$è™w…À„‰$èw…À„÷‰$è°w…À„ç‰D$‹…Èýÿÿ‰$èmx‹E…Àt_ƒ}u.‹E$‰D$ ‹EäƒÀ ‰D$‹…Èýÿÿ‰D$‹…Ìýÿÿ‰$èùãÿÿéš‹E$‰D$ ‹EäƒÀ ‰D$‹…Èýÿÿ‰D$‹…Ìýÿÿ‰$èkâÿÿëo‹u…öt5ƒ}ub‹M …Ét[‹E ‰$è÷w‰D$‹…Èýÿÿ‰D$‹E ‰$èãw…Àu3‹…àýÿÿ‰D$‹EäƒÀ ‰D$ ‹…Ìýÿÿ‰D$‹…Èýÿÿ‰D$‹E‰$è´âÿÿÿ…ÜýÿÿéŒþÿÿ‹…äýÿÿ‰$èlv‰<$1ÿèbvÿ…Øýÿÿé ûÿÿÄL[^_ÉÃU‰åƒì8‰]ôè[‰uø‹u‰}ü‰4$è_ƒøuƒ~…쀾¸„ßë…À…Õ‹Fƒø•ƒø•À„Ðtƒ~@uv¸…Àuq鮃~@tìƒ~u\‹Fº‹NƒøM‰D$ƒ¦?‰L$‰$èØv…Àu1}à‰|$ÇD$‰4$èçK…Àtƒ-;‰D$‰<$è?…Àëˆ1À닃~tƒ~@u$†ÜÇD$ ÇD$‰D$‰4$è5èÿÿë†Ü‰D$‰4$èÛÿÿ‰4$èÿøÿÿ‹]ô‹uø‹}üÉÃU‰åWVSè[ì< ‹uÇEäÇ$ìèPu‰Ç…ÿ…ôõÿÿtB;³MSuÇD$‰<$èäKë‰<$ètO‡ ÇD$Ä ‰$èè>…Àu‹‡ ‰…äõÿÿë‰<$1ÿèt…ôõÿÿ‰…äõÿÿEä‰D$‹…äõÿÿUÔ‰4$‰T$ÇD$ ÇD$à ‰D$èu…À‰ÆŽª‹…äõÿÿÆ0‹E؉$èÿs…ÿ„•‹‡ ·¤Æ‹EÔu¸‰‡Ü‹E؉‡à‹E܉‡ä‹Eà‰‡èƒÇþÿÿ‰|$‰D$‰4$èârƒéøÿÿ‰D$‰4$èÕrÇD$‰4$èÊr‹ƒ]sÇD$‰t$‰$èµr…Àt‰<$èt÷ÿÿÄ< [^_ÉÃU‰åWVSè[ìlÇD$ÇEÜÆEçÇEàÇD$Ç$è4t‰…´þÿÿ@u&è}r•ÀþÿÿÇD$‰T$‹‰$èFt鵋•´þÿÿEçÇD$‰…°þÿÿ‰D$ ‰$ÇD$ ÇD$è¾s‹…´þÿÿ‰$è òÿÿ‹•´þÿÿÇD$ÇD$Ç$‰“ÂQèœsƒøÿ‰ÇuOèçq•Àþÿÿ‰T$ÇD$‹‰$è°s‹…´þÿÿÇD$‰$èOs‹•´þÿÿ‰$èÏq¸3ÿÿÿéIuÜÇEÜÇD$‰t$ ÇD$ÇD$ÿÿ‰$ès@t'ÇD$‰t$ ÇD$ÇD$ÿÿ‰<$èÝr@u]è@q•Àþÿÿ‰T$ÇD$‹‰$è s‹…´þÿÿÇD$‰$è¨r‹•´þÿÿ‰$è(qÇD$‰<$èŠr‰<$éYEÀÇEÀÇEÈÇEÌÆEÁÇEÄfÇEÂlÇD$‰D$‰<$èÎp@ugè£p•Àþÿÿ‰T$ÇD$‹‰$èlrÇD$‰<$èr‰<$è—p‹…´þÿÿÇD$‰$èóq‹•´þÿÿ‰$èsp¸5ÿÿÿé틃ÊquÐÇEÐÇEÔ‰$è©p‰EÔƒN7‰$è˜pÇD$‰t$ ÇD$ ÇD$‰<$‰EÐèq@ugèâo•Àþÿÿ‰T$ÇD$‹‰$è«qÇD$‰<$èPq‹•´þÿÿÇD$‰$è:q‰<$èÀo‹…´þÿÿ‰$è²o¸0ÿÿÿé,‹“ÊquØÇE؉$èïoÇD$‰t$ ÇD$ ÇD$‰<$‰EØèÖp@u!è9o•ÀþÿÿÇD$‰T$‹‰$èq‹…°þÿÿÇD$ÇD$ ÇD$‰D$ ‰<$èˆpEàÇD$‰D$ ÇD$ ÇD$ÿÿ‰<$èap@udèÄn•Àþÿÿ‰T$ÇD$‹‰$èpÇD$‰<$è2p‹•´þÿÿÇD$‰$èp‰<$è¢n‹…´þÿÿ‰$è”n¸8ÿÿÿë‹…´þÿÿ‹U‰B1À‰zÄl[^_ÉÃU‰åWV‰ÎSè[윉Eœ‰T$ÇEäƒ]4‰D$E®‰E˜‰$è½o‹U˜‰$èîo‰4$¸=èào‹UÇE¤DN‰E E܉D$ Eà‰D$‹B`}̉D$‹B\‰$èÂg‰<$èÞ:ƒb4‹U¤‰D$8ƒ²4‰D$0‹E˜‰t$4‰T$ÇD$ô‰D$,ƒÒ4‰D$(ƒúA‰D$$ƒò5‰D$ ‹ƒBM‰<$‰D$‹E ‰D$ƒù5‰D$ ‹E܉D$‹Eà‰D$è;n…Àu*‹EЋUœ‰D$‹Ẻ$‰D$ ƒvA‰D$Eä‰D$è£g‰<$èN:Äœ[^_ÉÃU‰åƒì8‰]ôè[‰Uà‰uø¾ÿÿÿ‰}ü‰M܉$“¼4‰T$“Ä4‰T$èom…À‰Ç„€ÇD$‰$èsm…Àt_‰$è{m…À‰ÆtQ‰$èwm‰4$‰Eäègm…À‰Á‹Eä•Â…À•À„Ðt+‹E܉L$‰$è5n…Àu‹Eä1ö‰D$‹Eà‰$èn…Àt¾ÿÿÿ‰<$èþl‰ð‹]ô‹uø‹}üÉÃU‰åƒìH‰]ôè[‰}ü‰×Uà‰uø‰MЉT$ÇD$‰$èC…À‰Æ„/‹@…À„$@‰$èül…À‰EÌu Ç$ëp‹F‰D$‹F ‰D$‹Ẻ$èªm‹F‹UÌÆÇD$#‰$èhm…À‰EÔu‹Ẻ$èÐkéÁ‹UÔÆ‰<$è\mp‰4$è‰l…À‰EÈu‹Ẻ$è k¾˜ÿÿÿé‘‹Uȃ4‰t$¾ÿÿÿ‰|$ ‰D$‰$èÍl‹EÈ‹ỦD$‰$èíl…Àu<‹uÔÇD$"F‰4$èÐl…ÀtÆ‹EÔ€xt ‰4$èÇl‹UЉ‹EЃ8öƒæ˜‹Ủ$èk‹Eȉ$è kë¾ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åƒìH‰]ô‰uø‰Ö‰}ü‰ẺMÈÇEÜ‹x‹@è[¶ ˆMׯ‹ƒŠi‰$èÒkEä‰D$Eà‰$èëéH…ô‹Eä‰|$„‰$èG(…À‰EЄՅötP‹EÌ“Š2¾ÿÿÿMÜèïýÿÿ…À•ƒø˜•À„Ð…´‹MÜ“Š2‹EÈèøüÿÿ‰Æ‹E܉$è2j…ötEé‹EÐMÜ‹‹EÌè¥ýÿÿ…À•ƒø˜•À„Ðui‹EЋMÜ‹‹EÈè³üÿÿ‰Æ‹E܉$èíi…öuH‹UÐ1ö‹M ‹B‰ $‰D$èô8‹UЋM‹B‰ $‰D$èß8‹Uä‹M‹B‰‹B‹U‰ë ¾ÿÿÿÿ뾑ÿÿÿ‹M̶U׋Aˆ‹ƒŠi‰$è™j‰ð‹]ô‹uø‹}üÉÃU‰åìX‰]ô‹U è[‰uø‰}üÇEä‰$‹ƒH‰…ûÿÿè’ „À„% ‹M ƒy u-…,ûÿÿ‰…ðúÿÿ‰D$ÇD$‰ $èà?…À…îéï‹M •,ûÿÿ‰•ðúÿÿ‰T$ÇD$ ‰ $è°?…À„ÄE¬‰D$EĉD$ ƒÝ1‰D$‹…0ûÿÿ‰D$‹…,ûÿÿ‰$èuM…À…Œ½øþÿÿ‰<$èh5‹E°‰<$‰D$‹E¬‰D$èÛ5ƒø˜tƒì1‰D$‰<$èO4ƒø˜u ‰<$èQ5é?‹…øþÿÿ‰D$‹E ‰$è½>‰<$‰Æè-5…ö„‹F ‰…,ûÿÿ‹F‰…0ûÿÿ‹…,ûÿÿ…0ûÿÿ¶8Æ‹µ,ûÿÿÇD$#‰4$èui…Àu‹…0ûÿÿ‰úˆéÊHE¼‰Ê‰…ûÿÿ)ò‰D$ ƒø1‰D$‹…0ûÿÿ‰ $)ЉD$èyLƒøt‹•,ûÿÿ‰ù‹…0ûÿÿˆ é}‹•ûÿÿƒû1‰…üúÿÿ‰D$‰$èŠ1…ÀuÇE¼ÇEÀ‹•,ûÿÿ‰ù‹…0ûÿÿˆ ‹U Eä‰D$‹‚˜‰$èøg…Àt$‹2ƒøf¾˜ÿÿÿ‰ûÿÿ„ ¾õé‹EÀ…À…²‹}ä‰<$èg…À„)‰$è}g…À„‰$èmg…À‰Æ„‰$èog…À„÷‹•üúÿÿ‰$‰T$èch…À„݉4$è1g…À„͉$µøþÿÿèg‰$è6g‰4$‰D$èe5EЉù‰D$ EຉD$…èüÿÿ‰D$…èûÿÿ‰$‹E èIûÿÿ…Àuƒ9/½4ûÿÿ‰D$‰<$è5…èýÿÿ‰$Ç…,ûÿÿ‰t$è+5‹MÇ…ìþÿÿ‹AÇ$‰…èþÿÿ‹EЉD$‹…ðúÿÿ‰D$ÿUà‹•ìþÿÿ…Ò‰•ûÿÿu%ë‹M ‰ $ë‹E ‰$‹‹'Hº”ë.‹U ‰$ëë‹•,ûÿÿ…Òt)€½4ûÿÿ‰ùt ‹‹'Hº”‹E ‰$‹Eèáöÿÿé‹U EÜ1ÿ‰D$ EØÇEÔ‰D$‹B`‰D$‹B\‰$èù^‹ûÿÿ‰ $èÕf‰ÆE¬‰…øúÿÿ‰$è÷1ƒ2‹•ûÿÿ‰D$0ƒ_2‹øúÿÿ‰D$(ƒÓ<‰D$$ƒË0‰D$ ‹ƒH‰T$,‰t$‰|$‰D$ƒ83‰D$ ‹EÜÇD$ȉ $‰D$‹E؉D$è_e…Àt ‹…øúÿÿ‰$ë3‹E°‹U‰D$‹E¬‰$‰D$ ƒO<‰D$EÔ‰D$è¼^‹øúÿÿ‰ $èa1‹…ìþÿÿ‰$èÏd1öéD‹M¼‹UäÇEÜÇEÔȉ•ûÿÿ‰$ûÿÿ‰… ûÿÿ‹• ûÿÿÇ…ìþÿÿ¶ˆ…ûÿÿÆ‹‹H‹…ûÿÿÇE܉ûÿÿ‰$èd…À‰Âu1ö1ÿÇ…ûÿÿÿÿÿÿ鵃ã0‰D$ƒE3‰D$‰$è)d…À‰Ç„ƒÇD$‰$èd…Àto‰$è&d…À‰Æta‰$è,d…ÀtU‹•$ûÿÿ‰$‰T$è$e…Àt?‰4$è-dÇ…ûÿÿÿÿÿÿ…À‰Æt3E܉D$‰4$èdÇ…ûÿÿ…Àt‰4$è£cë1öÇ…ûÿÿÿÿÿÿ‰4$èc…ÿt‰<$è†cƒ½ûÿÿÿ¿‘„ EÔ‹ûÿÿ1Ò‰D$ E؉D$…èýÿÿ‰D$…èüÿÿ‰$‹E èÎ÷ÿÿ…À‰Ç…e‹$ûÿÿ…èûÿÿ‰$µ4ûÿÿ‰L$èÀ1ƒ9/‰D$‰4$è€1‹EÜ‹UÇ…ìþÿÿ‹ðúÿÿÇ…,ûÿÿ‰…èþÿÿ‹B‰L$Ç$‰…ðþÿÿ‹EÔ‰D$ÿUØ‹½,ûÿÿ…ÿt*€½4ûÿÿt ‰µûÿÿéÓ‹ƒ#H¿õ‰…ûÿÿ齋µìþÿÿ…öu‹“#H¿õ‰•ûÿÿ飋M ẺD$ EÐÇEà‰D$‹A`‰D$‹A\‰$è[…øþÿÿ‰…ôúÿÿ‰$è.‰4$è{b…À‰… ûÿÿ„ ƒÓ<‰D$$ƒË0‰D$ ‹ƒH‰D$‹ƒ/H‰$èc‹• ûÿÿ‰$‰ÆècÆ‹ƒ+H‰$èób‹ôúÿÿÇD$ÇD$ȉ $‰D$ƒG3‰D$ ‹ẺD$‹EЉD$èÊa…Àu|‹³+H‹»/H‰4$èžb‰t$$1ö‰D$(‹… ûÿÿ‰$è†b‹• ûÿÿ‰<$‰T$‰D$ èpb‹M‰|$‰ $‰D$‹…üþÿÿ‰D$‹…øþÿÿ‰D$ ƒQ3‰D$Eà‰D$èâZ뾘ÿÿÿ‹… ûÿÿ‰$èü`‹•ôúÿÿ‰$èr-…öt‹M ºõ‹E‰ $‹V3èÅñÿÿ1ÿ‹µìþÿÿ‰4$1öè¡`‹E܉$è–`¶…ûÿÿ…ÿ‹• ûÿÿˆt‹M ‰ú‹E‰ $‹ûÿÿèñÿÿ뾑‹Eä‰$è[`…öt‹E ‰ò‹ûÿÿ‰$‹EèSñÿÿ‹]ô‹uø‹}üÉÃU‰åƒìH‰]ôè[‰uø‰}ü‰Ç‰$èg`‰Æ¸˜ÿÿÿ…öt]‰t$‰<$è1a…ÀtDEà‰D$E؉D$ ƒÕ)‰D$‰4$è!a‰4$‰D$èFDƒøu‹Eà‰|$‰$èí`…Àu1À븋]ô‹uø‹}üÉÃU‰åƒì(…À‰uø‰Ö”Â…ö‰}ü‰Ç”À‰Môu.‰4$è·_ë‰ò‰øè:ÿÿÿ…Àu ‹Eô‰01Àë‰4$è¦_…À‰Æuܸþÿÿ‹uø‹}üÉÃU‰åW‰×V‰Êƒì0‰Î‰Eä‹èúþÿÿ…Àu7ƒÿu2‹E‰0ë‹Eô‹U‰1Àë/‹EäMô‹°‰EÔè_ÿÿÿ…ÀuF9þtÚ‹Uôë‰ò¾9þ|Ö¸þÿÿƒÄ0^_ÉÃU‰åƒì‰$è _1Ò…Àt ‰$è!_‰ÂɉÐÃU‰åƒìH‰}ü‰Ç‹G‰]ôè[‰uø‰D$‹‰Uä‰Mà‰L$ÇD$ÇD$ ‰D$‰$èÞs…À‰Æ…²‹EàxD•…´ƒ[(ÇD$ ÇD$‰D$‰<$è)…À……‹7ƒ^(‰D$‰4$è|_ÇD$<‰<$)ð‰D$ ƒk(‰D$èÛ(…ÀuM‹Eà‰$èÂ3‹EàÇD$ÇD$‰D$‹G‰D$ ‹‰D$‹Eä‰$è(s…À‰Æt‹Eà‰$è‚3뾘ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åƒìh‰]ô‰uø‰Æ‰}ü‰Ï‰UÀÇEäÇEàÇEÜ‹@Dè[=È•Â=ô•À„Ð…B‰4$èA”„À„2E܉D$‹†˜‰$è“]…À…‹E܉$èS]…À‰Æ„ƒ}À…Œ‹E “j'‰ñǃ‘$‰E´‰EÌEä‰}Ð}ȉU¸‰UȺ‰$‰øè€ýÿÿ…À…Ø‹E俘ÿÿÿ‰$è#]ÇEÄ…À‰Æ„‹U ¿‰$‰T$èô\ÇEÄ…À„áésƒ}À…p‹E“j'‰ñ}Èǃ‘$‰E´‰Ẽt'‰EЃ'‰EÔEä‰U¸‰UȺ‰$‰øèÛüÿÿ…À…3‹Eäè5ýÿÿ…À„þ‰$1ö¿èí[‹U‰ÇEÄéP‹UàEä‰E¼‰Áƒ–'è1üÿÿ…À…À‹Eäèçüÿÿ…À„°‰$1öè,[‹U=‰Ç‰ÇEÄŽÿƒ}ÀuC‹Uàƒ '‹M¼èßûÿÿ…Àur‹Eäè™üÿÿ…Àtf‰$è\[‹U…À‰tU¿ÇEÄ鶃}Àu>‹Eà1ö¿˜ÿÿÿ‰$è¬[…À‰EÄ„“‹E f¿ÿ‹UĉD$‰$è[…Àuy¿ër1öÇEÄ¿ÿÿÿëbƒj'“‘$‰E¸}ȉU´‹E‰ñÇ‹E´‹U¸‰Ẽ±'‰EЃ·'‰EÔƒ¾'‰EØEà‰UȺ‰$‰øè\ûÿÿ…Àu“é°þÿÿ‹E܉$èZ‰4$è¦Z‹Uĉ$è›Z‰ø‹]ô‹uø‹}üÉÃU‰å쨉]ô‹Eè[‰uø‹u‰}ü}Ôlj<$èÀ&Eœ‰4$‰…´þÿÿ‰D$èq[‰4$¾”ÿÿÿ‰D$胙H…ƒ½$f¾˜ÿ‰D$@‹E ÇEà2‰D$<ƒ%‰D$8ƒÙ%‰D$4‹ƒÍX‹‰D$0‹E ‰$è[ÇD$,ÇD$ ÇD$ÇD$‰<$‰D$(‹EÀ‰D$$‹E¼‰D$ ƒm+‰D$‹E°‰D$‹E¬‰D$ƒ&‰D$ èÅY…Àuq‹•´þÿÿ…Àþÿÿ‰Á‰…°þÿÿ‰øè‘úÿÿ‰<$‰Æèå%…öuH‹E1ɺÇD$‰D$Eä‰$‹…°þÿÿè}ûÿÿ‰Æ‹…°þÿÿ‰$èÛ.ƒþuf1öëƒþDuä‰ð‹]ô‹uø‹}üÉÃU‰åì‰]ô‹EU°è[‰}ü‰uøÇ‰•„þÿÿ‰$è7%EÀ‰…€þÿÿ‰$è&%‹E‰$èY…À‰ÇuÇ…þÿÿéq‹U‰$èïX…À‰…þÿÿ„XEؾÿÿÿ‰D$EЉD$ ƒ£$‰D$‹…þÿÿ‰$èˆY‹•þÿÿ‰$‰D$è§<Æ…—þÿÿƒø… ‹U…xÿÿÿf¾”ÿ‰…Œþÿÿ‰D$‰$èGY‰D$‹E‰$èMÆ…—þÿÿ…À…ã‹•þÿÿ‰$èY‰<$‰ÆèY“«$‰T$l‹•þÿÿÇD$p‰t$hÇD$`‰T$d“Æ$‰T$\“Ï$‰T$T“Ý$‰T$D“ì$‰T$<“k%‰T$8‹U܉D$P„0¹ÇD$X ‰|$L‰T$4‹UØÇD$H ÇD$@~ÇE¼2‰T$0“m%‰T$,‹U ‰T$(“o%‰T$$‹“DW‹‰D$‹…ŒþÿÿÇD$ÇD$ ‰T$ ‰D$ƒ}%‰D$ ‹•„þÿÿÇD$ÇD$‰$è"W…À…«…œþÿÿ‹•Œþÿÿ‰…ˆþÿÿ‰Á‹…„þÿÿèæ÷ÿÿÆ…—þÿÿ…À‰Æ…‹EÜ‹•€þÿÿ‰D$‹E؉$‰D$èA"…Àudƒ%‰D$‹…€þÿÿ‰$èì!…ÀuHEà‹U‰D$Eä‹MÀ‰$‹…ˆþÿÿ‰T$ºè“øÿÿÆ…—þÿÿƒøt!ƒø‰Æu‹uäëÆ…—þÿÿëÆ…—þÿÿ¾˜ÿÿÿ‹…þÿÿ‰$èV‰<$è V‹•„þÿÿ‰$è"‹…€þÿÿ‰$èq"€½—þÿÿt…œþÿÿ‰$è‹+‰ð‹]ô‹uø‹}üÉÃU‰åìè‰]ô‹EU°è[‰}ü‰uøÇ‰•„þÿÿ‰$èø!EÀ‰…ˆþÿÿ‰$èç!‹E‰$èÐU…À‰Ç„öEؾÿÿÿ‰D$EЉD$ ƒd!‰D$‰<$èsV‰<$‰D$è˜9Æ…—þÿÿƒø…Ê‹E•xÿÿÿf¾”ÿ‰•þÿÿ‰T$‰$è8V‹U‰$‰D$èJÆ…—þÿÿ…À…‰<$èV“Z"‰T$L“y"‰T$<“,"‰T$8‹UÜÇD$P‰|$D‰D$H¢‰T$4‹UØÇD$@†ÇE¼2‰T$0“."‰T$,‹U ‰T$(“0"‰T$$‹“T‹‰D$‹…þÿÿÇD$ÇD$ ‰T$ ‹•„þÿÿ‰D$ƒ#‰D$ ÇD$ÇD$‰$èiT…À…«…œþÿÿ‹•þÿÿ‰…Œþÿÿ‰Á‹…„þÿÿè-õÿÿÆ…—þÿÿ…À‰Æ…‹EÜ‹•ˆþÿÿ‰D$‹E؉$‰D$舅ÀudƒQ"‰D$‹…ˆþÿÿ‰$è3…ÀuHEà‹U‰D$Eä‹MÀ‰$‹…Œþÿÿ‰T$ºèÚõÿÿÆ…—þÿÿƒøt!ƒø‰Æu‹uäëÆ…—þÿÿëÆ…—þÿÿ¾˜ÿÿÿ‰<$è^S‹…„þÿÿ‰$èÔ‹•ˆþÿÿ‰$èÆ€½—þÿÿt…œþÿÿ‰$èà(‰ð‹]ô‹uø‹}üÉÃUèY‰å‹E‰wEÉÃUèY‰å‹E‰kEÉÃUèY‰å‹E‰SEÉÃU‰åVƒì‹uÇD$‹‰$èS‹‰$è!R‰uƒÄ^Éé7RU‰åWVSè[ìLÇD$÷ÇD$‹ƒ ‰…Øýÿÿ‹ƒ ‰…Üýÿÿ¶ƒ ˆ…àýÿÿ…áýÿÿ‰$èÍR…Øýÿÿ‰…Ôýÿÿ‰Æ‹ƒÆÿþþþ÷Ð!Â €€té‰ÐÁè÷€€DÐFDðÒƒÞ+µÔýÿÿƒ»ÿD…ìǃÿDÇD$ÇD$Ç$èÉRƒøÿ‰Ç…™èQ•ØþÿÿÇD$‰T$‹‰$èÙR镃 ÆEÙ‰$èdQÇD$ÇD$ ‰t$‰<$‰EÜ·ƒý9fÁÀf‰EÚE؉D$‹…Ôýÿÿ‰D$è.RÇ$èè©R‹“ÿD…ÒtÇ$èR‹ƒÿD…ÀuƒÇD$‰<$èüQ‰<$è‚PÄL1À[^_ÉÃU‰åì8‰uø‹u‰]ô‰}ü}ÔÇEà·Fè[‰D$ ‹F‰D$‹‰<$‰D$è­%…Àt‰4$èJP…øþÿÿ‰$èi&éêEä‰D$Eà‰D$ …øþÿÿÇD$‰…ôþÿÿ‰D$‰<$èîc…Àukƒ½üþÿÿ w‹üþÿÿ°Óà©au)©u¨u¸ô…À‰Eäu:ë1‹ƒOC닃KC닃GC…ÀtØ‹•ôþÿÿ‰|$‰T$‰$ÿÐ1ÀëÆÇEä‹Uä…Ò~ ‹…Xÿÿÿ‰T$‰<$‰D$ ‹…Tÿÿÿ‰D$èiÇD$‰<$èt!‹…ôþÿÿ‰$è‚%‰4$èMO‹]ô‹uø‹}üÉÃU‰åƒì8UôMä‰T$ÇEô‰L$‰$èBOºÿÿÿÿ@t ·EæfÁÀ·ÐɉÐÃU‰åWVSè[ì\·} ÇEäÇD$ÇD$Ç$è-P‰…Äþÿÿ¸3ÿÿÿƒ½Äþÿÿÿ„H‹Mäfÿÿ¿¸ÀÿÿFøEÔÇEԅɉ…ÀþÿÿÇEÜÇEàÆEÕÇEØ„™‹•ÄþÿÿEäÇD$‰D$ ÇD$ÇD$ÿÿ‰$è“O@u$‹…ÄþÿÿÇD$‰$èO‹•Äþÿÿ‰$éЋ…Àþÿÿ‹•ÄþÿÿÇD$‰D$‰$èÚM@tm‹…ÄþÿÿÇD$€‰$è»N@…îéš·ÇG‰ÂÁâfÁè Ћ•Àþÿÿf‰EÖ‹…ÄþÿÿÇD$‰T$‰$è‚M@u¨èWM‹0èPMƒ80t¹…öuµèBM•Ôþÿÿ‰T$ÇD$‹‰$è O‹•ÄþÿÿÇD$‰$èªN‹…Äþÿÿ‰$è*M¸5ÿÿÿéÔèóL•Ôþÿÿ‰T$ÇD$‹‰$è¼N‹•ÄþÿÿÇD$‰$è[N‹…Äþÿÿ‰$èÛL¸2ÿÿÿé…‹…Äþÿÿè§ýÿÿf…À„0‹U·À‰BÇD$ÇD$Ç$èNƒøÿ‰ÆuOèdL•Ôþÿÿ‰T$ÇD$‹‰$è-N‹…ÄþÿÿÇD$‰$èÌM‹•Äþÿÿ‰$èLL¸3ÿÿÿéöƒÒÇEÔÇEØÇEÜÇEàÆEÕ‰$èsLÇD$‰4$‰EØ‹…Àþÿÿ‰D$èòK@u<‹•ÄþÿÿÇD$‰$èPM‹…Äþÿÿ‰$èÐKÇD$‰4$è2M‰4$é‰þÿÿ‰ðè’üÿÿf…Àf‰ƒÎ6uCÇD$‰4$èM‰4$èK‹•ÄþÿÿÇD$‰$èéL‹…Äþÿÿ‰$èiK¸qüÿÿë‹U·À‰B ‹…Äþÿÿ‰r‰1ÀÄ\[^_ÉÃU‰åƒìX‰]ôè[‰uø·u‰}ü¿qüÿÿ‹ƒ)>…À…gÇ$f¿˜ÿèÿK…À‰EÄ„L·Æ‰D$‹Eĉ$èüÿÿ…À‰Çt‹Uĉ$ë]‹Eĉ$èÜ×ÿÿ…À‰ÇtV‹UÄÇD$‹‰$è&L‹UÄ‹‰$è§J‹UÄÇD$‹B‰$èL‹UÄ‹B‰$èƒJ‹Eĉ$è›JéÅ‹UÄũ’‰4$‰D$‰T$èóI‰4$ÇD$èíI‹ƒ J‰4$‰D$èÖI‹ƒ%J‰t$1öÇD$‰$èÉI…À‰¥‹UÄ¿˜ÿÿÿÇD$‹‰$èiK‹UÄ‹‰$èêI‹UÄÇD$‹B‰$èFK‹UÄ‹B‰$èÆI‹UÄÇD$‹B‰$è"K‹UÄ‹B‰$è¢I‹UÄÇD$‹B‰$èþJ‹UÄ‹B‰$è~IéËÇ$PÃFè[Kƒ»)>•Âþ'žÀ„ÐuÜþ'Ž•‹UÄ¿qüÿÿÇD$‹‰$è¡J‹UÄ‹‰$è"I‹UÄÇD$‹B‰$è~J‹UÄ‹B‰$èþH‹UÄÇD$‹B‰$èZJ‹UÄ‹B‰$èÚH‹UÄÇD$‹B‰$è6J‹UÄ‹B‰$è¶Hë‹EÄ‹x‰ø‹]ô‹uø‹}üÉÃU‰åWVS쬋E‹U‹Mè[‹‰…¤üÿÿ‹R‹E9•¤üÿÿ‰•¨üÿÿ‹I‰¬üÿÿ‹@ǃ};‰…°üÿÿ‰ÐM…¤üÿÿ•¸þÿÿ‰•tüÿÿUä9ÈBÁ;…°üÿÿB…°üÿÿ8ÿÿÿ‰€üÿÿ¸ýÿÿ@‰…´üÿÿEÔ‰…„üÿÿƒ‰‰•xüÿÿ‰|üÿÿ‰…püÿÿ‹•tüÿÿÇD$€ÇD$‰$èÜH‹€üÿÿÇD$€ÇD$‰ $è¾H‹…¨üÿÿ‹¨üÿÿÇD$ÇD$Á艅ˆüÿÿ¸ƒá‰Â‰ÇÓ⋈üÿÿ‰•Œüÿÿ ”8ÿÿÿ‹µ¤üÿÿ‹¤üÿÿÁîƒáÓç ¼µ¸þÿÿ‹ˆüÿÿ ”¸þÿÿ‹•¬üÿÿ‹¬üÿÿÁꉕüÿÿƒá‰ÂÓâ‹üÿÿ‰•”üÿÿ ”¸þÿÿ‹°üÿÿ‹•°üÿÿƒáÓàÁꉕ˜üÿÿ‰…œüÿÿ „•¸þÿÿ‹€üÿÿ‹…tüÿÿ‹•´üÿÿ‰L$ ‰D$‰$è(H@u2èšF•¸üÿÿÇD$‰T$‹‰$ècHÇ$èHé©þÿÿ…¼µ¸þÿÿ„‹xüÿÿ‹…„üÿÿ‹•¤üÿÿÇEä‰L$‰D$‰$èKF‰… üÿÿ@u&è)F•¸üÿÿÇD$‰T$‹‰$èòGéDþÿÿÇ$ èG…À‰ÇuÇD$¡‰$錋… üÿÿu¸‰‹E؉G·EÖfÁÀf‰Gƒøÿÿ‰|$‰D$‰4$èrEƒ@öÿÿ‰D$‰4$èeEÇD$‰4$èZE‹ƒyGÇD$‰t$‰$èEE…Àt,‰<$è±E‹• üÿÿÇD$‰$èêF‹ üÿÿ‰ $èjE‹…˜üÿÿ‹•œüÿÿ…”…¸þÿÿt‹°üÿÿ‰ $èÉÐÿÿ‹…üÿÿ‹•”üÿÿ…”…¸þÿÿt‹¬üÿÿ‰ $è¦Ðÿÿ‹…ˆüÿÿ‹•Œüÿÿ…”…¸þÿÿ„ýÿÿ‹xüÿÿ‹…„üÿÿ‹•|üÿÿÇEä‰L$‹¨üÿÿÇEÔÇEØÇEÜÇEà‰D$ÇD$ ÇD$‰T$‰ $èF…ÀޏüÿÿÆ„¸ýÿÿ‹E؉$èõD‹…püÿÿ‹•|üÿÿ‰D$‰$èTF…À„…üÿÿ‹¤üÿÿÇD$‰ $èÍE‹…¤üÿÿ‰$èMD‹•¨üÿÿÇD$‰$è©E‹¨üÿÿ‰ $è)D‹…¬üÿÿÇD$‰$è…E‹•¬üÿÿ‰$èD‹°üÿÿÇD$‰ $èaE‹…°üÿÿ‰$èáC‹U‰$èùCǃ};Ĭ[^_ÉÃU‰åVƒì‹E‹u ‹‰‹P‰V‹P‰V‹P ‰V ‹P‰V‹P‰V‹P‰V‹P‰V‹P ‰V ‹P$‰V$¶P(ÆF)ˆV(‹P,‰V,‹P0‰V0‹P4‰V4‹P8ƒÀ<‰V8V<‰T$‰$èR†ƒøuÇFHƒÄ^ÉÃU‰å‹E…Àt ƒÀ<‰EÉé{ÉÃU‰åWVƒì‹E‹} …Àt5‹pë,‹F‰<$‰D$è£D…Àu‹F‰D$‹E‰$èD…Àt ‹v$…öuÐ1öƒÄ‰ð^_ÉÃU‰å옉uø‹u‰}ü…ö„…Eˆ‰D$‹E ‰$è_D‰D$‹E ‰$ès‚…Àt`‹vEÀ‰E„E˜‰E€EЉ…|ÿÿÿëB‹~…ÿt8‹E„‰<$‰D$èD‰<$‰D$è3‚…Àt‹E€‰D$‹…|ÿÿÿ‰$èY{…Àt ‹v$…öuº1ö‰ð‹}ü‹uøÉÃU‰å옉uø‹u‰}ü…ö„…Eˆ‰D$‹E ‰$è´C‰D$‹E ‰$èÈ…Àt`‹vEÀ‰E„E˜‰E€EЉ…|ÿÿÿëB‹~ …ÿt8‹E„‰<$‰D$èqC‰<$‰D$舅Àt‹E€‰D$‹…|ÿÿÿ‰$è®z…Àt ‹v$…öuº1ö‰ð‹}ü‹uøÉÃU‰åVƒì‹E‰$èB…À‰Æt#‰$è*Bfƒøu‰4$è!B‰EƒÄ^Éé¦AƒÄ1À^ÉÃU‰åWVƒì‹E ‹}‰$èÓA‰Æ‹EÇë:‰4$èÜAfHu$‰4$èÆA‰|$‰$è›B…Àu ‹E‰0¸ë‰4$èA‰Æ…öuÂ1ÀƒÄ^_ÉÃU‰åWVƒì‹}ëG<‹wH‰$è y‰<$èÆ@‰÷…ÿuäƒÄ^_ÉÃU‰åWVƒì‹}ë|‹…Àt‰$èA‹G…Àt‰$èA‹G…Àt‰$è€@‹G …Àt‰$èq@‹G…Àt‰$èb@‹G…Àt‰$èË@‹G …Àt‰$è[ÿÿÿÇG‹w$‰<$è2@‰÷…ÿu€ƒÄ^_ÉÃU‰åƒìh‰]ôEàè[‰uø‹u‰D$‰}üÇEØÇEàƒhÇEÜÇEäÇEÔÇEÐÇẺt$‰$èpþÿÿ…À„E؉D$ƒü ‰t$‰$èOþÿÿ…À„ôƒl‰D$‹E؉$èó?ÇE°ÇE´…À‰E¼„±‰$èë?ÇE°ÇE´ÇE¸ÇEĉEÀén‹EÄ‹U¼‰D$‰$è°?‹M´…ɉE¬tÇ$(èï?‹U´‰B$‰U¸ëÇ$(èØ?‰E°‰E´‹U´…Ò„?‹E´Ç@$Ç@ Ç@ÇÇ@Ç@Ç@Ç@ Ç@‹Eà‰$èýÿÿ‹U´…À‰B”À¶øE܉D$‹E¬‰D$ƒt‰$è'ýÿÿ…Àt‹E܉$èÕüÿÿ‹U´…À‰u¿Eä‰D$‹E¬‰D$ƒ‰$èîüÿÿ…Àt‹Eä‰$èœüÿÿ‹U´…À‰Bu¿EÔ‰D$‹E¬‰D$ƒ‰$è´üÿÿ…Àu1öë*‹EÔ‰$è^üÿÿ…À‰Æt‹U‰D$‰$èÈ~‹U´…À‰Bu¿‰4$1öè>>EЉD$‹E¬‰D$ƒ‰$èWüÿÿ…Àt*‹EЉ$èüÿÿ…À‰Æt‹U‰D$‰$èo~‹U´…À‰B u ‹E´1ÿÇ@ ‰4$1öèÞ=‹U¬ẺD$ƒ%‰$‰T$è÷ûÿÿ…Àt*‹Ẻ$è¥ûÿÿ…À‰Æt‰D$‹E‰$è~‹U´…À‰Bu ‹E´1ÿÇ@‰4$è€=…ÿt/‹U´‰$è@üÿÿ‹E¸…ÀuÇE´ÇE°ë ‹E¸Ç@$‰E´ÿEÄ‹UÀ9UÄŒ†ýÿÿ‹E¼‰$è8=‹E´‹U ‰ë‹U°‰$èíûÿÿÇE°‹E°‹]ô‹uø‹}üÉÃU‰åWVSè[ƒìL‹EÇEäÇEàǃ£ ‰D$‹E‰$èÄ<ÇEÌ…À‰EЄ†‰$1ÿèÁ<UàÇẺUȉEÔEä‰EÄëT‹UЉ|$‰$è•<‹uÌ…öt$‹U ‹uä‰$‰T$‹UȉT$èÎûÿÿ‰F$‹Eà‰Eäë‹U ‰$‰T$‹UĉT$è­ûÿÿ‰EÌG;}Ô|§‹EЉ$è;<‹Eä‹U‰‹ẼÄL[^_ÉÃU‰åVSè[ƒì ‹u Eô‰D$‹EÇEôÇEð‰D$ƒÅ ‰$èúÿÿ…ÀtmEð‰D$‹Eô‰D$ƒÊ ‰$èýùÿÿ…Àt ‹Eð‰$è«ùÿÿë‹E…Àt‹Eëƒz‰$èp;‰F‰D$‹‰D$‹Eô‰$èzþÿÿº…À‰Fu1ÒƒÄ ‰Ð[^ÉÃU‰åƒì8‰}ü‹} ‰]ô‰uøÇEäÇEàÇEÜ‹è[…Àt‰$è¹:ÇEä‰D$‹E‰D$ƒê‰$èDùÿÿ…ÀtxEà‰D$‹Eä‰D$ƒï‰$è$ùÿÿ…Àt ‹Eà‰$èÒøÿÿë‹E…Àt‹E냟‰$è—:‰EÜ‹w‰D$‹‰D$‹Eä‰$èžýÿÿ…À‰F$t ‹E܉G¸ë1À‹]ô‹uø‹}üÉÃU‰åVƒì‹u‹‰$èr:‹F‰$è6ùÿÿÇFÇFƒÄ^ÉÃU‰åVƒì‹u…öt|‹…Àt‰$è7:‹F…Àt‰$è(:‹F…Àt‰$è¡9‹F …Àt‰$è’9‹F…Àt‰$èƒ9‹F…Àt‰$èì9‹F …Àt‰$è|øÿÿÇF‰uƒÄ^ÉéQ9ƒÄ^ÉÃU‰åWVSè[ƒìLEä‰D$‹EÇEäÇEà‰D$ƒd‰$è¿÷ÿÿ…À„*‹U ƒ]‹R‰D$‹Eä‰Uȉ$èZ9…À‰EÄ„‰$è`9ÇEÌÇEÔ‰EÐéÌ‹EÔ‹UĉD$‰$è39‹EÈ…À„¬Eà‰D$‹E‰D$ƒ”þ‰$è7÷ÿÿ…À„ˆ‹Eà‰$èáöÿÿ‹uÈ…À‰Çu ër‹v$‹V$‰Ủ|$‹F‰$èß9…ÀuäëA‹EÌ…Àt ‹F$‹ỦB$ë ‹F$‹U ‰B‹E 9pu‹ỦP‹F$‰4$‰EÈè<þÿÿ‹EÈ…Àt‹uȉ|$‹F‰$è‰9…Àt¬ÿEÔ‹UÐ9UÔŒ(ÿÿÿ‹Eĉ$è]8ƒÄL¸[^_ÉÃU‰åW¿Vƒì0‹u Eô‰$èz9ÇEäëI‹VH…Òu ÇEäë5‹B4…Àt$;Eô}‹BH‰FHÇBH‰$è•öÿÿ‹E‰òÿHë ‹B8…Àt‰Uä1ÿ‰Ö…ö‰ú•À„Âu¬‹EäƒÄ0^_ÉÃU‰åVƒìd‹u‹F ‰4$‰EôE¬‰D$è_ÿÿÿ‹Uô‰V ƒÄd^ÉÃU‰åW1ÿVƒì0‹E ‹p ÇEäë‹U‰4$‰T$è‰8…Àu‰÷ë‰uä‹vH…ö•Â…ÿ”À„ÐuÕ…ÿtIEô‰$è•8‹G4…Àt7;Eô}2‹Uä…Òt ‹GH‹Uä‰BHë ‹GH‹U ‰B ÇGH‰<$1ÿè²õÿÿ‹E ÿHƒÄ0‰ø^_ÉÃU‰åW1ÿVƒì‹E ‹p ëH‹U‰t$‰$èö7…Àu.…ÿt‹FH‰GHë ‹FH‹U ‰B ÇFH‰4$èZõÿÿ‹E ÿH1Àë‹FH‰÷‰Æ…öu´ƒÄ^_ÉÃU‰åƒì‰}ü‹} ‰uøG‰$èä6…À‰Æt‹E‰|$‰4$‰D$èÕ6Æ>‰ð‹}ü‹uøÉÃU‰åƒì‹E‰uø‹U ‰}ü‹x‰T$‰|$‹‰$èh7…À‰Æu‹E ‰$èM79ǸÿÿÿÿBð‰ð‹}ü‹uøÉÃU‰åƒì‰}ü‹}‰uø‹G‰D$‹E ‰D$‹‰$è7…À‰Æu‹E ‰$è79G¸ÿÿÿÿBð‰ð‹}ü‹uøÉÃU‰åWVƒì‹}‹G;E w‹O9M v^‹U )‰ЋW 9ÐBÂ4ë‹W ‹G+E 9Ðv=‹u ÖF‰D$‹‰$è"6…Àu‹E @‰D$‹‰$è 6º˜ÿÿÿ…Àt ‹u ‰‰w1҃ĉÐ^_ÉÃU‰åƒì‰uø‹u‰}ü…öˆ‹E‹H9΂‹U ‹E…Ҕ…À”À1ÿÂuq‹U‹M‰D$‰ $è,ÿÿÿ…À‰ÇuV‹E‰ò‹@‰T$U)ð‰D$‰$è:5‹E‹U‹M 0‰T$‰L$‰4$è5‹E‹UP‰P‹M‹Æë¿þÿÿ‰ø‹uø‹}üÉÃU‰åƒì‰}ü‹}‰uø‹u ‹G‰4$‰D$ è‘5‰t$‰<$‰D$èÿÿÿ‹uø‹}üÉÃU‰åƒì‹U‹B‰$‰D$ ‹E‰D$‹E ‰D$èëþÿÿÉÃU‰åƒì‹M‰}ü‹U ‰uø‹}‹A…ÀtI :9Ès‰Ç1À)×ë)È‹M‰D$:‰$‰D$èS4‹E‹p‰$)þ‰t$è þÿÿ‹U‹‰rÆ0‹uø‹}üÉÃU‰å‹U‹ÇÇBÇBÉÃU‰å‹EÇ@ ÇÇ@Ç@ÉÃU‰åVƒì‹u…öt%‹‰$èì2ÇF ÇÇFÇFƒÄ^ÉÃU‰åƒì‰uø‹u‰}ü‹}‰4$è­ÿÿÿ‹E ‰~‰~‰‹uø‹}üÉÃU‰åƒì‹M ‰}ü‹}‰uø…Éu‹E1ö‰$èwÿÿÿë@‹U‰|$‰$èýÿÿ…À‰Æu+…ÿt!‹U‹‹U ‰|$‰$‰T$è)3‹U‹Æ8‹E‰x‰ð‹}ü‹uøÉÃU‰åVƒì‹u ‰4$è¼3‰t$‰D$‹E‰$èlÿÿÿƒÄ^ÉÃU‰åWVƒì0¶E‹UÇEàˆEß‹EJ‰Uä‰Eð‹E ‰EôEð‰EØëU‹UàUä‰ÐÁè4Ñþ€}߉÷t‹U‹ò‰D$‹E؉$èÀûÿÿë‹U‹ò‰D$‹E؉$èõûÿÿƒø~F‰uàë}N‰uä‹Uä9Uà~£¿ÿÿÿÿƒÄ0‰ø^_ÉÃU1ɉåW‹U V‹}‹uë ‹BƒÂ9øt A9Îñ¹ÿÿÿÿ^‰È_ÉÃU‰åVƒì‹u…öt‹F …Àt‰$è1‰uƒÄ^Éé1ƒÄ^ÉÃU‰åVƒì‹u‹E ÇD$³‰4$‰D$è™2Ɔ³ƒÄ^ÉÃU‰åVƒì‹u‹E ÇD$ÿ‰4$‰D$èk2ƆÿƒÄ^ÉÃU‰åƒì‹E‰uø¾³‰}ü‹}=´Bð‹E ‰t$‰<$‰D$è,2Æ7‹uø‹}üÉÃU‰åWVƒì ‹}‹u ‹G,‰$èø1@‰Eð‹G0‰$èé1@‰Eô‹‰‹G‰F‹G‰F‹G ‰F ‹G‰F‹G‰F‹G‰F‹G‰F‹G ‰F ‹G$‰F$¶G(ÆF)ˆF(‹Eð‰$èÍ0º˜ÿÿÿ…À‰F,ti‹Mô‰ $è¶0…À‰F0u‹F,‰$èÍ/º˜ÿÿÿëE‹V,‹G,‹Mð‰$‰D$‰L$èŽ0‹V0‹G0‹Mô‰$‰D$‰L$èu0ºÇF4ÿÿÿÿÇF8ƒÄ ‰Ð^_ÉÃU‰åƒì8‰uü‹u‰]øè[…ötU‹F,…Àt‰$èP/‹F0…Àt‰$èA/‹V4ƒúÿt(E܉D$‹ƒ.‰T$‰$èÁ.…Àu ‹Eà‰$èÕýÿÿÇF4ÿÿÿÿ‹]ø‹uüÉÃU‰åWVƒì‹}ë‰<$èuÿÿÿ‹w8‰<$èâ.‰÷…ÿuçƒÄ^_ÉÃU‰åW1ÿVƒì‹E‹0ëA‹U ‰t$‰$è@0…Àu'…ÿt‹F8‰G8ë‹F8‹U‰ÇF8‰4$èŒÿÿÿ1Àë‹F8‰÷‰Æ…öu»ƒÄ^_ÉÃU‰åWVƒì‹} ‹uë‰|$‰4$èç/…Àt‹v8…öuéƒÄ‰ð^_ÉÃU‰åWVƒì‹} ‹uë‹N,‹‹G‰ $‰T$‰D$èü.…Àt‹v8…öu݃ĉð^_ÉÃU‰å‹EÇ@Ç@‹U ‰1ÀÉÃU‰åVƒì‹u‹E ‰D$‹‰$è#/‹‰$è§-‰Â¸0ÿÿÿBºEƒÄ^ÉÃU‰åWV‰Æìp¶E ‰•Ìþÿÿ‰ÈþÿÿÇ$ˆ…ÇþÿÿèG/‹U‰…Ðþÿÿ‹‹>…Òˆ=…dÿÿÿ‰…´þÿÿÇD$€ÇD$‰$è7.•äþÿÿ‰•¸þÿÿÇD$€ÇD$‰$è.€½Çþÿÿt‰ú‰ùÁêƒá¸Óà „•dÿÿÿë‰ú‰ùÁêƒá¸Óà „•äþÿÿ‹Uw‹ÇEè‰EäE䉅Àþÿÿ‹U‹…Àu&‹…¸þÿÿ‹•´þÿÿÇD$ÇD$ ‰D$‰T$ë&‹…Àþÿÿ‹•¸þÿÿÇD$ ‰D$‹…´þÿÿ‰T$‰D$‰4$è°-…À„:@uè,ƒ8tŽé_UôE쉕¼þÿÿ‰T$ ÇEðÇEì‰D$ÇD$"ÇD$ÿÿ‰<$èI,EðÇD$‰D$ ÇD$"ÇD$ÿÿ‰<$èD-‹µÈþÿÿ€½ÇþÿÿÇ…ÔþÿÿtS‹•Ìþÿÿ‰t$ÇD$ ‰<$‰T$èï,‰Æë;‹…Ôþÿÿ…ÌþÿÿÇD$ ‰t$‰D$‰<$èÛ,ƒøÿtj…Ôþÿÿ)Æ…öË‹µÔþÿÿ‹EìÇD$"ÇD$ÿÿ‰<$‰D$‹…¼þÿÿ‰D$ è¥,…öx[‹U‹:…ÿtWÇ$è-+…Ðþÿÿ)Ç‹E‰8ë<¾1ÿÿÿë5‹Eì¾ÿÿÿÿ‹•¼þÿÿÇD$"ÇD$ÿÿ‰D$‰T$ ‰<$èH,ë¾0ÿÿÿÄp‰ð^_ÉÃU‰åV‹u‹E‹U ‹MÇE ‰u^ÉéýÿÿU‰åV‹u‹E‹U ‹MÇE ‰u^ÉéõüÿÿU‰å‹UÇB‹E ‰‹E‰B‹Ef‰B1ÀÉÃU‰å‹E‹P‹E ;PÉ”À¶ÀÃU‰åVƒì‹uF‰$èU÷ÿÿF ‰$èJ÷ÿÿ‰uƒÄ^ÉéA*U‰åƒì‰]øè[‰uü‹uǃÅÿÿÿdž˜Ç†œ‰D$ƒ®ÿÿÿ‰D$Fd‰$è?)† ƒÆH‰$è»öÿÿ‹]ø‰u‹uüÉé¬öÿÿU‰åVƒì‹uƒ>u@FdÇD$‰$èî(† ‰$èŸöÿÿFH‰$è”öÿÿ‹†°‰$èŠ)ǃÄ^ÉÃU‰åWVƒì ‹EƒÀd‰Eô‰$è¬(ë%‹~‹E ‰<$‰D$è·óÿÿ…Àt‹Eô‰t$‰$è(…À‰ÆuÕ1ÿƒÄ ‰ø^_ÉÃU‰åVƒìD‹E ‹uÇD$‰EÔẺD$‹EƒÀd‰$èB(1Ò…Àt…ö‹Pt ‹B ‰‹B‰FƒÄD‰Ð^ÉÃU‰åƒì(‰uø‹u‰}ü‹F…ÀtHèz(Ç‹E ‰D$Eô‰D$‹‰$èd*…À‰Çx‹F;Eôu‡ÿÿÿƒøývè<(ƒ8"u¸ÿÿÿÿë‰ø‹uø‹}üÉÃU‰åVƒì‹uÇD$ÜÇD$‰4$è:)dž´džÀƆ¸‰4$èëýÿÿ–І ÇBÆB‰†ÐÆFX‹E dž¼‰F@ƒÄ^ÉÃU‰åWV1öƒì ‹}‹‹G¶ˆE÷ë¾À‰$èŽ'‹ˆ2‹F¶2„Àuå‹GÆ‹7‹E ‰4$‰D$è_)¶M÷‰Â‹G…Òˆ ¸ÿÿÿÿt‰Ð+ƒÄ ^_ÉÃU‰åƒì‰]ø‹Eè[‰uüÇD$ ‰$³i‰t$èðõÿÿ1Òƒøÿt‹Æ‹]ø‰Ð‹uüÉÃU‰åWVSƒì<‰E܉MÔ‹M܉UØ‹è[‹‰ÇBy‰Eä9Ç„­¶7‰ð¾À‰EàFà<^w‹MàƒÉö‰$‰L$èq(º…Àt1Ò…Òtf‹EØ‹Éöw‰8‰MÐëF¶¾Ðƒè <^w‹EЉT$‰$è2(º…Àt1Ò…ÒuÔ‹MÜ€y”Â9uä”À„Ð… ‹EØ)þ1Ò‰pét‰ñ€ù ”€ù ”ÀÂtF‹EØO‰8ëA¶< ”Â< ”ÀÂuî‹EÜ€x”Â9Mä”À„Ð…Ë‹EØ)ùº‰Hé‰ñ€ù u+‹E؉8G9Eä„¡€ t‹MØéê‹EØÇ@ë‰ñ€ù u‹E؉8Ç@ºé͉ñ€ù"uy‹E؉8GëT¶p€ù"tU€ù\u9uäv=€xpë.€ù—€ù•À„Ðu€ù ”€ù ”ÀÂu1À€ù u¸…À„ˆ‰ð;Eär§¸ë‹MØ)þº‰qëM‹Eà‰D$ƒÉö‰$èÀ&…Àt‹Mغ‰9ÇAë!‰ð<–Â<”ÀÐt/‹M؉9ÇAº‹MÜ‹A‹MØA‹M܉A‹EÔ‰¸ë¸ƒÄ<[^_ÉÃU‰åVƒì‹uÇD$ÜÇD$‰4$è %dž´džÀƆ¸‰4$èQúÿÿ–І ÇBÆB‰†ÐÆFXdž¼ƒÄ^ÉÃU‰åW‰ÇV¾Sè[윉tÿÿÿ‹@ÆEƒ‰…|ÿÿÿéî€ù%…ý¶rƒÂ‰U´‰ñ¾ÑBàƒøX‡Â‹„ƒNØÿà88 Ëó²ÀÀØù“œªÆù‹…tÿÿÿMàƒ…tÿÿÿ‹‰E¬‹G‹U¬‰E‹‹EÇB‰EÄÆE‹ÇEŒ‰hÿÿÿ‰…pÿÿÿ‹hÿÿÿ‰ø‹•pÿÿÿèþúÿÿƒø‰ÆuH€}‹u"ƒ}àu‹EÈ‹WÆE‹)‰UŒë‹EÈ‹M¬A뾃}àu‹U¬‹BEȉBÆE‹ë¦‹MŒ‰Oë?‹EéT‹U¬‹¶L0ÿ€ù •€ù •À„Ðt€ù •€ù •À„Ð…s‹M¬Fÿ‰A‹E¬‹p…öu¿é[‹…tÿÿÿM䃅tÿÿÿ‹‰øèHúÿÿƒø‰Æ…<‹Mä…ÉéˆM䉸UÔè&úÿÿƒø‰Æ…ƒ}äég‹…tÿÿÿ‰òƒ…tÿÿÿ€úd‹OUÄ‹ÇE„ ‰M˜‰•pÿÿÿ‰E°¸DE„‰E„Eà‰Á‰øèÍùÿÿƒø‰Æup‹Uà…Òtf¾ëcè­ ÇEÜ‹M„‰D$‹EĉL$‰$è–"…À‰E”x"‹EÄEÈ;EÜu‹E”ÿÿÿƒøývèj ƒ8"u¾‹M”ƒþ‹U°‰ „U‹E˜‰GéJ‰ò€úSt M̉xÿÿÿë‹…tÿÿÿƒ…tÿÿÿ‹‰…xÿÿÿ‹GMÄ‹•xÿÿÿ‰E ÇB‹‹G‰E܉pÿÿÿ‰…lÿÿÿ‹lÿÿÿ‰ø‹•pÿÿÿèãøÿÿƒø‰Eœ…‹E܃øtƒøt‹•xÿÿÿ‹BEȉBëËG+EȉGë€t‹xÿÿÿƒyÀ÷ЃÀ‰Eœë‹U ‰W‰ñ€ùU”ƒ}œ”À„Ðt1‹…tÿÿÿƒ…tÿÿÿ‹•xÿÿÿ‹‰D$‹B‰D$‹‰$èU_H…Æ‹uœé?‹…tÿÿÿƒ…tÿÿÿ‹w‹‰E¨‹‹U¨‹‰MÄE܉pÿÿÿ‰…lÿÿÿ‹•pÿÿÿ‰ø‹lÿÿÿèú÷ÿÿƒø‰Â…ƒƒ}ÜuÜ‹G+EÈ‹M¨‰G)ð‰Aég‹‹O;Hƒ´‹€}ƒ¶ˆE¦A‰Gt ‰ð:E¦u'鞉$蟉ƾE¦‰$è‘9Æ„|ÆEƒ¾éwÆEƒéi‹…tÿÿÿM䃅tÿÿÿ‹‰øèV÷ÿÿƒø‰Æ…Jƒ}äëšM䉸UÔè8÷ÿÿƒø‰Æ…,ƒ}ä„‹G+EØéÅýÿÿ‹…tÿÿÿƒ…tÿÿÿ‹‹G‰éù‹‹W;P…oÿÿÿ‹€<é;ÿÿÿ€ù ¾ñtv€ù …ŠUàMĉ•hÿÿÿ‰pÿÿÿ‹•pÿÿÿ‰ø‹hÿÿÿ‹wè­öÿÿƒø‰Âu)ƒ}àu‹•pÿÿÿ‰ø‹hÿÿÿèöÿÿƒø‰Âuƒ}àt½‰wƒúu €¸EЉÖëgM䉸UÔè[öÿÿƒø‰ÆuSƒ}äé þÿÿ‹‹W;Ps0‹€}ƒ¶ˆE§B‰Gt:M§éyþÿÿ‰4$è‰Æ¾E§é{þÿÿ¾ë ÆEƒ¾‹U´¶ B‰E´„Ét ƒþ„üøÿÿëƒþt‹•|ÿÿÿ‰Wëƒ}œ…:ýÿÿéýÿÿÄœ‰ð[^_ÉÃU‰åƒì‹EM‹U ‰Môè†øÿÿÉÃU‰åWVSè[ƒìl‹uEä‰EÀ}ÔÆÐ‹MÀ‰ú‰ðètõÿÿƒø‰Âu‹EäHƒøvä‹F+E؉Fƒú‰Ð…\E܉D$ƒì‰D$‰4$è}ÿÿÿƒø…:‹EÜEà¶0Æ‹EƒÀD‰D$‹EƒÀ`‰D$ ‹EƒÀ\‰D$ƒŸì‰D$‹E܉$è ‹MÜ‹Uà‰Ç‰ðƒÿˆ…à‹E‹P\…ÒˆÒ‹x`…ÿˆÇ‹pD…öˆ¼‹Mܺ‹»­‰Mľ=ÿ‡öD‡5tz¶1‰ð¾À=ÿ‰E´wnöD‡5tgAëä‰ð< •Â< •À„ÐtëhA¶1‰ð< ”Â< ”ÀÂuì‹Eà‰Ê+UĉL$)ЉD$‹EƒÀH‰$èÓèÿÿ…Àu#‹EÇ€¼¸ë!AékÿÿÿJ…dÿÿÿë“‹EÇ€´ô¸ƒÄl[^_ÉÃU‰åWVƒì@‹} }uضˆEׯ‰4$èççÿÿ‹U ‹E‰4$‰T$‰D$è-èÿÿ‹UMEè‰uèÇEìÆEð‰Môèxöÿÿ¶U׈ƒÄ@^_ÉÃU‰åWVS쌋Eè[UäÇE¤‰UЉE E܉E”‹U ‹M‹E ‹r‹U”èDóÿÿƒø…D‹Eäƒøu8‹E€xXt‹P…ÒuÇ€¼1Àé‹U¸Ç‚¼é…À…÷EÔ‰D$ƒˆê‰D$‹E ‰$èýÿÿƒøt ‹U ‰réЋEೋùÇD$ÇD$ !‰t$‰D$‹E܉$èÛçÿÿƒøÿt>ƒ|Æu ‹UÇB ‹|ÆE¨‰D$‹EÇD$‰}°ƒÀd‰$èç…Àt=‹Hë0‹EÜEà¶0Æ‹E܉D$‹E‰$èðÿÿ‹}à‹U܉Á‰ðˆ:¿ÿÿÿÿ…É…ÉÇ$,è/…À‰Æ„¤@‰E˜‰$èæÿÿV ‰Uœ‰$è æÿÿ‹EØ…ÀuƒCó‰EÔÇEØ‹Eà‰D$‹E܉D$‹E˜‰$èdæÿÿ…Àu‹EØ‹Uœ‰D$‹EÔ‰$‰D$èGæÿÿ…Àt ‰4$èÙ釋F‰~‰‹F ‰F‹E‰t$ƒÀd‰$èçƒ}¤˜…þÿÿ‹UÇ‚´ôë[‹uØ…ö„ôýÿÿq ƒê‰D$‰4$èhäÿÿ‰4$‰E¤‹E؉D$‹EÔ‰D$èˆäÿÿƒ}¤˜”ƒø˜”À„±ýÿÿ‹EÇ€´ô¸ÄŒ[^_ÉÃU‰åƒìx‰uø‹u‰]ô‰}üè[‹†Ð‹†Ô€~Xdžœ‰†˜‹†Ô‰†Ìtƒ~w^‹N¸Óà¨ìtPë=‹NDùÌ”Âù0”ÀÂu$Aœƒøcv‹F@ƒøtƒøtƒøt ƒøtƒøu1Àdž¼éèE´~dÇE¼‰E¤‰D$ÇD$‰<$袅Àt7‹P‹B ‰Eà‹B‰Eäƒôç‰D$Eà‰$èCïÿÿ…ÀxdžÀé„‹E¤ÇE¼ÇD$‰<$‰D$èI…Àt4‹P‹B ‰Eà‹BÇD$ ‰EäEà‰$èîÿÿdžÀ‰†Äë.€~Xtƒ~uƆ¸¸dž´›ëdžÀ¸‹]ô‹uø‹}üÉÃU‰åWVSè[쌋U‹‚¼ƒø„Š‚Zƒø„Aƒø…ĺ‹Mƒ¹À‡Ç‹À‹„ƒYØÿàf ÌuÒ—}/‹u‹ŽÌ‹†¤‹–Ä)È9Љ†œr2v– Æ ‹ŽÌ‹–Ä‹Eˆ ‰œ‰ˆ˜éºé(‹uUÌ‹EÆÐÈ‹~‰D$ƒiæ‰T$ ‰D$‰4$è…øÿÿƒø‰Ât‰~ƒú„ ÿÿÿé•‹F‰|$)ø‰D$‹E ‰$èœáÿÿ‰~‹M‹¹È…ÿu&‹Ô+ÌÇÀ‰œºéÈþÿÿ‹udžÀëç‹E‹ˆÔ‹È‹€¤)È9ÐŒ,ÿÿÿ‹E4‰°Ôƒpæ‰D$‹EЉ$èÆ÷ÿÿƒø‰Ât‹M‹Ô+ȉÔé*ÿÿÿ‹U‹‚Ô‰t$)ð‰D$‰Ð ‰$èÏàÿÿ‹M‹œȉ±ÔÇÀ‰œé5ÿÿÿ‹E‹°Ô‰$èzùÿÿƒø‰Â…Âþÿÿ‹U‹‚ ‚ÌÇ‚¼‰‚˜‹‚Ô‰t$)ð‰D$‰Ð ‰$èKàÿÿ‹M‰±Ôéå‹u‹†¤‹–̉Á)Ñ– ‰Žœ‰†Ô‰–˜ºé.‹U‹‚Ћ‚Ô€zXÇ‚œ‰‚˜‹‚Ô‰‚Ìt#ƒzwo‹J¸Óà¨ìtaÇ‚¼éZ‹u‹NDùÌ”Âù0”ÀÂu$Aœƒøcv‹F@ƒøtƒøtƒøt ƒøtƒøu‹EÇ€¼é‹u} ÇE¨‰|$ÇD$ƒÆd‰4$è0…Àt:‹P‹B ‰EÜ‹B‰Eàƒaæ‰D$E܉$èÑêÿÿ…Àx‹UÇ‚ÀéŽýÿÿÇE¨‰|$ÇD$‰4$è×…Àt:‹P‹B ‰EÜ‹BÇD$ ‰EàE܉$èéÿÿ‹MÇÀ‰Äé5ýÿÿ‹u€~Xtƒ~uƆ¸‹EÇ€´›éž‹UÇ‚Àéûüÿÿ‹M‰ $èF÷ÿÿé5‹uẺE}äÆÐ‹U‰ù‰ðè«êÿÿƒø‰Âu‹EäHƒøvä‹F+EЉFƒú…AUÔƒsæ}܉U”‰T$ ‰|$‰D$‰4$è¬ôÿÿƒø…ž‹Eà³yöÇD$ÇD$ ‰t$‰D$‹E܉$èqßÿÿ…ÀˆÏƒ|Æ…—‹MÇA ‹E؉D$‹EÔ‰$èÛÿÿ‹u…À‰Â‰†°„w‰ðƒÀ‰D$‹E؉$‰D$èÝPH…ƒdž¼1ÒéwE ‰D$‹E”‰|$‰4$‰D$ ƒ}æ‰D$èáóÿÿƒø‰Â…H‹E؉D$‹EÔ‰$è›Úÿÿ‹M…À‰Â‰°„‰ÈƒÀ‰D$‹E؉$‰D$èYPH…ÿ‹E E¤¶0Æ‹EƒÀ`‰D$ ‹EƒÀ\‰D$ƒ“æ‰D$‹E ‰$èÈ‹M ‹U¤‰Ç‰ðƒÿˆ…´‹U‹r\…öˆ¦‹J`…Ɉ›‹Eà³yöÇD$ÇD$ ‰t$‰D$‹E܉$èüÝÿÿ…Àx^‹DÆ‹M‰AǼédùÿÿ‹u‰4$èóòÿÿ‰Âƒú„Nùÿÿë?‹UÇ‚´ë+‹MÇ´ôë‹udž´ôë ‹EÇ€´õºÄŒ‰Ð[^_ÉÃU‰åVƒì‹E‹u‰D$‹E ‰D$† ‰$èÛÿÿ…Àu ‰uƒÄ^Éé·øÿÿdž´ôƒÄ¸^ÉÃUº‰åWVSè[ƒìl‹uƒ¾À‡»‹†À‹„ƒ&ØÿàÏfB“4>Ô‹ŽÌ‹†¤‹–Ä)È9Љ†œ‚v– Æ ‹ŽÌ‹–ÄŽ ‰–œ‰Ž˜éV¾Ð‹G‰<$‰E¤Eà‰D$ †È‰D$ƒ߉D$ècñÿÿƒø‰Ât‹E¤‰Gƒú„/ÿÿÿé ‹G+E¤‰D$‹E¤‰D$† ‰$èuÚÿÿ‹E¤‰G‹†È…Àu&‹†Ô+†ÌdžÀ‰†œºéÕþÿÿdžÀëꋎԋ†¤‹–È)È9ÐŒ‰<ƒ ߉¾Ô‰D$†Ð‰$èªðÿÿƒø‰Ât‹†Ô+†È‰†Ôé6ÿÿÿ‹†Ô‰|$)ø‰D$† ‰$èºÙÿÿ‹†œ†È‰¾Ô‰†œét‹¾Ô‰4$èuòÿÿƒø‰Â…âþÿÿ‹† †Ìdž¼‰†˜‹†Ô‰|$)ø‰D$† ‰$èJÙÿÿ‰¾Ô1Òé´‹†¤‹–̉Á)Ñ– ‰Žœ‰†Ô‰–˜ºé‚‹†Ð‹†Ô€~Xdžœ‰†˜‹†Ô‰†Ìtƒ~w\‹N¸Óà¨ìtNë=‹NDùÌ”Âù0”ÀÂu$Aœƒøcv‹F@ƒøtƒøtƒøt ƒøtƒøudž¼é5ÿÿÿE´~dÇE¼‰E ‰D$ÇD$‰<$èI …Àt7‹P‹B ‰Eà‹B‰EäƒþÞ‰D$Eà‰$èêãÿÿ…ÀxdžÀéÑýÿÿ‹E ÇE¼ÇD$‰<$‰D$èð …Àt7‹P‹B ‰Eà‹BÇD$ ‰EäEà‰$è¨âÿÿdžÀ‰†Äéxýÿÿ€~Xtƒ~uƆ¸ºdž´›ëdžÀéEýÿÿºƒÄl‰Ð[^_ÉÃU‰åVSƒì‹U‹u è[‹‰‹B‰F‹B‰F‹B ‰F ‹B‰F‹B‰F‹B‰F‹B‰F‹B ‰F ‹B$‰F$‹B(‰F(‹B,‰F,‹B0‰F0‹B4‰F4ƒ5Û‰D$F‰$è)C…Àu"‹N$…Ét‹V…Òuƒ:Û‰F1ÀÇF블ÿÿÿƒÄ[^ÉÃU‰åVƒìT‹E uÀ‰t$‰D$‹E‰$è&Jº”ÿÿÿHu‹E‰4$‰D$èÿÿÿ‰ÂƒÄT‰Ð^ÉÃU‰åWVƒì‹} ‹E‰|$‰$èøþÿÿÇD$ÇD$Ç$èk ƒøÿ‰Æuf¾3ÿë7G(ÇD$‰D$‰4$èË @u‰4$ÇD$è% ‰4$¾4ÿÿÿè¦ ƒÄ‰ð^_ÉÃU‰åƒì8‹E‰]ôè[‰}ü‹} …À‹E”‰uø…À”ÀÂu"‹E‹…Ò•Á…ÿ”À„Èu‹Eƒx ý…®ë#‹}¾›ÿÿÿ…ÿ„å‹U¾›ÿÿÿÇéÒ„Éu 1ÒÇEäë}B¾˜ÿÿÿ‰$è …À‰E䄨‹M‹‰D$ƒÍÙ‰D$‹Eä‰$èj ‹Uä‰$è› ‹M‹uä‰EàÆ‹‰|$¿‰4$‰D$è» ‹U‹fÇ ‹MàTë‰}ä1ÿE‰D$ ‹Eä‰T$‹U‰D$‰$èÚÝÿÿ…ÿ‰Æt ‹Mä‰ $è“…öy ‹EÇë‹U‰21ö‰ð‹]ô‹uø‹}üÉÃU‰åWVì‹} ‰<$èuëÿÿ¹ƒøtwáÿÿÿƒø‰Â…Bëd‹Eµø÷ÿÿ‹MÇD$‰t$‰D$ ‰ $è.Ýÿÿƒø‰Â~1‰D$‡ ‰t$‰$è"Ôÿÿ…ÀuY‰<$è ëÿÿƒøtƒøt©éÁ…Èë/…Ét˜‰<$èíÿÿƒøuƒ¿¼ºë1Òƒø…餋EÇëºLJ´ô鎋MǺ‰ÿÿÿë~‹Eµø÷ÿÿ‹MÇD$‰t$‰D$ ‰ $èlÜÿÿƒø‰Â~;‰D$‡ ‰t$‰$è`Óÿÿ…Àu—‰<$èbìÿÿƒøu ƒ¿¼t‰Âëƒøtœëõtˆ‹‡´‹M‰ë …Òt‡ºÄ‰Ð^_ÉÃU‰å‹MV‹u …ɔ…ö”ÀÂu‹E…Àt‹œ‰‹Ä‹U‰1À븛ÿÿÿ^ÉÃU¸›ÿÿÿ‰å‹U…Òt Ç‚ì1ÀÉÃU¸›ÿÿÿ‰åVƒì‹u…öt2†ÜÇD$‰$è~Øÿÿ‰4$è’Üÿÿdžè‰4$èS1ÀƒÄ^ÉÃU‰åƒ}V‹M‹u‹E ”Â…ÀŸÀ„ÐtÇÇë ‹E‰‹E ‰^ÉÃU‰åì(‰]ôè[‰uøµèúÿÿ‰}ü‹}‰4$è¯@uÆ…èüÿÿ‰D$ ƒ#Ö‰t$‰<$‰D$è%‹]ô‹uø‹}üÉÃU‰åWVSè[ƒì\‹}E‰EäÇEÀÇEÄÇEÈÇEÌÇEÐÇEÔé ¾ þÿÿ鯋MÐ…É„†‹Eԉ‰ƋEÀÁú9Uĉ×| 9uÀv‰ð‹MЋ…Òt‰D$‹EÈ‹U¸‰D$‹ƒƒ‰$ÿPë‹M¸‰D$‹EÈÇD$‰L$ ‰$èĉE¼‹E¼‰ÂÁú)EÀUÄ‹UЋ‚ä…Ày,‰uÀ‰}Äë$‹M¸‹EÔ‹UÈÇD$‰L$ ‰D$‰$è}‰E¼‹E¼…ÀuB‹}Ð…ÿ„%‹MЋq…ö„‹E ‹UÇD$‰D$ ƒ Ö‰D$‰$èqØÿÿéã‹MÐ…É„§‹MЋQ…Ò„™‹UÈuÚ‹E¼fÇ ‰D$ƒÖ‰D$‰4$è[‰4$èfÇ Æ@‰4$è{‹Uȉt$)‰$‰D$訉4$è^‹M ‰L$ ‹M¼T‹M‰T$‹Uȉ $)‰T$èÏ×ÿÿ‰4$‰Çè.‹U¼D9Çë#‹M ‹E¼‹UȉL$ ‹M‰D$‰T$‰ $èš×ÿÿ9E¼u ‹EÄ EÀ…þÿÿ1ö‹EÐ…Àu ë!¾ þÿÿëð‹UЋ…Àt‹M¸‹ƒƒ‰ $ÿPë ‹E¸‰$è‹Ủ$èéžÐéI€úXu=‹UàB‰EàƒAЋ2‰D$‹E‰$èÏÇÿÿ…À… ‰4$èqý‰D$‰t$éJýÿÿ€úRuP‹UàB‰Eà‹E‹2‹U ‰D$ ƒPЉD$‹…Ôþÿÿ‰T$‰t$‰$èîü‰4$èå‹•Ôþÿÿ‰T$‰D$éø€úB…Æ‹UàB‰Eà‹2‰4$è¶“cЉT$‹•Ðþÿÿ‰t$ ‰$‰D$ƒwЉD$ƒˆÐ‰D$èƒü‹…Ðþÿÿ‹Ðþÿÿ‰D$ƒ3Ò‰D$‹ƒÁÿþþþ÷Ð!Â €€té‰ÐÁè÷€€DÐADÈÒƒÙ+ÐþÿÿÇD$ƒ”ЉL$‹U‰D$ ‹E ‰T$‹U‰D$‰$éG€úQ…‹UàB‰Eà‹‰$èþÒÿÿ‹MàQ‰Uà‹1‹MàQ‰Uà‹U‰T$,“™Ð‰T$(‹U ‰T$$“›Ð‰T$ ‹‰D$ƒ¤Ð‰D$ ‹E‰t$‰T$“¢Ð‰T$‹U ‰D$‹E‰T$‰$ëz€úqu|‹UàB‰Eà‹2‹UàB‰EàE¨‰D$‹‰$è¼îÿÿ…À…¤‹EÌ‹U‰t$‰D$$‹EȉT$‹U‰D$ ƒ­Ð‰D$‹E¼‰$‰D$‹E¸‰D$ƒ´Ð‰D$ ‹E ‰D$èKúÿÿëA€úTu@‹UàB‰Eà‹‰D$ƒ¹Ð‰D$ƒ_ЉD$ ‹E‹U ‰D$‹E‰T$‰$èúÿÿ…Àu¶G„Ò…*úÿÿ1öë¾”ÿÿÿ뾘ÿÿÿ‹U‰$è&ÆÿÿÄ\‰ð[^_ÉÃU‰åƒìX‰]ôè[‰}ü‹}‰uø‰<$èœúƒÀƒàð)ÄD$0‰EÜ‹E‰<$‰D$è~ú‰<$‰D$èOîÿÿ…À‰Æ…î‹E‰$è—Åÿÿ‹E܉|$‰$è?úƒ•ʉD$‹E܉$èRú…À„²ƒÀ‰EäÇD$/‰$èú…À‰Æ„’Æ‹Eä‰$èú‰EàÆ/‹E …Àt‰<$èîù‰ú‰Áë ‹E‹P‹H‹Eà‰L$‰T$ÇD$‰D$$‹EäÇD$ÇD$‰D$ ƒzʉD$ƒ˜Ê‰D$ ‹E‰$è¦øÿÿ…À‰Æt‹E‰$èÞÄÿÿë¾”ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åìè‹M‰}ü‹}‰]ôè[…ɔ…ÿ”À‰uø…‹E…À‹E”Â…À”ÀÂ…û‹EÇÇ‹UÇ‹EU”ÇẺ•Lÿÿÿ‰T$ ‹U ‰…@ÿÿÿ‰D$‰ $‰T$èþÿÿ…À‰Æ…¬‹…Lÿÿÿ‰…Tÿÿÿ‹E …Àt*‹U µ\ÿÿÿ‰t$‰$è©ø‰D$‹E ‰$èwìÿÿ‰µTÿÿÿÇ$ð¾˜ÿÿÿè»÷…À‰…Hÿÿÿ„PÇ€èf¾0ÿÇ€ì‰$ÇD$è=ÎÿÿÇD$ÇD$Ç$èð÷ƒøÿ„Ô‹•Hÿÿÿ‰D$Â܉•Pÿÿÿ‰$è_Èÿÿ…Àt‹…PÿÿÿÇD$‰$é–‹…Tÿÿÿ‹•HÿÿÿÇD$ƒÀ(‰D$‹‚܉$è ö@u ‹…Pÿÿÿ¾4ÿÿÿÇD$‰$èÈÿÿéP‹EÐU ‰•Dÿÿÿ‰T$‰D$‹ẺD$ ƒ£Ê‰D$‹…Pÿÿÿ‰$èðÿÿ…À‰Æt‹•PÿÿÿÇD$‰$èÇÇÿÿéüEä‹•Hÿÿÿ‰D$ ‹…Dÿÿÿ‰T$‰D$‹…Pÿÿÿ‰$èíÿÿƒø…Å‹•Hÿÿÿ‰$èAÝÿÿƒø•Â…À•À„Ð…¤‹•Hÿÿÿ‹BD‹U‰E܉D$‹…HÿÿÿÇD$‰$èÌÿÿ…Àu ‹UÇë‹EÜ‹U‰‹…Hÿÿÿƒ¸¼u ‹UÇë‹•Hÿÿÿ‹‚Àƒøu ‹EÇýÿÿÿ1öë/ƒøu‹•Hÿÿÿ‹‚Ä‹U‰ëä1öƒøu‹EÇüÿÿÿë¾ÿÿÿ‹•Hÿÿÿ‰‹…@ÿÿÿ‰$è›Áÿÿ…öt‹•Hÿÿÿ‰$èºÊÿÿë¾›ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åƒì(‹EÇD$‰D$‹E‰D$‹E‰D$‹E‰D$ ‹E ‰D$‹E‰$èoüÿÿÉÃU‰åƒìh‰]ôè[‰}ü‹}‰uø‰<$èºõ‹UƒÀƒàð)ÄD$@‰T$‰Eä‰<$èœõ‰<$‰D$èméÿÿ…À‰Æ…‘‹E ‰$èµÀÿÿ‹Uä‰|$‰$è]õƒ³Å‰D$‹Eä‰$èpõ…À„UxÇD$/‰<$è#õ…À‰Æ„8Ɖ<$è'õÆ/‰Á‹E…Àxl‹E‰L$$‰|$ ‰ÂÁú‰T$0‹U‰D$,ƒ˜Å‰D$‰T$(‹U‹B‰D$‹BÇD$ÇD$ÇD$‰D$ƒÁʼnD$ ‹E ‰$èÈóÿÿ颃}ýu:‹Uƒ˜Å‰L$$‰|$ ‰D$‰T$(‹U‹B‰D$‹BÇD$‰D$ƒÌÅëCƒ}ü¾›ÿÿÿu]‹Uƒ˜Å‰L$$‰|$ ‰D$‰T$(‹U‹B‰D$‹BÇD$‰D$ƒ×ʼnD$ ‹E ÇD$ÇD$‰$è!óÿÿ…À‰Æt‹U ‰$èY¿ÿÿë¾”ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰å옋M‰}ü‹} ‰]ôè[…ɔ…ÿ”À‰uø…>‹U…Ò„3Ç‹E‹U‰ $‰D$E ‰D$E؉T$ ‰E‰D$è¦ýÿÿ…À‰Æ…Ç$¾˜ÿÿÿèò…À‰E”„å‹Uf¾0ÿ‰P ÇD$ÇD$Ç$èóòƒøÿ„Ÿ‰D$‹E”‰$èqÃÿÿ…Àt‹U”ÇD$‰$ëw‹U”EÈÇD$‰D$‹‰$è/ñ@u‹E”¾4ÿÿÿÇD$‰$èCÃÿÿëC‹EÜ‹U”‰D$‹E؉$‰D$ ƒʼnD$E‰D$èOëÿÿ…À‰Æt‹E”ÇD$‰$èþÂÿÿ‹U‰$èÞ½ÿÿ‹E”‰ë¾›ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åƒìH‰]ô‹Eè[‰}ü‹}‰uø‰D$‰<$èAò‰<$‰D$èæÿÿ…À‰Æ…ø‹U ‰$èZ½ÿÿ‰<$èòƒÀƒàð)ĉ<$t$0èòÇD$‰4$@‰D$è;ñ‰|$‰4$èÔñƒ>‰D$‰4$èêñ…À„‘xÇD$/‰<$èñ…À‰ÆtxƉ<$è¥ñÆ/‹U‰|$ ‰T$(‹U‰D$$ƒ#‰D$‹B‰D$‹BÇD$ÇD$ÇD$‰D$ƒl‰D$ ‹E ‰$è_ðÿÿ…À‰Æt‹U ‰$è—¼ÿÿë¾”ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰å숉}ü‹}‹E ‰]ôè[…ÿ”Â…À”À‰uø…‹u‹M…ö”Â…É”ÀÂ…û‹E¾qüÿÿÇ‹U Ç‹EÇ‹UEÌÇ‹U 9U‰…œþÿÿ˵¨þÿÿ‰4$ÇD$ìÇD$èÎï‹E ‹U‰D$ ƒ+Á‰D$…¸þÿÿ‰T$‰$è ðẺ…œþÿÿ‰$è…»ÿÿ‹•œþÿÿE”‰t$ ‰D$‰<$‰T$èÆýÿÿ…À‰Æ…OÇ$ð¾˜ÿÿÿèKï…À‰Ç„4ÇD$ðÇD$‰$è=ïLJèÇD$‰<$èÇÅÿÿÇD$ÇD$Ç$èzïƒøÿu‰<$f¾0ÿè îéЗ܉•¤þÿÿ‰D$‰$èâ¿ÿÿ…Àt(‹…¤þÿÿ¾0ÿÿÿÇD$‰$èà¿ÿÿ‰<$èÇíéŒE¼ÇD$‰D$‹‡Ü‰$è‡í@u(‹•¤þÿÿ¾4ÿÿÿÇD$‰$蘿ÿÿ‰<$èíéD‹EЋ•¤þÿÿ‰D$‹Ẻ$‰D$ ƒ\‰D$E$‰… þÿÿ‰D$èçÿÿ…À‰Æt#‹…¤þÿÿÇD$‰$è<¿ÿÿ‰<$è#íéèEä‹• þÿÿ‰D$ ‹…¤þÿÿ‰|$‰T$‰$è‹äÿÿƒøu‰<$è¾Ôÿÿƒø•Â…À•À„Ðt‰<$¾ÿÿÿèÒìé—‹GD‹U‰E܉D$ÇD$‰<$èÃÿÿ…Àu ‹EÇë‹EÜ‹U‰ƒ¿¼u ‹EÇë6‹‡Àƒøu ‹UÇýÿÿÿë ƒøu ‹‡Ä‹U‰ëƒøu ‹EÇüÿÿÿ‹U 1ö‰:ëE̾›ÿÿÿ‰…œþÿÿ‹•œþÿÿ‰$è$¹ÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åWVSì,‹Eè[‹} ƒøu ‰<$èÇÿÿë ‰D$‰<$èwÃÿÿµè÷ÿÿÆ…ç÷ÿÿëÆ…ç÷ÿÿ‹U‹EÇD$‰t$‰$‰D$ èÉÀÿÿƒø‰Â~E‰D$‰t$‰<$èÜÿÿ…Àu ‹ƒâê‹—Ä;vV‹MºþÿÿÇëHƒøt/ƒøt–ƒøu˜ë5u€½ç÷ÿÿu*‹EÇ닇´‹M‰ë‹‡´‹U‰º‰ÿÿÿë1ÒÄ,‰Ð[^_ÉÃU‰åì(‰}ü‹}‹E ‰]ôè[…ÿ”Â…À”À‰uø¾›ÿÿÿ…¤E‰…ÿÿÿƒ ýu‰D$ ƒg»ÇD$‰D$‰<$èø¿ÿÿ…ÿÿÿ‰…ÿÿÿ‰$ÇD$è5ÂÿÿEä‹•ÿÿÿ‰D$‹…ÿÿÿÇD$‰<$‰T$ ‰D$è`þÿÿ‹U ‰Æ‹Eä‰ÇD$‰<$èr¼ÿÿ‹…ÿÿÿ‰$è€Àÿÿ‰<$èKê‰ð‹]ô‹uø‹}üÉÃU‰åWVSè[ƒìLÇD$ÇD$Ç$èqëƒøÿt#u؉D$‰4$èó»ÿÿ…Àt.ÇD$‰4$èü»ÿÿ‹E‰D$‹E‰$èhÁÿÿÇEÔ0ÿÿÿéÔ‹EÇD$ƒÀ(‰D$‹E؉$è’é@u.ÇD$‰4$è®»ÿÿ‹E‰D$‹E‰$èÁÿÿÇEÔ4ÿÿÿ醋E}‰|$‰4$‰D$‹E ‰D$ ƒ"½‰D$è¡ãÿÿ…À‰EÔt$ÇD$‰4$èR»ÿÿ‹E‰D$‹E‰$è¾Àÿÿë4Eä‰D$‹E‰|$ ‰4$‰D$‹E‰D$èñüÿÿÇD$‰4$‰EÔè »ÿÿ‹EÔƒÄL[^_ÉÃU‰å숉]ôè[‰}ü‹}‰uø‰<$èjêU˜‰•°þÿÿƒÀƒàð)ÄD$0‰T$‰…´þÿÿ‰<$èCê‰<$‰D$èÞÿÿ…À‰Æ…EЉ…¨þÿÿ‰$èVµÿÿ‹•´þÿÿ‰|$‰$èûéƒcº‰D$‹…´þÿÿ‰$è ê…À„ÔxÇD$/‰<$è¾é…À‰Æ„·Ɖ<$èÂéÆ/‹•¨þÿÿ‰|$ ÇD$ÇD$ÇD$‰D$$ƒHº‰D$‹E¬‰$‰D$‹E¨‰D$ƒfº‰D$ èƒèÿÿ…À‰Æt ‹…¨þÿÿ‰$ëX‹E •¼þÿÿ‰•¬þÿÿ‰T$‹•°þÿÿÇD$ ‰D$‹EÔ‰$‰D$‹EЉD$èFýÿÿ…À‰Æt!‹…¬þÿÿ‰$è½ÿÿ‹•¨þÿÿ‰$è^´ÿÿéë‹E…ÀtWEà‰D$‹…¬þÿÿÇD$‰$è ¾ÿÿ…Àu‹UÆë.‹u丳þ´Cð‹Eà‰t$‰D$‹E‰$èçç‹UÆ2‹…Xÿÿÿ‹U…À‰u ‹EÇëU‹µÿÿÿþÈ…Uÿÿÿ…\ÿÿÿ‹µTÿÿÿ‰$èz³ÿÿ‹U‰Ç‹‰t$‰<$@‰D$èç‹U‹‰<$@‰D$è¼ç‹U‰‹µÿÿÿ¸þÈDðéùþÿÿ¾”ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åƒìh‰]ôè[ƒ}‰uø‰}ü‹E”‹M‹u…ÀŸÀ„ЉMÄt ÇEľ}Ô‰<$èô²ÿÿ‹E ‹Mĉt$ÇEàF‰D$‰D$ƒ*¸‰D$ ‰L$‰<$èŸæÿÿ…À‰Æu3‹EØÇEä‰D$‹EÔ‰D$ ƒF¹‰D$Eä‰D$‹E‰$èþßÿÿ‰Æ‰<$è§²ÿÿ‰ð‹]ô‹uø‹}üÉÃU‰åWVSè[ƒì<€»†Ø…Ï‹³ÞŻШG‰Eä‰7ƒÇ‰4$èç;}ät0uꋳÚÅ»’ØG‰Eà‰7ƒÇ‰4$èÚæ;}àt0uꋳÖÅ»ÆØG ‰E܉7ƒÇ‰4$è²æ9}Üt0uꋳÒÅ»æØGH‰E؉7ƒÇ‰4$èŠæ9}Øt0uꋳÎÅ».ÙG‰EÔ‰7ƒÇ‰4$èbæ9}Ôt0uêÆƒ†Ø‹Eº…ëQ‹M÷êÁùÁú‰Ö)Ê)ΉÑkÆd‹u)ƃú”ƒþžÀ„Ðt ‹Œ³ŠØëdƒù”ƒþžÀ„Ðt ‹Œ³’ØëKƒù”ƒþžÀ„Ðt ‹Œ³ÆØë2ƒù”ƒþžÀ„Ðt ‹Œ³æØëƒù”ƒþžÀ1É„Ðt‹Œ³.ÙƒÄ<‰È[^_ÉÃU‰åWVSƒì<‹E è[Ç‹EÇD$.‰$è‘å…Àto@1ÿ“«×‰EàÇEäD‰UÔ‹Uäú‰ÐÁè4Ñþv…‰UØ‹UÔ‹‚‰D$‹Eà‰$èåƒø~ ~9}ä}Âë}N‰uäëñ‹EØEÔ‹P‰UÜ‹x닃WÄ»öµ‰EÜ‹U܉$èðä‰<$‰ÆèæäD‰$è䉯¸˜ÿÿÿ…öt4‹E܉|$ ‰4$‰D$ƒ¶‰D$èvä‰4$èVã‹U ‰‰4$èþâ1ÀƒÄ<[^_ÉÃU1Ò‰åƒì8‰]ôè[‰uø‰}ü‹ƒÃá‹…À…‹³KÃ3û—Ö‰Eäë-‰wô‰4$èJä‹Mä¾Br‹‰wü‰4$‰Gøè,ätƒÇ €>u˃·Ê‰$èL¯ÿÿƒçÙ‰$è>¯ÿÿƒ×Ù‰$è0¯ÿÿ‹ƒÇáǃûÙǃ÷ÙǃÚÇD$‰$è㺘ÿÿÿ@t‹ƒÃá1ÒÇ‹]ô‰Ð‹uø‹}üÉÃU‰åƒì(‰]ô‹Eè[‰}ü‰uø‰D$»Àɉ<$襯ÿÿ…À‰Æu1‹ƒÄÉ…Àt%Pÿ‹ƒÀÉ€</uÇD$‰T$‰<$èï­ÿÿë1ö‰ð‹]ô‹uø‹}üÉÃU‰åWVSè[ƒì,‹ƒhàëf‹}äƒÇ‰<$è ã‰Æ‹Eä€|/u‹E‰t$‰<$‰D$èõâ…Àë0‹E‰t$‰<$‰D$èÞâ…Àu‹E¶ 0€ù/”„É”ÀÂu€ù?t‹E䋉Eä‹Uä…ÒuŽ1À븃Ä,[^_ÉÃU‰åW1ÿVƒìë‹uþ¾Fÿ‰$èàˆFÿ‹E‰þG‰$ègâ9ðڃĸ^_ÉÃU‰åWVƒì ‹E‰$èDâƒÀ‰$èqá…À‰Æt~‹E ‰$è(âƒÀ‰$èUá…À‰Çu ‰4$èpàëX‹E‰4$‰D$èïá‹E ‰<$‰D$èàá‰4$èRÿÿÿ‰<$èJÿÿÿ‰|$‰4$èìá…Àt)ðE‰4$‰Eôè à‰<$èàëÇEô‹EôƒÄ ^_ÉÃU‰åƒì‹E‰uø‰}ü‹8…ÿt6‹U ‰<$‰T$è™á…À‰ÆtÆ‹E ‰$èlá‹U‰ë ‹Eljø‹uø‹}üÉÃU‰åƒì8‹U‰]ô‰uø‰}üÇEàÿÿÿÿÇEäÿÿÿÿÇEØÿÿÿÿÇEÜÿÿÿÿ‹ è[…É„σŒ±‰$‰D$è[ÿÿÿÇD$-‰$‰ÇèÔà…À‰Æ„¡Æ E؉D$ Eà‰D$ƒŽ±‰D$‰<$èŽà‹Eà#Eä@t ‹EØ#EÜ@u3Æ-‰<$è£à1ɉÆ9ñ}6¶<-t.¾ÐúÿwM‹ƒNÞöD5t@‹Eà‹Uä‹M ‰‰Q‹EØ‹UÜë‹EØ‹UÜ‹M ‰‰Q‹Eà‹Uä‹M‰¸‰Që ¸ÿÿÿÿëA뙋]ô‹uø‹}üÉÃU‰å숉uø‹E‰}ü‹u ‹}‰]ôÇ@‰°à‰¸ä‹M¸è[…É„ ‹U‰$èÞß@‰$è ߉EÄ‹Uĸ˜ÿÿÿ…Ò„ù‹M‹EĉL$‰$è¡ß‹Uăo°‰D$‰$èDýÿÿ…Àt‹Mău°‰D$‰ $è+ýÿÿ…À‰Eäu‹Eĉ$èÑÝ‹U¸ÇBé“@…ÿ‰EäˆwEЉD$E؉D$Eä‰$èèýÿÿ@„W‹UÜ‹EØ9׉E°‰U´Œ99Æ‚1‹E´…ÀˆA‹UÔ‹EÐ…Ò‰E¸‰U¼ˆÀ‹U¼9U´| 9E°‡û;}¼|;u¸w‰ð‰úƒÀÿƒÒÿ‰E¸‰U¼‰EЉUÔ‹U°‹M´‹E‰Ø‰ˆÜ‹E¸+E°‹U¼U´‹MƒÀƒÒ‰à‰‘ä‹E¸‹U¼‹M´‰t$‰D$ƒz°‰T$‹U°‰D$‹E‰|$‰L$ ‰T$ƒÀ‰$è Þ‹Mĉ $èžÜ¸Èéj‹E¸#E¼@…E;}´Œ< ;u°†1‹E°‹U´‹M‰Ø‰ð‰‘܉ú+E°U´‰à‰‘ä‹E°‹U´‰t$ƒÆÿ‰|$ƒ×ÿ‰t$‰|$éÌ‹E°#E´@…Ø‹MÔ‹UЃù‰U¸‰M¼ŒÃ ƒú†¸;}¼H|;u¸wA‹Mƒ¢°‰±à‰¹äÇØÇ܉t$ƒÆÿ‰|$ƒ×ÿ‰t$‰|$ ë`‹M‰ð‰ú+E¸U¼‰E ‰U¤‰Ø‰‘Ü‹E¸‹U¼‹M‰à‰‘äƒE ƒU¤‹E ‹U¤‰t$‰|$‰t$‰|$‰D$ƒz°‰T$ ‰D$‰ÈéŽþÿÿ‹Uĉ$ë‹Mĉ $è/Û¸ ‹]ô‹uø‹}üÉÃU‰åWVSè[ƒìL‹E‹UÇ$´‰EЉUÔèÏÛ…À‰Eä„‹UƒÂd‰U؉$è#ÚÇEàȉEÜé·‹EÜ‹“ûÙ‹pÇD$ÇD$ !‰T$‹F‰D$‹‰$蘨ÿÿ~³‰Çv"‹Eä‰$è†Ú‹F@‰$èQÛ…À‰Eä„‹V‹F ‰T$‹Uä‰D$‰$è7Û‹F…ÿ‹UäÆx‹“ûÙ‹Dúƒø#„„ƒø$t*ƒøtd‹EÜ‹U؉D$‰$èjÙ‰EÜ‹uÜ…ö…>ÿÿÿé‹‹E Ç@‹Uä‰$èÛƒøvÁƒ†­‰D$‹Eä‰$èùÿÿ…Àt¨‹U ÇB 뜋Eä‰$èÙ‹U ‰‚è놋E ‹UÔ‰D$ ‹EЉT$‹Uä‰D$‰$èûÿÿ=ȉEà„Xÿÿÿ‹Eä‰$ë‹Uä‰$èpÙëÇEà˜ÿÿÿ‹EàƒÄL[^_ÉÃU‰åWVSì\‹uè[ÇEä…öt-‹E‹…Ét$‹U‹ƒØÇD$‰$ÿP‰…Ìûÿÿ¸ôë ‹MƒÃ«‰D$‰ $èðØ‰…Ìûÿÿ¸‘‹•Ìûÿÿ…Ò„ô‹E¿Ç€¼Ç…ÈûÿÿÆ…ÓûÿÿÇ…Ôûÿÿ‹Uƒº¼t ‰$èmÉÿÿ‰Çƒÿu'‹…Èûÿÿäûÿÿ‹•ÔûÿÿÆ…Óûÿÿ‰Äûÿÿ4é"…ÿ‹…Èûÿÿäûÿÿ•‰Äûÿÿƒÿ‹Ôûÿÿ•…·ûÿÿ„•·ûÿÿ4„ìƒÿ„È‹…Ìûÿÿ‰$è Øé¢‹•ÄûÿÿEä‹M ‰D$ ÇD$‰T$‰ $è­ÿÿƒø~N‰D$‹…Äûÿÿ‰D$‹E ‰$èÿ£ÿÿ…À…­‹U‰$è“Èÿÿƒø‰ÇtK…À•ƒø•À„Ðt`ƒÿt[ë+…¶€½Óûÿÿt‹MǼë;‹EÇ€´¸é‡Æ…Óûÿÿë‹Èûÿÿ•äûÿÿ‹…Ôûÿÿ‰•Äûÿÿ4‹U‹‚œ9Ævƒº¼…ÿÿÿë9ðs‹Ôûÿÿ+…Ôûÿÿ‰…Èûÿÿ4‹E‹U‹Èûÿÿ‹€Ì…Ôûÿÿ‹’ •Ôûÿÿ‹…Ôûÿÿ‹•Äûÿÿ‰L$‰D$‰$è¼×‹M‰µÔûÿÿ‹…ÀtA‹•Äûÿÿ‹…Èûÿÿ‹Ìûÿÿ‰T$‹“؉D$‰ $ÿR …ÀyE‹Ìûÿÿ‹“؉ $ÿRé„‹Ìûÿÿ‹…Èûÿÿ‹•ÄûÿÿÇD$‰L$ ‰D$‰$èpÖ…ÀxH‹Mƒ¹¼…™ýÿÿ;±œ…ýÿÿ‹E‹8…ÿt8‹•Ìûÿÿ‹ƒ؉$ÿPë2‹MÇ´ôë‹…Ìûÿÿ‰$èîÕ¸ôë‹•Ìûÿÿ‰$èÙÕ¸ÈÄ\[^_ÉÃU‰åƒì(‰]ôè[‰uø‰Æ‰}ü»͉<$è¼Ö‹F…Àt,‹F$ÿ‹F$‹…ÀF‰$虢ÿÿ‰4$è‘¢ÿÿ‹F$‰$èŠÕ‰<$è†Ö‹]ô‹uø‹}üÉÃU‰åƒì8‰]ôè[‰uø‰}ü‹³HÔƒ>uVƒ<½‰$»\Ìè?¢ÿÿƒ\ÌèVÿÿÿƒœÌ‰Eä‰$è&Ö1À¹ üó«‹Eä‰$èÖ‹Eä‰$èüÕÇ‹]ô‹uø‹}üÉÃU‰åƒìh‰]ôè[‰uø‹u‰}üƒÛËèñþÿÿ1À…ö„&EÐ}À‰E´‰$è‘¡ÿÿ‰<$艡ÿÿÇEä€>/tƒ¥‰D$‰<$èc¢ÿÿ…À…ĉt$‰<$èk ÿÿ…À…°Ç$èAÕ…À‰E䄙NjE³̉D$‹E ‰D$‹E´‰$èo¡ÿÿ‹E‰4$‰Eàè+Õ‹EÀ‰4$‰ƒÛË‹EĉƒßË‹EȉƒãË‹ẺƒçË‹EЉƒëË‹EÔ‰ƒïË‹E؉ƒóË‹E܉ƒ÷Ë‹Eà‰ƒûË‹E䉃ÿËèÎÔ1Àë#‰<$躠ÿÿ‹E´‰$诠ÿÿ‹Eä‰$è¨Ó¸˜ÿÿÿ‹]ô‹uø‹}üÉÃU‰åWV‰ÆSè[ìœEˆ‰•pÿÿÿÇB‰D$‰4$èßÔ@„зE%ð=@u‹…pÿÿÿÇ@ ë=€…¦‹•pÿÿÿÇB ƒ ¦‰D$‰4$èÓ‹pÿÿÿ‰Â1À…Ò•À…Ò‰At‰$èáÒ‹E¸‹U¼‹pÿÿÿ‰‰Q‹E¨‰A‹…pÿÿÿƒÁ‰xÿÿÿÇ@ÇD$.‰4$èpÔ…À„@1ÿ“>ljE€ÇE„D‰•hÿÿÿ‹U„ú‰ÐÁè4‹•hÿÿÿÑþv …‰lÿÿÿ‹M€‹‚‰ $‰D$èáÓƒø~ ~;}„~¼ë"}N‰u„ëñ‹…lÿÿÿ…hÿÿÿ‹P‰•|ÿÿÿ‹xë‹‹ê³»‰¥‰|ÿÿÿ‹…|ÿÿÿ‰$è³Ó‰<$‰Æè©ÓD‰$èÕÒÇ…tÿÿÿ˜ÿÿÿ…À‰ÆtB‹•|ÿÿÿƒ–¥‰|$ ‰D$‰4$‰T$è1Ó‰4$èÒ‹xÿÿÿ‰‰4$è¶ÑÇ…tÿÿÿ‹…pÿÿÿƒÀ‰$èÒщ$èaÑë Ç…tÿÿÿÿÿÿÿ‹…tÿÿÿÄœ[^_ÉÃU‰åWVSè[ìÜEȉ…Tþÿÿ‰$ÇEäÇ…ŒþÿÿÇ…þÿÿÇ…”þÿÿÇ…˜þÿÿèýÿÿU¸‰•Xþÿÿ‰$èìÿÿ‹U E܉D$ Eà‹u ÇE´‰D$‹B`ƒÆ‰D$‹B\‰$è˜Êÿÿ‹F@‰$è®Ñ…À‰…\þÿÿ„Œ‹F‹V‰D$‹…\þÿÿ‰T$‰$èŽÑ‹F‹•\þÿÿƉEØE؉$‰D$è ‹F‰D$‹…\þÿÿ‰$è® …À…=‹•\þÿÿ€:/t¿Æ…‡þÿÿéD‹…\þÿÿ‰$è·îÿÿ…Àt=‹•\þÿÿ‹…XþÿÿÇ…Œþÿÿ‰T$‰$èòÿÿ…À…Ü‹U ‹B…À„¤é‹ƒnÈÆ…‡þÿÿ…À„¤³žÈ‰4$èâЋƒ^ȉ…xÿÿÿ‹ƒbȉ…|ÿÿÿ‹ƒfȉE€‹ƒjȉE„‹ƒnȉEˆ‹ƒrȉEŒ‹ƒvȉE‹ƒzȉE”‹ƒ~ȉE˜‹ƒ‚ȉEœÿ‰4$è}Ћ…\þÿÿ‰D$‹…xÿÿÿ‰$èìÐ…À‰Âu!‹EŒÇE¤ÇE°ÇE¬‰E ‹E˜‰E¨…Ò”…gþÿÿ€½gþÿÿ…ðƒí£‰$èaÏ…À‰E´u Æ…‡þÿÿ鿯…‡þÿÿÆ…hþÿÿÆ…gþÿÿ齋E¸} ‹³BЉ|$‰$ÿ…À…¦‹E¬…ÀtS‹E¼“ö£‹M¸€|ÿ/ƒ¤EЉT$‹•Xþÿÿ‰$膚ÿÿ…À…T‹E¸‰|$‰$ÿ…À…W‹E¬…À…L‹E°…À„3Æ…‡þÿÿÆ…hþÿÿé!Æ…‡þÿÿ‹ƒB¹…À„"‹ƒ>¹‰D$‹…Xþÿÿ‰$èø›ÿÿ…À…‹•\þÿÿ‹…Xþÿÿ‰T$‰$èô™ÿÿ…À…âëBÿ‹•XþÿÿÇD$‰D$‰$è.šÿÿ‹U¼…Òt ‹E¸€|ÿ/tÒ‹E ‹x…ÿ„‡‹E¸} ‰úèúÿÿ…À…–‹u¬…ötQ‹E¼“ö£‹M¸€|ÿ/ƒ¤EЉT$‹•Xþÿÿ‰$èf™ÿÿ…À…T‹E¸‰úèÏùÿÿ…À…I‹M¬…É…>‹U°¿“Ç…`þÿÿ…Ò„3Æ…hþÿÿÆ…gþÿÿ‹E µŒþÿÿ‹U¤‰t$‰…lÿÿÿ‰D$‹E ‰•pÿÿÿ‰T$ ‰$èÞñÿÿÇ…`þÿÿ=ȉÇ…ß‹U f1ÿÇ…`þÿÿ‹B…À„Ä‹…”þÿÿ…ÀtG‹…þÿÿ…À„ŸƒÞ¤‰D$$E¨‰D$ ƒ¤‰D$‹E´‰t$ÇD$ΉD$ƒ¤é®‹…þÿÿ…Àt2ƒÞ¤‰D$ E¨‰D$ƒ¤‰D$‹E´ÇD$ȉD$ƒ,¤ë}‹pÿÿÿ‹•lÿÿÿ…Éx=ƒÞ¤‰D$(E¨‰D$$ƒ¤‰D$ ‹E´‰T$‰L$ÇD$ȉD$ƒ9¤é%ƒÞ¤‰D$ E¨‰D$ƒ¤‰D$‹E´ÇD$ȉD$ƒF¤‰D$ ‹EÜ‹•Tþÿÿ‰D$‹Eà‰$‰D$èTÌÿÿ¿È…À…ƒ‹U 1ÿ‹BÇ…`þÿÿƒøtv€½gþÿÿÇ…`þÿÿu¶•hþÿÿÁâÁúƒâ‰•`þÿÿ1ÿƒø uF‹…Tþÿÿ‰$è;˜ÿÿë6Æ…‡þÿÿë¿“Æ…‡þÿÿëÆ…‡þÿÿë¿ô뿔Dž`þÿÿ‹•\þÿÿ‰$èùÊ‹E´‰$èfË…ÿ•À„…‡þÿÿ‰Æt …xÿÿÿèòôÿÿ‰ò„Òt%‹U ‹B`‰D$ ‹B\‰|$‰D$‹E‰$èIäÿÿéNƒ½`þÿÿ‡A‹•`þÿÿ‹„“âØÿàfHöæHƒ‹EŒ‹U‰D$‹Eˆ‰$‰D$‹ẺD$‹EȉD$…Œþÿÿ‰D$ ƒV¤‰D$Eä‰D$è|Äÿÿ…xÿÿÿèFôÿÿéÈ‹E¸‰D$‹ẺD$‹EȉD$…Œþÿÿ‰D$ ƒR¤‰D$Eä‰D$‹E‰$鈅Œþÿÿ‹U‰D$ ‹E¸‰$‰D$‹E‰D$èiðÿÿ“Þ¤‰T$“\¤‰T$ÇD$ÇD$‰D$ƒf¤‰D$ ‹…Tþÿÿ‰$è8Êÿÿ‹EÌ‹U‰D$‹Eȉ$‰D$ ƒZ¤‰D$Eä‰D$è¤Ãÿÿ‹…Tþÿÿ‰$èI–ÿÿ‹•Xþÿÿ‰$è;–ÿÿÄÜ[^_ÉÀ½gþÿÿÆ…‡þÿÿÆ…hþÿÿ…íûÿÿéÀúÿÿƒÞ¤‹•pÿÿÿ‰D$,E¨‰D$(ƒ¤‰D$$‹E´‰t$ ‰T$ÇD$ΉD$‹…lÿÿÿ‰D$ƒo¤‰D$ ‹E܉D$‹Eà‰D$‹…Tþÿÿ‰$éýÿÿU‰åSè[ƒì$Eð‰D$‹EÇD$‰$èXŸÿÿ…Àt&ƒµ›‰D$‹Eô‰D$‹Eð‰$è5­ÿÿºƒøt1ÒƒÄ$‰Ð[ÉÃU‰åSè[ƒì¾E‰D$ƒi›‰$è´É…À•ÀƒÄ[¶ÀÉÃU‰åSè[ƒì¾E‰D$ƒE›‰$èƒÉ…À•ÀƒÄ[¶ÀÉÃU‰å‹M‹U ¶AÇBÇB ˆB·Af‰B‹A‰BÉÃU‰åVƒì‹u‹F…Àt‰$è¨Ç‹F…Àt‰$è™ÇǃÄ^ÉÃU‰åƒì‰}ü‹E‹} ‰uø‹p‰<$èɺ9Æu‹U‰t$‰|$‹‰$èöȉ‹uø‰Ð‹}üÉÃU‰åƒì‰}ü‹E‹} ‰uø‹p‰<$èÈȺ9Æu‹U‰t$‰|$‹‰$è´È‰Â‹uø‰Ð‹}üÉÃU¸‰åVƒì‹U‹u ‹J;Nu‹‹‰L$‰$‰D$è­ÇƒÄ^ÉÃU‰åWVƒì ‹E ‹UÂÁà‰Uð‰$è„ljEè‹U踘ÿÿÿ…Ò„å‹}èÇ‹uÇEôÿÿÿÿ‰ñé—€ú.uj;Mt €yÿ/yFu{y9}ðt ¶A%…²7P‰U̾Púÿ‡™‹‹ÄöD‘6„ˆ¾@=ÿw}öD6tvEä‰D$ƒ}˜‰D$‹Ẻ$èOÆHuW¶UäF1ɉEÔˆUÓë+¶EÓ‰U´ˆ2‹UÔ‹EÆEÓÊ;s ‹U´‹EÔ¶ˆUÓA‹E‹9ÂwÉBþ‹U‰¸ë1À‹]ô‹uø‹}üÉÃU‰åWV1öƒì‹} ë‹E‰t$F‰|$‰$èòþÿÿ97wèƒÄ1À^_ÉÃU‰åƒì‰]ô‹E‰}ü‹} è[‰uø1öø‰ù‰Eð9Mðv/¶¾Â=ÿˆUïw‹“ÃöD‚5tf¾Uï·ÆA€tBÐëÌ‹EfÁÆ)ùf‰0‹]ô‰È‹uø‹}üÉÃU‰åW1ÿVSƒì,‹Eè[Ç@ÇfÇ@ PÇ@Ç@‹uÇEäÿÿÿÿë‹UäFG€>.D׉Uä9} Ž•¶<:tEƒ}äÿtG‹Eä@9Ç~?‹Eä¾Túÿw/‹ƒšÂöD5t"‹E‰t$Ç$ƒÀ ‰D$è·ÂHuF‹Uë%‰4$èuÂ…Àt5ƒxuƒx u‹@‹U‹‹‰B ÆB ‰4$è8‹Uà‹E‰P‹U‰ë‹EÇ@ Æ@ ‰4$èÂÇEà”ÿÿÿ‹EàƒÄ,[^_ÉÃU‰åWVSƒì‹Eè[Ç@Ç‹M …É„§‹E¾÷€ÿÿÿu‹ƒÂÀ‹D4ÁèƒàëÇD$‰$è`Á…À•À¶À…À¾uHëd¾À©€ÿÿÿu‹“ÂÀ÷D‚4ëÇD$‰$è#Á…À•À¶À…Àu¶<+t<-t<.uF9u ~‹}÷¶<:u©‹E‰p‹U‰ë1öƒÄ‰ð[^_ÉÃU‰åƒì‰uü¾u‰]øè[÷Æ€ÿÿÿu‹ƒá¿÷D°4ëÇD$‰4$èŸÀ…À•À¶À…Àuƒ<”‰t$‰$èMÂ1Ò…Àtº‹]ø‰Ð‹uüÉÃU‰åW1ÿVSè[ƒì,‹uƒÆ“‰EäëGF9} ~9¾‰$è^ÿÿÿ…Àu꾋Uä‰D$‰$èñÁ…ÀuÔG9E ~ ‰4$è©úÿÿ…ÀuÀ‹E‰x‹U‰ƒÄ,‰ø[^_ÉÃU‰åWVƒì‹}G‰D$‹E ‰D$‹E‰$èþÿÿ…ÀtPÇÇG ëÇ1ÒÇG B9E ~<‹E€</u3€|/u,G ‰D$‹E r)ð‰D$‹Eð‰$èãûÿÿ…Àˆ—ÆëfÇG*‰ÖÇG,ÇG$ÇG G‰D$‹E )ð‰D$‹Eð‰$èÅþÿÿ‹w…öt‹G€8/uÇG 9U ~(‹E€<#uBG)U U‰D$‹E ‰$‰D$èþÿÿëÇGÇG¸ƒÄ^_ÉÃU‰åWVì ‹E ÆE÷/…À‹E•Â…À•À„ÂtW‹E‰$èˆÀ‹U ‰$‰Æè{ÀD‰$è§¿…À‰Ç„¢E„‰D$‹E ‰$èSÀ‹U ‰$‰D$ègþÿÿHtéq„Ò„q‹E ‰$èÀ‰Çéa‹E„…Àu‹U ë>E¼‰D$‹E‰$èÀ‹U‰$‰D$èþÿÿH…#‹u¼…ö…‹E €8u‹U‰T$‰<$轿é‹Eĉ<$‰D$‹EÀ‰D$è󾉸EÄÆ:‹M¨P‰•tÿÿÿ…Ét ‹E ‰$‰D$뼋Uà…Òt(fÇ@//p‹Eà‰4$‰D$‹E܉D$詾uà‰µtÿÿÿ‹E…Àu‹U ‹…tÿÿÿ‰T$‰$éqÿÿÿ‹EÐ…Àu E÷ÇEЉEÌ‹•tÿÿÿ1É‹µtÿÿÿBëˆBÿ‹EÌ€</DòAB;MÐs ‹E̶fÇF8 ‰MÔëW‰4$è_»ðÇfÇ@ ‹Eà‹MÜ‹¸‰T$‹¹G‰T$‰4$‰D$ ‹EÔ‰D$軉$èÔº;}Ø|¤‰4$è»ðÇfÇ@ Æ@‰4$耹‹U‰‰4$è(¹1ÀƒÄL[^_ÉÃU‰åVƒì‹u‹F@ÿ‹F@‹…Àu6‹‰$èü¸‹F‰$èi¹‹F‰$èæ¸‹F ‰$èÛ¸‹F@‰$èи‰uƒÄ^ÉéøU‰åWV‰ÖSìÌ‹U‰…dÿÿÿEà‰D$ Eä‰`ÿÿÿÇE܉D$‹B`è[‰D$‹B\‰$è.²ÿÿ…öx‰t$ƒã‹µhÿÿÿ‰D$‰4$è¼¹ëFÇ…hÿÿÿTIMEµhÿÿÿÇ…lÿÿÿOUT:Ç…pÿÿÿ SecÇ…tÿÿÿond-Ç…xÿÿÿinfiÇ…|ÿÿÿniteÆE€}̉<$èß„ÿÿ‹…`ÿÿÿÇE؉t$(ÇD$‰D$$ƒö‹‰D$ ƒü‹‰D$ƒŒ‰D$ ‹EàÇD$ÇD$ȉ<$‰D$‹Eä‰D$èX¸ÿÿ…Àt,‰<$¾˜ÿÿÿè„ÿÿ‹U‹…dÿÿÿÇD$ô‰T$‰$è±-ë7‹EЋ•dÿÿÿ‰D$‹Ẻ$‰D$ ƒx‹‰D$E܉D$葱ÿÿ‰<$‰Æè:„ÿÿÄ̉ð[^_ÉÃU‰åƒì(‰]øè[‰uü‹³Þµ‰4$è.¸Eô‰D$‹E‰$è6Ht‰4$è ¸¸œÿÿÿë‹Eô„‰$èÏ|ÿÿ‰4$èí·1À‹]ø‹uüÉÃU‰åWVSè[ì¬E´‰…„þÿÿ‰$èƒÿÿ‹U‹B0‰T$ÇD$ÇD$‰D$ ƒKЉD$ƒ-ЉD$‹E‰D$ƒQЉD$ ‹…„þÿÿ‰$è ·ÿÿ…Àu¾ÿÿÿÿÇ…þÿÿÇ…”þÿÿëz‹•„þÿÿ¾˜ÿÿÿ‰$è!ƒÿÿé-‹U½|ÿÿÿ‹…”þÿÿ‰|$BD‰$è¿«ÿÿ…À‰Æx1‰D$EÔ‰…Œþÿÿ‰$èÛ‡ÿÿ…À‰Æt6‹•ŒþÿÿÇD$‰$è܇ÿÿÿ…þÿÿƒ…”þÿÿ8‹E‹•þÿÿ;P<|éyEĉ…ˆþÿÿ‰$ès‚ÿÿ‹E´‹•ˆþÿÿ‰|$ÇD$‰D$ƒZЉD$ ÇD$ÇD$‰$è¶ÿÿ…Àt.‹…ˆþÿÿ¾˜ÿÿÿ‰$èD‚ÿÿ‹•ŒþÿÿÇD$‰$èC‡ÿÿébÿÿÿ‹E }àÇEà‰$è·¶‹U ‰|$‰T$@‰D$‹EȉD$‹EĉD$ ƒ]ЉD$‹…Œþÿÿ‰$è+¯ÿÿ…À‰Æt$‹•ˆþÿÿ‰$èÊÿÿ‹…ŒþÿÿÇD$‰$éèþÿÿ‹•ŒþÿÿEä‰|$ ½ þÿÿ‰D$ÇD$‰|$‰$èrÈÿÿ…À‰Æt1‹…ˆþÿÿ‰$èuÿÿ‹•ŒþÿÿÇD$‰$èt†ÿÿ‰<$舊ÿÿé‹þÿÿ‹…ŒþÿÿÇD$‰$èQ†ÿÿ‹•ˆþÿÿ‰$è.ÿÿ‹…„þÿÿ‰$è ÿÿ…öu-‹…äþÿÿ=Èt=œ¾÷ÿÿÿ¸ÑþÿÿEð… þÿÿ‰$è ŠÿÿĬ‰ð[^_ÉÃU‰åWVSè[ƒìl‹u ÇEäÇ$蘴ÇE´˜ÿÿÿ…À‰E°„Jlj4$è@µ@‰$èo´…À‰Çt#‹U‰$è&µ@‰$èU´…À‰E¬u‰<$èo³‹E°‰$èd³ÇE´˜ÿÿÿéó‰t$‰<$èÜ´‹U‹E¬‰T$‰$èÊ´‹“–²‰$èI´Eà‰D$‹E‰$è12Ht8‰<$賋U°‰$賋E¬‰$èù²‹“–²‰$è´ÇE´œÿÿÿéz‹E‰t$‰D$‹Eà„‰$è†oÿÿ…Àu8‰<$踲‹U°‰$è­²‹E¬‰$袲‹“–²‰$謳ÇE´‘ÿÿÿé#‰D$‹E ‰$èS{ÿÿ…À‰Æt‹P8…Òt8‰<$èd²‹U°‰$èY²‹E¬‰$èN²‹“–²‰$èX³ÇE´“ÿÿÿéÏÇ@8Eä‹M‰$‹U‹EèY÷ÿÿ…À‰E´t‰<$è ²‹E°‰$èÿ±‹U¬‰$é|Ç$d迲…À‰E¨u<‹Eä‰$èN²‰<$èα‹U¬‰$èñ‹E°‰$踱‹“–²‰$è²éAþÿÿ‹Eä‰$è9³@‰D$ƒ~‡‰D$‹E¨‰$èã²Ç$HèK²…À‰E¤„°‹U°Ç‹U¬‰x ‰P‹U¨‰‹U¤‹Eä‰B‹E ‰D$‰ÐƒÀ‰$èŲ‹F,‹U¤‰B<@‰F,‹E°uĉB@‹E‰BDƒ' ‰T$‰D$‰4$è|°ƒ½úÿÿ‰D$‰4$èo°ÇD$‰4$èd°‹ƒÆ²ÇD$‰t$‰$èO°…À‰E´tM= uÇE´˜ÿÿÿ‹U°‰$è§°‰<$蟰‹E¬‰$è”°‹U¤‰$艰‹Eä‰$èö°‹E¨‰$ès°‹ƒ–²‰$è}±‹E´ƒÄl[^_ÉÃU‰åWVSè[ƒì\‹u ‹}Ç$è±ÇEÀ˜ÿÿÿ…À‰E¼„blj4$踱@‰$èç°…À‰E¸t#‰<$è ±@‰$èϰ…À‰E´u"‹E¸‰$èæ¯‹E¼‰$èÛ¯ÇEÀ˜ÿÿÿé ‹E¸‰t$‰$èP±‹E´‰|$‰$èA±‹ƒ ¯‰$èÀ°Eä‰D$‹E‰$è¨.Ht;‹E¸‰$胯‹E¼‰$èx¯‹E´‰$èm¯‹ƒ ¯‰$èw°ÇEÀœÿÿÿ鎋Eä‰t$‰|$„‰$èýkÿÿ…Àu;‹E¸‰$è,¯‹E¼‰$è!¯‹E´‰$诋ƒ ¯‰$è °ÇEÀ‘ÿÿÿé7‰D$‹E‰$èÇwÿÿ…À‰Æt‹H8…Ét;‹E¸‰$èÕ®‹E¼‰$èÊ®‹E´‰$è¿®‹ƒ ¯‰$èɯÇEÀ“ÿÿÿéàÇ@8‹E‰$è`¯…À‰EÄu;‹E¸‰$讋E¼‰$èv®‹E´‰$èk®‹ƒ ¯‰$èu¯ÇEÀ›ÿÿÿéŒÇ$d诅À‰E°u?‹E¸‰$è3®‹E´‰$è(®‹E¼‰$讋Eĉ$芮‹ƒ ¯‰$è¯é$þÿÿ‹Eĉ$蓯@‰D$ƒF„‰D$‹E°‰$è=¯Ç$H襮…À‰Ç„«‹E¼Ç‹E´‰G‹E¸‰G ‹E°‰‹EĉG‹E‰D$G‰$è"¯‹F,‰G<@‰F,‹E¼uȉG@‹E‰GDƒ›‰|$‰D$‰4$èܬƒ1÷ÿÿ‰D$‰4$èϬÇD$‰4$èĬ‹ƒ:¯ÇD$‰t$‰$诬…À‰EÀtM= uÇEÀ˜ÿÿÿ‹Eĉ$è­‹E¼‰$èü¬‹E¸‰$èñ¬‹E´‰$èæ¬‰<$èÞ¬‹E°‰$èÓ¬‹ƒ ¯‰$èÝ­‹EÀƒÄ\[^_ÉÃU‰åWVSè[ƒìl‹u ‹}Ç$èp­ÇE¼˜ÿÿÿ…À‰E´„Èlj4$è®@‰$èG­…À‰E°t#‰<$è®@‰$è/­…À‰E¬u"‹E°‰$èF¬‹E´‰$è;¬ÇE¼˜ÿÿÿép‹E°‰t$‰$è°­‹E¬‰|$‰$è¡­‹E‰$èÓ¬…À‰EÀu-‹E°‰$èô«‹E¬‰$èé«‹E´‰$èÞ«ÇE¼›ÿÿÿéÇ$d謅À‰E¨u&‹E°‰$è´«‹E¬‰$è©«‹EÀ‰$è¬éSÿÿÿ‹EÀ‰$è-­@‰D$ƒ¦€‰D$‹E¨‰$è׬‹ƒj«‰$胬Eä‰D$‹E‰$èk*ÇE¼œÿÿÿH…<‹Eä‰t$‰|$„‰$èðgÿÿÇE¼‘ÿÿÿ…À‰EÄ„‰$èÃsÿÿ‰Çƒû‰E¸EȉE¤éåÇ$HèÉ«…À‰Æ„׋E´ÿ‰F@‹E°‰F ‹E¬‰F‹E¨‰‹EÀ‰FF‰|$‰$èJ¬‹G,‰F<@‰G,‹E‰FD‹G,…ÀyÇG,‹E¸‰t$‰D$‹E¤‰$èÿ©ƒ‘óÿÿ‰D$‹E¤‰$èï©‹E¤ÇD$‰$èá©‹E¤ÇD$‰D$‹ƒš«‰$èÉ©…À‰E¼t= u)ÇE¼˜ÿÿÿë ‹Eĉ|$‰$èHrÿÿ‰Ç…ÿ…ÿÿÿÇE¼‹E´‹0…öu4‰$èù©‹E¨‰$èî©‹EÀ‰$è[ª‹E°‰$èØ©‹E¬‰$èÍ©‹ƒj«‰$èת‹E¼ƒÄl[^_ÉÃU‰å츉]ôè[‰uø‹u‰}ü‹ƒ^¨‰$螪U䉕hÿÿÿ‰T$‹FD‰$èŠ(H…¸‹F ‰D$‹F‰D$‹E䄉$èfÿÿ…À„’‹H…É„‡V‰•lÿÿÿ‰D$‰$èrÿÿ…À‰Ç„h…|ÿÿÿ‰…dÿÿÿ‰D$‰<$è eÿÿH…I‹F<;G0th‰t$ƒïÿÿÿuȉD$‰4$èU¨ƒ…ðÿÿ‰D$‰4$èH¨ÇD$‰4$è=¨‹ƒŽ¨ÇD$‰t$‰$è(¨‹•dÿÿÿ‰$è’‹ƒk‰$è’Eä‹U‰$‹E 1Éèõùÿÿ‰4$1ö‰Çè’…ÿÇE”…ò‹M‹E‰L$‰$èï…Àt¿œÿÿÿÇE”éË}Ðu¤‰<$è®J‰t$‰<$¿˜ÿÿÿèJ‹UƒfV‰t$‰D$‰$èî‘‹M ‰ $è’@‰$èN‘ÇE”…À‰Ætr‹E ‰4$‰D$èë‘Ç$<è&‘…À‰E”tP‰p0‹U”‹Eä‰B,‹M‰$‰L$轑‹E”Ç@4ÿÿÿÿ‹Uà‹M”‹‚˜‰A8‰Š˜‹E‹M”‹‹Eèuöÿÿ…À‰Çt‹Eä‰$èí‰4$èå‹U”‰$èÚ‹ƒ3‰$è䋃k‰$èƒÄ|‰ø[^_ÉÃU‰åWVSè[쌋} ‹ƒdމ$è®Eä‰E„‰D$‹E‰$è“…Àt‹ƒdމ$è‚éÓ‹Eä‰|$‹€˜‰$èØ`ÿÿ…À‰Æ„óEĉD$‹F4‰D$‹ƒ`މ$èËŽ…Àu ‹Eȉ$èß]ÿÿEˆÇF4ÿÿÿÿ‰4$‰E€‰D$è^ÿÿ‰Æ‹ƒdމ$è ƒþ…þUà‹M´‰$‹E¸‹UèÅ÷ÿÿ‰Æ‹ƒdމ$èâ‹E„‰D$‹E‰$èÊ …Àt'‹ƒdމ$è¹…öu ‹Eà‰$è’Ž¾œÿÿÿé…öul‹Eä‰|$‹€˜‰$è÷_ÿÿ…À‰Çu+‹Eà‰$è^Ž‹E€‰$èÛ^ÿÿ‹ƒd޾“ÿÿÿ‰$èXëS‹@,‰$è3Ž‹Eà‰ù‰G,‹E‹‹Eè•ôÿÿ…À‰Æt‹Eä‰|$˜‰$è/_ÿÿ‹E€‰$è^ÿÿ‹ƒdމ$èÄŒ‰ð[^_ÉÃU‰åƒìH‰}ü‹}‰]ô‰uøè[‹w †0‰D$‰t$‹G‰$èöýÿÿ…À‰F,tEƒø“t@ƒøœuNë9‰4$è§Žë/‹Eä‹P‰UÔ‹p‹ƒ‚Œ‰$苎‰t$‹G Ç$ ‰D$ÿUÔ‰<$è\ÿÿ‹]ô‹uø‹}üÉ˳‚Œ‰4$èPŽEä‰D$‹G‰$èB …Àuë˜U‰å츉]ôE¸è[‰uø‹u ‰}ü‹}‰D$ÇD$‰4$èÃcÿÿ…À„â‹E¸ÇD$‰4$‰EÀ‹E¼‰EÄEȉD$è˜cÿÿ…Àt(Eà‰D$ ƒÙa‰D$‹ẺD$‹Eȉ$ènqÿÿƒøt‰t$ÇD$‰<$è¿é¯E°‰…lÿÿÿ‰D$ÇD$‰4$è6cÿÿ…ÀtÆUЉ•hÿÿÿ‰T$ÇD$‰4$ècÿÿ…Àt¥ƒ\a‰D$‹…lÿÿÿ‰$è@Vÿÿ…Àu‹•hÿÿÿƒÞa‰D$‰$è$Vÿÿ…Àt‰t$ÇD$œéhÿÿÿ‰4$èAÃÿÿ„À„Lÿÿÿ‹†¤…À„>ÿÿÿE܉D$‹†˜‰$è…Œ…À…!ÿÿÿ‹ƒÌ‹‰$èÉŒUØE䉕dÿÿÿ‰T$‰…`ÿÿÿ‰$è4 …Àt‰t$ÇD$œ‰<$è°éŸEÀ‰…\ÿÿÿ‰D$‹EØ‹€˜‰$è ]ÿÿ…À‰…pÿÿÿ…Û‹Mà…É…<‹“Ì‹‰$èDŒ‹ƒŒ‰$茋“Ì‹‰$è-Œ‹…dÿÿÿ‹•`ÿÿÿ‰D$‰$èž …Àt0‰t$ÇD$œ‰<$苃Œ‰$èÖ‹‹“Ì‹‰$éã‹…\ÿÿÿ‰D$‹EØ‹€˜‰$èa\ÿÿ…À‰…pÿÿÿu'‰t$ÇD$œ‰<$èÅ‹“Œ‰$è‹éŽ‹“Œ‰$èn‹‰t$‰<$½|ÿÿÿÇD$È芋…pÿÿÿ‰<$‰D$è΋‹Eà‰E¨‹E܉E¬‹EØ‹P‰•tÿÿÿ‹p‹ƒÌ‹‰$è-‹‰t$‰|$Ç$ ÿ•tÿÿÿë"‰t$ÇD$œ‰<$è$‹ƒÌ‹‰$èôŠ‹E܉$è+Š‹]ô‹uø‹}üÉÃU‰åƒì(‹UEð‰D$ Eô‰D$‹B`‰D$‹B\‰$èRƒÿÿ‹Eð‰D$ ‹Eô‰D$‹E ‰D$‹E‰$è£ÿÿÉÃU‰åƒì‰uø‹u ‰}ü‹}‹Fƒøu@ÇD$ÇD$‰4$è`ÿÿ…Àu‰u ‹uø‰}‹}üÉéëÿÿ‰u ‹uø‰}‹}üÉé›äÿÿƒøu‰u ‹uø‰}‹}üÉé¨íÿÿƒøu‰u ‹uø‰}‹}üÉéÎûÿÿ‰u‹uø‰}‹}üÇE õÉéÿÿÿèYU‰å‡x ǃÀ9ÂuóÉÃèY1ÀU‰åƒ¹#iu·wrÉÃèY1ÀU‰åƒ¹iÉ‘¦qDÂÃèY¸U‰å‘)x‹J@…ÉtƒÂ=Èuÿÿÿë=ÈtòHÉÃU‰åVSè[ƒìƒ»­hu"‹ƒ9wë ‹0‰$舉ð…Àuðǃ9wƒÄ[^ÉÃU‰åÉ鲕ÿÿU‰åÉé2~ÿÿU‰åÉéÅœÿÿU‰åÉég“ÿÿU‰åÉé ÿÿU‰åÉéG˜ÿÿU‰åÉéÿÿU‰åÉé&ÿÿU‰åÉéO†ÿÿU‰åÉé¹€ÿÿU‰åVƒì4‹u‹M …ö”Â…É”ÀÂu4‹E…Àt-‹E‰L$ÇD$‰4$‰D$Eô‰D$ èxžÿÿ…À~ ¸”ÿÿÿ븛ÿÿÿƒÄ4^ÉÃUèY‰å‹E‹„ýv‹@ÉÃU¸Œÿÿÿ‰åƒì‰]øè[‰uü‹u‹“˜g…Òt+…öt"€>t‹ƒ,†‰$èùSÿÿ‹]ø‰u‹uüÉéð¤ÿÿ¸›ÿÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åì8‰]ôè[‰uø‰}üƒ»>g…‹M…É„‹U¶„À„ó{…À‰Çt&‹EÀ‰$èâz‹Eĉ$è×z‹†@‰$è«z묋EÀ‰$è¼z‹Eĉ$è±z‹E$‰†8‹E ‰†<ƒJøÿÿ‰t$uȉD$‰4$è‡y‹ƒ¿z‰4$‰D$èzyÇD$‰4$èoyƒŸgÇD$‰t$‰$èZy1Àë ¸›ÿÿÿ븘ÿÿÿ‹]ô‹uø‹}üÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»Z…„³7b‰4$è‘zEô‰D$‹E‰$èƒøÿÿ…Àt‰4$èxz¸œÿÿÿëQ‰4$èiz‹E …Àt=‹u‹M…ö”Â…É”ÀÂu)‹E…Àt"‹E‰D$ ‹E‰D$‹E‰D$‹E ‰$è¾#ÿÿ븛ÿÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì8‰]øè[‰uüÇEôƒ»`Y…Å‹E…Àu3‹E ‰D$‹E‰D$‹E‰D$ ‹E‰D$‹E ‰D$‹E‰$èéþÿÿ鋳€a‰4$è yEô‰D$‹E‰$è’÷ÿÿ…Àt‰4$è‡y¸œÿÿÿëX‰4$èxy‹E …ÀtD‹E…À‹E”Â…À”ÀÂu0‹E …Àt)‹E ‰D$‹E‰D$ ‹E‰D$‹E‰D$‹E ‰$è‡ÿÿ븛ÿÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì8‰]øè[‰uüÇEôƒ»hX…Œ³ˆ`‰4$èâxEô‰D$‹E‰$èÔöÿÿHt‰4$èÊx¸œÿÿÿëZ‹E …Àt‹E…Àt‹M…Ét‹U…Òu‰4$èŸx¸›ÿÿÿë/‰4$èx‹E‰D$‹E‰D$ ‹E‰D$‹E ‰D$‹E‰$è÷Æÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åVSè[ƒì0ÇEôƒ»­W…®³Í_‰4$è'xEô‰D$‹E‰$èöÿÿHt‰4$èx¸œÿÿÿë|‹M …Ét)‹U…Òt"‹E …Àt‹E…À‹E”Â…À”ÀÂu‹E…Ày‰4$èÐw¸›ÿÿÿë=‰4$èÁw‹E ‰D$‹E‰D$‹E‰D$‹E‰D$ ‹E‰D$‹E ‰D$‹E‰$èŽÂÿÿƒÄ0[^ÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»ÍVuw³í^‰4$èKwEô‰D$‹E‰$è=õÿÿHt‰4$è3w¸œÿÿÿëE‹E …Àt‹E…Àu‰4$èw¸›ÿÿÿë(‰4$èw‹E‰D$ ‹E‰D$‹E ‰D$‹E‰$èÉÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì8‰]øè[‰uüÇEôƒ»'V… ³G^‰4$è¡vEô‰D$‹E‰$è“ôÿÿHt‰4$è‰v¸œÿÿÿën‹U …Òt"‹E…Àt‹E…À‹E”Â…À”ÀÂu‹E…Ày‰4$èQv¸›ÿÿÿë6‰4$èBv‹E‰D$‹E‰D$‹E‰D$ ‹E‰D$‹E ‰D$‹E‰$èiÍÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åVSè[ƒì0ÇEôƒ»XU…³x]‰4$èÒuEô‰D$‹E‰$èÄóÿÿ…Àt‰4$è¹u¸œÿÿÿéæ‹E ƒ} ÿ•Â…ÀžÀ„Ðu‹E…Àt‹M…Éu‰4$è†u¸›ÿÿÿ鳉4$ètuÇ$Lè'u‰Æ¸˜ÿÿÿ…ö„Ç ‹E‰F‹E‰D$† ‰$è°u‹E‰†<‹E‰†8‹E ‰Fƒ#ñÿÿ‰t$u؉D$‰4$èhs‹ƒ˜s‰4$‰D$è[sÇD$‰4$èPsƒx`ÇD$‰t$‰$è;s1ÀƒÄ0[^ÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ» Tuq³*\‰4$èˆtEô‰D$‹E‰$èzòÿÿ…Àt‰4$èot¸œÿÿÿë>‹E …Àt‹E…Àu‰4$èRt¸›ÿÿÿë!‰4$èCt‹E ‰D$‹E‰D$‹E‰$è^ãÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì8‰]øè[‰uüÇEôƒ»jS…³Š[‰4$èäsEô‰D$‹E‰$èÖñÿÿ…Àt‰4$èËs¸œÿÿÿéÍ‹E …Àt‹E…Àu‰4$è«s¸›ÿÿÿé­‰4$è™sÇ$LèLs‰Æ¸˜ÿÿÿ…ö„ŠÇ‹E‰F‹E ‰D$† ‰$èÕs‹E‰†<‹E‰†8ƒ5ïÿÿ‰t$u؉D$‰4$è“q‹ƒªq‰4$‰D$è†qÇD$‰4$è{qƒŠ^ÇD$‰t$‰$èfq1À‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»4Ruc³TZ‰4$è²rEô‰D$‹E‰$è¤ðÿÿ…Àt‰4$è™r¸œÿÿÿë0‹U …Òu‰4$èƒr¸›ÿÿÿë‰4$ètr‹E ‰D$‹E‰$èšÞÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»¢Qu³ÂY‰4$è rEô‰D$‹E‰$èðÿÿ…Àt‰4$èr¸œÿÿÿëL‹E …Àt‹E…Àt‹M…Éu‰4$èãq¸›ÿÿÿë(‰4$èÔq‹E‰D$ ‹E‰D$‹E ‰D$‹E‰$èßÿÿ‹]ø‹uüÉÃU¸Œÿÿÿ‰åVSè[ƒì0ÇEôƒ»øP…³Y‰4$èrqEô‰D$‹E‰$èdïÿÿ…Àt‰4$èYq¸œÿÿÿéæ‹E …Àt‹Eƒ}ÿ•Â…ÀžÀ„Ðu‹E…Àu‰4$è&q¸›ÿÿÿ鳉4$èqÇ$LèÇp‰Æ¸˜ÿÿÿ…ö„Ç‹E‰F‹E ‰D$† ‰$èPq‹E‰F‹E‰†<‹E‰†8ƒÃìÿÿ‰t$u؉D$‰4$èo‹ƒ8o‰4$‰D$èûnÇD$‰4$èðnƒ\ÇD$‰t$‰$èÛn1ÀƒÄ0[^ÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»ªOuN³ÊW‰4$è2pƒ} ÿ|Eô‰D$‹E‰$èîÿÿHt‰4$è p¸œÿÿÿë‹Eô‹U ‰”‰4$èïo1À‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»-OuN³MW‰4$èµoƒ} ÿ|Eô‰D$‹E‰$è—íÿÿHt‰4$èo¸œÿÿÿë‹Eô‹U ‰‰4$èro1À‹]ø‹uüÉÃU¸Œÿÿÿ‰åƒì(‰]øè[‰uüÇEôƒ»°Nu}³ÐV‰4$è.oEô‰D$‹E‰$è íÿÿ…Àt‰4$èo¸œÿÿÿëJ‹U ¸…ÒOE ‰E ‹E…Àu‰4$èîn¸›ÿÿÿë#‰4$èßn‹E‰D$‹E‰D$‹E ‰$è éþÿ1À‹]ø‹uüÉÃU‰åƒìh‰]ôè[‰uø¾Œÿÿÿ‰}ü‹} ÇE䃻 N…ëƒ)V‰Eĉ$èn‹EUä‰UÀ‰T$‰$èdìÿÿHt‹UÄf¾œÿ‰$èSné®…ÿ¸Nø‹E䉸t‹Eĉ$è0n‹U‰|$ÇD$ÇD$ÇD$ÇD$ ÇD$‰T$Ç$èUñþÿ…À‰Æ…GÇ$¾˜ÿÿÿè•m…À‰E¼„+Ç$è~m…À‰E¸u ‹E¼‰$éû‹U¼‰:‹U‹E¸‰P‹U¼‰P ‹Eĉ$è“m‹UÀ‹E‰T$‰$è{ëÿÿHt+‹Uľœÿÿÿ‰$èim‹E¸‰$èFl‹U¼‰$è;l鮋E¸uȉ4$‰D$ƒ‰D$è“k‹ƒl‰4$‰D$è†k‰4$ÇD$è{k‹E¸‰t$ ÇD$ÇD$ƒÀ‰D$‰øÁèøÑøƒè‰D$ƒ‰U‰$èbk…À‰Æt#‹Uĉ$èÃl‹E¸‰$è k‹U¼‰$è•kë ‹Eĉ$è l‰ð‹]ô‹uø‹}üÉÃU‰åVƒì‹u‹F ‹‰D$‹F‰$è¹ýÿÿ‰uƒÄ^Éé:ÿÿU‰åƒì(‰uø‹u‰]ôè[‰}üFÿ=Æw »ïZ‹·…Àt‰$èk1ÀǷ븜ÿÿÿ‹]ô‹uø‹}üÉÃUºŒÿÿÿ‰åƒìH‰]ôè[‰uø‰}üƒ»^K…ûƒ~S‰EÔ‰$èãk‹‹VK…ÉtE‹EÔ‰$èÉk‹E‰$èçÖÿÿºœÿÿÿ…À…½‹EÔ‰$è«kEä‰D$‹E‰$è“éÿÿƒøœuK‹EÔ‰$è„kºœÿÿÿ醋w…öt‹F‰$èPj‰4$èHj‹EäÇD$‰|$œ‰$èdi‹E䜉$èci…À‰Çu´‹EäÇD$œ‰$è;i‹E‰$è£þÿÿ‹EÔǃVK‰$èöj1Ò‹]ô‰Ð‹uø‹}üÉÃU‰åƒìX‰]ôè[‰uø¾Œÿÿÿ‰}üÇE䃻4J…‹»TR‰<$è°j‹ƒ0J…Àu‰<$f¾œÿè•jéb‰<$¾œÿÿÿèƒj‹E‰$è/²ÿÿ…À…B‰<$èmjEä‰EÔ‰D$‹E‰$èRèÿÿƒøœ„‰<$èBj‹Eä‹€tÇD$ÇD$ÇD$‰D$‹EÇD$ ÇD$Ç$ÿÿÿÿ‰D$è^íþÿ‰<$‰Æèõi‹EÔ‰D$‹E‰$èÝçÿÿƒøœu‰<$¾œÿÿÿèÌi陋Eä‹€|‰$èi‹Eä‹€€‰$è i‹Eä‹€x‰$èÖh‹EäÇD$œ‰$è¡g‹E䋀ЅÀt$ÇD$ ÇD$ÇD$Ç$è=“ÿÿ‹E‰$èØüÿÿǃ0J‰<$è.i‰ð‹]ô‹uø‹}üÉÃèYU‰å‹U·Wƒ<ÉÀƒàœÃU‰åW1ÿVƒì ‹E‰$èhh‰Eô‹E @‰Eð‹Eô‰|$‰$è@h…À‰Æt-‹EðG‰4$‰D$è¼ÿÿÿ‰4$èTh‰4$èQh‰4$è:hƒÿdu¾ƒÄ ^_ÉÃU‰åVƒì$Eô‰$èg…Àuk‹Uô‰Öë‹F¨u¨t‹F €xu xu‹6…öu݉$èAg1À…öu8ë1‹@‰$èjgÇD$´‰D$‹E‰$èÀh‹EÆ€³‹Uô뿸—ÿÿÿƒÄ$^ÉÃU‰åƒì8‰]ôè[‰uø¾Œÿÿÿ‰}üÇE䃻]G»}Ou<‰<$f¾œÿèÙgEä‰D$‹E‰$èÁåÿÿHu} }f¾þ‹E ¾‰ƒaG‰<$èœg‰ð‹]ô‹uø‹}üÉÃU¹Œÿÿÿ‰åƒì8‰]ôè[‰uø‰}üƒ»×F…‹E±›‹}…À”Â…ÿ”ÀÂ…»÷N‰<$èEg‹³ÏF…öt‰<$è.g¹ˆÿÿÿé׃Vº‰Eä‹HB…ÉtƒÀúÈuí¸šÿÿÿ‹Uƒøš‰uëúÈBÿuéëâÇ$Ôè˜f…À‰Æu‰<$èËf¹˜ÿÿÿëwÇ‹E‰F‹U †œdž˜‰VÇD$ÇD$‰$è¾ddžtdžÿÿÿÿdž”ÿÿÿÿ‹U‹‹UäǃÏF‰4‚‰<$èOf1É‹]ô‰È‹uø‹}üÉÃU‰åì‹M‰}ü‹} ‰]ôè[…ɔ…ÿ”ÀЉuø…•„Ò……,ÿÿÿ‰…$ÿÿÿ‰D$Eà‰D$ Eä‰D$ÇD$‰ $èÔ{ÿÿƒø‰Æ~¾”ÿÿÿëVuTƒ7‰D$‹…$ÿÿÿÇD$‰$è6f‹Eä‰|$‰$èFe‰Ç‹Eä‰$èvd…ÿtƒÿf”À¶ðtv•ë¾›ÿÿÿ‰ð‹]ô‹uø‹}üÉÃU‰å옉]ôè[‰uø¾Œÿÿÿ‰}üƒ»³D…å‹E f¾›ÿ…À‹E”Â…À”À…ɃÓL‰…þÿÿ‰$èe‹»¯D…ÿt‹•þÿÿf¾ˆÿ‰$èód锳óSº‰ð‹HB…ÉtƒÀúÈuí¸šÿÿÿ‹U ƒøš‰uë úÈBÿuéëâ‹…þÿÿ‰$ëÇ$ÔèXd…À‰Çu‹•þÿÿ‰$è…d¾˜ÿÿÿé!‹U ‹—x‰<†G LJЉ…œþÿÿ‹E ‰• þÿÿ…À„ˆ‹E…À‹E•…§þÿÿ…À”À„…§þÿÿ…h‹E…Àu0‹E ‰T$‰$èÓýÿÿ…À‰Æ…TÇ$è§d‰…´þÿÿéRƒ}…‹U …xÿÿÿ‰D$‰$è2d@„‹E¨‹U¬‰…¨þÿÿƒš4‰•¬þÿÿ‹U˜‰D$‹E ‰•´þÿÿ‰$èzb…À‰Æ„Ø‹…¨þÿÿ@‰$èBc…À‰…˜þÿÿu‰4$¾˜ÿÿÿè;b鲋•¨þÿÿ‹…˜þÿÿ‰t$ ÇD$‰T$‰$è&b3…¨þÿÿ …¬þÿÿt ‰4$¾ þÿÿè÷a‹•˜þÿÿ‰$èbé`‹•˜þÿÿ‹…¨þÿÿƉ4$èÌa‹… þÿÿ‹•˜þÿÿ‰D$‰$èb‰Æ‹…˜þÿÿ‰$è½aë3ƒ}…Ç$ègc‹• þÿÿ‰T$‰…´þÿÿ‹E ‰$èMb‰Æ…ö•À„…§þÿÿtƒþf”À¶ðtv•éÌ‹E…À„wƒ}u9•ÄþÿÿÇ…ÄþÿÿdescÇ…ÈþÿÿriptÇ…Ìþÿÿion.Ç…Ðþÿÿxml‰•”þÿÿ騋E ÇD$.‰$è¿b…À‰Âtƒ9‰D$‰$èpb…Àt‹• þÿÿ¾þÿÿ‹‰$è5aé9‹E ÇD$/‰$èvb…À‰ÆDu ‰4$èRb=³v‹• þÿÿ‹‰$èö`‰4$è”`éÊ…Äþÿÿ‰t$‰…”þÿÿ‰$èb·ƒNuØÇEØÇEÜÇEàfÁÀf‰EÚƒSMÇEäÆEÙ‰$ès`‹•œþÿÿ‰t$‰T$‹•”þÿÿ‰EÜ‹…´þÿÿ‰T$‹• þÿÿ‰D$ ‹‰$èO…À‰ÆtV‹• þÿÿ‹‰$èF`éJ‹E ‰$è{a=³v‹• þÿÿ‹‰$è`¾Šÿÿÿé‹E ‹•œþÿÿ‰D$‰$è6a1Àƒ}Ç·œ•À‰‡Ð‹E‰G‹ULJtLJ|LJ€‰WÇD$ÇD$‰4$è•^ƒ]2LJ˜LJÿÿÿÿLJ”ÿÿÿÿ‰D$‹‡x‰$èr_…À‰‡|„…ƒ(21ö‰D$‹‡x‰$èJ_‰‡€‹…œþÿÿ‰D$‡„‰D$‹‡x‰$è#ÿÿ‹•þÿÿǃ¯D‰$èÃ_ëg¾›ÿÿÿë¾ þÿÿ‹U ‹‰$è@óÿÿ‹…þÿÿ‰$èš_ë>‰4$¾•ÿÿÿÇD$è¨]‹‡x‰$è·^‹U ‹‰$èóÿÿ‹…þÿÿ‰$èZ_‰ð‹]ô‹uø‹}üÉÃU‰åƒì8‰]ôè[‰}ü¿Œÿÿÿ‰uøƒ»š>…hƒºF‰E܉$è_‹ƒ–>…Àt‹UÜf¿ˆÿ‰$èü^é9‹E‹} …À”Â…ÿ”ÀÂu‹u…öt‹E€8u‹UÜ¿›ÿÿÿ‰$èÄ^é»ÚMº‰ø‹HB…ÉtƒÀúÈuí¸šÿÿÿ‹Uƒøš‰uë úÈBÿuéëâ‹E܉$ëÇ$Ôè,^…À‰Æu‹U܉$è\^¿˜ÿÿÿ锋U‹‰4‡F džÐÇ‹U‰Eà‰$‰T$è^‹E ‰F‹U†œdžtdž|dž€‰Vdžx‰EäÇD$ÇD$‰$è\†xdž˜džÿÿÿÿdž”ÿÿÿÿ‹Uà‰D$‰$è]÷ÿÿ…À‰Çt%‹EäÇD$‰$è©[‹U‹‰$èñÿÿ驃D,‰D$‹†x‰$è¡\…À‰†|u@‹Uä¿•ÿÿÿÇD$‰$è][‹†x‰$èl\‹U‹‰$èµðÿÿ‹E܉$è]ëRƒ,‰D$‹†x‰$è?\‰†€‹Uà†„‰D$‰T$‹†x‰$è ÿÿǃ–>‹E܉$è¾\‰ø‹]ô‹uø‹}üÉÃU¸Œÿÿÿ‰åVSè[ƒì ƒ»ý;…áEôuì‰t$‰$è¯ÚÿÿHu ‹Eô‰$èŠñÿÿEð‰t$‰$èðÚÿÿ…Àu ‹Eð‰$è=ðÿÿƒ}C‰$èØZèñÿÿ謅ÿÿƒÝH‰$è¬Zƒ]E‰$èžZƒG‰$èZƒ½J‰$èà[ƒD‰$èæ[ƒýJ‰$èÄ[ƒ»ý;u"‹ƒ‰Jë ‹0‰$è´Z‰ð…Àuðǃ‰Jǃý;1ÀƒÄ [^ÉÃU‰åƒìX‰]ôè[‰uø¾—ÿÿÿ‰}ü·} ƒ»ö:„[‹ƒŠY³C‰$è+'ÿÿÇ$è\‰$è¦[ÇD$‰4$è<[…À…AƒöIÇD$‰$è […À…#ƒ¶IÇD$‰$èìZ…À…‰4$èÿZ‹E…Àt-‹E‰D$ƒ–C‰$èV[‹‹ö:ƒ6J …Ét3냖C‰$èòÿÿ…ÀtÖ‰4$è¬Z骉4$¾—ÿÿÿèšZérǃÀ9Ðuó‰4$uÌè}Z‰4$è³XÇD$ ‰4$è·XÇD$‰4$è±XÇD$ ‰4$èXÇD$ˆ‰4$èxXÇD$d‰4$èrXƒF‰t$‰Eĉ$èŠX…Àtǃö:èLýÿÿ¾‹ÿÿÿéЃVD‰t$‰$è[X…ÀuуÖG‰t$‰$èEX…Àu»‹ƒ~Yǃö:‰$èÿÿ‹ƒ†Y‰$è ÿÿ‹EĉD$ƒvB‰$èX…À‰Ætǃö:èÆüÿÿëR·Ç‰$èî ÿÿ…À‰Æè®üÿÿƒþÿǃö:u-éNÿÿÿf‰ƒJDÇ$è-Óÿÿ…À‰Ætè|üÿÿǃö:‰ð‹]ô‹uø‹}üÉÃU1ɉåWV‹uSè[»8‰ú‹ƒÂ9ðu‹DÏë Aƒù!uëƒu/[^_ÉÃU¸›ÿÿÿ‰åVƒì‹U …Òt3‹E‰T$‰$茘ÿÿ‰Æ¸”ÿÿÿ…öt‹E‰t$‰$èY‰4$èW1ÀƒÄ^ÉÃU‰åƒìH‰Eà‹E‰]ôè[…ɉ}ü‰×”Â…À”À‰uø‰Î¹›ÿÿÿ…ô‹…À……Ç$ÐèX…À‰EÜ„΋Mà…Ét‹E‰t$‰t$‰D$ ƒü.ë‹E‰t$‰t$‰D$ ƒ)/‰D$‹E܉$èCX‹E܉|$‰$è”W‰Æ‹E܉$èÄV…öt ƒþf¹•ÿÿÿugë`‹U 1É…Òt\‹‰$è7W‰Eä‹E ‰D$‹‰$èÝV‰Æ‹E…Àt‹E‰D$‹‰$èÈV‰4$‰D$èóV‹Eä‰t$‰$èäV1É빘ÿÿÿ‹]ô‰È‹uø‹}üÉÃU‰åƒìh‰]ôè[…Ò‰}ü‰×”…ɉEÈ”À‰uø‰Î…#Ç$ÐèßV…À‰EÄ„ ‹EÈ…ÀtƒË-‰|$‰t$ ‰|$ë‰|$ƒø-‰t$ ‰|$‰D$‹Eĉ$è$WEä‰D$‹Eĉ$èrV…Àt‹Eĉ$è U骋Eĉ$èU‹Eä…À„”‹E…ÀŽ„‹u ÇEЋEƒÀ…ö‰EÌ‹E‹8tM‹Eä‰$èéU‰t$‰EÔ‹Eä‰$è‘U…ÿ‰Æt‹Eä‰|$‰$èU‰4$‰D$è¬U‹EÔ‰t$‰$èUÿEЋEÐ9Et‹ẼÀ‰E‹EÌ‹0놋Eäë1À‹]ô‹uø‹}üÉÃU‰åƒì(E‹U‰Eô‹M ‰D$‹E‰D$‹E‰$1ÀèxþÿÿÉÃU‰åƒì(E‹U‰Eô‹M ‰D$‹E‰D$‹E‰$¸èIþÿÿÉÃU‰åV‹E‹u‹U‹M ‰E‹E‰u‰E ¸^ÉéèüÿÿU‰åV‹E‹u‹U‹M ‰E‹E‰u‰E 1À^ÉéÃüÿÿU‰åWVSè[ƒì|uŸÇD$I‰4$ƒ ,‰D$èñT‹M º›ÿÿÿ…É„¥‹E‹…Òu‰D$‰4$è®Tº˜ÿÿÿ…À…ƒ‹U‹‰$ègT‹U‰E”ƒ,‰D$‹‰$èT‹U‰Ç‹E ‰D$‹‰$èñS‰Æ‹E…Àt ‹E‹U‰D$‹‰$èÙS‰4$‰D$èT‰t$‰<$èøS‹E”‰|$‰$èéS1ÒƒÄ|‰Ð[^_ÉÃU‰å옉]ôè[‰uøu—‰}üÇD$I‰4$ƒ/+‰D$èýSEà‰D$‰4$èÐS…À…Ë‹u…öŽÀ‹u E‰EäÇE„éš‹Uä…öB‰Eä‹:t}‹Eà‰$èaS‰…|ÿÿÿƒ!+‰D$‹Eà‰$èS‰t$‰E€‹Eà‰$èîR…ÿ‰Æt‹Eà‰|$‰$èÞR‰4$‰D$è S‹E€‰t$‰$èúR‹E€‰D$‹…|ÿÿÿ‰$èåR‹UäB‰Eä‹2ÿE„‹E„9E…Zÿÿÿ‹Eàë1À‹]ô‹uø‹}üÉÃU‰å‹EÇ@Ç@Ç#EgÇ@‰«ÍïÇ@þܺ˜Ç@ vT2ÉÃU‰åW‰ÏV1öƒì‰Eô‰Uðë)‹Uð‹Môò‹ñƒÆˆ‹ÁèˆA‹ÁèˆA‹ÁèˆA9þrÓƒÄ^_ÉÃU‰åWV¾ìà‰E˜‹J‰…(ÿÿÿ‹E˜ƒÀ‰Eœ‹E˜‹@‰E¨‹E˜ƒÀ‰E ‹E˜‹@‰E¬‹E˜ƒÀ ‰E¤‹E˜‹x E¸‰…,ÿÿÿ¶Aý¶QüÁà ¶AþÁà ¶AÿƒÁÁà ‹…,ÿÿÿ‰T°üFƒþu΋E¨‹U¨#U¬÷Ð!ø ‹…(ÿÿÿU¸Œx¤j׋U¨ÁÉM¨‰È!Ê÷Ð#E¬ ÂU¼¼V·Çè‰ÊÁÏ<9‰ø!ú÷Ð#E¨ ‹E¬UÀ´Ûp $‰úÁÎ47‰ð!ò÷Ð!È Â‹E¨UÄ”îνÁ‰ðÁÊ !ЉE”‰Ð÷Ð!ø E”‹E”EÈŒ¯|õ‰ÐÁÉ !ȉE‰È÷Ð!ð E‹EE̼*ƇG‰ÈÁÏ<9!ø‰EŒ‰ø÷Ð!Ð EŒ‹EŒEдF0¨‰øÁÎ47!ð‰Eˆ‰ð÷Ð!È Eˆ‹EˆEÔ”•Fý‰ðÁÊ !ЉE„‰Ð÷Ð!ø E„‹E„EØŒؘ€i‰ÐÁÉ !ȉE€‰È÷Ð!ð E€‹E€Eܼ¯÷D‹‰ÈÁÏ<9!ø‰…|ÿÿÿ‰ø÷Ð!Ð …|ÿÿÿ‹…|ÿÿÿEà´±[ÿÿ‰øÁÎ47!ð‰…xÿÿÿ‰ð÷Ð!È …xÿÿÿ‹…xÿÿÿE䔾×\‰‰ðÁÊ !Љ…tÿÿÿ‰Ð÷Ð!ø …tÿÿÿ‹…tÿÿÿEèŒ"k‰ÐÁÉ !ȉ…pÿÿÿ‰È÷Ð!ð …pÿÿÿ‹…pÿÿÿE켓q˜ýÁÏ<9‰ø÷ЉE´‰È!ø‰…$ÿÿÿ‹E´!Ð …$ÿÿÿ‹…$ÿÿÿEð´ŽCy¦ÁÎ47‰ð÷ЉE°‰ø!ð‰…$ÿÿÿ‹E°!u´!È …$ÿÿÿ‹…$ÿÿÿEô”!´I‰øÁÊ !Ð E´E¼!U°Œb%ö‰ðÁÉ !È E°Eм@³@À‰ÐÁÏ<9!ø‰…dÿÿÿ‰Ð÷Ð!È …dÿÿÿ‹Eä…dÿÿÿ´QZ^&‰ÈÁÎ47!ð‰…`ÿÿÿ‰È÷Ð!ø …`ÿÿÿ‹E¸…`ÿÿÿ”ªÇ¶é‰øÁÊ !Љ…\ÿÿÿ‰ø÷Ð!ð …\ÿÿÿ‹EÌ…\ÿÿÿŒ]/Ö‰ðÁÉ !ȉ…Xÿÿÿ‰ð÷Ð!Ð …Xÿÿÿ‹Eà…Xÿÿÿ¼SD‰ÐÁÏ<9!ø‰…Tÿÿÿ‰Ð÷Ð!È …Tÿÿÿ‹Eô…Tÿÿÿ´æ¡Ø‰ÈÁÎ47!ð‰…Pÿÿÿ‰È÷Ð!ø …Pÿÿÿ‹EÈ…Pÿÿÿ”ÈûÓç‰øÁÊ !Љ…Lÿÿÿ‰ø÷Ð!ð …Lÿÿÿ‹EÜ…LÿÿÿŒæÍá!‰ðÁÉ !ȉ…Hÿÿÿ‰ð÷Ð!Ð …Hÿÿÿ‹Eð…Hÿÿÿ¼Ö7ÉÐÁÏ<9!ø‰…Dÿÿÿ‰Ð÷Ð!È …Dÿÿÿ‹EÄ…Dÿÿÿ´‡ Õô‰ÈÁÎ47!ð‰…@ÿÿÿ‰È÷Ð!ø …@ÿÿÿ‹EØ…@ÿÿÿ”íZE‰øÁÊ !Љ…<ÿÿÿ‰ø÷Ð!ð …<ÿÿÿ‹Eì…<ÿÿÿŒé㩉ðÁÉ !ȉ…8ÿÿÿ‰ð÷Ð!Ð …8ÿÿÿ‹EÀ…8ÿÿÿ¼ø£ïü‰ÐÁÏ<9!ø‰…4ÿÿÿ‰Ð÷Ð!È …4ÿÿÿ‹EÔ…4ÿÿÿ´Ùog‰ÈÁÎ47!ð‰…0ÿÿÿ‰È÷Ð!ø …0ÿÿÿ‹Eè…0ÿÿÿ”ŠL*‰ðÁÊ 1Ð1øEÌŒB9úÿ‰ÐÁÉ 1È1ðEؼöq‡‰ÈÁÏ<91ø1ÐEä´"am‰øÁÎ471ð1ÈEð” 8åý‰ðÁÊ 1Ð1øE¼ŒD꾤‰ÐÁÉ 1È1ðEȼ©ÏÞK‰ÈÁÏ<91ø1ÐEÔ´`K»ö‰øÁÎ471ð1ÈEà”p¼¿¾‰ðÁÊ 1Ð1øEìŒÆ~›(‰ÐÁÉ 1È1ðE¸¼ú'¡ê‰ÈÁÏ<91ø1ÐEÄ´…0ïÔ‰øÁÎ471ð1ÈEДˆ‰ðÁÊ 1Ð1øEÜŒ9ÐÔÙ‰ÐÁÉ 1È1ðEè¼å™Ûæ‰ÈÁÏ<91ø1ÐEô´ø|¢‰øÁÎ471ð1ÈEÀ”eV¬Ä‰øÁÊ ÷Ð Ð1ðE¸ŒD")ô‰ðÁÉ÷Ð È1ÐEÔ¼—ÿ*C‰ÐÁÏ÷Ð<9 ø1ÈEð´§#”«‰ÈÁÎ÷Ð47 ð1øEÌ”9 “ü‰øÁÊ ÷Ð Ð1ðEèŒÃY[e‰ðÁÉ÷Ð È1ÐEļ’Ì ‰ÐÁÏ÷Ð<9 ø1ÈEà´}ôïÿ‰ÈÁÎ÷Ð47 ð1øE¼”Ñ]„…‰øÁÊ ÷Ð Ð1ðEØŒO~¨o‰ðÁÉ÷Ð È1ÐEô¼àæ,þ‰ÐÁÏ÷Ð<9 ø1ÈEдC£‰ÈÁÎ÷Ð47 ð1øE씡N‰øÁÊ ÷Ð Ð1ðEÈŒ‚~S÷‰ðÁÉ÷Ð È1ÐEä¼5ò:½‰ÐÁÏ÷Ð<9 ø1ÈEÀ´»Ò×*‰ÈÁÎ÷Ð47 ð1øEÜ(ÿÿÿ”‘Ó†ë‹E˜ÁÊ ‰‹Eœ‹U 2‹E¤8¸‹•,ÿÿÿÆDÿ@ƒøAuïÄà^_ÉÃU‰åWVƒì‹U‹u‹B‹U‰ÁÁâÁéЃá?9‰Fv ‹VB‰Vë‹}‹W‹E¾@)ÎÁèЋU‰B1À9uz‰}ôrBù1Òë ‹} ¶ˆ B9òrñ‹Uô~?‹EèÚöÿÿu ë‹E‰òƒÇ@ƒÆ@èÅöÿÿ9}wëGÁ1É‹U ‹}4‹Uô)ÇÊ1É불 A9ùrôƒÄ^_ÉÃU¹‰åWVSè[ƒì,‹u }à‰øVè(öÿÿ‹Fº8Áèƒà?ƒø7vºx)ƒë)‰T$‰D$‰4$èêþÿÿÇD$‰|$‰4$èÖþÿÿ‹E¹‰òèÕõÿÿ¸ÆD0ÿ@ƒøYuõƒÄ,[^_ÉÃU‰åƒì(EðÇD$‰$èÍG‹EôiMð€–˜€A‹M‰ÂÁú@ÒÒ²‰‰QÉÃU‰åWV쀽”þÿÿu ‰<$ÇD$ ÇD$è5H‰<$ÇD$ègG…œþÿÿÇD$‰$è=G‰4$èïôÿÿ‰|$‰4$ÇD$ èþýÿÿ‹E‰t$‰$è±þÿÿÄ€^_ÉÃU‰åƒì(‰]øè[‰uü‹u‹ƒH>…Àu-Eè‰$èOÿÿÿ€M耋EèǃH>‰ƒ@>·Eìf‰ƒD>‹ƒ@>‰·ƒD>f‰F‹]ø‹uüÉÃU‰åSƒìD‹Uè[¶B‰D$0¶B‰D$,¶B ‰D$(¶B ‰D$$¶B ‰D$ ¶B ‰D$¶B ‰D$¶B‰D$·B‰D$·B‰D$ ‹‰D$ƒ´‰D$‹E ‰$èpGƒÄD[ÉÃU‰åWVSè[쌋ƒE‰$èæF‹ƒ{=…Àufǃ=ǃ{=EȉE˜‹U˜‰$èþÿÿ‹ƒ‡=‹“‹=‹uÈ‹}̉E¸‹E¸‰U¼‹U¼1ð1ú Â…·ƒ=f=ÿw¾@f‰ƒ=·ƒ=‹U¸‹M¼ÇE¬‰E¨U¨M¬‹U¬‹E¨‰“‹=U≃‡=‰U¤‰$èNþÿÿ‹»g=…ÿt]‹ƒ=‹““=·‹=‹u¤‰E°‹ƒ—=‰U´UÜüf‰M”‰EÜ·ƒ›=‰×ÇE ¹f‰Eàó¦¸t ¶Fÿ¶Oÿ)È…Àt[‹³w=…öu2‹M˜‰ $èýÿÿ‹UÌ‹EȬРÁê ‰EÈ1ЉỦ$è Fǃw=è·Ef‰E”ë*fǃ=‰u¸‰}¼éÿÿÿ‹}´9}¬wr‹E°9E¨sfÿE”·U”‹}â·uæ‹E‰Uœ‰Ñ‹U¨‰}Öf‰uÚ‰‹U¬‹E¨‰Ð1Ò‹Uf‰B‹U¬‹E¨‰Ð1Ò‹UÁèf%ÿ€ÌˆJ á?ÁéƒÉ€f‰BˆJ‰z f‰r¶Eæ¶Mç¶Uâ¶uäˆE–‹ƒg=ˆM—¶}ã¶MåˆUÇ…Àu‹E¨‹U¬Çƒg=‰ƒo=‰“s=·Uœ‹E¨ˆ‹š=‰ùˆ‹˜=f‰“=‹U¬‰ƒ=¶E–‰““=¶U—ˆƒ›=¶ELj“œ=‰òˆ“™=‹U¬;“s=ˆƒ—=r*w ‹M¨;‹o=rE¨áõƒU¬‹E¨‹U¬‰ƒo=‰“s=‹ƒE‰$è*DÄŒ¸[^_ÉÃU‰å‹M ‹UV‹9t rJ¸ëH·Af9Buí·Af9Buã¶A8BuÚ¶A 8B uщ։ʹ¶B 8F r w¿FBIuð1Àë¸ÿÿÿÿ^ÉÃU‰åWVì¶E·u·M‹}ˆEç¶Ef‰uÞfÁÆ‹U f‰MÜfÁÁf‰uÞu€ˆEæ¶EÊf‰M܉U؈Eå¶E‰4$ˆEä¶EˆEã¶EˆEâ¶EˆEá¶EˆEàè ðÿÿE؉D$‰4$ÇD$èùÿÿ‹E ‰4$‰D$‹E‰D$èùÿÿEè‰t$‰$èµùÿÿ‹U艋EìʉG‹Eð‰G‹EôfÁG‰‰G ·GfÁÀf%ÿ€Ì0f‰G¶Gƒà?ƒÈ€ˆGÄ^_ÉÃU‰åWVSìL‹E è[·p‹@fÁƉ$·öèÉA‰t$ ³È‰D$ƒ‰D$…Üþÿÿ‰…¼þÿÿ‰$è¿BU؉•Àþÿÿ‰$è$ÿÿEȉ…Äþÿÿ‰$èÿÿ‹U‰t$‰$èŠA…À‰…Ôþÿÿ…ñ‹E‰t$‰$è^A…À‰Æ„‹‹•Àþÿÿƒ‰D$‰$èÙ ÿÿ…À…k‹…¼þÿÿ‹•Àþÿÿ‰D$‰$è¹ ÿÿ…À…K‹…Àþÿÿ»»‰|$‰$è™ ÿÿ…À…+‹•Äþÿÿ‰|$‰$è ÿÿ…À…‹E‰$èA…À„‰t$‰$è÷@…À‰Ç…û‹EØ‹U‰D$‰$è¤@Ç…Èþÿÿ…À„í‰D$‰4$è½@é•‹…ÔþÿÿÇD$‰$è˜@‰$è¤@…À‰Ç„’‰$èµ@…À‰Æ„‡E‰D$‰4$è‚A‰4$‰D$è™ÿÿ…Àˆd‹U…Ò…Y‹E˜‹•Àþÿÿ‰D$‹E”‰$‰D$è ÿÿ…À…'ƒ$‰D$‹…Àþÿÿ‰$èu ÿÿ…À…‹•¼þÿÿ‹…Àþÿÿ‰T$‰$èU ÿÿ…À…ç‹E¤…Àt‹U €:/t=‹•Àþÿÿ³»‰t$‰$è& ÿÿ…À…¸‹…Äþÿÿ‰t$‰$è ÿÿ…À…ž‹U ‹E¤‰T$‹•Àþÿÿ‰D$‰$è! ÿÿ…Àu~‹E¤‰D$‹E ‰D$‹…Äþÿÿ‰$è ÿÿ…Àu^‹UØ‹EÜ€|ÿ/t'‹•Àþÿÿƒ»ÇD$‰D$‰$èÐ ÿÿ…Àu-‹U؉T$‰<$èU?…À‰Çu+‹…Äþÿÿ1ÿ‰$è< ÿÿ‰…Èþÿÿë)¿˜ÿÿÿë ¿•ÿÿÿë¿”ÿÿÿÇ$èÃ>Ç…Èþÿÿ‹•Ôþÿÿ‰$è¿>‹…Äþÿÿ‰$è0 ÿÿ‹•Àþÿÿ‰$è" ÿÿ…ÿÇ…ÐþÿÿÇ…Ìþÿÿ…¥‹…Èþÿÿ‰$è›?…À‰Æt‹•Èþÿÿ»x€|ÿ/t»»‹E€8/‰<$”À¶ÀEèe?‹U‰$ÆèX?D‰$è„>…À‰…Ìþÿÿu¿˜ÿÿÿÇ…Ðþÿÿé*‹•Èþÿÿ‹…Ìþÿÿ‰T$‰$è?‹•Ìþÿÿ‰|$‰$èæ>‹E‹•Ìþÿÿ‰D$‰$èÑ>‹¼þÿÿ‹ƒÁÿþþþ÷Ð!Â €€té‰Ð¿ŠÿÿÿÁè÷€€DÐADÈ‹…ÌþÿÿÒƒÙ+¼þÿÿ‰$qè>Ç…ÐþÿÿÆþ³‡‹U1ÿÇhttpÇB://‹…¼þÿÿ‰$‰D$èC>‹•Ìþÿÿ‹E‰T$‰$è.>‹U‰$èj=…À‰…Ðþÿÿt3‹•Ðþÿÿ‹E‰$‰D$ è">‹•Ìþÿÿ‰$‰D$‹…Ðþÿÿ‰D$èqgÿÿ‰Ç‹…Èþÿÿ‰$èW<‹•Ìþÿÿ‰$èI<…ÿt‹…Ðþÿÿ‰$è¯<ÄL‰ø[^_ÉÃUSN: ST: LOCATION: EXT:CACHE-CONTROL: max-age=RsdcDscsscSXcsscssccssdp:alivessdp:byebyeNTS: NT: :239.255.255.250QsssdcsdcsscsscsscSXcsscc"ssdp:discover"%s::upnp:rootdeviceupnp:rootdevice%s::%s%imax-age = %d%0HOST: %s:%d MX: %d ST: %s uuid:schemas:deviceuuid:%surn%suuid::urn::service:urn:device:::upnp:rootdevice:all:rootdeviceuuid:deviceTypeUDNserviceserviceType239.255.255.250:1900CONTENT-TYPE: text/xml; charset="utf-8" Invalid ActionAction FailedInvalid Var%d
s:Client UPnPError EXT: RNsDsSXccsssssBodyhttp://schemas.xmlsoap.org/soap/envelope/"%surn:schemas-upnp-org:control-1-0 %q%i ; ns = %s-SOAPACTION%sQueryStateVariableXML error RNsDsSXccsss*RNsDsSXccbbbbOut of memory%s:%s%0M-SOAPACTION:MAN: "http://schemas.xmlsoap.org/soap/envelope/"; ns=01 01-EnvelopeQueryStateVariableResponsereturnerrorCodeerrorDescriptionFaultdetailUPnPError SOAPACTION: "urn:schemas-upnp-org:control-1-0#QueryStateVariable"QsbcNssUccsss <%s:%s "#SOAPACTION: "qNssssbscUcbbbbbbbResponse qNssssbscUcbbb127.0.0.1ShutDownserviceListserviceIdSCPDURLcontrolURLeventSubURLdevicerootURLBaseACCEPTACCEPT-CHARSETACCEPT-ENCODINGACCEPT-LANGUAGEACCEPT-RANGESCACHE-CONTROLCALLBACKCONTENT-ENCODINGCONTENT-LANGUAGECONTENT-LENGTHCONTENT-LOCATIONCONTENT-RANGECONTENT-TYPEDATEEXTHOSTIF-RANGELOCATIONMANMXNTNTSRANGESEQSERVERSIDSOAPACTIONSTTETIMEOUTTRANSFER-ENCODINGUSER-AGENTUSNGETHEADM-POSTM-SEARCHNOTIFYPOSTSUBSCRIBEUNSUBSCRIBE ()<>@,;:\"/[]?={}%ihttp%w/%w%L%c%d . %d %d : %R%c, chunked%x%L%c%c%s %S%w%c%s %S %ihttp%w/%w%L%c%d . %dhttp/%x %s/%s, UPnP/1.0, Portable SDK for UPnP devices/1.6.6 rb0 %xTRANSFER-ENCODING: chunked %zu%lldDATE: %s%s, %02d %s %d %02d:%02d:%02d GMT%sCONNECTION: close CONTENT-LENGTH: shcSERVER: USER-AGENT: ssX-User-Agent: HTTP/%d.%d %d ssc

%s%d %s%sNTcs. HTTP/ ssbsdsdcHOST: QsbcCONTENT-TYPE: //QsbcDCUcQsbcDCUTNcQsbcDCUTKcQsbcDCUTcQsbcGDCUcRange: bytes=%d-%d RSCBaudiovideoimageapplicationtextoctet-stream%s/%s,%lld%lldbytes=CONTENT-RANGE: bytes %lld-%lld/%lld CONTENT-RANGE: bytes 0-%lld/%lld trailerswbrtext/xmlindex.html/index.htmlLAST-MODIFIED: RTGKDstcSXcCcRKTDstcSXcCcRNTDstcSXcCcRTDstcSXcCcIbfIbbbtext/htmlRTDSXcCcRNTGDstcSXcCc%itext%w/%wxml;/?:@&=+$,{}-_.!~*'()%2x<%s>%s TIMEOUT: Second-%dSID: redsonicRDSNXcsscsccSEQ: ssscsdccqsbbCONTENT-TYPE: text/xml CONTENT-LENGTH: %zu NT: upnp:event NTS: upnp:propchange CONTENT-TYPE: text/xml CONTENT-LENGTH: %ld NT: upnp:event NTS: upnp:propchange upnp:event%iSecond-%d%0Second-infiniteqsscUcTIMEOUT: Second-qsscssccNT: upnp:event/>CALLBACK: e:property%8.8x-%4.4x-%4.4x-%2.2x%2.2x-%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%s:%dhttp://://JanFebMarAprMayJunJulAugSepOctNovDecSunMonTueWedThuFriSatInternal Server ErrorNot ImplementedBad GatewayService UnavailableGateway TimeoutHTTP Version Not SupportedBad RequestUnauthorizedPayment RequiredForbiddenNot FoundMethod Not AllowedNot AcceptableProxy Authentication RequiredRequest TimeoutConflictGoneLength RequiredPrecondition FailedRequest Entity Too LargeRequest-URI Too LongUnsupported Media TypeRequested Range Not SatisfiableExpectation FailedMultiple ChoicesMoved PermanentlyFoundSee OtherNot ModifiedUse ProxyTemporary RedirectOKCreatedAcceptedNon-Authoratative InformationNo ContentReset ContentPartial ContentContinueSwitching Protocolsaifaiffaifcaiffaiffaiffasfx-ms-asfasxx-ms-asfaubasicavimsvideobmpbmpdcrx-directordibbmpdirx-directordxrx-directorgifgifhtahtahtmhtmlhtmlhtmljarjava-archivejfifpjpegjpejpegjpegjpegjpgjpegjsx-javascriptkarmidim3umpegurlmidmidimidimidimovquicktimemp2vx-mpeg2mp3mpegmpempegmpegmpegmpgmpegmpvmpegmpv2x-mpeg2pdfpdfpjpjpegpjpegjpegplghtmlplsscplspngpngqtquicktimeramx-pn-realaudiormimidrmmx-pn-realaudiortfrtfshtmlhtmlsmfmidisndbasicsplfuturesplashssmstreamingmediaswfx-shockwave-flashtartartclx-tcltextplaintiftifftifftifftxtplainulwbasicwavwavwaxx-ms-waxwmx-ms-wmwmax-ms-wmawmvx-ms-wmvwvxx-ms-wvxxbmx-xbitmapxmlxmlxslxmlzx-compresszipzipÐfúf gg)iDi~o…o”o¤o´oÂoÐoÙoêoûo p p!)p6p;p?pDp"Mp Vp Zp ]p`pdp#jpnpupyp„p‡p$Šp’p¤p¯p³p·p¼pÃpÌpÓpØpâpÓp (zœzØ{8|”|(s.s4s:sFs´|€>0vœÿÿÿ?v›ÿÿÿUvšÿÿÿjv™ÿÿÿ~v˜ÿÿÿ“v—ÿÿÿ¦v–ÿÿÿ²v•ÿÿÿÊv”ÿÿÿÞv“ÿÿÿñv’ÿÿÿw‘ÿÿÿwÿÿÿ1wŽÿÿÿEwÿÿÿXwŒÿÿÿnw‹ÿÿÿ|w‰ÿÿÿw8ÿÿÿ¢w7ÿÿÿ·w6ÿÿÿËw5ÿÿÿÞw4ÿÿÿñw3ÿÿÿx2ÿÿÿxÔþÿÿ)xÓþÿÿ?xÒþÿÿ[xÑþÿÿyxqüÿÿ’x þÿÿ¨xþÿÿÀx€àà@‰à‰`Š€ ‹€ ŽPÄÈL €àŒ‹€pÙ7×ÏÒ ‰Àôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô€€ €€€€€ €(€0€8€@€H€P€X€`€h€p€x€€€ˆ€€˜€ €¨€°€¸€À€È€ЀØ€à€è€ð€ø€ @HPX`hpx€ˆŒ”˜ ¤¨¬°´äìôü‚ ‚‚‚$‚,‚4‚<‚D‚L‚T‚\‚d‚l‚t‚|‚„‚Œ‚”‚œ‚¤‚¬‚´‚¼‚Ă̂Ԃ܂ä‚ô ÚN¤ ê—*¤Þâ ~ OóÔ „0õòŠ·ŒŠ ’9ßêõšU """"";Blž@ U öt Zˆ0 £~® ¿ïŠ& 7 Ò%ZXŸ B.g++  * úó ¨ üL ôVNÄS ªG± ® Ó   €A — çB ‰ ¡ €A t t © ©œJ ÖB ë+¦>5'À˜)!à&“¢ Vì5K  1:4¡'*(ã°  ³ %"   /2      Þ ¾ A! U- 5&9-. LA‡[ 9 @)QUQ@)Q’d J[ 6 \lG&7V‡[ 9 ?#CµØ4k$4 V!"(0' ^ =-(! $) ' %4 25)"&%'OB\%rñb0…P ¶¶`<UW86 8'E''*'] ¶  "\) , OƒEd’º>Çßl5   Û:UM= ;D$ A ‹¤ôg%IH2!ˆ QN± 9A, ·¢Ž/;&qœ˜ Uw? [ý.P†.?C 8+dQ  ! " = èæ ;N ¾ áBChCN  2(!­!6»`^Me'U™lmR;#e(]V(º+h^5;g‘G…¤+þ '.?%T D >-Y; 8€(¼?ò…½$Õò­HÆM%ÔY™YºÔY¡$ ™) "GÀk&­?"[O&GŠ0` Z,ö’GuQa#m¥Gk£0Å&Rj0Â1H«) £&I"6D"&\Q¿È8cå'9_²((((åKB ( ',<0˜\#  7-!¤ %@¨ ï7> $)(5LF0ÕÊ+55%53&5 >b"@P=XQ 0¼*ÊjK9ä À1U)):$•a-o9Ö¥n%(!)&P#j\‚ *%8Jx$"2‰%zD / , jÀ½×    3 0 6   ?2  ,    3 3    Z  0+ ?O$]3 01 >#?#?'e'#Z1% ! < oS#" K&R$N?6V8\UA;¥ Zˆ*7)~@K]6(@)E8W7UL*":yT2/ ëTM # PG= % AB ¹V—Ãçž,1Ì=F6 6R< , 1 lJ €] ú p  %Ž ~+© ¹2¾ 4Ï Ù4é U6ú qAB_B+ÉB;ëBV DjãNƒµP“ R‰X¬™s½ÈvÎßvß zòì|ûO„kËµÍ æ5/èIŠèU™÷gÄ~ =  o»ÔIÈ KÔQOÜ™Oê €ÿ€€%€4€E@XˆdŒp|”ˆ˜”œ¡´µƒ¾ ”Ë$”Ù(”è,”÷@”D”L”!€”/ ”=è”K•[@˜f€˜q¬˜‚´˜¸˜œÀ˜¬Ș¹̘ÆИÜؘìà˜ðÉ%Ò5.Æ)€<¿Â[êp´…Y’k ¢à±`ƒ» _Öa^ï^þý5 ýó .sEÕr\• qüi‡Ò–d ¥Á³ziÈ'jÜ€øà‰ ‘ €)t9`ŠE‹QY[ OdCXo0¨„°‘­¢‡!ºD9ËݘçxrÁj¨(3ŸIù W? hÏNy§N»Nž7G·üKǽHÙéUêOú•ÀHÁ WÀYf(ŽAÈRš_e7ätÛpŽ^Ù i]³‡ÂKrÕrgâ”`ó?g÷]d`-ŒÙ<ÕqVpi ‰{ Ž’ ‹£àŒ´€Ä@‰ÒÀÞÄòÒgíóð#‚ê/ºù>“ôP™gÃv‡Ž ê³(Ô"ÿÇü"ëD¼dW·_h(ax¢e‰ú_˜D½ª^ZÄERÜ×Yí<›û7. ”YÉ90¡ØF›`ššt·š‡)¶› —©_¸¸É–È–Õ\šë¢ýÔ¬Ʊ#©:¯MéŸ_2µqñLJ· –›²èºË—߯»ózw xÏw, w:½¿NŸÛZ-ÙcüØp*àAp‰p–åo¦Io¶†ÀsmÒ:mè¯núo‚n"›m4InGnY&ni„l{lgk›³k®Æy½‰ÏopÙLêsÝúÝMßáùå7›àCΑR‰q¼Š’”†ªh„Åv|ÚÜxða9üXy mx¬,*h>‚ÚKÒÜaçÛr6⃇’ˆ¦Ù7¼^sÊAsÕ¤vèbvóƒvÿ‰ º% ªA =%T {$h &ks NÚ~ ÀÙ” Ú¦ Î!» 7^É F[Ö ›^í ÅZú P!×Ï#!ÖË7!Y¾H!WÌ^!O¿*E)7ìLHÄLaMwlŠˆ¯[ÂüMÙ£î%<Z´E#U-OIBµZ˜mP!†"¤š¹¼FÃ×ÛiLë•L†+à*d/vBmXIj‘{Ö:C§ü<À Ú²ð£-Y,#ˆI3¸L¼eÀrý2ƒ–'“W#¨M(º.%Ñ©3èU:þg26€2Oùk„ 0“¹0§‹¿O6Õ~7ïy/C.R)6CPZdnx„—¯ÆÛðû#2K[o€“¨½ÑÚæñü +;MUelsy†ŽŸ®»ÇÝé÷ÿ  4Pm€£ÈÚü 3 F Y n „ œ ´ Ë å þ  * A X k ~  ž ¦ ® ¶ ¿ Ç Þ ò   = [ { › » Á Ê Ù ì ý   ) 3 C M U ^ e m s  ‡  — Ÿ § ³ » È Ñ Ú ã ë ó ù  €€€€€€€~€€€€€€€€€€€€€€fghijklmnopq@rstuvwxyz{|}@€‚ƒ„…†‡ˆ‰Š@‹ŒŽ‘’“”•–@—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®@¯°±²³´µ¶·¸¹º@»¼½¾¿ÀÁÂÃÄÅÆ@ÇÈÉÊËÌÍÎÏÐÑÒ@ÓÔÕÖרÙÚÛÜÝÞßàáâãä'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde '?™'LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&fghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãä_UpnpAcceptSubscription_UpnpAcceptSubscriptionExt_UpnpAddToAction_UpnpAddToActionResponse_UpnpAddToPropertySet_UpnpAddVirtualDir_UpnpCancelHttpGet_UpnpCloseHttpGet_UpnpCloseHttpPost_UpnpCreatePropertySet_UpnpDownloadUrlItem_UpnpDownloadXmlDoc_UpnpEnableWebserver_UpnpFinish_UpnpFree_UpnpGetErrorMessage_UpnpGetServerIpAddress_UpnpGetServerPort_UpnpGetServiceVarStatus_UpnpGetServiceVarStatusAsync_UpnpHttpGetProgress_UpnpInit_UpnpIsWebserverEnabled_UpnpMakeAction_UpnpMakeActionResponse_UpnpNotify_UpnpNotifyExt_UpnpOpenHttpGet_UpnpOpenHttpGetEx_UpnpOpenHttpGetProxy_UpnpOpenHttpPost_UpnpReadHttpGet_UpnpRegisterClient_UpnpRegisterRootDevice_UpnpRegisterRootDevice2_UpnpRemoveAllVirtualDirs_UpnpRemoveVirtualDir_UpnpRenewSubscription_UpnpRenewSubscriptionAsync_UpnpResolveURL_UpnpSdkClientRegistered_UpnpSdkDeviceRegistered_UpnpSdkInit_UpnpSearchAsync_UpnpSendAction_UpnpSendActionAsync_UpnpSendActionEx_UpnpSendActionExAsync_UpnpSendAdvertisement_UpnpSetContentLength_UpnpSetMaxContentLength_UpnpSetMaxSubscriptionTimeOut_UpnpSetMaxSubscriptions_UpnpSetVirtualDirCallbacks_UpnpSetWebServerRootDir_UpnpSubscribe_UpnpSubscribeAsync_UpnpThreadDistribution_UpnpUnRegisterClient_UpnpUnRegisterRootDevice_UpnpUnSubscribe_UpnpUnSubscribeAsync_UpnpWriteHttpPost_ListAddTail_ListDelNode_ListDestroy_ListFind_ListHead_ListInit_ListNext_TPAttrInit_TPAttrSetIdleTime_TPAttrSetJobsPerThread_TPAttrSetMaxJobsTotal_TPAttrSetMaxThreads_TPAttrSetMinThreads_TPJobInit_TPJobSetFreeFunction_TPJobSetPriority_ThreadPoolAdd_ThreadPoolAddPersistent_ThreadPoolInit_ThreadPoolShutdown_TimerThreadInit_TimerThreadRemove_TimerThreadSchedule_TimerThreadShutdown__DefaultRuneLocale___error___maskrune___tolower___toupper_accept$UNIX2003_asctime_atoi_bind$UNIX2003_close$UNIX2003_connect$UNIX2003_fclose_fcntl$UNIX2003_fopen_fread_free_freeifaddrs_fseeko_fwrite$UNIX2003_gethostbyname_gethostname_getifaddrs_getsockname$UNIX2003_getsockopt_gettimeofday_gmtime_inet_addr_inet_ntoa_inet_pton_ixmlCloneDOMString_ixmlDocument_createElement_ixmlDocument_createTextNode_ixmlDocument_free_ixmlDocument_getElementsByTagName_ixmlDocument_getElementsByTagNameNS_ixmlElement_free_ixmlElement_getElementsByTagName_ixmlElement_getElementsByTagNameNS_ixmlFreeDOMString_ixmlNodeList_free_ixmlNodeList_item_ixmlNodeList_length_ixmlNode_appendChild_ixmlNode_getChildNodes_ixmlNode_getFirstChild_ixmlNode_getLocalName_ixmlNode_getNamespaceURI_ixmlNode_getNextSibling_ixmlNode_getNodeName_ixmlNode_getNodeType_ixmlNode_getNodeValue_ixmlNode_setNodeValue_ixmlParseBufferEx_ixmlPrintDocument_ixmlPrintNode_listen$UNIX2003_malloc_memcmp_memcpy_memmove_memset_pthread_mutex_destroy_pthread_mutex_init_pthread_mutex_lock_pthread_mutex_unlock_pthread_rwlock_destroy$UNIX2003_pthread_rwlock_init$UNIX2003_pthread_rwlock_rdlock$UNIX2003_pthread_rwlock_unlock$UNIX2003_pthread_rwlock_wrlock$UNIX2003_rand_realloc_recv$UNIX2003_recvfrom$UNIX2003_select$UNIX2003_send$UNIX2003_sendto$UNIX2003_setsockopt_shutdown_sleep$UNIX2003_snprintf_socket_sprintf_srand_sscanf_stat_strcasecmp_strcat_strchr_strcmp_strcpy_strdup_strerror_r_strlen_strncasecmp_strncmp_strncpy_strrchr_strstr_strtol_time_uname_usleep$UNIX2003single module__mh_dylib_headerdyld_stub_binding_helper__dyld_func_lookup_NewRequestHandler_free_ssdp_event_handler_data_ssdp_event_handler_thread_send_error_response_check_soap_body_check_soap_action_header_get_device_info_dom_cmp_name_dom_find_node_dom_find_deep_node_get_node_value_soap_request_and_response_get_response_value_free_handle_request_arg_handle_request_get_port_RunMiniServer_sock_read_write_httpmsg_compare_httpheader_free_scanner_get_token_vfmatch_match_alias_release_get_file_info_GeneratePropertySet_free_notify_struct_respond_ok_genaNotifyThread_ScheduleGenaAutoRenew_gena_unsubscribe_gena_subscribe_GenaAutoRenewSubscription_addToAction_makeAction_Encode_MD5Transform_Soap_Invalid_Action_Soap_Action_Failed_Soap_Invalid_Var_end_body.6599_start_body.6598_Http_Method_Table_Http5xxStr_Http4xxStr_Http3xxStr_Http2xxStr_Http1xxStr_gMediaTypes_gEncodedMediaTypes_PADDING_gMServState_gGetCallback_gGenaCallback_gSoapCallback_gInitialized_Http1xxCodes_Http2xxCodes_Http3xxCodes_Http4xxCodes_Http5xxCodes_gMediaTypeList_gAliasDoc_gWebMutex_saved_node.3017_inited.3016_stateInited_next_save.4086_inited.4110_inited.4096_uuids_this_tick.4095_time_last.4094_st_AdvertiseAndReply_AutoAdvertise_CheckOtherHTTPHeaders_ContentTypeHeader_CreateHTTPRangeResponseHeader_CreateServicePacket_DeviceAdvertisement_DeviceReply_DeviceShutdown_ErrorMessages_ErrotEvt_FindServiceControlURLPath_FindServiceEventURLPath_FindServiceId_FreeHandle_GetCallBackFn_GetClientHandleInfo_GetClientSubActualSID_GetClientSubClientSID_GetDeviceHandleInfo_GetFirstSubscription_GetFreeHandle_GetHandleInfo_GetNextRange_GetNextSubscription_GetSubscriptionSID_GlobalClientSubscribeMutex_GlobalHndRWLock_HandleTable_Http_Header_Names_InitHandleList_LOCAL_HOST_LOCAL_PORT_MD5Final_MD5Init_MD5Update_MakeGetMessage_MakeGetMessageEx_MakePostMessage_Make_Socket_NoBlocking_PrintHandleInfo_ReadResponseLineAndHeaders_RemoveClientSubClientSID_RemoveSubscriptionSID_SearchByTarget_SendReply_ServiceAdvertisement_ServiceReply_ServiceShutdown_SetGenaCallback_SetHTTPGetCallback_SetSoapCallback_SoapGetServiceVarStatus_SoapSendAction_SoapSendActionEx_StartMiniServer_StopMiniServer_StrStr_StrTok_ToUpperCase_addServiceTable_advertiseAndReplyThread_bWebServerState_configure_urlbase_copy_URL_list_copy_client_subscription_copy_sockaddr_in_copy_subscription_error_respond_freeClientSubList_freeService_freeServiceList_freeServiceTable_freeSubscription_freeSubscriptionList_free_URL_list_free_client_subscription_free_upnp_timeout_gDocumentRootDir_gMiniServerThreadPool_gRecvThreadPool_gSendThreadPool_gSsdpReqSocket_gTimerThread_gUUIDMutex_g_maxContentLength_genaCallback_genaInitNotify_genaInitNotifyExt_genaNotify_genaNotifyAll_genaNotifyAllExt_genaRenewSubscription_genaSubscribe_genaUnSubscribe_genaUnregisterClient_genaUnregisterDevice_gena_process_notification_event_gena_process_subscription_renewal_request_gena_process_subscription_request_gena_process_unsubscribe_request_getAllServiceList_getElementValue_getServiceList_getServiceTable_getSubElement_get_content_type_get_ieee_node_identifier_get_miniserver_sockets_get_random_info_get_sdk_info_get_ssdp_sockets_get_system_time_getlocalhostname_has_xml_content_type_http_CalcResponseVersion_http_CancelHttpGet_http_CloseHttpGet_http_CloseHttpPost_http_Connect_http_Download_http_FixStrUrl_http_FixUrl_http_HttpGetProgress_http_MakeMessage_http_OpenHttpGet_http_OpenHttpGetEx_http_OpenHttpGetProxy_http_OpenHttpPost_http_ReadHttpGet_http_RecvMessage_http_RecvPostMessage_http_RequestAndResponse_http_SendMessage_http_SendStatusResponse_http_WriteHttpPost_http_get_code_text_httpmsg_destroy_httpmsg_find_hdr_httpmsg_find_hdr_str_httpmsg_init_isFileInVirtualDir_is_escaped_is_mark_is_reserved_is_unreserved_linecopy_linecopylen_map_int_to_str_map_str_to_int_matchstr_membuffer_append_membuffer_append_str_membuffer_assign_membuffer_assign_str_membuffer_attach_membuffer_delete_membuffer_destroy_membuffer_detach_membuffer_init_membuffer_insert_membuffer_set_size_memptr_cmp_memptr_cmp_nocase_method_to_str_miniStopSockPort_namecopy_pVirtualDirList_parse_hostport_parse_port_parse_scheme_parse_uri_parse_uri_and_unescape_parse_uric_parser_append_parser_get_entity_read_method_parser_parse_parser_parse_entity_parser_parse_headers_parser_parse_responseline_parser_request_init_parser_response_init_printNodes_raw_find_str_raw_to_int_readFromSSDPSocket_removeServiceTable_remove_dots_remove_escaped_chars_replace_escaped_resolve_rel_url_searchExpired_send_search_result_soap_device_callback_sock_destroy_sock_init_sock_init_with_ip_sock_read_sock_write_ssdpStopPort_ssdp_handle_ctrlpt_msg_ssdp_handle_device_request_ssdp_request_type_ssdp_request_type1_str_alloc_token_cmp_token_string_casecmp_token_string_cmp_unique_service_name_uuid_compare_uuid_create_uuid_create_from_name_uuid_unpack_virtualDirCallback_web_server_callback_web_server_destroy_web_server_init_web_server_set_alias_web_server_set_root_diramule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Frameworks/libixml.2.dylib0000755000175000017500000026016411332327377027562 0ustar l3onl3onÊþº¾  „ À t þíúÎ  Ä…__TEXTpp__text__TEXTp]Ìp€__picsymbolstub1__TEXTl<`l<€ __cstring__TEXTnœbnœH__DATApp__data__DATApdp__dyld__DATAudud__la_symbol_ptr__DATAulLul__bss__DATAu¸8__LINKEDIT€ „€ „ HJ¤(@executable_path/../Frameworks/libixml.2.dylib8öÛ÷×ß?r€ã{PzX¸‘„ P((}¥Š}Žxެ•‰ø&€"H 4/usr/lib/libgcc_s.1.dylib 4o/usr/lib/libSystem.B.dylib|¦BŸ}ˆ¦|¦}€cx=ŒŒfì}‰¦| x=ŒŒaˆN€ }‹cxKÿÿÌ|¦BŸ}h¦|¦=kkf¸}i¦N€ |¦¿aÿì|#yBŸ|{x覔!ÿ A‚(£ëx;ÀH_ ||xH |]ð®|ò|Bt9"ÿÞ+‰Aè<_U):8B\| .|| ¦N€ ¸ÈÈȘ¨ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈtÈ„<ŸcÛx8„_ÄH<ŸcÛx8„_ÌHAÁH<<ŸcÛx8„_ÔKÿÿì<ŸcÛx8„_ÜKÿÿÜ<ŸcÛx8„_äKÿÿÌcÛxHAÉ;ÞžàAœþô8!`€»aÿì|¦N€ |¦¿aÿì|~xBŸ|#x覔!ÿ /žAžpÃóxH 9|{xÃóxH å||xÃóxH e+ƒ AH<_Ti:8B\| .|| ¦N€ (0Ô(D((p(È8!`£ëx„ãx€»aÿì|¦Kÿýø<Ÿ£ëx8„^H@¥„ãx£ëxH@™<Ÿ£ëx8„^œHH<Ÿ£ëx8„^ H@ydÛx£ëxH@m<Ÿ£ëx8„^¤H@]£ëx„ãxKÿý•<Ÿ£ëx8„^¨8!`€»aÿì|¦H@0ÃóxH ¡HPdÛx£ëxH@<Ÿ£ëx8„^¬H@ £ëx„ãxKÿýA<Ÿ£ëx8„^°H?í€(/€Až<Ÿ£ëx8„^¤H?уÞ(Kÿþˆ<Ÿ£ëx8„^´H?¹£ëxdÛxH?­€,/€Až <Ÿ£ëx8„^¤H?‘€~,¤ëxKÿþ%ÃóxH õ/ƒAž H ¹/ƒ@ž<Ÿ£ëx8„^¸H<Ÿ£ëx8„^¼H?IÃóxH ¹¤ëxKÿýÙ<Ÿ£ëx8„^ÀH?)dÛx£ëxH?ÃóxH é/ƒAž H Q/ƒ@ž<Ÿ£ëx8„^¼H<Ÿ£ëx8„^¸H>áÃóxH ­|~xKÿý8!`€»aÿì|¦N€ |¦¿aÿì|~yBŸ|#x覔!ÿ A‚|/„AžtH‘|{xÃóxH=||xÃóxH½+ƒ AP8@|`4|@0p˜@‚p@‚dp@‚$H(8!`Ãóx¤ëx€»aÿì|¦KÿüÈdÛx£ëxH><Ÿ£ëx8„\H> £ëx„ãxKÿûE<Ÿ£ëx8„\HÀ<Ÿ£ëx8„\ H=á£ëxdÛxH=Õ€,/€Až <Ÿ£ëx8„[üH=¹€~,¤ëxKÿüMÃóxH/ƒAž$Há/ƒ@ž?Ÿ£ëx8œ\H=H<Ÿ£ëx?Ÿ8„\H=iÃóxHÙ¤ëxKÿûù<Ÿ£ëx8„\H=IdÛx£ëxH==£ëx8œ\8!`€»aÿì|¦H= 8!`€»aÿì|¦N€ |¦¿aÿì|~yBŸ|#x覔!ÿ A‚\/„AžTHá|{xÃóxH||xÃóxH +ƒ A08@|`4|@0p˜@‚p@‚dp@‚$H8!`Ãóx¤ëx€»aÿì|¦KÿûdÛx£ëxH €0“Ý/‰0@ž8`“¾ H8€I(H |Ix€B(/‚@žÿô8`‘=$“©(H8`iH8`8!P€»¡ÿô|¦N€ |¦¿ÿð|~y|#x|¼+x”!ÿ°A‚ø/„Ažð€+€A,+€@œä/€Až(£ëxÄóxKÿ÷M/ƒ@¾ÀD*|#x;€bÖÿÿ:à;`ÿ€>?:`:@Ð@@œ°/Až´“<```ˆ]|Ft/†&Až¸/†@P8ÿ÷+€@0/† Až(8ÿà+€×ß@=&ÿÿ8 +€ý@ ‰°@A’á<|^t/žA½ŒH@£ëx8’Aÿ>ß>¿>Ÿƒƒƒ¸4¬£ëxH2]¤ëx|exƒãxH2m/ƒ@ž8~;@Kÿ÷½H˜ƒ·4˜ƒž£ëxH2%¤ëx|exƒãxH25/ƒAžxƒ¶4¨ƒž£ëxH1ý¤ëx|exƒãxH2 /ƒAžPƒµ4¤ƒž£ëxH1Õ¤ëx|exƒãxH1å/ƒAž;`;@H$€”4 8~;@Kÿö|{xH ;` ;@ƒ¹4œH ;œ“žƒžˆ|t/„Až£ëxH1/ƒ@žÿØ/š@ž /›Ažþè8!pcÛx€ºÿÐ|¦N€ |¦¿¡ÿô|}x8c”!ÿ Hñ€]ˆ/€Ažh£ëxKÿþe/ƒ@žX€}ˆ|t/€"AžÔ/€'AžÌ/€<@ž<8c88Kÿñ/ƒ/@ž€};ÀH¨8€KÿüÉ/ƒAž;ÀH´/€=Až„/€/@ž ˆ;À/€>@žp;À}Hd/€>AžX88Kÿð8€Kÿüu/ƒAžÿ°ƒÁ8H €8Þ€}88|~Kÿðm8€KÿüE/ƒ@žÿÜ€}H €};À|dxÅóx£ëxKÿöñ/ƒ@žÿX€|8!`Ãóx€»¡ÿô|¦N€ |¦¾áÿÜ9 hBŸ|{x|š#xè¦|¼+x”!ÿ€``ƒÃˆ/€AžÌ€8/€Až?ƒ¸1ÐH“Ã<_ƒ¢1ÐH ;Þ“Ûˆ|t/„Až Ø£ëxH.í||y@‚ÿÜ“Á8```ˆ/€<@¾T?¿ƒ½1ð£ëxH/¤ëx|yxÃóx%ËxH/E/ƒ@ž>ÿ9ò?Àƒ1ô<ËxcÞÿÿH(ÃxH.ÙÃx|exƒãxH/ /ƒAžP;œˆ|t8]ÿ÷+‚@0/ Až(8ÿà+€×ß@<]ÿÿ8 +€ý@ ‚ð@A /@žÿ˜ÙàQ@è/Ažà8~H-]/ƒzAžÌ$ËxÅóxH.¥€Z8<8c1L|ñ®Kÿî)/ƒzAžœ8€w1ôH.9 ||{a8H”?¿ƒ½1à£ëxH-í¤ëx|exÃóxH./ƒ@ž8a8KÿóQ/ƒAžØHAž<Ÿ£ëx€„1ìH+5|yy@‚°cÛxKÿú5/ƒAžè€{/ƒAžÜKÿëI/ƒzAžÔ8“:ƒ¸1ÐH ;Þ“ÛƒÛˆ|t/„Až£ëxH*©/ƒ@žÿØcÛxKÿùÉ/ƒAž|€{/ƒAžp<Ÿ8„0´H*™/ƒ@ž\9 8HX/ž<@žÌcÛxKÿù/ƒAž4€{/ƒAž(Kÿê•/ƒzAž |dx8{ H/ƒ@žôCÓxKÿð,@‚ä; zcÛx“º€Kÿù/ƒAžЃÛ<Ÿ8„1ÃóxH)ñ,@‚ƒÛ9 {8Kÿþ<ŸÃóx8„0´H)É/ƒAžlƒÛ9 “»8Kÿýô<Ÿ£ëx€„1èH)¡/ƒ@ž0€{ /ƒAžXKÿéÅ/ƒzAžP89 Kÿþè€8/€@ž,€0/€Až /88Až88£ëxKÿéµ8€Kÿõ/ƒAžô£ëxKÿé]/ƒzAžàcÛxKÿø/ƒAžЀ[ˆ/€=@žÀcÛxKÿ÷ý/ƒAž°€›ˆ|t/€"Až /€'@ž”ƒÛÃóxH)}||y@‚(H|ˆ|t/€@ž ;ÞÿÿH /€"@ž8c8€"H"Y,A‚h4cA‚ /žAž ˆ|t/€@žÿ¨HD/ž@ž<}ƒãxKÿïÝ|{y@‚,€Kx/ž@ž$HD€B/‚@žÿЀ8/€@žH € /€@žKÿàÍ~ ƒÁHH ƒÁH“Ü,€|4ÄóxKÿÖu|{y@‚Tƒ¡H/“¼4Ažœ8`H‘|~yA‚4“~“~“~“~“~ €}Kÿài/ƒ~@žÃóxHù;`fH €}/ƒAžKÿà=/ƒ~Až €} /ƒAž Kÿà!/ƒ~@žÃóxKÿâÙKÿÿ°€0“Ü0;`H`€a@€P8¡8H™|{y@‚œ€|4€8H$€a@€P8¡DH)|{y@‚x€|4€DKÿÕuHxHƒa@ƒ¡L€\4ƒÂ,H€~¤ëxHI/ƒAž8ƒÞ(/ž@žÿäcÛx¤ëx8¡HH|{y@‚€aH$ËxKÿÓ½|{y@‚€|4€H8 Hµ|{yA¢˜Hè€T/€@ž\ƒ|0€L€{HÑ/ƒ@žÀ€cÛx0KÿáÁƒÛ HÃóxƒ¾Kÿâ%Ãóx¾ëxHy/ž@žÿäcÛxHiƒÜ4€aL€žHy/ƒ@žh€^8;`8\48#Ëx(/‚Až“¢(/‰Až“©$žØ@ž“¼,/šAžd8`“ÚH\€[(iÛxH |Ix€B(/‚@žÿô‘=$“©(H“}(“¼,“}$/šAž88`H8`iH8`8!`€»Aÿè|¦N€ |¦¿Aÿè|{y|ž#x|º+x”!ÿA‚è/„Ažà/…AžØ|ƒ#x;€Kÿä/ƒAžÈƒ»,H€}ÄóxH½/ƒAžxƒ½(/@žÿä€{0Äóx8¡8H u||4/œ@ž„CÓxƒ¡8H¡/ƒ}@ž€a8;€fH$€8cÛx8 Kÿþ||4/œAžD€a8H AH8€}/ƒAžHCÓx;€fHE/ƒ}Až;€H;€i8!pƒãx€»Aÿè|¦N€ |¦,¿ÿð|œ#x”!ÿ°A‚X/„AžPƒÃ,H€~„ãxH½|}yA‚ƒÞ(/ž@žÿä8`H$€~/ƒAžÿðHq8`“¾H8`i8!P€»ÿð|¦N€ |¦,¿¡ÿô|#x”!ÿ°A‚(/‚Až“¢(/‰Až“©$žØ@ž“¼,8`“ÚHP€[(iÛxH |Ix€B(/‚@žÿô“©(H“}(“¼,“}$/š8`Až8H8`i8!`€»Aÿè|¦N€ |¦¾áÿÜ|yyBŸ|›#x|¼+xè¦|×3x”!ÿPA‚/„Ažø/…Ažð/†Ažè|£+x;ÀKÿßy/ƒAžØ;A<;ÀfCÓxKÿ¼ÙƒãxHM/ƒa(/‚Až‘"(/‰AžI$€,ž@ž‘<,88`($“ÛH8`i8!`€»aÿì|¦N€ /ƒMž 8€8  =""<> > #document*/>01234567890123456789ABCDEFabcdef&#x&##cdata-section#textxmlnsxmlns:rbxmlhttp://www.w3.org/XML/1998/namespacehttp://www.w3.org/2000/xmlns/o o,o4o<nÔo@oHoPoTnônÄnÐoXod--..09··ÐÐÑÑE`a‡‡ƒ†‘¡£¹»½¿¿ÁÂÄÄ@@KR`ippÖÜÝßàäçèêíðù   < < > L M M Q T b c f o ƒ ¼ ¼ ¾ ¾ ¿ ¿ À Ä Ç È Ë Í × × â ã æ ï   < < > > ? ? @ B G H K M f o p q ƒ ¼ ¼ ¾ Å Ç É Ë Í æ ï   < < > C G H K M V W f o ‚ ƒ ¾ Â Æ È Ê Í × × ç ï   > D F H J M U V f o ‚ ƒ ¾ Ä Æ È Ê Í Õ Ö æ ï   > C F H J M W W f o114:FFGNPY±±´¹»¼ÆÆÈÍÐÙ )557799>>??q„†‹•——™­±·¹¹ Ð Ü á á000*0/01050™0™0š0š00ž0ü0þ::AZ__azÀÖØöøÿ14>AHJ~€ÃÍðôõúP¨»Á††ˆŠŒŒŽ¡£ÎÐÖÚÚÜÜÞÞààâó OQ\^ÄÇÈËÌÐëîõøù1VYYa†Ðêðò!:AJq·º¾ÀÎÐÓÕÕåæ  9 = = X a … Œ “ ¨ ª ° ² ² ¶ ¹ Ü Ý ß á ð ñ     ( * 0 2 3 5 6 8 9 Y \ ^ ^ r t … ‹ ‘ “ ¨ ª ° ² ³ µ ¹ ½ ½ à à     ( * 0 2 3 6 9 = = \ ] _ a … Š Ž ’ • ™ š œ œ ž Ÿ £ ¤ ¨ ª ® µ · ¹     ( * 3 5 9 ` a … Œ Ž ’ ¨ ª ³ µ ¹ Þ Þ à á     ( * 9 ` a.0023@E‚„„‡ˆŠŠ”—™Ÿ¡£¥¥§§ª«­®°°²³½½ÀÄ@GIi ÅÐö    <<>>@@LLNNPPTUYY_acceeggiimnrsuužž¨¨««®¯·¸ºº¼Âëëððùù› ù EHMPWYY[[]]_}€´¶¼¾¾ÂÄÆÌÐÓÖÛàìòôöü!&!&!*!+!.!.!€!‚000!0)0A0”0¡0ú11,NŸ¥¬×£ààpppppppppppppppppppp@p@p@p @p@p@p@p@p @p$@p(@p,@p0@p4@p8@ul@up@ut@ux@u|@u€@u„@uˆ@uŒ@u@u”@u˜@uœ@u @u¤@u¨@u¬@u°@u´@„$ô>윀ܰœèP,€<((Pœ”ð D(`üB ì þp   /¨ BÈ T-ø a.8 s0Ä 1< ¢2( ¯2Ü Â3€ Ö4ì è: û;` <Ì!>,5OèKpZpcp opwpp‹pšp §p$´p(¼p,Åp0Ìp4Ùp8æp<ðr(øu¸H¬1œ3:èJ._4`¸`¤"|9lP¼dd<‚c˜¢e0Âdläfe`(iEhŒdb|€aÌžg¼fLÜchùb¬`Ð+gØHg@kgˆa8©`ļ`ÜÛÜñ|XÀ%_Ü7U QY\mXT‹^«YÍ^œñT„ ^ä#_P?TpQWÌn]h_è®V¬È[$äUxYè"Tœ:ÈMÔ_ sj —iø®iLÎiÌêkd i¼ j47S¬SSfRÐyS<ŒRࡹ#ÀÏ 8ã ôý*ä!$)!˜@-”T,Èl+L*|¥x· ÆxßÌ÷L'Ü.)|O(œy'@¡ü¹Ð ç X ˆ 0Ì F@ ]p xä ( ¤@ Á„ Ù` ñ` $ð ˆ , ?#4 U&$ l  ƒ¸ ° ³"h ÏX æ, ú, < , =ˆ P4 cÌ u$ ” Ÿ„ °QÈ ÄQ„ ÜR ðR QÔ P¬ /PÈ C K R Y _ f m u } † Ž — Ÿ § ¯ · Ä Í Ö¥¦§¨©ª«¬­®¯°±²³´µ¶·¬­¯§¥ª©¦´¶°·µ«±®¨²³()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤ Þ(}•(#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·_ixmlAttr_free_ixmlAttr_init_ixmlCDATASection_free_ixmlCDATASection_init_ixmlCloneDOMString_ixmlDocument_createAttribute_ixmlDocument_createAttributeEx_ixmlDocument_createAttributeNS_ixmlDocument_createAttributeNSEx_ixmlDocument_createCDATASection_ixmlDocument_createCDATASectionEx_ixmlDocument_createDocument_ixmlDocument_createDocumentEx_ixmlDocument_createElement_ixmlDocument_createElementEx_ixmlDocument_createElementNS_ixmlDocument_createElementNSEx_ixmlDocument_createTextNode_ixmlDocument_createTextNodeEx_ixmlDocument_free_ixmlDocument_getElementById_ixmlDocument_getElementsByTagName_ixmlDocument_getElementsByTagNameNS_ixmlDocument_importNode_ixmlDocument_init_ixmlDocument_setOwnerDocument_ixmlDocumenttoString_ixmlDomTreetoString_ixmlElement_findAttributeNode_ixmlElement_free_ixmlElement_getAttribute_ixmlElement_getAttributeNS_ixmlElement_getAttributeNode_ixmlElement_getAttributeNodeNS_ixmlElement_getElementsByTagName_ixmlElement_getElementsByTagNameNS_ixmlElement_getTagName_ixmlElement_hasAttribute_ixmlElement_hasAttributeNS_ixmlElement_init_ixmlElement_removeAttribute_ixmlElement_removeAttributeNS_ixmlElement_removeAttributeNode_ixmlElement_setAttribute_ixmlElement_setAttributeNS_ixmlElement_setAttributeNode_ixmlElement_setAttributeNodeNS_ixmlElement_setTagName_ixmlFreeDOMString_ixmlLoadDocument_ixmlLoadDocumentEx_ixmlNamedNodeMap_addToNamedNodeMap_ixmlNamedNodeMap_free_ixmlNamedNodeMap_getItemNumber_ixmlNamedNodeMap_getLength_ixmlNamedNodeMap_getNamedItem_ixmlNamedNodeMap_init_ixmlNamedNodeMap_item_ixmlNodeList_addToNodeList_ixmlNodeList_free_ixmlNodeList_init_ixmlNodeList_item_ixmlNodeList_length_ixmlNode_allowChildren_ixmlNode_appendChild_ixmlNode_cloneAttr_ixmlNode_cloneAttrDirect_ixmlNode_cloneCDATASect_ixmlNode_cloneDoc_ixmlNode_cloneElement_ixmlNode_cloneNode_ixmlNode_cloneNodeTree_ixmlNode_cloneNodeTreeRecursive_ixmlNode_cloneTextNode_ixmlNode_compare_ixmlNode_free_ixmlNode_freeSingleNode_ixmlNode_getAttributes_ixmlNode_getChildNodes_ixmlNode_getElementsByTagName_ixmlNode_getElementsByTagNameNS_ixmlNode_getElementsByTagNameNSRecursive_ixmlNode_getElementsByTagNameRecursive_ixmlNode_getFirstChild_ixmlNode_getLastChild_ixmlNode_getLocalName_ixmlNode_getNamespaceURI_ixmlNode_getNextSibling_ixmlNode_getNodeName_ixmlNode_getNodeType_ixmlNode_getNodeValue_ixmlNode_getOwnerDocument_ixmlNode_getParentNode_ixmlNode_getPrefix_ixmlNode_getPreviousSibling_ixmlNode_hasAttributes_ixmlNode_hasChildNodes_ixmlNode_init_ixmlNode_insertBefore_ixmlNode_isAncestor_ixmlNode_isParent_ixmlNode_removeChild_ixmlNode_replaceChild_ixmlNode_setLocalName_ixmlNode_setNamespaceURI_ixmlNode_setNodeName_ixmlNode_setNodeProperties_ixmlNode_setNodeValue_ixmlNode_setPrefix_ixmlNode_setSiblingNodesParent_ixmlNodetoString_ixmlParseBuffer_ixmlParseBufferEx_ixmlPrintDocument_ixmlPrintDomTree_ixmlPrintDomTreeRecursive_ixmlPrintNode_ixmlRelaxParser_ixml_membuf_append_ixml_membuf_append_str_ixml_membuf_assign_ixml_membuf_assign_str_ixml_membuf_destroy_ixml_membuf_init_ixml_membuf_insert_fclose_fopen_fread_free_fseek_ftell_malloc_memcpy_memmove_memset_realloc_strchr_strcmp_strdup_strlen_strncasecmp_strncmp_strncpy_strstrsingle module__mh_dylib_headerdyld_stub_binding_helpercfm_stub_binding_helper__dyld_func_lookup_copy_with_escape_safe_strdup_Parser_UTF8ToInt_Parser_freeElementStackItem_Parser_freeNsURI_Parser_free_Parser_skipString_Parser_skipComment_Parser_copyToken_Parser_isNameChar_Parser_skipMisc_Parser_getNextToken_Parser_getNextNode_ixml_membuf_set_size_BEGIN_DOCTYPE_XMLDECL_WHITESPACE_END_PI_BEGIN_PI_XMLDECL2_BEGIN_COMMENT_END_COMMENT_COMPLETETAG_ENDTAG_CDSTART_CDEND_DEC_NUMBERS_HEX_NUMBERS_NameChar_Letter_g_error_char_Parser_LoadDocument_Parser_freeNodeContent_Parser_isValidXmlName_Parser_setErrorChar_Parser_setNodePrefixAndLocalNameÎúíþ ¸…À__TEXT``__text__TEXT¸ S¸ €__cstring__TEXTÐ^-Ð^__DATA``__data__DATA`œ`__dyld__DATAœeœe__bss__DATA¤e|__IMPORTpp__jump_table__IMPORTpdp8__LINKEDIT€t €t  H(¤J@executable_path/../Frameworks/libixml.2.dylibËpØ;÷vñî)¶#ß~Ÿ|k´·‘l P''}¤˜Š}€Ž´Ž•HŠ€x€< 4/usr/lib/libgcc_s.1.dylib 4o/usr/lib/libSystem.B.dylibèXÿ°CT‹€ßYÿàèX‹€ÏYÿàU‰åWV‰ÖSƒì,è[…Ò‰Eà„ñ‰$1ÿèId‰EäéÖ¾ƒè"ƒø‡¶‹„ƒ8ØÿàÛãããËÓãããããããããããããããããããã¬ã´ƒäRëƒéR‰D$‹Eà‰$èó;ë'ƒîRëçƒôRë߃ûRë׋Eà‰t$‰$è<GF;}äŒ!ÿÿÿƒÄ,[^_ÉÃU‰åƒì8‰]ô‹E è[‰uø‹u‰}ü‰Eà…ö„§‰4$è ‰Eä‰4$è; ‰4$‰Çè— ·Àƒø ‡~‹„ƒJØÿ༚,r†¼¼»¼‰ú‹Eà‹]ô‹uø‹}üÉéTþÿÿƒìQ‰D$‹Uà‰$è ;‰|$‹Eà‰$èü:‹UàƒöQ‰E ‰UëUƒúQ‰D$‹Eà‰$èÖ:‹Uä‰T$‹Eà‰$èÄ:ƒýQ‰D$‹Uà‰$è¯:‹Eà‰úèÙýÿÿƒÿQ‰E ‹Eà‰E‹]ô‹uø‹}üÉé‡:‰4$èŠ鉋Uä‰T$‹Eà‰$èh:ƒR‰D$‹Uà‰$èS:‹Eà‰úè}ýÿÿƒR‰D$‹Eà‰$è4:‹V(…Ò„?ƒýQ‰D$‹Uà‰$è:‹v(ésþÿÿƒR‰D$‹Eà‰$è÷9‹Uä‰T$‹Eà‰$èå9‹F,…Àt'ƒýQ‰D$‹Uà‰$èÉ9‹Eà‰D$‹F,‰$èþÿÿ‰4$èõ…Àt‰$èÆfHuƒ R‰D$‹Uà‰$ëƒR‰D$‹Eà‰$èx9‰4$è¶‹Uà‰T$‰$èªýÿÿƒR‰D$‹Eà‰$èL9‹Uä‰T$‹Eà‰$è:9‰4$躅Àt ‰$èIfƒøuƒR‰D$‹Uà‰$ëƒ R‰D$‹Eà‰$èù8‰4$èy‰ÆéQýÿÿ‹]ô‹uø‹}üÉÃU‰åƒì8‰uø‹u‰}ü‹} ‰]ôè[…ö”Â…ÿ”ÀÂ…q‰4$è.‰Eà‰4$è\‰Eä‰4$è·fƒø ‡I¿È¸Ó੘u ¨uT¨ué+‰} ‹]ô‰u‹}ü‹uøÉé üÿÿ‹Eà‰<$‰D$èH8ƒ"O‰D$‰<$è68‹U䉸è`ûÿÿƒ%Oé˃'O‰D$‰<$è8‹Eà‰<$‰D$è8‹N,…Ét!ƒO‰D$‰<$èç7‰|$‹F,‰$è!üÿÿ‰4$è…Àt#‰$èçfHuƒ)O‰E܉D$‰<$è«7ëƒ-O‰D$‰<$è—7ƒ)O‰E܉4$è̉|$‰$èÃûÿÿƒ/O‰D$‰<$èh7‹Eà‰<$‰D$èY7‹E܉}‹]ô‰E ‹uø‹}üÉéA7‹]ô‹uø‹}üÉÃU‰åƒì8‰uø‹u‰}ü‹} ‰]ôè[…ö”Â…ÿ”ÀÂ…P‰4$è…‰Eà‰4$賉Eä‰4$èfƒø ‡(¿È¸Ó੘u ¨uT¨ué ‰} ‹]ô‰u‹}ü‹uøÉé÷úÿÿ‹Eà‰<$‰D$èŸ6ƒyM‰D$‰<$è6‹U䉸è·ùÿÿƒ|M骃~M‰D$‰<$èf6‹Eà‰<$‰D$èW6‹F,…Àt!ƒsM‰D$‰<$è>6‰|$‹F,‰$èxúÿÿ‰4$èm…Àt‰$è>ƒ„M‰E܉D$‰<$è6‰4$èD‰|$‰$è;úÿÿƒ†M‰D$‰<$èà5‹Eà‰<$‰D$èÑ5‹E܉}‹]ô‰E ‹uø‹}üÉé¹5‹]ô‹uø‹}üÉÃU¹i‰åƒì‰uø‹u‰}ü‹} …ö”Â…ÿ”ÀÂuÇD$‰t$‰<$è©,‰Á‹uø‰È‹}üÉÃU1À‰åƒì8‰}ü‹}‰]ôè[‰uø…ÿt,u؉4$èz4ƒÀK‰D$‰4$è.5‰t$‰<$èCüÿÿ‹EØ‹]ô‹uø‹}üÉÃU1À‰åƒì(‰}ü‹}‰uø…ÿtuè‰4$è.4‰t$‰<$è üÿÿ‹Eè‹uø‹}üÉÃU1À‰åƒì8‰}ü‹}‰]ôè[‰uø…ÿt,u؉4$èî3ƒ4K‰D$‰4$è¢4‰t$‰<$è`ýÿÿ‹EØ‹]ô‹uø‹}üÉÃU1À‰åƒì(‰}ü‹}‰uø…ÿtuè‰4$è¢3‰t$‰<$è&ýÿÿ‹Eè‹uø‹}üÉÃU‰å¾E‰EÉé‚U‰åVƒì‹M‹u …ɔ…ö”ÀÂu€9tÇD$‰L$‰4$èA+ë¸iƒÄ^ÉÃU‰å‹E…ÀtÉéŽ[É1ÀÃU‰å‹E…ÀtÉéC[ÉÃU‰åƒì(‹EÇEô…Àt‰D$EôÇD$‰$èã*‹EôÉÃU‰åƒì(‹EÇEô…Àt€8t‰D$EôÇD$‰$è®*‹EôÉÃU¹ ‰å1ÀW‹}üó«_ÉÃU¹ ‰å1ÀW‹}üó«_ÉÃU‰åVƒì‹u…öth‹…Àt‰$è—Z‹F…Àt‰$èˆZ‹F …Àt‰$èyZ‹F…Àt‰$èjZ‹F…Àt‰$è[Zƒ~u ‹F4‰$èJZ‰uƒÄ^Éé=ZƒÄ^ÉÃU‰åVƒì‹u…öt.‹F ‰$èçÿÿÿ‹F(‰$èÜÿÿÿ‹F,‰$èÑÿÿÿ‰uƒÄ^ÉéHÿÿÿƒÄ^ÉÃU‰å‹E…ÀtÉé®ÿÿÿÉÃU1À‰å‹U…Òt‹ÉÃU1À‰å‹U…Òt‹BÉÃUºi‰åƒì‰uø‹u‰}ü‹} …öt0‹F …Àt‰$è˜YÇF …ÿt‰<$è¼Yºf…À‰F t1Ò‹uø‰Ð‹}üÉÃUºi‰åƒì‰uø‹u‰}ü‹} …öt0‹F…Àt‰$èCYÇF…ÿt‰<$ègYºf…À‰Ft1Ò‹uø‰Ð‹}üÉÃU‰åƒì‰uø‹u‰}ü‹} ‹F…Àt‰$è÷XÇF…ÿt‰<$èYºf…À‰Ft1Ò‹uø‰Ð‹}üÉÃU1À‰å‹U…Òt‹B ÉÃU1À‰å‹U…Òt‹BÉÃU1À‰å‹U…Òt‹BÉÃUºi‰åƒì‰uø‹u‰}ü‹} …öt0‹F…Àt‰$èoXÇF…ÿt‰<$è“Xºf…À‰Ft1Ò‹uø‰Ð‹}üÉÃU1À‰å‹U…Òt·BÉÃU1À‰å‹U…Òt‹BÉÃU1À‰å‹U…Òt‹B ÉÃU1ɉå‹E…Àt‹P ‰Áë‰Ñ‹R(…Òu÷ɉÈÃU1À‰å‹U…Òt‹B$ÉÃU1À‰å‹U…Òt‹B(ÉÃU1À‰å‹U…Òt‹B0ÉÃU‰åWVƒì‹u‹} …ö•Â…ÿ•À„Ðu1Àë";wt‰|$‹F ‰$èÌÿÿÿ…Àu ‹v(ëѸƒÄ^_ÉÃU‰å‹U ‹E9BÉ”À¶ÀÃU‰å‹E‹@ƒøwƒøs0Ht¸ë(ƒø uôë‹U ‹Bƒø”ƒø ”ÀÂë‹E ƒxtÓ1ÀÉÃU‰åƒì‰uø‹u ‰}ü‹}9÷tt‹‰D$‹‰$è%W…Àug‹F‰D$‹G‰$èW…ÀuQ‹G;FuI‹F ‰D$‹G ‰$èñV…Àu3‹F‰D$‹G‰$èÛV…Àu‹F‰D$‹G‰$èÅV…Àu¸ë1À‹uø‹}üÉÃU‰å‹E‹Pë‰P‹@(…ÀuöÉÃU‰åƒì(‰uø‹u‰}ü…ötJÇ$èWV…À‰Eôt7‰$}ôèø/‹v ë‰t$‰<$èt0…Àu ‹v(…öué‹Eôë ‹Eô‰$èõ/1À‹uø‹}üÉÃU‰åƒì(‰uø‹u‰}üÇEô…ötPƒ~uJÇ$èãU…À‰Eôt7‰$}ôèáB‹v,ë‰t$‰<$èfC…Àu ‹v(…öué‹Eôë ‹Eô‰$èäB1À‹uø‹}üÉÃU1À‰å‹U…Òt 1Àƒz •ÀÉÃU‰å‹U…Òtƒzu ‹R,¸…Òu1ÀÉÃU‰åWVƒì‹}‹…Àt‰$è‰Eä‹E…Àt}‹UfƒzuI‹‹} ‰D$‰<$èO…Àt"‰þ‹}ä¹üó¦¸t ¶Fÿ¶Oÿ)È…Àu‹E‹U‰D$‰$èd)‹}‹E ‹U‰|$‰D$‹B ‰$èrÿÿÿ‹}‹(‰}é|ÿÿÿƒÄ,[^_ÉÃU‰åƒìh‹E‰uø‹U ‹u‰]ôè[…À‰}ü‰EÔ‰Uä‰uàtZfƒxuL‹‰$‰D$èÕN…Àt(‹uäƒñ=¹ü‰Çó¦¸t ¶Fÿ¶Oÿ)È…Àu‹uÔ‰t$‹}à‰<$è´(‹EÔ…Àu1Àë‹UÔ‹B ‹uà‹}ä‰E‹]ô‰u‹uø‰} ‹}üÉé¯þÿÿU‰åWVSè[ƒì,ƒS=‰Eà‹E…À„Ø‹Ufƒz…œ‹z‰}ä‹J …ÿ•Â…É•À„Є‹E ‰L$‰$è N…Àt#‹u ¹‹}àüó¦¸t ¶Fÿ¶Oÿ)È…ÀuK‹E‹Uä‰D$‰$èÔM…Àt#‹u¹‹}àüó¦¸t ¶Fÿ¶Oÿ)È…Àu‹E‹U‰D$‰$è¸'‹}‹E‹U ‰|$ ‹}‰D$‰T$‹G ‰$èÿÿÿ‹G(‰EéÿÿÿƒÄ,[^_ÉÃU‰åƒìx‹E‰uø‹U ‰}ü‹u‹}‰]ôè[…À‰EĉUà‰u܉}Ø„¶fƒx…¤‹@‹UĉEä…À‹J •Â…É•À„Є†‰L$‹uà‰4$èøL…Àt&»;<¹ü‰}Àó¦¸t ¶Fÿ¶Oÿ)È…ÀuM‹u܉t$‹}ä‰<$è¼L…Àt%ƒ;<¹ü‰Çó¦¸t ¶Fÿ¶Oÿ)È…Àu‹uĉt$‹}؉<$èž&‹EÄ…Àu1Àë‹UÄ‹B ‹uØ‹}Ü‹Uà‰E‹]ô‰u‹uø‰}‹}ü‰U ÉéäýÿÿU‰åƒìÇ$4‰uø‰}üèL…À‰Æt6ü1À¹ ‰÷ó«‹U‹‰4$‰D$èŠöÿÿ‹U‹B‰4$‰D$è4óÿÿÇF‰ð‹}ü‹uøÉÃU‰åƒìÇ$4‰uø‰}üè³K…À‰Æt6ü1À¹ ‰÷ó«‹U‹‰4$‰D$è,öÿÿ‹U‹B‰4$‰D$èÖòÿÿÇF‰ð‹}ü‹uøÉÃU‰åƒì8‰}ü‹}‹E ‰]ôè[…ÿ‰uø‰Eä„ ƒ ‡ÿ‹G‹„ƒ(ØÿàPÅ×é‰<$è÷ÿÿ‰Æ‹Eä‰D$‹G,‰$è}ÿÿÿ‰F,‹Mä…É„ ‹Eä‰D$‹G ‰$è]ÿÿÿ‰F ë‰p‹@(…Àuöë ‰<$è«õÿÿ‰Æ‹Eä‰D$‹G(‰$è0ÿÿÿ…À‰F(tZ‰p$ëU‰}‹]ô‹uø‹}üÉéVþÿÿ‰}‹]ô‹uø‹}üÉé¢þÿÿ‰<$èöÿÿ‹Uä…Ò‰Æt ‹Eä‰D$‹G ‰$èÝþÿÿ…À‰F t‰pë1ö‰ð‹]ô‹uø‹}üÉÃU‰åƒì‰uø‹u‰}ü‹Fƒøw ƒøs`Huë ƒø tV1Àëa‰4$èöÿÿ‰Ç‹E ‰D$‹F,‰$è|þÿÿ‰G,‹E …Àt(‹E ‰D$‹F ‰$è`þÿÿ‰G ë‰x‹@(…ÀuöÇG(‰øë‹E ‰4$‰D$è7þÿÿÇ@‹uø‹}üÉÃU1À‰åƒì‹U‹M …Òt'ƒzu‰$èoôÿÿ…ÀtÇ@4ë ‰M ‰UÉé-ÿÿÿÉÃU‰åSƒìè[…Àuƒ·8‰$ècIƒÄ[ÉÃUèY‰å‹Eˆµ>ÉÃU‰åV‰ÆS¶è[ƒù Çé‰È%à=Àu ¶F%ÀƒÀ€uǶFƒáÁáëF‰È%ð=àuB¶F%ÀƒÀ€u4¶F%ÀƒÀ€u&ǶFƒáÁá ƒà?Áà Á¶Fƒà? Á韉È%ø=ðuT¶F%ÀƒÀ€uF¶F%ÀƒÀ€u8¶F%ÀƒÀ€u*ǶFƒáÁáƒà?Áà Á¶Fƒà?Áà Á¶F딉È%ü=øuq¶F%ÀƒÀ€uc¶F%ÀƒÀ€uU¶F%ÀƒÀ€uG¶F%ÀƒÀ€u9ǶFƒáÁáƒà?Áà Á¶Fƒà?Áà Á¶Fƒà?Áà Á¶Féÿÿÿ‰È%þ=ü…‹¶F%ÀƒÀ€u}¶F%ÀƒÀ€uo¶F%ÀƒÀ€ua¶F%ÀƒÀ€uS¶F%ÀƒÀ€uEǶFƒáÁáƒà?Áà Á¶Fƒà?Áà Á¶Fƒà?Áà Á¶Fƒà?Áà Á¶Féxþÿÿ¶ƒ˜>„Àt ¾ÈÇë ǹÿÿÿÿ[‰È^ÉÃU‰åV‰Æƒì‹…Àt‰$è¸FÇ‹F…Àt‰$è£FÇF‹F…Àt‰$èFÇFƒÄ^ÉÃU‰åV‰Æƒì‹…Àt‰$èiF‹F…Àt‰$èZFƒÄ^ÉÃU‰åVƒì‹u…ötO‹…Àt‰$è8F‹F…Àt‰$è)F‹F …Àt‰$èF‹F…Àt‰$è F‹F…Àt ‰EƒÄ^Éé÷EƒÄ^ÉÃU‰åWVƒì …À‰Eð„€‹…Àt‰$èÐE‹EðƒÀ‰$轋EðƒÀ ‰$诋Eð‹@0‰Eôë9‹EôèÒþÿÿ‹Uô‹z ë‰ø‹wèÿÿÿ‰<$è‡E‰÷…ÿuè‹Eô‹p‰$èsE‰uô‹Eô…ÀuÀ‹Uð‰$è^EƒÄ ^_ÉÃU¹j‰åW‰×Vƒì ‰Eô‹…Ҕ…ÿ”ÀÂtëF¹ ë?‹UôF‰‹Eô‹0€>tç‰<$èNE‰|$‰4$‰D$èHE…ÀuÒ‰<$è2E‹Uô1Éð‰ƒÄ ‰È^_ÉÃU‰åƒì8‰]ô‰Eà‰uø‰}ü‹8¸jè[…ÿtA‹ƒó4‰<$‰Eä‰D$èüD…À‰Æt!9Çt€xÿ-t‹Uä‰$èÍD‹Uà‰1Àë¸ ‹]ô‹uø‹}üÉÃU¸j‰åWVƒì ‹}…ÿ„ž‹7ÇD$:‰4$èsD…ÀuÇG‰ðèîúÿÿ…À‰Gtn1ÀëoP)ð‰ÆF‰Uð‰Eô‰4$è'D…À‰GtM‰t$ÇD$‰$èD‹Eô‰D$‹‰D$‹G‰$è0D‹Eðè’úÿÿ…À‰Gu¤‹G‰$èËCÇG¸fƒÄ ^_ÉÃU‰åWV‰ÖSƒì\è[…Ò”…ɉE°žÀÂ… ‰÷‰M´;}´ƒö…ÿ„õÇEà¶<&„¬„À~Q¾ÈA÷ƒø–ƒù ”ÀÂu$Aà=ß×v ÿÿ=ýv ÿÿ=ÿÿwÇEà¾7…ö†éŽUà‰øèöùÿÿ‰Æ@÷ƒø–ƒþ ”ÀÂuÔFà=ß×vʆ ÿÿ=ýv½†ÿÿ=ÿÿv°¶ƒ=9„À„<¾ð뜃€2ÇD$‰D$‰<$èâB…ÀuÇEà¾"ƒ}à…ékƒi2ÇD$‰D$‰<$è©B…Àu¾<ÇEàëŃn2ÇD$‰D$‰<$è}B…Àu¾>ÇEà뙃y2ÇD$‰D$‰<$èQB…Àu¾'ÇEàéjÿÿÿƒs2ÇD$‰D$‰<$è"B…Àu ÇEàé°ƒ!3ÇD$‰D$‰<$èøA…À…Å‹“í3G1ö‰EȉUÀë7€}»9‹ỦðÁàtÐë €}»F‹ỦðÁàtÉë ‹ỦðÁàt©ÿEÈ‹Eȶ¾ÐˆE»‹EÀ‰ỦT$‰$èoA…Àu§9}È„€}»;…ûF÷ƒø–ƒþ ”ÀÂu(Fà=ß×v† ÿÿ=ýv†ÿÿ=ÿÿ‡À)}È‹EÈ鬃%3ÇD$‰D$‰<$èA…À…“‹ƒé3W1ö‰UЉEÄë ‹U¼¶ÿEÐtBЋEж¾ÐˆE׋EĉU¼‰T$‰$è²@…ÀuÑ9}ÐtL€}×;uFF÷ƒø–ƒþ ”ÀÂu$Fà=ß×v† ÿÿ=ýv †ÿÿ=ÿÿw)}ЋEÐ@‰Eàéýÿÿ€»=9„¤ÇEà¾&é†ýÿÿEç‰ò‰D$‹E°GˆUçƒÀ‰$èÎémüÿÿƒþ&‰ðˆEØÆEÙE؉D$‹E°ƒÀ‰$èm}àéBüÿÿþÿ‰ðÁøƒÈÀˆE؉ðƒà?ƒÈ€ˆEÙÆEÚë¿þÿÿ*‰ðÁø ƒÈàˆE؉ðÁøƒà?ƒÈ€ˆEÙ‰ðƒà?ƒÈ€ˆEÚÆEÛëþÿÿ;‰ðÁøƒÈðˆE؉ðÁø ƒà?ƒÈ€ˆEÙ‰ðÁøƒà?ƒÈ€ˆEÚ‰ðƒà?ƒÈ€ˆEÛÆEÜéJÿÿÿþÿÿÿI‰ðÁøƒÈøˆE؉ðÁøƒà?ƒÈ€ˆEÙ‰ðÁø ƒà?ƒÈ€ˆEÚ‰ðÁøƒà?ƒÈ€ˆEÛ‰ðƒà?ƒÈ€ˆEÜÆEÝéùþÿÿ‰ðÁøƒÈüˆE؉ðÁøƒà?ƒÈ€ˆEÙ‰ðÁøƒà?ƒÈ€ˆEÚ‰ðÁø ƒà?ƒÈ€ˆEÛ‰ðÁøƒà?ƒÈ€ˆE܉ðƒà?ƒÈ€ˆEÝÆEÞé¢þÿÿ1À9}´s¸jƒÄ\[^_ÉÃU‰åW¿ÏV1öSè[ƒì‰Eð‰U샶0‰Eä7‰ÂÁê‹EäÑú ·9Eð}zÿë ·A9Eð~u^f¾‰WëU<>tLEô‰Â‰Eä‹Eàèòÿÿ1Òè#ýÿÿ…Àt¾‹uôëuô‹Uä‰ðGèoòÿÿºèýÿÿ…Àuâ‹W‰Uàë ‹G‰EྋUà‰ñ‰øèœ÷ÿÿ…À…tÿÿÿwƒÄ0‰ð^_ÉÃU‰å츉]ô‰uø‰}ü‰E°‰U¬‰M¨‹xè[€?u¸hÇéÉ ‹E°ƒx8t ‹³6+雋U°‰z‹³6+ë‹M°G‰y¶„Àt¾À‰D$‰4$èð:…Àu߀?„i‰}ä€?<…V‹³V+‰4$èÝ:‰t$‰<$‰E¤‰D$èÔ:…À…ù‹³Z+}¤‰}Èë‰4$è¬:‰t$‰<$‰D$è¦:…ÀtGG¶¾ÈˆE·A÷ƒø–ƒù ”ÀÂu$Aà=ß×v ÿÿ=ýv ÿÿ=ÿÿw€}·u‰þ+uÈ…öŽ· €}·„­ F‰$è:‹U¬…À‰B„” ‹Mȉt$‰$‰L$è:‹U¬‹BÆ0ƒ*èrðÿÿ‹M¬…À‰„_ ÇA‹ƒZ+‰$è×9‹}°‰Eä‰Gë;‹³F+‰4$è»9‰t$‰<$‰D$èµ9…Àu Eäèôÿÿ…À… ‹}ä‹E°‰x1Àé ‹³>+‰4$èy9‰t$‰<$‰D$ès9…À…½‹³2+‰4$èS9‰t$‰<$‰D$èH9…À„®‹³B+‰4$è-9‰t$‰D$‹Eä‰$è9…À„…‹³>+‰4$è9‰t$‰D$‹Eä‰$èö8…Àu;‹ƒ:+‹}ä‰D$‰<$èì8…À‰Æ„A9Ç„9‹ƒ>+‰$è¸8‰Eä‹}ä‹U°‰zéÿÿÿ‹M°ÇA8éÿÿÿ‹E°“*‹x‰x‰}ä‰U”ë‹E„@‰Eä‹Mä‰M„¶<<ˆEÏt/‹}”‰Î¹üÇE ó¦¸t ¶Fÿ¶Oÿ)È…Àt€}Ïuº‹u„¹‹}”üÇEœó¦¸t ¶Fÿ¶Oÿ)È…À„}‹}°‹u„‰øƒÀ+w‰$賋W‰ø‰ñèôóÿÿ…À…S‹G…À„HèIîÿÿ‹U¬…À‰B„5ƒ¬*è0îÿÿ‹M¬…À‰„ÇAwé þÿÿ‹E°G‰x¶„Àt¾À‰D$‰4$èj7…Àuß‹E°èîúÿÿ…Àu‹U°‹B0…Àu ‹B€8„Êýÿÿ‹M°‹y …ÿ„Ä‹y¶7‰ð<>„¬ýÿÿ‹ƒR+‰<$‰D$è7…À…Ö‹E°è”úÿÿ…À„Š‹U°‹B…À„|èvíÿÿ‹M¬…À‰„qÇAÇA‹»6+‰}¸ë ‹E°~‰x‹U°‹r¶„Àt‹M¸¾À‰D$‰ $è›6…ÀuÔ‹E°èúÿÿ…À„‹}°‹…ÿ‰}„„ƒ*‰þüÇE˜‰Ç¹ó¦¸t ¶Fÿ¶Oÿ)È…À…Ò‹M¨ÇéЉð<<…‹E°è´ùÿÿ…À„ª‹U°‹B…À„œè–ìÿÿ‹M¬…À‰„‘‰D$‹E°ƒÀ ‰$èY…À…i‹}¬‰<$è:ñÿÿ…À…VÇGÇG‹U°‹B‰B‰ÐèAùÿÿ…À„7‹M°»p*ü‹I‰}€‰MЋuйó¦¸t ¶Fÿ¶Oÿ)È…Àu‹M°‹yÇA8‰yéü‹uл*¹ü‰}€ó¦¸t ¶Fÿ¶Oÿ)È…Àu‹M°ÇA8éÄ‹}°ÇG8‹E°‹xé˜ûÿÿ‹ƒN+‰<$‰D$è 5…Àu5‹U°‹B …À„èyëÿÿ‹M¬…À‰„tÇA‹}¨ÇéPûÿÿ‹E°ƒx8…K‹p0…ö„@…ÿÇEä„1U䉸è_ëÿÿ1Òèóõÿÿ…À„‰øèëÿÿ‹U¬…À‰„‹E°èþ÷ÿÿ…À„ô‹M°‹A€8=…å‰Èèà÷ÿÿ…À„Ö‹}°‹O¶<"•Â<'•À„Ð…»‹w‰L$‰4$èF4…À‰Çué¡¶<<„–<&”À¶Àt9þrå‹E°ƒÀ‰$è½ ‹E°‹P9×t‰ù)Ñè÷ïÿÿ…À…]‹U°G‹B‰z…ÀtèIêÿÿ‹M¬…À‰Aué;Ç$èˆ3‹}¬‰GÆ‹E¬»²*üÇ@‹U°‹R0‰UÄ‹‰}€‰M¼‹u¼¹ó¦¸t ¶Fÿ¶Oÿ)È…Àu!‹MÄ‹A…Àt‰$è3‹}¬‹G…ÀuvéI‹u¼»¸*¹ü‰}€ó¦¸t ¶Fÿ¶Oÿ)È…À…‹M¬‰ $èaîÿÿ…À…„‹MÄ…É„y‹}Ä‹W…Òt,‹M¬‹A‰$‰D$èÙ2…Àu‹}¬‹GèMéÿÿ‹UĉBéÀ‹MÄ‹q ‰÷ë"‹V…Òt‹}¬‹G‰$‰D$èœ2…Àt~‰÷‹v…öuÚÇ$ è`2…À‰Æ„ýÇÇ@Ç@‹U¬‹BèÝèÿÿ…À‰Ft‹M¬‹AèËèÿÿ…À‰u‰ðè‰ëÿÿ‰4$è2鲋EÄ‹P …Òu‰p ë(‰wë#‹…Àt‰$èÚ1‹U¬‹Bè„èÿÿ‰…À„{‹M°‹I,…ɉMÀ„Ø‹}°‹w0‹y…ÿuA‹‰D$‹‰$èÉ1…À…E‹F…Àtè8èÿÿ‹UÀ…À‰B „+‹M°ÇA,銋‹UÀ‰D$‹‰$è…1…Àt‹F‰<$‰D$èr1…À…î‹~‰|$‰<$è[1…Àt%‹v ë‰|$‹F‰$èC1…Àt ‹v…öuæë(‹ë‹F…Àtè©çÿÿ‹MÀ…À‰A „œ‹}°ÇG,‹U°‹B‰B‰Ðè„ôÿÿ…Àt~‹M°»*ü‹I‰}€‰MÔ‹uÔ¹ó¦¸t ¶Fÿ¶Oÿ)È…ÀtL‹uÔ»*¹‰}€ó¦¸t ¶Fÿ¶Oÿ)È…Àt‹M°‹A‰Aé÷ÿÿ‹}°ÇG8éÿöÿÿ¸jë ¸ ë¸f‹]ô‹uø‹}üÉÃU‰åWVSè[ìŒÇ$@è$0ÇEˆf…À‰E„„C‹}„1À¹üó«‹E„ƒÀ‰$軋E„ƒÀ ‰$è­‹E…À„ƒÊ‰D$‹E ‰$è°/…À‰Æ„ÇD$ÇD$‰$è/‰4$èš/…À‰Çu‰4$ès/ÇEˆ é®@‰$èz/‹U„…À‰u‰4$èK/ÇEˆfé†ÇD$ÇD$‰4$è;/‹M„‰t$ ‰|$ÇD$‹‰$è/‹M„‹Æ‰4$èù.‹U„M ‹‰B‰M€‰ $ÇEÜÇEàÇEäÇEØèûÓÿÿE܉$è…À‰Eˆt"éá‹E èlåÿÿ‹U„…À‰ÇEˆfuŸéÚ‹EÜ‹M„‰A4‹³A ëÇEˆe齋U„G‰B‹M„‹y¶„Àt¾À‰D$‰4$èˆ.…Àu׋³= ‰4$èŠ.‰t$‰<$‰D$è„.…ÀuP‹E„‹“E ƒÀèÒèÿÿ‹»A ‰Eˆë ‹U„F‰B‹M„‹q¶„Àt¾À‰D$‰<$è!.…Àu׋Eˆ…À… ‹E„èjðÿÿ…À‰Eˆ…ù‹³9 ‹E„‹x‰4$èÿ-‰t$‰<$‰D$èù-…Àum‹U„G¾‰Á‰×ƒÇ…À‰Bu5é‚<uNë!<"uAÇD$"‰$è”-…À‰Á„}A…ɕ…ö•À„Ðt¶„Àu»…ö…_‰‹E„èÂïÿÿ…À‰Eˆ…Q‹Eà…À…‹M€‰ $è>Òÿÿ‹U€Mà‹E„èËñÿÿ…À…î‹Eà…À…4‹E¨ƒø„…w H…·ëƒø„ƒø…£é%‹E„ÇEÔ‹U܃x<u ‹@0…Àu鯋M„ÇA<‹M„‹A‰AEÔ‰D$‹E ‰$‰D$èÀ…À‰Eˆ…™‹E€‰D$‹EÔ‰$è@Ùÿÿ…À‰Eˆ…h‹}°…ÿth‹U„‹R0‰UŒëT‹ë ‹MŒ‹A…Àt‰|$‰$è`,…Àu ‹UŒ‹B‹uÔëO‹MŒ‹q ë‰|$‹F‰$è:,…Àt¼‹v…öuæ‹EŒ‹@‰EŒ‹EŒ…Àu©ëG‹M„‹Q0‹MÔë‹r…öu‹B…Àt‰Î…öuë/‹R…Òuã‹E„ƒx8uë‹V …Òuèaâÿÿ‰F ‹uÔë ‹uÔ‹U„‰r,‹M„‰t$‹A4‰$èxÙÿÿ…À‰Eˆ…Œ‹}Ô‹E„…ÿ‰x4„:Ç$èp+…À‰Æt7ÇÇ@Ç@Ç@ Ç@‹èçáÿÿ…À‰u‰4$è$+ÇEˆfé:‹G…Àt èÁáÿÿ…À‰Ft‹G …Àtè®áÿÿ…À‰Fu ‰ðèäÿÿ뽋U„‹B0‰F‰r0é¥Eä‰D$‹E¤‰D$‹E܉$èµ…À‰Eˆ…Ö‹Eä‹M„‰D$‹A4ë1E؉D$‹E¤‰D$‹E܉$èë…À‰Eˆ…£‹EØ‹U„‰D$‹B4‰$è[Øÿÿé“‹MÜ‹U„ÇEÔ‹} ‰M‹B4‹p,ë‰|$‹‰$èp*…À„Q‹v(…öuã‹MEÔ‰D$‰|$‰ $èâ…À‰Eˆ…0‹E€‰D$‹EÔ‰$è×Öÿÿ…À‰Eˆ…‹EÔ‹U„ÇD$‰D$‹B4‰$èf…À‰Eˆ„éæƒ}¨u`‹M„‹E ‹I0‰D$‰M”‹‰$èÖ)…À…·‹U”‹M„‹B‰A0‰Ðèºâÿÿ‹E”‹x ë‰ø‹wè÷âÿÿ‰<$èo)‰÷…ÿuè‹U”‰$è^)‹M„‹q4‹‰D$‹E ‰$èy)…Àu^‹F‹U„‰B4ÇB8ÇEˆ‹M€ÇEà‰ $èÆâÿÿéæûÿÿƒ}àt ÇEˆjë(‹E„‹@0…Àu‹EÜ‹U‰ë*‹EÔ‰$èˆ ëÇEˆ ‹M€‰ $èâÿÿ‹E܉$èE‹E„èÏâÿÿ‹EˆÄŒ[^_ÉÃU‰åW‰×V‰Æƒì ‹@9Ðw‹N9Êv`)‰ЋV 9ÐBÂÁ‰Môë‹F‹V )ø9ÐvA‰Uô‹Eô@‰D$‹‰$è„(…ÀuG‰D$‹‰$èo(ºf…Àt ‰}ô‰‹Eô‰F1ÒƒÄ ‰Ð^_ÉÃU‰å‹EÇ@ ÇÇ@Ç@ÉÃU‰åƒì(‰uø‹u‰}ü‹}…öx{‹O9Ît‹U ‹EÇEô…Ҕ…À”ÀÂu`‹E‰øèÿÿÿ…À‰EôuL‰ò‹G‰T$)ðU‰D$‰$è»'‹E7‰D$‹E ‰4$‰D$èž'‹U‹W‰WÆëÇEô‹Eô‹uø‹}üÉÃU‰åƒì‰}ü‹}‰uø‹u ‹G‰4$‰D$ è‚'‰t$‰<$‰D$è,ÿÿÿ‹uø‹}üÉÃU‰åƒì‹U‹BÇD$‰$‰D$ ‹E ‰D$èýþÿÿÉÃU‰åVƒì‹u…öt%‹‰$èí&ÇF ÇÇFÇFƒÄ^ÉÃU‰åƒì‹M ‰}ü‹}‰uø…Éu‹E1ö‰$è¤ÿÿÿë4‹E‰úèëýÿÿ…À‰Æu$‹U‹‹U ‰|$‰$‰T$è“&‹U‹Æ8‰z‰ð‹}ü‹uøÉÃU‰åVƒì‹u ‰4$è“&‰t$‰D$‹E‰$èxÿÿÿƒÄ^ÉÃU‰å‹EÇÇ@ÉÃU1À‰å‹Uë‹R@…ÒuøÉÃU‰åVƒì‹Eë ‹p‰$èþ%‰ð…ÀuïƒÄ^ÉÃU‰å‹MV…Ét1‰Ê1À‹R@…ÒuøH1ö;E rë‹IF;u ’Â…É•À„Ðuí…Ét‹ë1À^ÉÃU¸j‰åWVƒì‹} ‹u…ÿta‹…ÒuÇ$è—%…À‰tDÇÇ@‹6‹…Àu‰>ë'‹F…Àt‰ÆëõÇ$èa%…Àt‰F‰8Ç@1Àë¸fƒÄ^_ÉÃU‰å‹UW…Òt ü¹1À‰×ó«_ÉÃU1À‰å‹U…Òt‹B4ÉÃU¹j‰åƒì‰uø‹u‰}ü‹} …ö”Â…ÿ”ÀÂu"‹F4…Àt‰$èÓ$‰<$è%ƒøɉF4ƒáf‹uø‰È‹}üÉÃU‰åWVƒì‹M‹} …ɔ…ÿ”ÀÂu#‹q,ë‰|$‹‰$è¹$…Àu‹Fë ‹v(…öuâ1ÀƒÄ^_ÉÃU¹i‰åWVƒì ‹E‹} …À”Â…ÿ”ÀÂ…»‹U±‹G0;B0…ª‹w8± …ö…‰W8‹B,‰Æ‰Eô닉D$‹‰$è@$…Àt‹v(…öuå‹Mô…Éu/ëF‹F$‹V(…Àt‰x(…Òt‰z$‹U;r,u‰z,‹U…ÒtD‹E‰0ë=‹Uô‹B(ë‰Â‹@(…Àu÷‰z(‰W$ë‹EÇG$ÇG(‰x,‹E…Àt ‹UÇ1ÉƒÄ ‰È^_ÉÃU‰åWVƒì ‹E‹} …À”Â…ÿ”ÀÂ…å‹E…À„Ú‰<$¾è‡åÿÿ…À„Ê‹E‹p,ë‰|$‹‰$èa#…À„€‹v(…öuã‹UEô‰D$‰|$‹B0‰$èÐ f…À‰Æ…‹E‹uô‰$è%#…À‰Fu‹Eô¾f‰$è.ëZ‹Eô‹UÇD$‰D$‰$èMþÿÿf…À‰Æt9‹Eô‰$èë,‹F…Àt‰$è˜"‹E‰$èÄ"ƒø‰Föƒæfë¾iƒÄ ¿Æ^_ÉÃU¹i‰åWVƒì‹u‹} …ö”Â…ÿ”ÀÂu8‹v,ë‰|$‹‰$èo"…Àt ‹v(…öuçë‹F…Àt‰$è!"ÇF1ɃĉÈ^_ÉÃU‰åWVƒì‹u‹} …ö”Â…ÿ”À1ÉÂu ‹v,ë‰|$‹‰$è"…Àt‹v(…öuç‰ñƒÄ‰È^_ÉÃU‰åWVƒì‹E‹} ‹p,ë‰|$‰4$èÊÿÿHt‹v(…öuêƒÄ‰ð^_ÉÃU‰åVƒì$‹u‹M ÇEô…ö•Â…É•À„ÐtEô‰D$‰L$‰4$è~Òÿÿ‹EôƒÄ$^ÉÃU‰åƒì‹M‰}ü‹} ‰uø…ɔ…ÿ”ÀÂuA‹E…Àt:‹q,ë1‹E‰D$‹F‰$èL!…Àu‰|$‹F ‰$è9!…Àu‹Fë ‹v(…öuË1À‹uø‹}üÉÃU¹i‰åWVƒì ‹U‹} …Ҕ…ÿ”ÀÂ…Ò‹U±‹G0;B0…Á‹G8…Àt 9± …°‹E‰G8‹P,‰Ö‰Uôë/‹G‰D$‹F‰$è¶ …Àu‹G ‰D$‹F ‰$è  …Àt‹v(…öuÍ‹Eô…Àu*ë>‹F$‹V(…Àt‰x(…Òt‰z$‹E;p,u‰x,‹U1ɉ2ë<‹Uô‹B(ë‰Â‹@(…Àu÷‰z(ë‹EÇG$ÇG(‰x,‹E1É…Àt ‹UÇƒÄ ‰È^_ÉÃU‰åWVS윋E è[…À”À‰Ç‹E‰ú…À”ÀÂ…m‹E‹u…À”Â…ö”ÀÂ…U‹E¾‰$èÑáÿÿ…À„BU°f¾f‰U¤‰$è¢Äÿÿ‹E‰$è©…À‰E°„‹U¤‰$èçÚÿÿ…À‰Æt‹}¤‰<$è÷Øÿÿéù‹EÀ‰ú…À‰E •À„Ð…’‹u »~¹ü‰}”ó¦¸t ¶Fÿ¶Oÿ)È…Àu‹} ƒ‚‰D$‰<$è%…ÀuP‹uƒn¹ü‰Çó¦¸t ¶Fÿ¶Oÿ)È…Àu=‹u »©¹‰}”ó¦¸t ¶Fÿ¶Oÿ)È…Àt‹}¤¾‰<$è;Øÿÿé=‹E‹}Ä‹p,ë,‰|$‹F‰$袅Àu‹U ‰T$‹F ‰$茅Àt6‹v(…öuÐEä‹}‰D$ ‹U‹E ‰|$‰D$‹B0‰$è©…À‰Æ…Õëm‹F…Àt‰$è‹}À‰} ‹E ‰$è7…À‰Fu‹U¤‰$ë2‹F…Àt‰$èâ‹}‰<$è…À‰Fuo‹F‰$èÅ‹E¤‰$èf×ÿÿ¾fëf‹U‹uä‰$è܉F‹Eä‹H…Éu ‰$èçëÔ‹}ÇD$‰D$‰<$èŠüÿÿ…Àt‹Eä¾j‰$èºë‹E¤1ö‰$è×ÿÿë¾iÄœ‰ð[^_ÉÃU‰åWVƒì‹M‹E ‹}…ɔ…À”ÀÂuU…ÿtQ‹q,ë,‰|$‹F‰$è;…Àu‹E ‰D$‹F ‰$è%…Àt ‹v(…öuÐë‹F…Àt‰$è×ÇF1Àë¸iƒÄ^_ÉÃU‰åWVƒì‹M‹E ‹}…ɔ…À”ÀÂu=…ÿt9‹q,ë,‰|$‹F‰$è»…Àu‹E ‰D$‹F ‰$襅Àt‹v(…öuЉðë1ÀƒÄ^_ÉÃU‰åƒì(‰}ü‹}‰uø‹u ‹MÇEô…ÿ•Â…ö•À„Ðt…ÉtEô‰D$ ‰L$‰t$‰<$èãÎÿÿ‹Eô‹uø‹}üÉÃU‰åWVƒì‹M‹} …ɔ…ÿ”ÀÂu"‹q,ë‰|$‹‰$è…Àu°ë ‹v(…öuã1ÀƒÄ^_ÉÃU‰åWVƒì‹M‹E ‹}…ɔ…À”ÀÂu=…ÿt9‹q,ë0‰|$‹F‰$è¿…Àu‹E ‰D$‹F ‰$è©…Àu°ë ‹v(…öuÌ1ÀƒÄ^_ÉÃU‰å‹E…ÀtÉéÁÿÿÉÃU¹i‰åWVƒì‹U‹} …Ҕ…ÿ”ÀÂu`‹E‹p,ë‰|$‰4$èÿÃÿÿHt‹v(…öuê¹ë;‹F$‹V(…Àt‰P(…Òt‰B$‹E;p,u‰P,ÇF1ÉÇF$ÇF(‹E‰0ƒÄ‰È^_ÉÃU‰å‹UW…Òt ü¹1À‰×ó«_ÉÃU‰å‹E…ÀtÉébÀÿÿÉÃU¹ ‰å1ÀW‹}üó«_ÉÃU‰å‹E…ÀtÉé<ÀÿÿÉÃU‰åWVƒì‹}‹u ë!‰~0‰4$è5Âÿÿ‰<$‰D$èÙÿÿÿ‰4$ècÂÿÿ‰Æ…öuÛƒÄ^_ÉÃU¹i‰åWVƒì‹}‹u Ç‹E…À”Â…ö”ÀÂu@‰4$è¿Áÿÿ¹ fƒø t-‹E‰4$‰D$ècÐÿÿ¹j…À‰Æt‰D$‹E‰$è^ÿÿÿ1ɉ7ƒÄ‰È^_ÉÃU¹i‰åWVƒì‹U‹} …Ҕ…ÿ”À1öÂu\Ç$8袹f…À‰ÆtE‰$èNôÿÿ‰<$诅À‰F4tÇF‰<$è™…À‰u‰4$1öèóýÿÿ¹fë‹E1ɉF0‹E‰0ƒÄ‰È^_ÉÃU‰åƒì(Eô‰D$‹E ÇEô‰D$‹E‰$èMÿÿÿ‹EôÉÃU‰åƒì(‹M‰}ü‹} ‰]ôè[…ɹi”Â…ÿ”À‰uø1öÂufÇ$4èݹf…À‰ÆtO‰$èà½ÿÿƒ‚‰$èä…À‰t…ÿt ‰<$èÒ…À‰Fu‰4$1öèS¾ÿÿ¹fëÇF‹E1ɉF0‹E‰0‹]ô‰È‹uø‹}üÉÃU‰åƒì(Eô‰D$‹E ÇEô‰D$‹E‰$è2ÿÿÿ‹EôÉÃU‰åVƒìÇ$<è3ºf…À‰Æt^‹E…À‹E ”Â…À”ÀÂt‰4$1öèRýÿÿºië9‰4$è)ýÿÿÇF‹E ‰$è…À‰u‰4$1öè!ýÿÿºfë‹E1Ò‰F0‹E‰0ƒÄ‰Ð^ÉÃU‰åƒì(Eô‰D$‹E ÇEô‰D$‹E‰$èQÿÿÿ‹EôÉÃU‰åWVƒì ‹M‹u ‹}ÇEô…ɔ…ö”ÀÂut…ÿtpEô‰D$‰|$‰ $èÿÿÿ…À‰Æu\‹E ‹uô‰$èi‰F ‹Eô‹P …Òu‰$¾fèoüÿÿÇEôë+‰|$‰$è®Áÿÿ…À‰Æt‹Eô‰$èIüÿÿÇEôë¾i‹E‹Uô‰ƒÄ ‰ð^_ÉÃU‰åƒì(Eô‰D$ ‹EÇEô‰D$‹E ‰D$‹E‰$è#ÿÿÿ‹EôÉÃU¹i‰åƒì(‹E‰}ü‹} ‰]ôè[…À”Â…ÿ”À‰uø1öÂubÇ$4èt¹f…À‰ÆtK‰$è‹»ÿÿƒÇF‰$èt…À‰t‰<$èf…À‰Fu‰4$1öè)¼ÿÿ¹fë‹E1ɉF0‹E‰0‹]ô‰È‹uø‹}üÉÃU‰åƒì(Eô‰D$‹E ÇEô‰D$‹E‰$è6ÿÿÿ‹EôÉÃU‰åWVƒì ‹M‹} ÇEô…ɔ…ÿ”ÀÂ…‹u…ö„„Eô‰D$‹E‰ $‰D$èÈûÿÿ…À‰Çum‹U ‹uô‰$è­‰F ‹Eô‹P …Òu‰$f¿fèþùÿÿÇEôë=‹U‰$‰T$èð¿ÿÿ…Àt‹Eô¿f‰$èÒùÿÿÇEôë‹EôÇ@ë¿i‹E‹Uô‰ƒÄ ‰ø^_ÉÃU‰åƒì(Eô‰D$ ‹EÇEô‰D$‹E ‰D$‹E‰$èÿÿÿ‹EôÉÃU‰åƒì(‰}ü‹}‰uø‹u ÇEô…ÿ”Â…ö”À1ÉÂuEô‰D$‰t$‰<$èµÅÿÿ‹Mô‹uø‰È‹}üÉÃU‰åVƒì$‹u‹M ÇEô…ö”Â…É”ÀÂu&‹E…ÀtEô‰D$ ‹E‰L$‰4$‰D$èÇÿÿ‹Eôë1ÀƒÄ$^ÉÃU‰åWVƒì‹u‹} …ö”Â…ÿ”ÀÂuP‰4$èÓ»ÿÿfHu ‰4$è(ºÿÿ…Àt8‰D$‰<$è-…Àu‰ðë&‰4$èÊ»ÿÿ‰|$‰$è¤ÿÿÿ…Àu‰4$èô»ÿÿ‰Æë¢1ÀƒÄ^_ÉÃU‰åƒì(‰]ôè[‰uø‰}üÇ$4è´ºf…À‰Æt=ü1À¹ ‰÷ó«ƒÖ‰$è·…À‰u‰4$1öè9¹ÿÿºfë ÇF 1Ò‰v0‹E‰0‹]ô‰Ð‹uø‹}üÉÃU‰åƒì(EôÇEô‰$èmÿÿÿ‹EôÉÃU‰åWVƒì‹M‹E …ɔ…À”ÀÂu#‹11ÿ닉D$‹E ‰$è-…Àt ‹v(G…öuã¿kƒÄ‰ø^_ÉÃU‰å‹EÇÇ@ÉÃU1À‰å‹U…Òt ‹ë‹R(@…ÒuøÉÃU‰åVƒì‹Eë ‹p‰$蛉ð…ÀuïƒÄ^ÉÃU‰å‹EW‹} V…Àt-‹1À‰Êë‹R(@…ÒuøH1ö9øsë‹I(F9þ’Â…É•À„Ðuîë1É^‰È_ÉÃU1À‰åWVƒì‹} ‹u…ÿta‹…ÉuÇ$è4…À‰tDÇÇ@‹6‹…Òu‰>ë'‹F…Àt‰ÆëõÇ$èþ…Àt‰F‰8Ç@1Àë¸fƒÄ^_ÉÃU‰åWVƒì ‹U‹u …Ò”Eó…ö”À Eóug‹:ÇEô‰þ닉D$‹E ‰$èÅ…Àt ‹v(ÿEô…öuáë9ƒ}ôkt31À‰ú€}óu)ë‹R(@…ÒuøH1É9Eôvë‹(A;Mô’Â…ÿ•À„Ðuíë1ÿƒÄ ‰ø^_ÉÃ<>&'" =""<> > #document*/>01234567890123456789ABCDEFabcdef&#x&##cdata-section#textxmlnsxmlns:rbxmlhttp://www.w3.org/XML/1998/namespacehttp://www.w3.org/2000/xmlns/9_C_J_O_ü^R_Y_^_b__î^ø^e_p_--..09··ÐÐÑÑE`a‡‡ƒ†‘¡£¹»½¿¿ÁÂÄÄ@@KR`ippÖÜÝßàäçèêíðù  < < > L M M Q T b c f o ƒ ¼ ¼ ¾ ¾ ¿ ¿ À Ä Ç È Ë Í × × â ã æ ï   < < > > ? ? @ B G H K M f o p q ƒ ¼ ¼ ¾ Å Ç É Ë Í æ ï   < < > C G H K M V W f o ‚ ƒ ¾ Â Æ È Ê Í × × ç ï   > D F H J M U V f o ‚ ƒ ¾ Ä Æ È Ê Í Õ Ö æ ï   > C F H J M W W f o 114:FFGNPY±±´¹»¼ÆÆÈÍÐÙ )557799>>??q„†‹•——™­±·¹¹Ð Ü á á 00*0/01050™0™0š0š00ž0ü0þ0::AZ__azÀÖØöøÿ14>AHJ~€ÃÍðôõúP¨»Á††ˆŠŒŒŽ¡£ÎÐÖÚÚÜÜÞÞààâó OQ\^ÄÇÈËÌÐëîõøù1VYYa†Ðêðò!:AJq·º¾ÀÎÐÓÕÕåæ 9 = = X a … Œ “ ¨ ª ° ² ² ¶ ¹ Ü Ý ß á ð ñ     ( * 0 2 3 5 6 8 9 Y \ ^ ^ r t … ‹ ‘ “ ¨ ª ° ² ³ µ ¹ ½ ½ à à     ( * 0 2 3 6 9 = = \ ] _ a … Š Ž ’ • ™ š œ œ ž Ÿ £ ¤ ¨ ª ® µ · ¹     ( * 3 5 9 ` a … Œ Ž ’ ¨ ª ³ µ ¹ Þ Þ à á     ( * 9 ` a .0023@E‚„„‡ˆŠŠ”—™Ÿ¡£¥¥§§ª«­®°°²³½½ÀÄ@GIi ÅÐö    <<>>@@LLNNPPTUYY_acceeggiimnrsuužž¨¨««®¯·¸ºº¼Âëëððùù› ù EHMPWYY[[]]_}€´¶¼¾¾ÂÄÆÌÐÓÖÛàìòôöü&!&!*!+!.!.!€!‚!00!0)0A0”0¡0ú01,1N¥Ÿ¬£×ààôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô` `$`(`,`0`4`8`<`@`D`H`L`P`T`À£6¥´óŸç“Ú{Œ2%%.’>)ÝB&&)%'ŒX¹Ô =%Rþ¶¬ ¥B9uéKt˜ ÄXþɪÈ9Ü<ˆ^øô$"'IL JF3ª9,,/*pwFÜhT›'m!72 ºVy˜å}\v=P'CDü["$¨E6G¾&§=æš5æªDYn(Yv6DyßAV PCăüƒI  œN—Oä”!wJ¨Í(¹ûV%…`v6\ì þ ¸  Ì * Ü < Ä&I ý&[ @)x )Š *— ¸*ª ++¾ W,Ð ˜1ã —2ô Ç3 Ï4]G3 `B$`K(`W,`_0`i4`s8`‚<`@`œD`¤H`­L`´P`ÁT`Î``Ø`bà¤eîÜ?»)I22é&Gš+fULU"9HP¨daX‚ØW¢?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£Þ '}•'"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶_ixmlAttr_free_ixmlAttr_init_ixmlCDATASection_free_ixmlCDATASection_init_ixmlCloneDOMString_ixmlDocument_createAttribute_ixmlDocument_createAttributeEx_ixmlDocument_createAttributeNS_ixmlDocument_createAttributeNSEx_ixmlDocument_createCDATASection_ixmlDocument_createCDATASectionEx_ixmlDocument_createDocument_ixmlDocument_createDocumentEx_ixmlDocument_createElement_ixmlDocument_createElementEx_ixmlDocument_createElementNS_ixmlDocument_createElementNSEx_ixmlDocument_createTextNode_ixmlDocument_createTextNodeEx_ixmlDocument_free_ixmlDocument_getElementById_ixmlDocument_getElementsByTagName_ixmlDocument_getElementsByTagNameNS_ixmlDocument_importNode_ixmlDocument_init_ixmlDocument_setOwnerDocument_ixmlDocumenttoString_ixmlDomTreetoString_ixmlElement_findAttributeNode_ixmlElement_free_ixmlElement_getAttribute_ixmlElement_getAttributeNS_ixmlElement_getAttributeNode_ixmlElement_getAttributeNodeNS_ixmlElement_getElementsByTagName_ixmlElement_getElementsByTagNameNS_ixmlElement_getTagName_ixmlElement_hasAttribute_ixmlElement_hasAttributeNS_ixmlElement_init_ixmlElement_removeAttribute_ixmlElement_removeAttributeNS_ixmlElement_removeAttributeNode_ixmlElement_setAttribute_ixmlElement_setAttributeNS_ixmlElement_setAttributeNode_ixmlElement_setAttributeNodeNS_ixmlElement_setTagName_ixmlFreeDOMString_ixmlLoadDocument_ixmlLoadDocumentEx_ixmlNamedNodeMap_addToNamedNodeMap_ixmlNamedNodeMap_free_ixmlNamedNodeMap_getItemNumber_ixmlNamedNodeMap_getLength_ixmlNamedNodeMap_getNamedItem_ixmlNamedNodeMap_init_ixmlNamedNodeMap_item_ixmlNodeList_addToNodeList_ixmlNodeList_free_ixmlNodeList_init_ixmlNodeList_item_ixmlNodeList_length_ixmlNode_allowChildren_ixmlNode_appendChild_ixmlNode_cloneAttr_ixmlNode_cloneAttrDirect_ixmlNode_cloneCDATASect_ixmlNode_cloneDoc_ixmlNode_cloneElement_ixmlNode_cloneNode_ixmlNode_cloneNodeTree_ixmlNode_cloneNodeTreeRecursive_ixmlNode_cloneTextNode_ixmlNode_compare_ixmlNode_free_ixmlNode_freeSingleNode_ixmlNode_getAttributes_ixmlNode_getChildNodes_ixmlNode_getElementsByTagName_ixmlNode_getElementsByTagNameNS_ixmlNode_getElementsByTagNameNSRecursive_ixmlNode_getElementsByTagNameRecursive_ixmlNode_getFirstChild_ixmlNode_getLastChild_ixmlNode_getLocalName_ixmlNode_getNamespaceURI_ixmlNode_getNextSibling_ixmlNode_getNodeName_ixmlNode_getNodeType_ixmlNode_getNodeValue_ixmlNode_getOwnerDocument_ixmlNode_getParentNode_ixmlNode_getPrefix_ixmlNode_getPreviousSibling_ixmlNode_hasAttributes_ixmlNode_hasChildNodes_ixmlNode_init_ixmlNode_insertBefore_ixmlNode_isAncestor_ixmlNode_isParent_ixmlNode_removeChild_ixmlNode_replaceChild_ixmlNode_setLocalName_ixmlNode_setNamespaceURI_ixmlNode_setNodeName_ixmlNode_setNodeProperties_ixmlNode_setNodeValue_ixmlNode_setPrefix_ixmlNode_setSiblingNodesParent_ixmlNodetoString_ixmlParseBuffer_ixmlParseBufferEx_ixmlPrintDocument_ixmlPrintDomTree_ixmlPrintDomTreeRecursive_ixmlPrintNode_ixmlRelaxParser_ixml_membuf_append_ixml_membuf_append_str_ixml_membuf_assign_ixml_membuf_assign_str_ixml_membuf_destroy_ixml_membuf_init_ixml_membuf_insert_fclose_fopen_fread_free_fseek_ftell_malloc_memcpy_memmove_memset_realloc_strchr_strcmp_strdup_strlen_strncasecmp_strncmp_strncpy_strstrsingle module__mh_dylib_headerdyld_stub_binding_helper__dyld_func_lookup_copy_with_escape_safe_strdup_Parser_UTF8ToInt_Parser_freeElementStackItem_Parser_freeNsURI_Parser_free_Parser_skipString_Parser_skipComment_Parser_copyToken_Parser_isNameChar_Parser_skipMisc_Parser_getNextToken_Parser_getNextNode_ixml_membuf_set_size_BEGIN_DOCTYPE_XMLDECL_WHITESPACE_END_PI_BEGIN_PI_XMLDECL2_BEGIN_COMMENT_END_COMMENT_COMPLETETAG_ENDTAG_CDSTART_CDEND_DEC_NUMBERS_HEX_NUMBERS_NameChar_Letter_g_error_char_Parser_LoadDocument_Parser_freeNodeContent_Parser_isValidXmlName_Parser_setErrorChar_Parser_setNodePrefixAndLocalNameamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Frameworks/libthreadutil.2.dylib0000755000175000017500000013565011332327377030757 0ustar l3onl3onÊþº¾ L¤ `[¨ þíúÎ  …H__TEXT00__text__TEXTH#ÐH€__picsymbolstub1__TEXT+À+€ __cstring__TEXT-Øÿ-Ø__literal8__TEXT/Ø(/ØH__DATA00__data__DATA00__dyld__DATA00__la_symbol_ptr__DATA0 X0 __nl_symbol_ptr__DATA0d0d,8__LINKEDIT@@ ¤ P@executable_path/../Frameworks/libthreadutil.2.dylib}ЕÂnаMïëݸ+ ‡@ØLG˜ P )5E)FdF˜@Dh-@@¸ 4/usr/lib/libgcc_s.1.dylib 4o/usr/lib/libSystem.B.dylib|¦BŸ}ˆ¦|¦}€cx=ŒŒ(´}‰¦| x=ŒŒ(°N€ }‹cxKÿÿÌ|¦BŸ}h¦|¦=kk(€}i¦N€ ,8A‚8ƒ£ |xN€ |iy8`M‚ €i/ƒ@ž €iH#”€I €8Bÿÿ I N€ |¦,9 ”!ÿ°A‚D/„Až0€C €8B‚@œ€9 C ƒH|ƒ#xH"é9 8!P}#Kx€|¦N€ |¦¿¡ÿô|~y8`”!ÿ°@‚H ƒ£H"©“¾€~/ƒ@žÿì~ 8!P€»¡ÿô|¦N€ |¦¿¡ÿô|~y8`”!ÿ°A‚D; ž0¾,“¾8~8€ 8 dKÿþ­8 “¾“¾“¾“¾“Þ 8`8!P€»¡ÿô|¦N€ |¦¿ÿð|~y|œ#x|½+x”!ÿ°A‚L/…AžD8~Kÿþq,A‚48“£“ƒ=}i‘#€^8B^H8`8!P€»ÿð|¦N€ |eyM‚ 8¥ Kÿÿt|¦¿ÿð|}y|¼+x”!ÿ°A‚x Ažp8 „Ažd/„Až\$€8}ƒÄ €D‘"Kÿýñ€]/œ8Bÿÿ]Až,€,/€Až | ¦Ãóx| x;ÀN€!H;À8!PÃóx€»ÿð|¦N€ |¦¿aÿì|~y|›#x8`”!ÿ A‚@€ž;ž Hƒ¤ÃóxeÛxKÿÿ¤ëx„à@žÿè88~Kÿý±8`8!`€»aÿì|¦N€ ,A‚€/€Až €cN€ 8`N€ ,A‚€/€Až €c N€ 8`N€ |byA‚/„Až€d8 ƒLž 8`N€ |`yA‚/„Až€dƒLž 8`N€ |¦¿aÿì|}y|»+x”!ÿ A‚`/„@ž¤ëxƒÄ; H@€0/€Až$| ¦cÛx€ž| xN€!/ƒAžH €€ØAžƒÞžà@žÿÀ;À8!`Ãóx€»aÿì|¦N€ ,8A‚€|xN€ |¦¿ÿð|~y|œ#x|½+x”!ÿ°A‚L/…AžD8~Kÿû…,A‚48“£“ƒ=}i‘#€^8B^H8`8!P€»ÿð|¦N€ |eyM‚ Kÿÿx€€d|x C|bN€ |¦¿ÿð|}x8et|œ#x”!ÿ°Kÿúñ|~yA‚D€€]8~ 8€=} ^‘>‘~ €€]“ž^H98!PÃóx€»ÿð|¦N€ |¦¿ÿð|~xBŸè¦”!ÿ €(€Cl/€ÿÿ;¢Až?€ Ad<¿8a88€Æóx8¥H ||y@‚0€a8H||xH8~HÄóxHÉ€^lAÿìH€^l€œ€@œ^œ8!`ƒãx€»ÿð|¦N€ ,8A‚89 9`8@d8'‘#‘cC‘# ‘c8ô8|xN€ |¦¿ÿð|~y|œ#x|½+x”!ÿ 8ÿÿ8A‚À/„Až¸/…@ž;¡8< H€^l€(‚@œ(ÃóxKÿþ©€ždƒãxÅóxKÿþ,A‚H$€p|P/€@žÿØÃóxHq<` HP~ 8~,H]H8~HÄóxH€ /€@žÿì€^dÃóx8]dH)8`H8`8!`€»ÿð|¦N€ |¦¿¡ÿô|~y|#x”!ÿ°A‚t/„Ažl€h/€@žHµ€$€^(8`>,~0]‘=‘} €4€^8><]‘=€h/€@žÃóxH…8`H8`8!P€»¡ÿô|¦N€ ,A‚,/„Až$88@ƒ£8H8@|CxN€ ,A‚+„A8ƒH8|xN€ ,8A‚ ƒ8|xN€ ,8A‚ ƒ8|xN€ ,8A‚ ƒ8|xN€ ,8A‚ ƒ8|xN€ ,8A‚ ƒ 8|xN€ ,8A‚ ƒ8|xN€ ,8A‚ ƒ8|xN€ ,8A‚ ƒ8|xN€ |¦¿Áÿø|~yBŸè¦”!ÿA‚@8€8a8H€8<8c¬He€ž`<8cÌHU€žh<8cäHE€žd<8cüH5€ž €¾<8cP¡TÈ!PH€ž €¾$<8cLP¡TÈ!PHõ€ž4€¾8<8c€P¡TÈ!PHÕ€ž\<8c´HÅ€žL<8cÌHµ€žT<8cèH¥€žP<8cH•€žX<8c$H…€ž<€¾@<8c8P¡TÈ!PHe€žD€¾H<8cdP¡TÈ!PHE8!p€»Áÿø|¦N€ |¦¿¡ÿô|}yBŸ|ž#x覔!ÿ A‚X/„AžP€h/€@žHUÃóx8@8 pHÅ€/€@4<@C0l€A8<<_É¢<È8Éžüh(ýŒ$Ùž H<_ÈDØ €/€@4<@C0l€A@D<_É¢<È@Éžüh(ýŒ$Ùž H<_ÈDØ €0/€@4<@C0l€AHL<_É¢<ÈHÉž(üh(ýŒ$Ùž4H<_ÈDØ4€]l8}ì^X€pTKÿø=~`8}„Kÿø1~d8}¸Kÿø%8@~h€h/€@ž£ëxHA8@H8@8!`|Cx€»¡ÿô|¦N€ |¦¿!ÿä|~yBŸ|#x|¼+xè¦8ÿÿ”!ÿ8A‚X/„AžPHÁ€€^œ>Ð~4|| J…XAœ(<_<Ÿ?@ €B48„ˆ€bH…ÃóxH8/œ@ž;8< £ëxÅóx€ždKÿ÷ý|yy@‚Ãóx?@ HeHЀ}/ƒ@žD8~ì$Ëx;@Kÿô¹/ƒ@ž?@ €>œ~Ð^l€^p|J¢PP`ZH0/ƒ@ž 8~¸Kÿÿ¸8~„Kÿÿ°ÃóxKÿ÷ù/ƒ@ž ;½/Ažÿè|ëÖ€^0€@œÿØ/š@ž8~,HÁH$Ëx8~tKÿòy€^dÃóx8\dKÿÿ4;@8!pCÓx€»!ÿä|¦N€ |¦¿Aÿè|{y|#x|¾+x”!ÿ€8A‚P/…@ž;Á8;›ì“¡PH!8€ƒãx8¡8Kÿõe,@‚ ;›¸8€8¡8ƒãxKÿõI,A‚ƒ£|dxH(;›„8€8¡8ƒãxKÿõ!|zyA‚`ƒºDÓx€€]ƒãx8 =} ^‘>‘~ €€]=^‘>Kÿó¤ëx8{tKÿñUHd[ /ŠAžh€ @ž\€ €J8{t*j ^‘>‘~ € €J*^‘>€› Kÿðõ“[ cÛxH!8HcÛxH< 8!€|x€»Aÿè|¦N€ |¦¿Aÿè|}y”!ÿ 8A‚ôHµ;}ì;]tHLcÛxKÿóaƒÃ||x€/€Až| ¦€~| xN€!ÄóxCÓxKÿðYcÛx„ãx8 Kÿò€/€@žÿ°cÛx8€;}¸Kÿò•HLcÛxKÿòùƒÃ||x€/€Až| ¦€~| xN€!ÄóxCÓxKÿïñcÛx„ãx8 Kÿñ€Ð/€@žÿ°cÛx8€;}„Kÿò-HLcÛxKÿò‘ƒÃ||x€/€Až| ¦€~| xN€!ÄóxCÓxKÿï‰cÛx„ãx8 Kÿñ5ƒÝœ/ž@žÿ°cÛx8€KÿñɃ /œAž0€/€Až| ¦€|| xN€!„ãxCÓxKÿï-“Ý 8;,;ÝHhƒãxHéHÃóx¤ëxHy€l/€AÿìƒãxHå/ƒ@žÿôÃóxHÕ/ƒ@žÿôCÓxKÿï9£ëxHý£ëxH•/ƒ@žÿô88!`|x€»Aÿè|¦N€ |¦¿ÿð|½+xBŸ|~x|œ#xè¦8€”!ÿp8a8HÁ€]!<<b=@C0} `MÓ‘AP‘AH}"HP€A8| –})þp|KPlB€|6pAL<_| PÉ¢\<_=?l€ÉitTÉHÈPýŒh(üh(É¢lý¬zÿXOÝó‚AžühØX``€A\Hý­X(ühØ``€Ad,‘~0€€\<<^4‘>8H<5^$A‚48'9 9`8@d 8ô‘*J‘j ‘* ‘~$8€8 8`?¿H]8€8 d8~t;½ñpKÿëq=?8^@8||xÈ ¬8 ¤ëxX8~ì0LPT\Ø4Ø@ØØ(Ø<ØDØ Ø Kÿì)¤ëx8 œ8~¸Kÿì¤ëx8 œ8~„Kÿì|A‚;`#, &HT;€p dhlHÃóxKÿðE|{y &@‚$;œ€$œAœÿà;`/› &W½àÃóxH ¸ A‚ ÃóxKÿú 8!`cÛx€»aÿì|¦N€ |@&|¦¾ÁÿØ|}y|ž#x;€A”!ÿA‚ÌH™/ž@ž$:àd;ô; ;€;@ ;`':À H ‚Þ ‚þƒƒ>ƒžƒ^ƒ~8`8€8 H¥ƒÝl’ý4“8“=<“](“},’Ý0“$žà@œ(£ëxKÿï9.||x@’€$;Þ€ðAÿà;€.8},H £ëxHA’ £ëxKÿù8!pƒãx€aºÁÿØ|¦}p N€ |@&|¦¾¡ÿt|~x;€;`ÿÿ;>H?C0H A”!þÀBŸè¦.:þì:¾¸:Þ„Hm€^l#Ëx8B^lH ÃóxHq8€8a8H …ƒ¡Œ@4~ã»x;`Kÿë8€ƒƒ|}xÃóx.…ãxKÿù~ã»xH8/Š@@~£«x;`KÿêÝ8€ƒƒ|}xÃóx…ãx.KÿùU~£«x¤ëx8 Kÿé•H/‹@~óx;`Kÿê™8€ƒƒ|}xÃóx.…ãxKÿù~óxKÿÿ¼/›@ž€^Œ8Bÿÿ^Œ?€b?`8`cœMÓc{B@H´/ƒ<@ž>l€$‰A€(/€ÿÿAž,>l€H@¼ €^9)ÿÿ#Ëx‘>l8Bÿÿ^Hˆƒ¾,8€8a8H ma<8~,Äóx|]à– þp8¡@}+à–}kþp|B6p|@P€8})6pBè}+HP|BªèPA@½J½ÙÖ“¡DH €œ/€@ž4€Ð/€@ž(€/€@ž€ /€@ž€h/€Ažÿ€^8€8a8ÿÀÀËþ„?€b?`C0ÿ€¸ÿ`¨ÿ °cœMÓÿ@ 8Bÿÿ^H ¡€8“P8€8a8|Pl€T`ÈPüè(ÿÿ*Ûþ„H m8a88€ƒA8H ]^Ð/ŠAžè€ž¼€8ƒ¤€] “aX|P€AlHdƒž .A’û˜€^p #Ëx;`8B^pH±ÃóxH €€|| ¦| xN€!KÿúØ€^l8 ÿÿ#ËxŒ8Bÿÿ^lHuÃóxHÍ8!@8`a€º¡ÿt|¦}p HP|¦¿ÿà|~yBŸ|›#x覔!ÿ€A‚ð/„Ažè8€;,;>„;^LH-;€#|}xÃóxH=8€½ÃxH-8€(8 d½#ËxKÿâ¡8“~”8€½H€CÓx8 Kÿ㙽/@ž8<ŸÅóx8a88„4Kÿê•8€8a8KÿêÅcÛx888 KÿèÙ||xÃóxHÍ/œAž0ÃxH}ÃóxHU#ËxKÿâáCÓx8€KÿäÑH;€8!€ƒãx€»ÿà|¦N€ |¦¿!ÿä||y”!ÿ 8A‚èHA8;|L;<„€cÛxKÿäé|~xHTÄóxcÛxƒ¾KÿåÄóx8 |zxcÛxKÿã¡€/€Až| ¦€}| xN€!¤ëx#Ëx^ÓxKÿá¹/ž@žÿ¬8€cÛx;Ü,Kÿä #ËxKÿâÃóxHiHÃóx„ãxHù€€/€@žÿìƒãxH¥ÃóxH]/ƒ@žÿôƒãxH-/ƒ@žÿô88!`|x€»!ÿä|¦N€ |¦¿Aÿè|}x;€;@;},”!ÿH%€€/€@žÄ€d;À/€@8}LKÿãÁƒÃ||xƒ^8`H/žAž€šAT€ /€Až€}”Äóx8¡8KÿæáH€}”Äóx8¡8Kÿ쵄ãx8}L8 KÿâAÄóx8}„KÿàyKÿÿl8cÛx¤ëx8¡<@€~ [‘;‘{ €€^>[‘;Äóx8z„;ÀKÿÝÕH£ëxKÿàé/ƒ|dx@žÿ„?À CÓxHé8!`Ãóx€a»Aÿè|¦}p N€ ÙÁÿpÙáÿxÚÿ€Ú!ÿˆÚAÿÚaÿ˜Úÿ Ú¡ÿ¨ÚÁÿ°Úáÿ¸ÛÿÀÛ!ÿÈÛAÿÐÛaÿØÛÿàÛ¡ÿèÛÁÿðÛáÿøN€ ÉÁÿpÉáÿxÊÿ€Ê!ÿˆÊAÿÊaÿ˜Êÿ Ê¡ÿ¨ÊÁÿ°Êáÿ¸ËÿÀË!ÿÈËAÿÐËaÿØËÿàË¡ÿè€ËÁÿð|¦ËáÿøN€ |¦BŸ}h¦=k|¦…‹}‰¦N€ |¦BŸ}h¦=k|¦…‹}‰¦N€ |¦BŸ}h¦=k|¦…‹ø}‰¦N€ |¦BŸ}h¦=k|¦…‹à}‰¦N€ |¦BŸ}h¦=k|¦…‹˜}‰¦N€ |¦BŸ}h¦=k|¦…‹|}‰¦N€ |¦BŸ}h¦=k|¦…‹P}‰¦N€ |¦BŸ}h¦=k|¦…‹,}‰¦N€ |¦BŸ}h¦=k|¦…‹}‰¦N€ |¦BŸ}h¦=k|¦…‹}‰¦N€ |¦BŸ}h¦=k|¦…‹°}‰¦N€ |¦BŸ}h¦=k|¦…‹Ì}‰¦N€ |¦BŸ}h¦=k|¦…‹´}‰¦N€ |¦BŸ}h¦=k|¦…‹}‰¦N€ |¦BŸ}h¦=k|¦…‹H}‰¦N€ |¦BŸ}h¦=k|¦…‹$}‰¦N€ |¦BŸ}h¦=k|¦…‹(}‰¦N€ |¦BŸ}h¦=k|¦…‹}‰¦N€ |¦BŸ}h¦=k|¦…‹¸}‰¦N€ |¦BŸ}h¦=k|¦…‹œ}‰¦N€ |¦BŸ}h¦=k|¦…‹t}‰¦N€ |¦BŸ}h¦=k|¦…‹L}‰¦N€ ThreadPoolStats at Time: %ld High Jobs pending: %d Med Jobs Pending: %d Low Jobs Pending: %d Average Wait in High Priority Q in milliseconds: %f Average Wait in Med Priority Q in milliseconds: %f Averate Wait in Low Priority Q in milliseconds: %f Max Threads Active: %d Current Worker Threads: %d Current Persistent Threads: %d Current Idle Threads: %d Total Threads : %d Total Time spent Working in seconds: %f Total Time spent Idle in seconds : %f total jobs = %d, too many jobsC0€@@AàC0ààHHHHHHHHHHHHHHHHHHHHHH0@0 @0@0@0@0@0 @0$@0(@0,@00@04@08@0<@0@@0D@0H@0L@0P@0T@0X@0\@0`@Ü$ì¨- H-xE€X ¤j ¼ <l›h©&Ô¼*tÃ*ÄÊÈÙlêø   ,# ˜0 ¬= ¼J hW la Øk¼u  H‰ “ ü 𩼬ÔëXtä+ÈDØO<ew †8Ÿ4²ŒÆ$ÖìÀþXH%$6)„I'ô^%¼s~•£«³ÃÛñ "C_o–ª¾Ôâïö6789:;<=>?@ABCDEFGHIJKK@JHI>ED=<6:;?GFACB8795  !"#$%&'()*+,-./01234ü )@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK __mh_dylib_headerdyld_stub_binding_helpercfm_stub_binding_helper__dyld_func_lookup_CmpThreadPoolJob_CreateThreadPoolJob_CreateWorker_CalcWaitTime_WorkerThread_TimerThreadWorkersaveFPrestFP_FreeListAlloc_FreeListDestroy_FreeListFree_FreeListInit_ListAddAfter_ListAddBefore_ListAddHead_ListAddTail_ListDelNode_ListDestroy_ListFind_ListHead_ListInit_ListNext_ListPrev_ListSize_ListTail_TPAttrInit_TPAttrSetIdleTime_TPAttrSetJobsPerThread_TPAttrSetMaxJobsTotal_TPAttrSetMaxThreads_TPAttrSetMinThreads_TPAttrSetSchedPolicy_TPAttrSetStarvationTime_TPJobInit_TPJobSetFreeFunction_TPJobSetPriority_ThreadPoolAdd_ThreadPoolAddPersistent_ThreadPoolGetAttr_ThreadPoolGetStats_ThreadPoolInit_ThreadPoolPrintStats_ThreadPoolRemove_ThreadPoolSetAttr_ThreadPoolShutdown_TimerThreadInit_TimerThreadRemove_TimerThreadSchedule_TimerThreadShutdown___stderrp_fprintf$LDBL128_free_gettimeofday_malloc_memcpy_printf$LDBL128_pthread_cond_broadcast_pthread_cond_destroy_pthread_cond_init$UNIX2003_pthread_cond_signal_pthread_cond_timedwait$UNIX2003_pthread_cond_wait$UNIX2003_pthread_create_pthread_detach_pthread_mutex_destroy_pthread_mutex_init_pthread_mutex_lock_pthread_mutex_unlock_pthread_self_setpriority_srand_timesingle moduleÎúíþ H…H__TEXT00__text__TEXT8 ‚!8 €__cstring__TEXT¼-û¼-__literal8__TEXT¸/¸/__const__TEXTÀ/@À/À__DATA00__data__DATA00__dyld__DATA00À__IMPORT@@__pointers__IMPORT@@__jump_table__IMPORT@@s@@8__LINKEDITPP¨  P@executable_path/../Frameworks/libthreadutil.2.dylibŽ,¬A‡hú(ß-ÉÅ"«ÕŒPIÔVÔ P )2XT) UÔU@øSPP„ 4/usr/lib/libgcc_s.1.dylib 4o/usr/lib/libSystem.B.dylibèXÿ°Ã#‹€Ç#ÿàèX‹€·#ÿàU¸‰å‹U…Òt‹E ‰B‹EÇÇB ‰B1ÀÉÃU1À‰å‹U…Òt‹ …Éu ‹B‰EÉé«3‹ÿJ ‰‰ÈÉÃU¸‰åƒì‹U‹M …Òt"…Ét‹B @;B} ‰B ‹‰‰ ë‰ $èa31ÀÉÃU¸‰åWVƒì‹}…ÿuë‹0‰$è=3‰7‹…ÀuîÇG ƒÄ^_ÉÃU¸‰åVƒì‹u…ötTÇF‹E ‰F0‹E‰F,FÇD$dÇD$ ‰$èûþÿÿF ‰F1ÀÇFÇÇF‰v ÇFƒÄ^ÉÃU‰åƒì‰}ü‹}‰uø‹u…ÿ”Â…ö”ÀÂu.G‰$èÐþÿÿ…À‰ÂtÇ‹E ‰r‰B‹‰‰P‰ÿGë1Ò‹uø‰Ð‹}üÉÃU1À‰åƒì‹U…ÒtB ‰D$‹E ‰$‰D$èÿÿÿÉÃU‰åƒì‰}ü‹}‰uø…ÿtT;} tO‹M G 9E ”Â…É”ÀÂu:‹E ‹‰Á‹p‹@‰B‹A‰G‰L$‰$èRþÿÿÿO‹E…Àt‹G,…Àt‰4$ÿÐ1ö‰ð‹}ü‹uøÉÃU¸‰åWVƒì‹u…ötC‹U‹Bz ë‹p‹U ‰D$‹E‰T$‰$èUÿÿÿ‰ð9øuá‹U‰ÐƒÀÇB‰$èþÿÿ1ÀƒÄ^_ÉÃU‰å‹E…Àt ‹P…Òt‹@ë1ÀÉÃU‰å‹E…Àt ‹H…Ét‹@ ë1ÀÉÃU‰åV‹u‹M …ö”Â…É”ÀÂu ‹QF 9Âu1Ò^‰ÐÉÃU‰åV‹u‹M …ö”Â…É”ÀÂu‹9ðu1À^ÉÃU‰åWVƒì‹u‹E …öt?…ÀDE‹p‹Ex ë*‹E‹P0…Òt‹F‰D$‹E‰$ÿÒ…Àt ë‹U9Vt ‹v9þuÒ1öƒÄ‰ð^_ÉÃU¸‰å‹U…Òt‹BÉÃU‰åƒì‰}ü‹}‰uø‹u…ÿ”Â…ö”ÀÂu0G‰$èŽüÿÿ…À‰ÂtÇ@‹E ‰2‰B‹F‰V‰‰BÿGë1Ò‹uø‰Ð‹}üÉÃU1À‰åƒì‹U…Òt‹E ‰T$‰$‰D$è‚ÿÿÿÉÃU‰å‹E‹P‹E ;PÉ”À¶ÀÃUƒÁt‰åW‰ÇVƒì ‰ $‰Uôè üÿÿ…À‰Æt;‹‰‹G‰F‹G‰F‹G ‰F ‹G‰F‹G‰F‹Eô‰FF ÇD$‰$è/ƒÄ ‰ð^_ÉÃU‰åƒìH‰]ô‰uø‰Æ‰}ü‹@lè[@‰EÔ‹†(ƒøÿt 9EÔÇEÐ `ƒ‰D$Eä‰t$ ÇD$‰$èe/…À‰EÐu'‹Eä~H‰$èU/‰EÐë ‰t$‰<$è5/‹EÔ;Flì‹Fl9†œ}‰†œ‹EЋ]ô‹uø‹}üÉÃU¸‰å‹U…Òt5ÇB %ÿÿÿÇB'ÇB ÇÇBÇBôÇBdÉÃU‰åWVƒì0‹u‹M ‹}ÇEôÿÿÿÿ…ö”Â…É”À¹Â…•…ÿEôDøÇ ‰4$è¡.‹Fl;†(}‰ðèÀþÿÿ‹Vd‰ñ‹E èQþÿÿ…Àtë+FpHuç‰4$ès.¹ ëE‰† F,‰$è..FH‰Eäë‹Eä‰t$‰$è!.‹† …Àuç‹Fd‰@‰Fd‰4$è).1ɃÄ0‰È^_ÉÃU¹‰åWVƒì‹u‹} …ö”Â…ÿ”ÀÂu`‹Fh…Àu‰4$èé-‹†$1ɉ‹†(‰G‹†,‰G‹†0‰G ‹†4‰G‹†8‰G‹†<‰G‹~h…ÿu ‰4$èŸ-1ɃĉÈ^_ÉÃU‰åƒì‹M‰|$‹} ‰4$¾…ɔ…ÿ”ÀÂu‰9‹Ef1öÇAÇA‰A‰ð‹|$‹4$ÉÃU‰å‹U‹E …Òt ƒøw‰B1Àë¸ÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU¸‰å‹U…Òt‹E ‰1ÀÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU¸‰å‹U…Òt‹E ‰B 1ÀÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU¸‰å‹U…Òt‹E ‰B1ÀÉÃU‰åVSƒì ‹uè[…ö„MEðÇD$‰$èç+‹Eð‰D$ƒu‰$èá+‹F`‰D$ƒ“‰$èÌ+‹Fh‰D$ƒª‰$è·+‹Fd‰D$ƒÀ‰$è¢+ƒÙòF ‰$òD$è‰+ƒòF ‰$òD$èp+ƒEòF4‰$òD$èW+‹F\‰D$ƒy‰$èB+‹FL‰D$ƒ‘‰$è-+‹FT‰D$ƒ­‰$è+‹FP‰D$ƒÍ‰$è+‹FX‰D$ƒç‰$èî*ƒýòF<‰$òD$èÕ*ƒ)òFD‰$òD$è¼*ƒÄ [^ÉÃU¹‰åWVSƒì‹}‹u …ÿ”Â…ö”ÀÂ…õ‹Gh…Àu‰<$è¼*‡@ÇD$l‰D$‰4$èa*‹F…À~ò*Èòò^ÁòF ëÇF ÇF‹F…À~ò*ÈòFò^ÁòF ëÇF ÇF$‹F0…À~ò*ÈòF(ò^ÁòF4ëÇF4ÇF8‹Gl‰FX‹Gp‰FT‡ì‰$è2ùÿÿ‰F`‡„‰$è!ùÿÿ‰Fd‡¸‰$èùÿÿ1ɉFh‹Gh…Àu ‰<$èÝ)1ɃĉÈ[^_ÉÃU‰åƒìH‰}ü‹}‰uø‹u ‰]ôè[…ÿ”Â…ö”ÀÂÇEäÿÿÿÿÇEÌ…S‰<$è‰)‹‡‡œ‡Ð;‡4| ‰D$ƒµ‰D$‹ƒ)‹‰$èü(ë(‹UEä‰ù…ÒEE‰EÇ ‹Wd‰ðèýøÿÿ…À‰EÐu‰<$è$)ÇEÌ éÕ‹FƒøuG‹EЉD$‡ì‰$èFöÿÿ…ÀuOÇEÌ ‹—‰UÔ‹‡œ‰UÔ‹‡Ð‰UÔ‹wl+wpë6Hu‹UЇ¸‰T$ë´‹EЉD$‡„ë¥ÇEÌ믉øèÄøÿÿ…ÀuF…ötð‹UÔ‰ÐÁú÷þ;‡0}Þ‹EÌ…Àu G,‰$è>(ë‹UÐGt‰$‰T$èlôÿÿ‹Gd‹U‰@‰Gd‰<$èC(‹EÌ‹]ô‹uø‹}üÉÃU¸‰åWVƒì@‹M‹}…É„…ÿuÜu‰÷‹U‹E ‰$‰Eôèû'‹E‰t$ÇD$ì‰Ẻ$è¤öÿÿ…À‰Ât?‹p‹‰‹F‰G‹F‰G‹F ‰G ‹F‰G‹F‰G‹F‰G‰T$‹UÌÇD$éë‹U‰t$ÇD$¸‰UЉ$è?öÿÿ…À‰Âtf‹p‹‰‹F‰G‹F‰G‹F ‰G ‹F‰G‹F‰G‹F‰G‹EЉT$ÇD$‰$è¦ôÿÿ‹E‰t$ƒÀt‰$è7óÿÿ‹U‰$è'1Àéú‹E‰t$ÇD$„‰EÔ‰$è´õÿÿ…À‰ÂtY‹p‹‰‹F‰G‹F‰G‹F ‰G ‹F‰G‹F‰G‹F‰G‰T$‹UÔÇD$‰$èôÿÿ‹E‰t$ƒÀt‰$è¬òÿÿ‹Eëd‹E‹ …Òt_‹E ;BuW‹‰‹B‰G‹B‰G‹B ‰G ‹B‰G‹B‰G‹B‰G‹U‹‚ ‰D$‰ÐƒÀt‰$èPòÿÿ‹EÇ€ ‰$é ÿÿÿ‹U‰$è&¸ ƒÄ@^_ÉÃU¸‰åWVƒì ‹U…Ò„‹E‰$èç%‹Eì‰Eè‹EƒÀt‰EôëE‹Eè‰$èôÿÿ‹p‰Ç‹V…Òt‹F‰$ÿÒ‹Eô‰t$‰$è½ñÿÿ‹EèÇD$‰|$‰$èóÿÿ‹E‹€…Àu®‹EèÇD$‰$èVóÿÿ‹E¸‰EðëE‹Eð‰$èœóÿÿ‹p‰Ç‹V…Òt‹F‰$ÿÒ‹Eô‰t$‰$èKñÿÿ‹EðÇD$‰|$‰$è‘òÿÿ‹E‹€Ð…Àu®‹EðÇD$‰$èäòÿÿ‹E„‰EìëE‹Eì‰$è*óÿÿ‹p‰Ç‹V…Òt‹F‰$ÿÒ‹Eô‰t$‰$èÙðÿÿ‹EìÇD$‰|$‰$èòÿÿ‹E‹€œ…Àu®‹EìÇD$‰$èròÿÿ‹E‹° …öt+‹V…Òt‹F‰$ÿÒ‹Eô‰t$‰$èwðÿÿ‹EÇ€ ‹E‰ÇƒÇ,Ç@h‰<$è$‹EpHë‹E‰4$‰D$è$‹E‹@l…Àç‰<$èÞ#…Àuô‰4$èÒ#…Àuô‹Eô‰$èHðÿÿ‹E‰$èï#‹E‰$èÕ#…ÀuñƒÄ ^_ÉÃU‰åW‰ÇV‰ÎSè[ƒìlEà‰UÔÇD$‰$è`#‹EàºÓMb‹MäfWÛ+F +Nò*ÈòY‹è‰È÷êÁùÁú)ʃ}Ôò*ÂòXÈf(Áò‹ðf(ÑòÂÐfTÊfsòò]ƒò_Ãf\ÁfæÀfïÂf~ÀtEr ƒ}Ô…¥ënÿ‡p-€fnÀóæÀòXƒðf)E¸òE¸òX‡hò‡hëlÿ‡\-€fnÀóæÀòXƒðf)E¨òE¨òX‡Tò‡Të5ÿ‡H-€fnÀóæÀòXƒðf)E˜òE˜òX‡@ò‡@ƒÄl[^_ÉÃU‰åW¿VSƒì‹uè[…ö„‹‹Ef¿#ÇD$‰$èB"‹U‰$‰Æè:"ÇD$Æ‹EƒÀ,‰$èõ!ÇD$Æ‹EƒÀH‰$èÝ!…À…,‹M …Étj‹U ‹‹U‰‚$‹U ‹B‹U‰‚(‹U ‹B‹U‰‚,‹U ‹B ‹U‰‚0‹U ‹B‹U‰‚4‹U ‹B‹U‰‚8‹U ‹B‹U‰‚<ëA‹E$t7Ç@ Ç@'Ç@ ‹UÇ@Ç@ôÇ@dÇ‚$ÇD$³òÿÿÇD$Ç$è:!‹EÇD$dÇD$ƒÀt‰$èÒìÿÿfWÀ‰Ç‹E@Ç@Ç@0Ç@‹Uò@ò@(ò@<ò@Dò@ ò@ ò@4Ç@LÇ@Pò‚@Ç@TÇ@\Ç@X‰ÐìÇD$‰t$‰$èíÿÿÇD$‰t$Ç‹E¸‰$èéìÿÿÇD$‰t$Ç‹E„‰$èËìÿÿ¿#…ÀuI‹E1öÇ€ Ç@dÇ@hÇ@lÇ@pë‹Eè2ðÿÿ…À‰ÇuF‹U;²$|æ1ÿ‹E‰$èç…ÿt ‹U‰$èÉùÿÿƒÄ‰ø[^_ÉÃU‰åWVƒì0‹}‹u ÇEÜ…ÿ„‰<$褅öu0f¾ ÇEàdÇEäôÇEèÇEìÇEð ÇEô'ë&‹F‰Eà‹F‰Eä‹F‰E苉Eì‹F‰Eð‹F‰Eô‹v ÇD$ÇD$Ç$è=‹Eà‰‡4‹E䉇8‹E艇<‹E쉇$‹Eð‰‡(‹Eô‰·0‹wl;·$‰‡,}‰øèïÿÿ…À‰EÜuF9·$éÇEÜG,‰$è–‰<$軋EÜ…Àt‰<$èøÿÿ‹E܃Ä0^_ÉÃU‰åWVSè[윋}‰<$è€GHÿGl‰E¬‰$è8‰<$èlUà‰U„‰$ÇD$è‹uäèSƉ4$¾ÿÿÿÿèN‹M„ÇD$‰ $èÜ‹Eà—ì¸ÇEЉUÀ‰Ė„‰MĉEȉ<$è÷‹EÐ…Àt‹UÐGt‰$‰T$èøéÿÿÿ‡ò‡|òE°‹E„ÇD$‰$èm‹Eà+EÌò*ÀòXE°ò‡|‹U„ÇD$‰$èC‹Màƒþ‰MÔ…×ÿOpéÙ‹‡Œ‹@…ɉ‡Œ~2‹EÀ‰$èëÿÿ‹P‰Æ‰ø‰Ñ‰Uкèkùÿÿ‹MÀÇD$‰t$ë:‹—Ð…Ò~?‹Eĉ$èaëÿÿ‹P‰Æ‰ø‰Ñ‰Uкè/ùÿÿ‹MÄÇD$‰t$‰ $1öèaêÿÿéç‹·œ…öŽñ‹Eȉ$èëÿÿ‹P‰Æ‰ø‰Ñ‰UÐ1Òèåøÿÿ‹MÈÇD$‰t$ë´…öuÿŒ1Àé­ƒøG,ÇEàÇEä‰EÜ‹‡€…À…ç‹Gd1ö…À~GL‰$èPäÿÿ‰Eà‹p‹F‰EäÇ$è …ö•Â9EäžÀ„Ðtl‹F …ÀtEô‰D$‰t$‹‡”‰$èÛæÿÿëEô‰D$‰t$‹‡”‰$èÚëÿÿ‹EàÇD$‰D$GL‰$èãÿÿ‡„‰t$‰$è”áÿÿéKÿÿÿ„Òt(ÇEð‹F‰|$‰EìEì‰D$‹E܉$è+éÿÿÿ‹E܉|$‰$èé ÿÿÿLJ€‹E܉$èø‰<$èƒÄ01À^_ÉÃU‰åWVƒì0‹u‹}ÇEô…ö¾”Â…ÿ”ÀÂ…:‹M…Étƒ}uEð‰$èä‹EðE ‹U‰$躋UEô…ÒEE‰EÇ ‹M‹E‹IH„‰Eä‰$‰Màèzàÿÿ…À‰ÆtJ‹‰‹G‰F‹G‰F‹G ‰F ‹G‰F‹G‰F‹G‰F‹U‰V ‹M ‰N‹Eà‰F$‹}ƒÇL‰<$èƒâÿÿëj‹U¾ ‰$è.ë~‹B‹M 9H|A‰T$‰t$‰<$èáÿÿ…ÀuM‹Eä‰t$¾ ‰$èàÿÿ‹U‹M‹BH‰@‰BH‰$èâë2‰T$‰<$èKâÿÿ…À‰Âu¢‰t$‰<$è áÿÿ믋E1öƒÀ,‰$èƒ뵃Ä0‰ð^_ÉÃU‰åWV¾ƒì‹E…À„¤‹E‰$è}‹}ƒÇL‰<$è·áÿÿëu‹p‹U 9V$u^‰<$ÇD$‰D$èÅàÿÿ‹}…ÿt+‹‹U‰‹F‰B‹F‰B‹F ‰B ‹F‰B‹F‰B‹F‰B‹E‰t$1ö„‰$è ßÿÿë‰D$‰<$ètáÿÿ…Àu‡¾ ‹E‰$èéƒÄ‰ð^_ÉÃThreadPoolStats at Time: %ld High Jobs pending: %d Med Jobs Pending: %d Low Jobs Pending: %d Average Wait in High Priority Q in milliseconds: %f Average Wait in Med Priority Q in milliseconds: %f Averate Wait in Low Priority Q in milliseconds: %f Max Threads Active: %d Current Worker Threads: %d Current Persistent Threads: %d Current Idle Threads: %d Total Threads : %d Total Time spent Working in seconds: %f Total Time spent Idle in seconds : %f total jobs = %d, too many jobs@@àAàÿÿÿïAàAàÿÿÿïAààôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô0À @$µ_²3;Oè<ÊO. 2¹(Céü/®  4ä ßÉ>vp60?*ÂbY*Ð%O ³N§N¢M‘L2.™8 -L @MRdgÆuÁƒø!‘D*¤† ³è į ÒZ àÍî‹ ý) å  $1];ÝE OY:c¹m÷wiƒº–Ӯʼnڢïì)p?PQÉ`¯y|Œ¤ °7ÆeØÌ ë‹ÿÙ'õ,#†+82)MXagu}…¥»×ì )9I`tˆž¬¹À23456789:;<=>@?@ABCDEFGH  !"#$%&'()*+,-./01Æ )@      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH __mh_dylib_headerdyld_stub_binding_helper__dyld_func_lookup_CmpThreadPoolJob_CreateThreadPoolJob_CreateWorker_CalcWaitTime_WorkerThread_TimerThreadWorker_FreeListAlloc_FreeListDestroy_FreeListFree_FreeListInit_ListAddAfter_ListAddBefore_ListAddHead_ListAddTail_ListDelNode_ListDestroy_ListFind_ListHead_ListInit_ListNext_ListPrev_ListSize_ListTail_TPAttrInit_TPAttrSetIdleTime_TPAttrSetJobsPerThread_TPAttrSetMaxJobsTotal_TPAttrSetMaxThreads_TPAttrSetMinThreads_TPAttrSetSchedPolicy_TPAttrSetStarvationTime_TPJobInit_TPJobSetFreeFunction_TPJobSetPriority_ThreadPoolAdd_ThreadPoolAddPersistent_ThreadPoolGetAttr_ThreadPoolGetStats_ThreadPoolInit_ThreadPoolPrintStats_ThreadPoolRemove_ThreadPoolSetAttr_ThreadPoolShutdown_TimerThreadInit_TimerThreadRemove_TimerThreadSchedule_TimerThreadShutdown___stderrp_fprintf_free_gettimeofday_malloc_memcpy_printf_pthread_cond_broadcast_pthread_cond_destroy_pthread_cond_init$UNIX2003_pthread_cond_signal_pthread_cond_timedwait$UNIX2003_pthread_cond_wait$UNIX2003_pthread_create_pthread_detach_pthread_mutex_destroy_pthread_mutex_init_pthread_mutex_lock_pthread_mutex_unlock_pthread_self_setpriority_srand_timesingle moduleamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/PkgInfo0000644000175000017500000000001011332327377024050 0ustar l3onl3onAPPLaMulamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Info.plist0000644000175000017500000000232712050266603024545 0ustar l3onl3on CFBundleDevelopmentRegion English CFBundleExecutable amule CFBundleName amuleadunanza CFBundleGetInfoString 2012.1, Copyright 2003-2012 aMule AdunanzA Project (http://www.adunanza.net) based on aMule (www.amule.org) CFBundleIconFile amuleadunanza CFBundleIdentifier net.adunanza.aMuleAdunanzA CFBundleInfoDictionaryVersion 2012.1 CFBundlePackageType APPL CFBundleShortVersionString 2012.1 CFBundleSignature Adun CFBundleVersion 2012.1 NSHumanReadableCopyright Copyright 2003-2012 aMule AdunanzA Project (http://www.adunanza.net) based on aMule (www.amule.org) NSMainNibFile NSMainNibFile NSPrincipalClass NSApplication amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Resources/0000755000175000017500000000000012053222165024541 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Resources/English.lproj/0000755000175000017500000000000012053222165027257 5ustar l3onl3on././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Resources/English.lproj/MainMenu.nib/amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Resources/English.lproj/MainMenu.n0000755000175000017500000000000012053222165031145 5ustar l3onl3on././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Resources/English.lproj/MainMenu.nib/objects.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Resources/English.lproj/MainMenu.n0000755000175000017500000001226211332327377031167 0ustar l3onl3on typedstreamè„@„„„NSIBObjectDataà„„NSObject…’„„„NSCustomObject)”„@@„„„NSMutableString„„NSString”„+ NSApplication†…†„i@–„„„ NSMenuItemŸ”’„„„NSMenuÌ”„i@@@„™™NewApplication†„„„NSMutableArray„„NSArray”š ’„›’œ„ i@@IIi@@@@:i@„™™About NewApplication†„™™†‚ÿÿÿ…„„„NSCustomResource)”–„™™NSImage†„™™NSMenuCheckmark††…„¦–§„™™NSMenuMixedState††……’…’…†’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’š’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Services†¤‚‚ÿÿÿ…¥…©„submenuAction:…’…’„„˜™Services†„ š†„™™_NSServicesMenu†††’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Hide NewApplication†„™™h†‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™ Hide Others†„™™h†‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Show All†¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’œ „™™Quit NewApplication†„™™q†‚‚ÿÿÿ…¥…©……’…’…††„™™ _NSAppleMenu†† „™™Preferences…†„™™,†‚‚ÿÿÿ…¥…©……’…’…†œ–„„˜™ Open Recent†„ š’„›’à„™™ Clear Menu†¤‚‚ÿÿÿ…¥…©……’…’…††„™™_NSRecentDocumentsMenu††„›’„„˜™File†„ š ’„›’Ê „™™New†„™™n†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Open...†„™™o†‚‚ÿÿÿ…¥…©……’…’…†’É’„›’Ê ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Close†„™™w†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Save†„™™s†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™ Save As…†„™™S†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Revert†¤‚ÿÿÿ…¥…©……’…’…†’„›’Ê ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™ Page Setup…†„™™P†‚‚ÿÿÿ…¥…©……’…’…†’„›’Ê „™™Print…†„™™p†‚‚ÿÿÿ…¥…©……’…’…††…† „™™ Open Recent†¤‚‚ÿÿÿ…¥…©¢…’…’Æ–„›’„„˜™Window†„ š’„›’è „™™Zoom†¤‚‚ÿÿÿ…¥…©……’…’…†’„›’è „™™Minimize†„™™m†‚‚ÿÿÿ…¥…©……’…’…†’ç’„›’è „™™Bring All to Front†¤‚‚ÿÿÿ…¥…©……’…’…††„™™_NSWindowsMenu†† ‚À¤¤‚‚ÿÿÿ…¥…©……’…’…†è–„›’„„˜™Edit†„ š ’„›’ô „™™Undo†„™™z†‚‚ÿÿÿ…¥…©……’…’…†’ó’„›’ô ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Cut†„™™x†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Copy†„™™c†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Paste†„™™v†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Delete†¤‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™ Select All†„™™a†‚‚ÿÿÿ…¥…©……’…’…†’„›’ô ‚@¤¤‚‚ÿÿÿ…¥…©……’…’…†’„›’ô „™™Find†¤‚‚ÿÿÿ…¥…©¢…’…’„„˜™Find†„ š’„›’  „™™Find…†„™™f†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™ Find Next†„™™g†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™ Find Previous†„™™G†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Use Selection for Find†„™™e†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Jump to Selection†„™™j†‚‚ÿÿÿ…¥…©……’…’…††…††’„›’ô „™™Spelling†¤‚‚ÿÿÿ…¥…©¢…’…’„„ š’„›’  „™™ Spelling…†„™™:†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Check Spelling†„™™;†‚‚ÿÿÿ…¥…©……’…’…†’„›’  „™™Check Spelling as You Type†¤‚‚ÿÿÿ…¥…©……’…’…††…†††…† „™™Redo†„™™Z†‚‚ÿÿÿ…¥…©……’…’…†ô–ÓÊ–ô–­œ–¼œ–þô–ßÊ–„›’„„™™MainMenu†„ š’„›’- ž¤‚‚ÿÿÿ…¥…©¢…’…’œ†’„›’- „™™File†¤‚‚ÿÿÿ…¥…©¢…’…’ʆ’„›’- „™™Edit†¤‚‚ÿÿÿ…¥…©¢…’…’ô†’„›’- „™™Window†¤‚‚ÿÿÿ…¥…©¢…’…’膒,†„™™ _NSMainMenu†† „™™Help†¤‚‚ÿÿÿ…¥…©¢…’…’„8„ š’„›’9 „™™NewApplication Help†„™™?†‚‚ÿÿÿ…¥…©……’…’…††…††-–´œ–1-–ëè–œ0–„„„NSWindowTemplateø”„ iiffffi@@@@@cܱàh‚px„™™Window†„™™NSWindow†„˜™View†„„„NSView)„„ NSResponder”’…š„ @@@@ffffffff„ š†……… àhàh’…’…’…’…†…„ffff@š„c„ffÕ’…©†•–9,–-•–;9– –3-–( – –ÔÊ–½œ–ÆÃ–àÊ–Ê1–¬œ– – ô–¯­–è5–·œ–¢œ–ô–5-–úô–ÚÊ–0-–ÍÊ– –÷ô–ðè–×Ê–" –ãÊ–ô3–ÐÊ–ÉÊ–ºœ–íè– ô–«œ–ÝÊ–ûô–ô–C>– –³œ–ô– –% – š-–Ú„˜™8†–•„˜™ File's Owner†–3„™™ NSMenuItem†–è…–ß„˜™2†–ㄘ™6†–þ„™™ NSMenuItem1†– „™™NSMenu†–„™™ NSMenuItem4†–Ê„˜™†–ׄ˜™3†–Ó„˜™7†–çO–-„˜™MainMenu†– „™™ NSMenuItem7†–„™™ NSMenuItem4†–÷„™™ NSMenuItem2†–9„˜™2†–%„™™ NSMenuItem8†–1O–„™™ NSMenuItem2†–ú„™™ NSMenuItem†–ÐO– „™™ NSMenuItem12†–;O–à„˜™5†–Ý„˜™10†–û„™™ NSMenuItem3†–š„™™121†–Ô„˜™1†–„™™ NSMenuItem13†–„™™ NSMenuItem10†–"„™™ NSMenuItem6†– „™™NSMenu†–„™™ NSMenuItem9†–ó„™™ NSMenuItem11†–„™™ NSMenuItem†–ô„™™NSMenu†–„™™ NSMenuItem3†–(„™™ NSMenuItem†–,„˜™1†–½„™™1111†–„™™ NSMenuItem1†–>„™™Window†–Í„˜™9†’„„„ NSMutableSet„„NSSet”„I’>†’„ š’„„„NSNibControlConnectorÏ„„NSNibConnector”„@@@í…„˜™performMiniaturize:††’„t°ð…„˜™arrangeInFront:††’„t°ã…„˜™print:††’„t°à…„˜™runPageLayout:††’„t°;…„˜™ showHelp:††’„t°Æ…„˜™clearRecentDocuments:††’„t°½•„˜™ terminate:††’„t°¢•„˜™orderFrontStandardAboutPanel:††’„t°·•„™™hideOtherApplications:††’„t°´•„™™hide:††’„t°º•„™™unhideAllApplications:††’„t°û…„˜™cut:††’„t°…„˜™paste:††’„t°ó…„˜™redo:††’„t°…„˜™ selectAll:††’„t°÷…„˜™undo:††’„t°þ…„˜™copy:††’„t°"…„˜™showGuessPanel:††’„t°%…„˜™checkSpelling:††’„t°(…„™™toggleContinuousSpellChecking:††’„t°Ô…„™™ performClose:††’„t°…„™™delete:††’„t°ë…„™™ performZoom:††’„t°…„™™performFindPanelAction:††’„t°…„™™performFindPanelAction:††’„t°…„™™performFindPanelAction:††’„t°…„™™performFindPanelAction:††’„t°…„™™centerSelectionInVisibleArea:†††’…š]„@i¼•±¬±Ýp±É|±è±•µ±{W±ÓO±«Ë±ãN±¡± ¨±9j±•±ó­±™¾±¡Æ±«±± ®±š± ¹±¯‚±ÊQ±‰™±%½±û ±œ9±º–±ÚP±§É±àM±;o±×K±ÍR±²±3£±>±ƒŽ±1S±¢±"»±¬±08±Æ~±ëű“´±­ƒ±£Ç±ç\±yV±Á±·‘±½ˆ±,g±—¼±}z±«Ä±ÔI±‹¯±§±s%±©Ê±³±›À±ð±¤±´†±Ã}±ßJ±¸±‹±í±ÐH± Ÿ±°±¢:±ô©±w'±÷ž±ŸÃ±5±úœ±¥È±‡˜±›±C±‘³±š±…’±(¿±-±þšÌš’„˜™IBCocoaFramework††././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Resources/English.lproj/MainMenu.nib/info.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Resources/English.lproj/MainMenu.n0000755000175000017500000000111511332327377031162 0ustar l3onl3on IBDocumentLocation 126 126 356 240 0 0 1600 1178 IBEditorPositions 29 125 407 318 44 0 0 1600 1178 IBFramework Version 328.0 IBOpenObjects 21 29 IBSystem Version 7B8 ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Resources/English.lproj/MainMenu.nib/classes.nibamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/Resources/English.lproj/MainMenu.n0000755000175000017500000000015611332327377031166 0ustar l3onl3on{ IBClasses = ({CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }); IBVersion = 1; }amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/0000755000175000017500000000000012053222165023531 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/0000755000175000017500000000000012053222165027462 5ustar l3onl3on././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Contents/amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Content0000755000175000017500000000000012053222165031015 5ustar l3onl3on././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Contents/PkgInfoamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Content0000644000175000017500000000001011332327377031020 0ustar l3onl3onAPPLaELH././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Contents/Info.plistamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Content0000644000175000017500000000171712050266603031027 0ustar l3onl3on CFBundleName ed2kHelperScript CFBundleDevelopmentRegion English CFBundleExecutable applet CFBundleIdentifier net.adunanza.ed2kHelperScript CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature aELH CFBundleURLTypes CFBundleURLName ED2K URL CFBundleURLSchemes ed2k CFBundleTypeRole Viewer LSPrefersCarbon LSUIElement 1 ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resources/amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Content0000755000175000017500000000000012053222165031015 5ustar l3onl3on././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resources/Scripts/amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Content0000755000175000017500000000000012053222165031015 5ustar l3onl3on././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resources/Scripts/main.scptamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Content0000644000175000017500000000456611332327377031044 0ustar l3onl3onFasdUAS 1.101.10ÿÿÿÿ lÿþ i Iÿýÿü ÿý.GURLGURLnullÿÿ€ÿÿ€TEXT oÿû ÿû0theurltheURLÿü l7 k7   r  f oÿú ÿú0theapptheApp  r  l ÿù I ÿøÿ÷ ÿø.earsffdralis afdr oÿö ÿö0theapptheAppÿ÷ÿù oÿõ ÿõ0thepaththePath O  k r lÿô n 1ÿó ÿó ctnr oÿò ÿò0thepaththePathÿô oÿñ ÿñ0thepaththePath!ÿð !r"# "n$% $1ÿï ÿï posx %oÿî ÿî0thepaththePath #oÿí ÿí0 theposixpath thePosixPathÿð m &&Únulls߀ÿœuýSystem Events.app刊˜Øåÿ¿rÔ£? PÎ>øåÿ¿k†˜ØˆŠ˜ p> xæÿ¿0y†˜ ìsevsalis|Future¿óò~H+uýSystem Events.appÑÜ¿Ô> ÿÿÿÿ CoreServices¿ôFÞ¿Ô’j uýuÙuØ4Future:System:Library:CoreServices:System Events.app$System Events.appFuture-System/Library/CoreServices/System Events.app/ÿÿ'( 'r")* )b +, +oÿì ÿì0 theposixpath thePosixPath ,m- - /ed2k *oÿë ÿë0 ed2kprogram ed2kProgram(./ .r#.01 0b#,23 2b#(45 4n#&67 61$&ÿê ÿê strq 7o#$ÿé ÿé0 ed2kprogram ed2kProgram 5m&'8 8  3n(+9: 91)+ÿè ÿè strq :o()ÿç ÿç0theurltheURL 1oÿæ ÿæ0 thecommand theCommand/;< ;I/4ÿå=ÿä ÿå.sysoexecTEXTÿÿ€TEXT =o/0ÿã ÿã0 thecommand theCommandÿä<>ÿâ >L57ÿáÿáÿâ "error reporting shouldReportÿþÿà?@ÿà?ÿß ÿß.GURLGURLnullÿÿ€ÿÿ€TEXT@ÿÞÿÝÿÜABÿÛ ÿÞ.GURLGURLnullÿÿ€ÿÿ€TEXT ÿÝ0theurltheURLÿÜAÿÚÿÙÿØÿ×ÿÖÿÕ ÿÚ0theurltheURL ÿÙ0theapptheApp ÿØ0thepaththePath ÿ×0 theposixpath thePosixPath ÿÖ0 ed2kprogram ed2kProgram ÿÕ0 thecommand theCommandBÿÔ&ÿÓÿÒ-ÿÑ8ÿÐ ÿÔ.earsffdralis afdr ÿÓ ctnr ÿÒ posx ÿÑ strq ÿÐ.sysoexecTEXTÿÿ€TEXTÿÛ8)E±O¡j E²Oá ¢â,E²O¢ã,E³UO£ä%E´O¤å,æ% å,%EµO¥j Ohascr úÞÞ­././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Contents/Resources/applet.rsrcamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Content0000644000175000017500000000055211332327377031033 0ustar l3onl3on$$F@$$F¸Þ!¦Fscszspshÿÿÿÿ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Contents/MacOS/amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Content0000755000175000017500000000000012053222165031015 5ustar l3onl3on././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Contents/MacOS/appletamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Contents/MacOS/ed2kHelperScript.app/Content0000755000175000017500000010171411332327377031040 0ustar l3onl3onÊþº¾EÔ `#Ì þíúÎ Ø•8__PAGEZEROŒ__TEXT00__text__TEXT+Ø ÜØ€__picsymbol_stub__TEXT5´%´€$__symbol_stub__TEXT5´%´€__picsymbolstub1__TEXT5À %À€ __cstring__TEXT7`0'`Œ__DATA@0__data__DATA@0__nl_symbol_ptr__DATA@0 __la_symbol_ptr__DATA@$40$__dyld__DATA@X0X__common__DATA@€48__LINKEDITPÔ@Ô /usr/lib/dyld dCV§Î/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices 4CV§ÎX/usr/lib/libSystem.B.dylibh`/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServicesôÞ0/usr/lib/libSystem.B.dylib €F@*0€X 0€‰ ¡`–Р´#GÇœxш€ùíð °”Ý <¿ÿÓÿçÿÿÿÿÿÿÿÿÿÿÿ'üs€þãÿüùÿÿÿÿÿÃ?Àð×€‡1 `G¬‘gÂ`ð(è! D x~xž|8`8€(H-|`x8€^8€x€^8€|€^88(8`-Hy|`x€^88`-€ž8HÁ€!€|¦»ÁÿøN€ |¦BŸ}ˆ¦=Œ|¦9Œ }‰¦N€ |¦BŸ}ˆ¦=Œ|¦9Œ }‰¦N€ |¦BŸ}ˆ¦=Œ|¦9Œ€}‰¦N€ |¦¿Áÿø”!ÿ |> x~xž|888`-HÁ|`x@8@ xBŸè¦HM<_€B Ѐ8€8/€Až€^8 T>+€A<_8bý`H±<_8bþHHÅ€!€|¦»ÁÿøN€ |¦BŸ}ˆ¦=Œ|¦9Œ¤}‰¦N€ |¦BŸ}ˆ¦=Œ|¦9Œd}‰¦N€ |¦BŸ}ˆ¦=Œ|¦9Œ¤}‰¦N€ |¦8@8”!ÿ a<8a8°:˜A9˜A8H8!`€|¦N€ |¦<`ap<€sc`clt`„pt”!ÿ Hµ|iy@¢ 8`H(8@88a8˜A9°:‘!<˜A8H¥8`8!`€|¦N€ |¦BŸ}h¦=k|¦…‹ \}‰¦N€ |¦BŸ}h¦=k|¦…‹ @}‰¦N€ |¦BŸ}h¦=k|¦…‹ $}‰¦N€ |¦BŸ}h¦=k|¦…‹ }‰¦N€ |¦BŸ}h¦=k|¦…‹ ì}‰¦N€ |¦BŸ}h¦=k|¦…‹ Ð}‰¦N€ |¦BŸ}h¦=k|¦…‹ ´}‰¦N€ |¦BŸ}h¦=k|¦…‹ ˜}‰¦N€ |¦BŸ}h¦=k|¦…‹ |}‰¦N€ |¦BŸ}h¦=k|¦…‹ `}‰¦N€ |¦BŸ}h¦=k|¦…‹ D}‰¦N€ |¦BŸ}h¦=k|¦…‹ (}‰¦N€ |¦BŸ}h¦=k|¦…‹ }‰¦N€ __dyld_mod_term_funcs__dyld_make_delayed_module_initializer_calls__dyld_image_count__dyld_get_image_name__dyld_get_image_header__dyld_NSLookupSymbolInImage__dyld_NSAddressOfSymbollibobjc__objcInitThe kernel support for the dynamic linker is not present to run this program. 7`48 ü ô ¸ \ F€£ø´ôp `tIœ¢ÀZtÖP…hÍÎðÍdàà1ˆ©@,1ˆ©@(1ˆ©@$1ˆ©@L1ˆ©@H1ˆ©@D1ˆ©@@1ˆ©@<1ˆ©@81ˆ©@41ˆ©@01ˆ©@T1ˆ©@P1ˆ@ @@ 4 @€K @„h @ˆŽ @Œ¡ @» @”Ö @˜ó @œ  @ . @¤P @¨t @¬•@ž @°¯ ÍdÆ ÍÎðÜ £øÿ  \   ¸'  `J tp ¢À~ Iœ¤ ÖPÌ ôpÓ ´Û …hã  ôê F€ð Ztö  ü|j‡ˆ(*8:?[ó4=UÆ8 !" !_NXArgc_NXArgv___progname__mh_execute_header_catch_exception_raise_catch_exception_raise_state_catch_exception_raise_state_identity_clock_alarm_reply_do_mach_notify_dead_name_do_mach_notify_no_senders_do_mach_notify_port_deleted_do_mach_notify_send_once_do_seqnos_mach_notify_dead_name_do_seqnos_mach_notify_no_senders_do_seqnos_mach_notify_port_deleted_do_seqnos_mach_notify_send_once_environ_receive_samples_CallComponentDispatch_OpenDefaultComponent___keymgr_dwarf2_register_sections___keymgr_global__cthread_init_routine__dyld_register_func_for_add_image__dyld_register_func_for_remove_image__init_keymgr__keymgr_get_and_lock_processwide_ptr__keymgr_set_and_unlock_processwide_ptr_abort_atexit_calloc_errno_exit_free_mach_init_routineÎúíþ H…8__PAGEZEROÐ__TEXT__text__TEXT\Ï\ €__picsymbol_stub__TEXT++€__symbol_stub__TEXT++€__cstring__TEXT,L,__picsymbolstub2__TEXTx}x€__textcoal_nt__TEXTõõ €Œ__DATA __data__DATA __nl_symbol_ptr__DATA __la_sym_ptr2__DATA __dyld__DATA0 0__common__DATAP 48__LINKEDIT0Ì Ì /usr/lib/dyld d:ÌLC/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices 4ý¶LCX/usr/lib/libSystem.B.dylib Œ!@ PX! 8!P\j‰åƒäðƒì‹]‰\$M‰L$ƒÃÁãˉ\$èôU‰åWVSƒì,èe‹E‰ƒl‹E ‰ƒp‹E‰ƒt‹ƒ|‹…ÀtÿЋƒ„‹…ÀtÿÐèÁè°Eä‰D$ƒœ‰$èÒ‹Eä…Àt‰$豋ƒ€Ç‹E ‹8…ÿudë'€ù/D‰ò¶v„Éuî…Àt ƒÀ‰ƒx뉻x‹Eƒ8t ‹EƒÀƒ8uøƒÀ‰D$ ‹E‰D$‹E ‰D$‹E‰$è‰$è¶„Ét¸w‰ú¸ë‹U‰åSƒì$èhEô‰D$ƒ·‰$èÿUôƒÄ$[]Ãhÿ%0 ÿ%4 U‰åƒì(ÆEðÆEñfÇEò‹E‰EôEð‰$èõÉÃU‰åƒì(ÇD$tpcsÇ$tlpaèÀ…Àu°ëÆEðÆEñfÇEò‰EôEð‰$èµ1ÀÉÃ__dyld_mod_term_funcs__dyld_make_delayed_module_initializer_callsèx‹‰Ÿÿ቗Qéÿÿÿè_‹‰ŠÿቂQéÿÿÿèF‹‰uÿá‰mQéíþÿÿè-‹‰`ÿá‰XQéÔþÿÿ苉Kÿá‰CQé»þÿÿ‹ $Ë$Ã,…ž·Ðé°   4 P K T h X Ž \ ¡ ` » d Ö h ó l  p . t P x t | • ž € ¯ÆÜÿ%+|jzý½ÅÛ‚_NXArgc_NXArgv___progname__mh_execute_header_catch_exception_raise_catch_exception_raise_state_catch_exception_raise_state_identity_clock_alarm_reply_do_mach_notify_dead_name_do_mach_notify_no_senders_do_mach_notify_port_deleted_do_mach_notify_send_once_do_seqnos_mach_notify_dead_name_do_seqnos_mach_notify_no_senders_do_seqnos_mach_notify_port_deleted_do_seqnos_mach_notify_send_once_environ_receive_samples_CallComponentDispatch_OpenDefaultComponent___keymgr_dwarf2_register_sections__cthread_init_routine_atexit_errno_exit_mach_init_routineamule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.app/Icon0000755000175000017500000000000011332327377021610 0ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/amule.rc0000644000175000017500000000026712050266603017166 0ustar l3onl3onamule ICON "amule.ico" convert ICON "convert.ico" // ADUNANZA BEGIN // Backport aMule SVN rev.10800 // #ifndef MSVC #ifndef _MSC_VER // ADUNANZA END #include #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/depcomp0000755000175000017500000005064312053222405017110 0ustar l3onl3on#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 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 # A tabulation character. tab=' ' # A newline character. nl=' ' 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" # 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 informations. 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## 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). ## - 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## 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. tr ' ' "$nl" < "$tmpdepfile" | ## 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. 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 -eq 0; then : else 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 # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 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 -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else 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 -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 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 -eq 0; then : else 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,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # 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.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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" = 0; then : else 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" 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" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: amule-adunanza-2012.1+2.3.1~dfsg1.orig/install-sh0000755000175000017500000003325612053222401017534 0ustar l3onl3on#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # 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. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # 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_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' 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 no_target_directory= 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 *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done 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 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; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi 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. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/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-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 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 eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob 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=$dstdir/_inst.$$_ rmtmp=$dstdir/_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` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob 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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: amule-adunanza-2012.1+2.3.1~dfsg1.orig/mkinstalldirs0000755000175000017500000000672212053222406020341 0ustar l3onl3on#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2009-04-28.21; # UTC # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: amule-adunanza-2012.1+2.3.1~dfsg1.orig/config.sub0000755000175000017500000010517612053222401017514 0ustar l3onl3on#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # 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. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # 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: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # 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 $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 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-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ 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*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -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 | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | 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 \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | 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 \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | 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 ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; 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-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | 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-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | 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-* \ | 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-unknown 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 ;; 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* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; 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 ;; hppa-next) os=-nextstep3 ;; 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 ;; i386-vsta | 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 ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-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 ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-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 ;; 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 | ppc-le | powerpc-little) 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 | ppc64-le | powerpc64-little) 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) 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 ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | 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 ;; 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 ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; 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 ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; 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 ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; 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 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First 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* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -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* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # 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 | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -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 ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -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 ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -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 ;; 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 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-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 ;; *-next) os=-nextstep3 ;; *-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-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: amule-adunanza-2012.1+2.3.1~dfsg1.orig/amulegui.xpm0000644000175000017500000002366410753565633020116 0ustar l3onl3on/* XPM */ static const char *amule[]={ "32 32 496 2", "Qt c None", ".i c #75777a", "eQ c #d2dfed", ".h c #83878c", ".A c #c8cacc", "f# c #c8daf1", ".# c #6f7377", "fO c #a9b8c9", "ft c #bfd9f7", "eB c #d5e4f3", ".j c #777b80", ".g c #7f8388", "ca c #612809", "fL c #cae1fd", ".B c #aab4bf", "bh c #777f89", "dG c #33373d", ".a c #737980", ".f c #6b7178", "d1 c #b0cbec", "eR c #b3cdee", "eh c #abc8eb", "dH c #acc9ec", "dp c #a6c4ea", "dc c #a9c8ed", ".k c #6f7780", "c1 c #a9c9f1", ".z c #899097", "cQ c #b2cdef", "cF c #cbdaec", "cs c #bed1e7", "a3 c #a4acb6", "fa c #c1d9f7", "cb c #b3c9e4", "aM c #819aba", "b2 c #a2bcdc", "ax c #8199b3", "bS c #b9cee8", ".e c #61676f", "aj c #8b949f", "bJ c #cfdff3", ".V c #707a86", "#5 c #818a94", "bv c #bed2ea", "#N c #7a8591", "bi c #b7cde7", "fu c #c3dcfb", "#w c #747f8c", "a4 c #b0c8e5", ".b c #717e8e", "aN c #aac3e2", "ay c #9ebadd", "fN c #a5bbd5", "ak c #abc4e4", "#6 c #b4cbe8", "#d c #647180", ".l c #727e8d", "#O c #a9c3e3", "#x c #a4bfe0", "#e c #a0bde1", ".W c #94b2d8", "fA c #91a8c2", ".d c #5c6672", "fM c #c9e0fd", ".c c #6d7f95", "eS c #b7d4f9", ".m c #728499", ".y c #455161", ".C c #778aa1", "fb c #bcd9fc", ".x c #556373", "fz c #86a0bf", "fv c #c1dcfd", ".n c #768eaa", "eC c #b1d2fa", "b1 c #6c819a", "bR c #6b7f98", "bI c #697e97", "bu c #667c97", "bg c #687d97", "a2 c #626c78", "aL c #58595b", ".w c #4d5c70", ".D c #758ead", "aw c #4d525a", "ai c #5b6572", ".U c #51657d", "#4 c #677c95", "#M c #657b95", "eT c #b6d6fe", "#v c #637992", "dC c #000000", "ar c #00cb58", "aG c #02de6d", "as c #166339", "ef c #171614", "aH c #1b814e", "ad c #313928", "d0 c #32373d", "dF c #32373e", "fG c #3f3330", "ah c #40464e", "dU c #414041", "dE c #45312a", ".t c #485e78", "a1 c #4a5057", "aI c #4b3655", "at c #4b4363", "ae c #4b4b48", ".u c #4b6079", "fK c #4e5257", ".v c #506178", "ag c #525558", ".T c #536f90", "a0 c #565c64", "fF c #572d16", "aX c #575254", "aq c #59827a", "dl c #5d2d0e", "aZ c #616164", "ac c #616166", "aY c #616568", "af c #625d5d", "cm c #632809", "aF c #636e6f", ".S c #637e9e", "c# c #642909", "fp c #64676b", "#c c #647a95", "fE c #652909", "aW c #656474", "#Y c #667992", "fD c #682b09", "#3 c #6888af", ".8 c #69819f", "#q c #6982a1", ".s c #6a88ac", "bf c #6a8db8", "ee c #6b6c6f", "#1 c #6b849d", "#u c #6b86a6", "#2 c #6c85a4", ".R c #6c88a9", "#G c #6c89ac", "#L c #6c89ad", "fH c #6d7072", "#t c #6d86a5", "ba c #6d8bad", "eZ c #6e310c", "## c #6e87a6", "#a c #6e88a6", "#. c #6e88a7", "c. c #6f7d94", ".9 c #6f88a7", "bC c #6f8aac", "bP c #6f8aad", "bo c #6f8bae", "dQ c #70320e", "#s c #7089a8", "#r c #708aa8", ".O c #708bab", "#K c #708cad", "b9 c #708cae", "ci c #708caf", "cx c #708db0", "cV c #708db1", "fg c #7091b7", "cl c #717e94", "#b c #718dae", "be c #718eb1", "c7 c #718eb2", "dh c #718fb3", "dv c #718fb4", "fi c #7190b7", ".Q c #728daf", "#J c #728eb0", "bH c #728fb2", "dO c #7290b4", "cL c #737f95", "d6 c #7390b5", "#I c #7391b4", "eo c #7391b6", "eF c #7392b6", "eW c #7392b7", "fy c #7392b8", "dx c #748198", "bG c #748eaf", "bQ c #748faf", "b0 c #7490b0", "bs c #7490b2", "bd c #7492b1", "bF c #7590b0", "br c #7592b3", "#H c #7594b9", "fh c #7594bb", "#0 c #7685a2", "bZ c #7691b1", "bE c #7691b2", "bD c #7691b3", "bt c #7694b9", "cM c #77380f", "bY c #7792b3", ".P c #7792b4", "bq c #7793b5", "ck c #7892b4", "c9 c #7893b4", "cj c #7893b5", "bp c #7893b7", "cy c #7894b6", "da c #793910", "bc c #798eb3", "cX c #7994b6", "cK c #7995b6", "cW c #7995b7", "c8 c #7a95b7", "di c #7a96b8", "d7 c #7a97b9", "#Z c #7b7999", "dw c #7b96b9", "dP c #7b97ba", "fm c #7c4d2d", "eY c #7c98ba", "ep c #7c98bb", "eX c #7c99bb", "bb c #7d8bb4", ".o c #7e9bbe", ".E c #809ec3", "fC c #833f14", ".7 c #84a3c9", "cP c #86461a", "#F c #86a4ca", "#p c #86a5cb", "fs c #878889", ".p c #87a9d3", ".F c #88abd6", "#X c #89aad1", ".N c #8babd2", "cY c #8e4a1a", "dD c #8e4d1e", "b# c #8eadd4", "bn c #8faed5", ".X c #8fb9ee", "bB c #90b0d6", "fP c #914c1b", "aJ c #916c3d", "bO c #91b0d7", "ab c #91b4de", "bX c #92b1d7", "b8 c #92b2d8", "aV c #92b7e0", "ch c #93b2d8", "fx c #93b5dd", ".G c #93baeb", "cw c #94b3d9", "d8 c #954e1d", "d. c #954f1d", "cJ c #95b4da", "c6 c #96b5db", "fB c #97511e", "fI c #979797", "aE c #97aadc", "dg c #97b6dc", "#7 c #97bff0", "au c #986d3c", "du c #98b7dc", "#P c #98c0f0", "ap c #99a4d9", "dN c #99b7dd", "d5 c #99b8dd", "#y c #99bfee", "cE c #9a5522", "en c #9ab8de", "db c #9b5724", "eE c #9bb9de", "eV c #9bb9df", "bK c #9bc6fa", "fl c #9c5420", "dT c #9c9691", "ff c #9cbbe0", "#f c #9cc1f0", "al c #9cc4f4", "bw c #9ec8fb", ".q c #9fc4f1", "bj c #9fc8fa", "fn c #a0a09e", "ez c #a0a09f", "aO c #a0c8f9", "a5 c #a0c8fa", "e4 c #a15821", "#g c #a1c6f3", "bT c #a1cafd", ".H c #a1cbfe", "az c #a2c8f8", "#z c #a3c7f5", "#h c #a3c9f6", "ct c #a3ccff", "#Q c #a4caf7", "cc c #a4cdff", "fj c #a55c25", "#i c #a5cbf9", "ei c #a5cefd", "dj c #a65d24", "fk c #a65d25", "#R c #a6ccfb", "cR c #a6cefe", "dV c #a7602a", "#A c #a7cdfb", "#j c #a7cdfc", "#8 c #a7cefd", "b3 c #a7cfff", "#S c #a8cefe", "#B c #a8cffe", "aP c #a8cfff", "#k c #a8d0ff", "c2 c #a9cffe", "#9 c #a9d0ff", ".Y c #a9d2ff", "ey c #aaaaa7", "dI c #aacffe", "dq c #aad0fe", ".2 c #aad1ff", "eq c #ab6026", ".3 c #abd1ff", "fT c #ac6328", ".4 c #acd1ff", "a6 c #acd2ff", "ev c #ad6228", "#l c #add1ff", "#m c #add2ff", "b4 c #add3ff", ".1 c #add4ff", "cr c #ae6227", "c0 c #ae6327", "#C c #aed2ff", ".Z c #aed7ff", ".I c #aed9ff", "bL c #afd2ff", "#T c #afd3ff", ".0 c #afd7ff", "aQ c #b0d3ff", "#U c #b0d4ff", "a. c #b1d4ff", "dr c #b1d5ff", "bx c #b2d4ff", "am c #b2d5ff", "eg c #b3b3b0", "fJ c #b3b3b2", "a7 c #b3d5ff", "aA c #b3d6ff", "eu c #b4682c", "aB c #b4d5ff", "aR c #b4d6ff", "ej c #b4d7ff", "e0 c #b5682a", "do c #b56f36", "aS c #b5d6ff", "d2 c #b5d7ff", ".r c #b5daff", "eK c #b67139", "e5 c #b68b67", "ex c #b6b6b0", "a8 c #b6d7ff", ".J c #b6e2ff", "cA c #b7692a", "bk c #b7d7ff", ".5 c #b7d8ff", "d# c #b86b2c", "cd c #b8d7ff", "by c #b8d8ff", ".K c #b8e1ff", "bU c #b9d8ff", "#n c #b9d9ff", "e3 c #ba6c2c", "b5 c #bad9ff", "ce c #bbd9ff", "#D c #bbdaff", "cG c #bcdaff", "#V c #bcdbff", "eJ c #bd6f2e", "dZ c #bdbdb6", "cT c #bddaff", "cS c #bddbff", "ew c #be7d3f", "c3 c #bedbff", "a# c #bedcff", "av c #bf5700", "dd c #bfdcff", "an c #bfddff", "dy c #c0712f", "dJ c #c0dcff", "dK c #c0ddff", ".L c #c0e3ff", "d3 c #c1dcff", "aC c #c1ddff", "eb c #c27739", "eD c #c2ddff", "ek c #c2deff", "fQ c #c37a31", "aT c #c3deff", "fc c #c3dfff", "a9 c #c4dfff", "bl c #c5dfff", "dk c #c67530", "ec c #c68338", "bz c #c6e0ff", "cz c #c77631", "e2 c #c77731", "bM c #c7e0ff", ".6 c #c7e4ff", "bV c #c8e1ff", "e6 c #c9c2b9", "b6 c #c9e2ff", "e# c #ca7b38", "fo c #cacac6", "cf c #cae2ff", "#o c #cae6ff", "cu c #cbe3ff", "fq c #ccccc7", "cH c #cce3ff", "#E c #cce7ff", ".M c #cce9ff", "eG c #cd813f", "ed c #cdae80", "c4 c #cde3ff", "fw c #cde4ff", "cq c #ce8240", "de c #cee4ff", "ds c #cee5ff", "dR c #cf874a", "dL c #cfe5ff", "#W c #cfe9ff", "d4 c #d0e6ff", "cp c #d18849", "el c #d1e6ff", "eU c #d2e6ff", "aa c #d2ebff", "cn c #d38b4b", "cD c #d38e52", "fS c #d48c38", "cZ c #d48d4e", "er c #d48e4f", "ea c #d49259", "dW c #d4b595", "eL c #d4cdc2", "fd c #d4e8ff", "ao c #d5ecff", "e. c #d79453", "cO c #d7995a", "e1 c #d89c47", "dz c #d89f6e", "aD c #d8eeff", "eH c #d99a61", "eI c #dba06b", "aU c #dbf0ff", "d9 c #dca25c", "co c #dca36c", "dB c #dcd6d1", "e7 c #dcdcda", "aK c #de7000", "dm c #deaa7d", "fr c #dfdfdb", "b. c #dff2ff", "cN c #e1af7c", "et c #e1b17e", "bm c #e1f3ff", "eA c #e3e3e0", "bA c #e3f4ff", "fR c #e49c3f", "cC c #e4b886", "dX c #e5dcd2", "bN c #e6f5ff", "f. c #e7e7e5", "bW c #e8f7ff", "eM c #e9e9e6", "e8 c #e9e9e7", "b7 c #e9f7ff", "cB c #ebc999", "cg c #ecf9ff", "dn c #edcfb5", "eP c #eeeeec", "cv c #eefaff", "es c #efd5a7", "e9 c #efefee", "cI c #f0fbff", "cU c #f1fcff", "dY c #f2f2f1", "c5 c #f2fcff", "df c #f3fdff", "dt c #f4fdff", "dM c #f5feff", "dS c #f6e7da", "em c #f6feff", "eN c #f7f7f6", "fe c #f8ffff", "eO c #f9f9f9", "dA c #ffffff", "QtQtQtQtQtQtQtQt.#.a.b.c.d.e.f.g.hQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQt.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.AQtQtQtQtQtQtQtQtQtQtQt", ".B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.VQtQtQtQtQtQtQtQtQtQtQt", ".W.X.Y.Z.0.1.2.2.3.4.5.6.7.8.9#.###a#b#c#dQtQtQtQtQtQtQtQtQtQtQt", "#e#f#g#h#i#j#k.2#l#m#n#o#p#q#r#s###t#u#v#wQtQtQtQtQtQtQtQtQtQtQt", "#x#y#z#i#A#B.2.4#C#C#D#E#F#G#H#I#J#K#L#M#NQtQtQtQtQtQtQtQtQtQtQt", "#O#P#Q#R#S.2.3#m#T#U#V#W#X#Y#Z#0#1#2#3#4#5QtQtQtQtQtQtQtQtQtQtQt", "#6#7#i#8#9.3#m#Ca.a.a#aaabacadaeafagahaiajQtQtQtQtQtQtQtQtQtQtQt", "akal#R#9.3#m#C#TamamanaoapaqarasatauavawaxQtQtQtQtQtQtQtQtQtQtQt", "ayaz#8.2.3#C#Ta.aAaBaCaDaEaFaGaHaIaJaKaLaMQtQtQtQtQtQtQtQtQtQtQt", "aNaOaP.3#m#TaQamaRaSaTaUaVaWaXaYaZa0a1a2a3QtQtQtQtQtQtQtQtQtQtQt", "a4a5#9a6#CaQama7a8a8a9b.b#babbbcbdbebfbgbhQtQtQtQtQtQtQtQtQtQtQt", "bibj.2#m#Ta.a7aRa8bkblbmbnbobpbqbrbsbtbubhQtQtQtQtQtQtQtQtQtQtQt", "bvbw.2#C#TbxaAaSbkbybzbAbBbCbDbEbFbGbHbIbhQtQtQtQtQtQtQtQtQtQtQt", "bJbK.2bLaQamaRa8bybybMbNbObP.PbEbFbQbHbRbhQtQtQtQtQtQtQtQtQtQtQt", "bSbTa6#Ta.a7aSa8bU#nbVbWbXbo.PbYbZb0bHb1bhQtQtQtQtQtQtQtQtQtQtQt", "b2b3b4aQamaAaSbkb5b5b6b7b8b9.P.PbEbFc.c#c#c#Qtcac#c#c#c#c#c#c#ca", "cbccb4a.amaRa8cdce#DcfcgchcicjckbEclcmcnc#Qtc#c#cocpcqcqcrc#caQt", "csctb4a.a7aSbkbU#D#DcucvcwcxcycjbYc#czcAc#c#cBcCcDcqcEc#c#caQtQt", "cF.Hb4amaRa8byb5#VcGcHcIcJcxcKcjcLcmcAcMcqcNcOcpcPc#c#caQtQtQtQt", "cQcR#TamaRbkbUcecScTcHcUcJcVcWcXc#c#cYcqcZcqc0c#caQtQtQtQtQtQtQt", "c1c2#Ua7a8bk#n#Dc3c3c4c5c6c7c8cXc9c#d.d#c0c0dadbc#caQtQtQtQtQtQt", "dcc2a.aRa8byb5cGdddddedfdgdhdicWc#c#djd#dkdldmdndoc#caQtQtQtQtQt", "dpdqdraSbkbU#DcSdddddsdtdudvdwdidxc#d#dydkdzdAdBdCdDc#dEdFdFdGQt", "dHdIdraSbk#n#DcSdJdKdLdMdNdOdPdic#dQczcqczdRdSdTdUdVdWdXdYdZd0dG", "d1dqamd2byb5#Vc3d3aCd4dMd5d6dPd7c#d8cZd9e.e#dReaebecedeeefdYegdF", "eheieja8byb5cSddaCekelemeneoepdPc#eqeresetcZe#euevewexeyezdYeAdF", "eBeC#9ej#ncGcSddeDekelemeEeFepdPc#d.eGeHeIcZe#eJeveKeLeMeNeOePdF", "QteQeReSeT.5#VaCaTaTeUemeVeWeXeYc#eZe0eGeGe1e2e3e4e5e6e7e8e9f.dF", "QtQtQtQtf#fafbcGanfcfdfefffgfhfic#dac#fjfjfkfjflfmfnfofpfqfrfsdF", "QtQtQtQtQtQtQtftfufvfwcUfxfyfzfAeZcYfBfCfDfEfFfGdFfHfIfJfKdFdFdG", "QtQtQtQtQtQtQtQtQtQtfLfMfNfOQtQteZfPfQfRfSfTfEQtdGdFdFdFdFdGQtQt"}; amule-adunanza-2012.1+2.3.1~dfsg1.orig/configure.in0000644000175000017500000005230112050266603020042 0ustar l3onl3on# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. # # This file is part of the aMule Project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # Any parts of this program derived from the xMule, lMule or eMule project, # or contributed by third-party developers are copyrighted by their # respective authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # # ADUNANZA BEGIN # AC_INIT([aMule],[SVN],[admin@amule.org]) # AC_INIT([aMule], [2.3.1], [admin@amule.org]) AC_INIT([aMuleAdunanzA], [2.3.1], [admin@adunanza.net]) # ADUNANZA END AM_INIT_AUTOMAKE m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES]) AC_PREREQ(2.59) AC_CONFIG_SRCDIR([src/amule.cpp]) AC_CONFIG_HEADERS([config.h]) AM_MAINTAINER_MODE dnl Check host system. MULE_CHECK_SYSTEM dnl Checks for programs. dnl Workaround for these checks may alter CFLAGS and CXXFLAGS, especially if they were empty MULE_BACKUP([CFLAGS]) MULE_BACKUP([CXXFLAGS]) MULE_BACKUP([BUILD_CFLAGS]) AC_PROG_CXX AC_PROG_CXXCPP AC_PROG_CC AC_PROG_CPP AS_IF([test "$cross_compiling" = yes], [AC_PROG_BUILD_CC], [BUILD_CC="$CC" ; BUILD_EXEEXT=$EXEEXT]) MULE_RESTORE([CFLAGS]) MULE_RESTORE([CXXFLAGS]) MULE_RESTORE([BUILD_CFLAGS]) AC_PROG_AWK AC_PROG_EGREP AC_PROG_MAKE_SET AC_PROG_LEX AC_PROG_INSTALL AC_PROG_RANLIB AC_PROG_YACC dnl Find the right ranlib, even when cross-compiling dnl And for some other tools for cross compilation AC_CHECK_TOOL(RANLIB, ranlib) AC_CHECK_TOOL(STRIP, strip) AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(LD, ld) dnl Selectable components MULE_ARG_ENABLE([monolithic], [yes], [disable building of the monolithic aMule app], [MONOLITHIC]) MULE_ARG_ENABLE([amule-daemon], [no], [compile aMule daemon version], [AMULE_DAEMON]) MULE_ARG_ENABLE([amulecmd], [no], [compile aMule command line client], [COMPILE_CMD]) MULE_ARG_ENABLE([webserver], [no], [compile aMule WebServer], [WEB]) MULE_ARG_ENABLE([amule-gui], [no], [compile aMule remote GUI], [AMULE_GUI]) MULE_ARG_ENABLE([cas], [no], [compile C aMule Statistics], [CAS]) MULE_ARG_ENABLE([wxcas], [no], [compile aMule GUI Statistics], [WXCAS]) MULE_ARG_ENABLE([ed2k], [yes], [don't compile aMule ed2k links handler], [ED2K]) MULE_ARG_ENABLE([alc], [no], [compile aMuleLinkCreator GUI version], [ALC]) MULE_ARG_ENABLE([alcc], [no], [compile aMuleLinkCreator for console], [ALCC]) MULE_ARG_ENABLE([xas], [no], [install xas XChat2 plugin], [XAS]) MULE_ARG_ENABLE([fileview], [no], [compile aMule file viewer for console (EXPERIMENTAL)], [FILEVIEW]) MULE_ARG_ENABLE([plasmamule], [no], [compile aMule plasma applet and engine]) # Run all the tests with static linkage if we want a statically linked binary MULE_ARG_ENABLE([static], [no], [produce a statically linked executable]) MULE_IF_ENABLED([static], [MULE_APPEND([LDFLAGS], [-static])]) KDE_CONFIG_OPTIONS QT_CONFIG_OPTIONS # ADUNANZA BEGIN # Aggiunta per patch NSLU2 # AC_ARG_ENABLE( # [adu-nslu2], # [AS_HELP_STRING( # [--enable-adu-nslu2], # [enable AdunanzA ad-hoc patches for supported NSLU2 embedded systems])], # [ENABLE_ADUNSLU2=$enableval], [ENABLE_ADUNSLU2=no]) # ADUNANZA END # Default is yes, because they're most likely compatible. # However, this is only used when cross-compiling. AC_ARG_WITH( [gnu-malloc], [AS_HELP_STRING([--without-gnu-malloc], [Don't assume that we use GNU libc compatible malloc/realloc when cross-compiling])], [gnumalloc=$withval], [gnumalloc=yes]) # Checking for libs before all other stuff to break # configure as soon as possible in case of a missing one # to avoid losing too much time # Check for zlib MULE_IF_ENABLED_ANY([monolithic, amule-daemon, amulecmd, webserver, amule-gui], [MULE_CHECK_ZLIB([1.1.4],, [AC_MSG_ERROR([zlib >= 1.1.4 is required for aMule])])]) MULE_IF_ENABLED([cas], [ # Check for gd MULE_CHECK_GDLIB([2.0.0], [ CAS_DEFS="-D__GD__" MULE_PREPEND([GDLIB_LIBS], [-lgd]) ], [CAS_DEFS=]) AS_IF([test -z "$CAS_DEFS"], [MULE_WARNING( [gd-lib >= 2.0.0, or a functional gd.h (from gd-devel) not found. Please check that gdlib-config is in your default path, check out LD_LIBRARY_PATH or equivalent variable. Or this might also be that your gdlib-config has other name. Please try again with --with-gdlib-config=/usr/bin/gdlib-config (replace /usr/bin/gdlib-config with a valid path to your gdlib-config). If you use compiled packages check if you have devel pack installed. To download the latest version check http://www.boutell.com/gd for sources.])]) ]) AC_SUBST([CAS_DEFS])dnl MULE_IF_ENABLED([webserver], [MULE_CHECK_LIBPNG([1.2.0], [AMULEWEB_DEFS="-DWITH_LIBPNG"], [ MULE_WARNING( [libpng >= 1.2.0 not found. amuleweb will be compiled but file download progress bar images will NOT be generated.]) ]) ]) AC_SUBST([AMULEWEB_DEFS])dnl # Check for perl File::Copy AC_MSG_CHECKING([for File::Copy]) AS_IF([perl -e "require File::Copy" 2>/dev/null], [AC_MSG_RESULT([ok])], [MULE_WARNING( [File::Copy perl module is required by the mldonkey_importer script. If you want to use this script please install File::Copy from CPAN.])]) # Check if we need to install skins MULE_IF_ENABLED_ANY([monolithic, amule-gui], [INSTALL_SKINS=yes], [INSTALL_SKINS=no]) # Check for GeoIP (required for IP2Country capability) MULE_IF_ENABLED_ANY([monolithic, amule-gui], [MULE_CHECK_GEOIP]) # Check for wx MULE_IF_ENABLED_ANY([monolithic, amule-daemon, amule-gui, amulecmd, webserver, alc, alcc, wxcas, fileview], [WX_CONFIG_OPTIONS WX_STANDARD_OPTIONS([toolkit,wxshared,wxdebug,wxversion]) # Force using a static wxWidgets library if the executable is to be linked statically. MULE_IF_ENABLED([static], [WX_SHARED=0]) # Force using a unicode build of the library MULE_IF_ENABLED_ANY([monolithic, amule-daemon, amule-gui, amulecmd, webserver, fileview], [WX_UNICODE=1]) DEBUG=$WX_DEBUG WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS WX_CONFIG_CHECK([2.8.12], [wxWin=1],,, [$WXCONFIG_FLAGS]) AS_IF([test "$wxWin" != 1], [AC_MSG_ERROR([ wxWidgets must be installed on your system but wx-config script couldn't be found. Please check that wx-config is in path or specified by --with-wx-config=path flag, the directory where wxWidgets libraries are installed (returned by 'wx-config --libs' command) is in LD_LIBRARY_PATH or equivalent variable and wxWidgets version is 2.8.12 or above. ])] ) AS_IF([test "${WX_VERSION_FULL}" = "2.9.0"], [AC_MSG_ERROR([ This version of wxWidgets is known to not work with aMule. Please upgrade to a newer version.] )] ) WX_DETECT_STANDARD_OPTION_VALUES # We also need wxBase WX_LIBS=`$WX_CONFIG_WITH_ARGS --libs adv,core,net` WXBASE_LIBS=`$WX_CONFIG_WITH_ARGS --libs net` WXBASE_CPPFLAGS="$WX_CPPFLAGS -DwxUSE_GUI=0" MULERCFLAGS=`$WX_CONFIG_WITH_ARGS --cflags | $AWK ['{ for (i = 1; i <= NF; i++) if (index($i, "-I") != 1 && index($i, "-D") != 1) $i = ""; print }']` ]) AC_SUBST([WXBASE_LIBS])dnl AC_SUBST([WXBASE_CPPFLAGS])dnl MULE_IF_ENABLED_ANY([monolithic, amule-gui, wxcas, alc], [AS_IF([test "${WX_PORT}" = base], [AC_MSG_ERROR([ The selected components need a wxWidgets library with GUI, but your installation is base-only. Please install a GUI enabled version of wxWidgets and then retry. ])] )]) dnl Resource compiler for W32 AC_ARG_VAR([RC], [Resource Compiler])dnl AC_ARG_VAR([RCFLAGS], [Resource Compiler Flags])dnl AS_IF([test ${SYS:-unknown} = win32], [AC_CHECK_TOOL([RC], [windres], [:])]) # Check for libupnp MULE_ARG_ENABLE([upnp], [yes], [do not compile UPnP code]) MULE_IF_ENABLED_ANY([monolithic, amule-daemon],, [MULE_ENABLEVAR([upnp])=no]) MULE_IF_ENABLED([upnp], [ LIBUPNP_CHECK( [1.6.6], [MULE_APPEND([LIBUPNP_CPPFLAGS], [-DENABLE_UPNP=1])], [MULE_ENABLEVAR([upnp])=disabled MULE_WARNING([UPnP code has been disabled because ${libupnp_error}.])] ) ])dnl # ADUNANZA BEGIN # NSLU2 ad-hoc code MULE_ARG_ENABLE([adu-nslu2], [no], [enable AdunanzA ad-hoc patches for supported NSLU2 embedded systems]) MULE_IF_ENABLED([adu-nslu2], [ENABLE_ADUNSLU2=1]) MULE_ARG_ENABLE([mrhydeexp], [no], [enable Mr Hyde s experiments]) MULE_IF_ENABLED([mrhydeexp], [ENABLE_MRHYDEEXP=1]) # ADUNANZA END # Check for Crypto++ MULE_IF_ENABLED_ANY([monolithic, amule-daemon, amule-gui, fileview], [MULE_CHECK_CRYPTOPP([5.1], [ # Check for CryptoPP >= 5.5 AS_IF([test $CRYPTOPP_VERSION_NUMBER -ge "5005000"], [MULE_APPEND([CRYPTOPP_CPPFLAGS], [-D__WEAK_CRYPTO__])]) ], [ AC_MSG_ERROR([ Could not find crypto++ header file "$cryptopp_file_with_version". Please try again with --with-crypto-prefix=/my_crypto_prefix (replace /my_crypto_prefix with a valid path to your crypto++ installation directory).]) ])]) dnl Checks requiring C++ MULE_IF_ENABLED_ANY([monolithic, amule-daemon, amule-gui, amulecmd, webserver, ed2k, alc, alcc, wxcas, fileview], [AC_LANG_PUSH([C++]) MULE_CHECK_GLIBCXX MULE_IF_ENABLED_ANY([monolithic, amule-daemon, alc, alcc], [MULE_CHECK_WX_SUPPORTS_LARGEFILE]) # Check if the compiler is broken, wrt. exceptions. MULE_CHECK_EXCEPTIONS MULE_CHECK_CXXABI AC_LANG_POP([C++]) ]) # Ok, we have all needed libs, now checking for other stuff AS_IF([test "$LEX" = "flex"], [MULE_CHECK_FLEX_EXTENDED], [HAVE_FLEX_EXTENDED=no]) # Flush standard test results for speeding cache AC_CACHE_SAVE dnl ------------------------------------------------------------------------------- dnl Start of autoscan stuff dnl ------------------------------------------------------------------------------- # Checks for header files. AC_FUNC_ALLOCA AC_HEADER_DIRENT AC_HEADER_STDC AC_CHECK_HEADERS([argz.h arpa/inet.h fcntl.h inttypes.h langinfo.h libintl.h limits.h locale.h malloc.h mntent.h netdb.h netinet/in.h stddef.h nl_types.h stdint.h stdio_ext.h stdlib.h string.h strings.h sys/ioctl.h sys/mntent.h sys/mnttab.h sys/mount.h sys/param.h sys/resource.h sys/select.h sys/socket.h sys/statvfs.h sys/time.h sys/timeb.h sys/types.h unistd.h errno.h signal.h]) AC_HEADER_SYS_WAIT # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL AC_C_CONST AC_C_INLINE AC_TYPE_MODE_T AC_TYPE_OFF_T AC_TYPE_SIZE_T AC_HEADER_TIME AC_STRUCT_TM AC_TYPE_UID_T AC_C_VOLATILE AC_CHECK_TYPES([ptrdiff_t]) # Checks for library functions. AC_FUNC_CLOSEDIR_VOID AC_PROG_GCC_TRADITIONAL AC_FUNC_FORK AS_IF([test x$SYS != xwin32], [ AC_FUNC_GETMNTENT AC_FUNC_LSTAT AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK ]) AC_FUNC_MEMCMP AC_FUNC_SELECT_ARGTYPES AC_FUNC_SETVBUF_REVERSED AC_TYPE_SIGNAL AC_FUNC_STAT AC_FUNC_STRFTIME AC_FUNC_STRTOD AC_FUNC_VPRINTF dnl Some other functions that worth checking deeper: dnl AC_FUNC_CLOSEDIR_VOID dnl AC_FUNC_MEMCMP dnl AC_FUNC_MMAP dnl AC_FUNC_STAT dnl AC_FUNC_STRTOD dnl AC_FUNC_SETVBUF_REVERSED dnl Anyways, do we actually USE them? AS_IF([test $cross_compiling = yes -a $gnumalloc = yes], [ MULE_WARNING([configure cannot check whether malloc() and realloc() are GNU libc compatible. You have to be ABSOLUTELY sure that they are, otherwise run configure with the --without-gnu-malloc switch.]) ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes ]) AC_FUNC_MALLOC AC_FUNC_REALLOC AC_CHECK_FUNCS([__argz_count __argz_next __argz_stringify endpwent floor ftruncate getcwd gethostbyaddr gethostbyname gethostname getpass gettimeofday inet_ntoa localeconv memmove mempcpy memset nl_langinfo pow select setlocale socket sqrt stpcpy strcasecmp strchr strcspn strdup strerror strncasecmp strstr strtoul sigaction]) #------------------------------------------------------------------------------- # End of autoscan stuff #------------------------------------------------------------------------------- dnl dnl autoscan has missed these ones. dnl AC_CHECK_FUNCS([mkdir getrlimit setrlimit getopt_long]) dnl This must be *before* MULE_CHECK_NLS MULE_IF_ENABLED_ANY([monolithic, amule-daemon], [MULE_CHECK_MMAP]) MULE_BACKUP([CPPFLAGS]) MULE_APPEND([CPPFLAGS], [-D_XOPEN_SOURCE=600]) AC_FUNC_STRERROR_R MULE_RESTORE([CPPFLAGS]) # Look for a way to preallocate disk space for files. MULE_IF_ENABLED_ANY([monolithic, amule-daemon], [MULE_CHECK_FALLOCATE]) # Checking Native Language Support dnl Sets gettext version. dnl AM_GNU_GETTEXT_VERSION *must not* be moved away from configure.in! AM_GNU_GETTEXT_VERSION(0.11.5) MULE_CHECK_NLS # Check for bfd.h (to have proper backtraces without using wxExecute) MULE_CHECK_BFD MULE_CHECK_EXECINFO # Flush standard test results for speeding cache AC_CACHE_SAVE # Other tests # aMule options MULE_COMPILATION_FLAGS # autoconf >= 2.60 already defines ${docdir}, but we always need it. AC_MSG_CHECKING([for docdir]) AS_IF([test -z "$docdir"], [docdir="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}"]) AC_SUBST([docdir])dnl AC_MSG_RESULT([$docdir]) # Try to set the SVN checkout-date AC_MSG_CHECKING([for SVNDATE]) if test -f "$srcdir/.svn-revision" # SVNDATE for tarballs then svndate="rev. `cat $srcdir/.svn-revision`" elif test -d $srcdir/.svn # SVNDATE for svn then svndate="rev. `svnversion $srcdir | sed -e 's/[[0-9]][[0-9]]*:\(.*\)/\1/' -e 's/\([[0-9]][[0-9]]*\).*/\1/'`" fi AC_MSG_RESULT(${svndate:-None required}) AS_IF([test -n "$svndate"], [ AC_DEFINE_UNQUOTED([SVNDATE], ["$svndate"], [The checkout date or svn revision number.]) MULE_ADDFLAG([RC], [-D__PRERELEASE__]) ]) AC_SUBST([SVNDATE], [$svndate])dnl dnl Set up the denoiser MULE_DENOISER MULE_IF_ENABLED([plasmamule], [PLASMAMULE_CHECKS]) AM_CONDITIONAL(SYS_WIN32, test x$SYS = xwin32) AM_CONDITIONAL(NEED_RC, test x$SYS = xwin32 -a "$RC" != ":") AM_CONDITIONAL(NEED_CORESERVICES, test x$SYS = xdarwin) AM_CONDITIONAL(COMPILE_NLS, test x$USE_NLS = xyes) AM_CONDITIONAL(GENERATE_FLEX_HEADER, test x$HAVE_FLEX_EXTENDED = xyes) AM_CONDITIONAL(INSTALL_SKINS, test x$INSTALL_SKINS = xyes) AM_CONDITIONAL(PLASMAMULE, test MULE_IS_ENABLED([plasmamule])) # ADUNANZA BEGIN AM_CONDITIONAL(ENABLE_ADUNSLU2, test MULE_IS_ENABLED([adu-nslu2])) AM_CONDITIONAL(ENABLE_MRHYDEEXP, test MULE_IS_ENABLED([mrhydeexp])) # ADUNANZA END AM_CONDITIONAL([COMPILE_LIB_COMMON], [test MULE_IS_ENABLED_ANY([monolithic, amule-daemon, amulecmd, webserver, amule-gui, fileview])]) AM_CONDITIONAL([COMPILE_LIB_EC], [test MULE_IS_ENABLED_ANY([monolithic, amule-daemon, amulecmd, webserver, amule-gui])]) # Check for readline library MULE_IF_ENABLED_ANY([amulecmd, webserver], [VL_LIB_READLINE]) AS_IF([test ${PLASMAMULE:-no} = yes], [PLASMAMULE_CHECKS]) # DO NOT MOVE UP... THERE'S A REASON TO BE HERE!! MULE_CHECK_CCACHE dnl dnl Generate the Makefiles dnl AC_CONFIG_FILES([Makefile docs/Makefile docs/man/Makefile intl/Makefile src/Makefile src/pixmaps/Makefile src/pixmaps/flags_xpm/Makefile src/libs/Makefile src/libs/ec/Makefile src/libs/ec/cpp/Makefile src/libs/common/Makefile src/utils/Makefile src/utils/aLinkCreator/Makefile src/utils/aLinkCreator/docs/Makefile src/utils/aLinkCreator/src/Makefile src/utils/cas/Makefile src/utils/cas/docs/Makefile src/utils/fileview/Makefile src/utils/plasmamule/Makefile src/utils/wxCas/Makefile src/utils/wxCas/docs/Makefile src/utils/wxCas/src/Makefile src/utils/xas/Makefile src/utils/xas/autostart-xas src/utils/xas/docs/Makefile src/skins/Makefile src/webserver/Makefile src/webserver/src/Makefile src/webserver/default/Makefile unittests/Makefile unittests/muleunit/Makefile unittests/tests/Makefile]) dnl dnl autoscan has missed these, i wonder why... dnl AC_CONFIG_FILES([po/Makefile.in Compilation.flags]) AS_IF([test x$SYS = xwin32], [AC_CONFIG_FILES([version.rc])]) AC_OUTPUT AS_IF([test -n "$svndate"], [SVN_REVISION=" ($svndate)"], [SVN_REVISION=]) echo echo echo " Configure script has finished system check." echo # ADUNANZA BEGIN # echo " Configured aMule ${PACKAGE_VERSION}${SVN_REVISION} for '${host}'." echo " Configured aMule ${PACKAGE_VERSION}${SVN_REVISION} (AdunanzA mod) for '${host}'." # ADUNANZA END echo echo " aMule enabled options:" echo echo " **** aMule Core ****" echo " Prefix where aMule should be installed? ${prefix:-none}" echo " Should aMule be compiled with i18n support? ${USE_NLS:-no}" echo " Should aMule be compiled in debug mode? MULE_STATUSOF([debug])" echo " Should aMule be compiled with profiling? MULE_STATUSOF([profile])" echo " Should aMule be compiled with optimizations? MULE_STATUSOF([optimize])" echo " Should aMule be compiled with UPnP support? MULE_STATUSOF([upnp])" echo " Should aMule be compiled with IP2country support? MULE_STATUSOF([geoip])" echo " Should aMule monolithic application be built? MULE_STATUSOF([monolithic])" echo " Should aMule daemon version be built? MULE_STATUSOF([amule-daemon])" echo " Should aMule remote gui be built? MULE_STATUSOF([amule-gui])" echo " Crypto++ library/headers style? ${CRYPTOPP_STYLE:-not found}" echo echo " **** aMule TextClient ****" echo " Should aMule Command Line Client be built? MULE_STATUSOF([amulecmd])" echo echo " **** aMule WebServer ****" echo " Should aMule WebServer be built? MULE_STATUSOF([webserver])" echo echo " **** aMule ED2K Links Handler ****" echo " Should aMule ED2K Links Handler be built? MULE_STATUSOF([ed2k])" echo echo " **** aMuleLinkCreator ****" echo " Should aMuleLinkCreator GUI version (alc) be built? MULE_STATUSOF([alc])" echo " Should aMuleLinkCreator for console (alcc) be built? MULE_STATUSOF([alcc])" echo echo " **** aMule Statistics ****" echo " Should C aMule Statistics (CAS) be built? MULE_STATUSOF([cas])" echo " Should aMule GUI Statistics (wxCas) be built? MULE_STATUSOF([wxcas])" echo " Should xas XChat2 plugin be installed? MULE_STATUSOF([xas])" echo " Should plasmaMule plasma-applet be build? MULE_STATUSOF([plasmamule])" echo echo " **** General Libraries and Tools ****" echo " Should ccache support be enabled? MULE_STATUSOF([ccache])" echo " Libraries aMule will use to build:" MULE_IF_ENABLED_ANY([monolithic, amule-daemon, amule-gui, amulecmd, webserver, alc, alcc, wxcas, fileview], [ wxinfo="$WX_PORT" AS_IF([test $WX_DEBUG -eq 1], [wxinfo="$wxinfo,debug"]) AS_IF([test $WX_SHARED -eq 1], [wxinfo="$wxinfo,shared"], [wxinfo="$wxinfo,static"]) echo " wxWidgets ${WX_VERSION_FULL} ($wxinfo)" ]) MULE_IF_ENABLED_ANY([monolithic, amule-daemon, amule-gui, fileview], [echo " crypto++ ${CRYPTOPP_VERSION_STRING} (${CRYPTOPP_STYLE}, in ${CRYPTOPP_PREFIX})"]) MULE_IF_ENABLED([upnp], [ AS_IF([test -n "$with_libupnp_prefix"], [libupnp_place=" (in $with_libupnp_prefix)"]) echo " libupnp ${LIBUPNP_VERSION:-Not detected}${libupnp_place:-}" ]) if test ${enable_nls:-yes} = yes; then AS_IF([test x$USE_NLS = xno], [libintl_found="Not detected"], [AS_IF([test x$USE_INCLUDED_LIBINTL = xyes], [libintl_found="included"], [libintl_found="system"])]) echo " libintl $libintl_found" fi MULE_IF_ENABLED([geoip], [AS_IF([test -z "${with_geoip_headers:-}${with_geoip_lib:-}"], [geoip_style=system], [geoip_style=user]) MULE_IF_ENABLED_ANY([monolithic, amule-gui], [echo " libGeoIP ${geoip_style}"])]) MULE_IF_ENABLED([webserver], [echo " libpng ${LIBPNG_VERSION:-Not detected}"]) MULE_IF_ENABLED([cas], [echo " libgd ${GDLIB_VERSION:-Not detected}"]) MULE_IF_ENABLED_ANY([monolithic, amule-daemon, amulecmd, webserver, amule-gui], [echo " zlib ${ZLIB_VERSION:-Not detected}"]) # ADUNANZA BEGIN MULE_IF_ENABLED_ANY([adu-nslu2], [echo " AdunanzA NSLU2 patch ***ENABLED***"]) MULE_IF_ENABLED_ANY([mrhydeexp], [echo " Mr Hyde Experiments ***ENABLED***"]) # ADUNANZA END MULE_IF_ENABLED([plasmamule], [echo " qt-moc ${QT_MOC} ${QT_MOC_VERSION}" echo " qt-core-libs ${QT_CORE_LIBS}" echo " qt-gui-libs ${QT_GUI_LIBS}" echo " kde4-config ${KDE4_CONFIG} (${KDE_CONF_VER})" echo " kde-headers ${KDE_HEADER_DIR}" echo " kde-services-path ${KDE_SERVICE_PATH}" echo " kde-module-path ${KDE_MODULE_PATH}" echo " kde-icon-path ${KDE_ICON_PATH}" echo " kde-mime-path ${KDE_MIME_PATH}" echo " kde-applinks-path ${KDE_APPLNK_PATH}" ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/acinclude.m40000644000175000017500000005644512050266603017737 0ustar l3onl3on# -*- Autoconf -*- # This file is part of the aMule Project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # Any parts of this program derived from the xMule, lMule or eMule project, # or contributed by third-party developers are copyrighted by their # respective authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # m4_pattern_forbid(MULE_)dnl Check for unexpanded *MULE_* macros m4_pattern_allow(AMULE_)dnl Allow the *AMULE_* names m4_pattern_forbid(__mule_)dnl Check for unexpanded internal macros # -------------------- # # Common useful macros # # -------------------- # dnl MULE_APPEND(VARNAME, VALUE) AC_DEFUN([MULE_APPEND], [$1="$$1 $2"]) dnl MULE_PREPEND(VARNAME, VALUE) AC_DEFUN([MULE_PREPEND], [$1="$2 $$1"]) dnl MULE_ADDFLAG(FLAGTYPE, VALUE) AC_DEFUN([MULE_ADDFLAG], [MULE_APPEND([MULE[]$1[]FLAGS], [$2])]) dnl MULE_ADDCCXXFLAG(VALUE) AC_DEFUN([MULE_ADDCCXXFLAG], [ MULE_ADDFLAG([C], [$1]) MULE_ADDFLAG([CXX], [$1]) ]) dnl MULE_BACKUP(VAR) AC_DEFUN([MULE_BACKUP], [mule_backup_$1="$$1"]) dnl MULE_RESTORE(VAR) AC_DEFUN([MULE_RESTORE], [$1="$mule_backup_$1"]) # ------------------- # # Issuing diagnostics # # ------------------- # # ----------------------------------------------------------------------------- # __mule_print_final_warning(section, condition, message) # ----------------------------------------------------------------------------- m4_define([__mule_print_final_warning], [m4_divert_push($1)dnl if test [$2]; then cat <<_MULEEOT m4_pushdef([__mule_Prefix1], [* ])dnl m4_pushdef([__mule_Prefix], [ ])dnl m4_foreach([__mule_Line], m4_quote(m4_split([$3], [ ])), [m4_text_wrap(m4_defn([__mule_Line]), __mule_Prefix, __mule_Prefix1) m4_define([__mule_Prefix1], __mule_Prefix)dnl ])[]dnl m4_popdef([__mule_Prefix])dnl m4_popdef([__mule_Prefix1])dnl _MULEEOT fi m4_divert_pop()]) dnl --------------------------------------------------------------------------- dnl MULE_WARNING(MESSAGE) dnl dnl Works like AC_MSG_WARN(), but the warning will be reproduced at the end of dnl the configure run. An empty line is prepended at the final output and a dnl newline is appended for free. dnl --------------------------------------------------------------------------- m4_ifndef([_MULE_WARNINGS],[ m4_define([_m4_divert(_MULE_WARNINGS)], m4_incr(_m4_divert([BODY])))]) m4_define([_MULE_WARNCOUNT], [0]) m4_divert_push(_MULE_WARNINGS)dnl if test ${_mule_has_warnings:-no} = yes; then echo "" echo "" echo " *** Warnings during configuration ***" fi m4_divert_pop()dnl m4_define([MULE_WARNING], [AC_MSG_WARN( m4_pushdef([__mule_Prefix], [ ])dnl m4_foreach([__mule_Line], m4_quote(m4_split([$1], [ ])), [ m4_text_wrap(m4_defn([__mule_Line]), __mule_Prefix)])[]dnl m4_popdef([__mule_Prefix])dnl ) _mule_warning_[]_MULE_WARNCOUNT[]=yes _mule_has_warnings=yes __mule_print_final_warning([_MULE_WARNINGS], [${_mule_warning_]_MULE_WARNCOUNT[:-no} = yes], [$1])dnl m4_define([_MULE_WARNCOUNT], incr(_MULE_WARNCOUNT))]) dnl --------------------------------------------------------------------------- dnl MULE_DEPRECATED(OLDFLAG [, NEWFLAG]) dnl dnl Marks OLDFLAG as deprecated and produces an appropriate warning. If NEWFLAG dnl is specified and is unset the value of OLDFLAG is assigned to NEWFLAG (i.e. dnl if the user specified both OLDFLAG and NEWFLAG, NEWFLAG takes precedence; dnl if only OLDFLAG is specified it will be redirected to NEWFLAG). dnl dnl There should be no AC_ARG_* for the deprecated flag, and if the old flag is dnl deprecated in favour of a new one, MULE_DEPRECATED *MUST* precede the dnl AC_ARG_* definition of the new flag (otherwise redirection may not work). dnl --------------------------------------------------------------------------- m4_define([_MULE_DEPRECATIONWARNINGS], [incr(_MULE_WARNINGS)]) m4_define([__mule_display_option_name], [m4_if(m4_substr([$1], 0, 1), [-],, [--])m4_bpatsubst([$1], [_], [-])]) m4_define([__mule_ac_option_name], [m4_bpatsubst(m4_bpatsubst(m4_bpatsubst(m4_bpatsubst([$1], [^-+], []), [-], [_]), [^disable], [enable]), [^without], [with])]) m4_define([MULE_DEPRECATED], [if test "${__mule_ac_option_name([$1])+set}" = "set"; then _mule_has_warnings=yes m4_ifvaln([$2], [ if test "${__mule_ac_option_name([$2]):-unset}" = "unset"; then __mule_ac_option_name([$2])=$__mule_ac_option_name([$1]) fi])fi __mule_print_final_warning([_MULE_DEPRECATIONWARNINGS], ["${]__mule_ac_option_name([$1])[+set}" = set], __mule_display_option_name([$1])[ is now deprecated and ]m4_ifval([$2], [might be removed in the future without further notice. Please use ]__mule_display_option_name([$2])[ instead.], [not supported anymore.]))]) # ----------------- # # Argument handling # # ----------------- # m4_define([__mule_arg_default], [__mule_arg_[]m4_translit([$1], [-], [_])[]_default]) m4_define([__mule_arg_value], [${enable_[]m4_translit([$1], [-], [_])[]:-[]__mule_arg_default([$1])[]}]) dnl --------------------------------------------------------------------------- dnl MULE_ARG_ENABLE(FEATURE, DEFAULT-VALUE, HELP-STRING [, AUTOMAKE-CONDITIONAL]) dnl dnl Wrapper around AC_ARG_ENABLE() that supports automatically setting up a dnl conditional variable for automake, remembering default value for dnl conditionals and supplying the help string based on the default value (i.e. dnl it produce "--enable-FEATURE HELP-STRING" if the default is no, and dnl "--disable-FEATURE HELP-STRING" if the default is yes. The default value dnl *MUST* be either `yes' or `no'. dnl --------------------------------------------------------------------------- m4_define([MULE_ARG_ENABLE], [m4_if([$2], [yes],, [m4_if([$2], [no],, [m4_fatal([Default value must be either `yes' or `no'!])])])dnl m4_define(__mule_arg_default([$1]), [$2])dnl AC_ARG_ENABLE([$1], [AS_HELP_STRING(m4_if([$2], [yes], [--disable-$1], [--enable-$1]), [$3])]) m4_ifvaln([$4], [AM_CONDITIONAL([$4], [test ]__mule_arg_value([$1])[ = yes])])]) dnl --------------------------------------------------------------------------- dnl MULE_IS_ENABLED(FEATURE) dnl dnl Used in shell conditionals, tests whether the named feature is enabled or dnl not, considering also the default value. FEATURE *must* have been set up dnl using MULE_ARG_ENABLE(). dnl --------------------------------------------------------------------------- m4_define([MULE_IS_ENABLED], [m4_ifdef(__mule_arg_default([$1]), __mule_arg_value([$1])[ = yes], [m4_fatal([Unknown feature `$1'!])])]) m4_define([MULE_IS_ENABLED_ANY], [__mule_if_multi([$1], [-o])]) m4_define([MULE_IS_ENABLED_ALL], [__mule_if_multi([$1], [-a])]) dnl --------------------------------------------------------------------------- dnl MULE_ENABLEVAR(FEATURE) dnl dnl Expands to the name of the shell variable holding the enabled/disabled dnl status of FEATURE. FEATRUE *must* have been set up using MULE_ARG_ENABLE(). dnl --------------------------------------------------------------------------- m4_define([MULE_ENABLEVAR], [m4_ifdef(__mule_arg_default([$1]), [enable_[]m4_translit([$1], [-], [_])], [m4_fatal([Unknown feature `$1'!])])]) dnl --------------------------------------------------------------------------- dnl MULE_STATUSOF(FEATURE) dnl dnl Expands to the value of the shell variable holding the status of FEATURE, dnl considering default values. FEATURE *must* have been set up using dnl MULE_ARG_ENABLE(). dnl --------------------------------------------------------------------------- m4_define([MULE_STATUSOF], [m4_ifdef(__mule_arg_default([$1]), __mule_arg_value([$1]), [m4_fatal([Unknown feature `$1'!])])]) # ---------------------- # # Conditional processing # # ---------------------- # m4_define([__mule_if_multi], [m4_define([__mule_if_logic], [])dnl m4_foreach([__mule_condition], [$1], [__mule_if_logic MULE_IS_ENABLED(__mule_condition) ][m4_define([__mule_if_logic], [$2])])dnl m4_undefine([__mule_if_logic])]) dnl --------------------------------------------------------------------------- dnl MULE_IF_ENABLED(FEATURE, [ACTION-IF-ENABLED], [ACTION-IF-DISABLED]) dnl dnl Basically a wrapper around AS_IF(), the test being if FEATURE is enabled. dnl FEATURE must have been set up by MULE_ARG_ENABLE(). dnl --------------------------------------------------------------------------- m4_define([MULE_IF_ENABLED], [AS_IF([test MULE_IS_ENABLED([$1])], [$2], [$3])]) m4_define([MULE_IF_ENABLED_ALL], [AS_IF([test]__mule_if_multi([$1], [-a]), [$2], [$3])]) m4_define([MULE_IF_ENABLED_ANY], [AS_IF([test]__mule_if_multi([$1], [-o]), [$2], [$3])]) dnl --------------------------------------------------------------------------- dnl MULE_IF(CONDITION, [IF-TRUE] [, ELIF-CONDITION, [IF-TRUE]]... [, ELSE-BRANCH]) dnl dnl Works like AS_IF(), but allows elif-branches too. dnl --------------------------------------------------------------------------- m4_define([__mule_if_helper], [m4_if( [$#], 0,, [$#], 1, [m4_ifvaln([$1], [m4_n([else]) $1])], [m4_n([elif $1; then]) m4_ifvaln([$2], [$2], :)])dnl m4_if(m4_eval([$# > 2]), 1, [$0(m4_shiftn(2, $@))])]) m4_define([MULE_IF], [m4_if( [$#], 0,, [$#], 1,, [m4_n([if $1; then]) m4_ifval([$2],[$2], :) m4_if(m4_eval([$# > 2]), 1, [__mule_if_helper(m4_shiftn(2, $@))])m4_n([fi])])]) # ----------------------- # # Other high-level macros # # ----------------------- # dnl --------------------------------------------------------------------------- dnl MULE_CHECK_SYSTEM dnl dnl Checks host system type, and sets system-specific flags accordingly. dnl Sets $SYS to the name of the host os. dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_SYSTEM], [AC_REQUIRE([AC_CANONICAL_HOST])dnl case "${host_os}" in darwin*) SYS=darwin MULECPPFLAGS="-no-cpp-precomp -D_INTL_REDIRECT_MACROS -DNOPCH"; MULELDFLAGS="-bind_at_load" touch src/Scanner.cpp ;; openbsd*) SYS=openbsd LIBS="$LIBS -L/usr/local/lib" MULECPPFLAGS="-D__OPENBSD__" ;; *cygwin* | *mingw32*) SYS=win32 MULECPPFLAGS="-DNOMINMAX" ;; solaris*) SYS=solaris RESOLV_LIB="-lresolv -lnsl" LIBS="$LIBS -lrt" ;; *netbsd*) SYS=netbsd # Now this is against autoconf recommendation that configure should not modify CPPFLAGS and LDFLAGS # However, these values in NetBSD are required even to run the tests, and this is the easiest way to do it. # Still, we prepend them, instead of adding, so the user may override them. MULE_PREPEND([CPPFLAGS], [-I/usr/pkg/include]) MULE_PREPEND([LDFLAGS], [-R/usr/pkg/lib -L/usr/pkg/lib]) ;; *irix*) SYS=irix MULECPPFLAGS="-D__IRIX__" ;; *) SYS=unknown ;; esac # -lpthread is needed by Debian but FreeBSD < 5 doesn't support it AS_IF([test ${SYS:-unknown} != win32], [ AC_MSG_CHECKING([if this is a FreeBSD 4 or earlier system]) AS_IF([test x"`uname -s`" = xFreeBSD && test 0`uname -r | cut -c 1` -lt 5], [ MULE_ADDFLAG([LD], [-pthread]) AC_MSG_RESULT(yes) ], [ MULE_ADDFLAG([LD], [-lpthread]) AC_MSG_RESULT(no) ]) ]) AC_SUBST([RESOLV_LIB])dnl AC_SUBST([MULECPPFLAGS])dnl AC_SUBST([MULECFLAGS])dnl AC_SUBST([MULECXXFLAGS])dnl AC_SUBST([MULELDFLAGS])dnl AC_SUBST([MULERCFLAGS])dnl ]) dnl --------------------------------------------------------------------------- dnl MULE_COMPILATION_FLAGS dnl dnl Checks type of compilation requested by user, and sets various flags dnl accordingly. dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_COMPILATION_FLAGS], [dnl AC_REQUIRE([MULE_CHECK_GLIBCXX])dnl MULE_ARG_ENABLE([debug], [yes], [disable additional debugging output]) MULE_ARG_ENABLE([profile], [no], [enable code profiling]) MULE_ARG_ENABLE([optimize], [no], [enable code optimization]) MULE_IF_ENABLED([debug], [ MULE_ADDFLAG([CPP], [-D__DEBUG__]) MULE_ADDCCXXFLAG([-g]) AS_IF([test ${GCC:-no} = yes], [MULE_ADDCCXXFLAG([-W -Wall -Wshadow -Wundef -ggdb -fno-inline -fmessage-length=0])]) AS_IF([test ${SYS:-unknown} = win32], [MULE_ADDFLAG([RC], [-D__DEBUG__])]) ], [ AS_IF([test ${GCC:-no} = yes], [MULE_ADDCCXXFLAG([-W -Wall -Wshadow -Wundef])]) ]) MULE_IF_ENABLED([profile], [ MULE_ADDCCXXFLAG([-pg]) MULE_ADDFLAG([LD], [-pg]) ]) MULE_IF_ENABLED([optimize], [MULE_ADDCCXXFLAG([-O2])]) MULE_ADDFLAG([CPP], [-DUSE_WX_EXTENSIONS]) ]) dnl --------------------------------------------------------------------------- dnl MULE_CHECK_GLIBCXX dnl dnl Checks whether we use the GNU C++ Library. dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_GLIBCXX], [dnl AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_CXXCPP])dnl AC_LANG_ASSERT([C++])dnl AC_MSG_CHECKING([if we're using the GNU C++ library]) AC_PREPROC_IFELSE([ AC_LANG_SOURCE([[ #include #ifndef __GLIBCXX__ #error Non-GNU C++ library found. #endif ]]) ], [GLIBCXX=yes], [GLIBCXX=no]) AC_MSG_RESULT([$GLIBCXX]) ]) dnl --------------------------------------------------------------------------- dnl MULE_CHECK_STRICT_ALIASING dnl dnl Checks whether the C++ compiler uses strict aliasing. dnl This check could use the C compiler, but the source is C++ and the two dnl compilers are not necessarily the same, or they might use different dnl compiler flags... dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_STRICT_ALIASING], [AC_LANG_ASSERT([C++])dnl AH_TEMPLATE([GCC_USES_STRICT_ALIASING], [Define to 1 if the C++ compiler is the GNU C++ compiler and it is using strict aliasing.]) AS_IF([test ${GCC:-no} = yes], [ dnl Backup current flags and turn warnings into errors MULE_BACKUP([CXXFLAGS]) MULE_APPEND([CXXFLAGS], [$MULECPPFLAGS $MULECFLAGS $MULECXXFLAGS -Werror]) AC_MSG_CHECKING([whether the C++ compiler ($CXX) uses strict aliasing]) AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([], [[ int a; short *b = (short*)&a; short c = *b; return c; ]]) ], [ AC_MSG_RESULT([no]) ], [ AC_MSG_RESULT([yes]) AC_DEFINE([GCC_USES_STRICT_ALIASING]) ]) dnl Restore flags MULE_RESTORE([CXXFLAGS]) ]) ]) dnl --------------------------------------------------------------------------- dnl MULE_CHECK_WX_SUPPORTS_LARGEFILE dnl dnl Test that wxWidgets is built with support for large-files. If not dnl configure is terminated. dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_WX_SUPPORTS_LARGEFILE], [AC_LANG_ASSERT([C++])dnl dnl Backup current flags and setup flags for testing MULE_BACKUP([CPPFLAGS]) MULE_APPEND([CPPFLAGS], [$WX_CPPFLAGS]) AC_MSG_CHECKING([that wxWidgets has support for large files]) AC_PREPROC_IFELSE([ AC_LANG_SOURCE([[ #include #include #ifndef wxHAS_LARGE_FILES #error No LargeFile support! #endif ]]) ], [ AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) AC_MSG_ERROR([ Support for large files in wxWidgets is required by aMule. To continue you must recompile wxWidgets with support for large files enabled.]) ]) dnl Restore backup'd flags MULE_RESTORE([CPPFLAGS]) ]) dnl -------------------------------------------------------------------------- dnl MULE_CHECK_CCACHE dnl dnl Checks if ccache is requested and available, and makes use of it dnl -------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_CCACHE], [ MULE_ARG_ENABLE([ccache], [no], [enable ccache support for fast recompilation]) AC_ARG_WITH([ccache-prefix], [AS_HELP_STRING([--with-ccache-prefix=PREFIX], [prefix where ccache is installed])]) AC_MSG_CHECKING([whether ccache support should be added]) AC_MSG_RESULT([MULE_STATUSOF([ccache])]) MULE_IF_ENABLED([ccache], [ AC_MSG_CHECKING([for ccache presence]) AS_IF([test -z "$with_ccache_prefix"], [ ccache_full=`which ccache` with_ccache_prefix=`dirname ${ccache_full}` ]) AS_IF([$with_ccache_prefix/ccache -V >/dev/null 2>&1], [ CC="$with_ccache_prefix/ccache $CC" CXX="$with_ccache_prefix/ccache $CXX" BUILD_CC="$with_ccache_prefix/ccache $BUILD_CC" ], [MULE_ENABLEVAR([ccache])=no]) AC_MSG_RESULT([MULE_STATUSOF([ccache])]) ]) ]) dnl ---------------------------------------------------- dnl MULE_CHECK_BFD dnl check if bfd.h is on the system and usable dnl ---------------------------------------------------- AC_DEFUN([MULE_CHECK_BFD], [AC_REQUIRE([MULE_CHECK_NLS])dnl AC_MSG_CHECKING([for bfd]) result=no for bfd_ldadd in "" "${LIBINTL}" "-ldl" "-ldl ${LIBINTL}"; do MULE_BACKUP([LIBS]) MULE_BACKUP([LDFLAGS]) MULE_PREPEND([LIBS], [-lbfd -liberty ${bfd_ldadd} ${ZLIB_LIBS}]) MULE_APPEND([LDFLAGS], [${ZLIB_LDFLAGS}]) AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include #include ]], [[ char *dummy = bfd_errmsg(bfd_get_error()); ]]) ], [ result=yes BFD_CPPFLAGS="-DHAVE_BFD" BFD_LIBS="-lbfd -liberty ${bfd_ldadd}" MULE_RESTORE([LIBS]) MULE_RESTORE([LDFLAGS]) break ]) MULE_RESTORE([LIBS]) MULE_RESTORE([LDFLAGS]) done AC_MSG_RESULT([$result]) AS_IF([test $result = no], [MULE_WARNING([bfd.h not found or unusable, please install binutils development package if you are a developer or want to help testing aMule])]) AC_SUBST([BFD_CPPFLAGS])dnl AC_SUBST([BFD_LIBS])dnl ]) dnl ---------------------------------------------------- dnl MULE_CHECK_FLEX_EXTENDED dnl check if flex can produce header files dnl ---------------------------------------------------- AC_DEFUN([MULE_CHECK_FLEX_EXTENDED], [ AC_MSG_CHECKING([for extended flex capabilities]) extended_flex=`flex --help | grep header-file` AS_IF([test -n "$extended_flex"], [HAVE_FLEX_EXTENDED=yes], [HAVE_FLEX_EXTENDED=no]) AC_MSG_RESULT($HAVE_FLEX_EXTENDED) AS_IF([test $HAVE_FLEX_EXTENDED = no], [AC_MSG_NOTICE([Your flex version doesn't support --header-file flag. This is not critical, but an upgrade is recommended])]) ]) dnl ---------------------------------------------------- dnl MULE_CHECK_EXCEPTIONS dnl Checks for broken exception-handling. This is needed dnl because exception handling is broken for some archs/ dnl compilers. dnl ---------------------------------------------------- AC_DEFUN([MULE_CHECK_EXCEPTIONS], [AC_LANG_ASSERT([C++])dnl AC_MSG_CHECKING([for exception-handling]) AC_RUN_IFELSE([ AC_LANG_PROGRAM(, [[ try { throw 1; } catch (int) { return 0; } return 1; ]]) ], [ AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) AC_MSG_ERROR([Exception handling does not work. Broken compiler?]) ], [ AC_MSG_RESULT([undeterminable]) MULE_WARNING( [Cross-compilation detected, so exception handling cannot be tested. Note that broken exception handling in your compiler may lead to unexpected crashes.]) ]) ]) dnl --------------------------------------------------------------------------- dnl MULE_CHECK_CXXABI dnl dnl This function will test the header and abi::__cxa_demangle() dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_CXXABI], [AC_LANG_ASSERT([C++])dnl AC_CHECK_HEADERS([typeinfo]) AC_MSG_CHECKING([for and __cxa_demangle()]) AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #ifdef HAVE_TYPEINFO # include #endif #include ]], [[ int status; char * demangled = abi::__cxa_demangle("", 0, 0, &status); std::type_info *ti = abi::__cxa_current_exception_type(); ]]) ], [ AH_TEMPLATE([HAVE_CXXABI], [Define to 1 if you have the header which declares abi::__cxa_demangle()]) AC_DEFINE([HAVE_CXXABI]) AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) ]) ]) dnl --------------------------------------------------------------------------- dnl MULE_CHECK_EXECINFO dnl dnl This function will test the header and backtrace() dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_EXECINFO], [ AC_MSG_CHECKING([for and backtrace()]) AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include ]], [[ void *bt[1]; int n = backtrace(&bt, 1); const char **bt_syms = backtrace_symbols(bt, n); ]]) ], [ AH_TEMPLATE([HAVE_EXECINFO], [Define to 1 if you have the header which declares backtrace()]) AC_DEFINE([HAVE_EXECINFO]) AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) ]) ]) dnl --------------------------------------------------------------------------- dnl MULE_CHECK_MMAP dnl dnl Checks for mmap() and makes use of it when found. dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_CHECK_MMAP], [ MULE_ARG_ENABLE([mmap], [no], [enable using mapped memory if supported]) MULE_IF_ENABLED([mmap], [ AC_CHECK_HEADERS([sys/mman.h]) AC_FUNC_MMAP AC_CHECK_FUNCS([munmap sysconf]) AS_IF([test $ac_cv_func_sysconf = yes], [ AC_MSG_CHECKING([for pagesize constant for sysconf]) AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include ]], [[ return sysconf(_SC_PAGESIZE); ]]) ], [ AC_MSG_RESULT([_SC_PAGESIZE]) AC_DEFINE([HAVE__SC_PAGESIZE], [1], [Define to 1 if you have the _SC_PAGESIZE constant in ]) ], [ AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include ]], [[ return sysconf(_SC_PAGE_SIZE); ]]) ], [ AC_MSG_RESULT([_SC_PAGE_SIZE]) AC_DEFINE([HAVE__SC_PAGE_SIZE], [1], [Define to 1 if you have the _SC_PAGE_SIZE constant in , but not _SC_PAGESIZE]) ], [ AC_MSG_RESULT([none]) ]) ]) ]) ], [ # fake the result of the test for munmap() for the gettext macros ac_cv_func_munmap=no ]) ]) dnl --------------------------------------------------------------------------- dnl MULE_DENOISER dnl dnl Test for denoising level and add denoiser commands to config.status dnl --------------------------------------------------------------------------- AC_DEFUN([MULE_DENOISER], [ AC_ARG_WITH([denoise-level], [AS_HELP_STRING([--with-denoise-level=], [Specifies denoising level (0-4):]) AS_HELP_STRING([], [0 - Do nothing]) AS_HELP_STRING([], [4 - Suppress all normal output]) AS_HELP_STRING([], [(for more information see src/utils/scripts/denoiser.rules)]) ]) AC_MSG_CHECKING([denoising level]) AS_IF([test ${with_denoise_level:-5} = yes], [with_denoise_level=5]) AS_IF([test ${with_denoise_level:-5} = no], [with_denoise_level=0]) AS_IF([test ${with_denoise_level:-5} -gt 4], [AS_IF([test "${svndate:+set}" = "set"], [with_denoise_level=0], [with_denoise_level=4])]) AC_MSG_RESULT([$with_denoise_level]) AC_CONFIG_COMMANDS([denoiser], [[if test $denoiserlevel -gt 0; then if test ! -d src/utils/scripts; then mkdir -p src/utils/scripts; fi sed -e "1{x;s/.*/1/;x;};/^[ ]*\$/d;/^#if /{/level.*$denoiserlevel/{x;s/^/1/;x;b0;};x;s/^/0/;x;:0;d;};/^#else/{x;/^1/{s/1/0/;b1;};s/0/1/;:1;x;d;};/^#endif/{x;s/.//;x;d;};/^[ ]*#/d;x;/^1/{x;b;};x;d" \ $srcdir/src/utils/scripts/denoiser.rules > src/utils/scripts/denoiser.sed for i in `find . -name 'Makefile' -print`; do if test -n "`head -n 1 $i | grep '^#'`"; then sed -f src/utils/scripts/denoiser.sed $i > $i.tmp && mv $i.tmp $i fi done fi]], [denoiserlevel=$with_denoise_level]) ]) amule-adunanza-2012.1+2.3.1~dfsg1.orig/amuleadunanza.xpm0000644000175000017500000024226111332327377021122 0ustar l3onl3on/* XPM */ static char * amuleadunanza3_xpm[] = { "128 128 3111 2", " c None", ". c #000000", "+ c #020000", "@ c #030000", "# c #050000", "$ c #060000", "% c #070000", "& c #090000", "* c #0B0000", "= c #0D0000", "- c #0E0000", "; c #100000", "> c #110000", ", c #120000", "' c #150000", ") c #170000", "! c #180000", "~ c #1A0000", "{ c #1C0000", "] c #1D0000", "^ c #1F0000", "/ c #210000", "( c #220000", "_ c #230000", ": c #250000", "< c #260000", "[ c #280000", "} c #2A0000", "| c #2B0000", "1 c #2D0000", "2 c #2E0000", "3 c #300000", "4 c #310000", "5 c #330000", "6 c #340000", "7 c #360000", "8 c #370000", "9 c #390000", "0 c #3B0000", "a c #753B0E", "b c #3E0000", "c c #400000", "d c #410000", "e c #420000", "f c #440000", "g c #450000", "h c #470000", "i c #490000", "j c #4A0000", "k c #4C0000", "l c #4D0000", "m c #4F0000", "n c #500000", "o c #510000", "p c #530000", "q c #550000", "r c #560000", "s c #580000", "t c #5A0000", "u c #5B0000", "v c #5D0000", "w c #610000", "x c #670000", "y c #6C0000", "z c #700000", "A c #760000", "B c #7C0000", "C c #800000", "D c #860000", "E c #8B0000", "F c #910000", "G c #950000", "H c #9B0000", "I c #A00000", "J c #A50000", "K c #AA0000", "L c #AF0000", "M c #B50000", "N c #BA0000", "O c #BD0702", "P c #C10D04", "Q c #C31307", "R c #C6190A", "S c #CA200B", "T c #CD260E", "U c #D02D10", "V c #D33313", "W c #D63A15", "X c #D94016", "Y c #DD4619", "Z c #DE491A", "` c #E04E1C", " . c #E2511D", ".. c #E5561F", "+. c #E65A20", "@. c #E95E22", "#. c #EA6223", "$. c #EC6625", "%. c #EE6A26", "&. c #F16E28", "*. c #F37229", "=. c #F5762A", "-. c #F67A2C", ";. c #F87D2D", ">. c #FA822F", ",. c #010000", "'. c #040000", "). c #080000", "!. c #0A0000", "~. c #130000", "{. c #140000", "]. c #160000", "^. c #190000", "/. c #1E0000", "(. c #240000", "_. c #270000", ":. c #290000", "<. c #2C0000", "[. c #2F0000", "}. c #350000", "|. c #380000", "1. c #724521", "2. c #944E1B", "3. c #97501C", "4. c #77614E", "5. c #430000", "6. c #460000", "7. c #520000", "8. c #540000", "9. c #570000", "0. c #590000", "a. c #5E0000", "b. c #630000", "c. c #680000", "d. c #6D0000", "e. c #720000", "f. c #770000", "g. c #7D0000", "h. c #820000", "i. c #880000", "j. c #8D0000", "k. c #920000", "l. c #970000", "m. c #9D0000", "n. c #A20000", "o. c #A70000", "p. c #AC0000", "q. c #B20000", "r. c #B60000", "s. c #BB0301", "t. c #BE0803", "u. c #C20F06", "v. c #C51608", "w. c #C81B0A", "x. c #CB220D", "y. c #CE280E", "z. c #D12F11", "A. c #D43513", "B. c #D83C16", "C. c #DB4217", "D. c #DD471A", "E. c #E04B1B", "F. c #E24F1D", "G. c #E4531E", "H. c #E55820", "I. c #E75B20", "J. c #E96022", "K. c #EB6324", "L. c #ED6725", "M. c #EF6B27", "N. c #F17028", "O. c #F3732A", "P. c #F6782B", "Q. c #F77B2C", "R. c #F97F2E", "S. c #FB832F", "T. c #0C0000", "U. c #0F0000", "V. c #1B0000", "W. c #200000", "X. c #320000", "Y. c #66462A", "Z. c #7C4217", "`. c #B66A30", " + c #924D1D", ".+ c #805F45", "++ c #480000", "@+ c #4B0000", "#+ c #5C0000", "$+ c #600000", "%+ c #650000", "&+ c #690000", "*+ c #6F0000", "=+ c #750000", "-+ c #7A0000", ";+ c #7F0000", ">+ c #840000", ",+ c #8A0000", "'+ c #8E0000", ")+ c #940000", "!+ c #990000", "~+ c #9E0000", "{+ c #A40000", "]+ c #A90000", "^+ c #AE0000", "/+ c #B40000", "(+ c #B90000", "_+ c #BC0502", ":+ c #BF0B04", "<+ c #C21106", "[+ c #C51809", "}+ c #C91E0B", "|+ c #CC250D", "1+ c #D02B0F", "2+ c #D23112", "3+ c #D53814", "4+ c #D83E17", "5+ c #DC4418", "6+ c #DE491B", "7+ c #E04D1B", "8+ c #E4541F", "9+ c #E65920", "0+ c #E85D21", "a+ c #EA6023", "b+ c #EC6524", "c+ c #EE6926", "d+ c #F06D27", "e+ c #F27128", "f+ c #F4752A", "g+ c #F6792C", "h+ c #F87D2C", "i+ c #FA812E", "j+ c #FC852F", "k+ c #A35722", "l+ c #BD7743", "m+ c #7F4418", "n+ c #795A42", "o+ c #710000", "p+ c #900000", "q+ c #AB0000", "r+ c #B00000", "s+ c #BA0001", "t+ c #BE0702", "u+ c #C00D05", "v+ c #C31407", "w+ c #C71A0A", "x+ c #CA210C", "y+ c #CD270E", "z+ c #D12D10", "A+ c #D43312", "B+ c #D73A15", "C+ c #DA4017", "D+ c #DF4A1B", "E+ c #E3521D", "F+ c #E75A20", "G+ c #EB6323", "H+ c #ED6625", "I+ c #EF6B26", "J+ c #F4762B", "K+ c #F77A2C", "L+ c #F97F2D", "M+ c #FB822F", "N+ c #FD8730", "O+ c #6A3D17", "P+ c #87491C", "Q+ c #7E3F0F", "R+ c #6B5E52", "S+ c #4E0000", "T+ c #6E0000", "U+ c #780000", "V+ c #830000", "W+ c #930000", "X+ c #AD0000", "Y+ c #B70000", "Z+ c #BF0A03", "`+ c #C21006", " @ c #C41608", ".@ c #C81C0A", "+@ c #CB230C", "@@ c #CE290F", "#@ c #D22F11", "$@ c #D53513", "%@ c #DB4218", "&@ c #DD481A", "*@ c #E04C1B", "=@ c #E1501C", "-@ c #E4541E", ";@ c #E75B21", ">@ c #EA5F22", ",@ c #EB6424", "'@ c #ED6726", ")@ c #F17029", "!@ c #F4742A", "~@ c #F5782B", "{@ c #F77C2C", "]@ c #F9802E", "^@ c #FC8330", "/@ c #FD8830", "(@ c #70431D", "_@ c #86491B", ":@ c #A45822", "<@ c #D18951", "[@ c #AD642B", "}@ c #734219", "|@ c #715E4F", "1@ c #6B0000", "2@ c #7B0000", "3@ c #8F0000", "4@ c #BD0502", "5@ c #C00C04", "6@ c #C31207", "7@ c #C61908", "8@ c #CA1E0B", "9@ c #CD250D", "0@ c #CF2C0F", "a@ c #D23212", "b@ c #D63814", "c@ c #D93E17", "d@ c #DC4518", "e@ c #DF491B", "f@ c #E04D1C", "g@ c #E3511D", "h@ c #E4551E", "i@ c #EB6123", "j@ c #EF6926", "k@ c #F16D27", "l@ c #F27129", "m@ c #F7792B", "n@ c #FC8530", "o@ c #FE8932", "p@ c #5C0707", "q@ c #8D0D0D", "r@ c #AB1212", "s@ c #BE1414", "t@ c #C91616", "u@ c #CF1717", "v@ c #D31717", "w@ c #D51818", "x@ c #785436", "y@ c #764016", "z@ c #924E1D", "A@ c #9B5524", "B@ c #6F391B", "C@ c #6F6359", "D@ c #CB1111", "E@ c #BB0101", "F@ c #C41507", "G@ c #CB210C", "H@ c #D12E11", "I@ c #D73A14", "J@ c #DA4117", "K@ c #DF4A1A", "L@ c #E14E1D", "M@ c #EB6223", "N@ c #F16F28", "O@ c #F37329", "P@ c #F97E2D", "Q@ c #FF8B32", "R@ c #5F0707", "S@ c #BF1515", "T@ c #784016", "U@ c #88491C", "V@ c #A15320", "W@ c #CD8145", "X@ c #894A1C", "Y@ c #7F471D", "Z@ c #716C66", "`@ c #D21616", " # c #B80000", ".# c #C21005", "+# c #C51708", "@# c #C81D0A", "## c #CE2A0F", "$# c #D23011", "%# c #D53614", "&# c #D83C15", "*# c #DB4318", "=# c #DE481A", "-# c #E1501D", ";# c #E3541E", "># c #E65820", ",# c #E85C21", "'# c #EC6424", ")# c #EE6826", "!# c #EF6C27", "~# c #F27029", "{# c #F37429", "]# c #F87C2C", "^# c #FA802E", "/# c #FE8831", "(# c #FF8D31", "_# c #940F0F", ":# c #68462A", "<# c #7E4418", "[# c #AF672F", "}# c #814518", "|# c #7C451C", "1# c #BD0303", "2# c #BC0602", "3# c #C31206", "4# c #C61809", "5# c #C91F0C", "6# c #D02C10", "7# c #D63914", "8# c #DA3F16", "9# c #DC4519", "0# c #DF491A", "a# c #F27229", "b# c #F87E2D", "c# c #FB812F", "d# c #FD8630", "e# c #FF9031", "f# c #290101", "g# c #A91212", "h# c #6E3C15", "i# c #814A21", "j# c #99511C", "k# c #A4602A", "l# c #884A1C", "m# c #6A492D", "n# c #C30908", "o# c #C10E05", "p# c #C41508", "q# c #C71B0A", "r# c #CB220C", "s# c #D12E10", "t# c #D43413", "u# c #D73B15", "v# c #DF4B1B", "w# c #E14F1C", "x# c #E3521E", "y# c #E5571F", "z# c #E95F22", "A# c #F5772A", "B# c #FD8731", "C# c #FF932F", "D# c #9E1010", "E# c #693C1B", "F# c #7D461C", "G# c #915223", "H# c #804418", "I# c #694E35", "J# c #C90E0D", "K# c #C31106", "L# c #C61709", "M# c #C81E0A", "N# c #CC230D", "O# c #CF2A0F", "P# c #D83D16", "Q# c #E04C1C", "R# c #E2501D", "S# c #EA6123", "T# c #EE6825", "U# c #F17128", "V# c #FF8E31", "W# c #FF972E", "X# c #700A0A", "Y# c #664F3A", "Z# c #794117", "`# c #B96F36", " $ c #CC9366", ".$ c #934E1D", "+$ c #6A523D", "@$ c #CF1312", "#$ c #C00D04", "$$ c #C71909", "%$ c #C9200B", "&$ c #CD260D", "*$ c #D33213", "=$ c #D93F17", "-$ c #E14E1C", ";$ c #E5551F", ">$ c #E85E22", ",$ c #EC6624", "'$ c #EF6A26", ")$ c #F37129", "!$ c #FF8A32", "~$ c #FF9130", "{$ c #FE9A2D", "]$ c #320202", "^$ c #CD1616", "/$ c #6A3D18", "($ c #804921", "_$ c #784117", ":$ c #675A4F", "<$ c #D31716", "[$ c #C10F06", "}$ c #C51508", "|$ c #D73B16", "1$ c #DA4217", "2$ c #E55720", "3$ c #EE6725", "4$ c #F6772B", "5$ c #F77B2D", "6$ c #FD8831", "7$ c #FF8C32", "8$ c #FE952F", "9$ c #FD9D2C", "0$ c #840D0D", "a$ c #6A4E36", "b$ c #824A21", "c$ c #6C6156", "d$ c #C51208", "e$ c #C51808", "f$ c #C91E0A", "g$ c #CC240D", "h$ c #CF2B0F", "i$ c #D53714", "j$ c #DC4319", "k$ c #E85D22", "l$ c #EA6122", "m$ c #F27028", "n$ c #FE8F30", "o$ c #FE982E", "p$ c #FDA12C", "q$ c #6F3F18", "r$ c #D69258", "s$ c #81481D", "t$ c #774820", "u$ c #6D675F", "v$ c #CA150D", "w$ c #C71A09", "x$ c #D43313", "y$ c #D73915", "z$ c #E4561F", "A$ c #EE6A27", "B$ c #F06E28", "C$ c #F3722A", "D$ c #F87F2D", "E$ c #FC8630", "F$ c #FF8B31", "G$ c #FE9230", "H$ c #FE9B2D", "I$ c #FDA42A", "J$ c #5B3B22", "K$ c #512D14", "L$ c #4E0606", "M$ c #724F2F", "N$ c #7D5533", "O$ c #6B6660", "P$ c #CD1710", "Q$ c #CF290F", "R$ c #D53613", "S$ c #D73C16", "T$ c #E3531E", "U$ c #E96023", "V$ c #EC6324", "W$ c #ED6826", "X$ c #F3742A", "Y$ c #F5782C", "Z$ c #FE962F", "`$ c #FE9E2C", " % c #FDA729", ".% c #634025", "+% c #5A2E12", "@% c #542B11", "#% c #5A3E26", "$% c #730A0A", "%% c #743F16", "&% c #80481D", "*% c #7A4217", "=% c #7D5D3F", "-% c #D11814", ";% c #D33211", ">% c #D93E16", ",% c #E3501D", "'% c #E75920", ")% c #E95D21", "!% c #EC6525", "~% c #F06D28", "{% c #FE8931", "]% c #FE992D", "^% c #FDA12B", "/% c #FDAA28", "(% c #5E3D23", "_% c #5C2F12", ":% c #573117", "<% c #592E11", "[% c #593216", "}% c #715B45", "|% c #6B4F36", "1% c #894E1E", "2% c #8A613E", "3% c #D41817", "4% c #CB200C", "5% c #D33312", "6% c #DD461A", "7% c #E2531D", "8% c #E85F22", "9% c #F5762B", "0% c #FC8731", "a% c #FF9330", "b% c #FE9C2D", "c% c #FDA52A", "d% c #FCAE28", "e% c #695B4E", "f% c #5F361B", "g% c #613618", "h% c #5F3518", "i% c #7E4D25", "j% c #766D65", "k% c #70411A", "l% c #754319", "m% c #886F5A", "n% c #CC210D", "o% c #F06B27", "p% c #F47429", "q% c #FB8430", "r% c #FE8E31", "s% c #FF962F", "t% c #FE9F2C", "u% c #FDA829", "v% c #FCB027", "w% c #5C341A", "x% c #67391B", "y% c #6E441D", "z% c #716254", "A% c #750B0B", "B% c #684D35", "C% c #DD985F", "D% c #A56734", "E% c #78451C", "F% c #776E65", "G% c #CF2011", "H% c #CF2C10", "I% c #D33212", "J% c #DD4519", "K% c #E5551E", "L% c #ED6624", "M% c #F16D28", "N% c #F67A2B", "O% c #F87E2E", "P% c #FE9131", "Q% c #FE9A2E", "R% c #FEA22B", "S% c #FDAB29", "T% c #FCB326", "U% c #4E392C", "V% c #6A3F1C", "W% c #7B5532", "X% c #756C64", "Y% c #540606", "Z% c #69411C", "`% c #CC573E", " & c #9C5E28", ".& c #784B25", "+& c #6C665E", "@& c #D11E14", "#& c #DA4118", "$& c #E14F1D", "%& c #EB6224", "&& c #F5772B", "*& c #FE9430", "=& c #FCAE27", "-& c #FCB724", ";& c #4F4842", ">& c #563117", ",& c #71411C", "'& c #754720", ")& c #7E6753", "!& c #C71616", "~& c #8A5022", "{& c #5C5C5C", "]& c #D31C15", "^& c #D53713", "/& c #DB4418", "(& c #E6581F", "_& c #EA6022", ":& c #ED6825", "<& c #F06C26", "[& c #F77D2D", "}& c #FC842F", "|& c #FE972E", "1& c #FD9F2C", "2& c #FDA929", "3& c #FDB126", "4& c #FCBA23", "5& c #5E3C23", "6& c #523625", "7& c #713A1B", "8& c #794921", "9& c #74563B", "0& c #6F0A0A", "a& c #724723", "b& c #9E3E25", "c& c #7E5E40", "d& c #DA3F17", "e& c #E04E1B", "f& c #E2521D", "g& c #E85E21", "h& c #F16E27", "i& c #FDA22B", "j& c #FDAB28", "k& c #FCB526", "l& c #FBBD22", "m& c #5C5044", "n& c #4C2B18", "o& c #4D2C18", "p& c #79461C", "q& c #804518", "r& c #714E2F", "s& c #7A6B5E", "t& c #870D0D", "u& c #77451C", "v& c #7D6D5D", "w& c #D43013", "x& c #D73C15", "y& c #DA4218", "z& c #E75C21", "A& c #FB842F", "B& c #FD9E2D", "C& c #FDA629", "D& c #FCAF27", "E& c #FCB824", "F& c #FBC022", "G& c #5C3B23", "H& c #552C11", "I& c #70451D", "J& c #6E5B4A", "K& c #5A0606", "L& c #AE1212", "M& c #66584B", "N& c #BB845B", "O& c #834D1F", "P& c #80471D", "Q& c #7F6F61", "R& c #D52B15", "S& c #D83E16", "T& c #E4551F", "U& c #F06C27", "V& c #F6792B", "W& c #FA812F", "X& c #FE8832", "Y& c #FEA02B", "Z& c #FCB226", "`& c #FBC321", " * c #504B47", ".* c #4C2C18", "+* c #72461E", "@* c #7D5633", "#* c #6E6E6E", "$* c #420202", "%* c #6B0808", "&* c #890C0C", "** c #735C46", "=* c #6D6C6A", "-* c #B91313", ";* c #D21717", ">* c #D52516", ",* c #E75A21", "'* c #FA832F", ")* c #FE8A32", "!* c #FF9230", "~* c #FDA32A", "{* c #FCAC28", "]* c #FCB525", "^* c #FCBE22", "/* c #FBC620", "(* c #5A4232", "_* c #51311A", ":* c #744924", "<* c #75665A", "[* c #72553A", "}* c #7F400F", "|* c #C47537", "1* c #754924", "2* c #656464", "3* c #6D0606", "4* c #D52017", "5* c #DD4719", "6* c #EF6C26", "7* c #F87C2D", "8* c #FF8D32", "9* c #FE952E", "0* c #FCAF26", "a* c #FBC121", "b* c #FBC91F", "c* c #565554", "d* c #502F1B", "e* c #57321B", "f* c #995D38", "g* c #764720", "h* c #7B6C5F", "i* c #71543A", "j* c #50504F", "k* c #BF1414", "l* c #D51917", "m* c #F97D2D", "n* c #FCA929", "o* c #FCBC23", "p* c #FBC421", "q* c #FACC1E", "r* c #5A493B", "s* c #946843", "t* c #935828", "u* c #7F4820", "v* c #675E56", "w* c #6F5338", "x* c #A7652C", "y* c #6E5F52", "z* c #8E0B0B", "A* c #DB3E18", "B* c #FE932F", "C* c #FDAD28", "D* c #FCB625", "E* c #FBBE22", "F* c #FBC71F", "G* c #FBCF1D", "H* c #545556", "I* c #4A2A17", "J* c #3F2C25", "K* c #452819", "L* c #815734", "M* c #A46E42", "N* c #706962", "O* c #714E2E", "P* c #66605A", "Q* c #5D0303", "R* c #D11717", "S* c #D93519", "T* c #E04B1C", "U* c #F77C2D", "V* c #FC8430", "W* c #FDB026", "X* c #FCBA24", "Y* c #FBC221", "Z* c #FBCA1F", "`* c #FAD21C", " = c #534B44", ".= c #351E11", "+= c #C39E7E", "@= c #AA7243", "#= c #7C5432", "$= c #705339", "%= c #754F2F", "&= c #4D4D4D", "*= c #AF1111", "== c #D92C18", "-= c #F4762A", ";= c #F97D2E", ">= c #FB812E", ",= c #FF8931", "'= c #FE992E", ")= c #FCB426", "!= c #FBBC22", "~= c #FBC520", "{= c #FBCC1E", "]= c #F9D51B", "^= c #564538", "/= c #361F11", "(= c #E8C3A4", "_= c #775A44", ":= c #747373", "<= c #73553A", "[= c #C07236", "}= c #644B33", "|= c #790808", "1= c #D72318", "2= c #FF942F", "3= c #FE9D2D", "4= c #FBB724", "5= c #FBBF21", "6= c #FAD01D", "7= c #FAD71A", "8= c #3C3B3A", "9= c #392822", "0= c #CBAC92", "a= c #4E3F33", "b= c #615750", "c= c #665D55", "d= c #695646", "e= c #7D4317", "f= c #52473C", "g= c #C81515", "h= c #C51313", "i= c #D51918", "j= c #E3541F", "k= c #EC6425", "l= c #EE6925", "m= c #FDA02C", "n= c #FCB126", "o= c #FCB924", "p= c #FBCA1E", "q= c #F9DB19", "r= c #393737", "s= c #402517", "t= c #352219", "u= c #EDD1B9", "v= c #EEB88A", "w= c #905627", "x= c #685F57", "y= c #595656", "z= c #5E4535", "A= c #453023", "B= c #4E2E1A", "C= c #574639", "D= c #6B5641", "E= c #DC8E54", "F= c #7C4720", "G= c #434241", "H= c #C71313", "I= c #970404", "J= c #E0461C", "K= c #E4561E", "L= c #F7792C", "M= c #FF8A31", "N= c #FBC51F", "O= c #FACE1D", "P= c #FAD51B", "Q= c #FADE19", "R= c #443D38", "S= c #331E10", "T= c #814D21", "U= c #CB9266", "V= c #785130", "W= c #585959", "X= c #392E25", "Y= c #432718", "Z= c #4D3E31", "`= c #4E4D4D", " - c #5E4C39", ".- c #74431B", "+- c #DA9457", "@- c #4C4D4D", "#- c #990505", "$- c #D11616", "%- c #DE3C1B", "&- c #EC6323", "*- c #F4732A", "=- c #FE942F", "-- c #FDA529", ";- c #FDAF27", ">- c #FBC021", ",- c #FAD01C", "'- c #F9D91A", ")- c #F9E117", "!- c #3B3632", "~- c #331F15", "{- c #A67C5A", "]- c #73431B", "^- c #5D4B39", "/- c #454545", "(- c #3D2416", "_- c #50301A", ":- c #603E24", "<- c #603618", "[- c #796351", "}- c #595755", "|- c #B40E0E", "1- c #890000", "2- c #C41212", "3- c #DB301A", "4- c #FF8F31", "5- c #FDA928", "6- c #FACB1E", "7- c #FAD41C", "8- c #F9DC1A", "9- c #F9E417", "0- c #3D3D3C", "a- c #3D2B1F", "b- c #351F11", "c- c #996136", "d- c #71451E", "e- c #5F3D24", "f- c #563F30", "g- c #3E2514", "h- c #5B331A", "i- c #874D1E", "j- c #734929", "k- c #CD1515", "l- c #8B0101", "m- c #B80D0D", "n- c #D82419", "o- c #EA6224", "p- c #FE8A31", "q- c #FDA32B", "r- c #FDAC27", "s- c #FAC520", "t- c #FAD61B", "u- c #F9DE18", "v- c #F9E716", "w- c #363534", "x- c #301F17", "y- c #241811", "z- c #5F3517", "A- c #AD6022", "B- c #896A4E", "C- c #9F0808", "D- c #AC0808", "E- c #E65A1F", "F- c #EA5F23", "G- c #F47329", "H- c #FDA62A", "I- c #FCC021", "J- c #FBC81F", "K- c #FAD11C", "L- c #F9D919", "M- c #F9E915", "N- c #534B45", "O- c #311E14", "P- c #251D1A", "Q- c #935624", "R- c #885328", "S- c #A46734", "T- c #7D6C5D", "U- c #BD1111", "V- c #850000", "W- c #A20303", "X- c #E44F20", "Y- c #FF8F30", "Z- c #FEA12B", "`- c #FDB226", " ; c #FBBB23", ".; c #FAD41B", "+; c #F9DC19", "@; c #F8E417", "#; c #F8ED14", "$; c #434343", "%; c #494745", "&; c #221710", "*; c #1D1816", "=; c #824B21", "-; c #824D21", ";; c #895022", ">; c #8B5327", ",; c #9B5D28", "'; c #7C6C5F", "); c #8B0303", "!; c #960000", "~; c #9C0000", "{; c #E1421E", "]; c #FC8631", "^; c #FE8B31", "/; c #FDAD27", "(; c #FCB524", "_; c #FBC61F", ":; c #FACF1D", "<; c #FAD71B", "[; c #F9DF18", "}; c #F9E715", "|; c #F8EF13", "1; c #474542", "2; c #241C19", "3; c #17110E", "4; c #935726", "5; c #995726", "6; c #9C5D28", "7; c #9E6029", "8; c #9D5925", "9; c #875228", "0; c #686463", "a; c #A70B0B", "b; c #C81212", "c; c #DD341C", "d; c #EB6423", "e; c #F6782C", "f; c #FE962E", "g; c #FCB923", "h; c #FAC91F", "i; c #F9DA1A", "j; c #F9E217", "k; c #F8EA15", "l; c #F8F019", "m; c #474645", "n; c #3C2A23", "o; c #834D1E", "p; c #884E21", "q; c #935724", "r; c #A4612C", "s; c #A7652F", "t; c #AD672F", "u; c #AF672E", "v; c #AA642D", "w; c #A15C26", "x; c #9C5723", "y; c #925624", "z; c #84664B", "A; c #9A0000", "B; c #9F0000", "C; c #BF0D0D", "D; c #D9261A", "E; c #FBC521", "F; c #FAD51C", "G; c #F8E516", "H; c #F8ED13", "I; c #F8EF1E", "J; c #2A2725", "K; c #1C1715", "L; c #995D28", "M; c #A8662D", "N; c #955A36", "O; c #696867", "P; c #900505", "Q; c #810000", "R; c #870000", "S; c #8C0000", "T; c #A10000", "U; c #B60808", "V; c #FE9C2C", "W; c #FCB725", "X; c #FCBF22", "Y; c #FBC720", "Z; c #FAD81A", "`; c #F9E018", " > c #F8E715", ".> c #F8EF15", "+> c #F8F024", "@> c #4B443E", "#> c #4C4540", "$> c #824B1E", "%> c #9B5E28", "&> c #7B6B5B", "*> c #AF0E0E", "=> c #7E0000", "-> c #980000", ";> c #A30000", ">> c #AE0303", ",> c #E85823", "'> c #FBBA24", ")> c #FCC221", "!> c #FACA1F", "~> c #F8E316", "{> c #F8EB14", "]> c #F8F01A", "^> c #F8EF29", "/> c #454342", "(> c #221D1B", "_> c #201B19", ":> c #3A291D", "<> c #4E2F19", "[> c #B96F31", "}> c #B96F33", "|> c #B66A2F", "1> c #AE652C", "2> c #AC652C", "3> c #A65D22", "4> c #8F6E51", "5> c #CC1515", "6> c #810101", "7> c #D31616", "8> c #E44820", "9> c #F5752A", "0> c #FA822E", "a> c #FE9130", "b> c #FCAB28", "c> c #FCB425", "d> c #FCBD23", "e> c #FACE1E", "f> c #F9DD19", "g> c #F9E516", "h> c #F8EE14", "i> c #F8F020", "j> c #F8F02F", "k> c #383636", "l> c #292A2B", "m> c #322921", "n> c #4D2B14", "o> c #894E1F", "p> c #C07036", "q> c #B86A30", "r> c #B6682F", "s> c #AE6225", "t> c #927153", "u> c #565655", "v> c #980808", "w> c #CC1212", "x> c #DF381D", "y> c #FDAE27", "z> c #F9D91B", "A> c #F9E118", "B> c #F8E915", "C> c #F8EF16", "D> c #F8F025", "E> c #F8F135", "F> c #483528", "G> c #5D3417", "H> c #915323", "I> c #995D26", "J> c #A45E28", "K> c #AD652B", "L> c #C47536", "M> c #C07132", "N> c #BE6A29", "O> c #B8682B", "P> c #B7682C", "Q> c #AF682F", "R> c #A16C41", "S> c #63615F", "T> c #BA1111", "U> c #C50D0D", "V> c #D9281A", "W> c #F3752A", "X> c #F5792C", "Y> c #FE982F", "Z> c #FDA828", "`> c #FBCB1E", " , c #FAD31B", "., c #F9DB1A", "+, c #F8EC14", "@, c #F8EF1C", "#, c #F8F02B", "$, c #F8F13A", "%, c #55351D", "&, c #CB7937", "*, c #CA7633", "=, c #B86829", "-, c #AD662E", ";, c #646463", ">, c #830303", ",, c #A60000", "', c #C00808", "), c #F26F28", "!, c #F97E2E", "~, c #FDA42B", "{, c #FDAC28", "], c #FAC620", "^, c #FBCE1E", "/, c #F8EF21", "(, c #F8F030", "_, c #F9F13F", ":, c #593D25", "<, c #744219", "[, c #B8682A", "}, c #B76C30", "|, c #BB7033", "1, c #C07033", "2, c #CD7A38", "3, c #D17B3F", "4, c #D6813F", "5, c #D47D39", "6, c #EFEDEA", "7, c #FEFEFE", "8, c #F6F6F5", "9, c #AE662F", "0, c #70665E", "a, c #A10B0B", "b, c #A80000", "c, c #BA0303", "d, c #EC5F26", "e, c #F87B2C", "f, c #FC832F", "g, c #FF952E", "h, c #FE9D2C", "i, c #FAD91A", "j, c #F9EA14", "k, c #F8EF17", "l, c #F8EF27", "m, c #F8F136", "n, c #F8F145", "o, c #624227", "p, c #CDC7C0", "q, c #C07134", "r, c #D78240", "s, c #A55D22", "t, c #886F59", "u, c #C41414", "v, c #B30000", "w, c #E74E23", "x, c #FBBC23", "y, c #FADC19", "z, c #F8E416", "A, c #F8EF1D", "B, c #F8F02C", "C, c #F8F13B", "D, c #F8F14A", "E, c #634932", "F, c #EFF0EF", "G, c #C07031", "H, c #CB7836", "I, c #CD7A37", "J, c #D78745", "K, c #D98745", "L, c #806F5F", "M, c #880505", "N, c #BA0100", "O, c #E13B1F", "P, c #FE9330", "Q, c #F8EF22", "R, c #F8F032", "S, c #F8F141", "T, c #F9F250", "U, c #C37233", "V, c #DA8C4C", "W, c #916641", "X, c #5C5D5E", "Y, c #AC0E0E", "Z, c #730000", "`, c #BB0201", " ' c #CB110E", ".' c #DA291B", "+' c #FF962E", "@' c #FDB027", "#' c #FBB824", "$' c #FADA1A", "%' c #F8EA14", "&' c #F8EF19", "*' c #F8F028", "=' c #F8F137", "-' c #F8F147", ";' c #F8F256", ">' c #624A38", ",' c #7D3F0F", "'' c #F6E3D5", ")' c #D37F3A", "!' c #D68745", "~' c #D98948", "{' c #DA8F51", "]' c #926742", "^' c #6C6F70", "/' c #CB1515", "(' c #760101", "_' c #740000", ":' c #C70F0B", "<' c #FD8530", "[' c #FE9031", "}' c #FF992E", "|' c #FCB325", "1' c #FCBC22", "2' c #FBC420", "3' c #FBCD1E", "4' c #F9DC18", "5' c #F9E416", "6' c #F8F12D", "7' c #F8F03C", "8' c #F9F14C", "9' c #F8F25B", "0' c #684F3B", "a' c #D88847", "b' c #D98D4F", "c' c #DA9456", "d' c #EDB789", "e' c #A36E42", "f' c #6B6A69", "g' c #910808", "h' c #B10000", "i' c #BB0200", "j' c #BD0803", "k' c #C30F07", "l' c #F16828", "m' c #FD9C2D", "n' c #FBBF22", "o' c #F9E815", "p' c #F8F133", "q' c #F8F142", "r' c #F8F252", "s' c #F8F360", "t' c #6D5A49", "u' c #D68240", "v' c #D98F4B", "w' c #DA9355", "x' c #6C6159", "y' c #B71111", "z' c #790000", "A' c #BC0301", "B' c #BF0A04", "C' c #D41717", "D' c #E95324", "E' c #FDB127", "F' c #F9DA19", "G' c #F9E216", "H' c #F8EB15", "I' c #F8EF1A", "J' c #F8F029", "K' c #F8F038", "L' c #F9F148", "M' c #F9F257", "N' c #F8F266", "O' c #705C4B", "P' c #D89150", "Q' c #CE8346", "R' c #D9914B", "S' c #DA9356", "T' c #747574", "U' c #28221F", "V' c #555150", "W' c #E2E2E0", "X' c #846243", "Y' c #785B44", "Z' c #790303", "`' c #BD0602", " ) c #E23F20", ".) c #FDB425", "+) c #FBBD23", "@) c #FACD1E", "#) c #FADE18", "$) c #F9E616", "%) c #F8F13E", "&) c #F8F14D", "*) c #F8F25C", "=) c #F8F26B", "-) c #695F56", ";) c #824D1F", ">) c #D9D9D7", ",) c #CF7E39", "') c #B1B5B6", ")) c #0B0806", "!) c #050402", "~) c #6F6D6B", "{) c #A88362", "]) c #7A5C45", "^) c #606162", "/) c #9B0B0B", "() c #BE0903", "_) c #CF1911", ":) c #DB2A1B", "<) c #F9F034", "[) c #F8F143", "}) c #F8F153", "|) c #F8F262", "1) c #F9F371", "2) c #655B53", "3) c #393633", "4) c #C3C4C6", "5) c #A6A5A5", "6) c #625F5D", "7) c #A99787", "8) c #896E53", "9) c #615E5D", "0) c #C21414", "a) c #BC0402", "b) c #C00B04", "c) c #C61708", "d) c #CD1B0F", "e) c #FBC220", "f) c #FAD31C", "g) c #FADB19", "h) c #F9E317", "i) c #F8F02A", "j) c #F8F03A", "k) c #F8F249", "l) c #F9F258", "m) c #F9F367", "n) c #F8F376", "o) c #615B56", "p) c #B8B5AF", "q) c #4F4C4A", "r) c #DAD6D5", "s) c #585756", "t) c #1B1412", "u) c #373330", "v) c #CACACA", "w) c #BCAA99", "x) c #90765F", "y) c #5E5B5A", "z) c #800505", "A) c #C41307", "B) c #CB1E0D", "C) c #F56F2B", "D) c #F9D61B", "E) c #F9E615", "F) c #F8F021", "G) c #F8F13F", "H) c #F8F24F", "I) c #F9F25D", "J) c #F8F36D", "K) c #F9F37B", "L) c #4E4C4B", "M) c #8A6F54", "N) c #AEAEAE", "O) c #484542", "P) c #957A62", "Q) c #CFCDCF", "R) c #E7E7E7", "S) c #CABBAA", "T) c #A8937B", "U) c #A89686", "V) c #6C6B69", "W) c #BF0804", "X) c #EC5926", "Y) c #FCB825", "Z) c #F8F027", "`) c #F9F154", " ! c #F8F263", ".! c #F8F372", "+! c #F8F381", "@! c #47433F", "#! c #805F41", "$! c #957355", "%! c #6A6867", "&! c #302A25", "*! c #BCBCBB", "=! c #A48873", "-! c #D3D3D3", ";! c #9F9996", ">! c #565756", ",! c #BC0501", "'! c #C31107", ")! c #D31C16", "!! c #E44321", "~! c #FBBB24", "{! c #F8F14B", "]! c #F8F25A", "^! c #F9F269", "/! c #F9F378", "(! c #F9F386", "_! c #504E4D", ":! c #847362", "~ c #342F2B", ",~ c #999895", "'~ c #A7A7A5", ")~ c #585553", "!~ c #C91D0A", "~~ c #CC230C", "{~ c #D12F12", "]~ c #D43613", "^~ c #E34B1E", "/~ c #F8E317", "(~ c #F9EA15", "_~ c #F8F139", ":~ c #F8F257", "<~ c #F9F266", "[~ c #F9F375", "}~ c #F8F384", "|~ c #F9F591", "1~ c #F9F59F", "2~ c #565350", "3~ c #BEBEBE", "4~ c #A0A1A1", "5~ c #D6D7D9", "6~ c #363434", "7~ c #878582", "8~ c #646260", "9~ c #BD0603", "0~ c #C71809", "a~ c #C91F0B", "b~ c #D72817", "c~ c #DB2E1A", "d~ c #F8EF1F", "e~ c #F8F02E", "f~ c #F8F24D", "g~ c #F9F26B", "h~ c #F8F37A", "i~ c #F9F488", "j~ c #F8F497", "k~ c #F9F5A5", "l~ c #5B5957", "m~ c #969798", "n~ c #999696", "o~ c #ACB0B5", "p~ c #4E4948", "q~ c #3F3A38", "r~ c #525254", "s~ c #C2C3C5", "t~ c #71665D", "u~ c #706F6C", "v~ c #CE280F", "w~ c #D83217", "x~ c #F9AE23", "y~ c #FAC71F", "z~ c #F9E017", "A~ c #F9EF15", "B~ c #F8EF25", "C~ c #F8F034", "D~ c #F8F253", "E~ c #F9F261", "F~ c #F8F371", "G~ c #F9F37F", "H~ c #F8F48D", "I~ c #F9F49C", "J~ c #F9F5AA", "K~ c #817E7C", "L~ c #D7D7D5", "M~ c #999996", "N~ c #999797", "O~ c #979899", "P~ c #959595", "Q~ c #918E8E", "R~ c #424140", "S~ c #575452", "T~ c #D9DADA", "U~ c #5C5956", "V~ c #807E7A", "W~ c #BC0401", "X~ c #C31105", "Y~ c #C51709", "Z~ c #C81E0B", "`~ c #CF2A10", " { c #DA3C18", ".{ c #F29120", "+{ c #F9EB14", "@{ c #F8EF1B", "#{ c #F8F149", "${ c #F8F258", "%{ c #F8F267", "&{ c #F9F484", "*{ c #F8F492", "={ c #F9F5A0", "-{ c #F8F6AF", ";{ c #454242", ">{ c #B1B1B1", ",{ c #E1E1DF", "'{ c #8B8A89", "){ c #9B9A9A", "!{ c #999798", "~{ c #999898", "{{ c #999896", "]{ c #9F9F9F", "^{ c #71706F", "/{ c #5B5B5C", "({ c #AAAAA9", "_{ c #C9CACC", ":{ c #D6D7D8", "<{ c #C61909", "[{ c #D63915", "}{ c #D51A18", "|{ c #E9721E", "1{ c #FBCD1D", "2{ c #F8E616", "3{ c #F8EE13", "4{ c #F8F14E", "5{ c #F8F25E", "6{ c #F9F36D", "7{ c #F9F489", "8{ c #F9F498", "9{ c #F9F5A6", "0{ c #F8F6B5", "a{ c #6B6866", "b{ c #D1D1D1", "c{ c #767371", "d{ c #7A7977", "e{ c #9D9C9C", "f{ c #999796", "g{ c #A3A09E", "h{ c #D4D4D2", "i{ c #5B5855", "j{ c #E2521B", "k{ c #F8EF26", "l{ c #F9F035", "m{ c #F8F144", "n{ c #F9F372", "o{ c #F8F380", "p{ c #F9F48F", "q{ c #F9F49D", "r{ c #F9F5AB", "s{ c #F9F5BA", "t{ c #4B4A49", "u{ c #989898", "v{ c #312C29", "w{ c #918D8B", "x{ c #999899", "y{ c #BFC1C2", "z{ c #C3C4C0", "A{ c #CAC7C9", "B{ c #CDCDCD", "C{ c #7B7776", "D{ c #4E4E4D", "E{ c #DA3019", "F{ c #F9EC14", "G{ c #F8F01D", "H{ c #F9F159", "I{ c #F8F268", "J{ c #F9F477", "K{ c #F9F486", "L{ c #F9F594", "M{ c #F9F5A2", "N{ c #F9F5B1", "O{ c #F9F6BE", "P{ c #6A6866", "Q{ c #585859", "R{ c #5D5958", "S{ c #949393", "T{ c #464240", "U{ c #BBBBBB", "V{ c #CAC7C6", "W{ c #DADBDB", "X{ c #ABABAB", "Y{ c #474543", "Z{ c #F7C31D", "`{ c #F9DF19", " ] c #F8F040", ".] c #F9F150", "+] c #F9F25E", "@] c #F8F36E", "#] c #F9F37D", "$] c #F9F48B", "%] c #F9F599", "&] c #F8F5A7", "*] c #F9F6C4", "=] c #5E5C5B", "-] c #81807F", ";] c #484746", ">] c #B5B5B5", ",] c #D0D1CE", "'] c #CCCACC", ")] c #514D4B", "!] c #F0A11B", "~] c #F9F028", "{] c #F9F155", "]] c #F8F364", "^] c #F8F482", "/] c #F8F490", "(] c #F9F59E", "_] c #F9F5AC", ":] c #F9F6BA", "<] c #F9F7C8", "[] c #565251", "}] c #A5A4A4", "|] c #AFAFAF", "1] c #C4C3C4", "2] c #D6D6D6", "3] c #E97D19", "4] c #F8F01E", "5] c #F9F24C", "6] c #F9F478", "7] c #F8F595", "8] c #F9F5A4", "9] c #F8F6B1", "0] c #F9F6C0", "a] c #F9F7CE", "b] c #6F6F6F", "c] c #555250", "d] c #C9C9C8", "e] c #9D9E9F", "f] c #969696", "g] c #969695", "h] c #949292", "i] c #B7B5B6", "j] c #DBDCDC", "k] c #848382", "l] c #464441", "m] c #E15918", "n] c #F9E816", "o] c #F8EF24", "p] c #F9F033", "q] c #F8F260", "r] c #F9F36F", "s] c #F8F37E", "t] c #F9F49A", "u] c #F9F5A9", "v] c #F9F5B7", "w] c #F8F6C5", "x] c #F9F7D3", "y] c #626261", "z] c #6D6A68", "A] c #C3C4C1", "B] c #C6C3C0", "C] c #999999", "D] c #949290", "E] c #B3B1AD", "F] c #B1B0B5", "G] c #B8B7B7", "H] c #979494", "I] c #4A4C4C", "J] c #DA3218", "K] c #F8F138", "L] c #F9F147", "M] c #F8F365", "N] c #F8F375", "O] c #F9F483", "P] c #F9F492", "Q] c #F9F5AE", "R] c #F8F6BC", "S] c #F9F6CA", "T] c #F9F7D4", "U] c #514F4C", "V] c #807F7E", "W] c #939291", "X] c #929193", "Y] c #918F8C", "Z] c #918E8C", "`] c #8A8987", " ^ c #B0B3B4", ".^ c #ACAEA8", "+^ c #B7B5B5", "@^ c #4E4B4A", "#^ c #F6D716", "$^ c #F9F02E", "%^ c #F9F03E", "&^ c #F9F14D", "*^ c #F9F25C", "=^ c #F8F36B", "-^ c #F9F37A", ";^ c #F8F388", ">^ c #F9F496", ",^ c #F8F5B3", "'^ c #F9F6C1", ")^ c #F9F7CF", "!^ c #454546", "~^ c #979693", "{^ c #C2C3C4", "]^ c #848788", "^^ c #8D9193", "/^ c #908D8B", "(^ c #8D8D8B", "_^ c #898788", ":^ c #7E7E7E", "<^ c #A2A09E", "[^ c #A5A3A1", "}^ c #AEAFAE", "|^ c #AFB0AF", "1^ c #888786", "2^ c #4A4645", "3^ c #EEB115", "4^ c #F8F016", "5^ c #F8F134", "6^ c #F8F261", "7^ c #F8F37F", "8^ c #F9F48D", "9^ c #F9F59C", "0^ c #F9F6AA", "a^ c #F9F5B8", "b^ c #F9F6C6", "c^ c #3C3A39", "d^ c #9D9E9E", "e^ c #B7B5AF", "f^ c #AEADAA", "g^ c #8B8C8C", "h^ c #888788", "i^ c #888784", "j^ c #838281", "k^ c #A09E9D", "l^ c #A4A1A1", "m^ c #ACACA7", "n^ c #6F6E6D", "o^ c #555453", "p^ c #E78815", "q^ c #F9F592", "r^ c #F9F5AF", "s^ c #F9F6BD", "t^ c #F9F7CC", "u^ c #383434", "v^ c #ACACAC", "w^ c #BABABA", "x^ c #A8A7A7", "y^ c #838585", "z^ c #A09E9B", "A^ c #A0A19F", "B^ c #575655", "C^ c #676663", "D^ c #E05E16", "E^ c #F9F14E", "F^ c #F8F25D", "G^ c #F8F47B", "H^ c #F9F598", "I^ c #F9F6B3", "J^ c #F9F6C2", "K^ c #F9F7D0", "L^ c #434141", "M^ c #A9A9A7", "N^ c #6E6B69", "O^ c #9D9D9D", "P^ c #A49E9B", "Q^ c #A7A5A3", "R^ c #555556", "S^ c #545251", "T^ c #505253", "U^ c #58595A", "V^ c #4F4E4E", "W^ c #4B4B4C", "X^ c #494B4C", "Y^ c #4F4D4C", "Z^ c #545351", "`^ c #575756", " / c #605F5E", "./ c #626160", "+/ c #676363", "@/ c #6E6A6A", "#/ c #D93317", "$/ c #F8F026", "%/ c #F9F145", "&/ c #F9F254", "*/ c #F9F263", "=/ c #F9F480", "-/ c #F9F48E", ";/ c #F8F5AB", ">/ c #F9F6B9", ",/ c #F9F7C7", "'/ c #2B2A29", ")/ c #3F4144", "!/ c #9A9A9A", "~/ c #B9B9B9", "{/ c #A2A3A1", "]/ c #ADADAD", "^/ c #7B7C7E", "// c #969797", "(/ c #A09B9B", "_/ c #A9A8A3", ":/ c #7C6653", "( c #AEAEAA", ",( c #7B7978", "'( c #9F9C9C", ")( c #AEA498", "!( c #8A542A", "~( c #925523", "{( c #995622", "]( c #A65D25", "^( c #B6642C", "/( c #C06E31", "(( c #C27034", "_( c #CA7A38", ":( c #CF7B39", "<( c #CF7C3D", "[( c #423F3E", "}( c #E78A28", "|( c #F9F264", "1( c #F9F374", "2( c #F9F382", "3( c #F9F59D", "4( c #F9F6AC", "5( c #F9F6C8", "6( c #3C3937", "7( c #A88059", "8( c #C47A43", "9( c #CA7A39", "0( c #CA7738", "a( c #C47336", "b( c #C06E34", "c( c #B66A2C", "d( c #B66829", "e( c #A65A1E", "f( c #BEBEC1", "g( c #AAA5A5", "h( c #959494", "i( c #9B9B99", "j( c #9E9D9D", "k( c #B7B4AE", "l( c #875C35", "m( c #905222", "n( c #935322", "o( c #9C5722", "p( c #AE6023", "q( c #B76525", "r( c #C26E2C", "s( c #CF7B38", "t( c #D17B38", "u( c #D17E39", "v( c #CE803F", "w( c #928F8C", "x( c #797876", "y( c #464342", "z( c #E05D23", "A( c #F9F487", "B( c #F8F495", "C( c #F9F5A3", "D( c #F9F6BF", "E( c #413D3B", "F( c #867A70", "G( c #C37B37", "H( c #CA7C39", "I( c #CF7A37", "J( c #CA7634", "K( c #C27230", "L( c #BE6E2C", "M( c #B66A29", "N( c #A95C20", "O( c #A8A6A4", "P( c #9B9898", "Q( c #A4A4A5", "R( c #875C36", "S( c #874E21", "T( c #8A5222", "U( c #915322", "V( c #A65D23", "W( c #AE6024", "X( c #C06E2C", "Y( c #C27031", "Z( c #CB7934", "`( c #D17B39", " _ c #CF7E3F", "._ c #B87135", "+_ c #8F8C8C", "@_ c #D9321C", "#_ c #F9F251", "$_ c #F9F6A8", "%_ c #F9F6B7", "&_ c #F9F6C5", "*_ c #474644", "=_ c #4D4A48", "-_ c #C47B39", ";_ c #CF7C39", ">_ c #CF7A34", ",_ c #C77330", "'_ c #B76829", ")_ c #B46324", "!_ c #C4C6C9", "~_ c #9D9B9B", "{_ c #939190", "]_ c #626465", "^_ c #6A6B6D", "/_ c #827F7D", "(_ c #968E8E", "__ c #9B9797", ":_ c #B7B5B8", "<_ c #7C4D27", "[_ c #875022", "}_ c #A15722", "|_ c #B66424", "1_ c #CF7E3E", "2_ c #C26F2D", "3_ c #41403F", "4_ c #F6E050", "5_ c #F8F383", "6_ c #F9F491", "7_ c #F8F59F", "8_ c #F9F6AE", "9_ c #F9F6C9", "0_ c #444241", "a_ c #565351", "b_ c #C77533", "c_ c #AC6122", "d_ c #8B5022", "e_ c #9FA0A0", "f_ c #6B7071", "g_ c #757574", "h_ c #A28484", "i_ c #C5BCBB", "j_ c #D3534D", "k_ c #7A4522", "l_ c #874D22", "m_ c #894D22", "n_ c #C87B3B", "o_ c #403E3C", "p_ c #EEB448", "q_ c #F8F379", "r_ c #F9F596", "s_ c #F8F6C1", "t_ c #3F3E3E", "u_ c #4C4847", "v_ c #AE672D", "w_ c #C07B39", "x_ c #A05C23", "y_ c #AEB0B1", "z_ c #9C9A9A", "A_ c #999795", "B_ c #8E8D8A", "C_ c #847F7A", "D_ c #C6403A", "E_ c #CA2934", "F_ c #7C4319", "G_ c #884A22", "H_ c #8A4D22", "I_ c #915022", "J_ c #9B5522", "K_ c #A65A23", "L_ c #C27030", "M_ c #D17A37", "N_ c #C17437", "O_ c #4D4847", "P_ c #E7883D", "Q_ c #F9F59B", "R_ c #44403E", "S_ c #BA7939", "T_ c #975521", "U_ c #834619", "V_ c #B6B3AE", "W_ c #AEAEAD", "X_ c #A2A0A0", "Y_ c #9A9998", "Z_ c #96918B", "`_ c #8C8484", " : c #6C6D6A", ".: c #73685F", "+: c #A6423D", "@: c #D14442", "#: c #E46665", "$: c #E47576", "%: c #915023", "&: c #935222", "*: c #9C5622", "=: c #C77331", "-: c #D07E3F", ";: c #605D5A", ">: c #474441", ",: c #F47529", "': c #DB291B", "): c #DF5C30", "!: c #F9F7CB", "~: c #474746", "{: c #3D3836", "]: c #453E39", "^: c #B87032", "/: c #9C5D23", "(: c #935622", "_: c #80491D", ":: c #7B4D26", "<: c #875D37", "[: c #B6ADA4", "}: c #A19C9A", "|: c #776F69", "1: c #877564", "2: c #BD2422", "3: c #E56A70", "4: c #934F22", "5: c #9C5522", "6: c #9E5723", "7: c #D17B3A", "8: c #D07C38", "9: c #585654", "0: c #E13C1F", "a: c #D83021", "b: c #F8F37B", "c: c #F9F497", "d: c #F9F6B4", "e: c #F9F7C2", "f: c #45423F", "g: c #C16F2D", "h: c #C27D3E", "i: c #9C5D22", "j: c #7E4C1E", "k: c #63391B", "l: c #C2362A", "m: c #DC5853", "n: c #E49E91", "o: c #9E4025", "p: c #9D5723", "q: c #D17A38", "r: c #D17A39", "s: c #CE7A3F", "t: c #686561", "u: c #524F4E", "v: c #F5782A", "w: c #E85123", "x: c #F5E076", "y: c #46403B", "z: c #9D9186", "A: c #B27943", "B: c #CF7E3A", "C: c #995722", "D: c #74461E", "E: c #673B1B", "F: c #7B481D", "G: c #834C21", "H: c #884F21", "I: c #844E20", "J: c #AE6022", "K: c #CFAFB5", "L: c #A15723", "M: c #AE5D23", "N: c #D17A3A", "O: c #BB8051", "P: c #474241", "Q: c #F06628", "R: c #EEB365", "S: c #F8F5A2", "T: c #3D3A38", "U: c #897563", "V: c #CD7B3F", "W: c #53321A", "X: c #72431B", "Y: c #79431C", "Z: c #814D1F", "`: c #8A5224", " < c #945828", ".< c #975E28", "+< c #935A29", "@< c #CB3438", "#< c #9C531D", "$< c #AE5D25", "%< c #AE6026", "&< c #CB7A39", "*< c #CC7A3F", "=< c #494544", "-< c #E68751", ";< c #F9F6B5", ">< c #F9F7D1", ",< c #3B3531", "'< c #696766", ")< c #9C7550", "!< c #D17A34", "~< c #814C1E", "{< c #6A3D1A", "]< c #75461C", "^< c #935826", "/< c #B86E32", "(< c #CB7938", "_< c #D07838", ":< c #AE5E27", "<< c #AE6029", "[< c #B76531", "}< c #C07034", "|< c #CB7936", "1< c #CC7939", "2< c #66615F", "3< c #4B4947", "4< c #E05B3C", "5< c #3A3635", "6< c #D17A36", "7< c #BE6A31", "8< c #935623", "9< c #8F5122", "0< c #56341A", "a< c #72461C", "b< c #79461D", "c< c #CD7A39", "d< c #D07C3B", "e< c #9B5D27", "f< c #94542B", "g< c #9C5E2E", "h< c #AF6134", "i< c #B76A37", "j< c #C27237", "k< c #CA7638", "l< c #C97B39", "m< c #3E3937", "n< c #E23E20", "o< c #D82E24", "p< c #F8F5B1", "q< c #3E3C3A", "r< c #A77243", "s< c #CB7739", "t< c #CA7636", "u< c #BE6A34", "v< c #B56933", "w< c #A85E2E", "x< c #9A5926", "y< c #7B5326", "z< c #614734", "A< c #643D1B", "B< c #75431C", "C< c #81481E", "D< c #8A5324", "E< c #AD652C", "F< c #D17E3F", "G< c #D6803F", "H< c #B35D32", "I< c #614736", "J< c #604635", "K< c #9C6436", "L< c #AA7241", "M< c #CA7937", "N< c #7B5D46", "O< c #47494C", "P< c #3C3736", "Q< c #474646", "R< c #EA5525", "S< c #F5E099", "T< c #403F3E", "U< c #35312E", "V< c #D27D39", "W< c #C77C39", "X< c #654126", "Y< c #3D3C3E", "Z< c #56351B", "`< c #D9813F", " [ c #D98242", ".[ c #C95B3C", "+[ c #B65D34", "@[ c #835734", "#[ c #454547", "$[ c #35312F", "%[ c #403A35", "&[ c #4F4033", "*[ c #504034", "=[ c #45413F", "-[ c #4D4641", ";[ c #403C3B", ">[ c #F36B2A", ",[ c #EEB380", "'[ c #F9F6BB", ")[ c #2D2925", "![ c #413B36", "~[ c #2C2824", "{[ c #2B2927", "][ c #333231", "^[ c #3C3C3D", "/[ c #3B3938", "([ c #3A3938", "_[ c #57391B", ":[ c #884E1F", "<[ c #A46028", "[[ c #AF6A30", "}[ c #CD7E3A", "|[ c #D7813F", "1[ c #B86A34", "2[ c #B66734", "3[ c #A46134", "4[ c #312F2C", "5[ c #2E2E2E", "6[ c #0E0D0C", "7[ c #1B1B1B", "8[ c #262626", "9[ c #232324", "0[ c #3A3B3C", "a[ c #39342F", "b[ c #373231", "c[ c #3D3733", "d[ c #403935", "e[ c #423C37", "f[ c #464340", "g[ c #2C2825", "h[ c #FB8130", "i[ c #E68664", "j[ c #F8F6C0", "k[ c #232223", "l[ c #2F2B27", "m[ c #454340", "n[ c #403730", "o[ c #322D29", "p[ c #312C28", "q[ c #2F2A27", "r[ c #363331", "s[ c #282726", "t[ c #030303", "u[ c #1F1E1E", "v[ c #412618", "w[ c #57391C", "x[ c #7A461C", "y[ c #A46029", "z[ c #D3803F", "A[ c #D98D4B", "B[ c #DA8A4B", "C[ c #CC593E", "D[ c #C16B37", "E[ c #B96A36", "F[ c #B66A34", "G[ c #AD6A32", "H[ c #54361F", "I[ c #D33412", "J[ c #171616", "K[ c #201E1E", "L[ c #292726", "M[ c #2A2623", "N[ c #302E2B", "O[ c #373533", "P[ c #DF5A47", "Q[ c #380303", "R[ c #640808", "S[ c #840C0C", "T[ c #990F0F", "U[ c #22201E", "V[ c #282523", "W[ c #332F2D", "X[ c #2F2C2A", "Y[ c #2B2929", "Z[ c #201D1B", "`[ c #3F3E3D", " } c #4A4C4D", ".} c #353434", "+} c #1E1C1B", "@} c #57361C", "#} c #B66E31", "$} c #D37F3F", "%} c #D78948", "&} c #DA8E4F", "*} c #DA8E51", "=} c #DA8D4F", "-} c #D9894B", ";} c #DB803B", ">} c #CD753D", ",} c #CB7037", "'} c #C06F36", ")} c #B96F34", "!} c #B66A33", "~} c #B56A31", "{} c #795231", "]} c #1E1C1A", "^} c #E2501C", "/} c #E75720", "(} c #E3461F", "_} c #DF3A1D", ":} c #444444", "<} c #373737", "[} c #DC2C1C", "}} c #DB2C1C", "|} c #DC2D1C", "1} c #DD2E1D", "2} c #DD2F1D", "3} c #D61D19", "4} c #D61E1D", "5} c #DC453C", "6} c #DC4841", "7} c #DE4F47", "8} c #E05D52", "9} c #E37466", "0} c #EA9C87", "a} c #F3D5B7", "b} c #520606", "c} c #0A0909", "d} c #090808", "e} c #080707", "f} c #080808", "g} c #333131", "h} c #302724", "i} c #4F2E19", "j} c #5F361C", "k} c #72431C", "l} c #A4642A", "m} c #DA9154", "n} c #DA8D50", "o} c #D78245", "p} c #D37F3E", "q} c #CC793A", "r} c #CB7637", "s} c #CA7237", "t} c #9B6234", "u} c #2D2926", "v} c #E34F1F", "w} c #DA2C1A", "x} c #DD4F46", "y} c #F3D4B6", "z} c #292420", "A} c #232020", "B} c #29241F", "C} c #28231F", "D} c #2B2724", "E} c #261F1D", "F} c #26221F", "G} c #2E2C2A", "H} c #38312B", "I} c #221E1C", "J} c #1D1A18", "K} c #1E1A17", "L} c #282421", "M} c #2A2523", "N} c #2D2823", "O} c #2F2623", "P} c #512F19", "Q} c #A7642B", "R} c #DA9151", "S} c #D9894F", "T} c #D37A3E", "U} c #B66A31", "V} c #A4622D", "W} c #3D3C3C", "X} c #2C2C2B", "Y} c #DE4719", "Z} c #383634", "`} c #373432", " | c #DE3E1C", ".| c #333232", "+| c #3A3A39", "@| c #3A3736", "#| c #343231", "$| c #413F3E", "%| c #484443", "&| c #444445", "*| c #494645", "=| c #D62422", "-| c #F1C8AC", ";| c #2B2521", ">| c #827E79", ",| c #894F22", "'| c #764924", ")| c #774924", "!| c #714725", "~| c #6A4326", "{| c #6A4226", "]| c #6C4125", "^| c #6A3F21", "/| c #673A22", "(| c #533624", "_| c #72461D", ":| c #CA7637", "<| c #B86E33", "[| c #A7642C", "}| c #36322F", "|| c #3F3630", "1| c #3F362F", "2| c #403831", "3| c #413831", "4| c #413932", "5| c #514135", "6| c #504134", "7| c #34302E", "8| c #D82F2B", "9| c #F6E9C8", "0| c #330303", "a| c #B46C2C", "b| c #B16529", "c| c #A85E26", "d| c #9C5A23", "e| c #8A5023", "f| c #894E23", "g| c #834D23", "h| c #7B4D23", "i| c #754622", "j| c #714621", "k| c #71411F", "l| c #6A3A1E", "m| c #54311A", "n| c #824A1E", "o| c #D98950", "p| c #D88745", "q| c #B86E2F", "r| c #A66734", "s| c #714524", "t| c #724621", "u| c #724620", "v| c #734622", "w| c #7B4723", "x| c #854E23", "y| c #8E5224", "z| c #9B5924", "A| c #A65B29", "B| c #B3622A", "C| c #B66832", "D| c #BF6E33", "E| c #978474", "F| c #E68574", "G| c #312A25", "H| c #B96B2A", "I| c #B76A29", "J| c #915222", "K| c #834D21", "L| c #7B4D21", "M| c #75461F", "N| c #71431E", "O| c #6A3A1B", "P| c #57311A", "Q| c #894E21", "R| c #935723", "S| c #AE672F", "T| c #DA8D51", "U| c #D98F50", "V| c #D8894F", "W| c #AF6E2F", "X| c #AA652D", "Y| c #7B4821", "Z| c #834D22", "`| c #A65A24", " 1 c #B66530", ".1 c #BE6A33", "+1 c #C77335", "@1 c #CC7938", "#1 c #D77F39", "$1 c #42403E", "%1 c #D82D2A", "&1 c #790C0C", "*1 c #1B1513", "=1 c #6C6967", "-1 c #C07030", ";1 c #BE6A2A", ">1 c #79491F", ",1 c #71431C", "'1 c #512E19", ")1 c #D98D51", "!1 c #A6652C", "~1 c #784921", "{1 c #79461E", "]1 c #A65A22", "^1 c #C27231", "/1 c #34312E", "(1 c #2A0101", "_1 c #1D1B1B", ":1 c #787775", "<1 c #75461E", "[1 c #71461C", "}1 c #71411B", "|1 c #4E2C18", "11 c #A7672F", "21 c #B96E30", "31 c #7B481E", "41 c #D27B39", "51 c #282524", "61 c #656362", "71 c #730B0B", "81 c #25221F", "91 c #6D6B69", "01 c #AD672B", "a1 c #BE6A2B", "b1 c #995723", "c1 c #79461F", "d1 c #703A1B", "e1 c #5D351B", "f1 c #6A3F1B", "g1 c #824A1F", "h1 c #9C5828", "i1 c #CD7A3F", "j1 c #D27B38", "k1 c #CC7A3D", "l1 c #B01313", "m1 c #241D1B", "n1 c #AD682C", "o1 c #8A5021", "p1 c #7B491F", "q1 c #79481E", "r1 c #5A341B", "s1 c #AF672C", "t1 c #884F23", "u1 c #C47837", "v1 c #383532", "w1 c #4E4B49", "x1 c #1C1816", "y1 c #B4B1B0", "z1 c #935525", "A1 c #A9652C", "B1 c #B86A2A", "C1 c #B86A29", "D1 c #814A1F", "E1 c #4F2D18", "F1 c #A5652C", "G1 c #D27E3F", "H1 c #9F5F28", "I1 c #C47937", "J1 c #A7662C", "K1 c #322F2C", "L1 c #3E3D3C", "M1 c #D51D1C", "N1 c #340303", "O1 c #221E1A", "P1 c #302B28", "Q1 c #915828", "R1 c #A7682C", "S1 c #894E22", "T1 c #5D351A", "U1 c #CF7A3F", "V1 c #B97036", "W1 c #B66F33", "X1 c #AA662D", "Y1 c #6E431D", "Z1 c #B97537", "`1 c #A7672E", " 2 c #B8AFA6", ".2 c #DF584E", "+2 c #350303", "@2 c #3D3A39", "#2 c #241D1A", "$2 c #8A4D1F", "%2 c #A36C30", "&2 c #B86A2C", "*2 c #55331A", "=2 c #AD6830", "-2 c #CB7B39", ";2 c #B97438", ">2 c #302B29", ",2 c #353433", "'2 c #EEB39B", ")2 c #36312E", "!2 c #9C642C", "~2 c #AE6E30", "{2 c #9C5A22", "]2 c #81491E", "^2 c #58361B", "/2 c #B96E33", "(2 c #BE6F36", "_2 c #AA682E", ":2 c #9B5723", "<2 c #70451E", "[2 c #C77E39", "}2 c #B17737", "|2 c #2F2A25", "12 c #4A4746", "22 c #DC4840", "32 c #F8F6D3", "42 c #C31515", "52 c #272522", "62 c #9E9FA1", "72 c #8B8D8F", "82 c #A46E36", "92 c #B86E2C", "02 c #81491F", "a2 c #52311A", "b2 c #61371B", "c2 c #8A5223", "d2 c #BE7036", "e2 c #AD6A2C", "f2 c #A8642B", "g2 c #6E421D", "h2 c #C47839", "i2 c #AA7343", "j2 c #42352B", "k2 c #F2CDB1", "l2 c #8F0E0E", "m2 c #25211F", "n2 c #8C6F51", "o2 c #B66E30", "p2 c #B76E2C", "q2 c #79491E", "r2 c #74431C", "s2 c #81481F", "t2 c #BE6F33", "u2 c #B96E2C", "v2 c #AD672C", "w2 c #6B401C", "x2 c #A45823", "y2 c #AA7342", "z2 c #EBA38D", "A2 c #D01717", "B2 c #2B2825", "C2 c #57361B", "D2 c #583419", "E2 c #71451F", "F2 c #885022", "G2 c #8A5323", "H2 c #A7652A", "I2 c #AF682C", "J2 c #AD642C", "K2 c #9C5E2A", "L2 c #744520", "M2 c #CB7B3A", "N2 c #D51919", "O2 c #EA9B86", "P2 c #600808", "Q2 c #312D2B", "R2 c #292625", "S2 c #866944", "T2 c #B76E31", "U2 c #935122", "V2 c #71411E", "W2 c #71421E", "X2 c #6A3A1C", "Y2 c #5F381B", "Z2 c #4C2E1A", "`2 c #462919", " 3 c #1A1412", ".3 c #27211E", "+3 c #321F15", "@3 c #513923", "#3 c #7E4B21", "$3 c #865323", "%3 c #9B5B26", "&3 c #9C5E29", "*3 c #A5612C", "=3 c #A7652E", "-3 c #A8652D", ";3 c #AF6A2F", ">3 c #B76A30", ",3 c #B86B31", "'3 c #AF6A31", ")3 c #A5652D", "!3 c #965B2A", "~3 c #734927", "{3 c #463123", "]3 c #724820", "^3 c #74461D", "/3 c #39312B", "(3 c #D72926", "_3 c #EFB9A0", ":3 c #312D2A", "<3 c #665743", "[3 c #A46531", "}3 c #B6652C", "|3 c #8E5122", "13 c #865022", "23 c #7E4D20", "33 c #6D421E", "43 c #5C361C", "53 c #251F1C", "63 c #292522", "73 c #3A3A3D", "83 c #211D1B", "93 c #494847", "03 c #30302F", "a3 c #241E1C", "b3 c #1A1514", "c3 c #211A17", "d3 c #241F1C", "e3 c #321E14", "f3 c #323030", "g3 c #39383A", "h3 c #272524", "i3 c #27211F", "j3 c #78461D", "k3 c #824E1F", "l3 c #875023", "m3 c #8C5322", "n3 c #D27A39", "o3 c #CE7B3A", "p3 c #3E3C39", "q3 c #E37263", "r3 c #F5E3C3", "s3 c #17110F", "t3 c #585046", "u3 c #795B31", "v3 c #9E652F", "w3 c #B36325", "x3 c #9C5724", "y3 c #77481F", "z3 c #231710", "A3 c #191211", "B3 c #231E1B", "C3 c #252426", "D3 c #302F2E", "E3 c #2B2828", "F3 c #444343", "G3 c #2C2C2C", "H3 c #131212", "I3 c #393939", "J3 c #2E2D2C", "K3 c #21201F", "L3 c #11100F", "M3 c #2F2E2D", "N3 c #343335", "O3 c #312F2F", "P3 c #2C2A2D", "Q3 c #2A292C", "R3 c #272423", "S3 c #424141", "T3 c #2F2D2D", "U3 c #555454", "V3 c #31302F", "W3 c #343433", "X3 c #1C1C1B", "Y3 c #3C3D3E", "Z3 c #4A4948", "`3 c #353231", " 4 c #343333", ".4 c #1B1715", "+4 c #342219", "@4 c #844F21", "#4 c #A65A21", "$4 c #AC6129", "%4 c #BA672A", "&4 c #BE6E34", "*4 c #CB7939", "=4 c #BD753D", "-4 c #69594E", ";4 c #D51A1A", ">4 c #D62321", ",4 c #D9332E", "'4 c #DD4A42", ")4 c #E36F61", "!4 c #F6E6C5", "~4 c #110D0C", "{4 c #56321B", "]4 c #231811", "^4 c #221B18", "/4 c #201916", "(4 c #201E1D", "_4 c #262220", ":4 c #2F2F30", "<4 c #111111", "[4 c #252525", "}4 c #2F2F2F", "|4 c #2F2F2E", "14 c #2A2A2A", "24 c #201F1F", "34 c #222221", "44 c #313130", "54 c #272727", "64 c #D23111", "74 c #3F3F3F", "84 c #292928", "94 c #181715", "04 c #383939", "a4 c #262525", "b4 c #221F1F", "c4 c #252322", "d4 c #26201D", "e4 c #4F2F1B", "f4 c #764B28", "g4 c #94612E", "h4 c #B87537", "i4 c #9C6939", "j4 c #B8733E", "k4 c #514E4D", "l4 c #F8F13C", "m4 c #F8F26A", "n4 c #F8F479", "o4 c #F8F387", "p4 c #F8F496", "q4 c #F9F6B2", "r4 c #130E0C", "s4 c #332926", "t4 c #1A1311", "u4 c #191311", "v4 c #23201F", "w4 c #3A3A3B", "x4 c #2A2A2B", "y4 c #1E1D1C", "z4 c #620000", "A4 c #BA0200", "B4 c #CA210B", "C4 c #D02E10", "D4 c #D43412", "E4 c #282828", "F4 c #131312", "G4 c #131211", "H4 c #2B2A2A", "I4 c #252424", "J4 c #221D1A", "K4 c #221A18", "L4 c #422618", "M4 c #332E2A", "N4 c #443E39", "O4 c #25201D", "P4 c #5D5D5C", "Q4 c #F8F361", "R4 c #F8F48C", "S4 c #F8F59B", "T4 c #F9F6A9", "U4 c #F9F7C5", "V4 c #13100F", "W4 c #16100D", "X4 c #2A2826", "Y4 c #262422", "Z4 c #282624", "`4 c #454543", " 5 c #3D0000", ".5 c #3F0000", "+5 c #BC0302", "@5 c #D13011", "#5 c #E5581F", "$5 c #161515", "%5 c #29292A", "&5 c #1B1A1C", "*5 c #2B2826", "=5 c #24201E", "-5 c #1E1815", ";5 c #1A1614", ">5 c #322926", ",5 c #464242", "'5 c #F8F148", ")5 c #F8F484", "!5 c #F8F491", "~5 c #F8F5AE", "{5 c #F9F6BC", "]5 c #201C19", "^5 c #161210", "/5 c #1C1614", "(5 c #2E2B29", "_5 c #525150", ":5 c #282625", "<5 c #3A0000", "[5 c #3C0000", "}5 c #C00C05", "|5 c #C9200C", "15 c #D93F16", "25 c #FF9030", "35 c #110E0D", "45 c #353333", "55 c #1D1917", "65 c #16110E", "75 c #373331", "85 c #6C6C6C", "95 c #F9F7C1", "05 c #C10F05", "a5 c #CD280E", "b5 c #DB4117", "c5 c #E85A21", "d5 c #303030", "e5 c #2B2C2C", "f5 c #3B3937", "g5 c #353131", "h5 c #474747", "i5 c #F8F362", "j5 c #F9F6B8", "k5 c #F8F7C6", "l5 c #5F0000", "m5 c #640000", "n5 c #6A0000", "o5 c #CB240C", "p5 c #D33011", "q5 c #D93D16", "r5 c #FE972F", "s5 c #FCBB24", "t5 c #F9E316", "u5 c #F8F248", "v5 c #F9F376", "w5 c #F9F493", "x5 c #F9F5A1", "y5 c #F9F6AF", "z5 c #660000", "A5 c #C61A09", "B5 c #DE4A1B", "C5 c #E14D1C", "D5 c #FE9B2E", "E5 c #FACD1D", "F5 c #F8F130", "G5 c #F9F24E", "H5 c #F9F35E", "I5 c #F9F5B4", "J5 c #F9F6C3", ". . . . . . . . . . . . . . . . . . . . . . . . + @ # $ % & * = - ; > , ' ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.", ". . . . . . . . . . . . . . . . . . . . . . . ,.+ '.# $ ).!.* = - ; > ~.{.].! ^.~ { /.^ / _ (.< _.:.} <.2 [.3 4 6 }.8 |.1.2.3.4.c d 5.f 6.h j j k l n n 7.8.q 9.0.u u a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.", ". . . . . . . . . . . . . . . . . . . . . . . ,.@ '.$ % & !.T.- U.> , ~.].) ! ~ V.] /.W./ _ : < [ :.| <.2 [.4 X.6 7 8 Y.Z.`. +.+c e f g 6.++i @+l m n o p q r s 0.t #+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+7+ .8+9+0+a+b+c+d+e+f+g+h+i+j+", ". . . . . . . . . . . . . . . . . . . . . . . ,.'.'.% ).& * = - U.> , {.].) ^.~ { /.^ W.( _ : _.[ } | 1 2 3 4 5 6 8 |.a k+l+m+n+d 5.f 6.h i @+k l m n 7.8.q r s t u #+w x y o+f.B C D E p+G H I J q+r+M s+t+u+v+w+x+y+z+A+B+C+Y D+` E+..F+@.G+H+I+&.*.J+K+L+M+N+", ". . . . . . . . . . . . . . . . . . . . . . ,.+ @ $ % ).!.* = U.; > ~.' ].! ^.~ { /.W./ ( (.< [ :.} <.2 [.4 X.5 }.8 O+P+l+l+Q+R+d 5.f 6.h i @+k S+m o p 8.r 9.0.t #+a.b.c.T+e.U+g.V+i.j.W+l.m.n.o.X+q.Y+s.Z+`+ @.@+@@@#@$@B.%@&@*@=@-@H.;@>@,@'@M.)@!@~@{@]@^@/@", ". . . . . . . . . . . . . . . . . . . . . . ,.@ '.$ ).& !.T.- U.> ~.{.' ) ! ~ { ] ^ W.( _ : < [ } | 1 2 3 4 5 6 }.(@_@:@<@[@}@|@e f g h ++j k l S+n o p q 9.9.t u #+$+%+1@z =+2@;+>+,+3@)+!+~+{+]+L /+(+4@5@6@7@8@9@0@a@b@c@d@e@f@g@h@9+0+i@b+j@k@l@J+m@;.>.n@o@", ". . . . . . . . . . . . . . . . . . . . . ,.+ '.# % ).!.* T.- ; > ~.' ' ) ^.~ { ] W./ ( (.: } p@q@r@s@t@u@v@w@w@x@y@z@`.<@A@B@C@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@D@M E@t.u+F@w.G@y+H@A+I@J@Y K@L@E+..I.@.M@H+I+N@O@J+Q.P@S.N+Q@", ". . . . . . . . . . . . . . . . . . . . . ,.+ '.# % ).!.* = - ; , ~.' ].! ^.V.{ /.W.( ( (.R@S@w@w@w@w@w@w@w@w@w@T@U@V@<@W@X@Y@Z@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.Z+.#+#@#+@##$#%#&#*#=#*@-#;#>#,#J.'#)#!#~#{#P.]#^#n@/#(#", ". . . . . . . . . . . . . . . . . . . . . + @ # $ ).& * T.= U.> , {.].) ! ~ { ] /.W.( } _#w@w@w@w@w@w@w@w@w@w@:#<#X@[#<@`.}#|#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@1#2#5@3#4#5#|+6#a@7#8#9#0#f@g@h@+.0+i@H+c+d+a#f+-.b#c#d#o@e#", ". . . . . . . . . . . . . . . . . . . . ,.+ @ # % & !.T.= - U.> ~.{.].) ^.V.{ ] ^ W.f#g#w@w@w@w@w@w@w@w@w@w@w@h#i#j#l+<@k#l#m#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@n#t.o#p#q#r#y+s#t#u#J@D.v#w#x#y#I.z#K.L.I+N@O@A#Q.L+S.B#Q@C#", ". . . . . . . . . . . . . . . . . . . . ,.@ '.# % & !.T.= U.; , {.' ) ^.~ V.] /.W.( D#w@w@w@w@w@w@w@w@w@w@w@E#F#G#[@<@W@j#H#I#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@J#:+K#L#M#N#O#$#%#P#5+&@Q#R#h@>#,#S#b+T#d+U#!@~@]#^#j+/#V#W#", ". . . . . . . . . . . . . . . . . . . . ,.@ '.% ).& !.T.- ; > ~.{.' ) ^.~ { ] ^ W.X#w@w@w@w@w@w@w@w@w@w@w@Y#Z#l#j#`# $`..$Z#+$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@@$#$6@$$%$&$6#*$7#=$Y 0#-$g@;$+.>$#.,$'$&.)$f+-.b#>.n@!$~${$", ". . . . . . . . . . . . . . . . . . . . + '.# $ & !.T.T.- ; , ~.' ) ) ^.V.] /.^ ]$^$w@w@w@w@w@w@w@w@w@w@w@/$($.$A@<@<@[@X@_$:$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@<$[$}$.@r#y.z.A.|$1$D.E.w#G.2$I.z#G+3$I+N@O.4$5$L+S.6$7$8$9$", ". . . . . . . . . . . . . . . . . . . ,.@ # $ % & !.T.= U.> , ~.' ) ! ^.{ ] ^ W.0$w@w@w@w@w@w@w@w@w@w@w@a$y@b$.$`.<@W@V@X@_$c$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@d$e$f$g$h$2+i$P#j$=#f@R#8+9+k$l$b+c+d+m$f+g+;.i+n@6$n$o$p$", ". . . . . . . . . . . . . . . . . . . ,.@ # % % & * T.- ; > ~.{.].! ^.~ { ] ^ (.t@w@w@w@w@w@w@w@w@w@w@w@q$l#X@:@l+r$`.j#s$t$u$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@v$w$x+T U x$y$C+Y D+-$x#z$F+>$M@L.A$B$C$=.K+D$M+E$F$G$H$I$", ". . . . . . . . . . . . . . J$K$. . ,.+ '.$ % ).!.* = U.; , {.' ].) ~ V.{ /.W.L$w@w@w@w@w@w@w@w@w@w@w@M$Z#X@j#[#<@<@`.G#}#N$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@P$.@r#Q$z.R$S$%@D.*@w#T$H.,#U$V$W$M.)@X$Y$5$^#S.6$7$Z$`$ %", ". . . . . . . . . . . . . . .%+%@%#%,.@ # $ % & !.T.= U.; , {.' ) ^.~ { ] ^ W.$%w@w@w@w@w@w@w@w@w@w@w@%%&%.$A@`.r$<@:@X@*%=%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@-%}+9@1+;%b@>%5+=#f@,%h@'%)%l$!%j@~%l@f+m@;.i+n@{%e#]%^%/%", ". . . . . . . . . . . . . . (%_%:%<%[%}%# $ ).& * = - U.> , {.].) ^.V.{ /.^ / 0$w@w@w@w@w@w@w@w@w@w@|%Z#1%j#[#<@r$`#V@X@*%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@3%4%y+H@5%B+C+6%v#w#7%..F+8%G+H+I+N@O@9%Q.L+S.0%Q@a%b%c%d%", ". . . . . . . . . . . . . . e%_%f%:%g%h%i%j%).!.* = U.; , ~.' ].! ^.V.{ ^ ^ / 0$w@w@w@w@w@w@w@w@w@w@k%&%1%V@`.<@r$`.j#X@l%m%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@n%##$#%#P#%@=#*@R#T$>#,#U$,@T#o%)@p%Y$]#^#q%/#r%s%t%u%v%", ". . . . . . . . . . . . . . . w%g%f%f%x%x%y%z%* T.= ; > ~.{.].) ! ~ { /./.W./ A%w@w@w@w@w@w@w@w@w@B%<#X@j#k#l+C%W@D%.$X@E%F%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@G%H%I%b@>%J%6+f@E+K%9+k$#.L%c+M%)$f+N%O%i+n@!$P%Q%R%S%T%", ". . . . . . . . . . . . . . . U%g%f%g%g%V%V%_$W%X%- ; > ~.{.].) ^.V.{ /.W./ ( Y%w@w@w@w@w@w@w@w@w@Z%&%X@V@[#<@r$`% &1%X@.&+&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@@&H@t#u##&6%D+$&T$..;@z#%&L.M.N@O@&&Q.R.S.N+Q@*&b%c%=&-&", ". . . . . . . . . . . . . . . ;&>&g%f%g%g%x%,&*%'&)&; , ~.' ].! ^.V.{ ^ W./ _ :.!&w@w@w@w@w@w@w@I#_$b$j#:@l+r$<@`#A@~&*%N${&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@]&$#^&P#/&&@7+ .-@(&,#_&'#:&<&~#!@P.[&]@}&{%V#|&1&2&3&4&", ". . . . . . . . . . . . . . . . 5&f%x%6&x%7&7&8&*%}@9&~.{.' ) ^.~ { ] ^ W.( (.: 0&w@w@w@w@w@w@w@a&}#.$V@[#W@r$<@[#b&~&*%c&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@w@3%*$7#d&9#D+e&f&z$9+g&S#,$j@h&a#9%-.b#M+E${%~${$i&j&k&l&", ". . . . . . . . . . . . . . . ,.m&n&f%x%f%o&x%7&p&8&q&r&s&) ! ^.V.{ /.^ / ( (.: _.t&w@w@w@w@w@R+u&X@.$:@`.<@C%l+:@.$1%p&v&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@w@w@w&x&y&D.v#$&G.2$z&z#K.L.I+N@O@&&Q.R.A&B#Q@8$B&C&D&E&F&", ". . . . . . . . . . . . . . . ,.+ G&H&7&x%o&f%x%7&s$s$*%I&J&! ~ V.] ^ W./ _ : _._.:.K&L&w@w@w@M&*%X@b&D%N&<@<@`.:@.$O&P&Q&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@w@w@R&S&/&Z f@ .T&>#,#_&'#c+U&l@!@V&;.W&n@X&V#o$Y&2&Z&4&`&", ". . . . . . . . . . . . . . . ,.@ *.*o&f%7&o&x%7&+*p&s$p&Z#@*#*{ /.^ W.( _ : _.:.} | 1 $*%*&****%1%V@`.<@r$<@`.:@.$X@t$=*-*-*;*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@>*d&Y K@-$f&z$,*>$#.L.'$&.a#J+K+O%'*E$)*!*H$~*{*]*^*/*", ". . . . . . . . . . . . . . ,.+ '.$ (*o&o&o&o&_*x%7&p&p&X@O&H#:*<*/.W./ ( (.: _.[ } <.2 [.3 X.[*}*1%V@|*<@r$W@D%V@.$&%1*2*j 3*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@4*%@5*E.$&T$(&;@>@V$3$6*N@O@P.7*]@}&6$8*9*`$ %0*E&a*b*", ". . . . . . . . . . . . . . ,.@ '.$ c*n&o&o&d*d*e*x%,&p&s$~&f*l#g*h*W.( _ : < [ :.| <.2 3 4 5 i**%1% &W@r$r$W@[#:@G#P&9&j*l k*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@l**#6+7+R#;$9+0+S#b+j@d+l@f+g+m*i+E${%n$o$R%n*T%o*p*q*", ". . . . . . . . . . . . . . + '.'.% ).r*o&o&o&o&o&g%x%,&p&b$f*s*t*u*v*( (.: < [ } | <.2 3 X.5 w**%1%x*<@r$<@l+[#A@X@Z#y*i z*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@w@w@A*D+-$E+..,*z#M@,$'$B$O@9%-.O%S.B#!$B*b%c%C*D*E*F*G*", ". . . . . . . . . . . . . ,.@ '.# % ).H*I*o&o&J*K*_*x%x%+*}#L*M*N&f*g*N*(.< _.:.| <.1 [.4 5 6 O*}#.$[@<@r$<@l+[#A@X@g*P*Q*R*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@w@w@S*T*F.G.>#,#J.K.L.U&m${#P.U*]@V*/#8*Z$1& %W*X*Y*Z*`*", ". . . . . . . . . . . . . + @ # $ % & !. =.=o&K*K*K*H&7&7&8&8&f*N&+=@=#=P*< [ } | 1 2 3 4 X.}.$=*%1%[#r$r$<@l+[@b&q&%=&=*=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@w@w@w@==e&g@h@+.0+S#b+j@B$l@-=m@;=>=n@,=P%'=R%j&)=!=~={=]=", ". . . . . . . . . . . . ,.,.'.# % ).& T.= ^=/=K*K*K*o&o&x%7&p&b$f*+=(=N&_=:=[ } | 2 [.3 X.5 }.<=*%1%[#r$r$<@[=[@V@m+}=|=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@w@w@w@w@1=-$x#y#;@z#%&L.I+N@*.&&Q.L+M+N+Q@2=3=c%=&4=5=F*6=7=", ". . . . . . . . . . . . ,.+ '.$ % & !.T.= 8=9=K*K*K*K*o&o&7&,&p&X@@=0=(=s*c&:.| <.1 a=b=c=5 }.d=q&}#`. $r$<@l+:@G#e=f=g=w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@h=w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@i=-$j=>#,#_&k=l=d+m$!@V&;.^#V*6$r%|&m=u%n=o=Y*p=`*q=", ". . . . . . . . . . . . ,.@ # $ ).& * T.- U.r=s=t=K*K*K*o&7&x%,&}#f*N&u=v=w=x=| 1 y=z=A=B=C=7 D=_$1%`.E=r$<@`#:@X@F=G=w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@H=I=w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@J=K=+.>$#.!%c+~%a#f+L=O%>.n@M=~$Q%R%j&)=l&N=O=P=Q=", ". . . . . . . . . . . . + @ # $ & !.* = U.; > R=S=t=t=t=o&:%x%7&l%T=s*+=u=U=V=W=1 X=Y=K*K*Z=`= -.-X@[#+-r$<@`.A@l#c&@-w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@#-j.$-w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@%-y#;@z#&-L.M.N@*-&&5$R.S.B#F$=-9$--;-E&>-b*,-'-)-", ". . . . . . . . . . . ,.@ '.# % & !.T.- U.; , {.!-~-t=t=K*o&e*x%,&p&G#{-(=+=]-^-/-[.(-d*d*_-(*:-<-7&b$N&<@<@[#.$}#[-}-w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@|-1-'+2-w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@3-9+0+S#'#T#U&e+!@V&;.^#j+o@4-o$Y&5-n=4&`&6-7-8-9-", ". . . . . . . . . . . ,.'.'.$ ).!.!.= - ; > , ' 0-a-b-~-t=K*_*g%x%,&p&f*D%c-d-e-f-g-h-f%x%,&V%,&,&,&,&,&t*D%[@j#G#i-j-w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@k-l-E p+m-w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@n-F+@.o-L%'$B$*.J+-.b#>.N+p-!*{$q-r-]*^*s-O=t-u-v-", ". . . . . . . . . . ,.+ '.$ % ).!.* = U.; > ~.' ) w-x-y-~-~-K*_*f%x%,&s$p&g%_*_*_%z-,&l%p&s$s$O&O&X@b$}#*%l%~&D%[=A-B-w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@C-i.j.k.D-w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@i=E-F-K.3$6*m$G-&&{@R.A&/@8*8$`$H-;-E&I-J-K-L-)-M-", ". . . . . . . . . . ,.@ '.$ % & !.T.- U.> , {.].) ! N-O-P-P-~-o&H&x%V%V%d*K*:%x%,&p&s$O&O&1%~&Q-D%l+ $+=+=D%O&R-[#S-T-w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@U-V-1-3@)+W-w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@X-S#b+c+d+)$f+V&;.W&n@o@Y-'=Z-n*`- ;p*q*.;+;@;#;", ". . . . . . . . . . + @ # % ).!.* T.- ; > , {.].! ! $;%;&;*;*;~-o&f%f%d*K*f%V%p&s$=;-;;;~&>;G#Q-c-M*N&(=(=(=D%s$T=,;';w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@;*);D E F !;~;`@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@{;%&H+'$N@O@=.K+D$M+];^;a%b%I$/;(;^*_;:;<;[;};|;", ". . . . . . . . . ,.+ '.# % ).!.* = U.; , ~.' ) ) ~ V.] 1;2;3;*;t=o&K*_*f%,&p&O&O&;;~&Q-4;5;6;6;7;8;A@k#@=N&c-G#~&9;0;w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@a;h.i.j.W+l.~+b;w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@c;d;T#U&N.X$e;]#]@S./#(#f;`$u%W*g;a*h;`*i;j;k;l;", ". . . . . . . . . ,.@ '.$ ).& * T.- U.> ~.~.].) ! ~ { ] m;n;3;3;*;6&o&g%l%&%o;p;~&Q-q;6; & &r;x*s;t;u;v;w;x;x;x;t*y;z;w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@h=h.V-,+3@)+A;B;C;w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@D;b+c+~%l@f+g+b#c#d#{%~$'=^%j&T%!=E;q*F;+;G;H;I;", ". . . . . . . . . + @ # % ).!.* T.- ; > ~.{.' ) ^.~ { /.J;K;*;3;t=o&g%,&s$O&;;~&Q-L; & &x*[#[#[#[#[#[#[#[#[#M;k# &x;N;O;w@w@w@w@w@w@w@w@w@w@w@w@w@w@P;Q;R;S;F !;~;T;U;w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@i='#I+&.O@&&Q.R.S.N+!$=-V;c%=&W;X;Y;:;Z;`; >.>+>", ". . . . . . . . ,.+ '.$ % & !.T.= U.; , {.' ) ! ^.V.] /.@>#>3;*;6&e*,&p&$>;;~&4;L; &x*[#[#[#[#`.`.`.`.`.[#[#[#[#x* &%>&>w@w@w@w@w@w@w@w@w@w@w@w@w@*>=>>+1-'+W+->~+;>>>w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@,>U&)@!@~@7*i+A&/#V#f;t%2&3&'>)>!>`*q=~>{>]>^>", ". . . . . . . . + @ '.$ ).& * T.- U.> , ~.].) ^.~ { ] /./>(>_>:><>x%s$O&;;~&4;L;k#[#[#[#[#[>}>}>}>}>}>[>`.|>[#[#1>2>3>4>w@w@w@w@w@w@w@w@w@w@w@w@5>6>C D E 3@G A;B;{+K 7>w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@8>k@l@9>g+b#0>];)*a>{$R%b>c>d>~=e>]=f>g>h>i>j>", ". . . . . . . . + @ # $ ).!.T.= - ; , ~.' ].! ^.~ { /.W./ k>l>m>n>l%O&o>~&4;L;k#[#[#[#`.}>}>}>`#[=[=p>}>}>[>q>r>[#[#s>t>u>w@w@w@w@w@w@w@w@w@w@w@v>g.h.R;j.k.l.~;n.o.p.w>w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@x>N@O@&&{@R.S.B#Q@=-3=--y>E&I-J-6=z>A>B>C>D>E>", ". . . . . . . ,.+ # $ % ).* T.- - ; , {.' ) ! ~ V.{ /.^ / _ (.F>G>s$X@~&H>I>J>K>[#r>`.}>`#[=L>|*|*L>L>L>M>N>[@O>P>Q>[@R>S>w@w@w@w@w@w@w@w@w@w@T>-+=>>+1-'+)+!+~+{+]+X+U>w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@V>~#W>X>;.^#n@{%4-Y>Y&Z>Z&'>`&`> ,.,9-+,@,#,$,", ". . . . . . . ,.@ '.$ ).!.* = - ; > ~.{.].) ^.~ { ] ^ W.( _ : %,}@b$~&~&I> &K>[#r>q>}>p>|*|*&,&,&,&,&,*,r$(=(=v=N&=,`.-,;,w@w@w@w@w@w@w@w@w@R*>,2@Q;D E p+G A;I ,,K r+',w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@i=),=.K+!,M+d#!$!*H$~,{,]*E*],^,t-u-};|;/,(,_,", ". . . . . . ,.+ '.$ % & !.* = U.; > ~.' ].! ^.V.{ ] ^ / _ (.< :,<,T=~&G#x;3>[@[,},|,1,L>|*&,2,3,4,4,5,C%6,7,7,7,8,+==,9,0,w@w@w@w@w@w@w@w@w@a,U+g.h.i.j.k.->~;n.b,X+q.c,w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@d,~@e,R.f,6$7$g,h,C&;-E&>-b*6=i,A>j,k,l,m,n,", ". . . . . . ,.@ '.# ).& !.T.= U.> , {.' ) ! ~ V.] ^ W.( (.: < o,m+b$1% & $p,(=N&=,q,|*|*&,3,4,4,4,4,r,u=7,7,7,7,7,8, $s,t,w@w@w@w@w@w@w@w@u,A -+;+>+1-3@)+!+~+;>]+^+v,(+<$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w,V&7*i+j+{%Y-o$^%/%Z&x,`&q*7-y,z,+,A,B,C,D,", ". . . . . . + @ # $ ).!.* = - ; > , ' ].) ^.~ V./.^ / ( _ : < E,u&X@s*(=7,7,7,F, $G,H,I,3,4,4,J,K,K,C%8,7,7,7,7,7,7,(=@=L,w@w@w@w@w@w@w@w@M,A 2@Q;D S;F !;H T;,,q+r+M N,@$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@O,-.R.>.N+F$P,H$~,r-D*E*_;G*7=u-};|;Q,R,S,T,", ". . . . . ,.+ '.# $ ).!.T.= U.; , ~.' ) ! ~ V.{ /.^ / ( (.: [ }=m+R-u=7,7,7,7,7,8,C%U,4,4,4,K,K,K,V,(=7,7,7,7,7,7,7,7,<@W,X,w@w@w@w@w@w@Y,Z,U+=>V+i.j.W+->m.n.b,X+q.Y+`, 'w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@.'U*]@V*/#(#+'`$ %@'#'Y*h;`*$'j;%'&'*'='-';'", ". . . . . ,.@ '.$ % & !.T.- U.> , {.' ].! ~ { ] /.W.( _ : < [ >','{-8,7,7,7,7,7,7,''r$)'!'J,K,~'{'+-''7,7,7,7,7,7,7,7,v=]'^'w@w@w@w@w@/'('_'-+C V-,+3@)+A;B;{+]+L v,(+4@:'w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@i=L=>=<'{%['}'Z-/%|'1'2'3'.;4'5'#;I;6'7'8'9'", ". . . . . + '.# $ ).!.* = U.; > ~.{.].! ^.~ { ] ^ W.( (.< _.:.0'Q++=7,7,7,7,7,7,7,7,u=4,a'~'~'b'c'd'8,7,7,7,7,7,7,7,7,(=e'f'w@w@w@w@w@g'e.f.B h.R;E F l.~;I ,,p.h'M i'j'k'w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@l'S.N+Q@2=m'c%y>-&n'F*:;Z;[;o'.>+>p'q'r's'", ". . . . ,.@ @ # % & * * = U.; > ~.' ) ! ~ V.{ /.^ / _ (.< _.:.t'Z#0=7,7,7,7,7,7,7,7,7,v=u'v'v'{'w'v=7,7,8,7,7,7,7,7,7,F,M*x'w@w@w@w@y'T+Z,z'=>V+1-'+W+!+m.;>b,^+q. #A'B'.#C'w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@D'A&6$V#W#t%u%E'o=Y*6-`*F'G'H'I'J'K'L'M'N'", ". . . . ,.@ '.$ % & * = - U.; ~.~.].) ! ~ { ] ^ W.( (.: < [ } O'&%0=7,7,7,7,7,7,7,7,7,''P'Q'R'S'+-(=8,T'U'V'W'7,7,7,7,8,X'Y'w@w@w@R*Z'o+A 2@C V-E 3@G A;B;J ]+L /+(+`'5@6@-%w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@ )E$)*a>{$q-b>.)+)~=@)P=#)$)#;i>j>%)&)*)=)", ". . . . + @ # % ).& * = - ; > ~.' ].) ^.~ { /.^ / ( _ : _.[ } -);)+=7,7,7,7,7,7,>)6,7,7,v=,)R'{'+-(=')))!)!)~)7,7,7,7,7,{)])^)w@w@/)d.e.f.g.h.R;S;k.l.~;T;o.p.h'r.i'()o#}$_)w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@:)B#7$=-h,H-y>-&F&J-6=Z;`;o'C>D><)[)})|)1)", ". . . ,.+ '.# % & !.T.- U.; , {.' ) ! ~ V.] /.W./ _ (.< _.:.| 2)P&+=7,7,7,7,8,T'P-3)4)7,(=4,K,R'R'v=5)))))!)6)7,7,7,7,7,7)8)9)w@0)y *+_'z'=>V+1-3@W+!+~+;>b,X+v, #a)b)K#c)d)w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@}&V#|&m=2&n=4&e)`>f)g)h){>@,i)j)k)l)m)n)", ". . . + @ # $ ).& !.T.- U.> ~.{.].) ^.~ { /.^ / ( _ : _.[ } | o)<,{)7,7,7,7,p)))!). q)7,(=4,K,<@W@N&r)s)t)u)v)7,7,7,7,7,w){)x)y)z)y z A 2@C V-E p+G H B;J q+r+M N O u+A)w$B)w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@C)!*{$~*{*c>^*/*e>D)u-E)|;F)(,G)H)I)J)K)", ". . . + '.# $ ).& T.= - U., ~.{.].! ~ V.{ /.W./ _ (.: _.:.} <.L)t$M)F,7,7,7,N)))))!)O)7,(=l+{-{-P)M)w)F,Q)R)7,7,7,7,7,8,S)T)U)V)c.d.e.U+g.h.i.j.k.l.~;T;o.p.h'r.s.W)[$v..@G@3%w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@X)8$h,H-D&Y)>-J-K-i,A>M-k,Z)m,n,`) !.!+!", ". . ,.@ '.$ % & !.T.= U.> , ~.].) ! ~ V.] ^ W./ _ (._._.:.| <.@!#!$!W'7,7,7,F,%!3;&!*!7,+=P){)=!7)+=w)r)7,7,7,7,7,7,7,7,-!p,S);!>!*+=+-+;+V-1-3@)+!+~+;>]+^+v, #,!b)'!+#}+g$)!w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@!!|&^%2&Z&~!`&6-7-+;9-+,@,B,C,{!]!^!/!(!", ". . + @ # % ).!.* = - ; > ~.{.' ! ! ~ { ] ^ / ( (.: _.[ } | 1 _!:!{-p,7,7,7,7,8,-!R)7,p,7)w))-!-![!W'6,7,7,7,7,R)[![![!}!|!o+A B Q;D S;p+!;H I ,,K r+M 1!2!3!4!w$5!T 6!w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@7!8!~,C*D*9!/*O=t-[;$)|;0!a!b!T,c!d!e!f!", ". . + '.# % ).!.T.= U.; , ~.{.].! ^.V.{ /.W./ _ (.< _.:.} <.1 g!h!T)w)7,7,7,7,7,7,7,W')i!i!-!-!Q)Q)Q)-!>)[![!r)>)[![!W'j!k!U+g.V+i.j.W+->m.n.o.X+q.Y+s.Z+.#l!m!x.@@n!w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@o! %v%o=a*b*p!'-)-B>q!l,='r!s!t!u!v!w!", ". ,.@ # $ ).& !.T.- U.; , {.' ) ! ^.{ ] ^ W.( _ : < _.:.| <.2 x!y!0=w)R)7,7,7,7,7,W'r)[!-!Q)v)4)z!*!p)p)p)')')')N)A!N)B!B!v)v)-!>)C!D!;+V-,+3@G A;B;{+K ^+/+(+4@b)3#E!}+g$F!G!w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@H!/%T%x,2'@).;+;5'#;I;I!J!K!L!M!N!O!P!", ". ,.'.'.$ ).!.* = - U.> ~.{.].! ^.~ { ] ^ W.( (.: < :.} | 1 [.Q!R!p,p,r)7,7,7,F,[!-!p,z!p)N)N)A!p)B!B!B!*!z!z!z!*!B!A!S!T!T!%!U![!V!W!Q;D S;F !;H T;,,q+r+M E@t+o#4!w$x+y.X!I%l*w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@Y!d%D*X;F*:;Z;`;Z!`! ~.~+~@~#~$~%~&~*~", ",.+ '.$ % & !.T.= - ; , {.' ) ! ^.V.{ /.W./ _ (.< _.:.} <.1 [.=~-~[!>)>)[!W'W'Q)*!N)A!5)A!p)z!Q)[!R)6,6,F,F,F,F,6,F,W'*!S!;~>~3),~W''~)~i.j.W+->m.;>b,X+v,Y+A'B'`+v.!~~~O#{~]~4*w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@^~3&o=Y*Z*`*i;/~(~I'J'_~-':~<~[~}~|~1~", "+ + '.$ ).!.* T.- U.; , {.' ) ^.~ V.] ^ W./ _ : < [ :.| <.2 [.2~3~[!r)>)>)v)B!4~S!T!T!S!N)z![!R)R)R)R)R)R)R)R)R)W'W'5~p)T!6)>~6~6)v)>)7~8~p+G A;B;{+K L /+(+9~5@3#0~a~9@6#I%b@b~w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@c~c>l&~=@)P=f>G;#;d~e~%)f~*)g~h~i~j~k~", ",.@ # $ ).!.* = U.U.> ~.{.].) ^.V.{ ] W./ ( (.: _.:.} <.1 [.3 l~V!>)>)-!*!S!m~m~n~T!T!T!4~N)o~N)B!B!')')B!B!*!B!B!N)T!T!T!p~>~q~r~N)W's~t~u~!;~;T;o.q+h'r.i't.[$p#w.r#v~H@t#u#w~w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@x~n'y~6=Z;z~Z!A~B~C~[)D~E~F~G~H~I~J~", "+ '.$ % & !.* = - > , {.' ].! ^.V.] /.^ / _ : < _.:.| <.2 [.4 K~L~W'-!N)n~n~m~n~T!T!n~T!n~M~N~N~N~N~T!M~T!M~M~O~P~N~T!T!Q~R~>~q~S~5)T~[!5)U~V~~+;>b,X+v, #W~B'X~Y~Z~~~`~2+^&P# {w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@.{Y*6- ,q=h)+{@{#,_~#{${%{n)&{*{={-{", "@ # $ ).& * T.- U.> , {.].) ^.V.{ ] ^ / ( _ : _.[ } | 1 2 3 ;{>{,{z!'{n~T!N~){T!N~T!!{T!~{{{~{T!T!T!T!T!T!~{T!~{T!T!T!]{^{>~u)R~/{({4)_{:{U!W!I J q+r+/+N 9~3!Q <{%$T 6#V [{C+5+}{w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@|{s-1{P=u-2{3{F)(,G)4{5{6{K)7{8{9{0{", "@ # $ & !.* = U.; > ~.{.].) ^.~ { /.^ / _ (.< _.[ } <.1 [.3 a{b{[!c{3)d{e{!{T!T!T!T!n~~{n~n~n~f{n~!{T!~{~{~{~{~{T!T!~{g{~)>~6~O)%!B!4)v)h{p)i{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@w@j{J-K-Z;`;B>k,k{l{m{D~ !n{o{p{q{r{s{", "'.# % & !.T.- U.> , {.' ].! ~ { ] /.W.( _ (.< [ :.| <.2 3 t{u{R)*!q)v{R~w{x{T!T!T!!{!{~{~{!{~{T!T!!{T!!{!{!{T!~{T!T!~{n~_!u)q~p~;~y{z{A{B{>)C{D{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@E{`>f)+;@;F{G{B,C,D,H{I{J{K{L{M{N{O{", "'.$ ).& * T.- U.> ~.{.' ) ^.~ { ] ^ W.( (.: < [ :.<.1 2 P{Q{v)>)5)O)3)>~R{){T!T!T!T!T!T!T!T!~{T!~{!{~{~{!{~{T!~{T!T!{{S{q~3)T{s)S!U{z!4)V{W{X{Y{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@w@Z{D)`{ >|;0!a! ].]+]@]#]$]%]&]0{*]", "# % ).!.* = U.; , {.' ].) ~ V.] /.W./ ( (.: [ :.} <.1 [.=]-]>)-!A!V'q~3)6~;~e{T!T!T!!{~{~{!{!{~{!{!{!{f{f{!{f{f{~{~{N~'{3)q~;];~>]B!*!z!4),]'])]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@w@!]$'j;%'q!~]='r!{]]]u!^]/](]_]:]<]", "$ ).& * T.- U.> , {.' ) ! ~ V.] /.W.( _ : < [ :.| 1 2 [.[]}]5~Q)B!6)R~6~u)_!T!T!T!~{!{!{!{!{!{!{f{f{n~n~n~n~n~n~{{f{P~%!u)O)%!N)|]')B!z!z!1]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@w@w@3]+;z,#;4]I!7'5]L!M!6](!7]8]9]0]a]", "$ ).!.* = - ; > ~.{.].! ^.~ { /.^ / ( (.: _.[ } | 1 [.b]c]z!-!d]4);~p~q~u)u)d{e]!{!{f{n~n~n~n~f{n~f]f]n~f]g]g]S{g]S{h]S~6~R{T!>{N)N)i]B!z!z!j]k]l]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@m][;n]`!o]p]q'.]q]r]s]&~t]u]v]w]x]", "% ).!.T.= - ; , {.' ) ! ~ V.] /.^ ( _ (.< _.:.} <.1 [.y]z]-!Q)A]B]A!/{O)3)>~p~m~C]n~n~f]f]f]f]g]g]g]S{S{S{S{S{S{S{Q~D]_!T{n~E]A!N)N)N)F]G]G][!H]I]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@J]j;%']>J'K]L];'M]N]O]P]={Q]R]S]T]", ").& !.T.- U.; , {.].) ! ~ { ] /.W./ _ (.< [ :.| <.2 [.U]V]>)v)z{z!U{'{S~O)3)u)d{T!W]S{S{S{S{X]X]X]Y]Z]Z]Z]Z]Q~Z]Z]'{`];]d{ ^5)A!A!A!.^N)+^+^r)H]@^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@w@#^#;d~$^%^&^*^=^-^;^>^k~,^'^)^T]", ").!.* = - ; > ~.' ].! ^.V.{ ] W.W._ _ : _.:.} | 1 [.3 !^~^[!{^z!*!B!>{]^s)O)3)O)^^/^w{w{w{(^(^'{'{'{'{'{'{'{'{'{'{_^:^q)<^[^5)5)5)A!A!A!}^|^-!1^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@w@w@3^4^o]5^[)r'6^$~7^8^9^0^a^b^T]T]", ").!.* - U.> , ~.' ) ! ~ V.] /.^ / _ : < [ :.} <.2 [.3 c^d^>)B]z!B!e^N)f^]^S~T{u)%!S{g^'{'{'{'{'{'{'{'{'{h^h^h^h^i^k]j^%!k^S!l^5)5)5)5)5)A!m^v)n^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@w@p^@{i)$,#{${<~n)&{q^={r^s^t^T]T]", "& * T.- ; > , {.' ) ^.V.V.] /./ ( _ : _.[ } | 1 2 3 X.u^v^>)w^*!B!e^N)A!x^n~%!q~O)'{'{'{'{_^_^h^]^]^k]k]k]k]k]k];~;~y^d{T!z^S!S!S!A^S!l^5)5)B!B^C^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@w@D^/,(,G)E^F^6{G^7{H^k~I^J^K^T]T]", "!.* = U.; > ~.{.].! ^.V.{ /.W./ ( (.< _.[ } <.1 [.3 X.L^M^>)w^G]N)N)A!A!5)x^}]d{q~N^'{k]k]k];~;~;~;~;~;~;~;~;~;~;~;~;~;~O^T!T!T!T!T!T!P^S!Q^4~r~R^S^T^U^V^W^X^Y^Z^`^ /./+/@/^{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@#/$/E>%/&/*/.!=/-/q{;/>/,/T]T]T]", "* T.- U.> , ~.' ].! ~ V.] /.W.( _ : < _.} | <.2 [.4 '/)/!/>)~/B!N)A!A!5)5)5){/]/d{S~;~;~;~;~;~;~;~;~;~;~;~;~;~;~U!^/;~;~//T!T!T!T!T!T!T!(/_/:/ ~.{.].) ^.V.{ j/k/l/m/n/o/p/q/r/9/N-N-s/t/u/z=v/[!>]N)A!5)5)5)5)l^A^O^w/%!d{;~;~;~;~;~x/^/y/d{;~d{d{T'd{d{d{d{w{~{T!T!T!T!T!T!z/T)A/B/C/D/E/F/G/H/I/J/K/]^L/K/K/'{M/L/N/O/w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@P/S,Q/5{6{R/S/T/U/V/W/X/T]T]T]", "* = U.; , ~.{.) ! ^.V.Y/Z/`/ (.(.(+(+(@(#(I/$(%(&(*(=(-(@=Q);(>(A!5)l^A^A^A^T!T!T!;~d{,(d{d{d{d{d{d{d{T'c{d{d{N^^{d{d{T';~g]~{T!T!T!T!'()(!(~({(x;](^(/(((_(:(<({)Q~]^K/;~K/L/K/z][(w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@}(n,{]|(1(2(p{3(4(:]5(T]T]T]T]", "T.- U.> , {.' ].! ~ { 6(`/T!T!T!,~,~m~^^7(8(9(0(a(b(c(d(e(S)f(g(5)A^T!T!T!T!T!T!T!w{d{d{d{d{T'd{d{d{d{^{%!T'T'c{T'c{^{T'd{h(!{i(T!~{j(k(l(m(n(o(3>p(q(r(*,s(t(u(v(l+P)M/w('{'{'{x(y(w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@z({!]!M!/!A(B(C(N{D(i/T]T]T]T]", "T.- ; > ~.{.].! ^.~ { E(.(Q~K/]^K/L/F({-G(H(s(I(J(K(L(M(N(@=Q)O(S!T!T!T!T!T!T!T!~{w{d{c{T'T'T'T'T'T'~)^{T'^{^{^{^{^{c{^{^{Q~!{P(i(Q(p)R(S(T(U(o(V(W(X(Y(Z(t(t(`( _._@==!,~T!S{,~+_Y{w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@@_#_q]r]#]&~*~$_%_&_x]T]T]T]T]", "= - ; , ~.' ].! ^.V.*_=_]^]^K/'{K/M)x*`.-_;_t(t(>_,_r('_)_j#7)!_~_T!T!T!T!T!T!T!f{{_c{^{^{]_N^^{^{N^%!N^^{^{%!N^^{^{^{^_^_/_(___:_w)<_=;[_~&U(}_p(|_X(Y(Z(t(t(`(1_2_P^')5)5)5)S!x(3_w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@4_M]1(5_6_7_8_R]9_T]T]T]T]T]", "- ; ; , {.].) ^.~ V.0_a_K/m~m~n~m~T!{-K>-_s(t(t(I(b_r('_|_c_d_+=!_e_T!T!T!T!T!T!f{w{c{~)^{~)%!^{f_~)^{N^N^^{^_N^^{^{^_^{N^g_h_i_j_7&k_l_m_~&n(:@W(q(r(*,I(t(t(`(n_[#@=)(p)N)5)^{6/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@p_=)q_i~r_8]I^s_)^T]T]T]T]T]", "U.; > , {.].) ^.~ ] t_u_]_Q~A!5)5)7)s*v_w_s(t(t(t(*,r(=,|_p(x_1%{)p)y_z_P(T!T!T!A_B_^{~)~)^{^{%!%!~)^{^{N^^{^{^{^_^{^{f_^{^{C_j_D_E_F_G_H_I_J_K_W(N>L_*,M_t(t(`(N_ $7))(B!T!s)q~O_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@P_F~7^8^Q_J~%_&_T]T]T]T]T]T]", "U.; , {.' ) ! ~ { ] j/R_O)O)~)A!A!=!{-@=S_:(s(t(t(*,r(r(|_p(K_T_U_R-{)A!V_W_X_Y_Z_`_^{%!^{f_ :^{ :f_%!^{~)f_^{%!f_f_c{.:+:b&@:#:$:#:D_P&%:&:*:V(|_N>=:Z(M_t(`(-:r(T)B!B!B!o~S{;:>:y(~#,:':w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@):N]}~*{={Q]s^!:T]T]T]T]T]T]", "U.> , {.' ) ^.~ { /.~:{:]:p~;~')p)B!')=!^:-_t(t(t(>_*,r(|_p(/:(:T(_:V%::<:P)=!7)[:}:~)T'^{T'T'^{T'T'T'T'^{|:1:F(s*+:b&E_2:2:#:3:#:$:#:b&4:5:6:V(q(X(*,Z(M_t(7:8:@={-,~A!A!N)B!')6/9:a#=.0:w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@a:b:7{c:k~d:e:K^T]T]T]T]T]T]", "; > ~.{.].) ^.V.{ /.W.f:S~N)*!B!')B!P^M*g:h:`(t(t(t(*,r(q(p(i:(:o>o;j:,&_%k:l%T=~&R-r(*,&,q:r:s:{-M/Q~S{S{n~n~T!A!t:u:O.v:w:w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@x:-/3(r{>/,/T]T]T]T]T]T]T]", "; , ~.' ) ! ~ V.] /.^ y:^{')A!S!S!T!z:'{{)A:B:`(t(t(*,r(q(W(p(C:o>o;D:f%E:F:G:H:~&I:O&*%p&}#1%.$j#j#V@e(e(J:k#t*b&l:E_@:@:#:#:#:#:$:K:3:b&L:M:W(N>r(*,&,2,N:O:T'U!;~;~;~]^'{M/S{t:P:f+V&Q:w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@R:g/S:h/O{t^T]T]T]T]T]T]T]", "> , {.].) ^.~ V.] ^ / T:^{,~w('{'{'{K/]^]^U:V:7:`(t(*,Y(N>q(p(o(~&o;+*W:X:Y:Z:~&~&`: <.<+<~&::O&T=T=~&R-~&t*A@D%`.@Y(Z(&,&<*<|:%!N^^{^{c{T'd{d{;~s)= ~.' ) ! ^.V.{ /.^ / ,<'}>}>[=|*&,&,(<_}>[=|*&,&,2,s(c}>[=|*&,&,:(F}>[=|*&,2,B:4,4,4,`-[p~p~q)p~_!_!m<;[P.{@^#q%>[w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@,['[9_T]T]T]T]T]T]T]T]T]", "{.' ) ^.^.{ ] /.W./ _ (.)[3_q)q)p~p~q)q)q)-[T{X<[x*[#[[`.}>}>|*&,2,}[4,4,|[K,K,K,K,K,@:E_E_@<@:m:m:@:@:1[2[3[4[5[6[7[8[9[0[([a[b[c[d[e[f[#>=[g[f+g+;.i+E$h[w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@i[j[)^T]T]T]T]T]T]T]T]T]", "' ].) ^.~ { /.^ W.( (.: k[l[m[;]O)O)#>n[o[p[q[r[J;s[w@w@w@w@t[u[v[w[V%x[O&~&Q-I>y[x*[#`.}>}>[=|*&,c}>|*&,&,$}4,4,%}~'b'&}{'*}=}-}K,;}`%j_`%>},}'})}!}~}{}]}%#P#*#=#Q#^}-@H.,#/}(}_}:}<}[}7!}}|}|}1}2}3}w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@4}5}6}7}8}9}0}a}T]T]T]T]", "' ) ! ~ { /.^ b}r@w@w@w@w@w@c}d}e}f}w@w@w@w@w@w@w@w@w@w@w@w@g}h}i}j}k}C~&q; &l}E}>}>p>|*&,2,G<4,J,~'b'{'{'+-m}{'n}-}K,o}p}q}r}s}p>}>}>`.t}u}[{=$9#6+f@f&T&v}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@w@w@w@w@w@x}y}T]T]", "].! ^.V.{ z}A}B}C}D}M[E}F}G}H}g[N[D}F}I}J}w@w@w@K}L}M}u}N}O}U~&q; &Q}E[>}>p>|*&,:(4,4,%}-}{'R}+-+-+-m}{'S}K,J,4,T}&,r}[=}>}>U}V}{:W}X}Y}Z}T:`} |i=w@.|+|([`}@|#|r=$|G=%|%|&|3<*|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@=|-|T]", "].! ~ { ;|B^-]`/`/`/ ( (>| (P)k#I>~&~&,|g*'|)|!|~|{|]|^|/|(|e*K*W:f%_|C~&t* &Q}E<[[}>}>p>:|&,,)4,4,J,S}{'R}+-+-+-+-R}b'K,J,4,)'&,&,[=`#}><|[|6&}|||1|2|3|4|3|*[2|R=5|5|=[R=R=6|#>>:#>>:>:#>>:=[7|*|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@8|9|", ") ^.~ 0|o[S{T!S{,~w(S{w(S{^^{)a|b|c|d|x;e|f|g|h|i|j|k|l|x%x%f%o&m|f%_|n|~&~&q; &Q}E<[[#}}>[=:|&,,)4,4,J,S}{'R}+-+-+-+-{'o|p|4,4,)'&,&,[=}>}>q|r|::s|t|u|v|w|x|y|z|A|B|C|D|[=*,|*E|;~C_L/C_L/L/L/'{N^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@F|", "! ^.^ G|a_'{K/K/]^]^]^]^C_M*N>H|I|W(V(x;o(J|f|K|L|M|N|,&O|x%x%o&P|f%_|C[=|*&,,)4,4,J,~'T|{'+-+-+-R}U|V|J,4,4,B:&,&,'}}>}>W|X|+*+*+*+*Y|Z|~&(:`|<< 1.1+1&,@1#1N&K/'{K/]^]^'{'{'{w{3_$1w@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@%1", "! ~ &1*1=1'{]^K/L/;~1:X'R-k#-1;1N>|_p(V(o((:~&Q|O&>1+*,17&x%x%o&'1f%k}C[=|*&,&,4,4,!'K,-})1{'{'{'n}b'%}4,4,4,B:&,|*'}}>}>[#!1~1+*+*{1O&~&(:]1p(|_N>^1Z(M_q:V<)'@=E|w{'{K/L/K/]^'{/{/1w@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@", "^.(1u@_1:1n~Q~w(S{S{L/<:1%3>;1;1N>|_p(V(x;81<1[1}1x%x%o&|1f%k}s$K|~&R| &k#11[#`.`.`#[=&,&,F<4,4,J,~'~'S}S}b'~'%}!'4,4,4,c<&,|*'}}>21[# &+*+*+*31O&~&o(]1p(N>r(*,&,t(t(41&,}>k#f*1:S{w('{'{w{c{5161w@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@", "^.71w@8191w{4~T!T!T!A!E|O& &01a1a1|_p(p(x;b1G#Q|K|>1c1a<,&d1x%e*o&e1f1s$g1~&~&h1k#11[#`.`.}>[=|*&,c<4,4,4,J,J,%}%}%}J,!'4,4,4,i1&,|*[=}>}>|>[#I>+*+*+*31~&~&o(3>p(N>r(Z(M_j1t(t(k1[#3>{-T!T!T!,~n~T!K/}|9)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@", "~ l1w@m1N/t:S{5)A!A!M/L*}#I>n1a1a1I|p(p(K_o((:o1K|p1q1_|,&}1x%f%K*r1x%bp>|*|*&,:(4,4,4,4,!'!'4,4,4,4,4, _&,&,|*p>}>21[#s1t1+*+*+*Z:~&J|o(J:p(N>L_Z(M_j1t(s(u1`. &=!N)5)4~5)N)'{%!v1w1w@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.v@w@x1Y^O)p~U!y1N)=!P)s*z1A1B1B1C1p(J:]1o((:~&Q|D1q1+*,&,&x%f%o&E1f%B}>`#|*|*&,c}>`.[#H1+*+*+*+*Z|~&(:]1p(|_X(=:Z(M_j1t(s(I1J1x;c-=!N)N)A!L/R{S~K1L1w@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@M1", "N1w@w@O1P1_!d{4~B!y1*!4)7)Q1R1B1C1C1W(J:]1o((:~&S1O&q1+*k},&x%x%f%d*T1}1s$T=~&~& & &x*[#[#`.}>}>'}|*|*&,cW1[[X1T=Y1+*+*{1o>~&o(]1p(q(X(*,Z(t(t(t(s(Z1`1{)7))( 2B!d{O)R~O_C}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@.2", "+2w@w@@2#2T!z!B!y1y1o~P^<:$2%2c(&2C1|_J:3>o(o(~&S1O&p1<1k},&x%x%f%o&*2x%p&s$~&~&~& &x*x*[#[#`.}>}>'}|*|*&,&,&,&,&,&,&,&,&,:|L>[=`#}>}>`.=2I>+*+*+*+*31S1~&o(3>p(N>r(*,>_t(t(:(-2;2 &7)')B!B!B!N)w{S~>2,2w@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@'2", "f#w@w@)2m{2o(~&~&O&]2q1_|,&7&x%x%o&o&^2,&s$T=~&~&t* &x*x*[#r>/2}>}>(2p>L>|*&,&,&,:|:|t[=p>'}}>}>`._2:2+*<2+*+*{1Z:S1~&o(p(|_N>L_*,&,t(u(,)[2}2k#M*7)N)N)N)B!*!5)|212w@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@2232", "] 42w@52O_62n~n~S{w{'{^^72'{1:829292M(J:J:{2o((:~&K|02q1+*,&7&x%x%e*o&a2b2B/2}>}>}>d2[=[=[=[=L>L>[=p>}>}>}>[>e2f2t*l%g2+*+*+*{1O&S1U(o(p(q(N>Y(*,I(t(`(B:h2i2E|w{m~T!T!4~5)5)N)O_j2w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@M1k2T]", "/.l2w@m2O_Q~]^L/;~;~;~U!T'T'd{n2o2p2p2p(p(]1o((:~&Q|Z:q2+*,&7&x%x%e*6&o&K*h%r2s2~&~&H> & &x*x*s1|>q>21[>}>t2}>}>}>}>}>}>}>}>}>u2v2 &O&+*w2+*+*+*{131O&;;o(x2p(q(X(=:Z(I(`(`(B:y2C_]^]^]^Q~Q~w{S{n~S!a_7|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@z2T]T]", "/.Q[A2B2v1U!d{T'^{^{^{N^~) :%!t:M*X(X(q(p(p(x;{(~&Q|Z:q2+*,&7&x%C2r1e*o&K*K*K*D2E2F2e|G26; &H2x*v2I2|>21[>[>}>}>}>}>}>}>}>/2J2K2t1+*V%+*L2+*+*+*{131O&T(o(V(|_=,r(*,&,I(`(7:M21:T'd{d{d{U!;~;~L/]^'{O_H}w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@N2O2T]T]T]", "^ W.P2Q2R2~)~)N^%!23,3/2}>}>'3)3!3~36&K*{3K*_*x%V%X<]<]3^3+*{1Z:K|o(K_|_=,r(Z(&,4141N:@=%!%! :N^^{^{^{T'd{d{;~q~/3w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@(3_3T]T]T]T]", "^ / ( :3K;6);:;:/{R{;:s)V'R{V'_!<3[3}3q(J:x;B/|313233343K*b-2;2;K;536373m/83+|93038=a3b3c3d3e3K*_*_*e*XJ(&,n3r:o3:/6)6)6)24,4'4)4z2!4T]T]T]T]T]T]T]", "W./ _ (.~4R3V'p~p~p~p~q)p~p~p~T{]:X<{4]4z3^4/4(4_4$1:4<4@+l S+n 7.p q r s 0.t #+$+%+1@z =+-+C V-[4}4|41424344454/+(+4@5@6@4#}+|+h$64b@c@9#748494W304a4b4c4d42;.=e4f4g4h4i4j4S~;]_!_!_!V'V'S~S~R{R{p~2;k4l48'9'm4n4o4p48]q40]a]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]", "W.( _ < _.r4=[q)p~;]]:3)s4U'2; 3t4u4v4w4x4y4I3w-6.++i @+k S+m n 7.p q 9.s t #+v z4x y e.f.B Q;D S;F !;H T;,,q+r+r.A4t.o#4!q#B4y+C4D4I@#&5*D+L@x#..F+@.G+E4F4G4H4I4J4c3K4L4A=M4N4-[p~p~p~_!_!_!_!r~R2O4P4q'@~Q4r]%~R4S4T4V/U4T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]", "/ _ (.< _.V4W4U'U'*;3;u4J4X4Y4Z4`403 5.5c e 5.f 6.++j @+k S+m 7.p 8.r 9.0.t #+a.b.&+T+_'z'=>V+i.j.W+->m.n.b,X+q.Y++5Z+.#c)!~+@Q$@5%#P#*#=#Q#=@-@#5,#_&'#W$!#N.p%Y$$5S3%5&5*5=5-5;52;>5v{u)]:-[_!q~3;,5K]'5:~N'N])5!51~~5{5S]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]", "( _ : _.[ :.]5^5/5(5_5:5$57 |.9 <5[5b .5c e f g h i j @+l m n 7.p q 9.9.0.u #+$+%+1@z =+2@C V-E p+G A;B;{+K L /+(+4@}56@4#|59@H%I%[{159#6+7+ .K=+.>$S#,$c+~%*.9>N%b#M+n@)*25'=35455155z}d4x1t)*;657585%)f~*)=^-^i~j~k~I^95)^T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]", "( (.: _.[ } <.1 [.4 X.5 }.7 |.<50 5b .5d e g g ++i j k S+m o 7.8.r 9.s t u v b.x d.e.f.B Q;R;S;F !;~;T;,,q+h'r.A4t.05p#w.x+a5H@t#u#b55*D+w#T$y#c5@.K.L.I+N@O.&&Q.L+S.B#Q@2=3=H-=&-&I-d5e5L[$|f5g5h5C~[)D~i51)7^-/S40^j5k5T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]", "_ (.< [ :.| <.2 [.4 5 6 7 8 9 <5[5 5.5c e 5.g 6.++j @+l S+n 7.7.8.r s 0.t #+l5m5n5*+_'z';+>+i.'+)+->m.;>]+^+v, #W~Z+<++#!~o5O#p5i$q5/&=#Q#R#-@(&z&_&'#T#U&~#,:V&7*^#q%{%V#r5m=2&3&s5Y*6-f)g)t5{>@{#,$,u5l)m)v5)5w5x5y5s^t^T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]T]", "_ : _.[ } | 1 [.[.X.5 6 7 |.9 <5[5b .5d e f g h ++j @+l S+n 7.8.q r s t #+#+w z51@o+=+2@Q;V-,+p+G A;B;J K L M N `'P Q A55!T U 5%[{=$Y B5C5E+T&,*>$M@,$%.h&*.-=K+P@0>d#M=~$D5~*{*.)d>~=E5t-#)$)`!F)F5G)G5H56{K)7{8{9{I5J5>\a__ggnqR%M’$h~‰™¤½ÝÍ¥“‰xw Ì Na_aajjx{uI1UQi€‰¡¯ÑÖÌœ‰‰xlÍ OVa_aagqzu~D5%ix‚™¤½Öѹ›Šz}\Í:^_gRgqqyzst\"ŒZr“¡¯ÍÖѯžŠz~TÎ\L_g_Mgqyy€qz`\OŒkw‰“¤¶Ñݽ¤“‰y}HÏ"\UqgM_gqzpnhJJÜt£ƒfz‰ž¥»ÑѶ¤“ƒ€)ÏPLM_qMgqryyy}nC8€¥‚`‚sz‰¡¶ÑÖѶ¤“‰wmÐ3ZM Qgqyy‰ƒ€tu1 €¼W^‚!r‰¡ÄÑÖÍ¥¡“€ueÐVLMMPPWgqyŠ™ˆv{€Èq7©€ &qz‰œÍÖÖͯ¤‘€tPÐ0Z‚M agqy‚™”“g€f‚­oz‰§ÑÖѽ¯›‰ynH@Ñ+TJMM?EQggr¤»™vpsRtzh q“­ÑÖѽ¯›‰vfCÒS5M€E!Uqqyy™»Ãª|f&x5O04 pz‰¯ÖÖѽ­ž€uMÔ&V6€E"MMgqy‚™Ãè»wt &nc'&sz‰¯ÖÖÑÀ­¡d# Ô<9E!MMqqy‰ªËè”~gqNaf;i€¶ÌÖѽ¤‘}R ,Ô9@5€E Mqgq™»íîh Y^ENWkx‰¶ÜÖѹ¤‰|CaÖD3€5$MWgqu”ÃíËxX9CEEMN^t‰¯ÚÖѶ›ˆ~LC–‚¨Ò;355EMWgqy‘¦èÃs]E=€PZ``q‚»Ñѯ“yY8B„WÒC ==535EQagqy™¥™q_V>[_gqj‚q “¥­™‘‡s 7xÔ'60$33EQ_gqyaQQ\_quyƒƒ‰‚zuŠ¥À­‰F(Ö(S1%%3MUgjjPEWgqyƒƒ‰Š“¥½ÌÃÃ¥ƒˆ¯¤}E>=“΀ÜCI"3M__PE_jy‚‚‰Š‹‘“™¤»€è ¥›|\‚žÓ½€Ü‚!-G$5MEQ_qyƒƒ‰Š““™œœž›¤ª»™‘Їh ‚ŽÓ½çHG<RMau€ƒˆŠ““€œ¤§§­¯ª¡€œ“’„56Žï½‚¤€?0*5Maqƒ‰Š“™œœ§†¯ ¨¤œœ•i Ÿï½‚¤dTAKLRWqy‚‰Š“™œ§¯‚¶¯§œ›{$³ï½‚¤€a$E" :Ngƒ‰Š“™¤¯„¹¶¶¯¯®¬¦;€ï½‚Ï€ . 8)2Muƒ‰Š“™¤€¯¶¹€À€¹ ¸¶¯¯®’VbÏ,H]‰Š‘™¤­¯¶¶¹¹ÀƒÄ À¾­¸·¯­¡c Ó½‚σ Us‚ŠŠ™œ­¯¶¸¹ÀÄÄ‚Ë ÊÖèè¶­dĽ„ÏYtŠ‘œ¦­¸·»ÀÄÄËÍÑÖÖÔÝï€þöø®p€Ž¼½…Ó€ b‚‰œÌÍ軸ÀÄÄËÑÖ×í‚þöÌ¥ˆ&€Ž¦½†Ê$cw‰”è€þ ïÌÀËÍÑÖÖ×ÙÙÝöƒþ誀<€ŽÙ½†‹dˆí‚þöÝÀրÙÚè…þÑ‘\ŽÙ½†›)b}¦öƒþ öÖÓÖ×ÙÙÚÚö…þî’l ŽÊ½†¬:h~Ã…þíÖØ€ÙÚíö…þè£k€Ê½†ÀAmyˆþ îÖÙÙÚÚîþþöƒþï¤l7€Ã½†Ü Np€Ë†þ öØÎÙÚÚèöt(Uâþö„xO€þ½†Ü Ni‚ÃþÙïþþîÏÙÚÚè± o‚þ¨z`$€Œþ½†Ü€4e€Ãþöt%9ÃþèÖ€Ùî¦ b‚þ©‰aGŒþ½†‚€at¨þ¸ OþèÖÙÑÍ»ÚX7Ê‚þ¼¨^!€‹ï½†™€NwŠï€þ® Hþ车¦•мïÏç‚þöʨ¨lQ%‹ï½†¦€G€•â€þ ïj0¼þÕ¨¤©Ã¼Ú…þÓÍÊŸV'€ŠÜ½‡· P„¦ÍþöÓçþÍ©¼ÊÊÓÙÓÓÜâïþç€ÜÉnN"€‰Ü½‡ÍT•¨¼„þ âÊÓÜÜÙ××ÓÓ€Ï ÓÙÜÜÚÙÜÜâªT1€‰Ï½†Ê€U¦Ë¼ç‚þâÚÜÓÏÊÃÀ¼€¸€± ®ª®··ÊÊÓÙ‹J€ˆÏ½†¼€E\¨ÍÍÚ€þ ïÜÓÍÀ¸®®ª¸€·¼€À ¼·ª¤››jÜÈdK!€‡Ï½†ª€SZ»ÜÙÙÜââϼ®ª¦ª¸ÀÏÜç…ï ⼤‚49™â§X_!€†Ï½†Ü€4V¾ÜÚÙÙÊ· ¤››¤®À܆ç ââÖ¸›b46bÊÙ‡dW€†ö½†Ü 22[ÈÙÙÓ¼¤––™€›  ®¬®··±±··¼··®€› N4?R®âÂqp;€…ö½…À€(5×âÓ®™™–™››™›ƒ™›™›™™—•™››‘B4?W¦Ùܦ\€€…Ͻ…Ï€$E±áÀ‹™›™››™›™›€™ƒ›™›™€› Ÿq47B[ªÃÉÖdE€„Ͻ„Ï€ AkÑÜv9z™›…™›‚™››™£o46Hj·ÃÊÔ¸[_€ƒâ’½„Ü€ WK˜ç¼O1B‘™€›ƒ™››™›€™›™››™™P7?N‚¿ÃÊÍÙ{N€‚â’½ƒÜ€ 7jXÊÙ¦H94]†›™›ƒ™›™››™”?9FX¤»ÀÃÊÚ«G$€çz’½”‚·€ X^ÙÓªU?96‚€›Ž™‹9?H‚µ·¼ÀÃÐÌQ5€€€çz’½”‹·€ vV¥ÖÏ·bB67P€›Ž™•j7Hj®¯±·ÀÀÄÖq>D€¼¼zz’½”‹‰€Ï€ oUÀÓÉÂN?77z†™––™€–”–””W6]›±®®··ÀÀÛ„F€‘nzz’½”‹‰€Ï%bmÓÏÃÆª[H94N–€™„–„”‘”PF™³ª€®±¸¸Ü—J€bnzz’½”‹‰ªª&Q€ÙÊÃÀ»‹WH97z›“”€’…‘‹ŠHz°¦€ª¬®··Ú—N,€bnzz’½”‹‰t€E—ÜÂÀ¼·±„XH9H€‘‡‹‰~O¢¥€¦€ª®¯ÓˆJ‚zz’½”‹‰t€ <ÙÆÀ··®®„WF7j”‡‹‚ˆ„ƒj ¤¤‚¦ª¬ÊoUÍ8¬Ùº¼··®ª¨™j?H‹‰‰ˆ…„‚‚ƒz› €¤ ¤¤¦¦·Wg)Fh:"  ¿7C©Ùº¸®®ªª¦¨¥z?n‹€„‹‚ƒ›¤¤§ RUTPXOKIOTW`bgnqmqK®mzuhaZYUS[WWQD0+?šÙ¹·®ªª€¦¢­zW‹‚{‚‚–„› ©|wwv€†ƒzyyfda\Z\WPP®kDEFEEMFGNPSS^Z[^œÜµ®ª¦¤ šjz‚‚{z‚zztz‘™ƒ›£¨”— ©²·Â¼¶‰„ˆ‰‰‹’ˆTb8¬.OL~ƒ‡‡€мÇþ¼©¥ªÏ·®ª¦¤€ €›‚z{„z tvzznqzzt‚–™›Ÿ®Š’™œ¦¶ÀÂÊÏϨ‘„‰‚‰ˆ‰mB?¬=<~€›™™–¨ÄÊÊÄÀ¶¶¦Ê¾ª¦ „›‘ztz!qjttvtvqtz•™››™ž·‡“œ¦®·ÂÊÏÑÑν•’’€‹yF5«LA‡‘‰„‰ˆ†¦ÃÊÏÏʾ¶©ªÏ¨¤„›™‘zvƒtoqt‚qvqq‘™››¤¸‡‡Š‘œ¦®ÀÂË€Ñ Ï¸ª¤™›”™G(¬GM„„‰‹‰Š§¶ÄÏÑÑÏÇ·´™©Ä„›™“vqqbnqqnjnqqjn€qjj‚–›·¼|‚‡Š‘¡®¶ÀÂË€ÑϤ±€¦¤yA)« DV‰––™–›¦­ÄÏÑÑÏÇ·¶¬‹ÃÄŸƒ›$™‘voqojqkoqnnqjnqqjqnu¢ÅÓqz‡‰Š“¤®·ÂÊÏ€Ñ È¯ª®¸®¦q\@(« ?Lb‘ª¦¦©”®ÀÏ€Ñ Ê¸¶® ‰¨¸®œ› ™Žqooqqjjoqqn€qjqqkqq„ÓÆÊ|ˆŠ‘›¦®¾ÂÊÑ ÁÌ©®·›X?M@+«5 DDHHoªª¤¦ªºÏÏÑÑʶ®¦—ƒˆ¨ª¶®¢š–Œqjqklqlkjqokqjkkvs¦žÑ€ä Æ€‘“œ¦¶¾ÇË€ÑШ€·¬”`GF<¬ G=EN‚±¸·±¤¸Ä€ÑÏʶ®œ“Š€j{‡•¤©¶¡otqttqt qw‡†”¦žÊ½½äå€äž“œž¦·ÀÊË€Ñ Ðª¦™ªª®·±\X*¬ [EW®¼·±·¤¤ÁÂÑÊ·®œ“‰ƒ~q\cuŠˆw‡„”¤ÀÇϽÊÑÜÜ‚äÜž¦®¾ÂÊËÑÑΦ’‘””™™›ªhRB¬ GFq±ª¤¤›‹¨²Ï€Ñ"Ê·®®™‰ƒt_g{ƒˆŠ„ƒzy‰“™™¡¦¦®¤“žÂÊÑÑ‚äÏåž¡®®¾ÂÊËÍÑ»t€‚„‹’”hG5¬0=q™’€‹‰„„‰Í€Ñ ʾ·®œŠƒrSry€Š”—“Š{ƒŠˆŠ“›¥¶ËÊËÑÜ€äåÏäÌœ®®¾Â€Ë Ìwjnqqvtzz‚XI!¬ .;i‰‚zzqvtkœÑÊÀ·®œ‰_juƒŠŠ“œœ­¯¯¸€¹ÀÄ€Ë"ÐÆÊËÑÜÜääåÏäÑœ®®·ÀËË̪`fh`hjnoqvOK¬ 3:VtoqqljjhbsÍ€Ñʾ®¦“rVryƒ‰Š“œ¤€¯¶¹¹ÀÄËËÍÏÍÐÌÊËËÑÓÜä Ì›”œ¯·ÂÊÉ”PW€]``fhh>R ¬8>>hffb€`!XXW§ËÍʾµ¨š{aQduƒŠŠ™¤­¯¯¶¹¹ÀÄËËÏÑ€ÖÎËÊÊÑÜÜä€å̳aF``œªÊ{GPOPPURXXU@(­<-AOONN€O MFeaA,+3<;:EWjyƒˆŠ™¤§¯¯¶¹¹ÄËÍÍÖÖׂÙÑÊÊËÑÜÜÑѸ¶¤1.&#::97=@BFLE,0®#/E€H"L@21/6*(AWjzƒŠ“™¤§¯¶¹¹ÀÄËÍÓÖ׃٠ÚÜËÊÊËÆÌÁ¹¶­T  )**07 ° "(3/+ (?J5QWqƒŠ“™¤§¯¶¹¹ÄËËÓÖÖ×ÙÙÚÙÙÛÌÓÌÍËÀ¹¶µy … D7#¨1I;fXVI&  !3(30O_r‰Š“œ¤­¯¹¹ÀÄËÍÖÖ×ÙÙƒÚÙÙ×ÓÌËÊÀ¹¹¶›-H  ƒ $/.$8, ž1;K)#)(+*&&.8,0+&"(*--/5?Q_rƒ‰Š“œ§­¯¹¹ÀÄËÏÖÖ×Ù„Ú&ÙÙ×ÖÓËËÀ¹¹¶¤==,28=7,&&3::7:49ACHHDKI@D9K+W€~*ƒƒ‚ƒ•¤™ŠŠ‰vvwqjjljgSWES_r‰Š“œ§­¯¹¹ÀÊËÏÖÖ×Ù„ÚÙÙ×ÖÓËËÀ¹¹¸§R6??@€AP@DQQEDDPLGLGGLGE4IK›2(<2”›”™’”’”¨´±¨œœŠ‰ƒ{uqqjgg_MT_r‚ŠŠ“œ§­¯¶¹ÀÊËÏÖÖ×Ù„Ú ÙØÖÖÓËËÀ¹¹¸¦{qrrs{…Ž›¦³¶¿ÀÊÄ—‚„ˆ„€ˆ‹n2Vš!1V‹‰‰‚„'¤¾¹·®¦œœ‘‰ƒ{uqqjggMW_r‰Š“œ§®¶¶¹ÀÄËÏÖÖ×ÙƒÚ ÙØ×ÖÖÏËËÀ¹¹¯ªr{ƒŠ“¦®¶¾ÇËÌ×»‰‹‰„„€‹‘AB;š.%l‹„‰ˆ‚‡„ˆ¤À¾¾¶®¦œ“ЉƒyrqqggMQ_rƒŠ“œ¤®¯¶¹ÀÄËË€Ö€ÙÚÙ×€Ö$ÏËÄÀ¹¹¯¦xrryƒŠ“¦®¶¾ÂËÑÑÒÓª—‘‹‰ˆ‰„‹[4Kš x™‘’””ˆ‡‰¦€¾#¶®¦œ“‘‰ƒyuqqggMN_rƒŠ“œ¤§¯¶¶¹ÀËËÑÖÖ׃Ù×ÖÍËÄÀ¹¹¯œ€r{ƒŠœ¦®¾ÂÊËÑÑÒ˹¤™‡”’‹‹‘v(eš%m‘ €›'ª—ƒœ­¾¾¶®®œ™‘‰ƒyyrqpgWM]j‚ŠŠœ¤§¯¶¶¹ÀÄËÍ€Öƒ×ÖÍËÄÀ¹¹¶¯™€r{ŠŠœ¦®¾ÂËÑÒÑÑ̯¦¦€›™™›‰6aš0$Th”¦ªª’™­¾¾·®®¦œ“Šƒ{yrqqg_EZgyŠŠ“œ§¯¯¶¹ÀÄÄËÏˆÖ ÏËËÄÀ¹¹¯¯ˆ€rŠ‘œ®®¾ÂËÑÒÑÏĶœ¤®¦ ¦®‹j8Nš OHN´®¤•”“©€¸®®¦œ“Љyrqqg_MO_uƒŠ‘œ¥€¯€¹ÄÄËÍ…Ö ÒÏËËÄÀ¹¹¶¯ŸrƒŠ“¦®¶ÀÇËÑÒÑÏħœ™¤®®ªˆ]W2>š &"0Pz ·´¼Ã©‘§€¸#®®¦œ“Љƒyrrqgg_P]qŠŠœœ§¯¯¶¹¹ÀÄÄËÍÍÖÒÏÍËËÄÀ¹¹¶¯ªnrry‰Šœ¦®·ÀÊË€Ñ Ï¹§¨©®¸·zHBM(2š#0=$›À·´´¬¤‡Š£¶¸¸¶®¦œœŠ‰ƒ{urqgg_MUgy€Š œ§§¯¯¶¹¹ÀÄĆËÊÄÀ€¹¶­™r{‰Šœ¦®¾ÂÊÏÑÑÏ˹œ©±€·®‘W05@š,!6>´ª¦¦¤¤’’•œ®¾¾·®¦œœŠŠƒyrqqggMMXqŠŠ“œ§§¯¶€¹¾ÀÄĀˀÊÄ€À¹¹¶ª›rprry‰Šœ®¶¾ÂÊËÑÑÏDZ¤¤©€®·¼¦/JKš$'Mž™™”‘‹‹‹‡¤¸¸¶®®œœ“ŠƒyrqqggWMRau€Šœœ§§¯¶¹¾ÀÄÄÀÀ¹­¨“un€ryƒ‰‘œ®·¾ÂÊÏÑÑÏĪ—‘–›› ¦¦®MB@š%M‘„ˆ€‚&ttzŒ¶··®®¦œ“ЉyrqqggWRME_tŠŠ‘œœ§§¯¶¸€¹¾‡¹­œƒrk€ry{ƒ‰œ¤®·ÀÇËÏÑÑϪ„€‘”™¤V49š(+8zt€qnoljh¤ÀÀ·®®œ™Š‰yrqqgWZWM€E XqˆŠŠœœ§§­¯¶ˆ¹­œˆrjrt€ry{ƒŠœ¦¶¸ÂÊËÏÑÑˇt€z‚‚ˆ„‹M8Cš11)oonjfhffb`[†€·!®¦œ“Šƒyrqqj_LF5%$'($2Q~†›œ¥§¨­¯·¸€¹!¯¥–sREFEQgjeurtryƒœ¦¶¸ÂËËÒÒѪjjln€qtzz‚?9^šT1b``[]`XU]UPf¤¶·®œ”ކ~m\E5$$%):E!:I0<$!$2EQQWeeRPQE5('29''$$'%6FWjx‚‡Œœ®·¾ÊËÒÑÎ|€b fhhjjnnq1>}š)GWRPP€O€NXyž³œwaE$##%0(+D, €<9.@!/413,*'339B/+EU14D"˜-Y?HNUj’‰XJB]^Ë K=/1.2[\0%–$OANQg‰’oSJBaZÉ [/6165Mm+p“9IAHNSj‰’jQJCoUË>4€699DbR%N’%MDJQ`w˜gNJEn Ì 96??AUlI1VJAHJSg‰’W^NJKfÍH169ABGgD5%NAJQXw’‰oUPBU\Í:<6969::IBBV["ŒWGENSg’‰g>PB^TÎP+696,9:FIENk[\OŒ^EJNXj‰˜wXNNFmHÏ";,:9,69:HHBE[iJJÜt ƒXBJ>g„‰‰jXNMGo)ÏK,,6:,9:FFHFAVnE8€¦ƒ`‚\BNSj‰’‰jXNJHlÐ3B, 19:FFJMDIf1 €¼W^‚!U@NSu‰’gSNHIdÐU+,,//29AFHP]JGl€Èq6©€ &TBN^’’gXRGVPÐ/I‚, 69AFJ]hXH^€e‚­SBNe‰’‰wgUJA_H@ÑU*€,%(199FEWn„]GisQtzg NENd‰’‰wgUJG`DÒK,€(!,::II]„žrT`%y6M/4 SBNg’’‰wd>EOMÔ&E€(",,9:FJ]žÃ„Zs &dR'&UBNg’’‰rdSDK" Ô;‚(!,,:AFJr¬Ãh^hp?W]5VEEj“’‰wXRCG ,Ô7%"€( ,:9AE]„ѸV_ VE0.FVANjŽ’‰oXJGBaÖ=€"$,19:CMhžÑ’QY.'((>MLCJg”’‰jUJ^MC–‚¨Ò*6""(,29AFR|ÞCKE$//0B>6:J„‰‰gNEcW8B„VÒD =+"(169AF]gaE=?%369A?‚A XgdQRMI 7wÔ'5(169AHF611/5ACFHHMMJJEBCPgr`jD(Ö(K,,9??/(19AFHMMNPVgw“žžgMSgglC>=“΀ÝCG,66/(6?FHKMPPSRVan„€Ã gHM]lZ‚žÓ½€Ý‚!-E",(16AFMMPPVWW]]`YU`r„aRPRd ‚ŽÓ½çHF*6,6CHMNPVW]^^aeeggd\€WXVf56Žð½‚ž€@0'",6AHMPPV]^^e†g f`^WZh  ð½‚žaT?DE62AFKPPW]^eg‚jge^^k%²í½‚ž€a#C)/9HMPPW]`g„ojjggee]n<€í½‚Í€ . 6*)+CMNPW]`€gjorrp€o jhggbqVí½‚Í,54HJPS]^eghjoorƒuqjd€hdla Ó½‚̓ 5BJPP]^eghjopuu‚y v’Ãø„hjfdƽ„Í=BMPRW]dhlppuuyz{}˜í€þöžhff€Ž¼½…Ó€ BDJN^“ÇÄhquuy{‚Ñ‚þö“]o&€Ž¥½†Ê$IEJhÀþð“pxz{€‡˜öƒþÃro<€ŽÙ½†ŠKDSÑ‚þö˜r€€‡ŒÃ…þ‰f]ŽÙ½†›*J?|öƒþã’€‡‰”ã…þ¸go ŽÊ½†°'« >HdŽª¥¥—hg‚{ vnhd`\Nƒµ°š˜€› —pmmpphhmppk€pk‚pS@)CJMPUZ`jpvz€{ t“—¤·›W:H>*« B@EEmªªˆ|ry{8vnnd`ZUFSƒª³® ™‘„phppmpmphpmpphppshB>Dfuf@GPRV]djsyz{{~n“€·°“]DC<¬ G8>Iµµ·µˆp{zvnd`]VRI?M]zˆ—­œmupuupu&pouzhB>)$$fjfuf>OUW]envyz{{|r|˜ªª®·µXV*¬ ZBT®¼·µ·žno}{vne`]VNMLA/9CMPSR]bhnps~6$)DXX€f užX@W]`jnvy€z |‰Ž““––›ªeOA¬ I@pµª¡¡›‘Šƒy~€{"vne``WNMF6;HLOPNMBFENNQQSZZ``X>6)DDfu¯j>W]`jnvyzz€u{€‡Š‰“eB3¬0:p˜€Š€‡u{vpje`WPMF2CCMPPRX^ZPM PSPXUgj4)4DX€fj¯žWS]`jpyyzzohkppsuyyWE!¬ -5g‡{yypsupu€{zvne`WPL6=FHMPPX^^dggn€oru€yx@)4DXXffj¯žDW^`ep€y r]ae]ehkmpsMI¬ 36Sumppmhhedh€{zvj`]VQF4FFMPPX^`€g!jooruyyz{z|W)44DSXffžuW]T^ajrv{hNT€Y]]aee9O ¬8<9eaa_€]!WWTrwzvji^YSG1=CHMPS]`eggjooruyy{~€€z4))DXXf€jW]GBFFdry]INLNNQRWWQ7F­/?1WWTRQLGo}|g]GA<<65?FMMPX]`ggjooruyz~!‡‚W))4DSXŽjD[]W8E:1:@@AEFIILINN9<(­;)@LLII€LFBAG;()2<9909?FMNS]`egjjoouyz~€‚‡D))4DXXDDjga/. &#;94279L4+16AHMPV]`egnoouyy‰‰ŽŽ‰‡€WSWupoojjR … D7#¨JH9dXUH&  !3(1'.6CHNPW^dehoopuyz€‡‰”‘‰‡‚yvrpoojb)H  ƒ #--#7* ž3:G$ $#'&",1(.'"$%)(&1,/6CMNPW^dehoopuy{‰‰‘€” ‘‰‡‡zyvroojb8<,06:4*%&2:94727?B€DIF>B9K%V€€z~(z`]PPOGIIGCBA?:62(26FHNPX^dejoopvy~‡‰‘”‘‡‡yyroond62668898@8=€A ==AEDEDDEDA0FK›4(9-“›“˜““‘ƒle^ZWPNMMFFA:996,16FJPPW^dejnorvy~‡‰‘”‰‡yyroongME€FGNRY[bhnrvu„ƒ€ƒŠk-Uš*SŠƒ‡*njkj`]WWRNMMFCA:99,16FHNPW^dgjjoruy~‡‰€”‘‰‡~yy€oneFHMPVZ`ejsyy„‡Š€‡€Š@@;š4#iЇ‡ƒubS`pjjd`]WVPNMIFC:99,.6CHMPW^`gjjoruyy‡‡‰€‰€~yu€ogeI€FMPVZ`djryzz}r„Їƒ‡‡Š[1Lš w–Ž““ƒ]N]€j#d`]WVRNMIFFA99,,6CHMPW^`ggjjoryy~‡‰‰‰‡€zyuoong^€F HMPWZ`jnvy€{ yo`]u“ŠŠs%cš"k¡€›'ª„M^gjjd``WWRNMIFFA:92,5?HJPPX`ggjjoruyz€‡‡€‰‡‡€zyuroojg]€F HPPW]`jnyz€{zg]|€›˜–›‡2^š Pe“¥ªª‰WE]h€j ``ZWVPMIHFAA96(49FHPPX^eggjopuuy{‡‡‚ ~yyuponggO€F MPRW``jpyz€{ xj^ˆ®¥¡¥®Šh5Kš MEI{±®ˆzhUe€j``ZWVPNJHFAA96,-6CHMPR^e€g€ouuyz€„ ~~yyuroojg_F MPVZ`dnsyz€{ yfWaˆ®®ªƒYT/=š &+Ny¡·±¼Ä—Xh€j``ZWVPNMHFCA996/5AHMPP^^eggj€ouuyzz ~zzyyurpoojfMC€FNPWZ`envy{ ugƒ—¤¯·yEAH#1š 0:›À·±±°ž]Ml€jd`]WWPNMIFCA996,39FH€P^eeggj€ouu†yvur€ojh]F HNPW]`jnvz{t^—µ€·®T+4@š !19±ª¥¥¡¡‰sd€ne`]ZWPPMIHFA:99,,6AHMPPX^eeghn€opuu€y€vurp€ojhWFE€F MNPW`djpvy{€~w`n—€®·¼¥*GKš %HŸ––“Š‘Šu€nj``ZWVPMIHFA:992,17CHPPR^^eegjn€opruurpojdXCBFMNSW`ejpvz{{~xs„—››¡¥¥®H5@š!Hއƒ€{uuyo€n``ZWVPNMIFA:9926,(5CHPPS^^eegjjn‰ong^MF@FHMPWX`ensyz{{~s€‡ŽŽ“–¡S09š((5{yu€pkmmhe€ne``WVPNMIFA:9642,€( 4EPPS]^eeghjn†ond^OF?FEF HMRW]dhnvyz€{uu€y{ƒ‡ŠH1CšD1-&mmkhaeaa_][inne`]WQPMIFAB:8.)"!%9KS[^aeegjjknooje[I6(1(19?AFH€FMMWZdhnyy{{zrhhmk€puyy:1^š-_]][Y]WQYQNW€eB`WVQPMB6(%:C:H0;(112AA6/1(""!08%!!12?FNPSW`ejvyzz{f€_ aeehhkkp,<}š'FTRNN€L€IP[ecWH60$/%(C, €<9-? .3/1*)$118A-)ET04=TI23>*"1?OZagnyzyuYRTTWY]]__e_DW› $QIL€IB>A2"@/! %//*"1'‡?)49%# /KauisTG€N QQTTYYIN%›%ALIG>6)" :*95ª (*$&0.>F€INR& ]""($&E0·A)( ),3>FN:BGž "+Q&  &3%$ 3lŸ ! É  0,'?91Gÿÿ‰Å`"O)H1õ)T!Nô+'*0Eô9;<"CBó tTCCRò KKo"Q+Oò 7\60Q$Y ñ +Z QEfð 28*/Q0\ñ !B!CQ*-8ð @#+QE5ñ :6f0= Ê€’  D!$QQ+OÊz²œCž @6!0QE VËJXoN‘œ W"CX0 _ËK"450-¦š 6//QQ0#3`Ê }%&:"˜-S$0XQ"?^Ë K#E[0%–#6/QX6 >ZÉ N%e+q“8D 0QX0ZWË=TR%O’&5*C_E4e Ì ,2dI1VE /QX>(%^Í B SD5%5!"CXQ6$"3\Í:#%€!;Y"ŒU# /EXQ/%"@TÎD€ !/^W\NŒR"0Q_C"]HÏ"#€JjIJÜt ƒK%4[QQ0"a)ÏG3nG8€¦„`‚F 0QXQ0" jÐ32€$Z0 €¼W^‚!: 7QXE4 $dÐT€"8 _€Èp5©€ &:(EXXE/"#;OÐ/;ƒ !8C( V€œc‚­8,QXQC/$RH@Ñ+V%4B[8 bsPtzh .+QXQC/$ ZDÒD€!!!8[~C2Z%z6L/4 9/XXQC+%/MÔ&8€"!8~¤[Ds &\B'&:/XXQ6+ 3" Ô:"€C’¤C@ip3PU1F0fXQC"#< ,Ô7 8[¹Š'W V5#9A0TXQ6" AaÖ8€$!C~¹f0Y%1M9/WXQ0$@MC”‚¨Ò2€##Z¤~9E2$![QQ/QU7B„UÒD <846$0„ (4+#) 7uÔ'4!"46"NC(Ö(E"$4Cf~~4(/4]B>=“΀ÝCE€!!""'#$6B[€¤ 4!(_Z‚žÓ½€Ý‚!-B""$&&(()%$*C[6#"(c ‚ŽÓ½çHE#%!"$$€(,,//.-&€#($K56Žï½‚›€@/%""$€(,†/ -*(#6g Ÿï½‚›_T>>@%""&((,/‚0/,(([&¯ê½‚›€a#B""&(*/1‚310€/,,"Q=€ê½‚Ï€ . 6+!"&(*€/0€363310€/%SU꽂Ï+("#&(+//03€677€6 2)++,/+A_ Ó½‚σ !""&(+//036„7 3X¤¤Š[)0.cɽ„Ï%!"##"+*0336778€?9_ê€þõ~)/^€Ž»½…Ó€ '!(fÀ¤[)4€7‚?@¹‚þõf"Y&€Ž¥½†Ê$2C¤€þïf167€?€E_õƒþ¤C_<€Ž×½†‰3(¹‚þõ_3€?€EL¤…þQA^Ž×½†›+8ZõƒþÕX:€EHQWÕ…þŠBp ŽÊ½†µ=;~…þ¹?GHHOV‰õ…þ¤Bi€Ê½†ÀDI’†þ Š@KKQUŠþþõƒþïBY8€Æ½†Ý OK’†þ ÕPFKVW¤õtPàþõCDR€þ½†Ý OV~ƒþ×êþþŠ9KQW¤¶k‚þbEb$€Œþ½†Ý€6S~þõt3Æþ¤?EKKŠ¥]‚þ‡S]FŒþ½†€€Vbþ¯Jþ¤?EQE[ÕV0Ê‚þ™b_Z!€‹ï½†•€K Tï€þ®Bþ¤CZZbT™ïÏç‚þõª{†iQ%‹ï½†¥€?AUà€þ ïg%»þ~bbs‡~™Õ…þÓÀª–V'€ŠÝ½‡· MbZÀþõÓçþÀ‡™¾ÊÓ×ÓÓÝàêþç€ÝÉkK"€‰Ý½‡ÀSr{™„þ à¾ÓÝÝ×ÚÚÓÓ€Ï Ó×ÝÝÕ×ÝÝàªO0€‰Ï½†Ê€R…’™ç‚þàÕÝÓÏÊÆÀ»€¯€¶ ®¨®··ÊÊÓ×…F€ˆÏ½†»€EY¦ÀÀÕ€þ ïÝÓÀÀ¯®®¨¯€·»€À »·¨Ÿ››gzÝÈaM!€‡Ï½†¨€RTºÝ××ÝààÏ»®¨¥¨¯ÀÏÝçêêï êïໟ€+3•à¥S_!€†Ï½†Ý€3P¾ÝÕ××Ê·¡Ÿ››Ÿ®À݆ç ààÙ¯›]+4]Êׂ`Z€†õ½†Ý 22WÈ××Ó»Ÿ˜˜–€› ¡®µ®··¶¶··»··®€› H+8T®àÅ]l;€…õ½…À€(2|ÕàÓ®––˜–››–›––—›–›––™•—››Ž@+8R¥ÚÝ¥Vz€…Ͻ…Ï€$B±ßÀ‰–›—š›—›˜›˜–˜ƒ›˜›˜€› Ÿo+0@\©ÆÌØzaE€„Ͻ„Ï€ @fÑÝq3wœ˜›–˜‚–˜›‚˜››˜žk+4Bg·ÆÊÒ¯UY€ƒà€½„Ý€ WI˜ç»J)@‹™€›ƒ˜››˜›€˜›˜››˜–M08H€ÂÀÉÍ×vM€‚à€½ƒÝ€ 7fYÊ×¥B3+Xš…›˜›ƒ˜›˜››–“83@VŸ»ÀÆÆÛ«C$€çw€½“‚·€ X[×Ó¨P834€œ€›†˜––˜––˜˜—‰38F€µ·»ÀÆÎÌK3€€€çw€½“‰·€ vQ¤ÙÏ·]@40M€›„˜‡–•g0Bg®¯¶·ÀÀÄÖo;C€»»ww€½“‰„€Ï€oPÀÓÈÆ€H800wŸ˜˜ˆ–••“•“’R4X›±®®¶·ÀÀÜ‚A€‹iww€½“‰„€Ï%ahÓÏÁÀ¨\B3+H˜™ƒ–€•„“ŽM@–­¨€®µ··Ý”L€]iww€½“‰„z¨¨&L~×ÊÀÀ»‰RB30w›‘„“‚ŒŽŒŒ‰‡Fw´¥¨®µµÕ”J*€]iww€½“‰„zt€F“ÝÄÀ»·±ˆVB3B“ƒ‹‡‰ˆ~Jž¡€¥€¨®¯Ó†E‚ww€½“‰„zt€ 9ž×ÀÀ·¯®ªˆR@0g“Œ†‰ˆ„‚gŸ¡‚¥¨§ÊmSÍ4¬×º»·¯®¨§–g8B‰‚ˆƒ‚€€…w››‚Ÿ¡¥¥·Uc)Fh6   ¿7A§×º·®®¨¨¥§¤w8i‰€‚‹€„›Ÿ£¡TVQSZN€L QV^`cjoiqK®myuh`ZYTRXTWUF/)Dš×¹·®¨¨€¥¡­wR‹€z~€€—…›£S€247B€E _^\W[WURL€®j@:AA@@CDJLEE>;<5…ݵ®¨¥¡Ÿ™gw‚€~~}w€wwtw‹˜ƒ›¡{#"$*/288BX„ˆ‚„„‰€‚O^8¬.IGyyŠŠˆB6970/!Cϵª¨¥¡€Ÿ€›€wx„w tqwwiowwt€•˜›œ˜*#"#%,1489=bŽˆ„€„‚„h>@¬=7y€›••˜“YC9864,)ªÁ¥¥Ÿ„›‹wtwogttqtqotw”˜™›˜®5" #%,3889?Cb€Œ€‰vB3«I;Ž„ˆ„‚pZ798740,) CϤŸ„›˜‹wqƒtkot‚o qooŽ˜˜™¥¯6!€"#$,14889?5Cs•›“•ŒC'¬DHˆˆ„‰„T,0998840,)$‡É…›–qooeiooigioogi€omm}Ž—¸™'!" #$,14889>-›¶€¥Ÿv?(« AQ„˜˜–˜›Z+9€8 73,)$""~É ƒ›–‹qkokgoqkoiiomioomoit„»Mƒ"$%,37889;/C˜¯®¥oW<&« >Geލ¥¥‡C-98 3,)$##b¯±š˜€› •Šokkooggkooi€o mooqoozM:4"#$)0378897f‡˜·›V8G<)« @>BBk¨¨sZC99€83,,$##!(b¨®­ ˜‹„ogoqjojqgokqog€q_=%Beve:#""#$)14789?,{€·µ“ZAB<¬ F69H€¶¯·¶s29€843,$##""&7bs‡¤šktottot&oidpC=%4""epeve%""##%,3478:8CZ•¨¨®·¶WT*¬ [?R®»·¶·›B->9€83,%#""!"(27‚CB109*"4BSS€ev‘S%##$),3789?Z€Ž““––›¨aN@¬2J;o¶¨ŸŸ›†‰bC:9883,%$#"!!"  "*(%*4BBevµp%##$),378:Qtz€€ˆ‰€“aA1¬/8o•Œ€‰+„ˆˆc?:9831)%#""""$(()"&!!"("($40848BS€epµ‘>%&)1479?igiooqtww€VD!¬%,1f„€zwwoqtqP:9843,%#""""&((+//2€36€7#88:48BSSeepµ‘B#')14689CZ_aZagikoqLG¬ 35Qtkoojggae_?98641)%#"""&(*€/0336€7889;>488BMSee‘v>'+.47789CMR€XZZ_aa7N ¬8:7a__]€ZVVRC98643.&&4"$(*,//0336€79‚?844BSSe€p>26@556A7FLMJMMPTVVP6F­.>.VVRTPJFT99476&>>3"&(*//0336778:?!EB>448BMSTpB<446G9/534?@AHHJHMM7;(­9%?JJHH€JA@&66$'1=88#$&(,/0033778:€?‚EB448BSSBB€4,. &$<8/1357@@?%/®#'@FBB@0)('1%&€ "$&),/0336779€?EEHEKEKS8448:>7642 &%#+3 ° #-*)&=M4"$(*,/133€7€?HHOOQQOKE;>M>=764311 … D7#¨JF7aWUH&  !2(1$"$(*,/336778??EHOQQWTQPKEE>:7763304&H  ƒ #,+"4* ž3:F $#*+%+$!#&##.%"$(+,/136779??HKQQ€W(TQOEE?>776331-6<+.482(%%2982617>ACCEGE<@9K!U„yb*&€"" $$%&&%!"$"((+,0336779??EOQQW(QOEE?:776633,%/0/112141855?884@A@AA@A?.EK›(8)“›“•Œ“Œ““b,)&ƒ#"!€""$(+,0136779??EOQQW!QPE??:77633/4&$! "##$$)*23637t€z‚z€‚‰i)Tš%Q‰„„ˆzB)*)$##""#!!€!"#(+/0036779??EHQQ€W QPOE??:77633/-!€" $)035789[„‰„ˆˆ€‰‹?>;š#g‰ˆ„‚€dC(*0*)$##€"!€!"$(*/0036€7??EEKQPOH€?:77633/,!€€"#$)14789:Ct‹‰„‚„ˆ‰\.Lšu–ŽŒ““‚7"**)$‚#!!€!"#(*//006677€?EHH€OHHE€?977630/(€"#),3788973*8d“Œ‰‰‹q$bši‹¡€›¨t(€+$‚#!!€""(*//0036779€?EE€HEE?77633//&"#),47€8=/"Z€›•–›„/]šOa“¥¨¨€4&,++)€#""!!€""((,//016€79?EEƒ?€7630/,#€"#)047€8 70(s®¥¡¥®‰g2IšLBHz°®sbC%,**)#‚"!!"#(,€/136€79‡?€76330/("#$,147€8 7,#6s®®¨‚XR,<š%(Mw¡·°»Æ‡(,*))$ƒ"!""((,//0336€79„?9€766330-!€€"#%,348 7.b‡˜¦·wB@G0š09›À·°°µ›70,,)$ƒ"€€"(,,//0336‰7€63300&‚" #),3488998(‡¶€·®‹R)3@š!.7°¨¥¥ŸŸŒ€U,0,,%ƒ"€ !""((,,//€3€6ƒ7‚6330.#‚€"#$)0378€97*B‡€®·»¥%FKš"G¡––“‹‰“‰d6,,)ƒ"! ""#((,,//3†6€31,+(€"#%)13789:9Ct‹˜››¡¥¥®G+@šGŽˆ‚€€ zttwQ0,,##"! %""#((€,/001ˆ3,,(‚""##%,14799:Bz€ˆŽŽ‹“–ŸQ.9š'%2zwt€oikjgaB,,%€#""!‚"##((*€,/011…3,*# ‚""#$),3779::dt€wz€€‚ˆ‰G+Cš1+%kkig_a__]Z\D1,%##€"!$#!#&),.-//01€3!1-*'%#& !"#$),4799:Cggji€otww€8+^š*]ZZ\XZVPXPMC1,%"#€"= "=A9G/:&&%0:$##"##%)4799:S€] _aaggiio)9}š'ERTMM€J€HF1/%$#&.$(C, €<9,>-5/1-,#11:A-'ET/3>TH13='!!)*4679=NTRRVXZZ]]a]CX› #PHJ€H@9& >0! %/.*!0'‡?(39%"(.79>RF€M PPRRXXHM%›% ?JHF93&;+94ª (*$#*9A€HMT%\ &"$C/·A*&&)09AM8BGž !)P%  % 3$ 1lŸ ! É  0,&>71Gÿÿ‰t8mk@0u´Z ;ëõ‰#+ìþû›,+xÞýÿü 0i×ûÿÿû¥4$ZÆùÿÿÿü¤6@«ôÿÿÿÿûž4#{äþÿÿÿÿû”2=±úÿÿÿÿÿö~-&mÞþÿÿÿÿþã`(D¶÷ÿÿÿÿÿýËM# (†êÿÿÿÿÿÿü¶A   PÌüÿÿÿÿÿÿûª;Q# 9ªõÿÿÿÿÿÿÿûž5 *-& !uéÿÿÿÿÿÿÿÿú—2/¢ˆD)>¿ûÿÿÿÿÿÿÿÿøŒ/fóï͇F!  uîÿÿÿÿÿÿÿÿÿò~- OÞÿýðךJ 7µüÿÿÿÿÿÿÿÿÿíu+ ;³þÿÿþ÷ׂ+ gåþÿÿÿÿÿÿÿÿÿèk'4}õÿÿÿÿþî­I 5­úÿÿÿÿÿÿÿÿÿýÂG" +SÑÿÿÿÿÿÿøÓ2 câÿÿÿÿÿÿÿÿÿÿú£>  A¡ýÿÿÿÿÿÿþð®= 4¬ùÿÿÿÿÿÿÿÿÿÿø‘63tîÿÿÿÿÿÿÿÿùÄ_#  dãÿÿÿÿÿÿÿÿÿÿÿõ|/%I¶ýÿÿÿÿÿÿÿÿýçG+%‘ùÿÿÿÿÿÿÿÿÿÿÿìk) 7mëÿÿÿÿÿÿÿÿÿÿ÷Æj./«ýÿÿÿÿÿÿÿÿÿÿþÕS$ (L¶þÿÿÿÿÿÿÿÿÿÿúÛ…3 8Åÿÿÿÿÿÿÿÿÿÿÿü¶D  9wïÿÿÿÿÿÿÿÿÿÿÿüæ”1 DÓÿÿÿÿÿÿÿÿÿÿÿô›9(M¼üÿÿÿÿÿÿÿÿÿÿÿþñ¢( IÔÿÿÿÿÿÿÿÿÿÿþã5 9sçÿÿÿÿÿÿÿÿÿÿÿÿÿô”+  !FÐÿÿÿÿÿÿÿÿÿÿýÒi6'I§÷ÿÿÿÿÿÿÿÿÿÿÿÿÿó’'    !GÐÿÿÿÿÿÿÿÿÿÿú´I.  4]Äüÿÿÿÿÿÿÿÿÿÿÿÿÿï‚)$IÔÿÿÿÿÿÿÿÿÿÿëˆ7 !?rßÿÿÿÿÿÿÿÿÿÿÿÿÿþð”)XZ !4UÛÿÿÿÿÿÿÿÿÿüÉ\.(HŒíþÿÿÿÿÿÿÿÿÿÿÿÿÿës)$mÑ–‚eV×ÿÿÿÿÿÿÿÿÿù¤G* 0P›òÿÿÿÿÿÿÿÿÿÿÿÿÿ÷©@5ï÷òÄhÍüÿÿÿÿÿÿÿÿõ‹;6  5Y¯öÿÿÿÿÿÿÿÿÿÿÿÿþæ†Qšòÿÿë¥Çøÿÿÿÿÿÿÿÿõ‡7,D$ >dÎýÿÿÿÿÿÿÿÿÿÿÿÿó­ƒyåÿÿüòöþÿÿÿÿÿÿÿÿø–6 4F‹æþÿÿÿÿÿÿÿÿÿÿÿýòãÍöÿÿÿÿÿÿÿÿÿÿÿÿÿÿü³: /M—îÿÿÿÿÿÿÿÿÿÿÿÿÿþúþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ^  7^Ãùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçc "?€ÏöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌK (P|ÐüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÃG"  FV§÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþßa&7^Àùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø¥-?hÌûýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÜ> 4@ŽÚÝéúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñX  *G€¸ðþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø„' +HyÈøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¢/ 2YÃüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý´7%KºüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýË? !G¸ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþâK  !G¸ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï`"  "I»ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø‚) "PÅüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü®1 $\ÒüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÔ= %fÜþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêQ  &pãþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷{' 'näÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý±: $_ÜþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþØ^  !QÍýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ/ D´ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÖ^ ;úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ18¥úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþØh! :±ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø³;<¹üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì‚(QÉýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÙd"  bÖþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÒe  UÍýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÌM  ,\Ñýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷­20uáþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï <©öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÒ? &nÞþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìm NÁùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ”-,‘òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûª<QÄüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü¿P8  {åþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÙn2 (™öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ‘-7¬ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¬:?·ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüºIBµüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû°@ =©üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¯G"  B²ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÁZFRG(  *kÑþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÀ·ÇÁ¢„‚…Š‘‰mA 6=AACBDHW`nrnk‘äþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüýüúøøùùùúûúùôÕm Dš¸º¼¼½½ÃÍÖáãÝÕâùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø¦. %ˆìüüüüüüüýýýþýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü»>@¿ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÅM gäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÉU %…öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÊX .›úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÊX 3¤ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÊX 2šúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÇT /‚÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÈQ -vóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÝo! )mêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãl" &bßþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÖU"  $[×ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¿G  !UÎýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû£= OÃüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿõ…1H°øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûêÛçôùûýþþþÿÿÿÿÿüÐW'6wàþÿÿÿÿÿÿÿÿÿÿþ÷çÙÏÌÓðýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ릃‚¥ºÐãéîôúüþûÞ}; %GëúþÿÿýûùöîØÄŸzomr¶÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþá|^QOT\gs|бÅáÛ“H( 7_§ÈßâÝÆµ·­ŽrdYPKLVnËýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò™N8138>CIOXbo‹†V5  ,14421©ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó$ A¬ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¦*@¬ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù®-B«ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë‚-A¬ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý×g*A¬ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌ^%>«ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÊZ" =­üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÉW @µüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÍZ C¼üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÕc! C¹üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýüüüýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýØm" 8›öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýüûùòäØÐÈÇÄËãíîïòûþÿÿÿÿÿÿÿÿÿÿþûùõöùùûüýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÙq# .lÜýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýúôëàѲ£ŽupbbdpŠ•–—¢Ëäðöø÷÷ööõñêÕ¼®¦§¢¤®½ÉÜêðòöûýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÓh" #J­õÿÿÿÿÿÿÿÿÿÿÿÿþýúôèÝÑ¿¥Ž~q_XRLE@<98:>CHLQXfs‚•–‹Œ„zse^YUTTUX^dy‰”¦·Îâðöùûþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû·L  >xÜþÿÿÿÿÿþýüûúõåÍ®šŽ†zgWKC=71,'#"%(+17?FJLMMLJHD@:51.--.14:@FKPXam|„Œ˜­Ëæïóúýýþÿÿÿÿÿÿÿÿÿÿð†6'N®õýþýýöæÕÇ´¢‘|i[QJC=6.("  #&((('&%"#'+/4:AFLR\h™¨ºÉÓâñúþþÿÿÿÿÿüÑb+ 1g¯ÊÒÏî‡qeZRKC:2+&"    $(,3:CLTbpwƒ™µÑè÷üýþúã’; 9Pdlk`VI@82,'!  "(.4:@GQ_pƒŸ¶Ã͹€D()3774-&  %+4=FOW[XO>*    $*/21+! amule-adunanza-2012.1+2.3.1~dfsg1.orig/aMuleAdunanzA.spec0000644000175000017500000000564012052527717021106 0ustar l3onl3onSummary: aMuleAdunanzA - another eMule p2p client for FASTWEB users Name: aMuleAduanzA Version: 2012.1 Release: 0 License: GPL Group: Applications/Internet Packager: aMule AdunanzA Users (http://forum.adunanza.net/) Vendor: aMule AdunanzA Users URL: http://www.adunanza.net/ Source: %{name}-%{version}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %description aMule (www.amule.org) is a peer to peer file sharing client, based on the well known eMule. Starting with 2.0.0 aMule works on Linux, Mac, *BSD and Windows, which makes it the first multi-platform edonkey network client. aMule-AdunanzA is the mod of aMule dedicated to Fastweb ISP users. %prep %setup -q %build %configure \ --enable-optimize \ --disable-debug \ --enable-cas \ --enable-wxcas \ --enable-amulecmd \ --enable-webserver \ --enable-ccache %{__make} %{?_smp_mflags} %install [ ! "$RPM_BUILD_ROOT" = "/" ] && %{__rm} -rf "$RPM_BUILD_ROOT" %{__make} DESTDIR="$RPM_BUILD_ROOT" install %find_lang amule %clean [ ! "$RPM_BUILD_ROOT" = "/" ] && %{__rm} -rf "$RPM_BUILD_ROOT" %files -f amule.lang %defattr(-,root,root,-) %{_bindir}/amule %{_bindir}/ed2k %{_bindir}/amulecmd %{_bindir}/cas %{_bindir}/wxcas %{_bindir}/amuleweb %{_bindir}/autostart-xas %{_libdir}/xchat/plugins/xas.pl %{_datadir}/applications/* %{_datadir}/pixmaps/* %{_mandir}/man1/* %{_mandir}/*/man1/* %docdir %{_datadir}/doc/* %{_datadir}/doc/* %{_datadir}/cas %{_datadir}/amule %changelog * Fri May 13 2005 Marcelo Jimenez - New spec for aMule-2.0.0 compliant with Fedora Core specifications. * Mon Apr 19 2005 Marcelo Jimenez - Removed curl dependency, aMule now uses wxHTTP. * Mon Mar 26 2005 Marcelo Jimenez - Added a distro test, so we know the distro. - Tests for UTF-8 enabled LANG to use UTF-8 systray. * Mon Mar 21 2005 Marcelo Jimenez - Removed krb5-libs require and krb5-devel buildprereq. curl-lib and curl-devel is enough. * Tue Mar 08 2005 Marcelo Jimenez - Made it work with cvs snapshots at their very same day. * Wed Jun 16 2004 Ariano Bertacca - added tool package. * Sat May 22 2004 Ariano Bertacca - added webserver package. * Sun Mar 28 2004 Ariano Bertacca - added libcryptopp to dependencies/BuildPreReq - getting wx-config and wxbase-config from installed rpm to avoid problems with people using wxGTK-2.5. Idea taken from aMule-2.0.0rc1.spec done by deltaHF and pure_ascii * Tue Feb 10 2004 Ariano Bertacca - modified the BuildPreReq to satisfy amulecmd build requirements. * Sat Jan 23 2004 Ariano Bertacca - initial amule.spec release amule-adunanza-2012.1+2.3.1~dfsg1.orig/README.Debian-Packages0000644000175000017500000000541212050266603021307 0ustar l3onl3onThis debian rules file controls the buildprocess of the packages of aMule you can either run dpkg-buildpackage -us -uc -b -rfakeroot to build them all, or you can invoke debian/rules directly with the target you want to be build. If you run debian/rules without a target, or with the target help, this help will be printed. Other possible targets are listed below, you can combine them as you need. amule-common, the packages with the skins and i18n-en-gb are build everytime. The Theme for the webserver get build when you build the webserver. amule Builds the normal GUI-Version of aMule ed2k Builds the ed2k-client of aMule cas Builds the cas binary for commandline statistics wxcas Builds the graphical version of cas webserver Builds the webserver for controlling aMule remotegui Builds the remote GUI for controlling aMule daemon Builds the daemonized version of aMule alcc Builds the ed2k-link-creation utility of aMule alc Builds the graphical version of alcc amulecmd Builds the commandline-client for controlling aMule xas Enables the creation of the xas package plasmamule Enables creation of plasma specific parts amule-dbg Creates the debugging symbols for the amule binary ed2k-dbg Creates the debugging symbols for the ed2k binary cas-dbg Creates the debugging symbols for the cas binary wxcas-dbg Creates the debugging symbols for the wxcas binary webserver-dbg Creates the debugging symbols for the amuleweb binary remotegui-dbg Creates the debugging symbols for the amulegui binary daemon-dbg Creates the debugging symbols for the amuled binary alcc-dbg Creates the debugging symbols for the alcc binary alc-dbg Creates the debugging symbols for the alc binary amulecmd-dbg Creates the debugging symbols for the amulecmd binary plasmamule-dbg Creates the debugging symbols for the plasmamule stuff amule-utils Creates the Metapackage for the commandline utilities and all these utils * alcc * amulecmd * cas amule-utils-gui Creates the Metapackage for the graphical utilities and all these utils * alc * remotegui * wxcas i18n- Builds the coresponding i18n-packge. Lang has to be one of ar, ast, bg, ca, cs, da, de, el, es, et-ee, eu, fi, fr, gl, he, hr, hu, it, it-ch, ja, ko-kr, lt, nl, nn, pl, pt-br, pt-pt, ro, ru, sl, sq, sv, tr, uk, zh-cn or zh-tw If no i18n-package is given, all will be build. If you just want en_GB, use i18n-en-only If one of the -dbg targets is choosen, the corresponding binary will be built, too. In this case, debugging is enabled, optimising is disabled. Is no -dbg target choosen, debugging is disabled, optimising is enabled. If you choose to just build a few packages, you have to explicit activate ed2k or xas if you want to get the pkg's The targets can be given in any order and combination amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/0000755000175000017500000000000012053222402016307 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/MuleListCtrl.cpp0000644000175000017500000005377112050266603021423 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include // Needed for wxMenu #include // Needed for wxConfig #include // Needed for wxStringTokenizer #include // Needed for wxImageList #include // Needed for MULE_VALIDATE_ #include // Needed for StrToLong #include #include "MuleListCtrl.h" // Interface declarations #include "GetTickCount.h" // Needed for GetTickCount() #include "OtherFunctions.h" // For arrow-pixmaps #include "pixmaps/sort_dn.xpm" #include "pixmaps/sort_up.xpm" #include "pixmaps/sort_dnx2.xpm" #include "pixmaps/sort_upx2.xpm" // Global constants #ifdef __WXGTK__ const int COL_SIZE_MIN = 10; #elif defined(__WXMSW__) || defined(__WXMAC__) || defined(__WXCOCOA__) const int COL_SIZE_MIN = 0; #else #error Need to define COL_SIZE_MIN for your OS #endif BEGIN_EVENT_TABLE(CMuleListCtrl, MuleExtern::wxGenericListCtrl) EVT_LIST_COL_CLICK( -1, CMuleListCtrl::OnColumnLClick) EVT_LIST_COL_RIGHT_CLICK( -1, CMuleListCtrl::OnColumnRClick) EVT_LIST_ITEM_SELECTED(-1, CMuleListCtrl::OnItemSelected) EVT_LIST_ITEM_DESELECTED(-1, CMuleListCtrl::OnItemSelected) EVT_LIST_DELETE_ITEM(-1, CMuleListCtrl::OnItemDeleted) EVT_LIST_DELETE_ALL_ITEMS(-1, CMuleListCtrl::OnAllItemsDeleted) EVT_CHAR( CMuleListCtrl::OnChar) EVT_MENU_RANGE(MP_LISTCOL_1, MP_LISTCOL_15, CMuleListCtrl::OnMenuSelected) EVT_MOUSEWHEEL(CMuleListCtrl::OnMouseWheel) END_EVENT_TABLE() //! Shared list of arrow-pixmaps static wxImageList imgList(16, 16, true, 0); CMuleListCtrl::CMuleListCtrl(wxWindow *parent, wxWindowID winid, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) : MuleExtern::wxGenericListCtrl(parent, winid, pos, size, style, validator, name) { m_sort_func = NULL; m_tts_time = 0; m_tts_item = -1; m_isSorting = false; if (imgList.GetImageCount() == 0) { imgList.Add(wxBitmap(sort_dn_xpm)); imgList.Add(wxBitmap(sort_up_xpm)); imgList.Add(wxBitmap(sort_dnx2_xpm)); imgList.Add(wxBitmap(sort_upx2_xpm)); } // Default sort-order is to sort by the first column (asc). m_sort_orders.push_back(CColPair(0, 0)); SetImageList(&imgList, wxIMAGE_LIST_SMALL); } CMuleListCtrl::~CMuleListCtrl() { if (!m_name.IsEmpty()) { SaveSettings(); } } long CMuleListCtrl::InsertColumn(long col, const wxString& heading, int format, int width, const wxString& name) { if (!name.IsEmpty()) { #ifdef __DEBUG__ // Check for valid names wxASSERT_MSG(name.Find(wxT(':')) == wxNOT_FOUND, wxT("Column name \"") + name + wxT("\" contains invalid characters!")); wxASSERT_MSG(name.Find(wxT(',')) == wxNOT_FOUND, wxT("Column name \"") + name + wxT("\" contains invalid characters!")); // Check for uniqueness of names. for (ColNameList::const_iterator it = m_column_names.begin(); it != m_column_names.end(); ++it) { if (name == it->name) { wxFAIL_MSG(wxT("Column name \"") + name + wxT("\" is not unique!")); } } #endif // Insert name at position col. ColNameList::iterator it = m_column_names.begin(); while (it != m_column_names.end() && it->index < col) { ++it; } m_column_names.insert(it, ColNameEntry(col, width, name)); while (it != m_column_names.end()) { ++it; ++(it->index); } } return MuleExtern::wxGenericListCtrl::InsertColumn(col, heading, format, width); } void CMuleListCtrl::SaveSettings() { wxCHECK_RET(!m_name.IsEmpty(), wxT("Cannot save settings for unnamed list")); wxConfigBase* cfg = wxConfigBase::Get(); // Save sorting, column and order wxString sortOrder; for (CSortingList::iterator it = m_sort_orders.begin(); it != m_sort_orders.end();) { wxString columnName = GetColumnName(it->first); if (!columnName.IsEmpty()) { sortOrder += columnName; sortOrder += wxT(":"); sortOrder += it->second & SORT_DES ? wxT("1") : wxT("0"); sortOrder += wxT(":"); sortOrder += it->second & SORT_ALT ? wxT("1") : wxT("0"); if (++it != m_sort_orders.end()) { sortOrder += wxT(","); } } else { ++it; } } cfg->Write(wxT("/eMule/TableOrdering") + m_name, sortOrder); // Save column widths. ATM this is also used to signify hidden columns. wxString buffer; for (int i = 0; i < GetColumnCount(); ++i) { wxString columnName = GetColumnName(i); if (!columnName.IsEmpty()) { if (!buffer.IsEmpty()) { buffer << wxT(","); } int currentwidth = GetColumnWidth(i); int savedsize = (m_column_sizes.size() && (i < (int) m_column_sizes.size())) ? m_column_sizes[i] : 0; buffer << columnName << wxT(":") << ((currentwidth > 0) ? currentwidth : (-1 * savedsize)); } } cfg->Write(wxT("/eMule/TableWidths") + m_name, buffer); } void CMuleListCtrl::ParseOldConfigEntries(const wxString& sortOrders, const wxString& columnWidths) { // Set sort order (including sort column) wxStringTokenizer tokens(sortOrders, wxT(",")); while (tokens.HasMoreTokens()) { wxString token = tokens.GetNextToken(); long column = 0; unsigned long order = 0; if (token.BeforeFirst(wxT(' ')).Strip(wxString::both).ToLong(&column)) { if (token.AfterFirst(wxT(' ')).Strip(wxString::both).ToULong(&order)) { column = GetNewColumnIndex(column); // Sanity checking, to avoid asserting if column count changes. if (column >= 0 && column < GetColumnCount()) { // Sanity checking, to avoid asserting if data-format changes. if ((order & ~SORTING_MASK) == 0) { // SetSorting will take care of duplicate entries SetSorting(column, order); } } } } } // Set column widths int counter = 0; wxStringTokenizer tokenizer(columnWidths, wxT(",")); while (tokenizer.HasMoreTokens()) { long idx = GetNewColumnIndex(counter++); long width = StrToLong(tokenizer.GetNextToken()); if (idx >= 0) { SetColumnWidth(idx, width); } } } void CMuleListCtrl::LoadSettings() { wxCHECK_RET(!m_name.IsEmpty(), wxT("Cannot load settings for unnamed list")); wxConfigBase* cfg = wxConfigBase::Get(); // Load sort order (including sort-column) m_sort_orders.clear(); wxString sortOrders = cfg->Read(wxT("/eMule/TableOrdering") + m_name, wxEmptyString); wxString columnWidths = cfg->Read(wxT("/eMule/TableWidths") + m_name, wxEmptyString); // Prevent sorting from occuring when calling SetSorting MuleListCtrlCompare sortFunc = m_sort_func; m_sort_func = NULL; if (columnWidths.Find(wxT(':')) == wxNOT_FOUND) { // Old-style config entries... ParseOldConfigEntries(sortOrders, columnWidths); } else { // Sort orders wxStringTokenizer tokens(sortOrders, wxT(",")); // Sort orders are stored in order primary, secondary, ... // We want to apply them with SetSorting(), so we have to apply them in reverse order, // so that the primary order is applied last and wins. // Read them with tokenizer and store them in a list in reverse order. CStringList tokenList; while (tokens.HasMoreTokens()) { tokenList.push_front(tokens.GetNextToken()); } // ADUNANZA BEGIN #if 0 for (CStringList::iterator it = tokenList.begin(); it != tokenList.end(); it++) { #else for (CStringList::iterator it = tokenList.begin(); it != tokenList.end(); ++it) { #endif // ADUNANZA END wxString token = *it; wxString name = token.BeforeFirst(wxT(':')); long order = StrToLong(token.AfterFirst(wxT(':')).BeforeLast(wxT(':'))); long alt = StrToLong(token.AfterLast(wxT(':'))); int col = GetColumnIndex(name); if (col >= 0) { SetSorting(col, (order ? SORT_DES : 0) | (alt ? SORT_ALT : 0)); } } // Column widths wxStringTokenizer tkz(columnWidths, wxT(",")); while (tkz.HasMoreTokens()) { wxString token = tkz.GetNextToken(); wxString name = token.BeforeFirst(wxT(':')); long width = StrToLong(token.AfterFirst(wxT(':'))); int col = GetColumnIndex(name); if (col >= 0) { if (col >= (int) m_column_sizes.size()) { m_column_sizes.resize(col + 1, 0); } m_column_sizes[col] = abs(width); SetColumnWidth(col, (width > 0) ? width : 0); } } } // Must have at least one sort-order specified if (m_sort_orders.empty()) { m_sort_orders.push_back(CColPair(0, 0)); } // Re-enable sorting and resort the contents (if any). m_sort_func = sortFunc; SortList(); } const wxString& CMuleListCtrl::GetColumnName(int index) const { for (ColNameList::const_iterator it = m_column_names.begin(); it != m_column_names.end(); ++it) { if (it->index == index) { return it->name; } } return EmptyString; } int CMuleListCtrl::GetColumnDefaultWidth(int index) const { for (ColNameList::const_iterator it = m_column_names.begin(); it != m_column_names.end(); ++it) { if (it->index == index) { return it->defaultWidth; } } return wxLIST_AUTOSIZE; } int CMuleListCtrl::GetColumnIndex(const wxString& name) const { for (ColNameList::const_iterator it = m_column_names.begin(); it != m_column_names.end(); ++it) { if (it->name == name) { return it->index; } } return -1; } int CMuleListCtrl::GetNewColumnIndex(int oldindex) const { wxStringTokenizer oldcolumns(GetOldColumnOrder(), wxT(","), wxTOKEN_RET_EMPTY_ALL); while (oldcolumns.HasMoreTokens()) { wxString name = oldcolumns.GetNextToken(); if (oldindex == 0) { return GetColumnIndex(name); } --oldindex; } return -1; } long CMuleListCtrl::GetInsertPos(wxUIntPtr data) { // Find the best place to position the item through a binary search int Min = 0; int Max = GetItemCount(); // Only do this if there are any items and a sorter function. // Otherwise insert at end. if (Max && m_sort_func) { // This search will find the place to position the new item // so it matches current sorting. // The result will be the position the new item will have // after insertion, which is the format expected by the InsertItem function. // If the item equals another item it will be inserted after it. do { int cur_pos = ( Max - Min ) / 2 + Min; int cmp = CompareItems(data, GetItemData(cur_pos)); // Value is less than the one at the current pos if ( cmp < 0 ) { Max = cur_pos; } else { Min = cur_pos + 1; } } while ((Min != Max)); } return Max; } int CMuleListCtrl::CompareItems(wxUIntPtr item1, wxUIntPtr item2) { CSortingList::const_iterator it = m_sort_orders.begin(); for (; it != m_sort_orders.end(); ++it) { int result = m_sort_func(item1, item2, it->first | it->second); if (result != 0) { return result; } } // Ensure that different items are never considered equal. return CmpAny(item1, item2); } int CMuleListCtrl::SortProc(wxUIntPtr item1, wxUIntPtr item2, long data) { // ADUNANZA BEGIN // back #if 0 MuleSortData* sortdata = (MuleSortData*) data; #else MuleSortData* sortdata = reinterpret_cast(data); #endif // ADUNANZA END const CSortingList& orders = sortdata->m_sort_orders; CSortingList::const_iterator it = orders.begin(); for (; it != orders.end(); ++it) { int result = sortdata->m_sort_func(item1, item2, it->first | it->second); if (result != 0) { return result; } } // Ensure that different items are never considered equal. return CmpAny(item1, item2); } void CMuleListCtrl::SortList() { if (!IsSorting() && (m_sort_func && GetColumnCount())) { m_isSorting = true; MuleSortData sortdata(m_sort_orders, m_sort_func); // In many cases control already has correct order, and sorting causes nasty flickering. // Make one pass through it to check if sorting is necessary at all. int nrItems = GetItemCount(); bool clean = true; long lastItemdata = 0; if (nrItems > 1) { lastItemdata = GetItemData(0); } for (int i = 1; i < nrItems; i++) { long nextItemdata = GetItemData(i); if (SortProc(lastItemdata, nextItemdata, (long int)&sortdata) > 0) { // ok - we need to sort clean = false; break; } lastItemdata = nextItemdata; } if (clean) { // no need to sort m_isSorting = false; return; } // Positions are likely to be invalid after sorting. ResetTTS(); // Store the current selected items ItemDataList selectedItems = GetSelectedItems(); // Store the focused item long pos = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED ); wxUIntPtr focused = (pos == -1) ? 0 : GetItemData(pos); SortItems(SortProc, (long int)&sortdata); // Re-select the selected items. for (unsigned i = 0; i < selectedItems.size(); ++i) { long it_pos = FindItem(-1, selectedItems[i]); if (it_pos != -1) { SetItemState(it_pos, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); } } // Set focus on item if any was focused if (focused) { long it_pos = FindItem(-1, focused); if (it_pos != -1) { SetItemState(it_pos, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED); } } m_isSorting = false; } } CMuleListCtrl::ItemDataList CMuleListCtrl::GetSelectedItems() const { // Create the initial vector with as many items as are selected ItemDataList list( GetSelectedItemCount() ); // Current item being located unsigned int current = 0; long pos = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); while ( pos != -1 ) { wxASSERT( current < list.size() ); list[ current++ ] = GetItemData( pos ); pos = GetNextItem( pos, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); } return list; } void CMuleListCtrl::OnColumnRClick(wxListEvent& evt) { wxMenu menu; wxListItem item; for ( int i = 0; i < GetColumnCount() && i < 15; ++i) { GetColumn(i, item); menu.AppendCheckItem(i + MP_LISTCOL_1, item.GetText() ); menu.Check( i + MP_LISTCOL_1, GetColumnWidth(i) > COL_SIZE_MIN ); } PopupMenu(&menu, evt.GetPoint()); } void CMuleListCtrl::OnMenuSelected( wxCommandEvent& evt ) { unsigned int col = evt.GetId() - MP_LISTCOL_1; if (col >= m_column_sizes.size()) { m_column_sizes.resize(col + 1, 0); } if (GetColumnWidth(col) > COL_SIZE_MIN) { m_column_sizes[col] = GetColumnWidth(col); SetColumnWidth(col, 0); } else { int oldsize = m_column_sizes[col]; SetColumnWidth(col, (oldsize > 0) ? oldsize : GetColumnDefaultWidth(col)); } } void CMuleListCtrl::OnColumnLClick(wxListEvent& evt) { // Stop if no sorter-function has been defined if (!m_sort_func) { return; } else if (evt.GetColumn() == -1) { // This happens if a user clicks past the last column header. return; } unsigned sort_order = 0; if (m_sort_orders.front().first == (unsigned)evt.GetColumn()) { // Same column as before, flip the sort-order sort_order = m_sort_orders.front().second; if (sort_order & SORT_DES) { if (AltSortAllowed(evt.GetColumn())) { sort_order = (~sort_order) & SORT_ALT; } else { sort_order = 0; } } else { sort_order = SORT_DES | (sort_order & SORT_ALT); } m_sort_orders.pop_front(); } else { // Check if the column has already been set CSortingList::iterator it = m_sort_orders.begin(); for (; it != m_sort_orders.end(); ++it) { if ((unsigned)evt.GetColumn() == it->first) { sort_order = it->second; break; } } } SetSorting(evt.GetColumn(), sort_order); } void CMuleListCtrl::ClearSelection() { if (GetSelectedItemCount()) { long index = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); while (index != -1) { SetItemState(index, 0, wxLIST_STATE_SELECTED); index = GetNextItem(index, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); } } } bool CMuleListCtrl::AltSortAllowed(unsigned WXUNUSED(column)) const { return false; } void CMuleListCtrl::SetSorting(unsigned column, unsigned order) { MULE_VALIDATE_PARAMS(column < (unsigned)GetColumnCount(), wxT("Invalid column to sort by.")); MULE_VALIDATE_PARAMS(!(order & ~SORTING_MASK), wxT("Sorting order contains invalid data.")); if (!m_sort_orders.empty()) { SetColumnImage(m_sort_orders.front().first, -1); CSortingList::iterator it = m_sort_orders.begin(); for (; it != m_sort_orders.end(); ++it) { if (it->first == column) { m_sort_orders.erase(it); break; } } } m_sort_orders.push_front(CColPair(column, order)); if (order & SORT_DES) { SetColumnImage(column, (order & SORT_ALT) ? 2 : 0); } else { SetColumnImage(column, (order & SORT_ALT) ? 3 : 1); } SortList(); } bool CMuleListCtrl::IsItemSorted(long item) { wxCHECK_MSG(m_sort_func, true, wxT("No sort function specified!")); wxCHECK_MSG((item >= 0) && (item < GetItemCount()), true, wxT("Invalid item")); bool sorted = true; wxUIntPtr data = GetItemData(item); // Check that the item before the current item is smaller (or equal) if (item > 0) { sorted &= (CompareItems(GetItemData(item - 1), data) <= 0); } // Check that the item after the current item is greater (or equal) if (sorted && (item < GetItemCount() - 1)) { sorted &= (CompareItems(GetItemData(item + 1), data) >= 0); } return sorted; } void CMuleListCtrl::OnMouseWheel(wxMouseEvent &event) { // This enables scrolling with the mouse wheel event.Skip(); } void CMuleListCtrl::SetColumnImage(unsigned col, int image) { wxListItem item; item.SetMask(wxLIST_MASK_IMAGE); item.SetImage(image); SetColumn(col, item); } long CMuleListCtrl::CheckSelection(wxMouseEvent& event) { int flags = 0; wxListEvent evt; evt.m_itemIndex = HitTest(event.GetPosition(), flags); return CheckSelection(evt); } long CMuleListCtrl::CheckSelection(wxListEvent& event) { long item = event.GetIndex(); // Check if clicked item is selected. If not, unselect all and select it. if ((item != -1) && !GetItemState(item, wxLIST_STATE_SELECTED)) { ClearSelection(); SetItemState(item, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); } return item; } wxString CMuleListCtrl::GetTTSText(unsigned item) const { MULE_VALIDATE_PARAMS(item < (unsigned)GetItemCount(), wxT("Invalid row.")); MULE_VALIDATE_STATE((GetWindowStyle() & wxLC_OWNERDRAW) == 0, wxT("GetTTSText must be overwritten for owner-drawn lists.")); return GetItemText(item); } void CMuleListCtrl::OnChar(wxKeyEvent& evt) { int key = evt.GetKeyCode(); if (key == 0) { // We prefer GetKeyCode() to GetUnicodeKey(), in order to work // around a bug in the GetUnicodeKey(), that causes values to // be returned untranslated. This means for instance, that if // shift and '1' is pressed, the result is '1' rather than '!' // (as it should be on my keyboard). This has been reported: // http://sourceforge.net/tracker/index.php?func=detail&aid=1864810&group_id=9863&atid=109863 key = evt.GetUnicodeKey(); } else if (key >= WXK_START) { // wxKeycodes are ignored, as they signify events such as the 'home' // button. Unicoded chars are not checked as there is an overlap valid // chars and the wx keycodes. evt.Skip(); return; } // We wish to avoid handling shortcuts, with the exception of 'select-all'. if (evt.AltDown() || evt.ControlDown() || evt.MetaDown()) { if (evt.CmdDown() && (evt.GetKeyCode() == 0x01)) { // Ctrl+a (Command+a on Mac) was pressed, select all items for (int i = 0; i < GetItemCount(); ++i) { SetItemState(i, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); } } evt.Skip(); return; } else if (m_tts_time + 1500u < GetTickCount()) { m_tts_text.Clear(); } m_tts_time = GetTickCount(); m_tts_text.Append(wxTolower(key)); // May happen if the subclass does not forward deletion events. // Or rather when single-char-repeated (see below) wraps around, so don't assert. if (m_tts_item >= GetItemCount()) { m_tts_item = -1; } unsigned next = (m_tts_item == -1) ? 0 : m_tts_item; for (unsigned i = 0, count = GetItemCount(); i < count; ++i) { wxString text = GetTTSText((next + i) % count).MakeLower(); if (text.StartsWith(m_tts_text)) { ClearSelection(); m_tts_item = (next + i) % count; SetItemState(m_tts_item, wxLIST_STATE_FOCUSED | wxLIST_STATE_SELECTED, wxLIST_STATE_FOCUSED | wxLIST_STATE_SELECTED); EnsureVisible(m_tts_item); return; } } if (m_tts_item != -1) { // Crop the string so that it matches the old item (avoid typos). wxString text = GetTTSText(m_tts_item).MakeLower(); // If the last key didn't result in a hit, then we skip the event. if (!text.StartsWith(m_tts_text)) { if ((m_tts_text.Length() == 2) && (m_tts_text[0] == m_tts_text[1])) { // Special case, single-char, repeated. This allows toggeling // between items starting with a specific letter. m_tts_text.Clear(); // Increment, so the next will be selected (or wrap around). m_tts_item++; OnChar(evt); } else { m_tts_text.RemoveLast(); evt.Skip(true); } } } else { evt.Skip(true); } } void CMuleListCtrl::OnItemSelected(wxListEvent& evt) { if (IsSorting()) { // Selection/Deselection that happened while sorting. evt.Veto(); } else { // We reset the current TTS session if the user manually changes the selection if (m_tts_item != evt.GetIndex()) { ResetTTS(); // The item is changed so that the next TTS starts from the selected item. m_tts_item = evt.GetIndex(); } evt.Skip(); } } void CMuleListCtrl::OnItemDeleted(wxListEvent& evt) { if (evt.GetIndex() <= m_tts_item) { m_tts_item--; } evt.Skip(); } void CMuleListCtrl::OnAllItemsDeleted(wxListEvent& evt) { ResetTTS(); evt.Skip(); } void CMuleListCtrl::ResetTTS() { m_tts_item = -1; m_tts_time = 0; } wxString CMuleListCtrl::GetOldColumnOrder() const { return wxEmptyString; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/UploadBandwidthThrottler.h0000644000175000017500000000566112050266603023461 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2005-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef UPLOADBANDWIDTHTHROTTLER_H #define UPLOADBANDWIDTHTHROTTLER_H #include #include #include "Types.h" class ThrottledControlSocket; class ThrottledFileSocket; class UploadBandwidthThrottler : public wxThread { public: UploadBandwidthThrottler(); ~UploadBandwidthThrottler(); uint64 GetNumberOfSentBytesSinceLastCallAndReset(); uint64 GetNumberOfSentBytesOverheadSinceLastCallAndReset(); void AddToStandardList(uint32 index, ThrottledFileSocket* socket); bool RemoveFromStandardList(ThrottledFileSocket* socket); void QueueForSendingControlPacket(ThrottledControlSocket* socket, bool hasSent = false); void RemoveFromAllQueues(ThrottledControlSocket* socket); void RemoveFromAllQueues(ThrottledFileSocket* socket); void EndThread(); private: void DoRemoveFromAllQueues(ThrottledControlSocket* socket); bool RemoveFromStandardListNoLock(ThrottledFileSocket* socket); void* Entry(); bool m_doRun; wxMutex m_sendLocker; wxMutex m_tempQueueLocker; typedef std::deque SocketQueue; // a queue for all the sockets that want to have Send() called on them. SocketQueue m_ControlQueue_list; // a queue for all the sockets that want to have Send() called on them. SocketQueue m_ControlQueueFirst_list; // sockets that wants to enter m_ControlQueue_list SocketQueue m_TempControlQueue_list; // sockets that wants to enter m_ControlQueue_list and has been able to send before SocketQueue m_TempControlQueueFirst_list; typedef std::deque FileSocketQueue; // sockets that have upload slots. Ordered so the most prioritized socket is first FileSocketQueue m_StandardOrder_list; uint64 m_SentBytesSinceLastCall; uint64 m_SentBytesSinceLastCallOverhead; }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/KadDlg.cpp0000644000175000017500000002255312050266603020160 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2004-2011 Angel Vidal (Kry) ( kry@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "KadDlg.h" #include "muuli_wdr.h" #include "OScopeCtrl.h" #include "OtherFunctions.h" #include "HTTPDownload.h" #include "Logger.h" #include "amule.h" #include "Preferences.h" #include "StatisticsDlg.h" #include "ColorFrameCtrl.h" #include "amuleDlg.h" #include "MuleColour.h" #include "Statistics.h" #ifndef CLIENT_GUI #include "kademlia/kademlia/Kademlia.h" #endif BEGIN_EVENT_TABLE(CKadDlg, wxPanel) EVT_TEXT(ID_NODE_IP1, CKadDlg::OnFieldsChange) EVT_TEXT(ID_NODE_IP2, CKadDlg::OnFieldsChange) EVT_TEXT(ID_NODE_IP3, CKadDlg::OnFieldsChange) EVT_TEXT(ID_NODE_IP4, CKadDlg::OnFieldsChange) EVT_TEXT(ID_NODE_PORT, CKadDlg::OnFieldsChange) EVT_TEXT_ENTER(IDC_NODESLISTURL ,CKadDlg::OnBnClickedUpdateNodeList) EVT_BUTTON(ID_NODECONNECT, CKadDlg::OnBnClickedBootstrapClient) EVT_BUTTON(ID_KNOWNNODECONNECT, CKadDlg::OnBnClickedBootstrapKnown) EVT_BUTTON(ID_KADDISCONNECT, CKadDlg::OnBnClickedDisconnectKad) EVT_BUTTON(ID_UPDATEKADLIST, CKadDlg::OnBnClickedUpdateNodeList) END_EVENT_TABLE() CKadDlg::CKadDlg(wxWindow* pParent) : wxPanel(pParent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, wxT("kadwnd") ) { m_kad_scope = NULL; } void CKadDlg::Init() { m_kad_scope = CastChild( wxT("kadScope"), COScopeCtrl ); m_kad_scope->SetRanges(0.0, thePrefs::GetStatsMax()); m_kad_scope->SetYUnits(wxT("Nodes")); #ifndef __WXMSW__ // // Get label with line breaks out of muuli.wdr, because generated code fails // to compile in Windows. // // In Windows, setting a button label with a newline fails (the newline is ignored). // Creating a button with such a label works however. :-/ // So leave the label from the muuli (without line breaks) here, // so it can still be fixed in the translation. // wxButton* bootstrap = CastChild(ID_KNOWNNODECONNECT, wxButton); bootstrap->SetLabel(_("Bootstrap from \nknown clients")); #endif SetUpdatePeriod(thePrefs::GetTrafficOMeterInterval()); SetGraphColors(); } void CKadDlg::SetUpdatePeriod(int step) { // this gets called after the value in Preferences/Statistics/Update delay has been changed if (step == 0) { m_kad_scope->Stop(); } else { m_kad_scope->Reset(step); } } void CKadDlg::SetGraphColors() { // ADUNANZA BEGIN #if 0 static const char aTrend[] = { 2, 1, 0 }; static const int aRes[] = { IDC_C0, IDC_C0_3, IDC_C0_2 }; #else static const char aTrend[] = { 3, 2, 1, 0 }; static const int aRes[] = { IDC_C1, IDC_C0, IDC_C0_3, IDC_C0_2 }; #endif // ADUNANZA END m_kad_scope->SetBackgroundColor(CStatisticsDlg::getColors(0)); m_kad_scope->SetGridColor(CStatisticsDlg::getColors(1)); // ADUNANZA BEGIN #if 0 for (size_t i = 0; i < 3; ++i) { #else for (size_t i = 0; i < 4; ++i) { #endif // ADUNANZA END m_kad_scope->SetPlotColor(CStatisticsDlg::getColors(12 + i), aTrend[i]); CColorFrameCtrl* ctrl = CastChild(aRes[i], CColorFrameCtrl); ctrl->SetBackgroundBrushColour(CMuleColour(CStatisticsDlg::getColors(12 + i))); ctrl->SetFrameBrushColour(*wxBLACK); } } void CKadDlg::UpdateGraph(const GraphUpdateInfo& update) { // ADUNANZA BEGIN #if 0 std::vector v(3); #else std::vector v(4); #endif // ADUNANZA END v[0] = const_cast(&update.kadnodes[0]); v[1] = const_cast(&update.kadnodes[1]); v[2] = const_cast(&update.kadnodes[2]); // ADUNANZA BEGIN v[3] = const_cast(&update.kadnodes[3]); // ADUNANZA END const std::vector &apfKad(v); unsigned nodeCount = static_cast(update.kadnodes[2]); // ADUNANZA BEGIN // unsigned activeNodeCount = static_cast(update.kadnodes[3]); // ADUNANZA END if (!IsShownOnScreen()) { m_kad_scope->DelayPoints(); } else { // ADUNANZA BEGIN #if 0 // Check the current node-count to see if we should increase the graph height if (m_kad_scope->GetUpperLimit() < update.kadnodes[2]) { // Grow the limit by 50 sized increments. m_kad_scope->SetRanges(0.0, ((nodeCount + 49) / 50) * 50); } #endif float range = m_kad_scope->GetUpperLimit(); // limito range al massimo a 1,5 volte update.kadnodes[1] float theLimit = 1.5f * update.kadnodes[1]; range = std::min(range, theLimit); // eventualmente aumento di 50 if (range < update.kadnodes[2]) { range = ((nodeCount + 49) / 50) * 50; } m_kad_scope->SetRanges(0.0, range); // ADUNANZA END m_kad_scope->AppendPoints(update.timestamp, apfKad); } // ADUNANZA BEGIN // back #if 0 wxStaticText* label = CastChild( wxT("nodesListLabel"), wxStaticText ); wxCHECK_RET(label, wxT("Failed to find kad-nodes label")); label->SetLabel(CFormat(_("Nodes (%u)")) % nodeCount); label->GetParent()->Layout(); #endif // ADUNANZA END } // ADUNANZA BEGIN // back void CKadDlg::UpdateNodeCount(unsigned nodeCount) { wxStaticText* label = CastChild( wxT("nodesListLabel"), wxStaticText ); wxCHECK_RET(label, wxT("Failed to find kad-nodes label")); label->SetLabel(CFormat(_("Nodes (%u)")) % nodeCount); label->GetParent()->Layout(); } // ADUNANZA END // ADUNANZA BEGIN // back + personalizzazione ADU void CKadDlg::UpdateNodeCount(unsigned nodeCount, unsigned int activeNodeCount) { wxStaticText* label = CastChild( wxT("nodesListLabel"), wxStaticText ); wxCHECK_RET(label, wxT("Failed to find kad-nodes label")); label->SetLabel(CFormat(_("Active nodes %u (total %u)")) % activeNodeCount % nodeCount); label->GetParent()->Layout(); } // ADUNANZA END // Enables or disables the node connect button depending on the conents of the text fields void CKadDlg::OnFieldsChange(wxCommandEvent& WXUNUSED(evt)) { // These are the IDs of the search-fields int textfields[] = { ID_NODE_IP1, ID_NODE_IP2, ID_NODE_IP3, ID_NODE_IP4, ID_NODE_PORT}; bool enable = true; for ( uint16 i = 0; i < itemsof(textfields); i++ ) { enable &= !CastChild(textfields[i], wxTextCtrl)->GetValue().IsEmpty(); } // Enable the node connect button if all fields contain text FindWindowById(ID_NODECONNECT)->Enable( enable ); } void CKadDlg::OnBnClickedBootstrapClient(wxCommandEvent& WXUNUSED(evt)) { if (FindWindowById(ID_NODECONNECT)->IsEnabled()) { // Ip is reversed since StringIPtoUint32 returns anti-host and kad expects host order uint32 ip = StringIPtoUint32( // ADUNANZA BEGIN // back #if 0 ((wxTextCtrl*)FindWindowById( ID_NODE_IP4 ))->GetValue() + wxT(".") + ((wxTextCtrl*)FindWindowById( ID_NODE_IP3 ))->GetValue() + wxT(".") + ((wxTextCtrl*)FindWindowById( ID_NODE_IP2 ))->GetValue() + wxT(".") + ((wxTextCtrl*)FindWindowById( ID_NODE_IP1 ))->GetValue() ); #else dynamic_cast(FindWindowById(ID_NODE_IP4))->GetValue() + wxT(".") + dynamic_cast(FindWindowById(ID_NODE_IP3))->GetValue() + wxT(".") + dynamic_cast(FindWindowById(ID_NODE_IP2))->GetValue() + wxT(".") + dynamic_cast(FindWindowById(ID_NODE_IP1))->GetValue() ); #endif // ADUNANZA END if (ip == 0) { wxMessageBox(_("Invalid ip to bootstrap"), _("WARNING"), wxOK | wxICON_EXCLAMATION, this); } else { unsigned long port; // ADUNANZA BEGIN // back #if 0 if (((wxTextCtrl*)FindWindowById( ID_NODE_PORT ))->GetValue().ToULong(&port)) { #else if (dynamic_cast(FindWindowById(ID_NODE_PORT))->GetValue().ToULong(&port)) { #endif // ADUNANZA END theApp->BootstrapKad(ip, port); } else { wxMessageBox(_("Invalid port to bootstrap"), _("WARNING"), wxOK | wxICON_EXCLAMATION, this); } } } else { wxMessageBox(_("Please fill all fields required"), _("Message"), wxOK | wxICON_INFORMATION, this); } } void CKadDlg::OnBnClickedBootstrapKnown(wxCommandEvent& WXUNUSED(evt)) { theApp->StartKad(); } void CKadDlg::OnBnClickedDisconnectKad(wxCommandEvent& WXUNUSED(evt)) { theApp->StopKad(); } void CKadDlg::OnBnClickedUpdateNodeList(wxCommandEvent& WXUNUSED(evt)) { if ( wxMessageBox( wxString(_("Are you sure you want to download a new nodes.dat file?\n")) + _("Doing so will remove your current nodes and restart Kademlia connection.") , _("Continue?"), wxICON_EXCLAMATION | wxYES_NO, this) == wxYES ) { // ADUNANZA BEGIN // back #if 0 wxString strURL = ((wxTextCtrl*)FindWindowById( IDC_NODESLISTURL ))->GetValue(); #else wxString strURL = dynamic_cast(FindWindowById(IDC_NODESLISTURL))->GetValue(); #endif // ADUNANZA END thePrefs::SetKadNodesUrl(strURL); theApp->UpdateNotesDat(strURL); } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/MuleListCtrl.h0000644000175000017500000003441612050266603021063 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef MULELISTCTRL_H #define MULELISTCTRL_H #ifdef _WIN32 #include #endif #include // Do_not_auto_remove (Mac, Win32, and just good practice) #include "extern/wxWidgets/listctrl.h" #include #include /** * Enhanced wxListCtrl provided custom-drawing among other things. * * This class provides these features which the original wxListCtrl lacks: * - Automatic sort arrows upon clicks on the column headers * - Custom drawing of items. * - Hiding of columns through auto-generated popup-menu. * - Helper function for inserting items pre-sorted. * - Loading and saving of column properties. * - Selection of items by typing an initial part of the text (TTS). */ class CMuleListCtrl : public MuleExtern::wxGenericListCtrl { public: /** * The various ways in which a column can be sorted. * * If SORT_DES is not set, sorting is taken to be * ascending. If SORT_ALT is not set, sorting is * taken to be normal. */ enum MLOrder { //! If set, sorting is to be in descending order. SORT_DES = 0x1000, //! If sorting should use alternate method. //! Is specified in with or without DEC. SORT_ALT = 0x2000 }; //! Mask which covers the column part of the sort-data. static const unsigned COLUMN_MASK = 0xfff; //! Mask which covers the sorting part of the sort-data. static const unsigned SORTING_MASK = 0x3000; /** * Constructor. * * @see wxGenericListCtrl::wxGenericListCtrl for documentation of parameters. */ CMuleListCtrl( wxWindow *parent, wxWindowID winid = -1, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator, const wxString &name = wxT("mulelistctrl") ); /** * Destructor. * * If a name for the table has been specified with SetTableName, then * column settings will be saved automatically. */ virtual ~CMuleListCtrl(); /** * Saves column settings. * * Currently saves the width of all columns, hidden columns, the column * to sort by and in which direction to sort. */ virtual void SaveSettings(); /** * Loads column settings. * * Currently loads the width of all columns, hidden columns, the column * to sort by and in which direction to sort. This function also ensures * that the items are sorted after the settings have been read. */ virtual void LoadSettings(); /** * This function tries to locate the best place to insert an item. * * @param The userdata of the new item. * * This function does a binary type search to locate the best place to * insert the new item with the specified userdata. It then returns the * item after this position. To do this, the sorter-function must be set * through the SetSortFunc function, otherwise it will just return the * position after the last item. */ long GetInsertPos( wxUIntPtr data ); /** * Sorts the list. * * Before you can use this function, you will need to specify a sorter * function using SetSortFunc. wxListCtrl needs such a function to * perform the sort. */ virtual void SortList(); //! The type of the list of item specific data typedef std::vector ItemDataList; /** * Returns a list the user-data of all selected items. * * @return A list of data associated with the selected items. * * This function will return the user-data for each selected item in a * vector, which can then be manipulated with regards to changes made * in the current order of the listctrl items. */ ItemDataList GetSelectedItems() const; /** * Sets the sorter function. * * @param func * * See the documentation on wxListCtrl::SortItems for more information * about the expected function type. */ void SetSortFunc(MuleListCtrlCompare func) { m_sort_func = func; } /** * Deselects all selected items, but does not change focus. */ void ClearSelection(); /** * Insert a new column. * * @param[in] col Column will be inserted at this position. * @param[in] heading Heading text for the column. * @param[in] format Format (alignment) of the column. * @param[in] width The column width. * @param[in] name Internal name of the column. * * We override this method to allow a name to be specified for each * column. The name is used for saving/loading column settings * independently of their index. It is necessary to set a unique name * for each column, to let column settings be saved/loaded. If you * don't set a name for a column, settings for that column won't be * saved. * * Requirements about column names: * - they must not contain the ':' (colon) and ',' (comma) characters, * - they should be at least one character long. * * @note Changing the internal name of one column results in width of * that column being reset to default, and if sorting was done by that * column, sorting being forgotten. If you change the name of a column, * don't forget to update the list GetOldColumnOrder() returns, if * necessary. * * For more information refer to the wxWidgets documentation of * wxListCtrl::InsertColumn() */ long InsertColumn( long col, const wxString& heading, int format = wxLIST_FORMAT_LEFT, int width = -1, const wxString& name = wxEmptyString ); /** * Clears all items and all columns. * * Intercepted to clear column name list. * * For more information see the wxWidgets documentation of * wxListCtrl::ClearAll() */ void ClearAll() { m_column_names.clear(); MuleExtern::wxGenericListCtrl::ClearAll(); } /** * Delete one column from the list. * * Not implemented yet, intercepted here just as a sanity check. */ bool DeleteColumn(int WXUNUSED(col)) { wxFAIL; return false; } /** * Indicates if we're in the process of sorting. */ bool IsSorting() const { return m_isSorting; } protected: /** * Must be overwritten to enable alternate sorting. * * @param The column being sorted. * * Subclasses of CMuleListCtrl can allow alternative sorting * of columns. This is done by overriding this function and * returning true for the columns where alternative sorting * is desired. */ virtual bool AltSortAllowed(unsigned column) const; /** * Returns the string used when selecting rows via Type-To-Select. * * @param item The index of the item being examined. * * By default, this function simply returns the text in the first * column for the given item. However, when owner-drawing is * enabled, this function _must_ be overriden. */ virtual wxString GetTTSText(unsigned item) const; /** * Sets the internally used table-name. * * @param name The new name or an empty string to disable. * * You need to call this function with a unique name before you can * make use of the LoadSettings/SaveSettings functions. CMuleListCtrl * uses the name specified in this command to create unique keynames. */ void SetTableName(const wxString& name) { m_name = name; } /** * Return old column order. * * @return The pre-2.2.2 column order. * * This function should be overridden in descendant classes to return a * comma-separated list of the old column order, when column data was * saved/loaded by index. The default implementation returns an empty * string, meaning that old settings (if any) should be discarded. * * @note When you add or remove columns from the list control, DO NOT * change this list. This list may only be updated if you changed a * column name that is already in this list, to reflect the name * change. List order also must be preserved. */ virtual wxString GetOldColumnOrder() const; /** * Returns the column which is currently used to sort the list. */ unsigned GetSortColumn() const { return m_sort_orders.front().first; } /** * Returns the current sorting order, a combination of the DES and ALT flags. */ unsigned GetSortOrder() const { return m_sort_orders.front().second; } /** * Set the sort column * * @param column The column with which the list should be sorted. * @param order The order in which to sort the column. * * Note that attempting to sort a column in an unsupported order * is an illegal operation. */ virtual void SetSorting(unsigned column, unsigned order); /** * Returns true if the item is sorted compared to its neighbours. */ bool IsItemSorted(long item); /** * Check and fix selection state. * * @param event The event which triggered the selection. * @return The index of the item selected or -1 if none. * * This function checks if the clicked item is selected. * If not, then the item is selected and all other items * are deselected. */ //@{ long CheckSelection(wxListEvent& event); long CheckSelection(wxMouseEvent& event); //@} /** * Event handler for right-clicks on the column headers. */ void OnColumnRClick(wxListEvent& evt); /** * Event handler for left-clicks on the column headers. */ void OnColumnLClick(wxListEvent& evt); /** * Event handler for the hide/show menu items. */ void OnMenuSelected(wxCommandEvent& evt); /** * Event handler for the mouse wheel. */ void OnMouseWheel(wxMouseEvent &event); /** * Event handler for key-presses, needed by TTS. */ void OnChar(wxKeyEvent& evt); /** * Event handler for item selection/deletion, needed by TTS. */ void OnItemSelected(wxListEvent& evt); void OnItemDeleted(wxListEvent& evt); void OnAllItemsDeleted(wxListEvent& evt); private: /** * Resets the current TTS session. */ void ResetTTS(); /** * Sets the image of a specific column. * * @param col The column to change. * @param order The sorting order to represent. Zero unsets the image. */ void SetColumnImage(unsigned col, int image); //! The name of the table. Used to load/save settings. wxString m_name; //! The sorter function needed by wxListCtrl. MuleListCtrlCompare m_sort_func; //! Contains the current search string. wxString m_tts_text; //! Timestamp for the last TTS event. unsigned m_tts_time; //! The index of the last item selected via TTS. int m_tts_item; /** * Wrapper around the user-provided sorter function. * * This function ensures that items are sorted in the order * specified by clicking on column-headers, and also enforces * that different entries are never considered equal. This is * required for lists that make use of child-items, since * otherwise, parents may not end up properly located in * relation to child-items. */ static int wxCALLBACK SortProc(wxUIntPtr item1, wxUIntPtr item2, long sortData); /** Compares two items in the list, using the current sort sequence. */ int CompareItems(wxUIntPtr item1, wxUIntPtr item2); //! This pair contains a column number and its sorting order. typedef std::pair CColPair; typedef std::list CSortingList; class MuleSortData { public: MuleSortData(CSortingList sort_orders, MuleListCtrlCompare sort_func) : m_sort_orders(sort_orders), m_sort_func(sort_func) { }; CSortingList m_sort_orders; MuleListCtrlCompare m_sort_func; }; //! This list contains in order the columns sequence to sort by. CSortingList m_sort_orders; /** * Get the column name by index. * * @param[in] column Index of the column whose name we're looking for. * * @return The column name or an empty string if index is invalid * (out of range), or the column name hasn't been set. */ const wxString& GetColumnName(int column) const; /** * Get the column default width by index. * * @param[in] column Index of the column whose name we're looking for. * * @return The column default width or wx default width if index is invalid * (out of range), or the column name hasn't been set. */ int GetColumnDefaultWidth(int column) const; /** * Get column index by name. * * @param[in] name Internal name of the colunm whose index is needed. * * @return The column index, or -1 in case the name was invalid. */ int GetColumnIndex(const wxString& name) const; /** * Find out the new index of the column by the old index. * * @param[in] oldindex Old column index which we want to turn into a * new index. * * @return The new index of the column, or -1 if an error occured. */ int GetNewColumnIndex(int oldindex) const; /** * Parses old config entries. * * @param[in] sortOrders Old sort orders line. * @param[in] columnWidths Old column widths line. */ void ParseOldConfigEntries(const wxString& sortOrders, const wxString& columnWidths); /// This class contains a column index, its default width and its name. class ColNameEntry { public: int index; int defaultWidth; wxString name; ColNameEntry(int _index, int _defaultWidth, const wxString& _name) : index(_index), defaultWidth(_defaultWidth), name(_name) {} }; /// This list contains the columns' names. typedef std::list ColNameList; /// Container for column names, sorted by column index. ColNameList m_column_names; /// This vector contains a cache of the columns' sizes. typedef std::vector ColSizeVector; /// Container for column sizes cache. ColSizeVector m_column_sizes; // True while sorting. bool m_isSorting; DECLARE_EVENT_TABLE() }; #endif // MULELISTCTRL_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ClientTCPSocket.h0000644000175000017500000000577512050266603021444 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // // // Handling incoming connections (up or downloadrequests) // #ifndef CLIENTTCPSOCKET_H #define CLIENTTCPSOCKET_H #include "EMSocket.h" // Needed for CEMSocket class CProxyData; //------------------------------------------------------------------------------ // CClientTCPSocket //------------------------------------------------------------------------------ class CUpDownClient; class CPacket; class CTimerWnd; class CClientTCPSocket : public CEMSocket { public: CClientTCPSocket(CUpDownClient* in_client = NULL, const CProxyData *ProxyData = NULL); virtual ~CClientTCPSocket(); void Disconnect(const wxString& strReason); bool InitNetworkData(); bool CheckTimeOut(); void Safe_Delete(); void Safe_Delete_Client(); bool ForDeletion() const { return m_ForDeletion; } void OnConnect(int nErrorCode); void OnSend(int nErrorCode); void OnReceive(int nErrorCode); void OnClose(int nErrorCode); void OnError(int nErrorCode); uint32 GetRemoteIP() const { return m_remoteip; } CUpDownClient* GetClient() { return m_client; } virtual void SendPacket(CPacket* packet, bool delpacket = true, bool controlpacket = true, uint32 actualPayloadSize = 0); virtual SocketSentBytes SendControlData(uint32 maxNumberOfBytesToSend, uint32 overchargeMaxBytesToSend); virtual SocketSentBytes SendFileAndControlData(uint32 maxNumberOfBytesToSend, uint32 overchargeMaxBytesToSend); protected: virtual bool PacketReceived(CPacket* packet); private: CUpDownClient* m_client; bool ProcessPacket(const byte* packet, uint32 size, uint8 opcode); bool ProcessExtPacket(const byte* packet, uint32 size, uint8 opcode); bool ProcessED2Kv2Packet(const byte* packet, uint32 size, uint8 opcode); void ResetTimeOutTimer(); void SetClient(CUpDownClient* client); bool m_ForDeletion; // 0.30c (Creteil), set as bool uint32 timeout_timer; uint32 m_remoteip; }; #endif // CLIENTTCPSOCKET_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/FileAutoClose.h0000644000175000017500000001126612050266603021174 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2008-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2008-2011 Stu Redman ( sturedman@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef FILEAUTOCLOSE_H #define FILEAUTOCLOSE_H #include "CFile.h" // Needed for CFile /** * This class encapsulates the CFile class. * * It allows to close the used file handle and reopen * it on usage to minimize the number of used file handles. * */ class CFileAutoClose { public: /** * Creates a closed file. */ CFileAutoClose(); /** * Constructor, calls Open on the specified file. * * To check if the file was successfully opened, a * call to IsOpened() is required. */ CFileAutoClose(const CPath& path, CFile::OpenMode mode = CFile::read); /** * Request auto closing of the file handle. * * @param now true: close immediately false: close when timeout has expired * @return True if the file has been (or has already been) autoclosed. */ bool Release(bool now = false); /** * Opens a file. * * @param path The full or relative path to the file. * @param mode The opening mode (see CFile). * @return True if the file was opened, false otherwise. */ bool Open(const CPath& path, CFile::OpenMode mode = CFile::read); /** * Calling Create is equivilant of calling open with OpenMode 'write'. * * @param overwrite Specifies if the target file should be overwritten, * in case that it already exists. * * @see CFile::Open */ bool Create(const CPath& path, bool overwrite = false); /** * Closes the file. * * Note that calling Close on an closed file * is an illegal operation. */ bool Close(); /** * @see CSafeFileIO::GetLength * * Note that calling GetLength on a closed file * is an illegal operation. */ uint64 GetLength() const; /** * Resizes the file to the specified length. * */ bool SetLength(uint64 newLength); /** * Returns the path of the currently opened file. * */ const CPath& GetFilePath() const; /** * Returns true if the file is opened, false otherwise. */ bool IsOpened() const; /** * Reads 'count' bytes into 'buffer'. * * @param buffer The target buffer. * @param offset The seek address in the file. * @param count The number of bytes to read. * * See CFileDataIO::Read */ void ReadAt(void* buffer, uint64 offset, size_t count); /** * Write 'count' bytes from 'buffer' into the file. * * @param buffer The source-data buffer. * @param offset The seek address in the file. * @param count The number of bytes to write. * * See CFileDataIO::Write */ void WriteAt(const void* buffer, uint64 offset, size_t count); /** * Returns true when the file-position is past or at the end of the file. */ bool Eof(); /** * Returns the file descriptior assosiated with the file. * * This breaks the purpose of this class of course. * Therefore the AutoClose mechanism is disabled when fd() is called. * It's required for FileArea's mmap stuff. * Currently FileArea objects are shortlived enough for this not being * a problem anyway, but that might change in the future. */ int fd(); /** * Reenables AutoClose disabled by fd() before. */ void Unlock(); private: //! A CFileAutoClose is neither copyable nor assignable. //@{ CFileAutoClose(const CFileAutoClose&); CFileAutoClose& operator=(const CFileAutoClose&); //@} /** * Check if file was autoclosed, and reopen if needed. */ void Reopen(); //! The wrapped CFile. CFile m_file; //! The mode used to open it. CFile::OpenMode m_mode; //! Is it temporarily closed? bool m_autoClosed; //! Autoclosing is disabled if != 0 uint16 m_locked; //! Size before it was closed. uint64 m_size; //! Last access time (s) uint32 m_lastAccess; }; #endif // FILEAUTOCLOSE_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ListenSocket.h0000644000175000017500000000474212050266603021106 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // // // Handling incoming connections (up or downloadrequests) // #ifndef LISTENSOCKET_H #define LISTENSOCKET_H #include "Proxy.h" // Needed fot CProxyData, CSocketServerProxy #include class CClientTCPSocket; // CListenSocket command target class CListenSocket : public CSocketServerProxy { public: CListenSocket(wxIPaddress &addr, const CProxyData *ProxyData = NULL); ~CListenSocket(); bool StartListening(); void StopListening(); void OnAccept(int nErrorCode); void Process(); void RemoveSocket(CClientTCPSocket* todel); void AddSocket(CClientTCPSocket* toadd); uint32 GetOpenSockets() {return socket_list.size();} void KillAllSockets(); bool TooManySockets(bool bIgnoreInterval = false); bool IsValidSocket(CClientTCPSocket* totest); void AddConnection(); void RecalculateStats(); void ReStartListening(); void UpdateConnectionsStatus(); float GetMaxConperFiveModifier(); uint32 GetTotalConnectionChecks() { return totalconnectionchecks; } float GetAverageConnections() { return averageconnections; } bool OnShutdown() { return shutdown;} private: typedef std::set SocketSet; SocketSet socket_list; bool bListening; bool shutdown; uint16 m_OpenSocketsInterval; uint16 m_ConnectionStates[3]; uint16 m_nPeningConnections; uint32 totalconnectionchecks; float averageconnections; }; #endif // LISTENSOCKET_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ServerListCtrl.h0000644000175000017500000001256712050266603021432 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef SERVERLISTCTRL_H #define SERVERLISTCTRL_H #include "MuleListCtrl.h" // Needed for CMuleListCtrl #define COLUMN_SERVER_NAME 0 #define COLUMN_SERVER_ADDR 1 #define COLUMN_SERVER_PORT 2 #define COLUMN_SERVER_DESC 3 #define COLUMN_SERVER_PING 4 #define COLUMN_SERVER_USERS 5 #define COLUMN_SERVER_FILES 6 #define COLUMN_SERVER_PRIO 7 #define COLUMN_SERVER_FAILS 8 #define COLUMN_SERVER_STATIC 9 #define COLUMN_SERVER_VERSION 10 #define COLUMN_SERVER_TCPFLAGS 11 #define COLUMN_SERVER_UDPFLAGS 12 class CServer; class CServerList; class wxListEvent; class wxCommandEvent; /** * The CServerListCtrl is used to display the list of servers which the user * can connect to and which we request sources from. It is a permanently sorted * list in that it always ensure that the items are sorted in the correct order. */ class CServerListCtrl : public CMuleListCtrl { public: /** * Constructor. * * @see CMuleListCtrl::CMuleListCtrl */ CServerListCtrl( wxWindow *parent, wxWindowID winid = -1, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator, const wxString &name = wxT("mulelistctrl") ); /** * Destructor. */ virtual ~CServerListCtrl(); /** * Adds a server to the list. * * @param A pointer to the new server. * * Internally this function calls RefreshServer and ShowServerCount, with * the result that it is legal to add servers already in the list, though * not recommended. */ void AddServer( CServer* toadd ); /** * Removes a server from the displayed list. */ void RemoveServer(CServer* server); /** * Removes all servers with the specified state. * * @param state All items with this state will be removed, default being all. */ void RemoveAllServers(int state = wxLIST_STATE_DONTCARE); /** * Updates the displayed information on a server. * * @param server The server to be updated. * * This function will not only update the displayed information, it will also * reposition the item should it be nescecarry to enforce the current sorting. * Also note that this function does not require that the server actually is * on the list already, since AddServer makes use of it, but this should * generally be avoided, since it will result in the server-count getting * skewed until the next AddServer call. */ void RefreshServer( CServer* server ); /** * Sets the highlighting of the specified server. * * @param server The server to have its highlighting set. * @param highlight The new highlighting state. * * Please note that only _one_ item is allowed to be highlighted at any * one time, so calling this function while another item is already * highlighted will result in the old item not being highlighted any more. */ void HighlightServer( const CServer* server, bool highlight ); /** * This function updates the server-count in the server-wnd. */ void ShowServerCount(); protected: /// Return old column order. wxString GetOldColumnOrder() const; private: /** * Event-handler for handling item activation (connect). */ void OnItemActivated( wxListEvent& event ); /** * Event-handler for displaying the popup-menu. */ void OnItemRightClicked( wxListEvent& event ); /** * Event-handler for priority changes. */ void OnPriorityChange( wxCommandEvent& event ); /** * Event-handler for static changes. */ void OnStaticChange( wxCommandEvent& event ); /** * Event-handler for server connections. */ void OnConnectToServer( wxCommandEvent& event ); /** * Event-handler for copying server-urls to the clipboard. */ void OnGetED2kURL( wxCommandEvent& event ); /** * Event-handler for server removal. */ void OnRemoveServers( wxCommandEvent& event ); /** * Event-handler for deleting servers when the delete-key is pressed. */ void OnKeyPressed( wxKeyEvent& event ); /** * Sorter function. * * @see wxListCtrl::SortItems */ static int wxCALLBACK SortProc(wxUIntPtr item1, wxUIntPtr item2, long sortData); //! Used to keep track of the last high-lighted item. const CServer* m_connected; DECLARE_EVENT_TABLE() }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/FileDetailListCtrl.cpp0000644000175000017500000000610112050266603022504 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "muuli_wdr.h" // Needed for ID_CLOSEWNDFD #include "FileDetailListCtrl.h" // Interface declarations #define wxLIST_STATE_DESELECTED 0x0000 BEGIN_EVENT_TABLE(CFileDetailListCtrl, CMuleListCtrl) EVT_LIST_ITEM_SELECTED(IDC_LISTCTRLFILENAMES, CFileDetailListCtrl::OnSelect) // Care for single selection END_EVENT_TABLE() CFileDetailListCtrl::CFileDetailListCtrl(wxWindow * &parent, int id, const wxPoint & pos, wxSize siz, int flags):CMuleListCtrl(parent, id, pos, siz, flags) { // Set sorter function SetSortFunc(SortProc); // Initial sorting: Sources descending InsertColumn(0, _("File Name"), wxLIST_FORMAT_LEFT, 370); InsertColumn(1, _("Sources"), wxLIST_FORMAT_LEFT, 70); SetSorting(1, CMuleListCtrl::SORT_DES); SortList(); } int CFileDetailListCtrl::SortProc(wxUIntPtr param1, wxUIntPtr param2, long sortData) { // Comparison for different sortings // ADUNANZA BEGIN // back #if 0 SourcenameItem *item1 = (SourcenameItem*)param1; SourcenameItem *item2 = (SourcenameItem*)param2; #else SourcenameItem *item1 = reinterpret_cast(param1); SourcenameItem *item2 = reinterpret_cast(param2); #endif // ADUNANZA END int mod = (sortData & CMuleListCtrl::SORT_DES) ? -1 : 1; switch (sortData & CMuleListCtrl::COLUMN_MASK) { case 1: return mod * (item1->count - item2->count); // Sources descending case 0: return mod * item1->name.CmpNoCase(item2->name); // Name descending default: return 0; } } void CFileDetailListCtrl::OnSelect(wxListEvent& event) { // Damn wxLC_SINGLE_SEL does not work! So we have to care for single selection ourselfs: long realpos = event.m_itemIndex; long pos = -1; do { // Loop through all selected items pos = GetNextItem(pos, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); if (pos != realpos && pos != -1) { // Deselect all items except the one we have just clicked SetItemState(pos, wxLIST_STATE_DESELECTED, wxLIST_STATE_SELECTED); } } while (pos != -1); event.Skip(); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ArchSpecific.h0000644000175000017500000001215612050266603021020 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef ARCHSPECIFIC_H #define ARCHSPECIFIC_H #include "Types.h" #define ENDIAN_SWAP_16(x) (wxUINT16_SWAP_ON_BE(x)) #define ENDIAN_SWAP_I_16(x) x = wxUINT16_SWAP_ON_BE(x) #define ENDIAN_SWAP_32(x) (wxUINT32_SWAP_ON_BE(x)) #define ENDIAN_SWAP_I_32(x) x = wxUINT32_SWAP_ON_BE(x) #if ((defined __GNUC__) && __GNUC__ >= 2) || defined (_MSC_VER) || (defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x550)) #define ENDIAN_SWAP_64(x) (wxUINT64_SWAP_ON_BE(x)) #define ENDIAN_SWAP_I_64(x) x = wxUINT64_SWAP_ON_BE(x) #endif // ntohs #define ENDIAN_NTOHS(x) ( wxUINT16_SWAP_ON_LE(x) ) // ntohl #define ENDIAN_NTOHL(x) ( wxUINT32_SWAP_ON_LE(x) ) // new #define ENDIAN_NTOHLL(x) ( wxUINT64_SWAP_ON_LE(x) ) // htons #define ENDIAN_HTONS(x) ( wxUINT16_SWAP_ON_LE(x) ) // htonl #define ENDIAN_HTONL(x) ( wxUINT32_SWAP_ON_LE(x) ) // new #define ENDIAN_HTONLL(x) ( wxUINT64_SWAP_ON_LE(x) ) /** * Returns the value in the given bytestream. * * The value is returned exactly as it is found. */ // \{ inline uint16 RawPeekUInt16(const void* p); inline uint32 RawPeekUInt32(const void* p); inline uint64 RawPeekUInt64(const void* p); // \} /** * Writes the specified value into the bytestream. * * The value is written exactly as it is. */ // \{ inline void RawPokeUInt16(void* p, uint16 nVal); inline void RawPokeUInt32(void* p, uint32 nVal); inline void RawPokeUInt64(void* p, uint64 nVal); // \} /** * Returns the value in the given bytestream. * * The value is returned as little-endian. */ // \{ inline uint8 PeekUInt8(const void* p); inline uint16 PeekUInt16(const void* p); inline uint32 PeekUInt32(const void* p); inline uint64 PeekUInt64(const void* p); // \} /** * Writes the specified value into the bytestream. * * The value is written as little-endian. */ // \{ inline void PokeUInt8(void* p, uint8 nVal); inline void PokeUInt16(void* p, uint16 nVal); inline void PokeUInt32(void* p, uint32 nVal); inline void PokeUInt64(void* p, uint64 nVal); // \} #if defined(__arm__) || defined(__sparc__) || defined(__mips__) #define ARM_OR_SPARC #endif /////////////////////////////////////////////////////////////////////////////// // Peek - helper functions for read-accessing memory without modifying the memory pointer inline uint16 RawPeekUInt16(const void* p) { #ifndef ARM_OR_SPARC return *((uint16*)p); #else uint16 value; memcpy( &value, p, sizeof( uint16 ) ); return value; #endif } inline uint32 RawPeekUInt32(const void* p) { #ifndef ARM_OR_SPARC return *((uint32*)p); #else uint32 value; memcpy( &value, p, sizeof( uint32 ) ); return value; #endif } inline uint64 RawPeekUInt64(const void* p) { #ifndef ARM_OR_SPARC return *((uint64*)p); #else uint64 value; memcpy( &value, p, sizeof( uint64 ) ); return value; #endif } inline uint8 PeekUInt8(const void* p) { return *((uint8*)p); } inline uint16 PeekUInt16(const void* p) { return ENDIAN_SWAP_16( RawPeekUInt16( p ) ); } inline uint32 PeekUInt32(const void* p) { return ENDIAN_SWAP_32( RawPeekUInt32( p ) ); } inline uint64 PeekUInt64(const void* p) { return ENDIAN_SWAP_64( RawPeekUInt64( p ) ); } /////////////////////////////////////////////////////////////////////////////// // Poke - helper functions for write-accessing memory without modifying the memory pointer inline void RawPokeUInt16(void* p, uint16 nVal) { #ifndef ARM_OR_SPARC *((uint16*)p) = nVal; #else memcpy( p, &nVal, sizeof(uint16) ); #endif } inline void RawPokeUInt32(void* p, uint32 nVal) { #ifndef ARM_OR_SPARC *((uint32*)p) = nVal; #else memcpy( p, &nVal, sizeof(uint32) ); #endif } inline void RawPokeUInt64(void* p, uint64 nVal) { #ifndef ARM_OR_SPARC *((uint64*)p) = nVal; #else memcpy( p, &nVal, sizeof(uint64) ); #endif } inline void PokeUInt8(void* p, uint8 nVal) { *((uint8*)p) = nVal; } inline void PokeUInt16(void* p, uint16 nVal) { RawPokeUInt16( p, ENDIAN_SWAP_16( nVal ) ); } inline void PokeUInt32(void* p, uint32 nVal) { RawPokeUInt32( p, ENDIAN_SWAP_32( nVal ) ); } inline void PokeUInt64(void* p, uint64 nVal) { RawPokeUInt64( p, ENDIAN_SWAP_64( nVal ) ); } #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/StateMachine.cpp0000644000175000017500000000532112050266603021371 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2005-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2004-2011 Marcelo Roberto Jimenez ( phoenix@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "StateMachine.h" #include CStateMachine::CStateMachine( const wxString &name, const unsigned int maxStates, const t_sm_state initialState ) : m_stateMutex(wxMUTEX_RECURSIVE), m_queueMutex(wxMUTEX_RECURSIVE), m_name(name), m_maxStates(maxStates), m_initialState(initialState) { m_state = initialState; m_clockCounter = 0; m_clocksInCurrentState = 0; } CStateMachine::~CStateMachine() { } void CStateMachine::Clock() { t_sm_state old_state; t_sm_event event; bool state_entry; old_state = m_state; /* Process state change acording to event */ if (!m_queue.empty()) { event = m_queue.front(); m_queue.pop(); } else { event = 0; } /* State changes can only happen here */ wxMutexLocker lock(m_stateMutex); m_state = next_state( event ); //#if 0 /* Debug */ ++m_clockCounter; state_entry = ( m_state != old_state ) || ( m_clockCounter == 1 ); if( state_entry ) { m_clocksInCurrentState = 0; printf( "%s(%04d): %d -> %d\n", (const char *)unicode2char(m_name), m_clockCounter, old_state, m_state); } ++m_clocksInCurrentState; //#endif /* Process new state entry */ if( m_state < m_maxStates ) { /* It should be ok to call Clock() recursively inside this * procedure because state change has already happened. Also * the m_state mutex is recursive. */ process_state(m_state, state_entry); } } /* In multithreaded implementations, this must be locked */ void CStateMachine::Schedule(t_sm_event event) { wxMutexLocker lock(m_queueMutex); m_queue.push(event); } void CStateMachine::flush_queue() { while (!m_queue.empty()) { m_queue.pop(); } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ThreadScheduler.cpp0000644000175000017500000002421612050266603022076 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2006-2011 Mikkel Schubert ( xaignar@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ThreadScheduler.h" // Interface declarations #include "Logger.h" // Needed for Add(Debug)LogLine{C,N} #include // Needed for CFormat #include "ScopedPtr.h" // Needed for CScopedPtr #include // Needed for std::sort // Do_not_auto_remove (mingw-gcc-3.4.5) //! Global lock the scheduler and its thread. static wxMutex s_lock; //! Pointer to the global scheduler instance (automatically instantiated). static CThreadScheduler* s_scheduler = NULL; //! Specifies if the scheduler is running. static bool s_running = false; //! Specifies if the gobal scheduler has been terminated. static bool s_terminated = false; /** * This class is used in a custom implementation of wxThreadHelper. * * The reason for not using wxThreadHelper are as follows: * - wxThreadHelper makes use of wxThread:Kill, which is warned against * serveral times in the docs, and even calls it in its destructor. * - Managing the thread-object is difficult, since the only way to * destroy it is to create a new thread. */ class CTaskThread : public CMuleThread { public: CTaskThread(CThreadScheduler* owner) : CMuleThread(wxTHREAD_JOINABLE), m_owner(owner) { } //! For simplicity's sake, all code is placed in CThreadScheduler::Entry void* Entry() { return m_owner->Entry(); } private: //! The scheduler owning this thread. CThreadScheduler* m_owner; }; void CThreadScheduler::Start() { wxMutexLocker lock(s_lock); s_running = true; s_terminated = false; // Ensures that a thread is started if tasks are already waiting. if (s_scheduler) { AddDebugLogLineN(logThreads, wxT("Starting scheduler")); s_scheduler->CreateSchedulerThread(); } } // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) bool CThreadScheduler::Busy() { return (s_scheduler && (s_scheduler->m_inloop || s_scheduler->GetTaskCount())); } #endif // ADUNANZA END void CThreadScheduler::Terminate() { AddDebugLogLineN(logThreads, wxT("Terminating scheduler")); CThreadScheduler* ptr = NULL; { wxMutexLocker lock(s_lock); // Safely unlink the scheduler, as to avoid race-conditions. ptr = s_scheduler; s_running = false; s_terminated = true; s_scheduler = NULL; } delete ptr; AddDebugLogLineN(logThreads, wxT("Scheduler terminated")); } bool CThreadScheduler::AddTask(CThreadTask* task, bool overwrite) { wxMutexLocker lock(s_lock); // When terminated (on shutdown), all tasks are ignored. if (s_terminated) { AddDebugLogLineN(logThreads, wxT("Task discarded: ") + task->GetDesc()); delete task; return false; } else if (s_scheduler == NULL) { s_scheduler = new CThreadScheduler(); AddDebugLogLineN(logThreads, wxT("Scheduler created.")); } return s_scheduler->DoAddTask(task, overwrite); } /** Returns string representation of error code. */ wxString GetErrMsg(wxThreadError err) { switch (err) { case wxTHREAD_NO_ERROR: return wxT("wxTHREAD_NO_ERROR"); case wxTHREAD_NO_RESOURCE: return wxT("wxTHREAD_NO_RESOURCE"); case wxTHREAD_RUNNING: return wxT("wxTHREAD_RUNNING"); case wxTHREAD_NOT_RUNNING: return wxT("wxTHREAD_NOT_RUNNING"); case wxTHREAD_KILLED: return wxT("wxTHREAD_KILLED"); case wxTHREAD_MISC_ERROR: return wxT("wxTHREAD_MISC_ERROR"); default: return wxT("Unknown error"); } } void CThreadScheduler::CreateSchedulerThread() { if ((m_thread && m_thread->IsAlive()) || m_tasks.empty()) { return; } // A thread can only be run once, so the old one must be safely disposed of if (m_thread) { AddDebugLogLineN(logThreads, wxT("CreateSchedulerThread: Disposing of old thread.")); m_thread->Stop(); delete m_thread; } m_thread = new CTaskThread(this); wxThreadError err = m_thread->Create(); if (err == wxTHREAD_NO_ERROR) { // Try to avoid reducing the latency of the main thread m_thread->SetPriority(WXTHREAD_MIN_PRIORITY); err = m_thread->Run(); if (err == wxTHREAD_NO_ERROR) { AddDebugLogLineN(logThreads, wxT("Scheduler thread started")); return; } else { AddDebugLogLineC(logThreads, wxT("Error while starting scheduler thread: ") + GetErrMsg(err)); } } else { AddDebugLogLineC(logThreads, wxT("Error while creating scheduler thread: ") + GetErrMsg(err)); } // Creation or running failed. m_thread->Stop(); delete m_thread; m_thread = NULL; } /** This is the sorter functor for the task-queue. */ struct CTaskSorter { bool operator()(const CThreadScheduler::CEntryPair& a, const CThreadScheduler::CEntryPair& b) { if (a.first->GetPriority() != b.first->GetPriority()) { return a.first->GetPriority() > b.first->GetPriority(); } // Compare tasks numbers. return a.second < b.second; } }; CThreadScheduler::CThreadScheduler() : m_tasksDirty(false), m_thread(NULL), m_currentTask(NULL) // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) , m_inloop(false) #endif // ADUNANZA END { } CThreadScheduler::~CThreadScheduler() { if (m_thread) { m_thread->Stop(); delete m_thread; } } size_t CThreadScheduler::GetTaskCount() const { wxMutexLocker lock(s_lock); return m_tasks.size(); } bool CThreadScheduler::DoAddTask(CThreadTask* task, bool overwrite) { // GetTick is too lowres, so we just use a counter to ensure that // the sorted order will match the order in which the tasks were added. static unsigned taskAge = 0; // Get the map for this task type, implicitly creating it as needed. CDescMap& map = m_taskDescs[task->GetType()]; CDescMap::value_type entry(task->GetDesc(), task); if (map.insert(entry).second) { AddDebugLogLineN(logThreads, wxT("Task scheduled: ") + task->GetType() + wxT(" - ") + task->GetDesc()); m_tasks.push_back(CEntryPair(task, taskAge++)); m_tasksDirty = true; } else if (overwrite) { AddDebugLogLineN(logThreads, wxT("Task overwritten: ") + task->GetType() + wxT(" - ") + task->GetDesc()); CThreadTask* existingTask = map[task->GetDesc()]; if (m_currentTask == existingTask) { // The duplicate is already being executed, abort it. m_currentTask->m_abort = true; } else { // Task not yet started, simply remove and delete. wxCHECK2(map.erase(existingTask->GetDesc()), /* Do nothing. */); delete existingTask; } m_tasks.push_back(CEntryPair(task, taskAge++)); map[task->GetDesc()] = task; m_tasksDirty = true; } else { AddDebugLogLineN(logThreads, wxT("Duplicate task, discarding: ") + task->GetType() + wxT(" - ") + task->GetDesc()); delete task; return false; } if (s_running) { CreateSchedulerThread(); } return true; } void* CThreadScheduler::Entry() { AddDebugLogLineN(logThreads, wxT("Entering scheduling loop")); // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) m_inloop = true; #endif // ADUNANZA END while (!m_thread->TestDestroy()) { CScopedPtr task(NULL); { wxMutexLocker lock(s_lock); // Resort tasks by priority/age if list has been modified. if (m_tasksDirty) { AddDebugLogLineN(logThreads, wxT("Resorting tasks")); std::sort(m_tasks.begin(), m_tasks.end(), CTaskSorter()); m_tasksDirty = false; } else if (m_tasks.empty()) { AddDebugLogLineN(logThreads, wxT("No more tasks, stopping")); break; } // Select the next task task.reset(m_tasks.front().first); m_tasks.pop_front(); m_currentTask = task.get(); } AddDebugLogLineN(logThreads, wxT("Current task: ") + task->GetType() + wxT(" - ") + task->GetDesc()); // Execute the task task->m_owner = m_thread; task->Entry(); task->OnExit(); // Check if this was the last task of this type bool isLastTask = false; { wxMutexLocker lock(s_lock); // If the task has been aborted, the entry now refers to // a different task, so dont remove it. That also means // that it cant be the last task of this type. if (!task->m_abort) { AddDebugLogLineN(logThreads, CFormat(wxT("Completed task '%s%s', %u tasks remaining.")) % task->GetType() % (task->GetDesc().IsEmpty() ? wxString() : (wxT(" - ") + task->GetDesc())) % m_tasks.size() ); CDescMap& map = m_taskDescs[task->GetType()]; if (!map.erase(task->GetDesc())) { wxFAIL; } else if (map.empty()) { m_taskDescs.erase(task->GetType()); isLastTask = true; } } m_currentTask = NULL; } if (isLastTask) { // Allow the task to signal that all sub-tasks have been completed AddDebugLogLineN(logThreads, wxT("Last task, calling OnLastTask")); task->OnLastTask(); } } // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) m_inloop = false; #endif // ADUNANZA END AddDebugLogLineN(logThreads, wxT("Leaving scheduling loop")); return 0; } CThreadTask::CThreadTask(const wxString& type, const wxString& desc, ETaskPriority priority) : m_type(type), m_desc(desc), m_priority(priority), m_owner(NULL), m_abort(false) { } CThreadTask::~CThreadTask() { } void CThreadTask::OnLastTask() { // Does nothing by default. } void CThreadTask::OnExit() { // Does nothing by default. } bool CThreadTask::TestDestroy() const { wxCHECK(m_owner, m_abort); return m_abort || m_owner->TestDestroy(); } const wxString& CThreadTask::GetType() const { return m_type; } const wxString& CThreadTask::GetDesc() const { return m_desc; } ETaskPriority CThreadTask::GetPriority() const { return m_priority; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/OtherStructs.h0000644000175000017500000000645312050266603021151 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef OTHERSTRUCTS_H #define OTHERSTRUCTS_H #include // Defined in struct z_stream_s; // SERVER TO CLIENT #if defined(_MSC_VER) || defined(__SUNPRO_CC) #pragma pack(1) #endif struct Header_Struct{ int8 eDonkeyID; int32 packetlength; int8 command; } #if defined(_MSC_VER) || defined(__SUNPRO_CC) ; #pragma pack() #else __attribute__((__packed__)); #endif #if defined(_MSC_VER) || defined(__SUNPRO_CC) #pragma pack(1) #endif struct UDP_Header_Struct { int8 eDonkeyID; int8 command; } #if defined(_MSC_VER) || defined(__SUNPRO_CC) ; #pragma pack() #else __attribute__((__packed__)); #endif #if defined(_MSC_VER) || defined(__SUNPRO_CC) ; #pragma pack(1) #endif struct Requested_Block_Struct{ uint64 StartOffset; uint64 EndOffset; uint32 packedsize; unsigned char FileID[16]; uint32 transferred; // Barry - This counts bytes completed } #if defined(_MSC_VER) || defined(__SUNPRO_CC) ; #pragma pack() #else __attribute__((__packed__)); #endif struct Pending_Block_Struct{ Requested_Block_Struct* block; struct z_stream_s* zStream; // Barry - Used to unzip packets uint32 totalUnzipped; // Barry - This holds the total unzipped bytes for all packets so far uint32 fZStreamError : 1, fRecovered : 1; }; struct Gap_Struct{ uint64 start; uint64 end; }; #if defined(_MSC_VER) || defined(__SUNPRO_CC) #pragma pack(1) #endif struct ServerMet_Struct { uint32 ip; uint16 port; uint32 tagcount; } #if defined(_MSC_VER) || defined(__SUNPRO_CC) ; #pragma pack() #else __attribute__((__packed__)); #endif struct TransferredData { uint32 datalen; uint32 timestamp; }; //Kry import of 0.30d // Maella -Enhanced Chunk Selection- (based on jicxicmic) #if defined(_MSC_VER) || defined(__SUNPRO_CC) #pragma pack(1) #endif struct Chunk { uint16 part; // Index of the chunk union { uint16 frequency; // Availability of the chunk uint16 rank; // Download priority factor (highest = 0, lowest = 0xffff) }; } #if defined(_MSC_VER) || defined(__SUNPRO_CC) ; #pragma pack() #else __attribute__((__packed__)); #endif struct Category_Struct { CPath path; wxString title; wxString comment; uint32 color; uint8 prio; }; #endif // OTHERSTRUCTS_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/Preferences.h0000644000175000017500000011171112050266603020733 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef PREFERENCES_H #define PREFERENCES_H #include "MD4Hash.h" // Needed for CMD4Hash #include // Needed for wxArrayString #include // ADUNANZA BEGIN #include "AdunanzA.h" #include // per debug clog // ADUNANZA END #include "Proxy.h" #include "OtherStructs.h" #include // Needed for __SVN__ class CPreferences; class wxConfigBase; class wxWindow; enum EViewSharedFilesAccess { vsfaEverybody = 0, vsfaFriends = 1, vsfaNobody = 2 }; enum AllCategoryFilter { acfAll = 0, acfAllOthers, acfIncomplete, acfCompleted, acfWaiting, acfDownloading, acfErroneous, acfPaused, acfStopped, acfVideo, acfAudio, acfArchive, acfCDImages, acfPictures, acfText, acfActive }; /** * Base-class for automatically loading and saving of preferences. * * The purpose of this class is to perform two tasks: * 1) To load and save a variable using wxConfig * 2) If nescecarry, to syncronize it with a widget * * This pure-virtual class servers as the base of all the Cfg types * defined below, and exposes the entire interface. * * Please note that for reasons of simplicity these classes dont provide * direct access to the variables they maintain, as there is no real need * for this. * * To create a sub-class you need only provide the Load/Save functionality, * as it is given that not all variables have a widget assosiated. */ // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) #define FL_SAVEKL_DR0 1 #define FL_SAVECL_DR0 2 #define FL_SAVEKL_TS 4 #define FL_SAVECL_TS 8 #define FL_CLIENTTRACKING_DISABLE 16 #define FL_LEGACYCHALLENGE_DISABLE 32 #define FL_PACKETTRACKING_DISABLE 64 #define FL_SHAREDOWNLOADING_DISABLE 128 #endif // ADUNANZA END class Cfg_Base { public: /** * Constructor. * * @param keyname This is the keyname under which the variable is to be saved. */ Cfg_Base( const wxString& keyname ) : m_key( keyname ), m_changed( false ) {} /** * Destructor. */ virtual ~Cfg_Base() {} /** * This function loads the assosiated variable from the provided config object. */ virtual void LoadFromFile(wxConfigBase* cfg) = 0; /** * This function saves the assosiated variable to the provided config object. */ virtual void SaveToFile(wxConfigBase* cfg) = 0; /** * Syncs the variable with the contents of the widget. * * @return True of success, false otherwise. */ virtual bool TransferFromWindow() { return false; } /** * Syncs the widget with the contents of the variable. * * @return True of success, false otherwise. */ virtual bool TransferToWindow() { return false; } /** * Connects a widget with the specified ID to the Cfg object. * * @param id The ID of the widget. * @param parent A pointer to the widgets parent, to speed up searches. * @return True on success, false otherwise. * * This function only makes sense for Cfg-classes that have the capability * to interact with a widget, see Cfg_Tmpl::ConnectToWidget(). */ virtual bool ConnectToWidget( int WXUNUSED(id), wxWindow* WXUNUSED(parent) = NULL ) { return false; } /** * Gets the key assosiated with Cfg object. * * @return The config-key of this object. */ virtual const wxString& GetKey() { return m_key; } /** * Specifies if the variable has changed since the TransferFromWindow() call. * * @return True if the variable has changed, false otherwise. */ virtual bool HasChanged() { return m_changed; } protected: /** * Sets the changed status. * * @param changed The new status. */ virtual void SetChanged( bool changed ) { m_changed = changed; }; private: //! The Config-key under which to save the variable wxString m_key; //! The changed-status of the variable bool m_changed; }; class Cfg_Lang_Base { public: virtual void UpdateChoice(int pos); // ADUNANZA BEGIN // Per warning virtual ~Cfg_Lang_Base() {} // ADUNANZA END }; // ADUNANZA BEGIN #if 0 const int cntStatColors = 15; #endif const int cntStatColors = 16; // ADUNANZA END //! This typedef is a shortcut similar to the theApp shortcut, but uses :: instead of . //! It only allows access to static preference functions, however this is to be desired anyway. typedef CPreferences thePrefs; class CPreferences { public: friend class PrefsUnifiedDlg; CPreferences(); ~CPreferences(); void Save(); void SaveCats(); void ReloadSharedFolders(); static bool Score() { return s_scorsystem; } static void SetScoreSystem(bool val) { s_scorsystem = val; } static bool Reconnect() { return s_reconnect; } static void SetReconnect(bool val) { s_reconnect = val; } static bool DeadServer() { return s_deadserver; } static void SetDeadServer(bool val) { s_deadserver = val; } static const wxString& GetUserNick() { return s_nick; } static void SetUserNick(const wxString& nick) { s_nick = nick; } static Cfg_Lang_Base * GetCfgLang() { return s_cfgLang; } static const wxString& GetAddress() { return s_Addr; } static uint16 GetPort() { return s_port; } static void SetPort(uint16 val); static uint16 GetUDPPort() { return s_udpport; } static uint16 GetEffectiveUDPPort() { return s_UDPEnable ? s_udpport : 0; } static void SetUDPPort(uint16 val) { s_udpport = val; } static bool IsUDPDisabled() { return !s_UDPEnable; } static void SetUDPDisable(bool val) { s_UDPEnable = !val; } static const CPath& GetIncomingDir() { return s_incomingdir; } static void SetIncomingDir(const CPath& dir){ s_incomingdir = dir; } static const CPath& GetTempDir() { return s_tempdir; } static void SetTempDir(const CPath& dir) { s_tempdir = dir; } static const CMD4Hash& GetUserHash() { return s_userhash; } static void SetUserHash(const CMD4Hash& h) { s_userhash = h; } static uint16 GetMaxUpload() { return s_maxupload; } static uint16 GetSlotAllocation() { return s_slotallocation; } static bool IsICHEnabled() { return s_ICH; } static void SetICHEnabled(bool val) { s_ICH = val; } static bool IsTrustingEveryHash() { return s_AICHTrustEveryHash; } static void SetTrustingEveryHash(bool val) { s_AICHTrustEveryHash = val; } static bool AutoServerlist() { return s_autoserverlist; } static void SetAutoServerlist(bool val) { s_autoserverlist = val; } static bool DoMinToTray() { return s_mintotray; } static void SetMinToTray(bool val) { s_mintotray = val; } static bool UseTrayIcon() { return s_trayiconenabled; } static void SetUseTrayIcon(bool val) { s_trayiconenabled = val; } static bool HideOnClose() { return s_hideonclose; } static void SetHideOnClose(bool val) { s_hideonclose = val; } static bool DoAutoConnect() { return s_autoconnect; } static void SetAutoConnect(bool inautoconnect) {s_autoconnect = inautoconnect; } static bool AddServersFromServer() { return s_addserversfromserver; } static void SetAddServersFromServer(bool val) { s_addserversfromserver = val; } static bool AddServersFromClient() { return s_addserversfromclient; } static void SetAddServersFromClient(bool val) { s_addserversfromclient = val; } static uint16 GetTrafficOMeterInterval() { return s_trafficOMeterInterval; } static void SetTrafficOMeterInterval(uint16 in) { s_trafficOMeterInterval = in; } static uint16 GetStatsInterval() { return s_statsInterval;} static void SetStatsInterval(uint16 in) { s_statsInterval = in; } static bool IsConfirmExitEnabled() { return s_confirmExit; } // ADUNANZA BEGIN // Stefano Picerno: E' necessario disabilitare FilterLanIPs, altrimenti gli IP interni di fastweb vengono filtrati. #if 0 static bool FilterLanIPs() { return s_filterLanIP; } #else static inline bool FilterLanIPs() { return false; } #endif // Fine modifica // ADUNANZA END static void SetFilterLanIPs(bool val) { s_filterLanIP = val; } static bool ParanoidFilter() { return s_paranoidfilter; } static void SetParanoidFilter(bool val) { s_paranoidfilter = val; } static bool IsOnlineSignatureEnabled() { return s_onlineSig; } static void SetOnlineSignatureEnabled(bool val) { s_onlineSig = val; } static uint32 GetMaxGraphUploadRate() { return s_maxGraphUploadRate; } static uint32 GetMaxGraphDownloadRate() { return s_maxGraphDownloadRate; } static void SetMaxGraphUploadRate(uint32 in){ s_maxGraphUploadRate=in; } static void SetMaxGraphDownloadRate(uint32 in) { s_maxGraphDownloadRate = in; } static uint16 GetMaxDownload() { return s_maxdownload; } static uint16 GetMaxConnections() { return s_maxconnections; } static uint16 GetMaxSourcePerFile() { return s_maxsourceperfile; } static uint16 GetMaxSourcePerFileSoft() { uint16 temp = (uint16)(s_maxsourceperfile*0.9); if( temp > 1000 ) return 1000; return temp; } static uint16 GetMaxSourcePerFileUDP() { uint16 temp = (uint16)(s_maxsourceperfile*0.75); if( temp > 100 ) return 100; return temp; } static uint16 GetDeadserverRetries() { return s_deadserverretries; } static void SetDeadserverRetries(uint16 val) { s_deadserverretries = val; } static uint32 GetServerKeepAliveTimeout() { return s_dwServerKeepAliveTimeoutMins*60000; } static void SetServerKeepAliveTimeout(uint32 val) { s_dwServerKeepAliveTimeoutMins = val/60000; } static const wxString& GetLanguageID() { return s_languageID; } static void SetLanguageID(const wxString& new_id) { s_languageID = new_id; } static uint8 CanSeeShares() { return s_iSeeShares; } static void SetCanSeeShares(uint8 val) { s_iSeeShares = val; } static uint8 GetStatsMax() { return s_statsMax; } static bool UseFlatBar() { return (s_depth3D==0); } static uint8 GetStatsAverageMinutes() { return s_statsAverageMinutes; } static void SetStatsAverageMinutes(uint8 in){ s_statsAverageMinutes = in; } static bool GetStartMinimized() { return s_startMinimized; } static void SetStartMinimized(bool instartMinimized) { s_startMinimized = instartMinimized;} static bool GetSmartIdCheck() { return s_smartidcheck; } static void SetSmartIdCheck( bool in_smartidcheck ) { s_smartidcheck = in_smartidcheck; } static uint8 GetSmartIdState() { return s_smartidstate; } static void SetSmartIdState( uint8 in_smartidstate ) { s_smartidstate = in_smartidstate; } static bool GetVerbose() { return s_bVerbose; } static void SetVerbose(bool val) { s_bVerbose = val; } // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) static uint32 GetShowStats() {return 60000*s_showstats; } static uint32 GetFR() { return 60000*(uint8)(s_fr&0xFF); } static uint32 GetAFR() { return 60000*(uint8)((s_fr>>8)&0xFF); } static uint32 GetSaveKL() { return 60000*(uint8)(s_savel&0xFF); } static uint32 GetSaveCL() { return 60000*(uint8)((s_savel>>8)&0xFF); } static uint16 GetPFlags(uint16 type) { return s_pflags&type; } #endif // ADUNANZA END static bool GetPreviewPrio() { return s_bpreviewprio; } static void SetPreviewPrio(bool in) { s_bpreviewprio = in; } static bool StartNextFile() { return s_bstartnextfile; } static bool StartNextFileSame() { return s_bstartnextfilesame; } static bool StartNextFileAlpha() { return s_bstartnextfilealpha; } static void SetStartNextFile(bool val) { s_bstartnextfile = val; } static void SetStartNextFileSame(bool val) { s_bstartnextfilesame = val; } static void SetStartNextFileAlpha(bool val) { s_bstartnextfilealpha = val; } static bool ShowOverhead() { return s_bshowoverhead; } static void SetNewAutoUp(bool m_bInUAP) { s_bUAP = m_bInUAP; } static bool GetNewAutoUp() { return s_bUAP; } static void SetNewAutoDown(bool m_bInDAP) { s_bDAP = m_bInDAP; } static bool GetNewAutoDown() { return s_bDAP; } static const wxString& GetVideoPlayer() { return s_VideoPlayer; } static uint32 GetFileBufferSize() { return s_iFileBufferSize*15000; } static void SetFileBufferSize(uint32 val) { s_iFileBufferSize = val/15000; } static uint32 GetQueueSize() { return s_iQueueSize*100; } static void SetQueueSize(uint32 val) { s_iQueueSize = val/100; } static uint8 Get3DDepth() { return s_depth3D;} static bool AddNewFilesPaused() { return s_addnewfilespaused; } static void SetAddNewFilesPaused(bool val) { s_addnewfilespaused = val; } static void SetMaxConsPerFive(int in) { s_MaxConperFive=in; } static uint16 GetMaxConperFive() { return s_MaxConperFive; } static uint16 GetDefaultMaxConperFive(); static bool IsSafeServerConnectEnabled() { return s_safeServerConnect; } static void SetSafeServerConnectEnabled(bool val) { s_safeServerConnect = val; } static bool IsCheckDiskspaceEnabled() { return s_checkDiskspace; } static void SetCheckDiskspaceEnabled(bool val) { s_checkDiskspace = val; } static uint32 GetMinFreeDiskSpaceMB() { return s_uMinFreeDiskSpace; } static uint64 GetMinFreeDiskSpace() { return s_uMinFreeDiskSpace * 1048576ull; } static void SetMinFreeDiskSpaceMB(uint32 val) { s_uMinFreeDiskSpace = val; } static const wxString& GetYourHostname() { return s_yourHostname; } static void SetYourHostname(const wxString& s) { s_yourHostname = s; } static void SetMaxUpload(uint16 in); static void SetMaxDownload(uint16 in); static void SetSlotAllocation(uint16 in) { s_slotallocation = (in >= 1) ? in : 1; }; typedef std::vector PathList; PathList shareddir_list; wxArrayString adresses_list; static bool AutoConnectStaticOnly() { return s_autoconnectstaticonly; } static void SetAutoConnectStaticOnly(bool val) { s_autoconnectstaticonly = val; } static bool GetUPnPEnabled() { return s_UPnPEnabled; } static void SetUPnPEnabled(bool val) { s_UPnPEnabled = val; } static bool GetUPnPECEnabled() { return s_UPnPECEnabled; } static void SetUPnPECEnabled(bool val) { s_UPnPECEnabled = val; } static bool GetUPnPWebServerEnabled() { return s_UPnPWebServerEnabled; } static void SetUPnPWebServerEnabled(bool val){ s_UPnPWebServerEnabled = val; } static uint16 GetUPnPTCPPort() { return s_UPnPTCPPort; } static void SetUPnPTCPPort(uint16 val) { s_UPnPTCPPort = val; } static bool IsManualHighPrio() { return s_bmanualhighprio; } static void SetManualHighPrio(bool val) { s_bmanualhighprio = val; } void LoadCats(); static const wxString& GetDateTimeFormat() { return s_datetimeformat; } // Download Categories uint32 AddCat(Category_Struct* cat); void RemoveCat(size_t index); uint32 GetCatCount(); Category_Struct* GetCategory(size_t index); const CPath& GetCatPath(uint8 index); uint32 GetCatColor(size_t index); bool CreateCategory(Category_Struct *& category, const wxString& name, const CPath& path, const wxString& comment, uint32 color, uint8 prio); bool UpdateCategory(uint8 cat, const wxString& name, const CPath& path, const wxString& comment, uint32 color, uint8 prio); static AllCategoryFilter GetAllcatFilter() { return s_allcatFilter; } static void SetAllcatFilter(AllCategoryFilter in) { s_allcatFilter = in; } static bool ShowAllNotCats() { return s_showAllNotCats; } // WebServer static uint16 GetWSPort() { return s_nWebPort; } static void SetWSPort(uint16 uPort) { s_nWebPort=uPort; } static uint16 GetWebUPnPTCPPort() { return s_nWebUPnPTCPPort; } static void SetWebUPnPTCPPort(uint16 val) { s_nWebUPnPTCPPort = val; } static const wxString& GetWSPass() { return s_sWebPassword; } static void SetWSPass(const wxString& pass) { s_sWebPassword = pass; } static const wxString& GetWSPath() { return s_sWebPath; } static void SetWSPath(const wxString& path) { s_sWebPath = path; } static bool GetWSIsEnabled() { return s_bWebEnabled; } static void SetWSIsEnabled(bool bEnable) { s_bWebEnabled=bEnable; } static bool GetWebUseGzip() { return s_bWebUseGzip; } static void SetWebUseGzip(bool bUse) { s_bWebUseGzip=bUse; } static uint32 GetWebPageRefresh() { return s_nWebPageRefresh; } static void SetWebPageRefresh(uint32 nRefresh) { s_nWebPageRefresh=nRefresh; } static bool GetWSIsLowUserEnabled() { return s_bWebLowEnabled; } static void SetWSIsLowUserEnabled(bool in) { s_bWebLowEnabled=in; } static const wxString& GetWSLowPass() { return s_sWebLowPassword; } static void SetWSLowPass(const wxString& pass) { s_sWebLowPassword = pass; } static const wxString& GetWebTemplate() { return s_WebTemplate; } static void SetWebTemplate(const wxString& val) { s_WebTemplate = val; } static void SetMaxSourcesPerFile(uint16 in) { s_maxsourceperfile=in;} static void SetMaxConnections(uint16 in) { s_maxconnections =in;} static bool ShowCatTabInfos() { return s_showCatTabInfos; } static void ShowCatTabInfos(bool in) { s_showCatTabInfos=in; } // Sources Dropping Tweaks static bool DropNoNeededSources() { return s_NoNeededSources > 0; } static bool SwapNoNeededSources() { return s_NoNeededSources == 2; } static uint8 GetNoNeededSources() { return s_NoNeededSources; } static void SetNoNeededSources(uint8 val) { s_NoNeededSources = val; } static bool DropFullQueueSources() { return s_DropFullQueueSources; } static void SetDropFullQueueSources(bool val) { s_DropFullQueueSources = val; } static bool DropHighQueueRankingSources() { return s_DropHighQueueRankingSources; } static void SetDropHighQueueRankingSources(bool val) { s_DropHighQueueRankingSources = val; } static uint32 HighQueueRanking() { return s_HighQueueRanking; } static void SetHighQueueRanking(uint32 val) { s_HighQueueRanking = val; } static uint32 GetAutoDropTimer() { return s_AutoDropTimer; } static void SetAutoDropTimer(uint32 val) { s_AutoDropTimer = val; } // External Connections static bool AcceptExternalConnections() { return s_AcceptExternalConnections; } static void EnableExternalConnections( bool val ) { s_AcceptExternalConnections = val; } static const wxString& GetECAddress() { return s_ECAddr; } static uint32 ECPort() { return s_ECPort; } static void SetECPort(uint32 val) { s_ECPort = val; } static const wxString& ECPassword() { return s_ECPassword; } static void SetECPass(const wxString& pass) { s_ECPassword = pass; } static bool IsTransmitOnlyUploadingClients() { return s_TransmitOnlyUploadingClients; } // Fast ED2K Links Handler Toggling static bool GetFED2KLH() { return s_FastED2KLinksHandler; } // Ip filter static bool IsFilteringClients() { return s_IPFilterClients; } static void SetFilteringClients(bool val); static bool IsFilteringServers() { return s_IPFilterServers; } static void SetFilteringServers(bool val); static uint8 GetIPFilterLevel() { return s_filterlevel;} static void SetIPFilterLevel(uint8 level); static bool IPFilterAutoLoad() { return s_IPFilterAutoLoad; } static void SetIPFilterAutoLoad(bool val) { s_IPFilterAutoLoad = val; } static const wxString& IPFilterURL() { return s_IPFilterURL; } static void SetIPFilterURL(const wxString& url) { s_IPFilterURL = url; } static bool UseIPFilterSystem() { return s_IPFilterSys; } static void SetIPFilterSystem(bool val) { s_IPFilterSys = val; } // Source seeds On/Off static bool GetSrcSeedsOn() { return s_UseSrcSeeds; } static void SetSrcSeedsOn(bool val) { s_UseSrcSeeds = val; } static bool IsSecureIdentEnabled() { return s_SecIdent; } static void SetSecureIdentEnabled(bool val) { s_SecIdent = val; } static bool GetExtractMetaData() { return s_ExtractMetaData; } static void SetExtractMetaData(bool val) { s_ExtractMetaData = val; } static bool ShowProgBar() { return s_ProgBar; } static bool ShowPercent() { return s_Percent; } static bool GetAllocFullFile() { return s_allocFullFile; }; static void SetAllocFullFile(bool val) { s_allocFullFile = val; } static wxString GetBrowser(); static const wxString& GetSkin() { return s_Skin; } static bool VerticalToolbar() { return s_ToolbarOrientation; } static const CPath& GetOSDir() { return s_OSDirectory; } static uint16 GetOSUpdate() { return s_OSUpdate; } static uint8 GetToolTipDelay() { return s_iToolDelayTime; } static void UnsetAutoServerStart(); static void CheckUlDlRatio(); static void BuildItemList( const wxString& appdir ); static void EraseItemList(); static void LoadAllItems(wxConfigBase* cfg); static void SaveAllItems(wxConfigBase* cfg); #ifndef __SVN__ static bool ShowVersionOnTitle() { return s_showVersionOnTitle; } #else static bool ShowVersionOnTitle() { return true; } #endif static uint8_t GetShowRatesOnTitle() { return s_showRatesOnTitle; } static void SetShowRatesOnTitle(uint8_t val) { s_showRatesOnTitle = val; } // Message Filters static bool MustFilterMessages() { return s_MustFilterMessages; } static void SetMustFilterMessages(bool val) { s_MustFilterMessages = val; } static bool IsFilterAllMessages() { return s_FilterAllMessages; } static void SetFilterAllMessages(bool val) { s_FilterAllMessages = val; } static bool MsgOnlyFriends() { return s_msgonlyfriends;} static void SetMsgOnlyFriends(bool val) { s_msgonlyfriends = val; } static bool MsgOnlySecure() { return s_msgsecure;} static void SetMsgOnlySecure(bool val) { s_msgsecure = val; } static bool IsFilterByKeywords() { return s_FilterSomeMessages; } static void SetFilterByKeywords(bool val) { s_FilterSomeMessages = val; } static const wxString& GetMessageFilterString() { return s_MessageFilterString; } static void SetMessageFilterString(const wxString& val) { s_MessageFilterString = val; } static bool IsMessageFiltered(const wxString& message); static bool ShowMessagesInLog() { return s_ShowMessagesInLog; } static bool IsAdvancedSpamfilterEnabled() { return s_IsAdvancedSpamfilterEnabled;} static bool IsChatCaptchaEnabled() { return IsAdvancedSpamfilterEnabled() && s_IsChatCaptchaEnabled; } static bool FilterComments() { return s_FilterComments; } static void SetFilterComments(bool val) { s_FilterComments = val; } static const wxString& GetCommentFilterString() { return s_CommentFilterString; } static void SetCommentFilterString(const wxString& val) { s_CommentFilterString = val; } static bool IsCommentFiltered(const wxString& comment); // Can't have it return a reference, will need a pointer later. static const CProxyData *GetProxyData() { return &s_ProxyData; } // Hidden files static bool ShareHiddenFiles() { return s_ShareHiddenFiles; } static void SetShareHiddenFiles(bool val) { s_ShareHiddenFiles = val; } static bool AutoSortDownload() { return s_AutoSortDownload; } static bool AutoSortDownload(bool val) { bool tmp = s_AutoSortDownload; s_AutoSortDownload = val; return tmp; } // Version check static bool GetCheckNewVersion() { return s_NewVersionCheck; } static void SetCheckNewVersion(bool val) { s_NewVersionCheck = val; } // Networks static bool GetNetworkKademlia() { return s_ConnectToKad; } static void SetNetworkKademlia(bool val) { s_ConnectToKad = val; } static bool GetNetworkED2K() { return s_ConnectToED2K; } static void SetNetworkED2K(bool val) { s_ConnectToED2K = val; } // Statistics static unsigned GetMaxClientVersions() { return s_maxClientVersions; } // Dropping slow sources static bool GetDropSlowSources() { return s_DropSlowSources; } // server.met and nodes.dat urls static const wxString& GetKadNodesUrl() { return s_KadURL; } static void SetKadNodesUrl(const wxString& url) { s_KadURL = url; } static const wxString& GetEd2kServersUrl() { return s_Ed2kURL; } static void SetEd2kServersUrl(const wxString& url) { s_Ed2kURL = url; } // Crypt static bool IsClientCryptLayerSupported() {return s_IsClientCryptLayerSupported;} static bool IsClientCryptLayerRequested() {return IsClientCryptLayerSupported() && s_bCryptLayerRequested;} static bool IsClientCryptLayerRequired() {return IsClientCryptLayerRequested() && s_IsClientCryptLayerRequired;} static bool IsClientCryptLayerRequiredStrict() {return false;} // not even incoming test connections will be answered static bool IsServerCryptLayerUDPEnabled() {return IsClientCryptLayerSupported();} static bool IsServerCryptLayerTCPRequested() {return IsClientCryptLayerRequested();} static bool IsServerCryptLayerTCPRequired() {return IsClientCryptLayerRequired();} static uint32 GetKadUDPKey() {return s_dwKadUDPKey;} static uint8 GetCryptTCPPaddingLength() {return s_byCryptTCPPaddingLength;} static void SetClientCryptLayerSupported(bool v) {s_IsClientCryptLayerSupported = v;} static void SetClientCryptLayerRequested(bool v) {s_bCryptLayerRequested = v; } static void SetClientCryptLayerRequired(bool v) {s_IsClientCryptLayerRequired = v;} // GeoIP static bool IsGeoIPEnabled() {return s_GeoIPEnabled;} static void SetGeoIPEnabled(bool v) {s_GeoIPEnabled = v;} static const wxString& GetGeoIPUpdateUrl() {return s_GeoIPUpdateUrl;} // Stats server static const wxString& GetStatsServerName() {return s_StatsServerName;} static const wxString& GetStatsServerURL() {return s_StatsServerURL;} // HTTP download static wxString GetLastHTTPDownloadURL(uint8 t); static void SetLastHTTPDownloadURL(uint8 t, const wxString& val); // Sleep static bool GetPreventSleepWhileDownloading() { return s_preventSleepWhileDownloading; } static void SetPreventSleepWhileDownloading(bool status) { s_preventSleepWhileDownloading = status; } protected: static int32 GetRecommendedMaxConnections(); //! Temporary storage for statistic-colors. static unsigned long s_colors[cntStatColors]; //! Reference for checking if the colors has changed. static unsigned long s_colors_ref[cntStatColors]; typedef std::vector CFGList; typedef std::map CFGMap; typedef std::vector CatList; static CFGMap s_CfgList; static CFGList s_MiscList; CatList m_CatList; private: void LoadPreferences(); void SavePreferences(); // ADUNANZA BEGIN public: void LoadAdunanzAPreferences(); // ADUNANZA END protected: ////////////// USER static wxString s_nick; static CMD4Hash s_userhash; static Cfg_Lang_Base * s_cfgLang; ////////////// CONNECTION // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) static uint16 s_showstats; static uint32 s_savel; static uint32 s_fr; static uint16 s_pflags; #endif // ADUNANZA END static uint16 s_maxupload; static uint16 s_maxdownload; static uint16 s_slotallocation; static wxString s_Addr; static uint16 s_port; static uint16 s_udpport; static bool s_UDPEnable; static uint16 s_maxconnections; static bool s_reconnect; static bool s_autoconnect; static bool s_autoconnectstaticonly; static bool s_UPnPEnabled; static bool s_UPnPECEnabled; static bool s_UPnPWebServerEnabled; static uint16 s_UPnPTCPPort; ////////////// PROXY static CProxyData s_ProxyData; ////////////// SERVERS static bool s_autoserverlist; static bool s_deadserver; ////////////// FILES static CPath s_incomingdir; static CPath s_tempdir; static bool s_ICH; static bool s_AICHTrustEveryHash; ////////////// GUI static uint8 s_depth3D; static bool s_scorsystem; static bool s_hideonclose; static bool s_mintotray; static bool s_trayiconenabled; static bool s_addnewfilespaused; static bool s_addserversfromserver; static bool s_addserversfromclient; static uint16 s_maxsourceperfile; static uint16 s_trafficOMeterInterval; static uint16 s_statsInterval; static uint32 s_maxGraphDownloadRate; static uint32 s_maxGraphUploadRate; static bool s_confirmExit; static bool s_filterLanIP; static bool s_paranoidfilter; static bool s_onlineSig; static wxString s_languageID; static uint8 s_iSeeShares; // 0=everybody 1=friends only 2=noone static uint8 s_iToolDelayTime; // tooltip delay time in seconds static uint8 s_splitterbarPosition; static uint16 s_deadserverretries; static uint32 s_dwServerKeepAliveTimeoutMins; static uint8 s_statsMax; static uint8 s_statsAverageMinutes; static bool s_bpreviewprio; static bool s_smartidcheck; static uint8 s_smartidstate; static bool s_safeServerConnect; static bool s_startMinimized; static uint16 s_MaxConperFive; static bool s_checkDiskspace; static uint32 s_uMinFreeDiskSpace; static wxString s_yourHostname; static bool s_bVerbose; static bool s_bmanualhighprio; static bool s_bstartnextfile; static bool s_bstartnextfilesame; static bool s_bstartnextfilealpha; static bool s_bshowoverhead; static bool s_bDAP; static bool s_bUAP; #ifndef __SVN__ static bool s_showVersionOnTitle; #endif static uint8_t s_showRatesOnTitle; // 0=no, 1=after app name, 2=before app name static wxString s_VideoPlayer; static bool s_showAllNotCats; static bool s_msgonlyfriends; static bool s_msgsecure; static uint8 s_iFileBufferSize; static uint8 s_iQueueSize; static wxString s_datetimeformat; static bool s_ToolbarOrientation; // Web Server [kuchin] static wxString s_sWebPassword; static wxString s_sWebPath; static wxString s_sWebLowPassword; static uint16 s_nWebPort; static uint16 s_nWebUPnPTCPPort; static bool s_bWebEnabled; static bool s_bWebUseGzip; static uint32 s_nWebPageRefresh; static bool s_bWebLowEnabled; static wxString s_WebTemplate; static bool s_showCatTabInfos; static AllCategoryFilter s_allcatFilter; // Madcat - Sources Dropping Tweaks static uint8 s_NoNeededSources; // 0: Keep, 1: Drop, 2:Swap static bool s_DropFullQueueSources; static bool s_DropHighQueueRankingSources; static uint32 s_HighQueueRanking; static uint32 s_AutoDropTimer; // Kry - external connections static bool s_AcceptExternalConnections; static wxString s_ECAddr; static uint32 s_ECPort; static wxString s_ECPassword; static bool s_TransmitOnlyUploadingClients; // Kry - IPFilter static bool s_IPFilterClients; static bool s_IPFilterServers; static uint8 s_filterlevel; static bool s_IPFilterAutoLoad; static wxString s_IPFilterURL; static bool s_IPFilterSys; // Kry - Source seeds on/off static bool s_UseSrcSeeds; static bool s_ProgBar; static bool s_Percent; static bool s_SecIdent; static bool s_ExtractMetaData; static bool s_allocFullFile; static wxString s_CustomBrowser; static bool s_BrowserTab; // Jacobo221 - Open in tabs if possible static CPath s_OSDirectory; static uint16 s_OSUpdate; static wxString s_Skin; static bool s_FastED2KLinksHandler; // Madcat - Toggle Fast ED2K Links Handler // Message Filtering static bool s_MustFilterMessages; static wxString s_MessageFilterString; static bool s_FilterAllMessages; static bool s_FilterSomeMessages; static bool s_ShowMessagesInLog; static bool s_IsAdvancedSpamfilterEnabled; static bool s_IsChatCaptchaEnabled; static bool s_FilterComments; static wxString s_CommentFilterString; // Hidden files sharing static bool s_ShareHiddenFiles; static bool s_AutoSortDownload; // Version check static bool s_NewVersionCheck; // Kad static bool s_ConnectToKad; static bool s_ConnectToED2K; // Statistics static unsigned s_maxClientVersions; // 0 = unlimited // Drop slow sources if needed static bool s_DropSlowSources; static wxString s_Ed2kURL; static wxString s_KadURL; // Crypt static bool s_IsClientCryptLayerSupported; static bool s_IsClientCryptLayerRequired; static bool s_bCryptLayerRequested; static uint32 s_dwKadUDPKey; static uint8 s_byCryptTCPPaddingLength; // GeoIP static bool s_GeoIPEnabled; static wxString s_GeoIPUpdateUrl; // Sleep vetoing static bool s_preventSleepWhileDownloading; // Stats server static wxString s_StatsServerName; static wxString s_StatsServerURL; // ADUNANZA BEGIN public: // Modifiche AdunanzA static uint32 m_AduMaxUpSlots; static uint32 m_AduAutoConnect; static uint32 m_AduForceExt11; /* ora sono in Statistics, poi le rimuovo static uint64 s_totalAduDownloadedBytes; static uint64 s_totalAduFDownloadedBytes; static uint64 s_totalAduDDownloadedBytes; static uint64 s_totalAduUploadedBytes; static uint64 s_totalAduFUploadedBytes; static uint64 s_totalAduDUploadedBytes; static uint64 s_totalExtDownloadedBytes; static uint64 s_totalExtUploadedBytes; */ // Mr Hyde: per gestione banda a esterni static bool s_ADU_bUpExtFull; static bool s_ADU_bCheckExtFull; static time_t s_ADU_ExtFullWaitTime; static time_t s_ADU_MaxExtWaitTime; static uint64 s_ADU_ExtAdapterSentBytes; static uint64 s_ADU_AduAdapterSentBytes; static bool s_ADU_bCustomRipBanda; static uint32 s_ADU_ValRipBanda; static uint32 s_ADU_ValRipBandaBAK; static uint32 s_ADU_MaxUpSlots; static uint32 s_ADU_KaduMaxDown; static uint32 s_ADU_ExtMaxDown; // Mr Hyde: Per tasto IRC // static bool s_ADU_bUseCustomIRCProgram; static wxString s_ADU_CustomIRCProgram; static wxString s_ADU_CustomIRCProgramFlags; inline static bool ADU_UseCustomIRCProgram() { return /*s_ADU_bUseCustomIRCProgram*/ true; } inline static const wxString& ADU_GetCustomIRCProgram() { return s_ADU_CustomIRCProgram; } inline static const wxString& ADU_GetCustomIRCProgramFlags() { return s_ADU_CustomIRCProgramFlags; } // Mr Hyde: Per streaming #if !defined(CLIENT_GUI) static uint32 s_ADU_BufferStreamingPercentageThreshold; /*!< percentuale minima di completamento necessaria per lo streaming */ #endif // fine mod Adu // Modifica AdunanzA // static inline uint32 ADU_GetMaxUpSlots() {return s_ADU_MaxUpSlots;} static inline void ADU_SetMaxUpSlots(uint32 inUpSolts = ADUNANZA_DEF_UPSL) {s_ADU_MaxUpSlots = inUpSolts;} // Fine mod Adu // Mr Hyde: per gestione banda a esterni static inline void ADU_SetUpExtFull(bool bValue) {s_ADU_bUpExtFull = bValue;} static inline bool ADU_GetUpExtFull() {return s_ADU_bUpExtFull;} static inline void ADU_SetCheckExtFull(bool bValue) {s_ADU_bCheckExtFull = bValue;} static inline bool ADU_GetCheckExtFull() {return s_ADU_bCheckExtFull;} static inline void ADU_SetExtFullWaitTime(time_t value) {s_ADU_ExtFullWaitTime = value;} static inline time_t ADU_GetExtFullWaitTime() {return s_ADU_ExtFullWaitTime;} static inline void ADU_SetMaxExtWaitTime(time_t value) {s_ADU_MaxExtWaitTime = value;} static inline time_t ADU_GetMaxExtWaitTime() {return s_ADU_MaxExtWaitTime;} static inline void ADU_SetExtAdapterSentBytes(uint64 v) {s_ADU_ExtAdapterSentBytes = v;} static inline uint64 ADU_GetExtAdapterSentBytes() {return s_ADU_ExtAdapterSentBytes;} static inline void ADU_SetAduAdapterSentBytes(uint64 v) {s_ADU_AduAdapterSentBytes = v;} static inline uint64 ADU_AduExtAdapterSentBytes() {return s_ADU_AduAdapterSentBytes;} static inline void ADU_SetCustomRipBanda(bool bMethod) {s_ADU_bCustomRipBanda = bMethod;} static inline bool ADU_GetCustomRipBanda() {return s_ADU_bCustomRipBanda;} // Per compatibilita' codice con eMule AdunanzA (hanno il check con logica negata rispetto a noi) static inline void ADU_SetRipBanda(bool bMethod) {ADU_SetCustomRipBanda(!bMethod);} static inline bool ADU_GetRipBanda() {return (!ADU_GetCustomRipBanda());} #if !defined(CLIENT_GUI) static inline uint32 ADU_GetBufferStreamingPercentageThreshold() {return s_ADU_BufferStreamingPercentageThreshold; } static bool ADU_IsAllowedBufferStreamingPercentageThreshold(uint32 v) {return ((v >= ADUNANZA_MIN_STREAMING_PERC_THRESHOLD) && (v <= ADUNANZA_MAX_STREAMING_PERC_THRESHOLD));} static inline void ADU_SetBufferStreamingPercentageThreshold(uint32 v) { s_ADU_BufferStreamingPercentageThreshold = ADU_IsAllowedBufferStreamingPercentageThreshold(v) ? v : ADUNANZA_DEF_STREAMING_PERC_THRESHOLD; } #endif static inline void ADU_SetOnlyValueRipBanda(uint32 value) { s_ADU_ValRipBanda = value; } static inline void ADU_SetValueRipBanda(uint32 value) { ADU_SetOnlyValueRipBanda(value); s_ADU_ValRipBandaBAK = s_ADU_ValRipBanda; } static inline uint32 ADU_GetValueRipBanda() {return s_ADU_ValRipBanda;} static inline uint32 ADU_GetValueRipBandaBAK() {return s_ADU_ValRipBandaBAK;} static inline void ADU_SetExtMaxDown(uint32 v) {s_ADU_ExtMaxDown = v;} static inline uint32 ADU_GetExtMaxDown() {return s_ADU_ExtMaxDown;} static inline void ADU_SetKaduMaxDown(uint32 v) {s_ADU_KaduMaxDown = v;} static inline uint32 ADU_GetKaduMaxDown() {return s_ADU_KaduMaxDown;} // ADUNANZA END }; #endif // PREFERENCES_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/CatDialog.h0000644000175000017500000000567512050266603020334 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 quekky // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef CATDIALOG_H #define CATDIALOG_H #include // Needed for wxDialog #include "Types.h" // Needed for uint32 #include "OtherStructs.h" #include "MuleColour.h" class wxStaticBitmap; class wxBitmap; /** * This dialog takes of displaying either existing or new categories, so that * the user can add or change them. * * It is a self-contained entity, and does not rely on the categories staying * the same while the dialog is visble, though it will overwrite any changes * made to the selected category in the mean time. Also, if the selected category * has been deleted then it will simply be readded. * * It does however rely on the Transferwnd keeping its own list of categories up- * to-date. */ class CCatDialog : public wxDialog { public: /** * Constructor. * * @param parent The parent of the new dialog. * @param catindex The category to be edited. * * The parameter catindex can be a valid index, in which case that category * will be selected, or it can be less than zero, in which case a new * category will be created. */ CCatDialog(wxWindow* parent, bool allowbrowse, int catindex = -1 ); /** * Destructor. */ ~CCatDialog(); private: /** * Helper function for making the color-preview. * * This function creates a single-color 16x16 image, using the * m_colour member variable. */ wxBitmap MakeBitmap(); //! Variable used to store the user-selected color. CMuleColour m_colour; //! Pointer to category to be edited or NULL if we are adding a new category. Category_Struct* m_category; /** * Event-handler for selecting incomming dir. */ void OnBnClickedBrowse(wxCommandEvent& evt); /** * Event-handler for saving the changes. */ void OnBnClickedOk(wxCommandEvent& evt); /** * Event-handler for selecting category color. */ void OnBnClickColor(wxCommandEvent& evt); DECLARE_EVENT_TABLE() }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/AsyncDNS.cpp0000644000175000017500000000435612050266603020455 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "AsyncDNS.h" // Interface declaration #include "InternalEvents.h" // Needed for wxEVT_* #include "NetworkFunctions.h" // Needed for StringHosttoUint32 #include "Logger.h" CAsyncDNS::CAsyncDNS(const wxChar* ipName, DnsSolveType type, wxEvtHandler* handler, void* socket) : wxThread(wxTHREAD_DETACHED) { m_type = type; m_ipName = ipName; m_socket = socket; m_handler = handler; } wxThread::ExitCode CAsyncDNS::Entry() { uint32 result = StringHosttoUint32(m_ipName); uint32 event_id = 0; void* event_data = NULL; switch (m_type) { case DNS_UDP: event_id = wxEVT_CORE_UDP_DNS_DONE; event_data = m_socket; break; case DNS_SOURCE: event_id = wxEVT_CORE_SOURCE_DNS_DONE; event_data = NULL; break; case DNS_SERVER_CONNECT: event_id = wxEVT_CORE_SERVER_DNS_DONE; event_data = m_socket; break; default: AddLogLineN(wxT("WRONG TYPE ID ON ASYNC DNS SOLVING!!!")); } if (event_id) { CMuleInternalEvent evt(event_id); evt.SetExtraLong(result); evt.SetClientData(event_data); wxPostEvent(m_handler,evt); } return NULL; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/DownloadQueue.h0000644000175000017500000002607212050266603021253 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef DOWNLOADQUEUE_H #define DOWNLOADQUEUE_H #include "MD4Hash.h" // Needed for CMD4Hash #include "ObservableQueue.h" // Needed for CObservableQueue #include "GetTickCount.h" // Needed fot GetTickCount #include class CSharedFileList; class CSearchFile; class CPartFile; class CUpDownClient; class CServer; class CMemFile; class CKnownFile; class CED2KLink; class CED2KFileLink; class CED2KServerLink; class CED2KServerListLink; class CPath; namespace Kademlia { class CUInt128; } /** * The download queue houses all active downloads. * * * This class should be thread-safe. */ class CDownloadQueue : public CObservableQueue { public: /** * Constructor. */ CDownloadQueue(); /** * Destructor. */ ~CDownloadQueue(); /** Loads met-files from the specified directory. */ void LoadMetFiles(const CPath& path); /** * Main worker function. */ void Process(); /** * Returns a pointer to the file with the specified hash, or NULL. * * @param filehash The hash to search for. * @return The corresponding file or NULL. */ CPartFile* GetFileByID(const CMD4Hash& filehash) const; /** * Returns the file at the specified position in the file-list, or NULL if invalid. * * @param A valid position in the file-list. * @return A valid pointer or NULL if the index was invalid. */ CPartFile* GetFileByIndex(unsigned int idx) const; /** * Returns true if the file is currently being shared or downloaded */ bool IsFileExisting(const CMD4Hash& fileid) const; /** * Returns true if the specified file is on the download-queue. */ bool IsPartFile(const CKnownFile* file) const; /** * Updates the file's download active time */ void OnConnectionState(bool bConnected); /** * Starts a new download based on the specified search-result. * * @param toadd The search-result to add. * @param category The category to assign to the new download. * * The download will only be started if no identical files are either * being downloaded or shared currently. */ void AddSearchToDownload(CSearchFile* toadd, uint8 category); /** * Adds an existing partfile to the queue. * * @param newfile The file to add. * @param paused If the file should be stopped when added. * @param category The category to assign to the file. */ void AddDownload(CPartFile* newfile, bool paused, uint8 category); /** * Removes the specified file from the queue. * * @param toremove A pointer to the file object to be removed. * @param keepAsCompleted If true add the removed file to the list of completed files. */ void RemoveFile(CPartFile* toremove, bool keepAsCompleted = false); /** * Saves the source-seeds of every file on the queue. */ void SaveSourceSeeds(); /** * Loads the source-seeds of every file on the queue. */ void LoadSourceSeeds(); /** * Adds a potiential new client to the specified file. * * @param sender The owner of the new source. * @param source The client in question, might be deleted! * * This function will check the new client against the already existing * clients. The source will then be queued as is appropriate, or deleted * if it is duplicate of an existing client. */ void CheckAndAddSource(CPartFile* sender, CUpDownClient* source); /** * This function adds already known source to the specified file. * * @param sender The owner fo the new source. * @param source The client in question. * * This function acts like CheckAndAddSource, with the exception that no * checks are made to see if the client is a duplicate. It is assumed that * it is in fact a valid client. */ void CheckAndAddKnownSource(CPartFile* sender, CUpDownClient* source); /** * Removes the specified client completly. * * @param toremove The client to be removed. * @param updatewindow NOT USED! * @param bDoStatsUdpate Specifies if the affected files should update their statistics. * @return True if the sources was found and removed. * * This function will remove the specified source from both normal source * lists, A4AF lists and the downloadqueue-widget. The requestfile of the * source is also reset. */ bool RemoveSource(CUpDownClient* toremove, bool updatewindow = true, bool bDoStatsUpdate = true); /** * Finds the queued client by IP and UDP-port, by looking at file-sources. * * @param dwIP The IP-address of the client. * @param nUDPPort The UDP-port of the client. * @return The matching client or NULL if none was found. */ CUpDownClient* GetDownloadClientByIP_UDP(uint32 dwIP, uint16 nUDPPort) const; /** * Queues the specified file for source-requestion from the connected server. */ void SendLocalSrcRequest(CPartFile* sender); /** * Removes the specified server from the request-queue. */ void RemoveLocalServerRequest(CPartFile* pFile); /** * Resets all queued server-requests. */ void ResetLocalServerRequests(); /** * Starts the next paused file on the queue, going after priority. * Also checks for categories if enabled on preferences. */ void StartNextFile(CPartFile* oldfile); /** * Resets the category of all files with the specified category. */ void ResetCatParts(uint8 cat); /** * Sets the priority of all files with the specified category. */ void SetCatPrio(uint8 cat, uint8 newprio); /** * Sets the status of all files with the specified category. */ void SetCatStatus(uint8 cat, int newstatus); /** * Returns the current number of queued files. */ uint16 GetFileCount() const; /** * Makes a copy of the file list. */ void CopyFileList(std::vector& out_list, bool includeCompleted = false) const; /** * Returns the current number of downloading files. */ uint16 GetDownloadingFileCount() const; /** * Returns the current number of paused files. */ uint16 GetPausedFileCount() const; /** * This function is called when a DNS lookup is finished. */ void OnHostnameResolved(uint32 ip); /** * Adds an ed2k or magnet link to download queue. */ bool AddLink( const wxString& link, uint8 category = 0 ); bool AddED2KLink( const wxString& link, uint8 category = 0 ); bool AddED2KLink( const CED2KLink* link, uint8 category = 0 ); bool AddED2KLink( const CED2KFileLink* link, uint8 category = 0 ); bool AddED2KLink( const CED2KServerLink* link ); bool AddED2KLink( const CED2KServerListLink* link ); /** * Returns the current server which is beening queried by UDP packets. */ CServer* GetUDPServer() const; /** * Set the server to query through UDP packest. */ void SetUDPServer( CServer* server ); /** * Stop the source-requests from non-connected servers. */ void StopUDPRequests(); /* Kad Stuff */ /** * Add a Kad source to a download */ void KademliaSearchFile(uint32_t searchID, const Kademlia::CUInt128* pcontactID, const Kademlia::CUInt128* pkadID, uint8_t type, uint32_t ip, uint16_t tcp, uint16_t udp, uint32_t buddyip, uint16_t buddyport, uint8_t byCryptOptions); CPartFile* GetFileByKadFileSearchID(uint32 id) const; bool DoKademliaFileRequest(); void SetLastKademliaFileRequest() {lastkademliafilerequest = ::GetTickCount();} uint32 GetRareFileThreshold() const { return m_rareFileThreshold; } uint32 GetCommonFileThreshold() const { return m_commonFileThreshold; } /** * Remove a file from the list of completed downloads. */ void ClearCompleted(const ListOfUInts32 & ecids); // ADUNANZA BEGIN // Tapullo per Streaming (che triste se faccio tapulli anche per AdunanzA...) void GetCopyOfDownloadingList(std::list& copyOfList); // ADUNANZA END private: /** * This function initializes new observers with the current contents of the queue. */ virtual void ObserverAdded( ObserverType* o ); /** * Helper-function, sorts the filelist so that high-priority files are first. */ void DoSortByPriority(); /** Checks that there is enough free spaces for temp-files at that specified path. */ void CheckDiskspace(const CPath& path); /** * Stops performing UDP requests. */ void DoStopUDPRequests(); void ProcessLocalRequests(); bool SendNextUDPPacket(); int GetMaxFilesPerUDPServerPacket() const; bool SendGlobGetSourcesUDPPacket(CMemFile& data); void AddToResolve(const CMD4Hash& fileid, const wxString& pszHostname, uint16 port, const wxString& hash, uint8 cryptoptions); //! The mutex assosiated with this class, mutable to allow for const functions. mutable wxMutex m_mutex; uint32 m_datarate; // ADUNANZA BEGIN // Per ripartitore di banda di Tiger (credo) uint32 m_ADU_ext_datarate; uint32 m_ADU_kadu_datarate; // ADUNANZA END uint32 m_lastDiskCheck; uint32 m_lastudpsearchtime; uint32 m_lastsorttime; uint32 m_lastudpstattime; uint32 m_nLastED2KLinkCheck; uint8 m_cRequestsSentToServer; uint32 m_dwNextTCPSrcReq; uint8 m_udcounter; CServer* m_udpserver; /** * Structure used to store sources with dynamic hostnames. */ struct Hostname_Entry { //! The ID of the file the source provides. CMD4Hash fileid; //! The dynamic hostname. wxString strHostname; //! The user-port of the source. uint16 port; //! The hash of the source wxString hash; //! The cryptoptions for the source uint8 cryptoptions; }; std::deque m_toresolve; typedef std::deque FileQueue; FileQueue m_filelist; typedef std::list FileList; FileList m_localServerReqQueue; //! List of downloads completed and still on display FileList m_completedDownloads; //! Observer used to keep track of which servers have yet to be asked for sources CQueueObserver m_queueServers; //! Observer used to keep track of which file to send UDP requests for CQueueObserver m_queueFiles; /* Kad Stuff */ uint32 lastkademliafilerequest; //! Threshold for rare files, dynamically based on the sources for each. uint32 m_rareFileThreshold; //! Threshold for common files, dynamically based on the sources for each. uint32 m_commonFileThreshold; }; #endif // DOWNLOADQUEUE_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/CommentDialogLst.h0000644000175000017500000000422312050266603021676 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef COMMENTDIALOGLST_H #define COMMENTDIALOGLST_H #include // Needed for wxDialog // Do_not_auto_remove #include class CMuleListCtrl; class wxCommandEvent; class CPartFile; /** * This dialog is used to display file-comments received from other clients. */ class CCommentDialogLst : public wxDialog { public: CCommentDialogLst(wxWindow* pParent, CPartFile* file); ~CCommentDialogLst(); /** * Sorter function for the CMuleListCtrl used to contain the lists. */ static int wxCALLBACK SortProc(wxUIntPtr item1, wxUIntPtr item2, long sortData); private: void OnBnClickedApply(wxCommandEvent& evt); void OnBnClickedRefresh(wxCommandEvent& evt); /** * Updates the contents of the comments/ratings list. */ void UpdateList(); /** * Clears the contents of the comments/ratings list. */ void ClearList(); //! The file to display comments for. CPartFile* m_file; //! The list containing comments/ratings. CMuleListCtrl* m_list; DECLARE_EVENT_TABLE() }; #endif // COMMENTDIALOGLST_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ClientDetailDialog.cpp0000644000175000017500000001367412050266603022517 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ClientDetailDialog.h" // Interface declarations #include "PartFile.h" // Needed for CPartFile #include "UploadQueue.h" // Needed for CUploadQueue #include "ServerList.h" // Needed for CServerList #include "amule.h" // Needed for theApp #include "Server.h" // Needed for CServer #include "muuli_wdr.h" // Needed for ID_CLOSEWND #include "Preferences.h" // Needed for thePrefs // CClientDetailDialog dialog BEGIN_EVENT_TABLE(CClientDetailDialog,wxDialog) EVT_BUTTON(ID_CLOSEWND,CClientDetailDialog::OnBnClose) END_EVENT_TABLE() CClientDetailDialog::CClientDetailDialog( wxWindow *parent, const CClientRef& client) : wxDialog( parent, 9997, _("Client Details"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) { m_client = client; wxSizer* content = clientDetails(this, true); OnInitDialog(); content->SetSizeHints(this); content->Show(this, true); } CClientDetailDialog::~CClientDetailDialog() { } void CClientDetailDialog::OnBnClose(wxCommandEvent& WXUNUSED(evt)) { EndModal(0); } bool CClientDetailDialog::OnInitDialog() { // Username, Userhash if (!m_client.GetUserName().IsEmpty()) { CastChild(ID_DNAME, wxStaticText)->SetLabel( m_client.GetUserName()); // if we have client name we have userhash wxASSERT(!m_client.GetUserHash().IsEmpty()); CastChild(ID_DHASH, wxStaticText)->SetLabel( m_client.GetUserHash().Encode()); } else { CastChild(ID_DNAME, wxStaticText)->SetLabel(_("Unknown")); CastChild(ID_DHASH, wxStaticText)->SetLabel(_("Unknown")); } // Client Software wxString OSInfo = m_client.GetClientOSInfo(); if (!OSInfo.IsEmpty()) { CastChild(ID_DSOFT, wxStaticText)->SetLabel( m_client.GetSoftStr()+wxT(" (")+OSInfo+wxT(")")); } else { CastChild(ID_DSOFT, wxStaticText)->SetLabel( m_client.GetSoftStr()); } // Client Version CastChild(ID_DVERSION, wxStaticText)->SetLabel( m_client.GetSoftVerStr()); // User ID CastChild(ID_DID, wxStaticText)->SetLabel( CFormat(wxT("%u (%s)")) % m_client.GetUserIDHybrid() % (m_client.HasLowID() ? _("LowID") : _("HighID"))); // Client IP/Port CastChild(ID_DIP, wxStaticText)->SetLabel( CFormat(wxT("%s:%i")) % m_client.GetFullIP() % m_client.GetUserPort()); // Server IP/Port/Name if (m_client.GetServerIP()) { wxString srvaddr = Uint32toStringIP(m_client.GetServerIP()); CastChild(ID_DSIP, wxStaticText)->SetLabel( CFormat(wxT("%s:%i")) % srvaddr % m_client.GetServerPort()); CastChild(ID_DSNAME, wxStaticText)->SetLabel( m_client.GetServerName()); } else { CastChild(ID_DSIP, wxStaticText)->SetLabel(_("Unknown")); CastChild(ID_DSNAME, wxStaticText)->SetLabel(_("Unknown")); } // Obfuscation wxString buffer; switch (m_client.GetObfuscationStatus()) { case OBST_ENABLED: buffer = _("Enabled"); break; case OBST_SUPPORTED: buffer = _("Supported"); break; case OBST_NOT_SUPPORTED: buffer = _("Not supported"); break; case OBST_DISABLED: buffer = _("Disabled"); break; default: buffer = _("Unknown"); break; } CastChild(IDT_OBFUSCATION, wxStaticText)->SetLabel(buffer); // Kad if (m_client.GetKadPort()) { CastChild(IDT_KAD, wxStaticText)->SetLabel(_("Connected")); } else { CastChild(IDT_KAD, wxStaticText)->SetLabel(_("Disconnected")); } // File Name const CKnownFile* file = m_client.GetUploadFile(); if (file) { wxString filename = MakeStringEscaped(file->GetFileName().TruncatePath(60)); CastChild(ID_DDOWNLOADING, wxStaticText)->SetLabel(filename); } else { CastChild(ID_DDOWNLOADING, wxStaticText)->SetLabel(wxT("-")); } // Upload CastChild(ID_DDUP, wxStaticText)->SetLabel( CastItoXBytes(m_client.GetTransferredDown())); // Download CastChild(ID_DDOWN, wxStaticText)->SetLabel( CastItoXBytes(m_client.GetTransferredUp())); // Average Upload Rate CastChild(ID_DAVUR, wxStaticText)->SetLabel( CFormat(_("%.1f kB/s")) % m_client.GetKBpsDown()); // Average Download Rate CastChild(ID_DAVDR, wxStaticText)->SetLabel( CFormat(_("%.1f kB/s")) % (m_client.GetUploadDatarate() / 1024.0f)); // Total Upload CastChild(ID_DUPTOTAL, wxStaticText)->SetLabel( CastItoXBytes(m_client.GetDownloadedTotal())); // Total Download CastChild(ID_DDOWNTOTAL, wxStaticText)->SetLabel( CastItoXBytes(m_client.GetUploadedTotal())); // DL/UP Modifier CastChild(ID_DRATIO, wxStaticText)->SetLabel( CFormat(wxT("%.1f")) % m_client.GetScoreRatio()); // Secure Ident CastChild(IDC_CDIDENT, wxStaticText)->SetLabel( m_client.GetSecureIdentTextStatus()); // Queue Score if (m_client.GetUploadState() != US_NONE) { CastChild(ID_QUEUERANK, wxStaticText)->SetLabel( CFormat(wxT("%u")) % m_client.GetUploadQueueWaitingPosition()); CastChild(ID_DSCORE, wxStaticText)->SetLabel( CFormat(wxT("%u")) % m_client.GetScore()); } else { CastChild(ID_QUEUERANK, wxStaticText)->SetLabel(wxT("-")); CastChild(ID_DSCORE, wxStaticText)->SetLabel(wxT("-")); } Layout(); return true; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/GuiEvents.h0000644000175000017500000005274212050266603020413 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2004-2011 Froenchenko Leonid (lfroen@users.sourceforge.net) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef GUIEVENTS_H #define GUIEVENTS_H #include #include "Types.h" #include "Constants.h" #define __need_convertinfo // We need only the ConvertInfo struct from PartFileConvert.h #include "PartFileConvert.h" class CKnownFile; class CSearchFile; class CPartFile; class CServer; class CFriend; class CClientRef; // ADUNANZA BEGIN // backport class CMuleUDPSocket; // ADUNANZA END DECLARE_LOCAL_EVENT_TYPE(MULE_EVT_NOTIFY, -1) /** * This namespaces contains a number of functions and classes * related to defered function calls, allowing a notification * call to be delayed till it can be initiated from the main * thread. */ namespace MuleNotify { /** * Creates a deep copy of the object passed. * * Note that this function should be overwritten as * needed. See the wxString version below. */ template inline ValueType DeepCopy(const ValueType& value) { return ValueType(value); } /** Special DeepCopy for wxString, which uses reference counting. */ inline wxString DeepCopy(const wxString& value) { return wxString(value.c_str(), value.Length()); } //////////////////////////////////////////////////////////// // Notification handlers // // These functions should not be called directly, but // through the Notify_*, etc. macros. // void SharedFilesShowFile(CKnownFile* file); void SharedFilesRemoveFile(CKnownFile* file); void SharedFilesRemoveAllFiles(); void SharedFilesShowFileList(); void SharedFilesUpdateItem(CKnownFile* file); void DownloadCtrlUpdateItem(const void* item); void SourceCtrlUpdateSource(uint32 source, SourceItemType type); void DownloadCtrlAddFile(CPartFile* file); void SourceCtrlAddSource(CPartFile* owner, CClientRef source, SourceItemType type); void DownloadCtrlRemoveFile(CPartFile* file); void SourceCtrlRemoveSource(uint32 source, const CPartFile* owner); void DownloadCtrlHideSource(CPartFile* file); void DownloadCtrlSort(); void DownloadCtrlDoItemSelectionChanged(); void SharedCtrlAddClient(CKnownFile* owner, CClientRef client, SourceItemType type); void SharedCtrlRefreshClient(uint32 client, SourceItemType type); void SharedCtrlRemoveClient(uint32 client, const CKnownFile* owner); void ServerAdd(CServer* server); void ServerRemove(CServer* server); void ServerRemoveDead(); void ServerRemoveAll(); void ServerHighlight(CServer* server, bool highlight); void ServerRefresh(CServer* server); void ServerFreeze(); void ServerThaw(); void ServerUpdateED2KInfo(); void ServerUpdateKadKInfo(); void SearchCancel(); void SearchLocalEnd(); void KadSearchEnd(uint32 id); void Search_Update_Sources(CSearchFile* result); void Search_Add_Result(CSearchFile* result); void ChatUpdateFriend(CFriend* Friend); void ChatRemoveFriend(CFriend* Friend); void ChatConnResult(bool success, uint64 id, wxString message); void ChatProcessMsg(uint64 sender, wxString message); void ChatSendCaptcha(wxString captcha, uint64 to_id); void ShowConnState(long state); void ShowUserCount(wxString str); void ShowUpdateCatTabTitles(); void ShowGUI(); void CategoryAdded(); void CategoryUpdate(uint32 cat); void CategoryDelete(uint32 cat); void NodesURLChanged(wxString url); void ServersURLChanged(wxString url); // Partfile conversion: Core -> GUI void ConvertUpdateProgress(float percent, wxString label, wxString header); void ConvertUpdateJobInfo(ConvertInfo info); void ConvertRemoveJobInfo(unsigned id); void ConvertClearInfos(); // Partfile conversion: GUI -> Core void ConvertRemoveJob(unsigned id); void ConvertRetryJob(unsigned id); void ConvertReaddAllJobs(); // // GUI -> core notification // void PartFile_Swap_A4AF(CPartFile* file); void PartFile_Swap_A4AF_Auto(CPartFile* file); void PartFile_Swap_A4AF_Others(CPartFile* file); void PartFile_Pause(CPartFile* file); void PartFile_Resume(CPartFile* file); void PartFile_Stop(CPartFile* file); void PartFile_PrioAuto(CPartFile* file, bool val); void PartFile_PrioSet(CPartFile* file, uint8 newDownPriority, bool bSave); void PartFile_Delete(CPartFile* file); void PartFile_SetCat(CPartFile* file, uint32 val); void KnownFile_Up_Prio_Set(CKnownFile* file, uint8 val); void KnownFile_Up_Prio_Auto(CKnownFile* file); void KnownFile_Comment_Set(CKnownFile* file, wxString comment, int8 rating); void Search_Add_Download(CSearchFile* result, uint8 category); void Search_Update_Progress(uint32 value); void Download_Set_Cat_Prio(uint8 cat, uint8 newprio); void Download_Set_Cat_Status(uint8 cat, int newstatus); void Upload_Resort_Queue(); void Client_Delete(CClientRef client); // //ADUNANZA BEGIN //backport (probabilmente inutili e le posso togliere fino a che non decido se mettere ASIO) void UDPSocketSend(CMuleUDPSocket * socket); void UDPSocketReceive(CMuleUDPSocket * socket); // ADUNANZA END // Notifications that always create an event // void IPFilter_Reload(); void IPFilter_Update(wxString url); //////////////////////////////////////////////////////////// // Notification utilities /** * The base class of the functions. * * This class allows the the notification call to be executed * without knowing the exact specifics of a given functor. */ class CMuleNotiferBase { public: /** The constructor does nothing. */ CMuleNotiferBase() {}; /** The destructor is virtual since we will be deleting pointers to this type. */ virtual ~CMuleNotiferBase() {}; /** Executes the actual notification call. */ virtual void Notify() const = 0; /** Returns a copy of the functor (function + arguments). */ virtual CMuleNotiferBase* Clone() const = 0; }; /** Notification functor for functions taking no arguments. */ class CMuleNotifier0 : public CMuleNotiferBase { public: typedef void (*FuncType)(); /** Creates a functor from the given function. */ CMuleNotifier0(FuncType func) : m_func(func) {} /** @see CMuleNotifierBase::Notify */ virtual void Notify() const { m_func(); } /** @see CMuleNotifierBase::Clone */ virtual CMuleNotiferBase* Clone() const { return new CMuleNotifier0(m_func); } private: FuncType m_func; }; /** Notification functor for functions taking 1 arguments. */ template class CMuleNotifier1 : public CMuleNotiferBase { public: typedef void (*FuncType)(ARG); /** Creates a functor from the given function and arguments. */ CMuleNotifier1(FuncType func, ARG arg) : m_func(func), m_arg(DeepCopy(arg)) {} /** @see CMuleNotifierBase::Notify */ virtual void Notify() const { m_func(m_arg); } /** @see CMuleNotifierBase::Clone */ virtual CMuleNotiferBase* Clone() const { return new CMuleNotifier1(m_func, m_arg); } private: FuncType m_func; ARG m_arg; }; /** Notification functor for functions taking 2 arguments. */ template class CMuleNotifier2 : public CMuleNotiferBase { public: typedef void (*FuncType)(ARG_1, ARG_2); /** Creates a functor from the given function and arguments. */ CMuleNotifier2(FuncType func, ARG_1 arg1, ARG_2 arg2) : m_func(func), m_arg1(DeepCopy(arg1)), m_arg2(DeepCopy(arg2)) {} /** @see CMuleNotifierBase:: Notify */ virtual void Notify() const { m_func(m_arg1, m_arg2); } /** @see CMuleNotifierBase::Clone */ virtual CMuleNotiferBase* Clone() const { return new CMuleNotifier2(m_func, m_arg1, m_arg2); } private: FuncType m_func; ARG_1 m_arg1; ARG_2 m_arg2; }; /** Notification functor for functions taking 3 arguments. */ template class CMuleNotifier3 : public CMuleNotiferBase { public: typedef void (*FuncType)(ARG_1, ARG_2, ARG_3); /** Creates a functor from the given function and arguments. */ CMuleNotifier3(FuncType func, ARG_1 arg1, ARG_2 arg2, ARG_3 arg3) : m_func(func), m_arg1(DeepCopy(arg1)), m_arg2(DeepCopy(arg2)), m_arg3(DeepCopy(arg3)) {} /** @see CMuleNotifierBase:: Notify */ virtual void Notify() const { m_func(m_arg1, m_arg2, m_arg3); } /** @see CMuleNotifierBase::Clone */ virtual CMuleNotiferBase* Clone() const { return new CMuleNotifier3(m_func, m_arg1, m_arg2, m_arg3); } private: FuncType m_func; ARG_1 m_arg1; ARG_2 m_arg2; ARG_3 m_arg3; }; /** * This event is sent when a worker-thread makes use of a notify-macro. * * This insures that all notifications are executed on the main thread, * thereby improving overall threadsafety. The events are currently * sent to wxTheApp. */ class CMuleGUIEvent : public wxEvent { public: /** Takes ownership a notifier functor. */ CMuleGUIEvent(CMuleNotiferBase* ntf) : wxEvent(-1, MULE_EVT_NOTIFY) , m_functor(ntf) { wxASSERT(m_functor); } /** Destructor, frees the functor object. */ virtual ~CMuleGUIEvent() { delete m_functor; } /** Executes the notification. */ void Notify() const { m_functor->Notify(); } /** @see wxEvent::Clone */ virtual wxEvent* Clone() const { return new CMuleGUIEvent(m_functor->Clone()); } private: /** Not copyable. */ CMuleGUIEvent(const CMuleGUIEvent&); /** Not assignable. */ CMuleGUIEvent& operator=(const CMuleGUIEvent&); //! The actual functor object, CMuleNotiferBase* m_functor; }; /** * This function will execute or queue a given notification functor. * * If the caller is the main thread, the functor is executed immediatly, * thus acting like a regular function call. OTOH, if the caller is a * worker thread, the functor is cloned and sent via an event to * wxTheApp. */ void HandleNotification(const CMuleNotiferBase& ntf); /** * These functions take a function pointer and a set of arguments, * matching those of the function-pointer. A functor is created * from these and either executed immediatly, or sent as an event * in the case of non-main threads calling the functions. * * Note that the return-value of the function must be void. * * IMPORTANT: Note that the functions passed to DoNotify must not * take arguments via references, since this causes the functors * to store references to the arguments, rather than a copy and * thus ends up with dangling references. */ //@{ inline void DoNotify(void (*func)()) { HandleNotification(CMuleNotifier0(func)); } template inline void DoNotify(void (*func)(A1A), A1B arg1) { HandleNotification(CMuleNotifier1(func, arg1)); } template inline void DoNotify(void (*func)(A1A, A2A), A1B arg1, A2B arg2) { HandleNotification(CMuleNotifier2(func, arg1, arg2)); } template inline void DoNotify(void (*func)(A1A, A2A, A3A), A1B arg1, A2B arg2, A3B arg3) { HandleNotification(CMuleNotifier3(func, arg1, arg2, arg3)); } //@} /** * The same as above, but these functions will always send an event, * even from the main thread. */ void HandleNotificationAlways(const CMuleNotiferBase& ntf); inline void DoNotifyAlways(void (*func)()) { HandleNotificationAlways(CMuleNotifier0(func)); } template inline void DoNotifyAlways(void (*func)(A1A), A1B arg1) { HandleNotificationAlways(CMuleNotifier1(func, arg1)); } template inline void DoNotifyAlways(void (*func)(A1A, A2A), A1B arg1, A2B arg2) { HandleNotificationAlways(CMuleNotifier2(func, arg1, arg2)); } template inline void DoNotifyAlways(void (*func)(A1A, A2A, A3A), A1B arg1, A2B arg2, A3B arg3) { HandleNotificationAlways(CMuleNotifier3(func, arg1, arg2, arg3)); } } //! Placing CMuleGUIEvent in the global namespace. using MuleNotify::CMuleGUIEvent; //! The event-handler type that takes a CMuleGUIEvent. typedef void (wxEvtHandler::*MuleNotifyEventFunction)(CMuleGUIEvent&); //! Event-handler for completed hashings of new shared files and partfiles. #define EVT_MULE_NOTIFY(func) \ DECLARE_EVENT_TABLE_ENTRY(MULE_EVT_NOTIFY, -1, -1, \ (wxObjectEventFunction) (wxEventFunction) \ wxStaticCastEvent(MuleNotifyEventFunction, &func), (wxObject*) NULL), // SharedFilesCtrl #define Notify_SharedFilesShowFile(file) MuleNotify::DoNotify(&MuleNotify::SharedFilesShowFile, file) #define Notify_SharedFilesRemoveFile(file) MuleNotify::DoNotify(&MuleNotify::SharedFilesRemoveFile, file) #define Notify_SharedFilesRemoveAllItems() MuleNotify::DoNotify(&MuleNotify::SharedFilesRemoveAllFiles) #define Notify_SharedFilesShowFileList() MuleNotify::DoNotify(&MuleNotify::SharedFilesShowFileList) #define Notify_SharedFilesSort() MuleNotify::DoNotify(&MuleNotify::SharedFilesSort) #define Notify_SharedFilesUpdateItem(file) MuleNotify::DoNotify(&MuleNotify::SharedFilesUpdateItem, file) // download ctrl #define Notify_DownloadCtrlUpdateItem(ptr) MuleNotify::DoNotify(&MuleNotify::DownloadCtrlUpdateItem, ptr) #define Notify_DownloadCtrlAddFile(file) MuleNotify::DoNotify(&MuleNotify::DownloadCtrlAddFile, file) #define Notify_DownloadCtrlRemoveFile(file) MuleNotify::DoNotify(&MuleNotify::DownloadCtrlRemoveFile, file) #define Notify_DownloadCtrlSort() MuleNotify::DoNotify(&MuleNotify::DownloadCtrlSort) #define Notify_DownloadCtrlDoItemSelectionChanged() MuleNotify::DoNotifyAlways(&MuleNotify::DownloadCtrlDoItemSelectionChanged) // source ctrl #define Notify_SourceCtrlUpdateSource(ptr, val) MuleNotify::DoNotify(&MuleNotify::SourceCtrlUpdateSource, ptr, val) #define Notify_SourceCtrlAddSource(p0, p1, val) MuleNotify::DoNotify(&MuleNotify::SourceCtrlAddSource, p0, p1, val) #define Notify_SourceCtrlRemoveSource(ptr0, ptr1) MuleNotify::DoNotify(&MuleNotify::SourceCtrlRemoveSource, ptr0, ptr1) // upload ctrl #define Notify_SharedCtrlAddClient(p0, p1, val) MuleNotify::DoNotify(&MuleNotify::SharedCtrlAddClient, p0, p1, val) #define Notify_SharedCtrlRefreshClient(ptr, val) MuleNotify::DoNotify(&MuleNotify::SharedCtrlRefreshClient, ptr, val) #define Notify_SharedCtrlRemoveClient(p0, p1) MuleNotify::DoNotify(&MuleNotify::SharedCtrlRemoveClient, p0, p1) // server #define Notify_ServerAdd(ptr) MuleNotify::DoNotify(&MuleNotify::ServerAdd, ptr) #define Notify_ServerRemove(ptr) MuleNotify::DoNotify(&MuleNotify::ServerRemove, ptr) #define Notify_ServerRemoveDead() MuleNotify::DoNotify(&MuleNotify::ServerRemoveDead) #define Notify_ServerRemoveAll() MuleNotify::DoNotify(&MuleNotify::ServerRemoveAll) #define Notify_ServerHighlight(ptr, val) MuleNotify::DoNotify(&MuleNotify::ServerHighlight, ptr, val) #define Notify_ServerRefresh(ptr) MuleNotify::DoNotify(&MuleNotify::ServerRefresh, ptr) #define Notify_ServerFreeze() MuleNotify::DoNotify(&MuleNotify::ServerFreeze) #define Notify_ServerThaw() MuleNotify::DoNotify(&MuleNotify::ServerThaw) #define Notify_ServerUpdateED2KInfo() MuleNotify::DoNotify(&MuleNotify::ServerUpdateED2KInfo) #define Notify_ServerUpdateKadKInfo() MuleNotify::DoNotify(&MuleNotify::ServerUpdateKadKInfo) // search #define Notify_SearchCancel() MuleNotify::DoNotify(&MuleNotify::SearchCancel) #define Notify_SearchLocalEnd() MuleNotify::DoNotify(&MuleNotify::SearchLocalEnd) #define Notify_KadSearchEnd(val) MuleNotify::DoNotify(&MuleNotify::KadSearchEnd, val) #define Notify_Search_Update_Sources(ptr) MuleNotify::DoNotify(&MuleNotify::Search_Update_Sources, ptr) #define Notify_Search_Add_Result(s) MuleNotify::DoNotify(&MuleNotify::Search_Add_Result, s) // chat #define Notify_ChatUpdateFriend(ptr) MuleNotify::DoNotify(&MuleNotify::ChatUpdateFriend, ptr) #define Notify_ChatRemoveFriend(ptr) MuleNotify::DoNotify(&MuleNotify::ChatRemoveFriend, ptr) #define Notify_ChatConnResult(val0, val1, s) MuleNotify::DoNotify(&MuleNotify::ChatConnResult, val0, val1, s) #define Notify_ChatProcessMsg(val0, s) MuleNotify::DoNotify(&MuleNotify::ChatProcessMsg, val0, s) #define Notify_ChatSendCaptcha(val0, s) MuleNotify::DoNotify(&MuleNotify::ChatSendCaptcha, val0, s) // misc #define Notify_ShowConnState(val) MuleNotify::DoNotify(&MuleNotify::ShowConnState, val) #define Notify_ShowUserCount(str) MuleNotify::DoNotify(&MuleNotify::ShowUserCount, str) #define Notify_ShowUpdateCatTabTitles() MuleNotify::DoNotify(&MuleNotify::ShowUpdateCatTabTitles) #define Notify_ShowGUI() MuleNotify::DoNotify(&MuleNotify::ShowGUI) // categories #define Notify_CategoryAdded() MuleNotify::DoNotify(&MuleNotify::CategoryAdded) #define Notify_CategoryUpdate(cat) MuleNotify::DoNotify(&MuleNotify::CategoryUpdate, cat) #define Notify_CategoryDelete(cat) MuleNotify::DoNotify(&MuleNotify::CategoryDelete, cat) // server.met/nodes.dat default urls #define Notify_NodesURLChanged(url) MuleNotify::DoNotify(&MuleNotify::NodesURLChanged, url) #define Notify_ServersURLChanged(url) MuleNotify::DoNotify(&MuleNotify::ServersURLChanged, url) // Partfile conversion: Core -> GUI #define Notify_ConvertUpdateProgress(val, text) Notify_ConvertUpdateProgressFull(val, text, wxEmptyString) #define Notify_ConvertUpdateProgressFull(val, text, hdr) MuleNotify::DoNotify(&MuleNotify::ConvertUpdateProgress, val, text, hdr) #define Notify_ConvertUpdateJobInfo(info) MuleNotify::DoNotify(&MuleNotify::ConvertUpdateJobInfo, info) #define Notify_ConvertRemoveJobInfo(id) MuleNotify::DoNotify(&MuleNotify::ConvertRemoveJobInfo, id) #define Notify_ConvertClearInfos() MuleNotify::DoNotify(&MuleNotify::ConvertClearInfos) // Partfile conversion: GUI -> Core #define Notify_ConvertRemoveJob(id) MuleNotify::DoNotify(&MuleNotify::ConvertRemoveJob, id) #define Notify_ConvertRetryJob(id) MuleNotify::DoNotify(&MuleNotify::ConvertRetryJob, id) #define Notify_ConvertReaddAllJobs() MuleNotify::DoNotify(&MuleNotify::ConvertReaddAllJobs) // // GUI -> core notification // // PartFile #define CoreNotify_PartFile_Swap_A4AF(ptr) MuleNotify::DoNotify(&MuleNotify::PartFile_Swap_A4AF, ptr) #define CoreNotify_PartFile_Swap_A4AF_Auto(ptr) MuleNotify::DoNotify(&MuleNotify::PartFile_Swap_A4AF_Auto, ptr) #define CoreNotify_PartFile_Swap_A4AF_Others(ptr) MuleNotify::DoNotify(&MuleNotify::PartFile_Swap_A4AF_Others, ptr) #define CoreNotify_PartFile_Pause(ptr) MuleNotify::DoNotify(&MuleNotify::PartFile_Pause, ptr) #define CoreNotify_PartFile_Resume(ptr) MuleNotify::DoNotify(&MuleNotify::PartFile_Resume, ptr) #define CoreNotify_PartFile_Stop(ptr) MuleNotify::DoNotify(&MuleNotify::PartFile_Stop, ptr) #define CoreNotify_PartFile_PrioAuto(ptr, val) MuleNotify::DoNotify(&MuleNotify::PartFile_PrioAuto, ptr, val) #define CoreNotify_PartFile_PrioSet(p, v0, v1) MuleNotify::DoNotify(&MuleNotify::PartFile_PrioSet, p, v0, v1) #define CoreNotify_PartFile_Delete(ptr) MuleNotify::DoNotify(&MuleNotify::PartFile_Delete, ptr) #define CoreNotify_PartFile_SetCat(ptr, val) MuleNotify::DoNotify(&MuleNotify::PartFile_SetCat, ptr, val) // KnownFile #define CoreNotify_KnownFile_Up_Prio_Set(ptr, val) MuleNotify::DoNotify(&MuleNotify::KnownFile_Up_Prio_Set, ptr, val) #define CoreNotify_KnownFile_Up_Prio_Auto(ptr) MuleNotify::DoNotify(&MuleNotify::KnownFile_Up_Prio_Auto, ptr) #define CoreNotify_KnownFile_Comment_Set(ptr, v0, v1) MuleNotify::DoNotify(&MuleNotify::KnownFile_Comment_Set, ptr, v0, v1) // Search #define CoreNotify_Search_Add_Download(ptr, val) MuleNotify::DoNotify(&MuleNotify::Search_Add_Download, ptr, val) #define CoreNotify_Search_Update_Progress(val) MuleNotify::DoNotify(&MuleNotify::Search_Update_Progress, val) // download queue #define CoreNotify_Download_Set_Cat_Prio(cat, pri) MuleNotify::DoNotify(&MuleNotify::Download_Set_Cat_Prio, cat, pri) #define CoreNotify_Download_Set_Cat_Status(cat, st) MuleNotify::DoNotify(&MuleNotify::Download_Set_Cat_Status, cat, st) // upload queue #define CoreNotify_Upload_Resort_Queue() MuleNotify::DoNotify(&MuleNotify::Upload_Resort_Queue) // client #define CoreNotify_Client_Delete(client) MuleNotify::DoNotify(&MuleNotify::Client_Delete, client) // ADUNANZA BEGIN // backport (probabilmente inutili se non con ASIO) #define CoreNotify_UDPSocketSend(ptr) MuleNotify::DoNotifyAlways(&MuleNotify::UDPSocketSend, ptr) #define CoreNotify_UDPSocketReceive(ptr) MuleNotify::DoNotifyAlways(&MuleNotify::UDPSocketReceive, ptr) // ADUNANZA END // // Notifications that always create an event // // IP filter #define NotifyAlways_IPFilter_Reload() MuleNotify::DoNotifyAlways(&MuleNotify::IPFilter_Reload) #define NotifyAlways_IPFilter_Update(url) MuleNotify::DoNotifyAlways(&MuleNotify::IPFilter_Update, url) #endif // __GUIEVENTS_H__ // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ClientRef.cpp0000644000175000017500000001460612050266603020705 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2003-2011 Stu Redman ( sturedman@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ClientRef.h" #include "amule.h" // Needed fot theApp #ifdef CLIENT_GUI #include "UpDownClientEC.h" // Needed for CUpDownClient #else #include "updownclient.h" // Needed for CUpDownClient #endif #ifdef DEBUG_ZOMBIE_CLIENTS #define MFROM m_from #define ASSIGN_MFROM(a) m_from = a #else #define MFROM #define ASSIGN_MFROM(a) #endif CClientRef::CClientRef(const CClientRef& ref) { // ADUNANZA BEGIN #if 0 m_client = ref.m_client; ASSIGN_MFROM(wxT("copy ctor of ") + ref.m_from); if (m_client) { m_client->Link(MFROM); } #else ASSIGN_MFROM(wxT("copy ctor of ") + ref.m_from); if (ref.m_client) { ref.m_client->Link(MFROM); } m_client = ref.m_client; #endif // ADUNANZA END } CClientRef::CClientRef(CUpDownClient * client LINKED_FROM) { // ADUNANZA BEGIN #if 0 m_client = client; ASSIGN_MFROM(from); if (m_client) { m_client->Link(MFROM); } #else ASSIGN_MFROM(from); if (client) { client->Link(MFROM); } m_client = client; #endif // ADUNANZA END } void CClientRef::Link(CUpDownClient * client LINKED_FROM) { // ADUNANZA BEGIN #if 0 Unlink(); m_client = client; ASSIGN_MFROM(from); if (m_client) { m_client->Link(MFROM); } #else if (m_client != client) { Unlink(); // unlink previous ASSIGN_MFROM(from); if (client) client->Link(MFROM); m_client = client; } else { // link dello stesso, aggiungo quindi solo un link ASSIGN_MFROM(from); if (m_client) m_client->Link(MFROM); } #endif // ADUNANZA END } void CClientRef::Unlink() { if (m_client) { m_client->Unlink(MFROM); m_client = NULL; } } // in amulegui clients are never deleted except when they are marked as removed through EC #ifndef CLIENT_GUI CUpDownClient * CClientRef::GetClientChecked() { if (m_client && m_client->HasBeenDeleted()) { m_client->Unlink(MFROM); m_client = NULL; } return m_client; } CClientRef& CClientRef::GetRef() { if (m_client && m_client->HasBeenDeleted()) { m_client->Unlink(MFROM); m_client = NULL; } return *this; } void CClientRef::Safe_Delete() { CUpDownClient * client = m_client; if (client) { Unlink(); client->Safe_Delete(); } } #endif #define WRAPC(func) CClientRef::func() const { return m_client->func(); } uint32 WRAPC(ECID) bool WRAPC(ExtProtocolAvailable) uint16 WRAPC(GetAvailablePartCount) const wxString& WRAPC(GetClientFilename) const wxString& WRAPC(GetClientModString) const wxString& WRAPC(GetClientOSInfo) uint8 WRAPC(GetClientSoft) const wxString& WRAPC(GetClientVerString) uint64 WRAPC(GetDownloadedTotal) uint8 WRAPC(GetDownloadState) CFriend* WRAPC(GetFriend) bool WRAPC(GetFriendSlot) wxString WRAPC(GetFullIP) uint32 WRAPC(GetIP) uint16 WRAPC(GetKadPort) float WRAPC(GetKBpsDown) uint16 WRAPC(GetLastDownloadingPart) uint16 WRAPC(GetNextRequestedPart) uint8 WRAPC(GetObfuscationStatus) uint16 WRAPC(GetOldRemoteQueueRank) const BitVector& WRAPC(GetPartStatus) uint16 WRAPC(GetRemoteQueueRank) CPartFile* WRAPC(GetRequestFile) uint32 WRAPC(GetScore) double WRAPC(GetScoreRatio) uint32 WRAPC(GetServerIP) const wxString WRAPC(GetServerName) uint16 WRAPC(GetServerPort) const wxString& WRAPC(GetSoftStr) const wxString& WRAPC(GetSoftVerStr) int WRAPC(GetSourceFrom) uint64 WRAPC(GetTransferredDown) uint64 WRAPC(GetTransferredUp) uint32 WRAPC(GetUploadDatarate) uint64 WRAPC(GetUploadedTotal) const CKnownFile* WRAPC(GetUploadFile) uint16 WRAPC(GetUploadQueueWaitingPosition) uint8 WRAPC(GetUploadState) size_t WRAPC(GetUpPartCount) uint32 WRAPC(GetUserIDHybrid) const wxString& WRAPC(GetUserName) uint16_t WRAPC(GetUserPort) const CMD4Hash& WRAPC(GetUserHash) uint32 WRAPC(GetVersion) bool WRAPC(HasDisabledSharedFiles) bool WRAPC(HasLowID) bool WRAPC(IsBadGuy) bool WRAPC(IsFriend) bool WRAPC(IsIdentified) bool WRAPC(IsRemoteQueueFull) void WRAPC(RequestSharedFileList) // ADUNANZA BEGIN uint32 WRAPC(GetClientAduType) const wxString& WRAPC(GetClientFWCity) bool WRAPC(IsFastwebFiber) bool CClientRef::IsNotDeletedAndIsDownloadingClient() const {return (m_client && m_client->IsNotDeletedAndIsDownloadingClient());} // ADUNANZA END bool CClientRef::IsUpPartAvailable(uint16 iPart) const { return m_client->IsUpPartAvailable(iPart); } void CClientRef::SetFriend(CFriend* newfriend) const { m_client->SetFriend(newfriend); } void CClientRef::SetFriendSlot(bool bNV) const { m_client->SetFriendSlot(bNV); } #ifndef CLIENT_GUI void WRAPC(ClearUploadFileID) uint16 WRAPC(GetUDPPort) void CClientRef::SetCommentDirty(bool bDirty) const { m_client->SetCommentDirty(bDirty); } #endif bool CClientRef::SwapToAnotherFile(bool bIgnoreNoNeeded, bool ignoreSuspensions, bool bRemoveCompletely, CPartFile* toFile) const { return m_client->SwapToAnotherFile(bIgnoreNoNeeded, ignoreSuspensions, bRemoveCompletely, toFile); } wxString CClientRef::GetSecureIdentTextStatus() const { wxString ret; if (theApp->CryptoAvailable()) { if (m_client->SUINotSupported()) { ret = _("Not supported"); } else if (m_client->SUIFailed()) { ret = _("Failed"); } else if (m_client->SUINeeded()) { ret = _("Not complete"); } else if (m_client->IsBadGuy()) { ret = _("Bad Guy"); } else if (m_client->IsIdentified()) { ret = _("Verified - OK"); } } else { ret = _("Not Available"); } return ret; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/UPnPBase.h0000644000175000017500000004055012050266603020111 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Marcelo Roberto Jimenez ( phoenix@amule.org ) // Copyright (c) 2006-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // // This define must not conflict with the one in the standard header #ifndef AMULE_UPNP_H #define AMULE_UPNP_H #include #include #include #include #include "UPnPCompatibility.h" #ifdef UPNP_C std::string stdEmptyString; #else // UPNP_C extern std::string stdEmptyString; #endif // UPNP_C /** * Case insensitive std::string comparison */ bool stdStringIsEqualCI( const std::string &s1, const std::string &s2); class CUPnPPortMapping { private: std::string m_port; std::string m_protocol; std::string m_enabled; std::string m_description; std::string m_key; public: CUPnPPortMapping( int port = 0, const std::string &protocol = stdEmptyString, bool enabled = false, const std::string &description = stdEmptyString); ~CUPnPPortMapping() {} const std::string &getPort() const { return m_port; } const std::string &getProtocol() const { return m_protocol; } const std::string &getEnabled() const { return m_enabled; } const std::string &getDescription() const { return m_description; } const std::string &getKey() const { return m_key; } }; class CUPnPControlPoint; class CUPnPLib { public: static const std::string &UPNP_ROOT_DEVICE; static const std::string &UPNP_DEVICE_IGW; static const std::string &UPNP_DEVICE_WAN; static const std::string &UPNP_DEVICE_WAN_CONNECTION; static const std::string &UPNP_DEVICE_LAN; static const std::string &UPNP_SERVICE_LAYER3_FORWARDING; static const std::string &UPNP_SERVICE_WAN_COMMON_INTERFACE_CONFIG; static const std::string &UPNP_SERVICE_WAN_IP_CONNECTION; static const std::string &UPNP_SERVICE_WAN_PPP_CONNECTION; CUPnPControlPoint &m_ctrlPoint; public: CUPnPLib(CUPnPControlPoint &ctrlPoint); ~CUPnPLib() {} // Convenience function so we don't have to write explicit calls // to char2unicode every time std::string GetUPnPErrorMessage(int code) const; // Convenience function to avoid repetitive processing of error // messages std::string processUPnPErrorMessage( const std::string &messsage, int code, const DOMString errorString, IXML_Document *doc) const; // Processing response to actions void ProcessActionResponse( IXML_Document *RespDoc, const std::string &actionName) const; // IXML_Element IXML_Element *Element_GetRootElement( IXML_Document *doc) const; IXML_Element *Element_GetFirstChild( IXML_Element *parent) const; IXML_Element *Element_GetNextSibling( IXML_Element *child) const; const DOMString Element_GetTag( IXML_Element *element) const; const std::string Element_GetTextValue( IXML_Element *element) const; const std::string Element_GetChildValueByTag( IXML_Element *element, const DOMString tag) const; IXML_Element *Element_GetFirstChildByTag( IXML_Element *element, const DOMString tag) const; IXML_Element *Element_GetNextSiblingByTag( IXML_Element *element, const DOMString tag) const; const std::string Element_GetAttributeByTag( IXML_Element *element, const DOMString tag) const; }; class CUPnPControlPoint; /* * Even though we can retrieve the upnpLib handler from the upnpControlPoint, * we must pass it separetly at this point, because the class CUPnPControlPoint * must be declared after. * * CUPnPLib can only be removed from the constructor once we agree to link to * UPnPLib explicitly, making this dlopen() stuff unnecessary. */ template class CXML_List : public std::map { public: CXML_List( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *parent, const std::string &url); ~CXML_List(); }; template CXML_List::CXML_List( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *parent, const std::string &url) { IXML_Element *elementList = upnpLib.Element_GetFirstChildByTag(parent, XML_LIST_NAME); unsigned int i = 0; for ( IXML_Element *element = upnpLib.Element_GetFirstChildByTag(elementList, XML_ELEMENT_NAME); element; element = upnpLib.Element_GetNextSiblingByTag(element, XML_ELEMENT_NAME)) { // Add a new element to the element list T *upnpElement = new T(upnpControlPoint, upnpLib, element, url); (*this)[upnpElement->GetKey()] = upnpElement; ++i; } std::ostringstream msg; msg << "\n " << XML_LIST_NAME << ": " << i << " " << XML_ELEMENT_NAME << "s."; AddDebugLogLineN(logUPnP, msg); } template CXML_List::~CXML_List() { typename CXML_List::iterator it; for(it = this->begin(); it != this->end(); ++it) { delete (*it).second; } } extern const char s_argument[]; extern const char s_argumentList[]; extern const char s_action[]; extern const char s_actionList[]; extern const char s_allowedValue[]; extern const char s_allowedValueList[]; extern const char s_stateVariable[]; extern const char s_serviceStateTable[]; extern const char s_service[]; extern const char s_serviceList[]; extern const char s_device[]; extern const char s_deviceList[]; #ifdef UPNP_C const char s_argument[] = "argument"; const char s_argumentList[] = "argumentList"; const char s_action[] = "action"; const char s_actionList[] = "actionList"; const char s_allowedValue[] = "allowedValue"; const char s_allowedValueList[] = "allowedValueList"; const char s_stateVariable[] = "stateVariable"; const char s_serviceStateTable[] = "serviceStateTable"; const char s_service[] = "service"; const char s_serviceList[] = "serviceList"; const char s_device[] = "device"; const char s_deviceList[] = "deviceList"; #endif // UPNP_C class CUPnPArgument; typedef CXML_List ArgumentList; class CUPnPAction; typedef CXML_List ActionList; class CUPnPStateVariable; typedef CXML_List ServiceStateTable; class CUPnPAllowedValue; typedef CXML_List AllowedValueList; class CUPnPService; typedef CXML_List ServiceList; class CUPnPDevice; typedef CXML_List DeviceList; class CUPnPError { private: IXML_Element *m_root; const std::string m_ErrorCode; const std::string m_ErrorDescription; public: CUPnPError( const CUPnPLib &upnpLib, IXML_Document *errorDoc); ~CUPnPError() {} const std::string &getErrorCode() const { return m_ErrorCode; } const std::string &getErrorDescription() const { return m_ErrorDescription; } }; class CUPnPArgument { private: const CUPnPControlPoint &m_UPnPControlPoint; const std::string m_name; const std::string m_direction; bool m_retval; const std::string m_relatedStateVariable; public: CUPnPArgument( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *argument, const std::string &SCPDURL); ~CUPnPArgument() {} const std::string &GetName() const { return m_name; } const std::string &GetDirection() const { return m_direction; } bool GetRetVal() const { return m_retval; } const std::string &GetRelatedStateVariable() const { return m_relatedStateVariable; } const std::string &GetKey() const { return m_name; } }; class CUPnPAction { private: const CUPnPControlPoint &m_UPnPControlPoint; ArgumentList m_ArgumentList; const std::string m_name; public: CUPnPAction( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *action, const std::string &SCPDURL); ~CUPnPAction() {} const std::string &GetName() const { return m_name; } const std::string &GetKey() const { return m_name; } const ArgumentList &GetArgumentList() const { return m_ArgumentList; } }; class CUPnPAllowedValue { private: const CUPnPControlPoint &m_UPnPControlPoint; const std::string m_allowedValue; public: CUPnPAllowedValue( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *allowedValue, const std::string &SCPDURL); ~CUPnPAllowedValue() {} const std::string &GetAllowedValue() const { return m_allowedValue; } const std::string &GetKey() const { return m_allowedValue; } }; class CUPnPStateVariable { private: const CUPnPControlPoint &m_UPnPControlPoint; AllowedValueList m_AllowedValueList; const std::string m_name; const std::string m_dataType; const std::string m_defaultValue; const std::string m_sendEvents; public: CUPnPStateVariable( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *stateVariable, const std::string &URLBase); ~CUPnPStateVariable() {} const std::string &GetNname() const { return m_name; } const std::string &GetDataType() const { return m_dataType; } const std::string &GetDefaultValue() const { return m_defaultValue; } const std::string &GetKey() const { return m_name; } const AllowedValueList &GetAllowedValueList() const { return m_AllowedValueList; } }; class CUPnPSCPD { private: const CUPnPControlPoint &m_UPnPControlPoint; ActionList m_ActionList; ServiceStateTable m_ServiceStateTable; const std::string m_SCPDURL; public: CUPnPSCPD( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *scpd, const std::string &SCPDURL); ~CUPnPSCPD() {} const ActionList &GetActionList() const { return m_ActionList; } const ServiceStateTable &GetServiceStateTable() const { return m_ServiceStateTable; } }; class CUPnPArgumentValue { private: std::string m_argument; std::string m_value; public: CUPnPArgumentValue(); CUPnPArgumentValue(const std::string &argument, const std::string &value); ~CUPnPArgumentValue() {} const std::string &GetArgument() const { return m_argument; } const std::string &GetValue() const { return m_value; } const std::string &SetArgument(const std::string& argument) { return m_argument = argument; } const std::string &SetValue(const std::string &value) { return m_value = value; } }; class CUPnPService { private: const CUPnPControlPoint &m_UPnPControlPoint; CUPnPLib &m_upnpLib; const std::string m_serviceType; const std::string m_serviceId; const std::string m_SCPDURL; const std::string m_controlURL; const std::string m_eventSubURL; std::string m_absSCPDURL; std::string m_absControlURL; std::string m_absEventSubURL; int m_timeout; Upnp_SID m_SID; std::auto_ptr m_SCPD; public: CUPnPService( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *service, const std::string &URLBase); ~CUPnPService(); const std::string &GetServiceType() const { return m_serviceType; } const std::string &GetServiceId() const { return m_serviceId; } const std::string &GetSCPDURL() const { return m_SCPDURL; } const std::string &GetAbsSCPDURL() const { return m_absSCPDURL; } const std::string &GetControlURL() const { return m_controlURL; } const std::string &GetEventSubURL() const { return m_eventSubURL; } const std::string &GetAbsControlURL() const { return m_absControlURL; } const std::string &GetAbsEventSubURL() const { return m_absEventSubURL; } int GetTimeout() const { return m_timeout; } void SetTimeout(int t) { m_timeout = t; } int *GetTimeoutAddr() { return &m_timeout; } char *GetSID() { return m_SID; } void SetSID(const char *s) { memcpy(m_SID, s, sizeof(Upnp_SID)); } const std::string &GetKey() const { return m_serviceId; } bool IsSubscribed() const { return m_SCPD.get() != NULL; } void SetSCPD(CUPnPSCPD *SCPD) { m_SCPD.reset(SCPD); } bool Execute( const std::string &ActionName, const std::vector &ArgValue) const; const std::string GetStateVariable( const std::string &stateVariableName) const; }; class CUPnPDevice { private: const CUPnPControlPoint &m_UPnPControlPoint; // Please, lock these lists before use DeviceList m_DeviceList; ServiceList m_ServiceList; const std::string m_deviceType; const std::string m_friendlyName; const std::string m_manufacturer; const std::string m_manufacturerURL; const std::string m_modelDescription; const std::string m_modelName; const std::string m_modelNumber; const std::string m_modelURL; const std::string m_serialNumber; const std::string m_UDN; const std::string m_UPC; std::string m_presentationURL; public: CUPnPDevice( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *device, const std::string &URLBase); ~CUPnPDevice() {} const std::string &GetUDN() const { return m_UDN; } const std::string &GetDeviceType() const { return m_deviceType; } const std::string &GetFriendlyName() const { return m_friendlyName; } const std::string &GetPresentationURL() const { return m_presentationURL; } const std::string &GetKey() const { return m_UDN; } }; class CUPnPRootDevice : public CUPnPDevice { private: const CUPnPControlPoint &m_UPnPControlPoint; const std::string m_URLBase; const std::string m_location; int m_expires; public: CUPnPRootDevice( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *rootDevice, const std::string &OriginalURLBase, const std::string &FixedURLBase, const char *location, int expires); ~CUPnPRootDevice() {} const std::string &GetURLBase() const { return m_URLBase; } const std::string &GetLocation() const { return m_location; } int GetExpires() const { return m_expires; } void SetExpires(int expires) { m_expires = expires; } }; typedef std::map RootDeviceMap; typedef std::map ServiceMap; typedef std::map PortMappingMap; class CUPnPControlPoint { private: static CUPnPControlPoint *s_CtrlPoint; // upnp stuff CUPnPLib m_upnpLib; UpnpClient_Handle m_UPnPClientHandle; RootDeviceMap m_RootDeviceMap; ServiceMap m_ServiceMap; PortMappingMap m_ActivePortMappingsMap; CUPnPMutex m_RootDeviceListMutex; bool m_IGWDeviceDetected; //#warning This variable is for testing purposes only and should disappear on release. CUPnPService *m_WanService; CUPnPMutex m_WaitForSearchTimeoutMutex; public: CUPnPControlPoint(unsigned short udpPort); ~CUPnPControlPoint(); void Subscribe(CUPnPService &service); void Unsubscribe(CUPnPService &service); bool AddPortMappings( std::vector &upnpPortMapping); bool DeletePortMappings( std::vector &upnpPortMapping); UpnpClient_Handle GetUPnPClientHandle() const { return m_UPnPClientHandle; } bool GetIGWDeviceDetected() const { return m_IGWDeviceDetected; } void SetIGWDeviceDetected(bool b) { m_IGWDeviceDetected = b; } bool WanServiceDetected() const { return !m_ServiceMap.empty(); } void SetWanService(CUPnPService *service) { m_WanService = service; } // Callback function static int Callback( Upnp_EventType EventType, void* Event, void* Cookie); private: void OnEventReceived( const std::string &Sid, int EventKey, IXML_Document *ChangedVariables); void AddRootDevice( IXML_Element *rootDevice, const std::string &urlBase, const char *location, int expires); void RemoveRootDevice( const char *udn); void RefreshPortMappings(); bool PrivateAddPortMapping( CUPnPPortMapping &upnpPortMapping); bool PrivateDeletePortMapping( CUPnPPortMapping &upnpPortMapping); }; #endif /* AMULE_UPNP_H */ // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/HTTPDownload.h0000644000175000017500000000501312050266603020736 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Timo Kujala ( tiku@users.sourceforge.net ) // Copyright (c) 2002-2011 Patrizio Bassi ( hetfield@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef HTTPDOWNLOAD_H #define HTTPDOWNLOAD_H #include "GuiEvents.h" // Needed for HTTP_Download_File #include "MuleThread.h" // Needed for CMuleThread #include // Needed for wxDateTime #include class wxEvtHandler; class wxHTTP; class wxInputStream; enum HTTPDownloadResult { HTTP_Success = 0, HTTP_Error, HTTP_Skipped }; class CHTTPDownloadThread : public CMuleThread { public: /** Note: wxChar* is used to circumvent the thread-unsafe wxString reference counting. */ CHTTPDownloadThread(const wxString& url, const wxString& filename, const wxString& oldfilename, HTTP_Download_File file_id, bool showDialog, bool checkDownloadNewer); static void StopAll(); private: ExitCode Entry(); virtual void OnExit(); wxString m_url; wxString m_tempfile; wxDateTime m_lastmodified; //! Date on which the file being updated was last modified. int m_result; int m_response; //! HTTP response code (e.g. 200) int m_error; //! Additional error code (@see wxProtocol class) HTTP_Download_File m_file_id; wxEvtHandler* m_companion; typedef std::set ThreadSet; static ThreadSet s_allThreads; static wxMutex s_allThreadsMutex; wxInputStream* GetInputStream(wxHTTP * & url_handler, const wxString& location, bool proxy); static wxString FormatDateHTTP(const wxDateTime& date); }; #endif // HTTPDOWNLOAD_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ClientCredits.cpp0000644000175000017500000001477212050266603021572 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ClientCredits.h" // Interface declarations #include #include "GetTickCount.h" // Needed for GetTickCount #include "Logger.h" // Needed for Add(Debug)LogLine CreditStruct::CreditStruct() : uploaded(0), downloaded(0), nLastSeen(0), nReserved3(0), nKeySize(0) { memset(abySecureIdent, 0, MAXPUBKEYSIZE); } CClientCredits::CClientCredits(CreditStruct* in_credits) { m_pCredits = in_credits; InitalizeIdent(); m_dwUnSecureWaitTime = 0; m_dwSecureWaitTime = 0; m_dwWaitTimeIP = 0; } CClientCredits::CClientCredits(const CMD4Hash& key) { m_pCredits = new CreditStruct(); m_pCredits->key = key; InitalizeIdent(); m_dwUnSecureWaitTime = ::GetTickCount(); m_dwSecureWaitTime = ::GetTickCount(); m_dwWaitTimeIP = 0; } CClientCredits::~CClientCredits() { delete m_pCredits; } void CClientCredits::AddDownloaded(uint32 bytes, uint32 dwForIP, bool cryptoavail) { switch (GetCurrentIdentState(dwForIP)) { case IS_IDFAILED: case IS_IDBADGUY: case IS_IDNEEDED: if (cryptoavail) { return; } break; case IS_NOTAVAILABLE: case IS_IDENTIFIED: break; } m_pCredits->downloaded += bytes; } void CClientCredits::AddUploaded(uint32 bytes, uint32 dwForIP, bool cryptoavail) { switch (GetCurrentIdentState(dwForIP)) { case IS_IDFAILED: case IS_IDBADGUY: case IS_IDNEEDED: if (cryptoavail) { return; } break; case IS_NOTAVAILABLE: case IS_IDENTIFIED: break; } m_pCredits->uploaded += bytes; } uint64 CClientCredits::GetUploadedTotal() const { return m_pCredits->uploaded; } uint64 CClientCredits::GetDownloadedTotal() const { return m_pCredits->downloaded; } float CClientCredits::GetScoreRatio(uint32 dwForIP, bool cryptoavail) { // check the client ident status switch (GetCurrentIdentState(dwForIP)) { case IS_IDFAILED: case IS_IDBADGUY: case IS_IDNEEDED: if (cryptoavail) { // bad guy - no credits for you return 1.0f; } break; case IS_NOTAVAILABLE: case IS_IDENTIFIED: break; } if (GetDownloadedTotal() < 1000000) { return 1.0f; } float result = 0.0f; if (!GetUploadedTotal()) { result = 10.0f; } else { result = (GetDownloadedTotal() * 2.0f) / GetUploadedTotal(); } float result2 = sqrt((GetDownloadedTotal() / 1048576.0) + 2.0f); if (result > result2) { result = result2; } if (result < 1.0f) { return 1.0f; } else if (result > 10.0f) { return 10.0f; } return result; } void CClientCredits::SetLastSeen() { m_pCredits->nLastSeen = time(NULL); } void CClientCredits::InitalizeIdent() { if (m_pCredits->nKeySize == 0 ){ memset(m_abyPublicKey,0,80); // for debugging m_nPublicKeyLen = 0; m_identState = IS_NOTAVAILABLE; } else{ m_nPublicKeyLen = m_pCredits->nKeySize; memcpy(m_abyPublicKey, m_pCredits->abySecureIdent, m_nPublicKeyLen); m_identState = IS_IDNEEDED; } m_dwCryptRndChallengeFor = 0; m_dwCryptRndChallengeFrom = 0; m_dwIdentIP = 0; } void CClientCredits::Verified(uint32 dwForIP) { m_dwIdentIP = dwForIP; // client was verified, copy the keyto store him if not done already if (m_pCredits->nKeySize == 0){ m_pCredits->nKeySize = m_nPublicKeyLen; memcpy(m_pCredits->abySecureIdent, m_abyPublicKey, m_nPublicKeyLen); if (GetDownloadedTotal() > 0){ // for security reason, we have to delete all prior credits here // in order to save this client, set 1 byte m_pCredits->downloaded = 1; m_pCredits->uploaded = 1; AddDebugLogLineN( logCredits, wxT("Credits deleted due to new SecureIdent") ); } } m_identState = IS_IDENTIFIED; } bool CClientCredits::SetSecureIdent(const byte* pachIdent, uint8 nIdentLen) { // verified Public key cannot change, use only if there is not public key yet if (MAXPUBKEYSIZE < nIdentLen || m_pCredits->nKeySize != 0 ) { return false; } memcpy(m_abyPublicKey,pachIdent, nIdentLen); m_nPublicKeyLen = nIdentLen; m_identState = IS_IDNEEDED; return true; } EIdentState CClientCredits::GetCurrentIdentState(uint32 dwForIP) const { if (m_identState != IS_IDENTIFIED) return m_identState; else{ if (dwForIP == m_dwIdentIP) return IS_IDENTIFIED; else return IS_IDBADGUY; // mod note: clients which just reconnected after an IP change and have to ident yet will also have this state for 1-2 seconds // so don't try to spam such clients with "bad guy" messages (besides: spam messages are always bad) } } uint32 CClientCredits::GetSecureWaitStartTime(uint32 dwForIP) { if (m_dwUnSecureWaitTime == 0 || m_dwSecureWaitTime == 0) SetSecWaitStartTime(dwForIP); if (m_pCredits->nKeySize != 0){ // this client is a SecureHash Client if (GetCurrentIdentState(dwForIP) == IS_IDENTIFIED){ // good boy return m_dwSecureWaitTime; } else{ // not so good boy if (dwForIP == m_dwWaitTimeIP){ return m_dwUnSecureWaitTime; } else{ // bad boy // this can also happen if the client has not identified himself yet, but will do later - so maybe he is not a bad boy :) . m_dwUnSecureWaitTime = ::GetTickCount(); m_dwWaitTimeIP = dwForIP; return m_dwUnSecureWaitTime; } } } else{ // not a SecureHash Client - handle it like before for now (no security checks) return m_dwUnSecureWaitTime; } } void CClientCredits::SetSecWaitStartTime(uint32 dwForIP) { m_dwUnSecureWaitTime = ::GetTickCount()-1; m_dwSecureWaitTime = ::GetTickCount()-1; m_dwWaitTimeIP = dwForIP; } void CClientCredits::ClearWaitStartTime() { m_dwUnSecureWaitTime = 0; m_dwSecureWaitTime = 0; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ClientCreditsList.cpp0000644000175000017500000004013712050266603022420 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ClientCreditsList.h" // Interface declarations #include #include #include #include // Needed for GetFileSize #include "GetTickCount.h" // Needed for GetTickCount #include "Preferences.h" // Needed for thePrefs #include "ClientCredits.h" // Needed for CClientCredits #include "amule.h" // Needed for theApp #include "CFile.h" // Needed for CFile #include "Logger.h" // Needed for Add(Debug)LogLine #include "CryptoPP_Inc.h" // Needed for Crypto functions // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) #include "Statistics.h" // Needed for GetDownloadRate #include "ThreadScheduler.h" // Needed for Busy #endif // ADUNANZA END #define CLIENTS_MET_FILENAME wxT("clients.met") #define CLIENTS_MET_BAK_FILENAME wxT("clients.met.bak") #define CRYPTKEY_FILENAME wxT("cryptkey.dat") CClientCreditsList::CClientCreditsList() { m_nLastSaved = ::GetTickCount(); LoadList(); InitalizeCrypting(); } CClientCreditsList::~CClientCreditsList() { DeleteContents(m_mapClients); delete static_cast(m_pSignkey); } void CClientCreditsList::LoadList() { CFile file; CPath fileName = CPath(theApp->ConfigDir + CLIENTS_MET_FILENAME); if (!fileName.FileExists()) { return; } try { file.Open(fileName, CFile::read); if (file.ReadUInt8() != CREDITFILE_VERSION) { AddDebugLogLineC( logCredits, wxT("Creditfile is outdated and will be replaced") ); file.Close(); return; } // everything is ok, lets see if the backup exist... CPath bakFileName = CPath(theApp->ConfigDir + CLIENTS_MET_BAK_FILENAME); bool bCreateBackup = TRUE; if (bakFileName.FileExists()) { // Ok, the backup exist, get the size CFile hBakFile(bakFileName); if ( hBakFile.GetLength() > file.GetLength()) { // the size of the backup was larger then the // org. file, something is wrong here, don't // overwrite old backup.. bCreateBackup = FALSE; } // else: backup is smaller or the same size as org. // file, proceed with copying of file } //else: the backup doesn't exist, create it if (bCreateBackup) { file.Close(); // close the file before copying if (!CPath::CloneFile(fileName, bakFileName, true)) { AddDebugLogLineC(logCredits, CFormat(wxT("Could not create backup file '%s'")) % fileName); } // reopen file if (!file.Open(fileName, CFile::read)) { AddDebugLogLineC( logCredits, wxT("Failed to load creditfile") ); return; } file.Seek(1); } uint32 count = file.ReadUInt32(); const uint32 dwExpired = time(NULL) - 12960000; // today - 150 day uint32 cDeleted = 0; for (uint32 i = 0; i < count; i++){ CreditStruct* newcstruct = new CreditStruct(); newcstruct->key = file.ReadHash(); newcstruct->uploaded = file.ReadUInt32(); newcstruct->downloaded = file.ReadUInt32(); newcstruct->nLastSeen = file.ReadUInt32(); newcstruct->uploaded += static_cast(file.ReadUInt32()) << 32; newcstruct->downloaded += static_cast(file.ReadUInt32()) << 32; newcstruct->nReserved3 = file.ReadUInt16(); newcstruct->nKeySize = file.ReadUInt8(); file.Read(newcstruct->abySecureIdent, MAXPUBKEYSIZE); if ( newcstruct->nKeySize > MAXPUBKEYSIZE ) { // Oh dear, this is bad mojo, the file is most likely corrupt // We can no longer assume that any of the clients in the file are valid // and will have to discard it. delete newcstruct; DeleteContents(m_mapClients); AddDebugLogLineC( logCredits, wxT("WARNING: Corruptions found while reading Creditfile!") ); return; } if (newcstruct->nLastSeen < dwExpired){ cDeleted++; delete newcstruct; continue; } CClientCredits* newcredits = new CClientCredits(newcstruct); m_mapClients[newcredits->GetKey()] = newcredits; } AddLogLineN(CFormat(wxPLURAL("Creditfile loaded, %u client is known", "Creditfile loaded, %u clients are known", count - cDeleted)) % (count - cDeleted)); if (cDeleted) { AddLogLineN(CFormat(wxPLURAL(" - Credits expired for %u client!", " - Credits expired for %u clients!", cDeleted)) % cDeleted); } } catch (const CSafeIOException& e) { AddDebugLogLineC(logCredits, wxT("IO error while loading clients.met file: ") + e.what()); } } void CClientCreditsList::SaveList() { // ADUNANZA BEGIN // Rimossa stampa di log in caso di NSLU2 #if !defined(ENABLE_ADUNSLU2) // ADUNANZA END AddDebugLogLineN( logCredits, wxT("Saved Credit list")); // ADUNANZA BEGIN #endif // ADUNANZA END m_nLastSaved = ::GetTickCount(); wxString name(theApp->ConfigDir + CLIENTS_MET_FILENAME); CFile file; if ( !file.Create(name, true) ) { AddDebugLogLineC( logCredits, wxT("Failed to create creditfile") ); return; } if ( file.Open(name, CFile::write) ) { // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) AddLogLineN(wxT("Starting to save creditfile")); #endif // ADUNANZA END try { uint32 count = 0; file.WriteUInt8( CREDITFILE_VERSION ); // Temporary place-holder for number of stucts file.WriteUInt32( 0 ); ClientMap::iterator it = m_mapClients.begin(); for ( ; it != m_mapClients.end(); ++it ) { CClientCredits* cur_credit = it->second; if ( cur_credit->GetUploadedTotal() || cur_credit->GetDownloadedTotal() ) { const CreditStruct* const cstruct = cur_credit->GetDataStruct(); file.WriteHash(cstruct->key); file.WriteUInt32(static_cast(cstruct->uploaded)); file.WriteUInt32(static_cast(cstruct->downloaded)); file.WriteUInt32(cstruct->nLastSeen); file.WriteUInt32(static_cast(cstruct->uploaded >> 32)); file.WriteUInt32(static_cast(cstruct->downloaded >> 32)); file.WriteUInt16(cstruct->nReserved3); file.WriteUInt8(cstruct->nKeySize); // Doesn't matter if this saves garbage, will be fixed on load. file.Write(cstruct->abySecureIdent, MAXPUBKEYSIZE); count++; } } // Write the actual number of structs file.Seek( 1 ); file.WriteUInt32( count ); // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) AddLogLineN(wxT("creditfile successfully saved")); #endif // ADUNANZA END } catch (const CIOFailureException& e) { AddDebugLogLineC(logCredits, wxT("IO failure while saving clients.met: ") + e.what()); } } else { AddDebugLogLineC(logCredits, wxT("Failed to open existing creditfile!")); } } CClientCredits* CClientCreditsList::GetCredit(const CMD4Hash& key) { CClientCredits* result; ClientMap::iterator it = m_mapClients.find( key ); if ( it == m_mapClients.end() ){ result = new CClientCredits(key); m_mapClients[result->GetKey()] = result; } else { result = it->second; } result->SetLastSeen(); return result; } void CClientCreditsList::Process() { // ADUNANZA BEGIN # if defined(ENABLE_ADUNSLU2) if (thePrefs::GetSaveCL() && ((::GetTickCount() - m_nLastSaved) > thePrefs::GetSaveCL()) && ((theStats::GetDownloadRate() <= 0) || !thePrefs::GetPFlags(FL_SAVECL_DR0)) && (!CThreadScheduler::Busy() || !thePrefs::GetPFlags(FL_SAVECL_TS))) # else // ADUNANZA END if (::GetTickCount() - m_nLastSaved > MIN2MS(13)) // ADUNANZA BEGIN # endif // ADUNANZA END SaveList(); } bool CClientCreditsList::CreateKeyPair() { try { CryptoPP::AutoSeededX917RNG rng; CryptoPP::InvertibleRSAFunction privkey; privkey.Initialize(rng, RSAKEYSIZE); // Nothing we can do against this filename2char :/ wxCharBuffer filename = filename2char(theApp->ConfigDir + CRYPTKEY_FILENAME); CryptoPP::FileSink *fileSink = new CryptoPP::FileSink(filename); CryptoPP::Base64Encoder *privkeysink = new CryptoPP::Base64Encoder(fileSink); privkey.DEREncode(*privkeysink); privkeysink->MessageEnd(); // Do not delete these pointers or it will blow in your face. // cryptopp semantics is giving ownership of these objects. // // delete privkeysink; // delete fileSink; AddDebugLogLineN(logCredits, wxT("Created new RSA keypair")); } catch(const CryptoPP::Exception& e) { AddDebugLogLineC(logCredits, wxString(wxT("Failed to create new RSA keypair: ")) + wxString(char2unicode(e.what()))); wxFAIL; return false; } return true; } void CClientCreditsList::InitalizeCrypting() { m_nMyPublicKeyLen = 0; memset(m_abyMyPublicKey,0,80); // not really needed; better for debugging tho m_pSignkey = NULL; if (!thePrefs::IsSecureIdentEnabled()) { return; } try { // check if keyfile is there if (wxFileExists(theApp->ConfigDir + CRYPTKEY_FILENAME)) { off_t keySize = CPath::GetFileSize(theApp->ConfigDir + CRYPTKEY_FILENAME); if (keySize == wxInvalidOffset) { AddDebugLogLineC(logCredits, wxT("Cannot access 'cryptkey.dat', please check permissions.")); return; } else if (keySize == 0) { AddDebugLogLineC(logCredits, wxT("'cryptkey.dat' is empty, recreating keypair.")); CreateKeyPair(); } } else { AddLogLineN(_("No 'cryptkey.dat' file found, creating.") ); CreateKeyPair(); } // load private key CryptoPP::FileSource filesource(filename2char(theApp->ConfigDir + CRYPTKEY_FILENAME), true, new CryptoPP::Base64Decoder); m_pSignkey = new CryptoPP::RSASSA_PKCS1v15_SHA_Signer(filesource); // calculate and store public key CryptoPP::RSASSA_PKCS1v15_SHA_Verifier pubkey(*static_cast(m_pSignkey)); CryptoPP::ArraySink asink(m_abyMyPublicKey, 80); pubkey.DEREncode(asink); m_nMyPublicKeyLen = asink.TotalPutLength(); asink.MessageEnd(); } catch (const CryptoPP::Exception& e) { delete static_cast(m_pSignkey); m_pSignkey = NULL; AddDebugLogLineC(logCredits, wxString(wxT("Error while initializing encryption keys: ")) + wxString(char2unicode(e.what()))); } } uint8 CClientCreditsList::CreateSignature(CClientCredits* pTarget, byte* pachOutput, uint8 nMaxSize, uint32 ChallengeIP, uint8 byChaIPKind, void* sigkey) { CryptoPP::RSASSA_PKCS1v15_SHA_Signer* signer = static_cast(sigkey); // signer param is used for debug only if (signer == NULL) signer = static_cast(m_pSignkey); // create a signature of the public key from pTarget wxASSERT( pTarget ); wxASSERT( pachOutput ); if ( !CryptoAvailable() ) { return 0; } try { CryptoPP::SecByteBlock sbbSignature(signer->SignatureLength()); CryptoPP::AutoSeededX917RNG rng; byte abyBuffer[MAXPUBKEYSIZE+9]; uint32 keylen = pTarget->GetSecIDKeyLen(); memcpy(abyBuffer,pTarget->GetSecureIdent(),keylen); // 4 additional bytes random data send from this client uint32 challenge = pTarget->m_dwCryptRndChallengeFrom; wxASSERT ( challenge != 0 ); PokeUInt32(abyBuffer+keylen,challenge); uint16 ChIpLen = 0; if ( byChaIPKind != 0){ ChIpLen = 5; PokeUInt32(abyBuffer+keylen+4, ChallengeIP); PokeUInt8(abyBuffer+keylen+4+4,byChaIPKind); } signer->SignMessage(rng, abyBuffer ,keylen+4+ChIpLen , sbbSignature.begin()); CryptoPP::ArraySink asink(pachOutput, nMaxSize); asink.Put(sbbSignature.begin(), sbbSignature.size()); return asink.TotalPutLength(); } catch (const CryptoPP::Exception& e) { AddDebugLogLineC(logCredits, wxString(wxT("Error while creating signature: ")) + wxString(char2unicode(e.what()))); wxFAIL; return 0; } } bool CClientCreditsList::VerifyIdent(CClientCredits* pTarget, const byte* pachSignature, uint8 nInputSize, uint32 dwForIP, uint8 byChaIPKind) { wxASSERT( pTarget ); wxASSERT( pachSignature ); if ( !CryptoAvailable() ){ pTarget->SetIdentState(IS_NOTAVAILABLE); return false; } bool bResult; try { CryptoPP::StringSource ss_Pubkey((byte*)pTarget->GetSecureIdent(),pTarget->GetSecIDKeyLen(),true,0); CryptoPP::RSASSA_PKCS1v15_SHA_Verifier pubkey(ss_Pubkey); // 4 additional bytes random data send from this client +5 bytes v2 byte abyBuffer[MAXPUBKEYSIZE+9]; memcpy(abyBuffer,m_abyMyPublicKey,m_nMyPublicKeyLen); uint32 challenge = pTarget->m_dwCryptRndChallengeFor; wxASSERT ( challenge != 0 ); PokeUInt32(abyBuffer+m_nMyPublicKeyLen, challenge); // v2 security improvments (not supported by 29b, not used as default by 29c) uint8 nChIpSize = 0; if (byChaIPKind != 0){ nChIpSize = 5; uint32 ChallengeIP = 0; switch (byChaIPKind) { case CRYPT_CIP_LOCALCLIENT: ChallengeIP = dwForIP; break; case CRYPT_CIP_REMOTECLIENT: // Ignore local ip... if (!theApp->GetPublicIP(true)) { if (::IsLowID(theApp->GetED2KID())){ AddDebugLogLineN(logCredits, wxT("Warning: Maybe SecureHash Ident fails because LocalIP is unknown")); // Fallback to local ip... ChallengeIP = theApp->GetPublicIP(); } else { ChallengeIP = theApp->GetED2KID(); } } else { ChallengeIP = theApp->GetPublicIP(); } break; case CRYPT_CIP_NONECLIENT: // maybe not supported in future versions ChallengeIP = 0; break; } PokeUInt32(abyBuffer+m_nMyPublicKeyLen+4, ChallengeIP); PokeUInt8(abyBuffer+m_nMyPublicKeyLen+4+4, byChaIPKind); } //v2 end bResult = pubkey.VerifyMessage(abyBuffer, m_nMyPublicKeyLen+4+nChIpSize, pachSignature, nInputSize); } catch (const CryptoPP::Exception& e) { AddDebugLogLineC(logCredits, wxString(wxT("Error while verifying identity: ")) + wxString(char2unicode(e.what()))); bResult = false; } if (!bResult){ if (pTarget->GetIdentState() == IS_IDNEEDED) pTarget->SetIdentState(IS_IDFAILED); } else { pTarget->Verified(dwForIP); } return bResult; } bool CClientCreditsList::CryptoAvailable() const { return m_nMyPublicKeyLen > 0 && m_pSignkey != NULL; } #ifdef _DEBUG bool CClientCreditsList::Debug_CheckCrypting(){ // create random key CryptoPP::AutoSeededX917RNG rng; CryptoPP::RSASSA_PKCS1v15_SHA_Signer priv(rng, 384); CryptoPP::RSASSA_PKCS1v15_SHA_Verifier pub(priv); byte abyPublicKey[80]; CryptoPP::ArraySink asink(abyPublicKey, 80); pub.DEREncode(asink); int8 PublicKeyLen = asink.TotalPutLength(); asink.MessageEnd(); uint32 challenge = rand(); // create fake client which pretends to be this emule CreditStruct* newcstruct = new CreditStruct(); CClientCredits newcredits(newcstruct); newcredits.SetSecureIdent(m_abyMyPublicKey,m_nMyPublicKeyLen); newcredits.m_dwCryptRndChallengeFrom = challenge; // create signature with fake priv key byte pachSignature[200]; memset(pachSignature,0,200); uint8 sigsize = CreateSignature(&newcredits,pachSignature,200,0,false, &priv); // next fake client uses the random created public key CreditStruct* newcstruct2 = new CreditStruct(); CClientCredits newcredits2(newcstruct2); newcredits2.m_dwCryptRndChallengeFor = challenge; // if you uncomment one of the following lines the check has to fail //abyPublicKey[5] = 34; //m_abyMyPublicKey[5] = 22; //pachSignature[5] = 232; newcredits2.SetSecureIdent(abyPublicKey,PublicKeyLen); //now verify this signature - if it's true everything is fine return VerifyIdent(&newcredits2,pachSignature,sigsize,0,0); } #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/MuleTextCtrl.cpp0000644000175000017500000001014712050266603021422 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "MuleTextCtrl.h" #include #include #include #include /** * These are the IDs used to identify the different menu-items. * * Please note that I make use of predefined wxIDs for the first two, but not * for Paste. This is because wxMenu poses some restrictions on what can be * done with items using those IDs, and by default, Paste is enabled even if * there's nothing to paste! */ enum CMTC_Events { //! Cut text, uses provided ID CMTCE_Cut = wxID_CUT, //! Copy text, uses privided ID CMTCE_Copy = wxID_COPY, //! Paste text, uses custom ID CMTCE_Paste = wxID_HIGHEST + 666, // Random satanic ID //! Clear text, uses custom ID CMTCE_Clear, //! Select All text, uses custom ID CMTCE_SelAll }; BEGIN_EVENT_TABLE(CMuleTextCtrl, wxTextCtrl) #ifndef __WXGTK__ EVT_RIGHT_DOWN (CMuleTextCtrl::OnRightDown) EVT_MENU (CMTCE_Paste, CMuleTextCtrl::OnPaste) EVT_MENU (CMTCE_Clear, CMuleTextCtrl::OnClear) EVT_MENU (CMTCE_SelAll, CMuleTextCtrl::OnSelAll) #endif END_EVENT_TABLE() CMuleTextCtrl::CMuleTextCtrl(wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) : wxTextCtrl( parent, id, value, pos, size, style, validator, name) { } void CMuleTextCtrl::OnRightDown( wxMouseEvent& evt ) { // If this control doesn't have focus, then set it if ( FindFocus() != this ) SetFocus(); wxMenu popup_menu; popup_menu.Append( CMTCE_Cut, _("Cut") ); popup_menu.Append( CMTCE_Copy, _("Copy") ); popup_menu.Append( CMTCE_Paste, _("Paste") ); popup_menu.Append( CMTCE_Clear, _("Clear") ); popup_menu.AppendSeparator(); popup_menu.Append( CMTCE_SelAll, _("Select All") ); // wxMenu will automatically enable/disable the Cut and Copy items, // however, were are a little more pricky about the Paste item than they // are, so we enable/disable it on our own, depending on whenever or not // there's actually something to paste bool canpaste = false; if ( CanPaste() ) { if ( wxTheClipboard->Open() ) { if ( wxTheClipboard->IsSupported( wxDF_TEXT ) ) { wxTextDataObject data; wxTheClipboard->GetData( data ); canpaste = (data.GetTextLength() > 0); } wxTheClipboard->Close(); } } popup_menu.Enable( CMTCE_Paste, canpaste ); popup_menu.Enable( CMTCE_Clear, IsEditable() && !GetValue().IsEmpty() ); PopupMenu( &popup_menu, evt.GetX(), evt.GetY() ); } void CMuleTextCtrl::OnPaste( wxCommandEvent& WXUNUSED(evt) ) { Paste(); } void CMuleTextCtrl::OnSelAll( wxCommandEvent& WXUNUSED(evt) ) { // Move the pointer to the front SetInsertionPoint( 0 ); // Selects everything SetSelection( -1, -1 ); } void CMuleTextCtrl::OnClear( wxCommandEvent& WXUNUSED(evt) ) { Clear(); } #ifdef __WXMAC__ //#warning Remove this when wxMAC has been fixed. // https://sourceforge.net/tracker/?func=detail&atid=109863&aid=1189859&group_id=9863 void CMuleTextCtrl::Clear() { if (IsMultiLine()) { wxFont font = GetFont(); wxTextCtrl::Clear(); SetFont(font); } else { wxTextCtrl::Clear(); } } #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/EncryptedStreamSocket.h0000644000175000017500000001125212050266603022753 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // /* This class supports obfuscation and encryption for a *Mule tcp connection. Right now only basic obfusication is supported, but this can be expanded, as their is a dedicated handshake to negotiate the encryption method used. Please note, even if obfuscation uses encryption methods, it does not fulfill cryptographic standards since it doesn't use secret (and for rc4 important: unique) keys */ #ifndef __ENCRYPTEDSTREAMSOCKET_H__ #define __ENCRYPTEDSTREAMSOCKET_H__ #include #include // cryptoPP used for DH integer calculations #include "CryptoPP_Inc.h" // Needed for Crypto functions #include "Proxy.h" #include "Types.h" #include "RC4Encrypt.h" #define ERR_WRONGHEADER 0x01 #define ERR_TOOBIG 0x02 #define ERR_ENCRYPTION 0x03 #define ERR_ENCRYPTION_NOTALLOWED 0x04 enum EStreamCryptState { ECS_NONE = 0, // Disabled or not available ECS_UNKNOWN, // Incoming connection, will test the first incoming data for encrypted protocol ECS_PENDING, // Outgoing connection, will start sending encryption protocol ECS_PENDING_SERVER, // Outgoing serverconnection, will start sending encryption protocol ECS_NEGOTIATING, // Encryption supported, handshake still uncompleted ECS_ENCRYPTING // Encryption enabled }; enum ENegotiatingState { ONS_NONE, ONS_BASIC_CLIENTA_RANDOMPART, ONS_BASIC_CLIENTA_MAGICVALUE, ONS_BASIC_CLIENTA_METHODTAGSPADLEN, ONS_BASIC_CLIENTA_PADDING, ONS_BASIC_CLIENTB_MAGICVALUE, ONS_BASIC_CLIENTB_METHODTAGSPADLEN, ONS_BASIC_CLIENTB_PADDING, ONS_BASIC_SERVER_DHANSWER, ONS_BASIC_SERVER_MAGICVALUE, ONS_BASIC_SERVER_METHODTAGSPADLEN, ONS_BASIC_SERVER_PADDING, ONS_BASIC_SERVER_DELAYEDSENDING, ONS_COMPLETE }; enum EEncryptionMethods { ENM_OBFUSCATION = 0x00 }; class CEncryptedStreamSocket : public CSocketClientProxy { public: CEncryptedStreamSocket(wxSocketFlags flags = wxSOCKET_NONE, const CProxyData *proxyData = NULL); virtual ~CEncryptedStreamSocket(); void SetConnectionEncryption(bool bEnabled, const uint8_t *pTargetClientHash, bool bServerConnection); //! Indicates how many bytes were received including obfuscation, //! so that the parent knows if the receive limit was reached uint32_t GetRealReceivedBytes() const { return m_nObfusicationBytesReceived; } bool IsObfusicating() const { return m_StreamCryptState == ECS_ENCRYPTING && m_EncryptionMethod == ENM_OBFUSCATION; } bool IsServerCryptEnabledConnection() const { return m_bServerCrypt; } uint8_t m_dbgbyEncryptionSupported; uint8_t m_dbgbyEncryptionRequested; uint8_t m_dbgbyEncryptionMethodSet; protected: int Write(const void* lpBuf, uint32_t nBufLen); int Read(void* lpBuf, uint32_t nBufLen); virtual void OnError(int /*nErrorCode*/) {}; virtual void OnSend(int nErrorCode); // ADUNANZA BEGIN // back #if 0 wxString DbgGetIPString(); #endif // ADUNANZA END void CryptPrepareSendData(uint8_t* pBuffer, uint32_t nLen); bool IsEncryptionLayerReady(); uint8_t GetSemiRandomNotProtocolMarker() const; uint32_t m_nObfusicationBytesReceived; EStreamCryptState m_StreamCryptState; EEncryptionMethods m_EncryptionMethod; bool m_bFullReceive; bool m_bServerCrypt; private: int Negotiate(const uint8_t* pBuffer, uint32_t nLen); void StartNegotiation(bool bOutgoing); int SendNegotiatingData(const void *lpBuf, uint32_t nBufLen, uint32_t nStartCryptFromByte = 0, bool bDelaySend = false); ENegotiatingState m_NegotiatingState; CRC4EncryptableBuffer m_pfiReceiveBuffer; uint32_t m_nReceiveBytesWanted; CRC4EncryptableBuffer m_pfiSendBuffer; uint32_t m_nRandomKeyPart; CryptoPP::Integer m_cryptDHA; }; #endif // __ENCRYPTEDSTREAMSOCKET_H__ amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ChatWnd.cpp0000644000175000017500000001667412050266603020371 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include // IDs for the chat-popup menu #include #include "ChatWnd.h" // Interface declarations #include "amule.h" // Needed for theApp #include "amuleDlg.h" // Needed for CamuleDlg #include "ClientList.h" // Needed for CClientList #include "ClientRef.h" // Needed for CClientRef #include "FriendListCtrl.h" // Needed for CFriendListCtrl #include "FriendList.h" // Needed for CFriendList #include "Friend.h" // Needed for CFriend #include "ChatSelector.h" // Needed for CChatSelector #include "muuli_wdr.h" // Needed for messagePage #include "OtherFunctions.h" BEGIN_EVENT_TABLE(CChatWnd, wxPanel) EVT_RIGHT_DOWN(CChatWnd::OnNMRclickChatTab) EVT_MENU(MP_CLOSE_TAB, CChatWnd::OnPopupClose) EVT_MENU(MP_CLOSE_ALL_TABS, CChatWnd::OnPopupCloseAll) EVT_MENU(MP_CLOSE_OTHER_TABS, CChatWnd::OnPopupCloseOthers) EVT_MENU(MP_ADDFRIEND, CChatWnd::OnAddFriend ) EVT_TEXT_ENTER(IDC_CMESSAGE, CChatWnd::OnBnClickedCsend) EVT_BUTTON(IDC_CSEND, CChatWnd::OnBnClickedCsend) EVT_BUTTON(IDC_CCLOSE, CChatWnd::OnBnClickedCclose) EVT_MULENOTEBOOK_ALL_PAGES_CLOSED(IDC_CHATSELECTOR, CChatWnd::OnAllPagesClosed) END_EVENT_TABLE() CChatWnd::CChatWnd(wxWindow* pParent) : wxPanel(pParent, -1) { wxSizer* content = messagePage(this, true); content->Show(this, true); chatselector = CastChild( IDC_CHATSELECTOR, CChatSelector ); // We want to use our own popup menu chatselector->SetPopupHandler(this); m_menu = NULL; friendlistctrl = CastChild( ID_FRIENDLIST, CFriendListCtrl ); } void CChatWnd::StartSession(CFriend* friend_client, bool setfocus) { if ( !friend_client->GetName().IsEmpty() ) { if (setfocus) { theApp->amuledlg->SetActiveDialog(CamuleDlg::DT_CHAT_WND, this); } chatselector->StartSession(GUI_ID(friend_client->GetIP(), friend_client->GetPort()), friend_client->GetName(), true); } // Check to enable the window controls if needed CheckNewButtonsState(); } void CChatWnd::OnNMRclickChatTab(wxMouseEvent& evt) { // Only handle events from the chat-notebook if (evt.GetEventObject() != (wxObject*)chatselector) return; if (chatselector->GetSelection() == -1) { return; } // Avoid opening another menu when it's already open if (m_menu == NULL) { m_menu = new wxMenu(_("Chat")); m_menu->Append(MP_CLOSE_TAB, wxString(_("Close tab"))); m_menu->Append(MP_CLOSE_ALL_TABS, wxString(_("Close all tabs"))); m_menu->Append(MP_CLOSE_OTHER_TABS, wxString(_("Close other tabs"))); m_menu->AppendSeparator(); wxMenuItem * addFriend = m_menu->Append(MP_ADDFRIEND, _("Add to Friends")); // Disable this client if it is already a friend CClientRef client; if (chatselector->GetCurrentClient(client) && client.IsFriend()) { addFriend->Enable(false); } PopupMenu(m_menu, evt.GetPosition()); delete m_menu; m_menu = NULL; } } void CChatWnd::OnPopupClose(wxCommandEvent& WXUNUSED(evt)) { chatselector->DeletePage(chatselector->GetSelection()); } void CChatWnd::OnPopupCloseAll(wxCommandEvent& WXUNUSED(evt)) { chatselector->DeleteAllPages(); } void CChatWnd::OnPopupCloseOthers(wxCommandEvent& WXUNUSED(evt)) { wxNotebookPage* current = chatselector->GetPage(chatselector->GetSelection()); for (int i = chatselector->GetPageCount() - 1; i >= 0; i--) { if (current != chatselector->GetPage(i)) chatselector->DeletePage( i ); } } void CChatWnd::OnAddFriend(wxCommandEvent& WXUNUSED(evt)) { // Get the client that the session is open to CClientRef client; // Add the client as friend unless it's already a friend if (chatselector->GetCurrentClient(client) && !client.IsFriend()) { theApp->friendlist->AddFriend(client); } } void CChatWnd::OnBnClickedCsend(wxCommandEvent& WXUNUSED(evt)) { wxString message = CastChild(IDC_CMESSAGE, wxTextCtrl)->GetValue(); SendMessage(message); } void CChatWnd::OnBnClickedCclose(wxCommandEvent& WXUNUSED(evt)) { chatselector->EndSession(); } void CChatWnd::OnAllPagesClosed(wxNotebookEvent& WXUNUSED(evt)) { CastChild(IDC_CMESSAGE, wxTextCtrl)->Clear(); // Check to disable the window controls CheckNewButtonsState(); } void CChatWnd::UpdateFriend(CFriend* toupdate) { if (toupdate->GetLinkedClient().IsLinked()) { chatselector->RefreshFriend(GUI_ID(toupdate->GetIP(), toupdate->GetPort()), toupdate->GetName()); } else { // drop Chat session chatselector->EndSession(GUI_ID(toupdate->GetIP(), toupdate->GetPort())); } friendlistctrl->UpdateFriend(toupdate); } void CChatWnd::RemoveFriend(CFriend* todel) { chatselector->EndSession(GUI_ID(todel->GetIP(), todel->GetPort())); friendlistctrl->RemoveFriend(todel); } void CChatWnd::ProcessMessage(uint64 sender, const wxString& message) { if ( !theApp->amuledlg->IsDialogVisible(CamuleDlg::DT_CHAT_WND) ) { theApp->amuledlg->SetMessageBlink(true); } if (chatselector->ProcessMessage(sender, message)) { // Check to enable the window controls if needed CheckNewButtonsState(); } } void CChatWnd::ConnectionResult(bool success, const wxString& message, uint64 id) { chatselector->ConnectionResult(success, message, id); } void CChatWnd::SendMessage(const wxString& message, const wxString& client_name, uint64 to_id) { if (chatselector->SendMessage( message, client_name, to_id )) { CastChild(IDC_CMESSAGE, wxTextCtrl)->Clear(); } // Check to enable the window controls if needed CheckNewButtonsState(); CastChild(IDC_CMESSAGE, wxTextCtrl)->SetFocus(); } void CChatWnd::CheckNewButtonsState() { switch (chatselector->GetPageCount()) { case 0: GetParent()->FindWindow(IDC_CSEND)->Enable(false); GetParent()->FindWindow(IDC_CCLOSE)->Enable(false); GetParent()->FindWindow(IDC_CMESSAGE)->Enable(false); break; case 1: GetParent()->FindWindow(IDC_CSEND)->Enable(true); GetParent()->FindWindow(IDC_CCLOSE)->Enable(true); GetParent()->FindWindow(IDC_CMESSAGE)->Enable(true); break; default: // Nothing to be done here. Keep current state, which should be enabled. wxASSERT(GetParent()->FindWindow(IDC_CSEND)->IsEnabled()); wxASSERT(GetParent()->FindWindow(IDC_CCLOSE)->IsEnabled()); wxASSERT(GetParent()->FindWindow(IDC_CMESSAGE)->IsEnabled()); break; } } bool CChatWnd::IsIdValid(uint64 id) { return chatselector->GetTabByClientID(id) >= 0; } void CChatWnd::ShowCaptchaResult(uint64 id, bool ok) { chatselector->ShowCaptchaResult(id, ok); } void CChatWnd::EndSession(uint64 id) { chatselector->EndSession(id); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/CaptchaDialog.cpp0000644000175000017500000000510112050266603021503 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "CaptchaDialog.h" // Interface declarations #include "muuli_wdr.h" // Needed for ID_CLOSEWND #include "GuiEvents.h" BEGIN_EVENT_TABLE(CCaptchaDialog,wxDialog) EVT_BUTTON(wxID_OK, CCaptchaDialog::OnBnClose) END_EVENT_TABLE() CCaptchaDialog::CCaptchaDialog( wxWindow *parent, const wxImage& captchaImage, uint64 id) : wxDialog( parent, -1, _("Enter Captcha"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) { m_captchaBitmap = new wxBitmap(captchaImage); m_id = id; wxSizer* content = captchaDlg(this); OnInitDialog(); content->SetSizeHints(this); content->Show(this, true); m_TextCtrl->SetFocus(); } CCaptchaDialog::~CCaptchaDialog() { delete m_captchaBitmap; } void CCaptchaDialog::OnBnClose(wxCommandEvent& WXUNUSED(evt)) { Notify_ChatSendCaptcha(m_TextCtrl->GetLineText(0), m_id); Destroy(); } wxSizer * CCaptchaDialog::captchaDlg( wxWindow *parent ) { wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL ); wxStaticBitmap *item1 = new wxStaticBitmap( parent, -1, *m_captchaBitmap, wxDefaultPosition, wxSize(160,60) ); item0->Add( item1, 0, wxALIGN_CENTER|wxALL, 5 ); m_TextCtrl = new wxTextCtrl( parent, -1, wxEmptyString, wxDefaultPosition, wxSize(80,20)); item0->Add( m_TextCtrl, 0, wxALIGN_CENTER|wxALL, 5 ); wxButton *item3 = new wxButton( parent, wxID_OK ); item3->SetDefault(); item0->Add( item3, 0, wxALIGN_CENTER|wxALL, 5 ); parent->SetSizer( item0 ); item0->SetSizeHints( parent ); return item0; } bool CCaptchaDialog::OnInitDialog() { Layout(); return true; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/0000755000175000017500000000000012053222402017240 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/0000755000175000017500000000000012053222403017630 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/java/0000755000175000017500000000000012053222102020545 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/java/ECCodes.java0000644000175000017500000007731312050266603022703 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // Purpose: // EC codes and type definition. public interface ECCodes { public final static short EC_CURRENT_PROTOCOL_VERSION = 0x0204; public final static int EC_FLAG_ZLIB = 0x00000001; public final static int EC_FLAG_UTF8_NUMBERS = 0x00000002; public final static int EC_FLAG_UNKNOWN_MASK = 0xff7f7f08; public final static byte EC_OP_NOOP = 0x01; public final static byte EC_OP_AUTH_REQ = 0x02; public final static byte EC_OP_AUTH_FAIL = 0x03; public final static byte EC_OP_AUTH_OK = 0x04; public final static byte EC_OP_FAILED = 0x05; public final static byte EC_OP_STRINGS = 0x06; public final static byte EC_OP_MISC_DATA = 0x07; public final static byte EC_OP_SHUTDOWN = 0x08; public final static byte EC_OP_ADD_LINK = 0x09; public final static byte EC_OP_STAT_REQ = 0x0A; public final static byte EC_OP_GET_CONNSTATE = 0x0B; public final static byte EC_OP_STATS = 0x0C; public final static byte EC_OP_GET_DLOAD_QUEUE = 0x0D; public final static byte EC_OP_GET_ULOAD_QUEUE = 0x0E; public final static byte EC_OP_GET_SHARED_FILES = 0x10; public final static byte EC_OP_SHARED_SET_PRIO = 0x11; public final static byte EC_OP_PARTFILE_REMOVE_NO_NEEDED = 0x12; public final static byte EC_OP_PARTFILE_REMOVE_FULL_QUEUE = 0x13; public final static byte EC_OP_PARTFILE_REMOVE_HIGH_QUEUE = 0x14; public final static byte EC_OP_PARTFILE_UNUSED = 0x15; public final static byte EC_OP_PARTFILE_SWAP_A4AF_THIS = 0x16; public final static byte EC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO = 0x17; public final static byte EC_OP_PARTFILE_SWAP_A4AF_OTHERS = 0x18; public final static byte EC_OP_PARTFILE_PAUSE = 0x19; public final static byte EC_OP_PARTFILE_RESUME = 0x1A; public final static byte EC_OP_PARTFILE_STOP = 0x1B; public final static byte EC_OP_PARTFILE_PRIO_SET = 0x1C; public final static byte EC_OP_PARTFILE_DELETE = 0x1D; public final static byte EC_OP_PARTFILE_SET_CAT = 0x1E; public final static byte EC_OP_DLOAD_QUEUE = 0x1F; public final static byte EC_OP_ULOAD_QUEUE = 0x20; public final static byte EC_OP_SHARED_FILES = 0x22; public final static byte EC_OP_SHAREDFILES_RELOAD = 0x23; public final static byte EC_OP_RENAME_FILE = 0x25; public final static byte EC_OP_SEARCH_START = 0x26; public final static byte EC_OP_SEARCH_STOP = 0x27; public final static byte EC_OP_SEARCH_RESULTS = 0x28; public final static byte EC_OP_SEARCH_PROGRESS = 0x29; public final static byte EC_OP_DOWNLOAD_SEARCH_RESULT = 0x2A; public final static byte EC_OP_IPFILTER_RELOAD = 0x2B; public final static byte EC_OP_GET_SERVER_LIST = 0x2C; public final static byte EC_OP_SERVER_LIST = 0x2D; public final static byte EC_OP_SERVER_DISCONNECT = 0x2E; public final static byte EC_OP_SERVER_CONNECT = 0x2F; public final static byte EC_OP_SERVER_REMOVE = 0x30; public final static byte EC_OP_SERVER_ADD = 0x31; public final static byte EC_OP_SERVER_UPDATE_FROM_URL = 0x32; public final static byte EC_OP_ADDLOGLINE = 0x33; public final static byte EC_OP_ADDDEBUGLOGLINE = 0x34; public final static byte EC_OP_GET_LOG = 0x35; public final static byte EC_OP_GET_DEBUGLOG = 0x36; public final static byte EC_OP_GET_SERVERINFO = 0x37; public final static byte EC_OP_LOG = 0x38; public final static byte EC_OP_DEBUGLOG = 0x39; public final static byte EC_OP_SERVERINFO = 0x3A; public final static byte EC_OP_RESET_LOG = 0x3B; public final static byte EC_OP_RESET_DEBUGLOG = 0x3C; public final static byte EC_OP_CLEAR_SERVERINFO = 0x3D; public final static byte EC_OP_GET_LAST_LOG_ENTRY = 0x3E; public final static byte EC_OP_GET_PREFERENCES = 0x3F; public final static byte EC_OP_SET_PREFERENCES = 0x40; public final static byte EC_OP_CREATE_CATEGORY = 0x41; public final static byte EC_OP_UPDATE_CATEGORY = 0x42; public final static byte EC_OP_DELETE_CATEGORY = 0x43; public final static byte EC_OP_GET_STATSGRAPHS = 0x44; public final static byte EC_OP_STATSGRAPHS = 0x45; public final static byte EC_OP_GET_STATSTREE = 0x46; public final static byte EC_OP_STATSTREE = 0x47; public final static byte EC_OP_KAD_START = 0x48; public final static byte EC_OP_KAD_STOP = 0x49; public final static byte EC_OP_CONNECT = 0x4A; public final static byte EC_OP_DISCONNECT = 0x4B; public final static byte EC_OP_KAD_UPDATE_FROM_URL = 0x4D; public final static byte EC_OP_KAD_BOOTSTRAP_FROM_IP = 0x4E; public final static byte EC_OP_AUTH_SALT = 0x4F; public final static byte EC_OP_AUTH_PASSWD = 0x50; public final static byte EC_OP_IPFILTER_UPDATE = 0x51; public final static byte EC_OP_GET_UPDATE = 0x52; public final static byte EC_OP_CLEAR_COMPLETED = 0x53; public final static byte EC_OP_CLIENT_SWAP_TO_ANOTHER_FILE = 0x54; public final static byte EC_OP_SHARED_FILE_SET_COMMENT = 0x55; public final static byte EC_OP_SERVER_SET_STATIC_PRIO = 0x56; public final static byte EC_OP_FRIEND = 0x57; public final static short EC_TAG_STRING = 0x0000; public final static short EC_TAG_PASSWD_HASH = 0x0001; public final static short EC_TAG_PROTOCOL_VERSION = 0x0002; public final static short EC_TAG_VERSION_ID = 0x0003; public final static short EC_TAG_DETAIL_LEVEL = 0x0004; public final static short EC_TAG_CONNSTATE = 0x0005; public final static short EC_TAG_ED2K_ID = 0x0006; public final static short EC_TAG_LOG_TO_STATUS = 0x0007; public final static short EC_TAG_BOOTSTRAP_IP = 0x0008; public final static short EC_TAG_BOOTSTRAP_PORT = 0x0009; public final static short EC_TAG_CLIENT_ID = 0x000A; public final static short EC_TAG_PASSWD_SALT = 0x000B; public final static short EC_TAG_CAN_ZLIB = 0x000C; public final static short EC_TAG_CAN_UTF8_NUMBERS = 0x000D; public final static short EC_TAG_CAN_NOTIFY = 0x000E; public final static short EC_TAG_ECID = 0x000F; public final static short EC_TAG_CLIENT_NAME = 0x0100; public final static short EC_TAG_CLIENT_VERSION = 0x0101; public final static short EC_TAG_CLIENT_MOD = 0x0102; public final static short EC_TAG_STATS_UL_SPEED = 0x0200; public final static short EC_TAG_STATS_DL_SPEED = 0x0201; public final static short EC_TAG_STATS_UL_SPEED_LIMIT = 0x0202; public final static short EC_TAG_STATS_DL_SPEED_LIMIT = 0x0203; public final static short EC_TAG_STATS_UP_OVERHEAD = 0x0204; public final static short EC_TAG_STATS_DOWN_OVERHEAD = 0x0205; public final static short EC_TAG_STATS_TOTAL_SRC_COUNT = 0x0206; public final static short EC_TAG_STATS_BANNED_COUNT = 0x0207; public final static short EC_TAG_STATS_UL_QUEUE_LEN = 0x0208; public final static short EC_TAG_STATS_ED2K_USERS = 0x0209; public final static short EC_TAG_STATS_KAD_USERS = 0x020A; public final static short EC_TAG_STATS_ED2K_FILES = 0x020B; public final static short EC_TAG_STATS_KAD_FILES = 0x020C; public final static short EC_TAG_STATS_LOGGER_MESSAGE = 0x020D; public final static short EC_TAG_STATS_KAD_FIREWALLED_UDP = 0x020E; public final static short EC_TAG_STATS_KAD_INDEXED_SOURCES = 0x020F; public final static short EC_TAG_STATS_KAD_INDEXED_KEYWORDS = 0x0210; public final static short EC_TAG_STATS_KAD_INDEXED_NOTES = 0x0211; public final static short EC_TAG_STATS_KAD_INDEXED_LOAD = 0x0212; public final static short EC_TAG_STATS_KAD_IP_ADRESS = 0x0213; public final static short EC_TAG_STATS_BUDDY_STATUS = 0x0214; public final static short EC_TAG_STATS_BUDDY_IP = 0x0215; public final static short EC_TAG_STATS_BUDDY_PORT = 0x0216; public final static short EC_TAG_STATS_KAD_IN_LAN_MODE = 0x0217; public final static short EC_TAG_STATS_TOTAL_SENT_BYTES = 0x0218; public final static short EC_TAG_STATS_TOTAL_RECEIVED_BYTES = 0x0219; public final static short EC_TAG_STATS_SHARED_FILE_COUNT = 0x021A; public final static short EC_TAG_STATS_KAD_NODES = 0x021B; public final static short EC_TAG_STATS_KADU_ACTIVE_NODES = 0x0280; public final static short EC_TAG_STATS_KADU_TOTAL_NODES = 0x0281; public final static short EC_TAG_STATS_ADU_KADU_UL_SPEED = 0x0282; public final static short EC_TAG_STATS_ADU_EXT_UL_SPEED = 0x0283; public final static short EC_TAG_STATS_ADU_KADU_DL_SPEED = 0x0284; public final static short EC_TAG_STATS_ADU_EXT_DL_SPEED = 0x0285; public final static short EC_TAG_PARTFILE = 0x0300; public final static short EC_TAG_PARTFILE_NAME = 0x0301; public final static short EC_TAG_PARTFILE_PARTMETID = 0x0302; public final static short EC_TAG_PARTFILE_SIZE_FULL = 0x0303; public final static short EC_TAG_PARTFILE_SIZE_XFER = 0x0304; public final static short EC_TAG_PARTFILE_SIZE_XFER_UP = 0x0305; public final static short EC_TAG_PARTFILE_SIZE_DONE = 0x0306; public final static short EC_TAG_PARTFILE_SPEED = 0x0307; public final static short EC_TAG_PARTFILE_STATUS = 0x0308; public final static short EC_TAG_PARTFILE_PRIO = 0x0309; public final static short EC_TAG_PARTFILE_SOURCE_COUNT = 0x030A; public final static short EC_TAG_PARTFILE_SOURCE_COUNT_A4AF = 0x030B; public final static short EC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT = 0x030C; public final static short EC_TAG_PARTFILE_SOURCE_COUNT_XFER = 0x030D; public final static short EC_TAG_PARTFILE_ED2K_LINK = 0x030E; public final static short EC_TAG_PARTFILE_CAT = 0x030F; public final static short EC_TAG_PARTFILE_LAST_RECV = 0x0310; public final static short EC_TAG_PARTFILE_LAST_SEEN_COMP = 0x0311; public final static short EC_TAG_PARTFILE_PART_STATUS = 0x0312; public final static short EC_TAG_PARTFILE_GAP_STATUS = 0x0313; public final static short EC_TAG_PARTFILE_REQ_STATUS = 0x0314; public final static short EC_TAG_PARTFILE_SOURCE_NAMES = 0x0315; public final static short EC_TAG_PARTFILE_COMMENTS = 0x0316; public final static short EC_TAG_PARTFILE_STOPPED = 0x0317; public final static short EC_TAG_PARTFILE_DOWNLOAD_ACTIVE = 0x0318; public final static short EC_TAG_PARTFILE_LOST_CORRUPTION = 0x0319; public final static short EC_TAG_PARTFILE_GAINED_COMPRESSION = 0x031A; public final static short EC_TAG_PARTFILE_SAVED_ICH = 0x031B; public final static short EC_TAG_PARTFILE_SOURCE_NAMES_COUNTS = 0x031C; public final static short EC_TAG_PARTFILE_AVAILABLE_PARTS = 0x031D; public final static short EC_TAG_PARTFILE_HASH = 0x031E; public final static short EC_TAG_PARTFILE_SHARED = 0x031F; public final static short EC_TAG_PARTFILE_HASHED_PART_COUNT = 0x0320; public final static short EC_TAG_PARTFILE_A4AFAUTO = 0x0321; public final static short EC_TAG_PARTFILE_A4AF_SOURCES = 0x0322; public final static short EC_TAG_PARTFILE_ADU_SOURCE_COUNT = 0x0380; public final static short EC_TAG_KNOWNFILE = 0x0400; public final static short EC_TAG_KNOWNFILE_XFERRED = 0x0401; public final static short EC_TAG_KNOWNFILE_XFERRED_ALL = 0x0402; public final static short EC_TAG_KNOWNFILE_REQ_COUNT = 0x0403; public final static short EC_TAG_KNOWNFILE_REQ_COUNT_ALL = 0x0404; public final static short EC_TAG_KNOWNFILE_ACCEPT_COUNT = 0x0405; public final static short EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL = 0x0406; public final static short EC_TAG_KNOWNFILE_AICH_MASTERHASH = 0x0407; public final static short EC_TAG_KNOWNFILE_FILENAME = 0x0408; public final static short EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW = 0x0409; public final static short EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH = 0x040A; public final static short EC_TAG_KNOWNFILE_PRIO = 0x040B; public final static short EC_TAG_KNOWNFILE_ON_QUEUE = 0x040C; public final static short EC_TAG_KNOWNFILE_COMPLETE_SOURCES = 0x040D; public final static short EC_TAG_KNOWNFILE_COMMENT = 0x040E; public final static short EC_TAG_KNOWNFILE_RATING = 0x040F; public final static short EC_TAG_SERVER = 0x0500; public final static short EC_TAG_SERVER_NAME = 0x0501; public final static short EC_TAG_SERVER_DESC = 0x0502; public final static short EC_TAG_SERVER_ADDRESS = 0x0503; public final static short EC_TAG_SERVER_PING = 0x0504; public final static short EC_TAG_SERVER_USERS = 0x0505; public final static short EC_TAG_SERVER_USERS_MAX = 0x0506; public final static short EC_TAG_SERVER_FILES = 0x0507; public final static short EC_TAG_SERVER_PRIO = 0x0508; public final static short EC_TAG_SERVER_FAILED = 0x0509; public final static short EC_TAG_SERVER_STATIC = 0x050A; public final static short EC_TAG_SERVER_VERSION = 0x050B; public final static short EC_TAG_SERVER_IP = 0x050C; public final static short EC_TAG_SERVER_PORT = 0x050D; public final static short EC_TAG_CLIENT = 0x0600; public final static short EC_TAG_CLIENT_SOFTWARE = 0x0601; public final static short EC_TAG_CLIENT_SCORE = 0x0602; public final static short EC_TAG_CLIENT_HASH = 0x0603; public final static short EC_TAG_CLIENT_FRIEND_SLOT = 0x0604; public final static short EC_TAG_CLIENT_WAIT_TIME = 0x0605; public final static short EC_TAG_CLIENT_XFER_TIME = 0x0606; public final static short EC_TAG_CLIENT_QUEUE_TIME = 0x0607; public final static short EC_TAG_CLIENT_LAST_TIME = 0x0608; public final static short EC_TAG_CLIENT_UPLOAD_SESSION = 0x0609; public final static short EC_TAG_CLIENT_UPLOAD_TOTAL = 0x060A; public final static short EC_TAG_CLIENT_DOWNLOAD_TOTAL = 0x060B; public final static short EC_TAG_CLIENT_DOWNLOAD_STATE = 0x060C; public final static short EC_TAG_CLIENT_UP_SPEED = 0x060D; public final static short EC_TAG_CLIENT_DOWN_SPEED = 0x060E; public final static short EC_TAG_CLIENT_FROM = 0x060F; public final static short EC_TAG_CLIENT_USER_IP = 0x0610; public final static short EC_TAG_CLIENT_USER_PORT = 0x0611; public final static short EC_TAG_CLIENT_SERVER_IP = 0x0612; public final static short EC_TAG_CLIENT_SERVER_PORT = 0x0613; public final static short EC_TAG_CLIENT_SERVER_NAME = 0x0614; public final static short EC_TAG_CLIENT_SOFT_VER_STR = 0x0615; public final static short EC_TAG_CLIENT_WAITING_POSITION = 0x0616; public final static short EC_TAG_CLIENT_IDENT_STATE = 0x0617; public final static short EC_TAG_CLIENT_OBFUSCATION_STATUS = 0x0618; public final static short EC_TAG_CLIENT_CURRENTLYUNUSED1 = 0x0619; public final static short EC_TAG_CLIENT_REMOTE_QUEUE_RANK = 0x061A; public final static short EC_TAG_CLIENT_DISABLE_VIEW_SHARED = 0x061B; public final static short EC_TAG_CLIENT_UPLOAD_STATE = 0x061C; public final static short EC_TAG_CLIENT_EXT_PROTOCOL = 0x061D; public final static short EC_TAG_CLIENT_USER_ID = 0x061E; public final static short EC_TAG_CLIENT_UPLOAD_FILE = 0x061F; public final static short EC_TAG_CLIENT_REQUEST_FILE = 0x0620; public final static short EC_TAG_CLIENT_A4AF_FILES = 0x0621; public final static short EC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK = 0x0622; public final static short EC_TAG_CLIENT_KAD_PORT = 0x0623; public final static short EC_TAG_CLIENT_PART_STATUS = 0x0624; public final static short EC_TAG_CLIENT_NEXT_REQUESTED_PART = 0x0625; public final static short EC_TAG_CLIENT_LAST_DOWNLOADING_PART = 0x0626; public final static short EC_TAG_CLIENT_REMOTE_FILENAME = 0x0627; public final static short EC_TAG_CLIENT_MOD_VERSION = 0x0628; public final static short EC_TAG_CLIENT_OS_INFO = 0x0629; public final static short EC_TAG_CLIENT_AVAILABLE_PARTS = 0x062A; public final static short EC_TAG_CLIENT_UPLOAD_PART_STATUS = 0x062B; public final static short EC_TAG_CLIENT_RECEIVEDTAGADUNANZA = 0x0680; public final static short EC_TAG_SEARCHFILE = 0x0700; public final static short EC_TAG_SEARCH_TYPE = 0x0701; public final static short EC_TAG_SEARCH_NAME = 0x0702; public final static short EC_TAG_SEARCH_MIN_SIZE = 0x0703; public final static short EC_TAG_SEARCH_MAX_SIZE = 0x0704; public final static short EC_TAG_SEARCH_FILE_TYPE = 0x0705; public final static short EC_TAG_SEARCH_EXTENSION = 0x0706; public final static short EC_TAG_SEARCH_AVAILABILITY = 0x0707; public final static short EC_TAG_SEARCH_STATUS = 0x0708; public final static short EC_TAG_SEARCH_PARENT = 0x0709; public final static short EC_TAG_FRIEND = 0x0800; public final static short EC_TAG_FRIEND_NAME = 0x0801; public final static short EC_TAG_FRIEND_HASH = 0x0802; public final static short EC_TAG_FRIEND_IP = 0x0803; public final static short EC_TAG_FRIEND_PORT = 0x0804; public final static short EC_TAG_FRIEND_CLIENT = 0x0805; public final static short EC_TAG_FRIEND_ADD = 0x0806; public final static short EC_TAG_FRIEND_REMOVE = 0x0807; public final static short EC_TAG_FRIEND_FRIENDSLOT = 0x0808; public final static short EC_TAG_FRIEND_SHARED = 0x0809; public final static short EC_TAG_SELECT_PREFS = 0x1000; public final static short EC_TAG_PREFS_CATEGORIES = 0x1100; public final static short EC_TAG_CATEGORY = 0x1101; public final static short EC_TAG_CATEGORY_TITLE = 0x1102; public final static short EC_TAG_CATEGORY_PATH = 0x1103; public final static short EC_TAG_CATEGORY_COMMENT = 0x1104; public final static short EC_TAG_CATEGORY_COLOR = 0x1105; public final static short EC_TAG_CATEGORY_PRIO = 0x1106; public final static short EC_TAG_PREFS_GENERAL = 0x1200; public final static short EC_TAG_USER_NICK = 0x1201; public final static short EC_TAG_USER_HASH = 0x1202; public final static short EC_TAG_USER_HOST = 0x1203; public final static short EC_TAG_GENERAL_CHECK_NEW_VERSION = 0x1204; public final static short EC_TAG_PREFS_CONNECTIONS = 0x1300; public final static short EC_TAG_CONN_DL_CAP = 0x1301; public final static short EC_TAG_CONN_UL_CAP = 0x1302; public final static short EC_TAG_CONN_MAX_DL = 0x1303; public final static short EC_TAG_CONN_MAX_UL = 0x1304; public final static short EC_TAG_CONN_SLOT_ALLOCATION = 0x1305; public final static short EC_TAG_CONN_TCP_PORT = 0x1306; public final static short EC_TAG_CONN_UDP_PORT = 0x1307; public final static short EC_TAG_CONN_UDP_DISABLE = 0x1308; public final static short EC_TAG_CONN_MAX_FILE_SOURCES = 0x1309; public final static short EC_TAG_CONN_MAX_CONN = 0x130A; public final static short EC_TAG_CONN_AUTOCONNECT = 0x130B; public final static short EC_TAG_CONN_RECONNECT = 0x130C; public final static short EC_TAG_NETWORK_ED2K = 0x130D; public final static short EC_TAG_NETWORK_KADEMLIA = 0x130E; public final static short EC_TAG_PREFS_MESSAGEFILTER = 0x1400; public final static short EC_TAG_MSGFILTER_ENABLED = 0x1401; public final static short EC_TAG_MSGFILTER_ALL = 0x1402; public final static short EC_TAG_MSGFILTER_FRIENDS = 0x1403; public final static short EC_TAG_MSGFILTER_SECURE = 0x1404; public final static short EC_TAG_MSGFILTER_BY_KEYWORD = 0x1405; public final static short EC_TAG_MSGFILTER_KEYWORDS = 0x1406; public final static short EC_TAG_PREFS_REMOTECTRL = 0x1500; public final static short EC_TAG_WEBSERVER_AUTORUN = 0x1501; public final static short EC_TAG_WEBSERVER_PORT = 0x1502; public final static short EC_TAG_WEBSERVER_GUEST = 0x1503; public final static short EC_TAG_WEBSERVER_USEGZIP = 0x1504; public final static short EC_TAG_WEBSERVER_REFRESH = 0x1505; public final static short EC_TAG_WEBSERVER_TEMPLATE = 0x1506; public final static short EC_TAG_PREFS_ONLINESIG = 0x1600; public final static short EC_TAG_ONLINESIG_ENABLED = 0x1601; public final static short EC_TAG_PREFS_SERVERS = 0x1700; public final static short EC_TAG_SERVERS_REMOVE_DEAD = 0x1701; public final static short EC_TAG_SERVERS_DEAD_SERVER_RETRIES = 0x1702; public final static short EC_TAG_SERVERS_AUTO_UPDATE = 0x1703; public final static short EC_TAG_SERVERS_URL_LIST = 0x1704; public final static short EC_TAG_SERVERS_ADD_FROM_SERVER = 0x1705; public final static short EC_TAG_SERVERS_ADD_FROM_CLIENT = 0x1706; public final static short EC_TAG_SERVERS_USE_SCORE_SYSTEM = 0x1707; public final static short EC_TAG_SERVERS_SMART_ID_CHECK = 0x1708; public final static short EC_TAG_SERVERS_SAFE_SERVER_CONNECT = 0x1709; public final static short EC_TAG_SERVERS_AUTOCONN_STATIC_ONLY = 0x170A; public final static short EC_TAG_SERVERS_MANUAL_HIGH_PRIO = 0x170B; public final static short EC_TAG_SERVERS_UPDATE_URL = 0x170C; public final static short EC_TAG_PREFS_FILES = 0x1800; public final static short EC_TAG_FILES_ICH_ENABLED = 0x1801; public final static short EC_TAG_FILES_AICH_TRUST = 0x1802; public final static short EC_TAG_FILES_NEW_PAUSED = 0x1803; public final static short EC_TAG_FILES_NEW_AUTO_DL_PRIO = 0x1804; public final static short EC_TAG_FILES_PREVIEW_PRIO = 0x1805; public final static short EC_TAG_FILES_NEW_AUTO_UL_PRIO = 0x1806; public final static short EC_TAG_FILES_UL_FULL_CHUNKS = 0x1807; public final static short EC_TAG_FILES_START_NEXT_PAUSED = 0x1808; public final static short EC_TAG_FILES_RESUME_SAME_CAT = 0x1809; public final static short EC_TAG_FILES_SAVE_SOURCES = 0x180A; public final static short EC_TAG_FILES_EXTRACT_METADATA = 0x180B; public final static short EC_TAG_FILES_ALLOC_FULL_SIZE = 0x180C; public final static short EC_TAG_FILES_CHECK_FREE_SPACE = 0x180D; public final static short EC_TAG_FILES_MIN_FREE_SPACE = 0x180E; public final static short EC_TAG_PREFS_SRCDROP = 0x1900; public final static short EC_TAG_SRCDROP_NONEEDED = 0x1901; public final static short EC_TAG_SRCDROP_DROP_FQS = 0x1902; public final static short EC_TAG_SRCDROP_DROP_HQRS = 0x1903; public final static short EC_TAG_SRCDROP_HQRS_VALUE = 0x1904; public final static short EC_TAG_SRCDROP_AUTODROP_TIMER = 0x1905; public final static short EC_TAG_PREFS_DIRECTORIES = 0x1A00; public final static short EC_TAG_DIRECTORIES_INCOMING = 0x1A01; public final static short EC_TAG_DIRECTORIES_TEMP = 0x1A02; public final static short EC_TAG_DIRECTORIES_SHARED = 0x1A03; public final static short EC_TAG_DIRECTORIES_SHARE_HIDDEN = 0x1A04; public final static short EC_TAG_PREFS_STATISTICS = 0x1B00; public final static short EC_TAG_STATSGRAPH_WIDTH = 0x1B01; public final static short EC_TAG_STATSGRAPH_SCALE = 0x1B02; public final static short EC_TAG_STATSGRAPH_LAST = 0x1B03; public final static short EC_TAG_STATSGRAPH_DATA = 0x1B04; public final static short EC_TAG_STATTREE_CAPPING = 0x1B05; public final static short EC_TAG_STATTREE_NODE = 0x1B06; public final static short EC_TAG_STAT_NODE_VALUE = 0x1B07; public final static short EC_TAG_STAT_VALUE_TYPE = 0x1B08; public final static short EC_TAG_STATTREE_NODEID = 0x1B09; public final static short EC_TAG_PREFS_SECURITY = 0x1C00; public final static short EC_TAG_SECURITY_CAN_SEE_SHARES = 0x1C01; public final static short EC_TAG_IPFILTER_CLIENTS = 0x1C02; public final static short EC_TAG_IPFILTER_SERVERS = 0x1C03; public final static short EC_TAG_IPFILTER_AUTO_UPDATE = 0x1C04; public final static short EC_TAG_IPFILTER_UPDATE_URL = 0x1C05; public final static short EC_TAG_IPFILTER_LEVEL = 0x1C06; public final static short EC_TAG_IPFILTER_FILTER_LAN = 0x1C07; public final static short EC_TAG_SECURITY_USE_SECIDENT = 0x1C08; public final static short EC_TAG_SECURITY_OBFUSCATION_SUPPORTED = 0x1C09; public final static short EC_TAG_SECURITY_OBFUSCATION_REQUESTED = 0x1C0A; public final static short EC_TAG_SECURITY_OBFUSCATION_REQUIRED = 0x1C0B; public final static short EC_TAG_PREFS_CORETWEAKS = 0x1D00; public final static short EC_TAG_CORETW_MAX_CONN_PER_FIVE = 0x1D01; public final static short EC_TAG_CORETW_VERBOSE = 0x1D02; public final static short EC_TAG_CORETW_FILEBUFFER = 0x1D03; public final static short EC_TAG_CORETW_UL_QUEUE = 0x1D04; public final static short EC_TAG_CORETW_SRV_KEEPALIVE_TIMEOUT = 0x1D05; public final static short EC_TAG_PREFS_KADEMLIA = 0x1E00; public final static short EC_TAG_KADEMLIA_UPDATE_URL = 0x1E01; public final static byte EC_DETAIL_CMD = 0x00; public final static byte EC_DETAIL_WEB = 0x01; public final static byte EC_DETAIL_FULL = 0x02; public final static byte EC_DETAIL_UPDATE = 0x03; public final static byte EC_DETAIL_INC_UPDATE = 0x04; public final static byte EC_SEARCH_LOCAL = 0x00; public final static byte EC_SEARCH_GLOBAL = 0x01; public final static byte EC_SEARCH_KAD = 0x02; public final static byte EC_SEARCH_WEB = 0x03; public final static byte EC_VALUE_INTEGER = 0x00; public final static byte EC_VALUE_ISTRING = 0x01; public final static byte EC_VALUE_BYTES = 0x02; public final static byte EC_VALUE_ISHORT = 0x03; public final static byte EC_VALUE_TIME = 0x04; public final static byte EC_VALUE_SPEED = 0x05; public final static byte EC_VALUE_STRING = 0x06; public final static byte EC_VALUE_DOUBLE = 0x07; public final static int EC_PREFS_CATEGORIES = 0x00000001; public final static int EC_PREFS_GENERAL = 0x00000002; public final static int EC_PREFS_CONNECTIONS = 0x00000004; public final static int EC_PREFS_MESSAGEFILTER = 0x00000008; public final static int EC_PREFS_REMOTECONTROLS = 0x00000010; public final static int EC_PREFS_ONLINESIG = 0x00000020; public final static int EC_PREFS_SERVERS = 0x00000040; public final static int EC_PREFS_FILES = 0x00000080; public final static int EC_PREFS_SRCDROP = 0x00000100; public final static int EC_PREFS_DIRECTORIES = 0x00000200; public final static int EC_PREFS_STATISTICS = 0x00000400; public final static int EC_PREFS_SECURITY = 0x00000800; public final static int EC_PREFS_CORETWEAKS = 0x00001000; public final static int EC_PREFS_KADEMLIA = 0x00002000; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/java/ECTagTypes.java0000644000175000017500000000311312050266603023371 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // Purpose: // EC tag types for use on the ec library. public interface ECTagTypes { public final static byte EC_TAGTYPE_UNKNOWN = 0; public final static byte EC_TAGTYPE_CUSTOM = 1; public final static byte EC_TAGTYPE_UINT8 = 2; public final static byte EC_TAGTYPE_UINT16 = 3; public final static byte EC_TAGTYPE_UINT32 = 4; public final static byte EC_TAGTYPE_UINT64 = 5; public final static byte EC_TAGTYPE_STRING = 6; public final static byte EC_TAGTYPE_DOUBLE = 7; public final static byte EC_TAGTYPE_IPV4 = 8; public final static byte EC_TAGTYPE_HASH16 = 9; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/Makefile.in0000644000175000017500000005460012053222403021702 0ustar l3onl3on# Makefile.in generated by automake 1.11.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/automake/dist-hook.am subdir = src/libs/ec ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/GeoIP.m4 \ $(top_srcdir)/m4/build-tools.m4 $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/cryptopp.m4 $(top_srcdir)/m4/fallocate.m4 \ $(top_srcdir)/m4/gdlib.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/kde.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libpng.m4 $(top_srcdir)/m4/libupnp.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/plasmamule.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/qt.m4 $(top_srcdir)/m4/readline.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/wxwin.m4 \ $(top_srcdir)/m4/zlib.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = 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_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-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 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=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) 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@ ALCC_MANPAGES = @ALCC_MANPAGES@ ALC_MANPAGES = @ALC_MANPAGES@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AMULECMD_MANPAGES = @AMULECMD_MANPAGES@ AMULEWEB_DEFS = @AMULEWEB_DEFS@ AMULE_DAEMON_MANPAGES = @AMULE_DAEMON_MANPAGES@ AMULE_GUI_MANPAGES = @AMULE_GUI_MANPAGES@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_CPPFLAGS = @BFD_CPPFLAGS@ BFD_LIBS = @BFD_LIBS@ BUILD_CC = @BUILD_CC@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CAS_DEFS = @CAS_DEFS@ CAS_MANPAGES = @CAS_MANPAGES@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CRYPTOPP_CPPFLAGS = @CRYPTOPP_CPPFLAGS@ CRYPTOPP_LDFLAGS = @CRYPTOPP_LDFLAGS@ CRYPTOPP_LIBS = @CRYPTOPP_LIBS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEBUGFLAG = @DEBUGFLAG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ED2K_MANPAGES = @ED2K_MANPAGES@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDLIB_CFLAGS = @GDLIB_CFLAGS@ GDLIB_CONFIG_PATH = @GDLIB_CONFIG_PATH@ GDLIB_LDFLAGS = @GDLIB_LDFLAGS@ GDLIB_LIBS = @GDLIB_LIBS@ GENCAT = @GENCAT@ GEOIP_CPPFLAGS = @GEOIP_CPPFLAGS@ GEOIP_LDFLAGS = @GEOIP_LDFLAGS@ GEOIP_LIBS = @GEOIP_LIBS@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INCINTL = @INCINTL@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ KDE4_CONFIG = @KDE4_CONFIG@ KDE_APPLNK_PATH = @KDE_APPLNK_PATH@ KDE_HEADER_DIR = @KDE_HEADER_DIR@ KDE_ICON_PATH = @KDE_ICON_PATH@ KDE_MIME_PATH = @KDE_MIME_PATH@ KDE_MODULE_PATH = @KDE_MODULE_PATH@ KDE_SERVICE_PATH = @KDE_SERVICE_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ LIBPNG_CONFIG_PATH = @LIBPNG_CONFIG_PATH@ LIBPNG_LDFLAGS = @LIBPNG_LDFLAGS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBUPNP_CFLAGS = @LIBUPNP_CFLAGS@ LIBUPNP_CPPFLAGS = @LIBUPNP_CPPFLAGS@ LIBUPNP_LDFLAGS = @LIBUPNP_LDFLAGS@ LIBUPNP_LIBS = @LIBUPNP_LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONOLITHIC_MANPAGES = @MONOLITHIC_MANPAGES@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MULECFLAGS = @MULECFLAGS@ MULECPPFLAGS = @MULECPPFLAGS@ MULECXXFLAGS = @MULECXXFLAGS@ MULELDFLAGS = @MULELDFLAGS@ MULERCFLAGS = @MULERCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ QT_CORE_CXXFLAGS = @QT_CORE_CXXFLAGS@ QT_CORE_LIBS = @QT_CORE_LIBS@ QT_DBUS_LDFLAGS = @QT_DBUS_LDFLAGS@ QT_GUI_CXXFLAGS = @QT_GUI_CXXFLAGS@ QT_GUI_LIBS = @QT_GUI_LIBS@ QT_MOC = @QT_MOC@ RANLIB = @RANLIB@ RC = @RC@ RCFLAGS = @RCFLAGS@ READLINE_LIBS = @READLINE_LIBS@ RESOLV_LIB = @RESOLV_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SVNDATE = @SVNDATE@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBSERVER_MANPAGES = @WEBSERVER_MANPAGES@ WXBASE_CPPFLAGS = @WXBASE_CPPFLAGS@ WXBASE_LIBS = @WXBASE_LIBS@ WXCAS_MANPAGES = @WXCAS_MANPAGES@ WX_CFLAGS = @WX_CFLAGS@ WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ WX_CONFIG_PATH = @WX_CONFIG_PATH@ WX_CPPFLAGS = @WX_CPPFLAGS@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ WX_DEBUG = @WX_DEBUG@ WX_LIBS = @WX_LIBS@ WX_PORT = @WX_PORT@ WX_RESCOMP = @WX_RESCOMP@ WX_SHARED = @WX_SHARED@ WX_UNICODE = @WX_UNICODE@ WX_VERSION_FULL = @WX_VERSION_FULL@ WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ WX_VERSION_MINOR = @WX_VERSION_MINOR@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@ ZLIB_LDFLAGS = @ZLIB_LDFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_BUILD_CC = @ac_ct_BUILD_CC@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ 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@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = cpp # Sources MAINTAINERCLEANFILES = Makefile.in BUILT_SOURCES = ECGeneratedFiles ECGeneratedFilesSources = \ abstracts/ECTagTypes.abstract \ abstracts/ECCodes.abstract EXTRA_DIST = file_generator.pl EXTRA__DIST__SUBDIRS = abstracts java DISTCLEANFILES = $(BUILT_SOURCES) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/automake/dist-hook.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libs/ec/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/libs/ec/Makefile .PRECIOUS: 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/automake/dist-hook.am: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; 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" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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 CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive dist-hook distclean distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am ECGeneratedFiles: $(ECGeneratedFilesSources) $(srcdir)/file_generator.pl $(srcdir) $(ECGeneratedFilesSources); echo $(ECGeneratedFilesSources) > ECGeneratedFiles dist-hook: test -z "$(EXTRA__DIST__SUBDIRS)" || \ for d in $(EXTRA__DIST__SUBDIRS) ; do \ mkdir $(distdir)/$$d ; \ for f in `find $(srcdir)/$$d -name '.svn' -prune -o -printf "%P\n"` ; do \ if test -d $(srcdir)/$$d/$$f ; then \ mkdir $(distdir)/$$d/$$f ; \ else \ cp -p $(srcdir)/$$d/$$f $(distdir)/$$d/$$f ; \ fi ; \ done ; \ done clean: rm -f ECGeneratedFiles # 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: amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/generate.cmd0000644000175000017500000000015312050266603022115 0ustar l3onl3onperl file_generator.pl . abstracts\ECCodes.abstract perl file_generator.pl . abstracts\ECTagTypes.abstract amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/file_generator.pl0000755000175000017500000002321012050266603023162 0ustar l3onl3on#!/usr/bin/perl # ## This file is part of the aMule Project ## ## Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) ## Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) ## ## This program is free software; you can redistribute it and/or ## modify it under the terms of the GNU General Public License ## as published by the Free Software Foundation; either ## version 2 of the License, or (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # Gimme a break, it's my second perl app... (Kry) use File::Copy; use warnings; use strict; use POSIX; my $exit_with_help; if ($#ARGV < 1) { print "You must specify at least the folder and one abstract file.\n"; $exit_with_help = "true"; } if ($exit_with_help) { die "Usage: file_generator file.abstract [file2.abstract ...]\n"; } my $folder = $ARGV[0] . "/"; my @debugOut; my $numArgs = $#ARGV; print "Parsing $numArgs files\n"; foreach my $argnum (1 .. $#ARGV) { generate_files($folder, $ARGV[$argnum]); } sub generate_files { my $folder = $_[0]; my $input_file = $_[1]; @debugOut = (); open(INFO, $folder . $input_file) or die "Cannot open input file " . $input_file . " for reading: $!"; # Open the file my $line="no"; while ($line !~ /^\[Section Definition\]$/) { $line = ; if (!($line)) { die $input_file . " seems not to have a Section Definition\n"; } chop $line; } #We're at the start of the Section Definition. # Read the Definition Section. my $filename = ""; my $nameline = ; if ($nameline =~ /^FileName\s+(.+)$/) { $filename = $1; } else { die "Section Definition must start with FileName item."; } my $filecontent = ""; my $contentline = ; if ($contentline =~ /^FileContent\s+(.+)$/) { $filecontent = $1; } else { die "Section Definition must have a FileContent after the FileName item."; } #Skip the rest of the section, allow for extensions later. $line = ""; while ($line && ($line !~ /^\[\/Section\]$/)) { $line = ; } print "FileName: " . $filename . "\n"; print "FileContent: " . $filecontent . "\n"; #Open language output files open(CPPFILE," > " . $folder . "cpp/$filename" . ".h"); #Open language output files open(JAVAFILE," > " . $folder . "java/$filename" . ".java"); # Print license on top. write_license_header($folder, *CPPFILE, "// ", "", $filecontent); write_license_header($folder, *JAVAFILE, "// ", "", $filecontent); #Example for a language that needs start/end: #write_license_header($folder, *CFILE, "/* ", " */", $filecontent); #Add top guards for each language write_cpp_top_guard(*CPPFILE, $filename); # JAVA doesn't need guards, but needs file type declaration print JAVAFILE "public interface " . $filename . " {\n\n"; ##Add other language guards read_content(*INFO, *CPPFILE, *JAVAFILE); #Add bottom guards for each language write_cpp_bottom_guard(*CPPFILE, $filename); # JAVA doesn't need guards, but we have to close the interface print JAVAFILE "}\n"; ##Add other language guards # Close language files close(CPPFILE); close(JAVAFILE); print "All info parsed\n"; close(INFO); } ################ Generic Subroutines ##################### sub read_content { local (*INFO) = $_[0]; local (*CPPFILE) = $_[1]; local (*JAVAFILE) = $_[2]; my $stop = ""; while (!($stop)) { my $line="no"; #Skip till Content while (!(eof(INFO)) && $line !~ /^\[Section Content\]$/) { $line = ; chop $line; } if ($line =~ /^\[Section Content\]$/) { print "Reading content section...\n"; read_content_section(*INFO, *CPPFILE, *JAVAFILE); print CPPFILE "\n"; print JAVAFILE "\n"; } else { print "No more content sections\n"; $stop = "yes"; } } } sub read_content_section { local (*INFO) = $_[0]; local (*CPPOUTPUT) = $_[1]; local (*JAVAOUTPUT) = $_[2]; my $line = ; my $datatype = ""; if ($line =~ /^Type\s+(.+)$/) { $datatype = $1; print "\tDatatype: " . $datatype . "\n"; } else { die "Content section has a non-typed data stream\n"; } if ($datatype eq "Define") { read_define_content(*INFO, *CPPOUTPUT, *JAVAOUTPUT); } elsif ($datatype eq "Enum") { read_enum_content(*INFO, *CPPOUTPUT, *JAVAOUTPUT); } elsif ($datatype eq "TypeDef") { read_typedef_content(*INFO, *CPPOUTPUT, *JAVAOUTPUT); } else { die "Unknown type on content section\n"; } } sub read_define_content { local (*INFO) = $_[0]; local (*CPPOUTPUT) = $_[1]; local (*JAVAOUTPUT) = $_[2]; my $line = ; while (!(eof) && ($line !~ /^\[\/Section\]$/)) { if ($line !~ /^(#.*|\s*)$/) { if ($line =~ /^(.+)\s+(.+)$/) { write_cpp_define_line(*CPPOUTPUT, $1, $2); write_java_define_line(*JAVAOUTPUT, $1, $2); } else { die "Malformed content section define line\n"; } } $line = ; } } sub read_typedef_content { local (*INFO) = $_[0]; local (*CPPOUTPUT) = $_[1]; local (*JAVAOUTPUT) = $_[2]; my $line = ; while (!(eof) && ($line !~ /^\[\/Section\]$/)) { if ($line !~ /^(#.*|\s*)$/) { if ($line =~ /^(.+)\s+(.+)$/) { write_cpp_typedef_line(*CPPOUTPUT, $1, $2); # Java doesn't support typedefs, ignore it. #write_java_typedef_line(*JAVAOUTPUT, $1, $2); } else { die "Malformed content section typedef line\n"; } } $line = ; } } sub read_enum_content { local (*INFO) = $_[0]; local (*CPPOUTPUT) = $_[1]; local (*JAVAOUTPUT) = $_[2]; my $line = ; my $dataname = ""; if ($line =~ /^Name\s+(.+)$/) { $dataname = $1; print "\tDataname: " . $dataname . "\n"; } else { die "Content section has a non-named data stream\n"; } $line = ; my $datatype = ""; if ($line =~ /^DataType\s+(.+)$/) { $datatype = $1; print "\tDataType: " . $datatype . "\n"; } else { die "Content section has a enum stream with no data type\n"; } my $first = "yes"; $line = ; while (!(eof) && ($line !~ /^\[\/Section\]$/)) { if ($line !~ /^(#.*|\s*)$/) { if ($line =~ /^(.+)\s+(.+)$/) { my $firstoperand = $1; my $secondoperand = $2; if ($first) { write_cpp_enum_start(*CPPOUTPUT, $dataname, $datatype); } write_cpp_enum_line(*CPPOUTPUT, $firstoperand, $secondoperand, $first); write_java_define_line(*JAVAOUTPUT, $firstoperand, $secondoperand, $datatype); if ($first) { $first = ""; } } else { die "Malformed content section enum line\n"; } } $line = ; } write_cpp_enum_end(*CPPOUTPUT); } # Takes a file handle, and the comment start/end character for that language sub write_license_header { my $folder = $_[0]; local (*OUTPUT) = $_[1]; open(LICENSE, $folder . "abstracts/License.abstract") or die "Cannot open license file"; my $line = ; while (!(eof)) { printf OUTPUT $_[2] . $line . $_[3]; $line = ; } print OUTPUT "\n"; print OUTPUT $_[2] . "Purpose:" . $_[3] . "\n" . $_[2] . $_[4] . $_[3] . "\n\n"; close(LICENSE); } ################ CPP Specific Subroutines ##################### sub write_cpp_top_guard { local (*OUTPUT) = $_[0]; my $guardname = uc($_[1]); print OUTPUT "#ifndef __" . $guardname . "_H__\n"; print OUTPUT "#define __" . $guardname . "_H__\n\n"; } sub write_cpp_bottom_guard { local (*OUTPUT) = $_[0]; my $guardname = uc($_[1]); print OUTPUT "#ifdef DEBUG_EC_IMPLEMENTATION\n\n" . join("\n", @debugOut) . "\n#endif\t// DEBUG_EC_IMPLEMENTATION\n\n"; print OUTPUT "#endif // __" . $guardname . "_H__\n"; } sub write_cpp_enum_start { local (*OUTPUT) = $_[0]; print OUTPUT "enum " . $_[1] . " {\n"; push @debugOut, "wxString GetDebugName$_[1]($_[2] arg)\n{\n\tswitch (arg) {"; } sub write_cpp_enum_end { local (*OUTPUT) = $_[0]; print OUTPUT "\n};\n"; push @debugOut, "\t\tdefault: return CFormat(wxT(\"unknown %d 0x%x\")) % arg % arg;\n\t}\n}\n"; } sub write_cpp_enum_line { local (*OUTPUT) = $_[0]; if ($_[3] !~ "yes") { print OUTPUT ",\n" } print OUTPUT "\t" . $_[1] . " = " . $_[2]; my $arg = $_[1]; $arg =~ s/\s//g; # remove whitespace push @debugOut, "\t\tcase $_[2]: return wxT(\"$arg\");"; } sub write_cpp_define_line { local (*OUTPUT) = $_[0]; print OUTPUT "#define " . $_[1] . " " . $_[2] . "\n"; } sub write_cpp_typedef_line { local (*OUTPUT) = $_[0]; my $translated_type; my $preamble = ""; my $datatype = $_[2]; if ($datatype) { if ($datatype =~ /^u?int(8|16|32|64)$/) { $translated_type = $datatype . "_t"; } elsif ($datatype eq "string") { $translated_type = "std::string" } else { $preamble = "// "; $translated_type = $datatype; } } else { die "No data type on abstract"; } print OUTPUT $preamble . "typedef " . $translated_type . " " . $_[1] . ";\n"; } ################ JAVA Specific Subroutines ##################### sub write_java_define_line { local (*OUTPUT) = $_[0]; my $datatype = "int"; my $first = $_[1]; my $second = $_[2]; if ($_[3]) { if ($_[3] =~ /int8/) { $datatype = "byte"; } elsif ($_[3] =~ /(uint8|int16)/) { $datatype = "short"; } elsif ($_[3] =~ /(uint16|int32)/) { $datatype = "int"; } elsif ($_[3] =~ /(uint32|int64)/) { $datatype = "long"; } else { die "Unknown data type on abstract: " . $_[3]; } } else { if ($second =~ /^\".*\"$/) { $datatype = "String"; } } print OUTPUT "public final static " . $datatype . " " . $first . " = " . $second . ";\n"; } sub write_java_typedef_line { die "Typedef not supported on java"; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/0000755000175000017500000000000012053222403020412 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECSocket.cpp0000644000175000017500000005744012050266603022577 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ECSocket.h" #include #include #include using namespace std; #include "ECPacket.h" // Needed for CECPacket #include "../../../Logger.h" #include // Needed for CFormat #define EC_COMPRESSION_LEVEL Z_DEFAULT_COMPRESSION #define EC_MAX_UNCOMPRESSED 1024 #ifndef __GNUC__ #define __attribute__(x) #endif // If your compiler gives errors on these lines, just remove them. int utf8_mbtowc(wchar_t *p, const unsigned char *s, int n) __attribute__((__visibility__("internal"))); int utf8_wctomb(unsigned char *s, wchar_t wc, int maxlen) __attribute__((__visibility__("internal"))); int utf8_mb_remain(char c) __attribute__((__pure__)); /*----------=> Import from the Linux kernel <=----------*/ /* * linux/fs/nls_base.c */ /* * Sample implementation from Unicode home page. * http://www.stonehand.com/unicode/standard/fss-utf.html */ struct utf8_table { int cmask; int cval; int shift; uint32_t lmask; uint32_t lval; }; static const struct utf8_table utf8_table[] = { {0x80, 0x00, 0*6, 0x7F, 0, /* 1 byte sequence */}, {0xE0, 0xC0, 1*6, 0x7FF, 0x80, /* 2 byte sequence */}, {0xF0, 0xE0, 2*6, 0xFFFF, 0x800, /* 3 byte sequence */}, {0xF8, 0xF0, 3*6, 0x1FFFFF, 0x10000, /* 4 byte sequence */}, {0xFC, 0xF8, 4*6, 0x3FFFFFF, 0x200000, /* 5 byte sequence */}, {0xFE, 0xFC, 5*6, 0x7FFFFFFF, 0x4000000, /* 6 byte sequence */}, {0, 0, 0, 0, 0, /* end of table */} }; int utf8_mbtowc(uint32_t *p, const unsigned char *s, int n) { uint32_t l; int c0, c, nc; const struct utf8_table *t; nc = 0; c0 = *s; l = c0; for (t = utf8_table; t->cmask; t++) { nc++; if ((c0 & t->cmask) == t->cval) { l &= t->lmask; if (l < t->lval) return -1; *p = l; return nc; } if (n <= nc) return -1; s++; c = (*s ^ 0x80) & 0xFF; if (c & 0xC0) return -1; l = (l << 6) | c; } return -1; } int utf8_wctomb(unsigned char *s, uint32_t wc, int maxlen) { uint32_t l; int c, nc; const struct utf8_table *t; l = wc; nc = 0; for (t = utf8_table; t->cmask && maxlen; t++, maxlen--) { nc++; if (l <= t->lmask) { c = t->shift; *s = t->cval | (l >> c); while (c > 0) { c -= 6; s++; *s = 0x80 | ((l >> c) & 0x3F); } return nc; } } return -1; } /*----------=> End of Import <=----------*/ int utf8_mb_remain(char c) { int i; for (i = 0; i < 5; ++i) { if ((c & utf8_table[i].cmask) == utf8_table[i].cval) break; } return i; } void CQueuedData::Write(const void *data, size_t len) { const size_t canWrite = std::min(GetRemLength(), len); wxASSERT(len == canWrite); memcpy(m_wr_ptr, data, canWrite); m_wr_ptr += canWrite; } void CQueuedData::WriteAt(const void *data, size_t len, size_t offset) { wxASSERT(len + offset <= m_data.size()); if (offset > m_data.size()) { return; } else if (offset + len > m_data.size()) { len = m_data.size() - offset; } memcpy(&m_data[0] + offset, data, len); } void CQueuedData::Read(void *data, size_t len) { const size_t canRead = std::min(GetUnreadDataLength(), len); wxASSERT(len == canRead); memcpy(data, m_rd_ptr, canRead); m_rd_ptr += canRead; } // ADUNANZA BEGIN // Backport #if 0 void CQueuedData::WriteToSocket(CECSocket *sock) { wxCHECK_RET(m_rd_ptr < m_wr_ptr, wxT("Reading past written data in WriteToSocket")); sock->SocketWrite(m_rd_ptr, GetUnreadDataLength()); m_rd_ptr += sock->GetLastCount(); } void CQueuedData::ReadFromSocket(CECSocket *sock, size_t len) { const size_t canWrite = std::min(GetRemLength(), len); wxASSERT(len == canWrite); sock->SocketRead(m_wr_ptr, canWrite); m_wr_ptr += sock->GetLastCount(); } #else // ADUNANZA BACKPORT uint32 CQueuedData::WriteToSocket(CECSocket *sock) { // ADUNANZA BEGIN // Fix warning Ubuntu (aMule rev 10797) // In realta' e' cambiata solo la prima riga, pero' ho scelto // di mettere sotto if 0 tutto il blocco per evitare che qualche compilatore // potesse avere problemi con una macro spezzata da if 0 #if 0 wxCHECK2_MSG(m_rd_ptr < m_wr_ptr, 0, wxT("Reading past written data in WriteToSocket")); #else wxCHECK_MSG(m_rd_ptr < m_wr_ptr, 0, wxT("Reading past written data in WriteToSocket")); #endif // ADUNANZA END uint32 write = sock->SocketWrite(m_rd_ptr, GetUnreadDataLength()); m_rd_ptr += write; return write; } uint32 CQueuedData::ReadFromSocket(CECSocket *sock, size_t len) { const size_t canWrite = std::min(GetRemLength(), len); wxASSERT(len == canWrite); uint32 read = sock->SocketRead(m_wr_ptr, canWrite); m_wr_ptr += read; return read; } #endif // ADUNANZA END size_t CQueuedData::ReadFromSocketAll(CECSocket *sock, size_t len) { size_t read_rem = std::min(GetRemLength(), len); wxASSERT(read_rem == len); // We get here when socket is truly blocking do { // Give socket a 10 sec chance to recv more data. if ( !sock->WaitSocketRead(10, 0) ) { AddDebugLogLineN(logEC, wxT("ReadFromSocketAll: socket is blocking")); break; } wxASSERT(m_wr_ptr + read_rem <= &m_data[0] + m_data.size()); // ADUNANZA BEGIN // Backport #if 0 sock->SocketRead(m_wr_ptr, read_rem); m_wr_ptr += sock->GetLastCount(); read_rem -= sock->GetLastCount(); #else uint32 read = sock->SocketRead(m_wr_ptr, read_rem); m_wr_ptr += read; read_rem -= read; #endif // ADUNANZA END if (sock->SocketRealError()) { AddDebugLogLineN(logEC, wxT("ReadFromSocketAll: socket error")); break; } } while (read_rem); return len - read_rem; } size_t CQueuedData::GetLength() const { return m_data.size(); } size_t CQueuedData::GetDataLength() const { const size_t len = m_wr_ptr - &m_data[0]; wxCHECK_MSG(len <= m_data.size(), m_data.size(), wxT("Write-pointer past end of buffer")); return len; } size_t CQueuedData::GetRemLength() const { return m_data.size() - GetDataLength(); } size_t CQueuedData::GetUnreadDataLength() const { wxCHECK_MSG(m_wr_ptr >= m_rd_ptr, 0, wxT("Read position past write position.")); return m_wr_ptr - m_rd_ptr; } // // CECSocket API - User interface functions // // ADUNANZA BEGIN // Backport #if 0 CECSocket::CECSocket(bool use_events) : m_use_events(use_events), m_in_ptr(EC_SOCKET_BUFFER_SIZE), m_out_ptr(EC_SOCKET_BUFFER_SIZE), m_curr_rx_data(new CQueuedData(EC_SOCKET_BUFFER_SIZE)), m_curr_tx_data(new CQueuedData(EC_SOCKET_BUFFER_SIZE)), m_rx_flags(0), m_tx_flags(0), // setup initial state: 4 flags + 4 length m_bytes_needed(EC_HEADER_SIZE), m_in_header(true), m_my_flags(0x20), m_haveNotificationSupport(false) { } #else // ADUNANZA BACKPORT CECSocket::CECSocket(bool use_events) : m_use_events(use_events), m_in_ptr(EC_SOCKET_BUFFER_SIZE), m_out_ptr(EC_SOCKET_BUFFER_SIZE), m_curr_rx_data(new CQueuedData(EC_SOCKET_BUFFER_SIZE)), m_curr_tx_data(new CQueuedData(EC_SOCKET_BUFFER_SIZE)), m_rx_flags(0), m_tx_flags(0), // setup initial state: 4 flags + 4 length m_bytes_needed(EC_HEADER_SIZE), m_in_header(true), m_curr_packet_len(0), m_my_flags(0x20), m_haveNotificationSupport(false) {} #endif // ADUNANZA END CECSocket::~CECSocket() { while (!m_output_queue.empty()) { CQueuedData *data = m_output_queue.front(); m_output_queue.pop_front(); delete data; } } bool CECSocket::ConnectSocket(uint32_t ip, uint16_t port) { bool res = InternalConnect(ip, port, !m_use_events); return !SocketError() && res; } void CECSocket::SendPacket(const CECPacket *packet) { uint32 len = WritePacket(packet); packet->DebugPrint(false, len); OnOutput(); } const CECPacket *CECSocket::SendRecvPacket(const CECPacket *packet) { SendPacket(packet); if (m_curr_rx_data->ReadFromSocketAll(this, EC_HEADER_SIZE) != EC_HEADER_SIZE || SocketError() // This is a synchronous read, so WouldBlock is an error too. || !ReadHeader()) { OnError(); AddDebugLogLineN(logEC, wxT("SendRecvPacket: error")); return 0; } if (m_curr_rx_data->ReadFromSocketAll(this, m_curr_packet_len) != m_curr_packet_len || SocketError()) { OnError(); AddDebugLogLineN(logEC, wxT("SendRecvPacket: error")); return 0; } const CECPacket *reply = ReadPacket(); m_curr_rx_data->Rewind(); return reply; } std::string CECSocket::GetLastErrorMsg() { int code = InternalGetLastError(); switch(code) { case EC_ERROR_NOERROR: return "No error happened"; case EC_ERROR_INVOP: return "Invalid operation"; case EC_ERROR_IOERR: return "Input/Output error"; case EC_ERROR_INVADDR: return "Invalid address passed to wxSocket"; case EC_ERROR_INVSOCK: return "Invalid socket (uninitialized)"; case EC_ERROR_NOHOST: return "No corresponding host"; case EC_ERROR_INVPORT: return "Invalid port"; case EC_ERROR_WOULDBLOCK: return "The socket is non-blocking and the operation would block"; case EC_ERROR_TIMEDOUT: return "The timeout for this operation expired"; case EC_ERROR_MEMERR: return "Memory exhausted"; } ostringstream error_string; error_string << "Error code " << code << " unknown."; return error_string.str(); } bool CECSocket::SocketRealError() { bool ret = false; if (InternalError()) { int lastError = InternalGetLastError(); ret = lastError != EC_ERROR_NOERROR && lastError != EC_ERROR_WOULDBLOCK; } return ret; } void CECSocket::OnError() { #ifdef __DEBUG__ cout << GetLastErrorMsg() << endl; #endif } void CECSocket::OnLost() { } // // Event handlers // void CECSocket::OnConnect() { } void CECSocket::OnInput() { size_t bytes_rx = 0; do { // ADUNANZA BEGIN // Backport #if 0 m_curr_rx_data->ReadFromSocket(this, m_bytes_needed); #else bytes_rx = m_curr_rx_data->ReadFromSocket(this, m_bytes_needed); #endif // ADUNANZA END if (SocketRealError()) { AddDebugLogLineN(logEC, wxT("OnInput: socket error")); OnError(); // socket already disconnected in this point return; } // ADUNANZA BEGIN // Backport #if 0 bytes_rx = GetLastCount(); #endif // ADUNANZA END m_bytes_needed -= bytes_rx; if (m_bytes_needed == 0) { if (m_in_header) { m_in_header = false; if (!ReadHeader()) { AddDebugLogLineN(logEC, wxT("OnInput: header error")); return; } } else { std::auto_ptr packet(ReadPacket()); m_curr_rx_data->Rewind(); if (packet.get()) { std::auto_ptr reply(OnPacketReceived(packet.get(), m_curr_packet_len)); if (reply.get()) { SendPacket(reply.get()); } } else { AddDebugLogLineN(logEC, wxT("OnInput: no packet")); } m_bytes_needed = EC_HEADER_SIZE; m_in_header = true; } } } while (bytes_rx); } void CECSocket::OnOutput() { while (!m_output_queue.empty()) { CQueuedData* data = m_output_queue.front(); data->WriteToSocket(this); if (!data->GetUnreadDataLength()) { m_output_queue.pop_front(); delete data; } if (SocketError()) { if (!WouldBlock()) { // real error, abort AddDebugLogLineN(logEC, wxT("OnOutput: socket error")); OnError(); return; } // Now it's just a blocked socket. if ( m_use_events ) { // Event driven logic: return, OnOutput() will be called again later return; } // Syncronous call: wait (for max 10 secs) if ( !WaitSocketWrite(10, 0) ) { // Still not through ? if (WouldBlock()) { // WouldBlock() is only EAGAIN or EWOULD_BLOCK, // and those shouldn't create an infinite wait. // So give it another chance. continue; } else { AddDebugLogLineN(logEC, wxT("OnOutput: socket error in sync wait")); OnError(); break; } } } } // // All outstanding data sent to socket // (used for push clients) // WriteDoneAndQueueEmpty(); } bool CECSocket::DataPending() { return !m_output_queue.empty(); } // // Socket I/O // size_t CECSocket::ReadBufferFromSocket(void *buffer, size_t required_len) { wxASSERT(required_len); if (m_curr_rx_data->GetUnreadDataLength() < required_len) { // need more data that we have. Looks like nothing will help here AddDebugLogLineN(logEC, CFormat(wxT("ReadBufferFromSocket: not enough data (%d < %d)")) % m_curr_rx_data->GetUnreadDataLength() % required_len); return 0; } m_curr_rx_data->Read(buffer, required_len); return required_len; } void CECSocket::WriteBufferToSocket(const void *buffer, size_t len) { unsigned char *wr_ptr = (unsigned char *)buffer; while ( len ) { size_t curr_free = m_curr_tx_data->GetRemLength(); if ( len > curr_free ) { m_curr_tx_data->Write(wr_ptr, curr_free); len -= curr_free; wr_ptr += curr_free; m_output_queue.push_back(m_curr_tx_data.release()); m_curr_tx_data.reset(new CQueuedData(EC_SOCKET_BUFFER_SIZE)); } else { m_curr_tx_data->Write(wr_ptr, len); break; } } } // // ZLib "error handler" // void ShowZError(int zerror, z_streamp strm) { const char *p = NULL; switch (zerror) { case Z_STREAM_END: p = "Z_STREAM_END"; break; case Z_NEED_DICT: p = "Z_NEED_DICT"; break; case Z_ERRNO: p = "Z_ERRNO"; break; case Z_STREAM_ERROR: p = "Z_STREAM_ERROR"; break; case Z_DATA_ERROR: p = "Z_DATA_ERROR"; break; case Z_MEM_ERROR: p = "Z_MEM_ERROR"; break; case Z_BUF_ERROR: p = "Z_BUF_ERROR"; break; case Z_VERSION_ERROR: p = "Z_VERSION_ERROR"; break; } printf("ZLib operation returned %s\n", p); printf("ZLib error message: %s\n", strm->msg); printf("zstream state:\n\tnext_in=%p\n\tavail_in=%u\n\ttotal_in=%lu\n\tnext_out=%p\n\tavail_out=%u\n\ttotal_out=%lu\n", strm->next_in, strm->avail_in, strm->total_in, strm->next_out, strm->avail_out, strm->total_out); AddDebugLogLineN(logEC, wxT("ZLib error")); } bool CECSocket::ReadHeader() { m_curr_rx_data->Read(&m_rx_flags, 4); m_rx_flags = ENDIAN_NTOHL(m_rx_flags); m_curr_rx_data->Read(&m_curr_packet_len, 4); m_curr_packet_len = ENDIAN_NTOHL(m_curr_packet_len); m_bytes_needed = m_curr_packet_len; // packet bigger that 16Mb looks more like broken request if (m_bytes_needed > 16*1024*1024) { AddDebugLogLineN(logEC, CFormat(wxT("ReadHeader: packet too big: %d")) % m_bytes_needed); CloseSocket(); return false; } m_curr_rx_data->Rewind(); size_t currLength = m_curr_rx_data->GetLength(); // resize input buffer if // a) too small or if (currLength < m_bytes_needed // b) way too large (free data again after receiving huge packets) || m_bytes_needed + EC_SOCKET_BUFFER_SIZE * 10 < currLength) { // Client socket: IsAuthorized() is always true // Server socket: do not allow growing of internal buffers before succesfull login. // Otherwise sending a simple header with bogus length of 16MB-1 will crash an embedded // client with memory exhaustion. if (!IsAuthorized()) { AddDebugLogLineN(logEC, CFormat(wxT("ReadHeader: resize (%d -> %d) on non autorized socket")) % currLength % m_bytes_needed); CloseSocket(); return false; } // Don't make buffer smaller than EC_SOCKET_BUFFER_SIZE size_t bufSize = m_bytes_needed; if (bufSize < EC_SOCKET_BUFFER_SIZE) { bufSize = EC_SOCKET_BUFFER_SIZE; } m_curr_rx_data.reset(new CQueuedData(bufSize)); } if (ECLogIsEnabled()) { DoECLogLine(CFormat(wxT("< %d ...")) % m_bytes_needed); } return true; } bool CECSocket::ReadNumber(void *buffer, size_t len) { if (m_rx_flags & EC_FLAG_UTF8_NUMBERS) { unsigned char mb[6]; uint32_t wc; if (!ReadBuffer(mb, 1)) return false; int remains = utf8_mb_remain(mb[0]); if (remains) if (!ReadBuffer(&(mb[1]), remains)) return false; if (utf8_mbtowc(&wc, mb, 6) == -1) return false; // Invalid UTF-8 code sequence switch (len) { case 1: PokeUInt8( buffer, wc ); break; case 2: RawPokeUInt16( buffer, wc ); break; case 4: RawPokeUInt32( buffer, wc ); break; } } else { if ( !ReadBuffer(buffer, len) ) { return false; } switch (len) { case 2: RawPokeUInt16( buffer, ENDIAN_NTOHS( RawPeekUInt16( buffer ) ) ); break; case 4: RawPokeUInt32( buffer, ENDIAN_NTOHL( RawPeekUInt32( buffer ) ) ); break; } } return true; } bool CECSocket::WriteNumber(const void *buffer, size_t len) { if (m_tx_flags & EC_FLAG_UTF8_NUMBERS) { unsigned char mb[6]; uint32_t wc = 0; int mb_len; switch (len) { case 1: wc = PeekUInt8( buffer ); break; case 2: wc = RawPeekUInt16( buffer ); break; case 4: wc = RawPeekUInt32( buffer ); break; default: return false; } if ((mb_len = utf8_wctomb(mb, wc, 6)) == -1) return false; // Something is terribly wrong... return WriteBuffer(mb, mb_len); } else { char tmp[8]; switch (len) { case 1: PokeUInt8( tmp, PeekUInt8( buffer ) ); break; case 2: RawPokeUInt16( tmp, ENDIAN_NTOHS( RawPeekUInt16( buffer ) ) ); break; case 4: RawPokeUInt32( tmp, ENDIAN_NTOHL( RawPeekUInt32( buffer ) ) ); break; } return WriteBuffer(tmp, len); } } bool CECSocket::ReadBuffer(void *buffer, size_t len) { if (m_rx_flags & EC_FLAG_ZLIB) { if ( !m_z.avail_in ) { // no reason for this situation: all packet should be // buffered by now AddDebugLogLineN(logEC, wxT("ReadBuffer: ZLib error")); return false; } m_z.avail_out = (uInt)len; m_z.next_out = (Bytef*)buffer; int zerror = inflate(&m_z, Z_SYNC_FLUSH); if ((zerror != Z_OK) && (zerror != Z_STREAM_END)) { ShowZError(zerror, &m_z); AddDebugLogLineN(logEC, wxT("ReadBuffer: ZLib error")); return false; } return true; } else { // using uncompressed buffered i/o size_t read = ReadBufferFromSocket(buffer, len); if (read == len) { return true; } else { AddDebugLogLineN(logEC, CFormat(wxT("ReadBuffer: %d < %d")) % read % len); return false; } } } bool CECSocket::WriteBuffer(const void *buffer, size_t len) { if (m_tx_flags & EC_FLAG_ZLIB) { unsigned char *rd_ptr = (unsigned char *)buffer; do { unsigned int remain_in = EC_SOCKET_BUFFER_SIZE - m_z.avail_in; if ( remain_in >= len ) { memcpy(m_z.next_in+m_z.avail_in, rd_ptr, len); m_z.avail_in += (uInt)len; len = 0; } else { memcpy(m_z.next_in+m_z.avail_in, rd_ptr, remain_in); m_z.avail_in += remain_in; len -= remain_in; rd_ptr += remain_in; // buffer is full, calling zlib do { m_z.next_out = &m_out_ptr[0]; m_z.avail_out = EC_SOCKET_BUFFER_SIZE; int zerror = deflate(&m_z, Z_NO_FLUSH); if ( zerror != Z_OK ) { AddDebugLogLineN(logEC, wxT("WriteBuffer: ZLib error")); ShowZError(zerror, &m_z); return false; } WriteBufferToSocket(&m_out_ptr[0], EC_SOCKET_BUFFER_SIZE - m_z.avail_out); } while ( m_z.avail_out == 0 ); // all input should be used by now wxASSERT(m_z.avail_in == 0); m_z.next_in = &m_in_ptr[0]; } } while ( len ); return true; } else { // using uncompressed buffered i/o WriteBufferToSocket(buffer, len); return true; } } bool CECSocket::FlushBuffers() { if (m_tx_flags & EC_FLAG_ZLIB) { do { m_z.next_out = &m_out_ptr[0]; m_z.avail_out = EC_SOCKET_BUFFER_SIZE; int zerror = deflate(&m_z, Z_FINISH); if ( zerror == Z_STREAM_ERROR ) { AddDebugLogLineN(logEC, wxT("FlushBuffers: ZLib error")); ShowZError(zerror, &m_z); return false; } WriteBufferToSocket(&m_out_ptr[0], EC_SOCKET_BUFFER_SIZE - m_z.avail_out); } while ( m_z.avail_out == 0 ); } if ( m_curr_tx_data->GetDataLength() ) { m_output_queue.push_back(m_curr_tx_data.release()); m_curr_tx_data.reset(new CQueuedData(EC_SOCKET_BUFFER_SIZE)); } return true; } // // Packet I/O // uint32 CECSocket::WritePacket(const CECPacket *packet) { if (SocketRealError()) { OnError(); return 0; } // Check if output queue is empty. If not, memorize the current end. std::list::iterator outputStart = m_output_queue.begin(); uint32 outputQueueSize = m_output_queue.size(); for (uint32 i = 1; i < outputQueueSize; i++) { // ADUNANZA BEGIN // Backport #if 0 outputStart++; #else ++outputStart; #endif // ADUNANZA END } uint32_t flags = 0x20; if (packet->GetPacketLength() > EC_MAX_UNCOMPRESSED && ((m_my_flags & EC_FLAG_ZLIB) > 0)) { flags |= EC_FLAG_ZLIB; } else { flags |= EC_FLAG_UTF8_NUMBERS; } flags &= m_my_flags; m_tx_flags = flags; if (flags & EC_FLAG_ZLIB) { m_z.zalloc = Z_NULL; m_z.zfree = Z_NULL; m_z.opaque = Z_NULL; m_z.avail_in = 0; m_z.next_in = &m_in_ptr[0]; int zerror = deflateInit(&m_z, EC_COMPRESSION_LEVEL); if (zerror != Z_OK) { // don't use zlib if init failed flags &= ~EC_FLAG_ZLIB; ShowZError(zerror, &m_z); } } uint32_t tmp_flags = ENDIAN_HTONL(flags); WriteBufferToSocket(&tmp_flags, sizeof(uint32)); // preallocate 4 bytes in buffer for packet length uint32_t packet_len = 0; WriteBufferToSocket(&packet_len, sizeof(uint32)); packet->WritePacket(*this); // Finalize zlib compression and move current data to outout queue FlushBuffers(); // find the beginning of our data in the output queue if (outputQueueSize) { // ADUNANZA BEGIN // Backport #if 0 outputStart++; #else ++outputStart; #endif // ADUNANZA END } else { outputStart = m_output_queue.begin(); } // now calculate actual size of data // ADUNANZA BEGIN // Backport #if 0 for(std::list::iterator it = outputStart; it != m_output_queue.end(); it++) { #else for(std::list::iterator it = outputStart; it != m_output_queue.end(); ++it) { #endif // ADUNANZA END packet_len += (uint32_t)(*it)->GetDataLength(); } // header size is not counted packet_len -= EC_HEADER_SIZE; // now write actual length at offset 4 uint32 packet_len_E = ENDIAN_HTONL(packet_len); (*outputStart)->WriteAt(&packet_len_E, 4, 4); if (flags & EC_FLAG_ZLIB) { int zerror = deflateEnd(&m_z); if ( zerror != Z_OK ) { AddDebugLogLineN(logEC, wxT("WritePacket: ZLib error")); ShowZError(zerror, &m_z); } } return packet_len; } const CECPacket *CECSocket::ReadPacket() { CECPacket *packet = 0; uint32_t flags = m_rx_flags; if ( ((flags & 0x60) != 0x20) || (flags & EC_FLAG_UNKNOWN_MASK) ) { // Protocol error - other end might use an older protocol AddDebugLogLineN(logEC, wxT("ReadPacket: protocol error")); cout << "ReadPacket: packet have invalid flags " << flags << endl; CloseSocket(); return 0; } if (flags & EC_FLAG_ZLIB) { m_z.zalloc = Z_NULL; m_z.zfree = Z_NULL; m_z.opaque = Z_NULL; m_z.avail_in = 0; m_z.next_in = 0; int zerror = inflateInit(&m_z); if (zerror != Z_OK) { AddDebugLogLineN(logEC, wxT("ReadPacket: zlib error")); ShowZError(zerror, &m_z); cout << "ReadPacket: failed zlib init" << endl; CloseSocket(); return 0; } } m_curr_rx_data->ToZlib(m_z); packet = new CECPacket(); if (!packet->ReadFromSocket(*this)) { AddDebugLogLineN(logEC, wxT("ReadPacket: error in packet read")); cout << "ReadPacket: error in packet read" << endl; delete packet; packet = NULL; CloseSocket(); } if (flags & EC_FLAG_ZLIB) { int zerror = inflateEnd(&m_z); if ( zerror != Z_OK ) { AddDebugLogLineN(logEC, wxT("ReadPacket: zlib error")); ShowZError(zerror, &m_z); cout << "ReadPacket: failed zlib free" << endl; CloseSocket(); } } return packet; } const CECPacket *CECSocket::OnPacketReceived(const CECPacket *, uint32) { return 0; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECTagTypes.h0000644000175000017500000000401512050266603022542 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // Purpose: // EC tag types for use on the ec library. #ifndef __ECTAGTYPES_H__ #define __ECTAGTYPES_H__ enum ECTagTypes { EC_TAGTYPE_UNKNOWN = 0, EC_TAGTYPE_CUSTOM = 1, EC_TAGTYPE_UINT8 = 2, EC_TAGTYPE_UINT16 = 3, EC_TAGTYPE_UINT32 = 4, EC_TAGTYPE_UINT64 = 5, EC_TAGTYPE_STRING = 6, EC_TAGTYPE_DOUBLE = 7, EC_TAGTYPE_IPV4 = 8, EC_TAGTYPE_HASH16 = 9 }; #ifdef DEBUG_EC_IMPLEMENTATION wxString GetDebugNameECTagTypes(uint8 arg) { switch (arg) { case 0: return wxT("EC_TAGTYPE_UNKNOWN"); case 1: return wxT("EC_TAGTYPE_CUSTOM"); case 2: return wxT("EC_TAGTYPE_UINT8"); case 3: return wxT("EC_TAGTYPE_UINT16"); case 4: return wxT("EC_TAGTYPE_UINT32"); case 5: return wxT("EC_TAGTYPE_UINT64"); case 6: return wxT("EC_TAGTYPE_STRING"); case 7: return wxT("EC_TAGTYPE_DOUBLE"); case 8: return wxT("EC_TAGTYPE_IPV4"); case 9: return wxT("EC_TAGTYPE_HASH16"); default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg; } } #endif // DEBUG_EC_IMPLEMENTATION #endif // __ECTAGTYPES_H__ amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECTag.cpp0000644000175000017500000007022112050266603022052 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifdef __DEBUG__ #define DEBUG_EC_IMPLEMENTATION #include // Needed for CFormat #endif #include "ECTag.h" // Needed for ECTag #include "ECSocket.h" // Needed for CECSocket #include "ECSpecialTags.h" // Needed for CValueMap #include "ECID.h" // Needed for CECID /********************************************************** * * * CECTag class * * * **********************************************************/ //! Defines the Null tag which may be returned by GetTagByNameSafe. const CECTag CECTag::s_theNullTag; /** * Creates a new null-valued CECTag instance * * @see s_theNullTag * @see GetTagByNameSafe */ CECTag::CECTag() : m_tagName(0), m_dataType(EC_TAGTYPE_UNKNOWN), m_dataLen(0), m_tagData(NULL) // All access functions check m_dataType, so no need to allocate a dummy buffer. { } /** * Creates a new CECTag instance from the given data * * @param name TAG name * @param length length of data buffer * @param data TAG data * */ CECTag::CECTag(ec_tagname_t name, unsigned int length, const void *data) : m_tagName(name) { if (data) { m_dataLen = length; NewData(); memcpy(m_tagData, data, m_dataLen); } else { wxASSERT(length == 0); m_dataLen = 0; m_tagData = NULL; } m_dataType = EC_TAGTYPE_CUSTOM; } /** * Creates a new CECTag instance for custom data * * @param name TAG name * @param length length of data buffer that will be alloc'ed * @param dataptr pointer to a void pointer which will be assigned the internal TAG data buffer * * \note TAG data buffer has to be filled with valid data after the ctor */ CECTag::CECTag(ec_tagname_t name, unsigned int length, void **dataptr) : m_tagName(name) { m_dataLen = length; NewData(); *dataptr = m_tagData; m_dataType = EC_TAGTYPE_CUSTOM; } /** * Creates a new CECTag instance, which contains an IPv4 address. * * This function takes care of the endianness of the port number. * * @param name TAG name * @param data The EC_IPv4_t class containing the IPv4 address. * * @see GetIPv4Data() */ CECTag::CECTag(ec_tagname_t name, const EC_IPv4_t& data) : m_tagName(name) { m_dataLen = sizeof(EC_IPv4_t); NewData(); // ADUNANZA BEGIN // Backport #if 0 RawPokeUInt32( ((EC_IPv4_t *)m_tagData)->m_ip, RawPeekUInt32( data.m_ip ) ); ((EC_IPv4_t *)m_tagData)->m_port = ENDIAN_HTONS(data.m_port); #else RawPokeUInt32( reinterpret_cast(m_tagData)->m_ip, RawPeekUInt32( data.m_ip ) ); reinterpret_cast(m_tagData)->m_port = ENDIAN_HTONS(data.m_port); #endif // ADUNANZA END m_dataType = EC_TAGTYPE_IPV4; } /** * Creates a new CECTag instance, which contains a MD4 hash. * * This function takes care to store hash in network byte order. * * @param name TAG name * @param data The CMD4Hash class containing the MD4 hash. * * @see GetMD4Data() */ CECTag::CECTag(ec_tagname_t name, const CMD4Hash& data) : m_tagName(name) { m_dataLen = 16; NewData(); RawPokeUInt64( m_tagData, RawPeekUInt64( data.GetHash() ) ); RawPokeUInt64( m_tagData + 8, RawPeekUInt64( data.GetHash() + 8 ) ); m_dataType = EC_TAGTYPE_HASH16; } /** * Creates a new CECTag instance, which contains a string * * @param name TAG name * @param data wxString object, it's contents are converted to UTF-8. * * @see GetStringDataSTL() */ CECTag::CECTag(ec_tagname_t name, const std::string& data) : m_tagName(name) { ConstructStringTag(name, data); } /** * Creates a new CECTag instance, which contains a string * * @param name TAG name * @param data wxString object, it's contents are converted to UTF-8. * * @see GetStringData() */ CECTag::CECTag(ec_tagname_t name, const wxString& data) { ConstructStringTag(name, (const char*)unicode2UTF8(data)); } CECTag::CECTag(ec_tagname_t name, const wxChar* data) { ConstructStringTag(name, (const char*)unicode2UTF8(data)); } /** * Copy constructor */ CECTag::CECTag(const CECTag& tag) { m_tagData = NULL; *this = tag; } /** * Creates a new CECTag instance, which contains an int value. * * This takes care of endianness problems with numbers. * * @param name TAG name. * @param data number. * * @see GetInt() */ CECTag::CECTag(ec_tagname_t name, bool data) : m_tagName(name) { InitInt(data); } CECTag::CECTag(ec_tagname_t name, uint8 data) : m_tagName(name) { InitInt(data); } CECTag::CECTag(ec_tagname_t name, uint16 data) : m_tagName(name) { InitInt(data); } CECTag::CECTag(ec_tagname_t name, uint32 data) : m_tagName(name) { InitInt(data); } CECTag::CECTag(ec_tagname_t name, uint64 data) : m_tagName(name) { InitInt(data); } void CECTag::InitInt(uint64 data) { if (data <= 0xFF) { m_dataType = EC_TAGTYPE_UINT8; m_dataLen = 1; } else if (data <= 0xFFFF) { m_dataType = EC_TAGTYPE_UINT16; m_dataLen = 2; } else if (data <= 0xFFFFFFFF) { m_dataType = EC_TAGTYPE_UINT32; m_dataLen = 4; } else { m_dataType = EC_TAGTYPE_UINT64; m_dataLen = 8; } NewData(); switch (m_dataType) { case EC_TAGTYPE_UINT8: PokeUInt8( m_tagData, (uint8) data ); break; case EC_TAGTYPE_UINT16: // ADUNANZA BEGIN // Fix endianess, backport aMule SVN 10789 #if 0 PokeUInt16( m_tagData, wxUINT16_SWAP_ALWAYS((uint16) data )); #else RawPokeUInt16( m_tagData, ENDIAN_HTONS((uint16) data )); #endif // ADUNANZA END break; case EC_TAGTYPE_UINT32: // ADUNANZA BEGIN // Fix endianess, backport aMule SVN 10789 #if 0 PokeUInt32( m_tagData, wxUINT32_SWAP_ALWAYS((uint32) data )); #else RawPokeUInt32( m_tagData, ENDIAN_HTONL((uint32) data )); #endif // ADUNANZA END break; case EC_TAGTYPE_UINT64: // ADUNANZA BEGIN // Fix endianess, backport aMule SVN 10789 #if 0 PokeUInt64( m_tagData, wxUINT64_SWAP_ALWAYS(data) ); #else RawPokeUInt64( m_tagData, ENDIAN_HTONLL(data) ); #endif // ADUNANZA END break; } } /** * Creates a new CECTag instance, which contains a double precision floating point number * * @param name TAG name * @param data double number * * @note The actual data is converted to string representation, because we have not found * yet an effective and safe way to transmit floating point numbers. * * @see GetDoubleData() */ CECTag::CECTag(ec_tagname_t name, double data) : m_tagName(name) { std::ostringstream double_str; double_str << data; std::string double_string = double_str.str(); const char * double_chr = double_string.c_str(); m_dataLen = (ec_taglen_t)strlen(double_chr) + 1; NewData(); memcpy(m_tagData, double_chr, m_dataLen); m_dataType = EC_TAGTYPE_DOUBLE; } /** * Destructor - frees allocated data and deletes child TAGs. */ CECTag::~CECTag(void) { delete [] m_tagData; } /** * Copy assignment operator. * * std::vector uses this, but the compiler-supplied version wouldn't properly * handle m_dynamic and m_tagData. This wouldn't be necessary if m_tagData * was a smart pointer (Hi, Kry!). */ CECTag& CECTag::operator=(const CECTag& tag) { if (&tag != this) { m_tagName = tag.m_tagName; m_dataLen = tag.m_dataLen; m_dataType = tag.m_dataType; delete [] m_tagData; if (m_dataLen != 0) { NewData(); memcpy(m_tagData, tag.m_tagData, m_dataLen); } else { m_tagData = NULL; } m_tagList.clear(); // ADUNANZA BEGIN // Backport #if 0 for (const_iterator it = tag.begin(); it != tag.end(); it++) { #else for (const_iterator it = tag.begin(); it != tag.end(); ++it) { #endif // ADUNANZA END m_tagList.push_back(*it); } } return *this; } /** * Compare operator. * */ bool CECTag::operator==(const CECTag& tag) const { return m_dataType == tag.m_dataType && m_tagName == tag.m_tagName && m_dataLen == tag.m_dataLen && (m_dataLen == 0 || !memcmp(m_tagData, tag.m_tagData, m_dataLen)) && m_tagList == tag.m_tagList; } /** * Add a child tag to this one. The tag argument is reset to an empty tag. * * Be very careful that this method swallows the content of \e tag, leaving \e tag empty. * Thus, the following code won't work as expected: * \code * { * CECPacket *p = new CECPacket(whatever); * CECTag *t1 = new CECTag(whatever); * CECTag *t2 = new CECTag(whatever); * p->AddTag(*t1); * t1->AddTag(*t2); // t2 won't be part of p !!! * } * \endcode * * To get the desired results, the above should be replaced with something like: * * \code * { * CECPacket *p = new CECPacket(whatever); * CECTag *t1 = new CECTag(whatever); * CECTag *t2 = new CECTag(whatever); * t1->AddTag(*t2); * delete t2; // we can safely delete the now empty t2 here, because t1 holds its content * p->AddTag(*t1); * delete t1; // now p holds the content of both t1 and t2 * } * \endcode * * Then why copying? The answer is to enable simplifying the code like this: * * \code * { * CECPacket *p = new CECPacket(whatever); * CECTag t1(whatever); * t1.AddTag(CECTag(whatever)); // t2 is now created on-the-fly * p->AddTag(t1); // now p holds a copy of both t1 and t2 * } * \endcode * * @param tag a CECTag class instance to add. * @return \b true if tag was really added, * \b false when it was omitted through valuemap. */ bool CECTag::AddTag(const CECTag& tag, CValueMap* valuemap) { if (valuemap) { return valuemap->AddTag(tag, this); } // cannot have more than 64k tags wxASSERT(m_tagList.size() < 0xffff); // First add an empty tag. m_tagList.push_back(CECEmptyTag()); // Then exchange the data. The original tag will be destroyed right after this call anyway. // UGLY - GCC allows a reference to an in place constructed object only to be passed as const. // So pass it the way it wants it and then cheat and cast it back to non-const. :-/ CECTag& wtag = const_cast(tag); wtag.swap(m_tagList.back()); return true; } void CECTag::AddTag(ec_tagname_t name, uint64_t data, CValueMap* valuemap) { if (valuemap) { valuemap->CreateTag(name, data, this); } else { AddTag(CECTag(name, data)); } } void CECTag::AddTag(ec_tagname_t name, const wxString& data, CValueMap* valuemap) { if (valuemap) { valuemap->CreateTag(name, data, this); } else { AddTag(CECTag(name, data)); } } void CECTag::AddTag(ec_tagname_t name, const CMD4Hash& data, CValueMap* valuemap) { if (valuemap) { valuemap->CreateTag(name, data, this); } else { AddTag(CECTag(name, data)); } } void CECTag::swap(CECTag& t2) { std::swap(m_tagName, t2.m_tagName); std::swap(m_dataType, t2.m_dataType); std::swap(m_dataLen, t2.m_dataLen); std::swap(m_tagData, t2.m_tagData); std::swap(m_tagList, t2.m_tagList); } bool CECTag::ReadFromSocket(CECSocket& socket) { ec_tagname_t tmp_tagName; if (!socket.ReadNumber(&tmp_tagName, sizeof(ec_tagname_t))) { return false; } m_tagName = tmp_tagName >> 1; bool hasChildren = (tmp_tagName & 0x01) != 0; if (!socket.ReadNumber(&m_dataType, sizeof(ec_tagtype_t))) { return false; } if (!socket.ReadNumber(&m_dataLen, sizeof(ec_taglen_t))) { return false; } if (hasChildren && !ReadChildren(socket)) { return false; } unsigned int tmp_len = m_dataLen; m_dataLen = 0; m_dataLen = tmp_len - GetTagLen(); if (m_dataLen > 0) { NewData(); if (!socket.ReadBuffer(m_tagData, m_dataLen)) { return false; } } else { m_tagData = NULL; } return true; } bool CECTag::WriteTag(CECSocket& socket) const { ec_tagname_t tmp_tagName = (m_tagName << 1) | (m_tagList.empty() ? 0 : 1); ec_tagtype_t type = m_dataType; ec_taglen_t tagLen = GetTagLen(); wxASSERT(type != EC_TAGTYPE_UNKNOWN); if (!socket.WriteNumber(&tmp_tagName, sizeof(ec_tagname_t))) return false; if (!socket.WriteNumber(&type, sizeof(ec_tagtype_t))) return false; if (!socket.WriteNumber(&tagLen, sizeof(ec_taglen_t))) return false; if (!m_tagList.empty()) { if (!WriteChildren(socket)) return false; } if (m_dataLen > 0) { if (m_tagData != NULL) { // This is here only to make sure everything, it should not be NULL at this point if (!socket.WriteBuffer(m_tagData, m_dataLen)) return false; } } return true; } bool CECTag::ReadChildren(CECSocket& socket) { uint16 tmp_tagCount; if (!socket.ReadNumber(&tmp_tagCount, sizeof(uint16))) { return false; } m_tagList.clear(); for (int i = 0; i < tmp_tagCount; i++) { m_tagList.push_back(CECTag()); CECTag& tag = m_tagList.back(); if (!tag.ReadFromSocket(socket)) { return false; } } return true; } bool CECTag::WriteChildren(CECSocket& socket) const { wxASSERT(m_tagList.size() < 0xFFFF); uint16 tmp = (uint16)m_tagList.size(); if (!socket.WriteNumber(&tmp, sizeof(tmp))) return false; // ADUNANZA BEGIN // Backport #if 0 for (const_iterator it = begin(); it != end(); it++) { #else for (const_iterator it = begin(); it != end(); ++it) { #endif // ADUNANZA END if (!it->WriteTag(socket)) return false; } return true; } /** * Finds the (first) child tag with given name. * * @param name TAG name to look for. * @return the tag found, or NULL. */ const CECTag* CECTag::GetTagByName(ec_tagname_t name) const { // ADUNANZA BEGIN // Backport #if 0 for (const_iterator it = begin(); it != end(); it++) { #else for (const_iterator it = begin(); it != end(); ++it) { #endif // ADUNANZA END if (it->m_tagName == name) return & *it; } return NULL; } /** * Finds the (first) child tag with given name. * * @param name TAG name to look for. * @return the tag found, or NULL. */ CECTag* CECTag::GetTagByName(ec_tagname_t name) { // ADUNANZA BEGIN // Backport #if 0 for (TagList::iterator it = m_tagList.begin(); it != m_tagList.end(); it++) { #else for (TagList::iterator it = m_tagList.begin(); it != m_tagList.end(); ++it) { #endif // ADUNANZA END if (it->m_tagName == name) return & *it; } return NULL; } /** * Finds the (first) child tag with given name. * * @param name TAG name to look for. * @return the tag found, or a special null-valued tag otherwise. * * @see s_theNullTag */ const CECTag* CECTag::GetTagByNameSafe(ec_tagname_t name) const { const CECTag* result = GetTagByName(name); if (result == NULL) result = &s_theNullTag; return result; } /** * Query TAG length that is suitable for the TAGLEN field (i.e.\ * without it's own header size). * * @return Tag length, containing its childs' length. */ uint32 CECTag::GetTagLen(void) const { uint32 length = m_dataLen; // ADUNANZA BEGIN // Backport #if 0 for (const_iterator it = begin(); it != end(); it++) { #else for (const_iterator it = begin(); it != end(); ++it) { #endif // ADUNANZA END length += it->GetTagLen(); length += sizeof(ec_tagname_t) + sizeof(ec_tagtype_t) + sizeof(ec_taglen_t) + (it->HasChildTags() ? 2 : 0); } return length; } uint64_t CECTag::GetInt() const { if (m_tagData == NULL) { // Empty tag - This is NOT an error. EC_ASSERT(m_dataType == EC_TAGTYPE_UNKNOWN); return 0; } switch (m_dataType) { case EC_TAGTYPE_UINT8: return PeekUInt8(m_tagData); case EC_TAGTYPE_UINT16: return ENDIAN_NTOHS( RawPeekUInt16( m_tagData ) ); case EC_TAGTYPE_UINT32: return ENDIAN_NTOHL( RawPeekUInt32( m_tagData ) ); case EC_TAGTYPE_UINT64: return ENDIAN_NTOHLL( RawPeekUInt64( m_tagData ) ); case EC_TAGTYPE_UNKNOWN: // Empty tag - This is NOT an error. return 0; default: EC_ASSERT(0); return 0; } } std::string CECTag::GetStringDataSTL() const { if (m_dataType != EC_TAGTYPE_STRING) { EC_ASSERT(m_dataType == EC_TAGTYPE_UNKNOWN); return std::string(); } else if (m_tagData == NULL) { EC_ASSERT(false); return std::string(); } return std::string(m_tagData); } #ifdef USE_WX_EXTENSIONS wxString CECTag::GetStringData() const { return UTF82unicode(GetStringDataSTL().c_str()); } #endif CMD4Hash CECTag::GetMD4Data() const { if (m_dataType != EC_TAGTYPE_HASH16) { EC_ASSERT(m_dataType == EC_TAGTYPE_UNKNOWN); return CMD4Hash(); } EC_ASSERT(m_tagData != NULL); // Doesn't matter if m_tagData is NULL in CMD4Hash(), // that'll just result in an empty hash. return CMD4Hash((const unsigned char *)m_tagData); } /** * Returns an EC_IPv4_t class. * * This function takes care of the endianness of the port number. * * @return EC_IPv4_t class. * * @see CECTag(ec_tagname_t, const EC_IPv4_t&) */ EC_IPv4_t CECTag::GetIPv4Data() const { EC_IPv4_t p(0, 0); if (m_dataType != EC_TAGTYPE_IPV4) { EC_ASSERT(m_dataType == EC_TAGTYPE_UNKNOWN); } else if (m_tagData == NULL) { EC_ASSERT(false); } else { // ADUNANZA BEGIN // Backport #if 0 RawPokeUInt32( p.m_ip, RawPeekUInt32( ((EC_IPv4_t *)m_tagData)->m_ip ) ); p.m_port = ENDIAN_NTOHS(((EC_IPv4_t *)m_tagData)->m_port); #else RawPokeUInt32( p.m_ip, RawPeekUInt32( reinterpret_cast(m_tagData)->m_ip ) ); p.m_port = ENDIAN_NTOHS(reinterpret_cast(m_tagData)->m_port); #endif // ADUNANZA END } return p; } /** * Returns a double value. * * @note The returned value is what we get by converting the string form * of the number to a double. * * @return The double value of the tag. * * @see CECTag(ec_tagname_t, double) */ double CECTag::GetDoubleData(void) const { if (m_dataType != EC_TAGTYPE_DOUBLE) { EC_ASSERT(m_dataType == EC_TAGTYPE_UNKNOWN); return 0; } else if (m_tagData == NULL) { EC_ASSERT(false); return 0; } std::istringstream double_str(m_tagData); double data; double_str >> data; return data; } void CECTag::ConstructStringTag(ec_tagname_t name, const std::string& data) { m_tagName = name; m_dataLen = (ec_taglen_t)strlen(data.c_str()) + 1; NewData(); memcpy(m_tagData, data.c_str(), m_dataLen); m_dataType = EC_TAGTYPE_STRING; } void CECTag::SetStringData(const wxString& s) { if (IsString()) { delete [] m_tagData; ConstructStringTag(m_tagName, (const char*)unicode2UTF8(s)); } } bool CECTag::AssignIfExist(ec_tagname_t tagname, bool *target) const { bool ret = false; const CECTag *tag = GetTagByName(tagname); if (tag) { ret = tag->GetInt() > 0; if (target) { *target = ret; } } return ret; } bool CECTag::AssignIfExist(ec_tagname_t tagname, bool &target) const { const CECTag *tag = GetTagByName(tagname); if (tag) { target = tag->GetInt() > 0; return true; } return false; } uint8_t CECTag::AssignIfExist(ec_tagname_t tagname, uint8_t *target) const { uint8_t ret = 0; const CECTag *tag = GetTagByName(tagname); if (tag) { EC_ASSERT((tag->GetType() == EC_TAGTYPE_UINT8) || (m_dataType == EC_TAGTYPE_UNKNOWN)); ret = tag->GetInt(); if (target) { *target = ret; } } return ret; } bool CECTag::AssignIfExist(ec_tagname_t tagname, uint8_t &target) const { const CECTag *tag = GetTagByName(tagname); if (tag) { EC_ASSERT((tag->GetType() == EC_TAGTYPE_UINT8) || (m_dataType == EC_TAGTYPE_UNKNOWN)); target = tag->GetInt(); return true; } return false; } uint16_t CECTag::AssignIfExist(ec_tagname_t tagname, uint16_t *target) const { uint16_t ret = 0; const CECTag *tag = GetTagByName(tagname); if (tag) { EC_ASSERT( (tag->GetType() == EC_TAGTYPE_UINT16) || (tag->GetType() == EC_TAGTYPE_UINT8) || (m_dataType == EC_TAGTYPE_UNKNOWN) ); ret = tag->GetInt(); if (target) { *target = ret; } } return ret; } bool CECTag::AssignIfExist(ec_tagname_t tagname, uint16_t &target) const { const CECTag *tag = GetTagByName(tagname); if (tag) { EC_ASSERT( (tag->GetType() == EC_TAGTYPE_UINT16) || (tag->GetType() == EC_TAGTYPE_UINT8) || (m_dataType == EC_TAGTYPE_UNKNOWN) ); target = tag->GetInt(); return true; } return false; } uint32_t CECTag::AssignIfExist(ec_tagname_t tagname, uint32_t *target) const { uint32_t ret = 0; const CECTag *tag = GetTagByName(tagname); if (tag) { EC_ASSERT( (tag->GetType() == EC_TAGTYPE_UINT32) || (tag->GetType() == EC_TAGTYPE_UINT16) || (tag->GetType() == EC_TAGTYPE_UINT8) || (m_dataType == EC_TAGTYPE_UNKNOWN) ); ret = tag->GetInt(); if (target) { *target = ret; } } return ret; } bool CECTag::AssignIfExist(ec_tagname_t tagname, uint32_t &target) const { const CECTag *tag = GetTagByName(tagname); if (tag) { EC_ASSERT( (tag->GetType() == EC_TAGTYPE_UINT32) || (tag->GetType() == EC_TAGTYPE_UINT16) || (tag->GetType() == EC_TAGTYPE_UINT8) || (m_dataType == EC_TAGTYPE_UNKNOWN) ); target = tag->GetInt(); return true; } return false; } uint64_t CECTag::AssignIfExist(ec_tagname_t tagname, uint64_t *target) const { uint64_t ret = 0; const CECTag *tag = GetTagByName(tagname); if (tag) { ret = tag->GetInt(); if (target) { *target = ret; } } return ret; } bool CECTag::AssignIfExist(ec_tagname_t tagname, uint64_t &target) const { const CECTag *tag = GetTagByName(tagname); if (tag) { target = tag->GetInt(); return true; } return false; } time_t CECTag::AssignIfExist(ec_tagname_t tagname, time_t *target) const { time_t ret = 0; const CECTag *tag = GetTagByName(tagname); if (tag) { ret = tag->GetInt(); if (target) { *target = ret; } } return ret; } bool CECTag::AssignIfExist(ec_tagname_t tagname, time_t &target) const { const CECTag *tag = GetTagByName(tagname); if (tag) { target = tag->GetInt(); return true; } return false; } double CECTag::AssignIfExist(ec_tagname_t tagname, double *target) const { double ret = 0.0; const CECTag *tag = GetTagByName(tagname); if (tag) { ret = tag->GetDoubleData(); if (target) { *target = ret; } } return ret; } bool CECTag::AssignIfExist(ec_tagname_t tagname, double &target) const { const CECTag *tag = GetTagByName(tagname); if (tag) { target = tag->GetDoubleData(); return true; } return false; } float CECTag::AssignIfExist(ec_tagname_t tagname, float *target) const { float ret = 0.0; const CECTag *tag = GetTagByName(tagname); if (tag) { ret = tag->GetDoubleData(); if (target) { *target = ret; } } return ret; } bool CECTag::AssignIfExist(ec_tagname_t tagname, float &target) const { const CECTag *tag = GetTagByName(tagname); if (tag) { target = tag->GetDoubleData(); return true; } return false; } CMD4Hash CECTag::AssignIfExist(ec_tagname_t tagname, CMD4Hash *target) const { CMD4Hash ret; const CECTag *tag = GetTagByName(tagname); if (tag) { ret = tag->GetMD4Data(); if (target) { *target = ret; } } return ret; } bool CECTag::AssignIfExist(ec_tagname_t tagname, CMD4Hash &target) const { const CECTag *tag = GetTagByName(tagname); if (tag) { target = tag->GetMD4Data(); return true; } return false; } std::string CECTag::AssignIfExist(ec_tagname_t tagname, std::string *target) const { std::string ret; const CECTag *tag = GetTagByName(tagname); if (tag) { ret = tag->GetStringDataSTL(); if (target) { *target = ret; } } return ret; } bool CECTag::AssignIfExist(ec_tagname_t tagname, std::string &target) const { const CECTag *tag = GetTagByName(tagname); if (tag) { target = tag->GetStringDataSTL(); return true; } return false; } #ifdef USE_WX_EXTENSIONS wxString CECTag::AssignIfExist(ec_tagname_t tagname, wxString *target) const { wxString ret; const CECTag *tag = GetTagByName(tagname); if (tag) { ret = tag->GetStringData(); if (target) { *target = ret; } } return ret; } bool CECTag::AssignIfExist(ec_tagname_t tagname, wxString &target) const { const CECTag *tag = GetTagByName(tagname); if (tag) { target = tag->GetStringData(); return true; } return false; } #endif #ifdef __DEBUG__ void CECTag::DebugPrint(int level, bool print_empty) const { if (m_dataLen || print_empty) { wxString space; for (int i = level; i--;) space += wxT(" "); wxString s1 = CFormat(wxT("%s%s %d = ")) % space % GetDebugNameECTagNames(m_tagName) % m_dataLen; wxString s2; switch (m_tagName) { case EC_TAG_DETAIL_LEVEL: s2 = GetDebugNameEC_DETAIL_LEVEL(GetInt()); break; case EC_TAG_SEARCH_TYPE: s2 = GetDebugNameEC_SEARCH_TYPE(GetInt()); break; case EC_TAG_STAT_VALUE_TYPE: s2 = GetDebugNameEC_STATTREE_NODE_VALUE_TYPE(GetInt()); break; default: switch (m_dataType) { case EC_TAGTYPE_UINT8: case EC_TAGTYPE_UINT16: case EC_TAGTYPE_UINT32: case EC_TAGTYPE_UINT64: s2 = CFormat(wxT("%d")) % GetInt(); break; case EC_TAGTYPE_STRING: s2 = GetStringData(); break; case EC_TAGTYPE_DOUBLE: s2 = CFormat(wxT("%.1f")) % GetDoubleData(); break; case EC_TAGTYPE_HASH16: s2 = GetMD4Data().Encode(); break; case EC_TAGTYPE_CUSTOM: if (m_dataLen == 0) { s2 = wxT("empty"); } else { // Make a hex dump (limited to maxOutput) const uint32 maxOutput = 50; for (uint32 i = 0; i < m_dataLen; i++) { if (i == maxOutput) { s2 += wxT("..."); break; } s2 += CFormat(wxT("%02X ")) % (unsigned char) m_tagData[i]; } } break; default: s2 = GetDebugNameECTagTypes(m_dataType); } } DoECLogLine(s1 + s2); } for (TagList::const_iterator it = m_tagList.begin(); it != m_tagList.end(); ++it) { it->DebugPrint(level + 1, true); } } #endif /*! * \fn CMD4Hash CECTag::GetMD4Data(void) const * * \brief Returns a CMD4Hash class. * * This function takes care of converting from MSB to LSB as necessary. * * \return CMD4Hash class. * * \sa CECTag(ec_tagname_t, const CMD4Hash&) */ /*! * \fn CECTag *CECTag::GetTagByIndex(size_t index) const * * \brief Finds the indexth child tag. * * \param index 0-based index, 0 <= \e index < GetTagCount() * * \return The child tag, or NULL if index out of range. */ /*! * \fn CECTag *CECTag::GetTagByIndexSafe(size_t index) const * * \brief Finds the indexth child tag. * * \param index 0-based index, 0 <= \e index < GetTagCount() * * \return The child tag, or a special null-valued tag if index out of range. */ /*! * \fn size_t CECTag::GetTagCount(void) const * * \brief Returns the number of child tags. * * \return The number of child tags. */ /*! * \fn const void *CECTag::GetTagData(void) const * * \brief Returns a pointer to the TAG DATA. * * \return A pointer to the TAG DATA. (As specified with the data field of the constructor.) */ /*! * \fn uint16 CECTag::GetTagDataLen(void) const * * \brief Returns the length of the data buffer. * * \return The length of the data buffer. */ /*! * \fn ec_tagname_t CECTag::GetTagName(void) const * * \brief Returns TAGNAME. * * \return The name of the tag. */ /*! * \fn wxString CECTag::GetStringData(void) const * * \brief Returns the string data of the tag. * * Returns a wxString created from TAGDATA. It is automatically * converted from UTF-8 to the internal application encoding. * Should be used with care (only on tags created with the * CECTag(ec_tagname_t, const wxString&) constructor), * becuse it does not perform any check to see if the tag really contains a * string object. * * \return The string data of the tag. * * \sa CECTag(ec_tagname_t, const wxString&) */ /*! * \fn uint8 CECTag::GetInt(void) const * * \brief Returns the uint8 data of the tag. * * This function takes care of the endianness problems with numbers. * * \return The uint8 data of the tag. * * \sa CECTag(ec_tagname_t, uint8) */ /*! * \fn uint16 CECTag::GetInt(void) const * * \brief Returns the uint16 data of the tag. * * This function takes care of the endianness problems with numbers. * * \return The uint16 data of the tag. * * \sa CECTag(ec_tagname_t, uint16) */ /*! * \fn uint32 CECTag::GetInt(void) const * * \brief Returns the uint32 data of the tag. * * This function takes care of the endianness problems with numbers. * * \return The uint32 data of the tag. * * \sa CECTag(ec_tagname_t, uint32) */ /*! * \fn uint64 CECTag::GetInt(void) const * * \brief Returns the uint64 data of the tag. * * This function takes care of the endianness problems with numbers. * * \return The uint64 data of the tag. * * \sa CECTag(ec_tagname_t, uint64) */ uint32 CECID::s_IDCounter = 0; // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/Makefile.in0000644000175000017500000005032312053222403022462 0ustar l3onl3on# Makefile.in generated by automake 1.11.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = src/libs/ec/cpp DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/GeoIP.m4 \ $(top_srcdir)/m4/build-tools.m4 $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/cryptopp.m4 $(top_srcdir)/m4/fallocate.m4 \ $(top_srcdir)/m4/gdlib.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/kde.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libpng.m4 $(top_srcdir)/m4/libupnp.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/plasmamule.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/qt.m4 $(top_srcdir)/m4/readline.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/wxwin.m4 \ $(top_srcdir)/m4/zlib.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libec_a_AR = $(AR) $(ARFLAGS) libec_a_LIBADD = am_libec_a_OBJECTS = ECTag.$(OBJEXT) ECPacket.$(OBJEXT) \ ECSocket.$(OBJEXT) ECMuleSocket.$(OBJEXT) \ RemoteConnect.$(OBJEXT) ECSpecialTags.$(OBJEXT) libec_a_OBJECTS = $(am_libec_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libec_a_SOURCES) DIST_SOURCES = $(libec_a_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) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALCC_MANPAGES = @ALCC_MANPAGES@ ALC_MANPAGES = @ALC_MANPAGES@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AMULECMD_MANPAGES = @AMULECMD_MANPAGES@ AMULEWEB_DEFS = @AMULEWEB_DEFS@ AMULE_DAEMON_MANPAGES = @AMULE_DAEMON_MANPAGES@ AMULE_GUI_MANPAGES = @AMULE_GUI_MANPAGES@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_CPPFLAGS = @BFD_CPPFLAGS@ BFD_LIBS = @BFD_LIBS@ BUILD_CC = @BUILD_CC@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CAS_DEFS = @CAS_DEFS@ CAS_MANPAGES = @CAS_MANPAGES@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CRYPTOPP_CPPFLAGS = @CRYPTOPP_CPPFLAGS@ CRYPTOPP_LDFLAGS = @CRYPTOPP_LDFLAGS@ CRYPTOPP_LIBS = @CRYPTOPP_LIBS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEBUGFLAG = @DEBUGFLAG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ED2K_MANPAGES = @ED2K_MANPAGES@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDLIB_CFLAGS = @GDLIB_CFLAGS@ GDLIB_CONFIG_PATH = @GDLIB_CONFIG_PATH@ GDLIB_LDFLAGS = @GDLIB_LDFLAGS@ GDLIB_LIBS = @GDLIB_LIBS@ GENCAT = @GENCAT@ GEOIP_CPPFLAGS = @GEOIP_CPPFLAGS@ GEOIP_LDFLAGS = @GEOIP_LDFLAGS@ GEOIP_LIBS = @GEOIP_LIBS@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INCINTL = @INCINTL@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ KDE4_CONFIG = @KDE4_CONFIG@ KDE_APPLNK_PATH = @KDE_APPLNK_PATH@ KDE_HEADER_DIR = @KDE_HEADER_DIR@ KDE_ICON_PATH = @KDE_ICON_PATH@ KDE_MIME_PATH = @KDE_MIME_PATH@ KDE_MODULE_PATH = @KDE_MODULE_PATH@ KDE_SERVICE_PATH = @KDE_SERVICE_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ LIBPNG_CONFIG_PATH = @LIBPNG_CONFIG_PATH@ LIBPNG_LDFLAGS = @LIBPNG_LDFLAGS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBUPNP_CFLAGS = @LIBUPNP_CFLAGS@ LIBUPNP_CPPFLAGS = @LIBUPNP_CPPFLAGS@ LIBUPNP_LDFLAGS = @LIBUPNP_LDFLAGS@ LIBUPNP_LIBS = @LIBUPNP_LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONOLITHIC_MANPAGES = @MONOLITHIC_MANPAGES@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MULECFLAGS = @MULECFLAGS@ MULECPPFLAGS = @MULECPPFLAGS@ MULECXXFLAGS = @MULECXXFLAGS@ MULELDFLAGS = @MULELDFLAGS@ MULERCFLAGS = @MULERCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ QT_CORE_CXXFLAGS = @QT_CORE_CXXFLAGS@ QT_CORE_LIBS = @QT_CORE_LIBS@ QT_DBUS_LDFLAGS = @QT_DBUS_LDFLAGS@ QT_GUI_CXXFLAGS = @QT_GUI_CXXFLAGS@ QT_GUI_LIBS = @QT_GUI_LIBS@ QT_MOC = @QT_MOC@ RANLIB = @RANLIB@ RC = @RC@ RCFLAGS = @RCFLAGS@ READLINE_LIBS = @READLINE_LIBS@ RESOLV_LIB = @RESOLV_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SVNDATE = @SVNDATE@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBSERVER_MANPAGES = @WEBSERVER_MANPAGES@ WXBASE_CPPFLAGS = @WXBASE_CPPFLAGS@ WXBASE_LIBS = @WXBASE_LIBS@ WXCAS_MANPAGES = @WXCAS_MANPAGES@ WX_CFLAGS = @WX_CFLAGS@ WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ WX_CONFIG_PATH = @WX_CONFIG_PATH@ WX_CPPFLAGS = @WX_CPPFLAGS@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ WX_DEBUG = @WX_DEBUG@ WX_LIBS = @WX_LIBS@ WX_PORT = @WX_PORT@ WX_RESCOMP = @WX_RESCOMP@ WX_SHARED = @WX_SHARED@ WX_UNICODE = @WX_UNICODE@ WX_VERSION_FULL = @WX_VERSION_FULL@ WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ WX_VERSION_MINOR = @WX_VERSION_MINOR@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@ ZLIB_LDFLAGS = @ZLIB_LDFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_BUILD_CC = @ac_ct_BUILD_CC@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ 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@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = $(MULECPPFLAGS) -I$(top_srcdir)/src -I$(top_srcdir)/src/libs -I$(top_srcdir)/src/include $(WXBASE_CPPFLAGS) $(ZLIB_CPPFLAGS) AM_CXXFLAGS = $(MULECXXFLAGS) $(WX_CFLAGS_ONLY) $(WX_CXXFLAGS_ONLY) EXTRA_DIST = gen_ECVersion # Sources noinst_LIBRARIES = \ libec.a libec_a_SOURCES = \ ECTag.cpp \ ECPacket.cpp \ ECSocket.cpp \ ECMuleSocket.cpp \ RemoteConnect.cpp \ ECSpecialTags.cpp noinst_HEADERS = \ ECTag.h \ ECSocket.h \ ECMuleSocket.h \ ECPacket.h \ ECFileConfig.h \ ECSpecialTags.h \ ECCodes.h \ ECTagTypes.h \ ECID.h \ RemoteConnect.h MAINTAINERCLEANFILES = Makefile.in BUILT_SOURCES = ECVersion.h CLEANFILES = ECVersion.h EC-timestamp mkFileSum$(BUILD_EXEEXT) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libs/ec/cpp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/libs/ec/cpp/Makefile .PRECIOUS: 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libec.a: $(libec_a_OBJECTS) $(libec_a_DEPENDENCIES) $(EXTRA_libec_a_DEPENDENCIES) $(AM_V_at)-rm -f libec.a $(AM_V_AR)$(libec_a_AR) libec.a $(libec_a_OBJECTS) $(libec_a_LIBADD) $(AM_V_at)$(RANLIB) libec.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ECMuleSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ECPacket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ECSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ECSpecialTags.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ECTag.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RemoteConnect.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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 CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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: -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) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am mkFileSum$(BUILD_EXEEXT): $(top_srcdir)/src/utils/mkFileSum.c $(BUILD_CC) $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $^ -o $@ ECVersion.h: EC-timestamp @if test ! -f $@; then \ rm -f EC-timestamp; \ $(MAKE) EC-timestamp; \ else :; fi EC-timestamp: mkFileSum$(BUILD_EXEEXT) $(top_srcdir)/src/libs/ec/cpp/gen_ECVersion $(top_srcdir)/src/libs/ec/cpp/ECCodes.h @echo "ECVersion.h timestamp file" > EC-timestamp @$(top_srcdir)/src/libs/ec/cpp/gen_ECVersion $(top_srcdir) # 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: amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECTag.h0000644000175000017500000002053512050266603021522 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef ECTAG_H #define ECTAG_H #include #include // Must be first! #ifdef USE_WX_EXTENSIONS #include // Do_not_auto_remove #include #define EC_ASSERT(x) wxASSERT(x) #else #define EC_ASSERT(x) assert(x) #endif /* aMule/libcommon generic includes */ #include "../../../MD4Hash.h" // Needed for CMD4Hash /* EC specific includes */ #include "ECCodes.h" // Needed for EC types #include "ECTagTypes.h" // Needed for TagTypes class CECSocket; class CValueMap; /** * Class to hold IPv4 address. */ class EC_IPv4_t { public: EC_IPv4_t() { } EC_IPv4_t(uint32 ip, uint16 port) { m_ip[0] = ip & 0xff; m_ip[1] = (ip >> 8) & 0xff; m_ip[2] = (ip >> 16) & 0xff; m_ip[3] = (ip >> 24) & 0xff; m_port = port; } uint32 IP() { return m_ip[0] | (m_ip[1] << 8) | (m_ip[2] << 16) | (m_ip[3] << 24); } std::string StringIPSTL(bool brackets = true) { std::ostringstream string_ip; if (brackets) string_ip << "["; string_ip << (int)m_ip[0] << "." << (int)m_ip[1] << "." << (int)m_ip[2] << "." << (int)m_ip[3] << ":" << m_port; if (brackets) string_ip << "]"; return string_ip.str(); } #ifdef USE_WX_EXTENSIONS wxString StringIP(bool brackets = true) { return char2unicode(StringIPSTL(brackets).c_str()); } #endif uint8 m_ip[4]; uint16 m_port; }; /** * High level EC packet TAGs handler class */ class CECTag { public: CECTag(ec_tagname_t name, unsigned int length, const void *data); // tag for custom data: just init object, alloc buffer and return pointer CECTag(ec_tagname_t name, unsigned int length, void **dataptr); // Routines for special data types. CECTag(ec_tagname_t name, bool data); CECTag(ec_tagname_t name, uint8_t data); CECTag(ec_tagname_t name, uint16_t data); CECTag(ec_tagname_t name, uint32_t data); CECTag(ec_tagname_t name, uint64_t data); CECTag(ec_tagname_t name, double data); CECTag(ec_tagname_t name, const std::string& data); CECTag(ec_tagname_t name, const EC_IPv4_t& data); CECTag(ec_tagname_t name, const CMD4Hash& data); #ifdef USE_WX_EXTENSIONS CECTag(ec_tagname_t name, const wxString& data); CECTag(ec_tagname_t name, const wxChar* data); #endif CECTag(ec_tagname_t name, const char* data) { ConstructStringTag(name, data); } CECTag(); CECTag(const CECTag& tag); ~CECTag(void); CECTag& operator=(const CECTag& rhs); bool operator==(const CECTag& tag) const; bool operator!=(const CECTag& tag) const { return !(*this == tag); } bool AddTag(const CECTag& tag, CValueMap* valuemap = NULL); void AddTag(ec_tagname_t name, uint64_t data, CValueMap* valuemap = NULL); void AddTag(ec_tagname_t name, const CMD4Hash& data, CValueMap* valuemap); #ifdef USE_WX_EXTENSIONS void AddTag(ec_tagname_t name, const wxString& data, CValueMap* valuemap = NULL); #endif const CECTag* GetFirstTagSafe() const { return m_tagList.empty() ? &s_theNullTag : & *m_tagList.begin(); } const CECTag* GetTagByName(ec_tagname_t name) const; CECTag* GetTagByName(ec_tagname_t name); const CECTag* GetTagByNameSafe(ec_tagname_t name) const; size_t GetTagCount() const { return m_tagList.size(); } bool HasChildTags() const { return !m_tagList.empty(); } const void * GetTagData() const { EC_ASSERT(m_dataType == EC_TAGTYPE_CUSTOM); return m_tagData; } uint16_t GetTagDataLen() const { return m_dataLen; } uint32_t GetTagLen() const; ec_tagname_t GetTagName() const { return m_tagName; } // Retrieving special data types uint64_t GetInt() const; bool IsInt() const { return m_dataType >= EC_TAGTYPE_UINT8 && m_dataType <= EC_TAGTYPE_UINT64; } double GetDoubleData() const; std::string GetStringDataSTL() const; bool IsString() const { return m_dataType == EC_TAGTYPE_STRING; } #ifdef USE_WX_EXTENSIONS wxString GetStringData() const; void SetStringData(const wxString& s); #endif EC_IPv4_t GetIPv4Data() const; CMD4Hash GetMD4Data() const; void DebugPrint(int level, bool print_empty) const; void swap(CECTag & t); // If tag exists, return its value and store it in target (if target != NULL) // Else return safe value and don't touch target // Allows for one function for old and new style. bool AssignIfExist(ec_tagname_t tagname, bool *target) const; uint8_t AssignIfExist(ec_tagname_t tagname, uint8_t *target) const; uint16_t AssignIfExist(ec_tagname_t tagname, uint16_t *target) const; uint32_t AssignIfExist(ec_tagname_t tagname, uint32_t *target) const; uint64_t AssignIfExist(ec_tagname_t tagname, uint64_t *target) const; time_t AssignIfExist(ec_tagname_t tagname, time_t *target) const; double AssignIfExist(ec_tagname_t tagname, double *target) const; float AssignIfExist(ec_tagname_t tagname, float *target) const; CMD4Hash AssignIfExist(ec_tagname_t tagname, CMD4Hash *target) const; std::string AssignIfExist(ec_tagname_t tagname, std::string *target) const; #ifdef USE_WX_EXTENSIONS wxString AssignIfExist(ec_tagname_t tagname, wxString *target) const; #endif // If tag exists, return true and store it in target // Else return false and don't touch target bool AssignIfExist(ec_tagname_t tagname, bool &target) const; bool AssignIfExist(ec_tagname_t tagname, uint8_t &target) const; bool AssignIfExist(ec_tagname_t tagname, uint16_t &target) const; bool AssignIfExist(ec_tagname_t tagname, uint32_t &target) const; bool AssignIfExist(ec_tagname_t tagname, uint64_t &target) const; bool AssignIfExist(ec_tagname_t tagname, time_t &target) const; bool AssignIfExist(ec_tagname_t tagname, double &target) const; bool AssignIfExist(ec_tagname_t tagname, float &target) const; bool AssignIfExist(ec_tagname_t tagname, CMD4Hash &target) const; bool AssignIfExist(ec_tagname_t tagname, std::string &target) const; #ifdef USE_WX_EXTENSIONS bool AssignIfExist(ec_tagname_t tagname, wxString &target) const; #endif protected: uint8_t GetType() const { return m_dataType; } bool ReadFromSocket(CECSocket& socket); bool WriteTag(CECSocket& socket) const; bool ReadChildren(CECSocket& socket); bool WriteChildren(CECSocket& socket) const; private: // To init. the automatic int data void InitInt(uint64_t data); ec_tagname_t m_tagName; ec_tagtype_t m_dataType; ec_taglen_t m_dataLen; char * m_tagData; void NewData() { m_tagData = new char[m_dataLen]; } typedef std::list TagList; TagList m_tagList; static const CECTag s_theNullTag; // To be used by the string constructors. void ConstructStringTag(ec_tagname_t name, const std::string& data); public: // Iteration through child tags typedef TagList::const_iterator const_iterator; const_iterator begin() const { return m_tagList.begin(); } const_iterator end() const { return m_tagList.end(); } }; /** * An empty TAG * * Note, that an "empty" tag is empty because it contains no data, but it still * may contain children. */ class CECEmptyTag : public CECTag { public: CECEmptyTag(ec_tagname_t name = 0) : CECTag(name, 0, (const void *) NULL) {} }; /** * An integer TAG * * This is just to easily overcome ctor ambiguity. It's prettier to write * CECIntTag(name, some_value) * instead of * CECTag(name, (uint64)value) */ class CECIntTag : public CECTag { public: CECIntTag(ec_tagname_t name, uint64 data) : CECTag(name, data) {} }; #endif /* ECTAG_H */ // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/RemoteConnect.h0000644000175000017500000002467012050266603023350 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef REMOTECONNECT_H #define REMOTECONNECT_H #include "ECMuleSocket.h" #include "ECPacket.h" // Needed for CECPacket class CECPacketHandlerBase { public: virtual ~CECPacketHandlerBase() { } virtual void HandlePacket(const CECPacket *) = 0; }; class CECLoginPacket : public CECPacket { public: CECLoginPacket(const wxString& client, const wxString& version, bool canZLIB = true, bool canUTF8numbers = true, bool canNotify = false); }; class CECAuthPacket : public CECPacket { public: CECAuthPacket(const wxString& pass); }; //#warning Kry TODO - move to abstract layer. class CRemoteConnect : public CECMuleSocket { private: // State enums for connection SM ( client side ) in case of async processing enum { EC_INIT, // initial state EC_CONNECT_SENT, // socket connect request sent EC_REQ_SENT, // sent auth request to core, waiting for reply EC_SALT_RECEIVED,// received salt from core EC_PASSWD_SENT, // sent password to core, waiting for OK EC_OK, // core replied "ok" EC_FAIL // core replied "bad" } m_ec_state; // fifo of handlers for on-the-air requests. all EC concept is working in fcfs // order, so it is ok to assume that order of replies is same as order of requests std::list m_req_fifo; int m_req_count; int m_req_fifo_thr; wxEvtHandler* m_notifier; wxString m_connectionPassword; wxString m_server_reply; wxString m_client; wxString m_version; bool m_canZLIB; bool m_canUTF8numbers; bool m_canNotify; void WriteDoneAndQueueEmpty(); public: // The event handler is used for notifying connect/close CRemoteConnect(wxEvtHandler* evt_handler); void SetCapabilities(bool canZLIB, bool canUTF8numbers, bool canNotify); bool ConnectToCore( const wxString &host, int port, const wxString& login, const wxString &pass, const wxString& client, const wxString& version); const wxString& GetServerReply() const { return m_server_reply; } bool RequestFifoFull() { return m_req_count > m_req_fifo_thr; } virtual void OnConnect(); // To override connection events virtual void OnLost(); // To override close events void SendRequest(CECPacketHandlerBase *handler, const CECPacket *request); void SendPacket(const CECPacket *request); /********************* EC API ********************/ /* Misc */ // Shuts down aMule void ShutDown(); // Handles a ED2K link void Ed2kLink(wxString* link); /* Kad */ // Connects Kad network void StartKad(); // Disconnects Kad network void StopKad(); /* ED2K */ // Connects to ED2K. If ip and port are not 0, connect // to the specific port. Otherwise, connect to any. void ConnectED2K(uint32 ip, uint16 port); // Disconnects from ED2K void DisconnectED2K(); /* Servers */ // Adds a server void AddServer(uint32 ip, uint16 port); // Remove specific server // Returns: Error message or empty string for no error void RemoveServer(uint32 ip, uint16 port); // Returns ED2K server list void GetServerList(); // Updates ED2K server from a URL void UpdateServerList(wxString url); /* Search */ // Starts new search void StartSearch(); // Stops current search void StopSearch(); // Returns search progress in %% void GetSearchProgress(); // Add 1 or more of found files to download queue void DownloadSearchResult(uint32* file); /* Statistics */ // Returns aMule statistics void GetStatistics(); // Returns aMule connection status void GetConnectionState(); /* Queue/File handling */ // Returns downloads queue void GetDlQueue(CMD4Hash* file); // Returns uploads queue void GetUpQueue(CMD4Hash* file); // Returns waiting queue void GetWtQueue(CMD4Hash* file); // Drops no needed sources void DropNoNeededSources(CMD4Hash* file); // Drops full queue sources void DropFullQueueSources(CMD4Hash* file); // Drops high queue rating sources void DropHighQueueSources(CMD4Hash* file); // Cleans up sources void CleanUpSources(CMD4Hash* file); // Swaps A4AF to a file void SwapA4AFThis(CMD4Hash* file); // Swaps A4AF to a file (auto) void SwapA4AFThisAuto(CMD4Hash* file); // Swaps A4AF to any other files void SwapA4AFOthers(CMD4Hash* file); // Pauses download(s) void Pause(CMD4Hash* file); // Resumes download(s) void Resume(CMD4Hash* file); // Stops download(s) void Stop(CMD4Hash* file); // Sets priority for a download void SetPriority(CMD4Hash* file, uint8 priority); // Deletes a download void Delete(CMD4Hash* file); // Sets category for a download void SetCategory(CMD4Hash* file, wxString category); /* Shared files */ // Returns a list of shared files void GetSharedFiles(); // Sets priority for 1 or more shared files void SetSharedPriority(CMD4Hash* file, uint8 priority); // Reloads shared file list void ReloadSharedFiles(); // Adds a directory to shared file list void AddDirectoryToSharedFiles(wxString dir); // Renames a file void RenameFile(CMD4Hash file, wxString name); /* Logging */ // Adds a new debug log line void AddLogline(); // Adds a new debug log line void AddDebugLogLine(); // Retrieves the log void GetLog(); // Returns the last log line. void GetLastLogLine(); // Retrieves the debug log void GetDebugLog(); // Retrieves the server info log void GetServerInfo(); // Clears the log void ClearLog(); // Clears the debug log void ClearDebugLog(); // Clears server info log void ClearServerInfo(); /* Preferences */ // Request for Preferences void GetPreferences(); // Setting the preferences void SetPreferencesCategories(); void SetPreferencesGeneral(wxString userNick, CMD4Hash userHash); void SetPreferencesConnections(uint32 LineDownloadCapacity, uint32 LineUploadCapacity, uint16 MaxDownloadSpeed, uint16 MaxUploadSpeed, uint16 UploadSlotAllocation, uint16 TCPPort, uint16 UDPPort, bool DisableUDP, uint16 MaxSourcesPerFile, uint16 MaxConnections, bool EnableAutoConnect, bool EnableReconnect, bool EnableNetworkED2K, bool EnableNetworkKademlia); void SetPreferencesMessageFilter(bool Enabled, bool FilterAll, bool AllowFromFriends, bool FilterFromUnknownClients, bool FilterByKeyword, wxString Keywords); void SetPreferencesRemoteCrtl(bool RunOnStartup, uint16 Port, bool Guest, CMD4Hash GuestPasswdHash, bool UseGzip, uint32 RefreshInterval, wxString Template); void SetPreferencesOnlineSig(bool Enabled); void SetPreferencesServers(bool RemoveDeadServers, uint16 RetriesDeadServers, bool AutoUpdate, // bool URLList, TODO: Implement this! bool AddFromServer, bool AddFromClient, bool UsePrioritySystem, bool SmartLowIDCheck, bool SafeServerConnection, bool AutoConnectStaticOnly, bool ManualHighPriority); void SetPreferencesFiles(bool ICHEnabled, bool AIHCTrust, bool NewPaused, bool NewDownloadAutoPriority, bool PreviewPriority, bool NewAutoULPriotiry, bool UploadFullChunks, bool StartNextPaused, bool ResumeSameCategory, bool SaveSources, bool ExtractMetadata, bool AllocateFullChunks, bool AllocateFullSize, bool CheckFreeSpace, uint32 MinFreeSpace); void SetPreferencesSrcDrop(uint8 NoNeeded, bool DropFQS, bool DropHQRS, uint16 HQRSValue, uint16 AutodropTimer); void SetPreferencesDirectories(); void SetPreferencesStatistics(); void SetPreferencesSecurity(uint8 CanSeeShares, uint32 FilePermissions, uint32 DirPermissions, bool IPFilterEnabled, bool IPFilterAutoUpdate, wxString IPFilterUpdateURL, uint8 IPFilterLevel, bool IPFilterFilterLAN, bool UseSecIdent); void SetPreferencesCoreTweaks(uint16 MaxConnectionsPerFive, bool Verbose, uint32 FileBuffer, uint32 ULQueue, uint32 SRVKeepAliveTimeout); // Creates new category void CreateCategory(uint32 category, wxString title, wxString folder, wxString comment, uint32 color, uint8 priority); // Updates existing category void UpdateCategory(uint32 category, wxString title, wxString folder, wxString comment, uint32 color, uint8 priority); // Deletes existing category void DeleteCategory(uint32 category); // Retrieves the statistics graphs void GetStatsGraphs(); // Retrieves the statistics tree void GetStatsTree(); // Check if connection goes to local machine bool IsConnectedToLocalHost(); private: virtual const CECPacket *OnPacketReceived(const CECPacket *packet, uint32 trueSize); bool ProcessAuthPacket(const CECPacket *reply); }; DECLARE_LOCAL_EVENT_TYPE(wxEVT_EC_CONNECTION, wxEVT_USER_FIRST + 1000) class wxECSocketEvent : public wxEvent { public: wxECSocketEvent(int id, int event_id) : wxEvent(event_id, id) {} wxECSocketEvent(int id) : wxEvent(-1, id) {} wxECSocketEvent(int id, bool result, const wxString& reply) : wxEvent(-1, id) { m_value = result; m_server_reply = reply; } wxEvent *Clone(void) const { return new wxECSocketEvent(*this); } bool GetResult() const { return m_value; } const wxString& GetServerReply() const { return m_server_reply; } private: bool m_value; wxString m_server_reply; }; #endif // REMOTECONNECT_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECSocket.h0000644000175000017500000002225312050266603022236 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2004-2011 Angel Vidal Veiga ( kry@users.sourceforge.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef ECSOCKET_H #define ECSOCKET_H #include // Needed for std::deque #include // Needed for std::auto_ptr // Do_not_auto_remove (mingw-gcc-3.4.5) #include #include #include // Needed for packet (de)compression #include "../../../Types.h" // Needed for uint32_t #include // Needed for wx/debug.h #include // Needed for wxASSERT enum ECSocketErrors { EC_ERROR_NOERROR, EC_ERROR_INVOP, EC_ERROR_IOERR, EC_ERROR_INVADDR, EC_ERROR_INVSOCK, EC_ERROR_NOHOST, EC_ERROR_INVPORT, EC_ERROR_WOULDBLOCK, EC_ERROR_TIMEDOUT, EC_ERROR_MEMERR, EC_ERROR_UNKNOWN }; class CECPacket; class CQueuedData; /*! \class CECSocket * * \brief Socket handler for External Communications (EC). * * CECSocket takes care of the transmission of EC packets */ class CECSocket{ friend class CECPacket; friend class CECTag; private: static const unsigned int EC_SOCKET_BUFFER_SIZE = 2048; static const unsigned int EC_HEADER_SIZE = 8; const bool m_use_events; // Output related data std::list m_output_queue; // zlib (deflation) buffers std::vector m_in_ptr; std::vector m_out_ptr; std::auto_ptr m_curr_rx_data; std::auto_ptr m_curr_tx_data; // This transfer only uint32_t m_rx_flags; uint32_t m_tx_flags; size_t m_bytes_needed; bool m_in_header; uint32_t m_curr_packet_len; z_stream m_z; protected: uint32_t m_my_flags; bool m_haveNotificationSupport; public: CECSocket(bool use_events); virtual ~CECSocket(); bool ConnectSocket(uint32_t ip, uint16_t port); void CloseSocket() { InternalClose(); } bool HaveNotificationSupport() const { return m_haveNotificationSupport; } /** * Sends an EC packet and returns immediately. * * @param packet The CECPacket packet to be sent. * * This is an asynchronous call, the function returns * immediately and the packet is sent on idle time. * * @note It's the caller's responsibilty to \c delete * the \e packet. */ void SendPacket(const CECPacket *packet); /** * Sends an EC packet and waits for a reply. * * @param request The CECPacket packet to be sent. * @return The reply packet for the request. * * Unlike SendPacket(), this call is synchronous and blocking. * The packet is sent immediately (or at least as soon as possible), * and the function does not return until a reply is received, * or a timeout encountered. * * The returned packet will be allocated on the heap with \c new, * or \c NULL is returned in case of an error (timeout). * * @note It's the caller's responsibilty to \c delete both * request and reply. * * @note OnPacketReceived() won't be called for packets * received via this function. */ const CECPacket *SendRecvPacket(const CECPacket *request); /** * Event handler function called when a new packet is received. * * @param packet The packet that has been received. * @return The reply packet or \c NULL if no reply needed. * * In this function the application should process the received * packet, and create a reply if necessary. The reply must be allocated * on the heap with \c new. If no reply is necessary, the return * value of the function should be \c NULL. The library will \c delete * both packets. * * @note This function won't be called for packets received via the * SendRecvPacket() function. */ virtual const CECPacket *OnPacketReceived(const CECPacket *packet, uint32 trueSize); /** * Get a message describing the error. * * @param error The code of the error for which a message should be returned. * @return The text descibing the error. */ virtual std::string GetLastErrorMsg(); /** * Error handler. * * This function is called when an error occurs. Use GetLastError() and * GetErrorMsg() to find out the nature of the error. * * The default error handler prints out an error message in debug builds, * and destroys the socket. */ virtual void OnError(); /** * Socket lost event handler. * * This function is called when the socket is lost (either because of a network * failure or because the remote end closed the socket gracefully). * * The default handler destroys the socket. */ virtual void OnLost(); /** * Event handler for connection events. * * This function is called when a connection attempt succeeds. */ virtual void OnConnect(); void OnInput(); void OnOutput(); bool WouldBlock() { return InternalGetLastError() == EC_ERROR_WOULDBLOCK; } bool GotError() { return InternalGetLastError() != EC_ERROR_NOERROR; } // ADUNANZA BEGIN // Backport #if 0 void SocketRead(void* ptr, size_t len) { InternalRead(ptr,len); } void SocketWrite(const void* ptr, size_t len) { InternalWrite(ptr,len); } #else uint32 SocketRead(void* ptr, size_t len) { return InternalRead(ptr,len); } uint32 SocketWrite(const void* ptr, size_t len) { return InternalWrite(ptr,len); } #endif // ADUNANZA END bool SocketError() { return InternalError() && GotError(); } bool SocketRealError(); // ADUNANZA BEGIN // Method removed // Backport #if 0 size_t GetLastCount() { return InternalLastCount(); } #endif // ADUNANZA END bool WaitSocketConnect(long secs = -1, long msecs = 0) { return InternalWaitOnConnect(secs,msecs); } bool WaitSocketWrite(long secs = -1, long msecs = 0) { return InternalWaitForWrite(secs,msecs); } bool WaitSocketRead(long secs = -1, long msecs = 0) { return InternalWaitForRead(secs,msecs); } bool IsSocketConnected() { return InternalIsConnected(); } void DestroySocket() { return InternalDestroy(); } bool DataPending(); private: const CECPacket *ReadPacket(); uint32 WritePacket(const CECPacket *packet); // These 4 methods are to be used by CECPacket & CECTag bool ReadNumber(void *buffer, size_t len); bool ReadBuffer(void *buffer, size_t len); bool ReadHeader(); bool WriteNumber(const void *buffer, size_t len); bool WriteBuffer(const void *buffer, size_t len); // Internal stuff bool FlushBuffers(); size_t ReadBufferFromSocket(void *buffer, size_t len); void WriteBufferToSocket(const void *buffer, size_t len); /* virtuals */ virtual void WriteDoneAndQueueEmpty() = 0; virtual bool InternalConnect(uint32_t ip, uint16_t port, bool wait) = 0; // ADUNANZA BEGIN // Backport (removed method) #if 0 virtual size_t InternalLastCount() = 0; #endif // ADUNANZA END virtual bool InternalWaitOnConnect(long secs = -1, long msecs = 0) = 0; virtual bool InternalWaitForWrite(long secs = -1, long msecs = 0) = 0; virtual bool InternalWaitForRead(long secs = -1, long msecs = 0) = 0; virtual int InternalGetLastError() = 0; virtual void InternalClose() = 0; virtual bool InternalError() = 0; // ADUNANZA BEGIN // Backport #if 0 virtual void InternalRead(void* ptr, size_t len) = 0; virtual void InternalWrite(const void* ptr, size_t len) = 0; #else virtual uint32 InternalRead(void* ptr, uint32 len) = 0; virtual uint32 InternalWrite(const void* ptr, uint32 len) = 0; #endif // ADUNANZA END virtual bool InternalIsConnected() = 0; virtual void InternalDestroy() = 0; // Was login succesfull ? virtual bool IsAuthorized() { return true; } }; class CQueuedData { std::vector m_data; unsigned char *m_rd_ptr, *m_wr_ptr; public: CQueuedData(size_t len) : m_data(len) { m_rd_ptr = m_wr_ptr = &m_data[0]; } ~CQueuedData() {} void Rewind() { m_rd_ptr = m_wr_ptr = &m_data[0]; } void Write(const void *data, size_t len); void WriteAt(const void *data, size_t len, size_t off); void Read(void *data, size_t len); /* * Pass pointers to zlib. From now on, no Read() calls are allowed */ void ToZlib(z_stream &m_z) { m_z.avail_in = (uInt)GetUnreadDataLength(); m_z.next_in = m_rd_ptr; } // ADUNANZA BEGIN // Backport #if 0 void WriteToSocket(CECSocket *sock); void ReadFromSocket(CECSocket *sock, size_t len); #else uint32 WriteToSocket(CECSocket *sock); uint32 ReadFromSocket(CECSocket *sock, size_t len); #endif // ADUNANZA END size_t ReadFromSocketAll(CECSocket *sock, size_t len); size_t GetLength() const; size_t GetDataLength() const; size_t GetRemLength() const; size_t GetUnreadDataLength() const; }; #endif // ECSOCKET_H amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECSpecialTags.cpp0000644000175000017500000001260412050266603023537 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ECTag.h" // Needed for CECTag #include "ECSpecialTags.h" // Needed for special EC tag creator classes #include // Needed for CFormat #include "../../../OtherFunctions.h" // Needed for CastXtoY #include "../../../Constants.h" // Needed for PS_* wxString CEC_PartFile_Tag::GetFileStatusString() const { uint8 nFileStatus = FileStatus(); if ((nFileStatus == PS_HASHING) || (nFileStatus == PS_WAITINGFORHASH)) { return _("Hashing"); } else { switch (nFileStatus) { case PS_COMPLETING: return _("Completing"); case PS_COMPLETE: return _("Complete"); case PS_PAUSED: return _("Paused"); case PS_ERROR: return _("Erroneous"); default: if (SourceXferCount() > 0) { return _("Downloading"); } else { return _("Waiting"); } } // if stopped } } // // Search request // CEC_Search_Tag::CEC_Search_Tag(const wxString &name, EC_SEARCH_TYPE search_type, const wxString &file_type, const wxString &extension, uint32 avail, uint64 min_size, uint64 max_size) : CECTag(EC_TAG_SEARCH_TYPE, (uint32)search_type) { AddTag(CECTag(EC_TAG_SEARCH_NAME, name)); AddTag(CECTag(EC_TAG_SEARCH_FILE_TYPE, file_type)); if ( !extension.IsEmpty() ) { AddTag(CECTag(EC_TAG_SEARCH_EXTENSION, extension)); } if ( avail ) { AddTag(CECTag(EC_TAG_SEARCH_AVAILABILITY, avail)); } if ( min_size != 0 ) { AddTag(CECTag(EC_TAG_SEARCH_MIN_SIZE, min_size)); } if ( max_size != 0 ) { AddTag(CECTag(EC_TAG_SEARCH_MAX_SIZE, max_size)); } } void FormatValue(CFormat& format, const CECTag* tag) { wxASSERT(tag->GetTagName() == EC_TAG_STAT_NODE_VALUE); wxString extra; const CECTag *tmp_tag = tag->GetTagByName(EC_TAG_STAT_NODE_VALUE); if (tmp_tag) { wxString tmp_fmt; const CECTag* tmp_vt = tmp_tag->GetTagByName(EC_TAG_STAT_VALUE_TYPE); EC_STATTREE_NODE_VALUE_TYPE tmp_valueType = tmp_vt != NULL ? (EC_STATTREE_NODE_VALUE_TYPE)tmp_vt->GetInt() : EC_VALUE_INTEGER; switch (tmp_valueType) { case EC_VALUE_INTEGER: tmp_fmt = wxT("%llu"); break; case EC_VALUE_DOUBLE: tmp_fmt = wxT("%.2f%%"); // it's used for percentages break; default: tmp_fmt = wxT("%s"); } CFormat tmp_format(wxT(" (") + tmp_fmt + wxT(")")); FormatValue(tmp_format, tmp_tag); extra = tmp_format.GetString(); } const CECTag* vt = tag->GetTagByName(EC_TAG_STAT_VALUE_TYPE); EC_STATTREE_NODE_VALUE_TYPE valueType = vt != NULL ? (EC_STATTREE_NODE_VALUE_TYPE)vt->GetInt() : EC_VALUE_INTEGER; switch (valueType) { case EC_VALUE_INTEGER: format = format % tag->GetInt(); break; case EC_VALUE_ISTRING: format = format % (CFormat(wxT("%u")) % tag->GetInt() + extra); break; case EC_VALUE_BYTES: format = format % (CastItoXBytes(tag->GetInt()) + extra); break; case EC_VALUE_ISHORT: format = format % (CastItoIShort(tag->GetInt()) + extra); break; case EC_VALUE_TIME: format = format % (CastSecondsToHM(tag->GetInt()) + extra); break; case EC_VALUE_SPEED: format = format % (CastItoSpeed(tag->GetInt()) + extra); break; case EC_VALUE_STRING: format = format % (wxGetTranslation(tag->GetStringData()) + extra); break; case EC_VALUE_DOUBLE: format = format % tag->GetDoubleData(); break; default: wxFAIL; } } wxString CEC_StatTree_Node_Tag::GetDisplayString() const { wxString en_label = GetStringData(); wxString my_label = wxGetTranslation(en_label); // This is needed for client names, for example if (my_label == en_label) { if (en_label.Right(4) == wxT(": %s")) { my_label = wxGetTranslation(en_label.Mid(0, en_label.Length() - 4)) + wxString(wxT(": %s")); } } CFormat label(my_label); // ADUNANZA BEGIN // back #if 0 for (const_iterator it = begin(); it != end(); it++) { #else for (const_iterator it = begin(); it != end(); ++it) { #endif // ADUNANZA END if (it->GetTagName() == EC_TAG_STAT_NODE_VALUE) { FormatValue(label, &*it); } } return label.GetString(); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECID.h0000644000175000017500000000275212050266603021304 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef ECID_H #define ECID_H #include "../../../Types.h" // Needed for uint32 /* * Class to create unique IDs for Objects transmitted through EC * (Partfiles, Knownfiles, clients...) */ class CECID { // the id uint32 m_ID; // counter to calculate unique ids (defined in ECTag.cpp) static uint32 s_IDCounter; public: CECID() { m_ID = ++s_IDCounter; } CECID(uint32 id) { m_ID = id; } uint32 ECID() const { return m_ID; } void RenewECID() { m_ID = ++s_IDCounter; } }; #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECMuleSocket.cpp0000644000175000017500000000737612050266603023425 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ECMuleSocket.h" #include "../../../NetworkFunctions.h" //-------------------- CECSocketHandler -------------------- #define EC_SOCKET_HANDLER (wxID_HIGHEST + 644) class CECMuleSocketHandler: public wxEvtHandler { public: CECMuleSocketHandler() {}; private: void SocketHandler(wxSocketEvent& event); DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(CECMuleSocketHandler, wxEvtHandler) EVT_SOCKET(EC_SOCKET_HANDLER, CECMuleSocketHandler::SocketHandler) END_EVENT_TABLE() void CECMuleSocketHandler::SocketHandler(wxSocketEvent& event) { CECSocket *socket = dynamic_cast(event.GetSocket()); wxCHECK_RET(socket, wxT("Socket event with a NULL socket!")); switch(event.GetSocketEvent()) { case wxSOCKET_LOST: socket->OnLost(); break; case wxSOCKET_INPUT: socket->OnInput(); break; case wxSOCKET_OUTPUT: socket->OnOutput(); break; case wxSOCKET_CONNECTION: socket->OnConnect(); break; default: // Nothing should arrive here... wxFAIL; break; } } static CECMuleSocketHandler g_ECSocketHandler; // // CECMuleSocket API - User interface functions // CECMuleSocket::CECMuleSocket(bool use_events) : CECSocket(use_events), wxSocketClient() { if ( use_events ) { SetEventHandler(g_ECSocketHandler, EC_SOCKET_HANDLER); SetNotify(wxSOCKET_CONNECTION_FLAG | wxSOCKET_INPUT_FLAG | wxSOCKET_OUTPUT_FLAG | wxSOCKET_LOST_FLAG); Notify(true); SetFlags(wxSOCKET_NOWAIT); } else { SetFlags(wxSOCKET_WAITALL | wxSOCKET_BLOCK); Notify(false); } } CECMuleSocket::~CECMuleSocket() { } bool CECMuleSocket::ConnectSocket(wxIPV4address& address) { return CECSocket::ConnectSocket(StringIPtoUint32(address.IPAddress()),address.Service()); } bool CECMuleSocket::InternalConnect(uint32_t ip, uint16_t port, bool wait) { wxIPV4address addr; addr.Hostname(Uint32toStringIP(ip)); addr.Service(port); return wxSocketClient::Connect(addr, wait); } int CECMuleSocket::InternalGetLastError() { switch(LastError()) { case wxSOCKET_NOERROR: return EC_ERROR_NOERROR; case wxSOCKET_INVOP: return EC_ERROR_INVOP; case wxSOCKET_IOERR: return EC_ERROR_IOERR; case wxSOCKET_INVADDR: return EC_ERROR_INVADDR; case wxSOCKET_INVSOCK: return EC_ERROR_INVSOCK; case wxSOCKET_NOHOST: return EC_ERROR_NOHOST; case wxSOCKET_INVPORT: return EC_ERROR_INVPORT; case wxSOCKET_WOULDBLOCK: return EC_ERROR_WOULDBLOCK; case wxSOCKET_TIMEDOUT: return EC_ERROR_TIMEDOUT; case wxSOCKET_MEMERR: return EC_ERROR_MEMERR; default: return EC_ERROR_UNKNOWN; } } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECMuleSocket.h0000644000175000017500000000564612050266603023070 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef ECMULESOCKET_H #define ECMULESOCKET_H #include // Needed for wxSocketClient #include "ECSocket.h" /*! \class CECMuleSocket * * \brief Socket handler for External Communications (EC), wx implementation * */ class CECMuleSocket : public CECSocket, public wxSocketClient { public: CECMuleSocket(bool use_events); virtual ~CECMuleSocket(); bool ConnectSocket(wxIPV4address& address); private: bool InternalConnect(uint32_t ip, uint16_t port, bool wait); int InternalGetLastError(); // ADUNANZA BEGIN // Backport #if 0 size_t InternalLastCount() { return wxSocketClient::LastCount(); }; #endif // ADUNANZA END bool InternalWaitOnConnect(long secs = -1, long msecs = 0) { return wxSocketClient::WaitOnConnect(secs,msecs); }; bool InternalWaitForWrite(long secs = -1, long msecs = 0) { return wxSocketClient::WaitForWrite(secs,msecs); }; bool InternalWaitForRead(long secs = -1, long msecs = 0) { return wxSocketClient::WaitForRead(secs,msecs); }; bool InternalError() { return wxSocketClient::Error(); } void InternalClose() { wxSocketClient::Close(); } // ADUNANZA BEGIN // Backport #if 0 void InternalRead(void* ptr, size_t len) { wxASSERT(len < 0xFFFFFFFF); wxSocketClient::Read(ptr, (wxUint32)len); }; void InternalWrite(const void* ptr, size_t len) { wxASSERT(len < 0xFFFFFFFF); wxSocketClient::Write(ptr, (wxUint32)len); }; #else uint32 InternalRead(void* ptr, uint32 len) { wxASSERT(len < 0xFFFFFFFF); wxSocketClient::Read(ptr, (wxUint32)len); return wxSocketClient::LastCount(); } uint32 InternalWrite(const void* ptr, uint32 len) { wxASSERT(len < 0xFFFFFFFF); wxSocketClient::Write(ptr, (wxUint32)len); return wxSocketClient::LastCount(); } #endif // ADUNANZA END bool InternalIsConnected() { return wxSocketClient::IsConnected(); } void InternalDestroy() { wxSocketClient::Destroy(); } }; #endif // ECMULESOCKET_H amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECPacket.h0000644000175000017500000000435212050266603022215 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef ECPACKET_H #define ECPACKET_H #include "ECTag.h" // Define this to keep partial packets // (those that had an error upon reception/creation) #undef KEEP_PARTIAL_PACKETS class CECSocket; /** * High level EC packet handler class */ class CECPacket : public CECEmptyTag { friend class CECSocket; public: CECPacket(ec_opcode_t opCode, EC_DETAIL_LEVEL detail_level = EC_DETAIL_FULL) : CECEmptyTag(0), m_opCode(opCode) { // since EC_DETAIL_FULL is default - no point transmit it if ( detail_level != EC_DETAIL_FULL ) { AddTag(CECTag(EC_TAG_DETAIL_LEVEL, (uint64)detail_level)); } } ec_opcode_t GetOpCode(void) const { return m_opCode; } uint32_t GetPacketLength(void) const { return CECTag::GetTagLen(); } EC_DETAIL_LEVEL GetDetailLevel() const { const CECTag *tag = GetTagByName(EC_TAG_DETAIL_LEVEL); return (tag) ? (EC_DETAIL_LEVEL)tag->GetInt() : EC_DETAIL_FULL; } void DebugPrint(bool incoming, uint32 trueSize = 0) const; private: CECPacket() : CECEmptyTag() {} bool ReadFromSocket(CECSocket& socket); bool WritePacket(CECSocket& socket) const; ec_opcode_t m_opCode; }; bool ECLogIsEnabled(); void DoECLogLine(const wxString &line); #endif /* ECPACKET_H */ // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECFileConfig.h0000644000175000017500000000572612050266603023021 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef ECFILECONFIG_H #define ECFILECONFIG_H #include #include #include #include "MD4Hash.h" // Needed for CMD4Hash #include "OtherFunctions.h" // Needed for GetConfigDir() /** * Prepends ConfigDir to filename, if it has no PathSeparator chars in it */ inline wxString FinalizeFilename(const wxString filename) { if (wxStrchr(filename, wxFileName::GetPathSeparator()) == NULL) { return GetConfigDir() + filename; } if ((filename.GetChar(0) == '~') && (filename.GetChar(1) == wxFileName::GetPathSeparator())) { return wxGetHomeDir() + filename.Mid(1); } return filename; } /** * Extension to wxFileConfig for reading/writing CMD4Hash values. * * This class converts between the text and binary representation of an MD4 hash, * and also maps empty strings to the empty hash and vica versa. */ class CECFileConfig : public wxFileConfig { public: CECFileConfig(const wxString& localFilename = wxEmptyString) : wxFileConfig(wxEmptyString, wxEmptyString, FinalizeFilename(localFilename), wxEmptyString, wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_RELATIVE_PATH) {} /** * Reads a hash from the config file * * @param key the key to be read * @param hash the CMD4Hash object to write the hash to * * @return true on success, false otherwise. */ bool ReadHash(const wxString& key, CMD4Hash *hash) { wxString sHash; bool retval = wxFileConfig::Read(key, &sHash, wxEmptyString); if (sHash.IsEmpty()) { hash->Clear(); } else { hash->Decode(sHash); } return retval; } /** * Writes a CMD4Hash object to the config file * * @param key the key to write to * @param hash the hash to be written * * @return true on success, false otherwise. */ bool WriteHash(const wxString& key, const CMD4Hash& hash) { return wxFileConfig::Write(key, hash.IsEmpty() ? wxString(wxEmptyString) : hash.Encode()); } }; #endif /* ECFILECONFIG_H */ // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECPacket.cpp0000644000175000017500000000535012050266603022547 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ECPacket.h" // Needed for ECPacket #include "ECSocket.h" // Needed for CECSocket /********************************************************** * * * CECPacket class * * * **********************************************************/ bool CECPacket::ReadFromSocket(CECSocket& socket) { return socket.ReadNumber(&m_opCode, sizeof(ec_opcode_t)) && ReadChildren(socket); } bool CECPacket::WritePacket(CECSocket& socket) const { if (!socket.WriteNumber(&m_opCode, sizeof(ec_opcode_t))) return false; if (!WriteChildren(socket)) return false; return true; } #ifdef __DEBUG__ #include // Needed for CFormat void CECPacket::DebugPrint(bool incoming, uint32 trueSize) const { wxString GetDebugNameECOpCodes(uint8 arg); if (ECLogIsEnabled()) { uint32 size = GetPacketLength() + sizeof(ec_opcode_t) + 2; // full length incl. header if (trueSize == 0 || size == trueSize) { DoECLogLine(CFormat(wxT("%s %s %d")) % (incoming ? wxT("<") : wxT(">")) % GetDebugNameECOpCodes(m_opCode) % size); } else { DoECLogLine(CFormat(wxT("%s %s %d (compressed: %d)")) % (incoming ? wxT("<") : wxT(">")) % GetDebugNameECOpCodes(m_opCode) % size % trueSize); } CECTag::DebugPrint(1, false); } } #else void CECPacket::DebugPrint(bool, uint32) const {} #endif /*! * \fn CECPacket::CECPacket(ec_opcode_t opCode, EC_DETAIL_LEVEL detail_level) * * \brief Creates a new packet with given OPCODE. */ /*! * \fn ec_opcode_t CECPacket::GetOpCode(void) const * * \brief Returns OPCODE. * * \return The OpCode of the packet. */ /*! * \fn uint32 CECPacket::GetPacketLength(void) const * * \brief Returns the length of the packet. * * \return The length of the packet. */ // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECCodes.h0000644000175000017500000013145612050266603022051 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // Purpose: // EC codes and type definition. #ifndef __ECCODES_H__ #define __ECCODES_H__ typedef uint8_t ec_opcode_t; typedef uint16_t ec_tagname_t; typedef uint8_t ec_tagtype_t; typedef uint32_t ec_taglen_t; enum ProtocolVersion { EC_CURRENT_PROTOCOL_VERSION = 0x0204 }; enum ECFlags { EC_FLAG_ZLIB = 0x00000001, EC_FLAG_UTF8_NUMBERS = 0x00000002, EC_FLAG_UNKNOWN_MASK = 0xff7f7f08 }; enum ECOpCodes { EC_OP_NOOP = 0x01, EC_OP_AUTH_REQ = 0x02, EC_OP_AUTH_FAIL = 0x03, EC_OP_AUTH_OK = 0x04, EC_OP_FAILED = 0x05, EC_OP_STRINGS = 0x06, EC_OP_MISC_DATA = 0x07, EC_OP_SHUTDOWN = 0x08, EC_OP_ADD_LINK = 0x09, EC_OP_STAT_REQ = 0x0A, EC_OP_GET_CONNSTATE = 0x0B, EC_OP_STATS = 0x0C, EC_OP_GET_DLOAD_QUEUE = 0x0D, EC_OP_GET_ULOAD_QUEUE = 0x0E, EC_OP_GET_SHARED_FILES = 0x10, EC_OP_SHARED_SET_PRIO = 0x11, EC_OP_PARTFILE_REMOVE_NO_NEEDED = 0x12, EC_OP_PARTFILE_REMOVE_FULL_QUEUE = 0x13, EC_OP_PARTFILE_REMOVE_HIGH_QUEUE = 0x14, EC_OP_PARTFILE_UNUSED = 0x15, EC_OP_PARTFILE_SWAP_A4AF_THIS = 0x16, EC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO = 0x17, EC_OP_PARTFILE_SWAP_A4AF_OTHERS = 0x18, EC_OP_PARTFILE_PAUSE = 0x19, EC_OP_PARTFILE_RESUME = 0x1A, EC_OP_PARTFILE_STOP = 0x1B, EC_OP_PARTFILE_PRIO_SET = 0x1C, EC_OP_PARTFILE_DELETE = 0x1D, EC_OP_PARTFILE_SET_CAT = 0x1E, EC_OP_DLOAD_QUEUE = 0x1F, EC_OP_ULOAD_QUEUE = 0x20, EC_OP_SHARED_FILES = 0x22, EC_OP_SHAREDFILES_RELOAD = 0x23, EC_OP_RENAME_FILE = 0x25, EC_OP_SEARCH_START = 0x26, EC_OP_SEARCH_STOP = 0x27, EC_OP_SEARCH_RESULTS = 0x28, EC_OP_SEARCH_PROGRESS = 0x29, EC_OP_DOWNLOAD_SEARCH_RESULT = 0x2A, EC_OP_IPFILTER_RELOAD = 0x2B, EC_OP_GET_SERVER_LIST = 0x2C, EC_OP_SERVER_LIST = 0x2D, EC_OP_SERVER_DISCONNECT = 0x2E, EC_OP_SERVER_CONNECT = 0x2F, EC_OP_SERVER_REMOVE = 0x30, EC_OP_SERVER_ADD = 0x31, EC_OP_SERVER_UPDATE_FROM_URL = 0x32, EC_OP_ADDLOGLINE = 0x33, EC_OP_ADDDEBUGLOGLINE = 0x34, EC_OP_GET_LOG = 0x35, EC_OP_GET_DEBUGLOG = 0x36, EC_OP_GET_SERVERINFO = 0x37, EC_OP_LOG = 0x38, EC_OP_DEBUGLOG = 0x39, EC_OP_SERVERINFO = 0x3A, EC_OP_RESET_LOG = 0x3B, EC_OP_RESET_DEBUGLOG = 0x3C, EC_OP_CLEAR_SERVERINFO = 0x3D, EC_OP_GET_LAST_LOG_ENTRY = 0x3E, EC_OP_GET_PREFERENCES = 0x3F, EC_OP_SET_PREFERENCES = 0x40, EC_OP_CREATE_CATEGORY = 0x41, EC_OP_UPDATE_CATEGORY = 0x42, EC_OP_DELETE_CATEGORY = 0x43, EC_OP_GET_STATSGRAPHS = 0x44, EC_OP_STATSGRAPHS = 0x45, EC_OP_GET_STATSTREE = 0x46, EC_OP_STATSTREE = 0x47, EC_OP_KAD_START = 0x48, EC_OP_KAD_STOP = 0x49, EC_OP_CONNECT = 0x4A, EC_OP_DISCONNECT = 0x4B, EC_OP_KAD_UPDATE_FROM_URL = 0x4D, EC_OP_KAD_BOOTSTRAP_FROM_IP = 0x4E, EC_OP_AUTH_SALT = 0x4F, EC_OP_AUTH_PASSWD = 0x50, EC_OP_IPFILTER_UPDATE = 0x51, EC_OP_GET_UPDATE = 0x52, EC_OP_CLEAR_COMPLETED = 0x53, EC_OP_CLIENT_SWAP_TO_ANOTHER_FILE = 0x54, EC_OP_SHARED_FILE_SET_COMMENT = 0x55, EC_OP_SERVER_SET_STATIC_PRIO = 0x56, EC_OP_FRIEND = 0x57 }; enum ECTagNames { EC_TAG_STRING = 0x0000, EC_TAG_PASSWD_HASH = 0x0001, EC_TAG_PROTOCOL_VERSION = 0x0002, EC_TAG_VERSION_ID = 0x0003, EC_TAG_DETAIL_LEVEL = 0x0004, EC_TAG_CONNSTATE = 0x0005, EC_TAG_ED2K_ID = 0x0006, EC_TAG_LOG_TO_STATUS = 0x0007, EC_TAG_BOOTSTRAP_IP = 0x0008, EC_TAG_BOOTSTRAP_PORT = 0x0009, EC_TAG_CLIENT_ID = 0x000A, EC_TAG_PASSWD_SALT = 0x000B, EC_TAG_CAN_ZLIB = 0x000C, EC_TAG_CAN_UTF8_NUMBERS = 0x000D, EC_TAG_CAN_NOTIFY = 0x000E, EC_TAG_ECID = 0x000F, EC_TAG_CLIENT_NAME = 0x0100, EC_TAG_CLIENT_VERSION = 0x0101, EC_TAG_CLIENT_MOD = 0x0102, EC_TAG_STATS_UL_SPEED = 0x0200, EC_TAG_STATS_DL_SPEED = 0x0201, EC_TAG_STATS_UL_SPEED_LIMIT = 0x0202, EC_TAG_STATS_DL_SPEED_LIMIT = 0x0203, EC_TAG_STATS_UP_OVERHEAD = 0x0204, EC_TAG_STATS_DOWN_OVERHEAD = 0x0205, EC_TAG_STATS_TOTAL_SRC_COUNT = 0x0206, EC_TAG_STATS_BANNED_COUNT = 0x0207, EC_TAG_STATS_UL_QUEUE_LEN = 0x0208, EC_TAG_STATS_ED2K_USERS = 0x0209, EC_TAG_STATS_KAD_USERS = 0x020A, EC_TAG_STATS_ED2K_FILES = 0x020B, EC_TAG_STATS_KAD_FILES = 0x020C, EC_TAG_STATS_LOGGER_MESSAGE = 0x020D, EC_TAG_STATS_KAD_FIREWALLED_UDP = 0x020E, EC_TAG_STATS_KAD_INDEXED_SOURCES = 0x020F, EC_TAG_STATS_KAD_INDEXED_KEYWORDS = 0x0210, EC_TAG_STATS_KAD_INDEXED_NOTES = 0x0211, EC_TAG_STATS_KAD_INDEXED_LOAD = 0x0212, EC_TAG_STATS_KAD_IP_ADRESS = 0x0213, EC_TAG_STATS_BUDDY_STATUS = 0x0214, EC_TAG_STATS_BUDDY_IP = 0x0215, EC_TAG_STATS_BUDDY_PORT = 0x0216, EC_TAG_STATS_KAD_IN_LAN_MODE = 0x0217, EC_TAG_STATS_TOTAL_SENT_BYTES = 0x0218, EC_TAG_STATS_TOTAL_RECEIVED_BYTES = 0x0219, EC_TAG_STATS_SHARED_FILE_COUNT = 0x021A, EC_TAG_STATS_KAD_NODES = 0x021B, EC_TAG_STATS_KADU_ACTIVE_NODES = 0x0280, EC_TAG_STATS_KADU_TOTAL_NODES = 0x0281, EC_TAG_STATS_ADU_KADU_UL_SPEED = 0x0282, EC_TAG_STATS_ADU_EXT_UL_SPEED = 0x0283, EC_TAG_STATS_ADU_KADU_DL_SPEED = 0x0284, EC_TAG_STATS_ADU_EXT_DL_SPEED = 0x0285, EC_TAG_PARTFILE = 0x0300, EC_TAG_PARTFILE_NAME = 0x0301, EC_TAG_PARTFILE_PARTMETID = 0x0302, EC_TAG_PARTFILE_SIZE_FULL = 0x0303, EC_TAG_PARTFILE_SIZE_XFER = 0x0304, EC_TAG_PARTFILE_SIZE_XFER_UP = 0x0305, EC_TAG_PARTFILE_SIZE_DONE = 0x0306, EC_TAG_PARTFILE_SPEED = 0x0307, EC_TAG_PARTFILE_STATUS = 0x0308, EC_TAG_PARTFILE_PRIO = 0x0309, EC_TAG_PARTFILE_SOURCE_COUNT = 0x030A, EC_TAG_PARTFILE_SOURCE_COUNT_A4AF = 0x030B, EC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT = 0x030C, EC_TAG_PARTFILE_SOURCE_COUNT_XFER = 0x030D, EC_TAG_PARTFILE_ED2K_LINK = 0x030E, EC_TAG_PARTFILE_CAT = 0x030F, EC_TAG_PARTFILE_LAST_RECV = 0x0310, EC_TAG_PARTFILE_LAST_SEEN_COMP = 0x0311, EC_TAG_PARTFILE_PART_STATUS = 0x0312, EC_TAG_PARTFILE_GAP_STATUS = 0x0313, EC_TAG_PARTFILE_REQ_STATUS = 0x0314, EC_TAG_PARTFILE_SOURCE_NAMES = 0x0315, EC_TAG_PARTFILE_COMMENTS = 0x0316, EC_TAG_PARTFILE_STOPPED = 0x0317, EC_TAG_PARTFILE_DOWNLOAD_ACTIVE = 0x0318, EC_TAG_PARTFILE_LOST_CORRUPTION = 0x0319, EC_TAG_PARTFILE_GAINED_COMPRESSION = 0x031A, EC_TAG_PARTFILE_SAVED_ICH = 0x031B, EC_TAG_PARTFILE_SOURCE_NAMES_COUNTS = 0x031C, EC_TAG_PARTFILE_AVAILABLE_PARTS = 0x031D, EC_TAG_PARTFILE_HASH = 0x031E, EC_TAG_PARTFILE_SHARED = 0x031F, EC_TAG_PARTFILE_HASHED_PART_COUNT = 0x0320, EC_TAG_PARTFILE_A4AFAUTO = 0x0321, EC_TAG_PARTFILE_A4AF_SOURCES = 0x0322, EC_TAG_PARTFILE_ADU_SOURCE_COUNT = 0x0380, EC_TAG_KNOWNFILE = 0x0400, EC_TAG_KNOWNFILE_XFERRED = 0x0401, EC_TAG_KNOWNFILE_XFERRED_ALL = 0x0402, EC_TAG_KNOWNFILE_REQ_COUNT = 0x0403, EC_TAG_KNOWNFILE_REQ_COUNT_ALL = 0x0404, EC_TAG_KNOWNFILE_ACCEPT_COUNT = 0x0405, EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL = 0x0406, EC_TAG_KNOWNFILE_AICH_MASTERHASH = 0x0407, EC_TAG_KNOWNFILE_FILENAME = 0x0408, EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW = 0x0409, EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH = 0x040A, EC_TAG_KNOWNFILE_PRIO = 0x040B, EC_TAG_KNOWNFILE_ON_QUEUE = 0x040C, EC_TAG_KNOWNFILE_COMPLETE_SOURCES = 0x040D, EC_TAG_KNOWNFILE_COMMENT = 0x040E, EC_TAG_KNOWNFILE_RATING = 0x040F, EC_TAG_SERVER = 0x0500, EC_TAG_SERVER_NAME = 0x0501, EC_TAG_SERVER_DESC = 0x0502, EC_TAG_SERVER_ADDRESS = 0x0503, EC_TAG_SERVER_PING = 0x0504, EC_TAG_SERVER_USERS = 0x0505, EC_TAG_SERVER_USERS_MAX = 0x0506, EC_TAG_SERVER_FILES = 0x0507, EC_TAG_SERVER_PRIO = 0x0508, EC_TAG_SERVER_FAILED = 0x0509, EC_TAG_SERVER_STATIC = 0x050A, EC_TAG_SERVER_VERSION = 0x050B, EC_TAG_SERVER_IP = 0x050C, EC_TAG_SERVER_PORT = 0x050D, EC_TAG_CLIENT = 0x0600, EC_TAG_CLIENT_SOFTWARE = 0x0601, EC_TAG_CLIENT_SCORE = 0x0602, EC_TAG_CLIENT_HASH = 0x0603, EC_TAG_CLIENT_FRIEND_SLOT = 0x0604, EC_TAG_CLIENT_WAIT_TIME = 0x0605, EC_TAG_CLIENT_XFER_TIME = 0x0606, EC_TAG_CLIENT_QUEUE_TIME = 0x0607, EC_TAG_CLIENT_LAST_TIME = 0x0608, EC_TAG_CLIENT_UPLOAD_SESSION = 0x0609, EC_TAG_CLIENT_UPLOAD_TOTAL = 0x060A, EC_TAG_CLIENT_DOWNLOAD_TOTAL = 0x060B, EC_TAG_CLIENT_DOWNLOAD_STATE = 0x060C, EC_TAG_CLIENT_UP_SPEED = 0x060D, EC_TAG_CLIENT_DOWN_SPEED = 0x060E, EC_TAG_CLIENT_FROM = 0x060F, EC_TAG_CLIENT_USER_IP = 0x0610, EC_TAG_CLIENT_USER_PORT = 0x0611, EC_TAG_CLIENT_SERVER_IP = 0x0612, EC_TAG_CLIENT_SERVER_PORT = 0x0613, EC_TAG_CLIENT_SERVER_NAME = 0x0614, EC_TAG_CLIENT_SOFT_VER_STR = 0x0615, EC_TAG_CLIENT_WAITING_POSITION = 0x0616, EC_TAG_CLIENT_IDENT_STATE = 0x0617, EC_TAG_CLIENT_OBFUSCATION_STATUS = 0x0618, EC_TAG_CLIENT_CURRENTLYUNUSED1 = 0x0619, EC_TAG_CLIENT_REMOTE_QUEUE_RANK = 0x061A, EC_TAG_CLIENT_DISABLE_VIEW_SHARED = 0x061B, EC_TAG_CLIENT_UPLOAD_STATE = 0x061C, EC_TAG_CLIENT_EXT_PROTOCOL = 0x061D, EC_TAG_CLIENT_USER_ID = 0x061E, EC_TAG_CLIENT_UPLOAD_FILE = 0x061F, EC_TAG_CLIENT_REQUEST_FILE = 0x0620, EC_TAG_CLIENT_A4AF_FILES = 0x0621, EC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK = 0x0622, EC_TAG_CLIENT_KAD_PORT = 0x0623, EC_TAG_CLIENT_PART_STATUS = 0x0624, EC_TAG_CLIENT_NEXT_REQUESTED_PART = 0x0625, EC_TAG_CLIENT_LAST_DOWNLOADING_PART = 0x0626, EC_TAG_CLIENT_REMOTE_FILENAME = 0x0627, EC_TAG_CLIENT_MOD_VERSION = 0x0628, EC_TAG_CLIENT_OS_INFO = 0x0629, EC_TAG_CLIENT_AVAILABLE_PARTS = 0x062A, EC_TAG_CLIENT_UPLOAD_PART_STATUS = 0x062B, EC_TAG_CLIENT_RECEIVEDTAGADUNANZA = 0x0680, EC_TAG_SEARCHFILE = 0x0700, EC_TAG_SEARCH_TYPE = 0x0701, EC_TAG_SEARCH_NAME = 0x0702, EC_TAG_SEARCH_MIN_SIZE = 0x0703, EC_TAG_SEARCH_MAX_SIZE = 0x0704, EC_TAG_SEARCH_FILE_TYPE = 0x0705, EC_TAG_SEARCH_EXTENSION = 0x0706, EC_TAG_SEARCH_AVAILABILITY = 0x0707, EC_TAG_SEARCH_STATUS = 0x0708, EC_TAG_SEARCH_PARENT = 0x0709, EC_TAG_FRIEND = 0x0800, EC_TAG_FRIEND_NAME = 0x0801, EC_TAG_FRIEND_HASH = 0x0802, EC_TAG_FRIEND_IP = 0x0803, EC_TAG_FRIEND_PORT = 0x0804, EC_TAG_FRIEND_CLIENT = 0x0805, EC_TAG_FRIEND_ADD = 0x0806, EC_TAG_FRIEND_REMOVE = 0x0807, EC_TAG_FRIEND_FRIENDSLOT = 0x0808, EC_TAG_FRIEND_SHARED = 0x0809, EC_TAG_SELECT_PREFS = 0x1000, EC_TAG_PREFS_CATEGORIES = 0x1100, EC_TAG_CATEGORY = 0x1101, EC_TAG_CATEGORY_TITLE = 0x1102, EC_TAG_CATEGORY_PATH = 0x1103, EC_TAG_CATEGORY_COMMENT = 0x1104, EC_TAG_CATEGORY_COLOR = 0x1105, EC_TAG_CATEGORY_PRIO = 0x1106, EC_TAG_PREFS_GENERAL = 0x1200, EC_TAG_USER_NICK = 0x1201, EC_TAG_USER_HASH = 0x1202, EC_TAG_USER_HOST = 0x1203, EC_TAG_GENERAL_CHECK_NEW_VERSION = 0x1204, EC_TAG_PREFS_CONNECTIONS = 0x1300, EC_TAG_CONN_DL_CAP = 0x1301, EC_TAG_CONN_UL_CAP = 0x1302, EC_TAG_CONN_MAX_DL = 0x1303, EC_TAG_CONN_MAX_UL = 0x1304, EC_TAG_CONN_SLOT_ALLOCATION = 0x1305, EC_TAG_CONN_TCP_PORT = 0x1306, EC_TAG_CONN_UDP_PORT = 0x1307, EC_TAG_CONN_UDP_DISABLE = 0x1308, EC_TAG_CONN_MAX_FILE_SOURCES = 0x1309, EC_TAG_CONN_MAX_CONN = 0x130A, EC_TAG_CONN_AUTOCONNECT = 0x130B, EC_TAG_CONN_RECONNECT = 0x130C, EC_TAG_NETWORK_ED2K = 0x130D, EC_TAG_NETWORK_KADEMLIA = 0x130E, EC_TAG_PREFS_MESSAGEFILTER = 0x1400, EC_TAG_MSGFILTER_ENABLED = 0x1401, EC_TAG_MSGFILTER_ALL = 0x1402, EC_TAG_MSGFILTER_FRIENDS = 0x1403, EC_TAG_MSGFILTER_SECURE = 0x1404, EC_TAG_MSGFILTER_BY_KEYWORD = 0x1405, EC_TAG_MSGFILTER_KEYWORDS = 0x1406, EC_TAG_PREFS_REMOTECTRL = 0x1500, EC_TAG_WEBSERVER_AUTORUN = 0x1501, EC_TAG_WEBSERVER_PORT = 0x1502, EC_TAG_WEBSERVER_GUEST = 0x1503, EC_TAG_WEBSERVER_USEGZIP = 0x1504, EC_TAG_WEBSERVER_REFRESH = 0x1505, EC_TAG_WEBSERVER_TEMPLATE = 0x1506, EC_TAG_PREFS_ONLINESIG = 0x1600, EC_TAG_ONLINESIG_ENABLED = 0x1601, EC_TAG_PREFS_SERVERS = 0x1700, EC_TAG_SERVERS_REMOVE_DEAD = 0x1701, EC_TAG_SERVERS_DEAD_SERVER_RETRIES = 0x1702, EC_TAG_SERVERS_AUTO_UPDATE = 0x1703, EC_TAG_SERVERS_URL_LIST = 0x1704, EC_TAG_SERVERS_ADD_FROM_SERVER = 0x1705, EC_TAG_SERVERS_ADD_FROM_CLIENT = 0x1706, EC_TAG_SERVERS_USE_SCORE_SYSTEM = 0x1707, EC_TAG_SERVERS_SMART_ID_CHECK = 0x1708, EC_TAG_SERVERS_SAFE_SERVER_CONNECT = 0x1709, EC_TAG_SERVERS_AUTOCONN_STATIC_ONLY = 0x170A, EC_TAG_SERVERS_MANUAL_HIGH_PRIO = 0x170B, EC_TAG_SERVERS_UPDATE_URL = 0x170C, EC_TAG_PREFS_FILES = 0x1800, EC_TAG_FILES_ICH_ENABLED = 0x1801, EC_TAG_FILES_AICH_TRUST = 0x1802, EC_TAG_FILES_NEW_PAUSED = 0x1803, EC_TAG_FILES_NEW_AUTO_DL_PRIO = 0x1804, EC_TAG_FILES_PREVIEW_PRIO = 0x1805, EC_TAG_FILES_NEW_AUTO_UL_PRIO = 0x1806, EC_TAG_FILES_UL_FULL_CHUNKS = 0x1807, EC_TAG_FILES_START_NEXT_PAUSED = 0x1808, EC_TAG_FILES_RESUME_SAME_CAT = 0x1809, EC_TAG_FILES_SAVE_SOURCES = 0x180A, EC_TAG_FILES_EXTRACT_METADATA = 0x180B, EC_TAG_FILES_ALLOC_FULL_SIZE = 0x180C, EC_TAG_FILES_CHECK_FREE_SPACE = 0x180D, EC_TAG_FILES_MIN_FREE_SPACE = 0x180E, EC_TAG_PREFS_SRCDROP = 0x1900, EC_TAG_SRCDROP_NONEEDED = 0x1901, EC_TAG_SRCDROP_DROP_FQS = 0x1902, EC_TAG_SRCDROP_DROP_HQRS = 0x1903, EC_TAG_SRCDROP_HQRS_VALUE = 0x1904, EC_TAG_SRCDROP_AUTODROP_TIMER = 0x1905, EC_TAG_PREFS_DIRECTORIES = 0x1A00, EC_TAG_DIRECTORIES_INCOMING = 0x1A01, EC_TAG_DIRECTORIES_TEMP = 0x1A02, EC_TAG_DIRECTORIES_SHARED = 0x1A03, EC_TAG_DIRECTORIES_SHARE_HIDDEN = 0x1A04, EC_TAG_PREFS_STATISTICS = 0x1B00, EC_TAG_STATSGRAPH_WIDTH = 0x1B01, EC_TAG_STATSGRAPH_SCALE = 0x1B02, EC_TAG_STATSGRAPH_LAST = 0x1B03, EC_TAG_STATSGRAPH_DATA = 0x1B04, EC_TAG_STATTREE_CAPPING = 0x1B05, EC_TAG_STATTREE_NODE = 0x1B06, EC_TAG_STAT_NODE_VALUE = 0x1B07, EC_TAG_STAT_VALUE_TYPE = 0x1B08, EC_TAG_STATTREE_NODEID = 0x1B09, EC_TAG_PREFS_SECURITY = 0x1C00, EC_TAG_SECURITY_CAN_SEE_SHARES = 0x1C01, EC_TAG_IPFILTER_CLIENTS = 0x1C02, EC_TAG_IPFILTER_SERVERS = 0x1C03, EC_TAG_IPFILTER_AUTO_UPDATE = 0x1C04, EC_TAG_IPFILTER_UPDATE_URL = 0x1C05, EC_TAG_IPFILTER_LEVEL = 0x1C06, EC_TAG_IPFILTER_FILTER_LAN = 0x1C07, EC_TAG_SECURITY_USE_SECIDENT = 0x1C08, EC_TAG_SECURITY_OBFUSCATION_SUPPORTED = 0x1C09, EC_TAG_SECURITY_OBFUSCATION_REQUESTED = 0x1C0A, EC_TAG_SECURITY_OBFUSCATION_REQUIRED = 0x1C0B, EC_TAG_PREFS_CORETWEAKS = 0x1D00, EC_TAG_CORETW_MAX_CONN_PER_FIVE = 0x1D01, EC_TAG_CORETW_VERBOSE = 0x1D02, EC_TAG_CORETW_FILEBUFFER = 0x1D03, EC_TAG_CORETW_UL_QUEUE = 0x1D04, EC_TAG_CORETW_SRV_KEEPALIVE_TIMEOUT = 0x1D05, EC_TAG_PREFS_KADEMLIA = 0x1E00, EC_TAG_KADEMLIA_UPDATE_URL = 0x1E01 }; enum EC_DETAIL_LEVEL { EC_DETAIL_CMD = 0x00, EC_DETAIL_WEB = 0x01, EC_DETAIL_FULL = 0x02, EC_DETAIL_UPDATE = 0x03, EC_DETAIL_INC_UPDATE = 0x04 }; enum EC_SEARCH_TYPE { EC_SEARCH_LOCAL = 0x00, EC_SEARCH_GLOBAL = 0x01, EC_SEARCH_KAD = 0x02, EC_SEARCH_WEB = 0x03 }; enum EC_STATTREE_NODE_VALUE_TYPE { EC_VALUE_INTEGER = 0x00, EC_VALUE_ISTRING = 0x01, EC_VALUE_BYTES = 0x02, EC_VALUE_ISHORT = 0x03, EC_VALUE_TIME = 0x04, EC_VALUE_SPEED = 0x05, EC_VALUE_STRING = 0x06, EC_VALUE_DOUBLE = 0x07 }; enum EcPrefs { EC_PREFS_CATEGORIES = 0x00000001, EC_PREFS_GENERAL = 0x00000002, EC_PREFS_CONNECTIONS = 0x00000004, EC_PREFS_MESSAGEFILTER = 0x00000008, EC_PREFS_REMOTECONTROLS = 0x00000010, EC_PREFS_ONLINESIG = 0x00000020, EC_PREFS_SERVERS = 0x00000040, EC_PREFS_FILES = 0x00000080, EC_PREFS_SRCDROP = 0x00000100, EC_PREFS_DIRECTORIES = 0x00000200, EC_PREFS_STATISTICS = 0x00000400, EC_PREFS_SECURITY = 0x00000800, EC_PREFS_CORETWEAKS = 0x00001000, EC_PREFS_KADEMLIA = 0x00002000 }; #ifdef DEBUG_EC_IMPLEMENTATION wxString GetDebugNameProtocolVersion(uint16 arg) { switch (arg) { case 0x0204: return wxT("EC_CURRENT_PROTOCOL_VERSION"); default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg; } } wxString GetDebugNameECFlags(uint32 arg) { switch (arg) { case 0x00000001: return wxT("EC_FLAG_ZLIB"); case 0x00000002: return wxT("EC_FLAG_UTF8_NUMBERS"); case 0xff7f7f08: return wxT("EC_FLAG_UNKNOWN_MASK"); default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg; } } wxString GetDebugNameECOpCodes(uint8 arg) { switch (arg) { case 0x01: return wxT("EC_OP_NOOP"); case 0x02: return wxT("EC_OP_AUTH_REQ"); case 0x03: return wxT("EC_OP_AUTH_FAIL"); case 0x04: return wxT("EC_OP_AUTH_OK"); case 0x05: return wxT("EC_OP_FAILED"); case 0x06: return wxT("EC_OP_STRINGS"); case 0x07: return wxT("EC_OP_MISC_DATA"); case 0x08: return wxT("EC_OP_SHUTDOWN"); case 0x09: return wxT("EC_OP_ADD_LINK"); case 0x0A: return wxT("EC_OP_STAT_REQ"); case 0x0B: return wxT("EC_OP_GET_CONNSTATE"); case 0x0C: return wxT("EC_OP_STATS"); case 0x0D: return wxT("EC_OP_GET_DLOAD_QUEUE"); case 0x0E: return wxT("EC_OP_GET_ULOAD_QUEUE"); case 0x10: return wxT("EC_OP_GET_SHARED_FILES"); case 0x11: return wxT("EC_OP_SHARED_SET_PRIO"); case 0x12: return wxT("EC_OP_PARTFILE_REMOVE_NO_NEEDED"); case 0x13: return wxT("EC_OP_PARTFILE_REMOVE_FULL_QUEUE"); case 0x14: return wxT("EC_OP_PARTFILE_REMOVE_HIGH_QUEUE"); case 0x15: return wxT("EC_OP_PARTFILE_UNUSED"); case 0x16: return wxT("EC_OP_PARTFILE_SWAP_A4AF_THIS"); case 0x17: return wxT("EC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO"); case 0x18: return wxT("EC_OP_PARTFILE_SWAP_A4AF_OTHERS"); case 0x19: return wxT("EC_OP_PARTFILE_PAUSE"); case 0x1A: return wxT("EC_OP_PARTFILE_RESUME"); case 0x1B: return wxT("EC_OP_PARTFILE_STOP"); case 0x1C: return wxT("EC_OP_PARTFILE_PRIO_SET"); case 0x1D: return wxT("EC_OP_PARTFILE_DELETE"); case 0x1E: return wxT("EC_OP_PARTFILE_SET_CAT"); case 0x1F: return wxT("EC_OP_DLOAD_QUEUE"); case 0x20: return wxT("EC_OP_ULOAD_QUEUE"); case 0x22: return wxT("EC_OP_SHARED_FILES"); case 0x23: return wxT("EC_OP_SHAREDFILES_RELOAD"); case 0x25: return wxT("EC_OP_RENAME_FILE"); case 0x26: return wxT("EC_OP_SEARCH_START"); case 0x27: return wxT("EC_OP_SEARCH_STOP"); case 0x28: return wxT("EC_OP_SEARCH_RESULTS"); case 0x29: return wxT("EC_OP_SEARCH_PROGRESS"); case 0x2A: return wxT("EC_OP_DOWNLOAD_SEARCH_RESULT"); case 0x2B: return wxT("EC_OP_IPFILTER_RELOAD"); case 0x2C: return wxT("EC_OP_GET_SERVER_LIST"); case 0x2D: return wxT("EC_OP_SERVER_LIST"); case 0x2E: return wxT("EC_OP_SERVER_DISCONNECT"); case 0x2F: return wxT("EC_OP_SERVER_CONNECT"); case 0x30: return wxT("EC_OP_SERVER_REMOVE"); case 0x31: return wxT("EC_OP_SERVER_ADD"); case 0x32: return wxT("EC_OP_SERVER_UPDATE_FROM_URL"); case 0x33: return wxT("EC_OP_ADDLOGLINE"); case 0x34: return wxT("EC_OP_ADDDEBUGLOGLINE"); case 0x35: return wxT("EC_OP_GET_LOG"); case 0x36: return wxT("EC_OP_GET_DEBUGLOG"); case 0x37: return wxT("EC_OP_GET_SERVERINFO"); case 0x38: return wxT("EC_OP_LOG"); case 0x39: return wxT("EC_OP_DEBUGLOG"); case 0x3A: return wxT("EC_OP_SERVERINFO"); case 0x3B: return wxT("EC_OP_RESET_LOG"); case 0x3C: return wxT("EC_OP_RESET_DEBUGLOG"); case 0x3D: return wxT("EC_OP_CLEAR_SERVERINFO"); case 0x3E: return wxT("EC_OP_GET_LAST_LOG_ENTRY"); case 0x3F: return wxT("EC_OP_GET_PREFERENCES"); case 0x40: return wxT("EC_OP_SET_PREFERENCES"); case 0x41: return wxT("EC_OP_CREATE_CATEGORY"); case 0x42: return wxT("EC_OP_UPDATE_CATEGORY"); case 0x43: return wxT("EC_OP_DELETE_CATEGORY"); case 0x44: return wxT("EC_OP_GET_STATSGRAPHS"); case 0x45: return wxT("EC_OP_STATSGRAPHS"); case 0x46: return wxT("EC_OP_GET_STATSTREE"); case 0x47: return wxT("EC_OP_STATSTREE"); case 0x48: return wxT("EC_OP_KAD_START"); case 0x49: return wxT("EC_OP_KAD_STOP"); case 0x4A: return wxT("EC_OP_CONNECT"); case 0x4B: return wxT("EC_OP_DISCONNECT"); case 0x4D: return wxT("EC_OP_KAD_UPDATE_FROM_URL"); case 0x4E: return wxT("EC_OP_KAD_BOOTSTRAP_FROM_IP"); case 0x4F: return wxT("EC_OP_AUTH_SALT"); case 0x50: return wxT("EC_OP_AUTH_PASSWD"); case 0x51: return wxT("EC_OP_IPFILTER_UPDATE"); case 0x52: return wxT("EC_OP_GET_UPDATE"); case 0x53: return wxT("EC_OP_CLEAR_COMPLETED"); case 0x54: return wxT("EC_OP_CLIENT_SWAP_TO_ANOTHER_FILE"); case 0x55: return wxT("EC_OP_SHARED_FILE_SET_COMMENT"); case 0x56: return wxT("EC_OP_SERVER_SET_STATIC_PRIO"); case 0x57: return wxT("EC_OP_FRIEND"); default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg; } } wxString GetDebugNameECTagNames(uint16 arg) { switch (arg) { case 0x0000: return wxT("EC_TAG_STRING"); case 0x0001: return wxT("EC_TAG_PASSWD_HASH"); case 0x0002: return wxT("EC_TAG_PROTOCOL_VERSION"); case 0x0003: return wxT("EC_TAG_VERSION_ID"); case 0x0004: return wxT("EC_TAG_DETAIL_LEVEL"); case 0x0005: return wxT("EC_TAG_CONNSTATE"); case 0x0006: return wxT("EC_TAG_ED2K_ID"); case 0x0007: return wxT("EC_TAG_LOG_TO_STATUS"); case 0x0008: return wxT("EC_TAG_BOOTSTRAP_IP"); case 0x0009: return wxT("EC_TAG_BOOTSTRAP_PORT"); case 0x000A: return wxT("EC_TAG_CLIENT_ID"); case 0x000B: return wxT("EC_TAG_PASSWD_SALT"); case 0x000C: return wxT("EC_TAG_CAN_ZLIB"); case 0x000D: return wxT("EC_TAG_CAN_UTF8_NUMBERS"); case 0x000E: return wxT("EC_TAG_CAN_NOTIFY"); case 0x000F: return wxT("EC_TAG_ECID"); case 0x0100: return wxT("EC_TAG_CLIENT_NAME"); case 0x0101: return wxT("EC_TAG_CLIENT_VERSION"); case 0x0102: return wxT("EC_TAG_CLIENT_MOD"); case 0x0200: return wxT("EC_TAG_STATS_UL_SPEED"); case 0x0201: return wxT("EC_TAG_STATS_DL_SPEED"); case 0x0202: return wxT("EC_TAG_STATS_UL_SPEED_LIMIT"); case 0x0203: return wxT("EC_TAG_STATS_DL_SPEED_LIMIT"); case 0x0204: return wxT("EC_TAG_STATS_UP_OVERHEAD"); case 0x0205: return wxT("EC_TAG_STATS_DOWN_OVERHEAD"); case 0x0206: return wxT("EC_TAG_STATS_TOTAL_SRC_COUNT"); case 0x0207: return wxT("EC_TAG_STATS_BANNED_COUNT"); case 0x0208: return wxT("EC_TAG_STATS_UL_QUEUE_LEN"); case 0x0209: return wxT("EC_TAG_STATS_ED2K_USERS"); case 0x020A: return wxT("EC_TAG_STATS_KAD_USERS"); case 0x020B: return wxT("EC_TAG_STATS_ED2K_FILES"); case 0x020C: return wxT("EC_TAG_STATS_KAD_FILES"); case 0x020D: return wxT("EC_TAG_STATS_LOGGER_MESSAGE"); case 0x020E: return wxT("EC_TAG_STATS_KAD_FIREWALLED_UDP"); case 0x020F: return wxT("EC_TAG_STATS_KAD_INDEXED_SOURCES"); case 0x0210: return wxT("EC_TAG_STATS_KAD_INDEXED_KEYWORDS"); case 0x0211: return wxT("EC_TAG_STATS_KAD_INDEXED_NOTES"); case 0x0212: return wxT("EC_TAG_STATS_KAD_INDEXED_LOAD"); case 0x0213: return wxT("EC_TAG_STATS_KAD_IP_ADRESS"); case 0x0214: return wxT("EC_TAG_STATS_BUDDY_STATUS"); case 0x0215: return wxT("EC_TAG_STATS_BUDDY_IP"); case 0x0216: return wxT("EC_TAG_STATS_BUDDY_PORT"); case 0x0217: return wxT("EC_TAG_STATS_KAD_IN_LAN_MODE"); case 0x0218: return wxT("EC_TAG_STATS_TOTAL_SENT_BYTES"); case 0x0219: return wxT("EC_TAG_STATS_TOTAL_RECEIVED_BYTES"); case 0x021A: return wxT("EC_TAG_STATS_SHARED_FILE_COUNT"); case 0x021B: return wxT("EC_TAG_STATS_KAD_NODES"); case 0x0280: return wxT("EC_TAG_STATS_KADU_ACTIVE_NODES"); case 0x0281: return wxT("EC_TAG_STATS_KADU_TOTAL_NODES"); case 0x0282: return wxT("EC_TAG_STATS_ADU_KADU_UL_SPEED"); case 0x0283: return wxT("EC_TAG_STATS_ADU_EXT_UL_SPEED"); case 0x0284: return wxT("EC_TAG_STATS_ADU_KADU_DL_SPEED"); case 0x0285: return wxT("EC_TAG_STATS_ADU_EXT_DL_SPEED"); case 0x0300: return wxT("EC_TAG_PARTFILE"); case 0x0301: return wxT("EC_TAG_PARTFILE_NAME"); case 0x0302: return wxT("EC_TAG_PARTFILE_PARTMETID"); case 0x0303: return wxT("EC_TAG_PARTFILE_SIZE_FULL"); case 0x0304: return wxT("EC_TAG_PARTFILE_SIZE_XFER"); case 0x0305: return wxT("EC_TAG_PARTFILE_SIZE_XFER_UP"); case 0x0306: return wxT("EC_TAG_PARTFILE_SIZE_DONE"); case 0x0307: return wxT("EC_TAG_PARTFILE_SPEED"); case 0x0308: return wxT("EC_TAG_PARTFILE_STATUS"); case 0x0309: return wxT("EC_TAG_PARTFILE_PRIO"); case 0x030A: return wxT("EC_TAG_PARTFILE_SOURCE_COUNT"); case 0x030B: return wxT("EC_TAG_PARTFILE_SOURCE_COUNT_A4AF"); case 0x030C: return wxT("EC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT"); case 0x030D: return wxT("EC_TAG_PARTFILE_SOURCE_COUNT_XFER"); case 0x030E: return wxT("EC_TAG_PARTFILE_ED2K_LINK"); case 0x030F: return wxT("EC_TAG_PARTFILE_CAT"); case 0x0310: return wxT("EC_TAG_PARTFILE_LAST_RECV"); case 0x0311: return wxT("EC_TAG_PARTFILE_LAST_SEEN_COMP"); case 0x0312: return wxT("EC_TAG_PARTFILE_PART_STATUS"); case 0x0313: return wxT("EC_TAG_PARTFILE_GAP_STATUS"); case 0x0314: return wxT("EC_TAG_PARTFILE_REQ_STATUS"); case 0x0315: return wxT("EC_TAG_PARTFILE_SOURCE_NAMES"); case 0x0316: return wxT("EC_TAG_PARTFILE_COMMENTS"); case 0x0317: return wxT("EC_TAG_PARTFILE_STOPPED"); case 0x0318: return wxT("EC_TAG_PARTFILE_DOWNLOAD_ACTIVE"); case 0x0319: return wxT("EC_TAG_PARTFILE_LOST_CORRUPTION"); case 0x031A: return wxT("EC_TAG_PARTFILE_GAINED_COMPRESSION"); case 0x031B: return wxT("EC_TAG_PARTFILE_SAVED_ICH"); case 0x031C: return wxT("EC_TAG_PARTFILE_SOURCE_NAMES_COUNTS"); case 0x031D: return wxT("EC_TAG_PARTFILE_AVAILABLE_PARTS"); case 0x031E: return wxT("EC_TAG_PARTFILE_HASH"); case 0x031F: return wxT("EC_TAG_PARTFILE_SHARED"); case 0x0320: return wxT("EC_TAG_PARTFILE_HASHED_PART_COUNT"); case 0x0321: return wxT("EC_TAG_PARTFILE_A4AFAUTO"); case 0x0322: return wxT("EC_TAG_PARTFILE_A4AF_SOURCES"); case 0x0380: return wxT("EC_TAG_PARTFILE_ADU_SOURCE_COUNT"); case 0x0400: return wxT("EC_TAG_KNOWNFILE"); case 0x0401: return wxT("EC_TAG_KNOWNFILE_XFERRED"); case 0x0402: return wxT("EC_TAG_KNOWNFILE_XFERRED_ALL"); case 0x0403: return wxT("EC_TAG_KNOWNFILE_REQ_COUNT"); case 0x0404: return wxT("EC_TAG_KNOWNFILE_REQ_COUNT_ALL"); case 0x0405: return wxT("EC_TAG_KNOWNFILE_ACCEPT_COUNT"); case 0x0406: return wxT("EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL"); case 0x0407: return wxT("EC_TAG_KNOWNFILE_AICH_MASTERHASH"); case 0x0408: return wxT("EC_TAG_KNOWNFILE_FILENAME"); case 0x0409: return wxT("EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW"); case 0x040A: return wxT("EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH"); case 0x040B: return wxT("EC_TAG_KNOWNFILE_PRIO"); case 0x040C: return wxT("EC_TAG_KNOWNFILE_ON_QUEUE"); case 0x040D: return wxT("EC_TAG_KNOWNFILE_COMPLETE_SOURCES"); case 0x040E: return wxT("EC_TAG_KNOWNFILE_COMMENT"); case 0x040F: return wxT("EC_TAG_KNOWNFILE_RATING"); case 0x0500: return wxT("EC_TAG_SERVER"); case 0x0501: return wxT("EC_TAG_SERVER_NAME"); case 0x0502: return wxT("EC_TAG_SERVER_DESC"); case 0x0503: return wxT("EC_TAG_SERVER_ADDRESS"); case 0x0504: return wxT("EC_TAG_SERVER_PING"); case 0x0505: return wxT("EC_TAG_SERVER_USERS"); case 0x0506: return wxT("EC_TAG_SERVER_USERS_MAX"); case 0x0507: return wxT("EC_TAG_SERVER_FILES"); case 0x0508: return wxT("EC_TAG_SERVER_PRIO"); case 0x0509: return wxT("EC_TAG_SERVER_FAILED"); case 0x050A: return wxT("EC_TAG_SERVER_STATIC"); case 0x050B: return wxT("EC_TAG_SERVER_VERSION"); case 0x050C: return wxT("EC_TAG_SERVER_IP"); case 0x050D: return wxT("EC_TAG_SERVER_PORT"); case 0x0600: return wxT("EC_TAG_CLIENT"); case 0x0601: return wxT("EC_TAG_CLIENT_SOFTWARE"); case 0x0602: return wxT("EC_TAG_CLIENT_SCORE"); case 0x0603: return wxT("EC_TAG_CLIENT_HASH"); case 0x0604: return wxT("EC_TAG_CLIENT_FRIEND_SLOT"); case 0x0605: return wxT("EC_TAG_CLIENT_WAIT_TIME"); case 0x0606: return wxT("EC_TAG_CLIENT_XFER_TIME"); case 0x0607: return wxT("EC_TAG_CLIENT_QUEUE_TIME"); case 0x0608: return wxT("EC_TAG_CLIENT_LAST_TIME"); case 0x0609: return wxT("EC_TAG_CLIENT_UPLOAD_SESSION"); case 0x060A: return wxT("EC_TAG_CLIENT_UPLOAD_TOTAL"); case 0x060B: return wxT("EC_TAG_CLIENT_DOWNLOAD_TOTAL"); case 0x060C: return wxT("EC_TAG_CLIENT_DOWNLOAD_STATE"); case 0x060D: return wxT("EC_TAG_CLIENT_UP_SPEED"); case 0x060E: return wxT("EC_TAG_CLIENT_DOWN_SPEED"); case 0x060F: return wxT("EC_TAG_CLIENT_FROM"); case 0x0610: return wxT("EC_TAG_CLIENT_USER_IP"); case 0x0611: return wxT("EC_TAG_CLIENT_USER_PORT"); case 0x0612: return wxT("EC_TAG_CLIENT_SERVER_IP"); case 0x0613: return wxT("EC_TAG_CLIENT_SERVER_PORT"); case 0x0614: return wxT("EC_TAG_CLIENT_SERVER_NAME"); case 0x0615: return wxT("EC_TAG_CLIENT_SOFT_VER_STR"); case 0x0616: return wxT("EC_TAG_CLIENT_WAITING_POSITION"); case 0x0617: return wxT("EC_TAG_CLIENT_IDENT_STATE"); case 0x0618: return wxT("EC_TAG_CLIENT_OBFUSCATION_STATUS"); case 0x0619: return wxT("EC_TAG_CLIENT_CURRENTLYUNUSED1"); case 0x061A: return wxT("EC_TAG_CLIENT_REMOTE_QUEUE_RANK"); case 0x061B: return wxT("EC_TAG_CLIENT_DISABLE_VIEW_SHARED"); case 0x061C: return wxT("EC_TAG_CLIENT_UPLOAD_STATE"); case 0x061D: return wxT("EC_TAG_CLIENT_EXT_PROTOCOL"); case 0x061E: return wxT("EC_TAG_CLIENT_USER_ID"); case 0x061F: return wxT("EC_TAG_CLIENT_UPLOAD_FILE"); case 0x0620: return wxT("EC_TAG_CLIENT_REQUEST_FILE"); case 0x0621: return wxT("EC_TAG_CLIENT_A4AF_FILES"); case 0x0622: return wxT("EC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK"); case 0x0623: return wxT("EC_TAG_CLIENT_KAD_PORT"); case 0x0624: return wxT("EC_TAG_CLIENT_PART_STATUS"); case 0x0625: return wxT("EC_TAG_CLIENT_NEXT_REQUESTED_PART"); case 0x0626: return wxT("EC_TAG_CLIENT_LAST_DOWNLOADING_PART"); case 0x0627: return wxT("EC_TAG_CLIENT_REMOTE_FILENAME"); case 0x0628: return wxT("EC_TAG_CLIENT_MOD_VERSION"); case 0x0629: return wxT("EC_TAG_CLIENT_OS_INFO"); case 0x062A: return wxT("EC_TAG_CLIENT_AVAILABLE_PARTS"); case 0x062B: return wxT("EC_TAG_CLIENT_UPLOAD_PART_STATUS"); case 0x0680: return wxT("EC_TAG_CLIENT_RECEIVEDTAGADUNANZA"); case 0x0700: return wxT("EC_TAG_SEARCHFILE"); case 0x0701: return wxT("EC_TAG_SEARCH_TYPE"); case 0x0702: return wxT("EC_TAG_SEARCH_NAME"); case 0x0703: return wxT("EC_TAG_SEARCH_MIN_SIZE"); case 0x0704: return wxT("EC_TAG_SEARCH_MAX_SIZE"); case 0x0705: return wxT("EC_TAG_SEARCH_FILE_TYPE"); case 0x0706: return wxT("EC_TAG_SEARCH_EXTENSION"); case 0x0707: return wxT("EC_TAG_SEARCH_AVAILABILITY"); case 0x0708: return wxT("EC_TAG_SEARCH_STATUS"); case 0x0709: return wxT("EC_TAG_SEARCH_PARENT"); case 0x0800: return wxT("EC_TAG_FRIEND"); case 0x0801: return wxT("EC_TAG_FRIEND_NAME"); case 0x0802: return wxT("EC_TAG_FRIEND_HASH"); case 0x0803: return wxT("EC_TAG_FRIEND_IP"); case 0x0804: return wxT("EC_TAG_FRIEND_PORT"); case 0x0805: return wxT("EC_TAG_FRIEND_CLIENT"); case 0x0806: return wxT("EC_TAG_FRIEND_ADD"); case 0x0807: return wxT("EC_TAG_FRIEND_REMOVE"); case 0x0808: return wxT("EC_TAG_FRIEND_FRIENDSLOT"); case 0x0809: return wxT("EC_TAG_FRIEND_SHARED"); case 0x1000: return wxT("EC_TAG_SELECT_PREFS"); case 0x1100: return wxT("EC_TAG_PREFS_CATEGORIES"); case 0x1101: return wxT("EC_TAG_CATEGORY"); case 0x1102: return wxT("EC_TAG_CATEGORY_TITLE"); case 0x1103: return wxT("EC_TAG_CATEGORY_PATH"); case 0x1104: return wxT("EC_TAG_CATEGORY_COMMENT"); case 0x1105: return wxT("EC_TAG_CATEGORY_COLOR"); case 0x1106: return wxT("EC_TAG_CATEGORY_PRIO"); case 0x1200: return wxT("EC_TAG_PREFS_GENERAL"); case 0x1201: return wxT("EC_TAG_USER_NICK"); case 0x1202: return wxT("EC_TAG_USER_HASH"); case 0x1203: return wxT("EC_TAG_USER_HOST"); case 0x1204: return wxT("EC_TAG_GENERAL_CHECK_NEW_VERSION"); case 0x1300: return wxT("EC_TAG_PREFS_CONNECTIONS"); case 0x1301: return wxT("EC_TAG_CONN_DL_CAP"); case 0x1302: return wxT("EC_TAG_CONN_UL_CAP"); case 0x1303: return wxT("EC_TAG_CONN_MAX_DL"); case 0x1304: return wxT("EC_TAG_CONN_MAX_UL"); case 0x1305: return wxT("EC_TAG_CONN_SLOT_ALLOCATION"); case 0x1306: return wxT("EC_TAG_CONN_TCP_PORT"); case 0x1307: return wxT("EC_TAG_CONN_UDP_PORT"); case 0x1308: return wxT("EC_TAG_CONN_UDP_DISABLE"); case 0x1309: return wxT("EC_TAG_CONN_MAX_FILE_SOURCES"); case 0x130A: return wxT("EC_TAG_CONN_MAX_CONN"); case 0x130B: return wxT("EC_TAG_CONN_AUTOCONNECT"); case 0x130C: return wxT("EC_TAG_CONN_RECONNECT"); case 0x130D: return wxT("EC_TAG_NETWORK_ED2K"); case 0x130E: return wxT("EC_TAG_NETWORK_KADEMLIA"); case 0x1400: return wxT("EC_TAG_PREFS_MESSAGEFILTER"); case 0x1401: return wxT("EC_TAG_MSGFILTER_ENABLED"); case 0x1402: return wxT("EC_TAG_MSGFILTER_ALL"); case 0x1403: return wxT("EC_TAG_MSGFILTER_FRIENDS"); case 0x1404: return wxT("EC_TAG_MSGFILTER_SECURE"); case 0x1405: return wxT("EC_TAG_MSGFILTER_BY_KEYWORD"); case 0x1406: return wxT("EC_TAG_MSGFILTER_KEYWORDS"); case 0x1500: return wxT("EC_TAG_PREFS_REMOTECTRL"); case 0x1501: return wxT("EC_TAG_WEBSERVER_AUTORUN"); case 0x1502: return wxT("EC_TAG_WEBSERVER_PORT"); case 0x1503: return wxT("EC_TAG_WEBSERVER_GUEST"); case 0x1504: return wxT("EC_TAG_WEBSERVER_USEGZIP"); case 0x1505: return wxT("EC_TAG_WEBSERVER_REFRESH"); case 0x1506: return wxT("EC_TAG_WEBSERVER_TEMPLATE"); case 0x1600: return wxT("EC_TAG_PREFS_ONLINESIG"); case 0x1601: return wxT("EC_TAG_ONLINESIG_ENABLED"); case 0x1700: return wxT("EC_TAG_PREFS_SERVERS"); case 0x1701: return wxT("EC_TAG_SERVERS_REMOVE_DEAD"); case 0x1702: return wxT("EC_TAG_SERVERS_DEAD_SERVER_RETRIES"); case 0x1703: return wxT("EC_TAG_SERVERS_AUTO_UPDATE"); case 0x1704: return wxT("EC_TAG_SERVERS_URL_LIST"); case 0x1705: return wxT("EC_TAG_SERVERS_ADD_FROM_SERVER"); case 0x1706: return wxT("EC_TAG_SERVERS_ADD_FROM_CLIENT"); case 0x1707: return wxT("EC_TAG_SERVERS_USE_SCORE_SYSTEM"); case 0x1708: return wxT("EC_TAG_SERVERS_SMART_ID_CHECK"); case 0x1709: return wxT("EC_TAG_SERVERS_SAFE_SERVER_CONNECT"); case 0x170A: return wxT("EC_TAG_SERVERS_AUTOCONN_STATIC_ONLY"); case 0x170B: return wxT("EC_TAG_SERVERS_MANUAL_HIGH_PRIO"); case 0x170C: return wxT("EC_TAG_SERVERS_UPDATE_URL"); case 0x1800: return wxT("EC_TAG_PREFS_FILES"); case 0x1801: return wxT("EC_TAG_FILES_ICH_ENABLED"); case 0x1802: return wxT("EC_TAG_FILES_AICH_TRUST"); case 0x1803: return wxT("EC_TAG_FILES_NEW_PAUSED"); case 0x1804: return wxT("EC_TAG_FILES_NEW_AUTO_DL_PRIO"); case 0x1805: return wxT("EC_TAG_FILES_PREVIEW_PRIO"); case 0x1806: return wxT("EC_TAG_FILES_NEW_AUTO_UL_PRIO"); case 0x1807: return wxT("EC_TAG_FILES_UL_FULL_CHUNKS"); case 0x1808: return wxT("EC_TAG_FILES_START_NEXT_PAUSED"); case 0x1809: return wxT("EC_TAG_FILES_RESUME_SAME_CAT"); case 0x180A: return wxT("EC_TAG_FILES_SAVE_SOURCES"); case 0x180B: return wxT("EC_TAG_FILES_EXTRACT_METADATA"); case 0x180C: return wxT("EC_TAG_FILES_ALLOC_FULL_SIZE"); case 0x180D: return wxT("EC_TAG_FILES_CHECK_FREE_SPACE"); case 0x180E: return wxT("EC_TAG_FILES_MIN_FREE_SPACE"); case 0x1900: return wxT("EC_TAG_PREFS_SRCDROP"); case 0x1901: return wxT("EC_TAG_SRCDROP_NONEEDED"); case 0x1902: return wxT("EC_TAG_SRCDROP_DROP_FQS"); case 0x1903: return wxT("EC_TAG_SRCDROP_DROP_HQRS"); case 0x1904: return wxT("EC_TAG_SRCDROP_HQRS_VALUE"); case 0x1905: return wxT("EC_TAG_SRCDROP_AUTODROP_TIMER"); case 0x1A00: return wxT("EC_TAG_PREFS_DIRECTORIES"); case 0x1A01: return wxT("EC_TAG_DIRECTORIES_INCOMING"); case 0x1A02: return wxT("EC_TAG_DIRECTORIES_TEMP"); case 0x1A03: return wxT("EC_TAG_DIRECTORIES_SHARED"); case 0x1A04: return wxT("EC_TAG_DIRECTORIES_SHARE_HIDDEN"); case 0x1B00: return wxT("EC_TAG_PREFS_STATISTICS"); case 0x1B01: return wxT("EC_TAG_STATSGRAPH_WIDTH"); case 0x1B02: return wxT("EC_TAG_STATSGRAPH_SCALE"); case 0x1B03: return wxT("EC_TAG_STATSGRAPH_LAST"); case 0x1B04: return wxT("EC_TAG_STATSGRAPH_DATA"); case 0x1B05: return wxT("EC_TAG_STATTREE_CAPPING"); case 0x1B06: return wxT("EC_TAG_STATTREE_NODE"); case 0x1B07: return wxT("EC_TAG_STAT_NODE_VALUE"); case 0x1B08: return wxT("EC_TAG_STAT_VALUE_TYPE"); case 0x1B09: return wxT("EC_TAG_STATTREE_NODEID"); case 0x1C00: return wxT("EC_TAG_PREFS_SECURITY"); case 0x1C01: return wxT("EC_TAG_SECURITY_CAN_SEE_SHARES"); case 0x1C02: return wxT("EC_TAG_IPFILTER_CLIENTS"); case 0x1C03: return wxT("EC_TAG_IPFILTER_SERVERS"); case 0x1C04: return wxT("EC_TAG_IPFILTER_AUTO_UPDATE"); case 0x1C05: return wxT("EC_TAG_IPFILTER_UPDATE_URL"); case 0x1C06: return wxT("EC_TAG_IPFILTER_LEVEL"); case 0x1C07: return wxT("EC_TAG_IPFILTER_FILTER_LAN"); case 0x1C08: return wxT("EC_TAG_SECURITY_USE_SECIDENT"); case 0x1C09: return wxT("EC_TAG_SECURITY_OBFUSCATION_SUPPORTED"); case 0x1C0A: return wxT("EC_TAG_SECURITY_OBFUSCATION_REQUESTED"); case 0x1C0B: return wxT("EC_TAG_SECURITY_OBFUSCATION_REQUIRED"); case 0x1D00: return wxT("EC_TAG_PREFS_CORETWEAKS"); case 0x1D01: return wxT("EC_TAG_CORETW_MAX_CONN_PER_FIVE"); case 0x1D02: return wxT("EC_TAG_CORETW_VERBOSE"); case 0x1D03: return wxT("EC_TAG_CORETW_FILEBUFFER"); case 0x1D04: return wxT("EC_TAG_CORETW_UL_QUEUE"); case 0x1D05: return wxT("EC_TAG_CORETW_SRV_KEEPALIVE_TIMEOUT"); case 0x1E00: return wxT("EC_TAG_PREFS_KADEMLIA"); case 0x1E01: return wxT("EC_TAG_KADEMLIA_UPDATE_URL"); default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg; } } wxString GetDebugNameEC_DETAIL_LEVEL(uint8 arg) { switch (arg) { case 0x00: return wxT("EC_DETAIL_CMD"); case 0x01: return wxT("EC_DETAIL_WEB"); case 0x02: return wxT("EC_DETAIL_FULL"); case 0x03: return wxT("EC_DETAIL_UPDATE"); case 0x04: return wxT("EC_DETAIL_INC_UPDATE"); default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg; } } wxString GetDebugNameEC_SEARCH_TYPE(uint8 arg) { switch (arg) { case 0x00: return wxT("EC_SEARCH_LOCAL"); case 0x01: return wxT("EC_SEARCH_GLOBAL"); case 0x02: return wxT("EC_SEARCH_KAD"); case 0x03: return wxT("EC_SEARCH_WEB"); default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg; } } wxString GetDebugNameEC_STATTREE_NODE_VALUE_TYPE(uint8 arg) { switch (arg) { case 0x00: return wxT("EC_VALUE_INTEGER"); case 0x01: return wxT("EC_VALUE_ISTRING"); case 0x02: return wxT("EC_VALUE_BYTES"); case 0x03: return wxT("EC_VALUE_ISHORT"); case 0x04: return wxT("EC_VALUE_TIME"); case 0x05: return wxT("EC_VALUE_SPEED"); case 0x06: return wxT("EC_VALUE_STRING"); case 0x07: return wxT("EC_VALUE_DOUBLE"); default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg; } } wxString GetDebugNameEcPrefs(uint32 arg) { switch (arg) { case 0x00000001: return wxT("EC_PREFS_CATEGORIES"); case 0x00000002: return wxT("EC_PREFS_GENERAL"); case 0x00000004: return wxT("EC_PREFS_CONNECTIONS"); case 0x00000008: return wxT("EC_PREFS_MESSAGEFILTER"); case 0x00000010: return wxT("EC_PREFS_REMOTECONTROLS"); case 0x00000020: return wxT("EC_PREFS_ONLINESIG"); case 0x00000040: return wxT("EC_PREFS_SERVERS"); case 0x00000080: return wxT("EC_PREFS_FILES"); case 0x00000100: return wxT("EC_PREFS_SRCDROP"); case 0x00000200: return wxT("EC_PREFS_DIRECTORIES"); case 0x00000400: return wxT("EC_PREFS_STATISTICS"); case 0x00000800: return wxT("EC_PREFS_SECURITY"); case 0x00001000: return wxT("EC_PREFS_CORETWEAKS"); case 0x00002000: return wxT("EC_PREFS_KADEMLIA"); default: return CFormat(wxT("unknown %d 0x%x")) % arg % arg; } } #endif // DEBUG_EC_IMPLEMENTATION #endif // __ECCODES_H__ amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/Makefile.am0000644000175000017500000000226112050266603022456 0ustar l3onl3onAM_CPPFLAGS = $(MULECPPFLAGS) -I$(top_srcdir)/src -I$(top_srcdir)/src/libs -I$(top_srcdir)/src/include $(WXBASE_CPPFLAGS) $(ZLIB_CPPFLAGS) AM_CXXFLAGS = $(MULECXXFLAGS) $(WX_CFLAGS_ONLY) $(WX_CXXFLAGS_ONLY) EXTRA_DIST = gen_ECVersion # Sources noinst_LIBRARIES = \ libec.a libec_a_SOURCES = \ ECTag.cpp \ ECPacket.cpp \ ECSocket.cpp \ ECMuleSocket.cpp \ RemoteConnect.cpp \ ECSpecialTags.cpp noinst_HEADERS = \ ECTag.h \ ECSocket.h \ ECMuleSocket.h \ ECPacket.h \ ECFileConfig.h \ ECSpecialTags.h \ ECCodes.h \ ECTagTypes.h \ ECID.h \ RemoteConnect.h MAINTAINERCLEANFILES = Makefile.in BUILT_SOURCES = ECVersion.h CLEANFILES = ECVersion.h EC-timestamp mkFileSum$(BUILD_EXEEXT) mkFileSum$(BUILD_EXEEXT): $(top_srcdir)/src/utils/mkFileSum.c $(BUILD_CC) $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $^ -o $@ ECVersion.h: EC-timestamp @if test ! -f $@; then \ rm -f EC-timestamp; \ $(MAKE) EC-timestamp; \ else :; fi EC-timestamp: mkFileSum$(BUILD_EXEEXT) $(top_srcdir)/src/libs/ec/cpp/gen_ECVersion $(top_srcdir)/src/libs/ec/cpp/ECCodes.h @echo "ECVersion.h timestamp file" > EC-timestamp @$(top_srcdir)/src/libs/ec/cpp/gen_ECVersion $(top_srcdir) amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/gen_ECVersion0000755000175000017500000000315312050266603023037 0ustar l3onl3on#!/bin/sh # This file is part of the aMule project. # # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA # # # This program generates a unique identifier for EC version checking # # Invocation: gen_ECVersion # # Used by the makefile to generate src/ECVersion.h top_srcdir=$1 echo -n "Generating ECVersion.h... " final_hash="`cat $top_srcdir/src/libs/ec/cpp/ECCodes.h | ./mkFileSum`" cat > ECVersion.h.new </dev/null 2>&1; then rm -f ECVersion.h.new echo "unchanged." else mv ECVersion.h.new ECVersion.h echo "updated." fi else mv ECVersion.h.new ECVersion.h echo "created." fi amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/ECSpecialTags.h0000644000175000017500000005234712050266603023214 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef ECSPECIALTAGS_H #define ECSPECIALTAGS_H //#warning Kry - Preferences packet derived from packet, and that's ok, but shouldn't be here because this is a tag file and forces a stupid include #include "ECPacket.h" // Needed for CECPacket #include "../../../NetworkFunctions.h" // Needed for IsLowID #include "../../../ClientCredits.h" // Needed for EIdentState #include // Needed for CFormat #include /* * Specific tags for specific requests * * \note EC remote end does not need to create these packets, * only using the getter functions. * * Regarding this, those classes are removed from remote build, * that have only a constructor. */ class CServer; class CKnownFile; class CPartFile; class CSearchFile; class CUpDownClient; class CFriend; /* * EC tags encoder. Idea: if for an object , client tag have value equal to previous * request, skip this tag. */ class CValueMap { /* * Tag -> LastValue map. Hold last value that transmitted to remote side */ std::map m_map_uint8; std::map m_map_uint16; std::map m_map_uint32; std::map m_map_uint64; std::map m_map_md4; std::map m_map_string; std::map m_map_tag; template void CreateTagT(ec_tagname_t tagname, T value, std::map &map, CECTag *parent) { // ADUNANZA BEGIN // Su Mac a volte ho problemi, pare proprio da queste parti. // Aggiunto controllo anti-crash if (!parent) return; // ADUNANZA END if ( (map.count(tagname) == 0) || (map[tagname] != value) ) { // ADUNANZA BEGIN // Su Mac a volte ho problemi, pare proprio da queste parti. // Aggiunto controllo #if 0 parent->AddTag(CECTag(tagname, value)); map[tagname] = value; #else if (parent->AddTag(CECTag(tagname, value))) { map[tagname] = value; } #endif // ADUNANZA END } } public: CValueMap() { } CValueMap(const CValueMap &valuemap) { m_map_uint8 = valuemap.m_map_uint8; m_map_uint16 = valuemap.m_map_uint16; m_map_uint32 = valuemap.m_map_uint32; m_map_uint64 = valuemap.m_map_uint64; m_map_md4 = valuemap.m_map_md4; m_map_string = valuemap.m_map_string; m_map_tag = valuemap.m_map_tag; } void CreateTag(ec_tagname_t tagname, uint8 value, CECTag *parent) { CreateTagT(tagname, value, m_map_uint8, parent); } void CreateTag(ec_tagname_t tagname, uint16 value, CECTag *parent) { CreateTagT(tagname, value, m_map_uint16, parent); } void CreateTag(ec_tagname_t tagname, uint32 value, CECTag *parent) { CreateTagT(tagname, value, m_map_uint32, parent); } void CreateTag(ec_tagname_t tagname, uint64 value, CECTag *parent) { CreateTagT(tagname, value, m_map_uint64, parent); } void CreateTag(ec_tagname_t tagname, CMD4Hash value, CECTag *parent) { CreateTagT(tagname, value, m_map_md4, parent); } void CreateTag(ec_tagname_t tagname, wxString value, CECTag *parent) { CreateTagT(tagname, value, m_map_string, parent); } bool AddTag(const CECTag &tag, CECTag *parent) { bool ret = false; ec_tagname_t tagname = tag.GetTagName(); if (m_map_tag.count(tagname) == 0 || m_map_tag[tagname] != tag) { m_map_tag[tagname] = tag; parent->AddTag(tag); ret = true; } return ret; } void ForgetTag(ec_tagname_t tagname) { m_map_tag.erase(tagname); } }; class CEC_Category_Tag : public CECTag { public: CEC_Category_Tag(uint32 cat_index, EC_DETAIL_LEVEL detail_level = EC_DETAIL_FULL); // for create-upate commands CEC_Category_Tag(uint32 cat_index, wxString name, wxString path, wxString comment, uint32 color, uint8 prio); bool Apply(); bool Create(); wxString Name() const { return GetTagByNameSafe(EC_TAG_CATEGORY_TITLE)->GetStringData(); } wxString Path() const { return GetTagByNameSafe(EC_TAG_CATEGORY_PATH)->GetStringData(); } wxString Comment() const { return GetTagByNameSafe(EC_TAG_CATEGORY_COMMENT)->GetStringData(); } uint8 Prio() const { return GetTagByNameSafe(EC_TAG_CATEGORY_PRIO)->GetInt(); } uint32 Color() const { return GetTagByNameSafe(EC_TAG_CATEGORY_COLOR)->GetInt(); } }; class CEC_Prefs_Packet : public CECPacket { public: CEC_Prefs_Packet(uint32 selection, EC_DETAIL_LEVEL prefs_detail = EC_DETAIL_FULL, EC_DETAIL_LEVEL cat_details = EC_DETAIL_FULL); // ADUNANZA BEGIN // Backport #if 0 void Apply(); #else void Apply() const; #endif // ADUNANZA END }; class CEC_Server_Tag : public CECTag { public: CEC_Server_Tag(const CServer *, EC_DETAIL_LEVEL); CEC_Server_Tag(const CServer *, CValueMap *valuemap); wxString ServerName(wxString * target = 0) const { return AssignIfExist(EC_TAG_SERVER_NAME, target); } wxString ServerDesc(wxString * target = 0) const { return AssignIfExist(EC_TAG_SERVER_DESC, target); } wxString ServerVersion(wxString * target = 0) const { return AssignIfExist(EC_TAG_SERVER_VERSION, target); } uint32 GetPrio(uint32 * target = 0) const { return AssignIfExist(EC_TAG_SERVER_PRIO, target); } bool GetStatic(bool * target = 0) const { return AssignIfExist(EC_TAG_SERVER_STATIC, target); } uint32 GetPing(uint32 * target = 0) const { return AssignIfExist(EC_TAG_SERVER_PING, target); } uint32 GetFailed(uint32 * target = 0) const { return AssignIfExist(EC_TAG_SERVER_FAILED, target); } uint32 GetFiles(uint32 * target = 0) const { return AssignIfExist(EC_TAG_SERVER_FILES, target); } uint32 GetUsers(uint32 * target = 0) const { return AssignIfExist(EC_TAG_SERVER_USERS, target); } uint32 GetMaxUsers(uint32 * target = 0) const { return AssignIfExist(EC_TAG_SERVER_USERS_MAX, target); } uint32 ID() const { return GetInt(); } }; class CEC_ConnState_Tag : public CECTag { public: CEC_ConnState_Tag(EC_DETAIL_LEVEL); uint32 GetEd2kId() const { return GetTagByNameSafe(EC_TAG_ED2K_ID)->GetInt(); } uint32 GetClientId() const { return GetTagByNameSafe(EC_TAG_CLIENT_ID)->GetInt(); } bool HasLowID() const { return GetEd2kId() < HIGHEST_LOWID_ED2K_KAD; } bool IsConnected() const { return IsConnectedED2K() || IsConnectedKademlia(); } bool IsConnectedED2K() const { return (GetInt() & 0x01) != 0; } bool IsConnectingED2K() const { return (GetInt() & 0x02) != 0; } bool IsConnectedKademlia() const { return (GetInt() & 0x04) != 0; } bool IsKadFirewalled() const { return (GetInt() & 0x08) != 0; } bool IsKadRunning() const { return (GetInt() & 0x10) != 0; } }; class CEC_SharedFile_Tag : public CECTag { public: CEC_SharedFile_Tag(const CKnownFile *file, EC_DETAIL_LEVEL detail_level, CValueMap *valuemap = NULL, ec_tagname_t name = EC_TAG_KNOWNFILE); // template needs it uint32 ID() const { return GetInt(); } CMD4Hash FileHash() const { return GetTagByNameSafe(EC_TAG_PARTFILE_HASH)->GetMD4Data(); } wxString FileHashString() const { return FileHash().Encode(); } wxString FileName() const { return GetTagByNameSafe(EC_TAG_PARTFILE_NAME)->GetStringData(); } bool FileName(wxString &target) const { return AssignIfExist(EC_TAG_PARTFILE_NAME, target); } wxString FilePath() const { return GetTagByNameSafe(EC_TAG_KNOWNFILE_FILENAME)->GetStringData(); } bool FilePath(wxString &target) const { return AssignIfExist(EC_TAG_KNOWNFILE_FILENAME, target); } uint64 SizeFull() const { return GetTagByNameSafe(EC_TAG_PARTFILE_SIZE_FULL)->GetInt(); } wxString FileEd2kLink() const { return GetTagByNameSafe(EC_TAG_PARTFILE_ED2K_LINK)->GetStringData(); } uint8 UpPrio(uint8 *target = 0) const { return AssignIfExist(EC_TAG_KNOWNFILE_PRIO, target); } uint16 GetRequests(uint16 *target = 0) const { return AssignIfExist(EC_TAG_KNOWNFILE_REQ_COUNT, target); } uint32 GetAllRequests(uint32 *target = 0) const { return AssignIfExist(EC_TAG_KNOWNFILE_REQ_COUNT_ALL, target); } uint16 GetAccepts(uint16 *target = 0) const { return AssignIfExist(EC_TAG_KNOWNFILE_ACCEPT_COUNT, target); } uint32 GetAllAccepts(uint32 *target = 0) const { return AssignIfExist(EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL, target); } uint64 GetXferred(uint64 *target = 0) const { return AssignIfExist(EC_TAG_KNOWNFILE_XFERRED, target); } uint64 GetAllXferred(uint64 *target = 0) const { return AssignIfExist(EC_TAG_KNOWNFILE_XFERRED_ALL, target); } uint16 GetCompleteSourcesLow(uint16 *target = 0) const { return AssignIfExist(EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW, target); } uint16 GetCompleteSourcesHigh(uint16 *target = 0) const { return AssignIfExist(EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH, target); } uint16 GetCompleteSources(uint16 *target = 0) const { return AssignIfExist(EC_TAG_KNOWNFILE_COMPLETE_SOURCES, target); } uint16 GetOnQueue(uint16 *target = 0) const { return AssignIfExist(EC_TAG_KNOWNFILE_ON_QUEUE, target); } bool GetComment(wxString &target) const { return AssignIfExist(EC_TAG_KNOWNFILE_COMMENT, target); } bool GetRating(uint8 &target) const { return AssignIfExist(EC_TAG_KNOWNFILE_RATING, target); } bool GetAICHHash(wxString &target) const { return AssignIfExist(EC_TAG_KNOWNFILE_AICH_MASTERHASH, target); } private: CMD4Hash GetMD4Data(); // Block it, because it doesn't work anymore! }; class CEC_PartFile_Tag : public CEC_SharedFile_Tag { public: CEC_PartFile_Tag(const CPartFile *file, EC_DETAIL_LEVEL detail_level, CValueMap *valuemap = NULL); uint16 PartMetID() const { return GetTagByNameSafe(EC_TAG_PARTFILE_PARTMETID)->GetInt(); } uint64 SizeXfer(uint64 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SIZE_XFER, target); } uint64 SizeDone(uint64 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SIZE_DONE, target); } uint8 FileStatus(uint8 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_STATUS, target); } bool Stopped(bool *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_STOPPED, target); } uint16 SourceCount(uint16 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SOURCE_COUNT, target); } // ADUNANZA BEGIN inline uint16 AduSourceCount(uint16 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_ADU_SOURCE_COUNT, target); } // ADUNANAZA END uint16 SourceNotCurrCount(uint16 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT, target); } uint16 SourceXferCount(uint16 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SOURCE_COUNT_XFER, target); } uint16 SourceCountA4AF(uint16 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SOURCE_COUNT_A4AF, target); } uint32 Speed(uint32 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SPEED, target); } uint8 DownPrio(uint8 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_PRIO, target); } uint8 FileCat(uint8 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_CAT, target); } time_t LastSeenComplete(time_t *target = 0)const { return AssignIfExist(EC_TAG_PARTFILE_LAST_SEEN_COMP, target); } time_t LastDateChanged(time_t *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_LAST_RECV, target); } uint32 DownloadActiveTime(uint32 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_DOWNLOAD_ACTIVE, target); } uint16 AvailablePartCount(uint16 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_AVAILABLE_PARTS, target); } bool Shared(bool *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SHARED, target); } bool A4AFAuto(bool &target) const { return AssignIfExist(EC_TAG_PARTFILE_A4AFAUTO, target); } // ADUNANZA BEGIN // backport bool HashingProgress(uint16 &target) const { return AssignIfExist(EC_TAG_PARTFILE_HASHED_PART_COUNT, target); } // ADUNANZA END uint64 GetLostDueToCorruption(uint64 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_LOST_CORRUPTION, target); } uint64 GetGainDueToCompression(uint64 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_GAINED_COMPRESSION, target); } uint32 TotalPacketsSavedDueToICH(uint32 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SAVED_ICH, target); } wxString PartMetName() const { uint16 id = PartMetID(); return id ? (CFormat(wxT("%03u.part.met")) % id) : wxEmptyString; } wxString GetFileStatusString() const; }; class CEC_UpDownClient_Tag : public CECTag { public: CEC_UpDownClient_Tag(const CUpDownClient* client, EC_DETAIL_LEVEL detail_level, CValueMap* valuemap); uint32 ID() const { return GetInt(); } CMD4Hash UserHash(CMD4Hash * target = 0) const { return AssignIfExist(EC_TAG_CLIENT_HASH, target); } uint32 UserID(uint32 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_USER_ID, target); } wxString ClientName(wxString *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_NAME, target); } uint32 SpeedUp(uint32 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_UP_SPEED, target); } float SpeedDown(float *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_DOWN_SPEED, target); } uint64 XferUp(uint64 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_UPLOAD_TOTAL, target); }; uint64 XferDown(uint64 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_DOWNLOAD_TOTAL, target); } uint64 XferUpSession(uint64 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_UPLOAD_SESSION, target); } uint64 XferDownSession(uint64 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SIZE_XFER, target); } bool FriendSlot(bool &target) const { return AssignIfExist(EC_TAG_CLIENT_FRIEND_SLOT, target); } bool ClientSoftware(uint8 &target) const { return AssignIfExist(EC_TAG_CLIENT_SOFTWARE, target); } bool SoftVerStr(wxString &target) const { return AssignIfExist(EC_TAG_CLIENT_SOFT_VER_STR, target); } bool ClientUploadState(uint8 &target) const { return AssignIfExist(EC_TAG_CLIENT_UPLOAD_STATE, target); } bool ClientDownloadState(uint8 &target) const { return AssignIfExist(EC_TAG_CLIENT_DOWNLOAD_STATE, target); } //uint32 WaitTime(uint32 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_WAIT_TIME, target); } //uint32 XferTime(uint32 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_XFER_TIME, target); } //uint32 LastReqTime(uint32 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_LAST_TIME, target); } //uint32 QueueTime(uint32 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_QUEUE_TIME, target); } bool GetSourceFrom(uint8 &target) const { return AssignIfExist(EC_TAG_CLIENT_FROM, target); } bool UserIP(uint32 &target) const { return AssignIfExist(EC_TAG_CLIENT_USER_IP, target); } // ADUNANZA BEGIN bool ReceivedTagAdunanzA(bool &target) const { return AssignIfExist(EC_TAG_CLIENT_RECEIVEDTAGADUNANZA, target); } // ADUNANZA END uint16 UserPort(uint16 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_USER_PORT, target); } uint32 ServerIP(uint32 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_SERVER_IP, target); } uint16 ServerPort(uint16 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_SERVER_PORT, target); } wxString ServerName(wxString *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_SERVER_NAME, target); } bool KadPort(uint16 &target) const { return AssignIfExist(EC_TAG_CLIENT_KAD_PORT, target); } uint32 Score(uint32 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_SCORE, target); } uint16 WaitingPosition(uint16 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_WAITING_POSITION, target); } uint16 RemoteQueueRank(uint16 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_REMOTE_QUEUE_RANK, target); } uint16 OldRemoteQueueRank(uint16 *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK, target); } EIdentState GetCurrentIdentState(EIdentState * target = 0) const { return (EIdentState) AssignIfExist(EC_TAG_CLIENT_IDENT_STATE, (uint32 *) target); } bool ObfuscationStatus(uint8 &target) const { return AssignIfExist(EC_TAG_CLIENT_OBFUSCATION_STATUS, target); } bool HasExtendedProtocol(bool *target = 0) const { return AssignIfExist(EC_TAG_CLIENT_EXT_PROTOCOL, target); } bool NextRequestedPart(uint16 &target) const { return AssignIfExist(EC_TAG_CLIENT_NEXT_REQUESTED_PART, target); } bool LastDownloadingPart(uint16 &target) const { return AssignIfExist(EC_TAG_CLIENT_LAST_DOWNLOADING_PART, target); } bool UploadFile(uint32 &target) const { return AssignIfExist(EC_TAG_CLIENT_UPLOAD_FILE, target); } bool RequestFile(uint32 &target) const { return AssignIfExist(EC_TAG_CLIENT_REQUEST_FILE, target); } bool RemoteFilename(wxString &target) const { return AssignIfExist(EC_TAG_CLIENT_REMOTE_FILENAME, target); } bool DisableViewShared(bool &target) const { return AssignIfExist(EC_TAG_CLIENT_DISABLE_VIEW_SHARED, target); } bool Version(uint32 &target) const { return AssignIfExist(EC_TAG_CLIENT_VERSION, target); } bool ModVersion(wxString &target) const { return AssignIfExist(EC_TAG_CLIENT_MOD_VERSION, target); } bool OSInfo(wxString &target) const { return AssignIfExist(EC_TAG_CLIENT_OS_INFO, target); } bool AvailableParts(uint16 &target) const { return AssignIfExist(EC_TAG_CLIENT_AVAILABLE_PARTS, target); } private: CMD4Hash GetMD4Data(); // Block it, because it doesn't work anymore! }; class CEC_SearchFile_Tag : public CECTag { public: // ADUNANZA BEGIN // back #if 0 CEC_SearchFile_Tag(CSearchFile *file, EC_DETAIL_LEVEL detail_level, CValueMap *valuemap = NULL); #else CEC_SearchFile_Tag(const CSearchFile *file, EC_DETAIL_LEVEL detail_level, CValueMap *valuemap = NULL); #endif // ADUNANZA END // template needs it uint32 ID() const { return GetInt(); } uint32 ParentID() const { return GetTagByNameSafe(EC_TAG_SEARCH_PARENT)->GetInt(); } CMD4Hash FileHash() const { return GetTagByNameSafe(EC_TAG_PARTFILE_HASH)->GetMD4Data(); } wxString FileHashString() const { return FileHash().Encode(); } wxString FileName() const { return GetTagByNameSafe(EC_TAG_PARTFILE_NAME)->GetStringData(); } uint64 SizeFull() const { return GetTagByNameSafe(EC_TAG_PARTFILE_SIZE_FULL)->GetInt(); } uint32 SourceCount(uint32 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SOURCE_COUNT, target); } // ADUNANZA BEGIN inline uint32 AduSourceCount(uint32 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_ADU_SOURCE_COUNT, target); } // ADUNANAZA END uint32 CompleteSourceCount(uint32 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_SOURCE_COUNT_XFER, target); } bool AlreadyHave() const { return GetTagByNameSafe(EC_TAG_PARTFILE_STATUS)->GetInt() != 0; /* == CSearchFile::NEW */ } uint32 DownloadStatus(uint32 *target = 0) const { return AssignIfExist(EC_TAG_PARTFILE_STATUS, target); } private: CMD4Hash GetMD4Data(); // Block it, because it doesn't work anymore! }; class CEC_Search_Tag : public CECTag { public: // search request CEC_Search_Tag(const wxString &name, EC_SEARCH_TYPE search_type, const wxString &file_type, const wxString &extension, uint32 avail, uint64 min_size, uint64 max_size); wxString SearchText() const { return GetTagByNameSafe(EC_TAG_SEARCH_NAME)->GetStringData(); } EC_SEARCH_TYPE SearchType() const { return (EC_SEARCH_TYPE)GetInt(); } uint64 MinSize() const { return GetTagByNameSafe(EC_TAG_SEARCH_MIN_SIZE)->GetInt(); } uint64 MaxSize() const { return GetTagByNameSafe(EC_TAG_SEARCH_MAX_SIZE)->GetInt(); } uint32 Avail() const { return GetTagByNameSafe(EC_TAG_SEARCH_AVAILABILITY)->GetInt(); } wxString SearchExt() const { return GetTagByNameSafe(EC_TAG_SEARCH_EXTENSION)->GetStringData(); } wxString SearchFileType() const { return GetTagByNameSafe(EC_TAG_SEARCH_FILE_TYPE)->GetStringData(); } }; class CEC_StatTree_Node_Tag : public CECTag { public: CEC_StatTree_Node_Tag(); // just to keep compiler happy wxString GetDisplayString() const; }; class CEC_Friend_Tag : public CECTag { public: CEC_Friend_Tag(const CFriend* Friend, CValueMap* valuemap); uint32 ID() const { return GetInt(); } bool Name(wxString &target) const { return AssignIfExist(EC_TAG_FRIEND_NAME, target); } bool UserHash(CMD4Hash &target) const { return AssignIfExist(EC_TAG_FRIEND_HASH, target); } bool IP(uint32 &target) const { return AssignIfExist(EC_TAG_FRIEND_IP, target); } bool Port(uint16 &target) const { return AssignIfExist(EC_TAG_FRIEND_PORT, target); } bool Client(uint32 &target) const { return AssignIfExist(EC_TAG_FRIEND_CLIENT, target); } }; #endif /* ECSPECIALTAGS_H */ // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/cpp/RemoteConnect.cpp0000644000175000017500000002145712050266603023703 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "RemoteConnect.h" #include #include #include using std::auto_ptr; DEFINE_LOCAL_EVENT_TYPE(wxEVT_EC_CONNECTION) CECLoginPacket::CECLoginPacket(const wxString& client, const wxString& version, bool canZLIB, bool canUTF8numbers, bool canNotify) : CECPacket(EC_OP_AUTH_REQ) { AddTag(CECTag(EC_TAG_CLIENT_NAME, client)); AddTag(CECTag(EC_TAG_CLIENT_VERSION, version)); AddTag(CECTag(EC_TAG_PROTOCOL_VERSION, (uint64)EC_CURRENT_PROTOCOL_VERSION)); #ifdef EC_VERSION_ID CMD4Hash versionhash; wxCHECK2(versionhash.Decode(wxT(EC_VERSION_ID)), /* Do nothing. */); AddTag(CECTag(EC_TAG_VERSION_ID, versionhash)); #endif // Send capabilities: // support ZLIB compression if (canZLIB) AddTag(CECEmptyTag(EC_TAG_CAN_ZLIB)); // support encoding of integers as UTF-8 if (canUTF8numbers) AddTag(CECEmptyTag(EC_TAG_CAN_UTF8_NUMBERS)); // client accepts push messages if (canNotify) AddTag(CECEmptyTag(EC_TAG_CAN_NOTIFY)); } CECAuthPacket::CECAuthPacket(const wxString& pass) : CECPacket(EC_OP_AUTH_PASSWD) { CMD4Hash passhash; wxCHECK2(passhash.Decode(pass), /* Do nothing. */); AddTag(CECTag(EC_TAG_PASSWD_HASH, passhash)); } /*! * Connection to remote core * */ CRemoteConnect::CRemoteConnect(wxEvtHandler* evt_handler) : CECMuleSocket(evt_handler != 0), m_ec_state(EC_INIT), m_req_fifo(), // Give application some indication about how fast requests are served // When request fifo contain more that certain number of entries, it may // indicate that either core or network is slowing us down m_req_count(0), // This is not mean to be absolute limit, because we can't drop requests // out of calling context; it is just signal to application to slow down m_req_fifo_thr(20), m_notifier(evt_handler), m_canZLIB(false), m_canUTF8numbers(false), m_canNotify(false) { } void CRemoteConnect::SetCapabilities(bool canZLIB, bool canUTF8numbers, bool canNotify) { m_canZLIB = canZLIB; if (canZLIB) { m_my_flags |= EC_FLAG_ZLIB; } m_canUTF8numbers = canUTF8numbers; if (canUTF8numbers) { m_my_flags |= EC_FLAG_UTF8_NUMBERS; } m_canNotify = canNotify; } bool CRemoteConnect::ConnectToCore(const wxString &host, int port, const wxString &WXUNUSED(login), const wxString &pass, const wxString& client, const wxString& version) { m_connectionPassword = pass; m_client = client; m_version = version; // don't even try to connect without a valid password if (m_connectionPassword.IsEmpty() || m_connectionPassword == wxT("d41d8cd98f00b204e9800998ecf8427e")) { m_server_reply = _("You must specify a non-empty password."); return false; } else { CMD4Hash hash; if (!hash.Decode(m_connectionPassword)) { m_server_reply = _("Invalid password, not a MD5 hash!"); return false; } else if (hash.IsEmpty()) { m_server_reply = _("You must specify a non-empty password."); return false; } } wxIPV4address addr; addr.Hostname(host); addr.Service(port); if (ConnectSocket(addr)) { CECLoginPacket login_req(m_client, m_version, m_canZLIB, m_canUTF8numbers, m_canNotify); std::auto_ptr getSalt(SendRecvPacket(&login_req)); m_ec_state = EC_REQ_SENT; ProcessAuthPacket(getSalt.get()); CECAuthPacket passwdPacket(m_connectionPassword); std::auto_ptr reply(SendRecvPacket(&passwdPacket)); m_ec_state = EC_PASSWD_SENT; return ProcessAuthPacket(reply.get()); } else if (m_notifier) { m_ec_state = EC_CONNECT_SENT; } else { return false; } return true; } bool CRemoteConnect::IsConnectedToLocalHost() { wxIPV4address addr; return GetPeer(addr) ? addr.IsLocalHost() : false; } void CRemoteConnect::WriteDoneAndQueueEmpty() { } void CRemoteConnect::OnConnect() { if (m_notifier) { wxASSERT(m_ec_state == EC_CONNECT_SENT); CECLoginPacket login_req(m_client, m_version, m_canZLIB, m_canUTF8numbers, m_canNotify); CECSocket::SendPacket(&login_req); m_ec_state = EC_REQ_SENT; } else { // do nothing, calling code will take from here } } void CRemoteConnect::OnLost() { if (m_notifier) { // Notify app of failure wxECSocketEvent event(wxEVT_EC_CONNECTION,false,_("Connection failure")); m_notifier->AddPendingEvent(event); } } const CECPacket *CRemoteConnect::OnPacketReceived(const CECPacket *packet, uint32 trueSize) { CECPacket *next_packet = 0; m_req_count--; packet->DebugPrint(true, trueSize); switch(m_ec_state) { case EC_REQ_SENT: if (ProcessAuthPacket(packet)) { CECAuthPacket passwdPacket(m_connectionPassword); CECSocket::SendPacket(&passwdPacket); m_ec_state = EC_PASSWD_SENT; } break; case EC_PASSWD_SENT: ProcessAuthPacket(packet); break; case EC_OK: if ( !m_req_fifo.empty() ) { CECPacketHandlerBase *handler = m_req_fifo.front(); m_req_fifo.pop_front(); if ( handler ) { handler->HandlePacket(packet); } } else { printf("EC error - packet received, but request fifo is empty\n"); } break; default: break; } // no reply by default return next_packet; } /* * Our requests are served by core in FCFS order. And core always replies. So, even * if we're not interested in reply, we preserve place in request fifo. */ void CRemoteConnect::SendRequest(CECPacketHandlerBase *handler, const CECPacket *request) { m_req_count++; m_req_fifo.push_back(handler); CECSocket::SendPacket(request); } void CRemoteConnect::SendPacket(const CECPacket *request) { SendRequest(0, request); } bool CRemoteConnect::ProcessAuthPacket(const CECPacket *reply) { bool result = false; if (!reply) { m_server_reply = _("EC connection failed. Empty reply."); CloseSocket(); } else { if ((m_ec_state == EC_REQ_SENT) && (reply->GetOpCode() == EC_OP_AUTH_SALT)) { const CECTag *passwordSalt = reply->GetTagByName(EC_TAG_PASSWD_SALT); if ( NULL != passwordSalt) { wxString saltHash = MD5Sum(CFormat(wxT("%lX")) % passwordSalt->GetInt()).GetHash(); m_connectionPassword = MD5Sum(m_connectionPassword.Lower() + saltHash).GetHash(); m_ec_state = EC_SALT_RECEIVED; return true; } else { m_server_reply = _("External Connection: Bad reply, handshake failed. Connection closed."); m_ec_state = EC_FAIL; CloseSocket(); } } else if ((m_ec_state == EC_PASSWD_SENT) && (reply->GetOpCode() == EC_OP_AUTH_OK)) { m_ec_state = EC_OK; result = true; if (reply->GetTagByName(EC_TAG_SERVER_VERSION)) { m_server_reply = _("Succeeded! Connection established to aMule ") + reply->GetTagByName(EC_TAG_SERVER_VERSION)->GetStringData(); } else { m_server_reply = _("Succeeded! Connection established."); } }else { m_ec_state = EC_FAIL; const CECTag *reason = reply->GetTagByName(EC_TAG_STRING); if (reason != NULL) { m_server_reply = wxString(_("External Connection: Access denied because: ")) + wxGetTranslation(reason->GetStringData()); } else { m_server_reply = _("External Connection: Handshake failed."); } CloseSocket(); } } if ( m_notifier ) { wxECSocketEvent event(wxEVT_EC_CONNECTION, result, m_server_reply); m_notifier->AddPendingEvent(event); } return result; } /******************** EC API ***********************/ void CRemoteConnect::StartKad() { CECPacket req(EC_OP_KAD_START); SendPacket(&req); } void CRemoteConnect::StopKad() { CECPacket req(EC_OP_KAD_STOP); SendPacket(&req); } void CRemoteConnect::ConnectED2K(uint32 ip, uint16 port) { CECPacket req(EC_OP_SERVER_CONNECT); if (ip && port) { req.AddTag(CECTag(EC_TAG_SERVER, EC_IPv4_t(ip, port))); } SendPacket(&req); } void CRemoteConnect::DisconnectED2K() { CECPacket req(EC_OP_SERVER_DISCONNECT); SendPacket(&req); } void CRemoteConnect::RemoveServer(uint32 ip, uint16 port) { CECPacket req(EC_OP_SERVER_REMOVE); if (ip && port) { req.AddTag(CECTag(EC_TAG_SERVER, EC_IPv4_t(ip, port))); } SendPacket(&req); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/abstracts/0000755000175000017500000000000012053222103021613 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/abstracts/ECTagTypes.abstract0000644000175000017500000000056610753565633025346 0ustar l3onl3on[Section Definition] FileName ECTagTypes FileContent EC tag types for use on the ec library. [/Section] [Section Content] Type Enum Name ECTagTypes DataType uint8 EC_TAGTYPE_UNKNOWN 0 EC_TAGTYPE_CUSTOM 1 EC_TAGTYPE_UINT8 2 EC_TAGTYPE_UINT16 3 EC_TAGTYPE_UINT32 4 EC_TAGTYPE_UINT64 5 EC_TAGTYPE_STRING 6 EC_TAGTYPE_DOUBLE 7 EC_TAGTYPE_IPV4 8 EC_TAGTYPE_HASH16 9 [/Section] amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/abstracts/License.abstract0000644000175000017500000000172112050266603024735 0ustar l3onl3on This file is part of the aMule Project. Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) Any parts of this program derived from the xMule, lMule or eMule project, or contributed by third-party developers are copyrighted by their respective authors. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/abstracts/ECCodes.abstract0000644000175000017500000005041312050266603024622 0ustar l3onl3on[Section Definition] FileName ECCodes FileContent EC codes and type definition. [/Section] # The types of the values used on EC. [Section Content] Type TypeDef ec_opcode_t uint8 ec_tagname_t uint16 ec_tagtype_t uint8 ec_taglen_t uint32 [/Section] # Current protocol version. [Section Content] Type Enum Name ProtocolVersion DataType uint16 EC_CURRENT_PROTOCOL_VERSION 0x0204 [/Section] # This flags are used on the transmission layer. [Section Content] Type Enum Name ECFlags DataType uint32 EC_FLAG_ZLIB 0x00000001 EC_FLAG_UTF8_NUMBERS 0x00000002 EC_FLAG_UNKNOWN_MASK 0xff7f7f08 [/Section] # OpCodes # Note: Needs some reorganization on Request/Reply [Section Content] Type Enum Name ECOpCodes DataType uint8 EC_OP_NOOP 0x01 EC_OP_AUTH_REQ 0x02 EC_OP_AUTH_FAIL 0x03 EC_OP_AUTH_OK 0x04 EC_OP_FAILED 0x05 EC_OP_STRINGS 0x06 EC_OP_MISC_DATA 0x07 EC_OP_SHUTDOWN 0x08 EC_OP_ADD_LINK 0x09 EC_OP_STAT_REQ 0x0A EC_OP_GET_CONNSTATE 0x0B EC_OP_STATS 0x0C EC_OP_GET_DLOAD_QUEUE 0x0D EC_OP_GET_ULOAD_QUEUE 0x0E EC_OP_GET_SHARED_FILES 0x10 EC_OP_SHARED_SET_PRIO 0x11 EC_OP_PARTFILE_REMOVE_NO_NEEDED 0x12 EC_OP_PARTFILE_REMOVE_FULL_QUEUE 0x13 EC_OP_PARTFILE_REMOVE_HIGH_QUEUE 0x14 EC_OP_PARTFILE_UNUSED 0x15 EC_OP_PARTFILE_SWAP_A4AF_THIS 0x16 EC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO 0x17 EC_OP_PARTFILE_SWAP_A4AF_OTHERS 0x18 EC_OP_PARTFILE_PAUSE 0x19 EC_OP_PARTFILE_RESUME 0x1A EC_OP_PARTFILE_STOP 0x1B EC_OP_PARTFILE_PRIO_SET 0x1C EC_OP_PARTFILE_DELETE 0x1D EC_OP_PARTFILE_SET_CAT 0x1E EC_OP_DLOAD_QUEUE 0x1F EC_OP_ULOAD_QUEUE 0x20 EC_OP_SHARED_FILES 0x22 EC_OP_SHAREDFILES_RELOAD 0x23 EC_OP_RENAME_FILE 0x25 EC_OP_SEARCH_START 0x26 EC_OP_SEARCH_STOP 0x27 EC_OP_SEARCH_RESULTS 0x28 EC_OP_SEARCH_PROGRESS 0x29 EC_OP_DOWNLOAD_SEARCH_RESULT 0x2A EC_OP_IPFILTER_RELOAD 0x2B EC_OP_GET_SERVER_LIST 0x2C EC_OP_SERVER_LIST 0x2D EC_OP_SERVER_DISCONNECT 0x2E EC_OP_SERVER_CONNECT 0x2F EC_OP_SERVER_REMOVE 0x30 EC_OP_SERVER_ADD 0x31 EC_OP_SERVER_UPDATE_FROM_URL 0x32 EC_OP_ADDLOGLINE 0x33 EC_OP_ADDDEBUGLOGLINE 0x34 EC_OP_GET_LOG 0x35 EC_OP_GET_DEBUGLOG 0x36 EC_OP_GET_SERVERINFO 0x37 EC_OP_LOG 0x38 EC_OP_DEBUGLOG 0x39 EC_OP_SERVERINFO 0x3A EC_OP_RESET_LOG 0x3B EC_OP_RESET_DEBUGLOG 0x3C EC_OP_CLEAR_SERVERINFO 0x3D EC_OP_GET_LAST_LOG_ENTRY 0x3E EC_OP_GET_PREFERENCES 0x3F EC_OP_SET_PREFERENCES 0x40 EC_OP_CREATE_CATEGORY 0x41 EC_OP_UPDATE_CATEGORY 0x42 EC_OP_DELETE_CATEGORY 0x43 EC_OP_GET_STATSGRAPHS 0x44 EC_OP_STATSGRAPHS 0x45 EC_OP_GET_STATSTREE 0x46 EC_OP_STATSTREE 0x47 EC_OP_KAD_START 0x48 EC_OP_KAD_STOP 0x49 EC_OP_CONNECT 0x4A EC_OP_DISCONNECT 0x4B EC_OP_KAD_UPDATE_FROM_URL 0x4D EC_OP_KAD_BOOTSTRAP_FROM_IP 0x4E EC_OP_AUTH_SALT 0x4F EC_OP_AUTH_PASSWD 0x50 EC_OP_IPFILTER_UPDATE 0x51 EC_OP_GET_UPDATE 0x52 EC_OP_CLEAR_COMPLETED 0x53 EC_OP_CLIENT_SWAP_TO_ANOTHER_FILE 0x54 EC_OP_SHARED_FILE_SET_COMMENT 0x55 EC_OP_SERVER_SET_STATIC_PRIO 0x56 EC_OP_FRIEND 0x57 [/Section] [Section Content] Type Enum Name ECTagNames DataType uint16 EC_TAG_STRING 0x0000 EC_TAG_PASSWD_HASH 0x0001 EC_TAG_PROTOCOL_VERSION 0x0002 EC_TAG_VERSION_ID 0x0003 EC_TAG_DETAIL_LEVEL 0x0004 EC_TAG_CONNSTATE 0x0005 EC_TAG_ED2K_ID 0x0006 EC_TAG_LOG_TO_STATUS 0x0007 EC_TAG_BOOTSTRAP_IP 0x0008 EC_TAG_BOOTSTRAP_PORT 0x0009 EC_TAG_CLIENT_ID 0x000A EC_TAG_PASSWD_SALT 0x000B EC_TAG_CAN_ZLIB 0x000C EC_TAG_CAN_UTF8_NUMBERS 0x000D EC_TAG_CAN_NOTIFY 0x000E EC_TAG_ECID 0x000F EC_TAG_CLIENT_NAME 0x0100 EC_TAG_CLIENT_VERSION 0x0101 EC_TAG_CLIENT_MOD 0x0102 EC_TAG_STATS_UL_SPEED 0x0200 EC_TAG_STATS_DL_SPEED 0x0201 EC_TAG_STATS_UL_SPEED_LIMIT 0x0202 EC_TAG_STATS_DL_SPEED_LIMIT 0x0203 EC_TAG_STATS_UP_OVERHEAD 0x0204 EC_TAG_STATS_DOWN_OVERHEAD 0x0205 EC_TAG_STATS_TOTAL_SRC_COUNT 0x0206 EC_TAG_STATS_BANNED_COUNT 0x0207 EC_TAG_STATS_UL_QUEUE_LEN 0x0208 EC_TAG_STATS_ED2K_USERS 0x0209 EC_TAG_STATS_KAD_USERS 0x020A EC_TAG_STATS_ED2K_FILES 0x020B EC_TAG_STATS_KAD_FILES 0x020C EC_TAG_STATS_LOGGER_MESSAGE 0x020D EC_TAG_STATS_KAD_FIREWALLED_UDP 0x020E EC_TAG_STATS_KAD_INDEXED_SOURCES 0x020F EC_TAG_STATS_KAD_INDEXED_KEYWORDS 0x0210 EC_TAG_STATS_KAD_INDEXED_NOTES 0x0211 EC_TAG_STATS_KAD_INDEXED_LOAD 0x0212 EC_TAG_STATS_KAD_IP_ADRESS 0x0213 EC_TAG_STATS_BUDDY_STATUS 0x0214 EC_TAG_STATS_BUDDY_IP 0x0215 EC_TAG_STATS_BUDDY_PORT 0x0216 EC_TAG_STATS_KAD_IN_LAN_MODE 0x0217 EC_TAG_STATS_TOTAL_SENT_BYTES 0x0218 EC_TAG_STATS_TOTAL_RECEIVED_BYTES 0x0219 EC_TAG_STATS_SHARED_FILE_COUNT 0x021A # ADUNANZA BEGIN # backport begin EC_TAG_STATS_KAD_NODES 0x021B # backport end # Per i KADU decido di partire da 0x280 che dovrebbe essere la seconda # meta' tra 0x200 e 0x300 EC_TAG_STATS_KADU_ACTIVE_NODES 0x0280 EC_TAG_STATS_KADU_TOTAL_NODES 0x0281 EC_TAG_STATS_ADU_KADU_UL_SPEED 0x0282 EC_TAG_STATS_ADU_EXT_UL_SPEED 0x0283 EC_TAG_STATS_ADU_KADU_DL_SPEED 0x0284 EC_TAG_STATS_ADU_EXT_DL_SPEED 0x0285 # ADUNANZA END EC_TAG_PARTFILE 0x0300 EC_TAG_PARTFILE_NAME 0x0301 EC_TAG_PARTFILE_PARTMETID 0x0302 EC_TAG_PARTFILE_SIZE_FULL 0x0303 EC_TAG_PARTFILE_SIZE_XFER 0x0304 EC_TAG_PARTFILE_SIZE_XFER_UP 0x0305 EC_TAG_PARTFILE_SIZE_DONE 0x0306 EC_TAG_PARTFILE_SPEED 0x0307 EC_TAG_PARTFILE_STATUS 0x0308 EC_TAG_PARTFILE_PRIO 0x0309 EC_TAG_PARTFILE_SOURCE_COUNT 0x030A EC_TAG_PARTFILE_SOURCE_COUNT_A4AF 0x030B EC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT 0x030C EC_TAG_PARTFILE_SOURCE_COUNT_XFER 0x030D EC_TAG_PARTFILE_ED2K_LINK 0x030E EC_TAG_PARTFILE_CAT 0x030F EC_TAG_PARTFILE_LAST_RECV 0x0310 EC_TAG_PARTFILE_LAST_SEEN_COMP 0x0311 EC_TAG_PARTFILE_PART_STATUS 0x0312 EC_TAG_PARTFILE_GAP_STATUS 0x0313 EC_TAG_PARTFILE_REQ_STATUS 0x0314 EC_TAG_PARTFILE_SOURCE_NAMES 0x0315 EC_TAG_PARTFILE_COMMENTS 0x0316 EC_TAG_PARTFILE_STOPPED 0x0317 EC_TAG_PARTFILE_DOWNLOAD_ACTIVE 0x0318 EC_TAG_PARTFILE_LOST_CORRUPTION 0x0319 EC_TAG_PARTFILE_GAINED_COMPRESSION 0x031A EC_TAG_PARTFILE_SAVED_ICH 0x031B EC_TAG_PARTFILE_SOURCE_NAMES_COUNTS 0x031C EC_TAG_PARTFILE_AVAILABLE_PARTS 0x031D EC_TAG_PARTFILE_HASH 0x031E EC_TAG_PARTFILE_SHARED 0x031F EC_TAG_PARTFILE_HASHED_PART_COUNT 0x0320 EC_TAG_PARTFILE_A4AFAUTO 0x0321 EC_TAG_PARTFILE_A4AF_SOURCES 0x0322 # ADUNANZA BEGIN # Per KADU parto da 0x380 (a meta' tra 0x300 e 0x400) EC_TAG_PARTFILE_ADU_SOURCE_COUNT 0x0380 # ADUNANZA END EC_TAG_KNOWNFILE 0x0400 EC_TAG_KNOWNFILE_XFERRED 0x0401 EC_TAG_KNOWNFILE_XFERRED_ALL 0x0402 EC_TAG_KNOWNFILE_REQ_COUNT 0x0403 EC_TAG_KNOWNFILE_REQ_COUNT_ALL 0x0404 EC_TAG_KNOWNFILE_ACCEPT_COUNT 0x0405 EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL 0x0406 EC_TAG_KNOWNFILE_AICH_MASTERHASH 0x0407 EC_TAG_KNOWNFILE_FILENAME 0x0408 EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW 0x0409 EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH 0x040A EC_TAG_KNOWNFILE_PRIO 0x040B EC_TAG_KNOWNFILE_ON_QUEUE 0x040C EC_TAG_KNOWNFILE_COMPLETE_SOURCES 0x040D EC_TAG_KNOWNFILE_COMMENT 0x040E EC_TAG_KNOWNFILE_RATING 0x040F EC_TAG_SERVER 0x0500 EC_TAG_SERVER_NAME 0x0501 EC_TAG_SERVER_DESC 0x0502 EC_TAG_SERVER_ADDRESS 0x0503 EC_TAG_SERVER_PING 0x0504 EC_TAG_SERVER_USERS 0x0505 EC_TAG_SERVER_USERS_MAX 0x0506 EC_TAG_SERVER_FILES 0x0507 EC_TAG_SERVER_PRIO 0x0508 EC_TAG_SERVER_FAILED 0x0509 EC_TAG_SERVER_STATIC 0x050A EC_TAG_SERVER_VERSION 0x050B EC_TAG_SERVER_IP 0x050C EC_TAG_SERVER_PORT 0x050D EC_TAG_CLIENT 0x0600 EC_TAG_CLIENT_SOFTWARE 0x0601 EC_TAG_CLIENT_SCORE 0x0602 EC_TAG_CLIENT_HASH 0x0603 EC_TAG_CLIENT_FRIEND_SLOT 0x0604 EC_TAG_CLIENT_WAIT_TIME 0x0605 EC_TAG_CLIENT_XFER_TIME 0x0606 EC_TAG_CLIENT_QUEUE_TIME 0x0607 EC_TAG_CLIENT_LAST_TIME 0x0608 EC_TAG_CLIENT_UPLOAD_SESSION 0x0609 EC_TAG_CLIENT_UPLOAD_TOTAL 0x060A EC_TAG_CLIENT_DOWNLOAD_TOTAL 0x060B EC_TAG_CLIENT_DOWNLOAD_STATE 0x060C EC_TAG_CLIENT_UP_SPEED 0x060D EC_TAG_CLIENT_DOWN_SPEED 0x060E EC_TAG_CLIENT_FROM 0x060F EC_TAG_CLIENT_USER_IP 0x0610 EC_TAG_CLIENT_USER_PORT 0x0611 EC_TAG_CLIENT_SERVER_IP 0x0612 EC_TAG_CLIENT_SERVER_PORT 0x0613 EC_TAG_CLIENT_SERVER_NAME 0x0614 EC_TAG_CLIENT_SOFT_VER_STR 0x0615 EC_TAG_CLIENT_WAITING_POSITION 0x0616 EC_TAG_CLIENT_IDENT_STATE 0x0617 EC_TAG_CLIENT_OBFUSCATION_STATUS 0x0618 EC_TAG_CLIENT_CURRENTLYUNUSED1 0x0619 EC_TAG_CLIENT_REMOTE_QUEUE_RANK 0x061A EC_TAG_CLIENT_DISABLE_VIEW_SHARED 0x061B EC_TAG_CLIENT_UPLOAD_STATE 0x061C EC_TAG_CLIENT_EXT_PROTOCOL 0x061D EC_TAG_CLIENT_USER_ID 0x061E EC_TAG_CLIENT_UPLOAD_FILE 0x061F EC_TAG_CLIENT_REQUEST_FILE 0x0620 EC_TAG_CLIENT_A4AF_FILES 0x0621 EC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK 0x0622 EC_TAG_CLIENT_KAD_PORT 0x0623 EC_TAG_CLIENT_PART_STATUS 0x0624 EC_TAG_CLIENT_NEXT_REQUESTED_PART 0x0625 EC_TAG_CLIENT_LAST_DOWNLOADING_PART 0x0626 EC_TAG_CLIENT_REMOTE_FILENAME 0x0627 EC_TAG_CLIENT_MOD_VERSION 0x0628 EC_TAG_CLIENT_OS_INFO 0x0629 EC_TAG_CLIENT_AVAILABLE_PARTS 0x062A EC_TAG_CLIENT_UPLOAD_PART_STATUS 0x062B # ADUNANZA BEGIN EC_TAG_CLIENT_RECEIVEDTAGADUNANZA 0x0680 # ADUNANZA END EC_TAG_SEARCHFILE 0x0700 EC_TAG_SEARCH_TYPE 0x0701 EC_TAG_SEARCH_NAME 0x0702 EC_TAG_SEARCH_MIN_SIZE 0x0703 EC_TAG_SEARCH_MAX_SIZE 0x0704 EC_TAG_SEARCH_FILE_TYPE 0x0705 EC_TAG_SEARCH_EXTENSION 0x0706 EC_TAG_SEARCH_AVAILABILITY 0x0707 EC_TAG_SEARCH_STATUS 0x0708 EC_TAG_SEARCH_PARENT 0x0709 EC_TAG_FRIEND 0x0800 EC_TAG_FRIEND_NAME 0x0801 EC_TAG_FRIEND_HASH 0x0802 EC_TAG_FRIEND_IP 0x0803 EC_TAG_FRIEND_PORT 0x0804 EC_TAG_FRIEND_CLIENT 0x0805 EC_TAG_FRIEND_ADD 0x0806 EC_TAG_FRIEND_REMOVE 0x0807 EC_TAG_FRIEND_FRIENDSLOT 0x0808 EC_TAG_FRIEND_SHARED 0x0809 EC_TAG_SELECT_PREFS 0x1000 EC_TAG_PREFS_CATEGORIES 0x1100 EC_TAG_CATEGORY 0x1101 EC_TAG_CATEGORY_TITLE 0x1102 EC_TAG_CATEGORY_PATH 0x1103 EC_TAG_CATEGORY_COMMENT 0x1104 EC_TAG_CATEGORY_COLOR 0x1105 EC_TAG_CATEGORY_PRIO 0x1106 EC_TAG_PREFS_GENERAL 0x1200 EC_TAG_USER_NICK 0x1201 EC_TAG_USER_HASH 0x1202 EC_TAG_USER_HOST 0x1203 EC_TAG_GENERAL_CHECK_NEW_VERSION 0x1204 EC_TAG_PREFS_CONNECTIONS 0x1300 EC_TAG_CONN_DL_CAP 0x1301 EC_TAG_CONN_UL_CAP 0x1302 EC_TAG_CONN_MAX_DL 0x1303 EC_TAG_CONN_MAX_UL 0x1304 EC_TAG_CONN_SLOT_ALLOCATION 0x1305 EC_TAG_CONN_TCP_PORT 0x1306 EC_TAG_CONN_UDP_PORT 0x1307 EC_TAG_CONN_UDP_DISABLE 0x1308 EC_TAG_CONN_MAX_FILE_SOURCES 0x1309 EC_TAG_CONN_MAX_CONN 0x130A EC_TAG_CONN_AUTOCONNECT 0x130B EC_TAG_CONN_RECONNECT 0x130C EC_TAG_NETWORK_ED2K 0x130D EC_TAG_NETWORK_KADEMLIA 0x130E EC_TAG_PREFS_MESSAGEFILTER 0x1400 EC_TAG_MSGFILTER_ENABLED 0x1401 EC_TAG_MSGFILTER_ALL 0x1402 EC_TAG_MSGFILTER_FRIENDS 0x1403 EC_TAG_MSGFILTER_SECURE 0x1404 EC_TAG_MSGFILTER_BY_KEYWORD 0x1405 EC_TAG_MSGFILTER_KEYWORDS 0x1406 EC_TAG_PREFS_REMOTECTRL 0x1500 EC_TAG_WEBSERVER_AUTORUN 0x1501 EC_TAG_WEBSERVER_PORT 0x1502 EC_TAG_WEBSERVER_GUEST 0x1503 EC_TAG_WEBSERVER_USEGZIP 0x1504 EC_TAG_WEBSERVER_REFRESH 0x1505 EC_TAG_WEBSERVER_TEMPLATE 0x1506 EC_TAG_PREFS_ONLINESIG 0x1600 EC_TAG_ONLINESIG_ENABLED 0x1601 EC_TAG_PREFS_SERVERS 0x1700 EC_TAG_SERVERS_REMOVE_DEAD 0x1701 EC_TAG_SERVERS_DEAD_SERVER_RETRIES 0x1702 EC_TAG_SERVERS_AUTO_UPDATE 0x1703 EC_TAG_SERVERS_URL_LIST 0x1704 EC_TAG_SERVERS_ADD_FROM_SERVER 0x1705 EC_TAG_SERVERS_ADD_FROM_CLIENT 0x1706 EC_TAG_SERVERS_USE_SCORE_SYSTEM 0x1707 EC_TAG_SERVERS_SMART_ID_CHECK 0x1708 EC_TAG_SERVERS_SAFE_SERVER_CONNECT 0x1709 EC_TAG_SERVERS_AUTOCONN_STATIC_ONLY 0x170A EC_TAG_SERVERS_MANUAL_HIGH_PRIO 0x170B EC_TAG_SERVERS_UPDATE_URL 0x170C EC_TAG_PREFS_FILES 0x1800 EC_TAG_FILES_ICH_ENABLED 0x1801 EC_TAG_FILES_AICH_TRUST 0x1802 EC_TAG_FILES_NEW_PAUSED 0x1803 EC_TAG_FILES_NEW_AUTO_DL_PRIO 0x1804 EC_TAG_FILES_PREVIEW_PRIO 0x1805 EC_TAG_FILES_NEW_AUTO_UL_PRIO 0x1806 EC_TAG_FILES_UL_FULL_CHUNKS 0x1807 EC_TAG_FILES_START_NEXT_PAUSED 0x1808 EC_TAG_FILES_RESUME_SAME_CAT 0x1809 EC_TAG_FILES_SAVE_SOURCES 0x180A EC_TAG_FILES_EXTRACT_METADATA 0x180B EC_TAG_FILES_ALLOC_FULL_SIZE 0x180C EC_TAG_FILES_CHECK_FREE_SPACE 0x180D EC_TAG_FILES_MIN_FREE_SPACE 0x180E EC_TAG_PREFS_SRCDROP 0x1900 EC_TAG_SRCDROP_NONEEDED 0x1901 EC_TAG_SRCDROP_DROP_FQS 0x1902 EC_TAG_SRCDROP_DROP_HQRS 0x1903 EC_TAG_SRCDROP_HQRS_VALUE 0x1904 EC_TAG_SRCDROP_AUTODROP_TIMER 0x1905 EC_TAG_PREFS_DIRECTORIES 0x1A00 EC_TAG_DIRECTORIES_INCOMING 0x1A01 EC_TAG_DIRECTORIES_TEMP 0x1A02 EC_TAG_DIRECTORIES_SHARED 0x1A03 EC_TAG_DIRECTORIES_SHARE_HIDDEN 0x1A04 EC_TAG_PREFS_STATISTICS 0x1B00 EC_TAG_STATSGRAPH_WIDTH 0x1B01 EC_TAG_STATSGRAPH_SCALE 0x1B02 EC_TAG_STATSGRAPH_LAST 0x1B03 EC_TAG_STATSGRAPH_DATA 0x1B04 EC_TAG_STATTREE_CAPPING 0x1B05 EC_TAG_STATTREE_NODE 0x1B06 EC_TAG_STAT_NODE_VALUE 0x1B07 EC_TAG_STAT_VALUE_TYPE 0x1B08 EC_TAG_STATTREE_NODEID 0x1B09 EC_TAG_PREFS_SECURITY 0x1C00 EC_TAG_SECURITY_CAN_SEE_SHARES 0x1C01 EC_TAG_IPFILTER_CLIENTS 0x1C02 EC_TAG_IPFILTER_SERVERS 0x1C03 EC_TAG_IPFILTER_AUTO_UPDATE 0x1C04 EC_TAG_IPFILTER_UPDATE_URL 0x1C05 EC_TAG_IPFILTER_LEVEL 0x1C06 EC_TAG_IPFILTER_FILTER_LAN 0x1C07 EC_TAG_SECURITY_USE_SECIDENT 0x1C08 EC_TAG_SECURITY_OBFUSCATION_SUPPORTED 0x1C09 EC_TAG_SECURITY_OBFUSCATION_REQUESTED 0x1C0A EC_TAG_SECURITY_OBFUSCATION_REQUIRED 0x1C0B EC_TAG_PREFS_CORETWEAKS 0x1D00 EC_TAG_CORETW_MAX_CONN_PER_FIVE 0x1D01 EC_TAG_CORETW_VERBOSE 0x1D02 EC_TAG_CORETW_FILEBUFFER 0x1D03 EC_TAG_CORETW_UL_QUEUE 0x1D04 EC_TAG_CORETW_SRV_KEEPALIVE_TIMEOUT 0x1D05 EC_TAG_PREFS_KADEMLIA 0x1E00 EC_TAG_KADEMLIA_UPDATE_URL 0x1E01 [/Section] [Section Content] Type Enum Name EC_DETAIL_LEVEL DataType uint8 EC_DETAIL_CMD 0x00 EC_DETAIL_WEB 0x01 EC_DETAIL_FULL 0x02 EC_DETAIL_UPDATE 0x03 EC_DETAIL_INC_UPDATE 0x04 [/Section] [Section Content] Type Enum Name EC_SEARCH_TYPE DataType uint8 EC_SEARCH_LOCAL 0x00 EC_SEARCH_GLOBAL 0x01 EC_SEARCH_KAD 0x02 EC_SEARCH_WEB 0x03 [/Section] [Section Content] Type Enum Name EC_STATTREE_NODE_VALUE_TYPE DataType uint8 EC_VALUE_INTEGER 0x00 EC_VALUE_ISTRING 0x01 EC_VALUE_BYTES 0x02 EC_VALUE_ISHORT 0x03 EC_VALUE_TIME 0x04 EC_VALUE_SPEED 0x05 EC_VALUE_STRING 0x06 EC_VALUE_DOUBLE 0x07 [/Section] [Section Content] Type Enum Name EcPrefs DataType uint32 EC_PREFS_CATEGORIES 0x00000001 EC_PREFS_GENERAL 0x00000002 EC_PREFS_CONNECTIONS 0x00000004 EC_PREFS_MESSAGEFILTER 0x00000008 EC_PREFS_REMOTECONTROLS 0x00000010 EC_PREFS_ONLINESIG 0x00000020 EC_PREFS_SERVERS 0x00000040 EC_PREFS_FILES 0x00000080 EC_PREFS_SRCDROP 0x00000100 EC_PREFS_DIRECTORIES 0x00000200 EC_PREFS_STATISTICS 0x00000400 EC_PREFS_SECURITY 0x00000800 EC_PREFS_CORETWEAKS 0x00001000 EC_PREFS_KADEMLIA 0x00002000 [/Section] amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/ec/Makefile.am0000644000175000017500000000102512050266603021671 0ustar l3onl3onSUBDIRS = cpp # Sources MAINTAINERCLEANFILES = Makefile.in BUILT_SOURCES = ECGeneratedFiles ECGeneratedFilesSources = \ abstracts/ECTagTypes.abstract \ abstracts/ECCodes.abstract ECGeneratedFiles: $(ECGeneratedFilesSources) $(srcdir)/file_generator.pl $(srcdir) $(ECGeneratedFilesSources); echo $(ECGeneratedFilesSources) > ECGeneratedFiles EXTRA_DIST = file_generator.pl EXTRA__DIST__SUBDIRS = abstracts java include $(top_srcdir)/automake/dist-hook.am DISTCLEANFILES = $(BUILT_SOURCES) clean: rm -f ECGeneratedFiles amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/Makefile.in0000644000175000017500000005241412053222402021313 0ustar l3onl3on# Makefile.in generated by automake 1.11.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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@ @COMPILE_LIB_COMMON_TRUE@am__append_1 = common @COMPILE_LIB_EC_TRUE@am__append_2 = ec subdir = src/libs DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/GeoIP.m4 \ $(top_srcdir)/m4/build-tools.m4 $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/cryptopp.m4 $(top_srcdir)/m4/fallocate.m4 \ $(top_srcdir)/m4/gdlib.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/kde.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libpng.m4 $(top_srcdir)/m4/libupnp.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/plasmamule.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/qt.m4 $(top_srcdir)/m4/readline.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/wxwin.m4 \ $(top_srcdir)/m4/zlib.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = 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_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-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 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=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = common ec 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@ ALCC_MANPAGES = @ALCC_MANPAGES@ ALC_MANPAGES = @ALC_MANPAGES@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AMULECMD_MANPAGES = @AMULECMD_MANPAGES@ AMULEWEB_DEFS = @AMULEWEB_DEFS@ AMULE_DAEMON_MANPAGES = @AMULE_DAEMON_MANPAGES@ AMULE_GUI_MANPAGES = @AMULE_GUI_MANPAGES@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_CPPFLAGS = @BFD_CPPFLAGS@ BFD_LIBS = @BFD_LIBS@ BUILD_CC = @BUILD_CC@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CAS_DEFS = @CAS_DEFS@ CAS_MANPAGES = @CAS_MANPAGES@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CRYPTOPP_CPPFLAGS = @CRYPTOPP_CPPFLAGS@ CRYPTOPP_LDFLAGS = @CRYPTOPP_LDFLAGS@ CRYPTOPP_LIBS = @CRYPTOPP_LIBS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEBUGFLAG = @DEBUGFLAG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ED2K_MANPAGES = @ED2K_MANPAGES@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDLIB_CFLAGS = @GDLIB_CFLAGS@ GDLIB_CONFIG_PATH = @GDLIB_CONFIG_PATH@ GDLIB_LDFLAGS = @GDLIB_LDFLAGS@ GDLIB_LIBS = @GDLIB_LIBS@ GENCAT = @GENCAT@ GEOIP_CPPFLAGS = @GEOIP_CPPFLAGS@ GEOIP_LDFLAGS = @GEOIP_LDFLAGS@ GEOIP_LIBS = @GEOIP_LIBS@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INCINTL = @INCINTL@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ KDE4_CONFIG = @KDE4_CONFIG@ KDE_APPLNK_PATH = @KDE_APPLNK_PATH@ KDE_HEADER_DIR = @KDE_HEADER_DIR@ KDE_ICON_PATH = @KDE_ICON_PATH@ KDE_MIME_PATH = @KDE_MIME_PATH@ KDE_MODULE_PATH = @KDE_MODULE_PATH@ KDE_SERVICE_PATH = @KDE_SERVICE_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ LIBPNG_CONFIG_PATH = @LIBPNG_CONFIG_PATH@ LIBPNG_LDFLAGS = @LIBPNG_LDFLAGS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBUPNP_CFLAGS = @LIBUPNP_CFLAGS@ LIBUPNP_CPPFLAGS = @LIBUPNP_CPPFLAGS@ LIBUPNP_LDFLAGS = @LIBUPNP_LDFLAGS@ LIBUPNP_LIBS = @LIBUPNP_LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONOLITHIC_MANPAGES = @MONOLITHIC_MANPAGES@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MULECFLAGS = @MULECFLAGS@ MULECPPFLAGS = @MULECPPFLAGS@ MULECXXFLAGS = @MULECXXFLAGS@ MULELDFLAGS = @MULELDFLAGS@ MULERCFLAGS = @MULERCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ QT_CORE_CXXFLAGS = @QT_CORE_CXXFLAGS@ QT_CORE_LIBS = @QT_CORE_LIBS@ QT_DBUS_LDFLAGS = @QT_DBUS_LDFLAGS@ QT_GUI_CXXFLAGS = @QT_GUI_CXXFLAGS@ QT_GUI_LIBS = @QT_GUI_LIBS@ QT_MOC = @QT_MOC@ RANLIB = @RANLIB@ RC = @RC@ RCFLAGS = @RCFLAGS@ READLINE_LIBS = @READLINE_LIBS@ RESOLV_LIB = @RESOLV_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SVNDATE = @SVNDATE@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBSERVER_MANPAGES = @WEBSERVER_MANPAGES@ WXBASE_CPPFLAGS = @WXBASE_CPPFLAGS@ WXBASE_LIBS = @WXBASE_LIBS@ WXCAS_MANPAGES = @WXCAS_MANPAGES@ WX_CFLAGS = @WX_CFLAGS@ WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ WX_CONFIG_PATH = @WX_CONFIG_PATH@ WX_CPPFLAGS = @WX_CPPFLAGS@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ WX_DEBUG = @WX_DEBUG@ WX_LIBS = @WX_LIBS@ WX_PORT = @WX_PORT@ WX_RESCOMP = @WX_RESCOMP@ WX_SHARED = @WX_SHARED@ WX_UNICODE = @WX_UNICODE@ WX_VERSION_FULL = @WX_VERSION_FULL@ WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ WX_VERSION_MINOR = @WX_VERSION_MINOR@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@ ZLIB_LDFLAGS = @ZLIB_LDFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_BUILD_CC = @ac_ct_BUILD_CC@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ 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@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = $(am__append_1) $(am__append_2) MAINTAINERCLEANFILES = Makefile.in all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/libs/Makefile .PRECIOUS: 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; 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" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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 CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # 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: amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/0000755000175000017500000000000012053222402020530 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/FileFunctions.cpp0000644000175000017500000001643112050266603024021 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // // ADUNANZA BEGIN #include // (ADUNANZA Mr Hyde 20080202 - in C++ l'include corretto e' ) // ADUNANZA END #include // Needed for wxDir #include // Needed for wxZipFSHandler #include // wxFileInputStream #include // Needed for wxZipInputStream #include // Needed for wxZlibInputStream #include // Needed for wxSysErrorMsg #ifdef __WXMAC__ #include // Do_not_auto_remove #endif #include // Needed for std::auto_ptr #include "FileFunctions.h" #include "StringFunctions.h" // // This class assumes that the following line has been executed: // // wxConvFileName = &aMuleConvBrokenFileNames; // // This line is necessary so that wxWidgets handles unix file names correctly. // CDirIterator::CDirIterator(const CPath& dir) : wxDir(dir.GetRaw()) { } CDirIterator::~CDirIterator() { } CPath CDirIterator::GetFirstFile(FileType type, const wxString& mask) { if (!IsOpened()) { return CPath(); } wxString fileName; if (!GetFirst(&fileName, mask, type)) { return CPath(); } return CPath(fileName); } CPath CDirIterator::GetNextFile() { wxString fileName; if (!GetNext(&fileName)) { return CPath(); } return CPath(fileName); } bool CDirIterator::HasSubDirs(const wxString& spec) { // Checking IsOpened() in case we don't have permissions to read that dir. return IsOpened() && wxDir::HasSubDirs(spec); } EFileType GuessFiletype(const wxString& file) { wxFile archive(file, wxFile::read); if (!archive.IsOpened()) { return EFT_Error; } static const uint8 UTF8bom[3] = {0xEF, 0xBB, 0xBF}; uint8 head[10] = {0, 0}; int read = archive.Read(head, std::min(10, archive.Length())); if (read == wxInvalidOffset || read == 0) { return EFT_Unknown; } else if ((head[0] == 'P') && (head[1] == 'K')) { // Zip-archives have a header of "PK". return EFT_Zip; } else if (head[0] == 0x1F && head[1] == 0x8B) { // Gzip-archives have a header of 0x1F8B return EFT_GZip; } else if (head[0] == 0xE0 || head[0] == 0x0E) { // MET files have either of these headers return EFT_Met; } // Check at most the first ten chars, if all are printable, // then we can probably assume it is ascii text-file. for (int i = 0; i < read; ++i) { if (!( isprint(head[i]) || isspace(head[i]) || (i < 3 && head[i] == UTF8bom[i]))) { return EFT_Unknown; } } return EFT_Text; } /** * Replaces the zip-archive with "guarding.p2p" or "ipfilter.dat", * if either of those files are found in the archive. */ bool UnpackZipFile(const wxString& file, const wxChar* files[]) { wxZipFSHandler archive; wxString filename = archive.FindFirst( wxT("file:") + file + wxT("#zip:/*"), wxFILE); wxTempFile target(file); while (!filename.IsEmpty() && !target.Length()) { // Extract the filename part of the URI filename = filename.AfterLast(wxT(':')).Lower(); // We only care about the files specified in the array for (size_t i = 0; files[i] && !target.Length(); ++i) { if (files[i] == filename) { std::auto_ptr entry; wxFFileInputStream fileInputStream(file); wxZipInputStream zip(fileInputStream); while (entry.reset(zip.GetNextEntry()), entry.get() != NULL) { // access meta-data wxString name = entry->GetName(); // read 'zip' to access the entry's data if (name == filename) { char buffer[10240]; while (!zip.Eof()) { zip.Read(buffer, sizeof(buffer)); target.Write(buffer, zip.LastRead()); } break; } } } } filename = archive.FindNext(); } if (target.Length()) { target.Commit(); return true; } return false; } /** * Unpacks a GZip file and replaces the archive. */ bool UnpackGZipFile(const wxString& file) { char buffer[10240]; wxTempFile target(file); bool write = false; #ifdef __WXMAC__ // AddDebugLogLineN( logFileIO, wxT("Reading gzip stream") ); gzFile inputFile = gzopen(filename2char(file), "rb"); if (inputFile != NULL) { write = true; while (int bytesRead = gzread(inputFile, buffer, sizeof(buffer))) { if (bytesRead > 0) { // AddDebugLogLineN(logFileIO, CFormat(wxT("Read %u bytes")) % bytesRead); target.Write(buffer, bytesRead); } else if (bytesRead < 0) { wxString errString; int gzerrnum; const char* gzerrstr = gzerror(inputFile, &gzerrnum); if (gzerrnum == Z_ERRNO) { errString = wxSysErrorMsg(); } else { errString = wxString::FromAscii(gzerrstr); } // AddDebugLogLineN( logFileIO, wxT("Error reading gzip stream (") + errString + wxT(")") ); write = false; break; } } // AddDebugLogLineN( logFileIO, wxT("End reading gzip stream") ); gzclose(inputFile); } else { // AddDebugLogLineN( logFileIO, wxT("Error opening gzip file (") + wxString(wxSysErrorMsg()) + wxT(")") ); } #else { // AddDebugLogLineN( logFileIO, wxT("Reading gzip stream") ); wxFileInputStream source(file); wxZlibInputStream inputStream(source); while (!inputStream.Eof()) { inputStream.Read(buffer, sizeof(buffer)); // AddDebugLogLineN(logFileIO, CFormat(wxT("Read %u bytes")) % inputStream.LastRead()); if (inputStream.LastRead()) { target.Write(buffer, inputStream.LastRead()); } else { break; } }; // AddDebugLogLineN( logFileIO, wxT("End reading gzip stream") ); write = inputStream.IsOk() || inputStream.Eof(); } #endif if (write) { target.Commit(); // AddDebugLogLineN( logFileIO, wxT("Commited gzip stream") ); } return write; } UnpackResult UnpackArchive(const CPath& path, const wxChar* files[]) { const wxString file = path.GetRaw(); // Attempt to discover the filetype and uncompress EFileType type = GuessFiletype(file); switch (type) { case EFT_Zip: if (UnpackZipFile(file, files)) { // Unpack nested archives if needed. return UnpackResult(true, UnpackArchive(path, files).second); } else { return UnpackResult(false, EFT_Error); } case EFT_GZip: if (UnpackGZipFile(file)) { // Unpack nested archives if needed. return UnpackResult(true, UnpackArchive(path, files).second); } else { return UnpackResult(false, EFT_Error); } default: return UnpackResult(false, type); } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/Format.h0000644000175000017500000001750212050266603022146 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2005-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef FORMAT_H #define FORMAT_H #include #include "MuleDebug.h" /** * This class offers a typesafe alternative to wxString::Format. * * %CFormat has been implemented against the description of printf found * in the "man 3 printf" manual page. * * %CFormat lacks the following capabilities: * - The @c "*" width-modifier, because only one argument is fed at a time. * - The @c "n" type, just unsafe and won't be implemented. * - The @c "C" and @c "S" types, which are considered obsolete. * - The Long Double type, which is extremly slow and shouldn't be used. * * Support for the C99 @c a, @c A conversions and the non-standard @c ', @c I * flags depend on the underlying C library. Do not use them. * * Supports the glibc-specific @c m conversion on all platforms, where there's * a way to get the error description. If the underlying C library has a * thread-safe way to get the error description, then this conversion is * thread-safe, too. * * Deviations from printf(3): * * %CFormat tries hard to format the passed POD-type according to the * conversion type. Basic type conversions may take place to accomplish this * goal. This results in formats accepting a variety of types, namely: * - @c c, @c i, @c d, @c u, @c o, @c x, @c X accept @c wxChar and all integer * types, * - @c a, @c A, @c e, @c E, @c f, @c F, @c g, @c G accept @c wxChar, integer * and floating-point types, * - @c p accepts only pointers, * - @c s accepts all the above mentioned types in addition to @c wxString and * @c wxChar* types. * * The only exception from this rule is integer (@c d, @c i, @c u) conversion. * It will always use the correct conversion (@c i or @c u) depending on the * signedness of the passed argument. * * @c 's' conversions are inspired by the "we're converting to string, * anyway" mood. Thus they use a 'default' conversion for each accepted * type: @c 'c' for @c wxChar, @c 'i' and @c 'u' for signed and unsigned * integers, respectively, @c 'g' for floating-point numbers and @c 'p' for * pointers. * * Other relaxations / differences from printf(3): * - Length modifiers are read and validated, but always ignored. * - As a consequence, invalid combinations of length modifiers and conversion * types are silently ignored (i.e. for example the invalid @c '%%qs' * format-specifier is silently treated as @c '%%s'). * - @c 'p' conversion ignores all modifiers except the argument index reference. * - You can mix positional and indexed argument references. (You actually can't, * because msgfmt will treat this as an error.) * - With indexed argument references we allow to leave gaps in the indices. */ class CFormat { private: /** * Structure to hold a format specifier. */ struct FormatSpecifier { unsigned argIndex; //!< Argument index. (Position, unless specified otherwise.) wxChar flag; //!< The optional flag character. unsigned width; //!< The optional field width. signed precision; //!< The optional precision value. // length is not stored wxChar type; //!< The conversion type. size_t startPos; //!< Position of the first character of the format-specifier in the format-string. size_t endPos; //!< Position of the last character of the format-specifier in the format-string. wxString result; //!< Result of the conversion. Initialized to the format-specifier. }; public: /** * Constructor. * * @param str The format-string to be used. */ CFormat(const wxChar* str) { Init(str); } /** * Constructor. * * This form is required to construct from a plain char * * with wx 2.9 * * @param str The format-string to be used. */ CFormat(const wxString& str) { Init(str); } /** * Feeds a value into the format-string. * * Passing a type that isn't compatible with the current format * field results in the field being skipped, and an exception raised. * * Passing any type to a CFormat with no free fields results in the * argument being ignored. * * Specialize this member template to teach CFormat how to handle * other types. */ template CFormat& operator%(_Tp value); // Overload hack to map all pointer types to void* template CFormat& operator%(_Tp* value) { return this->operator%(value); } // explicit overloads to avoid pass-by-value even in debug builds. CFormat& operator%(const wxString& value) { return this->operator%(value); } CFormat& operator%(const CFormat& value) { return this->operator%(value); } /** * Returns the resulting string. */ wxString GetString() const; /** * Implicit conversion to wxString. */ operator wxString() const { return GetString(); }; private: /** * Initialize internal structures. * * Initializes member variables and parses the given format string. */ void Init(const wxString& str); //! Type holding format specifiers. typedef std::list FormatList; //! Retrieve the modifiers for the given format specifier. wxString GetModifiers(FormatList::const_iterator it) const; //! Do one argument conversion. template void ProcessArgument(FormatList::iterator it, _Tp value); //! List of the valid format-specifiers found in the format string. FormatList m_formats; //! Number of the previous argument. unsigned m_argIndex; //! The format-string fed to the parser. wxString m_formatString; }; // type mappings template<> inline CFormat& CFormat::operator%(char value) { return *this % (wxChar)value; } template<> inline CFormat& CFormat::operator%(signed char value) { return *this % (wxChar)value; } template<> inline CFormat& CFormat::operator%(unsigned char value) { return *this % (wxChar)value; } template<> inline CFormat& CFormat::operator%(bool value) { return *this % (signed long long)value; } template<> inline CFormat& CFormat::operator%(signed short value) { return *this % (signed long long)value; } template<> inline CFormat& CFormat::operator%(unsigned short value) { return *this % (unsigned long long)value; } template<> inline CFormat& CFormat::operator%(signed int value) { return *this % (signed long long)value; } template<> inline CFormat& CFormat::operator%(unsigned int value) { return *this % (unsigned long long)value; } template<> inline CFormat& CFormat::operator%(signed long value) { return *this % (signed long long)value; } template<> inline CFormat& CFormat::operator%(unsigned long value) { return *this % (unsigned long long)value; } template<> inline CFormat& CFormat::operator%(float value) { return *this % (double)value; } template<> inline CFormat& CFormat::operator%(const wxChar* value) { return this->operator%(wxString(value)); } #if wxCHECK_VERSION(2, 9, 0) #define WXLONGLONGFMTSPEC wxT(wxLongLongFmtSpec) #else #define WXLONGLONGFMTSPEC wxLongLongFmtSpec #endif #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/strerror_r.h0000644000175000017500000000321512050266603023115 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef MULE_STRERROR_R_H #define MULE_STRERROR_R_H /** * Return string describing error number. * * This function implements the XSI-compliant strerror_r() function whenever * it's possible. Also it is thread safe if there is a thread-safe function * to get the error description. * * @param errnum Error number for which the description is needed. * @param buf Buffer to store the error description. * @param buflen Length of the buffer. * * @return 0 on success; on error, -1 is returned and errno is set to indicate * the error. */ extern "C" int mule_strerror_r(int errnum, char *buf, size_t buflen); #endif /* MULE_STRERROR_R_H */ amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/Makefile.in0000644000175000017500000005164012053222402022603 0ustar l3onl3on# Makefile.in generated by automake 1.11.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = src/libs/common DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/GeoIP.m4 \ $(top_srcdir)/m4/build-tools.m4 $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/cryptopp.m4 $(top_srcdir)/m4/fallocate.m4 \ $(top_srcdir)/m4/gdlib.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/kde.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libpng.m4 $(top_srcdir)/m4/libupnp.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/plasmamule.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/qt.m4 $(top_srcdir)/m4/readline.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/wxwin.m4 \ $(top_srcdir)/m4/zlib.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libmulecommon_a_AR = $(AR) $(ARFLAGS) libmulecommon_a_LIBADD = am_libmulecommon_a_OBJECTS = FileFunctions.$(OBJEXT) Format.$(OBJEXT) \ MD5Sum.$(OBJEXT) MuleDebug.$(OBJEXT) Path.$(OBJEXT) \ strerror_r.$(OBJEXT) StringFunctions.$(OBJEXT) \ TextFile.$(OBJEXT) libmulecommon_a_OBJECTS = $(am_libmulecommon_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libmulecommon_a_SOURCES) DIST_SOURCES = $(libmulecommon_a_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) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALCC_MANPAGES = @ALCC_MANPAGES@ ALC_MANPAGES = @ALC_MANPAGES@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AMULECMD_MANPAGES = @AMULECMD_MANPAGES@ AMULEWEB_DEFS = @AMULEWEB_DEFS@ AMULE_DAEMON_MANPAGES = @AMULE_DAEMON_MANPAGES@ AMULE_GUI_MANPAGES = @AMULE_GUI_MANPAGES@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_CPPFLAGS = @BFD_CPPFLAGS@ BFD_LIBS = @BFD_LIBS@ BUILD_CC = @BUILD_CC@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CAS_DEFS = @CAS_DEFS@ CAS_MANPAGES = @CAS_MANPAGES@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CRYPTOPP_CPPFLAGS = @CRYPTOPP_CPPFLAGS@ CRYPTOPP_LDFLAGS = @CRYPTOPP_LDFLAGS@ CRYPTOPP_LIBS = @CRYPTOPP_LIBS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEBUGFLAG = @DEBUGFLAG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ED2K_MANPAGES = @ED2K_MANPAGES@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDLIB_CFLAGS = @GDLIB_CFLAGS@ GDLIB_CONFIG_PATH = @GDLIB_CONFIG_PATH@ GDLIB_LDFLAGS = @GDLIB_LDFLAGS@ GDLIB_LIBS = @GDLIB_LIBS@ GENCAT = @GENCAT@ GEOIP_CPPFLAGS = @GEOIP_CPPFLAGS@ GEOIP_LDFLAGS = @GEOIP_LDFLAGS@ GEOIP_LIBS = @GEOIP_LIBS@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INCINTL = @INCINTL@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ KDE4_CONFIG = @KDE4_CONFIG@ KDE_APPLNK_PATH = @KDE_APPLNK_PATH@ KDE_HEADER_DIR = @KDE_HEADER_DIR@ KDE_ICON_PATH = @KDE_ICON_PATH@ KDE_MIME_PATH = @KDE_MIME_PATH@ KDE_MODULE_PATH = @KDE_MODULE_PATH@ KDE_SERVICE_PATH = @KDE_SERVICE_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ LIBPNG_CONFIG_PATH = @LIBPNG_CONFIG_PATH@ LIBPNG_LDFLAGS = @LIBPNG_LDFLAGS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBUPNP_CFLAGS = @LIBUPNP_CFLAGS@ LIBUPNP_CPPFLAGS = @LIBUPNP_CPPFLAGS@ LIBUPNP_LDFLAGS = @LIBUPNP_LDFLAGS@ LIBUPNP_LIBS = @LIBUPNP_LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONOLITHIC_MANPAGES = @MONOLITHIC_MANPAGES@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MULECFLAGS = @MULECFLAGS@ MULECPPFLAGS = @MULECPPFLAGS@ MULECXXFLAGS = @MULECXXFLAGS@ MULELDFLAGS = @MULELDFLAGS@ MULERCFLAGS = @MULERCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ QT_CORE_CXXFLAGS = @QT_CORE_CXXFLAGS@ QT_CORE_LIBS = @QT_CORE_LIBS@ QT_DBUS_LDFLAGS = @QT_DBUS_LDFLAGS@ QT_GUI_CXXFLAGS = @QT_GUI_CXXFLAGS@ QT_GUI_LIBS = @QT_GUI_LIBS@ QT_MOC = @QT_MOC@ RANLIB = @RANLIB@ RC = @RC@ RCFLAGS = @RCFLAGS@ READLINE_LIBS = @READLINE_LIBS@ RESOLV_LIB = @RESOLV_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SVNDATE = @SVNDATE@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBSERVER_MANPAGES = @WEBSERVER_MANPAGES@ WXBASE_CPPFLAGS = @WXBASE_CPPFLAGS@ WXBASE_LIBS = @WXBASE_LIBS@ WXCAS_MANPAGES = @WXCAS_MANPAGES@ WX_CFLAGS = @WX_CFLAGS@ WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ WX_CONFIG_PATH = @WX_CONFIG_PATH@ WX_CPPFLAGS = @WX_CPPFLAGS@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ WX_DEBUG = @WX_DEBUG@ WX_LIBS = @WX_LIBS@ WX_PORT = @WX_PORT@ WX_RESCOMP = @WX_RESCOMP@ WX_SHARED = @WX_SHARED@ WX_UNICODE = @WX_UNICODE@ WX_VERSION_FULL = @WX_VERSION_FULL@ WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ WX_VERSION_MINOR = @WX_VERSION_MINOR@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@ ZLIB_LDFLAGS = @ZLIB_LDFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_BUILD_CC = @ac_ct_BUILD_CC@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ 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@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = $(MULECPPFLAGS) $(BFD_CPPFLAGS) $(WXBASE_CPPFLAGS) AM_CXXFLAGS = $(MULECXXFLAGS) $(WX_CFLAGS_ONLY) $(WX_CXXFLAGS_ONLY) # Sources noinst_LIBRARIES = \ libmulecommon.a # Common to external apps and core/gui/monolithic libmulecommon_a_SOURCES = \ FileFunctions.cpp \ Format.cpp \ MD5Sum.cpp \ MuleDebug.cpp \ Path.cpp \ strerror_r.c \ StringFunctions.cpp \ TextFile.cpp noinst_HEADERS = \ FileFunctions.h \ Format.h \ MD5Sum.h \ MuleDebug.h \ Path.h \ strerror_r.h \ StringFunctions.h \ TextFile.h MAINTAINERCLEANFILES = Makefile.in all: all-am .SUFFIXES: .SUFFIXES: .c .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libs/common/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/libs/common/Makefile .PRECIOUS: 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libmulecommon.a: $(libmulecommon_a_OBJECTS) $(libmulecommon_a_DEPENDENCIES) $(EXTRA_libmulecommon_a_DEPENDENCIES) $(AM_V_at)-rm -f libmulecommon.a $(AM_V_AR)$(libmulecommon_a_AR) libmulecommon.a $(libmulecommon_a_OBJECTS) $(libmulecommon_a_LIBADD) $(AM_V_at)$(RANLIB) libmulecommon.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileFunctions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Format.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MD5Sum.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MuleDebug.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Path.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StringFunctions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TextFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror_r.Po@am__quote@ .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 $< .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 `$(CYGPATH_W) '$<'` .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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 CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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 $(LIBRARIES) $(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." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # 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: amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/FileFunctions.h0000644000175000017500000000567512050266603023476 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef FILEFUNCTIONS_H #define FILEFUNCTIONS_H #include "../../Types.h" #include "Path.h" #include // Dir iterator: needed because wxWidget's wxFindNextFile and // wxFindFirstFile are bugged like hell. class CDirIterator : private wxDir { public: enum FileType { FileNoHidden = wxDIR_FILES, DirNoHidden = wxDIR_DIRS, File = wxDIR_FILES | wxDIR_HIDDEN, Dir = wxDIR_DIRS | wxDIR_HIDDEN, Any = wxDIR_FILES | wxDIR_DIRS | wxDIR_HIDDEN }; CDirIterator(const CPath& dir); ~CDirIterator(); CPath GetFirstFile(FileType type, const wxString& mask = wxEmptyString); CPath GetNextFile(); bool HasSubDirs(const wxString& spec = wxEmptyString); }; //! Filetypes understood by UnpackArchive enum EFileType { //! Text files, will be left unchanged. EFT_Text, //! Zip archive, will be unpacked EFT_Zip, //! GZip archives, will be unpacked EFT_GZip, //! Met file, will be left unchanged. EFT_Met, //! Unknown filetype, will be left unchanged. EFT_Unknown, //! This is returned when trying to unpack a broken archive. EFT_Error }; typedef std::pair UnpackResult; /** * Unpacks a single file from an archive, replacing the archive. * * @param file The archive. * @param files An array of filenames (terminated by a NULL entry) which should be unpacked. * @return The first value is true if the archive was unpacked, the second is the resulting filetype. * * If the file specified is not an archive, it will be left unchanged and * the file-type returned. If it is a GZip archive, the archive will be * unpacked and the new file will replace the archive. If the archive is a * Zip archive, the first file found matching any in the files array (case- * insensitive) will be unpacked and overwrite the archive. */ UnpackResult UnpackArchive(const CPath& file, const wxChar* files[]); #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/TextFile.cpp0000644000175000017500000001205412050266603022772 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2006-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "TextFile.h" #include "Path.h" #include //! The maximum number of chars read at once in GetNextLine const size_t TXTBUF_SIZE = 1024; CTextFile::CTextFile() { } bool CTextFile::Open(const wxString& path, EOpenMode mode) { return Open(CPath(path), mode); } bool CTextFile::Open(const CPath& path, EOpenMode mode) { // wxFFile doesn't call close itself, but asserts instead. Close(); m_mode = mode; if (mode == read) { if (path.FileExists()) { m_file.Open(path.GetRaw(), wxT("r")); } } else if (mode == write) { m_file.Open(path.GetRaw(), wxT("w")); } else { wxFAIL; } return IsOpened(); } CTextFile::~CTextFile() { } bool CTextFile::IsOpened() const { return m_file.IsOpened(); } bool CTextFile::Eof() const { // This is needed because feof will crash if the // underlying FILE pointer is NULL, as is the // case when the file is closed. return m_file.IsOpened() ? m_file.Eof() : true; } bool CTextFile::Close() { return m_file.Close(); } wxString CTextFile::GetNextLine(EReadTextFile flags, const wxMBConv& conv, bool* result) { wxCHECK_MSG(m_file.IsOpened(), wxEmptyString, wxT("Trying to read from closed file.")); wxCHECK_MSG(!m_file.Eof(), wxEmptyString, wxT("Trying to read past EOF")); wxCHECK_MSG((m_mode == read), wxEmptyString, wxT("Trying to read from non-readable file.")); bool is_filtered = false; wxString line; char buffer[TXTBUF_SIZE]; // Loop until EOF (fgets will then return NULL) or a newline is read. while (fgets(buffer, TXTBUF_SIZE, m_file.fp())) { // Filters must be first applied here to avoid unnecessary CPU usage. if (line.IsEmpty()) { if (buffer[0] == '\0') { // Empty line. break; } else if (flags & txtIgnoreComments) { int i = 0; char t = buffer[i]; while (t) { if ((t == ' ') || (t == '\t')) { ++i; t = buffer[i]; } else { is_filtered = (buffer[i] == '#'); break; } } } } if (!is_filtered) { // NB: The majority of the time spent by this function is // spent converting the multibyte string to wide-char. line += conv.cMB2WC(buffer); // Remove any newlines, carriage returns, etc. if (line.Length() && (line.Last() == wxT('\n'))) { if ((line.Length() > 1)) { if (line[line.Length() - 2] == wxT('\r')) { // Carriage return + newline line.RemoveLast(2); } else { // Only a newline. line.RemoveLast(1); } } else { // Empty line line.Clear(); } // We've read an entire line. break; } } else { // Filtered line. break; } } if (!is_filtered) { if (flags & txtStripWhitespace) { line = line.Strip(wxString::both); } if ((flags & txtIgnoreEmptyLines) && line.IsEmpty()) { is_filtered = true; } } if (result) { *result = !is_filtered; } return line; } bool CTextFile::WriteLine(const wxString& line, const wxMBConv& conv) { wxCHECK_MSG(m_file.IsOpened(), false, wxT("Trying to read from closed file.")); wxCHECK_MSG((m_mode == write), false, wxT("Trying to read from non-readable file.")); // Ensures that use of newlines/carriage-returns matches the OS wxString result = wxTextBuffer::Translate(line); // Only add line-breaks between lines, as otherwise the number of // lines would grow as the result of the addition of an empty line, // at the end of the file. if (m_file.Tell() > 0) { result = wxTextBuffer::GetEOL() + result; } wxCharBuffer strBuffer = conv.cWC2MB(result); if (strBuffer) { const size_t length = strlen(strBuffer); return (m_file.Write(strBuffer, length) == length); } return false; } wxArrayString CTextFile::ReadLines(EReadTextFile flags, const wxMBConv& conv) { wxArrayString lines; while (!Eof()) { bool result = true; wxString line = GetNextLine(flags, conv, &result); if (result) { lines.Add(line); } } return lines; } bool CTextFile::WriteLines(const wxArrayString& lines, const wxMBConv& conv) { bool result = true; for (size_t i = 0; i < lines.GetCount(); ++i) { result &= WriteLine(lines[i], conv); } return result; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/StringFunctions.h0000644000175000017500000001760312050266603024057 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef STRING_FUNCTIONS_H #define STRING_FUNCTIONS_H #include "../../Types.h" // Needed for uint16 and uint32 // UTF8 types: No UTF8, BOM prefix, or Raw UTF8 enum EUtf8Str { utf8strNone, utf8strOptBOM, utf8strRaw }; /****************************************************/ /******************* Inlines ************************/ /****************************************************/ /** * Functions to perform Unicode <-> (char *) and UTF-8 conversion * * Please, DO NOT store pointers returned by unicode2char(), because they * get free'ed as soon as the return value of cWX2MB gets out of scope. * If you need to store a pointer, use a buffer of type wxWX2MBbuf: * and then cast it to a char pointer, e.g.: * * const wxWX2MBbuf buf(unicode2char(aWxString)); * * --- Now you can freely use buf as if it were a (const char *) --- * * puts(buf); * printf("%s", (const char *)buf); * * The cast in printf is necessary because variable number of parameter * functions have no type for these parameters, so the automatic casting * of wxWX2MBbuf to (const char *) is not performed. * * --- don't worry about memory allocation, memory will be --- * --- free'ed when buf gets out of scope, i.e., upon return --- * * wxMB2WXbuf, wxWX2MBbuf are always the appropriate return type, * either (wxChar *) or (wxWCharBuffer) * * Use the simplified names Unicode2CharBuf and Char2UnicodeBuf, and * do not declare these names const or the compiler will complain about * a double const. */ typedef const wxWX2MBbuf Unicode2CharBuf; typedef const wxMB2WXbuf Char2UnicodeBuf; Unicode2CharBuf unicode2char(const wxChar* x); inline Char2UnicodeBuf char2unicode(const char* x) { return wxConvLocal.cMB2WX(x); } inline Unicode2CharBuf unicode2UTF8(const wxChar* x) { return wxConvUTF8.cWX2MB(x); } inline Char2UnicodeBuf UTF82unicode(const char* x) { return wxConvUTF8.cMB2WX(x); } inline const wxCharBuffer char2UTF8(const char *x) { return unicode2UTF8(char2unicode(x)); } inline const wxCharBuffer UTF82char(const char *x) { return unicode2char(UTF82unicode(x)); } inline Unicode2CharBuf filename2char(const wxChar* x) { return wxConvFile.cWC2MB(x); } inline Char2UnicodeBuf char2filename(const char* x) { return wxConvFile.cMB2WC(x); } // // Replaces "&" with "&&" in 'in' for use with text-labels // inline wxString MakeStringEscaped(wxString in) { in.Replace(wxT("&"),wxT("&&")); return in; } // Make a string be a folder inline wxString MakeFoldername(wxString path) { if ( !path.IsEmpty() && ( path.Right(1) == wxT('/' )) ) { path.RemoveLast(); } return path; } // Duplicates a string inline char* nstrdup(const char* src) { size_t len = (src ? strlen(src) : 0) + 1; char *res = new char[len]; if ( src ) strcpy(res, src); res[len-1] = 0; return res; } // Replacements for atoi and atol that removes the need for converting // a string to normal chars with unicode2char. The value returned is the // value represented in the string or 0 if the conversion failed. inline long StrToLong(const wxString& str) { long value = 0; if (!str.ToLong(&value)) { // value may be changed even if it failes according to wx docu value = 0; } return value; } inline unsigned long StrToULong(const wxString& str) { unsigned long value = 0; if (!str.ToULong(&value)) { value = 0; } return value; } inline unsigned long long StrToULongLong(const wxString& str) { #if wxCHECK_VERSION(2, 9, 0) unsigned long long value = 0; if (!str.ToULongLong(&value)) { value = 0; } return value; #else // wx 2.8 Unicode2CharBuf buf = unicode2char(str); if (!buf) { // something went wrong return 0; } #ifdef _MSC_VER return _atoi64(buf); #else return atoll(buf); #endif #endif // wx 2.8 } inline size_t GetRawSize(const wxString& rstr, EUtf8Str eEncode) { size_t RealLen = 0; switch (eEncode) { case utf8strOptBOM: RealLen = 3; case utf8strRaw: { Unicode2CharBuf s(unicode2UTF8(rstr)); if (s) { RealLen += strlen(s); break; } else { RealLen = 0; } } default: { Unicode2CharBuf s(unicode2char(rstr)); if (s) { RealLen = strlen(s); } } } return RealLen; } /****************************************************/ /***************** Non-inlines **********************/ /****************************************************/ // Makes sIn suitable for inclusion in an URL, by escaping all chars that could cause trouble. wxString URLEncode(const wxString& sIn); /** * Converts a hexadecimal number to a char. * * @param hex The hex-number, must be at most 2 digits long. * @return The resulting char or \0 if conversion failed. */ wxChar HexToDec( const wxString& hex ); /** * This function converts all valid HTML escape-codes to their corresponding chars. * * @param str The string to unescape. * @return The unescaped version of the input string. */ wxString UnescapeHTML( const wxString& str ); /** * Ensures that the url pass is valid by escaping various chars. */ wxString validateURI(const wxString& url); /** * Compares two strings, while taking numerals into consideration. * * @return Returns -1 if a < b, 1 if a > b and 0 if a = b * * This function basically splits the two strings into a number of * fields, deliniated by whitespace, non-alphanumerical chars. The * numerals are then converted to integers, and the fields are * compared. This allows strings such as "a (2)" and "a (10)" to * be properly sorted for displaying. * * Currently does not handle floats (they are treated as to seperate * fields, nor negative numbers. */ int FuzzyStrCmp(const wxString& a, const wxString& b); /** * As with FuzzyStrCmp, but case insensitive. */ int FuzzyStrCaseCmp(const wxString& a, const wxString& b); /** * This class provides a simple and fast tokenizer. */ class CSimpleTokenizer { public: /** * @param str The string to tokenize. * @param delim The delimiter used to split the string. */ CSimpleTokenizer(const wxString& str, wxChar delim); /** * Returns the next part of the string separated by the * given delimiter. When the entire string has been * tokenized, an empty string is returned. Note that * empty tokens are also returned. */ wxString next(); /** * Returns the remaining part of the string. * * The remaining part is defined as being the part after * the last encountered token, or an empty string if the * entire string has been tokenized. * * If next() has yet to be called, the entire string will * be returned. */ wxString remaining() const; /** * Returns the number of tokens encountered so far. */ size_t tokenCount() const; private: //! The string being tokenized. wxString m_string; //! The delimiter used to split the string. wxChar m_delim; //! A pointer to the current position in the string. const wxChar* m_ptr; //! The number of tokens encountered. size_t m_count; }; #endif // STRING_FUNCTIONS_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/Path.h0000644000175000017500000002107312050266603021610 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2008-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef FILENAME_H #define FILENAME_H #include "../../Types.h" #include "Format.h" /** * This class wraps a path/filename, serving a purpose much * like wxFileName. But in addition CPath serves to enable * the handling of "broken" filenames, allowing these to be * printed in a meaningful manner, while still allowing * access to the actual files in the filesystem. * * This class is thread-safe, in that the class is read-only, * and any function that returns wxStrings or CPath objects, * ensure that an entirely new wxString object is created to * circumvent the thread-unsafe reference counting of that * class. * * This class, and its static functions should be used in * preference of wxFileName, for the above reason, and so * that cross-platform issues can be worked around in a * single place. */ class CPath { public: /** Default constructor. */ CPath(); /** Constuctor. */ explicit CPath(const wxString& path); /** Copy constructor. Creates a deep-copy of the passed object. */ CPath(const CPath& other); /** * Creates a path from one saved in the 'universal' format. * * These are to be used when the filenames/paths are saved to * the local machine, and ensure that locale-changes does not * affect our ability to find previously known files. This * should not be used when sending filenames to other clients * or (currently) the core/gui. **/ static CPath FromUniv(const wxString& path); /** Creates an 'universal' path from the specified CPath. */ static wxString ToUniv(const CPath& path); /** Assignment operator. */ CPath& operator=(const CPath& other); /** Less-than operator. */ bool operator<(const CPath& other) const; /** Note that only exact matches are considered equal, see IsSameDir. */ bool operator==(const CPath& other) const; /** Note that only exact matches are considered equal, see IsSameDir. */ bool operator!=(const CPath& other) const; /** Returns true if the filename is valid, false otherwise. */ bool IsOk() const; /** Returns true if the path exists and is a file, false otherwise. */ bool FileExists() const; /** Returns true if the path exists and is a directory, false otherwise. */ bool DirExists() const; enum EAccess { //! Only check of the file or dir exists. exists, //! If set, checks if a file is readable, or if a dir can be accessed. readable, //! If set, checks if a file or directory can be written to, writable, //! Combination of the two checks above. readwritable = readable | writable }; /** Returns if if the path is a dir, and the checks were positive. */ bool IsDir(EAccess mode) const; /** Returns if if the path is a dir, and the checks were positive. */ bool IsFile(EAccess mode) const; /** Returns the contents of the object in a form suitable for use with wx system-calls. */ wxString GetRaw() const; /** Returns the contents of the object in a form suitable for use in the UI. */ wxString GetPrintable() const; /** Returns the (raw) last extension, empty if none is found. */ wxString GetExt() const; /** Returns the full path, exluding the filename. */ CPath GetPath() const; /** Returns the full filename, excluding the path. */ CPath GetFullName() const; /** Returns the size of the specified file, or wxInvalidSize on failure. */ sint64 GetFileSize() const; /** * Compares under the assumption that both objects are dirs, even if * one or the other lacks a terminal directory-seperator. However, an * empty CPath object will not be considered equal to a path to the root. */ bool IsSameDir(const CPath& other) const; /** Returns a CPath created from joining the two objects. */ CPath JoinPaths(const CPath& other) const; /** Returns a CPath with invalid chars removed, and spaces escaped if specified. */ CPath Cleanup(bool keepSpaces = true, bool isFAT32 = false) const; /** Returns a CPath with a postfix before the file-extension. Must be ASCII. */ CPath AddPostfix(const wxString& postfix) const; /** Returns a CPath object with the extension appended. Empty strings are ignored. */ CPath AppendExt(const wxString& ext) const; /** Returns a CPath with the (last, if multiple) extension removed. */ CPath RemoveExt() const; /** Returns a CPath object with all extensions removed. */ CPath RemoveAllExt() const; /** Returns true if the the passed path makes up an prefix of this object. */ bool StartsWith(const CPath& other) const; /** * Get truncated path. * * @note This function truncates the @em name of the file, not the file * itself. * * @param length The truncated path should not exceed this length. * @param isFilePath Indicates whether the last part of the path (the * file name) should be kept or not, if possible. * @return The truncated path, at most @a length long. */ wxString TruncatePath(size_t length, bool isFilePath = false) const; /** * Renames the file 'src' to the file 'dst', overwriting if specified. Note that * renaming cannot be done across volumes. For that CopyFile is required. */ static bool RenameFile(const CPath& src, const CPath& dst, bool overwrite = false); /** * Copies the file 'src' to the file 'dst', overwriting if specified. * The silly name is used to avoid conflicts with the #define CopyFile, * which is set on MSW. */ static bool CloneFile(const CPath& src, const CPath& dst, bool overwrite = false); /** Makes a backup of a file, by copying the original file to 'src' + 'appendix' */ static bool BackupFile(const CPath& src, const wxString& appendix); /** Deletes the specified file, returning true on success. */ static bool RemoveFile(const CPath& file); /** Deletes the specified directory, returning true on success. */ static bool RemoveDir(const CPath& file); /** Creates the specified directory, returning true on success. */ static bool MakeDir(const CPath& file); /** Returns true if the path exists, and is a file. */ static bool FileExists(const wxString& file); /** Returns true if the path exists, and is a directory. */ static bool DirExists(const wxString& path); /** Returns the size of the specified file, or wxInvalidOffset on failure. */ static sint64 GetFileSize(const wxString& file); /** Returns the modification time the specified file, or (time_t)-1 on failure. */ static time_t GetModificationTime(const CPath& file); /** Returns the free diskspace at the specified path, or wxInvalidOffset on failure. */ static sint64 GetFreeSpaceAt(const CPath& path); private: //! Contains the printable filename, for use in the UI. wxString m_printable; //! Contains the "raw" filename, for use in system-calls, //! as well as in wxWidgets file functions. wxString m_filesystem; // Is made a friend to avoid needless copying of strings. friend int CmpAny(const CPath& ArgA, const CPath& ArgB); }; // Make CPath printable in CFormat template<> inline CFormat& CFormat::operator%(CPath value) { return this->operator%(value.GetPrintable()); } /** * Overloaded version of CmpAny for use with CPaths. As this is * typically used in the UI, it uses the printable filename in * order to get visually correct results. */ inline int CmpAny(const CPath& ArgA, const CPath& ArgB) { return ArgA.m_printable.CmpNoCase(ArgB.m_printable); } /** * Strips all path separators from the specified end of a path. * * Note: type must be either leading or trailing. */ wxString StripSeparators(wxString path, wxString::stripType type); /** * Joins two paths with the operating system specific path-separator. * * If any of the parameters are empty, the other parameter is * returned unchanged. */ wxString JoinPaths(const wxString& path, const wxString& file); #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/Format.cpp0000644000175000017500000004316612050266603022506 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2005-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "Format.h" // ADUNANZA BEGIN // #include // Needed for isalpha (POPCORN) // #include // Needed for uintptr_t (POPCORN) // ADUNANZA END #ifdef HAVE_CONFIG_H # include "config.h" #endif #if defined HAVE_STDINT_H # include #elif defined HAVE_INTTYPES_H # include #endif #include // Needed for _() #include // Needed for errno and EINVAL #include "strerror_r.h" // Needed for mule_strerror_r() /** Returns true if the char is a format-type. */ inline bool isTypeChar(wxChar c) { switch (c) { case wxT('s'): // String of characters case wxT('u'): // Unsigned decimal integer case wxT('i'): // Signed decimal integer case wxT('d'): // Signed decimal integer case wxT('c'): // Character case wxT('f'): // Decimal floating point case wxT('F'): // Decimal floating point case wxT('x'): // Unsigned hexadecimal integer case wxT('X'): // Unsigned hexadecimal integer (capital letters) case wxT('o'): // Unsigned octal case wxT('e'): // Scientific notation (mantise/exponent) using e character case wxT('E'): // Scientific notation (mantise/exponent) using E character case wxT('g'): // Use shorter %e or %f case wxT('G'): // Use shorter %E or %F case wxT('p'): // Pointer case wxT('n'): // Not supported, still needs to be caught though case wxT('a'): // (C99; not in SUSv2) Double in hexadecimal notation. case wxT('A'): // (C99; not in SUSv2) Double in hexadecimal notation (capital letters). case wxT('C'): // (Not in C99, but in SUSv2.) Synonym for lc. Don't use. Not supported. case wxT('S'): // (Not in C99, but in SUSv2.) Synonym for ls. Don't use. Not supported. case wxT('m'): // (Glibc extension.) Print output of strerror(errno). No argument is required. // case wxT('%'): // A `%' is written. No argument is converted. The complete conversion specification is `%%'. return true; } return false; } /** Returns true if the char is a valid flag. */ inline bool isFlagChar(wxChar c) { switch (c) { // C standard flags case wxT('+'): // Include sign for integers case wxT('-'): // Left-align output case wxT('#'): // Alternate form, varies case wxT(' '): // Pad with spaces case wxT('0'): // Pad with zeros // SUSv2 case wxT('\''): // For decimal conversion (i, d, u, f, F, g, G) the output is to be grouped with thousands' grouping characters if the locale information indicates any. // glibc 2.2 case wxT('I'): // For decimal integer conversion (i, d, u) the output uses the locale's alternative output digits, if any. return true; } return false; } /** Returns true if the char is a valid length modifier. */ inline bool isLengthChar(wxChar c) { switch (c) { case wxT('h'): // Short ('hh') and char ('h') case wxT('l'): // Long ('l') and long long ('ll') case wxT('L'): // Double long case wxT('z'): // size_t case wxT('j'): // intmax_t case wxT('t'): // ptrdiff_t case wxT('q'): // quad. Synonym for 'll'. Don't use. return true; } return false; } /** Returns true if the argument is a valid length modifier */ inline bool isValidLength(const wxString& str) { return ((str == wxT("hh")) || (str == wxT("h")) || (str == wxT("l")) || (str == wxT("ll")) || (str == wxT("L")) || (str == wxT("z")) || (str == wxT("j")) || (str == wxT("t")) || (str == wxT("q"))); } enum eStringParserStates { esNonFormat = 0, // Not in a format string esFormatStart, // Start of a format string esFormat, // Inside a format string esFormatEnd, // Finished reading a format string esInvalidFormat // Invalid (incomplete) format specifier }; /** * State machine to extract format specifiers from the string * * All format strings will be extracted, regardless whether they are valid or * not. Also '%%' is considered to be special format string which requires no * arguments, thus it will be extracted too (that is because it has to be * converted to '%'). */ static eStringParserStates stringParser[][3] = { /* %-sign, type-char, other */ /* esNonFormat */ { esFormatStart, esNonFormat, esNonFormat }, /* esFormatStart */ { esFormatEnd, esFormatEnd, esFormat }, /* esFormat */ { esInvalidFormat, esFormatEnd, esFormat }, /* esFormatEnd */ { esFormatStart, esNonFormat, esNonFormat }, /* esInvalidFormat */ { esFormatEnd, esFormatEnd, esFormat } }; enum eFormatParserStates { efStart = 0, // Format string start efArgIndex, // Argument index efArgIndexEnd, // End of the argument index ('$' sign) efFlagChar, // Flag character efWidth, // Width field efPrecStart, // Precision field start ('.' character) efPrecision, // Precision field efLength, // Length field // The following two are terminal states, they terminate processing efType, // Type character efError // Invalid format specifier }; /** * State machine to parse format specifiers * * Format specifiers are expected to follow the following structure: * %[argIndex$][Flags][Width][.Precision][Length] */ static eFormatParserStates formatParser[][7] = { /* [1-9], '0', flagChar, '.', lengthChar, typeChar, '$' */ /* efStart */ { efArgIndex, efFlagChar, efFlagChar, efPrecStart, efLength, efType, efError, }, /* efArgIndex */ { efArgIndex, efArgIndex, efError, efPrecStart, efLength, efType, efArgIndexEnd, }, /* efArgIndexEnd */ { efWidth, efFlagChar, efFlagChar, efPrecStart, efLength, efType, efError, }, /* efFlagChar */ { efWidth, efError, efError, efPrecStart, efLength, efType, efError, }, /* efWidth */ { efWidth, efWidth, efError, efPrecStart, efLength, efType, efError, }, /* efPrecStart */ { efPrecision, efPrecision, efError, efError, efLength, efType, efError, }, /* efPrecision */ { efPrecision, efPrecision, efError, efError, efLength, efType, efError, }, /* efLength */ { efError, efError, efError, efError, efLength, efType, efError, } }; // Forward-declare the specialization for const wxString&, needed by the parser template<> void CFormat::ProcessArgument(FormatList::iterator, const wxString&); void CFormat::Init(const wxString& str) { m_formatString = str; m_argIndex = 0; // Extract format-string-like substrings from the input { size_t formatStart = 0; eStringParserStates state = esNonFormat; for (size_t pos = 0; pos < str.length(); ++pos) { if (str[pos] == wxT('%')) { state = stringParser[state][0]; } else if (isTypeChar(str[pos])) { state = stringParser[state][1]; } else { state = stringParser[state][2]; } switch (state) { case esInvalidFormat: wxFAIL_MSG(wxT("Invalid format specifier: ") + str.Mid(formatStart, pos - formatStart + 1)); case esFormatStart: formatStart = pos; break; case esFormatEnd: { FormatSpecifier fs; fs.startPos = formatStart; fs.endPos = pos; fs.result = str.Mid(formatStart, pos - formatStart + 1); m_formats.push_back(fs); } default: break; } } wxASSERT_MSG((state == esFormatEnd) || (state == esNonFormat), wxT("Incomplete format specifier: ") + str.Mid(formatStart)); } // Parse the extracted format specifiers, removing invalid ones unsigned formatCount = 0; for (FormatList::iterator it = m_formats.begin(); it != m_formats.end();) { if (it->result == wxT("%%")) { it->argIndex = 0; it->result = wxT("%"); ++it; } else { it->argIndex = ++formatCount; it->flag = '\0'; it->width = 0; it->precision = -1; it->type = '\0'; unsigned num = 0; wxString lengthModifier; bool isPrecision = false; eFormatParserStates state = efStart; for (size_t pos = 1; pos < it->result.length(); ++pos) { wxChar c = it->result[pos]; if ((c >= wxT('1')) && (c <= wxT('9'))) { state = formatParser[state][0]; } else if (c == wxT('0')) { state = formatParser[state][1]; } else if (isFlagChar(c)) { state = formatParser[state][2]; } else if (c == wxT('.')) { state = formatParser[state][3]; } else if (isLengthChar(c)) { state = formatParser[state][4]; } else if (isTypeChar(c)) { state = formatParser[state][5]; } else if (c == wxT('$')) { state = formatParser[state][6]; } else { state = efError; } if ((c >= wxT('0')) && (c <= wxT('9'))) { num *= 10; num += (c - wxT('0')); } switch (state) { case efArgIndexEnd: it->argIndex = num; num = 0; break; case efFlagChar: it->flag = c; break; case efPrecStart: it->width = num; num = 0; isPrecision = true; break; case efLength: if (isPrecision) { it->precision = num; } else if (num > 0) { it->width = num; } num = 0; lengthModifier += c; if (!isValidLength(lengthModifier)) { state = efError; } break; case efType: if (isPrecision) { it->precision = num; } else if (num > 0) { it->width = num; } if (c == wxT('m')) { it->argIndex = 0; it->type = wxT('s'); int errnum = errno; #if defined(HAVE_STRERROR) || defined(HAVE_STRERROR_R) unsigned buflen = 256; bool done = false; do { errno = 0; char* buf = new char[buflen]; *buf = '\0'; int result = mule_strerror_r(errnum, buf, buflen); if ((result == 0) || (buflen > 1024)) { ProcessArgument(it, wxString(buf, wxConvLocal)); } else if (errno == EINVAL) { if (*buf == '\0') { ProcessArgument(it, wxString::Format(_("Unknown error %d"), errnum)); } else { ProcessArgument(it, wxString(buf, wxConvLocal)); } } else if (errno != ERANGE) { ProcessArgument(it, wxString::Format(_("Unable to get error description for error %d"), errnum)); } else { buflen <<= 1; } delete [] buf; done = ((result == 0) || (errno != ERANGE)); } while (!done); #else wxFAIL_MSG(wxString::Format(wxT("Unable to get error description for error %d."), errnum)); ProcessArgument(it, wxString::Format(_("Unable to get error description for error %d"), errnum)); #endif } else { it->type = c; } default: break; } wxCHECK2_MSG(state != efError, break, wxT("Invalid format specifier: ") + it->result); if (state == efType) { // Needed by the '%m' conversion, which takes place immediately, // overwriting it->result break; } } if (state == efError) { it = m_formats.erase(it); --formatCount; } else { ++it; } } } } wxString CFormat::GetString() const { wxString result; FormatList::const_iterator it = m_formats.begin(); if (it == m_formats.end()) { result = m_formatString; } else { unsigned lastEnd = 0; for (; it != m_formats.end(); ++it) { result += m_formatString.Mid(lastEnd, it->startPos - lastEnd); result += it->result; lastEnd = it->endPos + 1; } result += m_formatString.Mid(lastEnd); } return result; } wxString CFormat::GetModifiers(FormatList::const_iterator it) const { wxString result = wxT("%"); if (it->flag != wxT('\0')) { result += it->flag; } if (it->width > 0) { result += wxString::Format(wxT("%u"), it->width); } if (it->precision >= 0) { result += wxString::Format(wxT(".%u"), it->precision); } return result; } // Forward-declare the specialization for unsigned long long template<> void CFormat::ProcessArgument(FormatList::iterator, unsigned long long); // Processing a double-precision floating-point argument template<> void CFormat::ProcessArgument(FormatList::iterator it, double value) { switch (it->type) { case wxT('a'): case wxT('A'): case wxT('e'): case wxT('E'): case wxT('f'): case wxT('F'): case wxT('g'): case wxT('G'): break; case wxT('s'): it->type = wxT('g'); break; default: wxFAIL_MSG(wxT("Floating-point value passed for non-floating-point format field: ") + it->result); return; } it->result = wxString::Format(GetModifiers(it) + it->type, value); } // Processing a wxChar argument template<> void CFormat::ProcessArgument(FormatList::iterator it, wxChar value) { switch (it->type) { case wxT('c'): break; case wxT('s'): it->type = wxT('c'); break; case wxT('u'): case wxT('d'): case wxT('i'): case wxT('o'): case wxT('x'): case wxT('X'): ProcessArgument(it, (unsigned long long)value); return; case wxT('a'): case wxT('A'): case wxT('e'): case wxT('E'): case wxT('f'): case wxT('F'): case wxT('g'): case wxT('G'): ProcessArgument(it, (double)value); return; default: wxFAIL_MSG(wxT("Character value passed to non-character format field: ") + it->result); return; } it->result = wxString::Format(GetModifiers(it) + it->type, value); } // Processing a signed long long argument template<> void CFormat::ProcessArgument(FormatList::iterator it, signed long long value) { switch (it->type) { case wxT('c'): ProcessArgument(it, (wxChar)value); return; case wxT('i'): break; case wxT('o'): case wxT('x'): case wxT('X'): ProcessArgument(it, (unsigned long long)value); return; case wxT('u'): case wxT('d'): case wxT('s'): it->type = wxT('i'); break; case wxT('a'): case wxT('A'): case wxT('e'): case wxT('E'): case wxT('f'): case wxT('F'): case wxT('g'): case wxT('G'): ProcessArgument(it, (double)value); return; default: wxFAIL_MSG(wxT("Integer value passed for non-integer format field: ") + it->result); return; } it->result = wxString::Format(GetModifiers(it) + WXLONGLONGFMTSPEC + it->type, value); } // Processing an unsigned long long argument template<> void CFormat::ProcessArgument(FormatList::iterator it, unsigned long long value) { switch (it->type) { case wxT('c'): ProcessArgument(it, (wxChar)value); return; case wxT('u'): case wxT('o'): case wxT('x'): case wxT('X'): break; case wxT('i'): case wxT('d'): case wxT('s'): it->type = wxT('u'); break; case wxT('a'): case wxT('A'): case wxT('e'): case wxT('E'): case wxT('f'): case wxT('F'): case wxT('g'): case wxT('G'): ProcessArgument(it, (double)value); return; default: wxFAIL_MSG(wxT("Integer value passed for non-integer format field: ") + it->result); return; } it->result = wxString::Format(GetModifiers(it) + WXLONGLONGFMTSPEC + it->type, value); } // Processing a wxString argument template<> void CFormat::ProcessArgument(FormatList::iterator it, const wxString& value) { if (it->type != wxT('s')) { wxFAIL_MSG(wxT("String value passed for non-string format field: ") + it->result); } else { if (it->precision >= 0) { it->result = value.Left(it->precision); } else { it->result = value; } if ((it->width > 0) && (it->result.length() < it->width)) { if (it->flag == wxT('-')) { it->result += wxString(it->width - it->result.length(), wxT(' ')); } else { it->result = wxString(it->width -it->result.length(), wxT(' ')) + it->result; } } } } // Processing pointer arguments template<> void CFormat::ProcessArgument(FormatList::iterator it, void * value) { if ((it->type == wxT('p')) || (it->type == wxT('s'))) { // Modifiers (if any) are ignored for pointer conversions // built-in Format for pointer is not consistent: // - Windows: uppercase, no leading 0x // - Linux: leading zeros missing // -> format it as hex if (sizeof(void*) == 8) { // 64 bit // ADUNANZA BEGIN // Backport da aMule SVN #if 0 it->result = wxString::Format(wxT("0x%016x"), (uintptr_t)value); #else it->result = wxString::Format(wxString(wxT("0x%016")) + WXLONGLONGFMTSPEC + wxT("x"), (uintptr_t)value); #endif // ADUNANZA END } else { // 32 bit it->result = wxString::Format(wxT("0x%08x"), (uintptr_t)value); } } else { wxFAIL_MSG(wxT("Pointer value passed for non-pointer format field: ") + it->result); } } // Generic argument processor template template CFormat& CFormat::operator%(_Tp value) { m_argIndex++; for (FormatList::iterator it = m_formats.begin(); it != m_formats.end(); ++it) { if (it->argIndex == m_argIndex) { if ((it->type != wxT('n')) && (it->type != wxT('C')) && (it->type != wxT('S'))) { ProcessArgument<_Tp>(it, value); } else { wxFAIL_MSG(wxT("Not supported conversion type in format field: ") + it->result); } } } return *this; } // explicit instatiation for the types we handle template CFormat& CFormat::operator%(double); template CFormat& CFormat::operator%(wxChar); template CFormat& CFormat::operator%(signed long long); template CFormat& CFormat::operator%(unsigned long long); template CFormat& CFormat::operator%(const wxString&); template CFormat& CFormat::operator%(void *); // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/Path.cpp0000644000175000017500000004104412050266603022143 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2008-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "Path.h" #include "StringFunctions.h" // Needed for filename2char() #include #if defined __WXMSW__ || defined __IRIX__ # include #endif #include #include // This is required in order to ensure that wx can "handle" filenames // using a different encoding than the current system-wide setting. If // this is not done, such filenames will fail during conversion to/from // multibyte (as in cWC2MB/cMB2WC). #if !wxUSE_GUI && !defined(__WXMSW__) void* setFNConv() { // This uses the same method as wxApp::Initialize under GTK2 wxString encName = wxLocale::GetSystemEncodingName().Upper(); if (encName.IsEmpty() || (encName == wxT("US-ASCII"))) { encName = wxT("UTF-8"); } return wxConvFileName = new wxConvBrokenFileNames(encName); } // Ensure intialization static void* s_foo = setFNConv(); #endif // Windows has case-insensitive paths, so we use a // case-insensitive cmp for that platform. TODO: // Perhaps it would be better to simply lowercase // m_filesystem in the constructor ... #ifdef __WXMSW__ #define PATHCMP(a, b) wxStricmp(a, b) #define PATHNCMP(a, b, n) wxStrnicmp(a, b, n) #else #define PATHCMP(a, b) wxStrcmp(a, b) #define PATHNCMP(a, b, n) wxStrncmp(a, b, n) #endif //////////////////////////////////////////////////////////// // Helper functions /** Creates a deep copy of the string, avoiding its ref. counting. */ inline wxString DeepCopy(const wxString& str) { return wxString(str.c_str(), str.Length()); } wxString Demangle(const wxCharBuffer& fn, const wxString& filename) { wxString result = wxConvUTF8.cMB2WC(fn); // FIXME: Is this actually needed for osx/msw? if (!result) { // We only try to further demangle if the current locale is // UTF-8, C or POSIX. This is because in any other case, the // current locale is probably the best choice for printing. static wxFontEncoding enc = wxLocale::GetSystemEncoding(); switch (enc) { // SYSTEM is needed for ANSI encodings such as // "POSIX" and "C", which are only 7bit. case wxFONTENCODING_SYSTEM: case wxFONTENCODING_UTF8: result = wxConvISO8859_1.cMB2WC(fn); break; default: // Nothing to do, the filename is probably Ok. result = DeepCopy(filename); } } return result; } /** Splits a full path into its path and filename component. */ inline void DoSplitPath(const wxString& strPath, wxString* path, wxString* name) { bool hasExt = false; wxString ext, vol; wxString* pVol = (path ? &vol : NULL); wxString* pExt = (name ? &ext : NULL); wxFileName::SplitPath(strPath, pVol, path, name, pExt, &hasExt); if (hasExt && pExt) { *name += wxT(".") + ext; } if (path && vol.Length()) { *path = vol + wxFileName::GetVolumeSeparator() + *path; } } /** Removes invalid chars from a filename. */ wxString DoCleanup(const wxString& filename, bool keepSpaces, bool isFAT32) { wxString result; for (size_t i = 0; i < filename.Length(); i++) { const wxChar c = filename[i]; switch (c) { case wxT('/'): continue; case wxT('\"'): case wxT('*'): case wxT('<'): case wxT('>'): case wxT('?'): case wxT('|'): case wxT('\\'): case wxT(':'): if (isFAT32) { continue; } default: if ((c == wxT(' ')) && !keepSpaces) { result += wxT("%20"); } else if (c >= 32) { // Many illegal for filenames in windows // below the 32th char (which is space). result += filename[i]; } } } return result; } /** Does the actual work of adding a postfix ... */ wxString DoAddPostfix(const wxString& src, const wxString& postfix) { const wxFileName srcFn(src); wxString result = srcFn.GetName() + postfix; if (srcFn.HasExt()) { result += wxT(".") + srcFn.GetExt(); } wxString path = srcFn.GetPath(); if (path.Length()) { return path + wxFileName::GetPathSeparator() + result; } return result; } /** Removes the last extension of a filename. */ wxString DoRemoveExt(const wxString& path) { // Using wxFilename which handles paths, etc. wxFileName tmp(path); tmp.ClearExt(); return tmp.GetFullPath(); } /** Readies a path for use with wxAccess.. */ wxString DoCleanPath(const wxString& path) { #ifdef __WXMSW__ // stat fails on windows if there are trailing path-separators. wxString cleanPath = StripSeparators(path, wxString::trailing); // Root paths must end with a separator (X:\ rather than X:). // See comments in wxDirExists. if ((cleanPath.Length() == 2) && (cleanPath.Last() == wxT(':'))) { cleanPath += wxFileName::GetPathSeparator(); } return cleanPath; #else return path; #endif } /** Returns true if the two paths are equal. */ bool IsSameAs(const wxString& a, const wxString& b) { // Cache the current directory const wxString cwd = wxGetCwd(); // We normalize everything, except env. variables, which // can cause problems when the string is not encodable // using wxConvLibc which wxWidgets uses for the purpose. const int flags = (wxPATH_NORM_ALL | wxPATH_NORM_CASE) & ~wxPATH_NORM_ENV_VARS; // Let wxFileName handle the tricky stuff involved in actually // comparing two paths ... Currently, a path ending with a path- // seperator will be unequal to the same path without a path- // seperator, which is probably for the best, but can could // lead to some unexpected behavior. wxFileName fn1(a); wxFileName fn2(b); fn1.Normalize(flags, cwd); fn2.Normalize(flags, cwd); return (fn1.GetFullPath() == fn2.GetFullPath()); } //////////////////////////////////////////////////////////// // CPath implementation CPath::CPath() { } CPath::CPath(const wxString& filename) { // Equivalent to the default constructor ... if (!filename) { return; } wxCharBuffer fn = filename2char(filename); if (fn) { // Filename is valid in the current locale. This means that // it either originated from a (wx)system-call, or from a // user with a properly setup system. m_filesystem = DeepCopy(filename); m_printable = Demangle(fn, filename); } else { // It's not a valid filename in the current locale, so we'll // have to do some magic. This ensures that the filename is // saved as UTF8, even if the system is not unicode enabled, // preserving the original filename till the user has fixed // his system ... #ifdef __WXMSW__ // Magic fails on Windows where we always work with wide char file names. m_filesystem = DeepCopy(filename); m_printable = m_filesystem; #else fn = wxConvUTF8.cWC2MB(filename); m_filesystem = wxConvFile.cMB2WC(fn); // There's no need to try to unmangle the filename here. m_printable = DeepCopy(filename); #endif } wxASSERT(m_filesystem.Length()); wxASSERT(m_printable.Length()); } CPath::CPath(const CPath& other) : m_printable(DeepCopy(other.m_printable)) , m_filesystem(DeepCopy(other.m_filesystem)) {} CPath CPath::FromUniv(const wxString& path) { wxCharBuffer fn = wxConvISO8859_1.cWC2MB(path); return CPath(wxConvFile.cMB2WC(fn)); } wxString CPath::ToUniv(const CPath& path) { // The logic behind this is that by saving the filename // as a raw bytestream (which is what ISO8859-1 amounts // to), we can always recreate the on-disk filename, as // if we had read it using wx functions. wxCharBuffer fn = wxConvFile.cWC2MB(path.m_filesystem); return wxConvISO8859_1.cMB2WC(fn); } CPath& CPath::operator=(const CPath& other) { if (this != &other) { m_printable = DeepCopy(other.m_printable); m_filesystem = DeepCopy(other.m_filesystem); } return *this; } bool CPath::operator==(const CPath& other) const { return ::IsSameAs(m_filesystem, other.m_filesystem); } bool CPath::operator!=(const CPath& other) const { return !(*this == other); } bool CPath::operator<(const CPath& other) const { return PATHCMP(m_filesystem.c_str(), other.m_filesystem.c_str()) < 0; } bool CPath::IsOk() const { // Something is very wrong if one of the two is empty. return m_printable.Length() && m_filesystem.Length(); } bool CPath::FileExists() const { return wxFileName::FileExists(m_filesystem); } bool CPath::DirExists() const { return wxFileName::DirExists(DoCleanPath(m_filesystem)); } bool CPath::IsDir(EAccess mode) const { wxString path = DoCleanPath(m_filesystem); if (!wxFileName::DirExists(path)) { return false; } else if ((mode & writable) && !wxIsWritable(path)) { return false; } else if ((mode & readable) && !wxIsReadable(path)) { return false; } return true; } bool CPath::IsFile(EAccess mode) const { if (!wxFileName::FileExists(m_filesystem)) { return false; } else if ((mode & writable) && !wxIsWritable(m_filesystem)) { return false; } else if ((mode & readable) && !wxIsReadable(m_filesystem)) { return false; } return true; } wxString CPath::GetRaw() const { // Copy as c-strings to ensure that the CPath objects can safely // be passed across threads (avoiding wxString ref. counting). return DeepCopy(m_filesystem); } wxString CPath::GetPrintable() const { // Copy as c-strings to ensure that the CPath objects can safely // be passed across threads (avoiding wxString ref. counting). return DeepCopy(m_printable); } wxString CPath::GetExt() const { return wxFileName(m_filesystem).GetExt(); } CPath CPath::GetPath() const { CPath path; ::DoSplitPath(m_printable, &path.m_printable, NULL); ::DoSplitPath(m_filesystem, &path.m_filesystem, NULL); return path; } CPath CPath::GetFullName() const { CPath path; ::DoSplitPath(m_printable, NULL, &path.m_printable); ::DoSplitPath(m_filesystem, NULL, &path.m_filesystem); return path; } sint64 CPath::GetFileSize() const { if (FileExists()) { wxFile f(m_filesystem); if (f.IsOpened()) { return f.Length(); } } return wxInvalidOffset; } bool CPath::IsSameDir(const CPath& other) const { wxString a = m_filesystem; wxString b = other.m_filesystem; // This check is needed to avoid trouble in the // case where one path is empty, and the other // points to the root dir. if (a.Length() && b.Length()) { a = StripSeparators(a, wxString::trailing); b = StripSeparators(b, wxString::trailing); } return ::IsSameAs(a, b); } CPath CPath::JoinPaths(const CPath& other) const { if (!IsOk()) { return CPath(other); } else if (!other.IsOk()) { return CPath(*this); } CPath joinedPath; // DeepCopy shouldn't be needed, as JoinPaths results in the creation of a new string. joinedPath.m_printable = ::JoinPaths(m_printable, other.m_printable); joinedPath.m_filesystem = ::JoinPaths(m_filesystem, other.m_filesystem); return joinedPath; } CPath CPath::Cleanup(bool keepSpaces, bool isFAT32) const { CPath result; result.m_printable = ::DoCleanup(m_printable, keepSpaces, isFAT32); result.m_filesystem = ::DoCleanup(m_filesystem, keepSpaces, isFAT32); return result; } CPath CPath::AddPostfix(const wxString& postfix) const { wxASSERT(postfix.IsAscii()); CPath result; result.m_printable = ::DoAddPostfix(m_printable, postfix); result.m_filesystem = ::DoAddPostfix(m_filesystem, postfix); return result; } CPath CPath::AppendExt(const wxString& ext) const { wxASSERT(ext.IsAscii()); // Though technically, and empty extension would simply // be another . at the end of the filename, we ignore them. if (ext.IsEmpty()) { return *this; } CPath result(*this); if (ext[0] == wxT('.')) { result.m_printable << ext; result.m_filesystem << ext; } else { result.m_printable << wxT(".") << ext; result.m_filesystem << wxT(".") << ext; } return result; } CPath CPath::RemoveExt() const { CPath result; result.m_printable = DoRemoveExt(m_printable); result.m_filesystem = DoRemoveExt(m_filesystem); return result; } CPath CPath::RemoveAllExt() const { CPath last, current = RemoveExt(); // Loop until all extensions are removed do { last = current; current = last.RemoveExt(); } while (last != current); return current; } bool CPath::StartsWith(const CPath& other) const { // It doesn't make sense comparing invalid paths, // especially since if 'other' was empty, it would // be considered a prefix of any path. if ((IsOk() && other.IsOk()) == false) { return false; } // Adding an seperator to avoid partial matches, such as // "/usr/bi" matching "/usr/bin". TODO: Paths should be // normalized first (in the constructor). const wxString a = StripSeparators(m_filesystem, wxString::trailing) + wxFileName::GetPathSeparator(); const wxString b = StripSeparators(other.m_filesystem, wxString::trailing) + wxFileName::GetPathSeparator(); if (a.Length() < b.Length()) { // Cannot possibly be a prefix. return false; } const size_t checkLen = std::min(a.Length(), b.Length()); return PATHNCMP(a.c_str(), b.c_str(), checkLen) == 0; } bool CPath::CloneFile(const CPath& src, const CPath& dst, bool overwrite) { return ::wxCopyFile(src.m_filesystem, dst.m_filesystem, overwrite); } bool CPath::RemoveFile(const CPath& file) { return ::wxRemoveFile(file.m_filesystem); } bool CPath::RenameFile(const CPath& src, const CPath& dst, bool overwrite) { return ::wxRenameFile(src.m_filesystem, dst.m_filesystem, overwrite); } bool CPath::BackupFile(const CPath& src, const wxString& appendix) { wxASSERT(appendix.IsAscii()); CPath dst = CPath(src.m_filesystem + appendix); if (CPath::CloneFile(src, dst, true)) { // Try to ensure that the backup gets physically written #if defined __WXMSW__ || defined __IRIX__ wxFFile backupFile; #else wxFile backupFile; #endif if (backupFile.Open(dst.m_filesystem)) { backupFile.Flush(); } return true; } return false; } bool CPath::RemoveDir(const CPath& file) { return ::wxRmdir(file.m_filesystem); } bool CPath::MakeDir(const CPath& file) { return ::wxMkdir(file.m_filesystem); } bool CPath::FileExists(const wxString& file) { return CPath(file).FileExists(); } bool CPath::DirExists(const wxString& path) { return CPath(path).DirExists(); } sint64 CPath::GetFileSize(const wxString& file) { return CPath(file).GetFileSize(); } time_t CPath::GetModificationTime(const CPath& file) { return ::wxFileModificationTime(file.m_filesystem); } sint64 CPath::GetFreeSpaceAt(const CPath& path) { wxLongLong free; if (::wxGetDiskSpace(path.m_filesystem, NULL, &free)) { return free.GetValue(); } return wxInvalidOffset; } wxString CPath::TruncatePath(size_t length, bool isFilePath) const { wxString file = GetPrintable(); // Check if there's anything to do if (file.Length() <= length) { return file; } // If the path is a file name, then prefer to remove from the path, rather than the filename if (isFilePath) { wxString path = wxFileName(file).GetPath(); file = wxFileName(file).GetFullName(); if (path.Length() >= length) { path.Clear(); } else if (file.Length() >= length) { path.Clear(); } else { // Minus 6 for "[...]" + separator int pathlen = (int)(length - file.Length() - 6); if (pathlen > 0) { path = wxT("[...]") + path.Right( pathlen ); } else { path.Clear(); } } file = ::JoinPaths(path, file); } if (file.Length() > length) { if (length > 5) { file = file.Left(length - 5) + wxT("[...]"); } else { file.Clear(); } } return file; } wxString StripSeparators(wxString path, wxString::stripType type) { wxASSERT((type == wxString::leading) || (type == wxString::trailing)); const wxString seps = wxFileName::GetPathSeparators(); while (!path.IsEmpty()) { size_t pos = ((type == wxString::leading) ? 0 : path.Length() - 1); if (seps.Contains(path.GetChar(pos))) { path.Remove(pos, 1); } else { break; } } return path; } wxString JoinPaths(const wxString& path, const wxString& file) { if (path.IsEmpty()) { return file; } else if (file.IsEmpty()) { return path; } return StripSeparators(path, wxString::trailing) + wxFileName::GetPathSeparator() + StripSeparators(file, wxString::leading); } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/MuleDebug.h0000644000175000017500000001002012050266603022553 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2005-2011 Mikkel Schubert ( xaignar@users.sourceforge.net ) // Copyright (c) 2005-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef MULEDEBUG_H #define MULEDEBUG_H #include /** * Installs an exception handler that can handle CMuleExceptions. */ void InstallMuleExceptionHandler(); /** * */ void OnUnhandledException(); //! Print a backtrace, skipping the first n frames. void print_backtrace(unsigned n); //! Returns a backtrace, skipping the first n frames. wxString get_backtrace(unsigned n); /** * This exception should be used to implement other * types of exceptions. It should never be caught, * instead catch the subtypes. */ class CMuleException { public: CMuleException(const wxString& type, const wxString& desc) : m_what(type + wxT(": ") + desc) {} virtual ~CMuleException() throw() {} virtual const wxString& what() const throw() { return m_what; } private: wxString m_what; }; /** * This exception type is used to represent exceptions that are * caused by invalid operations. Exceptions of this type should * not be caught as they are the result of bugs. */ struct CRunTimeException : public CMuleException { CRunTimeException(const wxString& type, const wxString& desc) : CMuleException(wxT("CRunTimeException::") + type, desc) {} }; /** * This exception is to be thrown if invalid parameters are passed to a function. */ struct CInvalidParamsEx : public CRunTimeException { CInvalidParamsEx(const wxString& desc) : CRunTimeException(wxT("CInvalidArgsException"), desc) {} }; /** * This exception is to be thrown if an object is used in an invalid state. */ struct CInvalidStateEx : public CRunTimeException { CInvalidStateEx(const wxString& desc) : CRunTimeException(wxT("CInvalidStateException"), desc) {} }; /** * This exception is thrown on wrong packets or tags. */ struct CInvalidPacket : public CMuleException { CInvalidPacket(const wxString& desc) : CMuleException(wxT("CInvalidPacket"), desc) {} }; // This ifdef ensures that we wont get assertions while // unittesting, which would otherwise impede the tests. #ifdef MULEUNIT #define _MULE_THROW(cond, cls, msg) \ do { \ if (!(cond)) { \ throw cls(msg); \ } \ } while (false) #else #define _MULE_THROW(cond, cls, msg) \ do { \ if (!(cond)) { \ wxFAIL_MSG(wxT(#cond)); \ throw cls(msg); \ } \ } while (false) #endif #define MULE_CHECK_THROW(cond, cls, msg) \ _MULE_THROW((cond), cls, (msg)) #define MULE_VALIDATE_STATE(cond, msg) \ MULE_CHECK_THROW((cond), CInvalidStateEx, (msg)) #define MULE_VALIDATE_PARAMS(cond, msg) \ MULE_CHECK_THROW((cond), CInvalidParamsEx, (msg)) #define MULE_ASSERT(cond) wxASSERT((cond)) #define MULE_ASSERT_MSG(cond, msg) wxASSERT_MSG((cond), msg) #define MULE_FAIL() wxFAIL() #define MULE_FAIL_MSG(msg) wxFAIL_MSG(msg) #define MULE_CHECK(cond, retValue) wxCHECK((cond), (retValue)) #define MULE_CHECK_MSG(cond, ret, msg) wxCHECK_MSG((cond), (ret), (msg)) #define MULE_CHECK_RET(cond, msg) wxCHECK_RET((cond), (msg)) #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/strerror_r.c0000644000175000017500000000517312050266603023115 0ustar l3onl3on/* * This file is part of the aMule Project. * * Copyright (c) 2011 aMule Team ( admin@amule.org / http://www.amule.org ) * * Any parts of this program derived from the xMule, lMule or eMule project, * or contributed by third-party developers are copyrighted by their * respective authors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef _XOPEN_SOURCE # define _XOPEN_SOURCE 600 #endif #include // Needed for strerror_r() and size_t #ifdef HAVE_ERRNO_H # include // Needed for errno #endif #ifndef HAVE_STRERROR_R # ifdef HAVE_STRERROR /* Replacement strerror_r() function for systems that don't have any. Note that this replacement function is NOT thread-safe! */ int mule_strerror_r(int errnum, char *buf, size_t buflen) { char *tmp; if ((buf == NULL) || (buflen == 0)) { errno = ERANGE; return -1; } tmp = strerror(errnum); if (tmp == NULL) { errno = EINVAL; return -1; } else { strncpy(buf, tmp, buflen - 1); buf[buflen - 1] = '\0'; if (strlen(tmp) >= buflen) { errno = ERANGE; return -1; } } return 0; } # else /* No way to get error description */ int mule_strerror_r() { #ifdef HAVE_ERRNO_H errno = ENOSYS; /* not implemented */ #endif return -1; } # endif #else # ifdef STRERROR_R_CHAR_P /* Replacement strerror_r() function for systems that return a char*. */ int mule_strerror_r(int errnum, char *buf, size_t buflen) { char *tmp = strerror_r(errnum, buf, buflen); if (tmp == NULL) { errno = EINVAL; return -1; } else if (tmp != buf) { if ((buf == NULL) || (buflen == 0)) { errno = ERANGE; return -1; } else { strncpy(buf, tmp, buflen - 1); buf[buflen - 1] = '\0'; if (strlen(tmp) >= buflen) { errno = ERANGE; return -1; } } } return 0; } # else /* Nothing to do, library strerror_r() is XSI-compliant. */ int mule_strerror_r(int errnum, char *buf, size_t buflen) { return strerror_r(errnum, buf, buflen); } # endif #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/TextFile.h0000644000175000017500000001013212050266603022432 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2006-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef TEXTFILE_H #define TEXTFILE_H #include #include #include class CPath; /** Criteria used when reading an entire file to an array of strings. */ enum EReadTextFile { /** Do not filter anything */ txtReadAll = 0, /** Do not return empty lines. Can be combined with txtStripWhiteSpace */ txtIgnoreEmptyLines = 1, /** Do not return lines starting with a '#' */ txtIgnoreComments = 2, /** Strip whitespace from the beginning/end of lines. */ txtStripWhitespace = 4, /** Default parameters for file reading. */ txtReadDefault = txtIgnoreEmptyLines | txtIgnoreComments | txtStripWhitespace }; /** * Text file class. * * This class is a wrapper around wxFFile, letting an text file be read * or written line-by-line. The class provides transparent and automatic * EOL-style handling. * * Note that it is not possible to seek in a CTextFile, only sequential * reading or writing is possible. Also note that the maximum length of a * line is fixed (see CTextFile::GetNextLine), however this shouldn't be * a problem, given the uses of this class. */ class CTextFile { public: // Open modes. Note that these are mutually exclusive! enum EOpenMode { //! Opens the file for reading, if it exists. read, //! Opens the file for writing, overwriting old contents. write }; /* Constructor. */ CTextFile(); /** Destructor. Closes the file if still open. */ ~CTextFile(); /** Opens the specified file, returning true on success. */ //\{ bool Open(const wxString& path, EOpenMode mode); bool Open(const CPath& path, EOpenMode mode); //\} /** Returns true if the file is opened. */ bool IsOpened() const; /** Returns true if GetNextLine has reached the end of the file. */ bool Eof() const; /** Closes the file, returning true on success. */ bool Close(); /** * Returns the next line of a readable file. * * @param conv The converter used to convert from multibyte to widechar. * * Note that GetNextLine will return an empty string if the file has reached * EOF, or if the file is closed, or not readable. However, empty lines in * the file will also be returned unless otherwise specified, so this cannot be used to test for EOF. * Instead, use the function Eof(). **/ wxString GetNextLine(EReadTextFile flags = txtReadAll, const wxMBConv& conv = wxConvLibc, bool* result = NULL); /** * Writes the line to a writable file, returning true on success. * * @param conv The converter used to convert from widechar to multibyte. */ bool WriteLine(const wxString& line, const wxMBConv& conv = wxConvLibc); /** Reads and returns the contents of a text-file, using the specifed criteria and converter. */ wxArrayString ReadLines(EReadTextFile flags = txtReadDefault, const wxMBConv& conv = wxConvLibc); /** Writes the lines to the file, using the given converter, returning true if no errors occured. */ bool WriteLines(const wxArrayString& lines, const wxMBConv& conv = wxConvLibc); private: //! The actual file object. wxFFile m_file; //! The mode in with which the file was opened. EOpenMode m_mode; }; #endif /* TEXTFILE_H */ amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/StringFunctions.cpp0000644000175000017500000001420012050266603024400 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "StringFunctions.h" #include // Needed for wxFileName #include // Needed for wxURI #include // Needed for std::strlen() // Implementation of the non-inlines // // Conversion of wxString so it can be used by printf() in a console // On some platforms (Windows) the console allows only "plain" characters, // so try to convert as much as possible and replace the others with '?'. // On other platforms (some Linux) wxConvLocal silently converts to UTF8 // so the console can show even Chinese chars. // Unicode2CharBuf unicode2char(const wxChar* s) { // First try the straight way. Unicode2CharBuf buf1(wxConvLocal.cWX2MB(s)); if ((const char *) buf1) { return buf1; } // Failed. Try to convert as much as possible. size_t len = wxStrlen(s); size_t maxlen = len * 4; // Allow for an encoding of up to 4 byte per char. wxCharBuffer buf(maxlen + 1); // This is wasteful, but the string is used temporary anyway. char * data = buf.data(); for (size_t i = 0, pos = 0; i < len; i++) { size_t len_char = wxConvLocal.FromWChar(data + pos, maxlen - pos, s + i, 1); if (len_char != wxCONV_FAILED) { pos += len_char - 1; } else if (pos < maxlen) { data[pos++] = '?'; data[pos] = 0; } } return buf; } static byte base16Chars[17] = "0123456789ABCDEF"; wxString URLEncode(const wxString& sIn) { wxString sOut; unsigned char curChar; for ( unsigned int i = 0; i < sIn.Length(); ++i ) { curChar = sIn.GetChar( i ); if ( isalnum( curChar ) ) { sOut += curChar; } else if( isspace ( curChar ) ) { sOut += wxT("+"); } else { sOut += wxT("%"); sOut += base16Chars[ curChar >> 4]; sOut += base16Chars[ curChar & 0xf]; } } return sOut; } wxChar HexToDec( const wxString& hex ) { wxChar result = 0; wxString str = hex.Upper(); for ( size_t i = 0; i < str.Len(); ++i ) { result *= 16; wxChar cur = str.GetChar(i); if ( isdigit( cur ) ) { result += cur - wxT('0'); } else if ( cur >= wxT('A') && cur <= wxT('F') ) { result += cur - wxT('A') + 10; } else { return wxT('\0'); } } return result; } wxString UnescapeHTML(const wxString& str) { wxWritableCharBuffer buf = str.char_str(wxConvUTF8); // Work around wxWritableCharBuffer's operator[] not being writable char *buffer = (char *)buf; size_t len = std::strlen(buffer); size_t j = 0; for (size_t i = 0; i < len; ++i, ++j) { if (buffer[i] == '%' && (len > i + 2)) { wxChar unesc = HexToDec(str.Mid(i + 1, 2)); if (unesc) { i += 2; buffer[j] = (char)unesc; } else { // If conversion failed, then we just add the escape-code // and continue past it like nothing happened. buffer[j] = buffer[i]; } } else { buffer[j] = buffer[i]; } } buffer[j] = '\0'; // Try to interpret the result as UTF-8 wxString result(buffer, wxConvUTF8); if (len > 0 && result.length() == 0) { // Fall back to ISO-8859-1 result = wxString(buffer, wxConvISO8859_1); } return result; } wxString validateURI(const wxString& url) { wxURI uri(url); return uri.BuildURI(); } enum ECharType { ECTInteger, ECTText, ECTNone }; inline wxString GetNextField(const wxString& str, size_t& cookie) { // These are taken to seperate "fields" static const wxChar* s_delims = wxT("\t\n\x0b\x0c\r !\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~"); wxString field; ECharType curType = ECTNone; for (; cookie < str.Length(); ++cookie) { wxChar c = str[cookie]; if ((c >= wxT('0')) && (c <= wxT('9'))) { if (curType == ECTText) { break; } curType = ECTInteger; field += c; } else if (wxStrchr(s_delims, c)) { if (curType == ECTNone) { continue; } else { break; } } else { if (curType == ECTInteger) { break; } curType = ECTText; field += c; } } return field; } int FuzzyStrCmp(const wxString& a, const wxString& b) { size_t aCookie = 0, bCookie = 0; wxString aField, bField; do { aField = GetNextField(a, aCookie); bField = GetNextField(b, bCookie); if (aField.IsNumber() && bField.IsNumber()) { unsigned long aInteger = StrToULong(aField); unsigned long bInteger = StrToULong(bField); if (aInteger < bInteger) { return -1; } else if (aInteger > bInteger) { return 1; } } else if (aField < bField) { return -1; } else if (aField > bField) { return 1; } } while (!aField.IsEmpty() && !bField.IsEmpty()); return 0; } int FuzzyStrCaseCmp(const wxString& a, const wxString& b) { return FuzzyStrCmp(a.Lower(), b.Lower()); } CSimpleTokenizer::CSimpleTokenizer(const wxString& str, wxChar token) : m_string(str), m_delim(token), m_ptr(m_string.c_str()), m_count(0) { } wxString CSimpleTokenizer::next() { const wxChar* start = m_ptr; const wxChar* end = m_string.c_str() + m_string.Len() + 1; for (; m_ptr < end; ++m_ptr) { if (*m_ptr == m_delim) { m_count++; break; } } // Return the token return m_string.Mid(start - m_string.c_str(), m_ptr++ - start); } wxString CSimpleTokenizer::remaining() const { return m_string.Mid(m_ptr - m_string.c_str()); } size_t CSimpleTokenizer::tokenCount() const { return m_count; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/MuleDebug.cpp0000644000175000017500000003521612050266603023124 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2005-2011 Mikkel Schubert ( xaignar@users.sourceforge.net ) // Copyright (c) 2005-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include // Needed for std::abort() #ifdef HAVE_CONFIG_H # include "config.h" // Needed for HAVE_CXXABI and HAVE_EXECINFO #endif #include "MuleDebug.h" // Interface declaration #include "StringFunctions.h" // Needed for unicode2char #include "Format.h" // Needed for CFormat #ifdef HAVE_EXECINFO # include // ADUNANZA BEGIN // Backport aMule SVN # include // Needed for wxArrayString # ifndef HAVE_BFD # include // Needed for wxThread # endif // ADUNANZA END #endif #ifdef HAVE_CXXABI # include #endif // ADUNANZA BEGIN // Backport aMul SVN: removed #if 0 #include // Do_not_auto_remove (Old wx < 2.7) #include // Do_not_auto_remove (Old wx < 2.7) #endif // ADUNANZA END #if wxUSE_STACKWALKER && defined(__WXMSW__) #include // Do_not_auto_remove #elif defined(HAVE_BFD) #include // Do_not_auto_remove #include // Do_not_auto_remove #endif #include /** * This functions displays a verbose description of * any unhandled exceptions that occour and then * terminate the program by raising SIGABRT. */ void OnUnhandledException() { // Revert to the original exception handler, to avoid // infinate recursion, in case something goes wrong in // this function. std::set_terminate(std::abort); #ifdef HAVE_CXXABI std::type_info *t = __cxxabiv1::__cxa_current_exception_type(); FILE* output = stderr; #else FILE* output = stdout; bool t = true; #endif if (t) { int status = -1; char *dem = 0; #ifdef HAVE_CXXABI // Note that "name" is the mangled name. char const *name = t->name(); dem = __cxxabiv1::__cxa_demangle(name, 0, 0, &status); #else const char* name = "Unknown"; #endif fprintf(output, "\nTerminated after throwing an instance of '%s'\n", (status ? name : dem)); free(dem); try { throw; } catch (const std::exception& e) { fprintf(output, "\twhat(): %s\n", e.what()); } catch (const CMuleException& e) { fprintf(output, "\twhat(): %s\n", (const char*)unicode2char(e.what())); } catch (const wxString& e) { fprintf(output, "\twhat(): %s\n", (const char*)unicode2char(e)); } catch (...) { // Unable to retrieve cause of exception } fprintf(output, "\tbacktrace:\n%s\n", (const char*)unicode2char(get_backtrace(1))); } std::abort(); } void InstallMuleExceptionHandler() { std::set_terminate(OnUnhandledException); } // Make it 1 for getting the file path also #define TOO_VERBOSE_BACKTRACE 0 #if wxUSE_STACKWALKER && defined(__WXMSW__) // Derived class to define the actions to be done on frame print. // I was tempted to name it MuleSkyWalker class MuleStackWalker : public wxStackWalker { public: MuleStackWalker() {}; ~MuleStackWalker() {}; void OnStackFrame(const wxStackFrame& frame) { wxString btLine = CFormat(wxT("[%u] ")) % frame.GetLevel(); wxString filename = frame.GetName(); if (!filename.IsEmpty()) { btLine += filename + wxT(" (") + #if TOO_VERBOSE_BACKTRACE frame.GetModule() #else frame.GetModule().AfterLast(wxT('/')) #endif + wxT(")"); } else { btLine += CFormat(wxT("%p")) % frame.GetAddress(); } if (frame.HasSourceLocation()) { btLine += wxT(" at ") + #if TOO_VERBOSE_BACKTRACE frame.GetFileName() #else frame.GetFileName().AfterLast(wxT('/')) #endif + CFormat(wxT(":%u")) % frame.GetLine(); } else { btLine += wxT(" (Unknown file/line)"); } //! Contains the entire backtrace m_trace += btLine + wxT("\n"); } wxString m_trace; }; wxString get_backtrace(unsigned n) { MuleStackWalker walker; // Texas ranger? walker.Walk(n); // Skip this one and Walk() also! return walker.m_trace; } #elif defined(__LINUX__) #ifdef HAVE_BFD static bfd* s_abfd; static asymbol** s_symbol_list; static bool s_have_backtrace_symbols = false; static const char* s_file_name; static const char* s_function_name; static unsigned int s_line_number; static int s_found; /* * read all symbols in the executable into an array * and return the pointer to the array in symbol_list. * Also return the number of actual symbols read * If there's any error, return -1 */ static int get_backtrace_symbols(bfd *abfd, asymbol ***symbol_list_ptr) { int vectorsize = bfd_get_symtab_upper_bound(abfd); if (vectorsize < 0) { fprintf (stderr, "Error while getting vector size for backtrace symbols : %s", bfd_errmsg(bfd_get_error())); return -1; } if (vectorsize == 0) { fprintf (stderr, "Error while getting backtrace symbols : No symbols (%s)", bfd_errmsg(bfd_get_error())); return -1; } *symbol_list_ptr = (asymbol**)malloc(vectorsize); if (*symbol_list_ptr == NULL) { fprintf (stderr, "Error while getting backtrace symbols : Cannot allocate memory"); return -1; } vectorsize = bfd_canonicalize_symtab(abfd, *symbol_list_ptr); if (vectorsize < 0) { fprintf(stderr, "Error while getting symbol table : %s", bfd_errmsg(bfd_get_error())); return -1; } return vectorsize; } /* * print file, line and function information for address * The info is actually set into global variables. This * function is called from the iterator bfd_map_over_sections * */ void init_backtrace_info() { bfd_init(); s_abfd = bfd_openr("/proc/self/exe", NULL); if (s_abfd == NULL) { fprintf(stderr, "Error while opening file for backtrace symbols : %s", bfd_errmsg(bfd_get_error())); return; } if (!(bfd_check_format_matches(s_abfd, bfd_object, NULL))) { fprintf (stderr, "Error while init. backtrace symbols : %s", bfd_errmsg (bfd_get_error ())); bfd_close(s_abfd); return; } s_have_backtrace_symbols = (get_backtrace_symbols(s_abfd, &s_symbol_list) > 0); } void get_file_line_info(bfd *abfd, asection *section, void* _address) { wxASSERT(s_symbol_list); if (s_found) { return; } if ((section->flags & SEC_ALLOC) == 0) { return; } bfd_vma vma = bfd_get_section_vma(abfd, section); unsigned long address = (unsigned long)_address; if (address < vma) { return; } bfd_size_type size = bfd_section_size(abfd, section); if (address > (vma + size)) { return; } s_found = bfd_find_nearest_line(abfd, section, s_symbol_list, address - vma, &s_file_name, &s_function_name, &s_line_number); } #endif // HAVE_BFD wxString demangle(const wxString& function) { #ifdef HAVE_CXXABI wxString result; if (function.Mid(0,2) == wxT("_Z")) { int status; char *demangled = abi::__cxa_demangle(function.mb_str(), NULL, NULL, &status); if (!status) { result = wxConvCurrent->cMB2WX(demangled); } if (demangled) { free(demangled); } } return result; #else return wxEmptyString; #endif } // Print a stack backtrace if available wxString get_backtrace(unsigned n) { #ifdef HAVE_EXECINFO // (stkn) create backtrace void *bt_array[100]; // 100 should be enough ?!? char **bt_strings; int num_entries; if ((num_entries = backtrace(bt_array, 100)) < 0) { fprintf(stderr, "* Could not generate backtrace\n"); return wxEmptyString; } if ((bt_strings = backtrace_symbols(bt_array, num_entries)) == NULL) { fprintf(stderr, "* Could not get symbol names for backtrace\n"); return wxEmptyString; } std::vector libname(num_entries); std::vector funcname(num_entries); std::vector address(num_entries); wxString AllAddresses; for (int i = 0; i < num_entries; ++i) { wxString wxBtString = wxConvCurrent->cMB2WX(bt_strings[i]); int posLPar = wxBtString.Find(wxT('(')); int posRPar = wxBtString.Find(wxT(')')); int posLBra = wxBtString.Find(wxT('[')); int posRBra = wxBtString.Find(wxT(']')); bool hasFunction = true; if (posLPar == -1 || posRPar == -1) { if (posLBra == -1 || posRBra == -1) { /* It is important to have exactly num_entries * addresses in AllAddresses */ AllAddresses += wxT("0x0000000 "); continue; } posLPar = posLBra; hasFunction = false; } /* Library name */ int len = posLPar; libname[i] = wxBtString.Mid(0, len); /* Function name */ if (hasFunction) { int posPlus = wxBtString.Find(wxT('+'), true); if (posPlus == -1) posPlus = posRPar; len = posPlus - posLPar - 1; funcname[i] = wxBtString.Mid(posLPar + 1, len); wxString demangled = demangle(funcname[i]); if (!demangled.IsEmpty()) { funcname[i] = demangled; } } /* Address */ if ( posLBra == -1 || posRBra == -1) { address[i] = wxT("0x0000000"); } else { len = posRBra - posLBra - 1; address[i] = wxBtString.Mid(posLBra + 1, len); AllAddresses += address[i] + wxT(" "); } } free(bt_strings); /* Get line numbers from addresses */ wxArrayString out; bool hasLineNumberInfo = false; #ifdef HAVE_BFD if (!s_have_backtrace_symbols) { init_backtrace_info(); wxASSERT(s_have_backtrace_symbols); } for (int i = 0; i < num_entries; ++i) { s_file_name = NULL; s_function_name = NULL; s_line_number = 0; s_found = false ; unsigned long addr; address[i].ToULong(&addr,0); // As it's "0x" prepended, wx will read it as base 16. Hopefully. bfd_map_over_sections(s_abfd, get_file_line_info, (void*)addr); if (s_found) { wxString function = wxConvCurrent->cMB2WX(s_function_name); wxString demangled = demangle(function); if (!demangled.IsEmpty()) { function = demangled; funcname[i] = demangled; } out.Insert(wxConvCurrent->cMB2WX(s_function_name),i*2); out.Insert(CFormat(wxT("%s:%u")) % wxString(wxConvCurrent->cMB2WX(s_file_name)) % s_line_number, i*2+1); } else { out.Insert(wxT("??"),i*2); out.Insert(wxT("??"),i*2+1); } } hasLineNumberInfo = true; #else /* !HAVE_BFD */ if (wxThread::IsMain()) { wxString command; command << wxT("addr2line -C -f -s -e /proc/") << getpid() << wxT("/exe ") << AllAddresses; // The output of the command is this wxArrayString, in which // the even elements are the function names, and the odd elements // are the line numbers. hasLineNumberInfo = wxExecute(command, out) != -1; } #endif /* HAVE_BFD / !HAVE_BFD */ wxString trace; // Remove 'n+1' first entries (+1 because of this function) for (int i = n+1; i < num_entries; ++i) { /* If we have no function name, use the result from addr2line */ if (funcname[i].IsEmpty()) { if (hasLineNumberInfo) { funcname[i] = out[2*i]; } else { funcname[i] = wxT("??"); } } wxString btLine; btLine << wxT("[") << i << wxT("] ") << funcname[i] << wxT(" in "); /* If addr2line did not find a line number, use bt_string */ if (!hasLineNumberInfo || out[2*i+1].Mid(0,2) == wxT("??")) { btLine += libname[i] + wxT("[") + address[i] + wxT("]"); } else if (hasLineNumberInfo) { #if TOO_VERBOSE_BACKTRACE btLine += out[2*i+1]; #else btLine += out[2*i+1].AfterLast(wxT('/')); #endif } else { btLine += libname[i]; } trace += btLine + wxT("\n"); } return trace; #else /* !HAVE_EXECINFO */ fprintf(stderr, "--== cannot generate backtrace ==--\n\n"); return wxEmptyString; #endif /* HAVE_EXECINFO */ } #elif defined( __APPLE__ ) // According to sources, parts of this code originate at http://www.tlug.org.za/wiki/index.php/Obtaining_a_stack_trace_in_C_upon_SIGSEGV // which doesn't exist anymore. // Other code (stack frame list and demangle related) has been modified from code with license: // Copyright 2007 Edd Dawson. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include class stack_frame { public: stack_frame(const void * f_instruction, const std::string& f_function) : frame_instruction(f_instruction), frame_function(f_function) {}; const void *instruction() const { return frame_instruction; } const std::string& function() const { return frame_function; } private: const void * frame_instruction; const std::string frame_function; }; std::string demangle(const char *name) { int status = 0; char *d = 0; std::string ret = name; try { if ((d = abi::__cxa_demangle(name, 0, 0, &status))) { ret = d; } } catch(...) { } std::free(d); return ret; } void fill_frames(std::list &frames) { try { void **fp = (void **) __builtin_frame_address (1); void *saved_pc = NULL; // First frame is skipped while (fp != NULL) { fp = (void**)(*fp); if (*fp == NULL) { break; } #if defined(__i386__) saved_pc = fp[1]; #elif defined(__ppc__) saved_pc = *(fp + 2); #else // ? saved_pc = *(fp + 2); #endif if (saved_pc) { Dl_info info; if (dladdr(saved_pc, &info)) { frames.push_back(stack_frame(saved_pc, demangle(info.dli_sname) + " in " + info.dli_fname)); } } } } catch (...) { // Nothing to be done here, just leave. } } wxString get_backtrace(unsigned n) { std::list frames; fill_frames(frames); std::ostringstream backtrace; std::list::iterator it = frames.begin(); int count = 0; while (it != frames.end()) { if (count >= n) { backtrace << (*it).instruction() << " : " << (*it).function() << std::endl; ++it; } ++count; } return wxString(backtrace.str().c_str(), wxConvUTF8); } #else /* ! __APPLE__ */ wxString get_backtrace(unsigned WXUNUSED(n)) { // ADUNANZA BEGIN // Backport #if 0 fprintf(stderr, "--== no BACKTRACE for your platform ==--\n\n"); return wxEmptyString; #else return wxT("--== no BACKTRACE for your platform ==--\n\n"); #endif // ADUNANZA END } #endif /* !__LINUX__ */ void print_backtrace(unsigned n) { wxString trace = get_backtrace(n); // This is because the string is ansi anyway, and the conv classes are very slow fprintf(stderr, "%s\n", (const char*)unicode2char(trace.c_str())); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/MD5Sum.cpp0000644000175000017500000002642412050266603022326 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "StringFunctions.h" #include "Format.h" // Needed for CFormat #include "MD5Sum.h" // Interface declarations. typedef struct { uint32_t state[4]; uint32_t count[2]; unsigned char buffer[64]; } MD5_CTX; void MD5Init (MD5_CTX *); void MD5Update (MD5_CTX *, const unsigned char *, size_t); void MD5Final (unsigned char [16], MD5_CTX *); MD5Sum::MD5Sum() { } MD5Sum::MD5Sum(const wxString& sSource) { Calculate(sSource); } MD5Sum::MD5Sum(const uint8* buffer, size_t len) { Calculate(buffer, len); } // ADUNANZA BEGIN // Backport da aMule SVN #if 0 wxString MD5Sum::Calculate(const wxString& sSource) { // Nothing we can do against this unicode2char return Calculate( (const uint8*)(const char*)unicode2char(sSource), sSource.Length()); } wxString MD5Sum::Calculate(const uint8* buffer, size_t len) { MD5_CTX context; unsigned char digest[16]; MD5Init (&context); MD5Update (&context, buffer, len); MD5Final (digest, &context); m_sHash.Clear(); for (int i = 0; i < 16; ++i) { wxString sT; sT = CFormat(wxT("%02x")) % digest[i]; m_sHash += sT; } memcpy(m_rawhash, digest, 16); return m_sHash; } wxString MD5Sum::GetHash() { return m_sHash; } #else // ADUNANZA void MD5Sum::Calculate(const wxString& sSource) { // Nothing we can do against this unicode2char Calculate( (const uint8*)(const char*)unicode2char(sSource), sSource.Length()); } void MD5Sum::Calculate(const uint8* buffer, size_t len) { MD5_CTX context; unsigned char digest[16]; MD5Init (&context); MD5Update (&context, buffer, len); MD5Final (digest, &context); memcpy(m_rawhash, digest, 16); m_sHash.Clear(); } wxString MD5Sum::GetHash() { if (m_sHash.empty()) { // That's still far from optimal, but called much less often. for (int i = 0; i < 16; ++i) { wxString sT; sT = CFormat(wxT("%02x")) % m_rawhash[i]; m_sHash += sT; } } return m_sHash; } #endif // ADUNANZA // ADUNANZA END #define S11 7 #define S12 12 #define S13 17 #define S14 22 #define S21 5 #define S22 9 #define S23 14 #define S24 20 #define S31 4 #define S32 11 #define S33 16 #define S34 23 #define S41 6 #define S42 10 #define S43 15 #define S44 21 static void MD5Transform (uint32_t [4], const unsigned char [64]); static void Encode (unsigned char *, uint32_t *, size_t); static void Decode (uint32_t *, const unsigned char *, size_t); static const unsigned char PADDING[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* F, G, H and I are basic MD5 functions. */ #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) #define G(x, y, z) (((x) & (z)) | ((y) & (~z))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~z))) /* ROTATE_LEFT rotates x left n bits. 15-April-2003 Sony: use _MSC_VER intrinsic to save some cycles */ #ifdef _MSC_VER #pragma intrinsic(_rotl) #define ROTATE_LEFT(x, n) _rotl((x), (n)) #else #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) #endif /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. Rotation is separate from addition to prevent recomputation. */ /* Defines must be on one line to work with GCC-2.95.3 */ #define FF(a, b, c, d, x, s, ac) { (a) += F ((b), (c), (d)) + (x) + (uint32_t)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); } #define GG(a, b, c, d, x, s, ac) { (a) += G ((b), (c), (d)) + (x) + (uint32_t)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); } #define HH(a, b, c, d, x, s, ac) { (a) += H ((b), (c), (d)) + (x) + (uint32_t)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); } #define II(a, b, c, d, x, s, ac) { (a) += I ((b), (c), (d)) + (x) + (uint32_t)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); } /* MD5 initialization. Begins an MD5 operation, writing a new context. */ void MD5Init (MD5_CTX *context) { context->count[0] = context->count[1] = 0; /* Load magic initialization constants. */ context->state[0] = 0x67452301; context->state[1] = 0xefcdab89; context->state[2] = 0x98badcfe; context->state[3] = 0x10325476; } /* MD5 block update operation. Continues an MD5 message-digest operation, processing another message block, and updating the context. */ void MD5Update (MD5_CTX *context, const unsigned char *input, size_t inputLen) { off_t index; size_t i, partLen; /* Compute number of bytes mod 64 */ index = (context->count[0] >> 3) & 0x3F; /* Update number of bits */ if ((context->count[0] += ((uint32_t)inputLen << 3)) < ((uint32_t)inputLen << 3)) { context->count[1]++; } context->count[1] += ((uint32_t)inputLen >> 29); partLen = 64 - index; /* Transform as many times as possible. */ if (inputLen >= partLen) { memcpy((unsigned char*)&context->buffer[index], (unsigned char*)input, partLen); MD5Transform (context->state, context->buffer); for (i = partLen; i + 63 < inputLen; i += 64) { MD5Transform (context->state, &input[i]); } index = 0; } else { i = 0; } /* Buffer remaining input */ memcpy((unsigned char*)&context->buffer[index], (unsigned char*)&input[i], inputLen-i); } /* MD5 finalization. Ends an MD5 message-digest operation, writing the * the message digest and zeroizing the context. */ void MD5Final (unsigned char digest[16], MD5_CTX *context) { unsigned char bits[8]; off_t index; size_t padLen; /* Save number of bits */ Encode (bits, context->count, 8); /* Pad out to 56 mod 64. */ index = (context->count[0] >> 3) & 0x3f; padLen = (index < 56) ? (56 - index) : (120 - index); MD5Update (context, PADDING, padLen); /* Append length (before padding) */ MD5Update (context, bits, 8); /* Store state in digest */ Encode (digest, context->state, 16); /* Zeroize sensitive information.*/ memset((unsigned char*)context, 0, sizeof (*context)); } /* MD5 basic transformation. Transforms state based on block. */ static void MD5Transform (uint32_t state[4], const unsigned char block[64]) { uint32_t a = state[0], b = state[1], c = state[2], d = state[3], x[16]; Decode (x, block, 64); /* Round 1 */ FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ /* Round 2 */ GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ /* Round 3 */ HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ /* Round 4 */ II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ state[0] += a; state[1] += b; state[2] += c; state[3] += d; /* Zeroize sensitive information. */ memset((unsigned char*)x, 0, sizeof (x)); } /* Encodes input (uint32_t) into output (unsigned char). Assumes len is a multiple of 4. */ static void Encode (unsigned char *output, uint32_t *input, size_t len) { size_t i, j; for (i = 0, j = 0; j < len; i++, j += 4) { output[j] = (unsigned char)(input[i] & 0xff); output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); } } /* Decodes input (unsigned char) into output (uint32_t). Assumes len is a multiple of 4. */ static void Decode (uint32_t *output, const unsigned char *input, size_t len) { wxASSERT( !(len & 3) ); size_t i, j; for (i = 0, j = 0; j < len; i++, j += 4) { output[i] = ((uint32_t)input[j]) | (((uint32_t)input[j+1]) << 8) | (((uint32_t)input[j+2]) << 16) | (((uint32_t)input[j+3]) << 24); } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/Makefile.am0000644000175000017500000000107012050266603022572 0ustar l3onl3onAM_CPPFLAGS = $(MULECPPFLAGS) $(BFD_CPPFLAGS) $(WXBASE_CPPFLAGS) AM_CXXFLAGS = $(MULECXXFLAGS) $(WX_CFLAGS_ONLY) $(WX_CXXFLAGS_ONLY) # Sources noinst_LIBRARIES = \ libmulecommon.a # Common to external apps and core/gui/monolithic libmulecommon_a_SOURCES = \ FileFunctions.cpp \ Format.cpp \ MD5Sum.cpp \ MuleDebug.cpp \ Path.cpp \ strerror_r.c \ StringFunctions.cpp \ TextFile.cpp noinst_HEADERS = \ FileFunctions.h \ Format.h \ MD5Sum.h \ MuleDebug.h \ Path.h \ strerror_r.h \ StringFunctions.h \ TextFile.h MAINTAINERCLEANFILES = Makefile.in amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/common/MD5Sum.h0000644000175000017500000000312012050266603021757 0ustar l3onl3on// This file is part of the aMule Project. /* Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) Copyright (c) 1991-2011, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ #ifndef MD5SUM_H #define MD5SUM_H class MD5Sum { public: MD5Sum(); MD5Sum(const wxString& sSource); MD5Sum(const uint8* buffer, size_t len); // ADUNANZA BEGIN // Backport da aMule SVN #if 0 wxString Calculate(const wxString& sSource); wxString Calculate(const uint8* buffer, size_t len); #else void Calculate(const wxString& sSource); void Calculate(const uint8* buffer, size_t len); #endif // ADUNANZA END wxString GetHash(); const uint8* GetRawHash() const { return m_rawhash; } private: wxString m_sHash; uint8 m_rawhash[16]; }; #endif // MD5SUM_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/libs/Makefile.am0000644000175000017500000000020412050266603021300 0ustar l3onl3onSUBDIRS = if COMPILE_LIB_COMMON SUBDIRS += common endif if COMPILE_LIB_EC SUBDIRS += ec endif MAINTAINERCLEANFILES = Makefile.in amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ED2KLinkParser.cpp0000644000175000017500000003230212050266603021503 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2003-2011 Alo Sarv ( madcat_@users.sourceforge.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // const int versionMajor = 1; const int versionMinor = 5; const int versionRevision = 1; #include #include #include #include #ifdef __APPLE__ #include #elif defined(_WIN32) #include #include #include #endif #include "FileLock.h" #include "MagnetURI.h" #include "MuleCollection.h" // ADUNANZA BEGIN #include "AdunanzA.h" // per AMULE_ADUNANZA_DIR // ADUNANZA END using std::string; string GetLinksFilePath(const string& configDir) { if (!configDir.empty()) { #ifdef _WIN32 char buffer[MAX_PATH + 1]; configDir.copy(buffer, MAX_PATH); if (PathAppendA(buffer, "ED2KLinks")) { string strDir; strDir.assign(buffer); return strDir; } #else string strDir = configDir; if (strDir.at(strDir.length() - 1) != '/') { strDir += '/'; } return strDir + "ED2KLinks"; #endif } #ifdef __APPLE__ std::string strDir; FSRef fsRef; if (FSFindFolder(kUserDomain, kApplicationSupportFolderType, kCreateFolder, &fsRef) == noErr) { CFURLRef urlRef = CFURLCreateFromFSRef(NULL, &fsRef); if (urlRef != NULL) { UInt8 buffer[PATH_MAX + 1]; if (CFURLGetFileSystemRepresentation(urlRef, true, buffer, sizeof(buffer))) { strDir.assign((char*) buffer); } CFRelease(urlRef) ; } } // ADUNANZA BEGIN #if 0 return strDir + "/aMule/ED2KLinks"; #else return strDir + "/" + AMULE_ADUNANZA_DIR + "/ED2KLinks"; #endif // ADUNANZA END #elif defined(_WIN32) std::string strDir; LPITEMIDLIST pidl; char buffer[MAX_PATH + 1]; HRESULT hr = SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &pidl); if (SUCCEEDED(hr)) { if (SHGetPathFromIDListA(pidl, buffer)) { // ADUNANZA BEGIN #if 0 if (PathAppendA(buffer, "aMule\\ED2KLinks")) { #else std::string mytmp = std::string(AMULE_ADUNANZA_DIR) + std::string("\\ED2KLinks"); if (PathAppendA(buffer, mytmp.c_str())) { #endif // ADUNANZA END strDir.assign(buffer); } } } if (pidl) { LPMALLOC pMalloc; SHGetMalloc(&pMalloc); if (pMalloc) { pMalloc->Free(pidl); pMalloc->Release(); } } return strDir; #else // ADUNANZA BEGIN #if 0 return string( getenv("HOME") ) + "/.aMule/ED2KLinks"; #else return string( getenv("HOME") ) + "/." + AMULE_ADUNANZA_DIR + "/ED2KLinks"; #endif // ADUNANZA END #endif } /** * Converts a hexadecimal number to a char. * * @param hex The hex-number, must be at most 2 digits long. * @return The resulting char or \0 if conversion failed. */ char HexToDec( const string& hex ) { char result = 0; for ( size_t i = 0; i < hex.length(); ++i ) { char cur = toupper( hex.at(i) ); result *= 16; if ( isdigit( cur ) ) { result += cur - '0'; } else if ( cur >= 'A' && cur <= 'F' ) { result += cur - 'A' + 10; } else { return '\0'; } } return result; } /** * This function converts all valid HTML escape-codes to their corresponding chars. * * @param str The string to unescape. * @return The unescaped version of the input string. */ string Unescape( const string& str ) { string result; result.reserve( str.length() ); for ( size_t i = 0; i < str.length(); ++i ) { if ( str.at(i) == '%' && ( i + 2 < str.length() ) ) { char unesc = HexToDec( str.substr( i + 1, 2 ) ); if ( unesc ) { i += 2; result += unesc; } else { // If conversion failed, then we just add the escape-code // and continue past it like nothing happened. result += str.at(i); } } else { result += str.at(i); } } return result; } /** * Returns the string with whitespace stripped from both ends. */ string strip( const string& str ) { int first = 0; int last = str.length() - 1; // A simple but no very optimized way to narrow down the // usable text within the string. while ( first <= last ) { if ( isspace( str.at(first) ) ) { first++; } else if ( isspace( str.at(last) ) ) { last--; } else { break; } }; return str.substr( first, 1 + last - first ); } /** * Returns true if the string is a valid number. */ bool isNumber( const string& str ) { for ( size_t i = 0; i < str.length(); i++ ) { if ( !isdigit( str.at(i) ) ) { return false; } } return str.length() > 0; } /** * Returns true if the string is a valid Base16 representation of a MD4 Hash. */ bool isMD4Hash( const string& str ) { for ( size_t i = 0; i < str.length(); i++ ) { const char c = toupper( str.at(i) ); if ( !isdigit( c ) && ( c < 'A' || c > 'F' ) ) { return false; } } return str.length() == 32; } /** * Returns a description of the current version of "ed2k". */ string getVersion() { std::ostringstream v; v << "aMule ED2k link parser v" << versionMajor << "." << versionMinor << "." << versionRevision; return v.str(); } /** * Helper-function for printing link-errors. */ void badLink( const string& type, const string& err, const string& uri ) { std::cout << "Invalid " << type << "-link, " + err << ":\n" << "\t" << uri << std::endl; } /** * Writes a string to the ED2KLinks file. * * If errors are detected, it will terminate the program. */ void writeLink( const string& uri, const string& config_dir ) { // Attempt to lock the ED2KLinks file static CFileLock lock(GetLinksFilePath(config_dir)); static std::ofstream file; if (!file.is_open()) { string path = GetLinksFilePath(config_dir); file.open( path.c_str(), std::ofstream::out | std::ofstream::app ); if (!file.is_open()) { std::cout << "ERROR! Failed to open " << path << " for writing!" << std::endl; exit(1); } } file << uri << std::endl; std::cout << "Link successfully queued." << std::endl; } /** * Writes the the specified URI to the ED2KLinks file if it is a valid file-link. * * @param uri The URI to check. * @return True if the URI was written, false otherwise. */ bool checkFileLink( const string& uri ) { if ( uri.substr( 0, 13 ) == "ed2k://|file|" ) { size_t base_off = 12; size_t name_off = uri.find( '|', base_off + 1 ); size_t size_off = uri.find( '|', name_off + 1 ); size_t hash_off = uri.find( '|', size_off + 1 ); bool valid = true; valid &= ( base_off < name_off ); valid &= ( name_off < size_off ); valid &= ( size_off < hash_off ); valid &= ( hash_off != string::npos ); if ( !valid ) { badLink( "file", "invalid link format", uri ); return false; } string name = uri.substr( base_off + 1, name_off - base_off - 1 ); string size = uri.substr( name_off + 1, size_off - name_off - 1 ); string hash = uri.substr( size_off + 1, hash_off - size_off - 1 ); if ( name.empty() ) { badLink( "file", "no name specified", uri ); return false; } if ( !isNumber( size ) ) { badLink( "file", "invalid size", uri ); return false; } if ( !isMD4Hash( hash ) ) { badLink( "file", "invalid MD4 hash", uri ); return false; } return true; } return false; } /** * Writes the the specified URI to the ED2KLinks file if it is a valid server-link. * * @param uri The URI to check. * @return True if the URI was written, false otherwise. */ bool checkServerLink( const string& uri ) { if ( uri.substr( 0, 15 ) == "ed2k://|server|" ) { size_t base_off = 14; size_t host_off = uri.find( '|', base_off + 1 ); size_t port_off = uri.find( '|', host_off + 1 ); bool valid = true; valid &= ( base_off < host_off ); valid &= ( host_off < port_off ); valid &= ( port_off != string::npos ); if ( !valid || uri.at( port_off + 1 ) != '/' ) { badLink( "server", "invalid link format", uri ); return false; } string host = uri.substr( base_off + 1, host_off - base_off - 1 ); string port = uri.substr( host_off + 1, port_off - host_off - 1 ); if ( host.empty() ) { badLink( "server", "no hostname specified", uri ); return false; } if ( !isNumber( port ) ) { badLink( "server", "invalid port", uri ); return false; } return true; } return false; } /** * Writes the the specified URI to the ED2KLinks file if it is a valid serverlist-link. * * @param uri The URI to check. * @return True if the URI was written, false otherwise. */ bool checkServerListLink( const string& uri ) { if ( uri.substr( 0, 19 ) == "ed2k://|serverlist|" ) { size_t base_off = 19; size_t path_off = uri.find( '|', base_off + 1 ); bool valid = true; valid &= ( base_off < path_off ); valid &= ( path_off != string::npos ); if ( !valid ) { badLink( "serverlist", "invalid link format", uri ); return false; } string path = uri.substr( base_off + 1, path_off - base_off - 1 ); if ( path.empty() ) { badLink( "serverlist", "no hostname specified", uri ); return false; } return true; } return false; } int main(int argc, char *argv[]) { bool errors = false; string config_path; string category = ""; for ( int i = 1; i < argc; i++ ) { string arg = strip( Unescape( string( argv[i] ) ) ); if ( arg.compare(0, 7, "magnet:" ) == 0 ) { string ed2k = CMagnetED2KConverter(arg); if ( ed2k.empty() ) { std::cerr << "Cannot convert magnet URI to ed2k:\n\t" << arg << std::endl; errors = true; continue; } else { arg = ed2k; } } if ( arg.substr( 0, 8 ) == "ed2k://|" ) { // Ensure the URI is valid if ( arg.at( arg.length() - 1 ) != '/' ) { arg += '/'; } string type = arg.substr( 8, arg.find( '|', 9 ) - 8 ); if ( (type == "file") && checkFileLink( arg ) ) { arg += category; writeLink( arg, config_path ); } else if ( (type == "server") && checkServerLink( arg ) ) { writeLink( arg, config_path ); } else if ( (type == "serverlist") && checkServerListLink( arg ) ) { writeLink( arg, config_path ); } else { std::cout << "Unknown or invalid link-type:\n\t" << arg << std::endl; errors = true; } } else if (arg == "-c" || arg == "--config-dir") { if (i < argc - 1) { config_path = argv[++i]; } else { std::cerr << "Missing mandatory argument for " << arg << std::endl; errors = true; } } else if (arg.substr(0, 2) == "-c") { config_path = arg.substr(2); } else if (arg.substr(0, 13) == "--config-dir=") { config_path = arg.substr(13); } else if (arg == "-h" || arg == "--help") { std::cout << getVersion() << "\n\n" << "Usage:\n" << " --help, -h Prints this help.\n" << " --config-dir, -c Specifies the aMule configuration directory.\n" << " --version, -v Displays version info.\n\n" << " --category, -t Add Link to category number.\n" << " magnet:? Causes the file to be queued for download.\n" << " ed2k://|file| Causes the file to be queued for download.\n" << " ed2k://|server| Causes the server to be listed or updated.\n" << " ed2k://|serverlist| Causes aMule to update the current serverlist.\n\n" << " --list, -l Show all links of an emulecollection\n" << " --emulecollection, -e Loads all links of an emulecollection\n\n" << "*** NOTE: Option order is important! ***\n" << std::endl; } else if (arg == "-v" || arg == "--version") { std::cout << getVersion() << std::endl; } else if (arg == "-t" || arg == "--category") { if (i < argc - 1) { if ((category == "" ) && (0 != atoi(argv[++i]))) { category = ':'; category += argv[i]; } } else { std::cerr << "Missing mandatory argument for " << arg << std::endl; errors = true; } } else if (arg == "-e" || arg == "--emulecollection" || arg == "-l" || arg == "--list") { bool listOnly = (arg == "-l" || arg == "--list"); if (i < argc - 1) { CMuleCollection my_collection; if (my_collection.Open( /* emulecollection file */ argv[++i] )) { for(size_t e = 0;e < my_collection.GetFileCount();e++) if (listOnly) std::cout << my_collection.GetEd2kLink(e) << std::endl; else writeLink( my_collection.GetEd2kLink(e), config_path ); } else { std::cerr << "Invalid emulecollection file: " << argv[i] << std::endl; errors = true; } } else { std::cerr << "Missing mandatory argument for " << arg << std::endl; errors = true; } } else { std::cerr << "Bad parameter value:\n\t" << arg << "\n" << std::endl; errors = true; } } return ( errors ? 1 : 0 ); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/BarShader.cpp0000644000175000017500000001303412050266603020657 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include #include "BarShader.h" // Interface declarations. #include // Needed for std::memcpy const double Pi = 3.14159265358979323846264338328; #define HALF(X) (((X) + 1) / 2) #define DEFAULT_DEPTH 10 CBarShader::CBarShader(unsigned height, unsigned width) : m_Width( width ), m_Height( height ), m_FileSize( 1 ), m_Modifiers( NULL ), m_used3dlevel( DEFAULT_DEPTH ), m_Content(width, 0) { } CBarShader::~CBarShader() { if ( m_Modifiers ) { delete[] m_Modifiers; } } void CBarShader::SetHeight(unsigned height) { if( m_Height != height ) { m_Height = height; // Reset the modifers if ( m_Modifiers ) { delete[] m_Modifiers; m_Modifiers = NULL; } } } void CBarShader::SetWidth(int width) { if (width > 0) { m_Width = width; Fill(CMuleColour(0,0,0)); } } void CBarShader::Set3dDepth(unsigned depth) { if ( depth < 1 ) { depth = 1; } else if ( depth > 5 ) { depth = 5; } if ( m_used3dlevel != depth ) { m_used3dlevel = depth; // Reset the modifers if ( m_Modifiers ) { delete[] m_Modifiers; m_Modifiers = NULL; } } } void CBarShader::BuildModifiers() { wxASSERT(m_used3dlevel < 7); if ( m_Modifiers ) { delete[] m_Modifiers; } unsigned depth = (7 - m_used3dlevel); unsigned count = HALF(m_Height); double piOverDepth = Pi/depth; double base = piOverDepth * ((depth / 2.0) - 1); double increment = piOverDepth / (count - 1); m_Modifiers = new double[count]; for (unsigned i = 0; i < count; i++) m_Modifiers[i] = (double)(sin(base + i * increment)); } void CBarShader::FillRange(uint64 start, uint64 end, const CMuleColour& colour) { wxASSERT(m_FileSize > 0); if (start >= end || start >= m_FileSize) { return; } // precision for small files: end must be increased by one // think of each byte as a visible block, then start points to // the beginning of its block, but end points to the END of its block end++; if (end > m_FileSize) { end = m_FileSize; } unsigned firstPixel = start * m_Width / m_FileSize; unsigned lastPixel = end * m_Width / m_FileSize; if (lastPixel == m_Width) { lastPixel--; } double f_Width = m_Width; // calculate how much of this pixels is to be covered with the fill double firstCovered = firstPixel + 1 - start * f_Width / m_FileSize; double lastCovered = end * f_Width / m_FileSize - lastPixel; // all inside one pixel ? if (firstPixel == lastPixel) { m_Content[firstPixel].BlendWith(colour, firstCovered + lastCovered - 1.0); } else { m_Content[firstPixel].BlendWith(colour, firstCovered); m_Content[lastPixel].BlendWith(colour, lastCovered); // fill pixels between (if any) for (unsigned i = firstPixel + 1; i < lastPixel; i++) { m_Content[i] = colour; } } } void CBarShader::Draw( wxDC* dc, int iLeft, int iTop, bool bFlat ) { wxASSERT( dc ); // Do we need to rebuild the modifiers? if ( !bFlat && !m_Modifiers ) { BuildModifiers(); } // Render the bar into a raw buffer unsigned char * buf = (unsigned char *) malloc(m_Width * m_Height * 3); if (bFlat) { // draw flat bar unsigned idx = 0; for (unsigned x = 0; x < m_Width; x++) { unsigned cRed = m_Content[x].Red(); unsigned cGreen = m_Content[x].Green(); unsigned cBlue = m_Content[x].Blue(); buf[idx++] = cRed; buf[idx++] = cGreen; buf[idx++] = cBlue; } unsigned linelength = idx; unsigned y = 1; for (; y < m_Height >> 1; y <<= 1, idx <<= 1) { std::memcpy(buf + idx, buf, idx); } if (y < m_Height) { std::memcpy(buf + idx, buf, (m_Height - y) * linelength); } } else { // draw rounded bar unsigned Max = HALF(m_Height); unsigned idx = 0; for (unsigned y = 0; y < Max; y++) { for (unsigned x = 0; x < m_Width; x++) { unsigned cRed = (unsigned)(m_Content[x].Red() * m_Modifiers[y] + .5f); unsigned cGreen = (unsigned)(m_Content[x].Green() * m_Modifiers[y] + .5f); unsigned cBlue = (unsigned)(m_Content[x].Blue() * m_Modifiers[y] + .5f); cRed = std::min(255u, cRed); cGreen = std::min(255u, cGreen); cBlue = std::min(255u, cBlue); buf[idx++] = cRed; buf[idx++] = cGreen; buf[idx++] = cBlue; } } unsigned linelength = m_Width * 3; for (unsigned y = std::max(Max, m_Height - Max); y < m_Height; y++) { std::memcpy(buf + y * linelength, buf + (m_Height - 1 - y) * linelength, linelength); } } wxImage image(m_Width, m_Height); image.SetData(buf); wxBitmap bitmap(image); dc->DrawBitmap(bitmap, iLeft, iTop); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/MuleNotebook.h0000644000175000017500000001067612050266603021105 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef MULENOTEBOOK_H #define MULENOTEBOOK_H #include DECLARE_LOCAL_EVENT_TYPE(wxEVT_COMMAND_MULENOTEBOOK_PAGE_CLOSING, -1) DECLARE_LOCAL_EVENT_TYPE(wxEVT_COMMAND_MULENOTEBOOK_ALL_PAGES_CLOSED, -1) #define EVT_MULENOTEBOOK_PAGE_CLOSING(id, fn) \ DECLARE_EVENT_TABLE_ENTRY( \ wxEVT_COMMAND_MULENOTEBOOK_PAGE_CLOSING, \ id, \ -1, \ (wxObjectEventFunction)(wxEventFunction)(wxNotebookEventFunction) &fn, \ NULL \ ), #define EVT_MULENOTEBOOK_ALL_PAGES_CLOSED(id, fn) \ DECLARE_EVENT_TABLE_ENTRY( \ wxEVT_COMMAND_MULENOTEBOOK_ALL_PAGES_CLOSED, \ id, \ -1, \ (wxObjectEventFunction)(wxEventFunction)(wxNotebookEventFunction) &fn, \ NULL \ ), class wxWindow; /** * This is an NoteBook control which adds additional features above what is * provided by the wxNoteBook widget. Currently it includes: * - Use of images on the tabs for closing the pages. * - A popup-menu for closing one or more pages. * - Events triggered when pages are closed. */ class CMuleNotebook : public wxNotebook { public: /** * Constructor. * * @see wxNotebook::wxNotebook */ CMuleNotebook( wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxT("notebook") ); /** * Destructor. */ virtual ~CMuleNotebook(); /** * Deletes the page and triggers an event. * * @param nPage The page to be removed. */ virtual bool DeletePage(int nPage); /** * Deletes and triggers and event for every page. */ virtual bool DeleteAllPages(); /** * Enables or disables the displaying of a popup-menu. * * @param enabled The new setting. */ void EnablePopup( bool enable ); /** * Sets an external widget to handle the popup-event. * * @param widget The widget which would recieve the event or NULL to disable. * * Setting the handler to a non-NULL pointer means that upon right-clicks, a * right click event will be sent to that widget, so that it can create a * popup-menu. The coordinates will be fixed to fit onto the specified widget, * so no mapping is needed. */ void SetPopupHandler( wxWindow* widget ); protected: /** * Event handler for left mouse button release (for closing pages) */ void OnMouseLeftRelease(wxMouseEvent &event); /** * Event handler for mouse motion (for highlighting the 'x') */ void OnMouseMotion(wxMouseEvent &event); /** * Event-handler for right-clicks that takes care of displaying the popup-menu. */ void OnRMButton(wxMouseEvent& event); /** * Event-handler fo the Close item on the popup-menu. */ void OnPopupClose(wxCommandEvent& evt); /** * Event-handler fo the CloseAll item on the popup-menu. */ void OnPopupCloseAll(wxCommandEvent& evt); /** * Event-handler fo the CloseOthers item on the popup-menu. */ void OnPopupCloseOthers(wxCommandEvent& evt); //! Keeps track of the popup-menu being enabled or not. bool m_popup_enable; //! The pointer to the widget which would recieve right-click events or NULL. wxWindow* m_popup_widget; DECLARE_EVENT_TABLE() }; #ifdef __WXMSW__ #define MULE_NOTEBOOK_TAB_HEIGHT 26 #else #define MULE_NOTEBOOK_TAB_HEIGHT 40 #endif #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ColorFrameCtrl.h0000644000175000017500000000366312050266603021356 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef COLORFRAMECTRL_H #define COLORFRAMECTRL_H #include // Needed for wxBrush #include // Needed for wxControl #include "Types.h" // Needed for RECT class wxColour; ///////////////////////////////////////////////////////////////////////////// // CColorFrameCtrl window class CColorFrameCtrl : public wxControl { public: CColorFrameCtrl( wxWindow* parent, int id,int wid,int hei ); virtual ~CColorFrameCtrl(); void SetFrameBrushColour(const wxColour& colour); void SetBackgroundBrushColour(const wxColour& colour); protected: void OnPaint(wxPaintEvent& evt); void OnSize(wxSizeEvent& evt); DECLARE_EVENT_TABLE() RECT m_rectClient; wxBrush m_brushBack,m_brushFrame; }; ///////////////////////////////////////////////////////////////////////////// #endif // COLORFRAMECTRL_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/updownclient.h0000644000175000017500000010273412050266603021212 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef UPDOWNCLIENT_H #define UPDOWNCLIENT_H // ADUNANZA BEGIN #include "AdunanzA.h" // ADUNANZA END #include "Constants.h" // Needed for ESourceFrom #include "GetTickCount.h" // Needed for GetTickCount #include "MD4Hash.h" #include #include "NetworkFunctions.h" #include "OtherStructs.h" #include "ClientCredits.h" // Needed for EIdentState #include // Needed for CECID #include "BitVector.h" // Needed for BitVector #include "ClientRef.h" // Needed for debug defines #include class CPartFile; class CClientTCPSocket; class CPacket; class CFriend; class CKnownFile; class CMemFile; class CAICHHash; enum EChatCaptchaState { CA_NONE = 0, CA_CHALLENGESENT, CA_CAPTCHASOLVED, CA_ACCEPTING, CA_CAPTCHARECV, CA_SOLUTIONSENT }; enum ESecureIdentState { IS_UNAVAILABLE = 0, IS_ALLREQUESTSSEND = 0, IS_SIGNATURENEEDED = 1, IS_KEYANDSIGNEEDED = 2 }; enum EInfoPacketState { IP_NONE = 0, IP_EDONKEYPROTPACK = 1, IP_EMULEPROTPACK = 2, IP_BOTH = 3 }; enum EKadState { KS_NONE, KS_QUEUED_FWCHECK, KS_CONNECTING_FWCHECK, KS_CONNECTED_FWCHECK, KS_QUEUED_BUDDY, KS_INCOMING_BUDDY, KS_CONNECTING_BUDDY, KS_CONNECTED_BUDDY, KS_QUEUED_FWCHECK_UDP, KS_FWCHECK_UDP, KS_CONNECTING_FWCHECK_UDP }; //! Used to keep track of the state of the client enum ClientState { //! New is for clients that have just been created. CS_NEW = 0, //! Listed is for clients that are on the clientlist CS_LISTED, //! Dying signifies clients that have been queued for deletion CS_DYING }; // This is fixed on ed2k v1, but can be any number on ED2Kv2 #define STANDARD_BLOCKS_REQUEST 3 class CUpDownClient : public CECID { friend class CClientList; friend class CClientRef; private: /** * Please note that only the ClientList is allowed to delete the clients. * To schedule a client for deletion, call the CClientList::AddToDeleteQueue * funtion, which will safely remove dead clients once every second. */ ~CUpDownClient(); /** * Reference count which is increased whenever client is linked to a clientref. * Clients are to be stored only by ClientRefs, CUpDownClient * are for temporary * use only. * Linking is done only by CClientRef which is friend, so methods are private. */ // ADUNANZA BEGIN #if 0 uint16 m_linked; #else mutable uint16 m_linked; #endif // ADUNANZA END #ifdef DEBUG_ZOMBIE_CLIENTS bool m_linkedDebug; std::multiset m_linkedFrom; void Link(const wxString& from) { m_linked++; m_linkedFrom.insert(from); } void Unlink(const wxString& from); wxString GetLinkedFrom() { wxString ret; // ADUNANZA BEGIN #if 0 for (std::multiset::iterator it = m_linkedFrom.begin(); it != m_linkedFrom.end(); it++) { #else for (std::multiset::iterator it = m_linkedFrom.begin(); it != m_linkedFrom.end(); ++it) { #endif // ADUNANZA END ret += *it + wxT(", "); } return ret; } #else // ADUNANZA BEGIN #if 0 void Link() { m_linked++; } #else inline void Link() { ++m_linked; } #endif // ADUNANZA END void Unlink(); #endif public: //base CUpDownClient(CClientTCPSocket* sender = 0); CUpDownClient(uint16 in_port, uint32 in_userid, uint32 in_serverup, uint16 in_serverport,CPartFile* in_reqfile, bool ed2kID, bool checkfriend); /** * This function is to be called when the client object is to be deleted. * It'll close the socket of the client and remove it from various lists * that can own it. * * The client will really be deleted only after thelast reference to it * is unlinked; */ void Safe_Delete(); /** * Specifies if the client has been queued for deletion. * * @return True if Safe_Delete has been called, false otherwise. */ // ADUNANZA BEGIN #if 0 bool HasBeenDeleted() { return m_clientState == CS_DYING; } ClientState GetClientState() { return m_clientState; } #else inline bool HasBeenDeleted() const { return m_clientState == CS_DYING; } inline ClientState GetClientState() const { return m_clientState; } inline bool HasLinks() const { return (m_linked != 0); } inline bool IsNotDeletedAndIsDownloadingClient() const {return (HasLinks() && !HasBeenDeleted() && (m_nDownloadState == DS_DOWNLOADING));} #endif // ADUNANZA END bool Disconnected(const wxString& strReason, bool bFromSocket = false); bool TryToConnect(bool bIgnoreMaxCon = false); bool Connect(); void ConnectionEstablished(); const wxString& GetUserName() const { return m_Username; } //Only use this when you know the real IP or when your clearing it. void SetIP( uint32 val ); uint32 GetIP() const { return m_dwUserIP; } bool HasLowID() const { return IsLowID(m_nUserIDHybrid); } wxString GetFullIP() const { return Uint32toStringIP(m_FullUserIP); } uint32 GetConnectIP() const { return m_nConnectIP; } uint32 GetUserIDHybrid() const { return m_nUserIDHybrid; } void SetUserIDHybrid(uint32 val); uint16_t GetUserPort() const { return m_nUserPort; } void SetUserPort(uint16_t port) { m_nUserPort = port; } uint64 GetTransferredDown() const { return m_nTransferredDown; } uint32 GetServerIP() const { return m_dwServerIP; } void SetServerIP(uint32 nIP) { m_dwServerIP = nIP; } uint16 GetServerPort() const { return m_nServerPort; } void SetServerPort(uint16 nPort) { m_nServerPort = nPort; } const CMD4Hash& GetUserHash() const { return m_UserHash; } void SetUserHash(const CMD4Hash& userhash); void ValidateHash() { m_HasValidHash = !m_UserHash.IsEmpty(); } bool HasValidHash() const { return m_HasValidHash; } uint32 GetVersion() const { return m_nClientVersion;} uint8 GetMuleVersion() const { return m_byEmuleVersion;} bool ExtProtocolAvailable() const { return m_bEmuleProtocol;} bool IsEmuleClient() const { return (m_byEmuleVersion > 0);} bool IsBanned() const; const wxString& GetClientFilename() const { return m_clientFilename; } uint16 GetUDPPort() const { return m_nUDPPort; } void SetUDPPort(uint16 nPort) { m_nUDPPort = nPort; } uint8 GetUDPVersion() const { return m_byUDPVer; } uint8 GetExtendedRequestsVersion() const { return m_byExtendedRequestsVer; } bool IsFriend() const { return m_Friend != NULL; } bool IsML() const { return m_bIsML; } bool IsHybrid() const { return m_bIsHybrid; } uint32 GetCompatibleClient() const { return m_byCompatibleClient; } void ClearDownloadBlockRequests(); void RequestSharedFileList(); void ProcessSharedFileList(const byte* pachPacket, uint32 nSize, wxString& pszDirectory); void SendSharedDirectories(); void SendSharedFilesOfDirectory(const wxString& strReqDir); wxString GetUploadFileInfo(); void SetUserName(const wxString& NewName) { m_Username = NewName; } uint8 GetClientSoft() const { return m_clientSoft; } void ReGetClientSoft(); bool ProcessHelloAnswer(const byte* pachPacket, uint32 nSize); bool ProcessHelloPacket(const byte* pachPacket, uint32 nSize); void SendHelloAnswer(); bool SendHelloPacket(); void SendMuleInfoPacket(bool bAnswer, bool OSInfo = false); bool ProcessMuleInfoPacket(const byte* pachPacket, uint32 nSize); void ProcessMuleCommentPacket(const byte* pachPacket, uint32 nSize); bool Compare(const CUpDownClient* tocomp, bool bIgnoreUserhash = false) const; void SetLastSrcReqTime() { m_dwLastSourceRequest = ::GetTickCount(); } void SetLastSrcAnswerTime() { m_dwLastSourceAnswer = ::GetTickCount(); } void SetLastAskedForSources() { m_dwLastAskedForSources = ::GetTickCount(); } uint32 GetLastSrcReqTime() const { return m_dwLastSourceRequest; } uint32 GetLastSrcAnswerTime() const { return m_dwLastSourceAnswer; } uint32 GetLastAskedForSources() const { return m_dwLastAskedForSources; } bool GetFriendSlot() const { return m_bFriendSlot; } void SetFriendSlot(bool bNV) { m_bFriendSlot = bNV; } void SetCommentDirty(bool bDirty = true) { m_bCommentDirty = bDirty; } uint8 GetSourceExchange1Version() const { return m_bySourceExchange1Ver; } bool SupportsSourceExchange2() const { return m_fSupportsSourceEx2; } bool SafeSendPacket(CPacket* packet); void ProcessRequestPartsPacket(const byte* pachPacket, uint32 nSize, bool largeblocks); void ProcessRequestPartsPacketv2(const CMemFile& data); void SendPublicKeyPacket(); void SendSignaturePacket(); void ProcessPublicKeyPacket(const byte* pachPacket, uint32 nSize); void ProcessSignaturePacket(const byte* pachPacket, uint32 nSize); uint8 GetSecureIdentState(); void SendSecIdentStatePacket(); void ProcessSecIdentStatePacket(const byte* pachPacket, uint32 nSize); uint8 GetInfoPacketsReceived() const { return m_byInfopacketsReceived; } void InfoPacketsReceived(); //upload uint8 GetUploadState() const { return m_nUploadState; } void SetUploadState(uint8 news); uint64 GetTransferredUp() const { return m_nTransferredUp; } uint64 GetSessionUp() const { return m_nTransferredUp - m_nCurSessionUp; } void ResetSessionUp(); uint32 GetUploadDatarate() const { return m_nUpDatarate; } //uint32 GetWaitTime() const { return m_dwUploadTime - GetWaitStartTime(); } uint32 GetUpStartTimeDelay() const { return ::GetTickCount() - m_dwUploadTime; } uint32 GetWaitStartTime() const; bool IsDownloading() const { return (m_nUploadState == US_UPLOADING); } uint32 GetScore() const { return m_score; } uint32 CalculateScore() { m_score = CalculateScoreInternal(); return m_score; } void ClearScore() { m_score = 0; } uint16 GetUploadQueueWaitingPosition() const { return m_waitingPosition; } void SetUploadQueueWaitingPosition(uint16 pos) { m_waitingPosition = pos; } uint8 GetObfuscationStatus() const; uint16 GetNextRequestedPart() const; void AddReqBlock(Requested_Block_Struct* reqblock); void CreateNextBlockPackage(); void SetUpStartTime() { m_dwUploadTime = ::GetTickCount(); } void SetWaitStartTime(); void ClearWaitStartTime(); void SendHashsetPacket(const CMD4Hash& forfileid); bool SupportMultiPacket() const { return m_bMultiPacket; } bool SupportExtMultiPacket() const { return m_fExtMultiPacket; } void SetUploadFileID(CKnownFile *newreqfile); /** *Gets the file actually on upload * */ const CKnownFile* GetUploadFile() const { return m_uploadingfile; } void SendOutOfPartReqsAndAddToWaitingQueue(); void ProcessExtendedInfo(const CMemFile *data, CKnownFile *tempreqfile); void ProcessFileInfo(const CMemFile* data, const CPartFile* file); void ProcessFileStatus(bool bUdpPacket, const CMemFile* data, const CPartFile* file); const CMD4Hash& GetUploadFileID() const { return m_requpfileid; } void SetUploadFileID(const CMD4Hash& new_id); void ClearUploadFileID() { m_requpfileid.Clear(); m_uploadingfile = NULL;} uint32 SendBlockData(); void ClearUploadBlockRequests(); void SendRankingInfo(); void SendCommentInfo(CKnownFile *file); bool IsDifferentPartBlock() const; void UnBan(); void Ban(); bool m_bAddNextConnect; // VQB Fix for LowID slots only on connection uint32 GetAskedCount() const { return m_cAsked; } void AddAskedCount() { m_cAsked++; } void ClearAskedCount() { m_cAsked = 1; } // 1, because it's cleared *after* the first request... void FlushSendBlocks(); // call this when you stop upload, // or the socket might be not able to send void SetLastUpRequest() { m_dwLastUpRequest = ::GetTickCount(); } uint32 GetLastUpRequest() const { return m_dwLastUpRequest; } size_t GetUpPartCount() const { return m_upPartStatus.size(); } //download void SetRequestFile(CPartFile* reqfile); CPartFile* GetRequestFile() const { return m_reqfile; } uint8 GetDownloadState() const { return m_nDownloadState; } void SetDownloadState(uint8 byNewState); uint32 GetLastAskedTime() const { return m_dwLastAskedTime; } void ResetLastAskedTime() { m_dwLastAskedTime = 0; } bool IsPartAvailable(uint16 iPart) const { return ( iPart < m_downPartStatus.size() ) ? m_downPartStatus.get(iPart) : 0; } bool IsUpPartAvailable(uint16 iPart) const { return ( iPart < m_upPartStatus.size() ) ? m_upPartStatus.get(iPart) : 0;} const BitVector& GetPartStatus() const { return m_downPartStatus; } const BitVector& GetUpPartStatus() const { return m_upPartStatus; } float GetKBpsDown() const { return kBpsDown; } float CalculateKBpsDown(); uint16 GetRemoteQueueRank() const { return m_nRemoteQueueRank; } uint16 GetOldRemoteQueueRank() const { return m_nOldRemoteQueueRank; } void SetRemoteQueueFull(bool flag) { m_bRemoteQueueFull = flag; } bool IsRemoteQueueFull() const { return m_bRemoteQueueFull; } void SetRemoteQueueRank(uint16 nr); bool AskForDownload(); void SendStartupLoadReq(); void SendFileRequest(); void ProcessHashSet(const byte* packet, uint32 size); bool AddRequestForAnotherFile(CPartFile* file); bool DeleteFileRequest(CPartFile* file); void DeleteAllFileRequests(); void SendBlockRequests(); // ADUNANZA BEGIN // Mr Hyde: cambiato il tipo della funzione. // Ora se la CreateBlock esegue il drop di una sorgente viene restituito TRUE, // FALSE altrimenti // bool CreateBlockRequests(uint16 iMaxBlocks); // ADUNANZA END void ProcessBlockPacket(const byte* packet, uint32 size, bool packed, bool largeblocks); uint16 GetAvailablePartCount() const; bool SwapToAnotherFile(bool bIgnoreNoNeeded, bool ignoreSuspensions, bool bRemoveCompletely, CPartFile* toFile = NULL); void UDPReaskACK(uint16 nNewQR); void UDPReaskFNF(); void UDPReaskForDownload(); bool IsSourceRequestAllowed(); uint16 GetUpCompleteSourcesCount() const { return m_nUpCompleteSourcesCount; } void SetUpCompleteSourcesCount(uint16 n) { m_nUpCompleteSourcesCount = n; } //chat uint8 GetChatState() { return m_byChatstate; } void SetChatState(uint8 nNewS) { m_byChatstate = nNewS; } EChatCaptchaState GetChatCaptchaState() const { return (EChatCaptchaState)m_nChatCaptchaState; } void ProcessCaptchaRequest(CMemFile* data); void ProcessCaptchaReqRes(uint8 nStatus); void ProcessChatMessage(wxString message); // message filtering uint8 GetMessagesReceived() const { return m_cMessagesReceived; } void IncMessagesReceived() { m_cMessagesReceived < 255 ? ++m_cMessagesReceived : 255; } uint8 GetMessagesSent() const { return m_cMessagesSent; } void IncMessagesSent() { m_cMessagesSent < 255 ? ++m_cMessagesSent : 255; } bool IsSpammer() const { return m_fIsSpammer; } void SetSpammer(bool bVal); bool IsMessageFiltered(const wxString& message); //File Comment const wxString& GetFileComment() const { return m_strComment; } uint8 GetFileRating() const { return m_iRating; } const wxString& GetSoftStr() const { return m_clientSoftString; } const wxString& GetSoftVerStr() const { return m_clientVerString; } const wxString GetServerName() const; uint16 GetKadPort() const { return m_nKadPort; } void SetKadPort(uint16 nPort) { m_nKadPort = nPort; } // Kry - AICH import void SetReqFileAICHHash(CAICHHash* val); CAICHHash* GetReqFileAICHHash() const {return m_pReqFileAICHHash;} bool IsSupportingAICH() const {return m_fSupportsAICH & 0x01;} void SendAICHRequest(CPartFile* pForFile, uint16 nPart); bool IsAICHReqPending() const {return m_fAICHRequested; } void ProcessAICHAnswer(const byte* packet, uint32 size); void ProcessAICHRequest(const byte* packet, uint32 size); void ProcessAICHFileHash(CMemFile* data, const CPartFile* file); EUtf8Str GetUnicodeSupport() const; // Barry - Process zip file as it arrives, don't need to wait until end of block int unzip(Pending_Block_Struct *block, byte *zipped, uint32 lenZipped, byte **unzipped, uint32 *lenUnzipped, int iRecursion = 0); void UpdateDisplayedInfo(bool force = false); int GetFileListRequested() const { return m_iFileListRequested; } void SetFileListRequested(int iFileListRequested) { m_iFileListRequested = iFileListRequested; } void ResetFileStatusInfo(); bool CheckHandshakeFinished() const; bool GetSentCancelTransfer() const { return m_fSentCancelTransfer; } void SetSentCancelTransfer(bool bVal) { m_fSentCancelTransfer = bVal; } wxString GetClientFullInfo(); wxString GetClientShortInfo(); const wxString& GetClientOSInfo() const { return m_sClientOSInfo; } void ProcessPublicIPAnswer(const byte* pbyData, uint32 uSize); void SendPublicIPRequest(); // ADUNANZA BEGIN void SendCancelTransfer(CPacket* packet); // ADUNANZA END /** * Sets the current socket of the client. * * @param socket The pointer to the new socket, can be NULL. * * Please note that this function DOES NOT delete the old socket. */ void SetSocket(CClientTCPSocket* socket); /** * Function for accessing the socket owned by a client. * * @return The pointer (can be NULL) to the socket used by this client. * * Please note that the socket object is quite volatile and can be removed * from one function call to the next, therefore, you should normally use * the safer functions below, which all check if the socket is valid before * deferring it. */ CClientTCPSocket* GetSocket() const { return m_socket; } /** * Safe function for checking if the socket is connected. * * @return True if the socket exists and is connected, false otherwise. */ bool IsConnected() const; /** * Safe function for sending packets. * * @return True if the socket exists and the packet was sent, false otherwise. */ // ADUNANZA BEGIN // Stefano Picerno: Aggiunto il parametro actualPayloadSize #if 0 bool SendPacket(CPacket* packet, bool delpacket = true, bool controlpacket = true); #endif bool SendPacket(CPacket* packet, bool delpacket = true, bool controlpacket = true, uint32 actualPayloadSize = 0 ); // Fine // ADUNANZA END /** * Safe function for setting the download limit of the socket. * * @return Current download speed of the client. */ float SetDownloadLimit(uint32 reducedownload); /** * Sends a message to a client * * @return True if sent, false if connecting */ bool SendChatMessage(const wxString& message); bool HasBlocks() const { return !m_BlockRequests_queue.empty(); } /* Source comes from? */ ESourceFrom GetSourceFrom() const { return m_nSourceFrom; } void SetSourceFrom(ESourceFrom val) { m_nSourceFrom = val; } /* Kad buddy support */ // ID const byte* GetBuddyID() const { return m_achBuddyID; } void SetBuddyID(const byte* m_achTempBuddyID); bool HasValidBuddyID() const { return m_bBuddyIDValid; } /* IP */ void SetBuddyIP( uint32 val ) { m_nBuddyIP = val; } uint32 GetBuddyIP() const { return m_nBuddyIP; } /* Port */ void SetBuddyPort( uint16 val ) { m_nBuddyPort = val; } uint16 GetBuddyPort() const { return m_nBuddyPort; } //KadIPCheck bool SendBuddyPingPong() { return m_dwLastBuddyPingPongTime < ::GetTickCount(); } bool AllowIncomeingBuddyPingPong() { return m_dwLastBuddyPingPongTime < (::GetTickCount()-(3*60*1000)); } void SetLastBuddyPingPongTime() { m_dwLastBuddyPingPongTime = (::GetTickCount()+(10*60*1000)); } EKadState GetKadState() const { return m_nKadState; } void SetKadState(EKadState nNewS) { m_nKadState = nNewS; } uint8 GetKadVersion() { return m_byKadVersion; } void ProcessFirewallCheckUDPRequest(CMemFile *data); // Kad added by me bool SendBuddyPing(); /* Returns the client hash type (SO_EMULE, mldonkey, etc) */ int GetHashType() const; /** * Checks that a client isn't aggressively re-asking for files. * * Call this when a file is requested. If the time since the last request is * less than MIN_REQUESTTIME, 3 is added to the m_Aggressiveness variable. * If the time since the last request is >= MIN_REQUESTTIME, the variable is * decremented by 1. The client is banned if the variable reaches 10 or above. * * To check if a client is aggressive use the IsClientAggressive() function. * * Currently this function is called when the following packets are received: * - OP_STARTUPLOADREQ * - OP_REASKFILEPING */ void CheckForAggressive(); const wxString& GetClientModString() const { return m_strModVersion; } const wxString& GetClientVerString() const { return m_fullClientVerString; } const wxString& GetVersionString() const { return m_clientVersionString; } void UpdateStats(); /* Returns a pointer to the credits, only for hash purposes */ void* GetCreditsHash() const { return (void*)credits; } uint16 GetLastDownloadingPart() const { return m_lastDownloadingPart; } bool GetOSInfoSupport() const { return m_fOsInfoSupport; } bool GetVBTTags() const { return m_fValueBasedTypeTags; } uint16 GetLastPartAsked() const { return m_lastPartAsked; } void SetLastPartAsked(uint16 nPart) { m_lastPartAsked = nPart; } CFriend* GetFriend() const { return m_Friend; } void SetFriend(CFriend* newfriend) { m_Friend = newfriend; } bool IsIdentified() const; bool IsBadGuy() const; bool SUIFailed() const; bool SUINeeded() const; bool SUINotSupported() const; uint64 GetDownloadedTotal() const; uint64 GetUploadedTotal() const; double GetScoreRatio() const; uint32 GetCreationTime() const { return m_nCreationTime; } bool SupportsLargeFiles() const { return m_fSupportsLargeFiles; } EIdentState GetCurrentIdentState() const { return credits ? credits->GetCurrentIdentState(GetIP()) : IS_NOTAVAILABLE; } #ifdef __DEBUG__ /* Kry - Debug. See connection_reason definition comment below */ void SetConnectionReason(const wxString& reason) { connection_reason = reason; } #endif // Encryption / Obfuscation / ConnectOptions bool SupportsCryptLayer() const { return m_fSupportsCryptLayer; } bool RequestsCryptLayer() const { return SupportsCryptLayer() && m_fRequestsCryptLayer; } bool RequiresCryptLayer() const { return RequestsCryptLayer() && m_fRequiresCryptLayer; } bool SupportsDirectUDPCallback() const { return m_fDirectUDPCallback != 0 && HasValidHash() && GetKadPort() != 0; } uint32_t GetDirectCallbackTimeout() const { return m_dwDirectCallbackTimeout; } bool HasObfuscatedConnectionBeenEstablished() const { return m_hasbeenobfuscatinglately; } void SetCryptLayerSupport(bool bVal) { m_fSupportsCryptLayer = bVal ? 1 : 0; } void SetCryptLayerRequest(bool bVal) { m_fRequestsCryptLayer = bVal ? 1 : 0; } void SetCryptLayerRequires(bool bVal) { m_fRequiresCryptLayer = bVal ? 1 : 0; } void SetDirectUDPCallbackSupport(bool bVal) { m_fDirectUDPCallback = bVal ? 1 : 0; } void SetConnectOptions(uint8_t options, bool encryption = true, bool callback = true); // shortcut, sets crypt, callback, etc from the tagvalue we receive bool ShouldReceiveCryptUDPPackets() const; bool HasDisabledSharedFiles() const { return m_fNoViewSharedFiles; } private: CClientCredits *credits; CFriend *m_Friend; uint64 m_nTransferredUp; sint64 m_nCurQueueSessionPayloadUp; sint64 m_addedPayloadQueueSession; struct TransferredData { uint32 datalen; uint32 timestamp; }; ////////////////////////////////////////////////////////// // Upload data rate computation // uint32 m_nUpDatarate; uint32 m_nSumForAvgUpDataRate; std::list m_AvarageUDR_list; /** * This struct is used to keep track of CPartFiles which this source shares. */ struct A4AFStamp { //! Signifies if this sources has needed parts for this file. bool NeededParts; //! This is set when we wish to avoid swapping to this file for a while. uint32 timestamp; }; //! I typedef in the name of readability! typedef std::map A4AFList; //! This list contains all PartFiles which this client can be used as a source for. A4AFList m_A4AF_list; /** * Helper function used by SwapToAnotherFile(). * * @param it The iterator of the PartFile to be examined. * @param ignorenoneeded Do not check for the status NoNeededParts when checking the file. * @param ignoresuspended Do not check the timestamp when checking the file. * @return True if the file is a viable target, false otherwise. * * This function is used to perform checks to see if we should consider * this file a viable target for A4AF swapping. Unless ignoresuspended is * true, it will examine the timestamp of the file and reset it if needed. */ bool IsValidSwapTarget( A4AFList::iterator it, bool ignorenoneeded = false, bool ignoresuspended = false ); CPartFile* m_reqfile; // base void Init(); bool ProcessHelloTypePacket(const CMemFile& data); void SendHelloTypePacket(CMemFile* data); void SendFirewallCheckUDPRequest(); void ClearHelloProperties(); // eMule 0.42 uint32 m_dwUserIP; uint32 m_nConnectIP; // holds the supposed IP or (after we had a connection) the real IP uint32 m_dwServerIP; uint32 m_nUserIDHybrid; uint16_t m_nUserPort; int16 m_nServerPort; uint32 m_nClientVersion; uint32 m_cSendblock; uint8 m_byEmuleVersion; uint8 m_byDataCompVer; bool m_bEmuleProtocol; wxString m_Username; uint32 m_FullUserIP; CMD4Hash m_UserHash; bool m_HasValidHash; uint16 m_nUDPPort; uint8 m_byUDPVer; uint8 m_bySourceExchange1Ver; uint8 m_byAcceptCommentVer; uint8 m_byExtendedRequestsVer; uint8 m_clientSoft; uint32 m_dwLastSourceRequest; uint32 m_dwLastSourceAnswer; uint32 m_dwLastAskedForSources; int m_iFileListRequested; bool m_bFriendSlot; bool m_bCommentDirty; bool m_bIsHybrid; bool m_bIsML; bool m_bSupportsPreview; bool m_bUnicodeSupport; uint16 m_nKadPort; bool m_bMultiPacket; ClientState m_clientState; CClientTCPSocket* m_socket; bool m_fNeedOurPublicIP; // we requested our IP from this client // Kry - Secure User Ident import ESecureIdentState m_SecureIdentState; uint8 m_byInfopacketsReceived; // have we received the edonkeyprot and emuleprot packet already (see InfoPacketsReceived() ) uint32 m_dwLastSignatureIP; uint8 m_bySupportSecIdent; uint32 m_byCompatibleClient; std::list m_WaitingPackets_list; uint32 m_lastRefreshedDLDisplay; //upload void CreateStandardPackets(const unsigned char* data,uint32 togo, Requested_Block_Struct* currentblock); void CreatePackedPackets(const unsigned char* data,uint32 togo, Requested_Block_Struct* currentblock); uint32 CalculateScoreInternal(); uint8 m_nUploadState; uint32 m_dwUploadTime; uint32 m_cAsked; uint32 m_dwLastUpRequest; uint32 m_nCurSessionUp; uint16 m_nUpPartCount; CMD4Hash m_requpfileid; uint16 m_nUpCompleteSourcesCount; uint32 m_score; uint16 m_waitingPosition; //! This vector contains the avilability of parts for the file that the user //! is requesting. When changing it, be sure to call CKnownFile::UpdatePartsFrequency //! so that the files know the actual availability of parts. BitVector m_upPartStatus; uint16 m_lastPartAsked; wxString m_strModVersion; std::list m_BlockRequests_queue; std::list m_DoneBlocks_list; //download bool m_bRemoteQueueFull; uint8 m_nDownloadState; uint16 m_nPartCount; uint32 m_dwLastAskedTime; wxString m_clientFilename; uint64 m_nTransferredDown; uint16 m_lastDownloadingPart; // last Part that was downloading uint16 m_cShowDR; uint32 m_dwLastBlockReceived; uint16 m_nRemoteQueueRank; uint16 m_nOldRemoteQueueRank; bool m_bCompleteSource; bool m_bReaskPending; bool m_bUDPPending; bool m_bHashsetRequested; std::list m_PendingBlocks_list; std::list m_DownloadBlocks_list; // download speed calculation float kBpsDown; uint32 msReceivedPrev; uint32 bytesReceivedCycle; // chat wxString m_strComment; uint8 m_byChatstate; uint8 m_nChatCaptchaState; uint8 m_cCaptchasSent; int8 m_iRating; uint8 m_cMessagesReceived; // count of chatmessages he sent to me uint8 m_cMessagesSent; // count of chatmessages I sent to him wxString m_strCaptchaChallenge; wxString m_strCaptchaPendingMsg; unsigned int m_fHashsetRequesting : 1, // we have sent a hashset request to this client m_fNoViewSharedFiles : 1, // client has disabled the 'View Shared Files' feature, // if this flag is not set, we just know that we don't know // for sure if it is enabled m_fSupportsPreview : 1, m_fIsSpammer : 1, m_fSentCancelTransfer: 1, // we have sent an OP_CANCELTRANSFER in the current connection m_fSharedDirectories : 1, // client supports OP_ASKSHAREDIRS opcodes m_fSupportsAICH : 3, m_fAICHRequested : 1, m_fSupportsLargeFiles: 1, m_fSentOutOfPartReqs : 1, m_fExtMultiPacket : 1, m_fRequestsCryptLayer: 1, m_fSupportsCryptLayer: 1, m_fRequiresCryptLayer: 1, m_fSupportsSourceEx2 : 1, m_fSupportsCaptcha : 1, m_fDirectUDPCallback : 1; unsigned int m_fOsInfoSupport : 1, m_fValueBasedTypeTags : 1; /* Razor 1a - Modif by MikaelB */ bool m_bHelloAnswerPending; //! This vector contains the avilability of parts for the file we requested //! from this user. When changing it, be sure to call CPartFile::UpdatePartsFrequency //! so that the files know the actual availability of parts. BitVector m_downPartStatus; CAICHHash* m_pReqFileAICHHash; ESourceFrom m_nSourceFrom; /* Kad Stuff */ byte m_achBuddyID[16]; bool m_bBuddyIDValid; uint32 m_nBuddyIP; uint16 m_nBuddyPort; EKadState m_nKadState; uint8 m_byKadVersion; uint32 m_dwLastBuddyPingPongTime; uint32_t m_dwDirectCallbackTimeout; // ADUNANZA BEGIN // Modifica AdunanzA // // Emanem 6/4/2004 - 13:25 // Metodi per gestire la variabile "isAduSoftware" public : inline uint32 GetIsAduSoftware() const {return isAduSoftware;} inline void SetIsAduSoftware(uint32 in = 0){isAduSoftware = in;} inline bool IsOldAdu(uint32 oldver = ADU_VER_CODE(ADU_VER_MAJ,ADU_VER_MIN,0)) const {return (isAduSoftware && (aduver < oldver));} // Metodo che informa se il client e' sia Adu // che nella rete FastWeb Italiana. // Questo metodo ritorna // ADUNANZA_ICON_NONE Se il client non e' adunanza // ADUNANZA_ICON_FW Se il client non e' adunanza ma e' sulla rete FastWeb Italia // ADUNANZA_ICON_ADU Se il client e' AdunanzA ed e' sulla rete FastWeb Italia inline uint32 GetClientAduType() const { return (IsFastweb() ? (IsAdunanzA() ? ADUNANZA_ICON_ADU : ADUNANZA_ICON_FW) : ADUNANZA_ICON_NONE); } void SetClientFWCity(); const wxString& GetClientFWCity(void) const {return m_FWCity;} // inline bool HasFastwebIP(void) const { return (m_dwUserIP && AduIsFastWebIP(m_dwUserIP)); } // bool IsAduClient() const; // bool IsAduFiber() const; bool sentadu; // ADUFLAGS Mr Hyde 20080201 begin // Mr Hyde: provo a diminuire la CPU usata per i vari // controlli su AdunanzA. // L'idea e' quella di impostare variabili bool // quando viene creata l'istanza in modo da non dover // continuamente analizzare il numero di IP per sapere se il // client e' Fastweb, AdunanzA, AdunanzA Fibra protected: bool m_bIsFastweb; /*! true se il client e' su rete Fastweb */ bool m_bIsFastwebFiber; /*! true se il client e' su rete Fastweb e riconosciuto come fibra */ bool m_bReceivedTagAdunanzA; /*! true se il client ha ricevuto il tag AdunanzA */ public: inline bool ReceivedTagAdunanzA() const {return m_bReceivedTagAdunanzA;} inline bool IsFastweb() const {return m_bIsFastweb;} inline bool IsFastwebFiber() const {return m_bIsFastwebFiber;} inline bool IsAdunanzA() const {return (m_bIsFastweb && m_bReceivedTagAdunanzA);} void UpdateFastwebFlags(); // aggiorna m_bIsFastweb, m_bIsFastwebFiber e mette m_bIsAdunanzA a false // ADUFLAGS Mr Hyde 20080201 end private: uint32 aduver; uint32 isAduSoftware; wxString m_FWCity; // fine mod Adu // ADUNANZA END //! This keeps track of aggressive requests for files. uint16 m_Aggressiveness; //! This tracks the time of the last time since a file was requested uint32 m_LastFileRequest; bool m_OSInfo_sent; wxString m_clientSoftString; /* software name */ wxString m_clientVerString; /* version + optional mod name */ wxString m_clientVersionString; /* version string */ wxString m_fullClientVerString; /* full info string */ wxString m_sClientOSInfo; wxString m_pendingMessage; int SecIdentSupRec; CKnownFile* m_uploadingfile; uint8 m_MaxBlockRequests; // needed for stats uint32 m_lastClientSoft; uint32 m_lastClientVersion; wxString m_lastOSInfo; /* For buddies timeout */ uint32 m_nCreationTime; /* Calculation of last average speed */ uint32 m_lastaverage; uint32 m_last_block_start; /* Save the encryption status for display when disconnected */ bool m_hasbeenobfuscatinglately; /* Kry - Debug thing. Clients created just to check their data have this string set to the reason we want to check them. Obviously, once checked, we disconnect them. Take that, sucker. This debug code is just for me I'm afraid. */ #ifdef __DEBUG__ wxString connection_reason; #endif }; #define MAKE_CLIENT_VERSION(mjr, min, upd) \ ((uint32)(mjr)*100U*10U*100U + (uint32)(min)*100U*10U + (uint32)(upd)*100U) #endif // UPDOWNCLIENT_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/EMSocket.cpp0000644000175000017500000005705512050266603020511 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "EMSocket.h" // Interface declarations. #include #include #include "Packet.h" // Needed for CPacket #include "amule.h" #include "GetTickCount.h" #include "UploadBandwidthThrottler.h" #include "Logger.h" #include "Preferences.h" #include "ScopedPtr.h" const uint32 MAX_PACKET_SIZE = 2000000; CEMSocket::CEMSocket(const CProxyData *ProxyData) : CEncryptedStreamSocket(wxSOCKET_NOWAIT, ProxyData) { // If an interface has been specified, // then we need to bind to it. if (!thePrefs::GetAddress().IsEmpty()) { amuleIPV4Address host; // No need to warn here, in case of failure to // assign the hostname. That is already done // in amule.cpp when starting ... if (host.Hostname(thePrefs::GetAddress())) { SetLocal(host); } } byConnected = ES_NOTCONNECTED; m_uTimeOut = CONNECTION_TIMEOUT; // default timeout for ed2k sockets // Download (pseudo) rate control downloadLimit = 0; downloadLimitEnable = false; pendingOnReceive = false; // Download partial header pendingHeaderSize = 0; // Download partial packet pendingPacket = NULL; pendingPacketSize = 0; // Upload control sendbuffer = NULL; sendblen = 0; sent = 0; m_currentPacket_is_controlpacket = false; m_currentPackageIsFromPartFile = false; m_numberOfSentBytesCompleteFile = 0; m_numberOfSentBytesPartFile = 0; m_numberOfSentBytesControlPacket = 0; lastCalledSend = ::GetTickCount(); lastSent = ::GetTickCount()-1000; m_bAccelerateUpload = false; m_actualPayloadSize = 0; m_actualPayloadSizeSent = 0; m_bBusy = false; m_hasSent = false; lastFinishedStandard = 0; DoingDestroy = false; } CEMSocket::~CEMSocket() { // need to be locked here to know that the other methods // won't be in the middle of things { wxMutexLocker lock(m_sendLocker); byConnected = ES_DISCONNECTED; } // now that we know no other method will keep adding to the queue // we can remove ourself from the queue if (theApp->uploadBandwidthThrottler) { theApp->uploadBandwidthThrottler->RemoveFromAllQueues(this); } ClearQueues(); SetNotify(0); Notify(FALSE); } void CEMSocket::Destroy() { if (!DoingDestroy) { DoingDestroy = true; wxSocketClient::Destroy(); } } void CEMSocket::ClearQueues() { wxMutexLocker lock(m_sendLocker); DeleteContents(m_control_queue); { CStdPacketQueue::iterator it = m_standard_queue.begin(); for (; it != m_standard_queue.end(); ++it) { delete it->packet; } m_standard_queue.clear(); } // Download (pseudo) rate control downloadLimit = 0; downloadLimitEnable = false; pendingOnReceive = false; // Download partial header pendingHeaderSize = 0; // Download partial packet delete[] pendingPacket; pendingPacket = NULL; pendingPacketSize = 0; // Upload control delete[] sendbuffer; sendbuffer = NULL; sendblen = 0; sent = 0; } void CEMSocket::OnClose(int WXUNUSED(nErrorCode)) { // need to be locked here to know that the other methods // won't be in the middle of things { wxMutexLocker lock(m_sendLocker); byConnected = ES_DISCONNECTED; } // now that we know no other method will keep adding to the queue // we can remove ourself from the queue theApp->uploadBandwidthThrottler->RemoveFromAllQueues(this); ClearQueues(); } void CEMSocket::OnReceive(int nErrorCode) { if(nErrorCode) { uint32 error = LastError(); if (error != wxSOCKET_WOULDBLOCK) { OnError(nErrorCode); return; } } // Check current connection state if (byConnected == ES_DISCONNECTED) { return; } else { byConnected = ES_CONNECTED; // ES_DISCONNECTED, ES_NOTCONNECTED, ES_CONNECTED } uint32 ret; do { // CPU load improvement if (downloadLimitEnable && downloadLimit == 0){ pendingOnReceive = true; return; } uint32 readMax; byte *buf; if (pendingHeaderSize < PACKET_HEADER_SIZE) { delete[] pendingPacket; pendingPacket = NULL; buf = pendingHeader + pendingHeaderSize; readMax = PACKET_HEADER_SIZE - pendingHeaderSize; } else if (pendingPacket == NULL) { pendingPacketSize = 0; readMax = CPacket::GetPacketSizeFromHeader(pendingHeader); if (readMax > MAX_PACKET_SIZE) { pendingHeaderSize = 0; OnError(ERR_TOOBIG); return; } pendingPacket = new byte[readMax + 1]; buf = pendingPacket; } else { buf = pendingPacket + pendingPacketSize; readMax = CPacket::GetPacketSizeFromHeader(pendingHeader) - pendingPacketSize; } if (downloadLimitEnable && readMax > downloadLimit) { readMax = downloadLimit; } ret = 0; if (readMax) { wxMutexLocker lock(m_sendLocker); ret = Read(buf, readMax); if (Error() || (ret == 0)) { if (LastError() == wxSOCKET_WOULDBLOCK) { pendingOnReceive = true; } return; } } // Bandwidth control if (downloadLimitEnable) { // Update limit if (ret >= downloadLimit) { downloadLimit = 0; } else { downloadLimit -= ret; } } // CPU load improvement // Detect if the socket's buffer is empty (or the size did match...) pendingOnReceive = (ret == readMax); if (pendingHeaderSize >= PACKET_HEADER_SIZE) { pendingPacketSize += ret; if (pendingPacketSize >= CPacket::GetPacketSizeFromHeader(pendingHeader)) { CScopedPtr packet(new CPacket(pendingHeader, pendingPacket)); pendingPacket = NULL; pendingPacketSize = 0; pendingHeaderSize = 0; // Bugfix We still need to check for a valid protocol // Remark: the default eMule v0.26b had removed this test...... switch (packet->GetProtocol()){ case OP_EDONKEYPROT: case OP_PACKEDPROT: case OP_EMULEPROT: case OP_ED2KV2HEADER: case OP_ED2KV2PACKEDPROT: break; default: OnError(ERR_WRONGHEADER); return; } // Process packet PacketReceived(packet.get()); } } else { pendingHeaderSize += ret; } } while (ret && pendingHeaderSize >= PACKET_HEADER_SIZE); } void CEMSocket::SetDownloadLimit(uint32 limit) { downloadLimit = limit; downloadLimitEnable = true; // CPU load improvement if(limit > 0 && pendingOnReceive == true){ OnReceive(0); } } void CEMSocket::DisableDownloadLimit() { downloadLimitEnable = false; // CPU load improvement if (pendingOnReceive == true){ OnReceive(0); } } /** * Queues up the packet to be sent. Another thread will actually send the packet. * * If the packet is not a control packet, and if the socket decides that its queue is * full and forceAdd is false, then the socket is allowed to refuse to add the packet * to its queue. It will then return false and it is up to the calling thread to try * to call SendPacket for that packet again at a later time. * * @param packet address to the packet that should be added to the queue * * @param delpacket if true, the responsibility for deleting the packet after it has been sent * has been transferred to this object. If false, don't delete the packet after it * has been sent. * * @param controlpacket the packet is a controlpacket * * @param forceAdd this packet must be added to the queue, even if it is full. If this flag is true * then the method can not refuse to add the packet, and therefore not return false. * * @return true if the packet was added to the queue, false otherwise */ void CEMSocket::SendPacket(CPacket* packet, bool delpacket, bool controlpacket, uint32 actualPayloadSize) { //printf("* SendPacket called on socket %p\n", this); wxMutexLocker lock(m_sendLocker); if (byConnected == ES_DISCONNECTED) { //printf("* Disconnected, drop packet\n"); if(delpacket) { delete packet; } } else { if (!delpacket){ packet = new CPacket(*packet); } if (controlpacket) { //printf("* Adding a control packet\n"); m_control_queue.push_back(packet); // queue up for controlpacket theApp->uploadBandwidthThrottler->QueueForSendingControlPacket(this, HasSent()); } else { //printf("* Adding a normal packet to the queue\n"); bool first = !((sendbuffer && !m_currentPacket_is_controlpacket) || !m_standard_queue.empty()); StandardPacketQueueEntry queueEntry = { actualPayloadSize, packet }; m_standard_queue.push_back(queueEntry); // reset timeout for the first time if (first) { lastFinishedStandard = ::GetTickCount(); m_bAccelerateUpload = true; // Always accelerate first packet in a block } } } } uint64 CEMSocket::GetSentBytesCompleteFileSinceLastCallAndReset() { wxMutexLocker lock( m_sendLocker ); uint64 sentBytes = m_numberOfSentBytesCompleteFile; m_numberOfSentBytesCompleteFile = 0; return sentBytes; } uint64 CEMSocket::GetSentBytesPartFileSinceLastCallAndReset() { wxMutexLocker lock( m_sendLocker ); uint64 sentBytes = m_numberOfSentBytesPartFile; m_numberOfSentBytesPartFile = 0; return sentBytes; } uint64 CEMSocket::GetSentBytesControlPacketSinceLastCallAndReset() { wxMutexLocker lock( m_sendLocker ); uint64 sentBytes = m_numberOfSentBytesControlPacket; m_numberOfSentBytesControlPacket = 0; return sentBytes; } uint64 CEMSocket::GetSentPayloadSinceLastCallAndReset() { wxMutexLocker lock( m_sendLocker ); uint64 sentBytes = m_actualPayloadSizeSent; m_actualPayloadSizeSent = 0; return sentBytes; } void CEMSocket::OnSend(int nErrorCode) { if (nErrorCode){ OnError(nErrorCode); return; } CEncryptedStreamSocket::OnSend(0); wxMutexLocker lock( m_sendLocker ); m_bBusy = false; if (byConnected != ES_DISCONNECTED) { byConnected = ES_CONNECTED; if (m_currentPacket_is_controlpacket) { // queue up for control packet theApp->uploadBandwidthThrottler->QueueForSendingControlPacket(this, HasSent()); } } } /** * Try to put queued up data on the socket. * * Control packets have higher priority, and will be sent first, if possible. * Standard packets can be split up in several package containers. In that case * all the parts of a split package must be sent in a row, without any control packet * in between. * * @param maxNumberOfBytesToSend This is the maximum number of bytes that is allowed to be put on the socket * this call. The actual number of sent bytes will be returned from the method. * * @param onlyAllowedToSendControlPacket This call we only try to put control packets on the sockets. * If there's a standard packet "in the way", and we think that this socket * is no longer an upload slot, then it is ok to send the standard packet to * get it out of the way. But it is not allowed to pick a new standard packet * from the queue during this call. Several split packets are counted as one * standard packet though, so it is ok to finish them all off if necessary. * * @return the actual number of bytes that were put on the socket. */ SocketSentBytes CEMSocket::Send(uint32 maxNumberOfBytesToSend, uint32 minFragSize, bool onlyAllowedToSendControlPacket) { wxMutexLocker lock(m_sendLocker); //printf("* Attempt to send a packet on socket %p\n", this); if (byConnected == ES_DISCONNECTED) { //printf("* Disconnected socket %p\n", this); SocketSentBytes returnVal = { false, 0, 0 }; return returnVal; } else if (m_bBusy && onlyAllowedToSendControlPacket) { //printf("* Busy socket %p\n", this); SocketSentBytes returnVal = { true, 0, 0 }; return returnVal; } bool anErrorHasOccured = false; uint32 sentStandardPacketBytesThisCall = 0; uint32 sentControlPacketBytesThisCall = 0; if (byConnected == ES_CONNECTED && IsEncryptionLayerReady() && (!m_bBusy || onlyAllowedToSendControlPacket)) { //printf("* Internal attemptto send on %p\n", this); if(minFragSize < 1) { minFragSize = 1; } maxNumberOfBytesToSend = GetNextFragSize(maxNumberOfBytesToSend, minFragSize); bool bWasLongTimeSinceSend = (::GetTickCount() - lastSent) > 1000; lastCalledSend = ::GetTickCount(); while(sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall < maxNumberOfBytesToSend && anErrorHasOccured == false && // don't send more than allowed. Also, there should have been no error in earlier loop (!m_control_queue.empty() || !m_standard_queue.empty() || sendbuffer != NULL) && // there must exist something to send (onlyAllowedToSendControlPacket == false || // this means we are allowed to send both types of packets, so proceed (sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall > 0 && (sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall) % minFragSize != 0) || (sendbuffer == NULL && !m_control_queue.empty()) || // There's a control packet in queue, and we are not currently sending anything, so we will handle the control packet next (sendbuffer != NULL && m_currentPacket_is_controlpacket == true) || // We are in the progress of sending a control packet. We are always allowed to send those (sendbuffer != NULL && m_currentPacket_is_controlpacket == false && bWasLongTimeSinceSend && !m_control_queue.empty() && m_standard_queue.empty() && (sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall) < minFragSize) // We have waited to long to clean the current packet (which may be a standard packet that is in the way). Proceed no matter what the value of onlyAllowedToSendControlPacket. ) ) { // If we are currently not in the progress of sending a packet, we will need to find the next one to send if(sendbuffer == NULL) { CPacket* curPacket = NULL; if(!m_control_queue.empty()) { // There's a control packet to send m_currentPacket_is_controlpacket = true; curPacket = m_control_queue.front(); m_control_queue.pop_front(); } else if(!m_standard_queue.empty() /*&& onlyAllowedToSendControlPacket == false*/) { // There's a standard packet to send m_currentPacket_is_controlpacket = false; StandardPacketQueueEntry queueEntry = m_standard_queue.front(); m_standard_queue.pop_front(); curPacket = queueEntry.packet; m_actualPayloadSize = queueEntry.actualPayloadSize; // remember this for statistics purposes. m_currentPackageIsFromPartFile = curPacket->IsFromPF(); } else { // Just to be safe. Shouldn't happen? // if we reach this point, then there's something wrong with the while condition above! wxFAIL; AddDebugLogLineC(logGeneral, wxT("EMSocket: Couldn't get a new packet! There's an error in the first while condition in EMSocket::Send()")); SocketSentBytes returnVal = { true, sentStandardPacketBytesThisCall, sentControlPacketBytesThisCall }; return returnVal; } // We found a packet to send. Get the data to send from the // package container and dispose of the container. sendblen = curPacket->GetRealPacketSize(); sendbuffer = curPacket->DetachPacket(); sent = 0; delete curPacket; CryptPrepareSendData((byte*)sendbuffer, sendblen); } // At this point we've got a packet to send in sendbuffer. Try to send it. Loop until entire packet // is sent, or until we reach maximum bytes to send for this call, or until we get an error. // NOTE! If send would block (returns WOULDBLOCK), we will return from this method INSIDE this loop. while (sent < sendblen && sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall < maxNumberOfBytesToSend && ( onlyAllowedToSendControlPacket == false || // this means we are allowed to send both types of packets, so proceed m_currentPacket_is_controlpacket || (bWasLongTimeSinceSend && (sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall) < minFragSize) || (sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall) % minFragSize != 0 ) && anErrorHasOccured == false) { uint32 tosend = sendblen-sent; if(!onlyAllowedToSendControlPacket || m_currentPacket_is_controlpacket) { if (maxNumberOfBytesToSend >= sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall && tosend > maxNumberOfBytesToSend-(sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall)) tosend = maxNumberOfBytesToSend-(sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall); } else if(bWasLongTimeSinceSend && (sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall) < minFragSize) { if (minFragSize >= sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall && tosend > minFragSize-(sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall)) tosend = minFragSize-(sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall); } else { uint32 nextFragMaxBytesToSent = GetNextFragSize(sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall, minFragSize); if (nextFragMaxBytesToSent >= sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall && tosend > nextFragMaxBytesToSent-(sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall)) tosend = nextFragMaxBytesToSent-(sentStandardPacketBytesThisCall + sentControlPacketBytesThisCall); } wxASSERT(tosend != 0 && tosend <= sendblen-sent); //DWORD tempStartSendTick = ::GetTickCount(); lastSent = ::GetTickCount(); uint32 result = CEncryptedStreamSocket::Write(sendbuffer+sent,tosend); if (Error()){ uint32 error = LastError(); if (error == wxSOCKET_WOULDBLOCK){ m_bBusy = true; SocketSentBytes returnVal = { true, sentStandardPacketBytesThisCall, sentControlPacketBytesThisCall }; return returnVal; // Send() blocked, onsend will be called when ready to send again } else{ // Send() gave an error anErrorHasOccured = true; } } else { // we managed to send some bytes. Perform bookkeeping. m_bBusy = false; m_hasSent = true; sent += result; // Log send bytes in correct class if(m_currentPacket_is_controlpacket == false) { sentStandardPacketBytesThisCall += result; if(m_currentPackageIsFromPartFile == true) { m_numberOfSentBytesPartFile += result; } else { m_numberOfSentBytesCompleteFile += result; } } else { sentControlPacketBytesThisCall += result; m_numberOfSentBytesControlPacket += result; } } } if (sent == sendblen){ // we are done sending the current packet. Delete it and set // sendbuffer to NULL so a new packet can be fetched. // ADUNANZA BEGIN #if 0 delete[] sendbuffer; #else if (sendbuffer) delete[] sendbuffer; #endif // ADUNANZA END sendbuffer = NULL; sendblen = 0; if(!m_currentPacket_is_controlpacket) { m_actualPayloadSizeSent += m_actualPayloadSize; m_actualPayloadSize = 0; lastFinishedStandard = ::GetTickCount(); // reset timeout m_bAccelerateUpload = false; // Safe until told otherwise } sent = 0; } } } if(onlyAllowedToSendControlPacket && (!m_control_queue.empty() || (sendbuffer != NULL && m_currentPacket_is_controlpacket))) { // enter control packet send queue // we might enter control packet queue several times for the same package, // but that costs very little overhead. Less overhead than trying to make sure // that we only enter the queue once. //printf("* Requeueing control packet on %p\n", this); theApp->uploadBandwidthThrottler->QueueForSendingControlPacket(this, HasSent()); } //printf("* Finishing send debug on %p\n",this); SocketSentBytes returnVal = { !anErrorHasOccured, sentStandardPacketBytesThisCall, sentControlPacketBytesThisCall }; return returnVal; } uint32 CEMSocket::GetNextFragSize(uint32 current, uint32 minFragSize) { if(current % minFragSize == 0) { return current; } else { return minFragSize*(current/minFragSize+1); } } /** * Decides the (minimum) amount the socket needs to send to prevent timeout. * * @author SlugFiller */ uint32 CEMSocket::GetNeededBytes() { uint32 sendgap; uint64 timetotal; uint64 timeleft; uint64 sizeleft, sizetotal; { wxMutexLocker lock(m_sendLocker); if (byConnected == ES_DISCONNECTED) { return 0; } if (!((sendbuffer && !m_currentPacket_is_controlpacket) || !m_standard_queue.empty())) { // No standard packet to send. Even if data needs to be sent to prevent timout, there's nothing to send. return 0; } if (((sendbuffer && !m_currentPacket_is_controlpacket)) && !m_control_queue.empty()) m_bAccelerateUpload = true; // We might be trying to send a block request, accelerate packet sendgap = ::GetTickCount() - lastCalledSend; timetotal = m_bAccelerateUpload?45000:90000; timeleft = ::GetTickCount() - lastFinishedStandard; if (sendbuffer && !m_currentPacket_is_controlpacket) { sizeleft = sendblen-sent; sizetotal = sendblen; } else { sizeleft = sizetotal = m_standard_queue.front().packet->GetRealPacketSize(); } } if (timeleft >= timetotal) return sizeleft; timeleft = timetotal-timeleft; if (timeleft*sizetotal >= timetotal*sizeleft) { // don't use 'GetTimeOut' here in case the timeout value is high, if (sendgap > SEC2MS(20)) return 1; // Don't let the socket itself time out - Might happen when switching from spread(non-focus) slot to trickle slot return 0; } uint64 decval = timeleft*sizetotal/timetotal; if (!decval) return sizeleft; if (decval < sizeleft) return sizeleft-decval+1; // Round up else return 1; } /** * Removes all packets from the standard queue that don't have to be sent for the socket to be able to send a control packet. * * Before a socket can send a new packet, the current packet has to be finished. If the current packet is part of * a split packet, then all parts of that split packet must be sent before the socket can send a control packet. * * This method keeps in standard queue only those packets that must be sent (rest of split packet), and removes everything * after it. The method doesn't touch the control packet queue. */ void CEMSocket::TruncateQueues() { wxMutexLocker lock(m_sendLocker); // Clear the standard queue totally // Please note! There may still be a standardpacket in the sendbuffer variable! CStdPacketQueue::iterator it = m_standard_queue.begin(); for (; it != m_standard_queue.end(); ++it) { delete it->packet; } m_standard_queue.clear(); } uint32 CEMSocket::GetTimeOut() const { return m_uTimeOut; } void CEMSocket::SetTimeOut(uint32 uTimeOut) { m_uTimeOut = uTimeOut; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/DownloadListCtrl.h0000644000175000017500000001573712050266603021735 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef DOWNLOADLISTCTRL_H #define DOWNLOADLISTCTRL_H #include // Needed for std::multimap #include #include "Types.h" // Needed for uint8 #include "Constants.h" // Needed for DownloadItemType #include "MuleListCtrl.h" // Needed for CMuleListCtrl class CPartFile; class wxBitmap; class wxRect; class wxDC; struct FileCtrlItem_Struct; /** * This class is responsible for representing the download queue. * * The CDownlodListCtrl class is responsible for drawing files being downloaded. * It is in many ways primary widget within the application, since it is here that * users can inspect and manipulate their current downloads. * */ class CDownloadListCtrl : public CMuleListCtrl { public: /** * Constructor. * * @see CMuleListCtrl::CMuleListCtrl for documentation of parameters. */ CDownloadListCtrl( wxWindow *parent, wxWindowID winid = -1, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator, const wxString &name = wxT("downloadlistctrl") ); /** * Destructor. */ virtual ~CDownloadListCtrl(); /** * Adds a file to the list, but it wont show unless it matches the current category. * * @param A valid pointer to a new partfile. * * Please note that duplicates wont be added. */ void AddFile( CPartFile* file ); /** * Removes the specified file from the list. * * @param file A valid pointer of the file to be removed. * * This function also removes any sources assosiated with the file. */ void RemoveFile( CPartFile* file ); /** * Shows or hides the sources of a specific file. * * @param file A valid pointer to the file to be shown/hidden. * @param show Whenever or not to show the file. * * If the file is hidden, then its sources will also be hidden. */ void ShowFile( CPartFile* file, bool show ); /** * Updates the state of the specified item, possibly causing a redrawing. * * @param toupdate The source or file to be updated. * * Calling this function with a file as the argument will ensure that the * file is hidden/shown depending on its state and the currently selected * category. */ void UpdateItem(const void* toupdate); /** * Returns the current category. */ uint8 GetCategory() const; /** * Changes the displayed category and updates the list of shown files. * * @param newCategory The new category to display. */ void ChangeCategory( int newCategory ); /** * Clears all completed files from the list. */ void ClearCompleted(); /** * Perform client update when item selection has changed. */ void DoItemSelectionChanged(); protected: /// Return old column order. wxString GetOldColumnOrder() const; private: /** * Updates the displayed number representing the amount of files currently shown. */ void ShowFilesCount( int diff ); /** * @see CMuleListCtrl::GetTTSText */ virtual wxString GetTTSText(unsigned item) const; /** * Overloaded function needed for custom drawing of items. */ virtual void OnDrawItem( int item, wxDC* dc, const wxRect& rect, const wxRect& rectHL, bool highlighted ); /** * Draws a file item. */ void DrawFileItem( wxDC* dc, int nColumn, const wxRect& rect, FileCtrlItem_Struct* item ) const; /** * Draws the status (chunk) bar for a file. */ void DrawFileStatusBar( const CPartFile* file, wxDC* dc, const wxRect& rect, bool bFlat ) const; static int wxCALLBACK SortProc(wxUIntPtr item1, wxUIntPtr item2, long sortData); static int Compare( const CPartFile* file1, const CPartFile* file2, long lParamSort ); // Event-handlers for files void OnCancelFile( wxCommandEvent& event ); void OnSetPriority( wxCommandEvent& event ); void OnSwapSources( wxCommandEvent& event ); // ADUNANZA BEGIN #if !defined(CLIENT_GUI) void OnAduStreamingView( wxCommandEvent& event ); #endif // ADUNANZA END void OnSetCategory( wxCommandEvent& event ); void OnSetStatus( wxCommandEvent& event ); void OnClearCompleted( wxCommandEvent& event ); void OnGetLink( wxCommandEvent& event ); void OnGetFeedback( wxCommandEvent& event ); void OnViewFileInfo( wxCommandEvent& event ); void OnViewFileComments( wxCommandEvent& event ); void OnPreviewFile( wxCommandEvent& event ); // Misc event-handlers void OnItemActivated( wxListEvent& event ); void OnMouseRightClick( wxListEvent& event ); void OnMouseMiddleClick( wxListEvent& event ); void OnKeyPressed( wxKeyEvent& event ); void OnItemSelectionChanged( wxListEvent& event ); /** * Executes the user-selected preview command on the specified file. * * @file The file to be previewed. */ void PreviewFile(CPartFile* file); /** * Show file detail dialog for item at index */ void ShowFileDetailDialog(long index); //! The type of list used to store items on the listctrl. typedef std::multimap ListItems; //! Shortcut to the pair-type used on the list. typedef ListItems::value_type ListItemsPair; //! This pair is used when searching for equal-ranges. typedef std::pair< ListItems::iterator, ListItems::iterator > ListIteratorPair; //! This list contains everything shown on the list. Sources are only to //! be found on this list if they are being displayed, whereas files can //! always be found on this list, even if they are currently hidden. ListItems m_ListItems; //! Pointer to the current menu object, used to avoid multiple menus. wxMenu* m_menu; //! Cached brush object. wxBrush m_hilightBrush; //! Cached brush object. wxBrush m_hilightUnfocusBrush; //! The currently displayed category uint8 m_category; //! Flag if change of item selection is pending bool m_ItemSelectionChangePending; //! The number of displayed files int m_filecount; DECLARE_EVENT_TABLE() }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/CFile.h0000644000175000017500000001337412050266603017462 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 1998-2011 Vadim Zeitlin ( zeitlin@dptmaths.ens-cachan.fr ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef CFILE_H #define CFILE_H #include // Needed for CPath #include "SafeFile.h" // Needed for CFileDataIO #include // Needed for constants #ifdef _MSC_VER // silly warnings about deprecated functions #pragma warning(disable:4996) #endif /** * This class is a modified version of the wxFile class. * * In addition to implementing the CFileDataIO interface, * it offers improved support for UTF8 filenames and 64b * file-IO on both windows and unix-like systems. * * @see wxFile */ class CFile : public CFileDataIO { public: //! Standard values for file descriptor enum { fd_invalid = -1, fd_stdin, fd_stdout, fd_stderr }; /** @see wxFile::OpenMode */ enum OpenMode { read, write, read_write, write_append, write_excl, write_safe }; /** * Creates a closed file. */ CFile(); /** * Constructor, calls Open on the specified file. * * To check if the file was successfully opened, a * call to IsOpened() is required. */ CFile(const CPath& path, OpenMode mode = read); CFile(const wxString& path, OpenMode mode = read); /** * Destructor, closes the file if opened. */ virtual ~CFile(); /** * Opens a file. * * @param path The full or relative path to the file. * @param mode The opening mode. * @param accessMode The permissions in case a new file is created. * @return True if the file was opened, false otherwise. * * Calling Open with the openmodes 'write' or 'write_append' will * create the specified file if it does not already exist. * * Calling Open with the openmode 'write_safe' will append ".new" * to the file name and otherwise work like 'write'. * On close it will be renamed to the original name. * Close() has to be called manually - destruct won't rename the file! * * If an accessMode is not explicitly specified, the accessmode * specified via CPreferences::GetFilePermissions will be used. */ bool Open(const CPath& path, OpenMode mode = read, int accessMode = wxS_DEFAULT); bool Open(const wxString& path, OpenMode mode = read, int accessMode = wxS_DEFAULT); /** * Reopens a file which was opened and closed before. * * @param mode The opening mode. * * The filename used for last open is used again. * No return value - function throws on failure. */ void Reopen(OpenMode mode); /** * Calling Create is equivilant of calling open with OpenMode 'write'. * * @param overwrite Specifies if the target file should be overwritten, * in case that it already exists. * * @see CFile::Open */ bool Create(const CPath& path, bool overwrite = false, int accessMode = wxS_DEFAULT); bool Create(const wxString& path, bool overwrite = false, int accessMode = wxS_DEFAULT); /** * Closes the file. * * Note that calling Close on an closed file * is an illegal operation. */ bool Close(); /** * Returns the file descriptior assosiated with the file. * * Note that direct manipulation of the descriptor should * be avoided! That's what this class is for. */ int fd() const; /** * Flushes data not yet written. * * Note that calling Flush on an closed file * is an illegal operation. */ bool Flush(); /** * @see CSafeFileIO::GetLength * * Note that calling GetLength on a closed file * is an illegal operation. */ virtual uint64 GetLength() const; /** * Resizes the file to the specified length. */ bool SetLength(uint64 newLength); /** * @see CSafeFileIO::GetPosition * * Note that calling GetPosition on a closed file * is an illegal operation. */ virtual uint64 GetPosition() const; /** * Returns the current available bytes to read on the file before EOF * */ virtual uint64 GetAvailable() const; /** * Returns the path of the currently opened file. * */ const CPath& GetFilePath() const; /** * Returns true if the file is opened, false otherwise. */ bool IsOpened() const; protected: /** @see CFileDataIO::doRead **/ virtual sint64 doRead(void* buffer, size_t count) const; /** @see CFileDataIO::doWrite **/ virtual sint64 doWrite(const void* buffer, size_t count); /** @see CFileDataIO::doSeek **/ virtual sint64 doSeek(sint64 offset) const; private: //! A CFile is neither copyable nor assignable. //@{ CFile(const CFile&); CFile& operator=(const CFile&); //@} //! File descriptor or 'fd_invalid' if not opened int m_fd; //! The full path to the current file. CPath m_filePath; //! Are we using safe write mode? bool m_safeWrite; }; /** * This exception is thrown by CFile if a seek or tell fails. */ struct CSeekFailureException : public CIOFailureException { CSeekFailureException(const wxString& desc); }; #endif // CFILE_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/Parser.cpp0000644000175000017500000013204012050266603020257 0ustar l3onl3on/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (c) 1984-2008 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Using locations. */ #define YYLSP_NEEDED 0 /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { TOK_STRING = 258, TOK_AND = 259, TOK_OR = 260, TOK_NOT = 261, TOK_ED2K_LINK = 262 }; #endif /* Tokens. */ #define TOK_STRING 258 #define TOK_AND 259 #define TOK_OR 260 #define TOK_NOT 261 #define TOK_ED2K_LINK 262 /* Copy the first part of user declarations. */ #line 1 "./Parser.y" class wxString; #include "Scanner.h.in" #include "Scanner.h" #include "OtherFunctions.h" #include "SearchExpr.h" #include "libs/common/StringFunctions.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern wxArrayString _astrParserErrors; void ParsedSearchExpression(const CSearchExpr* pexpr); int yyerror(const char* errstr); int yyerror(wxString errstr); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 1 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 23 "./Parser.y" { wxString* pstr; CSearchExpr* pexpr; } /* Line 187 of yacc.c. */ #line 137 "Parser.cpp" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 150 "Parser.cpp" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 15 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 52 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 10 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 4 /* YYNRULES -- Number of rules. */ #define YYNRULES 18 /* YYNRULES -- Number of states. */ #define YYNSTATES 28 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 262 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 5, 7, 10, 12, 16, 20, 24, 28, 32, 36, 39, 43, 46, 49, 52, 54 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 11, 0, -1, 12, -1, 7, -1, 12, 1, -1, 13, -1, 12, 4, 12, -1, 12, 5, 12, -1, 12, 6, 12, -1, 8, 12, 9, -1, 12, 5, 1, -1, 12, 6, 1, -1, 8, 1, -1, 8, 12, 1, -1, 4, 1, -1, 5, 1, -1, 6, 1, -1, 3, -1, 13, 3, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 42, 42, 48, 57, 66, 67, 77, 87, 97, 102, 108, 114, 119, 125, 130, 135, 142, 147 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "TOK_STRING", "TOK_AND", "TOK_OR", "TOK_NOT", "TOK_ED2K_LINK", "'('", "')'", "$accept", "action", "searchexpr", "and_strings", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 40, 41 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 10, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 1, 2, 1, 3, 3, 3, 3, 3, 3, 2, 3, 2, 2, 2, 1, 2 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 17, 0, 0, 0, 3, 0, 0, 0, 5, 14, 15, 16, 12, 0, 1, 4, 0, 0, 0, 18, 13, 9, 6, 10, 7, 11, 8 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 7, 8, 9 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -7 static const yytype_int8 yypact[] = { 38, -7, 1, 2, 6, -7, 13, 15, 34, 29, -7, -7, -7, -7, 0, -7, -7, 44, 19, 25, -7, -7, -7, 30, -7, 4, -7, -7 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -7, -7, -6, -7 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -3 static const yytype_int8 yytable[] = { 14, 21, 10, 11, 17, 18, 19, 12, 17, 22, 19, 23, 25, 27, 13, 15, 1, 2, 3, 4, 24, 6, 1, 2, 3, 4, 26, 6, 1, 2, 3, 4, 20, 6, -2, 16, 19, 0, 17, 18, 19, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 0, 6 }; static const yytype_int8 yycheck[] = { 6, 1, 1, 1, 4, 5, 6, 1, 4, 9, 6, 17, 18, 19, 1, 0, 3, 4, 5, 6, 1, 8, 3, 4, 5, 6, 1, 8, 3, 4, 5, 6, 3, 8, 0, 1, 6, -1, 4, 5, 6, 3, 4, 5, 6, 7, 8, 3, 4, 5, 6, -1, 8 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 3, 4, 5, 6, 7, 8, 11, 12, 13, 1, 1, 1, 1, 12, 0, 1, 4, 5, 6, 3, 1, 9, 12, 1, 12, 1, 12 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else # define YYLEX yylex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule) #else static void yy_reduce_print (yyvsp, yyrule) YYSTYPE *yyvsp; int yyrule; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yymsg, yytype, yyvaluep) const char *yymsg; int yytype; YYSTYPE *yyvaluep; #endif { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void) #else int yyparse () #endif #endif { int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: #line 43 "./Parser.y" { ParsedSearchExpression((yyvsp[(1) - (1)].pexpr)); delete (yyvsp[(1) - (1)].pexpr); return 0; ;} break; case 3: #line 49 "./Parser.y" { CSearchExpr* pexpr = new CSearchExpr(*(yyvsp[(1) - (1)].pstr)); ParsedSearchExpression(pexpr); delete pexpr; delete (yyvsp[(1) - (1)].pstr); return 0; ;} break; case 4: #line 58 "./Parser.y" { yyerror(wxT("Undefined search expression error")); delete (yyvsp[(1) - (2)].pexpr); return 1; ;} break; case 6: #line 68 "./Parser.y" { CSearchExpr* pexpr = new CSearchExpr; pexpr->Add(SEARCHOP_AND); pexpr->Add((yyvsp[(1) - (3)].pexpr)); pexpr->Add((yyvsp[(3) - (3)].pexpr)); (yyval.pexpr) = pexpr; delete (yyvsp[(1) - (3)].pexpr); delete (yyvsp[(3) - (3)].pexpr); ;} break; case 7: #line 78 "./Parser.y" { CSearchExpr* pexpr = new CSearchExpr; pexpr->Add(SEARCHOP_OR); pexpr->Add((yyvsp[(1) - (3)].pexpr)); pexpr->Add((yyvsp[(3) - (3)].pexpr)); (yyval.pexpr) = pexpr; delete (yyvsp[(1) - (3)].pexpr); delete (yyvsp[(3) - (3)].pexpr); ;} break; case 8: #line 88 "./Parser.y" { CSearchExpr* pexpr = new CSearchExpr; pexpr->Add(SEARCHOP_NOT); pexpr->Add((yyvsp[(1) - (3)].pexpr)); pexpr->Add((yyvsp[(3) - (3)].pexpr)); (yyval.pexpr) = pexpr; delete (yyvsp[(1) - (3)].pexpr); delete (yyvsp[(3) - (3)].pexpr); ;} break; case 9: #line 98 "./Parser.y" { (yyval.pexpr) = (yyvsp[(2) - (3)].pexpr); ;} break; case 10: #line 103 "./Parser.y" { yyerror(wxT("Missing right operand for OR on search expression")); delete (yyvsp[(1) - (3)].pexpr); return 1; ;} break; case 11: #line 109 "./Parser.y" { yyerror(wxT("Missing operand for NOT on search expression")); delete (yyvsp[(1) - (3)].pexpr); return 1; ;} break; case 12: #line 115 "./Parser.y" { yyerror(wxT("Missing left parenthesis on search expression")); return 1; ;} break; case 13: #line 120 "./Parser.y" { yyerror(wxT("Missing closing parenthesis on search expression")); delete (yyvsp[(2) - (3)].pexpr); return 1; ;} break; case 14: #line 126 "./Parser.y" { yyerror(wxT("Missing left operand for AND on search expression")); return 1; ;} break; case 15: #line 131 "./Parser.y" { yyerror(wxT("Missing left operand for OR on search expression")); return 1; ;} break; case 16: #line 136 "./Parser.y" { yyerror(wxT("Missing left operand for NOT on search expression (?)")); return 1; ;} break; case 17: #line 143 "./Parser.y" { (yyval.pexpr) = new CSearchExpr(*(yyvsp[(1) - (1)].pstr)); delete (yyvsp[(1) - (1)].pstr); ;} break; case 18: #line 148 "./Parser.y" { /*$1->Concatenate($2); delete $2;*/ CSearchExpr* pexpr = new CSearchExpr; pexpr->Add(SEARCHOP_AND); pexpr->Add((yyvsp[(1) - (2)].pexpr)); pexpr->Add(*(yyvsp[(2) - (2)].pstr)); (yyval.pexpr) = pexpr; delete (yyvsp[(1) - (2)].pexpr); delete (yyvsp[(2) - (2)].pstr); ;} break; /* Line 1267 of yacc.c. */ #line 1513 "Parser.cpp" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (yymsg); } else { yyerror (YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 161 "./Parser.y" int yyerror(const char* errstr) { // Errors created by yacc generated code //yyerror ("syntax error: cannot back up"); //yyerror ("syntax error; also virtual memory exhausted"); //yyerror ("syntax error"); //yyerror ("parser stack overflow"); _astrParserErrors.Add(char2unicode(errstr)); return EXIT_FAILURE; } int yyerror(wxString errstr) { _astrParserErrors.Add(errstr); return EXIT_FAILURE; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/Logger.h0000644000175000017500000002570012050266603017713 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2005-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef LOGGER_H #define LOGGER_H #include #include #include enum DebugType { //! Standard warning, not debug logStandard = -1, //! General warnings/errors. logGeneral = 0, //! Warnings/Errors for the main hashing thread. logHasher, //! Warnings/Errors for client-objects. logClient, //! Warnings/Errors for the local client protocol. logLocalClient, //! Warnings/Errors for the remote client protocol. logRemoteClient, //! Warnings/Errors when parsing packets. logPacketErrors, //! Warnings/Errors for the CFile class. logCFile, //! Warnings/Errors related to reading/writing files. logFileIO, //! Warnings/Errors when using the zLib library. logZLib, //! Warnings/Errors for the AICH-syncronization thread. logAICHThread, //! Warnings/Errors for transfering AICH hash-sets. logAICHTransfer, //! Warnings/Errors when recovering with AICH. logAICHRecovery, //! Warnings/Errors for the CListenSocket class. logListenSocket, //! Warnings/Errors for Client-Credits. logCredits, //! Warnings/Errors for the client UDP socket. logClientUDP, //! Warnings/Errors for the download-queue. logDownloadQueue, //! Warnings/Errors for the IP-Filter. logIPFilter, //! Warnings/Errors for known-files. logKnownFiles, //! Warnings/Errors for part-files. logPartFile, //! Warnings/Errors for SHA-hashset creation. logSHAHashSet, //! Warnings/Errors for servers, server connections. logServer, //! Warnings/Errors for proxy. logProxy, //! Warnings/Errors related to searching. logSearch, //! Warnings/Errors related to the server UDP socket. logServerUDP, //! Warning/Errors related to Kademlia UDP comunication on client logClientKadUDP, //! Warning/Errors related to Kademlia Search logKadSearch, //! Warning/Errors related to Kademlia Routing logKadRouting, //! Warning/Errors related to Kademlia Indexing logKadIndex, //! Warning/Errors related to Kademlia Main Thread logKadMain, //! Warning/Errors related to Kademlia Preferences logKadPrefs, //! Warnings/Errors related to partfile importer logPfConvert, //! Warnings/Errors related to the basic UDP socket-class. logMuleUDP, //! Warnings/Errors related to the thread-scheduler. logThreads, //! Warnings/Errors related to the Universal Plug and Play subsystem. logUPnP, //! Warnings/Errors related to the UDP Firewall Tester logKadUdpFwTester, //! Warnings/Errors related to Kad packet tracking. logKadPacketTracking, //! Warnings/Errors related to Kad entry tracking. logKadEntryTracking, //! Full log of external connection packets logEC, //! Warnings/Errors related to HTTP traffic logHTTP // IMPORTANT NOTE: when you add values to this enum, update the g_debugcats // array in Logger.cpp! }; /** * Container-class for the debugging categories. */ class CDebugCategory { public: /** * Constructor. * * @param type The actual debug-category type. * @param name The user-readable name. */ CDebugCategory( DebugType type, const wxString& name ) : m_name(name), m_type(type), m_enabled(false) {} /** * Returns true if the category is enabled. */ bool IsEnabled() const { return m_enabled; } /** * Enables/Disables the category. */ void SetEnabled( bool enabled ) { m_enabled = enabled; } /** * Returns the user-readable name. */ const wxString& GetName() const { return m_name; } /** * Returns the actual type. */ DebugType GetType() const { return m_type; } private: //! The user-readable name. wxString m_name; //! The actual type. DebugType m_type; //! Whenever or not the category is enabled. bool m_enabled; }; /** * Functions for logging operations. */ class CLogger: public wxEvtHandler { public: /** * Returns true if debug-messages should be generated for a specific category. */ #ifdef __DEBUG__ bool IsEnabled( DebugType ) const; #else bool IsEnabled( DebugType ) const { return false; } #endif /** * Enables or disables debug-messages for a specific category. */ void SetEnabled( DebugType type, bool enabled ); /** * Returns true if logging to stdout is enabled */ bool IsEnabledStdoutLog() const { return m_StdoutLog; } /** * Enables or disables logging to stdout. */ void SetEnabledStdoutLog(bool enabled) { m_StdoutLog = enabled; } /** * Logs the specified line of text, prefixed with the name of the DebugType. * (except for logStandard) * * @param file * @param line * @param critical If true, then the message will be made visible directly to the user. * @param type The debug-category, the name of which will be prepended to the line. * @param str The actual line of text. * * This function is thread-safe. If it is called by the main thread, the * event will be sent directly to the application, otherwise it will be * queued in the event-loop. */ void AddLogLine( const wxString &file, int line, bool critical, DebugType type, const wxString &str, bool toStdout = false, bool toGUI = true); // for UPnP void AddLogLine( const wxString &file, int line, bool critical, DebugType type, const std::ostringstream &msg); void AddLogLine( const wxString &file, int line, bool critical, const std::ostringstream &msg); /** * Returns a category specified by index. */ const CDebugCategory& GetDebugCategory( int index ); /** * Returns the number of debug-categories. */ unsigned int GetDebugCategoryCount(); /** * Open Logfile, true on success */ bool OpenLogfile(const wxString & name); /** * Close Logfile */ void CloseLogfile(); /** * Get name of Logfile */ const wxString & GetLogfileName() const { return m_LogfileName; } /** * Event handler */ void OnLoggingEvent(class CLoggingEvent& evt); /** * Construct */ CLogger() { applog = NULL; m_StdoutLog = false; m_count = 0; } private: class wxFFileOutputStream* applog; // the logfile wxString m_LogfileName; wxString m_ApplogBuf; bool m_StdoutLog; int m_count; // output line counter /** * Write all waiting log info to the logfile */ void FlushApplog(); /** * Really output a single line */ void DoLine(const wxString & line, bool toStdout, bool toGUI); DECLARE_EVENT_TABLE() }; extern CLogger theLogger; /** * This class forwards log-lines from wxWidgets to CLogger. */ class CLoggerTarget : public wxLog { public: CLoggerTarget(); /** * @see wxLog::DoLogString */ #if wxCHECK_VERSION(2, 9, 0) void DoLogText(const wxString &msg); #else void DoLogString(const wxChar *msg, time_t); #endif }; DECLARE_LOCAL_EVENT_TYPE(MULE_EVT_LOGLINE, -1) /** This event is sent when a log-line is queued. */ class CLoggingEvent : public wxEvent { public: CLoggingEvent(bool critical, bool toStdout, bool toGUI, const wxString& msg) : wxEvent(-1, MULE_EVT_LOGLINE) , m_critical(critical) , m_stdout(toStdout) , m_GUI(toGUI) // Deep copy, to avoid thread-unsafe reference counting. */ , m_msg(msg.c_str(), msg.Length()) { } const wxString& Message() const { return m_msg; } bool IsCritical() const { return m_critical; } bool ToStdout() const { return m_stdout; } bool ToGUI() const { return m_GUI; } wxEvent* Clone() const { return new CLoggingEvent(m_critical, m_stdout, m_GUI, m_msg); } private: bool m_critical; bool m_stdout; bool m_GUI; wxString m_msg; }; typedef void (wxEvtHandler::*MuleLogEventFunction)(CLoggingEvent&); //! Event-handler for completed hashings of new shared files and partfiles. #define EVT_MULE_LOGGING(func) \ DECLARE_EVENT_TABLE_ENTRY(MULE_EVT_LOGLINE, -1, -1, \ (wxObjectEventFunction) (wxEventFunction) \ wxStaticCastEvent(MuleLogEventFunction, &func), (wxObject*) NULL), // access the logfile for EC class CLoggerAccess { private: class wxFFileInputStream * m_logfile; class wxCharBuffer * m_buffer; size_t m_bufferlen; size_t m_pos; bool m_ready; public: // // construct/destruct // CLoggerAccess(); ~CLoggerAccess(); // // Reset (used when logfile is cleared) // void Reset(); // // get a String (if there is one) // bool GetString(wxString & s); // // is a String available ? // bool HasString(); }; /** * These macros should be used when logging. The * AddLogLineM macro will simply call one of the * two CLogger::AddLogLine functions depending on * parameters, but AddDebugLogLine* will only log * a message if the message is either critical or * the specified debug-type is enabled in the * preferences. * AddLogLineMS will also always print to stdout. */ #ifdef MULEUNIT #define AddDebugLogLineN(...) do {} while (false) #define AddLogLineN(...) do {} while (false) #define AddLogLineNS(...) do {} while (false) #define AddDebugLogLineC(...) do {} while (false) #define AddLogLineC(...) do {} while (false) #define AddLogLineCS(...) do {} while (false) #else // Macro for UPnP. This is not a debug macro, but wants its category printed nevertheless (sigh). #define AddLogLineU(critical, type, string) theLogger.AddLogLine(__TFILE__, __LINE__, critical, type, string) // Macros for 'N'on critical logging #ifdef __DEBUG__ #define AddDebugLogLineN(type, string) theLogger.AddLogLine(__TFILE__, __LINE__, false, type, string) #else #define AddDebugLogLineN(type, string) do {} while (false) #endif #define AddLogLineN(string) theLogger.AddLogLine(__TFILE__, __LINE__, false, logStandard, string) #define AddLogLineNS(string) theLogger.AddLogLine(__TFILE__, __LINE__, false, logStandard, string, true) // Macros for 'C'ritical logging #define AddDebugLogLineC(type, string) theLogger.AddLogLine(__TFILE__, __LINE__, true, type, string) #define AddLogLineC(string) theLogger.AddLogLine(__TFILE__, __LINE__, true, logStandard, string) #define AddLogLineCS(string) theLogger.AddLogLine(__TFILE__, __LINE__, true, logStandard, string, true) // Macros for logging to logfile only #define AddDebugLogLineF(type, string) theLogger.AddLogLine(__TFILE__, __LINE__, false, type, string, false, false) #define AddLogLineF(string) theLogger.AddLogLine(__TFILE__, __LINE__, false, logStandard, string, false, false) #endif #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/SearchListCtrl.h0000644000175000017500000002131712050266603021362 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef SEARCHLISTCTRL_H #define SEARCHLISTCTRL_H #include "wx/colour.h" // Needed for wxColour #include // Needed for wxRegExp #include "MuleListCtrl.h" // Needed for CMuleListCtrl class CSearchList; class CSearchFile; /** * This class is used to display search results. * * Results on added to the list will be colored according to * the number of sources and other parameters (see UpdateColor). * * To display results, first use the ShowResults function, which will display * all current results with the specified id and afterwards you can use the * AddResult function to add new results or the UpdateResult function to update * already present results. Please note that it is not possible to add results * with the AddResult function before calling ShowResults. */ class CSearchListCtrl : public CMuleListCtrl { public: /** * Constructor. * * @see CMuleListCtrl::CMuleListCtrl for documentation of parameters. */ CSearchListCtrl( wxWindow *parent, wxWindowID winid = -1, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator, const wxString &name = wxT("mulelistctrl") ); /** * Destructor. */ virtual ~CSearchListCtrl(); /** * Adds ths specified file to the list. * * @param The new result to be shown. * * Please note that no duplicates checking is done, so the pointer should * point to a new file in order to avoid problems. Also note that the result * will be inserted sorted according to current sort-type, so there is no * need to resort the list after adding new items. */ void AddResult(CSearchFile* toshow); /** * Removes the specified file from the list. */ void RemoveResult(CSearchFile* toshow); /** * Updates the specified source. * * @param The search result to be updated. */ void UpdateResult(CSearchFile* toupdate); /** * Clears the list and inserts all results with the specified Id instead. * * @param nResult The ID of the results or Zero to simply reset the list. */ void ShowResults( long ResultsId ); /** * Updates the colors of item at the specified index. * * @param index The zero-based index of the item. * * This function sets the color of the item based on the following: * - Downloading files are marked in red. * - Known (shared/completed) files are marked in green. * - New files are marked in blue depending on the number of sources. * - Canceled files are marked in magenta. */ void UpdateItemColor(long index); /** * Returns the current Search Id. * * @return The Search Id of the displayed results (set through ShowResults()). */ wxUIntPtr GetSearchId(); /** * Sets the filter which decides which results should be shown. * * @param regExp A regular expression targeting the filenames. * @param invert If true, invert the results of the filter-test. * @param filterKnown Should files that are queued or known be filtered out. * * An invalid regExp will result in all results being displayed. */ void SetFilter(const wxString& regExp, bool invert, bool filterKnown); /** * Toggles the use of filtering on and off. */ void EnableFiltering(bool enabled); /** * Returns the number of items hidden due to filtering. */ size_t GetHiddenItemCount() const; /** * Attempts to download all selected items, updating color-scheme as needed. * * @param category The target category, or -1 to use the drop-down selection. */ void DownloadSelected(int category = -1); static wxString DetermineStatusPrintable(CSearchFile *toshow); protected: /// Return old column order. wxString GetOldColumnOrder() const; /** * Set the sort column * * @param column The column with which the list should be sorted. * @param order The order in which to sort the column. * * Note that attempting to sort a column in an unsupported order * is an illegal operation. */ void SetSorting(unsigned column, unsigned order); protected: typedef std::list ResultList; //! List used to store results that are hidden due to matching the filter. ResultList m_filteredOut; //! The current filter reg-exp. wxRegEx m_filter; //! The text from which the filter is compiled. wxString m_filterText; //! Controls if shared/queued results should be shown. bool m_filterKnown; //! Controls if the result of filter-hits should be inverted bool m_invert; //! Specifies if filtering should be used bool m_filterEnabled; /** * Returns true if the filename is filtered. */ bool IsFiltered(const CSearchFile* file); /** * Sorter function used by wxListCtrl::SortItems function. * * @see CMuleListCtrl::SetSortFunc * @see wxListCtrl::SortItems */ static int wxCALLBACK SortProc(wxUIntPtr item1, wxUIntPtr item2, long sortData); /** @see CMuleListCtrl::AltSortAllowed */ virtual bool AltSortAllowed(unsigned column) const; /** @see CMuleListCtrl::GetTTSText */ virtual wxString GetTTSText(unsigned item) const; /** * Helper function which syncs two lists. * * @param src The source list. * @param dst The list to be synced with the source list. * * This function syncronises the following settings of two lists: * - Sort column * - Sort direction * - Column widths * * If either sort column or direction is changed, then the dst list will * be resorted. This function is used to ensure that all results list act * as one, while still allowing individual selection. */ static void SyncLists( CSearchListCtrl* src, CSearchListCtrl* dst ); /** * Helper function which syncs all other lists against the specified one. * * @param src The list which all other lists should be synced against. * * This function just calls SyncLists() on all lists in s_lists, using * the src argument as the src argument of the SyncLists function. */ static void SyncOtherLists( CSearchListCtrl* src ); //! This list contains pointers to all current instances of CSearchListCtrl. static std::list s_lists; //! The ID of the search-results which the list is displaying or zero if unset. wxUIntPtr m_nResultsID; //! Custom drawing, needed to display children of search-results. void OnDrawItem(int item, wxDC* dc, const wxRect& rect, const wxRect& rectHL, bool highlighted); /** * Removes or adds child-entries for the given file. */ void ShowChildren(CSearchFile* file, bool show); /** * Event handler for right mouse clicks. */ void OnRightClick( wxListEvent& event ); /** * Event handler for double-clicks or enter. */ void OnItemActivated( wxListEvent& event ); /** * Event handler for left-clicks on the column headers. * * This eventhandler takes care of sync'ing all the other lists with this one. */ void OnColumnLClick( wxListEvent& event ); /** * Event handler for resizing of the columns. * * This eventhandler takes care of sync'ing all the other lists with this one. */ void OnColumnResize( wxListEvent& event ); /** * Event handler for get-url menu items. */ void OnPopupGetUrl( wxCommandEvent& event ); /** * Event handler for Razorback 2 stats menu items. */ void OnRazorStatsCheck( wxCommandEvent& event ); /** * Event handler for related search. */ void OnRelatedSearch( wxCommandEvent& event ); /** * Event handler for "mark as known". */ void OnMarkAsKnown( wxCommandEvent& event ); /** * Event handler for download-file(s) menu item. */ void OnPopupDownload( wxCommandEvent& event ); DECLARE_EVENT_TABLE() }; #endif // SEARCHLISTCTRL_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/UPnPBase.cpp0000644000175000017500000013653712050266603020457 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Marcelo Roberto Jimenez ( phoenix@amule.org ) // Copyright (c) 2006-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifdef HAVE_CONFIG_H # include "config.h" // Needed for ENABLE_UPNP #endif #ifdef ENABLE_UPNP #define UPNP_C #include "UPnPBase.h" // ADUNANZA BEGIN // Needed to understand LibUpnp version #include "upnpconfig.h" // Ubuntu in Libupnp 1.6.6 have no "UpnpString.h", so try at least 1.6.17 #if (UPNP_VERSION >= 10617) #include "UpnpString.h" #endif // ADUNANZA END #include // For dlopen(), dlsym(), dlclose() #include // For transform() #ifdef __GNUC__ #if __GNUC__ >= 4 #define REINTERPRET_CAST(x) reinterpret_cast #endif #endif #ifndef REINTERPRET_CAST // Let's hope that function pointers are equal in size to data pointers #define REINTERPRET_CAST(x) (x) #endif // ADUNANZA BEGIN // per problemi di compilazione su alcune distro che hanno probabilmente personalizzato LIBUPNP // se non ho capito male in alcune implementazioni Upnp_Event_Subscribe ha il membro "PublisherUrl" che NON e' una stringa ma una classe UpnpString inline const char* myGetURLFromPublisherURL(const char* s) { return s; } // Ubuntu in Libupnp 1.6.6 have no "UpnpString.h", so try at least 1.6.17 #if (UPNP_VERSION >= 10617) inline const char* myGetURLFromPublisherURL(const UpnpString* s) { return UpnpString_get_String(s); } #endif // ADUNANZA END /** * Case insensitive std::string comparison */ bool stdStringIsEqualCI(const std::string &s1, const std::string &s2) { std::string ns1(s1); std::string ns2(s2); std::transform(ns1.begin(), ns1.end(), ns1.begin(), tolower); std::transform(ns2.begin(), ns2.end(), ns2.begin(), tolower); return ns1 == ns2; } CUPnPPortMapping::CUPnPPortMapping( int port, const std::string &protocol, bool enabled, const std::string &description) : m_port(), m_protocol(protocol), m_enabled(enabled ? "1" : "0"), m_description(description), m_key() { std::ostringstream oss; oss << port; m_port = oss.str(); m_key = m_protocol + m_port; } const std::string &CUPnPLib::UPNP_ROOT_DEVICE = "upnp:rootdevice"; const std::string &CUPnPLib::UPNP_DEVICE_IGW = "urn:schemas-upnp-org:device:InternetGatewayDevice:1"; const std::string &CUPnPLib::UPNP_DEVICE_WAN = "urn:schemas-upnp-org:device:WANDevice:1"; const std::string &CUPnPLib::UPNP_DEVICE_WAN_CONNECTION = "urn:schemas-upnp-org:device:WANConnectionDevice:1"; const std::string &CUPnPLib::UPNP_DEVICE_LAN = "urn:schemas-upnp-org:device:LANDevice:1"; const std::string &CUPnPLib::UPNP_SERVICE_LAYER3_FORWARDING = "urn:schemas-upnp-org:service:Layer3Forwarding:1"; const std::string &CUPnPLib::UPNP_SERVICE_WAN_COMMON_INTERFACE_CONFIG = "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"; const std::string &CUPnPLib::UPNP_SERVICE_WAN_IP_CONNECTION = "urn:schemas-upnp-org:service:WANIPConnection:1"; const std::string &CUPnPLib::UPNP_SERVICE_WAN_PPP_CONNECTION = "urn:schemas-upnp-org:service:WANPPPConnection:1"; CUPnPLib::CUPnPLib(CUPnPControlPoint &ctrlPoint) : m_ctrlPoint(ctrlPoint) { } std::string CUPnPLib::GetUPnPErrorMessage(int code) const { return UpnpGetErrorMessage(code); } std::string CUPnPLib::processUPnPErrorMessage( const std::string &messsage, int errorCode, const DOMString errorString, IXML_Document *doc) const { std::ostringstream msg; if (errorString == NULL || *errorString == 0) { errorString = "Not available"; } if (errorCode > 0) { msg << "Error: " << messsage << ": Error code :'"; if (doc) { CUPnPError e(*this, doc); msg << e.getErrorCode() << "', Error description :'" << e.getErrorDescription() << "'."; } else { msg << errorCode << "', Error description :'" << errorString << "'."; } AddLogLineU(false, logUPnP, msg); } else { msg << "Error: " << messsage << ": UPnP SDK error: " << GetUPnPErrorMessage(errorCode) << " (" << errorCode << ")."; AddLogLineU(false, logUPnP, msg); } return msg.str(); } void CUPnPLib::ProcessActionResponse( IXML_Document *RespDoc, const std::string &actionName) const { std::ostringstream msg; msg << "Response: "; IXML_Element *root = Element_GetRootElement(RespDoc); IXML_Element *child = Element_GetFirstChild(root); if (child) { while (child) { const DOMString childTag = Element_GetTag(child); std::string childValue = Element_GetTextValue(child); msg << "\n " << childTag << "='" << childValue << "'"; child = Element_GetNextSibling(child); } } else { msg << "\n Empty response for action '" << actionName << "'."; } AddDebugLogLineN(logUPnP, msg); } /*! * \brief Returns the root node of a given document. */ IXML_Element *CUPnPLib::Element_GetRootElement( IXML_Document *doc) const { IXML_Element *root = REINTERPRET_CAST(IXML_Element *)( ixmlNode_getFirstChild( REINTERPRET_CAST(IXML_Node *)(doc))); return root; } /*! * \brief Returns the first child of a given element. */ IXML_Element *CUPnPLib::Element_GetFirstChild( IXML_Element *parent) const { IXML_Node *node = REINTERPRET_CAST(IXML_Node *)(parent); IXML_Node *child = ixmlNode_getFirstChild(node); return REINTERPRET_CAST(IXML_Element *)(child); } /*! * \brief Returns the next sibling of a given child. */ IXML_Element *CUPnPLib::Element_GetNextSibling( IXML_Element *child) const { IXML_Node *node = REINTERPRET_CAST(IXML_Node *)(child); IXML_Node *sibling = ixmlNode_getNextSibling(node); return REINTERPRET_CAST(IXML_Element *)(sibling); } /*! * \brief Returns the element tag (name) */ const DOMString CUPnPLib::Element_GetTag( IXML_Element *element) const { IXML_Node *node = REINTERPRET_CAST(IXML_Node *)(element); const DOMString tag = ixmlNode_getNodeName(node); return tag; } /*! * \brief Returns the TEXT node value of the current node. */ const std::string CUPnPLib::Element_GetTextValue( IXML_Element *element) const { if (!element) { return stdEmptyString; } IXML_Node *text = ixmlNode_getFirstChild( REINTERPRET_CAST(IXML_Node *)(element)); const DOMString s = ixmlNode_getNodeValue(text); std::string ret; if (s) { ret = s; } return ret; } /*! * \brief Returns the TEXT node value of the first child matching tag. */ const std::string CUPnPLib::Element_GetChildValueByTag( IXML_Element *element, const DOMString tag) const { IXML_Element *child = Element_GetFirstChildByTag(element, tag); return Element_GetTextValue(child); } /*! * \brief Returns the first child element that matches the requested tag or * NULL if not found. */ IXML_Element *CUPnPLib::Element_GetFirstChildByTag( IXML_Element *element, const DOMString tag) const { if (!element || !tag) { return NULL; } IXML_Node *node = REINTERPRET_CAST(IXML_Node *)(element); IXML_Node *child = ixmlNode_getFirstChild(node); const DOMString childTag = ixmlNode_getNodeName(child); while(child && childTag && strcmp(tag, childTag)) { child = ixmlNode_getNextSibling(child); childTag = ixmlNode_getNodeName(child); } return REINTERPRET_CAST(IXML_Element *)(child); } /*! * \brief Returns the next sibling element that matches the requested tag. Should be * used with the return value of Element_GetFirstChildByTag(). */ IXML_Element *CUPnPLib::Element_GetNextSiblingByTag( IXML_Element *element, const DOMString tag) const { if (!element || !tag) { return NULL; } IXML_Node *child = REINTERPRET_CAST(IXML_Node *)(element); const DOMString childTag = NULL; do { child = ixmlNode_getNextSibling(child); childTag = ixmlNode_getNodeName(child); } while(child && childTag && strcmp(tag, childTag)); return REINTERPRET_CAST(IXML_Element *)(child); } const std::string CUPnPLib::Element_GetAttributeByTag( IXML_Element *element, const DOMString tag) const { IXML_NamedNodeMap *NamedNodeMap = ixmlNode_getAttributes( REINTERPRET_CAST(IXML_Node *)(element)); IXML_Node *attribute = ixmlNamedNodeMap_getNamedItem(NamedNodeMap, tag); const DOMString s = ixmlNode_getNodeValue(attribute); std::string ret; if (s) { ret = s; } ixmlNamedNodeMap_free(NamedNodeMap); return ret; } CUPnPError::CUPnPError( const CUPnPLib &upnpLib, IXML_Document *errorDoc) : m_root (upnpLib.Element_GetRootElement(errorDoc)), m_ErrorCode (upnpLib.Element_GetChildValueByTag(m_root, "errorCode")), m_ErrorDescription(upnpLib.Element_GetChildValueByTag(m_root, "errorDescription")) { } CUPnPArgument::CUPnPArgument( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *argument, const std::string &WXUNUSED(SCPDURL)) : m_UPnPControlPoint(upnpControlPoint), m_name (upnpLib.Element_GetChildValueByTag(argument, "name")), m_direction (upnpLib.Element_GetChildValueByTag(argument, "direction")), m_retval (upnpLib.Element_GetFirstChildByTag(argument, "retval")), m_relatedStateVariable(upnpLib.Element_GetChildValueByTag(argument, "relatedStateVariable")) { std::ostringstream msg; msg << "\n Argument:" << "\n name: " << m_name << "\n direction: " << m_direction << "\n retval: " << m_retval << "\n relatedStateVariable: " << m_relatedStateVariable; AddDebugLogLineN(logUPnP, msg); } CUPnPAction::CUPnPAction( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *action, const std::string &SCPDURL) : m_UPnPControlPoint(upnpControlPoint), m_ArgumentList(upnpControlPoint, upnpLib, action, SCPDURL), m_name(upnpLib.Element_GetChildValueByTag(action, "name")) { std::ostringstream msg; msg << "\n Action:" << "\n name: " << m_name; AddDebugLogLineN(logUPnP, msg); } CUPnPAllowedValue::CUPnPAllowedValue( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *allowedValue, const std::string &WXUNUSED(SCPDURL)) : m_UPnPControlPoint(upnpControlPoint), m_allowedValue(upnpLib.Element_GetTextValue(allowedValue)) { std::ostringstream msg; msg << "\n AllowedValue:" << "\n allowedValue: " << m_allowedValue; AddDebugLogLineN(logUPnP, msg); } CUPnPStateVariable::CUPnPStateVariable( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *stateVariable, const std::string &SCPDURL) : m_UPnPControlPoint(upnpControlPoint), m_AllowedValueList(upnpControlPoint, upnpLib, stateVariable, SCPDURL), m_name (upnpLib.Element_GetChildValueByTag(stateVariable, "name")), m_dataType (upnpLib.Element_GetChildValueByTag(stateVariable, "dataType")), m_defaultValue(upnpLib.Element_GetChildValueByTag(stateVariable, "defaultValue")), m_sendEvents (upnpLib.Element_GetAttributeByTag (stateVariable, "sendEvents")) { std::ostringstream msg; msg << "\n StateVariable:" << "\n name: " << m_name << "\n dataType: " << m_dataType << "\n defaultValue: " << m_defaultValue << "\n sendEvents: " << m_sendEvents; AddDebugLogLineN(logUPnP, msg); } CUPnPSCPD::CUPnPSCPD( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *scpd, const std::string &SCPDURL) : m_UPnPControlPoint(upnpControlPoint), m_ActionList(upnpControlPoint, upnpLib, scpd, SCPDURL), m_ServiceStateTable(upnpControlPoint, upnpLib, scpd, SCPDURL), m_SCPDURL(SCPDURL) { } CUPnPArgumentValue::CUPnPArgumentValue() : m_argument(), m_value() { } CUPnPArgumentValue::CUPnPArgumentValue( const std::string &argument, const std::string &value) : m_argument(argument), m_value(value) { } CUPnPService::CUPnPService( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *service, const std::string &URLBase) : m_UPnPControlPoint(upnpControlPoint), m_upnpLib(upnpLib), m_serviceType(upnpLib.Element_GetChildValueByTag(service, "serviceType")), m_serviceId (upnpLib.Element_GetChildValueByTag(service, "serviceId")), m_SCPDURL (upnpLib.Element_GetChildValueByTag(service, "SCPDURL")), m_controlURL (upnpLib.Element_GetChildValueByTag(service, "controlURL")), m_eventSubURL(upnpLib.Element_GetChildValueByTag(service, "eventSubURL")), m_timeout(1801), m_SCPD(NULL) { std::ostringstream msg; int errcode; std::vector vscpdURL(URLBase.length() + m_SCPDURL.length() + 1); char *scpdURL = &vscpdURL[0]; errcode = UpnpResolveURL( URLBase.c_str(), m_SCPDURL.c_str(), scpdURL); if( errcode != UPNP_E_SUCCESS ) { msg << "Error generating scpdURL from " << "|" << URLBase << "|" << m_SCPDURL << "|."; AddDebugLogLineN(logUPnP, msg); } else { m_absSCPDURL = scpdURL; } std::vector vcontrolURL( URLBase.length() + m_controlURL.length() + 1); char *controlURL = &vcontrolURL[0]; errcode = UpnpResolveURL( URLBase.c_str(), m_controlURL.c_str(), controlURL); if( errcode != UPNP_E_SUCCESS ) { msg << "Error generating controlURL from " << "|" << URLBase << "|" << m_controlURL << "|."; AddDebugLogLineN(logUPnP, msg); } else { m_absControlURL = controlURL; } std::vector veventURL( URLBase.length() + m_eventSubURL.length() + 1); char *eventURL = &veventURL[0]; errcode = UpnpResolveURL( URLBase.c_str(), m_eventSubURL.c_str(), eventURL); if( errcode != UPNP_E_SUCCESS ) { msg << "Error generating eventURL from " << "|" << URLBase << "|" << m_eventSubURL << "|."; AddDebugLogLineN(logUPnP, msg); } else { m_absEventSubURL = eventURL; } msg << "\n Service:" << "\n serviceType: " << m_serviceType << "\n serviceId: " << m_serviceId << "\n SCPDURL: " << m_SCPDURL << "\n absSCPDURL: " << m_absSCPDURL << "\n controlURL: " << m_controlURL << "\n absControlURL: " << m_absControlURL << "\n eventSubURL: " << m_eventSubURL << "\n absEventSubURL: " << m_absEventSubURL; AddDebugLogLineN(logUPnP, msg); if (m_serviceType == upnpLib.UPNP_SERVICE_WAN_IP_CONNECTION || m_serviceType == upnpLib.UPNP_SERVICE_WAN_PPP_CONNECTION) { #if 0 m_serviceType == upnpLib.UPNP_SERVICE_WAN_PPP_CONNECTION || m_serviceType == upnpLib.UPNP_SERVICE_WAN_COMMON_INTERFACE_CONFIG || m_serviceType == upnpLib.UPNP_SERVICE_LAYER3_FORWARDING) { #endif #if 0 //#warning Delete this code on release. if (!upnpLib.m_ctrlPoint.WanServiceDetected()) { // This condition can be used to suspend the parse // of the XML tree. #endif //#warning Delete this code when m_WanService is no longer used. upnpLib.m_ctrlPoint.SetWanService(this); // Log it msg.str(""); msg << "WAN Service Detected: '" << m_serviceType << "'."; AddDebugLogLineC(logUPnP, msg); // Subscribe upnpLib.m_ctrlPoint.Subscribe(*this); #if 0 //#warning Delete this code on release. } else { msg.str(""); msg << "WAN service detected again: '" << m_serviceType << "'. Will only use the first instance."; AddDebugLogLineC(logUPnP, msg); } #endif } else { msg.str(""); msg << "Uninteresting service detected: '" << m_serviceType << "'. Ignoring."; AddDebugLogLineC(logUPnP, msg); } } CUPnPService::~CUPnPService() { } bool CUPnPService::Execute( const std::string &ActionName, const std::vector &ArgValue) const { std::ostringstream msg; if (m_SCPD.get() == NULL) { msg << "Service without SCPD Document, cannot execute action '" << ActionName << "' for service '" << GetServiceType() << "'."; AddDebugLogLineN(logUPnP, msg); return false; } std::ostringstream msgAction("Sending action "); // Check for correct action name ActionList::const_iterator itAction = m_SCPD->GetActionList().find(ActionName); if (itAction == m_SCPD->GetActionList().end()) { msg << "Invalid action name '" << ActionName << "' for service '" << GetServiceType() << "'."; AddDebugLogLineN(logUPnP, msg); return false; } msgAction << ActionName << "("; bool firstTime = true; // Check for correct Argument/Value pairs const CUPnPAction &action = *(itAction->second); for (unsigned int i = 0; i < ArgValue.size(); ++i) { ArgumentList::const_iterator itArg = action.GetArgumentList().find(ArgValue[i].GetArgument()); if (itArg == action.GetArgumentList().end()) { msg << "Invalid argument name '" << ArgValue[i].GetArgument() << "' for action '" << action.GetName() << "' for service '" << GetServiceType() << "'."; AddDebugLogLineN(logUPnP, msg); return false; } const CUPnPArgument &argument = *(itArg->second); if (tolower(argument.GetDirection()[0]) != 'i' || tolower(argument.GetDirection()[1]) != 'n') { msg << "Invalid direction for argument '" << ArgValue[i].GetArgument() << "' for action '" << action.GetName() << "' for service '" << GetServiceType() << "'."; AddDebugLogLineN(logUPnP, msg); return false; } const std::string relatedStateVariableName = argument.GetRelatedStateVariable(); if (!relatedStateVariableName.empty()) { ServiceStateTable::const_iterator itSVT = m_SCPD->GetServiceStateTable(). find(relatedStateVariableName); if (itSVT == m_SCPD->GetServiceStateTable().end()) { msg << "Inconsistent Service State Table, did not find '" << relatedStateVariableName << "' for argument '" << argument.GetName() << "' for action '" << action.GetName() << "' for service '" << GetServiceType() << "'."; AddDebugLogLineN(logUPnP, msg); return false; } const CUPnPStateVariable &stateVariable = *(itSVT->second); if ( !stateVariable.GetAllowedValueList().empty() && stateVariable.GetAllowedValueList().find(ArgValue[i].GetValue()) == stateVariable.GetAllowedValueList().end()) { msg << "Value not allowed '" << ArgValue[i].GetValue() << "' for state variable '" << relatedStateVariableName << "' for argument '" << argument.GetName() << "' for action '" << action.GetName() << "' for service '" << GetServiceType() << "'."; AddDebugLogLineN(logUPnP, msg); return false; } } if (firstTime) { firstTime = false; } else { msgAction << ", "; } msgAction << ArgValue[i].GetArgument() << "='" << ArgValue[i].GetValue() << "'"; } msgAction << ")"; AddDebugLogLineN(logUPnP, msgAction); // Everything is ok, make the action IXML_Document *ActionDoc = NULL; // ADUNANZA BEGIN // Back #if 0 if (ArgValue.size()) { #else if (!ArgValue.empty()) { #endif // ADUNANZA END for (unsigned int i = 0; i < ArgValue.size(); ++i) { int ret = UpnpAddToAction( &ActionDoc, action.GetName().c_str(), GetServiceType().c_str(), ArgValue[i].GetArgument().c_str(), ArgValue[i].GetValue().c_str()); if (ret != UPNP_E_SUCCESS) { m_upnpLib.processUPnPErrorMessage( "UpnpAddToAction", ret, NULL, NULL); return false; } } } else { ActionDoc = UpnpMakeAction( action.GetName().c_str(), GetServiceType().c_str(), 0, NULL); if (!ActionDoc) { msg << "Error: UpnpMakeAction returned NULL."; AddLogLineU(false, logUPnP, msg); return false; } } #if 0 // Send the action asynchronously UpnpSendActionAsync( m_UPnPControlPoint.GetUPnPClientHandle(), GetAbsControlURL().c_str(), GetServiceType().c_str(), NULL, ActionDoc, static_cast(&CUPnPControlPoint::Callback), NULL); return true; #endif // Send the action synchronously IXML_Document *RespDoc = NULL; int ret = UpnpSendAction( m_UPnPControlPoint.GetUPnPClientHandle(), GetAbsControlURL().c_str(), GetServiceType().c_str(), NULL, ActionDoc, &RespDoc); if (ret != UPNP_E_SUCCESS) { m_upnpLib.processUPnPErrorMessage( "UpnpSendAction", ret, NULL, RespDoc); ixmlDocument_free(ActionDoc); ixmlDocument_free(RespDoc); return false; } ixmlDocument_free(ActionDoc); // Check the response document m_upnpLib.ProcessActionResponse( RespDoc, action.GetName()); // Free the response document ixmlDocument_free(RespDoc); return true; } const std::string CUPnPService::GetStateVariable( const std::string &stateVariableName) const { std::ostringstream msg; DOMString StVarVal; int ret = UpnpGetServiceVarStatus( m_UPnPControlPoint.GetUPnPClientHandle(), GetAbsControlURL().c_str(), stateVariableName.c_str(), &StVarVal); if (ret != UPNP_E_SUCCESS) { msg << "GetStateVariable(\"" << stateVariableName << "\"): in a call to UpnpGetServiceVarStatus"; m_upnpLib.processUPnPErrorMessage( msg.str(), ret, StVarVal, NULL); return stdEmptyString; } msg << "GetStateVariable: " << stateVariableName << "='" << StVarVal << "'."; AddDebugLogLineN(logUPnP, msg); return stdEmptyString; } CUPnPDevice::CUPnPDevice( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *device, const std::string &URLBase) : m_UPnPControlPoint(upnpControlPoint), m_DeviceList(upnpControlPoint, upnpLib, device, URLBase), m_ServiceList(upnpControlPoint, upnpLib, device, URLBase), m_deviceType (upnpLib.Element_GetChildValueByTag(device, "deviceType")), m_friendlyName (upnpLib.Element_GetChildValueByTag(device, "friendlyName")), m_manufacturer (upnpLib.Element_GetChildValueByTag(device, "manufacturer")), m_manufacturerURL (upnpLib.Element_GetChildValueByTag(device, "manufacturerURL")), m_modelDescription (upnpLib.Element_GetChildValueByTag(device, "modelDescription")), m_modelName (upnpLib.Element_GetChildValueByTag(device, "modelName")), m_modelNumber (upnpLib.Element_GetChildValueByTag(device, "modelNumber")), m_modelURL (upnpLib.Element_GetChildValueByTag(device, "modelURL")), m_serialNumber (upnpLib.Element_GetChildValueByTag(device, "serialNumber")), m_UDN (upnpLib.Element_GetChildValueByTag(device, "UDN")), m_UPC (upnpLib.Element_GetChildValueByTag(device, "UPC")), m_presentationURL (upnpLib.Element_GetChildValueByTag(device, "presentationURL")) { std::ostringstream msg; int presURLlen = strlen(URLBase.c_str()) + strlen(m_presentationURL.c_str()) + 2; std::vector vpresURL(presURLlen); char* presURL = &vpresURL[0]; int errcode = UpnpResolveURL( URLBase.c_str(), m_presentationURL.c_str(), presURL); if (errcode != UPNP_E_SUCCESS) { msg << "Error generating presentationURL from " << "|" << URLBase << "|" << m_presentationURL << "|."; AddDebugLogLineN(logUPnP, msg); } else { m_presentationURL = presURL; } msg.str(""); msg << "\n Device: " << "\n friendlyName: " << m_friendlyName << "\n deviceType: " << m_deviceType << "\n manufacturer: " << m_manufacturer << "\n manufacturerURL: " << m_manufacturerURL << "\n modelDescription: " << m_modelDescription << "\n modelName: " << m_modelName << "\n modelNumber: " << m_modelNumber << "\n modelURL: " << m_modelURL << "\n serialNumber: " << m_serialNumber << "\n UDN: " << m_UDN << "\n UPC: " << m_UPC << "\n presentationURL: " << m_presentationURL; AddDebugLogLineN(logUPnP, msg); } CUPnPRootDevice::CUPnPRootDevice( const CUPnPControlPoint &upnpControlPoint, CUPnPLib &upnpLib, IXML_Element *rootDevice, const std::string &OriginalURLBase, const std::string &FixedURLBase, const char *location, int expires) : CUPnPDevice(upnpControlPoint, upnpLib, rootDevice, FixedURLBase), m_UPnPControlPoint(upnpControlPoint), m_URLBase(OriginalURLBase), m_location(location), m_expires(expires) { std::ostringstream msg; msg << "\n Root Device: " << "\n URLBase: " << m_URLBase << "\n Fixed URLBase: " << FixedURLBase << "\n location: " << m_location << "\n expires: " << m_expires; AddDebugLogLineN(logUPnP, msg); } CUPnPControlPoint *CUPnPControlPoint::s_CtrlPoint = NULL; CUPnPControlPoint::CUPnPControlPoint(unsigned short udpPort) : m_upnpLib(*this), m_UPnPClientHandle(), m_RootDeviceMap(), m_ServiceMap(), m_ActivePortMappingsMap(), m_RootDeviceListMutex(), m_IGWDeviceDetected(false), m_WanService(NULL) { // Pointer to self s_CtrlPoint = this; // Null string at first std::ostringstream msg; // Start UPnP int ret; char *ipAddress = NULL; unsigned short port = 0; ret = UpnpInit(ipAddress, udpPort); if (ret != UPNP_E_SUCCESS) { msg << "error(UpnpInit): Error code "; goto error; } port = UpnpGetServerPort(); ipAddress = UpnpGetServerIpAddress(); msg << "bound to " << ipAddress << ":" << port << "."; AddLogLineU(false, logUPnP, msg); msg.str(""); ret = UpnpRegisterClient( static_cast(&CUPnPControlPoint::Callback), &m_UPnPClientHandle, &m_UPnPClientHandle); if (ret != UPNP_E_SUCCESS) { msg << "error(UpnpRegisterClient): Error registering callback: "; goto error; } // We could ask for just the right device here. If the root device // contains the device we want, it will respond with the full XML doc, // including the root device and every sub-device it has. // // But lets find out what we have in our network by calling UPNP_ROOT_DEVICE. // // We should not search twice, because this will produce two // UPNP_DISCOVERY_SEARCH_TIMEOUT events, and we might end with problems // on the mutex. ret = UpnpSearchAsync(m_UPnPClientHandle, 3, m_upnpLib.UPNP_ROOT_DEVICE.c_str(), NULL); //ret = UpnpSearchAsync(m_UPnPClientHandle, 3, m_upnpLib.UPNP_DEVICE_IGW.c_str(), this); //ret = UpnpSearchAsync(m_UPnPClientHandle, 3, m_upnpLib.UPNP_DEVICE_LAN.c_str(), this); //ret = UpnpSearchAsync(m_UPnPClientHandle, 3, m_upnpLib.UPNP_DEVICE_WAN_CONNECTION.c_str(), this); if (ret != UPNP_E_SUCCESS) { msg << "error(UpnpSearchAsync): Error sending search request: "; goto error; } // Wait for the UPnP initialization to complete. { // Lock the search timeout mutex m_WaitForSearchTimeoutMutex.Lock(); // Lock it again, so that we block. Unlocking will only happen // when the UPNP_DISCOVERY_SEARCH_TIMEOUT event occurs at the // callback. CUPnPMutexLocker lock(m_WaitForSearchTimeoutMutex); } return; // Error processing error: UpnpFinish(); msg << ret << ": " << m_upnpLib.GetUPnPErrorMessage(ret) << "."; throw CUPnPException(msg); } CUPnPControlPoint::~CUPnPControlPoint() { for( RootDeviceMap::iterator it = m_RootDeviceMap.begin(); it != m_RootDeviceMap.end(); ++it) { delete it->second; } // Remove all first // RemoveAll(); UpnpUnRegisterClient(m_UPnPClientHandle); UpnpFinish(); } bool CUPnPControlPoint::AddPortMappings( std::vector &upnpPortMapping) { std::ostringstream msg; if (!WanServiceDetected()) { msg << "UPnP Error: " "CUPnPControlPoint::AddPortMapping: " "WAN Service not detected."; AddLogLineU(true, logUPnP, msg); return false; } int n = upnpPortMapping.size(); bool ok = false; // Check the number of port mappings before std::istringstream PortMappingNumberOfEntries( m_WanService->GetStateVariable( "PortMappingNumberOfEntries")); unsigned long oldNumberOfEntries; PortMappingNumberOfEntries >> oldNumberOfEntries; // Add the enabled port mappings for (int i = 0; i < n; ++i) { if (upnpPortMapping[i].getEnabled() == "1") { // Add the mapping to the control point // active mappings list m_ActivePortMappingsMap[upnpPortMapping[i].getKey()] = upnpPortMapping[i]; // Add the port mapping PrivateAddPortMapping(upnpPortMapping[i]); } } // Test some variables, this is deprecated, might not work // with some routers m_WanService->GetStateVariable("ConnectionType"); m_WanService->GetStateVariable("PossibleConnectionTypes"); m_WanService->GetStateVariable("ConnectionStatus"); m_WanService->GetStateVariable("Uptime"); m_WanService->GetStateVariable("LastConnectionError"); m_WanService->GetStateVariable("RSIPAvailable"); m_WanService->GetStateVariable("NATEnabled"); m_WanService->GetStateVariable("ExternalIPAddress"); m_WanService->GetStateVariable("PortMappingNumberOfEntries"); m_WanService->GetStateVariable("PortMappingLeaseDuration"); // Just for testing std::vector argval; argval.resize(0); m_WanService->Execute("GetStatusInfo", argval); #if 0 // These do not work. Their value must be requested for a // specific port mapping. m_WanService->GetStateVariable("PortMappingEnabled"); m_WanService->GetStateVariable("RemoteHost"); m_WanService->GetStateVariable("ExternalPort"); m_WanService->GetStateVariable("InternalPort"); m_WanService->GetStateVariable("PortMappingProtocol"); m_WanService->GetStateVariable("InternalClient"); m_WanService->GetStateVariable("PortMappingDescription"); #endif // Debug only msg.str(""); msg << "CUPnPControlPoint::DeletePortMappings: " "m_ActivePortMappingsMap.size() == " << m_ActivePortMappingsMap.size(); AddDebugLogLineN(logUPnP, msg); // Not very good, must find a better test PortMappingNumberOfEntries.str( m_WanService->GetStateVariable( "PortMappingNumberOfEntries")); unsigned long newNumberOfEntries; PortMappingNumberOfEntries >> newNumberOfEntries; ok = newNumberOfEntries - oldNumberOfEntries == 4; return ok; } void CUPnPControlPoint::RefreshPortMappings() { for ( PortMappingMap::iterator it = m_ActivePortMappingsMap.begin(); it != m_ActivePortMappingsMap.end(); ++it) { PrivateAddPortMapping(it->second); } // For testing m_WanService->GetStateVariable("PortMappingNumberOfEntries"); } bool CUPnPControlPoint::PrivateAddPortMapping( CUPnPPortMapping &upnpPortMapping) { // Get an IP address. The UPnP server one must do. std::string ipAddress(UpnpGetServerIpAddress()); // Start building the action std::string actionName("AddPortMapping"); std::vector argval(8); // Action parameters argval[0].SetArgument("NewRemoteHost"); argval[0].SetValue(""); argval[1].SetArgument("NewExternalPort"); argval[1].SetValue(upnpPortMapping.getPort()); argval[2].SetArgument("NewProtocol"); argval[2].SetValue(upnpPortMapping.getProtocol()); argval[3].SetArgument("NewInternalPort"); argval[3].SetValue(upnpPortMapping.getPort()); argval[4].SetArgument("NewInternalClient"); argval[4].SetValue(ipAddress); argval[5].SetArgument("NewEnabled"); argval[5].SetValue("1"); argval[6].SetArgument("NewPortMappingDescription"); argval[6].SetValue(upnpPortMapping.getDescription()); argval[7].SetArgument("NewLeaseDuration"); argval[7].SetValue("0"); // Execute bool ret = true; for (ServiceMap::iterator it = m_ServiceMap.begin(); it != m_ServiceMap.end(); ++it) { ret &= it->second->Execute(actionName, argval); } return ret; } bool CUPnPControlPoint::DeletePortMappings( std::vector &upnpPortMapping) { std::ostringstream msg; if (!WanServiceDetected()) { msg << "UPnP Error: " "CUPnPControlPoint::DeletePortMapping: " "WAN Service not detected."; AddLogLineU(true, logUPnP, msg); return false; } int n = upnpPortMapping.size(); bool ok = false; // Check the number of port mappings before std::istringstream PortMappingNumberOfEntries( m_WanService->GetStateVariable( "PortMappingNumberOfEntries")); unsigned long oldNumberOfEntries; PortMappingNumberOfEntries >> oldNumberOfEntries; // Delete the enabled port mappings for (int i = 0; i < n; ++i) { if (upnpPortMapping[i].getEnabled() == "1") { // Delete the mapping from the control point // active mappings list PortMappingMap::iterator it = m_ActivePortMappingsMap.find( upnpPortMapping[i].getKey()); if (it != m_ActivePortMappingsMap.end()) { m_ActivePortMappingsMap.erase(it); } else { msg << "UPnP Error: " "CUPnPControlPoint::DeletePortMapping: " "Mapping was not found in the active " "mapping map."; AddLogLineU(true, logUPnP, msg); } // Delete the port mapping PrivateDeletePortMapping(upnpPortMapping[i]); } } // Debug only msg.str(""); msg << "CUPnPControlPoint::DeletePortMappings: " "m_ActivePortMappingsMap.size() == " << m_ActivePortMappingsMap.size(); AddDebugLogLineN(logUPnP, msg); // Not very good, must find a better test PortMappingNumberOfEntries.str( m_WanService->GetStateVariable( "PortMappingNumberOfEntries")); unsigned long newNumberOfEntries; PortMappingNumberOfEntries >> newNumberOfEntries; ok = oldNumberOfEntries - newNumberOfEntries == 4; return ok; } bool CUPnPControlPoint::PrivateDeletePortMapping( CUPnPPortMapping &upnpPortMapping) { // Start building the action std::string actionName("DeletePortMapping"); std::vector argval(3); // Action parameters argval[0].SetArgument("NewRemoteHost"); argval[0].SetValue(""); argval[1].SetArgument("NewExternalPort"); argval[1].SetValue(upnpPortMapping.getPort()); argval[2].SetArgument("NewProtocol"); argval[2].SetValue(upnpPortMapping.getProtocol()); // Execute bool ret = true; for (ServiceMap::iterator it = m_ServiceMap.begin(); it != m_ServiceMap.end(); ++it) { ret &= it->second->Execute(actionName, argval); } return ret; } // This function is static int CUPnPControlPoint::Callback(Upnp_EventType EventType, void *Event, void * /*Cookie*/) { std::ostringstream msg; std::ostringstream msg2; // Somehow, this is unreliable. UPNP_DISCOVERY_ADVERTISEMENT_ALIVE events // happen with a wrong cookie and... boom! // CUPnPControlPoint *upnpCP = static_cast(Cookie); CUPnPControlPoint *upnpCP = CUPnPControlPoint::s_CtrlPoint; //fprintf(stderr, "Callback: %d, Cookie: %p\n", EventType, Cookie); switch (EventType) { case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: //fprintf(stderr, "Callback: UPNP_DISCOVERY_ADVERTISEMENT_ALIVE\n"); msg << "error(UPNP_DISCOVERY_ADVERTISEMENT_ALIVE): "; msg2<< "UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: "; goto upnpDiscovery; case UPNP_DISCOVERY_SEARCH_RESULT: { //fprintf(stderr, "Callback: UPNP_DISCOVERY_SEARCH_RESULT\n"); msg << "error(UPNP_DISCOVERY_SEARCH_RESULT): "; msg2<< "UPNP_DISCOVERY_SEARCH_RESULT: "; // UPnP Discovery upnpDiscovery: struct Upnp_Discovery *d_event = (struct Upnp_Discovery *)Event; IXML_Document *doc = NULL; int ret; if (d_event->ErrCode != UPNP_E_SUCCESS) { msg << upnpCP->m_upnpLib.GetUPnPErrorMessage(d_event->ErrCode) << "."; AddDebugLogLineC(logUPnP, msg); } // Get the XML tree device description in doc ret = UpnpDownloadXmlDoc(d_event->Location, &doc); if (ret != UPNP_E_SUCCESS) { msg << "Error retrieving device description from " << d_event->Location << ": " << upnpCP->m_upnpLib.GetUPnPErrorMessage(ret) << "(" << ret << ")."; AddDebugLogLineC(logUPnP, msg); } else { msg2 << "Retrieving device description from " << d_event->Location << "."; AddDebugLogLineN(logUPnP, msg2); } if (doc) { // Get the root node IXML_Element *root = upnpCP->m_upnpLib.Element_GetRootElement(doc); // Extract the URLBase const std::string urlBase = upnpCP->m_upnpLib. Element_GetChildValueByTag(root, "URLBase"); // Get the root device IXML_Element *rootDevice = upnpCP->m_upnpLib. Element_GetFirstChildByTag(root, "device"); // Extract the deviceType std::string devType(upnpCP->m_upnpLib. Element_GetChildValueByTag(rootDevice, "deviceType")); // Only add device if it is an InternetGatewayDevice if (stdStringIsEqualCI(devType, upnpCP->m_upnpLib.UPNP_DEVICE_IGW)) { // This condition can be used to auto-detect // the UPnP device we are interested in. // Obs.: Don't block the entry here on this // condition! There may be more than one device, // and the first that enters may not be the one // we are interested in! upnpCP->SetIGWDeviceDetected(true); // Log it if not UPNP_DISCOVERY_ADVERTISEMENT_ALIVE, // we don't want to spam our logs. if (EventType != UPNP_DISCOVERY_ADVERTISEMENT_ALIVE) { msg.str("Internet Gateway Device Detected."); AddLogLineU(true, logUPnP, msg); } // Add the root device to our list upnpCP->AddRootDevice(rootDevice, urlBase, d_event->Location, d_event->Expires); } // Free the XML doc tree ixmlDocument_free(doc); } break; } case UPNP_DISCOVERY_SEARCH_TIMEOUT: { //fprintf(stderr, "Callback: UPNP_DISCOVERY_SEARCH_TIMEOUT\n"); // Search timeout msg << "UPNP_DISCOVERY_SEARCH_TIMEOUT."; AddDebugLogLineN(logUPnP, msg); // Unlock the search timeout mutex upnpCP->m_WaitForSearchTimeoutMutex.Unlock(); break; } case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: { //fprintf(stderr, "Callback: UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE\n"); // UPnP Device Removed struct Upnp_Discovery *dab_event = (struct Upnp_Discovery *)Event; if (dab_event->ErrCode != UPNP_E_SUCCESS) { msg << "error(UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE): " << upnpCP->m_upnpLib.GetUPnPErrorMessage(dab_event->ErrCode) << "."; AddDebugLogLineC(logUPnP, msg); } std::string devType = dab_event->DeviceType; // Check for an InternetGatewayDevice and removes it from the list std::transform(devType.begin(), devType.end(), devType.begin(), tolower); if (stdStringIsEqualCI(devType, upnpCP->m_upnpLib.UPNP_DEVICE_IGW)) { upnpCP->RemoveRootDevice(dab_event->DeviceId); } break; } case UPNP_EVENT_RECEIVED: { //fprintf(stderr, "Callback: UPNP_EVENT_RECEIVED\n"); // Event reveived struct Upnp_Event *e_event = (struct Upnp_Event *)Event; const std::string Sid = e_event->Sid; // Parses the event upnpCP->OnEventReceived(Sid, e_event->EventKey, e_event->ChangedVariables); break; } case UPNP_EVENT_SUBSCRIBE_COMPLETE: //fprintf(stderr, "Callback: UPNP_EVENT_SUBSCRIBE_COMPLETE\n"); msg << "error(UPNP_EVENT_SUBSCRIBE_COMPLETE): "; goto upnpEventRenewalComplete; case UPNP_EVENT_UNSUBSCRIBE_COMPLETE: //fprintf(stderr, "Callback: UPNP_EVENT_UNSUBSCRIBE_COMPLETE\n"); msg << "error(UPNP_EVENT_UNSUBSCRIBE_COMPLETE): "; goto upnpEventRenewalComplete; case UPNP_EVENT_RENEWAL_COMPLETE: { //fprintf(stderr, "Callback: UPNP_EVENT_RENEWAL_COMPLETE\n"); msg << "error(UPNP_EVENT_RENEWAL_COMPLETE): "; upnpEventRenewalComplete: struct Upnp_Event_Subscribe *es_event = (struct Upnp_Event_Subscribe *)Event; if (es_event->ErrCode != UPNP_E_SUCCESS) { msg << "Error in Event Subscribe Callback"; upnpCP->m_upnpLib.processUPnPErrorMessage( msg.str(), es_event->ErrCode, NULL, NULL); } else { #if 0 TvCtrlPointHandleSubscribeUpdate( es_event->PublisherUrl, es_event->Sid, es_event->TimeOut ); #endif } break; } case UPNP_EVENT_AUTORENEWAL_FAILED: //fprintf(stderr, "Callback: UPNP_EVENT_AUTORENEWAL_FAILED\n"); msg << "error(UPNP_EVENT_AUTORENEWAL_FAILED): "; msg2 << "UPNP_EVENT_AUTORENEWAL_FAILED: "; goto upnpEventSubscriptionExpired; case UPNP_EVENT_SUBSCRIPTION_EXPIRED: { //fprintf(stderr, "Callback: UPNP_EVENT_SUBSCRIPTION_EXPIRED\n"); msg << "error(UPNP_EVENT_SUBSCRIPTION_EXPIRED): "; msg2 << "UPNP_EVENT_SUBSCRIPTION_EXPIRED: "; upnpEventSubscriptionExpired: struct Upnp_Event_Subscribe *es_event = (struct Upnp_Event_Subscribe *)Event; Upnp_SID newSID; int TimeOut = 1801; int ret = UpnpSubscribe( upnpCP->m_UPnPClientHandle, // ADUNANZA BEGIN // A causa di alcune distro non posso usare direttamente PublisherUrl #if 0 es_event->PublisherUrl, #else myGetURLFromPublisherURL(es_event->PublisherUrl), #endif // ADUNANZA END &TimeOut, newSID); if (ret != UPNP_E_SUCCESS) { msg << "Error Subscribing to EventURL"; upnpCP->m_upnpLib.processUPnPErrorMessage( msg.str(), es_event->ErrCode, NULL, NULL); } else { ServiceMap::iterator it = // ADUNANZA BEGIN // A causa di alcune distro non posso usare direttamente PublisherUrl #if 0 upnpCP->m_ServiceMap.find(es_event->PublisherUrl); #else upnpCP->m_ServiceMap.find(std::string(myGetURLFromPublisherURL(es_event->PublisherUrl))); #endif // ADUNANZA END if (it != upnpCP->m_ServiceMap.end()) { CUPnPService &service = *(it->second); service.SetTimeout(TimeOut); service.SetSID(newSID); msg2 << "Re-subscribed to EventURL '" << // ADUNANZA BEGIN // A causa di alcune distro non posso usare direttamente PublisherUrl #if 0 es_event->PublisherUrl << #else myGetURLFromPublisherURL(es_event->PublisherUrl) << #endif // ADUNANZA END "' with SID == '" << newSID << "'."; AddDebugLogLineC(logUPnP, msg2); // In principle, we should test to see if the // service is the same. But here we only have one // service, so... upnpCP->RefreshPortMappings(); } else { msg << "Error: did not find service " << newSID << " in the service map."; AddDebugLogLineC(logUPnP, msg); } } break; } case UPNP_CONTROL_ACTION_COMPLETE: { //fprintf(stderr, "Callback: UPNP_CONTROL_ACTION_COMPLETE\n"); // This is here if we choose to do this asynchronously struct Upnp_Action_Complete *a_event = (struct Upnp_Action_Complete *)Event; if (a_event->ErrCode != UPNP_E_SUCCESS) { upnpCP->m_upnpLib.processUPnPErrorMessage( "UpnpSendActionAsync", a_event->ErrCode, NULL, a_event->ActionResult); } else { // Check the response document upnpCP->m_upnpLib.ProcessActionResponse( a_event->ActionResult, ""); } /* No need for any processing here, just print out results. * Service state table updates are handled by events. */ break; } case UPNP_CONTROL_GET_VAR_COMPLETE: { //fprintf(stderr, "Callback: UPNP_CONTROL_GET_VAR_COMPLETE\n"); msg << "error(UPNP_CONTROL_GET_VAR_COMPLETE): "; struct Upnp_State_Var_Complete *sv_event = (struct Upnp_State_Var_Complete *)Event; if (sv_event->ErrCode != UPNP_E_SUCCESS) { msg << "m_UpnpGetServiceVarStatusAsync"; upnpCP->m_upnpLib.processUPnPErrorMessage( msg.str(), sv_event->ErrCode, NULL, NULL); } else { #if 0 // Warning: The use of UpnpGetServiceVarStatus and // UpnpGetServiceVarStatusAsync is deprecated by the // UPnP forum. TvCtrlPointHandleGetVar( sv_event->CtrlUrl, sv_event->StateVarName, sv_event->CurrentVal ); #endif } break; } // ignore these cases, since this is not a device case UPNP_CONTROL_GET_VAR_REQUEST: //fprintf(stderr, "Callback: UPNP_CONTROL_GET_VAR_REQUEST\n"); msg << "error(UPNP_CONTROL_GET_VAR_REQUEST): "; goto eventSubscriptionRequest; case UPNP_CONTROL_ACTION_REQUEST: //fprintf(stderr, "Callback: UPNP_CONTROL_ACTION_REQUEST\n"); msg << "error(UPNP_CONTROL_ACTION_REQUEST): "; goto eventSubscriptionRequest; case UPNP_EVENT_SUBSCRIPTION_REQUEST: //fprintf(stderr, "Callback: UPNP_EVENT_SUBSCRIPTION_REQUEST\n"); msg << "error(UPNP_EVENT_SUBSCRIPTION_REQUEST): "; eventSubscriptionRequest: msg << "This is not a UPnP Device, this is a UPnP Control Point, event ignored."; AddDebugLogLineC(logUPnP, msg); break; default: // Humm, this is not good, we forgot to handle something... fprintf(stderr, "Callback: default... Unknown event:'%d', not good.\n", EventType); msg << "error(UPnP::Callback): Event not handled:'" << EventType << "'."; fprintf(stderr, "%s\n", msg.str().c_str()); AddDebugLogLineC(logUPnP, msg); // Better not throw in the callback. Who would catch it? //throw CUPnPException(msg); break; } return 0; } void CUPnPControlPoint::OnEventReceived( const std::string &Sid, int EventKey, IXML_Document *ChangedVariablesDoc) { std::ostringstream msg; msg << "UPNP_EVENT_RECEIVED:" << "\n SID: " << Sid << "\n Key: " << EventKey << "\n Property list:"; IXML_Element *root = m_upnpLib.Element_GetRootElement(ChangedVariablesDoc); IXML_Element *child = m_upnpLib.Element_GetFirstChild(root); if (child) { while (child) { IXML_Element *child2 = m_upnpLib.Element_GetFirstChild(child); const DOMString childTag = m_upnpLib.Element_GetTag(child2); std::string childValue = m_upnpLib.Element_GetTextValue(child2); msg << "\n " << childTag << "='" << childValue << "'"; child = m_upnpLib.Element_GetNextSibling(child); } } else { msg << "\n Empty property list."; } AddDebugLogLineC(logUPnP, msg); // Freeing that doc segfaults. Probably should not be freed. //ixmlDocument_free(ChangedVariablesDoc); } void CUPnPControlPoint::AddRootDevice( IXML_Element *rootDevice, const std::string &urlBase, const char *location, int expires) { // Lock the Root Device List CUPnPMutexLocker lock(m_RootDeviceListMutex); // Root node's URLBase std::string OriginalURLBase(urlBase); std::string FixedURLBase(OriginalURLBase.empty() ? location : OriginalURLBase); // Get the UDN (Unique Device Name) std::string UDN( m_upnpLib.Element_GetChildValueByTag(rootDevice, "UDN")); RootDeviceMap::iterator it = m_RootDeviceMap.find(UDN); bool alreadyAdded = it != m_RootDeviceMap.end(); if (alreadyAdded) { // Just set the expires field it->second->SetExpires(expires); } else { // Add a new root device to the root device list CUPnPRootDevice *upnpRootDevice = new CUPnPRootDevice( *this, m_upnpLib, rootDevice, OriginalURLBase, FixedURLBase, location, expires); m_RootDeviceMap[upnpRootDevice->GetUDN()] = upnpRootDevice; } } void CUPnPControlPoint::RemoveRootDevice(const char *udn) { // Lock the Root Device List CUPnPMutexLocker lock(m_RootDeviceListMutex); // Remove std::string UDN(udn); RootDeviceMap::iterator it = m_RootDeviceMap.find(UDN); if (it != m_RootDeviceMap.end()) { delete it->second; m_RootDeviceMap.erase(UDN); } } void CUPnPControlPoint::Subscribe(CUPnPService &service) { std::ostringstream msg; IXML_Document *scpdDoc = NULL; int errcode = UpnpDownloadXmlDoc( service.GetAbsSCPDURL().c_str(), &scpdDoc); if (errcode == UPNP_E_SUCCESS) { // Get the root node of this service (the SCPD Document) IXML_Element *scpdRoot = m_upnpLib.Element_GetRootElement(scpdDoc); CUPnPSCPD *scpd = new CUPnPSCPD(*this, m_upnpLib, scpdRoot, service.GetAbsSCPDURL()); service.SetSCPD(scpd); m_ServiceMap[service.GetAbsEventSubURL()] = &service; msg << "Successfully retrieved SCPD Document for service " << service.GetServiceType() << ", absEventSubURL: " << service.GetAbsEventSubURL() << "."; AddLogLineU(true, logUPnP, msg); msg.str(""); // Now try to subscribe to this service. If the subscription // is not successfull, we will not be notified about events, // but it may be possible to use the service anyway. errcode = UpnpSubscribe(m_UPnPClientHandle, service.GetAbsEventSubURL().c_str(), service.GetTimeoutAddr(), service.GetSID()); if (errcode == UPNP_E_SUCCESS) { msg << "Successfully subscribed to service " << service.GetServiceType() << ", absEventSubURL: " << service.GetAbsEventSubURL() << "."; AddLogLineU(true, logUPnP, msg); } else { msg << "Error subscribing to service " << service.GetServiceType() << ", absEventSubURL: " << service.GetAbsEventSubURL() << ", error: " << m_upnpLib.GetUPnPErrorMessage(errcode) << "."; goto error; } } else { msg << "Error getting SCPD Document from " << service.GetAbsSCPDURL() << "."; AddLogLineU(true, logUPnP, msg); } return; // Error processing error: AddLogLineU(true, logUPnP, msg); } void CUPnPControlPoint::Unsubscribe(CUPnPService &service) { ServiceMap::iterator it = m_ServiceMap.find(service.GetAbsEventSubURL()); if (it != m_ServiceMap.end()) { m_ServiceMap.erase(it); UpnpUnSubscribe(m_UPnPClientHandle, service.GetSID()); } } #endif /* ENABLE_UPNP */ amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/CaptchaGenerator.h0000644000175000017500000000310612050266603021702 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef CAPTCHAGENERATOR_H #define CAPTCHAGENERATOR_H #include #include #include "Types.h" class wxImage; class CCaptchaGenerator { public: CCaptchaGenerator(uint32 nLetterCount = 4); void ReGenerateCaptcha(uint32 nLetterCount = 4); wxString GetCaptchaText() const { return m_strCaptchaText; } bool WriteCaptchaImage(wxMemoryOutputStream& file); private: wxImage m_pimgCaptcha; wxString m_strCaptchaText; }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ServerSocket.cpp0000644000175000017500000005723212050266603021453 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ServerSocket.h" // Interface declarations #include #include #include #include #include "Packet.h" // Needed for CPacket #include "updownclient.h" // Needed for CUpDownClient #include "ClientList.h" // Needed for CClientList #include "MemFile.h" // Needed for CMemFile #include "PartFile.h" // Needed for CPartFile #include "SearchList.h" // Needed for CSearchList #include "Preferences.h" // Needed for CPreferences #include "DownloadQueue.h" // Needed for CDownloadQueue #include "ServerList.h" // Needed for CServerList #include "Server.h" // Needed for CServer #include "amule.h" // Needed for theApp #include "Statistics.h" // Needed for theStats #include "AsyncDNS.h" // Needed for CAsyncDNS #include "Logger.h" #include #include "IPFilter.h" #include "GuiEvents.h" // Needed for Notify_* //------------------------------------------------------------------------------ // CServerSocketHandler //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ // CServerSocketHandler //------------------------------------------------------------------------------ class CServerSocketHandler: public wxEvtHandler { public: CServerSocketHandler() {}; public: private: void ServerSocketHandler(wxSocketEvent& event); DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(CServerSocketHandler, wxEvtHandler) EVT_SOCKET(ID_SERVERSOCKET_EVENT, CServerSocketHandler::ServerSocketHandler) END_EVENT_TABLE() void CServerSocketHandler::ServerSocketHandler(wxSocketEvent& event) { CServerSocket *socket = dynamic_cast(event.GetSocket()); wxASSERT(socket); if (!socket) { return; } if (socket->OnDestroy()) { return; } switch(event.GetSocketEvent()) { case wxSOCKET_CONNECTION: socket->OnConnect(wxSOCKET_NOERROR); break; case wxSOCKET_LOST: socket->OnError(socket->LastError()); break; case wxSOCKET_INPUT: socket->OnReceive(wxSOCKET_NOERROR); break; case wxSOCKET_OUTPUT: socket->OnSend(wxSOCKET_NOERROR); break; default: wxFAIL; break; } } // // There can be only one. :) // static CServerSocketHandler g_serverSocketHandler; //------------------------------------------------------------------------------ // CServerSocket //------------------------------------------------------------------------------ CServerSocket::CServerSocket(CServerConnect* in_serverconnect, const CProxyData *ProxyData) : CEMSocket(ProxyData) { serverconnect = in_serverconnect; connectionstate = 0; cur_server = 0; info.Clear(); m_bIsDeleting = false; SetEventHandler(g_serverSocketHandler, ID_SERVERSOCKET_EVENT); SetNotify( wxSOCKET_CONNECTION_FLAG | wxSOCKET_INPUT_FLAG | wxSOCKET_OUTPUT_FLAG | wxSOCKET_LOST_FLAG); Notify(true); m_dwLastTransmission = 0; m_IsSolving = false; m_bNoCrypt = false; } CServerSocket::~CServerSocket() { // remove event handler... SetNotify(0); Notify(FALSE); if (cur_server) { delete cur_server; } cur_server = NULL; } void CServerSocket::OnConnect(wxSocketError nErrorCode) { switch (nErrorCode) { case wxSOCKET_NOERROR: if (cur_server->HasDynIP()) { amuleIPV4Address tmpaddr; GetPeer(tmpaddr); uint32 server_ip = StringIPtoUint32(tmpaddr.IPAddress()); cur_server->SetID(server_ip); // GetServerByAddress may return NULL, so we must test! // This was the reason why amule would crash when trying to // connect in wxWidgets 2.5.2 CServer *pServer = theApp->serverlist->GetServerByAddress( cur_server->GetAddress(), cur_server->GetPort()); if (pServer) { pServer->SetID(server_ip); } else { AddDebugLogLineN(logServer, wxT("theApp->serverlist->GetServerByAddress() returned NULL")); return; } } SetConnectionState(CS_WAITFORLOGIN); break; case wxSOCKET_INVADDR: case wxSOCKET_NOHOST: case wxSOCKET_INVPORT: case wxSOCKET_TIMEDOUT: m_bIsDeleting = true; SetConnectionState(CS_SERVERDEAD); serverconnect->DestroySocket(this); return; case wxSOCKET_IOERR: case wxSOCKET_MEMERR: case wxSOCKET_INVOP: default: m_bIsDeleting = true; SetConnectionState(CS_FATALERROR); serverconnect->DestroySocket(this); return; } } void CServerSocket::OnReceive(wxSocketError nErrorCode) { if (connectionstate != CS_CONNECTED && !serverconnect->IsConnecting()) { serverconnect->DestroySocket(this); return; } CEMSocket::OnReceive((int)nErrorCode); m_dwLastTransmission = GetTickCount(); } bool CServerSocket::ProcessPacket(const byte* packet, uint32 size, int8 opcode) { try { AddDebugLogLineN( logServer, wxT("Processing Server Packet: ") ); switch(opcode) { case OP_SERVERMESSAGE: { /* Kry import of lugdunum 16.40 new features */ AddDebugLogLineN( logServer, wxT("Server: OP_SERVERMESSAGE") ); theStats::AddDownOverheadServer(size); char* buffer = new char[size-1]; memcpy(buffer,&packet[2],size-2); buffer[size-2] = 0; wxString strMessages(char2unicode(buffer)); delete[] buffer; // 16.40 servers do not send separate OP_SERVERMESSAGE packets for each line; // instead of this they are sending all text lines with one OP_SERVERMESSAGE packet. wxStringTokenizer token(strMessages,wxT("\r\n"),wxTOKEN_DEFAULT ); while (token.HasMoreTokens()) { wxString message = token.GetNextToken(); bool bOutputMessage = true; if (message.StartsWith(wxT("server version"))) { wxString strVer = message.Mid(15,64); // truncate string to avoid misuse by servers in showing ads strVer.Trim(); CServer* eserver = theApp->serverlist->GetServerByAddress(cur_server->GetAddress(),cur_server->GetPort()); if (eserver) { eserver->SetVersion(strVer); Notify_ServerRefresh(eserver); } } else if (message.StartsWith(wxT("ERROR"))) { CServer* pServer = theApp->serverlist->GetServerByAddress(cur_server->GetAddress(),cur_server->GetPort()); wxString servername; if (pServer) { servername = pServer->GetListName(); } else { servername = _("Server"); } AddLogLineN(CFormat( _("ERROR: %s (%s) - %s") ) % servername % Uint32_16toStringIP_Port(cur_server->GetIP(), cur_server->GetPort()) % message.Mid(5,message.Len()).Trim(wxT(" :"))); bOutputMessage = false; } else if (message.StartsWith(wxT("WARNING"))) { CServer* pServer = theApp->serverlist->GetServerByAddress(cur_server->GetAddress(),cur_server->GetPort()); wxString servername; if (pServer) { servername = pServer->GetListName(); } else { servername = _("Server"); } AddLogLineN(CFormat( _("WARNING: %s (%s) - %s") ) % servername % Uint32_16toStringIP_Port(cur_server->GetIP(), cur_server->GetPort()) % message.Mid(5,message.Len()).Trim(wxT(" :"))); bOutputMessage = false; } if (message.Find(wxT("[emDynIP: ")) != (-1) && message.Find(wxT("]")) != (-1) && message.Find(wxT("[emDynIP: ")) < message.Find(wxT("]"))){ wxString dynip = message.Mid(message.Find(wxT("[emDynIP: "))+10,message.Find(wxT("]")) - (message.Find(wxT("[emDynIP: "))+10)); dynip.Trim(wxT(" ")); if ( dynip.Length() && dynip.Length() < 51){ CServer* eserver = theApp->serverlist->GetServerByAddress(cur_server->GetAddress(),cur_server->GetPort()); if (eserver){ eserver->SetDynIP(dynip); cur_server->SetDynIP(dynip); Notify_ServerRefresh(eserver); } } } if (bOutputMessage) { theApp->AddServerMessageLine(message); } } break; } case OP_IDCHANGE: { AddDebugLogLineN(logServer, wxT("Server: OP_IDCHANGE")); theStats::AddDownOverheadServer(size); if (size < 4 /* uint32 (ID)*/) { throw wxString(wxT("Corrupt or invalid loginanswer from server received")); } CMemFile data(packet, size); uint32 new_id = data.ReadUInt32(); // save TCP flags in 'cur_server' wxASSERT(cur_server); uint32 ConnPort = 0; CServer* pServer = NULL; if (cur_server) { uint32 rport = cur_server->GetConnPort(); pServer = theApp->serverlist->GetServerByAddress(cur_server->GetAddress(), rport); if (size >= 4+4 /* uint32 (ID) + uint32 (TCP flags)*/) { cur_server->SetTCPFlags(data.ReadUInt32()); if (size >= 4+4+4 /* uint32 (ID) + uint32 (TCP flags) + uint32 (aux port) */) { // aux port login : we should use the 'standard' port of this server to advertize to other clients ConnPort = data.ReadUInt32(); cur_server->SetPort(ConnPort); if (cur_server->GetAuxPortsList().IsEmpty()) { cur_server->SetAuxPortsList(CFormat(wxT("%u")) % rport); } } } else { cur_server->SetTCPFlags(0); } // copy TCP flags into the server in the server list if (pServer) { pServer->SetTCPFlags(cur_server->GetTCPFlags()); if (ConnPort) { pServer->SetPort(ConnPort); if (pServer->GetAuxPortsList().IsEmpty()) { pServer->SetAuxPortsList(CFormat(wxT("%u")) % pServer->GetConnPort()); } Notify_ServerRefresh(pServer); Notify_ServerUpdateED2KInfo(); } } } uint32 dwServerReportedIP = 0; uint32 dwObfuscationTCPPort = 0; if (size >= 4 + 4 + 4 + 4 + 4 /* All of the above + reported ip + obfuscation port */) { dwServerReportedIP = data.ReadUInt32(); if (::IsLowID(dwServerReportedIP)){ wxFAIL; dwServerReportedIP = 0; } wxASSERT( dwServerReportedIP == new_id || ::IsLowID(new_id) ); dwObfuscationTCPPort = data.ReadUInt32(); if (cur_server != NULL && dwObfuscationTCPPort != 0) { cur_server->SetObfuscationPortTCP((uint16)dwObfuscationTCPPort); } if (pServer != NULL && dwObfuscationTCPPort != 0) { pServer->SetObfuscationPortTCP((uint16)dwObfuscationTCPPort); } } if (new_id == 0) { uint8 state = thePrefs::GetSmartIdState(); if ( state > 0 ) { state++; if(state > 3) { thePrefs::SetSmartIdState(0); } else { thePrefs::SetSmartIdState(state); } } break; } if(thePrefs::GetSmartIdCheck()) { if (!IsLowID(new_id)) { thePrefs::SetSmartIdState(1); } else { uint8 state = thePrefs::GetSmartIdState(); if ( state > 0 ) { state++; if(state > 3) { thePrefs::SetSmartIdState(0); } else { thePrefs::SetSmartIdState(state); } break; } } } // we need to know our client when sending our shared files (done indirectly on SetConnectionState) serverconnect->SetClientID(new_id); if (::IsLowID(new_id) && dwServerReportedIP != 0) { theApp->SetPublicIP(dwServerReportedIP); } if (connectionstate != CS_CONNECTED) { AddDebugLogLineN(logServer, wxT("Connected")); SetConnectionState(CS_CONNECTED); theApp->OnlineSig(); // Added By Bouc7 } theApp->ShowConnectionState(); AddLogLineN(CFormat(_("New clientid is %u")) % new_id); if (::IsLowID(new_id)) { AddLogLineC(_("WARNING: You have received Low-ID!")); AddLogLineN(_("\tMost likely this is because you're behind a firewall or router.")); AddLogLineN(_("\tFor more information, please refer to http://wiki.amule.org")); } theApp->downloadqueue->ResetLocalServerRequests(); break; } case OP_SEARCHRESULT: { AddDebugLogLineN(logServer, wxT("Server: OP_SEARCHRESULT")); theStats::AddDownOverheadServer(size); CServer* cur_srv = (serverconnect) ? serverconnect->GetCurrentServer() : NULL; theApp->searchlist->ProcessSearchAnswer( packet, size, true /*(cur_srv && cur_srv->GetUnicodeSupport())*/, cur_srv ? cur_srv->GetIP() : 0, cur_srv ? cur_srv->GetPort() : 0); theApp->searchlist->LocalSearchEnd(); break; } case OP_FOUNDSOURCES_OBFU: case OP_FOUNDSOURCES: { AddDebugLogLineN(logServer, CFormat(wxT("ServerMsg - OP_FoundSources; sources = %u")) % packet[16]); theStats::AddDownOverheadServer(size); CMemFile sources(packet,size); CMD4Hash fileid = sources.ReadHash(); if (CPartFile* file = theApp->downloadqueue->GetFileByID(fileid)) { file->AddSources(sources, cur_server->GetIP(), cur_server->GetPort(), SF_LOCAL_SERVER, (opcode == OP_FOUNDSOURCES_OBFU)); } else { AddDebugLogLineN(logServer, wxT("Sources received for unknown file: ") + fileid.Encode()); } break; } case OP_SERVERSTATUS: { AddDebugLogLineN(logServer, wxT("Server: OP_SERVERSTATUS")); // FIXME some statuspackets have a different size -> why? structur? if (size < 8) { throw wxString(wxT("Invalid server status packet")); // ADUNANZA BEGIN // Backport aMule SVN (in realta' il break non puo' essere raggiunto quindi e' solo inutile) #if 0 break; #endif // ADUNANZA END } CServer* update = theApp->serverlist->GetServerByAddress(cur_server->GetAddress(), cur_server->GetPort()); if (update) { CMemFile data(packet, size); update->SetUserCount(data.ReadUInt32()); update->SetFileCount(data.ReadUInt32()); Notify_ServerRefresh( update ); theApp->ShowUserCount(); } break; } // Cleaned. case OP_SERVERIDENT: { AddDebugLogLineN(logServer, wxT("Server: OP_SERVERIDENT")); theStats::AddDownOverheadServer(size); if (size<38) { AddLogLineN(_("Unknown server info received! - too short")); // throw wxString(wxT("Unknown server info received!")); break; } CServer* update = theApp->serverlist->GetServerByAddress(cur_server->GetAddress(),cur_server->GetPort()); if (update) { CMemFile data(packet,size); CMD4Hash hash = data.ReadHash(); if (RawPeekUInt32(hash.GetHash()) == 0x2A2A2A2A){ // No endian problem here const wxString& rstrVersion = update->GetVersion(); if (!rstrVersion.IsEmpty()) { update->SetVersion(wxT("eFarm ") + rstrVersion); } else { update->SetVersion(wxT("eFarm")); } } // Unused /*uint32 nServerIP = */data.ReadUInt32(); /*uint16 nServerPort = */data.ReadUInt16(); uint32 nTags = data.ReadUInt32(); for (uint32 i = 0; i < nTags; i++){ CTag tag(data, update->GetUnicodeSupport()); if (tag.GetNameID() == ST_SERVERNAME){ update->SetListName(tag.GetStr()); } else if (tag.GetNameID() == ST_DESCRIPTION){ update->SetDescription(tag.GetStr()); } // No more known tags from server } theApp->ShowConnectionState(); Notify_ServerRefresh(update); } break; } // tecxx 1609 2002 - add server's serverlist to own serverlist case OP_SERVERLIST: { AddDebugLogLineN(logServer, wxT("Server: OP_SERVERLIST")); CMemFile* servers = new CMemFile(packet,size); uint8 count = servers->ReadUInt8(); if (((int32)(count*6 + 1) > size)) { count = 0; } int addcount = 0; while(count) { uint32 ip = servers->ReadUInt32(); uint16 port = servers->ReadUInt16(); CServer* srv = new CServer( port , // Port Uint32toStringIP(ip)); // Ip srv->SetListName(srv->GetFullIP()); if (!theApp->AddServer(srv)) { delete srv; } else { addcount++; } count--; } delete servers; if (addcount) { AddLogLineN(CFormat(wxPLURAL("Received %d new server", "Received %d new servers", addcount)) % addcount); } theApp->serverlist->SaveServerMet(); AddLogLineN(_("Saving of server-list completed.")); break; } case OP_CALLBACKREQUESTED: { AddDebugLogLineN(logServer, wxT("Server: OP_CALLBACKREQUESTED")); theStats::AddDownOverheadServer(size); if (size >= 6) { CMemFile data(packet,size); uint32 dwIP = data.ReadUInt32(); uint16 nPort = data.ReadUInt16(); uint8 byCryptOptions = 0; CMD4Hash achUserHash; if (size >= 23){ byCryptOptions = data.ReadUInt8();; achUserHash = data.ReadHash(); } CUpDownClient* client = theApp->clientlist->FindClientByIP(dwIP,nPort); if (!client) { client = new CUpDownClient(nPort,dwIP,0,0,0, true, true); theApp->clientlist->AddClient(client); } if (size >= 23 && client->HasValidHash()){ if (client->GetUserHash() != achUserHash){ AddDebugLogLineN(logServer, wxT("Reported Userhash from OP_CALLBACKREQUESTED differs with our stored hash")); // disable crypt support since we dont know which hash is true client->SetCryptLayerRequest(false); client->SetCryptLayerSupport(false); client->SetCryptLayerRequires(false); } else { client->SetConnectOptions(byCryptOptions, true, false); } } else if (size >= 23) { client->SetUserHash(achUserHash); client->SetConnectOptions(byCryptOptions, true, false); } client->TryToConnect(); } break; } case OP_CALLBACK_FAIL: { AddDebugLogLineN(logServer, wxT("Server: OP_CALLBACK_FAIL")); break; } case OP_REJECT: { AddDebugLogLineN(logServer, wxT("Server: OP_REJECT")); AddLogLineN(_("Server rejected last command")); break; } default: AddDebugLogLineN(logPacketErrors, CFormat(wxT("Unknown server packet with OPcode %x")) % opcode); } return true; } catch (const CInvalidPacket& e) { AddLogLineN(CFormat( _("Bogus packet received from server: %s") ) % e.what()); } catch (const CEOFException& e) { AddLogLineN(CFormat( _("Bogus packet received from server: %s") ) % e.what()); } catch (const wxString& error) { AddLogLineN(CFormat( _("Unhandled error while processing packet from server: %s") ) % error); } // Don't disconnect because of wrong sources. if (opcode==OP_SEARCHRESULT || opcode==OP_FOUNDSOURCES) { return true; } SetConnectionState(CS_DISCONNECTED); return false; } void CServerSocket::ConnectToServer(CServer* server, bool bNoCrypt) { AddDebugLogLineN(logServer, wxT("Trying to connect")); if (cur_server){ wxFAIL; delete cur_server; cur_server = NULL; } cur_server = new CServer(server); m_bNoCrypt = bNoCrypt; SetConnectionState(CS_CONNECTING); info = cur_server->GetListName(); // This must be used if we want to reverse-check the addr of the server if (cur_server->HasDynIP() || !cur_server->GetIP()) { m_IsSolving = true; // Send it to solving thread. CAsyncDNS* dns = new CAsyncDNS(server->GetAddress(), DNS_SERVER_CONNECT, theApp, this); if ( dns->Create() == wxTHREAD_NO_ERROR ) { if ( dns->Run() != wxTHREAD_NO_ERROR ) { dns->Delete(); AddLogLineN(CFormat( _("Cannot create DNS solving thread for connecting to %s") ) % cur_server->GetAddress()); } } else { dns->Delete(); AddLogLineN(CFormat( _("Cannot create DNS solving thread for connecting to %s") ) % cur_server->GetAddress()); } } else { // Nothing to solve, we already have the IP OnHostnameResolved(cur_server->GetIP()); } } void CServerSocket::OnError(wxSocketError DEBUG_ONLY(nErrorCode)) { AddDebugLogLineN(logServer, CFormat(wxT("Error in serversocket: %s(%s:%i): %u")) % cur_server->GetListName() % cur_server->GetFullIP() % cur_server->GetPort() % (int)nErrorCode); SetConnectionState(CS_DISCONNECTED); } bool CServerSocket::PacketReceived(CPacket* packet) { AddDebugLogLineN(logServer, CFormat(wxT("Server: Packet Received: Prot %x, Opcode %x, Length %u")) % packet->GetProtocol() % packet->GetOpCode() % packet->GetPacketSize()); if (packet->GetProtocol() == OP_PACKEDPROT) { if (!packet->UnPackPacket(250000)){ AddDebugLogLineN(logZLib, CFormat(wxT("Failed to decompress server TCP packet: protocol=0x%02x opcode=0x%02x size=%u")) % packet->GetProtocol() % packet->GetOpCode() % packet->GetPacketSize()); theStats::AddDownOverheadServer(packet->GetPacketSize()); return true; } packet->SetProtocol(OP_EDONKEYPROT); } if (packet->GetProtocol() == OP_EDONKEYPROT) { ProcessPacket(packet->GetDataBuffer(), packet->GetPacketSize(), packet->GetOpCode()); } else { AddDebugLogLineN(logServer, CFormat(wxT("Received server TCP packet with unknown protocol: protocol=0x%02x opcode=0x%02x size=%u")) % packet->GetProtocol() % packet->GetOpCode() % packet->GetPacketSize()); theStats::AddDownOverheadServer(packet->GetPacketSize()); } return true; } void CServerSocket::OnClose(wxSocketError WXUNUSED(nErrorCode)) { CEMSocket::OnClose(0); switch (connectionstate) { case CS_WAITFORLOGIN: SetConnectionState(CS_SERVERFULL); break; case CS_CONNECTED: SetConnectionState(CS_DISCONNECTED); break; default: SetConnectionState(CS_NOTCONNECTED); } serverconnect->DestroySocket(this); } void CServerSocket::SetConnectionState(sint8 newstate) { connectionstate = newstate; if (newstate < CS_CONNECTING) { serverconnect->ConnectionFailed(this); } else if (newstate == CS_CONNECTED || newstate == CS_WAITFORLOGIN) { if (serverconnect) { serverconnect->ConnectionEstablished(this); } } } void CServerSocket::SendPacket(CPacket* packet, bool delpacket, bool controlpacket, uint32 actualPayloadSize) { m_dwLastTransmission = GetTickCount(); CEMSocket::SendPacket(packet, delpacket, controlpacket, actualPayloadSize); } void CServerSocket::OnHostnameResolved(uint32 ip) { m_IsSolving = false; if (ip) { if (theApp->ipfilter->IsFiltered(ip, true)) { AddLogLineC(CFormat( _("Server IP %s (%s) is filtered. Not connecting.") ) % Uint32toStringIP(ip) % cur_server->GetAddress() ); OnConnect(wxSOCKET_INVADDR); } else { amuleIPV4Address addr; addr.Hostname(ip); uint16 nPort = 0; wxString useObfuscation; if ( !m_bNoCrypt && thePrefs::IsServerCryptLayerTCPRequested() && cur_server->GetObfuscationPortTCP() != 0 && cur_server->SupportsObfuscationTCP()){ nPort = cur_server->GetObfuscationPortTCP(); useObfuscation = _("using protocol obfuscation."); SetConnectionEncryption(true, NULL, true); } else { nPort = cur_server->GetConnPort(); SetConnectionEncryption(false, NULL, true); } addr.Service(nPort); AddLogLineN(CFormat( _("Connecting to %s (%s - %s:%i) %s") ) % cur_server->GetListName() % cur_server->GetAddress() % cur_server->GetFullIP() % nPort % useObfuscation ); AddDebugLogLineN(logServer, CFormat(wxT("Server %s(%s) Port %i")) % cur_server->GetAddress() % Uint32toStringIP(ip) % cur_server->GetConnPort()); Connect(addr, false); } } else { AddLogLineC(CFormat( _("Could not solve dns for server %s: Unable to connect!") ) % cur_server->GetAddress() ); OnConnect(wxSOCKET_NOHOST); } } uint32 CServerSocket::GetServerIP() const { return cur_server ? cur_server->GetIP() : 0; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/Tag.cpp0000644000175000017500000003016212050266603017540 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // // ADUNANZA BEGIN #include // ADUNANZA END #include "Tag.h" // Interface declarations #include // Needed for WXLONGLONGFMTSPEC #include "SafeFile.h" // Needed for CFileDataIO #include "MD4Hash.h" // Needed for CMD4Hash #ifdef __SUNPRO_CC #define __FUNCTION__ __FILE__+__LINE__ #endif /////////////////////////////////////////////////////////////////////////////// // CTag CTag::CTag(const wxString& Name) { m_uType = 0; m_uName = 0; m_Name = Name; m_uVal = 0; m_nSize = 0; } CTag::CTag(uint8 uName) { m_uType = 0; m_uName = uName; m_uVal = 0; m_nSize = 0; } CTag::CTag(const CTag& rTag) { m_uType = rTag.m_uType; m_uName = rTag.m_uName; m_Name = rTag.m_Name; m_nSize = 0; if (rTag.IsStr()) { m_pstrVal = new wxString(rTag.GetStr()); } else if (rTag.IsInt()) { m_uVal = rTag.GetInt(); } else if (rTag.IsFloat()) { m_fVal = rTag.GetFloat(); } else if (rTag.IsHash()) { m_hashVal = new CMD4Hash(rTag.GetHash()); } else if (rTag.IsBlob()) { m_nSize = rTag.GetBlobSize(); m_pData = new unsigned char[rTag.GetBlobSize()]; memcpy(m_pData, rTag.GetBlob(), rTag.GetBlobSize()); } else if (rTag.IsBsob()) { m_nSize = rTag.GetBsobSize(); m_pData = new unsigned char[rTag.GetBsobSize()]; memcpy(m_pData, rTag.GetBsob(), rTag.GetBsobSize()); } else { wxFAIL; m_uVal = 0; } } //ADUNANZA BEGIN std::ostream& hexdump(std::ostream& o, unsigned char* buffer, size_t len) { unsigned char* p = buffer; o << "0x" << std::hex << std::noshowbase; for (unsigned int i = 0; i < len; p++, i++) { if (*p) o << (unsigned short) (*p); else o << "00"; } o << std::dec; return o; } std::ostream& hexdump(std::ostream& o, unsigned int v) { return hexdump(o, (unsigned char*) &v, sizeof(v)); /* unsigned short int tmp; o << "0x" << std::hex << std::noshowbase; for (unsigned int i = 0; i < 4; i++) { tmp = ((v & 0xFF000000) >> 24); if (tmp) o << tmp; else o << "00"; v = v << 8; } o << std::dec; return o; */ } std::ostream& hexdump(std::ostream& o, float v) { return hexdump(o, (unsigned char*) &v, sizeof(v)); /* unsigned int tmp; memcpy((void*) &tmp, (const void*) &v, 4); return hexdump(o, tmp); */ } //ADUNANZA END CTag::CTag(const CFileDataIO& data, bool bOptUTF8) { // Zero variables to allow for safe deletion m_uType = m_uName = m_nSize = m_uVal = 0; m_pData = NULL; try { m_uType = data.ReadUInt8(); if (m_uType & 0x80) { m_uType &= 0x7F; m_uName = data.ReadUInt8(); } else { uint16 length = data.ReadUInt16(); if (length == 1) { m_uName = data.ReadUInt8(); } else { m_uName = 0; m_Name = data.ReadOnlyString(utf8strNone,length); } } // NOTE: It's very important that we read the *entire* packet data, // even if we do not use each tag. Otherwise we will get in trouble // when the packets are returned in a list - like the search results // from a server. If we cannot do this, then we throw an exception. switch (m_uType) { case TAGTYPE_STRING: m_pstrVal = new wxString(data.ReadString(bOptUTF8)); break; case TAGTYPE_UINT32: m_uVal = data.ReadUInt32(); break; case TAGTYPE_UINT64: m_uVal = data.ReadUInt64(); break; case TAGTYPE_UINT16: m_uVal = data.ReadUInt16(); m_uType = TAGTYPE_UINT32; break; case TAGTYPE_UINT8: m_uVal = data.ReadUInt8(); m_uType = TAGTYPE_UINT32; break; case TAGTYPE_FLOAT32: //#warning Endianess problem? data.Read(&m_fVal, 4); break; case TAGTYPE_HASH16: m_hashVal = new CMD4Hash(data.ReadHash()); break; case TAGTYPE_BOOL: printf("***NOTE: %s; Reading BOOL tag\n", __FUNCTION__); data.ReadUInt8(); break; case TAGTYPE_BOOLARRAY: { printf("***NOTE: %s; Reading BOOL Array tag\n", __FUNCTION__); uint16 len = data.ReadUInt16(); // 07-Apr-2004: eMule versions prior to 0.42e.29 used the formula "(len+7)/8"! //#warning This seems to be off by one! 8 / 8 + 1 == 2, etc. data.Seek((len / 8) + 1, wxFromCurrent); break; } case TAGTYPE_BLOB: // 07-Apr-2004: eMule versions prior to 0.42e.29 handled the "len" as int16! m_nSize = data.ReadUInt32(); // Since the length is 32b, this check is needed to avoid // huge allocations in case of bad tags. if (m_nSize > data.GetLength() - data.GetPosition()) { throw CInvalidPacket(wxT("Malformed tag")); } m_pData = new unsigned char[m_nSize]; data.Read(m_pData, m_nSize); break; default: if (m_uType >= TAGTYPE_STR1 && m_uType <= TAGTYPE_STR16) { uint8 length = m_uType - TAGTYPE_STR1 + 1; m_pstrVal = new wxString(data.ReadOnlyString(bOptUTF8, length)); m_uType = TAGTYPE_STRING; } else { // Since we cannot determine the length of this tag, we // simply have to abort reading the file. throw CInvalidPacket(CFormat(wxT("Unknown tag type encounted %x, cannot proceed!")) % m_uType); } } } catch (...) { if (m_uType == TAGTYPE_BLOB) { delete[] m_pData; } throw; } } CTag::~CTag() { if (IsStr()) { delete m_pstrVal; } else if (IsHash()) { delete m_hashVal; } else if (IsBlob() || IsBsob()) { delete[] m_pData; } } CTag &CTag::operator=(const CTag &rhs) { if (&rhs != this) { m_uType = rhs.m_uType; m_uName = rhs.m_uName; m_Name = rhs.m_Name; m_nSize = 0; if (rhs.IsStr()) { wxString *p = new wxString(rhs.GetStr()); delete m_pstrVal; m_pstrVal = p; } else if (rhs.IsInt()) { m_uVal = rhs.GetInt(); } else if (rhs.IsFloat()) { m_fVal = rhs.GetFloat(); } else if (rhs.IsHash()) { CMD4Hash *p = new CMD4Hash(rhs.GetHash()); delete m_hashVal; m_hashVal = p; } else if (rhs.IsBlob()) { m_nSize = rhs.GetBlobSize(); unsigned char *p = new unsigned char[rhs.GetBlobSize()]; delete [] m_pData; m_pData = p; memcpy(m_pData, rhs.GetBlob(), rhs.GetBlobSize()); } else if (rhs.IsBsob()) { m_nSize = rhs.GetBsobSize(); unsigned char *p = new unsigned char[rhs.GetBsobSize()]; delete [] m_pData; m_pData = p; memcpy(m_pData, rhs.GetBsob(), rhs.GetBsobSize()); } else { wxFAIL; m_uVal = 0; } } return *this; } #define CHECK_TAG_TYPE(check, expected) \ if (!(check)) { \ throw CInvalidPacket(wxT(#expected) wxT(" tag expected, but found ") + GetFullInfo()); \ } uint64 CTag::GetInt() const { CHECK_TAG_TYPE(IsInt(), Integer); return m_uVal; } const wxString& CTag::GetStr() const { CHECK_TAG_TYPE(IsStr(), String); return *m_pstrVal; } float CTag::GetFloat() const { CHECK_TAG_TYPE(IsFloat(), Float); return m_fVal; } const CMD4Hash& CTag::GetHash() const { CHECK_TAG_TYPE(IsHash(), Hash); return *m_hashVal; } uint32 CTag::GetBlobSize() const { CHECK_TAG_TYPE(IsBlob(), Blob); return m_nSize; } const byte* CTag::GetBlob() const { CHECK_TAG_TYPE(IsBlob(), Blob); return m_pData; } uint32 CTag::GetBsobSize() const { CHECK_TAG_TYPE(IsBsob(), Bsob); return m_nSize; } const byte* CTag::GetBsob() const { CHECK_TAG_TYPE(IsBsob(), Bsob); return m_pData; } bool CTag::WriteNewEd2kTag(CFileDataIO* data, EUtf8Str eStrEncode) const { // Write tag type uint8 uType; if (IsInt()) { if (m_uVal <= 0xFF) { uType = TAGTYPE_UINT8; } else if (m_uVal <= 0xFFFF) { uType = TAGTYPE_UINT16; } else if (m_uVal <= 0xFFFFFFFF) { uType = TAGTYPE_UINT32; } else { uType = TAGTYPE_UINT64; } } else if (IsStr()) { uint16 uStrValLen = GetRawSize(*m_pstrVal, eStrEncode); if (uStrValLen >= 1 && uStrValLen <= 16) { uType = TAGTYPE_STR1 + uStrValLen - 1; } else { uType = TAGTYPE_STRING; } } else { uType = m_uType; } // Write tag name if (!m_Name.IsEmpty()) { data->WriteUInt8(uType); data->WriteString(m_Name,utf8strNone); } else { wxASSERT( m_uName != 0 ); data->WriteUInt8(uType | 0x80); data->WriteUInt8(m_uName); } // Write tag data switch (uType) { case TAGTYPE_STRING: data->WriteString(*m_pstrVal,eStrEncode); break; case TAGTYPE_UINT64: data->WriteUInt64(m_uVal); break; case TAGTYPE_UINT32: data->WriteUInt32(m_uVal); break; case TAGTYPE_UINT16: data->WriteUInt16(m_uVal); break; case TAGTYPE_UINT8: data->WriteUInt8(m_uVal); break; case TAGTYPE_FLOAT32: //#warning Endianess problem? data->Write(&m_fVal, 4); break; case TAGTYPE_HASH16: data->WriteHash(*m_hashVal); break; case TAGTYPE_BLOB: data->WriteUInt32(m_nSize); data->Write(m_pData, m_nSize); break; default: // See comment on the default: of CTag::CTag(const CFileDataIO& data, bool bOptUTF8) if (uType >= TAGTYPE_STR1 && uType <= TAGTYPE_STR16) { // Sending '0' as len size makes it not write the len on the IO file. // This is because this tag types send the len as their type. data->WriteString(*m_pstrVal,eStrEncode,0); } else { printf("%s; Unknown tag: type=0x%02X\n", __FUNCTION__, uType); wxFAIL; return false; } break; } return true; } bool CTag::WriteTagToFile(CFileDataIO* file, EUtf8Str WXUNUSED(eStrEncode), bool restrictive) const { // Don't write tags of unknown types, we wouldn't be able to read them in again // and the met file would be corrupted if (!restrictive || (IsStr() || IsInt() || IsFloat() || IsBlob())) { // If this fails, it'll throw. file->WriteTag(*this); return true; } else { printf("%s; Ignored tag with unknown type=0x%02X\n", __FUNCTION__, m_uType); return false; } } wxString CTag::GetFullInfo() const { wxString strTag; if (!m_Name.IsEmpty()) { // Special case: Kad tags, and some ED2k tags ... if (m_Name.Length() == 1) { strTag = CFormat(wxT("0x%02X")) % (unsigned)m_Name[0]; } else { strTag = wxT('\"'); strTag += m_Name; strTag += wxT('\"'); } } else { strTag = CFormat(wxT("0x%02X")) % m_uName; } strTag += wxT("="); if (m_uType == TAGTYPE_STRING) { strTag += wxT("\""); strTag += *m_pstrVal; strTag += wxT("\""); } else if (m_uType >= TAGTYPE_STR1 && m_uType <= TAGTYPE_STR16) { strTag += CFormat(wxT("(Str%u)\"")) % (m_uType - TAGTYPE_STR1 + 1) + *m_pstrVal + wxT("\""); } else if (m_uType == TAGTYPE_UINT64) { strTag += CFormat(wxT("(Int64)%u")) % m_uVal; } else if (m_uType == TAGTYPE_UINT32) { strTag += CFormat(wxT("(Int32)%u")) % m_uVal; } else if (m_uType == TAGTYPE_UINT16) { strTag += CFormat(wxT("(Int16)%u")) % m_uVal; } else if (m_uType == TAGTYPE_UINT8) { strTag += CFormat(wxT("(Int8)%u")) % m_uVal; } else if (m_uType == TAGTYPE_FLOAT32) { strTag += CFormat(wxT("(Float32)%f")) % m_fVal; } else if (m_uType == TAGTYPE_BLOB) { strTag += CFormat(wxT("(Blob)%u")) % m_nSize; } else if (m_uType == TAGTYPE_BSOB) { strTag += CFormat(wxT("(Bsob)%u")) % m_nSize; } else { strTag += CFormat(wxT("Type=%u")) % m_uType; } return strTag; } CTagHash::CTagHash(const wxString& name, const CMD4Hash& value) : CTag(name) { m_hashVal = new CMD4Hash(value); m_uType = TAGTYPE_HASH16; } CTagHash::CTagHash(uint8 name, const CMD4Hash& value) : CTag(name) { m_hashVal = new CMD4Hash(value); m_uType = TAGTYPE_HASH16; } void deleteTagPtrListEntries(TagPtrList* taglist) { DeleteContents(*taglist); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/StatTree.cpp0000644000175000017500000004334012050266603020562 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2005-2011 Dévai Tamás ( gonosztopi@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "StatTree.h" #include #include "OtherFunctions.h" #ifndef CLIENT_GUI #include // Needed for CFormat #define a_brackets_b(a,b) (a + wxT(" (") + b + wxT(")")) #endif /* !CLIENT_GUI */ #include // Needed for CECTag #ifdef CLIENT_GUI #include // Needed for CEC_StatTree_Node_Tag #else uint32_t NewStatTreeItemId() { static uint32_t lastid = 0; return ++lastid; } #endif /* CStatTreeItemBase */ #ifdef CLIENT_GUI CStatTreeItemBase::CStatTreeItemBase(const CECTag *tag) // ADUNANZA BEGIN // Back #if 0 : m_label(((CEC_StatTree_Node_Tag*)tag)->GetDisplayString()) , m_uniqueid(tag->GetTagByNameSafe(EC_TAG_STATTREE_NODEID)->GetInt()) #else : m_label(static_cast(tag)->GetDisplayString()), m_uniqueid(tag->GetTagByNameSafe(EC_TAG_STATTREE_NODEID)->GetInt()) #endif // ADUNANZA END { wxASSERT(tag->GetTagName() == EC_TAG_STATTREE_NODE); // ADUNANZA BEGIN // Back #if 0 for (CECTag::const_iterator it = tag->begin(); it != tag->end(); it++) { #else for (CECTag::const_iterator it = tag->begin(); it != tag->end(); ++it) { #endif // ADUNANZA END const CECTag *tmp = & *it; if (tmp->GetTagName() == EC_TAG_STATTREE_NODE) { m_children.push_back(new CStatTreeItemBase(tmp)); } } } #endif /* CLIENT_GUI */ CStatTreeItemBase::~CStatTreeItemBase() { DeleteContents(m_children); } #ifndef CLIENT_GUI CStatTreeItemBase* CStatTreeItemBase::AddChild( CStatTreeItemBase* child, uint32_t id, bool skipOneLevel) { wxMutexLocker lock(m_lock); if (skipOneLevel) { child->m_parent = m_parent; } else { child->m_parent = this; } child->m_id = id; if (m_flags & stSortChildren) { std::list::iterator it = m_children.begin(); while (it != m_children.end() && id < (*it)->m_id) { ++it; } m_children.insert(it, child); } else { m_children.push_back(child); } return child; } #endif /* !CLIENT_GUI */ bool CStatTreeItemBase::HasVisibleChildren() { wxMutexLocker lock(m_lock); for (std::list::const_iterator it = m_children.begin(); it != m_children.end(); ++it) { if ((*it)->IsVisible()) { return true; } } return false; } #ifndef CLIENT_GUI bool CStatTreeItemBase::HasChildWithId(uint32_t id) { wxMutexLocker lock(m_lock); for (std::list::const_iterator it = m_children.begin(); it != m_children.end(); ++it) { if ((*it)->m_id == id) { return true; } } return false; } CStatTreeItemBase* CStatTreeItemBase::GetChildById(uint32_t id) { wxMutexLocker lock(m_lock); for (std::list::const_iterator it = m_children.begin(); it != m_children.end(); ++it) { if ((*it)->m_id == id) { return *it; } } return NULL; } // Note: these functions do not lock the list, because it is already locked at the time they're called StatTreeItemIterator CStatTreeItemBase::GetFirstVisibleChild(uint32_t max_children) { StatTreeItemIterator it = m_children.begin(); m_visible_counter = --max_children; while (it != m_children.end() && !(*it)->IsVisible()) ++it; return it; } void CStatTreeItemBase::GetNextVisibleChild(StatTreeItemIterator& it) { if (m_flags & stCapChildren) { if (m_visible_counter == 0) { it = m_children.end(); return; } else { --m_visible_counter; } } if (it != m_children.end()) ++it; while (it != m_children.end() && !(*it)->IsVisible()) ++it; } // // Anything below is only for core. // bool CStatTreeItemBase::ValueSort(const CStatTreeItemBase* a, const CStatTreeItemBase* b) { if (a->m_id < 0x00000100 || a->m_id > 0x7fffffff || b->m_id < 0x00000100 || b->m_id > 0x7fffffff) { return a->m_id > b->m_id; } else { // ADUNANZA BEGIN // Back #if 0 return ((CStatTreeItemCounter*)a)->GetValue() > ((CStatTreeItemCounter*)b)->GetValue(); #else return dynamic_cast(a)->GetValue() > dynamic_cast(b)->GetValue(); #endif // ADUNANZA END } } #ifndef AMULE_DAEMON wxString CStatTreeItemBase::GetDisplayString() const { return wxGetTranslation(m_label); } #endif CECTag *CStatTreeItemBase::CreateECTag(uint32_t max_children) { if (IsVisible()) { wxMutexLocker lock(m_lock); CECTag *tag = new CECTag(EC_TAG_STATTREE_NODE, m_label); tag->AddTag(CECTag(EC_TAG_STATTREE_NODEID, m_uniqueid)); AddECValues(tag); m_visible_counter = max_children - 1; for (std::list::const_iterator it = m_children.begin(); it != m_children.end(); ++it) { CECTag *tmp = (*it)->CreateECTag(max_children); if (tmp) { tag->AddTag(*tmp); delete tmp; if (m_flags & stCapChildren) { if (m_visible_counter == 0) { break; } else { --m_visible_counter; } } } } return tag; } else { return NULL; } } /* CStatTreeItemSimple */ #ifndef AMULE_DAEMON wxString CStatTreeItemSimple::GetDisplayString() const { switch (m_valuetype) { case vtInteger: switch (m_displaymode) { case dmTime: return CFormat(wxGetTranslation(m_label)) % CastSecondsToHM(m_intvalue); case dmBytes: return CFormat(wxGetTranslation(m_label)) % CastItoXBytes(m_intvalue); default: return CFormat(wxGetTranslation(m_label)) % m_intvalue; } case vtFloat: return CFormat(wxGetTranslation(m_label)) % m_floatvalue; case vtString: return CFormat(wxGetTranslation(m_label)) % m_stringvalue; default: return wxGetTranslation(m_label); } } #endif bool CStatTreeItemSimple::IsVisible() const { if (m_flags & stHideIfZero) { switch (m_valuetype) { case vtInteger: return m_intvalue != 0; case vtFloat: return m_floatvalue != 0.0; case vtString: return !m_stringvalue.IsEmpty(); default: return false; } } return true; } void CStatTreeItemSimple::AddECValues(CECTag *tag) const { switch (m_valuetype) { case vtInteger: { if (m_displaymode == dmTime) { CECTag value(EC_TAG_STAT_NODE_VALUE, (uint32)m_intvalue); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_TIME)); tag->AddTag(value); } else { CECTag value(EC_TAG_STAT_NODE_VALUE, (uint64)m_intvalue); if (m_displaymode == dmBytes) { value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_BYTES)); } tag->AddTag(value); } break; } case vtFloat: { CECTag value(EC_TAG_STAT_NODE_VALUE, m_floatvalue); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_DOUBLE)); tag->AddTag(value); break; } case vtString: { CECTag value(EC_TAG_STAT_NODE_VALUE, m_stringvalue); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_STRING)); tag->AddTag(value); break; } default: break; } } /* CStatTreeItemCounterTmpl */ #ifndef AMULE_DAEMON template wxString CStatTreeItemCounterTmpl<_Tp>::GetDisplayString() const { wxString my_label = wxGetTranslation(m_label); // This is needed for client names, for example if (my_label == m_label) { if (m_label.Right(4) == wxT(": %s")) { my_label = wxGetTranslation( m_label.Mid(0, m_label.Length() - 4)) + wxString(wxT(": %s")); } } CFormat label(my_label); if (m_displaymode == dmBytes) { return label % CastItoXBytes(m_value); } else { wxString result = CFormat(wxT("%u")) % m_value; if ((m_flags & stShowPercent) && m_parent) { // ADUNANZA BEGIN // Back #if 0 result += CFormat(wxT(" (%.2f%%)")) % (((double)m_value / ((CStatTreeItemCounterTmpl<_Tp>*)m_parent)->m_value) * 100.0); #else // tentativo fix crash statistiche CStatTreeItemCounterTmpl<_Tp>* pCasted = dynamic_cast*>(m_parent); if (pCasted && (pCasted->m_value > 0.0)) { result += CFormat(wxT(" (%.2f%%)")) % ((double(m_value) / pCasted->m_value) * 100.0); } #endif // ADUNANZA END } return label % result; } } template wxString CStatTreeItemCounter::GetDisplayString() const; template wxString CStatTreeItemNativeCounter::GetDisplayString() const; #endif template void CStatTreeItemCounterTmpl<_Tp>::AddECValues(CECTag *tag) const { CECTag value(EC_TAG_STAT_NODE_VALUE, (uint64)m_value); if (m_displaymode == dmBytes) { value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_BYTES)); } else { value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_ISTRING)); if ((m_flags & stShowPercent) && m_parent) { // ADUNANZA BEGIN // Back #if 0 CECTag tmp(EC_TAG_STAT_NODE_VALUE, ((double)m_value / ((CStatTreeItemCounterTmpl<_Tp>*)m_parent)->m_value) * 100.0); #else // (double(m_value) / dynamic_cast*>(m_parent)->m_value) * 100.0); // tentativo fix crash statistiche double theValue = m_value; CStatTreeItemCounterTmpl<_Tp>* pCasted = dynamic_cast*>(m_parent); if (pCasted && (pCasted->m_value > 0.0)) { theValue = ((double)m_value / pCasted->m_value *100); } CECTag tmp(EC_TAG_STAT_NODE_VALUE, theValue); #endif // ADUNANZA END tmp.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_DOUBLE)); value.AddTag(tmp); } } tag->AddTag(value); } template void CStatTreeItemCounter::AddECValues(CECTag *tag) const; template void CStatTreeItemNativeCounter::AddECValues(CECTag *tag) const; /* CStatTreeItemUlDlCounter */ #ifndef AMULE_DAEMON wxString CStatTreeItemUlDlCounter::GetDisplayString() const { return CFormat(wxGetTranslation(m_label)) % a_brackets_b(CastItoXBytes(m_value), CastItoXBytes(m_value + m_totalfunc())); } #endif void CStatTreeItemUlDlCounter::AddECValues(CECTag *tag) const { CECTag value(EC_TAG_STAT_NODE_VALUE, m_value); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_BYTES)); CECTag tmp(EC_TAG_STAT_NODE_VALUE, m_value + m_totalfunc()); tmp.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_BYTES)); value.AddTag(tmp); tag->AddTag(value); } /* CStatTreeItemCounterMax */ #ifndef AMULE_DAEMON wxString CStatTreeItemCounterMax::GetDisplayString() const { return CFormat(wxGetTranslation(m_label)) % m_value; } #endif void CStatTreeItemCounterMax::AddECValues(CECTag *tag) const { tag->AddTag(CECTag(EC_TAG_STAT_NODE_VALUE, (uint64)m_value)); } /* CStatTreeItemPackets */ #ifndef AMULE_DAEMON wxString CStatTreeItemPackets::GetDisplayString() const { return CFormat(wxGetTranslation(m_label)) % a_brackets_b(CastItoXBytes(m_bytes), CastItoIShort(m_packets)); } #endif void CStatTreeItemPackets::AddECValues(CECTag *tag) const { CECTag value(EC_TAG_STAT_NODE_VALUE, m_bytes); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_BYTES)); CECTag tmp(EC_TAG_STAT_NODE_VALUE, (uint64)m_packets); tmp.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_ISHORT)); value.AddTag(tmp); tag->AddTag(value); } /* CStatTreeItemPacketTotals */ #ifndef AMULE_DAEMON wxString CStatTreeItemPacketTotals::GetDisplayString() const { uint32_t tmp_packets = m_packets; uint64_t tmp_bytes = m_bytes; for (std::vector::const_iterator it = m_counters.begin(); it != m_counters.end(); ++it) { tmp_packets += (*it)->m_packets; tmp_bytes += (*it)->m_bytes; } return CFormat(wxGetTranslation(m_label)) % a_brackets_b(CastItoXBytes(tmp_bytes), CastItoIShort(tmp_packets)); } #endif void CStatTreeItemPacketTotals::AddECValues(CECTag *tag) const { uint32_t tmp_packets = m_packets; uint64_t tmp_bytes = m_bytes; for (std::vector::const_iterator it = m_counters.begin(); it != m_counters.end(); ++it) { tmp_packets += (*it)->m_packets; tmp_bytes += (*it)->m_bytes; } CECTag value(EC_TAG_STAT_NODE_VALUE, tmp_bytes); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_BYTES)); CECTag tmp(EC_TAG_STAT_NODE_VALUE, (uint64)tmp_packets); tmp.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_ISHORT)); value.AddTag(tmp); tag->AddTag(value); } /* CStatTreeItemTimer */ #ifndef AMULE_DAEMON wxString CStatTreeItemTimer::GetDisplayString() const { return CFormat(wxGetTranslation(m_label)) % CastSecondsToHM(m_value ? GetTimerSeconds() : 0); } #endif void CStatTreeItemTimer::AddECValues(CECTag *tag) const { CECTag value(EC_TAG_STAT_NODE_VALUE, m_value ? (uint32)GetTimerSeconds() : (uint32)0); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_TIME)); tag->AddTag(value); } /* CStatTreeItemAverage */ #ifndef AMULE_DAEMON wxString CStatTreeItemAverage::GetDisplayString() const { if ((*m_divisor) != 0) { switch (m_displaymode) { case dmBytes: return CFormat(wxGetTranslation(m_label)) % CastItoXBytes((*m_dividend)/(*m_divisor)); case dmTime: return CFormat(wxGetTranslation(m_label)) % CastSecondsToHM((*m_dividend)/(*m_divisor)); default: return CFormat(wxGetTranslation(m_label)) % (CFormat(wxT("%u")) % ((uint64)(*m_dividend)/(*m_divisor))).GetString(); } } else { return CFormat(wxGetTranslation(m_label)) % wxT("-"); } } #endif void CStatTreeItemAverage::AddECValues(CECTag *tag) const { if ((*m_divisor) != 0) { uint64 data = (*m_dividend)/(*m_divisor); if (m_displaymode == dmTime) { CECTag value(EC_TAG_STAT_NODE_VALUE, (uint32)data); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_TIME)); tag->AddTag(value); } else { CECTag value(EC_TAG_STAT_NODE_VALUE, data); if (m_displaymode == dmBytes) { value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_BYTES)); } tag->AddTag(value); } } else { CECTag value(EC_TAG_STAT_NODE_VALUE, wxString(wxT("-"))); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_STRING)); tag->AddTag(value); } } /* CStatTreeItemAverageSpeed */ #ifndef AMULE_DAEMON wxString CStatTreeItemAverageSpeed::GetDisplayString() const { uint64 time = m_timer->GetTimerSeconds(); if (time) { return CFormat(wxGetTranslation(m_label)) % CastItoSpeed((*m_counter)/time); } else { return CFormat(wxGetTranslation(m_label)) % CastItoSpeed(0); } } #endif void CStatTreeItemAverageSpeed::AddECValues(CECTag *tag) const { uint64 time = m_timer->GetTimerSeconds(); if (time) { CECTag value(EC_TAG_STAT_NODE_VALUE, (uint32)((*m_counter)/time)); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_SPEED)); tag->AddTag(value); } else { CECTag value(EC_TAG_STAT_NODE_VALUE, (uint32)0); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_SPEED)); tag->AddTag(value); } } /* CStatTreeItemRatio */ wxString CStatTreeItemRatio::GetString() const { wxString ret; double v1 = m_counter1->GetValue(); double v2 = m_counter2->GetValue(); if (v1 > 0 && v2 > 0) { if (v2 < v1) { ret = CFormat(wxT("%.2f : 1")) % (v1 / v2); } else { ret = CFormat(wxT("1 : %.2f")) % (v2 / v1); } if (m_totalfunc1 && m_totalfunc2) { double t1 = m_totalfunc1() + v1; double t2 = m_totalfunc2() + v2; if (t2 < t1) { ret += CFormat(wxT(" (%.2f : 1)")) % (t1 / t2); } else { ret += CFormat(wxT(" (1 : %.2f)")) % (t2 / t1); } } } else { ret = _("Not available"); } return ret; } #ifndef AMULE_DAEMON wxString CStatTreeItemRatio::GetDisplayString() const { return CFormat(wxGetTranslation(m_label)) % GetString(); } #endif void CStatTreeItemRatio::AddECValues(CECTag *tag) const { CECTag value(EC_TAG_STAT_NODE_VALUE, GetString()); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_STRING)); tag->AddTag(value); } /* CStatTreeItemReconnects */ #ifndef AMULE_DAEMON wxString CStatTreeItemReconnects::GetDisplayString() const { return CFormat(wxGetTranslation(m_label)) % (m_value ? m_value - 1 : 0); } #endif void CStatTreeItemReconnects::AddECValues(CECTag *tag) const { tag->AddTag(CECTag(EC_TAG_STAT_NODE_VALUE, m_value ? (uint64)(m_value - 1) : (uint64)0)); } /* CStatTreeItemMaxConnLimitReached */ #ifndef AMULE_DAEMON wxString CStatTreeItemMaxConnLimitReached::GetDisplayString() const { if (m_count) { return CFormat(wxGetTranslation(m_label)) % (CFormat(wxT("%i : %s %s")) % m_count % m_time.FormatISODate() % m_time.FormatISOTime()); } else { return CFormat(wxGetTranslation(m_label)) % _("Never"); } } #endif void CStatTreeItemMaxConnLimitReached::AddECValues(CECTag *tag) const { wxString result; if (m_count) { result = CFormat(wxT("%i : %s %s")) % m_count % m_time.FormatISODate() % m_time.FormatISOTime(); } else { result = wxTRANSLATE("Never"); } CECTag value(EC_TAG_STAT_NODE_VALUE, result); value.AddTag(CECTag(EC_TAG_STAT_VALUE_TYPE, (uint8)EC_VALUE_STRING)); tag->AddTag(value); } /* CStatTreeItemTotalClients */ #ifndef AMULE_DAEMON wxString CStatTreeItemTotalClients::GetDisplayString() const { return CFormat(wxGetTranslation(m_label)) % (m_known->GetValue() + m_unknown->GetValue()) % m_known->GetValue(); } #endif void CStatTreeItemTotalClients::AddECValues(CECTag *tag) const { CECTag value1(EC_TAG_STAT_NODE_VALUE, (uint64)(m_known->GetValue() + m_unknown->GetValue())); tag->AddTag(value1); CECTag value2(EC_TAG_STAT_NODE_VALUE, (uint64)m_known->GetValue()); tag->AddTag(value2); } #endif /* !CLIENT_GUI */ // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/GenericClientListCtrl.h0000644000175000017500000001747212050266603022677 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef GENERICCLIENTLISTCTRL_H #define GENERICCLIENTLISTCTRL_H #include // Needed for std::multimap #include // Needed for std::vector #include #include "Types.h" // Needed for uint8 #include "Constants.h" // Needed for DownloadItemType #include "MuleListCtrl.h" // Needed for CMuleListCtrl #include "amuleDlg.h" // Needed for CamuleDlg::DialogType class CPartFile; class CClientRef; class wxBitmap; class wxRect; class wxDC; struct ClientCtrlItem_Struct; enum GenericColumnEnum { ColumnUserName = 0, ColumnUserDownloaded, ColumnUserUploaded, ColumnUserSpeedDown, ColumnUserSpeedUp, ColumnUserProgress, ColumnUserAvailable, ColumnUserVersion, ColumnUserQueueRankLocal, ColumnUserQueueRankRemote, ColumnUserOrigin, ColumnUserFileNameDownload, ColumnUserFileNameUpload, ColumnUserFileNameDownloadRemote, ColumnUserSharedFiles, ColumnInvalid }; struct CGenericClientListCtrlColumn { GenericColumnEnum cid; wxString title; int width; }; struct GenericColumnInfo { GenericColumnInfo(int n, CGenericClientListCtrlColumn* col) : n_columns(n), columns(col) { }; int n_columns; CGenericClientListCtrlColumn* columns; }; typedef std::vector CKnownFileVector; /** * This class is responsible for representing clients in a generic way. */ class CGenericClientListCtrl : public CMuleListCtrl { public: /** * Constructor. * * @see CMuleListCtrl::CMuleListCtrl for documentation of parameters. */ CGenericClientListCtrl( const wxString& tablename, wxWindow *parent, wxWindowID winid, const wxPoint &pos, const wxSize &size, long style, const wxValidator& validator, const wxString &name); /** * Destructor. */ virtual ~CGenericClientListCtrl(); /** * Initializes the control. We need a 2-stage initialization so the derived class members can be called. */ void InitColumnData(); /** * Adds a source belonging to the specified file. * * @param owner The owner of this specific source-entry, must be a valid pointer. * @param source The client object to be added, must be a valid pointer. * @param type If the source is a current source, or a A4AF source. * * Please note that the specified client will only be added to the list if it's * owner is shown, otherwise the source will simply be ignored. * Duplicates wont be added. */ void AddSource( CKnownFile* owner, const CClientRef& source, SourceItemType type ); /** * Removes a source from the list. * * @param source ID of the source to be removed. * @param owner Either a specific file, or NULL to remove the source from all files. */ void RemoveSource( uint32 source, const CKnownFile* owner ); /** * Shows the clients of specific files. * * @param file A valid, sorted vector of files whose clients will be shown. * * WARNING: The received vector *MUST* be odered with std::sort. * */ void ShowSources( const CKnownFileVector& files ); /** * Updates the state of the specified item, possibly causing a redrawing. * * @param toupdate ID of the client to be updated. * @param type If the source is a current source, or a A4AF source. * */ void UpdateItem(uint32 toupdate, SourceItemType type); void SetShowing( bool status ) { m_showing = status; } bool GetShowing() const { return m_showing; } // ADUNANZA BEGIN // Mr Hyde per Clarensio static uint8 GetAduMuleSmiley(const CClientRef& client); // ADUNANZA END protected: // The columns with their attributes; MUST be defined by the derived class. GenericColumnInfo m_columndata; static int wxCALLBACK SortProc(wxUIntPtr item1, wxUIntPtr item2, long sortData); private: /** * * Must be overriden by the derived class and return the dialog where this list is. * @see CamuleDlg::DialogType * */ virtual CamuleDlg::DialogType GetParentDialog() = 0; /** * Updates the displayed number representing the amount of clients currently shown. */ void ShowSourcesCount( int diff ); /** * Overloaded function needed for custom drawing of items. */ virtual void OnDrawItem( int item, wxDC* dc, const wxRect& rect, const wxRect& rectHL, bool highlighted ); /** * Draws a client item. */ void DrawClientItem( wxDC* dc, int nColumn, const wxRect& rect, ClientCtrlItem_Struct* item, int iTextOffset, int iBitmapOffset, int iBitmapXSize ) const; /** * Draws the download status (chunk) bar for a client. */ void DrawSourceStatusBar( const CClientRef& source, wxDC* dc, const wxRect& rect, bool bFlat) const; /** * Draaws the file parts bar for a client. */ void DrawStatusBar( const CClientRef& client, wxDC* dc, const wxRect& rect1 ) const; /** * @see CMuleListCtrl::GetTTSText * Just a dummy */ virtual wxString GetTTSText(unsigned) const { return wxEmptyString; } /** * Set "show sources" or "show peers" flag in Known File */ virtual void SetShowSources(CKnownFile *, bool) const = 0; /** * Translate the CID to a unique string for saving column sizes * @see CMuleListCtrl::InsertColumn */ wxString TranslateCIDToName(GenericColumnEnum cid); static int Compare( const CClientRef& client1, const CClientRef& client2, long lParamColumnSort); // Event-handlers for clients. void OnSwapSource( wxCommandEvent& event ); void OnViewFiles( wxCommandEvent& event ); void OnAddFriend( wxCommandEvent& event ); void OnSetFriendslot( wxCommandEvent& event ); void OnSendMessage( wxCommandEvent& event ); void OnViewClientInfo( wxCommandEvent& event ); // Misc event-handlers void OnItemActivated( wxListEvent& event ); void OnMouseRightClick( wxListEvent& event ); void OnMouseMiddleClick( wxListEvent& event ); void OnKeyPressed( wxKeyEvent& event ); //! The type of list used to store items on the listctrl. We use the unique ECID as key. typedef std::multimap ListItems; //! Shortcut to the pair-type used on the list. typedef ListItems::value_type ListItemsPair; //! This pair is used when searching for equal-ranges. typedef std::pair< ListItems::iterator, ListItems::iterator > ListIteratorPair; //! This list contains everything shown on the list. Sources are only to //! be found on this list if they are being displayed ListItems m_ListItems; //! Pointer to the current menu object, used to avoid multiple menus. wxMenu* m_menu; //! Cached brush object. wxBrush m_hilightBrush; //! Cached brush object. wxBrush m_hilightUnfocusBrush; //! The number of displayed sources int m_clientcount; //! The files being shown, if any. CKnownFileVector m_knownfiles; DECLARE_EVENT_TABLE() bool m_showing; void RawAddSource(CKnownFile* owner, CClientRef source, SourceItemType type); void RawRemoveSource( ListItems::iterator& it ); virtual bool IsShowingDownloadSources() const = 0; }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/EncryptedDatagramSocket.h0000644000175000017500000000400312050266603023234 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef ENCRYPTEDDATAGRAMSOCKET_H #define ENCRYPTEDDATAGRAMSOCKET_H #include "Proxy.h" #include "Types.h" class CEncryptedDatagramSocket : public CDatagramSocketProxy { public: CEncryptedDatagramSocket(wxIPaddress &address, wxSocketFlags flags = wxSOCKET_NONE, const CProxyData *proxyData = NULL); virtual ~CEncryptedDatagramSocket(); // TODO: Make protected once the UDP socket is again its own class. static int DecryptReceivedClient(uint8_t *bufIn, int bufLen, uint8_t **bufOut, uint32_t ip, uint32_t *receiverVerifyKey, uint32_t *senderVerifyKey); static int EncryptSendClient(uint8_t **buf, int bufLen, const uint8_t *clientHashOrKadID, bool kad, uint32_t receiverVerifyKey, uint32_t senderVerifyKey); static int DecryptReceivedServer(uint8_t* pbyBufIn, int nBufLen, uint8_t** ppbyBufOut, uint32_t dwBaseKey, uint32_t dbgIP); static int EncryptSendServer(uint8_t** ppbyBuf, int nBufLen, uint32_t dwBaseKey); }; #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/SafeFile.h0000644000175000017500000002201612050266603020147 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef SAFEFILE_H #define SAFEFILE_H #include // Needed for wxFileName #include // Needef for CMuleException #include "Tag.h" namespace Kademlia { class CUInt128; } using Kademlia::CUInt128; class CMD4Hash; /** * This class provides a interface for safe file IO. * * Basic IO operations will either succeed or throw an exception, * so that failure cannot be ignored. There are currently 3 types * of failures: Read past EOF, errors while reading, and errors * while writing. * * Beyond basic IO, the interface provides functions for reading * and writing a number of simple data-types. These are all written * and read as little-endian in order to allow for communication * across platforms. * * Note that when empty areas are created, for instance by seeking * past the end, then writing, the value of bytes where no data was * explicitly written is not specified. */ class CFileDataIO { public: /** * The Destructor does nothing, but is needed to allow * for safe deletion objects via CFileDataIO pointers. */ virtual ~CFileDataIO(); /** * Must return the current position in the file. */ virtual uint64 GetPosition() const = 0; /** * Must return the length of the file-object in bytes. */ virtual uint64 GetLength() const = 0; /** * Returns true when the file-position is past or at the end of the file. */ virtual bool Eof() const; /** * Changes the file position. * * Note that seeking to an negative position is an illegal operation. * * @see wxFile::Seek */ virtual uint64 Seek(sint64 offset, wxSeekMode from = wxFromStart) const; /** * Reads 'count' bytes into 'buffer'. * * @param buffer The target buffer. * @param count The number of bytes to read. * * Note that Read will read the specified number of * bytes unless this would read past the end of the * file. In that case, a CEOFException is thrown and * the position and target buffer is left unchanged. * * However, it is also possible that the read will * fail due to IO errors (bad hardware, ect), in which * case an CIOFailureException will be thrown. */ virtual void Read(void* buffer, size_t count) const; /** * Write 'count' bytes from 'buffer' into the file. * * @param buffer The source-data buffer. * @param count The number of bytes to write. * * Note that Write will throw a CIOFailureException * if it fails to write the specified number of bytes, * which can be caused by hardware failures, lack of * free space, etc. */ virtual void Write(const void* buffer, size_t count); /** * Reads the given type from the file, stored as little-endian. * * @see CSafeFileIO::Read */ //@{ virtual uint8 ReadUInt8() const; virtual uint16 ReadUInt16() const; virtual uint32 ReadUInt32() const; virtual uint64 ReadUInt64() const; virtual CUInt128 ReadUInt128() const; virtual CMD4Hash ReadHash() const; virtual float ReadFloat() const; virtual unsigned char* ReadBsob(uint8* size) const; //@} /** * Reads a string from the file. * * @param bOptUTF8 Specifies if the string is UTF8 encoded. * @param lenBytes The number of bytes used to store the string length. * @param SafeRead Avoids throwing CEOFException, see below. * @return The resulting text-string. * * Note that when SafeRead is set to true, CSafeFileIO will crop the length * read from the lenght-field (see lenBytes), so that at most GetLength() - * GetPosition() bytes are read. * * @see CSafeFileIO::Read */ virtual wxString ReadString(bool bOptUTF8, uint8 lenBytes = 2, bool SafeRead = false) const; /** * Reads a string from the file, where the length is specified directly. * * @param bOptUTF8 Specifies if the string is UTF8 encoded. * @param length The length of the string. * @return The resulting text-string. * * This function is typically used when the text-fields length is not stored * as an integer-field in front of the text-field. */ virtual wxString ReadOnlyString(bool bOptUTF8, uint16 length) const; /** * Writes a value of the given type to the file, storing it as little-endian. * * @see CSafeFileIO::Write */ //@{ virtual void WriteUInt8(uint8 value); virtual void WriteUInt16(uint16 value); virtual void WriteUInt32(uint32 value); virtual void WriteUInt64(uint64 value); virtual void WriteUInt128(const CUInt128& value); virtual void WriteHash(const CMD4Hash& value); virtual void WriteFloat(float value); virtual void WriteBsob( const unsigned char* val, uint8 size); //@} /** * Writes a text-string to the file. * * @param str The string to be written. * @param encoding The text-ecoding, see EUtf8Str. * @param lenBytes The number of bytes used to store the string length. * * Valid values for the 'lenBytes' parameters is 0 bytes (no length field), * 2 bytes and 4 bytes. * * @see CSafeFileIO::Write */ virtual void WriteString(const wxString& str, EUtf8Str encoding = utf8strNone, uint8 lenBytes = 2); /* Warning: Special Kad functions, needs documentation */ CTag* ReadTag(bool bOptACP = false) const; void ReadTagPtrList(TagPtrList* taglist, bool bOptACP = false) const; void WriteTag(const CTag& tag); void WriteTagPtrList(const TagPtrList& tagList); /* Special ED2Kv2 function */ uint64 GetIntTagValue() const; /* Some functions I added for simplicity */ // Very obvious bool IsEmpty() { return (GetLength() == 0); } // Appends to the end void Append(const uint8* buffer, int n) { Seek(0, wxFromEnd); Write(buffer, n); } protected: /** * The actual read / write function, as implemented by subclasses. * * @param buffer The buffer to read data into / write data from. * @param count The number of bytes to read / written. * @return The number of bytes read / written or -1 in case of errors. * * Note that the return value must be the actual number of bytes * read or written, with the exception that in case of errors, -1 * may be returned. This is because the return value is used to * detect if the operation succeded. * * This function should not throw Either of the CSafeIOExceptions, * this is done by the CSafeFileIO::Read and the CSafeFileIO::Write * functions. */ //@{ virtual sint64 doRead(void* buffer, size_t count) const = 0; virtual sint64 doWrite(const void* buffer, size_t count) = 0; //@} /** * The actual seek function, as implemented by subclasses. * * @param offset The absolute offset to seek to. * @return The resulting offset. * * This function should not throw of the CSafeIOExceptions, * this is handled by the CSafeFileIO::Seek. At the moment, * seeks that fail are considered a fatal error. */ virtual sint64 doSeek(sint64 offset) const = 0; private: /** * Helper-function that does the actual writing of the string. * * @param str The string to be written. * @param encoding The encoding of the string. * @param lenBytes The number of bytes used to store the string length. * */ void WriteStringCore(const char* str, EUtf8Str encoding, uint8 lenBytes); }; /** * The base class of IO exceptions used by * the CSafeFileIO interface and implementations * of the interface. */ struct CSafeIOException : public CMuleException { CSafeIOException(const wxString& type, const wxString& desc); }; /** * This exception is thrown when attempts are * made at reading past the end of the file. * * This typically happens when a invalid packet * is received that is shorter than expected and * is not fatal. */ struct CEOFException : public CSafeIOException { CEOFException(const wxString& desc); }; /** * This exception reflects a failure in performing * basic IO operations read and write. It will be * thrown in case a read or a write fails to read * or write the specified number of bytes. */ struct CIOFailureException : public CSafeIOException { CIOFailureException(const wxString& type, const wxString& desc); CIOFailureException(const wxString& desc); }; #endif // SAFEFILE_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/KnownFile.cpp0000644000175000017500000013204412050266603020723 0ustar l3onl3on// // This file is part of the aMule Project. // // Parts of this file are based on work from pan One (http://home-3.tiscali.nl/~meost/pms/) // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "KnownFile.h" // Do_not_auto_remove #include #include #include #include #include #include #ifdef CLIENT_GUI #include "UpDownClientEC.h" // Needed for CUpDownClient #else #include "updownclient.h" // Needed for CUpDownClient #endif #include "MemFile.h" // Needed for CMemFile #include "Packet.h" // Needed for CPacket #include "Preferences.h" // Needed for CPreferences #include "KnownFileList.h" // Needed for CKnownFileList #include "amule.h" // Needed for theApp #include "PartFile.h" // Needed for SavePartFile #include "ClientList.h" // Needed for clientlist (buddy support) #include "Logger.h" #include "ScopedPtr.h" // Needed for CScopedArray and CScopedPtr #include "GuiEvents.h" // Needed for Notify_* #include "SearchFile.h" // Needed for CSearchFile #include "FileArea.h" // Needed for CFileArea #include "FileAutoClose.h" // Needed for CFileAutoClose #include "Server.h" // Needed for CServer #include "CryptoPP_Inc.h" // Needed for MD4 #include // ADUNANZA BEGIN #include "RemoteSettings.h" // ADUNANZA END CFileStatistic::CFileStatistic() : requested(0), transferred(0), accepted(0), alltimerequested(0), alltimetransferred(0), alltimeaccepted(0) { } #ifndef CLIENT_GUI void CFileStatistic::AddRequest(){ requested++; alltimerequested++; theApp->knownfiles->requested++; theApp->sharedfiles->UpdateItem(fileParent); } void CFileStatistic::AddAccepted(){ accepted++; alltimeaccepted++; theApp->knownfiles->accepted++; theApp->sharedfiles->UpdateItem(fileParent); } void CFileStatistic::AddTransferred(uint64 bytes){ transferred += bytes; alltimetransferred += bytes; theApp->knownfiles->transferred += bytes; theApp->sharedfiles->UpdateItem(fileParent); } #endif // CLIENT_GUI /* Abstract File (base class)*/ CAbstractFile::CAbstractFile() : m_iRating(0), m_hasComment(false), m_iUserRating(0), m_nFileSize(0) { } CAbstractFile::CAbstractFile(const CAbstractFile& other) : m_abyFileHash(other.m_abyFileHash), m_strComment(other.m_strComment), m_iRating(other.m_iRating), m_hasComment(other.m_hasComment), m_iUserRating(other.m_iUserRating), m_taglist(other.m_taglist), m_nFileSize(other.m_nFileSize), m_fileName(other.m_fileName) { /* // TODO: Currently it's not safe to duplicate the entries, but isn't needed either. CKadEntryPtrList::const_iterator it = other.m_kadNotes.begin(); for (; it != other.m_kadNotes.end(); ++it) { m_kadNotes.push_back(new Kademlia::CEntry(**it)); } */ } void CAbstractFile::SetFileName(const CPath& fileName) { m_fileName = fileName; } uint32 CAbstractFile::GetIntTagValue(uint8 tagname) const { ArrayOfCTag::const_iterator it = m_taglist.begin(); for (; it != m_taglist.end(); ++it){ if (((*it).GetNameID() == tagname) && (*it).IsInt()) { return (*it).GetInt(); } } return 0; } bool CAbstractFile::GetIntTagValue(uint8 tagname, uint32& ruValue) const { ArrayOfCTag::const_iterator it = m_taglist.begin(); for (; it != m_taglist.end(); ++it){ if (((*it).GetNameID() == tagname) && (*it).IsInt()){ ruValue = (*it).GetInt(); return true; } } return false; } uint32 CAbstractFile::GetIntTagValue(const wxString& tagname) const { ArrayOfCTag::const_iterator it = m_taglist.begin(); for (; it != m_taglist.end(); ++it){ if ((*it).IsInt() && ((*it).GetName() == tagname)) { return (*it).GetInt(); } } return 0; } const wxString& CAbstractFile::GetStrTagValue(uint8 tagname) const { ArrayOfCTag::const_iterator it = m_taglist.begin(); for (; it != m_taglist.end(); ++it){ if ((*it).GetNameID() == tagname && (*it).IsStr()) { return (*it).GetStr(); } } return EmptyString; } const wxString& CAbstractFile::GetStrTagValue(const wxString& tagname) const { ArrayOfCTag::const_iterator it = m_taglist.begin(); for (; it != m_taglist.end(); ++it){ if ((*it).IsStr() && ((*it).GetName() == tagname)) { return (*it).GetStr(); } } return EmptyString; } const CTag *CAbstractFile::GetTag(uint8 tagname, uint8 tagtype) const { ArrayOfCTag::const_iterator it = m_taglist.begin(); for (; it != m_taglist.end(); ++it){ if ((*it).GetNameID() == tagname && (*it).GetType() == tagtype) { return &(*it); } } return NULL; } const CTag *CAbstractFile::GetTag(const wxString& tagname, uint8 tagtype) const { ArrayOfCTag::const_iterator it = m_taglist.begin(); for (; it != m_taglist.end(); ++it){ if ((*it).GetType() == tagtype && (*it).GetName() == tagname) { return &(*it); } } return NULL; } const CTag *CAbstractFile::GetTag(uint8 tagname) const { ArrayOfCTag::const_iterator it = m_taglist.begin(); for (; it != m_taglist.end(); ++it){ if ((*it).GetNameID() == tagname) { return &(*it); } } return NULL; } const CTag *CAbstractFile::GetTag(const wxString& tagname) const { ArrayOfCTag::const_iterator it = m_taglist.begin(); for (; it != m_taglist.end(); ++it){ if ((*it).GetName() == tagname) { return &(*it); } } return NULL; } void CAbstractFile::AddTagUnique(const CTag &rTag) { ArrayOfCTag::iterator it = m_taglist.begin(); for (; it != m_taglist.end(); ++it) { if ( ( ((*it).GetNameID() != 0 && (*it).GetNameID() == rTag.GetNameID()) || (!(*it).GetName().IsEmpty() && !rTag.GetName().IsEmpty() && (*it).GetName() == rTag.GetName()) ) && (*it).GetType() == rTag.GetType()){ // ADUNANZA BEGIN // Backport da aMule-SVN #if 0 m_taglist.erase(it); #else it = m_taglist.erase(it); #endif // ADUNANZA END m_taglist.insert(it, rTag); return; } } m_taglist.push_back(rTag); } #ifndef CLIENT_GUI void CAbstractFile::AddNote(Kademlia::CEntry *pEntry) { CKadEntryPtrList::iterator it = m_kadNotes.begin(); for (; it != m_kadNotes.end(); ++it) { Kademlia::CEntry* entry = *it; if(entry->m_uIP == pEntry->m_uIP || entry->m_uSourceID == pEntry->m_uSourceID) { delete pEntry; return; } } m_kadNotes.push_front(pEntry); } #else void CAbstractFile::AddNote(Kademlia::CEntry *) { } #endif /* Known File */ CKnownFile::CKnownFile() { Init(); } CKnownFile::CKnownFile(uint32 ecid) : CECID(ecid) { Init(); } //#warning Experimental: Construct a CKnownFile from a CSearchFile CKnownFile::CKnownFile(const CSearchFile &searchFile) : // This will copy the file hash CAbstractFile(static_cast(searchFile)) { Init(); // Use CKnownFile::SetFileName() SetFileName(searchFile.GetFileName()); // Use CKnownFile::SetFileSize() SetFileSize(searchFile.GetFileSize()); } void CKnownFile::Init() { m_showSources = false; m_showPeers = false; m_nCompleteSourcesTime = time(NULL); m_nCompleteSourcesCount = 0; m_nCompleteSourcesCountLo = 0; m_nCompleteSourcesCountHi = 0; m_bCommentLoaded = false; m_iPartCount = 0; m_iED2KPartCount = 0; m_iED2KPartHashCount = 0; m_PublishedED2K = false; kadFileSearchID = 0; m_lastPublishTimeKadSrc = 0; m_lastPublishTimeKadNotes = 0; m_lastBuddyIP = 0; m_lastDateChanged = 0; m_bAutoUpPriority = thePrefs::GetNewAutoUp(); m_iUpPriority = ( m_bAutoUpPriority ) ? PR_HIGH : PR_NORMAL; statistic.fileParent = this; // ADUNANZA BEGIN // back m_hashingProgress = 0; // ADUNANZA END #ifndef CLIENT_GUI m_pAICHHashSet = new CAICHHashSet(this); #endif } void CKnownFile::SetFileSize(uint64 nFileSize) { CAbstractFile::SetFileSize(nFileSize); #ifndef CLIENT_GUI m_pAICHHashSet->SetFileSize(nFileSize); #endif // Examples of parthashs, hashsets and filehashs for different filesizes // according the ed2k protocol //---------------------------------------------------------------------- // //File size: 3 bytes //File hash: 2D55E87D0E21F49B9AD25F98531F3724 //Nr. hashs: 0 // // //File size: 1*PARTSIZE //File hash: A72CA8DF7F07154E217C236C89C17619 //Nr. hashs: 2 //Hash[ 0]: 4891ED2E5C9C49F442145A3A5F608299 //Hash[ 1]: 31D6CFE0D16AE931B73C59D7E0C089C0 *special part hash* // // //File size: 1*PARTSIZE + 1 byte //File hash: 2F620AE9D462CBB6A59FE8401D2B3D23 //Nr. hashs: 2 //Hash[ 0]: 121795F0BEDE02DDC7C5426D0995F53F //Hash[ 1]: C329E527945B8FE75B3C5E8826755747 // // //File size: 2*PARTSIZE //File hash: A54C5E562D5E03CA7D77961EB9A745A4 //Nr. hashs: 3 //Hash[ 0]: B3F5CE2A06BF403BFB9BFFF68BDDC4D9 //Hash[ 1]: 509AA30C9EA8FC136B1159DF2F35B8A9 //Hash[ 2]: 31D6CFE0D16AE931B73C59D7E0C089C0 *special part hash* // // //File size: 3*PARTSIZE //File hash: 5E249B96F9A46A18FC2489B005BF2667 //Nr. hashs: 4 //Hash[ 0]: 5319896A2ECAD43BF17E2E3575278E72 //Hash[ 1]: D86EF157D5E49C5ED502EDC15BB5F82B //Hash[ 2]: 10F2D5B1FCB95C0840519C58D708480F //Hash[ 3]: 31D6CFE0D16AE931B73C59D7E0C089C0 *special part hash* // // //File size: 3*PARTSIZE + 1 byte //File hash: 797ED552F34380CAFF8C958207E40355 //Nr. hashs: 4 //Hash[ 0]: FC7FD02CCD6987DCF1421F4C0AF94FB8 //Hash[ 1]: 2FE466AF8A7C06DA3365317B75A5ACFE //Hash[ 2]: 873D3BF52629F7C1527C6E8E473C1C30 //Hash[ 3]: BCE50BEE7877BB07BB6FDA56BFE142FB // // File size Data parts ED2K parts ED2K part hashs // --------------------------------------------------------------- // 1..PARTSIZE-1 1 1 0(!) // PARTSIZE 1 2(!) 2(!) // PARTSIZE+1 2 2 2 // PARTSIZE*2 2 3(!) 3(!) // PARTSIZE*2+1 3 3 3 if (nFileSize == 0){ //wxFAIL; // Kry - Why commented out by lemonfan? it can never be 0 m_iPartCount = 0; m_iED2KPartCount = 0; m_iED2KPartHashCount = 0; m_sizeLastPart = 0; return; } // nr. of data parts m_iPartCount = nFileSize / PARTSIZE + 1; // size of last part m_sizeLastPart = nFileSize % PARTSIZE; // file with size of n * PARTSIZE if (m_sizeLastPart == 0) { m_sizeLastPart = PARTSIZE; m_iPartCount--; } // nr. of parts to be used with OP_FILESTATUS m_iED2KPartCount = nFileSize / PARTSIZE + 1; // nr. of parts to be used with OP_HASHSETANSWER m_iED2KPartHashCount = nFileSize / PARTSIZE; if (m_iED2KPartHashCount != 0) { m_iED2KPartHashCount += 1; } } void CKnownFile::AddUploadingClient(CUpDownClient* client) { m_ClientUploadList.insert(CCLIENTREF(client, wxT("CKnownFile::AddUploadingClient m_ClientUploadList"))); SourceItemType type = UNAVAILABLE_SOURCE; switch (client->GetUploadState()) { case US_UPLOADING: case US_ONUPLOADQUEUE: type = AVAILABLE_SOURCE; break; default: { // Any other state is UNAVAILABLE_SOURCE by default. } } Notify_SharedCtrlAddClient(this, CCLIENTREF(client, wxT("CKnownFile::AddUploadingClient Notify_SharedCtrlAddClient")), type); UpdateAutoUpPriority(); } void CKnownFile::RemoveUploadingClient(CUpDownClient* client) { if (m_ClientUploadList.erase(CCLIENTREF(client, wxEmptyString))) { Notify_SharedCtrlRemoveClient(client->ECID(), this); UpdateAutoUpPriority(); } } #ifdef CLIENT_GUI // ADUNANZA BEGIN // backport #if 0 CKnownFile::CKnownFile(CEC_SharedFile_Tag *tag) : CECID(tag->ID()) #else CKnownFile::CKnownFile(const CEC_SharedFile_Tag *tag) : CECID(tag->ID()) #endif // ADUNANZA END { Init(); m_abyFileHash = tag->FileHash(); SetFileSize(tag->SizeFull()); m_AvailPartFrequency.insert(m_AvailPartFrequency.end(), m_iPartCount, 0); m_queuedCount = 0; } CKnownFile::~CKnownFile() { } void CKnownFile::UpdateAutoUpPriority() { } #else // ! CLIENT_GUI CKnownFile::~CKnownFile() { SourceSet::iterator it = m_ClientUploadList.begin(); for ( ; it != m_ClientUploadList.end(); ++it ) { it->ClearUploadFileID(); } delete m_pAICHHashSet; } void CKnownFile::SetFilePath(const CPath& filePath) { m_filePath = filePath; } // needed for memfiles. its probably better to switch everything to CFile... bool CKnownFile::LoadHashsetFromFile(const CFileDataIO* file, bool checkhash) { CMD4Hash checkid = file->ReadHash(); uint16 parts = file->ReadUInt16(); m_hashlist.clear(); for (uint16 i = 0; i < parts; ++i){ CMD4Hash cur_hash = file->ReadHash(); m_hashlist.push_back(cur_hash); } // SLUGFILLER: SafeHash - always check for valid m_hashlist if (!checkhash){ m_abyFileHash = checkid; if (parts <= 1) { // nothing to check return true; } } else { if ( m_abyFileHash != checkid ) { return false; // wrong file? } else { if (parts != GetED2KPartHashCount()) { return false; } } } // SLUGFILLER: SafeHash // trust noone ;-) // lol, useless comment but made me lmao // wtf you guys are weird. if (!m_hashlist.empty()) { CreateHashFromHashlist(m_hashlist, &checkid); } if ( m_abyFileHash == checkid ) { return true; } else { m_hashlist.clear(); return false; } } bool CKnownFile::LoadTagsFromFile(const CFileDataIO* file) { uint32 tagcount = file->ReadUInt32(); m_taglist.clear(); for (uint32 j = 0; j != tagcount; ++j) { CTag newtag(*file, true); switch(newtag.GetNameID()){ case FT_FILENAME: if (GetFileName().IsOk()) { // Unlike eMule, we actually prefer the second // filename tag, since we use it to specify the // 'universial' filename (see CPath::ToUniv). CPath path = CPath::FromUniv(newtag.GetStr()); // May be invalid, if from older versions where // unicoded filenames be saved as empty-strings. if (path.IsOk()) { SetFileName(path); } } else { SetFileName(CPath(newtag.GetStr())); } break; case FT_FILESIZE: SetFileSize(newtag.GetInt()); m_AvailPartFrequency.clear(); m_AvailPartFrequency.insert( m_AvailPartFrequency.begin(), GetPartCount(), 0); break; case FT_ATTRANSFERRED: statistic.alltimetransferred += newtag.GetInt(); break; case FT_ATTRANSFERREDHI: statistic.alltimetransferred = (((uint64)newtag.GetInt()) << 32) + ((uint64)statistic.alltimetransferred); break; case FT_ATREQUESTED: statistic.alltimerequested = newtag.GetInt(); break; case FT_ATACCEPTED: statistic.alltimeaccepted = newtag.GetInt(); break; case FT_ULPRIORITY: m_iUpPriority = newtag.GetInt(); if( m_iUpPriority == PR_AUTO ){ m_iUpPriority = PR_HIGH; m_bAutoUpPriority = true; } else { if ( m_iUpPriority != PR_VERYLOW && m_iUpPriority != PR_LOW && m_iUpPriority != PR_NORMAL && m_iUpPriority != PR_HIGH && m_iUpPriority != PR_VERYHIGH && m_iUpPriority != PR_POWERSHARE) { m_iUpPriority = PR_NORMAL; } m_bAutoUpPriority = false; } break; case FT_PERMISSIONS: // Ignore it, it's not used anymore. break; case FT_AICH_HASH: { CAICHHash hash; bool hashSizeOk = hash.DecodeBase32(newtag.GetStr()) == CAICHHash::GetHashSize(); wxASSERT(hashSizeOk); if (hashSizeOk) { m_pAICHHashSet->SetMasterHash(hash, AICH_HASHSETCOMPLETE); } break; } case FT_KADLASTPUBLISHSRC: SetLastPublishTimeKadSrc( newtag.GetInt(), 0 ); // ADUNANZA BEGIN #if 0 if(GetLastPublishTimeKadSrc() > (uint32)time(NULL)+KADEMLIAREPUBLISHTIMES) { #else if (GetLastPublishTimeKadSrc() > ((uint32)time(NULL) + theApp->get_kadRepublishTimeS())) { #endif // ADUNANZA END //There may be a posibility of an older client that saved a random number here.. This will check for that.. SetLastPublishTimeKadSrc(0, 0); } break; case FT_KADLASTPUBLISHNOTES: SetLastPublishTimeKadNotes( newtag.GetInt() ); break; case FT_KADLASTPUBLISHKEY: // Just purge it wxASSERT( newtag.IsInt() ); break; default: // Store them here and write them back on saving. m_taglist.push_back(newtag); } } return true; } bool CKnownFile::LoadDateFromFile(const CFileDataIO* file) { m_lastDateChanged = file->ReadUInt32(); return true; } bool CKnownFile::LoadFromFile(const CFileDataIO* file) { // SLUGFILLER: SafeHash - load first, verify later bool ret1 = LoadDateFromFile(file); bool ret2 = LoadHashsetFromFile(file,false); bool ret3 = LoadTagsFromFile(file); UpdatePartsInfo(); // Final hash-count verification, needs to be done after the tags are loaded. return ret1 && ret2 && ret3 && GetED2KPartHashCount()==GetHashCount(); // SLUGFILLER: SafeHash } bool CKnownFile::WriteToFile(CFileDataIO* file) { wxCHECK(!IsPartFile(), false); // date file->WriteUInt32(m_lastDateChanged); // hashset file->WriteHash(m_abyFileHash); uint16 parts = m_hashlist.size(); file->WriteUInt16(parts); for (int i = 0; i < parts; ++i) file->WriteHash(m_hashlist[i]); //tags const int iFixedTags = 8; uint32 tagcount = iFixedTags; if (HasProperAICHHashSet()) { tagcount++; } // Float meta tags are currently not written. All older eMule versions < 0.28a have // a bug in the meta tag reading+writing code. To achive maximum backward // compatibility for met files with older eMule versions we just don't write float // tags. This is OK, because we (eMule) do not use float tags. The only float tags // we may have to handle is the '# Sent' tag from the Hybrid, which is pretty // useless but may be received from us via the servers. // // The code for writing the float tags SHOULD BE ENABLED in SOME MONTHS (after most // people are using the newer eMule versions which do not write broken float tags). for (size_t j = 0; j < m_taglist.size(); ++j){ if (m_taglist[j].IsInt() || m_taglist[j].IsStr()) { ++tagcount; } } if (m_lastPublishTimeKadSrc) { ++tagcount; } if (m_lastPublishTimeKadNotes){ ++tagcount; } // standard tags file->WriteUInt32(tagcount); // We still save the unicoded filename, for backwards // compatibility with pre-2.2 and other clients. CTagString nametag_unicode(FT_FILENAME, GetFileName().GetRaw()); // We write it with BOM to kep eMule compatibility nametag_unicode.WriteTagToFile(file,utf8strOptBOM); // The non-unicoded filename is written in an 'universial' // format, which allows us to identify files, even if the // system locale changes. CTagString nametag(FT_FILENAME, CPath::ToUniv(GetFileName())); nametag.WriteTagToFile(file); CTagIntSized sizetag(FT_FILESIZE, GetFileSize(), IsLargeFile() ? 64 : 32); sizetag.WriteTagToFile(file); // statistic uint32 tran; tran=statistic.alltimetransferred & 0xFFFFFFFF; CTagInt32 attag1(FT_ATTRANSFERRED, tran); attag1.WriteTagToFile(file); tran=statistic.alltimetransferred>>32; CTagInt32 attag4(FT_ATTRANSFERREDHI, tran); attag4.WriteTagToFile(file); CTagInt32 attag2(FT_ATREQUESTED, statistic.GetAllTimeRequests()); attag2.WriteTagToFile(file); CTagInt32 attag3(FT_ATACCEPTED, statistic.GetAllTimeAccepts()); attag3.WriteTagToFile(file); // priority N permission CTagInt32 priotag(FT_ULPRIORITY, IsAutoUpPriority() ? PR_AUTO : m_iUpPriority); priotag.WriteTagToFile(file); //AICH Filehash if (HasProperAICHHashSet()) { CTagString aichtag(FT_AICH_HASH, m_pAICHHashSet->GetMasterHash().GetString()); aichtag.WriteTagToFile(file); } // Kad sources if (m_lastPublishTimeKadSrc){ CTagInt32 kadLastPubSrc(FT_KADLASTPUBLISHSRC, m_lastPublishTimeKadSrc); kadLastPubSrc.WriteTagToFile(file); } // Kad notes if (m_lastPublishTimeKadNotes){ CTagInt32 kadLastPubNotes(FT_KADLASTPUBLISHNOTES, m_lastPublishTimeKadNotes); kadLastPubNotes.WriteTagToFile(file); } //other tags for (size_t j = 0; j < m_taglist.size(); ++j){ if (m_taglist[j].IsInt() || m_taglist[j].IsStr()) { m_taglist[j].WriteTagToFile(file); } } return true; } void CKnownFile::CreateHashFromHashlist(const ArrayOfCMD4Hash& hashes, CMD4Hash* Output) { wxCHECK_RET(hashes.size(), wxT("No input to hash from in CreateHashFromHashlist")); std::vector buffer(hashes.size() * MD4HASH_LENGTH); std::vector::iterator it = buffer.begin(); for (size_t i = 0; i < hashes.size(); ++i) { it = STLCopy_n(hashes[i].GetHash(), MD4HASH_LENGTH, it); } CreateHashFromInput(&buffer[0], buffer.size(), Output, NULL); } void CKnownFile::CreateHashFromFile(CFileAutoClose& file, uint64 offset, uint32 Length, CMD4Hash* Output, CAICHHashTree* pShaHashOut) { wxCHECK_RET(Length, wxT("No input to hash from in CreateHashFromFile")); CFileArea area; area.ReadAt(file, offset, Length); CreateHashFromInput(area.GetBuffer(), Length, Output, pShaHashOut); area.CheckError(); } void CKnownFile::CreateHashFromInput(const byte* input, uint32 Length, CMD4Hash* Output, CAICHHashTree* pShaHashOut ) { wxASSERT_MSG(Output || pShaHashOut, wxT("Nothing to do in CreateHashFromInput")); { wxCHECK_RET(input, wxT("No input to hash from in CreateHashFromInput")); } wxASSERT(Length <= PARTSIZE); // We never hash more than one PARTSIZE CMemFile data(input, Length); uint32 Required = Length; byte X[64*128]; uint32 posCurrentEMBlock = 0; uint32 nIACHPos = 0; CScopedPtr pHashAlg(CAICHHashSet::GetNewHashAlgo()); // This is all AICH. while (Required >= 64) { uint32 len = Required / 64; if (len > sizeof(X)/(64 * sizeof(X[0]))) { len = sizeof(X)/(64 * sizeof(X[0])); } data.Read(&X, len * 64); // SHA hash needs 180KB blocks if (pShaHashOut) { if (nIACHPos + len*64 >= EMBLOCKSIZE) { uint32 nToComplete = EMBLOCKSIZE - nIACHPos; pHashAlg->Add(X, nToComplete); wxASSERT( nIACHPos + nToComplete == EMBLOCKSIZE ); pShaHashOut->SetBlockHash(EMBLOCKSIZE, posCurrentEMBlock, pHashAlg.get()); posCurrentEMBlock += EMBLOCKSIZE; pHashAlg->Reset(); pHashAlg->Add(X+nToComplete,(len*64) - nToComplete); nIACHPos = (len*64) - nToComplete; } else{ pHashAlg->Add(X, len*64); nIACHPos += len*64; } } Required -= len*64; } // bytes to read Required = Length % 64; if (Required != 0){ data.Read(&X,Required); if (pShaHashOut != NULL){ if (nIACHPos + Required >= EMBLOCKSIZE){ uint32 nToComplete = EMBLOCKSIZE - nIACHPos; pHashAlg->Add(X, nToComplete); wxASSERT( nIACHPos + nToComplete == EMBLOCKSIZE ); pShaHashOut->SetBlockHash(EMBLOCKSIZE, posCurrentEMBlock, pHashAlg.get()); posCurrentEMBlock += EMBLOCKSIZE; pHashAlg->Reset(); pHashAlg->Add(X+nToComplete, Required - nToComplete); nIACHPos = Required - nToComplete; } else{ pHashAlg->Add(X, Required); nIACHPos += Required; } } } if (pShaHashOut != NULL){ if(nIACHPos > 0){ pShaHashOut->SetBlockHash(nIACHPos, posCurrentEMBlock, pHashAlg.get()); posCurrentEMBlock += nIACHPos; } wxASSERT( posCurrentEMBlock == Length ); wxCHECK2( pShaHashOut->ReCalculateHash(pHashAlg.get(), false), ); } if (Output != NULL){ #ifdef __WEAK_CRYPTO__ CryptoPP::Weak::MD4 md4_hasher; #else CryptoPP::MD4 md4_hasher; #endif md4_hasher.CalculateDigest(Output->GetHash(), input, Length); } } const CMD4Hash& CKnownFile::GetPartHash(uint16 part) const { wxASSERT( part < m_hashlist.size() ); return m_hashlist[part]; } CPacket* CKnownFile::CreateSrcInfoPacket(const CUpDownClient* forClient, uint8 byRequestedVersion, uint16 nRequestedOptions) { // Kad reviewed if (m_ClientUploadList.empty()) { return NULL; } // ADUNANZA BEGIN // back #if 0 if ((((CKnownFile*)forClient->GetRequestFile() != this) && ((CKnownFile*)forClient->GetUploadFile() != this)) || forClient->GetUploadFileID() != GetFileHash()) { #else if (((static_cast(forClient->GetRequestFile()) != this) && (forClient->GetUploadFile() != this)) || forClient->GetUploadFileID() != GetFileHash()) { #endif // ADUNANZA END wxString file1 = _("Unknown"); if (forClient->GetRequestFile() && forClient->GetRequestFile()->GetFileName().IsOk()) { file1 = forClient->GetRequestFile()->GetFileName().GetPrintable(); } else if (forClient->GetUploadFile() && forClient->GetUploadFile()->GetFileName().IsOk()) { file1 = forClient->GetUploadFile()->GetFileName().GetPrintable(); } wxString file2 = _("Unknown"); if (GetFileName().IsOk()) { file2 = GetFileName().GetPrintable(); } AddDebugLogLineN(logKnownFiles, wxT("File mismatch on source packet (K) Sending: ") + file1 + wxT(" From: ") + file2); return NULL; } const BitVector& rcvstatus = forClient->GetUpPartStatus(); bool SupportsUploadChunksState = !rcvstatus.empty(); //wxASSERT(rcvstatus.size() == GetPartCount()); // Obviously! if (rcvstatus.size() != GetPartCount()) { // Yuck. Same file but different part count? Seriously fucked up. AddDebugLogLineN(logKnownFiles, CFormat(wxT("Impossible situation: different partcounts for the same known file: %i (client) and %i (file)")) % rcvstatus.size() % GetPartCount()); return NULL; } CMemFile data(1024); uint8 byUsedVersion; bool bIsSX2Packet; if (forClient->SupportsSourceExchange2() && byRequestedVersion > 0){ // the client uses SourceExchange2 and requested the highest version he knows // and we send the highest version we know, but of course not higher than his request byUsedVersion = std::min(byRequestedVersion, (uint8)SOURCEEXCHANGE2_VERSION); bIsSX2Packet = true; data.WriteUInt8(byUsedVersion); // we don't support any special SX2 options yet, reserved for later use if (nRequestedOptions != 0) { AddDebugLogLineN(logKnownFiles, CFormat(wxT("Client requested unknown options for SourceExchange2: %u")) % nRequestedOptions); } } else { byUsedVersion = forClient->GetSourceExchange1Version(); bIsSX2Packet = false; if (forClient->SupportsSourceExchange2()) { AddDebugLogLineN(logKnownFiles, wxT("Client which announced to support SX2 sent SX1 packet instead")); } } uint16 nCount = 0; data.WriteHash(forClient->GetUploadFileID()); data.WriteUInt16(nCount); uint32 cDbgNoSrc = 0; SourceSet::iterator it = m_ClientUploadList.begin(); // ADUNANZA BEGIN // backport aMule-SVN per iteratori #if 0 for ( ; it != m_ClientUploadList.end(); it++ ) { #else for ( ; it != m_ClientUploadList.end(); ++it ) { #endif // ADUNANZA END const CUpDownClient *cur_src = it->GetClient(); // ADUNANZA BEGIN if (!cur_src) continue; // ADUNANZA END if ( cur_src->HasLowID() || cur_src == forClient || !( cur_src->GetUploadState() == US_UPLOADING || cur_src->GetUploadState() == US_ONUPLOADQUEUE)) { continue; } bool bNeeded = false; if ( SupportsUploadChunksState ) { const BitVector& srcstatus = cur_src->GetUpPartStatus(); if ( !srcstatus.empty() ) { //wxASSERT(srcstatus.size() == GetPartCount()); // Obviously! if (srcstatus.size() != GetPartCount()) { continue; } if ( cur_src->GetUpPartCount() == forClient->GetUpPartCount() ) { for (int x = 0; x < GetPartCount(); x++ ) { if ( srcstatus.get(x) && !rcvstatus.get(x) ) { // We know the receiving client needs // a chunk from this client. bNeeded = true; break; } } } } else { cDbgNoSrc++; // This client doesn't support upload chunk status. // So just send it and hope for the best. bNeeded = true; } } else { // remote client does not support upload chunk status, // search sources which have at least one complete part // we could even sort the list of sources by available // chunks to return as much sources as possible which // have the most available chunks. but this could be // a noticeable performance problem. const BitVector& srcstatus = cur_src->GetUpPartStatus(); if ( !srcstatus.empty() ) { //wxASSERT(srcstatus.size() == GetPartCount()); if (srcstatus.size() != GetPartCount()) { continue; } for (int x = 0; x < GetPartCount(); x++ ) { if ( srcstatus.get(x) ) { // this client has at least one chunk bNeeded = true; break; } } } else { // This client doesn't support upload chunk status. // So just send it and hope for the best. bNeeded = true; } } if ( bNeeded ) { nCount++; uint32 dwID; if(byUsedVersion >= 3) { dwID = cur_src->GetUserIDHybrid(); } else { dwID = cur_src->GetIP(); } data.WriteUInt32(dwID); data.WriteUInt16(cur_src->GetUserPort()); data.WriteUInt32(cur_src->GetServerIP()); data.WriteUInt16(cur_src->GetServerPort()); if (byUsedVersion >= 2) { data.WriteHash(cur_src->GetUserHash()); } if (byUsedVersion >= 4){ // CryptSettings - SourceExchange V4 // 5 Reserved (!) // 1 CryptLayer Required // 1 CryptLayer Requested // 1 CryptLayer Supported const uint8 uSupportsCryptLayer = cur_src->SupportsCryptLayer() ? 1 : 0; const uint8 uRequestsCryptLayer = cur_src->RequestsCryptLayer() ? 1 : 0; const uint8 uRequiresCryptLayer = cur_src->RequiresCryptLayer() ? 1 : 0; const uint8 byCryptOptions = (uRequiresCryptLayer << 2) | (uRequestsCryptLayer << 1) | (uSupportsCryptLayer << 0); data.WriteUInt8(byCryptOptions); } if (nCount > 500) { break; } } } if (!nCount) { return 0; } data.Seek(bIsSX2Packet ? 17 : 16, wxFromStart); data.WriteUInt16(nCount); CPacket* result = new CPacket(data, OP_EMULEPROT, bIsSX2Packet ? OP_ANSWERSOURCES2 : OP_ANSWERSOURCES); if ( result->GetPacketSize() > 354 ) { result->PackPacket(); } return result; } void CKnownFile::CreateOfferedFilePacket( CMemFile *files, CServer *pServer, CUpDownClient *pClient) { // This function is used for offering files to the local server and for sending // shared files to some other client. In each case we send our IP+Port only, if // we have a HighID. wxASSERT(!(pClient && pServer)); SetPublishedED2K(true); files->WriteHash(GetFileHash()); uint32 nClientID = 0; uint16 nClientPort = 0; if (pServer) { if (pServer->GetTCPFlags() & SRV_TCPFLG_COMPRESSION) { #define FILE_COMPLETE_ID 0xfbfbfbfb #define FILE_COMPLETE_PORT 0xfbfb #define FILE_INCOMPLETE_ID 0xfcfcfcfc #define FILE_INCOMPLETE_PORT 0xfcfc // complete file: ip 251.251.251 (0xfbfbfbfb) port 0xfbfb // incomplete file: op 252.252.252 (0xfcfcfcfc) port 0xfcfc if (GetStatus() == PS_COMPLETE) { nClientID = FILE_COMPLETE_ID; nClientPort = FILE_COMPLETE_PORT; } else { nClientID = FILE_INCOMPLETE_ID; nClientPort = FILE_INCOMPLETE_PORT; } } else { if (theApp->IsConnectedED2K() && !::IsLowID(theApp->GetED2KID())){ nClientID = theApp->GetID(); nClientPort = thePrefs::GetPort(); } } } else { // Do not merge this with the above case - this one // also checks Kad status. if (theApp->IsConnected() && !theApp->IsFirewalled()) { nClientID = theApp->GetID(); nClientPort = thePrefs::GetPort(); } } files->WriteUInt32(nClientID); files->WriteUInt16(nClientPort); TagPtrList tags; // The printable filename is used because it's destined for another user. tags.push_back(new CTagString(FT_FILENAME, GetFileName().GetPrintable())); if (pClient && pClient->GetVBTTags()) { tags.push_back(new CTagVarInt(FT_FILESIZE, GetFileSize())); } else { if (!IsLargeFile()){ tags.push_back(new CTagInt32(FT_FILESIZE, GetFileSize())); } else { // Large file // we send 2*32 bit tags to servers, but a real 64 bit tag to other clients. if (pServer) { if (!pServer->SupportsLargeFilesTCP()){ wxFAIL; tags.push_back(new CTagInt32(FT_FILESIZE, 0)); } else { tags.push_back(new CTagInt32(FT_FILESIZE, (uint32)GetFileSize())); tags.push_back(new CTagInt32(FT_FILESIZE_HI, (uint32)(GetFileSize() >> 32))); } } else { if (!pClient->SupportsLargeFiles()) { wxFAIL; tags.push_back(new CTagInt32(FT_FILESIZE, 0)); } else { tags.push_back(new CTagInt64(FT_FILESIZE, GetFileSize())); } } } } if (GetFileRating()) { tags.push_back(new CTagVarInt(FT_FILERATING, GetFileRating(), (pClient && pClient->GetVBTTags()) ? 0 : 32)); } // NOTE: Archives and CD-Images are published+searched with file type "Pro" bool bAddedFileType = false; if (pServer && (pServer->GetTCPFlags() & SRV_TCPFLG_TYPETAGINTEGER)) { // Send integer file type tags to newer servers EED2KFileType eFileType = GetED2KFileTypeSearchID(GetED2KFileTypeID(GetFileName())); if (eFileType >= ED2KFT_AUDIO && eFileType <= ED2KFT_CDIMAGE) { tags.push_back(new CTagInt32(FT_FILETYPE, eFileType)); bAddedFileType = true; } } if (!bAddedFileType) { // Send string file type tags to: // - newer servers, in case there is no integer type available for the file type (e.g. emulecollection) // - older servers // - all clients wxString strED2KFileType(GetED2KFileTypeSearchTerm(GetED2KFileTypeID(GetFileName()))); if (!strED2KFileType.IsEmpty()) { tags.push_back(new CTagString(FT_FILETYPE, strED2KFileType)); } } // There, we could add MetaData info, if we ever get to have that. EUtf8Str eStrEncode; bool unicode_support = // eservers that support UNICODE. (pServer && (pServer->GetUnicodeSupport())) || // clients that support unicode (pClient && pClient->GetUnicodeSupport()); eStrEncode = unicode_support ? utf8strRaw : utf8strNone; files->WriteUInt32(tags.size()); // Sadly, eMule doesn't use a MISCOPTIONS flag on hello packet for this, so we // have to identify the support for new tags by version. bool new_ed2k = // eMule client > 0.42f (pClient && pClient->IsEmuleClient() && pClient->GetVersion() >= MAKE_CLIENT_VERSION(0,42,7)) || // aMule >= 2.0.0rc8. Sadly, there's no way to check the rcN number, so I checked // the rc8 changelog. On rc8 OSInfo was introduced, so... (pClient && pClient->GetClientSoft() == SO_AMULE && !pClient->GetClientOSInfo().IsEmpty()) || // eservers use a flag for this, at least. (pServer && (pServer->GetTCPFlags() & SRV_TCPFLG_NEWTAGS)); for (TagPtrList::iterator it = tags.begin(); it != tags.end(); ++it ) { CTag* pTag = *it; if (new_ed2k) { pTag->WriteNewEd2kTag(files, eStrEncode); } else { pTag->WriteTagToFile(files, eStrEncode); } delete pTag; } } // Updates priority of file if autopriority is activated void CKnownFile::UpdateAutoUpPriority() { // ADUNANZA BEGIN (missing patch) uint8 priority = PR_NORMAL; if (!IsAutoUpPriority()) priority = GetUpPriority(); if ( priority == PR_POWERSHARE && m_nCompleteSourcesCount > 10) priority = PR_VERYHIGH; // ADUNANZA END (missing patch) if (IsAutoUpPriority()) { uint32 queued = GetQueuedCount(); // ADUNANZA BEGIN (missing patch) #if 0 uint8 priority = PR_NORMAL; if (queued > 20) { #else if ( m_nCompleteSourcesCount > 0 && m_nCompleteSourcesCount < 8 ) { priority = PR_VERYHIGH; } else if (queued > 20) { #endif // ADUNANZA END (missing patch) priority = PR_LOW; } else if (queued > 1) { priority = PR_NORMAL; } else { priority = PR_HIGH; } // ADUNANZA BEGIN (missing patch) } // ADUNANZA END (missing patch) if (GetUpPriority() != priority) { SetUpPriority(priority, false); Notify_SharedFilesUpdateItem(this); // ADUNANZA BEGIN (missing patch) #if 0 } #endif // ADUNANZA END (missing patch) } } void CKnownFile::SetFileCommentRating(const wxString& strNewComment, int8 iNewRating) { if (m_strComment != strNewComment || m_iRating != iNewRating) { SetLastPublishTimeKadNotes(0); wxString strCfgPath = wxT("/") + m_abyFileHash.Encode() + wxT("/"); wxConfigBase* cfg = wxConfigBase::Get(); if (strNewComment.IsEmpty() && iNewRating == 0) { cfg->DeleteGroup(strCfgPath); } else { cfg->Write( strCfgPath + wxT("Comment"), strNewComment); cfg->Write( strCfgPath + wxT("Rate"), (int)iNewRating); } m_strComment = strNewComment; m_iRating = iNewRating; SourceSet::iterator it = m_ClientUploadList.begin(); // ADUNANZA BEGIN #if 0 for ( ; it != m_ClientUploadList.end(); it++ ) { #else for ( ; it != m_ClientUploadList.end(); ++it ) { #endif // ADUNANZA END it->SetCommentDirty(); } } } void CKnownFile::SetUpPriority(uint8 iNewUpPriority, bool m_bsave){ m_iUpPriority = iNewUpPriority; if( IsPartFile() && m_bsave ) { // ADUNANZA BEGIN // back #if 0 ((CPartFile*)this)->SavePartFile(); #else static_cast(this)->SavePartFile(); #endif // ADUNANZA END } } void CKnownFile::SetPublishedED2K(bool val){ m_PublishedED2K = val; Notify_SharedFilesUpdateItem(this); } bool CKnownFile::PublishNotes() { if(m_lastPublishTimeKadNotes > (uint32)time(NULL)) { return false; } if(!GetFileComment().IsEmpty()) { // ADUNANZA BEGIN #if 0 m_lastPublishTimeKadNotes = (uint32)time(NULL)+KADEMLIAREPUBLISHTIMEN; #else m_lastPublishTimeKadNotes = (uint32)time(NULL)+theApp->get_kadRepublishTimeN(); #endif // ADUNANZA END return true; } if(GetFileRating() != 0) { // ADUNANZA BEGIN #if 0 m_lastPublishTimeKadNotes = (uint32)time(NULL)+KADEMLIAREPUBLISHTIMEN; #else m_lastPublishTimeKadNotes = (uint32)time(NULL)+theApp->get_kadRepublishTimeN(); #endif // ADUNANZA END return true; } return false; } bool CKnownFile::PublishSrc() { uint32 lastBuddyIP = 0; if( theApp->IsFirewalled() ) { CUpDownClient* buddy = theApp->clientlist->GetBuddy(); if( buddy ) { lastBuddyIP = theApp->clientlist->GetBuddy()->GetIP(); if( lastBuddyIP != m_lastBuddyIP ) { // ADUNANZA BEGIN #if 0 SetLastPublishTimeKadSrc( (uint32)time(NULL)+KADEMLIAREPUBLISHTIMES, lastBuddyIP ); #else SetLastPublishTimeKadSrc( (uint32)time(NULL)+theApp->get_kadRepublishTimeS(), lastBuddyIP ); #endif // ADUNANZA END return true; } } else { return false; } } if(m_lastPublishTimeKadSrc > (uint32)time(NULL)) { return false; } // ADUNANZA BEGIN #if 0 SetLastPublishTimeKadSrc((uint32)time(NULL)+KADEMLIAREPUBLISHTIMES,lastBuddyIP); #else SetLastPublishTimeKadSrc((uint32)time(NULL)+theApp->get_kadRepublishTimeS(), lastBuddyIP); #endif // ADUNANZA END return true; } void CKnownFile::UpdatePartsInfo() { // Cache part count uint16 partcount = GetPartCount(); bool flag = (time(NULL) - m_nCompleteSourcesTime > 0); // Ensure the frequency-list is ready if ( m_AvailPartFrequency.size() != GetPartCount() ) { m_AvailPartFrequency.clear(); m_AvailPartFrequency.insert(m_AvailPartFrequency.begin(), GetPartCount(), 0); } if (flag) { ArrayOfUInts16 count; count.reserve(m_ClientUploadList.size()); SourceSet::iterator it = m_ClientUploadList.begin(); // ADUNANZA BEGIN #if 0 for ( ; it != m_ClientUploadList.end(); it++ ) { #else for ( ; it != m_ClientUploadList.end(); ++it ) { #endif // ADUNANZA END CUpDownClient* client = it->GetClient(); // ADUNANZA BEGIN // Mod Adu // lupz // SECONDO STIMATORE // consideriamo solo le fonti adunanza per effettuare la stima #if 0 if ( !client->GetUpPartStatus().empty() && client->GetUpPartCount() == partcount ) { #else if ( client && client->IsAdunanzA() && // ADUFLAGS !client->GetUpPartStatus().empty() && (client->GetUpPartCount() == partcount) ) { #endif // ADUNANZA END count.push_back(client->GetUpCompleteSourcesCount()); } } m_nCompleteSourcesCount = m_nCompleteSourcesCountLo = m_nCompleteSourcesCountHi = 0; if( partcount > 0) { m_nCompleteSourcesCount = m_AvailPartFrequency[0]; } for (uint16 i = 1; i < partcount; ++i) { if( m_nCompleteSourcesCount > m_AvailPartFrequency[i]) { m_nCompleteSourcesCount = m_AvailPartFrequency[i]; } } count.push_back(m_nCompleteSourcesCount); int32 n = count.size(); if (n > 0) { std::sort(count.begin(), count.end(), std::less()); // calculate range int i = n >> 1; // (n / 2) int j = (n * 3) >> 2; // (n * 3) / 4 int k = (n * 7) >> 3; // (n * 7) / 8 // For complete files, trust the people your uploading to more... // For low guess and normal guess count // - If we see more sources then the guessed low and // normal, use what we see. // - If we see less sources then the guessed low, // adjust network accounts for 100%, we account for // 0% with what we see and make sure we are still // above the normal. // For high guess // Adjust 100% network and 0% what we see. if (n < 20) { if ( count[i] < m_nCompleteSourcesCount ) { m_nCompleteSourcesCountLo = m_nCompleteSourcesCount; } else { m_nCompleteSourcesCountLo = count[i]; } m_nCompleteSourcesCount= m_nCompleteSourcesCountLo; m_nCompleteSourcesCountHi = count[j]; if( m_nCompleteSourcesCountHi < m_nCompleteSourcesCount ) { m_nCompleteSourcesCountHi = m_nCompleteSourcesCount; } } else { // Many sources.. // For low guess // Use what we see. // For normal guess // Adjust network accounts for 100%, we account for // 0% with what we see and make sure we are still above the low. // For high guess // Adjust network accounts for 100%, we account for 0% // with what we see and make sure we are still above the normal. m_nCompleteSourcesCountLo = m_nCompleteSourcesCount; m_nCompleteSourcesCount = count[j]; if( m_nCompleteSourcesCount < m_nCompleteSourcesCountLo ) { m_nCompleteSourcesCount = m_nCompleteSourcesCountLo; } m_nCompleteSourcesCountHi= count[k]; if( m_nCompleteSourcesCountHi < m_nCompleteSourcesCount ) { m_nCompleteSourcesCountHi = m_nCompleteSourcesCount; } } } m_nCompleteSourcesTime = time(NULL) + (60); } Notify_SharedFilesUpdateItem(this); } void CKnownFile::UpdateUpPartsFrequency( CUpDownClient* client, bool increment ) { // ADUNANZA BEGIN if (!client) return; if (!client->IsAdunanzA()) return; // (ADUFLAGS 20080201) Mr Hyde: perche' solo per i client AdunanzA? // ADUNANZA END if ( m_AvailPartFrequency.size() != GetPartCount() ) { m_AvailPartFrequency.clear(); m_AvailPartFrequency.insert(m_AvailPartFrequency.begin(), GetPartCount(), 0); if ( !increment ) { return; } } const BitVector& freq = client->GetUpPartStatus(); unsigned int size = freq.size(); if ( size != m_AvailPartFrequency.size() ) { return; } if ( increment ) { for ( unsigned int i = 0; i < size; ++i ) { if ( freq.get(i) ) { m_AvailPartFrequency[i]++; } } } else { for ( unsigned int i = 0; i < size; ++i ) { if ( freq.get(i) ) { m_AvailPartFrequency[i]--; } } } } void CKnownFile::ClearPriority() { if ( !m_bAutoUpPriority ) return; m_iUpPriority = ( m_bAutoUpPriority ) ? PR_HIGH : PR_NORMAL; UpdateAutoUpPriority(); } void GuessAndRemoveExt(CPath& name) { wxString ext = name.GetExt(); // Remove common two-part extensions, such as "tar.gz" if (ext == wxT("gz") || ext == wxT("bz2")) { name = name.RemoveExt(); if (name.GetExt() == wxT("tar")) { name = name.RemoveExt(); } // might be an extension if length == 3 // and also remove some common non-three-character extensions } else if (ext.Length() == 3 || ext == wxT("7z") || ext == wxT("rm") || ext == wxT("jpeg") || ext == wxT("mpeg") ) { name = name.RemoveExt(); } } void CKnownFile::SetFileName(const CPath& filename) { CAbstractFile::SetFileName(filename); wordlist.clear(); // Don't publish extension. That'd kill the node indexing e.g. "avi". CPath tmpName = GetFileName(); GuessAndRemoveExt(tmpName); Kademlia::CSearchManager::GetWords(tmpName.GetPrintable(), &wordlist); } #endif // CLIENT_GUI //For File Comment // void CKnownFile::LoadComment() const { #ifndef CLIENT_GUI wxString strCfgPath = wxT("/") + m_abyFileHash.Encode() + wxT("/"); wxConfigBase* cfg = wxConfigBase::Get(); m_strComment = cfg->Read( strCfgPath + wxT("Comment"), wxEmptyString); m_iRating = cfg->Read( strCfgPath + wxT("Rate"), 0l); #endif m_bCommentLoaded = true; } wxString CKnownFile::GetAICHMasterHash() const { #ifdef CLIENT_GUI return m_AICHMasterHash; #else if (HasProperAICHHashSet()) { return m_pAICHHashSet->GetMasterHash().GetString(); } return wxEmptyString; #endif } bool CKnownFile::HasProperAICHHashSet() const { #ifdef CLIENT_GUI return m_AICHMasterHash.Length() != 0; #else return m_pAICHHashSet->HasValidMasterHash() && (m_pAICHHashSet->GetStatus() == AICH_HASHSETCOMPLETE || m_pAICHHashSet->GetStatus() == AICH_VERIFIED); #endif } wxString CKnownFile::GetFeedback() const { return wxString(_("File name")) + wxT(": ") + GetFileName().GetPrintable() + wxT("\n") + _("File size") + wxT(": ") + CastItoXBytes(GetFileSize()) + wxT("\n") + _("Share ratio") + CFormat(wxT(": %.2f%%\n")) % (((double)statistic.GetAllTimeTransferred() / (double)GetFileSize()) * 100.0) + _("Uploaded") + wxT(": ") + CastItoXBytes(statistic.GetTransferred()) + wxT(" (") + CastItoXBytes(statistic.GetAllTimeTransferred()) + wxT(")\n") + _("Requested") + CFormat(wxT(": %u (%u)\n")) % statistic.GetRequests() % statistic.GetAllTimeRequests() + _("Accepted") + CFormat(wxT(": %u (%u)\n")) % statistic.GetAccepts() % statistic.GetAllTimeAccepts() + _("On Queue") + CFormat(wxT(": %u\n")) % GetQueuedCount() + _("Complete sources") + CFormat(wxT(": %u\n")) % m_nCompleteSourcesCount; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/PartFileConvertDlg.h0000644000175000017500000000373312050266603022174 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef PARTFILECONVERTDLG_H #define PARTFILECONVERTDLG_H #include #include #include struct ConvertInfo; class CPartFileConvertDlg : public wxDialog { public: CPartFileConvertDlg(wxWindow *parent); static void ShowGUI(wxWindow *parent); static void UpdateProgress(float percent, wxString text = wxEmptyString, wxString header = wxEmptyString); static void UpdateJobInfo(ConvertInfo& info); static void RemoveJobInfo(unsigned id); static void ClearInfo(); static void CloseGUI(); protected: wxGauge* m_pb_current; wxListCtrl* m_joblist; void OnAddFolder(wxCommandEvent& event); void OnClose(wxCloseEvent& event); void OnCloseButton(wxCommandEvent& event); void RetrySel(wxCommandEvent& event); void RemoveSel(wxCommandEvent& event); DECLARE_EVENT_TABLE() static CPartFileConvertDlg* s_convertgui; }; #endif /* PARTFILECONVERTDLG_H */ amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/SearchListCtrl.cpp0000644000175000017500000007605212050266603021723 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "SearchListCtrl.h" // Interface declarations #include #include "amule.h" // Needed for theApp #include "KnownFileList.h" // Needed for CKnownFileList #include "SearchList.h" // Needed for CSearchFile #include "SearchDlg.h" // Needed for CSearchDlg #include "amuleDlg.h" // Needed for CamuleDlg #include "muuli_wdr.h" // Needed for clientImages #include "Preferences.h" // Needed for thePrefs #include "GuiEvents.h" // Needed for CoreNotify_Search_Add_Download #include "MuleColour.h" BEGIN_EVENT_TABLE(CSearchListCtrl, CMuleListCtrl) EVT_LIST_ITEM_RIGHT_CLICK(-1, CSearchListCtrl::OnRightClick) EVT_LIST_COL_CLICK( -1, CSearchListCtrl::OnColumnLClick) EVT_LIST_COL_END_DRAG( -1, CSearchListCtrl::OnColumnResize) EVT_MENU( MP_GETED2KLINK, CSearchListCtrl::OnPopupGetUrl) EVT_MENU( MP_RAZORSTATS, CSearchListCtrl::OnRazorStatsCheck) EVT_MENU( MP_SEARCHRELATED, CSearchListCtrl::OnRelatedSearch) EVT_MENU( MP_MARK_AS_KNOWN, CSearchListCtrl::OnMarkAsKnown) EVT_MENU( MP_RESUME, CSearchListCtrl::OnPopupDownload) EVT_MENU_RANGE( MP_ASSIGNCAT, MP_ASSIGNCAT + 99, CSearchListCtrl::OnPopupDownload ) EVT_LIST_ITEM_ACTIVATED( -1, CSearchListCtrl::OnItemActivated) END_EVENT_TABLE() std::list CSearchListCtrl::s_lists; enum SearchListColumns { ID_SEARCH_COL_NAME = 0, ID_SEARCH_COL_SIZE, ID_SEARCH_COL_SOURCES, ID_SEARCH_COL_TYPE, ID_SEARCH_COL_FILEID, ID_SEARCH_COL_STATUS, ID_SEARCH_COL_DIRECTORY }; CSearchListCtrl::CSearchListCtrl( wxWindow *parent, wxWindowID winid, const wxPoint &pos, const wxSize &size, long style, const wxValidator &validator, const wxString &name) : CMuleListCtrl(parent, winid, pos, size, style | wxLC_OWNERDRAW, validator, name), m_filterKnown(false), m_invert(false), m_filterEnabled(false) { // Setting the sorter function. SetSortFunc( SortProc ); InsertColumn( ID_SEARCH_COL_NAME, _("File Name"), wxLIST_FORMAT_LEFT, 500, wxT("N") ); InsertColumn( ID_SEARCH_COL_SIZE, _("Size"), wxLIST_FORMAT_LEFT, 100, wxT("Z") ); InsertColumn( ID_SEARCH_COL_SOURCES, _("Sources"), wxLIST_FORMAT_LEFT, 50, wxT("u") ); InsertColumn( ID_SEARCH_COL_TYPE, _("Type"), wxLIST_FORMAT_LEFT, 65, wxT("Y") ); InsertColumn( ID_SEARCH_COL_FILEID, _("FileID"), wxLIST_FORMAT_LEFT, 280, wxT("I") ); InsertColumn( ID_SEARCH_COL_STATUS, _("Status"), wxLIST_FORMAT_LEFT, 100, wxT("S") ); InsertColumn( ID_SEARCH_COL_DIRECTORY, _("Directories"), wxLIST_FORMAT_LEFT, 280, wxT("D") ); // I would have prefered "Directory" but this is already translated m_nResultsID = 0; // Only load settings for first list, otherwise sync with current lists if ( s_lists.empty() ) { // Set the name to enable loading of settings SetTableName( wxT("Search") ); LoadSettings(); // Unset the name to avoid the settings getting saved every time a list is closed SetTableName( wxEmptyString ); } else { // Sync this list with one of the others SyncLists( s_lists.front(), this ); } // Add the list so that it will be synced with the other lists s_lists.push_back( this ); } wxString CSearchListCtrl::GetOldColumnOrder() const { return wxT("N,Z,u,Y,I,S"); } CSearchListCtrl::~CSearchListCtrl() { std::list::iterator it = std::find( s_lists.begin(), s_lists.end(), this ); if ( it != s_lists.end() ) s_lists.erase( it ); // We only save the settings if the last list was closed if ( s_lists.empty() ) { // In order to get the settings saved, we need to set the name SetTableName( wxT("Search") ); } } void CSearchListCtrl::AddResult(CSearchFile* toshow) { wxCHECK_RET(toshow->GetSearchID() == m_nResultsID, wxT("Wrong search-id for result-list")); const wxUIntPtr toshowdata = reinterpret_cast(toshow); CSearchFile* parent = toshow->GetParent(); // Check if the result should be shown if (FindItem(-1, toshowdata) != -1) { return; } else if (parent && !parent->ShowChildren()) { return; } else if (!IsFiltered(toshow)) { if (toshow->HasChildren() && toshow->ShowChildren()) { // Only filter the parent if none of the children are shown. bool foundChild = false; const CSearchResultList& children = toshow->GetChildren(); for (size_t i = 0; i < children.size(); ++i) { if (IsFiltered(children.at(i))) { foundChild = true; break; } } if (!foundChild) { // No children left, and the parent is filtered. m_filteredOut.push_back(toshow); return; } } else { m_filteredOut.push_back(toshow); return; } } // Insert the item before the item found by the search long insertPos; if (parent) { insertPos = FindItem(-1, (wxUIntPtr)parent); if (insertPos == -1) { wxFAIL; insertPos = GetItemCount(); } else { insertPos++; } } else { insertPos = GetInsertPos(toshowdata); } long newid = InsertItem(insertPos, toshow->GetFileName().GetPrintable()); // Sanity checks to ensure that results/children are properly positioned. #ifdef __WXDEBUG__ { if (newid > 0) { // ADUNANZA BEGIN // Back #if 0 CSearchFile* before = (CSearchFile*)GetItemData(newid - 1); #else CSearchFile* before = reinterpret_cast(GetItemData(newid - 1)); #endif // ADUNANZA END wxASSERT(before); if (parent) { wxASSERT((before->GetParent() == parent) || (before == parent)); } else { wxASSERT(before->GetParent() != toshow); } } if ((int)newid < GetItemCount() - 1) { // ADUNANZA BEGIN // Back #if 0 CSearchFile* after = (CSearchFile*)GetItemData(newid + 1); #else CSearchFile* after = reinterpret_cast(GetItemData(newid + 1)); #endif // ADUNANZA END wxASSERT(after); if (parent) { wxASSERT((after->GetParent() == parent) || (!after->GetParent())); } else { wxASSERT((after->GetParent() == toshow) || (!after->GetParent())); } } } #endif SetItemPtrData(newid, toshowdata); // Filesize SetItem(newid, ID_SEARCH_COL_SIZE, CastItoXBytes( toshow->GetFileSize() ) ); // Source count // ADUNANZA BEGIN #if 0 wxString temp = CFormat(wxT("%d")) % toshow->GetSourceCount(); if (toshow->GetCompleteSourceCount()) { temp += CFormat(wxT(" (%d)")) % toshow->GetCompleteSourceCount(); } if (toshow->GetClientsCount()) { temp += CFormat(wxT(" [%d]")) % toshow->GetClientsCount(); } #else wxString temp; uint32 theCompleteSourceCount = (toshow->IsKademlia() ? toshow->GetOrigSourceCount() : toshow->GetCompleteSourceCount()); if (theCompleteSourceCount) { temp << wxT(" (") << theCompleteSourceCount << wxT(')'); } uint32 theClientSourceCount = toshow->GetClientsCount(); if (theClientSourceCount) { temp << wxT(" [") << theClientSourceCount << wxT(']'); } #endif // ADUNANZA END #if defined(__DEBUG__) && !defined(CLIENT_GUI) if (toshow->GetKadPublishInfo() == 0) { temp += wxT(" | -"); } else { temp += CFormat(wxT(" | N:%u, P:%u, T:%0.2f")) % ((toshow->GetKadPublishInfo() & 0xFF000000) >> 24) % ((toshow->GetKadPublishInfo() & 0x00FF0000) >> 16) % ((toshow->GetKadPublishInfo() & 0x0000FFFF) / 100.0); } #endif SetItem( newid, ID_SEARCH_COL_SOURCES, temp ); // File-type SetItem( newid, ID_SEARCH_COL_TYPE, GetFiletypeByName( toshow->GetFileName() ) ); // File-hash SetItem(newid, ID_SEARCH_COL_FILEID, toshow->GetFileHash().Encode() ); // File status SetItem(newid, ID_SEARCH_COL_STATUS, DetermineStatusPrintable(toshow)); // Directory where file is located (has a value when search file comes from a "view shared files" request) SetItem(newid, ID_SEARCH_COL_DIRECTORY, toshow->GetDirectory()); // Set the color of the item UpdateItemColor( newid ); } void CSearchListCtrl::RemoveResult(CSearchFile* toremove) { ShowChildren(toremove, false); long index = FindItem(-1, reinterpret_cast(toremove)); if (index != -1) { DeleteItem(index); } else { ResultList::iterator it = std::find(m_filteredOut.begin(), m_filteredOut.end(), toremove); if ( it != m_filteredOut.end()) { m_filteredOut.erase(it); } } } void CSearchListCtrl::UpdateResult(CSearchFile* toupdate) { long index = FindItem(-1, reinterpret_cast(toupdate)); if (index != -1) { // Update the filename, which may be changed in case of multiple variants. SetItem(index, ID_SEARCH_COL_NAME, toupdate->GetFileName().GetPrintable()); // ADUNANZA BEGIN #if 0 wxString temp = CFormat(wxT("%d")) % toupdate->GetSourceCount(); if (toupdate->GetCompleteSourceCount()) { temp += CFormat(wxT(" (%d)")) % toupdate->GetCompleteSourceCount(); } if (toupdate->GetClientsCount()) { temp += CFormat(wxT(" [%d]")) % toupdate->GetClientsCount(); } #else wxString temp; uint32 theCompleteSourceCount = (toupdate->IsKademlia() ? toupdate->GetOrigSourceCount() : toupdate->GetCompleteSourceCount()); if (theCompleteSourceCount) { temp << wxT(" (") << theCompleteSourceCount << wxT(')'); } uint32 theClientSourceCount = toupdate->GetClientsCount(); if (theClientSourceCount) { temp << wxT(" [") << theClientSourceCount << wxT(']'); } #endif // ADUNANZA END #if defined(__DEBUG__) && !defined(CLIENT_GUI) if (toupdate->GetKadPublishInfo() == 0) { temp += wxT(" | -"); } else { temp += CFormat(wxT(" | N:%u, P:%u, T:%0.2f")) % ((toupdate->GetKadPublishInfo() & 0xFF000000) >> 24) % ((toupdate->GetKadPublishInfo() & 0x00FF0000) >> 16) % ((toupdate->GetKadPublishInfo() & 0x0000FFFF) / 100.0); } #endif SetItem(index, ID_SEARCH_COL_SOURCES, temp); SetItem(index, ID_SEARCH_COL_STATUS, DetermineStatusPrintable(toupdate)); UpdateItemColor(index); // Deletions of items causes rather large amount of flicker, so to // avoid this, we resort the list to ensure correct ordering. if (!IsItemSorted(index)) { SortList(); } } } void CSearchListCtrl::UpdateItemColor(long index) { wxListItem item; item.SetId( index ); item.SetColumn( ID_SEARCH_COL_SIZE ); item.SetMask( wxLIST_MASK_STATE | wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT); if (GetItem(item)) { CMuleColour newcol(wxSYS_COLOUR_WINDOWTEXT); // ADUNANZA BEGIN // Back #if 0 CSearchFile* file = (CSearchFile*)GetItemData(index); #else CSearchFile* file = reinterpret_cast(GetItemData(index)); #endif // ADUNANZA END int red = newcol.Red(); int green = newcol.Green(); int blue = newcol.Blue(); switch (file->GetDownloadStatus()) { case CSearchFile::DOWNLOADED: // File has already been downloaded. Mark as green. green = 255; break; case CSearchFile::QUEUED: // File is downloading. case CSearchFile::QUEUEDCANCELED: // File is downloading and has been canceled before. // Mark as red red = 255; break; case CSearchFile::CANCELED: // File has been canceled. Mark as magenta. red = 255; blue = 255; break; default: // File is new, colour after number of files blue += file->GetSourceCount() * 5; if ( blue > 255 ) { blue = 255; } } // don't forget to set the item data back... wxListItem newitem; newitem.SetId( index ); newitem.SetTextColour( wxColour( red, green, blue ) ); SetItem( newitem ); } } void CSearchListCtrl::ShowResults( long ResultsID ) { DeleteAllItems(); m_nResultsID = ResultsID; if (ResultsID) { const CSearchResultList& list = theApp->searchlist->GetSearchResults(ResultsID); for (unsigned int i = 0; i < list.size(); ++i) { AddResult( list[i] ); } } } wxUIntPtr CSearchListCtrl::GetSearchId() { return m_nResultsID; } void CSearchListCtrl::SetFilter(const wxString& regExp, bool invert, bool filterKnown) { if (regExp.IsEmpty()) { // Show everything m_filterText = wxT(".*"); } else { m_filterText = regExp; } m_filter.Compile(m_filterText, wxRE_DEFAULT | wxRE_ICASE); m_filterKnown = filterKnown; m_invert = invert; if (m_filterEnabled) { // Swap the list of filtered results so we can freely add new items to the list ResultList curFiltered; std::swap(curFiltered, m_filteredOut); // Filter items already on the list for (int i = 0; i < GetItemCount();) { // ADUNANZA BEGIN // Back #if 0 CSearchFile* file = (CSearchFile*)GetItemData(i); #else CSearchFile* file = reinterpret_cast(GetItemData(i)); #endif // ADUNANZA END if (IsFiltered(file)) { ++i; } else { m_filteredOut.push_back(file); DeleteItem(i); } } // Check the previously filtered items. ResultList::iterator it = curFiltered.begin(); for (; it != curFiltered.end(); ++it) { if (IsFiltered(*it)) { AddResult(*it); } else { m_filteredOut.push_back(*it); } } } } void CSearchListCtrl::EnableFiltering(bool enabled) { if (enabled != m_filterEnabled) { m_filterEnabled = enabled; if (enabled) { SetFilter(m_filterText, m_invert, m_filterKnown); } else { ResultList::iterator it = m_filteredOut.begin(); for (; it != m_filteredOut.end(); ++it) { AddResult(*it); } m_filteredOut.clear(); } } } size_t CSearchListCtrl::GetHiddenItemCount() const { return m_filteredOut.size(); } bool CSearchListCtrl::IsFiltered(const CSearchFile* file) { // By default, everything is displayed bool result = true; if (m_filterEnabled && m_filter.IsValid()) { result = m_filter.Matches(file->GetFileName().GetPrintable()); result = ((result && !m_invert) || (!result && m_invert)); if (result && m_filterKnown) { result = file->GetDownloadStatus() == CSearchFile::NEW; } } return result; } int CSearchListCtrl::SortProc(wxUIntPtr item1, wxUIntPtr item2, long sortData) { // ADUNANZA BEGIN // Back #if 0 CSearchFile* file1 = (CSearchFile*)item1; CSearchFile* file2 = (CSearchFile*)item2; #else CSearchFile* file1 = reinterpret_cast(item1); CSearchFile* file2 = reinterpret_cast(item2); #endif // ADUNANZA END // Modifies the result, 1 for ascending, -1 for decending int modifier = (sortData & CMuleListCtrl::SORT_DES) ? -1 : 1; bool alternate = (sortData & CMuleListCtrl::SORT_ALT) != 0; // Decide if which should files we should sort by. wxUIntPtr parent1 = reinterpret_cast(file1->GetParent()); wxUIntPtr parent2 = reinterpret_cast(file2->GetParent()); wxUIntPtr filePtr1 = reinterpret_cast(file1); wxUIntPtr filePtr2 = reinterpret_cast(file2); if (parent1 && parent2) { if (parent1 != parent2) { return SortProc(parent1, parent2, sortData); } } else if (parent1) { if (parent1 == filePtr2) { return 1; } else { return SortProc(parent1, filePtr2, sortData); } } else if (parent2) { if (parent2 == filePtr1) { return -1; } else { return SortProc(filePtr1, parent2, sortData); } } int result = 0; switch (sortData & CMuleListCtrl::COLUMN_MASK) { // Sort by filename case ID_SEARCH_COL_NAME: result = CmpAny(file1->GetFileName(), file2->GetFileName()); break; // Sort file-size case ID_SEARCH_COL_SIZE: result = CmpAny( file1->GetFileSize(), file2->GetFileSize() ); break; // Sort by sources case ID_SEARCH_COL_SOURCES: { int cmp = CmpAny( file1->GetSourceCount(), file2->GetSourceCount() ); int cmp2 = CmpAny( file1->GetCompleteSourceCount(), file2->GetCompleteSourceCount() ); if ( alternate ) { // Swap criterias int temp = cmp2; cmp2 = cmp; cmp = temp; } if ( cmp == 0 ) { cmp = cmp2; } result = cmp; break; } // Sort by file-types case ID_SEARCH_COL_TYPE: { result = GetFiletypeByName(file1->GetFileName()).Cmp(GetFiletypeByName(file2->GetFileName())); if (result == 0) { // Same file-type, sort by extension result = CmpAny(file1->GetFileName().GetExt(), file2->GetFileName().GetExt()); } break; } // Sort by file-hash case ID_SEARCH_COL_FILEID: result = CmpAny(file2->GetFileHash(), file1->GetFileHash()); break; // Sort by file status case ID_SEARCH_COL_STATUS: result = CmpAny(DetermineStatusPrintable(file2), DetermineStatusPrintable(file1)); break; // Sort by directory case ID_SEARCH_COL_DIRECTORY: result = CmpAny(file1->GetDirectory(), file2->GetDirectory()); if (result == 0) { // if equal sort by name result = CmpAny(file1->GetFileName(), file2->GetFileName()); } break; } return modifier * result; } void CSearchListCtrl::SetSorting(unsigned column, unsigned order) { Freeze(); // First collapse all parent items // Backward order means our index won't be influenced by items getting collapsed. for (int i = GetItemCount(); i--;) { // ADUNANZA BEGIN // Back #if 0 CSearchFile* file = ((CSearchFile*)GetItemData(i)); #else CSearchFile* file = reinterpret_cast(GetItemData(i)); #endif // ADUNANZA END if (file->ShowChildren()) { ShowChildren(file, false); } } // Then do the sorting CMuleListCtrl::SetSorting(column, order); Thaw(); } void CSearchListCtrl::SyncLists( CSearchListCtrl* src, CSearchListCtrl* dst ) { wxCHECK_RET(src && dst, wxT("NULL argument in SyncLists")); // Column widths for ( int i = 0; i < src->GetColumnCount(); i++ ) { // We do this check since just setting the width causes a redraw if ( dst->GetColumnWidth( i ) != src->GetColumnWidth( i ) ) { dst->SetColumnWidth( i, src->GetColumnWidth( i ) ); } } // Sync sorting unsigned column = src->GetSortColumn(); unsigned order = src->GetSortOrder(); if (column != dst->GetSortColumn() || order != dst->GetSortOrder()) { dst->SetSorting(column, order); } } void CSearchListCtrl::SyncOtherLists(CSearchListCtrl *src) { std::list::iterator it; for (it = s_lists.begin(); it != s_lists.end(); ++it) { if ((*it) != src) { SyncLists( src, *it ); } } } void CSearchListCtrl::OnRightClick(wxListEvent& event) { CheckSelection(event); if (GetSelectedItemCount()) { // Create the popup-menu wxMenu menu(_("File")); menu.Append(MP_RESUME, _("Download")); wxMenu* cats = new wxMenu(_("Category")); cats->Append(MP_ASSIGNCAT, _("Main")); for (unsigned i = 1; i < theApp->glob_prefs->GetCatCount(); i++) { cats->Append(MP_ASSIGNCAT + i, theApp->glob_prefs->GetCategory(i)->title); } menu.Append(MP_MENU_CATS, _("Download in category"), cats); menu.AppendSeparator(); const wxString & statsServer = thePrefs::GetStatsServerName(); if (!statsServer.IsEmpty()) { menu.Append(MP_RAZORSTATS, CFormat(_("Get %s for this file")) % statsServer); menu.AppendSeparator(); } menu.Append(MP_SEARCHRELATED, _("Search related files (eD2k, local server)")); menu.AppendSeparator(); //#warning Uncomment this here to test the MP_MARK_AS_KNOWN feature. Beware! You are on your own here, this might break "known.met" #if 0 menu.Append(MP_MARK_AS_KNOWN, _("Mark as known file")); menu.AppendSeparator(); #endif menu.Append(MP_GETED2KLINK, _("Copy eD2k link to clipboard")); // These should only be enabled for single-selections bool enable = (GetSelectedItemCount() == 1); menu.Enable(MP_GETED2KLINK, enable); menu.Enable(MP_MENU_CATS, (theApp->glob_prefs->GetCatCount() > 1)); // ADUNANZA BEGIN #if !defined(CLIENT_GUI) && !defined(AMULE_DAEMON) if (theApp->m_AdunanzAStreaming.m_status != CAdunanzAStreaming::None) { // disabilito le voci per il Download menu.Enable(MP_RESUME, false); if (theApp->glob_prefs->GetCatCount() > 1) { menu.Enable(MP_MENU_CATS, false); } } #endif // ADUNANZA END PopupMenu(&menu, event.GetPoint()); } else { event.Skip(); } } void CSearchListCtrl::OnColumnLClick( wxListEvent& event ) { // Let the real event handler do its work first CMuleListCtrl::OnColumnLClick( event ); SyncOtherLists( this ); } void CSearchListCtrl::OnColumnResize( wxListEvent& WXUNUSED(event) ) { SyncOtherLists( this ); } void CSearchListCtrl::OnPopupGetUrl( wxCommandEvent& WXUNUSED(event) ) { wxString URIs; long index = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); while (index != -1) { // ADUNANZA BEGIN // Back #if 0 CSearchFile* file = (CSearchFile*)GetItemData( index ); #else CSearchFile* file = reinterpret_cast(GetItemData(index)); #endif // ADUNANZA END URIs += theApp->CreateED2kLink( file ) + wxT("\n"); index = GetNextItem( index, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); } if (!URIs.IsEmpty()) { theApp->CopyTextToClipboard( URIs.RemoveLast() ); } } void CSearchListCtrl::OnRazorStatsCheck( wxCommandEvent& WXUNUSED(event) ) { int item = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); if (item == -1) { return; } // ADUNANZA BEGIN // Back #if 0 CSearchFile* file = (CSearchFile*)GetItemData( item ); #else CSearchFile* file = reinterpret_cast(GetItemData(item)); #endif // ADUNANZA END theApp->amuledlg->LaunchUrl(thePrefs::GetStatsServerURL() + file->GetFileHash().Encode()); } void CSearchListCtrl::OnRelatedSearch( wxCommandEvent& WXUNUSED(event) ) { int item = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); if (item == -1) { return; } // ADUNANZA BEGIN // Back #if 0 CSearchFile* file = (CSearchFile*)GetItemData( item ); #else CSearchFile* file = reinterpret_cast(GetItemData(item)); #endif // ADUNANZA END theApp->searchlist->StopSearch(true); theApp->amuledlg->m_searchwnd->ResetControls(); CastByID( IDC_SEARCHNAME, theApp->amuledlg->m_searchwnd, wxTextCtrl )-> SetValue(wxT("related::") + file->GetFileHash().Encode()); theApp->amuledlg->m_searchwnd->StartNewSearch(); } void CSearchListCtrl::OnMarkAsKnown( wxCommandEvent& WXUNUSED(event) ) { #ifndef CLIENT_GUI long index = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); while (index > -1) { // ADUNANZA BEGIN // Back #if 0 CSearchFile *searchFile = (CSearchFile *)GetItemData(index); #else CSearchFile *searchFile = reinterpret_cast(GetItemData(index)); #endif // ADUNANZA END CKnownFile *knownFile(new CKnownFile(*searchFile)); theApp->knownfiles->SafeAddKFile(knownFile); index = GetNextItem(index, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); } #endif } void CSearchListCtrl::OnPopupDownload(wxCommandEvent& event) { if (event.GetId() == MP_RESUME) { // Via the "Download" menu-item, use category specified in drop-down menu DownloadSelected(); } else { // Via an "Download in category" item DownloadSelected(event.GetId() - MP_ASSIGNCAT); } } void CSearchListCtrl::OnItemActivated(wxListEvent& event) { // ADUNANZA BEGIN // Back #if 0 CSearchFile* file = ((CSearchFile*)GetItemData(event.GetIndex())); #else CSearchFile* file = reinterpret_cast(GetItemData(event.GetIndex())); #endif // ADUNANZA END if (file->HasChildren()) { ShowChildren(file, !file->ShowChildren()); } else { DownloadSelected(); } } bool CSearchListCtrl::AltSortAllowed(unsigned column) const { switch (column) { case ID_SEARCH_COL_SOURCES: return true; default: return false; } } void CSearchListCtrl::DownloadSelected(int category) { FindWindowById(IDC_SDOWNLOAD)->Enable(FALSE); // Either the "Download" menu-item, the download-button, double-click or enter if (category == -1) { // Defaults to main category category = 0; if (CastByID(IDC_EXTENDEDSEARCHCHECK, NULL, wxCheckBox)->GetValue()) { category = CastByID(ID_AUTOCATASSIGN, NULL, wxChoice)->GetSelection(); } } // Process all selections long index = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); while (index > -1) { // ADUNANZA BEGIN // Back #if 0 CSearchFile* file = (CSearchFile*)GetItemData(index); #else CSearchFile* file = reinterpret_cast(GetItemData(index)); #endif // ADUNANZA END CoreNotify_Search_Add_Download(file, category); index = GetNextItem(index, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); } // Listcontrol gets updated by notification when download is started } const wxBrush& GetBrush(wxSystemColour index) { return CMuleColour(index).GetBrush(); } void CSearchListCtrl::OnDrawItem( int item, wxDC* dc, const wxRect& rect, const wxRect& rectHL, bool highlighted) { // ADUNANZA BEGIN // Back #if 0 CSearchFile* file = (CSearchFile*)GetItemData(item); #else CSearchFile* file = reinterpret_cast(GetItemData(item)); #endif // ADUNANZA END // Define text-color and background if (highlighted) { if (GetFocus()) { dc->SetBackground(GetBrush(wxSYS_COLOUR_HIGHLIGHT)); dc->SetTextForeground(CMuleColour(wxSYS_COLOUR_HIGHLIGHTTEXT)); } else { dc->SetBackground(GetBrush(wxSYS_COLOUR_BTNSHADOW)); dc->SetTextForeground(CMuleColour(wxSYS_COLOUR_HIGHLIGHTTEXT)); } } else { dc->SetBackground(GetBrush(wxSYS_COLOUR_LISTBOX)); dc->SetTextForeground(CMuleColour(wxSYS_COLOUR_WINDOWTEXT)); } // Define the border of the drawn area if (highlighted) { dc->SetPen(*(wxThePenList->FindOrCreatePen(CMuleColour(dc->GetBackground().GetColour()).Blend(65), 1, wxSOLID))); } else { dc->SetPen(*wxTRANSPARENT_PEN); dc->SetTextForeground(GetItemTextColour(item)); } // Clear the background, not done automatically since the drawing is buffered. dc->SetBrush( dc->GetBackground() ); dc->DrawRectangle( rectHL.x, rectHL.y, rectHL.width, rectHL.height ); // Various constant values we use const int iTextOffset = ( rect.GetHeight() - dc->GetCharHeight() ) / 2; const int iOffset = 4; const int treeOffset = 11; const int treeCenter = 6; bool tree_show = false; wxRect cur_rec(iOffset, rect.y, 0, rect.height ); for (int i = 0; i < GetColumnCount(); i++) { wxListItem listitem; GetColumn(i, listitem); if ( listitem.GetWidth() > 0 ) { cur_rec.width = listitem.GetWidth() - 2*iOffset; // Make a copy of the current rectangle so we can apply specific tweaks wxRect target_rec = cur_rec; // will ensure that text is about in the middle ;) target_rec.y += iTextOffset; if (i == 0) { if (file->HasChildren() || file->GetParent()) { tree_show = (listitem.GetWidth() > 0); target_rec.x += treeOffset; target_rec.width -= treeOffset; // Children are indented a bit if (file->GetParent()) { target_rec.x += 4; target_rec.width -= 4; } } // Check if the rating icon should be drawn if (file->HasRating()) { int image = Client_InvalidRating_Smiley + file->UserRating() - 1; int imgWidth = 16; theApp->amuledlg->m_imagelist.Draw(image, *dc, target_rec.GetX(), target_rec.GetY() - 1, wxIMAGELIST_DRAW_TRANSPARENT); // Move the text past the icon. target_rec.x += imgWidth + 4; target_rec.width -= imgWidth + 4; } } wxListItem cellitem; cellitem.SetColumn(i); cellitem.SetId(item); // Force clipper (clip 2 px more than the rectangle from the right side) wxDCClipper clipper(*dc, target_rec.x, target_rec.y, target_rec.width - 2, target_rec.height); if (GetItem(cellitem)) { dc->DrawText(cellitem.GetText(), target_rec.GetX(), target_rec.GetY()); } else { dc->DrawText(wxT("GetItem failed!"), target_rec.GetX(), target_rec.GetY()); } // Increment to the next column cur_rec.x += listitem.GetWidth(); } } // Draw tree last so it draws over selected and focus (looks better) if (tree_show) { // Gather some information const bool notLast = (item + 1 < GetItemCount()); const bool notFirst = (item != 0); // ADUNANZA BEGIN // Back #if 0 const bool hasNext = notLast && ((CSearchFile*)GetItemData(item + 1))->GetParent(); #else const bool hasNext = notLast && reinterpret_cast(GetItemData(item + 1))->GetParent(); #endif // ADUNANZA END const int middle = cur_rec.y + ( cur_rec.height + 1 ) / 2; // Set up a new pen for drawing the tree dc->SetPen( *(wxThePenList->FindOrCreatePen(dc->GetTextForeground(), 1, wxSOLID)) ); if (file->GetParent()) { // Draw the line to the filename dc->DrawLine(treeCenter, middle, treeOffset + 4, middle); // Draw the line to the child node if (hasNext) { dc->DrawLine(treeCenter, middle, treeCenter, cur_rec.y + cur_rec.height + 1); } // Draw the line back up to parent node if (notFirst) { dc->DrawLine(treeCenter, middle, treeCenter, cur_rec.y - 1); } } else if (file->HasChildren()) { if (file->ShowChildren()) { // Draw empty circle dc->SetBrush(*wxTRANSPARENT_BRUSH); } else { dc->SetBrush(*(wxTheBrushList->FindOrCreateBrush(GetItemTextColour(item)))); } dc->DrawCircle( treeCenter, middle, 3 ); // Draw the line to the child node if there are any children if (hasNext && file->ShowChildren()) { dc->DrawLine(treeCenter, middle + 3, treeCenter, cur_rec.y + cur_rec.height + 1); } } } // Sanity checks to ensure that results/children are properly positioned. #ifdef __WXDEBUG__ { CSearchFile* parent = file->GetParent(); if (item > 0) { // ADUNANZA BEGIN // Back #if 0 CSearchFile* before = (CSearchFile*)GetItemData(item - 1); #else CSearchFile* before = reinterpret_cast(GetItemData(item - 1)); #endif // ADUNANZA END wxASSERT(before); if (parent) { wxASSERT((before->GetParent() == parent) || (before == parent)); } else { wxASSERT(before->GetParent() != file); } } if (item < GetItemCount() - 1) { // ADUNANZA BEGIN // Back #if 0 CSearchFile* after = (CSearchFile*)GetItemData(item + 1); #else CSearchFile* after = reinterpret_cast(GetItemData(item + 1)); #endif // ADUNANZA END wxASSERT(after); if (parent) { wxASSERT((after->GetParent() == parent) || (!after->GetParent())); } else { wxASSERT((after->GetParent() == file) || (!after->GetParent())); } } } #endif } void CSearchListCtrl::ShowChildren(CSearchFile* file, bool show) { Freeze(); file->SetShowChildren(show); const CSearchResultList& results = file->GetChildren(); for (size_t i = 0; i < results.size(); ++i) { if (show) { AddResult(results[i]); } else { RemoveResult(results[i]); } } Thaw(); } wxString CSearchListCtrl::GetTTSText(unsigned item) const { return GetItemText(item); } wxString CSearchListCtrl::DetermineStatusPrintable(CSearchFile *toshow) { switch (toshow->GetDownloadStatus()) { case CSearchFile::DOWNLOADED: // File has already been downloaded. return _("Downloaded"); case CSearchFile::QUEUED: // File is downloading. case CSearchFile::QUEUEDCANCELED: // File is downloading and has been canceled before. return _("Queued"); case CSearchFile::CANCELED: // File has been canceled. return _("Canceled"); default: // File is new. return _("New"); } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/PartFile.h0000644000175000017500000003767412050266603020217 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef PARTFILE_H #define PARTFILE_H #include "KnownFile.h" // Needed for CKnownFile #include "FileAutoClose.h" // Needed for CFileAutoClose #include "OtherStructs.h" // Needed for Requested_Block_Struct #include "DeadSourceList.h" // Needed for CDeadSourceList #include "GapList.h" class CSearchFile; class CMemFile; class CFileDataIO; class CED2KFileLink; //#define BUFFER_SIZE_LIMIT 500000 // Max bytes before forcing a flush #define BUFFER_TIME_LIMIT 60000 // Max milliseconds before forcing a flush // Ok, eMule and aMule are building incompatible backup files because // of the different name. aMule was using ".BAK" and eMule ".bak". // This should fix it. #define PARTMET_BAK_EXT wxT(".bak") enum EPartFileFormat { PMT_UNKNOWN = 0, PMT_DEFAULTOLD, PMT_SPLITTED, PMT_NEWOLD, PMT_SHAREAZA, PMT_BADFORMAT }; class SFileRating { public: wxString UserName; wxString FileName; sint16 Rating; wxString Comment; public: SFileRating(const wxString &u, const wxString &f, sint16 r, const wxString &c); SFileRating(const SFileRating &fr); SFileRating(const CUpDownClient &client); ~SFileRating(); }; typedef std::list FileRatingList; class SourcenameItem { public: wxString name; int count; public: SourcenameItem(const wxString &n = EmptyString, int c = 0) : name(n), count(c) {} }; typedef std::map SourcenameItemMap; class CPartFile : public CKnownFile { public: typedef std::list CReqBlockPtrList; CPartFile(); #ifdef CLIENT_GUI // ADUNANZA BEGIN // Backport # if 0 CPartFile(CEC_PartFile_Tag *tag); # else CPartFile(const CEC_PartFile_Tag *tag); # endif // ADUNANZA END #else virtual void SetFileName(const CPath& filename); #endif CPartFile(CSearchFile* searchresult); //used when downloading a new file CPartFile(const CED2KFileLink* fileLink); virtual ~CPartFile(); virtual bool LoadFromFile(const CFileDataIO* WXUNUSED(file)) { return false; } bool WriteToFile(CFileDataIO* WXUNUSED(file)) { return false; } // virtual functions for CKnownFile and CPartFile: bool IsPartFile() const { return status != PS_COMPLETE; } // true if not completed bool IsCompleted() const { return status == PS_COMPLETE; } // true if completed bool IsCPartFile() const { return true; } // true if it's a CPartFile // ADUNANZA BEGIN // Per ripartitore di Tiger (credo) #if 0 uint32 Process(uint32 reducedownload, uint8 m_icounter); #else uint32 Process(uint32 reducedownload, uint32 ADU_ext_reducedownload, uint32 ADU_kadu_reducedownload, uint8 m_icounter, uint32& ADU_ext_datarate, uint32& ADU_kadu_datarate); #endif // ADUNANZA END uint8 LoadPartFile(const CPath& in_directory, const CPath& filename, bool from_backup = false, bool getsizeonly = false); bool SavePartFile(bool Initial = false); void PartFileHashFinished(CKnownFile* result); bool HashSinglePart(uint16 partnumber); // true = ok , false = corrupted bool CheckShowItemInGivenCat(int inCategory); bool IsComplete(uint64 start, uint64 end) { return m_gaplist.IsComplete(start, end); } bool IsComplete(uint16 part) { return m_gaplist.IsComplete(part); } void UpdateCompletedInfos(); bool GetNextRequestedBlock(CUpDownClient* sender, std::vector& toadd, uint16& count); void WritePartStatus(CMemFile* file); void WriteCompleteSourcesCount(CMemFile* file); static bool CanAddSource(uint32 userid, uint16 port, uint32 serverip, uint16 serverport, uint8* pdebug_lowiddropped = NULL, bool ed2kID = true); void AddSources(CMemFile& sources, uint32 serverip, uint16 serverport, unsigned origin, bool bWithObfuscationAndHash); #ifdef CLIENT_GUI uint8 GetStatus() const { return status; } uint8 GetStatus(bool /*ignorepause = false*/) const { return status; } #else uint8 GetStatus(bool ignorepause = false) const; #endif virtual void UpdatePartsInfo(); const CPath& GetPartMetFileName() const { return m_partmetfilename; } uint16 GetPartMetNumber() const; uint64 GetTransferred() const { return transferred; } const CPath& GetFullName() const { return m_fullname; } float GetKBpsDown() const { return kBpsDown; } // ADUNANZA BEGIN float ADU_GetKBpsDown_ext() const { return m_ADU_ext_kBpsDown; } float ADU_GetKBpsDown_kadu() const { return m_ADU_kadu_kBpsDown; } // ADUNANZA END double GetPercentCompleted() const { return percentcompleted; } #ifndef CLIENT_GUI // ADUNANZA BEGIN inline size_t GetAduSourceCount() const { return m_AduSrcList_size; } // ADUNANZA END uint16 GetSourceCount() const { return (uint16)m_SrcList.size(); } uint16 GetSrcA4AFCount() const { return (uint16)m_A4AFsrclist.size(); } #else uint16 m_source_count, m_a4af_source_count; uint16 GetSourceCount() const { return m_source_count; } // ADUNANZA BEGIN uint16 m_adu_source_count; inline uint16 GetAduSourceCount() const { return m_adu_source_count; } // ADUNANZA END uint16 GetSrcA4AFCount() const { return m_a4af_source_count; } #endif uint16 GetTransferingSrcCount() const { return transferingsrc; } uint16 GetNotCurrentSourcesCount() const { return m_notCurrentSources; }; uint16 GetValidSourcesCount() const { return m_validSources; }; // ADUNANZA BEGIN // CUpDownClient* GetSlowestSource(CUpDownClient* calling_source) const; void GetSlowestSource(CUpDownClient* calling_source, CClientRef& slowestSourceRef); bool DropSlowestSource(CUpDownClient* calling_source); // ADUNANZA END uint64 GetNeededSpace(); virtual wxString GetFeedback() const; wxString getPartfileStatus() const; //<<--9/21/02 sint32 getTimeRemaining() const; //<<--9/21/02 time_t lastseencomplete; int getPartfileStatusRang() const; // Barry - Added as replacement for BlockReceived to buffer data before writing to disk uint32 WriteToBuffer(uint32 transize, byte *data, uint64 start, uint64 end, Requested_Block_Struct *block, const CUpDownClient* client); void FlushBuffer(bool fromAICHRecoveryDataAvailable = false); // Barry - Added to prevent list containing deleted blocks on shutdown void RemoveAllRequestedBlocks(void); void RemoveBlockFromList(uint64 start,uint64 end); void RemoveAllSources(bool bTryToSwap); void Delete(); void StopFile(bool bCancel = false); void PauseFile(bool bInsufficient = false); void ResumeFile(); virtual CPacket* CreateSrcInfoPacket(const CUpDownClient* forClient, uint8 byRequestedVersion, uint16 nRequestedOptions); void AddClientSources(CMemFile* sources, unsigned nSourceFrom, uint8 uClientSXVersion, bool bSourceExchange2, const CUpDownClient* pClient = NULL); bool PreviewAvailable(); uint16 GetAvailablePartCount() const { return m_availablePartsCount; } uint32 GetLastAnsweredTime() const { return m_ClientSrcAnswered; } void SetLastAnsweredTime(); void SetLastAnsweredTimeTimeout(); uint64 GetLostDueToCorruption() const { return m_iLostDueToCorruption; } uint64 GetGainDueToCompression() const { return m_iGainDueToCompression; } uint32 TotalPacketsSavedDueToICH()const{ return m_iTotalPacketsSavedDueToICH; } bool IsStopped() const { return this ? m_stopped : true; } bool IsPaused() const { return m_paused; } void UpdateFileRatingCommentAvail(); int GetCommonFilePenalty(); void UpdateDisplayedInfo(bool force = false); uint8 GetCategory() const { return m_category; } void SetCategory(uint8 cat); void RemoveCategory(uint8 cat); void SetDownPriority(uint8 newDownPriority, bool bSave = true, bool bRefresh = true); bool IsAutoDownPriority() const { return m_bAutoDownPriority; } void SetAutoDownPriority(bool flag) { m_bAutoDownPriority = flag; } void UpdateAutoDownPriority(); uint8 GetDownPriority() const { return m_iDownPriority; } void SetActive(bool bActive); uint32 GetDlActiveTime() const; bool GetInsufficient() const { return m_insufficient; } void CompleteFileEnded(bool errorOccured, const CPath& newname); bool RemoveSource(CUpDownClient* toremove, bool updatewindow = true, bool bDoStatsUpdate = true); void RequestAICHRecovery(uint16 nPart); void AICHRecoveryDataAvailable(uint16 nPart); /** * This function is used to update source-counts. * * @param oldState The old state of the client, or -1 to ignore. * @param newState The new state of the client, or -1 to ignore. * * Call this function for a client belonging to this file, which has changed * its state. The value -1 can be used to make the function ignore one of * the two states. * * AddSource and DelSource takes care of calling this function when a source is * removed, so there's no need to call this function when calling either of those. */ void ClientStateChanged( int oldState, int newState ); bool AddSource( CUpDownClient* client ); bool DelSource( CUpDownClient* client ); /** * Updates the requency of avilable parts from with the data the client provides. * * @param client The clients whoose available parts should be considered. * @param increment If true, the counts are incremented, otherwise they are decremented. * * This functions updates the frequency list of file-parts, using the clients * parts-status. This function should be called by clients every time they update their * parts-status, or when they are added or removed from the file. */ void UpdatePartsFrequency( CUpDownClient* client, bool increment ); ArrayOfUInts16 m_SrcpartFrequency; const SourceSet& GetSourceList() const { return m_SrcList; } const SourceSet& GetA4AFList() const { return m_A4AFsrclist; } void ClearA4AFList() { m_A4AFsrclist.clear(); } const CReqBlockPtrList GetRequestedBlockList() const { return m_requestedblocks_list; } const CGapList& GetGapList() const { return m_gaplist; } /** * Adds a source to the list of dead sources. * * @param client The source to be recorded as dead for this file. */ void AddDeadSource(const CUpDownClient* client); // ADUNANZA BEGIN // backport /** * Set the current progress of hashing and display it in the download list control. * * @param part Number of part currently being hashed. 0 for no hashing in progress. */ virtual void SetHashingProgress(uint16 part) const; // ADUNANZA END /** * Checks if a source is recorded as being dead for this file. * * @param client The client to evaluate. * @return True if dead, false otherwise. * * Sources that are dead are not to be considered valid * sources and should not be added to the partfile. */ bool IsDeadSource(const CUpDownClient* client); /* Kad Stuff */ uint16 GetMaxSources() const; uint16 GetMaxSourcePerFileSoft() const; uint16 GetMaxSourcePerFileUDP() const; void GetRatingAndComments(FileRatingList & list) const; void AllocationFinished(); private: #ifndef CLIENT_GUI // partfile handle (opened on demand) CFileAutoClose m_hpartfile; //! A local list of sources that are invalid for this file. CDeadSourceList m_deadSources; class CCorruptionBlackBox* m_CorruptionBlackBox; #endif uint16 m_notCurrentSources; uint32 m_validSources; void AddGap(uint64 start, uint64 end); void AddGap(uint16 part); void FillGap(uint64 start, uint64 end); void FillGap(uint16 part); bool GetNextEmptyBlockInPart(uint16 partnumber,Requested_Block_Struct* result); bool IsAlreadyRequested(uint64 start, uint64 end); void CompleteFile(bool hashingdone); void CreatePartFile(); void Init(); bool CheckFreeDiskSpace( uint64 neededSpace = 0 ); bool IsCorruptedPart(uint16 partnumber); uint32 m_iLastPausePurge; uint16 m_count; uint16 transferingsrc; uint64 completedsize; uint64 transferred; uint64 m_iLostDueToCorruption; uint64 m_iGainDueToCompression; uint32 m_iTotalPacketsSavedDueToICH; float kBpsDown; // ADUNANZA_BEGIN float m_ADU_ext_kBpsDown; float m_ADU_kadu_kBpsDown; // ADNANZA END CPath m_fullname; // path/name of the met file CPath m_partmetfilename; // name of the met file CPath m_PartPath; // path/name of the partfile bool m_paused; bool m_stopped; bool m_insufficient; uint8 m_iDownPriority; bool m_bAutoDownPriority; uint8 status; uint32 lastpurgetime; uint32 m_LastNoNeededCheck; CGapList m_gaplist; CReqBlockPtrList m_requestedblocks_list; double percentcompleted; std::list m_corrupted_list; uint16 m_availablePartsCount; uint32 m_ClientSrcAnswered; bool m_bPercentUpdated; void PerformFileComplete(); uint32 m_lastRefreshedDLDisplay; // Buffered data to be written std::list m_BufferedData_list; uint32 m_nTotalBufferData; uint32 m_nLastBufferFlushTime; uint8 m_category; uint32 m_nDlActiveTime; time_t m_tActivated; bool m_is_A4AF_auto; SourceSet m_SrcList; // ADUNANZA BEGIN size_t m_AduSrcList_size; // ADUNANZA END SourceSet m_A4AFsrclist; bool m_hashsetneeded; uint32 m_lastsearchtime; bool m_localSrcReqQueued; #ifdef CLIENT_GUI FileRatingList m_FileRatingList; const FileRatingList &GetFileRatingList() { return m_FileRatingList; } void ClearFileRatingList() { m_FileRatingList.clear(); } void AddFileRatingList(const wxString & u, const wxString & f, sint16 r, const wxString & c) { m_FileRatingList.push_back(SFileRating(u, f, r, c)); } uint32 m_kbpsDown; uint8 m_iDownPriorityEC; bool m_isShared; SourcenameItemMap m_SourcenameItemMap; ListOfUInts32 m_A4AFClientIDs; ListOfUInts32 & GetA4AFClientIDs() { return m_A4AFClientIDs; } public: bool IsShared() const { return m_isShared; } SourcenameItemMap &GetSourcenameItemMap() { return m_SourcenameItemMap; } PartFileEncoderData m_PartFileEncoderData; #endif public: bool IsHashSetNeeded() const { return m_hashsetneeded; } void SetHashSetNeeded(bool value) { m_hashsetneeded = value; } uint64 GetCompletedSize() const { return completedsize; } void SetCompletedSize(uint64 size) { completedsize = size; } bool IsLocalSrcRequestQueued() const { return m_localSrcReqQueued; } void SetLocalSrcRequestQueued(bool value) { m_localSrcReqQueued = value; } void AddA4AFSource(CUpDownClient* src) { m_A4AFsrclist.insert(CCLIENTREF(src, wxT("A4AFSource"))); } bool RemoveA4AFSource(CUpDownClient* src) { return (m_A4AFsrclist.erase(CCLIENTREF(src, wxEmptyString)) > 0); } uint32 GetLastSearchTime() const { return m_lastsearchtime; } void SetLastSearchTime(uint32 time) { m_lastsearchtime = time; } void AddDownloadingSource(CUpDownClient* client); void RemoveDownloadingSource(CUpDownClient* client); void SetStatus(uint8 in); void StopPausedFile(); // [sivka / Tarod] Imported from eMule 0.30c (Creteil) ... void SetA4AFAuto(bool in) { m_is_A4AF_auto = in; } bool IsA4AFAuto() const { return m_is_A4AF_auto; } // Kry -Sources seeds void SaveSourceSeeds(); void LoadSourceSeeds(); // Dropping slow sources CUpDownClient* GetSlowerDownloadingClient(uint32 speed, CUpDownClient* caller); // Read data for sharing bool ReadData(class CFileArea & area, uint64 offset, uint32 toread); private: /* downloading sources list */ CClientRefList m_downloadingSourcesList; /* Kad Stuff */ uint32 m_LastSearchTimeKad; uint8 m_TotalSearchesKad; friend class CKnownFilesRem; friend class CPartFileConvert; }; #endif // PARTFILE_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/Packet.cpp0000644000175000017500000002216012050266603020233 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include // Needed for uLongf #include "Packet.h" // Interface declarations #include #include "Logger.h" // Neeed for AddDebugLogLineN #include "MemFile.h" // Needed for CMemFile #include "OtherStructs.h" // Needed for Header_Struct #include "ArchSpecific.h" // Needed for ENDIAN_* // ADUNANZA BEGIN #include #include "amule.h" #include "RemoteSettings.h" // ADUNANZA END // Copy constructor CPacket::CPacket(CPacket &p) { size = p.size; opcode = p.opcode; prot = p.prot; m_bSplitted = p.m_bSplitted; m_bLastSplitted = p.m_bLastSplitted; m_bPacked = p.m_bPacked; m_bFromPF = p.m_bFromPF; memcpy(head, p.head, sizeof head); tempbuffer = NULL; if (p.completebuffer) { completebuffer = new byte[size + 10];; pBuffer = completebuffer + sizeof(Header_Struct); } else { completebuffer = NULL; if (p.pBuffer) { pBuffer = new byte[size]; } else { pBuffer = NULL; } } if (pBuffer) memcpy( pBuffer, p.pBuffer, size ); } CPacket::CPacket(uint8 protocol) { size = 0; opcode = 0; prot = protocol; m_bSplitted = false; m_bLastSplitted = false; m_bPacked = false; m_bFromPF = false; memset(head, 0, sizeof head); tempbuffer = NULL; completebuffer = NULL; pBuffer = NULL; } // only used for receiving packets CPacket::CPacket(byte* rawHeader, byte *buf) { memset(head, 0, sizeof head); // ADUNANZA BEGIN // Back #if 0 Header_Struct* header = (Header_Struct*)rawHeader; #else Header_Struct* header = reinterpret_cast(rawHeader); #endif // ADUNANZA END size = ENDIAN_SWAP_32(header->packetlength) - 1; opcode = header->command; prot = header->eDonkeyID; m_bSplitted = false; m_bLastSplitted = false; m_bPacked = false; m_bFromPF = false; tempbuffer = NULL; completebuffer = NULL; pBuffer = buf; } CPacket::CPacket(const CMemFile& datafile, uint8 protocol, uint8 ucOpcode) { size = datafile.GetLength(); opcode = ucOpcode; prot = protocol; m_bSplitted = false; m_bLastSplitted = false; m_bPacked = false; m_bFromPF = false; memset(head, 0, sizeof head); tempbuffer = NULL; completebuffer = new byte[size + sizeof(Header_Struct)/*Why this 4?*/]; pBuffer = completebuffer + sizeof(Header_Struct); // Write contents of MemFile to buffer (while keeping original position in file) off_t position = datafile.GetPosition(); datafile.Seek(0, wxFromStart); datafile.Read(pBuffer, size); datafile.Seek(position, wxFromStart); } CPacket::CPacket(int8 in_opcode, uint32 in_size, uint8 protocol, bool bFromPF) { size = in_size; opcode = in_opcode; prot = protocol; m_bSplitted = false; m_bLastSplitted = false; m_bPacked = false; m_bFromPF = bFromPF; memset(head, 0, sizeof head); tempbuffer = NULL; if (in_size) { completebuffer = new byte[in_size + sizeof(Header_Struct) + 4 /*Why this 4?*/]; pBuffer = completebuffer + sizeof(Header_Struct); memset(completebuffer, 0, in_size + sizeof(Header_Struct) + 4 /*Why this 4?*/); } else { completebuffer = NULL; pBuffer = NULL; } } // only used for splitted packets! CPacket::CPacket(byte* pPacketPart, uint32 nSize, bool bLast, bool bFromPF) { size = nSize - sizeof(Header_Struct); opcode = 0; prot = 0; m_bSplitted = true; m_bLastSplitted = bLast; m_bPacked = false; m_bFromPF = bFromPF; memset(head, 0, sizeof head); tempbuffer = NULL; completebuffer = pPacketPart; pBuffer = NULL; } CPacket::~CPacket() { // Never deletes pBuffer when completebuffer is not NULL if (completebuffer) { delete [] completebuffer; } else if (pBuffer) { // On the other hand, if completebuffer is NULL and pBuffer is not NULL delete [] pBuffer; } if (tempbuffer) { delete [] tempbuffer; } } uint32 CPacket::GetPacketSizeFromHeader(const byte* rawHeader) { // ADUNANZA BEGIN // Back #if 0 Header_Struct* header = (Header_Struct*)rawHeader; #else const Header_Struct* header = reinterpret_cast(rawHeader); #endif // ADUNANZA END uint32 size = ENDIAN_SWAP_32(header->packetlength); if (size < 1 || size >= 0x7ffffff0u) return 0; return size - 1; } void CPacket::CopyToDataBuffer(unsigned int offset, const byte* data, unsigned int n) { wxASSERT(offset + n <= size + 1); memcpy(pBuffer + offset, data, n); } byte* CPacket::GetPacket() { if (completebuffer) { if (!m_bSplitted) { memcpy(completebuffer, GetHeader(), sizeof(Header_Struct)); } return completebuffer; } else { if (tempbuffer){ delete [] tempbuffer; tempbuffer = NULL; } tempbuffer = new byte[size + sizeof(Header_Struct) + 4 /* why this 4?*/]; memcpy(tempbuffer , GetHeader(), sizeof(Header_Struct)); memcpy(tempbuffer + sizeof(Header_Struct), pBuffer , size); return tempbuffer; } } byte* CPacket::DetachPacket() { if (completebuffer) { if (!m_bSplitted) { memcpy(completebuffer, GetHeader(), sizeof(Header_Struct)); } byte* result = completebuffer; completebuffer = pBuffer = NULL; return result; } else{ if (tempbuffer){ delete[] tempbuffer; tempbuffer = NULL; } tempbuffer = new byte[size+sizeof(Header_Struct)+4 /* Why this 4?*/]; memcpy(tempbuffer,GetHeader(),sizeof(Header_Struct)); memcpy(tempbuffer+sizeof(Header_Struct),pBuffer,size); byte* result = tempbuffer; tempbuffer = 0; return result; } } byte* CPacket::GetHeader() { wxASSERT( !m_bSplitted ); // ADUNANZA BEGIN // Back #if 0 Header_Struct* header = (Header_Struct*) head; #else Header_Struct* header = reinterpret_cast(head); #endif // ADUNANZA END header->command = opcode; header->eDonkeyID = prot; header->packetlength = ENDIAN_SWAP_32(size + 1); return head; } byte* CPacket::GetUDPHeader() { wxASSERT( !m_bSplitted ); memset(head, 0, 6); // ADUNANZA BEGIN // Back #if 0 UDP_Header_Struct* header = (UDP_Header_Struct*) head; #else UDP_Header_Struct* header = reinterpret_cast(head); #endif // ADUNANZA END header->eDonkeyID = prot; header->command = opcode; return head; } void CPacket::PackPacket() { wxASSERT(!m_bSplitted); // ADUNANZA BEGIN if (!theApp) { std::cerr << "NULL Application pointer" << std::endl; return; } uint8 kadu_opcode = static_cast(theApp->get_kadOpcode()); uint8 kadu_Zopcode = static_cast(theApp->get_kadZOpcode()); // ADUNANZA END uLongf newsize = size + 300; byte* output = new byte[newsize]; uint16 result = compress2(output, &newsize, pBuffer, size, Z_BEST_COMPRESSION); if (result != Z_OK || size <= newsize) { delete[] output; return; } // ADUNANZA BEGIN #if 0 if (prot == OP_KADEMLIAHEADER) { prot = OP_KADEMLIAPACKEDPROT; #else if (prot == kadu_opcode) { prot = kadu_Zopcode; #endif // ADUNANZA END } else { prot = OP_PACKEDPROT; } // ADUNANZA BEGIN if (!pBuffer || !output) { std::cerr << "(Mr Hyde DBG) : CPacket::CPacket, ERROR NULL pBuffer!" << std::endl; if (output) delete[] output; return; } // ADUNANZA END memcpy(pBuffer, output, newsize); delete[] output; m_bPacked = true; size = newsize; } bool CPacket::UnPackPacket(uint32 uMaxDecompressedSize) { wxASSERT( prot == OP_PACKEDPROT || prot == OP_ED2KV2PACKEDPROT); // OP_ED2KV2PACKEDPROT is experimental aMule test code, // this should not happen yet. Leave a warining in the log. if (prot == OP_ED2KV2PACKEDPROT) { AddDebugLogLineN(logPacketErrors, wxT("Received OP_ED2KV2PACKEDPROT.")); } uint32 nNewSize = size * 10 + 300; if (nNewSize > uMaxDecompressedSize){ nNewSize = uMaxDecompressedSize; } byte* unpack = new byte[nNewSize]; uLongf unpackedsize = nNewSize; uint16 result = uncompress(unpack, &unpackedsize, pBuffer, size); if (result == Z_OK) { wxASSERT( completebuffer == NULL ); wxASSERT( pBuffer != NULL ); size = unpackedsize; delete[] pBuffer; pBuffer = unpack; prot = OP_EMULEPROT; return true; } delete[] unpack; return false; } void CPacket::Copy16ToDataBuffer(const void* data) { md4cpy(pBuffer, data); } void CPacket::CopyUInt32ToDataBuffer(uint32 data, unsigned int offset) { wxCHECK_RET(offset <= size - sizeof(uint32), wxT("Bad offset in CopyUInt32ToDataBuffer.")); PokeUInt32( pBuffer + offset, data ); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/CorruptionBlackBox.cpp0000644000175000017500000002323312050266603022600 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2008-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2008-2011 Stu Redman ( sturedman@amule.org ) // Copyright (C) 2002-2011 Merkur ( strEmail.Format("%s@%s", "devteam", "emule-project.net") / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "CorruptionBlackBox.h" #include // needed for PARTSIZE #include "updownclient.h" // Needed for CUpDownClient #include "Logger.h" #include "amule.h" // needed for theApp #include "ClientList.h" #include "NetworkFunctions.h" // needed for Uint32toStringIP #include "OtherFunctions.h" // needed for CastItoXBytes #include // needed for CFormat #include #define CBB_BANTHRESHOLD 32 //% max corrupted data // Record to store information which piece of data was downloaded from which client CCorruptionBlackBox::CCBBRecord::CCBBRecord(uint32 nStartPos, uint32 nEndPos, uint32 dwIP) { if (nStartPos > nEndPos) { wxFAIL; return; } m_nStartPos = nStartPos; m_nEndPos = nEndPos; m_dwIP = dwIP; } // Try to merge new data to an existing record bool CCorruptionBlackBox::CCBBRecord::Merge(uint32 nStartPos, uint32 nEndPos, uint32 dwIP) { if (m_dwIP == dwIP) { if (nStartPos == m_nEndPos + 1) { m_nEndPos = nEndPos; return true; } else if (nEndPos + 1 == m_nStartPos) { m_nStartPos = nStartPos; return true; } } return false; } // Release memory (after download completes) void CCorruptionBlackBox::Free() { m_Records.clear(); m_goodClients.clear(); m_badClients.clear(); } // Store a piece of received data (don't know if it's good or bad yet). // Data is stored in a list for the chunk in belongs to. void CCorruptionBlackBox::TransferredData(uint64 nStartPos, uint64 nEndPos, uint32 senderIP) { if (nStartPos > nEndPos) { wxFAIL; return; } // convert pos to relative block pos uint16 nPart = (uint16)(nStartPos / PARTSIZE); uint32 nRelStartPos = nStartPos - nPart*PARTSIZE; uint32 nRelEndPos = nEndPos - nPart*PARTSIZE; if (nRelEndPos >= PARTSIZE) { // data crosses the partborder, split it // (for the fun of it, this should never happen) nRelEndPos = PARTSIZE-1; TransferredData((nPart+1)*PARTSIZE, nEndPos, senderIP); } // // Let's keep things simple. // We don't request data we already have. // We check if received data exceeds block boundaries. // -> There should not be much overlap here. // So just stuff everything received into the list and only join adjacent blocks. // CRecordList & list = m_Records[nPart]; // this creates the entry if it doesn't exist yet bool merged = false; for (CRecordList::iterator it = list.begin(); it != list.end() && !merged; ++it) { merged = it->Merge(nRelStartPos, nRelEndPos, senderIP); } if (!merged) { list.push_back(CCBBRecord(nRelStartPos, nRelEndPos, senderIP)); AddDebugLogLineN(logPartFile, CFormat(wxT("CorruptionBlackBox(%s): transferred: new record for part %d (%d - %d, %s)")) % m_partNumber % nPart % nRelStartPos % nRelEndPos % Uint32toStringIP(senderIP)); } } // Mark a piece of data as good or bad. // Piece is removed from the chunk list and added to the client's record. void CCorruptionBlackBox::VerifiedData(bool ok, uint16 nPart, uint32 nRelStartPos, uint32 nRelEndPos) { if (nRelStartPos > nRelEndPos) { wxFAIL; return; } CRecordList & list = m_Records[nPart]; #ifdef __DEBUG__ std::map mapDebug; uint32 nDbgVerifiedBytes = 0; size_t listsize1 = list.size(); #endif for (CRecordList::iterator it1 = list.begin(); it1 != list.end();) { CRecordList::iterator it = it1++; uint32 & curStart = it->m_nStartPos; uint32 & curEnd = it->m_nEndPos; uint32 ip = it->m_dwIP; uint32 data = 0; if (curStart >= nRelStartPos && curStart <= nRelEndPos) { // [arg // [cur if (curEnd > nRelEndPos) { // [arg] // [cur] data = nRelEndPos - curStart + 1; curStart = nRelEndPos + 1; } else { // [arg ] // [cur] data = curEnd - curStart + 1; list.erase(it); } } else if (curStart < nRelStartPos && curEnd >= nRelStartPos) { // [arg // [cur if (curEnd > nRelEndPos) { // [arg] // [cur ] data = nRelEndPos - nRelStartPos + 1; // split it: insert new block before current block list.insert(it, CCBBRecord(curStart, nRelStartPos - 1, ip)); curStart = nRelEndPos + 1; } else { // [arg] // [cur] data = curEnd - nRelStartPos + 1; curEnd = nRelStartPos - 1; } // else no overlap } if (data) { if (ok) { m_goodClients[ip].m_downloaded += data; } else { // corrupted data records are always counted as at least blocksize or bigger m_badClients[ip].m_downloaded += (data > EMBLOCKSIZE) ? data : EMBLOCKSIZE;; } DEBUG_ONLY(nDbgVerifiedBytes += data); DEBUG_ONLY(mapDebug[ip] = 1); } } DEBUG_ONLY(size_t listsize2 = list.size()); // when everything is added to the stats drop the whole record if (list.empty()) { m_Records.erase(nPart); } #ifdef __DEBUG__ AddDebugLogLineN(logPartFile, CFormat(wxT("CorruptionBlackBox(%s): found and marked %d recorded bytes of %d as %s in part %d, %d records found, %d records left, %d different clients")) % m_partNumber % nDbgVerifiedBytes % (nRelEndPos-nRelStartPos+1) % (ok ? wxT("verified") : wxT("corrupt")) % nPart % listsize1 % listsize2 % mapDebug.size()); #endif } // Check all clients that uploaded corrupted data, // and ban them if they didn't upload enough good data too. void CCorruptionBlackBox::EvaluateData() { CCBBClientMap::iterator it = m_badClients.begin(); for (; it != m_badClients.end(); ++it) { uint32 ip = it->first; uint64 bad = it->second.m_downloaded; if (!bad) { wxFAIL; // this should not happen continue; } uint64 good = 0; CCBBClientMap::iterator it2 = m_goodClients.find(ip); if (it2 != m_goodClients.end()) { good = it2->second.m_downloaded; } int nCorruptPercentage = bad * 100 / (bad + good); if (nCorruptPercentage > CBB_BANTHRESHOLD) { CUpDownClient* pEvilClient = theApp->clientlist->FindClientByIP(ip); wxString clientName; if (pEvilClient != NULL) { clientName = pEvilClient->GetClientShortInfo(); AddDebugLogLineN(logPartFile, CFormat(wxT("CorruptionBlackBox(%s): Banning: Found client which sent %d of %d corrupted data, %s")) % m_partNumber % bad % (good + bad) % pEvilClient->GetClientFullInfo()); theApp->clientlist->AddTrackClient(pEvilClient); pEvilClient->Ban(); // Identified as sender of corrupt data // Stop download right away pEvilClient->SetDownloadState(DS_BANNED); if (pEvilClient->Disconnected(wxT("Upload of corrupted data"))) { pEvilClient->Safe_Delete(); } } else { clientName = Uint32toStringIP(ip); theApp->clientlist->AddBannedClient(ip); } AddLogLineN(CFormat(_("Banned client %s for sending %s corrupt data of %s total for the file '%s'")) % clientName % CastItoXBytes(bad) % CastItoXBytes(good + bad) % m_fileName); } else { CUpDownClient* pSuspectClient = theApp->clientlist->FindClientByIP(ip); if (pSuspectClient != NULL) { AddDebugLogLineN(logPartFile, CFormat(wxT("CorruptionBlackBox(%s): Reporting: Found client which probably sent %d of %d corrupted data, but it is within the acceptable limit, %s")) % m_partNumber % bad % (good + bad) % pSuspectClient->GetClientFullInfo()); theApp->clientlist->AddTrackClient(pSuspectClient); } else { AddDebugLogLineN(logPartFile, CFormat(wxT("CorruptionBlackBox(%s): Reporting: Found client which probably sent %d of %d corrupted data, but it is within the acceptable limit, %s")) % m_partNumber % bad % (good + bad) % Uint32toStringIP(ip)); } } } } // Full debug output of all data void CCorruptionBlackBox::DumpAll() { #ifdef __DEBUG__ AddDebugLogLineN(logPartFile, wxT("CBB Dump Records")); std::map::iterator it = m_Records.begin(); for (; it != m_Records.end(); ++it) { uint16 block = it->first; CRecordList & list = it->second; for (CRecordList::iterator it2 = list.begin(); it2 != list.end(); ++it2) { AddDebugLogLineN(logPartFile, CFormat(wxT("CBBD %6d %.16s %10d - %10d")) % block % Uint32toStringIP(it2->m_dwIP) % it2->m_nStartPos % it2->m_nEndPos); } } if (!m_goodClients.empty()) { AddDebugLogLineN(logPartFile, wxT("CBB Dump good Clients")); CCBBClientMap::iterator it3 = m_goodClients.begin(); for (; it3 != m_goodClients.end(); ++it3) { AddDebugLogLineN(logPartFile, CFormat(wxT("CBBD %.16s good %10d")) % Uint32toStringIP(it3->first) % it3->second.m_downloaded); } } if (!m_badClients.empty()) { AddDebugLogLineN(logPartFile, wxT("CBB Dump bad Clients")); CCBBClientMap::iterator it3 = m_badClients.begin(); for (; it3 != m_badClients.end(); ++it3) { AddDebugLogLineN(logPartFile, CFormat(wxT("CBBD %.16s bad %10d")) % Uint32toStringIP(it3->first) % it3->second.m_downloaded); } } #endif } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/Makefile.in0000644000175000017500000222054512053222402020366 0ustar l3onl3on# Makefile.in generated by automake 1.11.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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@ # ADUNANZA BEGIN @ENABLE_ADUNSLU2_TRUE@am__append_1 = -DENABLE_ADUNSLU2=1 @ENABLE_MRHYDEEXP_TRUE@am__append_2 = -DENABLE_MRHYDEEXP=1 # ADUNANZA BEGIN # Backport # SUBDIRS += webserver # build webserver after current @WEB_TRUE@am__append_3 = . webserver # ADUNANZA END @INSTALL_SKINS_TRUE@am__append_4 = skins bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ $(am__EXEEXT_4) $(am__EXEEXT_5) @MONOLITHIC_TRUE@am__append_5 = amule @COMPILE_CMD_TRUE@am__append_6 = amulecmd @ED2K_TRUE@am__append_7 = ed2k @AMULE_GUI_TRUE@am__append_8 = amulegui @AMULE_DAEMON_TRUE@am__append_9 = amuled @MONOLITHIC_TRUE@am__append_10 = libmuleappcore.a libmuleappgui.a libmuleappcommon.a @AMULE_DAEMON_TRUE@@MONOLITHIC_FALSE@am__append_11 = libmuleappcore.a libmuleappcommon.a @AMULE_DAEMON_FALSE@@AMULE_GUI_TRUE@@MONOLITHIC_FALSE@am__append_12 = libmuleappgui.a libmuleappcommon.a @SYS_WIN32_TRUE@am__append_13 = -lshlwapi @NEED_RC_TRUE@am__append_14 = amulerc.$(OBJEXT) @NEED_RC_TRUE@am__append_15 = amulerc.$(OBJEXT) @NEED_RC_TRUE@am__append_16 = amuleguirc.$(OBJEXT) @NEED_RC_TRUE@am__append_17 = amuleguirc.$(OBJEXT) DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/automake/dist-hook.am subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/GeoIP.m4 \ $(top_srcdir)/m4/build-tools.m4 $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/cryptopp.m4 $(top_srcdir)/m4/fallocate.m4 \ $(top_srcdir)/m4/gdlib.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/kde.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libpng.m4 $(top_srcdir)/m4/libupnp.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/plasmamule.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/qt.m4 $(top_srcdir)/m4/readline.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/wxwin.m4 \ $(top_srcdir)/m4/zlib.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libmuleappcommon_a_AR = $(AR) $(ARFLAGS) libmuleappcommon_a_LIBADD = am_libmuleappcommon_a_OBJECTS = libmuleappcommon_a-CFile.$(OBJEXT) \ libmuleappcommon_a-ClientCredits.$(OBJEXT) \ libmuleappcommon_a-ED2KLink.$(OBJEXT) \ libmuleappcommon_a-Friend.$(OBJEXT) \ libmuleappcommon_a-GapList.$(OBJEXT) \ libmuleappcommon_a-MagnetURI.$(OBJEXT) \ libmuleappcommon_a-MemFile.$(OBJEXT) \ libmuleappcommon_a-NetworkFunctions.$(OBJEXT) \ libmuleappcommon_a-OtherFunctions.$(OBJEXT) \ libmuleappcommon_a-Packet.$(OBJEXT) \ libmuleappcommon_a-RLE.$(OBJEXT) \ libmuleappcommon_a-SafeFile.$(OBJEXT) \ libmuleappcommon_a-SHA.$(OBJEXT) \ libmuleappcommon_a-Tag.$(OBJEXT) \ libmuleappcommon_a-TerminationProcess.$(OBJEXT) \ libmuleappcommon_a-Timer.$(OBJEXT) \ libmuleappcommon_a-FastwebNet.$(OBJEXT) libmuleappcommon_a_OBJECTS = $(am_libmuleappcommon_a_OBJECTS) libmuleappcore_a_AR = $(AR) $(ARFLAGS) libmuleappcore_a_LIBADD = am_libmuleappcore_a_OBJECTS = libmuleappcore_a-AsyncDNS.$(OBJEXT) \ libmuleappcore_a-DeadSourceList.$(OBJEXT) \ libmuleappcore_a-FileArea.$(OBJEXT) \ libmuleappcore_a-FileAutoClose.$(OBJEXT) \ libmuleappcore_a-IPFilterScanner.$(OBJEXT) \ libmuleappcore_a-Scanner.$(OBJEXT) \ libmuleappcore_a-Parser.$(OBJEXT) \ libmuleappcore_a-PlatformSpecific.$(OBJEXT) \ libmuleappcore_a-RandomFunctions.$(OBJEXT) \ libmuleappcore_a-RC4Encrypt.$(OBJEXT) \ libmuleappcore_a-StateMachine.$(OBJEXT) \ libmuleappcore_a-TerminationProcessAmuleweb.$(OBJEXT) \ libmuleappcore_a-ThreadScheduler.$(OBJEXT) \ libmuleappcore_a-UPnPBase.$(OBJEXT) \ libmuleappcore_a-Entry.$(OBJEXT) \ libmuleappcore_a-SearchManager.$(OBJEXT) \ libmuleappcore_a-RoutingBin.$(OBJEXT) \ libmuleappcore_a-UInt128.$(OBJEXT) libmuleappcore_a_OBJECTS = $(am_libmuleappcore_a_OBJECTS) libmuleappgui_a_AR = $(AR) $(ARFLAGS) libmuleappgui_a_LIBADD = am_libmuleappgui_a_OBJECTS = libmuleappgui_a-BarShader.$(OBJEXT) \ libmuleappgui_a-ColorFrameCtrl.$(OBJEXT) \ libmuleappgui_a-EditServerListDlg.$(OBJEXT) \ libmuleappgui_a-listctrl.$(OBJEXT) \ libmuleappgui_a-FileDetailListCtrl.$(OBJEXT) \ libmuleappgui_a-IP2Country.$(OBJEXT) \ libmuleappgui_a-MuleColour.$(OBJEXT) \ libmuleappgui_a-MuleGifCtrl.$(OBJEXT) \ libmuleappgui_a-MuleListCtrl.$(OBJEXT) \ libmuleappgui_a-MuleNotebook.$(OBJEXT) \ libmuleappgui_a-MuleTextCtrl.$(OBJEXT) \ libmuleappgui_a-MuleCollection.$(OBJEXT) \ libmuleappgui_a-muuli_wdr.$(OBJEXT) libmuleappgui_a_OBJECTS = $(am_libmuleappgui_a_OBJECTS) @MONOLITHIC_TRUE@am__EXEEXT_1 = amule$(EXEEXT) @COMPILE_CMD_TRUE@am__EXEEXT_2 = amulecmd$(EXEEXT) @ED2K_TRUE@am__EXEEXT_3 = ed2k$(EXEEXT) @AMULE_GUI_TRUE@am__EXEEXT_4 = amulegui$(EXEEXT) @AMULE_DAEMON_TRUE@am__EXEEXT_5 = amuled$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__objects_1 = amule-amule.$(OBJEXT) amule-BaseClient.$(OBJEXT) \ amule-CanceledFileList.$(OBJEXT) amule-ClientList.$(OBJEXT) \ amule-ClientCreditsList.$(OBJEXT) \ amule-ClientTCPSocket.$(OBJEXT) \ amule-ClientUDPSocket.$(OBJEXT) \ amule-CorruptionBlackBox.$(OBJEXT) \ amule-DownloadClient.$(OBJEXT) amule-DownloadQueue.$(OBJEXT) \ amule-ECSpecialCoreTags.$(OBJEXT) amule-EMSocket.$(OBJEXT) \ amule-EncryptedStreamSocket.$(OBJEXT) \ amule-EncryptedDatagramSocket.$(OBJEXT) \ amule-ExternalConn.$(OBJEXT) amule-FriendList.$(OBJEXT) \ amule-IPFilter.$(OBJEXT) amule-KnownFileList.$(OBJEXT) \ amule-ListenSocket.$(OBJEXT) amule-MuleUDPSocket.$(OBJEXT) \ amule-SearchFile.$(OBJEXT) amule-SearchList.$(OBJEXT) \ amule-ServerConnect.$(OBJEXT) amule-ServerList.$(OBJEXT) \ amule-ServerSocket.$(OBJEXT) amule-ServerUDPSocket.$(OBJEXT) \ amule-SHAHashSet.$(OBJEXT) amule-SharedFileList.$(OBJEXT) \ amule-ThreadTasks.$(OBJEXT) \ amule-UploadBandwidthThrottler.$(OBJEXT) \ amule-UploadClient.$(OBJEXT) amule-UploadQueue.$(OBJEXT) \ amule-Indexed.$(OBJEXT) amule-Kademlia.$(OBJEXT) \ amule-Prefs.$(OBJEXT) amule-Search.$(OBJEXT) \ amule-UDPFirewallTester.$(OBJEXT) \ amule-KademliaUDPListener.$(OBJEXT) \ amule-PacketTracking.$(OBJEXT) amule-Contact.$(OBJEXT) \ amule-RoutingZone.$(OBJEXT) amule-AdunanzA.$(OBJEXT) \ amule-RemoteSettings.$(OBJEXT) \ amule-AdunanzAStreaming.$(OBJEXT) am__objects_2 = amule-amule-gui.$(OBJEXT) amule-amuleDlg.$(OBJEXT) \ amule-AddFriend.$(OBJEXT) amule-CatDialog.$(OBJEXT) \ amule-ChatSelector.$(OBJEXT) amule-ChatWnd.$(OBJEXT) \ amule-CommentDialog.$(OBJEXT) amule-CommentDialogLst.$(OBJEXT) \ amule-GenericClientListCtrl.$(OBJEXT) \ amule-ClientDetailDialog.$(OBJEXT) \ amule-DirectoryTreeCtrl.$(OBJEXT) \ amule-FileDetailDialog.$(OBJEXT) amule-KadDlg.$(OBJEXT) \ amule-OScopeCtrl.$(OBJEXT) amule-PrefsUnifiedDlg.$(OBJEXT) \ amule-SearchDlg.$(OBJEXT) amule-ServerWnd.$(OBJEXT) \ amule-SharedFilesWnd.$(OBJEXT) amule-StatisticsDlg.$(OBJEXT) \ amule-SearchListCtrl.$(OBJEXT) \ amule-DownloadListCtrl.$(OBJEXT) \ amule-SourceListCtrl.$(OBJEXT) \ amule-SharedFilePeersListCtrl.$(OBJEXT) \ amule-FriendListCtrl.$(OBJEXT) amule-ServerListCtrl.$(OBJEXT) \ amule-SharedFilesCtrl.$(OBJEXT) amule-MuleTrayIcon.$(OBJEXT) \ amule-TransferWnd.$(OBJEXT) am__objects_3 = amule-amuleAppCommon.$(OBJEXT) \ amule-ClientRef.$(OBJEXT) amule-DataToText.$(OBJEXT) \ amule-ECSpecialMuleTags.$(OBJEXT) amule-KnownFile.$(OBJEXT) \ amule-GetTickCount.$(OBJEXT) amule-GuiEvents.$(OBJEXT) \ amule-HTTPDownload.$(OBJEXT) amule-Logger.$(OBJEXT) \ amule-PartFile.$(OBJEXT) amule-Preferences.$(OBJEXT) \ amule-Proxy.$(OBJEXT) amule-Server.$(OBJEXT) \ amule-Statistics.$(OBJEXT) amule-StatTree.$(OBJEXT) \ amule-UserEvents.$(OBJEXT) amule-KADUSettings.$(OBJEXT) am_amule_OBJECTS = amule-CaptchaDialog.$(OBJEXT) \ amule-CaptchaGenerator.$(OBJEXT) \ amule-PartFileConvert.$(OBJEXT) \ amule-PartFileConvertDlg.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) $(am__objects_3) amule_OBJECTS = $(am_amule_OBJECTS) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) amule_LINK = $(CXXLD) $(amule_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_amulecmd_OBJECTS = amulecmd-TextClient.$(OBJEXT) \ amulecmd-ExternalConnector.$(OBJEXT) \ amulecmd-LoggerConsole.$(OBJEXT) \ amulecmd-OtherFunctions.$(OBJEXT) \ amulecmd-NetworkFunctions.$(OBJEXT) @NEED_RC_TRUE@nodist_amulecmd_OBJECTS = amulecmd-version.$(OBJEXT) amulecmd_OBJECTS = $(am_amulecmd_OBJECTS) $(nodist_amulecmd_OBJECTS) amulecmd_LINK = $(CXXLD) $(amulecmd_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am__objects_4 = amuled-amule.$(OBJEXT) amuled-BaseClient.$(OBJEXT) \ amuled-CanceledFileList.$(OBJEXT) amuled-ClientList.$(OBJEXT) \ amuled-ClientCreditsList.$(OBJEXT) \ amuled-ClientTCPSocket.$(OBJEXT) \ amuled-ClientUDPSocket.$(OBJEXT) \ amuled-CorruptionBlackBox.$(OBJEXT) \ amuled-DownloadClient.$(OBJEXT) amuled-DownloadQueue.$(OBJEXT) \ amuled-ECSpecialCoreTags.$(OBJEXT) amuled-EMSocket.$(OBJEXT) \ amuled-EncryptedStreamSocket.$(OBJEXT) \ amuled-EncryptedDatagramSocket.$(OBJEXT) \ amuled-ExternalConn.$(OBJEXT) amuled-FriendList.$(OBJEXT) \ amuled-IPFilter.$(OBJEXT) amuled-KnownFileList.$(OBJEXT) \ amuled-ListenSocket.$(OBJEXT) amuled-MuleUDPSocket.$(OBJEXT) \ amuled-SearchFile.$(OBJEXT) amuled-SearchList.$(OBJEXT) \ amuled-ServerConnect.$(OBJEXT) amuled-ServerList.$(OBJEXT) \ amuled-ServerSocket.$(OBJEXT) amuled-ServerUDPSocket.$(OBJEXT) \ amuled-SHAHashSet.$(OBJEXT) amuled-SharedFileList.$(OBJEXT) \ amuled-ThreadTasks.$(OBJEXT) \ amuled-UploadBandwidthThrottler.$(OBJEXT) \ amuled-UploadClient.$(OBJEXT) amuled-UploadQueue.$(OBJEXT) \ amuled-Indexed.$(OBJEXT) amuled-Kademlia.$(OBJEXT) \ amuled-Prefs.$(OBJEXT) amuled-Search.$(OBJEXT) \ amuled-UDPFirewallTester.$(OBJEXT) \ amuled-KademliaUDPListener.$(OBJEXT) \ amuled-PacketTracking.$(OBJEXT) amuled-Contact.$(OBJEXT) \ amuled-RoutingZone.$(OBJEXT) amuled-AdunanzA.$(OBJEXT) \ amuled-RemoteSettings.$(OBJEXT) \ amuled-AdunanzAStreaming.$(OBJEXT) am__objects_5 = amuled-amuleAppCommon.$(OBJEXT) \ amuled-ClientRef.$(OBJEXT) amuled-DataToText.$(OBJEXT) \ amuled-ECSpecialMuleTags.$(OBJEXT) amuled-KnownFile.$(OBJEXT) \ amuled-GetTickCount.$(OBJEXT) amuled-GuiEvents.$(OBJEXT) \ amuled-HTTPDownload.$(OBJEXT) amuled-Logger.$(OBJEXT) \ amuled-PartFile.$(OBJEXT) amuled-Preferences.$(OBJEXT) \ amuled-Proxy.$(OBJEXT) amuled-Server.$(OBJEXT) \ amuled-Statistics.$(OBJEXT) amuled-StatTree.$(OBJEXT) \ amuled-UserEvents.$(OBJEXT) amuled-KADUSettings.$(OBJEXT) am_amuled_OBJECTS = amuled-amuled.$(OBJEXT) $(am__objects_4) \ $(am__objects_5) @NEED_RC_TRUE@nodist_amuled_OBJECTS = amuled-version.$(OBJEXT) amuled_OBJECTS = $(am_amuled_OBJECTS) $(nodist_amuled_OBJECTS) amuled_LINK = $(CXXLD) $(amuled_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am__objects_6 = amulegui-amule-gui.$(OBJEXT) \ amulegui-amuleDlg.$(OBJEXT) amulegui-AddFriend.$(OBJEXT) \ amulegui-CatDialog.$(OBJEXT) amulegui-ChatSelector.$(OBJEXT) \ amulegui-ChatWnd.$(OBJEXT) amulegui-CommentDialog.$(OBJEXT) \ amulegui-CommentDialogLst.$(OBJEXT) \ amulegui-GenericClientListCtrl.$(OBJEXT) \ amulegui-ClientDetailDialog.$(OBJEXT) \ amulegui-DirectoryTreeCtrl.$(OBJEXT) \ amulegui-FileDetailDialog.$(OBJEXT) amulegui-KadDlg.$(OBJEXT) \ amulegui-OScopeCtrl.$(OBJEXT) \ amulegui-PrefsUnifiedDlg.$(OBJEXT) \ amulegui-SearchDlg.$(OBJEXT) amulegui-ServerWnd.$(OBJEXT) \ amulegui-SharedFilesWnd.$(OBJEXT) \ amulegui-StatisticsDlg.$(OBJEXT) \ amulegui-SearchListCtrl.$(OBJEXT) \ amulegui-DownloadListCtrl.$(OBJEXT) \ amulegui-SourceListCtrl.$(OBJEXT) \ amulegui-SharedFilePeersListCtrl.$(OBJEXT) \ amulegui-FriendListCtrl.$(OBJEXT) \ amulegui-ServerListCtrl.$(OBJEXT) \ amulegui-SharedFilesCtrl.$(OBJEXT) \ amulegui-MuleTrayIcon.$(OBJEXT) amulegui-TransferWnd.$(OBJEXT) am__objects_7 = amulegui-amuleAppCommon.$(OBJEXT) \ amulegui-ClientRef.$(OBJEXT) amulegui-DataToText.$(OBJEXT) \ amulegui-ECSpecialMuleTags.$(OBJEXT) \ amulegui-KnownFile.$(OBJEXT) amulegui-GetTickCount.$(OBJEXT) \ amulegui-GuiEvents.$(OBJEXT) amulegui-HTTPDownload.$(OBJEXT) \ amulegui-Logger.$(OBJEXT) amulegui-PartFile.$(OBJEXT) \ amulegui-Preferences.$(OBJEXT) amulegui-Proxy.$(OBJEXT) \ amulegui-Server.$(OBJEXT) amulegui-Statistics.$(OBJEXT) \ amulegui-StatTree.$(OBJEXT) amulegui-UserEvents.$(OBJEXT) \ amulegui-KADUSettings.$(OBJEXT) am_amulegui_OBJECTS = amulegui-amule-remote-gui.$(OBJEXT) \ $(am__objects_6) $(am__objects_7) amulegui_OBJECTS = $(am_amulegui_OBJECTS) amulegui_LINK = $(CXXLD) $(amulegui_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_ed2k_OBJECTS = ed2k-ED2KLinkParser.$(OBJEXT) \ ed2k-MagnetURI.$(OBJEXT) ed2k-MuleCollection.$(OBJEXT) @NEED_RC_TRUE@nodist_ed2k_OBJECTS = ed2k-version.$(OBJEXT) ed2k_OBJECTS = $(am_ed2k_OBJECTS) $(nodist_ed2k_OBJECTS) ed2k_DEPENDENCIES = ed2k_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(ed2k_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libmuleappcommon_a_SOURCES) $(libmuleappcore_a_SOURCES) \ $(libmuleappgui_a_SOURCES) $(amule_SOURCES) \ $(amulecmd_SOURCES) $(nodist_amulecmd_SOURCES) \ $(amuled_SOURCES) $(nodist_amuled_SOURCES) $(amulegui_SOURCES) \ $(ed2k_SOURCES) $(nodist_ed2k_SOURCES) DIST_SOURCES = $(libmuleappcommon_a_SOURCES) \ $(libmuleappcore_a_SOURCES) $(libmuleappgui_a_SOURCES) \ $(amule_SOURCES) $(amulecmd_SOURCES) $(amuled_SOURCES) \ $(amulegui_SOURCES) $(ed2k_SOURCES) RECURSIVE_TARGETS = all-recursive check-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 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=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = libs utils pixmaps . webserver skins 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@ ALCC_MANPAGES = @ALCC_MANPAGES@ ALC_MANPAGES = @ALC_MANPAGES@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AMULECMD_MANPAGES = @AMULECMD_MANPAGES@ AMULEWEB_DEFS = @AMULEWEB_DEFS@ AMULE_DAEMON_MANPAGES = @AMULE_DAEMON_MANPAGES@ AMULE_GUI_MANPAGES = @AMULE_GUI_MANPAGES@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_CPPFLAGS = @BFD_CPPFLAGS@ BFD_LIBS = @BFD_LIBS@ BUILD_CC = @BUILD_CC@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CAS_DEFS = @CAS_DEFS@ CAS_MANPAGES = @CAS_MANPAGES@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CRYPTOPP_CPPFLAGS = @CRYPTOPP_CPPFLAGS@ CRYPTOPP_LDFLAGS = @CRYPTOPP_LDFLAGS@ CRYPTOPP_LIBS = @CRYPTOPP_LIBS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEBUGFLAG = @DEBUGFLAG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ED2K_MANPAGES = @ED2K_MANPAGES@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDLIB_CFLAGS = @GDLIB_CFLAGS@ GDLIB_CONFIG_PATH = @GDLIB_CONFIG_PATH@ GDLIB_LDFLAGS = @GDLIB_LDFLAGS@ GDLIB_LIBS = @GDLIB_LIBS@ GENCAT = @GENCAT@ GEOIP_CPPFLAGS = @GEOIP_CPPFLAGS@ GEOIP_LDFLAGS = @GEOIP_LDFLAGS@ GEOIP_LIBS = @GEOIP_LIBS@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INCINTL = @INCINTL@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ KDE4_CONFIG = @KDE4_CONFIG@ KDE_APPLNK_PATH = @KDE_APPLNK_PATH@ KDE_HEADER_DIR = @KDE_HEADER_DIR@ KDE_ICON_PATH = @KDE_ICON_PATH@ KDE_MIME_PATH = @KDE_MIME_PATH@ KDE_MODULE_PATH = @KDE_MODULE_PATH@ KDE_SERVICE_PATH = @KDE_SERVICE_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ LIBPNG_CONFIG_PATH = @LIBPNG_CONFIG_PATH@ LIBPNG_LDFLAGS = @LIBPNG_LDFLAGS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBUPNP_CFLAGS = @LIBUPNP_CFLAGS@ LIBUPNP_CPPFLAGS = @LIBUPNP_CPPFLAGS@ LIBUPNP_LDFLAGS = @LIBUPNP_LDFLAGS@ LIBUPNP_LIBS = @LIBUPNP_LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONOLITHIC_MANPAGES = @MONOLITHIC_MANPAGES@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MULECFLAGS = @MULECFLAGS@ MULECPPFLAGS = @MULECPPFLAGS@ MULECXXFLAGS = @MULECXXFLAGS@ MULELDFLAGS = @MULELDFLAGS@ MULERCFLAGS = @MULERCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ QT_CORE_CXXFLAGS = @QT_CORE_CXXFLAGS@ QT_CORE_LIBS = @QT_CORE_LIBS@ QT_DBUS_LDFLAGS = @QT_DBUS_LDFLAGS@ QT_GUI_CXXFLAGS = @QT_GUI_CXXFLAGS@ QT_GUI_LIBS = @QT_GUI_LIBS@ QT_MOC = @QT_MOC@ RANLIB = @RANLIB@ RC = @RC@ RCFLAGS = @RCFLAGS@ READLINE_LIBS = @READLINE_LIBS@ RESOLV_LIB = @RESOLV_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SVNDATE = @SVNDATE@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBSERVER_MANPAGES = @WEBSERVER_MANPAGES@ WXBASE_CPPFLAGS = @WXBASE_CPPFLAGS@ WXBASE_LIBS = @WXBASE_LIBS@ WXCAS_MANPAGES = @WXCAS_MANPAGES@ WX_CFLAGS = @WX_CFLAGS@ WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ WX_CONFIG_PATH = @WX_CONFIG_PATH@ WX_CPPFLAGS = @WX_CPPFLAGS@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ WX_DEBUG = @WX_DEBUG@ WX_LIBS = @WX_LIBS@ WX_PORT = @WX_PORT@ WX_RESCOMP = @WX_RESCOMP@ WX_SHARED = @WX_SHARED@ WX_UNICODE = @WX_UNICODE@ WX_VERSION_FULL = @WX_VERSION_FULL@ WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ WX_VERSION_MINOR = @WX_VERSION_MINOR@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@ ZLIB_LDFLAGS = @ZLIB_LDFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_BUILD_CC = @ac_ct_BUILD_CC@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ 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@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = $(MULECPPFLAGS) $(am__append_1) $(am__append_2) # ADUNANZA END AM_CFLAGS = $(MULECFLAGS) AM_CXXFLAGS = $(MULECXXFLAGS) AM_LDFLAGS = $(MULELDFLAGS) SUBDIRS = libs utils pixmaps $(am__append_3) $(am__append_4) EXTRA_DIST = \ aMule.xpm \ Parser.y \ Scanner.h.in \ Scanner.l \ IPFilterScanner.l \ muuli.wdr # Sources noinst_LIBRARIES = $(am__append_10) $(am__append_11) $(am__append_12) # Common to core/gui/monolithic # ADUNANZA BEGIN libmuleappcommon_a_SOURCES = CFile.cpp ClientCredits.cpp ED2KLink.cpp \ Friend.cpp GapList.cpp MagnetURI.cpp MemFile.cpp \ NetworkFunctions.cpp OtherFunctions.cpp Packet.cpp RLE.cpp \ SafeFile.cpp SHA.cpp Tag.cpp TerminationProcess.cpp Timer.cpp \ FastwebNet.cpp # ADUNANZA END libmuleappcommon_a_CPPFLAGS = $(AM_CPPFLAGS) $(WXBASE_CPPFLAGS) -I$(srcdir)/libs -I$(srcdir)/include $(CRYPTOPP_CPPFLAGS) $(LIBUPNP_CPPFLAGS) # Common to core/monolithic libmuleappcore_a_SOURCES = \ AsyncDNS.cpp \ DeadSourceList.cpp \ FileArea.cpp \ FileAutoClose.cpp \ IPFilterScanner.cpp \ Scanner.cpp \ Parser.cpp \ PlatformSpecific.cpp \ RandomFunctions.cpp \ RC4Encrypt.cpp \ StateMachine.cpp \ TerminationProcessAmuleweb.cpp \ ThreadScheduler.cpp \ UPnPBase.cpp \ kademlia/kademlia/Entry.cpp \ kademlia/kademlia/SearchManager.cpp \ kademlia/routing/RoutingBin.cpp \ kademlia/utils/UInt128.cpp libmuleappcore_a_CPPFLAGS = $(AM_CPPFLAGS) $(WXBASE_CPPFLAGS) -I$(srcdir)/libs -I$(srcdir)/include $(CRYPTOPP_CPPFLAGS) $(LIBUPNP_CPPFLAGS) # Common to gui/monolithic libmuleappgui_a_SOURCES = \ BarShader.cpp \ ColorFrameCtrl.cpp \ EditServerListDlg.cpp \ extern/wxWidgets/listctrl.cpp \ FileDetailListCtrl.cpp \ IP2Country.cpp \ MuleColour.cpp \ MuleGifCtrl.cpp \ MuleListCtrl.cpp \ MuleNotebook.cpp \ MuleTextCtrl.cpp \ MuleCollection.cpp \ muuli_wdr.cpp libmuleappgui_a_CPPFLAGS = $(AM_CPPFLAGS) $(WX_CPPFLAGS) -I$(srcdir)/libs -I$(srcdir)/include $(LIBUPNP_CPPFLAGS) $(GEOIP_CPPFLAGS) # ADUNANZA BEGIN core_sources = amule.cpp BaseClient.cpp CanceledFileList.cpp \ ClientList.cpp ClientCreditsList.cpp ClientTCPSocket.cpp \ ClientUDPSocket.cpp CorruptionBlackBox.cpp DownloadClient.cpp \ DownloadQueue.cpp ECSpecialCoreTags.cpp EMSocket.cpp \ EncryptedStreamSocket.cpp EncryptedDatagramSocket.cpp \ ExternalConn.cpp FriendList.cpp IPFilter.cpp KnownFileList.cpp \ ListenSocket.cpp MuleUDPSocket.cpp SearchFile.cpp \ SearchList.cpp ServerConnect.cpp ServerList.cpp \ ServerSocket.cpp ServerUDPSocket.cpp SHAHashSet.cpp \ SharedFileList.cpp ThreadTasks.cpp \ UploadBandwidthThrottler.cpp UploadClient.cpp UploadQueue.cpp \ kademlia/kademlia/Indexed.cpp kademlia/kademlia/Kademlia.cpp \ kademlia/kademlia/Prefs.cpp kademlia/kademlia/Search.cpp \ kademlia/kademlia/UDPFirewallTester.cpp \ kademlia/net/KademliaUDPListener.cpp \ kademlia/net/PacketTracking.cpp kademlia/routing/Contact.cpp \ kademlia/routing/RoutingZone.cpp AdunanzA.cpp \ RemoteSettings.cpp AdunanzAStreaming.cpp # ADUNANZA END gui_sources = \ amule-gui.cpp \ amuleDlg.cpp \ AddFriend.cpp \ CatDialog.cpp \ ChatSelector.cpp \ ChatWnd.cpp \ CommentDialog.cpp \ CommentDialogLst.cpp \ GenericClientListCtrl.cpp \ ClientDetailDialog.cpp \ DirectoryTreeCtrl.cpp \ FileDetailDialog.cpp \ KadDlg.cpp \ OScopeCtrl.cpp \ PrefsUnifiedDlg.cpp \ SearchDlg.cpp \ ServerWnd.cpp \ SharedFilesWnd.cpp \ StatisticsDlg.cpp \ SearchListCtrl.cpp \ DownloadListCtrl.cpp \ SourceListCtrl.cpp \ SharedFilePeersListCtrl.cpp \ FriendListCtrl.cpp \ ServerListCtrl.cpp \ SharedFilesCtrl.cpp \ MuleTrayIcon.cpp \ TransferWnd.cpp # ADUNANZA BEGIN common_sources = amuleAppCommon.cpp ClientRef.cpp DataToText.cpp \ ECSpecialMuleTags.cpp KnownFile.cpp GetTickCount.cpp \ GuiEvents.cpp HTTPDownload.cpp Logger.cpp PartFile.cpp \ Preferences.cpp Proxy.cpp Server.cpp Statistics.cpp \ StatTree.cpp UserEvents.cpp KADUSettings.cpp # ADUNANZA END # Libs core_libs = -L. -lmuleappcore $(LIBUPNP_LDFLAGS) $(LIBUPNP_LIBS) \ $(am__append_13) gui_libs = -L. -lmuleappgui $(WX_LIBS) $(GEOIP_LDFLAGS) $(GEOIP_LIBS) remote_common_libs = -Llibs/common -Llibs/ec/cpp -lmulecommon -lec $(BFD_LIBS) $(ZLIB_LDFLAGS) $(ZLIB_LIBS) $(RESOLV_LIB) common_libs = -L. -lmuleappcommon $(remote_common_libs) $(CRYPTOPP_LDFLAGS) $(CRYPTOPP_LIBS) core_deps = libmuleappcore.a gui_deps = libmuleappgui.a remote_common_deps = libs/common/libmulecommon.a libs/ec/cpp/libec.a common_deps = libmuleappcommon.a $(remote_common_deps) # # Flags # core_flags = $(LIBUPNP_CPPFLAGS) $(LIBUPNP_CFLAGS) gui_flags = $(WX_CPPFLAGS) $(GEOIP_CPPFLAGS) common_flags = -I$(srcdir)/libs -Ilibs -I$(srcdir)/include $(CRYPTOPP_CPPFLAGS) # --------- Apps --------- amulegui_SOURCES = \ amule-remote-gui.cpp \ $(gui_sources) \ $(ec_sources) \ $(common_sources) amule_SOURCES = \ CaptchaDialog.cpp \ CaptchaGenerator.cpp \ PartFileConvert.cpp \ PartFileConvertDlg.cpp \ $(core_sources) \ $(gui_sources) \ $(ec_sources) \ $(common_sources) amuled_SOURCES = \ amuled.cpp \ $(core_sources) \ $(ec_sources) \ $(common_sources) amule_DEPENDENCIES = $(common_deps) $(core_deps) $(gui_deps) \ $(am__append_15) amule_CPPFLAGS = $(AM_CPPFLAGS) $(core_flags) $(gui_flags) $(common_flags) amule_CXXFLAGS = $(AM_CXXFLAGS) $(WX_CFLAGS_ONLY) $(WX_CPPFLAGS_ONLY) amule_LDADD = $(common_libs) $(core_libs) $(gui_libs) $(am__append_14) amulegui_DEPENDENCIES = $(common_deps) $(gui_deps) $(am__append_17) amulegui_CPPFLAGS = $(AM_CPPFLAGS) $(gui_flags) $(common_flags) -DCLIENT_GUI amulegui_CXXFLAGS = $(AM_CXXFLAGS) $(WX_CFLAGS_ONLY) $(WX_CXXFLAGS_ONLY) amulegui_LDADD = $(gui_libs) $(common_libs) $(WXBASE_LIBS) \ $(am__append_16) amuled_DEPENDENCIES = $(core_deps) $(common_deps) amuled_CPPFLAGS = $(AM_CPPFLAGS) $(WXBASE_CPPFLAGS) $(core_flags) $(common_flags) -DAMULE_DAEMON amuled_CXXFLAGS = $(AM_CXXFLAGS) $(WX_CFLAGS_ONLY) $(WX_CXXFLAGS_ONLY) amuled_LDADD = $(common_libs) $(core_libs) $(WXBASE_LIBS) ed2k_SOURCES = \ ED2KLinkParser.cpp \ MagnetURI.cpp \ MuleCollection.cpp ed2k_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_STD_STRING # on Win32 @SYS_WIN32_TRUE@ed2k_LDADD = -lshlwapi # on Mac @NEED_CORESERVICES_TRUE@ed2k_LDFLAGS = $(AM_LDFLAGS) -framework CoreServices amulecmd_SOURCES = \ TextClient.cpp \ ExternalConnector.cpp \ LoggerConsole.cpp \ OtherFunctions.cpp \ NetworkFunctions.cpp amulecmd_DEPENDENCIES = $(remote_common_deps) amulecmd_CPPFLAGS = $(AM_CPPFLAGS) $(WXBASE_CPPFLAGS) $(common_flags) amulecmd_CXXFLAGS = $(AM_CXXFLAGS) $(WX_CFLAGS_ONLY) $(WX_CXXFLAGS_ONLY) #amulecmd_LDADD = $(WXBASE_LIBS) $(READLINE_LIBS) $(remote_common_libs) amulecmd_LDADD = -Llibs/common -Llibs/ec/cpp -lmulecommon -lec \ $(WXBASE_LIBS) $(READLINE_LIBS) $(BFD_LIBS) $(ZLIB_LDFLAGS) $(ZLIB_LIBS) $(RESOLV_LIB) noinst_HEADERS = \ AddFriend.h \ AdunanzA.h \ AdunanzAStreaming.h \ AsyncDNS.h \ amule-remote-gui.h \ amuleDlg.h \ amule.h \ amuleIPV4Address.h \ ArchSpecific.h \ BarShader.h \ BitVector.h \ CanceledFileList.h \ CaptchaDialog.h \ CaptchaGenerator.h \ CatDialog.h \ CFile.h \ ChatSelector.h \ ChatWnd.h \ ClientCredits.h \ ClientCreditsList.h \ ClientDetailDialog.h \ SharedFilePeersListCtrl.h \ ClientList.h \ ClientRef.h \ ClientTCPSocket.h \ ClientUDPSocket.h \ ColorFrameCtrl.h \ CommentDialog.h \ CommentDialogLst.h \ Constants.h \ CorruptionBlackBox.h \ CryptoPP_Inc.h \ DataToText.h \ DeadSourceList.h \ DirectoryTreeCtrl.h \ DownloadListCtrl.h \ DownloadQueue.h \ ED2KLink.h \ EditServerListDlg.h \ EMSocket.h \ EncryptedDatagramSocket.h \ EncryptedStreamSocket.h \ ExternalConnector.h \ ExternalConn.h \ FastwebNet.h \ FileArea.h \ FileAutoClose.h \ FileDetailDialog.h \ FileDetailListCtrl.h \ FileLock.h \ Friend.h \ FriendListCtrl.h \ FriendList.h \ GapList.h \ GetTickCount.h \ GenericClientListCtrl.h \ GuiEvents.h \ HTTPDownload.h \ inetdownload.h \ InternalEvents.h \ IP2Country.h \ IPFilter.h \ IPFilterScanner.h \ KadDlg.h \ KnownFile.h \ KnownFileList.h \ KADUSettings.h \ ListenSocket.h \ Logger.h \ MagnetURI.h \ MD4Hash.h \ MemFile.h \ MuleCollection.h \ MuleColour.h \ MuleGifCtrl.h \ MuleListCtrl.h \ MuleNotebook.h \ MuleTextCtrl.h \ MuleThread.h \ MuleTrayIcon.h \ MuleUDPSocket.h \ muuli_wdr.h \ NetworkFunctions.h \ OScopeCtrl.h \ Observable.h \ ObservableQueue.h \ OtherFunctions.h \ OtherStructs.h \ Packet.h \ Parser.hpp \ PartFileConvert.h \ PartFileConvertDlg.h \ PartFile.h \ PlatformSpecific.h \ Preferences.h \ PrefsUnifiedDlg.h \ Proxy.h \ RangeMap.h \ RemoteSettings.h \ RC4Encrypt.h \ RLE.h \ RandomFunctions.h \ SafeFile.h \ Scanner.h \ ScopedPtr.h \ SearchDlg.h \ SearchExpr.h \ SearchFile.h \ SearchListCtrl.h \ SearchList.h \ ServerConnect.h \ Server.h \ ServerListCtrl.h \ ServerList.h \ ServerSocket.h \ ServerUDPSocket.h \ ServerWnd.h \ SHA.h \ SHAHashSet.h \ SharedFileList.h \ SharedFilesCtrl.h \ SharedFilesWnd.h \ SourceListCtrl.h \ StateMachine.h \ StatisticsDlg.h \ Statistics.h \ StatTree.h \ Tag.h \ TerminationProcess.h \ TerminationProcessAmuleweb.h \ TextClient.h \ ThreadScheduler.h \ ThreadTasks.h \ ThrottledSocket.h \ Timer.h \ TransferWnd.h \ Types.h \ updownclient.h \ UpDownClientEC.h \ UploadBandwidthThrottler.h \ UploadQueue.h \ UPnPBase.h \ UPnPCompatibility.h \ UserEvents.h \ extern/wxWidgets/listctrl.h MAINTAINERCLEANFILES = Makefile.in # Resources @NEED_RC_TRUE@SUFFIXES = .rc @NEED_RC_TRUE@nodist_amuled_SOURCES = amuled-version.rc @NEED_RC_TRUE@nodist_amulecmd_SOURCES = amulecmd-version.rc @NEED_RC_TRUE@nodist_ed2k_SOURCES = ed2k-version.rc @NEED_RC_TRUE@CLEANFILES = *-version.rc EXTRA__DIST__SUBDIRS = include kademlia all: all-recursive .SUFFIXES: .SUFFIXES: .rc .$(OBJEXT) .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/automake/dist-hook.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile .PRECIOUS: 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/automake/dist-hook.am: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libmuleappcommon.a: $(libmuleappcommon_a_OBJECTS) $(libmuleappcommon_a_DEPENDENCIES) $(EXTRA_libmuleappcommon_a_DEPENDENCIES) $(AM_V_at)-rm -f libmuleappcommon.a $(AM_V_AR)$(libmuleappcommon_a_AR) libmuleappcommon.a $(libmuleappcommon_a_OBJECTS) $(libmuleappcommon_a_LIBADD) $(AM_V_at)$(RANLIB) libmuleappcommon.a libmuleappcore.a: $(libmuleappcore_a_OBJECTS) $(libmuleappcore_a_DEPENDENCIES) $(EXTRA_libmuleappcore_a_DEPENDENCIES) $(AM_V_at)-rm -f libmuleappcore.a $(AM_V_AR)$(libmuleappcore_a_AR) libmuleappcore.a $(libmuleappcore_a_OBJECTS) $(libmuleappcore_a_LIBADD) $(AM_V_at)$(RANLIB) libmuleappcore.a libmuleappgui.a: $(libmuleappgui_a_OBJECTS) $(libmuleappgui_a_DEPENDENCIES) $(EXTRA_libmuleappgui_a_DEPENDENCIES) $(AM_V_at)-rm -f libmuleappgui.a $(AM_V_AR)$(libmuleappgui_a_AR) libmuleappgui.a $(libmuleappgui_a_OBJECTS) $(libmuleappgui_a_LIBADD) $(AM_V_at)$(RANLIB) libmuleappgui.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) amule$(EXEEXT): $(amule_OBJECTS) $(amule_DEPENDENCIES) $(EXTRA_amule_DEPENDENCIES) @rm -f amule$(EXEEXT) $(AM_V_CXXLD)$(amule_LINK) $(amule_OBJECTS) $(amule_LDADD) $(LIBS) amulecmd$(EXEEXT): $(amulecmd_OBJECTS) $(amulecmd_DEPENDENCIES) $(EXTRA_amulecmd_DEPENDENCIES) @rm -f amulecmd$(EXEEXT) $(AM_V_CXXLD)$(amulecmd_LINK) $(amulecmd_OBJECTS) $(amulecmd_LDADD) $(LIBS) amuled$(EXEEXT): $(amuled_OBJECTS) $(amuled_DEPENDENCIES) $(EXTRA_amuled_DEPENDENCIES) @rm -f amuled$(EXEEXT) $(AM_V_CXXLD)$(amuled_LINK) $(amuled_OBJECTS) $(amuled_LDADD) $(LIBS) amulegui$(EXEEXT): $(amulegui_OBJECTS) $(amulegui_DEPENDENCIES) $(EXTRA_amulegui_DEPENDENCIES) @rm -f amulegui$(EXEEXT) $(AM_V_CXXLD)$(amulegui_LINK) $(amulegui_OBJECTS) $(amulegui_LDADD) $(LIBS) ed2k$(EXEEXT): $(ed2k_OBJECTS) $(ed2k_DEPENDENCIES) $(EXTRA_ed2k_DEPENDENCIES) @rm -f ed2k$(EXEEXT) $(AM_V_CXXLD)$(ed2k_LINK) $(ed2k_OBJECTS) $(ed2k_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-AddFriend.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-AdunanzA.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-AdunanzAStreaming.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-BaseClient.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-CanceledFileList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-CaptchaDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-CaptchaGenerator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-CatDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ChatSelector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ChatWnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ClientCreditsList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ClientDetailDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ClientList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ClientRef.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ClientTCPSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ClientUDPSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-CommentDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-CommentDialogLst.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-Contact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-CorruptionBlackBox.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-DataToText.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-DirectoryTreeCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-DownloadClient.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-DownloadListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-DownloadQueue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ECSpecialCoreTags.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ECSpecialMuleTags.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-EMSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-EncryptedDatagramSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-EncryptedStreamSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ExternalConn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-FileDetailDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-FriendList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-FriendListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-GenericClientListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-GetTickCount.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-GuiEvents.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-HTTPDownload.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-IPFilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-Indexed.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-KADUSettings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-KadDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-Kademlia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-KademliaUDPListener.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-KnownFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-KnownFileList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ListenSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-Logger.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-MuleTrayIcon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-MuleUDPSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-OScopeCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-PacketTracking.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-PartFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-PartFileConvert.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-PartFileConvertDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-Preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-Prefs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-PrefsUnifiedDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-Proxy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-RemoteSettings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-RoutingZone.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-SHAHashSet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-Search.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-SearchDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-SearchFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-SearchList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-SearchListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-Server.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ServerConnect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ServerList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ServerListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ServerSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ServerUDPSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ServerWnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-SharedFileList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-SharedFilePeersListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-SharedFilesCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-SharedFilesWnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-SourceListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-StatTree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-Statistics.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-StatisticsDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-ThreadTasks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-TransferWnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-UDPFirewallTester.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-UploadBandwidthThrottler.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-UploadClient.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-UploadQueue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-UserEvents.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-amule-gui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-amule.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-amuleAppCommon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amule-amuleDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulecmd-ExternalConnector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulecmd-LoggerConsole.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulecmd-NetworkFunctions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulecmd-OtherFunctions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulecmd-TextClient.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-AdunanzA.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-AdunanzAStreaming.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-BaseClient.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-CanceledFileList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ClientCreditsList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ClientList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ClientRef.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ClientTCPSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ClientUDPSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-Contact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-CorruptionBlackBox.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-DataToText.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-DownloadClient.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-DownloadQueue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ECSpecialCoreTags.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ECSpecialMuleTags.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-EMSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-EncryptedDatagramSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-EncryptedStreamSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ExternalConn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-FriendList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-GetTickCount.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-GuiEvents.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-HTTPDownload.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-IPFilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-Indexed.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-KADUSettings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-Kademlia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-KademliaUDPListener.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-KnownFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-KnownFileList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ListenSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-Logger.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-MuleUDPSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-PacketTracking.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-PartFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-Preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-Prefs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-Proxy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-RemoteSettings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-RoutingZone.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-SHAHashSet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-Search.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-SearchFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-SearchList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-Server.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ServerConnect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ServerList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ServerSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ServerUDPSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-SharedFileList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-StatTree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-Statistics.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-ThreadTasks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-UDPFirewallTester.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-UploadBandwidthThrottler.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-UploadClient.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-UploadQueue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-UserEvents.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-amule.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-amuleAppCommon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuled-amuled.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-AddFriend.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-CatDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-ChatSelector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-ChatWnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-ClientDetailDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-ClientRef.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-CommentDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-CommentDialogLst.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-DataToText.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-DirectoryTreeCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-DownloadListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-ECSpecialMuleTags.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-FileDetailDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-FriendListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-GenericClientListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-GetTickCount.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-GuiEvents.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-HTTPDownload.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-KADUSettings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-KadDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-KnownFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-Logger.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-MuleTrayIcon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-OScopeCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-PartFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-Preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-PrefsUnifiedDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-Proxy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-SearchDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-SearchListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-Server.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-ServerListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-ServerWnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-SharedFilePeersListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-SharedFilesCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-SharedFilesWnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-SourceListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-StatTree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-Statistics.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-StatisticsDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-TransferWnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-UserEvents.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-amule-gui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-amule-remote-gui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-amuleAppCommon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amulegui-amuleDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ed2k-ED2KLinkParser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ed2k-MagnetURI.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ed2k-MuleCollection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-CFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-ClientCredits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-ED2KLink.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-FastwebNet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-Friend.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-GapList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-MagnetURI.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-MemFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-NetworkFunctions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-OtherFunctions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-Packet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-RLE.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-SHA.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-SafeFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-Tag.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-TerminationProcess.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcommon_a-Timer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-AsyncDNS.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-DeadSourceList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-Entry.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-FileArea.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-FileAutoClose.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-IPFilterScanner.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-Parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-PlatformSpecific.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-RC4Encrypt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-RandomFunctions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-RoutingBin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-Scanner.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-SearchManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-StateMachine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-TerminationProcessAmuleweb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-ThreadScheduler.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-UInt128.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappcore_a-UPnPBase.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-BarShader.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-ColorFrameCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-EditServerListDlg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-FileDetailListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-IP2Country.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-MuleCollection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-MuleColour.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-MuleGifCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-MuleListCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-MuleNotebook.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-MuleTextCtrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-listctrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmuleappgui_a-muuli_wdr.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libmuleappcommon_a-CFile.o: CFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-CFile.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-CFile.Tpo -c -o libmuleappcommon_a-CFile.o `test -f 'CFile.cpp' || echo '$(srcdir)/'`CFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-CFile.Tpo $(DEPDIR)/libmuleappcommon_a-CFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CFile.cpp' object='libmuleappcommon_a-CFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-CFile.o `test -f 'CFile.cpp' || echo '$(srcdir)/'`CFile.cpp libmuleappcommon_a-CFile.obj: CFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-CFile.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-CFile.Tpo -c -o libmuleappcommon_a-CFile.obj `if test -f 'CFile.cpp'; then $(CYGPATH_W) 'CFile.cpp'; else $(CYGPATH_W) '$(srcdir)/CFile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-CFile.Tpo $(DEPDIR)/libmuleappcommon_a-CFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CFile.cpp' object='libmuleappcommon_a-CFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-CFile.obj `if test -f 'CFile.cpp'; then $(CYGPATH_W) 'CFile.cpp'; else $(CYGPATH_W) '$(srcdir)/CFile.cpp'; fi` libmuleappcommon_a-ClientCredits.o: ClientCredits.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-ClientCredits.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-ClientCredits.Tpo -c -o libmuleappcommon_a-ClientCredits.o `test -f 'ClientCredits.cpp' || echo '$(srcdir)/'`ClientCredits.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-ClientCredits.Tpo $(DEPDIR)/libmuleappcommon_a-ClientCredits.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientCredits.cpp' object='libmuleappcommon_a-ClientCredits.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-ClientCredits.o `test -f 'ClientCredits.cpp' || echo '$(srcdir)/'`ClientCredits.cpp libmuleappcommon_a-ClientCredits.obj: ClientCredits.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-ClientCredits.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-ClientCredits.Tpo -c -o libmuleappcommon_a-ClientCredits.obj `if test -f 'ClientCredits.cpp'; then $(CYGPATH_W) 'ClientCredits.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientCredits.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-ClientCredits.Tpo $(DEPDIR)/libmuleappcommon_a-ClientCredits.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientCredits.cpp' object='libmuleappcommon_a-ClientCredits.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-ClientCredits.obj `if test -f 'ClientCredits.cpp'; then $(CYGPATH_W) 'ClientCredits.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientCredits.cpp'; fi` libmuleappcommon_a-ED2KLink.o: ED2KLink.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-ED2KLink.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-ED2KLink.Tpo -c -o libmuleappcommon_a-ED2KLink.o `test -f 'ED2KLink.cpp' || echo '$(srcdir)/'`ED2KLink.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-ED2KLink.Tpo $(DEPDIR)/libmuleappcommon_a-ED2KLink.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ED2KLink.cpp' object='libmuleappcommon_a-ED2KLink.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-ED2KLink.o `test -f 'ED2KLink.cpp' || echo '$(srcdir)/'`ED2KLink.cpp libmuleappcommon_a-ED2KLink.obj: ED2KLink.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-ED2KLink.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-ED2KLink.Tpo -c -o libmuleappcommon_a-ED2KLink.obj `if test -f 'ED2KLink.cpp'; then $(CYGPATH_W) 'ED2KLink.cpp'; else $(CYGPATH_W) '$(srcdir)/ED2KLink.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-ED2KLink.Tpo $(DEPDIR)/libmuleappcommon_a-ED2KLink.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ED2KLink.cpp' object='libmuleappcommon_a-ED2KLink.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-ED2KLink.obj `if test -f 'ED2KLink.cpp'; then $(CYGPATH_W) 'ED2KLink.cpp'; else $(CYGPATH_W) '$(srcdir)/ED2KLink.cpp'; fi` libmuleappcommon_a-Friend.o: Friend.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-Friend.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-Friend.Tpo -c -o libmuleappcommon_a-Friend.o `test -f 'Friend.cpp' || echo '$(srcdir)/'`Friend.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-Friend.Tpo $(DEPDIR)/libmuleappcommon_a-Friend.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Friend.cpp' object='libmuleappcommon_a-Friend.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-Friend.o `test -f 'Friend.cpp' || echo '$(srcdir)/'`Friend.cpp libmuleappcommon_a-Friend.obj: Friend.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-Friend.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-Friend.Tpo -c -o libmuleappcommon_a-Friend.obj `if test -f 'Friend.cpp'; then $(CYGPATH_W) 'Friend.cpp'; else $(CYGPATH_W) '$(srcdir)/Friend.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-Friend.Tpo $(DEPDIR)/libmuleappcommon_a-Friend.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Friend.cpp' object='libmuleappcommon_a-Friend.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-Friend.obj `if test -f 'Friend.cpp'; then $(CYGPATH_W) 'Friend.cpp'; else $(CYGPATH_W) '$(srcdir)/Friend.cpp'; fi` libmuleappcommon_a-GapList.o: GapList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-GapList.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-GapList.Tpo -c -o libmuleappcommon_a-GapList.o `test -f 'GapList.cpp' || echo '$(srcdir)/'`GapList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-GapList.Tpo $(DEPDIR)/libmuleappcommon_a-GapList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GapList.cpp' object='libmuleappcommon_a-GapList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-GapList.o `test -f 'GapList.cpp' || echo '$(srcdir)/'`GapList.cpp libmuleappcommon_a-GapList.obj: GapList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-GapList.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-GapList.Tpo -c -o libmuleappcommon_a-GapList.obj `if test -f 'GapList.cpp'; then $(CYGPATH_W) 'GapList.cpp'; else $(CYGPATH_W) '$(srcdir)/GapList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-GapList.Tpo $(DEPDIR)/libmuleappcommon_a-GapList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GapList.cpp' object='libmuleappcommon_a-GapList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-GapList.obj `if test -f 'GapList.cpp'; then $(CYGPATH_W) 'GapList.cpp'; else $(CYGPATH_W) '$(srcdir)/GapList.cpp'; fi` libmuleappcommon_a-MagnetURI.o: MagnetURI.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-MagnetURI.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-MagnetURI.Tpo -c -o libmuleappcommon_a-MagnetURI.o `test -f 'MagnetURI.cpp' || echo '$(srcdir)/'`MagnetURI.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-MagnetURI.Tpo $(DEPDIR)/libmuleappcommon_a-MagnetURI.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MagnetURI.cpp' object='libmuleappcommon_a-MagnetURI.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-MagnetURI.o `test -f 'MagnetURI.cpp' || echo '$(srcdir)/'`MagnetURI.cpp libmuleappcommon_a-MagnetURI.obj: MagnetURI.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-MagnetURI.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-MagnetURI.Tpo -c -o libmuleappcommon_a-MagnetURI.obj `if test -f 'MagnetURI.cpp'; then $(CYGPATH_W) 'MagnetURI.cpp'; else $(CYGPATH_W) '$(srcdir)/MagnetURI.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-MagnetURI.Tpo $(DEPDIR)/libmuleappcommon_a-MagnetURI.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MagnetURI.cpp' object='libmuleappcommon_a-MagnetURI.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-MagnetURI.obj `if test -f 'MagnetURI.cpp'; then $(CYGPATH_W) 'MagnetURI.cpp'; else $(CYGPATH_W) '$(srcdir)/MagnetURI.cpp'; fi` libmuleappcommon_a-MemFile.o: MemFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-MemFile.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-MemFile.Tpo -c -o libmuleappcommon_a-MemFile.o `test -f 'MemFile.cpp' || echo '$(srcdir)/'`MemFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-MemFile.Tpo $(DEPDIR)/libmuleappcommon_a-MemFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MemFile.cpp' object='libmuleappcommon_a-MemFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-MemFile.o `test -f 'MemFile.cpp' || echo '$(srcdir)/'`MemFile.cpp libmuleappcommon_a-MemFile.obj: MemFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-MemFile.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-MemFile.Tpo -c -o libmuleappcommon_a-MemFile.obj `if test -f 'MemFile.cpp'; then $(CYGPATH_W) 'MemFile.cpp'; else $(CYGPATH_W) '$(srcdir)/MemFile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-MemFile.Tpo $(DEPDIR)/libmuleappcommon_a-MemFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MemFile.cpp' object='libmuleappcommon_a-MemFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-MemFile.obj `if test -f 'MemFile.cpp'; then $(CYGPATH_W) 'MemFile.cpp'; else $(CYGPATH_W) '$(srcdir)/MemFile.cpp'; fi` libmuleappcommon_a-NetworkFunctions.o: NetworkFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-NetworkFunctions.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-NetworkFunctions.Tpo -c -o libmuleappcommon_a-NetworkFunctions.o `test -f 'NetworkFunctions.cpp' || echo '$(srcdir)/'`NetworkFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-NetworkFunctions.Tpo $(DEPDIR)/libmuleappcommon_a-NetworkFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='NetworkFunctions.cpp' object='libmuleappcommon_a-NetworkFunctions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-NetworkFunctions.o `test -f 'NetworkFunctions.cpp' || echo '$(srcdir)/'`NetworkFunctions.cpp libmuleappcommon_a-NetworkFunctions.obj: NetworkFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-NetworkFunctions.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-NetworkFunctions.Tpo -c -o libmuleappcommon_a-NetworkFunctions.obj `if test -f 'NetworkFunctions.cpp'; then $(CYGPATH_W) 'NetworkFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/NetworkFunctions.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-NetworkFunctions.Tpo $(DEPDIR)/libmuleappcommon_a-NetworkFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='NetworkFunctions.cpp' object='libmuleappcommon_a-NetworkFunctions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-NetworkFunctions.obj `if test -f 'NetworkFunctions.cpp'; then $(CYGPATH_W) 'NetworkFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/NetworkFunctions.cpp'; fi` libmuleappcommon_a-OtherFunctions.o: OtherFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-OtherFunctions.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-OtherFunctions.Tpo -c -o libmuleappcommon_a-OtherFunctions.o `test -f 'OtherFunctions.cpp' || echo '$(srcdir)/'`OtherFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-OtherFunctions.Tpo $(DEPDIR)/libmuleappcommon_a-OtherFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OtherFunctions.cpp' object='libmuleappcommon_a-OtherFunctions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-OtherFunctions.o `test -f 'OtherFunctions.cpp' || echo '$(srcdir)/'`OtherFunctions.cpp libmuleappcommon_a-OtherFunctions.obj: OtherFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-OtherFunctions.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-OtherFunctions.Tpo -c -o libmuleappcommon_a-OtherFunctions.obj `if test -f 'OtherFunctions.cpp'; then $(CYGPATH_W) 'OtherFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/OtherFunctions.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-OtherFunctions.Tpo $(DEPDIR)/libmuleappcommon_a-OtherFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OtherFunctions.cpp' object='libmuleappcommon_a-OtherFunctions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-OtherFunctions.obj `if test -f 'OtherFunctions.cpp'; then $(CYGPATH_W) 'OtherFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/OtherFunctions.cpp'; fi` libmuleappcommon_a-Packet.o: Packet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-Packet.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-Packet.Tpo -c -o libmuleappcommon_a-Packet.o `test -f 'Packet.cpp' || echo '$(srcdir)/'`Packet.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-Packet.Tpo $(DEPDIR)/libmuleappcommon_a-Packet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Packet.cpp' object='libmuleappcommon_a-Packet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-Packet.o `test -f 'Packet.cpp' || echo '$(srcdir)/'`Packet.cpp libmuleappcommon_a-Packet.obj: Packet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-Packet.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-Packet.Tpo -c -o libmuleappcommon_a-Packet.obj `if test -f 'Packet.cpp'; then $(CYGPATH_W) 'Packet.cpp'; else $(CYGPATH_W) '$(srcdir)/Packet.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-Packet.Tpo $(DEPDIR)/libmuleappcommon_a-Packet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Packet.cpp' object='libmuleappcommon_a-Packet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-Packet.obj `if test -f 'Packet.cpp'; then $(CYGPATH_W) 'Packet.cpp'; else $(CYGPATH_W) '$(srcdir)/Packet.cpp'; fi` libmuleappcommon_a-RLE.o: RLE.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-RLE.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-RLE.Tpo -c -o libmuleappcommon_a-RLE.o `test -f 'RLE.cpp' || echo '$(srcdir)/'`RLE.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-RLE.Tpo $(DEPDIR)/libmuleappcommon_a-RLE.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RLE.cpp' object='libmuleappcommon_a-RLE.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-RLE.o `test -f 'RLE.cpp' || echo '$(srcdir)/'`RLE.cpp libmuleappcommon_a-RLE.obj: RLE.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-RLE.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-RLE.Tpo -c -o libmuleappcommon_a-RLE.obj `if test -f 'RLE.cpp'; then $(CYGPATH_W) 'RLE.cpp'; else $(CYGPATH_W) '$(srcdir)/RLE.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-RLE.Tpo $(DEPDIR)/libmuleappcommon_a-RLE.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RLE.cpp' object='libmuleappcommon_a-RLE.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-RLE.obj `if test -f 'RLE.cpp'; then $(CYGPATH_W) 'RLE.cpp'; else $(CYGPATH_W) '$(srcdir)/RLE.cpp'; fi` libmuleappcommon_a-SafeFile.o: SafeFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-SafeFile.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-SafeFile.Tpo -c -o libmuleappcommon_a-SafeFile.o `test -f 'SafeFile.cpp' || echo '$(srcdir)/'`SafeFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-SafeFile.Tpo $(DEPDIR)/libmuleappcommon_a-SafeFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SafeFile.cpp' object='libmuleappcommon_a-SafeFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-SafeFile.o `test -f 'SafeFile.cpp' || echo '$(srcdir)/'`SafeFile.cpp libmuleappcommon_a-SafeFile.obj: SafeFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-SafeFile.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-SafeFile.Tpo -c -o libmuleappcommon_a-SafeFile.obj `if test -f 'SafeFile.cpp'; then $(CYGPATH_W) 'SafeFile.cpp'; else $(CYGPATH_W) '$(srcdir)/SafeFile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-SafeFile.Tpo $(DEPDIR)/libmuleappcommon_a-SafeFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SafeFile.cpp' object='libmuleappcommon_a-SafeFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-SafeFile.obj `if test -f 'SafeFile.cpp'; then $(CYGPATH_W) 'SafeFile.cpp'; else $(CYGPATH_W) '$(srcdir)/SafeFile.cpp'; fi` libmuleappcommon_a-SHA.o: SHA.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-SHA.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-SHA.Tpo -c -o libmuleappcommon_a-SHA.o `test -f 'SHA.cpp' || echo '$(srcdir)/'`SHA.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-SHA.Tpo $(DEPDIR)/libmuleappcommon_a-SHA.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SHA.cpp' object='libmuleappcommon_a-SHA.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-SHA.o `test -f 'SHA.cpp' || echo '$(srcdir)/'`SHA.cpp libmuleappcommon_a-SHA.obj: SHA.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-SHA.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-SHA.Tpo -c -o libmuleappcommon_a-SHA.obj `if test -f 'SHA.cpp'; then $(CYGPATH_W) 'SHA.cpp'; else $(CYGPATH_W) '$(srcdir)/SHA.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-SHA.Tpo $(DEPDIR)/libmuleappcommon_a-SHA.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SHA.cpp' object='libmuleappcommon_a-SHA.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-SHA.obj `if test -f 'SHA.cpp'; then $(CYGPATH_W) 'SHA.cpp'; else $(CYGPATH_W) '$(srcdir)/SHA.cpp'; fi` libmuleappcommon_a-Tag.o: Tag.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-Tag.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-Tag.Tpo -c -o libmuleappcommon_a-Tag.o `test -f 'Tag.cpp' || echo '$(srcdir)/'`Tag.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-Tag.Tpo $(DEPDIR)/libmuleappcommon_a-Tag.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Tag.cpp' object='libmuleappcommon_a-Tag.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-Tag.o `test -f 'Tag.cpp' || echo '$(srcdir)/'`Tag.cpp libmuleappcommon_a-Tag.obj: Tag.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-Tag.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-Tag.Tpo -c -o libmuleappcommon_a-Tag.obj `if test -f 'Tag.cpp'; then $(CYGPATH_W) 'Tag.cpp'; else $(CYGPATH_W) '$(srcdir)/Tag.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-Tag.Tpo $(DEPDIR)/libmuleappcommon_a-Tag.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Tag.cpp' object='libmuleappcommon_a-Tag.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-Tag.obj `if test -f 'Tag.cpp'; then $(CYGPATH_W) 'Tag.cpp'; else $(CYGPATH_W) '$(srcdir)/Tag.cpp'; fi` libmuleappcommon_a-TerminationProcess.o: TerminationProcess.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-TerminationProcess.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-TerminationProcess.Tpo -c -o libmuleappcommon_a-TerminationProcess.o `test -f 'TerminationProcess.cpp' || echo '$(srcdir)/'`TerminationProcess.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-TerminationProcess.Tpo $(DEPDIR)/libmuleappcommon_a-TerminationProcess.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TerminationProcess.cpp' object='libmuleappcommon_a-TerminationProcess.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-TerminationProcess.o `test -f 'TerminationProcess.cpp' || echo '$(srcdir)/'`TerminationProcess.cpp libmuleappcommon_a-TerminationProcess.obj: TerminationProcess.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-TerminationProcess.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-TerminationProcess.Tpo -c -o libmuleappcommon_a-TerminationProcess.obj `if test -f 'TerminationProcess.cpp'; then $(CYGPATH_W) 'TerminationProcess.cpp'; else $(CYGPATH_W) '$(srcdir)/TerminationProcess.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-TerminationProcess.Tpo $(DEPDIR)/libmuleappcommon_a-TerminationProcess.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TerminationProcess.cpp' object='libmuleappcommon_a-TerminationProcess.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-TerminationProcess.obj `if test -f 'TerminationProcess.cpp'; then $(CYGPATH_W) 'TerminationProcess.cpp'; else $(CYGPATH_W) '$(srcdir)/TerminationProcess.cpp'; fi` libmuleappcommon_a-Timer.o: Timer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-Timer.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-Timer.Tpo -c -o libmuleappcommon_a-Timer.o `test -f 'Timer.cpp' || echo '$(srcdir)/'`Timer.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-Timer.Tpo $(DEPDIR)/libmuleappcommon_a-Timer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Timer.cpp' object='libmuleappcommon_a-Timer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-Timer.o `test -f 'Timer.cpp' || echo '$(srcdir)/'`Timer.cpp libmuleappcommon_a-Timer.obj: Timer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-Timer.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-Timer.Tpo -c -o libmuleappcommon_a-Timer.obj `if test -f 'Timer.cpp'; then $(CYGPATH_W) 'Timer.cpp'; else $(CYGPATH_W) '$(srcdir)/Timer.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-Timer.Tpo $(DEPDIR)/libmuleappcommon_a-Timer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Timer.cpp' object='libmuleappcommon_a-Timer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-Timer.obj `if test -f 'Timer.cpp'; then $(CYGPATH_W) 'Timer.cpp'; else $(CYGPATH_W) '$(srcdir)/Timer.cpp'; fi` libmuleappcommon_a-FastwebNet.o: FastwebNet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-FastwebNet.o -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-FastwebNet.Tpo -c -o libmuleappcommon_a-FastwebNet.o `test -f 'FastwebNet.cpp' || echo '$(srcdir)/'`FastwebNet.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-FastwebNet.Tpo $(DEPDIR)/libmuleappcommon_a-FastwebNet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FastwebNet.cpp' object='libmuleappcommon_a-FastwebNet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-FastwebNet.o `test -f 'FastwebNet.cpp' || echo '$(srcdir)/'`FastwebNet.cpp libmuleappcommon_a-FastwebNet.obj: FastwebNet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcommon_a-FastwebNet.obj -MD -MP -MF $(DEPDIR)/libmuleappcommon_a-FastwebNet.Tpo -c -o libmuleappcommon_a-FastwebNet.obj `if test -f 'FastwebNet.cpp'; then $(CYGPATH_W) 'FastwebNet.cpp'; else $(CYGPATH_W) '$(srcdir)/FastwebNet.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcommon_a-FastwebNet.Tpo $(DEPDIR)/libmuleappcommon_a-FastwebNet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FastwebNet.cpp' object='libmuleappcommon_a-FastwebNet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcommon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcommon_a-FastwebNet.obj `if test -f 'FastwebNet.cpp'; then $(CYGPATH_W) 'FastwebNet.cpp'; else $(CYGPATH_W) '$(srcdir)/FastwebNet.cpp'; fi` libmuleappcore_a-AsyncDNS.o: AsyncDNS.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-AsyncDNS.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-AsyncDNS.Tpo -c -o libmuleappcore_a-AsyncDNS.o `test -f 'AsyncDNS.cpp' || echo '$(srcdir)/'`AsyncDNS.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-AsyncDNS.Tpo $(DEPDIR)/libmuleappcore_a-AsyncDNS.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AsyncDNS.cpp' object='libmuleappcore_a-AsyncDNS.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-AsyncDNS.o `test -f 'AsyncDNS.cpp' || echo '$(srcdir)/'`AsyncDNS.cpp libmuleappcore_a-AsyncDNS.obj: AsyncDNS.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-AsyncDNS.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-AsyncDNS.Tpo -c -o libmuleappcore_a-AsyncDNS.obj `if test -f 'AsyncDNS.cpp'; then $(CYGPATH_W) 'AsyncDNS.cpp'; else $(CYGPATH_W) '$(srcdir)/AsyncDNS.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-AsyncDNS.Tpo $(DEPDIR)/libmuleappcore_a-AsyncDNS.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AsyncDNS.cpp' object='libmuleappcore_a-AsyncDNS.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-AsyncDNS.obj `if test -f 'AsyncDNS.cpp'; then $(CYGPATH_W) 'AsyncDNS.cpp'; else $(CYGPATH_W) '$(srcdir)/AsyncDNS.cpp'; fi` libmuleappcore_a-DeadSourceList.o: DeadSourceList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-DeadSourceList.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-DeadSourceList.Tpo -c -o libmuleappcore_a-DeadSourceList.o `test -f 'DeadSourceList.cpp' || echo '$(srcdir)/'`DeadSourceList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-DeadSourceList.Tpo $(DEPDIR)/libmuleappcore_a-DeadSourceList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DeadSourceList.cpp' object='libmuleappcore_a-DeadSourceList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-DeadSourceList.o `test -f 'DeadSourceList.cpp' || echo '$(srcdir)/'`DeadSourceList.cpp libmuleappcore_a-DeadSourceList.obj: DeadSourceList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-DeadSourceList.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-DeadSourceList.Tpo -c -o libmuleappcore_a-DeadSourceList.obj `if test -f 'DeadSourceList.cpp'; then $(CYGPATH_W) 'DeadSourceList.cpp'; else $(CYGPATH_W) '$(srcdir)/DeadSourceList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-DeadSourceList.Tpo $(DEPDIR)/libmuleappcore_a-DeadSourceList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DeadSourceList.cpp' object='libmuleappcore_a-DeadSourceList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-DeadSourceList.obj `if test -f 'DeadSourceList.cpp'; then $(CYGPATH_W) 'DeadSourceList.cpp'; else $(CYGPATH_W) '$(srcdir)/DeadSourceList.cpp'; fi` libmuleappcore_a-FileArea.o: FileArea.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-FileArea.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-FileArea.Tpo -c -o libmuleappcore_a-FileArea.o `test -f 'FileArea.cpp' || echo '$(srcdir)/'`FileArea.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-FileArea.Tpo $(DEPDIR)/libmuleappcore_a-FileArea.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FileArea.cpp' object='libmuleappcore_a-FileArea.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-FileArea.o `test -f 'FileArea.cpp' || echo '$(srcdir)/'`FileArea.cpp libmuleappcore_a-FileArea.obj: FileArea.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-FileArea.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-FileArea.Tpo -c -o libmuleappcore_a-FileArea.obj `if test -f 'FileArea.cpp'; then $(CYGPATH_W) 'FileArea.cpp'; else $(CYGPATH_W) '$(srcdir)/FileArea.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-FileArea.Tpo $(DEPDIR)/libmuleappcore_a-FileArea.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FileArea.cpp' object='libmuleappcore_a-FileArea.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-FileArea.obj `if test -f 'FileArea.cpp'; then $(CYGPATH_W) 'FileArea.cpp'; else $(CYGPATH_W) '$(srcdir)/FileArea.cpp'; fi` libmuleappcore_a-FileAutoClose.o: FileAutoClose.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-FileAutoClose.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-FileAutoClose.Tpo -c -o libmuleappcore_a-FileAutoClose.o `test -f 'FileAutoClose.cpp' || echo '$(srcdir)/'`FileAutoClose.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-FileAutoClose.Tpo $(DEPDIR)/libmuleappcore_a-FileAutoClose.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FileAutoClose.cpp' object='libmuleappcore_a-FileAutoClose.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-FileAutoClose.o `test -f 'FileAutoClose.cpp' || echo '$(srcdir)/'`FileAutoClose.cpp libmuleappcore_a-FileAutoClose.obj: FileAutoClose.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-FileAutoClose.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-FileAutoClose.Tpo -c -o libmuleappcore_a-FileAutoClose.obj `if test -f 'FileAutoClose.cpp'; then $(CYGPATH_W) 'FileAutoClose.cpp'; else $(CYGPATH_W) '$(srcdir)/FileAutoClose.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-FileAutoClose.Tpo $(DEPDIR)/libmuleappcore_a-FileAutoClose.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FileAutoClose.cpp' object='libmuleappcore_a-FileAutoClose.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-FileAutoClose.obj `if test -f 'FileAutoClose.cpp'; then $(CYGPATH_W) 'FileAutoClose.cpp'; else $(CYGPATH_W) '$(srcdir)/FileAutoClose.cpp'; fi` libmuleappcore_a-IPFilterScanner.o: IPFilterScanner.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-IPFilterScanner.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-IPFilterScanner.Tpo -c -o libmuleappcore_a-IPFilterScanner.o `test -f 'IPFilterScanner.cpp' || echo '$(srcdir)/'`IPFilterScanner.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-IPFilterScanner.Tpo $(DEPDIR)/libmuleappcore_a-IPFilterScanner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='IPFilterScanner.cpp' object='libmuleappcore_a-IPFilterScanner.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-IPFilterScanner.o `test -f 'IPFilterScanner.cpp' || echo '$(srcdir)/'`IPFilterScanner.cpp libmuleappcore_a-IPFilterScanner.obj: IPFilterScanner.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-IPFilterScanner.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-IPFilterScanner.Tpo -c -o libmuleappcore_a-IPFilterScanner.obj `if test -f 'IPFilterScanner.cpp'; then $(CYGPATH_W) 'IPFilterScanner.cpp'; else $(CYGPATH_W) '$(srcdir)/IPFilterScanner.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-IPFilterScanner.Tpo $(DEPDIR)/libmuleappcore_a-IPFilterScanner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='IPFilterScanner.cpp' object='libmuleappcore_a-IPFilterScanner.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-IPFilterScanner.obj `if test -f 'IPFilterScanner.cpp'; then $(CYGPATH_W) 'IPFilterScanner.cpp'; else $(CYGPATH_W) '$(srcdir)/IPFilterScanner.cpp'; fi` libmuleappcore_a-Scanner.o: Scanner.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-Scanner.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-Scanner.Tpo -c -o libmuleappcore_a-Scanner.o `test -f 'Scanner.cpp' || echo '$(srcdir)/'`Scanner.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-Scanner.Tpo $(DEPDIR)/libmuleappcore_a-Scanner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Scanner.cpp' object='libmuleappcore_a-Scanner.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-Scanner.o `test -f 'Scanner.cpp' || echo '$(srcdir)/'`Scanner.cpp libmuleappcore_a-Scanner.obj: Scanner.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-Scanner.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-Scanner.Tpo -c -o libmuleappcore_a-Scanner.obj `if test -f 'Scanner.cpp'; then $(CYGPATH_W) 'Scanner.cpp'; else $(CYGPATH_W) '$(srcdir)/Scanner.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-Scanner.Tpo $(DEPDIR)/libmuleappcore_a-Scanner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Scanner.cpp' object='libmuleappcore_a-Scanner.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-Scanner.obj `if test -f 'Scanner.cpp'; then $(CYGPATH_W) 'Scanner.cpp'; else $(CYGPATH_W) '$(srcdir)/Scanner.cpp'; fi` libmuleappcore_a-Parser.o: Parser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-Parser.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-Parser.Tpo -c -o libmuleappcore_a-Parser.o `test -f 'Parser.cpp' || echo '$(srcdir)/'`Parser.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-Parser.Tpo $(DEPDIR)/libmuleappcore_a-Parser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Parser.cpp' object='libmuleappcore_a-Parser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-Parser.o `test -f 'Parser.cpp' || echo '$(srcdir)/'`Parser.cpp libmuleappcore_a-Parser.obj: Parser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-Parser.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-Parser.Tpo -c -o libmuleappcore_a-Parser.obj `if test -f 'Parser.cpp'; then $(CYGPATH_W) 'Parser.cpp'; else $(CYGPATH_W) '$(srcdir)/Parser.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-Parser.Tpo $(DEPDIR)/libmuleappcore_a-Parser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Parser.cpp' object='libmuleappcore_a-Parser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-Parser.obj `if test -f 'Parser.cpp'; then $(CYGPATH_W) 'Parser.cpp'; else $(CYGPATH_W) '$(srcdir)/Parser.cpp'; fi` libmuleappcore_a-PlatformSpecific.o: PlatformSpecific.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-PlatformSpecific.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-PlatformSpecific.Tpo -c -o libmuleappcore_a-PlatformSpecific.o `test -f 'PlatformSpecific.cpp' || echo '$(srcdir)/'`PlatformSpecific.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-PlatformSpecific.Tpo $(DEPDIR)/libmuleappcore_a-PlatformSpecific.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PlatformSpecific.cpp' object='libmuleappcore_a-PlatformSpecific.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-PlatformSpecific.o `test -f 'PlatformSpecific.cpp' || echo '$(srcdir)/'`PlatformSpecific.cpp libmuleappcore_a-PlatformSpecific.obj: PlatformSpecific.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-PlatformSpecific.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-PlatformSpecific.Tpo -c -o libmuleappcore_a-PlatformSpecific.obj `if test -f 'PlatformSpecific.cpp'; then $(CYGPATH_W) 'PlatformSpecific.cpp'; else $(CYGPATH_W) '$(srcdir)/PlatformSpecific.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-PlatformSpecific.Tpo $(DEPDIR)/libmuleappcore_a-PlatformSpecific.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PlatformSpecific.cpp' object='libmuleappcore_a-PlatformSpecific.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-PlatformSpecific.obj `if test -f 'PlatformSpecific.cpp'; then $(CYGPATH_W) 'PlatformSpecific.cpp'; else $(CYGPATH_W) '$(srcdir)/PlatformSpecific.cpp'; fi` libmuleappcore_a-RandomFunctions.o: RandomFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-RandomFunctions.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-RandomFunctions.Tpo -c -o libmuleappcore_a-RandomFunctions.o `test -f 'RandomFunctions.cpp' || echo '$(srcdir)/'`RandomFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-RandomFunctions.Tpo $(DEPDIR)/libmuleappcore_a-RandomFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RandomFunctions.cpp' object='libmuleappcore_a-RandomFunctions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-RandomFunctions.o `test -f 'RandomFunctions.cpp' || echo '$(srcdir)/'`RandomFunctions.cpp libmuleappcore_a-RandomFunctions.obj: RandomFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-RandomFunctions.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-RandomFunctions.Tpo -c -o libmuleappcore_a-RandomFunctions.obj `if test -f 'RandomFunctions.cpp'; then $(CYGPATH_W) 'RandomFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/RandomFunctions.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-RandomFunctions.Tpo $(DEPDIR)/libmuleappcore_a-RandomFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RandomFunctions.cpp' object='libmuleappcore_a-RandomFunctions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-RandomFunctions.obj `if test -f 'RandomFunctions.cpp'; then $(CYGPATH_W) 'RandomFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/RandomFunctions.cpp'; fi` libmuleappcore_a-RC4Encrypt.o: RC4Encrypt.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-RC4Encrypt.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-RC4Encrypt.Tpo -c -o libmuleappcore_a-RC4Encrypt.o `test -f 'RC4Encrypt.cpp' || echo '$(srcdir)/'`RC4Encrypt.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-RC4Encrypt.Tpo $(DEPDIR)/libmuleappcore_a-RC4Encrypt.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RC4Encrypt.cpp' object='libmuleappcore_a-RC4Encrypt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-RC4Encrypt.o `test -f 'RC4Encrypt.cpp' || echo '$(srcdir)/'`RC4Encrypt.cpp libmuleappcore_a-RC4Encrypt.obj: RC4Encrypt.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-RC4Encrypt.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-RC4Encrypt.Tpo -c -o libmuleappcore_a-RC4Encrypt.obj `if test -f 'RC4Encrypt.cpp'; then $(CYGPATH_W) 'RC4Encrypt.cpp'; else $(CYGPATH_W) '$(srcdir)/RC4Encrypt.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-RC4Encrypt.Tpo $(DEPDIR)/libmuleappcore_a-RC4Encrypt.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RC4Encrypt.cpp' object='libmuleappcore_a-RC4Encrypt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-RC4Encrypt.obj `if test -f 'RC4Encrypt.cpp'; then $(CYGPATH_W) 'RC4Encrypt.cpp'; else $(CYGPATH_W) '$(srcdir)/RC4Encrypt.cpp'; fi` libmuleappcore_a-StateMachine.o: StateMachine.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-StateMachine.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-StateMachine.Tpo -c -o libmuleappcore_a-StateMachine.o `test -f 'StateMachine.cpp' || echo '$(srcdir)/'`StateMachine.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-StateMachine.Tpo $(DEPDIR)/libmuleappcore_a-StateMachine.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StateMachine.cpp' object='libmuleappcore_a-StateMachine.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-StateMachine.o `test -f 'StateMachine.cpp' || echo '$(srcdir)/'`StateMachine.cpp libmuleappcore_a-StateMachine.obj: StateMachine.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-StateMachine.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-StateMachine.Tpo -c -o libmuleappcore_a-StateMachine.obj `if test -f 'StateMachine.cpp'; then $(CYGPATH_W) 'StateMachine.cpp'; else $(CYGPATH_W) '$(srcdir)/StateMachine.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-StateMachine.Tpo $(DEPDIR)/libmuleappcore_a-StateMachine.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StateMachine.cpp' object='libmuleappcore_a-StateMachine.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-StateMachine.obj `if test -f 'StateMachine.cpp'; then $(CYGPATH_W) 'StateMachine.cpp'; else $(CYGPATH_W) '$(srcdir)/StateMachine.cpp'; fi` libmuleappcore_a-TerminationProcessAmuleweb.o: TerminationProcessAmuleweb.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-TerminationProcessAmuleweb.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-TerminationProcessAmuleweb.Tpo -c -o libmuleappcore_a-TerminationProcessAmuleweb.o `test -f 'TerminationProcessAmuleweb.cpp' || echo '$(srcdir)/'`TerminationProcessAmuleweb.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-TerminationProcessAmuleweb.Tpo $(DEPDIR)/libmuleappcore_a-TerminationProcessAmuleweb.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TerminationProcessAmuleweb.cpp' object='libmuleappcore_a-TerminationProcessAmuleweb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-TerminationProcessAmuleweb.o `test -f 'TerminationProcessAmuleweb.cpp' || echo '$(srcdir)/'`TerminationProcessAmuleweb.cpp libmuleappcore_a-TerminationProcessAmuleweb.obj: TerminationProcessAmuleweb.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-TerminationProcessAmuleweb.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-TerminationProcessAmuleweb.Tpo -c -o libmuleappcore_a-TerminationProcessAmuleweb.obj `if test -f 'TerminationProcessAmuleweb.cpp'; then $(CYGPATH_W) 'TerminationProcessAmuleweb.cpp'; else $(CYGPATH_W) '$(srcdir)/TerminationProcessAmuleweb.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-TerminationProcessAmuleweb.Tpo $(DEPDIR)/libmuleappcore_a-TerminationProcessAmuleweb.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TerminationProcessAmuleweb.cpp' object='libmuleappcore_a-TerminationProcessAmuleweb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-TerminationProcessAmuleweb.obj `if test -f 'TerminationProcessAmuleweb.cpp'; then $(CYGPATH_W) 'TerminationProcessAmuleweb.cpp'; else $(CYGPATH_W) '$(srcdir)/TerminationProcessAmuleweb.cpp'; fi` libmuleappcore_a-ThreadScheduler.o: ThreadScheduler.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-ThreadScheduler.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-ThreadScheduler.Tpo -c -o libmuleappcore_a-ThreadScheduler.o `test -f 'ThreadScheduler.cpp' || echo '$(srcdir)/'`ThreadScheduler.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-ThreadScheduler.Tpo $(DEPDIR)/libmuleappcore_a-ThreadScheduler.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ThreadScheduler.cpp' object='libmuleappcore_a-ThreadScheduler.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-ThreadScheduler.o `test -f 'ThreadScheduler.cpp' || echo '$(srcdir)/'`ThreadScheduler.cpp libmuleappcore_a-ThreadScheduler.obj: ThreadScheduler.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-ThreadScheduler.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-ThreadScheduler.Tpo -c -o libmuleappcore_a-ThreadScheduler.obj `if test -f 'ThreadScheduler.cpp'; then $(CYGPATH_W) 'ThreadScheduler.cpp'; else $(CYGPATH_W) '$(srcdir)/ThreadScheduler.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-ThreadScheduler.Tpo $(DEPDIR)/libmuleappcore_a-ThreadScheduler.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ThreadScheduler.cpp' object='libmuleappcore_a-ThreadScheduler.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-ThreadScheduler.obj `if test -f 'ThreadScheduler.cpp'; then $(CYGPATH_W) 'ThreadScheduler.cpp'; else $(CYGPATH_W) '$(srcdir)/ThreadScheduler.cpp'; fi` libmuleappcore_a-UPnPBase.o: UPnPBase.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-UPnPBase.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-UPnPBase.Tpo -c -o libmuleappcore_a-UPnPBase.o `test -f 'UPnPBase.cpp' || echo '$(srcdir)/'`UPnPBase.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-UPnPBase.Tpo $(DEPDIR)/libmuleappcore_a-UPnPBase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UPnPBase.cpp' object='libmuleappcore_a-UPnPBase.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-UPnPBase.o `test -f 'UPnPBase.cpp' || echo '$(srcdir)/'`UPnPBase.cpp libmuleappcore_a-UPnPBase.obj: UPnPBase.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-UPnPBase.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-UPnPBase.Tpo -c -o libmuleappcore_a-UPnPBase.obj `if test -f 'UPnPBase.cpp'; then $(CYGPATH_W) 'UPnPBase.cpp'; else $(CYGPATH_W) '$(srcdir)/UPnPBase.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-UPnPBase.Tpo $(DEPDIR)/libmuleappcore_a-UPnPBase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UPnPBase.cpp' object='libmuleappcore_a-UPnPBase.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-UPnPBase.obj `if test -f 'UPnPBase.cpp'; then $(CYGPATH_W) 'UPnPBase.cpp'; else $(CYGPATH_W) '$(srcdir)/UPnPBase.cpp'; fi` libmuleappcore_a-Entry.o: kademlia/kademlia/Entry.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-Entry.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-Entry.Tpo -c -o libmuleappcore_a-Entry.o `test -f 'kademlia/kademlia/Entry.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Entry.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-Entry.Tpo $(DEPDIR)/libmuleappcore_a-Entry.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Entry.cpp' object='libmuleappcore_a-Entry.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-Entry.o `test -f 'kademlia/kademlia/Entry.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Entry.cpp libmuleappcore_a-Entry.obj: kademlia/kademlia/Entry.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-Entry.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-Entry.Tpo -c -o libmuleappcore_a-Entry.obj `if test -f 'kademlia/kademlia/Entry.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Entry.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Entry.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-Entry.Tpo $(DEPDIR)/libmuleappcore_a-Entry.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Entry.cpp' object='libmuleappcore_a-Entry.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-Entry.obj `if test -f 'kademlia/kademlia/Entry.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Entry.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Entry.cpp'; fi` libmuleappcore_a-SearchManager.o: kademlia/kademlia/SearchManager.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-SearchManager.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-SearchManager.Tpo -c -o libmuleappcore_a-SearchManager.o `test -f 'kademlia/kademlia/SearchManager.cpp' || echo '$(srcdir)/'`kademlia/kademlia/SearchManager.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-SearchManager.Tpo $(DEPDIR)/libmuleappcore_a-SearchManager.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/SearchManager.cpp' object='libmuleappcore_a-SearchManager.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-SearchManager.o `test -f 'kademlia/kademlia/SearchManager.cpp' || echo '$(srcdir)/'`kademlia/kademlia/SearchManager.cpp libmuleappcore_a-SearchManager.obj: kademlia/kademlia/SearchManager.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-SearchManager.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-SearchManager.Tpo -c -o libmuleappcore_a-SearchManager.obj `if test -f 'kademlia/kademlia/SearchManager.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/SearchManager.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/SearchManager.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-SearchManager.Tpo $(DEPDIR)/libmuleappcore_a-SearchManager.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/SearchManager.cpp' object='libmuleappcore_a-SearchManager.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-SearchManager.obj `if test -f 'kademlia/kademlia/SearchManager.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/SearchManager.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/SearchManager.cpp'; fi` libmuleappcore_a-RoutingBin.o: kademlia/routing/RoutingBin.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-RoutingBin.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-RoutingBin.Tpo -c -o libmuleappcore_a-RoutingBin.o `test -f 'kademlia/routing/RoutingBin.cpp' || echo '$(srcdir)/'`kademlia/routing/RoutingBin.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-RoutingBin.Tpo $(DEPDIR)/libmuleappcore_a-RoutingBin.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/routing/RoutingBin.cpp' object='libmuleappcore_a-RoutingBin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-RoutingBin.o `test -f 'kademlia/routing/RoutingBin.cpp' || echo '$(srcdir)/'`kademlia/routing/RoutingBin.cpp libmuleappcore_a-RoutingBin.obj: kademlia/routing/RoutingBin.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-RoutingBin.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-RoutingBin.Tpo -c -o libmuleappcore_a-RoutingBin.obj `if test -f 'kademlia/routing/RoutingBin.cpp'; then $(CYGPATH_W) 'kademlia/routing/RoutingBin.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/routing/RoutingBin.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-RoutingBin.Tpo $(DEPDIR)/libmuleappcore_a-RoutingBin.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/routing/RoutingBin.cpp' object='libmuleappcore_a-RoutingBin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-RoutingBin.obj `if test -f 'kademlia/routing/RoutingBin.cpp'; then $(CYGPATH_W) 'kademlia/routing/RoutingBin.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/routing/RoutingBin.cpp'; fi` libmuleappcore_a-UInt128.o: kademlia/utils/UInt128.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-UInt128.o -MD -MP -MF $(DEPDIR)/libmuleappcore_a-UInt128.Tpo -c -o libmuleappcore_a-UInt128.o `test -f 'kademlia/utils/UInt128.cpp' || echo '$(srcdir)/'`kademlia/utils/UInt128.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-UInt128.Tpo $(DEPDIR)/libmuleappcore_a-UInt128.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/utils/UInt128.cpp' object='libmuleappcore_a-UInt128.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-UInt128.o `test -f 'kademlia/utils/UInt128.cpp' || echo '$(srcdir)/'`kademlia/utils/UInt128.cpp libmuleappcore_a-UInt128.obj: kademlia/utils/UInt128.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappcore_a-UInt128.obj -MD -MP -MF $(DEPDIR)/libmuleappcore_a-UInt128.Tpo -c -o libmuleappcore_a-UInt128.obj `if test -f 'kademlia/utils/UInt128.cpp'; then $(CYGPATH_W) 'kademlia/utils/UInt128.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/utils/UInt128.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappcore_a-UInt128.Tpo $(DEPDIR)/libmuleappcore_a-UInt128.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/utils/UInt128.cpp' object='libmuleappcore_a-UInt128.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappcore_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappcore_a-UInt128.obj `if test -f 'kademlia/utils/UInt128.cpp'; then $(CYGPATH_W) 'kademlia/utils/UInt128.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/utils/UInt128.cpp'; fi` libmuleappgui_a-BarShader.o: BarShader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-BarShader.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-BarShader.Tpo -c -o libmuleappgui_a-BarShader.o `test -f 'BarShader.cpp' || echo '$(srcdir)/'`BarShader.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-BarShader.Tpo $(DEPDIR)/libmuleappgui_a-BarShader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BarShader.cpp' object='libmuleappgui_a-BarShader.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-BarShader.o `test -f 'BarShader.cpp' || echo '$(srcdir)/'`BarShader.cpp libmuleappgui_a-BarShader.obj: BarShader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-BarShader.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-BarShader.Tpo -c -o libmuleappgui_a-BarShader.obj `if test -f 'BarShader.cpp'; then $(CYGPATH_W) 'BarShader.cpp'; else $(CYGPATH_W) '$(srcdir)/BarShader.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-BarShader.Tpo $(DEPDIR)/libmuleappgui_a-BarShader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BarShader.cpp' object='libmuleappgui_a-BarShader.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-BarShader.obj `if test -f 'BarShader.cpp'; then $(CYGPATH_W) 'BarShader.cpp'; else $(CYGPATH_W) '$(srcdir)/BarShader.cpp'; fi` libmuleappgui_a-ColorFrameCtrl.o: ColorFrameCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-ColorFrameCtrl.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-ColorFrameCtrl.Tpo -c -o libmuleappgui_a-ColorFrameCtrl.o `test -f 'ColorFrameCtrl.cpp' || echo '$(srcdir)/'`ColorFrameCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-ColorFrameCtrl.Tpo $(DEPDIR)/libmuleappgui_a-ColorFrameCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ColorFrameCtrl.cpp' object='libmuleappgui_a-ColorFrameCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-ColorFrameCtrl.o `test -f 'ColorFrameCtrl.cpp' || echo '$(srcdir)/'`ColorFrameCtrl.cpp libmuleappgui_a-ColorFrameCtrl.obj: ColorFrameCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-ColorFrameCtrl.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-ColorFrameCtrl.Tpo -c -o libmuleappgui_a-ColorFrameCtrl.obj `if test -f 'ColorFrameCtrl.cpp'; then $(CYGPATH_W) 'ColorFrameCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/ColorFrameCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-ColorFrameCtrl.Tpo $(DEPDIR)/libmuleappgui_a-ColorFrameCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ColorFrameCtrl.cpp' object='libmuleappgui_a-ColorFrameCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-ColorFrameCtrl.obj `if test -f 'ColorFrameCtrl.cpp'; then $(CYGPATH_W) 'ColorFrameCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/ColorFrameCtrl.cpp'; fi` libmuleappgui_a-EditServerListDlg.o: EditServerListDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-EditServerListDlg.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-EditServerListDlg.Tpo -c -o libmuleappgui_a-EditServerListDlg.o `test -f 'EditServerListDlg.cpp' || echo '$(srcdir)/'`EditServerListDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-EditServerListDlg.Tpo $(DEPDIR)/libmuleappgui_a-EditServerListDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EditServerListDlg.cpp' object='libmuleappgui_a-EditServerListDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-EditServerListDlg.o `test -f 'EditServerListDlg.cpp' || echo '$(srcdir)/'`EditServerListDlg.cpp libmuleappgui_a-EditServerListDlg.obj: EditServerListDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-EditServerListDlg.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-EditServerListDlg.Tpo -c -o libmuleappgui_a-EditServerListDlg.obj `if test -f 'EditServerListDlg.cpp'; then $(CYGPATH_W) 'EditServerListDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/EditServerListDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-EditServerListDlg.Tpo $(DEPDIR)/libmuleappgui_a-EditServerListDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EditServerListDlg.cpp' object='libmuleappgui_a-EditServerListDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-EditServerListDlg.obj `if test -f 'EditServerListDlg.cpp'; then $(CYGPATH_W) 'EditServerListDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/EditServerListDlg.cpp'; fi` libmuleappgui_a-listctrl.o: extern/wxWidgets/listctrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-listctrl.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-listctrl.Tpo -c -o libmuleappgui_a-listctrl.o `test -f 'extern/wxWidgets/listctrl.cpp' || echo '$(srcdir)/'`extern/wxWidgets/listctrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-listctrl.Tpo $(DEPDIR)/libmuleappgui_a-listctrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='extern/wxWidgets/listctrl.cpp' object='libmuleappgui_a-listctrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-listctrl.o `test -f 'extern/wxWidgets/listctrl.cpp' || echo '$(srcdir)/'`extern/wxWidgets/listctrl.cpp libmuleappgui_a-listctrl.obj: extern/wxWidgets/listctrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-listctrl.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-listctrl.Tpo -c -o libmuleappgui_a-listctrl.obj `if test -f 'extern/wxWidgets/listctrl.cpp'; then $(CYGPATH_W) 'extern/wxWidgets/listctrl.cpp'; else $(CYGPATH_W) '$(srcdir)/extern/wxWidgets/listctrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-listctrl.Tpo $(DEPDIR)/libmuleappgui_a-listctrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='extern/wxWidgets/listctrl.cpp' object='libmuleappgui_a-listctrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-listctrl.obj `if test -f 'extern/wxWidgets/listctrl.cpp'; then $(CYGPATH_W) 'extern/wxWidgets/listctrl.cpp'; else $(CYGPATH_W) '$(srcdir)/extern/wxWidgets/listctrl.cpp'; fi` libmuleappgui_a-FileDetailListCtrl.o: FileDetailListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-FileDetailListCtrl.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-FileDetailListCtrl.Tpo -c -o libmuleappgui_a-FileDetailListCtrl.o `test -f 'FileDetailListCtrl.cpp' || echo '$(srcdir)/'`FileDetailListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-FileDetailListCtrl.Tpo $(DEPDIR)/libmuleappgui_a-FileDetailListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FileDetailListCtrl.cpp' object='libmuleappgui_a-FileDetailListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-FileDetailListCtrl.o `test -f 'FileDetailListCtrl.cpp' || echo '$(srcdir)/'`FileDetailListCtrl.cpp libmuleappgui_a-FileDetailListCtrl.obj: FileDetailListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-FileDetailListCtrl.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-FileDetailListCtrl.Tpo -c -o libmuleappgui_a-FileDetailListCtrl.obj `if test -f 'FileDetailListCtrl.cpp'; then $(CYGPATH_W) 'FileDetailListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/FileDetailListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-FileDetailListCtrl.Tpo $(DEPDIR)/libmuleappgui_a-FileDetailListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FileDetailListCtrl.cpp' object='libmuleappgui_a-FileDetailListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-FileDetailListCtrl.obj `if test -f 'FileDetailListCtrl.cpp'; then $(CYGPATH_W) 'FileDetailListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/FileDetailListCtrl.cpp'; fi` libmuleappgui_a-IP2Country.o: IP2Country.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-IP2Country.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-IP2Country.Tpo -c -o libmuleappgui_a-IP2Country.o `test -f 'IP2Country.cpp' || echo '$(srcdir)/'`IP2Country.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-IP2Country.Tpo $(DEPDIR)/libmuleappgui_a-IP2Country.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='IP2Country.cpp' object='libmuleappgui_a-IP2Country.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-IP2Country.o `test -f 'IP2Country.cpp' || echo '$(srcdir)/'`IP2Country.cpp libmuleappgui_a-IP2Country.obj: IP2Country.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-IP2Country.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-IP2Country.Tpo -c -o libmuleappgui_a-IP2Country.obj `if test -f 'IP2Country.cpp'; then $(CYGPATH_W) 'IP2Country.cpp'; else $(CYGPATH_W) '$(srcdir)/IP2Country.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-IP2Country.Tpo $(DEPDIR)/libmuleappgui_a-IP2Country.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='IP2Country.cpp' object='libmuleappgui_a-IP2Country.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-IP2Country.obj `if test -f 'IP2Country.cpp'; then $(CYGPATH_W) 'IP2Country.cpp'; else $(CYGPATH_W) '$(srcdir)/IP2Country.cpp'; fi` libmuleappgui_a-MuleColour.o: MuleColour.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleColour.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleColour.Tpo -c -o libmuleappgui_a-MuleColour.o `test -f 'MuleColour.cpp' || echo '$(srcdir)/'`MuleColour.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleColour.Tpo $(DEPDIR)/libmuleappgui_a-MuleColour.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleColour.cpp' object='libmuleappgui_a-MuleColour.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleColour.o `test -f 'MuleColour.cpp' || echo '$(srcdir)/'`MuleColour.cpp libmuleappgui_a-MuleColour.obj: MuleColour.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleColour.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleColour.Tpo -c -o libmuleappgui_a-MuleColour.obj `if test -f 'MuleColour.cpp'; then $(CYGPATH_W) 'MuleColour.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleColour.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleColour.Tpo $(DEPDIR)/libmuleappgui_a-MuleColour.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleColour.cpp' object='libmuleappgui_a-MuleColour.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleColour.obj `if test -f 'MuleColour.cpp'; then $(CYGPATH_W) 'MuleColour.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleColour.cpp'; fi` libmuleappgui_a-MuleGifCtrl.o: MuleGifCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleGifCtrl.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleGifCtrl.Tpo -c -o libmuleappgui_a-MuleGifCtrl.o `test -f 'MuleGifCtrl.cpp' || echo '$(srcdir)/'`MuleGifCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleGifCtrl.Tpo $(DEPDIR)/libmuleappgui_a-MuleGifCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleGifCtrl.cpp' object='libmuleappgui_a-MuleGifCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleGifCtrl.o `test -f 'MuleGifCtrl.cpp' || echo '$(srcdir)/'`MuleGifCtrl.cpp libmuleappgui_a-MuleGifCtrl.obj: MuleGifCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleGifCtrl.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleGifCtrl.Tpo -c -o libmuleappgui_a-MuleGifCtrl.obj `if test -f 'MuleGifCtrl.cpp'; then $(CYGPATH_W) 'MuleGifCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleGifCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleGifCtrl.Tpo $(DEPDIR)/libmuleappgui_a-MuleGifCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleGifCtrl.cpp' object='libmuleappgui_a-MuleGifCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleGifCtrl.obj `if test -f 'MuleGifCtrl.cpp'; then $(CYGPATH_W) 'MuleGifCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleGifCtrl.cpp'; fi` libmuleappgui_a-MuleListCtrl.o: MuleListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleListCtrl.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleListCtrl.Tpo -c -o libmuleappgui_a-MuleListCtrl.o `test -f 'MuleListCtrl.cpp' || echo '$(srcdir)/'`MuleListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleListCtrl.Tpo $(DEPDIR)/libmuleappgui_a-MuleListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleListCtrl.cpp' object='libmuleappgui_a-MuleListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleListCtrl.o `test -f 'MuleListCtrl.cpp' || echo '$(srcdir)/'`MuleListCtrl.cpp libmuleappgui_a-MuleListCtrl.obj: MuleListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleListCtrl.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleListCtrl.Tpo -c -o libmuleappgui_a-MuleListCtrl.obj `if test -f 'MuleListCtrl.cpp'; then $(CYGPATH_W) 'MuleListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleListCtrl.Tpo $(DEPDIR)/libmuleappgui_a-MuleListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleListCtrl.cpp' object='libmuleappgui_a-MuleListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleListCtrl.obj `if test -f 'MuleListCtrl.cpp'; then $(CYGPATH_W) 'MuleListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleListCtrl.cpp'; fi` libmuleappgui_a-MuleNotebook.o: MuleNotebook.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleNotebook.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleNotebook.Tpo -c -o libmuleappgui_a-MuleNotebook.o `test -f 'MuleNotebook.cpp' || echo '$(srcdir)/'`MuleNotebook.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleNotebook.Tpo $(DEPDIR)/libmuleappgui_a-MuleNotebook.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleNotebook.cpp' object='libmuleappgui_a-MuleNotebook.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleNotebook.o `test -f 'MuleNotebook.cpp' || echo '$(srcdir)/'`MuleNotebook.cpp libmuleappgui_a-MuleNotebook.obj: MuleNotebook.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleNotebook.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleNotebook.Tpo -c -o libmuleappgui_a-MuleNotebook.obj `if test -f 'MuleNotebook.cpp'; then $(CYGPATH_W) 'MuleNotebook.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleNotebook.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleNotebook.Tpo $(DEPDIR)/libmuleappgui_a-MuleNotebook.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleNotebook.cpp' object='libmuleappgui_a-MuleNotebook.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleNotebook.obj `if test -f 'MuleNotebook.cpp'; then $(CYGPATH_W) 'MuleNotebook.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleNotebook.cpp'; fi` libmuleappgui_a-MuleTextCtrl.o: MuleTextCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleTextCtrl.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleTextCtrl.Tpo -c -o libmuleappgui_a-MuleTextCtrl.o `test -f 'MuleTextCtrl.cpp' || echo '$(srcdir)/'`MuleTextCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleTextCtrl.Tpo $(DEPDIR)/libmuleappgui_a-MuleTextCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleTextCtrl.cpp' object='libmuleappgui_a-MuleTextCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleTextCtrl.o `test -f 'MuleTextCtrl.cpp' || echo '$(srcdir)/'`MuleTextCtrl.cpp libmuleappgui_a-MuleTextCtrl.obj: MuleTextCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleTextCtrl.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleTextCtrl.Tpo -c -o libmuleappgui_a-MuleTextCtrl.obj `if test -f 'MuleTextCtrl.cpp'; then $(CYGPATH_W) 'MuleTextCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleTextCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleTextCtrl.Tpo $(DEPDIR)/libmuleappgui_a-MuleTextCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleTextCtrl.cpp' object='libmuleappgui_a-MuleTextCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleTextCtrl.obj `if test -f 'MuleTextCtrl.cpp'; then $(CYGPATH_W) 'MuleTextCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleTextCtrl.cpp'; fi` libmuleappgui_a-MuleCollection.o: MuleCollection.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleCollection.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleCollection.Tpo -c -o libmuleappgui_a-MuleCollection.o `test -f 'MuleCollection.cpp' || echo '$(srcdir)/'`MuleCollection.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleCollection.Tpo $(DEPDIR)/libmuleappgui_a-MuleCollection.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleCollection.cpp' object='libmuleappgui_a-MuleCollection.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleCollection.o `test -f 'MuleCollection.cpp' || echo '$(srcdir)/'`MuleCollection.cpp libmuleappgui_a-MuleCollection.obj: MuleCollection.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-MuleCollection.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-MuleCollection.Tpo -c -o libmuleappgui_a-MuleCollection.obj `if test -f 'MuleCollection.cpp'; then $(CYGPATH_W) 'MuleCollection.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleCollection.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-MuleCollection.Tpo $(DEPDIR)/libmuleappgui_a-MuleCollection.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleCollection.cpp' object='libmuleappgui_a-MuleCollection.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-MuleCollection.obj `if test -f 'MuleCollection.cpp'; then $(CYGPATH_W) 'MuleCollection.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleCollection.cpp'; fi` libmuleappgui_a-muuli_wdr.o: muuli_wdr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-muuli_wdr.o -MD -MP -MF $(DEPDIR)/libmuleappgui_a-muuli_wdr.Tpo -c -o libmuleappgui_a-muuli_wdr.o `test -f 'muuli_wdr.cpp' || echo '$(srcdir)/'`muuli_wdr.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-muuli_wdr.Tpo $(DEPDIR)/libmuleappgui_a-muuli_wdr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='muuli_wdr.cpp' object='libmuleappgui_a-muuli_wdr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-muuli_wdr.o `test -f 'muuli_wdr.cpp' || echo '$(srcdir)/'`muuli_wdr.cpp libmuleappgui_a-muuli_wdr.obj: muuli_wdr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libmuleappgui_a-muuli_wdr.obj -MD -MP -MF $(DEPDIR)/libmuleappgui_a-muuli_wdr.Tpo -c -o libmuleappgui_a-muuli_wdr.obj `if test -f 'muuli_wdr.cpp'; then $(CYGPATH_W) 'muuli_wdr.cpp'; else $(CYGPATH_W) '$(srcdir)/muuli_wdr.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmuleappgui_a-muuli_wdr.Tpo $(DEPDIR)/libmuleappgui_a-muuli_wdr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='muuli_wdr.cpp' object='libmuleappgui_a-muuli_wdr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmuleappgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libmuleappgui_a-muuli_wdr.obj `if test -f 'muuli_wdr.cpp'; then $(CYGPATH_W) 'muuli_wdr.cpp'; else $(CYGPATH_W) '$(srcdir)/muuli_wdr.cpp'; fi` amule-CaptchaDialog.o: CaptchaDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CaptchaDialog.o -MD -MP -MF $(DEPDIR)/amule-CaptchaDialog.Tpo -c -o amule-CaptchaDialog.o `test -f 'CaptchaDialog.cpp' || echo '$(srcdir)/'`CaptchaDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CaptchaDialog.Tpo $(DEPDIR)/amule-CaptchaDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CaptchaDialog.cpp' object='amule-CaptchaDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CaptchaDialog.o `test -f 'CaptchaDialog.cpp' || echo '$(srcdir)/'`CaptchaDialog.cpp amule-CaptchaDialog.obj: CaptchaDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CaptchaDialog.obj -MD -MP -MF $(DEPDIR)/amule-CaptchaDialog.Tpo -c -o amule-CaptchaDialog.obj `if test -f 'CaptchaDialog.cpp'; then $(CYGPATH_W) 'CaptchaDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/CaptchaDialog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CaptchaDialog.Tpo $(DEPDIR)/amule-CaptchaDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CaptchaDialog.cpp' object='amule-CaptchaDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CaptchaDialog.obj `if test -f 'CaptchaDialog.cpp'; then $(CYGPATH_W) 'CaptchaDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/CaptchaDialog.cpp'; fi` amule-CaptchaGenerator.o: CaptchaGenerator.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CaptchaGenerator.o -MD -MP -MF $(DEPDIR)/amule-CaptchaGenerator.Tpo -c -o amule-CaptchaGenerator.o `test -f 'CaptchaGenerator.cpp' || echo '$(srcdir)/'`CaptchaGenerator.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CaptchaGenerator.Tpo $(DEPDIR)/amule-CaptchaGenerator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CaptchaGenerator.cpp' object='amule-CaptchaGenerator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CaptchaGenerator.o `test -f 'CaptchaGenerator.cpp' || echo '$(srcdir)/'`CaptchaGenerator.cpp amule-CaptchaGenerator.obj: CaptchaGenerator.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CaptchaGenerator.obj -MD -MP -MF $(DEPDIR)/amule-CaptchaGenerator.Tpo -c -o amule-CaptchaGenerator.obj `if test -f 'CaptchaGenerator.cpp'; then $(CYGPATH_W) 'CaptchaGenerator.cpp'; else $(CYGPATH_W) '$(srcdir)/CaptchaGenerator.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CaptchaGenerator.Tpo $(DEPDIR)/amule-CaptchaGenerator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CaptchaGenerator.cpp' object='amule-CaptchaGenerator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CaptchaGenerator.obj `if test -f 'CaptchaGenerator.cpp'; then $(CYGPATH_W) 'CaptchaGenerator.cpp'; else $(CYGPATH_W) '$(srcdir)/CaptchaGenerator.cpp'; fi` amule-PartFileConvert.o: PartFileConvert.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-PartFileConvert.o -MD -MP -MF $(DEPDIR)/amule-PartFileConvert.Tpo -c -o amule-PartFileConvert.o `test -f 'PartFileConvert.cpp' || echo '$(srcdir)/'`PartFileConvert.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-PartFileConvert.Tpo $(DEPDIR)/amule-PartFileConvert.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartFileConvert.cpp' object='amule-PartFileConvert.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-PartFileConvert.o `test -f 'PartFileConvert.cpp' || echo '$(srcdir)/'`PartFileConvert.cpp amule-PartFileConvert.obj: PartFileConvert.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-PartFileConvert.obj -MD -MP -MF $(DEPDIR)/amule-PartFileConvert.Tpo -c -o amule-PartFileConvert.obj `if test -f 'PartFileConvert.cpp'; then $(CYGPATH_W) 'PartFileConvert.cpp'; else $(CYGPATH_W) '$(srcdir)/PartFileConvert.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-PartFileConvert.Tpo $(DEPDIR)/amule-PartFileConvert.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartFileConvert.cpp' object='amule-PartFileConvert.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-PartFileConvert.obj `if test -f 'PartFileConvert.cpp'; then $(CYGPATH_W) 'PartFileConvert.cpp'; else $(CYGPATH_W) '$(srcdir)/PartFileConvert.cpp'; fi` amule-PartFileConvertDlg.o: PartFileConvertDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-PartFileConvertDlg.o -MD -MP -MF $(DEPDIR)/amule-PartFileConvertDlg.Tpo -c -o amule-PartFileConvertDlg.o `test -f 'PartFileConvertDlg.cpp' || echo '$(srcdir)/'`PartFileConvertDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-PartFileConvertDlg.Tpo $(DEPDIR)/amule-PartFileConvertDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartFileConvertDlg.cpp' object='amule-PartFileConvertDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-PartFileConvertDlg.o `test -f 'PartFileConvertDlg.cpp' || echo '$(srcdir)/'`PartFileConvertDlg.cpp amule-PartFileConvertDlg.obj: PartFileConvertDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-PartFileConvertDlg.obj -MD -MP -MF $(DEPDIR)/amule-PartFileConvertDlg.Tpo -c -o amule-PartFileConvertDlg.obj `if test -f 'PartFileConvertDlg.cpp'; then $(CYGPATH_W) 'PartFileConvertDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/PartFileConvertDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-PartFileConvertDlg.Tpo $(DEPDIR)/amule-PartFileConvertDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartFileConvertDlg.cpp' object='amule-PartFileConvertDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-PartFileConvertDlg.obj `if test -f 'PartFileConvertDlg.cpp'; then $(CYGPATH_W) 'PartFileConvertDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/PartFileConvertDlg.cpp'; fi` amule-amule.o: amule.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-amule.o -MD -MP -MF $(DEPDIR)/amule-amule.Tpo -c -o amule-amule.o `test -f 'amule.cpp' || echo '$(srcdir)/'`amule.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-amule.Tpo $(DEPDIR)/amule-amule.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amule.cpp' object='amule-amule.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-amule.o `test -f 'amule.cpp' || echo '$(srcdir)/'`amule.cpp amule-amule.obj: amule.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-amule.obj -MD -MP -MF $(DEPDIR)/amule-amule.Tpo -c -o amule-amule.obj `if test -f 'amule.cpp'; then $(CYGPATH_W) 'amule.cpp'; else $(CYGPATH_W) '$(srcdir)/amule.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-amule.Tpo $(DEPDIR)/amule-amule.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amule.cpp' object='amule-amule.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-amule.obj `if test -f 'amule.cpp'; then $(CYGPATH_W) 'amule.cpp'; else $(CYGPATH_W) '$(srcdir)/amule.cpp'; fi` amule-BaseClient.o: BaseClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-BaseClient.o -MD -MP -MF $(DEPDIR)/amule-BaseClient.Tpo -c -o amule-BaseClient.o `test -f 'BaseClient.cpp' || echo '$(srcdir)/'`BaseClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-BaseClient.Tpo $(DEPDIR)/amule-BaseClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BaseClient.cpp' object='amule-BaseClient.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-BaseClient.o `test -f 'BaseClient.cpp' || echo '$(srcdir)/'`BaseClient.cpp amule-BaseClient.obj: BaseClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-BaseClient.obj -MD -MP -MF $(DEPDIR)/amule-BaseClient.Tpo -c -o amule-BaseClient.obj `if test -f 'BaseClient.cpp'; then $(CYGPATH_W) 'BaseClient.cpp'; else $(CYGPATH_W) '$(srcdir)/BaseClient.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-BaseClient.Tpo $(DEPDIR)/amule-BaseClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BaseClient.cpp' object='amule-BaseClient.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-BaseClient.obj `if test -f 'BaseClient.cpp'; then $(CYGPATH_W) 'BaseClient.cpp'; else $(CYGPATH_W) '$(srcdir)/BaseClient.cpp'; fi` amule-CanceledFileList.o: CanceledFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CanceledFileList.o -MD -MP -MF $(DEPDIR)/amule-CanceledFileList.Tpo -c -o amule-CanceledFileList.o `test -f 'CanceledFileList.cpp' || echo '$(srcdir)/'`CanceledFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CanceledFileList.Tpo $(DEPDIR)/amule-CanceledFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CanceledFileList.cpp' object='amule-CanceledFileList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CanceledFileList.o `test -f 'CanceledFileList.cpp' || echo '$(srcdir)/'`CanceledFileList.cpp amule-CanceledFileList.obj: CanceledFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CanceledFileList.obj -MD -MP -MF $(DEPDIR)/amule-CanceledFileList.Tpo -c -o amule-CanceledFileList.obj `if test -f 'CanceledFileList.cpp'; then $(CYGPATH_W) 'CanceledFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/CanceledFileList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CanceledFileList.Tpo $(DEPDIR)/amule-CanceledFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CanceledFileList.cpp' object='amule-CanceledFileList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CanceledFileList.obj `if test -f 'CanceledFileList.cpp'; then $(CYGPATH_W) 'CanceledFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/CanceledFileList.cpp'; fi` amule-ClientList.o: ClientList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientList.o -MD -MP -MF $(DEPDIR)/amule-ClientList.Tpo -c -o amule-ClientList.o `test -f 'ClientList.cpp' || echo '$(srcdir)/'`ClientList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientList.Tpo $(DEPDIR)/amule-ClientList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientList.cpp' object='amule-ClientList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientList.o `test -f 'ClientList.cpp' || echo '$(srcdir)/'`ClientList.cpp amule-ClientList.obj: ClientList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientList.obj -MD -MP -MF $(DEPDIR)/amule-ClientList.Tpo -c -o amule-ClientList.obj `if test -f 'ClientList.cpp'; then $(CYGPATH_W) 'ClientList.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientList.Tpo $(DEPDIR)/amule-ClientList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientList.cpp' object='amule-ClientList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientList.obj `if test -f 'ClientList.cpp'; then $(CYGPATH_W) 'ClientList.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientList.cpp'; fi` amule-ClientCreditsList.o: ClientCreditsList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientCreditsList.o -MD -MP -MF $(DEPDIR)/amule-ClientCreditsList.Tpo -c -o amule-ClientCreditsList.o `test -f 'ClientCreditsList.cpp' || echo '$(srcdir)/'`ClientCreditsList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientCreditsList.Tpo $(DEPDIR)/amule-ClientCreditsList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientCreditsList.cpp' object='amule-ClientCreditsList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientCreditsList.o `test -f 'ClientCreditsList.cpp' || echo '$(srcdir)/'`ClientCreditsList.cpp amule-ClientCreditsList.obj: ClientCreditsList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientCreditsList.obj -MD -MP -MF $(DEPDIR)/amule-ClientCreditsList.Tpo -c -o amule-ClientCreditsList.obj `if test -f 'ClientCreditsList.cpp'; then $(CYGPATH_W) 'ClientCreditsList.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientCreditsList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientCreditsList.Tpo $(DEPDIR)/amule-ClientCreditsList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientCreditsList.cpp' object='amule-ClientCreditsList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientCreditsList.obj `if test -f 'ClientCreditsList.cpp'; then $(CYGPATH_W) 'ClientCreditsList.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientCreditsList.cpp'; fi` amule-ClientTCPSocket.o: ClientTCPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientTCPSocket.o -MD -MP -MF $(DEPDIR)/amule-ClientTCPSocket.Tpo -c -o amule-ClientTCPSocket.o `test -f 'ClientTCPSocket.cpp' || echo '$(srcdir)/'`ClientTCPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientTCPSocket.Tpo $(DEPDIR)/amule-ClientTCPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientTCPSocket.cpp' object='amule-ClientTCPSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientTCPSocket.o `test -f 'ClientTCPSocket.cpp' || echo '$(srcdir)/'`ClientTCPSocket.cpp amule-ClientTCPSocket.obj: ClientTCPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientTCPSocket.obj -MD -MP -MF $(DEPDIR)/amule-ClientTCPSocket.Tpo -c -o amule-ClientTCPSocket.obj `if test -f 'ClientTCPSocket.cpp'; then $(CYGPATH_W) 'ClientTCPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientTCPSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientTCPSocket.Tpo $(DEPDIR)/amule-ClientTCPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientTCPSocket.cpp' object='amule-ClientTCPSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientTCPSocket.obj `if test -f 'ClientTCPSocket.cpp'; then $(CYGPATH_W) 'ClientTCPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientTCPSocket.cpp'; fi` amule-ClientUDPSocket.o: ClientUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientUDPSocket.o -MD -MP -MF $(DEPDIR)/amule-ClientUDPSocket.Tpo -c -o amule-ClientUDPSocket.o `test -f 'ClientUDPSocket.cpp' || echo '$(srcdir)/'`ClientUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientUDPSocket.Tpo $(DEPDIR)/amule-ClientUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientUDPSocket.cpp' object='amule-ClientUDPSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientUDPSocket.o `test -f 'ClientUDPSocket.cpp' || echo '$(srcdir)/'`ClientUDPSocket.cpp amule-ClientUDPSocket.obj: ClientUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientUDPSocket.obj -MD -MP -MF $(DEPDIR)/amule-ClientUDPSocket.Tpo -c -o amule-ClientUDPSocket.obj `if test -f 'ClientUDPSocket.cpp'; then $(CYGPATH_W) 'ClientUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientUDPSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientUDPSocket.Tpo $(DEPDIR)/amule-ClientUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientUDPSocket.cpp' object='amule-ClientUDPSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientUDPSocket.obj `if test -f 'ClientUDPSocket.cpp'; then $(CYGPATH_W) 'ClientUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientUDPSocket.cpp'; fi` amule-CorruptionBlackBox.o: CorruptionBlackBox.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CorruptionBlackBox.o -MD -MP -MF $(DEPDIR)/amule-CorruptionBlackBox.Tpo -c -o amule-CorruptionBlackBox.o `test -f 'CorruptionBlackBox.cpp' || echo '$(srcdir)/'`CorruptionBlackBox.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CorruptionBlackBox.Tpo $(DEPDIR)/amule-CorruptionBlackBox.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CorruptionBlackBox.cpp' object='amule-CorruptionBlackBox.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CorruptionBlackBox.o `test -f 'CorruptionBlackBox.cpp' || echo '$(srcdir)/'`CorruptionBlackBox.cpp amule-CorruptionBlackBox.obj: CorruptionBlackBox.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CorruptionBlackBox.obj -MD -MP -MF $(DEPDIR)/amule-CorruptionBlackBox.Tpo -c -o amule-CorruptionBlackBox.obj `if test -f 'CorruptionBlackBox.cpp'; then $(CYGPATH_W) 'CorruptionBlackBox.cpp'; else $(CYGPATH_W) '$(srcdir)/CorruptionBlackBox.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CorruptionBlackBox.Tpo $(DEPDIR)/amule-CorruptionBlackBox.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CorruptionBlackBox.cpp' object='amule-CorruptionBlackBox.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CorruptionBlackBox.obj `if test -f 'CorruptionBlackBox.cpp'; then $(CYGPATH_W) 'CorruptionBlackBox.cpp'; else $(CYGPATH_W) '$(srcdir)/CorruptionBlackBox.cpp'; fi` amule-DownloadClient.o: DownloadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-DownloadClient.o -MD -MP -MF $(DEPDIR)/amule-DownloadClient.Tpo -c -o amule-DownloadClient.o `test -f 'DownloadClient.cpp' || echo '$(srcdir)/'`DownloadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-DownloadClient.Tpo $(DEPDIR)/amule-DownloadClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadClient.cpp' object='amule-DownloadClient.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-DownloadClient.o `test -f 'DownloadClient.cpp' || echo '$(srcdir)/'`DownloadClient.cpp amule-DownloadClient.obj: DownloadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-DownloadClient.obj -MD -MP -MF $(DEPDIR)/amule-DownloadClient.Tpo -c -o amule-DownloadClient.obj `if test -f 'DownloadClient.cpp'; then $(CYGPATH_W) 'DownloadClient.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadClient.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-DownloadClient.Tpo $(DEPDIR)/amule-DownloadClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadClient.cpp' object='amule-DownloadClient.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-DownloadClient.obj `if test -f 'DownloadClient.cpp'; then $(CYGPATH_W) 'DownloadClient.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadClient.cpp'; fi` amule-DownloadQueue.o: DownloadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-DownloadQueue.o -MD -MP -MF $(DEPDIR)/amule-DownloadQueue.Tpo -c -o amule-DownloadQueue.o `test -f 'DownloadQueue.cpp' || echo '$(srcdir)/'`DownloadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-DownloadQueue.Tpo $(DEPDIR)/amule-DownloadQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadQueue.cpp' object='amule-DownloadQueue.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-DownloadQueue.o `test -f 'DownloadQueue.cpp' || echo '$(srcdir)/'`DownloadQueue.cpp amule-DownloadQueue.obj: DownloadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-DownloadQueue.obj -MD -MP -MF $(DEPDIR)/amule-DownloadQueue.Tpo -c -o amule-DownloadQueue.obj `if test -f 'DownloadQueue.cpp'; then $(CYGPATH_W) 'DownloadQueue.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadQueue.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-DownloadQueue.Tpo $(DEPDIR)/amule-DownloadQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadQueue.cpp' object='amule-DownloadQueue.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-DownloadQueue.obj `if test -f 'DownloadQueue.cpp'; then $(CYGPATH_W) 'DownloadQueue.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadQueue.cpp'; fi` amule-ECSpecialCoreTags.o: ECSpecialCoreTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ECSpecialCoreTags.o -MD -MP -MF $(DEPDIR)/amule-ECSpecialCoreTags.Tpo -c -o amule-ECSpecialCoreTags.o `test -f 'ECSpecialCoreTags.cpp' || echo '$(srcdir)/'`ECSpecialCoreTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ECSpecialCoreTags.Tpo $(DEPDIR)/amule-ECSpecialCoreTags.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ECSpecialCoreTags.cpp' object='amule-ECSpecialCoreTags.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ECSpecialCoreTags.o `test -f 'ECSpecialCoreTags.cpp' || echo '$(srcdir)/'`ECSpecialCoreTags.cpp amule-ECSpecialCoreTags.obj: ECSpecialCoreTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ECSpecialCoreTags.obj -MD -MP -MF $(DEPDIR)/amule-ECSpecialCoreTags.Tpo -c -o amule-ECSpecialCoreTags.obj `if test -f 'ECSpecialCoreTags.cpp'; then $(CYGPATH_W) 'ECSpecialCoreTags.cpp'; else $(CYGPATH_W) '$(srcdir)/ECSpecialCoreTags.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ECSpecialCoreTags.Tpo $(DEPDIR)/amule-ECSpecialCoreTags.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ECSpecialCoreTags.cpp' object='amule-ECSpecialCoreTags.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ECSpecialCoreTags.obj `if test -f 'ECSpecialCoreTags.cpp'; then $(CYGPATH_W) 'ECSpecialCoreTags.cpp'; else $(CYGPATH_W) '$(srcdir)/ECSpecialCoreTags.cpp'; fi` amule-EMSocket.o: EMSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-EMSocket.o -MD -MP -MF $(DEPDIR)/amule-EMSocket.Tpo -c -o amule-EMSocket.o `test -f 'EMSocket.cpp' || echo '$(srcdir)/'`EMSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-EMSocket.Tpo $(DEPDIR)/amule-EMSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EMSocket.cpp' object='amule-EMSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-EMSocket.o `test -f 'EMSocket.cpp' || echo '$(srcdir)/'`EMSocket.cpp amule-EMSocket.obj: EMSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-EMSocket.obj -MD -MP -MF $(DEPDIR)/amule-EMSocket.Tpo -c -o amule-EMSocket.obj `if test -f 'EMSocket.cpp'; then $(CYGPATH_W) 'EMSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EMSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-EMSocket.Tpo $(DEPDIR)/amule-EMSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EMSocket.cpp' object='amule-EMSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-EMSocket.obj `if test -f 'EMSocket.cpp'; then $(CYGPATH_W) 'EMSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EMSocket.cpp'; fi` amule-EncryptedStreamSocket.o: EncryptedStreamSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-EncryptedStreamSocket.o -MD -MP -MF $(DEPDIR)/amule-EncryptedStreamSocket.Tpo -c -o amule-EncryptedStreamSocket.o `test -f 'EncryptedStreamSocket.cpp' || echo '$(srcdir)/'`EncryptedStreamSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-EncryptedStreamSocket.Tpo $(DEPDIR)/amule-EncryptedStreamSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EncryptedStreamSocket.cpp' object='amule-EncryptedStreamSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-EncryptedStreamSocket.o `test -f 'EncryptedStreamSocket.cpp' || echo '$(srcdir)/'`EncryptedStreamSocket.cpp amule-EncryptedStreamSocket.obj: EncryptedStreamSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-EncryptedStreamSocket.obj -MD -MP -MF $(DEPDIR)/amule-EncryptedStreamSocket.Tpo -c -o amule-EncryptedStreamSocket.obj `if test -f 'EncryptedStreamSocket.cpp'; then $(CYGPATH_W) 'EncryptedStreamSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EncryptedStreamSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-EncryptedStreamSocket.Tpo $(DEPDIR)/amule-EncryptedStreamSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EncryptedStreamSocket.cpp' object='amule-EncryptedStreamSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-EncryptedStreamSocket.obj `if test -f 'EncryptedStreamSocket.cpp'; then $(CYGPATH_W) 'EncryptedStreamSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EncryptedStreamSocket.cpp'; fi` amule-EncryptedDatagramSocket.o: EncryptedDatagramSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-EncryptedDatagramSocket.o -MD -MP -MF $(DEPDIR)/amule-EncryptedDatagramSocket.Tpo -c -o amule-EncryptedDatagramSocket.o `test -f 'EncryptedDatagramSocket.cpp' || echo '$(srcdir)/'`EncryptedDatagramSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-EncryptedDatagramSocket.Tpo $(DEPDIR)/amule-EncryptedDatagramSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EncryptedDatagramSocket.cpp' object='amule-EncryptedDatagramSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-EncryptedDatagramSocket.o `test -f 'EncryptedDatagramSocket.cpp' || echo '$(srcdir)/'`EncryptedDatagramSocket.cpp amule-EncryptedDatagramSocket.obj: EncryptedDatagramSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-EncryptedDatagramSocket.obj -MD -MP -MF $(DEPDIR)/amule-EncryptedDatagramSocket.Tpo -c -o amule-EncryptedDatagramSocket.obj `if test -f 'EncryptedDatagramSocket.cpp'; then $(CYGPATH_W) 'EncryptedDatagramSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EncryptedDatagramSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-EncryptedDatagramSocket.Tpo $(DEPDIR)/amule-EncryptedDatagramSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EncryptedDatagramSocket.cpp' object='amule-EncryptedDatagramSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-EncryptedDatagramSocket.obj `if test -f 'EncryptedDatagramSocket.cpp'; then $(CYGPATH_W) 'EncryptedDatagramSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EncryptedDatagramSocket.cpp'; fi` amule-ExternalConn.o: ExternalConn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ExternalConn.o -MD -MP -MF $(DEPDIR)/amule-ExternalConn.Tpo -c -o amule-ExternalConn.o `test -f 'ExternalConn.cpp' || echo '$(srcdir)/'`ExternalConn.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ExternalConn.Tpo $(DEPDIR)/amule-ExternalConn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ExternalConn.cpp' object='amule-ExternalConn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ExternalConn.o `test -f 'ExternalConn.cpp' || echo '$(srcdir)/'`ExternalConn.cpp amule-ExternalConn.obj: ExternalConn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ExternalConn.obj -MD -MP -MF $(DEPDIR)/amule-ExternalConn.Tpo -c -o amule-ExternalConn.obj `if test -f 'ExternalConn.cpp'; then $(CYGPATH_W) 'ExternalConn.cpp'; else $(CYGPATH_W) '$(srcdir)/ExternalConn.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ExternalConn.Tpo $(DEPDIR)/amule-ExternalConn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ExternalConn.cpp' object='amule-ExternalConn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ExternalConn.obj `if test -f 'ExternalConn.cpp'; then $(CYGPATH_W) 'ExternalConn.cpp'; else $(CYGPATH_W) '$(srcdir)/ExternalConn.cpp'; fi` amule-FriendList.o: FriendList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-FriendList.o -MD -MP -MF $(DEPDIR)/amule-FriendList.Tpo -c -o amule-FriendList.o `test -f 'FriendList.cpp' || echo '$(srcdir)/'`FriendList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-FriendList.Tpo $(DEPDIR)/amule-FriendList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FriendList.cpp' object='amule-FriendList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-FriendList.o `test -f 'FriendList.cpp' || echo '$(srcdir)/'`FriendList.cpp amule-FriendList.obj: FriendList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-FriendList.obj -MD -MP -MF $(DEPDIR)/amule-FriendList.Tpo -c -o amule-FriendList.obj `if test -f 'FriendList.cpp'; then $(CYGPATH_W) 'FriendList.cpp'; else $(CYGPATH_W) '$(srcdir)/FriendList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-FriendList.Tpo $(DEPDIR)/amule-FriendList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FriendList.cpp' object='amule-FriendList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-FriendList.obj `if test -f 'FriendList.cpp'; then $(CYGPATH_W) 'FriendList.cpp'; else $(CYGPATH_W) '$(srcdir)/FriendList.cpp'; fi` amule-IPFilter.o: IPFilter.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-IPFilter.o -MD -MP -MF $(DEPDIR)/amule-IPFilter.Tpo -c -o amule-IPFilter.o `test -f 'IPFilter.cpp' || echo '$(srcdir)/'`IPFilter.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-IPFilter.Tpo $(DEPDIR)/amule-IPFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='IPFilter.cpp' object='amule-IPFilter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-IPFilter.o `test -f 'IPFilter.cpp' || echo '$(srcdir)/'`IPFilter.cpp amule-IPFilter.obj: IPFilter.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-IPFilter.obj -MD -MP -MF $(DEPDIR)/amule-IPFilter.Tpo -c -o amule-IPFilter.obj `if test -f 'IPFilter.cpp'; then $(CYGPATH_W) 'IPFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/IPFilter.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-IPFilter.Tpo $(DEPDIR)/amule-IPFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='IPFilter.cpp' object='amule-IPFilter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-IPFilter.obj `if test -f 'IPFilter.cpp'; then $(CYGPATH_W) 'IPFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/IPFilter.cpp'; fi` amule-KnownFileList.o: KnownFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-KnownFileList.o -MD -MP -MF $(DEPDIR)/amule-KnownFileList.Tpo -c -o amule-KnownFileList.o `test -f 'KnownFileList.cpp' || echo '$(srcdir)/'`KnownFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-KnownFileList.Tpo $(DEPDIR)/amule-KnownFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KnownFileList.cpp' object='amule-KnownFileList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-KnownFileList.o `test -f 'KnownFileList.cpp' || echo '$(srcdir)/'`KnownFileList.cpp amule-KnownFileList.obj: KnownFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-KnownFileList.obj -MD -MP -MF $(DEPDIR)/amule-KnownFileList.Tpo -c -o amule-KnownFileList.obj `if test -f 'KnownFileList.cpp'; then $(CYGPATH_W) 'KnownFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/KnownFileList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-KnownFileList.Tpo $(DEPDIR)/amule-KnownFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KnownFileList.cpp' object='amule-KnownFileList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-KnownFileList.obj `if test -f 'KnownFileList.cpp'; then $(CYGPATH_W) 'KnownFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/KnownFileList.cpp'; fi` amule-ListenSocket.o: ListenSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ListenSocket.o -MD -MP -MF $(DEPDIR)/amule-ListenSocket.Tpo -c -o amule-ListenSocket.o `test -f 'ListenSocket.cpp' || echo '$(srcdir)/'`ListenSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ListenSocket.Tpo $(DEPDIR)/amule-ListenSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ListenSocket.cpp' object='amule-ListenSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ListenSocket.o `test -f 'ListenSocket.cpp' || echo '$(srcdir)/'`ListenSocket.cpp amule-ListenSocket.obj: ListenSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ListenSocket.obj -MD -MP -MF $(DEPDIR)/amule-ListenSocket.Tpo -c -o amule-ListenSocket.obj `if test -f 'ListenSocket.cpp'; then $(CYGPATH_W) 'ListenSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ListenSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ListenSocket.Tpo $(DEPDIR)/amule-ListenSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ListenSocket.cpp' object='amule-ListenSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ListenSocket.obj `if test -f 'ListenSocket.cpp'; then $(CYGPATH_W) 'ListenSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ListenSocket.cpp'; fi` amule-MuleUDPSocket.o: MuleUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-MuleUDPSocket.o -MD -MP -MF $(DEPDIR)/amule-MuleUDPSocket.Tpo -c -o amule-MuleUDPSocket.o `test -f 'MuleUDPSocket.cpp' || echo '$(srcdir)/'`MuleUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-MuleUDPSocket.Tpo $(DEPDIR)/amule-MuleUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleUDPSocket.cpp' object='amule-MuleUDPSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-MuleUDPSocket.o `test -f 'MuleUDPSocket.cpp' || echo '$(srcdir)/'`MuleUDPSocket.cpp amule-MuleUDPSocket.obj: MuleUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-MuleUDPSocket.obj -MD -MP -MF $(DEPDIR)/amule-MuleUDPSocket.Tpo -c -o amule-MuleUDPSocket.obj `if test -f 'MuleUDPSocket.cpp'; then $(CYGPATH_W) 'MuleUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleUDPSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-MuleUDPSocket.Tpo $(DEPDIR)/amule-MuleUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleUDPSocket.cpp' object='amule-MuleUDPSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-MuleUDPSocket.obj `if test -f 'MuleUDPSocket.cpp'; then $(CYGPATH_W) 'MuleUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleUDPSocket.cpp'; fi` amule-SearchFile.o: SearchFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SearchFile.o -MD -MP -MF $(DEPDIR)/amule-SearchFile.Tpo -c -o amule-SearchFile.o `test -f 'SearchFile.cpp' || echo '$(srcdir)/'`SearchFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SearchFile.Tpo $(DEPDIR)/amule-SearchFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchFile.cpp' object='amule-SearchFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SearchFile.o `test -f 'SearchFile.cpp' || echo '$(srcdir)/'`SearchFile.cpp amule-SearchFile.obj: SearchFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SearchFile.obj -MD -MP -MF $(DEPDIR)/amule-SearchFile.Tpo -c -o amule-SearchFile.obj `if test -f 'SearchFile.cpp'; then $(CYGPATH_W) 'SearchFile.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchFile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SearchFile.Tpo $(DEPDIR)/amule-SearchFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchFile.cpp' object='amule-SearchFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SearchFile.obj `if test -f 'SearchFile.cpp'; then $(CYGPATH_W) 'SearchFile.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchFile.cpp'; fi` amule-SearchList.o: SearchList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SearchList.o -MD -MP -MF $(DEPDIR)/amule-SearchList.Tpo -c -o amule-SearchList.o `test -f 'SearchList.cpp' || echo '$(srcdir)/'`SearchList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SearchList.Tpo $(DEPDIR)/amule-SearchList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchList.cpp' object='amule-SearchList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SearchList.o `test -f 'SearchList.cpp' || echo '$(srcdir)/'`SearchList.cpp amule-SearchList.obj: SearchList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SearchList.obj -MD -MP -MF $(DEPDIR)/amule-SearchList.Tpo -c -o amule-SearchList.obj `if test -f 'SearchList.cpp'; then $(CYGPATH_W) 'SearchList.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SearchList.Tpo $(DEPDIR)/amule-SearchList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchList.cpp' object='amule-SearchList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SearchList.obj `if test -f 'SearchList.cpp'; then $(CYGPATH_W) 'SearchList.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchList.cpp'; fi` amule-ServerConnect.o: ServerConnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerConnect.o -MD -MP -MF $(DEPDIR)/amule-ServerConnect.Tpo -c -o amule-ServerConnect.o `test -f 'ServerConnect.cpp' || echo '$(srcdir)/'`ServerConnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerConnect.Tpo $(DEPDIR)/amule-ServerConnect.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerConnect.cpp' object='amule-ServerConnect.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerConnect.o `test -f 'ServerConnect.cpp' || echo '$(srcdir)/'`ServerConnect.cpp amule-ServerConnect.obj: ServerConnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerConnect.obj -MD -MP -MF $(DEPDIR)/amule-ServerConnect.Tpo -c -o amule-ServerConnect.obj `if test -f 'ServerConnect.cpp'; then $(CYGPATH_W) 'ServerConnect.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerConnect.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerConnect.Tpo $(DEPDIR)/amule-ServerConnect.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerConnect.cpp' object='amule-ServerConnect.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerConnect.obj `if test -f 'ServerConnect.cpp'; then $(CYGPATH_W) 'ServerConnect.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerConnect.cpp'; fi` amule-ServerList.o: ServerList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerList.o -MD -MP -MF $(DEPDIR)/amule-ServerList.Tpo -c -o amule-ServerList.o `test -f 'ServerList.cpp' || echo '$(srcdir)/'`ServerList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerList.Tpo $(DEPDIR)/amule-ServerList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerList.cpp' object='amule-ServerList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerList.o `test -f 'ServerList.cpp' || echo '$(srcdir)/'`ServerList.cpp amule-ServerList.obj: ServerList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerList.obj -MD -MP -MF $(DEPDIR)/amule-ServerList.Tpo -c -o amule-ServerList.obj `if test -f 'ServerList.cpp'; then $(CYGPATH_W) 'ServerList.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerList.Tpo $(DEPDIR)/amule-ServerList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerList.cpp' object='amule-ServerList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerList.obj `if test -f 'ServerList.cpp'; then $(CYGPATH_W) 'ServerList.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerList.cpp'; fi` amule-ServerSocket.o: ServerSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerSocket.o -MD -MP -MF $(DEPDIR)/amule-ServerSocket.Tpo -c -o amule-ServerSocket.o `test -f 'ServerSocket.cpp' || echo '$(srcdir)/'`ServerSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerSocket.Tpo $(DEPDIR)/amule-ServerSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerSocket.cpp' object='amule-ServerSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerSocket.o `test -f 'ServerSocket.cpp' || echo '$(srcdir)/'`ServerSocket.cpp amule-ServerSocket.obj: ServerSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerSocket.obj -MD -MP -MF $(DEPDIR)/amule-ServerSocket.Tpo -c -o amule-ServerSocket.obj `if test -f 'ServerSocket.cpp'; then $(CYGPATH_W) 'ServerSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerSocket.Tpo $(DEPDIR)/amule-ServerSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerSocket.cpp' object='amule-ServerSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerSocket.obj `if test -f 'ServerSocket.cpp'; then $(CYGPATH_W) 'ServerSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerSocket.cpp'; fi` amule-ServerUDPSocket.o: ServerUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerUDPSocket.o -MD -MP -MF $(DEPDIR)/amule-ServerUDPSocket.Tpo -c -o amule-ServerUDPSocket.o `test -f 'ServerUDPSocket.cpp' || echo '$(srcdir)/'`ServerUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerUDPSocket.Tpo $(DEPDIR)/amule-ServerUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerUDPSocket.cpp' object='amule-ServerUDPSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerUDPSocket.o `test -f 'ServerUDPSocket.cpp' || echo '$(srcdir)/'`ServerUDPSocket.cpp amule-ServerUDPSocket.obj: ServerUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerUDPSocket.obj -MD -MP -MF $(DEPDIR)/amule-ServerUDPSocket.Tpo -c -o amule-ServerUDPSocket.obj `if test -f 'ServerUDPSocket.cpp'; then $(CYGPATH_W) 'ServerUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerUDPSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerUDPSocket.Tpo $(DEPDIR)/amule-ServerUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerUDPSocket.cpp' object='amule-ServerUDPSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerUDPSocket.obj `if test -f 'ServerUDPSocket.cpp'; then $(CYGPATH_W) 'ServerUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerUDPSocket.cpp'; fi` amule-SHAHashSet.o: SHAHashSet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SHAHashSet.o -MD -MP -MF $(DEPDIR)/amule-SHAHashSet.Tpo -c -o amule-SHAHashSet.o `test -f 'SHAHashSet.cpp' || echo '$(srcdir)/'`SHAHashSet.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SHAHashSet.Tpo $(DEPDIR)/amule-SHAHashSet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SHAHashSet.cpp' object='amule-SHAHashSet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SHAHashSet.o `test -f 'SHAHashSet.cpp' || echo '$(srcdir)/'`SHAHashSet.cpp amule-SHAHashSet.obj: SHAHashSet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SHAHashSet.obj -MD -MP -MF $(DEPDIR)/amule-SHAHashSet.Tpo -c -o amule-SHAHashSet.obj `if test -f 'SHAHashSet.cpp'; then $(CYGPATH_W) 'SHAHashSet.cpp'; else $(CYGPATH_W) '$(srcdir)/SHAHashSet.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SHAHashSet.Tpo $(DEPDIR)/amule-SHAHashSet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SHAHashSet.cpp' object='amule-SHAHashSet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SHAHashSet.obj `if test -f 'SHAHashSet.cpp'; then $(CYGPATH_W) 'SHAHashSet.cpp'; else $(CYGPATH_W) '$(srcdir)/SHAHashSet.cpp'; fi` amule-SharedFileList.o: SharedFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SharedFileList.o -MD -MP -MF $(DEPDIR)/amule-SharedFileList.Tpo -c -o amule-SharedFileList.o `test -f 'SharedFileList.cpp' || echo '$(srcdir)/'`SharedFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SharedFileList.Tpo $(DEPDIR)/amule-SharedFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFileList.cpp' object='amule-SharedFileList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SharedFileList.o `test -f 'SharedFileList.cpp' || echo '$(srcdir)/'`SharedFileList.cpp amule-SharedFileList.obj: SharedFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SharedFileList.obj -MD -MP -MF $(DEPDIR)/amule-SharedFileList.Tpo -c -o amule-SharedFileList.obj `if test -f 'SharedFileList.cpp'; then $(CYGPATH_W) 'SharedFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFileList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SharedFileList.Tpo $(DEPDIR)/amule-SharedFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFileList.cpp' object='amule-SharedFileList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SharedFileList.obj `if test -f 'SharedFileList.cpp'; then $(CYGPATH_W) 'SharedFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFileList.cpp'; fi` amule-ThreadTasks.o: ThreadTasks.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ThreadTasks.o -MD -MP -MF $(DEPDIR)/amule-ThreadTasks.Tpo -c -o amule-ThreadTasks.o `test -f 'ThreadTasks.cpp' || echo '$(srcdir)/'`ThreadTasks.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ThreadTasks.Tpo $(DEPDIR)/amule-ThreadTasks.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ThreadTasks.cpp' object='amule-ThreadTasks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ThreadTasks.o `test -f 'ThreadTasks.cpp' || echo '$(srcdir)/'`ThreadTasks.cpp amule-ThreadTasks.obj: ThreadTasks.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ThreadTasks.obj -MD -MP -MF $(DEPDIR)/amule-ThreadTasks.Tpo -c -o amule-ThreadTasks.obj `if test -f 'ThreadTasks.cpp'; then $(CYGPATH_W) 'ThreadTasks.cpp'; else $(CYGPATH_W) '$(srcdir)/ThreadTasks.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ThreadTasks.Tpo $(DEPDIR)/amule-ThreadTasks.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ThreadTasks.cpp' object='amule-ThreadTasks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ThreadTasks.obj `if test -f 'ThreadTasks.cpp'; then $(CYGPATH_W) 'ThreadTasks.cpp'; else $(CYGPATH_W) '$(srcdir)/ThreadTasks.cpp'; fi` amule-UploadBandwidthThrottler.o: UploadBandwidthThrottler.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-UploadBandwidthThrottler.o -MD -MP -MF $(DEPDIR)/amule-UploadBandwidthThrottler.Tpo -c -o amule-UploadBandwidthThrottler.o `test -f 'UploadBandwidthThrottler.cpp' || echo '$(srcdir)/'`UploadBandwidthThrottler.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-UploadBandwidthThrottler.Tpo $(DEPDIR)/amule-UploadBandwidthThrottler.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadBandwidthThrottler.cpp' object='amule-UploadBandwidthThrottler.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-UploadBandwidthThrottler.o `test -f 'UploadBandwidthThrottler.cpp' || echo '$(srcdir)/'`UploadBandwidthThrottler.cpp amule-UploadBandwidthThrottler.obj: UploadBandwidthThrottler.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-UploadBandwidthThrottler.obj -MD -MP -MF $(DEPDIR)/amule-UploadBandwidthThrottler.Tpo -c -o amule-UploadBandwidthThrottler.obj `if test -f 'UploadBandwidthThrottler.cpp'; then $(CYGPATH_W) 'UploadBandwidthThrottler.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadBandwidthThrottler.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-UploadBandwidthThrottler.Tpo $(DEPDIR)/amule-UploadBandwidthThrottler.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadBandwidthThrottler.cpp' object='amule-UploadBandwidthThrottler.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-UploadBandwidthThrottler.obj `if test -f 'UploadBandwidthThrottler.cpp'; then $(CYGPATH_W) 'UploadBandwidthThrottler.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadBandwidthThrottler.cpp'; fi` amule-UploadClient.o: UploadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-UploadClient.o -MD -MP -MF $(DEPDIR)/amule-UploadClient.Tpo -c -o amule-UploadClient.o `test -f 'UploadClient.cpp' || echo '$(srcdir)/'`UploadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-UploadClient.Tpo $(DEPDIR)/amule-UploadClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadClient.cpp' object='amule-UploadClient.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-UploadClient.o `test -f 'UploadClient.cpp' || echo '$(srcdir)/'`UploadClient.cpp amule-UploadClient.obj: UploadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-UploadClient.obj -MD -MP -MF $(DEPDIR)/amule-UploadClient.Tpo -c -o amule-UploadClient.obj `if test -f 'UploadClient.cpp'; then $(CYGPATH_W) 'UploadClient.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadClient.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-UploadClient.Tpo $(DEPDIR)/amule-UploadClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadClient.cpp' object='amule-UploadClient.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-UploadClient.obj `if test -f 'UploadClient.cpp'; then $(CYGPATH_W) 'UploadClient.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadClient.cpp'; fi` amule-UploadQueue.o: UploadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-UploadQueue.o -MD -MP -MF $(DEPDIR)/amule-UploadQueue.Tpo -c -o amule-UploadQueue.o `test -f 'UploadQueue.cpp' || echo '$(srcdir)/'`UploadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-UploadQueue.Tpo $(DEPDIR)/amule-UploadQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadQueue.cpp' object='amule-UploadQueue.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-UploadQueue.o `test -f 'UploadQueue.cpp' || echo '$(srcdir)/'`UploadQueue.cpp amule-UploadQueue.obj: UploadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-UploadQueue.obj -MD -MP -MF $(DEPDIR)/amule-UploadQueue.Tpo -c -o amule-UploadQueue.obj `if test -f 'UploadQueue.cpp'; then $(CYGPATH_W) 'UploadQueue.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadQueue.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-UploadQueue.Tpo $(DEPDIR)/amule-UploadQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadQueue.cpp' object='amule-UploadQueue.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-UploadQueue.obj `if test -f 'UploadQueue.cpp'; then $(CYGPATH_W) 'UploadQueue.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadQueue.cpp'; fi` amule-Indexed.o: kademlia/kademlia/Indexed.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Indexed.o -MD -MP -MF $(DEPDIR)/amule-Indexed.Tpo -c -o amule-Indexed.o `test -f 'kademlia/kademlia/Indexed.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Indexed.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Indexed.Tpo $(DEPDIR)/amule-Indexed.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Indexed.cpp' object='amule-Indexed.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Indexed.o `test -f 'kademlia/kademlia/Indexed.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Indexed.cpp amule-Indexed.obj: kademlia/kademlia/Indexed.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Indexed.obj -MD -MP -MF $(DEPDIR)/amule-Indexed.Tpo -c -o amule-Indexed.obj `if test -f 'kademlia/kademlia/Indexed.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Indexed.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Indexed.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Indexed.Tpo $(DEPDIR)/amule-Indexed.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Indexed.cpp' object='amule-Indexed.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Indexed.obj `if test -f 'kademlia/kademlia/Indexed.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Indexed.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Indexed.cpp'; fi` amule-Kademlia.o: kademlia/kademlia/Kademlia.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Kademlia.o -MD -MP -MF $(DEPDIR)/amule-Kademlia.Tpo -c -o amule-Kademlia.o `test -f 'kademlia/kademlia/Kademlia.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Kademlia.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Kademlia.Tpo $(DEPDIR)/amule-Kademlia.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Kademlia.cpp' object='amule-Kademlia.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Kademlia.o `test -f 'kademlia/kademlia/Kademlia.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Kademlia.cpp amule-Kademlia.obj: kademlia/kademlia/Kademlia.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Kademlia.obj -MD -MP -MF $(DEPDIR)/amule-Kademlia.Tpo -c -o amule-Kademlia.obj `if test -f 'kademlia/kademlia/Kademlia.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Kademlia.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Kademlia.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Kademlia.Tpo $(DEPDIR)/amule-Kademlia.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Kademlia.cpp' object='amule-Kademlia.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Kademlia.obj `if test -f 'kademlia/kademlia/Kademlia.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Kademlia.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Kademlia.cpp'; fi` amule-Prefs.o: kademlia/kademlia/Prefs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Prefs.o -MD -MP -MF $(DEPDIR)/amule-Prefs.Tpo -c -o amule-Prefs.o `test -f 'kademlia/kademlia/Prefs.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Prefs.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Prefs.Tpo $(DEPDIR)/amule-Prefs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Prefs.cpp' object='amule-Prefs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Prefs.o `test -f 'kademlia/kademlia/Prefs.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Prefs.cpp amule-Prefs.obj: kademlia/kademlia/Prefs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Prefs.obj -MD -MP -MF $(DEPDIR)/amule-Prefs.Tpo -c -o amule-Prefs.obj `if test -f 'kademlia/kademlia/Prefs.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Prefs.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Prefs.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Prefs.Tpo $(DEPDIR)/amule-Prefs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Prefs.cpp' object='amule-Prefs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Prefs.obj `if test -f 'kademlia/kademlia/Prefs.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Prefs.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Prefs.cpp'; fi` amule-Search.o: kademlia/kademlia/Search.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Search.o -MD -MP -MF $(DEPDIR)/amule-Search.Tpo -c -o amule-Search.o `test -f 'kademlia/kademlia/Search.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Search.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Search.Tpo $(DEPDIR)/amule-Search.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Search.cpp' object='amule-Search.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Search.o `test -f 'kademlia/kademlia/Search.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Search.cpp amule-Search.obj: kademlia/kademlia/Search.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Search.obj -MD -MP -MF $(DEPDIR)/amule-Search.Tpo -c -o amule-Search.obj `if test -f 'kademlia/kademlia/Search.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Search.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Search.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Search.Tpo $(DEPDIR)/amule-Search.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Search.cpp' object='amule-Search.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Search.obj `if test -f 'kademlia/kademlia/Search.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Search.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Search.cpp'; fi` amule-UDPFirewallTester.o: kademlia/kademlia/UDPFirewallTester.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-UDPFirewallTester.o -MD -MP -MF $(DEPDIR)/amule-UDPFirewallTester.Tpo -c -o amule-UDPFirewallTester.o `test -f 'kademlia/kademlia/UDPFirewallTester.cpp' || echo '$(srcdir)/'`kademlia/kademlia/UDPFirewallTester.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-UDPFirewallTester.Tpo $(DEPDIR)/amule-UDPFirewallTester.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/UDPFirewallTester.cpp' object='amule-UDPFirewallTester.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-UDPFirewallTester.o `test -f 'kademlia/kademlia/UDPFirewallTester.cpp' || echo '$(srcdir)/'`kademlia/kademlia/UDPFirewallTester.cpp amule-UDPFirewallTester.obj: kademlia/kademlia/UDPFirewallTester.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-UDPFirewallTester.obj -MD -MP -MF $(DEPDIR)/amule-UDPFirewallTester.Tpo -c -o amule-UDPFirewallTester.obj `if test -f 'kademlia/kademlia/UDPFirewallTester.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/UDPFirewallTester.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/UDPFirewallTester.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-UDPFirewallTester.Tpo $(DEPDIR)/amule-UDPFirewallTester.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/UDPFirewallTester.cpp' object='amule-UDPFirewallTester.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-UDPFirewallTester.obj `if test -f 'kademlia/kademlia/UDPFirewallTester.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/UDPFirewallTester.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/UDPFirewallTester.cpp'; fi` amule-KademliaUDPListener.o: kademlia/net/KademliaUDPListener.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-KademliaUDPListener.o -MD -MP -MF $(DEPDIR)/amule-KademliaUDPListener.Tpo -c -o amule-KademliaUDPListener.o `test -f 'kademlia/net/KademliaUDPListener.cpp' || echo '$(srcdir)/'`kademlia/net/KademliaUDPListener.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-KademliaUDPListener.Tpo $(DEPDIR)/amule-KademliaUDPListener.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/net/KademliaUDPListener.cpp' object='amule-KademliaUDPListener.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-KademliaUDPListener.o `test -f 'kademlia/net/KademliaUDPListener.cpp' || echo '$(srcdir)/'`kademlia/net/KademliaUDPListener.cpp amule-KademliaUDPListener.obj: kademlia/net/KademliaUDPListener.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-KademliaUDPListener.obj -MD -MP -MF $(DEPDIR)/amule-KademliaUDPListener.Tpo -c -o amule-KademliaUDPListener.obj `if test -f 'kademlia/net/KademliaUDPListener.cpp'; then $(CYGPATH_W) 'kademlia/net/KademliaUDPListener.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/net/KademliaUDPListener.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-KademliaUDPListener.Tpo $(DEPDIR)/amule-KademliaUDPListener.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/net/KademliaUDPListener.cpp' object='amule-KademliaUDPListener.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-KademliaUDPListener.obj `if test -f 'kademlia/net/KademliaUDPListener.cpp'; then $(CYGPATH_W) 'kademlia/net/KademliaUDPListener.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/net/KademliaUDPListener.cpp'; fi` amule-PacketTracking.o: kademlia/net/PacketTracking.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-PacketTracking.o -MD -MP -MF $(DEPDIR)/amule-PacketTracking.Tpo -c -o amule-PacketTracking.o `test -f 'kademlia/net/PacketTracking.cpp' || echo '$(srcdir)/'`kademlia/net/PacketTracking.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-PacketTracking.Tpo $(DEPDIR)/amule-PacketTracking.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/net/PacketTracking.cpp' object='amule-PacketTracking.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-PacketTracking.o `test -f 'kademlia/net/PacketTracking.cpp' || echo '$(srcdir)/'`kademlia/net/PacketTracking.cpp amule-PacketTracking.obj: kademlia/net/PacketTracking.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-PacketTracking.obj -MD -MP -MF $(DEPDIR)/amule-PacketTracking.Tpo -c -o amule-PacketTracking.obj `if test -f 'kademlia/net/PacketTracking.cpp'; then $(CYGPATH_W) 'kademlia/net/PacketTracking.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/net/PacketTracking.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-PacketTracking.Tpo $(DEPDIR)/amule-PacketTracking.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/net/PacketTracking.cpp' object='amule-PacketTracking.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-PacketTracking.obj `if test -f 'kademlia/net/PacketTracking.cpp'; then $(CYGPATH_W) 'kademlia/net/PacketTracking.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/net/PacketTracking.cpp'; fi` amule-Contact.o: kademlia/routing/Contact.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Contact.o -MD -MP -MF $(DEPDIR)/amule-Contact.Tpo -c -o amule-Contact.o `test -f 'kademlia/routing/Contact.cpp' || echo '$(srcdir)/'`kademlia/routing/Contact.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Contact.Tpo $(DEPDIR)/amule-Contact.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/routing/Contact.cpp' object='amule-Contact.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Contact.o `test -f 'kademlia/routing/Contact.cpp' || echo '$(srcdir)/'`kademlia/routing/Contact.cpp amule-Contact.obj: kademlia/routing/Contact.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Contact.obj -MD -MP -MF $(DEPDIR)/amule-Contact.Tpo -c -o amule-Contact.obj `if test -f 'kademlia/routing/Contact.cpp'; then $(CYGPATH_W) 'kademlia/routing/Contact.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/routing/Contact.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Contact.Tpo $(DEPDIR)/amule-Contact.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/routing/Contact.cpp' object='amule-Contact.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Contact.obj `if test -f 'kademlia/routing/Contact.cpp'; then $(CYGPATH_W) 'kademlia/routing/Contact.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/routing/Contact.cpp'; fi` amule-RoutingZone.o: kademlia/routing/RoutingZone.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-RoutingZone.o -MD -MP -MF $(DEPDIR)/amule-RoutingZone.Tpo -c -o amule-RoutingZone.o `test -f 'kademlia/routing/RoutingZone.cpp' || echo '$(srcdir)/'`kademlia/routing/RoutingZone.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-RoutingZone.Tpo $(DEPDIR)/amule-RoutingZone.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/routing/RoutingZone.cpp' object='amule-RoutingZone.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-RoutingZone.o `test -f 'kademlia/routing/RoutingZone.cpp' || echo '$(srcdir)/'`kademlia/routing/RoutingZone.cpp amule-RoutingZone.obj: kademlia/routing/RoutingZone.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-RoutingZone.obj -MD -MP -MF $(DEPDIR)/amule-RoutingZone.Tpo -c -o amule-RoutingZone.obj `if test -f 'kademlia/routing/RoutingZone.cpp'; then $(CYGPATH_W) 'kademlia/routing/RoutingZone.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/routing/RoutingZone.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-RoutingZone.Tpo $(DEPDIR)/amule-RoutingZone.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/routing/RoutingZone.cpp' object='amule-RoutingZone.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-RoutingZone.obj `if test -f 'kademlia/routing/RoutingZone.cpp'; then $(CYGPATH_W) 'kademlia/routing/RoutingZone.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/routing/RoutingZone.cpp'; fi` amule-AdunanzA.o: AdunanzA.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-AdunanzA.o -MD -MP -MF $(DEPDIR)/amule-AdunanzA.Tpo -c -o amule-AdunanzA.o `test -f 'AdunanzA.cpp' || echo '$(srcdir)/'`AdunanzA.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-AdunanzA.Tpo $(DEPDIR)/amule-AdunanzA.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AdunanzA.cpp' object='amule-AdunanzA.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-AdunanzA.o `test -f 'AdunanzA.cpp' || echo '$(srcdir)/'`AdunanzA.cpp amule-AdunanzA.obj: AdunanzA.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-AdunanzA.obj -MD -MP -MF $(DEPDIR)/amule-AdunanzA.Tpo -c -o amule-AdunanzA.obj `if test -f 'AdunanzA.cpp'; then $(CYGPATH_W) 'AdunanzA.cpp'; else $(CYGPATH_W) '$(srcdir)/AdunanzA.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-AdunanzA.Tpo $(DEPDIR)/amule-AdunanzA.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AdunanzA.cpp' object='amule-AdunanzA.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-AdunanzA.obj `if test -f 'AdunanzA.cpp'; then $(CYGPATH_W) 'AdunanzA.cpp'; else $(CYGPATH_W) '$(srcdir)/AdunanzA.cpp'; fi` amule-RemoteSettings.o: RemoteSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-RemoteSettings.o -MD -MP -MF $(DEPDIR)/amule-RemoteSettings.Tpo -c -o amule-RemoteSettings.o `test -f 'RemoteSettings.cpp' || echo '$(srcdir)/'`RemoteSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-RemoteSettings.Tpo $(DEPDIR)/amule-RemoteSettings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RemoteSettings.cpp' object='amule-RemoteSettings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-RemoteSettings.o `test -f 'RemoteSettings.cpp' || echo '$(srcdir)/'`RemoteSettings.cpp amule-RemoteSettings.obj: RemoteSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-RemoteSettings.obj -MD -MP -MF $(DEPDIR)/amule-RemoteSettings.Tpo -c -o amule-RemoteSettings.obj `if test -f 'RemoteSettings.cpp'; then $(CYGPATH_W) 'RemoteSettings.cpp'; else $(CYGPATH_W) '$(srcdir)/RemoteSettings.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-RemoteSettings.Tpo $(DEPDIR)/amule-RemoteSettings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RemoteSettings.cpp' object='amule-RemoteSettings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-RemoteSettings.obj `if test -f 'RemoteSettings.cpp'; then $(CYGPATH_W) 'RemoteSettings.cpp'; else $(CYGPATH_W) '$(srcdir)/RemoteSettings.cpp'; fi` amule-AdunanzAStreaming.o: AdunanzAStreaming.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-AdunanzAStreaming.o -MD -MP -MF $(DEPDIR)/amule-AdunanzAStreaming.Tpo -c -o amule-AdunanzAStreaming.o `test -f 'AdunanzAStreaming.cpp' || echo '$(srcdir)/'`AdunanzAStreaming.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-AdunanzAStreaming.Tpo $(DEPDIR)/amule-AdunanzAStreaming.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AdunanzAStreaming.cpp' object='amule-AdunanzAStreaming.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-AdunanzAStreaming.o `test -f 'AdunanzAStreaming.cpp' || echo '$(srcdir)/'`AdunanzAStreaming.cpp amule-AdunanzAStreaming.obj: AdunanzAStreaming.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-AdunanzAStreaming.obj -MD -MP -MF $(DEPDIR)/amule-AdunanzAStreaming.Tpo -c -o amule-AdunanzAStreaming.obj `if test -f 'AdunanzAStreaming.cpp'; then $(CYGPATH_W) 'AdunanzAStreaming.cpp'; else $(CYGPATH_W) '$(srcdir)/AdunanzAStreaming.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-AdunanzAStreaming.Tpo $(DEPDIR)/amule-AdunanzAStreaming.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AdunanzAStreaming.cpp' object='amule-AdunanzAStreaming.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-AdunanzAStreaming.obj `if test -f 'AdunanzAStreaming.cpp'; then $(CYGPATH_W) 'AdunanzAStreaming.cpp'; else $(CYGPATH_W) '$(srcdir)/AdunanzAStreaming.cpp'; fi` amule-amule-gui.o: amule-gui.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-amule-gui.o -MD -MP -MF $(DEPDIR)/amule-amule-gui.Tpo -c -o amule-amule-gui.o `test -f 'amule-gui.cpp' || echo '$(srcdir)/'`amule-gui.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-amule-gui.Tpo $(DEPDIR)/amule-amule-gui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amule-gui.cpp' object='amule-amule-gui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-amule-gui.o `test -f 'amule-gui.cpp' || echo '$(srcdir)/'`amule-gui.cpp amule-amule-gui.obj: amule-gui.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-amule-gui.obj -MD -MP -MF $(DEPDIR)/amule-amule-gui.Tpo -c -o amule-amule-gui.obj `if test -f 'amule-gui.cpp'; then $(CYGPATH_W) 'amule-gui.cpp'; else $(CYGPATH_W) '$(srcdir)/amule-gui.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-amule-gui.Tpo $(DEPDIR)/amule-amule-gui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amule-gui.cpp' object='amule-amule-gui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-amule-gui.obj `if test -f 'amule-gui.cpp'; then $(CYGPATH_W) 'amule-gui.cpp'; else $(CYGPATH_W) '$(srcdir)/amule-gui.cpp'; fi` amule-amuleDlg.o: amuleDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-amuleDlg.o -MD -MP -MF $(DEPDIR)/amule-amuleDlg.Tpo -c -o amule-amuleDlg.o `test -f 'amuleDlg.cpp' || echo '$(srcdir)/'`amuleDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-amuleDlg.Tpo $(DEPDIR)/amule-amuleDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuleDlg.cpp' object='amule-amuleDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-amuleDlg.o `test -f 'amuleDlg.cpp' || echo '$(srcdir)/'`amuleDlg.cpp amule-amuleDlg.obj: amuleDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-amuleDlg.obj -MD -MP -MF $(DEPDIR)/amule-amuleDlg.Tpo -c -o amule-amuleDlg.obj `if test -f 'amuleDlg.cpp'; then $(CYGPATH_W) 'amuleDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/amuleDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-amuleDlg.Tpo $(DEPDIR)/amule-amuleDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuleDlg.cpp' object='amule-amuleDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-amuleDlg.obj `if test -f 'amuleDlg.cpp'; then $(CYGPATH_W) 'amuleDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/amuleDlg.cpp'; fi` amule-AddFriend.o: AddFriend.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-AddFriend.o -MD -MP -MF $(DEPDIR)/amule-AddFriend.Tpo -c -o amule-AddFriend.o `test -f 'AddFriend.cpp' || echo '$(srcdir)/'`AddFriend.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-AddFriend.Tpo $(DEPDIR)/amule-AddFriend.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AddFriend.cpp' object='amule-AddFriend.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-AddFriend.o `test -f 'AddFriend.cpp' || echo '$(srcdir)/'`AddFriend.cpp amule-AddFriend.obj: AddFriend.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-AddFriend.obj -MD -MP -MF $(DEPDIR)/amule-AddFriend.Tpo -c -o amule-AddFriend.obj `if test -f 'AddFriend.cpp'; then $(CYGPATH_W) 'AddFriend.cpp'; else $(CYGPATH_W) '$(srcdir)/AddFriend.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-AddFriend.Tpo $(DEPDIR)/amule-AddFriend.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AddFriend.cpp' object='amule-AddFriend.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-AddFriend.obj `if test -f 'AddFriend.cpp'; then $(CYGPATH_W) 'AddFriend.cpp'; else $(CYGPATH_W) '$(srcdir)/AddFriend.cpp'; fi` amule-CatDialog.o: CatDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CatDialog.o -MD -MP -MF $(DEPDIR)/amule-CatDialog.Tpo -c -o amule-CatDialog.o `test -f 'CatDialog.cpp' || echo '$(srcdir)/'`CatDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CatDialog.Tpo $(DEPDIR)/amule-CatDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CatDialog.cpp' object='amule-CatDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CatDialog.o `test -f 'CatDialog.cpp' || echo '$(srcdir)/'`CatDialog.cpp amule-CatDialog.obj: CatDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CatDialog.obj -MD -MP -MF $(DEPDIR)/amule-CatDialog.Tpo -c -o amule-CatDialog.obj `if test -f 'CatDialog.cpp'; then $(CYGPATH_W) 'CatDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/CatDialog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CatDialog.Tpo $(DEPDIR)/amule-CatDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CatDialog.cpp' object='amule-CatDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CatDialog.obj `if test -f 'CatDialog.cpp'; then $(CYGPATH_W) 'CatDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/CatDialog.cpp'; fi` amule-ChatSelector.o: ChatSelector.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ChatSelector.o -MD -MP -MF $(DEPDIR)/amule-ChatSelector.Tpo -c -o amule-ChatSelector.o `test -f 'ChatSelector.cpp' || echo '$(srcdir)/'`ChatSelector.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ChatSelector.Tpo $(DEPDIR)/amule-ChatSelector.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ChatSelector.cpp' object='amule-ChatSelector.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ChatSelector.o `test -f 'ChatSelector.cpp' || echo '$(srcdir)/'`ChatSelector.cpp amule-ChatSelector.obj: ChatSelector.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ChatSelector.obj -MD -MP -MF $(DEPDIR)/amule-ChatSelector.Tpo -c -o amule-ChatSelector.obj `if test -f 'ChatSelector.cpp'; then $(CYGPATH_W) 'ChatSelector.cpp'; else $(CYGPATH_W) '$(srcdir)/ChatSelector.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ChatSelector.Tpo $(DEPDIR)/amule-ChatSelector.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ChatSelector.cpp' object='amule-ChatSelector.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ChatSelector.obj `if test -f 'ChatSelector.cpp'; then $(CYGPATH_W) 'ChatSelector.cpp'; else $(CYGPATH_W) '$(srcdir)/ChatSelector.cpp'; fi` amule-ChatWnd.o: ChatWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ChatWnd.o -MD -MP -MF $(DEPDIR)/amule-ChatWnd.Tpo -c -o amule-ChatWnd.o `test -f 'ChatWnd.cpp' || echo '$(srcdir)/'`ChatWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ChatWnd.Tpo $(DEPDIR)/amule-ChatWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ChatWnd.cpp' object='amule-ChatWnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ChatWnd.o `test -f 'ChatWnd.cpp' || echo '$(srcdir)/'`ChatWnd.cpp amule-ChatWnd.obj: ChatWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ChatWnd.obj -MD -MP -MF $(DEPDIR)/amule-ChatWnd.Tpo -c -o amule-ChatWnd.obj `if test -f 'ChatWnd.cpp'; then $(CYGPATH_W) 'ChatWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/ChatWnd.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ChatWnd.Tpo $(DEPDIR)/amule-ChatWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ChatWnd.cpp' object='amule-ChatWnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ChatWnd.obj `if test -f 'ChatWnd.cpp'; then $(CYGPATH_W) 'ChatWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/ChatWnd.cpp'; fi` amule-CommentDialog.o: CommentDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CommentDialog.o -MD -MP -MF $(DEPDIR)/amule-CommentDialog.Tpo -c -o amule-CommentDialog.o `test -f 'CommentDialog.cpp' || echo '$(srcdir)/'`CommentDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CommentDialog.Tpo $(DEPDIR)/amule-CommentDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CommentDialog.cpp' object='amule-CommentDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CommentDialog.o `test -f 'CommentDialog.cpp' || echo '$(srcdir)/'`CommentDialog.cpp amule-CommentDialog.obj: CommentDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CommentDialog.obj -MD -MP -MF $(DEPDIR)/amule-CommentDialog.Tpo -c -o amule-CommentDialog.obj `if test -f 'CommentDialog.cpp'; then $(CYGPATH_W) 'CommentDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/CommentDialog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CommentDialog.Tpo $(DEPDIR)/amule-CommentDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CommentDialog.cpp' object='amule-CommentDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CommentDialog.obj `if test -f 'CommentDialog.cpp'; then $(CYGPATH_W) 'CommentDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/CommentDialog.cpp'; fi` amule-CommentDialogLst.o: CommentDialogLst.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CommentDialogLst.o -MD -MP -MF $(DEPDIR)/amule-CommentDialogLst.Tpo -c -o amule-CommentDialogLst.o `test -f 'CommentDialogLst.cpp' || echo '$(srcdir)/'`CommentDialogLst.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CommentDialogLst.Tpo $(DEPDIR)/amule-CommentDialogLst.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CommentDialogLst.cpp' object='amule-CommentDialogLst.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CommentDialogLst.o `test -f 'CommentDialogLst.cpp' || echo '$(srcdir)/'`CommentDialogLst.cpp amule-CommentDialogLst.obj: CommentDialogLst.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-CommentDialogLst.obj -MD -MP -MF $(DEPDIR)/amule-CommentDialogLst.Tpo -c -o amule-CommentDialogLst.obj `if test -f 'CommentDialogLst.cpp'; then $(CYGPATH_W) 'CommentDialogLst.cpp'; else $(CYGPATH_W) '$(srcdir)/CommentDialogLst.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-CommentDialogLst.Tpo $(DEPDIR)/amule-CommentDialogLst.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CommentDialogLst.cpp' object='amule-CommentDialogLst.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-CommentDialogLst.obj `if test -f 'CommentDialogLst.cpp'; then $(CYGPATH_W) 'CommentDialogLst.cpp'; else $(CYGPATH_W) '$(srcdir)/CommentDialogLst.cpp'; fi` amule-GenericClientListCtrl.o: GenericClientListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-GenericClientListCtrl.o -MD -MP -MF $(DEPDIR)/amule-GenericClientListCtrl.Tpo -c -o amule-GenericClientListCtrl.o `test -f 'GenericClientListCtrl.cpp' || echo '$(srcdir)/'`GenericClientListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-GenericClientListCtrl.Tpo $(DEPDIR)/amule-GenericClientListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GenericClientListCtrl.cpp' object='amule-GenericClientListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-GenericClientListCtrl.o `test -f 'GenericClientListCtrl.cpp' || echo '$(srcdir)/'`GenericClientListCtrl.cpp amule-GenericClientListCtrl.obj: GenericClientListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-GenericClientListCtrl.obj -MD -MP -MF $(DEPDIR)/amule-GenericClientListCtrl.Tpo -c -o amule-GenericClientListCtrl.obj `if test -f 'GenericClientListCtrl.cpp'; then $(CYGPATH_W) 'GenericClientListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/GenericClientListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-GenericClientListCtrl.Tpo $(DEPDIR)/amule-GenericClientListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GenericClientListCtrl.cpp' object='amule-GenericClientListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-GenericClientListCtrl.obj `if test -f 'GenericClientListCtrl.cpp'; then $(CYGPATH_W) 'GenericClientListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/GenericClientListCtrl.cpp'; fi` amule-ClientDetailDialog.o: ClientDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientDetailDialog.o -MD -MP -MF $(DEPDIR)/amule-ClientDetailDialog.Tpo -c -o amule-ClientDetailDialog.o `test -f 'ClientDetailDialog.cpp' || echo '$(srcdir)/'`ClientDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientDetailDialog.Tpo $(DEPDIR)/amule-ClientDetailDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientDetailDialog.cpp' object='amule-ClientDetailDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientDetailDialog.o `test -f 'ClientDetailDialog.cpp' || echo '$(srcdir)/'`ClientDetailDialog.cpp amule-ClientDetailDialog.obj: ClientDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientDetailDialog.obj -MD -MP -MF $(DEPDIR)/amule-ClientDetailDialog.Tpo -c -o amule-ClientDetailDialog.obj `if test -f 'ClientDetailDialog.cpp'; then $(CYGPATH_W) 'ClientDetailDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientDetailDialog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientDetailDialog.Tpo $(DEPDIR)/amule-ClientDetailDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientDetailDialog.cpp' object='amule-ClientDetailDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientDetailDialog.obj `if test -f 'ClientDetailDialog.cpp'; then $(CYGPATH_W) 'ClientDetailDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientDetailDialog.cpp'; fi` amule-DirectoryTreeCtrl.o: DirectoryTreeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-DirectoryTreeCtrl.o -MD -MP -MF $(DEPDIR)/amule-DirectoryTreeCtrl.Tpo -c -o amule-DirectoryTreeCtrl.o `test -f 'DirectoryTreeCtrl.cpp' || echo '$(srcdir)/'`DirectoryTreeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-DirectoryTreeCtrl.Tpo $(DEPDIR)/amule-DirectoryTreeCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DirectoryTreeCtrl.cpp' object='amule-DirectoryTreeCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-DirectoryTreeCtrl.o `test -f 'DirectoryTreeCtrl.cpp' || echo '$(srcdir)/'`DirectoryTreeCtrl.cpp amule-DirectoryTreeCtrl.obj: DirectoryTreeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-DirectoryTreeCtrl.obj -MD -MP -MF $(DEPDIR)/amule-DirectoryTreeCtrl.Tpo -c -o amule-DirectoryTreeCtrl.obj `if test -f 'DirectoryTreeCtrl.cpp'; then $(CYGPATH_W) 'DirectoryTreeCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/DirectoryTreeCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-DirectoryTreeCtrl.Tpo $(DEPDIR)/amule-DirectoryTreeCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DirectoryTreeCtrl.cpp' object='amule-DirectoryTreeCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-DirectoryTreeCtrl.obj `if test -f 'DirectoryTreeCtrl.cpp'; then $(CYGPATH_W) 'DirectoryTreeCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/DirectoryTreeCtrl.cpp'; fi` amule-FileDetailDialog.o: FileDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-FileDetailDialog.o -MD -MP -MF $(DEPDIR)/amule-FileDetailDialog.Tpo -c -o amule-FileDetailDialog.o `test -f 'FileDetailDialog.cpp' || echo '$(srcdir)/'`FileDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-FileDetailDialog.Tpo $(DEPDIR)/amule-FileDetailDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FileDetailDialog.cpp' object='amule-FileDetailDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-FileDetailDialog.o `test -f 'FileDetailDialog.cpp' || echo '$(srcdir)/'`FileDetailDialog.cpp amule-FileDetailDialog.obj: FileDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-FileDetailDialog.obj -MD -MP -MF $(DEPDIR)/amule-FileDetailDialog.Tpo -c -o amule-FileDetailDialog.obj `if test -f 'FileDetailDialog.cpp'; then $(CYGPATH_W) 'FileDetailDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/FileDetailDialog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-FileDetailDialog.Tpo $(DEPDIR)/amule-FileDetailDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FileDetailDialog.cpp' object='amule-FileDetailDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-FileDetailDialog.obj `if test -f 'FileDetailDialog.cpp'; then $(CYGPATH_W) 'FileDetailDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/FileDetailDialog.cpp'; fi` amule-KadDlg.o: KadDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-KadDlg.o -MD -MP -MF $(DEPDIR)/amule-KadDlg.Tpo -c -o amule-KadDlg.o `test -f 'KadDlg.cpp' || echo '$(srcdir)/'`KadDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-KadDlg.Tpo $(DEPDIR)/amule-KadDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KadDlg.cpp' object='amule-KadDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-KadDlg.o `test -f 'KadDlg.cpp' || echo '$(srcdir)/'`KadDlg.cpp amule-KadDlg.obj: KadDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-KadDlg.obj -MD -MP -MF $(DEPDIR)/amule-KadDlg.Tpo -c -o amule-KadDlg.obj `if test -f 'KadDlg.cpp'; then $(CYGPATH_W) 'KadDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/KadDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-KadDlg.Tpo $(DEPDIR)/amule-KadDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KadDlg.cpp' object='amule-KadDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-KadDlg.obj `if test -f 'KadDlg.cpp'; then $(CYGPATH_W) 'KadDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/KadDlg.cpp'; fi` amule-OScopeCtrl.o: OScopeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-OScopeCtrl.o -MD -MP -MF $(DEPDIR)/amule-OScopeCtrl.Tpo -c -o amule-OScopeCtrl.o `test -f 'OScopeCtrl.cpp' || echo '$(srcdir)/'`OScopeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-OScopeCtrl.Tpo $(DEPDIR)/amule-OScopeCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OScopeCtrl.cpp' object='amule-OScopeCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-OScopeCtrl.o `test -f 'OScopeCtrl.cpp' || echo '$(srcdir)/'`OScopeCtrl.cpp amule-OScopeCtrl.obj: OScopeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-OScopeCtrl.obj -MD -MP -MF $(DEPDIR)/amule-OScopeCtrl.Tpo -c -o amule-OScopeCtrl.obj `if test -f 'OScopeCtrl.cpp'; then $(CYGPATH_W) 'OScopeCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/OScopeCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-OScopeCtrl.Tpo $(DEPDIR)/amule-OScopeCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OScopeCtrl.cpp' object='amule-OScopeCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-OScopeCtrl.obj `if test -f 'OScopeCtrl.cpp'; then $(CYGPATH_W) 'OScopeCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/OScopeCtrl.cpp'; fi` amule-PrefsUnifiedDlg.o: PrefsUnifiedDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-PrefsUnifiedDlg.o -MD -MP -MF $(DEPDIR)/amule-PrefsUnifiedDlg.Tpo -c -o amule-PrefsUnifiedDlg.o `test -f 'PrefsUnifiedDlg.cpp' || echo '$(srcdir)/'`PrefsUnifiedDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-PrefsUnifiedDlg.Tpo $(DEPDIR)/amule-PrefsUnifiedDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PrefsUnifiedDlg.cpp' object='amule-PrefsUnifiedDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-PrefsUnifiedDlg.o `test -f 'PrefsUnifiedDlg.cpp' || echo '$(srcdir)/'`PrefsUnifiedDlg.cpp amule-PrefsUnifiedDlg.obj: PrefsUnifiedDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-PrefsUnifiedDlg.obj -MD -MP -MF $(DEPDIR)/amule-PrefsUnifiedDlg.Tpo -c -o amule-PrefsUnifiedDlg.obj `if test -f 'PrefsUnifiedDlg.cpp'; then $(CYGPATH_W) 'PrefsUnifiedDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/PrefsUnifiedDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-PrefsUnifiedDlg.Tpo $(DEPDIR)/amule-PrefsUnifiedDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PrefsUnifiedDlg.cpp' object='amule-PrefsUnifiedDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-PrefsUnifiedDlg.obj `if test -f 'PrefsUnifiedDlg.cpp'; then $(CYGPATH_W) 'PrefsUnifiedDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/PrefsUnifiedDlg.cpp'; fi` amule-SearchDlg.o: SearchDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SearchDlg.o -MD -MP -MF $(DEPDIR)/amule-SearchDlg.Tpo -c -o amule-SearchDlg.o `test -f 'SearchDlg.cpp' || echo '$(srcdir)/'`SearchDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SearchDlg.Tpo $(DEPDIR)/amule-SearchDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchDlg.cpp' object='amule-SearchDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SearchDlg.o `test -f 'SearchDlg.cpp' || echo '$(srcdir)/'`SearchDlg.cpp amule-SearchDlg.obj: SearchDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SearchDlg.obj -MD -MP -MF $(DEPDIR)/amule-SearchDlg.Tpo -c -o amule-SearchDlg.obj `if test -f 'SearchDlg.cpp'; then $(CYGPATH_W) 'SearchDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SearchDlg.Tpo $(DEPDIR)/amule-SearchDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchDlg.cpp' object='amule-SearchDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SearchDlg.obj `if test -f 'SearchDlg.cpp'; then $(CYGPATH_W) 'SearchDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchDlg.cpp'; fi` amule-ServerWnd.o: ServerWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerWnd.o -MD -MP -MF $(DEPDIR)/amule-ServerWnd.Tpo -c -o amule-ServerWnd.o `test -f 'ServerWnd.cpp' || echo '$(srcdir)/'`ServerWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerWnd.Tpo $(DEPDIR)/amule-ServerWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerWnd.cpp' object='amule-ServerWnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerWnd.o `test -f 'ServerWnd.cpp' || echo '$(srcdir)/'`ServerWnd.cpp amule-ServerWnd.obj: ServerWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerWnd.obj -MD -MP -MF $(DEPDIR)/amule-ServerWnd.Tpo -c -o amule-ServerWnd.obj `if test -f 'ServerWnd.cpp'; then $(CYGPATH_W) 'ServerWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerWnd.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerWnd.Tpo $(DEPDIR)/amule-ServerWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerWnd.cpp' object='amule-ServerWnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerWnd.obj `if test -f 'ServerWnd.cpp'; then $(CYGPATH_W) 'ServerWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerWnd.cpp'; fi` amule-SharedFilesWnd.o: SharedFilesWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SharedFilesWnd.o -MD -MP -MF $(DEPDIR)/amule-SharedFilesWnd.Tpo -c -o amule-SharedFilesWnd.o `test -f 'SharedFilesWnd.cpp' || echo '$(srcdir)/'`SharedFilesWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SharedFilesWnd.Tpo $(DEPDIR)/amule-SharedFilesWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilesWnd.cpp' object='amule-SharedFilesWnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SharedFilesWnd.o `test -f 'SharedFilesWnd.cpp' || echo '$(srcdir)/'`SharedFilesWnd.cpp amule-SharedFilesWnd.obj: SharedFilesWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SharedFilesWnd.obj -MD -MP -MF $(DEPDIR)/amule-SharedFilesWnd.Tpo -c -o amule-SharedFilesWnd.obj `if test -f 'SharedFilesWnd.cpp'; then $(CYGPATH_W) 'SharedFilesWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilesWnd.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SharedFilesWnd.Tpo $(DEPDIR)/amule-SharedFilesWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilesWnd.cpp' object='amule-SharedFilesWnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SharedFilesWnd.obj `if test -f 'SharedFilesWnd.cpp'; then $(CYGPATH_W) 'SharedFilesWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilesWnd.cpp'; fi` amule-StatisticsDlg.o: StatisticsDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-StatisticsDlg.o -MD -MP -MF $(DEPDIR)/amule-StatisticsDlg.Tpo -c -o amule-StatisticsDlg.o `test -f 'StatisticsDlg.cpp' || echo '$(srcdir)/'`StatisticsDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-StatisticsDlg.Tpo $(DEPDIR)/amule-StatisticsDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StatisticsDlg.cpp' object='amule-StatisticsDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-StatisticsDlg.o `test -f 'StatisticsDlg.cpp' || echo '$(srcdir)/'`StatisticsDlg.cpp amule-StatisticsDlg.obj: StatisticsDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-StatisticsDlg.obj -MD -MP -MF $(DEPDIR)/amule-StatisticsDlg.Tpo -c -o amule-StatisticsDlg.obj `if test -f 'StatisticsDlg.cpp'; then $(CYGPATH_W) 'StatisticsDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/StatisticsDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-StatisticsDlg.Tpo $(DEPDIR)/amule-StatisticsDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StatisticsDlg.cpp' object='amule-StatisticsDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-StatisticsDlg.obj `if test -f 'StatisticsDlg.cpp'; then $(CYGPATH_W) 'StatisticsDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/StatisticsDlg.cpp'; fi` amule-SearchListCtrl.o: SearchListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SearchListCtrl.o -MD -MP -MF $(DEPDIR)/amule-SearchListCtrl.Tpo -c -o amule-SearchListCtrl.o `test -f 'SearchListCtrl.cpp' || echo '$(srcdir)/'`SearchListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SearchListCtrl.Tpo $(DEPDIR)/amule-SearchListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchListCtrl.cpp' object='amule-SearchListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SearchListCtrl.o `test -f 'SearchListCtrl.cpp' || echo '$(srcdir)/'`SearchListCtrl.cpp amule-SearchListCtrl.obj: SearchListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SearchListCtrl.obj -MD -MP -MF $(DEPDIR)/amule-SearchListCtrl.Tpo -c -o amule-SearchListCtrl.obj `if test -f 'SearchListCtrl.cpp'; then $(CYGPATH_W) 'SearchListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SearchListCtrl.Tpo $(DEPDIR)/amule-SearchListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchListCtrl.cpp' object='amule-SearchListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SearchListCtrl.obj `if test -f 'SearchListCtrl.cpp'; then $(CYGPATH_W) 'SearchListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchListCtrl.cpp'; fi` amule-DownloadListCtrl.o: DownloadListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-DownloadListCtrl.o -MD -MP -MF $(DEPDIR)/amule-DownloadListCtrl.Tpo -c -o amule-DownloadListCtrl.o `test -f 'DownloadListCtrl.cpp' || echo '$(srcdir)/'`DownloadListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-DownloadListCtrl.Tpo $(DEPDIR)/amule-DownloadListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadListCtrl.cpp' object='amule-DownloadListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-DownloadListCtrl.o `test -f 'DownloadListCtrl.cpp' || echo '$(srcdir)/'`DownloadListCtrl.cpp amule-DownloadListCtrl.obj: DownloadListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-DownloadListCtrl.obj -MD -MP -MF $(DEPDIR)/amule-DownloadListCtrl.Tpo -c -o amule-DownloadListCtrl.obj `if test -f 'DownloadListCtrl.cpp'; then $(CYGPATH_W) 'DownloadListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-DownloadListCtrl.Tpo $(DEPDIR)/amule-DownloadListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadListCtrl.cpp' object='amule-DownloadListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-DownloadListCtrl.obj `if test -f 'DownloadListCtrl.cpp'; then $(CYGPATH_W) 'DownloadListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadListCtrl.cpp'; fi` amule-SourceListCtrl.o: SourceListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SourceListCtrl.o -MD -MP -MF $(DEPDIR)/amule-SourceListCtrl.Tpo -c -o amule-SourceListCtrl.o `test -f 'SourceListCtrl.cpp' || echo '$(srcdir)/'`SourceListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SourceListCtrl.Tpo $(DEPDIR)/amule-SourceListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SourceListCtrl.cpp' object='amule-SourceListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SourceListCtrl.o `test -f 'SourceListCtrl.cpp' || echo '$(srcdir)/'`SourceListCtrl.cpp amule-SourceListCtrl.obj: SourceListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SourceListCtrl.obj -MD -MP -MF $(DEPDIR)/amule-SourceListCtrl.Tpo -c -o amule-SourceListCtrl.obj `if test -f 'SourceListCtrl.cpp'; then $(CYGPATH_W) 'SourceListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SourceListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SourceListCtrl.Tpo $(DEPDIR)/amule-SourceListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SourceListCtrl.cpp' object='amule-SourceListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SourceListCtrl.obj `if test -f 'SourceListCtrl.cpp'; then $(CYGPATH_W) 'SourceListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SourceListCtrl.cpp'; fi` amule-SharedFilePeersListCtrl.o: SharedFilePeersListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SharedFilePeersListCtrl.o -MD -MP -MF $(DEPDIR)/amule-SharedFilePeersListCtrl.Tpo -c -o amule-SharedFilePeersListCtrl.o `test -f 'SharedFilePeersListCtrl.cpp' || echo '$(srcdir)/'`SharedFilePeersListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SharedFilePeersListCtrl.Tpo $(DEPDIR)/amule-SharedFilePeersListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilePeersListCtrl.cpp' object='amule-SharedFilePeersListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SharedFilePeersListCtrl.o `test -f 'SharedFilePeersListCtrl.cpp' || echo '$(srcdir)/'`SharedFilePeersListCtrl.cpp amule-SharedFilePeersListCtrl.obj: SharedFilePeersListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SharedFilePeersListCtrl.obj -MD -MP -MF $(DEPDIR)/amule-SharedFilePeersListCtrl.Tpo -c -o amule-SharedFilePeersListCtrl.obj `if test -f 'SharedFilePeersListCtrl.cpp'; then $(CYGPATH_W) 'SharedFilePeersListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilePeersListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SharedFilePeersListCtrl.Tpo $(DEPDIR)/amule-SharedFilePeersListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilePeersListCtrl.cpp' object='amule-SharedFilePeersListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SharedFilePeersListCtrl.obj `if test -f 'SharedFilePeersListCtrl.cpp'; then $(CYGPATH_W) 'SharedFilePeersListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilePeersListCtrl.cpp'; fi` amule-FriendListCtrl.o: FriendListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-FriendListCtrl.o -MD -MP -MF $(DEPDIR)/amule-FriendListCtrl.Tpo -c -o amule-FriendListCtrl.o `test -f 'FriendListCtrl.cpp' || echo '$(srcdir)/'`FriendListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-FriendListCtrl.Tpo $(DEPDIR)/amule-FriendListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FriendListCtrl.cpp' object='amule-FriendListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-FriendListCtrl.o `test -f 'FriendListCtrl.cpp' || echo '$(srcdir)/'`FriendListCtrl.cpp amule-FriendListCtrl.obj: FriendListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-FriendListCtrl.obj -MD -MP -MF $(DEPDIR)/amule-FriendListCtrl.Tpo -c -o amule-FriendListCtrl.obj `if test -f 'FriendListCtrl.cpp'; then $(CYGPATH_W) 'FriendListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/FriendListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-FriendListCtrl.Tpo $(DEPDIR)/amule-FriendListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FriendListCtrl.cpp' object='amule-FriendListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-FriendListCtrl.obj `if test -f 'FriendListCtrl.cpp'; then $(CYGPATH_W) 'FriendListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/FriendListCtrl.cpp'; fi` amule-ServerListCtrl.o: ServerListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerListCtrl.o -MD -MP -MF $(DEPDIR)/amule-ServerListCtrl.Tpo -c -o amule-ServerListCtrl.o `test -f 'ServerListCtrl.cpp' || echo '$(srcdir)/'`ServerListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerListCtrl.Tpo $(DEPDIR)/amule-ServerListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerListCtrl.cpp' object='amule-ServerListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerListCtrl.o `test -f 'ServerListCtrl.cpp' || echo '$(srcdir)/'`ServerListCtrl.cpp amule-ServerListCtrl.obj: ServerListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ServerListCtrl.obj -MD -MP -MF $(DEPDIR)/amule-ServerListCtrl.Tpo -c -o amule-ServerListCtrl.obj `if test -f 'ServerListCtrl.cpp'; then $(CYGPATH_W) 'ServerListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ServerListCtrl.Tpo $(DEPDIR)/amule-ServerListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerListCtrl.cpp' object='amule-ServerListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ServerListCtrl.obj `if test -f 'ServerListCtrl.cpp'; then $(CYGPATH_W) 'ServerListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerListCtrl.cpp'; fi` amule-SharedFilesCtrl.o: SharedFilesCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SharedFilesCtrl.o -MD -MP -MF $(DEPDIR)/amule-SharedFilesCtrl.Tpo -c -o amule-SharedFilesCtrl.o `test -f 'SharedFilesCtrl.cpp' || echo '$(srcdir)/'`SharedFilesCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SharedFilesCtrl.Tpo $(DEPDIR)/amule-SharedFilesCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilesCtrl.cpp' object='amule-SharedFilesCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SharedFilesCtrl.o `test -f 'SharedFilesCtrl.cpp' || echo '$(srcdir)/'`SharedFilesCtrl.cpp amule-SharedFilesCtrl.obj: SharedFilesCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-SharedFilesCtrl.obj -MD -MP -MF $(DEPDIR)/amule-SharedFilesCtrl.Tpo -c -o amule-SharedFilesCtrl.obj `if test -f 'SharedFilesCtrl.cpp'; then $(CYGPATH_W) 'SharedFilesCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilesCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-SharedFilesCtrl.Tpo $(DEPDIR)/amule-SharedFilesCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilesCtrl.cpp' object='amule-SharedFilesCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-SharedFilesCtrl.obj `if test -f 'SharedFilesCtrl.cpp'; then $(CYGPATH_W) 'SharedFilesCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilesCtrl.cpp'; fi` amule-MuleTrayIcon.o: MuleTrayIcon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-MuleTrayIcon.o -MD -MP -MF $(DEPDIR)/amule-MuleTrayIcon.Tpo -c -o amule-MuleTrayIcon.o `test -f 'MuleTrayIcon.cpp' || echo '$(srcdir)/'`MuleTrayIcon.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-MuleTrayIcon.Tpo $(DEPDIR)/amule-MuleTrayIcon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleTrayIcon.cpp' object='amule-MuleTrayIcon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-MuleTrayIcon.o `test -f 'MuleTrayIcon.cpp' || echo '$(srcdir)/'`MuleTrayIcon.cpp amule-MuleTrayIcon.obj: MuleTrayIcon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-MuleTrayIcon.obj -MD -MP -MF $(DEPDIR)/amule-MuleTrayIcon.Tpo -c -o amule-MuleTrayIcon.obj `if test -f 'MuleTrayIcon.cpp'; then $(CYGPATH_W) 'MuleTrayIcon.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleTrayIcon.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-MuleTrayIcon.Tpo $(DEPDIR)/amule-MuleTrayIcon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleTrayIcon.cpp' object='amule-MuleTrayIcon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-MuleTrayIcon.obj `if test -f 'MuleTrayIcon.cpp'; then $(CYGPATH_W) 'MuleTrayIcon.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleTrayIcon.cpp'; fi` amule-TransferWnd.o: TransferWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-TransferWnd.o -MD -MP -MF $(DEPDIR)/amule-TransferWnd.Tpo -c -o amule-TransferWnd.o `test -f 'TransferWnd.cpp' || echo '$(srcdir)/'`TransferWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-TransferWnd.Tpo $(DEPDIR)/amule-TransferWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TransferWnd.cpp' object='amule-TransferWnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-TransferWnd.o `test -f 'TransferWnd.cpp' || echo '$(srcdir)/'`TransferWnd.cpp amule-TransferWnd.obj: TransferWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-TransferWnd.obj -MD -MP -MF $(DEPDIR)/amule-TransferWnd.Tpo -c -o amule-TransferWnd.obj `if test -f 'TransferWnd.cpp'; then $(CYGPATH_W) 'TransferWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/TransferWnd.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-TransferWnd.Tpo $(DEPDIR)/amule-TransferWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TransferWnd.cpp' object='amule-TransferWnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-TransferWnd.obj `if test -f 'TransferWnd.cpp'; then $(CYGPATH_W) 'TransferWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/TransferWnd.cpp'; fi` amule-amuleAppCommon.o: amuleAppCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-amuleAppCommon.o -MD -MP -MF $(DEPDIR)/amule-amuleAppCommon.Tpo -c -o amule-amuleAppCommon.o `test -f 'amuleAppCommon.cpp' || echo '$(srcdir)/'`amuleAppCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-amuleAppCommon.Tpo $(DEPDIR)/amule-amuleAppCommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuleAppCommon.cpp' object='amule-amuleAppCommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-amuleAppCommon.o `test -f 'amuleAppCommon.cpp' || echo '$(srcdir)/'`amuleAppCommon.cpp amule-amuleAppCommon.obj: amuleAppCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-amuleAppCommon.obj -MD -MP -MF $(DEPDIR)/amule-amuleAppCommon.Tpo -c -o amule-amuleAppCommon.obj `if test -f 'amuleAppCommon.cpp'; then $(CYGPATH_W) 'amuleAppCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/amuleAppCommon.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-amuleAppCommon.Tpo $(DEPDIR)/amule-amuleAppCommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuleAppCommon.cpp' object='amule-amuleAppCommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-amuleAppCommon.obj `if test -f 'amuleAppCommon.cpp'; then $(CYGPATH_W) 'amuleAppCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/amuleAppCommon.cpp'; fi` amule-ClientRef.o: ClientRef.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientRef.o -MD -MP -MF $(DEPDIR)/amule-ClientRef.Tpo -c -o amule-ClientRef.o `test -f 'ClientRef.cpp' || echo '$(srcdir)/'`ClientRef.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientRef.Tpo $(DEPDIR)/amule-ClientRef.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientRef.cpp' object='amule-ClientRef.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientRef.o `test -f 'ClientRef.cpp' || echo '$(srcdir)/'`ClientRef.cpp amule-ClientRef.obj: ClientRef.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ClientRef.obj -MD -MP -MF $(DEPDIR)/amule-ClientRef.Tpo -c -o amule-ClientRef.obj `if test -f 'ClientRef.cpp'; then $(CYGPATH_W) 'ClientRef.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientRef.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ClientRef.Tpo $(DEPDIR)/amule-ClientRef.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientRef.cpp' object='amule-ClientRef.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ClientRef.obj `if test -f 'ClientRef.cpp'; then $(CYGPATH_W) 'ClientRef.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientRef.cpp'; fi` amule-DataToText.o: DataToText.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-DataToText.o -MD -MP -MF $(DEPDIR)/amule-DataToText.Tpo -c -o amule-DataToText.o `test -f 'DataToText.cpp' || echo '$(srcdir)/'`DataToText.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-DataToText.Tpo $(DEPDIR)/amule-DataToText.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DataToText.cpp' object='amule-DataToText.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-DataToText.o `test -f 'DataToText.cpp' || echo '$(srcdir)/'`DataToText.cpp amule-DataToText.obj: DataToText.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-DataToText.obj -MD -MP -MF $(DEPDIR)/amule-DataToText.Tpo -c -o amule-DataToText.obj `if test -f 'DataToText.cpp'; then $(CYGPATH_W) 'DataToText.cpp'; else $(CYGPATH_W) '$(srcdir)/DataToText.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-DataToText.Tpo $(DEPDIR)/amule-DataToText.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DataToText.cpp' object='amule-DataToText.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-DataToText.obj `if test -f 'DataToText.cpp'; then $(CYGPATH_W) 'DataToText.cpp'; else $(CYGPATH_W) '$(srcdir)/DataToText.cpp'; fi` amule-ECSpecialMuleTags.o: ECSpecialMuleTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ECSpecialMuleTags.o -MD -MP -MF $(DEPDIR)/amule-ECSpecialMuleTags.Tpo -c -o amule-ECSpecialMuleTags.o `test -f 'ECSpecialMuleTags.cpp' || echo '$(srcdir)/'`ECSpecialMuleTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ECSpecialMuleTags.Tpo $(DEPDIR)/amule-ECSpecialMuleTags.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ECSpecialMuleTags.cpp' object='amule-ECSpecialMuleTags.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ECSpecialMuleTags.o `test -f 'ECSpecialMuleTags.cpp' || echo '$(srcdir)/'`ECSpecialMuleTags.cpp amule-ECSpecialMuleTags.obj: ECSpecialMuleTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-ECSpecialMuleTags.obj -MD -MP -MF $(DEPDIR)/amule-ECSpecialMuleTags.Tpo -c -o amule-ECSpecialMuleTags.obj `if test -f 'ECSpecialMuleTags.cpp'; then $(CYGPATH_W) 'ECSpecialMuleTags.cpp'; else $(CYGPATH_W) '$(srcdir)/ECSpecialMuleTags.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-ECSpecialMuleTags.Tpo $(DEPDIR)/amule-ECSpecialMuleTags.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ECSpecialMuleTags.cpp' object='amule-ECSpecialMuleTags.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-ECSpecialMuleTags.obj `if test -f 'ECSpecialMuleTags.cpp'; then $(CYGPATH_W) 'ECSpecialMuleTags.cpp'; else $(CYGPATH_W) '$(srcdir)/ECSpecialMuleTags.cpp'; fi` amule-KnownFile.o: KnownFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-KnownFile.o -MD -MP -MF $(DEPDIR)/amule-KnownFile.Tpo -c -o amule-KnownFile.o `test -f 'KnownFile.cpp' || echo '$(srcdir)/'`KnownFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-KnownFile.Tpo $(DEPDIR)/amule-KnownFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KnownFile.cpp' object='amule-KnownFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-KnownFile.o `test -f 'KnownFile.cpp' || echo '$(srcdir)/'`KnownFile.cpp amule-KnownFile.obj: KnownFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-KnownFile.obj -MD -MP -MF $(DEPDIR)/amule-KnownFile.Tpo -c -o amule-KnownFile.obj `if test -f 'KnownFile.cpp'; then $(CYGPATH_W) 'KnownFile.cpp'; else $(CYGPATH_W) '$(srcdir)/KnownFile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-KnownFile.Tpo $(DEPDIR)/amule-KnownFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KnownFile.cpp' object='amule-KnownFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-KnownFile.obj `if test -f 'KnownFile.cpp'; then $(CYGPATH_W) 'KnownFile.cpp'; else $(CYGPATH_W) '$(srcdir)/KnownFile.cpp'; fi` amule-GetTickCount.o: GetTickCount.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-GetTickCount.o -MD -MP -MF $(DEPDIR)/amule-GetTickCount.Tpo -c -o amule-GetTickCount.o `test -f 'GetTickCount.cpp' || echo '$(srcdir)/'`GetTickCount.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-GetTickCount.Tpo $(DEPDIR)/amule-GetTickCount.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GetTickCount.cpp' object='amule-GetTickCount.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-GetTickCount.o `test -f 'GetTickCount.cpp' || echo '$(srcdir)/'`GetTickCount.cpp amule-GetTickCount.obj: GetTickCount.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-GetTickCount.obj -MD -MP -MF $(DEPDIR)/amule-GetTickCount.Tpo -c -o amule-GetTickCount.obj `if test -f 'GetTickCount.cpp'; then $(CYGPATH_W) 'GetTickCount.cpp'; else $(CYGPATH_W) '$(srcdir)/GetTickCount.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-GetTickCount.Tpo $(DEPDIR)/amule-GetTickCount.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GetTickCount.cpp' object='amule-GetTickCount.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-GetTickCount.obj `if test -f 'GetTickCount.cpp'; then $(CYGPATH_W) 'GetTickCount.cpp'; else $(CYGPATH_W) '$(srcdir)/GetTickCount.cpp'; fi` amule-GuiEvents.o: GuiEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-GuiEvents.o -MD -MP -MF $(DEPDIR)/amule-GuiEvents.Tpo -c -o amule-GuiEvents.o `test -f 'GuiEvents.cpp' || echo '$(srcdir)/'`GuiEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-GuiEvents.Tpo $(DEPDIR)/amule-GuiEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GuiEvents.cpp' object='amule-GuiEvents.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-GuiEvents.o `test -f 'GuiEvents.cpp' || echo '$(srcdir)/'`GuiEvents.cpp amule-GuiEvents.obj: GuiEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-GuiEvents.obj -MD -MP -MF $(DEPDIR)/amule-GuiEvents.Tpo -c -o amule-GuiEvents.obj `if test -f 'GuiEvents.cpp'; then $(CYGPATH_W) 'GuiEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/GuiEvents.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-GuiEvents.Tpo $(DEPDIR)/amule-GuiEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GuiEvents.cpp' object='amule-GuiEvents.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-GuiEvents.obj `if test -f 'GuiEvents.cpp'; then $(CYGPATH_W) 'GuiEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/GuiEvents.cpp'; fi` amule-HTTPDownload.o: HTTPDownload.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-HTTPDownload.o -MD -MP -MF $(DEPDIR)/amule-HTTPDownload.Tpo -c -o amule-HTTPDownload.o `test -f 'HTTPDownload.cpp' || echo '$(srcdir)/'`HTTPDownload.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-HTTPDownload.Tpo $(DEPDIR)/amule-HTTPDownload.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='HTTPDownload.cpp' object='amule-HTTPDownload.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-HTTPDownload.o `test -f 'HTTPDownload.cpp' || echo '$(srcdir)/'`HTTPDownload.cpp amule-HTTPDownload.obj: HTTPDownload.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-HTTPDownload.obj -MD -MP -MF $(DEPDIR)/amule-HTTPDownload.Tpo -c -o amule-HTTPDownload.obj `if test -f 'HTTPDownload.cpp'; then $(CYGPATH_W) 'HTTPDownload.cpp'; else $(CYGPATH_W) '$(srcdir)/HTTPDownload.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-HTTPDownload.Tpo $(DEPDIR)/amule-HTTPDownload.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='HTTPDownload.cpp' object='amule-HTTPDownload.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-HTTPDownload.obj `if test -f 'HTTPDownload.cpp'; then $(CYGPATH_W) 'HTTPDownload.cpp'; else $(CYGPATH_W) '$(srcdir)/HTTPDownload.cpp'; fi` amule-Logger.o: Logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Logger.o -MD -MP -MF $(DEPDIR)/amule-Logger.Tpo -c -o amule-Logger.o `test -f 'Logger.cpp' || echo '$(srcdir)/'`Logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Logger.Tpo $(DEPDIR)/amule-Logger.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Logger.cpp' object='amule-Logger.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Logger.o `test -f 'Logger.cpp' || echo '$(srcdir)/'`Logger.cpp amule-Logger.obj: Logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Logger.obj -MD -MP -MF $(DEPDIR)/amule-Logger.Tpo -c -o amule-Logger.obj `if test -f 'Logger.cpp'; then $(CYGPATH_W) 'Logger.cpp'; else $(CYGPATH_W) '$(srcdir)/Logger.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Logger.Tpo $(DEPDIR)/amule-Logger.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Logger.cpp' object='amule-Logger.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Logger.obj `if test -f 'Logger.cpp'; then $(CYGPATH_W) 'Logger.cpp'; else $(CYGPATH_W) '$(srcdir)/Logger.cpp'; fi` amule-PartFile.o: PartFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-PartFile.o -MD -MP -MF $(DEPDIR)/amule-PartFile.Tpo -c -o amule-PartFile.o `test -f 'PartFile.cpp' || echo '$(srcdir)/'`PartFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-PartFile.Tpo $(DEPDIR)/amule-PartFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartFile.cpp' object='amule-PartFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-PartFile.o `test -f 'PartFile.cpp' || echo '$(srcdir)/'`PartFile.cpp amule-PartFile.obj: PartFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-PartFile.obj -MD -MP -MF $(DEPDIR)/amule-PartFile.Tpo -c -o amule-PartFile.obj `if test -f 'PartFile.cpp'; then $(CYGPATH_W) 'PartFile.cpp'; else $(CYGPATH_W) '$(srcdir)/PartFile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-PartFile.Tpo $(DEPDIR)/amule-PartFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartFile.cpp' object='amule-PartFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-PartFile.obj `if test -f 'PartFile.cpp'; then $(CYGPATH_W) 'PartFile.cpp'; else $(CYGPATH_W) '$(srcdir)/PartFile.cpp'; fi` amule-Preferences.o: Preferences.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Preferences.o -MD -MP -MF $(DEPDIR)/amule-Preferences.Tpo -c -o amule-Preferences.o `test -f 'Preferences.cpp' || echo '$(srcdir)/'`Preferences.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Preferences.Tpo $(DEPDIR)/amule-Preferences.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Preferences.cpp' object='amule-Preferences.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Preferences.o `test -f 'Preferences.cpp' || echo '$(srcdir)/'`Preferences.cpp amule-Preferences.obj: Preferences.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Preferences.obj -MD -MP -MF $(DEPDIR)/amule-Preferences.Tpo -c -o amule-Preferences.obj `if test -f 'Preferences.cpp'; then $(CYGPATH_W) 'Preferences.cpp'; else $(CYGPATH_W) '$(srcdir)/Preferences.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Preferences.Tpo $(DEPDIR)/amule-Preferences.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Preferences.cpp' object='amule-Preferences.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Preferences.obj `if test -f 'Preferences.cpp'; then $(CYGPATH_W) 'Preferences.cpp'; else $(CYGPATH_W) '$(srcdir)/Preferences.cpp'; fi` amule-Proxy.o: Proxy.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Proxy.o -MD -MP -MF $(DEPDIR)/amule-Proxy.Tpo -c -o amule-Proxy.o `test -f 'Proxy.cpp' || echo '$(srcdir)/'`Proxy.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Proxy.Tpo $(DEPDIR)/amule-Proxy.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Proxy.cpp' object='amule-Proxy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Proxy.o `test -f 'Proxy.cpp' || echo '$(srcdir)/'`Proxy.cpp amule-Proxy.obj: Proxy.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Proxy.obj -MD -MP -MF $(DEPDIR)/amule-Proxy.Tpo -c -o amule-Proxy.obj `if test -f 'Proxy.cpp'; then $(CYGPATH_W) 'Proxy.cpp'; else $(CYGPATH_W) '$(srcdir)/Proxy.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Proxy.Tpo $(DEPDIR)/amule-Proxy.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Proxy.cpp' object='amule-Proxy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Proxy.obj `if test -f 'Proxy.cpp'; then $(CYGPATH_W) 'Proxy.cpp'; else $(CYGPATH_W) '$(srcdir)/Proxy.cpp'; fi` amule-Server.o: Server.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Server.o -MD -MP -MF $(DEPDIR)/amule-Server.Tpo -c -o amule-Server.o `test -f 'Server.cpp' || echo '$(srcdir)/'`Server.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Server.Tpo $(DEPDIR)/amule-Server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Server.cpp' object='amule-Server.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Server.o `test -f 'Server.cpp' || echo '$(srcdir)/'`Server.cpp amule-Server.obj: Server.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Server.obj -MD -MP -MF $(DEPDIR)/amule-Server.Tpo -c -o amule-Server.obj `if test -f 'Server.cpp'; then $(CYGPATH_W) 'Server.cpp'; else $(CYGPATH_W) '$(srcdir)/Server.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Server.Tpo $(DEPDIR)/amule-Server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Server.cpp' object='amule-Server.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Server.obj `if test -f 'Server.cpp'; then $(CYGPATH_W) 'Server.cpp'; else $(CYGPATH_W) '$(srcdir)/Server.cpp'; fi` amule-Statistics.o: Statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Statistics.o -MD -MP -MF $(DEPDIR)/amule-Statistics.Tpo -c -o amule-Statistics.o `test -f 'Statistics.cpp' || echo '$(srcdir)/'`Statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Statistics.Tpo $(DEPDIR)/amule-Statistics.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Statistics.cpp' object='amule-Statistics.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Statistics.o `test -f 'Statistics.cpp' || echo '$(srcdir)/'`Statistics.cpp amule-Statistics.obj: Statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-Statistics.obj -MD -MP -MF $(DEPDIR)/amule-Statistics.Tpo -c -o amule-Statistics.obj `if test -f 'Statistics.cpp'; then $(CYGPATH_W) 'Statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/Statistics.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-Statistics.Tpo $(DEPDIR)/amule-Statistics.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Statistics.cpp' object='amule-Statistics.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-Statistics.obj `if test -f 'Statistics.cpp'; then $(CYGPATH_W) 'Statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/Statistics.cpp'; fi` amule-StatTree.o: StatTree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-StatTree.o -MD -MP -MF $(DEPDIR)/amule-StatTree.Tpo -c -o amule-StatTree.o `test -f 'StatTree.cpp' || echo '$(srcdir)/'`StatTree.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-StatTree.Tpo $(DEPDIR)/amule-StatTree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StatTree.cpp' object='amule-StatTree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-StatTree.o `test -f 'StatTree.cpp' || echo '$(srcdir)/'`StatTree.cpp amule-StatTree.obj: StatTree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-StatTree.obj -MD -MP -MF $(DEPDIR)/amule-StatTree.Tpo -c -o amule-StatTree.obj `if test -f 'StatTree.cpp'; then $(CYGPATH_W) 'StatTree.cpp'; else $(CYGPATH_W) '$(srcdir)/StatTree.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-StatTree.Tpo $(DEPDIR)/amule-StatTree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StatTree.cpp' object='amule-StatTree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-StatTree.obj `if test -f 'StatTree.cpp'; then $(CYGPATH_W) 'StatTree.cpp'; else $(CYGPATH_W) '$(srcdir)/StatTree.cpp'; fi` amule-UserEvents.o: UserEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-UserEvents.o -MD -MP -MF $(DEPDIR)/amule-UserEvents.Tpo -c -o amule-UserEvents.o `test -f 'UserEvents.cpp' || echo '$(srcdir)/'`UserEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-UserEvents.Tpo $(DEPDIR)/amule-UserEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UserEvents.cpp' object='amule-UserEvents.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-UserEvents.o `test -f 'UserEvents.cpp' || echo '$(srcdir)/'`UserEvents.cpp amule-UserEvents.obj: UserEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-UserEvents.obj -MD -MP -MF $(DEPDIR)/amule-UserEvents.Tpo -c -o amule-UserEvents.obj `if test -f 'UserEvents.cpp'; then $(CYGPATH_W) 'UserEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/UserEvents.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-UserEvents.Tpo $(DEPDIR)/amule-UserEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UserEvents.cpp' object='amule-UserEvents.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-UserEvents.obj `if test -f 'UserEvents.cpp'; then $(CYGPATH_W) 'UserEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/UserEvents.cpp'; fi` amule-KADUSettings.o: KADUSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-KADUSettings.o -MD -MP -MF $(DEPDIR)/amule-KADUSettings.Tpo -c -o amule-KADUSettings.o `test -f 'KADUSettings.cpp' || echo '$(srcdir)/'`KADUSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-KADUSettings.Tpo $(DEPDIR)/amule-KADUSettings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KADUSettings.cpp' object='amule-KADUSettings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-KADUSettings.o `test -f 'KADUSettings.cpp' || echo '$(srcdir)/'`KADUSettings.cpp amule-KADUSettings.obj: KADUSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -MT amule-KADUSettings.obj -MD -MP -MF $(DEPDIR)/amule-KADUSettings.Tpo -c -o amule-KADUSettings.obj `if test -f 'KADUSettings.cpp'; then $(CYGPATH_W) 'KADUSettings.cpp'; else $(CYGPATH_W) '$(srcdir)/KADUSettings.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amule-KADUSettings.Tpo $(DEPDIR)/amule-KADUSettings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KADUSettings.cpp' object='amule-KADUSettings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amule_CPPFLAGS) $(CPPFLAGS) $(amule_CXXFLAGS) $(CXXFLAGS) -c -o amule-KADUSettings.obj `if test -f 'KADUSettings.cpp'; then $(CYGPATH_W) 'KADUSettings.cpp'; else $(CYGPATH_W) '$(srcdir)/KADUSettings.cpp'; fi` amulecmd-TextClient.o: TextClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -MT amulecmd-TextClient.o -MD -MP -MF $(DEPDIR)/amulecmd-TextClient.Tpo -c -o amulecmd-TextClient.o `test -f 'TextClient.cpp' || echo '$(srcdir)/'`TextClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulecmd-TextClient.Tpo $(DEPDIR)/amulecmd-TextClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TextClient.cpp' object='amulecmd-TextClient.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -c -o amulecmd-TextClient.o `test -f 'TextClient.cpp' || echo '$(srcdir)/'`TextClient.cpp amulecmd-TextClient.obj: TextClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -MT amulecmd-TextClient.obj -MD -MP -MF $(DEPDIR)/amulecmd-TextClient.Tpo -c -o amulecmd-TextClient.obj `if test -f 'TextClient.cpp'; then $(CYGPATH_W) 'TextClient.cpp'; else $(CYGPATH_W) '$(srcdir)/TextClient.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulecmd-TextClient.Tpo $(DEPDIR)/amulecmd-TextClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TextClient.cpp' object='amulecmd-TextClient.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -c -o amulecmd-TextClient.obj `if test -f 'TextClient.cpp'; then $(CYGPATH_W) 'TextClient.cpp'; else $(CYGPATH_W) '$(srcdir)/TextClient.cpp'; fi` amulecmd-ExternalConnector.o: ExternalConnector.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -MT amulecmd-ExternalConnector.o -MD -MP -MF $(DEPDIR)/amulecmd-ExternalConnector.Tpo -c -o amulecmd-ExternalConnector.o `test -f 'ExternalConnector.cpp' || echo '$(srcdir)/'`ExternalConnector.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulecmd-ExternalConnector.Tpo $(DEPDIR)/amulecmd-ExternalConnector.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ExternalConnector.cpp' object='amulecmd-ExternalConnector.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -c -o amulecmd-ExternalConnector.o `test -f 'ExternalConnector.cpp' || echo '$(srcdir)/'`ExternalConnector.cpp amulecmd-ExternalConnector.obj: ExternalConnector.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -MT amulecmd-ExternalConnector.obj -MD -MP -MF $(DEPDIR)/amulecmd-ExternalConnector.Tpo -c -o amulecmd-ExternalConnector.obj `if test -f 'ExternalConnector.cpp'; then $(CYGPATH_W) 'ExternalConnector.cpp'; else $(CYGPATH_W) '$(srcdir)/ExternalConnector.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulecmd-ExternalConnector.Tpo $(DEPDIR)/amulecmd-ExternalConnector.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ExternalConnector.cpp' object='amulecmd-ExternalConnector.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -c -o amulecmd-ExternalConnector.obj `if test -f 'ExternalConnector.cpp'; then $(CYGPATH_W) 'ExternalConnector.cpp'; else $(CYGPATH_W) '$(srcdir)/ExternalConnector.cpp'; fi` amulecmd-LoggerConsole.o: LoggerConsole.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -MT amulecmd-LoggerConsole.o -MD -MP -MF $(DEPDIR)/amulecmd-LoggerConsole.Tpo -c -o amulecmd-LoggerConsole.o `test -f 'LoggerConsole.cpp' || echo '$(srcdir)/'`LoggerConsole.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulecmd-LoggerConsole.Tpo $(DEPDIR)/amulecmd-LoggerConsole.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='LoggerConsole.cpp' object='amulecmd-LoggerConsole.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -c -o amulecmd-LoggerConsole.o `test -f 'LoggerConsole.cpp' || echo '$(srcdir)/'`LoggerConsole.cpp amulecmd-LoggerConsole.obj: LoggerConsole.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -MT amulecmd-LoggerConsole.obj -MD -MP -MF $(DEPDIR)/amulecmd-LoggerConsole.Tpo -c -o amulecmd-LoggerConsole.obj `if test -f 'LoggerConsole.cpp'; then $(CYGPATH_W) 'LoggerConsole.cpp'; else $(CYGPATH_W) '$(srcdir)/LoggerConsole.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulecmd-LoggerConsole.Tpo $(DEPDIR)/amulecmd-LoggerConsole.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='LoggerConsole.cpp' object='amulecmd-LoggerConsole.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -c -o amulecmd-LoggerConsole.obj `if test -f 'LoggerConsole.cpp'; then $(CYGPATH_W) 'LoggerConsole.cpp'; else $(CYGPATH_W) '$(srcdir)/LoggerConsole.cpp'; fi` amulecmd-OtherFunctions.o: OtherFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -MT amulecmd-OtherFunctions.o -MD -MP -MF $(DEPDIR)/amulecmd-OtherFunctions.Tpo -c -o amulecmd-OtherFunctions.o `test -f 'OtherFunctions.cpp' || echo '$(srcdir)/'`OtherFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulecmd-OtherFunctions.Tpo $(DEPDIR)/amulecmd-OtherFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OtherFunctions.cpp' object='amulecmd-OtherFunctions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -c -o amulecmd-OtherFunctions.o `test -f 'OtherFunctions.cpp' || echo '$(srcdir)/'`OtherFunctions.cpp amulecmd-OtherFunctions.obj: OtherFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -MT amulecmd-OtherFunctions.obj -MD -MP -MF $(DEPDIR)/amulecmd-OtherFunctions.Tpo -c -o amulecmd-OtherFunctions.obj `if test -f 'OtherFunctions.cpp'; then $(CYGPATH_W) 'OtherFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/OtherFunctions.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulecmd-OtherFunctions.Tpo $(DEPDIR)/amulecmd-OtherFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OtherFunctions.cpp' object='amulecmd-OtherFunctions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -c -o amulecmd-OtherFunctions.obj `if test -f 'OtherFunctions.cpp'; then $(CYGPATH_W) 'OtherFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/OtherFunctions.cpp'; fi` amulecmd-NetworkFunctions.o: NetworkFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -MT amulecmd-NetworkFunctions.o -MD -MP -MF $(DEPDIR)/amulecmd-NetworkFunctions.Tpo -c -o amulecmd-NetworkFunctions.o `test -f 'NetworkFunctions.cpp' || echo '$(srcdir)/'`NetworkFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulecmd-NetworkFunctions.Tpo $(DEPDIR)/amulecmd-NetworkFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='NetworkFunctions.cpp' object='amulecmd-NetworkFunctions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -c -o amulecmd-NetworkFunctions.o `test -f 'NetworkFunctions.cpp' || echo '$(srcdir)/'`NetworkFunctions.cpp amulecmd-NetworkFunctions.obj: NetworkFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -MT amulecmd-NetworkFunctions.obj -MD -MP -MF $(DEPDIR)/amulecmd-NetworkFunctions.Tpo -c -o amulecmd-NetworkFunctions.obj `if test -f 'NetworkFunctions.cpp'; then $(CYGPATH_W) 'NetworkFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/NetworkFunctions.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulecmd-NetworkFunctions.Tpo $(DEPDIR)/amulecmd-NetworkFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='NetworkFunctions.cpp' object='amulecmd-NetworkFunctions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulecmd_CPPFLAGS) $(CPPFLAGS) $(amulecmd_CXXFLAGS) $(CXXFLAGS) -c -o amulecmd-NetworkFunctions.obj `if test -f 'NetworkFunctions.cpp'; then $(CYGPATH_W) 'NetworkFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/NetworkFunctions.cpp'; fi` amuled-amuled.o: amuled.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-amuled.o -MD -MP -MF $(DEPDIR)/amuled-amuled.Tpo -c -o amuled-amuled.o `test -f 'amuled.cpp' || echo '$(srcdir)/'`amuled.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-amuled.Tpo $(DEPDIR)/amuled-amuled.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuled.cpp' object='amuled-amuled.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-amuled.o `test -f 'amuled.cpp' || echo '$(srcdir)/'`amuled.cpp amuled-amuled.obj: amuled.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-amuled.obj -MD -MP -MF $(DEPDIR)/amuled-amuled.Tpo -c -o amuled-amuled.obj `if test -f 'amuled.cpp'; then $(CYGPATH_W) 'amuled.cpp'; else $(CYGPATH_W) '$(srcdir)/amuled.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-amuled.Tpo $(DEPDIR)/amuled-amuled.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuled.cpp' object='amuled-amuled.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-amuled.obj `if test -f 'amuled.cpp'; then $(CYGPATH_W) 'amuled.cpp'; else $(CYGPATH_W) '$(srcdir)/amuled.cpp'; fi` amuled-amule.o: amule.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-amule.o -MD -MP -MF $(DEPDIR)/amuled-amule.Tpo -c -o amuled-amule.o `test -f 'amule.cpp' || echo '$(srcdir)/'`amule.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-amule.Tpo $(DEPDIR)/amuled-amule.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amule.cpp' object='amuled-amule.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-amule.o `test -f 'amule.cpp' || echo '$(srcdir)/'`amule.cpp amuled-amule.obj: amule.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-amule.obj -MD -MP -MF $(DEPDIR)/amuled-amule.Tpo -c -o amuled-amule.obj `if test -f 'amule.cpp'; then $(CYGPATH_W) 'amule.cpp'; else $(CYGPATH_W) '$(srcdir)/amule.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-amule.Tpo $(DEPDIR)/amuled-amule.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amule.cpp' object='amuled-amule.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-amule.obj `if test -f 'amule.cpp'; then $(CYGPATH_W) 'amule.cpp'; else $(CYGPATH_W) '$(srcdir)/amule.cpp'; fi` amuled-BaseClient.o: BaseClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-BaseClient.o -MD -MP -MF $(DEPDIR)/amuled-BaseClient.Tpo -c -o amuled-BaseClient.o `test -f 'BaseClient.cpp' || echo '$(srcdir)/'`BaseClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-BaseClient.Tpo $(DEPDIR)/amuled-BaseClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BaseClient.cpp' object='amuled-BaseClient.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-BaseClient.o `test -f 'BaseClient.cpp' || echo '$(srcdir)/'`BaseClient.cpp amuled-BaseClient.obj: BaseClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-BaseClient.obj -MD -MP -MF $(DEPDIR)/amuled-BaseClient.Tpo -c -o amuled-BaseClient.obj `if test -f 'BaseClient.cpp'; then $(CYGPATH_W) 'BaseClient.cpp'; else $(CYGPATH_W) '$(srcdir)/BaseClient.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-BaseClient.Tpo $(DEPDIR)/amuled-BaseClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BaseClient.cpp' object='amuled-BaseClient.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-BaseClient.obj `if test -f 'BaseClient.cpp'; then $(CYGPATH_W) 'BaseClient.cpp'; else $(CYGPATH_W) '$(srcdir)/BaseClient.cpp'; fi` amuled-CanceledFileList.o: CanceledFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-CanceledFileList.o -MD -MP -MF $(DEPDIR)/amuled-CanceledFileList.Tpo -c -o amuled-CanceledFileList.o `test -f 'CanceledFileList.cpp' || echo '$(srcdir)/'`CanceledFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-CanceledFileList.Tpo $(DEPDIR)/amuled-CanceledFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CanceledFileList.cpp' object='amuled-CanceledFileList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-CanceledFileList.o `test -f 'CanceledFileList.cpp' || echo '$(srcdir)/'`CanceledFileList.cpp amuled-CanceledFileList.obj: CanceledFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-CanceledFileList.obj -MD -MP -MF $(DEPDIR)/amuled-CanceledFileList.Tpo -c -o amuled-CanceledFileList.obj `if test -f 'CanceledFileList.cpp'; then $(CYGPATH_W) 'CanceledFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/CanceledFileList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-CanceledFileList.Tpo $(DEPDIR)/amuled-CanceledFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CanceledFileList.cpp' object='amuled-CanceledFileList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-CanceledFileList.obj `if test -f 'CanceledFileList.cpp'; then $(CYGPATH_W) 'CanceledFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/CanceledFileList.cpp'; fi` amuled-ClientList.o: ClientList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ClientList.o -MD -MP -MF $(DEPDIR)/amuled-ClientList.Tpo -c -o amuled-ClientList.o `test -f 'ClientList.cpp' || echo '$(srcdir)/'`ClientList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ClientList.Tpo $(DEPDIR)/amuled-ClientList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientList.cpp' object='amuled-ClientList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ClientList.o `test -f 'ClientList.cpp' || echo '$(srcdir)/'`ClientList.cpp amuled-ClientList.obj: ClientList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ClientList.obj -MD -MP -MF $(DEPDIR)/amuled-ClientList.Tpo -c -o amuled-ClientList.obj `if test -f 'ClientList.cpp'; then $(CYGPATH_W) 'ClientList.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ClientList.Tpo $(DEPDIR)/amuled-ClientList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientList.cpp' object='amuled-ClientList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ClientList.obj `if test -f 'ClientList.cpp'; then $(CYGPATH_W) 'ClientList.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientList.cpp'; fi` amuled-ClientCreditsList.o: ClientCreditsList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ClientCreditsList.o -MD -MP -MF $(DEPDIR)/amuled-ClientCreditsList.Tpo -c -o amuled-ClientCreditsList.o `test -f 'ClientCreditsList.cpp' || echo '$(srcdir)/'`ClientCreditsList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ClientCreditsList.Tpo $(DEPDIR)/amuled-ClientCreditsList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientCreditsList.cpp' object='amuled-ClientCreditsList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ClientCreditsList.o `test -f 'ClientCreditsList.cpp' || echo '$(srcdir)/'`ClientCreditsList.cpp amuled-ClientCreditsList.obj: ClientCreditsList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ClientCreditsList.obj -MD -MP -MF $(DEPDIR)/amuled-ClientCreditsList.Tpo -c -o amuled-ClientCreditsList.obj `if test -f 'ClientCreditsList.cpp'; then $(CYGPATH_W) 'ClientCreditsList.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientCreditsList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ClientCreditsList.Tpo $(DEPDIR)/amuled-ClientCreditsList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientCreditsList.cpp' object='amuled-ClientCreditsList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ClientCreditsList.obj `if test -f 'ClientCreditsList.cpp'; then $(CYGPATH_W) 'ClientCreditsList.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientCreditsList.cpp'; fi` amuled-ClientTCPSocket.o: ClientTCPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ClientTCPSocket.o -MD -MP -MF $(DEPDIR)/amuled-ClientTCPSocket.Tpo -c -o amuled-ClientTCPSocket.o `test -f 'ClientTCPSocket.cpp' || echo '$(srcdir)/'`ClientTCPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ClientTCPSocket.Tpo $(DEPDIR)/amuled-ClientTCPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientTCPSocket.cpp' object='amuled-ClientTCPSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ClientTCPSocket.o `test -f 'ClientTCPSocket.cpp' || echo '$(srcdir)/'`ClientTCPSocket.cpp amuled-ClientTCPSocket.obj: ClientTCPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ClientTCPSocket.obj -MD -MP -MF $(DEPDIR)/amuled-ClientTCPSocket.Tpo -c -o amuled-ClientTCPSocket.obj `if test -f 'ClientTCPSocket.cpp'; then $(CYGPATH_W) 'ClientTCPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientTCPSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ClientTCPSocket.Tpo $(DEPDIR)/amuled-ClientTCPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientTCPSocket.cpp' object='amuled-ClientTCPSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ClientTCPSocket.obj `if test -f 'ClientTCPSocket.cpp'; then $(CYGPATH_W) 'ClientTCPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientTCPSocket.cpp'; fi` amuled-ClientUDPSocket.o: ClientUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ClientUDPSocket.o -MD -MP -MF $(DEPDIR)/amuled-ClientUDPSocket.Tpo -c -o amuled-ClientUDPSocket.o `test -f 'ClientUDPSocket.cpp' || echo '$(srcdir)/'`ClientUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ClientUDPSocket.Tpo $(DEPDIR)/amuled-ClientUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientUDPSocket.cpp' object='amuled-ClientUDPSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ClientUDPSocket.o `test -f 'ClientUDPSocket.cpp' || echo '$(srcdir)/'`ClientUDPSocket.cpp amuled-ClientUDPSocket.obj: ClientUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ClientUDPSocket.obj -MD -MP -MF $(DEPDIR)/amuled-ClientUDPSocket.Tpo -c -o amuled-ClientUDPSocket.obj `if test -f 'ClientUDPSocket.cpp'; then $(CYGPATH_W) 'ClientUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientUDPSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ClientUDPSocket.Tpo $(DEPDIR)/amuled-ClientUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientUDPSocket.cpp' object='amuled-ClientUDPSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ClientUDPSocket.obj `if test -f 'ClientUDPSocket.cpp'; then $(CYGPATH_W) 'ClientUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientUDPSocket.cpp'; fi` amuled-CorruptionBlackBox.o: CorruptionBlackBox.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-CorruptionBlackBox.o -MD -MP -MF $(DEPDIR)/amuled-CorruptionBlackBox.Tpo -c -o amuled-CorruptionBlackBox.o `test -f 'CorruptionBlackBox.cpp' || echo '$(srcdir)/'`CorruptionBlackBox.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-CorruptionBlackBox.Tpo $(DEPDIR)/amuled-CorruptionBlackBox.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CorruptionBlackBox.cpp' object='amuled-CorruptionBlackBox.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-CorruptionBlackBox.o `test -f 'CorruptionBlackBox.cpp' || echo '$(srcdir)/'`CorruptionBlackBox.cpp amuled-CorruptionBlackBox.obj: CorruptionBlackBox.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-CorruptionBlackBox.obj -MD -MP -MF $(DEPDIR)/amuled-CorruptionBlackBox.Tpo -c -o amuled-CorruptionBlackBox.obj `if test -f 'CorruptionBlackBox.cpp'; then $(CYGPATH_W) 'CorruptionBlackBox.cpp'; else $(CYGPATH_W) '$(srcdir)/CorruptionBlackBox.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-CorruptionBlackBox.Tpo $(DEPDIR)/amuled-CorruptionBlackBox.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CorruptionBlackBox.cpp' object='amuled-CorruptionBlackBox.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-CorruptionBlackBox.obj `if test -f 'CorruptionBlackBox.cpp'; then $(CYGPATH_W) 'CorruptionBlackBox.cpp'; else $(CYGPATH_W) '$(srcdir)/CorruptionBlackBox.cpp'; fi` amuled-DownloadClient.o: DownloadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-DownloadClient.o -MD -MP -MF $(DEPDIR)/amuled-DownloadClient.Tpo -c -o amuled-DownloadClient.o `test -f 'DownloadClient.cpp' || echo '$(srcdir)/'`DownloadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-DownloadClient.Tpo $(DEPDIR)/amuled-DownloadClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadClient.cpp' object='amuled-DownloadClient.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-DownloadClient.o `test -f 'DownloadClient.cpp' || echo '$(srcdir)/'`DownloadClient.cpp amuled-DownloadClient.obj: DownloadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-DownloadClient.obj -MD -MP -MF $(DEPDIR)/amuled-DownloadClient.Tpo -c -o amuled-DownloadClient.obj `if test -f 'DownloadClient.cpp'; then $(CYGPATH_W) 'DownloadClient.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadClient.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-DownloadClient.Tpo $(DEPDIR)/amuled-DownloadClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadClient.cpp' object='amuled-DownloadClient.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-DownloadClient.obj `if test -f 'DownloadClient.cpp'; then $(CYGPATH_W) 'DownloadClient.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadClient.cpp'; fi` amuled-DownloadQueue.o: DownloadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-DownloadQueue.o -MD -MP -MF $(DEPDIR)/amuled-DownloadQueue.Tpo -c -o amuled-DownloadQueue.o `test -f 'DownloadQueue.cpp' || echo '$(srcdir)/'`DownloadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-DownloadQueue.Tpo $(DEPDIR)/amuled-DownloadQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadQueue.cpp' object='amuled-DownloadQueue.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-DownloadQueue.o `test -f 'DownloadQueue.cpp' || echo '$(srcdir)/'`DownloadQueue.cpp amuled-DownloadQueue.obj: DownloadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-DownloadQueue.obj -MD -MP -MF $(DEPDIR)/amuled-DownloadQueue.Tpo -c -o amuled-DownloadQueue.obj `if test -f 'DownloadQueue.cpp'; then $(CYGPATH_W) 'DownloadQueue.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadQueue.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-DownloadQueue.Tpo $(DEPDIR)/amuled-DownloadQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadQueue.cpp' object='amuled-DownloadQueue.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-DownloadQueue.obj `if test -f 'DownloadQueue.cpp'; then $(CYGPATH_W) 'DownloadQueue.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadQueue.cpp'; fi` amuled-ECSpecialCoreTags.o: ECSpecialCoreTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ECSpecialCoreTags.o -MD -MP -MF $(DEPDIR)/amuled-ECSpecialCoreTags.Tpo -c -o amuled-ECSpecialCoreTags.o `test -f 'ECSpecialCoreTags.cpp' || echo '$(srcdir)/'`ECSpecialCoreTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ECSpecialCoreTags.Tpo $(DEPDIR)/amuled-ECSpecialCoreTags.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ECSpecialCoreTags.cpp' object='amuled-ECSpecialCoreTags.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ECSpecialCoreTags.o `test -f 'ECSpecialCoreTags.cpp' || echo '$(srcdir)/'`ECSpecialCoreTags.cpp amuled-ECSpecialCoreTags.obj: ECSpecialCoreTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ECSpecialCoreTags.obj -MD -MP -MF $(DEPDIR)/amuled-ECSpecialCoreTags.Tpo -c -o amuled-ECSpecialCoreTags.obj `if test -f 'ECSpecialCoreTags.cpp'; then $(CYGPATH_W) 'ECSpecialCoreTags.cpp'; else $(CYGPATH_W) '$(srcdir)/ECSpecialCoreTags.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ECSpecialCoreTags.Tpo $(DEPDIR)/amuled-ECSpecialCoreTags.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ECSpecialCoreTags.cpp' object='amuled-ECSpecialCoreTags.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ECSpecialCoreTags.obj `if test -f 'ECSpecialCoreTags.cpp'; then $(CYGPATH_W) 'ECSpecialCoreTags.cpp'; else $(CYGPATH_W) '$(srcdir)/ECSpecialCoreTags.cpp'; fi` amuled-EMSocket.o: EMSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-EMSocket.o -MD -MP -MF $(DEPDIR)/amuled-EMSocket.Tpo -c -o amuled-EMSocket.o `test -f 'EMSocket.cpp' || echo '$(srcdir)/'`EMSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-EMSocket.Tpo $(DEPDIR)/amuled-EMSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EMSocket.cpp' object='amuled-EMSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-EMSocket.o `test -f 'EMSocket.cpp' || echo '$(srcdir)/'`EMSocket.cpp amuled-EMSocket.obj: EMSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-EMSocket.obj -MD -MP -MF $(DEPDIR)/amuled-EMSocket.Tpo -c -o amuled-EMSocket.obj `if test -f 'EMSocket.cpp'; then $(CYGPATH_W) 'EMSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EMSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-EMSocket.Tpo $(DEPDIR)/amuled-EMSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EMSocket.cpp' object='amuled-EMSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-EMSocket.obj `if test -f 'EMSocket.cpp'; then $(CYGPATH_W) 'EMSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EMSocket.cpp'; fi` amuled-EncryptedStreamSocket.o: EncryptedStreamSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-EncryptedStreamSocket.o -MD -MP -MF $(DEPDIR)/amuled-EncryptedStreamSocket.Tpo -c -o amuled-EncryptedStreamSocket.o `test -f 'EncryptedStreamSocket.cpp' || echo '$(srcdir)/'`EncryptedStreamSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-EncryptedStreamSocket.Tpo $(DEPDIR)/amuled-EncryptedStreamSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EncryptedStreamSocket.cpp' object='amuled-EncryptedStreamSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-EncryptedStreamSocket.o `test -f 'EncryptedStreamSocket.cpp' || echo '$(srcdir)/'`EncryptedStreamSocket.cpp amuled-EncryptedStreamSocket.obj: EncryptedStreamSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-EncryptedStreamSocket.obj -MD -MP -MF $(DEPDIR)/amuled-EncryptedStreamSocket.Tpo -c -o amuled-EncryptedStreamSocket.obj `if test -f 'EncryptedStreamSocket.cpp'; then $(CYGPATH_W) 'EncryptedStreamSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EncryptedStreamSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-EncryptedStreamSocket.Tpo $(DEPDIR)/amuled-EncryptedStreamSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EncryptedStreamSocket.cpp' object='amuled-EncryptedStreamSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-EncryptedStreamSocket.obj `if test -f 'EncryptedStreamSocket.cpp'; then $(CYGPATH_W) 'EncryptedStreamSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EncryptedStreamSocket.cpp'; fi` amuled-EncryptedDatagramSocket.o: EncryptedDatagramSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-EncryptedDatagramSocket.o -MD -MP -MF $(DEPDIR)/amuled-EncryptedDatagramSocket.Tpo -c -o amuled-EncryptedDatagramSocket.o `test -f 'EncryptedDatagramSocket.cpp' || echo '$(srcdir)/'`EncryptedDatagramSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-EncryptedDatagramSocket.Tpo $(DEPDIR)/amuled-EncryptedDatagramSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EncryptedDatagramSocket.cpp' object='amuled-EncryptedDatagramSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-EncryptedDatagramSocket.o `test -f 'EncryptedDatagramSocket.cpp' || echo '$(srcdir)/'`EncryptedDatagramSocket.cpp amuled-EncryptedDatagramSocket.obj: EncryptedDatagramSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-EncryptedDatagramSocket.obj -MD -MP -MF $(DEPDIR)/amuled-EncryptedDatagramSocket.Tpo -c -o amuled-EncryptedDatagramSocket.obj `if test -f 'EncryptedDatagramSocket.cpp'; then $(CYGPATH_W) 'EncryptedDatagramSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EncryptedDatagramSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-EncryptedDatagramSocket.Tpo $(DEPDIR)/amuled-EncryptedDatagramSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EncryptedDatagramSocket.cpp' object='amuled-EncryptedDatagramSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-EncryptedDatagramSocket.obj `if test -f 'EncryptedDatagramSocket.cpp'; then $(CYGPATH_W) 'EncryptedDatagramSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/EncryptedDatagramSocket.cpp'; fi` amuled-ExternalConn.o: ExternalConn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ExternalConn.o -MD -MP -MF $(DEPDIR)/amuled-ExternalConn.Tpo -c -o amuled-ExternalConn.o `test -f 'ExternalConn.cpp' || echo '$(srcdir)/'`ExternalConn.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ExternalConn.Tpo $(DEPDIR)/amuled-ExternalConn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ExternalConn.cpp' object='amuled-ExternalConn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ExternalConn.o `test -f 'ExternalConn.cpp' || echo '$(srcdir)/'`ExternalConn.cpp amuled-ExternalConn.obj: ExternalConn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ExternalConn.obj -MD -MP -MF $(DEPDIR)/amuled-ExternalConn.Tpo -c -o amuled-ExternalConn.obj `if test -f 'ExternalConn.cpp'; then $(CYGPATH_W) 'ExternalConn.cpp'; else $(CYGPATH_W) '$(srcdir)/ExternalConn.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ExternalConn.Tpo $(DEPDIR)/amuled-ExternalConn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ExternalConn.cpp' object='amuled-ExternalConn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ExternalConn.obj `if test -f 'ExternalConn.cpp'; then $(CYGPATH_W) 'ExternalConn.cpp'; else $(CYGPATH_W) '$(srcdir)/ExternalConn.cpp'; fi` amuled-FriendList.o: FriendList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-FriendList.o -MD -MP -MF $(DEPDIR)/amuled-FriendList.Tpo -c -o amuled-FriendList.o `test -f 'FriendList.cpp' || echo '$(srcdir)/'`FriendList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-FriendList.Tpo $(DEPDIR)/amuled-FriendList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FriendList.cpp' object='amuled-FriendList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-FriendList.o `test -f 'FriendList.cpp' || echo '$(srcdir)/'`FriendList.cpp amuled-FriendList.obj: FriendList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-FriendList.obj -MD -MP -MF $(DEPDIR)/amuled-FriendList.Tpo -c -o amuled-FriendList.obj `if test -f 'FriendList.cpp'; then $(CYGPATH_W) 'FriendList.cpp'; else $(CYGPATH_W) '$(srcdir)/FriendList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-FriendList.Tpo $(DEPDIR)/amuled-FriendList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FriendList.cpp' object='amuled-FriendList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-FriendList.obj `if test -f 'FriendList.cpp'; then $(CYGPATH_W) 'FriendList.cpp'; else $(CYGPATH_W) '$(srcdir)/FriendList.cpp'; fi` amuled-IPFilter.o: IPFilter.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-IPFilter.o -MD -MP -MF $(DEPDIR)/amuled-IPFilter.Tpo -c -o amuled-IPFilter.o `test -f 'IPFilter.cpp' || echo '$(srcdir)/'`IPFilter.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-IPFilter.Tpo $(DEPDIR)/amuled-IPFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='IPFilter.cpp' object='amuled-IPFilter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-IPFilter.o `test -f 'IPFilter.cpp' || echo '$(srcdir)/'`IPFilter.cpp amuled-IPFilter.obj: IPFilter.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-IPFilter.obj -MD -MP -MF $(DEPDIR)/amuled-IPFilter.Tpo -c -o amuled-IPFilter.obj `if test -f 'IPFilter.cpp'; then $(CYGPATH_W) 'IPFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/IPFilter.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-IPFilter.Tpo $(DEPDIR)/amuled-IPFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='IPFilter.cpp' object='amuled-IPFilter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-IPFilter.obj `if test -f 'IPFilter.cpp'; then $(CYGPATH_W) 'IPFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/IPFilter.cpp'; fi` amuled-KnownFileList.o: KnownFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-KnownFileList.o -MD -MP -MF $(DEPDIR)/amuled-KnownFileList.Tpo -c -o amuled-KnownFileList.o `test -f 'KnownFileList.cpp' || echo '$(srcdir)/'`KnownFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-KnownFileList.Tpo $(DEPDIR)/amuled-KnownFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KnownFileList.cpp' object='amuled-KnownFileList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-KnownFileList.o `test -f 'KnownFileList.cpp' || echo '$(srcdir)/'`KnownFileList.cpp amuled-KnownFileList.obj: KnownFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-KnownFileList.obj -MD -MP -MF $(DEPDIR)/amuled-KnownFileList.Tpo -c -o amuled-KnownFileList.obj `if test -f 'KnownFileList.cpp'; then $(CYGPATH_W) 'KnownFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/KnownFileList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-KnownFileList.Tpo $(DEPDIR)/amuled-KnownFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KnownFileList.cpp' object='amuled-KnownFileList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-KnownFileList.obj `if test -f 'KnownFileList.cpp'; then $(CYGPATH_W) 'KnownFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/KnownFileList.cpp'; fi` amuled-ListenSocket.o: ListenSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ListenSocket.o -MD -MP -MF $(DEPDIR)/amuled-ListenSocket.Tpo -c -o amuled-ListenSocket.o `test -f 'ListenSocket.cpp' || echo '$(srcdir)/'`ListenSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ListenSocket.Tpo $(DEPDIR)/amuled-ListenSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ListenSocket.cpp' object='amuled-ListenSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ListenSocket.o `test -f 'ListenSocket.cpp' || echo '$(srcdir)/'`ListenSocket.cpp amuled-ListenSocket.obj: ListenSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ListenSocket.obj -MD -MP -MF $(DEPDIR)/amuled-ListenSocket.Tpo -c -o amuled-ListenSocket.obj `if test -f 'ListenSocket.cpp'; then $(CYGPATH_W) 'ListenSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ListenSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ListenSocket.Tpo $(DEPDIR)/amuled-ListenSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ListenSocket.cpp' object='amuled-ListenSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ListenSocket.obj `if test -f 'ListenSocket.cpp'; then $(CYGPATH_W) 'ListenSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ListenSocket.cpp'; fi` amuled-MuleUDPSocket.o: MuleUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-MuleUDPSocket.o -MD -MP -MF $(DEPDIR)/amuled-MuleUDPSocket.Tpo -c -o amuled-MuleUDPSocket.o `test -f 'MuleUDPSocket.cpp' || echo '$(srcdir)/'`MuleUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-MuleUDPSocket.Tpo $(DEPDIR)/amuled-MuleUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleUDPSocket.cpp' object='amuled-MuleUDPSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-MuleUDPSocket.o `test -f 'MuleUDPSocket.cpp' || echo '$(srcdir)/'`MuleUDPSocket.cpp amuled-MuleUDPSocket.obj: MuleUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-MuleUDPSocket.obj -MD -MP -MF $(DEPDIR)/amuled-MuleUDPSocket.Tpo -c -o amuled-MuleUDPSocket.obj `if test -f 'MuleUDPSocket.cpp'; then $(CYGPATH_W) 'MuleUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleUDPSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-MuleUDPSocket.Tpo $(DEPDIR)/amuled-MuleUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleUDPSocket.cpp' object='amuled-MuleUDPSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-MuleUDPSocket.obj `if test -f 'MuleUDPSocket.cpp'; then $(CYGPATH_W) 'MuleUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleUDPSocket.cpp'; fi` amuled-SearchFile.o: SearchFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-SearchFile.o -MD -MP -MF $(DEPDIR)/amuled-SearchFile.Tpo -c -o amuled-SearchFile.o `test -f 'SearchFile.cpp' || echo '$(srcdir)/'`SearchFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-SearchFile.Tpo $(DEPDIR)/amuled-SearchFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchFile.cpp' object='amuled-SearchFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-SearchFile.o `test -f 'SearchFile.cpp' || echo '$(srcdir)/'`SearchFile.cpp amuled-SearchFile.obj: SearchFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-SearchFile.obj -MD -MP -MF $(DEPDIR)/amuled-SearchFile.Tpo -c -o amuled-SearchFile.obj `if test -f 'SearchFile.cpp'; then $(CYGPATH_W) 'SearchFile.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchFile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-SearchFile.Tpo $(DEPDIR)/amuled-SearchFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchFile.cpp' object='amuled-SearchFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-SearchFile.obj `if test -f 'SearchFile.cpp'; then $(CYGPATH_W) 'SearchFile.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchFile.cpp'; fi` amuled-SearchList.o: SearchList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-SearchList.o -MD -MP -MF $(DEPDIR)/amuled-SearchList.Tpo -c -o amuled-SearchList.o `test -f 'SearchList.cpp' || echo '$(srcdir)/'`SearchList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-SearchList.Tpo $(DEPDIR)/amuled-SearchList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchList.cpp' object='amuled-SearchList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-SearchList.o `test -f 'SearchList.cpp' || echo '$(srcdir)/'`SearchList.cpp amuled-SearchList.obj: SearchList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-SearchList.obj -MD -MP -MF $(DEPDIR)/amuled-SearchList.Tpo -c -o amuled-SearchList.obj `if test -f 'SearchList.cpp'; then $(CYGPATH_W) 'SearchList.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-SearchList.Tpo $(DEPDIR)/amuled-SearchList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchList.cpp' object='amuled-SearchList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-SearchList.obj `if test -f 'SearchList.cpp'; then $(CYGPATH_W) 'SearchList.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchList.cpp'; fi` amuled-ServerConnect.o: ServerConnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ServerConnect.o -MD -MP -MF $(DEPDIR)/amuled-ServerConnect.Tpo -c -o amuled-ServerConnect.o `test -f 'ServerConnect.cpp' || echo '$(srcdir)/'`ServerConnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ServerConnect.Tpo $(DEPDIR)/amuled-ServerConnect.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerConnect.cpp' object='amuled-ServerConnect.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ServerConnect.o `test -f 'ServerConnect.cpp' || echo '$(srcdir)/'`ServerConnect.cpp amuled-ServerConnect.obj: ServerConnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ServerConnect.obj -MD -MP -MF $(DEPDIR)/amuled-ServerConnect.Tpo -c -o amuled-ServerConnect.obj `if test -f 'ServerConnect.cpp'; then $(CYGPATH_W) 'ServerConnect.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerConnect.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ServerConnect.Tpo $(DEPDIR)/amuled-ServerConnect.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerConnect.cpp' object='amuled-ServerConnect.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ServerConnect.obj `if test -f 'ServerConnect.cpp'; then $(CYGPATH_W) 'ServerConnect.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerConnect.cpp'; fi` amuled-ServerList.o: ServerList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ServerList.o -MD -MP -MF $(DEPDIR)/amuled-ServerList.Tpo -c -o amuled-ServerList.o `test -f 'ServerList.cpp' || echo '$(srcdir)/'`ServerList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ServerList.Tpo $(DEPDIR)/amuled-ServerList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerList.cpp' object='amuled-ServerList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ServerList.o `test -f 'ServerList.cpp' || echo '$(srcdir)/'`ServerList.cpp amuled-ServerList.obj: ServerList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ServerList.obj -MD -MP -MF $(DEPDIR)/amuled-ServerList.Tpo -c -o amuled-ServerList.obj `if test -f 'ServerList.cpp'; then $(CYGPATH_W) 'ServerList.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ServerList.Tpo $(DEPDIR)/amuled-ServerList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerList.cpp' object='amuled-ServerList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ServerList.obj `if test -f 'ServerList.cpp'; then $(CYGPATH_W) 'ServerList.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerList.cpp'; fi` amuled-ServerSocket.o: ServerSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ServerSocket.o -MD -MP -MF $(DEPDIR)/amuled-ServerSocket.Tpo -c -o amuled-ServerSocket.o `test -f 'ServerSocket.cpp' || echo '$(srcdir)/'`ServerSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ServerSocket.Tpo $(DEPDIR)/amuled-ServerSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerSocket.cpp' object='amuled-ServerSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ServerSocket.o `test -f 'ServerSocket.cpp' || echo '$(srcdir)/'`ServerSocket.cpp amuled-ServerSocket.obj: ServerSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ServerSocket.obj -MD -MP -MF $(DEPDIR)/amuled-ServerSocket.Tpo -c -o amuled-ServerSocket.obj `if test -f 'ServerSocket.cpp'; then $(CYGPATH_W) 'ServerSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ServerSocket.Tpo $(DEPDIR)/amuled-ServerSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerSocket.cpp' object='amuled-ServerSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ServerSocket.obj `if test -f 'ServerSocket.cpp'; then $(CYGPATH_W) 'ServerSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerSocket.cpp'; fi` amuled-ServerUDPSocket.o: ServerUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ServerUDPSocket.o -MD -MP -MF $(DEPDIR)/amuled-ServerUDPSocket.Tpo -c -o amuled-ServerUDPSocket.o `test -f 'ServerUDPSocket.cpp' || echo '$(srcdir)/'`ServerUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ServerUDPSocket.Tpo $(DEPDIR)/amuled-ServerUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerUDPSocket.cpp' object='amuled-ServerUDPSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ServerUDPSocket.o `test -f 'ServerUDPSocket.cpp' || echo '$(srcdir)/'`ServerUDPSocket.cpp amuled-ServerUDPSocket.obj: ServerUDPSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ServerUDPSocket.obj -MD -MP -MF $(DEPDIR)/amuled-ServerUDPSocket.Tpo -c -o amuled-ServerUDPSocket.obj `if test -f 'ServerUDPSocket.cpp'; then $(CYGPATH_W) 'ServerUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerUDPSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ServerUDPSocket.Tpo $(DEPDIR)/amuled-ServerUDPSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerUDPSocket.cpp' object='amuled-ServerUDPSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ServerUDPSocket.obj `if test -f 'ServerUDPSocket.cpp'; then $(CYGPATH_W) 'ServerUDPSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerUDPSocket.cpp'; fi` amuled-SHAHashSet.o: SHAHashSet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-SHAHashSet.o -MD -MP -MF $(DEPDIR)/amuled-SHAHashSet.Tpo -c -o amuled-SHAHashSet.o `test -f 'SHAHashSet.cpp' || echo '$(srcdir)/'`SHAHashSet.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-SHAHashSet.Tpo $(DEPDIR)/amuled-SHAHashSet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SHAHashSet.cpp' object='amuled-SHAHashSet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-SHAHashSet.o `test -f 'SHAHashSet.cpp' || echo '$(srcdir)/'`SHAHashSet.cpp amuled-SHAHashSet.obj: SHAHashSet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-SHAHashSet.obj -MD -MP -MF $(DEPDIR)/amuled-SHAHashSet.Tpo -c -o amuled-SHAHashSet.obj `if test -f 'SHAHashSet.cpp'; then $(CYGPATH_W) 'SHAHashSet.cpp'; else $(CYGPATH_W) '$(srcdir)/SHAHashSet.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-SHAHashSet.Tpo $(DEPDIR)/amuled-SHAHashSet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SHAHashSet.cpp' object='amuled-SHAHashSet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-SHAHashSet.obj `if test -f 'SHAHashSet.cpp'; then $(CYGPATH_W) 'SHAHashSet.cpp'; else $(CYGPATH_W) '$(srcdir)/SHAHashSet.cpp'; fi` amuled-SharedFileList.o: SharedFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-SharedFileList.o -MD -MP -MF $(DEPDIR)/amuled-SharedFileList.Tpo -c -o amuled-SharedFileList.o `test -f 'SharedFileList.cpp' || echo '$(srcdir)/'`SharedFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-SharedFileList.Tpo $(DEPDIR)/amuled-SharedFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFileList.cpp' object='amuled-SharedFileList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-SharedFileList.o `test -f 'SharedFileList.cpp' || echo '$(srcdir)/'`SharedFileList.cpp amuled-SharedFileList.obj: SharedFileList.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-SharedFileList.obj -MD -MP -MF $(DEPDIR)/amuled-SharedFileList.Tpo -c -o amuled-SharedFileList.obj `if test -f 'SharedFileList.cpp'; then $(CYGPATH_W) 'SharedFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFileList.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-SharedFileList.Tpo $(DEPDIR)/amuled-SharedFileList.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFileList.cpp' object='amuled-SharedFileList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-SharedFileList.obj `if test -f 'SharedFileList.cpp'; then $(CYGPATH_W) 'SharedFileList.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFileList.cpp'; fi` amuled-ThreadTasks.o: ThreadTasks.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ThreadTasks.o -MD -MP -MF $(DEPDIR)/amuled-ThreadTasks.Tpo -c -o amuled-ThreadTasks.o `test -f 'ThreadTasks.cpp' || echo '$(srcdir)/'`ThreadTasks.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ThreadTasks.Tpo $(DEPDIR)/amuled-ThreadTasks.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ThreadTasks.cpp' object='amuled-ThreadTasks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ThreadTasks.o `test -f 'ThreadTasks.cpp' || echo '$(srcdir)/'`ThreadTasks.cpp amuled-ThreadTasks.obj: ThreadTasks.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ThreadTasks.obj -MD -MP -MF $(DEPDIR)/amuled-ThreadTasks.Tpo -c -o amuled-ThreadTasks.obj `if test -f 'ThreadTasks.cpp'; then $(CYGPATH_W) 'ThreadTasks.cpp'; else $(CYGPATH_W) '$(srcdir)/ThreadTasks.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ThreadTasks.Tpo $(DEPDIR)/amuled-ThreadTasks.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ThreadTasks.cpp' object='amuled-ThreadTasks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ThreadTasks.obj `if test -f 'ThreadTasks.cpp'; then $(CYGPATH_W) 'ThreadTasks.cpp'; else $(CYGPATH_W) '$(srcdir)/ThreadTasks.cpp'; fi` amuled-UploadBandwidthThrottler.o: UploadBandwidthThrottler.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-UploadBandwidthThrottler.o -MD -MP -MF $(DEPDIR)/amuled-UploadBandwidthThrottler.Tpo -c -o amuled-UploadBandwidthThrottler.o `test -f 'UploadBandwidthThrottler.cpp' || echo '$(srcdir)/'`UploadBandwidthThrottler.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-UploadBandwidthThrottler.Tpo $(DEPDIR)/amuled-UploadBandwidthThrottler.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadBandwidthThrottler.cpp' object='amuled-UploadBandwidthThrottler.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-UploadBandwidthThrottler.o `test -f 'UploadBandwidthThrottler.cpp' || echo '$(srcdir)/'`UploadBandwidthThrottler.cpp amuled-UploadBandwidthThrottler.obj: UploadBandwidthThrottler.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-UploadBandwidthThrottler.obj -MD -MP -MF $(DEPDIR)/amuled-UploadBandwidthThrottler.Tpo -c -o amuled-UploadBandwidthThrottler.obj `if test -f 'UploadBandwidthThrottler.cpp'; then $(CYGPATH_W) 'UploadBandwidthThrottler.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadBandwidthThrottler.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-UploadBandwidthThrottler.Tpo $(DEPDIR)/amuled-UploadBandwidthThrottler.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadBandwidthThrottler.cpp' object='amuled-UploadBandwidthThrottler.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-UploadBandwidthThrottler.obj `if test -f 'UploadBandwidthThrottler.cpp'; then $(CYGPATH_W) 'UploadBandwidthThrottler.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadBandwidthThrottler.cpp'; fi` amuled-UploadClient.o: UploadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-UploadClient.o -MD -MP -MF $(DEPDIR)/amuled-UploadClient.Tpo -c -o amuled-UploadClient.o `test -f 'UploadClient.cpp' || echo '$(srcdir)/'`UploadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-UploadClient.Tpo $(DEPDIR)/amuled-UploadClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadClient.cpp' object='amuled-UploadClient.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-UploadClient.o `test -f 'UploadClient.cpp' || echo '$(srcdir)/'`UploadClient.cpp amuled-UploadClient.obj: UploadClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-UploadClient.obj -MD -MP -MF $(DEPDIR)/amuled-UploadClient.Tpo -c -o amuled-UploadClient.obj `if test -f 'UploadClient.cpp'; then $(CYGPATH_W) 'UploadClient.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadClient.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-UploadClient.Tpo $(DEPDIR)/amuled-UploadClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadClient.cpp' object='amuled-UploadClient.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-UploadClient.obj `if test -f 'UploadClient.cpp'; then $(CYGPATH_W) 'UploadClient.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadClient.cpp'; fi` amuled-UploadQueue.o: UploadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-UploadQueue.o -MD -MP -MF $(DEPDIR)/amuled-UploadQueue.Tpo -c -o amuled-UploadQueue.o `test -f 'UploadQueue.cpp' || echo '$(srcdir)/'`UploadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-UploadQueue.Tpo $(DEPDIR)/amuled-UploadQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadQueue.cpp' object='amuled-UploadQueue.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-UploadQueue.o `test -f 'UploadQueue.cpp' || echo '$(srcdir)/'`UploadQueue.cpp amuled-UploadQueue.obj: UploadQueue.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-UploadQueue.obj -MD -MP -MF $(DEPDIR)/amuled-UploadQueue.Tpo -c -o amuled-UploadQueue.obj `if test -f 'UploadQueue.cpp'; then $(CYGPATH_W) 'UploadQueue.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadQueue.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-UploadQueue.Tpo $(DEPDIR)/amuled-UploadQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UploadQueue.cpp' object='amuled-UploadQueue.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-UploadQueue.obj `if test -f 'UploadQueue.cpp'; then $(CYGPATH_W) 'UploadQueue.cpp'; else $(CYGPATH_W) '$(srcdir)/UploadQueue.cpp'; fi` amuled-Indexed.o: kademlia/kademlia/Indexed.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Indexed.o -MD -MP -MF $(DEPDIR)/amuled-Indexed.Tpo -c -o amuled-Indexed.o `test -f 'kademlia/kademlia/Indexed.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Indexed.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Indexed.Tpo $(DEPDIR)/amuled-Indexed.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Indexed.cpp' object='amuled-Indexed.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Indexed.o `test -f 'kademlia/kademlia/Indexed.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Indexed.cpp amuled-Indexed.obj: kademlia/kademlia/Indexed.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Indexed.obj -MD -MP -MF $(DEPDIR)/amuled-Indexed.Tpo -c -o amuled-Indexed.obj `if test -f 'kademlia/kademlia/Indexed.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Indexed.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Indexed.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Indexed.Tpo $(DEPDIR)/amuled-Indexed.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Indexed.cpp' object='amuled-Indexed.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Indexed.obj `if test -f 'kademlia/kademlia/Indexed.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Indexed.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Indexed.cpp'; fi` amuled-Kademlia.o: kademlia/kademlia/Kademlia.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Kademlia.o -MD -MP -MF $(DEPDIR)/amuled-Kademlia.Tpo -c -o amuled-Kademlia.o `test -f 'kademlia/kademlia/Kademlia.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Kademlia.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Kademlia.Tpo $(DEPDIR)/amuled-Kademlia.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Kademlia.cpp' object='amuled-Kademlia.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Kademlia.o `test -f 'kademlia/kademlia/Kademlia.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Kademlia.cpp amuled-Kademlia.obj: kademlia/kademlia/Kademlia.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Kademlia.obj -MD -MP -MF $(DEPDIR)/amuled-Kademlia.Tpo -c -o amuled-Kademlia.obj `if test -f 'kademlia/kademlia/Kademlia.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Kademlia.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Kademlia.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Kademlia.Tpo $(DEPDIR)/amuled-Kademlia.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Kademlia.cpp' object='amuled-Kademlia.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Kademlia.obj `if test -f 'kademlia/kademlia/Kademlia.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Kademlia.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Kademlia.cpp'; fi` amuled-Prefs.o: kademlia/kademlia/Prefs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Prefs.o -MD -MP -MF $(DEPDIR)/amuled-Prefs.Tpo -c -o amuled-Prefs.o `test -f 'kademlia/kademlia/Prefs.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Prefs.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Prefs.Tpo $(DEPDIR)/amuled-Prefs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Prefs.cpp' object='amuled-Prefs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Prefs.o `test -f 'kademlia/kademlia/Prefs.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Prefs.cpp amuled-Prefs.obj: kademlia/kademlia/Prefs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Prefs.obj -MD -MP -MF $(DEPDIR)/amuled-Prefs.Tpo -c -o amuled-Prefs.obj `if test -f 'kademlia/kademlia/Prefs.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Prefs.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Prefs.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Prefs.Tpo $(DEPDIR)/amuled-Prefs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Prefs.cpp' object='amuled-Prefs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Prefs.obj `if test -f 'kademlia/kademlia/Prefs.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Prefs.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Prefs.cpp'; fi` amuled-Search.o: kademlia/kademlia/Search.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Search.o -MD -MP -MF $(DEPDIR)/amuled-Search.Tpo -c -o amuled-Search.o `test -f 'kademlia/kademlia/Search.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Search.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Search.Tpo $(DEPDIR)/amuled-Search.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Search.cpp' object='amuled-Search.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Search.o `test -f 'kademlia/kademlia/Search.cpp' || echo '$(srcdir)/'`kademlia/kademlia/Search.cpp amuled-Search.obj: kademlia/kademlia/Search.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Search.obj -MD -MP -MF $(DEPDIR)/amuled-Search.Tpo -c -o amuled-Search.obj `if test -f 'kademlia/kademlia/Search.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Search.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Search.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Search.Tpo $(DEPDIR)/amuled-Search.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/Search.cpp' object='amuled-Search.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Search.obj `if test -f 'kademlia/kademlia/Search.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/Search.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/Search.cpp'; fi` amuled-UDPFirewallTester.o: kademlia/kademlia/UDPFirewallTester.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-UDPFirewallTester.o -MD -MP -MF $(DEPDIR)/amuled-UDPFirewallTester.Tpo -c -o amuled-UDPFirewallTester.o `test -f 'kademlia/kademlia/UDPFirewallTester.cpp' || echo '$(srcdir)/'`kademlia/kademlia/UDPFirewallTester.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-UDPFirewallTester.Tpo $(DEPDIR)/amuled-UDPFirewallTester.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/UDPFirewallTester.cpp' object='amuled-UDPFirewallTester.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-UDPFirewallTester.o `test -f 'kademlia/kademlia/UDPFirewallTester.cpp' || echo '$(srcdir)/'`kademlia/kademlia/UDPFirewallTester.cpp amuled-UDPFirewallTester.obj: kademlia/kademlia/UDPFirewallTester.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-UDPFirewallTester.obj -MD -MP -MF $(DEPDIR)/amuled-UDPFirewallTester.Tpo -c -o amuled-UDPFirewallTester.obj `if test -f 'kademlia/kademlia/UDPFirewallTester.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/UDPFirewallTester.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/UDPFirewallTester.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-UDPFirewallTester.Tpo $(DEPDIR)/amuled-UDPFirewallTester.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/kademlia/UDPFirewallTester.cpp' object='amuled-UDPFirewallTester.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-UDPFirewallTester.obj `if test -f 'kademlia/kademlia/UDPFirewallTester.cpp'; then $(CYGPATH_W) 'kademlia/kademlia/UDPFirewallTester.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/kademlia/UDPFirewallTester.cpp'; fi` amuled-KademliaUDPListener.o: kademlia/net/KademliaUDPListener.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-KademliaUDPListener.o -MD -MP -MF $(DEPDIR)/amuled-KademliaUDPListener.Tpo -c -o amuled-KademliaUDPListener.o `test -f 'kademlia/net/KademliaUDPListener.cpp' || echo '$(srcdir)/'`kademlia/net/KademliaUDPListener.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-KademliaUDPListener.Tpo $(DEPDIR)/amuled-KademliaUDPListener.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/net/KademliaUDPListener.cpp' object='amuled-KademliaUDPListener.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-KademliaUDPListener.o `test -f 'kademlia/net/KademliaUDPListener.cpp' || echo '$(srcdir)/'`kademlia/net/KademliaUDPListener.cpp amuled-KademliaUDPListener.obj: kademlia/net/KademliaUDPListener.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-KademliaUDPListener.obj -MD -MP -MF $(DEPDIR)/amuled-KademliaUDPListener.Tpo -c -o amuled-KademliaUDPListener.obj `if test -f 'kademlia/net/KademliaUDPListener.cpp'; then $(CYGPATH_W) 'kademlia/net/KademliaUDPListener.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/net/KademliaUDPListener.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-KademliaUDPListener.Tpo $(DEPDIR)/amuled-KademliaUDPListener.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/net/KademliaUDPListener.cpp' object='amuled-KademliaUDPListener.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-KademliaUDPListener.obj `if test -f 'kademlia/net/KademliaUDPListener.cpp'; then $(CYGPATH_W) 'kademlia/net/KademliaUDPListener.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/net/KademliaUDPListener.cpp'; fi` amuled-PacketTracking.o: kademlia/net/PacketTracking.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-PacketTracking.o -MD -MP -MF $(DEPDIR)/amuled-PacketTracking.Tpo -c -o amuled-PacketTracking.o `test -f 'kademlia/net/PacketTracking.cpp' || echo '$(srcdir)/'`kademlia/net/PacketTracking.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-PacketTracking.Tpo $(DEPDIR)/amuled-PacketTracking.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/net/PacketTracking.cpp' object='amuled-PacketTracking.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-PacketTracking.o `test -f 'kademlia/net/PacketTracking.cpp' || echo '$(srcdir)/'`kademlia/net/PacketTracking.cpp amuled-PacketTracking.obj: kademlia/net/PacketTracking.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-PacketTracking.obj -MD -MP -MF $(DEPDIR)/amuled-PacketTracking.Tpo -c -o amuled-PacketTracking.obj `if test -f 'kademlia/net/PacketTracking.cpp'; then $(CYGPATH_W) 'kademlia/net/PacketTracking.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/net/PacketTracking.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-PacketTracking.Tpo $(DEPDIR)/amuled-PacketTracking.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/net/PacketTracking.cpp' object='amuled-PacketTracking.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-PacketTracking.obj `if test -f 'kademlia/net/PacketTracking.cpp'; then $(CYGPATH_W) 'kademlia/net/PacketTracking.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/net/PacketTracking.cpp'; fi` amuled-Contact.o: kademlia/routing/Contact.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Contact.o -MD -MP -MF $(DEPDIR)/amuled-Contact.Tpo -c -o amuled-Contact.o `test -f 'kademlia/routing/Contact.cpp' || echo '$(srcdir)/'`kademlia/routing/Contact.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Contact.Tpo $(DEPDIR)/amuled-Contact.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/routing/Contact.cpp' object='amuled-Contact.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Contact.o `test -f 'kademlia/routing/Contact.cpp' || echo '$(srcdir)/'`kademlia/routing/Contact.cpp amuled-Contact.obj: kademlia/routing/Contact.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Contact.obj -MD -MP -MF $(DEPDIR)/amuled-Contact.Tpo -c -o amuled-Contact.obj `if test -f 'kademlia/routing/Contact.cpp'; then $(CYGPATH_W) 'kademlia/routing/Contact.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/routing/Contact.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Contact.Tpo $(DEPDIR)/amuled-Contact.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/routing/Contact.cpp' object='amuled-Contact.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Contact.obj `if test -f 'kademlia/routing/Contact.cpp'; then $(CYGPATH_W) 'kademlia/routing/Contact.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/routing/Contact.cpp'; fi` amuled-RoutingZone.o: kademlia/routing/RoutingZone.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-RoutingZone.o -MD -MP -MF $(DEPDIR)/amuled-RoutingZone.Tpo -c -o amuled-RoutingZone.o `test -f 'kademlia/routing/RoutingZone.cpp' || echo '$(srcdir)/'`kademlia/routing/RoutingZone.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-RoutingZone.Tpo $(DEPDIR)/amuled-RoutingZone.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/routing/RoutingZone.cpp' object='amuled-RoutingZone.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-RoutingZone.o `test -f 'kademlia/routing/RoutingZone.cpp' || echo '$(srcdir)/'`kademlia/routing/RoutingZone.cpp amuled-RoutingZone.obj: kademlia/routing/RoutingZone.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-RoutingZone.obj -MD -MP -MF $(DEPDIR)/amuled-RoutingZone.Tpo -c -o amuled-RoutingZone.obj `if test -f 'kademlia/routing/RoutingZone.cpp'; then $(CYGPATH_W) 'kademlia/routing/RoutingZone.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/routing/RoutingZone.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-RoutingZone.Tpo $(DEPDIR)/amuled-RoutingZone.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='kademlia/routing/RoutingZone.cpp' object='amuled-RoutingZone.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-RoutingZone.obj `if test -f 'kademlia/routing/RoutingZone.cpp'; then $(CYGPATH_W) 'kademlia/routing/RoutingZone.cpp'; else $(CYGPATH_W) '$(srcdir)/kademlia/routing/RoutingZone.cpp'; fi` amuled-AdunanzA.o: AdunanzA.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-AdunanzA.o -MD -MP -MF $(DEPDIR)/amuled-AdunanzA.Tpo -c -o amuled-AdunanzA.o `test -f 'AdunanzA.cpp' || echo '$(srcdir)/'`AdunanzA.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-AdunanzA.Tpo $(DEPDIR)/amuled-AdunanzA.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AdunanzA.cpp' object='amuled-AdunanzA.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-AdunanzA.o `test -f 'AdunanzA.cpp' || echo '$(srcdir)/'`AdunanzA.cpp amuled-AdunanzA.obj: AdunanzA.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-AdunanzA.obj -MD -MP -MF $(DEPDIR)/amuled-AdunanzA.Tpo -c -o amuled-AdunanzA.obj `if test -f 'AdunanzA.cpp'; then $(CYGPATH_W) 'AdunanzA.cpp'; else $(CYGPATH_W) '$(srcdir)/AdunanzA.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-AdunanzA.Tpo $(DEPDIR)/amuled-AdunanzA.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AdunanzA.cpp' object='amuled-AdunanzA.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-AdunanzA.obj `if test -f 'AdunanzA.cpp'; then $(CYGPATH_W) 'AdunanzA.cpp'; else $(CYGPATH_W) '$(srcdir)/AdunanzA.cpp'; fi` amuled-RemoteSettings.o: RemoteSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-RemoteSettings.o -MD -MP -MF $(DEPDIR)/amuled-RemoteSettings.Tpo -c -o amuled-RemoteSettings.o `test -f 'RemoteSettings.cpp' || echo '$(srcdir)/'`RemoteSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-RemoteSettings.Tpo $(DEPDIR)/amuled-RemoteSettings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RemoteSettings.cpp' object='amuled-RemoteSettings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-RemoteSettings.o `test -f 'RemoteSettings.cpp' || echo '$(srcdir)/'`RemoteSettings.cpp amuled-RemoteSettings.obj: RemoteSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-RemoteSettings.obj -MD -MP -MF $(DEPDIR)/amuled-RemoteSettings.Tpo -c -o amuled-RemoteSettings.obj `if test -f 'RemoteSettings.cpp'; then $(CYGPATH_W) 'RemoteSettings.cpp'; else $(CYGPATH_W) '$(srcdir)/RemoteSettings.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-RemoteSettings.Tpo $(DEPDIR)/amuled-RemoteSettings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RemoteSettings.cpp' object='amuled-RemoteSettings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-RemoteSettings.obj `if test -f 'RemoteSettings.cpp'; then $(CYGPATH_W) 'RemoteSettings.cpp'; else $(CYGPATH_W) '$(srcdir)/RemoteSettings.cpp'; fi` amuled-AdunanzAStreaming.o: AdunanzAStreaming.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-AdunanzAStreaming.o -MD -MP -MF $(DEPDIR)/amuled-AdunanzAStreaming.Tpo -c -o amuled-AdunanzAStreaming.o `test -f 'AdunanzAStreaming.cpp' || echo '$(srcdir)/'`AdunanzAStreaming.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-AdunanzAStreaming.Tpo $(DEPDIR)/amuled-AdunanzAStreaming.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AdunanzAStreaming.cpp' object='amuled-AdunanzAStreaming.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-AdunanzAStreaming.o `test -f 'AdunanzAStreaming.cpp' || echo '$(srcdir)/'`AdunanzAStreaming.cpp amuled-AdunanzAStreaming.obj: AdunanzAStreaming.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-AdunanzAStreaming.obj -MD -MP -MF $(DEPDIR)/amuled-AdunanzAStreaming.Tpo -c -o amuled-AdunanzAStreaming.obj `if test -f 'AdunanzAStreaming.cpp'; then $(CYGPATH_W) 'AdunanzAStreaming.cpp'; else $(CYGPATH_W) '$(srcdir)/AdunanzAStreaming.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-AdunanzAStreaming.Tpo $(DEPDIR)/amuled-AdunanzAStreaming.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AdunanzAStreaming.cpp' object='amuled-AdunanzAStreaming.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-AdunanzAStreaming.obj `if test -f 'AdunanzAStreaming.cpp'; then $(CYGPATH_W) 'AdunanzAStreaming.cpp'; else $(CYGPATH_W) '$(srcdir)/AdunanzAStreaming.cpp'; fi` amuled-amuleAppCommon.o: amuleAppCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-amuleAppCommon.o -MD -MP -MF $(DEPDIR)/amuled-amuleAppCommon.Tpo -c -o amuled-amuleAppCommon.o `test -f 'amuleAppCommon.cpp' || echo '$(srcdir)/'`amuleAppCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-amuleAppCommon.Tpo $(DEPDIR)/amuled-amuleAppCommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuleAppCommon.cpp' object='amuled-amuleAppCommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-amuleAppCommon.o `test -f 'amuleAppCommon.cpp' || echo '$(srcdir)/'`amuleAppCommon.cpp amuled-amuleAppCommon.obj: amuleAppCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-amuleAppCommon.obj -MD -MP -MF $(DEPDIR)/amuled-amuleAppCommon.Tpo -c -o amuled-amuleAppCommon.obj `if test -f 'amuleAppCommon.cpp'; then $(CYGPATH_W) 'amuleAppCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/amuleAppCommon.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-amuleAppCommon.Tpo $(DEPDIR)/amuled-amuleAppCommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuleAppCommon.cpp' object='amuled-amuleAppCommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-amuleAppCommon.obj `if test -f 'amuleAppCommon.cpp'; then $(CYGPATH_W) 'amuleAppCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/amuleAppCommon.cpp'; fi` amuled-ClientRef.o: ClientRef.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ClientRef.o -MD -MP -MF $(DEPDIR)/amuled-ClientRef.Tpo -c -o amuled-ClientRef.o `test -f 'ClientRef.cpp' || echo '$(srcdir)/'`ClientRef.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ClientRef.Tpo $(DEPDIR)/amuled-ClientRef.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientRef.cpp' object='amuled-ClientRef.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ClientRef.o `test -f 'ClientRef.cpp' || echo '$(srcdir)/'`ClientRef.cpp amuled-ClientRef.obj: ClientRef.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ClientRef.obj -MD -MP -MF $(DEPDIR)/amuled-ClientRef.Tpo -c -o amuled-ClientRef.obj `if test -f 'ClientRef.cpp'; then $(CYGPATH_W) 'ClientRef.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientRef.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ClientRef.Tpo $(DEPDIR)/amuled-ClientRef.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientRef.cpp' object='amuled-ClientRef.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ClientRef.obj `if test -f 'ClientRef.cpp'; then $(CYGPATH_W) 'ClientRef.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientRef.cpp'; fi` amuled-DataToText.o: DataToText.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-DataToText.o -MD -MP -MF $(DEPDIR)/amuled-DataToText.Tpo -c -o amuled-DataToText.o `test -f 'DataToText.cpp' || echo '$(srcdir)/'`DataToText.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-DataToText.Tpo $(DEPDIR)/amuled-DataToText.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DataToText.cpp' object='amuled-DataToText.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-DataToText.o `test -f 'DataToText.cpp' || echo '$(srcdir)/'`DataToText.cpp amuled-DataToText.obj: DataToText.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-DataToText.obj -MD -MP -MF $(DEPDIR)/amuled-DataToText.Tpo -c -o amuled-DataToText.obj `if test -f 'DataToText.cpp'; then $(CYGPATH_W) 'DataToText.cpp'; else $(CYGPATH_W) '$(srcdir)/DataToText.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-DataToText.Tpo $(DEPDIR)/amuled-DataToText.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DataToText.cpp' object='amuled-DataToText.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-DataToText.obj `if test -f 'DataToText.cpp'; then $(CYGPATH_W) 'DataToText.cpp'; else $(CYGPATH_W) '$(srcdir)/DataToText.cpp'; fi` amuled-ECSpecialMuleTags.o: ECSpecialMuleTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ECSpecialMuleTags.o -MD -MP -MF $(DEPDIR)/amuled-ECSpecialMuleTags.Tpo -c -o amuled-ECSpecialMuleTags.o `test -f 'ECSpecialMuleTags.cpp' || echo '$(srcdir)/'`ECSpecialMuleTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ECSpecialMuleTags.Tpo $(DEPDIR)/amuled-ECSpecialMuleTags.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ECSpecialMuleTags.cpp' object='amuled-ECSpecialMuleTags.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ECSpecialMuleTags.o `test -f 'ECSpecialMuleTags.cpp' || echo '$(srcdir)/'`ECSpecialMuleTags.cpp amuled-ECSpecialMuleTags.obj: ECSpecialMuleTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-ECSpecialMuleTags.obj -MD -MP -MF $(DEPDIR)/amuled-ECSpecialMuleTags.Tpo -c -o amuled-ECSpecialMuleTags.obj `if test -f 'ECSpecialMuleTags.cpp'; then $(CYGPATH_W) 'ECSpecialMuleTags.cpp'; else $(CYGPATH_W) '$(srcdir)/ECSpecialMuleTags.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-ECSpecialMuleTags.Tpo $(DEPDIR)/amuled-ECSpecialMuleTags.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ECSpecialMuleTags.cpp' object='amuled-ECSpecialMuleTags.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-ECSpecialMuleTags.obj `if test -f 'ECSpecialMuleTags.cpp'; then $(CYGPATH_W) 'ECSpecialMuleTags.cpp'; else $(CYGPATH_W) '$(srcdir)/ECSpecialMuleTags.cpp'; fi` amuled-KnownFile.o: KnownFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-KnownFile.o -MD -MP -MF $(DEPDIR)/amuled-KnownFile.Tpo -c -o amuled-KnownFile.o `test -f 'KnownFile.cpp' || echo '$(srcdir)/'`KnownFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-KnownFile.Tpo $(DEPDIR)/amuled-KnownFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KnownFile.cpp' object='amuled-KnownFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-KnownFile.o `test -f 'KnownFile.cpp' || echo '$(srcdir)/'`KnownFile.cpp amuled-KnownFile.obj: KnownFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-KnownFile.obj -MD -MP -MF $(DEPDIR)/amuled-KnownFile.Tpo -c -o amuled-KnownFile.obj `if test -f 'KnownFile.cpp'; then $(CYGPATH_W) 'KnownFile.cpp'; else $(CYGPATH_W) '$(srcdir)/KnownFile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-KnownFile.Tpo $(DEPDIR)/amuled-KnownFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KnownFile.cpp' object='amuled-KnownFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-KnownFile.obj `if test -f 'KnownFile.cpp'; then $(CYGPATH_W) 'KnownFile.cpp'; else $(CYGPATH_W) '$(srcdir)/KnownFile.cpp'; fi` amuled-GetTickCount.o: GetTickCount.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-GetTickCount.o -MD -MP -MF $(DEPDIR)/amuled-GetTickCount.Tpo -c -o amuled-GetTickCount.o `test -f 'GetTickCount.cpp' || echo '$(srcdir)/'`GetTickCount.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-GetTickCount.Tpo $(DEPDIR)/amuled-GetTickCount.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GetTickCount.cpp' object='amuled-GetTickCount.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-GetTickCount.o `test -f 'GetTickCount.cpp' || echo '$(srcdir)/'`GetTickCount.cpp amuled-GetTickCount.obj: GetTickCount.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-GetTickCount.obj -MD -MP -MF $(DEPDIR)/amuled-GetTickCount.Tpo -c -o amuled-GetTickCount.obj `if test -f 'GetTickCount.cpp'; then $(CYGPATH_W) 'GetTickCount.cpp'; else $(CYGPATH_W) '$(srcdir)/GetTickCount.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-GetTickCount.Tpo $(DEPDIR)/amuled-GetTickCount.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GetTickCount.cpp' object='amuled-GetTickCount.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-GetTickCount.obj `if test -f 'GetTickCount.cpp'; then $(CYGPATH_W) 'GetTickCount.cpp'; else $(CYGPATH_W) '$(srcdir)/GetTickCount.cpp'; fi` amuled-GuiEvents.o: GuiEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-GuiEvents.o -MD -MP -MF $(DEPDIR)/amuled-GuiEvents.Tpo -c -o amuled-GuiEvents.o `test -f 'GuiEvents.cpp' || echo '$(srcdir)/'`GuiEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-GuiEvents.Tpo $(DEPDIR)/amuled-GuiEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GuiEvents.cpp' object='amuled-GuiEvents.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-GuiEvents.o `test -f 'GuiEvents.cpp' || echo '$(srcdir)/'`GuiEvents.cpp amuled-GuiEvents.obj: GuiEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-GuiEvents.obj -MD -MP -MF $(DEPDIR)/amuled-GuiEvents.Tpo -c -o amuled-GuiEvents.obj `if test -f 'GuiEvents.cpp'; then $(CYGPATH_W) 'GuiEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/GuiEvents.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-GuiEvents.Tpo $(DEPDIR)/amuled-GuiEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GuiEvents.cpp' object='amuled-GuiEvents.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-GuiEvents.obj `if test -f 'GuiEvents.cpp'; then $(CYGPATH_W) 'GuiEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/GuiEvents.cpp'; fi` amuled-HTTPDownload.o: HTTPDownload.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-HTTPDownload.o -MD -MP -MF $(DEPDIR)/amuled-HTTPDownload.Tpo -c -o amuled-HTTPDownload.o `test -f 'HTTPDownload.cpp' || echo '$(srcdir)/'`HTTPDownload.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-HTTPDownload.Tpo $(DEPDIR)/amuled-HTTPDownload.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='HTTPDownload.cpp' object='amuled-HTTPDownload.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-HTTPDownload.o `test -f 'HTTPDownload.cpp' || echo '$(srcdir)/'`HTTPDownload.cpp amuled-HTTPDownload.obj: HTTPDownload.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-HTTPDownload.obj -MD -MP -MF $(DEPDIR)/amuled-HTTPDownload.Tpo -c -o amuled-HTTPDownload.obj `if test -f 'HTTPDownload.cpp'; then $(CYGPATH_W) 'HTTPDownload.cpp'; else $(CYGPATH_W) '$(srcdir)/HTTPDownload.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-HTTPDownload.Tpo $(DEPDIR)/amuled-HTTPDownload.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='HTTPDownload.cpp' object='amuled-HTTPDownload.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-HTTPDownload.obj `if test -f 'HTTPDownload.cpp'; then $(CYGPATH_W) 'HTTPDownload.cpp'; else $(CYGPATH_W) '$(srcdir)/HTTPDownload.cpp'; fi` amuled-Logger.o: Logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Logger.o -MD -MP -MF $(DEPDIR)/amuled-Logger.Tpo -c -o amuled-Logger.o `test -f 'Logger.cpp' || echo '$(srcdir)/'`Logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Logger.Tpo $(DEPDIR)/amuled-Logger.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Logger.cpp' object='amuled-Logger.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Logger.o `test -f 'Logger.cpp' || echo '$(srcdir)/'`Logger.cpp amuled-Logger.obj: Logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Logger.obj -MD -MP -MF $(DEPDIR)/amuled-Logger.Tpo -c -o amuled-Logger.obj `if test -f 'Logger.cpp'; then $(CYGPATH_W) 'Logger.cpp'; else $(CYGPATH_W) '$(srcdir)/Logger.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Logger.Tpo $(DEPDIR)/amuled-Logger.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Logger.cpp' object='amuled-Logger.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Logger.obj `if test -f 'Logger.cpp'; then $(CYGPATH_W) 'Logger.cpp'; else $(CYGPATH_W) '$(srcdir)/Logger.cpp'; fi` amuled-PartFile.o: PartFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-PartFile.o -MD -MP -MF $(DEPDIR)/amuled-PartFile.Tpo -c -o amuled-PartFile.o `test -f 'PartFile.cpp' || echo '$(srcdir)/'`PartFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-PartFile.Tpo $(DEPDIR)/amuled-PartFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartFile.cpp' object='amuled-PartFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-PartFile.o `test -f 'PartFile.cpp' || echo '$(srcdir)/'`PartFile.cpp amuled-PartFile.obj: PartFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-PartFile.obj -MD -MP -MF $(DEPDIR)/amuled-PartFile.Tpo -c -o amuled-PartFile.obj `if test -f 'PartFile.cpp'; then $(CYGPATH_W) 'PartFile.cpp'; else $(CYGPATH_W) '$(srcdir)/PartFile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-PartFile.Tpo $(DEPDIR)/amuled-PartFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartFile.cpp' object='amuled-PartFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-PartFile.obj `if test -f 'PartFile.cpp'; then $(CYGPATH_W) 'PartFile.cpp'; else $(CYGPATH_W) '$(srcdir)/PartFile.cpp'; fi` amuled-Preferences.o: Preferences.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Preferences.o -MD -MP -MF $(DEPDIR)/amuled-Preferences.Tpo -c -o amuled-Preferences.o `test -f 'Preferences.cpp' || echo '$(srcdir)/'`Preferences.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Preferences.Tpo $(DEPDIR)/amuled-Preferences.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Preferences.cpp' object='amuled-Preferences.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Preferences.o `test -f 'Preferences.cpp' || echo '$(srcdir)/'`Preferences.cpp amuled-Preferences.obj: Preferences.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Preferences.obj -MD -MP -MF $(DEPDIR)/amuled-Preferences.Tpo -c -o amuled-Preferences.obj `if test -f 'Preferences.cpp'; then $(CYGPATH_W) 'Preferences.cpp'; else $(CYGPATH_W) '$(srcdir)/Preferences.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Preferences.Tpo $(DEPDIR)/amuled-Preferences.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Preferences.cpp' object='amuled-Preferences.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Preferences.obj `if test -f 'Preferences.cpp'; then $(CYGPATH_W) 'Preferences.cpp'; else $(CYGPATH_W) '$(srcdir)/Preferences.cpp'; fi` amuled-Proxy.o: Proxy.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Proxy.o -MD -MP -MF $(DEPDIR)/amuled-Proxy.Tpo -c -o amuled-Proxy.o `test -f 'Proxy.cpp' || echo '$(srcdir)/'`Proxy.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Proxy.Tpo $(DEPDIR)/amuled-Proxy.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Proxy.cpp' object='amuled-Proxy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Proxy.o `test -f 'Proxy.cpp' || echo '$(srcdir)/'`Proxy.cpp amuled-Proxy.obj: Proxy.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Proxy.obj -MD -MP -MF $(DEPDIR)/amuled-Proxy.Tpo -c -o amuled-Proxy.obj `if test -f 'Proxy.cpp'; then $(CYGPATH_W) 'Proxy.cpp'; else $(CYGPATH_W) '$(srcdir)/Proxy.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Proxy.Tpo $(DEPDIR)/amuled-Proxy.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Proxy.cpp' object='amuled-Proxy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Proxy.obj `if test -f 'Proxy.cpp'; then $(CYGPATH_W) 'Proxy.cpp'; else $(CYGPATH_W) '$(srcdir)/Proxy.cpp'; fi` amuled-Server.o: Server.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Server.o -MD -MP -MF $(DEPDIR)/amuled-Server.Tpo -c -o amuled-Server.o `test -f 'Server.cpp' || echo '$(srcdir)/'`Server.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Server.Tpo $(DEPDIR)/amuled-Server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Server.cpp' object='amuled-Server.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Server.o `test -f 'Server.cpp' || echo '$(srcdir)/'`Server.cpp amuled-Server.obj: Server.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Server.obj -MD -MP -MF $(DEPDIR)/amuled-Server.Tpo -c -o amuled-Server.obj `if test -f 'Server.cpp'; then $(CYGPATH_W) 'Server.cpp'; else $(CYGPATH_W) '$(srcdir)/Server.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Server.Tpo $(DEPDIR)/amuled-Server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Server.cpp' object='amuled-Server.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Server.obj `if test -f 'Server.cpp'; then $(CYGPATH_W) 'Server.cpp'; else $(CYGPATH_W) '$(srcdir)/Server.cpp'; fi` amuled-Statistics.o: Statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Statistics.o -MD -MP -MF $(DEPDIR)/amuled-Statistics.Tpo -c -o amuled-Statistics.o `test -f 'Statistics.cpp' || echo '$(srcdir)/'`Statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Statistics.Tpo $(DEPDIR)/amuled-Statistics.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Statistics.cpp' object='amuled-Statistics.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Statistics.o `test -f 'Statistics.cpp' || echo '$(srcdir)/'`Statistics.cpp amuled-Statistics.obj: Statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-Statistics.obj -MD -MP -MF $(DEPDIR)/amuled-Statistics.Tpo -c -o amuled-Statistics.obj `if test -f 'Statistics.cpp'; then $(CYGPATH_W) 'Statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/Statistics.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-Statistics.Tpo $(DEPDIR)/amuled-Statistics.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Statistics.cpp' object='amuled-Statistics.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-Statistics.obj `if test -f 'Statistics.cpp'; then $(CYGPATH_W) 'Statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/Statistics.cpp'; fi` amuled-StatTree.o: StatTree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-StatTree.o -MD -MP -MF $(DEPDIR)/amuled-StatTree.Tpo -c -o amuled-StatTree.o `test -f 'StatTree.cpp' || echo '$(srcdir)/'`StatTree.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-StatTree.Tpo $(DEPDIR)/amuled-StatTree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StatTree.cpp' object='amuled-StatTree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-StatTree.o `test -f 'StatTree.cpp' || echo '$(srcdir)/'`StatTree.cpp amuled-StatTree.obj: StatTree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-StatTree.obj -MD -MP -MF $(DEPDIR)/amuled-StatTree.Tpo -c -o amuled-StatTree.obj `if test -f 'StatTree.cpp'; then $(CYGPATH_W) 'StatTree.cpp'; else $(CYGPATH_W) '$(srcdir)/StatTree.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-StatTree.Tpo $(DEPDIR)/amuled-StatTree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StatTree.cpp' object='amuled-StatTree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-StatTree.obj `if test -f 'StatTree.cpp'; then $(CYGPATH_W) 'StatTree.cpp'; else $(CYGPATH_W) '$(srcdir)/StatTree.cpp'; fi` amuled-UserEvents.o: UserEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-UserEvents.o -MD -MP -MF $(DEPDIR)/amuled-UserEvents.Tpo -c -o amuled-UserEvents.o `test -f 'UserEvents.cpp' || echo '$(srcdir)/'`UserEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-UserEvents.Tpo $(DEPDIR)/amuled-UserEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UserEvents.cpp' object='amuled-UserEvents.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-UserEvents.o `test -f 'UserEvents.cpp' || echo '$(srcdir)/'`UserEvents.cpp amuled-UserEvents.obj: UserEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-UserEvents.obj -MD -MP -MF $(DEPDIR)/amuled-UserEvents.Tpo -c -o amuled-UserEvents.obj `if test -f 'UserEvents.cpp'; then $(CYGPATH_W) 'UserEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/UserEvents.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-UserEvents.Tpo $(DEPDIR)/amuled-UserEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UserEvents.cpp' object='amuled-UserEvents.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-UserEvents.obj `if test -f 'UserEvents.cpp'; then $(CYGPATH_W) 'UserEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/UserEvents.cpp'; fi` amuled-KADUSettings.o: KADUSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-KADUSettings.o -MD -MP -MF $(DEPDIR)/amuled-KADUSettings.Tpo -c -o amuled-KADUSettings.o `test -f 'KADUSettings.cpp' || echo '$(srcdir)/'`KADUSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-KADUSettings.Tpo $(DEPDIR)/amuled-KADUSettings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KADUSettings.cpp' object='amuled-KADUSettings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-KADUSettings.o `test -f 'KADUSettings.cpp' || echo '$(srcdir)/'`KADUSettings.cpp amuled-KADUSettings.obj: KADUSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -MT amuled-KADUSettings.obj -MD -MP -MF $(DEPDIR)/amuled-KADUSettings.Tpo -c -o amuled-KADUSettings.obj `if test -f 'KADUSettings.cpp'; then $(CYGPATH_W) 'KADUSettings.cpp'; else $(CYGPATH_W) '$(srcdir)/KADUSettings.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuled-KADUSettings.Tpo $(DEPDIR)/amuled-KADUSettings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KADUSettings.cpp' object='amuled-KADUSettings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuled_CPPFLAGS) $(CPPFLAGS) $(amuled_CXXFLAGS) $(CXXFLAGS) -c -o amuled-KADUSettings.obj `if test -f 'KADUSettings.cpp'; then $(CYGPATH_W) 'KADUSettings.cpp'; else $(CYGPATH_W) '$(srcdir)/KADUSettings.cpp'; fi` amulegui-amule-remote-gui.o: amule-remote-gui.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-amule-remote-gui.o -MD -MP -MF $(DEPDIR)/amulegui-amule-remote-gui.Tpo -c -o amulegui-amule-remote-gui.o `test -f 'amule-remote-gui.cpp' || echo '$(srcdir)/'`amule-remote-gui.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-amule-remote-gui.Tpo $(DEPDIR)/amulegui-amule-remote-gui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amule-remote-gui.cpp' object='amulegui-amule-remote-gui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-amule-remote-gui.o `test -f 'amule-remote-gui.cpp' || echo '$(srcdir)/'`amule-remote-gui.cpp amulegui-amule-remote-gui.obj: amule-remote-gui.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-amule-remote-gui.obj -MD -MP -MF $(DEPDIR)/amulegui-amule-remote-gui.Tpo -c -o amulegui-amule-remote-gui.obj `if test -f 'amule-remote-gui.cpp'; then $(CYGPATH_W) 'amule-remote-gui.cpp'; else $(CYGPATH_W) '$(srcdir)/amule-remote-gui.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-amule-remote-gui.Tpo $(DEPDIR)/amulegui-amule-remote-gui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amule-remote-gui.cpp' object='amulegui-amule-remote-gui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-amule-remote-gui.obj `if test -f 'amule-remote-gui.cpp'; then $(CYGPATH_W) 'amule-remote-gui.cpp'; else $(CYGPATH_W) '$(srcdir)/amule-remote-gui.cpp'; fi` amulegui-amule-gui.o: amule-gui.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-amule-gui.o -MD -MP -MF $(DEPDIR)/amulegui-amule-gui.Tpo -c -o amulegui-amule-gui.o `test -f 'amule-gui.cpp' || echo '$(srcdir)/'`amule-gui.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-amule-gui.Tpo $(DEPDIR)/amulegui-amule-gui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amule-gui.cpp' object='amulegui-amule-gui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-amule-gui.o `test -f 'amule-gui.cpp' || echo '$(srcdir)/'`amule-gui.cpp amulegui-amule-gui.obj: amule-gui.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-amule-gui.obj -MD -MP -MF $(DEPDIR)/amulegui-amule-gui.Tpo -c -o amulegui-amule-gui.obj `if test -f 'amule-gui.cpp'; then $(CYGPATH_W) 'amule-gui.cpp'; else $(CYGPATH_W) '$(srcdir)/amule-gui.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-amule-gui.Tpo $(DEPDIR)/amulegui-amule-gui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amule-gui.cpp' object='amulegui-amule-gui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-amule-gui.obj `if test -f 'amule-gui.cpp'; then $(CYGPATH_W) 'amule-gui.cpp'; else $(CYGPATH_W) '$(srcdir)/amule-gui.cpp'; fi` amulegui-amuleDlg.o: amuleDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-amuleDlg.o -MD -MP -MF $(DEPDIR)/amulegui-amuleDlg.Tpo -c -o amulegui-amuleDlg.o `test -f 'amuleDlg.cpp' || echo '$(srcdir)/'`amuleDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-amuleDlg.Tpo $(DEPDIR)/amulegui-amuleDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuleDlg.cpp' object='amulegui-amuleDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-amuleDlg.o `test -f 'amuleDlg.cpp' || echo '$(srcdir)/'`amuleDlg.cpp amulegui-amuleDlg.obj: amuleDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-amuleDlg.obj -MD -MP -MF $(DEPDIR)/amulegui-amuleDlg.Tpo -c -o amulegui-amuleDlg.obj `if test -f 'amuleDlg.cpp'; then $(CYGPATH_W) 'amuleDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/amuleDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-amuleDlg.Tpo $(DEPDIR)/amulegui-amuleDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuleDlg.cpp' object='amulegui-amuleDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-amuleDlg.obj `if test -f 'amuleDlg.cpp'; then $(CYGPATH_W) 'amuleDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/amuleDlg.cpp'; fi` amulegui-AddFriend.o: AddFriend.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-AddFriend.o -MD -MP -MF $(DEPDIR)/amulegui-AddFriend.Tpo -c -o amulegui-AddFriend.o `test -f 'AddFriend.cpp' || echo '$(srcdir)/'`AddFriend.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-AddFriend.Tpo $(DEPDIR)/amulegui-AddFriend.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AddFriend.cpp' object='amulegui-AddFriend.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-AddFriend.o `test -f 'AddFriend.cpp' || echo '$(srcdir)/'`AddFriend.cpp amulegui-AddFriend.obj: AddFriend.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-AddFriend.obj -MD -MP -MF $(DEPDIR)/amulegui-AddFriend.Tpo -c -o amulegui-AddFriend.obj `if test -f 'AddFriend.cpp'; then $(CYGPATH_W) 'AddFriend.cpp'; else $(CYGPATH_W) '$(srcdir)/AddFriend.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-AddFriend.Tpo $(DEPDIR)/amulegui-AddFriend.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AddFriend.cpp' object='amulegui-AddFriend.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-AddFriend.obj `if test -f 'AddFriend.cpp'; then $(CYGPATH_W) 'AddFriend.cpp'; else $(CYGPATH_W) '$(srcdir)/AddFriend.cpp'; fi` amulegui-CatDialog.o: CatDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-CatDialog.o -MD -MP -MF $(DEPDIR)/amulegui-CatDialog.Tpo -c -o amulegui-CatDialog.o `test -f 'CatDialog.cpp' || echo '$(srcdir)/'`CatDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-CatDialog.Tpo $(DEPDIR)/amulegui-CatDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CatDialog.cpp' object='amulegui-CatDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-CatDialog.o `test -f 'CatDialog.cpp' || echo '$(srcdir)/'`CatDialog.cpp amulegui-CatDialog.obj: CatDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-CatDialog.obj -MD -MP -MF $(DEPDIR)/amulegui-CatDialog.Tpo -c -o amulegui-CatDialog.obj `if test -f 'CatDialog.cpp'; then $(CYGPATH_W) 'CatDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/CatDialog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-CatDialog.Tpo $(DEPDIR)/amulegui-CatDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CatDialog.cpp' object='amulegui-CatDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-CatDialog.obj `if test -f 'CatDialog.cpp'; then $(CYGPATH_W) 'CatDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/CatDialog.cpp'; fi` amulegui-ChatSelector.o: ChatSelector.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ChatSelector.o -MD -MP -MF $(DEPDIR)/amulegui-ChatSelector.Tpo -c -o amulegui-ChatSelector.o `test -f 'ChatSelector.cpp' || echo '$(srcdir)/'`ChatSelector.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ChatSelector.Tpo $(DEPDIR)/amulegui-ChatSelector.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ChatSelector.cpp' object='amulegui-ChatSelector.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ChatSelector.o `test -f 'ChatSelector.cpp' || echo '$(srcdir)/'`ChatSelector.cpp amulegui-ChatSelector.obj: ChatSelector.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ChatSelector.obj -MD -MP -MF $(DEPDIR)/amulegui-ChatSelector.Tpo -c -o amulegui-ChatSelector.obj `if test -f 'ChatSelector.cpp'; then $(CYGPATH_W) 'ChatSelector.cpp'; else $(CYGPATH_W) '$(srcdir)/ChatSelector.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ChatSelector.Tpo $(DEPDIR)/amulegui-ChatSelector.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ChatSelector.cpp' object='amulegui-ChatSelector.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ChatSelector.obj `if test -f 'ChatSelector.cpp'; then $(CYGPATH_W) 'ChatSelector.cpp'; else $(CYGPATH_W) '$(srcdir)/ChatSelector.cpp'; fi` amulegui-ChatWnd.o: ChatWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ChatWnd.o -MD -MP -MF $(DEPDIR)/amulegui-ChatWnd.Tpo -c -o amulegui-ChatWnd.o `test -f 'ChatWnd.cpp' || echo '$(srcdir)/'`ChatWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ChatWnd.Tpo $(DEPDIR)/amulegui-ChatWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ChatWnd.cpp' object='amulegui-ChatWnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ChatWnd.o `test -f 'ChatWnd.cpp' || echo '$(srcdir)/'`ChatWnd.cpp amulegui-ChatWnd.obj: ChatWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ChatWnd.obj -MD -MP -MF $(DEPDIR)/amulegui-ChatWnd.Tpo -c -o amulegui-ChatWnd.obj `if test -f 'ChatWnd.cpp'; then $(CYGPATH_W) 'ChatWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/ChatWnd.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ChatWnd.Tpo $(DEPDIR)/amulegui-ChatWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ChatWnd.cpp' object='amulegui-ChatWnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ChatWnd.obj `if test -f 'ChatWnd.cpp'; then $(CYGPATH_W) 'ChatWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/ChatWnd.cpp'; fi` amulegui-CommentDialog.o: CommentDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-CommentDialog.o -MD -MP -MF $(DEPDIR)/amulegui-CommentDialog.Tpo -c -o amulegui-CommentDialog.o `test -f 'CommentDialog.cpp' || echo '$(srcdir)/'`CommentDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-CommentDialog.Tpo $(DEPDIR)/amulegui-CommentDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CommentDialog.cpp' object='amulegui-CommentDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-CommentDialog.o `test -f 'CommentDialog.cpp' || echo '$(srcdir)/'`CommentDialog.cpp amulegui-CommentDialog.obj: CommentDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-CommentDialog.obj -MD -MP -MF $(DEPDIR)/amulegui-CommentDialog.Tpo -c -o amulegui-CommentDialog.obj `if test -f 'CommentDialog.cpp'; then $(CYGPATH_W) 'CommentDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/CommentDialog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-CommentDialog.Tpo $(DEPDIR)/amulegui-CommentDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CommentDialog.cpp' object='amulegui-CommentDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-CommentDialog.obj `if test -f 'CommentDialog.cpp'; then $(CYGPATH_W) 'CommentDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/CommentDialog.cpp'; fi` amulegui-CommentDialogLst.o: CommentDialogLst.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-CommentDialogLst.o -MD -MP -MF $(DEPDIR)/amulegui-CommentDialogLst.Tpo -c -o amulegui-CommentDialogLst.o `test -f 'CommentDialogLst.cpp' || echo '$(srcdir)/'`CommentDialogLst.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-CommentDialogLst.Tpo $(DEPDIR)/amulegui-CommentDialogLst.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CommentDialogLst.cpp' object='amulegui-CommentDialogLst.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-CommentDialogLst.o `test -f 'CommentDialogLst.cpp' || echo '$(srcdir)/'`CommentDialogLst.cpp amulegui-CommentDialogLst.obj: CommentDialogLst.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-CommentDialogLst.obj -MD -MP -MF $(DEPDIR)/amulegui-CommentDialogLst.Tpo -c -o amulegui-CommentDialogLst.obj `if test -f 'CommentDialogLst.cpp'; then $(CYGPATH_W) 'CommentDialogLst.cpp'; else $(CYGPATH_W) '$(srcdir)/CommentDialogLst.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-CommentDialogLst.Tpo $(DEPDIR)/amulegui-CommentDialogLst.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CommentDialogLst.cpp' object='amulegui-CommentDialogLst.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-CommentDialogLst.obj `if test -f 'CommentDialogLst.cpp'; then $(CYGPATH_W) 'CommentDialogLst.cpp'; else $(CYGPATH_W) '$(srcdir)/CommentDialogLst.cpp'; fi` amulegui-GenericClientListCtrl.o: GenericClientListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-GenericClientListCtrl.o -MD -MP -MF $(DEPDIR)/amulegui-GenericClientListCtrl.Tpo -c -o amulegui-GenericClientListCtrl.o `test -f 'GenericClientListCtrl.cpp' || echo '$(srcdir)/'`GenericClientListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-GenericClientListCtrl.Tpo $(DEPDIR)/amulegui-GenericClientListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GenericClientListCtrl.cpp' object='amulegui-GenericClientListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-GenericClientListCtrl.o `test -f 'GenericClientListCtrl.cpp' || echo '$(srcdir)/'`GenericClientListCtrl.cpp amulegui-GenericClientListCtrl.obj: GenericClientListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-GenericClientListCtrl.obj -MD -MP -MF $(DEPDIR)/amulegui-GenericClientListCtrl.Tpo -c -o amulegui-GenericClientListCtrl.obj `if test -f 'GenericClientListCtrl.cpp'; then $(CYGPATH_W) 'GenericClientListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/GenericClientListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-GenericClientListCtrl.Tpo $(DEPDIR)/amulegui-GenericClientListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GenericClientListCtrl.cpp' object='amulegui-GenericClientListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-GenericClientListCtrl.obj `if test -f 'GenericClientListCtrl.cpp'; then $(CYGPATH_W) 'GenericClientListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/GenericClientListCtrl.cpp'; fi` amulegui-ClientDetailDialog.o: ClientDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ClientDetailDialog.o -MD -MP -MF $(DEPDIR)/amulegui-ClientDetailDialog.Tpo -c -o amulegui-ClientDetailDialog.o `test -f 'ClientDetailDialog.cpp' || echo '$(srcdir)/'`ClientDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ClientDetailDialog.Tpo $(DEPDIR)/amulegui-ClientDetailDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientDetailDialog.cpp' object='amulegui-ClientDetailDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ClientDetailDialog.o `test -f 'ClientDetailDialog.cpp' || echo '$(srcdir)/'`ClientDetailDialog.cpp amulegui-ClientDetailDialog.obj: ClientDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ClientDetailDialog.obj -MD -MP -MF $(DEPDIR)/amulegui-ClientDetailDialog.Tpo -c -o amulegui-ClientDetailDialog.obj `if test -f 'ClientDetailDialog.cpp'; then $(CYGPATH_W) 'ClientDetailDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientDetailDialog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ClientDetailDialog.Tpo $(DEPDIR)/amulegui-ClientDetailDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientDetailDialog.cpp' object='amulegui-ClientDetailDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ClientDetailDialog.obj `if test -f 'ClientDetailDialog.cpp'; then $(CYGPATH_W) 'ClientDetailDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientDetailDialog.cpp'; fi` amulegui-DirectoryTreeCtrl.o: DirectoryTreeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-DirectoryTreeCtrl.o -MD -MP -MF $(DEPDIR)/amulegui-DirectoryTreeCtrl.Tpo -c -o amulegui-DirectoryTreeCtrl.o `test -f 'DirectoryTreeCtrl.cpp' || echo '$(srcdir)/'`DirectoryTreeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-DirectoryTreeCtrl.Tpo $(DEPDIR)/amulegui-DirectoryTreeCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DirectoryTreeCtrl.cpp' object='amulegui-DirectoryTreeCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-DirectoryTreeCtrl.o `test -f 'DirectoryTreeCtrl.cpp' || echo '$(srcdir)/'`DirectoryTreeCtrl.cpp amulegui-DirectoryTreeCtrl.obj: DirectoryTreeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-DirectoryTreeCtrl.obj -MD -MP -MF $(DEPDIR)/amulegui-DirectoryTreeCtrl.Tpo -c -o amulegui-DirectoryTreeCtrl.obj `if test -f 'DirectoryTreeCtrl.cpp'; then $(CYGPATH_W) 'DirectoryTreeCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/DirectoryTreeCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-DirectoryTreeCtrl.Tpo $(DEPDIR)/amulegui-DirectoryTreeCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DirectoryTreeCtrl.cpp' object='amulegui-DirectoryTreeCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-DirectoryTreeCtrl.obj `if test -f 'DirectoryTreeCtrl.cpp'; then $(CYGPATH_W) 'DirectoryTreeCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/DirectoryTreeCtrl.cpp'; fi` amulegui-FileDetailDialog.o: FileDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-FileDetailDialog.o -MD -MP -MF $(DEPDIR)/amulegui-FileDetailDialog.Tpo -c -o amulegui-FileDetailDialog.o `test -f 'FileDetailDialog.cpp' || echo '$(srcdir)/'`FileDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-FileDetailDialog.Tpo $(DEPDIR)/amulegui-FileDetailDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FileDetailDialog.cpp' object='amulegui-FileDetailDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-FileDetailDialog.o `test -f 'FileDetailDialog.cpp' || echo '$(srcdir)/'`FileDetailDialog.cpp amulegui-FileDetailDialog.obj: FileDetailDialog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-FileDetailDialog.obj -MD -MP -MF $(DEPDIR)/amulegui-FileDetailDialog.Tpo -c -o amulegui-FileDetailDialog.obj `if test -f 'FileDetailDialog.cpp'; then $(CYGPATH_W) 'FileDetailDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/FileDetailDialog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-FileDetailDialog.Tpo $(DEPDIR)/amulegui-FileDetailDialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FileDetailDialog.cpp' object='amulegui-FileDetailDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-FileDetailDialog.obj `if test -f 'FileDetailDialog.cpp'; then $(CYGPATH_W) 'FileDetailDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/FileDetailDialog.cpp'; fi` amulegui-KadDlg.o: KadDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-KadDlg.o -MD -MP -MF $(DEPDIR)/amulegui-KadDlg.Tpo -c -o amulegui-KadDlg.o `test -f 'KadDlg.cpp' || echo '$(srcdir)/'`KadDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-KadDlg.Tpo $(DEPDIR)/amulegui-KadDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KadDlg.cpp' object='amulegui-KadDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-KadDlg.o `test -f 'KadDlg.cpp' || echo '$(srcdir)/'`KadDlg.cpp amulegui-KadDlg.obj: KadDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-KadDlg.obj -MD -MP -MF $(DEPDIR)/amulegui-KadDlg.Tpo -c -o amulegui-KadDlg.obj `if test -f 'KadDlg.cpp'; then $(CYGPATH_W) 'KadDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/KadDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-KadDlg.Tpo $(DEPDIR)/amulegui-KadDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KadDlg.cpp' object='amulegui-KadDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-KadDlg.obj `if test -f 'KadDlg.cpp'; then $(CYGPATH_W) 'KadDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/KadDlg.cpp'; fi` amulegui-OScopeCtrl.o: OScopeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-OScopeCtrl.o -MD -MP -MF $(DEPDIR)/amulegui-OScopeCtrl.Tpo -c -o amulegui-OScopeCtrl.o `test -f 'OScopeCtrl.cpp' || echo '$(srcdir)/'`OScopeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-OScopeCtrl.Tpo $(DEPDIR)/amulegui-OScopeCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OScopeCtrl.cpp' object='amulegui-OScopeCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-OScopeCtrl.o `test -f 'OScopeCtrl.cpp' || echo '$(srcdir)/'`OScopeCtrl.cpp amulegui-OScopeCtrl.obj: OScopeCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-OScopeCtrl.obj -MD -MP -MF $(DEPDIR)/amulegui-OScopeCtrl.Tpo -c -o amulegui-OScopeCtrl.obj `if test -f 'OScopeCtrl.cpp'; then $(CYGPATH_W) 'OScopeCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/OScopeCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-OScopeCtrl.Tpo $(DEPDIR)/amulegui-OScopeCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OScopeCtrl.cpp' object='amulegui-OScopeCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-OScopeCtrl.obj `if test -f 'OScopeCtrl.cpp'; then $(CYGPATH_W) 'OScopeCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/OScopeCtrl.cpp'; fi` amulegui-PrefsUnifiedDlg.o: PrefsUnifiedDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-PrefsUnifiedDlg.o -MD -MP -MF $(DEPDIR)/amulegui-PrefsUnifiedDlg.Tpo -c -o amulegui-PrefsUnifiedDlg.o `test -f 'PrefsUnifiedDlg.cpp' || echo '$(srcdir)/'`PrefsUnifiedDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-PrefsUnifiedDlg.Tpo $(DEPDIR)/amulegui-PrefsUnifiedDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PrefsUnifiedDlg.cpp' object='amulegui-PrefsUnifiedDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-PrefsUnifiedDlg.o `test -f 'PrefsUnifiedDlg.cpp' || echo '$(srcdir)/'`PrefsUnifiedDlg.cpp amulegui-PrefsUnifiedDlg.obj: PrefsUnifiedDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-PrefsUnifiedDlg.obj -MD -MP -MF $(DEPDIR)/amulegui-PrefsUnifiedDlg.Tpo -c -o amulegui-PrefsUnifiedDlg.obj `if test -f 'PrefsUnifiedDlg.cpp'; then $(CYGPATH_W) 'PrefsUnifiedDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/PrefsUnifiedDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-PrefsUnifiedDlg.Tpo $(DEPDIR)/amulegui-PrefsUnifiedDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PrefsUnifiedDlg.cpp' object='amulegui-PrefsUnifiedDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-PrefsUnifiedDlg.obj `if test -f 'PrefsUnifiedDlg.cpp'; then $(CYGPATH_W) 'PrefsUnifiedDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/PrefsUnifiedDlg.cpp'; fi` amulegui-SearchDlg.o: SearchDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SearchDlg.o -MD -MP -MF $(DEPDIR)/amulegui-SearchDlg.Tpo -c -o amulegui-SearchDlg.o `test -f 'SearchDlg.cpp' || echo '$(srcdir)/'`SearchDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SearchDlg.Tpo $(DEPDIR)/amulegui-SearchDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchDlg.cpp' object='amulegui-SearchDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SearchDlg.o `test -f 'SearchDlg.cpp' || echo '$(srcdir)/'`SearchDlg.cpp amulegui-SearchDlg.obj: SearchDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SearchDlg.obj -MD -MP -MF $(DEPDIR)/amulegui-SearchDlg.Tpo -c -o amulegui-SearchDlg.obj `if test -f 'SearchDlg.cpp'; then $(CYGPATH_W) 'SearchDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SearchDlg.Tpo $(DEPDIR)/amulegui-SearchDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchDlg.cpp' object='amulegui-SearchDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SearchDlg.obj `if test -f 'SearchDlg.cpp'; then $(CYGPATH_W) 'SearchDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchDlg.cpp'; fi` amulegui-ServerWnd.o: ServerWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ServerWnd.o -MD -MP -MF $(DEPDIR)/amulegui-ServerWnd.Tpo -c -o amulegui-ServerWnd.o `test -f 'ServerWnd.cpp' || echo '$(srcdir)/'`ServerWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ServerWnd.Tpo $(DEPDIR)/amulegui-ServerWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerWnd.cpp' object='amulegui-ServerWnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ServerWnd.o `test -f 'ServerWnd.cpp' || echo '$(srcdir)/'`ServerWnd.cpp amulegui-ServerWnd.obj: ServerWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ServerWnd.obj -MD -MP -MF $(DEPDIR)/amulegui-ServerWnd.Tpo -c -o amulegui-ServerWnd.obj `if test -f 'ServerWnd.cpp'; then $(CYGPATH_W) 'ServerWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerWnd.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ServerWnd.Tpo $(DEPDIR)/amulegui-ServerWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerWnd.cpp' object='amulegui-ServerWnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ServerWnd.obj `if test -f 'ServerWnd.cpp'; then $(CYGPATH_W) 'ServerWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerWnd.cpp'; fi` amulegui-SharedFilesWnd.o: SharedFilesWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SharedFilesWnd.o -MD -MP -MF $(DEPDIR)/amulegui-SharedFilesWnd.Tpo -c -o amulegui-SharedFilesWnd.o `test -f 'SharedFilesWnd.cpp' || echo '$(srcdir)/'`SharedFilesWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SharedFilesWnd.Tpo $(DEPDIR)/amulegui-SharedFilesWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilesWnd.cpp' object='amulegui-SharedFilesWnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SharedFilesWnd.o `test -f 'SharedFilesWnd.cpp' || echo '$(srcdir)/'`SharedFilesWnd.cpp amulegui-SharedFilesWnd.obj: SharedFilesWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SharedFilesWnd.obj -MD -MP -MF $(DEPDIR)/amulegui-SharedFilesWnd.Tpo -c -o amulegui-SharedFilesWnd.obj `if test -f 'SharedFilesWnd.cpp'; then $(CYGPATH_W) 'SharedFilesWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilesWnd.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SharedFilesWnd.Tpo $(DEPDIR)/amulegui-SharedFilesWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilesWnd.cpp' object='amulegui-SharedFilesWnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SharedFilesWnd.obj `if test -f 'SharedFilesWnd.cpp'; then $(CYGPATH_W) 'SharedFilesWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilesWnd.cpp'; fi` amulegui-StatisticsDlg.o: StatisticsDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-StatisticsDlg.o -MD -MP -MF $(DEPDIR)/amulegui-StatisticsDlg.Tpo -c -o amulegui-StatisticsDlg.o `test -f 'StatisticsDlg.cpp' || echo '$(srcdir)/'`StatisticsDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-StatisticsDlg.Tpo $(DEPDIR)/amulegui-StatisticsDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StatisticsDlg.cpp' object='amulegui-StatisticsDlg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-StatisticsDlg.o `test -f 'StatisticsDlg.cpp' || echo '$(srcdir)/'`StatisticsDlg.cpp amulegui-StatisticsDlg.obj: StatisticsDlg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-StatisticsDlg.obj -MD -MP -MF $(DEPDIR)/amulegui-StatisticsDlg.Tpo -c -o amulegui-StatisticsDlg.obj `if test -f 'StatisticsDlg.cpp'; then $(CYGPATH_W) 'StatisticsDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/StatisticsDlg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-StatisticsDlg.Tpo $(DEPDIR)/amulegui-StatisticsDlg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StatisticsDlg.cpp' object='amulegui-StatisticsDlg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-StatisticsDlg.obj `if test -f 'StatisticsDlg.cpp'; then $(CYGPATH_W) 'StatisticsDlg.cpp'; else $(CYGPATH_W) '$(srcdir)/StatisticsDlg.cpp'; fi` amulegui-SearchListCtrl.o: SearchListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SearchListCtrl.o -MD -MP -MF $(DEPDIR)/amulegui-SearchListCtrl.Tpo -c -o amulegui-SearchListCtrl.o `test -f 'SearchListCtrl.cpp' || echo '$(srcdir)/'`SearchListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SearchListCtrl.Tpo $(DEPDIR)/amulegui-SearchListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchListCtrl.cpp' object='amulegui-SearchListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SearchListCtrl.o `test -f 'SearchListCtrl.cpp' || echo '$(srcdir)/'`SearchListCtrl.cpp amulegui-SearchListCtrl.obj: SearchListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SearchListCtrl.obj -MD -MP -MF $(DEPDIR)/amulegui-SearchListCtrl.Tpo -c -o amulegui-SearchListCtrl.obj `if test -f 'SearchListCtrl.cpp'; then $(CYGPATH_W) 'SearchListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SearchListCtrl.Tpo $(DEPDIR)/amulegui-SearchListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchListCtrl.cpp' object='amulegui-SearchListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SearchListCtrl.obj `if test -f 'SearchListCtrl.cpp'; then $(CYGPATH_W) 'SearchListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchListCtrl.cpp'; fi` amulegui-DownloadListCtrl.o: DownloadListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-DownloadListCtrl.o -MD -MP -MF $(DEPDIR)/amulegui-DownloadListCtrl.Tpo -c -o amulegui-DownloadListCtrl.o `test -f 'DownloadListCtrl.cpp' || echo '$(srcdir)/'`DownloadListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-DownloadListCtrl.Tpo $(DEPDIR)/amulegui-DownloadListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadListCtrl.cpp' object='amulegui-DownloadListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-DownloadListCtrl.o `test -f 'DownloadListCtrl.cpp' || echo '$(srcdir)/'`DownloadListCtrl.cpp amulegui-DownloadListCtrl.obj: DownloadListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-DownloadListCtrl.obj -MD -MP -MF $(DEPDIR)/amulegui-DownloadListCtrl.Tpo -c -o amulegui-DownloadListCtrl.obj `if test -f 'DownloadListCtrl.cpp'; then $(CYGPATH_W) 'DownloadListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-DownloadListCtrl.Tpo $(DEPDIR)/amulegui-DownloadListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DownloadListCtrl.cpp' object='amulegui-DownloadListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-DownloadListCtrl.obj `if test -f 'DownloadListCtrl.cpp'; then $(CYGPATH_W) 'DownloadListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/DownloadListCtrl.cpp'; fi` amulegui-SourceListCtrl.o: SourceListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SourceListCtrl.o -MD -MP -MF $(DEPDIR)/amulegui-SourceListCtrl.Tpo -c -o amulegui-SourceListCtrl.o `test -f 'SourceListCtrl.cpp' || echo '$(srcdir)/'`SourceListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SourceListCtrl.Tpo $(DEPDIR)/amulegui-SourceListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SourceListCtrl.cpp' object='amulegui-SourceListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SourceListCtrl.o `test -f 'SourceListCtrl.cpp' || echo '$(srcdir)/'`SourceListCtrl.cpp amulegui-SourceListCtrl.obj: SourceListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SourceListCtrl.obj -MD -MP -MF $(DEPDIR)/amulegui-SourceListCtrl.Tpo -c -o amulegui-SourceListCtrl.obj `if test -f 'SourceListCtrl.cpp'; then $(CYGPATH_W) 'SourceListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SourceListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SourceListCtrl.Tpo $(DEPDIR)/amulegui-SourceListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SourceListCtrl.cpp' object='amulegui-SourceListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SourceListCtrl.obj `if test -f 'SourceListCtrl.cpp'; then $(CYGPATH_W) 'SourceListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SourceListCtrl.cpp'; fi` amulegui-SharedFilePeersListCtrl.o: SharedFilePeersListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SharedFilePeersListCtrl.o -MD -MP -MF $(DEPDIR)/amulegui-SharedFilePeersListCtrl.Tpo -c -o amulegui-SharedFilePeersListCtrl.o `test -f 'SharedFilePeersListCtrl.cpp' || echo '$(srcdir)/'`SharedFilePeersListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SharedFilePeersListCtrl.Tpo $(DEPDIR)/amulegui-SharedFilePeersListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilePeersListCtrl.cpp' object='amulegui-SharedFilePeersListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SharedFilePeersListCtrl.o `test -f 'SharedFilePeersListCtrl.cpp' || echo '$(srcdir)/'`SharedFilePeersListCtrl.cpp amulegui-SharedFilePeersListCtrl.obj: SharedFilePeersListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SharedFilePeersListCtrl.obj -MD -MP -MF $(DEPDIR)/amulegui-SharedFilePeersListCtrl.Tpo -c -o amulegui-SharedFilePeersListCtrl.obj `if test -f 'SharedFilePeersListCtrl.cpp'; then $(CYGPATH_W) 'SharedFilePeersListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilePeersListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SharedFilePeersListCtrl.Tpo $(DEPDIR)/amulegui-SharedFilePeersListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilePeersListCtrl.cpp' object='amulegui-SharedFilePeersListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SharedFilePeersListCtrl.obj `if test -f 'SharedFilePeersListCtrl.cpp'; then $(CYGPATH_W) 'SharedFilePeersListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilePeersListCtrl.cpp'; fi` amulegui-FriendListCtrl.o: FriendListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-FriendListCtrl.o -MD -MP -MF $(DEPDIR)/amulegui-FriendListCtrl.Tpo -c -o amulegui-FriendListCtrl.o `test -f 'FriendListCtrl.cpp' || echo '$(srcdir)/'`FriendListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-FriendListCtrl.Tpo $(DEPDIR)/amulegui-FriendListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FriendListCtrl.cpp' object='amulegui-FriendListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-FriendListCtrl.o `test -f 'FriendListCtrl.cpp' || echo '$(srcdir)/'`FriendListCtrl.cpp amulegui-FriendListCtrl.obj: FriendListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-FriendListCtrl.obj -MD -MP -MF $(DEPDIR)/amulegui-FriendListCtrl.Tpo -c -o amulegui-FriendListCtrl.obj `if test -f 'FriendListCtrl.cpp'; then $(CYGPATH_W) 'FriendListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/FriendListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-FriendListCtrl.Tpo $(DEPDIR)/amulegui-FriendListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FriendListCtrl.cpp' object='amulegui-FriendListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-FriendListCtrl.obj `if test -f 'FriendListCtrl.cpp'; then $(CYGPATH_W) 'FriendListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/FriendListCtrl.cpp'; fi` amulegui-ServerListCtrl.o: ServerListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ServerListCtrl.o -MD -MP -MF $(DEPDIR)/amulegui-ServerListCtrl.Tpo -c -o amulegui-ServerListCtrl.o `test -f 'ServerListCtrl.cpp' || echo '$(srcdir)/'`ServerListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ServerListCtrl.Tpo $(DEPDIR)/amulegui-ServerListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerListCtrl.cpp' object='amulegui-ServerListCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ServerListCtrl.o `test -f 'ServerListCtrl.cpp' || echo '$(srcdir)/'`ServerListCtrl.cpp amulegui-ServerListCtrl.obj: ServerListCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ServerListCtrl.obj -MD -MP -MF $(DEPDIR)/amulegui-ServerListCtrl.Tpo -c -o amulegui-ServerListCtrl.obj `if test -f 'ServerListCtrl.cpp'; then $(CYGPATH_W) 'ServerListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerListCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ServerListCtrl.Tpo $(DEPDIR)/amulegui-ServerListCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ServerListCtrl.cpp' object='amulegui-ServerListCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ServerListCtrl.obj `if test -f 'ServerListCtrl.cpp'; then $(CYGPATH_W) 'ServerListCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/ServerListCtrl.cpp'; fi` amulegui-SharedFilesCtrl.o: SharedFilesCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SharedFilesCtrl.o -MD -MP -MF $(DEPDIR)/amulegui-SharedFilesCtrl.Tpo -c -o amulegui-SharedFilesCtrl.o `test -f 'SharedFilesCtrl.cpp' || echo '$(srcdir)/'`SharedFilesCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SharedFilesCtrl.Tpo $(DEPDIR)/amulegui-SharedFilesCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilesCtrl.cpp' object='amulegui-SharedFilesCtrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SharedFilesCtrl.o `test -f 'SharedFilesCtrl.cpp' || echo '$(srcdir)/'`SharedFilesCtrl.cpp amulegui-SharedFilesCtrl.obj: SharedFilesCtrl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-SharedFilesCtrl.obj -MD -MP -MF $(DEPDIR)/amulegui-SharedFilesCtrl.Tpo -c -o amulegui-SharedFilesCtrl.obj `if test -f 'SharedFilesCtrl.cpp'; then $(CYGPATH_W) 'SharedFilesCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilesCtrl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-SharedFilesCtrl.Tpo $(DEPDIR)/amulegui-SharedFilesCtrl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SharedFilesCtrl.cpp' object='amulegui-SharedFilesCtrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-SharedFilesCtrl.obj `if test -f 'SharedFilesCtrl.cpp'; then $(CYGPATH_W) 'SharedFilesCtrl.cpp'; else $(CYGPATH_W) '$(srcdir)/SharedFilesCtrl.cpp'; fi` amulegui-MuleTrayIcon.o: MuleTrayIcon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-MuleTrayIcon.o -MD -MP -MF $(DEPDIR)/amulegui-MuleTrayIcon.Tpo -c -o amulegui-MuleTrayIcon.o `test -f 'MuleTrayIcon.cpp' || echo '$(srcdir)/'`MuleTrayIcon.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-MuleTrayIcon.Tpo $(DEPDIR)/amulegui-MuleTrayIcon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleTrayIcon.cpp' object='amulegui-MuleTrayIcon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-MuleTrayIcon.o `test -f 'MuleTrayIcon.cpp' || echo '$(srcdir)/'`MuleTrayIcon.cpp amulegui-MuleTrayIcon.obj: MuleTrayIcon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-MuleTrayIcon.obj -MD -MP -MF $(DEPDIR)/amulegui-MuleTrayIcon.Tpo -c -o amulegui-MuleTrayIcon.obj `if test -f 'MuleTrayIcon.cpp'; then $(CYGPATH_W) 'MuleTrayIcon.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleTrayIcon.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-MuleTrayIcon.Tpo $(DEPDIR)/amulegui-MuleTrayIcon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleTrayIcon.cpp' object='amulegui-MuleTrayIcon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-MuleTrayIcon.obj `if test -f 'MuleTrayIcon.cpp'; then $(CYGPATH_W) 'MuleTrayIcon.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleTrayIcon.cpp'; fi` amulegui-TransferWnd.o: TransferWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-TransferWnd.o -MD -MP -MF $(DEPDIR)/amulegui-TransferWnd.Tpo -c -o amulegui-TransferWnd.o `test -f 'TransferWnd.cpp' || echo '$(srcdir)/'`TransferWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-TransferWnd.Tpo $(DEPDIR)/amulegui-TransferWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TransferWnd.cpp' object='amulegui-TransferWnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-TransferWnd.o `test -f 'TransferWnd.cpp' || echo '$(srcdir)/'`TransferWnd.cpp amulegui-TransferWnd.obj: TransferWnd.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-TransferWnd.obj -MD -MP -MF $(DEPDIR)/amulegui-TransferWnd.Tpo -c -o amulegui-TransferWnd.obj `if test -f 'TransferWnd.cpp'; then $(CYGPATH_W) 'TransferWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/TransferWnd.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-TransferWnd.Tpo $(DEPDIR)/amulegui-TransferWnd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TransferWnd.cpp' object='amulegui-TransferWnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-TransferWnd.obj `if test -f 'TransferWnd.cpp'; then $(CYGPATH_W) 'TransferWnd.cpp'; else $(CYGPATH_W) '$(srcdir)/TransferWnd.cpp'; fi` amulegui-amuleAppCommon.o: amuleAppCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-amuleAppCommon.o -MD -MP -MF $(DEPDIR)/amulegui-amuleAppCommon.Tpo -c -o amulegui-amuleAppCommon.o `test -f 'amuleAppCommon.cpp' || echo '$(srcdir)/'`amuleAppCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-amuleAppCommon.Tpo $(DEPDIR)/amulegui-amuleAppCommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuleAppCommon.cpp' object='amulegui-amuleAppCommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-amuleAppCommon.o `test -f 'amuleAppCommon.cpp' || echo '$(srcdir)/'`amuleAppCommon.cpp amulegui-amuleAppCommon.obj: amuleAppCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-amuleAppCommon.obj -MD -MP -MF $(DEPDIR)/amulegui-amuleAppCommon.Tpo -c -o amulegui-amuleAppCommon.obj `if test -f 'amuleAppCommon.cpp'; then $(CYGPATH_W) 'amuleAppCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/amuleAppCommon.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-amuleAppCommon.Tpo $(DEPDIR)/amulegui-amuleAppCommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='amuleAppCommon.cpp' object='amulegui-amuleAppCommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-amuleAppCommon.obj `if test -f 'amuleAppCommon.cpp'; then $(CYGPATH_W) 'amuleAppCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/amuleAppCommon.cpp'; fi` amulegui-ClientRef.o: ClientRef.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ClientRef.o -MD -MP -MF $(DEPDIR)/amulegui-ClientRef.Tpo -c -o amulegui-ClientRef.o `test -f 'ClientRef.cpp' || echo '$(srcdir)/'`ClientRef.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ClientRef.Tpo $(DEPDIR)/amulegui-ClientRef.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientRef.cpp' object='amulegui-ClientRef.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ClientRef.o `test -f 'ClientRef.cpp' || echo '$(srcdir)/'`ClientRef.cpp amulegui-ClientRef.obj: ClientRef.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ClientRef.obj -MD -MP -MF $(DEPDIR)/amulegui-ClientRef.Tpo -c -o amulegui-ClientRef.obj `if test -f 'ClientRef.cpp'; then $(CYGPATH_W) 'ClientRef.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientRef.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ClientRef.Tpo $(DEPDIR)/amulegui-ClientRef.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClientRef.cpp' object='amulegui-ClientRef.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ClientRef.obj `if test -f 'ClientRef.cpp'; then $(CYGPATH_W) 'ClientRef.cpp'; else $(CYGPATH_W) '$(srcdir)/ClientRef.cpp'; fi` amulegui-DataToText.o: DataToText.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-DataToText.o -MD -MP -MF $(DEPDIR)/amulegui-DataToText.Tpo -c -o amulegui-DataToText.o `test -f 'DataToText.cpp' || echo '$(srcdir)/'`DataToText.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-DataToText.Tpo $(DEPDIR)/amulegui-DataToText.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DataToText.cpp' object='amulegui-DataToText.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-DataToText.o `test -f 'DataToText.cpp' || echo '$(srcdir)/'`DataToText.cpp amulegui-DataToText.obj: DataToText.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-DataToText.obj -MD -MP -MF $(DEPDIR)/amulegui-DataToText.Tpo -c -o amulegui-DataToText.obj `if test -f 'DataToText.cpp'; then $(CYGPATH_W) 'DataToText.cpp'; else $(CYGPATH_W) '$(srcdir)/DataToText.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-DataToText.Tpo $(DEPDIR)/amulegui-DataToText.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DataToText.cpp' object='amulegui-DataToText.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-DataToText.obj `if test -f 'DataToText.cpp'; then $(CYGPATH_W) 'DataToText.cpp'; else $(CYGPATH_W) '$(srcdir)/DataToText.cpp'; fi` amulegui-ECSpecialMuleTags.o: ECSpecialMuleTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ECSpecialMuleTags.o -MD -MP -MF $(DEPDIR)/amulegui-ECSpecialMuleTags.Tpo -c -o amulegui-ECSpecialMuleTags.o `test -f 'ECSpecialMuleTags.cpp' || echo '$(srcdir)/'`ECSpecialMuleTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ECSpecialMuleTags.Tpo $(DEPDIR)/amulegui-ECSpecialMuleTags.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ECSpecialMuleTags.cpp' object='amulegui-ECSpecialMuleTags.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ECSpecialMuleTags.o `test -f 'ECSpecialMuleTags.cpp' || echo '$(srcdir)/'`ECSpecialMuleTags.cpp amulegui-ECSpecialMuleTags.obj: ECSpecialMuleTags.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-ECSpecialMuleTags.obj -MD -MP -MF $(DEPDIR)/amulegui-ECSpecialMuleTags.Tpo -c -o amulegui-ECSpecialMuleTags.obj `if test -f 'ECSpecialMuleTags.cpp'; then $(CYGPATH_W) 'ECSpecialMuleTags.cpp'; else $(CYGPATH_W) '$(srcdir)/ECSpecialMuleTags.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-ECSpecialMuleTags.Tpo $(DEPDIR)/amulegui-ECSpecialMuleTags.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ECSpecialMuleTags.cpp' object='amulegui-ECSpecialMuleTags.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-ECSpecialMuleTags.obj `if test -f 'ECSpecialMuleTags.cpp'; then $(CYGPATH_W) 'ECSpecialMuleTags.cpp'; else $(CYGPATH_W) '$(srcdir)/ECSpecialMuleTags.cpp'; fi` amulegui-KnownFile.o: KnownFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-KnownFile.o -MD -MP -MF $(DEPDIR)/amulegui-KnownFile.Tpo -c -o amulegui-KnownFile.o `test -f 'KnownFile.cpp' || echo '$(srcdir)/'`KnownFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-KnownFile.Tpo $(DEPDIR)/amulegui-KnownFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KnownFile.cpp' object='amulegui-KnownFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-KnownFile.o `test -f 'KnownFile.cpp' || echo '$(srcdir)/'`KnownFile.cpp amulegui-KnownFile.obj: KnownFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-KnownFile.obj -MD -MP -MF $(DEPDIR)/amulegui-KnownFile.Tpo -c -o amulegui-KnownFile.obj `if test -f 'KnownFile.cpp'; then $(CYGPATH_W) 'KnownFile.cpp'; else $(CYGPATH_W) '$(srcdir)/KnownFile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-KnownFile.Tpo $(DEPDIR)/amulegui-KnownFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KnownFile.cpp' object='amulegui-KnownFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-KnownFile.obj `if test -f 'KnownFile.cpp'; then $(CYGPATH_W) 'KnownFile.cpp'; else $(CYGPATH_W) '$(srcdir)/KnownFile.cpp'; fi` amulegui-GetTickCount.o: GetTickCount.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-GetTickCount.o -MD -MP -MF $(DEPDIR)/amulegui-GetTickCount.Tpo -c -o amulegui-GetTickCount.o `test -f 'GetTickCount.cpp' || echo '$(srcdir)/'`GetTickCount.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-GetTickCount.Tpo $(DEPDIR)/amulegui-GetTickCount.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GetTickCount.cpp' object='amulegui-GetTickCount.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-GetTickCount.o `test -f 'GetTickCount.cpp' || echo '$(srcdir)/'`GetTickCount.cpp amulegui-GetTickCount.obj: GetTickCount.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-GetTickCount.obj -MD -MP -MF $(DEPDIR)/amulegui-GetTickCount.Tpo -c -o amulegui-GetTickCount.obj `if test -f 'GetTickCount.cpp'; then $(CYGPATH_W) 'GetTickCount.cpp'; else $(CYGPATH_W) '$(srcdir)/GetTickCount.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-GetTickCount.Tpo $(DEPDIR)/amulegui-GetTickCount.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GetTickCount.cpp' object='amulegui-GetTickCount.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-GetTickCount.obj `if test -f 'GetTickCount.cpp'; then $(CYGPATH_W) 'GetTickCount.cpp'; else $(CYGPATH_W) '$(srcdir)/GetTickCount.cpp'; fi` amulegui-GuiEvents.o: GuiEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-GuiEvents.o -MD -MP -MF $(DEPDIR)/amulegui-GuiEvents.Tpo -c -o amulegui-GuiEvents.o `test -f 'GuiEvents.cpp' || echo '$(srcdir)/'`GuiEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-GuiEvents.Tpo $(DEPDIR)/amulegui-GuiEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GuiEvents.cpp' object='amulegui-GuiEvents.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-GuiEvents.o `test -f 'GuiEvents.cpp' || echo '$(srcdir)/'`GuiEvents.cpp amulegui-GuiEvents.obj: GuiEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-GuiEvents.obj -MD -MP -MF $(DEPDIR)/amulegui-GuiEvents.Tpo -c -o amulegui-GuiEvents.obj `if test -f 'GuiEvents.cpp'; then $(CYGPATH_W) 'GuiEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/GuiEvents.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-GuiEvents.Tpo $(DEPDIR)/amulegui-GuiEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GuiEvents.cpp' object='amulegui-GuiEvents.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-GuiEvents.obj `if test -f 'GuiEvents.cpp'; then $(CYGPATH_W) 'GuiEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/GuiEvents.cpp'; fi` amulegui-HTTPDownload.o: HTTPDownload.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-HTTPDownload.o -MD -MP -MF $(DEPDIR)/amulegui-HTTPDownload.Tpo -c -o amulegui-HTTPDownload.o `test -f 'HTTPDownload.cpp' || echo '$(srcdir)/'`HTTPDownload.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-HTTPDownload.Tpo $(DEPDIR)/amulegui-HTTPDownload.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='HTTPDownload.cpp' object='amulegui-HTTPDownload.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-HTTPDownload.o `test -f 'HTTPDownload.cpp' || echo '$(srcdir)/'`HTTPDownload.cpp amulegui-HTTPDownload.obj: HTTPDownload.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-HTTPDownload.obj -MD -MP -MF $(DEPDIR)/amulegui-HTTPDownload.Tpo -c -o amulegui-HTTPDownload.obj `if test -f 'HTTPDownload.cpp'; then $(CYGPATH_W) 'HTTPDownload.cpp'; else $(CYGPATH_W) '$(srcdir)/HTTPDownload.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-HTTPDownload.Tpo $(DEPDIR)/amulegui-HTTPDownload.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='HTTPDownload.cpp' object='amulegui-HTTPDownload.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-HTTPDownload.obj `if test -f 'HTTPDownload.cpp'; then $(CYGPATH_W) 'HTTPDownload.cpp'; else $(CYGPATH_W) '$(srcdir)/HTTPDownload.cpp'; fi` amulegui-Logger.o: Logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-Logger.o -MD -MP -MF $(DEPDIR)/amulegui-Logger.Tpo -c -o amulegui-Logger.o `test -f 'Logger.cpp' || echo '$(srcdir)/'`Logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-Logger.Tpo $(DEPDIR)/amulegui-Logger.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Logger.cpp' object='amulegui-Logger.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-Logger.o `test -f 'Logger.cpp' || echo '$(srcdir)/'`Logger.cpp amulegui-Logger.obj: Logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-Logger.obj -MD -MP -MF $(DEPDIR)/amulegui-Logger.Tpo -c -o amulegui-Logger.obj `if test -f 'Logger.cpp'; then $(CYGPATH_W) 'Logger.cpp'; else $(CYGPATH_W) '$(srcdir)/Logger.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-Logger.Tpo $(DEPDIR)/amulegui-Logger.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Logger.cpp' object='amulegui-Logger.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-Logger.obj `if test -f 'Logger.cpp'; then $(CYGPATH_W) 'Logger.cpp'; else $(CYGPATH_W) '$(srcdir)/Logger.cpp'; fi` amulegui-PartFile.o: PartFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-PartFile.o -MD -MP -MF $(DEPDIR)/amulegui-PartFile.Tpo -c -o amulegui-PartFile.o `test -f 'PartFile.cpp' || echo '$(srcdir)/'`PartFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-PartFile.Tpo $(DEPDIR)/amulegui-PartFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartFile.cpp' object='amulegui-PartFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-PartFile.o `test -f 'PartFile.cpp' || echo '$(srcdir)/'`PartFile.cpp amulegui-PartFile.obj: PartFile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-PartFile.obj -MD -MP -MF $(DEPDIR)/amulegui-PartFile.Tpo -c -o amulegui-PartFile.obj `if test -f 'PartFile.cpp'; then $(CYGPATH_W) 'PartFile.cpp'; else $(CYGPATH_W) '$(srcdir)/PartFile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-PartFile.Tpo $(DEPDIR)/amulegui-PartFile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartFile.cpp' object='amulegui-PartFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-PartFile.obj `if test -f 'PartFile.cpp'; then $(CYGPATH_W) 'PartFile.cpp'; else $(CYGPATH_W) '$(srcdir)/PartFile.cpp'; fi` amulegui-Preferences.o: Preferences.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-Preferences.o -MD -MP -MF $(DEPDIR)/amulegui-Preferences.Tpo -c -o amulegui-Preferences.o `test -f 'Preferences.cpp' || echo '$(srcdir)/'`Preferences.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-Preferences.Tpo $(DEPDIR)/amulegui-Preferences.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Preferences.cpp' object='amulegui-Preferences.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-Preferences.o `test -f 'Preferences.cpp' || echo '$(srcdir)/'`Preferences.cpp amulegui-Preferences.obj: Preferences.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-Preferences.obj -MD -MP -MF $(DEPDIR)/amulegui-Preferences.Tpo -c -o amulegui-Preferences.obj `if test -f 'Preferences.cpp'; then $(CYGPATH_W) 'Preferences.cpp'; else $(CYGPATH_W) '$(srcdir)/Preferences.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-Preferences.Tpo $(DEPDIR)/amulegui-Preferences.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Preferences.cpp' object='amulegui-Preferences.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-Preferences.obj `if test -f 'Preferences.cpp'; then $(CYGPATH_W) 'Preferences.cpp'; else $(CYGPATH_W) '$(srcdir)/Preferences.cpp'; fi` amulegui-Proxy.o: Proxy.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-Proxy.o -MD -MP -MF $(DEPDIR)/amulegui-Proxy.Tpo -c -o amulegui-Proxy.o `test -f 'Proxy.cpp' || echo '$(srcdir)/'`Proxy.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-Proxy.Tpo $(DEPDIR)/amulegui-Proxy.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Proxy.cpp' object='amulegui-Proxy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-Proxy.o `test -f 'Proxy.cpp' || echo '$(srcdir)/'`Proxy.cpp amulegui-Proxy.obj: Proxy.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-Proxy.obj -MD -MP -MF $(DEPDIR)/amulegui-Proxy.Tpo -c -o amulegui-Proxy.obj `if test -f 'Proxy.cpp'; then $(CYGPATH_W) 'Proxy.cpp'; else $(CYGPATH_W) '$(srcdir)/Proxy.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-Proxy.Tpo $(DEPDIR)/amulegui-Proxy.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Proxy.cpp' object='amulegui-Proxy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-Proxy.obj `if test -f 'Proxy.cpp'; then $(CYGPATH_W) 'Proxy.cpp'; else $(CYGPATH_W) '$(srcdir)/Proxy.cpp'; fi` amulegui-Server.o: Server.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-Server.o -MD -MP -MF $(DEPDIR)/amulegui-Server.Tpo -c -o amulegui-Server.o `test -f 'Server.cpp' || echo '$(srcdir)/'`Server.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-Server.Tpo $(DEPDIR)/amulegui-Server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Server.cpp' object='amulegui-Server.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-Server.o `test -f 'Server.cpp' || echo '$(srcdir)/'`Server.cpp amulegui-Server.obj: Server.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-Server.obj -MD -MP -MF $(DEPDIR)/amulegui-Server.Tpo -c -o amulegui-Server.obj `if test -f 'Server.cpp'; then $(CYGPATH_W) 'Server.cpp'; else $(CYGPATH_W) '$(srcdir)/Server.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-Server.Tpo $(DEPDIR)/amulegui-Server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Server.cpp' object='amulegui-Server.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-Server.obj `if test -f 'Server.cpp'; then $(CYGPATH_W) 'Server.cpp'; else $(CYGPATH_W) '$(srcdir)/Server.cpp'; fi` amulegui-Statistics.o: Statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-Statistics.o -MD -MP -MF $(DEPDIR)/amulegui-Statistics.Tpo -c -o amulegui-Statistics.o `test -f 'Statistics.cpp' || echo '$(srcdir)/'`Statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-Statistics.Tpo $(DEPDIR)/amulegui-Statistics.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Statistics.cpp' object='amulegui-Statistics.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-Statistics.o `test -f 'Statistics.cpp' || echo '$(srcdir)/'`Statistics.cpp amulegui-Statistics.obj: Statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-Statistics.obj -MD -MP -MF $(DEPDIR)/amulegui-Statistics.Tpo -c -o amulegui-Statistics.obj `if test -f 'Statistics.cpp'; then $(CYGPATH_W) 'Statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/Statistics.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-Statistics.Tpo $(DEPDIR)/amulegui-Statistics.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Statistics.cpp' object='amulegui-Statistics.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-Statistics.obj `if test -f 'Statistics.cpp'; then $(CYGPATH_W) 'Statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/Statistics.cpp'; fi` amulegui-StatTree.o: StatTree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-StatTree.o -MD -MP -MF $(DEPDIR)/amulegui-StatTree.Tpo -c -o amulegui-StatTree.o `test -f 'StatTree.cpp' || echo '$(srcdir)/'`StatTree.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-StatTree.Tpo $(DEPDIR)/amulegui-StatTree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StatTree.cpp' object='amulegui-StatTree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-StatTree.o `test -f 'StatTree.cpp' || echo '$(srcdir)/'`StatTree.cpp amulegui-StatTree.obj: StatTree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-StatTree.obj -MD -MP -MF $(DEPDIR)/amulegui-StatTree.Tpo -c -o amulegui-StatTree.obj `if test -f 'StatTree.cpp'; then $(CYGPATH_W) 'StatTree.cpp'; else $(CYGPATH_W) '$(srcdir)/StatTree.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-StatTree.Tpo $(DEPDIR)/amulegui-StatTree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StatTree.cpp' object='amulegui-StatTree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-StatTree.obj `if test -f 'StatTree.cpp'; then $(CYGPATH_W) 'StatTree.cpp'; else $(CYGPATH_W) '$(srcdir)/StatTree.cpp'; fi` amulegui-UserEvents.o: UserEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-UserEvents.o -MD -MP -MF $(DEPDIR)/amulegui-UserEvents.Tpo -c -o amulegui-UserEvents.o `test -f 'UserEvents.cpp' || echo '$(srcdir)/'`UserEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-UserEvents.Tpo $(DEPDIR)/amulegui-UserEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UserEvents.cpp' object='amulegui-UserEvents.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-UserEvents.o `test -f 'UserEvents.cpp' || echo '$(srcdir)/'`UserEvents.cpp amulegui-UserEvents.obj: UserEvents.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-UserEvents.obj -MD -MP -MF $(DEPDIR)/amulegui-UserEvents.Tpo -c -o amulegui-UserEvents.obj `if test -f 'UserEvents.cpp'; then $(CYGPATH_W) 'UserEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/UserEvents.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-UserEvents.Tpo $(DEPDIR)/amulegui-UserEvents.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UserEvents.cpp' object='amulegui-UserEvents.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-UserEvents.obj `if test -f 'UserEvents.cpp'; then $(CYGPATH_W) 'UserEvents.cpp'; else $(CYGPATH_W) '$(srcdir)/UserEvents.cpp'; fi` amulegui-KADUSettings.o: KADUSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-KADUSettings.o -MD -MP -MF $(DEPDIR)/amulegui-KADUSettings.Tpo -c -o amulegui-KADUSettings.o `test -f 'KADUSettings.cpp' || echo '$(srcdir)/'`KADUSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-KADUSettings.Tpo $(DEPDIR)/amulegui-KADUSettings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KADUSettings.cpp' object='amulegui-KADUSettings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-KADUSettings.o `test -f 'KADUSettings.cpp' || echo '$(srcdir)/'`KADUSettings.cpp amulegui-KADUSettings.obj: KADUSettings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -MT amulegui-KADUSettings.obj -MD -MP -MF $(DEPDIR)/amulegui-KADUSettings.Tpo -c -o amulegui-KADUSettings.obj `if test -f 'KADUSettings.cpp'; then $(CYGPATH_W) 'KADUSettings.cpp'; else $(CYGPATH_W) '$(srcdir)/KADUSettings.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amulegui-KADUSettings.Tpo $(DEPDIR)/amulegui-KADUSettings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='KADUSettings.cpp' object='amulegui-KADUSettings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amulegui_CPPFLAGS) $(CPPFLAGS) $(amulegui_CXXFLAGS) $(CXXFLAGS) -c -o amulegui-KADUSettings.obj `if test -f 'KADUSettings.cpp'; then $(CYGPATH_W) 'KADUSettings.cpp'; else $(CYGPATH_W) '$(srcdir)/KADUSettings.cpp'; fi` ed2k-ED2KLinkParser.o: ED2KLinkParser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ed2k-ED2KLinkParser.o -MD -MP -MF $(DEPDIR)/ed2k-ED2KLinkParser.Tpo -c -o ed2k-ED2KLinkParser.o `test -f 'ED2KLinkParser.cpp' || echo '$(srcdir)/'`ED2KLinkParser.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ed2k-ED2KLinkParser.Tpo $(DEPDIR)/ed2k-ED2KLinkParser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ED2KLinkParser.cpp' object='ed2k-ED2KLinkParser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ed2k-ED2KLinkParser.o `test -f 'ED2KLinkParser.cpp' || echo '$(srcdir)/'`ED2KLinkParser.cpp ed2k-ED2KLinkParser.obj: ED2KLinkParser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ed2k-ED2KLinkParser.obj -MD -MP -MF $(DEPDIR)/ed2k-ED2KLinkParser.Tpo -c -o ed2k-ED2KLinkParser.obj `if test -f 'ED2KLinkParser.cpp'; then $(CYGPATH_W) 'ED2KLinkParser.cpp'; else $(CYGPATH_W) '$(srcdir)/ED2KLinkParser.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ed2k-ED2KLinkParser.Tpo $(DEPDIR)/ed2k-ED2KLinkParser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ED2KLinkParser.cpp' object='ed2k-ED2KLinkParser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ed2k-ED2KLinkParser.obj `if test -f 'ED2KLinkParser.cpp'; then $(CYGPATH_W) 'ED2KLinkParser.cpp'; else $(CYGPATH_W) '$(srcdir)/ED2KLinkParser.cpp'; fi` ed2k-MagnetURI.o: MagnetURI.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ed2k-MagnetURI.o -MD -MP -MF $(DEPDIR)/ed2k-MagnetURI.Tpo -c -o ed2k-MagnetURI.o `test -f 'MagnetURI.cpp' || echo '$(srcdir)/'`MagnetURI.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ed2k-MagnetURI.Tpo $(DEPDIR)/ed2k-MagnetURI.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MagnetURI.cpp' object='ed2k-MagnetURI.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ed2k-MagnetURI.o `test -f 'MagnetURI.cpp' || echo '$(srcdir)/'`MagnetURI.cpp ed2k-MagnetURI.obj: MagnetURI.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ed2k-MagnetURI.obj -MD -MP -MF $(DEPDIR)/ed2k-MagnetURI.Tpo -c -o ed2k-MagnetURI.obj `if test -f 'MagnetURI.cpp'; then $(CYGPATH_W) 'MagnetURI.cpp'; else $(CYGPATH_W) '$(srcdir)/MagnetURI.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ed2k-MagnetURI.Tpo $(DEPDIR)/ed2k-MagnetURI.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MagnetURI.cpp' object='ed2k-MagnetURI.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ed2k-MagnetURI.obj `if test -f 'MagnetURI.cpp'; then $(CYGPATH_W) 'MagnetURI.cpp'; else $(CYGPATH_W) '$(srcdir)/MagnetURI.cpp'; fi` ed2k-MuleCollection.o: MuleCollection.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ed2k-MuleCollection.o -MD -MP -MF $(DEPDIR)/ed2k-MuleCollection.Tpo -c -o ed2k-MuleCollection.o `test -f 'MuleCollection.cpp' || echo '$(srcdir)/'`MuleCollection.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ed2k-MuleCollection.Tpo $(DEPDIR)/ed2k-MuleCollection.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleCollection.cpp' object='ed2k-MuleCollection.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ed2k-MuleCollection.o `test -f 'MuleCollection.cpp' || echo '$(srcdir)/'`MuleCollection.cpp ed2k-MuleCollection.obj: MuleCollection.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ed2k-MuleCollection.obj -MD -MP -MF $(DEPDIR)/ed2k-MuleCollection.Tpo -c -o ed2k-MuleCollection.obj `if test -f 'MuleCollection.cpp'; then $(CYGPATH_W) 'MuleCollection.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleCollection.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ed2k-MuleCollection.Tpo $(DEPDIR)/ed2k-MuleCollection.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MuleCollection.cpp' object='ed2k-MuleCollection.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ed2k_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ed2k-MuleCollection.obj `if test -f 'MuleCollection.cpp'; then $(CYGPATH_W) 'MuleCollection.cpp'; else $(CYGPATH_W) '$(srcdir)/MuleCollection.cpp'; fi` # 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. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; 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" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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 CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-recursive all-am: Makefile $(LIBRARIES) $(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: -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) 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 "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-noinstLIBRARIES ctags ctags-recursive \ dist-hook distclean distclean-compile distclean-generic \ 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 pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-binPROGRAMS $(srcdir)/Parser.cpp: Parser.y bison --debug -t -d -v -o $@ $(srcdir)/Parser.y @GENERATE_FLEX_HEADER_TRUE@$(srcdir)/Scanner.cpp: Scanner.l Parser.cpp @GENERATE_FLEX_HEADER_TRUE@ $(LEX) --header-file=$(srcdir)/Scanner.h -o $@ $(srcdir)/Scanner.l @GENERATE_FLEX_HEADER_FALSE@$(srcdir)/Scanner.cpp: Scanner.l Parser.cpp @GENERATE_FLEX_HEADER_FALSE@ $(LEX) -o $@ $(srcdir)/Scanner.l; \ @GENERATE_FLEX_HEADER_FALSE@ echo "// Empty file generated by a flex version unable to create headers" > $(srcdir)/Scanner.h $(srcdir)/IPFilterScanner.cpp: IPFilterScanner.l $(LEX) -Pyyip -o $@ $(srcdir)/IPFilterScanner.l; @NEED_RC_TRUE@.rc.$(OBJEXT): @NEED_RC_TRUE@ $(RC) $(MULERCFLAGS) -I$(top_srcdir) $(RCFLAGS) -O COFF -i "$<" -o "$@" @NEED_RC_TRUE@amulerc.$(OBJEXT): $(srcdir)/../amule.rc amule-version.rc @NEED_RC_TRUE@ cat $^ | \ @NEED_RC_TRUE@ ( \ @NEED_RC_TRUE@ abs_builddir=`pwd` ; \ @NEED_RC_TRUE@ abs_top_srcdir=`cd $(top_srcdir) ; pwd` ; \ @NEED_RC_TRUE@ cd $( "$@" @NEED_RC_TRUE@amuled-version.rc: $(top_builddir)/version.rc @NEED_RC_TRUE@ @sed -e 's/VER_FILEDESCRIPTION_STR/"aMule Daemon"/' \ @NEED_RC_TRUE@ -e 's/VER_INTERNALNAME_STR/"amuled"/' \ @NEED_RC_TRUE@ -e 's/VER_ORIGINALFILENAME_STR/"amuled$(EXEEXT)"/' "$<" > "$@" @NEED_RC_TRUE@amulecmd-version.rc: $(top_builddir)/version.rc @NEED_RC_TRUE@ @sed -e 's/VER_FILEDESCRIPTION_STR/"aMule Text Client"/' \ @NEED_RC_TRUE@ -e 's/VER_INTERNALNAME_STR/"amulecmd"/' \ @NEED_RC_TRUE@ -e 's/VER_ORIGINALFILENAME_STR/"amulecmd$(EXEEXT)"/' "$<" > "$@" @NEED_RC_TRUE@amulegui-version.rc: $(top_builddir)/version.rc @NEED_RC_TRUE@ @sed -e 's/VER_FILEDESCRIPTION_STR/"aMule Remote GUI (Experimental)"/' \ @NEED_RC_TRUE@ -e 's/VER_INTERNALNAME_STR/"amulegui"/' \ @NEED_RC_TRUE@ -e 's/VER_ORIGINALFILENAME_STR/"amulegui$(EXEEXT)"/' "$<" > "$@" @NEED_RC_TRUE@ed2k-version.rc: $(top_builddir)/version.rc @NEED_RC_TRUE@ @sed -e 's/VER_FILEDESCRIPTION_STR/"ED2K Links Handler"/' \ @NEED_RC_TRUE@ -e 's/VER_INTERNALNAME_STR/"ed2k"/' \ @NEED_RC_TRUE@ -e 's/VER_ORIGINALFILENAME_STR/"ed2k$(EXEEXT)"/' "$<" > "$@" dist-hook: test -z "$(EXTRA__DIST__SUBDIRS)" || \ for d in $(EXTRA__DIST__SUBDIRS) ; do \ mkdir $(distdir)/$$d ; \ for f in `find $(srcdir)/$$d -name '.svn' -prune -o -printf "%P\n"` ; do \ if test -d $(srcdir)/$$d/$$f ; then \ mkdir $(distdir)/$$d/$$f ; \ else \ cp -p $(srcdir)/$$d/$$f $(distdir)/$$d/$$f ; \ fi ; \ done ; \ 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: amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/UploadQueue.cpp0000644000175000017500000010371112050266603021257 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "UploadQueue.h" // Interface declarations #include #include #include #include #include #include "Types.h" // Do_not_auto_remove (win32) #ifdef __WXMSW__ #include // Do_not_auto_remove #else #include // Do_not_auto_remove #include // Do_not_auto_remove #include // Do_not_auto_remove #endif #include "ServerConnect.h" // Needed for CServerConnect #include "KnownFile.h" // Needed for CKnownFile #include "Packet.h" // Needed for CPacket #include "ClientTCPSocket.h" // Needed for CClientTCPSocket #include "SharedFileList.h" // Needed for CSharedFileList #include "updownclient.h" // Needed for CUpDownClient #include "amule.h" // Needed for theApp #include "Preferences.h" #include "ClientList.h" #include "Statistics.h" // Needed for theStats #include "Logger.h" #include #include "UploadBandwidthThrottler.h" #include "GuiEvents.h" // Needed for Notify_* #include "ListenSocket.h" #include "DownloadQueue.h" #include "PartFile.h" // ADUNANZA BEGIN #ifndef KADCONSTANTS_H #include #endif //KADCONSTANTS_H // ADUNANZA END //TODO rewrite the whole networkcode, use overlapped sockets CUploadQueue::CUploadQueue() { m_nLastStartUpload = 0; m_lastSort = 0; lastupslotHighID = true; m_allowKicking = true; // ADUNANZA BEGIN // mod Adu // Emanem // Inizializzo il numero di clients Adu nella waiting queue m_AduClientsNum = 0; // fine mod Adu // ADUNANZA END m_allUploadingKnownFile = new CKnownFile; } // ADUNANZA BEGIN // Mr Hyde test class CAduClientTypeChooser { protected: uint32 m_current; private: inline void doswitch() { m_current = ((m_current == ADUNANZA_FASTWEB) ? ADUNANZA_EXTERN : ADUNANZA_FASTWEB); } protected: CAduClientTypeChooser() : m_current(ADUNANZA_EXTERN) {}; ~CAduClientTypeChooser() {}; inline uint32 get() const {return m_current;} inline uint32 getNext() const { return ((m_current == ADUNANZA_FASTWEB) ? ADUNANZA_EXTERN : ADUNANZA_FASTWEB); } void advance(uint32 desired) { switch (desired) { case ADUNANZA_NONE: return; case ADUNANZA_ANY: return; default: doswitch(); return; } } void setCurrent(const CUpDownClient* pCurrent) { if (!pCurrent) return; m_current = (pCurrent->IsAdunanzA() ? ADUNANZA_FASTWEB : ADUNANZA_EXTERN); } }; // ADUNANZA END void CUploadQueue::SortGetBestClient(CClientRef * bestClient) { uint32 tick = GetTickCount(); m_lastSort = tick; CClientRefList::iterator it = m_waitinglist.begin(); // ADUNANZA BEGIN // mod Adu // Emanem // Risistemo il valore temporaneo del numero di clients // AdunanzA uint32 _tmp_m_AduClientsNum = 0; // fine mod Adu // ADUNANZA END for (; it != m_waitinglist.end(); ) { CClientRefList::iterator it2 = it++; CUpDownClient* cur_client = it2->GetClient(); // ADUNANZA BEGIN if (!cur_client) continue; // non capisco perche' ma a volte l'ho beccato NULL!!! // ADUNANZA END // clear dead clients if (tick - cur_client->GetLastUpRequest() > MAX_PURGEQUEUETIME || !theApp->sharedfiles->GetFileByID(cur_client->GetUploadFileID())) { cur_client->ClearWaitStartTime(); RemoveFromWaitingQueue(it2); if (!cur_client->GetSocket()) { // ADUNANZA BEGIN if (cur_client->Disconnected(wxT("SortGetBestClient - purged"))) { // ADUNANZA END cur_client->Safe_Delete(); cur_client = NULL; } } continue; } if (cur_client->IsBanned() || IsSuspended(cur_client->GetUploadFileID())) { // Banned client or suspended upload ? cur_client->ClearScore(); continue; } // finished clearing // ADUNANZA BEGIN // Codice AdunanzA // Emanem 18:15 4/4/2004 // // In questo caso, in base al tipo di typeClient // in input si sceglie su che clients fare la "classifica" /// di priorita' bool bIsCurrentAdunanzA(cur_client->IsAdunanzA()); // nel caso incremento il contatore temporaneo if (bIsCurrentAdunanzA) {// ADUFLAGS _tmp_m_AduClientsNum++; } // ADUNANZA END // Calculate score of current client uint32 cur_score = cur_client->CalculateScore(); // Check if it's better than that of a previous one, and move it up then. CClientRefList::iterator it1 = it2; while (it1 != m_waitinglist.begin()) { // ADUNANZA BEGIN #if 0 it1--; #else --it1; #endif // ADUNANZA END if (cur_score > it1->GetClient()->GetScore()) { // swap them std::swap(*it2, *it1); // ADUNANZA BEGIN #if 0 it2--; #else --it2; #endif // ADUNANZA END } else { // no need to check further since list is already sorted break; } } } // ADUNANZA BEGIN // mod Adu // Emanem // risistemo il numero di clients AdunanzA m_AduClientsNum = _tmp_m_AduClientsNum; // ADUNANZA END // Second Pass: // - calculate queue rank // - find best high id client // - mark all better low id clients as enabled for upload uint16 rank = 1; bool bestClientFound = false; for (it = m_waitinglist.begin(); it != m_waitinglist.end(); ) { CClientRefList::iterator it2 = it++; CUpDownClient* cur_client = it2->GetClient(); // ADUNANZA BEGIN if (!cur_client) continue; // ADUNANZA END cur_client->SetUploadQueueWaitingPosition(rank++); if (bestClientFound) { // There's a better high id client cur_client->m_bAddNextConnect = false; } else { if (cur_client->HasLowID() && !cur_client->IsConnected()) { // No better high id client, so start upload to this one once it connects cur_client->m_bAddNextConnect = true; } else { // We found a high id client (or a currently connected low id client) bestClientFound = true; cur_client->m_bAddNextConnect = false; if (bestClient) { bestClient->Link(cur_client CLIENT_DEBUGSTRING("CUploadQueue::SortGetBestClient")); RemoveFromWaitingQueue(it2); rank--; lastupslotHighID = true; // VQB LowID alternate } } } } #ifdef __DEBUG__ AddDebugLogLineN(logLocalClient, CFormat(wxT("Current UL queue (%d):")) % (rank - 1)); // ADUNANZA BEGIN #if 0 for (it = m_waitinglist.begin(); it != m_waitinglist.end(); it++) { #else for (it = m_waitinglist.begin(); it != m_waitinglist.end(); ++it) { #endif // ADUNANZA END CUpDownClient* c = it->GetClient(); AddDebugLogLineN(logLocalClient, CFormat(wxT("%4d %7d %s %5d %s")) % c->GetUploadQueueWaitingPosition() % c->GetScore() % (c->HasLowID() ? (c->IsConnected() ? wxT("LoCon") : wxT("LowId")) : wxT("High ")) % c->ECID() % c->GetUserName() ); } #endif // __DEBUG__ } void CUploadQueue::AddUpNextClient(CUpDownClient* directadd) { // ADUNANZA BEGIN // Mod Adu // lupz // capisco cosa voglio uint32 typeClient = CAdunanzAUtilities::AduNextClient(); // uint32 typeClient = theApp->pUploadSlotsMng->next(); bool bDontAdd(false); //AddDebugLogLineM(false, logClient, CFormat(wxT("voglio: %u")) % typeClient); if (typeClient == ADUNANZA_NONE) { //return; bDontAdd = true; } // ADUNANZA END CUpDownClient* newclient = NULL; CClientRef newClientRef; // select next client or use given client if (!directadd) { SortGetBestClient(&newClientRef); newclient = newClientRef.GetClient(); #if EXTENDED_UPLOADQUEUE if (!newclient) { // Nothing to upload. Try to find something from the sources. if (PopulatePossiblyWaitingList() > 0) { newClientRef = * m_possiblyWaitingList.begin(); m_possiblyWaitingList.pop_front(); newclient = newClientRef.GetClient(); AddDebugLogLineN( logLocalClient, wxT("Added client from possiblyWaitingList ") + newclient->GetFullIP() ); } } #endif // ADUNANZA BEGIN // Provo a risistemare la scelta del client (ma e' un casino, aMule ha cambiato parecchio le cose...) // ADUNANZA BEGIN // occhio che con questo nuovo codice "newclient" PUO' essere NULL! if (!newclient) return; // Codice AdunanzA // Emanem 18:15 4/4/2004 // // In questo caso, in base al tipo di typeClient // in input si sceglie su che clients fare la "classifica" /// di priorita' bool bIsCurrentAdunanzA(newclient->IsAdunanzA()); // nel caso incremento il contatore temporaneo // Se il tipo di client non e' disponibile // allora prendo il primo che mi capita size_t theWaitSize = m_waitinglist.size(); if (typeClient == ADUNANZA_FASTWEB) { // Voglio un client ADU/FASTWEB if (m_AduClientsNum == 0) { // Non mi risulta che ci siano client adu/fastweb // ne prendo uno qualsiasi typeClient = ADUNANZA_ANY; } } else if (typeClient == ADUNANZA_EXTERN) { // Voglio un client *NON* ADU/FASTWEB if (m_AduClientsNum >= theWaitSize) { // Non mi risulta che ci siano client *NON* adu/fastweb // ne prendo uno qualsiasi typeClient = ADUNANZA_ANY; } } bool bHandleThisClient(false); switch(typeClient) { case ADUNANZA_EXTERN: bHandleThisClient = !bIsCurrentAdunanzA; // ADUFLAGS break; case ADUNANZA_FASTWEB: bHandleThisClient = bIsCurrentAdunanzA; // ADUFLAGS break; case ADUNANZA_ANY: // Va bene un client qualsiasi bHandleThisClient = true; break; default: bHandleThisClient = false; // in questo caso non devo fare niente! (e' NONE) break; } // test if (bDontAdd) bHandleThisClient = false; if (!bHandleThisClient) newclient = NULL; // ADUNANZA END if (!newclient) { return; } } else { // Check if requested file is suspended or not shared (maybe deleted recently) if (IsSuspended(directadd->GetUploadFileID()) || !theApp->sharedfiles->GetFileByID(directadd->GetUploadFileID())) { return; } else { newclient = directadd; } } if (IsDownloading(newclient)) { return; } // ADUNANZA BEGIN // ripeto check, non si sa mai if (!newclient) return; // ADUNANZA END // tell the client that we are now ready to upload if (!newclient->IsConnected()) { newclient->SetUploadState(US_CONNECTING); if (!newclient->TryToConnect(true)) { return; } } else { CPacket* packet = new CPacket(OP_ACCEPTUPLOADREQ, 0, OP_EDONKEYPROT); theStats::AddUpOverheadFileRequest(packet->GetPacketSize()); AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_ACCEPTUPLOADREQ to ") + newclient->GetFullIP() ); newclient->SendPacket(packet,true); newclient->SetUploadState(US_UPLOADING); } newclient->SetUpStartTime(); newclient->ResetSessionUp(); theApp->uploadBandwidthThrottler->AddToStandardList(m_uploadinglist.size(), newclient->GetSocket()); m_uploadinglist.push_back(CCLIENTREF(newclient, wxT("CUploadQueue::AddUpNextClient"))); m_allUploadingKnownFile->AddUploadingClient(newclient); // ADUNANZA BEGIN // Mod Adu // lupz if (newclient->IsAdunanzA()) { m_aduuploadinglist.push_back(CCLIENTREF(newclient, wxT("CUploadQueue::AddUpBextClient"))); } // *** INSERIRE QUI CODICE PER RIPARTITORE BANDA time_t nowTime = time(NULL); if (thePrefs::ADU_GetUpExtFull() && !newclient->IsAdunanzA() && (thePrefs::ADU_GetExtFullWaitTime() < nowTime)) { time_t tempotest = nowTime - thePrefs::ADU_GetExtFullWaitTime() + thePrefs::ADU_GetMaxExtWaitTime(); // uint64 ExtSentPartial = (theStats::GetSessionSentBytes() - thePrefs::ADU_GetExtAdapterSentBytes()) / 1024; uint64 ExtSentPartial = ((theStats::GetSessionSentBytes() - thePrefs::ADU_GetExtAdapterSentBytes()) >> 10); uint64 partial = (ExtSentPartial / tempotest); if (partial > 10) { partial -= 10; } partial = std::max(partial, ADUNANZA_MIN_BW_TROLLER); if (thePrefs::ADU_GetRipBanda()) { if (partial < thePrefs::ADU_GetValueRipBandaBAK()) { AddDebugLogLineN(logClient, CFormat(wxT("(DBG Mr Hyde) ValueRipBanda set to %u ")) % partial); thePrefs::ADU_SetOnlyValueRipBanda(partial); // NOTA DI Mr Hyde: _SOLO_ ValueRipBanda, il ValueRipBandaBAK deve rimanere immutato CAdunanzAUtilities::CalcolaRatio(false); } } thePrefs::ADU_SetCheckExtFull(true); } if ((GetUploadCount() == CAdunanzAUtilities::TotSlots()) && (GetAduUploadCount() == 0) && (!newclient->IsAdunanzA())) { thePrefs::ADU_SetUpExtFull(true); if (thePrefs::ADU_GetCheckExtFull()) { thePrefs::ADU_SetExtFullWaitTime(thePrefs::ADU_GetMaxExtWaitTime() + nowTime); thePrefs::ADU_SetCheckExtFull(false); thePrefs::ADU_SetExtAdapterSentBytes(theStats::GetSessionSentBytes()); } } else { thePrefs::ADU_SetUpExtFull(false); thePrefs::ADU_SetCheckExtFull(true); } // Fine mod Adu // ADUNANZA END theStats::AddUploadingClient(); // Statistic CKnownFile* reqfile = (CKnownFile*) newclient->GetUploadFile(); if (reqfile) { reqfile->statistic.AddAccepted(); } Notify_SharedCtrlRefreshClient(newclient->ECID(), AVAILABLE_SOURCE); } void CUploadQueue::Process() { // ADUNANZA BEGIN // aggiorno conteggio attuale slot (da ottimizzare per evitare di fare milioni di volte gli stessi calcoli) if (theApp && theApp->pUploadSlotsMng) theApp->pUploadSlotsMng->update(m_uploadinglist); /* bool bExhaustedUploadBandwidth(false); { uint32 maxAllowedUpload_KB_sec = thePrefs::GetMaxUpload(); // effettuo il controllo solo se: // - l'utente h messo un limite alla banda in upload if (maxAllowedUpload_KB_sec != UNLIMITED) { // ho un limite di banda in up // controllo di non averlo già raggiunto uint32 currentUpload_KB_sec = (uint32) (theStats::GetUploadRate() / 1024.0); // non posso usare lo shift perche' usa double if (currentUpload_KB_sec >= maxAllowedUpload_KB_sec) { bExhaustedUploadBandwidth = true; } } } if ( bExhaustedUploadBandwidth) { m_allowKicking = true; } // se la waitinglist e' vuota o e' passato meno di un secondo dall'ultima volta // NON permetto il kicking di client */ // ADUNANZA END // Check if someone's waiting, if there is a slot for him, // or if we should try to free a slot for him uint32 tick = GetTickCount(); // Nobody waiting or upload started recently // (Actually instead of "empty" it should check for "no HighID clients queued", // but the cost for that outweights the benefit. As it is, a slot will be freed // even if it can't be taken because all of the queue is LowID. But just one, // and the kicked client will instantly get it back if he has HighID.) // Also, if we are running out of sockets, don't add new clients, but also don't kick existing ones, // or uploading will cease right away. #if EXTENDED_UPLOADQUEUE if (tick - m_nLastStartUpload < 1000 #else if (m_waitinglist.empty() || tick - m_nLastStartUpload < 1000 #endif || theApp->listensocket->TooManySockets()) { m_allowKicking = false; // Already a slot free, try to fill it } else if (m_uploadinglist.size() < GetMaxSlots()) { m_allowKicking = false; m_nLastStartUpload = tick; AddUpNextClient(); // All slots taken, try to free one } else { m_allowKicking = true; } // The loop that feeds the upload slots with data. CClientRefList::iterator it = m_uploadinglist.begin(); // ADUNANZA BEGIN uint64 aduSentBytes = 0; uint64 fakeSentBytes = 0; // uint64 aduFiberSentBytes = 0; // Mr Hyde: non piu' possibile distinguere fibra da DSL // ADUNANZA END while (it != m_uploadinglist.end()) { // Get the client. Note! Also updates pos as a side effect. CUpDownClient* cur_client = it++->GetClient(); // It seems chatting or friend slots can get stuck at times in upload.. This needs looked into.. if (!cur_client->GetSocket()) { RemoveFromUploadQueue(cur_client); if(cur_client->Disconnected(_T("CUploadQueue::Process"))){ cur_client->Safe_Delete(); } } else { // ADUNANZA BEGIN #if 0 cur_client->SendBlockData(); #else uint64 loc_sentBytes = cur_client->SendBlockData(); if (cur_client->IsAdunanzA()) { // ADUFLAGS aduSentBytes += loc_sentBytes; /* Mr Hyde: non piu' possibile distinguere fibra da DSL if (cur_client->IsFastwebFiber()) { // ADUFLAGS aduFiberSentBytes += loc_sentBytes; } */ } fakeSentBytes += loc_sentBytes; #endif // ADUNANZA END } } // Save used bandwidth for speed calculations uint64 sentBytes = theApp->uploadBandwidthThrottler->GetNumberOfSentBytesSinceLastCallAndReset(); (void)theApp->uploadBandwidthThrottler->GetNumberOfSentBytesOverheadSinceLastCallAndReset(); // Update statistics if (sentBytes) { // ADUNANZA BEGIN #if 0 theStats::AddSentBytes(sentBytes); #else if (fakeSentBytes == 0) { // theStats::AddSentBytes(sentBytes, 0, 0); theStats::AddSentBytes(sentBytes, 0); // Mr Hyde: non piu' possibile distinguere fibra da DSL } else { float ripFactor = ((float) sentBytes) / (float) fakeSentBytes; // if (sentBytes != fakeSentBytes) { // std::clog << "Real " << sentBytes << " fake " << fakeSentBytes << " ripfactor " << ripFactor << std::endl; // } /* Mr Hyde: non piu' possibile distinguere fibra da DSL uint64 riparted_aduSentBytes = (uint64) (ripFactor*(float)aduSentBytes); uint64 riparted_aduFiberSentBytes = (uint64) (ripFactor*(float)aduFiberSentBytes); theStats::AddSentBytes(sentBytes, // Mr Hyde Test fakeSentBytes, riparted_aduSentBytes, riparted_aduFiberSentBytes); */ uint64 riparted_aduSentBytes = (uint64) (ripFactor*(float)aduSentBytes); theStats::AddSentBytes(sentBytes, riparted_aduSentBytes); } #endif // ADUNANZA END } // Periodically resort queue if it doesn't happen anyway if ((sint32) (tick - m_lastSort) > MIN2MS(2)) { SortGetBestClient(); } } uint16 CUploadQueue::GetMaxSlots() const { uint16 nMaxSlots = 0; float kBpsUpPerClient = (float)thePrefs::GetSlotAllocation(); if (thePrefs::GetMaxUpload() == UNLIMITED) { float kBpsUp = theStats::GetUploadRate() / 1024.0f; nMaxSlots = (uint16)(kBpsUp / kBpsUpPerClient) + 2; } else { if (thePrefs::GetMaxUpload() >= 10) { nMaxSlots = (uint16)floor((float)thePrefs::GetMaxUpload() / kBpsUpPerClient + 0.5); // floor(x + 0.5) is a way of doing round(x) that works with gcc < 3 ... if (nMaxSlots < MIN_UP_CLIENTS_ALLOWED) { nMaxSlots=MIN_UP_CLIENTS_ALLOWED; } } else { nMaxSlots = MIN_UP_CLIENTS_ALLOWED; } } if (nMaxSlots > MAX_UP_CLIENTS_ALLOWED) { nMaxSlots = MAX_UP_CLIENTS_ALLOWED; } return nMaxSlots; } // ADUNANZA BEGIN /* bool CUploadQueue::AcceptNewClient(bool bIsAduClient) { uint32 typeClient = CAdunanzAUtilities::AduNextClient(); // uint32 typeClient = theApp->pUploadSlotsMng->next(); switch (typeClient) { case ADUNANZA_NONE: return false; break; case ADUNANZA_FASTWEB: if (!bIsAduClient) { return false; } break; case ADUNANZA_EXTERN: if (!bIsAduClient) { return false; } break; default: break; } return AcceptNewClient(); } */ // ADUNANZA END CUploadQueue::~CUploadQueue() { wxASSERT(m_waitinglist.empty()); wxASSERT(m_uploadinglist.empty()); delete m_allUploadingKnownFile; } bool CUploadQueue::IsOnUploadQueue(const CUpDownClient* client) const { // ADUNANZA BEGIN // BACK #if 0 for (CClientRefList::const_iterator it = m_waitinglist.begin(); it != m_waitinglist.end(); it++) { #else for (CClientRefList::const_iterator it = m_waitinglist.begin(); it != m_waitinglist.end(); ++it) { #endif // ADUNANZA END if (it->GetClient() == client) { return true; } } return false; } bool CUploadQueue::IsDownloading(const CUpDownClient* client) const { // ADUNANZA BEGIN // BACK #if 0 for (CClientRefList::const_iterator it = m_uploadinglist.begin(); it != m_uploadinglist.end(); it++) { #else for (CClientRefList::const_iterator it = m_uploadinglist.begin(); it != m_uploadinglist.end(); ++it) { #endif // ADUNANZA END if (it->GetClient() == client) { return true; } } return false; } CUpDownClient* CUploadQueue::GetWaitingClientByIP_UDP(uint32 dwIP, uint16 nUDPPort, bool bIgnorePortOnUniqueIP, bool* pbMultipleIPs) { CUpDownClient* pMatchingIPClient = NULL; int cMatches = 0; CClientRefList::iterator it = m_waitinglist.begin(); for (; it != m_waitinglist.end(); ++it) { CUpDownClient* cur_client = it->GetClient(); if ((dwIP == cur_client->GetIP()) && (nUDPPort == cur_client->GetUDPPort())) { return cur_client; } else if ((dwIP == cur_client->GetIP()) && bIgnorePortOnUniqueIP) { pMatchingIPClient = cur_client; cMatches++; } } if (pbMultipleIPs) { *pbMultipleIPs = cMatches > 1; } if (pMatchingIPClient && cMatches == 1) { return pMatchingIPClient; } else { return NULL; } } void CUploadQueue::AddClientToQueue(CUpDownClient* client) { // ADUNANZA BEGIN // Mod Adu // Emanem // Questa mod serve a supportare piu' di 50 clients se // connessi con un low-id #if 0 if (theApp->serverconnect->IsConnected() && theApp->serverconnect->IsLowID() && !theApp->serverconnect->IsLocalServer(client->GetServerIP(),client->GetServerPort()) && client->GetDownloadState() == DS_NONE && !client->IsFriend() && theStats::GetWaitingUserCount() > 50) { #else if (theApp->serverconnect->IsConnected() && (theApp->serverconnect->IsLowID()) && !theApp->serverconnect->IsLocalServer(client->GetServerIP(),client->GetServerPort()) && (client->GetDownloadState() == DS_NONE) && !client->IsFriend() && (theStats::GetWaitingUserCount() > theApp->glob_prefs->GetQueueSize()) ) { #endif // ADUNANZA END // Well, all that issues finish in the same: don't allow to add to the queue return; } if ( client->IsBanned() ) { return; } client->AddAskedCount(); client->SetLastUpRequest(); // Find all clients with the same user-hash CClientList::SourceList found = theApp->clientlist->GetClientsByHash( client->GetUserHash() ); CClientList::SourceList::iterator it = found.begin(); while (it != found.end()) { CUpDownClient* cur_client = it++->GetClient(); if ( IsOnUploadQueue( cur_client ) ) { if ( cur_client == client ) { // This is where LowID clients get their upload slot assigned. // They can't be contacted if they reach top of the queue, so they are just marked for uploading. // When they reconnect next time AddClientToQueue() is called, and they get their slot // through the connection they initiated. // Since at that time no slot is free they get assigned an extra slot, // so then the number of slots exceeds the configured number by one. // To prevent a further increase no more LowID clients get a slot, until // - a HighID client has got one (which happens only after two clients // have been kicked so a slot is free again) // - or there is a free slot, which means there is no HighID client on queue if (client->m_bAddNextConnect) { uint16 maxSlots = GetMaxSlots(); if (lastupslotHighID) { maxSlots++; } if (m_uploadinglist.size() < maxSlots) { client->m_bAddNextConnect = false; RemoveFromWaitingQueue(client); AddUpNextClient(client); lastupslotHighID = false; // LowID alternate return; } } client->SendRankingInfo(); Notify_SharedCtrlRefreshClient(client->ECID(), AVAILABLE_SOURCE); return; } else { // Hash-clash, remove unidentified clients (possibly both) if ( !cur_client->IsIdentified() ) { // Cur_client isn't identifed, remove it theApp->clientlist->AddTrackClient( cur_client ); RemoveFromWaitingQueue( cur_client ); if ( !cur_client->GetSocket() ) { if (cur_client->Disconnected( wxT("AddClientToQueue - same userhash") ) ) { cur_client->Safe_Delete(); } } } if ( !client->IsIdentified() ) { // New client isn't identified, remove it theApp->clientlist->AddTrackClient( client ); if ( !client->GetSocket() ) { if ( client->Disconnected( wxT("AddClientToQueue - same userhash") ) ) { client->Safe_Delete(); } } return; } } } } // Count the number of clients with the same IP-address found = theApp->clientlist->GetClientsByIP( client->GetIP() ); int ipCount = 0; // ADUNANZA BEGIN // Back #if 0 for ( it = found.begin(); it != found.end(); it++ ) { #else for ( it = found.begin(); it != found.end(); ++it ) { #endif // ADUNANZA END if ( ( it->GetClient() == client ) || IsOnUploadQueue( it->GetClient() ) ) { ipCount++; } } // We do not accept more than 3 clients from the same IP if ( ipCount > 3 ) { return; } else if ( theApp->clientlist->GetClientsFromIP(client->GetIP()) >= 3 ) { return; } // statistic values // ADUNANZA BEGIN // Back #if 0 CKnownFile* reqfile = (CKnownFile*) client->GetUploadFile(); #else CKnownFile* reqfile = const_cast(client->GetUploadFile()); #endif // ADUNANZA END if (reqfile) { reqfile->statistic.AddRequest(); } if (client->IsDownloading()) { // he's already downloading and wants probably only another file CPacket* packet = new CPacket(OP_ACCEPTUPLOADREQ, 0, OP_EDONKEYPROT); theStats::AddUpOverheadFileRequest(packet->GetPacketSize()); AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_ACCEPTUPLOADREQ to ") + client->GetFullIP() ); client->SendPacket(packet,true); return; } // TODO find better ways to cap the list if (m_waitinglist.size() >= (thePrefs::GetQueueSize())) { return; } uint32 tick = GetTickCount(); client->ClearWaitStartTime(); // if possible start upload right away if (m_waitinglist.empty() && tick - m_nLastStartUpload >= 1000 && m_uploadinglist.size() < GetMaxSlots() && !theApp->listensocket->TooManySockets()) { AddUpNextClient(client); m_nLastStartUpload = tick; } else { // add to waiting queue m_waitinglist.push_back(CCLIENTREF(client, wxT("CUploadQueue::AddClientToQueue m_waitinglist.push_back"))); // and sort it to update queue ranks SortGetBestClient(); theStats::AddWaitingClient(); client->ClearAskedCount(); // ADUNANZA BEGIN // mod Adu // Emanem // se un client e' Adu incremento il conteggio if (client->IsAdunanzA()) { // ADUFLAGS m_AduClientsNum++; } // fine mod Adu // ADUNANZA END client->SetUploadState(US_ONUPLOADQUEUE); client->SendRankingInfo(); //Notify_QlistAddClient(client); } } bool CUploadQueue::RemoveFromUploadQueue(CUpDownClient* client) { // Keep track of this client theApp->clientlist->AddTrackClient(client); CClientRefList::iterator it = std::find(m_uploadinglist.begin(), m_uploadinglist.end(), CCLIENTREF(client, wxEmptyString)); if (it != m_uploadinglist.end()) { m_uploadinglist.erase(it); // ADUNANZA BEGIN // Mod Adu // lupz CClientRefList::iterator adu_it = std::find(m_aduuploadinglist.begin(), m_aduuploadinglist.end(), CCLIENTREF(client, wxEmptyString)); if (adu_it != m_aduuploadinglist.end()) { m_aduuploadinglist.erase(adu_it); } // Fine mod Adu // ADUNANZA END m_allUploadingKnownFile->RemoveUploadingClient(client); theStats::RemoveUploadingClient(); if( client->GetTransferredUp() ) { theStats::AddSuccessfulUpload(); theStats::AddUploadTime(client->GetUpStartTimeDelay() / 1000); } else { theStats::AddFailedUpload(); } client->SetUploadState(US_NONE); client->ClearUploadBlockRequests(); return true; } return false; } bool CUploadQueue::CheckForTimeOver(CUpDownClient* client) { // ADUNANZA BEGIN if (!client) return true; // ADUNANZA END // Don't kick anybody if there's no need to if (!m_allowKicking) { return false; } // First, check if it is a VIP slot (friend or Release-Prio). if (client->GetFriendSlot()) { return false; // never drop the friend } // Release-Prio and nobody on queue for it? if (client->GetUploadFile()->GetUpPriority() == PR_POWERSHARE) { // Keep it unless half of the UL slots are occupied with friends or Release uploads. uint16 vips = 0; for (CClientRefList::iterator it = m_uploadinglist.begin(); it != m_uploadinglist.end(); ++it) { CUpDownClient* cur_client = it->GetClient(); if (cur_client->GetFriendSlot() || cur_client->GetUploadFile()->GetUpPriority() == PR_POWERSHARE) { vips++; } } // allow if VIP uploads occupy at most half of the possible upload slots if (vips <= GetMaxSlots() / 2) { return false; } // Otherwise normal rules apply. } // Ordinary slots // "Transfer full chunks": drop client after 10 MB upload, or after an hour. // (so average UL speed should at least be 2.84 kB/s) // We don't track what he is downloading, but if it's all from one chunk he gets it. if (client->GetUpStartTimeDelay() > 3600000 // time: 1h || client->GetSessionUp() > 10485760) { // data: 10MB m_allowKicking = false; // kick max one client per cycle return true; } return false; } /* * This function removes a file indicated by filehash from suspended_uploads_list. */ void CUploadQueue::ResumeUpload( const CMD4Hash& filehash ) { suspendedUploadsSet.erase(filehash); AddLogLineN(CFormat( _("Resuming uploads of file: %s" ) ) % filehash.Encode() ); } /* * This function stops upload of a file indicated by filehash. * * a) teminate == false: * File is suspended while a download completes. Then it is resumed after completion, * so it makes sense to keep the client. Such files are kept in suspendedUploadsSet. * b) teminate == true: * File is deleted. Then the client is not added to the waiting list. * Waiting clients are swept out with next run of AddUpNextClient, * because their file is not shared anymore. */ uint16 CUploadQueue::SuspendUpload(const CMD4Hash& filehash, bool terminate) { AddLogLineN(CFormat( _("Suspending upload of file: %s" ) ) % filehash.Encode() ); uint16 removed = 0; //Append the filehash to the list. if (!terminate) { suspendedUploadsSet.insert(filehash); } CClientRefList::iterator it = m_uploadinglist.begin(); while (it != m_uploadinglist.end()) { CUpDownClient *potential = it++->GetClient(); //check if the client is uploading the file we need to suspend if (potential->GetUploadFileID() == filehash) { // remove the unlucky client from the upload queue RemoveFromUploadQueue(potential); // if suspend isn't permanent add it to the waiting queue if (terminate) { potential->SetUploadState(US_NONE); } else { m_waitinglist.push_back(CCLIENTREF(potential, wxT("CUploadQueue::SuspendUpload"))); theStats::AddWaitingClient(); potential->SetUploadState(US_ONUPLOADQUEUE); potential->SendRankingInfo(); Notify_SharedCtrlRefreshClient(potential->ECID(), AVAILABLE_SOURCE); } removed++; } } return removed; } bool CUploadQueue::RemoveFromWaitingQueue(CUpDownClient* client) { CClientRefList::iterator it = m_waitinglist.begin(); uint16 rank = 1; while (it != m_waitinglist.end()) { CClientRefList::iterator it1 = it++; if (it1->GetClient() == client) { RemoveFromWaitingQueue(it1); // update ranks of remaining queue while (it != m_waitinglist.end()) { it->GetClient()->SetUploadQueueWaitingPosition(rank++); // ADUNANZA BEGIN // back #if 0 it++; #else ++it; #endif // ADUNANZA END } return true; } rank++; } return false; } void CUploadQueue::RemoveFromWaitingQueue(CClientRefList::iterator pos) { CUpDownClient* todelete = pos->GetClient(); // ADUNANZA BEGIN // mod Adu // Emanem // se il client era adu decremento il contatore if (todelete && todelete->IsAdunanzA() && m_AduClientsNum) {// ADUFLAGS m_AduClientsNum--; } // fine mod Adu // ADUNANZA END m_waitinglist.erase(pos); theStats::RemoveWaitingClient(); if( todelete->IsBanned() ) { todelete->UnBan(); } //Notify_QlistRemoveClient(todelete); todelete->SetUploadState(US_NONE); todelete->ClearScore(); todelete->SetUploadQueueWaitingPosition(0); } #if EXTENDED_UPLOADQUEUE int CUploadQueue::PopulatePossiblyWaitingList() { static uint32 lastPopulate = 0; uint32 tick = GetTickCount(); int ret = m_possiblyWaitingList.size(); if (tick - lastPopulate > MIN2MS(15)) { // repopulate in any case after this time m_possiblyWaitingList.clear(); } else if (ret || tick - lastPopulate < SEC2MS(30)) { // don't retry too fast if list is empty return ret; } lastPopulate = tick; // Get our downloads int nrDownloads = theApp->downloadqueue->GetFileCount(); for (int idownload = 0; idownload < nrDownloads; idownload++) { CPartFile * download = theApp->downloadqueue->GetFileByIndex(idownload); if (!download || download->GetAvailablePartCount() == 0) { continue; } const CKnownFile::SourceSet& sources = download->GetSourceList(); if (sources.empty()) { continue; } // Make a table which parts are available. No need to notify a client // which needs nothing we have. uint16 parts = download->GetPartCount(); std::vector partsAvailable; partsAvailable.resize(parts); for (uint32 i = parts; i--;) { partsAvailable[i] = download->IsComplete(i); } for (CKnownFile::SourceSet::const_iterator it = sources.begin(); it != sources.end(); it++) { // Iterate over our sources, find those where download == upload CUpDownClient * client = it->GetClient(); if (!client || client->GetUploadFile() != download || client->HasLowID()) { continue; } const BitVector& partStatus = client->GetPartStatus(); if (partStatus.size() != parts) { continue; } // Do we have something for him? bool haveSomething = false; for (uint32 i = parts; i--;) { if (partsAvailable[i] && !partStatus.get(i)) { haveSomething = true; break; } } if (haveSomething) { m_possiblyWaitingList.push_back(*it); } } } ret = m_possiblyWaitingList.size(); AddDebugLogLineN(logLocalClient, CFormat(wxT("Populated PossiblyWaitingList: %d")) % ret); return ret; } #endif // EXTENDED_UPLOADQUEUE // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/EncryptedDatagramSocket.cpp0000644000175000017500000004741612050266603023606 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // /* Basic Obfuscated Handshake Protocol UDP: see EncryptedStreamSocket.h ****************************** ED2K Packets - Keycreation Client <-> Client: - Client A (Outgoing connection): Sendkey: Md5() 23 - Client B (Incoming connection): Receivekey: Md5() 23 - Note: The first 1024 Bytes will be _NOT_ discarded for UDP keys to save CPU time - Handshake -> The handshake is encrypted - except otherwise noted - by the Keys created above -> Padding is currently not used for UDP meaning that PaddingLen will be 0, using PaddingLens up to 16 Bytes is acceptable however Client A: - Additional Comments: - For obvious reasons the UDP handshake is actually no handshake. If a different Encryption method (or better a different Key) is to be used this has to be negotiated in a TCP connection - SemiRandomNotProtocolMarker is a Byte which has a value unequal any Protocol header byte. This is a compromise, turning in complete randomness (and nice design) but gaining a lower CPU usage - Kad/Ed2k Marker are only indicators, which possibility could be tried first, and should not be trusted ****************************** Server Packets - Keycreation Client <-> Server: - Client A (Outgoing connection client -> server): Sendkey: Md5() 7 - Client B (Incoming connection): Receivekey: Md5() 7 - Note: The first 1024 Bytes will be _NOT_ discarded for UDP keys to save CPU time - Handshake -> The handshake is encrypted - except otherwise noted - by the Keys created above -> Padding is currently not used for UDP meaning that PaddingLen will be 0, using PaddingLens up to 16 Bytes is acceptable however Client A: - Overhead: 8 Bytes per UDP Packet - Security for Basic Obfuscation: - Random looking packets, very limited protection against passive eavesdropping single packets - Additional Comments: - For obvious reasons the UDP handshake is actually no handshake. If a different Encryption method (or better a different Key) is to be used this has to be negotiated in a TCP connection - SemiRandomNotProtocolMarker is a Byte which has a value unequal any Protocol header byte. This is a compromise, turning in complete randomness (and nice design) but gaining a lower CPU usage ****************************** KAD Packets - Keycreation Client <-> Client: - Client A (Outgoing connection): Sendkey: Md5() 18 - Client B (Incoming connection): Receivekey: Md5() 18 - Note: The first 1024 Bytes will be _NOT_ discarded for UDP keys to save CPU time - Handshake -> The handshake is encrypted - except otherwise noted - by the Keys created above -> Padding is currently not used for UDP meaning that PaddingLen will be 0, using PaddingLens up to 16 Bytes is acceptable however Client A: - Overhead: 12 Bytes per UDP Packet - Additional Comments: - For obvious reasons the UDP handshake is actually no handshake. If a different Encryption method (or better a different Key) is to be used this has to be negotiated in a TCP connection - SemiRandomNotProtocolMarker is a Byte which has a value unequal any Protocol header byte. This is a compromise, turning in complete randomness (and nice design) but gaining a lower CPU usage - Kad/Ed2k Marker are only indicators, which possibility could be tried first, and should not be trusted */ #include "EncryptedDatagramSocket.h" #include "amule.h" #include "Logger.h" #include "Preferences.h" #include "RC4Encrypt.h" #include "./kademlia/kademlia/Prefs.h" #include "./kademlia/kademlia/Kademlia.h" #include "RandomFunctions.h" #include "Statistics.h" #include #include // random generator #include "CryptoPP_Inc.h" // Needed for Crypto functions #define CRYPT_HEADER_WITHOUTPADDING 8 #define MAGICVALUE_UDP 91 #define MAGICVALUE_UDP_SYNC_CLIENT 0x395F2EC1 #define MAGICVALUE_UDP_SYNC_SERVER 0x13EF24D5 #define MAGICVALUE_UDP_SERVERCLIENT 0xA5 #define MAGICVALUE_UDP_CLIENTSERVER 0x6B CEncryptedDatagramSocket::CEncryptedDatagramSocket(wxIPaddress &address, wxSocketFlags flags, const CProxyData *proxyData) : CDatagramSocketProxy(address, flags, proxyData) {} CEncryptedDatagramSocket::~CEncryptedDatagramSocket() {} int CEncryptedDatagramSocket::DecryptReceivedClient(uint8_t *bufIn, int bufLen, uint8_t **bufOut, uint32_t ip, uint32_t *receiverVerifyKey, uint32_t *senderVerifyKey) { int result = bufLen; *bufOut = bufIn; if (receiverVerifyKey == NULL || senderVerifyKey == NULL) { wxFAIL; return result; } *receiverVerifyKey = 0; *senderVerifyKey = 0; if (result <= CRYPT_HEADER_WITHOUTPADDING /*|| !thePrefs.IsClientCryptLayerSupported()*/) { return result; } // ADUNANZA BEGIN bool bCandidateKaduOpCodePacket(false); // ADUNANZA END switch (bufIn[0]) { case OP_EMULEPROT: case OP_KADEMLIAPACKEDPROT: case OP_KADEMLIAHEADER: case OP_UDPRESERVEDPROT1: case OP_UDPRESERVEDPROT2: case OP_PACKEDPROT: return result; // no encrypted packet (see description on top) default: // ADUNANZA BEGIN if (theApp && ((bufIn[0] == theApp->get_kadOpcode()) || (bufIn[0] == theApp->get_kadZOpcode()))) { bCandidateKaduOpCodePacket = true; } // ADUNANZA END ; } // might be an encrypted packet, try to decrypt CRC4EncryptableBuffer receivebuffer; uint32_t value = 0; // check the marker bit which type this packet could be and which key to test first, this is only an indicator since old clients have it set random // see the header for marker bits explanation uint8_t currentTry = ((bufIn[0] & 0x03) == 3) ? 1 : (bufIn[0] & 0x03); uint8_t tries; if (Kademlia::CKademlia::GetPrefs() == NULL) { // if kad never run, no point in checking anything except for ed2k encryption tries = 1; currentTry = 1; } else { tries = 3; } bool kad = false; do { receivebuffer.FullReset(); tries--; MD5Sum md5; if (currentTry == 0) { // kad packet with NodeID as key kad = true; if (Kademlia::CKademlia::GetPrefs()) { uint8_t keyData[18]; Kademlia::CKademlia::GetPrefs()->GetKadID().StoreCryptValue((uint8_t *)&keyData); memcpy(keyData + 16, bufIn + 1, 2); // random key part sent from remote client md5.Calculate(keyData, sizeof(keyData)); } } else if (currentTry == 1) { // ed2k packet kad = false; uint8_t keyData[23]; md4cpy(keyData, thePrefs::GetUserHash().GetHash()); keyData[20] = MAGICVALUE_UDP; PokeUInt32(keyData + 16, ip); memcpy(keyData + 21, bufIn + 1, 2); // random key part sent from remote client md5.Calculate(keyData, sizeof(keyData)); } else if (currentTry == 2) { // kad packet with ReceiverKey as key kad = true; if (Kademlia::CKademlia::GetPrefs()) { uint8_t keyData[6]; PokeUInt32(keyData, Kademlia::CPrefs::GetUDPVerifyKey(ip)); memcpy(keyData + 4, bufIn + 1, 2); // random key part sent from remote client md5.Calculate(keyData, sizeof(keyData)); } } else { wxFAIL; } receivebuffer.SetKey(md5, true); receivebuffer.RC4Crypt(bufIn + 3, (uint8_t*)&value, sizeof(value)); ENDIAN_SWAP_I_32(value); currentTry = (currentTry + 1) % 3; } while (value != MAGICVALUE_UDP_SYNC_CLIENT && tries > 0); // try to decrypt as ed2k as well as kad packet if needed (max 3 rounds) // ADUNANZA BEGIN // Se era un pacchetto KAD per un kaduOpCode allora esco e butto via tutto if (kad && bCandidateKaduOpCodePacket) { return bufLen; // pass through } // ADUNANZA END if (value == MAGICVALUE_UDP_SYNC_CLIENT) { // yup this is an encrypted packet // // debugoutput notices // // the following cases are "allowed" but shouldn't happen given that there is only our implementation yet // if (bKad && (pbyBufIn[0] & 0x01) != 0) // DebugLog(_T("Received obfuscated UDP packet from clientIP: %s with wrong key marker bits (kad packet, ed2k bit)"), ipstr(dwIP)); // else if (bKad && !bKadRecvKeyUsed && (pbyBufIn[0] & 0x02) != 0) // DebugLog(_T("Received obfuscated UDP packet from clientIP: %s with wrong key marker bits (kad packet, nodeid key, recvkey bit)"), ipstr(dwIP)); // else if (bKad && bKadRecvKeyUsed && (pbyBufIn[0] & 0x02) == 0) // DebugLog(_T("Received obfuscated UDP packet from clientIP: %s with wrong key marker bits (kad packet, recvkey key, nodeid bit)"), ipstr(dwIP)); uint8_t padLen; receivebuffer.RC4Crypt(bufIn + 7, (uint8_t*)&padLen, 1); result -= CRYPT_HEADER_WITHOUTPADDING; if (result <= padLen) { //DebugLogError(_T("Invalid obfuscated UDP packet from clientIP: %s, Paddingsize (%u) larger than received bytes"), ipstr(dwIP), byPadLen); return bufLen; // pass through, let the Receivefunction do the errorhandling on this junk } if (padLen > 0) { receivebuffer.RC4Crypt(NULL, NULL, padLen); } result -= padLen; if (kad) { if (result <= 8) { //DebugLogError(_T("Obfuscated Kad packet with mismatching size (verify keys missing) received from clientIP: %s"), ipstr(dwIP)); return bufLen; // pass through, let the Receivefunction do the errorhandling on this junk; } // read the verify keys receivebuffer.RC4Crypt(bufIn + CRYPT_HEADER_WITHOUTPADDING + padLen, (uint8_t*)receiverVerifyKey, 4); receivebuffer.RC4Crypt(bufIn + CRYPT_HEADER_WITHOUTPADDING + padLen + 4, (uint8_t*)senderVerifyKey, 4); ENDIAN_SWAP_I_32(*receiverVerifyKey); ENDIAN_SWAP_I_32(*senderVerifyKey); result -= 8; } *bufOut = bufIn + (bufLen - result); receivebuffer.RC4Crypt((uint8_t*)*bufOut, (uint8_t*)*bufOut, result); theStats::AddDownOverheadCrypt(bufLen - result); return result; // done } else { //DebugLogWarning(_T("Obfuscated packet expected but magicvalue mismatch on UDP packet from clientIP: %s"), ipstr(dwIP)); return bufLen; // pass through, let the Receivefunction do the errorhandling on this junk } } // Encrypt packet. Key used: // clientHashOrKadID != NULL -> clientHashOrKadID // clientHashOrKadID == NULL && kad && receiverVerifyKey != 0 -> receiverVerifyKey // else -> ASSERT int CEncryptedDatagramSocket::EncryptSendClient(uint8_t **buf, int bufLen, const uint8_t *clientHashOrKadID, bool kad, uint32_t receiverVerifyKey, uint32_t senderVerifyKey) { wxASSERT(theApp->GetPublicIP() != 0 || kad); wxASSERT(thePrefs::IsClientCryptLayerSupported()); wxASSERT(clientHashOrKadID != NULL || receiverVerifyKey != 0); wxASSERT((receiverVerifyKey == 0 && senderVerifyKey == 0) || kad); uint8_t padLen = 0; // padding disabled for UDP currently const uint32_t cryptHeaderLen = padLen + CRYPT_HEADER_WITHOUTPADDING + (kad ? 8 : 0); uint32_t cryptedLen = bufLen + cryptHeaderLen; uint8_t *cryptedBuffer = new uint8_t[cryptedLen]; bool kadRecvKeyUsed = false; uint16_t randomKeyPart = GetRandomUint16(); CRC4EncryptableBuffer sendbuffer; MD5Sum md5; if (kad) { if ((clientHashOrKadID == NULL || CMD4Hash(clientHashOrKadID).IsEmpty()) && receiverVerifyKey != 0) { kadRecvKeyUsed = true; uint8_t keyData[6]; PokeUInt32(keyData, receiverVerifyKey); PokeUInt16(keyData+4, randomKeyPart); md5.Calculate(keyData, sizeof(keyData)); //DEBUG_ONLY( DebugLog(_T("Creating obfuscated Kad packet encrypted by ReceiverKey (%u)"), nReceiverVerifyKey) ); } else if (clientHashOrKadID != NULL && !CMD4Hash(clientHashOrKadID).IsEmpty()) { uint8_t keyData[18]; md4cpy(keyData, clientHashOrKadID); PokeUInt16(keyData+16, randomKeyPart); md5.Calculate(keyData, sizeof(keyData)); //DEBUG_ONLY( DebugLog(_T("Creating obfuscated Kad packet encrypted by Hash/NodeID %s"), md4str(pachClientHashOrKadID)) ); } else { // ADUNANZA BEGIN // fix backport per memory leak delete [] cryptedBuffer; // ADUNANZA END wxFAIL; return bufLen; } } else { uint8_t keyData[23]; md4cpy(keyData, clientHashOrKadID); PokeUInt32(keyData+16, theApp->GetPublicIP()); PokeUInt16(keyData+21, randomKeyPart); keyData[20] = MAGICVALUE_UDP; md5.Calculate(keyData, sizeof(keyData)); } sendbuffer.SetKey(md5, true); // create the semi random byte encryption header uint8_t semiRandomNotProtocolMarker = 0; int i; for (i = 0; i < 128; i++) { semiRandomNotProtocolMarker = GetRandomUint8(); semiRandomNotProtocolMarker = kad ? (semiRandomNotProtocolMarker & 0xFE) : (semiRandomNotProtocolMarker | 0x01); // set the ed2k/kad marker bit if (kad) { // set the ed2k/kad and nodeid/recvkey markerbit semiRandomNotProtocolMarker = kadRecvKeyUsed ? ((semiRandomNotProtocolMarker & 0xFE) | 0x02) : (semiRandomNotProtocolMarker & 0xFC); } else { // set the ed2k/kad marker bit semiRandomNotProtocolMarker = (semiRandomNotProtocolMarker | 0x01); } bool bOk = false; switch (semiRandomNotProtocolMarker) { // not allowed values case OP_EMULEPROT: case OP_KADEMLIAPACKEDPROT: case OP_KADEMLIAHEADER: case OP_UDPRESERVEDPROT1: case OP_UDPRESERVEDPROT2: case OP_PACKEDPROT: break; default: // ADUNANZA BEGIN #if 0 bOk = true; #else if (kad && theApp && ((semiRandomNotProtocolMarker == theApp->get_kadOpcode()) || (semiRandomNotProtocolMarker == theApp->get_kadZOpcode()))) { bOk = false; } else { bOk = true; } #endif // ADUNANZA END } if (bOk) { break; } } if (i >= 128) { // either we have _real_ bad luck or the randomgenerator is a bit messed up wxFAIL; semiRandomNotProtocolMarker = 0x01; } cryptedBuffer[0] = semiRandomNotProtocolMarker; PokeUInt16(cryptedBuffer + 1, randomKeyPart); uint32_t magicValue = ENDIAN_SWAP_32(MAGICVALUE_UDP_SYNC_CLIENT); sendbuffer.RC4Crypt((uint8_t*)&magicValue, cryptedBuffer + 3, 4); sendbuffer.RC4Crypt((uint8_t*)&padLen, cryptedBuffer + 7, 1); for (int j = 0; j < padLen; j++) { uint8_t byRand = (uint8_t)rand(); // they actually don't really need to be random, but it doesn't hurt either sendbuffer.RC4Crypt((uint8_t*)&byRand, cryptedBuffer + CRYPT_HEADER_WITHOUTPADDING + j, 1); } if (kad) { ENDIAN_SWAP_I_32(receiverVerifyKey); ENDIAN_SWAP_I_32(senderVerifyKey); sendbuffer.RC4Crypt((uint8_t*)&receiverVerifyKey, cryptedBuffer + CRYPT_HEADER_WITHOUTPADDING + padLen, 4); sendbuffer.RC4Crypt((uint8_t*)&senderVerifyKey, cryptedBuffer + CRYPT_HEADER_WITHOUTPADDING + padLen + 4, 4); } sendbuffer.RC4Crypt(*buf, cryptedBuffer + cryptHeaderLen, bufLen); delete [] *buf; *buf = cryptedBuffer; theStats::AddUpOverheadCrypt(cryptedLen - bufLen); return cryptedLen; } int CEncryptedDatagramSocket::DecryptReceivedServer(uint8_t* pbyBufIn, int nBufLen, uint8_t **ppbyBufOut, uint32_t dwBaseKey, uint32_t /*dbgIP*/) { int nResult = nBufLen; *ppbyBufOut = pbyBufIn; if (nResult <= CRYPT_HEADER_WITHOUTPADDING || !thePrefs::IsServerCryptLayerUDPEnabled() || dwBaseKey == 0) { return nResult; } if(pbyBufIn[0] == OP_EDONKEYPROT) { return nResult; // no encrypted packet (see description on top) } // might be an encrypted packet, try to decrypt uint8_t achKeyData[7]; PokeUInt32(achKeyData, dwBaseKey); achKeyData[4] = MAGICVALUE_UDP_SERVERCLIENT; memcpy(achKeyData + 5, pbyBufIn + 1, 2); // random key part sent from remote server CRC4EncryptableBuffer receivebuffer; MD5Sum md5(achKeyData, sizeof(achKeyData)); receivebuffer.SetKey(md5,true); uint32_t dwValue; receivebuffer.RC4Crypt(pbyBufIn + 3, (uint8_t*)&dwValue, sizeof(dwValue)); ENDIAN_SWAP_I_32(dwValue); if (dwValue == MAGICVALUE_UDP_SYNC_SERVER) { // yup this is an encrypted packet //DEBUG_ONLY( DebugLog(_T("Received obfuscated UDP packet from ServerIP: %s"), ipstr(dbgIP)) ); uint8_t byPadLen; receivebuffer.RC4Crypt(pbyBufIn + 7, (uint8_t*)&byPadLen, 1); byPadLen &= 15; nResult -= CRYPT_HEADER_WITHOUTPADDING; if (nResult <= byPadLen) { //DebugLogError(_T("Invalid obfuscated UDP packet from ServerIP: %s, Paddingsize (%u) larger than received bytes"), ipstr(dbgIP), byPadLen); return nBufLen; // pass through, let the Receivefunction do the errorhandling on this junk } if (byPadLen > 0) { receivebuffer.RC4Crypt(NULL, NULL, byPadLen); } nResult -= byPadLen; *ppbyBufOut = pbyBufIn + (nBufLen - nResult); receivebuffer.RC4Crypt((uint8_t*)*ppbyBufOut, (uint8_t*)*ppbyBufOut, nResult); theStats::AddDownOverheadCrypt(nBufLen - nResult); return nResult; // done } else { //DebugLogWarning(_T("Obfuscated packet expected but magicvalue mismatch on UDP packet from ServerIP: %s"), ipstr(dbgIP)); return nBufLen; // pass through, let the Receivefunction do the errorhandling on this junk } } int CEncryptedDatagramSocket::EncryptSendServer(uint8_t** ppbyBuf, int nBufLen, uint32_t dwBaseKey) { wxASSERT( thePrefs::IsServerCryptLayerUDPEnabled() ); wxASSERT( dwBaseKey != 0 ); uint16_t nRandomKeyPart = GetRandomUint16(); uint8_t achKeyData[7]; PokeUInt32(achKeyData, dwBaseKey); achKeyData[4] = MAGICVALUE_UDP_CLIENTSERVER; PokeUInt16(achKeyData + 5, nRandomKeyPart); MD5Sum md5(achKeyData, sizeof(achKeyData)); CRC4EncryptableBuffer sendbuffer; sendbuffer.SetKey(md5, true); // create the semi random byte encryption header uint8_t bySemiRandomNotProtocolMarker = 0; int i; for (i = 0; i < 128; i++) { bySemiRandomNotProtocolMarker = GetRandomUint8(); if (bySemiRandomNotProtocolMarker != OP_EDONKEYPROT) { // not allowed values break; } } if (i >= 128) { // either we have _real_ bad luck or the randomgenerator is a bit messed up wxFAIL; bySemiRandomNotProtocolMarker = 0x01; } uint8_t byPadLen = 0; // padding disabled for UDP currently uint32_t nCryptedLen = nBufLen + byPadLen + CRYPT_HEADER_WITHOUTPADDING; uint8_t* pachCryptedBuffer = new uint8_t[nCryptedLen]; pachCryptedBuffer[0] = bySemiRandomNotProtocolMarker; PokeUInt16(pachCryptedBuffer + 1, nRandomKeyPart); uint32_t dwMagicValue = ENDIAN_SWAP_32(MAGICVALUE_UDP_SYNC_SERVER); sendbuffer.RC4Crypt((uint8_t*)&dwMagicValue, pachCryptedBuffer + 3, 4); sendbuffer.RC4Crypt((uint8_t*)&byPadLen, pachCryptedBuffer + 7, 1); for (int j = 0; j < byPadLen; j++){ uint8_t byRand = (uint8_t)rand(); // they actually don't really need to be random, but it doesn't hurt either sendbuffer.RC4Crypt((uint8_t*)&byRand, pachCryptedBuffer + CRYPT_HEADER_WITHOUTPADDING + j, 1); } sendbuffer.RC4Crypt(*ppbyBuf, pachCryptedBuffer + CRYPT_HEADER_WITHOUTPADDING + byPadLen, nBufLen); delete[] *ppbyBuf; *ppbyBuf = pachCryptedBuffer; theStats::AddUpOverheadCrypt(nCryptedLen - nBufLen); return nCryptedLen; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ThreadTasks.cpp0000644000175000017500000005105112050266603021242 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2006-2011 Mikkel Schubert ( xaignar@amule.org / http:://www.amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include // Needed for wxTheApp #include "ThreadTasks.h" // Interface declarations #include "PartFile.h" // Needed for CPartFile #include "Logger.h" // Needed for Add(Debug)LogLine{C,N} #include // Needed for CFormat #include "amule.h" // Needed for theApp #include "KnownFileList.h" // Needed for theApp->knownfiles #include "Preferences.h" // Needed for thePrefs #include "ScopedPtr.h" // Needed for CScopedPtr and CScopedArray #include "PlatformSpecific.h" // Needed for CanFSHandleSpecialChars #ifdef HAVE_CONFIG_H # include "config.h" #endif //! This hash represents the value for an empty MD4 hashing const byte g_emptyMD4Hash[16] = { 0x31, 0xD6, 0xCF, 0xE0, 0xD1, 0x6A, 0xE9, 0x31, 0xB7, 0x3C, 0x59, 0xD7, 0xE0, 0xC0, 0x89, 0xC0 }; //////////////////////////////////////////////////////////// // CHashingTask CHashingTask::CHashingTask(const CPath& path, const CPath& filename, const CPartFile* part) // GetPrintable is used to improve the readability of the log. : CThreadTask(wxT("Hashing"), path.JoinPaths(filename).GetPrintable(), (part ? ETP_High : ETP_Normal)), m_path(path), m_filename(filename), m_toHash((EHashes)(EH_MD4 | EH_AICH)), m_owner(part) { // We can only create the AICH hashset if the file is a knownfile or // if the partfile is complete, since the MD4 hashset is checked first, // so that the AICH hashset only gets assigned if the MD4 hashset // matches what we expected. Due to the rareity of post-completion // corruptions, this gives us a nice speedup in most cases. if (part && !part->GetGapList().empty()) { m_toHash = EH_MD4; } } CHashingTask::CHashingTask(const CKnownFile* toAICHHash) // GetPrintable is used to improve the readability of the log. : CThreadTask(wxT("AICH Hashing"), toAICHHash->GetFilePath().JoinPaths(toAICHHash->GetFileName()).GetPrintable(), ETP_Low), m_path(toAICHHash->GetFilePath()), m_filename(toAICHHash->GetFileName()), m_toHash(EH_AICH), m_owner(toAICHHash) { } void CHashingTask::Entry() { CFileAutoClose file; CPath fullPath = m_path.JoinPaths(m_filename); if (!file.Open(fullPath, CFile::read)) { AddDebugLogLineC(logHasher, CFormat(wxT("Warning, failed to open file, skipping: %s")) % fullPath); return; } uint64 fileLength = 0; try { fileLength = file.GetLength(); } catch (const CIOFailureException&) { AddDebugLogLineC(logHasher, CFormat(wxT("Warning, failed to retrieve file-length, skipping: %s")) % fullPath); return; } if (fileLength > MAX_FILE_SIZE) { AddDebugLogLineC(logHasher, CFormat(wxT("Warning, file is larger than supported size, skipping: %s")) % fullPath); return; } else if (fileLength == 0) { if (m_owner) { // It makes no sense to try to hash empty partfiles ... wxFAIL; } else { // Zero-size partfiles should be hashed, but not zero-sized shared-files. AddDebugLogLineC(logHasher, CFormat(wxT("Warning, 0-size file, skipping: %s")) % fullPath); } return; } // For thread-safety, results are passed via a temporary file object. CScopedPtr knownfile; knownfile->m_filePath = m_path; knownfile->SetFileName(m_filename); knownfile->SetFileSize(fileLength); knownfile->m_lastDateChanged = CPath::GetModificationTime(fullPath); knownfile->m_AvailPartFrequency.insert( knownfile->m_AvailPartFrequency.begin(), knownfile->GetPartCount(), 0); if ((m_toHash & EH_MD4) && (m_toHash & EH_AICH)) { knownfile->GetAICHHashset()->FreeHashSet(); AddDebugLogLineN( logHasher, CFormat( wxT("Starting to create MD4 and AICH hash for file: %s")) % m_filename ); } else if ((m_toHash & EH_MD4)) { AddDebugLogLineN( logHasher, CFormat( wxT("Starting to create MD4 hash for file: %s")) % m_filename ); } else if ((m_toHash & EH_AICH)) { knownfile->GetAICHHashset()->FreeHashSet(); AddDebugLogLineN( logHasher, CFormat( wxT("Starting to create AICH hash for file: %s")) % m_filename ); } else { wxCHECK_RET(0, (CFormat(wxT("No hashes requested for file, skipping: %s")) % m_filename).GetString()); } // This loops creates the part-hashes, loop-de-loop. try { for (uint16 part = 0; part < knownfile->GetPartCount() && !TestDestroy(); part++) { // ADUNANZA BEGIN // backport SetHashingProgress(part + 1); // ADUNANZA END if (CreateNextPartHash(file, part, knownfile.get(), m_toHash) == false) { AddDebugLogLineC(logHasher, CFormat(wxT("Error while hashing file, skipping: %s")) % m_filename); // ADUNANZA BEGIN // backport SetHashingProgress(0); // ADUNANZA END return; } } } catch (const CSafeIOException& e) { AddDebugLogLineC(logHasher, wxT("IO exception while hashing file: ") + e.what()); // ADUNANZA BEGIN // backport SetHashingProgress(0); // ADUNANZA END return; } // ADUNANZA BEGIN // backport SetHashingProgress(0); // ADUNANZA END if ((m_toHash & EH_MD4) && !TestDestroy()) { // If the file is < PARTSIZE, then the filehash is that one hash, // otherwise, the filehash is the hash of the parthashes if ( knownfile->m_hashlist.size() == 1 ) { knownfile->m_abyFileHash = knownfile->m_hashlist[0]; knownfile->m_hashlist.clear(); } else if ( knownfile->m_hashlist.size() ) { CMD4Hash hash; knownfile->CreateHashFromHashlist(knownfile->m_hashlist, &hash); knownfile->m_abyFileHash = hash; } else { // This should not happen! wxFAIL; } } // Did we create a AICH hashset? if ((m_toHash & EH_AICH) && !TestDestroy()) { CAICHHashSet* AICHHashSet = knownfile->GetAICHHashset(); AICHHashSet->ReCalculateHash(false); if (AICHHashSet->VerifyHashTree(true) ) { AICHHashSet->SetStatus(AICH_HASHSETCOMPLETE); if (!AICHHashSet->SaveHashSet()) { AddDebugLogLineC( logHasher, CFormat(wxT("Warning, failed to save AICH hashset for file: %s")) % m_filename ); } // ADUNANZA BEGIN // Patch to avoid memory leaks (got from aMule SVN 10793 and http://amule.forumer.com/memory-leak-t2286013.html) // delete hashset now to free memory AICHHashSet->FreeHashSet(); // ADUNANZA END } } if ((m_toHash == EH_AICH) && !TestDestroy()) { CHashingEvent evt(MULE_EVT_AICH_HASHING, knownfile.release(), m_owner); wxPostEvent(wxTheApp, evt); } else if (!TestDestroy()) { CHashingEvent evt(MULE_EVT_HASHING, knownfile.release(), m_owner); wxPostEvent(wxTheApp, evt); } } // ADUNANZA BEGIN // backport void CHashingTask::SetHashingProgress(uint16 part) { if (m_owner) { m_owner->SetHashingProgress(part); } } // ADUNANZA END bool CHashingTask::CreateNextPartHash(CFileAutoClose& file, uint16 part, CKnownFile* owner, EHashes toHash) { wxCHECK_MSG(!file.Eof(), false, wxT("Unexpected EOF in CreateNextPartHash")); const uint64 offset = part * PARTSIZE; // We'll read at most PARTSIZE bytes per cycle const uint64 partLength = owner->GetPartSize(part); CMD4Hash hash; CMD4Hash* md4Hash = ((toHash & EH_MD4) ? &hash : NULL); CAICHHashTree* aichHash = NULL; // Setup for AICH hashing if (toHash & EH_AICH) { aichHash = owner->GetAICHHashset()->m_pHashTree.FindHash(offset, partLength); } owner->CreateHashFromFile(file, offset, partLength, md4Hash, aichHash); if (toHash & EH_MD4) { // Store the md4 hash owner->m_hashlist.push_back(hash); // This is because of the ed2k implementation for parts. A 2 * PARTSIZE // file i.e. will have 3 parts (see CKnownFile::SetFileSize for comments). // So we have to create the hash for the 0-size data, which will be the default // md4 hash for null data: 31D6CFE0D16AE931B73C59D7E0C089C0 if ((partLength == PARTSIZE) && file.Eof()) { owner->m_hashlist.push_back(CMD4Hash(g_emptyMD4Hash)); } } return true; } void CHashingTask::OnLastTask() { if (GetType() == wxT("Hashing")) { // To prevent rehashing in case of crashes, we // explicity save the list of hashed files here. theApp->knownfiles->Save(); // Make sure the AICH-hashes are up to date. CThreadScheduler::AddTask(new CAICHSyncTask()); } } //////////////////////////////////////////////////////////// // CAICHSyncTask CAICHSyncTask::CAICHSyncTask() : CThreadTask(wxT("AICH Syncronizing"), wxEmptyString, ETP_Low) { } void CAICHSyncTask::Entry() { ConvertToKnown2ToKnown264(); AddDebugLogLineN( logAICHThread, wxT("Syncronization thread started.") ); // We collect all masterhashs which we find in the known2.met and store them in a list std::list hashlist; const CPath fullpath = CPath(theApp->ConfigDir + KNOWN2_MET_FILENAME); CFile file; if (!fullpath.FileExists()) { // File does not exist. Try to create it to see if it can be created at all (and don't start hashing otherwise). if (!file.Open(fullpath, CFile::write)) { AddDebugLogLineC( logAICHThread, wxT("Error, failed to open 'known2_64.met' file!") ); return; } try { file.WriteUInt8(KNOWN2_MET_VERSION); } catch (const CIOFailureException& e) { AddDebugLogLineC(logAICHThread, wxT("IO failure while creating hashlist (Aborting): ") + e.what()); return; } } else { if (!file.Open(fullpath, CFile::read)) { AddDebugLogLineC( logAICHThread, wxT("Error, failed to open 'known2_64.met' file!") ); return; } uint32 nLastVerifiedPos = 0; try { if (file.ReadUInt8() != KNOWN2_MET_VERSION) { throw CEOFException(wxT("Invalid met-file header found, removing file.")); } uint64 nExistingSize = file.GetLength(); while (file.GetPosition() < nExistingSize) { // Read the next hash hashlist.push_back(CAICHHash(&file)); uint32 nHashCount = file.ReadUInt32(); if (file.GetPosition() + nHashCount * CAICHHash::GetHashSize() > nExistingSize){ throw CEOFException(wxT("Hashlist ends past end of file.")); } // skip the rest of this hashset nLastVerifiedPos = file.Seek(nHashCount * HASHSIZE, wxFromCurrent); } } catch (const CEOFException&) { AddDebugLogLineC(logAICHThread, wxT("Hashlist corrupted, truncating file.")); file.Close(); file.Reopen(CFile::read_write); file.SetLength(nLastVerifiedPos); } catch (const CIOFailureException& e) { AddDebugLogLineC(logAICHThread, wxT("IO failure while reading hashlist (Aborting): ") + e.what()); return; } AddDebugLogLineN( logAICHThread, wxT("Masterhashes of known files have been loaded.") ); } // Now we check that all files which are in the sharedfilelist have a // corresponding hash in our list. Those how don't are queued for hashing. theApp->sharedfiles->CheckAICHHashes(hashlist); } bool CAICHSyncTask::ConvertToKnown2ToKnown264() { // converting known2.met to known2_64.met to support large files // changing hashcount from uint16 to uint32 const CPath oldfullpath = CPath(theApp->ConfigDir + OLD_KNOWN2_MET_FILENAME); const CPath newfullpath = CPath(theApp->ConfigDir + KNOWN2_MET_FILENAME); if (newfullpath.FileExists() || !oldfullpath.FileExists()) { // In this case, there is nothing that we need to do. return false; } CFile oldfile; CFile newfile; if (!oldfile.Open(oldfullpath, CFile::read)) { AddDebugLogLineC(logAICHThread, wxT("Failed to open 'known2.met' file.")); // else -> known2.met also doesn't exists, so nothing to convert return false; } if (!newfile.Open(newfullpath, CFile::write_excl)) { AddDebugLogLineC(logAICHThread, wxT("Failed to create 'known2_64.met' file.")); return false; } AddLogLineN(CFormat(_("Converting old AICH hashsets in '%s' to 64b in '%s'.")) % OLD_KNOWN2_MET_FILENAME % KNOWN2_MET_FILENAME); try { newfile.WriteUInt8(KNOWN2_MET_VERSION); while (newfile.GetPosition() < oldfile.GetLength()) { CAICHHash aichHash(&oldfile); uint32 nHashCount = oldfile.ReadUInt16(); CScopedArray buffer(nHashCount * CAICHHash::GetHashSize()); oldfile.Read(buffer.get(), nHashCount * CAICHHash::GetHashSize()); newfile.Write(aichHash.GetRawHash(), CAICHHash::GetHashSize()); newfile.WriteUInt32(nHashCount); newfile.Write(buffer.get(), nHashCount * CAICHHash::GetHashSize()); } newfile.Flush(); } catch (const CEOFException& e) { AddDebugLogLineC(logAICHThread, wxT("Error reading old 'known2.met' file.") + e.what()); return false; } catch (const CIOFailureException& e) { AddDebugLogLineC(logAICHThread, wxT("IO error while converting 'known2.met' file: ") + e.what()); return false; } // FIXME LARGE FILES (uncomment) //DeleteFile(oldfullpath); return true; } //////////////////////////////////////////////////////////// // CCompletionTask CCompletionTask::CCompletionTask(const CPartFile* file) // GetPrintable is used to improve the readability of the log. : CThreadTask(wxT("Completing"), file->GetFullName().GetPrintable(), ETP_High), m_filename(file->GetFileName()), m_metPath(file->GetFullName()), m_category(file->GetCategory()), m_owner(file), m_error(false) { wxASSERT(m_filename.IsOk()); wxASSERT(m_metPath.IsOk()); wxASSERT(m_owner); } void CCompletionTask::Entry() { CPath targetPath; { #ifndef AMULE_DAEMON // Prevent the preference values from changing underneeth us. wxMutexGuiLocker guiLock; #else //#warning Thread-safety needed #endif targetPath = theApp->glob_prefs->GetCategory(m_category)->path; if (!targetPath.DirExists()) { targetPath = thePrefs::GetIncomingDir(); } } CPath dstName = m_filename.Cleanup(true, !PlatformSpecific::CanFSHandleSpecialChars(targetPath)); // Avoid empty filenames ... if (!dstName.IsOk()) { dstName = CPath(wxT("Unknown")); } if (m_filename != dstName) { AddLogLineC(CFormat(_("WARNING: The filename '%s' is invalid and has been renamed to '%s'.")) % m_filename % dstName); } // Avoid saving to an already existing filename CPath newName = targetPath.JoinPaths(dstName); for (unsigned count = 0; newName.FileExists(); ++count) { wxString postfix = CFormat(wxT("(%u)")) % count; newName = targetPath.JoinPaths(dstName.AddPostfix(postfix)); } if (newName != targetPath.JoinPaths(dstName)) { AddLogLineC(CFormat(_("WARNING: The file '%s' already exists, new file renamed to '%s'.")) % dstName % newName.GetFullName()); } // Move will handle dirs on the same partition, otherwise copy is needed. CPath partfilename = m_metPath.RemoveExt(); if (!CPath::RenameFile(partfilename, newName)) { if (!CPath::CloneFile(partfilename, newName, true)) { m_error = true; return; } if (!CPath::RemoveFile(partfilename)) { AddDebugLogLineC(logPartFile, CFormat(wxT("WARNING: Could not remove original '%s' after creating backup")) % partfilename); } } // Removes the various other data-files const wxChar* otherMetExt[] = { wxT(""), PARTMET_BAK_EXT, wxT(".seeds"), NULL }; for (size_t i = 0; otherMetExt[i]; ++i) { CPath toRemove = m_metPath.AppendExt(otherMetExt[i]); if (toRemove.FileExists()) { if (!CPath::RemoveFile(toRemove)) { AddDebugLogLineC(logPartFile, CFormat(wxT("WARNING: Failed to delete %s")) % toRemove); } } } m_newName = newName; } void CCompletionTask::OnExit() { // Notify the app that the completion has finished for this file. CCompletionEvent evt(m_error, m_owner, m_newName); wxPostEvent(wxTheApp, evt); } //////////////////////////////////////////////////////////// // CAllocateFileTask #ifdef HAVE_FALLOCATE # ifndef _GNU_SOURCE # define _GNU_SOURCE # endif # ifdef HAVE_FCNTL_H # include # endif # include #elif defined HAVE_SYS_FALLOCATE # include # include # include #elif defined HAVE_POSIX_FALLOCATE # define _XOPEN_SOURCE 600 # include # ifdef HAVE_FCNTL_H # include # endif #endif #include #include CAllocateFileTask::CAllocateFileTask(CPartFile *file, bool pause) // GetPrintable is used to improve the readability of the log. : CThreadTask(wxT("Allocating"), file->GetFullName().RemoveExt().GetPrintable(), ETP_High), m_file(file), m_pause(pause), m_result(ENOSYS) { wxASSERT(file != NULL); } void CAllocateFileTask::Entry() { if (m_file->GetFileSize() == 0) { m_result = 0; return; } uint64_t minFree = thePrefs::IsCheckDiskspaceEnabled() ? thePrefs::GetMinFreeDiskSpace() : 0; int64_t freeSpace = CPath::GetFreeSpaceAt(thePrefs::GetTempDir()); // Don't even try to allocate, if there's no space to complete the operation. if (freeSpace != wxInvalidOffset) { if ((uint64_t)freeSpace < m_file->GetFileSize() + minFree) { m_result = ENOSPC; return; } } CFile file; file.Open(m_file->GetFullName().RemoveExt(), CFile::read_write); #ifdef __WXMSW__ try { // File is already created as non-sparse, so we only need to set the length. // This will fail to allocate the file e.g. under wine on linux/ext3, // but works with NTFS and FAT32. file.Seek(m_file->GetFileSize() - 1, wxFromStart); file.WriteUInt8(0); file.Close(); m_result = 0; } catch (const CSafeIOException&) { m_result = errno; } #else // Use kernel level routines if possible # ifdef HAVE_FALLOCATE m_result = fallocate(file.fd(), 0, 0, m_file->GetFileSize()); # elif defined HAVE_SYS_FALLOCATE m_result = syscall(SYS_fallocate, file.fd(), 0, (loff_t)0, (loff_t)m_file->GetFileSize()); if (m_result == -1) { m_result = errno; } # elif defined HAVE_POSIX_FALLOCATE // otherwise use glibc implementation, if available m_result = posix_fallocate(file.fd(), 0, m_file->GetFileSize()); # endif if (m_result != 0 && m_result != ENOSPC) { // If everything else fails, use slow-and-dirty method of allocating the file: write the whole file with zeroes. # define BLOCK_SIZE 1048576 /* Write 1 MB blocks */ void *zero = calloc(1, BLOCK_SIZE); if (zero != NULL) { try { uint64_t size = m_file->GetFileSize(); for (; size >= BLOCK_SIZE; size -= BLOCK_SIZE) { file.Write(zero, BLOCK_SIZE); } if (size > 0) { file.Write(zero, size); } file.Close(); m_result = 0; } catch (const CSafeIOException&) { m_result = errno; } free(zero); } else { m_result = ENOMEM; } } #endif if (file.IsOpened()) { file.Close(); } } void CAllocateFileTask::OnExit() { // Notify the app that the preallocation has finished for this file. CAllocFinishedEvent evt(m_file, m_pause, m_result); wxPostEvent(wxTheApp, evt); } //////////////////////////////////////////////////////////// // CHashingEvent DEFINE_LOCAL_EVENT_TYPE(MULE_EVT_HASHING) DEFINE_LOCAL_EVENT_TYPE(MULE_EVT_AICH_HASHING) CHashingEvent::CHashingEvent(wxEventType type, CKnownFile* result, const CKnownFile* owner) : wxEvent(-1, type), m_owner(owner), m_result(result) { } wxEvent* CHashingEvent::Clone() const { return new CHashingEvent(GetEventType(), m_result, m_owner); } const CKnownFile* CHashingEvent::GetOwner() const { return m_owner; } CKnownFile* CHashingEvent::GetResult() const { return m_result; } //////////////////////////////////////////////////////////// // CCompletionEvent DEFINE_LOCAL_EVENT_TYPE(MULE_EVT_FILE_COMPLETED) CCompletionEvent::CCompletionEvent(bool errorOccured, const CPartFile* owner, const CPath& fullPath) : wxEvent(-1, MULE_EVT_FILE_COMPLETED), m_fullPath(fullPath), m_owner(owner), m_error(errorOccured) { } wxEvent* CCompletionEvent::Clone() const { return new CCompletionEvent(m_error, m_owner, m_fullPath); } bool CCompletionEvent::ErrorOccured() const { return m_error; } const CPartFile* CCompletionEvent::GetOwner() const { return m_owner; } const CPath& CCompletionEvent::GetFullPath() const { return m_fullPath; } //////////////////////////////////////////////////////////// // CAllocFinishedEvent DEFINE_LOCAL_EVENT_TYPE(MULE_EVT_ALLOC_FINISHED) wxEvent *CAllocFinishedEvent::Clone() const { return new CAllocFinishedEvent(m_file, m_pause, m_result); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/MagnetURI.h0000644000175000017500000000425512050266603020271 0ustar l3onl3on// -*- C++ -*- // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2007-2011 Dévai Tamás ( gonosztopi@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef MAGNETURI_H #define MAGNETURI_H #ifdef USE_STD_STRING # include # define STRING std::string #else # include # define STRING wxString #endif #include // Needed for std::list #include // Needed for std::pair class CMagnetURI { public: typedef std::list Value_List; CMagnetURI() {} CMagnetURI(const STRING& uri); void AddField(const STRING& name, const STRING& value) { m_fields.push_back(Field_Type(name, value)); } Value_List GetField(const STRING& name) const; void Clear() { m_fields.clear(); } STRING GetLink() const; operator STRING() const { return GetLink(); } protected: typedef std::pair Field_Type; typedef std::list List_Type; List_Type m_fields; }; class CMagnetED2KConverter : private CMagnetURI { public: CMagnetED2KConverter(const STRING& uri) : CMagnetURI(uri) {} bool CanConvertToED2K() const; STRING GetED2KLink() const; operator STRING() const { return GetED2KLink(); } }; #endif /* MAGNETURI_H */ amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/SafeFile.cpp0000644000175000017500000003640712050266603020513 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "SafeFile.h" // Interface declarations. #include "MD4Hash.h" // Needed for CMD4Hash #include "kademlia/utils/UInt128.h" // Needed for CUInt128 #include "ScopedPtr.h" // Needed for CScopedPtr and CScopedArray #include "Logger.h" #include // Needed for CFormat #if defined(__SUNPRO_CC) #define __FUNCTION__ __FILE__+__LINE__ #endif #define CHECK_BOM(size, x) ((size >= 3) && (x[0] == (char)0xEF) && (x[1] == (char)0xBB) && (x[2] == (char)0xBF)) const char BOMHeader[3] = { '\xEF', '\xBB', '\xBF'}; CSafeIOException::CSafeIOException(const wxString& type, const wxString& desc) : CMuleException(wxT("SafeIO::") + type, desc) {} CEOFException::CEOFException(const wxString& desc) : CSafeIOException(wxT("EOF"), desc) {} CIOFailureException::CIOFailureException(const wxString& desc) : CSafeIOException(wxT("IOFailure"), desc) {} CIOFailureException::CIOFailureException(const wxString& type, const wxString& desc) : CSafeIOException(wxT("IOFailure::") + type, desc) {} /////////////////////////////////////////////////////////////////////////////// // CFileDataIO CFileDataIO::~CFileDataIO() { } bool CFileDataIO::Eof() const { return GetPosition() >= GetLength(); } void CFileDataIO::Read(void *buffer, size_t count) const { MULE_VALIDATE_PARAMS(buffer, wxT("Attempting to write to NULL buffer.")); // Check that we read everything we wanted. if (doRead(buffer, count) == (signed)count) { return; } // To reduce potential system calls, we only do EOF checks when reads fail. if (Eof()) { throw CEOFException(wxT("Attempt to read past end of file.")); } else { throw CIOFailureException(wxT("Read error, failed to read from file.")); } } void CFileDataIO::Write(const void* buffer, size_t count) { MULE_VALIDATE_PARAMS(buffer, wxT("Attempting to read from NULL buffer.")); if (doWrite(buffer, count) != (signed)count) { throw CIOFailureException(wxT("Write error, failed to write to file.")); } } uint64 CFileDataIO::Seek(sint64 offset, wxSeekMode from) const { sint64 newpos = 0; switch (from) { case wxFromStart: newpos = offset; break; case wxFromCurrent: newpos = GetPosition() + offset; break; case wxFromEnd: newpos = GetLength() + offset; break; default: MULE_VALIDATE_PARAMS(false, wxT("Invalid seek-mode specified.")); } MULE_VALIDATE_PARAMS(newpos >= 0, wxT("Position after seeking would be less than zero!")); sint64 result = doSeek(newpos); MULE_VALIDATE_STATE(result >= 0, wxT("Seeking resulted in invalid offset.")); MULE_VALIDATE_STATE(result == newpos, wxT("Target position and actual position disagree.")); return result; } uint8 CFileDataIO::ReadUInt8() const { uint8 value = 0; Read(&value, sizeof(uint8)); return value; } uint16 CFileDataIO::ReadUInt16() const { uint16 value = 0; Read(&value, sizeof(uint16)); return ENDIAN_SWAP_16(value); } uint32 CFileDataIO::ReadUInt32() const { uint32 value = 0; Read(&value, sizeof(uint32)); return ENDIAN_SWAP_32(value); } uint64 CFileDataIO::ReadUInt64() const { uint64 value = 0; Read(&value, sizeof(uint64)); return ENDIAN_SWAP_64(value); } // UInt128 values are stored a little weird way... // Four little-endian 32-bit numbers, stored in // big-endian order CUInt128 CFileDataIO::ReadUInt128() const { CUInt128 value; for (int i = 0; i < 4; i++) { // Four 32bits chunks value.Set32BitChunk(i, ReadUInt32()); } return value; } CMD4Hash CFileDataIO::ReadHash() const { CMD4Hash value; Read(value.GetHash(), MD4HASH_LENGTH); return value; } // ADUNANZA BEGIN #include void myswapfloat(float& f) { unsigned char tmp[4]; unsigned char* p = (unsigned char*) &f; tmp[0] = p[3]; tmp[1] = p[2]; tmp[2] = p[1]; tmp[3] = p[0]; memcpy(&f, tmp, 4); } // ADUNANZA END float CFileDataIO::ReadFloat() const { float retVal; Read(&retVal, sizeof(float)); // ADUNANZA BEGIN // I tag float viaggiano come LITTLE_ENDIAN #if (wxBYTE_ORDER == wxBIG_ENDIAN) myswapfloat(retVal); #endif if (retVal > 0.0 && retVal < 0.1) { // std::clog << "OCCHIO: probabile valore con endianess sballata " << retVal << " 0x" << std::hex << std::noshowbase; // unsigned char* p = (unsigned char*) &retVal; // for (unsigned int i = 0; i < sizeof(float); p++, i++) // { // if (*p) // std::clog << (unsigned short) (*p); // else // std::clog << "00"; // } // std::clog << std::dec << " provo a rigirarlo" << std::endl; myswapfloat(retVal); // std::clog << "Valore swap = " << retVal << std::endl; } // ADUNANZA END return retVal; } unsigned char* CFileDataIO::ReadBsob(uint8* puSize) const { MULE_VALIDATE_PARAMS(puSize, wxT("NULL pointer argument in ReadBsob")); *puSize = ReadUInt8(); CScopedArray bsob(*puSize); Read(bsob.get(), *puSize); return bsob.release(); } wxString CFileDataIO::ReadString(bool bOptUTF8, uint8 SizeLen, bool SafeRead) const { uint32 readLen; switch (SizeLen) { case sizeof(uint16): readLen = ReadUInt16(); break; case sizeof(uint32): readLen = ReadUInt32(); break; default: MULE_VALIDATE_PARAMS(false, wxT("Invalid SizeLen value in ReadString")); } if (SafeRead) { readLen = std::min(readLen, GetLength() - GetPosition()); } return ReadOnlyString(bOptUTF8, readLen); } wxString CFileDataIO::ReadOnlyString(bool bOptUTF8, uint16 raw_len) const { // We only need to set the the NULL terminator, since we know that // reads will either succeed or throw an exception, in which case // we wont be returning anything std::vector val_array(raw_len + 1); val_array[raw_len] = 0; char* val = &(val_array[0]); Read(val, raw_len); wxString str; if (CHECK_BOM(raw_len, val)) { // This is a UTF8 string with a BOM header, skip header. str = UTF82unicode(val + 3); } else if (bOptUTF8) { str = UTF82unicode(val); if (str.IsEmpty()) { // Fallback to Latin-1 str = wxString(val, wxConvISO8859_1, raw_len); } } else { // Raw strings are written as Latin-1 (see CFileDataIO::WriteStringCore) str = wxString(val, wxConvISO8859_1, raw_len); } return str; } void CFileDataIO::WriteUInt8(uint8 value) { Write(&value, sizeof(uint8)); } void CFileDataIO::WriteUInt16(uint16 value) { ENDIAN_SWAP_I_16(value); Write(&value, sizeof(uint16)); } void CFileDataIO::WriteUInt32(uint32 value) { ENDIAN_SWAP_I_32(value); Write(&value, sizeof(uint32)); } void CFileDataIO::WriteUInt64(uint64 value) { ENDIAN_SWAP_I_64(value); Write(&value, sizeof(uint64)); } // UInt128 values are stored a little weird way... // Four little-endian 32-bit numbers, stored in // big-endian order void CFileDataIO::WriteUInt128(const Kademlia::CUInt128& value) { for (int i = 0; i < 4; i++) { // Four 32bits chunks WriteUInt32(value.Get32BitChunk(i)); } } void CFileDataIO::WriteHash(const CMD4Hash& value) { Write(value.GetHash(), MD4HASH_LENGTH); } void CFileDataIO::WriteFloat(float value) { // ADUNANZA BEGIN // I tag float viaggiano come LITTLE_ENDIAN (si' lo so, e' una scemata!) #if 0 Write(&value, sizeof(float)); #else # if (wxBYTE_ORDER == wxBIG_ENDIAN) { // std::clog << "E io SWAP in write" << std::endl; float retVal = value; myswapfloat(retVal); Write(&retVal, 4); } # else Write(&value, sizeof(float)); # endif #endif // ADUNANZA END } void CFileDataIO::WriteBsob(const unsigned char* value, uint8 size) { WriteUInt8(size); Write(value, size); } void CFileDataIO::WriteString(const wxString& str, EUtf8Str eEncode, uint8 SizeLen) { switch (eEncode) { case utf8strRaw: case utf8strOptBOM: { Unicode2CharBuf s(unicode2UTF8(str)); if (s) { WriteStringCore(s, eEncode, SizeLen); break; } } default: { // Non UTF-8 strings are saved as Latin-1 wxCharBuffer s1 = wxConvISO8859_1.cWC2MB(str); WriteStringCore(s1, utf8strNone, SizeLen); } } } void CFileDataIO::WriteStringCore(const char *s, EUtf8Str eEncode, uint8 SizeLen) { uint32 sLength = s ? strlen(s) : 0; uint32 real_length = 0; if (eEncode == utf8strOptBOM) { real_length = sLength + 3; // For BOM header. } else { real_length = sLength; } switch (SizeLen) { case 0: // Don't write size. break; case sizeof(uint16): // We must not allow too long strings to be written, // as this would allow for a buggy clients to "poison" // us, by sending ISO8859-1 strings that expand to a // greater than 16b length when converted as UTF-8. if (real_length > 0xFFFF) { wxFAIL_MSG(wxT("String is too long to be saved")); real_length = std::min(real_length, 0xFFFF); if (eEncode == utf8strOptBOM) { sLength = real_length - 3; } else { sLength = real_length; } } WriteUInt16(real_length); break; case sizeof(uint32): WriteUInt32(real_length); break; default: MULE_VALIDATE_PARAMS(false, wxT("Invalid length for string-length field.")); } // The BOM header must be written even if the string is empty. if (eEncode == utf8strOptBOM) { Write(BOMHeader, 3); } // Only attempt to write non-NULL strings. if (sLength) { // No NULL terminator is written since we explicitly specify the length Write(s, sLength); } } CTag *CFileDataIO::ReadTag(bool bOptACP) const { CTag *retVal = NULL; wxString name; byte type = 0; try { type = ReadUInt8(); name = ReadString(false); switch (type) { // NOTE: This tag data type is accepted and stored only to give us the possibility to upgrade // the net in some months. // // And still.. it doesnt't work this way without breaking backward compatibility. To properly // do this without messing up the network the following would have to be done: // - those tag types have to be ignored by any client, otherwise those tags would also be sent (and // that's really the problem) // // - ignoring means, each client has to read and right throw away those tags, so those tags get // get never stored in any tag list which might be sent by that client to some other client. // // - all calling functions have to be changed to deal with the 'nr. of tags' attribute (which was // already parsed) correctly.. just ignoring those tags here is not enough, any taglists have to // be built with the knowledge that the 'nr. of tags' attribute may get decreased during the tag // reading.. // // If those new tags would just be stored and sent to remote clients, any malicious or just bugged // client could let send a lot of nodes "corrupted" packets... // case TAGTYPE_HASH16: { retVal = new CTagHash(name, ReadHash()); break; } case TAGTYPE_STRING: retVal = new CTagString(name, ReadString(bOptACP)); break; case TAGTYPE_UINT64: retVal = new CTagInt64(name, ReadUInt64()); break; case TAGTYPE_UINT32: retVal = new CTagInt32(name, ReadUInt32()); break; case TAGTYPE_UINT16: retVal = new CTagInt16(name, ReadUInt16()); break; case TAGTYPE_UINT8: retVal = new CTagInt8(name, ReadUInt8()); break; case TAGTYPE_FLOAT32: retVal = new CTagFloat(name, ReadFloat()); break; // NOTE: This tag data type is accepted and stored only to give us the possibility to upgrade // the net in some months. // // And still.. it doesnt't work this way without breaking backward compatibility case TAGTYPE_BSOB: { uint8 size = 0; CScopedArray value(ReadBsob(&size)); retVal = new CTagBsob(name, value.get(), size); break; } default: throw wxString(CFormat(wxT("Invalid Kad tag type; type=0x%02x name=%s\n")) % type % name); } } catch(const CMuleException& e) { AddLogLineN(e.what()); delete retVal; throw; } catch(const wxString& e) { AddLogLineN(e); throw; } return retVal; } void CFileDataIO::ReadTagPtrList(TagPtrList* taglist, bool bOptACP) const { MULE_VALIDATE_PARAMS(taglist, wxT("NULL pointer argument in ReadTagPtrList")); uint32 count = ReadUInt8(); for (uint32 i = 0; i < count; i++) { CTag* tag = ReadTag(bOptACP); taglist->push_back(tag); } } void CFileDataIO::WriteTag(const CTag& tag) { try { WriteUInt8(tag.GetType()); if (!tag.GetName().IsEmpty()) { WriteString(tag.GetName(),utf8strNone); } else { WriteUInt16(1); WriteUInt8(tag.GetNameID()); } switch (tag.GetType()) { case TAGTYPE_HASH16: // Do NOT use this to transfer any tags for at least half a year!! WriteHash(CMD4Hash(tag.GetHash())); break; case TAGTYPE_STRING: WriteString(tag.GetStr(), utf8strRaw); // Always UTF8 break; case TAGTYPE_UINT64: WriteUInt64(tag.GetInt()); break; case TAGTYPE_UINT32: WriteUInt32(tag.GetInt()); break; case TAGTYPE_FLOAT32: WriteFloat(tag.GetFloat()); break; case TAGTYPE_BSOB: WriteBsob(tag.GetBsob(), tag.GetBsobSize()); break; case TAGTYPE_UINT16: WriteUInt16(tag.GetInt()); break; case TAGTYPE_UINT8: WriteUInt8(tag.GetInt()); break; case TAGTYPE_BLOB: // NOTE: This will break backward compatibility with met files for eMule versions prior to 0.44a // and any aMule prior to SVN 26/02/2005 WriteUInt32(tag.GetBlobSize()); Write(tag.GetBlob(), tag.GetBlobSize()); break; default: //TODO: Support more tag types // With the if above, this should NEVER happen. AddLogLineNS(CFormat(wxT("CFileDataIO::WriteTag: Unknown tag: type=0x%02X")) % tag.GetType()); wxFAIL; break; } } catch (...) { AddLogLineNS(wxT("Exception in CDataIO:WriteTag")); throw; } } void CFileDataIO::WriteTagPtrList(const TagPtrList& tagList) { uint32 count = tagList.size(); wxASSERT( count <= 0xFF ); WriteUInt8(count); TagPtrList::const_iterator it; // ADUNANZA BEGIN #if 0 for (it = tagList.begin(); it != tagList.end(); it++) { WriteTag(**it); } #else for (it = tagList.begin(); it != tagList.end(); ++it) { if (!(*it)) continue; WriteTag(**it); } #endif // ADUNANZA BEGIN } uint64 CFileDataIO::GetIntTagValue() const { uint8 type = ReadUInt8(); ReadString(false); switch (type) { case TAGTYPE_UINT64: return ReadUInt64(); break; case TAGTYPE_UINT32: return ReadUInt32(); break; case TAGTYPE_UINT16: return ReadUInt16(); break; case TAGTYPE_UINT8: return ReadUInt8(); break; default: throw wxString(wxT("Wrong tag type reading int tag")); } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/amuleDlg.h0000644000175000017500000001535712050266603020235 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef AMULEDLG_H #define AMULEDLG_H #include #include #include // Needed for wxFrame #include #include #include #include #include "Types.h" // Needed for uint32 class wxTimerEvent; class wxTextCtrl; class CIP2Country; class CTransferWnd; class CServerWnd; class CSharedFilesWnd; class CSearchDlg; class CChatWnd; class CStatisticsDlg; class CKadDlg; class PrefsUnifiedDlg; class CMuleTrayIcon; // ADUNANZA BEGIN // Mr Hyde per Clarensio class CUpDownClient; // ADUNANZA END struct PageType { wxWindow* page; wxString name; }; #define MP_RESTORE 4001 #define MP_CONNECT 4002 #define MP_DISCONNECT 4003 #define MP_EXIT 4004 #define DEFAULT_SIZE_X 800 #define DEFAULT_SIZE_Y 600 enum ClientSkinEnum { Client_Green_Smiley = 0, Client_Red_Smiley, Client_Yellow_Smiley, Client_Grey_Smiley, Client_White_Smiley, Client_ExtendedProtocol_Smiley, Client_SecIdent_Smiley, Client_BadGuy_Smiley, Client_CreditsGrey_Smiley, Client_CreditsYellow_Smiley, Client_Upload_Smiley, Client_Friend_Smiley, Client_eMule_Smiley, Client_mlDonkey_Smiley, Client_eDonkeyHybrid_Smiley, Client_aMule_Smiley, Client_lphant_Smiley, Client_Shareaza_Smiley, Client_xMule_Smiley, Client_Unknown, Client_InvalidRating_Smiley, Client_PoorRating_Smiley, Client_FairRating_Smiley, Client_GoodRating_Smiley, Client_ExcellentRating_Smiley, Client_CommentOnly_Smiley, Client_Encryption_Smiley, // Add items here. // ADUNANZA BEGIN Client_Fiber_Flag, // Aggiunte per Clarensio Client_aMule_AdunanzA_Smiley, Client_eMule_AdunanzA_Smiley, Client_Fastweb_Smiley, // ADUNANZA END CLIENT_SKIN_SIZE }; // CamuleDlg Dialogfeld class CamuleDlg : public wxFrame { public: CamuleDlg( wxWindow *pParent = NULL, const wxString &title = wxEmptyString, wxPoint where = wxDefaultPosition, wxSize dlg_size = wxSize(DEFAULT_SIZE_X,DEFAULT_SIZE_Y)); ~CamuleDlg(); void AddLogLine(const wxString& line); void AddServerMessageLine(wxString& message); void ResetLog(int id); void ShowUserCount(const wxString& info = wxEmptyString); void ShowConnectionState(bool skinChanged = false); void ShowTransferRate(); bool StatisticsWindowActive() { return (m_activewnd == (wxWindow*)m_statisticswnd); } /* Returns the active dialog. Needed to check what to redraw. */ enum DialogType { DT_TRANSFER_WND, DT_NETWORKS_WND, DT_SEARCH_WND, DT_SHARED_WND, DT_CHAT_WND, DT_STATS_WND, DT_KAD_WND // this one is still unused }; DialogType GetActiveDialog() { return m_nActiveDialog; } void SetActiveDialog(DialogType type, wxWindow* dlg); /** * Helper function for deciding if a certian dlg is visible. * * @return True if the dialog is visible to the user, false otherwise. */ bool IsDialogVisible( DialogType dlg ) { return m_nActiveDialog == dlg && m_is_safe_state /* && !IsIconized() */; } void ShowED2KLinksHandler( bool show ); void DlgShutDown(); void OnClose(wxCloseEvent& evt); void OnBnConnect(wxCommandEvent& evt); void DoIconize(bool iconize); bool SafeState() { return m_is_safe_state; } void LaunchUrl(const wxString &url); //! These are the currently known web-search providers enum WebSearch { WS_FILEHASH }; // websearch function wxString GenWebSearchUrl( const wxString &filename, WebSearch provider ); void CreateSystray(); void RemoveSystray(); void StartGuiTimer() { gui_timer->Start(100); } void StopGuiTimer() { gui_timer->Stop(); } /** * This function ensures that _all_ list widgets are properly sorted. */ void InitSort(); void SetMessageBlink(bool state) { m_BlinkMessages = state; } void Create_Toolbar(bool orientation); void DoNetworkRearrange(); CIP2Country* m_IP2Country; void IP2CountryDownloadFinished(uint32 result); void EnableIP2Country(); wxWindow* m_activewnd; CTransferWnd* m_transferwnd; CServerWnd* m_serverwnd; CSharedFilesWnd* m_sharedfileswnd; CSearchDlg* m_searchwnd; CChatWnd* m_chatwnd; CStatisticsDlg* m_statisticswnd; CKadDlg* m_kademliawnd; //! Pointer to the current preference dialog, if any. PrefsUnifiedDlg* m_prefsDialog; int m_srv_split_pos; wxImageList m_imagelist; wxImageList m_tblist; protected: void OnToolBarButton(wxCommandEvent& ev); void OnAboutButton(wxCommandEvent& ev); // ADUNANZA BEGIN void OnIrcButton(wxCommandEvent& ev); // ADUNANZA END void OnPrefButton(wxCommandEvent& ev); void OnImportButton(wxCommandEvent& ev); void OnMinimize(wxIconizeEvent& evt); void OnBnClickedFast(wxCommandEvent& evt); void OnGUITimer(wxTimerEvent& evt); void OnMainGUISizeChange(wxSizeEvent& evt); void OnExit(wxCommandEvent& evt); private: //! Specifies if the prefs-dialog was shown before minimizing. bool m_prefsVisible; wxToolBar *m_wndToolbar; wxTimer *gui_timer; CMuleTrayIcon *m_wndTaskbarNotifier; DialogType m_nActiveDialog; bool m_is_safe_state; bool m_BlinkMessages; int m_CurrentBlinkBitmap; uint32 m_last_iconizing; wxFileName m_skinFileName; std::vector m_clientSkinNames; bool m_GeoIPavailable; WX_DECLARE_STRING_HASH_MAP(wxZipEntry*, ZipCatalog); ZipCatalog::iterator it; wxZipEntry *entry; ZipCatalog cat; PageType m_logpages[4]; PageType m_networkpages[2]; bool LoadGUIPrefs(bool override_pos, bool override_size); bool SaveGUIPrefs(); void UpdateTrayIcon(int percent); void Apply_Clients_Skin(); void Apply_Toolbar_Skin(wxToolBar *wndToolbar); bool Check_and_Init_Skin(); void Add_Skin_Icon(const wxString &iconName, const wxBitmap &stdIcon, bool useSkins); void ToogleED2KLinksHandler(); void SetMessagesTool(); void OnKeyPressed(wxKeyEvent& evt); DECLARE_EVENT_TABLE() }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/EditServerListDlg.h0000644000175000017500000000311212050266603022024 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Drager // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef EDITSERVERLISTDLG_H #define EDITSERVERLISTDLG_H class wxTextCtrl; class EditServerListDlg : public wxDialog { public: EditServerListDlg(wxWindow *parent, const wxString& caption, const wxString& message, const wxString& filename); virtual ~EditServerListDlg(); void OnOK(wxCommandEvent& event); protected: wxTextCtrl* m_textctrl; wxString m_file; private: DECLARE_EVENT_TABLE() }; #endif // EDITSERVERLISTDLG_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/amule-remote-gui.h0000644000175000017500000005345112050266603021656 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2005-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef AMULE_REMOTE_GUI_H #define AMULE_REMOTE_GUI_H #include // Needed for CRemoteConnect #include "Statistics.h" #include "Preferences.h" #include "Statistics.h" #include "RLE.h" #include "SearchList.h" // Needed for CSearchFile class CED2KFileLink; class CServer; class CKnownFile; class CSearchFile; class CPartFile; class CClientRef; class CStatistics; class CPath; class wxEvtHandler; class wxTimer; class wxTimerEvent; #include class CEConnectDlg : public wxDialog { wxString host; int port; wxString pwd_hash; wxString login, passwd; bool m_save_user_pass; DECLARE_EVENT_TABLE() public: CEConnectDlg(); void OnOK(wxCommandEvent& event); wxString Host() { return host; } int Port() { return port; } wxString Login() { return login; } wxString PassHash(); bool SaveUserPass() { return m_save_user_pass; } }; DECLARE_LOCAL_EVENT_TYPE(wxEVT_EC_INIT_DONE, wxEVT_USER_FIRST + 1001) class wxECInitDoneEvent : public wxEvent { public: wxECInitDoneEvent() : wxEvent(-1, wxEVT_EC_INIT_DONE) { } wxEvent *Clone(void) const { return new wxECInitDoneEvent(*this); } }; class CPreferencesRem : public CPreferences, public CECPacketHandlerBase { CRemoteConnect *m_conn; uint32 m_exchange_send_selected_prefs; uint32 m_exchange_recv_selected_prefs; virtual void HandlePacket(const CECPacket *packet); public: CPreferencesRem(CRemoteConnect *); bool CreateCategory(Category_Struct *& category, const wxString& name, const CPath& path, const wxString& comment, uint32 color, uint8 prio); bool UpdateCategory(uint8 cat, const wxString& name, const CPath& path, const wxString& comment, uint32 color, uint8 prio); void RemoveCat(uint8 cat); bool LoadRemote(); void SendToRemote(); }; // // T - type if item in container // I - type of id of item // G - type of tag used to create/update items // template class CRemoteContainer : public CECPacketHandlerBase { protected: enum { IDLE, // no request in the air STATUS_REQ_SENT, // sent request for item status FULL_REQ_SENT // sent request for full info } m_state; CRemoteConnect *m_conn; std::list m_items; std::map m_items_hash; // .size() is O(N) operation in stl int m_item_count; // use incremental tags algorithm bool m_inc_tags; // command that will be used in full request int m_full_req_cmd, m_full_req_tag; virtual void HandlePacket(const CECPacket *packet) { switch(this->m_state) { case IDLE: wxFAIL; // not expecting anything // ADUNANZA BEGIN // backport break; // ADUNANZA END case STATUS_REQ_SENT: // if derived class choose not to proceed, return - but with good status this->m_state = IDLE; if ( this->Phase1Done(packet) ) { if (this->m_inc_tags) { // Incremental tags: new items always carry full info. ProcessUpdate(packet, NULL, m_full_req_tag); } else { // Non-incremental tags: we might get partial info on new items. // Collect all this items in a tag, and then request full info about them. CECPacket req_full(this->m_full_req_cmd); ProcessUpdate(packet, &req_full, m_full_req_tag); // Phase 3: request full info about files we don't have yet if ( req_full.HasChildTags() ) { m_conn->SendRequest(this, &req_full); this->m_state = FULL_REQ_SENT; } } } break; case FULL_REQ_SENT: ProcessFull(packet); m_state = IDLE; break; } } public: CRemoteContainer(CRemoteConnect *conn, bool inc_tags) { m_state = IDLE; m_conn = conn; m_item_count = 0; m_inc_tags = inc_tags; // ADUNANZA BEGIN // backport m_full_req_cmd = 0; m_full_req_tag = 0; // ADUNANZA END } virtual ~CRemoteContainer() { } typedef typename std::list::iterator iterator; iterator begin() { return m_items.begin(); } iterator end() { return m_items.end(); } uint32 GetCount() { return m_item_count; } void AddItem(T *item) { m_items.push_back(item); m_items_hash[GetItemID(item)] = item; m_item_count++; } T *GetByID(I id) { // avoid creating nodes return m_items_hash.count(id) ? m_items_hash[id] : NULL; } void Flush() { m_items.clear(); m_items_hash.clear(); m_item_count = 0; } // // Flush & reload // /* We usually don't keep outdated code as comments, but this blocking implementation shows the overall procedure well. It had to be scattered for the event driven implementation. bool FullReload(int cmd) { CECPacket req(cmd); CScopedPtr reply(this->m_conn->SendRecvPacket(&req)); if ( !reply.get() ) { return false; } for(typename std::list::iterator j = this->m_items.begin(); j != this->m_items.end(); j++) { this->DeleteItem(*j); } Flush(); ProcessFull(reply.get()); return true; } */ void FullReload(int cmd) { if ( this->m_state != IDLE ) { return; } // ADUNANZA BEGIN // backport #if 0 for(typename std::list::iterator j = this->m_items.begin(); j != this->m_items.end(); j++) { #else for(typename std::list::iterator j = this->m_items.begin(); j != this->m_items.end(); ++j) { #endif // ADUNANZA END this->DeleteItem(*j); } Flush(); CECPacket req(cmd); this->m_conn->SendRequest(this, &req); this->m_state = FULL_REQ_SENT; this->m_full_req_cmd = cmd; } // // Following are like basicly same code as in webserver. Eventually it must // be same class // void DoRequery(int cmd, int tag) { if ( this->m_state != IDLE ) { return; } CECPacket req_sts(cmd, m_inc_tags ? EC_DETAIL_INC_UPDATE : EC_DETAIL_UPDATE); this->m_conn->SendRequest(this, &req_sts); this->m_state = STATUS_REQ_SENT; this->m_full_req_cmd = cmd; this->m_full_req_tag = tag; } /* We usually don't keep outdated code as comments, but this blocking implementation shows the overall procedure well. It had to be scattered for the event driven implementation. bool DoRequery(int cmd, int tag) { CECPacket req_sts(cmd, m_inc_tags ? EC_DETAIL_INC_UPDATE : EC_DETAIL_UPDATE); // // Phase 1: request status CScopedPtr reply(this->m_conn->SendRecvPacket(&req_sts)); if ( !reply.get() ) { return false; } if ( !this->Phase1Done(reply.get()) ) { // if derived class choose not to proceed, return - but with good status return true; } // // Phase 2: update status, mark new files for subsequent query CECPacket req_full(cmd); ProcessUpdate(reply.get(), &req_full, tag); reply.reset(); if ( !m_inc_tags ) { // Phase 3: request full info about files we don't have yet if ( req_full.GetTagCount() ) { reply.reset(this->m_conn->SendRecvPacket(&req_full)); if ( !reply.get() ) { return false; } ProcessFull(reply.get()); } } return true; } */ void ProcessFull(const CECPacket *reply) { // ADUNANZA BEGIN // backport #if 0 for (CECPacket::const_iterator it = reply->begin(); it != reply->end(); it++) { G *tag = (G *) & *it; #else for (CECPacket::const_iterator it = reply->begin(); it != reply->end(); ++it) { const G *tag = static_cast(&*it); #endif // ADUNANZA END // initialize item data from EC tag AddItem(CreateItem(tag)); } } void RemoveItem(iterator & it) { I item_id = GetItemID(*it); // reduce count m_item_count--; // remove from map m_items_hash.erase(item_id); // item may contain data that need to be freed externally, before // dtor is called and memory freed DeleteItem(*it); m_items.erase(it); } virtual void ProcessUpdate(const CECTag *reply, CECPacket *full_req, int req_type) { std::set core_files; // ADUNANZA BEGIN // backport #if 0 for (CECPacket::const_iterator it = reply->begin(); it != reply->end(); it++) { G *tag = (G *) & *it; #else for (CECPacket::const_iterator it = reply->begin(); it != reply->end(); ++it) { const G *tag = static_cast(&*it); #endif // ADUNANZA END if ( tag->GetTagName() != req_type ) { continue; } core_files.insert(tag->ID()); if ( m_items_hash.count(tag->ID()) ) { // Item already known: update it T *item = m_items_hash[tag->ID()]; ProcessItemUpdate(tag, item); } else { // New item if (full_req) { // Non-incremental mode: we have only partial info // so we need to request full info before we can use the item full_req->AddTag(CECTag(req_type, tag->ID())); } else { // Incremental mode: new items always carry full info, // so we can add it right away AddItem(CreateItem(tag)); } } } for(iterator it = begin(); it != end();) { iterator it2 = it++; if ( core_files.count(GetItemID(*it2)) == 0 ) { RemoveItem(it2); } } } // ADUNANZA BEGIN // backport #if 0 virtual T *CreateItem(G *) #else virtual T *CreateItem(const G *) #endif // ADUNANZA END { return 0; } virtual void DeleteItem(T *) { } virtual I GetItemID(T *) { return I(); } // ADUNANZA BEGIN // backport #if 0 virtual void ProcessItemUpdate(G *, T *) #else virtual void ProcessItemUpdate(const G *, T *) #endif // ADUNANZA END { } virtual bool Phase1Done(const CECPacket *) { return true; } }; class CServerConnectRem { CRemoteConnect *m_Conn; uint32 m_ID; CServer *m_CurrServer; public: void HandlePacket(const CECPacket *packet); CServerConnectRem(CRemoteConnect *); bool IsConnected() { return (m_ID != 0) && (m_ID != 0xffffffff); } bool IsConnecting() { return m_ID == 0xffffffff; } bool IsLowID() { return m_ID < 16777216; } uint32 GetClientID() { return m_ID; } CServer *GetCurrentServer() { return m_CurrServer; } // // Actions // void ConnectToServer(CServer* server); void ConnectToAnyServer(); void StopConnectionTry(); void Disconnect(); }; class CServerListRem : public CRemoteContainer { uint32 m_TotalUser, m_TotalFile; virtual void HandlePacket(const CECPacket *packet); public: CServerListRem(CRemoteConnect *); void GetUserFileStatus(uint32 &total_user, uint32 &total_file) { total_user = m_TotalUser; total_file = m_TotalFile; } void UpdateUserFileStatus(CServer *server); CServer* GetServerByAddress(const wxString& address, uint16 port) const; CServer* GetServerByIPTCP(uint32 nIP, uint16 nPort) const; // // Actions // void RemoveServer(CServer* server); void UpdateServerMetFromURL(wxString url); void SetStaticServer(CServer* server, bool isStatic); void SetServerPrio(CServer* server, uint32 prio); void SaveServerMet() {} // not needed here void FilterServers() {} // not needed here // // template // // ADUNANZA BEGIN // backport #if 0 CServer *CreateItem(CEC_Server_Tag *); #else CServer *CreateItem(const CEC_Server_Tag *); #endif // ADUNANZA END void DeleteItem(CServer *); uint32 GetItemID(CServer *); // ADUNANZA BEGIN // backport #if 0 void ProcessItemUpdate(CEC_Server_Tag *, CServer *); #else void ProcessItemUpdate(const CEC_Server_Tag *, CServer *); #endif // ADUNANZA END }; class CUpDownClientListRem : public CRemoteContainer { public: CUpDownClientListRem(CRemoteConnect *); void FilterQueues() {} // not needed here // // template // // ADUNANZA BEGIN // backport #if 0 CClientRef *CreateItem(CEC_UpDownClient_Tag *); #else CClientRef *CreateItem(const CEC_UpDownClient_Tag *); #endif // ADUNANZA END void DeleteItem(CClientRef *); uint32 GetItemID(CClientRef *); // ADUNANZA BEGIN // backport #if 0 void ProcessItemUpdate(CEC_UpDownClient_Tag *, CClientRef *); #else void ProcessItemUpdate(const CEC_UpDownClient_Tag *, CClientRef *); #endif // ADUNANZA END }; class CDownQueueRem : public std::map { CRemoteConnect *m_conn; public: CDownQueueRem(CRemoteConnect * conn) { m_conn = conn; } CPartFile* GetFileByID(uint32 id); // // User actions // void Prio(CPartFile *file, uint8 prio); void AutoPrio(CPartFile *file, bool flag); void Category(CPartFile *file, uint8 cat); void SendFileCommand(CPartFile *file, ec_tagname_t cmd); // // Actions // void StopUDPRequests() {} void AddFileLinkToDownload(CED2KFileLink*, uint8); bool AddLink(const wxString &link, uint8 category = 0); void UnsetCompletedFilesExist(); void ResetCatParts(int cat); void AddSearchToDownload(CSearchFile* toadd, uint8 category); void ClearCompleted(const ListOfUInts32 & ecids); }; class CSharedFilesRem : public std::map { CRemoteConnect *m_conn; public: CSharedFilesRem(CRemoteConnect * conn); CKnownFile *GetFileByID(uint32 id); void SetFilePrio(CKnownFile *file, uint8 prio); // // Actions // void Reload(bool sendtoserver = true, bool firstload = false); bool RenameFile(CKnownFile* file, const CPath& newName); void SetFileCommentRating(CKnownFile* file, const wxString& newComment, int8 newRating); void CopyFileList(std::vector& out_list) const; }; class CKnownFilesRem : public CRemoteContainer { // ADUNANZA BEGIN // backport #if 0 CKnownFile * CreateKnownFile(CEC_SharedFile_Tag *tag, CKnownFile *file = NULL); CPartFile * CreatePartFile(CEC_PartFile_Tag *tag); #else CKnownFile * CreateKnownFile(const CEC_SharedFile_Tag *tag, CKnownFile *file = NULL); CPartFile * CreatePartFile(const CEC_PartFile_Tag *tag); #endif // ADUNANZA END bool m_initialUpdate; // improved handling for first data transfer public: CKnownFilesRem(CRemoteConnect * conn); CKnownFile *FindKnownFileByID(uint32 id) { return GetByID(id); } uint16 requested; uint32 transferred; uint16 accepted; // // template // // ADUNANZA BEGIN // backport #if 0 CKnownFile *CreateItem(CEC_SharedFile_Tag *) { wxFAIL; return NULL; } // unused, required by template #else CKnownFile *CreateItem(const CEC_SharedFile_Tag *) { wxFAIL; return NULL; } // unused, required by template #endif // ADUNANZA END void DeleteItem(CKnownFile *); uint32 GetItemID(CKnownFile *); // ADUNANZA BEGIN // backport #if 0 void ProcessItemUpdate(CEC_SharedFile_Tag *, CKnownFile *); #else void ProcessItemUpdate(const CEC_SharedFile_Tag *, CKnownFile *); #endif // ADUNANZA END bool Phase1Done(const CECPacket *) { return true; } void ProcessUpdate(const CECTag *reply, CECPacket *full_req, int req_type); // ADUNANZA BEGIN // backport #if 0 void ProcessItemUpdatePartfile(CEC_PartFile_Tag *, CPartFile *); #else void ProcessItemUpdatePartfile(const CEC_PartFile_Tag *, CPartFile *); #endif // ADUNANZA END }; class CIPFilterRem { CRemoteConnect *m_conn; public: CIPFilterRem(CRemoteConnect *conn); // // Actions // void Reload(); void Update(wxString strURL = wxEmptyString); bool IsReady() const { return true; } }; class CSearchListRem : public CRemoteContainer { virtual void HandlePacket(const CECPacket *); public: CSearchListRem(CRemoteConnect *); int m_curr_search; typedef std::map ResultMap; ResultMap m_results; const CSearchResultList& GetSearchResults(long nSearchID); void RemoveResults(long nSearchID); const CSearchResultList& GetSearchResults(long nSearchID) const; // // Actions // wxString StartNewSearch(uint32* nSearchID, SearchType search_type, const CSearchList::CSearchParams& params); void StopSearch(bool globalOnly = false); // // template // // ADUNANZA BEGIN // backport #if 0 CSearchFile *CreateItem(CEC_SearchFile_Tag *); #else CSearchFile *CreateItem(const CEC_SearchFile_Tag *); #endif // ADUNANZA END void DeleteItem(CSearchFile *); uint32 GetItemID(CSearchFile *); // ADUNANZA BEGIN // backport #if 0 void ProcessItemUpdate(CEC_SearchFile_Tag *, CSearchFile *); #else void ProcessItemUpdate(const CEC_SearchFile_Tag *, CSearchFile *); #endif // ADUNANZA END bool Phase1Done(const CECPacket *); }; class CFriendListRem : public CRemoteContainer { virtual void HandlePacket(const CECPacket *); public: CFriendListRem(CRemoteConnect *); void AddFriend(const CClientRef& toadd); void AddFriend(const CMD4Hash& userhash, uint32 lastUsedIP, uint32 lastUsedPort, const wxString& name); void RemoveFriend(CFriend* toremove); void RequestSharedFileList(CFriend* Friend); void RequestSharedFileList(CClientRef& client); void SetFriendSlot(CFriend* Friend, bool new_state); // // template // // ADUNANZA BEGIN // backport #if 0 CFriend *CreateItem(CEC_Friend_Tag *); #else CFriend *CreateItem(const CEC_Friend_Tag *); #endif // ADUNANZA END void DeleteItem(CFriend *); uint32 GetItemID(CFriend *); // ADUNANZA BEGIN // backport #if 0 void ProcessItemUpdate(CEC_Friend_Tag *, CFriend *); #else void ProcessItemUpdate(const CEC_Friend_Tag *, CFriend *); #endif // ADUNANZA END }; class CStatsUpdaterRem : public CECPacketHandlerBase { virtual void HandlePacket(const CECPacket *); public: CStatsUpdaterRem() {} }; class CStatTreeRem : public CECPacketHandlerBase { virtual void HandlePacket(const CECPacket *); CRemoteConnect *m_conn; public: CStatTreeRem(CRemoteConnect * conn) { m_conn = conn; } void DoRequery(); }; class CListenSocketRem { uint32 m_peak_connections; public: uint32 GetPeakConnections() { return m_peak_connections; } }; // ADUNANZA BEGIN // Mr Hyde class CAduUploadSlotsManager; // ADUNANZA END class CamuleRemoteGuiApp : public wxApp, public CamuleGuiBase, public CamuleAppCommon { wxTimer* poll_timer; virtual int InitGui(bool geometry_enable, wxString &geometry_string); bool OnInit(); int OnExit(); void OnPollTimer(wxTimerEvent& evt); void OnECConnection(wxEvent& event); void OnECInitDone(wxEvent& event); void OnNotifyEvent(CMuleGUIEvent& evt); void OnFinishedHTTPDownload(CMuleInternalEvent& event); CStatsUpdaterRem m_stats_updater; public: void Startup(); bool ShowConnectionDialog(); class CRemoteConnect *m_connect; CEConnectDlg *dialog; bool CopyTextToClipboard(wxString strText); virtual int ShowAlert(wxString msg, wxString title, int flags); void ShutDown(wxCloseEvent &evt); CPreferencesRem *glob_prefs; // // Provide access to core data thru EC CServerConnectRem *serverconnect; CServerListRem *serverlist; CDownQueueRem *downloadqueue; CSharedFilesRem *sharedfiles; CKnownFilesRem *knownfiles; CUpDownClientListRem *clientlist; CIPFilterRem *ipfilter; CSearchListRem *searchlist; CFriendListRem *friendlist; CListenSocketRem *listensocket; CStatTreeRem * stattree; CStatistics *m_statistics; // ADUNANZA BEGIN wxFileConfig* acfg; CRemoteSettings* rm; CAduUploadSlotsManager* pUploadSlotsMng; // void OnFinishedHTTPDownload(CMuleInternalEvent& evt); // ADUNANZA END bool AddServer(CServer *srv, bool fromUser = false); uint32 GetPublicIP(); wxString GetLog(bool reset = false); wxString GetServerLog(bool reset = false); void AddServerMessageLine(wxString &msg); void AddRemoteLogLine(const wxString& line); void SetOSFiles(wxString ) { /* onlinesig is created on remote side */ } bool IsConnected() const { return IsConnectedED2K() || IsConnectedKad(); } bool IsFirewalled() const; bool IsConnectedED2K() const; bool IsConnectedKad() const { return ((m_ConnState & CONNECTED_KAD_OK) || (m_ConnState & CONNECTED_KAD_FIREWALLED)); } bool IsFirewalledKad() const { return (m_ConnState & CONNECTED_KAD_FIREWALLED) != 0; } bool IsKadRunning() const { return ((m_ConnState & CONNECTED_KAD_OK) || (m_ConnState & CONNECTED_KAD_FIREWALLED) || (m_ConnState & CONNECTED_KAD_NOT)); } // Check Kad state (UDP) bool IsFirewalledKadUDP() const { return theStats::IsFirewalledKadUDP(); } bool IsKadRunningInLanMode() const { return theStats::IsKadRunningInLanMode(); } // Kad stats uint32 GetKadUsers() const { return theStats::GetKadUsers(); } uint32 GetKadFiles() const { return theStats::GetKadFiles(); } uint32 GetKadIndexedSources() const { return theStats::GetKadIndexedSources(); } uint32 GetKadIndexedKeywords() const{ return theStats::GetKadIndexedKeywords(); } uint32 GetKadIndexedNotes() const { return theStats::GetKadIndexedNotes(); } uint32 GetKadIndexedLoad() const { return theStats::GetKadIndexedLoad(); } // True IP of machine uint32 GetKadIPAdress() const { return theStats::GetKadIPAdress(); } // Buddy status uint8 GetBuddyStatus() const { return theStats::GetBuddyStatus(); } uint32 GetBuddyIP() const { return theStats::GetBuddyIP(); } uint32 GetBuddyPort() const { return theStats::GetBuddyPort(); } void StartKad(); void StopKad(); /** Bootstraps kad from the specified IP (must be in hostorder). */ void BootstrapKad(uint32 ip, uint16 port); /** Updates the nodes.dat file from the specified url. */ void UpdateNotesDat(const wxString& str); void DisconnectED2K(); bool CryptoAvailable() const; uint32 GetED2KID() const; uint32 GetID() const; void ShowUserCount(); uint8 m_ConnState; uint32 m_clientID; wxLocale m_locale; // This KnownFile collects all currently uploading clients for display in the upload list control CKnownFile * m_allUploadingKnownFile; DECLARE_EVENT_TABLE() }; DECLARE_APP(CamuleRemoteGuiApp) extern CamuleRemoteGuiApp *theApp; #endif /* AMULE_REMOTE_GUI_H */ // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ChatSelector.h0000644000175000017500000000604612050266603021056 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef CHATSELECTOR_H #define CHATSELECTOR_H #include "MuleTextCtrl.h" #include "MuleNotebook.h" #include "Types.h" // Needed for uint16 class CClientRef; class CFriend; /** * This class is used to display chat sessions. */ class CChatSession : public CMuleTextCtrl { public: CChatSession(wxWindow *parent, wxWindowID id = -1, const wxString& value = wxT(""), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr ); ~CChatSession(); uint64 m_client_id; bool m_active; /** * Appends the specified text. * * @param text The text to add. * @param style The style of the new text. * @param newline If a newline should be added to the end of the line. * * If newline is false, then no newlines will be at the end of added text, * even if the passed string ends with newlines. Multiline strings are * broken into indivudual lines and each are timestamped with the same date. */ void AddText( const wxString& text, const wxTextAttr& style, bool newline = true ); }; class CChatSelector : public CMuleNotebook { public: CChatSelector(wxWindow* parent, wxWindowID id, const wxPoint& pos, wxSize siz, long style); virtual ~CChatSelector() {}; CChatSession* StartSession(uint64 client_id, const wxString& client_name, bool show = true); void EndSession(uint64 client_id = 0); CChatSession* GetPageByClientID(uint64 client_id); int GetTabByClientID(uint64 client_id); bool ProcessMessage(uint64 sender_id, const wxString& message); bool SendMessage(const wxString& message, const wxString& client_name = wxEmptyString, uint64 to_id = 0); void ConnectionResult(bool success, const wxString& message, uint64 id); void RefreshFriend(uint64 toupdate_id, const wxString& new_name); void ShowCaptchaResult(uint64 id, bool ok); bool GetCurrentClient(CClientRef&) const; }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/Friend.h0000644000175000017500000000513012050266603017676 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef FRIEND_H #define FRIEND_H #include // Needed for CECID #include "MD4Hash.h" #include "ClientRef.h" // Needed for CClientRef class CFile; class CFileDataIO; #define FF_NAME 0x01 class CFriend : public CECID { friend class CFriendListRem; public: CFriend() { Init(); } ~CFriend() {}; CFriend(CClientRef client); CFriend( const CMD4Hash& userhash, uint32 tm_dwLastSeen, uint32 tm_dwLastUsedIP, uint32 tm_nLastUsedPort, uint32 tm_dwLastChatted, const wxString& tm_strName); CFriend(uint32 ecid) : CECID(ecid) { Init(); } void SetUserHash(const CMD4Hash& userhash) { m_UserHash = userhash;} bool HasHash() const { return !m_UserHash.IsEmpty(); } const CMD4Hash& GetUserHash() const { return m_UserHash; } void SetName(const wxString& name) { m_strName = name; } void LinkClient(CClientRef client); const CClientRef& GetLinkedClient() const { return m_LinkedClient; } void UnLinkClient(bool notify = true); bool HasFriendSlot(); const wxString& GetName() const { return m_strName; } uint16 GetPort() const { return m_nLastUsedPort; } uint32 GetIP() const { return m_dwLastUsedIP; } void LoadFromFile(CFileDataIO* file); void WriteToFile(CFileDataIO* file); private: void Init(); CClientRef m_LinkedClient; CMD4Hash m_UserHash; uint32 m_dwLastUsedIP; uint16 m_nLastUsedPort; wxString m_strName; // write-only info, never used (kept in order not to break the save file) uint32 m_dwLastSeen; uint32 m_dwLastChatted; }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/SearchList.h0000644000175000017500000001742012050266603020535 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef SEARCHLIST_H #define SEARCHLIST_H #include "Timer.h" // Needed for CTimer #include "ObservableQueue.h" // Needed for CQueueObserver #include "SearchFile.h" // Needed for CSearchFile #include // Do_not_auto_remove (lionel's Mac, 10.3) class CMemFile; class CMD4Hash; class CPacket; class CServer; class CSearchFile; namespace Kademlia { class CUInt128; } enum SearchType { LocalSearch, GlobalSearch, KadSearch }; typedef std::vector CSearchResultList; class CSearchList : public wxEvtHandler { public: //! Structure used to pass search-parameters. struct CSearchParams { /** Prevents accidential use of uninitialized variables. */ CSearchParams() { minSize = maxSize = availability = 0; } //! The actual string to search for. wxString searchString; //! The type of files to search for (may be empty), one of ED2KFTSTR_* wxString typeText; //! The filename extension. May be empty. wxString extension; //! The smallest filesize in bytes to accept, zero for any. uint64_t minSize; //! The largest filesize in bytes to accept, zero for any. uint64_t maxSize; //! The minumum available (source-count), zero for any. uint32_t availability; }; /** Constructor. */ CSearchList(); /** Frees any remaining search-results. */ ~CSearchList(); /** * Starts a new search. * * @param searchID The ID of the search, which may be modified. * @param type The type of search, see SearchType. * @param params The search parameters, see CSearchParams. * @return An empty string on success, otherwise an error-message. */ wxString StartNewSearch(uint32* searchID, SearchType type, const CSearchParams& params); /** Stops the current search (global or Kad), if any is in progress. */ void StopSearch(bool globalOnly = false); /** Returns the completion percentage of the current search. */ uint32 GetSearchProgress() const; /** This function is called once the local (ed2k) search has ended. */ void LocalSearchEnd(); /** * Returns the list of results for the specified search. * * If the search is not valid, an empty list is returned. */ const CSearchResultList& GetSearchResults(long searchID) const; /** Removes all results for the specified search. */ void RemoveResults(long searchID); /** Finds the search-result (by hash) and downloads it in the given category. */ void AddFileToDownloadByHash(const CMD4Hash& hash, uint8 category = 0); /** * Processes a list of shared files from a client. * * @param packet The raw packet received from the client. * @param size the length of the packet. * @param sender The sender of the packet. * @param moreResultsAvailable Set to a value specifying if more results are available. * @param directory The directory containing the shared files. */ void ProcessSharedFileList(const byte* packet, uint32 size, CUpDownClient* sender, bool* moreResultsAvailable, const wxString& directory); /** * Processes a search-result sent via TCP from the local server. All results are added. * * @param packet The packet containing one or more search-results. * @param size the length of the packet. * @param optUTF8 Specifies if the server supports UTF8. * @param serverIP The IP of the server sending the results. * @param serverPort The Port of the server sending the results. */ void ProcessSearchAnswer(const uint8_t* packet, uint32_t size, bool optUTF8, uint32_t serverIP, uint16_t serverPort); /** * Processes a search-result sent via UDP. Only one result is read from the packet. * * @param packet The packet containing one or more search-results. * @param optUTF8 Specifies if the server supports UTF8. * @param serverIP The IP of the server sending the results. * @param serverPort The Port of the server sending the results. */ void ProcessUDPSearchAnswer(const CMemFile& packet, bool optUTF8, uint32 serverIP, uint16 serverPort); /** * Adds a result in the form of a kad search-keyword to the specified result-list. * * @param searchID The search to which this result belongs. * @param fileID The hash of the result-file. * @param name The filename of the result. * @param size The filesize of the result. * @param type The filetype of the result (TODO: Not used?) * @param kadPublishInfo The kademlia publish information of the result. * @param taglist List of additional tags associated with the search-result. */ void KademliaSearchKeyword(uint32_t searchID, const Kademlia::CUInt128 *fileID, const wxString& name, uint64_t size, const wxString& type, uint32_t kadPublishInfo, const TagPtrList& taglist); /** Update a certain search result in all lists */ void UpdateSearchFileByHash(const CMD4Hash& hash); /** Mark current KAD search as finished */ void SetKadSearchFinished() { m_KadSearchFinished = true; } private: /** Event-handler for global searches. */ void OnGlobalSearchTimer(CTimerEvent& evt); /** * Adds the specified file to the current search's results. * * @param toadd The result to add. * @param clientResponse Is the result sent by a client (shared-files list). * @return True if the results were added, false otherwise. * * Note that this function takes ownership of the CSearchFile object, * regardless of whenever or not it was actually added to the results list. */ bool AddToList(CSearchFile* toadd, bool clientResponse = false); //! This auto-pointer is used to safely prevent leaks. typedef std::auto_ptr CMemFilePtr; /** Create a basic search-packet for the given search-type. */ CMemFilePtr CreateSearchData(const CSearchParams& params, SearchType type, bool supports64bit, bool& packetUsing64bit); //! Timer used for global search intervals. CTimer m_searchTimer; //! The current search-type, regarding the last/current search. SearchType m_searchType; //! Specifies if a search is being performed. bool m_searchInProgress; //! The ID of the current search. long m_currentSearch; //! The current packet used for searches. CPacket* m_searchPacket; //! Does the current search packet contain 64bit values? bool m_64bitSearchPacket; //! If the current search is a KAD search this signals if it is finished. bool m_KadSearchFinished; //! Queue of servers to ask when doing global searches. //! TODO: Replace with 'cookie' system. CQueueObserver m_serverQueue; //! Shorthand for the map of results (key is a SearchID). typedef std::map ResultMap; //! Map of all search-results added. ResultMap m_results; //! Contains the results type desired in the current search. //! If not empty, results of different types are filtered. wxString m_resultType; DECLARE_EVENT_TABLE() }; #endif // SEARCHLIST_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/CommentDialogLst.cpp0000644000175000017500000001077312050266603022240 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "CommentDialogLst.h" // Interface declarations #include "muuli_wdr.h" // Needed for commentLstDlg #include "PartFile.h" // Needed for CPartFile #include // Needed for CFormat #include "MuleListCtrl.h" // Needed for CMuleListCtrl #include "Preferences.h" #include "amule.h" // Needed for theApp BEGIN_EVENT_TABLE(CCommentDialogLst,wxDialog) EVT_BUTTON(IDCOK,CCommentDialogLst::OnBnClickedApply) EVT_BUTTON(IDCREF,CCommentDialogLst::OnBnClickedRefresh) END_EVENT_TABLE() /* * Constructor */ CCommentDialogLst::CCommentDialogLst(wxWindow*parent, CPartFile* file) : wxDialog(parent, -1, wxString(_("File Comments")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER), m_file(file) { wxSizer* content = commentLstDlg(this, true); content->Show(this, true); m_list = CastChild(IDC_LST, CMuleListCtrl); m_list->InsertColumn(0, _("Username"), wxLIST_FORMAT_LEFT, 130); m_list->InsertColumn(1, _("File Name"), wxLIST_FORMAT_LEFT, 130); m_list->InsertColumn(2, _("Rating"), wxLIST_FORMAT_LEFT, 80); m_list->InsertColumn(3, _("Comment"), wxLIST_FORMAT_LEFT, 340); m_list->SetSortFunc(SortProc); UpdateList(); } CCommentDialogLst::~CCommentDialogLst() { ClearList(); } void CCommentDialogLst::OnBnClickedApply(wxCommandEvent& WXUNUSED(evt)) { EndModal(0); } void CCommentDialogLst::OnBnClickedRefresh(wxCommandEvent& WXUNUSED(evt)) { UpdateList(); } void CCommentDialogLst::UpdateList() { int count = 0; ClearList(); FileRatingList list; m_file->GetRatingAndComments(list); for (FileRatingList::const_iterator it = list.begin(); it != list.end(); ++it) { if (!thePrefs::IsCommentFiltered(it->Comment)) { m_list->InsertItem(count, it->UserName); m_list->SetItem(count, 1, it->FileName); m_list->SetItem(count, 2, (it->Rating != -1) ? GetRateString(it->Rating) : wxString(wxT("on"))); m_list->SetItem(count, 3, it->Comment); m_list->SetItemPtrData(count, reinterpret_cast(new SFileRating(*it))); ++count; } } wxString info; if (count == 0) { info = _("No comments"); } else { info = CFormat(wxPLURAL("%u comment", "%u comments", count)) % count; } FindWindow(IDC_CMSTATUS)->SetLabel(info); FindWindow(IDC_CMSTATUS)->GetParent()->Layout(); m_file->UpdateFileRatingCommentAvail(); } void CCommentDialogLst::ClearList() { size_t count = m_list->GetItemCount(); for (size_t i = 0; i < count; ++i) { // ADUNANZA BEGIN // Backport #if 0 delete (SFileRating*)m_list->GetItemData(i); #else delete reinterpret_cast(m_list->GetItemData(i)); #endif // ADUNANZA END } m_list->DeleteAllItems(); } int CCommentDialogLst::SortProc(wxUIntPtr item1, wxUIntPtr item2, long sortData) { // ADUNANZA BEGIN // Backport #if 0 SFileRating* file1 = (SFileRating*)item1; SFileRating* file2 = (SFileRating*)item2; #else SFileRating* file1 = reinterpret_cast(item1); SFileRating* file2 = reinterpret_cast(item2); #endif // ADUNANZA END int mod = (sortData & CMuleListCtrl::SORT_DES) ? -1 : 1; switch (sortData & CMuleListCtrl::COLUMN_MASK) { case 0: return mod * file1->UserName.Cmp(file2->UserName); case 1: return mod * file1->FileName.Cmp(file2->FileName); case 2: return mod * (file1->Rating - file2->Rating); case 3: return mod * file1->Comment.Cmp(file2->Comment); default: return 0; } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/MuleTrayIcon.cpp0000644000175000017500000003426112050266603021404 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2003-2011 Patrizio Bassi ( hetfield@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include "MuleTrayIcon.h" #include #include #include "pixmaps/mule_TrayIcon_big.ico.xpm" #include "pixmaps/mule_Tr_yellow_big.ico.xpm" #include "pixmaps/mule_Tr_grey_big.ico.xpm" #include #include "amule.h" // Needed for theApp #include "amuleDlg.h" // Needed for IsShown #include "Preferences.h" // Needed for thePrefs #include "ServerConnect.h" // Needed for CServerConnect #include "Server.h" // Needed for CServer #include "StatisticsDlg.h" // Needed for CStatisticsDlg::getColors() #include "Statistics.h" // Needed for theStats #include // Needed for CFormat #include "Logger.h" #include // Needed to access menu item constants /****************************************************/ /******************* Event Table ********************/ /****************************************************/ BEGIN_EVENT_TABLE(CMuleTrayIcon, wxTaskBarIcon) EVT_TASKBAR_LEFT_DCLICK(CMuleTrayIcon::SwitchShow) EVT_MENU( TRAY_MENU_EXIT, CMuleTrayIcon::Close) EVT_MENU( TRAY_MENU_CONNECT, CMuleTrayIcon::ServerConnection) EVT_MENU( TRAY_MENU_DISCONNECT, CMuleTrayIcon::ServerConnection) EVT_MENU( TRAY_MENU_HIDE, CMuleTrayIcon::ShowHide) EVT_MENU( TRAY_MENU_SHOW, CMuleTrayIcon::ShowHide) EVT_MENU( UPLOAD_ITEM1, CMuleTrayIcon::SetUploadSpeed) EVT_MENU( UPLOAD_ITEM2, CMuleTrayIcon::SetUploadSpeed) EVT_MENU( UPLOAD_ITEM3, CMuleTrayIcon::SetUploadSpeed) EVT_MENU( UPLOAD_ITEM4, CMuleTrayIcon::SetUploadSpeed) EVT_MENU( UPLOAD_ITEM5, CMuleTrayIcon::SetUploadSpeed) EVT_MENU( UPLOAD_ITEM6, CMuleTrayIcon::SetUploadSpeed) EVT_MENU( DOWNLOAD_ITEM1, CMuleTrayIcon::SetDownloadSpeed) EVT_MENU( DOWNLOAD_ITEM2, CMuleTrayIcon::SetDownloadSpeed) EVT_MENU( DOWNLOAD_ITEM3, CMuleTrayIcon::SetDownloadSpeed) EVT_MENU( DOWNLOAD_ITEM4, CMuleTrayIcon::SetDownloadSpeed) EVT_MENU( DOWNLOAD_ITEM5, CMuleTrayIcon::SetDownloadSpeed) EVT_MENU( DOWNLOAD_ITEM6, CMuleTrayIcon::SetDownloadSpeed) END_EVENT_TABLE() /****************************************************/ /************ Constructor / Destructor **************/ /****************************************************/ long GetSpeedFromString(wxString label){ long temp; label.Replace(_("kB/s"),wxT(""),TRUE); label.Trim(FALSE); label.Trim(TRUE); label.ToLong(&temp); return temp; } void CMuleTrayIcon::SetUploadSpeed(wxCommandEvent& event){ wxObject* obj=event.GetEventObject(); if (obj!=NULL) { wxMenu *menu = dynamic_cast(obj); if (menu) { wxMenuItem* item=menu->FindItem(event.GetId()); if (item!=NULL) { long temp; if (item->GetItemLabelText()==(_("Unlimited"))) { temp=UNLIMITED; } else { temp=GetSpeedFromString(item->GetItemLabelText()); } thePrefs::SetMaxUpload(temp); #ifdef CLIENT_GUI // Send preferences to core. theApp->glob_prefs->SendToRemote(); #endif } } } } void CMuleTrayIcon::SetDownloadSpeed(wxCommandEvent& event){ wxObject* obj=event.GetEventObject(); if (obj!=NULL) { wxMenu *menu = dynamic_cast(obj); if (menu) { wxMenuItem* item=menu->FindItem(event.GetId()); if (item!=NULL) { long temp; if (item->GetItemLabelText()==(_("Unlimited"))) { temp=UNLIMITED; } else { temp=GetSpeedFromString(item->GetItemLabelText()); } thePrefs::SetMaxDownload(temp); #ifdef CLIENT_GUI // Send preferences to core. theApp->glob_prefs->SendToRemote(); #endif } } } } void CMuleTrayIcon::ServerConnection(wxCommandEvent& WXUNUSED(event)) { wxCommandEvent evt; theApp->amuledlg->OnBnConnect(evt); } void CMuleTrayIcon::ShowHide(wxCommandEvent& WXUNUSED(event)) { theApp->amuledlg->DoIconize(theApp->amuledlg->IsShown()); } void CMuleTrayIcon::Close(wxCommandEvent& WXUNUSED(event)) { if (theApp->amuledlg->IsEnabled()) { theApp->amuledlg->Close(); } } CMuleTrayIcon::CMuleTrayIcon() { Old_Icon = -1; Old_SpeedSize = 0xFFFF; // must be > any possible one. // Create the background icons (speed improvement) HighId_Icon_size = wxIcon(mule_TrayIcon_big_ico_xpm).GetHeight(); LowId_Icon_size = wxIcon(mule_Tr_yellow_big_ico_xpm).GetHeight(); Disconnected_Icon_size = wxIcon(mule_Tr_grey_big_ico_xpm).GetHeight(); } CMuleTrayIcon::~CMuleTrayIcon() { } /****************************************************/ /***************** Public Functions *****************/ /****************************************************/ void CMuleTrayIcon::SetTrayIcon(int Icon, uint32 percent) { int Bar_ySize = 0; switch (Icon) { case TRAY_ICON_HIGHID: // Most likely case, test first Bar_ySize = HighId_Icon_size; break; case TRAY_ICON_LOWID: Bar_ySize = LowId_Icon_size; break; case TRAY_ICON_DISCONNECTED: Bar_ySize = Disconnected_Icon_size; break; default: wxFAIL; } // Lookup this values for speed improvement: don't draw if not needed int NewSize = (Bar_ySize * percent) / 100; if ((Old_Icon != Icon) || (Old_SpeedSize != NewSize)) { if ((Old_SpeedSize > NewSize) || (Old_Icon != Icon)) { // We have to rebuild the icon, because bar is lower now. switch (Icon) { case TRAY_ICON_HIGHID: // Most likely case, test first CurrentIcon = wxIcon(mule_TrayIcon_big_ico_xpm); break; case TRAY_ICON_LOWID: CurrentIcon = wxIcon(mule_Tr_yellow_big_ico_xpm); break; case TRAY_ICON_DISCONNECTED: CurrentIcon = wxIcon(mule_Tr_grey_big_ico_xpm); break; default: wxFAIL; } } Old_Icon = Icon; Old_SpeedSize = NewSize; // Do whatever to the icon before drawing it (percent) wxBitmap TempBMP; TempBMP.CopyFromIcon(CurrentIcon); TempBMP.SetMask(NULL); IconWithSpeed.SelectObject(TempBMP); // Speed bar is: centered, taking 80% of the icon heigh, and // right-justified taking a 10% of the icon width. // X int Bar_xSize = 4; int Bar_xPos = CurrentIcon.GetWidth() - 5; IconWithSpeed.SetBrush(*(wxTheBrushList->FindOrCreateBrush(CStatisticsDlg::getColors(11)))); IconWithSpeed.SetPen(*wxTRANSPARENT_PEN); IconWithSpeed.DrawRectangle(Bar_xPos + 1, Bar_ySize - NewSize, Bar_xSize -2 , NewSize); // Unselect the icon. IconWithSpeed.SelectObject(wxNullBitmap); // Do transparency // Set a new mask with transparency set to red. wxMask* new_mask = new wxMask(TempBMP, wxColour(0xFF, 0x00, 0x00)); TempBMP.SetMask(new_mask); CurrentIcon.CopyFromBitmap(TempBMP); UpdateTray(); } } void CMuleTrayIcon::SetTrayToolTip(const wxString& Tip) { CurrentTip = Tip; UpdateTray(); } /****************************************************/ /**************** Private Functions *****************/ /****************************************************/ void CMuleTrayIcon::UpdateTray() { // Icon update and Tip update #ifndef __WXCOCOA__ if (IsOk()) #endif { SetIcon(CurrentIcon, CurrentTip); } } wxMenu* CMuleTrayIcon::CreatePopupMenu() { // Creates dinamically the menu to show the user. wxMenu *traymenu = new wxMenu(); traymenu->SetTitle(_("aMule Tray Menu")); // Build the Top string name wxString label = MOD_VERSION_LONG; traymenu->Append(TRAY_MENU_INFO, label); traymenu->AppendSeparator(); label = wxString(_("Speed limits:")) + wxT(" "); // Check for upload limits unsigned int max_upload = thePrefs::GetMaxUpload(); if ( max_upload == UNLIMITED ) { label += _("UL: None"); } else { label += CFormat(_("UL: %u")) % max_upload; } label += wxT(", "); // Check for download limits unsigned int max_download = thePrefs::GetMaxDownload(); if ( max_download == UNLIMITED ) { label += _("DL: None"); } else { label += CFormat(_("DL: %u")) % max_download; } traymenu->Append(TRAY_MENU_INFO, label); label = CFormat(_("Download speed: %.1f")) % (theStats::GetDownloadRate() / 1024.0); traymenu->Append(TRAY_MENU_INFO, label); label = CFormat(_("Upload speed: %.1f")) % (theStats::GetUploadRate() / 1024.0); traymenu->Append(TRAY_MENU_INFO, label); traymenu->AppendSeparator(); // Client Info wxMenu* ClientInfoMenu = new wxMenu(); ClientInfoMenu->SetTitle(_("Client Information")); // User nick-name { wxString temp = CFormat(_("Nickname: %s")) % ( thePrefs::GetUserNick().IsEmpty() ? wxString(_("No Nickname Selected!")) : thePrefs::GetUserNick() ); ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp); } // Client ID { wxString temp = _("ClientID: "); if (theApp->IsConnectedED2K()) { temp += CFormat(wxT("%u")) % theApp->GetED2KID(); } else { temp += _("Not connected"); } ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp); } // Current Server and Server IP { wxString temp_name = _("ServerName: "); wxString temp_ip = _("ServerIP: "); if ( theApp->serverconnect->GetCurrentServer() ) { temp_name += theApp->serverconnect->GetCurrentServer()->GetListName(); temp_ip += theApp->serverconnect->GetCurrentServer()->GetFullIP(); } else { temp_name += _("Not connected"); temp_ip += _("Not Connected"); } ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp_name); ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp_ip); } // IP Address { wxString temp = CFormat(_("IP: %s")) % ( (theApp->GetPublicIP()) ? Uint32toStringIP(theApp->GetPublicIP()) : wxString(_("Unknown")) ); ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp); } // TCP PORT { wxString temp; if (thePrefs::GetPort()) { temp = CFormat(_("TCP port: %d")) % thePrefs::GetPort(); } else { temp=_("TCP port: Not ready"); } ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp); } // UDP PORT { wxString temp; if (thePrefs::GetEffectiveUDPPort()) { temp = CFormat(_("UDP port: %d")) % thePrefs::GetEffectiveUDPPort(); } else { temp=_("UDP port: Not ready"); } ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp); } // Online Signature { wxString temp; if (thePrefs::IsOnlineSignatureEnabled()) { temp=_("Online Signature: Enabled"); } else { temp=_("Online Signature: Disabled"); } ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp); } // Uptime { wxString temp = CFormat(_("Uptime: %s")) % CastSecondsToHM(theStats::GetUptimeSeconds()); ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp); } // Number of shared files { wxString temp = CFormat(_("Shared files: %d")) % theStats::GetSharedFileCount(); ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp); } // Number of queued clients { wxString temp = CFormat(_("Queued clients: %d")) % theStats::GetWaitingUserCount(); ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp); } // Total Downloaded { wxString temp = CastItoXBytes(theStats::GetTotalReceivedBytes()); temp = CFormat(_("Total DL: %s")) % temp; ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp); } // Total Uploaded { wxString temp = CastItoXBytes(theStats::GetTotalSentBytes()); temp = CFormat(_("Total UL: %s")) % temp; ClientInfoMenu->Append(TRAY_MENU_CLIENTINFO_ITEM,temp); } traymenu->Append(TRAY_MENU_CLIENTINFO,ClientInfoMenu->GetTitle(),ClientInfoMenu); // Separator traymenu->AppendSeparator(); // Upload Speed sub-menu wxMenu* UploadSpeedMenu = new wxMenu(); UploadSpeedMenu->SetTitle(_("Upload limit")); // Download Speed sub-menu wxMenu* DownloadSpeedMenu = new wxMenu(); DownloadSpeedMenu->SetTitle(_("Download limit")); // Upload Speed sub-menu { UploadSpeedMenu->Append(UPLOAD_ITEM1, _("Unlimited")); uint32 max_ul_speed = thePrefs::GetMaxGraphUploadRate(); if ( max_ul_speed == UNLIMITED ) { max_ul_speed = 100; } else if ( max_ul_speed < 10 ) { max_ul_speed = 10; } for ( int i = 0; i < 5; i++ ) { unsigned int tempspeed = (unsigned int)((double)max_ul_speed / 5) * (5 - i); wxString temp = CFormat(wxT("%u %s")) % tempspeed % _("kB/s"); UploadSpeedMenu->Append((int)UPLOAD_ITEM1+i+1,temp); } } traymenu->Append(0,UploadSpeedMenu->GetTitle(),UploadSpeedMenu); // Download Speed sub-menu { DownloadSpeedMenu->Append(DOWNLOAD_ITEM1, _("Unlimited")); uint32 max_dl_speed = thePrefs::GetMaxGraphDownloadRate(); if ( max_dl_speed == UNLIMITED ) { max_dl_speed = 100; } else if ( max_dl_speed < 10 ) { max_dl_speed = 10; } for ( int i = 0; i < 5; i++ ) { unsigned int tempspeed = (unsigned int)((double)max_dl_speed / 5) * (5 - i); wxString temp = CFormat(wxT("%d %s")) % tempspeed % _("kB/s"); DownloadSpeedMenu->Append((int)DOWNLOAD_ITEM1+i+1,temp); } } traymenu->Append(0,DownloadSpeedMenu->GetTitle(),DownloadSpeedMenu); // Separator traymenu->AppendSeparator(); if (theApp->IsConnected()) { //Disconnection Speed item traymenu->Append(TRAY_MENU_DISCONNECT, _("Disconnect")); } else { //Connect item traymenu->Append(TRAY_MENU_CONNECT, _("Connect")); } // Separator traymenu->AppendSeparator(); if (theApp->amuledlg->IsShown()) { //hide item traymenu->Append(TRAY_MENU_HIDE, _("Hide aMule")); } else { //show item traymenu->Append(TRAY_MENU_SHOW, _("Show aMule")); } // Separator traymenu->AppendSeparator(); // Exit item traymenu->Append(TRAY_MENU_EXIT, _("Exit")); return traymenu; } void CMuleTrayIcon::SwitchShow(wxTaskBarIconEvent&) { theApp->amuledlg->DoIconize(theApp->amuledlg->IsShown()); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/MuleThread.h0000644000175000017500000000375412050266603020533 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2008-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef MULETHREAD_H #define MULETHREAD_H #include class CMuleThread : public wxThread { public: //! @see wxThread::wxThread CMuleThread(wxThreadKind kind = wxTHREAD_DETACHED) : wxThread(kind), m_stop(false) {} /** * Stops the thread. * * For detached threads, this function is equivalent * to Delete, but is also useable for joinable threads, * where Delete should not be used, due to crashes * experienced in that case. In the case of joinable * threads, Wait is called rather than Delete. * * @see wxThread::Delete */ void Stop() { m_stop = true; if (IsDetached()) { Delete(); } else { Wait(); } } //! Returns true if Delete or Stop has been called. virtual bool TestDestroy() { // m_stop is checked last, because some functionality is // dependant upon wxThread::TestDestroy() being called, // for instance Pause(). return wxThread::TestDestroy() || m_stop; } private: //! Is set if Stop is called. bool m_stop; }; #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/GetTickCount.cpp0000644000175000017500000001075212050266603021373 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 Alo Sarv ( madcat_@users.sourceforge.net ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Timo Kujala ( tiku@users.sourceforge.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "GetTickCount.h" // Interface uint32 TheTime = 0; #ifdef __WXMSW__ void StartTickTimer(){}; void StopTickTimer(){}; /** * Returns the tickcount in full resolution using the highres timer. * This function replaces calls to the low res system function GetTickCOunt * (which can also be messed up when an app changes the system timer resolution) */ uint32 GetTickCountFullRes() { return GetTickCount_64(); } /** * Returns the tickcount in 64bits. */ uint64 GetTickCount_64() { // Use highres timer for all operations on Windows // The Timer starts at system boot and runs (on a Intel Quad core) // with 14 million ticks per second. So it won't overflow for // 35000 years. // Convert hires ticks to milliseconds static double tickFactor; _LARGE_INTEGER li; static bool first = true; if (first) { // calculate the conversion factor for the highres timer QueryPerformanceFrequency(&li); tickFactor = 1000.0 / li.QuadPart; first = false; } QueryPerformanceCounter(&li); return li.QuadPart * tickFactor; } #else #include // Needed for gettimeofday uint32 GetTickCountFullRes(void) { struct timeval aika; gettimeofday(&aika,NULL); unsigned long msecs = aika.tv_sec * 1000; msecs += (aika.tv_usec / 1000); return msecs; } #if wxUSE_GUI && wxUSE_TIMER && !defined(AMULE_DAEMON) /** * Copyright (c) 2003-2011 Alo Sarv ( madcat_@users.sourceforge.net ) * wxTimer based implementation. wxGetLocalTimeMillis() is called every 2 * milliseconds and values stored in local variables. Upon requests for current * time, values of those variables are returned. This means wxGetLocalTimeMillis * is being called exactly 50 times per second at any case, no more no less. */ #include class MyTimer : public wxTimer { public: MyTimer() { tic32 = tic64 = wxGetLocalTimeMillis().GetValue(); Start(20); } static uint32 GetTickCountNow() { return tic32; } static uint64 GetTickCountNow64() { return tic64; } private: void Notify() { tic32 = tic64 = wxGetLocalTimeMillis().GetValue(); } static uint32 tic32; static uint64 tic64; }; static class MyTimer* mytimer; // Initialization of the static MyTimer member variables. uint32 MyTimer::tic32 = 0; uint64 MyTimer::tic64 = 0; void StartTickTimer() { wxASSERT(mytimer == NULL); mytimer = new MyTimer(); } void StopTickTimer() { wxASSERT(mytimer != NULL); delete mytimer; mytimer = NULL; } uint32 GetTickCount(){ wxASSERT(mytimer != NULL); return MyTimer::GetTickCountNow(); } uint64 GetTickCount64(){ wxASSERT(mytimer != NULL); return MyTimer::GetTickCountNow64(); } #else /** * Copyright (c) 2002-2011 Timo Kujala ( tiku@users.sourceforge.net ) * gettimeofday() syscall based implementation. Upon request to GetTickCount(), * gettimeofday syscall is being used to retrieve system time and returned. This * means EACH GetTickCount() call will produce a new syscall, thus becoming * increasingly heavy on CPU as the program uptime increases and more things * need to be done. */ void StartTickTimer() {} void StopTickTimer() {} uint32 GetTickCount() { return GetTickCountFullRes(); } // avoids 32bit rollover error for differences above 50days uint64 GetTickCount64() { struct timeval aika; gettimeofday(&aika,NULL); return aika.tv_sec * (uint64)1000 + aika.tv_usec / 1000; } #endif #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/LoggerConsole.cpp0000644000175000017500000000426612050266603021575 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Marcelo Roberto Jimenez ( phoenix@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include // for char2unicode() #include "Logger.h" // for Add(Debug)LogLineM() #ifdef __DEBUG__ bool CLogger::IsEnabled(DebugType /*type*/) const { return true; } #endif void CLogger::AddLogLine( const wxString &file, int line, bool critical, const std::ostringstream &msg) { AddLogLine(file, line, critical, static_cast(0), msg); } void CLogger::AddLogLine( const wxString &file, int line, bool critical, DebugType /* type */, const wxString &str, bool /* toStdout */, bool /* toGUI */) { std::string s; if (critical) { s = "Critical message: "; } printf("%s(%d): %s%s\n", (const char *)unicode2char(file), line, s.c_str(), (const char *)unicode2char(str)); } void CLogger::AddLogLine( const wxString &file, int line, bool critical, DebugType /*type*/, const std::ostringstream &msg) { std::string s; if (critical) { s = "Critical message: "; } printf("%s(%d): %s%s\n", (const char *)unicode2char(file), line, s.c_str(), msg.str().c_str()); } CLogger theLogger; BEGIN_EVENT_TABLE(CLogger, wxEvtHandler) END_EVENT_TABLE() amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/skins/0000755000175000017500000000000012053222403017437 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/skins/kde4.zip0000644000175000017500000014140210753565633021040 0ustar l3onl3onPK ¨‚¼6ÕzÇŽ  Toolbar_Transfers.pngUT [åZF—–óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYsvv}Õ‚ÌtIME×¼T7ï¦IDATXý—kŒ]UÇû¼ïsî;3vZ˜vÆiú´´¤–¥0ñAL4AB0j$bR@“ZI¬Äø¥µM%B“ÆB,R¡¯i‡>(”™é´é¼çÞó>go?ÌP„vDq%ÿœgeíß9{¯µ×B)ÅÕ±iÛÓó6l½áJïþ×Òø€-Üô˯¬¹~á®íœûÔ¼ [Wñ ÛûŒÅ?4ÛÌþn¥\0ÛÚf·]Ó9oGËúŸ-û¿¬X6ÿû+–-Xql²ŽCGûœŽÎ…sÿ0çæ-‹>)¡” aíOï¸mÕ¿:ÚçÌ—RÅ1~áz>Ý'úŽž8qû>PY»yNˆ›´lÚéUà º6š&ò¬q2±ÔÕõ¸û±ÖÝÿû_ßvËÊû ]G)ˆ’ßq=ŸÉšÇ±7zŽŽï¹vÁ¬oôÔ* 9-—3è:ÕGͰLƒ0]×OÞ‰<õ²–ª­^×ÖþÐvÛ/V~~㪿ͿzVɲL')^Rs=ÆÆjŒÓT)¥)*J9Ó;Ê[=#Ìj*P©·©…!çÇ‘¤4•r¨„“gÏÖ9{S¼SmÞ,?àsìxnÝK7ó9²MÓH’/è=ÓÏÒ¶†©3Q ¸8æ2<î'¯ðêÁ>F'š&ÐuAÅ„qLM©PYJgGC©®X,mW5#&7^°ù›·÷ìØs¤«³µiÙ¤02î⺆ª¸AŒçG„qJ’&,jk"Œbv½x’ÉZ€aèØ–~)k|?" #‚iÙ¶…ïGD^Ÿ<{úÀ‡¼zθÒÝX.|Õ âÃJa¸^D±”à "GjT݈ LqLƒ1ÓçÆÕmT½Ý/btÂ{o+ÅT {wq?1MÃÐéëzîÀ¡};|åR Üz}[wï…±Çý(¡\ÊãA”"t8M™p9?T¥p‚³ã¬YÞÊê%s)æíK1¦ (Aâû!žàzƒ½G†•ÛûµËzÂ+Ù¶§ÿþÆúüš8N „㧸0P¥êGT݈ùsë™ÝX$ïX„IÂÁcý}s?ˆßDZ-ŠÅ<Ŭ¡Äè«ØûÔ#3¦áÚο\X¿ñ–ò®º¼³Þ q~p’á1—þIÒT #cYÇ$NR$Ð~U=oö Fé¥8A¡¹™èüË‹gE?¹bWüaöÐ{î ÂhÛÁîþ©7‡¦î]G×44}êÐI©PÀ¬JC×yûì(Iò^óS0ƒ¡Ö|߆ýÏïèúØlÛÝpäXï“IšÜ‰u¾’ ”¦;¦ér¦R.œß8,„ÞØs~LH©Ð„¢µnøG‡_xrËŒsÁG$>õ»}ÉìM^5ýìà »HIÙ,„¨*É9 öJ%þ¤ŽnûÒ÷þøD÷éÁoŸœ¤¹¿¸öªs·oßÿ×gì»ó[¿}¦§t}K~ì¦Ý;;t%'ãœ;å«ÜSʤ_~êñÍäôo»î¡Ê¢IdIEND®B`‚PK 1¬7¦©&.‰‰Toolbar_Stats.pngUT  øÅF—–óFUxèè‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<IDATX…å—;lœYÇ÷5cÏŒ­Ävâd£°ÄŠì‚(!‰ƒ¶YÑ.Z$ŠPPQ@E ( ¡¥JC—AKˆR$ÚÚˆ,åµ^؈M'3öx<3ß}Šï‘™µ“­V[p¥ó}çÜ«{Ïÿžó¿/%"|žE®Þ[*J)CH}Æ>H"”ˆ ”rÀ`ÏK@ìêe@?™ÓOÚèEÄ«Âá‡þqjjjAå¥Zk”Êý”ún""»JJ)GPèE½t»ÝÕ………7€m`O«Õ:2Õ¨ãOÓ 0êäUºjµZ_,¢ý¤ä€ô… X__G)…sŽ”Rç1Æ €s–bå܃÷¾d­!„ÈÌÌ /^¤Óé°²²Âââ"óóóºð‰-r©Úí6³³³(¥¨×k„;4ÆP«9BˆÕÌëõ:Y–U3sÎ’ežc>#kɲŒ D„[·n±°°ÀÝ»w™ŸŸ§äZ¹ uAÆJ0ŠÔL(«ªPµ#»ÔíÎáôéÓÓ¿Ú$NÅbðNòõ°Ñö²~”#œ9s†'NŒ¨R "Ôj5\Ý‘f"òÓ§Ü5›Ìžv4o6¨Û:!øÊ™µ%}JX@F8aQ ƒ>)%VVVØØØ`ÿþý;vlg |ðôë}²Ÿ<áÉ`‹ØV4–‡ %Ãû ïYæÉ²ŒY–¶'_é9ÃaÞ§\ÃáÕÕÕ¨ŒTKøt­>Í$¯Ñ&BÌCù"´U´‹¢„TO$0¢É|F»ÝFDXZZbii‰ápȨÏ1ýå.{;ÿœÄEG2±TîPD#Õ^Y®€‚E„VÀÿh ÷Zà?ïe «Ø)%z½÷îÝãèÑ£MvØwNsLn;¬±£ÐB# ]!ÙDÿ­gè=‰úïWΡ?Ùgó‡Éön‘ýÃ`ßð~mmo""ܾ}›ÅÅEQEúï HÏ#!zm²ÿSƒúŸ¦˜Ì4ꦦ‹‡Óìäɓܹs‡z½>š5ÿÁîj'ôÉ“Õ2Ì—üF±ùöcæ·ÙSEö½ç¤ŸÏë‘Ö/ÚÔ“E½Û@ «I^ãžÖáË0==Íòò2#e'Ô–Bo{½íõ5Âɽú‡ß6d—'˜ô†Öù^ïpøgÝvÔÞŸ"v_>e³õÒ+ÇØF¤¤›HBì$RGr½0Aѳ …þ¯Û–å_6à#—'Qk:ïSôKbœnΓ+W®ðøñc®_¿þrJW‘\^H€}f8ü5aû×÷,±ûC“ÿ<Àöi¢$@¹(¢ä!mä¶sŽ,Ëèõz»¦@l=ë#Aª!°°ý¾§yIJ}ˆÎ|Ñnñ>Tñ´ÖTv~Z¼÷ô·²jÿîå¯r„ üѨÿEoÏ^•¥Ï\üñÓÓ/#€9'K)¤Í¼)Ò2£0çVK ðÏ Ì:ªÖ¨;ÚY˜ù®–sf¦yÕMÌLqj§Ú]Œòp‡¼˜ 2¥ÔZŸ®méôj1˜Õ"òpïƒÁÜ™L!t³Á’ª€¿'îA­~óóÁoc¤1èQ'ø_¸ Ž~ùöá3¨Õá°?‘3.XyG9 Aàbr¡­zÅDðø¼ô4¯:ñO4R Âid&ŽÐ9Qe7HÁc‘„ðËEMàTë â gTÎá%€~QMðÀtbG)@ Ä"*/G l"§SÒ |øÚDêgðÊZ²Md’E漏B y¯—¥V€œÓaYUƒšÏ¿Þpøú¸>lºX:ú·12c¢­r`Uò¶ŸoÍNgÕƒD½¥¸n1ŠDЬÆ1,õØÔãÚýNgÕƒíç[«]QcO()/Û(€\ë/ÎSMƒÅ6k œ/ûYM»è€7Àwo¸ »õÿ‚;€‚Ñ—Ú ÑIEND®B`‚PK ôz¼6T8, Toolbar_Search.pngUT Û×ZF—–óFUxèè‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<•IDATX…í–Yl\g†Ÿ³Í9g<3gf¼Nfä,öØñ’²¤TH%4¤‰4 ªÚBE@ JT)j¹@T"¢pÑ’fQ N"U’Ô¨´ApSCܤuÒÈM/qijÇv¼Åö™±=sæl\Ô±LÉÆ E(Ÿôêÿ/^÷ù?ýúþ#ø¾Ï§Yâ§š~àÀ€Û8ÕÒRÝú÷ïØ·¿wõÊ•OÝÊÏÝ÷üôào›.9}úÏ­­­±[ø¾SíØ±ãêýï÷ýÚšZ¯©©iѼöìY›®ªöüÍ›ôwþdgÏ­¾ÓìÝ»÷±% ŧ¦²ø¾OQQPhooÿâü'Þzû¡HÔßg||œòÒÒê]»v}åfÂ'GqKK‹|áü…§NŸi{¨¡¾¡^‘å`Ó¡ƒTT$ð=Ó4;½‚µ5\\ºÞ4͆aŒTW§_hk;uAWµã‘H$áz.“““<ñ­Ç13æT&›=]½$}tÛw·íþ%ð“§Ìì+ù|îyßóWYV>øæßZ…ÃT-YŒ(Šˆ¢Xç â Ïó uµ,+¿êÁ‚ $$IbÑâÅèz×^I’CšªÝ›H”¿ôÚ«ÜÓ;rä•âxñ#}}}´Ÿ;Gkk+šª"Š"–eÇÈd²X‹d2åÖÖ¤%Çqýή‹\ÂẮcš&ªªây–eñè£N× ë:…‚ýü†~ôoïu4t^ìx¿»»›î‹Ýô÷÷“›ÉQ° ¨I’°mAE jÒ5|iý½H¢Èñ¿ü•÷ÏŸÇu €€,Ës‡R5•x,Nee%ÉT’uk×Ùa#RY__?0ç|çÌÛ/\¾ÜÇÔÔ4–eaQLÓddd]Ó0¢šªáº.“ãW¦§§'£jš4Ðß_”ËÍÌu ŸÏ£( 7|™xºô!tw>ç#¦”€²=¨ës§ö}ÏóeÛ¶q\—¼•'›Í’N§9|øð6#jüxÅÊ•#2@q,þ«Ñ‘žyö¢á"Ô@€‚ã0xe˜€@E‚zÓ4 VèØŽ‹$ŠJ HI’ôñ <Ïgae%—ûû™4MŽ57c„ŠQ™ÈdI§kÇvö›¥»—Õîxúé};”&*»”†U*+J¨MWa9CÃ$ r¹÷Ý·²Ò2ñ}ZMÓÔ¥_Û´‰xùû#8úŸ„_«¯oÞò°íº¿DðË×’d-â±Ø (›öìß××yŽÿÛõ¿ÿOø ‚”YɳçI˜Õµš¿¿Vó/”7oõwVPl  ÃÇϧ ö¬Ñ›gœ ͆^ÈŸt½Õ™Q˜]=ß÷ù'{÷¨ËLsbIEND®B`‚PKôz¼6ˆˆˆÕToolbar_Prefs.pngUT Û×ZF—–óFUxèè5×uP”ß×ð¥KBénIéNAZXi¤Cî’”î†/!-HÃR’K)!"åRÂû<¿™÷|æœ3÷̽ÿž™ÓQ%ħŇ@ „êjJ/Î& 6P™ÊÛ€†m©©ªôð¿À3B­<75cODÌ L´oÃ¥íàÐÛMÞîÿßC¢nró 2u%y}ûŸˆ,_}=»›áW…µ^Ì%*¼âB¸›þUC >¥qõ—0£ªoöî4µ-¿ÄÇxU¶P`ÉÃL•`u+ BcqGøÔ*Çð< wBý¼øou˜+a˜·àûp‹’F­îþ ,Ø ˜ô'ü×dæ/ødÄgK Ý+æëàkK9vê ô>7;5j†w¶Q¶m…h{¨Iœ·Ðl”_¤—÷”ÝŒó^9›è)1o3%”·î=ƒ]½«MóïÞÛdŸÌ6Åž†ÏÓA<šDqæÉOçñõñB¿4õåZS­¥£5`x\hr÷ŽØ5j&ÉÍè¶^^7x¥÷€°¶òÂî3â¾9wU¡_àÃM­çÎû‡¬t2í$…†¼Ç±Šjý»f±3ÖÝ©ßϰ\àšp\v#Çu¥uÛ*ai-6ù~Õ&åÝž{ª]ò •áƒ,‹,Wìá)¬6»ß&3ò¢fþ4‚BÑÔ=SwØ&°mJãÓЪ¥Šh˜ô!ªë÷’OT&ÓÈÖÎlÏB'2>8 §z¬œH óÛxîy>ÿÝïFñ˜8²I?'Ò€ÔÀu²Ç »C+õKЮ̑yö*¬§Â¥¹n}‘E1fAœjÿ®ÿ4nÂÂ:…ŸÎB¼Û sšw€…ªžèèÇÚcŒ@„‚Aäf§EDqý»"ÍÃÌØõFõ…>]¥[ŒOm3dmMœn.6Æœí$P ¸> F.ãQIg0pÊ$¾W,^û«ß“æ}hO:Œ;œGI˜ŒBþøê†šlPïöcÀôöé¸Ñ>|‘ÚÔ"ëÈàxˆ–Û’[,hÀj·XÖõûÚüça»0½’õ-Þºñ~¤†–‹h9d¢ÞþçRáb7VK…ùqŒ™0w3ò‘X œ<>tf"s?îYÜez$¶ÈrK›Ó•`àw24U–Ñ͹SO©ÆŸ)¹ÄëàA)“ˆœÄµ¾bSXœ÷4$¶Ð–ßÑAeòeÉ- û?YÒ´c tÃÀUíOvìL¨(¥z¥è|Uóe0[Í—'j\ÚÀÍàfëèÔk¶s-KÝ'çv¶MDí…ÆÕêóÍ•éœÙ*Êråò¥b{žÌÀñãñ(%¹ÙÍò mÆŠ~‰üN?¡[ÈÅVÒ³W6Üí=µgo¶ó&”ÿ)ºjˆ7;C~ÄüVòAïuüCÛ‰ƒÃ©&¯á"(Ȳß×ß¼ñ3f´'!Áñª“4Ìã–TãzKÑŠ–3)Ç;ÑÝNèJ¨?¾Wu®vyU€qyz‰s '(ÜŸNB¦¿<®Ñ6V/È+ýqAåM,Q8q…™w³1u•«Ï BøÄžG&›£­Â\8ÄȃsF´·Ø˜ ²—2?/ßsv’Ÿ;ßr÷PÈùËBÌäužV$éÁCºq%”ª1"ê2©:Ѿ|¨ vlwo/õ,(0%t«<„!ŸV¹·x´œmÃH¿TÙ–ÔD|¹~ßÿÌö®Š}ðiÈÐR|ª•ž]Ù˽T¶h¹{%GN¡ºÙ™A$ƒòz& îÐD»(‰)HtP¿Žç ü•È#GÉHI³%=þÀ%CQ€oŽŒÌÔÎækû‹Óø’j|ÿܼ¨¹RÛfêÚÖíTÝ ÃOÛ‘b'àVVÑͼˆîUO²Ýèj­¿Ôý¯RúCÁöbÏ¢Ä2;æÖ*²OšiÙIÉè?˜] ú‚6ƒ‚Œý{Ù £ÜÛŸÎ4F…1@ô Ћt"ÏH‰:›X"ä†dn† 5é#<8]m¼ wÑ=6ÈúSOàI;Åa¯äçκÊúžÙ#Ö²Ô¼´¯…¹š= œ•³ fGyŸÏÕDÑå™ôœÕ£ Ðì'íÇE^ûF=|ö—»ÈÙ›q…Ü(€ P¤h3]R@Æ-ê5ö="JÌ|5ú؇áaHQËcbÜì¡cÄC‡ph:ê­[yvµÿ4#VÅ1 ®¡7"´T¥1^1uGó£§ý%<†.‹ f‡,¨­s>”=Wï¦m˜ ¬ÓžãcÙelæ'Õþ‹ 0}Ø´³¿üG…Š÷™¥eÇ+Æü{w˜b{„¢¤f¶UœqÍn±ƒñòµ£´üÕlµ–wƧoý"¿rN'®®úÿ·Jÿð{c^€è^Öo ÿ8öf¿䳤êcýjrÛ‚ž^ÃD¯ö×+ úÙ÷ð.0ýÐïRà€`%ì~¹dÊÖdgøáhà_Û¿Gõ£üR½J½X˜õ¾µ}ªow–Û>f^11¿8Ÿ¶›Ø jÃ6¦jâ³}"—Z£¾À‚Qzì±²ÝúM®û ¤}dÄê’ùWuðpö0R Å”p… ‘hª2©`º{!ÓE8ë÷Ò ë1V3…ºò¦}'IèŒ`‹¯žf3n:()Q\gw]-¹XC·¬RaÅpVt*º+Šjm)÷™»Ý“U¯>"Øo:öXXsªÉ*É‚vìÉŠ2Š> ­O¶H!›a”öÔN‚ð Ò¤8}H iñ/mÏÇw²&vW¸/~ëÕÂŒ«âæ– ,0R¼pº rÑOÇ’–™ÂrNeÇ.æ4õñ†å4S–¬ )ïêÏ®J _K_€âq¬—ŒÿÖÎ7³™0׺ç¬À·ÖWû*%Û%2Ã$B\ú7®t7G\]BÎŒ|kèÖÙg^(d¬LIäzŠï ü=rŽÙ4Ox âî. *Ê®h<‡eTkΗÙǰȧ0ªC‹YtS8ðîW'Žl½…c:”‹Ša!o¡C¢ñÎÔ__Cyð)±ât$D®ž°>”øÖœÞ}È”²Ãž¯zÁ|“\÷hþ¹ ~ûÁ”C6a,jþ¯ÿjñDåŽX‚Þ㹡ì+dÕaàÀ0¬ÿ"|omÒ ¿ö¹éµÎé-*Éwó¹{>µcˆÓH¤Ój s@ò^kº¤PU>q’­r¡@Zê×:à¾V;KÞb~Ï´ÌÀ$(uø.â@;“çÃt¢ô¯¹Z¦ðîœR/«j\ß{+i½À˜rŠ ê¹BÅmÝ×Ûve_â÷rðЙÐß–4Í,íųEãY†öRÿâ)%n>Çr`îÝÇÁúwÂ'ðrÔÅcù›š!ã A“è•AçMÑß3¾çïwOb¡X}¡ð¾%m® O=c¹UD0œJ ˜ÿèpJ"+Ùn$‡bZß÷W psyšÉ¼[Û†ËÀkÁ<ÅÝi U"Aj‰x:ErþX*„â½ËÛd{ôrËÏ£!bœÎ–HÇjÚÏ¡«Ùœ…êRNF¬PÙ‚\v<Æ“XŽ-™†ëd’í`vô• §»u¿¹ÆV¢“ö¼èr«AvhÿÄ:PÌr•¿I(åß×¼Ù$³®2Ì:D¿÷JܧŸ•öpŒü¢¸ú”/¥ª½F—ŸÀéÚKj%¥¼|©Aj±#± (Ò¤mqrXll K×Ò,gµ‹·KæIQ¶,CzÖïšO! }Íοì¸vPÓ?"ŽÄ)lÞÉ¥mîÏzj‚cbÈÈØÑ­Ëmhñ­‰ŒZÄ¢¥“ º¹¹ vž‰/š`3ôÅ^íoÀ½ÈlQŒœmk®FŠ¥X§­ˆr3½:Î(mRÙ˜‚Aâ‹b€Ê2—ó§VÒß>Ð^ÊͧKîCÃÀügD«¥©ðPÓ´f¢ô¸dÒ;ÆCH÷"ë8àQ‡=Sv4zÚØ–+å½ËÖ`’ûÃ×{w)ò„$ÇðˆQ4µ°$xçÙ³ÿæG޵x8ϽÐ3­hÕqîJ“襅~¶kOŸ&Ý~ˆº'þÇÀDoÇ2Ûü> ZÏD¦BWësŽϸ_®™Û /ý; ô–5(x•¾½½[?›"ƒ®þÁ†¼q²`6¦™kð—=xoÜ¿ Vyƒ‡ª\p&òDZ¸Óš( €eû{FúhœÍ‚ Pøþ '(ðF¯ÞÀËüÊ´˜w&=‰Ö"«~Ü0’‡t‡à<âÚ:¹ÙÈ„‡;Š{Þ°º^ŸŒ;‡D%G6.]îZdukY]7ê}ÓᕊbÆ eÄ LüG‹¶q² À93¸ªýcºÑÓó¥ºntÚ°i…€kœûÎtÊIÑ B^ø«"ëõY+Iõñú²ÌµAhšd™N•a²±5e–²ËYÁ¡,2ˆÏcÐ/ôóo«M¨5ž×Šy·.¯Ý{g™FÑëðpY[OE^5­¸Wz{ü$¤É ÏP]óž™náˆÚ:/RC|ê¤y°äW€Ëa¼ ×Þ:寔Ç&˜…yU€›¬HÐÆé@;(¤ S ÷ }»ˆ‡Ãé®8m4vqÈ–BLÌ ’eèÖÒ´“½¨ˆGÔ¸¾-—°²–ëï_MЂ}TKT`*.Âl$bµØ3·d”Z‘€þnú €àN~òÜ–Ãæ%6¡o¦+üR ØJ¤ºw)ŒÍ->þ@'CÄ5L¬LÐIt¿^Þv̨¯ßêìZñü¥Q‰L–Ǿ2»l?ð¤%“!0fø.#[ˆMž*æÞ®º§†šNŠ=8MÇÒ-ÙW^´Äûß`^Ð4>=§ñ{~ñ~ÿ® í­XKÎ2ᚈ›ëúÏÞ®uqö\²Àóè™I{»æ_ ÊŽÓ´Í‘5g.r¿ñÉ"bú•„Zg;tz¯f •-ðW —á.¡ÝÿÕwu‡޽Ûî°,K§ÕL(ÃF‘Ñ(a'£ÙϺè|•8f#iÈA"‚¸ïL7Öd:ÿø`·º-õÛ`äg«O”Ú~65oÙbÄ+³ Xˆ©Q˜[$q¾3ž#Ìÿ+âöŠæ·ðÍh¼PÉ8.CÏñ3⻉Cm³è[™nœµ°“ö€ˆ'#DÖ8ß1w™§TóE,/ÎAIp#k&6Ÿzr¡ýÅ»žÍ½úÊëy³üù³/çôDî¹d¦Õp¾‡x-¦rÙeyìh¼É)š˜¶µ±–ÜÈl£Šßk? ’|Zð©91Ê›í+ÓÆ‰ê7Ï÷ó=Ø®j»,÷ÓëÚÿÁýSÁµ¨dbwÐÃR¢a+B$‡$ÜôRt³ïžøs- áÞ¢8;`ÏfŠÛü ýL³Fß#è?ÌŽèÉ@q±‘a)¦ H<ž«¼ñõRS ²dO÷‚öêjÿÎ+ð¦+”}6_Ë_(!ëÇü*@«&âZ€a‡9qƒÉ,<.Z‚¢'v“’ëQl€¾ÂÏËÛgsw/ÈÛÉ«4žúsxß[ÎIÂzÜ’'Ée‹„9ºÿ«D…ÙÚ¾ö›³YÖ‚¶þÍÝVIMpK‚ò:"¢I3™ú\ÔÏ7½ÅhíËV\ÎÞ ,'L ÙZ `ñÀÑœ?pÓ‘ÏaçëB›KÅwxÝ bç¨U¸„ÅS³¿Âr•ÜŸ+ëŦ‘”¤XJ È¡-:á—·“å›xê;l½Ø­UBƒ©ËwŒý‹Þž+h1áLäžì®ôØ2Ë2oQ剹p, b\:ò5(–’à >î†Ã!§Qv¼BÅ­øó¥²÷{ìùšG¸d ó\ä¼S¬ŽkÕõG¦Wœ%sCªœ%Ísç&Â\ ]«ˆKÕ.qÉY¯ÐÞ\‚úf·8Αê…Ϧ˜l “Ÿ¾‘—ž«­—Ïàü~™›ŸùmüŸŽÚü7~ ˆè"¶‰Þ˜p¢®¬£T§ý?PK 2¬7Ž ;O O Toolbar_Network.pngUT øÅF—–óFUxèè‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î< ÌIDATX…¥—[Œ×UÇûö]Î93sfÎ\=oc»¶ã8—¶‚„‹»¹”ÞúZ¡J.RªPª–¨MUTˆ„Êâ%‚@â"J´P¹MÛÄNâëØ3sfæÌ̹|çú]÷æÁŠ…c¥°¥ý²öÿ§ÿÚkíµ…sŽg=õ³/Øm ~G y,¼Åjµ4Ž »ÝˆÖÒ8~sØK¿¶]ÿÊî‡=O|€ ¿òu£1üæãOzæÑG—+Z ””t»CŠÂ‘Њb6Ö÷ˆÚvw¢V3úfýÖ‹Ÿÿ<þ“ôÅåý3¿÷±'z‹¦h·GlÔ; F)Ý~Jšä$iá¥@¨ÎŒ“Û‚ïçz¯¹×}nëÖ—ÿòÇøò‹¯ßûÁï?þØòÉ£ÇæØ·4 Bò­o]!êÇt¢˜;õ.&Ð,-ÕF´päyÁô|ãk¬µ\{ƒ+oÜøûÍÕ¯<ó0ù°àÿ_ý÷ï¼[?îøÉ±‰fk@Pò±R2¿4ÉÂþ­AŠ3Š…ýÓL/N16?I{˜¢yv)¥–ÌZŽ®Ì’Y°ÀÄx‰4+˜šØ·¯ÊêF‹·o6é 3®¿[G Ah ßO)…†RuŒåùqÖo‡Ì\ø©™¥‹/í®¿tñ¡üê3/_8yrñœÅ‘d–½Îc'æJRA ¹¾Öâïþå*Â÷¸¾Þ­({EŽô ³3t`¥Â”Bê;=®Þn‘ä–ñ±€ƒ‡g?;»pqö¡l7væÌa”ѬmF>2ËGÏ.g–(!͵Ùqžxb™åƒ5*c!×nîrgm—$ÉqF3;7Æ[×öž¦ÙaÅ®¬ÝØ%éxôì¢lïþøÄ}:þüùc+‹K™³Dý”àçίç–aRàùšrÙ£°ðñ'—™ª±ÅBÒYb~ÙãÊZD&…Tx@úSö©LS¯’IÍôbíéÃGŸ¯Ý0V©|ÎIœX„,ÌO€N€ä…#dOQ‘ZÒ3Þº¹ƒÓ’nbIÀMj´¯°ÒuczÂÅÃÓ:yhD`„ ôçîpB>õ½ÖI³‚½nÌz£Ç(Í)¬%I-N€J¡anªÄh”råÖVJR'ðƒô5N+0ŒÁ“æAÙGH‹ôB¦ç§‰Óì7î<÷Ü_…5î”àòõ]®®6ñ}ÍÖÎçHAàkªã>•’Çí­ˆú^—ÓG¦X^œÀI,%Ê78­(´Bx ék¤1_¡ŒâÔÊ,Æ÷pJc¥¥{[Íö1ç V+Óh¹]ï²Þè³¹ÛGiÉõ›»=†qÆæ^Ÿ;;]”Qx¡ae©Êé#ÓHÏ ŒBz´F{ ­%hA¥âc<ŸS‡§RRP ½Ð»WõõèLe¬DÔMÐF2Ê¡noEœ:>Ç¿^ºÃ¡¥*ž1LLÜÍ $R‚\¼Ð q8)°Y²‚Ø ¬vx%¡—®µäH­±Rˆ©ƒg$€2R! Ýñ|ƒÒ’këšÝ˜Â9*cÕ‰BÂ0Ïiô3®îi 3r!iŒr¬V8£ïå_h…Ô ¡ƒ8¥TòØj @B©TÁ3‚") Ðê /­0ZÑêŒðƒTŠh˜òÕWÞà×ÏenªB!Û½”ÕVÂZ7ãÒzŸ×otèf€gæ½K¨(”Bz¥5ynÑ¢@kC»=B¹é2Õ_Þ–ïôZ7œ-PJ`­#Ë ’ÂÒê¥Ä¹åOþá V ¢´à.¼O#|M¡øéiÄ{Ûh”Qh-PÆ1Vöxã­:›õ&;k z­V’Þ»„îú7’nw8ƒV ¤ÀYÇ­­3ÕF”ðÊ·oc…Dyš˜dz2$,‚’Ozø¡Á÷5ÆÓxþ]¬T,ÏO²ÑÒ‰Ô7šäyF»9b4Šë÷µâR¨þk·;ú™ÒDén=K˜®†´û 3SÛÝ”>}Ξãã‡k¤âÜñæV—[mãò‚4`Ú²o¶LÔIÈ ‡ç)i vØÌýõ}ÈåËåPÑë§Ä£O*’¤ÀIÁ¾©Ê( Gf+h-ÑJ¢µä‘ýüöG—ø‰•„§@+œT+¡§‰ ZXláÀiÆK†æn›Ôæ N=ù¥zTöÅJLVpa@8YƯ†vö‡'O:ÖBDÙG–‚ŠÏr5 p‚Ø9º¹e{ÒÏr´VìÄFB'¨N—Ý«kÿ´qYü²s/ذºú1pâôǾøuJãŸ)YôÜÜ3‹U™/Óè%U¥9Ea ‹¼¹Õ#í (uz ®¯«;ϯ_ùÂ7ÜÝöðÀúÀŸ‘ž}U.Þ¹Yõq^™«ý¢˜«…óËÓ=8ÉÁ…qv9­Q4d ðã”îZ£»½ºõÊxÅ\üÑÄØýͳÅÿªñA§óU/ª…32óvA*öå½è19è}¢é E¢…q…ˤô†àm36ùš®ïØ‚M„Û,F¶Q_yfÓ½Àö(f>ój¹”3ærk”`ÁfIÍfê͓ŠsV !s”7P¦Ô‘ÆßF¹M—¹†ôظ³¶Ü?þRòrà=~ú êÔÌIJfPå¡Ññ m|ßh›k¡E¿Èò‰Ì£] ‚ƒy¨¼¢<صWN=›ó¹ùoˆ‚µ\K˜•GIEND®B`‚PK Æ7± ¡Î˜˜Toolbar_Messages.pngUT cOÆF—–óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME×. ”˜èq%IDATXÃÕWMH+W>çþÄfŠ6jQü)iõ¡P•PE .K㢂‹ ¥-dùÚîú6®ÛºµÛ‚tñÜy¥Be…”GÚêFŒF$Æ¥O©oòc†Lfîí‰̋“LÔBé…Ã{ç&ç;ç;ßáÀ<°‘Csssmmm)¥3Brg§ˆ†a?g³ÙÏ™×áh4ŠRÊOÃáðÌðð°±>f)¥ç{!DS2™¼¿¼¼¼í ˲úººº^1MÓÓ©”òÚºú™ýýý”R:á @Q4 ±ft•ýê¹ ÆØåt×z©å¼˜k@n@:A¸ýÙMA¼ b @EQª#¥€ÎTzÍNºÜèp¾c¶ÌÞ€÷±‹RZ €p·666Ðçó]‹ zmY´¶¶B0¿ßïZ Îß0»Ò„B¡ÏÚÛÛ5d† ó$%hš»»»066V—Ž+Œ±C¡P+¥ÔSÇ^EÏç!ƒaÀ9¯ ‚Ù-MMMP.—à&-çšs>Ÿ,˪ȭ~níM%w'Ö*"¯Îçòôõzio$òZgX#é¾MÓAÄ«~ ¥§º(¥`Y€Á¼ÒÜhÚÝúc 8ç`477ƒ¦i ¥”†aˆ¦i~ÏnâüÙétú¹eY“““o)ŠB4Mƒ………?¥”O± Ï8çY#ÅV/B7n%clskkk¿½(ç|«P(|1??æZn½ú6ò³¹7“Éä/¹\îøüüü£ŽŽŽEQÞÖuý½¾¾¾G©TÊYÀm‹AANNNpee剉‰½‘‘‘Ÿü~ÿ¸?55µžJ¥ÀbÿVôUEˆBªëºO×u¦ªj^UÕ'CCC¿†Ãáw !¯÷ôôdŽ/)@Dy›ŽçæÜ–›´,KB,ö]B$ =‘H¨öž¸¢@J¹¯iÚpKKË•XMÓ„r¹ Œ±kýÜëzzz*ŠÅ¢–ÏçsPª°g `‚èºþíêêêWœó)%éííãããL…BAlnnÊ\.×pË6Mó÷R©ôhooO³‚ùÓ.)Èd2Ëggg¿™¦ù*¥t€sþ c¬ïââB®¯¯?_[[û:“ɬËËv—“ˆ( !%¥´b‚’=88ø L§³Z R±ÎÎN6;;ûI$™ ƒ¯©ªº»½½ýÝâââÙlVÚç *"ËÁ©Óª÷]ÇK2ŒD"orÎ?<<<ÌÇãñÇûûû?,--횦‰°XÅ)ºT={^µÉôô´ppðJé;¥Réi,SÓé´¨rŒNŽÙ-à•ÑÝÝmÀ³b±ø$‹ý}ttätHjÜ Ý8÷îôqŠ{²Æ·Ãÿküñ?²9‡òyãIEND®B`‚PK Ø´$7¡g&ÍÍToolbar_Import.pngUT XÂÝF—–óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME× &0¿µË5ZIDATXÃå—ypÇÆ=;³+í®VÉ‘ˆCBR¸o„!d° ÁvUpl‡ØæŠË&.BìJQ ñ9*qˆM0qR‰ qÀ˜8•Ì%° ‡$$!:WÇj43;GþÐ0H ÿ¥«º¦§çõô×_¿÷½nø/b0ƒ;v<"Ëòo(—Ë…$IضeY½Õ4ÍÞgßö@}@»iš_•E(Äk+V¬ˆêncš&²,ã8ÎMv}ßï°µzõê×`YVŒ®ë7õu¯à*’$aFŒ4˜aêÖú ~ýd4‡ßXCcUñM6¶ÕÈÐBŸÈ`¶mÊ”Ïoä‘]ìýAÿÚ¹’°®p½üÍ5ÿ ¡ªäŽ&wçÎŒ_ø,¹‹¿ŽP«x}mõ—?¢ºä ºÚÊõ²Tí§­¡òî1`YVoÛ%+,ÚpÓG0:s§f³oK8EÝJcu %‡~ν™ó°-³wkb@þ4 $ŽžIògPtì Ãã%2ÓFPzèeb“2Ñ5˜øDömÉ¥åzŽ#!„ÍÔ‡¿GVþJdwäàæ<'o–]n¿cÛ?3-ór_zÊìe?áÀ¶%T×V‘èU‰ñ{èl¯G 5 +ˆŠ‰#çÁå"ꪊ©ø`;§Þþ>3¿ôC2>·É%÷À±II9éÑ–Pãì+õåë SÇãñÐ7%ÉÅ}kßâíçRÓÐF‡ª“’1©÷ã˜ÍMu}o’Äú7ø†z8þÖ·¨(ü Ÿù3¾èþ0oâCÊ3—MOO™´«Ö8Kmcõ-6ŠÇGþS¯ÓÐfÔ„<Ò‡ûñ«¥ÐXˆºÄ´éÓ‘Ü^ê‚—ë4ªt$%‚Ú²ãìÝ’O{cu³×ËÏáàí#Î㉉uåO[2²øÜGüíôNæ¤/bDB’$a…uš®žçÈï¾B&9izs1º€Nµ] ÑÒQÃØhjBAæ|åeÆÍ]¢KùÃZp°mÙõÂý3—FHBB IHv| ÊÖ"$IYY477³·ðd§/aâÈl£“¶º R§,"XSHkc-'ëÇãmŒâåž\kÒ@‰!šJ’ÆÎ¡£¥_ì=]ìEø‘$©k Ù1fD&J”CD@à ©²µHt˜AZZ‚V5þx7q 1¼[ü‹vƒ¢”6‹q9Kqp8tÉË76îdÞ¯Pãd°tÝN{æ§n¡=¬Ú;ù'#LÕhárS1çê>¤ôú”OÓ®',:Pí&êô‹îFƌřê¿ó›÷_À“ˆÇƒcÙMUeóò ¨6S©¯»NÞ¼y]«u»©)}¿ß—-ÛäjË%.6œì¢K]Õ-ãQ"‰pù‰S†#é «7²š¸#£ˆ7ÏóÀƒ‹8]Rίº'¯nvÈ Àá]ß$)}.Þ@ÂM`ÛvW*.CýÃ\nÛã"D.C„ÛÃ%9OÕÕkÌJ]Ì}“–õü…p¸“”(ƒéY÷¢+CÈË/àÙç'`:­íí¼ôj'ñr±m9Ë7¸•°Öê®×E$¹²@€$„š8Z¶ü^ü1ÄI#é¬WÐC2K&¯dÂÈܲ€öæ+Ôjñì+JcíªUÌŸO(ÔF{¨µ#ÄЄ!ø|>’RÒÙ}â ‰Ü΂/¬¹Y 5CÝô“ïøz£Pbqlìã“’£2-ŸSYZ/2“²É™þHoö ?W|‚Ãu£HKKfÿƒÌ™=‹¦¦FÔÎÔN•ææ Žm1yâžøÚãlúî†^=/ý±¹õ&™]'§X–5Ùjñšg/”Tç?“úü‹«ˆŽrËâÝçé§žF×:xçÀAvïÙCnn6¡P;º¡s¦ä,YéL™:Ë21Dï:1 £ Àí¼óôÙcF‡Ö~ª9ذ!Uu$Î?ŒÛå- ™™c—‘ÎÖmÛÉÊJDzÂ]‰+1¶HšÞÉ_öî'3#£w¬Ûí¾}:U5µU¯[š³-Ž:Vÿ©ô¡‡¿ÌúooBëÔ‡Ó4zmR’“))9Ë›oþÃïâÉG—õ®¼g+oaàíæf¸‘ÇS–š·x®ªª¨ªJâ°Ìg݆äæf£êáp—ìÂ0 .^(§ârQG±:¤(7—©……x½^ü~ÿ[ðÉI_ú{â·§?7;›´Ñc8^XˆcÚ¼ôÊ/A\’‹{ÂaÖœ)"kæLZÇŽåÊáÃØ¶Ý¥€ý10ЉÀårðz½†¦iÄÅÅ‘š:MÓ°,놇Ë2e\(-% ‘÷ñÇDúý(Š‚èNLƒèï.Ë2²,ãõzŸyíÚ€ß%IR›"Ð#¿–e¡(Ê-“ÿ¦¸Ýîö®fQÀÐ3f|1%%eyWï„Bheee?€Ä1€pÝ¥ùµnö;Ä{€ˆn@â.°0 ÿïXLÌMIEND®B`‚PK ôz¼6i‘T'Toolbar_Disconnect.pngUT Ü×ZF—–óFUxèè‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<”IDATX…í–ohuÇ¿WïbšŒ$MïÚäB»™2µÅ1§{#¾peèt¸‚£N¦ âdþÕ)¾ñâPÙÆPa³¬‚l2+2HÅv‚³ÈXkºÂRš–RÚ¦)wI.m–ÞŸôî_˜XãhÚÁ@vðå÷âîy¾Ÿ{ž‡çŽ!"Ü̫ꦺ߸p àðìöðÚ£¯ÝÙÓü‘/*‰co„ù®–Pc˽\÷¾Ç½Í—¥5JbW]]-¡Æ­ ?ïkáš/¥§{‡.>_Q"ªXGŽñžÜ*6~õ’;FgCtùûMÓ‡ßônª4WEwttø¢Ñh"ŸÏSôÏó_¿È^ÖÎÔÓÔ¹»G_w=P.fó=Bà†tttøS¦iR6›%Û¶iô/)ùK“tâU®¬ùÛÏÝubòÔýÆ™:´*€â›§ …™¦IŠ¢ÐØØ-ªÓ48ðû 1KcÚŸYûMºÓM‹?íS‡ï{aÅ‘HÄ300 «ªJªª’®ëdY¥Ói%Ã0èÒ¥K}¥vÕŸHŸÙ@©oCöŸ5¾³âD"O¿œËåhnnŽâñ8]¹r…TU%˲H–eŠÇã¤iE£Ñ>"bÞhõOŸÓð±°Ýu¨þÝa$ñ\¸pAR…²Ù,™¦I™L†b±ÍÍÍQ>Ÿ'Ó4I’$¡|>Oç=;•þN´§»7Û?}\ûÞrÚËýû—¬»»ÛSSS3¶~ýúº\.·Û Žãàñx ( dY†(Š`Y.— ²,c~~¡P™ø§4Þwì“G÷+—³ÊnB§ÓùÛºuëê¼^/‰A€mÛðûý "$ ƒAض A@D˜™™A ü S]xìŽå¶m ÃAˆ¢ˆ™™ð<EQà÷ûaÛ6’É$lÛF]]ˆq¨®®~x¹eWñüüüþD"Aš¦A’$x½^ˆ¢ˆT*MÓÉdÀó!Ëòû’$Q¡PÀ¯ÊX²ˆh Ã0ªªªN9Σ{öìY,½ßÖÖöAggg_.—;`Æç»wïî]9P¦ ÃpJÅ–è6ü]5ÿ¬°Kd•È\*"2¯²EÓªbrÀíKNç’“+\5¾š¼À(ªPÔbɹ`±èg‘õ}G ^(¾BïIEND®B`‚PK ôz¼6õ2ð>>Toolbar_Connecting.pngUT Ü×ZF—–óFUxèè‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<»IDATX…Í—ÏrG‡¿žÅlªXÇ!É•Wà9rYOÀ!öZJWòCØ–|÷Ëpâĉ0 JìHë?šÎA;ªÑz%ÖI¥œ©êš•v4¿¯{fzZ¢ª\g3תþ¸q•Á{"Ákicƒþ¨:(:§Ý"q‘Ô³ÑD©  ñ¢j­È¼…"°/Òì/,¬aÈLú]€z‡‡ëoEä‘êú¿Øi& k¥0¤Ä¸÷Y·¡NÃ>Dû"vQµþœøLŽ¸ÍŒu0”ÂÔ~ÑoU¾2Àç¹v›é]¯7Dõw"öÕ—…Þ{âeOÐ7'®©¨‹Œ[†(2ŒÄ/‡"ª6¾p$÷3kîDËÏž‚']üÓàNÀå%P%Iߢ/ߋ؇ªñD€=‘à Dç¹³Ò³§ÜZ^BÄ bø£Ý˜}¾Ìí¥%ܱN:»£å¸ $aÈùÁÁƞȦŸ'Æ2ákA†jnD ÆîU*Ü­ÒïsÞïçÞ|¹§¯^¡å2Z*1(•¤Ï6íÕÚ‘¸ƒÅrÑí’¼yCpv†In¨¤þr‹À`€özØ^0.R»_«1W]AQD‹…ðÅ ø«ÇQ£1òtêµ9À›ÀŸäþzÄüz Ãün£‹õ:ªÊÃz ÔÒ݈'ÎQÀe·Q’Y[evuUÅZËǸÉac`Âz k-óQ„XËq³uI<d à1h$ s¹ŸßQEÕb­ð)nò1ŽG»ýC£jyEXkAõ’ø0“jŒ9š-HŽDâ.D£lxÁp|µúˆð[k37ÏEkUŽ[› “NÓqw¡fj„ÜŠè@¤y k>ÄÀ3ÿBòLjN\<ñ;ÐZT²ZK²}‘æÉˆlY&ŒC8ñ³ôý×Ðz”#>à­q“Ë×r^EäŽàY:æ6´¾› þE€,D9ýn€Û”.ì· õÃñB>„+8&Õ„N ŠH!âSˆ¦¥ÎJÐü¾@E|%¸æ?&ÿUËMÅ"’=ÚÎÄë³É.[µçÕ²6ëð¤»À²Þg¿èu¤}ž fŸó¢ý7ôžýL"zÔ&IEND®B`‚PK ôz¼6^Y>’’Toolbar_Connect.pngUT Ü×ZF—–óFUxèè‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<IDATX…ÅWlç~¾»³Ÿã_ÁŽbˆc‡ %!;4‘`ÐE¨#…D ÖL4UYÙ®0T‘DɲÃ4Q¦Bɤ"¦2¨X•ñÛÆ´ #M±…F ,$±QÈÛ1áÎ9ûlß·?šxn e¤~Ò«÷îtßó<ïó¾÷IG(¥ø6ó­²?o„âv»³þ¯=Ï«®ììì¿,úƒ,Ëo¶µµ%Òß9zôè’·{{{ÿÝÛÛûgAÂÏŦ¦¦’ÜÜÜ+UUU9+W®d7oÞ\o4?Ÿuƒ¹yófűcÇÖ¸F) „|Iðhnn^–í­ªªÒsEQ V«Á²,½xñbpÅŠC:Î5==Íx<ïíÛ·«;;;ÃsûŸIÀ¾}ûì999×7mÚ”‘‘E‹Áï÷ƒNŽãÐÝÝM ‰ÑhD2™üeqqñ¯Ò1žºMMM‹Ífóµêêêl­V –e!Ë2 AÁÌÌ EAee%¹{÷.UEÔét§æã<•€––‹Á`¸¶eË‹^¯G"‘ÀÌÌ b±b±  ( $IB<ÇÚµkqåÊ•øÉ“'ÇŸY@ss³‰çù/¶nÝj5 P©TÈÏχJ¥‚(Š)Ò‚‚$ H’B©¬¬4¨TªžI€ÛíæxžïÞ¶m›Ýh4Y–333p8)ÑhŠ¢Àáp@–eH’­VËÔÔÔlommÝýÔ$IÚàr¹ , ™²©©)$ D£QØív°,›r¢Ñ(¢Ñ(233ÙâââÃuuuì&÷?VÎȲ|ÔjµþÔçóqË–-Ã’%K`µZAA(‚Åb,˰ÛíðûýˆD"`YZ­v»ƒƒƒsíaJKKSŸÞ „d2yvçλöîÝ«ÎÊÊb._¾Lý~?¢Ñ(rss¡Óé …L&‘H$`·ÛA)E$A$Áää$¢Ñ(ÆÆÆ”]mmmÊ>»ÿþoÇW__ÿZaa!PVV†ëׯctt<ϓɃÁY–!4 !0™LƒE¡PãããŠÇãièèèøm:þ7:ÐÚÚz¬®®nÇÒ¥KYJ)Ìf3îß¿;vQÑÝÝMûûû‘H$`µZ¡Ñh055EQ‹Å R©‡199I½^ïöööß<âðB'aKK˯kkkJKK9EQÀqÔj5EÁðð0 Nœ8AM&***ȪU«À0 ÆÇÇ‹ÅÇ ¨×ë}ïàÁƒãy¬ÍÍÍ¿¨®®n(..æX–ÅØØA€$I`v»ápõõõd||===Ôãñ€R ½^A é7>œ#''ˆŠt’s¤“¼´ {7nÜø^YY™™™ „ÀçóÁh4‚çyð<Y–122‚D"3gÎP«ÕŠåË—»ÝŽ`0ˆP(D½^ïÙ¼ä„Å>ð}P¼LFÿù5MMMo®_¿þÃòòr•(ŠNžçA)…ÏçƒÉd‚F£AVV$IÂÈÈDQDWWÕjµ0›Í$//öõõý©­­m+¥”‚“8à´ZÿNL¿—jÛíf¬VëN§SE)ENN$IÂÇ!!°Ùl…BˆD"˜žž†:Sˆ1ŽãPSSC’É$•e9ÑÛÛ{‚RºÎU÷:Áâ °ÀlÜAvõõõ‘’’Òßߢ¢"p›ÍŸÏEQ ( Cê™ÑdÄ[7ÞÂ…Àœ«8•¨‚Ãá CCC[ÚÛÛÿ’êñirÞN«ü8l ÛéÔ׆°««+F®^½š¸uëA@<‡Ífƒ$IEápjµ6› ï|ùÎMœÃCå!^õ¼Š>¡@`D£Ñü-E~–ì‡}i•€ÁKt;Xp~Ÿ••õºÓéd\. †ÏçƒF£F£ÙlÆûï£ùvsjŸVÑ*Ѳfø'Ã_ù„ìÁá4èQ$ñ]úJç{D€Ûíæ†™$Éät:IYY, (¥ðûýàyÐëõx÷Æ»8>þßÍ÷ÁàEP¼ ýÄ›PI·ÑÌ[ÍE±ÿôéÓÚX,FœN'\.òòòL&á÷û¡×ëñàÁLNNâÈÄ‘èg¦Ï2ç‘YÙû0(ÖÓWè¿æ“9ˆAø!Ã0YµµµD¥RQǃžž eY,^¼¡P˜.ë++‡#à€ÙÈ2{-€ÃÆ…Èq`÷îݦ¢¢¢OËËË_0 Š 7ÏŸ?¿4‰˜KJJˆÓé˲ƒŒLLL¸:4äSÒ ‚]iØ3 ØD«é?"O9 ×ëMëÖ­{RzœRj÷x<•ñxüÅÕ«WG£Ñ,åyÞÛßßO/]º„;wî`xx8:66V1G¨ÆÏÁàÔì´ÇÀá•'‘§PJA)]A)P±gÏžn—Ëu €ÒÖÖ&ò<¿†çù§§§•ÁÁÁð½{÷Ötttô§QPŠÏñ#pø*ü€n žDÌk!„  š.??_ç÷ûcøjÀH ÌFr^ÄÓrb.SJ“)ä«ÿ$f–L–çGÆlñIDATXÃÕ—Ml\WÇç¼÷æÃŸ“¤±Ç6`ŵj*,X ¤‘M…²€E‚„¤."Q• .X¡ŠEY°eâÙdÑØF"TABˆ –)Q­ŽIì*þ»öŒglÏ›™÷îaáw°Ç±uÑžæÝwϽÿÿ=çî½#¼€]ÿÝÛ'{Ű]ä¾jfùÈÅc¸_½õë*€•“gÀë9‹i±:¸"­âמ‘¤$‚ÉQïÝ»w6NÿRD®˜™¶ö‰fÖòÅHÛ">•ßQ©ãÌ#Š»©×3Ökaõä_'þôèuÿ0ð;wýdxxøJ___ºO“€suâ(Ê á¶âjóôö"5 #‰ço”“¯¥S•ŸJ •J©sn¤««+åœã fÆVùýƒ„ÿ!éÄ"’©ÇÝ$ý`U°%°ˆÑÓ%z"³õ­C A a&[WÚÎD„¤w›ØJxú BÏA-KlÝxR™·¶‚ÈIzºÂ´ APy^øÍ­£ऌ§›ˆöbœAýW@úqñ Š!R[Ç(òÒ)ß÷!~ä HTbÌé9…x/ƒgi”$PD¨“Jyâ·Š-•JI{A¼½À­©Ø€Õ±Xq  ¶ŠY±æ–Cd(ÚÀl•#Aì<ç7ÊìóÀw€6¡VU[\\Ïóö…¥)LUA웤éJ§P-ƒ<ç]ÛÄ“eªÕüàsxÚM½Æ~Céo ü´££#Ó\ÑGÚ/œ{•¸ž¤ZË¡ºL:ñ Õu¢(À¹ æ6PÿkÔ£Ìû6 Ë6üÆ488xBD¨Õj¨*G•ÇÞt¸Ø‘Я œ7‡¹-°MêõŽWQÿMLbÐ~¢8·“3ëñ<çqáœÐ.ÜÚ6D2Tãï³½ù%T>F4™ÃôÇ}¨'¨—¿ýä¼xsœ‡‘ ´ù’é>+ ‘z¡P¸Á»þauý< çø›ªþ;ŸÏß~žÍf¿˜J¥¼r¹ü8—˽yíÚµÕ¶"K¥Ò¹\îééébðÖg'¥Réöêêê?óù|&›ÍŽŒŽŽþFUGœs¶°°ûñãÇïÛŽIc—³Ó§O[__Ÿæyž +‹NU7fgg—¨¬íe¶±ak6›õ/^¼˜¼|ùòÇÆÆÞÊd2½³³³MNNþþÆw2™?ð?¬V]¹\v€A€ªÆ¬¯­×6J¥¨%¿qŸez{]nú?ñAv«`yyÙ©êËõzýòâââæøøø»<øã­[·>Š¢H666šaT Õ‰v±5æ’†OH>¿çó+­—Z¯1¾é[kŠN/]º”>wîÜwEäëårùþÄÄÄŸççç»›O»¼J«¸ï­UÐV͸ÁÁÁ¸†á{“““kóóóÒ˜TvÏÕýwCÛ£p·çÛ¡&Çì“=àíþ;üÙr{‹D'}áIEND®B`‚PK C´$7%©NToolbar_About.pngUT >ÁÝF—–óFUxèè‰PNG  IHDR szzôsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<‘IDATX…½–klÕ†Ÿ33;»ëݵ_;±Ç'qpUB †â@«^„Ú@A´8‰¤¥"&Hü¡´r­ªATib‚€ÞD+h(" ¡*„¢Ò*©É=] vìÄvã ¾ïzwç>§?ØD¦!äå“^4šùÞç¼ç#¤”̬'šÔç$žÞð‚gó.圪’(˜»h³¦©ûÚšÔâÏÀóügÃ91ké·-QU%ÞÖ¤Îþ\6¼àí‹–U×kËW”ªªÒÞÖ¤Îhm ÀÓw–DÏ|¿ýN¡~¦Žeþöd×~»¼òJ¥îK7ÎU±§­IÆz¢mwG昺}Kk«P¶Ü÷Í^%¯ê3ð|w¼]f¦)-ˆ*ÔÖ(ŠxÓñÄ€";U…Û"ïGoˆ§2 §B´Ý%ª¶4‰Å­kDèRÄÿî‚3õä*í@ý5Ë—êÖi¡åÑÓÓmŒO¼¬‡g]çº^À÷ñƒºÖï8‰~éÉÛ#ùÅž*ð’“ãa„?)}ÿ11éÿzý_¥uYmMêW"¹E»¯ª­Û‰ÿ „ 8ÜqÜê±A]m´ì ¶ã.(­,¹¡ñf= Hl#‰ãzLŽr¼§331>fHO{϶¼%ÝKغR}£ººæ¦¼@R8Þ?åX2HieZQ]«d’ãrblH œzŠŠyT–c¥ÆqU6Lzû‡Rét&åJ~øÐ6÷•KhkRkµ€~dIua8™L0îиâ~ÖöT>žšƒ§Æè<ºW÷“ųY¹ÑH8špÒ&‘Lqj ‘ö|ùª˜ôî9-ŸMá¹9&WËÓ¿z{3ŒîC³Gq›L:E:••yU ôžèòOö¼ëIä!”2„(ô}à*ßóeH }h›·ñLÿÝgX™_íùáh2ãh ë¯ENvâ%ûq]Û²°mDZñ쉾·™[Q¥H)Tßç-×Ðü¼I\át¼Ù®ð–Há_‹ôÿ5ÓC;¯»BÞ]*ŽÂ/(­RÒ{ÁÍ %8¶…iø¾OÚ rÂXÀÂp‚ÜXNjj:ݵ~›àOÐÒ"}`2«sê¼ ´þ ‘¼2µCõD+ SãüÞ7Ÿ·F30éãy#n)ýsÖóuϰgòjRäÆ,æBs{!€–é·´HÿÁ—’Ý ø®™àµ¡:îø ßßð Çs›°=•A¥Ž;šÖRTTÄ]«ÖÒg-š*/Æüf–TH¥“Xz9‹-F×uV|ï>޹_Ä Î¡»»›öövJJб <)ë.àükà#”bÂw3å¡`€íÛwpäÈæÍ%=1BooÛ·ï ËÅ2hBS¶®W7o“‡/Üû"J 9æØ6ÉÑ“t¼ÛÁÐÐ0‡¦ã½Ò'yàõìÚµ‹={þI¾ÑÉÜÒX¡n¿˜sá¢Ã÷<®Žvð—]/óâK¯`³gUqÐP©«¿ _ ^óïä‹ÐBT„§K0äàþO b~@•DC ]ñ½ÌžWÉ×nZÎõ ÔÔT£(ŠŠë9Äãq6þr3eùs"KÂïÜûÄÊÀη9»?€ïËy½c[ßžÏ}kÖ°úîUøÒÇ4 LÃÀ´L Ó@S5"‘ápˆÂÙó8: Å2};{DÑÃÏÉôÇõ¾àxr•ÈíOç‡þ/&'œCyy9ããcLNN0•œ"‘LL&p›ö}û0 Çuزy väŠÐ»#å¿;_ÿ tŒyÿÔBõž{Wc9&?ßøƒhš†a¦`¦ç¹´ï;HN8Äu×.# ÒÜÜLOºòÛ— ð¾1oíºu?W-©£~q-Š"X÷£õxžpBú>‰ä4‰©)®[ÊòåËI¥§‰Å¢8¾ð.@QBsÊËÊèÖ®½[¿ó-TEòø¦Íƒ!Lóø¥”¤Ó)r"9Üqûw1LÛ¶é=Õ‹¦i£— rÔ±¡áa `Ù7\ßÀšÕ«Ä03xÞ‡ƒs=—H4‚ÐéìêÆumÉ$[Ÿþa™G/@¡ !Âcc£­O<ùŒ5==M$'‚m[œ¢´´Ûþèu϶,®aÿC Œ°éñÍ„GÆÇÜ-„ÈB.5޹@Þ‰cÇÆÓ™ôæ6øà±Gà3ÌÓRJûœf@(€žMBÏ*•–•šB1ãW¿‚?…ßG 8©”2fY¿j†¶ìè3Æ;ç«,Ðc%k~@dVàß Áëaîßà½7À‘Rúçëý_õœÀ,PÕnIEND®B`‚PK {u27áïî44Client_xMule.pngUT  ÈïF—–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×  +6„?êÆÁIDAT8Ë•‘OË1Å#)"4‹I©ÉŽ,,$kYÎ쬕…Oc¥|>ÊBŠ…,ý™DšfR,†Qó®ÈcÒó¼g{û{ï9‚¦i¼KQ§ßï üQžO˜ÿ”÷EñW³÷ ½ïƒr¹Ìr¹DQ§Óé ë:º®³ÝnÙï÷Ìf3>ßó>·‰¢Èù|Æ0 :«Õ Ó4Ùív ‡C×f×@€D"A¥Ra2™0X¯×_A—A2™Ä0 6› º®s8øKžgX–e°X,¨×ëT«UšÍ¦ó[3‚¦i(ŠâT«U®×+Åb‘Z­† ´Z-lÛf>Ÿ¿€^¯÷3Äç†`0H,ãt:a•J…H$B8¦ÑhÉdǨªê¼›xžÆb1r¹Á`Á`@&“Á¶mÇ¡Ûí"I¥RÉ¢¢(ŽÏçãz½²Z­¸\.˜¦I2™¤P(ÍfÑuý{ Óé”T*õo·ÑhY–‘e™Çãá1ŸÏ;¢(b†kX*•H§Óøý~ívÛ¢Ïçx<Ž$IX–ÅñxÄ4Múý¾ ªê ?á× ‡P(D(â~¿cšæWàSÿèýÕäì7 IEND®B`‚PK Hi7@~ñ [[Client_Upload.pngUT ˜_ÑF—–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYsvv}Õ‚ÌtIME× '6mèIDAT8Ë•“Mh†Ÿùß™ý™˜Mv7ÍJM“Ô ÑlYck°ö PГÐVôÖ‚Dz+zðèU ÁC{"RƒXQZ±¥bÚÄ6Òj6¶1›íN³3tgvfvv¼Ø%‚û¿ÃÃÇûÿèùãgÞ›9úÑ!R@åÕÓMWÆÎfûӇ塋ëW¿¸ù2ÀÓ•ñ÷‡‡Ò-·Mg":ç½òáÜSƒµ]^ȾnuÍ –«-7¸{ñ§Þµüíaÿ±g^<8ýý@Ö”½v€U¯#ÐtZ¸ëKøÖM6£Úàn3É˿ܨ½ñó¹·DU“çî6ìk)C')wÙÿdžÉ]yFŠƒ¨Ã{HæJ¨öuf†]޾¼wo¹TøöÈ;gŸèy°zåüù–1ýei|Çñ±œ¤dMbˆºF1m%‹ènòëâ%DR¹‘„SwâÉ3îÚw±°ôٛ롳¹8ZìGWeô„LÊÐèÏ¢Lv犢pýêeL±Iitdz“#ù—įì,d‰‘Dh·YDSeô„‚’)¢ë:¿]b¬øˆ0±»°ï_€L*1Njš‚,Šø~‡(Š‘E #݇išt»]œ»·Éõ¥s½ÂN×±šnBE‚N„µuŸN,ïÓ‘d‰f*…mÛ„aˆµ±† 4öTžéëTU¾tºGîÙ÷qÛ!¶ãajB`‘L&Q…0 ñ<­úŸèÊÆÜDi´ÜXŽw*¡©‡×ë¶`5=÷ZCB»Á…Ï?A|ßÇqLÓD–e¡¾Y{«çÁkË×jÍSˆ"-?dmc‹Ÿ–þs’Ññ Úí6Qá8–e±²²rbaaaUÚ^ËZðÂ×ù‚ ­¬Ög~¼R«w¶øýv“š-Q4]\·EExž÷•ªª'–——þk ÏÍž.ÛNk¶ºjü( üQ.Xß<žsg†¡(Je~~¾ú°ËåäÉw§^Ÿ;¶ýö7ÐR2ÙŠiF/IEND®B`‚PK 77[Ö{ÑTTClient_Unknown.pngUT z’ËF—–óFUxèè‰PNG  IHDRóÿa pHYs  šœtIME×!-Noæ5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPÙ‹o²IDAT8Ë’ÏK#gÇ?3“lú5²#›bn‰x«ö¢ ½I]ð¢¡=Í_P„Û£—BK!„×€—…Á ´”à¯hÀ„€d–LÞ™Iæ}§—š"ËBŸË÷{xøð}¾€ã8FµZÇ¡Ýn›B|ß×BlÛ¦Z­òµ1^Œã8¬¬¬˜ALyž7j4ïr¹\§×ër¹ÜW!Æîî®y||¬ŽŽŒñxüÖuÝ`<ÿÁïZk'À_À¯À+˜éy^ 0MÃ0 Ó4·¥””ËecŸÍÍÍôêêê ”_ÒN'''1€çyz8*×u[[[£P(àº.Ýn—¹¹9³T*•?K¥Ò«Ìszz÷z½l"‘Èåóy¤”ÌÏÏcYwwwضÞÛ¶ý ¨T*LMM!„ð=Ïc0ðôô„”’^¯‡)å5`K)_'¨T* étÚj4Ÿ ÃàùùÛ¶¹¿¿'N“Édb)eV)õ ¥D)5XÅb1Y(‚d29†áwÀý~Û¶™™™azzß÷ËËË7Q寮®b!ħÅÅEšÍ&V±X42™Œj·Ûï,Ëú{oof³É`0 ÕjÑjµèt:Äql.//óððð½”ò ðqii ®¯¯±,ëþàà€³³3²Ù,[[[h­ÙØØ`gg!···¬¯¯üü¯b†ïû–ÖšÇÇG”R(¥ÇrssC¿ßGkRŠn· 0QøvaaáÓ4'KQQ«Õèt:(¥¨×ë(¥°,ë‹*›€†¡L¾Qq~~N»Ý&Š"F£qHÔjµ`loo£µ&ŸÏãº.BºÝ.³³³„aH*•"‘HJ¥þ+F££z½þÿc´Ö¿\\\ µæìT[vÙKúIEND®B`‚PK Ïh7TµSI``Client_Transfer.pngUT ¶^ÑF—–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYsvv}Õ‚ÌtIME× l; íIDAT8Ë•“;l[†¿ûòµ¯_·~Änš”ØH§Q=4*ˆf@b`B"`@0$ˆˆ(BéÌÀÈÄ@S"† $&@­„  aÔ¤$*‘Š”*qR;MR¿®kûÚ÷áËB­ 1Ðo<ç_ÿ9Gâ–——?Êç󉵵µ{<ÀÜÜÜX.—[Õu}6“Él®¯¯oÿ_ 099ùq*• ›¦‰ã8×ßx{i¡*Mdm¯?½½õ<¯ØîXß{¦÷µy÷“ÞI°¸¸xiffæ—X,&w»]ö[nˆ¶w*”6‡Ñad$x{ãÞá{w®/m>ˆŠ¢,Ôjµ»š¦áI2ç.ÍŒ‘‰“Í&yæLŒr©C&á×/^œOÿtåÃÕÜ ƒB¡ðm2™ünl,ó¾Uôh‰¢'GGE<$º] EQ}2¿B<%Tq=‰;%2# áÜséé "!"TÑTYéõ\×C%"á‰X×íÓv‚TÒÃCƒ5ØN¿Ymtü‚(b9.Õz ÇHéY!Ò8ªÖ±‡ý.beò‹ú@àóÉ·,§¥f´ètmŒ¦‰"Ë´:áPŸ"a[6N—û%€ê- e§§‚jÓ¼æW}³åcC¨6L*µ6#§uªµŸU@ g9ÛœÒÃÈr_¨?ø`ÐÁ›¯NÝÚ;l\Ci÷löÖ¹ýg‰3é(ù†i™¶ãÒ0ó¨R§|íêÆ¯ßìJ'ÏòÐzåF*-¨í_úm½(KuvKuŒVHЇÑêá8.¢]ù!ß¿ºµµ…ð_òòüSF³=_Ü5.[=7ìÄ"ÚÍSzhþèQ];®äÿ¸ùY‘§eviõüå·>}÷äìo\8(n§²åIEND®B`‚PK ôi7žÉ½!jjClient_StatusUnknown.pngUT \&ÈF—–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× (KnS÷IDAT8Ëm“ÏKryÆ?~ï½Þ;¸®Ua˜š VÌ»h¸Åk#´¢…-ZDÐÂj1¼ÑlÂ…ÌBíZE‘›îâ"Å2)û±‘¢a^•k÷Îb*z™÷lÎyÎs8Ïã0M“‰DÀ/À8~-—€c`Ë0ŒÊÇ~Ç@$Àoªª®OLLhápX P((•JV&“i·Ûí àÃ0¬w€×á?ý~ÿëëë?œœœÍf¹¿¿ §§]×#™L6///ÿ>†aaš&º®™ŸŸÿZ«Õìxo×ëuÛ4MûààÀžœœ´‰„]­Víh4úU×õ€ÔÛÛûëÔÔÔÏŽL&€‚ÝÝ]ö÷÷ÉårLOOãv»ÙÛÛãùù™îînººº¤‹‹‹¿0 …ÙlEQh4<==¡( ÔëuEAUUÊå2ÃÃÃB1.€ðÐз··È²Œ$I(Š‚,Ëø|>–——±,‹t:ÓéDUU¡P˲ÂòÇŸ !eY–Q…••œN'›››ÜÝÝ¡iBTUýO(‹E¼^ï7 \.777är9 …ªª¢iš¦Ñ××ÇÕÕBˆ’ Ÿý422"^‹H’„‚ÓÓÓ÷sÞ²$IƒAÎÏÏ­———cl¶GGGñù|(Š‚—ËÅÒÒ‹‹‹hš†ªª8N<~¿Ÿ6°% è´Z­T*Õ\]]Åëõ¾3x‹·Í‡X,F2™l5›Í Ã0*ßH9 }Z[[ÓŠÅ"•J…‡‡4MÃív éïï'•Jµòù|¾Óé|6 ÃúŸ™4Mû}ffFt„\__S.—­ííív«ÕÚ°,ë[3}ÏÎ’$[–$©Ôét¾kçSR÷ïÒYIEND®B`‚PK F¡¥6†’Eþ//Client_Shareaza.pngUT ƒÈgÖwÒ4FøŒ(sAs°YUÐlƒÈ6S;ü­ê, ìŸ4ü­¾_Ÿ3]!ÍœpÆÃ$Ûº?³ÈëX³š½‘‡@ïWkmßpU7¥£(°{:áoÞñ|Êvnª2Ó̹ñÙ„O€ÙN‡Ž$ÂÛ9h½Þý¡ª“Ò‘]ñA„½2&4H wiàu£,u<–—JfJY6g¿êDxWŠé }tŸ.^-·Z86÷0â]4í‘Ú{eÿùüPpþ“o#IEND®B`‚PK̪7™[štvClient_SecIdent.pngUT pÞÍF—–óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:‡¸°˜„þÑI@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy@…·<]C,N¿¸3‹)QÂõ¼½±‡JÓ‡7—w(êÍ ¾ARñ†gG­‚bÓÜ÷L*¸×æl q’š=EÈ@ËCfæÌónkê7L¾óI¬}·†àC!ɘõBt^íÞµµ)e/óÅ;ÂÍ6]eÕøÝ«rýÿ=õ®é‡Œ‹=z’¡Å¼<¤{òZ—6¶C«ù÷½cûú(Ù¦V؈ó>ë‰ÛEæÖ\“»¸åÊÍ‚29†}§ûùøÜr™Þ½ÿ}Ò„Â2¹øÃ_CZ\×+ÆÞe‘-ןY´æC÷{צO¿·*/—µßzΗñЗ ž®~.뜚PK \®7ƒV|Client_PoorRatingOnFile.pngUT  MÇF—–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ7ŸíR–7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïln_IDAT8Ëu‘_h[UÆ¿sÎíÒæÏíÒ•vëèMšnЖaµqYQÑtÎ'KÉžŠ0[öàÊ@§(LË|÷`*(¸‡Zd¨ø CÛÚMÆæÚÎjј)­k—Ò4¹Iî½ç&÷Þs|Ød8ðßÛ÷çá#¸‡ñÓ§píÚ|cô}!äA „ü „x!ï[91öÊüäž Ц(Ê/‰þDHÓ4Ê9G6›õ¯/Bˆ}Öãñ>ño€¡ô`'cì!Ä!JI1ÑŸlííí¥¦iÂ0 ˜¦L&#þÈfsRÊ0!äk!ĉ©ÉÏo(À=3JÒ4Ì/ÌïŠÅbà¶ »ZçÜâ¨÷7ÐÔ@[$¢a~a~ðêÕŸ<¥ ¥ž'žˆD¢Ä4MD#…B0M®ã  ¢½½;ò›ØÙºº®CUU"„H ¥ÀpOW7B@H UUo¯ÞQKK+„ „"—»…üVÅbMá0ðŒÂ{9‘LR€ yG3 ø[`s”+%ؼ Ã4P(`sÐ"ÕK¥1LˤD8F>Ÿ·9¸mÁ¶92™ßá«B/.¿{Ûm$ëî骖týqÀ¯èåÌJÅbÕš‹[°¬¦®TQ±ìn”„@xVWVm‹óן¬¬®âïµ›¯{‚îr<‚mÔÔ„‚?kÝ@½Šåµ2ÈÖ(¥ @Îvéx†w_ ã§O‚‰iÒÄB~±4ùâÉ}Cg…¾¼»ýáGrÚ&ÔTMm}äö· ¥DRŠÖ{먛[K¯?“IvÞ!ƒÛwFX)&©«»‹LzÈÞÓÄ“Î[ BЫ(¥¨i¨mB¨Ž©Ñ®vC£[M¿‰e{QJátZ Y¼>‹îîÇØÃ³¡€…A¼^áPˆŸ²QqâÓÞ3¨jj¶’ΤQJQQš|>KÏûà6388ˆR ­ÃÏô€BØR‡ `Uk‚ÅÂ:ápår ¥Ùl–ææf^<öW¯NQ©TR¢•B  \“q)ŸË3?G)…mÛØ¶Íѣǘ˜˜ ‘ˆcY•JË P,ÉçòàtNy;/³±¡I‹|®€Ó颿¿ŸÞÞ^––oMÓÖ°2“$64I™Êeùf_ÏÉ_/ U›¢?þŽÖšŽŽ'‰Ç—(•Ëh­q»Ý†A:‘¢°RàÒ/#ë_~Ñü[¤Æ;›bׯfŸÞ·¯Íõçô<©Lš{CõxÜ</.§›¿ÿJžYåóÏê±Å±†'/Æ€¤àòìHÚe¸Æ§­5[ƒ[BµuØY›rºD1Ydyv™Ñèß|ùÃFôÊÀ'FÎ}Ä”ØÔ•* ñ©]Ïݽíž>—¯V ih´*l²ñL|â«èé%`˜´àÿòÿ»1(k@Èê†ùc®n•jþEIEND®B`‚PK ’¤¥6é€lÜùùClient_mlDonkey.pngUT ³Î[?8 ÛaïÏÂz`|—åõŠr}ù,#)qM”9wê¹ß[þâÒ•ðü|[¡!ÓtÔQt ­ó¢UŠ ¨žs@%[Õ¯ Èµ[¡[´,Ëíh5µ ¢(jœ5ÎÀ+'ºûµ¢þ"«‚ :¤„á&}WǾ×BåæÈÁ#NyÜž¥‚²,+P½«†)¬¬¬4ݺI˜8Ó7†)–¹Ì.üÖ•Œ/t/Úc@ýRF‚¹E)JIA©TºjwÖN¶-ãétzKj%ån?|(Ä-ÚFˆ<‚)ìNËOSÁcF«´c´Äš™³#Ã#–d2ÙæÞë~`µZE^¯7â¬qžijj‚¹èÜû×o\w<ZCf‚RRÊÌÄ»‡Rš{šû„Å'R#f&h–æž~Í4÷ß(¥’_óàtyu?ÝÌçù|øvþ¤LúóòhQìIEND®B`‚PK “7¹Ñw›ÑÑClient_InvalidRatingOnFile.pngUT SÇF—–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ&Çkæ7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë•“]HÛgÆïûOš˜ÔZ5m4FòµæcVL¥cjfq¬k¯œxW¼ØÝ.CºA/¼œPØl a"ku"a¥”mltj)eÚMV-ÛÖtήÉìÚžßÿ.DAïöÀÃá9Ϲxž#؇á‘!îz4MûX•JH‰bF)õf,Ö²öîÅK{øbߢ\&“é^Üë³ú|B*)Xï}½|7ù £”ŠÆb-jGHôöõø4MQJ½*¥ø§£=î¬ýäSŽ¿Dak‹Ÿú‘_Ïw«ßVV†Q%„¸®”zgz*ñ»Ðt"zå왳绺ºÌB »'½)ª p<~ŒÅ0È <­°Šö—»ºLRŠÐÆÆ†éÞò„ìí뱕Ëê§QèzO½‡òt‚:¯—N'B)£ÏS÷Ý @]Ïâp8„RêLo_M‹DÃo„‡^kðxD¡XDÌÎqÌqËýû¸/_Æzò$Ï®^¥èpðWæÿÚ+H§Óä²9²¹Ü†Ô4m =—UvJ׮㬭Åâ÷cñù°µ¶b®®ÆívSº2É£õ?0 ƒOƒ”R^4躆Aá›oihk#ëÞ‰ Âá0†a°09Ƀþ~ŽlÞùì‹/ì˜gÈr¹<2;ó}>•\#óÕ×T[­ŒD°ø|TUUQYY‰µ¹K €«ò0Õ·ï täZ2§”zOãkÉä[ë|´ÕØÖFvv–c—¶=Þp R^\äh0Hþ‹é­Í'OÞ>“±XK®{*q­I3k‡…À‹añùp:ÔÔÔp0ÅvêN“™ãéM­{*ñå|¦5oB {;:LúÍ›oÜØéèèèžØºù¥³“:¿_[M§‡¥ýb ž;ÒÔ´ŠD,&‹…Ʊ±Ý…öövææævg«.YZbùáÃ|6•j6Ixß›sóóø‰=C¡Ðþ_Ã90ÀÓÓ§q¹\æÕTêC1騹sG*êë·¥F±¸];ýþY>O&fyeåo1C €ü?$ ý~`BŒ1tó>IEND®B`‚PK "“7&ÊóûûClient_GoodRatingOnFile.pngUT _ÇF—–óFUxèè‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDAT8u“ËkSAÆg’X[Ó6M¥ÖGŠ`)JtÕÔ…¸ðA|mêÆÇÂJÁ;ÿW¢;qçÂhU\hT¥ Å÷«Á&m“¶·÷&޹Dž¶KÎb†ó}|g~3¢ª,´l6½ˆ‡2¹¡…z ª„>„F`A™M`³ém@!”É}ú· y`-¡L.øw¾XÊäžýŸà;ðѤïj|ãC³jçIUmÅçû°³÷¢„u7p蜗À¤¯Ó²éˆtiZ ájÇaâ%Áð-¤ZP”Û¡½2³S;Æ7?‘ŽC"˶Cd Øðß¡õ‚lí!°¨ Öjæ l6mL}²_šÖ€º æo ö'H“J"9n³i™£`³é­Ža8ªH£„ëÀÿ "¨uPõÀæai€lCÞÞJ_E¹Ê(%„*ÞjK`¿‚ Ó` L@P­è"„F”x-F¡¡mHºvk¬ÂäDžXÔåí—¯£„ŒOwûÖ¹?Þ\~ß»çlÿ…Ïó(øÙž4¬¸rã×V Å<]]ݬ^•Âõf~õ‚âX±oL˜ÑÑ_÷úÏßýÆÞìG'±ï}CŸtvv195E²%‰3ãà8ÓLNNÑšLðàá}¿T*õÔRHau×óñõ?-I|kinjÆó<<×¥®®ŽåmmxžGq¬Htq,lŒ9]û’¥ßÑ £ÕDk{û bÑÕj×sq=—úú¥ø¾WñH¥RˆÈþ9ƒP&÷,qøÎ7 thdd„r¹D©\ÆqªÕ cÅSÓÓø¾ªR©VžÎû¾õO=zœ»‰DvÖ *"ZsWFDŒµvÐZ{æ}¾@ú«4X°IEND®B`‚PK ò±7ÑÎ>•Client_Friend.pngUT hSÇF—–óFUxèè‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<‘IDAT8¥“KH”QÇÿçÞoüfæK…òA a%=ADíb´(ZÕ&Z´-(&*Í–-¢M­$‚ ’‘°l!eˆ=ˆ¢¥”©£3Ó73ßëÞ{ZØ[kÓgñÿý9œ13þ'¬ïEÑnKÐ^’¢–™­H™“º,¶b›”ó³P™‹)æ^ fÆAGãIûÄúֵɲÊrø…û†ƒÜ”›c°³¢®&±¼qµò2ÓxÜÿÄ‹”î<¦tv:Ž}¥mßÖ„m pè ˆ„ƒ±Ñ ì„ù´›„„tJák‰[—züBÞ?"[$Z¹¡¦®ªº:7 |pàC»_àÄ qDP™I°çÁ ÐÙ)X†à$çYŸFÆ—Z j]´¤*›>À f˜b0 (c9hׇö"|‡ªúf~ºÌbfIFÀä]°R30f ØQ:ð³ 6?·ÅZƒb%`°°,Io3ãÓ«+íÍt¬ ‚1ºÍZ]lAÒ“„B¾üüÉ;O–WÂ!Œ"Jà½ÏÎ “C¼n††Š‘ÁQ¡5ŸËe½×/½×d/„?ê"L{`efñJš1xç^…Qwй[¤˜2¼óå›Ñ‰W#Ó‘³j HÊY°°m”5µ` ÿ¾Ÿž˜º£~´UX‚nWWÍ¯ÝØ¸!^~ãy3p2 §a3îÞìóó9÷†bìI1ëß ¾™Øáê¼R§uÓŽ¶„ÿp†ˆ×7¡ÿz¯_,z]šq(õ D>S;IÂÙ’’Øá-»¶'¥¸}­Ç‚àü1ÃGfÍåoߨA´ß’â‚‚"¥ÚîœSÈß.o®< 4·ÿ¥ù ½Çг*HõyIEND®B`‚PK Á“7ó•=!ÏÏClient_FairRatingOnFile.pngUT ŠÇF—–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖÚ2ã7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë}ËoTUÇ?÷œs[çÑBíƒÄ2šÌP#TÚŠ´%E° ( õ±ðãÊĸTcâÆã‚ ¢ ‰ƒš¨#¾RSŠ%qÚR@Úi ÅÎÜ1¹sÎuÑjÄßõïóË'‡ÿí£?@)…RŠ(Šhhh@kME¼óö»wÝ;ÿ¥”cðœ”ò= mŒyøüØÑ±úÅo¾Æs×#ùìº.ÙlŽ;wV_ïÙýè¹Ñ|¡#—Í5…Qx¤R)oÉOìf½¶ÎÚÚŸzò _}yµ)Ðc­ý¤X,îBê¡Áý ZkÂ0$—͹ ¯}úÙ¹W¥S¾Ñoì~ø‘«ss³›ê_<=þìÐcý{•R‰¶¶V¢HS«­S÷ë¤Si5š/4&’©Ì+˽/½ðÊùé+—yâà0èq]wo{[;MMÍ  "¥"ÒBJº:·Ó××Öš­[¶ñÀÙ³gº @’Rž>V8î­!ŒBjµ++ËÌÎÑÚð`&CSs3ÙìNgþÚü™Læ¡q×uQÖÚÃÛð<m JJüÀg~~·±S'ŸÁ÷ë\žžbqq‘Ûw`M&’h­‘£…|:•ê6Ö:7o^gò—If®þJ¹¼ÆSÇO µ&N3==E©´„ã8Þ÷?\º „¸-Gš\\º•™/fWo¯Š±±ôõö#¥KkëýD‘f½¶Nø¤’)Žä $“Éäòr©WJy^7¬µãÖØ=‰Tbª½­ÝB²ïñ}OÝ÷‘RÒù@]„A¸“0 »À®]=¸®{úèè˜R Ç!ŒB|ßG)E†T*¼ª‡W­²3×íH)?TRJff®ÇqF::¶Qõ<ŒÑHå>AàS­zÜ—HðWµŠµ€––¬µðâó/[!Ä…âìoqÅ«P*-±´ø;žçQ«Õñƒ¯Rù6ÆP.—c!Ä„2ÆðÓÏ?bŒyó»Kß kí‰8Ž%÷˜ã8F1aŒyK,\¿†òFÇãqß‹Eˆ>Æþ—qf;É¥£IEND®B`‚PK©7¶Sµ•JNClient_ExtendedProtocol.pngUT 7ÛÍF—–óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:‡¸0‡ºï£†Y@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy@…›<]C,N¿íßÈÕ Ѻµx[¯Xç¬é®ilò‡Ò7¨¯PÿÈ[’ÿšs–ÞZݳN[,\Bš9ºx=ºï™þZvøñ¹‡&”WEíö^Spêr†q®ö™ÒC ÅIXùZ°NÈelç.ÛôüW­½v_ÝÅóLgÏŽ:ªéT¾[Üb…Åß?)Ó½Â3‹½G¾ÀøÂ’¼óŠÜ¬3¯ö‹}iZQP2/àñ™¬3*ŸŸçÿÈtÿ„ΪšugðtõsYç”ÐPK jª7,.k´ªª Client_ExcellentRatingOnFile.pngUT ·:ËF—–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×oiw>7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnôIDAT8˵“ÍK”QÆçΫ©XFiô4dDáB)°M¼®Â… µ ÚEÿ´kç"WAº‰hå,¢ "£veŠù…C£–Ž:÷¾O ›”j峸÷œç9—ç9ö2üPÜï‡ãõØvs6¾,D™ÜøÖÙpÌÕ$4F™\²uhŽ2¹×QÙðÅt>WùœÕŸ¸%ékßaeêCéiçm‹ÔMà*кë~$~HcÛuK÷š> ©Z´ôŽäýcl}Nˆ‘¨gôJã* ÔÐþÒÒ×ÌŽ^‚T øqTCuà:ºI\µÉ'Ï*1®Bçê›úìÐÐ ˜m&󟑦q§ObUvÓgcûƒÀÇ8òÂÒDuPš?B´‚´aD(áŽY?÷ÿQ,bl°–‡d…IPý„°É"„%eÙTqp§Æþco¬ýÆyÕ1?T„¤ah~ûºú‘ ¶²­ÛD™œôcf0{„!­ƒŸ? X/¢ÉU’;eð.,庭øMÉ«û(?¡ü>XXFcK8I–²ËÛÄSÀ'R‰Væx«’ݳˆ.‚º€–(“›Ù¹‰M@KÔ³YðÙø9òÀžŽªÞQw·53ÿÿLÃñ@Ù®=‹_Þýíul‡›IEND®B`‚PK…›47½ç†ÓÝClient_Encrypted.pngUT ª­òF—–óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ  סÈ. l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< BGOÇ‹Óo/oäm0àa8X̲èü¥›’‚>¾ìE³åìê—±­]ŸxøHïኩ‹ßû®díÓ*mÜÌq€IAËü³s_õÒ“É?€†1xºú¹¬sJhPK ø£ 7ëP…ÇJJClient_eMule.pngUT ”¾F—–óFUxèè‰PNG  IHDRóÿasBIT|dˆIDAT8‘OH“qÇ?ïk[lZél0§Ñb–9(¨ÏôròD¢˜Óh—/S3ø;½”¤ ÊjyãÁÁ6ÜîS©Tô!ù,ªËae1'ëŠö‹wèôw`µš)¯Wˆ>~¦ QòYT_{#m.;Š\&¹°B:/32Â}Ã[¾°Þ\Á`hn0Aƒ eµJ:/o Ôë7 Ô L”vIEND®B`‚PK "~7À†.**Client_eDonkeyHybrid.pngUT Ï&·F—–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× 1xWq·IDAT8Ëm’¿jÜ@Æ:ÔiH’ÜöQHqUÀ…ïê{=€ÞÂ*ç·Ðè-l‡€«3§‘ú)ÂlPŠ“ä•| »ì|óýÙ‰X¬ãñ¶wnˆ "˜f†sŽý~…õÓ¥(Š»$‘iúy¦é»$€¿@üöÞb3»jš†¶m)Ë2ˆƒf×#³ªŽì¼ˆÈs’È®(о,Ë(Øûq›Ùd!hðÑÌv"òè½}ˆŠ¢è’äÕ³H‚sn8Ïs8o™Ý9·Þ†† ^ ,—™}‘Y‚·Àðm°CÓ´óKðX¸T9¬ŸÀ6Ã;KN.‚.€Íüv6u]÷cÑÒB ûx‘ª’çy´ ŠîÍìWžçQ–e‘ˆü3³?Y–Efv/"?²,û¤Úí€é—Vá _ªªêØÌCt \tL#‡þD„º®û4MQÕ‹yŒ™ $Äãaáó÷44M‹÷óUUõªªÊf³¡iš³‚ñ¢Úq8ÜDÇãm8ÜL«v8çHÓ3OÛ¶SÓ•™çááûŒ1xoœNOœNO”eµm‹jdžEõ¤ÔtPIEND®B`‚PKKŸ47ì6áÇ\^Client_CreditsYellow.pngUT ½´òF––óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ •¨‹Èõh l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< ÂCž.Ž!§ßN8˜åd(àz^åXRxG”×ö —R_úÿþ2ñ䡹 ¦c;õxêOŽ9íž°‡ÿƒNúŽô6nÙa{+½ëÆßûôËzzÑåþ/íÅú { ˜Vé5½ø'ÙÁï×}§®¼¨•|÷Ã'¬—½%ÎzËgÚÁ³QOÖ;\fÙ#Ϊ”ÆîrQXàdGÖÄ8æ? ¯ã>Client_CommentOnly.pngUT ÒÇF––óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÕ 7);RHËIDAT8Ë¥“MhAÇ3Ý£H"-â±à) X+‚„xìEж'¯¥<Š Å õ"~€šŠ1½[M\íÁbÓLýÀÕlëZ‘Íx0C³mj+¾Ëÿ ÌûÏofÞƒÿ a’â]ú€àØVzxˆ¼©“—G/fwØŽ¶XM½ðíù9¶£WOJݬ;-ÓÞT@YXÝ“§¬ üèzØV_LKÇŠé7Äãqĉ¥?‹}MeM}ß'O2t힌3·„@‡Õz¥õz}ÃKA€›I­{Ë|-Mu=Û¶±m;Rìû>n&ÅàX‘ÅÇ^•—Q¥@ÏÈdcö¯æätÅ|†¹· UÊñsÿEΟ½0 ˆM ´ÖÒ½ \yŠ7}‡Êçï¨ù¼ï¦³Í7F´Öd³Y~ÉCÌ;ï>ÕYz=½iv­¬Ú4¡nK†!»?¦yô¥›û¹Ýò%;ûn‘L&q]—7•Œ‹\OP­Vñ<‘ÉG;+¬îH%‘H`Y–eEºxA,CkM­VCk”­5B„­Û¥Žãl:uÆd}ƒ‰›·¯Ÿú‡)ž0ÉoZè˜y üIEND®B`‚PK ²°&7ÃáórGGClient_BadGuy.pngUT ]àF––óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIME× #/«5ÔIDAT8ËíÒ¿kqÇñ÷÷.—Æh¦m¬×BA¥‚K$¡v -ÔÁ u0úè¤*!-í"8ÔUu¯Ò%©Al‹¥*ŠæRJÏ‹¡5rwßsœrý |Ö‡Ï žð¿þU¾0+fæj=Ïœbš¦0MS»”½<èw›§nœÓožL˜¼>/âwTÓ45 Ç ðM^¹¯öÜXô‘þx)z|ÇŒèÏkÔ#úôƒÌú»ž‹‰ª'J ¸K‹O>oSçÓ„u£Re¹´þl_ ~tàPÆôpççLæB†ˆOAÖj8†ÁáPˆ3ñs|xó¶¿ùu×(îÖ_urÁàûññÇ\{{iÛ¸–…µ·‡+%CƒýÔ+Õ¡åæù®#ùþ…ht íö-4MCp]!2_ öòŰçü¸šB H)‘R „Àj4<¿¯ÕÁÜØ ”»JkuiYHÇAJ‰O×iG"¨«äùÉ…E>•ËØªŠÀQUE‰ÅPFF¨lmµ$ÜõõÍfŸ®•Jü ‡Ñ’Iüé4¿ûúØ,[v»½ƒ/@ä ³ ߪnïë•N ZÛÿ+³æÀ½ƒÂ>K²Za½´IEND®B`‚PK L´$7ÿñù@ôôClient_aMule.pngUT OÁÝF––óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME×PöÀ<IDAT8Ë…‘KHTaÇßwï˜£ÎØd*Vd> Ëhу "£E­¢—¥QAÙ ‚jÑ2¸*ÈEQ‹¢pÑ" zYÙB-1Ÿ•ïÌ\çÎý¾95â‡ÿÿ9BkM°Â¨šLCÞ¹ê|Í]·?¸?ý˜«ÔCJ¿†µ®«šÎ4Ojþ‘ÐúϬvŸ¡MÃЮ"¬”{Èôø—)­-!„£µ.?~{| $ãÖ”(-£ëË÷¤¦ú3nÆœP²!åA)DU’G+ŒÂ`…‘7£ƒ¸ _ ;²$¿ØÛÞö2¦Ý˜4¤)…'YgäF'GEÄúÙª‡jÿâ xe9Ùìp„¡¡z{ºHõz+dy¦×õ2Q®¼¥«tq¶ ] `Zø ‹¢‚U¿¡-—ËÿÊ>h*Šz/K(K¨*Hk¡×ƒ~ÓïÃ`Ђ¶ïkqQ@Yb$ŒŒkPoP‹‡ÑÀjYEÁñù9O÷÷]^ðëáE½!„ð`½¿ÂæEKo„í8†(ÂZ³D˜4…ß1rŽŸ‹EÇ´§ÅãÄ1¬3ªªz]iŠ’¸n#Ï;=?£(ÂbFoÛÚ ð’9ÇÉímp|w‡œ#8‡Öžüo’­YJˆÌÚ·¢××€xÿí;Á9Ìfiºc i†ü % WW(Mëq˜ƒÌh! ,ÛÈóú-¬jHð¾öBÂ4½KXk_Z†§§¨I !‰:Tsó³nï&˜L:æ5nl6›6~iâÍç/ŸöúÎÀͦ‡²w›UžIEND®B`‚PK ¨‚¼6ÕzÇŽ   íToolbar_Transfers.pngUT[åZFUxPK 1¬7¦©&.‰‰ ¤a Toolbar_Stats.pngUT øÅFUxPK ÷z¼6²äê í.Toolbar_Shared.pngUTâ×ZFUxPK ôz¼6T8,  íyToolbar_Search.pngUTÛ×ZFUxPKôz¼6ˆˆˆÕ íÖToolbar_Prefs.pngUTÛ×ZFUxPK 2¬7Ž ;O O  ¤ï-Toolbar_Network.pngUTøÅFUxPK Æ7± ¡Î˜˜ ¤„8Toolbar_Messages.pngUTcOÆFUxPK Ø´$7¡g&ÍÍ ¤c=Toolbar_Import.pngUTXÂÝFUxPK ôz¼6i‘T' íuEToolbar_Disconnect.pngUTÜ×ZFUxPK ôz¼6õ2ð>> íÕJToolbar_Connecting.pngUTÜ×ZFUxPK ôz¼6^Y>’’ í\OToolbar_Connect.pngUTÜ×ZFUxPK Ë©&7XàÎídd ¤4XToolbar_Blink.pngUTŽQàFUxPK C´$7%©N ¤Ü^Toolbar_About.pngUT>ÁÝFUxPK {u27áïî44 ¤4gClient_xMule.pngUT ÈïFUxPK Hi7@~ñ [[ ¤«iClient_Upload.pngUT˜_ÑFUxPK 77[Ö{ÑTT ¤JmClient_Unknown.pngUTz’ËFUxPK Ïh7TµSI`` ¤ãpClient_Transfer.pngUT¶^ÑFUxPK ôi7žÉ½!jj ´‰tClient_StatusUnknown.pngUT\&ÈFUxPK F¡¥6†’Eþ// ¤>xClient_Shareaza.pngUTƒÈ• ´>“Client_Friend.pngUThSÇFUxPK Á“7ó•=!ÏÏ ¤––Client_FairRatingOnFile.pngUTŠÇFUxPK©7¶Sµ•JN ¤³šClient_ExtendedProtocol.pngUT7ÛÍFUxPK jª7,.k´ªª ¤KœClient_ExcellentRatingOnFile.pngUT·:ËFUxPK…›47½ç†ÓÝ ¤HŸClient_Encrypted.pngUTª­òFUxPK ø£ 7ëP…ÇJJ ¤b Client_eMule.pngUT”¾FUxPK "~7À†.** ¤ï¢Client_eDonkeyHybrid.pngUTÏ&·FUxPKKŸ47ì6áÇ\^ ¤d¥Client_CreditsYellow.pngUT½´òFUxPK+§47Åc_°or ¤ §Client_CreditsGrey.pngUT‘ÂòFUxPK {7°½W½½ ¤Ã¨Client_Connecting.pngUT!·FUxPK # 7D5Â>> ¤È«Client_CommentOnly.pngUTÒÇFUxPK ²°&7ÃáórGG ´O®Client_BadGuy.pngUT]àFUxPK L´$7ÿñù@ôô ¤Ú°Client_aMule.pngUTOÁÝFUxPK J4©vìû% ¤´Client_A4AFNoNeededPartsQueueFull.pngUTêáëCUxPK((} o¶amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/skins/gnome.zip0000644000175000017500000013021210753565633021313 0ustar l3onl3onPK u7½—¶Ç55Toolbar_Transfers.pngUT KÆFº–óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME×*zÀ:™ÂIDATXý—ÏoEÇ¿3»k'þ•”Ò”6JØ´„þP‹Òªôô‡ù%´EQqàĉ 'Žq@i#qá©PÉT@*Á(ˆh×M'qì8‰íµwvf8xmo]§µMÂH#5c¿Ï¼yïûf€6›n˜ÏcmÏøøyŸègÆßYo¥¿ê œ?²?°°¸| tÿiä§¾þîÐ óMUÞ?qx_ÈÅÈÐ-=Ÿ=‰çóS?m(€n˜G %ÜbTÅtf‡c×ÈVmv.îˆßÈOMüº!ºaî!ßÜÿ@D ‡±T`p]ŽÜŠ ª(Ú¢ÍÍ瞎í|ìJ~jâ꺡n˜Û@ÈäžÑáH(EnÕ©NÈêG:[ÄŠÍ1öÐh¯¢ÐuÃ|bÝtÌɑ¡û6ß3°™æ N}NúÖ¥³E”]`ÿÞ½„’ÏtÃ<öŸtà B.mݲixûð65_t åÚ?Lg‹àDÅîõùR7̱®tÃ$ äãh4<¦ëƒA!b½*BAÕ·´AÓ bx Š€J õbÇÈ`„Lꆹ«SâœðZí;PJÔÃGư\b€R©‚b© ¼7‚+¿ý .¤Ûô7œ¶’‰éŽÖÈùð‘1ÊUÅR¥R°uS¿_¹ +™ *Å\È–¬Ìë&Åê&].|æ0Œ‹fo9wò&i%Žnñ€oÈ\Þ¼T{áì €Ô¨/…>úürG µ£á\€Pz›ø<@ˆê<Á©\5^Še”ìj¼Ä µuÄ“e‡€Ò"J8¯ã„ðêqɺnH‰úønñ¢z»P¼q­+Pa·JÀƒà·¹>Xà‚·L­vj¿ñw )—Rý­­V’ùÀmx’`Í€m ¸M’'¬/^õ P˜¬Í{;ç t—²j=lÇëµ#¡M £ÃGJ0"•ž~®öô -2 jÛ*e\ïØtÃìiaŸµÊQsk«¶yßs¯xÛ[#  )Âå‚6ößð@… 4E8Œšî!×<Ú•”êgÆ/Ä"ás{öî kš !²ãÂv¸W7Ê(z²Ý /¡U¬l6/¯§f³ò•L¤”núG¿è0vªX´·ÇúcZ¡ÌÀ|AÈc®çŽå¢•¬®`¥fW åq+™ø§íkys³’ .¥|6Ÿ_™º~mº¢)¤!‚-Z_8€²mòf ò”•L\íè]°„-¥Œg³Kó3ÓiNIëîQáTÊH¥fJò)+™ø¥ã‡É ròd&“]žO/HHq APSà8Lߘµ!åY+™ø¡«—Ñ] R2ž™Ï2Yp—CBBQ\æ`îfÚ†”/ZÉÄDW/£6.4J~j"ÕÿX¶s’*šJU0§‚ÅôœÍÝÊ+©Ko|ÚânÛ5ñLðêA`åÚä\xð Åñ$Q4-¿˜±ÝòÊ›Ó_½õ·Võ \¦Sê3^Ðj«Öåë‘ÁÆÄI·´ôîÍoÆßóU×fYAºP[TÏúxàÐKÇ~¾ð½W'\¯ûÇ.ÀýgB"ß6›û’IEND®B`‚PK ¼n6öŒ¨¾^^Toolbar_Stats.pngUT ùwøEº–óFUxèè‰PNG  IHDR szzôsBIT|dˆIDATX…í–[l\W†¿s·ÝÄ3ÁŽíø2¶‹B qÀ©]§%D¥ Mb7 \ÏTðÌE)H J7Q!x ¢qqc·Q”R7…ri“Æ®¢JI•Ä÷ËØJIíÏ휳Ç3žãGUUñK:sÎÚk¯µÿYÿZ{oø_ àÏüô0¢õ+ßß*HÞ,Á§i²î\¬ËúGÈ&aÁ0Œ„Ÿó¿|âÄ÷Ï™(N~õ+_Û‰D)Ž"E¾¡ñðOÙ1‘=Hgç§›çÇOÿ„cǧ5Ö^øÓ:€·¦ØŽ –×+LS×6µ—ÓmÇáøŽñûgO‘ÊæHç\Nþá"à{ض]>h8¦…¡èAã„Ä2Œ2£A¼ÁÓC$’)ê·×R¿½–d"Pào¤@6Pa|rǧYJÌÈM¡Öœóàî± "øJ•x×øó…×øÜ£#H!ë&¬SàØÅœêhhŽr¤£—á±—™{oš‹ìU–ɾújþ2‡<¬M®^ â‰}}‡Ù·ïD„úúº€Ï+¢ _k(æ´Â4H«íˆ{“¨íbÚ:džIÓ–ôk0µu vÛFDÐ4‹o\dÇŽ4MƒÒº`#š¦á˜&7oãæ¿.ÒX¹Š¶Æ¶® ÷XðÍ®Ýì©qÐËmÛ¼0ô"ããLNOó³Ÿÿ’ñ‰ DÖ)Ø€‚jÇ¢Ú±ˆ:6µÛ0µ gÇ®ÐPµJ2³„ç/⺋ìo41$Žòã¬dfñü%àŽá¢iA¼£Gûèï ͑ɹœê@ذx¾¢à‡íÁUš–¡Êôx#>Îä{ó¸ª×ná‰ÎI¹>U–ɯßäнmüîà#ä”ç ¦®Ñw5dà…3$VÓìüh;×oŒ‡ÚÐÌS €³¶|ãÕóøÊ ¥S×4f–<ѹ‡¿Ï/pêÔWUòÅû>ÆôJ‚§.¢DA2ãâ8íE€ ý'|vÚðv:YÂgÔ±IJØ÷qnâ2+Ùžº¦ƒ½—¿Å‡ÉúŠD.PØW2Y—#G£§§ ¡®®DðîÖ[[B‹lm!ë+F—nsnržÝ5[É)…ZëýÙåwy}îI× ùwÁ¥‹—ihº@X?˜ŠH¡‡gæB†gæð”büÝ1†o¾ÄŸ¦f 6ÅoÞz…Œç‚æýmÛáÌ‹g™œœdfn–_=ók&'§ ó6Í@9ñ”"™½Ãr&Úñ|ÿN-òJOPÛ¶éí;ÌÀóC¤³.™œÇsÏ•È_œ»ÀUªd!O)2~@ÇFql›3gβ²š^? ’«¥ò+ä)(WÉœ‹ Ù•Ÿij(;ß¶z{гw/WÞ~‡+o_£ç®³ØÑ²-,Ó¡ÿÂt(`ÿØæº¦ù<{}ªÄn™–m!"ÓâÊå‹ÈÉÆ^d¥ȵÚ:”Rz¤bØm8Ny×ü6Rò‚`Wk<(DýÓ?àZ3`šDôóœ°è]Ñ„0@ {GÂè?ÇDµDÜ'®d¤/> a$÷uµÌ£FØkk_3}ºÃz€€rÙ9ADF ôþS}Yèyît:9vtøDàF³AãùcÚòÐv]2€'¥ @F6›Ö“‡¥¥Y E €”Rú*_*Ÿ¸4°.ÙŽ°´Dÿ%MUfö)iðhûü®D/3‰{)û~7üëP>ÎúªIEND®B`‚PK `27'?œÁ22Toolbar_Search.pngUT ­¢ïFº–óFUxèè‰PNG  IHDR szzôsBIT|dˆéIDATX…í–klSçÇç_b'qâø;'v€\HÛŒP.¡´cêÖ®¨S'­“Æ·¬Ò¾M›´jÓ>ìôIÝ@Lš„6¤nTÐ R©lP•i]„K ˜ÄIl_Ç7bûÜö#1ÚŽn_ËOz¥££Gÿÿóžÿ«÷9ð˜Ç|Ñ>oÝÆ-Û~®(Ê÷„¬®ê¯]½|ñ܃CÛž5™¥£š¦9A88~ñãÆ£„¥ÏãþÄÈÓ?ñ¸]ßßùÌ–úæ&‡#žJ¾äuµü:™L*ÃÃÃvÃdº¼g×WÜáPÐ"Ëé'nOIŽÇ.qʘ‹.PWg%%§(‹˜ÍfÁãñ`¯·cµXÐuÃH`okïÛ¶uÄ:;%‹‰D$‰B¡€(‰„Ã=$ÓiãæÔíc“—ÿõêr:} ÈÕÚZM&â§“ñØA·Çëî ‡†ìuV!çêÕ«”Ëe$I"›ÍøipÔséÒD)½)¶5Ž¡ÖVOï𗞊Żd2Òé4¢(ÒÝÝÇëâýsçK9ýËìR&¬ê§Üâ&G“S+—WwíÝ·Û’’Ó”J%dY&—Ë õÐÕÝÁõk“Æltá¯ÉDü¤XC¸O§_Ùùåg,Á®Nì¶zü]]´ù[¹rõº>yýVäæµ‰ŸÖÌW?Å\„å¥tÌát½ÐÖæónݶI0›,üÚÛÛéè °Z^åä»gî¦äÄX1ŸOJ€½PÈ)u6[zâÊÑõk¥þþ^Á×Ö "œ={^¹pi|YN,~«T(ȵÜ?  Uùçb<µÏb¶X7m–::48ìLMÝ6Nüùt%—]ùÙÂìÌÇ@Yl@Ðäóû7´ùÛÇ…aCÓmB¦R.ŸJÌÏZYYY–ý¿4 N§Ó¹&ì~Ýj­Û«ªªQXUªÊx&™8”ŒÇ'€°rÿ*¶µf,Ü›’F퀕k».=Âøaêk뾦À½˜ªÜ‹°TFBÍX¬=µOúãóÿ@ªéÞ×Ôkºü]{Ìc¾ü§‰ï&íéIEND®B`‚PK `27³Üi\\Toolbar_Prefs.pngUT ¯¢ïFº–óFUxèè‰PNG  IHDR szzôsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<ÙIDATX…í—]L\EÇs/ ì–Ý»°w+P,PZŒ¦­„mâ6&öËjÓÖØ¤MúJ !¶!M£n$¼ØÄ>i4jýh¬$5>hLÔD_ûµTÀ¥» eë.Ka¿º÷ŽÀewYÐ4U|ðŸlæÎ93sþsæÌ9³BJÉjBYUëÿø/(Êôôú«€·€6@<@[¿Çº:OL¬Hx·yÃÆ½?¶EQ˜Cöí‘RZýBßRJ‡êú¯_ûx&{‘½PO¯_M§ïMG*•Â4M¤”¨ªŠ¢(ìÛû»wíùKc…ú™L†óŸ’‘Rºº:O$–ó@ËììŒã‰­­>tȆÁÈègÏže׳»BpüøqÒé4`çÎÖø£Gbš&Äçó¡ª*åîò¢H4Ò ü¸méTšºú‡‰D#9 —Ë…Z¤266Fuu5ÃÃÖnrrrÎóÇ•H$ˆÅb|>ºî%´¯D -6=M2™ pcˆ|TV>ĵþ_q»Ý9òx<žÓ×4Í"póæMK®{¼  ´g͹†™{™'“É$šÛµÄ8@mm ýý×–ŒÇã9ÁªiBÌðÈȈ]Øž=×ò@O¯ß!‘UUåüù  HÓ •J[»[@"‘°ŒLMEI¤fijn°‚ð•Τ”ìݳââ’Êž^}Wç‰``«Ç£«§ºa.^¼H__Ÿ¥ìèè`Ë–-˜¦É­[ã(ªŠ”!ñ„Ô\º|‰Oí`ÿþ³’ˆ`ìÖ(gΜÁç{šñ‰ñv` 6Ý£ãr͹?»‹­Ôa)®«ÇåÒð¿ù:áp˜†Æzk‡“áqÞÿà=^~é¡P–G[˜ŠEs¼äXã ¤´„yGµŸ.!àõz­]݉Dq”9-¥¦i àÖÊé>ÙÍ\’”€ ‘ˆÓ}ª›ØtŒP(DCÓz‚¡aòQUUÉÔT ²â ;·UT蘦Itf»ÓiýœN'ÁPu몉ƢDc«M¦“47oàê•«ÌÌÎàvkKŒÔÔÖ066 °¹§×_jy §×ïBÔë”RŠ?¢QŠKíÏO,**¢¤¸˜`(ÈÚµzÁÝ•••1@ÁGž+HÀ”#cPS[kK$f[ŸŽ MÓÜ(Š*€%îwÏÇE(dSKó²»»òåW¼vú nß¹Ã;ç>³tŠ¢Ðqìê|à^ýù2Áàí9t¾˜· ƒ†ú:`.»•»5LÓÄn·óÅ…>–ƒa„Óè/ëÉ)X†”¬)-ÀS¡ Þh‡Å lÕu/0WDZšiij\R _í:™³èÂøìVQ„~áyKž_ <æn‚E`“W_¼Ùm6¥ðû%ŸD~›ÿí©ðTõôúí *tÝ‹Ýn/Xÿ É–{M/ç¡l$“ITµÃÈ”Xy c³Ùþv¿Y!(‹Ê•™g/v?²|à›¯¿u*B›aC·oOüãF05%™JŽ~ÿÝ™"À üè–R¾m³Ù–õ‘N§G~»>pH‰ùˆ/t p‰W¸?˜€¤€»@˜°¥BàÖÌ20pI ¤¤”R¬tVÿVýŸÑªøÍ6²á)b#IEND®B`‚PK ,_5çåÌ? ? Toolbar_Network.pngUT ÊÑFEº–óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“tIMEÖ("\æTáIDATX…Í—YŒÕ†¿{«ª«{º§gÏ/³ÙŒM0†8ÆKÇQ€@@Y^""eyˆ±äÅ QPxŒˆ‚,%2q,³8F– 6ñ`Çg<›=Ó³w§—êª{oå¡{Ú³dQ¤äHGURߪÿ¯ÿüçܾð?ñ¯.\ºmGUDGï´mù òLج©µ¤Ì ÅdhÌi¥Ìë¾å½3¶gGþ¿F cÛó+,äó†ð›]m­Á†/µU·6%EM"FU,B¾à3—-šºöœšïJ9±[cžØóÄÈNàÁ]VGaàY)åO¶Þ¼Î¹ýÆÕŽm[L¦{Èû-ØV?Q÷"y¯mÚ‰G-šk¢(¥9ðÁÙàíC'cÌË±Ž§xýÛúß"°âÞçê)ÿ|u[ë nßT¥Ô>æ³ï(„CÒ=B}}µµq²ùGÎ<ƒÒ!JiâQ›ÕË’ˆÐðÚGò½C©c1ßÙûdú³°¬OI¾åù+b}xëÆ5kºgut|æ3é12ÞM@-óÁVâ‘ã$ª|ìH©©.æ½ë 8VÎÖßcñ™lš[6ÜêøÊi¹06ûpÝŠ;^Mì/~±î²:½¡¿Þ²±{óÖÍ2¢ÕËœ}ß´ MÇÆu|–W?†oý˜ùâMh#¦/XÁµm¿a>Ƕ&1ÚÇ‘Ó~Î;‡¥¨§÷ð¹hÛW–c‘Ÿîjo¹ÿþ-Í1<ÍѾŸâ©&n_÷!1r^ÒŠp#¾Yc;X b‰óHRu ÙBµñ3ÄÝ1‹ÁaÚ—ßeŸ ›Äô˜›>ûλŸ©@çÖš­½?¶¥VŸ$GZ1¼`µ£(Sω¡Ìr"Ž…m[XR¢Áè4qw„ÂYo ³s þLÆ;éÛÀ.kýHwÇÒ¸V$´!çÕ!­Gz¿¡)€0 1&DHÜÈmKâXi”24$Ž£u@:Û@ut˜0¥ ˆVÇé\ùP¼dò`×%a¸¶±6FÌähÿÃLÌ]G¢*O lÛ\rj¡U& BÀWºwâXiŒ1cˆGÇQJ±Rœ»Æê“ä¼(}c7Q—˜¤>‡0\»Ø„!M±h‰búâUÔTÍ×”äÕ¥ê® ¯¾RH‘¡>ÑW^W"V"Rºo©;É…éu$¢S¬oßÍ©áÛp]Bš”0 Û®§§ÿ>¶¬û-s]ôœk¿TóLbdˆ–)Bê“ÐÚTʲ†¥´eœ— èWÑÓ¿LÎEZB“XL@Ïåýä¹ÔFÎŽmàºöƒ,©9E÷ò£äŠ­Ìd»˜H¯ÅȰdÐ2‰éeä¼®%,ÒS¾–Hµ5&_¬&•^‰ ù+ˆÉ¹¬—tl ¯`81pËi®9‹ec…:ÍQe19·º.øäÀ±ï°¾ëM2óM¸ÎEZë>^¤FÔ™#çŘ/TQå æsEbñ ¡èÉä¨r­JÍ›kÎV^ä:i6¯ÙÉUõÇ t@ TÉJ3>Ûʾ~Àû§ïá½S÷U̸P c$‡ÏlCkM,b33—C„¢wmÌÎÁ “¹%õq”*¯19²HRKäÙ¼fwùe,9‡¨ËRãšù|”ÉLË¢çFg:ŸmE)C}2ÊèøtV³s±nqïÐ蔨»H)”áÜø€²»M¥#¤È“÷¬Ò¬/wÅ‚ÒL¥›Êãº4Š‹A”@¤TÇFÇg¥p‹{Ú½#£{zSºci aò÷Áë™\]6WyâiÃ`ª“‚'K­XnÉ P¥ö 4ˆb¥3Ja²¼¹š‘I­5{†vïÈ,ž ò™Á§>úd(ÛR§*ê Å›~‹œW]q¸Ö†‹¹8~åËËÀªLD)0~|lv%NÞK̵iHFù¤$›Ï >Åe»ðwâÐ+i?Ÿ}­çd¿wêflK¢E1ˆ.¬åЩ-üíì&‚@•@ËàA *åšh¯¬ŸÍ6¢MŒ5+ë9ùñ r¯Mz% ¸—°pƾôâùó©¾þ¡q½®³‘ˆ-IgËÃH02ÕÖ Í%EJ›Q©çC`xr?Îé¡Ít¯¬gxdR§R}ã_zq‹òFh•I8€£uÑ.Îϼ›w–m¹‘hwÇ™Œ~@²*Í[Çî'5»‚rÉyIN ÜÅòævÆÆ¦toÿù™‰c»õæFæPå4¥ÝuˆT¹‰@egßš·›oöŠA"ž¼ÓNÍ´Ñ7ºmÂÏG.GÄ–D£«h®­ç“Þ¡âàð…Á™ú^~⣠ øeþ‚š’1úÙñB~ìÄïhNÍuD"-rÕÊfQ …¼´0Ç–¸›š¸ËÒÆ­qf¦gÍñ“ýþìTjoê½—楇¦B™€WÎ>}.ˆR2ˆ[¾Ô­Þºªºí«¿Œ¸Ñ M 5¦©©>–ˆÇp#6¶m(M±0Ÿó˜šš)ÌÌ^”~Ñë™zÿWé³o÷•¿Ô+ƒ/¨ÄgL%O¸åkpâW­o¨i»yK$ÞxŸ°#í êBD• ÌC˜•?èç¦ÿ27thnôÄÌe2eà€Ëÿ(~+ÃâR§T¼rų!`Ê©¹d´Ï=’ýßÄ?½¿#Ýi”àIEND®B`‚PK Æ7± ¡Î˜˜Toolbar_Messages.pngUT cOÆFº–óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME×. ”˜èq%IDATXÃÕWMH+W>çþÄfŠ6jQü)iõ¡P•PE .K㢂‹ ¥-dùÚîú6®ÛºµÛ‚tñÜy¥Be…”GÚêFŒF$Æ¥O©oòc†Lfîí‰̋“LÔBé…Ã{ç&ç;ç;ßáÀ<°‘Csssmmm)¥3Brg§ˆ†a?g³ÙÏ™×áh4ŠRÊOÃáðÌðð°±>f)¥ç{!DS2™¼¿¼¼¼í ˲úººº^1MÓÓ©”òÚºú™ýýý”R:á @Q4 ±ft•ýê¹ ÆØåt×z©å¼˜k@n@:A¸ýÙMA¼ b @EQª#¥€ÎTzÍNºÜèp¾c¶ÌÞ€÷±‹RZ €p·666Ðçó]‹ zmY´¶¶B0¿ßïZ Îß0»Ò„B¡ÏÚÛÛ5d† ó$%hš»»»066V—Ž+Œ±C¡P+¥ÔSÇ^EÏç!ƒaÀ9¯ ‚Ù-MMMP.—à&-çšs>Ÿ,˪ȭ~níM%w'Ö*"¯Îçòôõzio$òZgX#é¾MÓAÄ«~ ¥§º(¥`Y€Á¼ÒÜhÚÝúc 8ç`477ƒ¦i ¥”†aˆ¦i~ÏnâüÙétú¹eY“““o)ŠB4Mƒ………?¥”O± Ï8çY#ÅV/B7n%clskkk¿½(ç|«P(|1??æZn½ú6ò³¹7“Éä/¹\îøüüü£ŽŽŽEQÞÖuý½¾¾¾G©TÊYÀm‹AANNNpee剉‰½‘‘‘Ÿü~ÿ¸?55µžJ¥ÀbÿVôUEˆBªëºO×u¦ªj^UÕ'CCC¿†Ãáw !¯÷ôôdŽ/)@Dy›ŽçæÜ–›´,KB,ö]B$ =‘H¨öž¸¢@J¹¯iÚpKKË•XMÓ„r¹ Œ±kýÜëzzz*ŠÅ¢–ÏçsPª°g `‚èºþíêêêWœó)%éííãããL…BAlnnÊ\.×pË6Mó÷R©ôhooO³‚ùÓ.)Èd2Ëggg¿™¦ù*¥t€sþ c¬ïââB®¯¯?_[[û:“ɬËËv—“ˆ( !%¥´b‚’=88ø L§³Z R±ÎÎN6;;ûI$™ ƒ¯©ªº»½½ýÝâââÙlVÚç *"ËÁ©Óª÷]ÇK2ŒD"orÎ?<<<ÌÇãñÇûûû?,--횦‰°XÅ)ºT={^µÉôô´ppðJé;¥Réi,SÓé´¨rŒNŽÙ-à•ÑÝÝmÀ³b±ø$‹ý}ttätHjÜ Ý8÷îôqŠ{²Æ·Ãÿküñ?²9‡òyãIEND®B`‚PK Ø´$7¡g&ÍÍToolbar_Import.pngUT XÂÝFº–óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME× &0¿µË5ZIDATXÃå—ypÇÆ=;³+í®VÉ‘ˆCBR¸o„!d° ÁvUpl‡ØæŠË&.BìJQ ñ9*qˆM0qR‰ qÀ˜8•Ì%° ‡$$!:WÇj43;GþÐ0H ÿ¥«º¦§çõô×_¿÷½nø/b0ƒ;v<"Ëòo(—Ë…$IضeY½Õ4ÍÞgßö@}@»iš_•E(Äk+V¬ˆêncš&²,ã8ÎMv}ßï°µzõê×`YVŒ®ë7õu¯à*’$aFŒ4˜aêÖú ~ýd4‡ßXCcUñM6¶ÕÈÐBŸÈ`¶mÊ”Ïoä‘]ìýAÿÚ¹’°®p½üÍ5ÿ ¡ªäŽ&wçÎŒ_ø,¹‹¿ŽP«x}mõ—?¢ºä ºÚÊõ²Tí§­¡òî1`YVoÛ%+,ÚpÓG0:s§f³oK8EÝJcu %‡~ν™ó°-³wkb@þ4 $ŽžIògPtì Ãã%2ÓFPzèeb“2Ñ5˜øDömÉ¥åzŽ#!„ÍÔ‡¿GVþJdwäàæ<'o–]n¿cÛ?3-ór_zÊìe?áÀ¶%T×V‘èU‰ñ{èl¯G 5 +ˆŠ‰#çÁå"ꪊ©ø`;§Þþ>3¿ôC2>·É%÷À±II9éÑ–Pãì+õåë SÇãñÐ7%ÉÅ}kßâíçRÓÐF‡ª“’1©÷ã˜ÍMu}o’Äú7ø†z8þÖ·¨(ü Ÿù3¾èþ0oâCÊ3—MOO™´«Ö8Kmcõ-6ŠÇGþS¯ÓÐfÔ„<Ò‡ûñ«¥ÐXˆºÄ´éÓ‘Ü^ê‚—ë4ªt$%‚Ú²ãìÝ’O{cu³×ËÏáàí#Î㉉uåO[2²øÜGüíôNæ¤/bDB’$a…uš®žçÈï¾B&9izs1º€Nµ] ÑÒQÃØhjBAæ|åeÆÍ]¢KùÃZp°mÙõÂý3—FHBB IHv| ÊÖ"$IYY477³·ðd§/aâÈl£“¶º R§,"XSHkc-'ëÇãmŒâåž\kÒ@‰!šJ’ÆÎ¡£¥_ì=]ìEø‘$©k Ù1fD&J”CD@à ©²µHt˜AZZ‚V5þx7q 1¼[ü‹vƒ¢”6‹q9Kqp8tÉË76îdÞ¯Pãd°tÝN{æ§n¡=¬Ú;ù'#LÕhárS1çê>¤ôú”OÓ®',:Pí&êô‹îFƌřê¿ó›÷_À“ˆÇƒcÙMUeóò ¨6S©¯»NÞ¼y]«u»©)}¿ß—-ÛäjË%.6œì¢K]Õ-ãQ"‰pù‰S†#é «7²š¸#£ˆ7ÏóÀƒ‹8]Rίº'¯nvÈ Àá]ß$)}.Þ@ÂM`ÛvW*.CýÃ\nÛã"D.C„ÛÃ%9OÕÕkÌJ]Ì}“–õü…p¸“”(ƒéY÷¢+CÈË/àÙç'`:­íí¼ôj'ñr±m9Ë7¸•°Öê®×E$¹²@€$„š8Z¶ü^ü1ÄI#é¬WÐC2K&¯dÂÈܲ€öæ+Ôjñì+JcíªUÌŸO(ÔF{¨µ#ÄЄ!ø|>’RÒÙ}â ‰Ü΂/¬¹Y 5CÝô“ïøz£Pbqlìã“’£2-ŸSYZ/2“²É™þHoö ?W|‚Ãu£HKKfÿƒÌ™=‹¦¦FÔÎÔN•ææ Žm1yâžøÚãlúî†^=/ý±¹õ&™]'§X–5Ùjñšg/”Tç?“úü‹«ˆŽrËâÝçé§žF×:xçÀAvïÙCnn6¡P;º¡s¦ä,YéL™:Ë21Dï:1 £ Àí¼óôÙcF‡Ö~ª9ذ!Uu$Î?ŒÛå- ™™c—‘ÎÖmÛÉÊJDzÂ]‰+1¶HšÞÉ_öî'3#£w¬Ûí¾}:U5µU¯[š³-Ž:Vÿ©ô¡‡¿ÌúooBëÔ‡Ó4zmR’“))9Ë›oþÃïâÉG—õ®¼g+oaàíæf¸‘ÇS–š·x®ªª¨ªJâ°Ìg݆äæf£êáp—ìÂ0 .^(§ârQG±:¤(7—©……x½^ü~ÿ[ðÉI_ú{â·§?7;›´Ñc8^XˆcÚ¼ôÊ/A\’‹{ÂaÖœ)"kæLZÇŽåÊáÃØ¶Ý¥€ý10ЉÀårðz½†¦iÄÅÅ‘š:MÓ°,놇Ë2e\(-% ‘÷ñÇDúý(Š‚èNLƒèï.Ë2²,ãõzŸyíÚ€ß%IR›"Ð#¿–e¡(Ê-“ÿ¦¸Ýîö®fQÀÐ3f|1%%eyWï„Bheee?€Ä1€pÝ¥ùµnö;Ä{€ˆn@â.°0 ÿïXLÌMIEND®B`‚PK ¼n6UtEwwToolbar_Disconnect.pngUT úwøEº–óFUxèè‰PNG  IHDR szzôbKGDï))&ér pHYs  šœtIMEÖ(EØòIDATXÃå—MlEÇ3»öÚ%Nj‡4¡!9T¥µ@D#‘ªœ@(E(\(p7s‰dA[á’¢H•Ps4DO‘è)D/€*!$ "¨Qø%(I#7(N¯½»Ãa×®ëÓ8'ž4š‘¼;ï?ï½ß›5üßMTûàèèÅÏLÓ<­”»r(„2 ãóx|øí½˜HŒØªF–HŒØ[ûêÕ PJI€Ž¾Ñ]…üæ—ñÂ^;Pl¶>‚”)@J‰&ÝY q7©J¹SÑ{3Ì•íõ@ Q>¤y·"¯A¡(¥î»—þ€…twÈ{× „,NÝ Es±–í°iÚ˜9‹œå`ÙŽ·€j0K$F8}`Γì%+Ìdª¥Žræ¦ÆC€išož;÷¨EsI$. i (¥Žƒ ÇÙ&µÄ š&qà8[ž¾W˜¹!.J Äа˜ýõçlUÓ÷ ³ï>}£vYkk›ÆŽwp醼0K×±£ØÈXä,Û³DbÄë6¼¼M#rR8½ÄQ`æl,Ûu¨iš'fOwurãÆ4ïÇ϶6`9 ›ÞPå =g+°·ì„D×Ý|;ŽòÄ,rì©£|ýíÕ…Œi¢ë:–e1ýëï«™ŒÙpåÊuSSSò~Î-Û!g9dm…íäO,%š–Rº˜–ÔFéY;C{{Ò/illÄôáóû8õÚ@C$]îííí®[ó‹»î†wÒ›ü¾IÀ0XN/"`š&íµÕÏÏÍ?|S& Z|¼ìàÏ“´|r{m €†¢ßÖ(h/ûýg„øG¿ é…OµöÄÕ¯8øÒ‹ÍÍŸ1µÙ‰‰K†a\>þBM>:ûÌŒ0š›±®]«øœqâJ©ú‚€x|øà]À|€è~´ …ðûýøý¾üìŽJ˜õAfkßðô4›cc˜É$ÆÐÁXŒ•ÎÎÒNØÕÕµ¯¿`# ¬yòP(M](Äz:Md”¥o4q{)E8ÜX3†‡ 6ÇÆÆbˆ¦&ƒƒlŽ•DBôôô<»?Y~õTØç÷±ï¡ þ Zp°xüp'w²ëtïaÃLsìè3ž˜•ä:™$3>N`pÌø8f2Y~„Ãáç:ÚÛBf6K.›#—Í¡ë:·Ò Ô…BÌü6 À?~À/S“1+ÉõÐPÁy`p•J•ˆÈ×€þÊÉ“/è†apøÐ‘]Sp½hŒÅ 5 R)‚±X¹€ÕÕ•î3g>\+¾¥vc¯Cxk]\pf2Y–‚-äµúÃùÌ´÷÷‡¶éÌNL¬ öÀ® ñpI)UïÑ/Ö€÷þö‡9öo¤¾jIEND®B`‚PK ½l6Ñ’àÃêêToolbar_Connecting.pngUT ßÖõEº–óFUxèè‰PNG  IHDR szzôsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<gIDATX…Å—}ŒeÇ?¿™ÙÛÙ½Û½×¾¤DüѨÄZ‚`5–hšFCB¤½V^B8LÁâKCKmc4RPc!ĤPHŒhilKiH $"ñ‹bþ¡´Z ØÞõúr·w{·¯³3ÏÏ?fvv÷®*ú“<™Ù™yžïçùþ~ó<¿Uåÿy8ôÅ£"vÖ¤,6Y–¬QòPuÀ)ŠÅ¤}Ó7qáø¨jøAÆ•ÿäÀQ‘L`±eWn /+®]žZ1h»¹n6"4*Uå ÓÓfüôDu¾XB…½)Ó£ªµÿàÈ~¼äê噕7­Ìx®¥)´4ø5Ôo ¸ip=$?ˆ†©ÖNýþdmòÌDM [ïP}þ¿‘Cßw³Ùm«×®òòY3þ.RžÅ²@,A,iwQ5 FÑÞäªë˜«49ñúŸªJeÿ†]\Al1€ˆŽ– ­ÿøg®÷ìKãèå l[°l[Úh *&Y¹Š?þúÏÕÙ S¯~IÙ°ÂZd;ü0?2¸þ†OÔ“÷Na.Ç‚‘¨ee vÜ,§ãºÎ.žCμͷ¬ò K†Ö²Ø»P¯ àç"£élæk»ùÃ^øÞIt~‰§)Ò !ˆM"n9ñoKºÃ# s³˜wþʪO}Äs=難D6]1?éq…ñ×®ÌÖ¦aúb—€eƒíH2ûÖ=A5²ÜJ*&T ûž ,eÞ䯟(ÚÊŠÖב8àÀׇ–g²i‹ðÒ….›zƶÓ÷ÊIÒc;h;"mÀ¶pzœì‹ÁÝü@×áåIr®Åðò‘LÓbG—GEì@(ÞtË }é g¡>×ßÁãH_€æóÏ>µ{±ÆÂ~xöîÀ\gvýʶ+¢^þ’«9þ«·Ê)¥0ªZ Xӓˉ+–K Qf·Îþ¯$3ImÚŠ³íñ(ãC0a,¾³-à¿rUíÇÌ•pm%›ËÒ€5IØ82œÏ„¥b·¸‚ªRþîƒø¯½˜ îl|ûOD±6Íüóâ/¤¶ÿÑx Eµb¦ÈÈÒ~Ïͱ6ˆ°&ßß똹ËÂqg#h3 ¼kŒ^”ÔºÛ#ˆ ÷£"ˆ›éšyóåƒT} L¼0µ!T!,ÍQè¶Î ŸL–§¦á# PQT0¢Ðl2¿kŒœ1¤×oŒÂqû–®Dó_ŠÄM`0F1FÛFÁ€i4pÒ–%!Pe0•r0 ?J¨âÈ…hÓ (ïþ2þ«/°ðð_:Heσ˜¦Á„zÅÙUŒß í¤Qe Ó44m±Ö¬[ß\”‘;bÐz}€6}L`¢e8ž¹i%j§ jLÒϰ„éFÝ;ÕÞP h¸`,²ìǽíîEî†ûð¾ó¡³@\ÃŽ0X)µ"ó~½ZNLÛú¼´ ¡}=Cæö{ÑÚ‹ÏQùpò;³qŒÞ=OÇýéîÆ•Àd;ÊñÙÙùU^.ç˜jE1Ö[?xoC[¼zì¥omB’ùâ]x£c¨Š»·&¹ˆ‡Š•ÉQ*Í›Py3q €¦fæªd²‰¶ÈïØCv´-^9z€â7¿BØ ýé[¨;˜<Ïn¾—ü·ŸèX¨Úãáe™ž.U I\8î×4š\¯; !ä6Ü™ ^>ò3¦~€°b‚ØjßpyÇÊG$ïyënMú· èñ¨û!Õj]\8žŒª†!|ïÜÄŪ50wl·™}Ó<û>¥Ÿ<Í¥í±xa¼ë…¡bš†KÝÏì¾½çÇ™yæG‹Æ±†9;~±ìm­]ÛqÆW^ó¡Ážê|T X ª‰i—cíT‰>1¢'YGb7­¾5¯S§Ï®°ß«Z¶¾{î|UóýQ(Âhv-²½ã^Ðñ,~¾°níàŒW­•rWEt§êÑ Ù|úô¹ókpÜLRTtƳµ½&÷ãë¢÷@Áõ°†–ð÷³•Àoî_X!/*JDòOÂá‚—Y{ݲ¥™›ÁÌ•¢¢#Æm•[‹ŽØvˆ+ŸGóýœŸ¬MUk¿Ý÷Õ ¤ªs‹D¤(ýô?Û®M¥n»vɰë96aq­×qitæ@¼çJO«šQÞ™¼èÿ­Ùüåcðl3À,ѹ¨ª~'@èÛÐ|vÜSÈfSW ö§Ò¦V…z šhýûÛFR)¬ž âehe|z&(–+Á/àØøM§p|žRÕùN€0Z­†ÆàÖÕpK:–!Ïsz3=âØ6)ÇfsµºNU«AÃ÷y Þ<¯•a (Å-ˆ D¡ÐE9 "éú€^ —‚ÞÏÁõŸ€›—Á5.ô9 V‡ùIxÿwpâ x» e Btž#¹ ”µCôßþ7 H=@pãk7¾ŸŽ³ 7hÄ­4€à_éü7ÑæEóÐIEND®B`‚PK Wr¼6³ÊaÕÕToolbar_Connect.pngUT ¥ÈZFº–óFUxèè‰PNG  IHDR szzôsBIT|dˆŒIDATX…í–[LÙÇÿg.Œ‡±øk— \ 6¡„’d ÛÒF› tEZ)ŠúЗj¥²ÛíCVªÚ‡jŸª­”H]U»}jŸúPi£¨ˆDJ‚za%"LV”nÀlŒ1ÛàËØã¹öì5YÒìJíÃ~Ò§stæœïüæÿ3ó_ÛÿØÈ³Œ±`æmEQþHùíÄÄÄúW @4xíÚµæñwßøÑÛ¿xV[ë«ËËËï;vÌîõz€øU|AÑÑÑBÈŸ¿õãÞ‹žE`Ç¥ë#ˆª“““EQüÀÛ·o§¿,À>®\¹ÒOÓô?oüê¢ûÕÖihÖ AÊAP-ƒðz½¸páBÃ0¯…ÃáŸuvv6ºÝî…P($½,@MÑÑÑËfûø£_÷™›_v>¿ù›w 7´Ã0 †]×AQ²Ù,îܹƒû÷ïïhšö{UU?¸{÷nþ¥ðz½ÿxÿýß9\6 ÔÒ[0¬— º?€A·ì[P…0™LèëëÃÐÐI–åïÅãñ±®®.ª¯¯oaqqQ~€÷Μ9câ¬ýàþ%Àà¾Ã0j“5Mƒ,ËE ÃÀ0 ð<³gÏbpp°1ŸÏ¿‹Å~ÚÙÙ©í¨/ ÐÕÕõÎàà`óãÇÁ7EK[wí@’vÓ̲,xž‡®ëÈçó`Yº®Ãl6ãüùóèïï2™ÌH"‘xÓãñ('Ož\X^^ÖðxŸÇqÐ4 MMMBOO%•J]ÞÞÞ> ÿò,ª®ß¨ª*xž„ÃaLMMÕ†AKK ¶¶¶P.—A!ÍÍMhooG±XD¡P„®ëe'NœÀÕ«WA¹ø¼Ô ø~ëÖ-˜L&˜ÍfBN§qïÞ=ÈòçgÊn·CQ¬¬¬@×õÚ¸ËåÂ+¯´!“É X,brr«««0 £ð<€Z ‚Áà§N§3 …Fzzz(žçQ©T ª*Âá0œN'8Žƒa`Y‚ À, !`6› Eac#…r¹Œ'Ož‚ÁàõCö ÚÚÚ¡Pè ·ÛÍ9rår†a`ee‹‹@ÍfÃÖVÁ`6› „€çyx½¤Ó„ÃáÂüüüÀD"‘«Õ:‡¿ït:M.— årH$ ë:ìv{mÙl† ˜…¢¨°Ûw „ YA.—+MMM½0ÀÄb±MŽãþµ¾¾þzSSSÓñãÇkÙl¹\.— Àî5•$ 333XXxŒ|>Q1?¿€d2‰ÕÕÕ?ù|¾{/ `ìÑ©T*¯iÚäÎÎÎkº®Û»»»Q©T ë:DQD<GGG¶··1>>Žx| KKKØÜÜ„¢¨Èår˜Ÿ_ÀÚÚZ¿×Ûóû—pP=Ѐ¯ºÍf³Ÿ;wîÃÞÞÞ‘‘är¹Ú­$©vêEÁâ¢_ Ah!DQ„aèeYæ'7oÞÜ÷™>¨б{=)T¹\Ö’ÉäßY–íØÜÜtŸ>} ª*’É$DQÇqèììD"‘@¥Rð<ææf´¶¶Âf³"Ÿ/ôʲzjxøÛ›››ÓŸP… UWňD"Ÿ˜Ífs<?}êÔ)p‡l6 š¦ÑÑÑG!®f³ÛæyÓQ]×›A@[[ÚÛÛáp´VÖדF.WàÿÌaÆS`D£Ñ‡‹¥‹ÅÝn7±Z­333ðûýK>ŸïÝP(ø(‹}ìt:)YV¾Ùápè,KË C§Óéô¶ÇÓ ™çTU¨þDŒªÇb± ‚][[û®Ãá }>"‘ÈÃü²P(äv³£VÂáð´Õj›­T䪪l¤è¥Ry^Qô²ß¿=  º±Z Ð‰Ä2Çqó©Tê;™LæþôôôoJ¥’¸7W©¶ñx,âp´$I21 »Q©HŸIRyQ’J+ÃÃù¹¹9ý™UñÖ€Ûs¶ÎiìXRY£\ºty¸¡EQQëõÕõa Ô›¶P«sµ~£§ú5„Æ„ ÉÓ4¢™ú ÿOƒ]U|~m«*Ô+¡÷ƾ`_ >© {›uí×öÿkÿµ2(%úruIEND®B`‚PK Ë©&7XàÎíddToolbar_Blink.pngUT ŽQàFº–óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME× Ÿ£>lñIDATXÃÕ—Ml\WÇç¼÷æÃŸ“¤±Ç6`ŵj*,X ¤‘M…²€E‚„¤."Q• .X¡ŠEY°eâÙdÑØF"TABˆ –)Q­ŽIì*þ»öŒglÏ›™÷îaáw°Ç±uÑžæÝwϽÿÿ=çî½#¼€]ÿÝÛ'{Ű]ä¾jfùÈÅc¸_½õë*€•“gÀë9‹i±:¸"­âמ‘¤$‚ÉQïÝ»w6NÿRD®˜™¶ö‰fÖòÅHÛ">•ßQ©ãÌ#Š»©×3Ökaõä_'þôèuÿ0ð;wýdxxøJ___ºO“€suâ(Ê á¶âjóôö"5 #‰ço”“¯¥S•ŸJ •J©sn¤««+åœã fÆVùýƒ„ÿ!éÄ"’©ÇÝ$ý`U°%°ˆÑÓ%z"³õ­C A a&[WÚÎD„¤w›ØJxú BÏA-KlÝxR™·¶‚ÈIzºÂ´ APy^øÍ­£ऌ§›ˆöbœAýW@úqñ Š!R[Ç(òÒ)ß÷!~ä HTbÌé9…x/ƒgi”$PD¨“Jyâ·Š-•JI{A¼½À­©Ø€Õ±Xq  ¶ŠY±æ–Cd(ÚÀl•#Aì<ç7ÊìóÀw€6¡VU[\\Ïóö…¥)LUA웤éJ§P-ƒ<ç]ÛÄ“eªÕüàsxÚM½Æ~Céo ü´££#Ó\ÑGÚ/œ{•¸ž¤ZË¡ºL:ñ Õu¢(À¹ æ6PÿkÔ£Ìû6 Ë6üÆ488xBD¨Õj¨*G•ÇÞt¸Ø‘Я œ7‡¹-°MêõŽWQÿMLbÐ~¢8·“3ëñ<çqáœÐ.ÜÚ6D2Tãï³½ù%T>F4™ÃôÇ}¨'¨—¿ýä¼xsœ‡‘ ´ù’é>+ ‘z¡P¸Á»þauý< çø›ªþ;ŸÏß~žÍf¿˜J¥¼r¹ü8—˽yíÚµÕ¶"K¥Ò¹\îééébðÖg'¥Réöêêê?óù|&›ÍŽŒŽŽþFUGœs¶°°ûñãÇïÛŽIc—³Ó§O[__Ÿæyž +‹NU7fgg—¨¬íe¶±ak6›õ/^¼˜¼|ùòÇÆÆÞÊd2½³³³MNNþþÆw2™?ð?¬V]¹\v€A€ªÆ¬¯­×6J¥¨%¿qŸez{]nú?ñAv«`yyÙ©êËõzýòâââæøøø»<øã­[·>Š¢H666šaT Õ‰v±5æ’†OH>¿çó+­—Z¯1¾é[kŠN/]º”>wîÜwEäëårùþÄÄÄŸççç»›O»¼J«¸ï­UÐV͸ÁÁÁ¸†á{“““kóóóÒ˜TvÏÕýwCÛ£p·çÛ¡&Çì“=àíþ;üÙr{‹D'}áIEND®B`‚PK C´$7%©NToolbar_About.pngUT >ÁÝFº–óFUxèè‰PNG  IHDR szzôsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<‘IDATX…½–klÕ†Ÿ33;»ëݵ_;±Ç'qpUB †â@«^„Ú@A´8‰¤¥"&Hü¡´r­ªATib‚€ÞD+h(" ¡*„¢Ò*©É=] vìÄvã ¾ïzwç>§?ØD¦!äå“^4šùÞç¼ç#¤”̬'šÔç$žÞð‚gó.圪’(˜»h³¦©ûÚšÔâÏÀóügÃ91ké·-QU%ÞÖ¤Îþ\6¼àí‹–U×kËW”ªªÒÞÖ¤Îhm ÀÓw–DÏ|¿ýN¡~¦Žeþöd×~»¼òJ¥îK7ÎU±§­IÆz¢mwG昺}Kk«P¶Ü÷Í^%¯ê3ð|w¼]f¦)-ˆ*ÔÖ(ŠxÓñÄ€";U…Û"ïGoˆ§2 §B´Ý%ª¶4‰Å­kDèRÄÿî‚3õä*í@ý5Ë—êÖi¡åÑÓÓmŒO¼¬‡g]çº^À÷ñƒºÖï8‰~éÉÛ#ùÅž*ð’“ãa„?)}ÿ11éÿzý_¥uYmMêW"¹E»¯ª­Û‰ÿ „ 8ÜqÜê±A]m´ì ¶ã.(­,¹¡ñf= Hl#‰ãzLŽr¼§331>fHO{϶¼%ÝKغR}£ººæ¦¼@R8Þ?åX2HieZQ]«d’ãrblH œzŠŠyT–c¥ÆqU6Lzû‡Rét&åJ~øÐ6÷•KhkRkµ€~dIua8™L0îиâ~ÖöT>žšƒ§Æè<ºW÷“ųY¹ÑH8špÒ&‘Lqj ‘ö|ùª˜ôî9-ŸMá¹9&WËÓ¿z{3ŒîC³Gq›L:E:••yU ôžèòOö¼ëIä!”2„(ô}à*ßóeH }h›·ñLÿÝgX™_íùáh2ãh ë¯ENvâ%ûq]Û²°mDZñ쉾·™[Q¥H)Tßç-×Ðü¼I\át¼Ù®ð–Há_‹ôÿ5ÓC;¯»BÞ]*ŽÂ/(­RÒ{ÁÍ %8¶…iø¾OÚ rÂXÀÂp‚ÜXNjj:ݵ~›àOÐÒ"}`2«sê¼ ´þ ‘¼2µCõD+ SãüÞ7Ÿ·F30éãy#n)ýsÖóuϰgòjRäÆ,æBs{!€–é·´HÿÁ—’Ý ø®™àµ¡:îø ßßð Çs›°=•A¥Ž;šÖRTTÄ]«ÖÒg-š*/Æüf–TH¥“Xz9‹-F×uV|ï>޹_Ä Î¡»»›öövJJб <)ë.àükà#”bÂw3å¡`€íÛwpäÈæÍ%=1BooÛ·ï ËÅ2hBS¶®W7o“‡/Üû"J 9æØ6ÉÑ“t¼ÛÁÐÐ0‡¦ã½Ò'yàõìÚµ‹={þI¾ÑÉÜÒX¡n¿˜sá¢Ã÷<®Žvð—]/óâK¯`³gUqÐP©«¿ _ ^óïä‹ÐBT„§K0äàþO b~@•DC ]ñ½ÌžWÉ×nZÎõ ÔÔT£(ŠŠë9Äãq6þr3eùs"KÂïÜûÄÊÀη9»?€ïËy½c[ßžÏ}kÖ°úîUøÒÇ4 LÃÀ´L Ó@S5"‘ápˆÂÙó8: Å2};{DÑÃÏÉôÇõ¾àxr•ÈíOç‡þ/&'œCyy9ããcLNN0•œ"‘LL&p›ö}û0 Çuزy väŠÐ»#å¿;_ÿ tŒyÿÔBõž{Wc9&?ßøƒhš†a¦`¦ç¹´ï;HN8Äu×.# ÒÜÜLOºòÛ— ð¾1oíºu?W-©£~q-Š"X÷£õxžpBú>‰ä4‰©)®[ÊòåËI¥§‰Å¢8¾ð.@QBsÊËÊèÖ®½[¿ó-TEòø¦Íƒ!Lóø¥”¤Ó)r"9Üqûw1LÛ¶é=Õ‹¦i£— rÔ±¡áa `Ù7\ßÀšÕ«Ä03xÞ‡ƒs=—H4‚ÐéìêÆumÉ$[Ÿþa™G/@¡ !Âcc£­O<ùŒ5==M$'‚m[œ¢´´Ûþèu϶,®aÿC Œ°éñÍ„GÆÇÜ-„ÈB.5޹@Þ‰cÇÆÓ™ôæ6øà±Gà3ÌÓRJûœf@(€žMBÏ*•–•šB1ãW¿‚?…ßG 8©”2fY¿j†¶ìè3Æ;ç«,Ðc%k~@dVàß Áëaîßà½7À‘Rúçëý_õœÀ,PÕnIEND®B`‚PK {u27áïî44Client_xMule.pngUT  ÈïFº–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×  +6„?êÆÁIDAT8Ë•‘OË1Å#)"4‹I©ÉŽ,,$kYÎ쬕…Oc¥|>ÊBŠ…,ý™DšfR,†Qó®ÈcÒó¼g{û{ï9‚¦i¼KQ§ßï üQžO˜ÿ”÷EñW³÷ ½ïƒr¹Ìr¹DQ§Óé ë:º®³ÝnÙï÷Ìf3>ßó>·‰¢Èù|Æ0 :«Õ Ó4Ùív ‡C×f×@€D"A¥Ra2™0X¯×_A—A2™Ä0 6› º®s8øKžgX–e°X,¨×ëT«UšÍ¦ó[3‚¦i(ŠâT«U®×+Åb‘Z­† ´Z-lÛf>Ÿ¿€^¯÷3Äç†`0H,ãt:a•J…H$B8¦ÑhÉdǨªê¼›xžÆb1r¹Á`Á`@&“Á¶mÇ¡Ûí"I¥RÉ¢¢(ŽÏçãz½²Z­¸\.˜¦I2™¤P(ÍfÑuý{ Óé”T*õo·ÑhY–‘e™Çãá1ŸÏ;¢(b†kX*•H§Óøý~ívÛ¢Ïçx<Ž$IX–ÅñxÄ4Múý¾ ªê ?á× ‡P(D(â~¿cšæWàSÿèýÕäì7 IEND®B`‚PK Nd7úOŸ½½Client_Upload.pngUT 3WÑFº–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× "ì{pJIDAT8Ë“ËkQÆ¿¹7é$©M›‘Œ•K»©/º[C‘’…v!ÒmÁÿÁ¥H…tåÆ Áý€ëÐVqQDh¤Œ˜Fã+¡„©™N2“Ìdî½n¬&µ­=pœó»ç¾ ì 5»¤ªÙÜ}1hosn 9Ô¿¿bYÖç#”RhšöÌ4Mª(Š*„c RJ躮¤R©{]]]%˲¾ ( ½BˆžF£1O¹L&Áƒ¦i¨T*ïlÛ~ ](–,ËâJTLNNÊL&Çq ª*jµÚô’7øÀp䘬§föD, BüaîmGÆG¯=ÚñÚ­6\ÇFµˆ}@@‚sÎ9¤”àœ#‚„äL:n€µ-MÛE&%ö°× @­×ë3õzH)EQ„ïû R•·ÂHgA(Ž|5²Ð3:ýj¬›rsðêå¡íMÛE äÚÚã]ï›h%€àg.Œyg³ÆÓ‹ç¼6ç­v€x"©tç!×õeOÈQi.ÏmÄó7ÃPL¤NuhœK´Ú 1øµºöÁs½±jqÊ#ÇÅ´¹<÷S;w½$ûÉTR ‚[ëë}Ï¿S-N9ÿ|¦C2k.ÏUIæRj|lg{ëÛvíÓÝÕùÙÍÝ‘%9Æœ èpVÞWÈió·ý}qvóË‹ÈÅüp Ë?Í)IEND®B`‚PK ôi7žÉ½!jjClient_StatusUnknown.pngUT \&ÈFº–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× (KnS÷IDAT8Ëm“ÏKryÆ?~ï½Þ;¸®Ua˜š VÌ»h¸Åk#´¢…-ZDÐÂj1¼ÑlÂ…ÌBíZE‘›îâ"Å2)û±‘¢a^•k÷Îb*z™÷lÎyÎs8Ïã0M“‰DÀ/À8~-—€c`Ë0ŒÊÇ~Ç@$Àoªª®OLLhápX P((•JV&“i·Ûí àÃ0¬w€×á?ý~ÿëëë?œœœÍf¹¿¿ §§]×#™L6///ÿ>†aaš&º®™ŸŸÿZ«Õìxo×ëuÛ4MûààÀžœœ´‰„]­Víh4úU×õ€ÔÛÛûëÔÔÔÏŽL&€‚ÝÝ]ö÷÷ÉårLOOãv»ÙÛÛãùù™îînººº¤‹‹‹¿0 …ÙlEQh4<==¡( ÔëuEAUUÊå2ÃÃÃB1.€ðÐз··È²Œ$I(Š‚,Ëø|>–——±,‹t:ÓéDUU¡P˲ÂòÇŸ !eY–Q…••œN'›››ÜÝÝ¡iBTUýO(‹E¼^ï7 \.777är9 …ªª¢iš¦Ñ××ÇÕÕBˆ’ Ÿý422"^‹H’„‚ÓÓÓ÷sÞ²$IƒAÎÏÏ­———cl¶GGGñù|(Š‚—ËÅÒÒ‹‹‹hš†ªª8N<~¿Ÿ6°% è´Z­T*Õ\]]Åëõ¾3x‹·Í‡X,F2™l5›Í Ã0*ßH9 }Z[[ÓŠÅ"•J…‡‡4MÃív éïï'•Jµòù|¾Óé|6 ÃúŸ™4Mû}ffFt„\__S.—­ííív«ÕÚ°,ë[3}ÏÎ’$[–$©Ôét¾kçSR÷ïÒYIEND®B`‚PK F¡¥6†’Eþ//Client_Shareaza.pngUT ƒÈgÖwÒ4FøŒ(sAs°YUÐlƒÈ6S;ü­ê, ìŸ4ü­¾_Ÿ3]!ÍœpÆÃ$Ûº?³ÈëX³š½‘‡@ïWkmßpU7¥£(°{:áoÞñ|Êvnª2Ó̹ñÙ„O€ÙN‡Ž$ÂÛ9h½Þý¡ª“Ò‘]ñA„½2&4H wiàu£,u<–—JfJY6g¿êDxWŠé }tŸ.^-·Z86÷0â]4í‘Ú{eÿùüPpþ“o#IEND®B`‚PK̪7™[štvClient_SecIdent.pngUT pÞÍFº–óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:‡¸°˜„þÑI@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy@…·<]C,N¿¸3‹)QÂõ¼½±‡JÓ‡7—w(êÍ ¾ARñ†gG­‚bÓÜ÷L*¸×æl q’š=EÈ@ËCfæÌónkê7L¾óI¬}·†àC!ɘõBt^íÞµµ)e/óÅ;ÂÍ6]eÕøÝ«rýÿ=õ®é‡Œ‹=z’¡Å¼<¤{òZ—6¶C«ù÷½cûú(Ù¦V؈ó>ë‰ÛEæÖ\“»¸åÊÍ‚29†}§ûùøÜr™Þ½ÿ}Ò„Â2¹øÃ_CZ\×+ÆÞe‘-ןY´æC÷{צO¿·*/—µßzΗñЗ ž®~.뜚PK \®7ƒV|Client_PoorRatingOnFile.pngUT  MÇFº–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ7ŸíR–7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïln_IDAT8Ëu‘_h[UÆ¿sÎíÒæÏíÒ•vëèMšnЖaµqYQÑtÎ'KÉžŠ0[öàÊ@§(LË|÷`*(¸‡Zd¨ø CÛÚMÆæÚÎjј)­k—Ò4¹Iî½ç&÷Þs|Ød8ðßÛ÷çá#¸‡ñÓ§píÚ|cô}!äA „ü „x!ï[91öÊüäž Ц(Ê/‰þDHÓ4Ê9G6›õ¯/Bˆ}Öãñ>ño€¡ô`'cì!Ä!JI1ÑŸlííí¥¦iÂ0 ˜¦L&#þÈfsRÊ0!äk!ĉ©ÉÏo(À=3JÒ4Ì/ÌïŠÅbà¶ »ZçÜâ¨÷7ÐÔ@[$¢a~a~ðêÕŸ<¥ ¥ž'žˆD¢Ä4MD#…B0M®ã  ¢½½;ò›ØÙºº®CUU"„H ¥ÀpOW7B@H UUo¯ÞQKK+„ „"—»…üVÅbMá0ðŒÂ{9‘LR€ yG3 ø[`s”+%ؼ Ã4P(`sÐ"ÕK¥1LˤD8F>Ÿ·9¸mÁ¶92™ßá«B/.¿{Ûm$ëî骖týqÀ¯èåÌJÅbÕš‹[°¬¦®TQ±ìn”„@xVWVm‹óן¬¬®âïµ›¯{‚îr<‚mÔÔ„‚?kÝ@½Šåµ2ÈÖ(¥ @Îvéx†w_ ã§O‚‰iÒÄB~±4ùâÉ}Cg…¾¼»ýáGrÚ&ÔTMm}äö· ¥DRŠÖ{먛[K¯?“IvÞ!ƒÛwFX)&©«»‹LzÈÞÓÄ“Î[ BЫ(¥¨i¨mB¨Ž©Ñ®vC£[M¿‰e{QJátZ Y¼>‹îîÇØÃ³¡€…A¼^áPˆŸ²QqâÓÞ3¨jj¶’ΤQJQQš|>KÏûà6388ˆR ­ÃÏô€BØR‡ `Uk‚ÅÂ:ápår ¥Ùl–ææf^<öW¯NQ©TR¢•B  \“q)ŸË3?G)…mÛØ¶Íѣǘ˜˜ ‘ˆcY•JË P,ÉçòàtNy;/³±¡I‹|®€Ó颿¿ŸÞÞ^––oMÓÖ°2“$64I™Êeùf_ÏÉ_/ U›¢?þŽÖšŽŽ'‰Ç—(•Ëh­q»Ý†A:‘¢°RàÒ/#ë_~Ñü[¤Æ;›bׯfŸÞ·¯Íõçô<©Lš{CõxÜ</.§›¿ÿJžYåóÏê±Å±†'/Æ€¤àòìHÚe¸Æ§­5[ƒ[BµuØY›rºD1Ydyv™Ñèß|ùÃFôÊÀ'FÎ}Ä”ØÔ•* ñ©]Ïݽíž>—¯V ih´*l²ñL|â«èé%`˜´àÿòÿ»1(k@Èê†ùc®n•jþEIEND®B`‚PK ’¤¥6é€lÜùùClient_mlDonkey.pngUT ³Î[?8 ÛaïÏÂz`|—åõŠr}ù,#)qM”9wê¹ß[þâÒ•ðü|[¡!ÓtÔQt ­ó¢UŠ ¨žs@%[Õ¯ Èµ[¡[´,Ëíh5µ ¢(jœ5ÎÀ+'ºûµ¢þ"«‚ :¤„á&}WǾ×BåæÈÁ#NyÜž¥‚²,+P½«†)¬¬¬4ݺI˜8Ó7†)–¹Ì.üÖ•Œ/t/Úc@ýRF‚¹E)JIA©TºjwÖN¶-ãétzKj%ån?|(Ä-ÚFˆ<‚)ìNËOSÁcF«´c´Äš™³#Ã#–d2ÙæÞë~`µZE^¯7â¬qžijj‚¹èÜû×o\w<ZCf‚RRÊÌÄ»‡Rš{šû„Å'R#f&h–æž~Í4÷ß(¥’_óàtyu?ÝÌçù|øvþ¤LúóòhQìIEND®B`‚PK “7¹Ñw›ÑÑClient_InvalidRatingOnFile.pngUT SÇF¹–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ&Çkæ7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë•“]HÛgÆïûOš˜ÔZ5m4FòµæcVL¥cjfq¬k¯œxW¼ØÝ.CºA/¼œPØl a"ku"a¥”mltj)eÚMV-ÛÖtήÉìÚžßÿ.DAïöÀÃá9Ϲxž#؇á‘!îz4MûX•JH‰bF)õf,Ö²öîÅK{øbߢ\&“é^Üë³ú|B*)Xï}½|7ù £”ŠÆb-jGHôöõø4MQJ½*¥ø§£=î¬ýäSŽ¿Dak‹Ÿú‘_Ïw«ßVV†Q%„¸®”zgz*ñ»Ðt"zå왳绺ºÌB »'½)ª p<~ŒÅ0È <­°Šö—»ºLRŠÐÆÆ†éÞò„ìí뱕Ëê§QèzO½‡òt‚:¯—N'B)£ÏS÷Ý @]Ïâp8„RêLo_M‹DÃo„‡^kðxD¡XDÌÎqÌqËýû¸/_Æzò$Ï®^¥èpðWæÿÚ+H§Óä²9²¹Ü†Ô4m =—UvJ׮㬭Åâ÷cñù°µ¶b®®ÆívSº2É£õ?0 ƒOƒ”R^4躆Aá›oihk#ëÞ‰ Âá0†a°09Ƀþ~ŽlÞùì‹/ì˜gÈr¹<2;ó}>•\#óÕ×T[­ŒD°ø|TUUQYY‰µ¹K €«ò0Õ·ï täZ2§”zOãkÉä[ë|´ÕØÖFvv–c—¶=Þp R^\äh0Hþ‹é­Í'OÞ>“±XK®{*q­I3k‡…À‹añùp:ÔÔÔp0ÅvêN“™ãéM­{*ñå|¦5oB {;:LúÍ›oÜØéèèèžØºù¥³“:¿_[M§‡¥ýb ž;ÒÔ´ŠD,&‹…Ʊ±Ý…öövææævg«.YZbùáÃ|6•j6Ixß›sóóø‰=C¡Ðþ_Ã90ÀÓÓ§q¹\æÕTêC1騹sG*êë·¥F±¸];ýþY>O&fyeåo1C €ü?$ ý~`BŒ1tó>IEND®B`‚PK "“7&ÊóûûClient_GoodRatingOnFile.pngUT _ÇF¹–óFUxèè‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDAT8u“ËkSAÆg’X[Ó6M¥ÖGŠ`)JtÕÔ…¸ðA|mêÆÇÂJÁ;ÿW¢;qçÂhU\hT¥ Å÷«Á&m“¶·÷&޹Dž¶KÎb†ó}|g~3¢ª,´l6½ˆ‡2¹¡…z ª„>„F`A™M`³ém@!”É}ú· y`-¡L.øw¾XÊäžýŸà;ðѤïj|ãC³jçIUmÅçû°³÷¢„u7p蜗À¤¯Ó²éˆtiZ ájÇaâ%Áð-¤ZP”Û¡½2³S;Æ7?‘ŽC"˶Cd Øðß¡õ‚lí!°¨ Öjæ l6mL}²_šÖ€º æo ö'H“J"9n³i™£`³é­Ža8ªH£„ëÀÿ "¨uPõÀæai€lCÞÞJ_E¹Ê(%„*ÞjK`¿‚ Ó` L@P­è"„F”x-F¡¡mHºvk¬ÂäDžXÔåí—¯£„ŒOwûÖ¹?Þ\~ß»çlÿ…Ïó(øÙž4¬¸rã×V Å<]]ݬ^•Âõf~õ‚âX±oL˜ÑÑ_÷úÏßýÆÞìG'±ï}CŸtvv195E²%‰3ãà8ÓLNNÑšLðàá}¿T*õÔRHau×óñõ?-I|kinjÆó<<×¥®®ŽåmmxžGq¬Htq,lŒ9]û’¥ßÑ £ÕDk{û bÑÕj×sq=—úú¥ø¾WñH¥RˆÈþ9ƒP&÷,qøÎ7 thdd„r¹D©\ÆqªÕ cÅSÓÓø¾ªR©VžÎû¾õO=zœ»‰DvÖ *"ZsWFDŒµvÐZ{æ}¾@ú«4X°IEND®B`‚PK ò±7ÑÎ>•Client_Friend.pngUT hSÇF¹–óFUxèè‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<‘IDAT8¥“KH”QÇÿçÞoüfæK…òA a%=ADíb´(ZÕ&Z´-(&*Í–-¢M­$‚ ’‘°l!eˆ=ˆ¢¥”©£3Ó73ßëÞ{ZØ[kÓgñÿý9œ13þ'¬ïEÑnKÐ^’¢–™­H™“º,¶b›”ó³P™‹)æ^ fÆAGãIûÄúֵɲÊrø…û†ƒÜ”›c°³¢®&±¼qµò2ÓxÜÿÄ‹”î<¦tv:Ž}¥mßÖ„m pè ˆ„ƒ±Ñ ì„ù´›„„tJák‰[—züBÞ?"[$Z¹¡¦®ªº:7 |pàC»_àÄ qDP™I°çÁ ÐÙ)X†à$çYŸFÆ—Z j]´¤*›>À f˜b0 (c9hׇö"|‡ªúf~ºÌbfIFÀä]°R30f ØQ:ð³ 6?·ÅZƒb%`°°,Io3ãÓ«+íÍt¬ ‚1ºÍZ]lAÒ“„B¾üüÉ;O–WÂ!Œ"Jà½ÏÎ “C¼n††Š‘ÁQ¡5ŸËe½×/½×d/„?ê"L{`efñJš1xç^…Qwй[¤˜2¼óå›Ñ‰W#Ó‘³j HÊY°°m”5µ` ÿ¾Ÿž˜º£~´UX‚nWWÍ¯ÝØ¸!^~ãy3p2 §a3îÞìóó9÷†bìI1ëß ¾™Øáê¼R§uÓŽ¶„ÿp†ˆ×7¡ÿz¯_,z]šq(õ D>S;IÂÙ’’Øá-»¶'¥¸}­Ç‚àü1ÃGfÍåoߨA´ß’â‚‚"¥ÚîœSÈß.o®< 4·ÿ¥ù ½Çг*HõyIEND®B`‚PK Á“7ó•=!ÏÏClient_FairRatingOnFile.pngUT ŠÇF¹–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖÚ2ã7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë}ËoTUÇ?÷œs[çÑBíƒÄ2šÌP#TÚŠ´%E° ( õ±ðãÊĸTcâÆã‚ ¢ ‰ƒš¨#¾RSŠ%qÚR@Úi ÅÎÜ1¹sÎuÑjÄßõïóË'‡ÿí£?@)…RŠ(Šhhh@kME¼óö»wÝ;ÿ¥”cðœ”ò= mŒyøüØÑ±úÅo¾Æs×#ùìº.ÙlŽ;wV_ïÙýè¹Ñ|¡#—Í5…Qx¤R)oÉOìf½¶ÎÚÚŸzò _}yµ)Ðc­ý¤X,îBê¡Áý ZkÂ0$—͹ ¯}úÙ¹W¥S¾Ñoì~ø‘«ss³›ê_<=þìÐcý{•R‰¶¶V¢HS«­S÷ë¤Si5š/4&’©Ì+˽/½ðÊùé+—yâà0èq]wo{[;MMÍ  "¥"ÒBJº:·Ó××Öš­[¶ñÀÙ³gº @’Rž>V8î­!ŒBjµ++ËÌÎÑÚð`&CSs3ÙìNgþÚü™Læ¡q×uQÖÚÃÛð<m JJüÀg~~·±S'ŸÁ÷ë\žžbqq‘Ûw`M&’h­‘£…|:•ê6Ö:7o^gò—If®þJ¹¼ÆSÇO µ&N3==E©´„ã8Þ÷?\º „¸-Gš\\º•™/fWo¯Š±±ôõö#¥KkëýD‘f½¶Nø¤’)Žä $“Éäòr©WJy^7¬µãÖØ=‰Tbª½­ÝB²ïñ}OÝ÷‘RÒù@]„A¸“0 »À®]=¸®{úèè˜R Ç!ŒB|ßG)E†T*¼ª‡W­²3×íH)?TRJff®ÇqF::¶Qõ<ŒÑHå>AàS­zÜ—HðWµŠµ€––¬µðâó/[!Ä…âìoqÅ«P*-±´ø;žçQ«Õñƒ¯Rù6ÆP.—c!Ä„2ÆðÓÏ?bŒyó»Kß kí‰8Ž%÷˜ã8F1aŒyK,\¿†òFÇãqß‹Eˆ>Æþ—qf;É¥£IEND®B`‚PK„™47à¼;õJNClient_ExtendedProtocol.pngUT è©òF¹–óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ Ç:>­ï@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy@…›<]C,N¿íßÈÕ Ѻµx[¯Xç¬é®ilò‡Ò7¨¯PÿÈ[’ÿšs–ÞZݳN[,\Bš9ºx=ºï™þZvøñ¹‡&”WEíö^Spêr†q®ö™ÒC ÅIXùZ°NÈelç.ÛôüW­½v_ÝÅóLgÏŽ:ªéT¾[Üb…Åß?)Ó½Â3‹½G¾ÀøÂ’¼óŠÜ¬3¯ö‹}iZQP2/àñ™¬3*ŸŸçÿÈtÿ„ΪšugðtõsYç”ÐPK jª7,.k´ªª Client_ExcellentRatingOnFile.pngUT ·:ËF¹–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×oiw>7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnôIDAT8˵“ÍK”QÆçΫ©XFiô4dDáB)°M¼®Â… µ ÚEÿ´kç"WAº‰hå,¢ "£veŠù…C£–Ž:÷¾O ›”j峸÷œç9—ç9ö2üPÜï‡ãõØvs6¾,D™ÜøÖÙpÌÕ$4F™\²uhŽ2¹×QÙðÅt>WùœÕŸ¸%ékßaeêCéiçm‹ÔMà*кë~$~HcÛuK÷š> ©Z´ôŽäýcl}Nˆ‘¨gôJã* ÔÐþÒÒ×ÌŽ^‚T øqTCuà:ºI\µÉ'Ï*1®Bçê›úìÐÐ ˜m&󟑦q§ObUvÓgcûƒÀÇ8òÂÒDuPš?B´‚´aD(áŽY?÷ÿQ,bl°–‡d…IPý„°É"„%eÙTqp§Æþco¬ýÆyÕ1?T„¤ah~ûºú‘ ¶²­ÛD™œôcf0{„!­ƒŸ? X/¢ÉU’;eð.,庭øMÉ«û(?¡ü>XXFcK8I–²ËÛÄSÀ'R‰Væx«’ݳˆ.‚º€–(“›Ù¹‰M@KÔ³YðÙø9òÀžŽªÞQw·53ÿÿLÃñ@Ù®=‹_Þýíul‡›IEND®B`‚PK…›47½ç†ÓÝClient_Encrypted.pngUT ª­òF¹–óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ  סÈ. l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< BGOÇ‹Óo/oäm0àa8X̲èü¥›’‚>¾ìE³åìê—±­]ŸxøHïኩ‹ßû®díÓ*mÜÌq€IAËü³s_õÒ“É?€†1xºú¹¬sJhPK ø£ 7ëP…ÇJJClient_eMule.pngUT ”¾F¹–óFUxèè‰PNG  IHDRóÿasBIT|dˆIDAT8‘OH“qÇ?ïk[lZél0§Ñb–9(¨ÏôròD¢˜Óh—/S3ø;½”¤ ÊjyãÁÁ6ÜîS©Tô!ù,ªËae1'ëŠö‹wèôw`µš)¯Wˆ>~¦ QòYT_{#m.;Š\&¹°B:/32Â}Ã[¾°Þ\Á`hn0Aƒ eµJ:/o Ôë7 Ô L”vIEND®B`‚PK "~7À†.**Client_eDonkeyHybrid.pngUT Ï&·F¹–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× 1xWq·IDAT8Ëm’¿jÜ@Æ:ÔiH’ÜöQHqUÀ…ïê{=€ÞÂ*ç·Ðè-l‡€«3§‘ú)ÂlPŠ“ä•| »ì|óýÙ‰X¬ãñ¶wnˆ "˜f†sŽý~…õÓ¥(Š»$‘iúy¦é»$€¿@üöÞb3»jš†¶m)Ë2ˆƒf×#³ªŽì¼ˆÈs’È®(о,Ë(Øûq›Ùd!hðÑÌv"òè½}ˆŠ¢è’äÕ³H‚sn8Ïs8o™Ý9·Þ†† ^ ,—™}‘Y‚·Àðm°CÓ´óKðX¸T9¬ŸÀ6Ã;KN.‚.€Íüv6u]÷cÑÒB ûx‘ª’çy´ ŠîÍìWžçQ–e‘ˆü3³?Y–Efv/"?²,û¤Úí€é—Vá _ªªêØÌCt \tL#‡þD„º®û4MQÕ‹yŒ™ $Äãaáó÷44M‹÷óUUõªªÊf³¡iš³‚ñ¢Úq8ÜDÇãm8ÜL«v8çHÓ3OÛ¶SÓ•™çááûŒ1xoœNOœNO”eµm‹jdžEõ¤ÔtPIEND®B`‚PKKŸ47ì6áÇ\^Client_CreditsYellow.pngUT ½´òF¹–óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ •¨‹Èõh l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< ÂCž.Ž!§ßN8˜åd(àz^åXRxG”×ö —R_úÿþ2ñ䡹 ¦c;õxêOŽ9íž°‡ÿƒNúŽô6nÙa{+½ëÆßûôËzzÑåþ/íÅú { ˜Vé5½ø'ÙÁï×}§®¼¨•|÷Ã'¬—½%ÎzËgÚÁ³QOÖ;\fÙ#Ϊ”ÆîrQXàdGÖÄ8æ? ¯ã>Client_CommentOnly.pngUT ÒÇF¹–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÕ 7);RHËIDAT8Ë¥“MhAÇ3Ý£H"-â±à) X+‚„xìEж'¯¥<Š Å õ"~€šŠ1½[M\íÁbÓLýÀÕlëZ‘Íx0C³mj+¾Ëÿ ÌûÏofÞƒÿ a’â]ú€àØVzxˆ¼©“—G/fwØŽ¶XM½ðíù9¶£WOJݬ;-ÓÞT@YXÝ“§¬ üèzØV_LKÇŠé7Äãqĉ¥?‹}MeM}ß'O2t힌3·„@‡Õz¥õz}ÃKA€›I­{Ë|-Mu=Û¶±m;Rìû>n&ÅàX‘ÅÇ^•—Q¥@ÏÈdcö¯æätÅ|†¹· UÊñsÿEΟ½0 ˆM ´ÖÒ½ \yŠ7}‡Êçï¨ù¼ï¦³Í7F´Öd³Y~ÉCÌ;ï>ÕYz=½iv­¬Ú4¡nK†!»?¦yô¥›û¹Ýò%;ûn‘L&q]—7•Œ‹\OP­Vñ<‘ÉG;+¬îH%‘H`Y–eEºxA,CkM­VCk”­5B„­Û¥Žãl:uÆd}ƒ‰›·¯Ÿú‡)ž0ÉoZè˜y üIEND®B`‚PK ²°&7ÃáórGGClient_BadGuy.pngUT ]àF¹–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIME× #/«5ÔIDAT8ËíÒ¿kqÇñ÷÷.—Æh¦m¬×BA¥‚K$¡v -ÔÁ u0úè¤*!-í"8ÔUu¯Ò%©Al‹¥*ŠæRJÏ‹¡5rwßsœrý |Ö‡Ï žð¿þU¾0+fæj=Ïœbš¦0MS»”½<èw›§nœÓožL˜¼>/âwTÓ45 Ç ðM^¹¯öÜXô‘þx)z|ÇŒèÏkÔ#úôƒÌú»ž‹‰ª'J ¸K‹O>oSçÓ„u£Re¹´þl_ ~tàPÆôpççLæB†ˆOAÖj8†ÁáPˆ3ñs|xó¶¿ùu×(îÖ_urÁàûññÇ\{{iÛ¸–…µ·‡+%CƒýÔ+Õ¡åæù®#ùþ…ht íö-4MCp]!2_ öòŰçü¸šB H)‘R „Àj4<¿¯ÕÁÜØ ”»JkuiYHÇAJ‰O×iG"¨«äùÉ…E>•ËØªŠÀQUE‰ÅPFF¨lmµ$ÜõõÍfŸ®•Jü ‡Ñ’Iüé4¿ûúØ,[v»½ƒ/@ä ³ ߪnïë•N ZÛÿ+³æÀ½ƒÂ>K²Za½´IEND®B`‚PK L´$7ÿñù@ôôClient_aMule.pngUT OÁÝF¹–óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME×PöÀ<IDAT8Ë…‘KHTaÇßwï˜£ÎØd*Vd> Ëhу "£E­¢—¥QAÙ ‚jÑ2¸*ÈEQ‹¢pÑ" zYÙB-1Ÿ•ïÌ\çÎý¾95â‡ÿÿ9BkM°Â¨šLCÞ¹ê|Í]·?¸?ý˜«ÔCJ¿†µ®«šÎ4Ojþ‘ÐúϬvŸ¡MÃЮ"¬”{Èôø—)­-!„£µ.?~{| $ãÖ”(-£ëË÷¤¦ú3nÆœP²!åA)DU’G+ŒÂ`…‘7£ƒ¸ _ ;²$¿ØÛÞö2¦Ý˜4¤)…'YgäF'GEÄúÙª‡jÿâ xe9Ùìp„¡¡z{ºHõz+dy¦×õ2Q®¼¥«tq¶ ] `Zø ‹¢‚U¿¡-—ËÿÊ>h*Šz/K(K¨*Hk¡×ƒ~ÓïÃ`Ђ¶ïkqQ@Yb$ŒŒkPoP‹‡ÑÀjYEÁñù9O÷÷]^ðëáE½!„ð`½¿ÂæEKo„í8†(ÂZ³D˜4…ß1rŽŸ‹EÇ´§ÅãÄ1¬3ªªz]iŠ’¸n#Ï;=?£(ÂbFoÛÚ ð’9ÇÉímp|w‡œ#8‡Öžüo’­YJˆÌÚ·¢××€xÿí;Á9Ìfiºc i†ü % WW(Mëq˜ƒÌh! ,ÛÈóú-¬jHð¾öBÂ4½KXk_Z†§§¨I !‰:Tsó³nï&˜L:æ5nl6›6~iâÍç/ŸöúÎÀͦ‡²w›UžIEND®B`‚PK u7½—¶Ç55 ¤Toolbar_Transfers.pngUTKÆFUxPK ¼n6öŒ¨¾^^ ¤}Toolbar_Stats.pngUTùwøEUxPK ½l6¢Æ@_ í Toolbar_Shared.pngUTãÖõEUxPK `27'?œÁ22 ¤dToolbar_Search.pngUT­¢ïFUxPK `27³Üi\\ ¤ÛToolbar_Prefs.pngUT¯¢ïFUxPK ,_5çåÌ? ?  í{Toolbar_Network.pngUTÊÑFEUxPK Æ7± ¡Î˜˜ ¤&Toolbar_Messages.pngUTcOÆFUxPK Ø´$7¡g&ÍÍ ¤ß*Toolbar_Import.pngUTXÂÝFUxPK ¼n6UtEww ¤ñ2Toolbar_Disconnect.pngUTúwøEUxPK ½l6Ñ’àÃêê í±7Toolbar_Connecting.pngUTßÖõEUxPK Wr¼6³ÊaÕÕ íä?Toolbar_Connect.pngUT¥ÈZFUxPK Ë©&7XàÎídd ¤ÿFToolbar_Blink.pngUTŽQàFUxPK C´$7%©N ¤§MToolbar_About.pngUT>ÁÝFUxPK {u27áïî44 ¤ÿUClient_xMule.pngUT ÈïFUxPK Nd7úOŸ½½ ¤vXClient_Upload.pngUT3WÑFUxPK 77[Ö{ÑTT ¤w[Client_Unknown.pngUTz’ËFUxPK  7 ùMS»» ¤_Client_Transfer.pngUTQ¸ÐFUxPK ôi7žÉ½!jj ´bClient_StatusUnknown.pngUT\&ÈFUxPK F¡¥6†’Eþ// ¤ÆeClient_Shareaza.pngUTƒÈ• ´Æ€Client_Friend.pngUThSÇFUxPK Á“7ó•=!ÏÏ ¤„Client_FairRatingOnFile.pngUTŠÇFUxPK„™47à¼;õJN ¤;ˆClient_ExtendedProtocol.pngUTè©òFUxPK jª7,.k´ªª ¤Ó‰Client_ExcellentRatingOnFile.pngUT·:ËFUxPK…›47½ç†ÓÝ ¤ÐŒClient_Encrypted.pngUTª­òFUxPK ø£ 7ëP…ÇJJ ¤êClient_eMule.pngUT”¾FUxPK "~7À†.** ¤wClient_eDonkeyHybrid.pngUTÏ&·FUxPKKŸ47ì6áÇ\^ ¤ì’Client_CreditsYellow.pngUT½´òFUxPK+§47Åc_°or ¤“”Client_CreditsGrey.pngUT‘ÂòFUxPK {7°½W½½ ¤K–Client_Connecting.pngUT!·FUxPK # 7D5Â>> ¤P™Client_CommentOnly.pngUTÒÇFUxPK ²°&7ÃáórGG ´×›Client_BadGuy.pngUT]àFUxPK L´$7ÿñù@ôô ¤bžClient_aMule.pngUTOÁÝFUxPK J4©vìû% ¤™¡Client_A4AFNoNeededPartsQueueFull.pngUTêáëCUxPK((} ÷£amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/skins/priscilla.zip0000644000175000017500000012322312050266603022157 0ustar l3onl3onPKªºÏ8 Client_ExcellentRatingOnFile.pngUX “ÊXH@êUHõ¾Aì‰PNG  IHDRJJÐÂq…IDATxœíœk¬]GuÇkŸsçúqÇy9ÆN— j¦–ª5ŠP+@­s Uª”G«öƒ[µU¡È)âÆ´M>•B¨ÔªHåѤš(AÇØ±ãG®ïõ}Ÿ³gõÃÌì½fÎ>öu0/©#í½ç±f­ÿ¬×Ì9û¿È²}{ÁÅçnD[W ­‹(X ¬FµƒÈ0‹c)#åM`ûv÷‹`U~®³MN^‚Èuˆ¾ äZ„+€Ñ3 °ˆ²ôQTDõ!&&þ¬ØµågÔÎ/n‚á›[ùµ³N_õIà+°üU¶Ý¶ÿ¬ÓågÔwÞˆðI„wŸjž5Ã#l^w>k;«Y=2ÂêáÖ 3$Âl¯ËìÒ2'—™]œãÈɘ™F›I)Ê(ŸçÖ[ï;Ûâœm „ÉÉ[(ä3oÌG[-®Ù¸™«.ÚÀÖóÖ³õœq6Œ £ AQ PÄ{Û>×s<b†½ò Ï}™ïx‘ƒ'O¦)Oáô³LL|áz¦‚­29y w ò6[Ýi·yÇæË¸aËVÞ¹ñ"F[­ ˆfvÔ°¥¦®8EøÑÔ víÝË®ïáÅ™™šœêã8>ÁÄÄc?­x?=P;ÿ~Æw òKïü±1>zõ[ùà¯e¤Õ:vuúvåé£ÇùòvóÈŸPUªÞ Ó·³íϦ_ˆqæW_vÞñvh}‘KcÕºÑQ~ïMWó¡+_ÇP«¨tÀOfM+ŸZG?ö^³þƒÆ+O9Â?ýï÷yüС@B÷Ay3Û>ñ½W#ê«jç—>òwˆ´cÕ‡¶¾Ž¿õmŒ´‡ñLàÕoO{ô·Gˆb{W€¶(8Àß<òßœXZ¥ î/ØöGÿp¦âž9P7ÝÔâ†ë¿ŒÈGcU§ÕæO¯}×o¾‘ZЦÉÎȰTQTƒO ÷"Íôûé ªŽãósüõCòÔ±£‘ð]ìúÎòõ¯—+ûÌ€Ú±£Ãª±¯!| Vm\³†¿z÷{Ø´víi5æôp:(ÓÒÌ ue?xœÿxî¹8øÌÍÿ.·ß¾°ÑWÔŽVwîyg¬åßû~.ZµjE‚¹NååtôOS´dÇ÷á[/ì‹3»ð[+keá覛Z¼îÊGä=±j¨Õæ/ßýÛ¼fÍ*z =Õì e¸/UÇäjûø3WÍê´^ÿøôÓß¿à-oà™£G9:?Èf††ÞD§sÏ>{JôWÔmüψÜ\=->vÍõ\sÁ:TÁ©âT«{UÐÀ`¼:§Î\½¿)ÕUý}]ìÛDÏUcœéïÕ)‡:<b8œ:„oݰ‘÷ïc±×áJ¶\¶‘oÞû_?P;'?ȧ«gοø*n}ý@)ƒP 4W—Õi`VÑÀ´AÅLRûú«ÙÓ±  îË0O©ÀQh;œó D»h¡Ãkxêðþ(ÓÕ¼ÿÆy¾y`8µÚyÇÛ¡ý0ÂPU·î ~ÿõ[¹á‚ñP1Øyor*g~jŸT;cר7¶ E2*¶Æ¶8Þ¦ ¥ãOý>sÇöÄa]è½sPž5(Ÿq?a“IVo`äÜKùâ›7Ñ–zÒ¨3}QGÕ§ ˜ñ6$§ÎbR×¥À¨Çˆú+Ô÷¢ýë©ðµŸg×óOÃÜË¡N÷Áô››2øv^Q—ñ HÃkàœÍ\8: x'é”5ù««¦W̳Ä<©ÆQ 8ɹú±ÂQMr€Õf˜¯ZJØÐ†5—Àò,tç@äRt|ð±\”"¯ü×ïÝ|‘Ömiqþè]§tôœÒuê#”kø@}mŠLÎÞ[š„{GWýµç\=Oc”“)5ôužF¸vKßfù=¸í!ßâeù““×ä4i”PpÖ,×n‚¡1@9§]ÐS»¥ˆ¦¥Æ„¥®4È(„P׋€sA…b3ñž;«‘L[M‚«Æô5ö«é©S¯eâçY3ÜöíCXu1Ì´ò¿ÝpÞ Q““·$G%íŽWO‚ã=GW•nÈMâµt^Cê¼Fk­ šÓ u]…®Š×L%h¨Öjï5ô‰ýºÎÑ-}>Öu1/óõñÚ ÚX]J§tU(¿?¶Ô«5iõhÄ|““·œZ£ ùLò|îåP´+uxyѱè\Àºiǯõ Jô qþ¸WÃË}X! 6ÂEŒ[²"ÜK=јJ[«k‘ðSM†\XSˆÿŒo†Wž³8ü+fæºøãÛúdrhŒ­L ±nÉRµDÍ5jé :ÌŠSiA×ôë]ègB?ïW‚Ï ÷•O#Ô…ñž¦Ò-¿+kŸÖ5t»êxi±¬AB`t7Cú¹óÎ#©F ŸLžÇ7€¢ïðj¼ûÄoïôkDÔ€*gáÚ‡ j…cê Ѿt"ñWÔþL}Ô5ãE¼’Úgzm2Z¯Zñ¶ì”'§çk­‹Z¸ú˜zÞâq_à$”_Ü„Œì«êZÃðšk½ÒÙüG•ñ–ð›Ï…L°º[ÎÃSìïb:„+$Xˆ¿Wç€LOìº$éAÌ›€I¯f¼:;±ÀCÇç ‘Ên˜réR¶Ý¶ßhÔðÍ p«.ô¾É™Õ‚i§ì>±ÈÖŒ$`ÄÓlUgÆÔí^pgwžñž7AÐÒ…¨¥¡:ªJji"-Õü6¶ó‰",:Çîéx`PÔ<…º³f†o>gM/ñò¬¹Ø÷+‚šz <|b‘ñ¡ÔÛÅô;»é‚¹háZ¥ fEóô¡j7ã¢åÛšxëB’RÄô!sB‰ã¾Ã³Ì;Œ³—ZE¤€± "P—ÏùæÉÉKhÉJâv6Åc§hr‘“ºŒŠð W±¶%µ °½Ô C®`iAÔ±ÅhHE0!"FK|«Væ–ÒŽC„‡_™cÏìrÆ5¿¡¼ô8”‹þ¾ÔíÀäu áÎ:êý˜$Ëï"pÿÑy~cý˜+—½ò ýc#_ÕQ¯Ú¯Bz‘x¤tS[‘Џ•?­·0¾j÷Ì<{æ{!Ò‘‚•ƒ6:s(‘ëPú®¤WçÜ4?©E¯/™§Ü{dŽkÆGØÜòæ!1ϱÈS¤BBZ”q«¡³„̼m.3;•1™~Œº( ¥òÈÔG—{$&/Ù½²£çÔ›eÑw%×&vΣöO¡.ÚUD*.“ôTytz™CËŽ7¬†˜pRcP…ë@´4ѫ҈Ÿ T“]4."H {f/ü‘¥?˜Yb©Œ~Q ÿ¤Z^#%UW^Ûfûöt«j ­ªµ¢uœÖ,…/-/pùè›:C´œC A ÞgÖ$YL‚©UIÔŽ"jD»6ËÔ´ýâžè)ÏÍ.q´²ú¢È'3ól3v \Ñfýú× 2RM44VZ©å Óê—Txv¾Ç{\::ÄÆÑVîSóÊ<¢ ¦¿ÖÏžï˜wE$IGfz%{zëº~`* Ñ~þÉV |PëÎŒ¶.®°,VÚW4JSiU{m’)°¨ðÃù{zœ7TpÁPÁº¡‚–DWmÂ$ ¦Ñ?>%hiœµÀ\ G–JŽ.—Ì«fü¤Xœ.òúkè04¢M)&'çí‘Z-‹Ø ÚQ»²|HÌÊ Px_}¤§éö(Tj±ª%Œ0Ö*n ‰ù&¶Ò¨‚RaÁ)ó¥c®W2ã”Å2.EAR°ª cù7óäÚЪOÀÛáç€u)ÚµFÙ=WeÇZßKAºD†¹Š­êÀT©Lõ´º…2Ú*h-©?‚÷õN¡§¥ßLk—e'µkrÕÞ-<§$ü™r9%`QEPE+]5 TþŘœu?ã&§±Œ‹IñE))˜‹Q*ñòMÏ\6OÞf÷9nkŠêi¨kà?^AjSkãXJ_±+PÕI:iò,†±Z‹jsÜÚÀ´Ô‡> UÒ•¬z •l§ÔŸD€»ªRE°Jœ_¥ƒÛø_ßÖEËz’q0Úe|ví mÀ XP ›t ~5«h„©"—ÑÒ*­±þÑÊ))íªíL<òûÖó·ÙD&W¦™ŒàDŠ1ÔÆa'KÂmÍo ŠÅÐt°F3­ÎŸ‚ÀQƒ#ð6*ç%߆%üC³u„!*‹ (ÇlõÊåT«Ô>È™8h+u¾’ñ!ËÔÛ|*éû²h*EVÔ:»Fós?[Ä{kÖù¼¦ÊŸIP åa+ËAÁªUËhU‘.Sùʔ̧ò]ECë¯L1ý«¹ì}‘ /湚'J×êç?‰Ö–¼¯³ü‡  ”{’áåYC$Êò›H°Rý¼ŸK™°«¯¦¾2 ëXIÍ&4ùŽ!N[¹‚LK‹"FË¿ÔÝùCMÀŸ˜ÔLûoMkdm´JhVoWVrÁƒ“Ø$÷iõkFõ±š)^ð¨uI´•”\Sóöœï<0ôl0Y,ؾݡìIVmþXJ8‚•3.2ÓÓ?®~jahæŒç‹b祗\sór“‘¥(²> S5ÊžÎÒŸ»ÌMN4 gZ2_!4 ei ZÅØ×š‹ßÒJÀlÐÌâXŸZ¥*9ÿÙ"Í3“ë£á UL˜š}¹Ö”¸ 1»2¤ bW,Ó®ÜaÇçÂ\ ™›ž_Xm0 ”/¤[d¼&&l²–3g€RyÐ{qÕ‡’•êÎÁÜqXu^ºJ}ÇE}fTS­…¶[ÊÙ’:Ûj[ÆÚmM0-óhªÕiªM^CšÑx%†#ÿÂqèÕŽÕ‡<‡ño)Õåľte“´.ž B¶úÖ‡ÐoÉÊ7hœõ êúD›š4Äšt«æM²vËãtý= ð­*|%júE’$$aºâ¶_åsær!ò¼(‰~Fõí¸Ø?ÈÖç¦ÐÒ®®¹©Gþ‚ÖÍ Tÿ-HËòW 2Ð]€©û™‹L90™öUB„•ì‹töj£X%YÖÇÖ5Í-DŸ¶X-YûÌèUÙ’\ PÛnÛò¶yºaÕ0«7Àl5b€v õÛoYå 6¥d fƒ ù˜ìs쇵üÊñeÉ4+ŸOžNÔj˜D RÕ¯vâF &ÛO¢Í‚6%¸I”mˆxvA ‹r /á_j`g¢ùù¦Á#êÖ[ïCy*©;ð¸9ºlòÜ)7iX–Jô™O&D‘Ñè>Îkú$Ùº4ÓJë rþ=aAzʾIšàô³ÉóÒ yÆl3ƒô_-­æ>}&A fŸÓÍ5ZÒú\«í}ÅO®™¡ýèë„þ"ìœüöç‰E®úÿË`;²ÊYŠÍO’_ÆiF@êºüÇQXû­eÛ~å%±Ÿ¡×ÄSο‹'á¹{Áõb¿ÇÙ6qšßp‚âøD2›ëÁ¨…¨T>7#£iEA²zÕXkÙêVY´ÕIÛ-­$O‹ã´}YÇdtÿ#5HMò &&Cõî¤nîÜú‡äÈ$w¬™ólL&ÉÚMd­|);ܫ)8`@§®ëóêý’ÝשÞÝôr3PLߎ꾤êð“ðÊÞ°jF°$ÄæI^Qç]Mþ¦/ëŽ4²h•ìͲ¹«¬›”V®–/)àÄ‹ðò3¤}0}{M>ª.MïÂHW¾Ö^ˆgTúÜCC‡Äg‰ñ/ %÷C–d2&óuÖUUsN‚ç¿UŸ9æ]˜S¿]õÍûò1ïéÂÔ>8g# ¯ª-Âò©bÒö)£©Å'‚–¸äã2óÎébh‹xSÛû­äËpζß3ŠSkT,;'ÿó1à¿nÞú^¯Y«½"ÊýgÚj$ë ¦9™8Õdöë+N¾{w%_ zÛ&úÞ±ee/6vÆîeË–«®¬‰;8¾:ã0¶®–+[üKî%«1F[5&VY­jÒDÓwêØûíT“”o°ë;>;o€>û¬rýõÿÉpû:Ív^yÁ‡Öµjr·dÈŸ-Àyû ñE¨hÊì“€¯솟|—Tûôaæ>Ⱦ°|:Vfz±4¼¥^•ÕÀå¿ £kÒ Þ™ô±–˜_OÕé$<ÿmŸÞ¤ígô–úJÿ Ä—ûïïÑéÜÖË6"ruÒ¶<ç·"´*Ï íydÌ#YÞšÇ7ÕhÚ^zÒ›Úrþ'7z»¾óá•hÒ ÖV^v~éSPüm’:Ä2º6ÿ:œ“Zé)gk ƒÚO7~êEØÿ?°8“÷ù9þ“†- ÿÍ’”±sá¢7ÃúËI³ì3(+1YðÁåØ^8üÌO5´ÿ¢þ›%–ÿö“”¡¬»Ö¿Ö›e“éåi‚-MIm?wŽ=ïw ÝFwóKðo?¶ øÿ¨¾2¼ÚGȵû×HFÖž8‹3>«ž93/¥G#}4~™þ?*§wŠ$kQxŸ6:íQŸÈÆŸºžO »‹°4íA²¿™T~©ÿ‘,§{çïcÿqw˯ÔÜõ—ÿÿ×ÄWQ~…ÿ‡óÿ1S£Ž­aÕöIEND®B`‚PK,šËˆÃ¾PK4¸Ï8Client_FairRatingOnFile.pngUX ”ÊXH¤åUHõøü‰PNG  IHDRóÿa pHYs  šœ¹IDAT8M“MhœU†ŸsÎýæë8I4?µmÈBq㢔ÚR(*bÅŸ… ®ŠŠ¨E»7ÝÕ܊ݨ‚¨ Á­;‘–ØEÅHM-¢èÂbÉÔüÙ&3“ùþîq1ßÄ\8—ý¼œ÷}yP÷9™W®™yhâè«iãÀó!i=¢jVżeÿ.ÞÛ^þ왓ßßtŸS˜w\ܘ‘ù¸´|ú‰ÑÃŽ?>¹/ÝOMˆUIYvØîþmlþrñÚ}pæ%zîˆ '/ýüÚÇ¦Ž¿ÿðÔ“xôBð(Žâ*‘@¿ÿÜi_ývõî7/ÏÎþÚ€Ÿn¾qväñ‹3_¬bŒêR‰ µ6p§Š%‰–[ßC»½øÉ±'>K–—ÏÍ`ë?LLLNµžÆ)`x×£úòbÕõkže­B%Ó£M™†ÕX”wÔƒx,þKݺÔ ýìÏØh”ZUÅÙ TÏ¥iDµ”¼¼A£¨Ž»À  /î½­iªE5ÄâcIÃQMÄ=§Š¿c Ñ&xROD2bÕÅ='C€$a$˜™  `à½t$|@F€`ŠpwD@BYê ètÑ™õP‡k}> œïÊ+K)´¬XÌs#IÌÍ SÅL0B]ÃÞTê?WòB®««|¹µ%=S3#„½¥˜Y]ŠÅLi4”^ßÈvô²ž8ºp£Ó•Kkkʾ†•ª†é‰aAkpšZ™õƒÜÛÔïN_ø"Úß<¿ºÞ;"j§´X{§î¾'@î*â[Û1¬¬ðW¶#oˆ;"‚ߺõîH¿(/ŒÙ›S“J«%˜ ’äÑÙéÃýû‘êj·,_êØ§·ÝçTj‡w7òúgN%‰¿—¦òlšjKò‚¢ŸÅ¥¼ÏÂíææW¯þ:.á1”Gû¬ P#IEND®B`‚PK„û* PK `Ò8 __MACOSX/UX ”ÊXH”ÊXHõPK4¸Ï8&__MACOSX/._Client_FairRatingOnFile.pngUX ”ÊXH¤åUHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPK<¸Ï8Client_GoodRatingOnFile.pngUX ”ÊXH´åUHõJµü‰PNG  IHDRóÿa pHYs  šœüIDAT8]“Mhœe…Ÿû¾ï73™¿L:&m§QÛ4Ájº³(Up¡KKé¦U(]¸P\ˆš†ºqãB uáBD‰`ýYTÔB@J•4%]˜¤Iœ¦ÓL¦gæ›oæ{¯‹N(záÀáÂ9Üs¹WتI Sx^cØ<0pl¬8öôýéâî¤ l­Ý(_­¯^XŸ_ø„)þdÃiAEAðL§O>?úÌ™c{÷F)$sˆÂnH¹yƒ¯ÿÞþháÜÙù}‹s4QĆ <æß}ñÑ#o¿3~²o8·CÛÄÔ}Cþñ-"¼æR =d¾gôàƒåÇ+ÅÕž%²üŒ2?52²ï̈×Ú5YëÔL-nI͇Ô|ȦoJ¥[—¥VEvf»qJÇfunˆ¯Ú_»mïí®Ì뙑Ý,¶oÙ¦±bU@{ RT§Ö*;WÈ®㼟ÿÂU“áQJc¥+AÛÏF×̽A‘¦oþÏÀƒ‚ ¤p|ÛXð ŒlÜ:åȤKq']“’Ï£+<Á†LÛª‚àQUÚq9Zf>^7äw ÙhÂ$öjv\Jê&â¼_¡ i ’$‰Å t|L“7ãÛD„H0€ZL&ëÀXl\¢1à©iLMCØŠaâ;Ü¥Ò¨Á0 Qø7±)‘,¨vÛA{bêÿÃU´ Æ@Øí8µ ToŽSzPiÕTý]ñ–Yoº;=”VCجþbÐðSçšÄ!Ñ.‰=¸¸lçÁ¦!³Ê+PY™¶|ã¯3ÑØ†ÊA3üdWñãÀ$îÂ`ˆÔö.ë‹–‹ßýÀ‰Wì{“¹óû$¥Æ_ðK,-㵋Å ¨wª6P]ÿÍ1ûå7–_°(Â}«Žî™‰—/ùÊÕA”DªŸ„í#I‚d¬¸êšøËß‹¿4ók=Ç+,1‰‘Þ¥ §¦ðœu‡è˽lúKOÙl1ƒuøf½ão—/éfù6âϘ"Úzÿ ¢i™ã¼TÔIEND®B`‚PK0ЮÞOJPK<¸Ï8&__MACOSX/._Client_GoodRatingOnFile.pngUX ”ÊXH´åUHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPKA¸Ï8Client_InvalidRatingOnFile.pngUX ”ÊXHºåUHõA¾ü‰PNG  IHDRóÿa pHYs  šœóIDAT8e“Kh]e…¿ýÿÿ9çæÞÜml’м*çá|ß®ê#f–d’=°ßs'8j·lÃò-š×¦hür§°ŽœwÃ¥ŽŒàh^P\øíèD::‘4- ¬V'.-×ÖI+båÁ‰¸¤3#ŠØV[™3L¨ˆ>|O+’:„Ât–¶¤?­–,… €f-¢©µ@4L†4Ï ›ÑÆêÍü@÷¾Ý–oä‚‚©¶†‰`Q1U,ªXT@ؘ]Y§o®¼ù^<ÿŸÛ´»ýìØ8“ÚZrñߌ_Þƒ&TÉ(h– Ô i/]pù]˜¾Êqk<ž,Œ 6L%^> “û1…qT Ù ÍXÓ.í¿H·®˜|âTµžÏ}aIñ|DÓ&Éæw˜°Œ£ˆ„(‚º×mÓom¡I (J£hÅÃó `}P'ÙÆþšìàp™ãÀä@s‚ö1`ÿ›ö¸‰Ï¤?Šºž hv=Ô  @_QÕ¬$)‰M,t„P µQ_úúBT­ ±xAâV ñP¡¤R+¤ª4·‚'†@ìf:v3‰Ï8žû¹~ç»ì çxfêØðIKç;:g¯ÿo­µ÷Zß'L¯‚°]½—gžyF-//›Ó§Ë´lžø”cî3JÇ? rŒ ‡E„€ë`ÏúP|¹øÇùÑúc=æî¿ÿ~„¾÷îEd_ô€½ÿ|úÓ/Å»££¿©´ü^éÃy¦HsÍü\ÄüM;; Ý݆¢pŒÆÛx¼{6Në?|õå{/^°'~0Ò}¼ ÷~쇟1FÿM§8z<áÈ|ÌÜœ¡ÕÒÌÎEÌÎØéÖôº–ÑÈÒíY¶¶®\©l|ø³Çá~ÿäÉ“á ðµ©~Ä}Ÿ<÷»Zé?:v,•(çøñ”ÙYC’A@y°!€tÚcw×ÓÔ0VW+ο5f{«Á{ûoUóÉ3gêþ²¸¸(ßþÞçÿÊèèK‡æ5?óà,·~ %Ò‚÷@¸0)¥÷;n~î¡ €W^Ûåô—¤QŽG³¶VqêµÃÇ9w~wt塽þ³[!ÔAõÅÅEùמüíÈD_Šá®;2Žß‚§ªuc©¬£qަñ4µå¾Æ{ëÇå€~w‡b<Æ6ŽãÇcŽ‹IZ é»çÚ ÿô¹ÏŒ¦ {!ùö‹O<¬Tü§q*d¹Bh¬§®U㨭§nÀÛuCÑN´bú¹fáüå'snn9ºôbÏ ™øe ê;êó›½—_`s³T@£†ÅhÐ?õ¬ízì®c\z‘Ð'Ö›Zv Eo⤆~¢xðüý}9 ©f\ô숾²ô¡¯öÅm×Qkÿ¾9øî UUÀ–íÑêå¿x>ï|ü ~sáîò¦˜QÔ-…Ófr,ƒU”j<(§— pWÊSÇsÖÇ5ßZ]gG§H<Ù”± d=G¾e‰wk»±ùËÖVh àÇMwsçÊο<}¤ýë_ mù¶Âæ i¼¯„ „Më¹e ðÜ£%5†™hR–ÓÛ}ž|é\ ó‡È P=O¸b ë–A÷Íolí~÷<€RŒ‹s£(û`•ëÛ>€>™XˆAîÑ–µ'°­6–ųoóÅÓçè¦:Œä³è&&Þv¤« ùJ…¿²vú·~ëY¿²JYö} P×-2½ö^+»¯“ù#‘À¤#j!hJX*K~¥­™5Š•AÁÓËùü«?äù^I˜Gf£¢YÌ8"Ùöäï6äjÔêæÊÊÊWY_¹Èîî“ ¿7u„Iëi“$7søð­Çn?ùk[yª>ž˜ò–˜ú¨¡šW¸Ìá›ùx—ÁhÆ@œ#yeZh› ñ¦%½lI×ìÆ…S^ÿÊŸÐ[~k/3ö Ììwð8ç¨*?,^¹äñouê;îŽGfVfàÐè±Â5†Ffˆ|‡¸ÈIv éš'{gur©(Æk§¾~éü—ÿš+ï\Â5ëŒF= ž^Û7M3qq¾ÀÍóóGO|õÑÎü§žÙ™…¦­°ÁGb&­A5‚9¢a@ ê²Ü]~aíòÓßp›o¬RÔÝ z@ø©ÖÜû^L¦f€˜#ŠæÉgæéÌufþâÙ‡LZø¤ù!!툖Ȼ¦lѳÕÖ¥Q÷¿þskãëÿCw³KÙëQ×ÛTÕ0œŠ‡©éëÑ@ ´€¢h†$iÇ)iš Òˆ(¨ÉÐpžÒ;BU3©ëçúÔuãiͯŠ3õ?ó=xÌFd,"¢Lc,žfÜL#,b*Z2²×¾¢_-wþ¿&™² M™ñIEND®B`‚PKÞÙ¸· Š PK:–Ð8__MACOSX/._Toolbar_About.pngUX ”ÊXH üVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPKV–Ð8Toolbar_Bling.pngUX ”ÊXHTüVHõ1Îø‰PNG  IHDR szzô pHYs  šœãIDATX…µ—Kˆ-W†¿í]çœî>ý¸÷v’K"h.J@œP2p ND'Š8Š“„ >¢B”€ø¸ˆà2 ˆˆqàÀ€è4¹èÀ‰$BˆH'$ä&}oß{ºOŸ:õØËAíªSÄÌRP§ö©ýXkýë_ÿÞxïK£Ûò]3`˜ÿù7÷õ{_?üã×¾rù³Wþùâ¹ç1£y}{¼öÐÿy瀱!/<ùí¯>üÐǘüdRðé~‚;§Ç·ÚgžþÃÉ3/¼pr¨Hùö~èÿ3öζq1òâ—?¼ï‡œýx{˾ ©_«_Pîж¼ýÖqûôS¿¾ñìK/-ϳïçˆÆÑöÏqÄÅ·½zï—>¿óÔÞž=lÂòwG¸oVñ¼lÓú«¯¿ÑüâÑ'o>wzzZe'Ú|û‰÷ÊuŠ/~îàà[\~âðJx\b[R¶:u÷Îñ¡KÙG’X¯ýßG¯W?{ø›GÏÒÒ#â½=IP|ò£óÙõÝõÈÝWâbàJ¯´-OîQËø'ÆãVkÿû˯Ô×{òèo#GÚ~±¢7þ—ßßÿå{ãO'‘k#hßwuvJï7vünµòç_üO}ýñïý+;âfýݵÏÜs~^LøÔ;¡1¥_h€8§ä}Sñ®ùVkþôòQsý±ïþ÷Hÿxî³ß™_Z~c~iqŸ«u¼éˆM{C².jÇ\tîÈÜ=[ÁAÃÌ„ 7Ã…\rA¸«Öüíg£·[)ªýÕ§mßýÓÃ7°Øv¬ êžYF̺p¤¾zRhp°ó R¦YJ\xOÐÖíj޶îà¡|0®Êf¦ƒ™š³CNËmOë]m_="lŸ‚#ë ›mXå)S†±d¤æÙpcT§û4kÃv)¦-Ë1–ë4 &TÞîèüÍk¤rí«¯²}×›˜µƒñÔæTäjîðœg ZuŽÈ „nNÝL©nï‘âÊãÁ™Š nyI% O..OçwiõÆ /wع÷5l¶"µ]$)kZ‚{ÁºâPà.ê³]ªÕ„¸wµB·SÈÔM]n%ëè#‹*GQÍâª/Û‰¦—nç7 o39ݤÎ)©{¦4ÕrÓÛXp·0¦(³ŽXÖÊBí¨•B+… …Z´/o]U\Í(vß­Bõ¢êYK•õÔË9ž¶ˆ{ âÖÚ1daC™®HÀ„G‘\aBƒ¬EV£X£P¹¬je±ÆÛÂ×·ïQ˜ÞAq·>  AÐÞîfÎôÊM—%) Ù†*€“º¬%GQ¡–k¤¡–B……Ê µ¤…µ*Y(åZâm Õ‡`·OEÎG…Å]&gÄÝsGÈš(w$áÏQ»B…¬–¬•ÂÚ±JŠkd+d•[XB@øÔ›ó+jë"‹QÌKŸ\¾‰mµFû…~;G:•tˆ²µ¬B%… ÔB¨PX‹Pba)´D)€`kM¦7H«ËÞ”sMnwO»~¤W¹L‡È{ñò]¢Šm—ok\¡’ÂÚe+)œt ë°€#”<жÅ3н¥ç\y ÞDß;äx×N E %X!År %„¥ÔE>D.pC©šSݾL[Mh×SmÝ}Ëm«ì^4>:‚xqÀ!*TnEƒ¬” ÅÏøÈ"} á)x}º¯fî B@ ©Y²zó@qwÆäÒÂ¥ÔC> ‘™è=zD¢B‰Å„ÂÒ±¥d›\%dàõ6Õé\øarÞÉpÊ"$@Ç´çsÊòPÅ¥aZõÞKvÚð`ØA¢â¹äH=“­Ë¹á`4Ë}¥ZÄéM p8td²p†SRŸÐLgLö;4†¨Ñb:I÷ha1ε0Pì353µç{„bIœ/»íµí¢N•c' Bh`vL[ÍY*î,³’axÊbÔQ›\w›ˆáåž{ŠšîßBÖ òkb³õ…>r@êÒ&gx*©îÖ3Â|!: ¼P!Q®˜#7<µSêå¾âì\ÓýÛÃãÊšoø7vÑxßNÖP\:¦^ÎYß:$î,“¡RðH@Ýž(êÕžR]æ'„¢&e7 (häÀÔƒ|Ê\±ÙÑJš³RØ"Îï8JZ÷«Å<”„cdù4£ÍbýÃâ&òa+î_åwž ž)‡ÍiVsš“CMæ ÷T›–ª¼ñ!§(´C[ïÐ2úfÊnŽ_¾9›¯Ü?þ`Û¤É/¾O¢<¹Bí¯—vè¾zÇ_±ä•€¸;@,¹pÄü@/Ï6Oÿ­s½Ix hIEND®B`‚PK µÉ\61PKV–Ð8__MACOSX/._Toolbar_Bling.pngUX ”ÊXHTüVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPK€–Ð8Toolbar_Connect.pngUX ”ÊXH üVHõÎ 1ö‰PNG  IHDR !¸&©Q pHYs  šœ €IDATX…•—yŒ]W}Ç?çÜý¾uÞ8ö,ñ2©S[61ÔKÊbB‚‰S‰F-6(ªe[Di+QU¡m¤VE´b¥@DT‰´ N)ò’(¬Á&¶SÛ!Øñ"ÏØÎì3oÞ¼wï=çüúÇ{3'&*GúIWçüîù}Ïoÿ)~“uzsÄ ·âó&5„¯ t„VWÐê žwŒPý7ÏLr­+DDõ> Ôµ˜^²ì °­B½¯ä×’š^GŸ¬Sëío“¨²LG—O/¨†¹x–ÜeGpî3 øJ­Y%|€~%ŠƒƒëIô?ùa¸½·Umt[R›Y놨۵ å#ÄDÌ„S\NÏ3O2–œåb|ޱèóvö¤(ó íÊ¿úõ¯@ñÈÀ­¤ê߇ƒÍk~Oý1[Ýnj®§}´îþï”E´´ÂiKáwhyM.Æçøyù‡r$ú‘Ê‹üúÿ“U4à] €âá5ï#Ñ_ oòîñ?Æzµ…€Ä38OA<‡hÏáPùÎùnX–û"€ÏTöáÉ- @)N‡ÝáÕldЯÒ$l¤Ÿ€ŸQJªµ˜¾ZJ½S #šÑ,#KuúTL% yU{˜‘Å>Îë ,È8%ÑxyöoGGG½e (À'v€s‚uÍŸb‹¤‘–¨Vbjõ„r9¢£›~›J)ìî×bJå˜8ñX’²x‰¾zJ__‰J5e÷Ò K ® NDY¥œïOÌÎÎö|8Ú€–Ý8Aá„v+CAH¹Q«—©WSæâž÷ÎRèa¤‰Â.¥±GA“9ž¬ü‚ ìS¯•iÔË”SŸ·OïÅš ¬(DÀ‰>çÿþéÓ§} x ñ6Á9é1ð®ÊÐhT¸®? ZБåáü ‹nž%iá{‚ç ¾Z ʃEY`Ü]âQï1’$ R‰èk”Ù“¼Ší­À¬)sשS§‚./Û‹Õ#Ö²†Ý×P¯ÕHK1i¢øòÔW9Ü>Ì´¤ãQ^Oø2a˜7s\vc|>ÿ:ã2N’øT«êõ:·»º>àD°N¬çv9s&òa §~pÂÖ`3Õj•4Mñ}¢(xdêQN™ç ƒ$öð•!ðÁó»wæÒáxû2ÕÁb]|’%÷†!år™WÏméjÀ ° œžŽžnhÀÖá8‡rºà:â8&šE~Ù:³†ÌtX*ZÒ}¹OƒC;obArÇSÍ£cÐZEë£A(lׯÆâÉAð°hlZ!Æ¢„aˆÖA !¶-:ˆ8Ä7/¯£Î8”í†Õ¼] ( ‚ Â0#Ha«‹˜¶QÐäLaºêÇ:fòi´Ö(¥œµÜÈF¤°`¶0/+ V,ä2™c“ a­EDÐZ3i§»çFzp*~^ÍtQ‡)Á‚qüï܉ó³R(¥¸3º ‡2Âéì,—]àéö È,’YT&Ü¡ö^u~¼}ª«þÜv’K^9_™Ó€c–c( ¶à…öeŽÍ<ƒH·zú¾ÏÆÛØÃ$3Ld¼ç¹?ãðü1ε/òÿÅý—?…Ê»ö}{önŒ7¡{™Þ9ÇèÜ+a(Æ¢ì çœÕ€å?À°€Éùü‰/àœC)µâÉŸ¨Œ×ªßAåŽÑ‰Çxýîbónæž¹‰¥ t¡xG¶–ÿ„4MWœøÇÓ?çèüqÈ b,’¼+òÀx@ÀŽ›y+>ý½ÔÌsÍgyóðíl¬mXqFßz¼ÝlPÃd*£í:,Ù%ÖëAöø;ø¸÷ö¥·qÝš54 ’$Á8Ë»Ž|ËK—À:TáDY‘Êãþ?\o‡/ù@t8Ã׸‰Ĭ4“êžCïä§~ÆúêõT*¬µ(¥¸£y·Û[ÐZc°x¢qΆ!õzþþ~Ò4àÏÞÏ‘©_ ¬€ˆ`Qj‚ÿñ¢ž¯¼®ÒñVŠÑ³L³‡7°A¡–i©C±ï†»X“ö¯„S†x½^&ð|Â0¤Z­ÒßßO?årÏ÷ùı¿çs¿ü—^t ÊŠ¢pÆ8ÿËt>½°}ûö¥å†DŠ16q'àw³"Lu¦Ô7žý7Fê#Ü´vQÇ1¥R‰r¹LµZ¥^¯S¯×©V«$IÂXç÷>ñ^þõÌ7Á:0N(œRÆ¡žs_‰¾Œ6ٻᄏuuGt‘%L0À­ÝªˆBA§èðíÓßæàùƒ$aÂúú¥iš’$I7eG?|ŠOÿ4ïò#üjöWÝx·Æ*ŒC]‘ï{ŸuŸSJM ,Üwß}f9Ÿi ÖCÜû¹‘ …B÷84(O†MõM TH¼„Él–³ çh-]S£z¾äz2¦9âÿ³ÿW^Ç»˜$É h=øàƒnuŸî%`-°Ž;¸›ù8šòŠŽt‹¡¹zé^8/ßl‹<Â×ø&Êåò• 6ÌŸBê(ræÉ™e†óã0ÏqhM`˜éæaÕ˜öëG³®rCº~QéQ Ä=-­ö€e _%¼ÙÜéËj‰È+NÇËä2xE=ËàV ﬢ¬·ïø5ãúÿo<_5Ëþ¶M¥Ê¶µê#sm.7ÚdÆŒþìôÂ)ºj¶×zñµÖÿy#ElŒpsŒIEND®B`‚PKtR*÷Ó Î PK€–Ð8__MACOSX/._Toolbar_Connect.pngUX ”ÊXH üVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPKŒ–Ð8Toolbar_Connecting.pngUX ”ÊXH¸üVHõÌ 3ö‰PNG  IHDR szzô pHYs  šœ ~IDATX…e–]Œ$ÕuÇçÞªêêêîé™Ù1,°GKÖNXÌ{a@D¼!my½I ŽlH$ˆÄëF‰åÇR>Y' Š”XŽ¿Ø$òC²ëEÙÀ^а;_½3;ÓÓ=Ý]]U÷žÃ» |†“ÆëÉÉo½ ¶¹§ª©÷>«×ë0ÈDUã @X͈›?›Í/<ýwùýØÄ`j¨©!¶†ˆ‚Nxð9¨Ã»ñ)êR¼Ô_?óÊŸ¨möUuT«ÕÒläQÅ@ ˆ;+­üÏ|#”ñIll ê`bÔD•«˜»ê E}>GÝÜ-†¿žœ|ùyµ­¾÷~ä½O“$É&¨¯Ý\[nÈ›ŸÿÛÈæKØ@lµuL°†° ƒE1Tüƒ% >CÝ-Fˆà‹!žèê'þáÃd¡LXH'±7€ÙÝÝ Í›Ÿ{)4Ç1!*aiÐD峉J㶆š„HXN 6FlDagÀDˆ)Ï‹‰0~ïäðǧ_ʛɛ©ÂgG£Qèôè×CÙ{̘±Æ ˜˜ëÑoз¿Œ˜­þ³”™ &DDÊm\‹NÑ >‰LÙ [úÞé~ë¥í«I¥5c vôÚýjÿ $1Uª8BVj“ÇÇØŒeÏÜÁd¨j™ª¨*na+~”(n°?ÈŽ=^i¤«Øüà³zîwþz÷ÆÕ0¦×ë™Ñk÷¿jÿ·UËœ.ã*8 XŸ„Ö]´Z-šÍ&;É£ŒÌ/á½Gð ‚c ‡ØI¡Þh133C»Ýf·ùëìwLê… b¨™ÑCŹ3χC¼ûî»ÑÇŠÑ' 1E)SKML&iµH’¤ôr0`›GÐái¸UÃHÓmû ³ss´Ûíi•+úËäž…qÒ ÒŸ| ®Íf“¹¹¹DûÙ‘cŠRÐU(@qùX÷ööÔ ŸÚ×IЍCDQŸÓðëÌ6¥üàÌL©ö½e²ó_€qõyéUºNzîðƒ¢(¢Ùl2??ÏÌì!vêUÆ'/û3 ÞsÎySEþåïÝö—Ý=y¯Ü S”qñ‡×þ”$Ìâw•ôÜ3H~sÿc“9Þ =÷ÌÏX0WYìýMe\K]©réZø¯þÇ¿#"Ξ8q"¾ruÓœÿixéÁ_Ü_´]61˜|n¾6Ž’ÿ"¦Ø-³@ÐéŠwˆëS¬ÿ'æ–‡ðÝËØ·^@tXÏåÒæ{/|û£ß Ãpkfff×>ñÄÁÆÆ†Yï:½°_úì'ö>‡ÌT bÐñºö™4ìƒ=cºâ·G¾ú}tõ;àG¨÷ ¼½bðGÿ|äµZmóöÛo¿¹´´´g_|ñE†Ã¡v»]¿±ã‹Ë+ñ¥í}ªJ«ácª‹‡¯ŒWàP” 4Tô*1»²¡¼³jøÅ:üW­VëÆáÇoÜ{ï½Ý'Ÿ|2·¯¾úªÔj5·µµåF£‘»v#ÏÞY«]yàØÞ§C«òÞ?¡|RyÊÎ6­íê)¯ùn¨¥qU~¶aþë ÿxÛ×Ûíöæüü|çî»ïîž>}:?zô¨·gÏž•ÅÅE½õÖ[õúõëE·Ûuïoäã÷7ã·Në:²š RÝþ÷›É´uO§? Êb 低üø÷¿uäkív{svv¶sÏ=÷ì<õÔSÙââ¢Ôž={VŽ9âçææ|§Ó)z½žûéj–®l†oæØðD`]]&÷?ä@ì!¦ËV¾¼ÉO¿|ûW£8î,,,t–––¶ÿ9wÜq‡wÎéöö¶ë÷ûîíkãÑÊMÞzàãÙÖøxâ•È‚)ZuOÊ‚vý¦¹ð{ä+jÃC‡uî»ï¾4Øw«$öñÇÏÒ4U€‹/òÚ•‚­ž{~é£~¬±6˜>8T½î?;÷/o$oº@:G¤³´´tv?ÙåÝ|úc2N:•mlløpaY³óïûŒ1ªŠµV‚ <^Åô¬÷Þã0 {ó­ÖÖÒÒÒî™3gF‹‹‹þ€çð!Ï=÷\ ò<÷ãñxP«ÕÎ9spOQ›ç³a«µNÞåy®a Ã;ï¼³êÔ©ññãÇý/ؘÚúßÍÄBAWcIEND®B`‚PK“oX>Ñ Ì PKŒ–Ð8!__MACOSX/._Toolbar_Connecting.pngUX ”ÊXH¸üVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPK“–Ð8Toolbar_Disconnect.pngUX ”ÊXHÆüVHõB ½ö‰PNG  IHDR szzô pHYs  šœôIDATX…—l]gyÇ?Ï{Î=çž{íØŽík;qš˜¦ÁmþÉ(mº¥¡ªP ­ Ý›6!ª ´MHŒªTméLÓº!ÑIÛ¤¡ªH Ô‚@4]Ñ ”Ð’¨ «µ“8±}“ر}ïùõ¾ïÃçÚqBSöè>:÷\é¾ßïóãý>ï+ªºÅPUóúW¾’¼çÙ'¾UK’;©'ÖÀ$P@L" ‚ª"ÞC‘a××ÏêÄÔ]Íç^:!"Ž«XÀ÷Þ7€ןy&yÏwžüf46q';÷À¶A$i@-B‚j50„!˜õ±%~u…Ú™¹‰rþÔÏ}ê£RÕc"b¯F@z®[ž¼òÊ+ñþûÂ7jƒ÷ÈäL½FãSO ¡a ¢x“€AñyA°¶ŒÛ6H­µ³oþ÷Å¿ü“{Tõõw"fff†½{÷*ÀÃ?Ìý÷ß_Ûÿ÷÷=]ïø0;v#“{ 5}Û8ÁG1E˜¸^‘è•U[â“„@õžÐ–-Nμp5a»ÝöîÝësôèQðàÁpäÏ?ðïõmÛ>ÊØNd|' @œ a Áƒ§WsÀY‹ CÔ9Pcð}Û0ã“Hž–e‹“¿þnûwÜ£ªol%ŽŽŽ@fffˆã¸vàóŸøjÜh|RG'0c;íh-õx[bDÀ–Uã¨bœÃ¥ ªà=ÖBcÐFZHž”ÅXcþ­ï-}äð=~³Μ9cÚí¶NöÞJêõ¿Ñqdd šÛª£´§öcŒ0rj¦¢î`CTQ¥ˆê\ؽàâ2ÃkÇ N`¸…ÉRjeÑꛟûþâ‡Þ‡ªoVVVdyyÙ¼÷3üx£> C#Èà0ÚìG¢ˆ°¸ï}dã»HÇvq~òZ\Ú…¬‹d)¤ëv í¦®‡Z„nqnêD€ZŒ ­ ‘á±þ ó?X¸õºëUU‚|°9øÉ[ïïså#2:Ã-d`;'„,8L¹gõz(Š(û(TIO#¶DË-rŠ(æÂ 7Sk4©×ëc(⩇æÙ9Ä;Á[KPd}\ ›ËËËqxìØ±xD‰Gzj†zÄ»JPT~ù¿(úûˆn/øÿy¹ñ"BE›åPUܯ~Ž™9ª_ùæwgÁZ¤È¡,+ÝQ“eꜪ*¨"(X{)EY EF§µ“å}š²,1Ælºˆà½'Ýÿ~.|ð^|ÚEó´êþ,­j_äÕÎr®šwÎ+½QŒ€[u®Òõ "¶dels÷þ5Ö˜j›ª^6ÕTk-Ëqúð‘͆ÓÞÿñQê©2^™IÓÔ£^Ù² ›º®ÎqaçµÌþÙ§HI’„ ª¨Ï·±?y±ZÈ¢("IV~ÙÛþµ¶Š¸WŽSd qS…ú-Œ¶²X¾fs÷}š‘Q†††h4„aˆk/P~ᯰOü-å‹ß ^¯300Ààà ë‡îböö\¶Qæ*Ø*àp}}½BôUÊ¥—"1'v3÷ñÏ00<ÂöíÛéïï'Š"ü¹EÜÀ,ÎW'˜' „¸›f³y‰üá{x[•©£ßîÕÝm–ÄW»@ÃÕÕU¿æXÀZÈS4 1 B_{ž± gi\·ïx{¡_:s©dªè??„‚+H¤SÓ¸—LžU}‘¥Pä,dîµõõŒ`jjªñä©•“·Ó¹¤úˆÁÍ7^%ÜÿD“{Ðöî¡0Kg¹ÒПEw\C°ç:Â0$xëMF¿ö’u‘<ƒ¬ Ý':å÷žÒG½÷ƒéééh~~¾öÔùòøÝu7>nÜu ÕÉ׊yõ%üÐ(ú¯_´~ür/âw\i‡ð˟äL‘Wài—7×òýái/Šâ<°9rDfggIÓ4ø‹úË#‰ÛÑ2þZ0R‘Püìe¤»~Uð­$xõ(üøûH·ƒä>í i—ÿ[Ë^¾ù”>¦ªKιó@ÇLOOÛV«µ¦ªí,Ë–n™uOœX/Žn¤Kó´’Qõ•„wHZ¥]³.’vùÍzþ“›Þ¶äy¾TEX¬ò“““ÅÐÐÐ*жֶožuþ¦Sþx#mš¥Õ~VÏåw˜«¸sh–¢½ f»ÅÏny«|(·v XVÐà¹çž“ãÇóüóÏ;ÀÞ{/Ow‚×îkø}Câ&@ªC§ö&Ü;¹ôžºÑñÝ'×Ó_Ü:«ÿ°R–‹=ð‹@¾ÁVTÕ*ÕÁR€ˆ¢¨Õ'2ñÊ.}lw3ºQ£:†` —‹ðõ×Þ,)rNuó7nŸãó§óü °¬lÞ5¬Zàrƒ@k4vüï”y|WÀTúð®Ö“ðùܸímÿw§;Ó‹|ùJðËl\H¹tUÛ 1¶= ÇîhÊß^¿Ï ø—ÖýÉ箈|£‰.eMUe øæï=¯À0ÐÏ¥»äï³XοøÐÕlk&’žÿpd@—ªÛßà·!Üô¹î&çIEND®B`‚PK«’G B PK“–Ð8!__MACOSX/._Toolbar_Disconnect.pngUX ”ÊXHÆüVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPKj–Ð8Toolbar_Import.pngUX ”ÊXHxüVHõñø‰PNG  IHDR szzô pHYs  šœ£IDATX…¥—_hTÙÇ?çþ›L2G3&íªqk•Ê •uý÷]ÚÔµúÒ'EЋթ/Ûââƒè‚‹ôÁ>¸PŒ°µhȪK]¢  ‹ ¢›Jüc’IÌdfîuæþ9§3w¼Ž£-ôÀaîÜ{Îïû=¿ÿG1 4& ‚ÿwXh¸ˆY ð+ó%@Ð{{{×¥Óé?ø¾BH)ëÑ4 !DÝ÷Y•Õ7,ßðëùÌÇÂÂR“Lâ~ïî›Þ0ý5\À3*¬<ÀokkkWJýF×u B „P¢< B MÓT™‡ˆP q8ªŽ²ˆEtÐÁ—|ɉÉ?™f: LW(£¯¯¯©µµõ§…BAU€¨€!^ðo”„ˆhC !PJ P„«­—â%ŽtSr¬h@ ,ø«çy‰BˆF¥ÊØQµFT."ÏT@«ïŠ~l0u[ÙxÂ#_Ê#_J°B“Âp]·Ñqœvß÷E(:£D¢ö¿ýÐð=fÊSàƒ+\(€Óä ‹K®”#×™ûˆÌd.yfPÂç¾!¥Ô”RUðZ!DÝwQ÷Õ}.s™ÅÆbf™³h¡…Ú¦JSØØ”(±X-¦ë½®E“brѤ9ɸ'«eû )åÂkðZPJ!]‰%-ZVZi¥Uo%¥Rd‹Y”R8¡(‹$I’ÓrÊ—>9•8X†RJh𦤔â9mô·†>¨@á.®t)hLÝÄJ)llÆ'#3Œëã"cdPBA Í‚ ôfºú»HÔ%€ïûä݃FÍ…B!b< H#"¤šÓ3™ û÷ïG×u¶oßΪU«èî£ƒO>ù„ÇóäÉÚÛÛÙ¼y3Ç`öìÙ:t…‚8å_‹r¹Ó@hBAdJ­rBUµã8d³YV®\ɱcǰm›óçÏsá …ýýýlܸ‘ááa†††X½z5ccc¬]»Û¶II¾]ó-'žàóÒç||ÁQ÷h¡ívÛ@©®¨p«†aÔÙÒé4ëׯÇqž={F[[<À¶m¤”¼ÿþûÌž=›D"ÁªU«hiiáÃ?D©›,ž¹˜ås—³¬u™ú`¿ÒO›é P(gŽò¨š€He¸zõ*×®]cË–-ܾ}›ŽŽ …£££H)Ù³gù|ž]»váyBb±±X ˲0 ¥©TJ´´´H$T2™´)7"Aˆ£E¼:,¿¬[·Ž3gΰmÛ69uêwîÜáÖ­[!8yò$Ü¿]×Ñ4 Ó41 ãµiY±XLU¾ù€Œ:³ ½j™ÕuÓ4I¥R†ÁÐÐ===ܸqƒ*QC*•Âó‰D‚Ï>û Ó4I$8p˲^#Õn4¼A 7544°páB¤”èºÎ’%KR’L&™3gA „ NWO>sæL,˪—ÎÅ; Ds@¨¶P]ÑȨ­„µ3\ͨ‘¾Q½‹@Ý4ˆ®QJUɽ-eGMÀ«ìZÛž¿n‚ÚjX¯yžW5KMꮚ°^¿ „Pù|þÅ£G¦©‰Í0Œf^õáÆêsx¥œ>}úÆÓ§O»®DÉG÷Gµé8NþÊ•+½;wîüKÿ(åLX%¡ Ÿ ‚ S#ä mLOOÓ××÷ãÁƒ¿Þ²eËŸÏ:Ž“QJUU\s|ß÷zzzNïÞ½ûïׯ_&‡h*Þºuë7{mÛþ·RÊÄp5tòù|±¿¿ÿé±cǺ³ÙìÐÇouuuýéâÅ‹œ˜˜¸ãû¾_ë¶m»OÏ;w•rù¥\ݨè@üìÙ³÷2™Ìå¥K—¦âñx»išqMÓ„¦i‹ÅÂ¥K—Î8pàÄ“'OîÃa¹ÞÞÞÇ###ß-[¶lf<Ÿ‹Å}ßFGGŸõõõýsÇŽ®˜Š€¿-@Ð ´õÕW¿qŸ?îõõõ}kƯ€_ïUÖé”Ó¸îëîîþýÝ»wo]¾|ùüño€eÀ Î;.½-¼º©4-›6mZqóæÍo¾ëèèø%ðs ­ò=*HD÷íÝ»wMeíÏ€yÀ Ê·ï·‚ `å6IÖl¦|eW”;˜\E…²ŽŒp_¬¢IÙÛ½Èúº‰è?ñwEþûRìIEND®B`‚PK#TRpöñPKj–Ð8__MACOSX/._Toolbar_Import.pngUX ”ÊXHxüVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPKI–Ð8Toolbar_Messages.pngUX ”ÊXH:üVHõ›dú‰PNG  IHDR szzô pHYs  šœMIDATX…í—]’Ûº…¿ÓII#ÏÏõLn‘uä= ÌB²ˆìàV\÷!¶5i4ú!  ó@RÒŒ[Ž+Iå!]¢@œÓݧHü¶il„qü=æ@Ê8ößøûÞyß"òûŸ6M"ƒÏóØI‘AázÓ~h±q¾_c{Kæß <µ26×/ùãŸç×_þä–*/ž:¸;B¸»LÌ‘ã²âîE298Ž£NAV\äq^Âm kÁ]yq"xõü׸ß5Åïo›åJ³åþä–†e/úúÔ_Úðlš3SÄo¿ïè úLwÖ¥\õm­Ç¿ßóåã—dc¼ôfásϪõ¯iüöÏÞoõL7ÿ€/7;b,YU0Y¯n´ÝÖÜÿ~ÍÕ²ÿÊãÉ›¯á.çéÕ÷©O¥gÇÊK³Ñb^ÜÊ \UÀc0š:Û™ÿú·[>šQ otCì-¥ÁŠÃ¶æ1 5Oš]šªêAf1šyA³:»Wˆ®6¹¯>W:³ÿüs¯º9õœ‚ñS€ëU¦q—{ÖÝŠTm˜/‹/®`6Gu›¡ ³k?ÒöÜ5÷t¥c런Y§wK½¦®QC¾5…ÊO•1•“GÅ# rY/…Ö:aÉÑA k\„‡Œ*‡:áuï űâ˜ö\Ízo¨iN^{È4VÉY.§±pG1„ÞŠ,¶Žµ’%;YØ àqzT@•¢f»ŸP¿@Ê4¶ÄidÕ“ÇùQ1B°ñœŸr=U‹ 'ù8DÅ£[• %õ(>¹ …¡øÍÀ Ô.½ì2ï¡z:—Ÿö°½‘Êœp·qSÁÇ\»£©4uY8ex-P<"ëÛI)ÀDBÅ#i{‹ç¬P¯ÀË´à`h…·KÚ÷ªn·Äùw4y>å~Œ†¦í#(¬}ulèK·$í²¸EÕ1wçÉ ^€isKÞÏ©o6®ñÉë‹ÍÔ ˜ã1ÔkT…"òé_neÊ4×+  gC8z¦)®@– Í#ž´÷ ‹Â|wN|÷0G^PÄÀÆ£ÛÂëÜ.ñ~A½|&ÔG<ƒ0uÎéiÿÕø·E6¶fO¼ji77tÇ9ñÝZ²Ä¤‹QD‹C®1p¢çÝ- YõÝŠGºâzì¼ÿ{A/íLÄ=S_¡ßÏéŸ~Âæ{ÂìeÚ ‘ð¨ñ6Xº%é°P\<fÇáâV†Å- z«á[W"†9ƒô!ç¡/Ô°Ð’w×äãÕÕÚ]ýY¬Òöγ'ÙâNN†i á?Õö«‹ü™—áü÷©Nw Ça¶¡t íæNª^|K´ãû›Ý„^Þás½Ò×…“LÓÃI 'L›ÍåQ=݇§yùpMû’^üø0ƒóŸ4z`-ÃVÒü— $ ýˆV÷Èu’vQIEND®B`‚PKxÑ1 ›PKI–Ð8__MACOSX/._Toolbar_Messages.pngUX ”ÊXH:üVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPKè•Ð8Toolbar_Network.pngUX ”ÊXH„ûVHõ; Äö‰PNG  IHDR szzô pHYs  šœíIDATX…u–_ŒÜ×UÇ?çÜûûÍÌÎì?Û»öºvìØ`7< µ–*UQi¤ QQ¤Hxá%DðÌÛòÀ˜‡J­ªªªŠxëS Ô +FP 5 nH%Bc'^ïÏîÎÌîÌü~÷žÃÃo&]›ôJWsçÎÜ{¾ç{Î÷œ+<=ÄÝØÜÜ”ÍÍM677õüùórãÆ Úí¶´Z-¹{wW/\ø<—.=’ýý}ÝØØPUÕÑh¤.\ÙtÀ€üúë¯÷Μ93|ñÅŸÿñ)ã›››²µµ666äòåËÚí^—ÉòP/–¥ì°pV¯^-´ªªðäÉpM•õô\«צÓéÙ”ÒzUUg†Ãá™lœz2¯&¶Âô vJýòk¯½v¨Ÿ#ef¼¸wïÞ¹²,Ï™ÙFJ²Qz¶Õêœm·‹õÅÅåõöÂâzwimMBg¥ì,ihõܵ`šDL”‰ &J²HmJÆÓÄÙÉøz×~ûå—_~suuu$ÀÐW^yåÏ\{›¡;,*¸ƒ‹ ¢€5 ”Ù>@@¤nž0ƒà5šÇ¯(Ó®»»¯¯¯[üöíÛooËÀú«¯¾ú›G Oy?£ÛšÂEP¡,jŠbL§zL ™žF;&ãñhwTìç”êºîWUÚ­Å?8’øïwîÜ!Ò<Žg53 eY’åg´ËL»HtÊšåE¥·YZUÓþàÃ"VqüðÇ[÷Nß»²òhÅw~ºó­Á`°³³³·ÿøñ£™e 7:£Î™òØÌKñ˜ƒ¶¶¶¾­ã~]VU5è÷ûãûÅý_ßÿÊþ ÿ޳úüªöwú|iíK·ÿùö]þ˜+7önÈÛo¾}èÏœš?H}b>'Àx¶ö jfo¼ñÆ·glølü˜GüÊïõܬClǘ%Ü¢ #2»³ûìÙæXpÚ#0}&½ œ{Ñxò€¯ó5>ä/øsÞ%Žl´¼viíêîú®ÐÁi³Ãf—ç§Îþ|=RÏœ¤j ìGŸ@ÂG|‹¿ã!Â_ýð½.^<ñ󜂲W =9bgæÔIöæŸ<»Oü`3äý'Ù‰CC¶x[|À_sëá>¼Ì lJ13^ó´Ñ_8X<áñ|ïäxö¢”@›žã÷ù6¿ÊgºÿØ•›¿vóá­¿¹õ…ß:cw,ƒsŠm\¼xõòùKÏ]?uzýR·ÛûÔÒêÊúñèhïo¿ñ/¿÷Þ{•ÐÄü˜Ÿ×¿§¾ôÒKa8Êx<–sËi-Z>WÄÖ§ž¿öµS§×®-v—yÚ²Ï.o¬,-¤6‹íEõŸÈd|Äh¿ïƒÁ¡ŒúO˜¨Àñ"ªŒÑ/~÷oýk|†ÞÇW¿ú»k¿tùú¿\¿úü)Uéæº^ìïét2æ°¿Çd0dÿþÿx¿šÊäøˆ¨Š˜sfy"˜ùókûtDäsk[Ø*þÜœZEÌ‘wîÅwÿþÝÞ;ÐH/}’ç]élnï¼ðèî?°ªÛ\:󄎈úÌc‘ÓøÅkˆ9¬žÆ-‰¼ó3ŽÞþ@vÜeçŸÞYØVÕGk;ÀcѰ]§´];?·¶¶¦sù“’ãÓ¶0±üG¿²ô–G;ÚyëewçPvò »}ewgT>Vx\Õa'YÚL|çÑÁ´‡3Õ OËðYU8³Ö!üÿ W®\éõû}988˜šKÒÁÅ'dzÒû¤5ÿ€rótÝ…¶IEND®B`‚PKbÁõN@ ; PKè•Ð8__MACOSX/._Toolbar_Network.pngUX ”ÊXH„ûVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPK*–Ð8Toolbar_Prefs.pngUX ”ÊXHüVHõö ø‰PNG  IHDR szzô pHYs  šœ¨IDATX…¥—Œ\UÇ?çýš_»³¿·lkaåwŠe1Ü †TùBcÔÄC‚&` †+&ÄŒ”@‚Q”‚’ Ö‚€ŒÐB)mÅŠ]ºÛûcæÍ¯7ofÞ{Ç?Þ›îtÛÒVOrsgÞ»÷žï=÷œïý>áÄ&I3°Öçz×ÊínÃB jFÐ ‚ç¶½SÙ ´0iš´ãšu´«…@ûÂÓ£Á¡Tpo*™ízYǘvQ×¼ÚÉè"€ÍFz`0þ£ª ) UË"ŽPt²ÎI<æó°–6w|ü<î–[â]=ô >*וël0…óK"¥ºM±–ž‰„Í5?µù/;wv_sÁðdh‰ûüî…]Çv,òþÏ9³ð¢Àé 5¯x<lª4ø$€[ºu´äÅk¸uK·žÑ¿½Ô]­6kˆäiA=0¯~~ïÑ V…‡9·ßæ…JƒÕ€¸êÖU({ñä’‡¸uAÜ: ¨Û@TQ׳¥ì¥P4pëv„bû!(Åè³S{ÝÝÝ ºs@#cs›é°¦_ T‡þl稉”p©Î›…2o¹®×Dú² ¤-.È¥9?.°Pa9: 6ÚÆï'''×OMMu*äˆà 3´k­äó (RŠC½²Ÿ-›žäñ×Þ¥Ä w¸D?¶–Ó¾0ÁFËäj(Õ:ÇâP¬ÛÅy7øÒëïÕ¶~2³ €ØžGï§Îbl,Ï•™,"&HDõÁ¹ÿë¿â©ƒ. @(%}¨Íù •îãÕ±~fÇGø„!‘q"PÕCe~öòê/q˜t%¹ò¼tß—¯ôZôX µí?Í=›þÄ«À"°ôn  Ô ø÷s=Ìœ5ʤßFÒNDÊfdçLôh268Œ{n½=c·®­ùH([Þà—÷>Á߀çnâÌZ]ÍOZ÷βpÉGq{˜È8ˆiDÃë×òÆkÓì!&´Ãaï6³äåo(”G(¸Ã:=Ÿzÿ®Çy˜OœW'A²H”´0yÖH.ó¿}‰G{Rûs0E× rãʈw0nºôœÕKÕž‹ å^ •¼lÛß÷gßg(&»ns|¦Óä]; óÒ\™ª>ÏdÐþ8&W}6iº’ßä¶Ï]ü˜ 7˜¦a6ÛÈ!7§c}5^Þü=9çz÷¹À4[܃%¦.gcR‘}ߤP¾ ¶ÝýW[€Ý ‚¬)’Q5–Ê=ºãé·OÑùQ fÙП=ü&#QHàX@ªÙj§lË,1 Cƒ(”¨m4j­Vå°ŸŠuŽ£õžËü@Ua¹÷C, kv…–ƒA;Ël¬ìh_Ÿ1_.§è¼Dxí½}1›Æ”¿ÏyÇd¡Zßê˜öAËá‘|n((\2>pÎÖÝåÙÿ€^çäb*×ÞåI¯‰_i0 ˆ„/¾yð`{Ê4ó_¼üì+ Ñ CùÌ5ÀÔÿ@ÆOãšþ4‚ Ku¦oýçÕÄ$Ræ›a¸Xõ›;Â(’vbòÕÉsÇz9¾nøP盿؆Ü$*²Tåb'¦òf€›<œŸ]ªýAU5ŒB¢(îý>1a Œñ1˜/“)ºH¤´~ý›?…€o²¬õ€‚ë•Ïé0D?""¢]¶þŒ‘é7,íáäKÑxø›«¿“±[wôfB­5‘½xâÎßðTäֹ : à¬Ê\èXÆE ¨"\?qÆHó_–^>¹ùæ›Í¯MD?i†éÄWMK꾩»Þ÷Ü^'¾¼ZÉ:²RØW­¾'—rîCÀ4LÓ4±M EwX¦sßYæªg85uDy~{Æ”êüõÀ}iKÖÖ_G]Õ_€U}‹þþ¸å¶‡›[é"¶•ªX"t8Ãxï&b™AªÄ`/m?³/œ­|åÓço7-sUÓ25~óàå–id|59äæTÑŽž‚´eÊ­0»µÛáJA’šYhìÍ;£iÇZEªíPgZAX° c$Ô(¾Ã #Fᙫêȸj䨢†ŠJÕ^W•\+H§«M‡r#zîþg wú~Ð`ù£å(=`ÙEÿ­¡^{°_v¿·w®¼Å±éŒmŒš†1 H¤‘ˆa)ˆ(Š€úí`Ïž ?ÝòÆþ?úA°k¬?E©Öúǃ/¼ó#ÏkUID ÇÑ„6F¡lÊìñša•˜× 5œÏ ^°&Ý`ÎÙh™& X¦ÉB¥ùÈΙŭÅZ££Ú€}ÞØÐÚý åÙ :õïÒ%ÉVæ@@|— Ðòš¡Å²É½‹•†WÌ;»ós£‚ŠÄ‰\(ÕvkCÉü±2J½}h©˜8,WÀÉÛ  S^-–•Áòmh'è{MÓ¨Aa!–aÒ5l³Ì&Îý䜭d^˜ê”ßáR>æ—QÒwÔRg‚çLXŒ%Ç…eYå 戥Xw’u´s=wo8Zw[÷W1+~w€zEâwN?d#ì¿Ô÷²BLDìzIEND®B`‚PK”ž=žûöPK*–Ð8__MACOSX/._Toolbar_Prefs.pngUX ”ÊXHüVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPK»•Ð8Toolbar_Search.pngUX ”ÊXH2ûVHõñø‰PNG  IHDR szzô pHYs  šœ£IDATX…Å—[lÕÇßÌ™ÙÙµ7^Ûqbll'„¥5…HdH "iD)Bm)BŠT©ªTõ½RoêC+¤VUéS_P«>T-7qMJSRBMhj‚;Y_öj{½×¹íéÃŽƒ‹qU´š™³gÎ÷;ÿïrÎÀÿ¹IôÓ—ûstt4žH$nºÃ0TÀäÌÌÌ™ÉÉIï£Þù$Ð\ݹ{÷î¾²~bÁê‰uuÏJ€‰Ú’¡ü†ÙÄ|*¬—|ôèÑ÷#O #˜@022’hï^ÿdÓP{Ï_s[<Ó»E†{{ô–T›$cŠs‹UN¿¨ûfÇõàÅw¼ ýðᮼÿ @ ,Àk×Vìx±{`óÄ »}[¯æàކ»ÛÙ˜lC´†%×çGGßã÷ÇOó™SÏ×íZ陿zõQÀÿ/Õ@™‘zhëðKùžÍ7½{Ó½Îc;yèÚºã5?$W­“-×ÈUê8ÊàÎþNˆ·ñg£×Ú˜;¿eSoO,}áÂQ>äÊ5X&`Ž=ì&’ß<õù/ÇoéOéÑõm¢Ñ\\µN¾î‚Õ W­“«ÖéK(^-֙鰆f&nM­K¾’Éd²|àŽ+Ê `hë¶—ÇGövxݲ¯?)Eϧàú,øBÁõ(x>…Æ ›Œ×<昖 ®ÊÂÕéé©gV¹bM.P£££»|ÛI,õ‰m™:ÓðE{-£]q­µ^¨6D‚„š.Ç¢P®A³É¢F£ I_7bn:ûæžd2¹¡\.»@c(ÓŠíÉ ;8¡e24Iئ^ ¨N–©5Z\_ ˆÖBF !në@­“j{§788¸s||ü)`¥N\BáØ7W;7˜(“Ð4dN)– Ck-"Zè° ­5RÒˆÆ@4’N‡¢uÜ‚@Påõ}*‘>¿p€ kŒ¥›Ò8Ä-2)š†”LS’&SdY)@#†¡ÛÃP3¡hOkA¢4„$¦ˆ´1@ÁÚ@WM€2e  ß2Y2 1,Q¦hÝE‰¡tASã‚å»a~dÜ\ËêTÓ­ÿ+¹˜Ë(¥"eꦣ¤©ÌV±T†¦µ45–!ø!4|"º­˜ ÊõzšVzÉ¥ñWhF£Ry½ûâ{–©WTÀQ‚e¶²4niâ686­«” –jõ+Ë«KûbÞN§Ó||kÊãäÉ“GbÕr=5?Mlj,¥Q&ÄmMÌKˆ[àD0q[ãX‚i@ÜÖW>Ѭá;µZm™VXk1Â\·Rþùu¯ü©ÞÚšLA‚cµâÂ2i©=;6˜‘R–‰µ\bó__ –sÙ#·nºóú¡¾T°&LÀœI§'†®êÝ›¨–»‹7ÝlS[ –ÙZqL 1Kc‚HëÚÔH£¡GžxÜÛ9<\‰ãíÙuûîÛFo;P[œ}ãÂüâôl_ÚŒ @{Õê±Aîm[ÈÇ®ßajÇÛlÕ’ß0À2„¦‚¦¶ ¹ù?óvÄãó}éÞ¾éc‡¤ŸãÖ]{œ;víy$Xœ &ÎϾñ1Jü@X­VÝÅ\îð€èÏ ¾q¤Ûëê2ëý¢ŽÆÁ¶UZÖÏ>«oxâ—~}zú…#‡ýîàÏíN±ç í¼ù÷·ˆ·µËþ߸;)µÛ“1žŸš-4> `å<Òª`]À†mÛ¶Ý×5´éј°¹Ú×çÕûû Ãót|nžD6kÕÂðŸÓãã¿Íf³ŽÓñý‚Ÿ~gÐóúix?ÛËñ©^6nÚÂ}‹#‡_̼ðÜï?üÖÔ‰©!@| ˆ”p€Ð ¤:;;ûׯ_­mۛͦ×h4г³³g=Ïk.­šoµ'b[ïÚ®¾ý½û«ÛSmpx¢—ã“°Ö¥Øÿõƒø>ù›_}÷鿜ü5dˆñ•ÉJgMê^£Ñ(/,,¤óùü™B¡pvii)†a(‹@¨y~èž÷Ï›ìp:ïšGî®HÒÎ’)Æ9~ôÝ=ƾ¿zß:£v£å_Hk~dÏZX}’ iår¨UZ›KXŽ / @)êw0·ì^˜˜k/˜:ØöàÚVÍ…å&Æ'ÉÎϱ÷Á¯mO¥:®• ¯¤³ ùÐÑsM\@jH%‚jD A¤XðJ5¯ðæ9ëì©Igó=7ú©Û¯+â‡Âä”Çø;o³ó‹ûSŸ¹å`áâ{g¦3 ï_`5ˆŽ W ¢ñÍUAµÛ\׫g³áød¾-i‰7ôÈî*ëì,ùb‚·ŽýƒJµbÎf2åéùâËp9˜«nÍ¢¸Zk:ç7—,©¦¿í+w`)Šä—SÌä]æ]ûÔÜÜÜkkXK[ h)QܥЗ{{Ú™>y.¶åžüäÈÖKž~þ¥¸®[TŸ‚áC„´T¸ä–b¹Qö”‘YvÛ\Ý#å#Sx­T*-Á¥“Odå< €6`Ðl¤Uo²À9 ¿2(ø”Vƒ˜@œVëŒJ@¨_öãôaÐZ¨Ý»´ToþÕKŒå ¥~ÔIEND®B`‚PKZsÿöñPK»•Ð8__MACOSX/._Toolbar_Search.pngUX ”ÊXH2ûVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPK†•Ð8Toolbar_Shared.pngUX ”ÊXHÌúVHõ3Ì÷‰PNG  IHDR szzô pHYs  šœåIDATX…Å—]Œ]UÇkŸsî¹÷ÎtÊ0ýb†)1‹vø I ñHêÇ[cB¢<ò$DÑØòBbT‚cÒDÑ>ˆSB1hiª–"Z N;Îàtfîtfî×Üó±ÏòaŸ{çöÛ'ÙÙwŸ{ÎZÿýÿ¯µö:ð¾ä“ ݰ>£’EDDâTyåX“g›Ü~«ÏWôñ=ÇÐÙsð§×”áøúWat,WM PZè3&uT-*iµyûÇ;ýûËó ÛÍç»Ø ˆ±.§³ŒïýìÏþnkíïÏìà[ûvðþ…øÆc°´ìŒüá%xþ·0ºÍá/+ÄM êVcU1.^äØFÐ8 ð t­—,ॎ_æWZüæ¥KØ<,ÆÇof5yˆþúNNïgÇwôiÿëqxé•Õ,0)¤©WT2EÙ>rðÑØ6æçêà{A€ª2<ßù6Ü¿ðŠaň“fž}d'ÿÁ »ŠÄΩd¢¨®ÖR޽UãØ©u²L™e÷î;(—ËŒ±wï^¦§§Ù4 µ¼ògX\p™[rµ Žc⸠ëmfß<Ébîü*ª^<«~¤¿uI¾ôͲçá÷øùáeVª–Z­Æ¹s8xð år™'Ÿ|’C‡Q­VY¬ÀOí…;ïC‡ ð[S'MS¢¤N¦Èêç>8C3g Oi_ºÃë3ÚT‰åÌù[·ne×®]ìܹ“8Ž9zô(ív›çž{ŽÉÉIöìÙÃüü}šÓ§OS*•ؽ{7Ï>s/Ãåã¤ÀäÝîp*—ètRâ¨Ndé¼þÎä»Ï¸ú\-° 7m/îÜ{ÃV0 <5Ï=wíbbüzá¨+Ã’G¼B±4Ä}÷þ‡Ûn×£d(ai™æ²c Údza–Æ•x€Â0Ô´—B6ïUL*Þy–/|f¼$“ ¦ Æ9RÏ 7¿z®7À8Ââ‰éÆu]XbºQ%p™¸Z¶B +ˆPðnÞ1ç!APs]QÔw' š<ýPD„Ì8ûŰA–uhG5yûïæN하šI!µ^RÑÞA¯ù胕{89p¥W{¯ ysa±Jjë¬7Ò•³g¨ä†®’ÀpÙ*S/êûsgƒs·ÑÙèAÄí¼ß›äS©¸F’®²¼¢W–‰®`à²:ÐïqR/šS£’ƒ¡×läýAîõ. ñr’rn Aäóó:çzŸk3à.¢rm%koQE?îžxD]ƒjÄýFÈòŒèËÐo•A Kõƒw³³Ñ·ýo3Íú›¯}ôÖ]¹‰;¢æM“6ޝ‡ìzÃèˆïëP!Ì‚bˆW(hP(Šêùõ !&ðŒo`<_ŬiÆÿêÌÍÅÕÀU0 Zÿ2@Ø| ØŒåc˜+cæÚŸvƒ÷,Ѐ À4° ô4õü«^‡hµê,°žkŒøA½]wåv>^‚üÏ4Gms—€! @þ80÷õf®±N€:°–ƒŒ½’ÂÁÝx#ÈÁšu€æó Æ½ˆì±-³½ô0ÿÕË0g}Ë>`IEND®B`‚PKDØ.83PK†•Ð8__MACOSX/._Toolbar_Shared.pngUX ”ÊXHÌúVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPKЕÐ8Toolbar_Stats.pngUX ”ÊXHXûVHõÁ>÷‰PNG  IHDR szzô pHYs  šœsIDATX…¥—kŒ]UÇkï}ι™{g:m¦¥µ(myÊ#*Lµ|1’HÄøEC4±$&Hš(ü`ÔÈ‚&„¢¼EŒ>ZJm‡ékúžç{ïÜ{Ï9{/?Ü;ÓiËCãúröcí½þk­½×ùoa‰|åÓ×”gÒv‘ $š7záØRqöƒçç­]œ/ù¾ö»w·úÈŽ›7nNâøÑÕk7Üäœ#h@Eƒ„  *!BPT¼ÐkUÑ „@ ø ªATU‚¢ªäyf¦&ß4‘¹çÙ݇ޖI®ÙúÎws}e`Ve kPUD„¥¨?ÐåžÎ‚ôWÛ œ>~”_>òàñ±“WºK’‘.]½v=À\mUEÚìL×vwSe„ªRèµ{¥kV@zýZmæ<=aÓÖm«'§þ|‹óFZ­¶Ž=,}•é…®‡WºÖE ª¡·‰P›Ñ%Ž.¶EDQ•¾ÊМ^°ÞCPŅ̃k\ð’ŸI½6«µÙY)—Wɦ-Ÿ$Ïü¢q¯Š1†nŒº>ölËò^ ²6`ÌnÝ¿oJ"g´17+ª”œQ5>Ëh7êâ5¨3Ã2´rïÃÅy]ôF.š[HÍ‚ÎRI 96MóÊ3‘Ì7æ0‚di$Î+í¹9Î2Ž×ºœ´ãñ>¼ï†ÿ­(°ly“u—OqìÐ ÇŽ”™¯Ïª³NÚÖ‹qƈGÍú,‚ˆú”N–áóÀ|3 Pt#¤©'ÏÖ IâP…Ö|O§a:Ož{¢ÈpÅæ3 ­¨ñÆ«#4êJÐŒ‰ãã’çùº:cÄYcH¬Å«*(!ÏåôÙyv.µFç=RÐ9/B :ŠRH2¶Ýð.¹·<÷û5äy@$¥Ùhi«1+‚¨³N¬±êœHpÖ`AP0FÈr%Ë?<ž ÊŠ•s|ìãûfßÛ#ÝBe#‚±F냠‚Ç1Îí^Z´X(JRr˜Ì09Õ…ç ÍfF«“D–J5Á{ef¦ª22¢¬YsŒëGyù•­LL Q.[¼·Ôëcåþ"IäT@‚*‘µêÔY»xß‚Ï8ufž4õ‹žž\(ÝÝk—fJ}>” ëO°uó!††j>2ÂãO\G³Y@ð4æÛu—zEæSœ1`PuÖˆ³X"k@Dcµ•#üýÎu/Ó ¥b“ÏÞú"O=s £cÛñ^{:Š1‚X ¾ \ú¬ÑØZÑž·ƒqVÔŠÁQ+BäD ¥ˆB)f¾˜ï(b I1"ˆÐlÚY P°Ü¼ýŸ¼ö·Õ¼µw%*^ïðQ(&ÄIDÍÌqzd?µK&ňàŒ+‚³WS†úÚÝ3…j”¤rxZhw”Z⪔SC í¶¡‚¥žu¸ñú'¹ïÁ{9;íéïÄı¥•B£o‚Öê1Zkßefä YÔ¢|#;ö^Mµ¯¥""ªÊt=Å‹©VK–nG$îp|ÒÓlyTQa¶€°XiÕ¶]õ80¾ c#Fo|‘Úú}ÔÖíÃä1•#›©¸’þg¿JqâRD„ʺ}ô;bAH±‰«Û Wr]HTÖ×ÁúÖzÎýcr/¨4xnÿÌ üj×—0ƒc_üiu’á¿ßÊú—î&® ¡Á ÁºˆbÑ3\©«$(œœîàJIK«%#Š"жŠú¥•zÆN49³ñOÔ·¼Î¶wï"¿’é¹”-kßa°Rg,½‚=_¿Ÿòäe|ê™HŒe*KiHN_ŸcÅ`!ǧ=Ö:†ËT› 1A¡\ÈÄ-+6XYYôSf MÆêMF×ïâÈŽßPIK ø/|t'rc̪߯×Öý‹½y=Ïù;¬Ù}«þñ&DIúˆ †ÜXÎäÄP²1$qS/©4Ä4÷È` \Ã@©[Љôùk?'ƒãÛ¹sÿv^ÿ8sW=ÉC»~Âáê4g·>ͽ#!+¯`ËÓ÷1xê$rظ€u1b"ÄHïÿoªÝJX((wsZ. ®Z„•D{ô.¦.w¾þW%oqë–GøÞc?æ¦ûøþíßæçü!—O¯¢²ç<µÿ.ªùZ&* ..³jE?…BÌL3Pï(}‰ay¿%÷pb6C€ÁªûnÍ ®â]!AË¥.éÉ=zy;–5²‡×ü”‡÷ÍU<»w-“íå|ë¶ïÒéíÚI³1LV.Wª¸¸Àdæ 1+-…ñº‚‚‰]:ÍK¹(¢ ˪×jA­Þ=ã¹½t’{®{˜ûýŸ\…‡¼öÆ hóŒ,;ʱ£kqIŸ;t>'7DÒ%7æB¦¦0ßç™KÑnÕ…´CpSMôÔl÷bæ99[åÑ'F³Ñf¹«cM FȲo¿¼ŽÑd„å¡IµŒqïËÎÃ#BkE‹“ÙwD§ˆ;9ƒ<ªhî! ¯Êç‡ö!C¢ÅD$²¢ ’fªLQB„&‘ˆ0Æ\\,º=½‚æ§êÌΛ7vš©ÕƒB÷x¯xÆÄ CïQÒ- Øî!Ç.a몋†ÏÁÐE8 ™ÙÆ'™q¿ý+GËH"6…Э¾AÑ}_ ÆÝ­ºTd1ŒÝydé—sψÅù¥ë½2óÜ^ÞಬŒ·_½:ÞYˆäZƒ¸ó£·Ä§óßD*ˆè’þ¦[ŸyÎÚs¼ý†€`elm_sÑãt©èù¯®÷P°Ò%–sßs‚O[©¯SÀ JÀ° (Ž3òÿI´€i`Fzc $AþßåƒÀ+€hÿäÚO@þˆd¼IEND®B`‚PK€E¢_ÆÁPKЕÐ8__MACOSX/._Toolbar_Stats.pngUX ”ÊXHXûVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPK¦•Ð8Toolbar_Transfers.pngUX ”ÊXHûVHõN±ú‰PNG  IHDR szzô pHYs  šœIDATX…Å—KoE…¿ÓÓÓÝ{Æ36V¤HÉ+–,kX¡¬Y’Mø,ø1¬ù B‚È"Ny8±âÇØ3öŒçQ—EUu÷<œ¢¤Q»»nÝ{î©[ç–átç»»ß~øÞ‡_…f YÑdW903H²<˓ұ„™•Ïú(²=0Iüôxoò%+tT4gOÆ#$±UœG¡Ø­Ê¯VÜfF·h1^_2ÁÀÅh´0uè“…’¦€!í5›MÆk›’$öq%ÖßÝ™îuÛ‹Â"L„n'fÚI›û.U‰?~ŽØ1Íi»™Ù‘s’bëðó„$ÙACÕ¶òéQѬê¦þ–@=!±®jv"!W0‘ˆ…yo(5‘7æDp[£»µ®Œ@â"ªmmK®:ö+VëGe0í Ñë®óW-¨2®³DɆjÍ©Îj>êL§%ÞýñçnûÁÞz‡¡¡*ôGœ‹ûûo¹‰b½T5QÕPd3&6oüН}óËïŸ~öùrvjµÛ ¤¬eˆvÁ8 «ŒIPl¶%àÑýûÍ"€b8^ìï#À™£Õî€à|0(C/”A€T´Û1 á™Õ F[¥›žyÛùÑQ©4‡çóÙþs²v›˜‡ko<ñ[Þé`f\WJ¿™QluBÝ£Á€p¬½°:lL.]vÚ7NûÄÃêOºpk+³Á™üíQ^¸¤Pt†”nn"‰Ù° ê5¡RÍäð°¢ëggÓwž=ócµ²ñCvÇ£~ÊhæÂ ¬ÑncB꟔ àÌH$s΂º 3Û˜L*!Ú<9™nŽÇË&å923{ùR ü×î_±ªE–UÊU²º-(§²Ì@šÇÕ•¬;ŸÙödÂʘLÞÜík]ð€¥«‡ç,8ðB4sRêjó !ÃÉ2Q}­ÄiTÍA\[)ÑÂ?^^ˆúͦ½JÓ~ÁbyÄì,RZµÎ¸ Gf™ˆt¶(¸Û?ý¾ÈóÇÓù¼Nn9ö[ޏ6Þî‹þÙ,O³C­m`7üâ½é¿3àx‘à4|l¸ÿDF‚¯áåñ,üFÀø/µ¯ÅÐ)9òIEND®B`‚PKÐ{ùýSNPK¦•Ð8 __MACOSX/._Toolbar_Transfers.pngUX ”ÊXHûVHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá À€PKÅ!©“-RPKªºÏ8,šËˆÃ¾ @¤Client_ExcellentRatingOnFile.pngUX“ÊXH@êUHPK4¸Ï8„û*  @¤!Client_FairRatingOnFile.pngUX”ÊXH¤åUHPK `Ò8 @ýA†__MACOSX/UX”ÊXH”ÊXHPK4¸Ï8‰§Û’+R& @¤½__MACOSX/._Client_FairRatingOnFile.pngUX”ÊXH¤åUHPK<¸Ï80ЮÞOJ @¤LClient_GoodRatingOnFile.pngUX”ÊXH´åUHPK<¸Ï8‰§Û’+R& @¤ô__MACOSX/._Client_GoodRatingOnFile.pngUX”ÊXH´åUHPKA¸Ï8ˆÍ¥óFA @¤ƒClient_InvalidRatingOnFile.pngUX”ÊXHºåUHPKA¸Ï8‰§Û’+R) @¤% __MACOSX/._Client_InvalidRatingOnFile.pngUX”ÊXHºåUHPK9¸Ï89HäÄ4/ @¤· Client_PoorRatingOnFile.pngUX”ÊXH®åUHPK9¸Ï8‰§Û’+R& @¤D$__MACOSX/._Client_PoorRatingOnFile.pngUX”ÊXH®åUHPK:–Ð8ÞÙ¸· Š  @¤Ó$Toolbar_About.pngUX”ÊXH üVHPK:–Ð8Å!©“-R @¤±.__MACOSX/._Toolbar_About.pngUX”ÊXH üVHPKV–Ð8 µÉ\61 @¤8/Toolbar_Bling.pngUX”ÊXHTüVHPKV–Ð8Å!©“-R @¤½6__MACOSX/._Toolbar_Bling.pngUX”ÊXHTüVHPK€–Ð8tR*÷Ó Î  @¤D7Toolbar_Connect.pngUX”ÊXH üVHPK€–Ð8Å!©“-R @¤hA__MACOSX/._Toolbar_Connect.pngUX”ÊXH üVHPKŒ–Ð8“oX>Ñ Ì  @¤ñAToolbar_Connecting.pngUX”ÊXH¸üVHPKŒ–Ð8Å!©“-R! @¤L__MACOSX/._Toolbar_Connecting.pngUX”ÊXH¸üVHPK“–Ð8«’G B  @¤¢LToolbar_Disconnect.pngUX”ÊXHÆüVHPK“–Ð8Å!©“-R! @¤=V__MACOSX/._Toolbar_Disconnect.pngUX”ÊXHÆüVHPKj–Ð8#TRpöñ @¤ÉVToolbar_Import.pngUX”ÊXHxüVHPKj–Ð8Å!©“-R @¤___MACOSX/._Toolbar_Import.pngUX”ÊXHxüVHPKI–Ð8xÑ1 › @¤—_Toolbar_Messages.pngUX”ÊXH:üVHPKI–Ð8Å!©“-R @¤‰e__MACOSX/._Toolbar_Messages.pngUX”ÊXH:üVHPKè•Ð8bÁõN@ ;  @¤fToolbar_Network.pngUX”ÊXH„ûVHPKè•Ð8Å!©“-R @¤¤o__MACOSX/._Toolbar_Network.pngUX”ÊXH„ûVHPK*–Ð8”ž=žûö @¤-pToolbar_Prefs.pngUX”ÊXHüVHPK*–Ð8Å!©“-R @¤wx__MACOSX/._Toolbar_Prefs.pngUX”ÊXHüVHPK»•Ð8Zsÿöñ @¤þxToolbar_Search.pngUX”ÊXH2ûVHPK»•Ð8Å!©“-R @¤D__MACOSX/._Toolbar_Search.pngUX”ÊXH2ûVHPK†•Ð8DØ.83 @¤ÌToolbar_Shared.pngUX”ÊXHÌúVHPK†•Ð8Å!©“-R @¤TŠ__MACOSX/._Toolbar_Shared.pngUX”ÊXHÌúVHPKЕÐ8€E¢_ÆÁ @¤ÜŠToolbar_Stats.pngUX”ÊXHXûVHPKЕÐ8Å!©“-R @¤ñ“__MACOSX/._Toolbar_Stats.pngUX”ÊXHXûVHPK¦•Ð8Ð{ùýSN @¤x”Toolbar_Transfers.pngUX”ÊXHûVHPK¦•Ð8Å!©“-R @¤š__MACOSX/._Toolbar_Transfers.pngUX”ÊXHûVHPK$$Ô ©šamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/skins/Makefile.in0000644000175000017500000004103712053222403021511 0ustar l3onl3on# Makefile.in generated by automake 1.11.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = src/skins DIST_COMMON = $(dist_skin_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/GeoIP.m4 \ $(top_srcdir)/m4/build-tools.m4 $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/cryptopp.m4 $(top_srcdir)/m4/fallocate.m4 \ $(top_srcdir)/m4/gdlib.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/kde.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libpng.m4 $(top_srcdir)/m4/libupnp.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/plasmamule.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/qt.m4 $(top_srcdir)/m4/readline.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/wxwin.m4 \ $(top_srcdir)/m4/zlib.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = 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_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ 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)$(skindir)" DATA = $(dist_skin_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALCC_MANPAGES = @ALCC_MANPAGES@ ALC_MANPAGES = @ALC_MANPAGES@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AMULECMD_MANPAGES = @AMULECMD_MANPAGES@ AMULEWEB_DEFS = @AMULEWEB_DEFS@ AMULE_DAEMON_MANPAGES = @AMULE_DAEMON_MANPAGES@ AMULE_GUI_MANPAGES = @AMULE_GUI_MANPAGES@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_CPPFLAGS = @BFD_CPPFLAGS@ BFD_LIBS = @BFD_LIBS@ BUILD_CC = @BUILD_CC@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CAS_DEFS = @CAS_DEFS@ CAS_MANPAGES = @CAS_MANPAGES@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CRYPTOPP_CPPFLAGS = @CRYPTOPP_CPPFLAGS@ CRYPTOPP_LDFLAGS = @CRYPTOPP_LDFLAGS@ CRYPTOPP_LIBS = @CRYPTOPP_LIBS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEBUGFLAG = @DEBUGFLAG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ED2K_MANPAGES = @ED2K_MANPAGES@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDLIB_CFLAGS = @GDLIB_CFLAGS@ GDLIB_CONFIG_PATH = @GDLIB_CONFIG_PATH@ GDLIB_LDFLAGS = @GDLIB_LDFLAGS@ GDLIB_LIBS = @GDLIB_LIBS@ GENCAT = @GENCAT@ GEOIP_CPPFLAGS = @GEOIP_CPPFLAGS@ GEOIP_LDFLAGS = @GEOIP_LDFLAGS@ GEOIP_LIBS = @GEOIP_LIBS@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INCINTL = @INCINTL@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ KDE4_CONFIG = @KDE4_CONFIG@ KDE_APPLNK_PATH = @KDE_APPLNK_PATH@ KDE_HEADER_DIR = @KDE_HEADER_DIR@ KDE_ICON_PATH = @KDE_ICON_PATH@ KDE_MIME_PATH = @KDE_MIME_PATH@ KDE_MODULE_PATH = @KDE_MODULE_PATH@ KDE_SERVICE_PATH = @KDE_SERVICE_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ LIBPNG_CONFIG_PATH = @LIBPNG_CONFIG_PATH@ LIBPNG_LDFLAGS = @LIBPNG_LDFLAGS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBUPNP_CFLAGS = @LIBUPNP_CFLAGS@ LIBUPNP_CPPFLAGS = @LIBUPNP_CPPFLAGS@ LIBUPNP_LDFLAGS = @LIBUPNP_LDFLAGS@ LIBUPNP_LIBS = @LIBUPNP_LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONOLITHIC_MANPAGES = @MONOLITHIC_MANPAGES@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MULECFLAGS = @MULECFLAGS@ MULECPPFLAGS = @MULECPPFLAGS@ MULECXXFLAGS = @MULECXXFLAGS@ MULELDFLAGS = @MULELDFLAGS@ MULERCFLAGS = @MULERCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ QT_CORE_CXXFLAGS = @QT_CORE_CXXFLAGS@ QT_CORE_LIBS = @QT_CORE_LIBS@ QT_DBUS_LDFLAGS = @QT_DBUS_LDFLAGS@ QT_GUI_CXXFLAGS = @QT_GUI_CXXFLAGS@ QT_GUI_LIBS = @QT_GUI_LIBS@ QT_MOC = @QT_MOC@ RANLIB = @RANLIB@ RC = @RC@ RCFLAGS = @RCFLAGS@ READLINE_LIBS = @READLINE_LIBS@ RESOLV_LIB = @RESOLV_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SVNDATE = @SVNDATE@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBSERVER_MANPAGES = @WEBSERVER_MANPAGES@ WXBASE_CPPFLAGS = @WXBASE_CPPFLAGS@ WXBASE_LIBS = @WXBASE_LIBS@ WXCAS_MANPAGES = @WXCAS_MANPAGES@ WX_CFLAGS = @WX_CFLAGS@ WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ WX_CONFIG_PATH = @WX_CONFIG_PATH@ WX_CPPFLAGS = @WX_CPPFLAGS@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ WX_DEBUG = @WX_DEBUG@ WX_LIBS = @WX_LIBS@ WX_PORT = @WX_PORT@ WX_RESCOMP = @WX_RESCOMP@ WX_SHARED = @WX_SHARED@ WX_UNICODE = @WX_UNICODE@ WX_VERSION_FULL = @WX_VERSION_FULL@ WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ WX_VERSION_MINOR = @WX_VERSION_MINOR@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@ ZLIB_LDFLAGS = @ZLIB_LDFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_BUILD_CC = @ac_ct_BUILD_CC@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ 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@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ dist_skin_DATA = \ AdunanzA_A.zip \ AdunanzA_B.zip \ AdunanzA_C.zip \ gnome.zip \ kde4.zip \ tango.zip \ xfce.zip \ Mac_Gray.zip \ priscilla.zip skindir = $(pkgdatadir)/skins MAINTAINERCLEANFILES = Makefile.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/skins/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/skins/Makefile .PRECIOUS: 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-dist_skinDATA: $(dist_skin_DATA) @$(NORMAL_INSTALL) @list='$(dist_skin_DATA)'; test -n "$(skindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(skindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(skindir)" || 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)$(skindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(skindir)" || exit $$?; \ done uninstall-dist_skinDATA: @$(NORMAL_UNINSTALL) @list='$(dist_skin_DATA)'; test -n "$(skindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(skindir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(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)$(skindir)"; 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." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_skinDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_skinDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_skinDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-dist_skinDATA # 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: amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/skins/AdunanzA_A.zip0000644000175000017500000015064610753565633022164 0ustar l3onl3onPK J4©vìû %Client_A4AFNoNeededPartsQueueFull.pngùý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÕ =ºº“IDAT8Ë“½R1…?Éöâ<@Æ0“7`x4t4Ô¡O µ3ŽÓ{&}ÒSò.LŠ÷D»–÷Ï«“b³kȺ‰ÕèÎHç»÷ž+™Ù|úøÊËZû‘Ù|ª}×l>U¿¡-—ËÿÊ>h*Šz/K(K¨*Hk¡×ƒ~ÓïÃ`Ђ¶ïkqQ@Yb$ŒŒkPoP‹‡ÑÀjYEÁñù9O÷÷]^ðëáE½!„ð`½¿ÂæEKo„í8†(ÂZ³D˜4…ß1rŽŸ‹EÇ´§ÅãÄ1¬3ªªz]iŠ’¸n#Ï;=?£(ÂbFoÛÚ ð’9ÇÉímp|w‡œ#8‡Öžüo’­YJˆÌÚ·¢××€xÿí;Á9Ìfiºc i†ü % WW(Mëq˜ƒÌh! ,ÛÈóú-¬jHð¾öBÂ4½KXk_Z†§§¨I !‰:Tsó³nï&˜L:æ5nl6›6~iâÍç/ŸöúÎÀͦ‡²w›UžIEND®B`‚PKL´$7ÿñù@ùôClient_aMule.pngô ý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME×PöÀ<IDAT8Ë…‘KHTaÇßwï˜£ÎØd*Vd> Ëhу "£E­¢—¥QAÙ ‚jÑ2¸*ÈEQ‹¢pÑ" zYÙB-1Ÿ•ïÌ\çÎý¾95â‡ÿÿ9BkM°Â¨šLCÞ¹ê|Í]·?¸?ý˜«ÔCJ¿†µ®«šÎ4Ojþ‘ÐúϬvŸ¡MÃЮ"¬”{Èôø—)­-!„£µ.?~{| $ãÖ”(-£ëË÷¤¦ú3nÆœP²!åA)DU’G+ŒÂ`…‘7£ƒ¸ _ ;²$¿ØÛÞö2¦Ý˜4¤)…'YgäF'GEÄúÙª‡jÿâ xe9Ùìp„¡¡z{ºHõz+dy¦×õ2Q®¼¥«tq¶ ] `Zø ‹¢‚/âwTÓ45 Ç ðM^¹¯öÜXô‘þx)z|ÇŒèÏkÔ#úôƒÌú»ž‹‰ª'J ¸K‹O>oSçÓ„u£Re¹´þl_ ~tàPÆôpççLæB†ˆOAÖj8†ÁáPˆ3ñs|xó¶¿ùu×(îÖ_urÁàûññÇ\{{iÛ¸–…µ·‡+%CƒýÔ+Õ¡åæù®#ùþ…ht íö-4MCp]!2_ öòŰçü¸šB H)‘R „Àj4<¿¯ÕÁÜØ ”»JkuiYHÇAJ‰O×iG"¨«äùÉ…E>•ËØªŠÀQUE‰ÅPFF¨lmµ$ÜõõÍfŸ®•Jü ‡Ñ’Iüé4¿ûúØ,[v»½ƒ/@ä ³ ߪnïë•N ZÛÿ+³æÀ½ƒÂ>K²Za½´IEND®B`‚PK# 7D5ÂC>Client_CommentOnly.png>Áý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÕ 7);RHËIDAT8Ë¥“MhAÇ3Ý£H"-â±à) X+‚„xìEж'¯¥<Š Å õ"~€šŠ1½[M\íÁbÓLýÀÕlëZ‘Íx0C³mj+¾Ëÿ ÌûÏofÞƒÿ a’â]ú€àØVzxˆ¼©“—G/fwØŽ¶XM½ðíù9¶£WOJݬ;-ÓÞT@YXÝ“§¬ üèzØV_LKÇŠé7Äãqĉ¥?‹}MeM}ß'O2t힌3·„@‡Õz¥õz}ÃKA€›I­{Ë|-Mu=Û¶±m;Rìû>n&ÅàX‘ÅÇ^•—Q¥@ÏÈdcö¯æätÅ|†¹· UÊñsÿEΟ½0 ˆM ´ÖÒ½ \yŠ7}‡Êçï¨ù¼ï¦³Í7F´Öd³Y~ÉCÌ;ï>ÕYz=½iv­¬Ú4¡nK†!»?¦yô¥›û¹Ýò%;ûn‘L&q]—7•Œ‹\OP­Vñ<‘ÉG;+¬îH%‘H`Y–eEºxA,CkM­VCk”­5B„­Û¥Žãl:uÆd}ƒ‰›·¯Ÿú‡)ž0ÉoZè˜y üIEND®B`‚PK {7°½W½Client_Connecting.png½Bý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME× 6‡¹ÒJIDAT8ËÍ’ÏkÓpÆŸüè’¬aéì`WuLO…já»È† ²Ê½ˆC/õ xÜqƒo<ìØÒR6º êþh»ê–®t®©¡KC3R“eñ¢Pçwós{ï‡çå}€.!"!d§€éZž¹3}Ó/}LQT¿,˵ZÍú' !äáâó'G‡ú+Ï1o{{ÛK$!dž"þ5!dèúÕéìƒÛþ<ŽøsèëëÃÔÔK¹¬(Ê#žç½‰œß²,3/Åž²Ò5 Éxž‡N§Çq âñxO$™.‹ Q7jµÚçn ÀÞÚÚ‚išÈd2p]žçÁqˆ¢ˆƒƒ„B!,,, ÃÌO@çóy;—ËÝ]^^† H§Ó i½½~ìî~ßï‡$IÐ4 ÃØ'}Á«×ët]ßl·Û·¢Ñ(U( žA @6›ÇqpÝ#¬¯¿U‹Åâ³nÕ=ŒŽŽÎÆb±—sss¬a0 õzkkyð<MÓàºn’¢¨ÙÕÕû—€®ë›ûûûïwvvnNNNú*• TUE¥RÇq‡Ãà8.lÆ•‘‘ÐbµZýÆ¿©Ýn—›Íæ»R©tCE~ii)ã8‡›,Ë†ÇÆÆ011Û¶¥F£¨V«Iæ¤rX–õI×õT¹\ÖE¹¯ªê ŸÏÇ·ZZÀ`koowcxxø#ó§†Ù¶Ý0M3ûsn6›š¦¿†Ÿ-[–½’J%_ã´Œ_¸  ÿß(Åâ /3IEND®B`‚PK+§47Åc_°orClient_CreditsGrey.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ¥hn½ÕA l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< Âkž.Ž!§ßNܘu(@¤mu~§lIñ‹ä’us¹5]4wü`Û75¯7BfV™&‹UÙ{î‘…ŽÒ9z†;¯]X’ñŽùÇÁH¾?òöÏ9d*çÜ‹‰ÎŽoäá8ø‰MáUÓgO}Öš…ÕûüùËÅ,ªeXfž»lôÿç¦ýîÏ3-ç)»´ðï¿ùË^G9n¾*y$0ãßš\™VQƒu¢/×6,º˜Ã¡Ø"è4µÍnUãµÛ¼¤ƒCÎoÞÇ”cP£éç~gG#×/ú»Â½´&×êßo<]0%dŽ%³ cöÿp»æ7}Èàéêç²Î)¡ PKKŸ47ì6áÇ\^Client_CreditsYellow.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ •¨‹Èõh l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< ÂCž.Ž!§ßN8˜åd(àz^åXRxG”×ö —R_úÿþ2ñ䡹 ¦c;õxêOŽ9íž°‡ÿƒNúŽô6nÙa{+½ëÆßûôËzzÑåþ/íÅú { ˜Vé5½ø'ÙÁï×}§®¼¨•|÷Ã'¬—½%ÎzËgÚÁ³QOÖ;\fÙ#Ϊ”ÆîrQXàdGÖÄ8æ? ¯ãÏôròD¢˜Óh—/S3ø;½”¤ ÊjyãÁÁ6ÜîS©Tô!ù,ªËae1'ëŠö‹wèôw`µš)¯Wˆ>~¦ QòYT_{#m.;Š\&¹°B:/32Â}Ã[¾°Þ\Á`hn0Aƒ eµJ:/o Ôë7 Ô L”vIEND®B`‚PK…›47½ç†ÓÝClient_Encrypted.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ  סÈ. l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< BGOÇ‹Óo/oäm0àa8X̲èü¥›’‚>¾ìE³åìê—±­]ŸxøHïኩ‹ßû®díÓ*mÜÌq€IAËü³s_õÒ“É?€†1xºú¹¬sJhPKjª7,.k´¯ª Client_ExcellentRatingOnFile.pngªUý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×oiw>7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnôIDAT8˵“ÍK”QÆçΫ©XFiô4dDáB)°M¼®Â… µ ÚEÿ´kç"WAº‰hå,¢ "£veŠù…C£–Ž:÷¾O ›”j峸÷œç9—ç9ö2üPÜï‡ãõØvs6¾,D™ÜøÖÙpÌÕ$4F™\²uhŽ2¹×QÙðÅt>WùœÕŸ¸%ékßaeêCéiçm‹ÔMà*кë~$~HcÛuK÷š> ©Z´ôŽäýcl}Nˆ‘¨gôJã* ÔÐþÒÒ×ÌŽ^‚T øqTCuà:ºI\µÉ'Ï*1®Bçê›úìÐÐ ˜m&󟑦q§ObUvÓgcûƒÀÇ8òÂÒDuPš?B´‚´aD(áŽY?÷ÿQ,bl°–‡d…IPý„°É"„%eÙTqp§Æþco¬ýÆyÕ1?T„¤ah~ûºú‘ ¶²­ÛD™œôcf0{„!­ƒŸ? X/¢ÉU’;eð.,庭øMÉ«û(?¡ü>XXFcK8I–²ËÛÄSÀ'R‰Væx«’ݳˆ.‚º€–(“›Ù¹‰M@KÔ³YðÙø9òÀžŽªÞQw·53ÿÿLÃñ@Ù®=‹_Þýíul‡›IEND®B`‚PK©7¶Sµ•JNClient_ExtendedProtocol.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:‡¸0‡ºï£†Y@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy@…›<]C,N¿íßÈÕ Ѻµx[¯Xç¬é®ilò‡Ò7¨¯PÿÈ[’ÿšs–ÞZݳN[,\Bš9ºx=ºï™þZvøñ¹‡&”WEíö^Spêr†q®ö™ÒC ÅIXùZ°NÈelç.ÛôüW­½v_ÝÅóLgÏŽ:ªéT¾[Üb…Åß?)Ó½Â3‹½G¾ÀøÂ’¼óŠÜ¬3¯ö‹}iZQP2/àñ™¬3*ŸŸçÿÈtÿ„ΪšugðtõsYç”ÐPKÁ“7ó•=!ÔÏClient_FairRatingOnFile.pngÏ0ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖÚ2ã7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë}ËoTUÇ?÷œs[çÑBíƒÄ2šÌP#TÚŠ´%E° ( õ±ðãÊĸTcâÆã‚ ¢ ‰ƒš¨#¾RSŠ%qÚR@Úi ÅÎÜ1¹sÎuÑjÄßõïóË'‡ÿí£?@)…RŠ(Šhhh@kME¼óö»wÝ;ÿ¥”cðœ”ò= mŒyøüØÑ±úÅo¾Æs×#ùìº.ÙlŽ;wV_ïÙýè¹Ñ|¡#—Í5…Qx¤R)oÉOìf½¶ÎÚÚŸzò _}yµ)Ðc­ý¤X,îBê¡Áý ZkÂ0$—͹ ¯}úÙ¹W¥S¾Ñoì~ø‘«ss³›ê_<=þìÐcý{•R‰¶¶V¢HS«­S÷ë¤Si5š/4&’©Ì+˽/½ðÊùé+—yâà0èq]wo{[;MMÍ  "¥"ÒBJº:·Ó××Öš­[¶ñÀÙ³gº @’Rž>V8î­!ŒBjµ++ËÌÎÑÚð`&CSs3ÙìNgþÚü™Læ¡q×uQÖÚÃÛð<m JJüÀg~~·±S'ŸÁ÷ë\žžbqq‘Ûw`M&’h­‘£…|:•ê6Ö:7o^gò—If®þJ¹¼ÆSÇO µ&N3==E©´„ã8Þ÷?\º „¸-Gš\\º•™/fWo¯Š±±ôõö#¥KkëýD‘f½¶Nø¤’)Žä $“Éäòr©WJy^7¬µãÖØ=‰Tbª½­ÝB²ïñ}OÝ÷‘RÒù@]„A¸“0 »À®]=¸®{úèè˜R Ç!ŒB|ßG)E†T*¼ª‡W­²3×íH)?TRJff®ÇqF::¶Qõ<ŒÑHå>AàS­zÜ—HðWµŠµ€––¬µðâó/[!Ä…âìoqÅ«P*-±´ø;žçQ«Õñƒ¯Rù6ÆP.—c!Ä„2ÆðÓÏ?bŒyó»Kß kí‰8Ž%÷˜ã8F1aŒyK,\¿†òFÇãqß‹Eˆ>Æþ—qf;É¥£IEND®B`‚PKaTp7ôjtoClient_Fastweb.pngoý‰PNG  IHDRóÿa pHYs®®Œ]sø!IDAT8Å“MHÓqǧiZXÔ!Rz_‡,Ø\IQBE"zеÐCBËDÊ2…<!ù‹P *I(5ÿ[–[_VM‡5 ÉZ)Ñ^jÚæ¿¹É'óKoBžÃsx>Ï÷yžï£‹‰EÏ„C²p 5^¡·ã®p9mbÄfšÍ+±H¿ó!ñn¨›¾¶Û4Th9uH)¢^ë5>uææ™tÆF<– Ü=Ř› qZà(ÇÛ[Ì«æ|ö¥*¢åøÇ‡ ½È%(©¨-VóÝùY¯‚n ­ç·5zªãnì÷rHNø ðÍõš)sA}=«ðÛëç~éͷʘ´×!wî$bʤ OM\¬"z„_Ȧl|íô˘îÜÎÇ'ù õK„,…Dô;puhIJ\JÔ#áÐÞà—AÂ]\Òq†Í̘³f¤ch¾ˆïm=aCÏó9¼gó\÷(ÀÌLDe7Ö‰–* Õ%Zß9+Z*wQ{!›Ë¥E¢­æ ÐIaýÚ¤Ùâ1G¸û.a½dz븥Þt”cï,ÇgÒ‰ÒÂýÞ„Äô˜¾Q3S½Çøl*Aî/G5ÛUFÛ¢ËI#yÕòì4ý3¸Ñûá%G >ë Þw•bm=G‘6m)+QnZGÜ’?’çÜ.›êDÖ‘›¹µr ©«ãY#1±qÿþþ à†/ÒŽû-IEND®B`‚PKò±7ÑÎ>•Client_Friend.pngëü‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<‘IDAT8¥“KH”QÇÿçÞoüfæK…òA a%=ADíb´(ZÕ&Z´-(&*Í–-¢M­$‚ ’‘°l!eˆ=ˆ¢¥”©£3Ó73ßëÞ{ZØ[kÓgñÿý9œ13þ'¬ïEÑnKÐ^’¢–™­H™“º,¶b›”ó³P™‹)æ^ fÆAGãIûÄúֵɲÊrø…û†ƒÜ”›c°³¢®&±¼qµò2ÓxÜÿÄ‹”î<¦tv:Ž}¥mßÖ„m pè ˆ„ƒ±Ñ ì„ù´›„„tJák‰[—züBÞ?"[$Z¹¡¦®ªº:7 |pàC»_àÄ qDP™I°çÁ ÐÙ)X†à$çYŸFÆ—Z j]´¤*›>À f˜b0 (c9hׇö"|‡ªúf~ºÌbfIFÀä]°R30f ØQ:ð³ 6?·ÅZƒb%`°°,Io3ãÓ«+íÍt¬ ‚1ºÍZ]lAÒ“„B¾üüÉ;O–WÂ!Œ"Jà½ÏÎ “C¼n††Š‘ÁQ¡5ŸËe½×/½×d/„?ê"L{`efñJš1xç^…Qwй[¤˜2¼óå›Ñ‰W#Ó‘³j HÊY°°m”5µ` ÿ¾Ÿž˜º£~´UX‚nWWÍ¯ÝØ¸!^~ãy3p2 §a3îÞìóó9÷†bìI1ëß ¾™Øáê¼R§uÓŽ¶„ÿp†ˆ×7¡ÿz¯_,z]šq(õ D>S;IÂÙ’’Øá-»¶'¥¸}­Ç‚àü1ÃGfÍåoߨA´ß’â‚‚"¥ÚîœSÈß.o®< 4·ÿ¥ù ½Çг*HõyIEND®B`‚PK"“7&ÊóûClient_GoodRatingOnFile.pngûý‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDAT8u“ËkSAÆg’X[Ó6M¥ÖGŠ`)JtÕÔ…¸ðA|mêÆÇÂJÁ;ÿW¢;qçÂhU\hT¥ Å÷«Á&m“¶·÷&޹Dž¶KÎb†ó}|g~3¢ª,´l6½ˆ‡2¹¡…z ª„>„F`A™M`³ém@!”É}ú· y`-¡L.øw¾XÊäžýŸà;ðѤïj|ãC³jçIUmÅçû°³÷¢„u7p蜗À¤¯Ó²éˆtiZ ájÇaâ%Áð-¤ZP”Û¡½2³S;Æ7?‘ŽC"˶Cd Øðß¡õ‚lí!°¨ Öjæ l6mL}²_šÖ€º æo ö'H“J"9n³i™£`³é­Ža8ªH£„ëÀÿ "¨uPõÀæai€lCÞÞJ_E¹Ê(%„*ÞjK`¿‚ Ó` L@P­è"„F”x-F¡¡mHºvk¬ÂäDžXÔåí—¯£„ŒOwûÖ¹?Þ\~ß»çlÿ…Ïó(øÙž4¬¸rã×V Å<]]ݬ^•Âõf~õ‚âX±oL˜ÑÑ_÷úÏßýÆÞìG'±ï}CŸtvv195E²%‰3ãà8ÓLNNÑšLðàá}¿T*õÔRHau×óñõ?-I|kinjÆó<<×¥®®ŽåmmxžGq¬Htq,lŒ9]û’¥ßÑ £ÕDk{û bÑÕj×sq=—úú¥ø¾WñH¥RˆÈþ9ƒP&÷,qøÎ7 thdd„r¹D©\ÆqªÕ cÅSÓÓø¾ªR©VžÎû¾õO=zœ»‰DvÖ *"ZsWFDŒµvÐZ{æ}¾@ú«4X°IEND®B`‚PK“7¹Ñw›ÖÑClient_InvalidRatingOnFile.pngÑ.ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ&Çkæ7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë•“]HÛgÆïûOš˜ÔZ5m4FòµæcVL¥cjfq¬k¯œxW¼ØÝ.CºA/¼œPØl a"ku"a¥”mltj)eÚMV-ÛÖtήÉìÚžßÿ.DAïöÀÃá9Ϲxž#؇á‘!îz4MûX•JH‰bF)õf,Ö²öîÅK{øbߢ\&“é^Üë³ú|B*)Xï}½|7ù £”ŠÆb-jGHôöõø4MQJ½*¥ø§£=î¬ýäSŽ¿Dak‹Ÿú‘_Ïw«ßVV†Q%„¸®”zgz*ñ»Ðt"zå왳绺ºÌB »'½)ª p<~ŒÅ0È <­°Šö—»ºLRŠÐÆÆ†éÞò„ìí뱕Ëê§QèzO½‡òt‚:¯—N'B)£ÏS÷Ý @]Ïâp8„RêLo_M‹DÃo„‡^kðxD¡XDÌÎqÌqËýû¸/_Æzò$Ï®^¥èpðWæÿÚ+H§Óä²9²¹Ü†Ô4m =—UvJ׮㬭Åâ÷cñù°µ¶b®®ÆívSº2É£õ?0 ƒOƒ”R^4躆Aá›oihk#ëÞ‰ Âá0†a°09Ƀþ~ŽlÞùì‹/ì˜gÈr¹<2;ó}>•\#óÕ×T[­ŒD°ø|TUUQYY‰µ¹K €«ò0Õ·ï täZ2§”zOãkÉä[ë|´ÕØÖFvv–c—¶=Þp R^\äh0Hþ‹é­Í'OÞ>“±XK®{*q­I3k‡…À‹añùp:ÔÔÔp0ÅvêN“™ãéM­{*ñå|¦5oB {;:LúÍ›oÜØéèèèžØºù¥³“:¿_[M§‡¥ýb ž;ÒÔ´ŠD,&‹…Ʊ±Ý…öövææævg«.YZbùáÃ|6•j6Ixß›sóóø‰=C¡Ðþ_Ã90ÀÓÓ§q¹\æÕTêC1騹sG*êë·¥F±¸];ýþY>O&fyeåo1C €ü?$ ý~`BŒ1tó>IEND®B`‚PKò¶7v“êí­ªClient_lphant.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å |G@˜qª6Ÿ4P½ÄÓוý:›ˆ¹Jâý»É@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy Œ|ž.Ž!§{ƒO¯=lÀ“,Wu–ïnãÌÎ{ gŸ0öœýå㾕±»_žwhpQÒôš8ýÌ‘Ï7½,Ùæ÷ÍÖeØ`ÒØé"')X¬Ç”·mŽÕÏy +Jë§30˜qä-õaõëÕbTÈj]j ºæu×í·ß6MÝò©CÜõ­ÇïMd|ðEï¢G´¦†à^]Ϲrg£ÿ_º÷øBþlfU'žïÔé_t•ª<â²6öÅÃg$=˜T”˜?jïýq˜'ëÈãùÛ%îæz;휲Ï#¶!}QÌ©-©ÓÞÙ1ÙKE9§5:sdw{ЬêY¿[Žª)§©eL{6¯î¬É÷û,KÙ&Å~PRY*m÷ÌóŸ5¢?Êþ1.ñùõùSFà`2xºú¹¬sJhPK’¤¥6é€lÜþùClient_mlDonkey.pngùü‰PNG  IHDRóÿa tEXtX-Index0´Ãœb«IDAT8¥“[lSuÇçÎéémíJOw.[o2)¬ctcË4DÚì8V6_`'s 1J£Fx11DM–Ál$ÖÄK±DÇÒ­sGtet²–®v›cëéìíìt«O|óûüÍçéóøŸÃü~?&å$µ^[®³)1—ÏQEçyÞ+¯Ë ›*µZ=³¸¸øm&“¹Dée®ÒJ›R‘(‡ ½§ò'K†MWÜV*UìÓÛªk$I*…Ãa,NƒÛí.‘$‰Å¢#Å¢¼ž«Èn%DbY!Sç˲KÛ’–—/©¦Ÿ½ÛÂk¹íÁ`°Ïï÷ÓÙ¿³è4º‹£££®@ ð&M«‡ë‡j»É£ª¸#j1±¦F"1Ÿ¸l‰ÛkÏë?Ýñzh ér†ïm´}§–U×±¢šÚ êʺC.$.À¹µó`Š2—È¥+X POMN}Ÿ‰Ÿ„ÞM¸Qq N/ŸÎM&”#† "q;ÄZhÎ?÷Q”¾D á4—w¹v½ïkÝ×6=3ýNø^XӰѸ.Ûr¸Ïþ Yº°=Ϧs®®˜HÏã>[?8 ÛaïÏÂz`|—åõŠr}ù,#)qM”9wê¹ß[þâÒ•ðü|[¡!ÓtÔQt ­ó¢UŠ ¨žs@%[Õ¯ Èµ[¡[´,Ëíh5µ ¢(jœ5ÎÀ+'ºûµ¢þ"«‚ :¤„á&}WǾ×BåæÈÁ#NyÜž¥‚²,+P½«†)¬¬¬4ݺI˜8Ó7†)–¹Ì.üÖ•Œ/t/Úc@ýRF‚¹E)JIA©TºjwÖN¶-ãétzKj%ån?|(Ä-ÚFˆ<‚)ìNËOSÁcF«´c´Äš™³#Ã#–d2ÙæÞë~`µZE^¯7â¬qžijj‚¹èÜû×o\w¼»ýáGrÚ&ÔTMm}äö· ¥DRŠÖ{먛[K¯?“IvÞ!ƒÛwFX)&©«»‹LzÈÞÓÄ“Î[ BЫ(¥¨i¨mB¨Ž©Ñ®vC£[M¿‰e{QJátZ Y¼>‹îîÇØÃ³¡€…A¼^áPˆŸ²QqâÓÞ3¨jj¶’ΤQJQQš|>KÏûà6388ˆR ­ÃÏô€BØR‡ `Uk‚ÅÂ:ápår ¥Ùl–ææf^<öW¯NQ©TR¢•B  \“q)ŸË3?G)…mÛØ¶Íѣǘ˜˜ ‘ˆcY•JË P,ÉçòàtNy;/³±¡I‹|®€Ó颿¿ŸÞÞ^––oMÓÖ°2“$64I™Êeùf_ÏÉ_/ U›¢?þŽÖšŽŽ'‰Ç—(•Ëh­q»Ý†A:‘¢°RàÒ/#ë_~Ñü[¤Æ;›bׯfŸÞ·¯Íõçô<©Lš{CõxÜ</.§›¿ÿJžYåóÏê±Å±†'/Æ€¤àòìHÚe¸Æ§­5[ƒ[BµuØY›rºD1Ydyv™Ñèß|ùÃFôÊÀ'FÎ}Ä”ØÔ•* ñ©]Ïݽíž>—¯V ih´*l²ñL|â«èé%`˜´àÿòÿ»1(k@Èê†ùc®n•jþEIEND®B`‚PK\®7ƒV|Client_PoorRatingOnFile.pngêû‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ7ŸíR–7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïln_IDAT8Ëu‘_h[UÆ¿sÎíÒæÏíÒ•vëèMšnЖaµqYQÑtÎ'KÉžŠ0[öàÊ@§(LË|÷`*(¸‡Zd¨ø CÛÚMÆæÚÎjј)­k—Ò4¹Iî½ç&÷Þs|Ød8ðßÛ÷çá#¸‡ñÓ§píÚ|cô}!äA „ü „x!ï[91öÊüäž Ц(Ê/‰þDHÓ4Ê9G6›õ¯/Bˆ}Öãñ>ño€¡ô`'cì!Ä!JI1ÑŸlííí¥¦iÂ0 ˜¦L&#þÈfsRÊ0!äk!ĉ©ÉÏo(À=3JÒ4Ì/ÌïŠÅbà¶ »ZçÜâ¨÷7ÐÔ@[$¢a~a~ðêÕŸ<¥ ¥ž'žˆD¢Ä4MD#…B0M®ã  ¢½½;ò›ØÙºº®CUU"„H ¥ÀpOW7B@H UUo¯ÞQKK+„ „"—»…üVÅbMá0ðŒÂ{9‘LR€ yG3 ø[`s”+%ؼ Ã4P(`sÐ"ÕK¥1LˤD8F>Ÿ·9¸mÁ¶92™ßá«B/.¿{Ûm$ëî骖týqÀ¯èåÌJÅbÕš‹[°¬¦®TQ±ìn”„@xVWVm‹óן¬¬®âïµ›¯{‚îr<‚mÔÔ„‚?kÝ@½Šåµ2ÈÖ(¥ @Îvéx†w_ ã§O‚‰iÒÄB~±4ùâÉ}Cg…¾ë‰ÛEæÖ\“»¸åÊÍ‚29†}§ûùøÜr™Þ½ÿ}Ò„Â2¹øÃ_CZ\×+ÆÞe‘-ןY´æC÷{צO¿·*/—µßzΗñЗ ž®~.뜚PKF¡¥6†’Eþ4/Client_Shareaza.png/Ðü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× NN¿i¼IDAT8Ë•’[H“qÆŸÿwÚÁãtnæ<å&³,ó”’va‚¨,M¢2µK#Œº ºê¾›, o"Â@Q¼0Q )µÈÈSj$ælºÙ<ÏÃÜÖ¾}ÿ¯› %üݽ/ïó¼ÏÀ(Ï+œ·n7ý,.)Åaâ8a¾îfûÚ—qÙÙÜâ±åç—tËü»dA[sí%±X*¼¨F£"Õ5m¶ÜÜ¢ý ÈÞá=!¼áJew1ã2¯sü2ˆ¨ƒw!Òü¶‡kk-OêÝ×à!|â…Š´8®Ryr!!‹à•2àà[2ay ü¶oGÑÝU?6úö/ƒ^€3–Zž»ÍæjuZbrVÐÝ ÷\´©np Aðl*Ô:”„¸U}çã&Æû€ë8SAá³­(}µgd ª¤ HQviE:¨G02\=ëØø¸ jˆ FFV‡Ýç³Ä}Ÿ 3¡O7 ±7$)ÉãÅÖ/²2Ö:‡Õ©Ø'(’Î…ÁYøçÕà‚‚Á¯»¶Âìl!¦T"”! ôñ˜í‹è¯—ájVB˜T€;*B¥¦`jh¨qÕõã{«‘m ˆ“éT’NGGžåbC!:‹Œ.1Ë ô‰AÐßÑ"€{J ]X|¶¥éº9{u‹,O³üí¢8tÊ/’Lsl>gÖwÒ4FøŒ(sAs°YUÐlƒÈ6S;ü­ê, ìŸ4ü­¾_Ÿ3]!ÍœpÆÃ$Ûº?³ÈëX³š½‘‡@ïWkmßpU7¥£(°{:áoÞñ|Êvnª2Ó̹ñÙ„O€ÙN‡Ž$ÂÛ9h½Þý¡ª“Ò‘]ñA„½2&4H wiàu£,u<–—JfJY6g¿êDxWŠé }tŸ.^-·Z86÷0â]4í‘Ú{eÿùüPpþ“o#IEND®B`‚PKôi7žÉ½!ojClient_StatusUnknown.pngj•ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× (KnS÷IDAT8Ëm“ÏKryÆ?~ï½Þ;¸®Ua˜š VÌ»h¸Åk#´¢…-ZDÐÂj1¼ÑlÂ…ÌBíZE‘›îâ"Å2)û±‘¢a^•k÷Îb*z™÷lÎyÎs8Ïã0M“‰DÀ/À8~-—€c`Ë0ŒÊÇ~Ç@$Àoªª®OLLhápX P((•JV&“i·Ûí àÃ0¬w€×á?ý~ÿëëë?œœœÍf¹¿¿ §§]×#™L6///ÿ>†aaš&º®™ŸŸÿZ«Õìxo×ëuÛ4MûààÀžœœ´‰„]­Víh4úU×õ€ÔÛÛûëÔÔÔÏŽL&€‚ÝÝ]ö÷÷ÉårLOOãv»ÙÛÛãùù™îînººº¤‹‹‹¿0 …ÙlEQh4<==¡( ÔëuEAUUÊå2ÃÃÃB1.€ðÐз··È²Œ$I(Š‚,Ëø|>–——±,‹t:ÓéDUU¡P˲ÂòÇŸ !eY–Q…••œN'›››ÜÝÝ¡iBTUýO(‹E¼^ï7 \.777är9 …ªª¢iš¦Ñ××ÇÕÕBˆ’ Ÿý422"^‹H’„‚ÓÓÓ÷sÞ²$IƒAÎÏÏ­———cl¶GGGñù|(Š‚—ËÅÒÒ‹‹‹hš†ªª8N<~¿Ÿ6°% è´Z­T*Õ\]]Åëõ¾3x‹·Í‡X,F2™l5›Í Ã0*ßH9 }Z[[ÓŠÅ"•J…‡‡4MÃív éïï'•Jµòù|¾Óé|6 ÃúŸ™4Mû}ffFt„\__S.—­ííív«ÕÚ°,ë[3}ÏÎ’$[–$©Ôét¾kçSR÷ïÒYIEND®B`‚PK9zp7:N¼=8Client_Transfer.png8Çü‰PNG  IHDRóÿa pHYs  ÒÝ~üêIDAT8ÒyHPpƒ "‚,*,Hò ]™¦‘ÃsSfžCò˜éÔ©Í<²y0´<ðHW3ÒЂÓå5AÓ¼Ã$Ýl:ÝL×f©”Û·)(šþñ…Çãý>ï÷ [i”â¸wò$Å>D\[†6ŒƒFA‰”¢¸m­¯¢eèÆZÒ¤I]è.-}AÙ3ˆ.RÀ1B 2s EmJäòf5‡ï^¼¼î1»0)ÜYÍ™AD¡Ïù¿ð3‡¨"9Êá#ƒ©Gïš?óµÖ. Q¤*ðI‘¬Þíþ³i°ß-õæ'8MËh™xC5qV\@ åeí*ú€È— lœ=$gѯÁ~«@ÓÄÔ*Q-RÁ3^#§aÇAòãKwyJp?+áÅ–5¿´)ä«Û¯¯ogñÖ`ì"¹$qy Øvì ëVÔ€ %]ëÍ“ƒš0÷¸ dò–Qõ¸E†YR<8 òGRL„qÚµG¶n¼"ëão”t«P%˜HLõ…ƃ‘¹˨ KÌá1D€Ní1˜tœR:VZŒÐ³ƒ.méÜŽÓÉeK²Ìš.TȨ^…ú˜zI`äÖ bÃM¸Šõ¡× …«­Ú°ú¢gá¸Wç,¦îf™Åýþ¹óH.W!—¯‚¹Ï0¬irX²q¹]FÍgAh9«=¸Š }¸6æO¤¨ÍíËH-èbFÎ,„å-Á2Œ€§kêY…A ëâv·.\„&ð7ƒG)±{ÏWÞHNvþ¹ØŒÖ”{Q-Æ“o&û«€Ï4þtFéØoÿ1s0g­á[iß»/°_j ¡é=hßqSDÈm¸àZ™£øÀÀ ýÃ~åN©ôv¼ïiÜ»|FÝóÀÀV„QìÅœüwþ/—͹@Ÿà9IEND®B`‚PK77[Ö{ÑYTClient_Unknown.pngT«ü‰PNG  IHDRóÿa pHYs  šœtIME×!-Noæ5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPÙ‹o²IDAT8Ë’ÏK#gÇ?3“lú5²#›bn‰x«ö¢ ½I]ð¢¡=Í_P„Û£—BK!„×€—…Á ´”à¯hÀ„€d–LÞ™Iæ}§—š"ËBŸË÷{xøð}¾€ã8FµZÇ¡Ýn›B|ß×BlÛ¦Z­òµ1^Œã8¬¬¬˜ALyž7j4ïr¹\§×ër¹ÜW!Æîî®y||¬ŽŽŒñxüÖuÝ`<ÿÁïZk'À_À¯À+˜éy^ 0MÃ0 Ó4·¥””ËecŸÍÍÍôêêê ”_ÒN'''1€çyz8*×u[[[£P(àº.Ýn—¹¹9³T*•?K¥Ò«Ìszz÷z½l"‘Èåóy¤”ÌÏÏcYwwwضÞÛ¶ý ¨T*LMM!„ð=Ïc0ðôô„”’^¯‡)å5`K)_'¨T* étÚj4Ÿ ÃàùùÛ¶¹¿¿'N“Édb)eV)õ ¥D)5XÅb1Y(‚d29†áwÀý~Û¶™™™azzß÷ËËË7Q寮®b!ħÅÅEšÍ&V±X42™Œj·Ûï,Ëú{oof³É`0 ÕjÑjµèt:Äql.//óððð½”ò ðqii ®¯¯±,ëþàà€³³3²Ù,[[[h­ÙØØ`gg!···¬¯¯üü¯b†ïû–ÖšÇÇG”R(¥ÇrssC¿ßGkRŠn· 0QøvaaáÓ4'KQQ«Õèt:(¥¨×ë(¥°,ë‹*›€†¡L¾Qq~~N»Ý&Š"F£qHÔjµ`loo£µ&ŸÏãº.BºÝ.³³³„aH*•"‘HJ¥þ+F££z½þÿc´Ö¿\\\ µæìT[vÙKúIEND®B`‚PKHi7@~ñ `[Client_Upload.png[¤ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYsvv}Õ‚ÌtIME× '6mèIDAT8Ë•“Mh†Ÿùß™ý™˜Mv7ÍJM“Ô ÑlYck°ö PГÐVôÖ‚Dz+zðèU ÁC{"RƒXQZ±¥bÚÄ6Òj6¶1›íN³3tgvfvv¼Ø%‚û¿ÃÃÇûÿèùãgÞ›9úÑ!R@åÕÓMWÆÎfûӇ塋ëW¿¸ù2ÀÓ•ñ÷‡‡Ò-·Mg":ç½òáÜSƒµ]^ȾnuÍ –«-7¸{ñ§Þµüíaÿ±g^<8ýý@Ö”½v€U¯#ÐtZ¸ëKøÖM6£Úàn3É˿ܨ½ñó¹·DU“çî6ìk)C')wÙÿdžÉ]yFŠƒ¨Ã{HæJ¨öuf†]޾¼wo¹TøöÈ;gŸèy°zåüù–1ýei|Çñ±œ¤dMbˆºF1m%‹ènòëâ%DR¹‘„SwâÉ3îÚw±°ôٛ롳¹8ZìGWeô„LÊÐèÏ¢Lv犢pýêeL±Iitdz“#ù—įì,d‰‘Dh·YDSeô„‚’)¢ë:¿]b¬øˆ0±»°ï_€L*1Njš‚,Šø~‡(Š‘E #݇išt»]œ»·Éõ¥s½ÂN×±šnBE‚N„µuŸN,ïÓ‘d‰f*…mÛ„aˆµ±† 4öTžéëTU¾tºGîÙ÷qÛ!¶ãajB`‘L&Q…0 ñ<­úŸèÊÆÜDi´ÜXŽw*¡©‡×ë¶`5=÷ZCB»Á…Ï?A|ßÇqLÓD–e¡¾Y{«çÁkË×jÍSˆ"-?dmc‹Ÿ–þs’Ññ Úí6Qá8–e±²²rbaaaUÚ^ËZðÂ×ù‚ ­¬Ög~¼R«w¶øýv“š-Q4]\·EExž÷•ªª'–——þk ÏÍž.ÛNk¶ºjü( üQ.Xß<žsg†¡(Je~~¾ú°ËåäÉw§^Ÿ;¶ýö7ÐR2ÙŠiF/IEND®B`‚PK{u27áïî94Client_xMule.png4Ëý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×  +6„?êÆÁIDAT8Ë•‘OË1Å#)"4‹I©ÉŽ,,$kYÎ쬕…Oc¥|>ÊBŠ…,ý™DšfR,†Qó®ÈcÒó¼g{û{ï9‚¦i¼KQ§ßï üQžO˜ÿ”÷EñW³÷ ½ïƒr¹Ìr¹DQ§Óé ë:º®³ÝnÙï÷Ìf3>ßó>·‰¢Èù|Æ0 :«Õ Ó4Ùív ‡C×f×@€D"A¥Ra2™0X¯×_A—A2™Ä0 6› º®s8øKžgX–e°X,¨×ëT«UšÍ¦ó[3‚¦i(ŠâT«U®×+Åb‘Z­† ´Z-lÛf>Ÿ¿€^¯÷3Äç†`0H,ãt:a•J…H$B8¦ÑhÉdǨªê¼›xžÆb1r¹Á`Á`@&“Á¶mÇ¡Ûí"I¥RÉ¢¢(ŽÏçãz½²Z­¸\.˜¦I2™¤P(ÍfÑuý{ Óé”T*õo·ÑhY–‘e™Çãá1ŸÏ;¢(b†kX*•H§Óøý~ívÛ¢Ïçx<Ž$IX–ÅñxÄ4Múý¾ ªê ?á× ‡P(D(â~¿cšæWàSÿèýÕäì7 IEND®B`‚PKâjp7"¼þ(© ¤ Toolbar_About.png¤ [õ‰PNG  IHDR szzô pHYs  ÒÝ~ü VIDATX…Å— TSg†;3í´µZ­ÓN="›¸t¦ê(hÕÚ`X "ŠÊ&ZEVE-î hE@A­ìM!!a B"U™ÚžŽÚbõ/WJ±«gΜ39ç9ÿ%ÜÜ÷ý¿ïýïýï+^ùòÒ'j̘ñ®¥……}pPÐéÈÈHabbƒK©)Ps11ñAÔÙ³u!ÁÁŸÑ9«554ÞûŸÐÑÒz××ÇÇ?9)©DP[3¢T´ßëéV>êì=‹EÕÕAÖ.}Ú­ê|ÔÕ)¿'ÖŽ©ëþ~~;õfÏþ]#¿ùOwWWÇ”””šNEÇ“¡Á>HÛeÈ*à!)£'.Q…€c¥Ø}²‡#¹ˆŠÏ@å >zoÝD·Jù}ZZZ­»››Óe`çŽ|~̓¯ÜGCc3R³8ž¬@ðù!xÂÖSCØtb.Gàr¸Îarlac`|öÄ##»#÷†©B¯v†¼´úüaÿÞ½»U]ÊGCwnÓŒkpô¢1÷°åÔ—Ø>ˆûp9v«÷cMØlv÷Ã1ì6öõÀaA"Øy¦!èÓÈd2ôöö< ÛO×þãïØáïØÝÕõ¸¯·qiU>×ð{p?9÷#p;qÎGhæÇ¾@Eó#´v‡ø‚ÁbW7ìö¨`Ò «] Xí”ÀÆ+ë¶E­ ·zº¿ ع3è7 ¸¹º:ðkxúoßBlj%ü#{ártÎÇI” aÃá;°Û;@â1ñu ¦¾r—ƒ³S –_X>°ØÆ…ƒûA´¶¶A ¨ýÆeãFû_4°dñâé)É)ü¯¾¼‹ËÙ•ð=¥ÄúƒýXè1ðü˜Xóil÷ô¢çÎè ÎüSå[[ÁÙ!Û·¦Þy6Âh«,tlˆÀÁ~¤$'ñµ44¦þÌ€··¯’Ò.¬k@È™¬ÝßÇO©·$¸6¬—÷÷Âaÿ-pUˆÉÆèèF¼«gö;x0ñjƒ¹o ÌHÜx{# ?cÅfVzTÃpm4S2Ñ!—Žz{yù¿`à­I“¦%''•ÜìED\ 6PP?»±:ôæsèØžF{걺Ïïî‚©>á2œ¸(…µ/Æž-Xå'%ñ˜z6Ñ̰r‹Ë=ê°Ô.…X³ù¤Ò6œ‹Žº>ýwÞ7`ÅáØ üûõxæÁ:¨ÖÁJ؆Œ¤„M‚¾ï„õ. Y`Ì|dTòv,ÝÜCO9L½d0ÞÖ„îu0pácñ†j,rºATbÁºX¼¾ú¶‘ø<³•å¥ßŽÚµ+BÙ)»—x©Ž!õàÈ`(g„ÔX2Èa¹S‹$´½ÇSû ëyˆVÅ}[¾€w)Þ3ÎÄ,vf²² 1õwZ«ò0Ç<¾!1h×=ݲysÀ¸È3gjoªœÍƒ…ŸlJ°¹¿ô9~cø>Ù>R|è$B© _~¡Bks†úäØš‹ÉúI˜i– ÓlÌbå0hÐß3Ͳ™ïµLSð±{êÅuÏ„…¥ŽP?LÚ¥-O·ï»Jb˜ø´0)6¥ÑÌKõ•M ·6a¾})ÞZ–…ôB:ÚPv½Ò&xîåâmƒTšq‘KÂ/2S=š\Ûé ÝœäˆMªF:6ñ”POyÐæäc†i&”…+\)šxàr¹hib˜jp‰Äò‰¼1aMsf2Ç0°¿V„„ qÍtg|u‚*¬Ùž@KGˆ[ê™~¢Nr=>X]ÊôQÓœ.BLù(i9ùeÈÊÊDSŸZPÀ˜eÊ%¡ü ä1ÌT›da™ÍiÔ‰q>6FmàMÆ@ÒÅ‹#­’Ƨ®þ˜5»Œ–ÎòMuXæ.ÄÛbÏ¥å3h°ò1eY’ÒëÁ«(DFF:U¢ž¡…˜¦™ \#ÁB 4C\2@£q:ÌÖEAÑ©DLt”„ ¼õCk:;Úú…Æc…k1 \k ôl‹˜Ykq¸$Î…&›.Ââ’\$^£ª²ÙÙÙ¶ÖcûÞk˜ª³Ì®CÓ´„Ä‹Ç(3u Z&Wa牤 G.7tJ©Ý ;‹å2™5<Ïî:³t´ÇÄ4P@òHÔ”¢¨¨]Š6ª@1U šfåÐ2+£Ä—‘5Ô>B“Œé¥"0ì2šÅøØÖöÔx ¬­¬ìÅ"ÁHnþ5؆ãÃ5%ж(x§€Ä ó2PHÁº†ÉK¹HÎlBS}5ª««Ñß§$×ñŽ>-5³*¢’A›+S:ìRÌ3‰Á•ÌräçfŽêè踇pÒo¼ššR$—ÑCÄÆX_¶¥Ú@!•Ÿ0'H\“­.eU i¹fJ$Íøæë»ØZJòI´:f<m†j¢ zÔ:Îú(´¶µcߞɟ^}u‰zðãÃÈÇÇ[ÕÕù$2*º+ö@ÏŠ.Æ)"Ô;¶:f©{Z‚)K qµ Ã* Þ¡ŸOÊ0]Ÿ ]–€à£mƧ;`æÅ!>¹baÍ3ssó³$þî OC=]Ý©—R/Õô÷ÀÞÉsÙç «®Âª¢1Åd „éçdýkÈ+ïÆ“Ñ¯ñøñwÌÑ+´Ó—\£™Š0›%g®¹_•ƒÛΡ¯÷&Ž<¨$q–:€?Û¸8;¯ ÿ‰„Xb´™~œ] µx ƒ6‹ÂdZŽÉ$T*|a?཯Ñ/†»žc61Ï\„%0¢\55Kq½0ÿÙÂ ŽøLuÿqKæççpó¦ê»’’",6ÚB•ˆÃljƒ6…H‹UNªÄ_WV"ät Zdh“‚ßÐãutï_YNhÄ2ñG„E”!#›pܨ£SÖöÌÊÂ"„—ü0û_Û”¾ªRuÖòy°qô‡ÎòC˜»* zœ2JstÍk¡e\]ÃÏ1Û(Ú+3¡kRLçˆ1ߢ ­xXÈJ…Óæ³‹%PÊÚà`gÇ+ýû7§¿º-÷öòÞÍãU?º©êDÄéX¬äRNc;sX…$HK˸ºÆУ\ÌçTpq.ƒíðNGŽÛ·T¨*-~fki™K¢Bƒxí7wÅYëèèš Qvv ¡¾Ñç’à²õ V»Ûñ< í`dŸŒUë’à°)Þ‘ˆ»˜Ic­MˆŽøÈ`i,‰ššÄŸw[þS¦O›6ËÃÃãÝ»[xUhokÆðð ½ùÐ^ UJ´£KÕ…þþ^(Ú[ ¼Q†¨“ÇVÛÚæ¾öúëî$º€xï§3i?0ãý÷g/50ððpw¿pèÐAÁ¹˜èžø¸óCqçc‡ÉÜÀawgçüEóçŸ|}Ò$'\LÌ"¦¨_v~íº/m`BHßPßDâoÄ?Æ’½˜7&:˜ôKoB?å?0 ùî3¦©åIEND®B`‚PKË©&7XàÎíidToolbar_Blink.pngd›ù‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME× Ÿ£>lñIDATXÃÕ—Ml\WÇç¼÷æÃŸ“¤±Ç6`ŵj*,X ¤‘M…²€E‚„¤."Q• .X¡ŠEY°eâÙdÑØF"TABˆ –)Q­ŽIì*þ»öŒglÏ›™÷îaáw°Ç±uÑžæÝwϽÿÿ=çî½#¼€]ÿÝÛ'{Ű]ä¾jfùÈÅc¸_½õë*€•“gÀë9‹i±:¸"­âמ‘¤$‚ÉQïÝ»w6NÿRD®˜™¶ö‰fÖòÅHÛ">•ßQ©ãÌ#Š»©×3Ökaõä_'þôèuÿ0ð;wýdxxøJ___ºO“€suâ(Ê á¶âjóôö"5 #‰ço”“¯¥S•ŸJ •J©sn¤««+åœã fÆVùýƒ„ÿ!éÄ"’©ÇÝ$ý`U°%°ˆÑÓ%z"³õ­C A a&[WÚÎD„¤w›ØJxú BÏA-KlÝxR™·¶‚ÈIzºÂ´ APy^øÍ­£ऌ§›ˆöbœAýW@úqñ Š!R[Ç(òÒ)ß÷!~ä HTbÌé9…x/ƒgi”$PD¨“Jyâ·Š-•JI{A¼½À­©Ø€Õ±Xq  ¶ŠY±æ–Cd(ÚÀl•#Aì<ç7ÊìóÀw€6¡VU[\\Ïóö…¥)LUA웤éJ§P-ƒ<ç]ÛÄ“eªÕüàsxÚM½Æ~Céo ü´££#Ó\ÑGÚ/œ{•¸ž¤ZË¡ºL:ñ Õu¢(À¹ æ6PÿkÔ£Ìû6 Ë6üÆ488xBD¨Õj¨*G•ÇÞt¸Ø‘Я œ7‡¹-°MêõŽWQÿMLbÐ~¢8·“3ëñ<çqáœÐ.ÜÚ6D2Tãï³½ù%T>F4™ÃôÇ}¨'¨—¿ýä¼xsœ‡‘ ´ù’é>+ ‘z¡P¸Á»þauý< çø›ªþ;ŸÏß~žÍf¿˜J¥¼r¹ü8—˽yíÚµÕ¶"K¥Ò¹\îééébðÖg'¥Réöêêê?óù|&›ÍŽŒŽŽþFUGœs¶°°ûñãÇïÛŽIc—³Ó§O[__Ÿæyž +‹NU7fgg—¨¬íe¶±ak6›õ/^¼˜¼|ùòÇÆÆÞÊd2½³³³MNNþþÆw2™?ð?¬V]¹\v€A€ªÆ¬¯­×6J¥¨%¿qŸez{]nú?ñAv«`yyÙ©êËõzýòâââæøøø»<øã­[·>Š¢H666šaT Õ‰v±5æ’†OH>¿çó+­—Z¯1¾é[kŠN/]º”>wîÜwEäëårùþÄÄÄŸççç»›O»¼J«¸ï­UÐV͸ÁÁÁ¸†á{“““kóóóÒ˜TvÏÕýwCÛ£p·çÛ¡&Çì“=àíþ;üÙr{‹D'}áIEND®B`‚PKO˜|7ÿ€Óä@;Toolbar_Connect.png;Äù‰PNG  IHDR szzô pHYs  ÒÝ~üíIDATX…í—yLTGÇTÏ¢<ª(5õni#‡g=‚W­E£FEÑ tÅEM‘r(‹ r³Â®ì‚°'» ,·‚€€È% bˆhÖj)¨Èå·³O0±­¨MÛÔI>yÿÌ›ïçÍûÍÌ{„¼aKO¿‚?ƒ[öZ\\®0Ð!L»Ñ×€hxãö %çCüy›{ÅïövÈü/ü»™®áß#ð®Åõßxשý ðAÀÎ.7†bë·§pì ¼Ó"ˆ"eñdàˆpò˜‡¨4A‹ÀÎ-¡tUA"H…ô¼1e\ªÁ»ê¨Â0H2äˆ2ázÀ£|ö”¹²÷&ÀbåÀ×- ‰²<ÈJbX.÷6`ßOK`ß;¿„ÃÍŰ¯Z ‡ÜÕpKtêäòÃ︆zèý©ï$0w®NºfC¡P#º..Öc]“lî‡UÝG°¼>VU†˜Y¬ óB‚õÓTû=âK…P*MÞl_W: }ßZ`©•=%¹ÖbÃs,ºmˆ¯ê>mµ9V^5ÃòS,¾<“Ó6å/@ÖƒÜko„O§3Ü!–ÆÕ„¸DX¼Õ?gÎ&x8…Cœ/Äw?®†eý0¬¾1+*'`ié8,¹<–yF˜y^SµÁ¯õE':ðìÙ¬‘[baÌ'ïÈÓx½—šj~¶m>™ ¾l,¹iëk#±¬|,lŠÆÀú’ ]‰ÏÒÂXNÀʵïmÐõ¬ n‡1Â8ô|´à(Ý‚ì¤Ü2g{畽p;tÒTöU¯ÀÌ BŸ˜çÆ/Ì3UÆXÈ'áúí   É Æ Ï Þä+žDI¢‡<¿ÈhÒóàè蟪éÂëØº5ŸAv6ÂÜ0¬-Ž1Y3Rûavš>>MˆñrhE ç„ @4™å™ë7Ä“†R|ÌÂ'Á;Þ»U!P4ôZ@.P"ô¢7Vä›cRº樇Ð`m ÑÁ¹ýBt±M¹ -wãqc lãl_„GvD0êì(¸ÈÙ]Êhe;‰ŠJY®!,,²³.]ºÁVÎpäH1ƒŒ x¥°±½È~µ,œ©9…q#ÂLñ4Á4VM//Cƒ‡0¡ZBíhÚ‡GâLÀVêR m½Eªà.w«ÀÅÍ™Ð´ÔÆtŒâFÀÎtžõ7ka#´Ý|Ñ'–@GJ0@Fèu¢z"8jÏÖøˆøÒÐÒÒÂÐÜÜÌP_“!;»–!*ª˜!Ä7bUÖÊ—ã› ëÑÐ|‹‘PÖ(p8ƒÊúJ´·´ajtƒuA48‰À …ÖF&¸H`“÷â“$¹'"¢{-pÜ3ªRl|ͼ[[‰-ª^c$ðhý¥çŠb`dÂ'èŸLƒÏèÓU3èª.åîA¬¨lÿ§•/nܨchh¸ÅPQQËPRRÇ —_bðô”wÈxºø*Þóù§çƒ°èV+^‹ë?W3åwË`c nh‰ †Ò•2²ˆÀ¨šè--,«X¡šÛ‘Ç¿òb#ê­‡“ØÁñw&Ä&4ùˆ9ÐwÒÙMp4ýžv<†¸J=?=ô9§úô#èY`PK {—`|µ>ó¼‘+ϯ>Á:iÑóÅÍ,Þ"ü+ŒŒÌrŒŒ&æîÝâ +žúÄr`áfcÌ›…Ñ¡£_¬wZl䥒`t]_¬©°D O–ª%¤íyy½€Y½ÇÝq»£:Kuázt¼°cgøNLöœ?cL™>7K4ŬœXWº î…—ÀoÏ“”(Rö“Wþ õ»ù¼v7þÀÑn¬5°ö±Veɳ¸¥e¥jµú~ , õ„ܽÓ[åÑ‘ò4-1å~‘¤´ä"¿ ÐÓÙ˪'ø½ PS>vصgU˜ohŒŒ/kˆR´ÇŸU´‰¹Ò† ¯è][w¯¢}¼®á7KÒd*.üáGIEND®B`‚PKT˜|7{¼aÏþùToolbar_Connecting.pngùû‰PNG  IHDR szzô pHYs  ÒÝ~ü«IDATX…å×kLSgÇñ£^FÔ-n!2^©s&›ÓLÝ¢Û²dK¶¸l".›Ì85N]Æj– 8±â„"X´Ð R(ØÒm…õ"m´ƒr‘`[©tr)§¢®ÔßÎyh/ÇÔ¸“|Ò7'ÏóÍÉÿ\JQ÷x¨ÕM¸nqóm%$4̳ýBY(Ö==à`µ¬”æ«Dº„¬ÇCG@±_!x}ÄM_û‘Ç'@Ð;JtiÔá?F8ã%n H÷{…õèüÛá l°¿{Ç:êÑ\ÚÅ‹¿“À›̸«ÿ_@¬)Øã°PŽ Ñòá <`u%Ï+±J~åÁ$'[‚p÷ýŠBÑoXàŒŠŠig6;æÇñ ~g@êÞV %¨‘¥èÈÕ·ÞÞbûÏ †."+ËŠÜ< ôÚDôº"aÔmÇž=":tzäNfÃíŒE~Á¯ãñ È>dƒ¤¤g:—ã³¶³s*JsFV|¼³èžbcóÇ$pöl7l6¤':P_·&]TÊÙ0ë¦ÂTÇAþaÉù5kv(˜M£üBXã`·;ÑØÄ0V Íü>2Ó_ê˜$ðÒ–Àª]Š&}ÆÕ])Ê–;†"..]ÉârÛq;ëÖ “ÉF8çˆæ;4zº×ã²kö¦.ÇëK’ÿœ¦)¸Ô¹ BQÃÀœ¨ek˜}>d<Í—»ãwÔO£ÑP ¯g® RØùÃ2Ì{9 œE¸ØLÁk‹Ä©ªŸG2ój‹Ÿy6â“[ j>`ñùZ°´Z'.>¿…HL4ûöiö\° :NëGÀièw…`cì\L }œ sÐÛÈ\é6 ²å¨;©îß°eGbØ‹/Í—€l¾ ’r#¬Æ½lŸ NÀyÓ$|úÞfÕçÀYŽ ª©Ì‡"WYŒq>Aa±.þ€|aP@`𦉡¡!‚n–Vk# ÌDf¦–X»1£»¦2ßçÐÎm~°S¸PKá«•“63)Û"Ñ«x ÐP¸X2­‚HŸJš{](ëŒ Âû ÈnÀOÜ¢Sr.kžÀ Â°‰Â åNÀŽ/CPË›„KA˘€cÎå…@#ø b±Lq ¶'ê–€®.˜îÖVa±8ˆòrÁåʽ‡Œ>éñ¤¿\uai @ë)ø) ©(ì^OaþÜÈ‹ŸŽ> 3„•úŠ)¸‹(Øs'£ZøÝpn™5á¾²ùJ_‰Xq£Y Ú0à ápëgÁka~™…ä­/`Á‚7·k).WÍ·öyü)À€"ý’P˜KV@*.h?ZÕ½8ðÅMnÃÀþ“¬‘§\œã5É7_·*b®µTmõXk¶zNŸŒ£Úoèum”n£Ûj8C]uÛÜjŽ»µúÛ!æßçy~ûìžÝ0·âb=…—iz à`=‡n1}€ €kØÛ¿ ¶¨ ¬¦^Nd8²Ž›œ²>p’[z8Ñ•œ?Ø<€ òÿ zÅ*ýšÕ±ËV?4Y89`.ëÉ ð¸ÅekÐæp«Õ¶j«'?Àp‹+©Ãjhqm4à‘þ»†­í¼‡XW>Ø/@h#hg½ÕСuËæ‹{ðV‚ ‹•%EŠP„”¢³eåe! PˆýG,No†¿ÌŒäR3TŒU¹y¨ÍÌFu†ú¬0òbˆ uØ~à€ÙÕÝ]üÐVL6ë+­µÔ;¤Z˜Õ%hMKCGè^\Û²ë×ã²ß¸ðåœõ÷‡1, §‚¾l¡°}wLÌ~ 0ë±ø•[°ç²"\ÈÍEçžPü²j.¹¹á¼Û«h^ô:Î.\„š¹sar~ UóæÁ´f-Œ(‰ºCŽÄ~K!F °L…A|4ƒ½ËXyÉîÀ;£R9õZ$FçÆh_¾ 6 õ“OPëáê¥^0y.Áé×ÜQõþ{0~ô4sæ€yåT† ¥²asd”Ç 5~¸ßɉ„Ü;.•Ž<À±t!tié8½z5äÔ#ñرŽ%=ŽÆêj4uu¡NOß"Ši4*(ÄÉà`È'=Ù˜g@K!Š)8sð`o ;¶nܸÁ¹NóÇ:¾•£Ñ4sø|'Õjܼs—Kµ¨˜:º§ŸFÅ–ÍPè+M¾>÷46žã´µ]àÔÔ4sŒÆs‰DÇùî;‰%Q¤º§Šˆè—Íš…hj(ÙÕÌápHÖ¬Ál±±51j7ܧi4šh$*-B%ý6ÍžÒ#G,½Þº4—oÙXÜ—““Ó]‚…ºqÔĉ8:~û¿xïˆ¯ÜÆPZ„¡÷NÇTãžTêŸÙiQØor·×Ô%±å@hF#–Áå¸qЫ€¸”‡6â¿ïþWÅÛÝvHå ¦•ÄtÐ2ÄÓ—ZÝz ¬–ÐX¡ÉB=BÈ[±¿ÚÄö³…X¹çËb+Þü]Á‰=tœ‹8ÐFe<餩c€¦Î:û†žÊ¼£o¨¸¹k€ºö~j[û„í£¹³ŸF’\ ÆçkXm•^|OÞtè7„ܨ–꺕à’ÑC™ˆ¨´®‹»Õ]ä×tSXÛMEc/•M½%%»‚Ú ý$q-öAC/?”ÀvYV^…Ü/m0ýUÙÅ-R=i)‡®uWÔE®?½¬ƒ¬ŠNjš{Eúiëî?ÓÝ7èT$¥–u‘YÑMÆ¿UÞ%lY•ÝäVurøZZ>õl>˜pïöQ 5ñÜξÞqæ>Å&—ÚpHh ¥¨‘›Åí={ˆv‘Úîèê§Xy¡¸œÛÀÕ¼F®4ŸßDbQ«P ×ï5“RÜÊ5q­o-Ún8xÆË…Ÿq? pTVâlü˜§² H*A^×MUë D <.héÂ{s×1ÙÕüø …ŒÒV¢²‘ß@êƒ'DgUs)­‚ÈôJ2‹1öú‘¯ËÙyæY9Î/È*¬yoOPUç¯JÞXwÓ ¥ÃÅWý¶A•ÐÃvÐ+`Ú¸œ]…_\>1™DgTp£P8/nŽËñ¿–,©ˆhqïHP:cVœå/þhyÔ`ç™,BéTRˆL­ñÐó©æË#‰üs&±Ý8gÃõJ±æZ ²íLNy3¾WrpKå\d.ái¸F¤á•gt&^ÑYøÅÞÁ60Uc^žkdŽ9’Ù»YêX„é©t‚Ï~¢à_S«æÏTƒ`Œ®Ê̞ٛë·8œtS©ÉøÞM&ª(—=¾6ìõ³áû`wŽ„ØqTæŒõE{Ëì°p aýAoæèØò7UK$J‘L×A¢¼ÉT-f¢e_HhTZ¶€ú)¹|GX=JƆ¨8)¡)û„å>ÓPóÁ ßé¨ûÍD#ðc–y|ÄB× ,‘Nb‘TX÷É,vŸÄr÷™¬/œ}lˆd†>ï¬t`ôâï¡bÉëßFò‘&o-9€Ž[9'"J¾9Q,ß MGÕ^­0%œÊWáY½ÇRu¡•œ)SǹJã™­ÐÀ¥j N•xÔ®ç@Æ·¨:Oä}Ímü髼2w]pŒ1ËíùP/„F?0Û,ŠñÐ=[€‰Õy¹€Šm™\Õò*£W¬çsÛ‰˜Þü’ðÎ\a7¡ý„önãb¯þOׄôl#DŒÅŠû6÷–3ßq"´L©bÍÈùÇxõ‹}ŒQsâ³}I¨»ÞG+àKmn³[tÇÍf/˜²L¾üèM^ùú¯/1bêþIl¹2 Ï:m‚žlÁ·y~-›†­o˳kï&mÂú·c³•3Š)0‘;ˆ´Û2Zí,‚0¿1Ä<«>Xïyä#NÄ÷±~§¯"À›b¹†¨ÐßÙóæ2ÞÒžÃÊ€ ¸”jr^øµn¿Uç9ùµn$¼×Û< æ;Mdâ¦cŒ^z–ª§˜o—ËÞ4†#ßy±Ž£IO*‡C l5÷V0*-ÙäRÈ›Ëoô9k.LÁµ|a݆"›EÄ: ^-ëˆ4ÇᎶ(܉LÛy˜·ÅzÿÔ"㫃XÞ‚N…(]fSgRÛØé.ç°mˆb$=ÎÖpÎ`¦å,6…MǽJ›¨£Ÿœ+FЪ; =`ŽcîÆa€)¶|¤w…ç›8xìÄbÛèUÁÈïÜùó·R J18u‹¨¨DÅe¸æÛ<»¬“MÁ»Z‡¨~cÛ7ϹBêŸ yµ¬'¦×—¼-¨8Of¶yúë9~Ž¥ôs(î »Bj¥ÌØuᜈkgóH~Lô{¾½¶N2yîÉ·S·D)³7õ¬ï,D֭υέ/˜w‚:¶ ëÒdzm Ñý¦8çê²Ôs×S°ÍÑòÙÓŒiXç‹8öˆ“±uºÉqp­xà?­ø ɧŸÙ¾Q > Y›‘]†%~ŠYÊ—Šôwé=Ò£'²²‘À*S.u›Ç^ìsµX櫌ÍíbœÒA*ì–9€çÝ!dÅÞ¡°Ú,y^öó›ÑÜӣʌâ?Ç"uGó‰ªÞެG¸ìNž+¦A÷Y&Út‰>à/¦dKì4Ö*ã[²‹|Î!ÍßÊ2Ÿ™¸ä”à¾Bá÷!¬ªàöcX´+‰ Yl‡ÂvlpeÑ}»Äš^‡aÂlf«r±O4ÑhLÀîä/†Ó1>MÙ?‡ÅnªÌs\ÍÚ SIx|š€âݬ œŽgnưã(ul)¤Ô@®ØÄVÏÁêTƒ}íR…Érÿð­Ñ'•ï9W¿Z@ÌÂ"MY§>á}Û1¿ý{Ò¾ÆóÑô/+£î±ij¾p4€–¿ «ƒ”нô j^3 -,'^¬õbÍ;hZ¬<–Þc2Ú+œL¶”ÜXìþÞ…¦dâ€góZŒoÌÁìæW\èЭØËÌy¨ ÐURmcˈ…•P>HRyG®9²5|îdÖ‹íZ8h|3;Y`‡µ}mõ?{(µMòîT«—n©œ}÷#2„W«&Æ©³95W±éèÇ(£b«†¦S)ÚÞ¬‘ö¢ëÓƒžÜ{0içd¼˜sQh>·ÚÐ<žÖÞP".Å7ˆó“Û/ËÇî–¼?ÉR¯êòöpWâz÷a&Ò¯æÿTí&¤o·v»lv& ÝãɨÛÝe•}+íkPw¬eá‰,:œŠÆþ+l;‰ÿùXªJóÛ‡Ékê’‘ã-$Áó\þŽwþ.®×ŸdCˆÒÐ83‰³dŠdÌðs5)Êç¤Á:¢Sä6ÒHù¡Ó²aÙJÃåAaWäYYYÙƒuéO?ͦü’ãJ%ßI^·OâªâúV×2¿±­ã÷¼d-‘H^ýµ/û=R˜}tÔ¨ÕãOjMØ?JýåÿOçOõ/"¢tîVÕ9 IEND®B`‚PKmsU7‹,Ÿ¨ £ Toolbar_Irc.png£ \õ‰PNG  IHDR szzôtIME×  ²˜ˆtEXtSoftwareGLDPNG ver 3.4q…¤átpNGGLD3J€)gAMA± üa IDATxœ— X–UÇi6Qî)¹ã’ŽK¦@¥aŠÄ*…I”X„ Hˆ‚,¢| ‚Èb ¢ì Š(‚(„ò¸%næcf ŠEÖ("4²¼ÿÎù¾KÃ4O=Ãóü¸ëûÞÿ=÷Üóžè?]˜Ç˜nÌÌ“Œ‘âIÕ×y\ͺªgºÐÿÿ×åüÞÙU-àú€(úQ,×g2˜g˜¾Ìß;æ9%ìoê™!µècj^·N›èÚyñÑ­D BgXÌÆ ¾Cô±ôqý-%LDõdžê$¤ëꮬ7°™h«Ú€<󴲬^YwY¼¨žëÌXfúD…²à·DÉÒWE´E pcF1ÙAŒ1ÓG 1ReµP/*UÏÎU4VÐ+µ‘ÁŸˆ2¹>±`^µ—ˆ¶q¹€™z•(Uæ}G”ÓDtG=s@‰ÌŒä]žé°Þ#¢«ònÆë5Ò×HÄû¡52—1ÝåÌ•º:->C•¯0fŒù¢Oe›é·ƒø_‰´­çöx~sdQ×—2>2ö/¢\wª%º(m¶â!nû2“•p2êdžÅjÑ×Kµøf’X@¬!óÒ‰"¸=ÑIûÑ.5ª*ƒ¾!ÊUX7Í)e«©5tŒ£ZG¬­?/]§ˆçÏR/z™ ïÒ!€ë¡Ì|þ!í“D{d‘j#-Dÿ¾FtLê5†cø°„¨@Ú!DQÜvaf++è˜É ˜‰ëVЧ‰6w:g3Ìè$Àm5Ñi#Ú'/åsn¼OT¥¬³@ƪ‰®‹É ‰Š¥Í§œØFYWïµÆþèçr¢•D‡¥Í·ãW·è$€×¦wˆÖIû8››Û®"@ØÄÂyîY»EÄ>K+¨÷æÍ°FrŸ5ó’`"fãÇy£Ã‹YýYî[ÈL‹ˆ0%@®ê"m9_®¿ýoB¨«{‰ýà2ß Þ…ÈQ²wÞSŽX®Žy¢ Ñ›¢:f¨;+Þ$Cð°é8Å,UZ*¿±QØ«3v—³g1ÞŒ'®ó;êòÜx ÑêùÓ˼¾:’uá8‚½AÈF¾¿?’ìJä*)³‰5̕Nj _TgùŠòl‰’ikæ—åm BQz(ö$éîÚN,fPþ!·`z‡ •ónD„=º¿Õq:\ß‚ ]0®„ã²·ò/âÓ ÷•%^U‹Êwa”:ºÑ⤠Ë"N$/;sn閭syñÍçìÆ‘¼”—d´Û÷ki–®:qí‚]êX-;Ž@̯\0³Ç¡n®~q6CÍ[SpÛêEÜž4ÇÝÝ%¸¬`ÞS×gª`ª¼úÏâO¾¬:•Š;×á‡ê¯P]]Ã;’¾{r·£ºòj.¢æ‹d|™È7ú÷ GFw+¿?ôÁ",ê9ÞÏ€çà‘X2d$3^Ï@˜³Ëá+üŠ7øø~ì·:'1x]fꪵ©{Ò¶sL"ë{–«?¹ õ_ îÒÔ–e¢®2 ÿÂ*]¬¬_Gqnê.E}Õ 4TìÀ•‚‹Ê¢Ôã›e>8†‚ØxEÅ¡pC,FÆ¢ 2#"pÄÑ5û÷áfÎ>TíÞ‹ªì\TçÄ¥øxß´¶þnüGZ}V:¤oA]ÊfÔe¦â×Е(ßæ£žOÉ­ÁÎo´6GkãqÔ^ˆAÁ¦e7U< Þ·e4Ý\\.J§Ž(gΗ êåiÐe'³'xì0pî(šŠrp+jÏ+ã~;Ñ9çQ†–Ò 8!Ÿgû í^pk3ªr]¿Òî¾aGÕí ¾™ùûc®yz¡k€5L‹Yé }M .ŽVˆXDF0\®>޲w¡5#r²ÐœæÏ2К‡+ÂQŸfï =ñÅ{ìZ=±K¦!lÅBÄ%îæàJ¯h¹^ãuÓÇpw‡¶h 4O/hK<¡y,B;÷}=Æ­Ëÿh ÔV³À@<ôõGmàd4$ Âý„Œ1’Çâç¥hZû’tîŒHmó o7ÅòzpøÆoÆŽ+k¾šúDÂ÷¶‡`= ÚtKhfÓ¹œ ÍÆívö¨6­ž.€Ç»ÐÞt„æèÍå]üîÏ›‚¦#9/´óÚË88Éå&× i[ÖÕŸâuŠ˜ÝL<³ªÃ$cñ¹íâ˜ö†öìSÐz¡½‡1ׇ£müK¸2È-Ö“€‰Ü7äihýyN¿þÀX íܶ0Å¡áC‘4„}`Pc ­’¯ì÷ìC7^ë·+¹üað Ï+›ˆ³ºp¨¸¤V/àjxDqËÂ…@ _«1@“Ëäs{oîOš 耘(à“ @*“ÃìÁ½¥ï#Èu>ކO®¸ ËÚ¥ÀÅ,ÈÃÀO‹ }ü8Ö¸ñܾ~ýý‰–³£õ.††"sÆL$;Ø!ÅÖ)N6H~ç =Ióf#Þt4Òg9 ÝöM¤Û1oÍÁ§®öH{Ϲ–ø<2®qEøÆ‡ K,py»Z¿å+z7ð ¨gjcÑR„Š ;$úZÂ?8¬á Ç·%‹ Õ ø¼¬|gbî¾{qiÛꘆؔôƘÄô‡1‰iMщiͱYYÍÑI©ÍщÉÍÑ[˜„äæ›…¤æO¶íhš`avÌÜܼ$$*鎿¯oK˜ûÈ âà³Î;#æcÇjGDxXaÕrŸ¶wÞ1fÌ~^w³ºŠz®’…77·Xggçt‡l[[Û|›ý†]¾•••¤c‰L‚‰‰I²‹‡ÏÁœ¢RíC/Ìq~NsÝð¾w òŸAxt|ÏË"Ã/¤µE€$¥Éðkh¦ÊX¼Tò ¹ŸîOUãÁj®|®}UD†l:Fí4I‘Àl$CŠ&?$Éѧd å—äé’©Hj%i“d/.ÁÛdHÛ$?´WŸW2üü’(·DÅû@Å ÕçJ†ìJŸKJf¤¾ Ï“á'“$©ÖÔ¿@R²ÉJ¸<3NÕ¥ïeQ[2¤`ŽJ ô™+‹þ !îãªxn—IEND®B`‚PK|`p7Í¥Pâ’ Toolbar_Messages.png rõ‰PNG  IHDR szzô pHYsÃÃÇo¨d ?IDATX…­—yP“wÇÝín;;v·í¶vEmÝj=[Pq½µZ•Š‚õFÅAoT0Ò‚…ªx¡x ¨€Š  rå&rŠ‚  !B¸"Èa>ûêÌþá¶c¥»ÏÌoÞL’÷ý|Þçû¼ï›ôèÑ2f?Þ¹5Ë|¶­Ÿ¹½c”yZX—Ywöÿ]%S6-÷:/úÌÎBdù“m¾…÷"Ʋ`Ü‘9Ì:l×ÙÛÆÖcÞŽ›¢¢"…Èh4šüßÀŲŽ—­ÝçÊWÛG2ÈÇ”ñ¡Ã0¿Ú‡‘×û`aBÿ«=éwâKL÷mÃæP2î—RË·Žíù?ÃÏû}çð£?›\6‘ur‘^“°tø˜^n½±ˆšÄ記FôcÄ­þ Oèà;ïÑï¬3öÅ1cÝA¹·¬èwÃO^Žü~ÑÎσ®F4Ù1 ŠÎ@ä8Ÿw|Í_ö|ηâIŒΰؾ †¦öÁäÞ_±ó‹äÄ:¶¹îåøÅ[g—À8×°Z;wôW¢<;åù9œñ\Ç—$ŒÚt‚Áöç_S¾MÏÀ{½’ÒABò‰ûpõØ¿Ð]\Šh×6"ãÓ.t >tµÿ ³Íg:âÏ:¢¿:mè\òü2É3‹ó٬پŸã›'ñþæ0ôÆF ¦ÿƒ^ ÊíÍàü¾ô–™0<Ä„ê s©º¼œ]®®⨔~oºâç¼Ã…‚k›i¾e‹&|)Úp[ª#W‘èDˆ·»Çé禸Ûó¶ÏLÊžÀÐG\Xƒ÷fHÙg|”ÿ GOÇ·†;Çì±ßêðF6¢óU6N"¤!ËhK´C³ŠÆè•âVÒuw|Y$~†g†Ÿ°4>Þ3Œ!·Ça.È@© CdÂ,”õ£¿ò3¬ÂÓvsÍñëðÝãj(HÕ,-<äæ=ËÉ›‚œ~ÜGQÈ Œé3×ò<Ͷô7–³óT(«ã;9žÛÂí\=sÚñîéAL.Ãà’Þ˜ ðáò/0W dxFÊ£ºµ‚UþpŒqj|­ÀÚ}!Ö¹$ýÔJ¥#{ù—×¢OX‡QbÏ/&^ªaÃÝŽæ4‘ª0r&*Š?ø'£³¿aŒb #åC­ÂD•ãJM±¹øI¦LÑa\Á`ÅkÌVøŠ¦9ŸÆ}Û 4i›h•8âãåÄ~·¥”\[Æbÿx&F4±:FË!I¾™ìÿ‰^§Ìp,ÓTæŒU~Ídå¦+Gc¡ÇdaYÕMaqÓw,»=÷7–MÝ}›iÎÞ‡¯ÆXµ‘ÒØMXx‡1Á'š¯Ï)˜p­ÛèVìB³˜gÎЊžŒ-Ì„ò‚ÀHabæ ¨zß«§²X; [Ý,–T[2n×š× _zTdáv‡I?IJÂÅ•ü+6H"¶0À;¥g¢8vþ ýb™eÄôˆ&‡L°VMgšv3ªGa©šÀœš)ÌÓLaQít–i,Y¡µf]Û\æfÏÃÔÞ§üõXä-šá•×=F{§béö3¼–º‘Î<;Œ¥6d†;bá›É¸ƒ~ôØð>ýư¤Êšõ“™W+€5ØŠuV¬©[ˆC½ ›Ÿ.`ºß¦:\ЦåÔX‡FË­ƒn=²ÖêZ¦¾"°ØÅÏËÊõ:–îw…'\ £N<ÀZ´ãCŒ…ßÓ•=—úT[2Ã6ãïëÆ0Ç ôØú &欪^ÂêFkViçଯ[Œ“~ ÛšìpTÎçÇÐ3ÄI´”·[n &SAtº¢îýþáógî¼Öl¹7Ë}b¦ž”ðç9²ƒ­h“Ì¢#s"17<Š×’ùHEL¼ ·ó^üaë‡ô9gΆšål6,ǹޖíúÕ¸kO«ÎÙ«PÕèé4)Óy¨0õXÃTÅ“_Ä0ÝéŒröžXf‹¢±ô¹ÏTßûÌܱ—*±†3’£E$´‘ZÜL~y#ó”x\ô:ñ7LÎŽdk­={Ÿ­ÇµÁ–¸Ô¯âXÆžŒ«Û¹WTÏÍT9-O»È)®-o¿"°Þ3(`Êæ+Xý‡•»ðX="a¬è2’+S1ÜHVäTúNäU-D¤¨çªÉ~PɾàÃ/;Ñóø ܪ9ܱïöml/]Á-É]žTwr#OͱŒ u#Æݨj0æ•jw¿"pîzTï¥{ƒ™áËNXzÜåO1‹œ·‘{y…‘£(–×¼<€FßJXrâbâ’Šp=ïÍ7}ć‡à¦tæ„q7.éIÈ«""_Ëé˜'d<®¡CØ·µ½‹’j¡Éò½¿ˆaùn¿EÓ˜í.fÖž;Xz&1Ò)”h¿QÈ¢ú’œó®çFA¢Ck1ÕøÞ|HXìcÜÎùòÎú÷xwϧŒ<9ë'‰ÎkâLân§UÐÚÑI]sš¦§Èk›‹–îþ…À‹µt÷’oœ™½W,ˆ$ðí®(V:Ú“|ªY¹I´´Ñ 9¶´uÒÖi$¥°ŽÃWó9žƒ‹Ÿ/Ÿ®ï‹ÙÖÉÞ•p¿’Àx)*àÊú§(tÍÈ„(n'WpúU‰Ñ‹E gl d¦[ Ö?&2~CÛ§}+˜†gF´ÍíhZÑZ…–>§ Lïõ\ö¦ãéÉÁà4Ž WŠod9%:áû­/ÏZVÓ(À(¬Òó XCMm³ù¯ ¼¨ÙŽžæ£—œ½ó 3…8F9³åp :^ÛØŠº¡šúVªë ´t…Œ5¸(açé$ö†åsBÈ=6KIR® ‰¬Ž'ê& õäWè(PÖ“QTË~¿¢ßþ±²Æ=`ÿ˜µÇONßz‰ÅîÑ”«[¨Ò?CQ×D¥¶IxÝJj‘†ä5í€=(®ãfº’¬âZž CרܸJx¯œÌR YÂ’”ןSEnqÝÁßøO-Øâ>Â74õN^y=¥!GU#%µ-¤('RØF ëFV%ai¥„$•” åRbÉËü…"ïÉ»-ðVd²¼þ¢¸„ÄB …jÂÓʽ_Bp¢”àW’K¹*ÀÎÅO†?–†ŠK¤â¥4³X#-”ë¤yOtÞGƒ Íâ3”fÂvûÏí[©ÕúØng–s']Ñy$ì¡ÇÏ!ù¢aE×ÄrQö¨F×,zÚÚfÑ݃¿Q©tMf!·dæIé5æMõÝ?ƒÿ®¨§¾|.ÈâïIEND®B`‚PK;žo7újƒ¸  Toolbar_Network.png ñô‰PNG  IHDR szzô pHYs  ÒÝ~ü ÀIDATX…­–TTWÇbÁ`‰Fƒq!4*UD!AŒj ¬ ˆ(©:”dèqè½ J@ADDQ)e`(ÒEŠüs™l<'›Ížvï9ÿóæ¾7÷¿ßw怒ü•H[¼k÷ÒgÎZ™zÞ+Kþ…ÕtÕîFŠÙù+¦f6–ÖîÊÇŽ]TQPZößbýåÿaÐÏ ¬ö†$ØFÄdfåVµ74¿{×ÑËo;>ÝÖ=>ÙÖ=6Æê{_ß44TþŒÙ—w¯²)4,Þ~V²2E$$·kÚ^ pMÏ®H*|XS󸲹ƒÉìèàâí >©{€\‡€þ÷¿]ÛßN‚Éú0•“_ɘ@HXB| »Élnjnnç’€`u½d€€Õ´°Vr¯“ôÙDM,.jÆPÛ8Ž×ããYQ³°±½õ°ª¦cirg’hd‚|]?¤ xÓ44DcËù=‰šºT<@iy/=éGyå;ÒæÆ'Ï @sQ£s7.±’c£™=LìÄÐÐK,g¶ŽáEÍyÖ‹¢m¸›ßŒÜüVä¶£¨¤ %e=¦oìãþìääÔí´uÌÇ´YÁÈØvN ÜôÏ=º‰iO‘”þÙ¹¯‘™]‡;qUHJ­EzÖä»÷X¸_ÄFaq7:6?dV+Vl2ÔÑ5äøùQáìr §Ï:@ûµîÑË8÷“Bè”ò Q1ˆK¬Fbr RÓ_FäÜm"jæ†GæÌ`¹¨Ì÷GšŒtuvbt”Xý¸IIIHHH†—§'ôôÌá铎äÔz„Ü.ATôÄü\ F|H I˨ãÞ¦gÍ@QÙXf§šÎûü‚"ü{ëíiƒ¹¹-,.…€W ÿ€BÜ+=â1"¢+{çâ^ !é%—œF›€¹c¼‚Ö@dt"Þ¿ç`|ü#8œI@Ýëjœc£= vÇ ¸¸ê:00ðV ;»¸¹¥“ÜȆOn€À_f4}Ý+}ª¤|`º³{œSá|Dkç8ʪ‡§ƒ®ã8Ã_qÎt5ENðk¿Ø4Ol÷Y–Îã¥êñô uõÝ<€‚‚ûPUÝ}CwP‚«Wãàè˜ gçâF™’øøæã’u8¢’™(«"kFÝZ¸¨o梺q ¥µcˆ(ú€ÀàWðÜç<²nÁy*…rF䀨è:>1±mt#cë…Þ ®aµ¯;1Ø?Ô”,ì˜0òD¸vm ‰(‘@$ÃÕ5-‚qѾa™ˆÎéCRA2 »dw‹FÀHy/F¨‰}¸fýÒS …¬\Iú/ø­ ”~ä“”Üåñã±s£3+aEe7YñÑÓ;MÊ1*;öÁÐØAÉÄófprJ|ï©lœ÷ì„MX;Üb;”Ò Zv'‚3»ŸÆAxÌ\cá´g´û¡‡5 îœ9üvò¾ÝºŸ¢ºÓÐBsÏ¡ág/YæÍm“h% ¢ÅBAI §Ïx! àÀÉ)..i¸|9 j#a`ÇÄ çfèz´Â,¨6Ñ-¸Þ»ˆ>˜WÄÁä%VÔ·z‹½ö,hxar",sÎ㣨/äÍÃñÎ'•4ÏœÃíHY÷;Á2²K¡¢zú×ÿÀ³ÝÖ6*Zt6)Dý#}Xù`ÛNÓZq!ªn1#ðN|Mæ%(2 pÚ‹…£–]=[‹UšmX'_ 5牘hðt›iiî97¸~½$D…E¡¦¦ZH ¼}iPQÙC#w€£c*Éöòà–Rì3}„²\˜z–BËk¦1­¸šÒç¬.œn‚zôcì,«‡&½²'_@Xë9„Ž´bãwõX$žŒE¯Gò$Ä¥d/Yß:yÊÒ[•À/ÀÁ¥"—%9p–V¡ R‹xSpä˜ÇØ é°Éµ;k!kY‚ý‘åØfÿ b Øî^ý¡õP ©Æ»Jhzãð@.¼ ó÷?¿æsë×c“n-Vî(žX¾™Vûû1l‰o|¡›{lüÃqÄð qÁòŠ?‶5ììãàáž ÓŸ|Û×~m7 øMþ”°"°z Í{ P©6Ç×2¬<ß !»ṟ®¬ËŽF´CÊ­›jñ¹e (ñÅéWÐI€˜NñÔ¢„°?-úú?)Q©É¡‘£îÞ°¶ùæÃÉnÛ«±°¹LÔÒ:c" AíÞ~JX½bÚ-ØîT‚}•nнóZ¾=P÷gA‚ìòÅQP+Æò‹­Ps©Ý:‡ ‹±Ù‘#Jð•^éÿº€ö?,‹’2b®N·BCï²Ã"Š8AyS7©¹ppˆážÒ»Ê;t.ÜäW³Láî„èžW4hÄWFÍØaÓ}:¤ t¨\ì-ÇWØ•²›øá& èÕ º‰?ZŒ­afû›È¾¹ê@鄤ï‹?o ß§”.˜;ßð½Ã¢gáÊ•[3§å™çüRáK·gL/ûžœnÀ׿Ll$Ö dA'²®Pˆ~Íç4le܃œs'>·kƒŠ}ü 谲̃^P –(çLÏÛèò··ÏR×¾Ø~gr±Æs¬×o‚ì¥&¬·l€ŒKNÞaá` û&°ÇXãÈ‚èµ*ȹ6@Ú ~ý6Èš×⟙QI˜¤ˆÛïþÛseÎ ð+Ð î.ĪM±nÅ&Ö;4a )EÃŒvœyÍ€rR „íû!ä4„í¾oñ¥U#øN± ¬×е‡Š°T)$WhÛE¿ ÀsAÑMƒ³L· Ò—Û!îІMÞDž¨3ÚpœíÊr Lúá½P jÇJ+R!†Í9T‹y;SFænvQåMùløUÌ[ hÇ¿/kr½ùȸõ@Îÿ-ä#{¡ßÝœn¨§ŽÂ(·•ñ0‹/ÅgW8Xiöb¦™—j^¥ÌW;k€ÍQ¶^Æ·ÛÏ_ðDWܾR·°-fšé#8’ñòq€Vú J q2¦¢—º±îB>wG¨mWÄ1áOI?[^[§´jîãP‘SŒ÷kl«ð¥O¶FöC#yŠŒ|>€õ7‡±øb5Ž|·Xõ\€¼‹‚èâüD«)ó¶Î_%å°h§Y¹À‰°¾å–y1—GVÛ—|Xn‘ÇYªÕ˧dVB•¸BY°Hš¼#L´àÿã ă Pdøø—ì¡,þÌŒo¥¤×\éïƒçH}Ì·BÂcÎ’ÏLøø«“ÿH‰ÍŸyñ÷8¿Œº…0 ËñÄIEND®B`‚PKTap7Y)´› – Toolbar_Prefs.png– iô‰PNG  IHDR szzô pHYs  ÒÝ~ü HIDATX…µWw\TW$( ¶0 " Ò™ú¦QŠ€. UDl±5ëÚ)¡*JŠ4#H4JQš E@Pˆ 0€ƒ¨k Ì;{G'þü¹IÜìfßo¾?æ½{îùî9÷|÷\þ  GAñOÛý§)}®nchç½—¹1$Íì'®QVùÅ¢÷sä¥c>›>COÓÔa+ú¿èÿA@Åò@Z¯KR8$µ€ãñV°­]«µÑ·¹ÊdŸC§m£ªÀ|w¾HÇf}&z§‡ð”¿‚ÀÛèK5¶µ`|·8\Ž[—‘iS8•@X¯¢c|È6ºòM´ô{X‡”Ù#è²ÓAøAA:ÉäLYu¾é<}çã÷ÖùévWÁ:¢· ®Ä-C`PI 4¶?˜Ú³¹ <²»À.âÇ1M–U Ûg_¹s܉{f'ØÇÖãvGkqÛð*X)€¥(ÜîQ5Ò™) øžcuÀ>x^bˆ}Õ£KÆ:è>Ab ºu0r®*ÝÈ¿ë|Öœº6’nn9מ™m¸[f«Ä5³\’ë`uÎMX•Ú ö‰M¸}ldE¼–ÇÔÃòøfX]V‘µÀò/ßÈ«°¥hÙwÕÀÞ•;i~ @b{´˜›’î#ç\„y¿KÀl½?m}^Û˵ßwƒgF³Ä#£EâÆo·Ô&pIiÂë%+“„øÊ„FpJl§#å¯Ýã*^l;Uý2°¬Â÷`s~lBU‘P{Õ‚mX=Za×%0ûÃ`ëö:zå4{g·Âê¬V‰gæupOkWDB g~8†œ[øììáY.kâ°YÕl¯Òi£Ÿ0º¼ñy~bîor#ðë!ðˆŽGWƒK$J‹_šhºòÜ OnB= ·^|!¬9Ó ^y(-à‘× nÉõ–¾ïè¤ZŠN“F)44ÐOÖ%jE¨ÎP8¸ÄÞ%÷dm×/¥ýàXýXR—p ŽEUI,weùí¸wN+xç´#MKœ}º©†‹«tz1•JMVWWß+''çÂj…ÀF°.Ü»ð“ø×ïƒçI!x…]…¿}=lb¬[Ç •b–ú±¸HUj¶¬F•Œ® ¯+ê…µg»%ÞE}( ­¸¥÷ö>²žöUƒQ´páÂHyyù5h,a¡L´‚ .÷•Þ}9C°.³ ¸aõ@÷<0L7Ю ‘HÊÊÊû?&@7û6®Ñ6 ¯Í:€/´:À¿í“{_{¦ߔێïÊoÇЬ1š±~-‰B)Õ"Å#›D©ô~(±ª 4YáÅ‚gÅ(‰÷ñÕ)-`zÌþž;IæÙ4««¢üŽ`yçµÁöò{°¥¬6”<€ ‚ ¼é„3>˜aŒ€—×ÒÛ:Ôâ5æ†íg¶‰¶Ùh¦Ìž>KJ`ŠTX~Ëy—*¿å.üØ7 A‚ûøÊøk UF;$Ýæ[bïi|1s¿ôczÙmã›KïÁÖ’Û’ úñàÓ%ø“óSá…ÏðsþR„éètTí6z>QD…±Lø-›(S6eé<3UÕ\ÎÕ¾Îí€Ô–’M=øŠh­k`Õ¦ž»;ç«Î G{fåÇ4Åe‰sóbàëÊûïòaüði<<­ /k¦À³Jåa”o sÈð´ 7sïPŒ‰û „©+¥{@eÞ|—í'~Ji…ôÖø·—$.é7pû£ÕøŠ°’—Ög_1­š0ŠIÒÌ™3×~è\ÞA[m÷PúÄ‹2%¼èâN<5% zâ-a´@ ÆÊÔàñ…E þAÄgH0’‹VŸÁw>&Ý^œÅí—ëÖ¨Ñ,NlH-;*„¤¦’=åwq×S7qç“Íø²]ñ"ŒÁldò–4°Ùì"Q;ZAAÁí=SõY&5‡LÞ¼®ÑƒÇu %/«T%O 5àÕ¥/àÙ¥ðê¢<.6ÀÇ‹µàå¥E0œA…Çé¸{ ƒ¡hÜ eAxn)„\{ÇE¸_éÏ’U9ݸkfØÅWHÈûdXΨ¹:DbZ°ïÛrý•ÀM/ºâí³¤Q-å—‘+$üQ¥..7€çúp=ú,hvg­ íÆ–Õm•ys‡Ÿ¶Í‚¡4 ÆpAËg!zP•„ï«”¬+ìÃ2;pô&pç·€Kj3˜o ¡SHg‘sé~qB0ù·³=3kbûÇj0& Ãx Ò1it¶PÛ€qy±!«HK׌Ê/­¥B^üºe †³àÑQœKØ{²+pû¬nÜ)åšÓà{¼r;Á#ãºÄbÝÞ[Æú‹³ FÒ#]šv‚L44¤]Š©ºòƾ lR,äÀ“:d‡°êècu£œN§g Ñ PQù…nªË©(Å.É  …Óñ‡‘fà’Övyý°¶° ÖŸïƒU±ÅÏ\_|î‘!œXâ¹ý'š‘îe …’Œü¸ËëmÉ6.Qåfùk÷|¥u§&Îx|´žšyÐUÈ}Âc1ªŒÉŒ2Cƒd¤vÒæò+Yfs¶ò£'çÀƒ>Dƒï`Ãùðʪ{m³5 ŸF!×c †€³Ôú F!³YÌ|â»ð[ÉzwQûF‘7|nåhÜ o-…Ñ.žDÜf ‡Øwt °b&“™=wî\?™ÔÎípRM.Òq: fÃD b|àkV„¤‹M´æ ½”N£ñµ4DÌž=;`Μ9;½Âb„éïÓž¾`pï¢Õø›Ö0Þë ƒ}\|´…‰Ûè‹ôEºú†¡È`‰,US(*þ]ñ”É1>câ}Œ‰úüDF*¬>uíÅŠ¡÷éTr%…L>©¨¨¸ÙXK„°@–û÷ŠIÝ<]¾²To[’.Ǩs ãlh ¡MÚ± [TÔµ¿Cvz_Nw tÒ,¼…áO“80Æ–ŒÅ±àäú¯VoiµpómgsyµL¹ŒL&gM:u²ãÈ­$[Àg7ÂïEýÜ"¶Èu ö¢Òê7qzB0ÈÙn%m¶ãjjj»e!WÿTÈ—€Œùåöê';êiâ»·¸¯öîÀÚ1 Mp:“ñsB»ËÝ™YG¡2Î#QI@»ü›·MÅ»L*.ÿýíøí-åÝÍåOѕÞçïhnÆÊ"Q°üÅ‹±ôyôãzô“ ƒœo–õöš´ar–À¿G}m… çIEND®B`‚PKH˜|7t-Ç;øóToolbar_Search.pngó ú‰PNG  IHDR szzô pHYs$$2òŒ¥IDATX…Å–{LSWÇÍ&Y–L¤¢!D³%8EÅM' ÈtN§›/00…è@QAƘA§ˆ)¾@ù`°B E´B¡CZÚÞ{li"´¥$af”@sK§1Únñ­w:I)Þ›&Ã|QëCQkÚHkpž¥×A#¸ÍWbI3È·âôÊNö#¼VÈÈ/€7m1ÈyF TT*Bâï‘áçÛ×nÁøþÔ:ìh¦ £ËAc´5¯ üY¤©¥)iyUí8·¾›Ã*VóÌB¸ÙÍ# ,5J@ZÝø39=®ö ©ñIðBé ü”a¯Q룭“QëâV@®ìš ¨×‘JÏaaJ>-ƒŽN.$`o”Ž{Ór8Ð#à´ÜŸXÈ=Çj£8J<µND­ÓJ[@VE`Tµƒ'/:°A*Ô½@ªêe !‰üVwÀ—F ø _Äd ¯$tøßeqoñ5ø¾ Oךch]×DÝ@ÚÜ ”º~\,ig–ð!¡'< e¥ÑajzÎß´Ü'ðȵTQBQ3']ÔŠgIÚð×Z«z@m‹4éúAcÛK¶ˆßÁËÌdÂ%K—‰|7Š•Ñ+¾³£Ò8í$*Gw‰Âã=®Ñ±€¼ /T ½nêU=PtôÖ— ©õ%»ŒÛÎ**¨lß±Ûs¯¢8nD£Ô’„×#ƒdÔ,&äTê¨ùÒb¶¸5_¬ìeUkô…¶£PéÙRI'S&Ö ŠùÏ»}öù ›šš‘ØÇð}5ˆSœ™÷{ía€Ç*x36ò +`i™²¥D¨UVè„Òò.¡XÐRVR WS( ›ûÖT˜ŒÀ~(ŸÍ2Nr¦ÅøõP~u‚¹ák çróÙff"÷­;J/_‰éÎÈȆy )”LxþâU¸kW7a¾AGùq<|Ò#ðh¿^œ¹ÿÚjðÑìghè]gï¹–±¶K–1¬­m˜èÊ™ÑÖ®(oΜdsßž1x°ëüÁ¹sfU ¡)(kF†™˜ÌA±Fùe=Š Š<þM{>¡@}Ñ9ëÆ+8#ÂÁ-§íÀM(Ð "9¢K¦—ºæ™yøk'¼¾2pi"íyî©5£ðé=pïØf¿¼aÁÐMOèl9`a>óð·¶`åó‹ö ÍU`&yð·ÐÏ%%eùLÃß•˜eø^pCþA±­ÈM’‚IEND®B`‚PKh˜|7%´òB¤ Ÿ Toolbar_Shared.pngŸ `ô‰PNG  IHDR szzô pHYs  ÒÝ~ü QIDATX…­— PÓgƳÛv¯éån×^¶SëÚµŽÕõ¨¶j½ðàFDn¹IB€΄3B  ÷‘„ûN!@B¸Ã)xá±jÛ©nŸýÈNºíŽv»;ÍÌ3_&“ÿÿyÞ_Þÿ—÷£ ü7‘×o‰žÿ9ßý¡Ö:±?°M”XÒÊúÌëÕÌÕÇà-Ÿ‚ßÀ¨ý“ˆP^Ç™ õF´‹ïÁ®X€M£ø,6 4–\ø*œËí#Wçüþv\ù‡”CY=d°Àñà œ‰BO£¸wBb^Ôs…=søÈä4–¹Äaeh>ÞÉní° ÄûÌà.V®çΊoáDí#”̦`òÎ*8$€£Áv2¬ áÂšÓ gbîÀí†=·‡¨û¶5§}å@@†â æaÙ°Ž-žFqïøò9ðd³È•Îb‘~–†×ýÓñ2[Ã.¨\·^¡ÅX'~ˆÓe}àÆ ÿÚfØó"ñWF>N®Ãû—³±-„låWzuÆvYr"ÎfH¯gJ^¢ìóKïÝ{1‘¹°d¡§‘/Ÿ'“Ë ²:§‘Õ1Öxž4åh>(—:±Ã8Ü7ö#éØE˜ÊÊPªµD‡v#œy>XЉUÔj¼‰÷=’`™Ò¸T±N¶YR¢¥]#{ìÂ~MÙë›Ö»Û#'©ù8A~_=,)$[ÉÕ²4iáEã`Ûy'|ᎭiQ8î‰ZçuP²Ö"^i ÏÆØF£âEÏ*B)¯z&âUÛH¥—Â>[Fª–ÂŽ¬6™]°Éè"?I›B7’}擦øÄ=´B˜Q ¡§‘Ú6Gƨ 2lŒ#¶n Tò7“v ™¢  7~ Zû^ˆÅ«¡Nú#„¶kð‘Y0(ö…xÞƒl¨xÕ‡‚s`—Ù ÛL)ΦwÀšÝЉM8žÔ£XI‡.À®‹©Šíçè°¤ `Á‡žF|Ó4¨5dð “QD"«GÀàñq‰aëcìežÃv7OÄ¿¶ý”zÇ/8&à¹3‘XiéÒܰ!è­Ùí8‘Ü SV £EØ*|¼Ó?Wý±;û„.ÀNÏdåG*,cJ`L6= šd‚l›C©Ð ¤|Hƒà²AœK`½5 Ë 9xnWœ×¢iù ĭ߆5æ.øÔÚ V¤Ì“šq4FŒ‘eØÀÓnuK*ù›ÍãÍÆ/ößOÅ$@ß&‡(XÅ–áHz¡U#ªX¢— dõ ð 2c3qÄŸó3Øank;_ôaã@x)öåÝÜáÉo8zyÕ!û=Ï-_ñÌ e»kb‹æôìäBO#¨|i¿î‡Oq.õÁ»P‹|<È.v>G ‡lÒTÉQ‹p8\po·OzÇfgVìj3ocRáÛ?÷øFùèTHï&G:ö_æ}·Ë›ó= ?¡jéÏî<\sdpâvá,§'ê`L+ýò@`Žj§{|êS·So˜ý…˜¾ð¿žuþ´ÅlËʃïî45ÛæÊœÒÓ8—#'†m:CZù“ƒÁy#;Ý 6Ù†º¾²Ö`#1üÍÿcøÌ³!y½üC†áEó».²+7Xø¬Ü}Ò€¸ì—0üÉÓ±žÆjC‡$Ð3ç—Ô?±÷ÑDbÕä IEND®B`‚PKb˜|7§=ÄáüToolbar_Stats.pngüü‰PNG  IHDR szzô pHYs  ÒÝ~ü®IDATX…½–[OSA…·úêOðúÄ“Ï>Hˆ•zÕ&RIå"5%Íj ÚÒ ´\ÚrgÍÌ>3m­MÖƒÇsf}{í=»=yDòøo‚Ÿ-¸¾¾¾suRÿpuuÕUýÌï^^^úº¸¸P:??÷ ` õ b³a«ÕRj6›¢Ñhˆ³3­P&†zô2·a ³ÓÓ3qrr*ŽOD½~,jµz8Àèè«;W(ÇÆýrÓè–þŽwð]£Ñ4U£âº¨Ò}_•JE”Ë•p5›­Œ âBàÞáØ7¢><< ‹»"Ÿ/„ð tBt&aèêªß¨æûûUß<+ÏÞÞÞ[[¹»™"Ï(xÎIëìPT•¨¤´B+~Ü 7À¬<;ΈµµõpôóåÄ-¨ÞöŠªè1l…BQTä™PTÊó~‹TÊ À]Ò”s²"{ìY`ˆ6ÀœÔ¿ú¼(ÀX*"µºš‰Ä¯þfIJŠiš`4€ý<'ÏŒ€¾fÓ å)/–iY|–‘Öj5u­ L8§Äí::ªÉo¨ø‰†Õ¤g³b}ýšþ¨X\\ñøB8ÊRVÌÓ¼àgy¤•l¿‹C2)¢q©§¡?ñØ|8@µz †È“‘¢ÿïLO!eÄßIZY ÃFôÉ7á!I 3 òÈëýÿwl€@¯až’úFÎ ÙÆfœ‡™ÂµFk; •â áE àkQb…bªÀ’Ô››[bccs`s´  1—JeuÿÑ`…ærÛÊPÌHEH ™j›Y60.RÑ<Ô|F§èC0ªÇæø#r¨¸ÒL&««Ÿ”y -áÎãÚu3GAæ“:IáÎÇ€@¯qÀ©gÕûKÚ\/6GÕ¡æªG¿9~ðWk¿¼çdÁ?kÔˆšeÅæcF#·`Ó¸c>m¤ls®ú…16iº«ñÙ1§j5æÀœŸ·÷À .„]µmþVŒ;‘;æÿ àB¸ÆPD¸‘;æ·p!È2ŽøŽq·_ÃÛØ7^çßÿÖCýÁ”ŽØwIEND®B`‚PK1˜|7÷'ƒ©†Toolbar_Transfers.png~ú‰PNG  IHDR szzô pHYszzîØ• 3IDATX…Å—}LSWÆßã6™Æ,—¹lɶÑÄD¶,ÃlK–þ0šŒÌ˜mš˜‘mn~ —ldAgçGtÆM ”ùU¾)Œ*HÕ)›"0¤´—^J¡ííÇ}vÎ-h¡u‘úÇ“›6÷œçwÞ÷¼ï9—ГÔ_pš¿09º>7=[~¼Ëš`îüë-3…ñÌ;Ó†z^Dûùùð‹i‘…h_ßrÝe&šŒ*Ü0-ѱÿ£# ÝnŠ“„$8{ gÊ ÿš–À!f.Œ @+È+¬K–Ä9焦JÂPgj[Ä"൭Ü}„a+¡¹šp–E¡»å=GD|Â.$ÎóºER"ÀYZNÇzÑ·OÃß©\ì–løƒzpˆ„GR&‰8@·±c^ÝÄTnËš*·íYH#à)àkŸAoëGUüëZòTäMjÑäÆZêEÝÁ^êÀ&2àÔ¶ŽPsY0$yÄÅf·¨ÐTE8WA¸ÞøšÎÒ¥¶F_Jí"à8uLíR †à‘ʦ~ì§N¤S¾£RdÄV£³v0%tõÝikݽ/ç?8 ‹ÂåºØÚÖì¼ó¯m³Qùj.‡UCJJ‚A¸9ÿ½›ZñÕ2ó¬'=Nn¹Åì3ÀŠY^Ûånqšb>>\ e„ÞkËÙëí‹nfÊ9%1@}BÉU¹ S ( <×üùÆ·”ÏÂ^ÊJ>׈ËG{2y_×|ö$zÄ…Šy8^ ­çÀѽ5Á/9ëß—í¹#\# |ol'¶P962ÓÍT¦(•EàHò8íž•!U౦ Òˆù¨‚S0ªÆJ†ooø˜†O¹EÏÉ8Áu\ígæ¶êûæ\›ž*ƒá««íll|€[H´¸ €ÐÖ¸ÀÂÇ8úÜYÆ8Ù¯ Wûð=U0ÓÒ{æ<ÛcküÝg÷‡ô¯uO–GŒõ›O”‚Q€–º¹~wÏÊD¦Ï`yžÿœe-6"·uY®Û6cÌê¥~‚çáBm(DSen]|»®Šxá¤,ðr<¡ °‰C¨Ëp£ü® elóÅÙƒÍå»ü©b͇Pš05ÕÜ8c t4ÇA¶ï^9pÅ›Xÿ¡Œ£àk*¡wÏ¡¿Û‘0À6íWçHâ¬{«– æ«*GáÐ/-“þáTa \¼)™jfÂÖú +'{ì…T_…~úý(ŒXÏʰ^s“×þ+cœ7îÆHÖï;¬QÌ@ Ý.RÌùS·›õ+!›©8+¾1ëK ‚Òc: ×Ö¼éÅhIl bh^>‰Ë¹=¬áé1>«&Åw‡Ýxì*tµ µ„ƒÛ™šó eï €û`Ì lÆ+u/À+d¤¾¤æÕ²Y?mu1²’šÌÌpiÈi(÷¯À@¡®H¥L>‘q8ú…dZº•ª’ç¡ô„Q€ }v5ÒÍUÇW¦+ýž˜ôAæÁÚ„#{Dñl@rø5Æ×á=ÀKoç«u^šGºü_ý“î“rƒ¾a»¿pmKØ‹Ìã #µi]É%óüì€ò³ü°9ª ] mx'LÃò@œéKþ$™ ðClient_CommentOnly.pngPK {7°½W½ g Client_Connecting.pngPK+§47Åc_°or \ Client_CreditsGrey.pngPKKŸ47ì6áÇ\^ ÿClient_CreditsYellow.pngPK"~7À†./* ‘Client_eDonkeyHybrid.pngPKø£ 7ëP…ÇOJ öClient_eMule.pngPK…›47½ç†ÓÝ sClient_Encrypted.pngPKjª7,.k´¯ª xClient_ExcellentRatingOnFile.pngPK©7¶Sµ•JN eClient_ExtendedProtocol.pngPKÁ“7ó•=!ÔÏ èClient_FairRatingOnFile.pngPKaTp7ôjto õClient_Fastweb.pngPKò±7ÑÎ>• ™!Client_Friend.pngPK"“7&Êóû á$Client_GoodRatingOnFile.pngPK“7¹Ñw›ÖÑ (Client_InvalidRatingOnFile.pngPKò¶7v“êí­ª ,,Client_lphant.pngPK’¤¥6é€lÜþù .Client_mlDonkey.pngPKã«&7‚ÞaE–‘ 72Client_OnQueue.pngPK\®7ƒV| ý5Client_PoorRatingOnFile.pngPK̪7™[štv P:Client_SecIdent.pngPKF¡¥6†’Eþ4/ õ;Client_Shareaza.pngPKôi7žÉ½!oj Z?Client_StatusUnknown.pngPK9zp7:N¼=8 ÿBClient_Transfer.pngPK77[Ö{ÑYT mFClient_Unknown.pngPKHi7@~ñ `[ öIClient_Upload.pngPK{u27áïî94 …MClient_xMule.pngPKâjp7"¼þ(© ¤  ìOToolbar_About.pngPKË©&7XàÎíid ÄZToolbar_Blink.pngPKO˜|7ÿ€Óä@; \aToolbar_Connect.pngPKT˜|7{¼aÏþù ÍgToolbar_Connecting.pngPKZ˜|7go˜• ÿlToolbar_Disconnect.pngPKC˜|7-ZÌ   ÈsToolbar_Import.pngPKmsU7‹,Ÿ¨ £  ~Toolbar_Irc.pngPK|`p7Í¥Pâ’  çˆToolbar_Messages.pngPK;žo7újƒ¸   «“Toolbar_Network.pngPKTap7Y)´› –  ïžToolbar_Prefs.pngPKH˜|7t-Ç;øó ¹ªToolbar_Search.pngPKh˜|7%´òB¤ Ÿ  á°Toolbar_Shared.pngPKb˜|7§=Äáü µ¼Toolbar_Stats.pngPK1˜|7÷'ƒ©† åÀToolbar_Transfers.pngPK**ò žÆamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/skins/tango.zip0000644000175000017500000013544010765336057021325 0ustar l3onl3onPK °Uˆ7yç__Toolbar_Transfers.pngUT »gZG ”ÂGUxèè‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIME×  -aX/LßIDATXÃíVklUþî™ÝÙÒÚn[ú°–E©”å!¶PÅ¢„ƒQbðA%ÆØ (&Æ…+($hŒL4TŠ D“¶P¬ (eÛ-t·…ÒÇìn·»3sç^°+ëÒ–!þñ$'Ù{wÎ=ßœó}g.ð¿ýÇFâs^‘Žy±5•I„3¡uÀ%ÏPü\[Éæ €¿à–XïÊ?»üײ¤ÀL% `Ü„Å7`q‹›`Ü„aEÂU!ÓÔQýSUWoû†+®”®’WM¼iƺÅóžqñíC˜i‚Aç:ïã=ºGX€ƒ€C€ ®Ò^æZÊÔìµt¸××U²M# %n´Õñº¤ÉgÓMÓÌžYxgß¹»7"üþΈ[ãT×$…h²B4*¿M±ûË\K´†ÆúΦÓÕµ•Ö[#å€<Ðf®Çz¥{©©iEE¥Ò÷-›8±qK–© œÂ!Àge/¶<žÖØt¸%¬Yk®„„Ò@›'N@Œ™Ã÷7ûNNÊgäfæû»Ìf¿¬PM¶QMRˆ65kÒXïžý;Ú,“­­ß ãê«@‚Î-؇<@"º°„ýZ©À> دµ À Cç}èÑ}ˆ°À…(¨4e®¥8P³»¿¥Ã½®®’½}5Tp£išgÞ)Ÿ ¹~tFÜàT‡¤È • lŠe®%hh¬4nÜ^[i½8RÐAT°¢öÄÞú£§™E¹¥è2< 6E¥Q—`S%”¸ÃÓÖ›kÖ²X|AÉÊ-%+·ü[|Ýì;ùxÎè¼ÔÜÌ|Òe6CV(d…¤LÍZ€ÆÄžý;ÎY&+­ßŒÐ…äåjFñ˲#sòu™7žïñúmÄ€šw¤¦9o×OÛüvˉŒRÈ6ÅNQ˜Y‡•Ž{¶¤»êÞCO4y1UR6.ZxÒ]ó&Q%ecAIEñ€_6 ìÞow}ÊQ&âúQ.¸}¾ø¦*¤æC5ïè'£É“ì¼m~¹zÞo¡KcÈŸú¤ `gô¿‘€š÷Ì_û¾eÛª?ï/HºIe¨úê³P8ÜÿêÁwÙ¾¸G?͘ðTî—JŽ5÷ÁÝÚ…ì …\çZ”`ëˆ8p‰2j…/£8‚Žóí·6µþÁ|g|Ûj׳J‘‹}ŸR±|É,ûÏ¿÷A7!Ú=õ¸eÆ ©£ãìØÔ¬Âù S-º÷h5>ïï h °Õ–…ö‹}OþúÙåËMmºˆ"áŒàit€é3ç*Þ–#÷¤çÍø®Ç{¨sÈA4‹ööø}¬Î›£#§ÂÐM°Îák=¦k8²\sa !¼ ´|’»nSß°9pû4còó9s§Œ"­l6»BÐd°X?¨l•èò5`\žJRòçgtëU©@AIE¹š9mã›/-v8T‹]ƒÛ!r\s !B æØU]ÕoôyWºë6}œ€D+s’ðû>nö ?Jf]ŒVaüÁ¡v®Ç‹¯Ö]÷þœxtNƒŒ1¥Ùiy³W<]þœìi7Åés†0 ˆ` á§ˆIE7‹ƒ?~dèÁ¶ÞcÛÚð˜Kу¤„dÒ.ÇÜžœ”9öö7îy°â†´dÙéí´œ’$; ¡éž3N!¸“›A'WòÉ9Ó3ú»ÿœMÙøXôÅ…”ðf•Ÿ&üL~ñ’×GO©˜ùèÝ™éÇ=Fš ÔI‰”v¶—;õ`›“J¶T*ÙÒÃÁ³é“‹nrö„S²¨ëõÕï¹ðA‡ qó@ ìÒ`­3í‰ÇRn¸cÍÚU«•€YÝ~+FB!K±[H Å®êªpÄïYÝRÿá',’0–åˑƑp'¡äÖX°€¤XöAH\W‡"aât”.§‚AÔ)ðá+êÚd‰ñbñÉŰî„#¼G`ØöµÅóI–X[+IEND®B`‚PK Ë\7=J‹€€Toolbar_Stats.pngUT  ì¶F ”ÂGUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME× &w&Îj IDATXõ—Ûo\WÆkŸ3WÏØŽß’4ׯ©BÔ´ÍM"m„úXA‚ÄCUñÀ"¨BâR«ªª@ðШy„@AШ"RÒ 'NꧾƉ3ž{fÎÙ{/Îñ̸¶ÃEaK[gïsÙkíµ¾õíïÀ;ïüü ÂÆqtÄÆ.ç½'éŽÎ8™;ç7Üëž'ÏݦùG#оõÆß¸ .\8fùó™Ïž) †!£©*ªÚqÜ{VWW¸9qƒ‹ï^¬ÇQó…×_ëZ˜É…ož:uª484D¥ZÁÚø?2 "1éT½bÅ9‹³.;œwöï?À¹/ž+ýúW¿|8:ëž¡R­ð£ŸþŽ·ß½ŒKµÁ ªþÏ1FxùK§ùÚ¹Ózòq?zïsa˜ÁZËÛ/³ì(CeD@Ä$;5B1°Úð ‚*ˆ€*(šî`-ìšÜ÷Šj‚ƒûküì嫟?A6›ÅyŸX—pç<»‡·qxÿp²h×lVèí X\t(‰aRãªI¾}úÀ«Oò﯊z÷ŠÃÔ¤GÄà»"¹qÁºµ}"ô…Áæί,½¦»÷<’̽OX‹ˆé¤²+Åf#z…Ø)±…ØsÊÈH†Ñá,°>éÁzÁ:ˆ=íkòv=¬¯Òv ;ð*DN±^‰"!ìÍ3°-O¾`]²ÛlV‰×Œ§F¬œv汃fä™Y¬3·´Òq +RàÓ€ }}ƒÛóò!ýý”óÂΆ·Þ% LÒàQ­ØS­7Y®7¨TXëÚ)KªiÖêzf±N½á)²”ŠÆž*Ñ[ ”ËïaÇ Úò᭘ꊧ9Z‘¥Y-KÅiþH€ õÉúFÌ£#Ј”V¥‰©Æô÷v æYn,£ ¹ž&w,óôsžØ] [ª15)ÐWöd J&/¨fðΣÞ$4l=Q ÷SPoZ‚ÉÊeƒƒ1†}{²ìÛÕÃÃZ²£Ñá,;G³9X"“Î<×ÃÄd‹CÊKŸë!ŸÍ¦¼”'ízª¯}?ùT„]|ÊÞ}¾ùAò™ FÝQàoãh´,Ïà3c!Ãy®O<äÈÁ2ÇŸŽ9{²‡cO`6bºÝî׳ŠæÑ  ¹€b6“ÔøGÓîÌ´XiÂóÏx¢H³é¹vK9°ÛsîÅ^†ŠüåúÆ'›¨WŸ’’‚÷XïðÖÒ\õin©;«üà­ HˆH€˜cLp`Ô–Ã{ŠÜorûNŽë“MÎëçýk5~{E¹÷ ŸMN?ïÞ+Þ Þææš)mÁ„Qä©ÕƒI Lr½KÕˆƒ;{¸=mYiäøû¸Eu™?^ͲXÉ¢x‡Š âQDA4=CÌ ÃTI71ˆ ch¶ ³÷,#Û=wçOŽ™ù µ•¥jc)!§°SDŒ**ÿoˆH:Ü¿æ]ÎXòÏÙ»G"fï0Aˆó†Êr1£XT ¢šž¤~ýz›‘Ù$õF:ãt{KÏ5¨­†c0aˆ„ÉXŒlp~ÝéúÆ~S Ⱥ#i}OåÕì|HIˆ"AŒ¶ë9‘_ݯ+ën´;[WAhp.F‚ Ë m/¸Ò0LNxçum…¤Þ£Þ¡©XsXUۂŹ8Õ›[‘*ç_y‰×~òœõ[è@(BVWí-É‚0àüË/EÑæ ´Îòõ¯œå•/?s®K‚'’Ú¥ê¥ЮªIæ’J¹5Эa"‰pG,,.¬s,ì–ÑfƒØÆXccÛÇÖbmŒs®ýaÇÄ­ˆBO1E64 Œrù|²©ØÒŠ" …<Æth:f6V÷>‘ж[N[¬s‰Ä^gÜòÉÔ4Õj[7o'žeú“æf¨<¬à¬ãîÔ]êÕ:·'>"Šl—èé*CcL+¶1F Î&e`¥Vg``€ãÇO´w¯ÀÑ£G£^_aee…ÞÞ~Nœ8‰Ó&)!Ž"c"@Œ1òÁìì Û¶f2íòѵ:P0ÆAÒM@oKKK\¹ò'Jå2A`(•{güÆ8==EJåµZ•÷.¿GO©‡L&ÛÆÆüˆLýáÔÏ[ë/:u²822J0¤ÿx®Æî=—4;GvQ¯W)•ʈƒ;†©-ã¼£P(Jî©<«µUòÅÆZQÄÜì,Wß¿Úøàú‡ß2d^}õÛ_Ø»oïwEÌAk]øÿú9UUk­›š¸9ñ½K—þð{`^ºÀØ ”€ÜfRí14Ÿr[ ,5ÀÉf|óib~Œ­ÃÉiûköĹλ–ŸIEND®B`‚PK *¿?8x¯A“..Toolbar_Shared.pngUT PR¢G ”ÂGUxèè‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEØ9 VÜž®IDATXÃí—kŒ]U†ŸµöåìsÎ>çÌ¥3sZfhck-½X+xi¨€Ñ‚$(*‰ýA¹HBѨI ¶Á ˆ·ÔD‚¢„ûM J±­dhg†éPJËÌ´t.sfÎuŸ½×Zþ˜ ÓqÀMüã—¼Y;{¯½Þw¿ëû¾ìÿÿqˆ™ôà#ÜhInÕÚc Æ´ÖoCi”Öh¥@£¢ð¦¯]±iËMåcO<¤& ãæDb¢0n~s÷6u¢kÛ'æ“)?Í¡7R …D‰1ÇÄ…-§)-oûÑÖmR”n¸þúŽü»--OŒ’DJ‰”RZX–Ä’–u<¦cãÆ‹®Nê­[7_ÛÑÑaÿG”Ò3Þ8ð:=¯vÑÕ½—½]¯°go'}}½XSÂ0ÐÚÚj}ãÊ«ë?rÎG˜®O¾~Ë֛׿ç-PJÍXºìýXÂBH‰1cÌ¿!?žÃu]>|ö:oõª5m?ùØ£·Ý±å?–¹lÓ¦MáI ˆ&Éþ×öQ ‚™gqÏcÕʵÌ|:`´ Q126LÂKòùK¿ÜþÂ_.ܵû¥OŸ”€(R3¹°|ù“9 %RN%ã´1ôöõ²°e! Tªe’‰$®ëÈ÷¸ÑŒ€ÞÞªAõ_æ$â Ö®9kÆåK—30ØëÆhZÐLEìÚµÓr­ÄÓ'-`¶+V¬šÉþi'„”³¬¥5ƒGÓÞ¾Çqð“)žyö)ÚNk×ûìÿ ð‹“s zÛžž½ó:L$9ëÌu“[ 4u™:”R¤Sòù#£Ã\ö¹/¹?ýù›;î踯ãÚŽ »©¹)gÛvÌ’Ò\}íU<ÏÓZë°±:øeêàj!å†`èÏtÞ¹Ü8uñ4N²Ço ݾŠÌék°mç¸jQJ‘N§I%ÓÄ\?>p?kÏüÚh.¸àÂôO=~ ðM;U×X0pðŸøøú•©Tж?§O 'N.Z*L³ëÕ5ᦚ°bI„„ ?By´Ÿá¢ÿñŸ°ðÜKiZûÌTh­‰{ ÜXŒCoÄv(ÇY¶t¹ýâ‹ûò–-7ß~ãßÝo/hnàè`?Ù–,™L×¶„¿x¹ç¥}Üd=n²Ëñ®‡åÄq’M$²§£keÊCŒv=ÇX×ó,¹äÊñz‰$žG xú™§X¼¤Z-Äql*•2mü¬ÿ»ßß{pÝÐP@×FgÚ¯´PQZyUBETPFX‰m¸žª•‰/z¥á~:y G½v6\´ ÇvØýò.ÚÚÛh;­|nŒæ–‚Z•–æ¬P‘Z`7ÔÕ#Ĥ€é:D†„• ¢ò8Q­‚Ac´@HH A/& QA/“%uêRìDœØÑÂ]÷R=å&öìédåê•45µ€1ĽŽã²s÷Kã:ؾïcY“­UO•@TEiÛ ¶í¡j& Ãv<‰6a»” #ø©,ÙÕŸâ-ž ÔßÇónãÜsΣµõTlÛÁ‹y 4<úP±T*Ý™I5vع\Ç‘O'“i»¸ÉI—ˆ4ÅC=˜Z…êÐ Â÷ð…ô|ÊcGPº†ã72Qé¢kbÉâ%8ŽK©T侇î->2øÂÞW{®»çW÷"{dtt¦tfD˜IHÛÂq}ÜxS-TŽ¡£­" ¬E¥(C)À‰!Ü8Gû©Ž ᯼­^FõØavt÷T{_Ù9âwÝ¿B3gf­?|õÛƒ¸eÃægoËV¬4‡^ÎΗÉf³ûžsþíw ›K,œ8¢íœ˜ð掠V¦»Ç¼B把¦ÆyfÖæ’ÏÅ|aæÁlj 't6ï"bîûæDÌ&7ó‘üå7ÐŒš¨¢EIEND®B`‚PK "Z7@qa¸¸Toolbar_Search.pngUT ç¶F ”ÂGUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME× õÛEIDATXÃÍ–{l[ÕÇ¿çÜGì{mÇvb’´N]HhI!-´ÓQ¦†¦tö4VuÒÔiš4ö¬LHXL «Ä`ðcÚÔMšÖŠ6¥0‘¤¥Ë4é+IS;qâ6رøq¯}}çìµU…6Ùøc?é§{îÑ9:Ÿó{°B‰Åb4‹Q|ABn¶àðáÃ^BÈ7cB¾"‚ Žã8„¿pÎßåœÿùСCÅ/à•W^q›¦ùt0|iÇŽˆD"PU‚ €1Ó4‘Íf166†ÑÑQX–õ|µZ}-‹iÿ3ÀË/¿ᜟêíí]ÕÞÞMÓ ë:,Ë‚ã8 ”B’$¨ª ¯×‹r¹Œ¡¡!ŒW!Ï>ûlâ¿8|øpXQ”Ô Š"²Ù,.¤æË:yirìR%dXv@á–i~CØ“{rךÛïÚq+Š‚O>ù'Ož„mÛ·?÷Üsñ¼þúëuµZ-~ðàÁ0dærøùÛãçÎ%Ë‘æ&ò–_Æ£ºtÐtCË—šÒ™Â­]m¾Ë/~{ÛúƆ†‡‡1<<<_­V[c±Xåfâõ?Õjõ{÷î ‹¢ˆÏ>KãGoŽLÔA¹ÿžõƒ÷Þ ¶5{"—è2,fåJµò¹T)}ñRaêÌXjÓ÷~y2ù»gXÛÕÕ…t:L&“OxéfÂõA§(ʉîînÌÍÍáÕw'Îg4&ÿæÎȆ;¾Ÿ")"¥‚(PAq òšµÞ§ÊÔå‹©L±qb:WxèÞö ªª˜˜˜ØF100`ÞàZ>Û¶ýð–-[ i.ç´Ú?ãÅ[îÚ{xëêõUVJYDA D „ ”0BÀ×4*õ«‚nåÎŽ5çÿ>>_q:ÃÐÚÚ EQ¾~3 \àœ?ÚÜÜŒJ¥‚?NÏ6‡ü³]í AKt9Œsƹe9Ìà55¤F B‰QÔÍ¥Ôn ù/ÿ¶,/IV­ZÎù£Ë°U–e8Žƒ33š·1èɶÝ>Ëq‡1òxÅr¸î0èœñ 㨨–tkN¯Úó)‡‚¾ÌÇñ‚ä8t­$#„0ÆP1˜Wñ¸ô:IlƒÚ`c”Á¡”ØŒs‹ƒ[œÃ>›*ŽàÌ­JY­j©¦iÂívÀê•T9ç !äZz–cHå„ÀCmJaSÎ-p˜ãöÅŒŸšÓRàP)!„€¸\+XØJ>s§AExÜ‚^Ñ 5_6 ’He3©(˜"!5ι‘Hë£'Îef „pp±\ªº|ªlpÎ¥jµ ©•ücaaaSKK în¯ÇDV ]¸T£î€W†" ¦m8…RÍš93YM/èçP(¡”u°æò¥ÕÑŽ ²Ù,lÛZ6çüÝ .lkkÃ_ZxúW#ÈB#ù’9Ë€€ŠPG€;‘¸€YŠEíÎý»·¸LÓÄôô4t]?¶ì,0 £fffnaaÚÃøòæFéôøÌ=Œ ”P .0pJ(A¹› ¢@¢ gD87:óµ}ÛÞFŸŒL&ƒD"1%Ëò_— ‹ÅLÆØO?ùÖvO£›„GN'²«–‡È㍡>ðƒµfÖü#çß]ÓèÚðãǶH ‚¦i¥d2)/»ÀSO=u&•Jí2Msm$Á#;ÛåDjÎ÷Ñ™ÔݺnÊà°¤:Ѳk¶’/Ý:Êv'g²ßß³µµåÅïìæó¨««ƒßïG­VkŽÇã»Ãáð{‰DB_ösÜ××Eñ£7Þ¾mÛ6ŒOçðöàgx,gçË5à¤Ñçrvnn{àÒ¨ù|.— “““8}ú4‚Á 4MñcǦôö÷÷Ÿ_ICÒÈ;ÚÜÜü@gg'ššš ª*$I‚ p¶m£R©@×ud2œ8q>ø ’É$jµÒé48çxçwŠÕjõ‰÷ßÿø ]pUŽ?^¹ï¾ûކ1=99Ù•Ífýårš¦¡T*¡P( “É`rr###>›Ëåft]_ÝÒÒÓ4á÷û‘Ëå I:;;]©TêÉp8œM$¯¨)Åb¢¢(ݾ ànÎùª+ûfcƒårù½¾¾¾Ç\ð‡ŽŽŽÇ¢Ñ(*•ÿô"ét²,CQ|øá‡H¥R¯z½ÞgŽ=ê, `,¹nÏ’{÷ìÙó³uëÖÚ·oLÓ„iš(‹p>ŸŸ~ú)Ξ=ûžaO  ÒS¸R¨Dò*-5—H$Nx½Þéd2Ù³iÓ&A’$B@A}}=z{{qùòåõ¹\NŒÇã#‹n(\9œ.Ó#GŽ¬Ù¼ys›ßï_ëv»›!Šã8¦a¹ùùùÔèèèä&p,n…B¿ß¿¿_UU0ÆÐÑÑY–1;;‹^xáR+]t¸°èæ"©»»ÛÛÒÒÒêõz×{<ž;=ÏÎúúú½>Ÿo—ªª[UU]g†? yÔ¨;uêÔ¿¦¦¦ö¾õÖ[s¹"‘DQ„(Š(‹` ä:“Óë–S·Û-vvvºÂá°»®®NÊf³ÎÔÔ”ÇÍ+OïUu®~o»í6_[[Û¯{zzîïééA>ŸÇo¼\.÷ü|Ð÷y.ø\W\YG$®˜þª^ü^¯°}ûöŠ¢ø$çÜð›h4úZ,cäAHA-uðb€¥@œE@|Eu`‰µd‰9þ9 ÿÿòoMözJ§J^IEND®B`‚PK @Z7§ÿöaaToolbar_Prefs.pngUT Gç¶F ”ÂGUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME× ;;÷c‘îIDATXÃí—=HaÇïy^’kbi]T‚Öµ‹‹ t*”,(Té`ÑÙ±d*èR§®*X &¢*HG…Xܺ9ˆ C‹8ømâݽê].—ƺø‡ƒð?ž_žç}Ÿ\àAºg ûÃìì¬üßÁ…ê6z{{¹¸¸¸óÀ™L†ååerﯱX¬øÔÑÑñæ.‚i»»»«¦i>œœü•—ÃÃõµµ­çççÏu]?©4Àñññ3à§<`jjê"‹­¥Óé~¿¿®Ò†aœH)ß»=Õ;ɲ¬o©TêE[[§§§œœd …ƒW*´N×u¶··CŠ¢|- P]]ýýè舕•ÚÛÛéììÄçó‘N§ÙÜÜdkkëJ€bë4Mcbbâ è!´5==-£Ñ(Éd’ýý}Çojj¢µµõßB‘]*„À²,¤”ììì°··çŒ766ÒÕÕÅÒÒÃÃâd\¥ ¹¹™–––¼€^I)q!‘H„H$‚”Ò/&µä!d2™¿”¦i444ä@¹ánP__ïÀxƒÚÜTJéàMµ œCëÒ# U @÷GcNêÝ…g!ߣ:ÀþðÙ#Ýehh¨,ßÕÌt@+`H)WgffºïàetÈç%ŽÇÀ TW ¶ýª} ü¾„( `©€Rëò1þŠyõP3,45¶IEND®B`‚PK ¢…+6Œ!(    Toolbar_Network.pngUT [¦E ”ÂGUxèè‰PNG  IHDR szzôsBIT|dˆ WIDATX…Õ—mŒ\UÇ÷uæÎììì̾L;ÝÝvûÂBmK¡´(XP1y0F¿jLc$j¢ÑHBbbB@„`ü ‰c1by)l_ eÛ.m·ín»»ÙξÌîÎÌÎë½÷Üsü°Ûº@!ýâ“<¹¹É¹÷ÿ;çù?'çÀÿ{lÙr¯õß|¯}”ÁÛ¶}§Õ0ô-Û¾äÆ@íRÊnè®nyà¨ðÄ3A _Ø¿ÿ±ÙÿÀöí÷/Wš|PÚ×Û×t‹Ë.¿8K¶ ¤BéŽe¡)E.3ÁÐÀ‰êÔ™\HÓ´?ºöã¾¾‡'þ+€«¯¾ïn4½ôªËŒ_»ÍZÑ™¢ÿØŒb:š¦±vÕ2:»–!D€®A¹PâÀËû¼Ìà°Bã¾½»yò# 7?üð?Ç2oÛzý•v4ÖÄÉLÓ²¹d]'/½v€Ö–(+Óí¤:’xd¶Ô@×ñ¤«-Ц§G‚£GN?bð…Ûž{î¹àC(¥¢?ùéSOÆ;Znß|å+‘ˆSª å:ÉÖ$!Kãè±>µõ"lScjfžT²‰ö¸M¾Xc÷á1r…õJT"JÒ–AæTæo|ÿ+·| €R* $zhÇ×0CÞrÇuVO:IÃW¼=œCŠÞµ]˜š"îè:(ŚϡáÕºG­áS÷ÇNf‘J!•B)…’ ­©”¢Vw ;a”‚lvŠ×±zeGüœÿÎlÙro\ùñÚ@ŽÍ+cDtAsHg}Úa|ÎCˆ€†ëS®¹TêÞ"€G¥Ú 0_AJµKA”B)I½ÞÀ…0-‹bÅerbNß²åÞæwô÷?9¯iZqBœšªqó'×rùê8 ˜˜ž£\*TjîBÖ]ªuWH’-ÍH)ß!Õ‚_*•* ˆDlªå*gs³²¿?]~·”fßuÛ¾$Pöâ&6a$›'Òì!¤©BH|°yãZJå¦eHÅT¾€” ³?%„‡ÝâÐd)€üL¾Ç„húàìÔÜ5étbÑP èh‰pL)Þ&Üœ`Åò6¤TÂW\¾×4<ŸR©JÙ¯aè ¦B‰„è]gf,pü=m „÷ôÈÑ¡­½×8Ma“7s_°¼-ÆÕ›º91–g×Þ#$â16¬ï!ÖAßp}ë „t­h¥VaBHªu—ÕÝmØÊ'&W•|ú‚†a>üð‰GnºóŠ¡ñår™=B¶É-×®§³#Î?ö19]@3L‚ ÀÏE,lKÅqc&–©#IM£Ö 8=§&ǧ©Õæ3†Q{³X,LLOOŸÝ±cÇÉ|>_\x÷F´Ŭµ£GÿöÌöíëfL+qÓÈÀÁNß²eóŠeæúîkWu°mC73… þû>ò¹Zl-h‰8z"iç[“ÚÇ1&}ߟ©T*™¾¾¾“ƒƒƒE rNìýŽåÐ ´-±X¬õþûï¿¢·wãÉdêbËvRÅbÍ>5œ3öî=ÆÌL ©OˆúœiTwvÚ£ét²˜L&½P(Tö}?¿{÷îÁ;wŽ“Àùãù]L ÄØbž3„t=vœæ˜çÍ×|ßõð Ãh¤Ói¿¥¥Å­×ë…l6;ãºî$PÔR‘s5Ó›!‹i±PÂs$gæ±Pß*PÊ‹ïŒt9]d.×Y˜Õ9±øTï÷ƒ¥ñoŠâUL‰ÎGIEND®B`‚PK åY8î§š‡00Toolbar_Messages.pngUT žÂG ”ÂGUxèè‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEØ çàq°IDATXÃíW=OA}ûœO.Œ J‘" JÁ/ˆÒÐÑQ¦LGå"Uˆ)K‘€&m*~…e Eùt–\D²l!ßîaïmŠœ ¬ïÛ +|Ëõ ã8C!„žu!´ã8Ã<Ø”R¶eY¸¾¾žIÎJ¥‚¼*ÒÇÎ'OϺ°Ñh|ÈÚ¬¶··uÖfÅs=ÜÙÙ±-Ëš)b)¥íºî!€|&Íj8ü×è´þ¤ÖúÎÌ9smµZ}Ьx‘(L  ¦þ7Áï?S(∘/NŒšãE£’= 8jmá2LOË)cBJYªT*!Æã1lÛc,ÜT%IH„Ï®ëîA0·¼¼¬·¶¶x¸¼¼ô/..Òö=<-ï¶ÀuݯWWWeBÈ‹Á` ƒ†lµZß-Ë*‘¸¨’Iò§’ðüü\íîîúRÊ…ããã߾■×ë?‹ä€ÄÒŒMB!„&„œyž·R<)9ã<(Ãz½þ@­Hý§åB–FDBE&F ?u“ª#í4¤,w­§”!ðˆÈ)G /xBPšG\Tˆá”R*¥”Öââb掩”‚çyàœ£T*MŽc0ÆÄý-Сឯ!¸xž÷eÿ£Öšk­Yëëë·kkkó”R4›Íq¯×#”Ò‘Rjo‚C IxJ"N~É\ äå› :¿|9ɯ®®ÎollìU«Õw›››V³Ùô;Ϋv»Ýëv»~ HÔWSh&¸i‘UhZ­V{½´´ôc4=¿¹¹yvrrÒO; €ÛÐüÐn 3çcמž¶ûýþ !ä¬\.#oÇEnÔ†¯ 2¿"d³Zɶ=IEND®B`‚PK ŒYY8|½ã-ÕÕToolbar_Import.pngUT ‡”ÂGÆ”ÂGUxèè‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEØ G™0ŠUIDATXÃå–L•×Ç?çýÁý…Ü‹"zéB@VœJWgeÃe¤k6$]§ ÉȘ‰É$ÖmݳcÍê i¶¦ÆÅµNÚØ™¸­ùƒ ÕÌÒ–®Ø£k¬œ{¹r¹÷¾ï9ûƒËÝåÞÄ¿w’“ó¼ïyÎó|Ï÷yÎ9ü¿7±ÐÄÑ£GüÐ…øŸšRjIPÀU˲ZZZZº„ê^„·oßîóx<s Žßsò… grr2‹Åº„[›››ãé¶Œ…(¥t—Ëŵk×PJ1ÇÂÝÆ¹æ÷û …BlܸÑh…BÝlܳgO$UO»kŒ„˜çd)]Ó4¼^/‘H„²²2***Œ@ Për¹:Óík‹0pONÓ;€ÏçCJ‰Ç㡼¼Ü0M³ñСC/ €Å÷ÒÃá0¹¹¹†Aee%”••™¦i¾ÖÞÞî_J8²à–ôB`Û6—.]bhh)%¶mDZmÛíñxzµŽŽ=‹Øñ4*ÕùBL,  ²råJ&&&˜™™Á4M”RèºNooïGþô+vG:ÍôtZ(&§"<×ù6º&xì‘r6UóæÀ'ôÝ`ßÎZ&§f8ðò[ºÆ¶ÍUäù½¼p²?i»eËÔޟ‹ßïçìÙ³"#Ž·Ódš¼øÅõ˜@VúYG²L-u•¼5x!#ãa&B¢q!.SgKÝjz®²*¸œÖmp™:?ÛõUrsÜÉͤÚÖ´û„àùonÛí GÊ£RòÓŒø#ЬÈñ·ì€7ƧbV·´(—™¨…‚À²Y§+ü>Vø}wE€¦Ñ²ªj}–7°ÐgVL)Î+¥Òžó™˜Í‹§Þ£º4ŸhÜfⳟ»ÏÏÈøAܲ9ñæ?ùÒêû“ ò&€nð­âò¯x”²™½î>TJñ÷¿>‰´£Ie—©³oÇ&¶n®â?ãar|.(026•`Hðéd˜G¿\¾àæ¥XåÉ^‰nO@J)†/ŸäƒîïbÇÃIyY*‡ÇB„îD9?øoFÆfC¡ë%EËyû£áEd0`[¸ÜyX3){p“Ð ~/¬ øù ïŸn >36oáÈø¿䩆µÜœcËÙ]­+/¤ïŸ,xtSï—ä1)e kº²êïe¹¼þ¯]|Õˆx—SYó$žì7¸Ø÷8ûŸøKÒÐ÷ë×$åõE!øMkµëV‹ÅÈ øxþÇ‹¾5Æ,u|º5T•í-$òé>ŠŠwÅ¥M ùE°¤·ÇOÿ ¬{ôuròª3®mÓ4Ñu!ÝÝÝÔ××#¥Ä²¬Œ÷%ƒxœŸ¿×wòåºo·y³üyXÓˆÅ_9ÂB/ùÁßòàC#¼{ú;Ô=ñ¦+Ó41MsŽj»¯¯/2::ÚbÛöG'Nœè©­­õjJ)lÛFJéÌÀާùóñöѺ^}æ—kÞì^QÔ ¹—1L7BsaÇ>æÖÍw¹ØßCMý1r÷¡i³w˜”ròÔ©S£¡Pè_Ñhô¥ééé3mmm±ŽŽŽâžžžë@ÀjllÌ5 #£É¨ˆŽ=KÐ08 4ÖJIPÚänûÑq1|åo¼¾‹Ú-]ò×`Û6·oߎ÷öö¾sçΨeYOY–5ÞÚÚ:“îàðáÃÝ%%%—«««7øý~:::Ø»w¯X´$KRki°ßé ‹Â盿¾•ááa®\¹2¡”z!ÿÁårìڵ˾[asäÈ‘ضý“ššqîܹªÝ»w‹EŸã¹öaÿéAiñ ËÊæÌ™3·¤”mRÊã†aŒ577G—ZýêºþJSSÓ;;;¡iÚ3K©–µWðúÎÇȲ7àÝ¿à²e@“O ;ŸÀÜwb.;¡ëMtwÂVVbóšS´9«KЇ®Îÿ—Se§Pª”Q&ÆTYÎÉÂiçi5‡ézNæ9rp.iÜ% é;‹ÎçšLÌ«t[ÆÈSe‘0 ;W)Æì¤‡€´µJwªGâ*v”tbz¥u.sy©!¦nÚ1iÍ£ÙNb§¬w̧„ÔI<±È]¢MnR,ñ‹%d¿Hcp±ÓÔù/*–½ùG£HIEND®B`‚PK ö¾‡7¹Z׎ÞÞToolbar_Disconnect.pngUT oÏYG ”ÂGUxèè‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIME× 7+¿ØÕ9^IDATXí—]l×Çwf¼_³k{½Æ¬mÙ'0¢R¡µ/•ZRˆòö™mhŠú¡FíCÕ—V*JU¨Xr„¢TªÔ‚[¥!@­B!)¸ØÔXÐVvk¯1ëÙÙÙ™¹}Hf5ëݵ©Ä‘®VstϹÿû?_wkäìÙ³ßBü2‰D4MãiI>Ÿ×<ÏûHq.“É ûzÜ4444ÝÖÖVÜ–N§yÚrïÞ½•ñññ»ù|~S&“é¯044t,‘H?xðà6Ïó( X–õJQ³ê;(Rʚߊ¢Ç1MÓ½uëÖõl6;|ôèÑw‚¿¾{÷îîR©„išxž‡!áp˜X,†¢(O@J‰ã8˜¦‰ã8eýêê*‰DBÙ¼yósÙlöðޏ՗ÚÛÛuMÓʇ+ŠB"‘ ™L¢iZÐzâÛ…Ãa’É$¡P¨l'„À4M±sçÎMRÊW”òb(Â4MEAQ„躎ã8UÔn$>‘H¤Â€ªª!t€`‚ !xUà3â³ô¿@ÕfP½³m›ååeb±º®×MÔZ¡« À— ]®ë–ð¬Ù`BùúÏè‡b±H,£T*¡ë:©TªfÇ &bUxål(.?½( ~øî÷×>’‚“UiàÅî×ùÚ3ß%¢é„#a¢Ñ(ËËËäóùŠ›?1Bð£t{ïñ}Û¿L(ÔÔ»Û.ñéä_Єy¹ÿ{Dc’Éffff¸{÷.}}}UV¥R‰†††uÊPðíçŸ{!4nŽ€¹ñxÝóìK\þë{ÜzUQàÎq>þø:û÷ï/‡Çdªª–Kp +@‘ÍñhrÃ{¢{èŒl'MbÚ+ŸOI­[·²cÇLÓäÔ©Ó\½z•B¡€ã8¨ªJkkk…ŸP(Äää¤ç8Î'JHj.Åú =±çùJÛ±½<.E4%D*•bS[étšC‡^f``€¥¥%ÞÿÏ\¹rMÓH¥Reúý·¥ªªLOO/ !~ÿDeØÞÆáΟsqþ,Úÿ¦7öâñxyO*•BáF£QÆÆÆ”K—.‹±±;;ö†788¨8ŽÃüü¼Ï?zô(—ÉdNVhn،환î-¡¾Ùs†±å?rßø¨Øðð°-¥TýØZ–¥:N©üŠZXXàäÉ·x±ð„a)å§À»™LætÍ>Ð~–_åÃù4(auüŒÕR–ß«b&“ÉtEšé*.•ËFÆãñD®µµµK×õ7WVV?øàâ[.œÿI=†+Zñ”1JDMð®Ó¼–~‹îè~7{œU'[Ëv±çe ˜ð—aŸ455Mézâ¶ʯ„÷€G޼Ú^€í•HYq9û6M ôžȕ…S,—þ[a Áv àmûºfþ*Öèèh xÜÎSÀ¾#G^Uk KF!WVÌ[SœÿϹ”ý57s¿­20 9„Â’ßik99ïJ)V@^þ.%&®Ýˆ$gþökoîÛ~8ì„«Î<ƒM‡ª:á͉QÉ€?}ËvëQ;2òëðá#ÿKipj’³óÿŒ\˜?÷Fƒn\o”>îüÈI§ÓŽ\.žçQ^^†K—¾Åìì,4M‡ªªè켎åå$†‡‡qíÚ5Æ ˆþóçÿ†¡$ š¦AQG!€BìzU˜¦¹öît:Áóhš†Hd H§ÓÐu.üŸ~z'Nœ@i©Ç †aŠZñFí›Ýˆ‡Ã‘¤”Š+-5}ûöÂ0 tt|‡⫯Σªª†¡c~^Æ—_žÁ?Ç?ü ­­­`KKKp8E1™¯‚õšÙP„@@Îï Ùlªª¢­í¼^/¾ùæ/p»=PUš¦C’$œ:õ[<>Žªª*˜&Ng ir¹êêêä62ú¶Å !ƒS²,C’$LLL`qñ5¾ûî[|öÙ¯¡iÚ[\]ª ¸yó&, ‰¶mÛ6õN"—ËÉår ›ÍY–17÷ªZ¼hOÏ]ŒŒŒ@×5hš]×aµÚF1;; J)8ŽKÔÖÖFÞ¹BÐÖÖöhjj .— ÷ïßÇììr9ªªAUUüøã"‘1hšÓJJ$Èò®_ï†ÝnG<GKKË£¥¥¥waÞª««#»vír>yò¤©²²wîÜA]]öìÙ‡ÃÏ?ÿÍj¦Èd²øþû˜œœ„ÝnÇââ"‚ÁàÐÝ»w#“““8|øð[ÑO „ ¹¹¹OÓ4 4¹ÝnȲŒK—.eYH’Ó4±¸¸Ã0Àó<¬V+æççÑÒÒ2ÔÜÜÜ·{÷nŒŽŽâôéÓhllD8†(ŠoÈ—!¤èÅ0 ¶oßÞçõzåîîî0¥TÇ!“Él6²Ù,–——Á0LâèÑ£ÊÊÊ#ù¹ý~?|>ž>}Š‹/‚RŠÚÚÚ•3@>¨­­í  \iiiÑÞÍóŸõõõl&“©`þËÛ–Yàù±fš¦F_Äãñ˜®ë5Ñh4óàÁƒ«£££7m6»f±XÄÊJ—QVVšeðþÍ Ðâñø|*•šž™™zñâŤa¹ÅÅø?)eb«b'øß[¡fÀ ”êŸ|òËÊ@àÿg[ûáýû?$ð/S¦ÀbBËkIEND®B`‚PK 2¿‡7«šmToolbar_Connect.pngUT ßÏYG ”ÂGUxèè‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIME× 9#/€p…œIDATXýWMLGþfvöÇÆkã°C9Ð8Nø -ý4QÕæŠC›KUåT…*©*q©Ôzê­R¥Üƒ’¨Ü#EÊ¡A¢m!$JBP‹R]À‡ØñÚkïÎô»Zÿ‰Bû¤wØÑÛ·ßûÞ›of ªìÚµk_B~Ô4McŒá ,ŸÏ3Îù‡‡‡o8ëÄ4::ºØÒÒR>yòd<â -‘HdçççÿÊçóÍÃÃÃG+ŒŽŽ^Òu}dpp0Î9G¡P€išÛ(IΚg¯ !ê>SJ`†=;;;•N§o\¼xñ¦—ã¡ÞÞÞ¶r¹ Ã0À9!„¨ª ¿ßJéKBÀ²,†˲Üõ\.]×é‘#GŽ¥ÓéÓnROUF"‘ƘûqJ)t]G8cÌ´—9頻Šp8 EQÜ÷!0 ƒtuu5 !>êA^T†a€R J)!hhh€eY5Ôîgš¦UäI’@io d/Å„Ä.pqXõæ¯Pì:» rݽtÙ¶]C¿a¸páR© bll ~¿¿&—·˜zm¤»¡u\ιë…BsssX^^†iš0MËˢ››C¡P¨ˆåœCQ“Ókl?NÇ._¾ŒÇÃçó¹É„Á‰'pýúõº 8¹«Y¨;j'çÜY__‡ªªÎ$»lÛÆúúzE¬WˆvÛ¾l¿¡©f@Qhšæê‚ó˲ (JM…œsH’´«’²êÅýZÀƒ¢(e¹¥ŽˆU3°—xíÉ@=N•¡ Rày–ÖeÀ{8âôÒ»À;ŽË² Yfx»[¼ÕµÝ Yfe¹&Þ;„õfíÖ{ïôÚùóç±°°‰1¼÷þ6þwÞå°, ±X¬î ¼òÖKàØÀÀvŸ™™Áêê*úûûqèС x)õØï€ÍÍMÌ?šV^BOÇ›¸uë"‘âñ8Z[[]0û*a5˜j%¬ç¶mã·_ÿàƒ®-´·044„¶¶6LNNbrrҽ쫄ÕlÛÞ÷PšššBÐôw—@¿„Cãâñ8b±‰®^½ŠãÇ£¯¯º®×ÛV!—”RH’˲ölC©T‚ɃXÚêBG$!$”Ë&œWb±¢Ñ(žD>ŸÇÚÚ …úúúÀC6›…¦ihllD±XÄÆÆJ¥'„ÜW¤oß¾ýç™3g¾ÝØØÈ_(bŽänW¡º®(J…‡ÃaȲŒ{÷î¹Õêê*‚Á t]G.÷ét€ŽP(„ÅÅE~åÊ•Ïjþ v®ç_ø‚ò1¥4Ç9gBâÄîÌñ´©"ÇÄÄíîî–ÚÛÛA)Egg'`llÍÍÍ8|¸ wïN?wîÜ7±XÌ—Íf‘L&ñôé ÖÖÖÐÔÔ]בÍfŸmmmý ½À`((0äwü€ç¼Éd‹E*IRg$Q…H¥Rùl6gƒA-¢££C+‹oH¯q×uœ0…f*•zÉdþ¶m»/•J=Ÿžžþ>‘HüäóùMUU[ZZ"v8ܘ{{³”2™Ì²a’Éä•••ÎyþÙ³Ì4¥Ò¢ªªB’¤E‚ÿÞœ¹qе)¥å³g?9zìX¼€ÿÙÜ‚O:Mà_Ð>ëVlŠðŸIEND®B`‚PK ØUˆ76|2  Toolbar_Blink.pngUT hZG ”ÂGUxèè‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIME×  ./l¬L#ŒIDATXÃíWMhUþÎ̼¾—i /ØÄÒ€H)â.;+¸rãJD‹‹®ºt!)ƒ˜†šW³IAƒèÆ… Ä…P²BpѸ±\VZç¥Ø¼;3wî9.æÎOæÍKòšB6½px÷¾¹w¾ïœó{ç'Ü‚ øÀMcŒœ—¹®;p}yyùöD ƒ ØSJÉq›RJ‚ Ø›ÛcŒßét°»»{¬pv»]LEç¤5ðŒÀ3'NÀ;êÄÿ¶¿Bxç8:¸Ì¯¸r2vçs¡\Ÿÿ†oOD ¼s/_ К>,õàïËOn˜ŒG{hMŸG©‘g"b ’à` â$Úö€S€5Zs—!†ý‰S0®‰0ˆ3 Hjû%`F"ë'×@3z N˜L¥/º %œ>Ebö &0Y H4`RHNð©Èó+¥·K$ׂ$€Ñ±D¬6 ¸®«¢(šêv»¥Ò4…ïûp]w¼È³çL|Y4òÜ'ô¨šѧ½^o‰™[333²°°à13¶··ãÍÍÍv^ßWòšVòl=Ì ZÀý¤tóNØëõ>ÛÙÙ9CDsaš0 ±ººmmm}Ýét¦VVV¨ØHXW"dÀ¦ì'NŽí3]ί ³¸¸GQÔ^[[{Çñ{ý~ÿçÑü'•Ô+ SzY–•yG9 ”RBDëÃáðR#8Px™yh½,<ÕÅ8›w0øHôûýG>8ð+¶_º¯ü )`’²,Yg¥:ÁaD6"¹Q­ŸM’ŠØD¨%žè4tŽ`¶ Je‹-·ÒëœõS€½ÏîXUåÆ& ·Ø­–œb«>„€x ªõ3‚DQºû ãͽ^Ý÷ýŒ âòð.ÈŸf_¤ƒ¿AŽ£ò(yv…TVçÆ\ð Á­ß¾>WaKöH¤ÊbÊ=xnþµøÂ›ï·©}÷>ÿH'ŽCЩ`)ŸNµx qö4Z§á©!·AçæOµãøë—D¥1Ä!ðpü0o¼ˆS+—¥ÓgÏ^½øöµ©?¾[‹½Ï/­ÿŽîÞGœ …š®xÖêUP·Æ3²n?¾‹W/øÎ·ÌüüŸqîðïa¥&«-$bkIÍêÿ÷Ö÷øi ø€õZHoÇOr£®õ¥Y…‡·ÿ/{±°0zº·IEND®B`‚PK °47—Òá®®Toolbar_About.pngUT QÑòF ”ÂGUxèè‰PNG  IHDR szzôsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<+IDATX…½•[l\Õ†ÿµ/s÷\ì4v|Á €±iK á2}@j@Q©}¨úPÚD ¨©á¡}(¢<¨} Fˆ·*ªhªJM¡BbJD‚R’Ø4 $vìŒÏÍs93çì½x˜±s<±Iã4=ÒÒÞ:³×ú¿³ÖÚkÀ̸ûàMD¯Æ_à*ž\–¶Ñé\–¶¬5ÆšrY’:ú÷w¿Ø§‚‰ý¹, ý_ˆèÙÁ[Ž®»áq ïŠÑî5Åaæ+vÊe)L‚ænÿþáX­¸±¾àÐ7Õ˜y áê•ÄZ[?î»n›$¡Ð(¼Aßè}ÀŽ+ µ&!äž› ;åýœò{Øpó#a!äs¹,Ñ5Èeéþ`´¿7šº­ú'P*¯~‘ÞoC‡S=¸¦Bª†ÇvÅÜú$„Ð: Æ9…‘[‹ ©_¸f¹,m"R[ƒß…çƒÔ H‚Ô)xÍ ¤†¾øz.Kãÿs€\–6‘¿ýÖnÍflËP*¥“P: ˜×ßöÓ ùz.K7ý7q/{ sYº_H¹‡DàŽë¾ñ´N ß§ÜÚ{"©â2 °¦¶2’FáÌŸ½Óÿz¥ÅÖ=h÷"€ýéÌÊB+ä²ðô|0Úß·~ãöhjh;ÁVá9G dJ'ÛéW €ñÊ0nÆ8P¡q04ŠgÿÊùª:µ¹"[û€7Ón¬ ËR? ñ õD|ý˜H n†aÜs°îY1”NAêäÒ*U¼PqKðÜ"Œ[‚e©!T?êåã˜?ó~­’?j™½ß°åWÓ>· —¥Ût0ñ¾Ñ{Âñõ›Æ;‡Vý3XS‚RqHê|uR%Ú ¨z D§¶ã-À¸¯Ô)Áx •„Òƒ J œŸpç§8¦UÝ–ÎðGÄÌÈe)BBœÞpÓ¶u½#wÁ©N Qùž[†RÑeÂñ¶¸Œ€DÀ¶kê0Þ¬Wç–;eiÃë ¿ÁØ S`î?ÿ,2ÛëýØ*¤ú[ïðx$±a³V*…fý$3¾µ¨=ˆViÄei÷í—:ùÕÝØrǘxëãIûðÓ/ãP'è¢íìo¿ €™yivAø{ÀåGèG çí¿,¥¾»t¼ÂÊÀÅÉxÉ(îé"¬^&‰üµ¾¤öþ±ü%ØE-ú¤6IEND®B`‚PKaUY8÷°g^JREADMEUT ¦ÂG ”ÂGUxèè•UÍRãF¾û)º¸¬Ma±À&Ùqµ˜\©‘Ô²¦•™Â9äò ûbÛ3†…J…è`YR÷×_wݳ½ý¡k° ¹z»…4K·R†ÓähY—Æì>‚÷þ‚t •rY)+ùÀA€ù vG0¿º]_\/æ×W0†»Û³Á`Q*×1á;ÿúÁ` ©:ª¤çWüÓ*­!EhæÁ®#;M¦ \Q Š-È®Ûù²ÿxòÇmˆ͗ìîTUë5dT¯cŽQ(6ô‹$:‰@ÅWc(X"? Ÿ©-êé‹p¥´(dµ1ݶD‹ Ȥ <·DãìÖNwš2©·,q`»9Öhre–@ÖÔØg’Ò+2ƒ¡C„Òûú³mÛ&1`Bv)ZµRB™Ÿ’º¬Åm¤º—£—J»QÌ8+‰Æ$cm¹ÛœÅ Sd®&C_àün‹%Mš<øÄ5*T÷CˆËݵ§ëMn©Î©5P¡iBí=v òD:•ì–3â*ÅÜJ¶TU…¹’õzÒÆx(åc,¼EŽb}Ä®--­¬b:á™d–Ì•ÍdQ`æ!t1Ó ïâp§#8ùzv:_ܲ¤.æ'gWAVóÈ"%k©å b}¬zä¿…¥*¢¤5µ¡÷ÑÝçÁ¸St+O5W,~ û^øð5),bÞYÄžDŸûÞç¾÷1ØùÕõå‹t÷0Ò‡/Pœt²4TumeB:¬Äîl¼sÔÔ˜O®çõ9 ô\§¦z¥,~c*ûuw¶{4M& Å謹û8|¾RZŽJšÐ’$£JÄÇ I1;œME ¶°üþÛ?Äh¯Ûñ²FÆeSñ ¸×ðÿIwºÈt~™RHüFåË ½€½I©’å:1Z”k½B‘jZŠ¥TÕ8vg\G'Eý*±îu¢ª€ß6a?­c„eÓQþdg?íõdŸTmÊúR‡Ke™‚Ü >yªÞ–—ïz*5>˜Mööf{‡²[`à S+Ó”·oÇw –Fñ~ä7\☠gÌ*û— ~Çj{·aJ;Âq¥vÄ» ÍûP9²Ñžá1¬˜Ki •fÕM'e°"«¸ÆRƒl|I6Œç|³´ÊЄíÍ4ÑÂÉÉ8]äñ؇çeYmȵ©ÂxÞ½ŸÑ\°9Kðžì=œß\°÷äcÞl̾1z&òf 3eû ˜÷lÇw‹ß¯¿öGÔóüBËç‚t«4¬F~Y`ji×0Lß}á| ®²¹e©±0x†¦ÅnP §L¦›<œlq«ÁFÉû›¼äµ yã®áôj¹Ä¨/‹6¼<Ý&ýâ¾UÚhðPK £h7g³žaaClient_xMule.pngUT qeG ”ÂGUxèè‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIME×  RÅáIDAT8Ëm“MKcwÆç^c äÆ\B ‘ B R°’8“]¸iwºò#tÓ _Bt§D誷b h!%‹Œ ߯¼h¯’Fâ$×ûï¦3;}¶‡ó;ç<GèS6› O¦i~>´Z-Õ_ßÝÝå¿’E)å‘Öðððàèèèh«Õ²|"òQ)劈«”zÕu]åóùÏ-›Íx_5M4 ƒ^¯÷®V«=%‰ûH$ò _†††:ƒƒƒN·ÛUÙl6ü 0x€ðÓìì,———ÜÜÜü¶³³C£Ñ ÝnS­V©V« 'ëóùþ:>>þ °ÇÆÆ¼¶mS«ÕØÚÚâââ‚z½NµZåèèèµÛí¶À„aÖúú:ýŒ)¥¼ñxœp8ÌÜܧ§§‹EJ¥½^¯=999ašæS¹\vÎÎÎÞ˜8ü022Âóó3‡‡‡Ôëu,Ëbaaá½ã8ÊåòÇR©Ô;99ù* øQDÐ4 ¡P(°²²B:¦X,þ±··÷÷ÝÝÝ+ ™LFþp-"x<D„µµ5ÉårLLL033ƒˆ8®ëºŽã¸©TêçT*5Üxÿiúøø8Íf“ÇÇG’É$¦i’L&ÙÜÜdŸ âñøúòò²ÓPš¦áº.ét¿ßO>Ÿ'•JÐétØÞÞf~~žh4J¥R¡\.wúM|§iÍf“óós”R´Ûm±XŒ¥¥%¦§§\×%—Ë}IA)…ˆp{{K$À²,lÛFD”ßï—h4J(¢X,¢iÚïo~!“ɨ`0@³ÙD×u<¶mÛñxü5‘HøC¡®ëªƒƒƒöÔÔ”¹ººúåÁ0 b±///T*,ËBD²×××¹««+S×õáp8¬E"‘_|>ßðÆt]'`N‡ûû{DäO¯×û½RÊu]—z½þM£ÑpK¥ÒKÿ ÿ™mCƒµ6?IEND®B`‚PK ¥n7dµ‰ÛÛClient_Upload.pngUT ¦®¹F ”ÂGUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× 5 xš!PhIDAT8ËÒÏOAðïLwÛÙ¶€nÁ¸Db ‚q ÞD/Æx1&&ä $›Mã?À“Þž¸yÀ@¢ñd¢Œ`PlB¡H7µ…µ°Ënǵs÷^æûy”8Šª(ª>RªÆ³³ÖÇBM))K¦âÓ³ÿ=@Qµ&*–=½rí¦ÿH}ƒ¸ðõãùƒ‡[Ÿ¥âÓkÿÖÒ=šƒ&Îv÷±dÆ…‘vP{ê60‘¿+=À“PãêÆ:F>/˜˜¨ ‰¤¼îR€Ñ’vr7kwotø^}0amœ¬|‡ÓmmžDbµ¾âЉ]twîàpï­ËÒ—˜Ç˜H‘s²pmsŸ¾¡ý\Ÿx¤aEÕšv ø“ûÂÕûÌu9ÒŒBbNvTðÃ6—ÿa£¦¥—´àA ¹#ýU]ÍKØðz |"ÁÏ ®“| ‚cyÇk)«í®è(EÕúX¸ex Ú#IŒÀÍFÚÁ|| „EJ„pÎñk3‡Éñ±¬mÆu¢¨ú ×ù·JøöžŸ‹PxÎ*^â)B¬¦b0z¯_–m¾¸bÁ²rX_O!›œ%ì@"'0õü±ÍÝÍ¡ù·…5*ªÆ ]¼®­P9–°eJ‰ 9“\”9we×ÎÈ®P#«ZÃë‰÷ª\Ûñ"Ÿv„üC‘þ¶®æ€øz΄׻ó°£€ÈcygÚ;‘Yë®ÛXz9@'Šªõ²pËÃh?È´Còˆ\ð€à;†D>9>¶i›ñèˆÂ¸ÃöAÜâ9‹#þ3züšÇ4‘IEND®B`‚PK VM8);÷÷Client_Unknown.pngUT ½²G ”ÂGUxèè‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ 4àæ 5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPÙ‹o6IDAT8Ë­“?HAÆ»³F6þ×;² vŠ…… ¤ŽT9ÁâHb#’F ©£˜2EÊT–iRØØ])¼B%bµ¨çé·r++wçîÌlªÈy*I‘W½ùæ›÷¾÷Ú"—Ë™ù|ÞàÄÒÒRÇß8÷^ZYY1ã8~×l6¿h­[Ïßllll¶óE+X__7¢(z†á·©©)#“É022B*•Ò•Jåõää¤ÜÛÛûÙzÇlkkkI_§§§&|ß§¿¿ß…ïÛ+¸#°¸¸hX–•r]—z½Îàà BJ¥ŽãtÏÚ¬V`Û¶q}}M†œŸŸS¯×¹¸¸À¶íGM¼­`aaÁØÝÝ}j———8ŽÃÉÉ ]]]ôõõ%WWW(¥~=jâþþ>Ï·µZ Çqèéé¡»»›F£a()¥;44”xž÷ãŽÀòò²‘N§_ ! sssxžG†”ËeÊå2Õj•$IÌññqNOO_Œ=ñ<ïûm ‡‡‡!6çççÙÞÞf``€™™´Öd³Yfgg±m›ããc2™ ÀÇ;4 SkÍÙÙJ)”RÄqÌêê*GGGÔj5´Ö(¥ð}ÿ¾‰étZ˜¦yK’RR(¨V«(¥(‹(¥B<<…­­­@)@³ÙDJÉÎΕJ)%Q‘$ í µÆu]‚ À¶m|ß§··€››:;;±,ëA$Š¢ÏÅbñÿüR­õ§?ùoÔ_3¼[_aIEND®B`‚PK „n7߀ŽRááClient_Transfer.pngUT g®¹F ”ÂGUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× 40l¬nIDAT8Ë•Ò]HSaðÿyÏ9s“Ìp5HfF~BÄ8AAjJDஊۈ *é6ºu·„°«¼±/l–¬ ¶­i W,ékT›ólÎÆ<;ç=çéÂYKTè¹}ÞçÿòüÞWè¾-…ÈB*%ˆÐÈ„[ÔæžÀ–È‚ßíjQ®]¸çDD– "¸e€[Vµ,V5u#À CÇXÐ_Ê–ýtß’ö)ýg{¯m!=C&3`¢Lk¼@‹ùY ""†¾—)ê‰äüëÐ0¿*®OÍüÍí{ÝÎváKa8eK‹ˆ@‡N‘º¢Râã|–7@€TÄâM'Xäýçw'=çó+ª9㛚7Sªl–E™©u­j“CQŸLŒfLÓ¼öñ<[ dBÞñŸÞvˆòˆòvˆc}J¿·WñÖ,¤gPAÄ/  DÄâÑr"9?æ—Xq`j.ùšI’ÛÙb: rdõuD›ƒAvˆPܧQAÌá 0ûxïèäÍÎêP_ëD‰r(‹Øì 6‡ˆ¦†6¸-N4²à ûxñO@%$®kƒ&ï—šë=àB rÍúÍ»wÕãˆëƃK†¡†}<¾1'V+§"Vl§pT`hë8è”ãk޹."úæ­žü”xæwªgØæ§" ÓÑW?ÕÌ µÖuáPmÔï¿h6J[æúÞ;„}¼H&¼àsm:á´:ðlâ©f™÷®.q«“ŠXKû›KéLúLrñƒ‘[ÉÞûøKüoõ I#=CÒÈNg~‘6dö´ZIEND®B`‚PK +UM8ĽE¥OOClient_StatusUnknown.pngUT A»²G ”ÂGUxèè‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ )œYÿÐÏIDAT8Ëm“ÏK#YÇ?ïõë˜ B"‰5Éa½LˆHV'(ŠìÑëþ{i/»/ ù7d{T<&±L"ù ƈ NGÒ½'ŒìÅû~«êU}EµZåGËf³Ÿß€ `å=mgÀ¡eY·?¾ß ²Ù¬ö}>ß©TÊ‹Åäìì,ív›f³é‹Eg4YË²Ü Á;ø"‘H|ÙÙÙ Ôj5*• Ýn€H$B2™$“Ïç_kµÚ¿À/–e¹ê½“ýÅÅÅ/ÛÛÛ\.Çp8$“ÉFy{{ãþþžR©D¹\fww7ptt”ªV«ûÀ_Úh4ú<55õ÷ÞÞÞ§\.G½^'‘HN§é÷ûæç癞žÆ¶mz½›››Ê¶móâââ-Nÿ¾¶¶öõõõU‹E”R\__S*•xxx`yy™`0ÈÍÍ ƒÁ€p8L(ÒjµÚ‹6 ÕJeî÷û ”R†Àp8D)…Ïç£Ùlb†Ô4mC+†aÐjµÐ4 ¥ÔÄçææ0MÏó( 躎®ë¼¼¼‰Dp]wEMö)š¦M\)Åúú:J)®®®x||Äçó!„˜D!°[­±XìØï÷óüüL£Ñ Z­NªëºÎÌÌ ½^!„-³V«å&“I¤”!õzF£¦i¢Ñ(NÇu]÷L‡…BÁ‰Çã,,, ¥DJI À4MVWWÑu¥º®‰D…B\^^:žçJ˲nÇ98>>~Íd2Äb1¤”!&÷.¥D)E8fii‰“““oŽãX–uûý³årùW!DjkkËßn·ét:äóùIÕh4J0äôôôÛÝÝ]ÑuÝìOÅä÷ûÿ4MÓo†‡Ã!xzz¢ÛíºçççÎh4:ÇÅô39kš¶áyÞÊûöx<>ó<ïrþ›1ÜtëPIEND®B`‚PK F¡¥6†’Eþ//Client_Shareaza.pngUT ƒÈgÖwÒ4FøŒ(sAs°YUÐlƒÈ6S;ü­ê, ìŸ4ü­¾_Ÿ3]!ÍœpÆÃ$Ûº?³ÈëX³š½‘‡@ïWkmßpU7¥£(°{:áoÞñ|Êvnª2Ó̹ñÙ„O€ÙN‡Ž$ÂÛ9h½Þý¡ª“Ò‘]ñA„½2&4H wiàu£,u<–—JfJY6g¿êDxWŠé }tŸ.^-·Z86÷0â]4í‘Ú{eÿùüPpþ“o#IEND®B`‚PK̪7™[štvClient_SecIdent.pngUT pÞÍF ”ÂGUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:‡¸°˜„þÑI@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy@…·<]C,N¿¸3‹)QÂõ¼½±‡JÓ‡7—w(êÍ ¾ARñ†gG­‚bÓÜ÷L*¸×æl q’š=EÈ@ËCfæÌónkê7L¾óI¬}·†àC!ɘõBt^íÞµµ)e/óÅ;ÂÍ6]eÕøÝ«rýÿ=õ®é‡Œ‹=z’¡Å¼<¤{òZ—6¶C«ù÷½cûú(Ù¦V؈ó>ë‰ÛEæÖ\“»¸åÊÍ‚29†}§ûùøÜr™Þ½ÿ}Ò„Â2¹øÃ_CZ\×+ÆÞe‘-ןY´æC÷{צO¿·*/—µßzΗñЗ ž®~.뜚PK ’¸T8ôгi®®Client_PoorRatingOnFile.pngUT ô£¼G ”ÂGUxèè‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ$ׯY].IDAT8Ë¥“MKTQÇϹ÷Î ãf(Q[L8X‚Ëb’pÙ*ú"nÚÕ¾OB~†Aa›˜…½€™/“bMiÀtéž{ï9§Å½JŠ›ègqÞ~ÏËÿ9Þ嘉€€ï!Ê€µ` ˜—$` þ±ÇAAá"Ê%àr€KcD’gÌ_¥²G~µÕÞ4°ÔóÓ-`flr°%"àÀ9 Ö"G% H¡ÄúÚA'èïFgïUýq@aöVÙ˜¿ÓM’‹“ƒ5b‹5VG9@@Š%ÖÛQgèÆÍêÔ,fû%¢{ˆòpg΢F®Ò}~Ÿ¯~¿8q®fu:Båù³ÞަƒJ%¨^›Ã®,"ñ/$(C±ICìæSªÍÛ•JðñýÞ4JÈ!À,\¸Õ¬šåù,%¿^ñŠà•¿ˆÝ}Íè܃*° Î塲E=¨Õ°Ÿ—1›O`÷»‡3ðq\¯ß§êÙ†;.#&†4EDc:ïýˆ§²Á™7”éï¬ÅsXB&U¼³•~\¢!‰Ak\au„‹5”+$_¶3YÓìqÀ̧Å7]oâ2.Npq”¹ÎÜÆêÒ8íG/ºÀ iš÷ ëaZi&ûKoñ¦šH¹/Ó:ÖP.ã_iòséi&ó^Ëå£,'ÿÂÆ.¿\ê×Ǫ…áˆ"þöƒ­g+Ý4 “Ƶà§rÈ©£Ü¦uòî©€1ÅÚ¿ ²$~*IEND®B`‚PK L,Ó6ÈÞA¿¿Client_OnQueue.pngUT ÀNwF ”ÂGUxèè‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<ÿè„ç…Ý L û`;ëé<–jtîÇ‹¥|¾ø•b857"j\–噣G^?xöôÛJb#‹{‰$VSϨa´4©ˆE‚8?~©róf|Þ²¬®Ô܈€s>¸Q&®ß9etµ©8º@7*˜Y\Åâ2Ç=o¸mÛé˜øŽÅ^û°µ~WðÎÅsCÞÉwÑSph_Ñh</ÖÖBD„x"‡?V Øß¾C__Ü._ጱþ³gú<‰,àTph_ÍÍ-‚$ ÀÎŒŽŸ8/†p´Íz{Þ­cŒõsYQº÷4©ì^BCW› Umx ÐÛw “ãc`Œ¡«ME2¥#‹rYQº¹cÛí‘«© ¢A7<o >óɧèé;‰Éñ±Z,tã¿\~¿Žm·s°l<^gõ,ˆ¦Y©vð”,[¸K’6tÑ0t£‚RiD„­- C_|†Éñ1ôöªºQßç…ž5à’¤n™æôƒ•”h~6Š™Å4t= M[G¡¯AU"ÂÌbPëë)a™æ4'¢Ñó&Ê‘úò†ÛK:ŠÅí§Jžøé≒YÞ€×._+Ѩ«°6ŸùvdÊÌÅÃo> ý~_ÃrÒ@½_[vÁ„Í\¿ÌkøóßžÛÝ„«—+oi›_j³?ü,€bøÖ­;ï[¶èè}ïM÷f:‹©ÛiäŒü>/ÁšZ¸réFyù¯¥¸b¸ö /|5LàÏ?’÷~ìòFN;öŽkT™Ïç…í29Zr‹®_¹j£”ž ÚÿŒ2Ð*€•ª VbõWä8“}/Y‚Ç@æB'+ÿw£ÿZGâR6ÿxã 5¯xxIEND®B`‚PK ’¤¥6é€lÜùùClient_mlDonkey.pngUT ³Î[?8 ÛaïÏÂz`|—åõŠr}ù,#)qM”9wê¹ß[þâÒ•ðü|[¡!ÓtÔQt ­ó¢UŠ ¨žs@%[Õ¯ Èµ[¡[´,Ëíh5µ ¢(jœ5ÎÀ+'ºûµ¢þ"«‚ :¤„á&}WǾ×BåæÈÁ#NyÜž¥‚²,+P½«†)¬¬¬4ݺI˜8Ó7†)–¹Ì.üÖ•Œ/t/Úc@ýRF‚¹E)JIA©TºjwÖN¶-ãétzKj%ån?|(Ä-ÚFˆ<‚)ìNËOSÁcF«´c´Äš™³#Ã#–d2ÙæÞë~`µZE^¯7â¬qžijj‚¹èÜû×o\w<ZCf‚RRÊÌÄ»‡Rš{šû„Å'R#f&h–æž~Í4÷ß(¥’_óàtyu?ÝÌçù|øvþ¤LúóòhQìIEND®B`‚PK ¢¸T8P&Ù¨¨Client_InvalidRatingOnFile.pngUT ¤¼G ”ÂGUxèè‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØõ³HÔ(IDAT8Ë¥“ÍJ›A†Ÿ™ù›¤_ŒÔd×i¡ê¢´‹T²ö&ÁKö.êMÔu—®\T¬± MÚâÆ‚D%&š|ó×ER5ÖMéYÍ9ïyç±MI©PB*…”)^€wçÞYŒ±8kú†•DA PR!U€ðxºg$ 0œ³×(©PJQn] Ð»® /³Ù’Eà½Çk‡Ø¾’. â1*íÎQ2ŽM//g“OŸ€T´÷¿òñÍÛúE£¡_ fóÆD­1Z_” سæh|v672?ÏÅÆœœt×z8ÌÀëWTß­P^]ýõ<“Éë(Âèùg…=kЉ0Œ,.ÒX[ß7QÉ*‘B4[\~X§°´D" cŸÏΊˆkP* >ˆ?~DL!U×ç fñCYÖçæj“É䈾©(ÜÏçh~Ú¤ñ~•În{zŠó〨úx§ PðÞƒ÷ýÏè"w߉¸ÜÙ!úRAH‰¬sxï°¦§ÈbëSPkÀ f˜b0 (c9hׇö"|‡ªúf~ºÌbfIFÀä]°R30f ØQ:ð³ 6?·ÅZƒb%`°°,Io3ãÓ«+íÍt¬ ‚1ºÍZ]lAÒ“„B¾üüÉ;O–WÂ!Œ"Jà½ÏÎ “C¼n††Š‘ÁQ¡5ŸËe½×/½×d/„?ê"L{`efñJš1xç^…Qwй[¤˜2¼óå›Ñ‰W#Ó‘³j HÊY°°m”5µ` ÿ¾Ÿž˜º£~´UX‚nWWÍ¯ÝØ¸!^~ãy3p2 §a3îÞìóó9÷†bìI1ëß ¾™Øáê¼R§uÓŽ¶„ÿp†ˆ×7¡ÿz¯_,z]šq(õ D>S;IÂÙ’’Øá-»¶'¥¸}­Ç‚àü1ÃGfÍåoߨA´ß’â‚‚"¥ÚîœSÈß.o®< 4·ÿ¥ù ½ÇгlPÐpIEND®B`‚PK ƒ¸T8 -Ý|««Client_FairRatingOnFile.pngUT Õ£¼G ”ÂGUxèè‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ›¯I+IDAT8Ë¥“ËNSQ†¿µOÏé…‹ƒœÁD”ËÀN àÄú¾Cø&Ž_ÀБMLŒ (‹ VG0©ìiKO÷ZN+01þƒì¬õÙ{ý{Km‹3á\È€déÌ£æÁTOÀ<¤]§r. ’E\‘.†â, Á´‰™žÄe‰ ǧ•e` ë–«ÀÂÌÜhE f ³Ò»‚sy$ȳõþç~T §<)F…iÀ‘4¶Ø|½Xk7Ž“™ùÑaõML¨oö—)°½Zß¿~çáÕ¡ðñ bG — r³~yÊ×õӳ׆Uh'Æ¥ç¶Wëå¨0/â_‚Õׇ màãW\LT7—¿—Aq) ;è¥Ûó÷‹í£g˜"9,E$®o®1U~^–R¥3 ûFðñ|ý¾½ƒù_˜%˜hR%“MÆ ³^ –®v’´‰¶6°öÒ5›µQíàr¾»÷gcª'¿¿IØuê˜BÁaf@‚K´ë{UÓ£Óbª…Ýwkµpp Õ&¦-ÌǨÿFN²ýöM X0m§ñ÷Ü%*I+Nö>ïË£¾…ú&¸äóÊF-iÅÉD‰á3ç<  ¹ð)O”¨œï½ð/rü§þÀ~ i#$½RIEND®B`‚PK©7¶Sµ•JNClient_ExtendedProtocol.pngUT 7ÛÍF ”ÂGUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:‡¸0‡ºï£†Y@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy@…›<]C,N¿íßÈÕ Ѻµx[¯Xç¬é®ilò‡Ò7¨¯PÿÈ[’ÿšs–ÞZݳN[,\Bš9ºx=ºï™þZvøñ¹‡&”WEíö^Spêr†q®ö™ÒC ÅIXùZ°NÈelç.ÛôüW­½v_ÝÅóLgÏŽ:ªéT¾[Üb…Åß?)Ó½Â3‹½G¾ÀøÂ’¼óŠÜ¬3¯ö‹}iZQP2/àñ™¬3*ŸŸçÿÈtÿ„ΪšugðtõsYç”ÐPK î¸T88чÂòò Client_ExcellentRatingOnFile.pngUT Ÿ¤¼G ”ÂGUxèè‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØJ'£rIDAT8Ë¥“KlÌQÆ÷Üÿ¶ ð¤÷5À’l>ýð·Zëóžáå}o{Ç.Ó+¶þ.ü†«CIEND®B`‚PKˆ7·ä¢acClient_Encrypted.pngUT «ëYG ”ÂGUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORŒÅAîN ëÎɼrØ’¼Ý]þƒà‚½Ë'E8 <"‹¸…A˜‘aÖ   {‰§¯+ûu nçgj«€B=]C,N¿hèÇ(жÿîž»K¯G¬ØxQ¸€ÛÙÙ†‡÷«Ú¡iÚ+Ø ÌZš¸s3^4ðNн¶CßXÌE·voÝÛ”}gìëroñôV‹e”HžöèNìòËsVx­í¨×þqmÙ”¿­ç×1®˜»{ŸÅþ“:¶¥·Ÿ-^—_Ã’h¶e²ŠSƒÍüÉÏ‹¤<›s2Ô÷KU™… ^<ëýQ8qó•íŸB«ÍB×s´¯JÙ~Óíüýì…Süm^eUPUÔÖ±@©ƒãjõKõŽ$ãÚŠ=ùlŠL ŠöDM5èêïýÿ§ÒŽñÕŒÂÐÅr €ÞeðtõsYç”ÐPK +B36ÿñù@ôôClient_eMule.pngUT ‚p°E ”ÂGUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME×PöÀ<IDAT8Ë…‘KHTaÇßwï˜£ÎØd*Vd> Ëhу "£E­¢—¥QAÙ ‚jÑ2¸*ÈEQ‹¢pÑ" zYÙB-1Ÿ•ïÌ\çÎý¾95â‡ÿÿ9BkM°Â¨šLCÞ¹ê|Í]·?¸?ý˜«ÔCJ¿†µ®«šÎ4Ojþ‘ÐúϬvŸ¡MÃЮ"¬”{Èôø—)­-!„£µ.?~{| $ãÖ”(-£ëË÷¤¦ú3nÆœP²!åA)DU’G+ŒÂ`…‘7£ƒ¸ _ ;²$¿ØÛÞö2¦Ý˜4¤)…'YgäF'GEÄúÙª‡jÿâ xe9Ùìp„¡¡z{ºHõz+dy¦×õ2Q®¼¥«tq¶ ] `Zø ‹¢‚û{ì«ì@jÁQòǧ/~}ÁÛvÒ´I¨²¶rŒF–øîìéøµ™Y"uM¶‡‚æ­l鹞}Çøkìd`ÿè#1±v9¿p%™~s ýH|KQÌmÚÎï û¦ß¤0>ßy×6gåßKsëÜcpÀÒ×d~˲ Bß¼tª —·.ÙÕÞ7<%µ¥–cé‘þ{ǃ##b¤©¿gï©­™ÿâd¿d>SIEND®B`‚PKKŸ47ì6áÇ\^Client_CreditsYellow.pngUT ½´òF ”ÂGUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ •¨‹Èõh l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< ÂCž.Ž!§ßN8˜åd(àz^åXRxG”×ö —R_úÿþ2ñ䡹 ¦c;õxêOŽ9íž°‡ÿƒNúŽô6nÙa{+½ëÆßûôËzzÑåþ/íÅú { ˜Vé5½ø'ÙÁï×}§®¼¨•|÷Ã'¬—½%ÎzËgÚÁ³QOÖ;\fÙ#Ϊ”ÆîrQXàdGÖÄ8æ? ¯ã–özw=\õ»½?¾Ÿ|Ÿçy_%"4"ànA×#ÚŽmû~º¨t-§¤4:°/ž}áa©9Ó½ºkD:;@Ìç[Éì%ßíBq,q$×Àý¼’þícÚJ§æÜUšØðf6ÏkróÓ.X‰C¹ÐÂUZ¢E.‰­ô¬mDêÜÓ·¶=ëõÅ›rŠ MûÈ2ˆ8¾@ÅàV|¨×¹nùÎþLà‡ú§*AU‚L¡TÁµ®Î€úG‚*4D õÀÔ¦1Ë<­ÌÖm†ò_¨hjf² ˆÐÄ€/ d·ÔÉÙ‡ð Àñjä¹–ÈIEND®B`‚PK ¹U8"ÚbhhClient_BadGuy.pngUT Lö½G ”ÂGUxèè‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ özÙÎèIDAT8Ë•“ÁJa…¿;™Î4‰3ƒ™JíFCÄ †AJš0‚Hcƒtº"]tç0ñ \teÀBÀEIV­¯P>€P\ …\Ô@I17ÖÈ´öÀ½‹Ëá;gs……ðÈ€·xÝ€/ã|zÀ„£yxpG@uœO‹H÷R°ZXXО¤RZ VCðî 0a/ zbw—L³Itöî¡8Ål¹,z>žÏ“-—e Š!ù—v {Ã^§£<ÏSžç©^§£N`¸Ý¿6aÅ…¥Œï‹áû8Žƒã8¾OÆ÷Å…¥V"&ìgÁH¢iX–…eYˆ¦‘²`˜°?Âú4¤ç ŒR Á¶mlÛFD0J%æ ¦!Âú 1 ±x›®é:"ò§š®“Á0 ‚Àí áÕ,´^,/“gg‹¡”¢ßïL&¸¹ájmççƒK¨7à„{ WOÁš?>æaµŠR ¥µZ €v»ˆ "ü8=åbcƒ.|ÿ “šÀfÌ™\Žx¥rg\×ÅuÝ‘[¼Ra&—#¦À¦lÃ×—š=8`¢^¿Kÿ=À@D¸nµ¸ÜÚâ=|“C>yÀÿé'ð”þ ðf"â/¢t Ã4—Þ}´áIEND®B`‚PK fc7V„ÆgZZClient_aMule.pngUT  eG ”ÂGUxèè‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIME×   d·ÁZtEXtCommentCreated with The GIMPïd%n±IDAT8Ë•’Ïk›uÇ_ŸçW¾É“æ²CÒV™&-(2ìÚ2/kÖuÉD„¡ìOpºÃ.ÂrèAd;x“!¢a‚c8ÿ§¨wÐIJRJ&NÊ’5‰O\Ú-ÍóMò<_Cî²~ÎïÏëð~¿dii‰ýÜ›o”M³ÙÀ²,jkb=ëãÊòQsèåYÓl6¨TVI§'xf@·påý3Ä&Ž“*¹?À ÔDÆP\.c‰eÝ¿ö gúý>¹Ü$Îÿƒ¥ãÅ…íÖö/SSÓ„á@Œ¡|ê­Ó·®_»JÇ(ÇÁcz½‡ò ´R<ÝÏ–-ËáùÅþ8¥nßþùÛ[?~G¥²Êfý.Ùl‘´ÿ¤DùwÆÓoŸŠÊ'OÇUC­µŠ¢ß÷¥P(P«ÕL†|óõW3^øˆn·~zå’r^/4wxalÙ^(×uQJI.—CDˆãX pæ½sxž—pŽ,Î}<3;›Îæ&ÃpÆó<ñ<|>ˆ "d2vww •Ê*Zk’ɤä²9༧|Z­Öìx<Æ÷}\×EkR Æ# ÏMÉóêï‡ãqL4R«®Ñj·p†CÍÞÞž™˜˜@k-ÃáL&Ã`0 ẈâØ6vsÀ>ùüÍfƒ(ŠYߨ?Q¹?A mÛ`gg‡F£Ö0Üo·1ÄfçQÍ&kw6e}£.ökG~¨×ï¾3?¿´;´ã8’J¥ˆã˜~¿êhì\¾|‰X,ñ3YŽqëÞ…Ûí‹vB¥¶Ê¥ûýÇ;N"‘PÖh4Û¶™žštnܸλgÏ©/¯~ñAµú«©×7E)EþŃÛ÷þܪþçÁüÜ+'lÛ¹9 ŸÒxíΦ¼zè%×qÜQõ·uJ+Å€ÞÍïêýé%Õô4SIEND®B`‚PK L,Ó6S9ÕÕ%Client_A4AFNoNeededPartsQueueFull.pngUT ÀNwF ”ÂGUxèè‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<RIDAT8]“ßO[uÆ?ç{Ni¡ °µ§ãG (Æ… ĉFÐÌmq‰ÂTc4Æ÷@/·+3X¼4™Ë®–Ì8ç13aC£r#Â`,!£-)=´Áé)ßsŽÛâsý<Ÿ÷MÞçUÇa¯š[cªŸ©šÖfY² @Uµ9KÊq˶/ÎNN$÷ú•§€æÖ˜Bôº\®³Ç¾ê‰„CB÷ûÈær,§VìÛ?ÿº³+åÛ¶¿šœ°‹€æÖ˜piÚïu‡"-=ݧÊÜ%nÀÁ¶m„€B¡Pàûë#Û –îîJÙ>;9a‹'†ÞºC‘–?|¿ìaÚ`llŒD2”)%ÉD’Ñ[£,§–ùèƒo´¡î9!D/€hn5º\®³=]§Ê’ ÌÝŸãä'™ŸOH&I$“ÜÇéx«“x{¸·¢²òô믵—„CA%ÐÈd²¤VÒÎØ/¿íþ½±~e1¿à8N xTüFEQ\À¾êP¸¥rÿþOÜnÏ‹@äñ±œ•üNþÎÆzîræÑÃ`Ëqœm€ÿj‡ƒ¶:áJIEND®B`‚PK °Uˆ7yç__ ¤Toolbar_Transfers.pngUT»gZGUxPK Ë\7=J‹€€ ¤§Toolbar_Stats.pngUT ì¶FUxPK *¿?8x¯A“.. ¤kToolbar_Shared.pngUTPR¢GUxPK "Z7@qa¸¸ ¤ÞToolbar_Search.pngUTç¶FUxPK @Z7§ÿöaa ¤ÛToolbar_Prefs.pngUTGç¶FUxPK ¢…+6Œ!(     ¤€#Toolbar_Network.pngUT[¦EUxPK åY8î§š‡00 ¤f-Toolbar_Messages.pngUTžÂGUxPK ŒYY8|½ã-ÕÕ ¤Ý0Toolbar_Import.pngUT‡”ÂGUxPK ö¾‡7¹Z׎ÞÞ ¤÷7Toolbar_Disconnect.pngUToÏYGUxPK ‹Pˆ7¹ó2Ûµµ ¤?Toolbar_Connecting.pngUT^ZGUxPK 2¿‡7«šm ¤HToolbar_Connect.pngUTßÏYGUxPK ØUˆ76|2   ¤~NToolbar_Blink.pngUThZGUxPK °47—Òá®® ¤ÎRToolbar_About.pngUTQÑòFUxPKaUY8÷°g^J ¤ÀYREADMEUT¦ÂGUxPK £h7g³žaa ¤ ^Client_xMule.pngUTqeGUxPK ¥n7dµ‰ÛÛ ¤­aClient_Upload.pngUT¦®¹FUxPK VM8);÷÷ ¤ÌdClient_Unknown.pngUT½²GUxPK „n7߀ŽRáá ¤hClient_Transfer.pngUTg®¹FUxPK +UM8ĽE¥OO ¤/kClient_StatusUnknown.pngUTA»²GUxPK F¡¥6†’Eþ// ¤ÉnClient_Shareaza.pngUTƒÈrClient_SecIdent.pngUTpÞÍFUxPK ’¸T8ôгi®® ¤øsClient_PoorRatingOnFile.pngUTô£¼GUxPK L,Ó6ÈÞA¿¿ ¤ôvClient_OnQueue.pngUTÀNwFUxPK ’¤¥6é€lÜùù ¤øzClient_mlDonkey.pngUT³Îæqgt^wîÌõ+ÔZí3¨ö=çžsöÚ{¯½Ž@àF#F­V_ÑétúÜÜ\‘f1??_,((‹ŠŠÄââb±´´T¯Õj¯ð»'~ü›<>>>àñz}r À<²Ì\ÛØÜd’ÓÉl’Ĭv;[·ÙغÅâ3,ù(°pzÜh¤þý‹°,cÛçÃÍŒfÅí†G’àX]…ea¿¢€@¹¯˜˜XFÊ¿ÃC̵¶âãµkøÚ؈¹–,tua‘ì'­¿55áÓõ똺s«kk°X­JJJJ™““£nm…ö(âPEËËaº{7obòÖ-L‘}ihÀÔíÛ««ÃHU–gf`±ÛC%%%z úc!§o²³ñþêU^ <ÓÓ­©ÁXm-ÇÆàñ¡¾ou:,Ó™¸áÄ yyy¢ˆó[­xvþ<:Éúú" 6r\ìïG`STÊ«ÔTt'%aÕd‚Ãåb¼;ogÝM$½ÐjÑB¹Gf&>öˆØIƒOÂsï:wÖ¹9lP—x‹þqy½L2›#èmä|ŸÌÔÑ8 ›}òOÏžE§ZGäøõ . Êu"ŠN·›­1OÐ¥Ñà3EÜ#Ç¥Þ^ü¦r8ˆ©»mäÜ ×Ò<ŠÂxö'¾±Á~ÿ‰ò®²ÎüèéAç™3èP©`¦uèà//^„²ó®¬@W¬À[as:CóxH‡Üz‰éNãëÇ{—.Eøá ®„B!Ð \ \+DâëË—a [éR[TÚ):Ï ýhσáêjìÿùŸ,+¦ìDÊ õy…6?9 ^Žev'‹ê• ..NÏïûý˜æzsé&-IEND®B`‚PKL´$7ÿñù@ùôClient_aMule.pngô ý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME×PöÀ<IDAT8Ë…‘KHTaÇßwï˜£ÎØd*Vd> Ëhу "£E­¢—¥QAÙ ‚jÑ2¸*ÈEQ‹¢pÑ" zYÙB-1Ÿ•ïÌ\çÎý¾95â‡ÿÿ9BkM°Â¨šLCÞ¹ê|Í]·?¸?ý˜«ÔCJ¿†µ®«šÎ4Ojþ‘ÐúϬvŸ¡MÃЮ"¬”{Èôø—)­-!„£µ.?~{| $ãÖ”(-£ëË÷¤¦ú3nÆœP²!åA)DU’G+ŒÂ`…‘7£ƒ¸ _ ;²$¿ØÛÞö2¦Ý˜4¤)…'YgäF'GEÄúÙª‡jÿâ xe9Ùìp„¡¡z{ºHõz+dy¦×õ2Q®¼¥«tq¶ ] `Zø ‹¢‚/âwTÓ45 Ç ðM^¹¯öÜXô‘þx)z|ÇŒèÏkÔ#úôƒÌú»ž‹‰ª'J ¸K‹O>oSçÓ„u£Re¹´þl_ ~tàPÆôpççLæB†ˆOAÖj8†ÁáPˆ3ñs|xó¶¿ùu×(îÖ_urÁàûññÇ\{{iÛ¸–…µ·‡+%CƒýÔ+Õ¡åæù®#ùþ…ht íö-4MCp]!2_ öòŰçü¸šB H)‘R „Àj4<¿¯ÕÁÜØ ”»JkuiYHÇAJ‰O×iG"¨«äùÉ…E>•ËØªŠÀQUE‰ÅPFF¨lmµ$ÜõõÍfŸ®•Jü ‡Ñ’Iüé4¿ûúØ,[v»½ƒ/@ä ³ ߪnïë•N ZÛÿ+³æÀ½ƒÂ>K²Za½´IEND®B`‚PK# 7D5ÂC>Client_CommentOnly.png>Áý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÕ 7);RHËIDAT8Ë¥“MhAÇ3Ý£H"-â±à) X+‚„xìEж'¯¥<Š Å õ"~€šŠ1½[M\íÁbÓLýÀÕlëZ‘Íx0C³mj+¾Ëÿ ÌûÏofÞƒÿ a’â]ú€àØVzxˆ¼©“—G/fwØŽ¶XM½ðíù9¶£WOJݬ;-ÓÞT@YXÝ“§¬ üèzØV_LKÇŠé7Äãqĉ¥?‹}MeM}ß'O2t힌3·„@‡Õz¥õz}ÃKA€›I­{Ë|-Mu=Û¶±m;Rìû>n&ÅàX‘ÅÇ^•—Q¥@ÏÈdcö¯æätÅ|†¹· UÊñsÿEΟ½0 ˆM ´ÖÒ½ \yŠ7}‡Êçï¨ù¼ï¦³Í7F´Öd³Y~ÉCÌ;ï>ÕYz=½iv­¬Ú4¡nK†!»?¦yô¥›û¹Ýò%;ûn‘L&q]—7•Œ‹\OP­Vñ<‘ÉG;+¬îH%‘H`Y–eEºxA,CkM­VCk”­5B„­Û¥Žãl:uÆd}ƒ‰›·¯Ÿú‡)ž0ÉoZè˜y üIEND®B`‚PK {7°½W½Client_Connecting.png½Bý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME× 6‡¹ÒJIDAT8ËÍ’ÏkÓpÆŸüè’¬aéì`WuLO…já»È† ²Ê½ˆC/õ xÜqƒo<ìØÒR6º êþh»ê–®t®©¡KC3R“eñ¢Pçwós{ï‡çå}€.!"!d§€éZž¹3}Ó/}LQT¿,˵ZÍú' !äáâó'G‡ú+Ï1o{{ÛK$!dž"þ5!dèúÕéìƒÛþ<ŽøsèëëÃÔÔK¹¬(Ê#žç½‰œß²,3/Åž²Ò5 Éxž‡N§Çq âñxO$™.‹ Q7jµÚçn ÀÞÚÚ‚išÈd2p]žçÁqˆ¢ˆƒƒ„B!,,, ÃÌO@çóy;—ËÝ]^^† H§Ó i½½~ìî~ßï‡$IÐ4 ÃØ'}Á«×ët]ßl·Û·¢Ñ(U( žA @6›ÇqpÝ#¬¯¿U‹Åâ³nÕ=ŒŽŽÎÆb±—sss¬a0 õzkkyð<MÓàºn’¢¨ÙÕÕû—€®ë›ûûûïwvvnNNNú*• TUE¥RÇq‡Ãà8.lÆ•‘‘ÐbµZýÆ¿©Ýn—›Íæ»R©tCE~ii)ã8‡›,Ë†ÇÆÆ011Û¶¥F£¨V«Iæ¤rX–õI×õT¹\ÖE¹¯ªê ŸÏÇ·ZZÀ`koowcxxø#ó§†Ù¶Ý0M3ûsn6›š¦¿†Ÿ-[–½’J%_ã´Œ_¸  ÿß(Åâ /3IEND®B`‚PK+§47Åc_°orClient_CreditsGrey.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ¥hn½ÕA l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< Âkž.Ž!§ßNܘu(@¤mu~§lIñ‹ä’us¹5]4wü`Û75¯7BfV™&‹UÙ{î‘…ŽÒ9z†;¯]X’ñŽùÇÁH¾?òöÏ9d*çÜ‹‰ÎŽoäá8ø‰MáUÓgO}Öš…ÕûüùËÅ,ªeXfž»lôÿç¦ýîÏ3-ç)»´ðï¿ùË^G9n¾*y$0ãßš\™VQƒu¢/×6,º˜Ã¡Ø"è4µÍnUãµÛ¼¤ƒCÎoÞÇ”cP£éç~gG#×/ú»Â½´&×êßo<]0%dŽ%³ cöÿp»æ7}Èàéêç²Î)¡ PKKŸ47ì6áÇ\^Client_CreditsYellow.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ •¨‹Èõh l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< ÂCž.Ž!§ßN8˜åd(àz^åXRxG”×ö —R_úÿþ2ñ䡹 ¦c;õxêOŽ9íž°‡ÿƒNúŽô6nÙa{+½ëÆßûôËzzÑåþ/íÅú { ˜Vé5½ø'ÙÁï×}§®¼¨•|÷Ã'¬—½%ÎzËgÚÁ³QOÖ;\fÙ#Ϊ”ÆîrQXàdGÖÄ8æ? ¯ãÏôròD¢˜Óh—/S3ø;½”¤ ÊjyãÁÁ6ÜîS©Tô!ù,ªËae1'ëŠö‹wèôw`µš)¯Wˆ>~¦ QòYT_{#m.;Š\&¹°B:/32Â}Ã[¾°Þ\Á`hn0Aƒ eµJ:/o Ôë7 Ô L”vIEND®B`‚PK…›47½ç†ÓÝClient_Encrypted.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ  סÈ. l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< BGOÇ‹Óo/oäm0àa8X̲èü¥›’‚>¾ìE³åìê—±­]ŸxøHïኩ‹ßû®díÓ*mÜÌq€IAËü³s_õÒ“É?€†1xºú¹¬sJhPKjª7,.k´¯ª Client_ExcellentRatingOnFile.pngªUý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×oiw>7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnôIDAT8˵“ÍK”QÆçΫ©XFiô4dDáB)°M¼®Â… µ ÚEÿ´kç"WAº‰hå,¢ "£veŠù…C£–Ž:÷¾O ›”j峸÷œç9—ç9ö2üPÜï‡ãõØvs6¾,D™ÜøÖÙpÌÕ$4F™\²uhŽ2¹×QÙðÅt>WùœÕŸ¸%ékßaeêCéiçm‹ÔMà*кë~$~HcÛuK÷š> ©Z´ôŽäýcl}Nˆ‘¨gôJã* ÔÐþÒÒ×ÌŽ^‚T øqTCuà:ºI\µÉ'Ï*1®Bçê›úìÐÐ ˜m&󟑦q§ObUvÓgcûƒÀÇ8òÂÒDuPš?B´‚´aD(áŽY?÷ÿQ,bl°–‡d…IPý„°É"„%eÙTqp§Æþco¬ýÆyÕ1?T„¤ah~ûºú‘ ¶²­ÛD™œôcf0{„!­ƒŸ? X/¢ÉU’;eð.,庭øMÉ«û(?¡ü>XXFcK8I–²ËÛÄSÀ'R‰Væx«’ݳˆ.‚º€–(“›Ù¹‰M@KÔ³YðÙø9òÀžŽªÞQw·53ÿÿLÃñ@Ù®=‹_Þýíul‡›IEND®B`‚PK©7¶Sµ•JNClient_ExtendedProtocol.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:‡¸0‡ºï£†Y@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy@…›<]C,N¿íßÈÕ Ѻµx[¯Xç¬é®ilò‡Ò7¨¯PÿÈ[’ÿšs–ÞZݳN[,\Bš9ºx=ºï™þZvøñ¹‡&”WEíö^Spêr†q®ö™ÒC ÅIXùZ°NÈelç.ÛôüW­½v_ÝÅóLgÏŽ:ªéT¾[Üb…Åß?)Ó½Â3‹½G¾ÀøÂ’¼óŠÜ¬3¯ö‹}iZQP2/àñ™¬3*ŸŸçÿÈtÿ„ΪšugðtõsYç”ÐPKÁ“7ó•=!ÔÏClient_FairRatingOnFile.pngÏ0ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖÚ2ã7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë}ËoTUÇ?÷œs[çÑBíƒÄ2šÌP#TÚŠ´%E° ( õ±ðãÊĸTcâÆã‚ ¢ ‰ƒš¨#¾RSŠ%qÚR@Úi ÅÎÜ1¹sÎuÑjÄßõïóË'‡ÿí£?@)…RŠ(Šhhh@kME¼óö»wÝ;ÿ¥”cðœ”ò= mŒyøüØÑ±úÅo¾Æs×#ùìº.ÙlŽ;wV_ïÙýè¹Ñ|¡#—Í5…Qx¤R)oÉOìf½¶ÎÚÚŸzò _}yµ)Ðc­ý¤X,îBê¡Áý ZkÂ0$—͹ ¯}úÙ¹W¥S¾Ñoì~ø‘«ss³›ê_<=þìÐcý{•R‰¶¶V¢HS«­S÷ë¤Si5š/4&’©Ì+˽/½ðÊùé+—yâà0èq]wo{[;MMÍ  "¥"ÒBJº:·Ó××Öš­[¶ñÀÙ³gº @’Rž>V8î­!ŒBjµ++ËÌÎÑÚð`&CSs3ÙìNgþÚü™Læ¡q×uQÖÚÃÛð<m JJüÀg~~·±S'ŸÁ÷ë\žžbqq‘Ûw`M&’h­‘£…|:•ê6Ö:7o^gò—If®þJ¹¼ÆSÇO µ&N3==E©´„ã8Þ÷?\º „¸-Gš\\º•™/fWo¯Š±±ôõö#¥KkëýD‘f½¶Nø¤’)Žä $“Éäòr©WJy^7¬µãÖØ=‰Tbª½­ÝB²ïñ}OÝ÷‘RÒù@]„A¸“0 »À®]=¸®{úèè˜R Ç!ŒB|ßG)E†T*¼ª‡W­²3×íH)?TRJff®ÇqF::¶Qõ<ŒÑHå>AàS­zÜ—HðWµŠµ€––¬µðâó/[!Ä…âìoqÅ«P*-±´ø;žçQ«Õñƒ¯Rù6ÆP.—c!Ä„2ÆðÓÏ?bŒyó»Kß kí‰8Ž%÷˜ã8F1aŒyK,\¿†òFÇãqß‹Eˆ>Æþ—qf;É¥£IEND®B`‚PKaTp7ôjtoClient_Fastweb.pngoý‰PNG  IHDRóÿa pHYs®®Œ]sø!IDAT8Å“MHÓqǧiZXÔ!Rz_‡,Ø\IQBE"zеÐCBËDÊ2…<!ù‹P *I(5ÿ[–[_VM‡5 ÉZ)Ñ^jÚæ¿¹É'óKoBžÃsx>Ï÷yžï£‹‰EÏ„C²p 5^¡·ã®p9mbÄfšÍ+±H¿ó!ñn¨›¾¶Û4Th9uH)¢^ë5>uææ™tÆF<– Ü=Ř› qZà(ÇÛ[Ì«æ|ö¥*¢åøÇ‡ ½È%(©¨-VóÝùY¯‚n ­ç·5zªãnì÷rHNø ðÍõš)sA}=«ðÛëç~éͷʘ´×!wî$bʤ OM\¬"z„_Ȧl|íô˘îÜÎÇ'ù õK„,…Dô;puhIJ\JÔ#áÐÞà—AÂ]\Òq†Í̘³f¤ch¾ˆïm=aCÏó9¼gó\÷(ÀÌLDe7Ö‰–* Õ%Zß9+Z*wQ{!›Ë¥E¢­æ ÐIaýÚ¤Ùâ1G¸û.a½dz븥Þt”cï,ÇgÒ‰ÒÂýÞ„Äô˜¾Q3S½Çøl*Aî/G5ÛUFÛ¢ËI#yÕòì4ý3¸Ñûá%G >ë Þw•bm=G‘6m)+QnZGÜ’?’çÜ.›êDÖ‘›¹µr ©«ãY#1±qÿþþ à†/ÒŽû-IEND®B`‚PKò±7ÑÎ>•Client_Friend.pngëü‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<‘IDAT8¥“KH”QÇÿçÞoüfæK…òA a%=ADíb´(ZÕ&Z´-(&*Í–-¢M­$‚ ’‘°l!eˆ=ˆ¢¥”©£3Ó73ßëÞ{ZØ[kÓgñÿý9œ13þ'¬ïEÑnKÐ^’¢–™­H™“º,¶b›”ó³P™‹)æ^ fÆAGãIûÄúֵɲÊrø…û†ƒÜ”›c°³¢®&±¼qµò2ÓxÜÿÄ‹”î<¦tv:Ž}¥mßÖ„m pè ˆ„ƒ±Ñ ì„ù´›„„tJák‰[—züBÞ?"[$Z¹¡¦®ªº:7 |pàC»_àÄ qDP™I°çÁ ÐÙ)X†à$çYŸFÆ—Z j]´¤*›>À f˜b0 (c9hׇö"|‡ªúf~ºÌbfIFÀä]°R30f ØQ:ð³ 6?·ÅZƒb%`°°,Io3ãÓ«+íÍt¬ ‚1ºÍZ]lAÒ“„B¾üüÉ;O–WÂ!Œ"Jà½ÏÎ “C¼n††Š‘ÁQ¡5ŸËe½×/½×d/„?ê"L{`efñJš1xç^…Qwй[¤˜2¼óå›Ñ‰W#Ó‘³j HÊY°°m”5µ` ÿ¾Ÿž˜º£~´UX‚nWWÍ¯ÝØ¸!^~ãy3p2 §a3îÞìóó9÷†bìI1ëß ¾™Øáê¼R§uÓŽ¶„ÿp†ˆ×7¡ÿz¯_,z]šq(õ D>S;IÂÙ’’Øá-»¶'¥¸}­Ç‚àü1ÃGfÍåoߨA´ß’â‚‚"¥ÚîœSÈß.o®< 4·ÿ¥ù ½Çг*HõyIEND®B`‚PK"“7&ÊóûClient_GoodRatingOnFile.pngûý‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDAT8u“ËkSAÆg’X[Ó6M¥ÖGŠ`)JtÕÔ…¸ðA|mêÆÇÂJÁ;ÿW¢;qçÂhU\hT¥ Å÷«Á&m“¶·÷&޹Dž¶KÎb†ó}|g~3¢ª,´l6½ˆ‡2¹¡…z ª„>„F`A™M`³ém@!”É}ú· y`-¡L.øw¾XÊäžýŸà;ðѤïj|ãC³jçIUmÅçû°³÷¢„u7p蜗À¤¯Ó²éˆtiZ ájÇaâ%Áð-¤ZP”Û¡½2³S;Æ7?‘ŽC"˶Cd Øðß¡õ‚lí!°¨ Öjæ l6mL}²_šÖ€º æo ö'H“J"9n³i™£`³é­Ža8ªH£„ëÀÿ "¨uPõÀæai€lCÞÞJ_E¹Ê(%„*ÞjK`¿‚ Ó` L@P­è"„F”x-F¡¡mHºvk¬ÂäDžXÔåí—¯£„ŒOwûÖ¹?Þ\~ß»çlÿ…Ïó(øÙž4¬¸rã×V Å<]]ݬ^•Âõf~õ‚âX±oL˜ÑÑ_÷úÏßýÆÞìG'±ï}CŸtvv195E²%‰3ãà8ÓLNNÑšLðàá}¿T*õÔRHau×óñõ?-I|kinjÆó<<×¥®®ŽåmmxžGq¬Htq,lŒ9]û’¥ßÑ £ÕDk{û bÑÕj×sq=—úú¥ø¾WñH¥RˆÈþ9ƒP&÷,qøÎ7 thdd„r¹D©\ÆqªÕ cÅSÓÓø¾ªR©VžÎû¾õO=zœ»‰DvÖ *"ZsWFDŒµvÐZ{æ}¾@ú«4X°IEND®B`‚PK“7¹Ñw›ÖÑClient_InvalidRatingOnFile.pngÑ.ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ&Çkæ7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë•“]HÛgÆïûOš˜ÔZ5m4FòµæcVL¥cjfq¬k¯œxW¼ØÝ.CºA/¼œPØl a"ku"a¥”mltj)eÚMV-ÛÖtήÉìÚžßÿ.DAïöÀÃá9Ϲxž#؇á‘!îz4MûX•JH‰bF)õf,Ö²öîÅK{øbߢ\&“é^Üë³ú|B*)Xï}½|7ù £”ŠÆb-jGHôöõø4MQJ½*¥ø§£=î¬ýäSŽ¿Dak‹Ÿú‘_Ïw«ßVV†Q%„¸®”zgz*ñ»Ðt"zå왳绺ºÌB »'½)ª p<~ŒÅ0È <­°Šö—»ºLRŠÐÆÆ†éÞò„ìí뱕Ëê§QèzO½‡òt‚:¯—N'B)£ÏS÷Ý @]Ïâp8„RêLo_M‹DÃo„‡^kðxD¡XDÌÎqÌqËýû¸/_Æzò$Ï®^¥èpðWæÿÚ+H§Óä²9²¹Ü†Ô4m =—UvJ׮㬭Åâ÷cñù°µ¶b®®ÆívSº2É£õ?0 ƒOƒ”R^4躆Aá›oihk#ëÞ‰ Âá0†a°09Ƀþ~ŽlÞùì‹/ì˜gÈr¹<2;ó}>•\#óÕ×T[­ŒD°ø|TUUQYY‰µ¹K €«ò0Õ·ï täZ2§”zOãkÉä[ë|´ÕØÖFvv–c—¶=Þp R^\äh0Hþ‹é­Í'OÞ>“±XK®{*q­I3k‡…À‹añùp:ÔÔÔp0ÅvêN“™ãéM­{*ñå|¦5oB {;:LúÍ›oÜØéèèèžØºù¥³“:¿_[M§‡¥ýb ž;ÒÔ´ŠD,&‹…Ʊ±Ý…öövææævg«.YZbùáÃ|6•j6Ixß›sóóø‰=C¡Ðþ_Ã90ÀÓÓ§q¹\æÕTêC1騹sG*êë·¥F±¸];ýþY>O&fyeåo1C €ü?$ ý~`BŒ1tó>IEND®B`‚PKò¶7v“êí­ªClient_lphant.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å |G@˜qª6Ÿ4P½ÄÓוý:›ˆ¹Jâý»É@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy Œ|ž.Ž!§{ƒO¯=lÀ“,Wu–ïnãÌÎ{ gŸ0öœýå㾕±»_žwhpQÒôš8ýÌ‘Ï7½,Ùæ÷ÍÖeØ`ÒØé"')X¬Ç”·mŽÕÏy +Jë§30˜qä-õaõëÕbTÈj]j ºæu×í·ß6MÝò©CÜõ­ÇïMd|ðEï¢G´¦†à^]Ϲrg£ÿ_º÷øBþlfU'žïÔé_t•ª<â²6öÅÃg$=˜T”˜?jïýq˜'ëÈãùÛ%îæz;휲Ï#¶!}QÌ©-©ÓÞÙ1ÙKE9§5:sdw{ЬêY¿[Žª)§©eL{6¯î¬É÷û,KÙ&Å~PRY*m÷ÌóŸ5¢?Êþ1.ñùõùSFà`2xºú¹¬sJhPK’¤¥6é€lÜþùClient_mlDonkey.pngùü‰PNG  IHDRóÿa tEXtX-Index0´Ãœb«IDAT8¥“[lSuÇçÎéémíJOw.[o2)¬ctcË4DÚì8V6_`'s 1J£Fx11DM–Ál$ÖÄK±DÇÒ­sGtet²–®v›cëéìíìt«O|óûüÍçéóøŸÃü~?&å$µ^[®³)1—ÏQEçyÞ+¯Ë ›*µZ=³¸¸øm&“¹Dée®ÒJ›R‘(‡ ½§ò'K†MWÜV*UìÓÛªk$I*…Ãa,NƒÛí.‘$‰Å¢#Å¢¼ž«Èn%DbY!Sç˲KÛ’–—/©¦Ÿ½ÛÂk¹íÁ`°Ïï÷ÓÙ¿³è4º‹£££®@ ð&M«‡ë‡j»É£ª¸#j1±¦F"1Ÿ¸l‰ÛkÏë?Ýñzh ér†ïm´}§–U×±¢šÚ êʺC.$.À¹µó`Š2—È¥+X POMN}Ÿ‰Ÿ„ÞM¸Qq N/ŸÎM&”#† "q;ÄZhÎ?÷Q”¾D á4—w¹v½ïkÝ×6=3ýNø^XӰѸ.Ûr¸Ïþ Yº°=Ϧs®®˜HÏã>[?8 ÛaïÏÂz`|—åõŠr}ù,#)qM”9wê¹ß[þâÒ•ðü|[¡!ÓtÔQt ­ó¢UŠ ¨žs@%[Õ¯ Èµ[¡[´,Ëíh5µ ¢(jœ5ÎÀ+'ºûµ¢þ"«‚ :¤„á&}WǾ×BåæÈÁ#NyÜž¥‚²,+P½«†)¬¬¬4ݺI˜8Ó7†)–¹Ì.üÖ•Œ/t/Úc@ýRF‚¹E)JIA©TºjwÖN¶-ãétzKj%ån?|(Ä-ÚFˆ<‚)ìNËOSÁcF«´c´Äš™³#Ã#–d2ÙæÞë~`µZE^¯7â¬qžijj‚¹èÜû×o\w¼»ýáGrÚ&ÔTMm}äö· ¥DRŠÖ{먛[K¯?“IvÞ!ƒÛwFX)&©«»‹LzÈÞÓÄ“Î[ BЫ(¥¨i¨mB¨Ž©Ñ®vC£[M¿‰e{QJátZ Y¼>‹îîÇØÃ³¡€…A¼^áPˆŸ²QqâÓÞ3¨jj¶’ΤQJQQš|>KÏûà6388ˆR ­ÃÏô€BØR‡ `Uk‚ÅÂ:ápår ¥Ùl–ææf^<öW¯NQ©TR¢•B  \“q)ŸË3?G)…mÛØ¶Íѣǘ˜˜ ‘ˆcY•JË P,ÉçòàtNy;/³±¡I‹|®€Ó颿¿ŸÞÞ^––oMÓÖ°2“$64I™Êeùf_ÏÉ_/ U›¢?þŽÖšŽŽ'‰Ç—(•Ëh­q»Ý†A:‘¢°RàÒ/#ë_~Ñü[¤Æ;›bׯfŸÞ·¯Íõçô<©Lš{CõxÜ</.§›¿ÿJžYåóÏê±Å±†'/Æ€¤àòìHÚe¸Æ§­5[ƒ[BµuØY›rºD1Ydyv™Ñèß|ùÃFôÊÀ'FÎ}Ä”ØÔ•* ñ©]Ïݽíž>—¯V ih´*l²ñL|â«èé%`˜´àÿòÿ»1(k@Èê†ùc®n•jþEIEND®B`‚PK\®7ƒV|Client_PoorRatingOnFile.pngêû‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ7ŸíR–7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïln_IDAT8Ëu‘_h[UÆ¿sÎíÒæÏíÒ•vëèMšnЖaµqYQÑtÎ'KÉžŠ0[öàÊ@§(LË|÷`*(¸‡Zd¨ø CÛÚMÆæÚÎjј)­k—Ò4¹Iî½ç&÷Þs|Ød8ðßÛ÷çá#¸‡ñÓ§píÚ|cô}!äA „ü „x!ï[91öÊüäž Ц(Ê/‰þDHÓ4Ê9G6›õ¯/Bˆ}Öãñ>ño€¡ô`'cì!Ä!JI1ÑŸlííí¥¦iÂ0 ˜¦L&#þÈfsRÊ0!äk!ĉ©ÉÏo(À=3JÒ4Ì/ÌïŠÅbà¶ »ZçÜâ¨÷7ÐÔ@[$¢a~a~ðêÕŸ<¥ ¥ž'žˆD¢Ä4MD#…B0M®ã  ¢½½;ò›ØÙºº®CUU"„H ¥ÀpOW7B@H UUo¯ÞQKK+„ „"—»…üVÅbMá0ðŒÂ{9‘LR€ yG3 ø[`s”+%ؼ Ã4P(`sÐ"ÕK¥1LˤD8F>Ÿ·9¸mÁ¶92™ßá«B/.¿{Ûm$ëî骖týqÀ¯èåÌJÅbÕš‹[°¬¦®TQ±ìn”„@xVWVm‹óן¬¬®âïµ›¯{‚îr<‚mÔÔ„‚?kÝ@½Šåµ2ÈÖ(¥ @Îvéx†w_ ã§O‚‰iÒÄB~±4ùâÉ}Cg…¾ë‰ÛEæÖ\“»¸åÊÍ‚29†}§ûùøÜr™Þ½ÿ}Ò„Â2¹øÃ_CZ\×+ÆÞe‘-ןY´æC÷{צO¿·*/—µßzΗñЗ ž®~.뜚PKF¡¥6†’Eþ4/Client_Shareaza.png/Ðü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× NN¿i¼IDAT8Ë•’[H“qÆŸÿwÚÁãtnæ<å&³,ó”’va‚¨,M¢2µK#Œº ºê¾›, o"Â@Q¼0Q )µÈÈSj$ælºÙ<ÏÃÜÖ¾}ÿ¯› %üݽ/ïó¼ÏÀ(Ï+œ·n7ý,.)Åaâ8a¾îfûÚ—qÙÙÜâ±åç—tËü»dA[sí%±X*¼¨F£"Õ5m¶ÜÜ¢ý ÈÞá=!¼áJew1ã2¯sü2ˆ¨ƒw!Òü¶‡kk-OêÝ×à!|â…Š´8®Ryr!!‹à•2àà[2ay ü¶oGÑÝU?6úö/ƒ^€3–Zž»ÍæjuZbrVÐÝ ÷\´©np Aðl*Ô:”„¸U}çã&Æû€ë8SAá³­(}µgd ª¤ HQviE:¨G02\=ëØø¸ jˆ FFV‡Ýç³Ä}Ÿ 3¡O7 ±7$)ÉãÅÖ/²2Ö:‡Õ©Ø'(’Î…ÁYøçÕà‚‚Á¯»¶Âìl!¦T"”! ôñ˜í‹è¯—ájVB˜T€;*B¥¦`jh¨qÕõã{«‘m ˆ“éT’NGGžåbC!:‹Œ.1Ë ô‰AÐßÑ"€{J ]X|¶¥éº9{u‹,O³üí¢8tÊ/’Lsl>gÖwÒ4FøŒ(sAs°YUÐlƒÈ6S;ü­ê, ìŸ4ü­¾_Ÿ3]!ÍœpÆÃ$Ûº?³ÈëX³š½‘‡@ïWkmßpU7¥£(°{:áoÞñ|Êvnª2Ó̹ñÙ„O€ÙN‡Ž$ÂÛ9h½Þý¡ª“Ò‘]ñA„½2&4H wiàu£,u<–—JfJY6g¿êDxWŠé }tŸ.^-·Z86÷0â]4í‘Ú{eÿùüPpþ“o#IEND®B`‚PKôi7žÉ½!ojClient_StatusUnknown.pngj•ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× (KnS÷IDAT8Ëm“ÏKryÆ?~ï½Þ;¸®Ua˜š VÌ»h¸Åk#´¢…-ZDÐÂj1¼ÑlÂ…ÌBíZE‘›îâ"Å2)û±‘¢a^•k÷Îb*z™÷lÎyÎs8Ïã0M“‰DÀ/À8~-—€c`Ë0ŒÊÇ~Ç@$Àoªª®OLLhápX P((•JV&“i·Ûí àÃ0¬w€×á?ý~ÿëëë?œœœÍf¹¿¿ §§]×#™L6///ÿ>†aaš&º®™ŸŸÿZ«Õìxo×ëuÛ4MûààÀžœœ´‰„]­Víh4úU×õ€ÔÛÛûëÔÔÔÏŽL&€‚ÝÝ]ö÷÷ÉårLOOãv»ÙÛÛãùù™îînººº¤‹‹‹¿0 …ÙlEQh4<==¡( ÔëuEAUUÊå2ÃÃÃB1.€ðÐз··È²Œ$I(Š‚,Ëø|>–——±,‹t:ÓéDUU¡P˲ÂòÇŸ !eY–Q…••œN'›››ÜÝÝ¡iBTUýO(‹E¼^ï7 \.777är9 …ªª¢iš¦Ñ××ÇÕÕBˆ’ Ÿý422"^‹H’„‚ÓÓÓ÷sÞ²$IƒAÎÏÏ­———cl¶GGGñù|(Š‚—ËÅÒÒ‹‹‹hš†ªª8N<~¿Ÿ6°% è´Z­T*Õ\]]Åëõ¾3x‹·Í‡X,F2™l5›Í Ã0*ßH9 }Z[[ÓŠÅ"•J…‡‡4MÃív éïï'•Jµòù|¾Óé|6 ÃúŸ™4Mû}ffFt„\__S.—­ííív«ÕÚ°,ë[3}ÏÎ’$[–$©Ôét¾kçSR÷ïÒYIEND®B`‚PK9zp7:N¼=8Client_Transfer.png8Çü‰PNG  IHDRóÿa pHYs  ÒÝ~üêIDAT8ÒyHPpƒ "‚,*,Hò ]™¦‘ÃsSfžCò˜éÔ©Í<²y0´<ðHW3ÒЂÓå5AÓ¼Ã$Ýl:ÝL×f©”Û·)(šþñ…Çãý>ï÷ [i”â¸wò$Å>D\[†6ŒƒFA‰”¢¸m­¯¢eèÆZÒ¤I]è.-}AÙ3ˆ.RÀ1B 2s EmJäòf5‡ï^¼¼î1»0)ÜYÍ™AD¡Ïù¿ð3‡¨"9Êá#ƒ©Gïš?óµÖ. Q¤*ðI‘¬Þíþ³i°ß-õæ'8MËh™xC5qV\@ åeí*ú€È— lœ=$gѯÁ~«@ÓÄÔ*Q-RÁ3^#§aÇAòãKwyJp?+áÅ–5¿´)ä«Û¯¯ogñÖ`ì"¹$qy Øvì ëVÔ€ %]ëÍ“ƒš0÷¸ dò–Qõ¸E†YR<8 òGRL„qÚµG¶n¼"ëão”t«P%˜HLõ…ƃ‘¹˨ KÌá1D€Ní1˜tœR:VZŒÐ³ƒ.méÜŽÓÉeK²Ìš.TȨ^…ú˜zI`äÖ bÃM¸Šõ¡× …«­Ú°ú¢gá¸Wç,¦îf™Åýþ¹óH.W!—¯‚¹Ï0¬irX²q¹]FÍgAh9«=¸Š }¸6æO¤¨ÍíËH-èbFÎ,„å-Á2Œ€§kêY…A ëâv·.\„&ð7ƒG)±{ÏWÞHNvþ¹ØŒÖ”{Q-Æ“o&û«€Ï4þtFéØoÿ1s0g­á[iß»/°_j ¡é=hßqSDÈm¸àZ™£øÀÀ ýÃ~åN©ôv¼ïiÜ»|FÝóÀÀV„QìÅœüwþ/—͹@Ÿà9IEND®B`‚PK77[Ö{ÑYTClient_Unknown.pngT«ü‰PNG  IHDRóÿa pHYs  šœtIME×!-Noæ5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPÙ‹o²IDAT8Ë’ÏK#gÇ?3“lú5²#›bn‰x«ö¢ ½I]ð¢¡=Í_P„Û£—BK!„×€—…Á ´”à¯hÀ„€d–LÞ™Iæ}§—š"ËBŸË÷{xøð}¾€ã8FµZÇ¡Ýn›B|ß×BlÛ¦Z­òµ1^Œã8¬¬¬˜ALyž7j4ïr¹\§×ër¹ÜW!Æîî®y||¬ŽŽŒñxüÖuÝ`<ÿÁïZk'À_À¯À+˜éy^ 0MÃ0 Ó4·¥””ËecŸÍÍÍôêêê ”_ÒN'''1€çyz8*×u[[[£P(àº.Ýn—¹¹9³T*•?K¥Ò«Ìszz÷z½l"‘Èåóy¤”ÌÏÏcYwwwضÞÛ¶ý ¨T*LMM!„ð=Ïc0ðôô„”’^¯‡)å5`K)_'¨T* étÚj4Ÿ ÃàùùÛ¶¹¿¿'N“Édb)eV)õ ¥D)5XÅb1Y(‚d29†áwÀý~Û¶™™™azzß÷ËËË7Q寮®b!ħÅÅEšÍ&V±X42™Œj·Ûï,Ëú{oof³É`0 ÕjÑjµèt:Äql.//óððð½”ò ðqii ®¯¯±,ëþàà€³³3²Ù,[[[h­ÙØØ`gg!···¬¯¯üü¯b†ïû–ÖšÇÇG”R(¥ÇrssC¿ßGkRŠn· 0QøvaaáÓ4'KQQ«Õèt:(¥¨×ë(¥°,ë‹*›€†¡L¾Qq~~N»Ý&Š"F£qHÔjµ`loo£µ&ŸÏãº.BºÝ.³³³„aH*•"‘HJ¥þ+F££z½þÿc´Ö¿\\\ µæìT[vÙKúIEND®B`‚PKHi7@~ñ `[Client_Upload.png[¤ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYsvv}Õ‚ÌtIME× '6mèIDAT8Ë•“Mh†Ÿùß™ý™˜Mv7ÍJM“Ô ÑlYck°ö PГÐVôÖ‚Dz+zðèU ÁC{"RƒXQZ±¥bÚÄ6Òj6¶1›íN³3tgvfvv¼Ø%‚û¿ÃÃÇûÿèùãgÞ›9úÑ!R@åÕÓMWÆÎfûӇ塋ëW¿¸ù2ÀÓ•ñ÷‡‡Ò-·Mg":ç½òáÜSƒµ]^ȾnuÍ –«-7¸{ñ§Þµüíaÿ±g^<8ýý@Ö”½v€U¯#ÐtZ¸ëKøÖM6£Úàn3É˿ܨ½ñó¹·DU“çî6ìk)C')wÙÿdžÉ]yFŠƒ¨Ã{HæJ¨öuf†]޾¼wo¹TøöÈ;gŸèy°zåüù–1ýei|Çñ±œ¤dMbˆºF1m%‹ènòëâ%DR¹‘„SwâÉ3îÚw±°ôٛ롳¹8ZìGWeô„LÊÐèÏ¢Lv犢pýêeL±Iitdz“#ù—įì,d‰‘Dh·YDSeô„‚’)¢ë:¿]b¬øˆ0±»°ï_€L*1Njš‚,Šø~‡(Š‘E #݇išt»]œ»·Éõ¥s½ÂN×±šnBE‚N„µuŸN,ïÓ‘d‰f*…mÛ„aˆµ±† 4öTžéëTU¾tºGîÙ÷qÛ!¶ãajB`‘L&Q…0 ñ<­úŸèÊÆÜDi´ÜXŽw*¡©‡×ë¶`5=÷ZCB»Á…Ï?A|ßÇqLÓD–e¡¾Y{«çÁkË×jÍSˆ"-?dmc‹Ÿ–þs’Ññ Úí6Qá8–e±²²rbaaaUÚ^ËZðÂ×ù‚ ­¬Ög~¼R«w¶øýv“š-Q4]\·EExž÷•ªª'–——þk ÏÍž.ÛNk¶ºjü( üQ.Xß<žsg†¡(Je~~¾ú°ËåäÉw§^Ÿ;¶ýö7ÐR2ÙŠiF/IEND®B`‚PK{u27áïî94Client_xMule.png4Ëý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×  +6„?êÆÁIDAT8Ë•‘OË1Å#)"4‹I©ÉŽ,,$kYÎ쬕…Oc¥|>ÊBŠ…,ý™DšfR,†Qó®ÈcÒó¼g{û{ï9‚¦i¼KQ§ßï üQžO˜ÿ”÷EñW³÷ ½ïƒr¹Ìr¹DQ§Óé ë:º®³ÝnÙï÷Ìf3>ßó>·‰¢Èù|Æ0 :«Õ Ó4Ùív ‡C×f×@€D"A¥Ra2™0X¯×_A—A2™Ä0 6› º®s8øKžgX–e°X,¨×ëT«UšÍ¦ó[3‚¦i(ŠâT«U®×+Åb‘Z­† ´Z-lÛf>Ÿ¿€^¯÷3Äç†`0H,ãt:a•J…H$B8¦ÑhÉdǨªê¼›xžÆb1r¹Á`Á`@&“Á¶mÇ¡Ûí"I¥RÉ¢¢(ŽÏçãz½²Z­¸\.˜¦I2™¤P(ÍfÑuý{ Óé”T*õo·ÑhY–‘e™Çãá1ŸÏ;¢(b†kX*•H§Óøý~ívÛ¢Ïçx<Ž$IX–ÅñxÄ4Múý¾ ªê ?á× ‡P(D(â~¿cšæWàSÿèýÕäì7 IEND®B`‚PK\a;76yÌÇToolbar_About.pngÇ8è‰PNG  IHDR }Jb pHYsÃÃÇo¨d OiCCPPhotoshop ICC profilexÚSgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ, Š Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-Û cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF îIDATxÚbøÿÿ?ƒJƵÔC”ýæ10üÿÿŸÁqåóÿÿÿÿÿ¯–qü?Ãÿÿÿtšÿÿÿÿÿõø]íôÝÿÕê¯þ×*¾øÿÿD»ÿ%]º&gÆf'Y°.F•&lÍÿwêñÿ= æÿ'DŽÿ&cÀÿF±èÿ'{âÿ&Vªÿ ;s&0xÆÿ/†âÿÿÿbøÿÿ?ƒjÌ.õЇÿm<ûo5÷ÙµÒ»ÿÕc·üu› q—ZÞ…ÿ®ë^üŸöþëÿÿÿÿÿ·_úü¿Zæ‰ÿêák ÎÒˆÙø_-iïµ¼Käžÿ¯ž~ô¿fÀ<ˆÐôò_7ïäŨ?šdÿÿbЊÞÈ –zˆA5ý(ƒZú±-jñ;g¨/gPö˜Ä æ>…¢ ëÌ?ãþ§ÿí—>ûoÐõä¿ZæÉÿ*“*Åܧ00¨„­¶Õnzü?üü›ÿŸýüï·ÿյʇÿÕwÿW´/a`P‹Þô_¯õñÿèoÿŸ{úó¿Ï‰Wÿ5jþWÛþ_Õª¼‰A=xÙµü+ÿ­ç=û?å̧ÿÚ}O ¾ˆßñ_ͲjƒªMMzÜöÿj™'ÿwn}ý_:óâõŒãÿÕRþW´+c`vÌcÐ œý_·èèýêÓÿ:îÿ×i¸÷_=tékd ,k3S7iëíâËÿYxÄ200x200°¨$Ÿ—¦ã ¿u’º*ÊÂú|æ6I‰CLŠçA¦6¬¶ròGV.Væ%"BlRUšÉíÑ›>X ¼½¨êËŒÞv«[Åil™‡Y’ü’ÜŸ¼Ýøª÷­.ýØÎq{îå½<èïgEíº6„s×½:†sçöÚ쾓ÜuOŒkV8‘y[d^ÆY¸®\L+Š{™ïã( â|qgÝYxåÎ†ËØ_ÅQs‰¹ó—Ô‰Hü¬­wüËã;çÜíZ¶ª"ìÈúgq7ÎÊ!,e,ˆ/ ‹È)‘å"2ÿ¥ÿ£æŠH¬ˆ¤Íþ‚,Y+"v¹WDæÜjü›Ó2‰úŠ¢øEŠÖÚ(VS+VaÞ˜Ôº²¢€uPqÁe( ãÆ¦R)jq©h•ZãnZQ\¡€Š)UÁ)Ud›a˜Åb#ŠVO?¼qš4mÓô%÷ÓK^~ï¾wÏ9f_x;•"Eži´‹HXVB+‹É~EÉ ‘²<›ETt²¨jˆÔ0µL},ê.XÄm°•7À Á‚s»„ó™Z€hö ²Ÿy„„©©d?åkâ“böó4ÿ=@.±eE þÓ#¦þ,¦Ž Mpڪň:|’Âkä.œ·é MÔBˆ3iº ,¼œ«¿"‚ÿ÷íâ©©Kì§ìùo,8ן)Ë^³U°ØÈ·h1f_3&œÐcò9¦d1=¯¾yFxeày¦®'[àzH‘»t$h9ˆêØŠK¯BX˜ñŒCøxrJ˜­ï7ôï~sq[š‘„ùˆ).§3eتˆ74aÄNÜŽêá›aĬ¢G˜÷1‚êÛxÿ1Ju/ðvUê»àýƒž§[0v3d›µ`ërˆeÅB‘aö1Iùv*K;OÙyª8€Ã¼t-¸pŒ…‚EV‚E×Áy«.›á}Á€9ÅmX|ÿ1Ô-Op²£úß_£Æøµm¯ i{‰ÄšøU´aZžž'[0jŽ›L™¢ŒK`H>„ÅY¦€ƒ[|Æ`(²óPs‘ßwÞ¢L°åÅ`ª»`1õpNÖÁå°>™FøßhCPÝcÄ·>Eáó—hj…ZÃKtv½Á‹®7H¯}†Y0£ O·`ôÞfHš¸þ*ËÀ–^…œËetî)žÉ`ãbæŠÆG›Âͬ#gØ¢Lþ‹#n­}É&-FïmÆÄ4¦å1ïV‚ëÛ¡2t ¶µéõÏÌOÛÐ ß#|3 p=¢‡óv-Xl˜ªŠ§‰à\þ!C®@<Ág7˜KÜ1Ñøu@‹®ÃÀ¨:l»üÄ p¡â7 ŠÔ@Uy‡»ÿòbî?K „òK)²ù$LÜÚ8ÔuuŸa®kL:0v#IÆl"öÚöÄ10 Ž¡y‡^…”aQXÐe°¥Ü«V”`à’RìÈ2üÙŠ RVB¤º ¦ªäÜ?» !¢Ž+‹à¨¸aêÞçvnq²Áî±4Ø=– öPóš î%¸%–9Î<IÐyH•E]‡<ªNª8E@QGå5ŒO¼59zÄæáZqÜ/%ÔBžXybä›B¶ñ>¤1ÕD–BšŸ¯ªm‡xõ³²îCÝ­zQw«^ ×´`sÙLWЯð‘RÏäzéœÃ.<é²È" !_] ùºr8ÇÝÄðõw0üój OªsR-œ¶ÔÁiK#ä›› ý¢Ò!‰Ñ@ºöØÂ³m=ûKCLFdKD=‰¨›ÙŒ¬˜³¹º ÎdóñêÖ͆,,,{ôäÇ&$äÇ!Wœ…,, 2e>dª"ÈÖ”C[ Yü=ÈÖ×@¶¡²„FÈt`á×_ÙŽ ÕXvë‘JD*" $"7"Q"²!"ËŠ×ÚÖD4€ˆ¼{ØØ&õ0<§ï°IUý%~ýåÍ}¥~ÚÞC=kz¼?äYXfÑA"ÚBD‘D@DîD$!¢‰è=“[˜;ð?—u'¢wLy¿·éðwM-¶6í[þÛ! <„î–uøoIEND®B`‚6083PKË©&7XàÎíidToolbar_Blink.pngd›ù‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME× Ÿ£>lñIDATXÃÕ—Ml\WÇç¼÷æÃŸ“¤±Ç6`ŵj*,X ¤‘M…²€E‚„¤."Q• .X¡ŠEY°eâÙdÑØF"TABˆ –)Q­ŽIì*þ»öŒglÏ›™÷îaáw°Ç±uÑžæÝwϽÿÿ=çî½#¼€]ÿÝÛ'{Ű]ä¾jfùÈÅc¸_½õë*€•“gÀë9‹i±:¸"­âמ‘¤$‚ÉQïÝ»w6NÿRD®˜™¶ö‰fÖòÅHÛ">•ßQ©ãÌ#Š»©×3Ökaõä_'þôèuÿ0ð;wýdxxøJ___ºO“€suâ(Ê á¶âjóôö"5 #‰ço”“¯¥S•ŸJ •J©sn¤««+åœã fÆVùýƒ„ÿ!éÄ"’©ÇÝ$ý`U°%°ˆÑÓ%z"³õ­C A a&[WÚÎD„¤w›ØJxú BÏA-KlÝxR™·¶‚ÈIzºÂ´ APy^øÍ­£ऌ§›ˆöbœAýW@úqñ Š!R[Ç(òÒ)ß÷!~ä HTbÌé9…x/ƒgi”$PD¨“Jyâ·Š-•JI{A¼½À­©Ø€Õ±Xq  ¶ŠY±æ–Cd(ÚÀl•#Aì<ç7ÊìóÀw€6¡VU[\\Ïóö…¥)LUA웤éJ§P-ƒ<ç]ÛÄ“eªÕüàsxÚM½Æ~Céo ü´££#Ó\ÑGÚ/œ{•¸ž¤ZË¡ºL:ñ Õu¢(À¹ æ6PÿkÔ£Ìû6 Ë6üÆ488xBD¨Õj¨*G•ÇÞt¸Ø‘Я œ7‡¹-°MêõŽWQÿMLbÐ~¢8·“3ëñ<çqáœÐ.ÜÚ6D2Tãï³½ù%T>F4™ÃôÇ}¨'¨—¿ýä¼xsœ‡‘ ´ù’é>+ ‘z¡P¸Á»þauý< çø›ªþ;ŸÏß~žÍf¿˜J¥¼r¹ü8—˽yíÚµÕ¶"K¥Ò¹\îééébðÖg'¥Réöêêê?óù|&›ÍŽŒŽŽþFUGœs¶°°ûñãÇïÛŽIc—³Ó§O[__Ÿæyž +‹NU7fgg—¨¬íe¶±ak6›õ/^¼˜¼|ùòÇÆÆÞÊd2½³³³MNNþþÆw2™?ð?¬V]¹\v€A€ªÆ¬¯­×6J¥¨%¿qŸez{]nú?ñAv«`yyÙ©êËõzýòâââæøøø»<øã­[·>Š¢H666šaT Õ‰v±5æ’†OH>¿çó+­—Z¯1¾é[kŠN/]º”>wîÜwEäëårùþÄÄÄŸççç»›O»¼J«¸ï­UÐV͸ÁÁÁ¸†á{“““kóóóÒ˜TvÏÕýwCÛ£p·çÛ¡&Çì“=àíþ;üÙr{‹D'}áIEND®B`‚PK¡i6;`ÿõõ9ƒ3»Toolbar_Connect.pngÔ¹tA’¿)Y“Å –d13£ÅdÅR‹™™Ùbff´˜™™™[ÌL}öÌìÞìÞÿ༻‹—•UùËÌȨ¨|ÝÕý…þG„Ã…C””ø®øçLü÷€úS;¸»ßý9}v–T†ùcž0†!Ú°¶ê``xíðÖ¦œ¶?"¶£¨š£’±£‹ž½˜¡¾±˜™½‘‹½…ƒ|‘Ü?(ǨÉÊpØXÑëýBïje Æ+àj«g`aäH¬odbfÍGBLLLBlfÈG¢Ê&Ë(k+bdj&áno¤ä.§lànaÀeH"ÀÇëÊýg²•‘£±«•¥µ·+É?|rÿ¹þ+3ÿcˆ£É?ãQ“ýA,bcoDÌJÏDgÀÈÂJÌÊNÏÌÁÌÅÁNK¬¤çH,¥gMÌÌAÌÌÈø§bæfáøSˆÿe$üpj^{CcnÅïbÿZóO‹ÄÔÑÑ–›ÁÅÅ…Þ……ÞÆÞ„‰‹‹‹‘™™™îÏ:7kG=W:kÒ:ù?ß ìÍlÍl¬‰ÿ¶õômœùHHàˆÿÍþusz¶ÿ¹µÃ¿’÷' :˜èþÓó_çDn{#=G{eKþÿö8ˆE”Xxþû ÿÑ|£ïþ?ùà¢cä¤cdQfbâfâàfbÑø·ùÿôߦËÚš»ýÛt.:fæLgâfdÿ×ôôyaøo‰ù?›0CƒÿÌ—­“½å?‹¡ƒ‘¥‘•‘µ£ÃŸœ1ýלpÛØ[é9ò›Yé™1ØZ›ð2üÏâÿf|ÿTÿl‹?Û’á?÷%ÿ ëÿ)ûÿý"lÖà``Ÿ$míUT]3Γ¥ãæ¿aËÅø¹õ‡}5@€Âƒß’û㞟•&Û4m™Õ~f‚Ï}†,ðJ¸€¨ìßÍ„FÕp–?76Ãàñuqä[qW¥UfMßi9ø+®·Ð*ý«X‹•ÅZSkͱÙû­ÿZüFÍþF;çi;÷ˆ™í“St+ž{•ÉÈV–ª×¦sæþçà.~([sÞÌý¤!0«ä›)pÆ'§M")%¯É-æ À (÷¬„€µtùí<Åz&µaéUö!÷à5çU>(Uš:û=Q Òs"è"(«ÁMlLùÉLé(î²j[æòÇ©BÆÎÎíFxf‡}ƒl=*Œ(^ÿ‰Ö;¶eÛù0‰™†--&˼5ßùñlÝåqE9€ÄÈzT_-à,.«ô‹)ñ·éiÙèxÉ'®7ñÑÒ J8A奃{]f ^XàÙ§gâ{Šß/£aÏåŒÆ•[ÌOÑv\©¸æ`«±¹g/aò Í’ˆ<$ HÓÃôB|ûç9‹Þh$v‹UìòAsMXݶ5ÉU]|VÉJbï_Ä'U„Kéç7Þ=©Þ öµd'U—Q†þ›ÇЃ ò`ÿͺ&‰6.ËÆûHBÐþ4%¬,„Å^6G?þ~ý_4ª–\00Îu+ e¥?ÕKÓem0Ž~róZ´–vM’Ü£"«ÂépœwÏ%.:R*Œ*ô+•æd8 *;Eíþ ]ýàQžëçB¤f>ø§/T£ìãßeóìÌ<Þ;99±Uƒ~»yݶ.e¯³Uy¼ÆãY­^X‰†mVAÇãµé­%•™ÏíM&¹äËmÕîN茵1Ý_lúŽn:oµ•š1à9õ™Ïu| då¶@PÜmÕ¯km±¶]™X8ØÚå—SŠ üܤÒ6*Ïèm µgÞàYN󜠚7úÁ£ðÈ'—€h„Ö¨Ó{™½³›eΖoVåÄHÎÆ‘Û¢ÖM€³÷R¿²šÏ~ÖWáö£ÛØdõÌfNî}áÞ¥ÔÔÙÔàCúíóšÕËÞ´Ü99{ýµ¯Õ™ 8¿Ç*>«Ù©o¦×´ ÖŠ Ð``óðKg·JéÜb.{K©Hîž™F0†Õr‰Hn]o·~|ÝOc—ÐwiÃyѯ·¤uùƒžŠü‚…Ì“ýƒ†Ë,Õ …ËÍÖxl"ëÜ}ƒÓð§‘ÆÌ®øPÑ}Û¥,®'Y/õ[̯íg„ŸÌ“ ðž’=Á:·Á¬©LtMÀH± R §(Slõ…•šj§ís¨L50Óü‹¸nXý§¿}yh“U™31BŸŸ%gZønÇ•3Å™ã6¡½þÃýê®1Òø&]z‚8f¤7“‘çœ4ƒ;dŠÕ˜ßê”óà¨à¬é;§›O•nki]*à`ü~@ZŸT]=»Jºª‚ò®^kõœ°IâÈcÝÏF©ˆ&Âÿí=‹9†Ý%!KZÁ<¶1—f|±è5,žß%c±ÓΙ:jfö™[:ž6(fàK­µ‘MÛîц›çð³ë†fs¦Z¨ø>]{l{y–ªDÁHòífŸR(“ñm•O“9mí"ÅLs.q|é£9 8¬ÔbFÓ%¸lP¸ÁÆhè{øîäoÂ1œ‚Ñ\‚Ïî¬èfŸ‰Ö ÁÞe|OŒ¡YÃY[ M XƒbF¾0ã“ã]åªò·#âVv‘`¿ì‚—,eçªZn'GÌCÕùÍãâKy¥°¹bæÒ²zÒ#mCrC;À£_ú+]Øö™ô˜+P ô>²ÐòöM¨°Øóœ¦™c6iJI ~%ŽÓY<â²nqçãHËŒÎG´RÆn³ ¨ŒÄvtJþÊ‘¯™kÜ‚á.Y;­®îë É“¹­Ãä+^€¹q“ïCÝ7<Á¬¬¾Ò*ˆÝ3r˜ù‰jᓯԉŠn‰b=tƒóôœ ÛîíBÝ3V¾ 2—˜MCsBžš²Ìw­Øœ«)‘×ñÓÏhÿ’‰ÏǰW/‚X¬ƒ°½EìV ]¡ Ùç@xW³VQâ·4M­BB'NãÁáñ —$ŽÑ""®mY;²¶ïÉu&ìŸÉøXÄ§ŽŸù(^иüš#!$ùGÞì¾?½trøï®£‚àIÆÞPAÒUŒýÑ»àu$WŠÙL¼B'ZØ[L2WºŸSòÞ ›¡›Oö˜údÎXk™höˆÇ$c¥fsîwÙ ›‡’&s °ûäð€Eƒ‚׎òÜ®y„û,÷…FƒÆ×¹8ˆ(Rbå·Øµ:@8D)û<£#æzË ¤‰éÚT*–Oý "òŒFgîm¶žè®4Q7¯Ó™¹Ëº”qá˜B taä"±¥)èbhßñïðé¡ÀšÂ~IàâKVº²/ñ®É@°¤¤ÞöÜíÇ;âOßU—½éô‡9˜ñ_ªW&Ž/+ '}æ{b_òøO=fæL†Ù M·¿8Åu_qQÕNuE&ÞòÂi~ÖÀÂŽ kçr¹E;ëÃu‹În Yž9 ‚º7®‘÷?2¤k¥ÙÄ÷ʇ“îÉ-Òâäó¡ÀH¹# eÜÁαõ–ç˜GŹ’Ùò•ECï÷ÏDýÂÃK›x5ĉ¿¦ ¬O6ÕX¯úÕ å~àßN½®¤—†ª/yÄø²IS‰Ò•|¬k" Úfrqø¼Îiv=Œé§‰ŒÀe[\ú™Ø SZÜ\6· ¦ 8,Û•ŠÏ‡VÒô(.†6—¸Cr«ž»ÀòE²Ý5ŒLjàï(ÇIÂáÆ÷}É~ʯo®­Yz€}»_dÛT_J z‰‰ó¿`*M©éúÆ[ç‘슜iqÁ”l=XáE)Û€ö&cvwØX,º²W׬…1’-3BÁó©D®4¿3¯'ê²_`›Wª¬]Nž^'Ë7ÅÅnÌÿ·þ½g€T=NÖe-+Œ\ÙW9Æî•¯ÀhËþ™Î;Q"f«ÆÉ–Y$1¼±ámJËŸ!¾ièþpÈØBÑ« ò«cºÑ-×_ Àô·]dîÒÞrÚ”m¬Ëñ@¹k¡HàRa¡ŠÎÞÒ¹§¤ø†:âX°Y_åé¶‹®/Oû“+ÿrg¸"~ÉYïõÛÄÚ¸†++2DãM0Åg¼:DŸ0MÛb ag'’¾÷Tà¢+ƒ4Z]M2,Þ½+çFüîMLe Ùö(ÕCä°Sç>AîGý<¢JÛ¶p§1g&+/܈Œ)SÊ[p_ ™Ê 7Oצú»£všq¸] Ì®{ì“aÚ"3¨(ÿó¤°-Ÿÿv6zÿJŽ„¨ÛoÁ^Oß|.Jm÷oüQ‰ŽÂè¶q˜iŸŠ?°8W&É6IÒoB]“õµ¼’нw]e¯u“1µ§EHcüì _Ä$Ž ZR¥÷ch^QÎ'íÇ –ô|‡È}þf‹%_ïsj¿ÓïŸJV!AÜBMšß%`墱Äq~§Ý?[ì»NVû}„Ô‚?.'JÑ¢™s!†}/ˆ½/·CVcý¢Á4Y'zá¼v;ÜŒ‡;ÌqÞÛ®Ÿœ•JÃ!AC©R’ÛG(\GÐc}´229H¥õYëì¦TæìEëÀed‡qž¹öÖƒÉóLè¹u¼ ¶z†BCýž.ö›µ+LÀòtS?ÓýõÖô›üŽêN—3+AÏž›:ZعÎÌ{¸ý©Ý]Üoô * Ž€‘‰’}•ïÖ§ZÖ|‚ƒ¿ÚšG<„ÜOý" _ñ–‹3¾+Ç™¢„VB%…8€}bÓ1Ìê®â-¡¡àŠ—œ,'SÄLýL?âz¼FµTèœRˆò²¨LS ­‘ÙÍfý%D¾~]‹VlLFKè7ú9KMZAÏkmH×:”÷ñŸp~PðÓ`ö÷?zØ¿2Ã]]¢Z H­èÈi8‘W¸« ™u-l˜X*ô&ñç¦oñ4ôÀŸXÏÏ Å“IŠ”J5|«•Œ/ÅêA/Ã*‡ãA.—[ד£×) ÉPñï!X…óx‹â$F¶èwSS’3&%¯SøVÇܱŠ7º„OáÞ`ûª0ú`?‹ËbIc–ˆcéÒçVÙ=@lï3ÝPÓæq“±×)׳ðÃLÌ%QðÌ1ãôéÜPÅ«ù0ój3ç 7’'^µ>®ˆ%ã¼²u×Éó wwF¦AâPŸÑ²Ý;QJsÜ”˜uÞŽ ÉJƒßñê©V«FÇÝm)rCéÃê1XY”œüˆn”õ2ûõ˜e”W‰Ð'ªm¨VeïKŠÜëÛúEY³’¥1Ò¡wæuáÔÛJ»¢Ì.RŽßHw’þ2‹„|ßžöC=œ84¸˜X=·ûr“Öe)ª‹9xnÅ[ؼö]uÔ!ËHè–jé k·S2¦à,¦½†§„ú#{Õ2µ©¦$œ~É&;‹ÙY6óá“96ât8+<»Ó[úÕ4.®Ý€¿$b.dôàS¬¿o¹Bò@ç6¹JþÛS?ðìj'–ÈäQTr`)?–¯œ§T9‹çÞˆ×ê7ßóÄÈ ÊÆR#Cº9ÓÁa„¢5C¢Hg÷ýûÙ‡„MIÔ‚Ä©~!ÒÝdmLga•¯L~а«žJñ;³eÿËqI‡qBå!¼ÝØT‚Ç †zÚ’%®y5–þnŽÂUr¡¤›ì߸N±½Þ_8+wæg_„®àΠd5Æ8•Ñ4Â;/n“Ï'ô&(NFó73¨,dóWÓtÁÄtÁú6'iK´½ÊG†” lXÅ%è‹aÇr,çp1G­ !qz(“"O~ï{&Ž4èå!Î%há¥g™R¶œG\ØRIeñÖ7R&GnžN‘>µmXkoY6‘Þ¦(FòI™‹Årì\²ñíÌgcáAŸ:àØ·nœ¶ê¯§hnz1¢1­òÑ:‹µ®>ÁúˆHZœ²Ý¸Lëñ¢p=Hž-{¹ÇÌdÍî½ ˆ•*TT˜^)`h?ãt¶UCví4¢tØT"­™ÿÈŸÊ㳸R À}c‹ÔvúÖ.n”ã)¶¸£ú&†»æÀV ÄÓHw,õÜ~ý@ÔD_{53´p;΀õ70û†_‡h H$Ä”6Ê-ÀùH`ç+lúÒIa³äÓ6MEà‚‚¯×¥–o«í»—ÜØåúëŠË˜îÃ-˜ù»gƇÜì—¸h8 ì•­/žÂåY_™Äò=RQÝÆuE¿ÿòI ÇHpä.àõž'=}ú \ÊxrZ2³z'âu Pa”Âïú4Tëú)©mßÜ$»'ܳŸ…7—%ãÊ·«ü=6ÿék=¾Ýw—¯<̳öàmVþ`Ó¨ÕžÁ–Ö‹lyò­oÐú%oÈuöÞg¦tÎôX°b¦qóô#Þ/nÉ¥i×½€ÌÑG^ùµëáÄm‰™Ê>^ÌÁê9U„ÙËA†ôÞ—J»O­c„w(Ž7´ø¢©ç0ºð"Ï?sˆÌü†!ñëzT3gxÓìCZ?‹?ñ^ÒDUrºïà[ýÄ×¶s˜iárÿ¶}DÓJ­¡30‡!ÏV|VL“UéÚÊ(¿Çõ KýçÚ}‡—ŽÙúo¿*oæäÜ…[Ú¥<—œ•ÕÀ:†CZË}X Íae ‡C•ýáG$íGó¬GunX)M‘«R:†’ªŒ6“ÓŽšD`)Í?Z)ój_;Ì}’—¾{NŸ™£Žê„Æ×>8ú‰ÿnew—ÂàÖE îƒÇåŽ!¾UiGý'pnq?’ütÖ_éoœœò><ÿUâWý£8l!þUþÆ%ààþGRÚ‚.ú+U¦´ºÒî¯Ì”¹¾ð_9&æ«þ…D¾)³‚˜da[} ¢¸oèª3üÜ©)ãlŒ Ÿ”àEŸ‘Y1–GÎÝ›âÉæ|WÞ~vÔyv]óu(å“È÷GÙ¹vÁL²ÔY°Ïå<ÓÝŶ´«œKÅÕÏÏâí>χw˜ÆêÀb›ûÞ— ïÐ_ëÜKͦ d/EÑ-“zýXî±Uü,+_êÉ7X0Hã•êÍ¡Ú÷Yj†gé;i¶žFš.ÖÌül%$¦¹m‹ŸÿelG¦×‰ÌF‹ ÌJUz©èVþÉß¼W’ÀÜ`Áu;Ê5E”e´=étÛ¢âŒUˆ.ZÚÐ2…éÚÑ?„üŠ-³¸bÒóÉn@| bpïyx~Q¢Èz4¥ Y÷j£ôÿ63HÃ_^ÉŠ1äø\oÃVäå½±až%§ñÚ* –ÕL@Š€5¯ýðàxÅJH¿ÎCÛŽŸÅÆ'q°)\OäéÎÑ3˜æÄà0÷×Ì5Zk<645ÃuüôÐ 7›2®o#¼ÏL2~<²yÜÖö)ú`Å|ÞYÖAfŽBûm˜‡ìMð¸)}L/H`j÷¦+ëYÝ5 ó zÝ­rGûðr[XàµÌòÞÅðûëCë|ãê#2óÞoÆó£ù±ÙŠWEŒ+€œÃ¾ ¡ 1Áe,R v¬6]]º™AGèWäI2…ätádÒ…z­Ã¤é0J>s|9¢ª?$st¯T¼OdØê÷„5ë—½5p gb|MÒ–lŒahá{4ßÄXmT:°~ïK.i"3kõåƒTÉn¾Û$´þëúq÷ªøœü9”%J´}Gꇧ8P€ô¡Ef&Á„¬íèùŸM|º€ŽÆ7v‹°{G+Sò(Aš"_î¯B§ìáöÓa1€/i›†eO2y 7U¼9eÕ¯Jq?wY÷p…îÚ¢éSNŠ~îf£ðžßÚ‰ªd`SÔ’¾Ñ:63½©ªû¹ß!}ت:hµ3_'?½èË¿ÙòzIœ½à¥ÞÝŸ"êzR¹€t®)ìò"‚¼Š‹N°pu•O2aß³ÊøBscÛ£°-âH™•—O¥*Ðì4±ä;‹QYk«éôU $B–¦/ º~8¿·ƒ>ÛP¨ö;¸œÎGûóku{=ù^ÌïØõúÀJ¼ ÄbK§xbÜm‡i0·DáåvÓÃÀùÚ]ï^\|;á× N-“}»~#³]´’®ÝM³~“憦ÈM·Ëö_l=šÝvÏáº*„"LÊ«užh=ÈFâ¨%ÇàÛë/ƒ~Áºë<È;vûÞFü`vX_}I«±æ2é»[æ´¶ð]¯~ÍÚ¨3!6' 4î&›íftÃ8ð5LUø.ÑÒ@÷E£ã‡¾#îŬ`¹ÉH‹“)Ö`EËP`.ý­+º& Ú‘ ‡]à 'ª¼uüà¶e@ö„ÂàÞ-e°(äco8¶kð—ÉÔßy†¶CŸÂµâ´Ž’·Ò.‘žŽÒj±Ù•Œç¾ÏÀQ˜¨î.˜õ4tÜfîmáË(Ó„Dä°B­_› HÕ«Ôʼn*É`Ât›9@óÒyÑÂZ{Í!(†¿1õ |çœn«ñ1QtK?#ƶ)Õ•œ?.?xûZu¢SœyS…Ÿð/ïqíâsHÝ<°s‘”b'`õäÍ=ŸÆs–™Î 0ëG×ÖåT å£%Ä‹ÛÛ]~§²ºáõ²|«Á{ãwÞÈ[|9™1¢sÌ4<—µ©ÂÀ¬o‘Û ’¥}c9ŸzsŒ/_$­˜–xÁ<¨Ž­úìÁ–"R]ñ$ùƒh$ bòh+Ѹ=Ç"øú´Ä8¤…QˆÁ[†¯Ø(ɘWÕ™ÒØ]èÜå0àú©·?:ÒchD¾€„[`ý&aWtį`ö´èa¸î…üø7¨zLô*÷.ÎKsža¿*Á@ßx¯òÞ,–jJ¹¿‚Ý)¤£M÷ÕKÞ^}¤°Í¡ýËHkf}õ©5=r²%‚ømJöèàƒå€”½%@ÓþBüQG„°ê*U¦¯6!£ª™„³Ç_éí¥ÒÑÆ¼$ÖÁG)–§¬cÉX2Zc(}t«vpÆœKþôV¦ÌvAìÊ)ƨ›d¸Ý£Ííú Ú{+gSž?öÝíåœ:«»'tãèM›Åå"ßè]@åìt¦Z-ˆ±, ¸±—€»Ç. 1¯Úð]s¿¼»ô-¦ç.%‹Š•­?{#?´‰”b=fÜ?ÉA”ßH^BǪ¶£;\rãmÇö.ÊÞN½©Î5';oîã®ïÁo}ã29Â$e9õÃ$ñ;0´;¾NVªX¯dØ5ßœª³¨cÕÛ´”vÞªÂèëŽ] á4ßwןq£«¢Cë´¼hK?µ´ì®—†žU-7FwXé½a(³cT>Áß×Õ]g-¯LJ†/KMeÔ*Öÿ^š‰–> c!ÜkåŽLe<Ü€¹QÆEG®“gâvç¸M¨»ô¹Þ»ÃØžŠS@ÓP ‹I±™ýr·‚¨‘êm`œßzu•¤øH™eu“R8,À‹-7mDU…ìP»ZtxÆf \K|µÏíŠK’|Ù‚ð¤O”&¤Ð­Ëu>KÅÒÞ]’Þ5{{8ŽâcxŽ, ¾^ê¥|N‰ºjùjÕK¡š³¤љ؇:*˜»8Ü~)jYH]wÍR½ Êb±ªü6_‹¬ß@$¥ä_ö:=øMó¼ÈŸOÓ9µuÍ—[ 8ü~ÎŽñþ>‰Ôõîôoÿo7»yõÑ¿ùvI@!€Yî'ÒéÏ Êæ´u^ºzž•Ÿj¡]˜–-d­O~k”Ãto7óe£É6E·-qœ¿ƒoöª‹6‰¸ÌnÅð@/ßÑ«ìH¶B|àÅL¥o Ѽ¸Î¥§kÞYÔ‰Šɱñiºv#e)g~̾;Ùè­˜ «Ï 칬z¨½ÍyáS6­Lg]${Çûž;ÂÎ@X®Ëu¬q¿“Òj”ÝI~Ò|÷âµô(‹æp¸jŒîâöziàYŠ?C¦ªþÁʉC+²2ß½æoð™ÎŸë‰UÃob?Þ?7àôcæ[樲ÙFÞæ+ì5ø5÷“2Çrï#‡1Žxð<€Ž: UëQ.ñÚ¶ûC(¼’ýü?FÊ…Ê‘?×HO°Òãõ³KUÜú»@)^©R÷Oh´j3°âëïTñþ ¸>íÃ1Z±(²ÍïØhf½ˆÅ <ï^¾žU}Ä>ðO.ì[þà«=ˆâ|³H%tm@€óT'rq&ÒÆºwöÃÆVžRë&ë¢ïù"ÍzçFÏ©lqÕãö& .³h®Ÿí§÷D°§&ßGÝrâ¼–êêÚ,;>Q#•KÆŒŒ¹•Ôa¡Ãíl‹ÛBþâÏ[^ƒ@¥O²­~ëMÕq¾²ñ!*_j媜¼ê\#\jž’Âøß˜-)·jãPŠeAÛ!˜Žæó¾~ W"vž9cŸtç“xŽØ«Ü?¿§Ò&T•- ®Ðª óWHý­ÓËs*óܺÙü¶pêG^RÿOÆNƒ7Â%¼þ€à š«GB¤^Åev/«ø_¡“"Þ“f¤‡´–2Aœx?Ã"O«Xê+X,:ª7MɆô®8²¸Š'·Kå_µs¸]8ÏÝB;šøœº¦ºö!® ¡=K&Rоå{ˆõ¢¡¥µ&þ*Їš«FgH­*B ì®—„yÝ /;®c†;6@2‹Oó| Þó?ÂãH Ì.ÆŸØg¡JJ3™LžAh"Ëç=gGÌg‹š¡”«_uN%¯Yû”¡†çÄ´Ì+­ë ýžÊrÊ@”Ûø+q‘p¦1ìh*Îj¬ø3÷ÖÏ‘´R(6 ;Lòø1Á¯¾%ÿN+L1Ü2R4¸ó{Æ]Ë^=ý@h’]DÒä’zš!S mPŒÇÚÁNøÀ0ºjÀK!¼Ç)ÿ/ŒóHsC´ì“”÷à8p4'‚³À nfÎ¥û·dÉþƒA& å3›*CEâGŠÔÁ†ÙÉYàLR™\Š\ÉCýè$DýófÎŽ#¨,€–Óš þ%òœäK¤õ1Î1Â×̯†Ì2A1#Pž”‹Ë!È6A4Õ¹0AÍ8@Øý•ä:ô‰˜U]ö‘Rä:¨)’„_AS…=óxÏÝZ@]ë™ôD"ë'Z5«xý¥^Û$‚œã2œ–L'Y¶ðµŠBf²Ð/_$,îð›´:²ð¤ó'‡f‚Ø©#´…–ÄZ[Çbð¦F*~Ô­Ãu­”Ó vùgÖªÏR  €Íù[?Ï$êíãPÿ°Ü ŽØ6¼•óK0üæDÃ8_ µš¿`ý_rHNG*Ñbò’”m'ÃÈ¢ëilþ—ÙëÜ'BH…tØYÔíEïæp[Ó9FíÔÿc’àø0ä[`rxÄÅ×üîCBÞdG·}*m*hV¾3ê.¬š]-Ô)¤²o8,Îó}-·DNŒ†}ü1¦ò}/YŽ÷w8µ²T¸œ3ÌÝj™dŒžHR£Ix{ãË£¹Õ¢`‹åvY1ëiñ¦EÛéÞßÉ7¼Æ­“pa‰lèôSMJB'¥ƒã™÷ô°ÉQ2%hSx¶˜aÚÞ%oGîÍäÚ3ý a4ˆjÇ8 ÓñT;ö 2SygX/k¦Sû6KCWžè¤}sÏ“@„ÇÒÛ‘jjÝ"p5}ãq¤Å\2 ¨€"“„í¡‘Šz| ³|˨ù_“; 9Ui(žvA铆ªX¼G(ŸR›øó‘Á—qÜ™;ÀeÒdÒ£ÅBœ®»7†‘‚T«—¯m|›§ºäìxýwñH-2èe( Õ‰²uäayܧ¯ÂËj"W¿Þ:׈ðP›Èx¿Òƒ"5×´p­È{SZeoaÌÇÅz+WëqBÒ8Ðú(z®.‘”—±õôˆÑLm¹òY[Ä͘É“¿J }û:ªð»b>4?µ•/ÈYãüV´ª¸Þ"´üñNE5³å,VVú­Ä,C=Öæ5%©Ò b Zîö“|ؼIù&–=»~Ôä®!N,»,}‚x ÅX‘3ãÑø¶hüЋS´²á‰·d€B87B^– Ð1vþÈItµS(é¶Mý‚¨)4Ú‡7ô@Òšæuƒë]l;¦› 2Š ™ë~&IÐüÅ^PZ'´N‡_OqésL – a¤“óÌ4Éq5:{…‚}R-pÁú¶›H¤Û2d4<˜™Àžž¤¦‰0HB_6Ô²îPh>¿’¨ÌkE:¬{/×í¦Ÿ¬}©‰&¼ô™LˆNŽ}¡½Š×+Q'28B÷N:É¥ˆù=º/ý¤=³Ô‚«höc¤|éð0¨^\Š’¢…ÃPŒF¦á·bùü›òµjY.ÏæÝ¾ð6"lÒ•>áá×=?cŽa²÷ñ öƒ×P ÐìVäVïdŠ®ñx¤õ{°ñøý]CUÈej‹`c$ëÁ&ÊÐ|ŒÞÉâÁ†[@4/ãzuê­\f#‘‰EPf3‘ š¾ø1qP'¹G#û7%¾ŠÚºeHwôCÑ Hcûn¸ßÖ6·çV|¾q—å2"^’B.©{ÊãË[¨Y+ÒíÁ“l)Ò{‹ü E«°ÞEõ.’ksyg×êZ•aûòEûñ;s¬ò‰W’mh ßSÊ T%ÃÞW·Oöbë¡0¿Iìæo©ï[ ];Ç^ŽH8+‚8E7y³CSêF’;DŠ&¹TW{L ppÌ]àV4¶{ -z°vã§:êÞà2z´/JFý¿eÔ¥ñqî®fj›»*n†tq—;<=%>|¬æÈ§ûÿ:uÔ¶±7‹Ý„ô‘\û®WÅSÄ™Yí8ÞFg߬¿‰þk5NKq‚Í5bx{,4‡Œ~g7ôÁF›>C1¾–liÏÎðî±ø\îôåp“¯´”€` ê²‹S- ½‚Kª‚j‰,“ 6,3G”!‡Ïú , eipløþ½ó³2¹³Wå ÏU¨9ìaÒŒ0›;b+à’GÛó‹t:Ÿ¾h¡ÏœDâ¡ê5°JwC³\ÉÆ‡°bŸêúm)ªˆÔ•—ÁB¸fƒ¦ÕGÁ:VUÖ>|1!>½gßXÙž†¤É‰¾‰ÐÇߣEAë ¢¹§©qV^“Ü~öþ'QK•±7þÖÂÜx$ •Þ1˜¹÷m9Ï3;ÿu=L›­Õ %6¨3QdŠ>>‘p÷±‰¨Ð’‚>é¯8ØßgæjIÌ6û†½ž[Q=tqS-†Ìv`Ȯό÷“™f®¬CaÙ f@‡nÝ;¡¶#£~PFcOJÃjmÃ6‹æêZâ’QÃ%AAUΞ0>ËbY#GÌÀH¢ ¯ÙñpÍ«å4Úx>Ù¢`´C­±&ï<‰ðÕ¨ß;µÁ{êØ*~¶Vb–“‘Û;©¨®u$N;ä™ÂŸ¯Gœ"uö„ô¸§”Y]ùÞ 0âÌ6²);•ˆ¯ýyèõ˜bVP ÚÉ£¯¥õUåꎅÖÔ†ùM·„óótô~âÔÕX¹¸Ð,VÊ0†´†y/ëe¼ëÁ»›Øçê ÇöÄ@UÉPõ<¦òÙXo}Ó8þ‡»G³ì>Y./P“uJúìÇÍEúgÉQ¤‘ôðjŸRa:£ÍÁ¿ ºªr¶{¹b{Üþ âû`˜Î•u0ý³adkA×ÓMZ-›+jI¿I0rôgƒu'a…Œ­Û²î†dáMÁH Ã鎙ÒùˆÜdÔQg£×Šr8‡I‚½G)þ då¥É£¸»ˆS¹˜Ó‘µ]–‘ߢµ4ø06Û÷Aø:îód=Ò ]¹4%›n•/ÑãgÍ@Ï\#¡ŽÉÜA\Ïl;qTC*Péo,uÚ3h¿=\9º ¢ÏUÓ“ºÝû¹ "l5¢-G¯:>+›ø‹žy•¼'©µ‹¬æE°PºŸ¡ñ´¥Æý5Ö†ÒVqVï*5<è:!ð¶è* /«Ž é;¾¥w ®ü'ÄØ$Åï´âíx(‹åhŠ¡ØrUv §òYÝ—maÛÙ8÷Cyù}· ¦A-}YY'm6§ä¿ãqãüÞŸ9k‡Õƒ"vÂæŽ‰ÓÉÃeås ·ã0¾iâ‘é§æ¥6Õ3ôi¾Å0€­ùp BÏ}X/.—þàŽ‚½ÇúPH³E×ü@Ÿ;޹!¹ôt!e™¸d..‚zD8L!óû¯ilÛqŸ±Ã(t[¤+pÚ‡Åyûиû`‘ŸÆV‰¸48kåÇPıjIIé°ª×`ÀèÀÇ\†7<I_ Æ||É‚FAŒ4È›×ç @ûXÝ@rÉó¸³bù4—Ôß8 o ¥žS·Ê‘ÑZ°QèçëL—µ:ÅMŒ”Χ]•Æ“ˆÃ™±ùoœ­â@7À_x4-Û= ˧‰šœ˜¡Ìüœ¹ù°›áµRý'_ûå†;5B$ñãï5<Ð,Öîpo÷Ø1ëƒdÎÓgVqYÚì/¼ó˜¯P×frXoIõHdy´1ôëêIÜ @ü)£ÍtŸ—ºZžÒú—-Á “ÈhÿËaþîñ_`ˆéª‘7µe•¥bwÇ·}D-^µ{dž?ä9òzÎù²6‡;ÔˆÓFhiDþ¾–[usxÎÀ7N-es_·‹í_¬‰¢Ð†²«(Þ1i;–r{•1ßž^¨Ü:Îþæ6Å‹(;ùq’ƒrÀÆ ?e š¾qv›êöZÆÚ©€—æ’l±Í£¥@Ä‚Lç)’=ÙÏùÃ-4;r±4w¬^û)¼s?ÅóGü ˜ÑúîAlÓGO‡Âc „x5è)ƳsêóÃ`¾^v$(¬a[`['Ý1Z£›Ñz‰›â¼/ëùÉ §™î®j[ ùh“ãÊæ¬]|»®«§cÈj¯†yçݬaåU]HFzÑWA|ÛFkƒ„}¿NùÉ=1 4BP7ùíŸvŒÊÁŪoC»à[!g©,BH2 5ä/Æ'qddy Ãz€ææ\âÍÂûšò¶’–¯L¨!ç#߉Êc,\•Íý dK:ØßƒôöùÑ‘0B•“…„¾ÒÁj€M¬ QÀQÐùËRšŽPÍ*ÉmgpE„â’¿8󊼻ÝßfR°•<ÚE&‘aG»Ë7ùׇ„S3eVÄKº":• ,ábVùj¥ñFøœW/—c¢'Ü!ŽÛã©ø¥56‚ûRö. G:Glã—\u oàL<>P| ç:0oѵ·ÙÇóô®ƒS4Êë=]Éuÿäbùͳ4–ùP#(%Oú ì…›'…#Ú©rõ¦nD+í±«»&‚.檜WTQ.ùÝ?ž6ä[^Ã@ÔÝõ3vck*¤¤8 ˜(’ÝhK"Dî;õ«ÅãÇæöê¨m2C –{Ÿìjøsb½œ¨0ëªêqE„ÛƒœžžÕJ_ß)\_±yZH²úNu‰X²ù=Ñïv^øÎú ‹‘¢Ñ>¤w¢úÕz÷Ër UçãVÞ4lQ·xÅù‹“0Ñ·CÐV9îîw¹I£Ié¥Ñ²ß1åHùû*: é®0Ç=€tå°›Ÿ¢ÆªÔ>×Ý`SGçþ­v6Ýhª!íÚ‹x2¢ƒ‘x?ïmºÁD“>ÒÜ‚‡´Á<³úu¤\8‚Of^l¿6×ýbHð 3k–m¢mÄè’A~K9åZnK;uË~Òà^ª£—n"[RH¾áu “5×Rò)âjÕ—æEv*ÍÊ_»ÉÌ­†—- źڧ³B™à½YF1f‹sÑRë£èô/çsÚN*[gºiÓŠ¾„Å÷[é_bc,Ø“îqEÿ|q¯îy¿”å¼¥Èx§ú ŸYƒ&ÎúÛGKè–Ç®;Ó®×Yž/zà9péÝ œf7ÕÚßÁ_%8hÓMÊ!{ÓDb-¹b ˆÞêÚ,ŽE>dÜ9KË KöH»I÷—Ÿy‚ñ¸M›å— 0Ù%ÝZó塽¤ ¨Ëz§Výˆ23ÿþ ƒ¸ùÂwÔ÷ˆ•pç O½ô$Ôšytš*ŒìgÞ=sÞ ÙñC„ªË)@«|±‰Ñšú–š&j%ß5Ôøay[È©÷(­®üØC¸D¥‰ lVˆkjA‘Èi'&ÇÈœP¤÷«‹†Ç x$dB:!âfædðÆ…{P(>+˜ÇQX ÷¢ÔkN1&‰£é-rOÉ4ÌÝ=*ªs&œnØ-õw²Í|‹Ó Í~‰Í6QÉXòq¯÷)ôãû˜È+VE{ 1xs‚™n;Œ\‘¾öxÒ¼µÎms&ßsd_¸NeŠ} UhÖ oYÆ0 ¼ð!™¡UÎÕ™‰iò‹XðÃ`†Žyj9z·w0óm®0ße_ø:݇}p'é3/Ïhç„€ 6ÅáJ¨q•ËR ©q…ËвæLƒ‹¾µLÃn¦Ñ›2ÍfWÆ¥“ÐkRÛà-O¤ =æC¶¶{NuCødfÕôëKJóS¼8æTÿF6–ªÖÛ½ÝÇýƒËõz06–|[zÀiú¡Š‰ýž›Îžûdý„wéo+Ü9gÝÓ!t/¬Êjä§Ué«{sÙ*'Îv…âs!ÿçô°}±`@ÀH$»Õ£F½tÕЉ³º]Ä€£íz{§–w7à+D@ϱ7è‡Þ¹žì=xʱnð_èlÕ?B»Âkfbn mHº 9ý¿†ï–ÁZD7`¨W‰”¥Vïšeey7‹Ý¹9QÃ÷É3Û½(~A¿Þ#¾·+»–O«åÂA&X­Í¥)‚“µ{Uÿ:ЭI>íÌ 7ɵ!- ˜Î,mdB(ÓCNPÔûšC„xÚdëž]8©ùµ(d³V¢BùòlñB,ГÌPÁƒ§RPCäzCÈ_b ý½ð»­‰ˆ/Û!·yÒmzntη¢Üe xmû‹¾ÇÖNe"mŒñÇÏ~`bTðÅõ«@[9àÉ7ÞÃ5Ù¸lßy¼òôíõ±Òב¤ —ËJ9Uîq/]»+Xd™D0’,ªìu-yøîX8ß³Þcªè—ùO¨Dš®p0¿ºãvmÆ÷ßov?ê¥iÐ_¡.e\Üi,qð…¬OîhR¿\yšõ$7½Áïɤô0Ñ]©¸h8¶d.Òˆ? ¼­Š¦[t J<„B ¿¦Ì€ˆtí¿~¥Lºëµ²VrÍЖCògür¶Ðu…°2ÚT[‚ÒîW#‰††LÞaù°e…ÁÕì‘2r6nl¯Y®aÍX@Ø<èÄ õ=—)¬©KÊ åû|R¦XôÆ §ˆN[BV°.Xx "æmQÖúóº?4ç0V-„qŠ‘Ëƒí«¡fÜ?ý°töa$–T æ¯r¬\•lÀ“…Û‰ö=qNÅ^¤² [ TAàkÉw=Æ™6JD³C;æH~±ôóÞ=VrjeãØC7ˆ©]6c%š`00¸†?w£ü29úæ£Ú öƒ¹fœgFÆ®q"ˆ)IàJ~¥"‹,ˆAS”°ŽIw¹½€—Q¯"XseÉZ8 .€AÍ‹yyvÀÒûÏâ*ÙéúX»Š&´QüŒòHÞYy¾Úé³éªt}ü~\í4yWåúÐ÷ê×>µûp•ôÑÒÖµ`CáS)®ŠèÁïý¶¼¸ õq²ôy¹;^Ú²Ùê|»9óyÉ{Àj¨º¡¢f˜<ÀÆÊ½kU®NÕ¬Ú<Ç;gjšijô¦¤&3?¸Ÿ}>Þž—ØïåAt- 1\Ìú@åaôÔ¥K¬;‹ÉoMh«ŸðÎöÌ7OUGûSLûÂ> ± êûClÛüÜAü`£|Lg+# òùg—K„#·}Ÿ2:â¥ÕFÚ÷qµ‘-w°£×Ä,§¾iÙgÒ¥¸ŸÚ§ü€Ç”n·'õ¸!çÖ¯k¡÷«~3¢Óî‡C=‘ö„Z†Q1Àä•J]}“ ùÅêP{É6¹¶Üj•Ø=ˆiä$í?)Š=´/^½T ºµa¸T¿Ùx!Ô:±he¿¯t ;:7‡ž:4‘ȼJzèlKz¼Í|›Z¾Žö rËztêì§ïH|}Übj}ÜÕéMõEÉ’¿»¯õaí[“fNż Lj?CÈm "´¢ß‡;i×ηV “ošˆvÖG·¼Ù‰¨¼B'i[ˆñ,;Ï€wðË&jĤgÎ@`=rüƒIÁ*£pV*æÍÅÙJªÎè–Ó]Éž_%ÂÉ´c»ÓJ ÊËC;bšÞ{ØkÚð’â9uÚŒ›H=œÞ©kÇmÖú6CП•Q¥îØØùˆ$½uÅ xmñ ½ªewOn¥ÜPнíÏ€(;Tc¦^ÒkkÚÃïÖ°€/›ÇPw¡k°­­ØÎƒ ]S§ûò£©wŠKÏ}ÎgšÒšB^…tï.ç óV3 ±>ˆÅ‡ ¤»˜¼BÚ‹®]eÜ7‹ ~ô1"ü-? 4ÏÒßxù»L´ø|q ºˆ½®ëd;Ãá;0|úÞúLLLæNÞ¶a†ëÝwtÂ:§·ñ›œ*1Œüº2bPâÆ’3£§çrÔ4Þ²ßP±D×Á‹5 ÃYÓÃ)Ñrìµ$âãûº7Ö’Gì ðÅZ§ØË¯ñRãð ¹Õí{ÖiòíÔYÓ-ÛQÈ1¨6âSRu¾º+,–'À£:'y­1`œÄsVߎ_€G5n.=½·[ߦ i'ï|lµ|ÇFZÜ&«ÿô0Ló0¸a-îL:Ü¿Ž¡š¸@e?Æ×«Ø6Ú´Î5;öÜ<7W>a÷ïû#93ç§6ž²MÀö_»ÆFkd<öþ™ 6`Û‚¥³Ä_·÷ô)om}ëÉ}·läé ómëéMKécÞ“·’ ¤ïé=0 äèìþMmMßèx„¯çƒ*`Ùÿ¨#²—¸…âlQQ¾ÜAZ¹ý'F¯1T z^%è5¼Æ–^‹«rCËgŸò&sišôŒ£›^ú½Ñ,ÝôžJ÷ñ›©‡#'¸ìž"Ë5ö¶ÿ‰½÷j*ÚÁ†AQD¤ƒ H¥'QiJ•ÞA:H¯¡…ˆŠHDJ¨ ˆ€H ½CT^¢´ÐC „$$yx¿ß{¿eÞ¼yóæþfÞî99'9g¯ýÙ{­]Ö:™ä0A5[YʯÇ/µ#£/¶¹ËYÓ$°¾›]·Ûø§Å*2-kPY"Ûr‡†A¾¥í¸å±²ƒÁ(ìy®VÐÜ‹$h"äz]ÞRö 3"¼ù½.i*¨„YªÀoT·i‘‰D‹éäm1_‰4¦z€ZS¾Ü×QŸ-@ÁL.—Ñ&—›u#“êî´øi~_êah½_JÅûœBg‡_¡èá›­²"¯sK%ÎÍ"ïeEzaè}æ±§ãEbrqGBaƒ•d–áðfÑ,©ù>ò[íf¡µˆSàYÙ:ËEõ4$CÌŠ¯¯2«¬Øó¶–4Û;ÐuÏ€ Ïvà¢ïGš!µæ­vò᥮³ÊU ,‹²×‡Ä!¤í@ÀÎ*ï¶ÈvA•ˆ ]%xÿ# uæ_ËUØ¯à¾ø «ïйØYòšW0¶$9×Â&@»Çü: ]îJÌx進.¬®Ê f²!­yDï¶ä¦2ÿèº2îL¬¤)Fð ûF&ómè=rݘ¿{aïÝP@V³ÁM»ÐõVJW§AAT¯Øfóö½¬S¿_fˆ‚Ú3¶7Œ"Qóm ÆŒzrzB«áJ"DCôªþèn8hÂy“§†öƒPwÔå—#˜F ¥ÑÞßu©i“ˆÞãÙÀª@pL°+Á¦cw·Æ¢gz0žWÅÉlx~1£YÒf5©Q”wƒþâ ,S'C²‡hï<_Þ¬Ó›Ùı†?䦕9Áw ‡ØÃI†têWû{ÔéTwuögü¯!ÿ?·ñŽ'×`̧x¨wÆ¥îkXÍ#P‹3Z½Ûs—0~Zf´ôZiè|¥¦`Û” ¹¾Q­I>%!^8ÿÞìþ|Z Ó ~)YŸrÃ>ÿ×”/>!gsaÞ œŒZßj°íÕ OML d㛑Â&Œê´È^r?ë„p“îÊ‘î °=.–M‚ZÓLj…]t¥>®²Ü¼|\½Q>mz™Y´¡¤ÐT†á¦1Ô<±º¦Ž÷!ºæ8ºV]š©*Ô„sV¿Éº”y³^­5˜¿°àªÍÅ*b+ É’Ý„ü¬FÕÿÆ 7rÏxYë5“ýæ¸l8ú ÕÏ¢#^ó×o…ñø,7Î¥ÀÏeS8G%~ˆs"BÅ‚6É"”.Zþ^•NØœ)Œ›’HÖ4oDZÊz×j?<½Uqsø£‡BbT 6u^—Á9ŠD è¡CEV¾Ó@J[”+DÿìŒcfwÐÎ/Ýú¬hÕ¬Üqsl ‡HâHˆ“þP¾R±J› ª¯iOš‹Ò¥*@óÍ~¤†=ì„ œA®¦o½[-óO4ëA¹#ã KyL6³Ž$F±Íšï5F j[9n´Y[–_µ§]º«È¼¨j]%;ó¬Ô9'c×E;}ýThŽRd¢Õ2,!ÃÕä·=«‚×)7÷-Œø½bÙÌ–×’_¾;rãœÃéîШ¢9|3>iNid Œ{URù¼KVz%´Ç?Ô•B~Tž½·±gm,C£Ë}Aâý…º•OGÇ4þ_ìûÈŸË)ÌÅõæŠ//SGŒü%†yUÎn›Õ5àx³Ëãûh4Õ ùì™K³Û%–³?^Âa°¯O%¯3žyùÏÃ/Ði} ‹F@Ãç Ÿ±óþ¥tN‡„¯4ýUb,U&œF¥,éýã²t8qw ƒoƒ”prN§ðd õŸäx*\ouBvˆZ~`»¯O J-LßÄs¬vKOYßhµ)è+wÙl ú<Ö„®oð,¹ck¼Ã¸3™CN¦"CœöÈ”J[¦î,Zƒ_7}’¸ ªØÊ½*£J…ßÞ}ÓÒÈæTbóˆm|?d-×M@BOƒ zôý™Ö…ùãsGlW$ûë8 í 褠eÌ‚4¹™Q>}6« ó#£0oiåP»‘³'_Q~Ô`ë.^5Ú:̽0UÕË5nÄóÙE ±§’úYK &Îc´UhNKd?uÍû“¡ xƒ3Ô2$>ÿRâðSD¤²‰_PÓ}`/ˆÀjœC!¾C÷aØi8)¶†ïÔe’ÀþÖb5•ášÿR7 ª[ò71âu)^*îá^žn†øv½¸ÈfR£Ôñ'¶õHÛ[ÄÒê»ØA—{3nñ¢ã)47@‚ÌR×d·|g)7ÛªA¡?dÓVޏ±uãº@»ÚGKìrå| 2z¶úúÀ}Üš7;†3“;cÕ’€0¸tÇ‘u¾Ð’:q|‚‰“ûÑŽM?ü¤‰=¶]*¤h®êÓ‘"¬¿ÚÄõÏn¢(O€ÍBv½¿^‰È‹íÝ…|Ÿ†sXê(0C;úF†ÙS×&Yc¾é‰ßŠËWæ=q|%u%.w?ïò[…ÖYk4,®Ø‰øî…Õ®k›,QÏa @Â4`ÙpòÞëAa÷ilð»¨ðì“æ«¥Ã‘¬Í.ÜnPüB¶Õ÷·‡ecÒÈ®÷ï‘;€Ëù¾TÛãÛë¥vl]K­1/8Y òsÞu¡Òz¹3¯M³aþc½­&œ“^ÄŸûw&“<[fD¥«Z¿z÷ úù$ºä=&b™w£ä—:>â{ÈéG%VÚ°ˆTxPo8:?Þ•>[‹J`‡1 X×¼ÝH#à ÙÊÉ3_G)PÄØªpuý ;[ÍF¿:ýÒµê%Åà‹äõ‰ž.¼°Ä=ÃÁ !UëÆ¤ä?µ—žt:Ù+lâ$#.OÁ&¹h¸d$pšÔr›ÍómoˆÙ/yÝÓE?k]ñŸæ¢b¹'’î=÷â6_.%œÁڛá§çyJQà±Û³¤ý 2»L¹þxJä¡né¶¾SÐ8ϹDk†OÈÎú¦¤‹Ã#$©ŽeßrkÍ!ĆmÁðý eà«øÇÐ=ù×]®Õ»àÝ^ÇþáÀqp_7¾á¥1çc¢)Ö7åå¶|ÙÖè8öq>!G–¿si#…Ù'Ï©ÿñ{¯[Ãjû|”³kÕù¹”ÐÒÁaÜy¥t“Sʺ˜(q¨¸I[éEË8b•zJ]*tä¼íÆãÂ5L#Ra[ã`öé’u¥]çPå]‰I˜X— ÛU(Öã2‘TÔÇòƒ’€¦Â¿ÏWï9Õ¯Œ3F÷¹Bdp^Zª%^Öv“Ü8E“±6¦Øömmà8ñŸiîsÖ4ä2Ôš6^õeÏ=£=O¾þ_=¹Ý£–Ìxў× "\š,ÌÕ÷¥tC¾—†«ÉQÝIÿÑBh¿|Œ*áž53\TÎDÓo“ ºˆ¥æë‘ƒQD8=ûp)pÉ4¤Ì±´·´9ìÊùÏÁsgeÆ d*ÿE#ÿ}ß8=zþ„y3™»Tñe­ÊêRràÐæ¢w¡ÿ@Z¤ªáùÖä(…&¸nZËZ)Û ÷õš@„ÁüV±üàåa#wü x7Þ*×ïcj›×‡Þ/2nh¼‘˜~%Â!ZÀ”¿#R¾9À…µè¿‰&ŠÚäøªsI˜}'É7‰»\ù=.Ùìn˜?¡÷„ÝHdŒðºµàjÌ0§q—©{(dKŽò÷ 7…¹Ü¶qXÇ'‹ªoR¢êºˆ¬íCe L»%øZ‘…Ø Ê_{i"‰c°üÃAW[t/nq(¼YF†Ù3ÍÏJÎX!Þs #ö}(Ç''£-ÈiféøÇª%¹”Œ\gÒø„«í'¡0Ö4L%ÈEi_ë…n=9å –o².¯O¥"Ñ{(Ö½µ"u陬¶ˆ “¶{ƒ4.r¾*Èéô{%¨qP×Ö´“–SÀúyå7g®ý|}Ê[)á±1(UíR¥àcb“ªQ̰´=Îß «WoHàbG°Êüs-l~Á®LáôÞ×·Y.pãÚÆ'¾œ r‚êY]u·‘§KIüt2H™~ÝÂ>´ Y5Í`EŸðûê ½ Ÿ‚äiûkm^7#®mCJÛ˜º¼WBSe®ï ¥_ôÔZ¸°R²dÜ9Hµ¶iv«Ñmbž[j0åzpÐ,PCNXO)Y=‘´ü Óб¿ÁyÁ÷ÂÛjE†|Z ðãbè­±(Œ/QXÅagÔœ¾Víûq å›QSÞb AË dbÖ²b&»–>¹,X0sÇf"¯ eƒÜ@îøNäE=¯÷µÄ›º[RØš7ELÁ“-“Vzx "_¹¦‹WùvÉjMF«$äŠJqÃu 6âÝ´|N¿.a7@-õŽDø`‚Í;ë>ýFÝ9R¾ g߀íaK©¿/(«ÞßÛ{;øÕ„Šð«’nõšœóð¦M¼(ê ¯ô¬óΪ;!8ïk¿Q¶ùa$®oË/ç©tcÍɹ’Æš¸"{^’á“Gè{„ÿƒ9Ûª–’ë[ÌÃÁr•cõùw¶Œ!o·Ê Êoí±‹´6 Tʯ”¡¦m±çê§­(úã•îУ3!ÅhÛzÚ3o†Õã%æ/å6ŸIð§÷hùpŸø&†¥kd÷Æ­hïZâGÎѾrJJSmãx²‡Z~„è[‚F´‚ÐKŠê¨{5ÅúîAÛ/N‘°!j ­°ÜC­ÍøåVg|’Ûú«­@ZŸãäºHëázéF¸vKÔþü¯}ÉZ³Ôõϼ¹åA©uz^/'&¸(F•7íÔÅæÀŸšŽDeúô@%­IôÖ°¶ÓV ä'‘‡ã[–ùîz´³dS¢Û††kD§ðÂY®1e8¸°Eœ’(ãÛIe^€Cƒ>nƒošT¾/õº‘<ô{W¨Ê¯ªé­¡ü^Nº¸õ¡’iC\/Í=Þ­5„NÙ+“(Á0û5Ç•¸¢†Íå Æ)¬AP-¥á`ÅÝ`Ží¦ÓÊiá÷똧ª;Эå¬ÑEDÒ¯ùNV†f‡ãIìþtZ‚!7x@þ!gê®oyûÍšœÏH\•fÀ{$>q’58ßÀËJv (Bõ«í}¿çΙP1N½Fœyë¯îÎ’ypvPÇeNÒ sï)"^;æèeèáÃ}XSâ „‘ï«rÃ#è8íd3• “²ªœÕŽ;„–YÞFŽ Î´Ëð×4ó>Á¿"të V˜]ceieòëgH˜ÅxÔ LIu†—Ü÷gT6²éjì¼p€kPCÑDŒeWë¸ÒKBT%í©è¿Gÿy ô.nǸYùÆlhí…ChgqtÃÌd9xaP Â€as§x‰røÖ&p0¹ ¬E?óÞ.Û‡í¾&q_Š㘭ŠÖ&Ÿ"J Ûȼ ÆÇö‡Š«î>͘†ôDølóÚèB>·é4Ïì`''éºiÈÅ®Dw*}@ÎÞ ½L/®D‡ÔèNÙBô[NãÄ”å¤Öéă_”íí_Ù†²ß§*´ÍþgœÎ”™4¾Õ™Šã `TêmuóÑ&’jMÈLÆÆPö­ø7Mûú笗öJ{©GzJmÒ‚÷Û6îGhp )6•}Ɔ-ÍFöR×äè=¥âXW2ô­1OLsxL°ÒdÃò„¥PktA(bØŸ'‡’Ô3=.óã»uöZÒÖç™Ù`ð0?«8N…Ä[=o‡ùÍÍgÖÁ­×èèN…üWˆûAößâfÆx®K^:mý?¾£y’=tPöx4Yéx˜ÉÀðn¾²O…¿#Rb )ügG'ÔõuwÍ(ÌË*n˜6™eÕÖÐ1ë%·´·çO#‘Hþ}EÜÆcbÆmÐ…‰coY†§‘Éd ÍÀÒPP>ÍŒþEËStþôžùå"ñA_£F“Y[Í3ûå«kHÕºìà¦O€½RšþcMÝLhØ£$Šm Ö¶-ÝðFÂ/»Ÿ˜ÿíí|¦‹Vª©õx%qÈLmF‰§L’¿fú|K[Kµûù²ñ#Y»;$wMÀª‡ìKNÝÇÄis\íÁS µZ®n­÷mxÔÈì¬u”.ÿÛS’Ò"O4,áÙ¤RB6½áMBQÿ¦Ihì·Û˧W_ë3ø^fð½Äæ{éÏ›Ê–È õ…|´ØsØH•,=òºŽÇ áû›ÿׯ3äˉmÃéaújÁT“ÁÛzÜŸ³Ë?³° ½q"JøÙx­¯JÙ¦K’Ú€«rH…TÛ• µÐQ9õí–mÝz˜‰Â:b)4BîœD5ÙŒPúüÛp¶´qlHÄh|ƒqšÝÇM×QHý,Š‚B’¸Ç %„ûå£`r¶Ú(‚kÜý_•"Îü¿nÿá}ÐybiƒÁÔg:ºóšÿ¥Þ½±“z§ÂŒRœ¸|Y[ó€·,÷Nï½ï66ºÞ±ý"ýv,Û]V©ÓlÚúíZ5¯YÊØ> x Ÿx]è(üBÔþÕ%~þXE¦øÜ™”',‡*Œ{«×ÍQdê\šBÃÏÿ:ÿ9åpÚa¶óÓì.Y#ô×ÐÿXf;,úøqF\HèËP¾†ïÆ„'(‚Óö³ØPÞ™ 8öh4#€R )ÜÆ†ÛÏÏï]jjT|<ãÇ‚‚ß¿¾¾|¤«[Ž©rгE!«˜Û›³&ÒÐàùŽs†T"‘($*ªª¯yˆÛâóÌnûõàFP 99SJs¿6'0ܬõLÊÏñŸeªe]ê(Æ{÷î™U;_¼­“ùJÁùé×§· û÷鮉[½iôÇÚ•š§+Þ±‰ :Åó€¸ó5_WWËprqÙ¹¸ÞП<ó ¶ÔËz\Xb40ðÞX¹uÉòt äéSÞ/^h)A¶Å²Ë8?íMÞÆã_57+(r½¾Èq&,,L^^>ñÆÝG·±±çÿQm©v™…åÃò=«ªƒý}ã,9æãÅpûà SÙòâÜ•ÛéU`?¿eeb¯™¸HgEDDD-jÞAìŽ9±¬"?ïYKÃe=oê!ÊÁ=³}}}5[(ü°–¯¯”(xûi`›Üx3ØûHÌ«ª2X¯JìOiÕî×îù¡uÖ,tÖ¬s–qT56fM·Ž½, þt¦ÁwMQÒw^5µ¢í 4†jŒ…qppÜsÏX§­Oº ŒÇ™–k¹Á%ãÇzÓKµ)³)ž]OUl›s½;KKƒÁ`ã"ÄŸ}3¨ÐýÏ¥£O¸5?ޱÀia)|ÈðG—¬gá«;uWÆ‘<)ÜȨ"D„Ŭ\:jn MÖ%ÕlN× (*Þ¨¬¬|“˜=œe7^n½V6Ñè/8??_áÐÅ´O¨óœ~}¬2~þ¿ÿž¨°;9†´MüñãÉ«¨¨ß?òTVFKØàa[׃6>\Ö´.Þ?´lŠåð ´æl¬¾Ûˆc“ݪBËé›ñ}9娎…5ÖÖÕ©¼Ï $lÍZºbÚZ-dîŒ-xoþŠÍÞ\yÈÁûýw|*Ü|ûmV ý´˜§½¶Ï‚{Lè™K5m`åöƒÈ¡=ƒ»™ëª‰*C|!LÓÏWÿ:0 “ƒy_ý9Ä[ÎoñQ 6§[³Þ½ !¯Ó-ÓT%G¡Uð¾61—é®[Þ|µp<~7»t½ªSë­ yŸ‚®ÿàÂ~ùáÓJ±·yóÂo8£öøE¹š?èdÉŠiÕͦ?BÊr„¡#ïËJ×u°û~"rÁƾl(•ˆªvÑKÏÊ*Ù°"ÙlUv—g¿Ý@ºü^°`>*˜º˜”ºuõ+áÍBõö\¹¤ªšŸ´´Á&;7÷Ö;è Ž ¦ E°÷ª¢åp«™¸÷ÍQQQ™Ù¿ÖÇ.^acRí½'á8ªópë-û£Ö­™zû$¨ Ó籠Ñ‚ßfÏ8Ÿ§²q¶}„‡Í,,žÝ½Î¥¦¦Ö··»[à u?ÖxLA ëÿ¾zcáaDZ­µÌßrr¤9`õÃÖwëθÈÂ;#%v' ÷—8£î—WVîp¬Òœ¨àµŸÅjÈÈÂ=2|°ó@ý¦IйþÓôçÖÝïf¥æ±x䇊µb6ì/ôÊ_‹ì= –Б»}‡ŒXf#4·F襸ƒND€w{Ι°z¤)›Š[ò·%rÊ\ÅÅÅ’ðæøÅ'Ï6º¾¼ç¤kfüìí+¤™òÙ^û6ˆßÈ›OzÒ|¤ÜÝ R"¥ç£ö]å—©ý~»Æé˜½} /w@iȨՆÇðx1ÉwäôßœªMojjJÏ’óî¼{÷®ªÈºÊÆl3˜cÉâûMAA,¦qR™Eøu*.Á êöÊ`A)Ÿ4gȾ¼ÞüáßÅ[H䪋â<:¨ Êí’^xth{ýQÍ„zDóyÜËÝ:¶PØ5ò`²Ð»L¢‘¹h .…PÁƒü“gØxcEâ€öigjí¦¾·'“ ëÙTÙ‹qŒiÛܧ@*ÐS6U‘Þ¿ŸsÿÖ=*êáöÅñ ‡Zá÷¦D2&";¸ÈzæäDN~î;a÷È•äË™×EDlTö¯wŒÿš=ozôØœyNÜn¹”_a`Îcb"Ïÿ¨Q¼°p¿«"]w[kû3 x¥8eüÕ"1)Žwi½:’“ͽ…AÙR€~~UÏÐpÀ£Cžùá÷¢à»s¥UÆÕÌ"þ>U "Å}U+æ˜è=~å ó´Ëeµ? Tjð ¥"³8-]}†*ÏÖyͮݸzuÑÃÛyáìYŸ‹LLA£«þG×N)wß‘" çW(ûsšÀ¦ìÌ{žˆvóÄ»¹™ø$֩Й•ª9is–xr¦}cÛäHýfA¡9NóÑ-в`™~W—jïuK;ÛY“ø]Ö$qÕyé~÷{@urYä/{¡ðüðK,ûׯ<ãÏžÅ\/Ø'Ú¢?¾p(rß‚ByjëQªkDG¢2cI2ì×¾*H4îâ·Þî{f ¢Û¤Sz¸‡Öš~Üj Ø´¹k -¡ìš8ýžŒÃlèÑæq–,%iÈ©ôß Õ7¿ŒNæŸD“,¢¼f›Ò§iR>9/Ç6köÉ|üÿGÓLÎ6,±q¢¾Ä‡ŽîÚü¿¼Êç ~ÇN!ý¿Á«Ì.©aQ#ƒ5 ubTù+Ýd‰;>Šš×-Rá62k‡ïSg_Žà@r`Ó›®X6`Ú”ûãÊC3uOî.ågº ¡õÑcaÚe¡K±{„¹ 1Ú$ìG}GúpºÀÒX"‹ƒNlI?@Yɯ¥ÍpFˆ`»o°Üt/Ã%f>|”úÜÂ5_€û7$Üø(~¯qºP<ìV ¡csbQŒ[/ZëwGzUK_—–EIùIQNð¯ã—(æ)vÂ>ŠÆ’@ô¾ðÊ•(;:në»2„*Ôà µÛ/þó¤ZĘ;ËäMÔàŠòâŠ½éŒ ûÔÐ-×Ç|ÝbŽ\‘á9^(‘×)+ °é>hÒý”qo;Ã|.0<ž{r÷õ ¦¯J¥S a÷ù{ä.øéƦ÷¾oÂbíË@?~ºO<›<Ð,+2ºnŠ`=d`X L, }`¥Èt¬.žO(=;žûˆTúóöëíöæß›¸ù -*yã¯Ëù\™ãò ½Ýͺ˜îX:˜¸…Àæà§ÀKoœciT•|Èýž°’qp¿©y‹ûÒ<¯,õ¸•—ªÃL:ÖÍ«¸Hµ‘¯$g‹÷•ó.û¹ì{Øû3õL uCø%8˜§ÙAq}4ü.)B #×í‚‚¤°• 5ͳ9 ¾³k~‚ª¹§YÿUò®‹šÚŒUù6Ç,UjñÄ"ã‹Ý¨ŠæÙX¸ÕÎúqZ„²v©uñðãÔ# ¦pê2ñ|¾á“Ò­ß/úCû®‡lž£"Q1¿>Êåݧ¿ÿ ÷ð,¹MXéùaø”)éÏPñÏ|EÙPž‰D…SÅrvH•ó‹gwÎØ] ŠþzË©µìÓ&¨åýä×6ÉÐmñ> ÿmÚ4%ÞfõòUácñÊ_ÜÕâò¬á¼7믜‹UTà\ø©°acákâ¦Ó¯¾½Ú¦:Êsúö“í°S'‰ÝaÄï÷Æ`tjϺNwkù;ùOè$Ö7 kîÒ®ÈIœ%§ý›œ³éë;M¹SoÐYIFÈçé¶swß'—ßcŒc”IŠ˜¢a _˜Eù&ª{ËHuš]“¶$r•V®jwô„˜Þ¡Ðo^Ëœ$,ÌÔ¡8Qi8Ŷ̘Kt'n\ËÑ6)W#QÖðÒº”,¶#Ñ‘})tu­8¬[²›Äz“Óx÷ÝQ‘OÔ‘ýÂÁs ˜Sv:=74»‰$ËaŒö{µÒƒ0o¸È4ܜijú±tûà]ôkÁÍï«[Z¹UØ÷þQ. Å ¼é©q²ƒ½Åi}ýÚRišŒÅ Œm×ý©XC4Vf~Ãq³C ’,}ëø‰i^£D{9±¼“½ iâ>ß`/þS©ÂUڜخicŠnçäôЯÜá<¦ðª ¿ÕÕçœG\\’¦×Qî~•-w˜a )fëw¯Rׯx“ûMKÞöòže9 ŽyÛq?ð®È uŠÀ/éR/ï¡åו†Vx×[¬Ã™¾<è3-õò“ÓîE³æI5>TÒâù}án¶ñr¬¼(ü®Ä¸Ð\zN—çMÿBƒ‡d 5Í­vòìÞ^vùC‹#hÀ3hæð«S¯ Gi´@(/ÅÃ6K—É€¾.×$’‰.¹<Ž1–¾i(Ú0Hpé—²DˆáIéÞÇ0Z›ÂVñÌïáQê~BühÔÄ9+RÉÌ‘™µ©w9^¹NŸ”Òid¬´Uˆ ”/cù€‰}ñ³ÿêíĈ©¡C±'·¥¿¥à 4`7Ü]‡é„òŠÅ «G/\`ŠSÍ­”æÄ …Xn/sœ¥ƒhF$åiæ'”<»ª£²0ÍzÅÛ›¶b²œŸrq¶=ËEœLd9ÉhsgK61dÉ~×û“ò¥Ä¢dƒg‡n–òåsò¿'‰i'©H¿à\(¡×Cí0–ë‹opÃÕúèöOy š vÐaêâ”ä.RÔüóÜ´¼ºžWÏýôW’&<8$M:¢±eK xk‡n2WhNÛ9Òe£&r/ÞñÔk¨ûx7RÚ,9pÅÕ¾«Ô‘M É|‹½zËJÛËÝ o™€Lq3ƒ¶é®’’èòõºhñÍÐÉtHUMúÊ¿Ë%…ökŸâ³–€p§<ŠÅÓ(¶·”ü³Ts·Ì܇;n…VŸÂC0/G¯2²@ž?*ºúz¤—ê3ä™Ò_pZ<…Ú484‡,>,zºrð§D§Ôâ9KÁ·æ¤§ö#rTAŠM©Ùê¶A»a»»g}¬$ ~ɂν\¡9Ilv×Ôr7)ó?¡äC¨2ÆE£diÚ+Üǧéj3Æ$ö#L?7gº`)ÿë§%;kð$6êk§ËÁÖñjü òÃyÆÝƒ]Ë/ña¿1ŸùmnÔĘ̀_¹tFÐô‰åDÏJ±ˆnå0ˆƒ‘#§¦ -ŒumôH ?àùAüSYý:ƒ´—s¢S0+?”è`ÈTq…~ƒn›úVr2AkÓÄíøVñRÒó PÀ&6ô=åd{id·ñ…àGÜšâx޵ž®G/áü¹3ß48>\ôQ£h{hxW«»0y2¡#;ýGÔ¼MIfÍQ†×¾Å÷e]?ƒ¹E»mÎzbîæu›#,ÙÙ,#þ2åؕ¨6}©ì˜Gë÷‹_aæ¨K­BΞ¢í´bc£Bmîà|/w²òT}:ßé7¥ýDkŒ›íÜ|~{ô~üE†Ø’ÈGÒø.ä¥ñžÌc"äïÄAg_(eÎSF¿9WDŒÛVžÒéÆÙC¾ÉhüS*æbœ‚:ËG³å½·bæli¬hWß!Jû§¯Â?gvœf*ø-«62rºÕÆþëy\ßõ>FÁê¯]?r*ÏáäN=°ýã@ñ–$TÚ΋@ÆÊ.†OLºYgÝ«O?¶q!$Š™6$<Ìĸrß÷žøvC!˜¤Âx˜+îG&} Ù{OïPceágr¡è×ãÕñ7mÓ½“1Ÿ|,Å­ŠŸ¶òùú[éäÒø'#†ÝPÕ¶˜_a¤EÕªªCjçE0=¿.”æ]˜óûvg@wRö\)çùÓÌóûwðæìœNZõ8hÊÝ”*!3Ïå²¥îW·cÍR{Ï~—”€«æädôupiR×_-ÞdÙÓÓMJ0÷žœh€K>b„ô<+H d@«™8r¡F±û•ÇÕÄÌþ ix·ùLëa•ä,L`-´Â©ù–§JµkñEn8K\«uxó2„­G­A®Þ|P/¢!ÈséÆ:w€VÞS!ù’™-rP 7\ôêù"^íÄIz©(í«³|ìþ^)NjK®¾þPâ_5?³6çQ™'Ò§àt:&³Ûï†1‹Í¥ý&ˆÝ‰fÓºrås=z%Éžh9±\'ؾßÔ®ìþ´J§ÓÕír»­AÒ/åJ•UæÏ3†:&8›mo22.‘ PCB1 JšY>vÔHŽ*_l4P1ç{)eŠf¼CkG ªý˜bnL…'ÝEø| áþãEð«Û|ˆð. ½<¬z†}•¹ÑÝý5ó¨­êw´Å‰À¹”Gؼü_ÂÉ€ƒ ŒßQÑÕ‡)ÅØ2Éå“ NÌœÞRSK¡e¿<ywb¥';Ã5¬ZJXêÒúe8ÀDV6ÁEèq#-ïú—ûÂ" šáGnF¿ö…ù*Ï1YÕj¾N‡µ‡m$Îó—{O|ž±u9!«®¦xKmšŒ f¹’ryÒNò!_óê½Ù6*rÑ–ÍT‚#,õGm,ã˜+¼ÿŽ7Q» ïEÃ¥ùÇ—öñKç mÍœ‚Üú;T…ð·ØÒ•'©’”c§öÑbËøf%5+X'²¦ó›-LÄØ%~á%Ê£n îõœVY¦fÀìw5¢¯½ðÍþ™Þ@¡$& ø/ ]º¿cmS9cÍN¸zÔièÙx}…Oéqϯ-î6sHÞÿ-¢Ðô)ï‡4÷÷Í=žg­çšÚ9™eãi;rÞ»<]y3 êËçQZ²§º?4r4ME"ºÀïUš7©Ð×ÞäáRê É4i#Y©#+$0Å™w8ÕÞ©ü¤6§û[çÇtæ‰ï¯~åŸéM¼q²FçÎUœ7- ¦4ækv‰g•ù#Ç„(Ù¬àÝxÿ‚ ©;WJ/¦Œ,Øâ.èž^Î8tNTÔk|tÛ©ƒe¹F‰ÃªWšrø¬i+¬Ù‹hÙ~U‰)^œÞt«ÖL-½ô¨8gDèx…Ä»%²ÆÆà¡Ë ; IÚ™¼sTÃËëJfÔºÎÀº ó`t®í#¢ü ¨]7ÿùŠŠ˜ÇLjlÌ‹__±‚,ýTt(dë‘GáØÙÀžËó˜Êu¯ÜeˆóŽ'¿–ÓË˾ót)'úÃ]9^' ãðaÆwÓ÷íóÁ'(&¥GÇ3Öö;bŒ8ËË0q q 7ázQss2Fp¢o¤©Q}a„‡þ)„kÿƤg³jô±¥k‡ø³£4ž¥k¤.¸êÛ#•ú¸¶‹þŽÃÑGõó-Mÿa¾EGIˈŸRC²Ç$R”.I& ZçþÃmÒäòÜp$k2Š'¸© ù¦\äŠ#“rü‹ŸUlbŸŸíxkjàšl¢ù\¢|¨wÑ¿ZûGïúÔ”ê^·ÙO“™Õ¼W""gŸÓ¥1}óGØô‰Ý_L¥ª7×õc%Y)ƒæª +ûm(J}a@baΰõ‡t—ù øûûÅò6‘ºE£/fÅdýž››Î  œ˜¸ôd¸”–ÿ`™71#U6ašLk‚„èÅ»ÛÅ>¦àW¢ñ÷Ù!…­1𑀊Ü`A0[7£ŠÓ´Fc2zÁƒQÿZZôTE•oîã`2 ¶Kn28{KF>†ÓêÅyT$Âd8øŒšR0¶PôZx &Ŭ@—ÑYãæE&ñ Ãxç×ñ\yxÛÙôlÒ²¶Ìè1ÿM(L]o†W$GTäïÝ"¦O™¸Åó<8@ŸLÜèÒòÁîQqP³À—½r¢w%Ý©ßÓ¬;|ÃÃc T?z˜mí’ÀyÝ ÒµOT©kgÝ‚<˜}Ï*þÃ8½Ï˜ºõ(õ-ßx‘fZ7ItÓj;Ñ…N&f|ÛÁ²½§5ñE3÷퟾95esùº¢–{¦K}Þ,*ܨ$M›¬ºpÚ:ýÝ ¸š¯Ås÷TúVLÎ7X:O!n–»ëºÑ D(ƒ¥ßF²É †£žTìŸHÁ—ôòc+%¬ïU+pÎëù¹èYõoîÆÛþ›!R"^°,.- þ<ûér;æØ"ü)°BˆìsÆÐ¶?¡ñÍ(™3ƒMJ> •ùŸW€~¥i;B¼K¿]Ýíé&ú5(ÊçeÏÈé®'î¯ÜYö§RU¹ÐóÂEr! å}V\²“Ó5¥ÈùÆp.åkÑÛ£´hl¢«Ä<¾z²%7Bw yö:ÞSØP½jsêçÕO±nY\r(šBo0±Zu_9à8»TÓÁ§=y`ãpÐ]BFx¼‘3dAÐJS~0®ßŒJyéQ£½ÓK³Ü‰^Ed‚×Ý“ÎXZ¥Üœ}<èHݬÖÑmµ¨“C’Bö ³„\òD†L¥ßZ‚ÌÂi#›qˆwÁ²h¤u0z¯Å,Ò1RxIs°+ ¼îNzѲ›7ªGî2•ã"ž ç÷âCnÂ’biÑù -õ(UV°}ö Ü9ÌFiItý’Ÿù’ºåG^/œÒÏ‘”ö´¨Äá¸>§‰4×÷wÜ-¦…îTËC5+ùµ#·08¹ÛÝÅܽÃp½2Pîzæ>Oߥw*7$(öÜø}¨áü:X<2õ‡¶õq<ÅÃ^Òêù §RR.o+Mwc¾&Hh}äç· ×_RÆ_Fv“}ñ ¡{’êÉÒC4ÃÇa9õ(¨µHÈÂâ€ižš[hº9ÉÌ]W¡½N®6µÿWyéù 3©›“s÷]fâ`;‹ç\ßÊ…±EYÌwŸ×ªäu]6»s‰ž·À2&ü T[36‚Ä·õò~XØOÊ Ç@΃Gê'£/=„oߟûY»:ôgP:zCžt„môšò†' ¾ >·¡r¾ç[®•2Я½W»çÍÎã…)÷Wq/Ók“Ñ­'Í‚Už¿âµðÞøãtL 6)m:rZ·Kµ€‚¸¹UºàE mÓ]Dݸa/Ìß ï—µe8™Ë?höÝq"&æü<×qDÕL»‘Æ·™uiÐ{”¨4V°¸p@ßB`ëÝ9¹ý‡Äú1âE½Á4›Œ‹ é©D‚ãÁæ’­ÙÿŸÓ!ô ”Þ*QÛý2~…‘ŽNúŠ›‘Y€™Ž¶¢ƒ·§¸£·½“x°§Ï?î[+ƒ‚}ìÜxí\ܼü¸f?¯›#€ßôžŽ¤ŽŠ“«Û£P?'ÃP]#‡PwG~ð¼ò¿žYÏìéáå¯ àÿG¹ŠÇïÿœ–àçýG–wÿƒ?xÍtžðªxû9ñÞ—s”¹Ë{WV\ZNZANV”×Ð.€WÓ΋WZŽWZRòx'­(#w¼ýó‘ïüÀ?”WöstV4PUÿOæñ'¿k@€¢„ ˈ{û¹HH)((HHJKHK‹çóñ ° óòøBþYŽª“¿ƒŸ›O€›·ïŸÏvöÞ~þÿñäúÿlœÏ¿@^þÿ©ÀcUJ_—”øWÉ ?>©¨âçdàígäííüæ«»ù9½ýÜýyU e”%þw¦ÿ;y'ÕãðX b’òb’2FRRŠRrŠR2ÿMþ?2ý/qoG7çÿ&® &-ýqEIéÿÿo™þ©‰ÿ¥˜ÿ¯ stø—¾|ý<þaG ''O'¯ÿcIýO9:(:{ûyÚÝ<í\œ$|¼\”%þëäÿcýþãìq·8î–ÿê—ÀÿQ­ÿSé/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/ä/äß 9ÿ_¿ôpòrðƒùAÀ>YQ::ÍǪŒÌ¢¾Ã ©¦\] lHc=axz®-1MúãÕ‹_ÓtìWl¬\ïh]ûÏ®í,¥»`ÿÙ×NŠþå 7¯Üœëø:èùO9ý.‹4 à‹sJ0Ñrs»àéíf‹¨÷?: oóŽÝ`ÖóÛÍVTÀìQ" (LÈ+ƒXš‹ŒóÞPäI†6}CÃjTMãô˜B·•&øø=“÷5cäʳ6áØ¥VCÍ¡ñq¹:÷ñrX‡Çuy ß`w}i5ÀâX¢|ýúë¤Yy¶çضˆdfañqš(¥ÃïïÏ6ƒýW‡oijjž=uâÔ úW—ä^zNOºüž¨óTF÷YJ¤jVzÍ*NMO»FbCÎòIêÈ47Ú]?ËW…*xgàÜ\èæšùúÿ4¥Ð톦0gWß)86©Çñ¸ÈúÛ7ê I™daÈaÐ۲ñ|½é㈛öH‡düÆêÇskÿ‹/„S&ajgw¤ž=áOâ½t6w]ñëSÉõíÍéúy¦ íÛ¾ýdø•5€™Øk}÷mY†÷Õ}UþË \JuȆ†C)a§ƒ€¶>o¥¶;9ºÇÇšQh’ì°ÿ^%šÀ è¬vq¹~‰7C»*‚Zç5[ ¥E¨hNN é¯q WFBÚ 0€np 3o{zzf+®%ÐíÞtõôdíJäÑË‘÷ýPóéÓ›û¼÷%¯W_ômš“¹IP6¹ÆS -¢)¬=ò±²Rªo°õ¦äQL„+1Fýldùú± îHd]Ú»Õë ¤õo¦óûð¥ªT45aÁQÇÄµÜ l™µÞGÌòì;±èk-‡^Šj‚¤% >u2¡ík*èñ$`_›—·_Xh•ì¤àh‚tšÅ¥§"jEâýç0ð0xÎ¥]y[õtê:Ÿaè›.›ÒåÖv¼mvf¥¯bNë5Nûv²eqUÂxùU ‚Úx‘OÖË-—øûŽPZ¼b²¶¼T¦ìXEiÙϱ>ƒŸªç 4EûìçZB:ì+ÃÏyLwÞh¾–ñð’¦0÷Ì“ïrЦWöíjlâÉ^/:çe¥ Š”»gÞ¦£|+³ºæ-ýŒy÷`;ñQ˜aÿEѼ‚£ÓŠ·žjÁºDÚ¾kìGÞæ¼Ú—¾£ÿãê½gKgöõjß²Zɉ۴õõö¾#låøNˆõüöIßÚò²w:2¶lAC_½.ñx-½ˆ\È !v`C95FÀh¾‡VÕ@Ç=ÊtðÞšHvsÈ»\î‡l7ü­&ﱆՄ¨}·ìœªuo-//¨­­ML/Ì0MðÆÐ§¦ o¬®Nrƨ.û|Ùë•‹aYê÷GÎ~>+vý§«×§ûÀ7lŠÅmO}a¾^­Üt 8˜tÙwãêÇÛ)+ˆ¯ÂynW//à ÎŒ¯”.–WJJJˆXõ|:õ×]Ž· ¥ §? \ÔYÝ`?”e_Õw6qyœòâ“ù÷ÔŸ ë³> ÅJCtT`·2vV#E~„”ò.ñÓÑ§Š‰‰%&$$˜ªuV‰ZßNUpñPÈOÒ½¶B¸|Oäz½á©^Á®ˆ¸è7ÍÎ(š•wm/?£n~ùY^KUèîCLó¯â0MÖÜÌÌÌk^“UK°‘‘þëŒ'Þé©Iºö7b,4O$Æ×®N_ö0åD¼Ÿ(×P¼ÅΣã[&§+*ûØšnb‘ñ¨ãh mõgüuª´1qy‡³ ¢…xdÞ³ºÊbmm}WܵJDâZï¹á³ ·Ì@º{ép¿ xEçÀ¥Dó›óìÊ–ÒÞƒöÜåaï RK|ìc–Оĩèê>È í/ÍhQw¯ðõ5#fíQÿÑ›šLgÅ$~ —ƒÞ…^ÂûyÿWŒsÿeT³#"Lèù­¯¼ôZVêOûw|îôùõk>¿ú7×Ó# ßï¿@ïh7ãñë¤ã"ÆH39g¸wxP:|÷äé#‡sçjBˆàÕÞÁMR/Ú04vcéàÈHéÕþ«âZÿàÔ¡áËCWŽtþãä>¥Tªpî’^C¶°ôe\IEND®B`‚PK–i6;0{Šô{3½Toolbar_Connecting.pngì¹pM²¨)&‹e1ZÌ̲˜Y²˜,8bfF‹-‹™™™™™™-f8bõ?wîì}³7Þ1UÙÝÙ•YUyêtWÇ®¤ ‰„€‡†$-%öíÏ‘ä¯ óG;yzÞÿ9@9‰H«Âýo8ã°?×ðöRZN``øUð¶æœö?mМÅ55ååxv6Œ†ÆvF&Œî6ö`_Ýí V&Î$F&f¶ü¤$$$¤$Æü¤òÌòö¢&æRžŽ&*ž ªO+1© ÂWwÞ?Î6&Ά$î6Ö¶N¼îü¤‹Éûçü/3)Éßš8[ñ“ ÿuƒDS^‰DÔÎÑ„„‘…ÀÌÆNÂÎÉÈÊÅÊÃÅIO¢bèL"chKÂÊEÂÊÌüG±ò²qý)$R„?ú«£±)ï71‰¿÷ù犟ÔÜÙÙž—‰ÉÍÍÑÑÎÑŒ‰…‡‡‡‰™•‰••áO '[gCw['² òïqÄLœŽöÎv¶$]Ù¹8ó“’"üùûä íÿÑ‘­Óß“÷'Ln0±023ý#ò_ÁÿyEM íUíì¬þmúŽ&nvŽVN$¢*l_™þ¹Ñÿ¿‰ØŸ*ð'< ÌÜ Ìlª,,¼,\¼,lÚÿÁÿßý“»¼±…©Çpça`eý›; /;×ßÝÿC£Ï Ó?%æÿmÂŒÿÈ—½‹£õß~c“‰µ‰‰­³ÓŸœ±ü·93ðšÚ9Ú: XØš™0ÙÛš}eú?ÿéøþÍúgYüY–LÿX—ÿͰþWÉÿï;ÉpêGùóÄÀùëá bgêìfèhöO+V±žX bÚÞQ]Ã=ã"ÙêÛ:3ª?…¹5’±µQMìø7: GÙÍ–]‰îÖhÆyHgçä­œÓ1hJìs3`BÆÊÔþºÞ(Þëpõ•à(™G2 ²I]‹®’eÉÜ*‘£F±"Ic¿ËP®7?JyH ¶¾¸fnÒÀžÖBÆ}ÉYùké[¿´»† ])¦ò-Òf‹“½:îb'MiAí7Q®küÒ U ™c°Jø’°Û°ºkI1 R¤ T(áÿXbAÄSN]²—ÚY^÷w™¨°Å~­É„u¾¦£>/Ù¥úýŠB¯‰ï²`:ÙÏGu[v›\ü Û‹í¾Kvzq‚GMN«H”T ¾£«üÏnÞõÜéÛÏõj­iÉwßàjÑõm׫/Þ\ïêO zs¦«Õ#¢Né5_´ÁÞ®ÅtÞÉÒ¨ øÎnC·Žÿaßü "úì»Ô(£*¿¸!òñH7êUy—Eι]îû½Í®ä;â×ÞywŒ½¹¢±WoÿŒ=<¼;\Yü|t ¢Óx—¨ ÚÐKßî½Ñ>ÆùíŸë®6¯˜yÙýàz±¸ÆZ‚Dñu[ W`ä¤$²â‘'ÜW‡—wc¸M;¥WˆLjÄQEwú§ÇÕ­uÛµjƒzVB ×bàd½Þ–k6ø›"EÒ˜“ê Ùå Q>¶`5¯²µñÙ$z)ÞKûW³Í´²LËØûÂè³$.ÏÅà„â7¹1`ÇhÌs÷Ô‡‰Ìkäà †ìÜ·;~á—P0ÌOô9 °õ‚xÑCDv „RQ3´ãb3ª­û¯­‘ÛQæÓ"½3ÿ]ÍË%ØÇ›·wZMƒ 'WgÆw¬TÉwYon‚è ö`Ôô½i˜bD^K‹'ˆ×SÙ‘þ«€)Ü’.·1wø¶ ‹¥Î%'–¿”•ˆÄËÖØÇ_/S°ÿA¡)`Ëãž¶±RUùówñÑr[Jb¼ä¹!ÑIº ϬWŒXjóiÏŽ ŸÏ§þŽ„(í1 ‡ÎÉW÷;ŸÆ¡áIÿµxƒÿ³PŽxX u¿œ*¹?„’þÅ P©Ý¿_?m™‹©­óFp›çÅÝÅByqéZrüáÉÞUÊY¶ø³?Av}+JÀcrpü=É šÐù.ðk33ËM…Í×r¡R&Ÿó¨p8©Ç' ¢Ì ü´i° µÏŸ0×%÷ øl^6/æ…/(±õÖÜð½ý«y-€é ÓfWO¤¡ÞŒÀf¥}¸+™ì†è¨yB ÅyÞ¦ó~ „„OŸ"¤)'ˆJ™u(Y_âf±ƒ'U®ÈèwÊ^°¯ŒÊ´œœ6™^ £ý64ëûÏ¥g‘Q&‡Iøý¦î!Ã†î§ˆŠ™»¥Šž™Û;´ÒÕTcS,9êOñH=G=6ˆ!›¸=pÈ!€§æ{#‘ùŠ‚Üc!•øvv i§C: (ÃÆ2ÿše‹Û,¢dC)b©ôUÀ$¦¿¦?LÅØA嬯™n…3cÔL†i:‹)_ËVXÂé6z³²3ÐÉ2ΖñaÒê’i\QjdO)tá{^ŸÅl†¤@þË|·.º±8Tpé/s òž4‚›SÉ׬rá)bO\ÝR«¤ê§p¹™ZnXĉò‚Ž´ªò¾ä|bÉõfœääü|‡÷Þ“áÀ?{_H[ ¡xyV?´®,»(’ÖZ­=?aãUÆ›ng'Ñ7<æqH¦“ÈÔ¨p'[oÉ>ÖÞ18fñç#{l{I²!9u¼“L–ØÅ)6ŠÑ™VÓ¢”aÌ„\b½¡Y$« €Ä½¨Øù{³t 7©žöWD›ééçHM3ÜS=MšƒDc±qV5s5ÜJÚ|µß¹Paú0Yì‰ÊÃÎŽ;O$5긹q¼ù+ŸGÅ>å–lc‰§+£©ô…9ýËOýï©ØC•%¡ª¦%¯¶¤ À˜x6ð<Q©SZx®,úN³ýd“6á<ÓbHbOQVF9œò+00G|ríO qQ¬sA\-úŒ”a~¨P@Àý²¹€<Øçš%npf­*¡%Âj©b®°àà„Þ¾'c=ðºz‡tc>ñ±úMýº»( ’úú0bovŽ)3”è¾ÔP¯t^'ú[r",ZøMפgLÎá[Q’x‚—¡#–iwigÔ~êùÅ 5l ©ñ“a×Ý(n¿Ï‹7k…#â<=ÛaØ™fF °J¼z—¤Óçè°‘â»ô|ö\6Móò"(}ÝP¶` WùÑDt±•¸¼Pf÷§]¼ûG?UÉ4HŽ—L¢"õÛ>’Ýç丞öÒc3«fx7«®î÷`ZË舂یä>v+ÂI©ª'^šP˶µÐ­¤›b«Û}¶c[(LáqqÏí6Ö°:g·H"¥9ìâ‚…•œèe–íc$x[rˆÄ°—Ûèb+x¦è†£qðäܼ™Êk}y ¸Òã&ä¥ %ääZè¿ædd‚g.X×<Ä`kò~‡‡óbk Þ_)JãN7©|‘£‹O‘HÅ|n’ÄíÝQ¿ðÞyéÁýn îh}ó¦pa!]nØ¥n?cöM¥ü–À‚R¼Ç…°¥åA¬jEgDÔ@J)’© _[¹e"ä¥× »Çaã.CäNêï+½ïCÞ‡Ÿ¸CÃ#¾zû¹ µ»çt‚s:ÒðgÆPœu3‚ µŠY`Ëú‚•ìh޾qJS7g•eêÐ=ÍÅä)l#Ÿ‡ôü53‰˜¯ÌVÓÆA‹¶;aÎ4Ýê®7eØøªÙSÙö!ƒG ¬Ù%fÔ² Õ8ÃÚ ¹ýëøé°@›(ÃâŠâwÌó&1; •«}j0‚h¾[È"uˆ2\¹ Ï‚ªãS‰TWSð,¢‡JØ—_X¿¾z–=™Â^`)ôJk&YÎȨT¶¡Óñ·_~éŠpÔ˜ÁnAÈ3BoÅÀ3}Ý`/ ì(Õ{™‰û³ìp\|¢ùØñ‹>6Œð1;fYø}NÆ^EŒ3$ˆjàò.ä̪)m.¼vpÛõ_ ú£hñ¯ Þ¹uœÊÞ[Ò?óÉÀ8XZ}|2pù&ƒ=-3«uN€ÌË— „­ *tß6­l^€'TZ‰h-kŠøHI =®Øq­ècd¬Q”å²Mò›ÆO›S«\ó©”êÅO ¨½œ±4ÂHWàŸ©Àa¿-hœ?I¼ñƒç6"ÈÅ-Öì™Àh)cP!„ýìSš>TMs öêæåEQˆ)⬗5"> £Á”kº'f4M´Ê@"UÍé1ëz~xH†cá, ι¯”‰÷ Iq¿ {ÞT·uCŸ×;ó€ãïK˜Çƒâ4ÅšÝZvê«v/6¢÷:ر¹8\t[3’eV• IÂKåâóÙ¯ü/Ô8áÜØþMr+Õ7"wP] ‰>ƒžS‡YõãYt¬X­°Œ£<7ñCy/) ˆÃ?õòÏç¾êñ6Vx^®²k­b|ñõ{•îmªí^–%vª4ó‹µå6g…Ù>­+¢7aŸUâ=ªWžW’v.RŠ…€ùVË5g“[3-é¸\Vz®êxxž…WÖ2>Ýè¬p{¾Hº ŒNý|0 |­Sšduy“¼ÔI'”b÷~.Ç®@àC‘ÈìhÔlÝP´]Uôx±`°¿´¯¸Þw3õn“t)öúù°ûj­ ÔB«ÆßrH²TrnúÆ×tjÚEµ4K˜Øa:4ñÍ{Tõ ù}Ö Ýõ¡¢yýù1Ì$nkÍšÇ9£½€yeŽ7•m÷8(±åÇ ð«Mg+ÀOBiØd%ë®aâ»-1Ë”s¥ñ×ûiÑ–‚q¬—CÇ]&+ýRMCX¯YĬ5æeuüÒƒ¸þ¡b²ÖÓÐÔî¼Ñ6RæËNðci; êFq>ç¸hŸ¼Ñï¸÷òx*D— óGß\MÉ®ÄaÚ?+ÔIz\Þ8¶üôµî”«?Šíl¾Ó´¿Tüqí×É–°Z•Ž|¹¶l©åˆ¹Ûæ‘Ûk9zXc¬PŽEÄš5-LÓ©-G»¥dL¦ÝlæƒÝ"‡¤„ÚjlAK¿»FÕ!–ú"aŒ¸Û} ®¶¦[ag6ëþráÍxa¼•xÍüh©Â D0}ÿíåÖkYÐN)*ÄÄ3w~Æ´ì…fE7ß:-~›Š9{UQµ­C–ZÀAze@-/‡øÁz¢…Û/èë#-ŽúÇãÞðeôzºP£~KÜÔ‚/6‚ÒxŽJ¸šd†Ìê'úñ!Ñ×ùP¹UûTd 'ëúu¢ð‰Ú«3í A0–“è*Í8‚°%x“8ä¹–‘ÖÓUä¹§‘×Ðrð%CŠÖ#n‰ÒÔ—÷Õ2ÔDð¹püž¨ÀIvÖ½|ƒŸäžr*°öªå¬j!±?9˜à¥»ìãñ~€X×qÝž€ póa¯ðžLϾbŸIó?&³Ôt å…’ëIÑG£>Ãï Y4©1^ä1²Æì\)´»øÔÏ#OZEÃøÈXJTÎu/ß©ø}·þ\1íÐ0>ªPìæ3¿¶Õ+ØúÄ—&Ñ4 »¿u\ë.*mõ Mðu#ôr*½À_‹{aÅ |²àÒŽªs@ ´™Z ö¹a7ípmpDB;iýÀvžB¥!s ¦¯H„RÒ©É{.Ö_ïÚ!ªÉ‚âÆž2DyK ˆ¬ØŒc.s›wâRöŸË9]D/šiT†­’Š/¸3’ýÞþÒë ÕGâ2†ÅóYÇ/"jlÎGè®|{Ðà$Ì·„xNõkDÉaD£·Ä3~î‰m;¶³]a," žñCŠ1äW¬Ê¬Y¯å*ƒqGáèt˺Ÿ,Çöµn»Á÷w?Ö>‘ݦÅíú9„]Ÿ{…®„)§Í²û›˜ë3{n$;˜UuM /ŸøP[ýyÓq'ó-Ìä ¹ÛdI?Ÿ?&Åm謿LBñ *úñÿ“‰O1ùÅiéð/Ë!c*Ÿ“_Ô“Ê6tÑ_¦"ÆT^?úƒ³ÑY:ÆkçÔ|¿ÆÂªØlÀýC©…Æ8+««c_þ ä·c$ýòŒõâ®÷C«½kýxü±”Às¾Ô…–Çê.à™%F%º–"Ž8Ü£11i uŠV6¶‡J {˜›ˆð— UóÛó³¤H··Ë­ú/S­#*»‡Û×ðçTÙØ–¬x›ùP‘Cæ½OÚÓrMä¥ÒMr¿Ãެ’Ç.4õ´)ü¢]K¿D]Ì1Ê›%ŠN {W>—K^ó×-/­rNö/èq÷§Ä¾×¥j7ñËþ™]›ñ)ëfý"_"Àé'‘ÇDßò–‹.®RŸ7ä”ùX¦f"íúÎÖ>jqûZIúH]½À¤á× ›^.o¯/[ÙL‚.{1Þ—ëâh´ôùp£zî…¥çó& ]’h'w ·rñe¼Røîsä&.Ôò±a{ñÉâõ…Dé•.¿Ÿ'*^hÃí°ûC€èö„Ö¡ts,w±}ÅAO4ä}kŠOá£ûÖ©xæHBëÁÝæ²Ñ#0£¶×&ûêÔÊDÒxw(DQu¡ÜAûT²B·Æbú½CöìK!N#,ÜÆ¦ãkäÐ’îYF Ç<ñõ+k‹ A®´F›¤Íö@w\ýÖ°#Ûb?Ÿ»S|}Õ—´ˆQçt­Òkõ7ÖðL ýCÞi§*Å‹€Ö¬ÇÚj½#Ï%µQàûõK‡ÈV¼´@õòÉŸH(e}:s§ üabÛð÷Äýt»!ÞË:^•;knSVzÉê‘Oz7R'­IYV©³9þe¯³mŸÏ?©š¥ë÷­³'•ƒ’ùÇ gtXú"Îg úœ§T©¾\Yz<³,ôXïY¥™à(uîÆß€Ìú oŠfâuìc¸_Ur˜äN¡¬-B÷ SÄMæ¿*jJª›o1ë,Íæ9våUGð4ÈßæñgˆêˆT{cLÄ;eËùaãœ߅…Ÿ÷ܼç´g cLUµÎãŒÉÌ|¿óëŸ 58hjIwÃy¼2H9JY—ÅewËeâ„ÓŒo½—›Õ‚VªÄ(V¦µ€Vt—ç|ˆ‘¬…™TÒ0/»£˜•(™G‹¦œþÌX¤ácòšÃØõhwÏ0`a›>Y›O9ºÀDt­SêR¬HÿêÄ0-:_[õ^´[o»5-L‹gÔ‰8&̓ʮîÀ0é_ñ»H¦~2.æ0Sþ'qnÑŸ×õW ™Á?‹Êd´¯~ç§2Oì~˜¤±±¢°Ú¾ÒKí³¢°žS¢µÇêRW'bx=Ã`ŠóäÍ%2’T#Œ06•/ô‹'gm‹dÅ£8r—ÆX¯’”ËܵÍA›Å^ûÀšxá^j“l\Ô§6?3FO2¼ß³Ô1.G ÏÝ4¢äŒøÛ \8”ؾÄzиnÛ"뾤 Úg½Ÿ“×BÆ…™* ¯¡B‚bM[cIlÔ“dÄi€J¤9ìFÍ«W­?ûä÷«_M€sË q¶Lºs\«{‹È\®˜çÒóõ»Ÿ¿ZìôuŠ”Ž AŸ/o +îò§ ·Q6|áÞšÚ®H¾ ÇÐÔ;¥A÷¬32ú”—²u`åËv“Ùð\ds}ÎlÏ)Æ™ œŸªž[”ÖÅ~±ÚLþúì›÷Ì7!s½êQq2y’Õ‡ÎCºÚ·ˆnÞÚþÙfnÔò5ˆ(ÆY]É6B|éÚ°+yŸãÒLдñì)ëó06ÙC&Òɧôâ6-…l?õWkÚzUк“It´½®s’$2ïðeMó»T4Œ¹ü}þIŸ W˜dƨp1­Na/À«W—Ë‹Êr{ù û­*õ 5Óqò ¹Þ´ŽQzÛRÞg¿}l ïcþ*šýûû½OÔpòðÀórSVø¾Uˆ #cëÓøþÞ9gr­#wxÄäX±ñ"ŠaÐKëÛ ¥À:4Zõ="±}º½XùXùÎ{Ë@ÎrVUNyÂtP½aIvðM Â(„d2$kû{Äãtõ‚m¹Èqû!HôÐãz…Z~aýXÃ"Yíõt–#Ù | uïH‰C¿C¡¥a±¹-“o~:½ìÞ.œ–§ÿÞØt|p¡aaãèl®¿ÝCÜã%<Ü̈©Ôt㎚=„@2”™oCÿªëÜ:%ÛÆ½E}þõë„PI†¶µ‚z/1ÒÍÜ™ç¬MˆÖKbôÈÌwHÆëk9Ç·bÿrxÑäŒ/ߘ­–ðönH!YÅCÝ^%S¦d0lS¬gø FQpn—ýA½KV8þÝç{! ŒÒ}#o(f½ûܾðÛ° –†1ÑüE*ÀR«&ûšË‹f¿Þ >X÷ÎуA†whböÔªÒ«-l§:ó›lñª³¶¹]ÛšÝE‡ô¥{árÄïëFræî¸D(L*ˆÕžî΋H!”6~x±­ðV,+ˆj¢‘±ò®í•gé›û+)›û˪÷;ÉjÁ·Érj/°Ú9 ®:Γ›KL¥O‚okýËžؼ—hhDMR|•6-ÖØ!C—#Î-„´mݪø‹–ƒ‹QÒγãïXá<«ëW*«›'\ûÅ›eì– ¶WPÓ3›”m¡~=ô3·‡‰ûËæ”{HˆŸš4‡LA°çÂŒ’ÂW=@Aø=ùÛ4å»7©ÔfÀí‹“þµ·SDKU+4Căt}£â£½{Y‡\z¦t}³(ìƒ9WÜu®ù·jŽôn¥Zr…¼üUŠ6M麱eæD7CD×:ù¼uÑÀçów"ýƒØéáA¸´-L¸ÇZpG¸àðb BÕ$ã{õõƒ¾>£xøzIÚ‰¤ðH_Yã{ñ/wš$õ²®S’Ú(þDNxÿ½L’0‡×ùäA,|mJ~ó,œiÌ›,C`ÁTl>~—¬ß /^¾>>¤(\^znn&‘|2µº-¨§ÁÎ+“òêÄ7ä>׿AZšÓ+Ö¡ÇÿåfH¾’î&”íY.¼pwõ΄}œaÄ\aË!=h¶­Ç<Æ;áK¥4JÑˆÈ ²Âx@TŽuÖPMkáÛDêƒFÌŒ§uf‘‡õï¸l̆ì9 )¾ø¨¨` ˜’œèhG>¢ña¡™L¢6û7ï=Ïžña1…ÂÌ[@ƒc—BBÙ_$²Ï΋Ôûæ¤~áIb«’Y3dÔ0… DÚÆÂ”ÐÞá»ï›5lÇ#x3ÖŽ³DïÊoÜÿAÎk‡8­zaw¨øƒÍÖÈŠ>©ÚÀ„§¡Jl‹ÁĺôàòvÈÐXq¿¤£ÕýQ„çKaá“$nМ½3éY;Šq><²3ôÿ €L/{ê5ñmÙM`·LÿÜ>tP…ÓòkU“Ë™ÔRyIŽAzRè1=gµÄ°X &¶ÁíßX)D9^‹Í-oÜ0W0 Î2UOeÄ7Á¢™ŽÿïÆì¯ÿWüˆ6…ªG;[*MJ©Eh±Å®µ¨" þy¥ŒÚˆKö> þ½Ø_ˆè¯"Öx2æÌ§ß7άGa„¾»¼ñFj¡YJÆ\âjº©å­Äù>RªÄñwnßu|žŠ/==•Ãïï”LJ6â¿kœ0A,T}¤C&ekô¤ªÕ$ûÆ´¹*3qÛ#Ë (ÞËÀߎ«‘«a…Sþh…Ø€Öœ cIø%Ák*ŽhÌA3''Íê\•ê {è0h|ŒÓo½‚›?±€—uB“¹l3G’-•Œu3™W…Û M¶¤S§…­ŽÀC;['‡©­&Q>f®æA;—@…d²À²ÙIÀ-W)ùê#a^0E͉#Î:+B}Ú,>kúYk ‘y/ƒ„ê;ž&š!s9·ØªBo9Âhùš´ ›“@Jïm"}¢O‘kãö]äžÜ·ÔIOõ $SÕ…ÀÖ;b¼~ØÍš"ÃÍú,Ñ&qH*íœr¨ia)VßþÈJDˆtXƒ|Ö1ôxåt§:¢òZš§"â8iNâùÚuŒ‰"ÑäÚ»£uiÅX÷Ӹݩ5 Î_Yð47f¹+&¡c1UŠËËäŸÒÎ [Æü¥îÈ1¤BP>öÐOøªxá³­®?(#%¹î÷>J` y½6ÖüS®éh:á¾TKJXd–¸Ó)=zZÜ@@% a²BPŸÙ[&¬ÃAñ´Ç™NÃ^g%ƒu¯¤`]9=óŒ/_ûzWP£¯B¸™ÑÊømî¡{ Á´­{;èÜ9x©WÎÚÕÈÓ!Pw3FD¯—.ÝTþ3‡ÉRs°ÒûT¼¦l]°÷æÅkÈ‹ìȈßþRÓqç#Œ¡\™G=â¼ú8%µu5˜ÙkS£'n{PIßsœl´Ioéì TÄVᤔ6#™t¡8Å—Ñø’Dõo{ÔA¶É³StyüµÇ «£ §\??™1{‰æÌxt#í¸ö±Š‘fþ18˜fË#ÈeØ©kÙx0v³ˆ#7KE9müûÆ ièȱGRl4 ^¨¸wM–¯öcº:hw9˜,h&Ζ?m!×ÎP»ÑÌûUn{0Àïe¿ ÓöáïrA|E”›¡÷@˜ÛÐ7p1M7bW@‘&ês&–Ö oØœV$P\ù…i›U"Μã˜9}lcõ»œ%@¾+ŒÇªÕAV4µÐÿÚ–¶¨—o|6˜ÔyþÐé¤nöœÊ ÷_o“´DãPƒ«›Äkª‡ÕË2yëåúM5<Æß ³B}zSÅÁÃLg©`qvÒTË­úÛ/)~KáMi:’.‚XÚPr0«ƒÙÏÅgŽÒ` ÐÆÚ¬¨žf¹øKódÕ密 <€ŸïËÜ‘æ:JÖý;¢»߈â{ò„ôî/9s"_Ï]e~8ÂZ¿?øÉgäù2—< ”ÓËÆ)ƒH³<“2°,ev9³tÙBí2… ÁWãÜ’¶xuh:T uà¢qMDÜ[X:œ¨|¬ÿæŒÅ*aA}€ü;eüLš&«¥“¡©Ùà ŒÂâ,Mi‰#I‰øú ?gÆ-p9ȬÍ5ÜòXÎ)&Õ˜w vL•otJÕ2™¼žŸfŒ(s3O h,"€+ Èé3We7°A¢­]ÞóY‹A–ñ{’&‡CØjÄk…B-–#¯Šü»{óŸ*Ç“w¥ÿ oŽ¡Ï&9ácµ^Ì3$!óŠüz­Vaù.¾šÑ8a7Í•ù¸WtGœËû˜È:| úxs·Aô» ˆ45z. Ì$›!²4 ³{Çf‹‰Ï¬Ë,øýŒ½¿/ßqGxdhš».n¡pòTè_Nž¸ÚåÒdüÿ8l|º‘gd˜kGe²À·zk ô7¸‡/˜bZS¤‹AëÔQ/`Åëb•P‰%i*@Q8„gÕøž…M…C±•6‹x²GG? |fÚºZ--C;¹»¾Ôî`ósž$õy) ?~n§H°ƒÿ¹¹ÕÿÞÒ I"‚Ç$:­Òײ‚©’Zò¢{ᶃrÀ¼ØÄû*à§Ø…²íÆ÷D’Ä)h$^ì—0ÃØ¿M‘Õýãõû¾À;ðˆ!«o;´¶ë ¥x`EÓä%~‘üÊpoDVºÝçõó!}ðÝô×{Rñ6§X·Ë èþS£ÙìÖ:Ü‹”Ë„tàçCI?ÿi"Z±$14ÚÄÐ={m©þ~ð!üÛßÚ$¿Y2¿†1ý Êòa2Ã§Ž‚ÚCò~–f#~êvvÅdºÐ,/Nyu XØööߘœ›ZK;­‰æI%2nœ­9CUþ0!èbг|¨SΫ\Ê®ñÙâ;9ü¶?l4®mÓöNnèU»…ç`5¶E»gíVt§¢®AîUøÄ<ã‰ñšŠØXñ$‘ ³ªÆo9À‚¹»èZyU4=grM »7Ze kÒ1=HÆ|6‘ô}¸©He„®‘e‘Çžãÿî -éB# r¹ö¿ù/‡ÞË虡=ê›òù¦H`š½`8ˆg¶mõDç•m‡#%´ø¬·!n8Wc‹}emûµÇÈ $å7ߢÇz ÓŒmá†~>“ÕFѺ³8ÎN²ŸÆšlT§ŸD’ =Ü®|ÔD®UáÀ½3”§Ž ]éÕ5»2m~¥"m–²£ãi¨hnæž.º\êÑÌÄ«©»µkhƒPjº«H[õºß° _ý%ZkÈÑ)7ÛžMŽÄS‚XÇŒóÎõRÂq`DLçB(ˆ›z °ýQÖ™L(CR¼À:²UHÁ®d•¤”Òö{è‰Gh‡Ýrˆ^ `ìåJ¯fÄd #Äák$Ú•/'âPlç§&r#'~<XcW‡F ­B®<HãõÏ×þUÊD®^á!-uœ°€ú–¼:ÕÒßÜm)¼“"±"7ã5úH–‡Šû`–tW±†0‡hËÀŒ“²Õ¥–CåR k®t´Àv‰ó€òs[ûó±8ƒo›{u+±^\p8’¾èQ«\#0<˘üö±†wQ9×nyÓÙð„líÝÜ€Ûѽ”ƒ­ÚvŸdí‹ï]Ñ« Ü©¿çÜ9Y?œß¶Q;¼aÝ>éØeKÙÕ‚HˆšÑÑ2~‚9(ØÿM'— (òÕxýûr÷Ûã´ó–7süàH{•™#õ_<YA¿‰ž¿ž˜]‹?#Æœ ÷9}Ûô+iR­—G ]@P›œÉ”]¹ÆòOìq3Ÿ˜´ôÒ%õ$÷RDlí*u쯓½I‡àäOeñùã;ÆÅFÝ/«0%³¨d*tJhb¬žG;Æ=·ú¼ÅŸö"t<þðþðþðþðþðþðþðþðþ‹Þ¥Õºó;]K‰¼Ó%n¿ÓÜ~Æ2‘@ÝÊÆIØÒŒjnµÞ˜$o“.¼ðv7Ú¨Ð0ˆŸ×•GÙŸþBÿ+HùËrÄ8ü¡ø«5@ºœb9 _ pá–šq{„äÓ£Ýê‘ÖUSÍŒîî:—[cÇ¥l«æE[૾7h/­2¦Q$úfÉ^äå?]Ö‹cs€éK8ÇŠð¹sµBžéÃEËödç è ³|š;ˆeßåí¤5!:)8×s5UTÓºrg/Cpt}«ÖþÆÒê:GË·óËCߊwÏgŸ§º®/gõîüŒ¾s¨›=ÝDËX¬:ù$4o«:ÌjÆ1¯¾2éW¹ƒÕ;–)Nt.ð¦íÞ8²R5Wü\O↬°3 «g^oS¸A ’XÓ7˜ÙØÉºo¿€Àq÷KÑ ªÌÊy§Wï}ï“øîS“ÝÎÚ6ì” =K(4¶/¦m};VLCËTá^m•û½Qéz×5Õ{äa.Ê·Ó»Héöõ<Ñ6½­æáA:zÊwÉ3ü®kþ\ûÊÐNý*»ï®;)e«&ÝøŠ¡L¯3??|­¼U–´'ŠõœòF§Ê§ä_kbäWŽfyr’œ›vìŸþËÀßÃ72js?%i‹ ›¶APgÐ;c&²¥ÑMY£8•]÷ ó„|Ñט°- Ú¯ŒˆŒÎ¥þuQÃOª”ª`ðW6€ÕmÞœq—ïsƒ7†G»hªÜ_-g)37ÉÐO¡'‡6l1¼A±ççÄö¡ *ù,5B x/©]Nç0«ÏI³èà›frðbd†R¥|Xï·#Ì8},Ènp±Ä0;(MßûG^M°™œæ~  e¡‹ ¤(é ·—š_¨(Zï¬lô&Ø€~¬»!ïÜ¿†¶÷†h ÛhõA30²¸[„³|Áåúšä 2âÎO¿×¨,Zý…ê¡y§êf;§çZ߇UÚºO›Ü 靯> e7r~†»çXö‚߆³ÂKí‰Ðsª[·ÑÛ>'ês‹ÑW™ Ô*b>Ýj{NUÌ –ÌCX¹4‹'¯Û¼÷9ÿõWó8Ub»—î9ì8ØE¿€ Qì(Xç…ÁÀÀúl¬DTÜ3ôÆ‘0£ž/v_c€î õ‡Tâ• uÔJc` PvZ·m0yZ¼RFÏ'Lt*´m™ ˆZ†üC˜tÅrY~67`ËRÄ’2%b6W¹E¿·'f…€EÄ"aÝemÀ|c]Àþ'ˆ{ÆÅ:¼jâo-ˆ0Ô34th‚LHûfíàPÛ5<”E ¢Ó¨2˜/’éMún¶¹hvû¾ïóÔ¸ßuÜMñ¹¿^4ÚÙÅœÌnFqø\é­mlX<ï‡+**‚¶óKJ¤¶Å8Ðb¹F­Ã¾Ä ½Ì³:W77ì–ÖÖÞÅEL…A?-ϳÊáÕ|.ä|‰¨¾042ß¡¹9ô?}¼e£´ D!ásÂñë%׿ç“a1êR/´3ºÁ†ûø­5XÔÔ×{et666*]Êý@×××=…²É÷üœÀÏÏÉII}óóûÃ1élÁÌ^@ë€ËZF7½IÅTVh *…ÏKoqd’Zg–ïÉròòÁ[Ï·&>1Q'SnGýåÆsÎäCä ð'4±ÒJ#J¦#¹ê4qåêÂùEõßÕ)iNœ‘åäEdŒÐ÷ŒPñ £G®•‚`²ÅÍ•H\­·>Eä°maˆ‘ÆÕØÚL•5,, —~Å.E£p”2Á™I¢…]=ýz`‰3‹…°à­thI2>&Ñ&žÈŽ‹?¥(¡j ÑGÖ-i¯I.ÒOj~Œv2¯×îŠ9…ÖP½ð¸‚«Wˆ­öt5ïª4¿%BÏ£ýCm{«/­Þm‡HÙ ä8Á§+IkàV‘¯¨Úsª CP4*86HEà×ûFä5û³*[lÏS+222k¦PÛpZêUÆ'&sVM76 &zŒy_ˆ!r­–Y³0'ø Æu,øÕOðŸŸëÑ–EX¶ü]H Ðpˆ!<=9r–oEîµË„™¿:;N†Žß´”ýÊñz¼Tdfgª¯g;Y IwàG›í>¨$²™\‰¤2)€%y£´P‚GöŒùòvr†¯„@ªoƒANARvù›¯û„mµCÌ~ã»ä9>/ 8+vÈÝShÓ\/A,6ð/¾x-³ÄÌ{‡ŸÓ᪾Ööp—=£ÝŸ¡zÚœü•Á~ƒ´ðÅÎdy@G24 ÇÎ;CÙNÞßü²\(%‡4G\ë7C‹)·jü”PÖF%ó8bWŸŠÎAkFS ç «ço㮠GÅàEÊWÙ.ÙÈr3Að°:gˆÅç¡38BÏE_xE>¡f~Ji¢A ìSž"ÕÎ ½}CJ1^G‚QLá²ËºÜƼçw•XŽf­à)êÝ©¶°“ôñûj"çù:@maŸôÒ=ùºÚ-#æsâ#QLóšyQ³ž+"µ†ÝâäÅ M‹µÙˆkÞÁ…äÑT¢¤ùEЗ¢£Ùôñ¾ÒlGìz±-((hlfvæu.—,¸’)ó»ëlh"†”Pr&Ö3ü¶å‰)ð¸¦ÝD)|vÞξŸ»¹t*r§Ùñî|ônX8;Sœ2¯|Âs³#D¿­fÒü‰ç ¸ 3i»¹`½Œõù³¹““¦Lá-d­fÅU-[[Õ‘Ì.Z"ŠÊØ;¦ öö‰7W$ð¡ßœ°9ï¨dÙOóñð‹P6†êëú ÷ |ZeþÉOBí³ø™%ÏO“ƒó³êØá°7%HEã-^|Èj4üÊ –çºÅ8%W7uú~§ÛïéÞaÇo\±·M ¿ßÃ(~ó‡eÕ_·o͘-ûàØU„Ü c¶d‡†lô.ÜÎni‹8’â5^çp&Ý*ŠVvð-v¯.¶è¸©9„üúEÓµ™!Ç7KÔ3#ÔŒ6zÛ߅ʵø|nîþ•¿Må ªÀ…tm6è9b`ÞvÁ~oæÌ©Ö |B¢ûôE[ªéN)›ê!mÔÜÎJ|¥~6§6ï™9ò0“I<3Ø’‚²ä’¸ä:ÿ‚”ræÊ¤À‘ÜãTˆ ’‹ÉÄp¶É½ãÞ–Q.ÙjÆÌD`Bî¥"ÏÅPœHî«£Aßv«‰hC”N €ZC…“Qüµ“¯DE;G`=ͳ‹ã”õåSõâ5¨+ÑìCO°å¨:ÜinRË’ZÅÄIJŽîÍÃᥠ#ùtÀŒ:b°s ·é¦U"‚ñôÝùa.KõÊ.ç]˜í·]p›Ü§±-ôÆŸ‰Ý<–Ô¯iìªT9<ß$ß(-÷muÇÖ¬\«ä®öMcn™fI¨e"‹Uìé•"÷…Ñ3ãvU5a¼û~=q~ƒ<‰—Ö>ƒu}ú‚›',ÌÁˆ–[),úúΖèb¶0:tnEñ~ü=hL’ý;?É‚Ÿš·Ù•[[zœ«w©Ÿcf×ð$Ñ 3Ý~¨H%ÐóFÜf5&¹ñw³LÇo®¤EA <Ú»5íÓ±Ó²1ûθRY%ê;¾¼¼.QŸžS6Ÿí ׌7‡Vu.ï&â¢EQIÒjΉ'X§+lãIcÁt3àc ÝããÀ+òîßxß Íÿ¶Õ,P¶¢¾íϼ!S'æ´eÏ~0Ó¥øN«m—Ùó"Ò°t˜Û(øú€=ãøNn9?1#Ö¹+‘w‹Ñiõ> ÓÙúèžØ5<à»ù©ãLà Ýá`m—Ó5ïwµíËÒ–ÃQÇ$—ÃßMXyå£\M4”o>A!¡ý)mž/WxÃRdwñ#'¸<%&åé÷v³ýÀ/<û^0áwðÔd³ŽJ@@ÿ¶MH¸ °¡…dJØ7˜¦+£àDãýfV ÍùfÀGó®„gSØL£`Ç:Ôû‹©ÿ5;ðzÓ­€ùBDüJè|âé–qw§âééIÛl½šÇëýTãù ¼ÀV¯ü¾GGFyïT"24§ôÚÛ¢FânŠa1êþÜ»]Ž]uýN×¶{cípzŒ ,Ž(¸‹‘óxS J__½&ÿœŒ•/D¸à45"`ÕÑÓÕ0„OæØŒöÆ™¾Û² —±Ò ´î-^w«^­sêîäzÝŸ—ÖHbçhÎk{£½M—йÙ°pƒ"t œpYcå_ÞN1¹Úaw) ìdzÝï³ø9>h'¾\Æ(­†m+Y¸±ê¶òxûJ|æàýØÉ±nÚ9á·üXðü@Ÿõö©úø`šå@į1ΩóQë`˜cG ‹7Dl ÀÏr¾: ªøP|v»B<ö8øîWÎ@²¼ÖDÿ>¡9ºí vüú+Ë¥ÆIþ™l9^MïL@Jÿ1¥ÇãI+~صíËzøCäo}› DÐ7—½§b½IÍ âb}³W-­-”›C½eúäº ›5Ï–ÑÓ´O¤8Îðv‚dÍr1èÎŽéJëvó…H÷Ôªó¡Ê=hüøÂvúÐL*ó: ØÕžôx—ù6½rãâ‘õèÒ5ÀØùë òq‡¥ûq_o8Ý_-Oùîv²Þ}`uB–9ûB.8¥÷ )dW©ó>ÒE¿Ît±½V˜|ÛL¼§¼.4¶íËIì$Hã>EßJ‚oÝu~”qÿiÅL“„ìÜúHù¨%hÖL¸†ø(’•Šu{y¾šú}lÛå¾d?  ébÞ¹Óe#íã¥9Ãè;â3ãªÿ’á;s?²›0“žÝkéÅoÕŸù 5@2ž—Ó¤îÚ9ø‰&½u'úl  ¿jf÷Lm§ÜR1¼Ì‚¨;5â§/éuµ÷ƒëØG/['0÷áëðmƒm8®C‰ÝÓgŠc©÷ß>2–Ÿû?\Ïudu„} ÞÝ€¿lfãÞ}¾JŽ~Ëýêfñ ë(vù}ã~ø´÷ÞAMuëã/ØPD@Q© ˆt¥‡€4¤H—&¤÷""RDé ˆJïˆÒ[è¡Gi¡B $!ÉßsÞsÎ÷;wîܹsîÌýƒ5;{ï쵞õYëYÏZûyvfO´‚çó98 É?Eéþlº¶f›™Gò 0GsÀÁ˶0ÎZÐnÕ“Ö·[˜Á?~:::Ž®ýš¸°Jßõ5û+ôÐrcÏÅÊØÉ)SfåUqQRæþ¢¡¡“ñC¬“`@WÁ#˜nçöŒ#Êg³nQ¤Ë‰s2q÷ñ¥._Òl "$ƒ"¸[€ÂkÑÏVƒT ©{ðͺ½«Ñk”Iø ÅØû¥@‡U`‹›Xa+:ÈÖçoú+i²ã"õ ƒ ûÕ`u[~öÞ ìiþ²¯§!h°ü8Gd¨gMN$ð ËÄïAŸý#«µsu2@ {‘nÿlÙƒ¹&ó-³–Å Ðù©S×¢öÛßIgÁ硎TKDX_o…VÈîªA]·úå"ÑúõF¡úÃâá)(ëÌl'ËaðÒÍ¢žÃSVÙG],‡GæúäÅ‹¡ò¥›Ðð„Ž^”Të÷¿Ú]¸&Åwã ›5˜ èÚŽ³T^LA^öw))žlá)ýu¬ {âûmJµ„¼„%‚f†µ¶á‡ËN±+ÞÜv§î…¦`fÖ²˜ÛC^ì…<Ïl[·ä—îÇÀVýh¡mù®3‚’M¤õv¦|úãϲ¨K­.R×Q[V³ç$éü;¨Âd¼.B_LTïEnÄWœË@´û¾¿\oé\åŒÝ:½÷d±{,ÙpVAɃ7„Ö´„Dm\p ..¤áÎd×-b¤}C°0ùëQ)ûh”e¬ƒ{¸lxë3{©aNìèêÄÞRÛ®º#‚²"8’pºîÁáJ §&@ês-›Ój…ï- œûÙáµ›ÁÙ=—Ôa)GË57©Š'²CB¦zöÝè‹Ä õp¢˜øZ×LIÜ«¬ ÝÙÏÍ%5I& 'ÏŠK60Y¥aëÍ¿G¬<Ã̯–)¸#u¨ïïUü½¹2Qr4‰¢eoοJ'€®×æ.gÝ4Á£¶:j§ýûÈåräלÊ%<ÿl&iGÈKä#Yµ €­Ë_îë«ËŒâ!!§VJ(S+M µ£Sj.”¸n/òap9µw LoÕã‚Lg»wþ½Ãèí’÷S39¶­Yj°"C½ÐsDФÔÛ#þAÖ dY¦þÈVÁ¡I±ìGÍ2rª¹„–á\Ý>šÈõÔ'd¡îmkÌ(Z+3ŠÕ]ð†›o¹­ÛæOe…%¯Ï}rõ;­¤CÆ®óò•@“¼û§„á2÷[” jNÓ,Ù–Ã/va}Žp«äÙÝ®B~öÅ¥›w€çcçˆëžì¨Z (âm3 åùë0x¥k8!=Âf‘_U™HoIXwÂ4ç¤0 uñ_A8à+(²aœÐü¾Ñ©Y†‚³‹·.B¥¡0ÛQ³=H·«ÞJlº}7¡˜Qæ4È‘¤÷aƒ>‹LÓ§ƒ²†)ïÝ"îOÕêÌn¡™CrPJìŽ Ü¡êpŠ&Üfó€<Óë"Ï¢ ÿ5åÿçÖ,Ü®{-5Œá 'ùîÄ ˜¢ºù¶4«Ù»3ψôÖ4¡¤Õøˆƒ*ø‘_0¨ÆxͺkÒÉñq| L>6ÓêõH7mò~M{aã³117mpI°íz«^ÍД„DÿA®ùY1Tüø“fIF—óöP{!ñ®L4á*“ºÇÔ´ŒWmü#ƒWè¡+JMKj Ò7À—´Ëar² ùTô ’œ+´éKµÛØþ!H[ižµkͱ‰¬LŽ¿`þ›¨MZ0éÕ\Oõà[³Ô¤8š‡- ÄA™’[ ±*XÝo´@Ǭ»…NÑ{žÝ’µWõ"*ì wÝv§çJÃ^\&à¥d2Û¸È04XÈK–(Hê¢äíU> ™7Nå %5LÊžáJz×k>=¿]wik䳫LBd3*e R›Î6^çÑ ®¶R€rÛ¤+xŸxÔ¬]F‡ÿî/íºÌ(•l”Ô]aST« ¿ìh½öPº”¶F™ ¬«ü™8©M–çýšûJ yØ áñ=W¶–†Ü~¿8^â“`Òs)‹Ó/æ4ÚÊ<G5ùi<ÖéÔI°ù·ãMZ|”¼Ê=­bŒ,Ã’ŠE¥äì‹b‡ìtŒ£VÚÆ™àl‘2Áɳøt${£÷Μ2öI©)Â+?ì÷ªY[HBÐÛæ¼RÌ@ÐÍ ¶g»ƒ•`óØ&lâ¼ÜèvúuQÅË.™Ôâ+Á=>Áưdâ£Ò¬½Í=£(ë@ UÎ+×/Øí<**zÄ¿Øáÿ=–M€.’=úŠ}{Œ4#Í‚ [·åÚº¢Éñ±"N6){ñ±ə‘éüP$5µí¹èuºs~ûË(8º ‹û†ZðùRLeˆk£è­ácÉ¡2iy´@ç¯lñPwØ6­,Ñç‰ý0†çI2\ÂÊÀ‰›èô 3ç3»Céù1è83s€êÍì=éjªÂgu–î¯kÛ‡9§+{ٜ߅ » ™ÐÏ\|6r˜ ¬³›ÃûÉë…úF›lÁF aá…‘!…°py#oÿFE…Þ[@³a6 ÿÞ‡¼AA‹±ÔwWå <ûÛK_È)$ûÂ÷ÚIY͌븋aoбzÓoîåj§ ïÔ n%6XÚƒíÆP-GZ‚fæBì.Mè¥KvÆà(ô4GJX—Üöš#ñ¶òTƒ‡$?®=ý:àÌÒ>èb´Ž–o H•ÞZ”ØÔ±Ò A©ýöÑë7lékfä ƒ¯Ë—î·ÄÃ'ß)‰è[| ‘ÓûQvCÞâø«.eB]Yx$›ú»ÖÈþ·™ÈJãRçÀ6@ýkAi¡½û ŽÈÛåö/&p;¯ðCòú3tÂ+-áÇ×ÁÒÕú7ô­¢ÎÚ"Ç»ƒß0œ†æÁuGføju¥å ÀËAo¿Ý£š -£åñ#ò”á ÅH¡d$iïÍ ã,*ð}dhÖiÓµâ‘ðNæ&Gg0v1˼#ÈyÖÒvÅ0Šñø=zp9ïâ÷ª{·özÉí[×RªFM¿œ®z;`É”^ŽŒ+Dã¬TŸ‰Þ#¶)wüØþ]¨Ñç¶ žgù*€Ò¯Ö=K; /úN4˽YôK ÖtöQ‘¹VjØ_ ԉʋsbÀ>€ÌÕÀâo@ h `Ìë¿n&”…ê;°”gÛF¡É`AèÄš@UÝ Ü –êÍ~5êåkUÕr²—ˆ“=]¸‘hýÁ‹A•†„¤?­Ÿ´?Ý+`d/ÁPšŒJtTwL 5È¥–ÿš›´í­Ñø¬W~\.i†÷¾i^ñ™a'£8&¼tç0])½‡;‡²1 ¡Ÿ]à,†LÜ™#ì§oH”ê!’õ‹wôìýœ,h Ë:ëÊm•ú ¨ÛÎ-Ù¸ØíTl¿R¾d û¼'ý¦Ë© €éµëñCôucë# Ùã–ŒQ^É;Ò%ÛãÔã<šlÁÔ¼]ÅåÍdÏt,›^ô÷^·º-ùYê·£lŒyç·þuB|s;«aç•âMdvÝ‹þ¼È¡ìeµ.a‡’ë)’u|(Óý4û]7ªn–’º¸Q$^´!‡q–WêJHDÆ:nnZ­Q®—ñ„‚>– !R<|„ éX¨Âʲ«^¦ï³I \¬”3¬¤Õ±aš"aaH²êÛÞD³a¿Q\æ-(e+` ¢òuÏ¿ ¼ŒRxóêºv(˜êü€\4ëNy ù]4ul|6`*¿/¦ÔQª*Ev!ü£'¸rà~é%XÄ%s¡°$Ÿ§Þ &‚´¡ËM×Ã#ñêG Ë~ËÆA%vŽťe#vÁlOž»«³æ@céïêyúœœÔð…S¦MDŽþqÙW¤¸ ³cÑm«£üÛ‹ýâ‚•õ/·§ÆI¾ ãæ Éˆ—û$4Bã½ê‡â¨—1pÁ §s`Ís¼?§´º/³êü"¢Ç 7Ò®„ÙFñóvK7 Aèf=ü{ ÷,³½ÔØEL:ˆþÒÂ_¯üFH€¶ºëNéèâÁ› taî· iæÕïÓ ù­ˆ‘>î¡Æ Ç;–¶ؤ{j[¤ÈÚ.Y'w‘ƧsþEÂÜz#úö³wfaV}evk¥uŸw+³³&v± ýS©òaSÎÆu ø¬ ÇÔÖã8¿÷­‚öZELèÁ‰Whj%ËTù¶@ýin0‹jͳ¬âÚ„œ<î6èU—ǵ^ím1VTu4@ùEwÛh‘™âÍ“¯îâ’¿St[—Ð, º¢üµþº þþÇ<6ï.g@ ù®Hè`¼å{‹>½í¡l1¯xõ†óï¾(ülYNù}Q^íÛþÞÞ»Á6#2Ô»R¼Å}jÞÕƒ2ùn² +´Â­Ö#³öß‚—ÍfÉÖ§Ñ·}ÛÞÙÏíÁ›ëöæ„UIZQšB×àP¥y«Êæ¢ëåÛ #R›uyw· Aï¶Kž–ÞÞ»!ØRS.½R|›±B]¨›††=6'é Â*\ÀG炾Ây¬ê(/E`QK"µEjëYs¢nø!b;lÀ¬<ÏE‡ržhŒwÞT·eëX<ÏÞ.$¡Èo&%HxõƒR!`>ÿo~;¼FŠÝo& ûÿÆðWzW6þ Ô—>ˆG‹m‰Ö—3®ÛKq‰³‚kÓ÷J¤ŠÐ̵e;áWUáã9œ©|oeÖ€`M¹‘@YL ëNãYù›¡Šµ 3¶Uíð–R樼áWÐB'3M“íñ"¦8ó1^Ÿ#`@ú! [ Æ«ôç6Å‚˜ÇHX§Áº&<µ—4Ùà¢!%E˜§$þºÉµŸ}¿ç/‘‘ö½Ï Ør7^ߟ#r¢­ÁvŸJìÅiæ?ÝwMà+àÇû© § ^¯KõÀÊé&2=2yM>ó'ú\bv8;PâÍBßPp û8Ÿòàm]”À õÕåÕ©¶o gˆÈA‰¢ªtw©ŽdO¢ñl0ÀaÙ÷]¯ €ã‘f]-¹\då¹+ð?#ˆ¿;¸ß—C†§ˆØÄ¶°+”⃖ª®¤óåçZA¯ü<¾þD:›{Åljî…‚(çÑT# D)H¾¿ŸÌ€:nk÷ëfÌöG+ÏÁÔšBÝ=ø L@ÈþøcÔë\e”ñ Päf¼ºŽé÷³ú|ð®˜"=Yöqy úÂlšf­tÏ÷©‘Ȋܰ[ó)€fLû“~“§4ôu¦ïb¿NU¶xSg&WGNžRLñÉ> JÍÜÎeROg¶ºÄ€ÂqÛã¡5O>¼AóIßP6`!—æ{šC¯úâZߦ/}E£õÒ÷IÞ|¸–ms¸„õÁ7ËÀ´€íVÙû(œ5í óXå¶R}k}Ò4»‹šš¢èÂ},[êJp!Sû môâ+ÄÐ/#ð jíi+NÙ¶=Ÿ¼’Ø2“pð‹´ã«õ+K_êõ\™²Õÿ‚ÍT-ñ‘§om¶ü8»HYÛz´UF¶Àe$¡bHûæÜ[Æ}ýóË{Žä#¹Vq>ÅÖÍEÅ0_uÖÁ#ÙÆ¢£o¨å9¿ð^òºµ›Ø[æÕt= ¤®q6§ŠUœ¨_¿lÿ ñáÌ&%öÌ $†:,üQ×·¿ÍÎŒ@°s²Ó© ÓA±Ç£ž»ËÍûâÓF@Ë5*ª3Aÿq?Iþ—BÜŒ· QƳÿã7šh ä¡­¼ë£© »Ã :ß÷ }ÊÜ5HÁ/ÉO5þìHGÞØpшDFTr¤j™Ö¬ô ¡sîRË{{>àÖçWÀa8!dØ  ’™<övÊJ°"‘(¢áW Ì£8á¿(é aÓT>Ôny¥‚qþm~‘㉇̃-¦~ýÒUÕ„*?í#ÀÏÆº ½b>Ÿc(¨£D’•ŸæŽ*'%^-âÕÏûmµá¨™bl¨€¤¨šr`l]{÷î™åC ²LY5´ãèk3ñ”­­­øhP`>®K‹¤”ÉÕ<²u ~1bï“jNM´Ä’œG •B(¶ÃU2Ôy…²)‚hi–ošlÝé2èÕÅI æyʰÈBvGJéŽ'çÞ•ž‹Ã~‰Ä‡ÄN#Ò<ÖPx÷—[Ö›™Ø–P©ëï˜ñ $`×{¬áÇÛ}rEh¦„O%G "»n5m°Èêâãøš)œÃžÞDÄQpH÷®ü¨]ÿšäš]º;^nµlº—ò¥R¯õôG7bHîÁ/é;ñŒóp~àÊUŠ£|'/†{À²õ6`ý¨ì¯‘‚è§N£|Ñö"ø‰ä ®Ôrkë@« 7fUsT,–Ëèq~7B¹ñÀöÔ‘Gš.·Š3±{.ü}2ëêG‹bM°äùÕàˆ{%z°;Û®ÎF+°XRå,‘ÇjB“uðC¢aâÆ‹³”q¼”"s§< êNóŒl_úFŒ_¾ÃD¡ñi$Nv¢EKÐ͸ {ã½±eGA{ðmÜãÔ–í/âмíTW<2ük­°Õåþqól—Ð*Oñ^É ‘Èfª­%¥îîcÈ ¿þšÞjÃü©½›Su”+JYäDŠº½‚:ˆ ì Üßû/dµÜˆ?” ô˜\ {ÑBÈJ 9ulP€UªÓ±„czˇ®àª€>ÙA ½¡¥µ;`¤ºT7_^DlB,Lüã0ñúTäÇu©Ã*ÖÑVF7˜ÓÇ;“FÁƒ¹÷ø÷‰s”*qh‘-ÞÀ.‡ ûà'´¿+Š€E÷É׊59^¯]"É¢¬;=lPÕB²%pü )`—Ý[n|n½©nJž8tO¸;ÌlB¤Žl´I6QÕ*C!HSĶ Ï×S¬Ç">¥P˜a©ëpJ-h_tZùV‹õ p’Ò€«ÑtrnQ´baÿœí,žÈ]þ¯§D¹%Î¨ÔøSrñYTTÔúÿ^„¾Dþ—¡‰ßÎϯ¾Ñ£ñºLãÅÈâÅøç¤¢9üb]þ-JìT¸r¦qã‰ë þÞÇÿkãöbCµ¢uP2}58X£ÎÃáÃÖå“‘ßß¼Nº‡kñ»ÖW)oÙ%JnòEWÚ¦€ª¬ýKˆ€ð¸ŒünÛªv#ÄHfºœ "vNÁ-GI}>­h+ 6 DlR@ö3ÁÛôL-‰ÐCÁH°2W„S, f©ŽCÙ.ÿjwîÿqÿ´øâú§Ów¨¨®-üK½/i¼s©ÿ êÍ*ª½'ȤJ ÐÈ£Â]ñˆ—éíñA@?ÿžiíb)±~ø!e.bQ úuÑGwŲ(|œvy\qh¢¾áÆÑ%ÿB[&¸.j"D«$j&ô7_¤`7 ªkOIãYžH`²åWG -‹cH«y5”Y¶0AT÷í/L¼ŽÂ%Øá„Œ‡‰cðħB¹ýS/.á¥5´o |xGJ3E–(»Ô° ­I{¯?¸²´]ÏY/[&žƒ5tÖ­z,} _­˜7nK,gÞûD¤ïj–ê¡%ªá>b±¯=ؔǩy’è+ÞIÒƒòçÉdŸ}†¹g±a{yÜ»-Rè°^âzü…µá5Vý®^ˆd¼³œÆd@È øÄA*"æÕ¿¢ôì¹nSžµz¢Î‹/$ÏÚržf/µ=pv®¸­^¶¡•ǃIÍò½§ ½ Šüï’ ‚È6å£Ç+:]ð­Öòð%¿ÜÁq/6c[¶„Úo^Z> åôÝgëN6_ì½y+¹‘>o­”Ñ’•ªõ)ï I¬ EŠÂ…ñ6ž˜EKÓV¡çm ÉØ>|ÚÓ9ÉD¬T¬÷Iÿi±çmtÓEˆO}üà©ÏÂfú€¾_G¼ÃdÄ‚¨Xì™dßn|¸Wã}W|MSO›’IJ#ÉÇûÔr‹|å,°G=ŽB‡ÀJ½¯ÜsDJŽŽûú¾ªv5aú…ÇN«†M¸0MñÂWå—VmŒg•oLßvz|«[È®A=<4Û&ø&yÕ–æiêL¸?q€zÚ°÷'ÍBŽBh<$ç4æÍ+ú6¹b€±óéÂbälCã¯èèÏ v¦O$`.i QR`pÝÊ|HC³ˆ›\áïˆãa&I´¯-ÑÆŸGä<"Ýy´ó³iÔ‹½°)£I&îc|´Ù^ʳ^´±æ­éŽ¥J~Ƴ5XèÇøø&í[¦1À§œ±Ðd€¹„#ˆ–Wã6ã—$ù¸—ŒU!Fí¦•섚ð×õ¢s_—öåds/´…¯xSèK9WMÞx@ |««ÑFrz4ò>1L)Õí%ó°Á5L³~Ù¾·nz«T¼Û¤÷: 㨪:k^ºÃ:G[:µD÷ YÞ4דj®ÄV‡ „Éë –[–?»ƒ]3SeÎ\ÆÓæéëoÿ~ÕÜw=hë¹ óë³T®"µâ ôÃóÄV¹—‡}gŒ f€*}áuæ–J9óUʺL™véüî9ë‹„|¡ñ_ïØ4W<[ùÔ#=tíô—ýï>Î a­æ¯ó Wü⨖fåâ­»r!öž¬ Ûâ˜Ì¦å3/#ç'­ª;k­*ãœgïè9ï Áw€>øÀSz6žt·”¾—.„'2G/®»ˆ;•ùŠ¢ÍØl¢³Ï§mì6æ\J¹Ie.&«ý“õËá±ùê^þ€4Œ‘'È" Fžy¥>ë!òº· T&-nhP–¯RJ5ƒ­tñI¡í2ý¦Õ± ‰ô Tì#šU¶5£(Õ1ª д³JÌQOÔgÜ“Dµ'ØÝX^[ÿÒ-ÚM`æ%Ä4Ü¿KuTày¤J½xpÄà'dŸ•FÍÎj$H²ÂF¼_¯ö@M›y®ÄùÑ4%r®}îß9xõ†o«cmûbó#çr›Þ?Êe"™@ËxÝÔO·ã¢¶Ù,®_[.þ(ñìÒªKq@,VŽ•XØ´ÛjWå)¿³+¤_PoR"&Wv³0 ¦aÚzá1¹r'qSüO KcøO66W½Š]6ÚsùW8¹Í¯žºà0êèTŸ8³si÷®h¾Ë c°xÿ:e}‚+©¯Á¸è]/×y¦³1ïÚýî žR#ñLp{¹ÍÚVë[(¡vêRÿo””e…îô˜K&MSª·`‰K´ûÝ,ÉÂ¥<€ÔÒ‚Ðû"þù´ì.7^ŸSüƒ:WvƸÿ ÓKÄ{uu=мK~ÿê#¨†ÇНRú«§gÖb Û65ˆç)Ú‘¶Ì*ñèoXÇYKŠÐhßR}£o’¾L¼÷¨‘¿e;(Cô80SrTuÎãgÅÜ6ÉÕ\ºQ»!p¸Æ˜Kg¯Yø’í7]ªUª•¥c*vGgÿ~¨ïòeö¸î@ë×ýzdÃòÕ-¨x…ëèõûŠíÁN/ƒ>À¢èwò(k» ŽÀ¯º„¯´a§I†Ô,‡®cy5õ¶8½3zõ{Û³Siyš>X)TÎé+x/iêJγV}¸Ké‚qJ¯æí—‚Ì/ªƒTž÷¸`ƒ–a3ª§Ïïíe•?5«+ ùž°4ÙÜ#j¤¥k‘êÍ R„0tÄrà8åÛ×å”H0Ò&–¾¥‹¥nŽÒ÷ç[þõ´¬ˆŸF·xïs¥Ufûë@ª÷û¯"Õ¼?ySÈ Ÿ³?—§Â3jRî³¾vš9-ö¤®ÂJ&ÜOº„©Ðûj¬ÿêYž„°éáC!Ý;â?’Ñ`ŠB7Äå ý)ùÕg‹ƒN®½ži6UçbŠ=3d¶³Âzž ¤–˜«5ž_ôHèêåÅæ+LÑJ^ò¥¹Ÿ™ŽÂD<Ói:˻ے A{el¡÷= å ’ž¾8t>x´œ'3Æý ˆ÷£œ&—y/*+Ìãz]UcÙ¿pÖ_­‹úY˜+£Ac !/M‹bÊî™~›Ÿ‘VÓq/àTL{-jĉ.£ˆ‡54σb ~ï¬á¦2Mw´YÈ KwÝtêk?ß7Iò[u²Ég¯¶g‚²?b¯ÞöSör¶x¨›'AÓ Àª«„$(¼šx½6JxV#x* TYv³âÔïRQ‡ýZgnYˆ€8’Åb)$«Ûò<>~™*9Û¦ñ.#í·CÇ«Î`AȈQ¾«tL — ®¾í%{»%÷9+œLnž/ûzXð|õàD%×`ÙŠnÏ‹Oï‡e«eS²Ô¬ü1!WÌyOs‘§Cx"ŸC/{pv"‹õ5Õœ-RØÃ¼O `â!Xé¨^´<ã‰軥ál9A/4¢—“=óe9ïå­)9§ï«ÙÖéx0‰²»7Xö‰–s€1û.òùÛòfµÄ¬ÚÆs|ƺf“=«%øªÕCV:ÖìÒT-p`¢Ó`g´GT@‰sÿ§±zµPp>:ûT'_f^Ú-`‚­>}ùêMªò;Ñ©xÍYd#‡Ý;YÆÄ—å@ß- dÞ¿#ùdùFÂ(¦áßgô0dw¹ŽªG'žö¹õ꬟.yª’´\Õ=UjŽtÃn a1’#QDM[å$Öí$¸lš½"jûQHämÊSæS³g÷;¬!I&éq—iHÑÚëÎBW"[õIJbm(~}œ'/·ð;(=‡[kÆÆF-[ÅßE{]îdæ¬÷/¤íôžÖÒÕœà`¹°—~#j?îMì*Að3E®c‰œAü>ö¬T6ùb¦œuçôšr…8¬ø!ÉÎl=Ä;t†cb1—Þʨ1}6YÙ{u;VfÞŠÂ wò&ýünêuè·Œö³ô_:¢Äsô·‡Ï´XÚ´Ñ¢o]ï£ã«ú”þÆé3›üQ™î0GØ›H(ø$¸÷Ú¶Úü™·ÑÅ‚_×Ñ­3½Sí1…žfÂæ__úå·ònõ6—¥‹ãtGõÓ»Á²U>Þ/+®Ü@“¬YY[¦•Fÿò:ÿGüìßÑZ¾Ý‰YóÅl´g.åõcBP¦7XÙì5ëÐàäûÉ•ü&n¾ò%Ë=¯|ïÄš¤ôžï¨dç¤÷µ³k7_/ñ2íéh'ƒEhötOÕ§âË[ø0ñf OÑ€{›ÂèÅjÙî×®W‡ð»ýþPp™þIJ-ÒÃ,Ê–Ÿ¦dÁ¿Ê¦ñ޳R¥kéψÔßtá¹VcÄÒ#W'Vm)Õ ªóq2ÞÜà(PJ{ÊE#XÂåÐ#¯_.aUO¦›Sn3;HÇîï£ÅQÄãøùͧ"ŸJ°é¹õy׊\Á>û³1ÝvXg¤Ilå7NènÝ„æ•+ßê à+‰Ž6èð°•ZAÀŽbãOy—番œNΗZ=Mü%_¡¼Æðùeúpû$[“ï Ý2ÖGCŸ@G€‰³+ÇŽÁN9¬íÈRCÛK*‘5ñã^?¢Qªò¦¹9ïêYÄñÇ‹àV³üæQ|yDå3ü*Cƒ‹Ë†s`Jåï¨g§ü擱¢ró~u $&‘ÞGW&E… Ž…Fh!Sj3 M™æýª€Ùðû“«ý»Yy›N!Ubz`Ç–ï#¾F’’ñŽü(¹×•ÃxëýÏtÞ?w*Ý&$UN©zÙÖú¶ŠØh/÷žú6kåxJRMUö¶6Ü8 Èt%ùò”µèÃ[MkæZÉeKV,Æ"¬!)C5±tNþÖ0Hõ2¤?ŽçF,ï-a—imÁ­Ml|z»d™ÐjçØâUÝQÒ±Sûh©ž ±UAÎ |^ÝùÃ*UP_¡Køb̵vb w›Q^!§§Ú`Ô£l¯½òÊ‹­'‘|‡w-,ËAç,nPC¯u껇7\_½%§dØók›£Õ”öyÍ7~Îõ©ÎѱµÇù¢åBãO6 º8Ê®”†³+wXu™¦)y¦Ëîó@=![ÃX0ü a {oPþA¹i‹L°ïM.§ Í6“ÄËžHòóLs„çNÿì”×­ÉîþÑù9aT¤ãàõÞ¹Þ„›§«ŸÜ½Šö øVÇ´e¹Uš^4°‹”Ì ÄÄù|)»{¥øRòèŠ/ŽåíåOÝ3+é‡ ²: îØ·3­ÔSHoQjƬžëZ2ë6‚šVmÊ1_×øf¶ì&ªôøRНû?úš=Ê|‡Ä:'0ÇÆ qŸÁ+‹»@QÊ¹Ü dýÝËr&äÚN¿ZNS¥ÉxŽÕ#¼ô|ª‚Ví·+ÊB®³)±1¯~µ¡øl™úÉð` ÁÊ.,—廉ºëÃ3ãR¡yëG|?"¥“›u÷ùrvÔ§ûR@N@ûáÃôã?O/’ŒŠŽW¬÷PèBô<ÍäuœÈô¤Ó%­©¾É¾) †zÕÅQN&HaûþÍ)·&Øøc3§váG9ëA¤®ÑÚÀÊ”ëÞ¶^bõ±‰:Bª5›n3)køŒÜZ²er4S‚މ K^š•I–cMà³ÈùËmÒ`wÛ´#jÐ Ç;+—Ýšv +(’â^*¤S1°Œ}y¾ýñS§$# %Â2éS£Þ”š?’X÷àç>ã¬`—Ú­~ŠÄœÆƒ"A)›ì.õ™(Þ¡™S_´µÓ«ðnèÅŠ2“MUhâW;÷[a¤º|ß„üì‹OiŽ éLŠ_¥-õ Æ_ÑÌ ÛKz¿45ž+8â;85ɨ;RLI‹SZáJHO‘ŒŸ!RSOƒtâ\¬'b_Œ°«QXÅ ü–˜‹Øp@yN _K7²ýŒzC|Ñ•NïÚǨéòJ¯œÇDBêRjÊHãÓó×QIJÇ*\0§²ˆoˆë-ƒÆd¤¾ú–*Æ C•ÞYíìI"òZ!†Nq÷×ñZy xÛÙøbÔ¼¾Âæçºðƒ?ä¼Î*K +ÏÛ»OÁŸ1räáT:€Ó>Æoöòkz¢öÈh°‰_D¯”í½û¢.vä¾í^¡!Љ‹_T>»šlcöØHÒÚé„k…d±kçý]¼ÎËÿ58½/è»uHuÍ?¸ÊLÊ5y ¾T3ª»QùaöF&·v%{Ïj` fmžGŸ™¶¼|]VÓ%ñ‘:wN,Ð 'NžŸª¼xÖ"íýl@8O“óþ™´í˜ì©iœùè9Ž®÷j7y Á4fÞ›IF§hŽzRP"/BÄçRHßë…y÷—¢æÔ~¸°ªîøl‰ º§f²k*`ioœ-µfˆ *Àž ’|IÜú'4æ”8—>Ø(Çê¹X‘÷mUÁ»øcû.?×òo'k:ªÉ~u’<­ä9)í„ýÕ»+>d@Š ;|A àO@ÎO"}È|›doMn4J|…ÔŸOn+xwôñ›à$²€­šjÎ Óž.;ë& ¯VO¶<3vµ0öÏ# FÛ‚iø&=³yg ãèëùåêvš·ZS–¶ÝED¨k´”>ƒ ô)µ¾8iˆapƒ729µ.•ò^'IÈl7j š°á’xÎÌ<™wî…ÂA{ÊVÀí–gµRe„ ý‡LAŒneAÓiŠþË 9etëí'üýIx™E |¯Ù$Ü.\`Yc°Ë7´önZÁг¬Gâ8í(/åýêSNü²lqÁÍ… YJÊQŠ$ßÏ9]ˆCˆ¥Üò½h9oÓe5³Ï\îh¹±ÑäŸ#ÞöÙO~túpwÀåÙ ÿÝ*ið±fEÛÚsš ‡S˜î.æÀöȨ]&ˆýõSù®. Ôí(jûR}œü7/ÀÍ߇êo…ÃS†´,Žã)ÎE-nJhåò Ri+qª› Õþü£c'~‰m~_Å$yaƒ÷D]Ւć)úC²ë`` ÁHà³gô äœ|ã­)ŽÚJåMR•±MáÛ Æ—§LÄx§ægߦî.]pz'ÂùláØ|Þ¨7x´Y¬/$¸]|Üœš>éó”F¥%}sÀ_xÇN'wè™Í”$ÏcæIðâ¸DÂhÑýã«=‡7c ÜË&°[Ô ³¡-Œ€]w‘qz$ß³Û¡ÙOwB9îÖ㽨ݧ*:khÆ2óÇè†Ú­ÉúW-3Ð…‡¿ZÜEþþrZ†ð†™èO}mV;4üþñ2™%‰Ïì^ùI"‰ÕgWÕftB. §õîg”?ŽRIrÔ8÷~Au [é‘Úé¨KÃ![†Šóc5kÃ&¥H·=d³×˜+4‰ï}à…Mù Úž9æò Þý½Z=Ñh×WÆmÂîÆ×¦¢ZN›*¿|ÍõÌcóÓ0~ºEj}"¥y§XS=¿F¸¤®eŒÖN´ #A7òó6©û%­hNçpû™tØMÆÄÐ.°GTM”«aiØæ#“.uj×"å†r&GVð;Pê3/µÿP_7¿¹¤3À÷Ñ2ý’LZ gw°µleòÿçtþ¦6OÐr¹Œ]¥£¢¿âl`âkòDKÖÖÃMØúÏŸÕ ºyþõÜZèimëbïËecïèìàF7Á¸¹œíÜÆžˆ>ñT¶wr~ìm¯¬m`ìb+cÇ T •”=®ÀÍÞך+ÐÍÕÝG6ÀýW½²Çç.‹psýUÄ×À­ô'ƒËä‰.—²‡·=×}a1![Q‰û\÷%…Å¥Äe¤$ïqé[ûriX»s‰Kq‰‹ŠïÄe%¤Ž7®&nÚã½¼·ƒìSµ2¿¸|}=eED„$„=¼EÄdddDDÅEÄÅ…ŽKù¹ûZ ¹ûðü£’¿ëQ±÷±õvöôuöpçúóÝÚÆÃÏÀÍMËõ音öüÈÝçŸ ÀÃÛŇKY_B^äú¿’·W9þ(ëCFHTZHTÂ@LLVLJVLâÙÈÿ£Ðÿâaçìôâ2Bâ≋ËÞðOñÿ(ô·^Dþ—bþß*ÌÎö_úòôóvýkXìlEì]íÝìÝ}}Žu&ö?ufg+ëàáífí«àìfíh/âéî(/òï‹ÿ·íûÇÕc³86K‘Ù¥ÂÿhÖÿWér9œ@N 'È är9œ@N 'È är9œ@N 'È är9œ@N 'È är9œ@N 'È är9œ@N 'ÿ2„ößozػ۸¸ ÒÏfoSQÑlþÌÚûp»Rœê˘ •¦pÍä²+ê´L“PPÎÏÕ¯èí­íÐòVÝ Œ<%»Ûÿj¼y»©µÛx»ñJÉ¥ž§k£¼1?Œ]1éûµ‹À/Â:¯“¬¨3˜|ý«N†ùú¡J³cÞìl]ª4ËÒÝ6¿oî0¹f)~V²Ñ½ðèÿ»¼û^LU˱Eøí–¹£@äiUOá¾”œGMÉØÊ—pì©Yê®qÐ5M}ÃüêÌ+ÆWoœìrç©Û>3Æ©ªŒæ=Òµ¨îúrÍ¡aÄÑê#‡¤´ÑòŠÊ*ÿèÁýÆ^Õµ nû6&ÍGÝõÙÖð¬@Äõ÷ïžS'Ê‹ûÐ~8¯Â¨gÂ|9ò]À»ðü36—:wcöØU,¸‚†ö¸n21p‡O*~Rª{åõ}ðåÀ««Šöm¸[¨”ÊÏ ÊÙŽÜ+?·hÁŒ«?<Ú˜šýù©è ÆgÑUï¯? r{Î-ªð‹ßÓ(YEèȣ¢ðúÒµ4@ñRÿë[©1^1{g.êŸßŠ|þà+½£›$…õåKÉåÔÖÔLµÏð‹r;¥ÜºÕý„¢yæ~àyl²,mý'¸™Ú–Î.©KCÜ{vöW2¥LÈbºrŽ¿¹ÎëjQŸ¿#©¢z~ïW±FÄ»kå-¯,Ç5Þd{Ï»f’^ù{¤Ÿ Ùºx^Ê#wî« Kþð>­äÍE‘˜VXêøÜ—U?ÅðºíùŸïk\Oï]Kµùþ  ZM5Ì_(ü~âþù’³‹¯®Eû½q¿7øÿ¬u( M]a_Ú½óù¬K¢Úeg[àG»ªôŠßB–?iÒ.Ã$%Qó’Mõš/j¦=ôxsf" ©ôN\úLo÷½ÑyÌ…/rè2¯êP’çÚ¡\B衵ëó <ç‚}ãGw¾*ÉDJ™-ÅyÊè…ãX/Ûέ©¦ü=ø^7í!ûp•VÑ\”9u«WiL‰6)ü‘Ð3†žëíÊb=f·íZû[]8" âg£Zë2@¦iüÙŸžºÄ¬øX:êЗ°ÞkÆ<>z€ÌqÛƒ‹É i$/æöó?R¯ U‹‰o?uF;ݿ˧}Ÿz¡¢B-“òC Õîs²x­ ouLõΤ¸¹Â9Û–DÔè¯&|wе”º~é·ôÝôŽD£xi?oˆÓ8}Öʼnä2~Œj3‘¡KÅà4Õ€Fß/)(ƒ|ƒ¾©eÕ¾{´€L2pyó,­€mEFÌÈvµ¤bTï‡T€Òÿ{y)Aõ2ÚîÍüÍ·¬þÁµµ¯ ZZqu Yl‰I|:Æ]]Qj:—€{M8gõÄBä¬<[ääë†LøóîçcUm•Ò‡Ï_ýPKi6;L¦?lô„¤¼Toolbar_Disconnect.pngÔ¹ep\Á’¨)K¶˜™™¡ÅL¶˜™™Yj1ƒ%‹,fffffffff†µï½3{gâÅÛÙÝ[Q•çœ<™YUÙUÕÑýý–“…ƒÆ†Røs%üÛ ÁÿHw÷»?—¯âJŠ'¤QðŸg([1uœ¶¿íKKcVë$Ga5G5i).C 5@ßh` pµ¶ááwµÕ7´4v$4065·á%&$$$&47â%Ve•f¶463s·7Vt—Q2t·4ä4"æçƒæqåúãlmì¨OèjmeãÀåÊKü˜\îÿªé‰ ÿaâhÉKüãï B5i9BA ½1! €‘Ι…… ÀÄÎÄÉÎFK¨¨ïH(¡oCÈÄNÈÄÀðG0q1³ÿ©„ÿ*Ä|Ð$½‘ —‚È¿úüóÄKlæèhËEOïââpaíMé999é˜è™˜èþXÐ9¸Ù8ê»ÒÙ8ü3ÈÄ2v0´7·u4Úþ}Ö7:9òCþ[ù×äômÿ³#‡%ïOéÿ¼ g0Ðÿgä¿Áÿ(¹íõöJ@ ß?§/bnoì´·t Tdæ¡ÿïFÿ+c¡?ïO>8é8蘕¹Ù¹™5þÍÿŸFÿÍ]hdnâöoîœtLLÝ8¸X9ÿåþoFÿ‘úÿ–˜ÿiÂŒ ÿ3_¶NöVÿøXŒ é­Œ­mþäŒñ¿æÌÈËho­ïÈgn­ojLokcÊCÿ*ÿ·ãû§öϲø³,éÿs]òý—aýUþßÉæ!¬ÒŸóïá 4qtÑ·7ùo+V¶–@LÖÖ^EÕ5ít’€ßÝ:óþœÓÔ¬¸/R ôìûD˜=O;LËtØž©|¨ú ÕM<íÁš\–i)spSZPÎüúÈAœpIrçð{oæ¡*¼L ¶ n–‡,<5kº¸Ñì‹$dú¼O?œtkº]z¤A¦A ¼FÞò†ÀT[Y»\z,<ð=dªœŠœ=¤‡·pP¶ Ýmù°–jÇÓ„ùŒŠê'ù£dÜ2="uZ‘s1núŸŽÄ§ Z‚¦kñ )t6—+Ð0ì±ð«³¸ùø`ý8îo®à$(Ú7çÄgN·ö‚¦™ÙA^Ê”rœû±€8ˆäï6ì碈|VÅk*—!%nökÝ{§ßÞ)Ïqe=ðï~Èð¢²JŠå4îù  ¼ÐNºe˜VjôùáZ¥~º®œæ]G~q”áþY¼Á‰Ç€ÿÐû 0Ñ•º]ø6÷ëÃ÷éìj`Cð¢T¦°%ó$,¼F×{Û¹“!¢ cÙWÔËót„Cô˜áw K{[а“dî0tû–%Mdvy~±ÖÁÇÇû! –|˜¥=e¼ƒçsÄôɧWd7t¸¿ÿþ~wŒ§_Kíê-zê¿®Ô§ÉkŒºÀƒõ%íŠ?ÛOÌÚR@äecäãï—9ÈÿÃB•Çœ Â1nm©¤øg»z©»¬$.8¯ Õ3b'4Öé5Nν%àÉe"s(%$(Q!¸]ƒþè1mðd!‹@ÿ´üŒk …D…&‰Î±ê•R"…þ¦äUºÚê| ïm®£ÝytO±~ºÑ½·’Ôౚ÷xº½×²R¤BSa#¥ëÔÐnéõ’›øJw¹ÂTèñ &áÁíuÙbò6W¤/b½rJ°‹–ÒjKù!Ýš>1ïT ãÓÐ~¸¸’Â6§u¾0?°ñÄ6-Sðu‹0ô Âø@²'SÇ¿†b­¸ê—‹qõ*úä Zœ›.8a¶b‰—-1NW Ÿ"¶ÔÊdÓ|U 3K€Âu.ÿ€OŸ*êøDƘÁ³ùd½ÊiéJwz€q¯ïå‰B <ëuÂ\)Žÿˆ€:ùÅ·¹÷³rpøcQ× üÎüt(Ik‘ˆñš©œ$4† —…ˆ‘³š!Ù¤ÇJ;`Ùš8wËK}ˆyèÌ”‘ Þ%Ê%;\±º+Õš­g1\/·P,\ÓÔŠ–¹q “­w—¾WÑÔõVÖkåòÜKæÕ+Ú9¤> ¢/Ñ „ÄÆ²áL拦#n¯i`·? JŠ œ4XJL^~6•xJ­š8 d©ò7ÿw›X‡—´@"/JBkdEiU%Þ¨~érˆMÀö’ “ªš…Ç£:̤ùÖø0·M,à "æy÷53r#üž·ÚBÓx·9gÕtâ¯ñYL6ö¸Ìoµ'H+ÁáU=3$‘å<7µ;ÕûŠî¡Sn¢5HñYr2_ûYâÆ¸G¾ôÈ» ZC–0h§\PËôعçô‰W)z‡©L,šÇ(éûS‡Éí‹ìZ#(ˆ¶Îðy%`o¯ä ÷0pÂÆö2Ó—Ù€°|é}wÀ³]èXÓø9KE٪ɂ­(m»(Zv 15ûù½–(k´›ì|ÿ32ä(„2U¤·­XE8’ #·.ó%øÀ™(X„½.LJdÈÈßJdÈÄß*ãJ¿QÄÄs 6¥¢Ë—óåöàKðb&¡Q"ϵ¤¨'ø¬/ 6¨„C›[Bö«¶`yüåËägáøE ìL‘p¶'¦lý¬#D8fC`ü²»#÷gSùQ)(ñqþxF.Éb™éÀLI¨[q˜½a"_–%I`Å“ýî·d4÷u}tÒV«(´oGª˜…(<4 QÚú?òI5;eMÃÖê|C u‚9”³5@åì–¡Á-¦¿¬üZ#‚›B(60aA§1 MD'.`ÂtüMr9бBR5\3&³j,~‘ÍöžC¢2s&awß\Ûs›#`w¿Ú(ê¦4ˆ‰÷ WŸ‘u©‘b!;0¨4Ÿ$ð|“Yk˜O'v~Õ{È” G%}|Œú癚N¥eTrNg AuYƒŠÕˆ£G’ô,>–#‘²³I¾ÑÓ®’}$êØᙸm‘¥3ºðýØIÃÙ¬®’ªb•Òù]Ó¿NbŒá2†5b¥š‘gr¬Hö ƒ8°ë7:ÂìµZÂڛÄÌ8¦¢¨\ÍûÁ  cb•7 ‘›2L7&LuÒÏŸÊ#%ÑH((1SÆ*§F0&ÿþÆt——ÆUИ6á[¿cÖ9i>‡Õž+F®)ü^@¹Fš„,¢…"„;ŽŠKÓb‚Ö*† *NäªLä¦Ì 5¦g<1«è‘`ÿ}´·âÁ#C>MœºV}Ò¢:¯;,ĽÉöƒä› áD ÆK™GLÿ¬é[€Ù–À(ˆ—ôàäq3aGx}--h*„^.ÓÄNŒ|ªL ~i5ÙSÁe´8Álõ* ó[:Ãàfô³C‚÷ÇN±h ·eâ’­ê„”ØoÓ{É~·R‡K;Ê÷8Z³Ú~e®²±8ñ‘±*={z鉞3öÚF;žØvm‚îÛþ°ü´Î¼œ¹­²ºRþÊúØ?ÉDÖ0ô𨠦ÌC؈=æá=HøÏŽÞqäŽà¥àÖ󨇡§ 6SCTêS$úßjêùDƒ@ÎÂt´»TMß´,ö ¿®·”E_KN~"#¤ÓõD©YEÑ(\¼¥`|oúQqr/§*eæÍ̦©í ó?qÉèÓˆ¡Û;µñ±[C®õƒ}`Ç·Ý0s"ä¥4õ1bC)×k#‘~Ç›tÁU¬#¤=3BäQ[J—Ž~Âæ0¡3&¤t‰Ñys9qQFâJ4Tv¨ ƒf‡hÓ|]! à'i¦Õ>ž‹¤Æ»©q(Ær1lc•½U>᯿4ëo}OÁL]}ÉÄARnûo¹ï¥4i5Œqîêý~ñŦ £NF«(|M{``:°žOzÜŽkn ^øAc@„:s4ƒºz ^·‰âIèM2X¸ç;z”Ȳ1ØÓþãKÆL¥fš_݆ZúòBò´tô,&$¦/ä¾Hœñ‘Õ–KªôÂpÌcç]„€@9ó‚ÂW3ç°Zižñ–/¡ÙÜoÄg“Üt›.JÃðU+;5J·2ЩÒÐeã†ø±ó(k'ÂÍóèF_ÖÝóÐåWËô¹i’ªFKË:.s)î&‹t>07ßÜÚêC4ª1°P³ª…íý¬*‰ÔþFÔÒ'ù¤€Å€©`!?’ÛHtžÂ7ÛFLs4¶)/¯›+¡©ž©=ÅßYåPôèØ¥›Ú‹Ù…ƒJ¸Ú¡G÷Ñ?C‘Xà{Ê?5\z„Ë͘Œ¶ 2éÓÕ´ÊõS%âª#)(¤÷r³šœƒÃöÏÉ.nˆøZ­ØX¡rÇøh9h›;2ÀMe½9¹Fe·yIþó#m9å¯&n¦¿VÁ;HD?”’o¤:l!VçÚUx{ "1³Àš]fI›Í—GšåaűsV 5éxŽöw­1üyFu"™rö$òÆû%'¿š6z¾¦oÇØnH]…š08¤Gn’­˜å4äøÿôˆ‡£|ÒÖjÌé“GR Ä°Üƒá5öÌtHƨmWeý}Œºî{ázI¯ Ý 8SÍëЯæåñΪ#¿Û†çóç‚[5Ç ˆõÛï‡r{j:¢+>ÞÓ¹IqQ³ò³WÆ×ŠC)jTž³0kÑv`ä§ |~»u6ÌÀÝibp[²Vž*F]ó'ɵÎö¬íÓQÂG)³ÈÇc†lKª€*ùÈ–YÞü¹VÇ|Â/ªÒ¾ÔrÜy04ägûúvà Ôe ¥Ïy÷v |ùÅcÜ :þêù£g; šyÇÇ-Lcèï„D}ã<Ã¤ÅÆ¯™_'¯Ä!»ù‡׊g„¬a*˜)Eü|õøPj¹’ñL£1•Øó·µ ÉB×-ûÀØä\F e‹NôXÈ?SÍ\„áÖqýñ¡—Èvœ>+HåkWør¦w3 dh‚fE–*ôM³¦`hý0F ½ˆÌS(aIæ+•Ý*ïÓ‰ßÌÅ{îs‘auëæÚڽܶ¼' |œ{äÙtøNƒD¼ [¼NsvGl`3&6fÌðçx1;Ε…wîiƒÃ4RçW´4¤lo;aÒ% ‡Œ…jñRȤ­?Â3½Ö¶¾ ’…cdR¥Ah…äK)yU&°ñúÌÊ%l›þ>¬ÔÛ°›zãån‘½Ñ¾-‘¸,:Ö%-:×€¼¾:Zq=œý/ã;Þµ#Þ£³@Y¡Î{, PïØF…K^¨1§ »@‡û¢^Þ“8Þ”BÑÅ_ÑÁ–_ÌFýYuÌÒ»&¹e†iØÓ´´¢«‡xmÕ;2… õ«Zâ3†eÏ,Œ€ Ò +yOFÕg¾6š°pŠ)$p#ŸŽEÎ"C.©eà‰óû<&›Å”²¡•‡3”²i½žÄwVo}Á yòì¦ÙyÝx¹2˜lH^wÄ›l¬kyAäo¼Å`%ÊÉÔ‚bÝ)‰þ¤›âpÝ>ÉçaÜZïÊ0 ¯,;·]_Ûµ¶†ŠøkµLçU0Q¦öy"…ìwlüšì°‹,$ZËRi{ž[gm´µ/ëOS AÝ2ýRäOY¶/Ñx·çt1p ^pÏ ZfÏuµ\®&é¿~DLX§ƒ‰ÛÜ µeçÕ¿ƒN¼ˆŒE~á ‰ãÍ‚À:·¤“?ø4_Ô·/MùB Í\O°Ý #z…ƒ3ýzpb[ÎÉåEíh÷õ«³ ºµb|¥®N–ÃÅå?ŸÓ×ñ@r%Õ1»åðΕóÕîÈŠßõ8Ìœ›Rq–Z!¯‰Z í¨ûK2º‚ƶlѬ¡;̶fŠÕãåûþÄ/d•¼>pÞÐ3­WÞkÏgøÚäú¾^iÜÄk»îûÀ°ù2%¹Þ©ç„¹Ö¢q¨f¦÷mó£10è‘6ÄÊݤ¨â³D¦<…¶w*âYæÄ||³OŒ«Gÿ=¡ËWÿ‡…O¢à¯¢Ý”*Þp#§Ù‘ùnÈ ,‡â~/Cª®BªHÌÊï‚ùù1^+9*EýFDP’ÍlFöÊó?çu,íç^ƹ ÑfJ‹Ð‡s·0¤”9K ïR7Œß1×k›éÔ<’qjÍ{r ø‹7ÉŸpboð÷@Eú0s|r÷]È ;КQpw&7 ’؈€äsÌ þ½ðì€lÖÀ¥ù¯!θeÔÖ 3µ°”L6‘GûÆÑ&cÀ29îÏýÝŒ›†ÉZL¡dÀ+¹°3ü¶Ž#}ŠÕ›ÊzxÌ>µy<¦YòÌÍìP sð.²´-ld”($»/KY'Ji39 Ï5{ÜZöŽóoë”oÿö(ÉSuXÉ$2IÉùo눕«j·Ø?mXýe×÷Ý©ï(× ƒ£%lšæïpÏpßïûây¼0\ÿªþ†zãy¿ïû¯ª3í£ø1/ö¤Ö?šäV£‹³±wÖ?*)/Œ¤¿FÉ-F'oQ•"•{Ç­]³Æaÿ˜ý(ϺŸî·l8|…!^·ÁÔ!õÆÑeø*-ÁÚmf¿ÓyŒžåãZÉ’ñáE’üÃ~ã ÉýAž ŽLbO›˜½y dS Ä¢5¿¯|5×gEoœÍû“‘üÈ/û¥±%u#-n¥‡ ìu’c“Z;¿a,‰–Ù¼(ày;²„;ž†Œ$cRŒF•ļ;œ‹×"”Wóµnͱg–ç3FÞ"Œ}´Ýª)_7I<„é¬gy¤ÖÑHA.Ó§¯ÖÄKx!CO ø(eCJ3EÜbW/rBï³ x4°« A‚¢K-¯ª·=3ëéžô}/Ï7Šf€à5/fza¢ð| "7Œ sêÉãñMw¡—·¶ÕxžØ¼øpfó˜®ôUó`Mmm§^ðÌ7¼›Ýf£ë²q…aš:2Á¢ìÓ¬¸S0”†ÑêS¿›>=ó`IÙÔysVN@1Ñ3£ÁOß~?ì"aáõ¢½·TI`ý^ë¿Ð9ÿæC¾¼!9D¦|ï‘ó]/“:zȾQ‰eç1Ú4ÂB(»“EJ›kP.w_éÞ£ì;É»lœÚXç¬ûW¨güš;A€·7<³ŽgÀÿ—]©£WøË_ ªò ?ݢ킌ÎËœáj`{‰Hj¸ŽÝöNÁŸ¹DòFùgìŸ^ä@5O‚Õ??%ÄÞÈ¢0i’<ñö¶b,väŒx5@0¨H8"€ 1“E&g§H*Öö8r;þpu-¤Ì•]%¤×M§êeùŸq‡ 01âìQâ»ð#¤G—Ã\üdžêcR4¦ç´³iâ››¸=RÏwÚ|2ºHÂφ%XÍ$öºð®†ºË4ëf¢åŠV£KesÝ„ã¿b?½–~q rÇU˜N+ì¢eµÅ¡åU¿¨:4º)4Šm£ñöØckí¾¢BשáÚ¸§’3y""9š Ÿ~v‰õ:`4´í`ÀJ‹î®%Ò“JûHY•lõ±×à FŸ£Àú&ÝßwFCY ÿE‚."z½'–Û÷ãå rÏÞCÖÆíÝPhÍ vr5_!È€{æÂ>åwbV½iH®$¯+½Ýºz=ü5ˆû=I9–!t0‰] BåRž€N4°#_Y ÀܽËò0í9.;»öëuÛæÞ®hqµ»ieKÔµú…7D:Û´ŠÀ6Í­.A“yÞüLÿ³láÄç+CÊSˆ V ’£¤!CÄ'3#Ì}³žâÝ6ºÖ3IÅêL¬{w^õ^T$dn‘•Æ!Ô­^À\­0ÍÍÊËo5ÁURÙ K³Æ)šÍ¯¥{kµ›Â¾_Üð—›^ï­ËZY^û1ɵ´L½ëâ³Ú>k¾Z®£ºÜÂï~àáÞ^§ÙzPùîúReYÜL_Û#¦[‰§>JÀo¡bÝ¿ºHÁš櫦6#Ê3œÙ&Ù„>±¹ï¹y’~ýDë3ÅU÷ðF_›ÎôÈ â ô32þ*Ùë$¼o¿Êô«1±êWOð¥˜Kí}?°—ó}Y¯T*ŽôÉ»]¦n4s7:ÄBÍ—Ë6 `îÁ¼¹‚¥0™¥…÷–éö¨AëA_°ïshy´²&¡E³Œù}‰2J.J?–†¯~€Sš*9̱šÌx`[¡K1Üï-ÎT+ZÃH<:@Žþ\¿®vc‡. ¸Ÿ®¡ä‰Ó Ô©xT;Êw¸œÇl¾¥\Òú3çXBºWê­sZ%†£~<îYÂf¢\ÀtF~·³­ù§ß¨ŸÛÑR·}ƒ%¸s“|÷9ÝI4'²ÄX"Û8ÏÍ£ÈäCï;¾5—l|ê˜2T\…NY)e¬ÞFÄ?­u4ì˜U_¤÷|PÍ]ƒ‡l§V4P2‹r>àe>Y;-oþhã –É”3:¤EöÔ’¾QQ}¦Mô]±_àš¦eTAÂË´vHhª’Z¿ J<‡ÖñªÆ,G-€30õ›žÒ¥˜ZOØCKî%Á¸Hn¥MceTV#ã˜Qù4a4L§´~’¬Ø9³pk¸4ö.hê‹eùåZ°Ôz‹\‚$V?°†¿T@xAV,xlRIê„(EÀuœ?eC`_f† d¾N*.嶤yo¿’徂¡Žå[”½áÅ*lDˆ×Mß^lD©.òÆâ²Ë]$¿Ù?H-kž²oÚÉjK>/ëÙ­ºišº¿ßo’8>7î÷™í<'å†ûÉ0|Ü´Ò¼¬Ïpevv^Þ@©ß“`fxÃ[¡èž‡å»¸NÒ¢³hï+'½7õU-fô7Ï™OøÓ…ªÿø¨‚¦ršZ[y¿&òËê’À¿ç%±n‹YLÁ"ïJcÇð´þ ‹•d3“î!„y.â?×Zo×:ös™‘ bMrÛ9E…Î_ôµö?ÒßÜŠnS îv×› ?y»Z½Aun{Øn˜é[ú*1úfŸÎwé4ÍŽnqb¯‡蟓$žfö¢X¶ci¦v“D‡tÀìmµù¨¥7§Ì\c­,éD7B¶Ã?á_¦òg/¶NZš×“µ<2To3˜­oéµ+UpÂÍ[qîÞo2:’Ïk¬lèM(î4D{-½VðY(’Îꨎ ¤*¤ŸX“´pfÿË¿TÇK-;®y¯‰±0A¦Òtÿœ¨ÎÛi%|ë(ÇYŸ8Z²Aô¯S!ÝÞ–öÚ‹÷ãB à•+¡ÍSއÊ'-^ ]äV.îIŽÜs1è¾kœ}%.Œ0ô3xÁ›?ý×Oœ9Ž sŽUBcø´L`Mªº:J™kïNöÚÝu“ü‘ÇÏë|äü׸3xœ]£ïk@äªt‘{püê¹Ë•Z¡O˜xh¬L¦»^«ÏÏ~ç†×¥¤ÞE¯·ùãÙÊöî/:FÀ®¼)bbÁé·_ ÐR©Šhºxrï¼-¸q}{Ê–¡€ ïoSAó¬o_Ú ã\Ó0ÓŽ@Íq&!®‹¥¨¾¬q® 8VÍg¯:éÎŒWçD¹ÙB~ƒ‡×tl4wyŒj‘¬¸…²n[ûj¿ÎOˆÙúŠ'su÷Iʪ@T %˜%Â!øõpi¯ŒµoW8Ð($Œìv°IÝ}a*k–dè‘öÙ²«³ö|‹¾Õu«I4f éu¤Ç£Ì·Óÿ²×¼P0œûh¶bÕ±xÏiÜâ^Çùƒ§c¶ûUºþ!ûœþ)ï˜ÅYV{í¶C-V8ô“Åž‚w6ýÁùXeÄ *ÿ$”ð.;PÊÜ ^¶ÒÝÕq¾ízIX´O/;ªÊ’q VY0,-JÚÅ£¼ôt=Wu)i=w1în;Q9àŽµP*Mù‚L#kÎYÓqr}~¬ø‰ÿm¥×wÑÝ—ë ÿ¾Q¬¬µÜºÉ!PÚð%ǥ˱ O½ÔM gÞ¢>ÜÜ1±gô}®/íâòüü®ý4åZ1×F»Þ¼Ò'LÕìÂe½—_ÝÌÍaàÚ²ù<ð›fYì÷ÚO0û¨Qù©VÛ7Y?×X“ñ"7AU¨ñ;ݤ­çt;m £ðÓYËÌ[ÛŸ$mn Aéæµ‚÷æ˜ìÑWDæ •¬©r5^”€.ìÜe?ë†Ô´¨3ü›n¾+Í\.ëšóÃ’|ÑSD Ðþ¯C œþ}}£u´+àLî¥ÖöúLãþË-е«B"DL/5Qn¤QËd܇$çl½XØll†Ì2Ý"ª»-HVw¨Å_&ˆþ×Ht¾¹×¼“^anƒÜìÄ[×s|ËáË–ÕépRÙÿFúšï">´JO;`Þeÿ¬—úÆæh×õóåc@ºœbJÔáYêwþör¨1Ë(ݙ̆]ªÿt`—Yä9ÉÊ5_¶Xt~Ø*nZŽçO¸¾ƒà³:Ãi%~vø$ -ïÍÒ ? ¾&_~#dº )Ž<ô¾œ”àp[.¬-n¾©DœËÂ÷玷B"í+÷þ Ù¾g:¹8šHQ¤² ËÆƒÿëάiñux†~õ_É »23Ƶ¾×öö´ Ïa¹ fC×u—VÝhÊR²U¡-W{ >1uô/ïk"ø½ö›ŸˆÖ¥É¥ö•Ìðÿ!4Ñ¢xRÒ@a‘üßñGºßW½§ž.½æslÃ.áÝ`…ÇðØŒVp4µÕ6GÎvšÓXâÄ_…f$SyEE+Ô'Ãò•1nÍF1÷^ßE`µ×÷`˜hîXj{hÅœ— i §*dÜâY`ÿoÓÇÜy]Ü,…þ13Z• tnm­ˆ´u ÌmèéäôRƒ˜ùh¶Ô$ϱø]Á^û6üOÊ®ÐGï&Ô/¶Äâ³ÎUZÉ6‡’®X¥BRÄo)©ºyVÛ4N_M†&ʸCF .9ÑJÈùc´#0Ò;kˆˆŽ—±X -eê(˜@±lSAb¬búwƒ¯î½,¿‡#Â:ÿþÌOÄÙRÇw7K—â8p¡¥E¡ ‰MôÉyQuà13ÊŽPGS—©SˆM·< ØõuÓbÄâ`Àqà`f÷3u>e3’Í“ ÏQdN!F½S3Å2ÑV£b¡N0.™*aÒP)L†Bì„å5§Ì8>ßïºþ¡Wαré Eâ$RÝMó]@¾“*„-wˆ¸Àiñ+ç5Ö`ˆ-ØOõ~@LàwHe1yPfµäÛŒB£lÜ©›ªÒ÷ STÓ˜«…Z Zs†Ü|@Ú§X÷æƒïY+Üi†ÑõV4vÓÓwÝôFOp‘Õðk+cÄ%œx;ôİT¨{µpºnv¯H©šç¤ˆõŒ%&ÂŽ°ôÎ w¿>ÅHX—@õvEZròä »mBˆ¶s‘çå‹•tMÖp-ªêq“"9³dÁÏávN˜Úͱk©g¯4°I$¦·ª¥û½° >/F$Î@s\,ÝŸNyÁ¿S}s*T½@YþŽ”Çb50­²˜R‘¶ëh‚ß5?K‰ùÆ‹¬B¨yêàÙ5q4ÿÍÓi`-[¤âûTù(6VçÝýuV²ÎU?;Q+o¶rê¿qÇ«‰7aä{k"¥Î[Ò…+"]—WÁ„$2#£ªÎk3Í;‘T_ äómÂèà?§ŊJΩ™¹:0z¢J}Úüð/—'GJ gòýZè^ˆB+¡©ÇFbÞFšžïO*™£ !þ;7 ¹…W„»2ø¡¿`¡Î˜â×ûnëÇ;U/Ö¦£¸D°¹0ò,e-ñæ1ÖZI:‚G/ ­8èT}Æf±éŠÁ4õjV%î]ò\\ˆ[D] ñV]P4#°t  ¡p¬­^ &;J$±`Iå’1ë=c ìÇ—‡ ý{ç^^O;’÷ÊSo××qäBÂò÷o*¦ N&ŽŠ{,à "„ÍÑ–‚X\8Oë&±N5{ïôí¹Qr§aõ¨_Rðv­Pdk+ ¦ïÌ|!_oeFñ”kÀÊšhçÛb{LbA-o»“î¿6ºËÛܧ}SaOÇ/žS"b³\š€&?»¡.½|=‚zw(iOŒãçO ZÚ*ì™*Z Óg ÉŽë)Q€wBó?ã£F¦ß–ÔgØ@5+¦ŠÜ(ÁìXþá‘ h;ßœ]7£PZÑ'1Yá ÜUƒ;Žhü+ÁNªÖÚ©öP E©þº•X©¿ÉæÎ'Zƒ—§èc]-- P&üŸ3Ç·*5w+‰W• ƒÃ)J+¤€ANû.w… |`è®5þwñ•ò8§p²¹ ¸¯Ž‘p…ž¿ÞY·“+´s°¹fW É—Ã"²™ædj˜ãWȆ­dojDUí(cx“eegß²Æ3êNq®¿',PW ©Œ"‡&ö™ K§Qþ$¤†ä]Í›)£)8ô(˽ݪã륺;xVꋃ&×|ÊAHfÔ=ÐÊ÷c fb±A« ïòsŒ¤ÍÄÚæf²šÏ±!$iäI*U›ƒ í â¦nf¹.û¥ݦx/ „#öŒJÞÙ1xCġܘðòYÏatÑùÊ~Ç÷j²´wáa±ëÕÀëy·-ˆ†‹†bvÅŸ]@AõxæoÓÛIÜùVÒÿÂÜìj¶À¨Òå#²È»´Îa[$V ’n•PÉ#Œ¼:›F8ê÷û·óÐVLuiÌÛ³fÖñÁ›L²Ä»‰Vªpg¶ ¯¨­9‡²ðj«.çú7%ò'“Ö[mÞíÆv¹AòA=QpÚ± +FãB‡ 1l™MfJ`lüŽt؇•NC´‘FšÜrìúÜá¦híIê#¿‰‘j‰{?¹u߆˜†y{"ÿËCë¤Y¼×|gx>öïe¬…nˆ‘Îñ£SWܳuÀÌ!óKZQøÅ5 9ʪu:  ¥%Ïi‰Ú󞈊xø¬\ÔUT\®Å¦¬l«ãªŠY=õc¥*åÛNØÈTS'k‘‰9ÿÂæ ziê£À¦˜Tä@hZB“L.zÑ:wÙBú´C;_Çáás‚ü‘Ãl ñwô ª úcªòƒf†·ñK9>ö`e[ÈÃFlV¤Ò_üW¨ɵ–+³œëæîÈ‹ù» !»ð÷øÁÿŠñk½Æ‘øþ¿G;e »z/ã—¯wýwûÝK'Ú•é=hd¼èíõ$ùÞ¤Þ08‘ŸE"ÕV¶ºl#c³‰BºlæŒ÷®~Þñ 0¨´°:z™ž|*%³2”Ÿ”µzlÕÙÕѺ&É~ N½ Æ~˜«üζá’QxÅ7eƱVJÂðÌUþñ.ô=œSÐâ›5{ôŠ’Sãy;Ú@ÓÓf“Þba‡óZµøQ•Ù…lûð½Š×·’Nj_5¨>Qwºiu1X+eklÖV 1°.hð.[%šé1÷(M§ñjye6£³ðÀ ÊøÒâž’–Ýè#øO8ù7ï‚Ç[“´Íu½É5g+DËN _S7„™Ê’QœB¾Vµµ:éÆ#ò  üd$(D½uËÆû—<Ô46t¡÷˜C¨¥Žò¬eeP1?ãùé™ÊT®¢2✮Ì쑉ŸæJÆØjOÉVž-Ž=Ãv›GŸÍÊ‚ žû)BPˆ~û5»b—‚$víø¤Òý¡Fð˪†ÈôTk]¸Ä8ÊŸz “¢»Wd“<Û"Ìz²‚4û$ìú›TѽÕë)ªKËK)rˆj¶(‚À† ´‰XNÖ ‹ˆh=µ¢1¤8­ÚmLÔE1Ñ}mº]Pi§Å½LOü¤¬Ç˜S’6D¬{Ó„Ó²hC3Ж´Ãh1­!iDv’yióD§Xa—•??§plf×öÃdŒG³WCœìêùDäj¯Ý¼ZZÆiæ»Ìïx˜_ã-=Ù˜3»ú”ÿ /r<¦[~cÛƒNWÿÕ ¾·UY|‡¿½¼z0»iىϥè ãöVޙ߸䃈 É‰ÐNÕHÞÞúÆHÈÐS ÊËñ³adÆÃòÇ-ÅÜ1c{À4Û[#ŒW–ýá(ƒ_—22\º½gœ&'.õŸéî‚*ÔEúGž’ÏØsþZX»œíW,Ž_¾ë/ÚI )=Hb)Pm| Fc¹ùo|†]Š˜ ÿÞx„:/ÿD„Šð“/{ÃŽ[$¼%¥}4›ˆõþF]y\aKl"Sò$!IöZ‡g'T.;¯Õc#ÚF’÷U¤CÐÐFguyšBýÌÝ è!òf o¹ñQÄL¡R{êé8vO›TbÀÁÇ¥„ã–VÞ`?Æò‡¸›Ö¨)àP{Aöˆn,ÑŸ¾£)Þ%}š+ÅyDHûg®‡cz#™h"n»cDE®¶½ãðt2§;ÝÖ‘d MDÛ_@§Ã&«úÓµì¯ñ„/¢"Rþ‹·5ý ì1ÉúàšÛñÑeY¾)¬üw:l©d‰cÚL.&:cï8á]›[2@}Øx)m¦ûšäÀ_bSìð* ¥ýÜIš—îÿí1ÁUƒhR×8,CÞþoëˆI¤rï¨24wÐl`œãå4xš†óðO°÷g¸Ëœ/§¡Ó4n/€«¿ª¿¡žÝ^NÿWÕ²Û?(Ý« ƒË “ËðÚrò«å_Õ €Áé¯ÊixîÙ‹HWö/¸sñ-ÅlÿÇXÜZ¾5s@ ´cóäE¹¹?ÜD°G×Ú$Öâé5šôš~],¥÷¯5VOM‰­•˜ …ÏtK³ £czZ#.ͯ#ˆC'”kþå kl¶»,ÿì`?šIàCz7ªJT6w²»Q™¤š%&e6÷ñ"!c,ÔX¿È áº{þõ¼ŽN eN(>‹~ó„hЮ¸%µ@¨&!Öè²)Ž6˜Ï‘)&Ji»#¢ÎMJyÉeLÑTùÃïÈë#7¿8 §ŒZû?X+¦Bå´Î`HT· {Ÿù,5¯à6u‚ïo÷ ex.§µ›_MtüC°%énÒm³J³Æ±÷ÁwÏn4näâÊxyp&3¤ÆNbÒQÁ;1‰Âµªùø©•Nû÷ce/Ô¿‰½tCÛàKð‰y†èD²P×(âþ`õ™W(±ƒÏL¬sØ?`|¦pcá,b×·FQ_ÊårxbXxpŒ8m¿Ê¿ F#yA-&w-«aO,¿UŠÁ}€­¬ø{¸* ¼Á­†å!°Î\½DLuúq¯ç6w6‡”/Í#úL}~5ˆZÇM¿:!ØÏž“aC¢ZÁóm·wY‚ 'òÑ®C «¼íaòåÑìu@X°'Ôý=.y"@Ž;ã_&zÅ¿® Õ0ÖÜÎAÝÔ/¸qÄý ø£ÍwX¯Ÿ£ŒOw+£ö9­à„®j0ÆüÑkåâŽËÅÿª½@H ïŠà³Šƒ¥É/“_ï­Bíq{7÷r×:TŽ Ë¿òb UîSú|‰.UÓ‹%Yrò(äÛÓÆÍ§L½oIlÖwI2‰; ËêmžÔâÌQ‹-2Z|ò¨æ+ò²žAYäSx‰|Ãf|¤õö†kÒöýìãw1Õ°øÓ‹ºD¹„þ2ý*¬ •&¶¯µù&窽` ŒóðFéLíùè?·©nE7RßuˆFæ:/¼c£Ó¡ãc¯œ‡2:‰‘uðpvÐռЧ¥Ýybµ;ê¯ëÀ”ŽÇLƒÆ¢[Pm¹“ˆá6¾Ü¤qäDð¬Ð2UZ!Ñpô8…^Ãc+µºÇ „˯/©â¹‹×ÀG n  p}¿_FÚÈX»y nê'Ïl”,Ňï`É»GØ£¦@¦ÿa9‰À™à~¥³ÓRk·óåîDTƒy€ïÕ,Ôu¬KÃL·üE>‡O#ÖK²´JËÄoÐü,÷/53‚ « â±wýdW®²ñ7«m}wä¥Á½joŽà¤ÿÇ­œ~ƒIÉìRï‡zùü'¤„Ë5Z9lñÚQ€î§©ú‰CwÁQ/]Ó¨Ö;Õù½Ÿ¸á0’ˆürÝÊA7t9ŽI(—†Ê˜jÝ=Ju`ƒx*Ââ”M¶j”Êp³¬IghØ OùÞÃ骚‹ùC(£TSËÁÄ›ÍñO8SÈ…ª‹¼wnŽƒ]Îí…¯ãÚG¡pçìp™f7øùG¸¹DÎÂYïÊp(ä÷I˜3Ð,Ê3O‚bƒy½¢}Úè×ÓÖwC·Ob?>É¢‚'¹jÞh›rùyÝa?Á‡†6À•‡}~œxló3_ ©¥“-b÷Š|ßϽ/Õ)V ø;¬U¶™Å¼š`¦”Ș†6Œ `ÜÛÆ’+ÐŒÀ}ËŠûõhDãOW¶|èx¹¼"¢F½GHвI‘ ¡“DÅ[3FAªÊž†d× Œd8¶L®Ý)ãK…kdid(”.M{dÙÚHŒµIC¶Kë8Â][üÄf¿Ù¦u­mpœãy-µJÖùÌ9¿©i*´ˆx§×Ýâ°ò¶CD‚œ~9¼ˆÉG±†áM  Žä²)°êó¬|SèNÃÖ †ï,ÂxN:Jd'Òö#Ú ßÍa)r–P2ýÔ‹Ú^¹ý³}&Á0L{#{þí!Ì“Åǧ‰eÀ–-òº˜§ñæºÙ˺Ú`;à]±hb­—3õ‡–µ¼IØ„Ã7ÏäõêIMç/W;¡4¾ì¡ uRH‚NÂÔ½ò‚ˆÍÀ{DÝ~™ÏÆÔÊ$'o¿nš³W|C…ØÊKPÜ †¹Giå,Q9œžQÈä‚&ËäJÚ>jÂã0úEBgºäyzY•)¥gzÝDV3ˆhÝî™”ƒPÝ…MPyã÷Ž …Lï,Gæª@ùKøø†wæ0-„D½øòÇÅ„6Ôb\ÏÕkÁÇzë–O²¹+ž`Þ$«°;ŽÁú IÚs/‹ò‘e"ñÔtH¦Ûý))Ç¥¥ñÔµOäD{:–^Â}fü‚™¿Âd…‹Y[–K;QyEÓ?Y¸±qTÀ+û™Sd™‹¦šYÅÕ ‹€Ý÷¶ËïÍjç¿^u=?w2Ê#{תÿbiO[¢‘Ö{xÞÚ3LGïz^·× ªà§{öf›gãàËÈÌ­ƒDæ=^îÊ!SâƒG—¡‚:CE,^‚¹ëpŒMoZõûCšŒmƱ.¢.ϲ½Ë¹§éÞÛ­ë¹­­èŸ}m¹äûÅ_.éírWµ·îA1(ϽÁyRºvý±æZ)9Ӹ›±ùäÁÃ\]õy6#þàjĽÝg´û ˆ¤Íü½ËÍ' 4?îžw›Îઋãç{+·m)ìwiæ©>Çîõ+fR«ë?Ë b6ïÆ­‚¼ºuÂ*#QÜËs·ëù¬RP¤œWâîÈÉß°¥*ÂÍ[sÝy'Vw÷ÐÈg»KæY7Ÿ2\`¥À !Þÿ/¸]_‚N=†CöñDéżӫÞO饋;†cç"²u:à÷ž$'î´»êiMÍÕ;ËRaqs ³¦š}‰¬ÏÅWs…ÞÊa¦hšcõ›Alæ«kØ1ü'îÖ¾÷;Ô’L""oßÈù·kÙ,ÿ@^¿x¡,oÕ:—÷ª—ÕØö)ßÇÉÝñâÆ} û”}è$ô Aœ‚ØÊrjÉÓÉÏþ£éý,RòJ MÇ뚦Ÿl¼|é^Z¿´õ+ü¤ ËP¦ÂEòº`KC\¢Ë%•Éd$E ÷G °V»%éÕûzÈñsýË÷ 7¸.—Þ¡Wc  ÃÚ.b‰²ð_º3×\ØEþ/k ×9”U<ÜTn×êsÝ«'@§O®«Ó\Á•“ ¥íúV•“¡“+ínAÔµ»ZŸå†ëYç’ŸÆn'ÆëÏm˜ŽWÇ”%ÿú¡‰*EP•iD’v¢ÛKÓàWÞõK2O‘ s#PzçÉc›J'§v;è/k¼îÒâÞËüÊ[£–לµŸYR0eóëèë6÷0³T¶cõ:[å/}¾¢ït1GŸôÞäJèÃXa =Ö–Š®iÚ2£ð~ ˆgóW( ¿¶Fz˱‹Ú|«ÅQPÈÛ­6­Ñ8›<’†ÏÆLŒb5Ë4lòð›~Òk e3†4ÖaH& Í%¤‹D®/sê´Æeé„FÁ¡ßd¬=¯ùAp aÔ ™$»<ؾY¢ÇœñÆ$3Â1$¢ÐÊ0²ùU2utŸ,ÝN´ï ³Ú)vÕ\X“Àóü_‹„ô¦[)áÌì˜ÂùùDRÏ{vYÈ©•L¢ÜÀ&÷õXMi‚@@ ëÿÌFéebäÄGµäÿ…âšvž½Ê+¢(†-NDEž…#¢ f•êr{#6¬^‰·êÊœ1”‰œõò쀨ÿŸÕU¼Ãçócõr0’௕B9Â#q{ùùj»ØY©ÛùQò¸Òaú®ÊYÛûêÛ6¹óp•ðÑÜÚ1¤ð©U…óàó~[Z˜—ø¸ø´òyù³Y6›ïo7û£>/9õ•7TÔôû˜‡Ñ2ïZ+“Õ+ÀçXçtMs ÝùjýI‰‰ôz®gŸ·çE¶{ÙOºæ8Ø(N&þC¥!ÔäÅ+Œ;Ë 2þF”Ð}œ‡³=]¦›§Ê£½IÆ=ŸzØh‡z´Gõ½AÖ-¾®@>C^ƳåáϲÙg—KØ#·=ŸR:ÂÅ•Ú÷1µáMw£×ø §Þ)ég’ÅeíS>1ÝǤ.·'õ˜Aç¢Õß÷aûºÖ}æ°Ÿ N;uÚãjiÖ…º¦¯TêêT/ÖÚ‹n´‰5eÖ+„îŒÃ')ÿ‘HaÌÁÍXѪÅÂÏ[ ý¥úÍú ¾Ö‰e Û}…«ÿèѹÄä©XúUÂCGkÂãmúÛäÒu¤g [Æ£SG =þí3ðã]ëã®V²· BšüÝåxµcÏò˜$}2ê…”BûLú˜¦ù>ÔA»J¾¹’ŸxÓH°#¿ú}dÓ›ÀŸÊë÷m3!ŽUÇÙaÚÌ’©!É™ó·CùÃ:„ØÓF¼ØGŒdô›‹³åd‘M§»¢]ߊO0'³ö­kþ/í°)€÷×”³îã§÷©ë!pÌTâáôN];f£öÔç{Ã1ଔ*yhç#˜ðÖËïµÉ÷}ðU-³kb3醂î dovø“²]5šòá%µ¦º-ô®ãðeãüî÷*TK ¦óÇ@\çäéžlÚHòÂGÚâsï‡ó™¦$¿æ¯|~ºw—‡óýú9ëéùèw/Ñ!Ã}IÿøNF¯à¶B§ýk×)÷||å^Ø¿UÎPó,õ‡¯ÓT‹÷á'–a'Aƒ×u­tG(L;šOï[¯©©éìÉÛÖÔü ÿáZ×€Îé­¥®)ÿØMV¥Znm)ágüú¢3ƒ§çRÄÎ’ï`¡X§ÜÀŪé¡ÃYã.ý ÁRôµ8Ü ãûš7Æ¢GôÍá‹N¡—oÃ¥ÆÁB‹›PÆiâíäYãíÿÁÞ{5Õ­¿Dª€€HW:„&H‘"½K齆€ˆH¤I‘Þ‘Þ;ˆôzï-ôÐC’\|ÏyÏ9ßïܹsçÎùÍÜ?X³³ëzÖg­g=kíçÙ™d¿Úþ²ƒèôr1ÚGg¹ù*´ÔlO‘fÜÃ4º+±3]÷1½¨ŸÿJƒ13øö‹á3“AÀ@_ƒ÷pùõ®‘¾.¯ÏS«Ã®çWÆ;wê„Ú"ÕÁ…²W‹Mú-ëÞ~K³8”óί‚©àÅËt+¬ dÛ@…’ï€ðªP¯Øòµþ‚|¯ŽY¿ÄI§ž_覸ôÙx\Ôw‰c”zÕCqye Ž^¿ç'Zʆ1õ ŒêꇴþúÛ¨8kâÝö>Ó˜€Hv0#éõøå¶%Å3-Œ¥+×ʰ@~;dÃTó‰òMãÍS×6ü¶=*6·ƒ›ÚŸÕ}Pdÿ‘²ézjq‚å\ïO{ÿ£}׈•Ïgð|±íNÞžg7ÏÎß„Xö¨>ü!šôyš¤£,ä~«­€!†ËnÜŒZÿ=Jeî>âl™†œ$*‚Þ‹–ë_Þ‹¬¸“<ÝéãöíA½‘Çò/ ¢mßírþ*õŠÖqÃ삾*-ï³@´&FE«Â|¼`¾ Ïfzž ƒ-|8Ñ…WM¨Ô«qЉ®§£e£9 ³û ‹Æø9hÏÞ­ÜÌ~¿CZ|Ã9£Ž®þª{IÒƒ/Z €Š:dE–9<ÁüƒAEOšù{@"ðõž¢3×+Ø6zá_·+߯ˆ$ƒ.ÐRØ"r×‰Ö R àžo¦`ļJ[^¹ôÙêJ 2k3Ì«ªÌô"2BìÚ…œ4gÄô°’M[Â+0Âþôéyã³ÙFØv6Ä]W…ʪ )Ò´{Àþu"çh‡È„ƒ¦ H ¿Å Kîò(ªíTÓTÝßžÎ6j€iª¨°îø‰°ÃÕÁ;rgW/ý3–ôÕ˜Xís@KdLÛÌ vìRFŸM￞ ÔÑB˜ióH“"H"ääp*d¡oÙþá›pþ‹}û_:}Ì¢:õÍØ•st×;eóÍ>èål­Ê”ÜOŠSb~•v»ä‚\Îâ%¢ÛM_¡çûÚz½Ñ‹—PÍ ùÿ¹4svª>Jð'¾E~>5Ì#!g°–Þ¶± Ø´D²ì¢¨ƒI¬qå­U°.çž@#ööë5 ÆEF°ˆ¯ÅèH¬}o&V+Fª¡›f¯Ì9ŸE¦žxz…ÞÛ7…±Å¶íÖ÷+úÅGE{ S0,-ð@"'ß6ó“Øâ[¤[pðöü€"^ÁÓ…NiŠF‘¯süC…NÀjЊRÝÒiÙÁï{ ÄÊ€Ma1Ñèü2:“cß ë¸±3Æ[Yr‰ºgǪ -޼k°ŠTF­éô+î&¸²±ì)b¬ ü× ¼ÀüÀ‰ª¶ºU([Ý‚ƒ¡JÒe‰ÖˆzVõ!ÄÿóÓºC_z§­†58¯gÍ$×'Mº‡Ç0’ÕƒÉ>­|뻤@‡ŠB*è6”éÁJúwk²Þ3×EÜ?˱Š n&…ĤÕ&ÑL–UÀš>ìÛ횀È!Š î Y0Oö§ó8^Q®û"“ xΩ )¢f÷÷¶9»æùï`ý‚ë*Ù;¢—‚•ÑB ì•Å_Àx_©î4F·;e;‰Ó^‡ßÖ'K\£túÚlË"Ô‹éµ~\qMBšÜÄw åPmG¢á“MJ,˜ìÊS¥âaâ ÃJþ…Å–©I'VJ‰{·|R¹ÊØgZô}#“–i]Ž¥ÏÞ–êN;çù¯në7ÑøFy‡7g—ž y?¾kv»×G²-é¬é,zIdüÐú©¨" G(¡˜Ì§ÏÕG»-ù¦4åtÿT+ÄÄ‹ƒ•ñÁ°ÒÆœ…E4ýo6&ð¿çÀÒ°Ó~!sf ê $Á[“¡é5ÚÙŸn²’—ƒÑ:e>X5Ùâ¥%$´¿ç¦$¼ô÷fp…8ßÛ„€ÓA~k°Ÿ5×Üb,‹KX;Fm†æóàQ›ãù*]æõƒŸl.ƒ9[È h¹€Å­3¤œì²:->Må¼ ‡]za|®†ðˆÏ‹>X†§jœoÜ2|Üb”;PjuÐì+îôRä³·O¿i»ìÞPíèK—Lì}û'ºÌÛâ<™¡a¾Ûc¨ËãuX‹×çÆ®{2Â-t;|2è´g'_š(,ŠŒÞPLŸ{ïfØ0r©ÈÑžù\}ÿÄô,ÿñ¹ý „‘®o-FO߯ùtÓÅ`¼È&Bµ´yü=Ë#Iy¡Ð}W±×SO«¯Åsä(z w4/3îÍUöÓNkÐÿ´âH?N£ƒäÅW -Ë)Ì(µ9p½ëX ®å¹Oã£å\ â/ðÕrñh”k¦¢àßÀËT(E}z[Áx~¸‘‹ŽGi×~ÕΈ¡eõ®›èÿ¹øLm.\ê4S9‰ó¨Ž“ý ºÁÈd>i¹Rrd×7èâ¸È§µm‚nÜ7¿Ð…@‡¬ÀETÔ.ÿ¡ó"Š©•± à3Âÿ}Gj¼pȆ¢zÑ8QºÚ¤(}²Î·¯b¬IÇv?‡î:R-Ó$Ó%íè#ÄÒr‰Ýls{Ñ—oa¢»¡OX€\¸çÝ!æ#.¼ð>ãiDZYp%œPx¶ÓHû·™ ÂAC'ŽíbõŸØ9N_»æÓ~›mvæê€Í}M5Ñ»³äéSΉQ¿ ‡K·ë×ì¡OŠºk‹¬žÿ<¡×4ð©»Ò‡WËInN‰‘å³»¸_ùÖì)imN^¡ïB4sl-ñ’±ØÓÏÃlºÛ¯oÁ~)¸º;ÅcÝäMVt6 ³õƒ.o›#³-MÄø‰ãêøs±Ù÷~Uý>}rÚî<Ðx_5®›‹[p±<±Bcúé’ÉÚ) ®Sý-Z4³ð‰óçéZ³ô‡:pÆÍ‡b˜AÙÞè'.¸(”À®Ÿù¸hEöÌ¿Ëûö›"¥ÿ¿*<¬2’aM|ö*m±¦-’*íB/ÿ¢|×qåqœg™Ÿº%E)r¡}<=Äž>µÃVU7,BEQ½?(‹½ù¨ªZDØë>ro¦¯¶ÆÆõEE}øžwåž&"öOíy—†-pûÙ´,øX–ØÜ#vJ:£QëJ_=í•3Cë%ü¼J=1èþ9¸‹ˆlî¤Öì&+Þ_N­»e88çº>Àl÷ƒùÌ!"}EÂVRB½ïR¿öžAýä´ýã§=©Šx‹öDN,}D%{¢¢—ìö÷w@»pDþ…÷*<†NëZ«:+K­ú¤™4yNëÍ'–Æ@‰×?ã7>@6Ìaø 5QƇûPš³ŸÛ%CLÙÈ3]ù²—>`"9Ä?¯¦»ùí\²'ؼB-8`ÒV‹†Ó­õ†týDÏy”½»Šý^  mÿh ¬p^:…ñá²ý±0-¾!š Æˆ}Ž*§m6QÃÓ°©®Ä7Ý7µ½KÌ‹û‹KËÆÌ}hþ<Ï· Ú‚¿ä²c¦éé±Ák8ºMHºÁIá¨1° ¹UÑ…Y«•hø½Á ^öÊú€ÃÙI†eO»†¼‚¿%ÍÙa&Ý7 ÏeÛòÔ³^tLÃöl˜3‰îÌ Ã%'¾Õa“Ze ×ÜJ$ó7 aÔd³—î¥y_@}›Õà¿_D½0Ju–¥åÒéBz6rNZ‘­Nózë×pTTá ý(BæukM¼%¹—DùKVcd°«ƒŸ6PÃê™—‘ÙÞYì ÙTpmœ¼¼c´¤žè¤è¬†}=ìžh{?†‘ȵ®é)(5üÎÚÜÝõkâã{BlÿÝÅ@@S(Â~w™Õ·k4Õ)5©ÕÃbaÇsdGYŒð*Û#’+€Ö "Ú"— 1Ë+‘ó‡å±Ü9GOÁFÃÒª±éxtxÙÃô®=*Z;Íbðz½YãÓán -2›±ÍÃâ °ºíÑ0¬l¬ÝI­Š$ÿyÞæ²¤«°7ç(I/O橲ªrÒ2Š—«ñOÒ7¾Î_¯¬R§£¥J'çûû^Ø úÙžƒªÕÇÔµê¯ÓA[§g~Ýõ°©<´5ÄšŠ‹*ÀõÅÞÓ3õi,«œÇ3ÀŽ\}øXeß)7²ì¶é£V&ÿGGÀâV¢ÇmŸx>ÊãÑÄûöŠë÷¶‹Ö=4»‡Ñ†FM6ÕÊÄK›õÚ´’MŒÕ0¯È½¸¢œè­Ëýnçû4÷œï}­ÆËn¿¹ïÃ<¼ì g“6;žÔÅ®yÝuh9'U—ö{¿“Cqd²»²+#­‹Uǰä.<7šÉ¬l3*Û/;vž³'óöS<=¹ôè*²¸ 7@%ºô†¥¾Ä®Iï¡‹üq쫽[XäC"o¥Šˆ-ÖmžxÑÌí‘9!E%Ä?âzwîhLD¢Øé¤+bïˆ=‡&õù%¶É)ЪÔK÷oâj¿“{EòpV%Ak2ˆ…Œ_§T®ÝoAi¡œ{ÐØç þu61VHÁzF4¼ß¦/·yëNëY’~ØÓˆC;¶î˱äxÖB³ Nk>o<žêG_ònNЊØh8âùËxknÿ*5ú‰H{ÿ “æш·ùiÛpâXΡ™(EõI÷Õ4zÎöáJ¯ÒöÄãŠàMaÉZô)ðµp]ï°q‘ »ï(ÚÓ!¶_vÚ¶»à’Qõæ<Û:Xe(.Ž0R²·\^7û)5Ÿ¯­œs_`šx®ÐæÍÃ`;T]˜E@ÝY)<ÒJ8¸tºñ¸6,5í½ö4ì߀Ê: ¨%Û0¡õ¶R5ðrúÐH¿<ÛVƒÔ†ÛìË™‘ûw³­ãÓvrˆ¦yæ5s¢¢øœñÄëi ŸîGžLZ1ÅcG=VOX+]*cêK_EBy [¾¨‹hׇ÷cl#ŒÁŠ£à¸ÓA).¼ÅöTkøökðd}K¸Ð®'¤(2æ%|âE}Ôx[ôû¾ŸD-ñ¼YU'¸¥”<$®…Xñ^ë&Çk2»žÄ$æ¿GªÓy JáÑÄŸ8—vb ‘ÙbQ;¼xgvQRãüZ@‹ X×´’¢“w(Öº™ŽÕ¥»Zèe‹þ = šÌ½O/‘ôPyV‰/ÞR ŠÝáX÷¼º”:OhŒÂI×pþTª~šÆà6¡‰–ãvDt@/A%úÏÀbW KL¤¾ßg ŒøæZîs¨ a£’ÛÞÜžmÿ ôÕ›æ+ªJrèú€¦pBjŸ¶ {Znº]@ë_·y‚áËú=-Ó"A°à Ì{;ÀFoŽ`«|Gg‘gÑíþd˜â‹–ªž±e›ï•.¼?‰»;v,Û8‡î+žú1øP¬1b¤@ZŸº‡»Ðìà¸p¿¬Íìw+ãÅìŽxÝ ðÇ£’OßóÉÏ:’)êÅÊ%ä-¸X‘½ööîI/¯»qÎÅ×bŒàLÙ÷ÍôŽi€¦9êJ[ÐÒ€ âry¹"ódßü…òÄ›?ë Úg,ÍÎ<š>¯{-\¼¯2Ÿ©""Š)Ƹ¦^y'ü8ÌœþÀžûÑj ôGDVLúÕ¼ù e¤’Ö @—f;²èk§!>^D´\~ÖLÚ(„BÕ’ÎQ.,°–C¨„ã–¢¡[ö< ôá”9Í+XÐöïów3ÎlÅòþÙú¶iá2;‹=Ôû^¶Ñe‹Ævˇšª‹ñn!ýrÇ*ÀÞÕÊsÆ@•²C‹ixÜVtË|ÔÅ êÈMi%E?Ýù½4æ`ð%ªšï;ãÀÎBùu0És³sðæ  mKŽ…„¢Î žh .nž÷£¯TDZyY$Z÷×%üÝ䨇¯„‹®~B|7ÝûÑ»Øö<áäÛIj†ËªÚ©ôZj^¤ziä¦!8×'}Ì•>Ý7?Í7Òeèy}øsaÑËs,ílQx.A|Î;ìº×3‰¿0}ÈÚóly„…uËûß!nÿ)ÄMµßã&¹mø?¾£ùà¿4µ{3[a~™ŒGèöm­b@úiÍ2{nÜ;¶?+Ô4 CïíÙ*/UÒ%(!IwŒÕ5Ó6OO]1ÂÕÀ=ŸNsŠC³äí-4sí픕œaH$—‚{± cƒ¯`’ÄÅÅýç°\±í³KÙ#<Ú݃'£/ɇ[t“Ý«ªUîÊTc€mUñ~ל0m- ä*eì®xôš ®ÿÂå’2ÏþýÅx-ÙJ1^Ûpº"-ièµ.݉™]ÿé ý¼t]ê7M­×8¢ÚpÌÁÁÁQä W¬G‰(ùƒ¡yl-åBî*M‹v@ 9!ÚµKk¬ä€Ð\n£Óm¶0û"À4%…Ëò}ƒg=ýª0>”ÆcÙÙr­¦ôHž~ nGÄ@g±bŠ…M]‚‡w p‡€ƒ “‹½ýg-~”_ÉáâÉ(@Ï·3ÍïÌ"EPÒ¨¬’«(®cû‹š4e×öº|dÍ,ÌòTm*èÊÇ·÷XtÜ|p‡Ç<É.²]6×É­TkÅýnôõ…½:`BýBÞ²ÍóÚzˆ±íf:y:dÔÊ,¶{UöWO¥©'ÌA†Ü \ð©¸=†„r õP«-6a\sá](šHî³òù:†Ú3¶Ê-_)Ú>)þqvjË: ´+wµÎÓÔ·´íó}úE‰ZÛ³C»!­­¶0Tå’ÑxJô$åâ7_Ãpš=ÌHÈê~‚¯Ð³rϪgÍóÂI{¡îQç–SɈÆwÁ0á©%v{íž3ªoÚFÙtù>Ì0ù„–Ã\ÞôìÃ;Çl4XºÖÐjûòB»y¡‡c›±ø´ä.@‹k?ÁÌS÷ö„Ä—Ê}°¦¿Z3oöôñl†L2e‘³—¢]*Ðú›ÇZJ Uä%¦O‡ÌÿC "%ÁçÒG#ÿL²NÅ|Ò_>*N«¸¦zGõû•Ö–åØÒUóD¹x¦xüy¿¦MNÇõ›Rà2 ‹z¼•ÄÕ¢wu‰:IÄÀAOOYÏ‘‹˜*Þô"34¸VäÌ?Æãü˜ Ôöe@´Vó’§Éвv% 1évZ3…T¿òM½äƒ±FÅlŸØ³Ø÷§Íöb²yÓO9{ýõ§Ø€rËæQ£:¯”Ê Ó¨Yd{²Óïï»ñ&A 9HÈɨ%‘õ>çž“XW¢&œ¦Å7Àj­mZ$ÄZÏÚþ9 ÿZ¾yð_OÑ"ô! ‘fE"S°°°Õÿ= åÿ—&¡©U› ÷?«á9?Às&¡p&ù³SÑx¯.ï &ì.$Pú‡ rï­Ý°z “üÿZèGi ­PˆÐ@'¬­Qæh8íJÓãšœ×Þ§D½€M´¸?¨5êá&µ†¸A+ÍâU&%CH±Ф@úë¡q힯–Ð^ú¦O*Ù=ÛÖh4Žpm…c¦!Þþs€é} ÐbÞçp:_‹B  m¨¶2Ý4¬&Q:é‰Ly=™N;mû¯J!`wþ_·ÿR@/®7÷Ü ‹€éßê=ìý/©wÆ[câüñ§‰_]Âú œÃ†œ÷[¥&y ÔTYlŸêGMÕ¾Ý{fÄ7*#©.ů{‹VæÁ'ìÏ@jì’‰¯5œ:ƒ!­0´3¸p^H<ÒN9êpÜÂôMƒ" » fu(iÉŠÞ¨t„Ê0+3³<9ÐàåÕ(Tµúù-6>ôc3ÍCòÌzŠÛ ³½}Jr–sl9¹LOà<4‡ýŒ_¿Ji˜Sf=•²mE )øk=ÚÎA…#© ò6JàAÙwa…?•r¬ÌŸ°‹P4x÷r±JªÛ<´æggúš’ej¾±ÅÈÁˆ×—Ïëteþ<.”åA™häLý-ÙžW²=6móuÓ5£ ÈI¹_>AäxµdÈŠÇSî¶h[AY¹17 úñpûdâc¯ÎèW”%w‚p>™zÝ·«³uèz%Šq 3JŒ¿r´·ÌùeáNSš~ån&rÂH Žò0¿0EíDä?m¯÷è³Ý/ÜÄT‚79” JòÛÍ4·ÎîÞÞÄÒš o¸~ÛÊdU0ÎìÕŸû°ÊT-O-©‘A ׎³\ë0l $cR¼¨b:õŒÄu%ÃJ`úµÃÄ­[IϽOATñ+Ükž2cQ\¢âîa8§äªVוTbÓÃŽ.å)ÆU"ø-φ[ÃÇ'ë ñ²ošM9§ÏëMÜ>3Äyt ©°B¾OØhÈ_˜g¦)'Œ¾ 0ݱØÂ@> Ä`*3Þ ö.ˆkÐ-¿$ʰ( “}¤[«áð‰Xr!“öĽ³8Lày{X·Oüå<³æ²µÌ+zJ뇪mGTQ²^1cÀ»NÜ®fQ*\8·'ç§ä[×™D¯3e™®•›-K²Šƒð»|ãUëmÌ S‚MWo'¶é%œ÷±²Ë¿r?øÄâÓdŒ¶9©ZÜx¿«©jgó©!}ŸÚóQö ®¾‰²´m8Az“ª£í/ÉÑjúob™ W¥°Çq<˜G+òiÐŒoYßÉéý-²‰ þ·Ÿ›Á]l\ÉPd5ôZ?&@}îÝV§KÃè=¼ÒIŽìò}¹ÍÞ"*µ­Ôé_€²º¢[¾R6ÔI·ñÿ6á1®„²™ýÒ:qÄ”-ùûµR¯“‡”ØògvNß¶(Ê_EnR>C6kÙB³k´ÉõD ÙCƒv‰o‡:"T¢ú;®ô±®Ü„qbÔ‰gó[^œ¢Iúü:Ö3cÎß'aÌè,–õÝÄÝb/ˆ3à~ûŽ ø³Ø›™Ð¬­ù»#@qÒ9bÚ ×½à½{w2Ís©¥>þ®x%H¥Aב-H’ôåÊ ¦Ð6?ï*#–ƒ±ç˜k%£dW&Š©jÙ•è–42O/n4†[Ó¿˜uüЙ5É3âÏw»1à˜›U;óP‰ô0Žbu¸ g¢0êwù(í+G·XQ<¶í«Ü`Ýä,ƒxa¹À+ŽÅ‰šXÑÒ‡¹Yi™`KH `B‹ñì4,Þ=CåSó3W`ÔŒÐÑ›’¡êK<P“lûðÐM¼C-_(9÷|‚±¾¥¬²pæúx$»PöBhùôƒôÖ"µÇ0B¨dÈ…’CÇaNaqRO m¥1ž°¼fú=NoÏØéý¹P ‡íúcºbñ©ŽÝìÇq^mwKä' ‰VÛÁä#e4D©žë„û1Óx‰Û6üõ Vüs¶ãª“”ZS¢?ÿÃËÇgË|m}Ù»!vƒÈwÁ¥"YÈdMù¬*ñü[Ù“OCÝ"Û•„Y¯C` ñrãžõž+³ûg¥¨ ̯_ï߯_e´ ÐmoÁd€¿ä b÷E$E&!tqG½Ê°ž²Rk1¨&»ëÖ²iÆ®çV±b'_Uøˆ‰$°OÜoŸÕKZ1 C'.I‘:)þTèÖæ€P+ޏñ3 "†õÌÌÇž>’m歹S˜IïïÞJ:-1_„Þ=`½'Zð¢‡c™y„Ȧé´?ÿôG•š§Ô°¿ãGQ÷”¯ZÊ¢Cµ-ëÞ´}6­ì?„|+"ä§êÛ™D_NIC„I|–F”±ÌÞ Z²ª­[c/ʈX÷xüîЯ)0¦ý, *mƒØîáO¿:”°ÉÈø=oÿ‘šY8CžùûPš ?bø÷Ò EBÈ cð ½q€f“4IœÛŸ_¸œv â”ëAòAd«þ%%gM„tÙïèï/îMT8Í?A{9åέLDV×ÇÖpœ#î¨_ã^€û‡‡«Å²®¹W)[s*¯&µÙ_~ÞUâ@¹=þ^»Xq¡Wrø¸4.]N¡ïAAø«¯ÇxD¿W^¸¢÷—¸½ˆº‚vŸOä²gò½R·S哜B{3:éSE† >P.ùS tW÷ÔDD„àâPÀY(~4: PS222¹ï$KÞ1 y{;½ü™b$U’€ëF‡Ê„U‡ðˆ“Ü'‡8Á>Þé>e¶fà™í‹o³À:F¿×óvßùÙ^+ð‘XFy††Ôj7y{ºæ{ÉlUVÈ6#ÑuÜ$]¢%÷Ù±#’aÑ—n7Ïãójö*wq\ j¿”{p'h®ËÌÉuÕzbx;r¾¯^¨õž‹Q…¤¤è;…G¦q0:,´Í1ž–å­#Áí,uß›zÂËKª¦¦6”ìOD ô© ¥}d&ÂâPyG0cΞÁ?iœжxO;ö+÷îb´ÐÄ£ÀÅâãÍ{ö¶Ž· øšik°VŽTÑä-¬à™MãèMye;µa¿ÜÚòkzÉêúÚÇ–$¸ #¯4”•¨ )FzÔoX³·,ÝAê1Ž”ŠÕêèšÆþÆñ/#ì>|EMBç\’púÒ·—™mæ¶ íçú¾~Vq‹‰+5|Á†ˆ•f^zê’óËîü]_£êŽ‹v¢#Ϥpv¿•õª¾H8Gzá¬')¦x¸´€o)¸5‹†9ÚäaÛãþ\:|wÏŽ4æ•:?æïÞ/Šh6Ýú‘±–‰ˆÓ1z(•.ã—–áW¡ç“–£}pôq_Û¥ý²§ólعܲ‹áÆ«ÉcЦ'Cñ"­Æº‚^ý)kÕ [ë¿å­¢{ú6!\/Y^„+#õ§ŸPaa=Zû—¿€çríîaÿüÅ”¢Ú줯‘ž yoCežV¼a" ¿Þ°©ç½Ð­Ý@§ñí^ÆÄ/MÂÒÄ‘î=D_zÂ(Ä¿ÏÙÊW\êÈíÙÓõˆ~Pò© ™òU*ñI×çx[*×kùŽÔu&Ž%2nNE‘š±ÊA96yφPÛÙ5˜vH/s.)“gÉÙhT²”ü0rýŽ#spöÃ}¸ ‚ò“¡½T¢îr‰´m -ÇŽ Ëî«G@“a³ÝŒÝ²M䶆^±]ã>#7OÍ[‡|›Å?^Ä´ O'‹ÕlÔüJ^K]/xÂ>9ÒHOb3±ÅU|å'æ-¡Ñ®çÄ‹zaþ§Ùò¿_0s8N›l0ÈçR7¼Á>“{Îç`jm&’j 2}Ó\#Ò*‚–ä 5!j ̽VÇ>ïZÜ‚=.m©Ù…%g³Zh`ÙžRr#t,!ÅíÅkŸtæ6ïà¬ôÉáï4á¦<èdE÷¥-¼ÕD¼áž9<éL£­òÄ £ü9Àè½Û9MoœÁ{ÿËqDÙ;¥Àä–”¥¬l¸%Ûdß27˜nêt²îj¤¢ÛBÍñ¾¨06Ï9ÙÄêð”ò”òÔß;1C›î¥¹ÖG>àäp¾j˜¸޹ø{ ñxcQX ‡ïż¨qy루¦ŒùŠ›@‰FºÖ>å*¤/b³€H†@# Éþ\%W×mýV’.²Ói;äœÀ}í?eK:ËÔ6¼-º±mª½ M57Êl-ÿ¤—üAŽ6Ð/Õ¡ýsܶÞ»„ùÐ`ôöœfÞZ†¸_dZîÉçDí"ÅbÚâ°“¬»¯=i·cœ¿ ù†¦wl‰\Ïæ¸<cÇÅJò5(µÓÉ/ñðÖa3[¬]Œä(¾Î ‚ÈbüéŒ7ˆâ‰gŸ½:𯙠kûBŠhä) ÔU™&@”úÁ°© SmhoV§ãÁp;‰üc‚pÒ±¬Œ ¿81>+ -“3É?úº•$U¾Z{º•´ˆšÀOCõÜ‹…ç"™$wÛ·œïˆ÷OÄß©Fï³½By…‹g*4ú£¬ßŒ}‹öçXèµjÆ1RtSV,†¿™4½÷n«f—xÞ¤ö)öÄêõëƒÒ#êE4ÏÎáÇ“àò¦Å¾?IšºiŒ¿¨ d³eã2gÔd÷#AèÖ8A¶ºjñáêÇAŸJ貶ЕL l‰P)|d+›HÀå€ç-mÄŸðZ ~öÁùE›}0JèV¡€I™4Áþñ“{ˆ<ŽÉ•¯4Š[N­,rÁŽª+Gu› ±Á¯ßç—Û8[ ‚>åÉsV¬ÐUq ’û10Õ‘Ý {!,D³>!´o¤ç¬eó¶5­êÙN«Ì$ýígªG¾·pá½þ¾ð.`Œ›¦'8¾oïmoKé7Áp4ù—õ][^ë27n¨>é—TüÄ½ãÆŒûñ± ¸ý3•;¨s/¯ÍWõA̲f¨(Bx9LÏ9A¯ÉÔÖ{¨!3cH¥€Ùdˆ)Uô1¹R…Çúu êV‡G³±5ÚhÚ¾C©…[“‹¬Bh ÓŠæÆÑrQüê${<üÎ(sªMŸÝBß^î^9"´áås¬«|§à«×ØëWÄî)‰Øt ”F?µfۘ˧í¾tÝfF²w¢±¦húœÁÉ£‹o!ŸYºvï5¿±)7íÿ£\R”Nz“½n',äÆòÑfñw>½ËÆ=C[`ŒòŸ½äP}Æû; ˆ÷¦Ù¾%ÂÝÖ[¶¶ëOcœ£ymSŒ± õ¶¨ñ±€ þÑ™J“Ù‘Eo8¾•^Ÿ''stÄœxkmeÇÝ_ìøaʼn„“â=?äò>-£ñ{éX J•ûîÃ¥ÍÅ›ÍlÁŒ‰§1v¸;]æ².-¾äë·{}FûKƒÁ«þa]HGA¦ž h ½1Ç}RöB÷çÒ¼ ¬ŠC>½Dâ'n-zh†×¿¡y †pújnÔjú~|¥LŽ¢Ûxn¯R_›ó2W'Ö}ÛÚ4¶Й‚ðNûöÙ„9Í8`ÄnžÎÑް"bÓÁÕHÊÚΟÙD`euâã œÕRn6©A¥[OLƸ€tqoÂÎ0(cfQFW÷2‡º‘¶cÌ~“U·Î€ËAã, Ioò~ïG;ÚÇ æÞæŒC7.•^æ¿ß¾øc!q5g4ÅžÌK¼sçþ©2áÆøYcß»|'®w#p$‹e?­Oj4…É£×(©ì,qò$ºl%W´9ïax¢`çc4EÄ1â«–‘:Ÿ»™} qQä_TwS nﶺ˜˜?Œ.Ë" <¹8ÑÿÅỺüó©Ñãj¾Y2’;,Úªú3}Û%ð|¬íKjBêÔÒ%P¾ØT·ÆÑx7›$ýüOeÕjÓñAyÐTœn–Ù‰OQfêDådØûXGè¯Ü³‘Š Ëtæ_…I¢Ên(1ß%®¸?’åTˆñ“†,9ÐQ0ÌÛü.yVŸJ$ÁÝ;¿ë娳î;½F)ÙÉ9NWÉZŽÚwù+„ò…üÕmáÛ5çc0mvª„,/3cžé’ã,¤Ù8<£öµÔIŠx€‡ú¢¼kÃAܪƓ2úfO¢ðÓòz³…ÕòBò=ØD1ì2,dÝÇ8ò9ÔùA79}å¤GA·Ëœ’ªâÅݵì$ªóˆûxaÛöÄô 0Hs÷ I¯áÍêjAešÇ£K_wG­)ƒƒÎ˜5-®Û†¦ù,™Ps‚'ô~¸,iŽÎÖéGæ0¡%c 9ØÚyÕñËç“ßÏäÎÛD¹]!¼jøó-F¦íÐè'”„,UYIŸ­shD— ·$ÿ8P E‘Ækìˆ!€¦¨•ºªV/ù¢mÕmy#+X‡Žúe}¤Tò²5ݘ„ãÌïWÔB™ðhiÂË N$"ÿ·7ûi ¶Yµž‹Ö½üùé/­óý³¡Núœ…îy­bÙO‡›Ë‘ŪãêI½×!‘qÜ=%¢\C­XY[¦”éO@ÉúÝ1/uõ‹R·[otÊR1 Ámâ†ûÙƒ'¾]*j Å:((îe\%«Ž½›hÉfݧ!·ga:ñýø]Ü\i2©ÙI´ è=1ùOL¤§*Êq .<ñSUœúøµsùîÏ»F`,’¥m¢¿W-ÜûÉîáü8yÐ#T¦~•fÔî…é#ç¦ÉK”4dݦQøJ_)Ó³ñ§Gê[r1>ª1ûäMÑÇ–CVHֱ˱Г<Þ£+Ôö•sS‹@Çò?lœ½ÆÁÅæYa˜É-ÃÎO‹¡<Ãdù¨øç¬"×JîÝ%»ŠLö!‹Û¡É½æg6Ë:a˜UÇóÂ)E2²Ÿué ²h+ÓüQHàÿV-»Ø‘Dc‡¨íûÊ×ôÝÖ6:ŒßE¯ˆVHïç$vÎÐ43 n"a uhúÛô1@ôÂÖµ£†0—öo¿2’k %èG•ë¸3Œî^áIV¹…>žó‹ôx™îTàM÷Ç‹x*k”åïXäó`Læ9ø!qƒ­ígâ; LåjˆŽûRÜjHföJ7[¬ØÅ̲ËUþC©¸Bˆ?aU åÐÅÖWPj>¯ò\|9³=xœ’½oí[Åæ²jù5æ¦ÅÏiÅ*߀ɤ”´’ðgdc¯èçкt¬¯UÚOñËà¼v¶¸¬¹tkåBÐ<èÇù¹`l…Ã/ûZ˜Y¬»ìEJ÷`Ö„[êIÓΫÅVtÙ†1…6µoüHMá”uÚàEÚ™¦÷ëiƒa`¸ïÓéÍÓ³M3Pk Ú1ZȯÚ&¬x[5žuíÔ¾Ù¨'>¨@ÿðzXÝýÛ8]]¼‡ó^P›]ínšYÚ¤ý¼ô:)ÁôD.ÄLLêÑG甉H¿z**zÈu}”DâØÐ¨xÇ ;ýáU·ºC`åöI;•CºV]@Ðõkzžö{†¬N0]×Á)ý‡–»4Ä|„˜cÇúžÌ@Õ‚6Eþ[=æ9CõˆTmöÀ‹¨¡Þ¸™gyŒtÓ¸ =½ÜŒÖšGìÇò–½ågeœ£ ̼œëèU­IíýÝ“H<ÎÕuñiÄ#ûNÔcÜê·ÏB1nÕÅ¡í)Eö•º÷4Ì#ƒùxD¸æ–ó<'+¾7¾å£Õ;¿•ti%¬Òðæ™E'éV=‘­Ð¦vÚUÚ5eW4n—-Üa™?0ŸªRc‰/¦ôxS˜:Îz}‡<³‰" …Âr@[ëÇnÌÌ»hõã{":èÚn÷Zz]ÉOp†ñ¸àR‚¸RíÚO2i»…ø°Ð+í3ÒA4؃06÷ÏDQïCîfº2ÎeØVœà…;F ¿ ¨d¦<¿™’õR Ò-Öy)•Ô¥ӱ慻ŽÒ*¾ºž±Ž¾¥§¯y¦ã3àÍP¸nAg¬ï+̆²Ì ÌäªîÓ“¦xÓž?žµoÒh›”×·îäüpõ¾ˆê¯õªüýFº.¼õ>µ«ùXÈÕ²l³î!©´‚ëØ“ snR+}Éô žQþûSÜBq"$ÜQ,†¹M ´öûæHBÎHé²'sÖ¾<ùeã³O7 e4ŒÂð;¿j¿³ŽÕRŠo¢²ê¬ÔžÅ×ü‘%Y&Ÿ†«ã¤—æróå£~¢Ñ·l ïú…#xˆ…°’º«mœ‚±|¹>‰‡J¯\Ï•¸P1ù°îÆ»¨æÝ-w»µß¬¾/Àu:é~ÂHÿòìSfx<ü––kĽä˜@¾ßϪè9ECA:îAýf/^rÛš£»X¾v:ûù¦OÝ˕ɱÓ9<9÷´¤öD *'! yuãÛxØ;ã‹LþÕ9ýˆzUPuÍ¿ÊtÊ™nXó¯Còü-´tžyñ÷ßV8Ë_0}ÿåÖœÑJaEÛd«FìÌEq4[ƒ/zi¶òÞmÃÄo žù lEú—·CS'$ÒçAéz¾Éj§Üv²±¼£uyßÔº6!{0@Oï‚h ‘§}0KLW[ Ä|Ž­Ò6-¯ ÀÑáaš]’°ZO8Þ¸kýUÀ—"XoíÚ|>Ë ÷•)LîFÙß“oNHšq}‡'Ó’´?äÁyd®’9¢g:ËÏ(O>ZŸä‹ŒÀÓTÿøjïÁÍgëe3Cg3•~Ÿ#ÇÁ ›Gao‘vR0‹³_ê»#?º¸jLOÄjϱŠnkêSÌÿ1º‘N´úC£dhÁeÅ*@éi‘‡Ç…Hq` ñü—¬!¾öjÇgx¬‘{B?J¢ß›ºrE¢¸¢«ƒno¯Ô¦Š©ø®=àLì?O.ñ¹ð‘‘‰µ«¹ómMz(Uò,nÈýQ©´M‰¥‰šÑ?ƒÒܨÚé»ß¯ÍàËòÍë7Aßï Qq—Á½~¥¾/P»ÚtíœÚfCZpu¼¤>1è9îÿqºÄ´ß Zß (>+Vg.í`ymÈ)iŸ¤×Îy¶,©ò²÷±ùñp3žŽºët™Ï„†¬Ñ^GTM˜‡þ‰žgÍW:=rØvEÒ å¤ŒVÔ ¯À„=àÉ’À¹”¼n þxCeˆå»QÒ}¡Äx8Ìüâ`ÓXçÿÏéô „m¥dûàl› ‹—ÌFCÇMç­’°™£=§ÉŸ×ÃszÙ;ýõÜZàådbfkáÆ`jaeã öÚÔö”ÁÆ\ì©ö«·Üo¤-¬mÞø¸X¨û(k˜ùØš ™?ˆˆz _`oáfÂàeoçà*ì%öô¯r…¯÷ÿœæzÊðW7[±§ÿx½Î[UiG †—œ<fÜ|/^òsò ð ð¿`P7qcP0q`à`àåæ¾^ñ ó \/¿çþ©8ÁõZÔÅÜRøŒì?™×GbO­ÝÜœ„¹¸<==9=ù8]¬¸x„„„¸¸y¹xy9®sp¸z;¸™xq8¸2þ£¿Ë‘±p5s±qr³qt`øslbêèî&öô)ä6ÎÄé_ ×*ðZ•\׸x8¹¹þUòŸÂ¯O K»X˜¸9ºh8:Ú‰ÿ£ù²6.žŽ.¶® Òê|¢\ÿ;Óÿ¼…ÌõGüZBÜ‚Ü|<<Â<Â<|zÿ!ÿLÿKü­£¹¥÷ˆ qðòþ%~­WîŠÿG¦¿õÂõ¿óÿUaæfÿÒ—“»‹Ý_ÝbnÆeagaoáàæz­3žÿ©3s3aKG{7q{+ .'+Q®Ÿü¬ß?Î^›ÅµYrýË.ÅÿGµþO¥È är¹Ü@n 7È är¹Ü@n 7È är¹Ü@n 7È är¹Ü@n 7È är¹Ü@n 7È är¹Ü@þË‚ÿÒÃÂÁ\ì©çS€8¾‡é$Þ®¼Œ¤†NpW‚o„ákÚÄÜÒä mmœÏ­®·ÓWUÆ* åŠø(«Gw¢Jf1JÂl“'yŸé [`"ÉU+yÖÄGâÇ›OìËŸÊHÙärÌ..6‘3-Q§‰!  {Âíg3‚˜A&«­è•ÿ2øjß–Þâ´+£_ša*}“¿úDAàoØœiðvÞÐì¬4r¾S¸õ¨äþsyU…Ìj½íW ̬¹ò1·Š7/Bwð@'#%¦l¼.’¬,”JE"LWˆ"ãêKƒÖëßì¬I)`U¿bÍ~CéþÜRòËÔã’—¡ N·jïŸ~r¹«wJ‚“¤ëŒŸ";ˆøXõG Pª]êë§ï°qª+džÈÐf¼äahÇüNçôeñ,‰4û;ö…©‡‘G0¤~PìïXÎÁ¯SDFa`¹N kÙLFiJÛ¯\©÷¤Ò¢÷ÔèRJ'ì6~]ÜsÓ¦› ¾›¡!<¥™ñA‡Œvmoï¢Òî,ü“yÃWßþ)I”WZúüj}m é$Á$&‘u4eö€wÞeù$àµoL=ö1k/‰}áÝ’Ûë}Ûvƒ)ü ¤­1 GnÒB=Œ?⪧K:¸mÏ=μQÕ¤[!.mNßb)£.2ðëŠxw·"ËÈqG.¸æ{t´JdiÛ¼ÌP剠6Ó7ì½¼ÒiåçR,ߥx£Ë áþ[v=É+»ÐhÝŠÈËÜÅ‚õ2)¾ßh—°°„p!ÅÇ Wï³¾Õ”WôæNÎ_ÿ!Xuþx–kQÒiøõ„¿G­xH >y–63ëòÖ±Nt·gilxAtTV¤þJ"ŸîHtÐ.ØÜ/,‡1hÐ _î#–í ~­Dn©ûnÙ‘ÑD¶÷}Ëô Xèæ˜ð/¿­ŸÂýÌsˆŸKî­_1eáГ°3wλº{Z±ÞÑR÷ð,8ªÝ5¼‹mÔ$ÖÜç¡&þCŽÎ—€®ÇA<³9¦ôzaGië3Ù÷›]¹Úùn¯Ë=HzaÙL¶ñ@R$œÑUhÐëŸZ§~SÚöÌ“ï óÓüYL8 Ú’2çaµéÛ—<´I·µtá1Üj]¢¯tΈüb6¨q·ò`Å<“J*§|. bg”ŠeÅâAjKb!MüÍ\9<áâi„KÆùËnÜd¯›_ÜÍwYq <Ž·ä/­ÈX»Î@ô˜-ajKàE¥ìª‰Š Ä5µÔÙÎ0m§91–N î`'å¬>´C+OÞÈ›‹ZÕcÞw}µß‚ÐCl gP`R€Sgÿ¿JµýM׿º.®ëâyÞbïyž­7}µêÜ«Î*XÍ̸±Öõ„ÌøÌß½Žî†ïë>ÔÈQH4bù{È~ó>r›.£¶ír\Ï¥¡-“1¢züDŽÁ®Ô›6^²ØùögiÚžÚóÔö;z(U‹ÔD7T&“ïrQºAí¶O‘»òkt|ûl’`­Ez>æÕT¯Û„?_¡,r G‚¹l!l•NÆwþ%BH ôÞÎ;/Z¹r%J)ºÚ³L6ŒxsÅ\xâϘµ+Á—4vÝ…²° ¡-vj§VÁõÚ8æ.Õ0—~gÙòêÔs¿Ê [þã?¡ ­à¹;v|µ¿¿ÿ3ãããcðµð'7|œc¥×YSœ$*ÐA*RØ™ tlh†0ÙÊsx$a¦Ò sårÚ>¼™ž¬ûÂî½ú_¾}ÓÀ0688(÷íÛ÷×ÎÎNúúúd¹\–£¥‰`ën8oäÒ«Eóå'X[™B„ŠZÃ2Û0”šé¦¦ÖÐDÆà¯^ƒüÄ•øËz)ß¼ >îòÝ\Nwýî×^²vè‘æ±×™üí#䋇qëóÔç#¦š†²ñÛ»Cï#Zu6µ €lfÛßýÖËa~··ã§_8pÅÆ ßÿ@4>zöÈK/RyíÉ j¡¦ži£ä917Ïã£Ån~~ï“{N]ÿ®!2GŠ£[lžŸxoi´T8yâ¤8Q,ÖJãGFGÞ|òåýÏì²Ö6ÿ}í?f ,›IµwIEND®B`‚PK!Z;´öFn?:Toolbar_Import.png:Åí‰PNG  IHDR szzô pHYs  ÒÝ~ü OiCCPPhotoshop ICC profilexÚSgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ, Š Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-Û cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFaIDATxÚ´×}l÷Çño²’²²ò´µëP;H$Ø±ã‡Ø‰ïÎö8D-L•ØT…§”•$Øil $Ð. ÄvLžJaÓˆö "Ï $ÄØ™†PF!¬í(jKÛ˜Òö¯M›6 •õ³?–XØTêOzÿuÒý^w¿ûÝéÝ«ŠŠŠWm6[7Çq?ãy^#BÃ0+9ŽËe†Ìf3qGZ­–†!½^O,Ë’Ñh¤¹ãz½ž Ã=››‡î¨ªªº½yóf‚½^–e¿àyþ¯‚ | Â%›Í´Z­¯Z,–fžçkL&“Õb±H9Ž{Šã¸%‹%K¯×ÓýJ °ÙlñM›6aÿþýðûý¨ªª‚J¥‚F£Ñh„ÑhÃ0`YÇÁd2Ál6Ãb±ü‹çùOAx—çù1žççyž’K P]]ÖÖVLOO#‰Àãñ ºº:1 óÒëõó2 `FÂ0 %—6àÀ˜œœD4ÅÔÔ"‘|>ìv;4ÍÿMzÄ_k ¬Vk|ãÆhnnÆÄÄÂá0Âá0"‘._¾ ŸÏ¥R N—*±N§£äRAˆWUUaß¾}ˆF£…B‰b±<Ï7°ÛíØ»w/ÆÇÇqîܹDÑhGŽ\.‡F£V«}Pb­VKÉ¥}Ün7Âá0FFF£££R©eee(//‡F£¹_bFCÉ¥ð<·Ûíp¹\…B8sæL¢p8ŒöövˆD"”––B­V?ñõ‹%^YY‰¦¦&ŒŽŽ" &C[[ŠŠŠ “É T*¡V«w#)qyy9%—`6›ãhllÄÙ³gŽŽâСC(,,DII  T*U‘”¸¬¬Œ’{(Àðð0†††044„@ €8NA*•B.—£´´4HJ¬V«)¹´6› ‡Á`§NÂéÓ§qâÄ ø|>466¢°°‰$± sˆ¤Ä*•Š’K 0™Lq«ÕŠ={ö `ppÇŽƒ×ëE__Ün7Ö¯_ââb”””|s€†† ¢··>Ÿ~¿ýýýp»ÝX·nÄb1¤R) E‘”¸´´”’K à8.nµZ±k×.ô÷÷£«« ~¿?p¹\(((€H$‚D"\.O ’+•JJ.-€ ¨­­EOOºººõõõÁår!??6l@qq1d2Y‘”X¡P\.ŸWJ˲qžç±sçNôööÞ·&ëòD(\+…¸PÉ%dRåW'ÿR&“‰ ÅÃï‚T€Æ=näååÁ¸i žiZ…Ÿ´<‰ÊŸF¹Yô?H‰r¹*•Ê¡V«³ç>ÃF£‘X–M `&n±X°cÇôôôÀçóÍæEO×1´û]ØñÚ2´Ä–Á[G”ྠG$Õû‡T"C‰T‘HµZc&“eY’H$´jÕªÔ£Ñ7›Íؾ}û|€§ÞþVô\0 ù߃+´¿ž~ç>hÅ/¦òàœÈ‚ûj&6u,Cñ9ZZZa·Û?*((X´téRÊÈÈ "z8@ww7¼^/</zºûÑᥱ\ì;¿ÎP.þüùiÀ±k&ÔE ²á¼B0=¿çG¢¨­­½IDÐWFJ€Á`ˆ›L¦y€Î#^?y¯ॱoÃy ç³på³ßz¯iQ÷:Áyq¯ž?ùú»cË–Ÿ~HDQÆlé8ŽÃ¶mÛ€#> üÁƒŽ©µp„rá8Ÿ3ï»ðï»ÿ|þÏëè}G‡ÝSÇU ¡…xsú ìØ¶s†ˆ~<‹È%¢Ì”½^gY[·nÅÑ£Gáñxp¸Ý‹`':.æÃq>õ‘ üò­J̿ݹ…æ7—£þÁ9M¨ gá£OÞî^¼MDz"ZKDˉ(;À­9€ßïGgg'·wâøo}hc "ß‚3ºމøðï¡O¢î¡éj.\ïf¢fèð+ä2ŧDTMDj"ZMD‹ÒÜ4¨©©×ëE[[^~ùx½^´ÆòÐ0ApNdãç1Âàû[ñ%þƒÎ·‹°oz1ZÞ^ƒMO`ù£OÜÊÉÉ91 (›]ŠÜt^DÅ:.X__?b####ãããg#c±çöJ¦ê§è çÅLÔ_ ´\ù!B·¢ùÚR´__ ßíÕ¨;·’rs…ˆ¨†ˆ$DôýÙg ­oiµÚŒúúúü7nl¼sçÎnueR…rý³tÈñ'º»÷/„¦·2Ñr}1ü#ô|¶µ7Ÿ.Z~òÉ<õ›¬YºÙ-˜ñPÛpîÏw÷îÝ itttÅÌÌ ÷îÝfµZ­!¢œ•멜k¦_mù}Æ;5œ™ç^ûî{ÅÏ, eåÒ"ZJiêêêhxx˜Åb1šœœ\‘——·xÞÙ2hAF&-™ÝfÙD”™|Å÷üw‰\5z¢¾BIEND®B`‚4662PKaf6;J7 Û¨ £ Toolbar_Irc.png£ \õ‰PNG  IHDR szzôtIMEÙ  3–u ¿tEXtSoftwareGLDPNG ver 3.4q…¤átpNGGLD3J€)gAMA± üa IDATxœ— X–UÇi6Qî)¹ã’ŽK¦@¥aŠÄ*…I”X„ Hˆ‚,¢| ‚Èb ¢ì Š(‚(„ò¸%næcf ŠEÖ("4²¼ÿÎù¾KÃ4O=Ãóü¸ëûÞÿ=÷Üóžè?]˜Ç˜nÌÌ“Œ‘âIÕ×y\ͺªgºÐÿÿ×åüÞÙU-àú€(úQ,×g2˜g˜¾Ìß;æ9%ìoê™!µècj^·N›èÚyñÑ­D BgXÌÆ ¾Cô±ôqý-%LDõdžê$¤ëꮬ7°™h«Ú€<󴲬^YwY¼¨žëÌXfúD…²à·DÉÒWE´E pcF1ÙAŒ1ÓG 1ReµP/*UÏÎU4VÐ+µ‘ÁŸˆ2¹>±`^µ—ˆ¶q¹€™z•(Uæ}G”ÓDtG=s@‰ÌŒä]žé°Þ#¢«ònÆë5Ò×HÄû¡52—1ÝåÌ•º:->C•¯0fŒù¢Oe›é·ƒø_‰´­çöx~sdQ×—2>2ö/¢\wª%º(m¶â!nû2“•p2êdžÅjÑ×Kµøf’X@¬!óÒ‰"¸=ÑIûÑ.5ª*ƒ¾!ÊUX7Í)e«©5tŒ£ZG¬­?/]§ˆçÏR/z™ ïÒ!€ë¡Ì|þ!í“D{d‘j#-Dÿ¾FtLê5†cø°„¨@Ú!DQÜvaf++è˜É ˜‰ëVЧ‰6w:g3Ìè$Àm5Ñi#Ú'/åsn¼OT¥¬³@ƪ‰®‹É ‰Š¥Í§œØFYWïµÆþèçr¢•D‡¥Í·ãW·è$€×¦wˆÖIû8››Û®"@ØÄÂyîY»EÄ>K+¨÷æÍ°FrŸ5ó’`"fãÇy£Ã‹YýYî[ÈL‹ˆ0%@®ê"m9_®¿ýoB¨«{‰ýà2ß Þ…ÈQ²wÞSŽX®Žy¢ Ñ›¢:f¨;+Þ$Cð°é8Å,UZ*¿±QØ«3v—³g1ÞŒ'®ó;êòÜx ÑêùÓ˼¾:’uá8‚½AÈF¾¿?’ìJä*)³‰5̕Nj _TgùŠòl‰’ikæ—åm BQz(ö$éîÚN,fPþ!·`z‡ •ónD„=º¿Õq:\ß‚ ]0®„ã²·ò/âÓ ÷•%^U‹Êwa”:ºÑ⤠Ë"N$/;sn閭syñÍçìÆ‘¼”—d´Û÷ki–®:qí‚]êX-;Ž@̯\0³Ç¡n®~q6CÍ[SpÛêEÜž4ÇÝÝ%¸¬`ÞS×gª`ª¼úÏâO¾¬:•Š;×á‡ê¯P]]Ã;’¾{r·£ºòj.¢æ‹d|™È7ú÷ GFw+¿?ôÁ",ê9ÞÏ€çà‘X2d$3^Ï@˜³Ëá+üŠ7øø~ì·:'1x]fꪵ©{Ò¶sL"ë{–«?¹ õ_ îÒÔ–e¢®2 ÿÂ*]¬¬_Gqnê.E}Õ 4TìÀ•‚‹Ê¢Ôã›e>8†‚ØxEÅ¡pC,FÆ¢ 2#"pÄÑ5û÷áfÎ>TíÞ‹ªì\TçÄ¥øxß´¶þnüGZ}V:¤oA]ÊfÔe¦â×Е(ßæ£žOÉ­ÁÎo´6GkãqÔ^ˆAÁ¦e7U< Þ·e4Ý\\.J§Ž(gΗ êåiÐe'³'xì0pî(šŠrp+jÏ+ã~;Ñ9çQ†–Ò 8!Ÿgû í^pk3ªr]¿Òî¾aGÕí ¾™ùûc®yz¡k€5L‹Yé }M .ŽVˆXDF0\®>޲w¡5#r²ÐœæÏ2К‡+ÂQŸfï =ñÅ{ìZ=±K¦!lÅBÄ%îæàJ¯h¹^ãuÓÇpw‡¶h 4O/hK<¡y,B;÷}=Æ­Ëÿh ÔV³À@<ôõGmàd4$ Âý„Œ1’Çâç¥hZû’tîŒHmó o7ÅòzpøÆoÆŽ+k¾šúDÂ÷¶‡`= ÚtKhfÓ¹œ ÍÆívö¨6­ž.€Ç»ÐÞt„æèÍå]üîÏ›‚¦#9/´óÚË88Éå&× i[ÖÕŸâuŠ˜ÝL<³ªÃ$cñ¹íâ˜ö†öìSÐz¡½‡1ׇ£müK¸2È-Ö“€‰Ü7äihýyN¿þÀX íܶ0Å¡áC‘4„}`Pc ­’¯ì÷ìC7^ë·+¹üað Ï+›ˆ³ºp¨¸¤V/àjxDqËÂ…@ _«1@“Ëäs{oîOš 耘(à“ @*“ÃìÁ½¥ï#Èu>ކO®¸ ËÚ¥ÀÅ,ÈÃÀO‹ }ü8Ö¸ñܾ~ýý‰–³£õ.††"sÆL$;Ø!ÅÖ)N6H~ç =Ióf#Þt4Òg9 ÝöM¤Û1oÍÁ§®öH{Ϲ–ø<2®qEøÆ‡ K,py»Z¿å+z7ð ¨gjcÑR„Š ;$úZÂ?8¬á Ç·%‹ Õ ø¼¬|gbî¾{qiÛꘆؔôƘÄô‡1‰iMщiͱYYÍÑI©ÍщÉÍÑ[˜„äæ›…¤æO¶íhš`avÌÜܼ$$*鎿¯oK˜ûÈ âà³Î;#æcÇjGDxXaÕrŸ¶wÞ1fÌ~^w³ºŠz®’…77·Xggçt‡l[[Û|›ý†]¾•••¤c‰L‚‰‰I²‹‡ÏÁœ¢RíC/Ìq~NsÝð¾w òŸAxt|ÏË"Ã/¤µE€$¥Éðkh¦ÊX¼Tò ¹ŸîOUãÁj®|®}UD†l:Fí4I‘Àl$CŠ&?$Éѧd å—äé’©Hj%i“d/.ÁÛdHÛ$?´WŸW2üü’(·DÅû@Å ÕçJ†ìJŸKJf¤¾ Ï“á'“$©ÖÔ¿@R²ÉJ¸<3NÕ¥ïeQ[2¤`ŽJ ô™+‹þ !îãªxn—IEND®B`‚PK\f.9ãŸÞ³‚͸Toolbar_Messages.png¼¹spæAÔçcbÛ˜‰'¶mÛN&¶51ŸØ˜ð™LlÛ¶mÛy‚;óîûnÕnÕVÝÚ»{»ºÏ9ýí?Z§úW¿úD*)H"}Áÿ†$-%¦òדþkp0­‹·÷ý_å""­÷·øÂ™EüíÃ;Ji»€Çƒýkà1¿»’þЏ®âZ®ª®ÆÎæ`Âf&æ¤ÖÎæÎ6.Šu$ ``áŽÎšžÙivÎYßQÃpáúÑ6(Š¡ZJmHH=v=* ÇîÁˆ.g Ôü4Ý-œƒ¾½Ô @&fxtÕ/|¼ØLØ §&›È¸È0±è§Ö÷×[÷Ì='$¬Ý’ŽŠ‚'yi˜Å8EÞ¡3s2w¹ÅÐ’ j#·Íeã¸Ä|‹úª/w咾σõiYãiwë áËÙ] »wø[yªË#8W”ƒ¦ž«Ö ‹óVcu­Í‚ûþ÷G…ǧ]ƒäÊûŸKÑíš½^p#þ£:Q8QqóÍ î7õû¦¡>*¤fƒ£ë¦iCÀFê×Ïûó1¼êÝÓ ¿"ã³€×/ÚßS\šyž‚Èñþ·z2›IO+`»Š›ÑàýãÄÕûyíöEC—=¼ÚÄꪔH÷h`CœÓ[±çF`d SUrh7EK¥¶ 0§aÁDqˆ(5°ºPpþbû¦8Ò+jæZ†BH%¨æ[!Ê©Ûý,p¡Ä ocð_T’váW¿üg”\J°øv\°'`.a: 雇G ¼2©Í›+‹T§k`g7 ÙáýÖ^¹±° Î`¸8zwŒ‘®.H2È'¥y+G²®´E•wan2¶oø,ƒ3®ìÙb»óRÐ @@.÷ò“ŽC€w9wú€<hÞupH—ÃÒðÛ΃퇩Ÿý_óù–7ò‹Œr;ãk³¯ò¦(ám~„ïÆþ³’pøî€ˆç‹+ó†ôï$ìzà„Ói¸Žæ³ÇÏó+ýrI(ê¾î7îöY}³|jvú›¶Rv6"¯›£ÿòìÿc¡)bÍãZ°³QSý›æ~Úk‹‰Œ—ÜN¶#·ÉE.‹§þ3:MOªÎß¼1Å•U ‚ÈhP¼n „{-$}Ù¨â°?m>“uû`àlmÁ¤"“!G°¥b ÕýÔÛÜí¶¯&Æì|çÒÛωãb¤ÛÚˆt\¸ñ·Ô΀,×Ù#gÁvWyí;e辶Iï m¼üWƒÓò Éi7®FŸ@«ËÞ ¾× WdäJ‡L¢çºŽ…®æ™Åú Ã q³½ÀwžAž†Ï@ãèüw0Ý¡U’ê¡ÒÆR»žUÙçH_žÐâBýîÔ¢5b¡¬LÝi½níÂ×¢•U ao‡WuàÂdÑÊZ~Ž·ÝêâZ¡ø] G@ÉÀcWBV§¨^µm$š±‚o7¥y[3‡ $¯³vT÷äã› *@ÂôØãØÖ(“W{#O„M[âf;S€D'¯•Þ^íÈ<²Òú¥®ML"ï½1Þ‹>~eaRØTÀúÊx­˜Cf`ÐÂV‚fùXÆVógln»}NMÍøº·é2" ïš Q1g§”•ïAºêŽNÏüûÉC­ âouB-23ÈëP0G]^È:^HÜžãnÂ>Ÿ°ž ŒL *$ù¯™‰%Åù4Ö™uZòpeêÐ! IM÷žxa÷ õÒrì‹zàǬàV(Ý÷B8œ Œ¾­?Ýú2|Kúg¯ÏX2°ÍؾVmPד}_ ~8*²‡­~س[±CV Šõç]æ‹6f~Ч?¤¦%Æ{¿Ølu½î-GT½£§½[Ñ~M§ÂEYË ìUö®+oäÓL¯”/‹JjqÌÎ¥uB?O&),¾sˤVÇÍÿB¡–1¶ùhtbµ´zäsrkE¯cœN‹˜Ô÷1‰gvü‡£ŸR!3ÔåÓÂvy(ÁºNàWÓ/"¾ª¨ããñŠk˜„¥Õ€PÙ¯ˆ.Ø«Í.M¸D°ã°oY’¢ a×¥«ˆ¨vyðJ à¯îda.Ôf,"f¬"ÏJå Ä$›0nšFâĈïþ.$óg(Jµt—ÏÅ¥õ=®¤±a³„En¹æß\Üò‚­9jƒ^Ô[¾xÈŒ”z·îÔ™5üN&Ù¾ËpOÍý…fa£•ì&Út·f'nI‰Š*ÍTñDØ W—‹'[Æø:“Ê<«ß*¼†¨¿a¾/ð…î¾¾º—^Ê}…”îË4“Ðt"^ß80&¨H×ÿQÑ2fMT¼!½BW,‚,ûO/M¼Ê„’ÓÆĆßAîÆgˆ÷¦2ñbNWLÚ¢› - b ‚˜šÕ T“Ôä¢xf½ç<­ H\Nž•ü‰¿'pO‘¯½ýˆpØágK:9ì’¶ÄFwTíˆsêäÔhþU*Ã)<¬6V–9±µ'– ¡e#³ðáOçÇá°"KËëìÜ+næÜa8³n;©(ilEïÒ]!%'²ìJýÕG¸½}‰†…×6Us ði6ÁVB„ܵTzít3Bsf!š)5o¬ëxÔ𕢄D³c=Ö®Xا³cÜ>Ûe¼ÂñyÜo¹'4¼UkûÂIL ³œÑî¿£•¾›æ ÄO´F¨üVMDcSËW7¯ÿ£‘"Ÿ*ˆÈ7’<3äúä¼ýü=Bƒð¢ ¯4§pÙ“F !ÿ÷TtÁÄ·Ú(ã~fáþ¹žòY0T §¨"²xÌ(M¬L͆¤nD‰Cßïün‡4Ú4 6¾ó]5»r: ÞeTx¬<§=½/BÄ•j3Îsëå'Ê2àT¼íLwPªÀá)f䎋Ҭü…’/¾õ‘6&J·„y2U!r(6&¿†©èµ¼ E¡@‰i“¤ñ³Z\ðúH{SÁÿç¼* ×'-½…·z¿¿î)[w€‘WÍßý4ð›ö̾AT™œVMN²5¥*é~';?BÝÛ¦„O‰g›ÀhÐQž¿Þ¹§ó k^gú—2B ü@*ÍA_†nù~£YLS«ÜP –Û“·Ão¢ÇˆÊHƒhFp–Œ×åvôU£~…“Ù·ò C_Æëh ¬š|n)˜Æ‚ku[¡Ø ¯ü$3`›Cx&3Òµ+4y˜xßêQE=ÄœÌfWÚß_ÐÄyâ•5e Á¾õkÚ⤴‘{&Xj e[¥GêM×»ÃÇ…b× È/k,C,Ø™è¿vš~oƒÄj ËPÓ:†ÂÏÎÌQˆøf‡¦¼StÀ’X_o%-UKMÛ’ÍEK“¿f^÷Ç Åh`Á±¶_Ðÿt‹$‘%{¦]TEDž.1S"ë¥Q’ªgd[ãÂwûµÏU=ðÐöáMcc;Xc%¦Scú˜µ…fü–КR¼Û…œÃ¡Ìv3\õp5 ¶""HIK"¼„KãŠåWGå6ä Q šP¹Iä= –§LN­Û—ÙeCT7 ËA6ñI#R#(òä‚ÑÙÒ+Ž‹rUÊ«€câðdËòâ/Ó縖gž™n毭’bËW:þ—¿‰ŒÜúÍK_sÔ8²Ô´²PùÈʾ6/D;—уHoò)ÒPV %*ßá¢;®+,÷¿,¤{›ÊxvþÐÚzW¾s4‚jÿþÎFËaªkr¼Xýg^Tš ˆš—}ÖÁ­ˆç ÅŸ- ÒuPOwpŸ&þ±ƒžíji_£ÿc!EëdÅåÆŽ°,ˆŸ÷ÛÓ™æ& JÖó6Z°ú)™Ê‡ämú†ùü%HyéH*N´ÎøÀÐ8ÓS†J´œ0=·ÔÉWcy …Ô«”2­&) ¡*Zª«ÙvvìÃ!fÒ¬|°“ݘgi£Óœç‘ä,9Bª`:ƒ,.srªMÕÓWè(†yŠ|€;t,]šÛÜɰØäåFåu–é¸È¾¨D¢¢2Íœ}‹"èeÝhãw-©’kÅkx ªWˆbMÙ¤¢±U­•”t ¥UáËPRt‡Pò£”ôÏ!Œ ª¯×"«ÕIÕi§‡ç¦Ã߇RW†:]áI±ÐŸáß2%É>Ð(L÷¬?zríOF¦Ö})@É`Ö=Ò+f– ea»Ä¬%ý饊>O80êa¶üG|NHâ‘ÐkZ³æÏ ,ö»ã"[¿ ëftødÝ/´çuÕ?„cYÃjGSGšü¤áÍYˆÌÙ.è SùBÏ#SF$Ù6H‰ðPŒjñ¯™Ë»Šœ²´1ØÆÝ)ç'ðð}ƒ¶À'ÙûŸãKKÂåWxs„WºK=ËVåÅj½ü™ OÉ¢9³)QPzìÐv…½6/Ù ÒSðì«5Œ›ô&€Š?sïðÜÌ7!¯ Æiõ-q87È'—RÌÓaáÉìG©­†8;<¿:bÿT…û–ΖUÛŒ—)tƇåZ­k› µÜ55äÆ(  ÑUÅl˜F媸|‰ƒ£¾ÁöþŠ©?êõ ­òl µCu¬ŸYä!Œ+3˜qš¥úsDñ«^\†zMŠ-ºº-Mfšn¶¬³ø¯Ôa4m4úHÙÏÞ Š i‹Äz‘È}o6@ÌÍG‘ßtk§u¸å¶7e*1Õþ`> qä^1îu”[b³xDáD`}ÁjŒ¨Ox}ó†Ý ã£ÃÚÞ€žÜêŽ!§”ÜóqÖ|ÑujR?Ã@¦™s’Q Aý1tý±3æª'žwn¯x÷@%î¨ØÒÑ.pÀ3 ÌêªjÐø²ºöj V4±¾£Ðp}ÍáÀû ¾yÃZ„i:¹Ëúæù%㣾ï.÷÷¾ªýSÔ¥aª®æ/ÍâëTç:-{ š&>gÚýEh3½fÝñ¬ö¤¢'¶ø„yIˆ ̤ß}èn2‘‡ ÇÞF‘\Ø5r͆{¡ƒðov_iÖ¢¤'-FVŠ÷£–Ée·wó\H˜F°@ÙfË–Œîì1*E^b<±„Þ—+õZ+4þïÒ½¯&»ª›i‹ë£¤ÊD…‹2£/#Ïú>(ý˜­´tTtÄ‹¨ÅÂÀ‰;ÕJÎÑq’4rŠÕ™ŠS$uCêÝûÛçûv¶÷#ã?I>˜IæÁæ+ßÌ3$SQBé³ØÒ½Ñk¼{Ê«ïºO÷ö÷k³×U¼öë±]/§5žoxÃ}[Å/ã›0“VâÍ9èÍ5úË: ¼'”ÇËä—ò(Ë™¨+ÐdmÔdʤ,ÛX‰Ž¾˜¼=ò :ðJ¯hÈ9ËNF³ÙR(&pLëPF=±!š@?(3j:´(NÌÇàÈVí34ö³ˆ^‡ê¨Û’»ØôåÀïù ¦±ÎŠÉß9ÕâzÔéUÓéÍ×ð[¾÷ÙÍ”Ë9|¿ØÔÿѲc§o¦ Ö†,|V%ûóyÈš¦õ„KúIðÞÈÅÕTT€ëÚÐJ[IKi/œå(±$k˜Tsá¢öÔ*z'‹õl®Â¢¯T¼i5ådQX] 1ÓÝŠá@IÔ>¾´ôfNÓ¯#Eö½^ÜCRw!Sb¢?\+1Ì­ }C ¥QCßÅL-…“å6 ÒçÀ9³šÞ‰c׈¤NÖ|²ù _îð•ó„çCѶq4ÎþŒ|lñ‘˜_îRgÖʆ­¦y‘r±ZþMÞ$VØÜ)jñ÷¬"º ¢äsT~垃ĬîÉ!oÁZ~mSþ—™îM š¿q¥-„ªZ¬p¡b¢»D£¥f¢’›D¥=e>¾` YÓ·$•r×»´bÌ3€i°+fÐ)¼´š+÷trí ç%‰HJb­»Äø}„¯ýwìÏiÊh­/cP=NSe¶Š2(cW#è{|c?¶#3±}›oÃW4иã׃é©ò¶<4NM„6B¿pkú«„Ȳ"ˬ¥šHŸâÉK·ÌÇ @’nN4bÖåó¦H$ÞÐå,icKùk0 ËßÙÔ•ŠQ/z–Õ*K§ÞÑ“¿´ÍÙëo׋îeRü´Î‹ÊdîýÑ»eãÝ[*ÈÈñåðˆkõÀ 8×Öimwµ—G£„7ýºjY”%m¢²}Ä×c«?ò¶šÒd›;Rñaz|ϲò„¿¸HƒÈ©ëC‰+µÆ:I'⢳âïF«‹nnC8øó=^;(Ö®·îâÚàâªÉ%m§“:ë·ÐŸÒª¾ûÑjÉòÑöç{#»ö:†ª3‰±ê¿×wQm¼à×&£Câ©xb¯ÞÅË2 Œ1 ÎÜXŠ =Y”ÅDK)㼿voõµEn̨f–~´“* ™UõÜx/ÍòÁñ³Ìܳzæ¾ N½Óê(D D+…#~¢­ ù©²ËCÁ©Dd ýU [>zÞEc]Á”0«ŸÕª8C‹&SÇEÄv.IEîÒsmró18zŠ5G^ƒ£’•Ð’£îDKD½©¢‰~\œŠi¸ÑOx7ʆ‘ŽâY×5á÷Ëu~Tq/«H×àö?ý~‰g¬¢\ãÕ *6ÛK9ËûZñm“éê-‘>ð«¡»äÉ5ßâ7¦[9N&"Z¦óL…0ËcIïÁËc¸N C×¼!@$7ýJ3«ÀÀØLRgð!Û(mK¶¸’feœícÆœ#ý‘™§¸B:*É4B}ç{œñpIÃu´‘Dࢦl.£WëþI˜â÷$¼Ln§«ýÈ•bß;ÕÍ=§S.6Hµ&b©˜!ÔÉܤÍâ1²NåÐ3ÞÁ˜ÒÜ1Ü‘¹ê>•-ét³K“Ógq™7ü® j‰GUMãó»ò\¥ý7ÃßéøéèÁÙ½%FfèºgÌc Ff¨$«8$ýf…/\­Rÿ„²ÿ>0BÈïð7œ+ëžû'ý]Ñ'–g«Õÿ(Œðu<ãw$¶hµŒý󲇉>ÃRÍ ÒR©lÉ_É{óoÔ þ“€²¹Ÿ|?+¬šÈøs†ùøý¼†Ö† X,gµå‘ åŠþY,®BØHa[dÙU¨x•’—T^ž†þ—gÉXv‘s½ ê†PÉÝuû~µK!ȼîša™fµÏìõ×£%x°SÝ´°<@߯ìh‘3¦hܧÒI1t0ô½„0K'ÏðÚ‡›.‰Af$¡4;¡½Ë©Ô—d,Nv¬u„›†Þ—êt’†™&Ä7il±™Èãÿy•ÐA7RcM\rÙ‹7X„à•¾JŸÑjvšX:†(22VâfzŠ0®úZ¹{j‰ö¾Fy ŠSõk‰Î¾˜µ@ÛçFn¢ŠŠ“t>YØ^ {÷ãÖ¹†ßò‹¸xZÓú:â3#fªâë×z-§Ú¢˜&Z¤X=rHbgж¬’y\;ÝËÐ~WGßÚD&­h—§c95â†ñmŒx‘{^8ª.X›éCŠp¯Œ(ÅÉ’’T€ÁÁþÜ­ú oIÆ=Š0#3\µŒyò,erïtgh!·N€&‰MÐûá´_!nØã5XÍIŒ²ýÐ,‚þZ ±ñœ‡|cÐ;Ë>‡æŸ»º~g±"9=ÈëI!žîpØÝÖ&±Šë· öèÜQØ¥3ƒÀK$=ÍšÐVÀ$ˆDB\Å5—µ;½Q¿÷ŠçU·IÞ@¾AÆWõ›Ä¶NÇûây×½ 7:}åéñƒï4¬ÿÒ¹÷¥ïÒ—pe[·ÇÀaÄk;"ðbz¥›)ü@öЋtzQÚG©Ó?‘¶ú<×Ô¾ˆè…}¦ËÛö|*ì÷7]ÝPŒú?hÊ´‚îˆ=Hî/󾮿óN,TÈàÁ_¤ÔA¹´Jén–2”µzNP±Ïnû•ø AƒhjM ƒN«½ÇNù•%ø7eè- ­ù†ø"í5¾‰2úûƒû¹ú†¾ öx˜*Gy"Wט(w6z%8Ábî!–º!E…÷ΠÚKš¹ÝÞ /!Ê"¤mÉo]“8Bm–RÜb~Ò‘Ý…LŠŒnݦƒé~DЦ<à‚ë•h9nÑK SÜeúw2âÖ)¬·ºËdy 'Mée1–D™ ×1UbO6ƒûùÿÞ ²ía*5æAêÆ-‰x1й§'εMø÷Ç×o•|[-Þ ÅK ›Ù8“kcvÍ Ÿ+ÐŒþ¹f6õfº—õ³ »·KV…%î{¤sJUZçòè·‚B+ìpFÛ Ãd6Q<‹rQ1Ÿ×’ˆýC‡Ãî¢É§úLfAˆ"Ù õgÓøîßo» ;Z”ƒÖI(:*•M³;„“ÌK‹¾ÆOAB Z˜ZÌ`S Sq™yéÈÌÃüŵW‡;dzÕP½*ˆˆ,€š¥'i¹»eíÄp«]`yG¦kgÀ¬u²\Í“Á?~Hw8€þ>›@ÛàØ‹”Ý8]Ç(ÛÔ…Çb©-*7*Ü^ù$ÜKLgx¤!@Íc üaÕƒ ÌA×õë¸òÝ2£äì™<¦ŸÍàk|Q¿òÎAKê§_M°â*[æøVU¦ýe¼¸JÂ8šNrLm¨Œ”‰~ÊŸ›Î¾$øÙFyÑ%C‹d++`-/þ²‚3ßM@\çMèöp‚ï~Ï ŸVàmb½}‘ßoõ<ÑÃýDšŽ’èÝ¢&~gÒzmÙžê¹±°]W]ŒjBá=ŠZh_´ª¬f÷G8óµŽ{ñ/­üÁNYóàr~§k­T‘¬‚ˆS¿•ɘ±MHbÿˆ§ÒøíN·÷ݽrŽ8Γ{å*û5èMKÒGSãõg%?Ñœn©^Ót¼í}[¿iÒž…öIØcY˜¢Ðk5X…U„—ÒoØ…_WÖ‰»„¥àÖЧò)·/³p–7ê fÿö¬WÉ7šøf:}Ob=f&Ý.%bíäÒ<›¶dã®_î¼ÆÇVÁÄ1ZtCkŸ%óÐx Í ¾’Ú#ׯÚÏ›÷´¿ÑÞ`./$£ö“Êh%fSå(v¶U6–´;@æôšNË L!mÿH$÷Èl½r÷=nÚ§ÞzÉŠáÜc‹;:®¾¨ç¶’{^©ÆuÉeQQ¤Å}cŠI¡ÐuP^¯çÞPÑ¢,ÒåÚ7eK«õãy¨ øÅ©llܳ‡ùâBÄ)aCõRMâÏiÛýúgöšš%|íïñ+f?/‰x[«{¬Ìv¤áµŸ¢5ÚÐã¡/x¯´÷’4óêòéõÅg>µNðûs¼øÇyú +5ÒI„6+5óî¯(ñ ã‘Ü­§·åíX«vZ½»üFw’áK]KMõç}E¬eWÔèÄ‹ÓGËYÓTÿ NšÞÛ“Ó#^–÷ÕˇËÍÒ/ æJê›wòu+ù»`žKñ JÏBs¢ŽÉMȸ¥Ž©ÐÃäw54üé}³‰ºZ¿l,¦—' bX‰=H…£`ÐTY…RúþΘƒ×?p¶ˆÓþޝðK>ùâŒàÒSÑjç¦w;”‘Áheð]ØCŒù’Ðn¯¶ËM(í¬½ ÚTÔxoÐÑs¾ Lž§M²h–H&`½{@öAÖ³¼"¸ }ù‘'ÓBE¨E ëlÅCN%úeËU\)½¾BiÔ] °ãÉèø _&‚ØÁ"¾t!ánOµ5ïÉf:’Zü µ4Í'êú9<Ò¾±n xä_/Qmx”f[ƒµ*çõ\½ÈszŸ7p`ñjAyúHôÈ”3Yš`ïÂ6­]–äŽÖ“žr-~ïÛ08ÛãXP¸#ב–?4ÿrÇêµÐ·¨~“kö3ƒ4Ãjyº…Ä,liT]x‹ÖxÊ&ÕN´BC4åÉx¹‡L¸»ÜøªkFš!oÆ`‘6ª“MͽrÑXéà0,ô:'îÊGéÔV×êÜ¡â=¤}ïFc˜~ÜÀÖwiz`Ù¾¡l=Æ/ë2݈ ñ;×u0L(Ø0®AëØË¸£¬l؇covs«ÿÇ$\±ÒFw©mÚš{‚$Y/HÜ®mm¯ gÖ7·Qš›Ù"´ ó+›ºÛYÁÓ7$ÕÐÁÐó äòÏàï›”=Ó‡°´$ªäÀoQB-â“õ-ÐMf±§I6y«ŽžŒE^pe9ÒuM¢¼ÊlÌâIý‹¶rÑNÈÒ™ú·ÛîI8˜ÑlOsB«BkgÔ¹ó»ç0Y´W­Þ;ƒJD/Ç'¶\ ¾ÖŸ¿Àáe¼c’_ç†eá#ð•åÕŽìN‹´N6õ3’ZÀ‰ «¯Ø¨®ÆiŽÃ;j±ÙmpÅå,Ö˜•¹oï;Ÿ[pòzþkò³ŠÇ?D‰Þ'Š!Òc è; ³¾}¯ Gÿ„|…ƒ¡ g•™ÂÆ–ƒh%“™VRd=iÂK õ'VtùŒÍKf,E/•Õ¯6Mƒ(£ƒ«$ÝUê6 ôìHGSÃÆçScÑ71bÓ$kó8Ü„r²ƒ`J+ÞŠÕ6ÑcÍ]=ã›eÉl{8Ÿ]÷q‹¶¡­e|‘`Gø _iô•q@ã¹’æ,ÀÇ\EfF¢rÇÖâ’™JùÖ0¼Ø|äAâÄ‚7§J¥ð3çÖ´ÞµSa®è …šq­ËÊZî0À¯3x+b°+¬´÷’ìû^J1Q³œüúØ8.ö"Ù3tŸÄÔ¾{à°•„mWêO× ÆNNÿ§!²ªƒŽrRH2Ÿ,ývïw=ûæI²®| tÔaN¨¬ñÄKˆ Y#ÏòL±$·´N…ö°¬tûÒv¯—0súóäÙ?ÓkÛ%Í&j)ºüÁ‘|ˆ$0Õ߅…fA@V ûÌüñEò~TõL©R{ðßÍöÐa:óBmlµÁ0¯Ìê1ƒ&¶5k3uUÐ\P^¥b@êÒtL·¢‡’›i8ÃÙ›ü7b*å,æÙÂí¤h=ü Þ”zk^\”ÿ—$Rö·%ÀVJÊÛfêä%c/2Ff:°(Ý솋ܗ__Øy¯ºÿ3pØYo7àø0ìÙ˜Í8Öà„Q4ÙrC9 …"H3Ö¥ØXÆÏlQ;'5T.XN-ŽO#6É~·æ‰J¬)Ç<–Ã<*´›‘[{×*O¼Ïú2KîWgµÓ ͺ¨¸Rý-”‡ o¦VKG]¢lÔJ}%9즯;IÏO΃ 6%Øj`Æ?+¿”5 I"A¤5êµýÛj yY:º!Æþh§!9˜1P B:ßS=ßK~ÜÈlvNÕ271¥V±¯¯òQ—˜n²(e¥À²A'‘¹°˜>ûs¸' $äÞ—æ§XëýЏR‚ŽDhubZ©€+Kuðrþ / ÁúÍ–80vô›¬ŒÑ†oÞåƒaÛYþÔܾrCöŠã…™Nƒ“$_…OK%Çs:dÇ×Sø1œwµï`&+LÒˆhÛrœSË­œ™Ô©ËÇ“FÙiP·2sCWð ùUÛõIºïŒCÝù¸M[ åBÕ‘Y‘ºéL;±ˆè~˜|·ö–ˆÍb#ØM¶ø=`§6¡6W€£®šÈTÙלÑKÑV‚)Œ"Ž9<óŠHQÍêín˜sã"^š@‡êzV+9ˆ¢ÿ)ÚnUBà{-:¬ éIDÿp¤ ÇD_&VCŒ½T8‰ÿÍùö´œ!”S\“ЉðÒ¹vE€ÞÔONF!úk³&‚o— c,WéMŽø¿,aZ}MfæÚÂä™ëøc#è‹nŸ-½›’„ÂW±äƈov³ÎxÒ::õ””Ú)«2 „)ÉÓ,«^êõ_ƒЏñvI®P¤ñ&­6ÉhòK°¤å Ç£|× ·ÍËÜý¶™"(á…\½ýË.­£…Ël% é¬î3Ö“Á¼âØÉ·ëaѲšÔ9®úh\ìÄc‚5ú…¾ÑŠª–yàMh^=Ç ä&ÂæÂý2¼)ú‘° '(õ¡ŒúÓ¢T5~ðãçoÖ5.ÖgHp Ôüñ”U¥ÔI¯&kËr¯OÑ'®¢ySõ@‹!.Ý¡¹rº9Éy~Ò^ÿ®¹[É”s°2 FÙ…«¢Ú•¢ÞUßï‡ðÚü=ɺü–ÂhÝí Q™´PÜHCÚÂáúÄæ.$ú;“õ(‰wG_S X¥Ôqñ±²˜Ë%˜]…´ÔOó+ÆÏIŠŸRù2Äh g‰ Y[Ï$V4ÑŽsòZ¡48Â+´²6©IÐ!5œÊ”ߟw†?sÄ-tçæx"ðµ${Šþ¤j Y …'v ø?ã>¾uÿ>s¡Ê_ùþ0„½Æ)tÜ’ÛùxɯúÕ 5ìOH zº­ÜFëj§ØVz_,-ìÕ~ý;Ÿ®Ëiÿ{{V2¯ Œ¾Íí\ĉ´Héÿ-°yÿ-Orp{ƒ‘ºHû]LcL%:ŠÌR\4û[à/Ú(!~]àl9]ë‘ÏyáÝv½À@$q𠻬¸Ü‰Qm Ók<^Û¤:®i¹èžÙyúßAZ ÒØ/‹íB5)…Oßq™ÖÂd´?)—MæV. ÏÕ€è‘ötœï%zܼٟ»£»2â…¢–Œ8–ÌÇ&Ù\‘Ç~™ƒ;ŠLûø¸ØïÚHéy\™Æ»3äˆÍ‰üüdÆËélodö4Ùñ/¯<üo§ÿûôqnm„ÉB!ûÿ.~ "™Ø¥ì@¸Á¬¼šƒƒ£Ìqä¶ÐШ•V«)¶ŠR±sbÁ Ò!—4‹<«¦dDÛ…5Å¡*PfHÏ~¡J<›ác%= Ÿ½ZC/"?í6 ›ô2=.Q‡6eSÚÓ,R&eAEoügúÅo •?=86}‡ÉÁè> DÝ*  BòìÐ÷y¢z“®úŽ6"‹'Z3'–è«fÏYýwšŽkë%SÄ…Û4oòÏsÈižŒ6r-t­Úöù„2Î4ÔœÑ)ÎcM@{ý›i*ÿ`5oEH¼ÒGî‘jEæHze`²qd%lj„)8îXˆÝÀ*»{Ë=±¶"}ß65[_¦2‚áu*K°ðYj›j¥Àû‚¨ SŽbHkRD§ø³°é|È®ª¥µ åô°°5‹“5ЬݾE¸ŠºÌð'l\ÿ'Á×-Ó)‹¨_ ¾7>üÿ%Î>·œÕjfUþÇu(R'k$Lº[òLbõ?Ÿ »ânþ·ó¥fãX/Kü’ °¼tîsNÃì]t®¯)ZØ2-J‰šy;­°ˆD4êZìga½XHv>Ü”'0RU˲ËkΉ€ñ£€»Bû¸•J}Ê_‡Üo‰~×mdwõ3 [+ùÔÊØ4Zíh›w„ï[k®ó''ü¹h˜u˜“@tsJ¼ 8î9< ó5£G蜮ýåOûkÒ›x’Jž3A¸òÏšù v§å"Pw"L5Ú¾n®"ø¯-ûÅ´Îh~Ø:¹¶ëSÕ˘JDC¼ˆoÁ“ANø|·FC‰r]Y˜˜†X°ñF…çbp…ú!žúAlLûN7Ñ xK65½,áT×òйJë%o0L’—@¿üîžô„ÆÊŒ¾ÙÊêfaøˆ¾ìj¥YlØØRf?~cd—t9óoÄò „nü…ùrfÂ*ôÖ¸.YŘ%ö-µðrÊì0±™ÌR" ¸+¹úÒ" x-­ !?ÞúÃÖ ädjf' SUÊŠáøã'” ƒ))•g~G™5ŒêP%zMÈŠ$2e£N-mJˆk2é¢-ÃñWÕòÓðÓwYRËšÅÝÑ#d}¾QþйÞ%±Ð•æ3ùÞG`ªÃaW}RÔ¿á\d 5„ÞÖjK]ûÇÎÐ=&ŠªÔ’ê@…%ГsMe<ìR _z°ÊÕÄ%ÛR›ôE»4c¢j¢=Ck¯bT‚J{².bÿJ¡ÍÍÃ;éƒ<¼iU‹Ý4da^âM¡ÇHÏs|Ê©~l9‹a©DrÜwjÏUñ…ýé& óÍ ï3#ð0VïÍ^†·õùINš£·#ŽÇþp<÷ž½ÐÉå})ñ7<غÙ4Õ’DuÕÌNÓŸL.ýb&ãâNÄ÷ÖM熫ízÒØ3—(¤$“ $E’ã£ûh:+ Í6Mi;ZêÄ­E.ÿ1BËNØ…ÿ̹ÅVþ‡‡67Gk° à¼"?" u;Ÿš%î¥Ò`¥ë?Ä퉅¹3âçUò‰«T+ж+eVƒgþÜ£H|:’lBš57=ý|#ûªNqÓâéýÇêË–™ïÕO?™ª—NòØnΦÛrV‚s< 7ð¸ËY¯ÍB¿+®Vg×ÿ a=„ØŽ÷XúX ô^¯7® ÿpšlîÂ5[®*_ü¯ýŸ¡9–½T>ý[ב9CtÅŒ#ëA¬h«7•ÕÄ–+—,*—´q}–'œñõ³Ÿ-T“ÏX•÷Èåf§ Áy÷‘y*Õ4¹whÖ†<xf·‘¹§8`Å¿½^7ïê{!p” -“ ; õSþqÄ.÷Rr™€Âèù¿BÇ—ÿ>6>s÷7äëøÂ÷Oú»¢{à `ôÿ$¥ÏEWÍÐeø`¥·•ÿõmf—L-Gÿ$o¬ôÖR«Ù)SFéQÅ —7–ç?éEMÍ1,G¹ÌömkÇŒÏÍ¥y´ÇžS¹¸·2Že÷¿î7шšÍLÛ>õ¾œ"$ìxïû[ª'†?u*hϤr1´;$VÌ«xRN^`¯‹ ³]ÃF—‡øH>LTø¿'\G¸œê²sŒ¾.-4yÛûõI¶á?©Yé-;ŒÖœP令ß@w¥Õ±¬$šÅfŒâ€ÒFŸjΛëËe;N¥d̶xiþÒN'.È,²ÚßV(ž‰Wl³O³åZãÃK'þAIÆŒÖqÒd9"ãSæ’NR?®â+ÚJì™.ùD¸®«c¶ù´5¸‰•M=+láÜ=Ç,çr¸OJœd$»å­´Bè¼ëðeÿ®X·ÄvI?ád‹ ñá% Â[ Èu¥Þ¿ÀïƒCû®Öóñëg]G%_nÆ‚!ÕÍÅEuþúèZ=y}rªi·etúTˆ¡2]+ÿz ÕQÔßOŒÎsŒë~r5Àñ×#Åmº#v"d¸Vó5Î{_Ä[”|B€Ò"Upm>ØßædVCv€#%­u•m‰è³7S=u ®sMâX%ß&É`4¾ÕÛ09b0Íú޼Åü˜oð§w¾¢þˆÍ~:”ò}äl~úÍ.8†Wgˆbdã"éN0“ˆd4O&&¥é:¿Ú+€§ÐÃ\„¯G&hôÁT¬°€½ÈÐ/þFÈqNËÇ!è ˆ±'ð(ÀXOÛ‰—móƽ~èJ@êÄ:Àî욃‰LлO*èBç?½rJÁMCÿø¾–’ò8åŸÂ¾÷Í7°ëö%6ÆCP朳dãýþ÷¹GžoqQ›bW”ïÓÎäÕ‡WïF×ÜÛ“õv"j<@­áª"T[Ó·DŒ|lXr:ÂPòòìžÕ¶°Û™!!†øc ÿDÓçO¿ÉcÊ"…ÔðÒwû1ÁýÝ#œiÉ!ÍáO _ÎÇʈ£k\:ì„t<!æÉx¥_žß‘vÜÅ4¾ |7~uîÇû¾lÜ#}‚Knçð+Þt¡£|¡”øBmËß\Ê¥¦ @ë6‚º™pÞwùg #Ì=iFâÚM~Djo-b=å¬esâ¿Wé–';˜K¿ä—§(}ÅBfPF†3qW/x";2$‰˜…Ópw¬K"Jƒì¢ ôOù¹’™­¥Þáê©¿&ªç¿ÄŽÇ]ö;wæ—!a-y (Z_²Ú’àvÛf¶íB·„ˆu‘Œ‘@e^¥Ãa¶—B£x¬¯äúªþŸÈÎ|¾ÙYyïÉqáNKíV‘»¯ù×ó Ò®¤)ôžäx‰ß/¹U¼1梘þ r_á–Bòš ÖÛš;KîÚ«µ06Ó§•'È8……B_ËSæ"%óAêøÃsh·–ä>Ì+`Ùm9gÁv¾ù÷r%gã2¡K»°^í¡oC"S-Ìæ;¡¹O5SÖügµ® ³k¾S§?Ò7dl°ø¡?Ôųÿ0±+øáf0 tbÜ“ù85¾~ëµite4UC[~„¢@›ë^ãp÷æBkÜ,³M¢¦ ‡Jؤêº`v€jpûVŠrÛÃM¹dFy6¾P^ԅŽíˆÕŽ)QJOVf–<ØI”Õ€¶uƒ5S.›ö*ësK¡!¤«aÚÎ/#xï'OäÕ…Ëȯ#úÅþ,ú;Ç™¼… Ð@µœpÓV.Y‹ÜƒJØ dËýÔ9$+C%éM"Ú¤ýxjAvHQaJÔÄ#Ýð¾8i`ëŸ^pHêí.¼y[b•gOI“)N×[`V”ov»3Ÿ?‹ó> ùÍ+´î’Š|+oŒÛÄ~ÑÝkªžL;L¿J;ý£Ñ'‚¦+8$Ъ¶ÀãõJ»­EUµ‰;Aýâi–£mzŠSÍ‚lzÄs±cå‘”ôn`O2¬êRïa^Ìt¼:7W2ꆀ4"Ñ%ËÇÑ’kœšboÕõãªa:*,6Ô[ é5—z…v2?^ãצMž iìõ·>¬½¡¶Ò5ë<ˆÈ¿ÿ8G=Xwµ â¯-²x?šêPÃ"â8Ž{¬‚œÛßdôãÑ"Ïú=’S¯0RC¯ä«~â÷8loúI ¼4yÝÜÉÿ-à ¤}€cˆ-N4 ý»ûýuÊï†Y”Ú¯ëÑA{öSá¤ÏTsOYÿ Àl¿áå`'1Ö¸ ­Œ¥gDýøÆÀÌndÁ$'¥÷¯þ†bbo‡!K˜ÊQÙ"F¢þñ‹dýGGkö ©!:PZë¢ß{ÆDá,-{³ ÷—Íu¦Íkb“qVdÖ‚‚æ”Ò%?žÇêµMTüO"n{µ2vë°䳿BÙÅZCK¸Ð¬U?_aWYP±°±×s„—œLë9 ÒQ@;}‹º¿ ¯¤JH¬[ðú;=`G¥>¸OÀã }«G©;R$ "‹õ|—DQØsñ*Ÿò€Õ’vÜcì†,<‚F7Szã2øMgããÒÙMÑ)6Ûë8÷.œ')Ki.Ô]ÙÜInÒ ÓÔé÷ Ö—AÙo Å.ÞYÏÇèÂßëzŒGymþ 9¼ Ug§‘Cb˼¯´»Ü+Aœ$o'åwT®*Iø*ºYÃ'«ñŸwj•Ãæœ"ns| XÌT^‹7°iëÉñ⺠ç )_ä÷CÖ;jÿ%pŠFrǯ—%Ø×0>…™ñ¨ß†/ÉC Åz½@"s“´TÓ:¤-á5p°­t/ðØ‘…VIÿôIu á¬H®q~10®x~k½PÙ‡oæ¿JÈóš!8JçB úEŒ\Ü2¾Iìcð›(Œ'Žá ‡M°}¡n–Ú2~†ãWC­ðÏ­œn±5¡ ræZÎLMl¹n¸¹ùÍ^B±ˆyÍ5Íá= ×_ \$õ3l,ÞlÃL®9Ä9ÕÌ•ˆ_9úšö6}<¦×·1¬¯Øù´{ÆFKºÝ½†1½ µ‹À`z:/ƒ^^ÕaKO“økΟüCïzôïŸv_A7òúK6쟭éòî•«á~í¡ÁŒŒ<°®_s–‰: çx›ágO¢¯C˜WN ¯ Â9;ä·uê{¬%ª-P–’N“òxºbh›Ïo–L \¯Ÿ7ýOwé=žmHŸT«¤»‰]áf(l×í¯À–ˆîgv„”Õ¼ý}î>ž¬’ÞÏ¿$·_Ã=;æ„£¿!¦Üzè¨Hoï»ee>¿Æ¯n]ÍžlKéµÛÛÍŒ¬Uí@­îOwv >…`3!ÏB¤Ú­“ÌYò¡•v'g8Aº°®-“t­\˜ÄÄ=àá’ ­«Eu>b´ùE/é%zö—$è19ïÛ—ŸÒÅ©|pFhÒo`6ûVßI{¶ƒ“ꉱäßI‰åN•š-lDÈK!ÝÃÁ^zÀ>ŒÎ´6§Ú<3’Ç„Bäø(£ôCêþ‘º12ÙÇ,ì ¿ÄþGðÕCä\[¥^— pKpI£]À^õ„…© t¼h¯dÚIõØ“¿|—ÝaûĆ ÜF ˆú,ë•ÙÀs£} Ÿ6´lRÄÌg1>gö*úiàDà²[pÂÓß¶¬ Z#Hé©G°Ö]‘:’º;£ÐS"¬ì;&ņ’…áê’aÛ&Ý3_„ÞܰYv‚{[ÅYÖÆÞ’UbÛƒÕL°ƒVªƒçq‹Œ £½m“8ΚÝûø$þg_¿Ùý¢lû´€ïÜÉ!úùö2w.ù© ¬×ÎFDÕ3[_a ùçwÔó…®k °àm´Ñ¾° üßhíA5Ò(Ô¶[vXÜÍ>é#çãfIºå:öß‹ˆ›ØôÄò™£šêqdLÓÅæSs$+\¢mɹáF`ÑñHØw%¹ë/ë?a¹†qj± -ÒÍ=Af6؉ç0Ȍòy‡±82ñØ¡å8ù‚y†Ï6^§ú¤¿:¾îŪy°§Ã…€~‹Ÿiû†d}èÄ+( ‘uÑ»ÇFM«f‘pè9u`Än¡Jö¥áïnÔ^'G?À4[ÁþÏ시؄5.D U)|i2ÊØ¢xÌD )ûø,»K©í*¢5OÖÜ…Óð"8ô°ø×Ü0ãÿ^=¥;>?Ö®†$ŸDm_Õã|ÒvV^®wúºª »>þ<­vZ¾krÿAìµOí>^§~´´5Æ-8| ¨”ÔDòð[^\ù¸ü´ x½?YÚrØê|»= x-xÄi¨º¥¡eš<À=JPx׫\ªYuxIrÏѵÖ1\¨1ž’™Ìù`ây øx{YâxPüdhIFŒçf1_ù,ÿP|ñ¸B<öÚ7(c ]Zm¤×Ùò;¥äºõM»È¿P,%ªëŸ H>¥w{=k'¹·’­E>ÄÚõ[#~ª¸í~¸Ô“èOheÛ‘ -A4ÚÚ›4(¯v‡úK^ôiµåv«¤ÞaÌ#§™ÿuâ¸C[I’ÕKÀÏ;¦+íÛWb½S›VއJϱã‹°S‡–R9שm©Ow9oSË7ß0¯Ü'·Î~ÆŽ”·Ï°;l½û:㩾’8yêw“µ>œ}›Šœ©øWJÁIýHù#‡¢=Àûp'ýÓÅÖjqÚmÉ®òšÐè–?‰‹ _ä$} )mçùQö=²¥)Ź;ô‘òQ=JÒ£eÑ*â“HnöíåùJ†Áè–Ûýï½ ÊOH7«ŽíN;Á8?ý˜iFÿa¿iwçOÞ3Ï#‡qK™Ç³{mýÄͺ³¡ÆHÆó2šŒ§ÑÔ·®$A¿-¡!V^÷äVúíW†7°ý¹‘Ïoš ‚S¯Yµ5íÑ÷k8G¯›'0÷‘kð­­¸îƒÉ]SgûŠÙ£÷*ÙK/}î纲‚ºÂ~Å‚ ï óv3 ï~|’æ²!)]Ì~í@·ƒÏC9ïÍbbõ¾ïˆÿª’©îyÖŸ@—¥ÿc žiI£ßM|g4BV@ß[Ÿ¥¥åÜéÛö"ü1òPÈÑz÷=ƒˆÁÙ¡¥àøí¯* Áìº2ÒÏ”%÷ï¾¾ËqÓËüC@©.¥ÁË5Ë#—ó¦=¦!+’å„i¤!×÷uœ%Ÿ„Û£W{ _Pã•Îá3J«—XîYÚÝÔyÓûqÄÉç‘ÖH@ñ§¦ûõ}1P‘ˆ€æ‚Tcú}’pÌ]{;iyñóHçöÊ׻Ŋi š~ò>ÀQ/pl¤Åk²úïÓôÈ /“gÎâΤËÛá L·à'Q™ÒøzûF›Þ…nÇž—ïæ nßÑC,WÎüÔÆsž%Ø>¨kl´FÎg_ñ¿Í®á¶ kg÷Q˜@}âÞ3DÁÚú γ÷>~ÙÈ3„apÎÛÎó›žêÇ‚/_%ͧ‰o``ôˆ³³û¿’Úž±!Åõ,ŒÐ8]жÿÉ@t/e Íݦ¢|¹ƒ¢rûïa˜ƒâ/i>ëYùX –`×[zm®ËÍl_Lz¨›~ÈÒee8›ß¾ò1îæeõœ|cõ¿z´±qÿƘ¬pŠ÷­•ÊϕÃ6ƹ ›Ï˜5r§gïjpçŠ.åcxîÁ~çúçˆË  ý„¶./áÐáœ&@¥™ÁèÿacšúºGoT°ÐéH‘& HïUj¤÷N¨H‘"M@…€4‘Þ;¥·HïEZè¡B’\ü>õ÷ÌwÞ¹óÜ™û{NÎINöZŸµ×.g­“Éœ‰þI‰w§Ê\X< \ëŠOm3ϯªÌö§²Àn:G4g¥Pÿêâ¡°ÇT¥CX¡ù}#S9¤ÎYÔ®ˆG ReU…·3 »à!uf2t3@_‚k\êNÓ1"QÜ®ß3oa;Ô·Ö ñÅr,Ðú”šš<Á2|]ø† êT,8i¿ÃZMü…®}ìòŒKE†ÀEàn„SÐÞ³Õ@— Eœ±³*B¤!vÇ#f{\èž¾?ÞvùnD4%ΩÂñïC½–oN“|"¾wy-6U«9»ƒ¤V`!–Øžf O'Säi„6ëG„™Xwaî©ÿÏ)ÿ?·fv­[©!ÔY Æ…«˜-Aa+³j½{ó4 žjFÄ´/ÈRÏBÞ¢1Nuk»îV£dr\ ·ÜR¢Ñã¥ÍTƒÚÅ8m<ƒuÎâ´*.ãÀÏ?êÚ¶5š7 ¶µ[oÙ«œŸà;x›m~V7ö¼YœÆ‰ÂjÇ/Òõ ‰}„J¥2Õ,â”sC¢¤àÚÈŠRãÒ‰' ’¶ 7¨5€«!2ÒUÙTäÌ!›Û›d¿±=1@C~ž±kÔDP$Ä]1ûÓÀ/õªm¦zñroX¨Af!Kð'ñðh¬î7’·eÖÕ\³ ç9ÏlÁØ®rŒy{¯n7ˆÕ}­a #"å*žÌ4&øK€ Èï»#ãÃws+ŸÍ¦²àãqªÆ e&è’ÞÍš//¸êb®ï ç:KŇ7ßD¤ìdÖ¦3•Á94áú|ëmúD Ì.žã‡˜µýÂ⻿¨Q÷)B)!ñ@ÀQÄÈç+=`'ƒ:‘ìç‡lç‚Ãë*ù~&̇k¤ 9‹sßÁ)A ™Þ—Ë6Ò&üwß/•xÅõÀœÊbt‹Y v> Ž!š|Tn›”*xØžì»±&unbNå¡zñ4õŠ’y¥ø¬c±}FúH=mëb`†`ßd‹iP\ús£çÞœ"êy©ñ„G~ÈïuÓ&¦ ø€wÍ9¥ Wl.uÊà æQM¨„y™‘]?䛢ŠÐ.©ÔbÚÀ¯@CX2îiéçÃíCƒ+Q"IÖ+,Û"Œ+‡„„jâ_lbØ/€e⥠gޤõ`£j’¤!_Rbê¶ØØ”›h={ ‡ŒÊAM47)~½ÎLMm{!t‡òòë§Ø£­U ^’FC,y哨 ÛˆÚ˜h‚h0‘€_)Ðüëk‘`ÌÁê\ Œ;–A–KØ]DáTžŒâª3S25`ć¥Ç–GÚXß”ü¤‰L†¹ÞAñÊEs†‹¼¾RÐNsœ»#¢(pk›uÕiÁ§¡Ú-ˆå#uÀ¥o„²»£8! ƒÖù‡ñ'ûËèÿ·_¯)I·°lˆ*2ïD67ܶ+²xz{â(`3ËCPS…x ÿFìZøs‡ì^•Æy=·:àxž 5†rÐ"¸&JíÌŠO] ¿Òó£1¦f^e†ŒCÉj°²\®Êíݓ¬kÓ•½Ìz¬ß@üÐ}ðÛO_| 1°'n@2šÃú ›n_u ü¶™ ÀCK¯É} “5ðôm|,×ËDÓëgà1ïá} w‰HáÛõ„uY,ÇÑîJ!f^ú^; <1e;kbÈÛb”öô;…Ãlt½:¾„ ;ˆí(¢åTÝÏÔ¬ƒÿ¸€Ù© ¹rÝöØÀò€çðñ›â»sxÎVŽ*`à/ñ #…·»‘Ç]ÀõÓÕ»¥ìË¢Ûš–Úà_PRŸ#ä¦Ûݦ,é¦X@fµ·S^÷;ÜÉóïÄ„N$;7Xì¨3¶ñ—§¦Ç²KADV~=•N-Dm42ÿc˜HK¢Sç nm€ú7|’ü‡bàŽ™Ì6«íyFp[° k}Âæ=tÜ#-þGá`ézý’ ’½¨³¶ô`ðÛ«¾Y`Ý©)¦ZE~u@kQÀçé³T³¥n°:vJ¸‚ÐÏò äJ†“ßòbY.!ü߇&3Þ(ë¤o±8@PËŸÍ:f-lÖô±#n¿Gnä\û^õãý°—о£w+¥jÄ8¬èi"{Y>Òâ ?§z÷¶0M¹bF@ ¦Xw0«tbÿ“îY<ä¼(’ÊgšÍP´øÒpéi‘™zjÈ_jGäļ¤F=Êœ«ÅÝÍ<Ö#/8†Ñoº-2$û•ëÚß.ÅͶ@“!|Ðñ ÞªºA™»·«·ûŸ®Þªª–‘ö¿ŽÛšìéB/ñ Fjê^ ¨ÜÒÇ&ý±^d~ÐŽ¬—×ÀN”Û¯4‘R¥Çª„R‹ÎÍ«í­‘˜Ï¯|ØœÒô~S£õša& X&…º²¯•>D_FXùQB.-±ÃüÆïÏaÒqwEKµ'’ÃN4Š÷´í|ÿüwÍœükYg]ãqÈæi¶/qwס%´›Šê—ÏÍÜ@=ƒJ¾ízYuàwÐkÛ?ì3á×ת­Ïô ½bˆðH~½'Y²;6x–#GžÁ—š³ÿxu;™Ú=ŤÝý}Ø­bC0Iývšq`Öù­×ÜΨßI[¼½QwѼ#x"½C\ï…‹Ú"dzФA RÝ:±Ý(d°ŠaHJêî„ßÝ"‘¢-™û@Yù®ø„…hÐö¶åá|ƒ-è»ð &dv,UÊ2ªÞè§1ˆ2Ù‰)¦(qË\Ã4QÔ\oÙ·»dB}#:Í›ËÖ æÄ‰Ê¿éžw$†Æñ˽ý õÞ8áKuxD(šu%†fþ.„‚MŒƒe„5:Šƒ•%NØ¿µ]<*' :}š[‘ý'bÀÐÕ¦;aƒá˜LÒ»§r«>«†%¶Å½Å¥eöLÿ˜<ÖgÍ€†’ßUrû&XYIáKŒ›p,ýcÒ¯ðÃp%zPѱM+Höݵþc¾ÊúÐÝ©1<‘{˰†¾B¼%ÓÃu”Iî¹îƒ¸çW/;¬ç„HgA™ey榴º®2j.âcrúÛñi´!6zÀœ}¾Ò­Ì€cdP³6æÇÃø‡O˜:p¾’ã… Úߢàîú¥ šZÈvxšIèKŸl.ðu e¸g¤·úÚÍ®^ðûµaŠ+Æú—mQ©|EÖôcaq æÄ… Hæè!Âua¸…lÚÍO²Ñ¼´jx"…P_°† ‰Ý»Ë@l—¦ÁF3So2ey8ØIdÆåpÀ|íN¿×}5, ;‰Uqôߎ`žóÆê¡[Ón2q4˜rè p¨RÊÝÀ"E¥&D.ÝÔò¬~½†f.šù.”^ô×ÂfÈwÄú4R»>±®Õt™Ù:1ùýНDÓŒÎÉB’d<9þ+™¯,é–‰u`cYå ¹iÜo:Ím÷¼¸²KÖ·Z]9Cní‹[©ºÜÖSDïì¥]wQ[¾¶^´ì«ß9H0·hr¨Öh¤ž_­7d–?nâ¨FûÇm%m\HXs\èõn?Úfºæq-¶Jš<WüºÈ5¾àáU´Ù3&­Qî8K´<Ò«K{tTðüÙ|>”<ÔjfÔ¸—ÅZ#7¸ófXLfWÂ,ʶËö=¦.7Áj‡'¾Ev§Q3fø4Ïîè 1Òh+ îÓ~áf=vNx‡»˜!˜«[=ðgšÞ¢uÇɸ=–Ã~JîNÛ¸¬g6‡çcQ¬Hº x€Lï) Nƒ©ì©2kÖ+ö®’šc>ÐûÇ T¥#k²¨¥,•¡¿* —®·à ð]Ò#Hï2¯ï0âërVo¾ 3UY½¸aöûúºÛÕxyµÄ¿ôÚ ÕÂ4«Ël;‘bÙ—‰œxÝK8Ye–qлõ{°0臨KO’¾ÐÙê.6ÙûE§°MQµ¢ZÅÂú;‚·1br˜<»x5„‚ÁƒqïÍû´4~e{Ä©4PÄæùÉýlZMù}MöÉ·£ÃÃØÁ6Ô³R¤ÅujÞÙ8;YÐ\áRëö©ö÷’‡õvÉΗ‘w}»ž/ì Û›vöDúøuñ«Bä_¡^òó–•ÍEwÊw©‡ý%*Æ·ërìêƒcwKtJ¹ïòµÔÃKi‹Oa3–ˆ+uÓÐgfxí㉠'Èéå€B8‡eÑÑ–ÅšÊýNjÓQ“ö—>ðgÜk¼$ûa;øq-õŒMU;¼¥”>¢c€] Xê¤'o²9[ÄÏ|ˆÓeñT gJ9ð(ý¹K4ÇåÜÄoˆ£œãFìÄ ÀvÇè†ÈÌ’¢FÖ+Ãüà˜Ó®– ™×èð â gà¿gÿ8ì¡ßšÂ¡ÚBh‰ÅÇ-U]à 7^¸©¼‘óq+ü¹à`æµ­v &R I†©q™=º¾>R*èýÂí2˜ÍVŽã© ¹º‡pG·½’¿ £±·XšˆqƹÊuÜE  ÈÅp}ó [ÄÇ2÷8¶˜(9Yöauêè– lšf¬t‚Ì÷)aO*²!.Íoñx?òQ9ÔOªmŽÒ,páLß­‰£:eéâmÍ™lMYb1Ñ+ã4 õÓnö(øéô§V§(p6f·b,¸æyâ[$·ä]E½Û„Òìb7¾¯¦†™ØWýÇ1-'oõÓW ‘Híô#¼'÷1ºe× )áF$zÖ3®‡û¡¢û”ó_g ƒGzB<–Ù­$ßZŸ7Íî#¦¦HºÐÊVºâ¤ÞHk]€È.8o¸P­1m Ö,Ûµ›À$¯%´ÌÄ/â÷¼Õ?ëŠC=^(wú™ìñÕ¢8ú6fËÏ’€1ákħ;esôÇ$DþÈìÞŽa_ÿ¼ùêaq/áTS¦U„ûqëöòãoÆÁS鯢Óoˆ Õ9Ÿ°^¦©‹ð;úõtmó-à V£N·4n5ОöbÍÀ'ôÌLˆþê0÷EÜJØý6;çï7œ‰š“žN•›ˆ>ëõì}êHNÇ/[~-·HH.ü+Åý"þ_Jq?F¹l Ñ\2ÿ¿ÑDÅOldŸNUØž|$§ô~¿Tѧx¯f//YG•÷Ï?F£ [[Nªá ¯+YRÕq77,uõ¡s®«‡‡^D,ëÒçSÀ¢?Î¯ß š<‹vÊJPD'¨êSÌ!:àà‹Ät99¹i/R—œR¾ß6Ÿð±„úÁã>ý’UÕØ*»ÃÀ\C-¹^aU¯ÜhC"â4o飶§ÌJŒ‚×G z~îÇäüˆ´\úRK14Ÿ¨ÈLP6f9°qî=|hšÕûlÌø´I¯õ GUû CÜÙÙÙ‹‹û磻Ô9ÀòŸØš‡—>«œf0÷I4§&X ÁrIÙ•ü¦“uÔa¸-ÎTW=)ß6ڹߥ׫…ÅëÍs”¡¾2ƒˆ¥{ª¬¬ãg*6»<7=~ HsÛ@`\Cw*¬Ž·¶?¡Z‚%îÄÒcä>â]ïQú¸údŠ7ã¿”œÆ î»×dj@×—ŸÅÕL¡íµÇ_ŸuïËŽØöoˆoئ»bdÖ˦{‰y•Ú­d\pAAèG;œøï¸‹CùþktDl'çÁ½‹V.ÀæiÙ_=•©›:ðFÚ bÆ“·ØRË­ÀŒ­NXô¨eÍq@ °Xjôcó@`ì0ìÂ;TY8Usb/þ„:tâé“ÚT9]n‚%ϯ~˜xX¢ »¿ë<à`°‹ÆWÎâ8,Çe>ÿmÌtáD[H®§IÝ/÷«ºß<#Ý—¾åd?þÛ¨Ž–oQçs1ìBÝ}oh‘ÃRÐÈ…~–Ú²›'ÍÙMuvË!ÀMkí­Nbdžͳ]üëŇ%W€‚Û©6Ä:v4;MÐ]ŸþšÞjýü©C†©:"­üç!|QÅNNLvïBŽ ï}—>·Ü;%öц8¶`?§]8 Ô+@É×iZÀzˇähÑU@¯Œ€øÞàÒÚ=È‚ /T+_VPx\8DäÃPæÄ[¨Žà;'ñ$Œ#­4^.h«—güA¹wÈs„›#V‰@‹lðfTH¢ÿÑ>/ø5,²O¶VÿD¸ t§v/°êt_²FT? Ê8Eóħ¼†8í³»p»ôfNusD ‡Ý!¦ã¼`•…ÁFëø!#åYõ2Ä~ ×öÑýLJÍ«Ñ× ¹8 ÄÁÄ8ñ$àHhúñÂ;uFZàafJºFí¥CËc@+ ö÷ ù×Îü¹ÌÿzIYaHsœ’‰ûLBBªû¯E(/ü¿´ÿvxý‚î­6¹Ç ršÛ4ÞT4‡]«Ëg'F_A„)~ÒÄm=wÔMä|ö뢩‰ê«ñCÃ5Ñnæ^L]^ó»àÛwðÑ£->·ú*e-º„(!­ÞÈJ›p••oÉP“€bw-k·‚ ¤¶ «`\ç¬ÑbßçÕŠ´$N B¦ÛD°ÝLàîr¦íG#`xX–e]„~\:æ‡û¬<ežpú§QXôåÿßí?y ¼Š)®×™~`OBråßncÂ(þKîqˆùìÃL¾÷,FP}EUÁÂ?›ÎaY;·öZ^²b´^â}£K¯ÓÖ¯E©ä ¿IdS¦{U¢åB—Çtýƒk“·i£ z~g¾ äç ò̘j@‚v§Òw™à ²Mo.¿l{9ÌŽi=Y™­¬õ¬à€!D¢½7‰w…ûÓT No^å†\[Ù ¾„ÒMOU-þËm_vØW» óßuؽR{èYÕl³Ô¸t<Á§_ ºA;é5 ‘Uþ3?e®áê¦íæ3W¿ÙlÑu~»9}q¬•ô[I›±‡Üÿ vóÛºÒq+]ci¬Ó9× Òºîüš¡žþäÚhøL–4C–‰Ä/ Ò5F­´Iº«~@_Íào)ˆBpÌC‚ATó½)·p†F—äDe‰xÏ|ëÕ©#ž»­±ß%ºXŠÍ7vïH/žD>dxÐSXÎprw4 °°Ã‡'ܺ{(Ḡ±ß³÷·„±d’M°?r—ùàü‰F÷tB¨«!ÉhÒ»e·èÎušƒA«'6Ù´ö“NE]–<f[î0Ôí^Aoo>, PÚ½‹ÿòD´øq–y¥v[?Ç4‹X^'hto²1Õ9N9í°S7“ª&/t펤ôM$ á2E==7¶ÐÞÃ'b /Åéä 9Ôb‘ɧüŒ5â¡¿æ¾"_»y[—ðƒ0#ÖUT}./@ãµ2 ²'_6g{N·f;*»Iq|Š_óÖüæ¶Ä×Ý’l¯7}äBÎ9ê7PwœPqΔO'tè|Çv‰üÑoo“eG©Äoà0ÑUâÁ¾¶Ó­_¸ÊI ïØ¼&•,°Û !½P.‹8ó{qê,òCJ Û1 ËØ;µ)³û¤ûü¤DÏܹW¤!#u{ǿ킶ò«ºKÜ®ˆlD ¥Q­ ä¥<éz«¿ ]4ã›ê›uK9Ì÷ÉU\Åk›&|tyü‘‘H²´_+xx2òL4Ó©b1ŠãIó¨ý¬ð j‘3eìÆ³HKÚÌõÐ#'-„í<”Ð8J¢Cì@¾þ8{y¥–Ãe!z½›_ë‰DVÖ‹ì\bgæˆxó¤}—\ìg,(^s©{ýt¾á…FA:¤Å¸g‰Äé&kG!=ÏpŒ¥¦ ¯Ä5z­gH^ áx½:UÓ‡kFjOÆ)Ã[(¨Åئên)¶@ÚçK™,v}—-ͳ«í[ ¼vË"“ô@E’͵ô"þîš%È r’þ)½Ç4M°ÑÜ?g!– ôz"OªÈÑ»ö(”`òõÚ§°%ßdë•zÙ—§»ÁwÈ/ÿð×gÚ¶ü¾…gi–Zér³ÈúYS€ìe%ž?÷ùdSôÄüÙ_ÊÏny ¦v¦SP]p÷å^®]‘Öy5¢êE¸’ÈJÈB,É^ Hü˜«¼ÒA))öáÇÃRtŽ6RñÐVK¸CE5øâÇ'Å-çâa›¸Kc2!"¶"±ÃQݚJÐZÜì{·R=ÂÃúO.@Ý@ØAú­ªÿµa„D铬ý¢uVçΙ·¯ÌhiØw°¾º:T¢’Sä-2Q–ñ_:h,$¶µÎ¦˜qõXp±ÝÕ5aZ³öàÊ‹9Õ¯YÞÝ›Rþå“ÝqUݨqѹ‘¬ÌðÇ/ ¿ÚºP‡ØN>O` ou¯‡ŸµI>s9ßìö~¢îÈï.ûf‡¿ÜP? åɬV%J\<Ð9½]þ^à'~°Jææi«ï ?õˆ}ëuáCÈþÞ­g”ýB+ª6³I]­ÇÂÛH†·@rõÞK"L8z9)›[:&ASÊÚxÍRe~àKµÞüVä-¡–DÀâ•„¡|Ö×7“¦ÙÊ#yÝ./‡‰ ´»ë-Úߨ ŒÌr߈çPÃw¾¢À×d7¸z€ñU¾Êñª.4ëºÊÒöó|ÎÌ•X'Sœˆ‹é'}ÂOäª×±+¹ÞÎ÷^¼wUÜWfÅKYÏÜ~„í&LcôØpCbŽŽ“¬]COO”^Ôp¥ åÑî÷Z6È0eèûïèu%©_†ŠÛ]Ñè‘Ó\¾SáÑ·Ó_+\m`÷fyÚ=™åwi=rây©]µo"w•lGõˆòpm.)¶ÝU±ÿ½®óvb£Y"fqfëmóýŽði†ò°G!,ó9·ד¶]¦¾…*=¼&b`+´²·ü)y Ý-FÒ¥ÚTx…ž¼J`#^žM†k2¨Ã+æÂ?O·:.a ãtóB=§rÕ§¢ú1MË"»Ü¶K“Ld8¯ÎhÜòA`D[¸•ŠÞA©êõòS‚³ «üf˜ ¿UÊ“ßZª:2íîþíGýwQCªS­‚æb “’ÖÊ,ºj8;ÞOà¡0H©ÉÝ\# |­-œŸàå¦aÊÊ›ßPuÇGfÑ”\7ŸÑ*~#ÀmÉ¢V}T݆ö·öš‚I€… }_vîW®1fÆçÌ0¥ATgº 7,¥Z¹£,>½²(z%ðî•ëþnÀŽI‹h £ï}2DsºhUØvÒ}Ø—¾¼ÄT|ÐHÄl€÷0§íwdÿczºÄ|Yø<-7¿‘NaByCÊ1¨ÑóùEæÎ;ÒÏ…kòÓ"˜£î·ˆî§ze¢âïϲ6Z¿ÛŠ!ôm#’Í6~f>;J"ÞRv vœzën„ìÚ'ùØyú2“Â1è´ Ÿc]ìIÁŒúÐÂÕÌÍ:.–Œ#;qFpújp¥fd~TÿËcXÀý1MB#׋qº~ÕAvbÂPhÎÜ©q«h9à‹X¢uo†cÚAþÄäϧ@—ý¢âìÙ‚¹žâ©zc°Ü®¤sûY®w›¿jªz¾ZŠõÁ»…d¯èÒ´¸­ƒJ_M>jAü ØÝU$0*òÿrY¿G +]Qeð¼®CBrkéŸ!^(¹çY„Fú_ñ>Õ>仩ŒóSÍ¥t¯â)çÍwg^Ýü‡Æµ+„L Ñ͓Ĕ¹×cèL9œOUdWôm¹ÓNÏ*NŒT¶\Xºd5¤ë"ƃÔK¡¦üÐóErúpƒ _uíiÃi«ãñ7mxTü«"¨üzN q–)„ÑÍ•w“$P‚Šÿ¨ðl7 OÐáÏîŸr¼Ž‘TÕ`H4‰Á§/”(:Õ0óoHzn>º¶´ÙÌÚ,[Å]†5t6-{,¼ýô_­™5z˜œH?Ô¬ÔƒK”à^ÇÂÑoܘÇH9y“¨*bÅ©Àùó‚×õœItÈaγ¹¿ºMX­°=ËclxJŠRyÀáçî­¦ÝÔÃfezÅdV¼žW)ÔGhÛ±qMZݾ"(D–’gmXɘKmŽì*¸´£ÂʶÔ?Æp ‡S?{?T„rÁ¿@Ǻ¤#2¥›ò‘c'N˜V+YøŠOöà˜“¡&» 6Qãm¨ÅÓ`Vï#¦îd³5¾^±;ÉT9¥à-ŸSÕ¿ä`ìy?áj‚„àk÷ƒe/ MãFþm`ÕÉè>|ÚÝ!ÉH¸T¸ýEW§Ø Ùt-Ó«>î>ðB®À£†™> wá°gˆŸ”pÉm»›Òï¶Öx>ÙPÓÖ ~Â'âeã¼jï ²ñÚ!†"¸_ùÞW®Y‚%§gm}_U‚8ÁúFÉ”CÆnNqÂ×eWÖ­ gïNq½|ÆÞÍo۠œá ã{›¼nC®“:ÓéO ÖïýI¾”%—™EvðöU›L1ÀP}ðåÊ#\W楆ÆDÈ (èÏ59 j¦OÐo.i ZR wÇJBN¾Œž\ãéˆá Ç‹¶o¬\+¦˜ÈzŠ-½ÿ6`ïgÓˆ'ri[J€;Fyi0…Ê2Þ´¶â¬êŽ&I0áØüêCóŒáê»› J€/Y£ÁÉ3Q˜ù*§* Í›8ᬕ4UAí[Æ•ÌØš°7õBs…+G2ÒÙ4WÚÂÖ<.Ëõަ\®&ló>Âû¿“ËVm Á¿|:ü>!„A¢'sÜ.‚«^´|oÕô"VÍ÷øA“ö›¤²ò¬YéãAxå 嫃ðò¦¹žÔ`3y¦º bˆ¬&bµeå$wÈâü)Uêâ ÌÕ]­âÝ߯úûîì\!”Á¢s%²“>vD*PàZyeBOúü.bÿÌeåèñð6Ì%/u±PªLñê Åþe«kØ|þ±ÅX&µ5÷Vn•p7­Å=¬®ÃÊc@쇙˜@«Ùë7ùÏ*Yª$éƒÙ8ëh¯D?”–bZ•Ú¶0ñ0pxÞšYu£UiŒõÒ}­½ ‹d˜î L8Ñ[ßžÒ³õ¼»¥ô½äWx}äò¦“ÈË2o!¤)“udEÚÖ~cÖõ3¡ÉlŸŒy'gÃWëFâ‚~”,Vz¡`ØÄ#Õ¤Ç ëÞÕSš4¿«J\å£#–ªZja’‚Û¥ú«£©xy©Á©0&Ø$£tëÇ¢TPDrBÍÖ2!K%^\—fKXÑo{w5pc³0¨[¨Kωj{@rZà~ªLº||JíÃo÷9”ò¹+Ψö|³Þ5næ ñ¡nJ`ÝÈíÛ;~ñ–{§cc÷ZóS‡rëÞ?ν‰7‚–qº¨µ£#v™ÌïÜZ-þ jòjÁ²ëñ€p´.-º´m»Ó® Α+޵ýJµ¤Ò$¾ž\Ûÿ|nb¹Zo-0*SþRÄóSÕÂþ“‰ÉY»bŸéêå|:Ö{ft®Ø€^Ö'ÌlÁœÚ=+šP§…©Íß¿IÙgKêk0,Šíe£¸yÉ/*¶ý±ß…'xŽq6,M/Û‰iÛz} ÑïÀ¿Ýž´Ô÷1åGÙWWªƒëFMSÊì°„•«G¼Ý·“J9©¥Áb‚<ói].œ^xÿ4®ì¢aÿÛ›¡ÖïUT”´‰²NùýÏIO½ ªnkÞòé¯t.nDmÛVÅQ52Û>UéG G~Cf-ˆü#}+õÞIºRŸá½§<-»…°¯úåAÊ9<Œ\FÙj+wk·xO6h²)íÔ¾†2ýæ©KµLµ´¥¢684Ä‚½ïn0Çtû[½é×&è—¯¿V‡ŠTÈ1ŽÜ{Üø24 Aµ—CÜ8Þ§ íµ°…WCÈðúˆY-PaÝñ®8½3rý{ÛsÓ i9j^(Í D-ÆC’´’õÒkË>ôõt¾ù‰ N5®P>zÇê¥=N¨€UØ ‹2ÅááçrÜ—f¹nŠ\5ãÞðüÊ-^Þp•f0þµtØbšòîëz™€5ÐÀ•¾£Œ&mŠÐõå^]Ô)+â!×*>Ì "¶Jí¤z*s5°ý36à3àG4—„x˜µÃAÚ< žf¡î‘Ða“ ðjÜÚYÕÀ©4peuCŅߥB¼ ýêÙ­†Á,ÉO£QÄc¼%—,‡—Ï'¥¬]ã8§áv®à±ª‹(ðÂën:Ê›àЧtoGz îC.Éýy—’ ƒCóe…'/Öÿ ƒˆäS±×¼ÈôQH†Pº1åóK߃ ç w3A_·}/s`FÂm«[ÊY;ø…œ/rÜ Dv¤R´:ãŽàícWu´§âÿ¤•1“·šs‚ðTŸÓõÖŠoëO"léb˾\¥<8>0ý.ô{áÛ= †jÑÙ'´4—¹ µL'{ÖK0$ë'¾Œ”Œ¥©êÀx§ÞÞH¯<ë/Ìcµk¡ä|dÆ…NîO9iìÀx]ªrZÒm’=B¬ÐTœÚìB#‹m¬4MBh9Ð{š÷íHþ#Y~·;rÐðŠ;9GØ^¡¯#éÑŒ»zåòzÆ/×Ý•ñêÎ*nUO@”C.Ô¯CT£Ä‡#þˆ·ÊˆnÚŠ²Y7{¼®íG,,pïÓ_˜Ítp½Ï”do”sƒ©±éÀOÞª-üy êéÖãÂ7 ó„Õûcùp+µè“èˆå@˸Hô¬•c¾_¯vzN«k©³Ü¾²”“~7â(æ:yô:–/;q~­¿‰Â±êðxÙ1’Xç ³Ö]ÖnÊâãg±äÉLît`êÁÝÿH©?*uýÔ“›¹Fk‡¯¸¢¥æ-‰ôð—CøŸßí.¼ þö±ýU^G„H–6EXØL‹…uÛUdû>Jîª/éo_æ2ÉÎ#%.Ê[þ  ØŠâ*,—ø°@}Y®–A7ýœSÕ¥g t<¿‘îI}œÂÇ…—,ÃÝ&Û˜ˆléjúên*`Vê“ß Èaïl.KÃÇhè¦wCˆË|ŒÏç˜r=5‚Zem™zvUèžnù¿#Õ;½»>Ï3]½DÝp=§ÿ a|—‘ÉN­ IK®ä1rñ–-Yíay3à}?Ú(¥—¢CH0S)#ç8½¯Y•°xöf…󿡦F2D\îPëB}*æ,¸dÇ„ˆ,Ñ9Šž071É\«–î~ãL÷ ³ÿ±ß )Ó=Í´hó'öÐ 1å§É›ó¬3©Æ²V*u­üé‘z{AŽ[56‘¯n÷ðÁUpU;òu|*ܬ4 [,%biO¹ÐkêÛaƒ2Èá‚7¡+(å d¤Â³"½½dôÑa1Rx+’{û¥È«b|ysÞ¹"›¯OÊîRÔÇn[”ÂQtñ7šÿAå¸-í·:(„6d]0„Y«åì=nü)ëô¢R™µó¥ÃŸ–: ‹²ŠÔ¹¡éCí“LM–œƒ””«84D }&Ì®jX[ŶS XÔÕ^|‰´‘ÛÐæ)¹|•'UÃtpœ¯ÔýkËŸ(âÞ‹/!nE7†•.ÓÃ騜œÞR_†+G˜\ð™O~ʈÈÎYìäMO.xžÐ)$"BpXÐW$¿1©©ªšTóQ•ßl˜Øäzÿþçœí—AU¼ÚPË÷aoqñ8ϳböyÐã^¾zQ7—…ÒóçòþR¥Ë¸¸Òe»“šïVA,ÓÕ½¾ÍZ‚.ˆ?Q–æÒ€&-øß¤M¾1e%¤ÀÞ´ñh®•P¶byÛP1(åWM4åøËÌþãL”~€òÌþh8&XäÞÄêá jõª ¤µ‰‰›E{Ÿ \í]¼®•"„? jŸ®Ôߜة |òVÝùÃ2•OW®KàÚk˜síf¦Mæ˜ËŒâ!=Õú@% pë•ÇçѸàz<>>aÀkyˆæñ¾¹E9ø²ù]R(Ýi§®kXÃuvyýžÅ]–Vc4PÒ+šoø‚íK;œ¥cçÕ±åJãO&jQÊ⾄ÛkWö,°êÆU˜šøÅ.ÛÜzl†ª!_Øqü@÷/Œ_y¢bÓœ:YM4˜Án'‰”=çá˜f Ë>™þÙ)«U“Ñý£37zD°ãøÍ/ߜ˽ñ dÕÏÐ!݈ÞÕÅQmŸ‹\*¯éÙÆ…‹ò?ˆñÊ+~@[|=ydÍ}ûÝ/Ý3ké'öñÒš OïÛµß\«'âß!žT2ºoªKmZó©Y¶)FnpÏìØŽWis§ßñ}Z˜1Âsv…D9ÄÓGG!ѹµå} ñrö‚îþ-#Bm§O­/«±ü¤<Ëò)Fr>UN½vé­"¿ólJtÔ«Å6·ÍÍ~<ˆµ´ ÉÆ3îo#®d{qLg9U¿s‹Á½–ÐÌþüàÅjFÄ1  f' ýD!½Ã0ñç’?Ù2Þ øôlÅÚ{….ùA)ØÈ'ï /"'_^WÝ™Šâžì›ªªT]a½™ù5€ùˆaÊ¥I6öÌôe»€ãéÖz0¾k¤Ö¿òÇSźw­×½l‡#Nž4ïÞTTõf_±º 2•‡Ž ‰_’J–¡Šç6Ïú+lRevÙ¶Å©R Ä9(–±O¿ .(™’¸·ò•RIÏ":”¢=ÖPçe’ªÃl÷ò¨¹# Hˆ‘Ïë^ ›‡bBN¶„îæíÁAÐñkyJ¹ÎF»G~öÌ ~xItì­¯á[¾ÎÔ2cuN¯#U·&¾®ù[™Q¹'Ö›dFy?"?ÄÎÀˆ}Ï_¼÷’*ª`ö±õ‹È‹Ó7îH«9}5’fÏÉxdDóS•×.™§½Ÿõ+€ä¨±Š]LÛÊø‘šÆšœcézÿDHnê¹dpü´'ñ'SðÀ¾ÎmÁõ½i‘›w ½1÷䇣Šþž×N€0Ÿkê'f59ÔÕ»—J­¨£ Pý¤ÄC)[ÿ¤Æœá¢—ÓeÝ—+r¾­Ëyhßça[ýýÒÉŠ’d²_/{Uü²„ÆVüÑúƒ5/ E‰¾Ä[ð'!çÁã?½K²³»%3Á½ZÐOn+ˆ=ýp ‰Ž)¸„ªšjΠј.£¸ƒráÕ}RO°¸8J÷5úÏ- ›‚iø6½Y§?ÍÈ1#Åju;ù;õ©c ›ãî"Ô9RB—šªCª+‚ÿE=¸ÅžüÚ¹.•ø^3‰ßt?búÑoË)ᲩY2眣Üq{ÊNïs“Z‰2lÀ‘ïÍ—²€é´Ç¾«à¹LâÈλ/1?qx™¹?ü°Ù(Ì6ŒwUu°Ë;¸öAZÁšƒ¬G04ˆ“ð|õ%+nUº¸€a)`VŽ˜rš"ÎýsN+Ó>ÈBfõáV¤Œ§ñêÓ\6W¤ÌèHòÏáñǼïúì&?¼L|0àd2Ãó JræY¡¶ö¬&ÀÒÉÔAw½{xÄþM0˜ùŽl—£Ói;‚Ô®T-ûÍÀðûDÅþ­¿@XÊ/uó³|ŠõnQ‹‹üG¤by@©¤¥ ÃRµ/ÏÖÈè5‡É—‹ÂÛúß—G’o•p[·­®Ä»\{Öœš>é¥C®Ô’¾=à+°g«™ýËÄzJœãý$dyL4~¤?†ÎÔú«½€7£–õ\Ë&PXÄ]Ó7þ^ß*Êî"Ãôpn®à ½`–‡dÚœì€Ú#’¢Kú¦·gþ º_íV]:‹È¯'¿ê÷Š|}e2¯R‡•PÏD~ém;`t»OÎã·%õ©$áµí›S/^0¡úõ¥õÅÚ €fÐÒ ´Þ£%ÇÏ"”’œõ‰—ß/i3dÈ?}Bq}H!sGÿñühÍÆÐŸIiëÖjÚî5d Nâ~ïe[6àjÏ,3Y9Ïþ­^õžÈc¤ó+C–6WÃ[S-dFþŠ¡oØLܶÿ]C|ës µûÅjrÜÈù ÿuÃhí´_ËB8øn~Î6i¿¸%9YÖ½!£Ûɨ¨«KÌgU‘.$ÍÕ|jÔ¥Bê\¤ØP~“ĉ§næ%ŽT0uã†Íîé×¥ÒR0hÛãUK£ÿ—Ë ä;„Ô,^Ýéj’„D„ÖAÏÈÛ蹺´›‹€ÕŸ'¢ ø»¸ÿußZèïneãdçÍfmrpÜC6Áî±9Øî>z.ôÜ]Ñî¥ÃÓ@O;Ý@ =›@')Û{@¹«²þÒg \ì¼­Øü]œ]½¤ý÷þÒ+}öþÏiÁ{lUñvÜûÛ#Øžk±)ºyÚ±‰ óÛ‰Š±‰‰ ˆHˆHIˆ?dÓµòfSµre‘`:Û‰H‹Jœml/÷䮞íe=mí¥u”žüyö p亮·»´  ŸŸŸ€Ÿ¨€›'HPXJJJPHDPD„ÿ¬¿W€«·•?¿«Çß”üC’—§ƒ»·ƒ›+ÛŸÏVÖn>Þ€{÷®²ý[ù{ã¬Üÿ rõú»Ï\)xö… °€à?5ÿQ~vRZÑÓÎÊÛÍSÏÍÍYî?ž@Ϧ¨+*+øŸ•þwòvJg/¹3Hò Iñ ‹é I?’~dòoò«ôâÏÝlìþ÷âÄÿ.þo•þáÁÿpÌÿ©Ãlmþé/wO翺ÅÖFÐÎÙÎÅÎÕÛëÌgÂÿÓg¶6Òönž.VÞr.V ;AwW¬à¿NþÚ÷·³gÃâlX þs\Êý³þo•sÈ9är9‡œCÎ!çsÈ9är9‡œCÎ!çsÈ9är9‡œCÎ!çsÈ9är9‡œCÎ!çsÈ9är9‡œCÎ!çsÈ9är9‡œCþË«ÿú§‡«-àžß= Ü/ÅÿÅE´GÈ7† ØHŒ.ìxÍMD˜’H¾,'’l-…~ ³¢GE%®L…ŽFp†+qÄ(?ýUx/ªkïç#|‘ñþp]+vÉLŸ%pi&ÂFŠÀp³¶°ëý›hÀ¿n_ô¾:nmÑùÍ~cŠA¼HìcÏö¤‚˜ö¼hJëÞ<øà甚¼Ý Û£ù? ©ÔÈ*2P—>ʽœpåeŠ®Ô„Ëµ!™š •­Ä§r,f¥¢Ù¥ö§eæƒ1±¡?•k—ab"›`'Èùéañ;ROÁŽì{åq*G/ïþòæ.ýjqD†`øY±mn­‹K6"Ó6zZŒ^j¤ó4KD²;T—ü³¥•+Db£äEŸ¶èP,üìäqïÞþÌ9]5‚yçc¹Cľ^°ÄmYµ²ÒûJtžŽs.R/ YI•ÛW÷€ÄÞ9ÆùoÛ¿)’^¼¸î/w+Ìý’è„›‚2Ë•”ž ‰KnMG×ývñ– !pjâbÒ„TRËNFDEG\gýŸRxX~$^.ßE§$ÅÏ¥ùP…ðn ~ò:I¹WêÃ>ÆöПŠç’Ââ*SµAµÁ7I‡çß  h84€œ¨ÕTGý¸¸»°ãÔSÚ³í±XMsÏn’ãóµÒ£:€°4@þåpÊyC<»Âד-““æb–Í…lÎ|ê£Ùü ç߈>d.“JCl*20Gü–¢‚à³NÞ<5²]-‘KÛáÎ:9 .ÙŸÁ| ñjôA+8vÑ8xhù?yÍ!ßÛ¶Ý 6a=¬šTmãÿíÀâ½à²í„¶­l„sùh*zÊ(­áƒ¼|«5e ,u†Y«W6 ¤rhØjäk¿à­ãXX>Ç‹¥7Ö>$ ¡t‘ßóªÆsš†¿K\ûèWñ¿ÿ W®»ÐåஂÉâľ§÷«hÛñƒ¥~³xÂu`ÐIZè …; QÏÌ>*ŒaÍÍçë&•!©9%3fGó·Ý½/ñ]ìærpd(øÖÛS9 7s§–*·á¿L®Â{3#1ßÇ·ßµ#E`€sζ¸›”‹ÍX³Á¨nvDxt’¯Ð>¾AYzÓögòFyOÔ 3“˜¥Îø³UÍßê˜ÂGëíILñrëä1 ÂaÈ›‰ê‹ÚŽÅ原ӃÃ\?Ó(§ó]ÕÑå˜a[\mÆ4,û«¦õ‰ÛNUHE ›NJ³ ý+ü#šßcàÐ/0³ÎÎ+ CV.æÅN‡å V¾žøxm‡ß}§ª| (¾H[ ê†Þ¹DÏ„mrÝ4±IïQÞž•”?Ø7O;è{(å·gv$§ú.©{üjǦ—šsªã70,ÙeiÝJwn~˜jr ßgÊp…,Š]+k9nC(b XtqÎì©Ô3Ë/¦–. yó©» ÉúY›v;Yaƒˆ}ûèµL^ ÍI´Wý½ ÐÌ[Þ òQm4áT´6Ñ¢}^ƒ¾fLãDù­OM&Ì?[ÍMývKžÌ»¾ùγ¥ø §B›DæÍ¯Çž¾¿½óFœÇIŠkêãﻮ Æv„uÓîeÕ´ÝY?¶î»Ü¥!(Y“hµÌfÕqâl÷P-ü(”y¡/S'ú‰º<_±…¶ ŒHIu cîy%>P²ûÝ‘Ä~ç×GtNÏ€?ŒäsærÆž¯ßç­x«¡9âÚµ=ߘì§“j‘8¼Ë]tÅ)E<£ÕîpT¬©nå @- :w4K Kd}¾F:˜aþòRÜSάäÜ©_±º gVÚ”tC9)Þ Òôg1Eè´ÄvÜ{ó]„çÞ»¼ùçîÉ?¼D»M½e`ûϯ¸ÈH"Õ:ÆjÌ6“MŠT¾ÐGÒ9 ôùbÐ}­ß'å&Û²yŸxå~×M´(ÈxY”¡º_\(ßiÂÔF6„°Þ)!ý¶g¯K,¨–ÌåŒ?Íþå [žɆ¿óÝ›ëªL¼7.Ȫhñ—Ž B Çú:އ~ÂS ó» qs…ü0ïàÝÉÙrê§]&Ná49O‹5¦'“kLR $” 鬸UUs™"/ŽðØW”üˆCÑ"’|[ü–&6§D¯ ¸¤T›äV×N³ <$•~Ìü•Òç!Û›š[ìoÈ”¾s ]sÆ5ä~U§Çu¨Êx{oä…›øØUhó Ô­YHê9Œ}ÛÿñcC|<·ä Ç.:¨çÒ–Ø‹ë®g]-¾žÓL•JÓM*úýÖ‹­=/*ŠVÜ/‰ÿoÿ¯©”KÝOÜ÷Ù#Ñ#³ùžŒ´G²Pêë€q` Øl¦ìn½ié "¹@èbÑhM ;Z„ëô½R5|Ø\(ãB±xn4‚ô†süO®X‘+÷Ÿw,IEND®B`‚PKÔi6;þ¤Þ! À«øToolbar_Network.pngÔ¹pÁ¶®'²,fYÌÌÌ,YÌÌÚK3“Ã33333333sìsν¹÷$yõ*ÉKUºzÖLÿ³zuÏê®=³ë Q‡‡Á†—”ø®ôçLø÷€‚ücÜÝïþœ „%U þO(£à?mh[ MX”¿è̺÷ÛÓQTÃQÙÆÄÑEßÞDÈÈÆÀ˜PÌÜÞØÅÆÞÂA¾–@îOä¿>²2܆6Vôú]è]­lAx\mõ -Œ ŒMÍ­ùˆ ‰ ÍøˆÕÙdemEŒÍÌ%Üí•ÝåT Ý- ¹Œˆøax]¹ÿt¶2vÔ'tµ²´vàvå#þGLî?×eb¸8Zðÿs>² „"6öÆ„¬ôLt†Œ,¬„¬ìôÌÌ\ì´„ÊúŽ„Rúք̄̌Œ 37 ÇŸJø¯BÌóÇòÚ™p+}ûטZ|ÄfŽŽ¶Ü ...ô.,ô6ö¦ L\\\ ŒÌ ÌÌt<èܬõ]é¬Hþä?â|7v0´7·u4·±&üÛÖ7°qrä#&†!ü/å_§oûŸY;ü+yÒÈðç=#ÃFþüÈ-bo¬ïhc¯bccÉÿoËA(¢ÌÂËðïNÿgý¿ÿ9øÿ䃋îOefVabäfcáfeÑú/ýÿéôoÝemŒÌMÜþÝ™¸™¹™8ÿÕý¿8ýG^þ-1ÿwfdøŸù²u²·üDz2[[[;:üÉÓÏ™‘!·‰½•¾#¿¹•¾©1ƒ­µ)/Ãÿ.þç÷Oõ϶ø³-þs_òÿ·iý¯*ÿ¿$|@öX˜­½šºkÚù²…}*#È.YCÃo²a‚œˆ)R–dR×w<‹ÛÌ|‚¿[ï ó[¯eLÜ}CåLX$ÊÔ´ºð?Ÿîß ]¿M¢bš'‘‹ŸsÊ8Ó:Ú¥Å`àqìØY~å@XBέÍEuü4 ?Gx¶¤4ÇÍÁÉù}Äò°±wT”¯åP» ©\¾Ô+Ò„‘%Ä5€iÎôæìCŠQÛ i‚ŒSàÚÈ+ˆ`Ù÷& ]H¢¢•9¿Ë+ÎÃeb4…#±ÍŸÇ<üF` ‡Gõ|Ÿúœ ó˜ø®#p·ƒõ‹õ7 / ™”O¸Ï†ÛÒ-ôõŸ÷¿Ï¸s™æ^ò!Š|°Á&ÞÝÞI†Æ'(m®©ÞÁ8¸ßªÚ¬Vœž%й‡"j‚r‚”´kçŽÏ§¾V¼?9®`íJ%‰~1‚9:«tª•M|å:)q;ÍGËŽv]®zº¨«5ª-KÉÒLd~9Ø'ø)Ù­š=V®f’ªf¬ƒEþn¿xÇ_RÕµ…²»û\˜[·î#‘  Z6z1ç\W¦.Û,›¢Hq^ö¤I-ô›`ˆçì‰k¦5¾L—½µÒGàà .´Ãµ?ÞïC!TBh6ÓýÔTnÇÃÌ# Õi¹£QfKÕÓÉÉÎÎî3 PûË9´øÖ%3í÷ºbëÍ<5õyöD7óòÉÔíÖWW^üóãk[Þ3'Z‡ÓçÑ®’8H‹Š8¨[ŽöÍ+J†V{º\ÞÅS‡ûI°{ß’5·–ÏwóxŽÃ£ý^ÞÎ/àÑ#qb#ý´Û€ ߨç–ÿ¶²Ì['(TQ²!]aüŸ÷š„•…°ØËÆÈÇß!ÈÿÃB•Ç’ Âume¡¢üg«{i»¬Š%Ðð4h'œ“ÆêYˆZ¤'sÉËíhw†äPç¦æYr1èJ,¥-%h7öMoûœgÚ?䃀‚A ¶ ±£‡ƒªÎ_~^ê¶úöf¦.r0´´_ËÞäxpv0‘Ÿ_8Sìšyº½HT.¬ w7¸äÊëÙÝØwî¯kÙtÊ›»®Ïž§‡µ6ê_mæ9ØÚzÍžuež—ôG4À³ª{”;ÕÅ<€vDÔ»Ä¾çŠ =ÃîyúâŠx 4ž»pî¦7[uOK?½ãv´ûÏMÓšr7D~u­-'i9üÆÚ=O1¾À¯ÖéeuCè×;‘·¼šën5rz®8Ûå?žIµÌ‚±d>{i)÷“ƒëx¦›„éÄz^²v3/׫ýsƒkïÔ®¦“ÍE\ƒÆk†›}€ÃIB¦Mæt)'þ«¬„Œ­ y2£GQeòÐQãw1ssë —Ä˜ø9ÝžîÏ\KË“¸_}N$KGTJ» X8£ctAãWœpQ½WsXܽʙwÜ]º±zòy醂å;] ×d8¾“¾«+Xp­,¾ÈxpƒWÉúŒÛ=š’"³Ã¾¤ææfRÀƒ1õ¨žŸª ú•³{iø…úèÑì!Å)4 ^Ä ç IøC; 6ê¶–œ±“qØ|±Úµ_á{x’˜å°á[O\!« {ÞsMãÝæ\UÓþ㱘ìq™\µ'ÈZQU=3$Qå¼7µ;ÕûÊîaSnÒ5ÈñY rý¬qc<#‚kŠî%ß‹E ­@”õ[X×UÓÆšwë²û$«”½ÃÕ&Í*úÔá ûj»VˆJâ­ ü^ ,Èó¢4pÊúö˜ä¿õ•,R4¿êô™Á…¾ro•5#6Õƒ²$­Ñ'±”lUèÚšÌba§gOÿËð·øšÀBìâš<’¿µ GCnÂøÖŒ›-åy–°ƒf-Y¥‰±Âøeæ*=>d #6d`ùÇø#¶²\ë³ éø»1Þð/^©[>å“ãú bÃæsI°dS:$Ov³â,w­!ý°öïj'9œKíZ¿’Ä®§Œ»Ü~MvN¸ÈBî]¨b¦9 ²>$hDO!$mg=åâ¶w7¡-o©Ê¥3LÂi½ÕÅavtJŒÁ—,Ÿšƒ©%\6ö/£üôµã¨%YF‡”¨Ù÷øt’Å)¢üVkÅ ¬*Cª BM¯Ý-HÇ-ØÍ“úB¤:>à¹oÙq°c°wÖÑuD6ö%QÊñ'0XRK<…-B”ä)‰fð÷›ÇÞw«‰OEßEí'hL ÛÔ—™:Ù[r%ï– †m㤠¦+ kÀÊ9ä$MžÛ5MOv¯É⤟7$ËD7ií5DDÇËX&r“™\Š™CPF]V`3’Q$=‹·õȤjÒo Á´§d‰ÖÖÁßñLܶò¹ ø„vÒp6c¦dªÁdô>šÁÖ¾èŒO3ÅRD8Ž…RýTÊ‹é°|b"Îí†O1-W±ˆ%3!ñÎ*cW®²ú{æ4×[}cúNyT=Á=Þ2¥4D9œ`\2U¬¥*V:"’ Ô ÇkN¹‹;»>ê·ë/¨mW0m; 7ðW$E§ ÈñÖF³‹•&©€&Ž4‰D߆©Õ%…÷ËCj+‰n+I‡0©b>ô?.æ“^.Ü×We›¤œ _®3­×˜ù1âÎèò‘ 4P…hÄÁ;{µK›Á/Ò@õCëå¨T™3hRH‚£^äÚ*/Ýy‰'^ñ[b¸zJìƒF]7‡W”LÍKRä:~ñ¶M ÷GÂ\¦Ã¾;Ï8*i†»QÓí Î…Ôhùu™7¸iö’ñï‘Ç $2ØËü&©ßñÉy2lÉ`Ô={´cÞÊ^8ƒ,Ç«÷м߇®z=cYZ^ïž¿kìc€jØy.T“C¦¡î{F-PânÇÈrˆ ›NýTP—µëhBØ5 ÅZf#ƒw§¬\X0#áÉUǸšÇPÀnj¤ŸzÊ?õ ù:îèÏг|ªY¸z‘¤§C¤îÔß« >ÌŸV¯°·¯ Àè9vIèÓÒïM®wXI¬¡Ì„ýpà[…m˜9Ø °²ÙÄ )²¢ÈÍ;Ç ±¶%còÃŒu’W±‘ö‰P%lK\¸…rëÅÌY€ £J?¥$jH©óãÉíД„GÍѧñ»BS( OtŒ¦}<;;I9sWé%¡™Ê% °ÕöVñÁ(üµëoýNÁM]ýÈ%ARjûo=êó龕×À¿hu eš§ @FJÐPÉy aÝ6ü{µÑÑF>ÍB¯F‚1w4uº§_9…áGêD6ëU¾é2½“ƾ$ÙÞÈ‘¦ùVHXþþEË´ÁÉÄQyOLŒP¸9ÞB‹çi½`€Ûüæ#ñÂN¢Èi@+d<ÒŽ½w¶Œf]ÜYó¢ÎsS‘Œ§ëgĨÒr:{*šF*â/u)EÓ|˜}éá˜$xS¹[Þ7Eå@ÂÓ2}>Æ¥}UµÍÇiôÛÉä½”7¦ŽWÿƒíëZ}3Ë*ìþ©aP}Uªß-0ÂÎè!‰WùŒØD60Lys9qâ6ªp›gY|S=DœÇ±ÍùØu3J¥}R“üH›ÕØKµx6Ý2ô\Ñ? > ®12¼º²ö–¿v:zÂytÌÝsï§,“^,¬ҶTƒ΂OŽ¥øë,NþúEöf%õ$~Åù=s奅·AU|8=LkE57r± —¦rv›—äÏ‘@¡´“”OL¼™¸™þZ%GtžÁðlÅ!Ü‘j øJ¬ﵫ6®Íí5ˆTJ¹…AMEuÀK4Ð÷¢z'Φª“˜wÖ4ñ.Ýüœ)ÖRLüUë'ÅqòÈ2™¤•üM¸º] %?IÞLÁ++ä%4ÒI!XW§æGV£• ÑF‹ÀES²óBQ‘òd9\ª¶‚qòÑ5r¶—JîÇÖ0åV›Û`š\û)1™Iû@gÂ0\ÅÈŒ½æ^ÐßMÚïÛÑn‹ÑR‰èº ˜3ÛRù7ذbN‹ÔÍŒJîË~ÕCÍ)>؃54®„Řâ‡ÌM½;Jr²½aǸ•:OÍ7´™24~@î1äÅPX¬Aïµ´Vcrýµ>xpH)‰ÏüIz ÈÍW¸}:J8ðnõØcÌØ€mAX¥Õ2Ë·_–í|,%V‘¦ú’Õfãr"¡%³4Ú»_¦êªUq»0è·ï)V0¦ ¢ ™?zöÖ 7>ëdœD÷"$œêö+©4ú"Ë` 1!lK°u¹×·L*/j GÅJ-Þåé›Ë·G߆J`µ‹ÄE´–B\˜ÐuìûÙï"çÀ"»G–íLõ:ozß•ƒ¡-°”/ëŽq7eôc­¸ƒ‹,éͱg;Ió‹ö0¹bwB•}}3i"äOh‚²T!)â ÞN§ï‡ßÓ’ç´‰ÄíùNÄż|føÍt7ëzylùNð¹ö²é¤ð‘ù·øœæ$ ""ÙÁgL¬ÍXÎñ€;΢…Ž­iƒÃTä±ÎK¡»0!ðfÕ’ª0‡i¤h¥ÀaÕ_FEÓ,EQ8¼¾”y×Ìw¼a¾aºÕq!Ê™¥ï0¼;9í¯`¾+a—½ëü~ùãQÓÇ›¤qÆOš;Ï4I0·w«€AJWhØÏúÞm¨ŒàQìX›ÇІGmõ, Œ|[¹jïڦͲšÍ›»Õ £FzÂ]a‹i›±“öˆ¬(•Ã4#ÎB(îµ\¹å\7÷;}F;:§ä*ÝÝÀ跶ظ6>S‡ÉeãIt¬°5ðļϴWWICE¯ É ëþŠ Egó úô5¾GKì²3hŒNŸ7Òm×ê‹[Õ‘ êm<%âõ)=GyWŽ·] èÁ°{µRµµ˜Ÿ¨Ä½ ˆêƒò(‘§åÜjígå¼í÷w ‘K‰/1Otei¼ßÞs¹w°ú_jº½–)_™åüH^Ëyýsa?BæaÓ¿æÊñk•eê\P4žò¾×}ÃtáT{ºæ©â¿1—«æÇ±Ï„å§a.mÏsW´TKÅäÔ+k[Óέi Å\M?æVÏÚ€«ëµÝ”ҫθm:l“è_gÂ6/Õ½NHØ~»wXî½Åb=÷S›CÉ3Б˜µ‹ykÆœ÷Ô *¹“Ï€à­h³ŽLtS³H‚ê¶j‰¿îŠœâÕ2ú5qNG/]p‹²ŸÅÌV?´VuKš¶s¬k¨}3%A~gÝG‘ ½ÍÖ¡€¯;¦å= ò Eš°ï‹'ŸÅJ¹‹Fp»ãOYqÄU”œÏÛÑá˜.6›ô‹:œ°º(Ī͆.(…bÛGìU¼¾•tRûiÀBC”4p¦Êöw©Í(Ö–±‚”ý rjD/ûÚ¬ºˆ‹¥j,"¶a»…°«ÛœB]æ^±œm+‘µT¯ ã¤T;PT¬m]g­OÄ‘Â$bohäáL&4T:14AJXжˆ3ß8>©”¢Ä‡Î>š~r4oÜðN ì£ðêbN£BMÁ#f¥<¿êdm^ H,2ƒB«ê^/- Ø AƒƒàÎÜ’>×°lõbÑVåÀiQ6'e­(ÀÍjlš(¼±Jîú•¬ÅV rQ§e J¹ê¤öeJTá(Ù!š#V¢dþ§*vxwUñéý“\R½Vü6¼8­F,³E<#Põ^&¢¿MË„¾¹wPOXńÂbÄÓÌßó6Æ)V£c:/3:‘²H«Ìjuƒâ— ´ÌÖ2\B‰Ï7õ¨UÃGÒ¤Ï&H«²Ú¡0‡@¤·øA¾õ“M~™w[¬FŒ¯”Ù¡°TñðR®ÕÉ«v¡Ü"Róªë<éÏ€Š´—SƒÜ>‘¹ºrÎÜí§© ÏÉ[‘ÓV*.ú; GÕ®"’¯_Òî#³c²k¢ˆ…Ä^µ¤ãžmÎÅJ­UY¶r- p;Zm!:·«‰Úm*FçÎ ›.lU‚r=Y 4Ÿ®ÔEh^JZšv;ÍÝ÷Æ~g³f6ò¤ÏË9å5r‡–£DL_»¥y=¾ÿÔ¥®WÿR+¨mL”þÀÍWЈÔAÔ>ãÓ:õ•Ú9®Š˜láXÓc¥2äpÔ%‰°Œ ßzG! 8j6³˜Ã¨¬ ÿvÐDc^B¥ÕF !k.FFÀo^Ö˜ô5w$“"0-uýP,#/)çžõNе‰ Dm¿„À\ÜÁ ‹ŒN€ÅãsÎÃsdʉ2é«('ÀBé =Nym2ùÄ?ëúfaÜ>¨ ï¹— â‰Lîdâ>º¸|(¯¶ÖƒÓñp½ái¿ÜQÌv`®täÄÄ4ðGšuñ+ü+ý 519 ÿ7ibÖø²æâßüWi–>˜˜Xþ‘æ\üŠÿJÅÒ—°ÏîwR°¼ºGñç26K7Ô¯ˆt2¿¥?6;›èÒ™V¯3á컟I¤SÉ1!—h¬‰‚7LîƒIÅGCÏãI/pî0ÂÔЇ´íKZ™0äTÖò4†FyÂÙÁ¬Í½9ÜKøc¤·©æ«.<kó5¶eëx 4‘Òó·7 LíÂÖa$[J*Å–%àOª3įVÿl¯ —þÀ½WÁ^Í×K›–§ J"{Òºu‰Úò0ª,Nù]ÜjÈDôjÌR_æ‘ £Ëì4<—ÿU¿Cæv`#à‚ç¥|ç„"fc-ïáZ»#вùw6ßêlÛ>sƒ¤ Yø¢øMø™e8"&NÔ6×6Àù¤ïÙoh5vmM+Ó„ýr˜FJ‹Drƒ$êeÏoé5TÌÍq°ØrÕ8¶ç>­b"QÛO¼ä'ÛÓ’­·äØéh %gõ1™Ç7k/y³¶Î\;´þsŠ·>#Û\ø:È»|XÅDÜ„Ÿ±[£È/å ¡¼;\n¼8Ɉù6P‡ò ¾û±P ê¶éLiùÛiãŸ!s[Ùå²M¿ÅÙ~ŒzÛ'B^mM^à½÷½ŠÏâ¶…s²o8Í'|ã1¤ÇòSE¸^¥ð,îBÖ-ßqqc€NÑûDG8ꎿǧ0a#Ø¿|\&ŒÉˆ<©€`ÄÉ$šˆý¦Mê“ç<ù^†=ƒ4¬Î $=ÑËq.J)Å÷Íó$G0¾P5éü6£Ç¤å4¤s|)¡¾Ãlè^xòu‘£°ÆïéèG-{è×N|v^Yc­˜ÄD{¤ ën#x =ɱ”(–çÃD0•·¥xÉõIÄôÛ²žr½sjì3Ãõ1|ïUé5,„ÅOTe‹RÁSvQ€ä¡Y&:ŽbÎeûÔ”ŠM|`„ŒÎÂ7¦Q-zŽÜrèQ‚X‡ ¤[j,V£6X„Ùï¦BjŽÙè—•›5ÃDîuÆ&¡Ç—;ä,ìú=Û›w.<Ê+¯ÖAytšY±€H “¬wQD@œQóìîÔóòe äspÇ `shéE1g“¼ü~ViY;Ó³0o¡pSÔÚëéezA@ÖìgÜ§Ó XŸà«£¤Ú ÿ¦öâé{È÷„V¾Ð,äΨ3 %æ©'«Ø“•aN9 LºÂ’MÃ/ØÇ.« L¯rˆ$CŒ³UjŒ÷C.ö¢¼¿»¹Løž“zÇy8?çG^¡~H ï úõItï! !T‘×p»í_î~àT^Bc‡ï’4‹¯ߘCtQ7y&-*ä±¼+½ön÷u*[¨—;62Õ%>Ù†Øòø)*×J©ï^ù/—þCr}×邟È{èV£ˆµ&0ž¾ç¡£ßYƒ—¡‹bRÚyu¢ÿ0 Ö>Sù{×Or£šeYx*ØŸ¦qE]—s1¿á5¡óµ uã—ɨ—:îß½U$$A‡“w¨ÆãЛg„ï~ªÓìâÁ#¿ˆ ‹ÈY4+BÞÒ;ÖÂEÎì vy>u9!ÞôÉVtÓ(1¿–XoX„Ù'XH“é&‹Iyž—•îæ™Ñ; A±…¯ªdŸÐŗʯhql†45p– 6/Õ«£B_N´ Ýò¥¼ÞÒ&LG— ˜N¦aj„aÐCÕ0chà 'mYÝê]™ì¯r•6b+ôZu¾óæzÈóÅëGç¢aeÞ¢5عÜõŒÍÇ}dì<†1QLµÑJ{Ó¬fîOI±š6tˆ†M$؃ò–—úvð«ZцŸ„¨°‰XUðûú%ú]b^öC/Q¥1öà WèÝØé‹>&t8INö§Á¢œMn}Ô¥‚Â%tؽ -=åšÞø[`vø:ýÞ¿?¨Þ¶ ¥oûKñ&= ú q¹ÓèNdI°FYš=Ô³KÄõ»oFyê¨^~fÍícªïÓhµjéO‰ß>þ–6„+w 4YÍp)ë³z] 5àvy¥PD¬£ r`÷/ºÈìw8ã±<|²rZÞjã$•#P6:tÔMŒånÄ”ÏhMèß3LFÍ?ÛÈ/×¾ðõÿÀÇMsöš·Ô19%Pœ7ÛäÄ뼟ŽñkÛĤ×sSÑÆé•ÅS'Èlbå´VF°‚Í`µL£éº^©¦Zpb"‚WÖí—Üa÷Náï¿Jq€[a®û)5úHÙûZ4€•ÕÜo<ŽÕ‰ã ýñà¯wßc§Ÿ>Ý`|>êáfk‡+yä%usÓÞCTXí%†Þ@Æ8)}"e'I¹7É\ÔÄûõü„d¨k¦ÝÓ˜ÁtÉʤö—ÓA2gÑÎǯºé–ä:Ðæ×ð7¿U%ä¦yZÒê«—ÏméP'› Ö\Ûf7ç6ÒîÞCØÕ—…qJKì,C=ïÚ-â–ÚO´ºÕ+Pýô7r:x{õ×ïaooŠ®01°ïéuk³ŸÈ[ź0 •nú8ÏÉx;‹Ò;æovÃØØ/ob¬½®yÙ‰žßÉ<Íí%R®’A‹²ítj¨Œþ|(7ÑÄؘյµK.Ô#±é¿ðùÍw4Ó«÷çÇ+Àýÿ˜ßô(,¨-÷Zv¼b¾u! ?Ó éeûšFaEÜÖYyèZâ5õAý¥®îó«Ï£ÈëSµÜ§lÓvÉANdÀÛiÈÔ1K·Õùb/¬Æ†8?#¶2ö>;„ÈÓô¢›hn¶È5÷§gnÚ]ˆËôä“úMü{|‡ÒÙó&%Ì»ÍÑt:nÛ¯Ëö–ó6_±tGDF.¤Œ4ð¦[ŠˆLC}„¥üt‡&ø&óóGÆeþ.¿jÿÄÕ¬Z„J›DðÂA«ÐûÀœ·Lu™È½bY=g¹AŽù#ÄÙ¦ãGo¬Í¹{Iú•M›n¡Jw¤‚…{øûõ°÷‡ûqØŠn#‹`"ìJ‰ˆœ+”Dbxæ&!wwƒÇ´3gíEŽVZ¬¿•ïÉX•È«ÿ˜}mà¶äQªîGôeÑIky&“ôâµÀÛŠ¿öYƒÞVÄʺÕÑì°]eˆï…•þÌÚúÀíó¦Q©|ý’Í}ÑÃðuN†Aj•×Tžƒ ݱe÷ñÕ.TéF7m›D!ƒ7ᤥg6ÂÊÊJ@›NÊÝ69m¹¬ÕUÑëæqB`€]Æãí6)ZÚƒ ¶óñ ÷ë ÞÇòàè{û"éDî€#d5ëDñ¡Ë€=ÿXüû.çK¤°sËÇ*&ñJ ‚ûE¥O0Æòé-ïbN3Öò‡Õ‚½ýJu¾Òû«n n\ß^]½(†MfÏ—ºáél//pKh2| HŠ–8Á•[!OjT©yç¸Ó¶G6ÓÑç.z3ãÕ9Ñn®_¢´%Mƒ¿·ˆ” ®`¿ÕûH0:? rvÏ~†p¡0¥»¢‘¾.‘Ÿ¯s™ƒÂ§ 2õôe9н°Rv žE< bÚ“UÓûE¡ ¿u@±’<Ȉî³\°úÀ“Ûû›¯]¹º&·NáSüÞÉËúÐ0SÐÅôä®ñ×5l7èb²G ‡]Ínÿ³àC½7w1zåͱGM‰¯tE!\Ë«—Ê+ëÇn‚Jë!¬L ù‚±©Êö€\ÕúEFü¥ì¯Z'¯’¸|vxœ<ú­’ø„s9ÊhÏI¼ M°¢HžaÍ_d«Åî%kë£æmðñw¦¬ñ{ôMgÎΧ$ù°;eÜ%RætÇ&ã, B`¯T¦ÏPjÙWeåÌ"Íð¯»ñ‘´s¹ÍoöfÎnç_ù:†‰Q±^™$eè÷Õ `P!!‰æxÚquðy7j«{}=F@èÚßÔc !áÞÒFw¢D·„µÒܯâ+«¿62Yÿ§‰k—ÝřӴB+Ô‚#=yÏaÈ-Э;PY-ÄL,HTz³”xVÖt83)`BP©ù„'Y!Dh„ÈÒ)+Wá 9æŒÍ—ÇAOBsú _õRXLVPI'š¯ñ Ç!`Iºöö3iºt»æq#0YÜf$Ë‚•‘‹jQIM°ÝF] òU$Áá&ÁóÆ%cƒw³ðå_·È² Q¤H‡-™(ΆËüÂ?¥_.ƒ¥ †›iÀ”SçªוðÆ%ƒ\vÅ1O0­·ãròCÕ¡‹¿:YäMP²cŠ*M Sž4ŠN› iöÅ1ëíj [ƒ(”.‰Î IÀt— —®Hþ€¤qàOÊX¹£óÒÂw®܆ïÈ(%Ëz¨…‘Á›¤}u8Hùa÷*èÜË?É7¼sÌb”*Ìj›ÕÁhø„×8±Ë7?BXåÂNKKUOÍJq^­ýËæ?Ùèž ¯•¯ôçK‘3O{ú4Š<óš›s¼K¾±p¬«Z§_­ÂYȾÇb¡G?ð‹lƒ’N~ïˆ “RAŠ h¼‡¾ý7“Î⎈Ýä»óʯˆÄFOú§ÃXë^/žÄeöp³ ´\Ì §Ȩþr³,+eU’8 Ó 5O˜ñúqÔŽåNóh‡a§ŒÖI1ºÊ3Y¿…a¬¼pÁªXÜ@é×¢E14Hާ7áဖD×)ާÒèôŠ$'FˆÔÿBU¯èÛ5aEåô’ïˆÒ¼M%ËÈŽ…?ÖÎWƒúè˜d‡†²|v§Ž"Ø!õe”o¿™cB°‰‘l«X©c}ïM ÙÎízÓþ¥Ý+CL‹ÅìQè^ˆÊ*¥mÇNbÞNšÿ-?€T:GIËEœˆÌ±5ÜYù<~ÀìUò}ÐåýUZ)ˆ¥å‡4JZ h"Úq®HiËܤÊCÐÄo„a„ÈâÒæíT×^1˜¦^ͪDǽK. Òq‹¬oÕ}a²)hC,«G¯FÐB†ÍŽK,ÐP¿dÎj¯Ø¿Æñcç%Cäý&ع·>ÕÓŽìÝÚßè“B&'¤õ [7ay:vT0T .`O³ÄìÈ~Õ*á4³÷ΰ¾­p^š‚·kT¨©Þ5Ä›BÒÓ±nþÜ‘+åì;˜_ÃCeÉNUÅN&o[б¯6™ i«}+A—S#´ Ùë®ö£j´´¬ã2—æ “å¼õù–Dì×x 5\Dè8¦Z.&7aõ¾‚ºÐÐE.ñ5JšÉž,QPœVÜÍQyèv*^ÝW-N /æF5­Ÿóñǡø;«œjà »tIÃdƒ8(´ÛýÚžZDÌ8Þ×­ÄÈ(ýIõð~ñüxe«jYùmUBî*’’B/7ÇÉ9xì€ì‘ìâ…Hˆ‚åÆŠŒ œžK¨AÛܑٕŽÌr®ô>¯ÎÔ=)H»‹ÿ¨cdÁâMª–ÐtC1ýJ#„}aÐsIª ×6ºÈÆgW²ñ6&ÍE a/ IÁG »Ž%rÆq­´cÐDÝC’${n®W\}ìÌþ0¯Âm9·´IM2S&˜¢—¢×{ª@>â!þÉì»´ºq©qHÿèNtmµš z`NÆxë)Ì­gÔá/'_ÚÎwùµƒÃÂ|â‚´5 /ÑXµÆªrŒ¢AJDÚˆ¬IoOðîw¸$½jt'Ì5¯CàÚý%;ônÍÕ·Ïy7† îÉ_šŒ‡¹CÕm‘2õŸo9âLTDò¹s^Û£;…ѦùWÏØ²¶âèIeàIèô½¹np[RÎú†yÛ vÒ'wiA• þ˜›½6†ºMpj†tùHì'Š.-…ilsôºT]ªÊYRqçrxÇÂaÐn:Ù~õ0ò£óž3/œUi“Cqn°]aŒ¥ŽÉé›Îaun-pµ¢Pv,Q>Ì’?5;û#º4¡¬ÞÒÓ8S÷Ї"ˆÅö¡’mëLSg]vrËÓôQˆ)´•!ê§P8ñ®:Ÿ&†#È«CÚöPgè;_ÊôžïÀBÇþ²Ô@ÃÀ:2’Œ7÷¶íXÙ¯r£Ø¢Ò+hÍ+;:@iðú€¨!”ÕB2zäuÔŒMîâ ™“òh’fü{’Üs‚º ›‹5’”}šHRö·œ~rUª4`’r™¹:4p=Kl2‹ßú $4;z`têŒÞ¹_‰\Ϋâæ*ø³)ôៀ#có÷e+ž'˜t*AuÎl§$åèUmß­:ã%úÁqcg¤âŠ÷·‹ß½È¼È‰lä›èõ€‹Æ)é–)jY©‘±sÙ_—§Ç‚t˜Ñ¸6ÍTl ŠÓy"—Ȱ¾6—T$ªVcZ§if¤À~¯§™]R¥×–¥Ñ’¦ú9Äl½¸-ý(0 #E"8F×>$bªR­7Ÿ;+!‚¡Áñ×_/ÿÎr*d=Ï&.¦ºÃÛÔëª^QSšaáL¹Jél•–‘=WÆôó$§\[c(B(×°†¹œ¡+‰tSÂbïD"9´‹Á¾‡mŒëÒòRŠ*.Lù¦¾u {´1‰ø”‡¨Äb,\+pW…×îAÆý¿„Š>‰ÊüTªøÿ‰þøDw8ù¿ ¢¨îÚ·†JÊ€Y7h¼Ù»Íœ²°ˆ_ï\‘ÎÍ{.L‹”R—º.´»¯k×å]&Wô&ž›:x‘óGºcOÅSÉlO‚)6 +E÷õòE%a<©wrÿI6­vpÒ~O<ø'N¸= ŒÌÕ…ª˜|­€Ñ"âãôm™áIêN)š5t‡ÝÆ™¡yo„õʲÇ 9Jm[<Ö4zb¿Ì»Ýç‘É4\@Aä°£î<žœÃaV›U‚9ÔV]Ìb¿ŠgJ™†•6ÅWR8ÈwÅL¢f0–Èw}Uþ^PHŠážÈÕq˜JFá¾ ¿¢ý™š$o‹g¸¿˜Õ†ÿ¢‘B¡ß,~bõ‚Þ6%ÞÑCÒÒÓMZzB@M6íÜGT/¬Ê¬âÝŠwý $ó!¢YÓ*Jú{”Ñ3ÇQˆßC'ïˆÿã¼ÇSs0“p¬û9p@>Šô’Y‘9ã¹U¹?ù0…&QVjdW‹ßéÒx3k‘€Üñ4 ¶á4p)*`˜Cß5­Û2‘ú—øéqŠ«KEÒsµìá¶³½C_Gמ%“gH),ý'Ct´Î°ýŠ÷çú®ÇMËdí/¤wãN.ì »­ãÌüFÍêMe5¼FæÀÒ<þÒ'ó°8 ½ÃFt¶äl~ÀÅËè2ßç$¯Ð'·ü¥–¯ÂÂ2ÿž°‡æ¥!¨tF‚«Ñ$À8®¡•Î!YÞC$É7í7þ=¹_è%Ç5€Iìi Ü›WÒB1•‚E*¢#ÑÄÝuuVùH[»9$yÞ/m,©áp+=Là˜“›ÔÙaè 4%ÒäxWÂu÷Ôÿö¼CK'ùȦ¼Lòü|’oÏ£Vž˜`7œ™«÷S°uN:–ë…ª©`ñqìuÆV¯± {Ëè„QÁHnÔiYà4ù—ÄþÉøáXbqfÒ˯)/ñNUwÒ™ÔÔ9~ïÒ¥ÖhºGÆ:S”Föãò§-î*cÁŒ˜tÙ§#PÃ]&Þ¯Ú»£réœ$7Q*CRÉ7ƒ½i½_¼à€iʨ Îx«VK¥&ü˜žùçja’+ ÁˆlHœ ú7/Mô/ eF“=çù—Ð.¬‘Ä3…ï™Ip ¹~ ¾ŽÛ '@’!«O.áNt©qÞA¾(S’Ûì;øí·a”*O”î˜ – ÚjÖ´Úgì7ŠºzèÇ«"Èðg‹¦E.;‚ ™ÎîËÑ,oNêO¨ Ǩ•ŽõöB. é;ô ~|®M½¾Øå"ßìbb°?‰R B /„×nèEvî.—WötA×ç:0Ù*fëðxfì(º&:©T<=XU›øYJø}]zAÕa<:.*o9{ÌKjúlQx…FÌË‚‰ùïXJÇDæRå]ðeû@…éS‡ùŠ¤î˜·J=@/ë]u†%è‹—…Ð%¼ÿö3äëLðÃxÊÉÉ:ä¶éAtùBÖ+FÊó&êeFŒ'àç§¡yUð ø—ÐÊãÓ>þDhàMÀ ½ç;mþÁFsž1<ãÍ}wX³ßJü3¾$„ $¡Fˆó‰Á7; r€~‚`ˆVLÝäy¿ëÆ-ŽQ¥/¿0÷®EvkGЦMA¦øh:•îÞÔÌŽ¬`±>&HëâŽË-ðª»@H èŠè³Šƒ¥- u·šWï­Eíq{7÷r×:TŽXy)„.÷É}¾l”«YˆEŠ–.9iÌÔ_ÀˤŒ²oGfÝyŒñ’ýù»ÓJI—kÐ>w_åÞ£LäÝGŠÖdóXú }ëÐtƤÿY®"øðŠŸspÌÒ¡ÉíëŸVý²w¤ÄQ4&UÒÑP7ú¼ÑÃ[ g¤MP¾Øäù>À‰ò:r"ýÄ]1YñY½Ê•{qnàYbƒ2š÷tBr£1û¡Ä(ÌDQøCFã#v¡«yõ°™†o¹&°cNÆg¡AçW[ìðxºßSõNÞ·Dyv¤ªª“­>ö¾ÞÂw’/·EÏîÅãüT ü(­TùôBZáì@=øõF£ÿT£½J$öã÷’Ë‚fâÒÝ“îõŠ„yX\Ã?ÌÐŒUŒG—i“¶Ú E£¹Éà<¤@J.ƒZoxcÎo ®¥\¶€ãŸñrmá›ó77$”~Ó}‹u#ŒYö½dã±vo™0€|€M¨¦=lŲºÌ] dû ýytÿoEöòÛ€Ã!˜rt“0n-•1õº{Ãê Iç˜ßfÒGñ6¿î%/b/‰w»|y£’†îP7Z¤_ ·ORxêCÕ=¤|âLð£5ö¯·õ6ù zò®é…f5ÃzUW¼çl£Ênô.{W¢Ýƒ³öU@ÕÅ”øÛ(EmE†€– æÖ«ä×÷æ‘háᢸhö‰Ř^Ç€œŠ"?ÂÑšœ?›ÛŠx8ÕÝ“? ††^²Jöˆî½~fþª1±ì×Lðƒ?‘Ýpöà*ô:e­T)ŽÊœ}¶äZeãÓb§”Êž†!"ïmcE’W~cCðVéö˜Aï±h›:^2Ó¢ÛÇ ‹CPFÉÅÆÂéËŸ£$+¬°Dv,à œ’je[¼ÓIÁSiH±†Æð‡¢YqR5ÖHœ‰±(Évy‚Fü›0‹Ÿèí7Ût®½ Žs<¯UVÉ&¾Ìo&Ú~oçußÚ¯¾X³ü¸”ŽF@4‚š„~ ÜWj;t™jÈêúPIÌaáER4?D›ý šÂ%·ÉÅB 9ˆïX€4G©×¸|‰*=y'ˆkÁ5<û‰k'j¡Ns†õlöñakžÍ5=m¹zßdж;?”Óÿ„8yòsî·0Aš×ÃÊuŽôú}ŽÛYNÿÊŒñ»ïØ0ô,­âôæZzFrÃì$)½,sÖ’ëïrù€™µ oÇÓºþ·>Âlj&·ðpÅ}e‡8Yât—r.ƒlÏÐAý8yÎ'û […Ä<›zž‘Îk—8SýOÍzqìKU§„’ÛQÃ7ùM^ÔA—§ûëÄÁþåÌ‹êp ÚïM®3Ë'€MÖFÄŽŒÃgi–ïtÏÃùÌ"¤«zŒÝÓØ¾4ëSWÛ\ù•÷ÌØtv²öÞëèΗ]œ?Î GqÖ‰·œ\ýF3Vz›W—!ê~Ð\gïž^·5à‡*÷ïí€-wnÏåßjwÚ»©-‹?ÉÙÛÿ'Ù8Ê€Q©C—$"N{}½lgƒVÜÝ3 gmàç뜗½ËtŸp꤇§C& <ÚÎÕÁ½K>ÞA?Çß>×ö>—lÐKþDîñ«çx[ÕþÐätrîsà«í"´ µë½¸í'Û•þøï+§;¢/gHæÓ¬¿~=àä£ýâä²RF—G,þx§×E2°_YÉ k”ß[Ù;šêèðð} @‰BõGÕ•"´Ú}&ä‡&ìá_MzhD8rNOtt(£4ÂÇòëÍý¶n5³ÌGs1E<œÄ>fsI€žþ.wu÷IlÚ&$]Àn5è.WÁ‘8f‡Cî±Ñć$”39ÌdLuú>ê Ï  ½žÃ¤ÕÐ1íØ¦e9Dbî"&›“Hh­›ÒOüÁk³Czg±ëÖ§/&Oh k|Þ¢’ˆÞªÞ%‹?ãCA;õ}˜<ÔŽ â¬ý6ZVsp.¼M ú?¯,ŧ_6îšÄ-]×V‰—?>ëáM#öÕÅA@@z¬,„•]ÓtåF~1"Íw^¡‚øo!ô•c!·ùUK¢¢"’·[>lZ¡s5y$ Ÿ™Åj—iY3æá7 ø1è|Ïf m¬Ã2Lú>—.µ¾Ì)¢×—ñûHX4ü·Û‚Œµçµ__9‡0jÐÁM’Œ]l_,¾Ïø!臤3"0¤¢¿–ad ¨eêž,ÜNtï ³Ú)v#T\Ø’ ó^‹¾ë3N·R›Ø1Gð‹¥ž÷ì²’S«˜Ä¸Oîÿ`3Q¦ù SÿçiT^&F>@|Ô[@þ_(®içé1«œpbÊØ’DT¤yÑh@1% ëèT—Û X‰aÍJ¼UW–Œù“ßyP(9 Ñ/ϘAúÿY]%;|>?V/£>ñZ)T#=·—Ÿ¯¶{m:+%+¦ïê\%p½¯~m“;W Í­ ‘ó6>âêðüÞoK óRŸ–>/wÇ‹›6›ïo7û£>/9õ•7TÔ û˜‡1rï:+“Õ+6ϱÎéÚæZ€ùjýI©‰ôîgŸ·çEö{ùOºæ8¸h.fC•!´äÅKŒ;‹ 2FÔ°}œ‡³=óÍSåÑÞ$Óž°O=\ŒC=ú£æÞ Ûw?Ȉ!ÓÙòðgÙ‡ü³Ë%ܑ۞žO)áâJíû˜Æð¦;ÈÑk|†Sì3É"PU÷”_ð˜Ôåö¤ tn!Z ¹ßXõ™Ã}*9í|8ÔèŽk¤YL_©457¨_¬tÝhkʬV݃˜†ORþ#‘¢˜ƒ›±âU‹…Ÿ·6 —š7ë/ø:'-ì÷®£Gç?¿N˜J¤_%Ó–ÐòÊ {wy8߯Ÿ³šžy÷â2Ü—ˆïdò n+tÚ¿v=qß(ÀÇWýèe„û[ µÏRßxù;Muø|± ; ¼þ7ÖÝ;¨Éô ÿÕe…U„袀ˆ®_eé誰®]V©‚é„Ð)"""%kEiAP)B/ H‰H‰ôP ¤'Ç3¿sæüfÞÿÞygž¹Ëu}îwîgƒàHLSn=Œét@¡ÐáUÉÜØÞeUò#ætÛ–Á^,^°7Ò·Y€·ƒäJÊ_͌ǜE"©™ßTŒ-¹äOÒõnö” _«§‘Ï6®ª£¤Óhñ„g›LQ˜W *±Žs‡!4!.ç³²x”µzžéò“9óv¦HîÃÝ**qÖžZÿM\åwv@»7ÆmîµKy¿œyg“ƒDÏ5zŸ0¢ì93°…‰ðxÐÛÓˆ¨üñÆè{ÏŠµQÜc±ùø¶Ä{E±Þ"×)½Þ77iöXwo¥#³?iv0·;3,òF(3t×¢˜Ôû­Ê!a²ÿÿ SÓ{.Ø„ØÆ| ®yNü„NMwkâµJ{?y'åIȉ‡‹Œ®Œ´©8%÷E&b»¾1͉mÿ§¨Ã k_E±kßÅü éä{]¢¿¢Œ ./£¶¯˜û ñ¿ìSò¯q¥)`]ã—`nÙ½¡¦ýd}Ð5ýœÜ¥pÌoþ›"Cú·|ŸœöU¯ßMâû6);ËÑûpíÅ!SúfÍ"ZL ;Çæíãñøb°¹§Ü(dØèî#užÜ~CµŽ37³•r”ŸÙ£±2«³Ç;ã£þ=ØàC[|†Á¢4ëÞ-åjÝ2c×»êžMÆôAhK•´O\þe®<+¼3õ‚k3z ¡6lI«6{ûÐué9)Ç¥´ F¹|‚Ñ ®ž° –§Oý“ â+wG–“n,‡ïµìîŒ,>#xÂ./ ëws·Ö^/ gXí>…¹h0ð/1 š§I~OVÑð9.Cë%3¢æ ø/µK´mܵEŽ%h™-+ õ4¼À€V¸°v“•ÃÌ}ÞîrïÓVhT¥_èZÇ%ð"ìƒÜEV“áðBp€ü‹M5„ù«MØ{ì >ì˜ü Ø–Ïœ±Ùl1#c¬…tré\Â_–Mÿ?v•0×›þÖ£ 3ûtF¼¡ǬƒœOkÑ8.7Í§Í âäAìÛ$?’g1¡ú]œª—h5$e³¥àà;ùwµña•Ü Â÷Ozí)t…1Mµ,ñ„Où®d ºÞÃúÐ$F–™µÞ¼Ã|næßYD”’x7}]Ð1ÂY¡W#ÿæ~gsçßWÖúBÊŠý–ä<B XÕÈ¿óëNCÈ‘™Y|W4å%¼ËIöz÷퇸È,åãè{™wK™o˜›ì±”éZè¡?ÓÌvÖBÛnËÝå3É’¥ÿ¢à†ô_'¹ƒòC“ÎOÔ9O¯s#ÿЕ—ß“äoòFLÁ„ÒY»¯©lª‡ô!›pnþ?-ÿÿ}Z ;¯«g¡?ƒd§ÇŒ/Ø{,àH‹Ó×¾qgÐ"¯Ý–¿©…ŸÃ,TýN+Úd6eþÅZ«Wo²x™™®^x~ûÂÂëÕeâR-ß¹IØVfÞfl\ªòš/ÿÔ ‹ÝàýíòöYÌ€ÆÑÙicfæ¨c‹Ùà_üqþçÈ9‘©g™ÅÓ\óʼÒôj¹I©ºÁ©ªp«·k´xÍÂ8A–ÐÖV¶Ùdq¦h²wkQ»6š:Ÿ#œ.ÎÉ+ÐfÙ%Yæ^y±“táö·k«YðSz+^×äPôó*Çl5B ÕÏsN5êN‡y:7‹#gu¼€}|BP úñoõìP£qAxÎ2öÙKíQ£ï†Ú¸xƒ˜u+±¾”,/äU;&̺féJ±â¿ÜñwøåßVkßûœ¨OWYúb‰Mnù•ùj=¿î­ö(žrÜ™r3^¹ý¦bÍ–ª á™Ìé{Ùhݘ9§úœ”ËyLóÓ†nÌR ~ŒÕ0ÂßzK`Ñ‹*F¯ÈgÉõÕúÏf“d–˜Â¹™6Ô«„?ºóG)âWތDZÿ¥–ñ·{HÁøt—2Эõ‰Ñ(³9ú/ÛðÕýöR×&m´ÙAO^XÍs(Û´,^ö¬6›* È{» uxÃú9>ϯOmuOÈ|KÓiŠäÎ\Úr¬p‡£ç—Ý›µ°ˆ´–ŠÍ~„Ö^¿=_ã/’Jf·š·žÍZ³c9J«-³ÊÔâ{àñ®¤—â?+ryk¼[)wãLä» ŠŽÎ‘NîÚeýðÿØHéÿO;£Ôàï æÂO™ì÷×||îüJ+½ íúÏ»øõ©ÖÅCú»÷þvòõᄅ3Oº>i-øß­ôTϾkŠßS+oüôÛY1 m-ΛЦä5&õØÎÉÙLa>œc)^k%q+—ñëñø„ÖkjâNElkéŒÜ[¶ä §ØÖ[®|x‘­ jQ0¯çyLó¤ö‚P1‡„á½,±YÚÔ³]¹jd47§j½V9úÊÕËR0”E<ß°3LbVË+Ýo¯×mÙ0ÜcòÚ!G"ì)u¬ƒä 'Ë"a3IÜÌx…Gú‹E9Ðߥá=\Ò÷‹±fY‘WyϰȈ©©Ù1¨Á+å3ñM|üM±(ŸßR"샂‡[ø­œPËX¯<ç©r?X¼6\VÕ­Õÿ#YS!Õ='g›†ÍmK*–Úžž€“vjñ¨tÙÏSe›Sù¼\fKM·°ûÇÙ·{ CÅ^XuŒy²¬Úô,¿àTá¥E¨«]OÝWEn›8»ðþb`? Ë™iÔáýȰ`q¹Ÿ fK]sºV‡~égý”±gˆt‹ $xõJ#›ìÁ›ÏÊ=µc¨w Â1 j¸û¹¤x`"è2ùéÍÕY±õ5³¾îþàû[®6?š;̰y­ú–ë7#£Ö­!3æ!s,Š‘‹å•!ÂÜ¡Ì$,jÍ®ËlvwçÕM…5tsêÉ:±@Lšµ;ðûɈYÁ`<±t>ywMH°Àê ØÞÒQïZ™£’ÍÂAì}¿¸¥òY|ÜŒâƒè¯­‚˜½‹áæÐ$Å]’< zÉ6³ê‹$mG¶§ohs“«IÉ]ú&Æï&ºÒøâX"Ï–îç3ky"ŽH ÿâéP²Whª3w;ä·øg´!I¶ÏùÑ ¡^sÝpгº¬¥ŒøÞzw†BE3»É ”ªR©¼ý‹ÕÅôFîå¡í¢#ÎÚK“Ð5ÍôOå`ŒïÊ PX·Ÿ¸]Ûn~yŽck±øÌ¾®aî`S"hxUCˆx^=XÌÃÉ[„3ôøª•±ûô›ÏÒT…ÃSSM/&‡~¨!Æì‡9OZ´é‚¥+ÎõZ—þ þxÉÊ90Ùú)Æëvü=¯ yCÕv]÷â^ÂU«ÒUçæ|¦´+âYâY>±<|˜×dlÆÁæ ’Tƒà`÷ ˜õNÍ.\-&°Á'ÉQpz†¹I²d459ø£éG#;þñ{`ü=™¯èã<î•:eÞ4G’±Hwl—s×®©s²p^R}bÑ^ªòÎf­Ü‡ÿgDUHoé}¦`ýŸªk[C"ý˜¤$‹p~Æ©R°²"7³ZO”·¶átÿé­šOĈJ0AUM?,j µ"þäábñgرǕµ? Ò Q§¦xùñÉæ œä^°~\j¿jkVfL}·Õ3·ZŠ×5ËKÐÞ~›·„j´ßu¦Ç¨]Á“!Ÿsôèö8¹„é>-,[s]¿Ú‚Ló!Ú§õrr•äi*ÿyrÎx©ÒwWÞcŸâÌBªžSªÂû°›æh’~ZÖDF‡Lj½'M$ •vìÔ†ö ô¨÷™W%Æ·~ŽâdFç^ìúFß ¸zÉNNÛ¿øôi¸]ïF¨Õ~š“e>»Ðc\CÜþ¢¹S÷Ÿ<…Mm{Ó<àý¦¡†oõ#U«.z^\S'À6þ3Ã1±ùÃæOܹëÖÓy1[°áµº¾º›ñbËúLA¢ï)“¢—ˆ½¨6ïyåmÿÛë˜2Í’nøS¹áKïO…ów‰¦á³-­ÛcÁ¬åÿ0„•ÕÙ06Þ ß ˆ»P:hÞñ3Ú è,@ÚÁò|jDÛlS iè’*€z¯øîÏ<Ø, (!½e+wœm·Gz•’Ú~sëΜM}Sˆ[uÁŧÁºaÝ×lA; ȼè1·‡õòþÒêÝÆ³ …›•÷wE×S/¬]j 3{nQ_ÆÝ¥ã¼% 9áh^κ<Ò„Ô,däL¹nÿÁÔ.’nêNE”‡ôZö·ëŽ™OG\ʧn×\æÆ:y,æþ×äwPO”—v…¨âçõ$äÂó¡«¼`Z•_œ«ûÒˆR–ÑôeÖŠ‰´ö‹Ô Bjí Ì|ϵd”È3ô }”$ÚÞίåóã^»‡¹ù*rC©5Qr\0{\£²gxÞ´Rüš¿$7ƒ“|ãAò\ÊF®æ‰%Ù§´kz™ØÏ}9‚ðQM0{ÀD¥È\Žÿ âîªð±‡3BÇÏ}D-\â„… ʧ`7¡n¶FØM?¸ ¨¨ëþ1¢*TСáÔ=Æz¸Gy2:;…4µ±îY¥«¤æuç×µut—có8C»W#Vã}‰B+ÄO†•óèÿP4¶¦á«4Ò‰ì[ÈH›ÿ}œ{:³Ô½$zï¬\Ñ%_UM2žâ‹ÊÃQ¥(%ÍRð5\)(¯Ÿ¿ºÿòG–Ì3£c´$arò½›?'벿Üפ_ÑèÍ‚3jÚÂ|å]Óë´¸ÜMBHg# pªs >Íó–N;“Ø¡º!Ì›ž¦­©™· 1¹—Ô Ü=Öíœ(I×>Úv}}šäÆ.m…¢P9`ùŸ–$ù<§!î˜qZ+Ë„têfÅÍ^e:¥©hɬ—wß?µý´S'}mÃåñš½»% )ž²«.‚¼'$éuZF'>£¾Q»ÎtôNFî³13¶Y푽F  [’[:=ÛmÆâ/Z;›ª·¿±$붦`øµ Wõ7qÉvÇnänFdpw¦£Æ@•“î'¯ƒ´eÁJI7n®ì©¾9f_(oUQ«}í´¾‡ ÔÒÝÒiy!maí¢Š‘¸‰ý4îÌ]#ëW“Ïwmƒè…/§¬TàfT.àÒ5¥8åH AšØT'Ð!5 ܳ;¶ß˜š1™Rë/ÈD§eo•6PuNÇ¡†eÝ[ÿl·7ï&ö†Œâ¯u"¥£SCEW™’*í1“ÅÍЙƒˆ åµcAä¤ î)*¢–V½ª°§[žÖå:²r9Õf‚J ¦ýØW„Ámd£ðØ{ÑÜû×î¼D}WÛÜ%X¸€ÏòF#JÚ)ƒÊ l,«jO­Ú3ö ®m9oÓ]»öÇ·Óuèþ5…Û­ïîBÕÙÂþÑåù½+¿kf›Œ›³„s{ýäî®@•ûg)•Jâ¶CJ[Á !ïpNjՃmheÂFEñÆ]‰=!»b¢ü1…´%®à¢á|¸è¢*ÙnÄtD“»K'Q/âHiË£  –Ú•Sš®ìpD÷÷šÈ?ǰ¦f=ðIÎèÍônÄ?îÉBpvÍ!àœžÅÚr‚öwØÄóio\’¥˜û–"'ô(sºoì£(~ÁÊÌ*w,QŒ·Ðºxïrã“ù„}H½Ðlz 6Tâ~ õ1y¥! ¶úuíãFʽ㔸n“IúGÎÇõ*eª‘WKà VeòŸÏÌé´­50{ |?g±p”âìsJ¦e>†ù¾CX…×ïÃÖX´y`-ö¹ÞЏ7~>ØÅoãÊ|ÕˆI€ç@D­‘¸àáë„Z6“û#Œ÷(­ðÉ{ÕŽ 9å’ÅÇ:õ¥jóÂÅš 23N$ Æ=ãUŒKÓ` Àèw¼‘ÓK@É1éÝ’1Ó¡ë X»ÉWÕtÀ­Íéþ±ŒÙŽJ#v}üCòý]~ý=¢ÐAðˆ;ø-Ï~%ç)mÏ!ßãÖÈò¨ª5M>£v”ô ~n?Úyxbd{iæ-(@Ùwç£cžaNö.¤sž“ÒH0äêµ±` î´ro´ª´/ê‚óÞ†®?5I®hT«Ä„æR/ÔNéj»úÙ„õ‰×{Š9müÚ`£È¿Â(˜QIl7å¨üϰ-óä~„ ›Ñ©î @@øŸ¤OÞŽ¡?šT_±º„þ D#{™ʶ¦°“‹ÌùY¿¢H{F°¹=H0+¨ƒ¤ ðNƒ L$¸†…Éù²5®šèê›sçI¿€3ž¤ª9¦4Ç0Só¿‘Þí™ãš+‚Y°Jâ‹-÷[>CNj– (ÁQ_ånÖïÂE¿`ÀåvÚžmY®w‹ÆÂ|5"b~3g‚¸Ýä°èbù$=Ž:Ú™/bäì H©n ö|¾6HÕG¡r±Ã·ISƒ£‚[º4zqÉ»° †voõ‹¤öæ³o¶Œ˜ Òݽ²…‡ŸªšÃFoºÚ~Íw’´^¨é¿žÝÍïóÛT²X&Ü^n*ô3áøÍ$5i?ÌwZ­î4⟢~ÆHc÷k«(ƒß"KI'ìÍõî½ }Ó'~‘ ë±03·uÞ@û€dâ`Æcå¿Õžª´á8´M%ã]äñ{ÎýKV¯t¾íÙ+È@üM<æô¿¥1ÿÖXÙâ¿Nv÷íÖwKÔ…ÊÞß·º,ÚpáñM³s{wýì°=Ì )´~_Ì@P’eõ§° Ê…_=¸úrú º]!Ü:EU ïÐÞ^WŽ];¡åc¡øu¯H@ð÷(¢t?"ì;Òãq+JUE{öCÆ9{êèÅŠÏ õ¬d / 3I)N¹Ô’Åù¸±àâ÷IÎ]RªüÖäs6¸Ž2õ Âÿ:>„°F›;E½—öÓܬõ½¾` ³Wíb›åͤ*Ka¶…Îu¸]¬åé;’ Š?©T•–™®’€eQ'uÏÝÏÛ«ó›ú zÓ|lx‰~Ô‘EiÓžíQ™'Ì+Ép¶ ;Ÿ3ûª°{ä×~ŒUѧµrh•ÞUjd-‘’â’BïX›½mçz„'»ãôX_,·’Éÿ1ßxÍŒ;Ôµƒ8¥7-ÌÅ#K²éH³˜£·x+‹[©»;d”ñ»Î ܔνŸÀÿS}âÌßróuK™Õ\õ³tq ’s@ü7¥Æ¹•X²™?JþGÍ£yÒ>#ÅôPH{HµA} ™Š«vÛyJ^{a\“Ú[(É0x‹Úˆ%×<¦µÖ»ÌP3QÇþŸ›çMuêèÓq³ž gà!@`f+«¸%-Sr}õx@ÿ¨ôÕ%âÁF;6ŽôÁMí’RêÞF{7ÕfZ<ó·±®©"Lµ&l³¶õý^ÕÆJìdÜsÐ`ü‚…dôqõ|õ¦ãSeI¢ Ëæ¹Wmù œõñɇåÿ˜1¸c {3^t«{`ãÈu\Oâ «»5%ü‰_Ëw‡‹^¨Ä™‚|úÿX| H›íùÖ\Ør®!h^¼äVr½qðÓa`‰­â? PFóF¦VkšÑFEËáñ)ŸµIBæOff~÷gZ9*á«ÞAQkÉ*í»]¹—ÐÙ ú¢œ7?)óçH.3&ª½V•=u‹Yc!©ò ÁÖ=Æ“N=«dÆuåy… ïR¤v7¦7ë=O¨¤û ÞtPeq 2››.„1¤\Ê'5l~05$I6W:1N°œíÄÌçCçÁg·ÕYù¿„þŽó#m©ÒnMuF}-9i¨÷AIXî׃K?ì=éÙWVˆÊ20µîp.iš‡G'~ ‹û…oí=1íU»|-ûKÓ®éß¼?DG<¶xaÓÿ¬Ï{þáˆùÄÃøÃ%*¿* žA§-n {ð·ÜCk׋åÜø®^WM òk÷Ĺ„¶„-LWÒB"qø'n›r9"ìi¼ŽSÍàÝÍøÚÿÕÚøõb7\dnF¿ÞÿŒP»¼‹9ÿç‹{Ž´6\ ^³Šp`È| gY£åEÓC~×V>µ5ñX¾}eÝy¦£Tˆ~3+•tä`>zóâWÿØ"U½6CÚ[¬¤žZssO‡Såêɼõµ#Ì "Nü{¿{Û?k 5s# eOCCr[±ZpraÚhÛòIª‘Q¦uŠ&+®a¢%iå6\[¦ÂìΪ?y4Çï©T›Q¬xÖCéƒR “œÚ­ÎõŽWÍ`qÂY¨Q¹­©Àé=.܃{·gäZçþíÄ¡_ /UT>ˇ“åÏ&嘛.ƒ±&zK›ºà"Æñì‹RÈ…0=Úaë•w²€ý‰ǺSwËœgÊú-ïöx-BÏÿâÕv•›éoPá|ß鵎1‹IæGâ—¼Phx=­¶:)É«uðrQÊRhpbýUm÷gRÌK°Ÿ$++j6<÷¢ÉÈmbaԭ᧸¢…fB ¨e@ñ}tÆï.©h%âÀÎßPKÍQg¦Æb›*H–Û`ÈD@{TµesHdé²8Ö‰_ùÕøáãˆþŠÚžÏZ†Z÷s¢!…\¾ð¬lg´dA%ìF°¡]ûj/4 ;„¸ØôJO0~é>+Ã*}“ã7œðÉæân¢7ãÇïöFE‚êjŽlîƒ0@Ò;LÈêÜ–AžþlÏ‹_ R–åSp›Ç ”B3™þ€`¶Úlü)`ätË7×È1¦A¸‰ÛyÜ¥§ZGâ{bG—cöO8«:£Ô£ˆýkÛ)1ç —¡CM‘Çë|Þ¨NdzÊ1î ÅÑ’•6LÆf ¾ížŽ nY„l©°ÉÌn¿C²ü-¸ñº-+Ò6ª.óë;ï ïü>…+“±<*öªºÌtŽ9ý×ï{†ènÙ¼ñ_jÜ»TU:Nä  vi/!»»„8xjÒØë|b)Æ=+Àé«IoD’ $ó/åJ4óÍä(ÍÜÖŠ`V/ý8J˜pÂ90,„b–J¼ZÌÂÌüÉÞžÂçî["òr»mî›M%„׋jd{$œ€¤Aºs|\?ÈÅÂ5ÝÍ2š3HðÆ“¢¿3‡ðjË9p¨ÊŒêõé© éaFƘ×#]TîÚ*xµ>²{~ü‰’ï¡„­Ø±ÖfhXîù›¡ÇÉòUQˆA©‡è®A])´'¦áñ7«˜%o7‚Èí äcsºgNÙ&Ïw¤­¼· ïz¬‡ÐžÎQp'§¨Fa_šE9†rk ”³u@æ1øåµ$iy;ðü;^jÂY§YèúßìØ|ZÉÁ@ÛL£ôÄxMÏLÁs›½)cD€©Ž€æNé]ì}»žëÒûî® “ß¹8b™ž,›Z¨ßiOð}/¼A è0ªùi6ÊÁ£Ã(ïź?ÝñZMÕûY.È.¨Iš½µiÖôLçÉÕµîR4]™Ó±Òà% Ó4+£QñKgÞ‘‰ób؃Æë²õ#ЕŮçÌÌ¿?Èt¥aîLŒDÍaΔ:%–ÃtþÎ1· ¹å`B4›üÎŒBq‰]àNKYHŃüÊ“^¸rÎ3ýÊ=Z»Æay€-x0úÖ=?¿ÍñO ”Ìu¦™t‚sôw숫ä„s‡F÷Ó[f±úã)ž÷œÌç¸T‚$pˆ{Ïßü»ú³pmq ‹îís^GêòÊHÊý+OI‘¯Bt˜ wØ ˆ–-›iOi¯ssuÏqžÕ\ÕAvgÿîñû,uù¨ì„ág}D7<Ÿ~v4c ãª~uϸ‘OHËð*å[ã—0ûA3 ¬ÌxÛ‘Íw5_ÕåÛà?@˜9ƒ±‹(‹6ý™hn»ÎUî¬,óÈ;[ÛAòv×2çu}ãëÈ—äc §«/‹5 `ØwÚ£|Iœø;¸ 4&¬!sþ¡kÐÏðË·˜ÅÞ:ÞÞw!-²kécР¦¨¼7ù¹7(5:ѸfN‘Ó‰Ù%^û í®Û|Ï[%¶ƒÂïŒ_JZÀH3UÖsóSw4Æ—Ü,® öSÄ@{ÄMá#‘™÷FÜ´Ù·œÌ[z9?b¯T}aâ©Óü³§žŠå„íÑ÷µ›¡‰r%y™TÓK¾‚]˜ÉÇn&äæÕæÖØÊó÷' FƧ5lÒ1ì¼ÞV—ÃSPªxÆØC²,ëŽížˆc¸ÅGü"C&¢î9ý¢ô=hÕ©º”[˜ßüܲÊfüë1S‡D40^lOVtõ餹m꟠D©¸L,ˆÏ«:1iQA,ÒDR\xØIÊ×úäœ×Làœ‡Åû¨¹kª ÑÏ30qÖ–Q¤¼%e&"†5‡·ó×^Ön¹¼5†f ©»¨ôj¢áÓ¡#ðø¨øä¦<–óc}Ûà [㩎u–æ¾ëâŸ&¸̆YÜ– u‹§Å¥žiá?o–š¦mD©NÄä‡kH¶ˆÙU6Ì‘´NØPlMV(— }8âL¼jnkØ‚ ²âBƒ¸§,:<½Nž#®I;wù}x|ܼZaÕ…vcqšÊÒ/iŸ2JªP¨GreN:ÎÕò9ìÏõÀÓ9ÔWB_Ëd¤Wfbábݼ@V }Ñõ¨or=ËÁ‹} ]"6á¯$"—Jϱ •¦4²šŒo‹æ_›HÏ}~H‰¿^;ž¯*,Q‚@[Õ—ü¹ÝüæÒ).¡,y§žŠ×õñÍ?èÛ³¢F‘ÎlAZxgcÂ=µ§Î:ûj·dѶJûž9ø«B(÷ug=ôtz)K¯WÖrˆ§¸vùj_Gü¨Ïø›lL¤‘R”µª¬qÜT[ÝúA)…ªîË~Ðicö«ûwh•‚¬ÕÍ+¾*§)³7C[>íø±Ïð¿ñN¡Ÿ‹}òis Uî[â\Ï–ž±Ì™6 8”¿xÜ«6ý•i5ѯïþnøQí8½B£›Og^µ¯Ž]Î{ªò$aõAæ1¹ƒÔDË¥Ü5ÿ=$Ä”t“~X/ÅÄAøöëÓÃÓãH /'¨·€þÙø5q%ABÉrÞϘ£ö·zêÝÇÜæžÀðáþô+õKàñ`Ëí )Ö}6ø8ÜùÝÆ! ÏáùḠÎod’c‡]1ƒáP„¤ék«“£f#:›À;UùÊØÆi‚6JhÌ2¢œ¦˜ü§ý`«k›ÚÏM]¶ó+ )g~¢;)Ë–ê]yeɤÇrnÁ›ûéË ^cì+FW¬O(~ÜXÒMìܲQøbõ–x²%C±Ï«gÃ^yC[k˜ŸÜÒFh¹ÎùÙÐ]ªán~C¤qr1It¿×¶]òà–Ï”0ô¢¨-[ǵ±Ï ѯ…Fç@¬Ä²Ý¡Skvgz {ü”RaÆÅÍÔå‡Vä¨åó%‘ùüRË#öcí†m gå#$ÁULFÀÂ.àøö1JøW8d >“?ÎU5ÏG¼.€•ì“ÏÙÛÙ‘Š[á$|†wo8*é|­Ü¤¿Øîç`þ ž¸l&:ñ:5X•=‹ÍXÔ«:C)û×¥”~5ÿíÌŒ+Jšk 7+ge«J 7qÞ~ÒÆI0.ÅÕpõuî…,S{S„¿éü©Á îßÃXøMuC”Ÿt3ó6Rî—⤷…7ªH\,(AFy½ñ6;‘/æµHP‘¸,~¼k¶nõ·Â* G)Ú0go¢Ùá”XSœ¿7‡éÖã©3§tXÁ<»j7~;ïŒj6­/ñN7W]H4þz'‚š­–]óÞcùÀØ„H„Î\#¬àÞèZߤ=LuT4šÐP­ ‘ƒ=•X³è~0¼ÿ¼O>ë;Ì“´ã¤SΆvp˜Ãþ$[HáÉ „î{9\NÃ0Ïþ})l¿ŸŸ·ÇCÖ* ‚•"Ã$cK i£×«óÉ‚¡?ÇO J÷ÎuL?L;,ó|w¸ÿØ÷¿ª¹DB²üX4ñ“ eaØ6{Ç̼™¿¯×¦¾=˜}¸ È¡VBîÅ¡˜•†ÜÏÆÝ ñ½Ÿ˜Õ˜+¸w>˜ýl/3™5q•È2 ¾²™Nˆç¬øôG-œ4dÀ[4Œ¾[æè ½i£ÝÖÔ#îyˆ£ïÒÃ<à‘üX_mÿ%·‚îS~g_Ñ~Ñ K5XK¤¼ñŽq\øU\4ïAhQÏô½œ/>$)Šÿ̃â0Í!k…²ãò.g! Öð·çÿÊ~£iD›§Õx3Zÿæ ÅÒŸßù—‚ ùÕù`sd$ÚAC|ø5Ç„Vœï¤Ô‰O¿Ò¦¹#xktîq˜ì,¤¶¸áþ¦scógþÒ(z\ýÞì;óg¾Ó౨cl˜”ñoàâDn¥ËÔÝá(ÔØ“%t¸¦’,ó= ãìùUÞ`HiOÂïð>€Æ"*á…«ƒŒÞ™ËTfcD#V‹-ãØç˜™Ô“žê+‹ëÛƒU¡ip3z ÛÉÓ‘ÄópÈî‰?‘ûÍðœù¿Ìb­kU·Àv—†”WÛ«PRç3J¼3 Ÿ–¿ôÜÉ7`jùìpÔzµ ´n€ÃÑÏ¢C£Ò)#É}ˆ{2=IÄÂøÍ¿Y=ÞH ý ZþÓÒwŒbi8õYåñ\å²Â=ƒ7'ÙÐü61²p¡-EYŽð”?Hö e©§ÁEeº'AH ùWðŒ¥WñW¥sö}fËúæ?ØPËÕ”Ô–¥þ¢'36;`Øfœ¹‡Þ·‡?þ2{¸šý§¼ì}|õHä-æbaí8ù>µ³a¹ÀFiˆ†Èl¸Ý>[žxOÞÝfª©£ŽÊ°ÛʦåÌ+Ìð*âG uM󸲡×[v¢yBÑÿ(ÐÞóçêïÒ[°ÊÃ&²¤?¦ŒÜCÍqLŠ›—еחWÕêµì¼ËÆ|Iuæ…Ëò™.ÿƒÌ•.hõ÷ *dYÄ;ÀKjþ:µƒ!PÝt8éP…g¬oþPËìmƒÑâ[!B1Rä …š7ËIDÈ 5Xt∠ÔFîâäÛ3¢ú¾_ÝOA¦‘ÄË}]Vjf¸ ­Ä¥(s9ÚNL ŸN^`¸–5S¤ÊÜ6(²ÄÙ lÊ1÷ÊÌQþù–v3êÙ£ Eœ†F¹ß¼õšjŠ@Õs¬$yyçØ,‹’Cz¶ùö ­«-ÿ·Ñ4a{ÕBSÊÓ„˜ ¤tþ% ;G-ÿ~ ýttn9_ìæBŸXáRà³.¬ÕüDªÌÂŒ}(¿½¶¯SŬhqæÞ¿›§QN‰Ù¾ ÚÒ³¸äIIáT©M²¾ºú„:¦kggÌ L—LšÎÂ+šÞp_ñƒBòÙBÈð¾J½p4ÅÙ-'PÛô9wü͘h DXÍçæn)EØmä Ý–w.T8Ñ*ûpsmô_ß±§3£'3«wìø%u/L[&]ô9¹Û*c];T©&I w"ûÅoÍç5|I6ß´ ®d86ËòÑ]Õ>Þ‹k$Ù{™×?2Sõ©[~"M&±úlB‚£ß}Kߨ°ÂæÄʈ\ܵ›ÊƒÂ¼œ }÷/dwkv‘Óq ¸V"~bq¯ä9ǹ›Nñftn¦ nv¿¯Qí?¯оl¥ñÿ+»°öŒÙ)Rûš#ëv$Q~Ãëøªî”»Îòb†yz+j„Žõ¸s”H¨óA–y–`†ôdmŠýÙµqÿýý¦·ð€æŒØ %#Š>æN™<ò(8Ù}&í`y0Ò†>§cÏœë>{gŒÓrO%4ÿD¨Çýäô›ù…Kðm4üûXoŒŸc­·fâúöu6Øð¹B¥jajLíÓÁóÅtSiaðÒÞüñö±%—"JÍÑFcqEjÏõxÚˆJµâiÞQ„Sß¼ þS׿I§ƒ‚€ XçA×¥éšÇ°3Oé» ¥ó”‹[O¯ [¬a!›Àg/æA^_ 2‚úY!ÆÒûtƒávW2!ÙPKz¿þ+}þ„zer™Šsë¹íà̼!'z†½Ý®ãk®ûR¹Å©Ò?°_ìJ™6æÑÀ–•üƒ(ŸfQG&,÷«w®™Åù¢.ÏËÈÚ¾æ×Û­ ÍVŽ…âÐæÜ‡Ö=I òå0“òaŒSö›9Âtðñ˜©û¿j]SÍÎØèÆQ®L-y6€?®›á7hk9Zæl>QºŒ©{F>ø”­ú§²;'À†j#¾¡¯Ä÷§¾‰YÁˆí’9gT™¼2+•¬)[³øù¸d•“]¸®–•RŇô?&uiˆí™WXçóp0žVÉŸ9O3±sã÷t I°e´|ÑÉzÕ€ÞÛXεõvÜÃL­æ¹Lã Gb-ÕU’­W<µ¾OÛ€4»!Ñseʵ”ÆRcæ+n4â¹ Ch±öÀ@4Õè3èÝœE»ï¯×cªâG#Ûö3CúMt;gwÚ= ¤Úsçÿ—q–ɘò¨4Y4«éÎŒküòê{¢»nþÉ»‹Iç£ÖLß,ñwmïQƒã’׫.ŠwªœÙ)éù6Yfªwƒç÷:[|զͧ€Àa%#ÿxÊwëåF|)gÔß÷iøÞ·uÀö~HÆ;X2PÊ ­Ñqmð ÕùŠöÕ¸Îq´m­Ó—ú}Ö²ý˜êÄ®Øk(H ÿ¬ÄÏû¬r<ÂCmSÅ¢sGv,±¬×ØÅ#^úüt†¹W“)7M_#.¦«æÕ_ãªßÔÙ{%»wBõo‚>Ú,ÇÀòئ2Á+g-BçÙ…¯¸÷ô/òÈhçKb]9¥©|„^X%RÑ[4çKtòL§ÿ.|=Œ`Tþ(º÷j¤‘šÀ¨ºN»À;·çÕbÞ«ï¢$œKQ›Ú0úø…x“cÇën®[yk¸ ÎçÜx¯%‹nø¥aȬ‰ 퓟A£uñÂqîEª–üôymÞ¾›,*ieMU×Í mp‰§ä7š{´ƒ#þÔ9%Ôj~ðjãñ%ÆqqhcÁ6ú§Í~E¼x`l›J¶1ÓaÎ>/“·F% &Ëß]íŒÂõ¢æÙp‘9éUŠÆ" !ÅžRüGNº5ÀR(7Ú#¯Æ^œ˜ ÂòûøizM,ÏO„ÄZåaÏ]Ö%·e¥9Îùúá,Ñ%NY´äÃÖHdNóÎ}¹·Òìæ§Ãj¬×´³tâNþ·Ä?xá ýžŽkÔ#¸HÕCí…È .õFÍÏÀGÁÞ¬m&Ç7Í¡:d³"fŠ®ËæìÏq1pOù¥%áT8 Õ]•ÿ üÝÑ&¬…ó•Á»,tþ²uuÏP)«ŸŸzE”UwùeÓ(ÝÉ’ ²Â°ß{YÔÇ {s¨J³ì;eZi‚óÖ{#Ò9ÛÙ·ÿH²Àg«°ë:h¤˜ÈÇ)tqS~ë¼zn˜Œ’ÐÑ —E0 ##Ö:d%»\¿ï[U-6±¶wšˆ/XM>R aâxHAiçíGMó°é¬9Ìd`‰#C,:[2©•§²æ¥ÅN‹`€6ïJ˜Âw=ä•PI¯óü"<»Ó¬»2ÍK„6y»(#+…óÈ“zõpŒUfO¶#ùO§#*_ë|–-B\s¿fçÙZéëäâå+f_t¢ò_}µíè4ËäK<œ\’⪭ùÏ@}¼ù-øÉvLªŠÍNVÇœ}kd#&‚$ÐhÔ÷ÓÒþZç•æPý,é#Áhi&u£Ñû«xÓ7î´ÿ.tMèºHjOÇ2b³x`$h”^Kg³Í¨Æ¤þàxÄžþ‡®‘Žg£d`ןŒ h¸§cÖta|À(Šà—þ·_k^Ù®Xz“ØbÖ:1ºª£Ô·:ÑSý87Ý`ÔN’øâ§’ˆýœµ²! õÛ´ îËF;™ÖÐFMZäæ«ÃN–ý]êÂfÎ4è:S¡×R"¸Ë­Äó–bmóÆi«£™%ªóo•°æs9Ðïvîm^èÞjï2¨òÈÆ×ÖÝ‘¶’ˆ17(ª5jà]pyí˜ÕÇ* Яfì€ì¸ß…À4}¶î©»ZpYU÷=AŠx;ÐË´+]¥©nû;šÄL…ÖO•ÅšŸlÐÀuJ,X~»`3Ô¡oo‡%]Io3ö‰ @&ü˜q.2•ú‘»éàXb¯<6½ó·hdS"úåé‰Õ‘83Gyjô"-¸¢¼b)sáYì‘ÿÖ<|ö±©*0–^fn¼íÛöA0þðM‘œ‰¹k<è9üφ÷õÐá ש÷!s‚!Í­!bÞ¡²l¾þtÁ‰ú±ùH,}¿‰à1fö…ü±–؀˧swªÃ]°*U…è4[ Ýü&¢àmÑš¤ˆu=–«ëtW¿bªqEyÚ›#Ý™†SPŒ*²n³_à;ƒ-0mþSˆíM›ºaÔwrÝÛáM«_÷⻅֎ζv©»Knµzçb™fYhY5c'©Éx;v¹Ñ|Hf'߈ŒŠWÕûª")þI5ëxÜé-^E¯RG˜g’n-iÙDy0Ì'uœñõ»Î€I¥Lœ$a_ܰ06$ñ¶ÙèTý=‰ÊYèÄ£@Ýv$«²ÿ/VG¾°Ú¼*oÇ”T¤*•¼òFFúÍÜ×,ÿ2Š›èÍ1ÂÈ¿1LÑpøâ3ûZØ1ÖI1ñ}N{®÷ÄF•ä§±­Ÿq®ØW±½ó'k›Áq^Õ©rV!]LµÖ¿ß{ÿe™R„Ñ)i.cèät~ü@±çgŒ¨1¡V'+QþRJ²YŒ78­Õ ;ékÉÍW˜œ äÝñ “™uø:h`‡ë™Û•s 9aMWy>Ñs±-¥–ï¹´z‹6«ß,w·jžñÉ‚ö¶é›"5;ê,Zn¿ÍøMEöªc쵎O¼áÏ p¤®HãGª¿¯Œ¾ª}c£o¯IS´#¿î=̼‹¢U`›£P³ÅÀ$GÅØc2N=3)P6C<Á¿'01çÙ¢$ù  ÿsÝÍÚu+9Sƒ¿Òª£ínƒhoA{×n<ήLhlîÞîkýâíUÀø‰$d—Ôâ&AŽv—¾¸·°ç&åb„=Èò^/,–ù ë%^{äÓ½E© !¼çÖw ÌçCBgÀ¢W;k¢ïÚÖ&0{dQ¶ßŒÝ}mnç2$ÿïÒ9Cü«$A(ÿ(rÉ#Úìzç´6oL6ñ/˜yâî óYÁç²y³’çâÏÂXŒ:h n üj«ÁÐ4Á¿h<Šß)œ·Iéžtˆy8x]»Ý®3vÇ?ƒ tÌ!מ¨–£ðø¸ Y,XuõF‘2ËÛK³ž ºØ=ʯrpà'_MZÁ°„òÿn ôœ¿°J*ÉÓj{¨«byû³B °:Q¡™TëòO’‰X˜²ù˜à]å»ÕJ„§Ê:úæ‹ìŽ«sƒol¸v¶Lz¯µZøc-9ã^ÿ~^oüƒ2zѱŨÃðНëM¼Ô"7Õ|Û„º`Û“ÒxªÑš¨Îe|Ü Hò9kÅÇÕÈJmEƒXÝÊ|'côrW£ÿè®B*ßJ‡J¥?@kŸušï¿’˜Á‹§nëºø!»?—Vˆžý“¥C½ûd% ÔÚ­*0\On^±mz†)5ºÇηí‰ɇ_¹A^šî&:»Ìít"x#þá4¼€[· &<}á4Àix –^ñ×# ›Wt”Ö&:À-¸Ò]suÖ~v™ x}Cl½\¤X!g&àœ¬V>øw=¸ÝF½´Û ÓcK<›aS¥ÀK~ͨ’R”œþXí³mÅBA¾ô„6KC…^÷Á_—+8²øróà_Ë퇦¡A­Y6Рó?ˆ®Yo´õɘþ!¦¼ÆW¤— ‘ x«TèK3UÂmò˜F«Ç84Ï)Ts0Àêuò¤Õ±EM±½Jì-—fÕišÏb¾£…½ÞNÚm»{‡QªoÌï) ïÌëVºƒ˜á;šg‡6%qºcÎöâ³Öž‘_3¬Þm–éU¬ðÓA¥å³^‹Ìkú˜æIÓv#sÁv‡ê†ˆï߃­¤v9oÏâ{±$¹7qÜ+ÁÓƒÖêÓkPo“ðÂÑ !øñ}̰¤UAJÓ¦ÀZ.m’kDÇàØwøË(f…ÑTj*ä+‡ eb9ØEY5§=zÜÓ<¦ÅvabéòÆÜ½Ú°ÒV¨OR˜Í{¥ºeÉÏ®ìïÂÌÜ@þN]õ5c¯8JöºîcB2墿ß(Á¢lr~T÷öx̽ÖbÑZ æ‘tÕzÇöƒ "怆žª·æÿ›ÕsŠ=SËñÇxz×ižÉàcPl?ˆ ÓdˆÏúwkvŒÞâüøÆæ/¥3EÁ—‡c*oš£§T'¾&MWB™ð³ÔàÊó÷ø^œ¿za‘ÓÉ3;Úg¶7•Q™áyíCqmžý]Ú‚w|ìûš¯ yÏUʪ¿î¸AU¼¬Nj´µ¾]Ï{v?)ÃJnü:ggínïì›ð™ÚЦn¥zVåÕ©»OËåyëM~K –ÎÍþŽcsðtC3£S Hˆø¿Úy都¢vá“¢¢ˆ4Dª€"é¡#ÒAz—齆ˆJï-€( ôÞA&-Ò{‘z(„$ƒï}ßûÞïά™Y³î·ÖüÁ^'ûœ³Ûoïg—ó<'k8æ"»sÌÜíå^Ý\oÌnòø8)WZWÐ;ùâôÕ2ùÔJѳµØX6óÅTÀŽ¢êÖ¾eØ×à|—%'³ÒWóÁÅ=¹ðI)«–V:ïéÆ¿á]òTt€•WemûÝL ›ÐçˆôÉÇZ³‚¨€±iÉý¯$ãû¯Ò)jA/>mÍ+™®:»ä×Ý›?DŽ}ÖFÃȦþœ­*ü°I¨ ÏÖÚÁ§µ^¯ð¹ý†e™âà›bŠíéJ>Æ*['²Ôã.S  #=Þ‡D=À¶º§c6Õ.aɲ\kí•strˆžDžê¦Çu/I/»4,ŠúšÕšžÍÚk÷^/Øc]«™[ÉŽŸŠ» jùà‚˜Ÿt8‰˜«>³ÚjÄzU<2.ê™.ØÅà–ú°ç2²ÛªÚb¦PK@¾Æ½êÁ_-"]^%Ë0n¾o7Üê‹’ÑF¸,O]X9c×Èm³§`§3G•qc~à·XUΜ‰ØYÀ(ŒÓIlÑ[ y•ÌKæÕU ›ï©tA¸¬ã?ÇHáM#*j–#uÛeöàw^àåËG†¸oëë9,Ga—ÂáÚ Ññÿç¬jžDš.h:ÔB@pkõß»q£zÿ‡vãÎøé$Û3“Nv¿{ô‚Šôš¶ÈCù‡oî Þx–ÊÁ)xƒÿy ¥’Eè×hêï/•¯%°õè(¨(…+¾OQ–3”“‹"Ú­æÍ«Úºþ²Þ&°dþË<ìÜì·) ÝÛÛ:É‚Ÿ\@` e%Y[D!/¹”–¾þ²ì´G~ñçòQÎ†Ê ¶''üZ Š/+Û‡bsqþÆó3í 9- åUMØ®’e_«–¨A€Øï€o º¾œ¿„aÞm¢>[–GjñËný¢ÞìÉ×"±™ÞÞ×íñŠzêÐÉÝ÷Ý“¢ë® íaN ï/ÜV£+É›ËÍ}½Hÿ´ñÆÞkwãäew²RêKiφË^Rt d:‚X0Õð¶ó~·îm5/„9>Søœ¸²~—Tná~r[xÖ^º÷`«žÏÃ3pÂ7Ÿ¡Ìbq«ÙýÖÓS®„ß%ç 3$:HÎÖŒnuüäÏ ! 4¾}¨Š÷•[G™ÔÏ TS™-k`wä1˜\}£Þø*¹®êùÛFR Â炾ÜÚ„kø4,t4úéME“¸Eò?«ô­¹ÏK-Ó&¹_wss«ˆ`Ð1æ³³4¿ Nw¬¾Ñ/cnóGæ~B:* 5¨}Böñ‘ƒe±?ÙmÓ¥ ½Ol‡jNáê¼æ—¼³ÖmìE²wWü¾ÉâW“žu-U€qÎ{{V$Û×…îé‹°J?Tì—ÝSij¹®òÔ@ã:YNt°ÿ£ˆ°Ù˜#äöm±¡Ÿ2ß(j5z­?œÝ,=³Šv‰tn¦E›Ü1›=ïwô¸~ü,gúÈÎ2ñóJ8|!£ÿN±+€’6—ܨ?²¬X9tn¶'gžàïŽù>í±q.òÁbèS3yäî]Ü$,_J‚á;Ìœ‹Íî .µ)=CÃ_Q}öÙ8x‰Íp%éa‹\tr+Û½ÛзªMÊ/úùä|u%ºVÇpØvä/Œì®ŽàSÎÓjÇ­'wSIŒAæ}¯ràµÈ©|ÎLÍBU,_!\»±}µÀ€©p­~á¼æKßE~Ø¦Š­aE|ìý{’þGÛ¾<ŽÏ´z·XõÍ=ÈtM¹SL˘„^ë™`wÂ+ªDi¥âaŸ“I…椢ª›«#b¤Á1-[{eá­R$Ð[Å/ ýy;ooÊìè¤Xˆ~Y=]ÏMÏÀ¾ÝŒÖØ“%ùüÞ‡2!>¶{¨`†&‰ÈïaPÇ♜øÛЏøœeŸU®™²€ëfx!Z’°ù'7õN$c9‡å 5«¯;ì%:åQ¤ Q%ï¾Û¼#¨ïr®<œ&21Ddi軬¡¡ãêf.ôî¬÷§ìSÚ*n‰›Qj÷¦ˆ>“ÛÝ„‚»çŒJ…´÷ÎU#_?cùÑ3Gu^u“ÚŠ‚£ôáG[ö¯—*q¿‰çâZ?„¡,Ï7#+~{c92ݲå,?º}šýD§ïô.YÞMßvž4±œ­KZÙGE¨·ûÍÞÍ {Є7wW*µ™n?gQ`[£¢Ê=ö1ŸªÂü¹eÒgÞ¤µ`\³}ôgœPqúÅé™ÐÄB¶O‚„©ƒÏ¨8©òùô4·½~gÛ¿Õ«&ËnыɊˬ>¥‹S¿Ñ›ÈëñÜtí¶ó¤ÅíC+bàñÙãÑEý°’Þô­R?ãOè'™f©ÒˆÕþƒvfë~áAr¯'D¾Lö¿õÖôTs™ß{f5ñ~Sx3Ê+×ȀؽgÏ×Yûì¼zùœïÿ®ÏÏ÷Ç4ˆtÉôK,ÈLI<猱Üàþm€É£¯ù`ãX¿}:›ÒNcGÅŸrkU¡hˆÇãòÈ& öA¼Xè¾D—ñ}A澄;›“ojÀö3Ї4òðA)¶k&QñOé—$Åu˜" .¨Ì¢_Òm OìëdI/9×V;}¶âcŸUï°/C’ ÚÇýˆ¾n[9`ÎTB縲8ûD@xê‡ðÜwãWå'}]o2ÈeÌ¥iŒ´Þ‚›¯}¥cçBʆq>ÎÚáüö@ºh/pkZfû…w-ÌTÿE¢ %ûi¸Jâ}vü—[€qÕÊJK²Š§·UöNaØëZÆû¾?Ø¢Ó(-zÒB‹Þ¯5b2½x«ÿ©’ZŒ|´—Ò$ÂÎD“/ÀMž Y }Wÿª;×SQmXtOvûi6á¼õÉåj- äç±÷œ”€±_£“`-ìºÓú¡}mÛ>˜Êà bï†ì^’Æò0ål4†Ú÷Í‚,­ð¦KlA)5ŸiN@M°gÈT©4¶æ…ë·&™oÒõNHZ?õ’C¨ªœÓ8KòhÁ»‚ŠJ”wê@Î¥{¨q½êŸ¥vá N¥ àg­Ð~›jc^Ÿ!… ÐêÀÙðh*¬¬‹÷ ²BÃê1º©\Uc9Ç\Z·÷¹p½Û u–VÜ>)*9‹¤ÿYÊò ¤|RXOõüûsÒ„.‹/¼sÜ™:_¾&r<8¸ž0wœe;1¸sQ쇮ah¤r!:a‘»ÑÒ‰˜-`Øy?û3[À~†33]jˆ¦P‘épŽÒ:øµÔÐ ÔÊ 4åÃÿ^’‹»eB:O«†e¬' Ÿþ·¶—ú?÷ñ@Fn²p¦w=XÉ»£Ä)IV•û-·wd¦[ìUå PœqÅ›7ö-Ž”Ô7‡AÒÒ:_ Ü'»ö¯ÓŠìútwͯJ"¿ÃV½¾–Ï‘xÝmT4N8ÃnŒiÿ#Z(u¼± åkaΤà•bÀkŒÊó L-$¢}ÚA$:Š+?³:ÕEû¦&Mï/£r,ôKׯYËw{ÞÜ#Ð4=DSz6|=…ßç´†ávÜŠõ ýö A£|«aü¿eŠCB¥ =}›ådÊ"i r°¨xèà2=.HרƒÛ’F³Ÿ¬Å¥`AL«?êg¸çf¬—M ‰(EèÎ}T8É×Êà;làãÙOh²‚í&`mnIÑYÍŽÛʃd¿Š`½×t嘅ÎñÜd0OîÔ6wMÈ=]íÞÐs ښZ)Iÿ;˜Ý™_}ÈUnþÚz#·ªw ÐIk/´4$à6 sú•'ÃìUì3bp5\¹åÎMÒîö¨ìw>¬NéO¿«ßõšgÂÁ˜gž½ue6Ù,м³1ö "__e)íð›z¼ˆ>ÍÀÐ —ëN'‡žk•ê}§YnÅYWô64ŸUØÛ¾¨@B`ôŽm9Èè ƒ4Ä|¡0d¡ >ès¨9ö;°ó™öìG4†0ª"×`Éa‡âe“Ó0Õ’ž´‚#¹½d ÷ £nO~[œiÚ÷‹œcóÞïC;èØÖnƒÞ»¥{Ë9 ×,†ÆPüç’ûø­¨°LêW‰¤½‚DÿËœ˜~…¹.µϹù‰7[”׌M§à* Ë6`$¾ÿ`Mݧm¸Ý @5šÎZŒôâ™0ì¾À Ù?[¾M#ZVF½øœšXšï§žK&owçܤb)Q•¹#‚5öÕ)*u!2fV—éµ´ôLô¹4Âÿz¶‚À¶æàº‰ ífkÌðöé™·|`mó{N–âSÉqÅľ҄»¦6ÍÕó$愱î=ÐÞsÿ[q݆¶Ý•#„öTÚNÞ綘"|ÿh4ýŽ‹úÚí­’5_ƒÞœ…e‹c­V3ÅÒF£“üY {-Ò?v7¹d›(aóÍò€w÷éãmÛ15’$PeÀï;¦Â—=PÜŠ¶G“&„uÊ=£û_<2jË^ª`yóy|ȸ(ÔÍ)0¥:ãTœ_žXÎäWwXVìUyÌ\¨Áê'Çç¾=%À‹¨yslºgtŽa]n 6ë(Èh§½(8†Á\Ë‘,6lû3ÎíÞuÇH¹ÉÉ ³’ûÓ·oè›OÄby˜«’nžÀ3~•§w¨ª1i7*lY Riücùj2àuyVʹ¿«¾­ÞiÃb=úp„§à5nß1.XñZÞ@º×a¦²qíÅäWœ{Ð×LÄ4X â] sC´1.è1ÙM§X Bà#Óa¸s¡ &)Gýǹ~O–GüБ I’7&n4õõÙO—Õ'éá´ó×H¼†ö–ÞÄ-î4ÙƘ…X VØmO•7|9ªæÉÉž:B4 ùYÌâÅþÙÉç-y»÷-  N̳ûªŸ|âÛy€E%Ôð‘©wpB7yË8Xå@åe~l6Á¶ï^Eí””4’ð®Õ6ŽCë@Vû ¹üUçÀp†â“[ ]ÛÇ*ý¸ä¢cGX½$à®â·Æûüt(‘ÔFÏ>nG@î ðH¬e¼Å n“ÖïAX•¦›1_ýd~6m¤ü¹-ýüûéÉIÌH§!.׳Z¨ÍuvÉÙ ?3SÔ\åRï–UOĹêa³W¶ÿyüãàgÎ+ xoøº O·%J*@R옘ë%¿dUÝZr¿ò€bÌ_¬jj¯¡àÉ(æ ìeù£zž¶ÆÅò»¥óV°[ s¹!ªæXݳé*'ðÅ€oPv«ü7’¥ƒ Šå–ßÑWÏð÷OÍ$´§¦ƒH·:YÉ/Œ“ƒåØ_Š}äuM~³¿HÀ幃»2²ãê¾Ð IùzÜ HY²¡Īĕ‘'hçƒÿ Ø«8éØYðÌ«ÉBz 'µÕXÈÈàíFA÷yÚÎ/ ‚5ZÃOWWNÎð-‚¸¿ëæA¸3¶!ø¶QŽŠµ— /Ÿn>ªÎ¼2šF>Ô^“-iK ´Hk¿n.Ñ =Ÿ>6«,pÒÆßÄ¡÷TliBz¹×n2uóJCÈý [ù°qÂC Š5˜Ó÷»Ï¡‡aUb©ëƒ¤Qß?Ç\ÕžÕÍ]øÆòg±p¡omô¤Œ?à>YAÕG¡É'eâ ü$‹9¨-eèdKçG‰?Y°ºÔ˜¿ä±?ÃaóuéÔ½`¹zŠyÛšnh[9Mdʽ°ÚKCÒb{¹ˆÉͧÆê1û ‹+0¦{”ÿ<À[` èqÛB$ç8…q ¨!x†lú)+9~‰åj˜Ùþ9øgé–!n8pfªÏ˜¿û^d÷Û}. ‘,%by\LΠ›às…Ó´æ8¢\}÷åzàiS‘º±ûÆ "Û2ÇPí^TBŸ//WåŸ]Z#°X?’ ÄOò=öò<зùAÚéÓeÉÒ=íù|m)i|)Þ+ç" -ë ”E8—Õî A:¨š ®ÓLŒ€sŠÓ+êÓáÊóKÝxŠÍŒ èwCgŸÚÎ# 2Ö¿ÁầXOÎ3dÛ9 \Æ KôÎÖ7i„ú!¢‡ù”N¾ŠŒ‚Ç…x¬òÛ ¾·k¶,Áfg ‡û©ë}qN8Bï"¸@hüu¬ P«5gÒ®8N£’7ÚæãÎV°‡Þ+Ùz¢¹¯ñûCo_ck…SÙ·*/€IÁÛøíýû8 df, {jζo48´d±qR:€»Ð–jâ”kß[“ ñVa¹l.¹ø ÚXô À툺~¤ÙÊеXÖ1Êa1„1aôÊc7- _sǼXr° ¿æ§…÷XøÂh¾/,úûA‹’si2sÑ—½žDñãÍç]¿6Z‚kÿ6q?‹þ™¸™Q.»”×-þ—ïã=·•v~1[ewžIBæ¿Z5¨ÈV·Ìó5ù¥÷_;D"q»»NjáËaÕÌiêm+=ƒÜEW±“/<ö ô)b6˜â5hHÌ\j;e<ƒáWó) ”-À;b +ø ™9/B—‚ržO¾>á“ ç4#m&™>Câ5µè-ú1Ù/F:2‚j^_¢ ñ°‹¬•ú¡2 > Úøß3{UÐõÁj5Ó^=ÅÈbº ’1¬lÂ|lë …ßßß?Œýò/Döi°ƒä³X[ÇV³ÏT. †Lƒb­i –HL’㤹šÆx¾…ËuÜÄïI jç•{ÆûûôtÂXý%ö Är1“=¾üP…e åLÎÊ \ÇrÂÑSç²áÃénÛ0”ëÛý*ë³Ý½,D[°Øý”L&V¶/aúhPªN÷¹ì"ŽÿÈ嬢æßZS­›E¾>Ñ » ê?’·ÚݶËpEImUÌ à¿Vë¶§º`‚‚Ïö9°?0×G ý7ïáí¥{9ŽÙ†-Ûv.*þÑS½´9ذ7ÈšJÞeM«´1 ·;¡‘Vugu²¥™¿œ‡cÆð öŽ•å u§‡¥Yˆ'®A‰•‹5Á–Žä¥­ÀÔé§eºœ‡ 7;¢±Õ v«)éãì³.ᦈ ÒRÂþNZÄãJ¿šÇ­ó’ƒ»Q>q§¯§2ÑÍ/Ñ’Sm<.F}úx#Ëæ¢îÀGHÕ´¶ƒ¯B¹iÎn8¨)CýkÙv'‘3£Ö…>Þ-öÒ“²[²†ü{i¶–ø†‡È‡”Aô>Cuµ…³'fðwå³G± x Œ 'Ûƒ§Ÿáâ}W³ÛècÏ…ñ¿Œï†¼iCg§ê!ä´-¡Ç•£2w‘5²^9qÁåõ‡àeî\Bi~Á)Á¡ÔQÈtDîKþ®ûbçq ãí”^.H0‹—gÜq:f;á:Å,âk„rKlqÐ&&)DH¢ïé7(¬ãàt½Á¹`‹ýýúu¬$̺×}ÕVû,(ç\É—v:zèÂé2™íÇåžðõ‡˜MqƒT–GšmâF•4*`ÓØYLg¦{WêNŠõDXÓŒìxTì> {p*0'·üQƒá®ì $¥ Y§îàØ&hGtüsBþóД¢úw Rë,‘i±of¥b³ õþ½} ÿZ„¦þ8†½º¡KâAEâAIçAù÷¢ª5ôvCáC|ô-X¨b–6fWÓyD/‘Cõ¿,£Œ°v¸6Lb°ÎÙѬt³˜öbìóÊ,ìƒîÝÇ>EN´ùÐVK[ö Û#½áÕ¶) kß²a  <)Ö‹9°ªß 2”ØÍÝÌazg;š-DZƒ^íp+ü4, dNvzÎLÃçë±è!$¬ÛQfžF– åÊ'ý0ÙÊ“¹LÓNÿY)4òÆÿëöŸËÉ’¢J_Î=yM@@ûï?­ß’x^Æþˆ7»¤þ)µ2ÆO­P3J‰­êõÇË·^áS“úuÄRxç<1e1l ‘Áøô‘苦“IsR­:7VÙuaî“~£%Ø9¤Q˜kÆû ¹T"c5 úÝÐ>–ξ1GmË¥çÝB c· êð Œ!<°þG_©9ìùÊ£q™ ª#˜ hÂKÞü¡Ù7wPâjZ‡M?aÓM–Ëê˜x·Å=wžÑ‚¬Glwòv*607:šú;V¿,½ý Þmš7o”f=Mì™Î8Ô­7Ê—)+@½Î£ß»1*Nrp'‘Wň’ƒ —p8¯SŠEÓè“Õ®§ø‹Ý¦­×YU¿24½ D¨<áEñr€Œ7Ò©õÑùA¯Oª°%•o0] ë#¼i»[1ì¦Ðjò‚- 1S¹í™ãk¾ªGºQ¡»™ŸØáciÙÞO•su„Î쓌 €H¶Â'«zÏPíÖÒÐuŸü‘IF#퇶èD­ˆ·–/‚Y¼Oû“Í7yD¨ö“›É ¶ËA™mÙiŸ P¯¹³0uÁËP>”ûñš—¥¶Iï«NÚLô :çî˜d,X.X‰ü¬÷²Ôý¼å6Ä«1ö±,ѾgMóƒ²Þ߯ÚV×ÕÂga“'°Ò±^õlüßXJ¸0…ÑHæ7X~àkÙÅe[ãËr•ÀÎÆÇC|ÄÊ!SNÔ³#[Òë[6F Šôs£TöóÚ5©0…ç¸vðD$oÙ’¼L›% Î ü$YÍ“ Ž…äG¼#ï”*É ?ßz†éƒ\ojNôø0•ûsSFÖ 1?Èï·˜4P++Ò¿o”KsNB²†œÙäêùÄNƒîÞ^'-½9÷]:ñ8"àðg˸|uOB‡9‘òÒb|+Í@5bcÍQÕMÆgʾ?RìC©ú€ô#u“’ àsÞDp2À\ØÄDÊ¡öˆ™r•UwÙJÊš Ãî]“j&t]èûáFÅoë§R’ù”·:C7=nÈ L¤Ü¨Åíq?Ãú”ÉWkÁ:¼‹Oá]ë·ï%³Ó•@ÕL²W€#ñÖ-¯:jyäž´è¾O:¶WV^0/?dXÄ ®­“½;¯lYü•l.ÏØ0‘Ö†m´­Ÿu;g¥I\£B‘èé”üy78x?`ÿ®¢#jå‹X¾¡Ü¸ÂML;·ÔÛóA¿kFè¿3@€B¼ñxJ×ና¸öM̺B‘týæÑ ëÛèBÞÉ•FõM÷vN•p7•C´žãº`(&u~¹ƒ¯Ý<ì}¡*_Õ s Ÿ8M0+GÃÝ[ÑO%%×&$ö,M= 5Û!5·Û•&Y®?Ö9 ºFŒê Bõ€½ ü )¿v5ûÛÊãÅ‹¡ 4Övœ„*¼àfŒ6rn¦ï5çÝIy@`."ž¯õ“áëùåðÕ¡J\6ˆ’FK.™z¤™þÂptôè+ÍXЫá7xîáËÕ­/tPIÁÝC&µÑ ÜÜäÍ ´ÆŽT8ƒd{fIš}ä #|ZÝÎ*!O%NTrWPÖgG¿¸½ó-¨_ MÃŽjyBpQä~¡L¸vvAáà ÌN'dg7£E :Æ<ßoýÊ5ie¿ûɇ|¬%eûËÐäáY|dç~ÏöÁíÖŽ•6…K5έàpQ!îFF0ZܧÝ(M6}·lÕ'7,­‡G ¯îÙíw+ƒ dJcìŠÉWUZdña3›GÙÇ –QfÒF¾ ©J!ÔO5K#èOFFgݪ#FÒ…÷ YØÌïÝz=nïИ0¿ÛáÔíYÕú„"MVÂ"þ}ÊÎkÒ`“QIÌëMêë~Q1Ýr>"ãÝËkÛÑÅ{j˜›x-gVA”à‡ïûK<ïøàzc³w’žD6t࢙«í SàÒ0“·Wv,àb8~dœ¯¾N_¿Ë}¾M™OT/~Ëø‡«!Í*ÍÊÒ> ±Í®}*ìýGÅô©ßßúý.Πr+L#W¨J†aü¾ˆ\w ÃۀĎHòÃüöÙ…½ì·×:èo¤!ÄXƒcسŽ}nËö±4£÷ÃÖNM3¢ôu/„v›,ø.ÊCœ°šåz˜Õ òNÏ'ùéiõGoyhÞÔ(½ú儨è˜gV&¾yr’]‰ùܪ"³Ìi @¨å°=Ç®Órs‡«´‚°a|¹c–ûYïÁ>‡´¡¦ü#Y4aóh¤ž/çÆÊËŠ.Ò“/Aøv‰ƒoÃiž OÞ…?÷üà‰ÇÅ}ÉùR™‚¡ͬKaxï0O,¨ÙDVe%ê#^F]ì½ýnbèÞãö¸¹Ñs^ÇB]Ép0^¦â¤IN$½eº6âà<aŸcTv,ÅiÀ ³ÃM†› µ„|ɂؒ¼÷4׿iá 7 ’ï,þ̲çਉÉ,ŸˆÆœT0‹¸KSÆ%½|sîxöb£@’oA-p6T]›þ ŠèO¹·ÂƵ‡Öcü æäÑüÖê‘4»—O–RÞI¬ÓX÷£àÉškÐrØ8ç=2jÐÛE÷"Æpî£.ÉC_¯ó%ãšGF—*¾½Ú:û; "“댥~–„æNCr”d%›S²Ÿ[ù;ßt7çù…á|=À˜“@gM«œ· Q(ø,Æœƒ¥—íUJ6æÝa܃Õœ-§ÈyéæåÌÝ(8‡yª‹.êyëD‡wöÚŸÍÀìî}©øLJv|vlöƒÿSПåïl–j…žß¥¼Ái¤c6ók« UD°uîË@ÆSž¦.LõêŽÿà–gùú[YÝú\vp!<‡¨—3« ý¡lœ­yå]Â=‚C\ŒÀl¬úÂr3³]Œ$eÂÛJYï}, hÉ·'ùoÎJúfôøqÓ;Î/ðQ(2ÀîMÁ/íXÒ[7ºU>ßqWÆj8«¸M×<·'u¡è Q‹‹ü›Õ¤]JxÇN˜Õ¦Õ#¬~¶¼üÿØ„†hâèú˜!(éµqÆ'*ì­GÞ»áíº‚ÙÃQ/vå¾½_^Âm´q½>“µV>Ž\ ´Š}÷ ê¥a©žô-&íõœÓÐQŸb¦»µZAyúéIôšç zúf°ƒÀ°èpyl MXnè¶äñð2[qA’{ag’LFÝù(ñœú‹ñæÉ»GÑKVx¨ƒÇ(öç Ñûàï™Ý×É¿öD åéÞ o³´é$…'<¼?HÆYó9#Âá £ô\ìš¼Õ_е$¶Êj•=,k m¯§cØO³èTs]ÕÒÇk¬wÞ«¹ìÀ<&ç6ÓõŒA"• HvžÇç‰Auðœ$ÚÖš›zÞ.ZQÝžþÐ>?0ÛUìnÆgþí­Oa; àáÐHkE:¦ô“θ^F?³*DùdªÔWÇ©W×Wh䇿½Ï•êV˜óçƒF¯wBöR)#éuЦ;CÇA0zF zœ,’\Íeìâ-]¶ñ‹ùý°÷ãhã”›=ü¥œ‚³ŒÁn&5Ü.@õý:õ‰¶V2˜ŸDæD‡¨1 u©\>D…­ÒȲ— ?gja”¿]+ÙÿÞùÞoÔQæo.¸BïbÙéÿE#ÀX˜.oÁµÅ¨ÃR­Ô·þ·G¼æg§­³ý@÷‹ª‚©Ù—oàQád¡|°Ë\À—ÿª£  ‘‚½»ŽP&"&\ãѼ>=)… ŽÀ0—ösÄç¯j°É%çª|žA àõ¨Ì~;„ã²qtþ’÷I$Ù”úÝ»ßrÁwìmŠFa¡Ã!›õ<€C¹æŸÒN¯ª•Yz©~Z½LX‘®Rܦøò6c´{†±ÅŠc„ŒlƒëÁs5sÇd6/5´bHç…¥JGé¶LÒØ‡utç‚D¾Æ“<êÁ\p¬¯H®{qó_-‚í¹åç·’@ª1¥4Ð{MNN7ÀÆøê?‘¦D>KÉ/`ù+½ÜI€³™eÏ‹¢{ Éß`!´}±!œ×„ÐLM]¢õ´Æo!Tdfkè(»`Ï!¨F[lßöcÌÛPT4ÖžKµ Ÿ_Þ^.„›§€×ûÂLæùsíhµÚeJT‰HÙx^wîÝÎf$¥ ú¾`eO$ú\Yò‘Ô(iÙŸún2Õ¬µ€ÂÖíg‹í¸Šu+:#~† ”ßuÑdS¡3 @™ 2 E ±Moœ¬#6HmÁí-ŒœÌºG8‰àZÇèÒ-ì¥Rûb½‘zz¿ —å¯ZÛÛe•Æ£'ÓÇw;¬Ã¹~b ™t™WÜÄe¤Ù«DÚhßydOÄ7b±q Ã^k£”rG–• ô„¹÷.zõ\C›îo=”’7øµrÀÜn‚”÷ŠÉ-4zÅú¹ÊܳÂò¦íVóOF a²Oø#1·c–¾üÙ*ÒuÑk}v_†Ñ9jF<¡gqÃý¿Q¶~•‰Š-û8¬ìÓÉìùFʈá÷Ïofœ¿Ž“ÔnzñØM½ÙˆÇ~„=¯2bpßÑØ±áQ·êTŒú¶Í9¿o7U£Ë™Rzß÷Å·œq®Ë'$Â1Ž&: ŽüÞ\;’ÀßÈ¿…Ó;¢Ú•2ÆÕ÷úÔû²˜ÈÏøAó¬^ Ä—Òd4êW¿ßUäu^H‰Žz·Ò ã´¥ÂAñh+»|,ÃÑìV¾û\žSÕ1ÉG·O˜ø11íüì'¯6r"?‹ˆÉj÷ºÏ2zŒ®ú¯a K/.W¬ÃøÜÜU¿Ü›¬$3÷‘ü×à3wÔög£8ggeÕTjn³PCŠ˜N̺´èwLªš9tó½¹HeiaûÆëý«»^(6|l¿Ãàe7y±ü¼Õä€ZQÍkìẵ½™|î„à¨è)‰d)J8N‹¼¨MjL.{v52¾XGÅŠ‡sA‚Eã³blëÅdJú–ÑoovǽtH2T“Él`?7Øë>N©û›áøÊk’ìT¿?„^T{VÂ#f“Ó§2Éñ;hžè«ÖJ7y©Ç®n´ vÄD‰$v«÷´½ÛPèW˜3fñ9Ý~5ƒ’(÷MÜ2T«hòÉ"PÔó­‰ÑbÑðçÑ ¥ÎX)>ý“ü&k\FŠhì<ßœF Òþäd=ýf ‹ØŠDÈу Û¢n#B•yþœ~týdŠÀy•¦$èš3™.mjä\eµGžª?¶ž–2Öüòæ}¦BB€làcQä÷fx¨ßœ¼l†îD§ RHdôÖ:º‡ñ¿—‰"“;Z¹\+‰áÕèÞæ7;ØÖMFçÕ.® §ÐãÜ`ILHeÁÉ#T êš¡=×§1ù3(©*jo€KÝv‚ƒƒ}ÂÄlŸŠ8Ùáz8S-º=‚ƒr§nUúâl|p|ê÷š)Á+®•¦-Æ ÒöÞtôu¦ð¸)5ùÎxCÞ¯mhíb­0®Tç@{Ì+E† ú‹\WC-ÈÙ¼úpmΒ꾤ºS¦}3aþ¢ Ž»IJ·4[}ûºEzü‚_¸@EäZúATNWZ:K!|‘¹/þ¹þöÜ@3Ͻ$C"’‹_)°¿–‚:ìK6hð}›Ì’ëÛ[‘‹Ï»œT ½öy\Ó²˜Ôe¤ô×Ë­)¢Š×ü$Dß’¶ÿ59Â…odŒ4K1¸¯U|ß’ñ,Mí>âbÝøãàdMF03¤‚•&½!¦µwºõdÓ HQb‚®rý5ȹ°ØÄ¬I@ ­Ô0hónYo)¹³(æ"õ çÀ¿Š¨™mÍ Ñš«¸yá­÷¼gymâ^qôßW”¶EsÐ=ró^Êñ3†›µÝ$5fÏ,mÏúK0¹ÎÄô(xr_ê aSŒìr„'‡97¤á㵓xÍŽ"·s3ývn˜™'s,¾‘9ëNÙoàÖÔj3­«@œ*pSPºTÌ¥Ëùn€!øñýŸQ"~¢Ð èI«q¨](÷†ÚHŸwpý“ô¢MG·Ž_üû¹{¾X1ÏwŸób7$K‹¬,ÈàS.RD9.ê@^YJm<Ýý åi²ñÜì «+\jb<ùgjxÜ÷ÇAàLªCâ“a'Óy®'5âàKÉ tvçµVÏgûûhü»Ã#¨A ¦÷/¥ûÞ8­vÃåzHéï€ÎU^Gøó…¦üÖ°¸´§XèKÚ\ä3ንåâVBVk}¹vÇ'n;Î8¬îüX?Nò@¬ž8?OÅë©å4t€-xÂeMMÏÈWqy…Fû³ÌõÕ |DR‘MñÇ*Ê·DÆ‚³Krö ÓŽÖo9ĈÑ…›®^Ÿ%Ì.»õ­8—Ûª­i3^/I”Ú2ö†}ùí´ó›ÚÌŠ²«ÒÌ€×&…ãÆ‡>áA¿ºÚ+h+bMßµbf¶…Ñ›ýrãÝ?æö­!ë/1Êç4}œóò0˜ù)±.ÇC@ý)AÉu3ºù¿ƒîw·5Nïže&¼ø¼ê¬[‰¯ï™„”"´ŒbþÃçÁaáÎc·Ç$\¾±»Ye ¯(ìÞ_xa°ü µa×·VêsÚA«T|é§™egª‘JI΀ÆÄñ«º Ã9ò/žGÞU€ìÈ-MÔmþ”vn î ½#Öà$Îxÿ[{Ò¤¿ºòÌ¥e<‡v4~}8ƒ;¿3bîäs5¢l#6öW|ûžÕÔmï¯Ò0z¹m×S\ª.à _Ú&ð_WÑ0:έŸók[Ñì‰Z‘ç±ú÷ØÍDE‘®2]ZT-ø{!é~ˆÖ ã>BçŦJjv{p (mt¼$vª ‚j˜B=X׿LµÌ¸#‘ž‚BÚíoXÿÿÙƒ€ Íã4œ¨[dBwõ½55$mÝ\ø¬íÜl€|þ.îÿxo--ëïnmëôfµÚ;ºØà-l¬Žv6£gššîŠ@Çž@½@-}Û@'[ ;6YRiÉË\€ÞÖ¬þ.ή^’þ¶”+yyý7˜ŸõI¼lò#X5uXÝ<¬"|‚¼¶Â"¬"¢|BbBb¢OYõ¬½YÕ¬]Y…ÄX….=!Ia±ËƒõŸŽM†ôÒ—ö´{-ùRéù?™—w6oowI~~???>?a>7O{~A ~!~!!Þ˼^®ÞÖþ¼®^ìÿQÈ¿ÊQzÙz:º{;º¹²þ½·¶qóñ°±‘²þ÷ÏÆY»ÿ'ÈÕ럼%ÿe¿ Ÿÿ–ü·ðË@IEO µ·›§¾››³Ì4ÿ¹£'ÐÏÍÓÉ‹UQOXšÿ¿'ú¿ÊTºüÉ\ÊC‚÷òÒ|&,)"lú_òÿG¢ÿ–]ÓÍÎñuÀÿ)» ¤ ˆ¤ˆà?³ÿ—Dÿ’ ÿÌÿWÙÙþ§¼Ü}<ÿÑ-v¶ü@g  ÐÕÛëRf‚ÿ«Ììl%_»yºX{Ë8ºXÛùÝ]í¥ùÿø[¿ÿ½—Ã’ÿ?Ç¥ÌÿR­ÿ]î r¹‚\A® W+Èä r¹‚\A® W+Èä r¹‚\A® W+Èä r¹‚\A® W+Èä r¹‚\A® W+Èä r¹‚\A® Wÿaé¿wz]íl~l²2~·V… n*«*Éë‡÷¤9§l0õÉÂÚrÌ ŽAü:j·ë’=©ZW¼™òæºhéˆå¬,p°ó¥7ÚÍ.dK¾^™­NÐü¤EÇ9ë¾ôÎ’ÿ®|Ó=.ïp…íýÚ"‰ÄíÅ yÿÌÏlÿ¯@‚N°ÒËbË'Ò̯ᵹs=óðs×-tEÙåÇž)Nጆµ£îòóß¿q¶€EÓº;´P3‹ÏáÄëÑáð³†oê©|mÎÏõN¢Çß¿‹6+8&5çöÞ}Ø6¯8^’­ðwXÂ`·Ý ‰œ¦J$S-Ûü7‡LJB.’‚*&E꘥Ë?g üŸÝQMLÑ0I7Jy_tÿÊ´{r—˜q%JV¤ŠY8c8h¯Õv€39Ôï7‡î6‹+° U?MY÷Ü»Çô ¥$2HMÎJXìÂ[Çý0ÍR ·åÒT…À‰JBš˜Öë7¯%ªˆ'¾B.…1îTåÅ¿“ZjÿðY¼}„#3¸§Ý)sTJ£Û=Ûä“âs'yêëû|M\¼>Æq^<6ÆE*‰`u2™MVv‡‰!sié"ç'û{[ £6ŸËв…¾Í›Šzߥæú¢3\óIšÂMìÏeª®ÞQSaF´~cUR´ÞÅÚäq¦gÖe¥ŸèÏb_íoë®Gåæ4¥Ç/èS² ­Ô‘K„–óÕP^¾vǾ¤ß…ÃŽ_Úý×B ù“¤ÍT—˦p ‰qa(O· ŽÚÝáüNæ×‚ó Áämj}ï¨_ŸOˆi~-¯¥]Ëÿ^˜÷r •~øiÇñØcÞüVÝ ƒž01¥Â+3Úz ”h„k<ÿ–qj(ðk7 ®(ÈÓX*šV¶sr?àùsŒj,…îKæüQ¯›Rœ£æÓ½ ©‡‘œ,¯p´‰?¹ç Ϥ™šàæÚ]›ñНæ§:&ªý¾Ã4(Ré}÷§UyP¯q"M°î‡I“%×JØ"qkSM–¹ï'ïÞW‰¦D¿˜>Úþ¶ ÐӓΑЬáâá_Û.›wL·Rg]¯=Ý™±°'–“±b…¼ˆ\ww¾=>Á©>Í {û}•‚–*Êp…êî£~—jõ¬L)_Û@ädçÅkR>á[Ï@ÐQøc·/Qç¶ú<ŽÅß r²a˜µ‰Ç1=ȺT5‚jލKWùmW<µçEpº9ŸJ~¼ Ôþ(«4PÂÓýûv,“¡dõt“Ù÷ðq¡1»ÊŸ©dM¢/È›ŸPy¬s#n”ÒE1QŸlž',˜©¢k· ®ºæ¨÷?¸•‡\!z¿iZßB@k¾­Ïƹ÷q¼·•¢mUœ°`g5]N§ÍhŸÃ/kÙ „@œoÓÄP©ÑÖçó(#r^$Bcôh?®¨·vu¶k=¯&.®Žkv¸ƒy5‘Ýá”4¬å¿åõ•è°k7’ >‡Ïµ õú™¡I€>cSïÚvQ¡ã/œ¹3gc(ÌÛö!ô1|Ž~Úî´r›Î=ZʶœG“2o"ª¿}¢¼™ú’E5q µ±÷-ùÚ»‹=´òô›ÑáÖÖ _¦öCcªR\¿âöfKÃÛ­i Ù‹=Ì’¿KU4³'šßjägœÌ¿àìµ[eT1¡·ºzÖ&& «]aâRéÔ¼¯a'- v·âTSÝ5èxÜ G‚âne¶-Ÿ @ÎÆ5ÎlqÛ1dÍY)¹·«J:>´[Ê{§¿Køóù;G•~´Cí»¦´g«ÓÁçÁ2ïÙ)ËwM¯{a$´{ðߦsÛ}Ö^AS[NRßv|Ó¥4Õé?LËyÌL©)õ&è°¡ŽQÐ$«^’l.U9¡é/ôñ.ùÁ.;£ ™…±9[Õæ'qPÙ/qËm¿ãJò…Úà~µêC3VëkâB#£rñùé}}ò9ŸãÕ-¼X>òeôª²k‹ï©ͳén,k ³ˆ èÓžIΟV  ÏMõg8=viô%[ëMmû³êŒZͬ([)ãry¹„(ºˆÏ/>½öòÞ—éÜ´rÎ’úžµ Þë:Q#C‰^–Ô?mŒ¨oxú¹÷Ù`›f<³ åo\Õ]• ; þ,"ñçµ0¡µo"âÓp¡º]zÄËø*vÎ[×ç,E±*›Ã™z£è—¥ÅþjýêÅÉGæ±l¹jBYÒæÝ/ž(‹ç% Ýë_÷‰ÈŽ:í@ ÇAT „+6Û÷‚ºg 5ïô–}ò€¡y*tE†Õ§D¸nÒÚÚE)™rB˜çƒ¸&}–vÉñ.eó³ûÏdi~HÒ&jšÊô%Q,Ìî#Ûõ%ÝäwJj%êìr—„Ù ¾4ß5D—­¹‰ZÝ¥A½¹ãV—Í©íCé4HÜæÚ-~=vz½ˆt;§J«áäѽØ5 ´Í‚G èººôÖö GŠ<©d³œ³@ ü5;Æà°ÀF·¿»JU•µ”Ê^½û?PK£e6;lj)|[ˆ ½Toolbar_Prefs.png¬»sŒgA×ïÛ¶mÛ¶{Ú¶»gÚ¶­iÛ6§mÛ¶mÛúõyÞûž›÷üu’s+«VÕþVR{ÕJ­d'ŸìpEy x x)ÉÊG¢ â¯wòô|ü;€9‰H©BýmÞPÆaŸ¡í%µœ€€`Qþuàù-ßÏ¿"–³˜¦³Š©³Û/G ac;C"q G7;G+'…By m{Gu ÷¬«T«” &´‘ôR¶iÚ9¸>¥òðþÆðFÞñ“5yŽðGcÆ-á3ø,­Àô…œáþ?ƒ¶ÞAA?Êš1+Â[»þþíŽííÓyÞ Þ…Ž¢ŠK¸9.²ÝΖ¿" €ç$ûiÚÝ*ëf^ð¤Ò‰‚®ÒeYsgÞîqù Ž·²e`¼x¸WlB¾a[S³?M LøØáwh„ryíñ£Þ#oùQºÔVÙK­î”»›vî>ŽdÊæJô\{À_°ª”âtŽIiq’Ù‚*|´)Ш ý"ôüNtA’ÞG!êÝ!ba÷íœtî‘”[´­;Ù—<±«¾%ƒ õSƒz.)¶ÐΡÚB³ÍÀŠn ¥¤H#Ôý(¤ ñŸ9ÿz«˜ºG5I°'i(éïá æ‘É{Õåúe9{Yžñ7휞tQjîÖ¢‡ƒ¤Ò§(™­&KlQƒë¾@ä0ÀŸöîPâºc+Ÿùè°9ÿ¼ç‹Ô :¯·vé±°v{¨ž¯¸0åoéÅP–q(j°\{{?Æ|äf¥Gð š>[AäÔæë¤Ã ís}ýœz¶)Iqå”m–þÑ?›³Ñ!cö_Æ9ÇySͤAh•’u©F´¤¹dHþÎs¾Ç?…È%2XB>}ÇîaÆŽ'ä\GzŸºp&=2ôôsl±Z ¢¢cë­Åþ ØcBj¤®øqžíúŽº€¹i,Z*Æ&~òøÈº‰–¢*Ü~cÑÜ@ã8ßRŽM}ƒlÛŠÞÝ,"yyâ‹z YÏϺ­ÂdÍŒÙB}ñE\€"Òùd•ĹAùJ¯ºÒ šßçÉFZcV\)†ÅxcDÊ èÎOi¾8,íí¹1ôÃUþAòJƒœÛù âsˆP·I#ðúßîÈ ±ŽíÒÙ{û[ ’6V"âïÛã€åôÙ¨‹Xó€¸fm¬TUþVŽÛÆpÃôöX½· ËšÕT§y«ÙñØvk¢7š˜’²ˆœÔš£~§P\-w<½ÝŠDä·‹ïxùÛMx$÷x›´ðŒË>jzzðxŸóÝK ¶8 ]AcÑ6/ͤb7+cÑkMÚ¢M%”Ù67âÙÝ¿†.¾RÜŒNº¾€“»²»ÝT‚êýøÎ²ú ýlK|.ûs¯ªú†¢ëKàÐ5<*œ“ëî‘»å’Î{À‹Ÿ –"Ñ%þëá÷”—¬itjŸP|{üíJyÆÁ£Jº–ç›]$W6K°Þ×ÖG6ì„2ù¨~6°Ú<»™—úfž¿{©²ñ6Ö½Á¢o„~‚ñÚ¼oáÎÊ_QÐz6ÞÅÙ\ºsz­ã±Y\øgûÌšarÿ<1,#Åp v(—V‘Ú8ª„ŠŒ,4ÆÀѬ×*…Š˜ýbÃ4½`™L ò”1^#~#m¨È ôVÞÝ*f™6^b­U*^mµ…ÃeµÜäž…ˆ6eqǃˆØ-gu?‡ËyoÜù‚¯fÉzþè¼$¶LÅ}Mõ8²¥5Ës5"¥Â/3rž¡J³7Qi©ŸuvÌ£–ÔÆÈ,â~Hf œm&GzîS_03A›Å›§`^úáÀ§Àç´ªµ©êy{ÓmzŸŽ&3Åz2a¢“0—Uà™21bŽØœ›Øê’÷|PðØ TŠÞ+®Ç¡€ºº©ì{<ù^!aNšÿ«¸Xb±Šä¾Áp랺Kì´“r-LF±ˆ"ÄCúß„ÈæšŠ?±`‘D7z2¥¤#"QÀ-+GÒaÿR¯0ùÁ%…L Ž8’ØxKzç9Ï9ÉêèÓ⮩•Ñ’9"qà§#–¬£kM?¼PÅn«_9ŒÙ¤ÞÞ2HÖto«ÜŤsŸ^C‘‰ 6M¸ÉlN²pápÞÚî¬uÀϬ »þZ°pÐÇ8Ф™‚_©â·urHK3`e¶¦@?Œ: ~êxŠóˆJšA¥Ã'׺ZY†NåíÁXSæ Úø»A‹¸Aø®IJ»0áJVõå/†j™!‹ œÌÿ<öþ)°÷Ó6¨7[Ùþ\Éö•ΜæòÕ·$ËÒ¼uÝRÜÖLOejßÓªNŠìÇüÿ»FÍÉð|ÙƒCc~4ŒQjÕlrPõ5Ëá°“#í"]‹£”ë-ìlM^)ê&-Dœ³c>‘Žï£‚ V›VD„!³Ns)×Ú&Uœ"=PY‘5x„¶º°—"/øWµ©¶Q·#ÇÎÞ¾áá¥ÀÈ)ûj  5»ð X ©[tèðíœF âÐ Uغl ¨æ…mÙAØ0‹Èú\fcM®èÓZРWfAÚdoesŸÄä^³|€™UÜÔvCKŸ:Ó÷0)3c_Ò5ü“ÑlÆJÒÓaâì-õ+f:‰§Ç…9ì6Éʇ\Bõ­ | \ýî>É„-Îaj‚gÌM=/+Åã\­¯;ú²:í 7à½jq°¹ˆ•s-Y³a,,HOÏʉ8e¦Èb˜-ÿÄó¢l®˜€J/ššoÂÚh’2¥šŽLä‹íHS}v…Þ{'¼[Å5~Ã*Bêb”/É  &öÔL•'Fa¨Œå ä°Èjß莴IƒAbaOÖ¶»¦{oÍ ?ùÓtr!Q"gþ·£ÐÂ@õ½2ý4yò[§Y›fKa>Átö÷ho‡ÐsAJÈZŽóÝ#v½5×K¯f6“7‚H{9Þ­Ñ_l/°fð‡‹£†¹üvavZ Ý;rºó 3n¿ãÀŽ“Û'›àÉü›k=*YŽ¥ìVº‹TY‡³±ˆ8ŸÝf¯•ë[þ}áE6P³0ªu5ÛÏb38e…’à‰.&îÈzƒS»BÄ=BÌÞá(8Ái7n³V…l…5`vø^V£k§Ú2nf,6±\$ʽ6‰½Û0oŽneLžP nKñÛ!,[ž–Ñj÷YÒkp;ŸxàUlOƒì½“{UÒTÒÓe±È(O@ªñ¼,ãë~GÜA OWŽ`Ø%¾£–F¥D»¡ÈÁ€ª˜¼Rú“1[OÙ2’7ñŽë‡‘è~J0eÑÑmƒUæ‹xæÄ/ÙH>¸@œ†øYÕLP¥SÃW*,½pp´2K˜™x© Ÿt¢W…è¼=v‚*Ž*J‚,Jñ¼´8Þï¤Ù+æÆÈsŸb3¨¨. ÷¯‚¾§;¹ óYw6¥E­iÚiÃéèoÍ å½g»ë¦Ìö>»lŒ·dÐB>Íî"B‹© oiÚòǶI4B ¦Äþ=¶PælNž›jǪ¡azdoˈ·s~óž‘7ÿoñý4H{ &ox-¾0Z}Á/Ì™‰ŸDœ -lYeu6ÖU0xxÍI‡eƒÕR¹Æw…Ç.±Õ³Æõ¾\Û Ø ™ÊrcY÷ÍªÂÆq¼¦Œ™†ó™òŽBð^Û·HÎbø©”&†€ž6|#E“ÓÚ5ÕÒ²ö $]¿Ìn[i%+â#)%ô’v *»¶ƒ”³¶Ln›ï4Åœ0ÕÚŒX\î˜KÝÄ`aë¥Ä/9!ÿ9–ä]oäNŠ}N‹sù*ÿÉPß(-¿t¸=Ší€I‰@1¨4ÃY¶x‘°÷FÐ0'f¯è<ÍÐÆígLJÁÎô6é3Ú¸Ær" Å‘Ÿß¬:Ê‚xÌO®ýSÑ)KrùWÃDH@ã'óýÏJÃÕ!J  ûe–þ—m™ö醘9™ß3/æžÂ\,g½‡j»¤«¾R S¢UŸ{ÐÀÃÖ…{ °×Y‹+©Â“7é³87¿'~r,ÇÁü*$@,õR® F<ƒ‘©Î1äµÚrÂ91RàýÚ‡¯Ôš¤Û*zr`r(ÌŸôÊ)Õ2™¸üLÑ1^;kg›Â8 B|"¹c+7È rCeýÞM„ ôSF2K$AÿÍ\´Xýs|™ï|–üÊ¥>ý+˜ jo™LŠž \÷“Ñ×¾~"[Êš$ó>Ü=ÕP×GñsÐk}(HO»ÈM1Zb8ù<“¸­5%&]£¶ØÓº/³@Q'AÆ#"Û›9i¼Ó«à¹j‚—c²h;,á⎋åýcÁµÔÅg!¦º÷©Lç-.óG •Ç"~èc¯?â¢ÒH9{'ï:\ÇAÇ@~—¨òæu“yª~ìÒUÝ>X¤/O„ç æç~˜\k±ù”ƒ¥\›Îü½pîæœS+!§;ÐP˜ÌÉ¡ &0f‡7 ª\nÅ'ß¾`uA׌¿à¦)åNèM‡ž7ˆL&¿¡X±ß‚dò±ÆÝIÍÏ-ÜJ;?‚ªCêOšÏ•˜Rw>F+‘º-ZËžU;þ}å¤ö£÷©Ÿ_¦ª_êE;9·¾À, 7ÁÛ^(ñÖ¹xIJ¡Oe*OæñzˆlÈ' ³©á1V£|nYJÕ'²ËN¦KN&ÎñO½äo‚'ú ã/ÜÓu3U«j èç‹óíŽffúMbC_¿®F¨7&\R‡Ú'þxVÈÚ¹Œ…;“ZÍñlݶ–Z3®è°/ë4ýiTÏDÂwíB±”_Ó¯n9¯l9W³C?«élq}m_T´S:9d¾!\#a}¡ZI…_NþÃùxº*—!ÛU¢ÙõSmÕ#ÏeÙñë°Þױ—f^ÁªoÁå7¿¯^\(û¾?_%õŠé²Y៙qͦ•¤nyÍ&û‡ñgÇ.vÓ.öjÏŠÉŸ¸ÓNàÏ]|ñ‹Öóñ§¬ÏéÈ­Uq"q#“²Æ2Úí¶,ÁëÈhM?¾ÂîM9K¾ùH™H¢uÛ³:ñËTìöÞùÒ´^Ò…¶´}¸l,] ¾Üï-k¥%Ü?FìÊ?*¼‘—¼O҃ʶ¥SAáš<1„º L¶Ôüï³ÍÔ€ªœüIüÛ‘pt¶É6†=¶$—dº®W–—Úqìjßç?µ70ö Ö÷ò‰XEL¦"H°{¬Uw{Œc½=Zz,…Oç”S(Žv&É]µÞ¾ØT]ÊN–ãùN´ÐÙŒf/•h¯3ÁÆFW¸žŠÑ·q¹ž,±¿”0µÐ;­ð¶ø©/3àà@,±àã"Ùà9\>‹,ngqpDéÅ‚lx¥àó!b‡_ãý+•RÓ‚ož5È!bA˜_O¶nãM7 Šv/æÆÁRC9+yËUsT±ŸLøùlþ¼µ$. m-y4õ<ÓGuI?Ò ­Ø&nÇí +7˜i’îäHË…à‡øÍ ÷0ÔÓøçÂIäe›Ü„p2ƒ}9ϯ Þçñè¯!ÅN{Lcj£/*p-j²ör¯S§8–þÁq‰Å…ù\µ·´à@ ^˜þ9s˜ß%Ê~ã¨ôÝý¥æ¨ù¾é_Fi>~]¢Äj#§Dªè¿Wv­H gi£Ahu·ºŠ ¿¥TO«á[ÑÌÎÛò»^ÇBXœ $£¸°Ý²ú›ÉÑfµÌb€xe¸ÄL›ZÄ–×Hci>˜ÏÃP®³P—dzôoEöíd»^¼›–⧯à%š_ª(³ºz ôPå¿<êjF”Jy·OrV^ߟ"¢GøC…b§½7´˜|Àžý;Šóë¾à^>#Ù^X‘?b|ÐxŸý Œk_™¿Ú”,U­hq¼UÅ4ô{Ý0›w979 ^¦–~éÀ[ª¾k6šÁ,ƒzJê*ªÛ¨BŒ›ãû}–Õñ¯zu—4I¥Ž{ußìÜÆz Æ\^Q2f7éØËÊÕ¹îVÞìbyÛÑ'ÿN0}U¹>cîú}‹ÿÛï«Ö§è€!4j÷‘®ö¶rá³I`¤rˆÐv_1$,va§œóGea oÔ¥½AP7ù2áÌéïÒx~D*ꇄž#‘ç~AiÔÉ\C|eÁó€{?`¿XùÏvs›/B¾Ë m&i¼ˆ‘ŠøØ|w/¶”1 Ì·03÷f\GuÖk_11— ŽƒÈM"®Æ‡Óà—®¯° BÒBøómZ6 Ò?rßOÃóïe'Þê^vmçZuɰò¥º\¥Þ(Ç:d“£NçªÝ'#$ªÁ%"<é¯ßvüoì¿mÎ3OÑe=lsZe^ÖC‚ú¥ó‘F †Ú(™ò†|!®õ+ú&SÚšŒ‚ã5ŒidÏñe8‡µƒI¼œòÝÐÄTsyîáÙ¨áé98͵q{ÒïžÒ¶ÓXê- +0f”^E”ÒæT»·3)p¿BÓü{îñѳØþ[×àËž^Ø¡ôȸQxûãEm3´‰îĘÑöÑF{\ÆËéTãt ˆf»ålçÍ(§-ÑgSÉDWÑÕcvÙÓ” .§ý¯ mTùô@dß2'çhbºAñôŽNÕð¾lÓS{ð%üp¹=Ñ%vÀcªÿÎ#(áçõWRØÏù'ý‹“KÁ÷J<‚ §øãÊ¿¸ü"ÿJ*;à%ÿ¤’ê´vwºÃ±¹ ÷w†[çäB±(´äa4ÍWô‘a+„ÎpûânXµe]M°£¡ rø0deÓOñô§yó»>Vv^žv_ÞÕ¤ˆþx‘KìÔ—IµYF!»eÆ‹ä‰ñ9š¡¦óó ·0îdu®õÓ]|VéknÏ2Îõ؇{õ“3Xþþ±óHœÊõˆþvΚ/l9ϯÂLòvô^lÈ«~•ªî1fP`ðº]ï­ø ï+Ê1,Ì€pŽì{ÉÞ¤ù(Éä‚8ÍDlÜc[‚á3ó/éÏA4™ZžK™ö8Ë_¼ÃRí‹s1%gIè<`aL×B Õ€¿LŸZç⠃ߊ0ÌB43:Íã½è_ç€{TugR*w3Ç…äᥦcðËô!‡«0)•yžÌ—ùÞœA˜€Ó¿«Frâ€V~¨NO€z3LjïÜP ãŠï|Ö¨¬o$økBÆpN3…|o&%™@«µë‘ŸÜGœ?B*÷E;‹^B´Øç¬ßà‘|ä0(ãóÕ1Ø6‰$Ö=æ‰ï:z2tž3ð«T¦÷Þn‚–kìy¸ðWîÔwÄVŸŸN¦=|ìµÿ/Fµ‹üfhÊâ«ö&¡å‘A_òµÒçÝeå šD\QðÆã£"öQ”ïVкµ_89.Ñé-gõ)L&2þÓ‰/p‡AR ô!ê9?Ž“í-3C¹Sº}XPœø­à{Dtñ(ØÃ¤–—­fäÁeÀ6d-¬–Ë&J×_4ù__øÚÖä—÷a#ˆzgÆßŸZAž?ö@?Ñgjެ¿¸\ÐR–ÞoË>«z”µ/jHš<î¹Å€ìýžUÚ©yQ!>eW?2ªÉö}jêgªñ{žýQ¥˜QÅ_Œ¤I;ÙaFî¡wÆ//šâÏK9’ui>ÅOX(ûìbk¡"ŸŸxâ¯ÍS~WÃñ³èwxú_€zo ’„±ܹ-vs]”'ð:‚xµ±iRNªef†áxŒ•oÒÚb§ïÿA¼ðºà±a„êSy¼ñJ Ä]Ñ Ä×cî{ì-ìȧ[fµêŽÝ0•uÎÚóÀÉÑBŠ„A E?±º°©²{+;aØNð‡iXÜÀýgôH UÑ#æÿ¸MîØ_ü÷ýërÓ¡¥21ìÑ£LÔ˻ʕ ùÜe!HV"¹áS*J“¹õà ;2Ñ/±ˆþO‚J•6½'y ‰NìVñoPk…ªåZQÑo9;—iж¥iˆÚk³ŒX˜I¹yr'Ð5‡¹†îò€BÜרuüGBæ” 3²ÉP´x®ÄרjWÕá/iL~¿œBõ!,«Zðô— m.Ât,H–_›ÜéîX5Ö‹BÛÄ~䵘 [ ½møº;YÎÍw¿çí4™á[ÎR†š÷S-ö³vE'Ÿ²póÉs.<ß\mªÍô’­wb« ØÕçÆ,t• f/Ç$ëÈÐ]Š’!ëЋóü¯15*bI·%2É Ìp?­cXŒ~Ä:jªö"|®rÛ7K“oÎ)h^aÝ!㬠®°M0ˆÓ|c·XwãY;ÂNB›ùI?þ–ïÊC•àE#í§£I<ö(àù9§û«»²PìÈ{HGpÏÉ<MêÎÁºë^IpììSO‘­ìÁ\Õ¢e§{»Xú˜iï2wxN=ðu|z€›ýòA®çÃIgb (“ì‹'›°x‡,w¥à~?êËXX/¨“ø5ö½WOñ3íØüÛ >½§!-}æÆhåidüDYðÕÎ_}@ütê'|6(9rî¡ D³ ½Z¤/zh‹±$þ…`u€X;u3mÅx¤¶/fý…õqž¢zalaÝ;GaÐw !õubYŽqÄøƒþ}Úe}@ê.Æ­ û#¨â\Ýw}ã#·oÖU˜eyZË,’óãȢѶ©ÅYÈ}f ‚Ð;d¹ù­š*¤+Ó󢔆Ã兩"£áÉ¥8²þÂÕdùBµGƒbô™bå;L C­ú[ºVC¥f_þz:AW‹”£ÀëtXÑA³¬ÅŸÃc­N_vÊZHÈRヱhé1רW°;úào9;¢úó¯4_FŒC<|»Z'I 柫Ë:Z6Ñ,s|8c ÌÞAiù)§>‚j]ß…‹–¬Qz¹¥k×èÏQ­Mî~­EF\#—æÍf´ê Fë Cín0¥ö±„jpkpõí,F›…ì7µ-K&wûCÈïÁ,¼²HÍ_ |qn|vÌõI¿¾;‹Óûa=#úø¸¸.>Ydl SÞK£–u¡•JE#`L#f–u9mBØ‹Éeë{œŸ¶¡Ù([xZ†x_Ïú/[¾5<¡VE 8¼:®zÂ^à?IÐp‚î`^]+ž ’r÷¶ùÇ«¿yÞ@žÅkt¢9¥f > ýº GHÉq.GH=ÎEVã£<0ÿaO¤›(Òf}{ªL¯„oYg·Üy³Zt¬«ý~ìý]åë’ƒüøÄìp×ti¶˜‘IËxoåúöÜ3©\“=Øÿð¿§öx"Uôã‡lϾÊ* «b¹Öb1‘½ð°Áúj¬æÅ>ÖY¶˜ ~ ˆ&R(¾cŠý†8QÙ›h4¬ÝÉØ\TkR_@öï“ò Ì¸Îr®±[‡µîw- k¥?³EÍí|bPß“jàÆÍ–èl!о¯žVUÙ¼7- –bäÐóýÄTø#ïw ài««½lÈ•¨<Ý¿ë¸ò¡ó½>@Hâ½<Rxqê‘êum>%ÞÞ´í Úàù2¢Ó®<},‡lþ€t_v%Äuz-‰íáñyoâäêM¼„Ç¢n UdûÎK@Y(¡´iJmÿŽ•‡”0t˜_/HlQؼííìôI‚‰EÇ¡UÍ÷¯þzÕT¡ñÇrCh©Ã³v9uÜZqvèT*ãã E@Ðqn²p{‰ûÑ.“ÿMß¹ æ¸%H„Õñ¯¾{ý-EÍDª,XÃHE¥CÙ2@È4vU–èt˜—©@ìžäÆr‰tÿ…ô ¿»³æ ó:Á`ËuOæüJ3xÁ·x°rëÃuå\æé³þò3S~i½´zí:¯þzעůsÛùÝ’pqÅ–MQ]~oµ}âTz—;T]tÜ>è³­Ý;,“k[¨ 3SNô<Óír®Ö*s]âÁ),ǵVuäüEœIa¦ŽTf[ãâÓàåØÒãõ!ðÉbMµS›€\*÷½†Õ´…¡çÔò{ úIè{•¿ß¤¿÷;æýG°Ä=Ê…­.Ãh“…¬Á¾­DÄvA‰ÉŠ%üŠÃ–]_öÿ‡*AÉ–.Æ2;6n©À36áÆ|¢Kˆ¶˜4\PÒý„à¸BèÛk¿ú]C&Ìõǯ‚C.Z½ãP½"%«ÛÀ嘇Ÿ,šb[vø¸„–l zMÍÖ/ofå}æw(XøÑäΫM0išß ÓÊ͟ô2¯(hGÅÙ׆tr8Ò,V× }\ãA]Ô/Q?ðöõT -ˆüOÝ3–ã…ÅtDiìš\Ô±4e~53 X§–µü×Cc‰åbé8Üõ. çRîÿ?’à1N¡ ¾¹©æÍ.Ls_ß ˆ½'x½öWiǤ…^â}Á¨¨íÉ¿KAå„çëgÑȦÒkŠƒ…ꤠ>¶(*ÎX`ÎD,Ó`²žˆ–üÏ!q8“ róð¦Y©S2̦SçàZÈ ¹Åž8à ácæà¥ÅC‡Ñý°ƒµ×¶^úùÀ0Ed6]ÙãÌ‚£®íùc‹†Dv™>w^'xÚ+!ºLÌÒÊ4¿hG bþ8fž•Zš~žãÅaþ$f•Z>+;¨ѱ{:,’ؘ9¸Rçlƒ VÇ@Bßñ"F‘8ô@"I][«µ‹Ñ úÔý/IÓÁWʼî6•"÷ßì‘Å\"'È4H´<ÐA>kšZëÆç–BQ 2D§o„[HU5¯=)úŠ)Úö û Ž8›Ø˜%X6$n Â{µª™#(„¶6*ЊM 8´Hm›Š;ÿɧ$ZŽØ1C’ô;d¦¸o÷­×»¿o³¤ éy‘GpóVkv¼ŠÙj—ŽWh`IÕ‘÷"ÃcEGÆD…˜(Aù”»ºÍ“Ÿ3E<;¶ÞF«Ãúwu4–³K*1gN¢N¾iº§Tý¤––¿/8¿ÉB¡’¿l$p<øÚ}¡ÍÀ蔲*ZäZ½X0Vߨ±x@°%°¹ ­âb=Ìz¡…êllºa û1­Ù>ƒøôµS”½å©r„¼sßÅ(ŽÜA>³÷còè?LjÑ7Uo$ý»½Åù·j\ÉÕÏ–ÌÛygˆ4¡Wö–VÉt>õsûɨøô ×ñB®½*/SQ¡yV'Mù™–¬S…C0–]²7²‡佋m¨\'™OÆ0º‡¿¾«I0 r2¢W†ÃèØ=p°©Ûè:}·ŠIìíÆÑ~iÄ($Ýœ­ž™ö€hB*ÞTz>ßéiŸ‡ u$e:Ïëx@÷¤dXèÖYÇ}‹ö>ÝÚ"½NËÛ\\48ù‚/¢r¥-U$(!Ë»Ž>ó?è±d< ènbUÛFÖ®(ÄnHÉ7§œ NÌqŽ„êO‹Øœ1 rb˜S Ý ¾Dd(po•!q„DlÎù ÇB/œé±7¿Ç!µ$ÿ%MæÜ¾®rúŒWJ$95+ÎùÞæ[,ÜY-¢1£¥EÚ•¦B.ñFRA*=hÔ’ÈÀ Q‘u6³ï€jˆØÏ)œè±Q½|nXWC˜î3 ãù­ëËçWËø[©WW€7ï4Š{Éõd;Ù¢ 1i§í.ZǧâÛÜ“ý/¹ö¼ðB4 œÚyVê|J•þ#ý´,±5ÆÇ¥Ü±êXØÝ7"ñÂÞÜ,ÖÍÒiÊ?þ?ÃÓ™_¸5%²°à2r”L_(LÊsçy²Šb"jÿï±cZàóW‘(ÃEÄ“¤F-¹\EDVËŇˆ¹¯™T%ñ«H÷ÕóHÈ =´‚äÄžßÁ2ÇM4Ç|šì†»)i~9‡ DÁñÔà­Ó§N n¡. œ1ôt”|©{Å •\HÑ Y9[Y:™tqr uþ†‘9&úœ€ÁÕ{üòùá­ßçl y1÷Á†¼”ss4+í½M®rÀB_Ó”áî{¯…þ®Šÿ»õݧ°Àüq¢ú[R·ºò™S:µÐ=Þ/ŠßF½/½àS‰¥D“_àúfݦp*hÎ âD"mjæ¢<¸ƒ[ý}<÷€Ôm¥ej!MqÀ„Þ  ] ð„s·æ1Pò±øZoÀ)^º!Ö›R áMC?éöë=³tº¸Z<§³øü7bIþL  X-ÎÀ@\îÓU~œ:|8•x#E zˆÖÖ+„䛦ÉòÆä«‰èЄþÁ IdÜ“ùÅ'ªb(Y,L¾ ŸYaç;K@5‡–emd;š¤žf©V¬YþfƒxgƒR‘ÏÍ{‹¡éH|&ã^ÇñÑ_‰G•þÔǨG8Ð}ƒõäcìk. ûÕ6ÄÁ_¯x:Õ–Óýˆ~ÇÏŠiŽRï_²É»Ÿ†Ã"»Õ¾™ÅùºÚÐ:ŸÉ}cÜøÅ¥Ãʶï»)†_„õžqI]÷Ø™${×8>mˆYK5I 3yèÿB†®°¹}¼±aíD®uùÌN‘/PD–ç5é@Sri5c}Ò2ÛvLà4fª»:¯ÊÛ7“¤ÊÖÂO?N;tT 0–À(D0\qÛ¿q@‚/V3Œ¨L¡ÄdTšëàrV%‹ñì.ÖO…›yI‹f\ð S9L~H“‚—í~#d±ižlS-Œ61.£G¯î ò˜ÉQšáEZpû±zYÿ‹ˆÞ/Š«Ëõ.\l9«iÒnÆ-û%¡úî4’ã%‰e$‚åèîa#’à¨èIzÌbæóoF…,‘ÆAå½þ }¤Y&ô4~ ¶‘þBªÚdA>⟫i6lŸÔ¶}Ù9‰ïï,aoü—Éæ°©}ƒÖ•Äèýâüò/Eê¢óè `ºÜàãŸÂ[¶X’'ú²lãƒè8š iZÍ‘R?½ÅEÓ_mg"ÓeŠšÞè[Fë\,2臅IÂ.Äö-”'>3}‘¸`û(‘Á¾‹ˆ¦)Äh`Œ$Ë•ÀQŽAñ¦ÖDÏæiï*³ ”ú«¤´Ía²8^ >wSyWp¡Þ1 µ¾W꿆¿€xÙ&ÊD>2¼n¬QÀxÍ 1 £[Sg‚ëÜ–P-¦&ˆ”õý€0#w€¾É)󹸟g-o! 8ô䋉·,ôv6Û$Øš ¹\E½ûcVƒu"–ñJ—“:ȳ·PÐ:úðùC?‚ £ZÙôÅsJí‘íë&JYæÛÆozI4ë5@îÞ›H9Þ„Ý7®wÐt6ÏaèÉ9Rµ ƒ¡Üž@»Zù®/Æ„ÒÛŠ[ÞŒ˜Ý»ÎJè!ך²/ñm~ÊGÆÝìʨ?;¨Ûvü€F®gÓ ÷~èwÉæ‡Ÿñ§²ÏÅrÏFÉØjÈŒ0'`TÏOM®ê;’0ß-q½¶V­™tµ™ä9±ïòu³CB‡N0½¤§,£\ºŠ5=í"Ññü“œßcãˆw±*Í© ‘.©jOêéÛç ¨gâË^|í{vÿE-+[,Õì’Ϫ8¼â…üCwh÷ž’®Ž<+¦=+ôŸÔã·='½¬Bkd¾~|b¸È<â¯øœb}Ö~ú¬•½×Kìú¬-FþŒX‚Uÿ ©MiK¿¢ÀpAÙr^JòÕˆw­¨±zà6ì¡IŠ0:áèÃaèÃñç½2JÍ«ªöäW¤:ý¦oV}—®]´–]tÅ6 ëêuȃn@l{è\ûAT»#ÿI]΃!g3rØœ&ö¼ÃZ¦pЛ«õàûöÓ‘­òA¼>Ž6Øœ«Lì‹aÏäj pŽ ÏV1+6³ÏøšÖ4ÕÀ®2÷þÛçiäŸmEüŠxCöÔCÒØ²cÞ¼OêíxæöeK @÷èôÕ÷@I7| æÙ hià‹¿gWï)ê(;%þ蟻ô4W//¹-¥–­¬7C…¾Ï# ¥ÚÒZ©£½š@|“{Nt|©ÁŠÄ¦Ô³Q›R„×NŒß”æÿåo‰9äžù“çñ÷K2ÕQÓa‡LR¼{¸œ±êvû4Ê¢…þ Ã%^­¯cxïj!±ÕKÅIqÀÜ_·È¢¶ü€R.(tyË’ç²§C¤º¯Ù·ˆˆÈj‘œbïßûÂû …àî<8½Cך©¨_=YúŽöà/äi’)ÕÄ}´2ÿ(®Ù~¸=mk\ÕøÀÕ(ñG5‡nqö]øÒL¢½½hØÑ°]±Rà‘í£€|€ð\Súü°·‘¤¬¾GƒÎÝMDùXP¹ ÌÕ÷¦@w’,3Á´Æ³ÿX.ŠAÀÙPÝ ”¯)"Éóñ'†.³ , òŽ‹}¹½?k\ANQ:‚ääQwdŠO5² G ‡¶[A‡0•5éùTŽÙ±9KŒUëNÑW®/_Îâ`ŒÛƒc÷A™§ÄœÿÙ£øÌmúUX¿¬‹›™cQ Õv¥§&ƒzþQžfwy€ù¹­W]dŽVØ&|©¯•¯Ò®ý75LýÜ_ÇYZLÐö&¦ïþÄ1 ©‚d¬úþ‹Þ'Œ|®ì3€·¼]Qu‡·Íx»Ä\¯‘xF3ÌñÞº2Ú{z"|Pg ©­‚f¤÷ƒƒŠbr—ADÈ+®ì×VìHòò”µ#ö–Ø3ø¾!bÚ41W÷R{â²0˜õ­»ñŒþ¢ð—ú(‘ÃõtДêu•£ýWÅ7ÔgÔgJ²ïI©¯R£»ÖÜ84ð§2˜€Fn ÂE²ž¾TÒ(|4A§Ê;c¤näKA=#Mý>ŠZNøk€Æ%t}=ØÊÝî¡Å¾Êi_ QÖ¯÷fb Hû Sí»ÞîgdÖUÊHö¿NZ:NeöxA°hú!3ØÇL½¤EÐã ¦±uZ&ȸ½úUÐ(KÄ™¦x3·ä 1ªî •=,Š|Éø=§aM'F‘f6½©Ý§g†ø(à¯7 Òy”rJÿé[ §ÒuÿÊ|ÓöB(x~3kHû+U‚Ï7íF:–ôã¤gg‘†p·ÆÝ—Þìb¤¼°¶r9TâÈÎç=y^;×½îiîaDç›®øéí{Hß¢Û d?¾þËDø×2z®tü¨S“3[ ²DŒã/ìüÏëx¼Q„”=#(lõ5Ï?"†.i«FâjòéÇÐöON˜ö‡Zl¨Öœ1ÁÕa'·<§/©GV i˜Øn’Ûa×Õ eŒaOa•Ò®oíÂu1ÈkŽÌ1XÝH¼z—ײo?p2À¾d¹l7‚£½˜Û¾¢)¿'P*6NÖ çLüÌé´fehl¹#~ °DÖ|w€¦±8ºf2™@à;m„˜µ¸OˆŽ¬ö.}šÛ´Î*R'øc}&_Á=Mlþ?·7íw¹lë(À§çXiñC Pª"Õ0aJ˜=XõOÞ:'ÂôÅ‚зì4Àðñªü7|2€ôÉȪЊœ”È›"(–ž2´ž|Aû2‘µçòžñík̓û³áQp'ÿF+rº'Üêõ[¼Îû«ÛDD“â%}3( Lôó–¯+déÞR9ï8}{Àk¢Ö ¢í\Yì䊃>˜ô2)„¸w…zc%èJ»vžÞºÞ}?.jˆfLòˆ°h•k¡kFï‘E=#4¬>Ù„¢¿Óùm±râ¿øcüáëŒïR^!Ÿ"{ðhª A]QF‹_ÁV…•KþåeßÓªíƒw'°NÆÌµ±k攄Mê™4PâzŠH4L0EÜ F³ãÛo9» 5IÑ]¢BŒÏ© ˜i5y8ú™ø¢c¬Àõ¡RÀè|žÍµž…lª”Î6ƒºy ó`‚OOsB»ý+ºQ$êd.sš|ø&µL¹wÃâ™'œ-QH–üúüÄ0$Í m¶²ÉӌҘ«èJ0]þ+×%m£Ÿ€Éb•ìlåì“ê‹â­#ÚÉì’öçþW®û"äµ²çîˆ1¢ÐÇ ©ùègöФ·/aGµ º@ê{Ÿhã~Î-b¹Ä7¬´ Æ'7—¾Â¤W„rÆhÅÓ}™[Cǹ›&®Ÿ¿¯¼¦u͹­9•áÅȪ]M>Fž6¥Œh Ç ÁËœì9a,›*©\#•pƒùœ[õ<Ézmšþ›ÔŸ|ÂQ¯°˜¯Ôâ♳õ=k U™¡Îß!y…‚%™93L22œI;hÞ ó¡Ü’bA5"ܵAu¥òí´•!dèTœbBÈ †ªqª ¾ëáÊÝ’#z¸P&~›õ¡GÖ?9Å›¤¿§×Ë4Ða:ïLëb‘A°Êg\ù%ކI*Sø:;çš¼.?ÒŒ¾|¬?' kœzQ/ïÏHó–f=Ç£6o[Z%…ÏIæDïáÂ5ý¸ùH­8ÿ",VÏüuyÿÊ7åZSk6X5ô1@Ž?0Çg*ÑPǯS—€·±¢žE¿Ü¥²*øÛëS²ÂPsÊ4nI/û€ Ê#”_»§Š!Ò ‰1&l2i Û4°ö*õ0 SåPË7²._0®îã„~ MVOë$UËR¦vQÐÏ/½éX:Œ_Y‹UÅ»y›¤Ç‚µ’š>Þ(~RE‚pªØ"T‹¬ _O¾ÒËõSPÞLã©&;ŸãíÀNÔÝw§îæ$ª°ÖFñ8î÷GË¥KìþE¬V»·~!²–DŸúþ"Ì ½p¯ïŠƒÃ>å0ÝÓ½†À P®ÌQ´¦+Hs<ÿǧ_ôŽýšè@ÚN]”D7†øØˆs0£‚ª+?[ÊM‰Óš•ütÃPñï¼+ç>gx÷²áaÞökM{k·…­gÎÉRgþ‰ìÆeêŸu×Bf· ?I‡…–=˜Þg”ígK¹¶N¥Ò+a§À!ùÌ@ß¡x¨Áý-¦Ý(S3rþ¬é8äl?ßÙý ³{Ä€„ÿôÛÑç¡öcõÜ965`g/€Þ})J ñQ5&§§fÅŽŸ)Àe1sòc!;ñúIîã§¿Üêõcí©kùý*¾/Þ~•[ŒÂ<þíŽ0ÇÖ¹«æÜˆ¸ÍBMº×Ö³õp‡»²Ë»ÓËÊXôo“Ü/>C1ÌØ›£;'‡¼Í_‚îí¹r Í ä?ïŽ]?ð7—Ïæ ÅJøk·{\›?VÓ8}>—Îjºú€sŒízOóÄÐBDÞ ““8ø-èsðf¿=y¸P"—1²;}@(KB!Ÿà?;KUÝ+g5óaÀ“l6 G2”“ZZ£~Vˆ¦^t—DD‹õãÙÛ¯TÈut„’ÍëÁd(˜QÌž€ûV·njAܾXØ3zëv@”Jú`Y$¹²%«²Úúã+6ó̧}@—@®@'ð@ÿØ]ÆËƒþqëÈ»¦yÂËZãB~3^­>ÏjIA“Ý–ðÖf_¢Íwà†ýûWÐÖÏ1¥LåT-dc ì•¶¨ Ýá %ävqÖÕÀŽa¿šgàËó KÔeà ¨(M)ÑÆËÉîœáš*‡®•[¬Ž’ØÎAöÒŽ®å§©ë9h‘æÿbwórÿØsÉØÝj݆žuË,©ÊØÝð±»A‰/ú„“oD¶’WŸ´T  ~+÷,=ù „@&¤Ë¥ž[T  ]äñ*œ2ä΀:)TTDŠ.ëçtîV¯´±ËISãDJm[¦"‚ÖaÿFÝùÌ-˜ÒFi?S²Åc·Ö¸Dõ;’rBEÆÁc<”äl¾mBrbÖ£ƒš¦™¸=Û[a$\ @ 0ŒÊäGcJÇaü®ÄÌTÏÕ7xµò8×{"Êë¢<ˆVucOƒ( þ(ûñ‹i®ƒ ÞâØ%ZP@<óªÿ€‚FÕ4þØtæè'»© m(LÓßÓ¨¾O€ü4ÚþhîYWÙÑñ\pâ*’8RÄÔdÑEqh âÊ’¶q™n×°’cZ5øî¬9Kç¡EP(@qïoNX!¿þ—¹Kuû}6nFb ¿ñ;(Õb¼R÷ÖÞn÷ìzj z^ֻ;4¸ÿÀ |tÎì?ߦÚ:šc–ì(ýª%4à½|?W——¤×ßÖ~ïg+;v;Ý_Ÿ÷G~ïϘM5÷Ô4ŒÓGX'ñò_ºÕë3uëvo‰®Ù:ÚKu¿f¤§³Œ{}v„F>4s{§wÒî)é?ƾ©º4âgžß3ëë:#‡60OÞ·Ï Ã7 Û‡Ú±\ÃI=3‡ YãéÊ€¬•·€ë¥ŽŒ Ž°O± ý—ÛóÕQÓ¢ÍÜRü—ŸÄ¨Ñ‘Lpr³OXg©ËÑû±¬çv `€ îŸ)é\f~ò ô˜éò?ûcõ6ûÜ5ÈuGÂv¡û |˜™™-œî.CŸ"ŒŸlö>Ò‹è_Ñó+þÖp½},.UÀÇ¥¾"ù¨3bšÆ›pÕÚM\‚…û>Ѿ¿ñöÝm3 gœ§›~ô³×õŸkó˜®ý»Â8;vÆË肹¼7íôôipÑÂ-ø_¡8¹Yþա{¥Óuàá½½‚5pò4Í•½8³õšktøÑ31^'ëu(÷_©9Á2صbíî= hL8xÉÅÝØÆ|õ<Ä©{1ÊþÁ|ýÔUÀzóUSzÄŸpv÷þ÷¥¶ehJv¾Áûå‡"h=ø¢/z¼ƒìjUU¹ÚEZ½û7&q×Ô߬|¬ú+¸ÍmýV·•ÆÖoF~}-–2´™YGv~$&÷ÿûîÕT°5ðRDAª€Ò¤#=€Ò”*Ò¥Iï½—AŠHO@PzïDéé%H =JHB’§÷ûîýÊzë­·Þºï­÷‡³NæœÌ™=¿™={æì}²‚U]?ÏëÞ± AÁ您!Ý%ž Â2íXxpÃAžRΫ†oÕñW»_´ã .&oþüÎ3^=¾ÿtrµuIââúôñz÷‘–Ë q?Bx"•¼ùh†Ó¢Dе–:÷æ5ûÊÞÚ`¹N bšöÂsø®kA3/hª×töH*¦óÇ"F#æáNH\®V&(MBr»¡²æW]šãäå|3+]* ",+ªFwQùUQ`»½ÎXM®eP4OøPöÜ(دârosºò,l,AÍÑ©²ü" ” di*ÚÈ¿eŽA„ìoJ›QoÔÀ?¢Õ‰1©˜g é‡"~bïUàõGèŽÒµá‘¨¦¤¼x^<|n³’8·Ù®Ü49§éALZàñ#œ‡×úWB ·|®È÷õú—Ü;}PYê=ja©È¾_곩@*R¥oy>S*2+ûæB bŒ­^g4±_º„mW­îiÜ€ŸBtÖ‘ò\[Ó…ÐÁ–t2½Ä»[j›AmkI´ízÖ8xí}SS^÷ûH4"4$릟3ôS)Õ© •¼?¤ŽW{ß&ö(Ј%%T‡L?H³Ö_~pÞ",þëq±:œ”cõ´œ¸„ÛñåE4©ˆÏ¼é¸ÉK¼†¯œ‡oö§æÄ:@­KêëŠBél°;žñ¨ŽÂLúýL3ΘZ¢B¤dxr®Ø†Ô³Ðþ»7âþ-ùêúÏ7Áfý°¨f+Åë *Áýö3Ä;§ÿOðq<ôØÄÞ(*SJ(¶iE›ÐÈlG* cŒ`ÛZ'Ò‘*³Îû\ Äè&!•~ÿ”,´YLæó]Ÿð~2ô{70"Èg¢SìÊÙÔÁtüâ Üëú£72g{^_͉–Ä%mBþmÔX€èã’9ò!'±ÒñŒBŸ‹!Îç(³ Ýö÷ ƒÐ0ÂÒ9Òä_Kþ¢½OndEÑ_â"MI¨jY­B ë‹:C‡Ë psbvc€$hµVþ …hKÑÞÝk¾Ñ&—‘’į¼úÎ\uõ}ݘaÎ˾xeÞï$¥š@³gL‡î´ØéDf¦¦Ýä^^”@¤LéuÈ0xP9AœD$ûóØûˆ|Ö1‡ŠŽMŠFÛǨy¬ÖY[eQ5£Ù*÷~t^_e#JQ ­”…\€ŠDöIŽÚzß…é?Xfëßvi'¨R®XýÂéãW͇tv²ù·mtˆ.VQ«I`žÌ>ðg=´ùR°•sÑÛÚ ç¿ÌaÃ6‚®wzÅÓ|Áå»ÙºŠ‘”‰–É`Ÿû!Ê  ÞWÀ ãû‰ÅÇuzËfYœøTœ¶Ekõ3tåÐNã‡çwš“®îO|ô”Oë`Ddrاªa¼0“pá­n¢Šâž ‚XtÌâ >ZÑo΋W/@È ‰Z ÊÙ„ƒ&ÜOÎå†%QÛĥȸæ:áoiËqúyPñÊÒW`fÄÃ>0o EõvöLèÁÛµ©Ê€TóA¨Gu’Q—é~Þ…Ø¢=Hà³C«…‡*½™j×å'×ëV è×Õ­ëdÝ+œ rP.ºÙ»— Ī…g;-#Rràmþ‡Kj'zU3~%Q¿¶,ÛÙ#RÃÞtW¡FÃn]q¸<þZº|Ò~’¶¬8y‚|Y^Ý/ŸUÁ>nÍÀ=ªÊ?Þ;6· •"’¾Àr¯@ï“ÐÍü—û.æßçÀ² ÒÆq¼fòã¦ëMc \Ug°ÙÞQžiwy¬ ƒÌ«ÝÝ]ÚÝ©~Ä‚³²ºŸ‹³ÐRÄþó´¢r=ÝÝ@À  ÈUôÄjÀ§ §st7Ñp“HŠ$ð“¥ÿ¸-‰AmÀa¢]@Ü™"²FÖéÒ NKó'®œ 68…’ÉŒªÎlO ±Á™%é3ûpLµ1ªbý’õ­N›OÃU.ûʾîˆòðÝ=® xPkƒOg.}Øå/„ê0§ÓDD@Gl‰LàÏÖС¯ÚÊÄhÔ:9·¥Ô ໨×­7ÊmÝœ9 Û)tã3Ðâ8 ¿H†}!öÃÿøÜQÔ ¸=§q¯^LÊ @KâÚi Á Tyýð9% È$K«€Æ­‚c¹ †òG­›Ÿ·Î iæë†8fŒ¹¾¸ˆ@Ž€3ìsÅÈÔyš¸ *èˆ!ìø”™†ì±‡›ÇEWcÅ~(—EÅ(™ú·©*ÝVA3›à1oaÃpV"RâfËw––÷ô`ý!äXýÚ4 hZrÿbÔ«ŠÃù7‹ôsD›E…÷ÓZmœ@Ž?º>–VßEÎJ9<Ú‘ëWÏÌ@ñÈQ¬p Ÿº#sà·„çëâ­W ÿ!ó~ûáäçQ·›ȳ~”îÅë¨lÕí5©=[CàiÐ)rLJΞ˙³m‰€?Ñz|xƒ;×ûJLëCÞæŠ‘ŸöÅ;¶ýð—Ä Úö«aã‰Èº² …¬Ï'Ûmÿ49tÖhåÓ hy),'r, ü¾îqØèýdsô‹‰°7!ìÌ1C¦ý²S{>Umµ¬z!o—÷5•»}Aq™X…7_Xb´lL˜lJ…ýƒŽ."wuM7¦.W&ŸT‰¦Ê•éǯƱœ—¡oã"óÉ-¶+&bú˜Û]8Ý@'kùVßÃÜm6M°“(Ÿ_“B€kÅ4_ë{Žoz÷odÖOZ|"oTñwF¹ˆCœ¹L8³ü¬€é¡NSö9oÌÏS!ˆé×9†wã:€8¢9°ˆ}!‡•¿e [Ý*_Ñ<‰úvùQ¹•nVÔ?:$hê$ÅR•HsÑrÉI µ U6ÿZ›Ô½]¯1ù/‚¸=²Mî}Ña Xà 8gÓîG{sZlVÝCS ìÍC"hA—W¹* !Ów—°§98V©*ÙŒ˜sýŠCC§à®+©Ö”eÕ}ÍmgÕ.ª±Ã`ë[g:1â ëdäA‰xûä1èXîU¿k=*5ä8242RÝØË ÷Í9a7üùu< å@x–õå¢eÕ÷ed›ÒÑËfÒÇT±/h¾d=2;WØ'n Á¤Šƒå .åž$œ #µÌ¢2³fBXË%ËwQÎáJúSÓà‰.{{¶Û „ç5 ¶tøfØ| l‚þ¾ZTÔ¿4É™:å“€¹Ùˆ™–'2¶û¸Öy¢”µ Þvø`É~ò…è±lM¬ÞYgêþ£íewbtŠˆò«_ÀÈísá,·û„òEob4øWùÄ¥íÙ¨E¤Ò©„~Ø÷ŠH Y‚ö?F‚®Q9­š&†‹yä-Î(¯+刀ä±4 >dt£%f,&e½PÞÚ0 «t¬ª¨ªžp gÿçâÚZ´R1“ûªUünx†‹‹¶JfÑŽã™RxŸ€©3»”Ÿ9t¹(½¡9“®k‰>˜›ÂùwÍ™ke:Á~Þ³0¥ÿV‚'¤EiÂØãdL4‡óĪÐÿcf—÷›Á 9¥l²—šÍåÏk¬R|$\µ ;CFtbzî¥Þ³)ðÓä3ÿŽ –kþìÂôkF ¸?вJfðÚK¥ò¾³æjB¹¬%MWŠ8°ÅÅxGš]î†Ú8잤ßÓÜÇÇ5õc˜k¾W¶Ð¡ÊO…×i”º‡ˆ¼Â@±5“¹‡cO]maCÈõñÈv)©Ûô^ïý­dM䓼vàßÇ | rº‚7ÈB~l[â*°¡Õ»tZeÈÆ,4nM„ת¸(žÞCxÃ':Éç}BäÚ¬«ê'f2 Õ0¸=M8XSÁö˜nw0-ÏælÇúˆ¸b^h°Ó…ʯ­àÖ1}[³>bA} ó—S¨ÿ²…nôî¼b ¦2&QïR'ïkj“©Õ¥œciû»~‹¾A³šƒÂ,õÏgaè+bkiØò®¹ËrÙ53ûõJ°ÈÀ꺇ÉtFjy°éî3ûð¶êºJ+Ò”_×oìù~J©¾l£Ë›/êÆ!°¢‹®ßg+Ø{ºÇNãG“\¯@Y …i~\ ¿3÷ê9MY6j|ÿhùå4T …=Õ‹ Ñ ÐëXÑã\+žL^ãÿ´(d3[Tµ©Þ«>ò›x1Â"uŽQçÁßË.¬ðÙþ‰Ò¤~.@JÞQ„ÙN vIb‡»T XjÞ@…²Ïï2ùâ}T•±yÙÛÆV?Sðœjµé!dÎ`yd6TëP›Ã EmhƒÜÌóž94EB´>ÙXH/o«ùQûyõj'Þï×O = ­ O ÊÖ ‡Ò€°=¨¥ÖÆ¥# GHY>ä ¿Œcád-Bd5Ö礓}шÃq&ÓvŒ›‰"œKnüäPt3¾ ‚…`ã›sÒ(~R´•ö÷»ÌT6¥ ŠÖ(Fö–ÝS—vÚwž%[FÙW;nOW5<ª.ÈŸ>:i ±ž#Êþç$Ÿ·î²XÃ=8çö'½ív*Õµ.gDŽM¿@’ú<°IEÔ(´žÕ«ä“lïU×Þ˜VTBß8 {ÑÌís#•Oÿ@‚ Ñð ÿôäÀt™)VjèçVº[~Ý‘Ò)cRûÜÂ"v#ý¾˜Ý¿_Ð ÐH‹K±yk=lتÿ£@Â/E«•*ùSˆò·ÖˆÌ_4Jš_N“ǺM ÿ:ÉNï¹eOâlòlid­W“O^ÿªŸý^åþ‡É7ÃþÏ@{;NεDæÔ-jqÊ2Ïðw€˶uå,5ô¡²µÓ{ÍÅB&ÀäƒÊ§UwŽY…;[ jULÐ[Ä•æyHÔc+¼áÙLT­è‚"ì3Œ×¶™èîC¥f²AÿµÊæ üü>±ì›ÔF¹qçÑzïÓ¨¢ð‘}j¸ ?¨ÖOרz27H ªº€ ï*«LêÃ64Ž Íc¶åÞìÂã„ â7À^õ1tgÑ¿°>í7šÞ5Ro­¬Lv²wž_À6nEêvÄ®®œŠŸÛ%.ö̓8O|s¢StóI&ÅE!®j¦í¨)±üÜl}OjØ`M¥¼3Ô:«ë²•<îIÌùÌAÔ¨eM±‡‘ g†qÛÓr`Žê\£âèQÓ…”tˆâS¥üF€™ôk`ð— Ã>ÓÚwÞ·Òǃ¡êüëÚzˆ-U÷S’Ÿ;_)šµ¼"z$ÙÂtÆaÇ•rÅ(—º \1[°©B®,þ7ò;!* ʼnPT(ÛaÛe¥÷{‘ªMô õ½°Î*æøRŒ)v%lµ™²Ýá÷&¦ºð>ň3dTî!%{&ʯêÛÑW|º-Iyâ™úpÒIÆèt†n} ®,G=Å 4Ïnþµ|Å”w:{fÌ^´ûRz Ç…´9~¨t’¤\~‡ö>²8ƒm‚Ξfµ¥’AŒý^V]€fˆäí:xƶRÞ7ä9¨Òò. pr&¦XF¾"¢éOÑ5áO‚¬Z[Ý_€ÏfâÆ¤Êës¼e¿»núâÌŽ¡c!ÎgÈ h ·ìïœQŒEÇÕŸ{ªü÷⟧Cô¯kãs¸“´î(&bÅYg}ÿÜíÚsݳ°—ÊA>Ÿ¿ÁݬüötŽ#D*$É=NÂe–f`ì‹‘³¤ÎóW&9럑HÜS¼?ÿºóÀ ªäG¼ Ì7¶h…œ$Ž„‹ª”-šENFùl‹ºH¾téµ/!ææHGûÑï«×ûS=¤¥H{#€ä&.òÓD-,¬AÞhP}à4ƒÉØLë\H=[Áê®äÉ@üž«÷GÜÙñ Rïy‡·k~S4ÄíýGûÕktn:"jųo6<²l½q\1D¸0Pì’äWíÚ[S Ôb»Ph+¿ø‚ˆØX Š"ìÈ’zI¼aÞÊ1´†?1+à2E°I〉R6­aŸÂ!\ø´Á…©ß­ƒ7Ò¾,.…†L€O–æ³”çÃÏzÑýk>÷»!7HH.…ýWˆûAæßâæ&xíŠ3\¶þ¿Ñ¼V‘9wPò|4WëxžKIøvµvX§.ü)ã©¶àŸ ?ƒF£ »»ÚqðØ:Î,]ã¶­‘ dÉ[vãø8€ˆÅb¢†ƒJ9M¦ELº@aaò³¿½êÊ"‡ÓªW)&ºá`+Äeeå¨y’R¯â*á¤àî ¸©´sæ±N‹Ü ¹úl}>ë„ÊG³'ÊCÚÍÜL‰ˆ‹4¼mΡ1ÖòZÌ?SÜóÚv5×E'ÓÌz¦œ3ªaÁ‰rð:¾gY1η`{ÔnÜõG×”‡!îï寮†– ûuyò¸;&VóÏ´.À¦òYi6h rºÛ¸­NÁ~¾E€¸m÷`]íóš=óý»ýÆCOÐRxãeÞêx‡ ±êP›‹kãIÇÍé´ŽçG§ÏUâF³}¶ïèýZ»³Ý½¼“ÎHY–dfŒr.^¥ÿí‰Éû;ÊåHÆÔ•©bG^g`}ØÖÚã”Æ9´ó±átìExÄÀ‘Ò¤ãȶ̶cŽ7Fq«z~ˆø©Î°‹ü½."}ŸÿwÉm¼$tó:ÑE©Å3jÓu°sQý™eÍ#F‘Nb˜éŒ]î¬; Ûh—ýÓ¶ñ,¬Q¥Bþgî çhxòèÅ =Ö‚_èxÜ®È;9ö–ßѺX“h‡f,o…¿Ÿ¹Wi½{à9êfº MÄ×-âxm§•Pùg=R­c`/>´¼ËÕ¬ù»5!õw;†sv‚RO§s±mOãÐ ÓºÂ^fý'¬oÍlŠ9K{Ãï gu|’„dyú`ÏØšœUº<¤ÏÌ:ûE¶x+Ž+¯¨˜Šíe9Ø›o£o3D°45˜”Ìßšk&2=Èǧµœ”µ€•ïDVÐámðj~'kʹqМ)ʽ›ŸAvn\zò ÙÀ†ªWfB׫„¥EV5‚àZ‚'%JbÓQ’ïÇÁ3¯ OÅzXdÏSIØ&»¼Ð ®ÿTT6â98Å-ë%!åX+‡âIÔ» ‘Ó#A`,ôõ°R“ɹD» KÓ:^a×ç»jh¸Qp.…HÍŒyÝöâ÷Ï ‹%!Ç¢Q–Ó‚@-øX›}긹Ƣn5b?‡ëÎõíy¿“i÷3¶õ#N—e¡ša§âóªð7ºlL*ÇàÌVt£Ž«[§* ëúŸ ò™µžâµ{JS\çŠÏJqŸSLÉ'!!5ú¯MèSÜ¿išþåûüú+CJ¿k”~ 7ýþ\ÔvÄÐ4—Ü&&^AĨåàvõ<ÇŒÞñ=þ_׸;¢ i€n ACÛ Ð>Ö3ìý¹%ý°=ü=ôÏΠÃuJ6ýâ´ ®ø@dC&°Þ.¸rhMÉB ɶM»¦ò»ð ®oÚf3‰èBÚgaQó*3{D ÓBøÁ r¡ A# xh5–s]ŽV­š ÁåkLA8f<þÕ),šâÿöøÏUU¨1-Oç…œIHhÍþ›zý›Ô»àòÄq‹òð¾ºÆ÷d×_j(,àÈ £mTU®YzÖòÙ(jp¿(äá.ûú4ÃþzÅÁ÷Ÿõ¾’ ¨']6Rcíá €õ<¾Ë…ú¥ïlŽT¹èb—î8…á”qd$ è»q ùñL8c¸«¤{©Ÿí–§DÈ•Gk"©-öÇH5¿$ÌîÝ´™©Œã¯ëÇf»–ízýaG ­#ô²pµã]õ KÞ.O²þÔFÝþtø$7G)åÁ%D¶Žä‚^Xަ¾ŽÞ€$]ùæpÐÈÑ|›=‚3¿¸œ wHór©êi ½Øh)*ÿ}ʇ'Áî·,ºBRD(Kg…Pá¬ršàO¸W¬ihàƒ[ £>5ÿ¯Ÿþ‘+”o¯Û= ìÿ¡ä›Ð¥+§iÆ@÷kã9— þùͧçó {ë>Mí°ØI0u °Ù}«õ!æaú4Í×Üqé¯8(³¿$‰}nÿ?ëá3ž_]áy}¦ï]mk*¸0ì› Ûâª;¢lXz °RùèFÚ¸A÷…Éag·Ã¼O­£5çý2­¶š±‹²Å×"ù®®¤?3ýôsðÎýuØ`£¸X-Ò»xØž°“»ko4·˜™áÙ©á®F²šÕô-.v«÷Ö¬tŵv±î.`æÊpQ`îÀ0ű™ÛAþKìE=÷Šyz¤)Ó¹“Mìe· •‚gDEƒÇÇѽGÁí_¯žÚãæ˜’B­¸ō߳E 55СæBN•/q|&üôê˃̞îYêÃy#¦ ¶b‰°–þׄå`&E®Ã¬Ÿ=˜¼V ±ùäÉ+y 2ëK&•·pBté¦=âRCˆZ­‘QÝâäÏŠ })#9Û;§ ¿¾˜ „“QºsöX¡ä ¡QÜ›¸dVÙPÎò;ºw=Zúã 67&qŠTC^wÈŽŸqs·'ü”\ϲ€ËLJÕ¼pS.~;ìÌe'™c©•ÄòKõ} é`f ŠŒ-µ (-f}žüPÑŠ†Ð.†ÆïæÍº ë¬Ù‹~ãÉüö‹}þƒëzgkÂP'FîÝÏ0ÀÏ=Á­·bÊS¤— ^‚¼J_燙¾‘‰fµkø¤åæÞJ½°L8nD?u9¤y‰¼âß‹»“3Ê=o=Ù¶`Ó'#5R8îº --ý*bd‹ÞS²^!¹šW æïÁ¡ÆÂÞ¤óúk¾eï*GobþÙl3Ù-ΓïuÒ"%,W(Œß´®Œ hкkZŸe÷TàBC“o '˜¼Â†‰EË_ ¬5ÊN™v ±"~¾ÞÅ“Bâ? m:Q®Ú~á¤AŸP“¿mðÿc›AîÒbRæÑëiáè!ªXÛÇ㔜®´š}‚ÿIßi•`áKF¯ Æ”yt±$›w¬0\[ŒÖAð`“EÓ%±~XÏ…Iâ*~D î0ZSwÞ4Îa?7'ÊszMIEŠÚfæéJf%3u5%m¼\'ïÞó²è+±9‹?‚êKÝ…=¢W:ú<Ü 4òÖ—åeÛ7>'Ó'0ó/ØyW\·Z«Š™Ê›ŽÊûPâ®—«UuójksŒ$W\«çæ^ä¡(ÕUݸöDã´úOém¸ÖY19·ޫ}Y:šfØ-teûöN!õ!ë§PB„›~Î|ûÙƒ·¨ìG>áă‡²¿2£ |—ÌŽœ>4§Ü.Ý £ód5µz´ÖOÎ×J 9Ë[¤mŒ¯ÒªK˜¹³öúE÷ý;¬óL{¿Ž{±ÜUêRúí«A‰¸ï ¼ü:œ ¡¿@c*BèaÍTÜdášpž»*ª#òØ@­cã{7'"^¢Ç-_"~QÌí%_ bE (Õ?âfè}úù•2¯V û_qjEEÐÝŽêE·ËH!½uƒòÓuQ·îãHëЂNhXÔ­€‹º’ˆt¬KÅáæEàÖðóžÉÀÛ‹Š_c–Ío,¾YW3Ö—P· Óg/Kœa&jÀ¼É‘#lþY/ëvS 3ô¤`¿²%4ÝßúCä×4¹>ÃQ.Zpy œžéwn¬ØÄkþâOÜ)ª‡tmmt–¯Zv·v;™êp/²° ;p W" ŸdùQo{©NîvG’ømÑOñƒÍïOtPŠWRGØVòlèiø’W2çø´óì]Ï{@s§ÍíÐÜC€±ô›°º\‰Í´bɨûeÁZÎäo~ÿý†•¸ôÚq„m’×Ä®ês«Ãƒ`Zg@UÊÔ|-/5óZ•…×JæÅ›øËèüÝH€ÑAžß~ÓÒ;‹÷%RïÓ ß^HŸ zž¸fºø¿·ÜuÜYùªZÉ6;æâxÃ`Ì–ã¯ÍzÏ›"o”n|r’fâçÅÄ«ÝFÎdCJLõ8Û÷WZž_…+¯Yù·?÷‹¾˜ÄøGYýFÆ"^EJ¹ƒr¶›ÏȆ{Ωb»Í ÷˜~µƒ¦¸Ÿ)•„gR%(`Bk"¿ü’YÀÒ¯!Í›oD0‹Œ: è×­9sî÷ï7VghŒïFLøê’ƒ!yêJI+j¶,4Qº´1N.ópŒ‹Iˆ|%Ýg;‰­§tY†rõo¿n\9ïx"”ùe‹ÞãלXæí¢)ß# Ê[ÙÞ·@õWÚ³¸6uåÕ=quì“ï[;šÖ+å”VÌ%F¼›Žp}`#!ñV?ìKJ÷ô×Aõ\SA\\–ÇÚÝI¼1{ØNgöžiC ¡ámDÚí[Žv‚eÄÆ)û“Ï'¥vÐé²le¼ XÝ ”ŠSÕž>]CS’çÏ›¬7ê"Mä´­aS;Vó ‹eÉ8|ݵÔQ4Æ j¨æ à==í)6ãYb°sž —Ú:1ÙÙÙIY$vñ$KëÉÇל•Ó5ö ÷WŠÉ –W9-*x‘.؇)¿˜Úâ'>0êÿ¡á· [/—Àqb{+Yè:Ýj¡y.¡%ƒ'ghÌg1—L®¨¯2r¾k”Nʦܺ¯]Vqº–qŒ¨À =®¥CßÎZ«/×T5 l-Ý­{CËÙ åKQ?óìŒÝÚKÂúæ >!r .Ìަ*D¼f ¨{)9øÌ9'uÿúèÄÞû÷¥ÅgÅÃO\µ6ž‘°åÊß»ªÅ58Kz‡ÇäOÌdY:ö¨:ï…=¹$¶ª.Ο1|F]¨bBKüÎn°^çiØ_Åms-ypÁçѧ*Yï|)Œ»Se?⢔·Iß*vßûpÕýÇ®b)ù:¾Qge°U㇭«NÕ©ºzHLöV5´ hó³!DªÚ®@¥:ì“lõÏü¾QÇZóòÁ²ÖŒTD[¿]%q]`Ì"(ÔT& †xÔ ¼ÛÓ)$|þäöl,wÓäfè!$J¢èˆ¸“kô¡¦ìa?8,!éÄÎ7–×ÐØÈ|jC¹‹ç×ÏÊQ«"§ÃµíÐ.–Ùuv†Xþ¬sh ÙÕDÀƒ^zI׌Å× ìÄ[h)Ö,ýȪ½µ]ÃC"HÅ)0Ç·Q¿—$i.ý®áëßðô+ˆ–ƒï„ËÈ {þ‡aeOû¾e؆¿é»9á±Ã]âöÈ̓]†‡T·_þŸ@ÏÅÎú{ÉyWmIHn¬þ+Ĉ¦ôÿ!þBŒüò¦{ÂŒ¸í½užÚG|Œo~ŸJîY4­À6R;çï2—b§Ð`e\P?ÝëþÄ›Êïç=מ›kízqö+¹ëˇ7ÇOGèV†C,E˕M`¦?š{³'²y7¦S´"’'£ø­âFâ"{”0bàÎ'F>ÑÊ“ñÔ܇Çp?aiOEŠFæÜ¯bä´õo¾{–„϶€Wªy4rˆlËùïÜ¿´sØ)Ü©ÞÀQ@[;¶ƒ6!&/6­Ú¤6*òŽÍäœ×[T"+5ÂÎ$_ú°«M‘ò ¦ÓÕ&ËÐK– „€Sú¥g‰QÇÅ{îÝ+ó™±[ç~ü‰­õ鉖F„hv¸‘ÍhŒ-Š$kc—µ>› ¸ïŸuù”!¨$W3¸È9ªÎÜœEkï&ÄTïêæ&ñ"'²òïi„Cî@Ãâ>@¦úâÃÀ í%ȩھsL—l=¨hlÊÝÌà¶öþ«h›G‘\§ìV›ÂCÒ×ö3Ú芷«€¹ùYºŠ1΂y¸ÆH¸8Lcï‹Z °1°èdyÞ ÔžMFÀæ}ÝÒÍ%ª$jÐŒžVøÞA¶Ó€ZRîª}½ßº0¬øyÂ?*D^"Œä¦£Â›Ýw÷ý…$·u õ‰yøŒŸx¥”€&±Ï\å‚Nˆ‡ãñÜЃ¡Þ…b•¿Çú¶¢ò4‡¢FD’kDM{0ÎñAǶ”Ö·ìÍÕXçÇï¸>¾= âØªÅYà ~•±å@ù4ka4’6J:o2ôrµP92\HŽzõ‚®[±`¦ŒF}¸r×¾ÜÚöÎïõhDäÛ¦²JÀɰXÈRú$@»²Ô˜Å Â|NI¹†žÝøžÄËŒ—êÝ^§N© š)|„­øy÷UØá·öI?>äêž¼w¬’ Ï­ÄvmÌÞŽ¯)a ‘$KôïþXYÃã[Ôo[Õ% Ff¬¤\€Ô|Úw8V¹e¿GÉPaÚ»kQÇmŒy9Ú"¾ôyýTQ¡ˆáJw̦…òÐÏLŠžà}|èå"í¶(¼ë£‰·iQ"pÙ(0ƒ÷f9LÛ"Åiì­]ûó0hƒ°ªP»áËt”‹†Æ¢UÕ!ÛAblö*®¦}i0+Òê{ó 1Jɱѹ~þqÜä™—%醺ØèIÅÁ¯#áÃ,aûWÕЄ•²Eª¤ªîȇT¸.AÅèóáKfØ?+@€9q÷»wê• L•¿ôYÖ®ZzêˆÂŽ["2µ’Ì®³éÛůçódåkä¶® I~¿‡ŠvYž,y,Z»ÂY/*ÇÉÍ×Ìt%ñž‚<ûÚOù=›g~¦nz]àú»Û]êS\—ï>9Œ¸DŽˆŠÀ|¾ 4 eîê tV½•+ƒ¥1¿^Ûñt­GZ²Û¿. ÊÞ=j+¼šy‹ÄJkͪMܾN¬Ò ·»x‚I앱hH¤O¤kfAÙ¡ï‘l ]¹åY.ñÃìÈGÛ´B­T#†] Doª#ëFøöÎçˆñ,36¡UZˆä¢Ô7îBƒtíì‚>HÄ)?›””߆•a3Nø¿Ü„Xtð2%ÑM´§qm™:<{ÿŠÿûöMÇ#·û¡?ÊeÄ›Cªù¼´È{ÑñìÖ,76*ÞK={·íW•H4Bƒ¥V÷÷{5€ÅÊÉŽet«Zí*ÄØÙÍ£|°}œ“ºÅ^ô§b«¤æ›¶ì;»§aí;5EÉuS.«ëdWœ']\[Òv¡½þµBôY*ôÖo_fîLs§·š•'qS1^IHîU ’&ÓÄóNsc†¸Ï-»·Z:‰!(‘^gÒªà/ÄÌžê2o:ÔUóö9ÛдuêSÁ›¢U¼€¬ªÒHi±åì‚~/¾2±?ƒ«¾d6òŠ1Ú~æ­––º!QÉ£dDô"¢í³ø çÅÓKÛ‰eÝ{Ú8*¢>X¬;¯Þ$Aâõ——E¢ÈäðzK[`º‘|>lè¢M ó ,Wûb䋆[±êŽy‘Î:kÓ®àù6C­“NY4û/æ,Û,[—¬“m^ƒSéÈÀ»„kI¡v/G &5[±ºÉZe¶IiÕÞp×è°wÐxºÃbâöÙ½‹Êgç'ØÏÔQäxb‘ó‰Ka+ñ¦"§ïõÖ×n=K²ìb€ƒNYD!9ÆOŽ´Žër¬í0újŽpÒƒ™>;ÑÂÌî aêÏ=NÂ6  œäTÇÇù5¸ZÊpþg€Jíž Müú AÁ8­ >V2a³p™ îwMÚêãªÞÐ&’¶Çóo¬<­. |Rqü1‚Ø%ðy4Ëÿ¡Ð‹8MÿaþDBêÇ‚5™8ú˜ÜÆLi¶—® äz­´µ¶ò1Ar•ŒeðÄ?G®ß]äMš?yrW²' "*€=ôèÈ”¶ž­¹zyçÙ5Ü*ˆNÌ  åá& P;*­Hwª8¥ü‘Èu=µµf&"*Ìt³8ãêÒ·<Q†‘œÖFè@&5츚=RÚ§L‰!µ4ý©û¹ÛÙ£b¹ÂŸ<ï°Â˜ "9¡ÚMMy9=ä©qžÈñÕ˜;´åzsü·²"ymJ;Ða}^U}ÏâËò‚œ¦w)—jöKqS.d5Q2ªµc˜ˆ M¶ƒµYÈ·¿?ºÐ¿IHå\ò2hiú(#iž´åj_ÂÑ Ò› Ëô$^¿ã"îó’vÌç9éUI®cÓ!°KS¼è¢vø\6°®!ûV-Ù¯*qÁ‡#º—nÛMˆ93%žÏð¶w”x‚òÔ ,R<&zïDNÕ_:Âc'ù¯Ó2£•^59Dð÷ÊùtY4ƒÐ66¾\ýù¼ôùÖÙ3ˆÏhmŸ#üud–ŒŸ$Æu÷¹œÍ"¯'U ¦E¡,¿Š%Eü‚á±¹Õ µ¨ÉÄ@ÁoöÄrvp«SJ²uÌFËVP•¥ *L÷NŠ >àúùÓYÃ&%/¨Y@ÖÇŸWœ}[%ÕÁˆ®†‰tä,>—¢³oãtLV`H‹®Q ÜÇ"–ƒ¿gü‘¬amÃN¢Z_ðDŽÃÐaŽW˜›I R¨¯Pô´h±}¸ê«×õÔò™©×t¡÷¢ÿ¥ 3ÿGÔ¢KQjÇQŠÛ¾Ã/¶i‡ß!Þµ`&[»yße‹Hw6ÏIºF‰­¿ã&Â×e(‘?šðhWõóKø2a£SÀùìÁs˜NâybüZ¸mŠÒïZ3WÝTpuŸÿ¼îiΛWV‹sXãO“®R&na…?bgPÀX“—q˜@€‰}‰„W3…a{¡°§­8£Ï}w7—Öä§DÂÕ7òšŒÍ7_ÜI”_¶%2Ã\ýÆñß¾:‘½Œü’Û{™îÓ÷xÉBCª˜˜…NûnjdÚm–aZþú9¯\?²+-#e/=°ýã@q—§ÔÚ® cGUL”\Œž˜0/yÔ_~lã‚N17:oIy˜ wåœPõ™í¹Ï&_„IS£=/õÇaK{„ߑ:4X=ó7¥)]y¼=óºkah®7¡Ì×RÔêstPI øöÈXGu6®"éɤQΈH°-Áå'Õëtꚪu‹¢è¢YÞû”üz­Û8–¿\ÁN}™¾õjñ*aÁÊÆî¤ÓŒeHgÔ ˜{*Un r¾ ¼›hž9Dõ]\ ¬^P|–3ÜË¡MØ<~¹ÎÇxl Ÿ£T>~BÖ’…ùí\ÞÆDI®2«ð–jr´³+OÒ4( ¼ô¼þs”; U]€mºC‰ƒÌâì%Ù¬¶Øµ“¹êÔû×ÿÌHË-g1Þ¯cÃn ôpõûš…µø¹nírVˆUƒ5â±ô7cÆ‘¥/£×O4ÈÈI%AÄ;ÌÎr‰§ÇH‰1®f\ùÕ‡ò€:Åβgm‘ð°¼Óå„ÜÇ7¸yb!ñZD(žvZ‡‰éK3Ä”æb_:ŽˆÚlª¶}Sòx^§ÁÕçêví›íÓ´¥ZµmúÑ9ã½³ìí¶|c´´84È уL¨¤-nþvÔ°ŽjQÝ6ZÐê!|¥‚y÷øÎåƒzº„[ó‘)ÁÒß²0Î?^¦Í‡(Ÿòðkḛ̂ëô­¯è)@æÄº_ñÏÈ‚–3±!ŠŠWúÓg³pÿ‹Òë3>#¢pX—2S¤ˆ©¥¶Ž|Çi}ÈbŒôìÖÈQ~ñžkD½„ !È¥óëD ©ŒLŠ‹ÀãVbËÕ(^AáÑè#'­ÿ·µ£Õ:¯iu2 ?§óÆóÀ.1,;õµ!²/‹¶.d2š wôaféðPF¦Œksvâo·oß_ê"T¯ÛÞ4c‹ÈüјH;í 9Ÿ˜„i\$Â0‘’<3Çë'Ô ®vv~NÃ#‚|dƒ[bÅÖ“Lqüo§öÑz ãÌ~-!/T/¦¡¯Ç6KØH¹_”&êÙ´vOy-¨mr²ìQZñ€‡7^øåÿL‰lÁãSÓFÖÆT¬mj€Ö¬¤ë}FÞ1­,[·˜ ®pvY Uä’!%fϹ?ôÂ8¿ïs¹w^iûÆN/E›D<’õAqõ-ªÔ_£†êÈ\êwü8Ú‚-Ð6Ž9Køq©y§Ö¾OÀ«œqÏodŽ™.`÷Ò%«õdxç9cŠÎç¿õ)=i,èéû˜M?)öýìåàbŠ¡Ô[ä zBב>ÄÀ†Š„îür¯: cÇ”8™¼PTRÀ§ !¦Š«“›è›o®}XØÌ9wNU0h}tש—q³…ˆƒÐ¬5cóÝѕ߱Ö±íVKø¼Í¿°ï8]oÈŸYÁüèsÁ¤Àï'ä‰[*sbý´¹v¤"N¤(ºB0:º¶«hNhê j æ²x0+´}„‘[ÎRÖmZý¤&⹘™˜ðb¥ÁïÀ8B€…±¶ŽQEx¶£=Ä•¢ÞùBZåŸ$ÜÛ Yƒ¢|¡çñ¤eU ú½çs¾›½û¶J¾†7­¸ø½c¾…@VC TÜ”³,h±KÈY׫Úûs ü³Ãs*ÚZõ4“\Œà²0ŽÓ[s^íÆÐ©Ç–®½¢îï¹Z€øþɦкžGjÍoº®²8NÄ_À5;,Õ´&n¯;Š3ºX>€ü”—¹:-.Ÿ¡È žÊo]ø·I›ÃkϧM+šâ¦V}{Þ5B¢´zrN–g½ŒVÝØ&1šª7Ùì©kº©ö òþC³‹áÝÌÆ?’'ÞáϦØ@Mû#D©%íûå²öýZ ñ|?"È>é¯ôÒU¨óí&Š3ãÇ,Ô)S¶úN» øæ’ÀÔ’‚ ëÙ.«9ŒàwªŸålbôK§^P.‰:ÉøG[˜-•Ž^ðŸ‘Í2<™¨ f'=ØäNÍÉ”IYÀÛ²ÈIvÓ‰îø“­øUV`IgÍI  ¦0”?äæ­šÓ‚Vk:lÍ“ÖðÆûøùš:¿ÂÇ¡8lÖzVæDÛS*®ú1˜Ý,Ê¥&!ÅvÛ¸-n ‚íD¾ÁfIÐË“äô5¸ùÆ‘Dˆ½TN U=Zù½W’#ûÚÜwð;›ìAž«=÷`ÍæH\TMññL&æ’©‹@Ò׃3õcÌÞ€Ž/☀™ÅÉ:Ü“÷p$|çoÝ뙦ù¤þÑÓüuâÌ‘‚—ÓÏÁÞ(#HÜè£r ö¤÷£RœúÇä ¹Ó à›;z¸«Íktø°$ Gñ%QN¦æ·Ce†.kŸ”.ªÚ?}iÞæ‹‚ŽG®KiÑ’2A°UQ’°¦l(T”ÞZ [T&f^dÊð[zvްQܸ·ûZÑßbCÓò#·7RñçdÆ·÷q©g‚o†fß»¾õx¶ T/ú­YñîÞÂvÀêùj Ÿ9´7.þˆäxùT©ßÝc•´AêTe„Vúâ¸õë\ËùU¨hLæ]ëßñky§×ƒ\¤ZMX•œ­$É­Õ†`ÝÉŸ4n³®+{&_×&Qé~'káÇâžšé’ãD£ÇÍPµpœÊ³ggt«„³ý9zΦ: ñUz½™}Ù›Z†h2s ¾¹eU—Å7YGëW\“e#nÆ=[ým>¯Ôq»¼ú7í®¤zÑ<îÈÊ™ xJ©Þ™³7,zèhPôã™ýœ ïcæYÐÚ”TêäH~òÇW{ë8Y3ö®ž=Á: X-}DöQ‚Áõ´åf9qüÏîD<=Œä¼GnÈwÐtJR~ÙÄòæÂ£ûÑkG0ºn“‹,;¯ý¥¢ËS|¦¦¦©¤_xýaxTªÅæs—R 8eW>¯2í9½ãË‹^,­!öòÖJSÀ bõšhöÐineøYøãxõtO@Ë;Š·«†l£i’Ç_Þ7Q]þÙ¸=þgQ:úŸôFì ™qG¦ó¿ ½²§F=ØSh¥¤ì?²;¤;øú éùÂŒ³[ÔÛìÆ\|'¹y¨ZôKîg>{œ.€ÙÓ}|—ž¬ÎÝ e~äò6I躖® Ò4Ò ²–ï‘ŽÈØR’òŒ™wœMH ^åøQµ¯Ge‡œt\˜÷k‘z–«µÖ0òº°’Y»@Ô²ìéC-Ló4æÖºÁ(ÿ{›œ«òÙ™´ãÙþ†­ùÿŸÓ9è+ˆÔ*U×ãÚÉ- ‰$“›±y ¹ž®‚ƒ—¨£½“h¨—ï?Þ[+©„úÚ9x8rÛ;¹¸yxíPn7GÙ}=q=_5'W·GáþNFáúÆáòŽ<*ÊÔJ¡ ¿ðr ´ãõòôPðü£]…ß׊Åx¸ÿQ%ÐÀóàÏ ns½'Üj>þNÜÒ¢"âRÒÜÒ2¢’²’ò²2÷¸ì¹µí¼¹%e¹%ÅÅg’ R²¿îÿL<ÊÔ¿s%Gg…§êšÿÉüý Àãè« &""%êãï"&!///&.)&))ò»†H@˜w ]¨ˆwï4òÏvÔüÝ|Ý|¼¹ÿ|·³÷ ððPsÿ·ôŸƒ³óýÈ;à?ø[•b¿oˆIˆŠ‹ý«å?ÿ.TPów² ôñ7öññTþákºù;…øø{p«I)‰ýïJÿgòNê¿?Ê¿õ!/òû”4–W–V¸/ûì¿ÉÿG¥ÿ%®çãèæö&~_AüŸâÿ­Ò?õ"ö¿óÿTaŽÿÒ—o¿ç?¦ÅÑAÌÉÓÉËÉ;0à·Î$þ§Îœ}ü½ì•ݼì\œÄ|½]”Äþ«ðÿ²ÿQúÛ,~›¥Ø¿ìRùtëÿ­ôòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòo†Pÿ×?=œ¼: úí5ˆ^¢ožT:aS>¯$Iª}Ò ` +)vƉ]½£8kÄŸ²<ß%Ñåa|Æ7oüõMMª€¶äÉ%D7Ð/ᶺѪPú«ºþæSŒ%hâW¿-ö×$ÉÅiHÔÆøÈ<=¨Ghó¸µ?ûI“ "ÿÊGòX‘ä'ô3–Õ¤aú ²žóg“þú 9Óé… ÇÛ#©œ˜]Í…qM{ó^Öã~ƒÕxáhj‡‘K+D ’#cô{W˼TN•À¶kƒ•h¼£ÕU6®Õ6 UïýoÜÅØÈY»÷j¸ïg®ýh?ýžcAωëMã73.ûR«~3Í߯¾J$tó7/ž~­–Ü­Z¢û­„×i[³ÝŸfËâøºIûIÜ®m$ž¦ÕËo 8XUIžö̪,zœÝƒy:ªò“· p¬$UvnGD}?õpOI¿PǬ‹Añ¡Î§™äÖlÞ³_î<]üòSð-ã:Fן~úV’Öó±ûkòÀ ƽ¯«ï* ‡Odó¢.PyïñôÊùð’ŸÄ{ª‚¾ÊS ANóšè~¹ÏÈÍã+ºD‘äÊXµß}Jö‘fl¬CbÌákúî¹L®9͆' ì§Ÿ,Šâƒn¸!76öؤ´ºˆ°’lã(‘rù|Ô¼5dcÓ‹xðص'$4úz’Z ÇÌbqH’Š+§Žß™Y¢ 騢㬈²}ƶePÜ}…š”-ðÕØûKbR±@õ;'®=(ŽŸMgø1UÕ<–B(ZàÜøøîe†ºé:+;UÕƒuMÍÞ¢Š*öCΣw5N%=dzUBJ§ƒÐ'šÇ&7ûS7$X.e×ïñ¾2ûøƒI»8"âaZ¢¹äåñÞPôÁ2¾Ñ'†Šì-"æ„ê£Åíø3pÇB={ùçxçoÁÚ1Ó/˜°ãº"KÑ… ØLðé=äϾž{Ad–Å·ßî n–è`T‚ÎSoz}{„CM…ËÑ *­>•,z9C•(¶ÇZžÜÕUöÊÒ}ä5b7©¬¢¦®Cr a{“!„žFÉÉe6Y*‘Aq‚y“!$Ê¡6ô·öêËÔõû÷à¤_YŒHÕIHHŸo¤øì/ŒÑ^Mb‰qÓU¸Ël‹íÞ:ä¢׉h}"„ðoµ»­~C•S•<ú*·—ÑŠŸ†Æ#~M* ªçËmT÷²Øâ&çöÖãè*¸.²â»Ø’E&/{f‘5ÜW0’$Ùîêÿ°Ø»=˜¦½±¥FÝl®ãäá|FmH¢A2ÝúZ¯rKÏíUî ÕQÔàñ¥7èµ½´€›ÓŸŽx«ïßJN£!ý¹\^Õ®0>Nñ€,ª°háVQÞû®xoÚëLç©iÿG*ÕùôbÁ W†ºÜž›¯aWî?Õcüä@u´f×­³Î?vç]©®Þ8â 4ŠÆ[Ö«°uÛRKc¯;êTj ÉÉ— 0.<¬îú5ÓÒÈÚj"ƒèÊÝC«>tݺ1õY…ÄüÃ/Ö÷°4ZR;¿´ç©Ï!…š'sÅ&ó]º®Ã÷dm¾Î˜’`Œ%.h¬*k”^MÝW†@ˆ1ÓN£Ý›ƒð[ñÕ[#iåF#­†XR"×ÐNÈ…<@ÿ à½Õ‘î¾áÎûy¸»ïý!×wh¤ÊQ6=pÎHÚeG8óÇítWw¢îˆ?0Æ”[úRwÜn~;qéû³ögXi¶Ÿ]ëUo’:ÅôÍä…”@†é:SxÙÙ„ùØK‘¹ŸRg÷g±ë.ó•ëË1{>Å1ÀI¯i¥‘ðzš,6X±Òdz`1&%Õ`BJî/ŒWj“§&'ß0 ÷Ž$dŒÅ÷ÿÏÚ£W…/”àaï~%÷ß)3UK4ÆkA W Êô‹G²;×µ…ÚK/ @×9è×á`rˆFe7t ,ÂHHHpHÏ“ÅOŽ_æÐpvâ€C¦¸*cÌÐÀÙ’‰ÝšI½¤«P‰g_esî ¦bÑlÈùÅÅÂi˲gK¥º9üÚ5>jµ3äö£ÄÇa)m,¶¡h:ê“&ÓT®DÛBùŸ˜ªqN5¢ÎÙ 2ØDDê]×-ûÀà`ì1#NzW(Úž\RHæfYmϯý1#Ä<ÏnLBœ0`ùe™X§9ŸD¨ÐE·ÙÏâÅeŸ„]­¸ùÿŸ_|ýW \Ó}-–~¥ÐÔcÉÆâR) À9—êÀ€É¶_yͪήUz%ñáIæ1~ø¨X*Ô©ÑçÕ‰Ù°âMÃDd}ñÖÔ—{¢ÉŽ`!L 1ÖN5ôúÓP’)ÔŽlä~÷øŒÑÞÙ”B,ä'G+5ÓbŒÕªÕê€isG¯Æ£NÙ 5,OóuÆ[á+y¦Ù¬J`Äýj½1]©TN8ÀÛqEÇWÜÝýOZE'¿4NnQ޵²ætÖB)×Ô“í¾ï3Ù±±cŽãœP?;*Êg8°£?J³_™õ–ûë6mN®ÓB ›Ò”^“lö™qF„ûÓávm^ö©Û7/ûø Ucfd8J|ߤ˜þÙd¤¦ø¹5÷S:f ‘Ízžw g~>-œn€àŸˆÀSe矕ÿõ™»×¯…CèÅ9‰7 NYJrÖtê©•mº W’(ÉXÈž9âäÿûeq<¤ˆºÊyµj6*¹……9×uO8 n@½›Î%aêÙïiߨtyï%QÖEWõÙHÚ%ìlmi>€à¹$y‚xx¹Âl›„oƒÍ5µzÈмF½4],F›Íæ,€%•÷*~€ˆ¿rÉSz¢ÿZjcÅ|`µfÚ ­/Í›Á4È€“ÖV¶¨ùÜË~vfÂó¡ÈRÑPÅâéÉÉ GÌhpÏZþž:? 6ÿÃéûž{>ÜÒs­þt‚¾ù…×÷DoÅD2çïëµÕcxæ ·òÐÏ©+¾¼Z,D•ùùüδç<€¥‹íú]ˆÈeŒ}PvÝœºÅäÚº™eû¢}×}ùUYý·/ÑÊÅ¢Ò|í¯¤ÚÈy3ÙSÙ1ÇqfÏÚûK,¿P磘1Æ$¬Œ¾ÍW'V÷t&Ò åd¬j ÝnÂ6-²-P[bÌzûíá1ÇqNœÝµ‰3mæÒ_ùÚýêoî˜qióþIEND®B`‚PKd6;ϸ)q§{?°Toolbar_Search.png¬¹&a³¶ÙîiÏ´mÛ¶mÛ¶mÛæ4§9mÛ¶=mÛïÛ½3ç;ç߈cccc7#Kweå“OVETU\QŠò°Ø° R’¢Ê·„ÿ–oP×.ÞÞ7.ÂRªßþšï7ÓÈ¿Ç0Ž’Z. 8]ÿÐŽÖÂο"º«˜¦«ˆ³™‘«•ƒ=¡ª•#33#±bàoæ¿sW#g3!Sc3Bq+g3g…Fù¿1›ŽÎêž¹W«ý?BQCvP¨(f[LX¨MÎÉCcEÆ€Wý_‹!ùîÐBwŸ]| Ù+œÏ~»-vZé^ù( ÿm¦Çä3‹l¿½3Ëýfž¿©Bö`à Àк%eƒã:™{äƒ×@1Vû@ü]œ Æ£wñþŸá$¼º_,Ãàú<‚ïÞ-RL:¥Ê²Š…5Ø6Zª{´Îo`g÷¶ÔùK˜ ^ Ûû>8{í²ó>w=B@"5[hÿe†·`®cˆ©“Ù%›$íl„Åßw&>ÿuäÿ£Q•°€pØÙ¨ªümŸžÇ&g2»GÙ¢O|ŠëËsn£ÏËŽŸG÷ ƒÒB©™V OC úÑÐYn2ŠÓˆŸpõJG „‚*y%"eN>ŠPrOh_H­H¿Çrk«ç²ã`óýÐìÅÑ×FV{;Oqødék³š+½ÌZ•²øP¥ ßx¸,´ØÛ<5þ)”°p]{±«wò”­öKƒBï¢nn-îí‘å¬i“£5°¾~­·c½k>½¸c‰PS§gm2ƒ‹‹7pGáÇõhv™^­m¢«+¨Ý_Sı”jõâ „em)rÎÖ(Ù-Xâ šQĉXŽ}CæÜ*`ÝÒ«GŠØF_Ý./™/kˆÃH½Ä½“¹l9õi• hƦ=[è'qŸ»êkß)™·™›ß¡—Ñ•ÞqçKǵE*ú±"SÀš€P­ø°64Éš@'­í8:d6N -þáslg÷6 }ä!.a€*ŠËDm&z aïèœôl‡Ë¹½lÕi¹¸Øë@Bh0Ù0n¯tyB¾0pKoÀRÅgâž©ÐðûyÍKÓ#ü©Í!ˆùÄ|ÏCÆù ’ÙpÍÂÇ1™reÃSÆ+™r­áË7†®Plá(«aHÇ}$£ÕTµ4ü®û!‚°l¬®’/g>ü±α><©}ª¡~P¿÷YBñr@/_Xöx™tÎ0pó­mÛá7àurŒd‘[9Ò‹¦PST‹ÊùÑ?µTL\ö¦5¤ë=¾‹á¢+V§/QƒLL‡•DÌ(ÿF²vd„ÉÁ» 2ù]üSœª'E0WÙìÜð…˜V©E¹r‰ŠJÇ}pŠ9<§n4Îæ{ ¥‹^„AŒ;²_,ø]bC@H³Ž( ›xÞ\.Q´…Õ¢v”š¦FÝ…“M,T¤]zœB>z_ÖÈŸÁ /XI8tâÁl~W4ãö¢k_‚½EΑŸ~_ñDŒƒêûÙhLÔäº>óÓg¬ ªüÙ QñüÔ­V_ü–Kà",¦ã>Ë áO8SÎzäùK Ah%Ø^ôQf9‘xikº˜ †uÁ?Rþ¡âSAiðg»œ%áÏ,‡ñF=áBH‰öƒó4¯Ÿ,¾Âx00FǸøËÁ×çɳÁöîRÓ¡öìS+j™t(X¥YIàY`ÎâÇ:ñSõ`(¥±V÷œ9ý¶ÀŸpœZ¾…胡ròNEQàvÌCÃSWÐÃÅ¡ð#eº%Í×ìVǬìã¥] Þ)›¥ãNäáOæ×EáÖÍ„•gô”ñ•ÓŠOÉ8“Ù|‘ÖU‚n¯¡B‹ ÃF¬cÍ‚¿•­•°ŸDê±ÚdÞ›.ܹö<`v¯YAþ¨§á Š)Üm°hL1]Ä‚NžÒ\œ Ë:4‚cÕ'Ù>Ùº$4Žþ.]ú™*š®šùÊ»€FCÙ¢‰%TÝᦠyÓø£Ð; ¹ µBéj¤y|¼Ÿ…¬:b Ù4ú¾)È!-ùÒéjôbß DËï:CîX‡.27–H˜(0³˜hTC'û‹ISÔV”Ät 'Îl»I¦HŠý<>õ k̔ƒC§>é?Ç·€Ma 3ͪƒlùAü…k"†®öÓ†ÚV¬r͵`˜”Ùf M´ +k€YM%gpÏÓ;ž¶¥ÿþctdЋË¥í==î—߈èÈÑïEÒqØ¢Š]41äÎXKÞ!µPˆ‘©jÒv¿3GðÅú”>øðE ‘qá,»vUæe)3vŒRmÚ°± 0Y7æAÈÄíßÓøÕ‚‘åŽAMc ý‰Ùø{/IÅX2…¯x/H½*SÚm%V¡„+$Ä8¢ò¢bêV ¡§n~l]ñ¦UÒ¢Íà‘-M"÷Ô@|pý“Ukjª#©ô×¥mõ>«vÂêŸ$žçõ%ߪUìT³qMYQÚ˜g×Ê8ç\žöÅì·Yñ:yï8ÚI Yj/œTû¨¿7‘bh§ ¦{¶Guxæ0¦0êùjUü2ôrjz…¨fùí …ÞJÖNõË"ôØÊp‡‹¸Äv8ÅÜ•vGðBh¾J‹©‘»X†L’E@Âö¸øcáÅ˪„Pu_æ:u,r."´aÈ`guÍäü¶Ž1“¾Œ?ä׬áÄ„˜uf–Ö‹[[)ŒJý~YY)¾„€K“éörzó\›²r|zD¿9_x¶A4x4nñaóSÎyE]D…2I] ,‘ÊRset§i8=ÂŽ.óûïÊÒtÒYƒûû“Î[ªÌ–ÂÞr—yµbÍS²1Ý`Õ´1I[Ä”l ãÍÕªÉ[ÂR#ž¬K N$1óq¿òÇo£úFÐßÏÕö.#eT¾iã¿8Q»›šV°”^C5â-~™N£x—ÎV»,7Î…Ý"è\¿kLÙËï.gàÿ FJg_ç5©º’kýRûÆ×ù ¹Âé;ô³m„"aH²È·0ESÚç ÇÀ¤1uÎ[‰X ÎíÎ-ò?1RëŒyï~_ ?×ËÃJ\MiÄÜqûmû)ñ&~Áà EÑZ_ïÐyð#)¼hªxƒ‹'úÐŒ¥×®Yz“¨9·‚p談Þ(øOиZ26èß,«Ìaªg9µ”W믇Âlà.Ëlö­‡:‹\Ф‹Ñš° ñ¦Ã¶Û£)·v#LnÒ¾øE¦Uš5™”¾È ^û*b!y úX…ރʞ‰@ï‹Ã!»‡òF@ S´õþöÑã½ó‡4™lI=:•”ØõÕþ{íu ¡w”ˆG²a¯CßžOÙ%pFd'ê‹·~3ˆ†à*ÔËÓ-ò;–+·è7z„¥?Ÿ1<„dõÇ®(âƒãä Y9k¨”ê1#QEzÜVÍ9­5·(P¾çèÄ1£EGÈ‘?ãvU$òHo¯-™µeù,™pµ;‡&jìSäÏܵvøe䙲šÊ𪾂f;*§ pQDq Wš6P 5`,b-Âý\ÐÅ®î_Ëâ>¾sÄ"SøÀ;ûq±³áÓGpõ;† ï¤‘?²t¿þçâ,iªY$í'mÊ'Îë}»Îµ+tl @Ý3já¤ÛdCÛIî*ã£fr>&F™³\³W«z·ºa÷þq“ü¦•žð@Èf>ë^ý¼{º0Aõ$×ôoD³VÂó$þôbñE¿äP3ÈÒô`Y<6Åw/ *¯aïs>‹ > SÚü6bà‰ðYœØÖL;J'¶øz©W‡k¥Î“•Ì­T\Ö¸[œ?!¹žyàOòJÑ.¸ žr ~­‰Š“زý¢Ù™ÿúMé»1ÉIÁÔƒºTˆ7“6‘¨ŽËýt´o#É®·çò¸iîšØÐ# †Š®gya,ÍU¦¢ŽêtÇNÝŠhõy’¯éeÛÕ¬Š+ZhOîJ PR(míšÔ+î*0ˇUŸ•E2AgÚ0ùRÄ—-çïKn~†æø$ZµÔ–ù¢…ëÅ„²¼ˆÉi5NïMö¯õÔqFJZh]6¸úøóž"(ð`•:n‰1%?ls^sXƒ¡Ó‚ؑŠý2⎠¨V+©ÈÂ5×õ?SCÌ-~d|¹å:c;³£]s±%=V9MbFLX Ô\’S‡¼eÙûÞÔH8Y”†7ô}NÙx$âÉÖÊ)à=Á©=—Cd;†Ÿ»“S*pJLÛúu¡.gÞw† мÑH9Vü.OÆw VE%†Ð.žUñ¥¯°œMxìKÊFX ³Q¹±TÕb" Þ Õg¨ù@½ ŠyÈÏżô¼6F€ØeÔE£¡¦6ËÖÙtñS‡Š•ów yœ’JkW¦?Ê·v¦ 8¡äD’ÍVáëG‰|{R/À@¸n±¬Éãß‘ðgv·ÕŽÝ[Ñ´Wq“,qYܽÀ?wæL”†;Ö(#Qol4R¶ã}\6·Ö‡ÆTw–}7šâ`Aîãà…£€qœé¼ ÇÝvhRÕg¥’K">ç[A›{æ/ƒÎåÊÔ K(Àyö/ |gpÁíZ"þ‘vˆ‰ÚØüY«°…ú~(׫rûÅß”Ú ¡Õƒ7¯Ùø\.|®Ç4Ñɽ ;w._Álѹ@N×–oú†ò-…²jU’fîû•Eðü_áÏÞÂÒ47oY¤W?™kƒ;ûv$ÕkfJ#1iÛ¹ÅHz¡FynƒžÁÇvE¹ÏÛ~±Èo¹ŸÒÝD<hKŒ®=d;Ö.âÕÙóp ÂøÊŠÇh™ÇpJ‰Òõrž?²ò•ñž?{gÉ(¼wå6VÐ{”˜#uB^|6V=¡GüëÌg·"½÷høóh3m :j_ŠV¿Jdx8#–`ÕÆ§É.Ýß6m¥ _¬¦¦­}t‰u“ ) 6¾”f&ù7þ:c™„B=m ÅdÞP+1çGíS1¢Qi2µdGNtoC7Š_èO‘êèôž¸ƒ|3‚îë!»!²ù‹‘½&Fæ„Î0f-¯P”Ú‹3XJ{§ôz'vãód ¹Å4d¸zήæñúpœïÙ×Ñ$u‡gÉåÓ‹òã‹d ¼y9åwÙ€,ÒûÝŽùéX­ÿÎËäËŸÝðNÏ–{Çñvš^'·cLo™o‘¹dLåeµ¯r¹|‰“Ür´-ê`Š©dÈv[–µÈ”Ñgu˜žoõ$~WÉàÕ»ðÚ öêø—‘,_}ìA«Ø"׉³#vž†ëýâÏé]úŽøOnãGéø$\½‘Ó´åºÇ¾ÿ•ò{xÿIS¹úçzÿo’{>½É£ôqÁÔ?eJÙÃýøû¯TÖƒ$ûO’Õcvó7[E)Ö¸ôÛ;cÿ¯Ù›åÛ ÓÇ+ÖA%¤ZðòùÍÜåŒiM]òÿÖÕkÜ÷ø¶Z5Ö¸h¦•>ÔcšR'!==‰X0‰OÀs„©cyÛ.•¬!g%•KE'XØã oæ{°®ôvq’.ð#`è$£N~×*ÍÍÿ^}’Ρ"#³ }ÈÎ9 nV¸Áþ/ƒëñu€ö~X‚\'y‰Ô¦¬AâþaYæÈ½Z›î Y@¢{)qÄýW¹Ë£J4‘9²oqÔ6É+þ:Žu}uαÑ9½®‘ì˜ÿº,ÝEþ¿®ÿà™P&ƒŠ@ ÓY‘ø®š.t!Gg‰ÿ,¼1‘®£‘oZ‡Þ$ç,Ûo™pvl†pjrÀÄ ­CbZ.Ž{“‚ÙÅ7>]?ÄØè¥ ¯41)…Ü‹éÕ”A˜€Ó·³Ê:QÌ#o¶IŸƒj/ZâèÖS »úÍwRѤb á#c¨«§::EÆ@½Ábÿzá%tä+®8òÑjöŽƒ<¤ñȲp¹ˆï5¦ã0ÒU1çŠHâ´U˜ê>êDsö`}Ì—ÒO„3 ‚¶@ôwWøEì¾--‰-Уê ÆÎ®Ï·t€°u܆dQ&°÷¡¦(€›åá-h·;ЛTÅ?÷žL „ÜÀO+¾i2¿Y“[͈ !Qnmà…ð;Ⱦþ†]l¬×„÷ûÃÌ(KÐþ7Ñ.ÅfˆS 蘆±»Tܤhç·u‹o_JÕ b䙿31ÅÁÍœø~ sð·á³¢{:v‰i“]MKEÃik]¼‡Ÿƒ¶Þ¸Üz+„JžHG8X:ÒM ÚtiÝOãÒÖ~ïz‡+uvÀÅЕÞ塘îd×RˆÃäÊw;jÅL·Q iÒ†­+%ˆ¸W?ÓI¥¸1AÕUù'íAK.5 >Íœdïfr̺‡v!Ñî æ 1¦  h8ÆaÀ3µm £‡2»ï§xÃ0±ŠÎÈÀ|ÈÚE´\+ï.¥‰1ä+ª^î…ÿÖ!ßO4}Ô@`Åä ä  ¢»r©ú2@Fp&‡%7€æj+Ë~¤jÀg ¬Jý;Ê!3^®Êr|±Ï®V挣ø'vÁÜMÊ|I?HMêÉX/¹Áº¦E[c‹!ÄF°ßMS‚”Ž ÝGö‰t\Ñæ­®óF~ã{]¡Ÿ 6’}d‡—¬ÚÜŽ­®—³UtÚçh•ˆõÆ’†$žÞhx€]ðÍ€óÇÕ-W‡­8Îà“KOgÞŒLOÄÞq¾ù:¦çCç2ߢ4—¥ôžÑg¥Á€ómï$ïλ)W¹‡9g‰ÌÈ'°À;¬·øèSw…Š›ÕYekµØz(‰D/‡Š°‡¤(%B”•á+5-„’«ï÷'[à>\ë ¹>y;ÓWV>ДÀl²”3¦Fe#‰»ARw¹9¢cïé¸3YÞÕ ~ä‡ ÝºêõOö®„ŽÄãYsG)`–ºBxvñoµÇ´ j$ž‘Q¡/Ð% ªá ‰R( QV‰8óå˜èx¿Eü@˜ž­Œ:´KQ®+(ªWÄ}!ȳ_ÃÕ± TíÛ˜÷Yrcýè«d-ûNOå‚™KpäN®¾¢˜bf‹Ü žðª–5Œ:Kó?{~Ö<°5ÑÝ—¼¶…·„ê¿‘k˜ú1õMq1ORÔL¡{™zw( `F÷ϳ9žŠk ®ä¢gÙØ.è’|"šé.AcÔí’ýSjRftˆ> œFü+õóšˆ.Q Þût¤‘˜7 –_bßÒz3ÓfoH^ÐZîÔ‘>á Ñ–C$iH’a ¯*Š;±5>Êõèëº#vg¹±d½¹³€ÆGíà6>+ë.1‹"knëwýBÕA–±§Y÷Nk÷\ð¦Ë>ï¬B±Y‘iP{•š*xVOcý§6gê¿Iq ï¦<of°IÌw—Wáí+QÒ-•2½›¯z†k»Š|È Rv„¨.½ÑS§‚Süæ“îj´Tr>H,·DÞO¹™ µA{Ê0“f)UŒ'i¦Óò"\gfÔPÉ ›—oà×4è*w¸EžF§àWsj½Ä·~éQÁ1;e½&ñ.î» ø™/^î<øXnº4Ô%ä•N!"y©n@7|Ë$t~”olJ²ä׺Ÿ ¯CaQ5éf &ÐXþ ¶° ¯>4mtä'%ß %Œ`j?`âMÛú´˜ÙojhàÒ­´k¬ qûê1ÑZÐDžÓOÄ*Å­ôŒb×XVð†bDþ<2‰¹Ë“­ÝÑ,îXŸSöO ÌÉr]p4){J)0eBC—ë°©h”d½—§ÞkXùÔ’Ö-þx cbûýÄ~&§³˜;€ÌE¼>Àé¶4Ï{Ï~fjð%ËÞãn)t¿X÷‡]Z/y(ÂëÁmÙzó–ñ{Z¨|öò(\:,HÆÝÓî‹©²í~ i8dS8ZÛ3Eâ[Zû·´{æð/àv°¶#¿,è¹ê™=d±•£´xÈ•$f;=$ãG)_d(Sœg3-È¥v­_*üHž+ÌŒî;Iâ®üÏøˆO'Mþ|V1f‡îøDÈ02tGNNÏÀɵƬ¡á]° ‹’e$£Ðh î¹{3\2qË,§¯y=eÚ«·¾÷»H='Hgl-’˜U¾s¡\é<€Z²Êc<ýè*_'0¦u‘ _oø'%žÜ(@gáAd%ÒO 4u E([½§Û¤îãp¶¥}váàûi޶Eº]óJ~Ë¡÷õSÌÿsŒ/l,Œø:ûé1âU×JcK¡ï'Êï¸Ë, ¼?«4¬NãØØïqÖÁ×›¢ _Q²PÖ'©ìÛ,Њ¢zOŽ”I}ØIg—þâï@DÄ—`ðòQºèTs)Vûl¨”qè¿®BÇ›^éß}^ȵºYf>†ué–ÃÑê3ZîÙÞ}°šÚv;íLè7­,®ƒŒ"—¥ò‘³žÒ€4a í>+]æ0Ü©ÒÏÏÕwÊ /[]÷Ùu6=O^‘ÿÚháµz.Ôj‹ÕW¼–Ârÿ·0s“¨!Œs5Pdê7¸ñÔzcD•8ÝcµþiýKQÊŒ¼-JkKÑçJ»+RaCÊÈ>Q²äÁwÄ ŒÊýA£ (9ð3´d(·€â»àä<˜‘Ù8úy­âeC˜.‘x®Ar´ †±;§W ¡âþƒ|¦«&ã o$ÕßêƒÐ¬ñs<³ŽëŤ&û² ×™µŒ˜Çƒæù§s;MJ0Ä%{I„ß¿oDJ)娣Jxd2 â2¨â ±ÓÑd'L£Çh–D›‚¼ª…Cäo ¿NA`Â÷™hšyÁ©å1ÿŸ1e_µÖ`TÌb×íþ“MôE4’Þ+HcÂ&™Ò‚ß{>ÒAîþÕ01ú÷,»oøo–@ ?”/´¼¹¯P -;ïòš3VV û`:!™í¾}(HN%y9¼ˆÂšXcöÈq_N]ªñ a4'íwñâd=É¢hXB:´DÊ@z…â‹GŒöŽ˜­ ?á`ù» Åž=#U*eñ.õ!D‰¢SP†³ó‚š‰;áî$}/ÆÜ †_ÿŽ´8IÌ" îÅè‹úíäRFfi¼dÓú,X‰Ò‰bò’yøBL’.i¦9NfîÞ½ÑïòéBˆ?Xß(xŦäZbFõøQêˆyÅ*z«l8ô8ÙÙãK%=M7%¤3Î`¨ÜMÊÐUmËïËIªû(XêævksvÍê)Ü¥§¾âz…£'Õ\$,îÓ¦ ³DZ¿e(‰Øˆ8²Sè+ÊÏ‚…Ãj*ÝÆÙbžˆÐˆ‹ù bÕ™c`çëú€SjøâcµŒ¡±A¬Ÿmâ««XâúØosYqÈr °n¡P;™2ø oL¾¨†cÁl|ÎëÛFŸª(üÈ\S,2ÚŒ>ê¡âÏ£zSˆdÀÆ7dþLÄÓ¡½-ÝÆ³•lœf1&é6µn@Ûú–îÅÅ€vãMÅ7‹¤îpŰ·ê¼ñ¥Y)|ÔnYr#9ÊŸøé˹˜Râ Zý.bõ1Çk–Ø^е‰=ˆ1Â.ôgWðÑrsøüØC|ûT„G¼%1HIFr°õºß=Å\Þ$Ew⣄£]/×Âø5DÛá¿Ò¶Bîgöu🊠xµ^†vжêõo-°ª ˜¬t:¸â!ºp4¥è¥J¨9A% öà3½$sáX§Aö‘õÝ~уýs—¨U‡hï£'±Ç¡òW5f†ƒ‚3Ï£M‡âŦ#¦ùfðÓ•c”‘µ”þU ]u„ÍË~X×`OX ÉZ<ø_gûä{w ÄšÁvLÙ=üBùÍ¡NR‹ß„ª%DÙ#s#£«zJ`,æ/Þ­=ñÆÕgÓ"w²¯GŒ„Úúêé‚È꼨ÙÒRïIe|Ïíiöšt¿«Ïÿà}ÒTV…XùÅNMè-oÄœ £›ea«‚+rÌå£åè\,ÜlŸ¯—ÿ𳕂µzöôÆIílˆöM;®F v’ç~KT¯KnCß±yHqIõ7o'¡¶/Ø –&7xÌfòVê‹ð+ë§'"ôyö‘TœDG9S§yÛ€i.{çæ󌪤 >‘¿`L†²öEÚ±\T<4Ÿ”0•ìó¾gÄG)" ¬_Õˆñ KÖJE^y0uz¬£nN.3ƒîiŒäõ®±”ì"žÓ­å@ׇëiMäGð•µklôôœÓÏ¢6Ü|Ù¤¶xæpU)©©Ú?Ù‚®^Ó‡D%©Ú©Ì_ჃGm¿LçBw³×xô¢­³²Ð} 5µÐIÚÅø­Á’m´~Á’¶‡%ÇÞYV€þG/Æù{ÇöQ‚âè¼E+Àº‚ðœ¬`…&øå‡ãceÓH` n+^iÓª½„oRYnµÞ+í׿ÃÁd2×ã~ ègng ùb*I-v§¤GÏ”pÒ4ÃY`±!þéË¿úkªèüͨ÷{ôeÈ0ÿo4DFäuXhÿÓH§KØrŸŒMQ_&*œ2•^Ÿ:¾2´ui¥mZ F>FX¯gÑ^pʤá:ÿ®áxè?R;Ô {ÌŽa™È-S%°ˆ£Zþse³íhÿïXdËGžûÜd³µü¼˜I'Éš§)×߉±’§zßd#üÕh̓Ö\Tÿ$>kº‘LNÑá°í&gh“Z@zA½€#Z*)+¥š±Kà„5¢«¸õBo¾–ù¸¯a!›—ƒ1Ìå¡Ú• t”‹£ÔËÍû'‡ÿæO±™L:ç|gjvqj¿Mê~»ðÐë‚&°F±œMç¼°í£5:Ô>‹Yv>XhÈ"»¤ K˜‘*jt¨ñ è!èÕóûÙììItæª^J>ê ‘šàðZf !“6…ú‘’W‘k ™¥±ì«?ç¡zœ+Õ¡‰¥ªšóµ“Õ²Ûq­¸âXö:8]ÃYåE{µNeŒB´ú¬,š”ˆ %@oY”¾ —Eü¾©:¡“'ÖF0-–”"ޏÚÇvJóC/p’\Láuæ7¸×(‰c{n\y™dÿf ©Aµ6ß.÷ÇbããB»b(€î"$m<}Fë‘"gÊÂQ¯@©X‡"Òéº`Íá`³í’¬m´¯)0"ÇùKz?7e(×XY+pÎúþürþB„>N£ÈðrRïÁ³ 9¨ˆøð3ÒÍáªbï.KÀóüµkµº¾iDÝõ=+´>i¸ 7Ø«ŽI¡÷Ã-68ã»Öë",ƒÒ;¯º‰¬Mí/ so˜>Å“Îÿ…*˜âøt«6½°‡ð+ç¹$ïçómXðm0ø°*$ÔB“üXSä@Êáö·Ì<ü]ËyÊÕ{ÖMª§Ä·ó“ÿ1*ƒsî"ÏœëBáÎÛ óàz¦Úz¾˜þÓ ¤xÖoéÏ«ÔÀñ¶šÑ¶•O•¤ƒ›dÔ£0Rú]{]üءڊÎrCkô£z ß´@ŸÈãÄã]Ò­fÒ­FãC£àÀwÜÝ0=Æ~o˜yoÐ6ËïñûhªªÊè×n!¸Dmÿ&žçÛ¤)àU]ÐÕPpÿ¸¨m¸µ¯iªÒ Ä?„po%_ÏÓÀ“î§nªîSZ¡<Ù¸ñßc²ýujŸªÈúí,o 8^ßâà£T ¾ ê–‘ó’8sƒŸuk\!ß!‰Ø?ÇcÆi¬må‹e?„›–YIv«Ç8xîk"4òdŸÇ‚ôDe ™†ÑÂ]`'ÚâߎçZÅ–«/€Ò|BC•øãèJÓîy\‘çy#ÎŒÁåÅÞè‚Æ…¥ËÔp‚ëµÔ+\‚EB;¨Øۤυ/Š+.äÎ6Þr ìšö¢µcާ³yVJ¾(â¬Ú0$XÝvšK{]ü½çuÚß;P3w Óö²Hì«jôV¡Í™’¸«‚¥ ²ù`†\µÖ±Ëêd/ÄÄ%+[¤Mþ âÝ`G¬–J°6ddLv¨A·Kb÷·DõJ‘x*bi‚“AÄhhVHÜ:†öJOd³Ž¦Úÿ1‡ö”¡Þ:pø§ß€—í”ô¯æœ,#G‹°9@Qê$, —÷úÐieŠqG›AsÏ3Ûš~ˆ76Ø·c|~ŠnD}ŠÇÑêuÉ©ò‰(b3üp‚R¥ß9Õ°{È}D–r¯³åi˜}¯—ͧ"î¬ô²a^3ÚhK9¸ÖSX…9?ùiÚUVk²§¹P_ëwêȧ‹såa}FbÔU¢±ã˜•¾ºk?+Ù„¦Þ$­5QšÔšiØ&B¢Áöÿ>V+‰bsãu1­¸ªOÀõôÔ¨-ƒ­Ê·q·ÚDkU¶t4Æ..³÷b’w6Q¬Ã!%âoqÐ@Ý:KàÝ–D¾ ûG/GNÿŽÄ›ÛÛYsÚêuÀi uþ£ùÇôÄšTî]ÿ"Ã[“xRÇ,>KÉõŽïèŠU¬áü¸:bÓµ€·0±â´¸è%a{U°´¿ÞWAÀļ ½Mb‚dWDïýS\l ™¶‰UMAúÄÎû!Y3?Þùbp5¡åÓJøb×ú¤·'2˜³”rªã… Yëú™2XÀßùKÜ´°>¹Ò†â€³Æ¨)·Ò?Ͳd×N%jø’§F"1ñƈÖ:lxQ _¬lu»¹wò=`_k _ü/qfÔu€ÛÐL´IdJ"Ö-û-©û∹pI>¸@rà;? ½I{f€D>Á9}Å¥TôY @اvÊõZxjLÕNkªŽÐ×n¾Ðièf"ýõ[j÷qlç*… ~‡Ò Y— àoãN&=ú9+aÄAõ!ù‰š¤@ô•ã{¬=FæÇ-{˜9<öørjd6ò¨<ޤKÇÊ?$_ÝÿÃt'ùþív€ròbçnÀ£èyDâ“{ÑÝò1Ï¥óܹa”ó…»;gsñ±‡üžM†|Ñļt þO„Ôeökò™—¾‹ 7ÊìSGÂPûjUmôn¾ÕÇRzoˆXÌg¿Mò.$çG_S?̱¯S ƒ"˜ÎÆIÏm€”$`/Pž0(½jOÈH4ÇÚ83µXíle£¦ýGùu€{•Ôª@1}e1uÛöNÛ"‘¯ïYeÏ–ï'[×ãûتÎù"Rª=$6ÓLx©ÿWê!H1?„¦ÙE7A*Yõ(ƒO风]Äu[¼ºÄàhôïwœ,ÞÚöe¦aÚ݈»j¯¦Ò‹l E$§^Ï]ÕTÃï2 íâ@iª‚®Ž'xàG¬»£.½¤†a§ùõÊ…ÈÂBUIÕò¯U¼†¥ó$}‚D;ƒ„GîÏ—³­#Í7­/² °ëô·±'âCÌFc%À–j_±ÇuÞÖÄ[ëDá½×|œÆç£Øîaž¬v¥Ãhƒ¸ÏUºË¦‚yJp£¡¬âçßv2øµÒ”°>ÂKúá˜ÚºÍÃ’FL]f~)Wþ ×øÈ ƒëåyûÛÅcÇ_C¼êæÏþ"ÔL6½<Úk^þ4kGñ-ôמ_Îî]«¤g:WˆCˆ²´´ùzÞ%õÝ1ÀÒÑû/Ùܯq’‹?¯ñ³É12ôŸ÷mœ‹øéõüÃ)3î7Ç-õ‹ø»ï=OÐþ Æ»®ÛNçORU(¿Ÿ<9üX¶n› .þþZÛ?x:V)hw`¦l£“]ï¿®„:tßÕ0Y¹å¸J·NÞ?k9G—xl´µ›qø÷ “oÎù9¹|T‚Ÿp¾›”ó½p´å# ¢u‡¿¶”],WFÉÝäµ»_[·¸IºíZy05éXàÈG0Hh>!šõ‹qóý}ë0’oæ±ËèÚ>>?#úmÚ+ÿ0w4G»Ü{gÈ3mECQÎðã3—‚ž¼iFd|vyO¼n¨ãëÚb° ´óø6OR½•¿9bb÷‘B.³AÿÔï9ìî¡k;5oƒÑÛ¬÷Þ²Ë3sù’´Uby…$MEêè¼ñ“:_è£×›:tØÔ.‡á7Ù4>_äçrCÆ/Ÿ~ª f7 }÷K–y‡o£¿©u»lÓM~ºþg¢—'$bB¶k«”ÅM¤h‡ˆü“ý:±')&´]úÞÙ¤ŠN\º«,ÿrqÊJ1äJS³t8kÎ3´©äªe‘à‰Q68úÌØáÕ*ˆ¯Ï[l†gN ýEáXö£¿|³uë/±ˆê:DIãlè%;Ü¢NÏñ<ŒÌîÍð\ÜkHhù¦å(²ù8Ò3ò ×o:ÚSµ^}7Çük;‘í»“#P·äm?æ(¶¡=/T›1šWÞHÖøùE”ÎӺͮömþaòK¼Þ²¡0DÒ:*#Úã9¤Ü] STë†M!DÄ×þ&|ð±L×t½Lµë¥}J,`ÉeåùT¡ü dÀÎFXÅ3WO~1˜ñûårï- HÈÞ‰ÁðìŠ]AõR((Häݶϻvh\m>™ã—Sæ¦):ÕÚöŒ%øm#á º¢ELÑ­MÒ&™¢Kéyâ Ûëœ"ú©ù† 1‰èeù[o[ÁМc hàæ™fÏŽ¦6èÉ—üPˆôc2ÇqÒ‰èaÕEêú¯6^çzO„…Ýqªl™P%¡¢FŒó”VÇNÌqüâ9W¬äÔªæIÇ^à³G†læ*4 °Íg£ú>3ñ  Ñòÿƒyæ^åÅ%mr‹«HbKQ‘Æ•$¢&‹+KÚ'æx<\ÃIŽkÕámz²ä/ŸG”|Cþ ’øþæ‚nô¿ÜSª'àësóf4à ¯“B-Þ'cýívС·Î ÷³òe£Ç¨ÁU ?øÔ5ûçù6ý³½³%~Ù" VBÁ‡ß°¶²,ýyýeðþx¶ºë°ÛÜM¼ÿ|Æh®»§¢f˜9Â]šô¦5síÊ ,>¨´´v¨ÞíŽõV½h3ªí6½Ã™ÆÏ³ÿ§‘b˜£»)¿WË¿n´î·ßñuÏm:ØŸj=C'O¯¬¡g-$ónÓŸ{:Ó_ò³kw ¾á^ù/n=CôÝi€¯ðÏtÝÏÇF£ÙÁ²x9r ÇÙæ Æ¡ÍIÞlâ;©ÀŒÞ¸Ü‰CI¬np¬‡v“ájw£4㾕àÒ¦àÄ®?;‹•_Ô m;!ŽmÏåIî#Üš…&!É¥;ä‰ÒIRʳE+Þü‹p~úýõåz–þÄ®ÛcÅAPí¸›e÷^@¼Ÿ^ì½ÿ˜ßœ»ÁË—4Ï…ç‰Ã”…ôóÅ£–^òNãE€`Ë8ýeUÖ¾ƒS€H: 7EÀo—_pôC³ of7óž‚r¸8þEÙ­‘$0ûüžÓPßó8¼‰qò¾sõµ Ó1Üéþ9’Ú;{q¨;‘õ¨ü™»ú6øé~©## #äW*@ôx¾:j^²›_NúñJŒ™É„¦õ2ùEv•»ÝyËzï”áã«}2ÂÿsEË/¯….ßs –I/A‹ß]£\O \7ZÀ `ÐÂÂbñ°·sŠ8z²Õ÷H'¬ñ`c`!0u_X'.[ÜXEø•¶½êÎèë»?‡³À7Z.Ù«8r½iqârÙzÀ0jI°–t'…0ê ÜòÇXõIº?y·×/÷ j¹Ñ>~EêðÍ¿Èx˜½l}`;<û:Ñ(ýÒp¿},-WÀáº"þ¨7aœÁt×ÚKY†ƒÿ:Ѿ¿ñõßk7 c˜…¤y pÔ œo÷šùý÷ ÃÜøƒg8ÆÊþŒËÀà ª•Kà ¯Jqj«Žm»S÷J§ûÀËwg sðäi(Ž3oivûµÀäð£wr¢^ÖçPþ?­9Á4سaéé; çoJ>x+ÀÙÜÁxõ>Ä®3ÉŒb¼tU>à|yk©¾Œ}ƒ†'N8zúþç¡¶§oNs½Ç5 @°zÑ9HÛýánSS½ÖMR»÷·f‰×T_M,¼,ú«Ð›8-í6·Õ¦¶o&ýä­Ö249¹GÄf÷ï¼ôù†9ýçú”,ÞS÷³Ï§n°ýe¶›4ìï»îM×9¼Yá«ßë"zl8ô¾lMpt Ïosö~Ý«'÷Ù¡U7pI»ñõPÙ«CÞ®‰?ÚôÝw™©x4ìFœŸØòx‡&ÏŸRÞ—ï=™ I ×/Þž/±>íäk£DafíÞôŸ¿À<À"ÆÒ0ñ|ÝüUIÀ#Bû6uåá°ÿNÂbõëʇf!¼59`ßöÃÈç'±Ý}¹!>R‘¨ÿNEð”Ôré-…çx(Ñ›€«;¹©^Éñ™öYß5»ûÈ–H Hbb>ݬ©›uª+ϲr³3ÇÈHáï¥ï]þÜö«®¾¸Ï­õÏ7ºüŸ;ö;[Ç­©7‡æ–ãUÅÝ©zðæòx¥æÙk&ì¯[`'8) Á³¥è([óíÄãj¸%iÃ}J`÷è÷î¯ÛÑÛ¯ „7íÍ”[:'†tÝÆ;¾ÞsÞ“Sþ-±9$ÀÝÿ£½÷jªëƒ¨( ˆ¢TDºÒCPšR¤wiÒ{ A©‚HO@¤H ½Céé½H =„$Ÿ·|ËüæÎ;ï¹°çäœäìòÙ{íµ×^+™Ì™Z+#O­5+ÔL©:“ãf¸=IÇA^eÝu÷Ë2^÷£vË ÝLÌäØv Ý×d) Šô B/& …&¥bOøƒY+à™zÃ;…søfEø·ÚÕ…C˜Æ Z†s}÷d<ÑÓQ —…¹µKl0£¨­ÌÈV÷ [®>¶®Ûß•V<¿õH5ï5“Žº.ÉWPŒònŸ†àn·É߀XÔœü~‹dD·ÜU‚ñ>Á®“fÿ½]/ôÅ¥›ÿ€ÌÇÌ6=ØPu щؖ<ä‡Ð…Åã µ®¡„ôp[„EAuUn%~Ó%r¿%'…þg?ÓÄK\%Y6”VÐ72•gIá’ãDÿà õð– ¼úë ¨Q2´Þ\îÚ È䟺Ó|„ú(ißï•¿0DDØè…úá Iy–XZm)mþ9AœrC sò 4ùr‡³†ü[wÔ埊5 EŠ#Ýh‘>MÁzO­I†<jo]‚JCíïŽGÎö,¸^{+y´íú—1ÙŒ<§NŠ ~ô^fœ¦ Ì"p 0U§=»ƒfyÌA.³;îcEPÇSTi¤v›‡¤™Dw iîmðï%ÿ?áë©¡ôç9I÷ÆÅÕÌ—`ˆ•YÞßó ^Æä´ZoqÈR%ÿBþ>ª)^}k»þz“tr|ŸÂÒGcÅ¥O-tƒº¥]â-›¼ÅiOL|ö¾@4Ͷ V ±µÛ`Õ«’’è7xƒk~V ?ö¬E’Áù’=Ì^H¼+ˆƒÉ¤°ƒ4,ãUš¾„FËì#+uÑ•å&åªÒŸ¶ Wéµ@«¡r²@uùTôÌ)WhÛ°×Ôñ1PëÑ([.8ÙjŸ¾ÀÞäõ{N ó¬Üd³ ô׺Y3[pB`lK^ùþ@à­Ë¶ºƒ! ç1͘Äy¹‘]ôےʰ.™ÔR¦ ï #D2áIyÖÁöa¤u€óϵˆ¸“ÐMü—ûñõÎe `bòä¢ëˆ–f ZRfë¶ÜØT˜hvxªˆD’Œá¯^94;10^úMMm!ÊB{1ü_—EÐ þpk…„AB–d±Å¨%ïüR€ý1¶¬»‹!I„IÄÕ‘Bí¿³ÅCpû« Há60áH]!eCPS%Ô@S Ú‡ˆs’C¤ò#«C]¼_JAÒÄÎ.ÛB¿tå¼Å­VËü¾r‡–`W¨’ ­mÎUç߯÷`Ž úÀ Å$x ýa<‚°ÁëBÃÄã½elkÀ»¦"eÙVŽ eôî~TKã ûË'7&7sœxD´ÕØ1A'ï‘Åä®…?>wè.µ,Áû™ýÐ>ϳd¤„ Œˆ'4ÓêBg.ev-üL/ˆFÇ™™{UneH×€U¾¨Ýèþº¡¿{œC3]ÕË>¡ÏYì ÛOðýÌ¥'×ãä HvËë~Ò¦{‘ž¡ÿ6[!xHx)\ä§BQèkyC/¿&E…ÞÛ ,³A6÷Ù·p“Œ»Ñðƒ´.ç9Ü]É'¥ÁìKÕMIªf\§C }WŠÑŽ}|«•.ü»^Xp'±ÑÒb7Šj=Ñt43ÿ!tTÈîÜŒ^¹bwd‰DàùÁsÄ„MÉ]Ï9"oO5(è§ä§Ç#_œnt£º@ûš'«7¤Êo/Klk[é‚Â(|Ñ›î7Ø28Ò7Ìð@h>½s~w,áøÙ_äÄNôm>°åag¤]ÓO/q\U—>’Œ®*:‘MýŠÙhbÿ—šÈJcSç ûîíÀ†·‚ÒBÀ?f ßlW;ò‘vž¯ƒm H›S̰qÏ´„o_Ë×–\Ñ·K:ëJî ïs˜ÕŸ˜ájÔ­Ž™, ½|÷N‚k·4 WÇNH—Qù ²¡BÙpÒÁ»A<ÇTÀ‡ˆ,J“Òá×ÌÍNÌr–ù@§YKÛ5üȾû¯‘{À«y4U;¸}ÐKêØÑ¿žR=b’OY òz¹ï@"÷rd0Œ²R½Ç{[ Ù¦Üp£‡÷`†Sœ»Æ8žÕk@r¿j÷,RL‰,ùI4˽U²¨Š ýxáI‰¹fjèßÔŽÌ‹s¤Ç<„ÎÕ"âoBô© ̛’ýá!z/o”fÛG`ÉAØø†@uý ÜÍ5Ûýª«×«käd®¶&{º°K"QÚzƒ4U[ø¤?½Ÿ´§ì0´—àó/OF%:¨9¤ÇÑê¤r˯Mꎶ(\Ö_.ç4ƒûÅLÞ3ì$ÇdâÃ07“µòûØ‹(cÿ`ZÈ…%ÎR„ÿøÝ9üa:á¦D¹îDòëc­Òߺö~œ—,¨ŠàõMGpÛ'p|usש5¼›ŠéT ÝÀ<…H¿ër¬Þ÷ßïµëöðïëÆ4„°=Å®¡<“ÃK—íŽM žæ)Pe ¦æí)®n'Ó{¤cØtÀ~t«Ù’LS‹O²÷Í;‹û7ññ-¬L¥Û Ùõç-ú‡q"Dz;äõ^¤„J®§DÖá±L÷óì÷ÝtˆšQhJêî„ÿÍñ’-¹ý—Aòºb¶·­6 (—«8|aßÀŸÄxä0 úc©zÏ®~k>vÈ(„r±’SÌ0’V;„Æi²„…Ѫow͆)&;Ï[ák òDÕ?ÚžE‹Rx÷ æ²q,˜êôT2ëFƒþ*„94™˜„ÈŠiþ( Q‘"9ãÿ1lè°|œ$âœ9;¡°"Ÿ$ß&‚µ`«Í,¯#pPŠ›' «¾«Fev¥½¥åða» ¶-ž{ë³æ #é¿Ôò>öMprR —Ι48úÇd߇‘ÊÌ%G¶mò±4ýGâ‚U a»ScD2ß–Q-s¥d+ÔÓm ¥òZ÷Eqû7Èë;c…Ó90æ9^_RÚÜVYµ è1ƒí„4¦PÛH}PÞž`ù4ðÜ¢‹ûv?á¾e¶§*»ˆñ‚Ÿt“ðøW¦_àsÚ:8Èvm¨ÛeGªyµt…¨c~+B„·[ˆXßán€¥í&é¾ê1¢® Ç\ñ}¨¬n¿S+¸C#ßÞKæ‹,øK?|îh…ìE¯ …4KHܦwýäe.e 纹Àüc(Û#;½ÍÏ~võœÿÏ 3B)>¾E§V„®íÇ#â,È • ¹Ãû(·…áVÊiwé&‹òêቹ`Á’»w—Aø.mà ®ÁtÊê`°“ÌNÈãAøÙŸ€~­û5jYu’³«ã™‹^ó&ša[Óîrñ ¸ Ø XµC•Œ‡¡eŠZm¨Bº™Õiù-íz=,ûM³Ä¿öÂÈ_¨õi´nÃÇú6³etÛÄä_—ýì!Úæ×œ-¥ãÉ E”~ò[¦6AMðª*sŠø_×nio{äÇÃ/Ø\osã ½þ\ÚF×å¾”"Á²7”vÅUc™f½dÙÏ sdaÙìT£ÕD?¿Ú`Äþ訙§¿•\²q.qíÕB¯OÇá6'ÍûjYª<RøóJÐñˆOœ€’íÞ˜ E­ÊÓ@Ë3½¦¼7ð¹Q(WЗ–Ÿ^ÜžàXª3r•/öžådn¾ ßóœº2C4öý~”ØŸDϘÓ¼ºc²PÔº8ñ™{ÁF› ø9±aá|¶p®~u?€mz‹Éƒ 箨€ÏLîNÛ¸¨o>OäPªLº¼‡Nï) IC¨ýVg×nPê]¥4²À}bˆ®NG׿ÐËX©À~V~]ºÒJ4$zv‘(!½Ë~Ãü¨¢åœÞD0ra¦¶z~Çî_”Ûíj:Ç>ƒYZ wÇ´²Íê±ÛM¤XõAуὤcñÕQv9'ý»0ÿ{ ƒþøÈúô$Ù‹£› »º&Êê’ôHÚ¹ËTÞýÛó¯æ6›ÐwLß›…ZõÁí6ÆËë¿ìU fgïaûý-¦ÈRÿœäãæœ- ä¬3ÇÔÎÓ8ßm‚ö…š%ŒèÁñ7h ÷G– ¨Š]9 ÚóÜjP`Ão^y}\N{ø¦žËýz¯Ö®+ª& (»¯³k¸ÌLõ…åÉ×tqÉß-9AlJh”2)}m`¹{ð)Í«KÀ XKº'2oùÁ¢O·Qëg¶˜g¼Zã¥÷ùþ ߃WS~ÑÈ«¼l7$Á¼ªÄ[ݦæ]ÜÉ“ï' »B*]ëÜ3ëÎñ-yÚl—í|‰íÛõÊ~aÙÞ´YIfNX—¤¥*r úó~4oUÕRÂR±K? U9¾]Ÿwo×ü~·ìyùƒ›‚­ ¥r¦ÒÄŒêrý4,ô©9Q÷h"´Òrr1ð+’ǪžüÊ*T9Ð`•þ¯rËb<ôÅCrÔ#®‰jõ:Á¹q7Ò½$û…m¬¯œØ£ÔEWÛ¸ë?ÕC)?õm)€F4ü«²êH`ÙúîA«76Áà!’/ù;p~€ØœõÊ©ÎÄz$µõW[((ûì†À,‚­Ç'ÈÕ[!š-‡K‹‡¢Gäf±Ò»¹áB¬±«Ç”ãâd#Ê'šöêb²¡/Œ&°÷%ú´—A%­‰©mÌe:¯'vCÌ*òœµÉ—F8§m5[æÐNåKìBòP:ÿ‚ab‚„g?8…~ áó+öýíÏkXù±ÔíVÒ߯}þ*¯ª¦oä†ò‡ñhñ¯­QzrF ±½dç8+¤Æ2ù Lú±Õ\{¶#n]9–ÙÊ+³é‚hÈ Èî°þnº ÿi;D±Ž~ƶºÙZÎYˆ3Ä/.u2S5Ûž1Å™OñzþÒ©ØRö=Ë¿ï’-y7€ âT—„Ç#ö’†`û#lc´¬dÿ9‘¿~rã{߯ùˆ¤ûÞ#S}¶Ü­·æœhkˆÝç2{qªùDA·=“#ääøñajSÂ9˜¾çÛr½È™²™D·¼!Ÿù} )3»‹ž@^’ãÍBÞ‘±ô‡X]”ÀMµõÕõ©öbp°éDÄ DIuº›ÔW¤£Ä ÿËUŸ#tƒ ‰[0ëj ÇFT’_¸€þ{ñ¯Ëo쯫ÁCSLb{(¹ô¨µºkxÁéê wÍ£À· ¾î_¿/8™{Fok„€É—Ѐaz‚´GÏÏWf@ »³÷uްýÖÆs4µ¡PùÊýwÙ¾ðáØ;<Cä8ë\U¤&á<Xâj´¾¹ß-îkõåè})YzþiuöÊ jžf­r†Ì÷)ã*s ®-ïˆDªQÌwºmžòð×™¾ë‡õ*²¥ÛÚ3¹ÚròäR²wöI`jænî(8“b:³Í9ŠÛ­ ©}öñšOú¦’þ Ryn©»`‘™ÿ¦ÿ(®õøAúÊW4Z7ýèÅw„mÝ5GAÊøP}²ôMþ˜˜þ aåƒ|`ѬQÈHO¨'Ð*· XÜö¬yv55E1Ð…ý_éJp&Qø¢mô€âk„üáJd`Ö´X¾k?K^KlI8Z$þöÑ\ÌÒ“„y¾P"ïô¿b{I¬‘øÄÓ·1[qŒ‰Ñ7vžìÀIØŒ$T4ñМ{Ǩ¯Þbõ ´—t¢-×&Χض½¬ê£Æ:x"ÛTrRŒ ^ó}ÝKÚ”¢p‹e^O×µXÐ1Êæ4D±ŠôÊãWƒ,ùA°aoÎlbbÏÌ„ÄÏ~¨ë‰»Å³sþÃPÌœìtªÂt`Ìé¬çîÑGñ¾ú¼åßz¸xã¿BÜT›ÿPˆ;m¦©otíâ æãÆ©áinq.©ÆèÚw–•ÊÜ)oÓÆF¨î8M·=ØÑ0{fUsøCÙÖ‘é®iYûÝ'béYÞP_òJ¤ˆœý¬Éû<{ 2Àf;|üæcÖ0îiÀ®gÊÄÞz¤Ð5QF;qÓ¯9vÛ/"hô¥  ÓÄÐÐÐÔÒ’ô+]Âê"‚î§§¥M¢ö¶õôôè»:;WÆË̆''ùóóó¡ß#éåJJJú222ÄÍLMûC 3Lýwg=ç«»||@±#˜[Ÿ PŽFŸYÀ`CaË–¢ÀÊ+¡/3r'é¯\é9>n¸±${1%Š(œÚ—ï9?63CppvÞêÆ V;¢™¼6GÚk³é"¿o;¢˜"¤›ÔTU9‡6£D¬.9uY"å|bËüc…m%ÐoÓþ¹¹ùýÂæÝe%%Á´˜ípaÌÚÖy¢ÝQ‹]¤ 誠þl}¹….¢ûuÏ\³?Í~Nsqñ=ÂÑÎË„ð‘ÖÖVðù‡æËçК«ÿÛ4 oÆ>´Éþ®J¤‚·ûG5³Éú<‰ç‘*^JßFäÑŒ“ªjjÛ6*.ο;7ùjå»ú“ªRÊ÷Ó4YòÆϟÛ;âß½ŸFPz[M`í—2·^WXqߎ·U.]]8™€.šÍ1åð•~oû¹]ù³1‹å"ÁšæÜ²G2(oþ¾Ø"Ðæ É÷|6AjT¥SfAœzr¯ÙCpUS¶¹Q  Ð„97ò—êj½ ß²é…üh8Ö¨énÇëQ䀧!UZ[]µÎ¦x<¾ŸƒæÙBøL½{ß{V)¿ÑñqáoèØ¸c…ò½Ø÷Yi³œ\Úküþp+ˆîguŽÉצ¼<%Ó½ˆÃüúO6Áú´ûä6¨§…·ÒÁŠAQ×ì„D8¨â]ðzF›¯ÜÒw GÚ)¬ÏM é¬5RD ¯Ug)ã&E¬€?oý΃Aaí—AÎc££ënU¹¹Öã{\æfüm­ÐÎà6ù Â÷÷ò“a [»»ã“rÂ;!ã½£À“¡<µü––“ÛKMÞ>>£Ô×yÆïýÌ nCWe¶=BÆz.лºº¾Lx E&PÑs$ƒºyÔ¾œªl<ôç»ÃEÁRšÌ™™Ä_ldßW¯ŠiÊs1m¬GòoÚ*…îÝ»çG×F¢\ÎqÀŽÌ·çu›Ñœ*{¦‡ÃS½Qƒ „ù–À‚‚ñ=§´‡bËÔg4%¡ªªj)²zþb?Ù°”ò³aê|­ûæ—êgK0vÙ{;ö÷¯_¿¦åXŒ›ý\¹½_ŒH@ÓЈRRŸ»Ü7ÐhwÅV2»3ÑaýàÛÅ‹1m«‰‰‰,Uö)q×.æ'?Wøs"N`±XÒÖ–³zÄBxGª&qÃJÏ6ç&µzpàM>5Þ¡}¾…ãBmÀ@™ÉÓ€^†!ŸOußÒ PÙ‰€\$§+((„N¼)\óÊãüÚ}#Æ™[M2|û¥«kðÕ¾Z7‡A_ŒtzÅÔ½¿Ä9’Q'‰D+_ß*œähdC”ˆWV?.ï[”ÕR†ƒFŠ‘ÅD%4}@Å„cßÖ¥÷à¾YL?Ë„õI³~Û)Ž®.GÞÙÙù(Àviò€erµ /e©@ Ùû¤ZR-±`…$§ahS•ŠíxsZ#oË¡šêÇÛÆ;w»ô{u°Dýy8f¡ˆÝ\þ[“sçBÇÅa¿BäCcÆAiî(œ[ØN¥õÑÖv&¦5DŠå=3N!ƒêú€1øt§O®͘ð¹ì$AdÏõ¨ªY_~_;…}y ;~ܽ'?b׿!¹a—[‡O÷’ó«tÛ(?¹‚ƒ±wx‰Î; ¬]#;ÈwòîsX¶ÝnžÀÿž)¨^ê4jÀm/‚OÞâJ­°³´9ã±£VµGµ R™ÑŒ— ÷Ãd°+â@máDÃùvi&æÀ™¿OfSídY¬‘<¿ôiâ~™.âî®Ë€“á"†X5Kà±—ßÏ:ú&Ñ8uåÅZÊ8\I –¹[á_}·eF¶/}+Ú7áðåx¾éyVv¼USÐÕ¨ sóƒ‘eGaGÐìÓÔÖÝ|qXÞnª‹{ iÊZ÷ÔæüàȨe¶Kh§ô ì2ÈPd;ÕÖ’\{›!ø¦omoAÁÔÁ­©z2Ó£¬!b"YÍ^A Lý ß„‘>ø-eµÞŒ?– ÷3…¾jÅg¥Ÿ;Ò/Ä<ª×¶Dî÷V )0a«AÞÙ ½!åu¿! j0y±q±PñOCЉw°ç"ßX¤Ž¬#m Þ®X§·WÂ~á>à?$Ì‘«Åa%¶$d#»&ô£¯Ðáž8Õ'_gp,ÖìÀR·B”EYwz,Ù jgK`ùRÂ!Î{·]ù\{¡SÝäY<“»úO‰r+œ‘©ñ¯¦äâ³ ½ÿ2Bùÿ!#4þË)üŵwºTžW©<nx2üySÙòš¦¾à69æ2êµR¦6aë™Ë ÞGÞ§ÿëàòdCµ¡µQ2}µþXD“6ÖÝb›­Ë;£  ¹ÍB¼mõ½ÞW%oÙ%J i‹ôAWÙ¦€«­ýÊÀZȘ‚ô~תn+ØPf ¶” &tN!š,Gˆ}Þmh+ò*0t4±MÛÏíN gêˆø~, ADÀñجbù˜?!Ke Æ>áüïNá±ÿÿXD+mx>}ï%p}éßâ £ò:Í¥øˆ7«¤î¾ £ Á_½àY´2wå^ÆØÓ‹€^Á}“ºÔRbóøcÊ\øª@ðí¢‹êŠ¹¡ðiÚùiå±±Ú–+G—ü+-™ úÈñ`Ͳ ˜™ÐCì|‰‚Ò0øg}GÚpÏêx£-¿ZhU3@\Ï«%ϲ… ¢ºïä3ò:—a†2?$Œ"Ÿ åöO½º‚“V׺=ðÑ4Ž˜f²P¦ä\Ë.´!íµùð:ØzÐv3g¾J¸ˆhìnZõXúø¼Y3oÚ•X-ͼÿ18‘~¬]i…”©kã ŒÚ=!œ/Øè÷j£>>7ê­ ŸWûj€ÒµçºC6ms/B]_Jžµå¤d/·=rz)\yG7ú5|K3#Ž=œšås_%vñ6Ö%•m.@Uv;ãÚ¬å‘+¾¹ƒcžlFÚ·mñµÞ…Y> áô9dëN6_ì}pu'¹‰.o£œÑš•ªù9÷R “P² ŠÆÙxì/{[j›´² ½h«OÆô¡ÓNIÆbåbØÏzÏK=î ›i Þ ñwAç¾?lœéù|ö õ— ܰg”Ýúx¿Öëžø††®9“˜úùŽoçÇÆ.M˧ ›Þ?Âe$Ã༮j”ØÈ]6 –ë«¥Ÿ$Lß,Xu)ˆÅèa!1KÛv;*à<…Ò÷vEtKjÍ røäÚ^Ö>¸yˆƒºÁFxT®ÂQÜ÷]ÝÒùÍE·rúbÁ5CNnókç.¿qplHœÙB8wxU¶Ü£O‰Ñ[|x›²9ΕÔ×hTò¾—ëãÿè÷оÏ©yƹð ½\Çfíë ­dÿ}w¡Ž—å~Åä”oð"7ºý+ÆÍS*·‰+Ô‡Ý7’…Ëy€©å…!D&øçÓ²»\y½Ïñþü¼Qÿ;Æ0›‰jjʺdyç‚þg'Þ0u÷5ŸGéožŸßˆ)jßV'\"kAEÚ3« ¢Å¢Š1³–d¡‘¾•†&Ÿ$=™,dïIën`†(þMÿ#§<~Öý;ƹ+7ë¶Ž7rií5ŠÂØ~ñ×§Z¥ZY:¤b6x´„øÜ%]eë°~Û¯K2¨Xׄ‰W*°Ž°z‘I _²¿T¤è_gÔ¦<`}ë8C)ö¬‘¶ÒJ浯tc‘ÏBÌ›ÑþkwgyB§‡Ž…tîŠKFCÈ ÝPçgtçä×M—]z¡<Ól*N¥d{fØì÷ë%X=41Ws,/¾ä‰ÐµgJË3ÌLîîäý@õ¼ä+sß3„ 8FJZË{»’ p¶îEò …IÏ_;=YÍ“ÎåþˆÄù’)Ip¯e%…ù l¯‹Êq û_ú\ ×ê#¿åʨSYC†I+Ó¢ûðû&Åó3ÒªÚn…œŠioE 9Ñp²xhcË<8ï;ðÞÙd"ÓüiïDë)cåž«vCÝ—¯Å“|×m Øk@YøÀ,à·˜kwÜ!䃜Š–Ið4=è7à> †¬!°ÔE ϪM¥«jÒnUžûU.*ð¸_óümëa0Gò“ ùˆhuGžÇÛ7S9g×$Þy¸ãNÈXõy x!|„ï-#8ìIáµw#½$!×äþü Âɤ¦Á¡yø×ãÂëGÔ 2¹ÃVêg^|ú04[$Û”’¥jå·¼ï²ÉÃ\äùOïe/{Pvâ ëë*9;ÄÐÇyŸ „cˆü‚ƒZÉêŒJ ï¶ºKå8ÐÏ`Ýœì™üÕ¼c”—†äœžNLD{§ÃÑ$ÊîZÜ ü35íþѾÙ_"qÁ¿й-oÕH̪21\ä3Ò1›ìY/ÃÖýXiY³ËS5!…ÀñNýß#=¢8âþtV·FÅ)@gŸëäËÌK» J°Õ£«`¢Øü&½Š×˜]hâ°{/ËVòÙ!ƒçý~$ÿ©Yq³ ?²ßø†ï z‰ ´»Ì\èÑŽ§¾|ñ[ƒëç+*DM5÷‰jUÚ!Wúá¡êђÑªš´ÉIlÚIpÙ´x†×õ£îïš0Ÿ›…:¹Ýe Nziœw•Š¥µé$ÄѦ+–5ýdKñëÛ…yÒj+ÿË£G/Ö1Ç1‘ËAVñ÷ОW;™9«ÆüЍ;½¦5u4Æ9n\^ÊK¿yw…*f/ø?±7ØÄ8õù½íY6b&œõu›s…8¬ø¡ÉNl=„»´£bÑWbeT¿¯¼¹#3oEfF:z¿ÿeîmHqFǺü‘â9º—^¿žiµ´i§F'Þfé£å«þœþÎñ ›üÔ1ÉÖlÅ;HK»JÀBôаg°aPâìÚ©£†·S m?±TCDS÷Ëd}¹†6O¨U{ÑEßš‰÷{ó( äøãEp«Z~u/ º:¬|‘y¾ÑÙùýEˆ1¹êW¤é9ßùä'¬¨Ü¼ÅN$àÑä‚×IáµÇÉ_Q¡¼C‘!ZÈ„ÂL]C¦å°ÚöõƒÉõþ½¬¼mÇàj1]ˆCë_Ã>†’’ñüOɹ,Cy€d½/´^ß—÷–ª\Ç%•Ï©xÚ×û´‰àÙ¨¯öž+žµr8'©ª"{G i”´ÀÈ”|uÊZôñíæ‡sm$øŠÕ #Öà”Ÿµ1´ãŽÐþ#(Æ På*´?‰ çžX=XÁ¬RÛBÚšÙø8t÷H2!5N1¥ë:)¢ÄS§öÉJãÄN%)3àÙëšÎoV©‚z ]Â4á—ºM¨-tÌuFi”žj³¯i ||ýgÖh|H‘˜8à½<Ä ¸gaY¾hq“ví¤SÏíu#Ëúm¹G=‹»m&X´÷{XÑ ®ÏHŽ;œ¯Z/7}g£— #ïI¹ïsvå΂ª¯R#4$ÏwÙ}hÀg« ¾>Jèþ‰³õ¯ø¨Ô¼C"‚ŽØ¦ŽWS gðÛIâðg’ü<Ó¯s§¿wÊëÔfwëü’F?"òãèíO¿¼‹½ ·(kžÝ»†v'ûÔ”F·g•¸V™ÐèÛÅGHfìÇyçWˆÝc*½’<²æƒ½{õs÷ÌZúñËYíÆ'wí;×ÈÄX”j¥«Ç¦¦Ì¦ †U»Rô× ¾™»ñj]¾”R¿'_³GøOwHŒSsL4û²¶¼%_̽LÒÛ»º%gLªëô­óã4y4é̱z‚“žOUЬ[*fRr™M‰‰~³ØŽâ³eì'!ƒÈx+»Ð\"ëÞ6êr®7ÏtŽså>U¬{áð”vnÖ½«Ù‘ŸH´;ÇÓ}ü¾@¹L4,=9µX¿?À`Kþ°K\T“,X‘óèIÇ+ê;SÑ|“}S uµjšNFhQ ûá­)×f}ÄØS3ÇáW'Ÿ8ÀÄ®‘º€ªoO”êcÛ®°zÛ Gž,¨¶˜ì2*©{ß^±et0{’¼2.*“,Ç šÀg‘ó·Û¤ÎîºmGP§ŽwR‚ßžv +„LIq¯Ñ*ë[Æ„]êxoôÜ1ÉPýXa•ø¹ÞA÷nJퟚ· Þc¬çº~²ÄœúÃA)›ì.µ™HÞŸÁ3çòµ;èJ•y·tcD™‰ƒ&ÊTñë‡mb}OBAö°Åç4‡¥tFèGůҖ¯µ ÇÞPÍ ÛKz…™Íœð›dÐ.%§Å=ZãJHO‘ŒŸ!›R)ÁÚqÎÖã1¯†‰˜õHŒâMpAk4 æ5°"'€ÏÿF7­’ýŒZcrÙ…V÷ú§ÈéŠ*Ïœ§|êJjÊpÓóK,(ü)€­æTñ –`½­ß”¼`An†ÄâSÅèeé5N€`‘· Ñ´Š{‹§¶’ |ÓÙôj“ز¹Ææë²ô?ø>²Þ"K­È;¸ƒKÁ7tàæ|t„¤~ŠÛîå×ð@Ðcßð^)ÛûDíH?ø>Ytx†ÃÆiò•¿¸ïîú¿dOô'Jk¥ã¯‘Ä®w^ròs¡÷¼$7ö÷äô¾¢ëÖ&Ö·|ã‚Whðâ}3*{‘¡ö†Æ·Hö^PÇÎ*Ú¼ˆ:?my•EVÃ9á‰"wN$Ð('NšŸª¢¹`‘öaÖ¿’§Áùà|Úntö·Ô4ÎôG×Uý[<° *3¯í$ÃsT'=)¨?‘‚'>üK+1¸ïm«Â¼[ØåÈ9Õoάj¿½wÅÝR3Ù50Ô7/”[ÓÇbÎûËJ†Ñµý y#$.¦6ɱz,Wæ¯+x•~êØãçZýåèlM ˜ìW#ÊSK^”ÒÚJ8\¿·æM¦(³#— ÿäüDâÇÌØ${ûërà›½ùäöÂ÷'ŸŽ 1 Ž"K˜ê©–œP­iø%Œ«€žjÉòüèµ¢˜?_Y0ØN#·é˜Í;FŽX/­ÖtPÅjNYÚu—`.QRzô‚°çzâÄŸôƒ[¼Éá.õ©äÚIBf{‘° ÿ-çÄ‹fæÉ¼s¯Ž:RvêžiµšÖIÁñ‡\áÓiŠ~«à9(yd'ö3î¿$n€Ê@+U–K[‰n-ÕøñoŒÒ8M:.Šmüµ<²Ÿä‰Y:uQM"ë= ήG@,#@¦¦GtK¤œ£)zŽº*0ù]Rµ‘MQl%CØ9c1Þ©yE‡ÙØÔ½•ˎ壟oD˜.ªÏ;eÂÖ ëË ®4O[RÓ'½ŸS)·¦oø ÿ¶ÓÎýij3%Éó”y²<&‘0ÒGCuþøj/-˜e}7øäo‹ºiÖã.´³/àWMÛ]b”Ágz'$ûùïŽû”º¼·u‡€’ f7fþ(ÝÏk’Þ5Ë tÑqå/&w‰Ÿß‘”šþuýLÔ羉ö}V÷»Tü~ñ[2™e‰/èíÞžxˆ"‰5áÖë²ÚÁKW…Óz3Ê‚Ž‚žF*'¹>^ü°¤Ë:ýè‰*eä•¡ÇÐÅùÑÚ¡?‹ÒάӼÝkÄ’Ä÷!àò¶| uÏ·sy¯þ­^Íž¨#´Ë#Žva7£ëS‘­”ÆJao¹LÝ·ÿ8]@£ç;ĶgRwK5øÐó€€5M£}XÝ´ëBøfAÞ6E¿¤e÷¯ñ»Éèhê%öÓˆª™|-4ÍÓrbÜ¥FáR¢ÔXÁÈãÀ yNÝïÏK>VÃÕãn­hð}²L¿"“–‚ÃÚí¬Zÿÿ9Cþ‚P˜'h:_ŬÓâLNúÆ>ÆÏ4emÝ]…­ÿ<ïW8ÀÕãïï­åAÖ¶Îö>\6öNn@nt3‚›ËÉÈmôð™è3%{G§'A^özAZú¶Aζ2vÜ jùÙÓ\í}¬¹\]ܼe€Ü·+{úþÏmn®¿‹ø8¹ÿñ€aãg:\Jî^ö\„Å„lE%p=——‘’¼Ï¥gíÃ¥níÆ%.Å%.*zz—•:=¸þ™¸¨OÏò^v/eŸ+«þ“yú Èíèãã!+"âïï/ì/!ìîå "&###"*."..tZBÈ;ÐÍÇ:@ÈÍ›çü«e{o[/'¿’üç³µ»¯››šë¿¥ÎÚãß 7ï ðT”"§"b¢"ÿnùOã§7eÿ~ü²»—¾»»‹Âÿz¾2—’ž„¼Èÿ.ôªo¯|úR8•‡ŒÐé!.®/&*+!&+&aúßêÿ£ÐÿªþÌÝÎéeàÿ©º¸ìƒÿ¬þß ýK."ÿK0ÿofgûoyyøz¹ü=-v¶"ö.ö®ön>Þ§2ûŸ2³³•}éîåjí£àäjí`/âáæ /ò_7ÿoû÷»§jqª–"ÿÖK…ÿÑ­ÿ¯Òä r9ƒœAÎ g3Èä r9ƒœAÎ g3Èä r9ƒœAÎ g3Èä r9ƒœAÎ g3Èä r9ƒœAÎ g3Èä r9ƒœAÎ ÿaõýÓÃÞÍÈíÏ Rà ËÒ.ÀŸ*?Ò7Žhwwa²g£úžj£ýü]2}7$ûXlV¥°ØòR‹pi(Sõ10=^a¹¾Ìú~/åCÑžv\ZZ´ãÑõñsÑ ;þ´;·¾Ó0ypÝ’­Ø‘Å»[;Ãý‰¸Ï‘Ke𩤓áf>0ž $N“Îs½WÏg¹F\;Àe7š—êð¯Üy*{ãÒùù…60!•ÜPqû„YG8µùá³àžº¹wÖ>·Þݺ±ó=kÅýØo¿þ.>ž®¦¶¶•.r¡E$ÌERî3¯  hì@çî5HÑÄ–ýÈßï¢6ùÏ7*m*'eÔî_¿ßWãNTžr7É"£À‚IE×›*®ÒÖŽU l[] £Pä¿;—*lt7]S%Ÿü„wQzpPȬ.d˜Zñ< sò6À4o¨ÂÞ$T…¶­O†p °d¾(r}à¸u+¨¤°Ð¡_4n3EШ¢¦3ßNe¢Vb§{òs à1¸°G R(>Ðè&w}YLÎ[·ðÒ×c[¿±|ßß÷rpknˆQQ7ù†²®Ëó¿z‹ J´äêæÖ =Ñ7ÃdèÇy/DËŠ‹u |,31Ü,¶…És¼€Šó9›wݳΫ…;vww¿ªçïGñÇì}dˆ–²¬üü†ä÷/ÞdfÍfíuÙ:Å*sƒìÄo®7í:_àïÔ)3LÔ*ìyöüBEÔšÀ(…ñ®óMÅq 5áâ_Òt1otøGÕC£jMÄŸé=ÉîÈ!H©sNýx0 ø(¬¬| ¯ xø]t©¸ø±îµ’;Šæ î&׋Ç6ó†tféÒJ3[w}”¼”x?O‹1¼…™»/"Â)ö¬ú› gVvö\ÂË+»ÔG©_f³¥ÖÖÖ ãvÄž~,Æ~dJºâgEãà¯joñ>•õ9XнÑ>t¿³Y¬J퉤ï©:©+ßbP£_ô9].¢ÏÆòóïœ1"JkÍ«1¼Ñ|0òå£ñ¡üØ\p­þ½ÖnØ>hÉýø^JP}kkë(õ"”···§tªOµÒq™RßëvÌbcca¦ŸÁFFÏÕÔ"&õUqˆ¤ö9Ë .?×àñëÜz"“¢¾ÃýÙ®öZéÞŠ«LUÊeÀãñ9üÔš#o]g<بb>s±Ð~C´/ï½ ºU]]ÍÂÎþc(OÍ ‚„Ê]%ÂmNÌ”¼6G¿ZÄ|nÉåï}ÁņD…óÇ0¨\U€ÑWÝ÷n•’¶—™ÑO‹ÉÈDnMغ¸Ü(!Qý>ª¼ž¶A²·ôƒOßü|¤æ½%\ª¨øUã£9ßç›}Uƒ~¾¾Äé©)™n–ÌS±Wz’¢º–YXYû²äüÝX¯Z´Ïq7®£Ñ *yC ÚƒY¹8\àt¥m×¹°cˆ  ¸Qz¸9ætš922â³5.t‹ƒÃò¼h7€ûÛ»+¬ø   Ð=\ȃ‡U6|2TUU½’e—¢bM”šH ƒœ¼¼>ЧÓîÌ·6Û™)®.íh»»£¯XL8ÙØ¼©šº¿3U]x~ñןç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-Û cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF=IDATxÚì—[ŒUWÇkï}.3g†a`†ŠŽ±ÖÐÄ"MÁi´µµ`€¢hÑcƒ &Ú˜ø@¤˜6*‰U%½aôÅð–¦I/¥¡hÒÖ Ö…r™Á9Ì̹í½îˇs8ÌPFR|à¥+YÙY{­ïÛÿïÿÝÖ!®çˆ¸Îã}ï¸î’£o<@ž8騒/Ìü& /;'BðBeå­Bˆ}3zoFˆxï),D„RügøP@£Q'Š"ºgôã]úU™Ž,™–®(w©{á¾$)‚¿&‹…ˆˆDÜ6:‰â¬ÉæeYúŒ3ÙÒÜ4¢(r¬þpgãk']DÞ›”=˜ËÏ8“ôõ/Y£¼æî‰ãüUdÁ_¸òÞ¬S×— ï, ­XÛÓûÁ_Šçÿè·çÌžùãî®"ï©,‹ÖÙ–L`RH´ö¦ê íCB©b´œ=‘”GOvw(u&ø«¦ÐÞ˜¼¾ô.øÐrdiƒ±òˆL¼g¤TSÄûÿ@L21„ËïA´-nk M¹¦°!dRá½;™XkG¥”SºtHLµºÍÞ«=ÊAt!•¦Ô(Þ_ d©ÄXs6±ÖT”R™1¦ãÊ1pÅ! ¢@¦ˆºøDßÏO{:þ9ôKŠypηÝÔÌÖ©®€TÒZkGïlMJY×Út¼Ëgá2á‘ð¤:!ÐÅò9¿ T(S*VY©ö°÷µeܲdEpÖObô2·RêÌSNŒ1õ&5çâGÚþ-(íèõ4TžJ,ëÿ-çÌ}ŒapöaçW¹;}•Ý/.dÕÊÐQXç¦ÄÌ%6AJY1ÖT¥­¥œJ!"À·ío 6D‘§žæ€„»凜¯stx!åá*%÷ý ·|¾P?ÆOŸaÝš¥tvÄí.é»X|@IUÑÚÔï,JÉ )I,Á7YhNÅžZšàl‘µ¢§[1玽È?Î.âOC‹è|‹‡6Åܾ¼Ä׳ v<ù|ñfÍ,`Œ›’Öz”VUïLšh­q^Ô””¸$"\L™–õ‘ðÔª1FØxÛßè-IF†ó<ÿz‰}o–~Ä—É™„Gž¾À®ïÍgõÊÙä¢2Ûžâþõ+˜Õ“ÇXß GJ5‚5‘u–Lf•ÊÄêõ iZGÊ©$ZKÆ«žÊDÄú¥é›!iÔ <þÇ2Ó÷>û#gþŇÎrë âƹЪOÞÞÏÎ-}ìýÝ~ÊcuŒÖ(¥PJÑL{3áœ'ÑÚà=•z£ŽµqË[!ù\Ìо3ìØ\dn¯€4¡ Ù$‰:SFËŠ|®@HŠì?äxöÑHÛŒµqÇòesøÚÉÞ'øôªA”²J9”Ò!QðkmUi6­ Zk”’h£8?:ʯö‘Ø@d-¤žþºAOï,6ß3ÀÑÓ §ÞN!°4Ÿ™gèÀIJ)´Ö-Ý çLMàˆ¤ÒcjFiŒž< iCò©7±ç¯šì:…œ¨9þ~²“훊lÛ}³fò烄oÖüœà;;ßäµS·ÞÜGÚÈÚº›@LUJC‚Ç9[SíK³™6,a÷Ë5~ôÔqÈ °ž`3»sÜØ•Ò]”lßXà7û Œhw湃šõ÷.ÂRzkmÝ9K¢”Á¹PÓùˆ\2©Ûµ†1Ç‚kñÄþMÂÛ<´y‘wÌŸ3ƒPu¬þP•÷õqn¬Æ¶§ðÊIÁ†{1VãÝÔFdŒÅ:[A"ð€oÈLGŽé:r >×Müì¹iùî—æ³ó¾* dbغz”-ç/§`íg •zW‡mvB‹³¾N$/¿ršÎŽÜøG÷£L`ú+A Ž«W ò“—N“f§øþWú›"ÁÖÇNñ±„;ï¸Ñ þŠí]A&ÿ¸»CpwwMp÷ÜÝ\w6yeëݾÚÝo÷TßÛ¿¾]uúô¹]ÕÝõD*+J¡ â!BAA¡ÈH‹«þ­Iþ=Ÿàþ¾]¼½oþV\DeÔ?ý5ßOfÛŽÒ:.PPH_þ=Ð3ëþ/?â¸Jh»ª9X¸z;›C‰˜9˜˜“HZ9›{88Û¸(5+BAÁÐ::kjyæœ-L'Í0cÀmÕa2D‡jÿ–ÓEDÄÔÉ£]|æõÂ%î幨ÁÇqAìü3Á½«àr`ýž“£üðø<Ä¡! ¿¨¾Îä×QL¾œð²ìjÞÀaú±Œë¢dŠà!“›HdБ[H@('!ÍiÀ—ZHtãµ|ø­k˶¡øInðJoõ+ªM &Yë%Ôÿ°.œ±}[γ!´ 46Ì8yÚÒÔ±´©€ì\Fá£ïX,þ æZvмñ˜B]1“y;Íyƒ‘Ä—kµ‹ïú"9˜Êvç£ 10eå±²=ÖF'¬¢oÊX £0YŸ]ì/ DŸ¨«‰|§~@7=|Iy&&ϲ´çc$-z½É €šøh÷Æ=É6G•ûÌ×½Þ.yŒ¸†x/B†º ¶»Ò5î_ëÖ' '¥Ÿ‹ÝoWÏûÜóá{1ÙÇ¿eÞõGH[g¥7°²ƒ²½–BÆ’ü%54è£BéK´†>…#øæ:dI$•ää3ýˆCJØÝ+Œs'òÓé‘óm؃^ P™Ò â¢õÈ/Y{wo߃V7-9—ˆoìK-+tÀÖSŒ¯¿Õm% F\ût¾n_V3—†¿9̺|´1„4Œ]Ÿ;t¦_íý^-ˆÏ„GGæwÃ;qz<Þ/¿1ò.ÄÁÿÏäC¾ßÁ}Oœ²^þmJÛÙˆJ>mŒ¼ý[‰Pÿ›F[ÂVÅ=hg£®öw!úéy¬&1Nl@$èWe¨tlö%lryØ”@ƒ¹àbš¨¤/²;T´zÑØŸ¾pR7ìUëí =J<óë$S¶PýѶ}òsx(®¯nn\Ž6¯ûwæå|Õ±Fî¨R­ƒmËË‘¹D±ö –S­•-B‚vgZŸ8ä ÙƒõF .ˆohÎNÝCVKÖ“ÑÍï·¡_ñ[õª³W½ñßNmïš9ªkWð««QšÑ.íJrcÑâPI¤†¡xÂ㚄¶cØìäVʵ.Ÿ©Üá~–ˆN|_³"¸‡X¬J¹NÚ¢8ªâNba«ü_?¯`Äw;uwÊQ»e§,®——l…ÜÑ.óì`/ÙÍ\(Æ+Z/è̆H~oEikßõ®U”ò9=îfì‘vÉ¡¶<+ï|²)ÇXÙ®j÷hkþ\îÂl¯%犧fà¸ÉXv…‹(˜Æeç ‘´œ:dpr³¯à`_?¹¼ÇÙ؇2oÐÌ|¬‡*zÉ„Ò8ÃØb¥&‡Í>e"“f“š±ý°åÜ«”ô]BÆ«é âljrrA›;QRn°á¼”“R]†Ÿ b·&mÌçôL+ãðeD.Ó…Û§‚wÇ8 Vsèsì£þ¹X¤ ¿8Xñò óÐë9­ÂïÈíÙäåKúˆ<#9 ɳÑd3µÒxä^a…k¯—»˜J…©9f‡¹8Óݰ·þ¡—v_&¡Cœ*Ì»¬Ânéƒb}J²<ÌŸ`¾šåýökÀvL4f ì\,,Û UPæFwZ!Á€w~ž*ù•©’]›7îÑÖ†#à3Ìâý±eK6RQB•t"¯`:#¸?)| ú¨r¢VòNÑBëæ;…Äœh·BÚ™’~ ç‰[V+.Oö•oTjKDwËm±Ð;aËí1Ò‘㬖L âL|Ÿ?ÍDAõN|ç5æ™Îþd6lG }%³OþgsãS¾‹\?¶xÚ#åŽ5Wüt#ÿeÒxO‰ÛDìE‚•6tÍ»>ô9T;ã0sr¬$¯…팼 «+0³'>ü¼Þ”õ'l¹Ž-,ó'‹:?›2ª¡Çp°/™ž®™-qÖôçÂïý¼rRœ•kr…"2’Môj¡i£SθºŒ'#1P9¡„Ö•Œ TâШòWArvUsšœ(p‘„òÜETѸ²Ù·²èÐ¥Ø>J…‡C÷V›&áI%ÑårL6'÷"[îÈâ½J©JÈ"ºkÞ¼¾Ù‘×Í÷Ѭ¤t³`Ÿ{m¿&ÆÅ9îƒVœ›a^M®Ê &Ín‡¥ÖõÆ©TûÆ$,ÓÚ$öfWa`¦²Ä…?Á,'-y†8òq-/Û:!#K>,3mU²à;ë!¿?åÙTtžS‹wó°0(ëèt6•ä·YëÕ£q_.ü2}«ùI¥¡TŒa„[ǪGûU©,p´›Y ºa³sðMþÍÝ-vRŠ…õ…yó³-è'HWåì:û™ÞË|L u¡ÞDNašº_æq\Å“Ÿ,Â!o&tbk¾ 6ë‹/D ,ÄÐà Ktè4¦—o,åf˜Ú§eþðèû3qý¦²Ab‰bî=-OýB¦?ì®—«(…lÒ1‹Ú.‹q‚®ðå¶)­lüƒ-zÍ'gÊÂþÒ¢ƒ©WÆOJò+•­§@…ò'CþšÓ çG¤¨š]'²8yFäv²ãCë̸Lum¼áx9x¹Š—4vç*+È2£–ÒªÖ*²Ò¬ êÖt¸Nꪢ­}S•E˜Jú.™ïè…,”æž}Š2Nn±ltWvéi0Ô!'+½˜½¸"‡2_÷mo_fö“5—yýJ¿—Oš•=@Ñ\–db –¯ÇßzéÍ|Ìa]äõ%šÛþZ˜0X^–Q»aèΗƒöàðaåS ÿe ìkÔÓsB8 ¨œf¤EQ$ë©{Âöz §løùGŒðçò©0ç#[läP2¶ïzéî âÔ)Ž%¾g–†ùCD˜”‹¸v :ŸslÕ]ý|[rÚ8CÕ8¼)Q:ÇÖ^;Çå>zÍͳDSE-”äZ§Ø_“û{º¥ŽÄiqßÙdû!ë[ð9k«Õ¾QÙÀÍÙ7kz¸8¥q\XœU•þYLjÔÁ™£d®(åÖ0Ýcó´@`¦HÎq&¶½ô¸iF½²¦_vÒÞ'¡¼þxµÖ¡2ÆAºîö³I=ÓØSo`’ñË Ž{¨é:èeÊ6#ª}€ ϳÈoßñlt×§Ì~ŠYZ¡Ù£Ÿ¥Y=ãI£™§Ro fÃè²Dsëù™ôK¬)DR†pC8Þ?2{ƒiK+ËÕ\±øÂ%Œ‰T̸SL©à»¨K½w TBfCb4 ]­¶úfÌ„¤às¶!Z#ËÏ2½ô¶Ð öû ®ÝîîZ}kêÇLÙ“$p µÄònc›>&(_^[ÉFÙDÌO!„p»_h‹DW·¸C‡rT·‹š‡î|§úƒ† ÷ñ2\ª… ÿ¦%'/šâÉלïRöÄG´(ò-{Ñ0¬¦-²°¦Èfz̆ة/)$æ ž] yß> ,î²)x[{ÀùZ‰QÊq³Ço›÷B©s¢±À}eM—'+ág\þ¦Á-@A–"鈶۪ÐWg£Ró[þ%€×˜Ûy%´¿ý€9¾:¶âÉzj†¦$³`Â2ÀÐ>ër …wò›Œ¸ódÒ‡/·0e(ý²ð âè]ЄwœPÓ$Ý«¥V0Bœr¦s´)é•Ñ! K‡Ê6j/h燗3iEsx0Z5ãæî¿Ê0sêªÑ>†µK‚Þ?ÎQT›¿)xxæFú=þ)8@õ³e4f;KI© ÖX8÷JcøL¨Çή6OzÉ#zëBZG^`Ä–Y6_ò’8çÞWã^Û=íKoéeÒÎoA»™Î’pIØ]ÅÛj„ßàò¯-l•&tË5KI\…-VŒ ½ ]~I3È™x—tGˆø™^65Ö…• hÞ“÷õÕ©q¾­ÝNÒc Ž"ñ#X2‘A:r7‚ç2ïƒ[RFßÀ´Y ;.;.ê¸ÁÌŽE¹H¹+/½C>eyFLö´ AåçÍËhrΟ²Ó9Éý9&¬:©$ËH670Ïßh8Žv]QüJÛ¬`“|%ó¢£ëæÍ ©þÝoY>LÐÅ„îØàâ uû2¹¦ëWœ.Y´PÀÇkCÓ<ÿûœL¤ —Fl¤[' ’«Ýew£Î'Ž7e´YjòöXÉÙ# ñkœík¼1hÕm =ïìÂõƒ3îò q*•ÚQdM¸úÌTzdœMð0Ð0Ÿ ˆŽŠ'[f‚‘R«„‰A?ñÝ…ô2é©è)'ù`-Ò¥Ê(QÑ—.>χS§Šàòs·’cWFcyŠ&ºU3(ò†Üg–hýóÒ—8ìdÍP™JUÙʈ¦¬Ã$ýbÒæÎ/Ûž,V™M¿J›®¤OhÓ7ÓŸŽsø÷®TrX¯cLªXtduö÷ÈGyÊ ÃÔªDÚèNÉNÝ®¦Mœ¯2s^T½ÀMX¨çuµuCðW2qü$ù`Œäå@­òHU„†Ä G¸š¦Ýˆ’ÙVÚ…ܲšìU35d„ÖÝØ‘5d}”w©2Á/ÄCi.¨t[q³l2ÎINe&U%ÁÅߘ¬0“Epâ[œ¦c>›ùß^þÚ…}¬“ãPК…8€:›ù‚œ•SxûÁ§éЬÄwg 76·ÑøE…÷åª(ýb£JœWÏš³íb|FõúZfS‹±ž2À:ÒEé´‰­W Ú¶ n&Åçš&S ÒþÙižé‚ëäOJ€¯m6Ÿ¾¥ ‚5‚¹(k#Ô—WÁjM¨÷\ 5¹Ü4Z«²ïÝe©†¶Ak¨ätZ³jîÇ=±©ì”Š5J“Ž©*aB?8~Ðu¢GØÉ§N=<); lø,ìÎßH•.ê5Á¥‹9—M`=v”œØU”kË:,‹_|¢É±¡PÌ)¹8ž¥%ÓÀRS£¿ @§+Ck=Ì1bFváv«UúÙ=´W…wä+GFóO ÛÅÞ@L÷À·‚c9 8ǘ›Ÿ  m$ 9Dd“X>Ú™CC;•{¡›,?¤ ÷õ Þ^‡}’‰Öí/ÆÊsñz-ÎnôÁàT™úåØä5¼&Óž®Åy£f2fKÓ¬‚¯/à'Ç{á´ašFëÚ<‘¯¨—툠Øè%ƒ¡÷¯•Õ Ñ _ ¢éy{Þä:ÌÑjt8¦¢Kˆl³dŽû•;ÜÆþ :í˜c>úBêŸBBb£Þ—ûSSåxÖ’Ü&ïØœl‘˜rd+oóU5ž•sª3Âr Œ€#‹ño™oØ*Ÿùƒ{:ÇÇÏìÙXky(4¸ $ÆqØ*û6ñ½ÿüÌÀÆ{vá?³îZ=ßXãtw‡LÖŠ÷wê g·¨ ö#H½ PÆæ¦;.pé» Ï’›ç÷̈́Ġ6Á1]¿7éU‹¶×XôJ-ÊŸQ?œ÷¡¿„ ÁÝÛ¿T Ç)‡OTõÁ:_.r»/6Ëà7çÝ!hdoBÞÞ§c·Ã™µ‡™Ô»¸üg®*•ÓÓòÄÆR¤ý?¡æß²ÈS—C+¡¬[P+ßhÇ/©çþî ¡— úWC•ÛGë~`ÒÕ‹L’uÎù+ñûÀ<(oŽ_ã5#>å¼)Î$Ôg¥ Úàðl&éášyŠ!ƒŽayü%™Z/nä rE)¤©&«ù&¼…܆ljwÐï6Š/Àì¦Ö7´sõïL8ò©F!WÞ`S« {‚³3µŸÅ¯0ó¦0'<Õ5Þ¥­~𥷣V`þJJÌ’[:»Âþ˜&'c­5ÐQ⥙=Uܳ4¤°®Òwf §½·y{‡£ðâ’A‹J4t´"è˜öX ÚQÌS‹ï 4U±à ºŽ_TöOW¨€ø¬8#˜·<Ô°eIÍNàª`o¢ئ)¥˜rŠs“ŠåâyxÙ¤jC ü<ò´®\A³ÑûV­à£¤r¹¼‰ñYO…7áàÚ[i4Fï_?¥õõMë,ÿødùò·Øî”³ó¤vìñ5 Ð¥KúXnfû"Ë»¤À%WÛ¬Þ¡¥Zº|7 ¬E®Œ1³Ãìx­>á“Z:¿ÁÕͯ•o^ÿF¢ÌÓ<¼Öj—œ¤áy"rtm—¬ÖF‡û²-¬s?hk9ßøm:Çþ‹Üòà°Öᯜ½*åð¦TJçÏÍ/ïÉû'7áóSÿºwuÿ5æ'”Ñ©_¬ÅêZ[Î|¶ù'oý¾ÿó5G©vê+`s#›Dã7¨™¦ûUf9~Bt7 ÙüePiL95Ó…çW>›öœ3èÑyv|AØ6C7ƜܚÑ*ï™ _Mï…ŽÓÃöÓÄÚ¯qõ”ayÙ%^©)iòl¥?qËMõ–+c=sç. 1µ¾EÞJ­}Ýžöe«®g[­íýÄzú_Æ8ì“môçAÀ#ÓÈGº«ZùŠj™;ù½ðÁIúÈ™v³‘nÜÁ«ªØñj©QÖØô¤ Ëì¾Â)Ñïûá åhóMv45-DrÑ»Q ëå{úÉNú9úéoæÓ†šÑ—˽ùI“™µ¢»z.í<‰AgüDU=º2îœhXcð1¢¯-·Q]ËÇÍKLSm¡B!ÇÀÁàáuh2nD;úâO ÓŽCE5/ùt…çÓê«´J/*+ Ì&É™s i…©ˆ¬ô†Î¤~ =/A¶ÊnÙÕºÂîkP›ÛY¶cüM—¸¤þ’ ‘Nwlþe7N-Š·Íxg}F7”áà0×§Ü?m˜ÖêÂYƒð“’ëb¨½»”$ô ŵۼäÜør})^Œo}ó=Ù´ÞA9’ôüã,£ñʉI3Ö±ËFùEçüŽ"lðÆŒ^‚—4¤¨¨ÉÙ- ƒ8ÿzÐ(HôoU Äj¼h"†×Óð%F—/’׿®îøz¶˜98CÃ?¬ìúÆjn”àV¶qé„Ò?‰“{eÍâÉ"¿“8aÔ^AŸ” s¯*Ñ¢g4K§@kÍ£}i¶`áÜ×Ûm`%çWÌ#Ð]ž #kwýÎ`]ˆôìàÄgæ¾ÒîáîmÐ0[5PËhçjU,‡ï÷n{ƒdGlSú ;¸ŒÓÜE•×÷ü=¥„ÆH¯·k¸Í/j ¹Â#jG¼šqŸ¼7”Xkc† Ï~žvà‹Õ·($Š`ûsˆü掂-eRñýÊm*ÄæW¤ÔžÔ‰­€'Þ&=e¾ÚøRr¼°ù·VhʉõÈÛ¸“Þàžo ú!ä(ÍN‚Y\È“Y÷Ü3†©ö‰˜”àI/ù3ç®E8îû•îìÕÙT Ù‡Ü`²iÙn]ñƒ9¿›‚oém;‹ñC»á}äÖh»¡›FÇ+ìÚ­É/ìw±8‰I™“Wå“XŸò[!Õ’ÐuÎ¥y¹SÍáW&FÝHùèð’µù¥s¿šöŒ]‰Ý §“dL C䨳úð5&M%µ®M74-¦¾M7ÄÂ~N­OÌ_ÊI‚;¶!Úã*YSxX„u}ÃÐ&SÌ&Ô©×XŠêVTŽ¿ÒUF:Ò •öàèúÞy.^EÑZ<çŒñk^Ð-‡ÿPÐfôÛ=æ¶E”yåˆÌ«¿Š%ª£Zýû¦Z†ùQíT©r(-Y3_gЇ‘¶áßþàw*Mãé÷ýh´yëç2BXÉnâE;˜SÞ×#»G…°¦Jœ|¶ñO®‰_qH6ÚR¦Àp’äáIÐ"g‚1ÿ’€üR*½õl… üÌD¨èÚóõÇï¬Å©7¢ñ íÖurØîìŸyVa Ýÿé5iU-¼U¿³Þü'ˆW+r]¿"WîŽvË?HA€¤šYú u =U3˜è¹|M‚¼B_ì'ñiXÜÅɈ}c±¢ˆK¿:ßHÐ Mñ¡ZÖMwž§7Z6|³Ú´ö@ð#wG071†Üt’ÇžùCҀ;/>‹Ø“ý³>a²ŒŒí£»;§|œéõ.Ü‘ÑÄ0#–ày´‚ð(Ž¢%*÷f¤²–Y6o‹zob+燨Ýp‡A1ßb3QaÕ¨ýTá#¾uÞ'´h €ìÞpìL)E©|½+Á‹%qê–Q˜±ª2wá¿éâºno–M­›¦ æ›þ’p×oÈmã=°öØ|ÙÙ‹~yI”BLD@e : @ƒ´ÏÔxæV+ör6X6EÕF”CV‡(}8×øI¡Ëhd?Ù]Ig_‚0 ëoí©»ñÀ[9–úÙÀÂs©ªåEÝ fþ;¡»HÉîûÅ~ poNDá)ˆË¾Á¨ã¼£y¥m•ò=£¨ÜêùT,Ÿ/ãª]é‹ oìî[µ ýÝ1¹¼{vŠ+šT+ÕËq¬}¬Sãl/aZëd’šü`÷ìÓ8C'ö ÷j*ÇÈÁÞ¨y›@‹øâºiñ¥¦¼/ qQÀÒQ}ì]jBÕ=»ïËȾ!`·¹Æ‰æ³ô#W>Ù=Zwfƒ*AOJû–Ób[bEà ?ypõ K®céðìŒð©y½ )÷O& }]8öüPOÓ;O‡óYCþ½•éc÷>4U+„mÆà®1<ý¹Tú»žèÍ'ºÖE»ízÍûÉprºI½Š÷Ÿ£ÏÎ]ëY¤j;*çKž»Åº†ýãEC"5®Ñd­ŒWšd4øJžîy]yh"AV¦ÙŒü¡H€Ýb±ç}¬7¨ SY˜4úéÒ3TyhÇ»1´Ð&k+¿›Z׋V›¦Ç닼Ì>ªÝò X³VÙEít=ßF5øå$\´lel¹>0zþ5ä¡çÙy؃nz¥ä³âÏë(Ÿ¸xL˜Œ/ êLÎ;R„÷ٚݥªn²”ñ]pcJöø[j­›<4‚£jww]¼WçÇ´³ƒÇ•9ú‡–=kgÛÚ×ùŽ/{ÊJzè±géÍûf„h¦¡Š[ |Î9üÍs¢ÞûjýN=cÓ=‹wÑ·<²ç:Ö—‚VÝ Vç™øÂcP=Èdò…‰ÒØW5VÓ c7‘ø™ {®¶IÇ®J—;·Ý„;^ð)0 5JÃ~±e$ÂßkŽiØ„DQ“¸½ñãÞe–ì§q&”šÀîâ}nk£(´6ÃÊ´ûŽÛ6¸{ÑÐêmѶë¸j<<ŽJo7yY(ܾhu¿ÑQòI½ÀŒ©ÏñõWÝZäRš‘K~ÇŽ¨Þ;k›ûŸH2Â/®N³`~ކ„‚ʰÌÉVe†=a_!™‹jW>£º’YŠõ‰0q;tìkÜ7±• jêl]=.g†­+%'¸OòïÆÙ3RW?¶æmºôEî²xþBÎûRÎ{Þ´ûòÖ¶ºG›e÷UÞµu´Ç öò#¼ãUÊÒq©ÿˆ 2)'=m9¡/¡)‰ç)q3ùæ¸ÐW ‡¬ŒX›áõ vfNžLÑÆ 0’l| ŽÙß;k•Á±sŒ¹³Rf-¢‰D‹>Ù¡*ŽÅqlóŒ]¤^3ÙNj‰ cijû€©Ršk­Jÿž¼=JðP¢ÀýÊòb ®rd³1ÂÒÙ¼¹EmíC—~PŸb¶l7ßÞ`Ï7·LUlØøDZÃ3¿=䨱éAr Û G5dÊì…LÕ\žÙÜwKcýiØ@ù@è”ñ¢Biò‡6N؈+Kõf5¨¢zƒE¿ È“IÍX؆%ŒnXDÀdzÚ`à¯¾Ó Žs‹\R¹óÈMÓ›ËÃÏT8ÑŒû¯l鄱.^¶3gX0àgdŒf!+ýAßSR­­V›ÂÓBÉ)‡x¶rTMt®>>W³QD~þ "±»!¸h·à`KÓL/f0MÀï¼A5Àe>ü%(fÏMÝ*ªäB7l–ŽÒPõúõ‰6›(ÆŒ™¤˜é(-âí™\¨º¸Hwl¬ÿ“"#b‰:”µnëŸ8ݦwÀ 6ßa¸:›õõ|ã#*6v±%$7‡k©x9ÙÏ °[IlY=™ØeïAÙ7>¸â–v&àËΧßûm•Õ¬"·Ræÿ=ì¨GÃëc!&ÊZǦ=!¬­xCÍ ƒëŒŸä›ô¸qéÊ \ûù˜hîù0B{öÒ£u™±YÄQKçºìòó°$iG„´ù+yXÇÌŠãtÐáu¢ØÕ’sö/v }N3yÃŒ9OcŒ-¬‘1'‘SB Hò‡Ó°p³Â-ØÅipê'fǿݫ”“ÐFÕ ÷X›ôÃÒF;XÉ…_fÐJjb8Ëóa‡¤ [w¬z&?ŪãFq„‘µÐ1n;‹l™Q´Æý<"-;ßpÿÂŽË‚¦/arͬ4¶D(–”Åî¡û`5µK7ôDwâÙúÕƒN *¥ÅÔú¯×gfÔÒ·Ú– æ¿:館ÌúQºBMÒ ¿¡äÛVÉh²{¥ìÐÁjZŒ˜ï€0Û±Ë,Uî²V—òA›5¨.[4’aÄû|ù9,kå“–¡qöxÁ”µ1^ÿy5«"ñTŸni[6¡YvÄÔyÉbó†h…­e/îqì©Z‡´^S°çYüÂP —p½5PR·®K%¥¦jG°p{\ûÓ$Ør/£IW íÝ8ñû]Ë SiÈ‹¾ëeY(`xy¹i>ˆü-­ª(Eÿ¸Gד:¦P›™]ö@ÉrÅ œd« *´‚ÁyiÀ/»ô À6ß/¨ïiH’å`3•CÔŠgˆJÇd³I­‘edddÊ"eí(ÉãdeÝqV¼4šF=:ý ºyq_ˆÑŸ°ÕTøºNR0´Ô¤Tg¹É6Ý­hYÛjrÑô¡sÐäQ@&4'/æÈí­R«gµÝŸä-¢Ða”²d¶W^µó[5ü {i]ªûDÑ­|­£ á­} X%ž©Ú¥¢Á­g§Ã` r’ñ×PCË/ d5°+œ¨$‰h»@¬Ý•3¦Sî ŠfÊÝP=A¶±úpiDáÿÅê+ÞWÌCF?˜›Aȳ ­é£Ÿf½&3j‘Œµ°Â?Šçh²³†çéruÎ˯ZYñS4á±JEˆŽ n´±Šìnzûî@߇ 7àŽ?ÌÑ2Q¬¯7Ìž@Œ þG*šæz_u³îS½’+IK±J«î;ºž-àϱ ‚“íÇ4ÊSËtÝ(5½ÝWÅ|ùb56ó=‘Ú1<Å‚)»–°£ýŒàáRÆž¶Ò[zëèŠã¶¤÷Ã-úÔÇ8 …ˆâÏîc·+éC÷òë"8¿`²¬/"L­2ßVZ»îšNâ¡!/êïw%Oc9µ<õGD·ecðÉÂ9íØ4PßÍ\«ªÎÏÒòFçö1ÇÓ°Œ°$Ãn$« @<“‰vIS̪éÖ´µ2Â¥eDî3wSj{¨øg«åÖD-³|ÆJ²!ZŒÍÉ/ò¥n2ΫÉE§ýš(°UußÀŠ*žKñµ¨”Q>Q£¡j`ôKBã£"°2fhqž²•&fßµŸEñõV“àoÚ«‘Gõþ8ªÕ+ èL½ßÒ –°o¬ìiˆË’‡¿»L'¿z˜-­“ûÄðTjÛ¿EJlšXÙoeÒ?xµZôÂreÍö‘¤º‚c‡\wVUËDг ”r1¤0É制ôËî}%R F–RäcÖácö©YÐ ‹•º>ìU¼»üñÃØ®eú³ÚZŸ@ù9ëçÅû:ìC†ÿר1nÆŸÇ%º‰¥ç Ëʽ㗾E´S§‹¼³¤Ö÷2>O9¡[~ ÑF4J$F­áÌÌT 틜-‹ýáƒ8Uåüþ¤òùO- Vó7ág#qdžñ\[²ì«HÏtg}¿4 ÿ-Õï“vWVÉ”|«Ò¦<Ÿ¨„rëö2t0õ@TNi]´ˆÍ .2Œhs;,dÑÔÁ)m?¢©­7Wô¹ë¿SÉÐ}‘®Ü>¼ˆÏ®?ëöWcã2ÅÜÁ÷wê§Ò ÍrIÊP«’¥ªüBáck(ì÷r [«•x@«¦zýSžÝxÇwá©/árA ÿ'š¸÷¾›S0¨DT_4ÛãD1úYçå‘.ãïú¦ÓhˆÆ!1ô=kzï´Qúß»Ü9G³QšxÝ%i­ˆglÁÒ®Sºv5l—ÏC;AK¥/3GG™%Utb¬Ôßuc^´›EªDr¥¨z%3a‘Ô(Â<ŠÞù¹r&vê*VPôñx˜hõÑHdI•|Ý)>ÈSÀ¢ƒçïgŠË§ `¢b ¥-Õ×µs&{6¼ ”âê‡$ÿØ(Ñ0žù•2ó¬šÊ'Q8"Ý•œÒe’„”ÖàåÀ³öóžìÅôapÿïpC£f¾ Æüøƒ!׫eã7çXÿj“›Ýö–¯û¨gPþΉGÞbF\;™˜ÔÂôÉuxónµJ1&ÛT·ºÖxªGÛgâ3Z}âtfÊÓ ˜¥¶ç޹A”) 1é›ç&]shšU7M7Ý2ö’Ìà ;^ߣ?ÄèôæëÖ\»ÙM±š©²-ÙUˆ[Ø_zÑõyêEµÙyéso"P˱,}VÌ}žM€†²ƒsK¹’äU”{ˆ„Î.¦FoÞ“+vÇ€ËÆ4èÜá¬ÃU  ,­ ]¤IŽüôRE«$0vÈ»OÉŠàZ~q6Gá©Â×ýA"V÷¥W„µ×8 ¢h-'3>‡X©Ô”!V~âÅ–;™&p5´^RкkÔ7+b¬º™Ïâ«ØÒk#$ad¯sƒªƒÞYïF} ^5è`\8ËxÇËÖ y ™E®móVÞã²oC9¤U&¬µE¼î_TÉþjY ?¦ªlùdàvk†ž"Ðf1/Ì”ä]g·Cýþ>8ÏõŻγ3£-ìA%8°Jeœ×øo"xüó[äF¸¡ñ‡þB«X t@Üñœ+™P¦¤N䥚dê8û¹¾©ÉªóëOoçœø\­‰Z«‚”õÀiT€ŠË)æév×óZþ®•–œ¿“]¨³· 0ËÈ?–)•³{ïK6ß0~Ü0ät*óÁFõ OŽés^—…àkèÝI"ÛÞb¼RÏùÝÏ›§'´cºôD-°fIzšÐÇp8aEððSš:ÞÆg™œÒ³jÞHÛzˆf‘­H~ÎéÆtš&!yaL мÿ‰ûŽÓ›ÞsKHM9h1˜”;(Ö.’»±ÛÈ´üÑ9^ÒѬµ'Ü’féâ´bßZ„\½E±…vå3÷û/:e|NÞ·?ÞÿVä ©•LÃ’Ö>WãgxE“m#lÇHí©ßƧ¤Éº[ñíê~ÃýÙþc1@ €pãÿ´VÕ¢d#žîúˆ– nôL¼0Ú—îáÙ–còƒWæ,êI)ýâ› ›aÄúÏ—±hñØT¹šPÊ=†üöŒtm‡™“ôZ#_SºU7ÉkÀ ù1 ÁzáIOø0Ô¥IÍÙõ?hØþasBqíQÍÒµl£—÷4ÿYÚ?üšm÷«K+ÿÓHV™Nrû;ÀGfyoîYåìz¥õé3ic¬÷E™«ô™ÿ8Û=¯åùfüœ‡7’_Å?†„=>çþ–¥Ëçòa}1>þ/¨÷¼\5õÏ"ú½}[<Ä¥”Ú„ûÝ^Ýœn;ð¥mndã€hÿèÚ¿ÈO ^o«§é¼ž/ÿô%•__ß,6þ“Ͻ³{xÝÿA'þCµ_À»¤ÿu°Ï˜ÉÇçûW–Ñäÿùú‡·^êj-ÿ¯$áÚÖ¹[¼O°.rÞ#t0±dHoøÞžeÑg µX9Ú8릳 ®„—\;$;©›N(.påö‡¥¥ÿó´K2{mÒL’UY´%Þƈ ñPãîÓÁÞ‚Pý[Äjz­â¦¾Uš›ÿ“æxµÃazF~û sl´.é2—ߘ*9ð»ð!”VÂÊûIøâûªÚNXy'7êÊ/6²–ö뼑Kæyâ©&µÀó-Ž\' ZÆ·®?ÍÞ7>FÕ7ö_–gxÎû—lV7\‘ &µž “c9Ñûÿʶ'ù,½9Á;¸ÑÆam{òK›P•á.NÂô1úAñ(H -[ø@äê›rY~â)íÏíÏö*¤ cÍ1H½ä±×­¾Å5XmzË?‹o8sLRTÿ nù-ÕT…øOEÿºAÛ]+iɶ’nÒÒ¢YKÆ·‡³)½ ‹O?963K¼²‚’uÎp2Epbá'P¶Éï!NðUÎ~+TÃiE”žÅyßZ®ð‚åèú@‘?à}áoùÁÒÔŠÛò¤Ç„ã `CxŽ®Œ‚³ï°eˆ]âÈ| ÜÔ2~­ ÃÜ8‚nöCz¬y¾¦|ÆoØà"² ‰™®…OÈ>gRaаÁ1C½ÄÚtôi– EjaÛ©)‰U®"ú¬˜Cw ×Ô‘ @ÂE4' nÎ~Öˤž„J-|>Û‚z“ ¨oÁè^"¹ÈiÆð»ËµÙ7ï·Åõ&ý~RÁÜι„óÜðêãDŒHâkZÉ4†Ž'·èœ~\¾h€{Œè÷y 3Ú^z2ÞÐWß&«.ëåû–—,”oJØûÝ9µÓ#Ù즘÷T6ŽsÑù %]±ÈmbЏ Ãuòï¯ñì0Rø—´”0X‘¬[¿žDŠè}åLu5-~ ’ÅèðWû…ÒQ«$\ßìËǧùî'kåܳšÛš¦ÿ‹ß]äÇúž™V7ôrã§-ö»xÇ$aìÙ e`ã¶*%fBÏ×HªäTÌøŠk–³ð\¹ÅVí®_åLš<ùõ ußBÏ­©‚òÿ@°‚åe =QÈ òmóG#Xž*ySâ)Ú :vüÔQSÂÓôžV7Ä&ÃÑ}<ÿaŸNÄ'Yó`;oÄW¼Ajö¥@¬°â0s«òlw…Dõƒl‚†þÊ,Q “Ôƒà+Ä x—ø€’êÑ•‘9é`zI~‡TZ{É%LwÎà›®ýd”Ù+¯ëâá¸à©Æ¤ÑcÑìêÔäV>øVŸÔìü¸ÆT÷3®Nf³ÇE¿=rÃ/uâ’ ˆSý òód"A>;:ƒízªø…{¥ï¥0}ñu”j²pr&åŒ %¿ãÚUWe—ÏCmÍ1çû½Ýš©s¶Xòi– Ý¥bN ·^`ÞMÄ´G—籚U&.X,#[žè7D8­…ïÜÄéø¨åN0½B¾j¢Òæ?Æu¥EúnLùîQ |'ºc>{úV Jì*#V1*=kO*R”bl4®n…¯g1†I°ÎÓ„–ËÉŠ»'ù4å“Z¸:S¼!’ƶ|ÞbW=N@‚– ¸Wo9ÖWá#MnT‘çe­¸_yÉD[cÓáŸ+mgžu®²Ê¯V¶Ì'eg–Þ@O.þP¿_£Ø@#V Ð÷·I}çò‘± +iJ‹³Œ~ˆêÆ:þÕ¯çI ½ÕóÌç;yMÊ3½3ÆB‡~ÆByzú<’úu¦™EÔ/ùœ€‹§LOïIeÐ%v€—~ŽßÐ>«;*µDLø1¦ë úF¹^cµ¿Æ]D·ßÝ[r’¾EÖ\ºsÄçõ¡¿†–g9S¥”åë„Èü·oQá<%å8? 'ºúNï˜üs€’O2,ÖòÔ‹Ñ)j¸~Ê<†7Ë3ê/Ñ…0òwÏÁféÕy͸È7Çɵ|Õ‚ïÖ>S\ 7êòM̺’&u.\* x½ ÔZÁŒÿZ7°$y7Í 9Á„°û?·™¡¡˜ú‹50C?êâP«"*Y}l‡`oÙwh…ä\ÇØÌrÍ­¾FlR<ëFO·šxîöü/Àù[ÆN™ß©˜_ÆUËÿsp‡ˆ«ü 1¾_Ì^Õ²ãšzæ?s 99ºÜƒÒæÄØWvþÌXºÙ°rÄÆ»Èkq°Ï°ý£X"Ó)Á`åÐwt¹û©rc¾Kºs(öË g纉 6~ww·XO ~Šë6«wcÐǻˢ§‡ô;!©VÔ2ƒ»ë J;úžEþ^p:cÞ®HǨÿÝ¥sëÉÛJ…"ã½»þ…ã¼ï3ße*å¾,™Ô¯ç2rîºa4wÜØôxD`/_°ð>‡ª¾‰Ð2ÈàçsþŒ*W7 g„§dá±³È.w„¶óul®ý!îõ‘—éýBÙ‘"¼Ò-â—ÃB)Ù)Å—q×¢çÚyG×Á£‰ÁŠ_л­rÎiA˜(ÛJ ,²#Ю„ÿ`ú\0ð…ÿUˆöfå–7—ë…ôéã‹ë¶ÝôÐvo>Umïùg‡n¸­Àîàµ#¼•çˆב TV>½-Hܪ;—&FUÚG(‹O™‹u7nе4QëéÛú1]ˆ{ -‡ˆËªOngtCfH¡f—jb­>@'2°9âè¶«àxóñ‚šyÇÍ®ÃZy*ö~Ã3)á2»{Eöï¡V»÷ù¸ù\ٛÝqðß¼Nbø.ÎHm&ÔènÕ×k¼‡yÂõˆ8Å*rÕfê쯇•wà}{Qð®}P®kÞ)û²­SïõºTƒÌúpü õÇÎFTÍ3Ç@q5˜ùóé|ÏåW¨-ô‘¾°j¼ ô® z™¯_Ѩºmï6í0yÚ|2@§cfÉzUºöÌ%DmƒaLúâ…,Q­Mز¦âsi¹’ñëËÜb†)yáß¡¢P°®ËòÖׂṇ±0a-2Ì=îŸÍl°’NáP‡åò÷c±e°B«° …4ó l¼Ž nI º©wcÕ=82àJ~|ôœ%•ÈÂz4´Z];éT[žiåfgž,ØÃØ3ÿ¶îWU3~r•SãŸg|ú߬.ëï…ª'›î’ëAÍÝ©ªïât¡úÎk"ô‘°[h#81 Þ§¥p/OûñÀãl %qÅýÿh#šêºFOQADPéEiÒ•Þ«‚HïÒ¤÷^’€ˆTA¤ $ U齃…ÞB¤z B’\|Þö}ï|sçÎ÷ÎÜ?ØsrÊ>{¯ßÞk·µÎäÌV€­WÃ>í£U÷‰I³ù”}o¡tXÝ\×–ìõ¡a`cBv4'6û»‚8û»M¾qrVÝ•˜0ÏáM8 ©&õ©èÒÛð¼,ÕÛíSüà$f¯¢ÄcÄÔ\†i·Äó·4)/H‘¶YàÅL‰ÀO‰øSžÐQÆXU¶þÄnÉ"¶M±ê[Ã:좵†bÝØ;ÎëhNÉÓJC<¾ŠmÒé¬Í‰Ö| mw¿j;÷ï*òkÞ…D}Bý[픓k}”²µ p:YIãUìÄoòrhø¢,²]¼$ƒYí+Cùž¢7 ÿ\®B—ƒ†²,z@Kq‹¸-/æ x£‚ðL|ûmNâ#0lù$äwßxRV¤]—eq]m~vË-Ùž—F;ÖÇscæ%¦†( d…MÎX‘ºå9ÓöxÀÝ•ªªûtlÜ6YÈÜœW x$fì¶Ãß‹; ûÁÆñ]‡†¶úÀL ¡ÀªmH­+¡Ë³&Ãчnj N†)ü|¹ËZOC7ò)ôù$f PQ¨g!}2x6褈3@ûD›2x&¹7½0s¿ù8^üxÇý‹ Ñœ¸¨IˆÂ¿Žú ®ÒÍ‘çŒß¹G>œmÔ]ØEЇ)³+ìOÁHô‰üd–"“ðÕöa~ «?˜°x‚0üçÿï[»`÷³[@Ú ¬¾éQE ‹H×Ú‚ÖàþÒ5˜– 1³ÁW´RÃ+BÂ[5·wšnµJ¦&&p˯¼7Q\Io§Õ+ÇéáïÚ,Ïy£s‘A±WvlѼ)]Û{ÍÖƒZaiIÉ£·Ù–Dà‰SOÛů¹R:@Dû²ØGˆTÆ!³‚–U¢Zk!0V ­ÑCÔTšVΨ·H¦oƒ®Óê(¬e¤å4e3ó0B¾ÀŽÉAk÷û`¥%ƾMÇ6‚ !ñ²Å/œ~ÅdPk+×—{ÓJ‹èh\‹²Åw?꺚~!x[X<,uÛp>KÌVŒÃè:—hàަ½PV¯ß-+Q©ÀpñT¦)¡1A&Hˆ@À®4ŽßG,8¬}ºdœÁ‚OÂiš¶T™¡+·>¾¸×tæëOºI%EµÓÁÓvÁYLSUPN]¨aÿÆWC¢‚ÌþÆ7¾`ÿÈp°¬Ó”­š —à4…—1òHO;È N$‡ÅÀMâbXTS-ÿ÷ä¥(‚¨`yñ -T¹Ìéw©j3s&hïÝêT…o’É@—kU‚~9«Ñnö©Ð¼Í_SÎs‹Zßµ/?Õ¦ÍM,¨=Ô.GJÓ®©ZÖŠ/¸”¿ÌÍB:jgn_ɪâÿÙaš˜cnõÙ_TA=­4ñ.þÚ0oc M Žo/¨DŽß½lw±?D©«d Õ†J^’™Ü D¼.« ï“Ê(¿2àbÜ•Š{\™s¸shm$F$É{…e[îºW@BB‘ý/6Œâ?dÀÎ…j³Pìû"Úo^«æCÙhï6rù¿uw?Ð3n5?w/oxn™Ðc¬¥$ Þ¦×¦å&îîf¬Ïo À—Y”æ¾Ûj¦v‘þõ+áïZ×ïPQ#ùV©98Ôžî"D£î¤Ï Ãä[Y$²²ˆÓQ) ΘÇØ(±aq—9wu¡wÊR->ÎÀon9¼4¬èžúþ¡áS™ŸˆS¥\†Wµ M·Ë‰úˆ™·wt¹‰Ü­²ß,}¢×/xAê'ýt¿[yêz­A@ óµ>U×̯\¯Ö‰è¤8ÁÜoÀb_úÝ¡þñ5«É÷5¬Îü9E›àv0$ØWò;¡‡n–…½5àòõÛüÝûoK#C{ÞLÜ,þ<ឨ=Y¡Æ m³¨?êÊ\¯žÜáÑz¹@sȽGîï­¬M¼âòe°ü0«ôm_˜#dáQ P ñS)}y°“ýÊ£2bŒçGxUܱ¶S5ÄóÏ8•Á­[÷ñ4¡Ø_J”–¾–KIW]О«àª „™ £+"Ô”ƒ“YÇͬݭ6úmÝ]kz×4 u>½®îèV!{´¬c´ßYé(cóuiŒC…/zÖ2֪כµ š²ãÔ÷Hiê  ÐîQŸrûád 7E°.L,Ñu-‡»ö®£Ë|Z9zçêˆ(1DŠ „Ú&Îauçɻ۰@Ý½Ž «þ³%• EÒ”\üF÷ÒÁ°–¦¾Æ=Ž­ÀÏ­-€žlãC¢&®úÙ–&ÓÀ í^dÆÓHŒï]¿Ç(Pk¢ _k Œt;d½# ¾ÙÑééõ¤Á+ñâÎG/9hÍ ·%»µÄñ&QÂaoþµÓ"‡j_hÄwž©äiž~Fý]Ñý÷>nz©†Ìj SÉ~­Ò¯tŒ*>Ú¥ mxõ¼—pȇ¯ÖÂeÃY–o%ÒoøÉáç9àHÛÙI¡~_±²ÔC‚)»´¥ž¼:%ø·Ú„Ø }5½©‘ƒù[O lZh‰”^*&K‡›èJ%: ú”ç×%RJ;X«óŽ ;]–ë‡ ¸ñŠÜ öÌòa™¯¯?‘%Êδvî]Ì·¿ûzŒe7ÑA, Êá{HÅç™XH…sás¶ÐŠº:nïa¢gœÑkÄ `ßÔAW “ÙÆO4î8ÔwM×꜉>mìŠn'ʬޅ¥² ™õß^ÁIæg’¿qžeM¨‚Þ”msÆQYZà|øj4ÆzÞ<¬2ÚâïÊ[òK`ÐÃÇüèÕhƒ` ª±(Õ—?‡fþ›`bØ ÷-LÛ[P!’…-ñ)N¹O*]ßÇÚš'u(Y9ã :É瓤ÜÎ{âº3G¬„©42]-®º5Žù°žjÙñ^ô³¤Ïýlú„{ëûf!€7·åÖ¨ðrâ§<;7_D—e}ȘÔô«c®¯„ã닼¬E§ylŸö$¨ÓŸ(CÚö,qi£o»æ oi߈èÀhì\)ô‡<-Îäì*©psÒ˜v›sŽ )r»²Ñ ¸žÛÁ¢ÓSQÞDPߦ}üöaçPŽÔ$wÍP¦D§h°Åw»ñ2Ô·«E×SKg캔T(7¨è7hh_zh+™|J>J[zš¥>/úrBpÈBúÙÖ ñµÈz@yÞÇô¤M„ÆG~Ö° Ü•N?¦Ú@­‚7Á—z/Æâo °ø|2ðÜV8õÅ߯êR… wù¯´³¨ûRE›5'WÉ»¥Ž÷“Ÿ‰ÄСùüÕ#°Gí¸ÓFèë¶l-‡ÈíOJðAӡΧ, §Œ&¼bDâì:±$¦PÑ Få®Iûñm–Ràt¡¶G¨3nõѪŠÜ6h H»Šf¶ÏC\šÉßÛ—…@K*ʵ\u*cÍäÓkl­ˆãD‰ácº½,nÜx¦Àîf?Õ|!ômÌ êWñ‚ nú@œÌ/gã2ƒ“6Ç€ënÓŽ!ö'rðkóleíª}«Ö°ÐÅg‰ ß”ÞNâíǃÅÞø.vIx*Ü®*(‹Ê }4ó*MïxåÆ6\@–Àµ¡”ù4(Ï("mZô.—UYOÂUáœßüNlÊ£VWÞì°Ö¸ÆDáÚ RÍ ¯Á— 3¼rÉߨ爚«” ÁÆÌìÛ½#V½¾Æfê Á“ü?_„P¬—[—#Ë”ÄIHhfþµL¿øÏ=gb⥎b޹áÍFÓ+ybE•©ßjsK~¦Íñ‰"J0©rqqls¾FG9 ÎÈøúBøõ¥È–N±GÛëp(¶"þ _ñ-*'q8A%êmbâbaD~}²D÷¯Û¢aä: *Ø ÀË ª%. pê?põà4°îQ™ø8¡òØúHVœ2³ ÃäZ Ë×.XÞí°*ªtÜm•÷r—…lï°®»Âü[ê=CY>Ð_üL¨ v8JÄA@tè†Àþä`Ýô¦µT芪t˦˜*|ÓÞrÛ¡Ìêñ홣à­Ì×ÉÜoäßMn±rÙÿ€wœj{ò›[ô—0»¶!Ö®Úƒ¢#XÀ">iK|Ï{ÏÕÉY§2&ž¾©<ùiÄùv?â¸O©}ºÎ0"Qɾ*¶£k­ƒú!¶<`LX²6ͱrà"Z?×¢þxÜÉÓ/Ää^;7@ˆü¨7Ú¾uÌG3`ݧ‚&"jKO¥3>¡6[™ÿÑM¤%Ñ‹ ¤çW¹æ×ü’‡=óàovëÝE&P{ïˆP[CÂÖ,=dÚ;3éÛ§ÑÊæw{Yoc™#ßèg$«¡EHÓ©9¦^Ci}Zî†U ¿ÿÁihö¶ÑúÔ)á2ܰH—h$_1‘røf”Ërô.*,‡Üt³|"¢—¾Í‘Å„Zͱè v^°²ûmˆDzþšä“»^påKÝ·CöÃAB÷®Á­´ºIÓ"òŸ—HGqðl¢ÂçdøNv1Íz`~ñAŒfY÷L0œë7åˆÃêý xÐgrhÙ{P¿yþݲeu°'øâã2 í à_Õˆ.Hp¢E=/6t%2€ (JŽ»è·<—ï¦V…鿼]‰[ø: IñC¦7yëšFen×ï «“®ßª«—‘ºŠÛþ9Ї^áŠÑÕ½\»mˆMùSzÑ¥QòA^#1îÀÊTx²£†cV¢B“PiõϱIÕ݃ÉyåÏæšiøà³Ö ßyfœågò£pÓß•Зà¶&¡Ô ‹+¬å]Ó÷±GY8±J½™Ôˆò}=‡€ÖËI–¥U½M­ÇUŽv«°C`8ÞsG.:.t/5¬T,ÞD=J¾ésªC"í‡'üg‡úQÍ‘†LOÐkÆpïÔÈ}ÉŠ½©ø“yŠ\þŒ‚ÅõTZ¯,“^ä×a¿†Á,ãói.Ò¢÷óð6±½›Ñ°÷Fù,·é‚åðFèDz—¸1³‡Ë ”I;*Kõ?Ï}ÛB„iÓ2öfÊD˶e/Cd•ú’’aqŽ;;Ö› ¸Ûu ¶dèvð>:A÷¬Ô!åªrë^fM1‹ÉÙ‰iæ(që]\ËQÌÒo=´·ƒ`B}&º.Y«~ƒ,‰3µ“½äB Oó â¶yŸáüˆP¶àA ÿ*…8¶š˜†É‰è÷”‡©I\±« ºZá¨rš"äš½0#¿&ûJ”{;š ÐŒ¬·Ý‰€INå×ý׃+ìËË+«&ìC˜þ1xø6,Œ%¿h¼šae%…®™¶áX†§¤_á' ªôŽeÇv޲ñW†Eùk›Ã÷f§ðDîmãúñ°·ÇOH(˜ÂgÃÎØ,;aàŠÌbAYäù¦uz¬3ê.ãSò†;I™7€vÑœ ü•ÛààcDh»æÛƒ¤V¹ÞêÌB&=¸ÉVÁéOŽ7~͈vû›WÈtŸa@;IÔ@{«N†KiJà'<Ö¸(_0c€ãý +»mTÊõ]|Tc†¾úûxE3 ² ÕÀ¿wEöë ‘“ ´j(©<úÜÉ:ˆXkc§uO÷±0”Jpß‚ñ„öŒçzåfu8,¬“ŽmšãʱAUÛ4¥ˆ†alW"Ì’«Qp”9z÷€MtÏyJ¶ZVÖM̤ª 0[šØ¿·ª€íÓ5Úl—Ã4›ÍZŽö™qœ]§ ¿6ZFu¬{‰¹u‰ôŸº|–LµÃ·çV¹ÄìƒPã­fì¢Èw!WFn±iÄ4·}à 'ã©(ÍNíÏܼd`ñ#ÏÏ¢R“rIŽ‘5P–Ù¥±¯É¬Û¬2¸Nnl‰I§J¬ËB4äÑJY«AÆj>­\íÀá½û¤G ÁUÞ€ xéjÞ`2ºÓe®±~áÃXšÙëk%cžG­† ¬Dz¢:˜ô™ígÒ¬‡ÀˆÑ™ÈA‰èúfgƒû@>Øh 6º)+EúÒK­%}}Ž3)úÝüU ßá%—¤Å­VÄ=³·æ@ë¡*ûÍéʦƒZþÜœéTËp å,Qâï|Ò–·}ǺàÊ2»û$Áÿ]'¿C‰¶ebtú‚ÔSÉ* ^½'#§ñ<¿N!‡d3`§ªæÖ´Œ,ú*øU›ç­$.=Fx}Œœ4¬èÙžÑ*=)ØR [ßÇ&{¿ì´kKL«,ø†Ê§æ;B·1Ó ˜|úxå|Ba£‰Vï,‡ôZtÆrE¼5Z(ßÊo ]OûuEVýóÑááÛѯFˆO­h‡Çì’›'ñçÛŸ%}a5îžÙdÜ+Þ¶;»'ã‡ö|r_8€v¶^Öé“6Ä©„)JÝBÞC|•–¬kÛËîTïÑNIÔLï4ðíÞîU<¯¼wÈÀßÑÜ¥Ry£ü´kÞ~¹i|b×;žÖ¸‚N/‚rZ7]<)€ªÁ†ë´_*­>cÁ/ À^ ­ë·p®-{Ñž Ò…LSC•ø•>š†–½ÀÙ På)dh[^aR+º.­ÔH8¨I7õZ—y0ñ‡Žü‰ßåvª»¶|òê²ÑÞ#)Ãu–òòÄ!ûqÀþŽ“SèúÝ0íö¨£•å#ácb›È)áϼ¹å†oŠsoBUb¥£*gZãrÁ/ŒgÐĆtWÊ:’I-3:/ZHážEœÌìGÌ« \u‰”8cŒóކ=°—w•’¹[@LXÜ.ˆOó¤Ñ®‚AÜŸý÷¹ŒjÞ—{ÜMø…ä©õ©mýFl®|”ˆýÔ£/cÜ?HtM°†jCS+$•…(¿æ:a6Ô Sy¬ÜñR[ -™‰ idã~ëEÙô0ÅFÚy»ºnhG%}t Æ»¼ÒKOÑfw6‰)Χ'곎H*S0¥!½+¿ï-q·å’6E)PnIÊ“âF‡ctK ¸¢ ùÏÓôsóûЯ¥ËF˜Ãà±™Sþö뇋8V„ Èþc…ƒ(ÅÒ{<¿Çé1ô7èDù(£5‰ bàýºRÿ4C$o#ÐÀR7e³¿#N@æ÷¡r§ —ÄDó°7D4íÚ·:dAcc}cöëg@¨ÙLÔ¨XY]–‡D á¶Îø°k4ðåºß1¢Y­+Š™÷uÌÈD¢£jˆ/Üþ«ñÃ>ú×õÐñY*ù+ð±ü¸£®oæ|ý…§öqðkyÏOßaÎÞ±;Z‡a"%‚d‚'Ðð—Ñ@ï|Ú©ê²ûÖÉy<»)ßôêâ¹_ =šzƒe¹=͸X­»€‘+s7ÞØBö‹ú[¿-'Jþ¬J_ß„¸x‚Úæk]AKCªØ¬&ÿäÞþ¤ø!úN³ÃY™ø4?tkæ¨IMº|Gw>_WF–XNôÍ= ÎÈÞËÿÈ&Ëît± {5Sa Oß¿ApK2¨Ü&Tæ—{ò—šƒ±¯†:NÞf­}B ô²Žð>ÜÇèŽ= 8¨‚þÞ/ÇÀ´ˆŠT=,’+]0›zËYçw’î|Ú¶pŸ%éC§W­õ%¹HýJ¶úr¢¿qaE5Ðàz9k€n՞à &õwrÇ|Òñ2~ßO{9G_âýB…¸;ìÂô_/–Î9´¹P}æL‰\!nî>Þ­"X¢?¤ÀcñG»ÆCÃK–ë‡åƒ„S]™NQnÅÎUE Ÿãè©tkÙégxèú¢Ä aK‚Ô]$ž~#KÏöÌ8—ÕÎ(ŠÓ¯L\±„…@&|YsñÉó3bc=–ð[É{Ÿƒ'À¨Eé¹ ù¹à¸³VÏ? árù¸Øq‹„äBð¿\Üâÿ!÷C¬û¶ðµ‹–ÿí¯1 â'v²ngkìO>PPû½[©Ráh€ñ¥>×äý³ÃÏ ÑhÂö¶«f,²–%CG·i­oYôX?<ô%b±X_à ‹á´€a'(8Xê癵SU"âp8!Mÿò…¢3ºLÌ’——Αø’ºTò'|õšJ>¡í0ýà?,YW­ó×a˜P(4~&?(¢é[gìlD„Ÿ&ã­ýµöÕX‰±Ðæ!ŸœaLÁ·ë•ŽZiÆ–35à¬5S¤ÛàáóbˆAŽ)ãã6ƒÎ3Mc6†¸»»»Ÿ*F÷is”²ÙÚ'VrŽ5NÁFÌCíÉVh€|Šó¸µVÎt²A€8ÿ&îÈÀÚš'Õ;&»÷û Ÿ¡ÅðKœU(X)³#±r_“•uãFÃÆâ°†çFÈÅMŸ(DdznÂ1á»56ÇÛ;Ù¨Ž0‰;oé1òð }ïP†é÷†dÊtI+N“„ÜÀ: ¡Õ'‰ ³è—‡zÓ‘§!¡ý²“öÛâ›öY™ª¹AbQ­^'yº;.4ýh— ÿwÁy¼8è÷M¢£l/’cĪóžÜÖiÕ_-ÖϘƒø!„0Ó©ÛlÕ6Æ‘NW,ú‡uÃqpƒB¹Ôn#!o'ˆwήC Ø©–+{y6êЕgHjKãtU¤­+ui#$}æA…^×ý=·g£ß]qøÚ§õ´,2çø›XË(Ø m%åx5#Tê~u`Ýýöy顬íXÿ¤£—Ó°­Ï£ÐÒÓÚüîÆ}(†wÆV,%Ý!÷ÐO2:öŠD!{nž¨cãK…N×‡ÇÆí }œå‡—Œ„v2쬈Mìhök¡ þà ƒõ†Å³‡wg›ˆ7”rÆñÉD y A¡‡È:&¼ XÉé`H<#˜Üºt`s2BÉNB JPJMºVPä`õ¸ü t‚onpÒ`Xeã>¦Á yV,+$2-Mϼ<úvGâ$‰„q²óš¯;Äêë“„Ì$b@‡ ÿÚY>•¹þÉ2k¬Ñ‰.³2‰9$$¤úÿš„Š¢þC“Ðô/çÈ7ßèQx_§ð¾vÛûÚŸ“šöˆ+MÅìĸËð•l]ÜöS·Qý÷\Oþmc÷f‚w"táRC è®V]´§åŒ/SŸï‡â>èÎüôÿ[Cµ²V}ÂÔ Îh?D­] Î& b'ך’è"¼Ý³nÜ5’Ú†¬‡äp½³]­V“ø!ßN„5q œS˜Ù!æCöfóxì0Þ…ïªÂ²Ì ËЊ•S¸µ)óŒë? …E_ú?®ÿ‰¢¦¼ùùßK’[+ÿTo8…ÏÙ]Òÿ€zsÊðÓ©á5‹ŸÆªrÔ<梋?;ðê?0m\#€­Ä¶NÞ§-FN¡Áò8ÿ>š˜¾¸Ûòés®OjNL4¶ÝYúd]t¤Bš¢§Cµ+B æÐKeò†P£Ð±¦î̉LÎõé$:; „Àº(j¿QÐ@\`òÃûïÑq9 V Æ“>(?Åý€&?Èžu¹Š‘ÔÔayo–€Ï4…U¨¸60 lJúl=º°µÛÊÛªZÇ]êjé—Û²°ò 4|õÛ¢uOl½<ûÁû®Ñ™¬#¹†µf…° 5e¨ï±HÜkO&•)R.Þšš·â4€â%Á÷ˆvÑ,xXðäÛƒ{B¥ž36klOŠ[“¢4ø0\ãýõL:l~(Ø7\¹¤ñÉ®çÀvhÖéY §]I]°c%g®´;v~)XsO/6¢j[ûC'b"#ÇïZä^WpÔGÈTŸtt0Xº­1UÓ{âŠé´‘…®ùçNy3ë²Ûaßë¼ ·zÆêwÄÔŸjñ›ðáõÝÔVš‚ÍJÀ‡Žœ 혗¼Ù¸†0˜0Tcë…\õµÒ5í`xñ ù3nórN1©©FÔ^îuÑvìÛœx_¬PðQËü‚ß§ ` ”H0Ém:éøí÷|øD7µôtˆÙøÔxÙDßF¡O¬e¼påñh8n ¤4øÊ#O¨âô¬®ï* ª 7“.ä°àr5à´+Ý,W×è†ìÚ†­ñ‚ ÃÜø=§'ìýö-Ìa¹]üoR7ì(žğ“GHç ¿S¬äɇ%‚óÈ‘o^Ñ|•)—3–G#?^~„ë_li}ï3 ùþ[^Á5?$¸˜2)§YQbpÇBBA±Šþù›§'“/Ö½¹F•XN9“÷[þãþ›àýïm“Þ\ˆ•)-îP!ÖW‡)\–ñú¨­ WclI† çîh©ÿµ'w©âéZTEä>æýK•³s0SqiÞc¹¶Â&N8«åµºP£îmÓZflCÄë‘fáÅOkG2Òù×.øí}I~ðGÚ¥zÂï#|P¼|¾f+ïôxâ]2P&ÑïØHå¼]Õ4ÍYv}gÓö"¸«ž_‘¯Mïu ÒQMmÁ¢rŸq‘ ²F¶Fý Uݶ8f¡ÄÔ4CÊêÂ×;ÖN Ç=@nÙR®c¨ ôŸ•ïýz52t'x÷2¡ª+v¹P"_‘TÑ¡L‰ëä• ? ¼`Œý3Ôä0(ﷻܓIR>IØT©P­Q\²¹‚-˜Z~ˤõÛ«“[#ÊóÙò>VßyMQnømú<¬K°Ó"òuñÁše–:AIú06®¦—ãHK1­þÚ±2ó6r~Ú ®»¿Ù©:Åzñþ³ýÐ ä˜~`(¦ðÞÏ0š6°ý´¿£òd)4™>fuËUÔ©ÊOaÎd“K™¹}Кw5í.‰…0P2_ç;cÑÉY÷}vý=Ì0V+ +™0óÎ0Àquõï¨þ´dÐ$®óß$Vj…Øœ>ä„uK ›ÖÇÑ&óòÒ´2º˜ºÒŒÒÊ2£‡˜3ZöÖÉyIâú×¶EÄáÝIö ë!›[ŸBû…û±ô\ØØ–‡|$§%^Q§j¤«Ç§´þ9™¤, œV¬8£aׄÏëˆi;皉¶dÖÍÂá©ýãwÑo¸w{6÷®´?v®¶ü£\:¼ ¤ŠË]ƒ¼½ÇdyçÖzyº˜Ù+˜uŸâˆHœ>'¶²c¿Û­(/k_J³¢Ñ¦@Œüùû  hg¡j¶ü!Sí$jŠù®ie ýÎÄä¦WsÀDu©ø¦+‡ÅM²Ë/'š“ç·»\»}jÚùh3Dh-ß½NÛšfKj1.{;ÈFIw10öm·¢ÿC~2u<ç4öÚ Û‰ù׿b ÒS û%ieÀgbÚ·ªRäU“¶Y5ö®ä5ª#ÞþÛ©‚•œr•%a…fx–2sûܹ|ÉxFÿT®ê‚ñðºpÛ™wªzDY×â᧤§¾MÏß~JY¯ž_ØŒ+ýº£‰£$ꀅ¾fׯŠÄ|F9.X&‡Öš[ýRô¥r ƒ§­<{Á„Ï3%G5çFä=“|­5†ÆmÞ“ÍkùÔZ¥áL¿xš2¬3¬­3P›œºGÃüî®3'ôÙ¼Ö#VoDjCDkä'ï uTøôòöoˆ„/°§d¬‘®2ž:Ž´uƒ}ˆ„¤ÂÜÂê4m憴‡Œ¯æÉEž¶P×XKEøKVЕúÁâ^ý¾y3 87~"ðì¾è·Tˆ(ßv}JC&»a¶:êä6æœcRs.':Ѓæû¿)IšÀä|í©‚Ä²Ç7Ÿª¬ÎÓßðô$"ƒ~¤^]üží(ˆÃБS[ñí‰'V1…=ô,•½–T’òÜåÄùøñzdÞŽ÷X~Œ?‘œP峪"¿‚tS;‰cþbÀÔ|³)ú{i¾”&… h‚°6'Œ¬z`úyi^R]×£„U1óµ°+¢Š( li_ÄaýGÞÚ@[M¥ÚÒNun’XÖøÜu› Fˆš¤øo8Ù3×+tç`ƒsä¾Åݼç "æír’¶ÿ̱Ð*ì“ÜĦ@ õ¸;Ñ‚ š!³™€ÚúÌ»5d¿*…y•‡µ/°ÛLXRÇ¡ˆÇxë{²œ¾þÙªy{¦‰®Ý÷¦ê. °ÈIî›Ôt€ðÇ%7ßL¼ÆÝS‡‹. ¦ZGÇ—ª>”¼Ø8þÓ ¢SPLå÷–D玀¹ª Ò­i9êÖÈP¤’ÒËBèùÇýr9$7ù¶Í-µ¼]Zâ‹ú~Ï⢾ö:ÿ„ÛßL­úHE„÷õ^zÖÚ©€Rª^Ÿ9ígZÓ,·/¯d1D%\¥ˆÛÀòbg€HÃ-ŽÕ ˜ÇבĶXÄ”µé’^[¿‹58µ×™iwÿµá‘Ø«ñRêt…&¿_Ý‹“Z²&ÒC¼Çñß¿8½ûü¡û"MQO´hžeDÄ|‡•íW*D2û!jîºYoœ ™d—”¬ÿPle‰5Ö+üØCYGýgFýô‹®uŸX9¢“LôOš•?ÀœX&=~{Ä(•IV¡>ÉôÁaK¾ó¾'µ«·0ó1ºR²üds&¦s~p¶;¶ÔË\ÐâS¸q§\ûðh{U&®<áÙ¤~V?ˆH°.Æøç$Th´j«´ó4áwxÒ=‹sÅh÷úõ'ç,•3Q]¤m¹Z0Œ …›2029h5!@©SkyLÜýd+ÖX^øÝ3I¤ì«æg u3k¶åž¼^ã¢;ÔÕI QÈ>#kÎÀœ—ì è ½gÙˆ:s“üä•zéþ×n7Ç0†  *ýS°Õ× â½0Sq¦’%Ï“æ[ÖZÕ¾µ?-Ò|÷¥ç­»˜ÈàÛüP \Ý®R¿7ëµ»Û,rÄÊjáHÚÛ£2ˆ‰’×ák(52rR‘ñýKɸ£Ãr„È(wæ?¿ùXæ[ 2½´µäV“Ï?$åp1öC¿=Êf—Gü…à‹¦žÖºqãst#ÙѶd1üÝÈ/·¯Øú]ÖõE­k¯“óõïÖÏ“—ekT6i óƻ2µYsRS¯ãÐ }ä)dB!yá÷™¡†µW~=µÒ芥ÄWH›ø³oR(ÕùÐÄÞ K xñ* fùcEp¨[}z–…\ŸP½D½IÛâêú†öÈ„Xû+ÚŒÌ)õ1#<¿`¹—7Eîø'Ìç´ä¦rê'8‡u,5B˜’škjIµÕ.D<ü¹1|S°ãZ'«rìø2ág$.žèÈó¤…˜GÉQÈÉËß,GÔ/d¡öù¾z°Rë>-®J¦æípÒpâ×)„e¢º>HöyÁÚ‘L\]MúžÔ8Dw#õú¬°2{Ûæ£ÅNBÕšõmc!ÆÐ´±†8êi'ðð1e¬v<Å„‰r̬®¡Ö©ì@mLÜ,z©°zç¸ògiÂø3£öñZ3ÝÌn !;èiD}ï7ë ~}ù>Á+‘]n[`;ð”û¼ÊoBV†-R#ÚNNùÖ+aÍx|Ròˆïêø5ÅK«jÀ%KRÈÍÓ^}ˆ–;ì2J†Ë{,¦hIß·bãl»¡,=»‡¬.—[¿3ÑŠQ'$<‘¬}ù uשº´Ä/ôÙŽ4cs5ù#Ž“FúÇ0vÕïUÚv x…cæÃÙ“õ´Q£yìNŠhÕSqÎ9–ˆü“¹ï½²Ïrû¿õfÒN õ¿ (¸4˜t—¼þ)ßM„'ѯ¾<ökN™{­éûÄ(ñì d‚oQµßò«©“¿ýзã¯ìŸÿuò2IZ·åñ}‡nºßÍD|<\½Æ˜ÑkK[jË–_Ëú«Jì§Mîù]ûé:=î´ò;?åNòœ­(ç$ú¸Xºô{õ@A˜x)ÿ2Aÿàú¶Œ ¡±×¿1€ÕTég 4Ïú1Fr)C^»qåó ·…´¸ØWË_áÜvtÃhkmÌÇ3ìÀ/çûrÎå¹Ö )â=pï&$tósø^¬çF|(¡ Û+×}¢œÕcüþûJù*Þ¨üôlÆÚ¬B(Ù(~ÞA ]@ütºª¹;ËýshVAS£îÊ$+¸4˜ùèî¬{›A×Ôs§nA—ÓtÖf¾o²1¨öÛc•¦øÎ«Œ¾öѧ0õvÓ=:Mß ö5{a:Gs%È‘qñ«ÓÂR©2ׄ“¸-óþ2›4™ÝwìqšÔ‚‰Î*UìsN¡"%U“³k¥ÔªVqá”ÝoŸ;¥i*ä×ñ›õî§5üɉòyá;ÅrmÜ&Š-j>*ã—°ÍíÓ˜æ '+ÒYî¦)WåÚÖ‹¦ÇšªR$nôuvᛊý’Šs',?f:®dÑß+~’´ŠÐ)™zE±(è înj¼X2rÊ}LöóÚ³‰rbf‚Òo¶¤¬4ñÄy±5ƒ ›àj3ç2GmD£Å±WPrÕyAÜ·û©Uæ5ZR «nÔz·Ò£çªk½óžá°ki­Ï)ïÀqUOÀ$è&AV!¿P1FvƒÖT˜5ºÍ¡•"Éê­wöŠ" z-K­x°|6W’#äžÄõ¶ºláÛ·~3ù»­|ã }m2„Iã€Õ‡÷0i˜ FŽ< ¬JÇPª'˜A-/ø!2ñ”°{ðPØÕžÐÃnÙí ™¾R¤Zèf²‡< |Éœˆ—ÔÉÂÞ*%ˆÜê¥tp£õ¦”™ú«q]húuñMíߨªLªµ¸°~$ójÑÅ@#öý ñÁ‹š¨’EÛ1欮ߑÖrýàØJš¿(Oàm‘%,ÍÖ^¹h™ùn!°T ÅúðBæ^lî·ŒLÖbÄ"Kß;uƒ»œ sŸ#2ŠÓ4øOÁYØzÝ!¿ä~9zQý›+£†á¾ïn°¿GF6³–<ŠŠáb¥ m\p êB T°x8uHçט+JìRÖh« £×jMÁç yŸòôî¶õ_N®6Ô$?‡5ð²Tâ—$t¶“Ž6ø~ûäÒT™¡+¼%r<þ}v|ŠƒÃ-™À$îL)õkÉÛÓôcP\’“Ð ªn¶=¨3WEyåΫ¯ÞL°ºðãfiÜŸG×ìJæ ;4ô½A×&)×ë»)âµg­ìŽûËp· }Z~ÈsR}Qüíè6WTj¤[SñnŠ€ùAô&äCà¶kò%s‹T®Eùãî´Ý&Þ§:fUØà#e^ºàkîUÁs™Šë€E0qr7þ#æa 8´Ê2zØnaÁ»®9ÚçÖÈ—YòÛÙ³k@ì8—ë(˜(áóêc^âºtyÉÝ•àybÚiš8÷÷Ågà—¡V2ë¶cd|L×ÕÍ Ù<2?&S¿§G%óÆ9üLwzÏ7âj6ÏÃW' :Ó¬ð×î¼6¹•“Yd}PwTôÀüú¹lŸ‹ë i7œÔ¡R-ûÙ[îo‚#ÒÆ´-Ïü)V†²w¥•êàJIkQ’»+õ<Û“?®8ÿtZÙ1ü²:‰LñF­† »©§ˆŽõŸ„æ6u,ù£ÌÌŽiVyÅÆ»³´,µâ›”:cÛÒøškád&"\³KŠŽ ñk—ÞJ„ÞŽ2[9ë>oTqÛœ:·m.'¹_yÒž‘õÓ÷9…jGÖÎH€à¾½nþ˜™í¬8çúŸ Õ)±¤Éá"üì­öÚŽZ5ð¨ú9‚ÂÚÁÌ<v‘¼uÔýeÆYQÜf÷ÂrŸï‡±< ×ãb—k<")»hh~{þO§ë¶!èß´ú€(=©ù¥ ÍQp,¦¢¨ ù84"öÉèyŸ‚' q[*»"ù­ýëS_^(¹>òâÆrc®œnèÊuÁÌÁ£!Ç!O¢USÜäšß_z·¢Ç8’«ôX<úê¸2x×PqéGÃæøŸAiï xÖº3hÌ–Âý.èòŽl0ÕÀ·< YyŸáíAí˜c„Û+c–¯‚Æ·f£;ÈM‚TÂ_³™yîü1ºäŒŸïâ;ŸJhÝ/×’çF,m’­ih#!s°(CqÁé°¸5yǸ¿IýÏØXªæ3ªx˜ˆj?5éÓ u+Si©¦ãtd½dlKGʘ¦iÌÝ5Ýît«¬«R™i´ýñÉÿÏáôDj‘¤ízµAMB"zÃÙÀÄÏä©¶´§» ÍŸM ¹{ýõÜZV!ÈËÆÎÕÁÍÖÁÑÙCŽÑÖÅÁæl/Çaüè©ðS/'çÇ!>ú!:v!®vRö òT²AÒgÜülØ‚ÜÝ<|¥ƒä8þ’+}vþ'Zˆƒí¯$~®rû²µÉÓgl*ž>lEì„Ų=••’À¦oãǦiãÁ&*Á&*,|¶•“8ÛØþ8ä©Îö²>ö/¥Ÿ«ªÿyv%Çáäçç%-$((&èéã($"%%%$,*$**p–BÀ7ØÃÏ&HÀ×óoBþ!GÕÁ×ÎÇÙËÏÙÓƒíϵ­§¿ŸÛ ¯œ×?A¾Wà™*…În‰ ýSòág‘Ò*>6~ž>žžnòÿöao6}1Y¡Oô?åwP=ûÉŸéCJàl5–~(!ýHÒì¿äÿ[¢ËþÔÓÞùeðÿ”]RZLäïÙÿK¢èEèßó«0{»êËËßÇí¯f±·rpspwððó=Ó™È×™½ôKOw?ygwG!/GY¡EþoË÷·Ø³nqÖ-…þÙ/åÿ[±þ_…sÈ9är9‡œCÎ!çsÈ9är9‡œCÎ!çsÈ9är9‡œCÎ!çsÈ9är9‡œCÎ!çsÈ9är9‡œCÎ!çsÈ9är9‡œCþê½éáàa/ÇÈ¡ OBBûŠ„äÒ­'ªJ&Q»–nLÆô} À—“¾}îïy.úX3¥‚wFlfì|¯òÈXH /Œ‘q¨)³±¿Ný\ú\‰ï1‹"iž¾"=]D=YÃz™{LüêCïÜ5½÷c;g¶ö’¾žÞ®Ï3 þ•¨Þ*†åà ÑãXÊ™çí®.x"Iø² ð.b{¾ôå˽R†C÷]rÄØhÃŒêéççzm,¾¿‹ÈÐÌ¢MÚs™6òTý¦,Ø”árten®-×WêÞ+ Êáw«)ô¨…¿¹r <1FtHN&ÞUôþþFæ›F$¡e26/Ü9Ò}©ôI©+C¦nøŠ9e"—ì©{ò©‰‘w^æÓòAgæv4•’!ïò³Ñí9:F•»¤§'ú|á€á¢= >‰XÖ0ºÝåHd‰Ï´pY–&­¨@ú”ús#÷]yå…hv„Û³LÒ6ºâÊ`®kðĻ߸ý+ºjÿ5…ðÄâ¢`Ãm9ez‘d•Ãc渣޻=¤Ë]´ÀÂÔ-ÓKáÊ¿ô{[[Ådª†ôpð_}Ô ¸ÆßCÒáuÐ b qߥð<Çø˜êîKkl!Ž jn&åÑÊŸ x]xÍÙNz[ýÖ…Ï÷í,‚ƒ( b&ŸRÄ…i…ëÅ}ÖœÐçM +ûòÑ+ü¹Ö¡oçÖb°þv[„Ew||9) ¤¹’öéÝfYòÔ¼ÌÖ Î<ªOŒ¹—{Œ¥óp|T%þ•É…Èï1=1J2#%î?$ÄšöKŸoù‘,c€u·f–GÕ/éÞ—Y¢Ì!ITö»ÐûÆÆ ýÔ}ïó:ê$õØ«·Ä…Þìæ]aI7¤ÓÃ9¥¹ÛG[Ï÷“\Æâ§ö"±O8I²FÈÈ¿°ÿèžìo~þü~Üá«åÜbÍï\~S®­dC/ c“C? S^Ÿ-÷-¡ºÔLrŸB-G›ÛÝ¡iaÆUõ®¢€|‚Dõ¦ÝMÖŸC¾_€×¥¦&nÝu¼`ÇôhµÔTcéRô¡íêèLs•ªyh\ ïwk‚°ôÕ5¹ð@9‚AKì ¹½‡NUq®ŒÈóÎtÿ²î¤{J=šDÎmíÙ×åéô2.ª-qÜžÞqŸUž»<:"d„æ,ÁÉóChö*+Þß{×Eê-')~±ð[½NîORFÞØ‹’n&èó²e_uÒ)¢ì Þõ½¯ALú‚‚æO"¬„zÜŒS˜ AÌŽdkøº»Ÿ,é„Õ¨$‚vo×ì“6•”צްåkç* <ÍI®ùQÿÕ$ž­ôµ*¸¤¿8¬ÐKN#qÔk×'˜zÿ£þOÕµÁZò˜Z¯´ùqØò̺/lŸˆS8n³œ±D|øÄ¥p¡f5­É`GUñ}ú[ÊéË£Òa²µÀ­;‡ßfeû¬¥ï0ƒl}v`Ü|%iÏFsË…Z´‘E3/‹Õ5™³[Û(c†lùž\¡¾g¤©"[O¡yþÚ¦ÿ㗭ɆN[¢¿ŸíÖprÖAé·w°®ð¶‚‰c-zìóÏΡ”t¼+šì•#ëëáC÷5£"’2ôëw“]_2ó¦B‰î¿Oëên¤½Ò‰7åéFÍ®ÔFøô}Nò*CU¿=1 }¹ÿuîÎ3Ê -¹’›jðÛ‚êºO­K¬>˜<¯Èd­XÓÂÌq “Q“‘sˆvLÌ—‘l -—ü^3–‹÷!—áÚc"}w=¾ü’î>YÁc§ãî +=MKs´d(<œw™NXÀ3àðz²Õ×Ñ轫,D×.CÀØ CÇë .×湑ßh0;–›¤ûU9¸® >º¸ ›¢äI,ÇèŸ:â¯6ôÒ„À¼‡ÓŒ8<Ñ!ÛQƒ‰O¦E¦/ð.í›Ðä¥n½úa4&µzK5¹þ«'ÈÁñÝS&|*üCÝ3=ECÕiiéÎ’%—–ß߉$Vuí¸ÖòDþ¼&øDMGµRùÅ«ÿPKnc6;ù„4œ…ȽToolbar_Transfers.pngÔ¹pÞÞ“®iˆ™bfæ˜?Û1³ã˜™™)fŠ™™™™™™™™™á3ã&ÿùÍìÌÔÞ[·öÖîÖž’ޤWÝ­£V×Ñ©zB~ÈŠ!ÀâÀ‚€€ Hˆ ÿüs$ú»CCþéÜÜîþ¾8J(BÿiІÁ®alÅÕ@@2Üþî —Ë <¾ ;Ѝ:ªÊHsØXÑëÚèÑ»XÙ‚ðò»ØêX9陘YHˆˆˆHˆÌ $*l2Œ2¶BF¦fânöF n²Šn\†$ü|°¼.Üœ­Œõˆ\¬,­¸]$ÿŠÉýçü¯Ì@Bô/G É÷¿7ˆTe~ ÙØ±Ò3Ñ0²°±²Ó3s0sq°Ó)è9IêY1s132þ阹Y8þlDÿ4>Ø?=¯½¡1÷OaÑžùç @bêèhËÍÀàììLïÌBocoÂÀÄÅÅÅÀÈÌÀÌL÷Ç‚ÎÁÕÚQÏ…ÎÚôß‚ü{a#{3[G3k¢¿×zú6NŽX¢ÿÔþy9=ÛÿxµÃ?Éû“F†?7˜èþ#òßàDn!{#=G{EK¾{}Q3{#g{ "!^†ÿnôåo$ügçû“.º?3£"#77‡úòÿ7£ÿæ.cchfìú_Ý™™¹™Ù¸YÿqÿOFÿž†ÿ–˜ÿ» 34ø|Ù:Ù[þë³0YYY;:üÉÓÍ™¡·±½•ž#Ÿ™•ž‰ƒ­µ /Ãÿ)þOÇ÷oꟲøS– ÿQ—|ÿeXÿOµÿß?„MÃìÏŒñwrøW=ýýºŠfVF Œ\ ÌŒ Œ\ÁjÎ,°þZ(Ø;:ëÙü·š–«#”ý3ÅÜÛÚ+«¸¤_¤é˜j(auw½u<Ï^ÌRD˜¹ÕUHÌ¥äÔÓ*e¬ûK‚™Œæ©{µéO¿>åuÂ×ðÁ‹ô„}“þaŠýTtÈL­"z£ç®Zc°†°ŒN¸Ê`=1gOY<ÐT›bxOÝOwòl9O8ÈOÎg‘¼»ù–‡8) º½S(XœŒƒ±øœpçŃ^œ—šá–¤Q°Él#!ô±:Îe‚V¦q'ǧ¢Iƒl†l,0Âo0ët-9 "B@‚p;vR,~S\ú^¤•­`sò Õ0 ò‘ßŒZí\9tÇj©åšº!6 â¿{ãÍsc³Ä4­7¦Z¬­€lZ…Ç5oÁÀ´"ÂŽÍçs~œ½ebN­ËMÐn¾ž¢Ž³øï˜·úçÏO†²¸]?ìwpÂ2º&ãýê3ª¤·±ò°ˆ†¬'›Â 3ºÀL0SB˜Iص ǽoEí£í­°ß…QS;û·ÁB‘t m9vÀ«¹?ï/ƒ›ýwýhïöŸLrïïÛŸ_P¼>šÊo«–ö²°p6®ʫDrk¸?C®(®’×íÈݾ2'Œ·j|^7UÜ©|KÈ|Œšðœù<)I»ž‹}õð±Ùô%W‰JÜ1rºxæ2-ØŠ=›Ûb\ÒY¸ë?2$JåÞ'y£%ÇqWÙ·D1}Öšv,<ý,A×P«ZÒ){ŸÙ“GÛ»øZÝØ­6ãU<² ÷þD…–¦¡…%ì~¸XRu~ôv…ê-¦1-Øeå·/[nµåÞ9`ÝT¬ä¶[㾊Nn¶Â>%ðS¾·”í%›2}”¢7=›t¡A†\b€@öKùuS =LBý/ê‡}¹ÞOH3ò/4Y×T07b>¼ÉHË.øitÉ¿ ϦûRYÑ÷ÐÈ*1ô¥wr>äe´*Ý,Šôm®~°Ãð@š×0ο ô†âOõ6 EgÖƒÕî"ý²ÿìÕƒ RõÍU~tv §‡‡Í‚cÓ›Ä&j=@Å•(ª4ÓˆùdQ£I­œ‹z½¡ŽøBýl‰È½ËÿAYì_N†·MúUås§FPâÝ¢Fâ.ø›7^‘—²U5—-42±Ûí0VÕ‡Õ±N¹Š0L#Æ íaUrúýkñ&ª-ööɑʬ³¨Ûxp¿ÇGg!fwÏÜÖO9þýûŠùvòÓÇ"÷¥ëØ;«ý,ëtìÁ;–Î*Ö›çöÎNñbQ²ÃGŽwxÍ—0›)T“þ#²EGþ uä‘!¡HÁº‰¿TBêÑúë¢Õ¤ÃQ¾ö¨¹øOC‘ta[Hn †ˆ¨…oí2µ±§üйYÑêpfv›VKîÒpØxõçS]߄וtHbÄÉPB„ÿÓ!ö òöݱn©½g}ríƒP$f½ ÏÁŒà÷QW£UՒËC™üÕÑVqÛ¥E¤º{5F£º‹²Õ^ËPTÅÀÿ¨´³ËkgQ…èò®}faYçH®R4Ó¼CýןIRÜÊBPôesôãï¢ ä³Qç³ä€€ð”YY(*ü™T=՜הéK¿EÒMÉΖ4´êÔ/NÈt9j&s:Br©Jr}E$ nw!~ûWDÒ¶°’ÓÓ}¤¸{÷{¶{|y¶¸s&#" €ì­1¢úö÷¯ÜÅ–"W®ÏoloÍM6Ú)«\oìÛö´4 -^}ß#|­Ž 'HˆQº~x½yÞq›““ NmPÞ‹Kˆ“U èVÅ-«¸E ¨O¿òñååLMÛƒÑ> Ö˜uõa ­–6BZ0l?Ê]_`%FþB¤Ë“èªã﫸˜áZÚÖ.·s˜½´Ü»orÞ)äUí67™%°œõ£o@h4ÙÌI¸È2«é¤D¬ž)Øz_-^;ÉR¾¼ýŽäS&· e¥îÞ-Æu-ñëÙ¥}Y·—ÀÝEé%¿ÎO‹COoWûƒ®µzÖ?`3N3yCE¯QÜð—$o . ,EæžìÐïq•¾ÞŽ‚Ý€e²[TE¯•Éò¾Ä.-<Â#·ÏØ/pHÏ%^.nÇL²Cg›¶oD—(±ÃS â°ö†œÐgê‹ÏÙ*uñu7´$Ô)Ö3,^ò4«…š)7×t<œŒÄlúŠ$ÎwÕ*"¼»Õuæm#´Yw°Yv¦…˜CX,h(B¨ÚæÒû5òr\™òÄ@“©ÄÚ&²<.‘{v„¼ °<:UoÑÝFð JàìXº2®'ß2¯„®ƒÐs ÓaN   Ö=&‹ü,Qî_ðDTó7 ZÝfjpl±“”ēկÒz¬Êéã){wª!qºE»XtUud%ƒÐ X9«wVp¾Wç]'ò£ˆ¼B„ž=EÞO÷TWôKþch¼G9¥òšuIŸ9j¬¦0îˆúf‹¤zKn¡<Ö]©²ÕÀ{8ÁÏ6»’ cAŽ3A¨²Dúè#¶š°‰Ì³`ÌM‚ë·A çẉR2 ²“²²Cy,WÔ#Ùøõ¢«Êâ·æ¹yÁ÷?ï²$KàNFÈŸAù‘ÚW¾­XûãIGº.i|lÜék³¤lÂ,!y…HŽÒ–\ÃÜù—ˆ}£席Zš6ܤþ>ânj3šÆÖ´…ÁytŠXm–ÖáX­…cÃ&ûÊÇjÖj±ç·ß•1²»ü2 v”™|ÎqÀ áÉWnë¼¹ ö©¿…8®†o+bŠúú›# Ñü˜¯…] Z$¦>–(LÆ®X]±ìx^YËKÒ…£?f%CŽk,7ÅqŽØ1 Ç'½’GiÈ z‡Õ¾¢Z´û®ŸNdu*5ǽ"“ÿfɯÓ;ƨE®²Ã±¾Kb¦YBÊX'úËzMM›zÍëP19uWü!ø¡0ÊR\ÜíâØÉs"ê{Hºä:…Y–á'‰øîw{ƒ¦þÏßõ:»Þ'˜OÖ¼zÊ_´k±ö`PŽzŸ"L~óvÇÿù±t{v/àEa³¬˜(~WŽ#‰ˆÏ:Jpâµ² Â:ì›Ä:*¸––Ãn¯Œƒxo¬—¶Ä@š ¦J©™Ì6Vp¡F‹ßcV2]À®àÎS2Q2ëg’ûiTÏô^ƹ‰ÐŽ.öê$iž?BÕˆ%b?CBuÊ!2cŒ¦Öϸ›L´kj¼­Šjb[Æ)2‹"ÛS7R¶f¦ IêÀ—œÉ Œ§‡bå=7ï˜ÙÕü™2å®FNÍ‚sº3þRdÈon¶üV4­õm¦Û7||¥Ï„(¿lµò‰}qòÚÙ'b•SNRôvbؽœ2p{ÍK”bÃs|Ð:lýÚ¹ß[ìr*ž=ãüKH‚s#=Œ“Š(…a?ð!½E?‰ð['ª@<½©}üî7TecÑh7frÍË–µøwAoÜû”·‹ÃfLgCæµ›ýô>OvteˆyV©ÊðguŸ†ªâž|êNhþl&X1Ãýºç ùÖi®vœ;%–X†Ê¾æ”^’¶ÂýïQþ˜Ã›/h¸`Õ,n2 :q7"%14_ÓjEމòþèX‘ŸFS˜ï¸‰‹/¥HêÜPÃ)Ÿ²â–Ú3/öˆYäÏŒL¤Û É€Û¦Ìq3Háp5 ª"Ä÷‡ê`Pá²ÊK¶_ç6ø ®/;/9/Š@™'aØ$º‹äwùNn³s†kn`‹Ajn6ËWF0äшŸ¸£³+DWgû#¯:/¯È9‹Ø%`¬üƒÏ`ru%Ò„ò.¬BþïÍs·b o ez)tçŸ+–êzVLXaÍå™ÛÊ “™,¤HÛ…;1êÂ2è¿ÏëDßˉt“ÄÔÞ×Åt–³.: ßj:_…¶ºPEjÅŒ¬æìªQÇh>Õ•ñBZÄEQ£óRO?±ª¢9°fgsÉ-l´Šm¼¦/ÍgPÒ- ¬Kâ•qÌTOž­n¬PÊr€ U{ê›À/R.7˜a]Õ÷¾>±H^'ÏXˆCÅWd¯9ÏŒ÷Cm¦ÛJÁˆÉg'R:È[,¿!õŠ%MK;H}K zç­J'\¥ú3éb°¬V\)ó.ŽVVsÖ?/©ðû§—Þ º£‹âé2jó–!haÝ…cl‹»Å]ä$oúïµj:ÇÎÀ©FÔ9ük¬«ý_¢c}¬kö¥WtP3WÉ­s"‡±ÍH ¿b³JêéͬÝÕ|¡4Â1o#ñnµB>§þð÷ä<Öà>¦f(B†¼ .®(öÊë!àй¹¶ó@ˆcäL›šúßsï_)¡mÙG&žép™ |GT:…Œ¥“¸TÌtÃkBá#¯u7ås (؆Bnñ±ÝVX£cøÅú¿)wYþ É-oÐ'L‹)>¤pjÁ ‚à†PefôûªØÓ´ójŒ”Õ3{ V~|gƒbÆüFqó†néaõ2eÏë¿åÿÙ:cÿEnÞ_Þú1öR粩S€Zr&ÑþÝØ®KM© ý¤i(wëÅ'Î9Ì5®éçñE¼aB/Òjô¾¸pªPÏ»‚J 6=ÞÃa`–ÝnÂ7®O8ãJsŸ¬t« §·GÒŒþt8Ü#?ÉuKëÃ[[ÖBÈ;%ÑÂyQF<ÒÒ*?‡néx'×vj:/4·™+Ù$œTpÅXÒ·RÖâ~¼ôÅ߸•õt,»•IÛ8ÁÄÈûmÑìü£t,”»•‰ÛP:ˆ ¼ˆ¼Â¸)£„?‹9Ó[EZ:-ítK;ig“œEtÍïy±ôï«é™ø.ŽXŒÝǽï+¿+æg)ÿÞFt ì"…Ú× Ã‹¢;x±ì÷d/})Wr—¸OÝóW‚[",,gXÒ0¸¬°[Ð0ú}¡Í9‰þôô~Ÿú+yF¹òˆ÷’‹á—øŸêªÒº‰ Üy»ù¥c¹ÿÐG}q@?û5E[óW8tîF$ö«Ñ€×J”ËüˆaʲQÿ]ÈW<=ÎX?8+y`W}©±”³y²E3¡«0Û–1Q)Ç쀟PE&dt•©šJT¶Ç†À#„@Lš€´Œ–§Ô=wä™hjfšLWC ÇýÂÙÔEê–zÕ˜íñÔÙN%ËOƒ< f¯Õââï‚ç;zï•ßÓE%´V¥])’$ê÷÷õŽž¦‡‹1¼B³ÊéO[þD ±Nû22êìðTw±zò>5*ã tÍ0T»®„vºË¯¦aW€.6j Ÿe]f¿‰+ìé[ÆÁ¡ÆÑ¬¢,!žßžÁâ—üÍ– w}¢õQÛ¿ý’°¿—äöÝQ#̓e5yûöú· eÂhÜ·<~›À ™ÊO{{œÜ5·‹±‡¥Nÿå249Rß dö¶g+ÍTÀÎóƒ¢ó9ã›${¤Ä‹Ï÷Wj7vÿ×»9‰¶Ï¨‰›ÁÄvŠq¾™Úl/ÚìÁDbŠÎ’yv˜ÚX§ óQx¬ÕÛC‰sâu9Dé÷ðÒ—«ÃË ÑUT˜÷[§c:”Át„ÃÁn¿OÍÕÚ¬Åau!`ñØ6R ¡ý[-"œxÙD…œãÏG4{k­& 'ôrN•S£‘…æççé8v¶¾ZÃk $Sì.?œ«‡F/eԔᚠfòVëÈÓãw,$ñ‡í_‰698uÌD„[DJ°6–c·µ#xWÃ}4/s&gí™bÆElnŸ¶Öuúz{þpšÎ²s_¯­¶Pùð¡ØP”wùTt¢LúIb< û6  °­,ðk¦>ç+ ÙÀùZÍù{œ1·949r'Øô´ÀÕ_æMÇ ßØ²!¼eôM´`®äy¦ùH΂Y>¾ÏhlFY>ÇRh™^õ7z÷Ó„Z½SÕ6è´;J4êf*Ç=¬øäux^÷€²*a$²öfÙËDÓùÛP¿Ÿuiû?ð =Të»óæ›Ädø™d4vx^sãߨ¢}öHÿî 6@¿D×Ô3t—j¢7§è¿ßÄk» ¬Ø'…23ôŸqFk?¹cÏjó¾SSÌ„t\š‚_?úï÷O½&.~RÌòCäõÐTw<«¦R굈ÔH? ·‹ñõ‚s÷Ö •Uò×6Õù’FÓ+º‹VjöZ µäaÝ"ÎHûu%‚Mû `šÿkÐLÞàGܤ—Bcw¸oЕH ·Y=)—ÓU»[ËòW¦‘dÞþîQc3«x–W'(õºwòÝíäxÞ/j¾]v&ªÇÅ6¤}K¸°oQ˜ãÒ¤Oó ˜ñÒI´yBÈRRú…åNúò®Áñ4øR(N” <Š+¥mDÔ„ÃuB)¯É;+UÂí*å‹xÌ‹†/¸· .Y¤nïó0ÏAe9–D†ºç6;SR@°U(ÜU@(ÿJ'–ígƒ°å*ZûöÂ\ˆ]¯¦ì Ì8¼Œ›w–[ü!:h·l]½a8ÒöŽë× véˆñÝ×vTd]*þü%”Îñýh`Ɖ¼á뛉šï/áÀ[B”Í~û«9Y¦ÓãŽöóß»´™s–'ÆóeÞPÔÖû\|›wÙ3ƒ³TX×ì×èGE­-عÉ'ááÌ:@pN oT:à)óüS@üiYœ|cgÖé õô0ßš9ÆÜ”# ¿¢6Ÿ ±—W¡Õ ®Ê'Ø®h_R¿ƒ AøûèmÄxX8ƒ·°ÊRî2«¹S ~ÌÂÈ’P§uŒ^ ?åÊQß’w àZ?æùÙ&Ä–l–¢ ÉÞVBe7ºC”ášDÈ/îépH­…}ô*¬™aÑT=Äd…«~Õ<^Ì"4Û5íEýÊ‹j¾¼œáw„‚W!r òI˜w5ô]ùLÐëg‘ÉÉÁ¸I;ÐÌV”Ÿ™[Á­Óû‹á¾ªjÿî‰É;äkjˆ¼¬$BEdÙî&G’²YŽˆ;S¶ÄM,žîºBž¼Ô<ÛüN}Ã0©hÇ8ÒFÀp³$gXvέë)ÂVÿ¤†"I§ÌF[»¢îÖ‹ëFš”Be‹F¥lê'ªÕTgŽ íEŒ"Öü+[iªPxB“-«ëºßÏ›ŽŸß6ã–PðE´ã yó‚°Š ‡ïQè$è;¥68:"õS Ë¿ÔVK< ‹ÏéÍË&4,˺œ¼lnÞ.XUoÉ5ÈŒVgÍ!§§˜š{ÔGÅ-×XbùÌWÄŽÉÏôS9f—Ÿ¸N¹c.~|ƒ¼¼àP9Éz|ù¬,–äÉK}ˆë «èˆÑÆQ 9”'›bòkoÍ}|2ºÿp–ì0 ׊ ©4ÍwVÑmÒŸ`‰Uñ'jSªƒä*°÷ÖèrÛ8r¦ÊðMåJF)LÖuç–uoîN\[ßÛ9IdùsG'«a}–t¢)¯•T\&†ªž=V«½7§©f¸ºxéN rZqEW,]éäFT áJ0|Uòãm8ñ‰ÃL#‹%?%Š–O)ͱCÍÀ]N!¥)èæ ]𠪪ïq†—4NçPÕ+!ù¨V7rfó¼$í} @)A•ŸÝ®42“ô©— ZíW)÷î>€hÇê²üÀçØWè:ï߀š©;ì¸Àú¡zì8, Ì ²¨Š–ÞìT–ççñKÉÙ¦u.sg‡yûšêÏ»6@„I'\ÖÞÍ3“ÝMËÐdw?='4Œ†þã­™óÓcGd|Ezo· ôÀàöT,;Ç‹Ž•ð"Z]^vQº×'0jް[íHNJ9OÁÿјTþõÕk|î !‘Ëpç ÷¡UìÙRcŸV‹‰b#t~(­‰¿¯ßÂb×õqþŠùüì7ŒF‚ùÂbÖRôÉÖ}$ØöÕŒ eÐ}ßDû.X‡!¸èf-ÂÝ4ˆp3¼ÔKûœüp]0BlÖk™4xo]ÝQ¯!¬™ÚIbåLêwn1!¶9ºñù jº nsµgÁÉÝóèxØÈq—.‘ä}âÖ±i.ÓÚ‘}t%ÿp'Ã9ÅwÝÒá?噼:{uŽTu/ñ˜íéAOÙ&¶DñÆÍÙÊN±áÄ~òØb†YeËÄå²ÐÙzˆº…Ì Ê¸öü|úb„ÔXrGWËõ64·3ƾ>Ðóë踵ä,"0¯ýtòP .B¥£ìì’^ëõE–³ÿeAƒ4ÚùázÖ}þ Ô ~ð–?“ÚÙŵ¾GGc£l×"w=V·Þ`µ”ór¿ßi\×ý‡—£‹×vÖkûñÎGÚ†•曕Ïgõúv”KsÂê—sÙ¨¯}akxçÛ­=ÄôÜíËØ?Ê‘~Ù5E܃nŽož~¬bOWUøiñ/‚Æ Ë9Ôê­î+%Ñß,Ðk}~ÏB„rßÝU2‰@Üô„€š¦po{X`{m§¬¿vÑ»L¨>ß} âk€¡óÁâxX´s­n*:ëÈÛ Ü»$8¯n[Ê©“it†©Ü|@d°½GŠwq+–ÿî¬%=MˆJ¼ïuà$ÄL{ì¡[B„ñ¡“G a+’§åóË=(Çóª¼RäÕUï¡dȹ_ºî¸œf~)éÚ“se%'mº±í̱x’Ý©çñÛ$Á¯wÍ®¿£4imË>@çvE\?—“ÝdB?WÄò³#_VŒgçÅÆ„î@Ù;½’$D›CfÔÖˆ™W¹ÐX1ÉÇe°’º9H7(;W`³Y둜·z1Ô#½P­œ¹›x”ܵ¿gÎe‘OQ›+ÍþšQv6ñ®BU™öZeÆä££ŒŸXå:b\#û©…(¾eoTdÑ~#ô²"®ø¥½]òexøe!¬Þ1ÉÞˆ”¿œÚ~|U[£Eûâ 5·Œ0E€dĶzÙWq®þÀIŒ:—yär÷pÈb÷…ÎZ‚¿z‰Ž£çÞ "F"æ;ô`bú7bwÍï¾ •¦ü'e®Ø ª’"¡<;¤ $ìë†6)Ÿ{Íà„D[]ÄÒÖæ†È¡õUï?œ<÷ˆÇ^µ>ÄtõPÙ)Ð&X·aü­éó@P…ç³a¾@iõ€¿ åqçše˜5fÅLïî¢$ö ɈH+Í+m²•+²$•7Çæª·£ W÷úm#$ÜKÈðΕ(@T'ñíÉ÷WŸ‚ 7­ÛD7¦Æn‹Ý-p¾Yfpn,B…±o‘W&°h䚕ҋ͙¾¥ƒ•·ºGÀcj›T÷©:— C¬)ü7 ë„:Fª,"+¹Ä˜ B,«Ic¬èW°! âÿÊ'Ñûõ¿“ÀŸŨ4tbyüÐ$s-©Ûa²È„ˆ œ­:¨åݳ.ÌwáÀd°¼Ë߀‚µ¼þn¸UIØ+±\ƒ¯À:Ù ×&´¾ÿǸàH{¼á8^A‘dpî/´Rðú&([‡Ê*h…@ÓTg}üË®£â$œ ŒäÄHdÊn‚-­¥¦>•$²1\^ï¼½•Iÿ8•ž”#3F#ǤÝX¢v JMÍçÑm4oKþ™Gâ(NÇI3±¨×%Ô­†cêª D9I\r„‹ˆC’÷ Eæš-à Nž~xEÅ_|9ᇾÞåÐ#ÌâKÍÖÀ ™¼>£hž|CŽƒîÚÁÀ¤ÖØ—Ä÷Ma«uX›¼•\y`)êG«rêžc'#ðÜyŒ…|Ë[£ ÄÊ1»ã!wú^EµÔhìz7\a¸éºƒòàÈd¤cX /¹ùâ ç1ÔËÒ“¬;z;…¶Í·m9žbÉZËD³GT&#*9›ã0±ËMÐ<Ä—cÔ3 wP0 r),‚×^ùíA¦¡NÁdŒF?®z$oXGÝŽ+iŸk”ò­þ4\9c¦´î ènRe ójò‡2(ÞäfhÞ;79Û¬!šF8I‹)2Ú}Z®)K(­¾$–t4Üé¬]y+H³R:‰ YÀöBÀþÂ+£_ ¡´\†«$æ(8Á¯0S;ú’ñ#@Ù@l<6½íá›d ã2T-a«¥ûìÀœÉ0}‚é¶Àèá)ZÈËן™¢‘[Õ( AÝ ËÅÀ|ÃùÊéðö!7}èÎ ÃÙ!ËóÆ~ÃìkâGæ_.<+0(r€ÂKK-”ÓÊpéá࣠\N‡z~E¯_€tŽ„ÿ]yB­„]9Kæojœ0/Í.v"xtm>­2!ÞÙŒ¸g vž @Ñ&r?S°„îžK¬â4ð.®b«wüÿ*ˆôM÷T¨±â÷:Ý"ŒeN¿‘ Ê÷O^$cŠ`¡¹½ð1÷ë©Xè¾÷eiïŽ#™8Ù}®àžÅðS~Žï”ÿyâB âÉK²]ĔѤÄ}ÕGí`%î·Ø/@E»'¤p^öˆ=ý]çÚ÷)B73Š&[çv\7f3˜¯ë]{û÷a‰BôàXË'K!5,78(éלuª†Ú „[k½jÙÌöÏ‚.BdóŒšÄo@ƒt†kÖ´Ñ;ä1áå(:~gÅ1¤êÕ½ZE;Ê„‰BôE ¿šà±SëûÝõS.–[k‚‘yEâa>‹ù)X°_®ñ Sžwï\ ›RƒY„MÈÒëŠz¦ó–ƒÕCÓÔ zZÔA­°‚²„ %I׌ÚÄ6°Lù"R‹›­?¶Þ²7rÉ9W×RW°Î—ÒÔÌ×v×È”…ÜÝvéª÷î"À$^ï2`x냒k¾Í™ðž"å·ŽÄ„€z§Qt¿Ì¾%ƒÍäà;£áÁŠˆŸ8o_Å÷«H‹èÁ—°– ôxøäñôTBƒ<ÑàØ¯ÖBòó‚BÛõ½Ÿ»””î½)ýûÄYÁÎÔG E÷½¹˜O04ô2³<˜ [<³Ol =hE¨ôCã4Ë’ì!pû2ò¥t#ä¼?¤öƒi™2 ûÉsÝs*(¹)Çó7CÉbÓnx™_^ã.eN_¾e–jO¿ûýu—ó¥Bñ ãÛÈâ`0ÒzÐ~gv~P?ÂýYµ…3‹l lkh™gîZV«ºI?ö¾µ¦1€¸x¤¢xàvÚ<\cÓjyõ‡Ê~RÄPôÙ Léô4.-n½qŠŽ=ɤ†‹œŸÇ0üùdŒv0‰¤É‘ù*^ÜÔ[ùXÎÄ3÷háR)™LÙKÑ›d~´q½»Òµ³»‘ ®þ7”ÈèE7‰f®FÆŠÐ(ó–ov]Í^( ùÊPõÃâÚ4œzG&@âéŽÞ[Mÿšè«’þ:!ȳW+$l'¶•´­«KOaœäDÂLG__áiœ7ÂŒUǃѫ…Žà¹lv²O÷tÚ·‹ü‚Í\yŒ\B Ib¿Ñƪ8Z¸m”ndÓ"ì·£øïüõ¯„®Óx6–#îÆ½¼{¨tp§C`æ–Øú»i’VqD4- K…ã>9^–\¬¸°½jSºSû•áZÏ¡öòŸoFî¿—o}×}Š)MË* ªÏóA”³Aúäç*$M+Ú— ذ:ŠTjN’Ó®-ZNãa”ZÀ`ÿÂ*#&³aú!C´?X½Àh&hn5UYíºÝÖC±?Ž{‹~0;£áù\'þaíÈ£²£"ÉG2ôÑ(#2±|`e5nÓ?80Øó†'Ö¦zMC;¯^´$qº{ŸËá9°/饠ƒŒmMÝ¥Å÷̾'Sñ¾[À"[ ñÊš¯ÂÇöE4¹½ jZQÍ©Xk” «CŽÝþâ îZx!„ÁoYþ;â;UÑúqü¶Nó\+%T—Ï£ã[ÆE±H(w@Cç\BlÜ >xIÈë¿+J–¦Ô¦ ½ºtÖ®Û?ž•âçÙ·_…jÐÍ÷ .ùŸ=g_•’Íÿ@—ï â0¦BÜ›q(LDjnúÅח¿¢ÂÿЕúÌÀ­í|'ì çPÍäM}Qâo£h¯½‚³u÷¸ÅÁ±b÷84&rrb†TLgVMø-³ÒÅm“W«ê/Ž -‚²(ðFgÿ=?šœcÞSþ7€wÂû.[4ð (—#eöйoŽ[)kýb-)¯º—:âàÞ¾,ø¥+KƒÖ_2†®€9 œÜúO@广hî¦^0³k·{¬Ñ=£¡=0£ƒ!5àøœfw—$Ÿ§bwgõÀ Í:Ü%©ä©Üü‘NþJB…ï’þ«þEvLº—ýËÐ Ëc’êéÞJ÷ô¯tZv$Ø™þÐـ˩°¹ýk,@G(uy8’ÞŸ™®Ü“7iËÊa–Pª•+ר=7©,;ç–j‰ä31ú·¯5E FbMCCxRðÈì2·8ØÎ±†’p_‹éÀ{:‹÷š4?Ò{o–a^oF4´pŒ22ÚÙàÆp_È)éí¢úE*¢ÏÓ6Q™ƒ°uªI²;œ(cQã+ˆkcËÝ0šP5ðÃ,µu0„]KÍ µí§Ú9²ÈG*DáÍL´ÃÅÖ~Æ9W9ùÑ1,3~B×zL¢($߉±=Ùƒeú,4¾p‰[{5¶d—}¸ì¡iŸ(„µ¤¤þÜ–òÔߨešÊnÆ;‡³þwïÉwTž«od†¶­x wpÞ3IxqHæq[Ûcȇ?Byw¹.]×qR l¾¬ÉaøÄa%&Ù¦“.ã<Z){‡kõtõt4îàh|@N:‰®%žpáÝ·3¸I€À-”O4ñpti/ÂýíØÊ~b÷ím‘@HÊ›‰º#…VæÉÇfî%/$½(ƒUöúM»y“ÀDò¤ì÷ŸO¸ÈY;ƒ›¿‘]à*€’›`¢êIéq¥¼£Å»f'‚¾GÛÅ:‘—°tºÌ˜«mÈN?;8O¨ñƒÎ"éU걿ðþ’^gÑ–<æ_ï0+Àãày­™š/[±“ŠcP]LˆêbE\ˆ{Ì«’k¸á ô³BŒ/ Ëòdrb³gá¾,ÃÉ#çÎB[º×ɸbÐâfŒÌNºšpØ`â¶ÅW4qW<{Q•,–z.¡8 @ .áŸ9/£ySô,ñ:ÝX¿É Èö†ªÄ4)‹"}Þ§—€dZÀ3Ú2WuìFdi®3€Þ1Mm68tn¹é_/ ©2×H üTÐ[ñàREŸYÅÁ{üˆ?†‹së!‹üEÅÈvÊ5x.åÝ=;õâ ÿÀ†š—^ Ï[+ƒ§2ÐaCE:+V b©/¹EÆÕÝ\$š—XlQ\Æfj#îvCÐ ãwoo‹ñ]è8)†Ó’ÑT,ì‘ÖêìZÒÝylåH ÅÑtˆ£ÕÌ`ý¤\ÍôJS]%-a,~´Pä`¢ÄµÞ1½m¾÷Èßu/Pl§¬"çm§q=Bd9—‰>#WÕôHjµqÃ`Q…1ÔKp{‘–_ÑšWNkZVö†;{ÛäÝ}-([ÓíÊ2O‹×ã/"åd™™2õ#gWmª4ù))a&‘¼GÖÆÎXå¦î°œý¸zFX_s­šå¿¸ûÔ’Oø%ÊvA鋉©áNÚÁZŒ2‘'žið„áê!|õš5vú~ï6‚Õ†£¢9#~„â.ª­Ñί9Ë~XÃjàžY~+U‰vºñí<«›-sºËZ ¡´uŒÙ`Ýx¥iÙøùñÔ¾ÓÏÅN8ÝK8!C¤ª‹Hn»¢°ò:5JH÷\¯÷Ùž#ŸëàÚCËÉyöô-«•âYvËäÜ;†íHr”ûB^« Å£Q;/ٙ͒š.Æ –®\aèiµÀ2N¶fAnžm!c=ã;çTQ·¸»ô ÷ n˜Þ[tUÓ|e½&‚Çú6¡±÷ø}!0Y°òÛûͦQÃÀÏJmÇ‹á¥UîŒO”ÊkÞbÍÞS÷ÁëðsΩÒ`k5zJþÂ8§c‹¤oÓL‹ˆgidÄXV úèÇO]bkô—£Ÿ@“([åO ®žVÓ,+Z³Æ}X»¾¡ðÞѱ&ûáÞ%Žs§¨vg ÓÊáît!Þ+¨ÕËv¿*þ×fB¼½)ÜíÌ%¬?EE‹·I:u}“Ð’Íäúö ×〘`gº)ñ6ñŒ’³µͺ_ÂazfhàÈô8nû3ƒ§çW±â»UF¼r‰úåöw%D•%Ú¸KÒ’7Ì»#adš‡àW›÷®íaþÝu§ÛÞ©¨»®ïG²Ã±îe‘E|}Q«¯ËãWQÕ…UV`uþ®©ËlhÂÎÑë[vŸ³<³˜{v¹—ä0)Œg˜ò¡YÙ{µn¦åâІª¼­~da4jë˜HÕÈve²Ý´ñEÞ­Emï¼AVØP½A ß÷{ÈÉÁ œ¹#žYņ´:¾ŠãH›]±½ŒÅ\«U?"±ì_ㄦ——,~¡¼þ~•±ˆÒ*34áÿâÆ2º‡rkê8.‰rB!ô€:@Hd#/Í—{|Ay›#M—.gfÉ8EŽ•BPÉTkÚñVŸ”ógiÂÛpu‡„tLïtòIá±OÓ„Î÷[RŠv 5q×%qøÉhýèiEj‘·;!ºBý‰ Y»M\–¹&J(†æsðìUËðl7fd©_ ü §Ÿ±ËôÄM—.ô~Gõ¼m&Žä{Ð'Úrìê#ãe0¶µØÇx²àž”aâ{ŒysÅ­5B€á”ܨúôçm²©×HO)­k‡eƒë˜Ûnå‡$¶ÉB£î½J,ºP ›}ú)§Ó¼W6,i åÇ·Á™ùµ&4vôšØ*™íwš`ñU£Ç¹]›=‘Îà\öy¯\OÜVˆ'O¤½@mm&¤€2ÀdÝUv”UŽ_ó2îç>ß[¨qª˜ÅQèxAØæ@~€%ÐóÆ’ž%n!åú¢ÖµP˜¹lòÂb†`e6•? ~+go£"W0@ª(Wðžž)¹ŸoÓ"ú>úøú¨{Õt0žV%?Jk¾lÿ¥é Ø4ô•ÍOÀ½Ý7¦'ý,L97 (•¥‹ûŒ<‹) Îæ´…ÖGÁÙ½[ÛɉAÓ5ÚºOUÇÂÂÆ;ž×> ÏY€)áŽ~žTXÏåLLbde„DÓVŽÌ‹§õÚî¦4¢vCUås¿s¿Å¦w€­­ó5pá~ŒÀRa‰RCß•ñ "²¨/ɪ9ÌïbrÆIa Õæ}[É™*Õ²ýTKËÙùduÉù¥ùøbºjÇ‘ÿÿSÚŒYã4žý.*•ÊÎçºP åÑ µä=]ÔדÙì² –çç¬ÓZ?²Yéé„à rCÇ«Õ>]AÛÖ –³„#Ú‰èpÒ$(¿˜>qc8ÙwÉ™nnƒâ9¿t:¶ŒÛ<$qŒ‚]‹¢’¯îìb|htvñMû`¨ÄZæø¶÷ígqÿªÕ·ÜRÝ©’®qûr5Ÿ zN ŽÏ–š;Bê#"ó°zÊó+¯ »‡ø*µÖÂ$âÆ ýãÂ%·„´IÚ‹'›#8RË »Íy·D£3‡zÕCÛ]4²v?!—`¬5¬oâ±â´/ú`%õB>ÁoYÂß‹–>[ûKù¢Kž0Wnu$„&ÖWnqYˆIG®çYûi›ÜPÙ¸OW즧p‰—#d9T?â¡`D\a¶‚˜Œ˜TÕî,$ÒjW®4µl.»ÑWÖ½eÂ@ßj³–¶Ç,nèŒ2>zøð£Ÿ'3¬ë€,¸òÿBÏsÿ çç(‹~ƒOBÍ×N°¢÷±-^+ A—t-Ù1Äߌ_Ϻ®QAü¶‘Gû+pŠ‘Û}k$PQ‘þöÝ;¨é küE•ª¨4éJ'iRéMºHï5TD)ÒªôÞA¤×HïDz „„ô‹Ïû>Ï[æÎ;wžßÌýƒÍ·îîgÏÙ³»ç$“û­.X¸+‹LCpjÿöƒ]¢Y‰©›hgCOØ{s•±èúVMÛT•‰/Yjq‹³ÒÊ–ÍIÈ—4ã/_?(€,àÞÐI÷±V±œvHµ÷Çz휯ÞœcîÓ‚®}bÕŒ¿Qš4„ZZ9nZrg·ò®|záÿ(õ\Þ;b‘еèh3ße§5OñO@€ZÆÎÏ•‡÷^8$¬ž†!^>rÐŒ¤¡¹X{,Í ÂÈ…lÔDóoH™;YŸæ¥éÕôŸÜÒ¸Í÷S^<ógµçOÜâ3üv/=é7)瘀LnFægúJOÀ{ßxoý¯ Ñ¦RæQ½q\TŽf^ƒØà”?³ø½?îíåVí”︹6G²‘ÌwúNbx l»÷…ÒØ\;éÎ .S7º %ÍLMjRv©.`fcîo#“ЈA0á+–µ¶Í/ 2‚¸LÐ!›—ÍÁ*çÜñ‰~YfN¦V“•Ö0Í‘,Šˆ,L!á§%u©BIôñ2â6@ä JsÚ4Å…ã*__…‰­>×Ò'xײàLV{ý´É¾Ð Ø*ˆmÏöSK(ºxýzàª%¸Xˆ{z®îyȸD³NL†øvþò~Šç™þl`±xb…Kýxdò¹×¯éö|Ôa ÂʵˉžúÜw™â]Ãe1lœéÊUhåHä71Yâg$¸®YL>H©*qãz/Ö¿™þOEªÞè…'ªWLRÜEP&èE§ù¦s“äaYÀ»Áõ×t°5Ç'Y{_°mÍ_pY$ØÌ~\Èû@η­K¸5™D}O9¸nNÁT[Ã: bŸÞ'ûoÌw²®:oðdÁâ w#øÓO‘îy1æqä¾¶ó";ð¹üt=ײ޼âÐ/?+USn+é>䨉ݘX|^ªÞ+ÖmœÞ.æOûãî VþBjO‚àÅ^¢1ôÇ<Í+D¢Yï§òµ%aXBFUeËGL÷<+’°´q5¡©»é†¥'©¶µª›9†yNÉœÆwRü¶Í´€fJ | Ù»ƒ¨pL ƒäÕûlZï’ÛÅ@Z }ûkÚAKœœ”NQú¿ù™­ÙvIÐîh®€ »iÛÎUÚ¯~ÚöñR+ ¸“Ôéèè8¾Iú=ua¡÷ráFè±åÖ³•#p]®ÌÌ­.æ¦&/Nû‰†„ÌÄþb›+ô>iÖ³;ïˆôÞ®_é}Å5“°¯q¹×‡¼Ê:œ€FÜ, Aáu(Óµ#Ʀ@ÈVÊl»þàÑú‡ *Ò¸œO5òÛÃäêr°ñïÜ!VÚŠŽ°ú™üNœé¾DOEš¢Q!¡¿­î‰ÀÎ>Á€=ÌÃûG*Žßˆüêß xÏ:õgÄûdµq®^Hå(~6´Pþh±Ù|Ǭu%0diöÔNäa×'é¬ ØâÔ‘f•Ø>8P©¼ ¤ÿÕ oXýv–hû|¨ù¼rt Ê6¿ÐÃz´z«¸ÿè”ÕÛ,R/ëÉ\Ÿ²r)D¾ŒŸj×=€”jûñO£v®MöÙzÏn fºtá,•W’áWýœKKfZyÊ~+Þ¿ËO­‘—°œ¦›g«küé¼Wbç‚·wܯ­%˜‘‰pß±Gä…W /3:6-ù$‚†Ð0ìºïEhG˼ d3îW³›!Ÿö~úJgyäå6g) ªˆË¸-›ÙK²îÿË Ô:D§¿+F]JP€oÅVžKŸî ò‰¿Ú`é_çåŒ\{¼e‘8ÜWm±\ÕPŠFÐ6Ж— »‹ ÀÅ7ÞŸé½MŒ°o ¦|#5“³Hã¬ÝwFËGwòÀ˜Ë‹b$橃Վ}uÇiêN°àXÜéúÏàiN¢¿<-Y¤¾Øº=§ÖSoIàç:Ì ¯ÛÒàðXUoO&]*_ÑÚ¦)™Ê ží‡Û÷¡.ÓÕ“Á bâ½ó¥å0ÏòÂ4'_WÖ”D@»pû$eTR6¼…Î, …XoÿsÄ*ÒÍ|kÚ3÷¤Žôý»VJ]kÔϪ9ScæïxRŽ‚*h½JÛõÖÝ/Èôty<8ú°[Zè6lb&ǾSè¾&KËVdlz9](4#õ‘Ä<ÂV /ÏÐÛ)\$4+–ÿ¬EÀ¡Z«(®õ]ÒTv{C"À( uëØ`A^´2£Z €·\}*l]·;•«žyT}JÍ'íÄ£+½çå«€H&y·¯q£ån·©? 8ä¢<ºE²,‡_é-Æx“pë”…mWÁ¿cÒÌ»ÁKÑ‹ÄMŽdPtúc +õþû(h­w4.í­m»EAuUNƒ%aÓ%Ý’Ìø«—ïÚ´¾’*Ê-ŸÍµ¤uÉvbìvC>º%S^ýbÔ ­7—cžúQÜbSvš±ÈÏ’öC^ùðQrû~¨¾’kÙˆ3 ×•ÒåÛ‘ÄëÃ6Ô1¤‡!À‡®ê/\°×+6g ‡¹wëP¾ÌBŽW}Š u:Ô.Öº™ŠDïNE.ôÃ]™Ÿ|”Än»þ0¦šQ5)äøÐoᦹә£Ôx×·gëtvP,!9©¥v$w$rBÑ¥R:lQæûÛû)‹G(ƒMùÿ™[„»ž]O e<ÃE˜ST7_†¶¯.h ì-]{iSSk½ÅÁË•|ð|4²)Vsk»þz“tRl /`ù³±âò—†½¢ù–Mîï9OLlÚ? êÒ¶ Ž?±}k·Áj@+$9.Áo„•{iA ;ù´EòŠóy{¨½xoŠð•I9àjYƪ6å…FÉ a•z¨Ê2“²iµFé/[ૌ:@D¨œ¬‚¦| jNÉÚö¡Ùoêú¨£´ÄÖ»áØLQ¦Ä^0ÿCÔ!/hm¦xóónXjQÍC—‘â  ÉÐDu{ý#ç‚›…n3Ñk‰Ã’mWý:2ôýúÝ`.µÆe¼¸Œ˜dû¤È/avhߎ,QÜKÍ=¨z¼d”ÂIŽ#jš4–›âJ6k¿¾¼Wsyg,ÏE&.¢… ™¼©KcŸ,‡ñè ‚×; ¨@¹]ò5¼w,rÁ.=”Óoÿ·N}F¤JRJ@ØYÌ&è';h/‡9’„nPC"ê«;–"t(2àÜß‹?@ÉÁ{ <>çÊ7R§vãW&K½ãŒûÛËcôK¸ w2H"“Èf_M÷MzurûžüÇÉfm^jnÕv Z–qUÅ¢Jráu‰CVÚQ;uëLP–H¹àL«Yplœ£ÉkoQó´ÌdÚ³ ôϺY3{p\àÇ–Ü2ôpà­ ¶gû‚”Ú —0͘„%¹ñ]Ô»âʰ^™”’kAýÞAFíIÄ'e™Û†‘ÖTšì7îßí÷rih¦ÿËýþïs`Ùùé#8>\óäf芒¾B·¬ÂÞg¹± ˜nvÔP„Á(Æå¯_;6;]a:ÿë-$%¥ã¥è úsoÿyú $·H²,‹ûŽ\öÎ/¡±?ÂuPõ6ðщ*…Œ/ÔýÇkñ<‡ ·ˆX9T…”ý Q]m‚XI†è¶Ÿ’¥”a­õ~ɉÓ;p|–Å tÉê‹[­–ùƒeŽ;-Á×Èâ ­m.„3Ü·±Æ=˜31ðìwJy ýa, SpÁëBcä£ý\kÀû¦"‘K*²­œ*È}ô‡–FVûbË'¬Ó‡›ÙN<"ºê˜ Ò'Øwj/ü¯Ïº{Q–èýÔ~Íó4 &aåQÀ‰›éõ óç3zá¿Ò ¢P1fæÞ ª·²¤k@ª€DÙt/Ò7ôßf2 /¿ù( —7ôòkR ÜâX ²ÈøxØ ü&%ÆÚÐMY—'ðî®æS’É Žåu3 53îcCß—`ôæ>>>ÈÑIÞ«ÜIh´´ÛM [IÚî‚fæÝBØBçfÔêe;¬85Là-’ã6%w=ÉwÛxªA¿$¿l<ÿ6ìÄÚ‡ÂöÑÚ$ÄÍa©²Û+ÛºVz _PZßCÔ¦ûM8{:gÚ†A’Ïèãœß÷‘xôô5¡u›$rú°'Ү闗8¾ßªW™IEU‘dS¾a6š8þi&²Ò¸”Eð0Ú½C¡á ´ÐÁCP÷<ä§-¢+ßfçlc@ÙœeNy¦Æýü6R¶Þ°ìŠº]ÜSWì(0òÍe`TO2Ãר+!¦®Y zùî“‚k·´ “$ʤA>Ÿj(K놟8€ÎríãyÌ Ô!µ¾2øûiXñgpŠ Yέâßj˜ÐîÀ³OŠÍµSBÿÑáݱÈܘWŒ˜GÅÚöØ›ì ºBl;˦ûï[Iþå!ú¬eÄ…ŽqhX:µÁ_]?"w“µf{Hq½ºFN6à2qk¦¿·Ì/òAWäR`Õ–!ñoïÅ—FìOðÚKðú—%!ÕÓbPš”2ËÍÍ‹]mð™o|¹S |׺æ=ÏAArÎ$< sã4Y+{€;‡´1ö¦Ÿ]æ*i÷Ÿº¿H8L#Þ”(Ó›N ?Ò)ÙÓ³÷›æºgAWTÞSß„-w´}RN„ oî:µfᢃwS0CJ Œø@ú}ï«j´?zÀnhÌwÚ°ÓðÖ€]·j„ôLz»']º;9ÔÈÐe ¦äî+"¶“=Ò0ìzÝÐ?}ê¶Ó”ï¤,´yÏ÷¡MBlK›Aϵ’mxVý‹¡1¼È‘ìu}&a‡”ë/–u|,Ó÷<ëS¢nšœ²;í³X¼xKí$¯Ô—vÜÞ¶Ú#]®â …ƒ¬¿È±°1 ¤{¹­PžUýÎ mò#PBÂÍFM6ÃHZíç¨d«ÁÝm;æ;ÕyÉ‚Z¾¶ NWýGÛK¯©a±B€÷ >!G‚)N(Å nÔ0ÈŸâ¨c“é°Iˆü¡˜N`wIˆªÅ™ð’à*€‡eSÔ 猅iÀª|:Œªði$¤F4߉ÀCho’_„Q`©]É@IYù˜]û?'Àú‚9ÐHú‡zîçÁi..ZØò)“f"çФìòL…űkÛæ(ÿñÒV\°ª!lwv’LåÝ2ªe©”l…xºÍ@ƒ!t^ë¾È;þ òc/œ1#Âiœól¯¼ä67›îo"j`°—z-Ô6’ç0w_°l ˆE·èá>ˆ{`™å©Æ!bÜMô“nžúæxíÏ´h§¯aù”î3ÔíÞÊ+º%õ‡ …È#>+b„·[ˆè…ãýKÛ-LâµrD]/ž¥¢s´´]Œ©\‰¾$ß1@剬øK?yþÊ 6€Z i–¸ÍèúÅË\Ê@&ÆuÎÜ=šå‘•Öæg¿€8åÿkÃŒXB(ßbP/BÕÚcáTx%ÐQîðÒ >ÖzzÎÝ_ºÉ¢¬zl:™RƒÛ€qÔ¾Ý ¡W×p£Eß`:ku0ÒCå æò´ûÙ“€ÖýGt¬Œz¨YÕ±,ßÛ½–L´Ã¶æÜåb¯à+ #bÕŽU2†–É굡€43«ãò :ºõú8Ž›P‰î…-àÈõ9”^Ãçú6³NTÛôÌ ~ö`]sfgKi𩤏¢Ó~ò´[¦6AMåUótæ´±˜oén{äÇ–Ÿµ¹Þæv7ôú¨¤¡×}=(YâÆþhêeW­•KëÅ+~=# Ëf§&Æ%Dƒ‡¶™§»•T¼q*aí5|À§ëp›ý’ç¥OÕ²t¹í0U…_—ƒîMEÀ=ñüʶû“&´µªÝÇ–gZMÙ@àsu²PŽ /=£–9#ñUɳñ«¼ù –39Uí–åÛåûžs ®L !Zè#¿îb{RÔ¼99Õ«/:ë!m-´—K!6c?Øh³°(6F$žÉ’SX¬G Øç¶®yåÜ„Œ¤¾Ôs/Ì'bÉ‚œÊ•‰çPiýÅ!©íê{šº ʈÓFø/,±bÂÕi¨ÚlF+Uè¯ÊoË—[ɆdÏ^ í!x`…ßoŒY´’=‚m·›©#Îìã9ü‹2¡»½M§8æ1+ÁBËoÝ1­ì úvÓÉVƒÔÈôÛÊ‘8b‚CÎéÅ}¨¿|ÄŸYŸ–({nâ\Sao¯ãti]¢>E7g…Î{h{éuÜâfêžé'³P«Ár»©²ú¼ý*Á¬Ì©}Lã¿Å,Uê?ù¨9{ë†lÁ™svG#Æ7¾MоPÛ¢˜ 52õEë®d‡¬Ø•SPžS ̤ÙðÛ.¯¼>%'»Ž |SÏí~=î®Î®²æƒ‚,<ÿÙ®á -Äš+_ÓË-¿˜Ô¾)¡UxMù[à VüÃ/¹ì^½üN µ‘‘XËx‹A½F_Ybž±êç?åû:ƒÉ.É«}?<8ø4ÒaHzU‰·ºÍ.¹¸Sg>Íö†TºÖ¹gÔâ]ö´Ù.Ýù:þqp×+ë¥=x{ÓÞ¡’Ê·.yQ”®È%è3Ô[iɪª¥øFÅ.ãX€TåÔv}®À®èÓnéó²{7[Ú•Ë®•Úç­êç ¡æd=ìth¥3˜t.ðŒÇªžúÚ.T%ÐÁø£Ìò;òò5âÓD‡¸NtnÜt¯Êæ±O–‘û•{jwýgûéÀe$èà8®åCÈ*ÕQ@ª²õ}#VÅnì‚Á£_j§ÂvùAûæ‚WvuÎs8±m¨Ú Ú‚n¶‘`ˆ[!Ú-‡Ë¿E±Ôf1åﺹáB®¶«Ç”áce#ʦ›ö뢳 /¦q$uW€Å­ ´)mgÍeˆÏ¦wC‡Í*ru©ç‰Fx§mu[–Ðþ•ó]Bòÿ‚arœ„ç(™qæõûî»ç×°òs‰Û­ÄQ¿?h¾*¯ª¦ŸÔ†²G±(ño­ôåŒ>Pc¬`Z£°¤ƒRéÇ"t‹Y¯ð몰Él®Þ2›þ@°–ÜX€,:€m¯é¬ü—íÅ:ÆyÛê.XkKd!Þð;p¹‡…®ÙöxSœÿ«Ïé?,ý˜Ž=íYÖ¹Kµ æ²*ÄmˆÓa\âÛK‚챸ÆÒbôs2_ýÌFçàŸ¥ †¸ýÖô{ÎÖ»‡‹D.”5Øîk©½8ÝÒg² Û¾ ¶>z|˜Òw úÂó]™> GWNžZBõÎ"¦dìæL€2hç2Úœ£@¡„˜ÝÊÉÚ§Ÿß£x¥o*¿`¥”唸 ™Ao†°1­Gï ÒV¿¡Pzi‡d/^,®u× .åE~öÉ|aÒóÇD «ä+-…Œ÷‡z*Xå´Ñ~o{Ú¼°œ¥îÅ})_ís¦Ðú¢lôÄ׈!ùc•°À9+nù®ý4>i-¡u>û›¼ç£ý;S_êùR™º3ôšÝ\#ñ…gpc¡â8˜»DÝØy²SN±À¥'"£È‡æwvŒ‡–,%’®\›8¯bÛöŠb¨:ÛI¶©˜ôŒXô  lJѺŠ}dYOÓ³€?3Êâ2D²‰õËbA°ü è˜7W9¡~ZâW·…òzÂî÷…Åÿ1fQv.0}<ê9ûŒî¾þºåßz†æLà…¸_%ÿM!nz”ë–蕳ÿã7š@É#[y—'³•vGétô>ñË•ƒÊwjá‚ùIÏ5ùÿÈÓ8޲µå¬[Å™¢MdÚ°Ò7€.ºI!¼©Á;tзÓ`JÈ  (3sìí”—b¨D"QDÓ·$˜Ku"Â~SÓ@è7­kn™`Œ_‡oÄdÂËH«Iºïtu ¡ÚWçæ0Ïè`@LÓ;/ÚÈÉŠ$%­|µöT¹¨Q°†"^™CøÜŸ¬–Óµ’,¦+!iê&œh[—ƒfЙ&lOš_´ãê2ðԽؠ€\¯6H)ƒ»el9«N‚r Jµ¤$Xâ@€D§1HS•’ýhuZ£nË ÚšGÛÆ;÷{_ <ÃI_,ñ”càEŽÔ²=M.®)¼ 7§ý*™¥=uŒNuß@âÝÂv*­±[Û˜Ö©ŸXð€t2°7cðåÞ \1Š)îk))Ndß[ Ñ‹¬¯hÄÖÎâô¦Þ’‚‚ûöåÇí†6$7ìÒÜðrëåsÔü*½¶Ó_\‰ÁÁ¸G;wÉ?ˆgœF Ö˜©Žò=wÑw†-Ûî)l’Êÿ1Rý”9ä°Ê^?•´ÅRa bns&à&¬j±µÀ™‰ô~—á OcT+Oû:œ¤å|»$sàÌ7(³©NZknOZZú2ý T¯ýþ®Ë°“áZ{4¹jÈc5%ÎÄþ”h¸ÞÅYÊ8^N –¹_á_}¿e^v0m+Ê7îÐa*Ðô<';Õª-èjÔ‹¹od™ËYØt§‘Òº›/ÍÝMqqÏ¥ÀLÙê€mαF- ½Bë<%¥€†"Û)¶–ÔúÛ¸ÛW‚oúÕÔÌÜš­§^SÊ%'PÕíê °›zŒ¥Äû-g¶ÞŒ=’ ö_ }ÝJÈL >uô¢£T¯k CTŒ®áªÞYq!eu{`¸:?ôY¼ˆØ”X¨ø—QÈô{ès‘Ÿ7¤ŽâhØÆÛ®x»âÀ\Þ^qèT*|ç€ï¸H­‡ÛR`r˜ÐϾB‡ûü ·íåë ŽÄšoÔ­’e‘Ö=Ë6ÈšGÁYG8¾¸ä·`çýÛ®¼®Ù>j®8ô@¸/ÔlФi²‰5V]Ð.GN“g‰é?¿l&[O¼mÌ#J!Ñ£R7`8¤Zà¡èœ"ü£6Û5à$¹W«õÊ©UQ¡ ÓþŸò‹§rWÿí)An•+2%öõ¬\l& ­þ-Bùÿ¦EhêÓÛ—Ìïõè<¯Òy^aõ¼ò÷¢²%üR}Ámjôd¸r†.që©Ëˆþç»ÿ+sz²#ÛPºH™ÁZ\{“.ÎÝbÚ›½×;½ ¶}ƒü7Ñê{}°JÞ²W”Ü郪²MU[û•jÁ“Rí”O»Vu[Á†2[PDPˆØ3ÛÞd9NônCYQ§‘¡sÀém*È~>hw5_G& áíäörç4®§X6éOÌT„rL;ÿ«Sܹÿ×ò)/âKžÏ 8ÐМËû/õ¶ýü7©w6øY’{ϾúEšü+M,ZòT2<’T~î0svÚìlžÍ¬q‚Z:"èÌ)ýs·ºÃγ¼5âã¬ÏütìŒÞøyþçün27¬­ÁäëCq̽•áù‘Y°L…mkºµà%œ÷†3Ö,t—n1"Þ?ü".M¿GAÈôŒ “,@%{WŽfµt8sBußß¾»&SƒC©R[Ý"3òËBô+Œ|^û2UÞP‰Í ='Ÿó`ôñò„»[ð=j4úÈÁN<…"û]^­—¿+N–ƒÀJ9®ï„.ÄlNk3$ :6i÷삜:Ng=c­ùOI<¯Ü¾(¹ÅõißrúŽÇÊÀ|ÞïA¬ò­6e%´ó6üÂ,œ$Yi×BߟúÕ{”µÕb;¢+“þþËtxëÆù,Ê]œ"¯/5Cä¶ôZÊÛ‘Gاë<6MQ¾ŒyôêÃèyŽËŒIUÛÚù½&ðœºâ½æ"‘‰ªß¹Yd>D§wQ²M¼YKL<^Û-õåîŠ4ubE¶ä¿Ⳏ°šN 9ã¦Æ^×~9æqaYè¤ËL738Í8Hö©¡5à=mµ×GÆás½—Üâ« Î%\‹jV`É)2 ï»SŸ]©^O쮯ÃÁU\¾}û3Uü¨T"Ê(!…^^âÙûõá§ ¯EéÊX×Q¿+PÝ ¼^§èÀ²Ý §£—·ÿ<7úµõ­ ¹´ýcNLÏ6ÏÑG·pþÁ•·K.<¯=˜®6ìž"»îê˜ÿšþyó6ú£NqóýÆX ÍôØÆ¶;üCTÈQÎÿO öv_fÒ÷Æï!ÎÖ›gSŸ Tb2Ž –õ}åLqŠgóB%ªàçÀrÏÙoq è¤é¼¹<Ê1Í{3Š”Ÿöu3,ÆÃD7n[µm 7澿èƒnqzs';‰ö:)~ËI%Ì8k`‡©+åÎ-æØ¸ïÎÿh§ÆõvÌ1cúZ¢úâÞ>¸Qr1Ü%*ŒýC¸KÖÛ‰o÷±õ§ú ¿q4¿.yù«£Ì³Ûáêñ‹‡ péä^¼@žÛ–q¾ˆ|MõWS:öð†tyîÛ<$·w¥NŠ-7Îê?ûF¶«¦~üøø£ ûìS3ËÁô¹!x¡Á‚M-®Î°¡q– •¼L óó__2ÚeIyÅÚáD_syøaß9÷†ÿ­îxÇ™]Ñ©Ž:·õ¶šš1ôž‡SÃ~Ï—ÐåÕ B›\¡ÿŽÀu¡‘‘Ò¸‹÷dÀ—à˱±BÀv3mîL{ëåuª9µS-Ñò ‰ê$ð\ÈÈDhšP’?ºÍBK[¥6?Y iïþž[ªw’ߊ‘%3òN^8Ì0"NHf»]Ü«`;VYôFàž2ÿ®ü øÃ­héß²ÑxÞ°ÖÙárœÉt$4óÙ¤Íà¦1üë%àAudK‹g‚þ%R?¬u~ž‡wø:ÃCg3“Ò±ðî¸juø‡Æ÷Ó¾\]§öaUTªAÎîÛÙ¸JàÕÿÃÉ"½©¢ÎþªNCs}ù_ûU×ñvCûoد2‹ë2©ý5 žF©Ü©|r—éãñ‰_¿àIÝ*b)±yô9yñí$ úö2|èf|™sÖ¨<2Vßråì•­#T9¬]5z„[*À ƒÕw¥Ž¥ò ¦â˜lùÔQBqÌ0y=·–ºÀ*ˆì»—Ït×Q¸3—þXc„8Kx.”34ûú2^ZSçöðgÓrª ¼TÙ¹–ChCÚkóÑuõˆíföf9‚x®½±OaÓªßÒÇßàÍšyÓ®¢$ãÁçö‘é´C…ÚÕ`H©êc˜7V,ú;»ò$í]þD†ÊO’  ‚% ÅûqÑ4:ô Wãçƒ{"EîÓÖ«ÜùlOh1êBx¡» £=D*Ó BN0Ä;RùvIý›RÏžûմͽy^|9iÁ–ë4G™-ÖÉA¸òž^Txù–vz j,%Óçjô^{`ÄWèd¯ld D¶¹5YÙsäŒo³–‡­úæŒLz²éÞ¶%|Öyfù$„Ëç½/É|MpàáÕ¤&†Ü2PzkfŠö×\¼±6. ÆÛx W¼-uMZÙ„^v€4g¢‘°9§Dc±2± ÜWýç%÷PÍ— Þ ±÷§ò„5Î}¾y…úˈÒ°Ú3É~Üúü ÖK@|CKO‡šANš ËÇz×ÝùÆUÌo|<‰$þ+ ¼qË)%Ë_ U»·£‡„'N«†N93ÍÞmY—_]·1ZP¾97zï•Æí>!»FuŽð,·vÁ÷Ië¶tÏSæÁC ôstËÙ€XHöiôû7 r% Fúë…GÄ^ÈÙÆ¦Ïž†ƒ£ k 7f~PÄ1q\A³´ðÅ #(ËÝ nf¯;†‡…,ѵ±z1¶äütöBÉÄý÷{ÍãžwQËÛ2Zâ0Ê[‡=Lžíêˆõݺ¨¾hšaSž‘"ß+·.~djTSøš=’¤`.áâ¸xWóç•enIʱ”Wªƒ »¶Lª8µáï†D¿­ÊÉæ\¹Ð¾æy00‘|®†²Íÿˆð£ÙJ~õd,>!T.ÕçØJâa-†išdþ¶‰·n~Ø^#¨(Ь÷.í¨ªº`^¶Ç¶H[=µJÿQѼ؟b®Ä^?M •×E"ZWòFÝÀ.)2g®â/æê?+Ùýóf(hðFàÎJy{Ôï<©EZÅרÇç‰müraGƒþgŒg€ªóÚók»k(NæÌ7)ërå‹«ç÷ÏY_"MþþÄ®µæÑÆ«áþì÷AßiUQaèÓ—yx»p›ùÛw•¿9«…¥YB¸ïÖ_»ý@V†}eBfÛÒÔÓÐéi¤úþF›Ê$×ÙûÏö‚ÏœÆ÷…ã»AŸ} üaÉý[OûZË⥋` ,V6Å_•ûˆ¢ÌØm>dOÝÚoʾœ|‹Æ\4T:G§“-ÿèØ|Ÿ]ý 7ˆ’'È ÇL=SLû‰wÛûv_¨ÌXÜÔ¤"™©eZAÖ¤gøÄ.™!“šhÆ~~†&PJ;{û›l[zqŠcä ;jZËÎ*![=NRÿÊ–˜$²+Îî&"hcó[pŸhå.!ªñ¡ ©Ð#‚¤J»‚%1ú Ùg¦Òr‚3›’líc^ïÖû¡&-<×b|Æš¸6ò†&÷°ñ‘ïywº7v/µ‰ÎÆj-À›8í>É^I«úì‚—üº“þÖ¬¸ÙDG7¾áÍCÂpvXêiúuc/^8÷³AíëeU²¶‹ºûtµš#ý¨+c÷ÛPÍ(ɱȿUMÚä$6í$¸mZ<ßÖ !áð{Ôû&,§ Nn÷Ù‚ŒÓb®Ò‘?èl: ]‹hÓËŽz²¥øí|‰‚håsÀ*½„YkEEG®YÅ  <¯ö°pUMú]ìñšÓ~¦5ÅÉza97ífäaÌeºèu‚`a zk°‰!r½äó¶g£±)3áª?§×œ-(ÄiÅIêqbï'ÞO§7˜‹ºüQF)Ïxíàͽh™%+* ì•ç(¹ó‡ý©w!ßÓ»Î2äwGŠgëŸoµ´é¸ˆJ¸}cž·úkÚûWyìòK(©3JV(îâØJ«eAÂ0Ð@ÞQÿ™aË¢sõY KG\œ±þQCìãtø+Î1E÷™ŸØdrð ÊôGÙÂ^DBáÏ@ÁƒÏ´¶5æ¦^†— klLh›˜íŠ*ò06ÿæ[Ц{{h¤¥<•Xól\?­L¥Xà}3c*^hQ´ªêʵsBÂnð}q/ÈúóA»Ç§/!s©„ýâYÆÆË¹Cè`¤ÉM6v{­z8éaRŸ±«|)¢ŸóݰÏýhãäóÝ¢"•¬\lÚ`‡&eKAãÝê]¦]$°ààÙ©†ü±sy*¾Ìä)VãhfŒ_ª‘í{çÂü ¿Ÿ>ä—ë“ –Ô~Qö‚T% ¾uvÍO\U*½«G¤á–ƒÏõZÛoYûaêÄê¥zAu^®+·¶8K¨eý¢oYÃGäPc…ïÂV1ª§NÓŠ-€©÷X¤£JPb#HbÅ(àý×bï*°É¹Í%—ÊÁAû³Qé}v'¸qt6õNH ’~JëÚµïõPðµG›ÂQdøpèZ ÂžbS§¼óË*U®žWNW;­ž'ü–¯TÞ`Ì Kíšao¶º;BO âÀú(èSè0aaíØQ#Ø)‡v,ÕÛ£.Ke}¹G7ItJÕ^ Q·æBbýB=Š9ÿzwÔ,¿†º]S9Çcfltv~ÏxlL­úizÊw)é 2'÷w¢vîE*d~œô J$8¢„LhÍ4µdZ«ýÂάígæn¿ ®ã×;¶þó1””ŒuäÓh¤æÜPrT åálP êçqÒ{u®ì/W¹NIªœRõ´?ª=òi!°_¼:pêû‚•ã)I5UÙ{:0£DxÓµ¤«³Ö¢o7ovjŸ¬60MïTR2ž†×ôü´JÔô _zÛîR· ±…LºÎ+¯QÒRlÐê‘¶ ¯¿ñÌœˆ i “ㆽWF¯(î[XV€ÎYܤ…2“zôÝÂo¬ß–S2èÿ½ËÙf‚J{‚½äþÚãìÞ9àzÝz¡©“Q‚>†º/åŽæêÍYV_½Ø®%y¦×.o¸¥i$Žîû…·õ¯ø¬Ü¼C!±³GˆäÃyÂv¢xùSI>ž9Î𜣹ÎùgµY}?{òRÇEº±ï~ù垈»uºæ©3ÊêSSÕ‘YìZeré…]l„dF:Æ;¿BLàZÉå¤ñ5ëÇ«_ûæ×ÒŽâduŸÜ·ïbZk ’?"Õ*Ø<6µe6mµ¬:”£¾mðÎïØMUëñ&—Üð{ò-kœïx‡Ä8űDG¡pyൕ} (õ\ΊþþÕ-9cJ]o—‰ÒŒ?,Ûê ^z) ]·üýš²ËBrtÔ›ßH^[¦! ,ˆJ°² Í!³ío#/äxóÌe;W¢é>ºÇãǤts2^"²"¿>”êö(t=Në6úܹpz…lXB:^±öâ¡Ðeèynº™8‘3¨™W—5wf£xggšê՗ƹ˜ E‡·f]›_´Oj˜½ê~MúÂÕ"÷Ž×Tý|¢\ÿ±í2›·ÝX$ ®Öb²Ë¤¬é=v{ÕN”ÉÑL :!6*yyJT&IîŠh¯Eö?Ü&M×m;¢&½p¬“rùí¹WÁb…åã³RwV‹èU^XF‡ïúdôüU¢¡¦€ ­wÔ»Ÿ\û·&Æ-è¥÷$عngˆ*±¨ù¨XPÊ&«W}>òî¯àùSù:¿»JTînéE‹²GLTèb×{ÛÚÉõ>qYc_S—Ó˜ Ÿ¿I[†ëN¾¡[¶—ô 31Z,&ñbOÍ\y6VBMQZãŽKK–Œ'R›RNƒtcœ­§¢_‘1ë‘Å› ‚Ö¨K˜p…Šì^Ö>zeûyõÆDØŠ ½Þõ/‘sUžÙDBÊjJòXÓóó7Är  ®^˜KYÄ'X‚íö‹¦$¸¶ò‘"Æ(C“ÖSãäA,òE¯¸ÿûx­]r}ËOîrã ­»šyÕýÈ‚P{CãÛ{’g51… Š6/?œ™³¼zCVË9ݱ‰6g@áo”§,ÍV]:k‘¿à_ÎÕâzx&u7*ëgJ*Wj‘³7^íÅ-h™×v¢á):R2òo¤àIx›×J|× Xr »¹¨öÓ™MÝ`Ï{'PLÐ-%ƒC €¹xól™5ct`!挿L d}PÛßÐøn„Ĺ´‘&96•ÊÜï믒/]û|܈?¯œ­éif†ÔÉò%ÏIélÅ® ¬yS’U8`Ëü…r>2ùsÆÇD{ûëràqâ¸þRRGá'Ò,8:î•È2¦z¶%;Tg®üü Œ+¿¾ZÅòÌsQô߯,®ØÎÁ¶XÌ{®ŒcÙÎ#jºè>jÏb-m±}ÅD¨Ë)}FAèsZ}qò/Æ‘­»Io]êS¨ñº‰Bfû‘Ðtÿ-ç„sfæIw_°]É;õüOuZMë¤Ê ‡ù™¯¸–Î¥*ú!@‹êøÎǯø‡þ’°r‹ØA‹q¸]8?Bs¤×'¤N µpÍɽ½_â8—å(+åõækv,B¶¤ðÖrà€šLJ–äí\|q¶”C<Øú çe‚P3ËãvCÉMŒ'u~‰ˆÃò´Ÿùòê³À°³é<Ÿ@µ4øX³¢]ÙÍ ËG³è¾^–€®ˆÈ}&ˆãÝsùÞ×ÎË´]HZû2}œüwO…[ŽÔÞ‡'ÿÒ¶8ާ¸n·º*¥£”+ˤ­Äin-×øñmO\ršyõ[lÛàÇÊ8:ѳt ꢖ(>JÕ×Ϊo[FMM± Ë”ì£YFκ*õ}bµ‘MÑÇÊ+a§ŒÅîÎ.):.|LÙ_½ðê“T0k„éò±ù¼W!nñè°Z_ˆs½¤Ñ’’6ãýœN¥5m{ØOxÏN7痩ͬ$Ë xeR"n|(† ‚<û뫽„µ`V^¸•Ï c¶È›fýîB;h~¿jú¾b£´^Ó{!YÏ÷B8œÖ»{[¡î¦ø¬ëü_£ûÕeMÑg¶LGUþjß)öóÃÊA.2†—2Îø:8,Ñfs¿OÇç»%“Qšð’ÑîÉ›HI¨y{výw]–‚nðòUáÔÃôÒ lF¤J¢‹BÃçsñËzlÃYJOÔNG^} Ù1P\š¨Ýý;)íÜAϺ‚·Œ¸Cyã.lË^ìÿ™m.ðÚÐîÿ€E¹¼1âìv3º>ÙzÚ8@9ì·©ûö_§KÁèù¹í©”Öý-/jiƒ&`U]Û ­›óo…G€nänÓIZÑξ3êkÜm7uq™ã8¢j¦2‡¦úcZHƽê´.ÅÊL<ŽlàO ”-zIêð±:¾~ kUw˜÷‹eÚe™Ôd<λƒ°2þÿs:ÿÓšÇi;_ŬÓÓЈ_szaìcüT[ÖÖÝUØÚÎÝÆ^8ÀÕãß[Ë<¬mí}¸mìÜî šÛïp;Ù)Ü1zôTô©‡²ý+§'A^öúA:/lƒœmeìîådpµ÷±æpuqó– P¸óve¯ÿ>¹Ãý">Î w”þ¾à6~úŒ[ÙÝËžû¡°˜­¨ÄCÂâRâ2R’¸õ­}¸5­Ý¸Å¥¸ÅEEâ²RÇ™û?ÓÀÅ㣼—ƒìsµÿdß)Üyåãã!+"âïï/ì/!ìîå("&###"*."..t\BÈ;ÐÍÇ:@ÈÍ›ç?ùg;*öÞ¶^N>NînÜï­mÜ}}îܹÈýßÒ gíñ/›÷*ðX•"Ç/DÄ„EEþÕò߯Ê*{Ù[û¸{½pwwü‡øjN^öþî^ÎÞÜÊúò"ÿ»Ðÿ]}{•ãàX2BÇY\ô…¨”ì£G²bR¦ÿ­þú_ÕŸºÛ99þÏêâ/ÄDeÅ¥dÅ¥ÿ³ú+ôO½ˆü/ÅüU˜í¿ôåáëåòa±³±w±wµwóñ>Ö™ØÿÔ™­¬ƒ»—«µÀÉÕÚÑ^ÄÃÍQ^ä¿þ?öï?ž›Å±YŠüË.ÿ£[ÿ§Ò är9œ@N 'È är9œ@N 'È är9œ@N 'È är9œ@N 'È är9œ@N 'È är9œ@N ÿfÈÅÿú§‡½›Âÿ;@€‹¡™* ݺ†ŠÒ ãˆÚ3‚£Üì¿*,²*üînŠÔã%î«,WxlÓŠTµ¨¿<{*G¤•·´nF&ðó¸öNM¥ž+¥YóqÍ=VºbÇÍdó¤õîä§3LwRR>Þµ|"Ìú¹yu×+¸¾žlËø>åÍ$jhdwh÷€‚8‚E`<ëM#‡}ãK{./¬rsÜ#lwG…ÜwtȧE ø4·M·SËzñýåXájíBµýÛÆÿ±Ì¯KÉ—4ƒÀ—‡’ìMHJ´òÆt0ú­:põU±\¶æ°éø\d¿A\¿öè‡É—.zM¨xM§ÿÙs€O;¡,8¨@tEÍØÓ½d“óNpt‰Çp[[hC ‘×$)ålÀnRRòã0ÍXŒÆû¥ñ-µOŢ竈öÚˆeÜÕ¸ÃMƒ¤aVµ7át]Ïh,hx:ã©?òa£@nåäþ7剗ò6 a³QÑ4eOË­¨®ÐÆ#nï ÓŸ =Ì\9m1Ý ïvzH#ìÒÄÌL*¸Ê³ýŽÂP®¾{Ì¡÷îÿ:.Ýö úg 333}üï|qÇÙÏŒÁÀ7¤Ø×è:î¦Ò\å «­^ñõü)¥ºHùRyk½Öø:³^²ò¾x&Òzîám†"d\͇2ój4ïï4ko·4;MŽå‡­jŸ —ï—&¦9åi˜')ÕFÖ½;‡ˆ?.ÝÂ5s{›(ådâäêTYc¸úíIjØèÇË÷XÎÌ),µÜf $|<ÇÉþ1¶$õºaÖÛ•kÍË"¯fÅ˧L›Ç€0ÆRîÆ¼'zz ¿hù~œQ£yŸØ#ÿ•ïÖ•${™3ôþ‡2Ä&]Ï‘-à_PÀûi«Ú—+\½æ ØÒé{ÀJ±@¤–çû™Ó™gB¢¿é˜,Î,³í!±wâ)—ÙŠ½ôhw­Å²É§i ²DÍ÷x½«€"©eOË‚ƒÂÁÕÞ /øAú›.K/;¸“+¾Ø`cKË"ç®]oŽÞ®F£ô躨ÆÉ)´òóÿX/ÿ©ÇSœ < ª·´öö>-<³þ϶Üm%#ËF Tí« æWäw'Ì ¿&jAO‡§aFûŒ÷€ÐÛŠ"¥nÙò{çîÝë²¼^L‹îíe§Û=âX´¨#S×ýfQŒ¢ë œ=s$ÝdÒü‘ˆ,×ÕUƒ‚ø3 Ô<[ÓÝêh- ߆XR-&l ë° ÷¼¾y½üè£ÎÒÎÎ7òöï/µõõ$Õ š±q³™³ŽÏ) p¶c ‚€bÓ4Z€A“ý'éb;]dãÕ®B0Ð %’’ T¸÷ît¹J횆 ÐãqôññsõXÅÎ9;¿G'0?œ¼B½m»(ªíŸK)ž”f‡èxZÔ^J¨‰™€ ƾGkÀêGÀò^(ôN¶ÃÑÓ:6ö»c±¼B jM&UÅIÁ`¾ †Ñ…Uì´(F;òò\ÓŽfáÖ[o06eÀÀa¸>§F*v‚¦is«z{×–Ëæ€ ÛìöŽ¡Ù³ÿ Ñ)‚ðbé@èt]'™¿V`zò~~>k%8|Nò³üþûæú|OäD"å_gfï--Ý ´g®Œl ×s:–eÙŒ%%ÕÇoó¦§w•”lE¾[ׄ0N?³€ŒpèP%p-vþ Ž{jãú¯IEND®B`‚PKB—|7å$jä’% Client_A4AFNoNeededPartsQueueFull.pngPKL´$7ÿñù@ùô ÕClient_aMule.pngPK²°&7ÃáórLG üClient_BadGuy.pngPK# 7D5ÂC> w Client_CommentOnly.pngPK {7°½W½ î Client_Connecting.pngPK+§47Åc_°or ãClient_CreditsGrey.pngPKKŸ47ì6áÇ\^ †Client_CreditsYellow.pngPK"~7À†./* Client_eDonkeyHybrid.pngPKø£ 7ëP…ÇOJ }Client_eMule.pngPK…›47½ç†ÓÝ úClient_Encrypted.pngPKjª7,.k´¯ª ÿClient_ExcellentRatingOnFile.pngPK©7¶Sµ•JN ìClient_ExtendedProtocol.pngPKÁ“7ó•=!ÔÏ oClient_FairRatingOnFile.pngPKaTp7ôjto | Client_Fastweb.pngPKò±7ÑÎ>• #Client_Friend.pngPK"“7&Êóû h&Client_GoodRatingOnFile.pngPK“7¹Ñw›ÖÑ ¡)Client_InvalidRatingOnFile.pngPKò¶7v“êí­ª ³-Client_lphant.pngPK’¤¥6é€lÜþù /Client_mlDonkey.pngPKã«&7‚ÞaE–‘ ¾3Client_OnQueue.pngPK\®7ƒV| „7Client_PoorRatingOnFile.pngPK̪7™[štv ×;Client_SecIdent.pngPKF¡¥6†’Eþ4/ |=Client_Shareaza.pngPKôi7žÉ½!oj á@Client_StatusUnknown.pngPK9zp7:N¼=8 †DClient_Transfer.pngPK77[Ö{ÑYT ôGClient_Unknown.pngPKHi7@~ñ `[ }KClient_Upload.pngPK{u27áïî94 OClient_xMule.pngPK\a;76yÌÇ sQToolbar_About.pngPKË©&7XàÎíid niToolbar_Blink.pngPK¡i6;`ÿõõ9ƒ3» pToolbar_Connect.pngPK–i6;0{Šô{3½ póToolbar_Connecting.pngPKi6;L¦?lô„¤¼ ˜oToolbar_Disconnect.pngPK!Z;´öFn?: ÀôToolbar_Import.pngPKaf6;J7 Û¨ £  /Toolbar_Irc.pngPK\f.9ãŸÞ³‚͸ Toolbar_Messages.pngPKÔi6;þ¤Þ! À«ø é”Toolbar_Network.pngPK£e6;lj)|[ˆ ½ #UToolbar_Prefs.pngPKd6;ϸ)q§{?° ­ÝToolbar_Search.pngPK|o;«æqgt^wîÌõ+ÔZí3¨ö=çžsöÚ{¯½Ž@àF#F­V_ÑétúÜÜ\‘f1??_,((‹ŠŠÄââb±´´T¯Õj¯ð»'~ü›<>>>àñz}r À<²Ì\ÛØÜd’ÓÉl’Ĭv;[·ÙغÅâ3,ù(°pzÜh¤þý‹°,cÛçÃÍŒfÅí†G’àX]…ea¿¢€@¹¯˜˜XFÊ¿ÃC̵¶âãµkøÚ؈¹–,tua‘ì'­¿55áÓõ똺s«kk°X­JJJJ™““£nm…ö(âPEËËaº{7obòÖ-L‘}ihÀÔíÛ««ÃHU–gf`±ÛC%%%z úc!§o²³ñþêU^ <ÓÓ­©ÁXm-ÇÆàñ¡¾ou:,Ó™¸áÄ yyy¢ˆó[­xvþ<:Éúú" 6r\ìïG`STÊ«ÔTt'%aÕd‚Ãåb¼;ogÝM$½ÐjÑB¹Gf&>öˆØIƒOÂsï:wÖ¹9lP—x‹þqy½L2›#èmä|ŸÌÔÑ8 ›}òOÏžE§ZGäøõ . Êu"ŠN·›­1OÐ¥Ñà3EÜ#Ç¥Þ^ü¦r8ˆ©»mäÜ ×Ò<ŠÂxö'¾±Á~ÿ‰ò®²ÎüèéAç™3èP©`¦uèà//^„²ó®¬@W¬À[as:CóxH‡Üz‰éNãëÇ{—.Eøá ®„B!Ð \ \+DâëË—a [éR[TÚ):Ï ýhσáêjìÿùŸ,+¦ìDÊ õy…6?9 ^Žev'‹ê• ..NÏïûý˜æzsé&-IEND®B`‚PKL´$7ÿñù@ùôClient_aMule.pngô ý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME×PöÀ<IDAT8Ë…‘KHTaÇßwï˜£ÎØd*Vd> Ëhу "£E­¢—¥QAÙ ‚jÑ2¸*ÈEQ‹¢pÑ" zYÙB-1Ÿ•ïÌ\çÎý¾95â‡ÿÿ9BkM°Â¨šLCÞ¹ê|Í]·?¸?ý˜«ÔCJ¿†µ®«šÎ4Ojþ‘ÐúϬvŸ¡MÃЮ"¬”{Èôø—)­-!„£µ.?~{| $ãÖ”(-£ëË÷¤¦ú3nÆœP²!åA)DU’G+ŒÂ`…‘7£ƒ¸ _ ;²$¿ØÛÞö2¦Ý˜4¤)…'YgäF'GEÄúÙª‡jÿâ xe9Ùìp„¡¡z{ºHõz+dy¦×õ2Q®¼¥«tq¶ ] `Zø ‹¢‚/âwTÓ45 Ç ðM^¹¯öÜXô‘þx)z|ÇŒèÏkÔ#úôƒÌú»ž‹‰ª'J ¸K‹O>oSçÓ„u£Re¹´þl_ ~tàPÆôpççLæB†ˆOAÖj8†ÁáPˆ3ñs|xó¶¿ùu×(îÖ_urÁàûññÇ\{{iÛ¸–…µ·‡+%CƒýÔ+Õ¡åæù®#ùþ…ht íö-4MCp]!2_ öòŰçü¸šB H)‘R „Àj4<¿¯ÕÁÜØ ”»JkuiYHÇAJ‰O×iG"¨«äùÉ…E>•ËØªŠÀQUE‰ÅPFF¨lmµ$ÜõõÍfŸ®•Jü ‡Ñ’Iüé4¿ûúØ,[v»½ƒ/@ä ³ ߪnïë•N ZÛÿ+³æÀ½ƒÂ>K²Za½´IEND®B`‚PK# 7D5ÂC>Client_CommentOnly.png>Áý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÕ 7);RHËIDAT8Ë¥“MhAÇ3Ý£H"-â±à) X+‚„xìEж'¯¥<Š Å õ"~€šŠ1½[M\íÁbÓLýÀÕlëZ‘Íx0C³mj+¾Ëÿ ÌûÏofÞƒÿ a’â]ú€àØVzxˆ¼©“—G/fwØŽ¶XM½ðíù9¶£WOJݬ;-ÓÞT@YXÝ“§¬ üèzØV_LKÇŠé7Äãqĉ¥?‹}MeM}ß'O2t힌3·„@‡Õz¥õz}ÃKA€›I­{Ë|-Mu=Û¶±m;Rìû>n&ÅàX‘ÅÇ^•—Q¥@ÏÈdcö¯æätÅ|†¹· UÊñsÿEΟ½0 ˆM ´ÖÒ½ \yŠ7}‡Êçï¨ù¼ï¦³Í7F´Öd³Y~ÉCÌ;ï>ÕYz=½iv­¬Ú4¡nK†!»?¦yô¥›û¹Ýò%;ûn‘L&q]—7•Œ‹\OP­Vñ<‘ÉG;+¬îH%‘H`Y–eEºxA,CkM­VCk”­5B„­Û¥Žãl:uÆd}ƒ‰›·¯Ÿú‡)ž0ÉoZè˜y üIEND®B`‚PK {7°½W½Client_Connecting.png½Bý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME× 6‡¹ÒJIDAT8ËÍ’ÏkÓpÆŸüè’¬aéì`WuLO…já»È† ²Ê½ˆC/õ xÜqƒo<ìØÒR6º êþh»ê–®t®©¡KC3R“eñ¢Pçwós{ï‡çå}€.!"!d§€éZž¹3}Ó/}LQT¿,˵ZÍú' !äáâó'G‡ú+Ï1o{{ÛK$!dž"þ5!dèúÕéìƒÛþ<ŽøsèëëÃÔÔK¹¬(Ê#žç½‰œß²,3/Åž²Ò5 Éxž‡N§Çq âñxO$™.‹ Q7jµÚçn ÀÞÚÚ‚išÈd2p]žçÁqˆ¢ˆƒƒ„B!,,, ÃÌO@çóy;—ËÝ]^^† H§Ó i½½~ìî~ßï‡$IÐ4 ÃØ'}Á«×ët]ßl·Û·¢Ñ(U( žA @6›ÇqpÝ#¬¯¿U‹Åâ³nÕ=ŒŽŽÎÆb±—sss¬a0 õzkkyð<MÓàºn’¢¨ÙÕÕû—€®ë›ûûûïwvvnNNNú*• TUE¥RÇq‡Ãà8.lÆ•‘‘ÐbµZýÆ¿©Ýn—›Íæ»R©tCE~ii)ã8‡›,Ë†ÇÆÆ011Û¶¥F£¨V«Iæ¤rX–õI×õT¹\ÖE¹¯ªê ŸÏÇ·ZZÀ`koowcxxø#ó§†Ù¶Ý0M3ûsn6›š¦¿†Ÿ-[–½’J%_ã´Œ_¸  ÿß(Åâ /3IEND®B`‚PK+§47Åc_°orClient_CreditsGrey.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ¥hn½ÕA l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< Âkž.Ž!§ßNܘu(@¤mu~§lIñ‹ä’us¹5]4wü`Û75¯7BfV™&‹UÙ{î‘…ŽÒ9z†;¯]X’ñŽùÇÁH¾?òöÏ9d*çÜ‹‰ÎŽoäá8ø‰MáUÓgO}Öš…ÕûüùËÅ,ªeXfž»lôÿç¦ýîÏ3-ç)»´ðï¿ùË^G9n¾*y$0ãßš\™VQƒu¢/×6,º˜Ã¡Ø"è4µÍnUãµÛ¼¤ƒCÎoÞÇ”cP£éç~gG#×/ú»Â½´&×êßo<]0%dŽ%³ cöÿp»æ7}Èàéêç²Î)¡ PKKŸ47ì6áÇ\^Client_CreditsYellow.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ •¨‹Èõh l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< ÂCž.Ž!§ßN8˜åd(àz^åXRxG”×ö —R_úÿþ2ñ䡹 ¦c;õxêOŽ9íž°‡ÿƒNúŽô6nÙa{+½ëÆßûôËzzÑåþ/íÅú { ˜Vé5½ø'ÙÁï×}§®¼¨•|÷Ã'¬—½%ÎzËgÚÁ³QOÖ;\fÙ#Ϊ”ÆîrQXàdGÖÄ8æ? ¯ãÏôròD¢˜Óh—/S3ø;½”¤ ÊjyãÁÁ6ÜîS©Tô!ù,ªËae1'ëŠö‹wèôw`µš)¯Wˆ>~¦ QòYT_{#m.;Š\&¹°B:/32Â}Ã[¾°Þ\Á`hn0Aƒ eµJ:/o Ôë7 Ô L”vIEND®B`‚PK…›47½ç†ÓÝClient_Encrypted.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ  סÈ. l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< BGOÇ‹Óo/oäm0àa8X̲èü¥›’‚>¾ìE³åìê—±­]ŸxøHïኩ‹ßû®díÓ*mÜÌq€IAËü³s_õÒ“É?€†1xºú¹¬sJhPKjª7,.k´¯ª Client_ExcellentRatingOnFile.pngªUý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×oiw>7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnôIDAT8˵“ÍK”QÆçΫ©XFiô4dDáB)°M¼®Â… µ ÚEÿ´kç"WAº‰hå,¢ "£veŠù…C£–Ž:÷¾O ›”j峸÷œç9—ç9ö2üPÜï‡ãõØvs6¾,D™ÜøÖÙpÌÕ$4F™\²uhŽ2¹×QÙðÅt>WùœÕŸ¸%ékßaeêCéiçm‹ÔMà*кë~$~HcÛuK÷š> ©Z´ôŽäýcl}Nˆ‘¨gôJã* ÔÐþÒÒ×ÌŽ^‚T øqTCuà:ºI\µÉ'Ï*1®Bçê›úìÐÐ ˜m&󟑦q§ObUvÓgcûƒÀÇ8òÂÒDuPš?B´‚´aD(áŽY?÷ÿQ,bl°–‡d…IPý„°É"„%eÙTqp§Æþco¬ýÆyÕ1?T„¤ah~ûºú‘ ¶²­ÛD™œôcf0{„!­ƒŸ? X/¢ÉU’;eð.,庭øMÉ«û(?¡ü>XXFcK8I–²ËÛÄSÀ'R‰Væx«’ݳˆ.‚º€–(“›Ù¹‰M@KÔ³YðÙø9òÀžŽªÞQw·53ÿÿLÃñ@Ù®=‹_Þýíul‡›IEND®B`‚PK©7¶Sµ•JNClient_ExtendedProtocol.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:‡¸0‡ºï£†Y@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy@…›<]C,N¿íßÈÕ Ѻµx[¯Xç¬é®ilò‡Ò7¨¯PÿÈ[’ÿšs–ÞZݳN[,\Bš9ºx=ºï™þZvøñ¹‡&”WEíö^Spêr†q®ö™ÒC ÅIXùZ°NÈelç.ÛôüW­½v_ÝÅóLgÏŽ:ªéT¾[Üb…Åß?)Ó½Â3‹½G¾ÀøÂ’¼óŠÜ¬3¯ö‹}iZQP2/àñ™¬3*ŸŸçÿÈtÿ„ΪšugðtõsYç”ÐPKÁ“7ó•=!ÔÏClient_FairRatingOnFile.pngÏ0ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖÚ2ã7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë}ËoTUÇ?÷œs[çÑBíƒÄ2šÌP#TÚŠ´%E° ( õ±ðãÊĸTcâÆã‚ ¢ ‰ƒš¨#¾RSŠ%qÚR@Úi ÅÎÜ1¹sÎuÑjÄßõïóË'‡ÿí£?@)…RŠ(Šhhh@kME¼óö»wÝ;ÿ¥”cðœ”ò= mŒyøüØÑ±úÅo¾Æs×#ùìº.ÙlŽ;wV_ïÙýè¹Ñ|¡#—Í5…Qx¤R)oÉOìf½¶ÎÚÚŸzò _}yµ)Ðc­ý¤X,îBê¡Áý ZkÂ0$—͹ ¯}úÙ¹W¥S¾Ñoì~ø‘«ss³›ê_<=þìÐcý{•R‰¶¶V¢HS«­S÷ë¤Si5š/4&’©Ì+˽/½ðÊùé+—yâà0èq]wo{[;MMÍ  "¥"ÒBJº:·Ó××Öš­[¶ñÀÙ³gº @’Rž>V8î­!ŒBjµ++ËÌÎÑÚð`&CSs3ÙìNgþÚü™Læ¡q×uQÖÚÃÛð<m JJüÀg~~·±S'ŸÁ÷ë\žžbqq‘Ûw`M&’h­‘£…|:•ê6Ö:7o^gò—If®þJ¹¼ÆSÇO µ&N3==E©´„ã8Þ÷?\º „¸-Gš\\º•™/fWo¯Š±±ôõö#¥KkëýD‘f½¶Nø¤’)Žä $“Éäòr©WJy^7¬µãÖØ=‰Tbª½­ÝB²ïñ}OÝ÷‘RÒù@]„A¸“0 »À®]=¸®{úèè˜R Ç!ŒB|ßG)E†T*¼ª‡W­²3×íH)?TRJff®ÇqF::¶Qõ<ŒÑHå>AàS­zÜ—HðWµŠµ€––¬µðâó/[!Ä…âìoqÅ«P*-±´ø;žçQ«Õñƒ¯Rù6ÆP.—c!Ä„2ÆðÓÏ?bŒyó»Kß kí‰8Ž%÷˜ã8F1aŒyK,\¿†òFÇãqß‹Eˆ>Æþ—qf;É¥£IEND®B`‚PKaTp7ôjtoClient_Fastweb.pngoý‰PNG  IHDRóÿa pHYs®®Œ]sø!IDAT8Å“MHÓqǧiZXÔ!Rz_‡,Ø\IQBE"zеÐCBËDÊ2…<!ù‹P *I(5ÿ[–[_VM‡5 ÉZ)Ñ^jÚæ¿¹É'óKoBžÃsx>Ï÷yžï£‹‰EÏ„C²p 5^¡·ã®p9mbÄfšÍ+±H¿ó!ñn¨›¾¶Û4Th9uH)¢^ë5>uææ™tÆF<– Ü=Ř› qZà(ÇÛ[Ì«æ|ö¥*¢åøÇ‡ ½È%(©¨-VóÝùY¯‚n ­ç·5zªãnì÷rHNø ðÍõš)sA}=«ðÛëç~éͷʘ´×!wî$bʤ OM\¬"z„_Ȧl|íô˘îÜÎÇ'ù õK„,…Dô;puhIJ\JÔ#áÐÞà—AÂ]\Òq†Í̘³f¤ch¾ˆïm=aCÏó9¼gó\÷(ÀÌLDe7Ö‰–* Õ%Zß9+Z*wQ{!›Ë¥E¢­æ ÐIaýÚ¤Ùâ1G¸û.a½dz븥Þt”cï,ÇgÒ‰ÒÂýÞ„Äô˜¾Q3S½Çøl*Aî/G5ÛUFÛ¢ËI#yÕòì4ý3¸Ñûá%G >ë Þw•bm=G‘6m)+QnZGÜ’?’çÜ.›êDÖ‘›¹µr ©«ãY#1±qÿþþ à†/ÒŽû-IEND®B`‚PKò±7ÑÎ>•Client_Friend.pngëü‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<‘IDAT8¥“KH”QÇÿçÞoüfæK…òA a%=ADíb´(ZÕ&Z´-(&*Í–-¢M­$‚ ’‘°l!eˆ=ˆ¢¥”©£3Ó73ßëÞ{ZØ[kÓgñÿý9œ13þ'¬ïEÑnKÐ^’¢–™­H™“º,¶b›”ó³P™‹)æ^ fÆAGãIûÄúֵɲÊrø…û†ƒÜ”›c°³¢®&±¼qµò2ÓxÜÿÄ‹”î<¦tv:Ž}¥mßÖ„m pè ˆ„ƒ±Ñ ì„ù´›„„tJák‰[—züBÞ?"[$Z¹¡¦®ªº:7 |pàC»_àÄ qDP™I°çÁ ÐÙ)X†à$çYŸFÆ—Z j]´¤*›>À f˜b0 (c9hׇö"|‡ªúf~ºÌbfIFÀä]°R30f ØQ:ð³ 6?·ÅZƒb%`°°,Io3ãÓ«+íÍt¬ ‚1ºÍZ]lAÒ“„B¾üüÉ;O–WÂ!Œ"Jà½ÏÎ “C¼n††Š‘ÁQ¡5ŸËe½×/½×d/„?ê"L{`efñJš1xç^…Qwй[¤˜2¼óå›Ñ‰W#Ó‘³j HÊY°°m”5µ` ÿ¾Ÿž˜º£~´UX‚nWWÍ¯ÝØ¸!^~ãy3p2 §a3îÞìóó9÷†bìI1ëß ¾™Øáê¼R§uÓŽ¶„ÿp†ˆ×7¡ÿz¯_,z]šq(õ D>S;IÂÙ’’Øá-»¶'¥¸}­Ç‚àü1ÃGfÍåoߨA´ß’â‚‚"¥ÚîœSÈß.o®< 4·ÿ¥ù ½Çг*HõyIEND®B`‚PK"“7&ÊóûClient_GoodRatingOnFile.pngûý‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDAT8u“ËkSAÆg’X[Ó6M¥ÖGŠ`)JtÕÔ…¸ðA|mêÆÇÂJÁ;ÿW¢;qçÂhU\hT¥ Å÷«Á&m“¶·÷&޹Dž¶KÎb†ó}|g~3¢ª,´l6½ˆ‡2¹¡…z ª„>„F`A™M`³ém@!”É}ú· y`-¡L.øw¾XÊäžýŸà;ðѤïj|ãC³jçIUmÅçû°³÷¢„u7p蜗À¤¯Ó²éˆtiZ ájÇaâ%Áð-¤ZP”Û¡½2³S;Æ7?‘ŽC"˶Cd Øðß¡õ‚lí!°¨ Öjæ l6mL}²_šÖ€º æo ö'H“J"9n³i™£`³é­Ža8ªH£„ëÀÿ "¨uPõÀæai€lCÞÞJ_E¹Ê(%„*ÞjK`¿‚ Ó` L@P­è"„F”x-F¡¡mHºvk¬ÂäDžXÔåí—¯£„ŒOwûÖ¹?Þ\~ß»çlÿ…Ïó(øÙž4¬¸rã×V Å<]]ݬ^•Âõf~õ‚âX±oL˜ÑÑ_÷úÏßýÆÞìG'±ï}CŸtvv195E²%‰3ãà8ÓLNNÑšLðàá}¿T*õÔRHau×óñõ?-I|kinjÆó<<×¥®®ŽåmmxžGq¬Htq,lŒ9]û’¥ßÑ £ÕDk{û bÑÕj×sq=—úú¥ø¾WñH¥RˆÈþ9ƒP&÷,qøÎ7 thdd„r¹D©\ÆqªÕ cÅSÓÓø¾ªR©VžÎû¾õO=zœ»‰DvÖ *"ZsWFDŒµvÐZ{æ}¾@ú«4X°IEND®B`‚PK“7¹Ñw›ÖÑClient_InvalidRatingOnFile.pngÑ.ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ&Çkæ7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë•“]HÛgÆïûOš˜ÔZ5m4FòµæcVL¥cjfq¬k¯œxW¼ØÝ.CºA/¼œPØl a"ku"a¥”mltj)eÚMV-ÛÖtήÉìÚžßÿ.DAïöÀÃá9Ϲxž#؇á‘!îz4MûX•JH‰bF)õf,Ö²öîÅK{øbߢ\&“é^Üë³ú|B*)Xï}½|7ù £”ŠÆb-jGHôöõø4MQJ½*¥ø§£=î¬ýäSŽ¿Dak‹Ÿú‘_Ïw«ßVV†Q%„¸®”zgz*ñ»Ðt"zå왳绺ºÌB »'½)ª p<~ŒÅ0È <­°Šö—»ºLRŠÐÆÆ†éÞò„ìí뱕Ëê§QèzO½‡òt‚:¯—N'B)£ÏS÷Ý @]Ïâp8„RêLo_M‹DÃo„‡^kðxD¡XDÌÎqÌqËýû¸/_Æzò$Ï®^¥èpðWæÿÚ+H§Óä²9²¹Ü†Ô4m =—UvJ׮㬭Åâ÷cñù°µ¶b®®ÆívSº2É£õ?0 ƒOƒ”R^4躆Aá›oihk#ëÞ‰ Âá0†a°09Ƀþ~ŽlÞùì‹/ì˜gÈr¹<2;ó}>•\#óÕ×T[­ŒD°ø|TUUQYY‰µ¹K €«ò0Õ·ï täZ2§”zOãkÉä[ë|´ÕØÖFvv–c—¶=Þp R^\äh0Hþ‹é­Í'OÞ>“±XK®{*q­I3k‡…À‹añùp:ÔÔÔp0ÅvêN“™ãéM­{*ñå|¦5oB {;:LúÍ›oÜØéèèèžØºù¥³“:¿_[M§‡¥ýb ž;ÒÔ´ŠD,&‹…Ʊ±Ý…öövææævg«.YZbùáÃ|6•j6Ixß›sóóø‰=C¡Ðþ_Ã90ÀÓÓ§q¹\æÕTêC1騹sG*êë·¥F±¸];ýþY>O&fyeåo1C €ü?$ ý~`BŒ1tó>IEND®B`‚PKò¶7v“êí­ªClient_lphant.pngë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å |G@˜qª6Ÿ4P½ÄÓוý:›ˆ¹Jâý»É@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy Œ|ž.Ž!§{ƒO¯=lÀ“,Wu–ïnãÌÎ{ gŸ0öœýå㾕±»_žwhpQÒôš8ýÌ‘Ï7½,Ùæ÷ÍÖeØ`ÒØé"')X¬Ç”·mŽÕÏy +Jë§30˜qä-õaõëÕbTÈj]j ºæu×í·ß6MÝò©CÜõ­ÇïMd|ðEï¢G´¦†à^]Ϲrg£ÿ_º÷øBþlfU'žïÔé_t•ª<â²6öÅÃg$=˜T”˜?jïýq˜'ëÈãùÛ%îæz;휲Ï#¶!}QÌ©-©ÓÞÙ1ÙKE9§5:sdw{ЬêY¿[Žª)§©eL{6¯î¬É÷û,KÙ&Å~PRY*m÷ÌóŸ5¢?Êþ1.ñùõùSFà`2xºú¹¬sJhPK’¤¥6é€lÜþùClient_mlDonkey.pngùü‰PNG  IHDRóÿa tEXtX-Index0´Ãœb«IDAT8¥“[lSuÇçÎéémíJOw.[o2)¬ctcË4DÚì8V6_`'s 1J£Fx11DM–Ál$ÖÄK±DÇÒ­sGtet²–®v›cëéìíìt«O|óûüÍçéóøŸÃü~?&å$µ^[®³)1—ÏQEçyÞ+¯Ë ›*µZ=³¸¸øm&“¹Dée®ÒJ›R‘(‡ ½§ò'K†MWÜV*UìÓÛªk$I*…Ãa,NƒÛí.‘$‰Å¢#Å¢¼ž«Èn%DbY!Sç˲KÛ’–—/©¦Ÿ½ÛÂk¹íÁ`°Ïï÷ÓÙ¿³è4º‹£££®@ ð&M«‡ë‡j»É£ª¸#j1±¦F"1Ÿ¸l‰ÛkÏë?Ýñzh ér†ïm´}§–U×±¢šÚ êʺC.$.À¹µó`Š2—È¥+X POMN}Ÿ‰Ÿ„ÞM¸Qq N/ŸÎM&”#† "q;ÄZhÎ?÷Q”¾D á4—w¹v½ïkÝ×6=3ýNø^XӰѸ.Ûr¸Ïþ Yº°=Ϧs®®˜HÏã>[?8 ÛaïÏÂz`|—åõŠr}ù,#)qM”9wê¹ß[þâÒ•ðü|[¡!ÓtÔQt ­ó¢UŠ ¨žs@%[Õ¯ Èµ[¡[´,Ëíh5µ ¢(jœ5ÎÀ+'ºûµ¢þ"«‚ :¤„á&}WǾ×BåæÈÁ#NyÜž¥‚²,+P½«†)¬¬¬4ݺI˜8Ó7†)–¹Ì.üÖ•Œ/t/Úc@ýRF‚¹E)JIA©TºjwÖN¶-ãétzKj%ån?|(Ä-ÚFˆ<‚)ìNËOSÁcF«´c´Äš™³#Ã#–d2ÙæÞë~`µZE^¯7â¬qžijj‚¹èÜû×o\w¼»ýáGrÚ&ÔTMm}äö· ¥DRŠÖ{먛[K¯?“IvÞ!ƒÛwFX)&©«»‹LzÈÞÓÄ“Î[ BЫ(¥¨i¨mB¨Ž©Ñ®vC£[M¿‰e{QJátZ Y¼>‹îîÇØÃ³¡€…A¼^áPˆŸ²QqâÓÞ3¨jj¶’ΤQJQQš|>KÏûà6388ˆR ­ÃÏô€BØR‡ `Uk‚ÅÂ:ápår ¥Ùl–ææf^<öW¯NQ©TR¢•B  \“q)ŸË3?G)…mÛØ¶Íѣǘ˜˜ ‘ˆcY•JË P,ÉçòàtNy;/³±¡I‹|®€Ó颿¿ŸÞÞ^––oMÓÖ°2“$64I™Êeùf_ÏÉ_/ U›¢?þŽÖšŽŽ'‰Ç—(•Ëh­q»Ý†A:‘¢°RàÒ/#ë_~Ñü[¤Æ;›bׯfŸÞ·¯Íõçô<©Lš{CõxÜ</.§›¿ÿJžYåóÏê±Å±†'/Æ€¤àòìHÚe¸Æ§­5[ƒ[BµuØY›rºD1Ydyv™Ñèß|ùÃFôÊÀ'FÎ}Ä”ØÔ•* ñ©]Ïݽíž>—¯V ih´*l²ñL|â«èé%`˜´àÿòÿ»1(k@Èê†ùc®n•jþEIEND®B`‚PK\®7ƒV|Client_PoorRatingOnFile.pngêû‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ7ŸíR–7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïln_IDAT8Ëu‘_h[UÆ¿sÎíÒæÏíÒ•vëèMšnЖaµqYQÑtÎ'KÉžŠ0[öàÊ@§(LË|÷`*(¸‡Zd¨ø CÛÚMÆæÚÎjј)­k—Ò4¹Iî½ç&÷Þs|Ød8ðßÛ÷çá#¸‡ñÓ§píÚ|cô}!äA „ü „x!ï[91öÊüäž Ц(Ê/‰þDHÓ4Ê9G6›õ¯/Bˆ}Öãñ>ño€¡ô`'cì!Ä!JI1ÑŸlííí¥¦iÂ0 ˜¦L&#þÈfsRÊ0!äk!ĉ©ÉÏo(À=3JÒ4Ì/ÌïŠÅbà¶ »ZçÜâ¨÷7ÐÔ@[$¢a~a~ðêÕŸ<¥ ¥ž'žˆD¢Ä4MD#…B0M®ã  ¢½½;ò›ØÙºº®CUU"„H ¥ÀpOW7B@H UUo¯ÞQKK+„ „"—»…üVÅbMá0ðŒÂ{9‘LR€ yG3 ø[`s”+%ؼ Ã4P(`sÐ"ÕK¥1LˤD8F>Ÿ·9¸mÁ¶92™ßá«B/.¿{Ûm$ëî骖týqÀ¯èåÌJÅbÕš‹[°¬¦®TQ±ìn”„@xVWVm‹óן¬¬®âïµ›¯{‚îr<‚mÔÔ„‚?kÝ@½Šåµ2ÈÖ(¥ @Îvéx†w_ ã§O‚‰iÒÄB~±4ùâÉ}Cg…¾ë‰ÛEæÖ\“»¸åÊÍ‚29†}§ûùøÜr™Þ½ÿ}Ò„Â2¹øÃ_CZ\×+ÆÞe‘-ןY´æC÷{צO¿·*/—µßzΗñЗ ž®~.뜚PKF¡¥6†’Eþ4/Client_Shareaza.png/Ðü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× NN¿i¼IDAT8Ë•’[H“qÆŸÿwÚÁãtnæ<å&³,ó”’va‚¨,M¢2µK#Œº ºê¾›, o"Â@Q¼0Q )µÈÈSj$ælºÙ<ÏÃÜÖ¾}ÿ¯› %üݽ/ïó¼ÏÀ(Ï+œ·n7ý,.)Åaâ8a¾îfûÚ—qÙÙÜâ±åç—tËü»dA[sí%±X*¼¨F£"Õ5m¶ÜÜ¢ý ÈÞá=!¼áJew1ã2¯sü2ˆ¨ƒw!Òü¶‡kk-OêÝ×à!|â…Š´8®Ryr!!‹à•2àà[2ay ü¶oGÑÝU?6úö/ƒ^€3–Zž»ÍæjuZbrVÐÝ ÷\´©np Aðl*Ô:”„¸U}çã&Æû€ë8SAá³­(}µgd ª¤ HQviE:¨G02\=ëØø¸ jˆ FFV‡Ýç³Ä}Ÿ 3¡O7 ±7$)ÉãÅÖ/²2Ö:‡Õ©Ø'(’Î…ÁYøçÕà‚‚Á¯»¶Âìl!¦T"”! ôñ˜í‹è¯—ájVB˜T€;*B¥¦`jh¨qÕõã{«‘m ˆ“éT’NGGžåbC!:‹Œ.1Ë ô‰AÐßÑ"€{J ]X|¶¥éº9{u‹,O³üí¢8tÊ/’Lsl>gÖwÒ4FøŒ(sAs°YUÐlƒÈ6S;ü­ê, ìŸ4ü­¾_Ÿ3]!ÍœpÆÃ$Ûº?³ÈëX³š½‘‡@ïWkmßpU7¥£(°{:áoÞñ|Êvnª2Ó̹ñÙ„O€ÙN‡Ž$ÂÛ9h½Þý¡ª“Ò‘]ñA„½2&4H wiàu£,u<–—JfJY6g¿êDxWŠé }tŸ.^-·Z86÷0â]4í‘Ú{eÿùüPpþ“o#IEND®B`‚PKôi7žÉ½!ojClient_StatusUnknown.pngj•ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× (KnS÷IDAT8Ëm“ÏKryÆ?~ï½Þ;¸®Ua˜š VÌ»h¸Åk#´¢…-ZDÐÂj1¼ÑlÂ…ÌBíZE‘›îâ"Å2)û±‘¢a^•k÷Îb*z™÷lÎyÎs8Ïã0M“‰DÀ/À8~-—€c`Ë0ŒÊÇ~Ç@$Àoªª®OLLhápX P((•JV&“i·Ûí àÃ0¬w€×á?ý~ÿëëë?œœœÍf¹¿¿ §§]×#™L6///ÿ>†aaš&º®™ŸŸÿZ«Õìxo×ëuÛ4MûààÀžœœ´‰„]­Víh4úU×õ€ÔÛÛûëÔÔÔÏŽL&€‚ÝÝ]ö÷÷ÉårLOOãv»ÙÛÛãùù™îînººº¤‹‹‹¿0 …ÙlEQh4<==¡( ÔëuEAUUÊå2ÃÃÃB1.€ðÐз··È²Œ$I(Š‚,Ëø|>–——±,‹t:ÓéDUU¡P˲ÂòÇŸ !eY–Q…••œN'›››ÜÝÝ¡iBTUýO(‹E¼^ï7 \.777är9 …ªª¢iš¦Ñ××ÇÕÕBˆ’ Ÿý422"^‹H’„‚ÓÓÓ÷sÞ²$IƒAÎÏÏ­———cl¶GGGñù|(Š‚—ËÅÒÒ‹‹‹hš†ªª8N<~¿Ÿ6°% è´Z­T*Õ\]]Åëõ¾3x‹·Í‡X,F2™l5›Í Ã0*ßH9 }Z[[ÓŠÅ"•J…‡‡4MÃív éïï'•Jµòù|¾Óé|6 ÃúŸ™4Mû}ffFt„\__S.—­ííív«ÕÚ°,ë[3}ÏÎ’$[–$©Ôét¾kçSR÷ïÒYIEND®B`‚PK9zp7:N¼=8Client_Transfer.png8Çü‰PNG  IHDRóÿa pHYs  ÒÝ~üêIDAT8ÒyHPpƒ "‚,*,Hò ]™¦‘ÃsSfžCò˜éÔ©Í<²y0´<ðHW3ÒЂÓå5AÓ¼Ã$Ýl:ÝL×f©”Û·)(šþñ…Çãý>ï÷ [i”â¸wò$Å>D\[†6ŒƒFA‰”¢¸m­¯¢eèÆZÒ¤I]è.-}AÙ3ˆ.RÀ1B 2s EmJäòf5‡ï^¼¼î1»0)ÜYÍ™AD¡Ïù¿ð3‡¨"9Êá#ƒ©Gïš?óµÖ. Q¤*ðI‘¬Þíþ³i°ß-õæ'8MËh™xC5qV\@ åeí*ú€È— lœ=$gѯÁ~«@ÓÄÔ*Q-RÁ3^#§aÇAòãKwyJp?+áÅ–5¿´)ä«Û¯¯ogñÖ`ì"¹$qy Øvì ëVÔ€ %]ëÍ“ƒš0÷¸ dò–Qõ¸E†YR<8 òGRL„qÚµG¶n¼"ëão”t«P%˜HLõ…ƃ‘¹˨ KÌá1D€Ní1˜tœR:VZŒÐ³ƒ.méÜŽÓÉeK²Ìš.TȨ^…ú˜zI`äÖ bÃM¸Šõ¡× …«­Ú°ú¢gá¸Wç,¦îf™Åýþ¹óH.W!—¯‚¹Ï0¬irX²q¹]FÍgAh9«=¸Š }¸6æO¤¨ÍíËH-èbFÎ,„å-Á2Œ€§kêY…A ëâv·.\„&ð7ƒG)±{ÏWÞHNvþ¹ØŒÖ”{Q-Æ“o&û«€Ï4þtFéØoÿ1s0g­á[iß»/°_j ¡é=hßqSDÈm¸àZ™£øÀÀ ýÃ~åN©ôv¼ïiÜ»|FÝóÀÀV„QìÅœüwþ/—͹@Ÿà9IEND®B`‚PK77[Ö{ÑYTClient_Unknown.pngT«ü‰PNG  IHDRóÿa pHYs  šœtIME×!-Noæ5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPÙ‹o²IDAT8Ë’ÏK#gÇ?3“lú5²#›bn‰x«ö¢ ½I]ð¢¡=Í_P„Û£—BK!„×€—…Á ´”à¯hÀ„€d–LÞ™Iæ}§—š"ËBŸË÷{xøð}¾€ã8FµZÇ¡Ýn›B|ß×BlÛ¦Z­òµ1^Œã8¬¬¬˜ALyž7j4ïr¹\§×ër¹ÜW!Æîî®y||¬ŽŽŒñxüÖuÝ`<ÿÁïZk'À_À¯À+˜éy^ 0MÃ0 Ó4·¥””ËecŸÍÍÍôêêê ”_ÒN'''1€çyz8*×u[[[£P(àº.Ýn—¹¹9³T*•?K¥Ò«Ìszz÷z½l"‘Èåóy¤”ÌÏÏcYwwwضÞÛ¶ý ¨T*LMM!„ð=Ïc0ðôô„”’^¯‡)å5`K)_'¨T* étÚj4Ÿ ÃàùùÛ¶¹¿¿'N“Édb)eV)õ ¥D)5XÅb1Y(‚d29†áwÀý~Û¶™™™azzß÷ËËË7Q寮®b!ħÅÅEšÍ&V±X42™Œj·Ûï,Ëú{oof³É`0 ÕjÑjµèt:Äql.//óððð½”ò ðqii ®¯¯±,ëþàà€³³3²Ù,[[[h­ÙØØ`gg!···¬¯¯üü¯b†ïû–ÖšÇÇG”R(¥ÇrssC¿ßGkRŠn· 0QøvaaáÓ4'KQQ«Õèt:(¥¨×ë(¥°,ë‹*›€†¡L¾Qq~~N»Ý&Š"F£qHÔjµ`loo£µ&ŸÏãº.BºÝ.³³³„aH*•"‘HJ¥þ+F££z½þÿc´Ö¿\\\ µæìT[vÙKúIEND®B`‚PKHi7@~ñ `[Client_Upload.png[¤ü‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYsvv}Õ‚ÌtIME× '6mèIDAT8Ë•“Mh†Ÿùß™ý™˜Mv7ÍJM“Ô ÑlYck°ö PГÐVôÖ‚Dz+zðèU ÁC{"RƒXQZ±¥bÚÄ6Òj6¶1›íN³3tgvfvv¼Ø%‚û¿ÃÃÇûÿèùãgÞ›9úÑ!R@åÕÓMWÆÎfûӇ塋ëW¿¸ù2ÀÓ•ñ÷‡‡Ò-·Mg":ç½òáÜSƒµ]^ȾnuÍ –«-7¸{ñ§Þµüíaÿ±g^<8ýý@Ö”½v€U¯#ÐtZ¸ëKøÖM6£Úàn3É˿ܨ½ñó¹·DU“çî6ìk)C')wÙÿdžÉ]yFŠƒ¨Ã{HæJ¨öuf†]޾¼wo¹TøöÈ;gŸèy°zåüù–1ýei|Çñ±œ¤dMbˆºF1m%‹ènòëâ%DR¹‘„SwâÉ3îÚw±°ôٛ롳¹8ZìGWeô„LÊÐèÏ¢Lv犢pýêeL±Iitdz“#ù—įì,d‰‘Dh·YDSeô„‚’)¢ë:¿]b¬øˆ0±»°ï_€L*1Njš‚,Šø~‡(Š‘E #݇išt»]œ»·Éõ¥s½ÂN×±šnBE‚N„µuŸN,ïÓ‘d‰f*…mÛ„aˆµ±† 4öTžéëTU¾tºGîÙ÷qÛ!¶ãajB`‘L&Q…0 ñ<­úŸèÊÆÜDi´ÜXŽw*¡©‡×ë¶`5=÷ZCB»Á…Ï?A|ßÇqLÓD–e¡¾Y{«çÁkË×jÍSˆ"-?dmc‹Ÿ–þs’Ññ Úí6Qá8–e±²²rbaaaUÚ^ËZðÂ×ù‚ ­¬Ög~¼R«w¶øýv“š-Q4]\·EExž÷•ªª'–——þk ÏÍž.ÛNk¶ºjü( üQ.Xß<žsg†¡(Je~~¾ú°ËåäÉw§^Ÿ;¶ýö7ÐR2ÙŠiF/IEND®B`‚PK{u27áïî94Client_xMule.png4Ëý‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×  +6„?êÆÁIDAT8Ë•‘OË1Å#)"4‹I©ÉŽ,,$kYÎ쬕…Oc¥|>ÊBŠ…,ý™DšfR,†Qó®ÈcÒó¼g{û{ï9‚¦i¼KQ§ßï üQžO˜ÿ”÷EñW³÷ ½ïƒr¹Ìr¹DQ§Óé ë:º®³ÝnÙï÷Ìf3>ßó>·‰¢Èù|Æ0 :«Õ Ó4Ùív ‡C×f×@€D"A¥Ra2™0X¯×_A—A2™Ä0 6› º®s8øKžgX–e°X,¨×ëT«UšÍ¦ó[3‚¦i(ŠâT«U®×+Åb‘Z­† ´Z-lÛf>Ÿ¿€^¯÷3Äç†`0H,ãt:a•J…H$B8¦ÑhÉdǨªê¼›xžÆb1r¹Á`Á`@&“Á¶mÇ¡Ûí"I¥RÉ¢¢(ŽÏçãz½²Z­¸\.˜¦I2™¤P(ÍfÑuý{ Óé”T*õo·ÑhY–‘e™Çãá1ŸÏ;¢(b†kX*•H§Óøý~ívÛ¢Ïçx<Ž$IX–ÅñxÄ4Múý¾ ªê ?á× ‡P(D(â~¿cšæWàSÿèýÕäì7 IEND®B`‚PK˜|7•¸spþToolbar_About.png¾Aø‰PNG  IHDR szzô pHYs"é"é7y®ppIDATX…µÖyP“éðuwí´Ž´]Y¶v(UÇ…¢+„;€k"ˆ„#€„ ÐPnXÂÎ !„HHHÈMBÎ@¡xV¢Õ­VA;³8ÎÛÐÿíJ*ÏÌwæýãßû™çø½Ï'|bM,ã·û9ý鈣û1ËóV×ÙåGzCQµÍté N?a˜]5˜æVu£†i&[À‰Lе¼c·'Ï€HpHTÊp“ÿîÞƒGÀ‹/Ÿnnnš7·¶½|õêñºùÛêáÉÍ`D¢èKGwØG† ñÉyë—ó*gGƦ&ü}}ù‡õu•Ù¼!ÞØØ˜Íæ‡Öó «ÏËÉ­OB£Sº/d}@pDòw‰xÂãrrÛ2µ½•X^ÏP0”Z½Ñ`4‘fg¦ LS†,…RKé`KViô¾ÛD}=“ó̇ù¿Ð0Œ]<6OC¨h\ijç™é=u”|ÛÛÜÆi&‘jƒÉä:XYYI`}cG)Z¥w‰ÖZ‚BeÓF:sÍÝ/üÏVb.eaSҿ猎Õpø¢ÒêÚ«Ñ”ú†PD¥¼¯µ¶Ã»8Òî®^ £‹+er+ ¶ô&³W¾¬Ôk¯½‰J-· às…Ímbvs[zö#»ŸÏGÖÔT477Ç`0 =½ýq½ëæúÍ®þ¡Ç`ð˜Ô ³YxïîÝ àSRR]S]AmhŒg0{ë,›‘/¨e¾TÔÞÙSÇåKûY½BMO.2Ì,Nl½þ÷kO,ûýœ]v ÃN_ˆM»ÿàAË;wJêë뽩T*„ZO9+‘©. Å*2¯#Ë’{û„Ù ÕH©R£g‰d–X¦mÓ›¶^¿ùA6¨æ>rš¸p“.“ËÑ:.Ú²î~,ËO8 CL7*õÆ9švd’48¤Ck†ÇÓóxݘ‘ªÖéëåJ]Æ”i:ÑÒ¤L‘¼ówß¼÷$¼àæö幘ôìÜHc#Í›ÕÕå#•É¡ÝDÕäÔy~q¥\¢¡ñåCͳóË5³óKD•zøòøäL©rhk4£76ÌL ­µÈî«“ïýW¼pÜ f †F]Ħe";;¾Ý¬nïA¥ ¢7˜ò'&§Š—–×rÃD±z¸rai%×4;_8>aÈšš¾ž¢RkÂ:íUÕdDl.ò/îÐO­ê^ˆÓðhL•ÚàÏår¼…çØ¸¦Õb––o¡†Æõ™RíhîÊßnc'&ÜìÜÞ4}-“ÊZÛè>¨Ä´(HH¬«ÕÈÕ;l@òâ_Ós‘N—ÀP( @è]ßÔz#IJDòl¾Tƒ×L`o.Åh´Ú³ý|¨˜X›†Æ|n5`'žG#‘)gý|™Têã‹|òˆ-ÈŠftK\߯Çõ ¨â¯ÏΜSªT`£Ó?ƒƒ„Æÿ¥ú¿؉4†JLG±YÝB¡$‹=8ü߉ÑQ·Åù9B¥ TeR©ŸÇ]É!„ÃÂÑÁΧa¶àî8|ŽÂ””Uãñ¸î2‰è[KŸNʪLJÍ«JÈ'ÒÂEB7>Ÿç^O¥ùEÆ¥ÄÏ#í?¤övëƒJʈc2;ݹœ^·+ù$Djayl±2—S…ìèìòìéa»¥gÂÏÃÎ~hÝxøÃí¢0qµuTp—s&¯˜ +¨&ÁJ(W¡™ß“Â,Vz»g * é{.Òá£,à AÀ e5猆‰•uí¾e´ÿËq+­i Ðjt'iM­^Á𸠇ìþçη °ç3¾LJfbiy"íJa*.§ Ÿ_œ–ƒÏÌ΋ÄeäÇ| p ÖfOG¡¾þ'’ÿeÉëX4ög4·ŠÏy“‘Uøò< ñÔñ˜óÅÝÔÜàÓÏöûžruyG,-Ȥ ¸8» xúÓsàæ°o¿Môž>?ø™Û1'ÇW—ñ)ƒÞd¦ã€+x`qápÿÞ]€oÛÚÚ@÷ pèЯݿvøj3!> ·Ð€t\ PN,¶¶6äðññÚÞ`d¿ñ¶·ÿâgT<hmn’1h ´˜¼}» ,XfÁÃÃýMОþêàGÇ£7“0¨ÿð©X ª¢¸}{ h£·..Îo,Hß=ìÄñG]¿=}úøƒý×S§( €@ ÇNNNG¿¶?°§€ØØî;޹”`ºZG~Ëfw¿µÜ—¼¬©e`'ùÙ'i …–;A*•ž±¶Î2ÝcUDm\¸IEND®B`‚PKË©&7XàÎíidToolbar_Blink.pngd›ù‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME× Ÿ£>lñIDATXÃÕ—Ml\WÇç¼÷æÃŸ“¤±Ç6`ŵj*,X ¤‘M…²€E‚„¤."Q• .X¡ŠEY°eâÙdÑØF"TABˆ –)Q­ŽIì*þ»öŒglÏ›™÷îaáw°Ç±uÑžæÝwϽÿÿ=çî½#¼€]ÿÝÛ'{Ű]ä¾jfùÈÅc¸_½õë*€•“gÀë9‹i±:¸"­âמ‘¤$‚ÉQïÝ»w6NÿRD®˜™¶ö‰fÖòÅHÛ">•ßQ©ãÌ#Š»©×3Ökaõä_'þôèuÿ0ð;wýdxxøJ___ºO“€suâ(Ê á¶âjóôö"5 #‰ço”“¯¥S•ŸJ •J©sn¤««+åœã fÆVùýƒ„ÿ!éÄ"’©ÇÝ$ý`U°%°ˆÑÓ%z"³õ­C A a&[WÚÎD„¤w›ØJxú BÏA-KlÝxR™·¶‚ÈIzºÂ´ APy^øÍ­£ऌ§›ˆöbœAýW@úqñ Š!R[Ç(òÒ)ß÷!~ä HTbÌé9…x/ƒgi”$PD¨“Jyâ·Š-•JI{A¼½À­©Ø€Õ±Xq  ¶ŠY±æ–Cd(ÚÀl•#Aì<ç7ÊìóÀw€6¡VU[\\Ïóö…¥)LUA웤éJ§P-ƒ<ç]ÛÄ“eªÕüàsxÚM½Æ~Céo ü´££#Ó\ÑGÚ/œ{•¸ž¤ZË¡ºL:ñ Õu¢(À¹ æ6PÿkÔ£Ìû6 Ë6üÆ488xBD¨Õj¨*G•ÇÞt¸Ø‘Я œ7‡¹-°MêõŽWQÿMLbÐ~¢8·“3ëñ<çqáœÐ.ÜÚ6D2Tãï³½ù%T>F4™ÃôÇ}¨'¨—¿ýä¼xsœ‡‘ ´ù’é>+ ‘z¡P¸Á»þauý< çø›ªþ;ŸÏß~žÍf¿˜J¥¼r¹ü8—˽yíÚµÕ¶"K¥Ò¹\îééébðÖg'¥Réöêêê?óù|&›ÍŽŒŽŽþFUGœs¶°°ûñãÇïÛŽIc—³Ó§O[__Ÿæyž +‹NU7fgg—¨¬íe¶±ak6›õ/^¼˜¼|ùòÇÆÆÞÊd2½³³³MNNþþÆw2™?ð?¬V]¹\v€A€ªÆ¬¯­×6J¥¨%¿qŸez{]nú?ñAv«`yyÙ©êËõzýòâââæøøø»<øã­[·>Š¢H666šaT Õ‰v±5æ’†OH>¿çó+­—Z¯1¾é[kŠN/]º”>wîÜwEäëårùþÄÄÄŸççç»›O»¼J«¸ï­UÐV͸ÁÁÁ¸†á{“““kóóóÒ˜TvÏÕýwCÛ£p·çÛ¡&Çì“=àíþ;üÙr{‹D'}áIEND®B`‚PKj—|7MgQ÷  Toolbar_Connect.png íö‰PNG  IHDR szzô pHYsØØnGc5ÄIDATX…•—{TMÛÇz{Dž¥„("=”(å!nŽÛɉò(ÑŠJw‹Â馇”$Ç×uŽ:7uF¥sF´õ=¤‡+¯…ÆñúãÞÝ÷Îßwm[GŽ³ÇøŽ½Ö^s¯ßgýæï÷s „ÞtóæMK¹\VRRrãÆ ñÖ­[bKK‹øðáC±½½]|ò䉨ÙÙ)vuu‰/_¾_½z%¾yóF|ûö­R¯_¿æ¢ßI/^¼ïß¿/²{?zôȪ×à¤Û·oo½|ù2Ž9¢Ø·oŸ"&&FqøðaE||¼"11Q‘””¤HNNV;vL‘ššªHKKSœ8qâÑoª¢ÿdff*šššþÓÖÖüI€»wïn+..†ŸŸæÎ‹E‹ÁÕÕ‹/Æ’%KàææÆµtéR,[¶ Ë—/‡»»;V¬X¡K¢ë .„L&»·‚ˆŸàïïϤÀRpÕÀªÁW®\‰U«VÁÓÓów¢ÿ±lþ9___ØÛÛÃÅÅóæÍÃüùó±`Áþ4=³B"0’&eÃÃÃûì Ü»wx{{cÆŒ˜={6—££#œœœxVœ¹TáŒD`=§Œ®GDD|>ë¬[·S¦L lmm1sæL.Ê ÉÁÁkΜ9\ G`$Ê] ýs«W¯Æ„ `aaiÓ¦ÁÒÒÓ§O‡••—µµµN´³³Ã¬Y³>#(vïÏØJ4wcÆŒ™™×äÉ“¹(+S§N…¹¹¹ŽÀhºH}4344ÄÆÁ¼à˜áø–––òôikkcĈ9r$FÅ¥¯¯Œ=šËÈÈH) DcèØØØ˜ŸÓñðáñaÆ÷Ìݦ3³ñ¿té’_ee¥]]?3 ?6À»¹¹9£¶¶û÷ïç…¸eËlß¾;wîDpp0DQTŠÎéwJo@@÷j_ª‘!C†p‚ÕÓÓã÷R0· §§LHH@XXïÑèèh8pä¢kGs=0×s=.:VUJJ ÏÈȳi¥®®ÎŸœ²7pà@¬_¿þñÊ•+ÝDMEÒ[_Ìé¨6H=îA•Φg£OŸ>< ôô4•ÔU=¼¯{ömonGÉí$Ç£NQu»ððp´¶¶òi?¹®®.ÏÆÚµk°yófÞ6ª†ò)ÇûÔ@ã(°iÓ&@µ´´ø1Y5«/­¨ ¢¢BA­A­C}Kn' Ir¼žp=Oš2¨ Ä DSAEH>À®¿ðññá=M=+ ™ ‰*Y2 N2–ÁÑ5ꪭ˜˜tÄ%œFÌÁ4^ yyy¸víª««é{€*SÕí$S!‘L…$9*œ´FhìšÕ_ 6* gÎV¢½ý7ˆû»vœj;žú öô‰¬åãËÊÊæ*¼¼¼¸QHn7iÒ$¥ãQfHªnG`4e’Ó7]7o7—mHNcoÁ.ˆ¹ÛP”óóOσÏwa½ pŸxT]°›ÃêAS @…1lØ0Œ;ãLJ‰‰ Ïiâĉ\¦¦¦J@Ó8úYµ³³â¾ùGòŽc_;v´ ‚¬Ä§S[±0Ûc³˜±Ãº”ø…þÈÒ#–\½zUAÕNÚ¿Þ.T,C‡åPd"’èœD×$Ñ9Ù´—ç>ì) Çš›šožŒ½÷mXc‹¬Ì»d ‹3£aÒB‚ï´X¸ØmÉUPñ©oß¾\jjj¼}444 ©©ÉM„4`ÀÞ×T݃æC n®»-Ūjli0G@£|*§Ã­ÔæßêáHVð g¿‡a–ÅúsPéׯŸ„ $ž-‚!ÊšÕˆË; ×2cxäXbY†%\KL0#sâŠ}Äòp2–¨ƒ03Z|J @-Ô@Y©”’”2‚!’žÞd¤ý³N&eЍ½Þ€¹éæˆù!†*Ùa¿€C‘uÁ „ö}"ëGõso$$Q¶âcm>ÛÂeO@ë»ûxÚÒt³à¥,ø×l<Ûˆ;r…߯xû¯ƒÐØØÈ­˜¼Ò¨ºÞKk~OI{i§ 5ŸºÁs¹ É…ùŽ 0:kŒ†ßê±»X!ŠÕ°N€ìd"œì¾¬c:BNNNxnn.Ο?¬¬,äç磰°EEE —Ú•——ƒµ*9W73r±îëׯ£¦¦F):§qAÛeø!³Ö'YMíekÀ!]XjÛYð5ìEkö¢ó/¨÷ӕѦG8wîœ=ƒ±€‘,@${‹d›”È;wîD²+òÁƒ{Ù¢Φ*½¡¡¡›ÓJÖÍΛŸ?¾—½jý½šE²ãHöªÉîpüñ¯åõÐùŠ]/@çKMôu ë¦…ìB9¼³§7äŸÚ’©Še`³P¼{÷Á`ëÙMú|l¬ š“”ø3äU³ÊÂ4SVOÄÅŠRl¡›ßýÿGK[[-==Ý¡¾¾Á÷Ù³®0öT±OŸ>McköÙ–-?U×ÔܪªªBÓí&TUWÑôü·¡±±ˆm:¾üäÉ鎎ŽäÎŽÎèæ–Ö ’ÒŠ¿Œ›à"KIÎBKK²ÍFí#p[,‹¨‘ª N ¦þýÔÔôÙæÁûäÉS)—äŹUÕµ•Å%¥M .´å_Èï*¼xñ¹¼¸¸ãjeÕ³«×*;KÊÊ:KËÊ^Èå—;ò Zr/üRŸ—WPüíwߟMLJÚ¼5p¶ ùëW¾÷b¥±µcñS'‚©ï‡Ùb4Lj´0¨ü¨É¤7vœéS³ISÙ g³cG°CjZºSVN®KÖùŸÓN|ã¸k÷nûeK—[êëNdãG1 ”¨ÜwÓ¦E›®ÿ¤¢i°¦0IEND®B`‚PKX—|7ŸìÂFM H Toolbar_Connecting.pngH ·ô‰PNG  IHDR szzô pHYsØØnGc5 úIDATX…•—XgÇ—ÓX.1¹˜¨ hrw*Q,,ˆ¡*ÄX£1xŠ‚ MWEE@ Š Ej Jµ±,,Rté‹àR¶ÐË¢æ–ÿ½3ˆQï’3û<¿gf§}¿ù¿ß÷Í ç÷(--Õáñx{222vŠD"nyy9·ººšûüùsnCCW*•r ·¹¹™ÛÖÖÆíììävwws•J庺ºX˜í ­­­ÜgÏžqéÚ;êêêt·q†ŠŠ ûôôt«8 òóóSùûû«UAAAªcÇŽ©BBBT¡¡¡ª°°0Uxx¸*""â˜moÜsùòe•X,þµ¾¾~Ç TVVnãóù°±±±±1,X€… bÑ¢EX¼x1,,,X–,YKKK,]ºßÿ=–-[öæ?Ì~sss¸»»ƒ®­"î ØÚÚ²ý ÷7þvÃo7¾bÅ ¬\¹«V­ú/˜ó(Í?'`mm }}}˜ššÂÌÌ óæÍÃüùóÙ»y?FŒ¡_¬?åË—³Ç}pUUU¬€••¾ýö[Ì;—ÅÐÐFFFl*&&&,oË1b ŒØû%cö»¹¹}¸¬[·“'OÆŒ30sæLÌš5‹…I…ÁÀÀ€å»ï¾céì—cĘԘ}®®®N`õêÕ?~<¦NŠiÓ¦AGGÓ§O‡®®.‹žžÞ¹~ÁÙ³gcΜ9ïˆ1ṞÎÎΠk€=#ÀÔnܸqÐÒÒb™4i “ж¶6¦L™òFŽcÊÅÐ/Æ,iæ8MMMlÞ¼4üÚj‰uõSS <#F|‰‘#F`ÔÈ‘P5 ê꣠¡¡ŽÑ£50fôhhŽƒ±š šìººº:ÆŽ‹¯¾úŠm˜YAçoܸñ7ò²²éé|¾í½ä›¬´TÛü,¾mqAŽX”oUU^r© /û÷aýÚ5°Ýb »­pvØgÇmØîä@8²KGÚn'{{ØÛnÁæMÙáË”áóÏ?geF“äðáÃÙNýF€f¤½™ütœIÉEXºQ‚jœÉ~޳yu8—߀se¸ZÞ†›•]¸õ¬ ñ%îÔôôQÍð·iÉÏ¢DÜ3%îVÈ!—˰ÝÅ}ô{ç£(µaÆaýúõïp|^o@Š;ù¯°7£û=pËRb¶î9=ðÌ{ù/p°à%¼¿Ä!Ñ+x¾‚O-‹~[öãQ¤BÔ9¨„Øfo5556æî‡ÊŽª7}ª# %à>èÆž‡ØËëľôN¸etbf'ܳºàñ¨ ž9Ý8Û /¡^ùJx?éá[H1¼ u’%¹¨‚FÔHžÁn«-8{çŸ}ö›Æš5kÞHSùÜ,„crv¤t€{·;ïw`׃ìNë„+ íáwa_‘ÙýºáNéxä*)%’ÌÁ%‘Œ·ˆ£„"¨|ŒÀfëM¬Óð!CØufª–H$*æ‰úFààµ'°‰ï„Ã68&¶Ã)©Î)ípImÇŽ{ØAB;)]$³;½ ®$³W@duÃ-›¤(÷¼nxŒ•êdnªŸUÁÅÙ Ÿ~ú)Û˜R0™jkk_ dðTî— °áZ;l®·Âöf+¶Þj…ýí6Ø“É8&“Tjœ)—ûØþ Ü´.pIfÉìÎ$)’ÙCéìÌîÁ1A nßIê>w᧯âìùKˆŠŠBbb"rss‘ŸŸÏ,÷Ñ3_ÌÍ¢>°÷|>ÖÆ¶aÕfl¼ÚŒM×Z`}½›o´b ÉØÄ·a+ÉØ%’ m£tIƉÒq¦RmH)Q:\*Õ6^® ð8;õY»P‘â‚ä¤í!‘±IÔéƒèîƒòòòqŸ%°ëL.VÄ´`íù&¬»ØŒc›ñÓeâJ 6\mÁ¿®µb¥c}³ ›IfËívØ&´c+•Ë.¹—$Üo>Å ž!z/…óÑ{ƒ†˜É¦žBÌå›Þ!l~Xk5‘™ìXG$à™EáMX-Ǫ3 ¬ŽQà‡sMø„֒кK$E2ëi¥óCýkÅ:[]œì´VD@Yu½JzéÈ‹wÆý£ZP„pðü%!¦È½îƒˆˆ“MÔ!Çö dòT›‚Ðó“Á8H ³ãR˜ŸaÑI9‡Ëa¥À’S Xž&HÎ2¦ –g‰óÍXz¡Ëb[°0¤÷¸èþ½@zOùû±ÅÁ‹-,!ñˆÿAÒKX‰Íœ;}âW˜À¼÷q³3ÓT2 }PŠ?7`ÖáÌöo„A`#æ•Âèq\ÓPÌÂä˜!‡9I-ŒVÀâLŸŒyp)òRwC•ó ^ W™ß@tz&MŸ‰¨ÝÃAãΨwŠr»/Üó®€?Ú¤Ð=Ô]ŸzÌð­Çl¿Fè!‘)+bÜ'brâµ¥cI"”ŽY#àWü x!˜‹Wç9ÈtQcǽ–Æ_!sSƒÔu ¤»>ØUçOŸPÒ¾ñ¬À#°òç±zÞ }„žw=ô|0“Iůs^§bHe2¤TŒCúR™G¥2<\‚Ì{QP>ÔBgœ:¼ Ça}ò%h¡íðÇh=:m£!ÐÁ/W¯4“ÀhNåÓ§l?úñ å©ÀôC2Lcð’aª—”ešW#m“BÇ›ð¥”ü¨TG¤˜ ‡þQ ‚˜X‡ ×o¡åªÚ"tÑé;ùŽjøXc¬–¡;zº~Ñò¢ÊίÀÙØ¸'$0˜S\\ÌÍä?Tm H†¾G!L¼ az¨¦ÞE0ó.îçy ¾%0ÿ¹æ~¥Xx¤‹(z‹À2X•Á!(Ïï8 #ôk´üüê\9ð]9—¸Úx?/ÒÌÐqm"²nøÂÆiÿavÆÇÇïMH¸ƒø;IˆO¼‹”û<<ä?_‹Ìl!²r -!¯ BQio¾¨¢bq¯¨ä)D%¯£°´q·S‘z+Ñ“ÐqXu{ÀR;̓*Í*jãÌÙÂá ú'+§OîïßóÌð= s<ËŠŸxV”yVŠK=%•åu5U{+ÊK"‹ ŸôVKªPUYÑûT\&i’Õ{4Ë÷+¤užM²ÏZI¥gÀñS‚Ê{¾è ûÃjmì\‚Þt#´Þš‚ÌÛ'±jý6·þ·®?|%{›ììì4…¢§§555Ì<^D5T{ÿ8ú =uö¢°ç…—h4ÄèáÕ CtÅë¢<Õ>GBï1µëø¾ß¡CFFF[755ï¡Î#2™,œžÙ±Õ5Õ×ò Ê…B!Äbó… oÆ—”¤Ñ‡ê•F©ô¬\.Qȇ$ÕµÎÇCO;^ˆ½\]›‰æûÎP¤ØÐ¤ˆÓEÔÔ˜÷„9ƒˆ ¨aggg}â!Ÿ Ì’ÇÏÈ'§$×'%'5ßð …ÇçËsò„M9¹yŠ @‘)´òxéò¤””ê„äÔ¢ÄÄþ…‹WbƒŽ…y-^ºjÙÉȘëwï&7¦¦&7 ¡vFüÄ8jÄÀ÷bL ÿúïÇMÔúF›>&f¸¸ì0 4ºŸ`zãæm“ðˆS†»vïÖ·\²TGCCs¯N #þòúý×Õ&&ÿ^iÿìÑ_{Ç <IEND®B`‚PKQ—|7[;É© ¤ Toolbar_Disconnect.png¤ [ô‰PNG  IHDR szzô pHYsØØnGc5 VIDATX…–yP“wÇiën·³³ÿ´»3ëÑcgµÝYw[W{Xw©Gë…¶jkëU´UD È¥\*¢€UD9äR!r„›LHä" w ·àÑðÝ'G·ÖÝvÍÌw2¼“ÉûáûüžÏ?¥R¹„ÍfûÕ±J¼›Ù ¿¡nå3:e"F·¢•Ñ«’0:䌡.%C×­fûº£Ý?ÉÈÀ=†‰®XÒßÅêT2Ô²6F»Ré500°ôgon‰Z©l.RèÌL•ÁÌTÿ;t½Øž|…ÞÌjë0«”í Àë4Êv÷v=ÎVuÁ»ñü¹3Ö4Í ðî4‚ÓnžAˆh§ÄpºõBÛ"LjK¸Œ"ýñoK‚¥‘Ò2M»ÂLŒ_P@}ΔªÁ¨†ýüÙSàL!°q A¼)7ÝGÈÝû8E0§›§J0á-”¶DJ(RŠì-R‚”>Âuqÿ³tXØu-Vâë>•𮚀OÍ|k'p‚= ?ÊI‚±$`‚(Áüi„Ì)AµL#¬uÚ N@!’GHnî}FµÒCAù ¸0'q´t GËÆáÁ‡gÅ8ŽWëzÞã]GPs¢ ÆŸÚ ˜>A5”šO# å® z Q*ÌƒÏ àŸ+þ‚ ¸ÜÅ¡¢1¸1Gq¸d ît¤|ÇèµãY=ã5“𪛣~Þ4*Ê îüšŠ`|3ˆçÞ{6€N°œïìÌÃÞ[&|“7‚ý”Â,…K1A݃+¦vÜ æHÅŽÒ¨ PoŽ(’â(k ^´B Z!oZ!Z!_Úg«ñ86ÛäÞ§çÉ…oyñ„d;±ÝxOØîšh€!¢tK/±òŠ«LX?¯ 1:Õ ³V«ýàt~›ÕvGJl¶;F+äA+äYi±íqÅv“ð!ß’‹ÝvþvÛR;Ad»`«í"^ÐO ÈqžÙ…QcCŒãÔXCï~iMè úúúìlsPN öæÃ¥Ðb»Q¸’`“`,ƳØî¨ÝvÔŽ'Ùîx­ÅvS`ŒÁø’íNŒµãÍŸA¯wÊJgSs󑓇̤f塲¾ ÂV)Äb1š››O:h4jFÿb›ínZlg·ù6Û ý=H0.L›íÜÊЀܩ‹íŽUÛmWg±AѨÜÙˆ*n„ ºݱ±P„‡¡$çæxìõëåJ¹$¦S£Š …x<ÞJ5à“ÚL¶ÁÎd;Z™Ýd»¯s)?Ø.ŸlGíì§gÁ‚9xÇn;—ËO:pÁeí(lc¨EŒGeeП;‡žƒ qs/!é™9¡)é.Ûœ¿yÓ";+À]ðHäcC‚ÛRôø"Õ€íiìÈ0bí$ ]¤ÞݳçÖœ©¯-¡gÂ’Ë.Ûšª‚ ‹±º:̰X€@€YA3F32ÐŒÎC®PlÝŠæ}ûÀˆDâ¥x£ƒƒÃ«6.Ûüm,ËÎê°2†Äqik/ë°áªôpJ"'“Ñ®Sn³e§Óm{ýi¦ [Èt¤hËÎÂÐQw˜®]ÃìÀÆKJÐåá¶ÍŸâ^Æ t&$€÷É'¨zu /\|L‹@ÃàsëÍ{£±øô0Þ=£Åûç´øà<íï…!üó"‰$ŽrI‡ÕWtX¯Ç'×ôXKPëi¯Rm0ë®H!ÊÌĽ}ÎÐxzÀüø1¾¿ ›œÐ#õ-«¨Dý–m¨xÿ=äEŸù)ÀyŸÆÒ0-–F âÝÈA|pvË£$zØ âkYuÙBí¬¥‡ÓzjgMœ‚ÌèpÞ±ÓðwïÀX?L&út:o"oÙ2ö»€ûÙäÇÆNÀB+À]p>϶, ×Ú (˱,B‹÷,­œÕâC{+Ž4&Gjeåw¶V>¦Q9FËÀÉ¿ Õž]¨þðdÎyÒädLÑ®Gñúõ(_´­îï݇òìÌsèìè°6°û,o…ðN˜o[ªÃßC‡­y;tˆ® cI8%’Z:K£ŠÆûÑz,¿¨ÃŠX>¼8ˆìü*ˆw|‰üó ŒŒÀ$Ý\R[KÒQ¡¯·­..PìÛ¹ï äÞÊo#€är9ƒË©3»F³°ª¢ÛátA §%<¯” 50Ìwþ†.ƒ"òÀõW^FåÇk0òð!:¡X·Ò« 8èëwκ†L&Ó¿´´Ì’r0˪PQÃFç.8¼fpù"4 ZÀI l‘C$iŸKÚ!‘«g%ŠH{Ô¶kPXV‰ª¬T/yy«W!}ÑBÍ›‹òß¿îÚµà~´=_í@Nb¢Éá…9¶,'ˆ ºšê>Ò*„(åm!¥,¤SÝÒÝ© èíòר‰2iÛlOwº:5³ôƒµÛ¨ 6é‡ Ã!F6¤¯»3$69…'½ô˜o¼Žlºùí×_CÍÂ…hœ?’¯¢õêUlwu üáW×/þ${2|>]WWfffÐÛÛkñ¸ŒføÜÓŸ£×KiÙ¢î¨h6nDíŠàþcD¯¿ÕÉ“ˆŠ»Tm™ýŸ·½~óÒKsWÈdòýF£ÉÖ'J§Ó%Ð3;»§·'_ÜÒ¢‰DPkÔ‰Ehhhø^®PÔ÷÷÷ßN×ëõßô†°îž>¸¤”£¹™Ù=Z‡þT(ú\\уä멺Õü§€~Mùí sæÌusssNJJ¹\Çæ”ŠÄmBN#Wͪ` –³ÊM5µµ#lG/ŠŒ‚f¡¡‘Ç3py¼Q6»A_^QÑSʪ”••Up2³nfÇÄŇ®ÿüË- I)…õ¹¹C5YYÚ —/§Ñ}þð?sxŽ2ç©Z^¤¼üÆŸÞ|íÍ·þ²ØÑÑñ]OO¯ñ ‰Ýf–®¾]tgUµdG_ßå›7}ºdîÜ‹èó¤üŽò¼ý;lß»`þb‡~õןí¿õÀ›¬Z޵IEND®B`‚PK{—|7¼œ>"åàToolbar_Import.pngà÷‰PNG  IHDR szzô pHYs"é"é7y®p’IDATX…µW PT×^­m£¨µMg¤É4š ‚ (¨–Ç¢FQ¡BX^yEÐÅw}D1 ¬‘å%" Ë.Ëy£ Šø¨vt¬£Ó1Ó~=ÿuéšfjîÌ7çÞsÏÿýßùÏÿŸs/ob(›$Éð¸(Êt‡S¦ËŽBg„?:±Ö5Ó ’ ÷ª³u²÷&Ê;AçàùïûÛO£×ÏßcûôÕp=ãѺœ^ƒÏ䯸4Æ´ÇqŸ“Á;ÀÓÿà}ÃÈÚ婦ˆ©•â`S4…r8Ô†jðO-ÅGQ zy+>œõîðxï›$.ÒÚ)ÌrÕ±*)bk_#®ÖáU 8oŽÅòE½<“9¿Œ€UGÍ´’B>ÊÝ »"AH¥7Yå:l«ðÀº¢Ïaóy/o¾Á/"à½5)ËëýËí±¥Ô[.9CzÙ…ƒo©3ë" ÂöiV=¼3Þ}øG,Ô!•"l(¶…§ÒÞ…k8x¬Æ:ÖvÕ¶Ç-»)Zÿ—v}âáá±É××70,,l[ò¹4:öë`¹Í­¨j1Ä…«à» άàœg»wW®Dô5OØî·¾¾;~·¯L&Û&õ•:;;o`œ†0oÞ¼€ôSéÿÌÊÌBiI)†‡12<Ÿ“RÄTzB”¿ +²Œ`“c…)Vf-„cžvÖzÃu¿;ò•J¨ªjQ¤,„"K´Ô´§S§NõšvMZfa£PfCY•ÓÊ,d—ü€¼+ØxL y­<Š—Ã2k>ø9F¬²ÀYi† [ >èC§áLÁ9fwùŒ#ýü©W†††ðk‘89^Y7RX¬ Â_ëd8¡•!ëF(¼.Ybõ a—g°¶­ÈýÁHi Áqm×±ûæp„­GðwAÿ²^e½ƒÈ'"`êÖÍ~ß_-ÅúÔ/XXÅ(ü{ŽômÀѾMˆkvƒ[‰œ‹–À¥h©K *^Ѝ³‡z×Cù8òFox+‚EÂËÍKθ§LDÀŒÐÐÐÜ›½7‘W\Ñ1"j„ØÕ!‚g¹I…$åËàUn¯²×÷Ô'.3ƒ{ÙRÄ^"F#‚$u®jTèjï‚OêÏUÇÏ øCBBBÙÀÀšê›PW¯ED^$ÂÕˆïbS%|j¬VÀ§šµUV¯[Ö÷EõrÄtÕÈö‰Ì-ж4ãÞÐ]twwƒUÓ9ÆýÁD|tüøñú›7o¢³³÷‡ïa`ð6Âaˆipa"±U½þ>üÕ«tàÃõÅt9 ¡Ý[Ó}qM­a¶÷ÑÛÛƒþþ~$%%•2î¹`œÝUUUE¢³½]}ìÁÎ&1âûðeãç5Ùpb÷±}öHl÷DRa´ -\ôQRRµZ””5ãþÓ¸&OžlyñâÅ!2îëëãŒÛÛÛqçö\oëFbN"v6x"aP€ˆv[»°»ÕÑ™; RiqûÖmh4ÔÖÖ²ôâÖ­[ÈÌÌì`>WÀܹsí/_¾ühdd---(--Å7ÐÕÕµªróqô+ìÖ¬‡|Ø {‡ØÛ¼‘––Î6®KÐjµÜºàúõë¸{÷.òòò†˜€eã 066öª©©yNF伸¸”mmm(//‡"[yÒü%.Gp¢}|£¥ˆŒˆAêÉäææ‚Ùsë®d;â•+W@“a\›3gÎÚqØØØø××׿ºsçòóó¹5¤0Ò2PX瘀½rÜQ{b•„]‰ˆûééé`ÑCCC·|dK¦|ú‡‘‘‘ǸØ!ô…ž’ÔS(Œê¿ví—œlIØ:רÐÜÔÌ«¬¬DSS7–Þ—••qã)ŸX.½²¶¶ö{«:üýý÷’Cšucc#çŒHiV£hnnæòâÞ½{\xi¶4öM %akk+ÇÅžÿíîî1ž€);vìH!õ2&¢žžŽ”fC¤ÔVWWÿÔ§R©¸÷$r€ì ”À??¿=cσ±ô؆qŽ6 "!ç”ÑDöäÉn¦äˆ’‘B> Z÷ŠŠ Î9-ݳgÏ8²%A"##¿{Œ0‹måö'NpÙÌ’sJ„/^¼ÀË—/ñàÁ®2hfTnäôáÇܻçÏŸs#1´\ÄÅvV®MNNÎ{ŒðÇŒŒ -9,,,äBJá¥ÙQ9RRÑŒ†††ðøñc<}ú”ãG¸Í†"Fc(ó)I%&•#‰9|ø0mÇ3ß&`>+½n*Aš!Í„r²Ÿêêêþ»æDN©o´2¨¥“ò¥µ¥mèíé媀8Ù¡a>>|›€%ì$ Z?"$£Ï´´P9M:rú&hŒZ¥F ªÓ0; 7}ûöµ1¿MÀJ33³»›7oÆöíÛáèè¶3B$ÑyV¢ ‚T*+)H$ˆÅb $$ÁÁÁdÛÂ!Œ³…_åtøîrAH`6n܈ŋÓ³ñÿÐ]“„æææ#B¡®®®°··‡¥¥%ø|>Ö®] @'''vvvÜ{ji<‰tqqˆ pÛ.ÿn_ÚÂÅѳ155íg>ø:_“x£5É®_Q 2Xêéé…ÄOŸ>=aæÌ™òÙ³gdíQö|R__?mÚ´ié gÙs{>G`Ï9Ìî,Ãi½iÓ¾ÓÓ›š2×à÷Ç>6494{Æï’õ§ë'2ŽìË8”ù0gЧoÏ7ðtŠHÈú Ò šEICßôô¯@Ç)ƒ ÃR‘…æº>zgDÉL6TU ³éKˆÊá7:þÉ£¾ÿ_Ð0y‡4@ÅIEND®B`‚PKJ—|7é•ÜH± ¬ Toolbar_Irc.png¬ Sö‰PNG  IHDR szzô pHYs"é"é7y®p ^IDATX…W P”Gîa`@âᆹa¸MÌÊ¡…–ÆuS‚b¼TvEt1RaAL «€‰‘# „¨A¼ QÀ£ñÀDkÞ¾þéeMW}õÏßý÷{_¿÷úëd$`㩼 ›×ýˆDbÙh6F³5ll” j„>Œ0Cüчt"’Ú#9f6¨-µ¿D€­ÔáŽpELÖÔÔ¬ €ððp°µµU:wqqðôô55µŒ·`SGˆ˜ wfSð^låôCçÇ DÒXÍ—XXX¤?~ °°JJJ 0ô÷³gÏ ¿¿8––– ßZ9uîÔX—<®&j“ÙV‘À[+wk»Ì“À#"‘•’iéinã8¤¦¦‚¡¡!ÔÖ^€è˜ïÁÎÞ*++!//nÞ¼I?#GŽäá|>b"]ùÅ,¾‰ꉤ­ŒGI¸©Fâ•·Õ¢ó{8é6‘l_C–Èjª_Qã«WGra74œÑ¡® '$ààèÌ¥!==#P__ƒÕ‹CÕat~íÈ5ˆ H¢ˆ÷N$ÎEÜÊ«xœc¸ŽÀ|J–åæfõPãGÂ@Dàx¨ð‚ôVÊZ())å`ŠZð}Fîn o¸„6Î"þDœFü8‡$r•‘1ß\±˜oüßÁ®".#Ѐt/ñŸ:ͯµùÖ]xÝó²âæBg¶#@ù€Rˆ^l_cdúî·¶b1ztj!2½q¤Nô)·7'‡V“/¡ í•2 ‰óù”„9ç›…Aˆ˜D«•sNCV…¨$’iÒÊ”YÕ+ÎL(ñÆ¥úüŽ(CÔDÀ«šà?Õ…‹†ŽŽŽ22úúú ÐPïs4'ûó‰sÅèÎ| U‹P—D‡a$γðaèäÅ.PìPàpŸôQBNŸÅ¸ ˜l®'ߟüÉj`éÒž3ÒÒÒ óèQp°ŸÔ¹ÿ+2'z·rê\w´mH#!æ"q ”ÐÚü¿„btVD"J§ ¡Äº ¼aûbƒÞȯ×Éåƒrn;Í †+–ƒ‡—TUŸ‡BiÞs´9‡Ù~HˆÆÓ*v²P ›%!ß~ñ‰”%šÅbΟ@ñnÕ÷3ÝåÕ{à—­6{#¬ãÍ È‰Ð°p®­'KÀj‚íæ2ݪeupêJ*Ù¶Ôö_QB7¦ñŠ\êŒ%W²¶šHá¬okÖ·–µÆúƒZ5j’f8F$sÝÈ&¡¶6üœš—OÆÃ•ÎX/˜®SÓàÅ™µµ;àÔ†&ºª¾FJ¦ŸŸß™;v@Ȳe ‹!&&V®^â…çá´I ‹)§û1¾é]9|ù0žx×" F::óÀÂü Â‹ÓTà‚õâÝy^‰·ÒÝÞ9”†½L†bÒ¿'–.ÿ `HJJ‚{÷îÁþöÜH Ñœ=V@îPç€#¡7–Ôuÿ›xî"‹„Òäï22·XÃå$'hË”( ¶WêÕ€´pŽBc$)æ™Û8954Ýíø×ΰÜOü]„ ©m·nß'òšô´¥Új*˵µµÄ‘p‘ƒ]Ûˆ$w!ù›H›Ò>]!¿cùtƒPîÒ“ïµ»3×#ˆÊ4ú¢;ÁDUŠ-è@E‰ÔÿdJXkï¹H¬ph=ê¥Ã!=5LMͺpÕý híííàíí |é]²|å³^XÛØd²µWTT|ư”tttHXŸ%§„Œ€ í<g…® çöüÐvËÛ.EAFDD€j“Éd@£" ›ý¶ñÕÔžP1âñxt^sfÃמ½;2‚aêrNè•zŸî/ðŽÚ·Ê¼Èg’|r Ç_AKKË;hÛ°aƒBýg̘ pIµc/bê§®ðCõ@5ÜÀ;m׌Mfêì<ßÅŒ>@ôFEE蜶ææfÐÓÓãHœ={VÙK£s=%%e6Žé!¬G#`Eˆ‹‹ûÜÙÙù1Ý‚tå¸hll•m¡¡¡ììle_OOw[‰D¥ìŽ ô£Zc™FÛ!ü0‡ËÊÊ8#´Òýýýßëœ6©TÊHNNÖOSõÐcALeÅÌÏ›€7[‘žÏW­Z¥4;wîü Z4Z999ÃúŸ>} vvvÔø2tYõJFso‚¹l¤{\ѨAzª}¨Q±š9s戅º:rÕàü‰¼p2tA¥©P• ÷8SZ­+λÚÝÝ£œÜù² òò¥Ðóºï½ŽgçÀ¡Ô‘‰&'ÄÕ7zß'S5$Œ„)%%1to–—ü¸>2¦ýEO¯˜ µµýG~ÚõzpPÕx~Xüû©î æ·Þo} Í“³ñ¦Æ[Ï¿ œ¾|ðhŸB$åö|…ŒQ°1ÖÒÜ4Ï(pïWæOo2Þ{1WëËëÇà¥ltWm6é’¾sñâGWs×VH­‚ ¯>³¡©*@ ü(ñ.@Rà5IEND®B`‚PK˜|7¶ñd†Toolbar_Messages.png~÷‰PNG  IHDR szzô pHYsØØnGc53IDATX…µWYl\g Q4¨}A¤Jú•PZ ©¥+P¥¦@•4”¶I“fÅYœÍ‰gq;qlÇ»ãe2ÞÇŽwÏØžÍžÅ{ö}ß=3žÅã=îá»·,R’1‘Žî;W÷?ÿýÎwÎ7lÈ_[ǽã±7¸ƒÉWþø5“+ÚnpFšõöÈY‹'þâÿ@!G¶ÉIUÎ&WÕÖ0&MAhl3ìQ¢ñ¥%joöWߊ%0ÿ­pl~ÓØðÝuŽ™šä܆DÓ8ý ÐÃaqÇ0ªrƒ7j§gâ`yŸ{“-¸ð£w®CçJ)5®”\íHr´®Ô6zÖÆÿŠ@Û°é£3‚1­ÃF¨Ì!Z<ÍÂìú’@YËй’Ù@lQˆ/AfŠCN˜´&ØóMu´CãN}oÝúÆlœŽQ#JÚ&Ð>b†\Y<1Â, +Š8B(a$ç€?Ű: «?Ðì2œ¡yHõ³h“Ñ* k\Ég2&àÏ=-T¹7¥8]6‚f ýã Ê×úapDÐ#Ô€3¨‡;²Œþɸ¢&hç3Ée,­¬avnjg ò0ª†¼¨áû²2&^XÙD¢›È«a×ùN”ó¦Ñ4dDã€=RÆm¸Ë“¡UìÁ}ZàNŸÍ’ ûÚ½‘EÄÓ«ðÇ– ´$Ð! ±¿_iµ«‹º]çÃ[/œäVwMcÛq.öå÷á:G΢º[ƒ*Þ$J›¥è’‡páž¹4ŽúÑ71C‹ÆAâƒÎ‚‚Î9týV—‡+õ©}%êgL šXø½TíEYûvžmÇŽ>8ÝŠ=W{ñi9¥TóöÞžÄÞb5*ú=àýàÑŽ{”3è%2²0*<8ÛhÁ¶<ùÒ«Gù?_l4¸¢÷4öt‰­8sGHDÚ°e-~{°'ovAeK «R‹·NŠp¼Ö„›].TЂ5TóÊA/Šï»pþžä«ðÖ)qì×'‡Ÿ_—%æWŸñ„S¡Xú ›/2´ Œ¸Õ8ŠÒÆÁ´Í—Œ× |ØrZ„7²EøðÆŽTp²ÎL„ÌØS¬ÁïÎáõ"l=/•ï.”<µ. Jç‘^©m?á„LçG¿ÔˆkU÷‘u¥afTiU| kwzÝØ‘¯ÀK‡ðËÃ|¼’% ã6ïïÇ;9b|T0‰?_~².`0e½/¶ ¿A†Â{ Ü%^­—`wnÞþ¤»²«V¤ÓîEgþÁ¨6†ëí6|\ ÄŸ.á¯rä·šYÈãšï<¿åâCwÿ ç¿K"ü¢¬C…â¶IŒLº šòzÐ;fÇ•Þ;T‚}¹õq…!(§¶[’Ø‚ó0zÓpÏ,Â^\3ÆsÖmÅJ½ÿÛDÀÄ8_%µ¢¥4D :‡hbžP "• § Zpè2w­~È"£Yiñ¡—: c<„žÑÃÚõG=óÙõ8Œ¦¡¢ÔkбÎg'ÎÍ/cai"¡PÛPÉB¿Üú‘NÕ›p©Å†²>Û’yÍTŽ" ö”héš»ËN?ÆÝ×ΨÔ?“bwß)²@K¬¥vd‚(AéЦ0$TB®uÃà]Ày®·»àOEÙ š²'!¡àŠü8ZcÄ)êŠIàrF”†ÀO)lÒbªwnµ=c6È´>¶­DÁØ4;øR R È Ã¸Ðd…Ô0û^A‚à£ó ò ¦,§,(éq-R:¾üX¤ümZÖ|,8~›ÏT8ÑM@¿‰(†DÐÙÃp„–pvÏ%d¬78»„Å•X\~Àž›}i6! x¶<òPËc ( þOµöxB>¿Ö˺ S†ú>-u€â 3º‡'`'µS̲N׫ ƒ‘½þè"Œž9öÍÜå{‘ñP`ÒFOú'$@­·Ýàˆ¢[bÅΜv”´*Áåp«™9QÛ&D¯X‡)ÇJ{\¸Øü%Æ–-4 ¸Â ,˜¹`Ú‘Ä( %L åQ&°&m‰$Ðܯý>HÔ>œ,à³+ÝÈ»+Å™ ®7ŽãBqdv¨ˆ@^“gL¬˜NÙ’l2˜²'0nœ…D7‹ö± éÀÌtTödÝcÛp\ã=`¢±«ChƉÒì<ÇÃÖ¿q°õp þ°¿}2'¦i«ÖáXm´*Â*ŸY”X£úG ´Æ)Ã8X®Gö]#×#%À|È Žé‘Ä(uCMgʆ±=«[?»Ž~" qÍãp…»Èç™@b̧[bc˜ÉÝTšŽñ »ó §q \‘.6œqôM¿˜2nÉu~µLˆõHL ùå¼TŸÔºjðÎãÇŒ7)ŠÖèQNæS7ì#Sò±­Ç ž¾“Nö•jñÇ«“¬Y ¨fndLàŸx}WÕ³×êÆ~TÒ¬Üüþ‘ªIŒ‡˜k¢9poÉ4~sV‚ §Ø:_n±#¿ÍÁ:áq2¡÷¯*ñîE9ÛŠ…Ž$WèyaݾŠ×±aÒ/§Ùµ|”iðÆ !~u|oŸÑ| Æ›ÙB¼vbÛ/ÉPt߉:w5kÚ•Qd‚v6SiŽå’ÈfI€Õ4çq´R¬Šiœ©Ó¡¨ËS Ëš]¥Úž‘¯mbçϤúh®H&Õ;F41¿`:êëVm÷F\ýW¸šƒ›w7=÷¨g<wΖ§ÞË÷㛲îÈÿÁËŸ·}‡.fôoúBàIðw±K˜éLIEND®B`‚PK;žo7újƒ¸  Toolbar_Network.png ñô‰PNG  IHDR szzô pHYs  ÒÝ~ü ÀIDATX…­–TTWÇbÁ`‰Fƒq!4*UD!AŒj ¬ ˆ(©:”dèqè½ J@ADDQ)e`(ÒEŠüs™l<'›Ížvï9ÿóæ¾7÷¿ßw怒ü•H[¼k÷ÒgÎZ™zÞ+Kþ…ÕtÕîFŠÙù+¦f6–ÖîÊÇŽ]TQPZößbýåÿaÐÏ ¬ö†$ØFÄdfåVµ74¿{×ÑËo;>ÝÖ=>ÙÖ=6Æê{_ß44TþŒÙ—w¯²)4,Þ~V²2E$$·kÚ^ pMÏ®H*|XS󸲹ƒÉìèàâí >©{€\‡€þ÷¿]ÛßN‚Éú0•“_ɘ@HXB| »Élnjnnç’€`u½d€€Õ´°Vr¯“ôÙDM,.jÆPÛ8Ž×ããYQ³°±½õ°ª¦cirg’hd‚|]?¤ xÓ44DcËù=‰šºT<@iy/=éGyå;ÒæÆ'Ï @sQ£s7.±’c£™=LìÄÐÐK,g¶ŽáEÍyÖ‹¢m¸›ßŒÜüVä¶£¨¤ %e=¦oìãþìääÔí´uÌÇ´YÁÈØvN ÜôÏ=º‰iO‘”þÙ¹¯‘™]‡;qUHJ­EzÖä»÷X¸_ÄFaq7:6?dV+Vl2ÔÑ5äøùQáìr §Ï:@ûµîÑË8÷“Bè”ò Q1ˆK¬Fbr RÓ_FäÜm"jæ†GæÌ`¹¨Ì÷GšŒtuvbt”Xý¸IIIHHH†—§'ôôÌá铎äÔz„Ü.ATôÄü\ F|H I˨ãÞ¦gÍ@QÙXf§šÎûü‚"ü{ëíiƒ¹¹-,.…€W ÿ€BÜ+=â1"¢+{çâ^ !é%—œF›€¹c¼‚Ö@dt"Þ¿ç`|ü#8œI@Ýëjœc£= vÇ ¸¸ê:00ðV ;»¸¹¥“ÜȆOn€À_f4}Ý+}ª¤|`º³{œSá|Dkç8ʪ‡§ƒ®ã8Ã_qÎt5ENðk¿Ø4Ol÷Y–Îã¥êñô uõÝ<€‚‚ûPUÝ}CwP‚«Wãàè˜ gçâF™’øøæã’u8¢’™(«"kFÝZ¸¨o梺q ¥µcˆ(ú€ÀàWðÜç<²nÁy*…rF䀨è:>1±mt#cë…Þ ®aµ¯;1Ø?Ô”,ì˜0òD¸vm ‰(‘@$ÃÕ5-‚qѾa™ˆÎéCRA2 »dw‹FÀHy/F¨‰}¸fýÒS …¬\Iú/ø­ ”~ä“”Üåñã±s£3+aEe7YñÑÓ;MÊ1*;öÁÐØAÉÄófprJ|ï©lœ÷ì„MX;Üb;”Ò Zv'‚3»ŸÆAxÌ\cá´g´û¡‡5 îœ9üvò¾ÝºŸ¢ºÓÐBsÏ¡ág/YæÍm“h% ¢ÅBAI §Ïx! àÀÉ)..i¸|9 j#a`ÇÄ çfèz´Â,¨6Ñ-¸Þ»ˆ>˜WÄÁä%VÔ·z‹½ö,hxar",sÎ㣨/äÍÃñÎ'•4ÏœÃíHY÷;Á2²K¡¢zú×ÿÀ³ÝÖ6*Zt6)Dý#}Xù`ÛNÓZq!ªn1#ðN|Mæ%(2 pÚ‹…£–]=[‹UšmX'_ 5牘hðt›iiî97¸~½$D…E¡¦¦ZH ¼}iPQÙC#w€£c*Éöòà–Rì3}„²\˜z–BËk¦1­¸šÒç¬.œn‚zôcì,«‡&½²'_@Xë9„Ž´bãwõX$žŒE¯Gò$Ä¥d/Yß:yÊÒ[•À/ÀÁ¥"—%9p–V¡ R‹xSpä˜ÇØ é°Éµ;k!kY‚ý‘åØfÿ b Øî^ý¡õP ©Æ»Jhzãð@.¼ ó÷?¿æsë×c“n-Vî(žX¾™Vûû1l‰o|¡›{lüÃqÄð qÁòŠ?‶5ììãàáž ÓŸ|Û×~m7 øMþ”°"°z Í{ P©6Ç×2¬<ß !»ṟ®¬ËŽF´CÊ­›jñ¹e (ñÅéWÐI€˜NñÔ¢„°?-úú?)Q©É¡‘£îÞ°¶ùæÃÉnÛ«±°¹LÔÒ:c" AíÞ~JX½bÚ-ØîT‚}•nнóZ¾=P÷gA‚ìòÅQP+Æò‹­Ps©Ý:‡ ‹±Ù‘#Jð•^éÿº€ö?,‹’2b®N·BCï²Ã"Š8AyS7©¹ppˆážÒ»Ê;t.ÜäW³Láî„èžW4hÄWFÍØaÓ}:¤ t¨\ì-ÇWØ•²›øá& èÕ º‰?ZŒ­afû›È¾¹ê@鄤ï‹?o ß§”.˜;ßð½Ã¢gáÊ•[3§å™çüRáK·gL/ûžœnÀ׿Ll$Ö dA'²®Pˆ~Íç4le܃œs'>·kƒŠ}ü 谲̃^P –(çLÏÛèò··ÏR×¾Ø~gr±Æs¬×o‚ì¥&¬·l€ŒKNÞaá` û&°ÇXãÈ‚èµ*ȹ6@Ú ~ý6Èš×⟙QI˜¤ˆÛïþÛseÎ ð+Ð î.ĪM±nÅ&Ö;4a )EÃŒvœyÍ€rR „íû!ä4„í¾oñ¥U#øN± ¬×е‡Š°T)$WhÛE¿ ÀsAÑMƒ³L· Ò—Û!îІMÞDž¨3ÚpœíÊr Lúá½P jÇJ+R!†Í9T‹y;SFænvQåMùløUÌ[ hÇ¿/kr½ùȸõ@Îÿ-ä#{¡ßÝœn¨§ŽÂ(·•ñ0‹/ÅgW8Xiöb¦™—j^¥ÌW;k€ÍQ¶^Æ·ÛÏ_ðDWܾR·°-fšé#8’ñòq€Vú J q2¦¢—º±îB>wG¨mWÄ1áOI?[^[§´jîãP‘SŒ÷kl«ð¥O¶FöC#yŠŒ|>€õ7‡±øb5Ž|·Xõ\€¼‹‚èâüD«)ó¶Î_%å°h§Y¹À‰°¾å–y1—GVÛ—|Xn‘ÇYªÕ˧dVB•¸BY°Hš¼#L´àÿã ă Pdøø—ì¡,þÌŒo¥¤×\éïƒçH}Ì·BÂcÎ’ÏLøø«“ÿH‰ÍŸyñ÷8¿Œº…0 ËñÄIEND®B`‚PKp—|7!þàÊÆÁToolbar_Prefs.pngÁ>ø‰PNG  IHDR szzô pHYsØØnGc5sIDATX…ÅV pTåÞÔa¦U;8âPm+íŒ:€uê£BÅv ¡¥ –‡X;ÀFl'"ƒZHQŠ 4 ` 1d“@¢yl66›Ý%ûÞ;²ï÷û•}ïf7»Éžž{•ÚÆ„´0Þ™3û¸÷þçû¿óïü |“1«‡%ZçÝ2£ký°Ñ½Eft¯rÄï,€®Ûÿ-Þˆí%‘Îù @ï|Nç ‚Ñ3 FwÈÜÚ'˜Cü/3¸Vräæçn+ŽÂ²P¤sô*¬^PÛü\®Ò²Fañ^¶ù£à ÅÁˆŽ 5¶j«o“w4ž¶y#i¹Ùsä [qÏm0(3l6{`Ä«?¾p¢MŽÁX6Ùܤ3ã€y!KAÿ§³à Ft±vÞmp ªñ§HyÜNB4™&“„0¡7Œ»G@áÄ$ƲÊd!–úò»\o£ÿ_%¨ïþ€£´tˆõ®#6ºÍ)ø#Ip„b$ žp‚¨=´ðGSMe0y†LA@fw(¥¶x*ÑdƒPk?4+%{ŽÑEº³R£4ŽXPhÎ@̾0ØðÓ…LhP€L‰¾ÐÉULHtNÄÇ “Ÿ Ë’Æðã3£X’‰ÉI°ù¹/®«VÞ2€ŠúÞ¹,¹I3‚I´Àè é«äšè¼ø«¥ûÙ ¶üÂà Ÿ>³tÕ&êÞcgG† ®B~`r²€ ÆÁ„â)`Šu‡gU‚í{þñ2S¬‰ªm>0 ÕDr[05-ôàü-úˆB¡¬Åxc1Æ2Œ­/¼üf§Lç˜À÷É{°CLîQèbò8ÛJ˾?+÷-Z¾é (­>°âN¼‘0„#ÙGŸúåqL¶cο½L¡ÌÅøíŽ•œ`, Y,G –¹Éu_°ênY­nû.Ö?ÖŸ=¤²”/¸QpDÝ+Î5Ë1É’¯]€Bùö‚Ç—¼Ë‘ê²éñ<)N…É è”£h`ÍåÚ”×t,f ›&-¸ëë*+TÈ ì9RÕ€IîžvJÑÏÛûyv»? |G„]"7{AŽë €¶쫺ò®Êšw#åƒr3™=Ðó‘ÆÓ3ÒH)úqWjÔ iñGlä&°•AfòBËÀpûŒÞŸC&ˆrX¼£ ÐØÈ¡dô„ÉùÀר¡‘!‚“Tfî3š`¼“§Ët³§ð"|á87wBíŽ)|%Æ ñl.Ù½Š)Ñ%k»† ¾‡R>x“'D¶(¡v‰ÁÝ<5œëàB]X¸Ô'ÎЄº¼Äà†`,Yˆ¤²8Gbà‹¦a¢ä¬G·ÄÒ¥ª¯²Ÿ˜À 2„›‰NˆáAƒHr´ž5íhè@#]„ øpºuN·± ‹¯6ö~ Kt‘6oAflÁІ”©·ËÿÉßu°R(ÓZ1ÿã]¤6 :yqþ´Š÷V.ù¸¡S,ÃÚöqÅÆÕ¯¿SþAM+—£ õÐ: ͽúΡ³,Ýwª•)…sŸsÇÖ—ª¨n¢u¢Äã\~Õ†âZdó7¿[½ù:ƒ3˜7#¸*íè×–à?Ê1í¶½ï>½üÅß¿TÖ3¥zT˜‘¾ï?€qÏÊ?üeçó¶¿r±½¯tpØèFîç+B÷Þÿ½_S¾¼Šîšûà*†@9JX4vK¤‡¯©.9\?oÆius,[·íáõÛ÷ØðçòŠÕ[v¿vó½Ç_Úqÿuµ- ²b;¢(=ÁèØgWéknÜoéxQeõd8X*ÎEÌǦ²ª³0=[ó‹®H»56/´b;çÆôxÎN¤w…©]Î`Ü"Ô:I QûE“§šûë)3yülã­}Ï—–½w¬ìا¬K(T!úˆ=‚ !ÖÁ…n>¼}°ªý±g~µõ™6>2£þ× ±E‰©×¤p¢‰Ç/ÑáRŸºxZ¨¦2>œÒ og¯ïü;í@¬s@IÙŸl,Ù]Ií—ÀÇ—{=o½¦øŽÀë;+6—oÙ}˜8Ê=DÝ–­ÛºíÇ–=û_ÏÞ ³ûMøhOÑ¡&µF(IEND®B`‚PK˜|7ÃDq‰„Toolbar_Search.png„{ù‰PNG  IHDR szzô pHYs"é"é7y®p6IDATX…Å–{LSWÇë⦙qfs1KtŽmq.:·™½LŒqnÎ ²ÍWÌÀm:Á(ŠÓ! 8(ˆ ò°tò)­m¡kiíÃöÞ> ·ím{û¢½”–ÒBK ZP|dw§f,›ºd)Êþø¤§Ííù}nÎ÷wÎ!Azñ9.Ü™d6cõzÔ€j-®Ñhµ¥¸ûñþŸØxà‡>ܱÉl±vè æ~µs˺M½"jʵ}|±Â'’Ê*µò¬·ßù£˜årõå`V{À`Å=z«A{»­ýƒc l5â 6zô2£Í—MˆÅ5Ѝ–?2¯w ×Ú‹š­Þ6 6áCR—ÿºÖ¾é¹6éöNâN_Ä‚ôŽh¹*Ww+t …ÝZ•xÑ´\}xf¶z1{?¤·yXF6W§Ó³ÔƒÆ`hÒ9‚eöÁ‰V«wBéðß9ýQdöÁqÈäŽÀüº\n•òа†o—±x’!D%û f£AŸ$K{”V«³Ÿ2¸#%:×u 扴ZÆ›Á'ÓèŽpõ®ë¼ç²Žò†Õè¬û4–ª–ËÊb€ ˆFg²¹Ö~í¤‚"\óZ=(X¨Å¯]ã–îÞ1ºÂ6Ú*ÅBm]ú:»'ÐÞ ù鮸›s›t¼+R¹˜EçÄ$Àçó!JMm%Sn[¯é‹d©zÇ8jûØ!…mìd ÓdæpتèG(H š¡¢5Ê|¿Öˆ¼ulÏ/ÛŠTTžFîM1…‘Äáp´äâ²SË>jY ÁFÏ)¬áBPp‡ ŸFÎqµÁLNO —¡&7C¾âZé`)U8P^Èv•m)²× ¤JãíPïâ˜._¾,8S\zšDÊŸ+ÆÂµ`òM 2ßç ðÙ¹w“Ü·¿^ê; ÞøX9Ï“™ÇèË<@³[Ÿƒ\ø­r_b®è¼B¨‰»gb`fVTTÐw®~,3‡î|ë¢d05¶î²jw¹iÃWØ–í¥ÆÄÍùº/Þ9®þrÙAÅÎ×*öÌO“3©¦ÅlbÄÂŽN•J÷¦~ß>|·V ~ Öú§½TËê§vˆ_}ñ;èÍ—R¡÷^Nƒ×¾rNX~H±uåÕ¶•Ý»í|Ãv[G†¼{¦µQ)”ܬ¬¬&³'²Ïæ¿Õ)·„J3›«çl/?ªŠ#Cµ°°|ÿdE†:ñ‰]ð§?^Òìv{7˜cö´Η—?[H&C'²OVxB·ÛñÀ­ ÈÊ ‘²æÇ¥A¯Åg¨Vâï®<¢\w@µ´K½n‰ [«7Mކ=@0æò¯ÁÙââå'³³•ä¢b†ûŒîÐ]ä¼}`aºk i+º„´]6+ß”‡|L¡Ëë …Ú£C4AÇ §Ó9¬V«y†%Æ,¥¨èÌÒìì9¹9æ6&Ç«Fma‰ÆÑPIW¦Tчš;dõ\ÄÃf37Q(”·Ìííí„Á`ˆŠD€DJÌSäçÿ¼ñt^neEy¹¼¥¥ÕÓFo÷°Ùl+Ÿ÷[—D$LÕö(L=›––F.))!ÚÚÚFC8Ž;V«õ‡i LQ˜ŸûtUEÙâ–¦ú8F[ós{&))éu`„J¥uuu„L&#@0£” ‚'§%ð_Ù¼yó’ÊÊÊ£ ÃK£Ñ.—KX,–¨D£R©œÿئ¨­­½-^SSCÐéô{¹WPý×ëÛ#HHHXØØØÈa˜¨¯¯¿G4@B $V'óÌû*ùJåÿð¿à¼À¹àò€gQÍ€;‡¨îsçðÞ¥i&§ä¢9gÇ?¦sòÏ})m?­_ðP>ë |½Aüœ7Ô38¢‰Ñ<äNvú¸]5n®¸ÆÅ•\&Üÿ†ë.躛è‹kÜØ5  êZ0·~8¬i‰àM£T^ bo½»ë|ØóÅMê¼wó…ïø±§ÞO[ #÷_ å–·…åm!Üɦ ÊxAàÑv&Ccànn¿yýÍÁÛ„lûà†ðhÅÕ¨¢âjwr¬=Šã_’ö»PT‹ñè=t«‚‹zÆÃË´‘%õ#ÑoWöF5 ü—ÑRmr‹œéßÍ—|m]ÙØëH;~^&­ÿÅ!9ÿ“ºà'õxý¡ûуjQMªMr‘“Ü`ÞÊüÁßÏ4­|o[U0¤ùÙ>ilãA)~yDŠŽÈØ6}é¨/Òþá¿?RP-ªÉjkÉ‘v1'¹ÓKðƒƒ¯2ÆWæ ÿð}±|Ó!i¬VÀA?å€ÁìƒÎä~Ú µÁ†™ r­j£ ã†û3a°Cc°¢ŽÕÚtHcµä 9o÷ÀêBÉÓ?*”Œ®*`Ž(^.—Çú‡dô÷¢¾®­Í<´1drŽ\BÕ•QèÕ*¨9÷CÅA7ÁA40†—Ëeqª½ª@8\Ôˆ&Q\­ÄGW&!3ÃjµÀn³Àj6¡C(Á›§n$©69È•õC´í¼·hÛ9¯ê­*¿zÛ'Ó)ÑIv¢G ²cS)ô¨ç PÅЮŒ²!ü>¸=>œyñãâl>$AEû Šj½8Ñvf‹ë4®v‹±½Ò’bµ5ä WV€‚ÚðÖÂÚ0·ãRT÷Î9„ýR¤Ø µ MãÖ¦\ L˜ãàLQmADC\U„ñ«ãZÖåƒ8Öj‚Ò<‡Ï¢xó¬5׌ð:§ÑÖ9€ç Úä WV€ÝM‘õ{š"²ÂúÙï]°£«w$½; ²ŠiÚ¦ÀM'pÃØ1 ³3‚£m3xìíN¬+íE•Ðojx·jN›™õ@ò?w °>f$c}V€Û¢«ñ£C4Ç­ÕvtôˆÓ”fÖ@j¢e&ØL¨Ì í18™­œÅKÇ xºDˆÂóã¸$²³'£ÛÏ9°·Á §Ý‚þ5²@T›äÊ P!˜]QÑ=+ÜÏŸsÕP€!ÐplôS@ÇBhí™0jkp‰x':½(möñ|X³·ßÛqßù“[?qãòP3šY€]— Úä¨èšýVV€S}ñå§úãü;’ÁÝuN®‰Ó=@Ó?Áú@Çäì 3…Ia.A-:éu/Þ>gÁ/°á/:¬.‘â'eZ”°w£ÙË8ÐÚÞËÞ\ Úä WV€:‹+ÅsGº’‰ýNt÷Jb äÓ™õ'¹Ñ•™ jL:6éf!RqˆuNöüŸB åžz>íñAobrŸ·“5¡ˆ½#¸@µÉA®¬BýÌ¢ £©Î¿õ‡Ûüö¤—ÀàÌÌÀugFΙ3Ø£» 9‡èlCÚÄn´Œx0ªóÁl÷ÂçõÀëq¡½kGøPmrõEYž]¿qùÑ–ÉÆ²+Óžê »P$IPÒúOXé6ÌÐØ2ûö@ºGgKañÆÑ=g·d m²†C,D€ðÂïu£½»/±÷’Ú^Öê1‘ãÙõ²— wYÞÂç~óþ7žûmñŠÍ¿ÞºYÔ×ïIÞl‘Ę́§Ü1{ ¦ÃPøÂt>ÉnÏ8Ƨg¡·„!71¢›Æ€ßïeχnÏ‹¯ü~óÚ-Å+È‘ûXÞ¬wòî[[žH$vj3š~j<º i,þL(9Û÷„WðÖù¤“ bPNF ¿°>¯ÏQoŸ}×;xâ¡ÿ/ع³àI±XH$“l„4ÅI6ú$\3ìö‹$á $ÙL$%ágçÍì¼ÝŸ`×ÌÁ䚅͆É1ƒI[¯"Q ¨¨øÉ‡°aÃÆÇÏœ9ËoläéZš›Ô-Í<5{'P·4ñÔM Ú'šxwì7ehfðÕ¼††4uuõºÓ§Ïð7n|þñ‡À>ÌŸ?ÿ©¼¼¼u‹ç®]¼xÉC‘››aÉ’¥k—.]–fùòåë,XðÕ¼—ëŸqEôæ­8wüIEND®B`‚PKa—|7}¶  Toolbar_Stats.png ìô‰PNG  IHDR szzô pHYsØØnGc5 ÅIDATX…½–wtTUÇGPQi " .èŠJèÖ A\×u‘z % 2@zh" K,¨¬.Ò’!¡„ôé½—LÊ€0¨Ç÷î›ßþî}/!{öÿØ?6ç|ÎïÞßKÞ÷×½5ç­¶§?û¸àZÑe(½u#rëv ))U‘Ò›7ÈÒbRrSÅ kUI>+&Ūë¤Hu­…ëÅhWq}•\+ºÂ¸z­Ä•k—¸Ž\øþ;8tô@ÁØ #ÚÊ2³·¿SvËuÿAšêy›Ã*ø^úH°±Žøë|„îëqÝÐ$Þ€‡ú„ºz?A ækñч‚~â«ó þ Ohj ‘Pã=¬ò¡P•»Ö'' —åìˆ5š ÷í. ¬XµŒÄÅ/Nœ:Ê¿óîÛäбƒ|N~¿hIIÏHãwï-äßSüèÌjÞhÑr:cm µº*N­¯÷¦Ç Ÿ7šŒü¹[ÿà¿(ÙG &=W__55Õ÷7+7Äʲr3åV‡9töë/àÍY3Éñò‡ä‡‹fÌ” ‹–Ä“÷³…á#† £ÆŒf̈ŒV-1Û ¼Á¢%¼…)tÝÚo±X¸¢òóü¢oz óÏ·‹ì¸ð.©µÞMµ¾)uSjŒl{VºÜl5†°w0ëÏoÅÜ9$~qY¹j¹0G1›Lœ8^X°’¬\½‚$¬]Eâ- f os™9“]ÏKpz“šÓ›5Ô'úmzÞî°a*ø¤sc„¥wžŠ$ë»Fªd‘´â±púÚžPbf\¬,sGš\­© üpèÈ~}Ò:á˯>'ŸŸ=C.]ùž8´Ÿ|rú$¹[y›`‰É±SG fʤli;hx‘µ†ùLVg·9ø.¯%ËŠ:G”Æ~ Ô½› ½!ß2²Šg=ŒÉjŽl[¦R^S[²ØŒP«­$ZC­€V¨ª½+TT— C ÛWâšî«ÕåÂíòR¡¬â–p·wÊo2¨ŸR[­&‡ÿ•N2TÓ"Ç=ó"Gœ 8ìxñ¹._žš'SÈÒÒSXõ °:LœKksš9³Í€Ùèx»ÓÂÓ½Íi¢~–¹Éª§>æ·³gfæ“üœÏëçnÖ^æ—ž{QX[Ý R´½`£Ñô‚du7È·Ž†ü’¿„± Ùæ-äÕ5•¡ÆPn çpÛx‡ÛÊÑ`,8hNMòÙx'óÑoä+çò:¸€¿Žóx]%gÁg^¯ûWü;.åü$aÙív‘ºîL4Y#²^Ýr-Ñ[òð´B¶is’¼ªª"Ô„gÅx—×NüXx‹ÝDEš}Ì'†úyŸßû«ÆZÆ)R¥œ÷{ê8—ÛÉÕùë¹½WV’WÛF6é{ÀÍóÿA¢º äXFBNɬ°œ¼q½¼²ªº6[ ¼ÛéáK5ùÕ©†¾°¡¦¬¼Ô[(¼G’/F )š>‘tÃ@Ø¢[ô:zvÚ&C^éÛb Ö'­‘—WÜ a¶PQu‡TÕ” \ åU·ñ4ˆûf*«Ëü}!囩Â.m,NøûpÜ59ß…jyd¿á¯pÜý>¶‹O§ÿ¨s.®ç ³™ïŒo9([ž–×F![—”À*ðãÃ{à x8—ó½œÛëä];zyæCð~à‚!îìÍ}|Ü¥g#tÝÄÞª»#hµÏÃFm«=EÓí“¥}¢º+d›‡B¦jzxFþ3xøèGÔû¸º?lpÞ€›sc߃æ£Ü ÝãÌN-ŸðÏׄU•€¶{Ët'kºKH{Ösñ$IÐ牚.e‰‚Œâ©À³ ÙZ)€ð£€Â|}ÞzAÞWçaCG×Ô‡ðî=â©’IÜõ'qÂ[O·$®3o¦žDÛ6i{²*åX‡C†jj86ÿ¹Çüôs›‚\#^Éx$9¼N9¼†Ùš^Ó|ÄÝ5]áã¿ë*¬«íIJLÂrÒ’&ᔋHS/DØÈÚBÅ £ ƒtÕ$1±wñ†€~P<>ïøxüÀð·—xýnºç¿ûú"’XÖ+’iÛô¯A†ò:d6c ÛC(Øn;LQe YæaH³‚\o@vI¬x ñŸ<e!—ǵšJ¢7赦Z(üv¹ðUñ!Áb² £•œ¼’MrnËqêqªsáNõç8†'à˜ë}6é”ãîùÈp Oå®Oz Ïìµ_WÃþ;ñâ)X›¸Šµà—_G៸‡ÂÜÁëÈœ ²ÈŠ ý„[ sÀ%]&$Tu€}O,g/‰pÿlÖ÷–xR /‚ÒÐè÷Aiì iS?Øbz‰‘fê Α°U5^šÄÕ,~ø_ðÓ‘cX]Ñ¿².Î&+J~'((¨ë ©z éE1%Š¥1Á~(HŶšú£íéæ—ÛÌÐö‡®Ñ°E5.›×^!KX¿B^[S"¼Uëø…?´‹¤z²l”íúŠn‘øËÏERõ}"¢(ÀDŒ¢ÀVÓËŒtóTh›y l³ „ Ë+ŒL뫌 ë+°Û=îq)”1U•5M§ÊSaþ¥6‘MÆç±|½[J›jìeÃÒû0hIÅÒÒ²öCa ÄŒÙbf[1KÊ6 aÀȰ@a É´a ¶°Ë3ÒT£1€ YêöÄ{¾M e–gç3ß6ïë1c¡Ð6è/´ƒö ° ¡v§cìvLD&Án'e2ìqL½Î©°Ç9…±×5 ö¹¦Ã‡h?¤Ö= ŽÖ½Ù¥òpL~ g䵟½ùʘ_×ÀqÏ|6±'qROxĉ=僓^ôyàz|ì‹—ˆc|â[ŸúÃ'þxdœö/Ó¥Èbø9S· >«[Ž}ÈgÁeðM(ö•ÍOÏm«Å´W(U£Â¹Ž¡Øó>Ò´öKj‘†‡–KIɰ´.ç«°bÿ#c‡ý5dd9A6c0ä8E²C ×9®!°×? ”7Fˆ-˜YÐA‘Z<2\àŒfBÒà4Ív+¾ÜFÁ—Û1²ì¯3²íƒEÇF®3 Š ƒ<Š [ÊùîPàŽF;> LTU´@aG :\è,+ÌDÌ¢ÙØEA*Ô"†B9-bCQhƒ‰¡@k& <ÑÌRëLÆF„gæwTÈä9ÏÍSÞˆþùCÿD,ÑÈsã Ýø2Š_ˆPÀÀx)#a'²Ë7 v"»|£a·Ìo²«»ý£à@ÃtH-þ³<§ý<Ù Å“–|ù’/W3òt„m3ºÖLj!_O™,Ùf&2òôþ‹\ÆxFµºq°øl_ß ¹m&Éd²':™ýtüô´Žgb¶u>ýÆÖÎŸÆ oüOtúMþ„Ĥw:=MÙáÌ`Ô”ÉÚt”I?Ï ]®ÿ'ºHš² ý˜Ç÷$²IEND®B`‚PK ˜|7ë!’Toolbar_Transfers.pngr÷‰PNG  IHDR szzô pHYsØØnGc5?IDATX…íViP”WýD£ˆ™&Æ ‰ Ah Ž2( DEQTHTˆ²ê„¥»E#qaÐn6eÕˆ Š ‚ Ñfmeë%,-[” (QKÍ”3™3·)23¥L¬¤¬òO¨:õ>º»Þ9ïÜs¿wÌ›Ä%ÿCÀïð¯!mÿØEŽ»:®äDxoÙë½ÌÖsóêÏ †™ôZ¼k¾}Š›÷ ÃŒW36Y1•Ÿ^PÜØÕœ]ó“gr%bÌÁ:$ö!YO6¬\x$dÊï emÊÓ×2å9h±¹Iš&¼ fžÃ&§Ýüõ;â‹ÄA9\–á›ë¶ôCÜ7„Ë²Ûø:¿¾ÙMð=]ûC™0³ß#šcd¹tdßÔT~U‘Y™›&››¬Åæ5hšò~¤Ï Éæ=™ kgr<Û†¾æah¡Gˤ6) x€gÏ!}ð ÕŠA”´v#ãºGÊäðË•à˘Xº| c´ÎZIr‡ÅÒ–³æ[›—J„C£¤ õŸZ¦ÜáI ],Â2‡fT?”w"¤°™"jº ¿÷’ûO!þ ·‡QÝ9€›=? @¬@t‰ »ÏIá[ ‹mAÔXã½)SûX,VÁÄ1K@¤óèä„'$â¡ÆRÎ×.+?V]½+Y¶%ḙ7œßˆäªV·õ¢¦g7B1üí÷AÜ;„î¡G¨é¸¤J) ¥Øq¦Û"ÎÁtË®†Qyû‰îGŸ“~}ýñcf€J°Oi?AÄè|þމK°ŸùWY°ŠÁíT-" Q-ï#¢Ç¨éDËaÈB20 qÏ=TÉ¿Gy[¾ùVŽ¡ž$ÀQP]ült}?ÀÇ:¶F·žžc/‹µèeL¸5M¹çȉ>Zö¬›1žíÁ—Y—À&¡–NS„òˆo @q÷GÔÜDCï]Ü Þ$ÔÞú’^\jº…Üú..–P([á’(ÂŽ¸"D§—mZµVupžÞÚˋʡñb fŠ)oyüuá†K̼^~Î'pèb3bÊš)hRœkhG#9p³ï{îŽdByúK-D^×Nß+À§NÙ™Ó·“pχ©CÀSfþêùÐûHŸD Ë_ÀEµ/ 2\dÞß ±xs ‡™Ï Ø%ˆ°=«Üô:SÏŸ¯ï@1uAž¸¥d÷5ªy­ç:p„¥Tµ!ýzŽUv-p=ÑHQŠ5ÜL7··‡úuÊŸàÓ³`ÊPÝuFBÈæ¦0Ì<Õ%.­ÌÀÖ”zX'ÔÀ)U„0a3²k;FN™INœ¸Ú6âHNœ>“ÓÚ´*â+äH¼Ú _r€sJŒ/%XáUÛ|‰nbŸA< ˆ!hüo 4È…£ä‚€a>˜dÉ v ÍUä¬\‡sZ’®v §^A§UP»u‘ Ž—7!þr3’+%8}½Ç®È(€mˆ*ý>”ïÓb8.Ä2×ÌZãºsDË ÊE>ü¯æ<àMD1Œþ; ˆó¶ ÊÀòEX} ¼3MH)L"Òé-˜~\u ƒ |Nª”#ŽêU"A@^ šî µºöqÕp ¿K÷P̵á:a£Nä B0û…6äYP3kg¥f[º>‹eþ¹XFATž&¾²—dH¬jGÙ|üÊwùÈs4(hALy;ò%ð¿ EP^+l£Ê`ð V»|>ÙÒõ/˜«³ˆØ@(%3_ I9à1nü”þ×ϸTóÈÌç$>Ý_Daª§—‹œN׆ÈR9“°")"Š¥/’ ŒÚ.²DAE'uëc®Á÷Tœ"…°Ý›Œ5®ûÚ˜Mÿ7ÀÒßEÄ=„|‚êË—›k4ÕÄc3×3HmÏ‘ô£›üSa NŠˆ:A<²¹Ò¨Òö‘·Ý!ºB„2H˜/ƒWV k±%¶é"l ÏÝ.>ÌÜöûÕd"­ ‚Ǽ 5M<ÞÒ6ã±=ǹšÆv:«8áwl÷†Â‘ߊµGª`w¼–Ê¡ ‹§Þg[(Í#«ïÙf¸¥ÒmS…­‚r¦•cëþTlð ë`.<št_wŽ'ßë50xLHìf±fŒ9PU©Œ†ÍäY«8 7ïƒGd.¸q—±6¸kÂË`SgnÀ%©niõð˃—VG~œ¢Kàu 4#øy>s§À3µ ‰´—jÿ”Zû 1c"¦oMc{NS>ëZyî1v:ð³màI°w¤bÅÞ¬ ÊǶØ+H-—ƒ/$ŽW_—È ]¶GfÂ'"í™!禫³úYý£¤§µ“Ö|B‰úâÿ j3?ÇLИHÓÍÝ.^6^‡Woçc‰;Ë}Ràž‡´¢F+¨_ç3p ÍÀÞØ|}²‡#ÒTÿ¬}ž^…ÂÀ  ŸÅò!BS ýÊ‘ŒþTj- Âô9†fë"Že–;ûÇÞ·òŒÄF¿XX}@"8¡'á~ >¡Iy²ÂöÎÖF ³?ã½M>Ó§ÓHǼ4¼JÀ8‚*Að>a¶&†º†‹—š6ËØÊ_o¹}Ê¢õnç[»ç.°tL^`n³÷ϳõÖÓïX=‚öèS”Nþæ¡tÔ‰‰£(7š6 M¥+£î(ñî¨[Ú£P~ÿ§ÑCLPnô›x…¨_R̯‘½¯xãþ Lþï@›^œ&IEND®B`‚PKB—|7å$jä’% Client_A4AFNoNeededPartsQueueFull.pngPKL´$7ÿñù@ùô ÕClient_aMule.pngPK²°&7ÃáórLG üClient_BadGuy.pngPK# 7D5ÂC> w Client_CommentOnly.pngPK {7°½W½ î Client_Connecting.pngPK+§47Åc_°or ãClient_CreditsGrey.pngPKKŸ47ì6áÇ\^ †Client_CreditsYellow.pngPK"~7À†./* Client_eDonkeyHybrid.pngPKø£ 7ëP…ÇOJ }Client_eMule.pngPK…›47½ç†ÓÝ úClient_Encrypted.pngPKjª7,.k´¯ª ÿClient_ExcellentRatingOnFile.pngPK©7¶Sµ•JN ìClient_ExtendedProtocol.pngPKÁ“7ó•=!ÔÏ oClient_FairRatingOnFile.pngPKaTp7ôjto | Client_Fastweb.pngPKò±7ÑÎ>• #Client_Friend.pngPK"“7&Êóû h&Client_GoodRatingOnFile.pngPK“7¹Ñw›ÖÑ ¡)Client_InvalidRatingOnFile.pngPKò¶7v“êí­ª ³-Client_lphant.pngPK’¤¥6é€lÜþù /Client_mlDonkey.pngPKã«&7‚ÞaE–‘ ¾3Client_OnQueue.pngPK\®7ƒV| „7Client_PoorRatingOnFile.pngPK̪7™[štv ×;Client_SecIdent.pngPKF¡¥6†’Eþ4/ |=Client_Shareaza.pngPKôi7žÉ½!oj á@Client_StatusUnknown.pngPK9zp7:N¼=8 †DClient_Transfer.pngPK77[Ö{ÑYT ôGClient_Unknown.pngPKHi7@~ñ `[ }KClient_Upload.pngPK{u27áïî94 OClient_xMule.pngPK˜|7•¸spþ sQToolbar_About.pngPKË©&7XàÎíid eYToolbar_Blink.pngPKj—|7MgQ÷   ý_Toolbar_Connect.pngPKX—|7ŸìÂFM H  EiToolbar_Connecting.pngPKQ—|7[;É© ¤  ÆtToolbar_Disconnect.pngPK{—|7¼œ>"åà £€Toolbar_Import.pngPKJ—|7é•ÜH± ¬  ¸‰Toolbar_Irc.pngPK˜|7¶ñd† –“Toolbar_Messages.pngPK;žo7újƒ¸   NœToolbar_Network.pngPKp—|7!þàÊÆÁ ’§Toolbar_Prefs.pngPK˜|7ÃDq‰„ ‡¯Toolbar_Search.pngPKu—|7ƒ(¡/* @¶Toolbar_Shared.pngPKa—|7}¶   Ÿ¾Toolbar_Stats.pngPK ˜|7ë!’ æÉToolbar_Transfers.pngPK**ò «Òamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/skins/xfce.zip0000644000175000017500000012762410753565633021150 0ustar l3onl3onPK ÝœÏ6Ø=ײääToolbar_Transfers.pngUT ²ÎrFî“óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME×&: úðqIDATXÃÅ—{pTÕÇ?çÞ»{7»›Ý¼7汄IC$„$’ØE1¤*u:[¦Ûª3eÅÖZfG;m)qJ}ÀŒVZ_m1ÖNŒÐŒ<ºó‚²$$ÙÍfwsïé{³.¡aš”¶¿vöܹç÷9¿Ç÷þüŸMÌál ¨|@:ŽŸmÀ©Ë jVO@RBêvM*ŠSkÀ°¸p\Žd€ù·.j«Š©_>Ÿâ+2pèáHŒ“ÝCt÷ ³÷£„ÂQ€.ààñ¹¨@°¸º¤ÈËÚÊXÿZrs<Õ†ÊE/9;ÆÎ×ÚÙñ›VÎ Kà{ÀË@l&'3Yð°ìª²l¶=x_m,ÇíÒ-lB Ä…gp»t®©ö£ë6ÚÚ{E,fTÌT—¸¸µ ÏiäÞZ–WøP°ô+Ô‹ „T.* <£õo=™@Ð2[€~ÀŸ\ÚÓ?ÆÚU~l¶„31•=‘p†P.‚P”ÄÿW÷tŒ[i˜@x¸æÔ@¸¤3pNÔ.Í#ÝeKVÎÈh”Ž£œè:‡C·‘îÖ/Ø /ÇÍSÏ}€”2øÙ\»`=ð”ª[C}Ï?r=(/ï;Á¾ýŸòI ÈDÔ`Åòš~¸†ùþ¬ ^.¬ÚBd">¸f €ZàM»MõfxÓ8 qóêâ†dßþn¬ž? x€%ß×Àú[?A: «·‰Ì  \àJ`«ª(ÞoÜ\Ƀ÷¬&'ËÉêâ÷ïuînšês¤ü·N›a½x ¨üî׫yàîÕ¤»uºÆ]›÷™ˆ›À/€AK+2‚!L#Ž@¢¨¶Ô«ÀSö!m­¨¬YZÄï\…'=¡¨_i\Lû'ýüzç‡J:^‡®Ñ?æ­–.Òt•R¿×ßÄfÿèb˶?³ïÇè==Bp(ÌÐH”P(N]e.º]µ2èëãþÇÞåãcØ lN©d™Þb}ëí))ñêvUt·ÜІ¢ÚŠÆm÷íeÏ;Ǧ4À°öp¨ŠÐ×}¹”¦ 58:Šjg$lpû¦·ùËG}¿µ¢|ö_µá^``ÀîhÌðšF !M$)MBá$üý@Àð¦ÜþêNj…>'ë×-&nšlkî˜r~øÉtç©à½iÏbr2†TM¡šø’‚µ6¾¸[¡¦äñæN&¢ã&ͯ8|è%Mq@Zâ&Y¶0‡—~'0¥ü‘µñ ½ae óùù¯ZرëX¢Ù'ÍpÐ9[%LÚT LU"¤ÉŠjkWÏgÛ©r‡®±°,—5+˸ã›u(ª ~ùâ_Ä à§Àûsɺÿ¡ÝkÈò:#˜¢!TÁó1ŽwáHÓ¹òsydx](š¡h FÙüØ[¼òF‡´ä¶½ÔÜ7“ÕWU.H§´Ø™¢àLÓ˜Wè¡ÐçÆ¡§Qâtعaå~|Zôœ:_$%‹€ýÖè>+?ИéѨ¯È@UùL,iý¦®hšBIq6ï·u12:1ߺ/œËD´"ÐÊSIU¹!$B&#/vŒ”†äH`M¾ÍÑÀ Àßf+¥³}“†üZ牊LâÏ×ñº´‹gx$Ê“/`ë³­th·:å`Îu$»ÝR‡]¡¡.—y.J‹=xÜ:QCp&¥ípÖŽÎÅ$pxxúO¯e:P¼`U³¤H»M‘Š õZ¶[âdÿo\N}@ P”YVuŸµúýàå8ñÿÔþ ÇŒ:"ÿ»LIEND®B`‚PK ŸÏ6Æw©°°Toolbar_Stats.pngUT ãÒrFí“óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME×83¡gwk=IDATXÃí—]HWÇ3;»#”Äø‘¢(ESbú!R MC•Æ>奘’B¢èCD›&µ IiRl¡DƒÒ$-(¥j¢ Ò'!*Q›’jìn6ºËF÷cfwfv¦i¶ÚÝõk }éÿeæÎœ{ÏïÞ{î™3ðKXt/ý«-¤x¶QÒ}1@>àìÏ-òóó…]»v ‡cc=k÷îÝ y½ÞÍÏg & H’Dss3ÕÕÕôõõ 7  ®®ŽžžÙëõ² ¡‚‚ZZZ¨¨¨`pp€S¶ST\”±c]×þ‘»w_ò\Z ²,ÓÚÚÊîÝ»¹>8ÈÑ£ äælF /d †êSQ}*ÊܳЂZÂd|bœÎ/:)--å왳d YëTû|$ø(HøÏ0‘Ç‘¤h7LƒËß]¦ëR•••\üü"[7mŲ¬gÉ=“-™½/í%nÝettéA—òÚ6:/u²½|;uo×!Ù$úoôcÄåóÄJÎ\']Ÿu%ÚŠ¢p¦ã ×n\K²Ÿåȉ#ô|Ù÷pðƒ(ŠBcã‰õø|>N¶ œ[~ï0®v‡Û£·“ìCzˆ¦ö&ö½¶¼œµî„q”Ò¿H¡Ì4MÓú€jUËÑØ|ÕnÕ£¶Â¢âÒ/^¸45>77­iÚÁQˆJph6d\·XßÝøüKé­çeó¶’Ÿ_°|„þ¯ª®Ù§8:æO¶•µnÞ¹;}âÜïòËU¯øCQyùµ7$7/?®iÚ^`Ò]|çͪ]Ïs†þiAðI«õõu[^غbÕ½zf)•öIf‚œB;‘X<×ïu.N§Só€B ¥.œõÀ`1ðµ’â‹€Œô:.šbŸz¨nýöúµ ëôYåS°à Dió™„bIÚ×äÔÑâÁNw?§4ß (È]ÀWÀQ pg€ÓÉV«uOÃÆgëkV<¦WUc+* Ýgâëê¦+’À ‡9wâ`4dx¿«¶œ«¸ê ö©a„‰ÅRl³•}Ö°é¹Õuõ zU…‚<Ú¼!\F„P,‰»Ý!çZD|.Çai®eÂlëpÁ­ëÞuÏìX]³|¥>gº‰ò¸â40Ì8]Ñ"a“³-M¿çú·"ò¹j­{Ju]/±•–7?µeçÊ5ukõª ãs¬8<]xQÌî$žv‡œmmŠø=m‡ÔÉ3~º®Û­Öœ77lݵ²fù ½zZ 9ã,\u„„b=Ä"&g[Ã~oû)urwVÆr‹eœÍV:õØÓÛw-««[£Ï*/&•Js½Ã¤#%ïÅçrÈ™–¦°ßÓÖ¨wÏÁÿA@·èµ5«ê—ÕÖÖê³+mÜLÝÂá Œ$wß 39ÓÒ6¼Î“Àjì&k ÜøË)=² º’x²Wg˜Ž®±D~÷ŸrúxSØèp~¨NÞ™ÍGÅ þˆšÁ[Fд¢ý£=Dâ½$»Cœ>ÞøÜ'”œÙ~Õ JqÊoø‹¼>cAïM݉'µXÀ#'›ß7 Ÿë=àã±Î-8M×õý§”\š9÷!³¬b†¡iÚ~usicW‘* RÉêÀü?¼œïj½ŽéNÛmãIEND®B`‚PK Ï6¶ŒsVVToolbar_Prefs.pngUT ÏrFí“óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME×(*ÎÍúãIDATXÃÝW[l×þöœ™Ùµñ®½ë]_ïÅ—XÁ` âX&-U /Q¸Tª,êCCB¥T<ðÐJQ„4•\à¡T¥Q j‰dÜTU¨"²•L…š44ÆÅÁ ‚Å·½_fo3;sfN²vH¡bìTêÿ0sŽtæ?ß÷ÿGçûø‡esQ½„Ç(¦iN¿¢ÕjÝÚ××wj```Ã[¶ˆj¥b^¾|9755u~nniÆ×¬„‚ Œ G®LL˜‰D‚ ®( ‡Ãü™§Ÿ6jjj¾·fí³Ùlß>pà@eff†g3^È繪ª<‘Hðýû÷k@à’$Iîµbîííí½<ùÉ'ÏËå2Çãüðáü3¼äõz7¬Yéívûó£££z&æyY抢p]×ùÑ£GÍ@ ðþ˜‹÷OÈJx<žþžžJT@)!’$™…BámMÓR_ñYƒ Ç !m @E§Ífƒ(ŠE”R†ööv*ËrÝW´¬¯»»ûÏûöíû±Ëå:ôÈb±Øx,¡ÊÞ0 0Æ`·Ûáp8z¿´¼1 ¾ñ£—^!Á`ð`õÞøì±’¨­­ !ÏîÝ»·Ö4M0ÆÀtš¦!™Jmöx<ß­¯¯ßÎë÷û|'N¼úêà¦þ~"‰"®]»¶.¿ )¬@.—» …¦MÓ|†1öÀÏçÃñcǤx<>Îd6%âqÞÐÐ@:;;±¼Ž1 +¬€Íf à¥R ”躾 B’$´´´Àív“@ ÆtMc ‘HÑh´ ²" vê"0GêÝ-;Ž9²…f0ƒq_%–ØŸ³c „BˆÇã¡%x(®:Ú8ø˜pö¹mõ{n©Å;w,'Ö«g€é:ôûæK•)‹…B¸ôÞ{Ó¢(ž`<Ô!t:¨{½ÛòÊOö7ÿÉþV±ÑiÅ¥¿N£ó7ÀM×§¦ð§wßE©T‚Ãn‡ÅbaÐuår¿;wW®™a¼Fÿbš¦ñ_«¡ÇN=O>.½ñÃÝîg{[/XëÛ!Õ·böî,Æ&û†qö쯊‡ãVN–Š¢4 Õ¹œN$S)\ŸœÔ)¥×ÊåòÏnݾýLJ’cw=mò7‘cÇŸo;ØljÜAHuMÐ 1Tró˜º1Sc%Ȧ÷×…Bá´Ó鬰Ñ`l¯Éy%$/ˆâ„,ËçÂáð ö… êA›77–§6Xß|qwóŽžn¯`uv@¬u¡"/@ÍD —R FžÃP'¯O~ à.€ €x«Úbã¢ö€Í[;Ûè‰C{Zvvš©Íå‡P낚™…–_„^L “+ct¬²xuº2àú—Ò+rDmNÒ¾uSío^ØÕ¼½««ƒZ]>P«j&‚Jvz)…ð½"ÿÅEmñÊTù—~_eÿð²þ̉·Ç+½~hOÛv¿¿‰Úƒ Ö:(É[Ð qèÅ$RY£µ…?UÇœ0»*¦´ÕI:¾µ¹î·wµn tú¨ÍÙ • ¤ï ’›+¥ñé=•Ÿ×þö¯Ò™*óùG26Kƒ–FÒ±1`ýùÁÝmÛü¾Vjsùa¡â2sVJ!‘e85®-|tS¹Pe][Þâ$mÃö±ìjôÄê\n2¨é*òX9‹éYÆO_T®Þ(ŽV™ÇVÅÚ€f`ëw†š}~/±¹|ÕÍï@/$ÀÊIJ§.ªóÏ”ÏW™'VÍ[@&oÞ¼«!;=Ý0ÔÔì,4yLÉajü̸:ÿ÷Å“þ µªæ¶ú¾‰( àùôbº’E4Kpf\™ÿg¸øvµìéÕ6·Kb¤'ÒúS±h´“j‹VÎâN\ä'/¨óNç_3Lþ&€ÌšØûåTûÚG·×5ßIZ×Ùqo.zïúíâ[.È}]?§]]]ßL&“6Y–Ó®Èãÿ9þ ¥öèפ±gIEND®B`‚PK Hj 7®¡¿ÙõõToolbar_Network.pngUT wI¼Fí“óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIME× x<¯1‚IDATXí—[o\W†ŸµöÞsôøìØuâØŽ£¸)M›†TjRÚ´Jii T.*@âž ø ü.Q%þD%$D+¤–VД8‡:ŽÏ‡±xuæÕknîZ%!ÖÍ´w‡Ž=×ÕÝÝ£´AiÍÞÏÕ- ¥2‰Ö˜Xá¸) 0´Ö8X°‚±‘A´Öt•òaÌA³Eœ(„”k@HFÇNöz‡Ïûµõ*Ðt@®ÒÓû¢ëzâÃ?'ŸË12<„kŒ£pµÅq5ŽtRf,ÆÎŽ PðR¥ÑZSÌçñ\‡R!ǽZca³¶V¥ÔUAæÊ€€û@"3-Üb±0ÜôCæ×î‘ ‡ÍÝ}¥ Ø 3?ŠñÃ?ŒñÃÅs$‰ÒGLµëFªÑÆr¯VÇó<úú{¹ýÅ]Ü\¾( ; x Kë¹ñ©Çùþ·/±´ºÅA+¢X´D‰Æq·}{!e–‚†œ,% cÚ²)mH•"Uš8Np=0iºËËk¬nl#]/—ÈÎa l×üåãkœeúô›»œ™¡&øaBÓOÚDGƒNSNÐZ“*Rº]Œah¨Ÿf³ÅÂò:ab°ÆJ —•€C¤Ö:¢„Ùå-î×›<÷ÌYz+ :ì5}nÎW b…Y±µ–]¥¹æÀØp?A!„ «\:dC©vÜä j;»­0FëŽó£ihãÀ_Lãø´ãæhø‡X R.2=1ÂÌÜ~"„Àb±ÆrkaÛsKÄqBW¹È7/?“ }XnÞ¸MÅh¥HÃÖnVm§Y@‡»ŸG¯Ó$ÆZËÐ@o[Ï´m½]%^¼0ÍôÉ!0)Q¶-JhEŠ05Ô÷|š-?“¡ŒÛÛ÷™¹5‡p<’°e¢Fu)Z`dV—U¸_› [{»I’’Ä1A¡²ƒ:Oc '†FG1qܶ$ŽI’„VÐØk¢²@TJá‰2¨$&ñ÷vtÖNS2^à&þ¾öJ=Sùrï´±–4I86ØÈšŽ±c,«ëUfnÍc¬@©”4=bIB_O•®r;”¡^o°¸¸ŠPWÕÙT¸?¬gu êHê4>8Ø^~ß߯é$I¸3¿ÂÛs¤JgR´Ÿ¾d·~ årñð?Qqýóâ·šD{÷î%ÍÚ"°´:³£sd.”©¿Ë\©GzÅ3ÖñœzcŸ³Ó§ØÙ©qýÆ4ýmì!*U‡,s}}=$©¦ZÝä“OþA6“æÚÍ?é¸9 ܶ€ƒN)¶Yk úAõÎûŽW:%¤û¬¤BË)rH!¸>s›•{ä E´Ž³L0XcÑFc´fcs›±“£àî9T訾6£Â½E`¨AgXuŽ Œ0&uØØZ–ùòi‹xâÜY ‚µÕ5nÜœE!QZ¡Ò´ iŠR)*IPYrýÓO™»y# jkŸ…;Ë{XÊôoe3Á¿ $Âm’ÖîŽ/7ž/•Åþ€V¤°tÖx´R¥ÐJ¡UŠVŠÀ÷Y™Ÿc{uÉë×ãÆÆß±f˜ªq§ˆ,e 8LºåÊý#—œÊðD®Ü“—NN)yDƒÑ):Mlê7šikw3ª­\³:Ù€•ì¹ øY >t1ñ€"0ŒSBºã^eðk^¹oÂ)öŽK¯Ð-§€k1*uÜj(wS{Uµ¶±f3 ¶E`3Ó?Ȩ·ÿi3r2`8³ãÀ@ÆN©ÓͲߛŒÖ0K³ÝÌéý#lëK“”IEND®B`‚PK Æ7± ¡Î˜˜Toolbar_Messages.pngUT cOÆFí“óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME×. ”˜èq%IDATXÃÕWMH+W>çþÄfŠ6jQü)iõ¡P•PE .K㢂‹ ¥-dùÚîú6®ÛºµÛ‚tñÜy¥Be…”GÚêFŒF$Æ¥O©oòc†Lfîí‰̋“LÔBé…Ã{ç&ç;ç;ßáÀ<°‘Csssmmm)¥3Brg§ˆ†a?g³ÙÏ™×áh4ŠRÊOÃáðÌðð°±>f)¥ç{!DS2™¼¿¼¼¼í ˲úººº^1MÓÓ©”òÚºú™ýýý”R:á @Q4 ±ft•ýê¹ ÆØåt×z©å¼˜k@n@:A¸ýÙMA¼ b @EQª#¥€ÎTzÍNºÜèp¾c¶ÌÞ€÷±‹RZ €p·666Ðçó]‹ zmY´¶¶B0¿ßïZ Îß0»Ò„B¡ÏÚÛÛ5d† ó$%hš»»»066V—Ž+Œ±C¡P+¥ÔSÇ^EÏç!ƒaÀ9¯ ‚Ù-MMMP.—à&-çšs>Ÿ,˪ȭ~níM%w'Ö*"¯Îçòôõzio$òZgX#é¾MÓAÄ«~ ¥§º(¥`Y€Á¼ÒÜhÚÝúc 8ç`477ƒ¦i ¥”†aˆ¦i~ÏnâüÙétú¹eY“““o)ŠB4Mƒ………?¥”O± Ï8çY#ÅV/B7n%clskkk¿½(ç|«P(|1??æZn½ú6ò³¹7“Éä/¹\îøüüü£ŽŽŽEQÞÖuý½¾¾¾G©TÊYÀm‹AANNNpee剉‰½‘‘‘Ÿü~ÿ¸?55µžJ¥ÀbÿVôUEˆBªëºO×u¦ªj^UÕ'CCC¿†Ãáw !¯÷ôôdŽ/)@Dy›ŽçæÜ–›´,KB,ö]B$ =‘H¨öž¸¢@J¹¯iÚpKKË•XMÓ„r¹ Œ±kýÜëzzz*ŠÅ¢–ÏçsPª°g `‚èºþíêêêWœó)%éííãããL…BAlnnÊ\.×pË6Mó÷R©ôhooO³‚ùÓ.)Èd2Ëggg¿™¦ù*¥t€sþ c¬ïââB®¯¯?_[[û:“ɬËËv—“ˆ( !%¥´b‚’=88ø L§³Z R±ÎÎN6;;ûI$™ ƒ¯©ªº»½½ýÝâââÙlVÚç *"ËÁ©Óª÷]ÇK2ŒD"orÎ?<<<ÌÇãñÇûûû?,--횦‰°XÅ)ºT={^µÉôô´ppðJé;¥Réi,SÓé´¨rŒNŽÙ-à•ÑÝÝmÀ³b±ø$‹ý}ttätHjÜ Ý8÷îôqŠ{²Æ·Ãÿküñ?²9‡òyãIEND®B`‚PK Ø´$7¡g&ÍÍToolbar_Import.pngUT XÂÝFí“óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME× &0¿µË5ZIDATXÃå—ypÇÆ=;³+í®VÉ‘ˆCBR¸o„!d° ÁvUpl‡ØæŠË&.BìJQ ñ9*qˆM0qR‰ qÀ˜8•Ì%° ‡$$!:WÇj43;GþÐ0H ÿ¥«º¦§çõô×_¿÷½nø/b0ƒ;v<"Ëòo(—Ë…$IضeY½Õ4ÍÞgßö@}@»iš_•E(Äk+V¬ˆêncš&²,ã8ÎMv}ßï°µzõê×`YVŒ®ë7õu¯à*’$aFŒ4˜aêÖú ~ýd4‡ßXCcUñM6¶ÕÈÐBŸÈ`¶mÊ”Ïoä‘]ìýAÿÚ¹’°®p½üÍ5ÿ ¡ªäŽ&wçÎŒ_ø,¹‹¿ŽP«x}mõ—?¢ºä ºÚÊõ²Tí§­¡òî1`YVoÛ%+,ÚpÓG0:s§f³oK8EÝJcu %‡~ν™ó°-³wkb@þ4 $ŽžIògPtì Ãã%2ÓFPzèeb“2Ñ5˜øDömÉ¥åzŽ#!„ÍÔ‡¿GVþJdwäàæ<'o–]n¿cÛ?3-ór_zÊìe?áÀ¶%T×V‘èU‰ñ{èl¯G 5 +ˆŠ‰#çÁå"ꪊ©ø`;§Þþ>3¿ôC2>·É%÷À±II9éÑ–Pãì+õåë SÇãñÐ7%ÉÅ}kßâíçRÓÐF‡ª“’1©÷ã˜ÍMu}o’Äú7ø†z8þÖ·¨(ü Ÿù3¾èþ0oâCÊ3—MOO™´«Ö8Kmcõ-6ŠÇGþS¯ÓÐfÔ„<Ò‡ûñ«¥ÐXˆºÄ´éÓ‘Ü^ê‚—ë4ªt$%‚Ú²ãìÝ’O{cu³×ËÏáàí#Î㉉uåO[2²øÜGüíôNæ¤/bDB’$a…uš®žçÈï¾B&9izs1º€Nµ] ÑÒQÃØhjBAæ|åeÆÍ]¢KùÃZp°mÙõÂý3—FHBB IHv| ÊÖ"$IYY477³·ðd§/aâÈl£“¶º R§,"XSHkc-'ëÇãmŒâåž\kÒ@‰!šJ’ÆÎ¡£¥_ì=]ìEø‘$©k Ù1fD&J”CD@à ©²µHt˜AZZ‚V5þx7q 1¼[ü‹vƒ¢”6‹q9Kqp8tÉË76îdÞ¯Pãd°tÝN{æ§n¡=¬Ú;ù'#LÕhárS1çê>¤ôú”OÓ®',:Pí&êô‹îFƌřê¿ó›÷_À“ˆÇƒcÙMUeóò ¨6S©¯»NÞ¼y]«u»©)}¿ß—-ÛäjË%.6œì¢K]Õ-ãQ"‰pù‰S†#é «7²š¸#£ˆ7ÏóÀƒ‹8]Rίº'¯nvÈ Àá]ß$)}.Þ@ÂM`ÛvW*.CýÃ\nÛã"D.C„ÛÃ%9OÕÕkÌJ]Ì}“–õü…p¸“”(ƒéY÷¢+CÈË/àÙç'`:­íí¼ôj'ñr±m9Ë7¸•°Öê®×E$¹²@€$„š8Z¶ü^ü1ÄI#é¬WÐC2K&¯dÂÈܲ€öæ+Ôjñì+JcíªUÌŸO(ÔF{¨µ#ÄЄ!ø|>’RÒÙ}â ‰Ü΂/¬¹Y 5CÝô“ïøz£Pbqlìã“’£2-ŸSYZ/2“²É™þHoö ?W|‚Ãu£HKKfÿƒÌ™=‹¦¦FÔÎÔN•ææ Žm1yâžøÚãlúî†^=/ý±¹õ&™]'§X–5Ùjñšg/”Tç?“úü‹«ˆŽrËâÝçé§žF×:xçÀAvïÙCnn6¡P;º¡s¦ä,YéL™:Ë21Dï:1 £ Àí¼óôÙcF‡Ö~ª9ذ!Uu$Î?ŒÛå- ™™c—‘ÎÖmÛÉÊJDzÂ]‰+1¶HšÞÉ_öî'3#£w¬Ûí¾}:U5µU¯[š³-Ž:Vÿ©ô¡‡¿ÌúooBëÔ‡Ó4zmR’“))9Ë›oþÃïâÉG—õ®¼g+oaàíæf¸‘ÇS–š·x®ªª¨ªJâ°Ìg݆äæf£êáp—ìÂ0 .^(§ârQG±:¤(7—©……x½^ü~ÿ[ðÉI_ú{â·§?7;›´Ñc8^XˆcÚ¼ôÊ/A\’‹{ÂaÖœ)"kæLZÇŽåÊáÃØ¶Ý¥€ý10ЉÀårðz½†¦iÄÅÅ‘š:MÓ°,놇Ë2e\(-% ‘÷ñÇDúý(Š‚èNLƒèï.Ë2²,ãõzŸyíÚ€ß%IR›"Ð#¿–e¡(Ê-“ÿ¦¸Ýîö®fQÀÐ3f|1%%eyWï„Bheee?€Ä1€pÝ¥ùµnö;Ä{€ˆn@â.°0 ÿïXLÌMIEND®B`‚PK %ŸÏ6&#ííToolbar_Disconnect.pngUT õÒrFí“óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME×9 ~pŸ˜zIDATXÃÅ—PT×Ç?o–7À²X–ŸÛ­d]c‘Œ%DGêÆ+M$ b‡VZÇÄ:ÚæÇ:vtlLš˜˜X•*cŠ– Êò«Ö¤±µTW4*"¤üP~-¸° ûãõˆ³‚0£Íýçͼsß9Ÿ{Îy÷~/|;CÔ#Ïÿûe¯ï>£ Šª ‡\)¼*I< ¤ý£"€-ÀÒ‡ Iøo'FÌVÈe²@ooodrÙ‰èr¹°‚äÂå’@ E’0~c „éÓøqúó͘سv»Aððð·þ˜›OOWv»ƒ^‹IBm÷pëы訙h"ÂÝVÒcî墩žúËW¹~ýýV+>>ÞDG=BLt$sô1¨T~Üh¼Éþy*-¨•>4uŠHB½}}L0^Ï~qŽ c /]Fd,Z´ˆàà`\.---”•WR^QÅ÷çꉎ|„êšZæEÉQzûQñei/>Kî¡#n¾ï ÐÝc¦äT9ŧ>C§Ó‘Ÿ˜¤¤$|}}ÇÌëíí¥¨¨ˆuëÖñÕåÿðÚÚ¹H.'ïû/[^{»ÝqOÿvšÓéâdq)'‹KÉÈÈàèÑ£¤¤¤¸‡á~¨¯¿Ä¬™ìxå ¦©<ÙýÑ%^^ŸÉÌïiÇá1~p'ƪZJËŒ¼¼a;wî¼w/Juuu¬ûùZÔÓlœØ÷ÿâŸ\ohd߇ q³wvv²gÏŽÙKöÆ$’—FÓq«ƒ_m¯`v\2»wïæôéÓ¤¦®â_ç눛€Lõ„……³`Á7óÀÀ™™™´6_`ß›/0;ZMŸÙÌï÷ÿõ¶mÛÀ’%KðööÁtéʸ÷,Á‹…›7›1 ÈdÃSªªª(,,äĉÄÇ?Î ßÛÝ»†Gu!8¶½gäÓÊfV­J¥¡¡adO1 \»~ƒ!»}òV« «ÍFhhèð¯ØÝMmm-Z­–Çs«ýCv‡ —ËÅÇ9Oõ—<³b%:Ž’’ì#ÃÃñÚlØlƒ“/Ë5ìX¡P`6›Q©Th4bbbàÆåìv'W®µó‡¼³ÄÆ& V«Ñh4( ¬V+žžžxzzŽøsN>¢("Š"íííhµZÈËË£­­35Ÿ±=+™ðÐih‚}Y“¢§´´«ÕÊÁƒÑëõøùùÐÞÞ>ìÏKœ|”J_‚ƒ©©©–/‚@ZZEEE:°‹÷¶?KL¤›m¼ãç8ôç+ìøÝÖ¯ QÇî%F#a¡!ˆ¢×ä3 —ËÐÏž…Éd¢©©énfg½Îö-O77œns?oî1Rxª™œ­o°yó/Ç0™L´¶¶2gö¬©oD ãç8œœŒF#?[›NÖ/²xa$ëÛHùI.Õçî·Nçö}OO[·n廚0‹‹:@Dx(O$ÕÕÕ,y2à ©ï„ …‚øùQRRJúÊ9,MŒä·oæó Þý €]»váp8ÈÊÊs*MbB<Ë IÂeª]ä|LÊrI‰QlØò W{9RPˆÁ`Àb± Š"r¹œyóæÐØØHvv6eee$,œÏ «Vâ奘ð¸¿'€ÅÒOî¡ô$J«eCv1!aZ”J‰ÔÔTbccY¶lÙ]ARYYIYY&“ uÐ žûQ2)+–ãååu_±ãàp89^TŒk¨¥Ï öÔ‘’ò‹Ñüu µgÎR_ÿï¼ó66› AE‘°Ð`~øŒÄ„xÂBCP(<'%ZÝÚÚÛé·˜ V«8{þ6›7¾„¿JEO¥¯ÉOý€eKcîíà¯ò»[ë®®n÷’vuãtº&F†uÐÎÕ†ÔA|°7÷Ès›ÍF_ß •`š¶¡!‡U’ ¥µíA_L$à@ËèE$  \“$éO€õ!ÝŒ$à ÜxËr!·u6Мõi½þ“t|i3ÙŽNЇû©fNµ€R¸~-Ý_¿ú]Œÿm?ªrÚÂp¡Pú\·Ìða—÷¶PàÞ‹é·¾Gëê›h¹q ú(ž(Å#±å2ªZYd²tܰžeì`þÒe˜é^ýí¯ñe°Ï*åj½ü5Íyz]\°"²¤>DD„é¾§ÑrRN-7ßBëÍ_F$ù · kÖÑ}g/â'><ýª 5 ¬ª­ÕÙ j#Ð l.Ë|±=Ç{ë6Sûö¢½!a†ö _Á¥tê5º¾qwÅó¡¶r|×#IMÔÐc›k«ÉÄÞà"`0Ðä¢@«ïÑâ Ö*b#ižKLìý=±±\´ù2tn¼3©>¢3“ݾ•c;"ŽmMe&ê $×|gORyw°•„¼‘„`T¥’ÏÉ?ý+ ·í@‚ ÒН<¸•á'ÅZE¬u„•ij ÚþÍ@Ô¼ðDª3Æ‚ª‡ç©+8"j˜‡øÞlËåQ¨ä\UÑô®çd½t—i·(ª2[ŒQŒQâŠcKóêutmº+ùTR[xë&.þÜ-‰ç•âK#‘ xƒYÕ$ÕvÁ µ^„f}Ef1Ù,…µŸ¢»÷~ü\žhrœ¡-ßáÄž'hZ~%™¶vÚW]C\,2qà”gJI›$EÇÁ§©`y 8š¦à40tÆÊɲ¥Ó÷\øk…Ž5ëyÏ7ï/ñ|è¾ïsâW—#âXéùñOñ ‹7ÝŽ1–Û¶URS&5Ri$Å’Fàuà àŠÂ: 'ôï­R¸n-—ÿðaü\žòÄ8÷~›þ|'Q)"ŽbÎfêÈZW¬$ÛÞNÇ5cft”‘¾¾Jþ_tü«Éð °ˆj+é``_)f42˜ØËüž•‰çÖ2¸õŽÿbw¥.Ll1Æ2ü»'éÿÖØ(JøvÕG°NŒÅÀŸ«ÚlÊᙞ[˜“îÈü@8k•K=!PÁ««£42ÂÐÃ?âø/w—Ê£•£D嘉ƒ‡ë‘âħž{ޱþ~"`/°¿jgŸ“k£sI\ì.¨¸)ã³:ã§t?ëLO¿Š8±U@ÖVåÐ`·“Ì@ÉQþ£ÀÌÜX`ØuĒꥥ àÕ´•I¥ªÈ*&NîiÎcà“A®ýÞtÒl»SÐçTDpÂQ÷û8b”)UÞ\ok½®:qarvï?Ü~+I–¶äËîØìŠ î˜ÂóF)«XðM5"©Çe—Ô¿; Üçâí<¸ÛÍ úŸ¨b.¾|ÞMCxU»»7ºw¯» s nªû”\Øw¸â3ç3†}ø‹Lü6C‰:#g€§€¯º1îfY  ¸X,sçyÜÿ“ÀK.{Ü02ýn§uÀb'&ZŽ\Æ]SÁù¿šŽkgˆŒÛ£|>ùø7“ÁIF#ËŠIEND®B`‚PK /ŸÏ6Zù¶Ç]]Toolbar_Connect.pngUT  ÓrFí“óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME×9dªKåêIDATXÃí—[LTg€¿³×ÃrÙFTv]H‹—… Å­à…¶r)[ã­VBi Õ—Zc >5›˜ML­éKcš4!@HŒ–MC)•Û©µÅ6uÁ–¢B‹ÀrÝS`ÏöBÄ]TžÚy:93óÏ—™ÿŸ~ø¯‹ðÈ·XD¬pÌ>à/`@õˆb=ð ±ÂåÀçÀƒÇ}J…b­N§C¡T¼Ð¨^¯—ÉI²,çß. „Õ«ÃÉ;œCDÄš'¯èƒééiA@¥R-,æ"ÒÓó€Ò²Ë¸GF…¹X<€(jÙ¸áeLë þ˲̰{„Û®vÚïtÐÙy à`7¼ÂæqX6£×‡! ‰4j5jÚLHúdY¦åÆO\«kâvÛAÁÎ;‰ŒŒD–ez{{©©­§öZ¯&&•±‹ä­[*ÍS††ÝTVÕRQõf³™’’R233 Y`722ÂÕ«W9þ<Ÿ^ø‚ìCûØ•AXXè³x½2ßTTSYUËGŽpòäIbbbµÕëõäææbµZ9{ö,_—;½2¹9ýÊ€×륮ÁIuM?ιsçJi\\EEE¨T*®\¹ŒÑÍŽm[—´_ò¬ý=ðÚkX­Vòóó—}ììv;fs<µß704ì^>À7~¦óngΜ!**jÙ±±±r»í­·~]&€~sµc0IIIyææ“––†NŒ«í÷åŒsÿ~6› …bÖ¤¡¡K—.ÑÑѱ8³ÏG[[eee´´´Ìõ›ÍÆŸ÷˜šžÀã‘ðHÑÑѳGqh§ÓIll,‡ƒ‰‰ ?Ÿª««‰‹‹£²²’é¹€F£$!Iÿ Ë2²,£Ñhp»ÝèõzL&>ŸI’ü|&''Q©T˜L&4 µZ=·ž7pQE‘þþþù Nqq1iii¬ZµÊÏÇh4’˜˜HQQ „……Ðßß?»žV ¼„††±–¦¦¦Ù¡AÈËË{â†S*•¤§§“žž¾°—ÔÕaˆŽBµg@©T¿ —ËEww÷ҢχÏç[Rïr¹èëëÿiù}`Çöd"Ö®¦°°±±1?ýÍ›79vìG¥µµÕO?<<Ì©S§ˆ1xÍš´|€õÆh^OÝFUU‡ÃOßÜÜŒÅbÁ`0àt:ýô%%%466’öf*Q‘ËÐh4¼{`/–øM||⥥¥ŒÏëÍf3\¿~‹Å²àV¼xñ"v»mÉVvÛ2g–g¹ ƒ‚D¿Ÿ @AAõõõœ>}ƒÁ@jj*¢(¢T*Ù²eöîïêêÂn·SSSCêŽdÞË>€V«y¾y Æd¤ ÿCÊ•46Öc6—“””DVVÖü@R__OMM .—‹uk8tpïìÛV«}þ@DNö~R’­8›[hoÿƒ >C’$A@E Ñ‘ìßkãÔí¢£Ð,2~033ÃÀÀ µêBC‚Ùóö[deìÂ=2ºà%}Ø|­‡ü|áõÊOx8Ä—_Ï·á%’$1::öD€»À/SSS[»{¬Ô£Äüô.ö4Óñ@ ¾Š|À- ø_€܉½%Ú—ûIEND®B`‚PK Ë©&7XàÎíddToolbar_Blink.pngUT ŽQàFí“óFUxèè‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIME× Ÿ£>lñIDATXÃÕ—Ml\WÇç¼÷æÃŸ“¤±Ç6`ŵj*,X ¤‘M…²€E‚„¤."Q• .X¡ŠEY°eâÙdÑØF"TABˆ –)Q­ŽIì*þ»öŒglÏ›™÷îaáw°Ç±uÑžæÝwϽÿÿ=çî½#¼€]ÿÝÛ'{Ű]ä¾jfùÈÅc¸_½õë*€•“gÀë9‹i±:¸"­âמ‘¤$‚ÉQïÝ»w6NÿRD®˜™¶ö‰fÖòÅHÛ">•ßQ©ãÌ#Š»©×3Ökaõä_'þôèuÿ0ð;wýdxxøJ___ºO“€suâ(Ê á¶âjóôö"5 #‰ço”“¯¥S•ŸJ •J©sn¤««+åœã fÆVùýƒ„ÿ!éÄ"’©ÇÝ$ý`U°%°ˆÑÓ%z"³õ­C A a&[WÚÎD„¤w›ØJxú BÏA-KlÝxR™·¶‚ÈIzºÂ´ APy^øÍ­£ऌ§›ˆöbœAýW@úqñ Š!R[Ç(òÒ)ß÷!~ä HTbÌé9…x/ƒgi”$PD¨“Jyâ·Š-•JI{A¼½À­©Ø€Õ±Xq  ¶ŠY±æ–Cd(ÚÀl•#Aì<ç7ÊìóÀw€6¡VU[\\Ïóö…¥)LUA웤éJ§P-ƒ<ç]ÛÄ“eªÕüàsxÚM½Æ~Céo ü´££#Ó\ÑGÚ/œ{•¸ž¤ZË¡ºL:ñ Õu¢(À¹ æ6PÿkÔ£Ìû6 Ë6üÆ488xBD¨Õj¨*G•ÇÞt¸Ø‘Я œ7‡¹-°MêõŽWQÿMLbÐ~¢8·“3ëñ<çqáœÐ.ÜÚ6D2Tãï³½ù%T>F4™ÃôÇ}¨'¨—¿ýä¼xsœ‡‘ ´ù’é>+ ‘z¡P¸Á»þauý< çø›ªþ;ŸÏß~žÍf¿˜J¥¼r¹ü8—˽yíÚµÕ¶"K¥Ò¹\îééébðÖg'¥Réöêêê?óù|&›ÍŽŒŽŽþFUGœs¶°°ûñãÇïÛŽIc—³Ó§O[__Ÿæyž +‹NU7fgg—¨¬íe¶±ak6›õ/^¼˜¼|ùòÇÆÆÞÊd2½³³³MNNþþÆw2™?ð?¬V]¹\v€A€ªÆ¬¯­×6J¥¨%¿qŸez{]nú?ñAv«`yyÙ©êËõzýòâââæøøø»<øã­[·>Š¢H666šaT Õ‰v±5æ’†OH>¿çó+­—Z¯1¾é[kŠN/]º”>wîÜwEäëårùþÄÄÄŸççç»›O»¼J«¸ï­UÐV͸ÁÁÁ¸†á{“““kóóóÒ˜TvÏÕýwCÛ£p·çÛ¡&Çì“=àíþ;üÙr{‹D'}áIEND®B`‚PK C´$7%©NToolbar_About.pngUT >ÁÝFí“óFUxèè‰PNG  IHDR szzôsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<‘IDATX…½–klÕ†Ÿ33;»ëݵ_;±Ç'qpUB †â@«^„Ú@A´8‰¤¥"&Hü¡´r­ªATib‚€ÞD+h(" ¡*„¢Ò*©É=] vìÄvã ¾ïzwç>§?ØD¦!äå“^4šùÞç¼ç#¤”̬'šÔç$žÞð‚gó.圪’(˜»h³¦©ûÚšÔâÏÀóügÃ91ké·-QU%ÞÖ¤Îþ\6¼àí‹–U×kËW”ªªÒÞÖ¤Îhm ÀÓw–DÏ|¿ýN¡~¦Žeþöd×~»¼òJ¥îK7ÎU±§­IÆz¢mwG昺}Kk«P¶Ü÷Í^%¯ê3ð|w¼]f¦)-ˆ*ÔÖ(ŠxÓñÄ€";U…Û"ïGoˆ§2 §B´Ý%ª¶4‰Å­kDèRÄÿî‚3õä*í@ý5Ë—êÖi¡åÑÓÓmŒO¼¬‡g]çº^À÷ñƒºÖï8‰~éÉÛ#ùÅž*ð’“ãa„?)}ÿ11éÿzý_¥uYmMêW"¹E»¯ª­Û‰ÿ „ 8ÜqÜê±A]m´ì ¶ã.(­,¹¡ñf= Hl#‰ãzLŽr¼§331>fHO{϶¼%ÝKغR}£ººæ¦¼@R8Þ?åX2HieZQ]«d’ãrblH œzŠŠyT–c¥ÆqU6Lzû‡Rét&åJ~øÐ6÷•KhkRkµ€~dIua8™L0îиâ~ÖöT>žšƒ§Æè<ºW÷“ųY¹ÑH8špÒ&‘Lqj ‘ö|ùª˜ôî9-ŸMá¹9&WËÓ¿z{3ŒîC³Gq›L:E:••yU ôžèòOö¼ëIä!”2„(ô}à*ßóeH }h›·ñLÿÝgX™_íùáh2ãh ë¯ENvâ%ûq]Û²°mDZñ쉾·™[Q¥H)Tßç-×Ðü¼I\át¼Ù®ð–Há_‹ôÿ5ÓC;¯»BÞ]*ŽÂ/(­RÒ{ÁÍ %8¶…iø¾OÚ rÂXÀÂp‚ÜXNjj:ݵ~›àOÐÒ"}`2«sê¼ ´þ ‘¼2µCõD+ SãüÞ7Ÿ·F30éãy#n)ýsÖóuϰgòjRäÆ,æBs{!€–é·´HÿÁ—’Ý ø®™àµ¡:îø ßßð Çs›°=•A¥Ž;šÖRTTÄ]«ÖÒg-š*/Æüf–TH¥“Xz9‹-F×uV|ï>޹_Ä Î¡»»›öövJJб <)ë.àükà#”bÂw3å¡`€íÛwpäÈæÍ%=1BooÛ·ï ËÅ2hBS¶®W7o“‡/Üû"J 9æØ6ÉÑ“t¼ÛÁÐÐ0‡¦ã½Ò'yàõìÚµ‹={þI¾ÑÉÜÒX¡n¿˜sá¢Ã÷<®Žvð—]/óâK¯`³gUqÐP©«¿ _ ^óïä‹ÐBT„§K0äàþO b~@•DC ]ñ½ÌžWÉ×nZÎõ ÔÔT£(ŠŠë9Äãq6þr3eùs"KÂïÜûÄÊÀη9»?€ïËy½c[ßžÏ}kÖ°úîUøÒÇ4 LÃÀ´L Ó@S5"‘ápˆÂÙó8: Å2};{DÑÃÏÉôÇõ¾àxr•ÈíOç‡þ/&'œCyy9ããcLNN0•œ"‘LL&p›ö}û0 Çuزy väŠÐ»#å¿;_ÿ tŒyÿÔBõž{Wc9&?ßøƒhš†a¦`¦ç¹´ï;HN8Äu×.# ÒÜÜLOºòÛ— ð¾1oíºu?W-©£~q-Š"X÷£õxžpBú>‰ä4‰©)®[ÊòåËI¥§‰Å¢8¾ð.@QBsÊËÊèÖ®½[¿ó-TEòø¦Íƒ!Lóø¥”¤Ó)r"9Üqûw1LÛ¶é=Õ‹¦i£— rÔ±¡áa `Ù7\ßÀšÕ«Ä03xÞ‡ƒs=—H4‚ÐéìêÆumÉ$[Ÿþa™G/@¡ !Âcc£­O<ùŒ5==M$'‚m[œ¢´´Ûþèu϶,®aÿC Œ°éñÍ„GÆÇÜ-„ÈB.5޹@Þ‰cÇÆÓ™ôæ6øà±Gà3ÌÓRJûœf@(€žMBÏ*•–•šB1ãW¿‚?…ßG 8©”2fY¿j†¶ìè3Æ;ç«,Ðc%k~@dVàß Áëaîßà½7À‘Rúçëý_õœÀ,PÕnIEND®B`‚PK {u27áïî44Client_xMule.pngUT  ÈïFí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×  +6„?êÆÁIDAT8Ë•‘OË1Å#)"4‹I©ÉŽ,,$kYÎ쬕…Oc¥|>ÊBŠ…,ý™DšfR,†Qó®ÈcÒó¼g{û{ï9‚¦i¼KQ§ßï üQžO˜ÿ”÷EñW³÷ ½ïƒr¹Ìr¹DQ§Óé ë:º®³ÝnÙï÷Ìf3>ßó>·‰¢Èù|Æ0 :«Õ Ó4Ùív ‡C×f×@€D"A¥Ra2™0X¯×_A—A2™Ä0 6› º®s8øKžgX–e°X,¨×ëT«UšÍ¦ó[3‚¦i(ŠâT«U®×+Åb‘Z­† ´Z-lÛf>Ÿ¿€^¯÷3Äç†`0H,ãt:a•J…H$B8¦ÑhÉdǨªê¼›xžÆb1r¹Á`Á`@&“Á¶mÇ¡Ûí"I¥RÉ¢¢(ŽÏçãz½²Z­¸\.˜¦I2™¤P(ÍfÑuý{ Óé”T*õo·ÑhY–‘e™Çãá1ŸÏ;¢(b†kX*•H§Óøý~ívÛ¢Ïçx<Ž$IX–ÅñxÄ4Múý¾ ªê ?á× ‡P(D(â~¿cšæWàSÿèýÕäì7 IEND®B`‚PK |j7ôžjÑÑClient_Upload.pngUT ÜaÑFí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× 8‰ƒlà^IDAT8Ë“AHÓÆÿÿ–ÎÍ­9Ýjnå¢)#ÍY®¡Eh†AT®‹Ô¥ ì`×`Ða‡.‘!tÂC=DPAáÈЂ‘‰C\Š*nçë †Œf}ð¾ï{|ïñt†Ç` Èñ¨†¬Vk. JKK‹ø|>Ñét) +Ÿ¬äõƒ¡?‰˜[[[1(Ê6%•JF™žž¾ôïÔ<ƒ¯×k‡ÃˆÙlÀårÑÝÝ pg·@—gð6N·-,,¸ý~?$ Ìf3v»²²2âñx¹ˆD å¿PyÀ¢5Ô:Åív ø|>‘ÑÑQÑëõÙ݂ݖÒâxüéUý`ï5TÖø]^^FÓ4DUUuÀ3 píDðìÓ«¯ú]*oôWQj2p&äUž® ë;;;±Z­(Š‚ßïWÖ××ý333¥À°Ã§ƒn§^ÑÈeרÊillht´Õña|MÓþT&“!™LÎ瀃@/ЧªŠ67vKÒãwÅë± 0 Øl¶­X,&±XLL&Ó*ÐXh‰«³o®ËÜû. \<ÆN«‡Ã.›ÀŽÎxÿö•#ŪªPí±Ql(:uïf“;ÚsŽŸ‹+¼~÷uè¶ ´‡örÚ‹pÚœ Uá=\Í'½|ššw~û±X¼,dðëãÔÒå`­Y±Yô Ûƒ67s &¾00ôy5“Í=¦öz¦ˆª*³õ5io®”Ö¦JqØJ¶€@Í¿žiE€ðÀ$þñ7E9Ö(PnÄ}IEND®B`‚PK 77[Ö{ÑTTClient_Unknown.pngUT z’ËFí“óFUxèè‰PNG  IHDRóÿa pHYs  šœtIME×!-Noæ5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPÙ‹o²IDAT8Ë’ÏK#gÇ?3“lú5²#›bn‰x«ö¢ ½I]ð¢¡=Í_P„Û£—BK!„×€—…Á ´”à¯hÀ„€d–LÞ™Iæ}§—š"ËBŸË÷{xøð}¾€ã8FµZÇ¡Ýn›B|ß×BlÛ¦Z­òµ1^Œã8¬¬¬˜ALyž7j4ïr¹\§×ër¹ÜW!Æîî®y||¬ŽŽŒñxüÖuÝ`<ÿÁïZk'À_À¯À+˜éy^ 0MÃ0 Ó4·¥””ËecŸÍÍÍôêêê ”_ÒN'''1€çyz8*×u[[[£P(àº.Ýn—¹¹9³T*•?K¥Ò«Ìszz÷z½l"‘Èåóy¤”ÌÏÏcYwwwضÞÛ¶ý ¨T*LMM!„ð=Ïc0ðôô„”’^¯‡)å5`K)_'¨T* étÚj4Ÿ ÃàùùÛ¶¹¿¿'N“Édb)eV)õ ¥D)5XÅb1Y(‚d29†áwÀý~Û¶™™™azzß÷ËËË7Q寮®b!ħÅÅEšÍ&V±X42™Œj·Ûï,Ëú{oof³É`0 ÕjÑjµèt:Äql.//óððð½”ò ðqii ®¯¯±,ëþàà€³³3²Ù,[[[h­ÙØØ`gg!···¬¯¯üü¯b†ïû–ÖšÇÇG”R(¥ÇrssC¿ßGkRŠn· 0QøvaaáÓ4'KQQ«Õèt:(¥¨×ë(¥°,ë‹*›€†¡L¾Qq~~N»Ý&Š"F£qHÔjµ`loo£µ&ŸÏãº.BºÝ.³³³„aH*•"‘HJ¥þ+F££z½þÿc´Ö¿\\\ µæìT[vÙKúIEND®B`‚PK ™j7ÆÜÅÈÛÛClient_Transfer.pngUT bÑFí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× 1¿BƒhIDAT8Ë“ßKSaÇ?çœÙòLíÈXµŽ‰M›1tnmEa‰ÝH’” äM]ôƒA”7Õ$ú ¤ èF$+°n*ÈŠe¡^„7Yð©h%ƒmçlçíFcŒ´¾WÏûò|?ð¼ßçUX_[F (~9þC»Ç.§#w´¹Vœl­ᆠ¡(r8[Ø,œÛKÔ¢ÁëKOŸÚ‹½¸I–ˆ^¢çÒ#¦gæ{€Á5ƒ\„ê\¥]Ç=(ÂÀʦ ºÊÉÀÍçó …€þ±Éoã‘[cäÌ/bŸ¸Üÿ”‰÷sø}nE®ßhþV—ËeÖÔÔˆÚ]š&€è¾],¸&–§oˆ¢"ÅÈ7Øòꪪ£Ñ¨MÓ4"‘ˆfêÅ¥$93R´Y–àÞj"QeÕ\e³Ù^÷õõ9}>ªª …¤X,V×Ö\á^<À6§ È>X#­$àL|±¸-eÀ3¿ßïÈd2är9 à©©‰çoç°²–™Â2Sé4£ofæcÀ/€íÀà®$Iæð𰺮 `r»Të݃v1v¿Cheö$°?ÿ ¾ç„Ý™LÆ&„@Ó4‰ÄàˆcË©+ò Ë"÷s%Ó L®”‚®¶´´Ø%IB×uìvû¡ÎÎΊÞÞ^–’ŒONMWk=@›×ëÝ©iåååƒAt]GA0$»‰D1ðr=ÀÊììl‡Çã‘ÇŸËl6K,ctt4išæðq£e:#IÒ×ÊÊJ‡E š¦YÀÀû¯Ï´¦MÀ  HSÀÂß¼Ô×°äºIEND®B`‚PK ôi7žÉ½!jjClient_StatusUnknown.pngUT \&ÈFí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× (KnS÷IDAT8Ëm“ÏKryÆ?~ï½Þ;¸®Ua˜š VÌ»h¸Åk#´¢…-ZDÐÂj1¼ÑlÂ…ÌBíZE‘›îâ"Å2)û±‘¢a^•k÷Îb*z™÷lÎyÎs8Ïã0M“‰DÀ/À8~-—€c`Ë0ŒÊÇ~Ç@$Àoªª®OLLhápX P((•JV&“i·Ûí àÃ0¬w€×á?ý~ÿëëë?œœœÍf¹¿¿ §§]×#™L6///ÿ>†aaš&º®™ŸŸÿZ«Õìxo×ëuÛ4MûààÀžœœ´‰„]­Víh4úU×õ€ÔÛÛûëÔÔÔÏŽL&€‚ÝÝ]ö÷÷ÉårLOOãv»ÙÛÛãùù™îînººº¤‹‹‹¿0 …ÙlEQh4<==¡( ÔëuEAUUÊå2ÃÃÃB1.€ðÐз··È²Œ$I(Š‚,Ëø|>–——±,‹t:ÓéDUU¡P˲ÂòÇŸ !eY–Q…••œN'›››ÜÝÝ¡iBTUýO(‹E¼^ï7 \.777är9 …ªª¢iš¦Ñ××ÇÕÕBˆ’ Ÿý422"^‹H’„‚ÓÓÓ÷sÞ²$IƒAÎÏÏ­———cl¶GGGñù|(Š‚—ËÅÒÒ‹‹‹hš†ªª8N<~¿Ÿ6°% è´Z­T*Õ\]]Åëõ¾3x‹·Í‡X,F2™l5›Í Ã0*ßH9 }Z[[ÓŠÅ"•J…‡‡4MÃív éïï'•Jµòù|¾Óé|6 ÃúŸ™4Mû}ffFt„\__S.—­ííív«ÕÚ°,ë[3}ÏÎ’$[–$©Ôét¾kçSR÷ïÒYIEND®B`‚PK F¡¥6†’Eþ//Client_Shareaza.pngUT ƒÈgÖwÒ4FøŒ(sAs°YUÐlƒÈ6S;ü­ê, ìŸ4ü­¾_Ÿ3]!ÍœpÆÃ$Ûº?³ÈëX³š½‘‡@ïWkmßpU7¥£(°{:áoÞñ|Êvnª2Ó̹ñÙ„O€ÙN‡Ž$ÂÛ9h½Þý¡ª“Ò‘]ñA„½2&4H wiàu£,u<–—JfJY6g¿êDxWŠé }tŸ.^-·Z86÷0â]4í‘Ú{eÿùüPpþ“o#IEND®B`‚PK̪7™[štvClient_SecIdent.pngUT pÞÍFí“óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:‡¸°˜„þÑI@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy@…·<]C,N¿¸3‹)QÂõ¼½±‡JÓ‡7—w(êÍ ¾ARñ†gG­‚bÓÜ÷L*¸×æl q’š=EÈ@ËCfæÌónkê7L¾óI¬}·†àC!ɘõBt^íÞµµ)e/óÅ;ÂÍ6]eÕøÝ«rýÿ=õ®é‡Œ‹=z’¡Å¼<¤{òZ—6¶C«ù÷½cûú(Ù¦V؈ó>ë‰ÛEæÖ\“»¸åÊÍ‚29†}§ûùøÜr™Þ½ÿ}Ò„Â2¹øÃ_CZ\×+ÆÞe‘-ןY´æC÷{צO¿·*/—µßzΗñЗ ž®~.뜚PK \®7ƒV|Client_PoorRatingOnFile.pngUT  MÇFí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ7ŸíR–7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïln_IDAT8Ëu‘_h[UÆ¿sÎíÒæÏíÒ•vëèMšnЖaµqYQÑtÎ'KÉžŠ0[öàÊ@§(LË|÷`*(¸‡Zd¨ø CÛÚMÆæÚÎjј)­k—Ò4¹Iî½ç&÷Þs|Ød8ðßÛ÷çá#¸‡ñÓ§píÚ|cô}!äA „ü „x!ï[91öÊüäž Ц(Ê/‰þDHÓ4Ê9G6›õ¯/Bˆ}Öãñ>ño€¡ô`'cì!Ä!JI1ÑŸlííí¥¦iÂ0 ˜¦L&#þÈfsRÊ0!äk!ĉ©ÉÏo(À=3JÒ4Ì/ÌïŠÅbà¶ »ZçÜâ¨÷7ÐÔ@[$¢a~a~ðêÕŸ<¥ ¥ž'žˆD¢Ä4MD#…B0M®ã  ¢½½;ò›ØÙºº®CUU"„H ¥ÀpOW7B@H UUo¯ÞQKK+„ „"—»…üVÅbMá0ðŒÂ{9‘LR€ yG3 ø[`s”+%ؼ Ã4P(`sÐ"ÕK¥1LˤD8F>Ÿ·9¸mÁ¶92™ßá«B/.¿{Ûm$ëî骖týqÀ¯èåÌJÅbÕš‹[°¬¦®TQ±ìn”„@xVWVm‹óן¬¬®âïµ›¯{‚îr<‚mÔÔ„‚?kÝ@½Šåµ2ÈÖ(¥ @Îvéx†w_ ã§O‚‰iÒÄB~±4ùâÉ}Cg…¾¼»ýáGrÚ&ÔTMm}äö· ¥DRŠÖ{먛[K¯?“IvÞ!ƒÛwFX)&©«»‹LzÈÞÓÄ“Î[ BЫ(¥¨i¨mB¨Ž©Ñ®vC£[M¿‰e{QJátZ Y¼>‹îîÇØÃ³¡€…A¼^áPˆŸ²QqâÓÞ3¨jj¶’ΤQJQQš|>KÏûà6388ˆR ­ÃÏô€BØR‡ `Uk‚ÅÂ:ápår ¥Ùl–ææf^<öW¯NQ©TR¢•B  \“q)ŸË3?G)…mÛØ¶Íѣǘ˜˜ ‘ˆcY•JË P,ÉçòàtNy;/³±¡I‹|®€Ó颿¿ŸÞÞ^––oMÓÖ°2“$64I™Êeùf_ÏÉ_/ U›¢?þŽÖšŽŽ'‰Ç—(•Ëh­q»Ý†A:‘¢°RàÒ/#ë_~Ñü[¤Æ;›bׯfŸÞ·¯Íõçô<©Lš{CõxÜ</.§›¿ÿJžYåóÏê±Å±†'/Æ€¤àòìHÚe¸Æ§­5[ƒ[BµuØY›rºD1Ydyv™Ñèß|ùÃFôÊÀ'FÎ}Ä”ØÔ•* ñ©]Ïݽíž>—¯V ih´*l²ñL|â«èé%`˜´àÿòÿ»1(k@Èê†ùc®n•jþEIEND®B`‚PK ’¤¥6é€lÜùùClient_mlDonkey.pngUT ³Î[?8 ÛaïÏÂz`|—åõŠr}ù,#)qM”9wê¹ß[þâÒ•ðü|[¡!ÓtÔQt ­ó¢UŠ ¨žs@%[Õ¯ Èµ[¡[´,Ëíh5µ ¢(jœ5ÎÀ+'ºûµ¢þ"«‚ :¤„á&}WǾ×BåæÈÁ#NyÜž¥‚²,+P½«†)¬¬¬4ݺI˜8Ó7†)–¹Ì.üÖ•Œ/t/Úc@ýRF‚¹E)JIA©TºjwÖN¶-ãétzKj%ån?|(Ä-ÚFˆ<‚)ìNËOSÁcF«´c´Äš™³#Ã#–d2ÙæÞë~`µZE^¯7â¬qžijj‚¹èÜû×o\w<ZCf‚RRÊÌÄ»‡Rš{šû„Å'R#f&h–æž~Í4÷ß(¥’_óàtyu?ÝÌçù|øvþ¤LúóòhQìIEND®B`‚PK “7¹Ñw›ÑÑClient_InvalidRatingOnFile.pngUT SÇFí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ&Çkæ7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë•“]HÛgÆïûOš˜ÔZ5m4FòµæcVL¥cjfq¬k¯œxW¼ØÝ.CºA/¼œPØl a"ku"a¥”mltj)eÚMV-ÛÖtήÉìÚžßÿ.DAïöÀÃá9Ϲxž#؇á‘!îz4MûX•JH‰bF)õf,Ö²öîÅK{øbߢ\&“é^Üë³ú|B*)Xï}½|7ù £”ŠÆb-jGHôöõø4MQJ½*¥ø§£=î¬ýäSŽ¿Dak‹Ÿú‘_Ïw«ßVV†Q%„¸®”zgz*ñ»Ðt"zå왳绺ºÌB »'½)ª p<~ŒÅ0È <­°Šö—»ºLRŠÐÆÆ†éÞò„ìí뱕Ëê§QèzO½‡òt‚:¯—N'B)£ÏS÷Ý @]Ïâp8„RêLo_M‹DÃo„‡^kðxD¡XDÌÎqÌqËýû¸/_Æzò$Ï®^¥èpðWæÿÚ+H§Óä²9²¹Ü†Ô4m =—UvJ׮㬭Åâ÷cñù°µ¶b®®ÆívSº2É£õ?0 ƒOƒ”R^4躆Aá›oihk#ëÞ‰ Âá0†a°09Ƀþ~ŽlÞùì‹/ì˜gÈr¹<2;ó}>•\#óÕ×T[­ŒD°ø|TUUQYY‰µ¹K €«ò0Õ·ï täZ2§”zOãkÉä[ë|´ÕØÖFvv–c—¶=Þp R^\äh0Hþ‹é­Í'OÞ>“±XK®{*q­I3k‡…À‹añùp:ÔÔÔp0ÅvêN“™ãéM­{*ñå|¦5oB {;:LúÍ›oÜØéèèèžØºù¥³“:¿_[M§‡¥ýb ž;ÒÔ´ŠD,&‹…Ʊ±Ý…öövææævg«.YZbùáÃ|6•j6Ixß›sóóø‰=C¡Ðþ_Ã90ÀÓÓ§q¹\æÕTêC1騹sG*êë·¥F±¸];ýþY>O&fyeåo1C €ü?$ ý~`BŒ1tó>IEND®B`‚PK "“7&ÊóûûClient_GoodRatingOnFile.pngUT _ÇFí“óFUxèè‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDAT8u“ËkSAÆg’X[Ó6M¥ÖGŠ`)JtÕÔ…¸ðA|mêÆÇÂJÁ;ÿW¢;qçÂhU\hT¥ Å÷«Á&m“¶·÷&޹Dž¶KÎb†ó}|g~3¢ª,´l6½ˆ‡2¹¡…z ª„>„F`A™M`³ém@!”É}ú· y`-¡L.øw¾XÊäžýŸà;ðѤïj|ãC³jçIUmÅçû°³÷¢„u7p蜗À¤¯Ó²éˆtiZ ájÇaâ%Áð-¤ZP”Û¡½2³S;Æ7?‘ŽC"˶Cd Øðß¡õ‚lí!°¨ Öjæ l6mL}²_šÖ€º æo ö'H“J"9n³i™£`³é­Ža8ªH£„ëÀÿ "¨uPõÀæai€lCÞÞJ_E¹Ê(%„*ÞjK`¿‚ Ó` L@P­è"„F”x-F¡¡mHºvk¬ÂäDžXÔåí—¯£„ŒOwûÖ¹?Þ\~ß»çlÿ…Ïó(øÙž4¬¸rã×V Å<]]ݬ^•Âõf~õ‚âX±oL˜ÑÑ_÷úÏßýÆÞìG'±ï}CŸtvv195E²%‰3ãà8ÓLNNÑšLðàá}¿T*õÔRHau×óñõ?-I|kinjÆó<<×¥®®ŽåmmxžGq¬Htq,lŒ9]û’¥ßÑ £ÕDk{û bÑÕj×sq=—úú¥ø¾WñH¥RˆÈþ9ƒP&÷,qøÎ7 thdd„r¹D©\ÆqªÕ cÅSÓÓø¾ªR©VžÎû¾õO=zœ»‰DvÖ *"ZsWFDŒµvÐZ{æ}¾@ú«4X°IEND®B`‚PK ò±7ÑÎ>•Client_Friend.pngUT hSÇFí“óFUxèè‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<‘IDAT8¥“KH”QÇÿçÞoüfæK…òA a%=ADíb´(ZÕ&Z´-(&*Í–-¢M­$‚ ’‘°l!eˆ=ˆ¢¥”©£3Ó73ßëÞ{ZØ[kÓgñÿý9œ13þ'¬ïEÑnKÐ^’¢–™­H™“º,¶b›”ó³P™‹)æ^ fÆAGãIûÄúֵɲÊrø…û†ƒÜ”›c°³¢®&±¼qµò2ÓxÜÿÄ‹”î<¦tv:Ž}¥mßÖ„m pè ˆ„ƒ±Ñ ì„ù´›„„tJák‰[—züBÞ?"[$Z¹¡¦®ªº:7 |pàC»_àÄ qDP™I°çÁ ÐÙ)X†à$çYŸFÆ—Z j]´¤*›>À f˜b0 (c9hׇö"|‡ªúf~ºÌbfIFÀä]°R30f ØQ:ð³ 6?·ÅZƒb%`°°,Io3ãÓ«+íÍt¬ ‚1ºÍZ]lAÒ“„B¾üüÉ;O–WÂ!Œ"Jà½ÏÎ “C¼n††Š‘ÁQ¡5ŸËe½×/½×d/„?ê"L{`efñJš1xç^…Qwй[¤˜2¼óå›Ñ‰W#Ó‘³j HÊY°°m”5µ` ÿ¾Ÿž˜º£~´UX‚nWWÍ¯ÝØ¸!^~ãy3p2 §a3îÞìóó9÷†bìI1ëß ¾™Øáê¼R§uÓŽ¶„ÿp†ˆ×7¡ÿz¯_,z]šq(õ D>S;IÂÙ’’Øá-»¶'¥¸}­Ç‚àü1ÃGfÍåoߨA´ß’â‚‚"¥ÚîœSÈß.o®< 4·ÿ¥ù ½Çг*HõyIEND®B`‚PK Á“7ó•=!ÏÏClient_FairRatingOnFile.pngUT ŠÇFí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖÚ2ã7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnIDAT8Ë}ËoTUÇ?÷œs[çÑBíƒÄ2šÌP#TÚŠ´%E° ( õ±ðãÊĸTcâÆã‚ ¢ ‰ƒš¨#¾RSŠ%qÚR@Úi ÅÎÜ1¹sÎuÑjÄßõïóË'‡ÿí£?@)…RŠ(Šhhh@kME¼óö»wÝ;ÿ¥”cðœ”ò= mŒyøüØÑ±úÅo¾Æs×#ùìº.ÙlŽ;wV_ïÙýè¹Ñ|¡#—Í5…Qx¤R)oÉOìf½¶ÎÚÚŸzò _}yµ)Ðc­ý¤X,îBê¡Áý ZkÂ0$—͹ ¯}úÙ¹W¥S¾Ñoì~ø‘«ss³›ê_<=þìÐcý{•R‰¶¶V¢HS«­S÷ë¤Si5š/4&’©Ì+˽/½ðÊùé+—yâà0èq]wo{[;MMÍ  "¥"ÒBJº:·Ó××Öš­[¶ñÀÙ³gº @’Rž>V8î­!ŒBjµ++ËÌÎÑÚð`&CSs3ÙìNgþÚü™Læ¡q×uQÖÚÃÛð<m JJüÀg~~·±S'ŸÁ÷ë\žžbqq‘Ûw`M&’h­‘£…|:•ê6Ö:7o^gò—If®þJ¹¼ÆSÇO µ&N3==E©´„ã8Þ÷?\º „¸-Gš\\º•™/fWo¯Š±±ôõö#¥KkëýD‘f½¶Nø¤’)Žä $“Éäòr©WJy^7¬µãÖØ=‰Tbª½­ÝB²ïñ}OÝ÷‘RÒù@]„A¸“0 »À®]=¸®{úèè˜R Ç!ŒB|ßG)E†T*¼ª‡W­²3×íH)?TRJff®ÇqF::¶Qõ<ŒÑHå>AàS­zÜ—HðWµŠµ€––¬µðâó/[!Ä…âìoqÅ«P*-±´ø;žçQ«Õñƒ¯Rù6ÆP.—c!Ä„2ÆðÓÏ?bŒyó»Kß kí‰8Ž%÷˜ã8F1aŒyK,\¿†òFÇãqß‹Eˆ>Æþ—qf;É¥£IEND®B`‚PK©7¶Sµ•JNClient_ExtendedProtocol.pngUT 7ÛÍFí“óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:‡¸0‡ºï£†Y@!Ù׈çüÜÜÔ¼ç¢ÔÄ’Ô…òÌ’ …ŒTwO߀÷)ªy@…›<]C,N¿íßÈÕ Ѻµx[¯Xç¬é®ilò‡Ò7¨¯PÿÈ[’ÿšs–ÞZݳN[,\Bš9ºx=ºï™þZvøñ¹‡&”WEíö^Spêr†q®ö™ÒC ÅIXùZ°NÈelç.ÛôüW­½v_ÝÅóLgÏŽ:ªéT¾[Üb…Åß?)Ó½Â3‹½G¾ÀøÂ’¼óŠÜ¬3¯ö‹}iZQP2/àñ™¬3*ŸŸçÿÈtÿ„ΪšugðtõsYç”ÐPK jª7,.k´ªª Client_ExcellentRatingOnFile.pngUT ·:ËFí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME×oiw>7tEXtCommentRyan Collier (pseudo) http://www.pseudocode.orgöïlnôIDAT8˵“ÍK”QÆçΫ©XFiô4dDáB)°M¼®Â… µ ÚEÿ´kç"WAº‰hå,¢ "£veŠù…C£–Ž:÷¾O ›”j峸÷œç9—ç9ö2üPÜï‡ãõØvs6¾,D™ÜøÖÙpÌÕ$4F™\²uhŽ2¹×QÙðÅt>WùœÕŸ¸%ékßaeêCéiçm‹ÔMà*кë~$~HcÛuK÷š> ©Z´ôŽäýcl}Nˆ‘¨gôJã* ÔÐþÒÒ×ÌŽ^‚T øqTCuà:ºI\µÉ'Ï*1®Bçê›úìÐÐ ˜m&󟑦q§ObUvÓgcûƒÀÇ8òÂÒDuPš?B´‚´aD(áŽY?÷ÿQ,bl°–‡d…IPý„°É"„%eÙTqp§Æþco¬ýÆyÕ1?T„¤ah~ûºú‘ ¶²­ÛD™œôcf0{„!­ƒŸ? X/¢ÉU’;eð.,庭øMÉ«û(?¡ü>XXFcK8I–²ËÛÄSÀ'R‰Væx«’ݳˆ.‚º€–(“›Ù¹‰M@KÔ³YðÙø9òÀžŽªÞQw·53ÿÿLÃñ@Ù®=‹_Þýíul‡›IEND®B`‚PK…›47½ç†ÓÝClient_Encrypted.pngUT ª­òFí“óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ  סÈ. l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< BGOÇ‹Óo/oäm0àa8X̲èü¥›’‚>¾ìE³åìê—±­]ŸxøHïኩ‹ßû®díÓ*mÜÌq€IAËü³s_õÒ“É?€†1xºú¹¬sJhPK ø£ 7ëP…ÇJJClient_eMule.pngUT ”¾Fí“óFUxèè‰PNG  IHDRóÿasBIT|dˆIDAT8‘OH“qÇ?ïk[lZél0§Ñb–9(¨ÏôròD¢˜Óh—/S3ø;½”¤ ÊjyãÁÁ6ÜîS©Tô!ù,ªËae1'ëŠö‹wèôw`µš)¯Wˆ>~¦ QòYT_{#m.;Š\&¹°B:/32Â}Ã[¾°Þ\Á`hn0Aƒ eµJ:/o Ôë7 Ô L”vIEND®B`‚PK "~7À†.**Client_eDonkeyHybrid.pngUT Ï&·Fí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIME× 1xWq·IDAT8Ëm’¿jÜ@Æ:ÔiH’ÜöQHqUÀ…ïê{=€ÞÂ*ç·Ðè-l‡€«3§‘ú)ÂlPŠ“ä•| »ì|óýÙ‰X¬ãñ¶wnˆ "˜f†sŽý~…õÓ¥(Š»$‘iúy¦é»$€¿@üöÞb3»jš†¶m)Ë2ˆƒf×#³ªŽì¼ˆÈs’È®(о,Ë(Øûq›Ùd!hðÑÌv"òè½}ˆŠ¢è’äÕ³H‚sn8Ïs8o™Ý9·Þ†† ^ ,—™}‘Y‚·Àðm°CÓ´óKðX¸T9¬ŸÀ6Ã;KN.‚.€Íüv6u]÷cÑÒB ûx‘ª’çy´ ŠîÍìWžçQ–e‘ˆü3³?Y–Efv/"?²,û¤Úí€é—Vá _ªªêØÌCt \tL#‡þD„º®û4MQÕ‹yŒ™ $Äãaáó÷44M‹÷óUUõªªÊf³¡iš³‚ñ¢Úq8ÜDÇãm8ÜL«v8çHÓ3OÛ¶SÓ•™çááûŒ1xoœNOœNO”eµm‹jdžEõ¤ÔtPIEND®B`‚PKKŸ47ì6áÇ\^Client_CreditsYellow.pngUT ½´òFí“óFUxèèë ðsçå’âb``àõôp Ò ÌÁ$å?ÿORlIÞî. ÿApÁÞå“"œ‘Å Ü ÌÈ0kŽP½ÄÓוý:§ˆ •¨‹Èõh l‰kD‰s~nnj^ ƒsQjbIjŠByfI†BHFª‚»§oÀûÕ< ÂCž.Ž!§ßN8˜åd(àz^åXRxG”×ö —R_úÿþ2ñ䡹 ¦c;õxêOŽ9íž°‡ÿƒNúŽô6nÙa{+½ëÆßûôËzzÑåþ/íÅú { ˜Vé5½ø'ÙÁï×}§®¼¨•|÷Ã'¬—½%ÎzËgÚÁ³QOÖ;\fÙ#Ϊ”ÆîrQXàdGÖÄ8æ? ¯ã>Client_CommentOnly.pngUT ÒÇFí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÕ 7);RHËIDAT8Ë¥“MhAÇ3Ý£H"-â±à) X+‚„xìEж'¯¥<Š Å õ"~€šŠ1½[M\íÁbÓLýÀÕlëZ‘Íx0C³mj+¾Ëÿ ÌûÏofÞƒÿ a’â]ú€àØVzxˆ¼©“—G/fwØŽ¶XM½ðíù9¶£WOJݬ;-ÓÞT@YXÝ“§¬ üèzØV_LKÇŠé7Äãqĉ¥?‹}MeM}ß'O2t힌3·„@‡Õz¥õz}ÃKA€›I­{Ë|-Mu=Û¶±m;Rìû>n&ÅàX‘ÅÇ^•—Q¥@ÏÈdcö¯æätÅ|†¹· UÊñsÿEΟ½0 ˆM ´ÖÒ½ \yŠ7}‡Êçï¨ù¼ï¦³Í7F´Öd³Y~ÉCÌ;ï>ÕYz=½iv­¬Ú4¡nK†!»?¦yô¥›û¹Ýò%;ûn‘L&q]—7•Œ‹\OP­Vñ<‘ÉG;+¬îH%‘H`Y–eEºxA,CkM­VCk”­5B„­Û¥Žãl:uÆd}ƒ‰›·¯Ÿú‡)ž0ÉoZè˜y üIEND®B`‚PK ²°&7ÃáórGGClient_BadGuy.pngUT ]àFí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIME× #/«5ÔIDAT8ËíÒ¿kqÇñ÷÷.—Æh¦m¬×BA¥‚K$¡v -ÔÁ u0úè¤*!-í"8ÔUu¯Ò%©Al‹¥*ŠæRJÏ‹¡5rwßsœrý |Ö‡Ï žð¿þU¾0+fæj=Ïœbš¦0MS»”½<èw›§nœÓožL˜¼>/âwTÓ45 Ç ðM^¹¯öÜXô‘þx)z|ÇŒèÏkÔ#úôƒÌú»ž‹‰ª'J ¸K‹O>oSçÓ„u£Re¹´þl_ ~tàPÆôpççLæB†ˆOAÖj8†ÁáPˆ3ñs|xó¶¿ùu×(îÖ_urÁàûññÇ\{{iÛ¸–…µ·‡+%CƒýÔ+Õ¡åæù®#ùþ…ht íö-4MCp]!2_ öòŰçü¸šB H)‘R „Àj4<¿¯ÕÁÜØ ”»JkuiYHÇAJ‰O×iG"¨«äùÉ…E>•ËØªŠÀQUE‰ÅPFF¨lmµ$ÜõõÍfŸ®•Jü ‡Ñ’Iüé4¿ûúØ,[v»½ƒ/@ä ³ ߪnïë•N ZÛÿ+³æÀ½ƒÂ>K²Za½´IEND®B`‚PK L´$7ÿñù@ôôClient_aMule.pngUT OÁÝFí“óFUxèè‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME×PöÀ<IDAT8Ë…‘KHTaÇßwï˜£ÎØd*Vd> Ëhу "£E­¢—¥QAÙ ‚jÑ2¸*ÈEQ‹¢pÑ" zYÙB-1Ÿ•ïÌ\çÎý¾95â‡ÿÿ9BkM°Â¨šLCÞ¹ê|Í]·?¸?ý˜«ÔCJ¿†µ®«šÎ4Ojþ‘ÐúϬvŸ¡MÃЮ"¬”{Èôø—)­-!„£µ.?~{| $ãÖ”(-£ëË÷¤¦ú3nÆœP²!åA)DU’G+ŒÂ`…‘7£ƒ¸ _ ;²$¿ØÛÞö2¦Ý˜4¤)…'YgäF'GEÄúÙª‡jÿâ xe9Ùìp„¡¡z{ºHõz+dy¦×õ2Q®¼¥«tq¶ ] `Zø ‹¢‚U¿¡-—ËÿÊ>h*Šz/K(K¨*Hk¡×ƒ~ÓïÃ`Ђ¶ïkqQ@Yb$ŒŒkPoP‹‡ÑÀjYEÁñù9O÷÷]^ðëáE½!„ð`½¿ÂæEKo„í8†(ÂZ³D˜4…ß1rŽŸ‹EÇ´§ÅãÄ1¬3ªªz]iŠ’¸n#Ï;=?£(ÂbFoÛÚ ð’9ÇÉímp|w‡œ#8‡Öžüo’­YJˆÌÚ·¢××€xÿí;Á9Ìfiºc i†ü % WW(Mëq˜ƒÌh! ,ÛÈóú-¬jHð¾öBÂ4½KXk_Z†§§¨I !‰:Tsó³nï&˜L:æ5nl6›6~iâÍç/ŸöúÎÀͦ‡²w›UžIEND®B`‚PK ÝœÏ6Ø=ײää ¤Toolbar_Transfers.pngUT²ÎrFUxPK ŸÏ6Æw©°° ¤,Toolbar_Stats.pngUTãÒrFUxPK .Ï6 ‘CC ¤ Toolbar_Shared.pngUTGÏrFUxPK ÅœÏ6c–³ ¤¨Toolbar_Search.pngUTÎrFUxPK Ï6¶ŒsVV ¤ûToolbar_Prefs.pngUTÏrFUxPK Hj 7®¡¿Ùõõ ¤•Toolbar_Network.pngUTwI¼FUxPK Æ7± ¡Î˜˜ ¤Ð$Toolbar_Messages.pngUTcOÆFUxPK Ø´$7¡g&ÍÍ ¤¯)Toolbar_Import.pngUTXÂÝFUxPK %ŸÏ6&#íí ¤Á1Toolbar_Disconnect.pngUTõÒrFUxPK ºœÏ64uq|òò ¤÷8Toolbar_Connecting.pngUToÎrFUxPK /ŸÏ6Zù¶Ç]] ¤2@Toolbar_Connect.pngUT ÓrFUxPK Ë©&7XàÎídd ¤ÕEToolbar_Blink.pngUTŽQàFUxPK C´$7%©N ¤}LToolbar_About.pngUT>ÁÝFUxPK {u27áïî44 ¤ÕTClient_xMule.pngUT ÈïFUxPK |j7ôžjÑÑ ¤LWClient_Upload.pngUTÜaÑFUxPK 77[Ö{ÑTT ¤aZClient_Unknown.pngUTz’ËFUxPK ™j7ÆÜÅÈÛÛ ¤ú]Client_Transfer.pngUTbÑFUxPK ôi7žÉ½!jj ´aClient_StatusUnknown.pngUT\&ÈFUxPK F¡¥6†’Eþ// ¤ÐdClient_Shareaza.pngUTƒÈ• ´ÐClient_Friend.pngUThSÇFUxPK Á“7ó•=!ÏÏ ¤(ƒClient_FairRatingOnFile.pngUTŠÇFUxPK©7¶Sµ•JN ¤E‡Client_ExtendedProtocol.pngUT7ÛÍFUxPK jª7,.k´ªª ¤ÝˆClient_ExcellentRatingOnFile.pngUT·:ËFUxPK…›47½ç†ÓÝ ¤Ú‹Client_Encrypted.pngUTª­òFUxPK ø£ 7ëP…ÇJJ ¤ôŒClient_eMule.pngUT”¾FUxPK "~7À†.** ¤Client_eDonkeyHybrid.pngUTÏ&·FUxPKKŸ47ì6áÇ\^ ¤ö‘Client_CreditsYellow.pngUT½´òFUxPK+§47Åc_°or ¤“Client_CreditsGrey.pngUT‘ÂòFUxPK {7°½W½½ ¤U•Client_Connecting.pngUT!·FUxPK # 7D5Â>> ¤Z˜Client_CommentOnly.pngUTÒÇFUxPK ²°&7ÃáórGG ´ášClient_BadGuy.pngUT]àFUxPK L´$7ÿñù@ôô ¤lClient_aMule.pngUTOÁÝFUxPK J4©vìû% ¤£ Client_A4AFNoNeededPartsQueueFull.pngUTêáëCUxPK((} £amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/skins/Makefile.am0000644000175000017500000000034612050266603021505 0ustar l3onl3ondist_skin_DATA = \ AdunanzA_A.zip \ AdunanzA_B.zip \ AdunanzA_C.zip \ gnome.zip \ kde4.zip \ tango.zip \ xfce.zip \ Mac_Gray.zip \ priscilla.zip skindir = $(pkgdatadir)/skins MAINTAINERCLEANFILES = Makefile.in amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/skins/Mac_Gray.zip0000644000175000017500000006014612050266603021663 0ustar l3onl3onPKR+Ï8Toolbar_About.pngUX œðTH[îTHõ9Æú‰PNG  IHDR szzô pHYs  šœëIDATX…½—ÏkIÇ?¯jºé™h+ÙDQ ®žt÷”\„U„ˆ{–]!àÅ‹óÿ]ps•<ì!9ñ¢xæ²°!É%ÁM̘u~d&qfººöàÔ¤gÒ=q÷AÁÌëêzßú¾ï{U {¦øÿL\‡ˆÇ1€u¤‹"ù ÃáC‡˜››cff†7nP­Vñ ´ÖZ+)‹Yk­ø¾ÏÚÚKKK\¾|ß÷©V«är{åsª K¡8@ˆ1†B¡Àòò2Õj¥SSSlooc­Mj ÿÅ®vVÝÜØŒ>`c ËËËœ:uŠb±H£Ñ@Dˆ¢hpécthc$©$r7§Ùl²ºº À¹sç‚€Z­†Öwh·ÛI}l8¦>© ’ÿ1(¥xÿþ=år€3gÎEív›|>Ïúú:KKKA@E™•EQ­G¯{8øÛ¥§ÙlÒl6gggdžaÈúú:³³³¬¬¬Ïçm»ÝN+E›y –Ç>X+J):NOlù|žÃ‡Ëãǹwï›››ŒŽŽÒjµ$™ëd:ˆ¡Òú€µ–(ŠPJáy»»»ÌÏÏóìÙ3¸yó&ÓÓÓ¼{÷®O”NOi¬‚^®Ó¬ÝnsäÈÆÆÆ¨×ë”J%Œ1‹Efgg™œœ¤V«%Å;È@o#™§a—¢´FDÇ ®]»ÆÃ‡9yò$.\àâÅ‹ø¾ÏÖÖ÷É^9û€M(T†jFƒóçÏ355Eh­i4ìîîé#e½RNˆÐ:’d íjæv°³³ƒˆP¯×{·# ÙˆúÖp`DÄh w%ë8diôw/‘ûJâÙйɥ¬µ¶ Ô‘ãzõõë× ‘ÈZ Õ—åÏòi­#áÕ«WÀš¾sçŽzñâÅæÆÆÆ‰0 §&&&ÈårJk-när9QJIÒ7Ì?lXkÕ£Gdqqñ'kíIªt†³gÏžý1 Ã0­$Ëë ˘kËåòæË—/5Æ,Ðý8uæ¾Ýë—0ËÇÜ÷âý ÎqKHŽÎ0IEND®B`‚PKëì!¸>9PK †,Ï8 __MACOSX/UX œðTHœðTHõPKR+Ï8__MACOSX/._Toolbar_About.pngUX œðTH[îTHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPK]+Ï8Toolbar_Bling.pngUX œðTHqîTHõäù‰PNG  IHDR szzô pHYs  šœÍIDATX…½—MhSÛÇ{ŸcšÔ¦1¥:ê+¹r‘"…‚–êHÅ¢¾¾‰(BEœH;¨¢ut'o 8Ј8zàì©PqTx(ø R;P'¬8¸W­-EÛhR“œäœ½ßàž}|€¨T*8޳âÏP ðèÑ#¤”ÂuÝðBSຮ6)0t r¹\à,‰044D*•Âqœ –nݺü/›Íâº.¾¾ º€†RJ !„ÖšjµJ,£­­?à8—.]"‘H,›‚jµ¤ ££)¥v]WH)¾WAX€žçEàyëÖ­£¿¿Ÿ×¯_#¥Ä²,º»»Y¿~=Õjµ)%Žã066<àÛ·oBkÄ1Ö ÂPÍ¢µ&ŸÏsøðaÆÇÇÉd2D"öîÝ»b”Ëe®\¹ÂÜÜ'Nœ ··—ÙÙYlÛÖ¦V-Ã0°H$ÂÅ‹9þ< ‘H$RÖ|k|äóyÞ½{ÇñãÇ9{ö,³³³øU%”RÚó¼Æ2 #«Ïk©T¢½½S§N‘H$xñâ™L¦†Ê°¶nÝÊ7ضm333A_ ƒ\ +¥hnnftt”t:eYlÙ²… .077ǧOŸp‡ÖÖV:::èêꢳ³“ÅÅEýþý{aÛvM»ö <ÏÃÔi¸k­)—ËÜ»w/pôüùsFFFØ¿¿.‹Â¶wãº.¥RIOMM !„°,«¦éøå-ÂÏRP¯¥ñxœƒòáþ|ùÂŽ;ؼy3SSS¢~3’R #Ì¥Rd*aIþ ­”¦555qÿþ}“þ¦×Ð E½Ç!³}ûvŠÅ"Õj)e²ëç‚•Ø1P;„r×à¬R©]Ïl&ÿ‹­¤†*–!„6sÜjöû^¦¾õŸ7¦jr³ìTüG‚¯ò­ÐZk¿< m€B¡ð!—˱iÓ&¯X,Zá æG›Âìl6; ÿ¹sçί©Têç 6Ô¨öGš¿][wïÞåéӧר;vuwwÿ«···/Za•ÿ@zffæëøøxºP(¤¡ñt,Ÿ€VþºÓñðÅ¥þ ìN"uÔØk²IEND®B`‚PKƒôiÉ PK]+Ï8__MACOSX/._Toolbar_Bling.pngUX œðTHqîTHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPKi+Ï8Toolbar_Connect.pngUX œðTH…îTHõÂ=û‰PNG  IHDR szzô pHYs  šœtIDATX…½WÁK3GÿÍÌ6 I*¦o…”õàAD¾?@KU´ ˆz ÉQ êÅ“xW ‚Áž¼½ ‚^h#¿øÅ<3ðÍØØØƒƒƒŸ§R© "\\\`{{û§³³³iZnð/&&&¶VWWs‰DBJ)c,Ò^XûW²Ù,uwwW*•~«V«ß[î»¯ÇÆÆrœs§Z­~"„xßàq€b>>>ª }»µµµd@.—ëH§ÓRr˲³ú¨Î86bYÒZs)%r¹\€´Q£&"0Æâ„çõk­Aô&}¶ fŒAkÍ€—r`¡kx’©d³Y! ”Š êg¡>rA@k ­5¹Wæ^½€5 ¬¯¯£^¯#“É ÙlFŽóADÌmÆg€RÊkþ‰¦sŽ ãôôííípRÊ–±Q÷RJ¯™4z|ƒÉ$ *›Íâìì ###ØÜÜD&“çÍf3<îÞÇF+Zk¦”ba6L“Rz¹¯Õj˜››C¹\F­VC:€ˆ f¥€”2rõ~‡~B`gg£££8>>F[[¤”pnj¾\(ÀÃ'Ä •RuD¥„8??Çôô4ÖÖÖL&!„ðØPJ1—9ò3ID/U¢œ½/F;F+++(•J¸¿¿÷ªÄ7?à×X‹_É=ùð›•ûûû˜˜˜ÀÁÁÚÛÛ=ßQì¾Z†ù‘‡ÍŸ’››ÌÎÎbyy¶mƒˆÌ"<⪠²}Ä16!ÇÁÉɉWóQispÏ„ÀâîßdÄ6Æ8çPJ!™L¢\.cff¶m£Ñh€snâ)õG} 0Æ ”Š nœ+¥ÐÛÛ‹ÅÅEtuuáîîÎÓ†ëDÄüQ€ÃBÔqìðžÝÓÓ[u*•B±XÄää$*• ‰„Ì?ÏŸÊ–i­$8礔bf¢›ÓÛÛ‹…… ÜÞÞ‚1FBˆHÑÆðm‘Ÿc†:cRJ$“I‹EŒ£^¯ãòò‰DD[1ÿÄE¥ÀˆRkí½ëëëÃüü<òùÚœ9³f²IŒ²Ë¾ì““3gÎÌóüÿÿç93ðo3øÿ™ôOöª€5À/@ {_l¢D©¾Ÿõþ©Ÿ‰¬76ðÇ–––¿566–»Ýîo3R…s”êûoÆNNNÒÓÓó÷±±±?)À¦Ó§OvuuKJ‰‚ßÛ”R588èlmm½‰DþlfŸ5Ÿ8q" ¥ÌÄb1§a””ƒ"K™RJ·\€aÚñ‚þ|‹Åböhjj:ÚÓÓó  þÁëõ"¥4Ç¢J)lÛÆåráñxp:B)…)%étšååeñƒ „”’ŠŠ ?à5„*;Q)Ñ()¥p¹\øý~Âá°zóæ˜šš"ãñxذa;vì`óæÍ*“ɈD"Ãá(‰†Û¶€Y´Xð’”R”——‰DTww·xôè‘øüùsNdúZVVFSS“hkkcïÞ½êëׯÂ0ŒüÅ•ž[da6”R¶mlÛV¶m#ò8RRYYÉ‹/hoo³³³ÔÕÕQ__ÏêÕ«Y\\dllŒwïÞÑÛÛË“'Oèèè­­­ÄãqòèÐëä²#‡€mÛH)Ñ y-//g``€ÖÖVÒé4ûöí£££ƒ††¼^/¶mN§çîÝ»ôõõqùòeâñ8çÏŸçË—/hmé5´F~¤Ù¦¤”¬¬¬àt:çܹs¤ÓiZZZèïïgÿþý,.. …T$!‰°´´Dmm-wîÜáÒ¥K8º»»éë룢¢‚L&ƒ”’bŒ,*û@ض-ô@!·nÝ"ÒÜÜÌíÛ·‰F£„ÃaͽÐh)¥XZZ"söìYÚÛÛèììdaaÃ0rèk¾¶m,ËRRJ,ËÂívó믿ÒßßÏçãÚµkÌÏÏ“N§q8ùˆ}k8æÌ™3ìÙ³‡ééiñûý,//çÆfÅøÍ!„FÛ¶•”Ó4F)ÅÑ£GÙ¸q#óóó¹H²Qä¿—ƒ6“Éàr¹8~ü8Ïž=ûNgRÊÂ4Ô‘[–%”R¬¬¬0:: ÀÁƒI$¹ J¤íw–H$ؽ{7ïß¿'‹áp8°,«€‚â4Ì=H¥RD£Qª««I&“Jëãg¦õ°²²Byy9«V­bnnŽt:išJ/^†B•Ï¥†K—ƒlä¢?5˲ æ‘R eÚri¨ë|VŒ˜¦I0àãÇ9ás^ªY–@4%‹Q]]Ïç+áwu ˾Àؾ};/_¾Ä4M,ËREB*Ù,ËÂét222À®]»¤R)”R*_¹4TJ,žL&ihhÀ4M?~ÌÄÄ^¯WäG‘?^;fYBéííàðáäR)¹øÎ­=‰RŠD"Á–-[hjjbyy™ëׯãv»B°¼¼\€–F/“É`Y~¿ŸðáömÛFcc#³³³†‘ÓEùÓ)¥H§Óœ:uŠªª*^½zÅÅ‹ZT*“ÉÉd°mǃÏçãÞ½{<|ø€«W¯’L&I¥R*¥øö½GJ),ËÊ¥d*•¢ªªŠŽŽü~?´µµ144D2™Äív‹²²2ÊÊÊR222Â… ¸ÿ>7oÞ¤¾¾žÉÉI‡(U5u!Ò¨âý`,cçÎtvvÒÕÕÅÄÄW®\! ²uëV*++I¥RLOO333@0äÆ:tˆÑÑQåt:sõCg[v;—s@Ã#JmHãñ8µµµtwwóüùs†††˜ššâíÛ·ãÖ¯_Ï‘#G8yò$n·›wïÞár¹ Š—»Rª oH(¶¥¥%LÓTÇŽÍÍÍ„B!æææ°, ¯×˺uëØ´i>ŸOŸ>iŠJ®RTÂR!ÔÊÊŠÐ_Ã5kÖPSSƒÃáÈ}€B¡þ)Ó4….Hùsä!P@AA(v {/ôÛ¶I§Ó$“ÉÜžPa˜¦™Ûp–0¡³Œo‡!eÄãñßðx<¶m۪زÔ4¥”B(Ã0Tv7]r\qBH¥¡Pè3°¨øÇÓ§OÇkjj¶­]»VÙ¶-JÑPl:úÿÄ4çBG?ÃÃÃw5¬úlX[WW÷×úúú_<£Ôùï÷°™™™…ׯ_w&“É;@ÎýüóÀz~|:þ_Í> ²ÿ ÊnÖ ¬«#IEND®B`‚PK:ÎJ-(PKq+Ï8!__MACOSX/._Toolbar_Connecting.pngUX œðTH•îTHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPKv+Ï8Toolbar_Disconnect.pngUX œðTH îTHõŒsû‰PNG  IHDR szzô pHYs  šœ>IDATX…½WMKsG~ν¹æSl6% ¼B îÄ\Ú¸*D„ÐmÁ•kþ…þ+tÕe +[_?@ú²¨©Š`Mrgæt‘;×¹“¹ñ-}é@¼xÎ9ÏyÎ3gæúxþ¿AÑoô'z2€2€õèÉ)m»Ë6éÝ?œˆ0Ê\¨7_¶¶¶*Åbqô6˜“k¸lÿæÝÛÛ[4›Íß®®®¾ð¨(oooÿ~xxø¡T*‰0 ADøÜƒ™Q,ùòò2ØÝÝý¹Õj}—‰|FãC©T ‚ \Y2ÞJ6É6ÉŽ§§'^YYÁæææ7_jåééi„aèe2‘‹ׂi4¥Òçû>„(—Ë9_hÌÌ "—˜´Ÿ”Roˆày££”J0fúà`ƒˆ ”b¬P…\“˜™¦¦¦¸P(¤”B·Û3s¡P l6‹( ¼¾¾2h4ƒÇ(#4(¥ ”â(K38‚ ÀÍÍ ŸŸ#!033ƒz½Ž\.GhµZÈf³ ¨ÕjX]]¥áph—’˜™MƤ”$¥ŒD)%ŠÅ"®¯¯±¿¿L&!jµêõ:²Ù,šÍ&ŽŽŽb;;;X__G¯×C&“‰Ñë™1l,¥d£Ú§ E”ÍfRÊ8ˆïûñSϳÅ,¥L¬i—€”RdOÐ?ý¿iBŒù¢µ ¥4ŘH(•[ÑQ ¶iZÍÅl{Ä@BЀÞQc H)Ùó<²í®ö«3MóE ±Å)€A'9ˆ'¸‚¸|v­5 ï•`ŒÒI"Ðζ›¢Ök9K@1‰²}Ì‹SˆÊ@J)v2ÀÌf#J1Û\"4ç™[X'”ª£Å´¦Õ9êç°û†±K)ÉîJ)!&6"óLxWµ×1f¢ž26/ò¥j€ìme«ÖΆ™>­}+ÒLØes5"ÆÛa[µv6<®Œí Ö @k@Aæ¤I Ø%p1g·âw0â8K}yž—@³¥#}êE~VJ‘]‚T ØÙFª¥0 ͬ†aœåp8LøÌ-(„H”Ç<'tÐ*5íý~sssØÛÛC>ŸÇp8D¥RR ///ØØØÀââ"r¹^^^°¼¼Œççç8ا”€Í>`ïÝ~¿ÙÙY^XX “âv» fÆÒÒòù¼y%ãN§Cú==ˆˆ Mq€Ù>mD„~¿O½^/aÓ5ïv»èt:¦|ßw —˜™ ñ¥ôÏÇÇG ÕívÉ÷ý±ºp^.ô˜ä³ÖRžçù÷÷÷Oî5€_?V«Õ¯æççª4Ìð)ï#vNNNpzzú€g}mf•jµúÃÚÚÚ×¥R)píûÿ:ˆwwwÏggg?¶ÛíïÄ×,ó{ ‚ô¯ãÏ1þð7¢âŒ_…×ÍøIEND®B`‚PK.¢OÆ‘ŒPKv+Ï8!__MACOSX/._Toolbar_Disconnect.pngUX œðTH îTHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPK€+Ï8Toolbar_Import.pngUX œðTH¯îTHõg˜ú‰PNG  IHDR szzô pHYs  šœIDATX…½—?lGÆ3·»^Nç“ÏD®° "F¶„)¤¡AH@$ S8B²Ð!Y  ˆ¹BˆHM%"ÚÈ4PÒ¤A ¾ƒìœà|¾;ߟIáeïöÎàò¤ÕÝÎÎÌûÞ7ß{3“á½Iþ?‹}‰Ä¯†¯Áèý¿6üüfßE„FßNOOÿ|üøñ/|ßÿ ¾ÁÃË—/¹ÿþ//^¼˜šNä|ôìÙ³ óóóÏó”RJ!zÎÁ{Öþ€\.gÆÇÇ¿»téÒR©TúÞ‰¾}3==]R¥RÉÍd2ë¼ ¾@+•JxìØ1Nž<9µ°°ðƒP(F²Ù,J)é8}¢ïÕØ¾,i­¥RŠB¡²–mŒAÑOx=# ÃpÓ›HÙ7‰Rc…h­€ º~»‰î6)%ù|)¥QJ‰Z­Öϱèj3›D´Öh­Öš> °)$×uY]]åÚµkÔëu1::ÊåË—»—.5‡Bc0Æ µ& CÂ0D‘Ò1&îçº.ïÞ½ãÁƒ´ÛmÆÆÆ¸xñbÜ'r†‚hi;Æ+¥â÷€u®µ¶uè^cÇq Ýnãº.žçÅšR¢µ&‚ÓiцaϨ×ë!ÃV«Åúúzì°ÙlòêÕ+”Rq„™L†]»vÅŒö4 @)eºh­ÉårÜ»w»wï’Ïçi·ÛA@³Ù X,rêÔ©8ªZ­Æ;wØ»w/•J…d]I0` ±)XaX!&©ÚØØàôéÓ S,YYY¡T*ÅQh­©V«4 jµçÎcjjŠ·oß ”" Cc£4 bI†a(ÿÑZÓl6Ù¹s'ׯ_ÇqŒ1)Md2Â0dbb‚«W¯òæÍ›˜òhþŽy­Å³$?v?årÙ>|˜ÙÙÙXÙÖ¬6ÇáæÍ›h­M³ÙL²Ú“Ý],¤cŒ¨T*ÌÌÌpàÀÂ0ŒY°k<77Çää$«««BJÙk‘˜/ `«Ç§Ü•+Wð}­5Žã ”âèÑ£ÌÎÎR,ã¶­ú‚ ‚€ ÐZ›r¹ÌÄÄçÏŸV(¸qã+++Éþ&‚^ÎMÏ4´Î¢4ŒË®ïûxžg"ÕÆí.\àùóç<~ü˜Û·o³{÷n^¿~ÍÐÐPGßz½NTÞm¶‰­ Q\8Œ1xžÇ³gÏXZZžçu”Ól6ËÈÈccc,//sëÖ-\×Ek-ìx)%GŽ!—Ë¡”ŠçMj µcŒÖZØ´¸¸È£Gâ4ëesssïÖ‘ëºäéÓ§?Ñu7ß¿ÿ‡úÚ÷ýÌv¿ fyy¹òäÉ“ùjµ:éÛ±¾ò|¾ÛñŸÀZäKÿ Ø`R~ѸIEND®B`‚PKþ~«lgPK€+Ï8__MACOSX/._Toolbar_Import.pngUX œðTH¯îTHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPK£+Ï8Toolbar_Messages.pngUX œðTHñîTHõ§Xú‰PNG  IHDR szzô pHYs  šœYIDATX…½—OhYÇ?¿÷¦eÒJté©‹]Y¤H!—°àÅ‚¢®{Ì¥"^Åäìa/{®VOÂÊ‚‡…¢ ‚—EQ´^´±ôàº4 ‚F‰6mš&3ïíÁyã´Iì®èþ Lf†ùý¾¿ïïû¾óFó!ÿ_ĵ$q´ÀVà;` :ÿÜa¿€?ݹDh ðÃÄÄÄoû÷ïÿÊ÷ý/P¬µ<þœk×®ý¾°°ð#Ðô¢â_=ztzjj*ÛßßA "Ò5Xû$™LÆŽŽŽ.‹W«ÕŸ¼èÞ÷Y¥T»Z­öi­?ZÜZ‹1¦+ A)Õè»wï½{÷rðàÁÂôôôÏ@6›J§ÓA <Ï£G÷â ÷õõ‘J¥ð-?ŽéVªÓ:Œ1Ê„ˆ µFk1†S§N‘ÏçÝcvÖ‰p#ÇB?çÎc||Ÿ§R©Ä¾’lt3#Š­ØC:æêÕ«LMM¡µ&—ËqéÒ%^½zÅË—/Y[[cppááaFGGÙ¾};FÃ...ŠçyëVOä3ÒÀш)°ÖÒl6¹sçNœhnn­5…BÁ6 ñ¼÷i‚ `uuÕ–Ëeq:pÏE”䵎8H^ P(P*•xûö-{öìa×®],..J²»HâÞÝŒËi¤+€è†5ÆHÒŒnß¾ÍÝ»w9räãããìØ±ƒååe«”’"/麫ê Ày@r;fŒaÛ¶mÌÍÍ1;;‹ïû?~œr¹ìTßk=ö\§›1`“#ÐZsùòe²Ù,çÏŸ'—ËñúõëuŠÞ˜:ÓZûaOâc>XqbÈFxôèaràÀËËËžáÄ›ÔQÒY»yŒ³b/‰>±! Õj199ÉÀÀÏž=ÃZ‹RjÓ×ñfñ1 t¬‚••–––ð<Ïòo^É"b]‡]®¯Á:Õuý_^…=Åi­µQ°@½^/Õj5vîÜ6 Ým¯÷¹BDBÀ«V«¯€ºcà›7o>ùvhhhj?gDÒ·nÝâáÇ¿²áÛptllì—|>ÿïûúSw?›°•Jå݃¦êõút~+à`/÷u¼¼j™ñt)f¦ÒIEND®B`‚PKú¼Ѭ§PK£+Ï8__MACOSX/._Toolbar_Messages.pngUX œðTHñîTHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPK¢+Ï8Toolbar_Network.pngUX œðTHïîTHõåú‰PNG  IHDR szzô pHYs  šœÌIDATX…½WÍoGÿ½Ù1^ÛÁ¤é‡¨T>¬(÷(^z©J/ ßPø@¹þŠJhRhÏôD¹EÔG#W½DMî•‚D‚(QbËkœ×Cw&³ÎÆI[Ú‘,ïÎþæ½ß{ó>f" ÿox]ü3€|`2{T0_47nþw¿0ˆ26À·wîÜùéÖ­[ŸV«Õ¿$9/£hîï`_½z…gÏžµ6668|¶°°ðÛ£G.V*­”áCfÆÄÄ·ÛíÒâââÛÛÛ‹2ûöõíÛ·/Æq¬Þ¾}[*•JEV2޶lÜܸyìïïÛùùyܼy³¹²²ò‘€R©ôÉÄÄ”RBJ "ò°Ö:2Ç !ˆˆBŒ`rÞ”R’ÖSSS1€ºc 33ˆ('…™Q«ÕP.—™™è÷ûPJ9Lal$IÂJ) Id±AXŽàŠ™™â8F«ÕÂææ&Åqì´Öh6›˜™™áõõuÚÚÚB¥RµÖ ³Ö¢ÙlÒ¥K—¦é1@†`k-gȃsçÎamm ÏŸ?GE0Æ„`vv×®]£µµ5¬®®BJ ­u377‡F£Á`€(Š(ÐQHÆ03Œ10Æ T*¢(ʹPkí:ŒÂãÆ·Ö‚ˆ¼\gŒ'`ŒRÊÅÃg·ŸgÁ8£œÕ¡‘9Ì f&k-…Š+\£µ>㔆žv„r[ µf—RÙ¢Âè…ŸDÒÍ9’w¢Üc !(cIg±î4L¶ €2C{ SNÆr‹Ns¯[çFA®‡V“{—fÁ(¸H¹1†]Ü‘u±”ÉáQ¹¾/g®¡`+|ª@¹\>b-%Êå2¤”PJ‘K½QLLj¢ÈÇ€1†Fc GÀyÀål¯×ÃÝ»wÑét°´´ä…/--áåË—¸rå vwwqïÞ=t:} ‡˜™™Áòò2Ò4ÍÕ—c1àØ¥i H’$·NàiÃa„°Öâðð0× {AV ‘¦)jµ.\¸PXï‹­£qÿ‡‡‡˜žž€\ z€ˆÐï÷1??7n|°Ó1a0øí<É0Æx¥{{{¡€±qDY!VÁa™ °+Å!Ðú³*‡Íº+gõÂÂJ­µÛïÞ½Ãìì¬ ÂEûiðE‘|óæÍ€?œ~^__ÿµÑh|yõêU¶ÖÒYö>;ÊŸIkp¢­V ívûCÂÑ%ò‹éééåëׯS«Õäa=agg§×ét¾ïv»ßùÛ12"ŸãäÛñ¿ `@Ù¥øOOö6@à5IEND®B`‚PKÛloPK¢+Ï8__MACOSX/._Toolbar_Network.pngUX œðTHïîTHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPK£+Ï8Toolbar_Prefs.pngUX œðTHñîTHõ@¿ø‰PNG  IHDR szzô pHYs  šœòIDATX…½—[HTßÇ?kï™Ñft´ñFR¤ž¤ÄNS/ >ôZˆcÔkEPÄ)„ ¢—4"("퀉Zv.%Ùå¡Q–ͼfŽ÷qfö^ë<èÞíÑIþøŸ‹aÖZû÷û®ïïûûí߆_Cãÿ7„åO8œKà¯éééÿÈÊÊJ—Rª?Ãó÷ïßÿ311qè„tÀÔu}ïþ½sçNÍív#„XÜÒÿ8ÆÆÆ¨­­ýÙØØ¸xíL`ÙÞ½{ÏUVVjáp8jšæònš&JÍår¹þ€ÄÄDsÕªUiÕ­­­[¬§þV\\0M3:>>îÖu=Þ³Š_!Àï÷ãr¹R266fƒ‰w@¡&''õŒŒ JJJÖµ¶¶þÅàu»ÝH)5MÓâÒoš¦Ð´Y*¥0 ƒšš‚Á >Ÿ;vàóù¬}¡”Â:ïÄ išRJáñx<€Ï ”R!â OJIjj*¡Pˆh4J `jjŠ‹/ÒÝÝMRR»wï&0<<Œ®ëø|>&&&,›17B ¥PDa!á|)))\ºt‰ŽŽ<ׯ_çСCƒA<RJÊË˹yó&^¯—™™êëëY²d š¦ Ghb@ÂVŽ”Ó4c„eýž>}šêêjV¯^Mbb"oß¾EaïG"šššhll¤¸¸·ÛÍ£GøöíeeeH)í°Z~lñ:o+¥´¨AJIbb"ÔÖÖðåˤ”x<Š‹‹Ù´i~¿Ÿ¡¡!ž={F[[Ož±ÿ~Ün7EEE†”Ã0˜?¬¬R’œœL~~>]]]TWWcš&×®]#==©©©ø"tÜD͉Å €Ïç#Æd qJ”Ïç0ëWJ©¬‹ÆÍ‚¹ŠH$‚Ï磸¸˜ÎÎNº»»éïï·A:Jõ‚š-¥$Š?~ŸŸÏòåËIMM% )eLÄh@J©”R„B!rss¹zõ*¥¥¥¼xñ‚‰‰‰ùlÅLÃ0Ð4¾¾>>~ü@ee%555¤¥¥ …ì0ÅÍ‹zËXOOëÖ­ÃëõÒÞÞν{÷HII!/¡aXÌ544 ),,$??ŸÏŸ? …lêµfA8c …X³f »víàܹs<}ú”@ €¦i†aO]× 455QWW@YYsoÙÖ3qEhѳMF{{;¯_¿`jjŠãdzg϶oßNff&š¦aš&}}}477ÓÐÐ`ëáþýû¬\¹’„„¢Ñ(š¦©ù ,HC'Z]×™žžfppp–.M#‰påÊêëëÉÍÍ%99™ÑÑQ:;; …Bèºnƒzóæ Çwae¢¬Íééirrr¨ªªâÔ©S;vŒ¡¡!êêêèêêâÝ»wömu]gÆ >|˜––>|H}}=¦i í–mÑ4´65~||œÌÌL._¾LRRÓÓÓlÙ²…>pâÄ B¡YYY\¸p¼¼÷œï|çϽß—Æÿo‰ÀŸm( 1™LþŲ,SJ©~o¯žç©±±±¿zžw˜„hoo×.^¼(W®\yùäÉ“¿îرMûŸ‘¡ÆÇÇÅÍ›7ÿ–J¥þ| øã… ~;{ö¬Ìd2>ß™ùÝW"‘ð_½zõÓ¡C‡n¦Óé_"UUU;šššÈd2¾ã8B,ï_J‰RŠ@G©…LišFèœ*„Bˆ‰‰ í矦±±±©«««"PYYù‡ÅÃBA9RJ„$ "‘¾ï#¥D×u4MÃqÇ €”‹@,RJ È‘€ïûjÑûÒC  ë:Ïž=£¯¯ÑÑQ²Ù,–e±yófvíÚÅúõë±mß÷ÿY6 "}•E­š…ïû˜¦I:¦­­þþþÒ°„ ··—ÎÎNŽ9©S§ˆF£¸®»ˆ’(µ€^)%¾ïEJ‰çy†ÁÐÐûöí£¿¿!º®SSSÃÆ±, Çq¸qã---är9t]/Ú ‹RJI)K ¨à·Û¶immerr€íÛ·óèÑ#ž¥³³“d2 ÀóçÏ9}ú4Bˆ’€) Â÷ýïŰèXø¾çyÄb1îÞ½ËÐÐàÁƒÔÕÕáy®ëbš&---Ü¿Ÿºº:zzzxøð!ñx×u`6ø]`]ÉŸ¶mÓÛÛ @2™äòåËLNN’ÉdŠÆ\×ebb‚d2ɵk׈Åbܹs‡\.W´NsÐÊeSÑut:Íèè(ÍÍÍÄãqæææÐu½Ä˜®ëd2êëëÙ»w/ÃÃÃŒŒŒFK dÙ„óÿõëWÇ ¶¶×uQJ•5(¥$ŸÏ³eËòù<>|@Ó4 …BÑnP„€H9”REÁl˜ŸŸ/1´t]tÀ·oߊ¶Â«P(”2¦Ó÷}¥”"ŸÏS]]M<àõë×%z‹¢–´ÓÓÓEG•••a†‚îeÛ0T„Â÷}Ç¡ºººXÙ©TŠwïÞaù|>0,®ë¢ë:/_¾ RSSƒã8 "\cˆ²5 ¥¤P( išÚ½{7³³³\¹r×u1 ×uKIJ,588HOO ÔÖÖ2;;[bi ,; lÛ;wî,ÖÀÀ'Nœ`tt”x̦M›X»v-J)ñöí[q]€ãÇÓØØÈØØ„såR*½ _§Žã`Yׯ_§££ƒæççI¥R¤R©’êÖ4 )% ÌÌÌ”í`ùQ¼´°Ål6‹iš\½z•K—.±uëVV­Z…aÄb1Ö¬YCss3¦iÐÞÞÎäädÙ )}˜’ü—{Oäóyòù<Û¶m£©©‰ééi²Ù,Ñh˲X½z5tuuñùógnݺE[[¶m£ëzÉ+ê_NÂr¢”B)ÅÌÌ SSShšFUU¦iª¹¹9FFF8xð`±m?~L__†aàyÞ£¾¤ ËuÁ’1«ÂÝ Ó,—Ë‘ËåD0‰pìØ1¢Ñ(·oß&›ÍªEçÅáUÂÀrÎÃwx¹ùͶm³aÃöïßeYœ?žD"\É"¬¿ô.!ºË½hË.!„RJ•èÚ¶Íž={TKK‹0M“?‰DRºâþÂDõƒs!ÄoF!DY])%‘HDضÍÔÔÑh4`HÅT)¥d1_¾|yýéÓ'LÓô¥”¾RJ.àßÞ“ áÊŠŠ )’]Ô5 ÃÍår¼ÿþ-0¤àaww÷ó+Vl[·nRªd•´Ðº³ÙìO÷îÝ+ w´¦Vuuõ¯õõõ6 ÃS¤ œŠð—ÑÒý¥{¡}9>>þ÷7oÞt¿Zøë˜E  ÿWá.¿$|{ @þ”Ç£×ÜÜÈ%IEND®B`‚PKÕáõø¾¹PK¢+Ï8__MACOSX/._Toolbar_Search.pngUX œðTHðîTHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPK¤+Ï8Toolbar_Shared.pngUX œðTHóîTHõÒ-ù‰PNG  IHDR szzô pHYs  šœ„IDATX…½—KhTMÇuëvº;&ÉĈ&âÂÏWtÔÀÌF4!""Jˆø…@`Œ8 ‚¸“0 ¸Kfa`” ¾Ð H071h†IC¢ùBçÑÝIw§ûVÕ,Ò÷zó0Ÿ 8µ¸§ªÎù×ÿNU]øÖ,þM¸ñ„/¸~_QQÑ´uëÖ ­µù‘'''ÿ“L&ÿLBPRÊK­­­;wîœBlîélñxœ®®®ÙÞÞÞÓÀ¿l@Û.]ºÔqïÞ=kyy9§”ú9ÑP(¤~ùå—ßMOOÿeppð¸·ÿ¡¡¡¡\)•K$)åFk ß$û­¶á\!„Y\\”[¶láäÉ“‡w¹ Zk˲¬ïÑ/”R®#,k}Îj­1Æ „²,cŒ¡   (r˜üÂu‰'„@km„¢´´˲p‡d2é0feY$AJ‰Öšd2‰Ï§ØÀ'€qˆ¼£u[WJ„ÖšÞÞ^¢Ñ(µµµÔÕÕ‘N§ÑZ#¥$ Ò××Çðð0»ví¢±±c J)±£y›p µF)…RÊÛ‘1)%étšÖÖVúûû±, ­5·nÝ¢­­T*…”Òܾ}[|ˆRЦ¦&oÜÝ]__¹\Îï[¬àIàî² …czzz•~§OŸ¦®®ŽÎÎN¢Ñ(ÕÕÕܸqƒd2É›7o¼y,--yþÝäs«eC ü@”R¤Ó镉yí‹‹‹9qâÝÝÝD£Q¤”LNNÒÓÓC}}=Á`·\‹ŠŠ°mÛcÍÏî:î?ÂL&CUU%%%eûöí#‘H022â/'>þŒRŠêêj#GއY^^ÞÐÿ¦9 µ&“ɰ}ûvŽ?î9­¨¨`~~Þûve2²Ù,ÅÅÅ+ÚÚ6ÍÍÍ$ ÇYçß qiÊår¤R)nÞ¼Imm-Ùl–P(äpk¼¸¸˜P(ÄÂÂÔÔÔ‹Åü¶yäQ ¥RJJJJRRPP@CCãããTVVRZZŠ1Æ; <ˆÖšh4JYYåååÌÌÌP^^ŽeY¿].B­5B¦¦¦âýû÷|øðx<ŽeYLLL099É… ¼¬ªª¢©©‰—/_+Wnss3555466R__Oyy¹QJ‰M«Àq!„`vv–ëׯsÿþ}Þ½{G<Gá-êîîfçÎ\¹r€k×®122ÂÀÀ€7OÁÈÈ< ©©‰¡¡! Éår«NÂuG±1†t:M"‘À¶mïòÑZ³mÛ6>ÌÞ½{±,‹d2 ÀÔÔ»wïæòåË 2>>Ž1Û¶‘R’ÉdÈd2žŽãà8Îjî€RÊCéêTYYÉÕ«W)++#‹ññãGž}ââÅ‹:tˆx<ŽmÛ¤R)öͪÀ+ÇÙÙY¯Ì‰´´´xA×Þñ~6ŠŠŠXZZBJÉÂÂRJÜ—V>Ù7Gf´ÖÂï0sôèQ WíÚè·Y–E6›%377çl´ÖÂíûxÉá8κ÷œeY¤R)R©”ÙèÕ´¶ !˜ŸŸÇ=Sò—“ûêò'á·'™Ÿ‚8ŽóÃÁYó*våB_ð=Ér.2—þµN$¸Û6™+Œ1&ŸŒ p\®ÿF),,BÇ£×v`CÛ÷ìß³I)!ccc_ y÷î]k``àׯ_¿n‹D"ܱc¶m[RJávÛ¶…eYÂoÛ̾Y7ÆXÏŸ?/^¼ø³1æŸ~ªd$ùÓ.D"‘ÈÚ÷IñC2|g®™™™ùuxxø¯J©ÿ9u›û‡ìþ°þŒfXÑÞ‹÷_AŒìs¢¾IEND®B`‚PK1ÈM×ÒPK¤+Ï8__MACOSX/._Toolbar_Shared.pngUX œðTHóîTHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPK£+Ï8Toolbar_Stats.pngUX œðTHòîTHõØ'ú‰PNG  IHDR szzô pHYs  šœŠIDATX…½WÏkTGÿ|gÞ{Ùüz“È’ƒ©9¨iOi<‹¹I=ô“%Уö(èЪ )‚PˆAÍÅ£( ’PÌA ¦‰¦Ñh²®a³7»oßÌûöÐñm²»Æ‚ýÂÀî¼ïÌçóý93ÀGøÿ„ ÅÀ#_wwwÿJ¥º£(â/¼¼¼¼¸±±ñ€7ˆHZJ9<22òû©S§„ëº ¢Æ;ýGÉår¸qãÆÚíÛ·¿ð§@èþõÒ¥K"‚PkýeÐ$ ½ÿþ®ÕÕÕ_&&&¾s*óGíÔZ‡ù|Þ•RÖZËø²OIM]"â>ÈÝ»wãØ±cßLLL|e´¸®‹(Š„¢žû?Ç+õtIÁÌ Ïó<­†33ˆÈ&^E`¶?Çú­Â`k!Š"`C€*,,ˆïûRšEõÀ?IŒ™‰ˆP*•¸X,Z]³¯!€(Š µFEÃ7oÞD&“‰{a›ÐJÅu]”Ëe ÐñãÇQ( µ¶ûZÌl?A€ëׯcuu©T ZëZà É) ( ÆÐÐÖ××­¡UŒ´ÖB T*áüùó¸pá2™ DZ€B»A-BÌŒææfÌÎÎâîÝ»˜žžF¥TÛ~ͤ!¡”²Þ(•Jv03?~Œµµ5(¥Õ1¿‹Å"ˆ=B__ÇR QÙaÙ3ÌœRÊŽ0 £££xýú5„ðj1¤P(`nnƒƒƒÈçóRZðxXqvq÷Æ !Íf199‰……k™ÖårÙÇq0??ÇqÐÛÛ‹ÍÍMQÉmIE‘Ý,îø‚ææfLOO£¿¿+++(—Ë–XGG ´µµáÉ“'8pà„l«—ªÄ>rü,ˆÅŒ…433ƒÓ§Ocjj ïß¿Gkk+¯­­ÑÕ«W‘J¥ÐÓÓƒ¾¾>ž™™¡3gÎ ŸÏ[ñÛ–„1±Øä@%ΔÍf‘N§188"ÂË—/‘L&itt‰DÉdÏž=Õ+W¨½½ûöíC>Ÿ·°¡*–òÖB ©© Éd/^¼€ëºH¥Rèêê«W¯°¸¸ˆ¥¥%\»vÍZ†!˜ëëëp]—M‡5Ù¯‚­ˆâ9 µÆÛ·o1;;‹r¹Œ ¿¿a¢··ÏŸ?Çøø8Nž<‰\.‡t:oß "!È€Ås¬fÆ{@"‘Àýû÷‘Édày|ßÇáÇqäÈ,//ãàÁƒ¸uë|ßÇÙ³gñæÍ8ŽÝ®jÏzõ’ÌŒb±ˆ'N`ddÙlžç±Öšr¹Â0Ä®]»ÐÑÑ¡¡!lnnZ·W,gf&f†”²fÔô@¼æ ¥¥A ŸÏÃq""¸® Ïó ”¹sç°wï^lll ½½=~6Ø*J$0œZ¨f´ÖRb~~“““Èf³ØzKbf¸®‹¹¹94ÏóËå¶5¢º‡‘9ŽÛÚÚ066†;wîÔ=õ*—˜†¤”PJ¡µµµ* ë•!”RLDtùòe455}X-!"(¥ÐÙÙ‰l6 5 °ñ€RŠ„èîîÞh’«X,«¾ë ŠÞÇ+Y,ÌÌdÊd§àŸÒ­ôއ±+Yhž(Š¶Ý´*—È‚×Ô­t@bf®§(süµ´´„––""ÅÌÑÖ æ\½ùzsRJEDXXXXð·¼xñ¢xøðazee¥Ç÷ýo÷ìÙÇq„”’Ìp‡„Ÿk4ßh0³¸wïÿÌÌSqWIß÷:tèоïûµJo§ÑºüîÝ»ôÓ§OÓZ¡ò85b^ÈæÁú%„ñoì-Þ?é¦ œ*áÙIEND®B`‚PK1ï½ÓÝØPK£+Ï8__MACOSX/._Toolbar_Stats.pngUX œðTHòîTHõc`cg`b`ðMLVðVˆP€'±ƒøA Pá€PK‰§Û’+RPK¤+Ï8Toolbar_Transfers.pngUX œðTHóîTHõ¯Pú‰PNG  IHDR szzô pHYs  šœaIDATX…½WMhIþ^W÷83q‚–Ĉ .I Æ$ˆ7ۨ‡½d^öîÍÛzXðñØ‹,Ü£º(FA AÑ(ëI!1duÐdÌ$“ÎüØ]Uoéêt÷L˲®û è鞪WßûÞ÷êG`×,üÎE‘'è0 ¼ÿׯ–üiÞ)@£|?11ñÛèèè7Ùlö+Ì 03Þ¼yƒ7nüþêÕ«Ÿ4í`òo/\¸0=99YÌd2RJIDÔÖvYûWöîÝËýýý?^¼xq¹\.ÿlÿOLL-ËòËå²#„ø§“§JZ­VÕéÓ§166öÃôôô/6‹Åî|>)¥eÛ6R¢'­õÎ"Ó'Ö‘™Û~šÖÚ’R¢X,vÈt0¸­ð˜™…”ËåžçAJÙÔqH)“Ñ·°ADÐZ°[”xÆ€!Èu]^XXÀ³gÏP©T`Û6˜8pˆ••DÄà Ÿæ b µ†Öšƒ'Oø¾l6‹……:{ö,Î;‡+W®À¶m(¥ ”"!Þ¿«W¯F}…>Lcf L:c‡PJÅ*¥L´€J¥)eÐq<}ú7oÞD©T‚Rʘ/¥¤”a3þB‘Îub̲¬0ÏóðàÁÀãÇ‘ÉdB€¦_6ZÐZ“RŠ’l$0s‘mÛXZZÂüü<àáDZɓ-éÏŽR²R*¦î`Õ&8ŽƒG¡Z­ž|øÀ•J…Û±j|·”¡Qg3v*c{{CCCèèè@­VƒÙªÏœ9ƒjµ 4 Ð,ÃaâvˆÌLŸ[ˆZhj4Ø¿?†‡‡C ½½½8vì>~ü"‚”2  í²ýÖ€©íä "ÂÉ“'ÃIN:…|>f³ÉF+QJ)Nˆ¯¥É2¤äqŒ™Q«Õ0<<ŒB¡×u1::ŠÍÍM0s¨êÏ¥ jF”i ´lDÑ4ôõõ¡«« CCCX__7‹!D²šbŒF6'ˆä‡’ ‘aDz,=z‡†ã8h4pJ)|úô)¡IK Ø–c[ÀÅR d­uÛ3a­VÃÈÈzzz°ººF_¯×188ˆóçÏckk h6›HK (M-K±±F£Á¤}ûöamm-Ðl6ÑÓÓƒK—.Á²,Ôj5lmm1Q45@Dlˆ¥ JM¨Ùl¢T*Eσ\×3C!DËîi|˜*ÃÎ}„mp]÷¯ 9rDÕëuaV»vfê9 @¤Toolbar_About.pngUXœðTH[îTHPK †,Ï8 @ýA__MACOSX/UXœðTHœðTHPKR+Ï8‰§Û’+R @¤Ä__MACOSX/._Toolbar_About.pngUXœðTH[îTHPK]+Ï8ƒôiÉ  @¤IToolbar_Bling.pngUXœðTHqîTHPK]+Ï8‰§Û’+R @¤¸ __MACOSX/._Toolbar_Bling.pngUXœðTHqîTHPKi+Ï8§¶ç²Ç @¤= Toolbar_Connect.pngUXœðTH…îTHPKi+Ï8‰§Û’+R @¤U__MACOSX/._Toolbar_Connect.pngUXœðTH…îTHPKq+Ï8:ÎJ-( @¤ÜToolbar_Connecting.pngUXœðTH•îTHPKq+Ï8‰§Û’+R! @¤]__MACOSX/._Toolbar_Connecting.pngUXœðTH•îTHPKv+Ï8.¢OÆ‘Œ @¤çToolbar_Disconnect.pngUXœðTH îTHPKv+Ï8‰§Û’+R! @¤Ì__MACOSX/._Toolbar_Disconnect.pngUXœðTH îTHPK€+Ï8þ~«lg @¤V Toolbar_Import.pngUXœðTH¯îTHPK€+Ï8‰§Û’+R @¤&__MACOSX/._Toolbar_Import.pngUXœðTH¯îTHPK£+Ï8ú¼Ѭ§ @¤˜&Toolbar_Messages.pngUXœðTHñîTHPK£+Ï8‰§Û’+R @¤–,__MACOSX/._Toolbar_Messages.pngUXœðTHñîTHPK¢+Ï8Ûlo @¤-Toolbar_Network.pngUXœðTHïîTHPK¢+Ï8‰§Û’+R @¤Ž2__MACOSX/._Toolbar_Network.pngUXœðTHïîTHPK£+Ï8Ó¾kE@ @¤3Toolbar_Prefs.pngUXœðTHñîTHPK£+Ï8‰§Û’+R @¤©:__MACOSX/._Toolbar_Prefs.pngUXœðTHñîTHPK¢+Ï8Õáõø¾¹ @¤.;Toolbar_Search.pngUXœðTHðîTHPK¢+Ï8‰§Û’+R @¤ CSearchResultList; /** * Represents a search-result returned from a server or client. * * A file may have either a parent or any number of children. * When a child is added to a result, the parent becomes a generic * representation of all its children, which will include a copy * of the original result. The parent object will contain the sum * of sources (total/complete) and will have the most common * filename. Children are owned by their parents, and can be * displayed on CSearchListCtrl. * * Basic file parameters (hash, name, size, rating) can be read * via the CAbstractFile functions. Tags pertaining to meta-data * are stored in the taglist inherited from CAbstractFile. * * TODO: Server IP/Port are currently not used. * TODO: Client ID/Port are currently not used. */ class CSearchFile : public CAbstractFile, public CECID { public: /** Constructor used to create results on the remote GUI. */ // ADUNANZA BEGIN // backport #if 0 CSearchFile(class CEC_SearchFile_Tag* tag); #else CSearchFile(const class CEC_SearchFile_Tag* tag); #endif // ADUNANZA END /** Copy constructor, also copies children. */ CSearchFile(const CSearchFile& other); /** * Normal constructor, reads a result from a packet. * * @param data Source of results-packet. * @param optUTF8 Specifies if text-strings are to be read as UTF8. * @param searchID searchID The * @param serverIP The IP of the server that sent this result. * @param serverPort The port of the server that sent this result. * @param directory If from a clients shared files, the directory this file is in. * @param kademlia Specifies if this was from a kad-search. */ CSearchFile( const CMemFile& data, bool optUTF8, wxUIntPtr searchID, uint32_t serverIP = 0, uint16_t serverPort = 0, const wxString& directory = wxEmptyString, bool kademlia = false); /** Frees all children owned by this file. */ virtual ~CSearchFile(); /** * Merges the two results into one. * * Merges the other result into this one, updating * various informations. * * @param other The file to be merged into this. */ void MergeResults(const CSearchFile& other); /** Returns the total number of sources. */ uint32 GetSourceCount() const { return m_sourceCount; } /** Returns the number of sources that have the entire file. */ uint32 GetCompleteSourceCount() const { return m_completeSourceCount; } // ADUNANZA BEGIN uint32 GetOrigSourceCount() const { return m_completeSourceCount_origKADU; } // ADUNANZA END /** Returns the ID of the search, used to select the right list when displaying. */ wxUIntPtr GetSearchID() const { return m_searchID; } /** Returns true if the result is from a Kademlia search. */ bool IsKademlia() const { return m_kademlia; } // Possible download status of a file enum DownloadStatus { NEW, // not known DOWNLOADED, // successfully downloaded or shared QUEUED, // downloading (Partfile) CANCELED, // canceled QUEUEDCANCELED // canceled once, but now downloading again }; /** Returns the download status. */ enum DownloadStatus GetDownloadStatus() const { return m_downloadStatus; } /** Set download status according to the global lists of knownfile, partfiles, canceledfiles. */ void SetDownloadStatus(); /** Set download status directly. */ void SetDownloadStatus(enum DownloadStatus s) { m_downloadStatus = s; } /** Returns the parent of this file. */ CSearchFile *GetParent() const { return m_parent; } /** Returns the list of children belonging to this file. */ const CSearchResultList &GetChildren() const { return m_children; } /** Returns true if this item has children. */ bool HasChildren() const { return !m_children.empty(); } /** Returns true if children should be displayed. */ bool ShowChildren() const { return m_showChildren; } /** Enable/Disable displaying of children (set in CSearchListCtrl). */ void SetShowChildren(bool show) { m_showChildren = show; } /** * Adds the given file as a child of this file. * * Note that a file can either be a parent _or_ * a child, but not both. Also note that it is * only legal to add children whose filesize and * filehash matches the parent's. AddChild takes * ownership of the file. */ void AddChild(CSearchFile* file); struct ClientStruct { ClientStruct() : m_ip(0), m_port(0), m_serverIP(0), m_serverPort(0) {} ClientStruct(uint32_t ip, uint16_t port, uint32_t serverIP, uint16_t serverPort) : m_ip(ip), m_port(port), m_serverIP(serverIP), m_serverPort(serverPort) {} uint32_t m_ip; uint16_t m_port; uint32_t m_serverIP; uint32_t m_serverPort; }; void AddClient(const ClientStruct& client); const std::list& GetClients() const { return m_clients; } uint32_t GetClientID() const throw() { return m_clientID; } void SetClientID(uint32_t clientID) throw() { m_clientID = clientID; } uint16_t GetClientPort() const throw() { return m_clientPort; } void SetClientPort(uint16_t port) throw() { m_clientPort = port; } uint32_t GetClientServerIP() const throw() { return m_clientServerIP; } void SetClientServerIP(uint32_t serverIP) throw() { m_clientServerIP = serverIP; } uint16_t GetClientServerPort() const throw() { return m_clientServerPort; } void SetClientServerPort(uint16_t port) throw() { m_clientServerPort = port; } int GetClientsCount() const { return ((GetClientID() && GetClientPort()) ? 1 : 0) + m_clients.size(); } void SetKadPublishInfo(uint32_t val) throw() { m_kadPublishInfo = val; } uint32_t GetKadPublishInfo() const throw() { return m_kadPublishInfo; } const wxString& GetDirectory() const throw() { return m_directory; } private: //! CSearchFile is not assignable. CSearchFile& operator=(const CSearchFile& other); /** * Updates a parent file so that it shows various common traits. * * Currently, the most common filename is selected, and an average * of fileratings is set, based on files that have a rating only. */ void UpdateParent(); //! The parent of this result. CSearchFile* m_parent; //! Any children this result may have. CSearchResultList m_children; //! If true, children will be shown on the GUI. bool m_showChildren; //! The unique ID of this search owning this result. wxUIntPtr m_searchID; //! The total number of sources for this file. uint32 m_sourceCount; //! The number of sources that have the complete file. uint32 m_completeSourceCount; // ADUNANZA BEGIN //! Solo per AdunanzA KADU uint32 m_completeSourceCount_origKADU; // ADUNANZA END //! Specifies if the result is from a kademlia search. bool m_kademlia; //! The download status. enum DownloadStatus m_downloadStatus; //! Directory where file is stored (when it is part of a remote shared files list). wxString m_directory; std::list m_clients; uint32_t m_clientID; uint16_t m_clientPort; uint32_t m_clientServerIP; uint16_t m_clientServerPort; //! Kademlia publish information. uint32_t m_kadPublishInfo; friend class CPartFile; friend class CSearchListRem; }; #endif // SEARCHLIST_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ColorFrameCtrl.cpp0000644000175000017500000001006612050266603021704 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include "ColorFrameCtrl.h" // Interface declarations #include "MuleColour.h" ///////////////////////////////////////////////////////////////////////////// // CColorFrameCtrl CColorFrameCtrl::CColorFrameCtrl( wxWindow* parent,int id, int wid,int hei ) : wxControl(parent,id,wxDefaultPosition,wxSize(wid,hei)), m_brushBack(*wxBLACK_BRUSH), m_brushFrame(CMuleColour(0,255,255).GetBrush()) { SetSizeHints(wid,hei,wid,hei,0,0); wxRect rc=GetClientRect(); m_rectClient.left=rc.x; m_rectClient.top=rc.y; m_rectClient.right=rc.x + wid; m_rectClient.bottom=rc.y + hei; } // CColorFrameCtrl ///////////////////////////////////////////////////////////////////////////// CColorFrameCtrl::~CColorFrameCtrl() { } // ~CColorFrameCtrl BEGIN_EVENT_TABLE(CColorFrameCtrl,wxControl) EVT_PAINT(CColorFrameCtrl::OnPaint) EVT_SIZE(CColorFrameCtrl::OnSize) END_EVENT_TABLE() ///////////////////////////////////////////////////////////////////////////// // CColorFrameCtrl message handlers ///////////////////////////////////////////////////////////////////////////// void CColorFrameCtrl::SetFrameBrushColour(const wxColour& colour) { m_brushFrame = *(wxTheBrushList->FindOrCreateBrush(colour, wxSOLID)); Refresh(FALSE); } // SetFrameColor ///////////////////////////////////////////////////////////////////////////// void CColorFrameCtrl::SetBackgroundBrushColour(const wxColour& colour) { m_brushBack = *(wxTheBrushList->FindOrCreateBrush(colour, wxSOLID)); // clear out the existing garbage, re-start with a clean plot Refresh(FALSE); } // SetBackgroundColor //////////////////////////////////////////////////////////////////////////// void CColorFrameCtrl::OnPaint(wxPaintEvent& WXUNUSED(evt)) { wxPaintDC dc(this); wxRect rc; rc.x=m_rectClient.left; rc.y=m_rectClient.top; rc.width=m_rectClient.right-m_rectClient.left; rc.height=m_rectClient.bottom-m_rectClient.top; dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(m_brushBack); dc.DrawRectangle(rc); dc.SetPen(*wxBLACK_PEN); dc.DrawLine(rc.x+1,rc.y+1,rc.x+rc.width-2,rc.y+1); dc.DrawLine(rc.x+rc.width-2,rc.y+1,rc.x+rc.width-2,rc.y+rc.height-2); dc.DrawLine(rc.x+rc.width-2,rc.y+rc.height-2,rc.x+1,rc.y+rc.height-2); dc.DrawLine(rc.x+1,rc.y+rc.height-2,rc.x+1,rc.y+1); dc.SetPen(*wxWHITE_PEN); dc.DrawLine(rc.x+rc.width-1,rc.y,rc.x+rc.width-1,rc.y+rc.height-1); dc.DrawLine(rc.x+rc.width-1,rc.y+rc.height-1,rc.x,rc.y+rc.height-1); dc.SetPen(*wxGREY_PEN); dc.DrawLine(rc.x+rc.width,rc.y,rc.x,rc.y); dc.DrawLine(rc.x,rc.y,rc.x,rc.y+rc.height); } // OnPaint ///////////////////////////////////////////////////////////////////////////// void CColorFrameCtrl::OnSize(wxSizeEvent& WXUNUSED(evt)) { // NOTE: OnSize automatically gets called during the setup of the control // Kry - Not on Mac. wxRect rc=GetClientRect(); m_rectClient.left=rc.x; m_rectClient.top=rc.y; m_rectClient.right=rc.x + rc.width; m_rectClient.bottom=rc.y + rc.height; } // OnSize // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/TerminationProcessAmuleweb.h0000644000175000017500000000310012050266603023774 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Marcelo Roberto Jimenez ( phoenix@amule.org ) // Copyright (c) 2008-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef TERMINATIONPROCESSAMULEWEB_H #define TERMINATIONPROCESSAMULEWEB_H #include "TerminationProcess.h" // for CTerminationProcess // This is the handler for process termination events. // Used on some calls to wxExecute(). class CTerminationProcessAmuleweb : public CTerminationProcess { private: long *m_webserver_pid; public: CTerminationProcessAmuleweb(const wxString &cmd, long *webserver_pid); virtual void OnTerminate(int pid, int status); }; #endif // TERMINATIONPROCESSAMULEWEB_H amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/BitVector.h0000644000175000017500000000757612050266603020410 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2009-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2009-2011 Stu Redman ( sturedman@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef BITVECTOR_H #define BITVECTOR_H // // Packed bit vector // class BitVector { public: BitVector() { m_bits = 0; m_bytes = 0; m_allTrue = 0; m_vector = NULL; } ~BitVector() { clear(); } // number of bits uint32 size() const { return m_bits; } // is it empty? bool empty() const { return m_bits == 0; } // get bit at index bool get(uint32 idx) const { if (idx >= m_bits) { wxFAIL; return false; } return (m_vector[idx / 8] & s_posMask[idx & 7]) != 0; } // set bit at index void set(uint32 idx, bool value) { if (idx >= m_bits) { wxFAIL; return; } uint32 bidx = idx / 8; if (value) { m_vector[bidx] = m_vector[bidx] | s_posMask[idx & 7]; // If it was not all true before, then we don't know now. if (m_allTrue == 0) { m_allTrue = 2; } } else { m_vector[bidx] = m_vector[bidx] & s_negMask[idx & 7]; m_allTrue = 0; } } // set number of bits to zero and free memory void clear() { m_bits = 0; m_bytes = 0; m_allTrue = 0; delete[] m_vector; m_vector = NULL; } // set number of bits and initialize them with value void setsize(uint32 newsize, bool value) { if (newsize == 0) { clear(); return; } m_bits = newsize; m_bytes = newsize / 8; if (newsize & 7) { m_bytes++; } delete[] m_vector; m_vector = new uint8[m_bytes]; memset(m_vector, value ? 0xFF : 0, m_bytes); m_allTrue = value ? 1 : 0; } // are all bits true ? bool AllTrue() const { if (m_allTrue == 2) { // don't know, have to check bool foundFalse = false; uint32 lastByte = m_bytes; if (m_bits & 7) { // uneven: check bits of last byte individually lastByte--; for (uint32 i = m_bits & 0xfffffff8; !foundFalse && i < m_bits; i++) { foundFalse = !get(i); } } // check bytewise for (uint32 i = 0; !foundFalse && i < lastByte; i++) { foundFalse = m_vector[i] != 0xff; } // This is really just a caching of information, // so m_allTrue is mutable and AllTrue() still const. m_allTrue = foundFalse ? 0 : 1; } return m_allTrue == 1; } // set all bits to true void SetAllTrue() { if (m_bytes) { memset(m_vector, 0xFF, m_bytes); } } // handling of the internal buffer (for EC) // get size uint32 SizeBuffer() const { return m_bytes; } // get buffer const void* GetBuffer() const { return m_vector; } // set buffer void SetBuffer(const void* src) { memcpy(m_vector, src, m_bytes); m_allTrue = 2; } private: uint32 m_bits; // number of bits uint32 m_bytes; // number of bytes in the vector uint8 * m_vector; // the storage mutable uint8 m_allTrue;// All true ? 0: no 1: yes 2: don't know static const uint8 s_posMask[]; // = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; implemented in OtherFunctions.cpp static const uint8 s_negMask[]; // = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}; }; #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/HTTPDownload.cpp0000644000175000017500000003716512050266603021306 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Timo Kujala ( tiku@users.sourceforge.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include #include "HTTPDownload.h" // Interface declarations #include // Needed for unicode2char #include "OtherFunctions.h" // Needed for CastChild #include "Logger.h" // Needed for AddLogLine* #include // Needed for CFormat #include "InternalEvents.h" // Needed for CMuleInternalEvent #include "Preferences.h" #include "ScopedPtr.h" #include // Needed for wxFileName // ADUNANZA BEGIN #include "AdunanzA.h" // Needed for CAdunanzAUtilities::GetUserAgent() // ADUNANZA END #ifndef AMULE_DAEMON #include "inetdownload.h" // Needed for inetDownload #include "muuli_wdr.h" // Needed for ID_CANCEL: Let it here or will fail on win32 #include "MuleGifCtrl.h" typedef wxGauge wxGaugeControl; DECLARE_LOCAL_EVENT_TYPE(wxEVT_HTTP_PROGRESS, wxANY_ID) DECLARE_LOCAL_EVENT_TYPE(wxEVT_HTTP_SHUTDOWN, wxANY_ID) class CHTTPDownloadDialog : public wxDialog { public: CHTTPDownloadDialog(CHTTPDownloadThread* thread) : wxDialog(wxTheApp->GetTopWindow(), -1, _("Downloading..."), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxSYSTEM_MENU) { downloadDlg(this, true)->Show(this, true); m_progressbar = CastChild(ID_HTTPDOWNLOADPROGRESS, wxGaugeControl); m_progressbar->SetRange(100); m_ani = CastChild(ID_ANIMATE, MuleGifCtrl); m_ani->LoadData((const char*)inetDownload, sizeof(inetDownload)); m_ani->Start(); m_thread = thread; } ~CHTTPDownloadDialog() { StopThread(); } void UpdateGauge(int total, int current) { CFormat label( wxT("( %s / %s )") ); label % CastItoXBytes(current); if (total > 0) { label % CastItoXBytes(total); } else { label % _("Unknown"); } CastChild(IDC_DOWNLOADSIZE, wxStaticText)->SetLabel(label.GetString()); if (total && (total != m_progressbar->GetRange())) { m_progressbar->SetRange(total); } if (current && (current <= total)) { m_progressbar->SetValue(current); } Layout(); } private: void StopThread() { if (m_thread) { m_thread->Stop(); delete m_thread; m_thread = NULL; } } void OnBtnCancel(wxCommandEvent& WXUNUSED(evt)) { AddLogLineN(_("HTTP download cancelled")); Show(false); StopThread(); } void OnProgress(CMuleInternalEvent& evt) { UpdateGauge(evt.GetExtraLong(), evt.GetInt()); } void OnShutdown(CMuleInternalEvent& WXUNUSED(evt)) { Show(false); Destroy(); } CMuleThread* m_thread; MuleGifCtrl* m_ani; wxGaugeControl* m_progressbar; DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(CHTTPDownloadDialog, wxDialog) EVT_BUTTON(ID_HTTPCANCEL, CHTTPDownloadDialog::OnBtnCancel) EVT_MULE_INTERNAL(wxEVT_HTTP_PROGRESS, -1, CHTTPDownloadDialog::OnProgress) EVT_MULE_INTERNAL(wxEVT_HTTP_SHUTDOWN, -1, CHTTPDownloadDialog::OnShutdown) END_EVENT_TABLE() DEFINE_LOCAL_EVENT_TYPE(wxEVT_HTTP_PROGRESS) DEFINE_LOCAL_EVENT_TYPE(wxEVT_HTTP_SHUTDOWN) #endif CHTTPDownloadThread::CHTTPDownloadThread(const wxString& url, const wxString& filename, const wxString& oldfilename, HTTP_Download_File file_id, bool showDialog, bool checkDownloadNewer) #ifdef AMULE_DAEMON : CMuleThread(wxTHREAD_DETACHED), #else : CMuleThread(showDialog ? wxTHREAD_JOINABLE : wxTHREAD_DETACHED), #endif m_url(url), m_tempfile(filename), m_result(-1), m_file_id(file_id), m_companion(NULL) { if (showDialog) { #ifndef AMULE_DAEMON CHTTPDownloadDialog* dialog = new CHTTPDownloadDialog(this); dialog->Show(true); m_companion = dialog; #endif } // Get the date on which the original file was last modified // Only if it's the same URL we used for the last download and if the file exists. if (checkDownloadNewer && thePrefs::GetLastHTTPDownloadURL(file_id) == url) { wxFileName origFile = wxFileName(oldfilename); if (origFile.FileExists()) { AddDebugLogLineN(logHTTP, CFormat(wxT("URL %s matches and file %s exists, only download if newer")) % url % oldfilename); m_lastmodified = origFile.GetModificationTime(); } } wxMutexLocker lock(s_allThreadsMutex); s_allThreads.insert(this); } // Format the given date to a RFC-2616 compliant HTTP date // Example: Thu, 14 Jan 2010 15:40:23 GMT wxString CHTTPDownloadThread::FormatDateHTTP(const wxDateTime& date) { static const wxChar* s_months[] = { wxT("Jan"), wxT("Feb"), wxT("Mar"), wxT("Apr"), wxT("May"), wxT("Jun"), wxT("Jul"), wxT("Aug"), wxT("Sep"), wxT("Oct"), wxT("Nov"), wxT("Dec") }; static const wxChar* s_dow[] = { wxT("Sun"), wxT("Mon"), wxT("Tue"), wxT("Wed"), wxT("Thu"), wxT("Fri"), wxT("Sat") }; return CFormat(wxT("%s, %02d %s %d %02d:%02d:%02d GMT")) % s_dow[date.GetWeekDay(wxDateTime::UTC)] % date.GetDay(wxDateTime::UTC) % s_months[date.GetMonth(wxDateTime::UTC)] % date.GetYear(wxDateTime::UTC) % date.GetHour(wxDateTime::UTC) % date.GetMinute(wxDateTime::UTC) % date.GetSecond(wxDateTime::UTC); } CMuleThread::ExitCode CHTTPDownloadThread::Entry() { if (TestDestroy()) { return NULL; } wxHTTP* url_handler = NULL; AddDebugLogLineN(logHTTP, wxT("HTTP download thread started")); const CProxyData* proxy_data = thePrefs::GetProxyData(); bool use_proxy = proxy_data != NULL && proxy_data->m_proxyEnable; try { wxFFileOutputStream outfile(m_tempfile); if (!outfile.Ok()) { throw wxString(CFormat(_("Unable to create destination file %s for download!")) % m_tempfile); } if (m_url.IsEmpty()) { // Nowhere to download from! throw wxString(_("The URL to download can't be empty")); } url_handler = new wxHTTP; // ADUNANZA BEGIN // set aMuleAdunanzA ad-hoc User-Agent /* in attesa di eventuali cambiamenti sui server di AdunanzA lascio il default di wxWidgets */ // ho provato a fare una funzione in CAdunanzAUtilities ma poi mi incasinavo con il link dai diversi progetti, per ora lascio qui wxString usrAgent; usrAgent << wxT("wxWidgets 2.x"); /* CODICE AL MOMENTO DISABILITATO // ATTENZIONE: // Il formato dello User-Agent e' fisso e controllato dal server di AdunanzA da cui viene scaricato il file delle impostazioni remote (RemoteSettings) // Se al server arriva una stringa di User-Agent sconosciuta allora il server spedisce file con dati NON validi! // Ad esempio, in quel caso, i segg. parametri vengono restituiti con valore 0: // // - kadFindValue // - kadStore // - kadFindNode // // in questo caso KAdu non puo' funzionare correttamente (sintomo evidente: le ricerche su KAdu continuano a non restituire risultati, non viene neppure mandato // il pacchetto KADEMLIA2_SEARCH_REQ) // // // Al momento attuale e' accettata solo la stringa "wxWidgets 2.x" // // Qui di seguito il codice per comporre uno User-Agent nei formati // // aMuleAdunanzA NNNN.N on XXXXXXXXXXXXXXXXXX // aMuleAdunanzA NNNN.NbN rev. NNN on XXXXXXXXXXXXXXXXXX // wxString usrAgent; usrAgent << wxT("aMule"); usrAgent << ADU_MOD; #ifdef SVNDATE usrAgent << wxT(SVNDATE); #endif usrAgent << wxT(" on "); usrAgent << wxGetOsDescription(); */ url_handler->SetHeader(wxT("User-Agent"), usrAgent); // ADUNANZA END url_handler->SetProxyMode(use_proxy); // Build a conditional get request if the last modified date of the file being updated is known if (m_lastmodified.IsValid()) { // Set a flag in the HTTP header that we only download if the file is newer. // see: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.25 AddDebugLogLineN(logHTTP, wxT("If-Modified-Since: ") + FormatDateHTTP(m_lastmodified)); url_handler->SetHeader(wxT("If-Modified-Since"), FormatDateHTTP(m_lastmodified)); } CScopedPtr url_read_stream(GetInputStream(url_handler, m_url, use_proxy)); if (!url_read_stream.get()) { if (m_response == 304) { m_result = HTTP_Skipped; AddDebugLogLineN(logHTTP, wxT("Skipped download because requested file is not newer.")); throw wxString(wxEmptyString); } else { m_result = HTTP_Error; throw wxString(CFormat(_("The URL %s returned: %i - Error (%i)!")) % m_url % m_response % m_error); } } int download_size = url_read_stream->GetSize(); // ADUNANZA BEGIN // back #ifdef __DEBUG__ // ADUNANZA END if (download_size == -1) { AddDebugLogLineN(logHTTP, wxT("Download size not received, downloading until connection is closed")); } else { AddDebugLogLineN(logHTTP, CFormat(wxT("Download size: %i")) % download_size); } // ADUNANZA BEGIN // back #endif // ADUNANZA END // Here is our read buffer // Still, I'm sure 4092 is probably a better size. // MP: Most people can download at least at 32kb/s from http... const unsigned MAX_HTTP_READ = 32768; char buffer[MAX_HTTP_READ]; int current_read = 0; int total_read = 0; do { url_read_stream->Read(buffer, MAX_HTTP_READ); current_read = url_read_stream->LastRead(); if (current_read) { total_read += current_read; outfile.Write(buffer,current_read); int current_write = outfile.LastWrite(); if (current_read != current_write) { throw wxString(_("Critical error while writing downloaded file")); } else if (m_companion) { #ifndef AMULE_DAEMON CMuleInternalEvent evt(wxEVT_HTTP_PROGRESS); evt.SetInt(total_read); evt.SetExtraLong(download_size); wxPostEvent(m_companion, evt); #endif } } } while (current_read && !TestDestroy()); if (current_read == 0) { if (download_size == -1) { // Download was probably succesful. AddLogLineN(CFormat(_("Downloaded %d bytes")) % total_read); m_result = HTTP_Success; } else if (total_read != download_size) { m_result = HTTP_Error; throw wxString(CFormat(_("Expected %d bytes, but downloaded %d bytes")) % download_size % total_read); } else { // Download was succesful. m_result = HTTP_Success; } } } catch (const wxString& error) { if (wxFileExists(m_tempfile)) { wxRemoveFile(m_tempfile); } if (!error.IsEmpty()) { AddLogLineC(error); } } if (m_result == HTTP_Success) { thePrefs::SetLastHTTPDownloadURL(m_file_id, m_url); } if (url_handler) { url_handler->Destroy(); } AddDebugLogLineN(logHTTP, wxT("HTTP download thread ended")); return 0; } void CHTTPDownloadThread::OnExit() { #ifndef AMULE_DAEMON if (m_companion) { CMuleInternalEvent termEvent(wxEVT_HTTP_SHUTDOWN); wxPostEvent(m_companion, termEvent); } #endif // Notice the app that the file finished download CMuleInternalEvent evt(wxEVT_CORE_FINISHED_HTTP_DOWNLOAD); evt.SetInt((int)m_file_id); evt.SetExtraLong((long)m_result); wxPostEvent(wxTheApp, evt); wxMutexLocker lock(s_allThreadsMutex); s_allThreads.erase(this); } //! This function's purpose is to handle redirections in a proper way. wxInputStream* CHTTPDownloadThread::GetInputStream(wxHTTP * & url_handler, const wxString& location, bool proxy) { if (TestDestroy()) { return NULL; } if (!location.StartsWith(wxT("http://"))) { // This is not a http url throw wxString(_("Invalid URL for HTTP download or HTTP redirection (did you forget 'http://' ?)")); } // Get the host // Remove the "http://" wxString host = location.Right(location.Len() - 7); // strlen("http://") -> 7 // I belive this is a bug... // Sometimes "Location" header looks like this: // "http://www.whatever.com:8080http://www.whatever.com/downloads/something.zip" // So let's clean it... int bad_url_pos = host.Find(wxT("http://")); wxString location_url; if (bad_url_pos != -1) { // Malformed Location field on header (bug above?) location_url = host.Mid(bad_url_pos); host = host.Left(bad_url_pos); // After the first '/' non-http-related, it's the location part of the URL location_url = location_url.Right(location_url.Len() - 7).AfterFirst(wxT('/')); } else { // Regular Location field // After the first '/', it's the location part of the URL location_url = host.AfterFirst(wxT('/')); // The host is everything till the first "/" host = host.BeforeFirst(wxT('/')); } // Build the cleaned url now wxString url = wxT("http://") + host + wxT("/") + location_url; int port = 80; if (host.Find(wxT(':')) != -1) { // This http url has a port port = wxAtoi(host.AfterFirst(wxT(':'))); host = host.BeforeFirst(wxT(':')); } wxIPV4address addr; addr.Hostname(host); addr.Service(port); if (!url_handler->Connect(addr, true)) { throw wxString(_("Unable to connect to HTTP download server")); } wxInputStream* url_read_stream = url_handler->GetInputStream(url); /* store the HTTP response code */ m_response = url_handler->GetResponse(); /* store the HTTP error code */ m_error = url_handler->GetError(); AddDebugLogLineN(logHTTP, CFormat(wxT("Host: %s:%i\n")) % host % port); AddDebugLogLineN(logHTTP, CFormat(wxT("URL: %s\n")) % url); AddDebugLogLineN(logHTTP, CFormat(wxT("Response: %i (Error: %i)")) % m_response % m_error); if (!m_response) { AddDebugLogLineC(logHTTP, wxT("WARNING: Void response on stream creation")); // WTF? Why does this happen? // This is probably produced by an already existing connection, because // the input stream is created nevertheless. However, data is not the same. delete url_read_stream; throw wxString(_("Invalid response from HTTP download server")); } if (m_response == 301 // Moved permanently || m_response == 302 // Moved temporarily // What about 300 (multiple choices)? Do we have to handle it? ) { // We have to remove the current stream. delete url_read_stream; wxString new_location = url_handler->GetHeader(wxT("Location")); url_handler->Destroy(); if (!new_location.IsEmpty()) { url_handler = new wxHTTP; url_handler->SetProxyMode(proxy); if (m_lastmodified.IsValid()) { // Set a flag in the HTTP header that we only download if the file is newer. // see: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.25 url_handler->SetHeader(wxT("If-Modified-Since"), FormatDateHTTP(m_lastmodified)); } url_read_stream = GetInputStream(url_handler, new_location, proxy); } else { AddDebugLogLineC(logHTTP, wxT("ERROR: Redirection code received with no URL")); url_handler = NULL; url_read_stream = NULL; } } else if (m_response == 304) { // "Not Modified" delete url_read_stream; url_handler->Destroy(); url_read_stream = NULL; url_handler = NULL; } return url_read_stream; } void CHTTPDownloadThread::StopAll() { ThreadSet allThreads; { wxMutexLocker lock(s_allThreadsMutex); std::swap(allThreads, s_allThreads); } // ADUNANZA BEGIN #if 0 for (ThreadSet::iterator it = allThreads.begin(); it != allThreads.end(); it++) { #else for (ThreadSet::iterator it = allThreads.begin(); it != allThreads.end(); ++it) { #endif // ADUNANZA END (*it)->Stop(); } } CHTTPDownloadThread::ThreadSet CHTTPDownloadThread::s_allThreads; wxMutex CHTTPDownloadThread::s_allThreadsMutex; // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/MemFile.cpp0000644000175000017500000001131612050266603020343 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "MemFile.h" // Interface declarations CMemFile::CMemFile(unsigned int growthRate) { m_buffer = NULL; m_BufferSize = 0; m_fileSize = 0; m_growthRate = growthRate; m_position = 0; m_delete = true; m_readonly = false; } CMemFile::CMemFile(byte* buffer, size_t bufferSize) { MULE_VALIDATE_PARAMS(buffer, wxT("CMemFile: Attempted to attach invalid buffer.")); m_buffer = buffer; m_BufferSize = bufferSize; m_fileSize = bufferSize; m_growthRate = 0; m_position = 0; m_delete = false; m_readonly = false; } CMemFile::CMemFile(const byte* buffer, size_t bufferSize) { MULE_VALIDATE_PARAMS(buffer, wxT("CMemFile: Attempted to attach invalid buffer.")); m_buffer = const_cast(buffer); m_BufferSize = bufferSize; m_fileSize = bufferSize; m_growthRate = 0; m_position = 0; m_delete = false; m_readonly = true; } CMemFile::~CMemFile() { if (m_delete) { free(m_buffer); } } uint64 CMemFile::GetPosition() const { return m_position; } void CMemFile::SetLength(size_t newLen) { MULE_VALIDATE_STATE(!m_readonly, wxT("CMemFile: Attempted to change lenght on a read-only buffer.")); if (newLen > m_BufferSize) { enlargeBuffer(newLen); } if (newLen < m_position) { m_position = newLen; } m_fileSize = newLen; } uint64 CMemFile::GetLength() const { return m_fileSize; } void CMemFile::enlargeBuffer(size_t size) { MULE_VALIDATE_PARAMS(size >= m_BufferSize, wxT("CMemFile: Attempted to shrink buffer.")); MULE_VALIDATE_STATE(m_delete, wxT("CMemFile: Attempted to grow an attached buffer.")); MULE_VALIDATE_STATE(!m_readonly, wxT("CMemFile: Attempted to grow a read-only buffer.")); size_t newsize = m_BufferSize; if (m_growthRate) { newsize = ((size + m_growthRate - 1) / m_growthRate) * m_growthRate; } else { // No growth-rate specified. Change to exactly the size specified. newsize = size; } // ADUNANZA BEGIN // backport #if 0 m_buffer = (byte*)realloc(m_buffer, newsize); m_BufferSize = newsize; MULE_VALIDATE_STATE(m_buffer, wxT("CMemFile: Failed to (re)allocate buffer")); #else byte *tmp = (byte*)realloc(m_buffer, newsize); if (tmp) { m_buffer = tmp; m_BufferSize = newsize; } MULE_VALIDATE_STATE(tmp, wxT("CMemFile: Failed to (re)allocate buffer")); #endif // ADUNANZA END } sint64 CMemFile::doRead(void* buffer, size_t count) const { MULE_VALIDATE_PARAMS(buffer, wxT("CMemFile: Attempting to read to invalid buffer")); // Handle reads past EOF if (m_position > m_fileSize) { return 0; } else if (m_position + count > m_fileSize) { count = m_fileSize - m_position; } if (count) { memcpy(buffer, m_buffer + m_position, count); m_position += count; } return count; } sint64 CMemFile::doWrite(const void* buffer, size_t count) { MULE_VALIDATE_PARAMS(buffer, wxT("CMemFile: Attempting to write to invalid buffer")); MULE_VALIDATE_STATE(!m_readonly, wxT("CMemFile: Attempted to write to a read-only buffer.")); // Needs more space? if (m_position + count > m_BufferSize) { enlargeBuffer(m_position + count); } MULE_VALIDATE_STATE(m_position + count <= m_BufferSize, wxT("CMemFile: Buffer not resized to needed size.")); memcpy(m_buffer + m_position, buffer, count); m_position += count; if (m_position > m_fileSize) { m_fileSize = m_position; } return count; } sint64 CMemFile::doSeek(sint64 offset) const { MULE_VALIDATE_PARAMS(offset >= 0, wxT("CMemFile: Invalid seek, position, must be positive.")); return m_position = offset; } void CMemFile::ResetData() { wxCHECK_RET(!m_readonly, wxT("Trying to reset read-only buffer")); memset(m_buffer, 0, m_BufferSize); m_fileSize = 0; m_position = 0; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/CaptchaGenerator.cpp0000644000175000017500000000637412050266603022247 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "CaptchaGenerator.h" #include "RandomFunctions.h" #include "MemFile.h" #include #include #include #define LETTERSIZE 32 #define CROWDEDSIZE 20 // fairly simply captcha generator, might be improved is spammers think its really worth it solving captchas on aMule CCaptchaGenerator::CCaptchaGenerator(uint32 nLetterCount) { ReGenerateCaptcha(nLetterCount); } void CCaptchaGenerator::ReGenerateCaptcha(uint32 nLetterCount) { static wxString schCaptchaContent = wxT("ABCDEFGHJKLMNPQRSTUVWXYZ123456789"); m_strCaptchaText.Clear(); // Bitmap must be created with full depth, or it will fail on GTK wxBitmap pimgResult(LETTERSIZE + (nLetterCount-1)*CROWDEDSIZE, 36); wxMemoryDC dc(pimgResult); dc.SetBackground(*wxWHITE_BRUSH); dc.Clear(); dc.SetTextForeground(*wxBLACK); dc.SetTextBackground(*wxWHITE); double lastrotate = 15.0; for (uint32 i = 0; i < nLetterCount; i++) { wxString strLetter(schCaptchaContent[GetRandomUint16() % schCaptchaContent.length()]); m_strCaptchaText += strLetter; uint16 nRandomSize = 30 - GetRandomUint16() % 12; wxFont font(nRandomSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD); dc.SetFont(font); uint16 nRandomOffset = 3 + GetRandomUint16() % 8; uint16 maxRotate = 50 - nRandomSize; // rotate small letters more than large letters double fRotate = (double)(maxRotate - (GetRandomUint16() % (maxRotate*2))); // limit angle diff - it causes too much overlap since wx rotates at the corner // (maybe I'll redo that with some coordinate transformation one day) if (fRotate - lastrotate > 20) { fRotate = lastrotate + 20; } else if (fRotate - lastrotate < -20) { fRotate = lastrotate - 20; } dc.DrawRotatedText(strLetter, nRandomOffset + i * CROWDEDSIZE, 0, fRotate); } m_pimgCaptcha = pimgResult.ConvertToImage(); // wx always saves as 24 bpp except when it gets this WELL DOCUMENTED option... m_pimgCaptcha.SetOption(wxIMAGE_OPTION_BMP_FORMAT, wxBMP_1BPP); // m_pimgCaptcha.SaveFile(wxT("captcha.bmp"), wxBITMAP_TYPE_BMP); } bool CCaptchaGenerator::WriteCaptchaImage(wxMemoryOutputStream& file) { return m_pimgCaptcha.SaveFile(file, wxBITMAP_TYPE_BMP); } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ThreadTasks.h0000644000175000017500000002356012050266603020713 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2006-2011 Mikkel Schubert ( xaignar@amule.org / http:://www.amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef TASKS_H #define TASKS_H #include "ThreadScheduler.h" #include class CKnownFile; class CPartFile; class CFileAutoClose; /** * This task performs MD4 and/or AICH hashings of a file, * depending on the type. For new shared files (using the * first constructor, with part == NULL), both MD4 and * AICH hashes are created. For incomplete partfiles * (rehashed due to changed timestamps), only MD4 hashing * is done. For complete partfiles, both MD4 and AICH * hashing is done. * * For existing shared files (using the second constructor), * only an AICH hash is created. * * @see CHashingEvent * @see CAICHSyncTask */ class CHashingTask : public CThreadTask { public: /** * Schedules a partfile or new shared file for hashing. * * @param path The full path, without filename. * @param filename The actual filename. * @param part Used to identify the owner in the event-handler (PartFiles only). * * CHashingEvents sent by this type of tasks have the id MULE_EVT_HASHING. * @see EVT_MULE_HASHING */ CHashingTask(const CPath& path, const CPath& filename, const CPartFile* part = NULL); /** * Schedules a KnownFile to have a AICH hashset created, used by CAICHSyncTask. * * CHashingEvents sent by this type of tasks have the id MULE_EVT_AICH_HASHING. * @see EVT_MULE_AICH_HASHING **/ CHashingTask(const CKnownFile* toAICHHash); protected: //! Specifies which hashes should be calculated when the task is executed. enum EHashes { EH_AICH = 1, EH_MD4 = 2 }; //! @see CThreadTask::OnLastTask virtual void OnLastTask(); //! @see CThreadTask::Entry virtual void Entry(); /** * Helper function for hashing a PARTSIZE chunk of a file. * * @param file The file to read from. * @param part The number of the part to hash. * @param owner The known- (or part) file representing that file. * @bool createAICH Specifies if AICH hash-sets should be created as well. * @return Returns false on read-errors, true otherwise. * * This function will create a MD4 hash and, if specified, a AICH hashset for * the next part of the file. This function makes the assumption that it wont * be called for closed or EOF files. */ bool CreateNextPartHash(CFileAutoClose& file, uint16 part, CKnownFile* owner, EHashes toHash); //! The path to the file to be hashed (shared or part), without filename. CPath m_path; //! The filename of the file to be hashed (filename only). CPath m_filename; //! Specifies which hash-types should be calculated EHashes m_toHash; //! If a partfile or an AICH hashing, this pointer stores it for callbacks. const CKnownFile* m_owner; // ADUNANZA BEGIN // backport private: void SetHashingProgress(uint16 part); // ADUNANZA END }; /** * This task synchronizes the AICH hashlist. * * Shared files that are lacking a AICH-hash are scheduled for hashing. */ class CAICHSyncTask : public CThreadTask { public: CAICHSyncTask(); protected: /** See CThreadTask::Entry */ virtual void Entry(); /** Converts old known2.met files to known2_64.met files. */ bool ConvertToKnown2ToKnown264(); }; /** * This task performs the final tasks on a complete download. * * This includes finding a usable destination filename, removing * old data files and moving the part-file (potentially to a * different partition). **/ class CCompletionTask : public CThreadTask { public: /** * Creates a thread which will complete the given download. */ CCompletionTask(const CPartFile* file); protected: /** See CThreadTask::Entry */ virtual void Entry(); /** See CThreadTask::OnExit */ virtual void OnExit(); //! The target filename. CPath m_filename; //! The full path to the .met-file CPath m_metPath; //! The category of the download. uint8 m_category; //! Owner of the file, used when sending completion-event. const CPartFile* m_owner; //! Specifies if an error occured during completion. bool m_error; //! The resulting full path. File may be be renamed. CPath m_newName; }; /** * This task preallocates space for a newly created partfile. */ class CAllocateFileTask : public CThreadTask { public: /** Creates a thread that will allocate disk space for the full file. */ CAllocateFileTask(CPartFile *file, bool pause); protected: /** See CThreadTask::Entry */ virtual void Entry(); /** See CThreadTask::OnExit */ virtual void OnExit(); private: //! The partfile for which this task allocates space. CPartFile * m_file; //! Should this download start paused? bool m_pause; //! Result of the preallocation. long m_result; }; /** * This event is used to signal the completion of a hashing event. * * @see CHashingTask */ class CHashingEvent : public wxEvent { public: /** * @param type MULE_EVT_HASHING or MULE_EVT_AICH_HASHING. * @param result */ CHashingEvent(wxEventType type, CKnownFile* result, const CKnownFile* owner = NULL); /** @see wxEvent::Clone */ virtual wxEvent* Clone() const; /** Returns the owner (may be NULL) of the hashing result. */ const CKnownFile* GetOwner() const; /** Returns a CKnownfile used to store the results of the hashing. */ CKnownFile* GetResult() const; private: //! The file owner. const CKnownFile* m_owner; //! The hashing results. CKnownFile* m_result; }; /** * This event is sent when a part-file has been completed. */ class CCompletionEvent : public wxEvent { public: /** Constructor, see getter funtion for description of parameters. */ CCompletionEvent(bool errorOccured, const CPartFile* owner, const CPath& fullPath); /** @see wxEvent::Clone */ virtual wxEvent* Clone() const; /** Returns true if completion failed. */ bool ErrorOccured() const; /** Returns the owner of the file that was being completed. */ const CPartFile* GetOwner() const; /** Returns the full path to the completed file (empty on failure). */ const CPath& GetFullPath() const; private: //! The full path to the completed file. CPath m_fullPath; //! The owner of the completed .part file. const CPartFile* m_owner; //! Specifies if completion failed. bool m_error; }; /** * This event is sent when preallocation of a new partfile is finished. */ DECLARE_LOCAL_EVENT_TYPE(MULE_EVT_ALLOC_FINISHED, -1); class CAllocFinishedEvent : public wxEvent { public: /** Constructor, see getter function for description of parameters. */ CAllocFinishedEvent(CPartFile *file, bool pause, long result) : wxEvent(-1, MULE_EVT_ALLOC_FINISHED), m_file(file), m_pause(pause), m_result(result) {} /** @see wxEvent::Clone */ virtual wxEvent *Clone() const; /** Returns the partfile for which preallocation was requested. */ CPartFile *GetFile() const throw() { return m_file; } /** Returns whether the partfile should start paused. */ bool IsPaused() const throw() { return m_pause; } /** Returns the result of preallocation: true on success, false otherwise. */ bool Succeeded() const throw() { return m_result == 0; } /** Returns the result of the preallocation. */ long GetResult() const throw() { return m_result; } private: //! The partfile for which preallocation was requested. CPartFile * m_file; //! Should the download start paused? bool m_pause; //! Result of preallocation long m_result; }; DECLARE_LOCAL_EVENT_TYPE(MULE_EVT_HASHING, -1) DECLARE_LOCAL_EVENT_TYPE(MULE_EVT_AICH_HASHING, -1) DECLARE_LOCAL_EVENT_TYPE(MULE_EVT_FILE_COMPLETED, -1) typedef void (wxEvtHandler::*MuleHashingEventFunction)(CHashingEvent&); typedef void (wxEvtHandler::*MuleCompletionEventFunction)(CCompletionEvent&); typedef void (wxEvtHandler::*MuleAllocFinishedEventFunction)(CAllocFinishedEvent&); //! Event-handler for completed hashings of new shared files and partfiles. #define EVT_MULE_HASHING(func) \ DECLARE_EVENT_TABLE_ENTRY(MULE_EVT_HASHING, -1, -1, \ (wxObjectEventFunction) (wxEventFunction) \ wxStaticCastEvent(MuleHashingEventFunction, &func), (wxObject*) NULL), //! Event-handler for completed hashings of files that were missing a AICH hash. #define EVT_MULE_AICH_HASHING(func) \ DECLARE_EVENT_TABLE_ENTRY(MULE_EVT_AICH_HASHING, -1, -1, \ (wxObjectEventFunction) (wxEventFunction) \ wxStaticCastEvent(MuleHashingEventFunction, &func), (wxObject*) NULL), //! Event-handler for completion of part-files. #define EVT_MULE_FILE_COMPLETED(func) \ DECLARE_EVENT_TABLE_ENTRY(MULE_EVT_FILE_COMPLETED, -1, -1, \ (wxObjectEventFunction) (wxEventFunction) \ wxStaticCastEvent(MuleCompletionEventFunction, &func), (wxObject*) NULL), //! Event-handler for partfile preallocation finished events. #define EVT_MULE_ALLOC_FINISHED(func) \ DECLARE_EVENT_TABLE_ENTRY(MULE_EVT_ALLOC_FINISHED, -1, -1, \ (wxObjectEventFunction) (wxEventFunction) \ wxStaticCastEvent(MuleAllocFinishedEventFunction, &func), (wxObject*) NULL), #endif // TASKS_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/Timer.cpp0000644000175000017500000000767212050266603020117 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "Timer.h" // Interface declaration #include "GetTickCount.h" // Needed for GetTickCountFullRes #include "MuleThread.h" // Needed for CMuleThread //////////////////////// Timer Thread //////////////////// class CTimerThread : public CMuleThread { public: CTimerThread() : CMuleThread(wxTHREAD_JOINABLE) { } void* Entry() { CTimerEvent evt(m_id); uint32 lastEvent = GetTickCountFullRes(); do { // current time uint32 now = GetTickCountFullRes(); // This is typically zero, because lastEvent was already incremented by one period. sint32 delta = now - lastEvent; if (delta > 100 * m_period) { // We're way too far behind. Probably what really happened is // the system time was adjusted backwards a bit. So, // the calculation of delta has produced an absurd value. delta = 100 * m_period; lastEvent = now - delta; } // Wait one period (adjusted by the difference just calculated) sint32 timeout = ((m_period < delta) ? 0 : (m_period - delta)); // In normal operation, we will never actually acquire the // semaphore; we will always timeout. This is used to // implement a Sleep operation which the owning CTimer can // interrupt by posting to the semaphore. So, it follows // that if we do acquire the semaphore it means the owner // wants us to exit. if (m_sleepSemaphore.WaitTimeout(timeout) == wxSEMA_TIMEOUT) { // Increment for one event only, so no events can be lost. lastEvent += m_period; wxPostEvent(m_owner, evt); } else { break; } } while (!m_oneShot); return NULL; } sint32 m_period; bool m_oneShot; wxEvtHandler* m_owner; int m_id; wxSemaphore m_sleepSemaphore; }; ////////////////////// CTimer //////////////////////// CTimer::~CTimer() { Stop(); } CTimer::CTimer(wxEvtHandler* owner, int id) { wxASSERT(owner); m_owner = owner; m_id = id; m_thread = NULL; } bool CTimer::IsRunning() const { return (m_thread && m_thread->IsRunning()); } bool CTimer::Start(int millisecs, bool oneShot) { wxCHECK_MSG(m_id != -1, false, wxT("Invalid target-ID for timer-events.")); // Since this class generally matches wxTimer, calling // start on a running timer stops and then restarts it. Stop(); m_thread = new CTimerThread(); m_thread->m_period = millisecs; m_thread->m_oneShot = oneShot; m_thread->m_owner = m_owner; m_thread->m_id = m_id; if (m_thread->Create() == wxTHREAD_NO_ERROR) { if (m_thread->Run() == wxTHREAD_NO_ERROR) { return true; } } // Something went wrong ... m_thread->Stop(); delete m_thread; m_thread = NULL; return false; } void CTimer::Stop() { if (m_thread) { m_thread->m_sleepSemaphore.Post(); m_thread->Stop(); delete m_thread; m_thread = NULL; } } DEFINE_LOCAL_EVENT_TYPE(MULE_EVT_TIMER) CTimerEvent::CTimerEvent(int id) : wxEvent(id, MULE_EVT_TIMER) { } wxEvent* CTimerEvent::Clone() const { return new CTimerEvent(GetId()); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ServerListCtrl.cpp0000644000175000017500000005042212050266603021755 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ServerListCtrl.h" // Interface declarations #include #include #include #include #include #include "amule.h" // Needed for theApp #include "DownloadQueue.h" // Needed for CDownloadQueue #ifdef ENABLE_IP2COUNTRY #include "IP2Country.h" // Needed for IP2Country #include "amuleDlg.h" // Needed for IP2Country #endif #include "ServerList.h" // Needed for CServerList #include "ServerConnect.h" // Needed for CServerConnect #include "Server.h" // Needed for CServer and SRV_PR_* #include "Logger.h" #include // Needed for CFormat #define CMuleColour(x) (wxSystemSettings::GetColour(x)) BEGIN_EVENT_TABLE(CServerListCtrl,CMuleListCtrl) EVT_LIST_ITEM_RIGHT_CLICK( -1, CServerListCtrl::OnItemRightClicked) EVT_LIST_ITEM_ACTIVATED( -1, CServerListCtrl::OnItemActivated ) EVT_MENU( MP_PRIOLOW, CServerListCtrl::OnPriorityChange ) EVT_MENU( MP_PRIONORMAL, CServerListCtrl::OnPriorityChange ) EVT_MENU( MP_PRIOHIGH, CServerListCtrl::OnPriorityChange ) EVT_MENU( MP_ADDTOSTATIC, CServerListCtrl::OnStaticChange ) EVT_MENU( MP_REMOVEFROMSTATIC, CServerListCtrl::OnStaticChange ) EVT_MENU( MP_CONNECTTO, CServerListCtrl::OnConnectToServer ) EVT_MENU( MP_REMOVE, CServerListCtrl::OnRemoveServers ) EVT_MENU( MP_REMOVEALL, CServerListCtrl::OnRemoveServers ) EVT_MENU( MP_GETED2KLINK, CServerListCtrl::OnGetED2kURL ) EVT_CHAR( CServerListCtrl::OnKeyPressed ) END_EVENT_TABLE() CServerListCtrl::CServerListCtrl( wxWindow *parent, wxWindowID winid, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name ) : CMuleListCtrl( parent, winid, pos, size, style, validator, name ) { // Setting the sorter function. SetSortFunc( SortProc ); // Set the table-name (for loading and saving preferences). SetTableName( wxT("Server") ); m_connected = 0; InsertColumn( COLUMN_SERVER_NAME, _("Server Name"), wxLIST_FORMAT_LEFT, 150, wxT("N") ); InsertColumn( COLUMN_SERVER_ADDR, _("Address"), wxLIST_FORMAT_LEFT, 140, wxT("A") ); InsertColumn( COLUMN_SERVER_PORT, _("Port"), wxLIST_FORMAT_LEFT, 25, wxT("P") ); InsertColumn( COLUMN_SERVER_DESC, _("Description"), wxLIST_FORMAT_LEFT, 150, wxT("D") ); InsertColumn( COLUMN_SERVER_PING, _("Ping"), wxLIST_FORMAT_LEFT, 25, wxT("p") ); InsertColumn( COLUMN_SERVER_USERS, _("Users"), wxLIST_FORMAT_LEFT, 40, wxT("U") ); InsertColumn( COLUMN_SERVER_FILES, _("Files"), wxLIST_FORMAT_LEFT, 45, wxT("F") ); InsertColumn( COLUMN_SERVER_PRIO, _("Priority"), wxLIST_FORMAT_LEFT, 60, wxT("r") ); InsertColumn( COLUMN_SERVER_FAILS, _("Failed"), wxLIST_FORMAT_LEFT, 40, wxT("f") ); InsertColumn( COLUMN_SERVER_STATIC, _("Static"), wxLIST_FORMAT_LEFT, 40, wxT("S") ); InsertColumn( COLUMN_SERVER_VERSION, _("Version"), wxLIST_FORMAT_LEFT, 80, wxT("V") ); #ifdef __DEBUG__ InsertColumn( COLUMN_SERVER_TCPFLAGS, wxT("TCP Flags"), wxLIST_FORMAT_LEFT, 80, wxT("t") ); InsertColumn( COLUMN_SERVER_UDPFLAGS, wxT("UDP Flags"), wxLIST_FORMAT_LEFT, 80, wxT("u") ); #endif LoadSettings(); } wxString CServerListCtrl::GetOldColumnOrder() const { return wxT("N,A,P,D,p,U,F,r,f,S,V,t,u"); } CServerListCtrl::~CServerListCtrl() { } void CServerListCtrl::AddServer( CServer* toadd ) { // RefreshServer will add the server. // This also means that we have simple duplicity checking. ;) RefreshServer( toadd ); ShowServerCount(); } void CServerListCtrl::RemoveServer(CServer* server) { long result = FindItem(-1, reinterpret_cast(server)); if ( result != -1 ) { DeleteItem(result); ShowServerCount(); } } void CServerListCtrl::RemoveAllServers(int state) { int pos = GetNextItem( -1, wxLIST_NEXT_ALL, state); bool connected = theApp->IsConnectedED2K() || theApp->serverconnect->IsConnecting(); while ( pos != -1 ) { // ADUNANZA BEGIN // Back #if 0 CServer* server = (CServer*)GetItemData(pos); #else CServer* server = reinterpret_cast(GetItemData(pos)); #endif // ADUNANZA END if (server == m_connected && connected) { wxMessageBox(_("You are connected to a server you are trying to delete. Please disconnect first. The server was NOT deleted."), _("Info"), wxOK, this); ++pos; } else if (server->IsStaticMember()) { const wxString name = (!server->GetListName() ? wxString(_("(Unknown name)")) : server->GetListName()); if (wxMessageBox(CFormat(_("Are you sure you want to delete the static server %s")) % name, _("Cancel"), wxICON_QUESTION | wxYES_NO, this) == wxYES) { theApp->serverlist->SetStaticServer(server, false); DeleteItem( pos ); theApp->serverlist->RemoveServer( server ); } else { ++pos; } } else { DeleteItem( pos ); theApp->serverlist->RemoveServer( server ); } pos = GetNextItem(pos - 1, wxLIST_NEXT_ALL, state); } ShowServerCount(); } void CServerListCtrl::RefreshServer( CServer* server ) { // Cant really refresh a NULL server if (!server) { return; } wxUIntPtr ptr = reinterpret_cast(server); long itemnr = FindItem( -1, ptr ); if ( itemnr == -1 ) { // We are not at the sure that the server isn't in the list, so we can re-add itemnr = InsertItem( GetInsertPos( ptr ), server->GetListName() ); SetItemPtrData( itemnr, ptr ); wxListItem item; item.SetId( itemnr ); item.SetBackgroundColour(CMuleColour(wxSYS_COLOUR_LISTBOX)); SetItem( item ); } wxString serverName; #ifdef ENABLE_IP2COUNTRY // Get the country name if (theApp->amuledlg->m_IP2Country->IsEnabled() && thePrefs::IsGeoIPEnabled()) { // ADUNANZA BEGIN // Mr Hyde: provo a vedere se usando direttamente i byte dell'IP (e non la stringa) // alleggerisco un po' la CPU #if 0 const CountryData& countrydata = theApp->amuledlg->m_IP2Country->GetCountryData(server->GetFullIP()); #else const CountryData& countrydata = theApp->amuledlg->m_IP2Country->GetCountryData(server->GetIP()); #endif // ADUNANZA END serverName << countrydata.Name; serverName << wxT(" - "); } #endif // ENABLE_IP2COUNTRY serverName << server->GetListName(); SetItem(itemnr, COLUMN_SERVER_NAME, serverName); SetItem(itemnr, COLUMN_SERVER_ADDR, server->GetAddress()); if (server->GetAuxPortsList().IsEmpty()) { SetItem( itemnr, COLUMN_SERVER_PORT, CFormat(wxT("%u")) % server->GetPort()); } else { SetItem( itemnr, COLUMN_SERVER_PORT, CFormat(wxT("%u (%s)")) % server->GetPort() % server->GetAuxPortsList()); } SetItem( itemnr, COLUMN_SERVER_DESC, server->GetDescription() ); if ( server->GetPing() ) { SetItem( itemnr, COLUMN_SERVER_PING, CastSecondsToHM(server->GetPing()/1000, server->GetPing() % 1000 ) ); } else { SetItem( itemnr, COLUMN_SERVER_PING, wxEmptyString ); } if ( server->GetUsers() ) { SetItem( itemnr, COLUMN_SERVER_USERS, CFormat(wxT("%u")) % server->GetUsers()); } else { SetItem( itemnr, COLUMN_SERVER_USERS, wxEmptyString ); } if ( server->GetFiles() ) { SetItem( itemnr, COLUMN_SERVER_FILES, CFormat(wxT("%u")) % server->GetFiles()); } else { SetItem( itemnr, COLUMN_SERVER_FILES, wxEmptyString ); } switch ( server->GetPreferences() ) { case SRV_PR_LOW: SetItem(itemnr, COLUMN_SERVER_PRIO, _("Low")); break; case SRV_PR_NORMAL: SetItem(itemnr, COLUMN_SERVER_PRIO, _("Normal")); break; case SRV_PR_HIGH: SetItem(itemnr, COLUMN_SERVER_PRIO, _("High") ); break; default: SetItem(itemnr, COLUMN_SERVER_PRIO, wxT("---")); // this should never happen } SetItem( itemnr, COLUMN_SERVER_FAILS, CFormat(wxT("%u")) % server->GetFailedCount()); SetItem( itemnr, COLUMN_SERVER_STATIC, ( server->IsStaticMember() ? _("Yes") : _("No") ) ); SetItem( itemnr, COLUMN_SERVER_VERSION, server->GetVersion() ); #if defined(__DEBUG__) && !defined(CLIENT_GUI) wxString flags; /* TCP */ if (server->GetTCPFlags() & SRV_TCPFLG_COMPRESSION) { flags += wxT("c"); } if (server->GetTCPFlags() & SRV_TCPFLG_NEWTAGS) { flags += wxT("n"); } if (server->GetTCPFlags() & SRV_TCPFLG_UNICODE) { flags += wxT("u"); } if (server->GetTCPFlags() & SRV_TCPFLG_RELATEDSEARCH) { flags += wxT("r"); } if (server->GetTCPFlags() & SRV_TCPFLG_TYPETAGINTEGER) { flags += wxT("t"); } if (server->GetTCPFlags() & SRV_TCPFLG_LARGEFILES) { flags += wxT("l"); } if (server->GetTCPFlags() & SRV_TCPFLG_TCPOBFUSCATION) { flags += wxT("o"); } SetItem( itemnr, COLUMN_SERVER_TCPFLAGS, flags ); /* UDP */ flags.Clear(); if (server->GetUDPFlags() & SRV_UDPFLG_EXT_GETSOURCES) { flags += wxT("g"); } if (server->GetUDPFlags() & SRV_UDPFLG_EXT_GETFILES) { flags += wxT("f"); } if (server->GetUDPFlags() & SRV_UDPFLG_NEWTAGS) { flags += wxT("n"); } if (server->GetUDPFlags() & SRV_UDPFLG_UNICODE) { flags += wxT("u"); } if (server->GetUDPFlags() & SRV_UDPFLG_EXT_GETSOURCES2) { flags += wxT("G"); } if (server->GetUDPFlags() & SRV_UDPFLG_LARGEFILES) { flags += wxT("l"); } if (server->GetUDPFlags() & SRV_UDPFLG_UDPOBFUSCATION) { flags += wxT("o"); } if (server->GetUDPFlags() & SRV_UDPFLG_TCPOBFUSCATION) { flags += wxT("O"); } SetItem( itemnr, COLUMN_SERVER_UDPFLAGS, flags ); #endif // Deletions of items causes rather large ammount of flicker, so to // avoid this, we resort the list to ensure correct ordering. if (!IsItemSorted(itemnr)) { SortList(); } } void CServerListCtrl::HighlightServer( const CServer* server, bool highlight ) { // Unset the old highlighted server if we are going to set a new one if ( m_connected && highlight ) { // A recursive call to do the real work. HighlightServer( m_connected, false ); m_connected = 0; } long itemnr = FindItem( -1, reinterpret_cast(server) ); if ( itemnr > -1 ) { wxListItem item; item.SetId( itemnr ); if ( GetItem( item ) ) { wxFont font = GetFont(); if ( highlight ) { font.SetWeight( wxBOLD ); m_connected = server; } item.SetFont( font ); SetItem( item ); } } } void CServerListCtrl::ShowServerCount() { wxStaticText* label = CastByName( wxT("serverListLabel"), GetParent(), wxStaticText ); if ( label ) { label->SetLabel(CFormat(_("Servers (%i)")) % GetItemCount()); label->GetParent()->Layout(); } } void CServerListCtrl::OnItemActivated( wxListEvent& event ) { // Unselect all items but the activated one long item = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); while ( item > -1 ) { SetItemState( item, 0, wxLIST_STATE_SELECTED); item = GetNextItem( item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); } SetItemState( event.GetIndex(), wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED ); wxCommandEvent nulEvt; OnConnectToServer( nulEvt ); } void CServerListCtrl::OnItemRightClicked(wxListEvent& event) { // Check if clicked item is selected. If not, unselect all and select it. long index = CheckSelection(event); bool enable_reconnect = false; bool enable_static_on = false; bool enable_static_off = false; // Gather information on the selected items while ( index > -1 ) { // ADUNANZA BEGIN // Back #if 0 CServer* server = (CServer*)GetItemData( index ); #else CServer* server = reinterpret_cast(GetItemData(index)); #endif // ADUNANZA END // The current server is selected, so we might display the reconnect option if (server == m_connected) { enable_reconnect = true; } // We want to know which options should be enabled, either one or both enable_static_on |= !server->IsStaticMember(); enable_static_off |= server->IsStaticMember(); index = GetNextItem( index, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); } wxMenu* serverMenu = new wxMenu(_("Server")); wxMenu* serverPrioMenu = new wxMenu(); serverPrioMenu->Append( MP_PRIOLOW, _("Low") ); serverPrioMenu->Append( MP_PRIONORMAL, _("Normal") ); serverPrioMenu->Append( MP_PRIOHIGH, _("High") ); serverMenu->Append( MP_CONNECTTO, _("Connect to server") ); serverMenu->Append( 12345, _("Priority"), serverPrioMenu ); serverMenu->AppendSeparator(); if (GetSelectedItemCount() == 1) { serverMenu->Append( MP_ADDTOSTATIC, _("Mark server as static") ); serverMenu->Append( MP_REMOVEFROMSTATIC, _("Mark server as non-static") ); } else { serverMenu->Append( MP_ADDTOSTATIC, _("Mark servers as static") ); serverMenu->Append( MP_REMOVEFROMSTATIC, _("Mark servers as non-static") ); } serverMenu->AppendSeparator(); if (GetSelectedItemCount() == 1) { serverMenu->Append( MP_REMOVE, _("Remove server") ); } else { serverMenu->Append( MP_REMOVE, _("Remove servers") ); } serverMenu->Append( MP_REMOVEALL, _("Remove all servers") ); serverMenu->AppendSeparator(); if (GetSelectedItemCount() == 1) { serverMenu->Append( MP_GETED2KLINK, _("Copy eD2k link to clipboard") ); } else { serverMenu->Append( MP_GETED2KLINK, _("Copy eD2k links to clipboard") ); } serverMenu->Enable( MP_REMOVEFROMSTATIC, enable_static_off ); serverMenu->Enable( MP_ADDTOSTATIC, enable_static_on ); if ( GetSelectedItemCount() == 1 ) { if ( enable_reconnect ) serverMenu->SetLabel( MP_CONNECTTO, _("Reconnect to server") ); } else { serverMenu->Enable( MP_CONNECTTO, false ); } PopupMenu( serverMenu, event.GetPoint() ); delete serverMenu; } void CServerListCtrl::OnPriorityChange( wxCommandEvent& event ) { uint32 priority = 0; switch ( event.GetId() ) { case MP_PRIOLOW: priority = SRV_PR_LOW; break; case MP_PRIONORMAL: priority = SRV_PR_NORMAL; break; case MP_PRIOHIGH: priority = SRV_PR_HIGH; break; default: return; } ItemDataList items = GetSelectedItems(); for ( unsigned int i = 0; i < items.size(); ++i ) { // ADUNANZA BEGIN // Back #if 0 CServer* server = (CServer*)items[ i ]; #else CServer* server = reinterpret_cast(items[i]); #endif // ADUNANZA END theApp->serverlist->SetServerPrio(server, priority); } } void CServerListCtrl::OnStaticChange( wxCommandEvent& event ) { bool isStatic = ( event.GetId() == MP_ADDTOSTATIC ); ItemDataList items = GetSelectedItems(); for ( unsigned int i = 0; i < items.size(); ++i ) { // ADUNANZA BEGIN // Back #if 0 CServer* server = (CServer*)items[ i ]; #else CServer* server = reinterpret_cast(items[i]); #endif // ADUNANZA END // Only update items that have the wrong setting if ( server->IsStaticMember() != isStatic ) { theApp->serverlist->SetStaticServer(server, isStatic); } } } void CServerListCtrl::OnConnectToServer( wxCommandEvent& WXUNUSED(event) ) { int item = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); if ( item > -1 ) { if ( theApp->IsConnectedED2K() ) { theApp->serverconnect->Disconnect(); } // ADUNANZA BEGIN // Back #if 0 theApp->serverconnect->ConnectToServer( (CServer*)GetItemData( item ) ); #else theApp->serverconnect->ConnectToServer( reinterpret_cast(GetItemData(item)) ); #endif // ADUNANZA END } } void CServerListCtrl::OnGetED2kURL( wxCommandEvent& WXUNUSED(event) ) { int pos = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); wxString URL; while ( pos != -1 ) { // ADUNANZA BEGIN // Back #if 0 CServer* server = (CServer*)GetItemData(pos); #else CServer* server = reinterpret_cast(GetItemData(pos)); #endif // ADUNANZA END URL += CFormat(wxT("ed2k://|server|%s|%d|/\n")) % server->GetFullIP() % server->GetPort(); pos = GetNextItem( pos, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); } URL.RemoveLast(); theApp->CopyTextToClipboard( URL ); } void CServerListCtrl::OnRemoveServers( wxCommandEvent& event ) { if ( event.GetId() == MP_REMOVEALL ) { if ( GetItemCount() ) { wxString question = _("Are you sure that you wish to delete all servers?"); if ( wxMessageBox( question, _("Cancel"), wxICON_QUESTION | wxYES_NO, this) == wxYES ) { if ( theApp->serverconnect->IsConnecting() ) { theApp->downloadqueue->StopUDPRequests(); theApp->serverconnect->StopConnectionTry(); theApp->serverconnect->Disconnect(); } RemoveAllServers(wxLIST_STATE_DONTCARE); } } } else if ( event.GetId() == MP_REMOVE ) { if ( GetSelectedItemCount() ) { wxString question; if (GetSelectedItemCount() == 1) { question = _("Are you sure that you wish to delete the selected server?"); } else { question = _("Are you sure that you wish to delete the selected servers?"); } if ( wxMessageBox( question, _("Cancel"), wxICON_QUESTION | wxYES_NO, this) == wxYES ) { RemoveAllServers(wxLIST_STATE_SELECTED); } } } } void CServerListCtrl::OnKeyPressed( wxKeyEvent& event ) { // Check if delete was pressed if ((event.GetKeyCode() == WXK_DELETE) || (event.GetKeyCode() == WXK_NUMPAD_DELETE)) { wxCommandEvent evt; evt.SetId( MP_REMOVE ); OnRemoveServers( evt ); } else { event.Skip(); } } int CServerListCtrl::SortProc(wxUIntPtr item1, wxUIntPtr item2, long sortData) { // ADUNANZA BEGIN // Back #if 0 CServer* server1 = (CServer*)item1; CServer* server2 = (CServer*)item2; #else CServer* server1 = reinterpret_cast(item1); CServer* server2 = reinterpret_cast(item2); #endif // ADUNANZA END int mode = (sortData & CMuleListCtrl::SORT_DES) ? -1 : 1; switch (sortData & CMuleListCtrl::COLUMN_MASK) { // Sort by server-name case COLUMN_SERVER_NAME: return mode * server1->GetListName().CmpNoCase(server2->GetListName()); // Sort by address case COLUMN_SERVER_ADDR: { if ( server1->HasDynIP() && server2->HasDynIP()) { return mode * server1->GetDynIP().CmpNoCase( server2->GetDynIP() ); } else if (server1->HasDynIP()) { return mode * -1; } else if (server2->HasDynIP()) { return mode * 1; } else { uint32 a = wxUINT32_SWAP_ALWAYS(server1->GetIP()); uint32 b = wxUINT32_SWAP_ALWAYS(server2->GetIP()); return mode * CmpAny(a, b); } } // Sort by port case COLUMN_SERVER_PORT: return mode * CmpAny( server1->GetPort(), server2->GetPort() ); // Sort by description case COLUMN_SERVER_DESC: return mode * server1->GetDescription().CmpNoCase( server2->GetDescription() ); // Sort by Ping // The -1 ensures that a value of zero (no ping known) is sorted last. case COLUMN_SERVER_PING: return mode * CmpAny( server1->GetPing() - 1, server2->GetPing() -1 ); // Sort by user-count case COLUMN_SERVER_USERS: return mode * CmpAny( server1->GetUsers(), server2->GetUsers() ); // Sort by file-count case COLUMN_SERVER_FILES: return mode * CmpAny( server1->GetFiles(), server2->GetFiles() ); // Sort by priority case COLUMN_SERVER_PRIO: { uint32 srv_pr1 = server1->GetPreferences(); uint32 srv_pr2 = server2->GetPreferences(); switch ( srv_pr1 ) { case SRV_PR_HIGH: srv_pr1 = SRV_PR_MAX; break; case SRV_PR_NORMAL: srv_pr1 = SRV_PR_MID; break; case SRV_PR_LOW: srv_pr1 = SRV_PR_MIN; break; default: return 0; } switch ( srv_pr2 ) { case SRV_PR_HIGH: srv_pr2 = SRV_PR_MAX; break; case SRV_PR_NORMAL: srv_pr2 = SRV_PR_MID; break; case SRV_PR_LOW: srv_pr2 = SRV_PR_MIN; break; default: return 0; } return mode * CmpAny( srv_pr1, srv_pr2 ); } // Sort by failure-count case COLUMN_SERVER_FAILS: return mode * CmpAny( server1->GetFailedCount(), server2->GetFailedCount() ); // Sort by static servers case COLUMN_SERVER_STATIC: { return mode * CmpAny( server2->IsStaticMember(), server1->IsStaticMember() ); } // Sort by version case COLUMN_SERVER_VERSION: return mode * FuzzyStrCmp(server1->GetVersion(), server2->GetVersion()); default: return 0; } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/IPFilter.cpp0000644000175000017500000004170512050266603020510 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include // Needed for GetDataDir #include #include "IPFilter.h" // Interface declarations. #include "IPFilterScanner.h" // Interface for flexer #include "Preferences.h" // Needed for thePrefs #include "amule.h" // Needed for theApp #include "Statistics.h" // Needed for theStats #include "HTTPDownload.h" // Needed for CHTTPDownloadThread #include "Logger.h" // Needed for AddDebugLogLine{C,N} #include // Needed for CFormat #include // Needed for CSimpleTokenizer #include // Needed for UnpackArchive #include // Needed for CTextFile #include "ThreadScheduler.h" // Needed for CThreadScheduler and CThreadTask #include "ClientList.h" // Needed for CClientList #include "ServerList.h" // Needed for CServerList #include // Needed for DEBUG_ONLY() #include "RangeMap.h" // Needed for CRangeMap #include "ServerConnect.h" // Needed for ConnectToAnyServer() #include "DownloadQueue.h" // Needed for theApp->downloadqueue //////////////////////////////////////////////////////////// // CIPFilterEvent BEGIN_DECLARE_EVENT_TYPES() DECLARE_EVENT_TYPE(MULE_EVT_IPFILTER_LOADED, -1) END_DECLARE_EVENT_TYPES() DEFINE_EVENT_TYPE(MULE_EVT_IPFILTER_LOADED) class CIPFilterEvent : public wxEvent { public: CIPFilterEvent(CIPFilter::RangeIPs rangeIPs, CIPFilter::RangeLengths rangeLengths, CIPFilter::RangeNames rangeNames) : wxEvent(-1, MULE_EVT_IPFILTER_LOADED) { // Physically copy the vectors, this will hopefully resize them back to their needed capacity. m_rangeIPs = rangeIPs; m_rangeLengths = rangeLengths; // This one is usually empty, and should always be swapped, not copied. std::swap(m_rangeNames, rangeNames); } /** @see wxEvent::Clone */ virtual wxEvent* Clone() const { return new CIPFilterEvent(*this); } CIPFilter::RangeIPs m_rangeIPs; CIPFilter::RangeLengths m_rangeLengths; CIPFilter::RangeNames m_rangeNames; }; typedef void (wxEvtHandler::*MuleIPFilterEventFunction)(CIPFilterEvent&); //! Event-handler for completed hashings of new shared files and partfiles. #define EVT_MULE_IPFILTER_LOADED(func) \ DECLARE_EVENT_TABLE_ENTRY(MULE_EVT_IPFILTER_LOADED, -1, -1, \ (wxObjectEventFunction) (wxEventFunction) \ wxStaticCastEvent(MuleIPFilterEventFunction, &func), (wxObject*) NULL), //////////////////////////////////////////////////////////// // Thread task for loading the ipfilter.dat files. /** * This task loads the two ipfilter.dat files, a task that * can take quite a while on a slow system with a large dat- * file. */ class CIPFilterTask : public CThreadTask { public: CIPFilterTask(wxEvtHandler* owner) : CThreadTask(wxT("Load IPFilter"), wxEmptyString, ETP_Critical), m_storeDescriptions(false), m_owner(owner) { } private: void Entry() { AddLogLineN(_("Loading IP filters 'ipfilter.dat' and 'ipfilter_static.dat'.")); if ( !LoadFromFile(theApp->ConfigDir + wxT("ipfilter.dat")) && thePrefs::UseIPFilterSystem() ) { // Load from system wide IP filter file wxStandardPathsBase &spb(wxStandardPaths::Get()); #ifdef __WXMSW__ wxString dataDir(spb.GetPluginsDir()); #elif defined(__WXMAC__) wxString dataDir(spb.GetDataDir()); #else // ADUNANZA BEGIN #if 0 wxString dataDir(spb.GetDataDir().BeforeLast(wxT('/')) + wxT("/amule")); #else wxString dataDir(spb.GetDataDir().BeforeLast(wxT('/')) + wxT("/") + wxT(PACKAGE_ADUNANZA)); #endif // ADUNANZA END #endif wxString systemwideFile(JoinPaths(dataDir,wxT("ipfilter.dat"))); LoadFromFile(systemwideFile); } LoadFromFile(theApp->ConfigDir + wxT("ipfilter_static.dat")); uint8 accessLevel = thePrefs::GetIPFilterLevel(); uint32 size = m_result.size(); // Reserve a little more so we don't have to resize the vector later. // (Map ranges can exist that have to be stored in several parts.) // Extra memory will be freed in the end. m_rangeIPs.reserve(size + 1000); m_rangeLengths.reserve(size + 1000); if (m_storeDescriptions) { m_rangeNames.reserve(size + 1000); } for (IPMap::iterator it = m_result.begin(); it != m_result.end(); ++it) { if (it->AccessLevel < accessLevel) { // Calculate range "length" // (which is included-end - start and thus length - 1) // Encoding: // 0 - 0x7fff same // 0x8000 - 0xffff 0xfff - 0x07ffffff // that means: remove msb, shift left by 12 bit, add 0xfff // so it can cover 8 consecutive class A nets // larger ranges (or theoretical ranges with uneven ends) have to be split uint32 startIP = it.keyStart(); uint32 realLength = it.keyEnd() - it.keyStart() + 1; #ifdef __DEBUG__ std::string * descp = 0; #endif while (realLength) { m_rangeIPs.push_back(startIP); uint32 curLength = realLength; uint16 pushLength; if (realLength <= 0x8000) { pushLength = realLength - 1; } else { if (curLength >= 0x08000000) { // range to big, limit curLength = 0x08000000; } else { // cut off LSBs curLength &= 0x07FFF000; } pushLength = ((curLength - 1) >> 12) | 0x8000; } m_rangeLengths.push_back(pushLength); #ifdef __DEBUG__ if (m_storeDescriptions) { // std::string has no ref counting, so swap it // (it's used so we need half the space than wxString with wide chars) if (descp) { // we split the range so we have to duplicate it m_rangeNames.push_back(*descp); } else { // push back empty string and swap m_rangeNames.push_back(std::string()); descp = & * m_rangeNames.rbegin(); std::swap(*descp, it->Description); } } #endif realLength -= curLength; startIP += curLength; } } } // Numbers are probably different: // - ranges from map that are not blocked because of their level are not added to the table // - some ranges from the map have to be split for the table AddDebugLogLineN(logIPFilter, CFormat(wxT("Ranges in map: %d blocked ranges in table: %d")) % size % m_rangeIPs.size()); CIPFilterEvent evt(m_rangeIPs, m_rangeLengths, m_rangeNames); wxPostEvent(m_owner, evt); } /** * This structure is used to contain the range-data in the rangemap. */ struct rangeObject { bool operator==( const rangeObject& other ) const { return AccessLevel == other.AccessLevel; } // Since descriptions are only used for debugging messages, there // is no need to keep them in memory when running a non-debug build. #ifdef __DEBUG__ //! Contains the user-description of the range. std::string Description; #endif //! The AccessLevel for this filter. uint8 AccessLevel; }; //! The is the type of map used to store the IPs. typedef CRangeMap IPMap; bool m_storeDescriptions; // the generated filter CIPFilter::RangeIPs m_rangeIPs; CIPFilter::RangeLengths m_rangeLengths; CIPFilter::RangeNames m_rangeNames; wxEvtHandler* m_owner; // temporary map for filter generation IPMap m_result; /** * Helper function. * * @param IPstart The start of the IP-range. * @param IPend The end of the IP-range, must be less than or equal to IPstart. * @param AccessLevel The AccessLevel of this range. * @param Description The assosiated description of this range. * @return true if the range was added, false if it was discarded. * * This function inserts the specified range into the IPMap. Invalid * ranges where the AccessLevel is not within the range 0..255, or * where IPEnd < IPstart not inserted. */ bool AddIPRange(uint32 IPStart, uint32 IPEnd, uint16 AccessLevel, const char* DEBUG_ONLY(Description)) { if (AccessLevel < 256) { if (IPStart <= IPEnd) { rangeObject item; item.AccessLevel = AccessLevel; #ifdef __DEBUG__ if (m_storeDescriptions) { item.Description = Description; } #endif m_result.insert(IPStart, IPEnd, item); return true; } } return false; } /** * Loads a IP-list from the specified file, can be text or zip. * * @return True if the file was loaded, false otherwise. **/ int LoadFromFile(const wxString& file) { const CPath path = CPath(file); if (!path.FileExists() || TestDestroy()) { return 0; } #ifdef __DEBUG__ m_storeDescriptions = theLogger.IsEnabled(logIPFilter); #endif const wxChar* ipfilter_files[] = { wxT("ipfilter.dat"), wxT("guardian.p2p"), wxT("guarding.p2p"), NULL }; // Try to unpack the file, might be an archive if (UnpackArchive(path, ipfilter_files).second != EFT_Text) { AddLogLineC(CFormat(_("Failed to load ipfilter.dat file '%s', unknown format encountered.")) % file); return 0; } int filtercount = 0; yyip_Bad = 0; wxFFile readFile; if (readFile.Open(path.GetRaw())) { yyip_Line = 1; yyiprestart(readFile.fp()); uint32 IPStart = 0; uint32 IPEnd = 0; uint32 IPAccessLevel = 0; char * IPDescription; #ifdef __DEBUG__ uint32 time1 = GetTickCountFullRes(); #endif while (yyiplex(IPStart, IPEnd, IPAccessLevel, IPDescription)) { AddIPRange(IPStart, IPEnd, IPAccessLevel, IPDescription); filtercount++; } #ifdef __DEBUG__ uint32 time2 = GetTickCountFullRes(); AddDebugLogLineN(logIPFilter, CFormat(wxT("time for lexer: %.3f")) % ((time2-time1) / 1000.0)); #endif } else { AddLogLineC(CFormat(_("Failed to load ipfilter.dat file '%s', could not open file.")) % file); return 0; } wxString msg = CFormat(wxPLURAL("Loaded %u IP-range from '%s'.", "Loaded %u IP-ranges from '%s'.", filtercount)) % filtercount % file; if (yyip_Bad) { msg << wxT(" ") << ( CFormat(wxPLURAL("%u malformed line was discarded.", "%u malformed lines were discarded.", yyip_Bad)) % yyip_Bad ); } AddLogLineN(msg); return filtercount; } }; //////////////////////////////////////////////////////////// // CIPFilter BEGIN_EVENT_TABLE(CIPFilter, wxEvtHandler) EVT_MULE_IPFILTER_LOADED(CIPFilter::OnIPFilterEvent) END_EVENT_TABLE() /** * This function creates a text-file containing the specified text, * but only if the file does not already exist. */ static bool CreateDummyFile(const wxString& filename, const wxString& text) { // Create template files if (!wxFileExists(filename)) { CTextFile file; if (file.Open(filename, CTextFile::write)) { file.WriteLine(text); return true; } } return false; } CIPFilter::CIPFilter() : m_ready(false), m_startKADWhenReady(false), m_connectToAnyServerWhenReady(false) { // Setup dummy files for the curious user. const wxString normalDat = theApp->ConfigDir + wxT("ipfilter.dat"); const wxString normalMsg = wxString() << wxT("# This file is used by aMule to store ipfilter lists downloaded\n") << wxT("# through the auto-update functionality. Do not save ipfilter-\n") << wxT("# ranges here that should not be overwritten by aMule.\n"); if (CreateDummyFile(normalDat, normalMsg)) { // redownload if user deleted file thePrefs::SetLastHTTPDownloadURL(HTTP_IPFilter, wxEmptyString); } const wxString staticDat = theApp->ConfigDir + wxT("ipfilter_static.dat"); const wxString staticMsg = wxString() << wxT("# This file is used to store ipfilter-ranges that should\n") << wxT("# not be overwritten by aMule. If you wish to keep a custom\n") << wxT("# set of ipfilter-ranges that take precedence over ipfilter-\n") << wxT("# ranges aquired through the auto-update functionality, then\n") << wxT("# place them in this file. aMule will not change this file."); CreateDummyFile(staticDat, staticMsg); // First load currently available filter, so network connect is possible right after // (in case filter download takes some time). Reload(); // Check if update should be done only after that. m_updateAfterLoading = thePrefs::IPFilterAutoLoad() && !thePrefs::IPFilterURL().IsEmpty(); } void CIPFilter::Reload() { // We keep the current filter till the new one has been loaded. CThreadScheduler::AddTask(new CIPFilterTask(this)); } uint32 CIPFilter::BanCount() const { wxMutexLocker lock(m_mutex); return m_rangeIPs.size(); } bool CIPFilter::IsFiltered(uint32 IPTest, bool isServer) { if ((!thePrefs::IsFilteringClients() && !isServer) || (!thePrefs::IsFilteringServers() && isServer)) { return false; } if (!m_ready) { // Somebody connected before we even started the networks. // Filter is not up yet, so block him. AddDebugLogLineN(logIPFilter, CFormat(wxT("Filtered IP %s because filter isn't ready yet.")) % Uint32toStringIP(IPTest)); if (isServer) { theStats::AddFilteredServer(); } else { theStats::AddFilteredClient(); } return true; } wxMutexLocker lock(m_mutex); // The IP needs to be in host order uint32 ip = wxUINT32_SWAP_ALWAYS(IPTest); int imin = 0; int imax = m_rangeIPs.size() - 1; int i; bool found = false; while (imin <= imax) { i = (imin + imax) / 2; uint32 curIP = m_rangeIPs[i]; if (curIP <= ip) { uint32 curLength = m_rangeLengths[i]; if (curLength >= 0x8000) { curLength = ((curLength & 0x7fff) << 12) + 0xfff; } if (curIP + curLength >= ip) { found = true; break; } } if (curIP > ip) { imax = i - 1; } else { imin = i + 1; } } if (found) { AddDebugLogLineN(logIPFilter, CFormat(wxT("Filtered IP %s%s")) % Uint32toStringIP(IPTest) % (i < (int)m_rangeNames.size() ? (wxT(" (") + wxString(char2unicode(m_rangeNames[i].c_str())) + wxT(")")) : wxString(wxEmptyString))); if (isServer) { theStats::AddFilteredServer(); } else { theStats::AddFilteredClient(); } return true; } return false; } void CIPFilter::Update(const wxString& strURL) { if (!strURL.IsEmpty()) { m_URL = strURL; wxString filename = theApp->ConfigDir + wxT("ipfilter.download"); wxString oldfilename = theApp->ConfigDir + wxT("ipfilter.dat"); CHTTPDownloadThread *downloader = new CHTTPDownloadThread(m_URL, filename, oldfilename, HTTP_IPFilter, true, true); downloader->Create(); downloader->Run(); } } void CIPFilter::DownloadFinished(uint32 result) { wxString datName = wxT("ipfilter.dat"); if (result == HTTP_Success) { // download succeeded. proceed with ipfilter loading wxString newDat = theApp->ConfigDir + wxT("ipfilter.download"); wxString oldDat = theApp->ConfigDir + datName; if (wxFileExists(oldDat) && !wxRemoveFile(oldDat)) { AddLogLineC(CFormat(_("Failed to remove %s file, aborting update.")) % datName); result = HTTP_Error; } else if (!wxRenameFile(newDat, oldDat)) { AddLogLineC(CFormat(_("Failed to rename new %s file, aborting update.")) % datName); result = HTTP_Error; } else { AddLogLineN(CFormat(_("Successfully updated %s")) % datName); } } else if (result == HTTP_Skipped) { AddLogLineN(CFormat(_("Skipped download of %s, because requested file is not newer.")) % datName); } else { AddLogLineC(CFormat(_("Failed to download %s from %s")) % datName % m_URL); } if (result == HTTP_Success) { // Reload both ipfilter files on success Reload(); } } void CIPFilter::OnIPFilterEvent(CIPFilterEvent& evt) { { wxMutexLocker lock(m_mutex); std::swap(m_rangeIPs, evt.m_rangeIPs); std::swap(m_rangeLengths, evt.m_rangeLengths); std::swap(m_rangeNames, evt.m_rangeNames); m_ready = true; } if (theApp->IsOnShutDown()) { return; } AddLogLineN(_("IP filter is ready")); if (thePrefs::IsFilteringClients()) { theApp->clientlist->FilterQueues(); } if (thePrefs::IsFilteringServers()) { theApp->serverlist->FilterServers(); } // Now start networks we didn't start earlier if (m_connectToAnyServerWhenReady || m_startKADWhenReady) { AddLogLineC(_("Connecting")); } if (m_connectToAnyServerWhenReady) { m_connectToAnyServerWhenReady = false; theApp->serverconnect->ConnectToAnyServer(); } if (m_startKADWhenReady) { m_startKADWhenReady = false; theApp->StartKad(); } theApp->ShowConnectionState(true); // update connect button if (thePrefs::GetSrcSeedsOn()) { theApp->downloadqueue->LoadSourceSeeds(); } // Trigger filter update if configured if (m_updateAfterLoading) { m_updateAfterLoading = false; Update(thePrefs::IPFilterURL()); } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/AdunanzAStreaming.h0000644000175000017500000000674012050266603022052 0ustar l3onl3on// // This file is part of the aMule AdunanzA Project (mod of official aMule) // // Copyright (c) 2003-2012 aMule AdunanzA Team ( http://www.adunanza.net ) // // Any parts of this program derived from the xMule, lMule, eMule or aMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #if !defined(_ADUNANZA_STREAMING_H_) #define _ADUNANZA_STREAMING_H_ #if !defined(CLIENT_GUI) #include #include "Types.h" // needed for uint16 class CPartFile; class CAdunanzAStreaming { public: enum statuses { None, /*!< None / unknown status / stopped */ Requesting, /*!< a request has been issued but not all steps has been fully executed, so it it not yet "requested" */ Requested, /*!< a streaming request has been issued */ Ready, /*!< a file is ready for streaming play */ Started, /*!< streaming running */ }; public: statuses m_status; /*!< current status */ std::list m_suspendedDownloads; /*!< list of PartFile suspended and to resume after a stop */ CPartFile* m_pTargetFile; /*!< file target of streaming playing */ int m_originalTargetPriority; /*!< priority of target before streaming request, to restore at end of streaming */ uint16 m_lastConsecutiveCompletePart; /*!< index of last complete chunk in a series of consecutive complete chunks */ uint16 m_requiredParts; /*!< minimum number of consecutive chunks needed for preview (corresponds to percentage in preferences) */ public: void updateLastConsecutiveCompletePart(); inline uint16 getLastConsecutiveCompletePart() const {return m_lastConsecutiveCompletePart;} inline uint16 updateAndGetLastConsecutiveCompletePart() { updateLastConsecutiveCompletePart(); return getLastConsecutiveCompletePart();} CAdunanzAStreaming() { m_status = CAdunanzAStreaming::None; m_pTargetFile = 0; m_originalTargetPriority = -1; m_lastConsecutiveCompletePart = 0; } void resumeAllSuspended(); void stop(); virtual ~CAdunanzAStreaming() { stop(); } inline bool canStart() const { return (m_status == CAdunanzAStreaming::Ready); } bool start(); bool canRequest(const CPartFile* pCandidateTarget) const; bool request(CPartFile* pTarget, std::list& downloadingList); bool request(CPartFile* pTarget); void checkForReady(); void checkForStop(); // helper function for CPartFile inline bool isPreviewEnable(const CPartFile* p) const { return (p && (m_status != CAdunanzAStreaming::None) && p == (const CPartFile*) m_pTargetFile); } protected: // abilita/disabilita capo e bottone per immissione rapida link Ed2k static void enableFastEd2kLinks(bool bEnable); }; #endif #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/RemoteSettings.h0000644000175000017500000001612311332327377021457 0ustar l3onl3on// // This file is part of the aMule AdunanzA Project (mod of official aMule) // // Copyright (c) 2003-2008 aMule AdunanzA Team ( http://www.adunanza.net ) // // Any parts of this program derived from the xMule, lMule, eMule or aMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #if !defined(_REMOTESETTINGS_H_) #define _REMOTESETTINGS_H_ #include // per std::exception (Mr Hyde) #include // per std::vector (Mr Hyde) #include // per std::find_if (Mr Hyde) #include // to let wxWidgets choose a wxConfig class for your platform #include // base config class #include // wxFileConfig class #include // wxString // #include // wxMutex #include "Types.h" #include "KADUSettings.h" class CMatchBannedModPredicate { private: wxString m_modName; public: CMatchBannedModPredicate(const wxString& k) : m_modName(k) {}; ~CMatchBannedModPredicate() {}; inline bool operator()(const wxString& toCheck) const { return (m_modName.Contains(toCheck)); } }; class CRemoteSettings { // member variables private: static const unsigned char VALIDITY_MASK = 0xA5; // 1010 0101 unsigned char m_validity; time_t m_nextUpdate; /*!< time for next RemoteSettings update */ int m_failCount; /*!< failure counter */ long m_expireTime; /*!< expire */ long m_recheckTime; /*!< time for a new check */ wxFileConfig* m_pFileConfig; /*!< wx file config structure used to read/write settings from/to file */ wxString m_configDir; /*!< directory where to store / from where to read config file */ // wxMutex m_mutex; // Mr Hyde: per evitare casini di accessi concorrenti public: static const wxString ADUNANZA_CONF; // name of adunanza.conf file #if 0 long m_kadRepublishTimeK; long m_kadRepublishTimeS; long m_kadRepublishTimeN; long m_kadIndexLifeK; // Mr Hyde per allineamento a eMule 3.15b74 long m_kadIndexLifeS; // Mr Hyde per allineamento a eMule 3.15b74 uint32_t m_kadTotalStoreKey; // Mr Hyde: cambiato da long a uint32_t in accordo con kademlia.h uint32_t m_kadTotalStoreSrc; // Mr Hyde: cambiato da long a uint32_t in accordo con kademlia.h uint32_t m_kadTotalStoreNotes; // Mr Hyde: cambiato da long a uint32_t in accordo con kademlia.h long m_kadTotalSearchFile; long m_kadMaxSrcFile; long m_kadMaxNotFile; double m_kadFreshGuess_Tol; double m_kadFreshGuess_Weight; long m_kadFreshGuess_NoNorm; long m_kadFreshGuess_LowNorm; #endif long m_maxSrc; long m_maxSrcUdp; #if 0 long m_kadFindValue; long m_kadStore; long m_kadFindNode; long m_kadReaskTime; long km_adPubTime; long m_kadReaskIncs; long m_mVer; unsigned char m_kadOpcode; unsigned char m_kadZOpcode; #endif CKADUSettings m_KADUSettings; // Mr Hyde allineamento a 3.16: per ripartitore di banda uint32_t m_AduValRipBanda_Std; wxString m_UpdateURL; std::vector m_badMods; // Mr Hyde: lista stringhe per Mod di cui fare il ban private: inline void setInvalid() {m_validity = 0x0;} inline void setValid() {m_validity = CRemoteSettings::VALIDITY_MASK;} public: CRemoteSettings(); virtual ~CRemoteSettings(); void AllocateAdunanzaConf(); // Mr Hyde // void ReadSettings(wxConfigBase* pBaseCfg); void ReadSettings(const wxConfigBase& baseCfg); void SaveSettings(); void PrintAllValues(); void SaveToFile(); void CheckUpdate(); void FileDownloadedCallback(int result); // Mr Hyde inline bool isBannedMod(const wxString& modName) const { return (std::find_if( m_badMods.begin(), m_badMods.end(), CMatchBannedModPredicate(modName)) != m_badMods.end()); } inline bool isValid() const {return (m_validity == CRemoteSettings::VALIDITY_MASK);} /* inline long get_kadRepublishTimeK() const {return m_kadRepublishTimeK;} inline long get_kadRepublishTimeS() const {return m_kadRepublishTimeS;} inline long get_kadRepublishTimeN() const {return m_kadRepublishTimeN;} inline long get_kadIndexLifeK() const {return m_kadIndexLifeK;} inline long get_kadIndexLifeS() const {return m_kadIndexLifeS;} inline uint32_t get_kadTotalStoreKey() const {return m_kadTotalStoreKey;} inline uint32_t get_kadTotalStoreSrc() const {return m_kadTotalStoreSrc;} inline uint32_t get_kadTotalStoreNotes() const {return m_kadTotalStoreNotes;} inline long get_kadTotalSearchFile() const {return m_kadTotalSearchFile;} inline long get_kadMaxSrcFile() const { return m_kadMaxSrcFile;} inline long get_kadMaxNotFile() const { return m_kadMaxNotFile;} inline double get_kadFreshGuess_Tol() const { return m_kadFreshGuess_Tol;} inline double get_kadFreshGuess_Weight() const { return m_kadFreshGuess_Weight;} inline long get_kadFreshGuess_NoNorm() const { return m_kadFreshGuess_NoNorm;} inline long get_kadFreshGuess_LowNorm() const { return m_kadFreshGuess_LowNorm;} inline long get_maxSrc() const { return m_maxSrc;} inline long get_maxSrcUdp() const { return m_maxSrcUdp;} inline long get_kadFindValue() const { return m_kadFindValue;} inline long get_kadStore() const { return m_kadStore;} inline long get_kadFindNode() const { return m_kadFindNode;} inline long get_kadReaskTime() const { return m_kadReaskTime;} inline long get_kadPubTime() const { return m_kadPubTime;} inline long get_kadReaskIncs() const { return m_kadReaskIncs;} inline long get_mVer() const { return m_mVer;} inline unsigned char get_kadOpcode() const { return m_kadOpcode;} inline unsigned char get_kadZOpcode() const { return m_kadZOpcode;} */ inline const CKADUSettings& getKADUSettings() const {return m_KADUSettings;} // Mr Hyde allineamento a 3.16: per ripartitore di banda inline uint32_t get_AduValRipBanda_Std() const { return m_AduValRipBanda_Std;} inline const wxString& get_UpdateURL() const { return m_UpdateURL;} inline const std::vector& get_badMods() const { return m_badMods;} }; #endif // _REMOTESETTINGS_H_ amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/OtherFunctions.h0000644000175000017500000003031612050266603021445 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef OTHERFUNCTIONS_H #define OTHERFUNCTIONS_H #include // Needed for wxLANGUAGE_ constants #include "Types.h" // Needed for uint16, uint32 and uint64 #include "Preferences.h" // Needed for AllCategoryFilter enumeration #include // Needed for std::for_each // Do_not_auto_remove (mingw-gcc-3.4.5) class CPath; /** * Helper function. * * @param ArgA The base value. * @param ArgB The value to compare ArgA against. * @return See below. * * Use this function to safely compare two arguments of a type that supports * the "<" operator. It works like strcmp and returns a negative value if ArgA * is less than ArgB, zero if ArgA is equal to ArgB and a positive value if * ArgA is greater than ArgB. */ template int CmpAny(const TYPE& ArgA, const TYPE& ArgB) { if ( ArgA < ArgB ) { return -1; } else if ( ArgB < ArgA ) { return 1; } else { return 0; } } //! Overloaded version of CmpAny for use with wxStrings. inline int CmpAny(const wxString& ArgA, const wxString& ArgB) { if (ArgA.IsEmpty() && !ArgB.IsEmpty()) { return -1; } else if (!ArgA.IsEmpty() && ArgB.IsEmpty()) { return 1; } else if (ArgA.IsEmpty() && ArgB.IsEmpty()) { return 0; } else { return ArgA.CmpNoCase( ArgB ); } } //! Overloaded version of CmpAny for use with C-Strings (Unicoded). inline int CmpAny(const wxChar* ArgA, const wxChar* ArgB) { return CmpAny(wxString( ArgA ), wxString( ArgB )); } /** * Removes the first instance of a value from a STL-like list: list, vector or deque. * * @param list The list to manipulate. * @param item The value to search for and remove. * @return The number of instances removed. */ template unsigned int EraseFirstValue( LIST& list, const ITEM& item ) { typename LIST::iterator it = list.begin(); for (; it != list.end(); ++it) { if (*it == item) { list.erase(it); return true; } } return false; } /** * Removes all instances of a value from a STL-like list: list, vector or deque. * * @param list The list to manipulate. * @param item The value to search for and remove. * @return The number of instances removed. */ template unsigned int EraseValue( LIST& list, const ITEM& item ) { typename LIST::iterator it = list.begin(); unsigned int count = 0; for ( ; it != list.end(); ) { if ( *it == item ) { it = list.erase( it ); count++; } else { ++it; } } return count; } //! Used by DeleteContents struct SDoDelete { // Used for lists, vectors, deques, etc. template void operator()(TYPE* ptr) { delete ptr; } // Used for maps, hashmaps, rangemaps, etc. template void operator()(const std::pair& pair) { delete pair.second; } }; /** Frees the contents of a list or map like stl container, clearing it afterwards. */ template void DeleteContents(STL_CONTAINER& container) { // Ensure that the actual container wont contain dangling pointers during // this operation, to ensure that the destructors cant access them. STL_CONTAINER copy; std::swap(copy, container); std::for_each(copy.begin(), copy.end(), SDoDelete()); } /** * Copies elements from the range [first, first + n) to the range [result, result + n). */ template OutputIterator STLCopy_n(InputIterator first, size_t n, OutputIterator result) { return std::copy(first, first + n, result); } /** * Returns a description of the version of aMule being used. * * @return A detailed description of the aMule version, including wx information. * * Use this rather than just using the VERSION or CURRENT_VERSION_LONG * constants, when displaying information to the user. The purpose is to * help with debugging. */ wxString GetMuleVersion(); /** * Helperfunction for accessing a child of the calling widget. * * @param IdOrName The ID or the Name of the widget to find. * @param type The widget-type to cast the found widget to. * * Use this function as a replacement for the following constructs: * - wxStaticCast( FindWindow( ), ) * - (*)FindWindow( ) * * It has the advantage of validating the cast in debug builds and being much * shorter than than manually typing wxStaticCast + FindWindow. This mean that * we will be alerted in case of widget changing type, instead of getting just * getting bad mojo due to casting a pointer to the wrong type. */ #define CastChild( IdOrName, type ) dynamic_cast( FindWindow( IdOrName ) ) /** * Helperfunction for accessing the child of a any widget by ID. * * @param ID The ID of the widget to find. * @param parent The parent of the widget to find, or NULL to search from the top. * @param type The type to cast the widget to. * * @see CastChild() */ #define CastByID( ID, parent, type ) dynamic_cast( wxWindow::FindWindowById( (ID), (parent) ) ) /** * Helperfunction for accessing the child of a any widget by Name. * * @param Name The Name of the widget to find. * @param parent The parent of the widget to find, or NULL to search from the top. * @param type The type to cast the widget to. * * @see CastChild() */ #define CastByName( Name, parent, type ) dynamic_cast( wxWindow::FindWindowByName( (Name), (parent) ) ) // From Gnucleus project [found by Tarod] // Base16/Base32/Base64 Encode/Decode functions wxString EncodeBase16(const unsigned char* buffer, unsigned int bufLen); unsigned int DecodeBase16(const wxString &base16Buffer, unsigned int base16BufLen, unsigned char *buffer); wxString EncodeBase32(const unsigned char* buffer, unsigned int bufLen); unsigned int DecodeBase32(const wxString &base32Buffer, unsigned int base32BufLen, unsigned char *buffer); wxString EncodeBase64(const char* buffer, unsigned int bufLen); unsigned int DecodeBase64(const wxString &base64Buffer, unsigned int base64BufLen, unsigned char *buffer); // Converts the number of bytes to human readable form. wxString CastItoXBytes(uint64 count); // Converts the number to human readable form, abbreviating when nessecary. wxString CastItoIShort(uint64 number); // Converts a number of bytes to a human readable speed value. wxString CastItoSpeed(uint32 bytes); // Converts an amount of seconds to human readable time. wxString CastSecondsToHM(uint32 seconds, uint16 msecs = 0); // Returns the amount of Bytes the provided size-type represents uint32 GetTypeSize(uint8 type); // Returns the string associated with a file-rating value. wxString GetRateString(uint16 rate); // The following functions are used to identify and/or name the type of a file enum FileType { ftAny, ftVideo, ftAudio, ftArchive, ftCDImage, ftPicture, ftText, ftProgram }; // Examins a filename and returns the enumerated value assosiated with it, or ftAny if unknown extension FileType GetFiletype(const CPath& filename); // Returns the description of a filetype: Movies, Audio, Pictures and so on... wxString GetFiletypeDesc(FileType type, bool translated = true); // Shorthand for GetFiletypeDesc(GetFiletype(filename)) wxString GetFiletypeByName(const CPath& filename, bool translated = true); // Returns the name associated with a category value. wxString GetCatTitle(AllCategoryFilter cat); // ADUNANZA BEGIN // Backport (moved in another file) #if 0 /* Other */ //! Returns the number of items in an array. #define itemsof(x) (sizeof(x)/sizeof(x[0])) #endif // ADUNANZA END /////////////////////////////////////////////////////////////////////////////// // ED2K File Type // enum EED2KFileType { ED2KFT_ANY, ED2KFT_AUDIO, ED2KFT_VIDEO, ED2KFT_IMAGE, ED2KFT_PROGRAM, ED2KFT_DOCUMENT, ED2KFT_ARCHIVE, ED2KFT_CDIMAGE }; class EED2KFileTypeClass { public: EED2KFileTypeClass() { s_t = ED2KFT_ANY; } EED2KFileTypeClass(EED2KFileType t) { s_t = t; } EED2KFileType GetType() const { return s_t; } private: EED2KFileType s_t; }; EED2KFileType GetED2KFileTypeID(const CPath& fileName); wxString GetED2KFileTypeSearchTerm(EED2KFileType iFileID); wxString GetFileTypeByName(const CPath& fileName); EED2KFileType GetED2KFileTypeSearchID(EED2KFileType iFileID); /////////////////////////////////////////////////////////////////////////////// // md4cmp -- replacement for memcmp(hash1,hash2,16) // Like 'memcmp' this function returns 0, if hash1==hash2, and !0, if hash1!=hash2. // NOTE: Do *NOT* use that function for determining if hash1hash2. inline int md4cmp(const void* hash1, const void* hash2) { return memcmp(hash1, hash2, 16); } // md4clr -- replacement for memset(hash,0,16) inline void md4clr(void* hash) { memset(hash, 0, 16); } // md4cpy -- replacement for memcpy(dst,src,16) inline void md4cpy(void* dst, const void* src) { memcpy(dst, src, 16); } // DumpMem ... Dumps mem ;) wxString DumpMemToStr(const void *buff, int n, const wxString& msg = wxEmptyString, bool ok = true); void DumpMem(const void *buff, int n, const wxString& msg = wxEmptyString, bool ok = true); void DumpMem_DW(const uint32 *ptr, int count); // Returns special source ID for GUI. // It's actually IP<<16+Port #define GUI_ID(x,y) (uint64)((((uint64)x)<<16) + (uint64)y) // And so... #define PORT_FROM_GUI_ID(x) (x & 0xFFFF) #define IP_FROM_GUI_ID(x) (x >> 16) inline long int make_full_ed2k_version(int a, int b, int c) { return ((a << 17) | (b << 10) | (c << 7)); } wxString GetConfigDir(const wxString &configFile = wxT("amule.conf")); #if !wxCHECK_VERSION(2, 9, 0) enum { wxLANGUAGE_ASTURIAN = wxLANGUAGE_USER_DEFINED + 1 }; #endif /** * Adds aMule's custom languages to db. */ void InitCustomLanguages(); /** * Initializes locale */ void InitLocale(wxLocale& locale, int language); /** * Converts a string locale definition to a wxLANGUAGE id. */ int StrLang2wx(const wxString& language); /** * Converts a wxLANGUAGE id to a string locale name. */ wxString wxLang2Str(const int lang); /** * Generate MD5Hash of prompt input */ wxString GetPassword(); #if wxUSE_THREADS #include /** * Automatically unlocks a mutex on construction and locks it on destruction. * * This class is the complement of wxMutexLocker. It is intended to be used * when a mutex, which is locked for a period of time, needs to be * temporarily unlocked for a bit. For example: * * wxMutexLocker lock(mutex); * * // ... do stuff that requires that the mutex is locked ... * * { * CMutexUnlocker unlocker(mutex); * // ... do stuff that requires that the mutex is unlocked ... * } * * // ... do more stuff that requires that the mutex is locked ... * */ class CMutexUnlocker { public: // unlock the mutex in the ctor CMutexUnlocker(wxMutex& mutex) : m_isOk(false), m_mutex(mutex) { m_isOk = ( m_mutex.Unlock() == wxMUTEX_NO_ERROR ); } // returns true if mutex was successfully unlocked in ctor bool IsOk() const { return m_isOk; } // lock the mutex in dtor ~CMutexUnlocker() { if ( IsOk() ) m_mutex.Lock(); } private: // no assignment operator nor copy ctor CMutexUnlocker(const CMutexUnlocker&); CMutexUnlocker& operator=(const CMutexUnlocker&); bool m_isOk; wxMutex& m_mutex; }; #endif /* wxUSE_THREADS */ #endif // OTHERFUNCTIONS_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/AdunanzA.cpp0000644000175000017500000006366112050266603020540 0ustar l3onl3on// // This file is part of the aMule AdunanzA Project (mod of official aMule) // // Copyright (c) 2003-2008 aMule AdunanzA Team ( http://www.adunanza.net ) // // Any parts of this program derived from the xMule, lMule, eMule or aMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #if defined(ENABLE_ADUNSLU2) #warning AdunanzA NSLU2 patches enabled #endif #include "amule.h" #include "updownclient.h" #include "Friend.h" #include "ClientList.h" #include "OtherFunctions.h" #include "PartFile.h" #include "ListenSocket.h" #include "Friend.h" #include "Packet.h" #include "SafeFile.h" #include "Preferences.h" #include "Statistics.h" #include "ClientCredits.h" #include "IPFilter.h" #include "UploadQueue.h" #include "DownloadQueue.h" #include "SearchList.h" #include "SharedFileList.h" #include "ClientRef.h" // Mr Hyde per Clarensio #include // per SO_AMULE/SO_EMULE #include "NetworkFunctions.h" #include #if defined(__USE_KAD__) #include "Kademlia/Kademlia/Kademlia.h" #include "Kademlia/Net/KademliaUDPListener.h" #endif #if !defined(_CONSOLE) && !defined(AMULE_DAEMON) #include "TransferWnd.h" #include "ServerWnd.h" #include "ChatWnd.h" #endif #include #include "AdunanzA.h" #include "RemoteSettings.h" #include "common/Constants.h" // Mr Hyde Patch BEGIN #include "Logger.h" // Mr Hyde Patch END // Inclusi per il parsing sul file per Updater #include #include // #define thePrefs (*(theApp->glob_prefs)) Mr Hyde: thePrefs e' la definizione di una classe statica (vedi src/Preferences.h) // Funzione molto semplice che ritorna un // valore booleano vero se l'ip passatogli in input // appartiene alla rete FastWeb italiana. /* MAN Milano........................ 1.0.0.0/8 MAN Milano hinterland Nord........ 2.0.0.0/8 MAN Genova........................ 5.0.0.0/8 MAN Veneto........................ 11.0.0.0/8 MAN Milano hinterland Sud......... 14.0.0.0/8 MAN Ancona........................ 21.0.0.0/8 MAN Grosseto...................... 22.0.0.0/8 MAN Roma.......................... 23.0.0.0/8 MAN Toscana....................... 27.0.0.0/8 MAN Piemonte...................... 28.0.0.0/8 MAN Triveneto..................... 29.0.0.0/8 MAN Bari.......................... 31.0.0.0/8 MAN Sicilia....................... 36.0.0.0/8 MAN Bologna....................... 37.0.0.0/8 MAN Napoli........................ 39.0.0.0/8 MAN Torino........................ 41.0.0.0/8 MAN Reggio Emilia................. 42.0.0.0/8 MAN Cagliari...................... 51.0.0.0/8 Routers & OAM..................... 10.0.0.0/8 Organization, Administration & Management (ad. es.: Server interni ntp, voip, billing etc. etc.) */ bool CAdunanzAUtilities::AduIsFastWebIP(const wxString& ipv4string) { return CFastwebNet::AduIsFastWebIP(ipv4string); /* uint32 ipv4addr; bool bTmp = StringIPtoUint32(ipv4string, ipv4addr); return (bTmp && CAdunanzAUtilities::AduIsFastWebIP(ipv4addr)); */ } // static wxString CAdunanzAUtilities::GetFWCityFromIP(uint32 dwUserIP) { return CFastwebNet::GetFWCityFromIP(dwUserIP); /* wxString FWCity; switch (dwUserIP & 0x000000ff) { case MAN_ROMA: FWCity = wxT("RM"); break; case MAN_MILANO: FWCity = wxT("MI"); break; case MAN_MILANO_H_NORD: FWCity = wxT("MI H. Nord"); break; case MAN_MILANO_H_SUD: FWCity = wxT("MI H. Sud"); break; case MAN_GENOVA: FWCity = wxT("GE"); break; case MAN_TRIVENETO: FWCity = wxT("Triveneto"); break; case MAN_BARI: FWCity = wxT("BA"); break; case MAN_BOLOGNA: FWCity = wxT("BO"); break; case MAN_NAPOLI: FWCity = wxT("NA"); break; case MAN_TORINO: FWCity = wxT("TO"); break; case MAN_REGGIO_EMILIA: FWCity = wxT("RE"); break; case MAN_TOSCANA: FWCity = wxT("Toscana"); break; case MAN_PIEMONTE: FWCity = wxT("Piemonte"); break; case MAN_VENETO: FWCity = wxT("Veneto"); break; case MAN_GROSSETO: FWCity = wxT("GR"); break; case MAN_SICILIA: FWCity = wxT("Sicilia"); break; case MAN_ANCONA: FWCity = wxT("AN"); break; case MAN_CAGLIARI: FWCity = wxT("CA"); break; case FASTWEB_ROUTERS: FWCity = wxT("OAM"); break; default: FWCity.Empty(); break; } return FWCity; */ } bool CAdunanzAUtilities::AduIsFiber (uint32 ip) { return CFastwebNet::AduIsFiber(ip); /* bool is128 = (((ip >> 15) & 1) == (uint32)0); return (is128 && CAdunanzAUtilities::AduIsFastWebLANIP(ip)); */ } bool CAdunanzAUtilities::AduIsValidKaduAddress( uint32 host ) { return CFastwebNet::AduIsValidKaduAddress(host); /* host = wxUINT32_SWAP_ALWAYS( host ); // TODO: Add Banlist support here return CAdunanzAUtilities::AduIsFastWebIP( host ); */ } #if !defined(CLIENT_GUI) float CAdunanzAUtilities::calcolaStima(float input_avail, uint32& firstPublish, uint32 publishInterval, uint32 pubkRTK, bool sameIP, uint32 now) { float avail = input_avail; // int32 kRTK = theApp->rm->kadRepublishTimeK; int32 kRTK = theApp->get_kadRepublishTimeK(); // Using this increment style, we can guess also if clients use different publish rates. float inc = (float) pubkRTK / kRTK; // Only old clients, with republishtimek == 24hrs don't publish their republishtimek. if (inc == (float) 0.0) { inc = HR2S(24) / kRTK; } if (publishInterval > kRTK) { avail = (float) 0.0; firstPublish = now; } while ( ((now-firstPublish) > kRTK) && (avail > (float) 2.0) ) { avail--; firstPublish += ((uint32)(kRTK/avail)); } // Some client seem to send duplicate publish to already contacted clients. // In 90% of the times we avoid this here. if (!sameIP) { avail += inc; } return avail; } float CAdunanzAUtilities::normalizzaStima( float avail, uint32 from, uint32 to ) { // Parte necessaria per il debug // calcolo il coefficiente di normalizzazione // int kRTK = theApp->rm->kadRepublishTimeK; int kRTK = theApp->get_kadRepublishTimeK(); float norm_factor = (float) 1.0; // if (avail > theApp->rm->kadFreshGuess_NoNorm) { if (avail > theApp->get_kadFreshGuess_NoNorm()) { // Mr Hyde Patch BEGIN if (kRTK == 0) { AddDebugLogLineN(logKadSearch, wxString::Format(wxT("DENOMINATORE kRTK ZERO"))); return 0.0; } // Mr Hyde Patch END norm_factor = (to - from)/kRTK; // Mr Hyde Patch BEGIN if (avail == 0.0) { AddDebugLogLineN(logKadSearch, wxString::Format(wxT("DENOMINATORE avail ZERO"))); return 0.0; } if ( norm_factor > 1-1/avail ) { norm_factor = (float) 1.0; } // Mr Hyde Patch END // norm_factor = ( norm_factor < theApp->rm->kadFreshGuess_Tol ? theApp->rm->kadFreshGuess_Tol : norm_factor ); norm_factor = ( norm_factor < theApp->get_kadFreshGuess_Tol() ? theApp->get_kadFreshGuess_Tol() : norm_factor ); // We have a good number of publishes, but not high. // Low normalization is still suggested. // if ( avail < theApp->rm->kadFreshGuess_LowNorm && norm_factor > avail / theApp->rm->kadFreshGuess_LowNorm ) { if ( (avail < theApp->get_kadFreshGuess_LowNorm()) && (norm_factor > (avail / theApp->get_kadFreshGuess_LowNorm())) ) { // norm_factor /= powf( (avail/theApp->rm->kadFreshGuess_LowNorm), 0.5f ); norm_factor /= powf( (avail/theApp->get_kadFreshGuess_LowNorm()), 0.5f ); } } if ( avail > 2.0f ) { // avail /= powf( norm_factor, theApp->rm->kadFreshGuess_Weight ); avail /= powf( norm_factor, theApp->get_kadFreshGuess_Weight() ); } return avail; } #endif void CAdunanzAUtilities::CalcolaRatio(bool bUpdatepage){ //bool bADUGetRipBanda = thePrefs::ADU_GetRipBanda(); bool bIsCustomRipBWEnabled = thePrefs::ADU_GetCustomRipBanda(); uint32 valueRipBanda = thePrefs::ADU_GetValueRipBanda(); // se non ho il custom allora uso il valore recuperato dai RemoteSettings if (!bIsCustomRipBWEnabled && theApp && theApp->rm){ thePrefs::ADU_SetValueRipBanda(theApp->rm->get_AduValRipBanda_Std()); valueRipBanda = thePrefs::ADU_GetValueRipBanda(); // update localValueRipBanda } // Pegasus, fix 20091105 CalcolaRatio // Meglio controllare che GetMaxUpload sia superiore a MIN_BW_TROTTLER per evitare problemi // di overflow uint32 valueMaxUpload = thePrefs::GetMaxUpload(); uint32 valueMaxDownload = thePrefs::GetMaxDownload(); uint32 valueMaxGraphDownloadRate = (uint32) theStats::GetDownloadRate(); // per aMule si usa theStats::GetDownloadRate() if ((valueRipBanda > valueMaxUpload) && (valueMaxUpload > ADUNANZA_MIN_BW_TROLLER)) { thePrefs::ADU_SetValueRipBanda((valueMaxUpload - ADUNANZA_MIN_BW_TROLLER)) ; // update valueRipBanda valueRipBanda = thePrefs::ADU_GetValueRipBanda(); } // Pegasus, fix 20091105 CalcolaRatio // Mr Hyde (lo scrivente) ha ceffato di brutto nello scrivere la sequenza di if. // Pegasus ha rimediato! // // OCCHIO: ricordo che moltiplicare per 1024 è ome eseguire uno shift di 10 bit (da cui i "<< 10" seguenti) uint32 kbps_extMaxDown; if (valueRipBanda < 4) { // kbp_extMaxDowns = 1024*3*valueRipBanda; kbps_extMaxDown = ((valueRipBanda << 10) * 3); thePrefs::ADU_SetExtMaxDown(kbps_extMaxDown); } else if (valueRipBanda < 10) { // kbp_extMaxDowns = 1024*4*valueRipBanda; kbps_extMaxDown = ((valueRipBanda << 10) * 4); thePrefs::ADU_SetExtMaxDown(kbps_extMaxDown); } else if (valueRipBanda >= 10) { // kbps = 1024*UNLIMITED; kbps_extMaxDown = (UNLIMITED << 10); thePrefs::ADU_SetExtMaxDown(kbps_extMaxDown); } // notare che per (4 <= valueRipBanda < 10) _NON_ cambio extMaxDown uint32 getupspeed = 0; if (valueMaxUpload != UNLIMITED) { //ho un limite di banda getupspeed = valueMaxUpload; } else { // getupspeed = thePrefs.GetMaxGraphUploadRate(true); getupspeed = (uint32) theStats::GetUploadRate(); // per aMule si usa theStats::GetUploadRate } // entrambi i seg. sono unsigned, quindi la loro differenza e' comunque un unsigned. Riscrivo la condizione in modo sicuro // if( (getupspeed - valueRipBanda)< 20) // // getupspeed < 20+valueRipBanda // // oppure // // (getupspeed >= 20) && (valueRipBanda > (getupspeed - 20)) uint32 maxByteDown = 0; if (getupspeed < (valueRipBanda+20)) { if (valueMaxDownload != UNLIMITED) { // thePrefs::ADU_SetKaduMaxDown(((thePrefs::GetMaxDownload())*1024)/2); // thePrefs::ADU_SetKaduMaxDown(valueMaxDownload << 9); // (maxDownload*512) maxByteDown = (valueMaxDownload << 9); // (maxDownload*512) } else { // thePrefs.ADU_SetKaduMaxDown(((thePrefs::GetMaxGraphDownloadRate())*1024)/2); // thePrefs::ADU_SetKaduMaxDown(valueMaxGraphDownloadRate << 9); // (valueMaxGraphDownloadRate*512) maxByteDown = (valueMaxGraphDownloadRate << 9); // (valueMaxGraphDownloadRate*512) } // if (thePrefs::ADU_GetKaduMaxDown() > ADU_MAX_RATIO_KADU_DOWN) { // thePrefs::ADU_SetKaduMaxDown(ADU_MAX_RATIO_KADU_DOWN); // } maxByteDown = std::min(maxByteDown, ADU_MAX_RATIO_KADU_DOWN); } else { // thePrefs::ADU_SetKaduMaxDown(UNLIMITED << 10); // UNLIMITED * 1024); maxByteDown = (UNLIMITED << 10); // UNLIMITED * 1024); } // Mr Hyde correzione: // il limite per il download dei KADU NON puo' mai essere superiore al limite di banda in Download imposto dall'utente uint32 userDownloadLimit_bytes = 1024*thePrefs::GetMaxDownload(); if (thePrefs::GetMaxDownload() != UNLIMITED) { if (maxByteDown == UNLIMITED) { // UNLIMITED in realtà e' 0 maxByteDown = userDownloadLimit_bytes ; } else { maxByteDown = std::min(maxByteDown, userDownloadLimit_bytes); } } // non metto l'else xche' in caso di download senza limite dell'utente mi va bene qualunque valore di maxByteDown thePrefs::ADU_SetKaduMaxDown(maxByteDown); // se ho impostazioni custom e ho bUpdatepage ricarico preferenze di AdunanzA if (bIsCustomRipBWEnabled /*(!bADUGetRipBanda)*/ && bUpdatepage) { theApp->glob_prefs->LoadAdunanzAPreferences(); } /* std::cout << "(DBG) END rip " << valueRipBanda << " maxup " << valueMaxUpload << " maxdown " << valueMaxDownload << " ADU KADUmaxdown " << thePrefs::ADU_GetKaduMaxDown() << " ADU EXTmaxdown " << thePrefs::ADU_GetExtMaxDown() << std::endl; */ } // Decido come selezionare un client in base alla // banda realmente data in upload // // 26/05/2009 Mr Hyde BEGIN // Riportate modifiche di Tigerjact da eMule AdunanzA uint32 CAdunanzAUtilities::AduGetTypeBand() { if (!theApp || !theApp->m_statistics) return ADUNANZA_EXTERN; uint64 sessionSentBytes = theApp->m_statistics->GetSessionSentBytes(); // uint64 sessionRecvBytes = theApp->m_statistics->GetSessionReceivedBytes(); uint64 aduSessionSentBytes = theApp->m_statistics->GetAduSessionSentBytes(); // uint64 aduSessionRecvBytes = theApp->m_statistics->GetAduSessionReceivedBytes(); uint64 sentToExternal = sessionSentBytes - aduSessionSentBytes; // uint64 recvFromExternal = sessionRecvBytes - aduSessionRecvBytes; // Calcolo il rate dei KB trasferiti agli esterni a partire da quando ho lanciato AdunanzA (KB/secondo) // Per far questo non faccio altro che dividere il numero dei byte trasmessi agli esterni per 1024: in questo modo ottengo i KB spediti a esterni, // poi il risultato lo divido ancora per l'Uptime (da quanti secondi sta girando AdunanzA) // // uint64 uploadTime_sec = CStatistics::GetTotalUploadTimeSeconds(); uint64 uploadTime_sec = theApp->m_statistics->GetUptimeSeconds(); if (uploadTime_sec == 0) return ADUNANZA_EXTERN; // giusto per evitare div by 0) // sentToExternal_kb_per_sec = sentToExternal / (1024 * sessionTime_sec); uint64 sentToExternal_kb_per_sec = sentToExternal / (1024 * uploadTime_sec); if (sentToExternal_kb_per_sec < thePrefs::ADU_GetValueRipBanda()) { // sono al di sotto della soglia prevista // Commento di Tigerjact: // se la coda degli ext e' vuota passo comunque un adu // in questo modo se ho un client adu in up, non ho altri (esterni o adu) in coda // non stacco il client adu per poi riprenderlo if (CAdunanzAUtilities::ExtQ() <= 0) { return ADUNANZA_FASTWEB; } return ADUNANZA_EXTERN; } else { return theApp->pUploadSlotsMng->next(); // return ADUNANZA_FASTWEB; } /* if ( sentToExternal < recvFromExternal ) { return ADUNANZA_EXTERN; } else { return ADUNANZA_FASTWEB; } */ } #ifndef CLIENT_GUI int CAdunanzAUtilities::AduQ() { return ((theApp && theApp->uploadqueue) ? theApp->uploadqueue->GetAdunanzAUserCount() : 0); } int CAdunanzAUtilities::ExtQ() { return ((theApp && theApp->uploadqueue) ? (theApp->uploadqueue->GetWaitingList().size() - theApp->uploadqueue->GetAdunanzAUserCount()) : 0); } bool CAdunanzAUtilities::AduDebt() { uint64 sentToExternal = theApp->m_statistics->GetSessionSentBytes() - theApp->m_statistics->GetAduSessionSentBytes(); uint64 recvFromExternal = theApp->m_statistics->GetSessionReceivedBytes() - theApp->m_statistics->GetAduSessionReceivedBytes(); if ( sentToExternal < recvFromExternal ) return true; else return false; } // Mr Hyde: per ricavare l'upload rate corrente // (codice copiato da UploadBandwidthThrottler.cpp) uint32 CAdunanzAUtilities::getAllowedUploadDataRate() { uint32 allowedDataRate = 0; if (thePrefs::GetMaxUpload() == UNLIMITED) { // Try to increase the upload rate if (theApp->uploadqueue) { allowedDataRate = ((uint32)theStats::GetUploadRate()) + (5 * 1024); } else { // App not created yet or already destroyed. allowedDataRate = (uint32)(-1); } } else { allowedDataRate = thePrefs::GetMaxUpload() * 1024; } return allowedDataRate; } int CAdunanzAUtilities::OLDSetSlots() { float maxUp = (float) thePrefs::GetMaxUpload(); float kBpsUpPerClient = (float) thePrefs::GetSlotAllocation(); float kBpsUp = ((float) theStats::GetUploadRate()) / 1024.0f; int slots; if (thePrefs::GetMaxUpload() == UNLIMITED) slots = (int)( kBpsUp / kBpsUpPerClient + 2 ); else slots = (int)floor( maxUp / kBpsUpPerClient + 0.5f ); return std::max(MIN_UP_CLIENTS_ALLOWED,slots); } int CAdunanzAUtilities::SetSlots() { #if 0 float maxUp = (float) (thePrefs::GetMaxUpload()); float kBpsUpPerClient = (float) thePrefs::GetSlotAllocation(); float kBpsUp = (float) (theStats::GetUploadRate() / 1024.0); // lo shift di 10 bit equivale a dividere per 1024 (piu' rapido) int slots; slots = (int)floor( maxUp / kBpsUpPerClient + 0.5f ); return std::max(MIN_UP_CLIENTS_ALLOWED,slots); #endif uint16 nMaxSlots; float kBpsUpPerClient = (float) thePrefs::GetSlotAllocation(); if (thePrefs::GetMaxUpload() >= 10) { nMaxSlots = (uint16)floor((float)thePrefs::GetMaxUpload() / kBpsUpPerClient + 0.5); // floor(x + 0.5) is a way of doing round(x) that works with gcc < 3 ... if (nMaxSlots < MIN_UP_CLIENTS_ALLOWED) { nMaxSlots=MIN_UP_CLIENTS_ALLOWED; } } else { nMaxSlots = MIN_UP_CLIENTS_ALLOWED; } return ((int) nMaxSlots); } int CAdunanzAUtilities::TotSlots() { #if 0 if (CAdunanzAUtilities::AduDebt()) return (int)(CAdunanzAUtilities::SetSlots() * 1.5f); else return CAdunanzAUtilities::SetSlots(); #endif /* // return CPreferences::ADU_GetMaxUpSlots(); // calcolo l'attuale upload rate massimo uint32 maxUpDataRate = CAdunanzAUtilities::getAllowedUploadDataRate(); if (maxUpDataRate == (uint32)-1) { return 0; } maxUpDataRate >>= 10; // calcolo il numero degli slot attualmente a disposizione uint32 slotAllocation = thePrefs::GetSlotAllocation(); return ((int)((slotAllocation != 0) ? (maxUpDataRate / slotAllocation) : 0)); */ if (theApp && (theApp->uploadqueue)) { return ((int) theApp->uploadqueue->GetMaxSlots()); } else { return 0; } } #if 0 int CAdunanzAUtilities::ExtSlots() { if (CAdunanzAUtilities::AduDebt()) return (int)(CAdunanzAUtilities::TotSlots() * 0.5f); else return CAdunanzAUtilities::TotSlots(); } #endif uint32 CAdunanzAUtilities::AduNextClient(int fix) { if (!theApp || !(theApp->uploadqueue)) return ADUNANZA_NONE; // Mr Hyde: il controllo si basa sul numero di slot, NON sulla banda realmente occupata // dall'upload. // Introduco ANCHE un controllo sulla banda attualmente occupata dall'upload uint32 currentUpload_KB_sec = (uint32) (theStats::GetUploadRate() / 1024.0); // non posso usare lo shift perche' usa double uint32 maxAllowedUpload_KB_sec = thePrefs::GetMaxUpload(); // effettuo il controllo solo se: // - l'utente h messo un limite alla banda in upload if (maxAllowedUpload_KB_sec != UNLIMITED) { // ho un limite di banda in up // controllo di non averlo già raggiunto if (currentUpload_KB_sec >= maxAllowedUpload_KB_sec) { return ADUNANZA_NONE; } } int totslots = CAdunanzAUtilities::TotSlots(); int totcount = ((int) theApp->uploadqueue->GetUploadCount()) - fix; if (totcount < totslots) { if ((CAdunanzAUtilities::AduQ() <= 0) && (CAdunanzAUtilities::ExtQ() <= 0)) { // return ADUNANZA_ANY; return ADUNANZA_EXTERN; // Mr Hyde: sono buono, inizio con gli esterni } if (CAdunanzAUtilities::AduQ() <= 0) { return ADUNANZA_EXTERN; // Tigerjact } // Tigerjact // Verifico: se la coda degli esterni e' vuota e quella degli adu piena allora prendo un client adu if (CAdunanzAUtilities::ExtQ() <= 0) { return ADUNANZA_FASTWEB; } uint64 sessionSentBytes = theApp->m_statistics->GetSessionSentBytes(); uint64 aduSessionSentBytes = theApp->m_statistics->GetAduSessionSentBytes(); uint64 sentToExternal = sessionSentBytes - aduSessionSentBytes; // uint64 sessionTime_sec = theApp->m_statistics->GetUptimeSeconds(); // Calcolo il rate dei KB trasferiti agli esterni a partire da quando ho lanciato AdunanzA (KB/secondo) // Per far questo non faccio altro che dividere il numero dei byte trasmessi agli esterni per 1024: in questo modo ottengo i KB spediti a esterni, // poi il risultato lo divido ancora per l'Uptime (da quanti secondi sta girando AdunanzA) // // Problemone: in realta' potrei non aver ancora fatto upload (quindi richiare un div by 0) // uploadTime_sec = CStatistics::GetTotalUploadTimeSeconds(); // uint64 uploadTime_sec = theApp->m_statistics->GetUptimeSeconds(); uint64 uploadTime_sec = theApp->m_statistics->GetUptimeSeconds(); if (uploadTime_sec == 0) { return ADUNANZA_NONE; } // sentToExternal_kb_per_sec = sentToExternal / (1024 * sessionTime_sec); uint64 sentToExternal_kb_per_sec = sentToExternal / (1024 * uploadTime_sec); if (sentToExternal_kb_per_sec < thePrefs::ADU_GetValueRipBanda()) { return ADUNANZA_EXTERN; } else { // return ADUNANZA_FASTWEB; return theApp->pUploadSlotsMng->next(); } } else { return ADUNANZA_NONE; } #if 0 uint64 recvFromExternal = sessionRecvBytes - aduSessionRecvBytes; int aducount = theApp->uploadqueue->GetAduUploadCount(); int extcount = totcount - aducount; if (CAdunanzAUtilities::AduDebt()) { int extslots = CAdunanzAUtilities::ExtSlots() - fix; int aduslots = totslots - extslots; /* if ( (extslots > extcount) && (aduslots > aducount) ) return ADUNANZA_ANY; else if (extslots > extcount) return ADUNANZA_EXTERN; else if (aduslots > aducount) return ADUNANZA_FASTWEB; else return ADUNANZA_NONE; // non dovrebbe poter succedere */ if (extslots > extcount) { return ((aduslots > aducount) ? ADUNANZA_ANY : ADUNANZA_EXTERN); } else { return ((aduslots > aducount) ? ADUNANZA_FASTWEB : ADUNANZA_NONE); } } else { return ADUNANZA_FASTWEB; } } else return ADUNANZA_NONE; #endif } uint32 CAdunanzAUtilities::AduGetMaxUploadSlots() { return CAdunanzAUtilities::TotSlots(); } bool CAdunanzAUtilities::AduMaxTrans() { // Probabilmente non più usata if (!theApp || !theApp->uploadqueue) return false; uint32 now = (uint32)time(NULL); if ( CAdunanzAUtilities::AduQ() && (CAdunanzAUtilities::AduNextClient(1) == ADUNANZA_FASTWEB) && (now > (theApp->uploadqueue->lastmax + 45)) ) { theApp->uploadqueue->lastmax = now; return true; } else { return false; } } #endif #if !defined(CLIENT_GUI) // la CAduUploadSlotsManager ha senso solo in amule/amuled e non nelle applicazioni client // Mr Hyde uint32 CAduUploadSlotsManager::getAllowedUploadDataRate() { uint32 allowedDataRate = 0; if (thePrefs::GetMaxUpload() == UNLIMITED) { // Try to increase the upload rate if (theApp->uploadqueue) { allowedDataRate = (uint32)theStats::GetUploadRate() + 5 * 1024; } else { // App not created yet or already destroyed. allowedDataRate = (uint32)(-1); } } else { allowedDataRate = thePrefs::GetMaxUpload() * 1024; } return allowedDataRate; } uint32 CAduUploadSlotsManager::next() const { if (!m_adunanzaSlots && !m_externSlots) return ADUNANZA_NONE; // controllo se ho debiti pendenti if (m_adunanzaDebt) { // adunanza e' in debito nei confronti degli esterni // quindi se ho disponibili slot per esterni scelgo subito uno slot esterno if (m_externSlots) return ADUNANZA_EXTERN; } if (m_externDebt) { // gli esterni sono in debito con gli AdunanzA // quindi se ho disponibili slot per AdunanzA scelgo subito uno slot AdunanzA if (m_adunanzaSlots) return ADUNANZA_FASTWEB; } if (m_adunanzaSlots && m_externSlots) return ADUNANZA_ANY; if (m_adunanzaSlots) return ADUNANZA_FASTWEB; if (m_externSlots) return ADUNANZA_EXTERN; return ADUNANZA_NONE; // giusto per evitare warning } // void CAduUploadSlotsManager::update(CClientPtrList& uploadingList) void CAduUploadSlotsManager::update(CClientRefList& uploadingList) { // OK, al momento quanti sono gli slot attivi in totale? // Tanti quanti i client in upload uint32 currentUsedSlots = uploadingList.size(); // e di questi quanti sono gli slot attivi AdunanzA? uint32 currentAdunanzASlots = 0; for (CClientRefList::iterator it = uploadingList.begin(); it != uploadingList.end(); ++it) { // if ((*it)->IsAdunanzA()) currentAdunanzASlots++; CUpDownClient* cur_client = it->GetClient(); if (!cur_client) continue; if (cur_client->IsAdunanzA()) currentAdunanzASlots++; } uint32 currentExternSlots = currentUsedSlots - currentAdunanzASlots; // if (m_extern || m_fastweb) return; // aggiorno solo se ho esaurito gli slot! /* // calcolo l'attuale upload rate massimo uint32 maxUpDataRate = (getAllowedUploadDataRate() >> 10); // calcolo il numero degli slot attualmente a disposizione // uint32 maxUpSlots = maxUpDataRate / thePrefs::GetSlotAllocation(); */ uint32 maxUpSlots = CAdunanzAUtilities::TotSlots(); // sia ad AdunanzA che a Esterni al max spetta la meta' degli slot // a disposizione. // Uso uno shift di 1 bit (equivale a dividere per 2) uint32 maxCategorySlotsLimit = (maxUpSlots >> 1); // ora calcolo, per ciascuna categoria, quanti sono gli slot ancora liberi. // Per farlo sottraggo gli slot occupati agli slot possibili (maxCategorySlotLimit) // if (maxCategorySlotsLimit > currentExternSlots) { m_externSlots = maxCategorySlotsLimit - currentExternSlots; m_externDebt = 0; } else { m_externSlots = 0; m_externDebt = currentExternSlots - maxCategorySlotsLimit; } if (maxCategorySlotsLimit > currentAdunanzASlots) { m_adunanzaSlots = maxCategorySlotsLimit - currentAdunanzASlots; m_adunanzaDebt = 0; } else { m_adunanzaSlots = 0; m_adunanzaDebt = currentAdunanzASlots - maxCategorySlotsLimit; } // se adunanza e' in debito nei confronti degli extern scarico il debito // dagli extern (perche' adunanza STA USANDO slot che sarebbero degli extern) if (m_externSlots > m_adunanzaDebt) { m_externSlots-=m_adunanzaDebt; } if (m_adunanzaSlots > m_externDebt) { m_adunanzaSlots-=m_externDebt; } } #endif // !CLIENT GUI amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/MuleCollection.h0000644000175000017500000000442112050266603021407 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2007-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2007-2011 Johannes Krampf ( wuischke@amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef __MULECOLLECTION_H__ #define __MULECOLLECTION_H__ #include #include #ifndef __MINGW32__ #include "Types.h" #endif struct CollectionFile { std::string m_fileName; uint64_t m_fileSize; std::string m_fileHash; CollectionFile( const std::string &fileName = "", uint64_t fileSize = 0, const std::string &fileHash = ""); }; class CMuleCollection { private: std::vector vCollection; public: CMuleCollection(); ~CMuleCollection(); bool Open(const std::string &File); size_t GetFileCount() const { return vCollection.size(); } std::string GetEd2kLink(size_t index) const; std::string GetFileName(size_t index) const; uint64_t GetFileSize(size_t index) const; std::string GetFileHash(size_t index) const; private: bool OpenBinary(const std::string &File); bool OpenText(const std::string &File); bool AddLink(const std::string &Link); bool AddFile( const std::string &fileName, uint64_t fileSize, const std::string &fileHash); static bool IsValidHash(const std::string &fileHash); template intType ReadInt(std::ifstream& infile); std::string ReadString(std::ifstream& infile, int TagType); }; #endif // __MULECOLLECTION_H__ amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/EncryptedStreamSocket.cpp0000644000175000017500000010172612050266603023314 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // /* Basic Obfuscated Handshake Protocol Client <-> Client: - Keycreation: - Client A (Outgoing connection): Sendkey: Md5() 21 Receivekey: Md5() 21 - Client B (Incoming connection): Sendkey: Md5() 21 Receivekey: Md5() 21 NOTE: First 1024 bytes are discarded - Handshake -> The handshake is encrypted - except otherwise noted - by the Keys created above -> Handshake is blocking - do not start sending an answer before the request is completely received (this includes the random bytes) -> EncryptionMethod = 0 is Obfuscation and the only supported method right now Client A: Client B: -> The basic handshake is finished here, if an additional/different EncryptionMethod was selected it may continue negotiating details for this one - Overhead: 18-48 (~33) Bytes + 2 * IP/TCP Headers per Connection - Security for Basic Obfuscation: - Random looking stream, very limited protection against passive eavesdropping single connections - Additional Comments: - RandomKeyPart is needed to make multiple connections between two clients look different (but still random), since otherwise the same key would be used and RC4 would create the same output. Since the key is a MD5 hash it doesn't weaken the key if that part is known - Why DH-KeyAgreement isn't used as basic obfuscation key: It doesn't offer substantial more protection against passive connection based protocol identification, it has about 200 bytes more overhead, needs more CPU time, we cannot say if the received data is junk, unencrypted or part of the keyagreement before the handshake is finished without losing the complete randomness, it doesn't offer substantial protection against eavesdropping without added authentification Basic Obfuscated Handshake Protocol Client <-> Server: - RC4 Keycreation: - Client (Outgoing connection): Sendkey: Md5() 97 Receivekey: Md5() 97 - Server (Incoming connection): Sendkey: Md5() 97 Receivekey: Md5() 97 NOTE: First 1024 Bytes are discarded - Handshake -> The handshake is encrypted - except otherwise noted - by the Keys created above -> Handshake is blocking - do not start sending an answer before the request is completely received (this includes the random bytes) -> EncryptionMethod = 0 is Obfuscation and the only supported method right now Client: Server: Client: (Answer delayed till first payload to save a frame) -> The basic handshake is finished here, if an additional/different EncryptionMethod was selected it may continue negotiating details for this one - Overhead: 206-251 (~229) Bytes + 2 * IP/TCP Headers Headers per Connection - DH Agreement Specifics: sizeof(a) and sizeof(b) = 128 Bits, g = 2, p = dh768_p (see below), sizeof p, s, etc. = 768 bits */ #include "EncryptedStreamSocket.h" #include "amule.h" #include "Logger.h" #include "Preferences.h" #include "ServerConnect.h" #include "RC4Encrypt.h" #include "MemFile.h" #include "ClientList.h" #include "RandomFunctions.h" #include #include #include #define MAGICVALUE_REQUESTER 34 // modification of the requester-send and server-receive key #define MAGICVALUE_SERVER 203 // modification of the server-send and requester-send key #define MAGICVALUE_SYNC 0x835E6FC4 // value to check if we have a working encrypted stream #define DHAGREEMENT_A_BITS 128 #define PRIMESIZE_BYTES 96 static unsigned char dh768_p[] = { 0xF2, 0xBF, 0x52, 0xC5, 0x5F, 0x58, 0x7A, 0xDD, 0x53, 0x71, 0xA9, 0x36, 0xE8, 0x86, 0xEB, 0x3C, 0x62, 0x17, 0xA3, 0x3E, 0xC3, 0x4C, 0xB4, 0x0D, 0xC7, 0x3A, 0x41, 0xA6, 0x43, 0xAF, 0xFC, 0xE7, 0x21, 0xFC, 0x28, 0x63, 0x66, 0x53, 0x5B, 0xDB, 0xCE, 0x25, 0x9F, 0x22, 0x86, 0xDA, 0x4A, 0x91, 0xB2, 0x07, 0xCB, 0xAA, 0x52, 0x55, 0xD4, 0xF6, 0x1C, 0xCE, 0xAE, 0xD4, 0x5A, 0xD5, 0xE0, 0x74, 0x7D, 0xF7, 0x78, 0x18, 0x28, 0x10, 0x5F, 0x34, 0x0F, 0x76, 0x23, 0x87, 0xF8, 0x8B, 0x28, 0x91, 0x42, 0xFB, 0x42, 0x68, 0x8F, 0x05, 0x15, 0x0F, 0x54, 0x8B, 0x5F, 0x43, 0x6A, 0xF7, 0x0D, 0xF3 }; // winsock2.h already defines it #ifdef SOCKET_ERROR #undef SOCKET_ERROR #endif #define SOCKET_ERROR (-1) CEncryptedStreamSocket::CEncryptedStreamSocket(wxSocketFlags flags, const CProxyData *proxyData) : CSocketClientProxy(flags, proxyData) { m_StreamCryptState = thePrefs::IsClientCryptLayerSupported() ? ECS_UNKNOWN : ECS_NONE; m_NegotiatingState = ONS_NONE; m_nObfusicationBytesReceived = 0; m_bFullReceive = true; m_dbgbyEncryptionSupported = 0xFF; m_dbgbyEncryptionRequested = 0xFF; m_dbgbyEncryptionMethodSet = 0xFF; m_nReceiveBytesWanted = 0; m_EncryptionMethod = ENM_OBFUSCATION; m_nRandomKeyPart = 0; m_bServerCrypt = false; } CEncryptedStreamSocket::~CEncryptedStreamSocket() {} /* External interface */ void CEncryptedStreamSocket::SetConnectionEncryption(bool bEnabled, const uint8_t* pTargetClientHash, bool bServerConnection) { if (m_StreamCryptState != ECS_UNKNOWN && m_StreamCryptState != ECS_NONE) { if (!m_StreamCryptState == ECS_NONE || bEnabled) { wxFAIL; } return; } if (bEnabled && pTargetClientHash != NULL && !bServerConnection) { m_StreamCryptState = ECS_PENDING; // create obfuscation keys, see on top for key format // use the crypt random generator m_nRandomKeyPart = GetRandomUint32(); uint8 achKeyData[21]; md4cpy(achKeyData, pTargetClientHash); PokeUInt32(achKeyData + 17, m_nRandomKeyPart); achKeyData[16] = MAGICVALUE_REQUESTER; MD5Sum md5(achKeyData, sizeof(achKeyData)); m_pfiSendBuffer.SetKey(md5); achKeyData[16] = MAGICVALUE_SERVER; md5.Calculate(achKeyData, sizeof(achKeyData)); m_pfiReceiveBuffer.SetKey(md5); } else if (bServerConnection && bEnabled) { //printf("->Server crypt\n"); m_bServerCrypt = true; m_StreamCryptState = ECS_PENDING_SERVER; } else { wxASSERT( !bEnabled ); m_StreamCryptState = ECS_NONE; } } /* Internals, common to base class */ // unfortunately sending cannot be made transparent for the derived class, because of WSA_WOULDBLOCK // together with the fact that each byte must pass the keystream only once int CEncryptedStreamSocket::Write(const void* lpBuf, uint32_t nBufLen) { //printf("Starting write for %s\n", (const char*) unicode2char(DbgGetIPString())); if (!IsEncryptionLayerReady()) { wxFAIL; return 0; } else if (m_bServerCrypt && m_StreamCryptState == ECS_ENCRYPTING && !m_pfiSendBuffer.IsEmpty()) { wxASSERT( m_NegotiatingState == ONS_BASIC_SERVER_DELAYEDSENDING ); // handshakedata was delayed to put it into one frame with the first paypload to the server // do so now with the payload attached int nRes = SendNegotiatingData(lpBuf, nBufLen, nBufLen); wxASSERT( nRes != SOCKET_ERROR ); (void)nRes; return nBufLen; // report a full send, even if we didn't for some reason - the data is now in our buffer and will be handled later } else if (m_NegotiatingState == ONS_BASIC_SERVER_DELAYEDSENDING) { wxFAIL; } if (m_StreamCryptState == ECS_UNKNOWN) { //this happens when the encryption option was not set on an outgoing connection //or if we try to send before receiving on an incoming connection - both shouldn't happen m_StreamCryptState = ECS_NONE; //DebugLogError(_T("CEncryptedStreamSocket: Overwriting State ECS_UNKNOWN with ECS_NONE because of premature Send() (%s)"), DbgGetIPString()); } //printf("Writing %i bytes of data\n", nBufLen); CSocketClientProxy::Write(lpBuf, nBufLen); return CSocketClientProxy::LastCount(); } int CEncryptedStreamSocket::Read(void* lpBuf, uint32_t nBufLen) { CSocketClientProxy::Read(lpBuf, nBufLen); m_nObfusicationBytesReceived = CSocketClientProxy::LastCount(); m_bFullReceive = m_nObfusicationBytesReceived == (uint32)nBufLen; //printf("Read %i bytes on %s, socket %p\n", m_nObfusicationBytesReceived, (const char*) unicode2char(DbgGetIPString()), this); if (m_nObfusicationBytesReceived == (uint32_t)SOCKET_ERROR || m_nObfusicationBytesReceived <= 0) { return m_nObfusicationBytesReceived; } switch (m_StreamCryptState) { case ECS_NONE: // disabled, just pass it through return m_nObfusicationBytesReceived; case ECS_PENDING: case ECS_PENDING_SERVER: //printf("Received %i bytes before sending?\n", m_nObfusicationBytesReceived); wxFAIL; //DebugLogError(_T("CEncryptedStreamSocket Received data before sending on outgoing connection")); m_StreamCryptState = ECS_NONE; return m_nObfusicationBytesReceived; case ECS_UNKNOWN: { //printf("Receiving encrypted data on ECS_UNKNOWN\n"); uint32_t nRead = 1; bool bNormalHeader = false; switch (((uint8_t*)lpBuf)[0]) { case OP_EDONKEYPROT: case OP_PACKEDPROT: case OP_EMULEPROT: bNormalHeader = true; break; } if (!bNormalHeader) { //printf("Not a normal header, negotiating encryption\n"); StartNegotiation(false); const uint32 nNegRes = Negotiate((uint8_t*)lpBuf + nRead, m_nObfusicationBytesReceived - nRead); if (nNegRes == (uint32_t)(-1)) { return 0; } nRead += nNegRes; if (nRead != (uint32_t)m_nObfusicationBytesReceived) { // this means we have more data then the current negotiation step required (or there is a bug) and this should never happen // (note: even if it just finished the handshake here, there still can be no data left, since the other client didn't receive our response yet) //DebugLogError(_T("CEncryptedStreamSocket: Client %s sent more data then expected while negotiating, disconnecting (1)"), DbgGetIPString()); //printf("On error: encryption\n"); OnError(ERR_ENCRYPTION); } return 0; } else { // doesn't seem to be encrypted //printf("Encrypted data doesn't seem to be encrypted\n"); m_StreamCryptState = ECS_NONE; // if we require an encrypted connection, cut the connection here. This shouldn't happen that often // at least with other up-to-date eMule clients because they check for incompability before connecting if possible if (thePrefs::IsClientCryptLayerRequired()) { // TODO: Remove me when I have been solved // Even if the Require option is enabled, we currently have to accept unencrypted connection which are made // for lowid/firewall checks from servers and other from us selected client. Otherwise, this option would // always result in a lowid/firewalled status. This is of course not nice, but we can't avoid this workaround // until servers and kad completely support encryption too, which will at least for kad take a bit // only exception is the .ini option ClientCryptLayerRequiredStrict which will even ignore test connections // Update: New server now support encrypted callbacks amuleIPV4Address address; GetPeer(address); uint32_t ip = StringIPtoUint32(address.IPAddress()); if (thePrefs::IsClientCryptLayerRequiredStrict() || (!theApp->serverconnect->AwaitingTestFromIP(ip) && !theApp->clientlist->IsKadFirewallCheckIP(ip)) ) { OnError(ERR_ENCRYPTION_NOTALLOWED); return 0; } else { //AddDebugLogLine(DLP_DEFAULT, false, _T("Incoming unencrypted firewallcheck connection permitted despite RequireEncryption setting - %s"), DbgGetIPString() ); } } return m_nObfusicationBytesReceived; // buffer was unchanged, we can just pass it through } } case ECS_ENCRYPTING: //printf("Encryption enabled on data receiving, decrypting and passing along\n"); // basic obfusication enabled and set, so decrypt and pass along m_pfiReceiveBuffer.RC4Crypt((uint8_t*)lpBuf, (uint8_t*)lpBuf, m_nObfusicationBytesReceived); //DumpMem(lpBuf, m_nObfusicationBytesReceived, wxT("Directly decrypted data:")); return m_nObfusicationBytesReceived; case ECS_NEGOTIATING:{ //printf("Negotiating on data receive\n"); const uint32_t nRead = Negotiate((uint8_t*)lpBuf, m_nObfusicationBytesReceived); if (nRead == (uint32_t)(-1)) { //printf("-> Encryption read error on negotiation\n"); return 0; } else if (nRead != (uint32_t)m_nObfusicationBytesReceived && m_StreamCryptState != ECS_ENCRYPTING) { //printf("-> Too much data, bailing out of negotiation step\n"); // this means we have more data then the current negotiation step required (or there is a bug) and this should never happen //DebugLogError(_T("CEncryptedStreamSocket: Client %s sent more data then expected while negotiating, disconnecting (2)"), DbgGetIPString()); OnError(ERR_ENCRYPTION); return 0; } else if (nRead != (uint32_t)m_nObfusicationBytesReceived && m_StreamCryptState == ECS_ENCRYPTING) { //printf("-> Handshake negotiation finished\n"); // we finished the handshake and if we this was an outgoing connection it is allowed (but strange and unlikely) that the client sent payload //DebugLogWarning(_T("CEncryptedStreamSocket: Client %s has finished the handshake but also sent payload on a outgoing connection"), DbgGetIPString()); memmove(lpBuf, (uint8_t*)lpBuf + nRead, m_nObfusicationBytesReceived - nRead); return m_nObfusicationBytesReceived - nRead; } else { //printf("-> Negotiation went probably ok\n"); return 0; } } default: wxFAIL; return m_nObfusicationBytesReceived; } } void CEncryptedStreamSocket::OnSend(int) { // if the socket just connected and this is outgoing, we might want to start the handshake here if (m_StreamCryptState == ECS_PENDING || m_StreamCryptState == ECS_PENDING_SERVER){ //printf("Starting connection negotiation on OnSend for %s\n", (const char*) unicode2char(DbgGetIPString())); StartNegotiation(true); return; } // check if we have negotiating data pending if (!m_pfiSendBuffer.IsEmpty()) { wxASSERT( m_StreamCryptState >= ECS_NEGOTIATING ); SendNegotiatingData(NULL, 0); } } void CEncryptedStreamSocket::CryptPrepareSendData(uint8* pBuffer, uint32 nLen) { if (!IsEncryptionLayerReady()) { wxFAIL; // must be a bug return; } if (m_StreamCryptState == ECS_UNKNOWN) { //this happens when the encryption option was not set on an outgoing connection //or if we try to send before receiving on an incoming connection - both shouldn't happen m_StreamCryptState = ECS_NONE; //DebugLogError(_T("CEncryptedStreamSocket: Overwriting State ECS_UNKNOWN with ECS_NONE because of premature Send() (%s)"), DbgGetIPString()); } if (m_StreamCryptState == ECS_ENCRYPTING) { //printf("Preparing crypt data on %s\n", (const char*) unicode2char(DbgGetIPString())); //DumpMem(pBuffer, nLen, wxT("Before crypt prepare:\n")); m_pfiSendBuffer.RC4Crypt(pBuffer, pBuffer, nLen); //DumpMem(pBuffer, nLen, wxT("After crypt prepare:\n")); } } /* Internals, just for this class (can be raped) */ bool CEncryptedStreamSocket::IsEncryptionLayerReady() { return ( (m_StreamCryptState == ECS_NONE || m_StreamCryptState == ECS_ENCRYPTING || m_StreamCryptState == ECS_UNKNOWN ) && (m_pfiSendBuffer.IsEmpty() || (m_bServerCrypt && m_NegotiatingState == ONS_BASIC_SERVER_DELAYEDSENDING)) ); } void CEncryptedStreamSocket::StartNegotiation(bool bOutgoing) { //printf("Starting socket negotiation\n"); if (!bOutgoing) { //printf("Incoming connection negotiation on %s\n", (const char*) unicode2char(DbgGetIPString())); m_NegotiatingState = ONS_BASIC_CLIENTA_RANDOMPART; m_StreamCryptState = ECS_NEGOTIATING; m_nReceiveBytesWanted = 4; } else if (m_StreamCryptState == ECS_PENDING) { //printf("Socket is client.pending on negotiation\n"); CMemFile fileRequest(29); const uint8_t bySemiRandomNotProtocolMarker = GetSemiRandomNotProtocolMarker(); fileRequest.WriteUInt8(bySemiRandomNotProtocolMarker); fileRequest.WriteUInt32(m_nRandomKeyPart); fileRequest.WriteUInt32(MAGICVALUE_SYNC); const uint8_t bySupportedEncryptionMethod = ENM_OBFUSCATION; // we do not support any further encryption in this version fileRequest.WriteUInt8(bySupportedEncryptionMethod); fileRequest.WriteUInt8(bySupportedEncryptionMethod); // so we also prefer this one uint8_t byPadding = (uint8_t)(GetRandomUint8() % (thePrefs::GetCryptTCPPaddingLength() + 1)); fileRequest.WriteUInt8(byPadding); for (int i = 0; i < byPadding; i++) { fileRequest.WriteUInt8(GetRandomUint8()); } m_NegotiatingState = ONS_BASIC_CLIENTB_MAGICVALUE; m_StreamCryptState = ECS_NEGOTIATING; m_nReceiveBytesWanted = 4; SendNegotiatingData(fileRequest.GetRawBuffer(), (uint32_t)fileRequest.GetLength(), 5); } else if (m_StreamCryptState == ECS_PENDING_SERVER) { //printf("Socket is server.pending on negotiation\n"); CMemFile fileRequest(113); const uint8_t bySemiRandomNotProtocolMarker = GetSemiRandomNotProtocolMarker(); fileRequest.WriteUInt8(bySemiRandomNotProtocolMarker); m_cryptDHA.Randomize((CryptoPP::AutoSeededRandomPool&)GetRandomPool(), DHAGREEMENT_A_BITS); // our random a wxASSERT( m_cryptDHA.MinEncodedSize() <= DHAGREEMENT_A_BITS / 8 ); CryptoPP::Integer cryptDHPrime((byte*)dh768_p, PRIMESIZE_BYTES); // our fixed prime // calculate g^a % p CryptoPP::Integer cryptDHGexpAmodP = a_exp_b_mod_c(CryptoPP::Integer(2), m_cryptDHA, cryptDHPrime); wxASSERT( m_cryptDHA.MinEncodedSize() <= PRIMESIZE_BYTES ); // put the result into a buffer uint8_t aBuffer[PRIMESIZE_BYTES]; cryptDHGexpAmodP.Encode(aBuffer, PRIMESIZE_BYTES); fileRequest.Write(aBuffer, PRIMESIZE_BYTES); uint8 byPadding = (uint8)(GetRandomUint8() % 16); // add random padding fileRequest.WriteUInt8(byPadding); for (int i = 0; i < byPadding; i++) { fileRequest.WriteUInt8(GetRandomUint8()); } m_NegotiatingState = ONS_BASIC_SERVER_DHANSWER; m_StreamCryptState = ECS_NEGOTIATING; m_nReceiveBytesWanted = 96; SendNegotiatingData(fileRequest.GetRawBuffer(), (uint32_t)fileRequest.GetLength(), (uint32_t)fileRequest.GetLength()); } else { wxFAIL; m_StreamCryptState = ECS_NONE; return; } } int CEncryptedStreamSocket::Negotiate(const uint8* pBuffer, uint32 nLen) { uint32_t nRead = 0; wxASSERT( m_nReceiveBytesWanted > 0 ); //DumpMem(pBuffer, nLen, wxT("Negotiate buffer: ")); try { while (m_NegotiatingState != ONS_COMPLETE && m_nReceiveBytesWanted > 0) { if (m_nReceiveBytesWanted > 512) { wxFAIL; return 0; } const uint32_t nToRead = std::min(nLen - nRead, m_nReceiveBytesWanted); //printf("Reading %i bytes, add from %i position on %i position\n",nToRead, nRead, (int)m_pfiReceiveBuffer.GetPosition()); //DumpMem(pBuffer + nRead, nToRead, wxT("Recv Buffer: ")); m_pfiReceiveBuffer.Write(pBuffer + nRead, nToRead); nRead += nToRead; m_nReceiveBytesWanted -= nToRead; if (m_nReceiveBytesWanted > 0) { return nRead; } if (m_NegotiatingState != ONS_BASIC_CLIENTA_RANDOMPART && m_NegotiatingState != ONS_BASIC_SERVER_DHANSWER) { // We have the keys, decrypt //printf("We have the keys, so decrypt away on %s\n", (const char*) unicode2char(DbgGetIPString())); m_pfiReceiveBuffer.Encrypt(); } m_pfiReceiveBuffer.Seek(0); switch (m_NegotiatingState) { case ONS_NONE: // would be a bug wxFAIL; return 0; case ONS_BASIC_CLIENTA_RANDOMPART: { //printf("We are on ONS_BASIC_CLIENTA_RANDOMPART, create the keys on %s\n", (const char*) unicode2char(DbgGetIPString())); // This creates the send/receive keys. uint8_t achKeyData[21]; md4cpy(achKeyData, thePrefs::GetUserHash().GetHash()); m_pfiReceiveBuffer.Read(achKeyData + 17, 4); achKeyData[16] = MAGICVALUE_REQUESTER; //DumpMem(achKeyData, sizeof(achKeyData), wxT("ach:")); MD5Sum md5(achKeyData, sizeof(achKeyData)); //DumpMem(md5.GetRawHash(), 16, wxT("Md5:")); m_pfiReceiveBuffer.SetKey(md5); achKeyData[16] = MAGICVALUE_SERVER; md5.Calculate(achKeyData, sizeof(achKeyData)); m_pfiSendBuffer.SetKey(md5); m_NegotiatingState = ONS_BASIC_CLIENTA_MAGICVALUE; m_nReceiveBytesWanted = 4; break; } case ONS_BASIC_CLIENTA_MAGICVALUE: { // Check the magic value to confirm encryption works. //printf("Creating magic value on negotiate on %s\n", (const char*) unicode2char(DbgGetIPString())); uint32_t dwValue = m_pfiReceiveBuffer.ReadUInt32(); if (dwValue == MAGICVALUE_SYNC) { // yup, the one or the other way it worked, this is an encrypted stream //DEBUG_ONLY( DebugLog(_T("Received proper magic value, clientIP: %s"), DbgGetIPString()) ); // set the receiver key //printf("Magic value works on %s\n", (const char*) unicode2char(DbgGetIPString())); m_NegotiatingState = ONS_BASIC_CLIENTA_METHODTAGSPADLEN; m_nReceiveBytesWanted = 3; } else { //printf("Wrong magic value: 0x%x != 0x%x on %s\n",dwValue, MAGICVALUE_SYNC, (const char*)unicode2char(DbgGetIPString())); //DebugLogError(_T("CEncryptedStreamSocket: Received wrong magic value from clientIP %s on a supposly encrytped stream / Wrong Header"), DbgGetIPString()); OnError(ERR_ENCRYPTION); return (-1); } break; } case ONS_BASIC_CLIENTA_METHODTAGSPADLEN: { // Get encryption method and padding. // Might fall back to padding process, but the bytes will be ignored. //printf("Getting encryption method on negotiation\n"); m_dbgbyEncryptionSupported = m_pfiReceiveBuffer.ReadUInt8(); m_dbgbyEncryptionRequested = m_pfiReceiveBuffer.ReadUInt8(); if (m_dbgbyEncryptionRequested != ENM_OBFUSCATION) { //printf("Unsupported encryption method!\n"); // AddDebugLogLine(DLP_LOW, false, _T("CEncryptedStreamSocket: Client %s preffered unsupported encryption method (%i)"), DbgGetIPString(), m_dbgbyEncryptionRequested); } m_nReceiveBytesWanted = m_pfiReceiveBuffer.ReadUInt8(); m_NegotiatingState = ONS_BASIC_CLIENTA_PADDING; if (m_nReceiveBytesWanted > 0) { // No padding break; } } case ONS_BASIC_CLIENTA_PADDING: { //printf("Negotiating on padding, completing\n"); // ignore the random bytes, send the response, set status complete CMemFile fileResponse(26); fileResponse.WriteUInt32(MAGICVALUE_SYNC); const uint8_t bySelectedEncryptionMethod = ENM_OBFUSCATION; // we do not support any further encryption in this version, so no need to look which the other client preferred fileResponse.WriteUInt8(bySelectedEncryptionMethod); amuleIPV4Address address; GetPeer(address); const uint8_t byPaddingLen = theApp->serverconnect->AwaitingTestFromIP(StringIPtoUint32(address.IPAddress())) ? 16 : (thePrefs::GetCryptTCPPaddingLength() + 1); uint8_t byPadding = (uint8_t)(GetRandomUint8() % byPaddingLen); fileResponse.WriteUInt8(byPadding); for (int i = 0; i < byPadding; i++) { fileResponse.WriteUInt8((uint8_t)rand()); } SendNegotiatingData(fileResponse.GetRawBuffer(), (uint32_t)fileResponse.GetLength()); m_NegotiatingState = ONS_COMPLETE; m_StreamCryptState = ECS_ENCRYPTING; //DEBUG_ONLY( DebugLog(_T("CEncryptedStreamSocket: Finished Obufscation handshake with client %s (incoming)"), DbgGetIPString()) ); break; } case ONS_BASIC_CLIENTB_MAGICVALUE: { //printf("Negotiating on magic value\n"); if (m_pfiReceiveBuffer.ReadUInt32() != MAGICVALUE_SYNC) { //DebugLogError(_T("CEncryptedStreamSocket: EncryptedstreamSyncError: Client sent wrong Magic Value as answer, cannot complete handshake (%s)"), DbgGetIPString()); OnError(ERR_ENCRYPTION); return (-1); } m_NegotiatingState = ONS_BASIC_CLIENTB_METHODTAGSPADLEN; m_nReceiveBytesWanted = 2; break; } case ONS_BASIC_CLIENTB_METHODTAGSPADLEN: { //printf("Negotiating on client B pad length\n"); m_dbgbyEncryptionMethodSet = m_pfiReceiveBuffer.ReadUInt8(); if (m_dbgbyEncryptionMethodSet != ENM_OBFUSCATION) { //DebugLogError( _T("CEncryptedStreamSocket: Client %s set unsupported encryption method (%i), handshake failed"), DbgGetIPString(), m_dbgbyEncryptionMethodSet); OnError(ERR_ENCRYPTION); return (-1); } m_nReceiveBytesWanted = m_pfiReceiveBuffer.ReadUInt8(); m_NegotiatingState = ONS_BASIC_CLIENTB_PADDING; if (m_nReceiveBytesWanted > 0) { break; } } case ONS_BASIC_CLIENTB_PADDING: //printf("Negotiating on client B padding, handshake complete\n"); // ignore the random bytes, the handshake is complete m_NegotiatingState = ONS_COMPLETE; m_StreamCryptState = ECS_ENCRYPTING; //DEBUG_ONLY( DebugLog(_T("CEncryptedStreamSocket: Finished Obufscation handshake with client %s (outgoing)"), DbgGetIPString()) ); break; case ONS_BASIC_SERVER_DHANSWER: { wxASSERT( !m_cryptDHA.IsZero() ); uint8_t aBuffer[PRIMESIZE_BYTES + 1]; m_pfiReceiveBuffer.Read(aBuffer, PRIMESIZE_BYTES); CryptoPP::Integer cryptDHAnswer((byte*)aBuffer, PRIMESIZE_BYTES); CryptoPP::Integer cryptDHPrime((byte*)dh768_p, PRIMESIZE_BYTES); // our fixed prime CryptoPP::Integer cryptResult = a_exp_b_mod_c(cryptDHAnswer, m_cryptDHA, cryptDHPrime); m_cryptDHA = 0; //DEBUG_ONLY( ZeroMemory(aBuffer, sizeof(aBuffer)) ); wxASSERT( cryptResult.MinEncodedSize() <= PRIMESIZE_BYTES ); // create the keys cryptResult.Encode(aBuffer, PRIMESIZE_BYTES); aBuffer[PRIMESIZE_BYTES] = MAGICVALUE_REQUESTER; MD5Sum md5(aBuffer, sizeof(aBuffer)); m_pfiSendBuffer.SetKey(md5); aBuffer[PRIMESIZE_BYTES] = MAGICVALUE_SERVER; md5.Calculate(aBuffer, sizeof(aBuffer)); m_pfiReceiveBuffer.SetKey(md5); m_NegotiatingState = ONS_BASIC_SERVER_MAGICVALUE; m_nReceiveBytesWanted = 4; break; } case ONS_BASIC_SERVER_MAGICVALUE: { uint32_t dwValue = m_pfiReceiveBuffer.ReadUInt32(); if (dwValue == MAGICVALUE_SYNC) { // yup, the one or the other way it worked, this is an encrypted stream //DebugLog(_T("Received proper magic value after DH-Agreement from Serverconnection IP: %s"), DbgGetIPString()); // set the receiver key m_NegotiatingState = ONS_BASIC_SERVER_METHODTAGSPADLEN; m_nReceiveBytesWanted = 3; } else { //DebugLogError(_T("CEncryptedStreamSocket: Received wrong magic value after DH-Agreement from Serverconnection"), DbgGetIPString()); OnError(ERR_ENCRYPTION); return (-1); } break; } case ONS_BASIC_SERVER_METHODTAGSPADLEN: m_dbgbyEncryptionSupported = m_pfiReceiveBuffer.ReadUInt8(); m_dbgbyEncryptionRequested = m_pfiReceiveBuffer.ReadUInt8(); if (m_dbgbyEncryptionRequested != ENM_OBFUSCATION) { // AddDebugLogLine(DLP_LOW, false, _T("CEncryptedStreamSocket: Server %s preffered unsupported encryption method (%i)"), DbgGetIPString(), m_dbgbyEncryptionRequested); } m_nReceiveBytesWanted = m_pfiReceiveBuffer.ReadUInt8(); m_NegotiatingState = ONS_BASIC_SERVER_PADDING; if (m_nReceiveBytesWanted > 0) { break; } case ONS_BASIC_SERVER_PADDING: { // ignore the random bytes (they are decrypted already), send the response, set status complete CMemFile fileResponse(26); fileResponse.WriteUInt32(MAGICVALUE_SYNC); const uint8_t bySelectedEncryptionMethod = ENM_OBFUSCATION; // we do not support any further encryption in this version, so no need to look which the other client preferred fileResponse.WriteUInt8(bySelectedEncryptionMethod); // Server callback connection only allows 16 bytes of padding. uint8_t byPadding = (uint8_t)(GetRandomUint8() % 16); fileResponse.WriteUInt8(byPadding); for (int i = 0; i < byPadding; i++) { fileResponse.WriteUInt8((uint8_t)rand()); } m_NegotiatingState = ONS_BASIC_SERVER_DELAYEDSENDING; SendNegotiatingData(fileResponse.GetRawBuffer(), (uint32_t)fileResponse.GetLength(), 0, true); // don't actually send it right now, store it in our sendbuffer m_StreamCryptState = ECS_ENCRYPTING; //DEBUG_ONLY( DebugLog(_T("CEncryptedStreamSocket: Finished DH Obufscation handshake with Server %s"), DbgGetIPString()) ); break; } default: wxFAIL; } m_pfiReceiveBuffer.ResetData(); } return nRead; } catch(...) { // can only be caused by a bug in negationhandling, not by the datastream //error->Delete(); //printf("Bug on negotiation?\n"); wxFAIL; OnError(ERR_ENCRYPTION); m_pfiReceiveBuffer.ResetData(); return (-1); } } int CEncryptedStreamSocket::SendNegotiatingData(const void* lpBuf, uint32_t nBufLen, uint32_t nStartCryptFromByte, bool bDelaySend) { wxASSERT( m_StreamCryptState == ECS_NEGOTIATING || m_StreamCryptState == ECS_ENCRYPTING ); wxASSERT( nStartCryptFromByte <= nBufLen ); wxASSERT( m_NegotiatingState == ONS_BASIC_SERVER_DELAYEDSENDING || !bDelaySend ); //printf("Send negotiation data on %s\n", (const char*) unicode2char(DbgGetIPString())); uint8_t* pBuffer = NULL; bool bProcess = false; if (lpBuf != NULL) { pBuffer = new uint8_t[nBufLen]; if (pBuffer == NULL) { throw CMuleException(wxT("Memory exception"), wxT("Memory exception on TCP encrypted socket")); } if (nStartCryptFromByte > 0) { memcpy(pBuffer, lpBuf, nStartCryptFromByte); } if (nBufLen - nStartCryptFromByte > 0) { //printf("Crypting negotiation data on %s starting on byte %i\n", (const char*) unicode2char(DbgGetIPString()), nStartCryptFromByte); //DumpMem(lpBuf, nBufLen, wxT("Pre-encryption:")); m_pfiSendBuffer.RC4Crypt((uint8*)lpBuf + nStartCryptFromByte, pBuffer + nStartCryptFromByte, nBufLen - nStartCryptFromByte); //DumpMem(pBuffer, nBufLen, wxT("Post-encryption:")); } if (!m_pfiSendBuffer.IsEmpty()) { // we already have data pending. Attach it and try to send if (m_NegotiatingState == ONS_BASIC_SERVER_DELAYEDSENDING) { m_NegotiatingState = ONS_COMPLETE; } else { wxFAIL; } m_pfiSendBuffer.Append(pBuffer, nBufLen); delete[] pBuffer; pBuffer = NULL; nStartCryptFromByte = 0; bProcess = true; // we want to try to send it right now } } if (lpBuf == NULL || bProcess) { // this call is for processing pending data if (m_pfiSendBuffer.IsEmpty() || nStartCryptFromByte != 0) { wxFAIL; return 0; // or not } nBufLen = (uint32)m_pfiSendBuffer.GetLength(); pBuffer = m_pfiSendBuffer.Detach(); } wxASSERT( m_pfiSendBuffer.IsEmpty() ); uint32_t result = 0; if (!bDelaySend) { //printf("Writing negotiation data on %s: ", (const char*) unicode2char(DbgGetIPString())); CSocketClientProxy::Write(pBuffer, nBufLen); result = CSocketClientProxy::LastCount(); //printf("Wrote %i bytes\n",result); } if (result == (uint32_t)SOCKET_ERROR || bDelaySend) { m_pfiSendBuffer.Write(pBuffer, nBufLen); delete[] pBuffer; return result; } else { if (result < nBufLen) { // Store the partial data pending //printf("Partial negotiation pending on %s\n", (const char*) unicode2char(DbgGetIPString())); m_pfiSendBuffer.Write(pBuffer + result, nBufLen - result); } delete[] pBuffer; return result; } } // ADUNANZA BEGIN // back #if 0 wxString CEncryptedStreamSocket::DbgGetIPString() { amuleIPV4Address address; GetPeer(address); return address.IPAddress(); } #endif // ADUNANZA END uint8_t CEncryptedStreamSocket::GetSemiRandomNotProtocolMarker() const { uint8_t bySemiRandomNotProtocolMarker = 0; bool bOk = false; for (int i = 0; i < 128; i++) { bySemiRandomNotProtocolMarker = GetRandomUint8(); switch (bySemiRandomNotProtocolMarker) { // not allowed values case OP_EDONKEYPROT: case OP_PACKEDPROT: case OP_EMULEPROT: break; default: bOk = true; } if (bOk) { break; } } if (!bOk) { // either we have _real_ bad luck or the randomgenerator is a bit messed up wxFAIL; bySemiRandomNotProtocolMarker = 0x01; } return bySemiRandomNotProtocolMarker; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/RandomFunctions.h0000644000175000017500000000303512050266603021602 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef RANDOMFUNCTIONS_H #define RANDOMFUNCTIONS_H #include "Types.h" // Needed for uint16, uint32 and uint64 #include "kademlia/utils/UInt128.h" // Needed for CUInt128 namespace CryptoPP { class AutoSeededRandomPool; } const CryptoPP::AutoSeededRandomPool& GetRandomPool(); /* * Random numbers generation */ uint8_t GetRandomUint8(); uint16_t GetRandomUint16(); uint32_t GetRandomUint32(); uint64_t GetRandomUint64(); namespace Kademlia { CUInt128 GetRandomUint128(); } #endif // RANDOMFUNCTIONS_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/NetworkFunctions.cpp0000644000175000017500000001420112050266603022343 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "NetworkFunctions.h" // Interface declaration bool StringIPtoUint32(const wxString &strIP, uint32& Ip) { // The current position in the current field, used to detect malformed fields (x.y..z). unsigned digit = 0; // The current field, used to ensure only IPs that looks like a.b.c.d are supported unsigned field = 0; // The value of the current field unsigned value = 0; // Stores the work-value of the IP, reference is not changed unless the str was valid uint32 tmp_ip = 0; wxString str = strIP.Strip( wxString::both ); for (size_t i = 0; i < str.Length(); i++) { wxChar c = str.GetChar( i ); if ( c >= wxT('0') && c <= wxT('9') && (value >> 8) == 0) { value = ( value * 10 ) + ( c - wxT('0') ); ++digit; } else if ( c == wxT('.') ) { if ( digit && (value >> 8) == 0) { tmp_ip = tmp_ip | value << ( field * 8 ); // Rest the current field values value = digit = 0; ++field; } else { return false; } } else { return false; } } // Only set the referenced value if it was a valid IP if ( field == 3 && digit && (value >> 8) == 0) { Ip = tmp_ip | value << 24; return true; } return false; } uint32 StringHosttoUint32(const wxString &Host) { if (Host.IsEmpty()) { return 0; } // Why using native things when we have a wrapper for it :) wxIPV4address solver; solver.Hostname(Host); uint32 result = StringIPtoUint32(solver.IPAddress()); if (result != (uint32)-1) { return result; } else { // This actually happens on wrong hostname return 0; } } /** * Used to store the ranges. */ struct IPRange { const wxChar *addr; unsigned int mask; bool isLAN; }; const IPRange ranges[] = { // Here is reserved blocks from RFC 3330 at http://www.rfc-editor.org/rfc/rfc3330.txt // //Address Block Present Use Reference //---------------------------------------------------------------------------------- { wxT("0.0.0.0"), 8, false }, // "This" Network [RFC1700, page 4] { wxT("10.0.0.0"), 8, true }, // Private-Use Networks [RFC1918] // Acording to RFC3330, 24.* and 14.* must be parsed as normal ips. //{ wxT("14.0.0.0"), 8, false }, // Public-Data Networks [RFC1700, page 181] //{ wxT("24.0.0.0"), 8, false }, // Cable Television Networks -- // ADUNANZA BEGIN // Codice rimosso #if 0 { wxT("39.0.0.0"), 8, false }, // Reserved but subject #endif // ADUNANZA END // to allocation [RFC1797] { wxT("127.0.0.0"), 8, false }, // Loopback [RFC1700, page 5] { wxT("128.0.0.0"), 16, false }, // Reserved but subject // to allocation -- { wxT("169.254.0.0"), 16, false }, // Link Local -- { wxT("172.16.0.0"), 12, true }, // Private-Use Networks [RFC1918] { wxT("191.255.0.0"), 16, false }, // Reserved but subject // to allocation -- { wxT("192.0.0.0"), 24, false }, // Reserved but subject // to allocation -- { wxT("192.0.2.0"), 24, false }, // Test-Net { wxT("192.88.99.0"), 24, false }, // 6to4 Relay Anycast [RFC3068] { wxT("192.168.0.0"), 16, true }, // Private-Use Networks [RFC1918] { wxT("198.18.0.0"), 15, false }, // Network Interconnect // Device Benchmark Testing [RFC2544] { wxT("223.255.255.0"), 24, false }, // Reserved but subject // to allocation -- { wxT("224.0.0.0"), 4, false }, // Multicast [RFC3171] { wxT("240.0.0.0"), 4, false } // Reserved for Future Use [RFC1700, page 4] }; struct filter_st { uint32 addr; // Address and mask in anti-host order. uint32 mask; }; const unsigned int number_of_ranges = sizeof(ranges) / sizeof(IPRange); static filter_st filters[number_of_ranges]; // This function is used to initialize the IP filter bool SetupFilter() { for (unsigned int i = 0; i < number_of_ranges; ++i) { filters[i].addr = StringIPtoUint32( ranges[i].addr ); filters[i].mask = ~wxUINT32_SWAP_ALWAYS((1 << (32 - ranges[i].mask)) - 1); } return true; } // This is a little trick to ensure that the filter-list is initialized before // it gets used, while not risking threading problems. static bool filterSetup = SetupFilter(); bool IsGoodIP(uint32 IP, bool filterLAN) { for (unsigned int i = 0; i < number_of_ranges; ++i) { if (((IP ^ filters[i].addr) & filters[i].mask) == 0) { if ( filterLAN || !ranges[i].isLAN ) { return false; } } } return true; } bool IsLanIP(uint32_t ip) throw() { for (unsigned int i = 0; i < number_of_ranges; i++) { if (((ip ^ filters[i].addr) & filters[i].mask) == 0) { return ranges[i].isLAN; } } return false; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ECSpecialMuleTags.cpp0000644000175000017500000006061112050266603022261 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include // Needed for CECTag #include // Needed for special EC tag creator classes #include "Preferences.h" #include "amule.h" CEC_Category_Tag::CEC_Category_Tag(uint32 cat_index, EC_DETAIL_LEVEL detail_level) : CECTag(EC_TAG_CATEGORY, cat_index) { Category_Struct *cat = theApp->glob_prefs->GetCategory(cat_index); switch (detail_level) { case EC_DETAIL_UPDATE: case EC_DETAIL_INC_UPDATE: case EC_DETAIL_WEB: case EC_DETAIL_FULL: AddTag(CECTag(EC_TAG_CATEGORY_PATH, cat->path.GetRaw())); AddTag(CECTag(EC_TAG_CATEGORY_COMMENT, cat->comment)); AddTag(CECTag(EC_TAG_CATEGORY_COLOR, (uint32)cat->color)); AddTag(CECTag(EC_TAG_CATEGORY_PRIO, cat->prio)); case EC_DETAIL_CMD: AddTag(CECTag(EC_TAG_CATEGORY_TITLE, cat->title)); } } CEC_Category_Tag::CEC_Category_Tag(uint32 cat_index, wxString name, wxString path, wxString comment, uint32 color, uint8 prio) : CECTag(EC_TAG_CATEGORY, cat_index) { AddTag(CECTag(EC_TAG_CATEGORY_PATH, path)); AddTag(CECTag(EC_TAG_CATEGORY_COMMENT, comment)); AddTag(CECTag(EC_TAG_CATEGORY_COLOR, color)); AddTag(CECTag(EC_TAG_CATEGORY_PRIO, prio)); AddTag(CECTag(EC_TAG_CATEGORY_TITLE, name)); } bool CEC_Category_Tag::Apply() { bool ret = theApp->glob_prefs->UpdateCategory(GetInt(), Name(), CPath(Path()), Comment(), Color(), Prio()); if (!ret) { GetTagByName(EC_TAG_CATEGORY_PATH)->SetStringData(theApp->glob_prefs->GetCatPath(GetInt()).GetRaw()); } return ret; } bool CEC_Category_Tag::Create() { Category_Struct * category = NULL; bool ret = theApp->glob_prefs->CreateCategory(category, Name(), CPath(Path()), Comment(), Color(), Prio()); if (!ret) { GetTagByName(EC_TAG_CATEGORY_PATH)->SetStringData(theApp->glob_prefs->GetCatPath( theApp->glob_prefs->GetCatCount() - 1).GetRaw()); } return ret; } CEC_Prefs_Packet::CEC_Prefs_Packet(uint32 selection, EC_DETAIL_LEVEL pref_details, EC_DETAIL_LEVEL cat_details) : CECPacket(EC_OP_SET_PREFERENCES, pref_details) { if (selection & EC_PREFS_CATEGORIES) { if (theApp->glob_prefs->GetCatCount() > 1) { CECEmptyTag cats(EC_TAG_PREFS_CATEGORIES); for (unsigned int i = 0; i < theApp->glob_prefs->GetCatCount(); ++i) { CEC_Category_Tag catTag(i, cat_details); cats.AddTag(catTag); } AddTag(cats); } } if (selection & EC_PREFS_GENERAL) { CECEmptyTag user_prefs(EC_TAG_PREFS_GENERAL); user_prefs.AddTag(CECTag(EC_TAG_USER_NICK, thePrefs::GetUserNick())); user_prefs.AddTag(CECTag(EC_TAG_USER_HASH, thePrefs::GetUserHash())); user_prefs.AddTag(CECTag(EC_TAG_USER_HOST, thePrefs::GetYourHostname())); user_prefs.AddTag(CECTag(EC_TAG_GENERAL_CHECK_NEW_VERSION, thePrefs::GetCheckNewVersion())); AddTag(user_prefs); } if (selection & EC_PREFS_CONNECTIONS) { CECEmptyTag connPrefs(EC_TAG_PREFS_CONNECTIONS); connPrefs.AddTag(CECTag(EC_TAG_CONN_UL_CAP, thePrefs::GetMaxGraphUploadRate())); connPrefs.AddTag(CECTag(EC_TAG_CONN_DL_CAP, thePrefs::GetMaxGraphDownloadRate())); connPrefs.AddTag(CECTag(EC_TAG_CONN_MAX_UL, thePrefs::GetMaxUpload())); connPrefs.AddTag(CECTag(EC_TAG_CONN_MAX_DL, thePrefs::GetMaxDownload())); connPrefs.AddTag(CECTag(EC_TAG_CONN_SLOT_ALLOCATION, thePrefs::GetSlotAllocation())); connPrefs.AddTag(CECTag(EC_TAG_CONN_TCP_PORT, thePrefs::GetPort())); connPrefs.AddTag(CECTag(EC_TAG_CONN_UDP_PORT, thePrefs::GetUDPPort())); if (thePrefs::IsUDPDisabled()) { connPrefs.AddTag(CECEmptyTag(EC_TAG_CONN_UDP_DISABLE)); } connPrefs.AddTag(CECTag(EC_TAG_CONN_MAX_FILE_SOURCES, thePrefs::GetMaxSourcePerFile())); connPrefs.AddTag(CECTag(EC_TAG_CONN_MAX_CONN, thePrefs::GetMaxConnections())); if (thePrefs::DoAutoConnect()) { connPrefs.AddTag(CECEmptyTag(EC_TAG_CONN_AUTOCONNECT)); } if (thePrefs::Reconnect()) { connPrefs.AddTag(CECEmptyTag(EC_TAG_CONN_RECONNECT)); } if (thePrefs::GetNetworkED2K()) { connPrefs.AddTag(CECEmptyTag(EC_TAG_NETWORK_ED2K)); } if (thePrefs::GetNetworkKademlia()) { connPrefs.AddTag(CECEmptyTag(EC_TAG_NETWORK_KADEMLIA)); } AddTag(connPrefs); } if (selection & EC_PREFS_MESSAGEFILTER) { CECEmptyTag msg_prefs(EC_TAG_PREFS_MESSAGEFILTER); if (thePrefs::MustFilterMessages()) { msg_prefs.AddTag(CECEmptyTag(EC_TAG_MSGFILTER_ENABLED)); } if (thePrefs::IsFilterAllMessages()) { msg_prefs.AddTag(CECEmptyTag(EC_TAG_MSGFILTER_ALL)); } if (thePrefs::MsgOnlyFriends()) { msg_prefs.AddTag(CECEmptyTag(EC_TAG_MSGFILTER_FRIENDS)); } if (thePrefs::MsgOnlySecure()) { msg_prefs.AddTag(CECEmptyTag(EC_TAG_MSGFILTER_SECURE)); } if (thePrefs::IsFilterByKeywords()) { msg_prefs.AddTag(CECEmptyTag(EC_TAG_MSGFILTER_BY_KEYWORD)); } msg_prefs.AddTag(CECTag(EC_TAG_MSGFILTER_KEYWORDS, thePrefs::GetMessageFilterString())); AddTag(msg_prefs); } if (selection & EC_PREFS_REMOTECONTROLS) { CECEmptyTag rc_prefs(EC_TAG_PREFS_REMOTECTRL); rc_prefs.AddTag(CECTag(EC_TAG_WEBSERVER_PORT, thePrefs::GetWSPort())); if (thePrefs::GetWSIsEnabled()) { rc_prefs.AddTag(CECEmptyTag(EC_TAG_WEBSERVER_AUTORUN)); } if (!thePrefs::GetWSPass().IsEmpty()) { CMD4Hash passhash; wxCHECK2(passhash.Decode(thePrefs::GetWSPass()), /* Do nothing. */); rc_prefs.AddTag(CECTag(EC_TAG_PASSWD_HASH, passhash)); } if (thePrefs::GetWSIsLowUserEnabled()) { CECEmptyTag lowUser(EC_TAG_WEBSERVER_GUEST); if (!thePrefs::GetWSLowPass().IsEmpty()) { CMD4Hash passhash; wxCHECK2(passhash.Decode(thePrefs::GetWSLowPass()), /* Do nothing. */); lowUser.AddTag(CECTag(EC_TAG_PASSWD_HASH, passhash)); } rc_prefs.AddTag(lowUser); } if (thePrefs::GetWebUseGzip()) { rc_prefs.AddTag(CECEmptyTag(EC_TAG_WEBSERVER_USEGZIP)); } rc_prefs.AddTag(CECTag(EC_TAG_WEBSERVER_REFRESH, thePrefs::GetWebPageRefresh())); rc_prefs.AddTag(CECTag(EC_TAG_WEBSERVER_TEMPLATE, thePrefs::GetWebTemplate())); AddTag(rc_prefs); } if (selection & EC_PREFS_ONLINESIG) { CECEmptyTag online_sig(EC_TAG_PREFS_ONLINESIG); if (thePrefs::IsOnlineSignatureEnabled()) { online_sig.AddTag(CECEmptyTag(EC_TAG_ONLINESIG_ENABLED)); } AddTag(online_sig); } if (selection & EC_PREFS_SERVERS) { CECEmptyTag srv_prefs(EC_TAG_PREFS_SERVERS); if (thePrefs::DeadServer()) { srv_prefs.AddTag(CECEmptyTag(EC_TAG_SERVERS_REMOVE_DEAD)); } srv_prefs.AddTag(CECTag(EC_TAG_SERVERS_DEAD_SERVER_RETRIES, (uint16)thePrefs::GetDeadserverRetries())); if (thePrefs::AutoServerlist()) { srv_prefs.AddTag(CECEmptyTag(EC_TAG_SERVERS_AUTO_UPDATE)); } // Here should come the URL list... if (thePrefs::AddServersFromServer()) { srv_prefs.AddTag(CECEmptyTag(EC_TAG_SERVERS_ADD_FROM_SERVER)); } if (thePrefs::AddServersFromClient()) { srv_prefs.AddTag(CECEmptyTag(EC_TAG_SERVERS_ADD_FROM_CLIENT)); } if (thePrefs::Score()) { srv_prefs.AddTag(CECEmptyTag(EC_TAG_SERVERS_USE_SCORE_SYSTEM)); } if (thePrefs::GetSmartIdCheck()) { srv_prefs.AddTag(CECEmptyTag(EC_TAG_SERVERS_SMART_ID_CHECK)); } if (thePrefs::IsSafeServerConnectEnabled()) { srv_prefs.AddTag(CECEmptyTag(EC_TAG_SERVERS_SAFE_SERVER_CONNECT)); } if (thePrefs::AutoConnectStaticOnly()) { srv_prefs.AddTag(CECEmptyTag(EC_TAG_SERVERS_AUTOCONN_STATIC_ONLY)); } if (thePrefs::IsManualHighPrio()) { srv_prefs.AddTag(CECEmptyTag(EC_TAG_SERVERS_MANUAL_HIGH_PRIO)); } srv_prefs.AddTag(CECTag(EC_TAG_SERVERS_UPDATE_URL, thePrefs::GetEd2kServersUrl())); AddTag(srv_prefs); } if (selection & EC_PREFS_FILES) { CECEmptyTag filePrefs(EC_TAG_PREFS_FILES); if (thePrefs::IsICHEnabled()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_ICH_ENABLED)); } if (thePrefs::IsTrustingEveryHash()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_AICH_TRUST)); } if (thePrefs::AddNewFilesPaused()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_NEW_PAUSED)); } if (thePrefs::GetNewAutoDown()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_NEW_AUTO_DL_PRIO)); } if (thePrefs::GetPreviewPrio()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_PREVIEW_PRIO)); } if (thePrefs::GetNewAutoUp()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_NEW_AUTO_UL_PRIO)); } if (thePrefs::StartNextFile()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_START_NEXT_PAUSED)); } if (thePrefs::StartNextFileSame()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_RESUME_SAME_CAT)); } if (thePrefs::GetSrcSeedsOn()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_SAVE_SOURCES)); } if (thePrefs::GetExtractMetaData()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_EXTRACT_METADATA)); } if (thePrefs::GetAllocFullFile()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_ALLOC_FULL_SIZE)); } if (thePrefs::IsCheckDiskspaceEnabled()) { filePrefs.AddTag(CECEmptyTag(EC_TAG_FILES_CHECK_FREE_SPACE)); } filePrefs.AddTag(CECTag(EC_TAG_FILES_MIN_FREE_SPACE, thePrefs::GetMinFreeDiskSpaceMB())); AddTag(filePrefs); } if (selection & EC_PREFS_SRCDROP) { CECEmptyTag srcdrop(EC_TAG_PREFS_SRCDROP); srcdrop.AddTag(CECTag(EC_TAG_SRCDROP_NONEEDED, (uint8)thePrefs::GetNoNeededSources())); if (thePrefs::DropFullQueueSources()) { srcdrop.AddTag(CECEmptyTag(EC_TAG_SRCDROP_DROP_FQS)); } if (thePrefs::DropHighQueueRankingSources()) { srcdrop.AddTag(CECEmptyTag(EC_TAG_SRCDROP_DROP_HQRS)); } srcdrop.AddTag(CECTag(EC_TAG_SRCDROP_HQRS_VALUE, (uint16)thePrefs::HighQueueRanking())); srcdrop.AddTag(CECTag(EC_TAG_SRCDROP_AUTODROP_TIMER, (uint16)thePrefs::GetAutoDropTimer())); AddTag(srcdrop); } if (selection & EC_PREFS_DIRECTORIES) { CECEmptyTag dirPrefs(EC_TAG_PREFS_DIRECTORIES); dirPrefs.AddTag(CECTag(EC_TAG_DIRECTORIES_INCOMING, thePrefs::GetIncomingDir().GetRaw())); dirPrefs.AddTag(CECTag(EC_TAG_DIRECTORIES_TEMP, thePrefs::GetTempDir().GetRaw())); uint32 sharedDirs = theApp->glob_prefs->shareddir_list.size(); CECTag dirtag(EC_TAG_DIRECTORIES_SHARED, sharedDirs); for (size_t i = 0; i < sharedDirs; i++) { dirtag.AddTag(CECTag(EC_TAG_STRING, theApp->glob_prefs->shareddir_list[i].GetRaw())); } dirPrefs.AddTag(dirtag); dirPrefs.AddTag(CECTag(EC_TAG_DIRECTORIES_SHARE_HIDDEN, thePrefs::ShareHiddenFiles())); AddTag(dirPrefs); } if (selection & EC_PREFS_STATISTICS) { //#warning TODO } if (selection & EC_PREFS_SECURITY) { CECEmptyTag secPrefs(EC_TAG_PREFS_SECURITY); secPrefs.AddTag(CECTag(EC_TAG_SECURITY_CAN_SEE_SHARES, thePrefs::CanSeeShares())); if (thePrefs::IsFilteringClients()) { secPrefs.AddTag(CECEmptyTag(EC_TAG_IPFILTER_CLIENTS)); } if (thePrefs::IsFilteringServers()) { secPrefs.AddTag(CECEmptyTag(EC_TAG_IPFILTER_SERVERS)); } if (thePrefs::IPFilterAutoLoad()) { secPrefs.AddTag(CECEmptyTag(EC_TAG_IPFILTER_AUTO_UPDATE)); } secPrefs.AddTag(CECTag(EC_TAG_IPFILTER_UPDATE_URL, thePrefs::IPFilterURL())); secPrefs.AddTag(CECTag(EC_TAG_IPFILTER_LEVEL, thePrefs::GetIPFilterLevel())); if (thePrefs::FilterLanIPs()) { secPrefs.AddTag(CECEmptyTag(EC_TAG_IPFILTER_FILTER_LAN)); } if (thePrefs::IsSecureIdentEnabled()) { secPrefs.AddTag(CECEmptyTag(EC_TAG_SECURITY_USE_SECIDENT)); } if (thePrefs::IsClientCryptLayerSupported()) { secPrefs.AddTag(CECEmptyTag(EC_TAG_SECURITY_OBFUSCATION_SUPPORTED)); } if (thePrefs::IsClientCryptLayerRequested()) { secPrefs.AddTag(CECEmptyTag(EC_TAG_SECURITY_OBFUSCATION_REQUESTED)); } if (thePrefs::IsClientCryptLayerRequired()) { secPrefs.AddTag(CECEmptyTag(EC_TAG_SECURITY_OBFUSCATION_REQUIRED)); } AddTag(secPrefs); } if (selection & EC_PREFS_CORETWEAKS) { CECEmptyTag cwPrefs(EC_TAG_PREFS_CORETWEAKS); cwPrefs.AddTag(CECTag(EC_TAG_CORETW_MAX_CONN_PER_FIVE, thePrefs::GetMaxConperFive())); if (thePrefs::GetVerbose()) { cwPrefs.AddTag(CECEmptyTag(EC_TAG_CORETW_VERBOSE)); } cwPrefs.AddTag(CECTag(EC_TAG_CORETW_FILEBUFFER, thePrefs::GetFileBufferSize())); cwPrefs.AddTag(CECTag(EC_TAG_CORETW_UL_QUEUE, thePrefs::GetQueueSize())); cwPrefs.AddTag(CECTag(EC_TAG_CORETW_SRV_KEEPALIVE_TIMEOUT, thePrefs::GetServerKeepAliveTimeout())); AddTag(cwPrefs); } if (selection & EC_PREFS_KADEMLIA) { CECEmptyTag kadPrefs(EC_TAG_PREFS_KADEMLIA); kadPrefs.AddTag(CECTag(EC_TAG_KADEMLIA_UPDATE_URL, thePrefs::GetKadNodesUrl())); AddTag(kadPrefs); } } /** * Applies a boolean value from the set_preferences request * * @param use_tag If true, an unset variable means "leave unchanged". If false, an unset variable means false. * @param thisTab The TAG that contains the TAG with a boolean value * @param applyFunc The function to use for applying the value * @param tagName The name of the TAG that holds the boolean value */ void ApplyBoolean(bool use_tag, const CECTag *thisTab, void (applyFunc)(bool), int tagName) { const CECTag *boolTag = thisTab->GetTagByName(tagName); if (use_tag) { if (boolTag != NULL) { applyFunc(boolTag->GetInt() != 0); } } else { applyFunc(boolTag != NULL); } } /* * This will set all preferences except of categories, which are work as following: * -> On remote gui they are loaded on startup, and then changed on-command * -> Webserver doesn't supposed to change it. */ // ADUNANZA BEGIN // back #if 0 void CEC_Prefs_Packet::Apply() #else void CEC_Prefs_Packet::Apply() const #endif // ADUNANZA END { const CECTag *thisTab = NULL; const CECTag *oneTag = NULL; if ((thisTab = GetTagByName(EC_TAG_PREFS_GENERAL)) != NULL) { if ((oneTag = thisTab->GetTagByName(EC_TAG_USER_NICK)) != NULL) { thePrefs::SetUserNick(oneTag->GetStringData()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_USER_HASH)) != NULL) { thePrefs::SetUserHash(oneTag->GetMD4Data()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_USER_HOST)) != NULL) { thePrefs::SetYourHostname(oneTag->GetStringData()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_GENERAL_CHECK_NEW_VERSION)) != NULL) { thePrefs::SetCheckNewVersion(oneTag->GetInt() != 0); } } // // webserver doesn't transmit all boolean values // bool use_tag = (GetDetailLevel() == EC_DETAIL_FULL); if ((thisTab = GetTagByName(EC_TAG_PREFS_CONNECTIONS)) != NULL) { if ((oneTag = thisTab->GetTagByName(EC_TAG_CONN_UL_CAP)) != NULL) { thePrefs::SetMaxGraphUploadRate(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_CONN_DL_CAP)) != NULL) { thePrefs::SetMaxGraphDownloadRate(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_CONN_MAX_UL)) != NULL) { thePrefs::SetMaxUpload(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_CONN_MAX_DL)) != NULL) { thePrefs::SetMaxDownload(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_CONN_SLOT_ALLOCATION)) != NULL) { thePrefs::SetSlotAllocation(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_CONN_TCP_PORT)) != NULL) { thePrefs::SetPort(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_CONN_UDP_PORT)) != NULL) { thePrefs::SetUDPPort(oneTag->GetInt()); } ApplyBoolean(use_tag, thisTab, thePrefs::SetUDPDisable, EC_TAG_CONN_UDP_DISABLE); if ((oneTag = thisTab->GetTagByName(EC_TAG_CONN_MAX_FILE_SOURCES)) != NULL) { thePrefs::SetMaxSourcesPerFile(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_CONN_MAX_CONN)) != NULL) { thePrefs::SetMaxConnections(oneTag->GetInt()); } ApplyBoolean(use_tag, thisTab, thePrefs::SetAutoConnect, EC_TAG_CONN_AUTOCONNECT); ApplyBoolean(use_tag, thisTab, thePrefs::SetReconnect, EC_TAG_CONN_RECONNECT); ApplyBoolean(use_tag, thisTab, thePrefs::SetNetworkED2K, EC_TAG_NETWORK_ED2K); ApplyBoolean(use_tag, thisTab, thePrefs::SetNetworkKademlia, EC_TAG_NETWORK_KADEMLIA); } if ((thisTab = GetTagByName(EC_TAG_PREFS_MESSAGEFILTER)) != NULL) { ApplyBoolean(use_tag, thisTab, thePrefs::SetMustFilterMessages, EC_TAG_MSGFILTER_ENABLED); ApplyBoolean(use_tag, thisTab, thePrefs::SetFilterAllMessages, EC_TAG_MSGFILTER_ALL); ApplyBoolean(use_tag, thisTab, thePrefs::SetMsgOnlyFriends, EC_TAG_MSGFILTER_FRIENDS); ApplyBoolean(use_tag, thisTab, thePrefs::SetMsgOnlySecure, EC_TAG_MSGFILTER_SECURE); ApplyBoolean(use_tag, thisTab, thePrefs::SetFilterByKeywords, EC_TAG_MSGFILTER_BY_KEYWORD); if ((oneTag = thisTab->GetTagByName(EC_TAG_MSGFILTER_KEYWORDS)) != NULL) { thePrefs::SetMessageFilterString(oneTag->GetStringData()); } } if ((thisTab = GetTagByName(EC_TAG_PREFS_REMOTECTRL)) != NULL) { ApplyBoolean(use_tag, thisTab, thePrefs::SetWSIsEnabled, EC_TAG_WEBSERVER_AUTORUN); if ((oneTag = thisTab->GetTagByName(EC_TAG_WEBSERVER_PORT)) != NULL) { thePrefs::SetWSPort(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_PASSWD_HASH)) != NULL) { thePrefs::SetWSPass(oneTag->GetMD4Data().Encode()); } ApplyBoolean(use_tag, thisTab, thePrefs::SetWSIsLowUserEnabled, EC_TAG_WEBSERVER_GUEST); if ((oneTag = thisTab->GetTagByName(EC_TAG_WEBSERVER_GUEST)) != NULL) { if ((oneTag->GetTagByName(EC_TAG_PASSWD_HASH)) != NULL) { thePrefs::SetWSLowPass(oneTag->GetTagByName(EC_TAG_PASSWD_HASH)->GetMD4Data().Encode()); } } ApplyBoolean(use_tag, thisTab, thePrefs::SetWebUseGzip, EC_TAG_WEBSERVER_USEGZIP); if ((oneTag = thisTab->GetTagByName(EC_TAG_WEBSERVER_REFRESH)) != NULL) { thePrefs::SetWebPageRefresh(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_WEBSERVER_TEMPLATE)) != NULL) { thePrefs::SetWebTemplate(oneTag->GetStringData()); } } if ((thisTab = GetTagByName(EC_TAG_PREFS_ONLINESIG)) != NULL) { ApplyBoolean(use_tag, thisTab, thePrefs::SetOnlineSignatureEnabled, EC_TAG_ONLINESIG_ENABLED); } if ((thisTab = GetTagByName(EC_TAG_PREFS_SERVERS)) != NULL) { ApplyBoolean(use_tag, thisTab, thePrefs::SetDeadServer, EC_TAG_SERVERS_REMOVE_DEAD); if ((oneTag = thisTab->GetTagByName(EC_TAG_SERVERS_DEAD_SERVER_RETRIES)) != NULL) { thePrefs::SetDeadserverRetries(oneTag->GetInt()); } ApplyBoolean(use_tag, thisTab, thePrefs::SetAutoServerlist, EC_TAG_SERVERS_AUTO_UPDATE); // Here should come the URL list... ApplyBoolean(use_tag, thisTab, thePrefs::SetAddServersFromServer, EC_TAG_SERVERS_ADD_FROM_SERVER); ApplyBoolean(use_tag, thisTab, thePrefs::SetAddServersFromClient, EC_TAG_SERVERS_ADD_FROM_CLIENT); ApplyBoolean(use_tag, thisTab, thePrefs::SetScoreSystem, EC_TAG_SERVERS_USE_SCORE_SYSTEM); ApplyBoolean(use_tag, thisTab, thePrefs::SetSmartIdCheck, EC_TAG_SERVERS_SMART_ID_CHECK); ApplyBoolean(use_tag, thisTab, thePrefs::SetSafeServerConnectEnabled, EC_TAG_SERVERS_SAFE_SERVER_CONNECT); ApplyBoolean(use_tag, thisTab, thePrefs::SetAutoConnectStaticOnly, EC_TAG_SERVERS_AUTOCONN_STATIC_ONLY); ApplyBoolean(use_tag, thisTab, thePrefs::SetManualHighPrio, EC_TAG_SERVERS_MANUAL_HIGH_PRIO); if ((oneTag = thisTab->GetTagByName(EC_TAG_SERVERS_UPDATE_URL)) != NULL) { thePrefs::SetEd2kServersUrl(oneTag->GetStringData()); } } if ((thisTab = GetTagByName(EC_TAG_PREFS_FILES)) != NULL) { ApplyBoolean(use_tag, thisTab, thePrefs::SetICHEnabled, EC_TAG_FILES_ICH_ENABLED); ApplyBoolean(use_tag, thisTab, thePrefs::SetTrustingEveryHash, EC_TAG_FILES_AICH_TRUST); ApplyBoolean(use_tag, thisTab, thePrefs::SetAddNewFilesPaused, EC_TAG_FILES_NEW_PAUSED); ApplyBoolean(use_tag, thisTab, thePrefs::SetNewAutoDown, EC_TAG_FILES_NEW_AUTO_DL_PRIO); ApplyBoolean(use_tag, thisTab, thePrefs::SetPreviewPrio, EC_TAG_FILES_PREVIEW_PRIO); ApplyBoolean(use_tag, thisTab, thePrefs::SetNewAutoUp, EC_TAG_FILES_NEW_AUTO_UL_PRIO); ApplyBoolean(use_tag, thisTab, thePrefs::SetStartNextFile, EC_TAG_FILES_START_NEXT_PAUSED); ApplyBoolean(use_tag, thisTab, thePrefs::SetStartNextFileSame, EC_TAG_FILES_RESUME_SAME_CAT); ApplyBoolean(use_tag, thisTab, thePrefs::SetSrcSeedsOn, EC_TAG_FILES_SAVE_SOURCES); ApplyBoolean(use_tag, thisTab, thePrefs::SetExtractMetaData, EC_TAG_FILES_EXTRACT_METADATA); ApplyBoolean(use_tag, thisTab, thePrefs::SetAllocFullFile, EC_TAG_FILES_ALLOC_FULL_SIZE); ApplyBoolean(use_tag, thisTab, thePrefs::SetCheckDiskspaceEnabled, EC_TAG_FILES_CHECK_FREE_SPACE); if ((oneTag = thisTab->GetTagByName(EC_TAG_FILES_MIN_FREE_SPACE)) != NULL) { thePrefs::SetMinFreeDiskSpaceMB(oneTag->GetInt()); } } if ((thisTab = GetTagByName(EC_TAG_PREFS_SRCDROP)) != NULL) { if ((oneTag = thisTab->GetTagByName(EC_TAG_SRCDROP_NONEEDED)) != NULL) { thePrefs::SetNoNeededSources(oneTag->GetInt()); } ApplyBoolean(use_tag, thisTab, thePrefs::SetDropFullQueueSources, EC_TAG_SRCDROP_DROP_FQS); ApplyBoolean(use_tag, thisTab, thePrefs::SetDropHighQueueRankingSources, EC_TAG_SRCDROP_DROP_HQRS); if ((oneTag = thisTab->GetTagByName(EC_TAG_SRCDROP_HQRS_VALUE)) != NULL) { thePrefs::SetHighQueueRanking(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_SRCDROP_AUTODROP_TIMER)) != NULL) { thePrefs::SetAutoDropTimer(oneTag->GetInt()); } } if ((thisTab = GetTagByName(EC_TAG_PREFS_DIRECTORIES)) != NULL) { if ((oneTag = thisTab->GetTagByName(EC_TAG_DIRECTORIES_INCOMING)) != NULL) { thePrefs::SetIncomingDir(CPath(oneTag->GetStringData())); } if ((oneTag = thisTab->GetTagByName(EC_TAG_DIRECTORIES_TEMP)) != NULL) { thePrefs::SetTempDir(CPath(oneTag->GetStringData())); } if ((oneTag = thisTab->GetTagByName(EC_TAG_DIRECTORIES_SHARED)) != NULL) { theApp->glob_prefs->shareddir_list.clear(); // ADUNANZA BEGIN // back #if 0 for (CECTag::const_iterator it = oneTag->begin(); it != oneTag->end(); it++) { #else for (CECTag::const_iterator it = oneTag->begin(); it != oneTag->end(); ++it) { #endif // ADUNANZA END theApp->glob_prefs->shareddir_list.push_back(CPath(it->GetStringData())); } } ApplyBoolean(use_tag, thisTab, thePrefs::SetShareHiddenFiles, EC_TAG_DIRECTORIES_SHARE_HIDDEN); } if ((thisTab = GetTagByName(EC_TAG_PREFS_STATISTICS)) != NULL) { //#warning TODO } if ((thisTab = GetTagByName(EC_TAG_PREFS_SECURITY)) != NULL) { if ((oneTag = thisTab->GetTagByName(EC_TAG_SECURITY_CAN_SEE_SHARES)) != NULL) { thePrefs::SetCanSeeShares(oneTag->GetInt()); } ApplyBoolean(use_tag, thisTab, thePrefs::SetFilteringClients, EC_TAG_IPFILTER_CLIENTS); ApplyBoolean(use_tag, thisTab, thePrefs::SetFilteringServers, EC_TAG_IPFILTER_SERVERS); ApplyBoolean(use_tag, thisTab, thePrefs::SetIPFilterAutoLoad, EC_TAG_IPFILTER_AUTO_UPDATE); if ((oneTag = thisTab->GetTagByName(EC_TAG_IPFILTER_UPDATE_URL)) != NULL) { thePrefs::SetIPFilterURL(oneTag->GetStringData()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_IPFILTER_LEVEL)) != NULL) { thePrefs::SetIPFilterLevel(oneTag->GetInt()); } ApplyBoolean(use_tag, thisTab, thePrefs::SetFilterLanIPs, EC_TAG_IPFILTER_FILTER_LAN); ApplyBoolean(use_tag, thisTab, thePrefs::SetSecureIdentEnabled, EC_TAG_SECURITY_USE_SECIDENT); ApplyBoolean(use_tag, thisTab, thePrefs::SetClientCryptLayerSupported, EC_TAG_SECURITY_OBFUSCATION_SUPPORTED); ApplyBoolean(use_tag, thisTab, thePrefs::SetClientCryptLayerRequested, EC_TAG_SECURITY_OBFUSCATION_REQUESTED); ApplyBoolean(use_tag, thisTab, thePrefs::SetClientCryptLayerRequired, EC_TAG_SECURITY_OBFUSCATION_REQUIRED); } if ((thisTab = GetTagByName(EC_TAG_PREFS_CORETWEAKS)) != NULL) { if ((oneTag = thisTab->GetTagByName(EC_TAG_CORETW_MAX_CONN_PER_FIVE)) != NULL) { thePrefs::SetMaxConsPerFive(oneTag->GetInt()); } ApplyBoolean(use_tag, thisTab, thePrefs::SetVerbose, EC_TAG_CORETW_VERBOSE); if ((oneTag = thisTab->GetTagByName(EC_TAG_CORETW_FILEBUFFER)) != NULL) { thePrefs::SetFileBufferSize(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_CORETW_UL_QUEUE)) != NULL) { thePrefs::SetQueueSize(oneTag->GetInt()); } if ((oneTag = thisTab->GetTagByName(EC_TAG_CORETW_SRV_KEEPALIVE_TIMEOUT)) != NULL) { thePrefs::SetServerKeepAliveTimeout(oneTag->GetInt()); } } if ((thisTab = GetTagByName(EC_TAG_PREFS_KADEMLIA)) != NULL) { if ((oneTag = thisTab->GetTagByName(EC_TAG_KADEMLIA_UPDATE_URL)) != NULL) { thePrefs::SetKadNodesUrl(oneTag->GetStringData()); } } theApp->glob_prefs->Save(); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ServerWnd.h0000644000175000017500000000360012050266603020406 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef SERVERWND_H #define SERVERWND_H #include // Needed for wxSplitter class CServerListCtrl; class CServerWnd : public wxPanel { public: CServerWnd(wxWindow* pParent, int splitter_pos); // standard constructor virtual ~CServerWnd(); void UpdateServerMetFromURL(const wxString& strURL); void UpdateED2KInfo(); void UpdateKadInfo(); CServerListCtrl* serverlistctrl; private: void OnSashPositionChanged(wxSplitterEvent& evt); void OnBnClickedAddserver(wxCommandEvent& evt); void OnBnClickedED2KDisconnect(wxCommandEvent& evt); void OnBnClickedUpdateservermetfromurl(wxCommandEvent& evt); void OnBnClickedResetLog(wxCommandEvent& evt); void OnBnClickedResetServerLog(wxCommandEvent& evt); DECLARE_EVENT_TABLE() }; #endif // SERVERWND_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/UploadQueue.h0000644000175000017500000001117112050266603020722 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef UPLOADQUEUE_H #define UPLOADQUEUE_H #include "ClientRef.h" // Needed for CClientRefList #include "MD4Hash.h" // Needed for CMD4Hash // Experimental extended upload queue population // // When a client is set up from scratch (no shares, all downloads empty) // it takes a while after completion of the first downloaded chunks until // uploads start. Problem is, upload queue is empty, because clients that // find nothing to download don't stay queued. // // Set this to 1 for faster finding of upload slots in this case. // aMule will then try to contact its sources for uploading if the // upload queue is empty. #define EXTENDED_UPLOADQUEUE 0 class CUpDownClient; class CKnownFile; class CUploadQueue { // ADUNANZA BEGIN friend class CAdunanzAUtilities; // per usare metodi privati in CAdunanzAUtilities // ADUNANZA END public: CUploadQueue(); ~CUploadQueue(); void Process(); void AddClientToQueue(CUpDownClient* client); bool RemoveFromUploadQueue(CUpDownClient* client); bool RemoveFromWaitingQueue(CUpDownClient* client); bool IsOnUploadQueue(const CUpDownClient* client) const; bool IsDownloading(const CUpDownClient* client) const; bool CheckForTimeOver(CUpDownClient* client); void ResortQueue() { SortGetBestClient(); } const CClientRefList& GetWaitingList() const { return m_waitinglist; } const CClientRefList& GetUploadingList() const { return m_uploadinglist; } // ADUNANZA BEGIN // mod Adu // Emanem inline uint32 GetAdunanzAUserCount() const {return m_AduClientsNum;} // mod Adu // lupz inline size_t GetAduUploadCount() const { return m_aduuploadinglist.size(); } inline size_t GetUploadCount() const { return m_uploadinglist.size(); } // fine mod Adu // ADUNANZA END CUpDownClient* GetWaitingClientByIP_UDP(uint32 dwIP, uint16 nUDPPort, bool bIgnorePortOnUniqueIP, bool* pbMultipleIPs = NULL); uint16 SuspendUpload(const CMD4Hash &, bool terminate); void ResumeUpload(const CMD4Hash &); CKnownFile* GetAllUploadingKnownFile() { return m_allUploadingKnownFile; } // ADUNANZA BEGIN // Stefano Picerno: metodi presi da emule void UpdateMaxClientScore(); inline uint32 GetMaxClientScore() const { return m_imaxscore; } // fine uint32 lastmax; // ADUNANZA END private: void RemoveFromWaitingQueue(CClientRefList::iterator pos); uint16 GetMaxSlots() const; void AddUpNextClient(CUpDownClient* directadd = 0); bool IsSuspended(const CMD4Hash& hash) { return suspendedUploadsSet.find(hash) != suspendedUploadsSet.end(); } void SortGetBestClient(CClientRef * bestClient = NULL); // ADUNANZA BEGIN // Inizio mod Adu inline uint32 GetAduMaxClientScore() const {return m_AduImaxscore;} inline uint32 GetExtMaxClientScore() const {return m_ExtImaxscore;} // fine mod Adu // ADUNANZA END CClientRefList m_waitinglist; CClientRefList m_uploadinglist; // ADUNANZA BEGIN // Stefano Picerno: preso da emule uint32 m_imaxscore; // Fine // Mod Adu uint32 m_AduImaxscore; uint32 m_ExtImaxscore; uint32 m_AduClientsNum; // fine mod Adu // Mod Adu // lupz CClientRefList m_aduuploadinglist; // Fine Mod Adu // ADUNANZA END #if EXTENDED_UPLOADQUEUE CClientRefList m_possiblyWaitingList; int PopulatePossiblyWaitingList(); #endif std::set suspendedUploadsSet; // set for suspended uploads uint32 m_nLastStartUpload; uint32 m_lastSort; bool lastupslotHighID; // VQB lowID alternation bool m_allowKicking; // This KnownFile collects all currently uploading clients for display in the upload list control CKnownFile * m_allUploadingKnownFile; }; #endif // UPLOADQUEUE_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/MuleUDPSocket.cpp0000644000175000017500000002472012050266603021454 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2005-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include #include "MuleUDPSocket.h" // Interface declarations #include #include "amule.h" // Needed for theApp #include "GetTickCount.h" // Needed for GetTickCount() #include "Packet.h" // Needed for CPacket #include // Needed for unicode2char #include "Proxy.h" // Needed for CDatagramSocketProxy #include "Logger.h" // Needed for AddDebugLogLine{C,N} #include "UploadBandwidthThrottler.h" #include "EncryptedDatagramSocket.h" #include "OtherFunctions.h" #include "kademlia/kademlia/Prefs.h" #include "ClientList.h" // ADUNANZA BEGIN // Backport #include "Preferences.h" // ADUNANZA END CMuleUDPSocket::CMuleUDPSocket(const wxString& name, int id, const amuleIPV4Address& address, const CProxyData* ProxyData) : m_busy(false), m_name(name), m_id(id), m_addr(address), m_proxy(ProxyData), m_socket(NULL) { } CMuleUDPSocket::~CMuleUDPSocket() { theApp->uploadBandwidthThrottler->RemoveFromAllQueues(this); wxMutexLocker lock(m_mutex); DestroySocket(); } void CMuleUDPSocket::CreateSocket() { wxCHECK_RET(!m_socket, wxT("Socket already opened.")); // ADUNANZA BEGIN #if 0 if (m_socket) DestroySocket(); m_socket = new CEncryptedDatagramSocket(m_addr, wxSOCKET_NOWAIT, m_proxy); #else try { if (m_socket) DestroySocket(); # if defined(__WXOSX_COCOA__) m_socket = new CEncryptedDatagramSocket(m_addr, (wxSOCKET_NOWAIT | wxSOCKET_REUSEADDR), m_proxy); # else m_socket = new CEncryptedDatagramSocket(m_addr, wxSOCKET_NOWAIT, m_proxy); # endif } catch (...) { wxString errMsg; errMsg << wxT("Exception while allocating Encrypted Datagram Socket for ") << m_name; DestroySocket(); return; } if (!m_socket) { AddDebugLogLineC(logMuleUDP, wxT("(1) Failed to create valid ") + m_name); return; } #endif // ADUNANZA END m_socket->SetClientData(this); m_socket->SetEventHandler(*theApp, m_id); m_socket->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_OUTPUT_FLAG | wxSOCKET_LOST_FLAG); m_socket->Notify(true); if (!m_socket->Ok()) { AddDebugLogLineC(logMuleUDP, wxT("Failed to create valid ") + m_name); DestroySocket(); } else { AddLogLineN(wxString(wxT("Created ")) << m_name << wxT(" at port ") << m_addr.Service()); } } void CMuleUDPSocket::DestroySocket() { if (m_socket) { AddDebugLogLineN(logMuleUDP, wxT("Shutting down ") + m_name); m_socket->SetNotify(0); m_socket->Notify(false); m_socket->Close(); m_socket->Destroy(); m_socket = NULL; } } void CMuleUDPSocket::Open() { wxMutexLocker lock(m_mutex); CreateSocket(); } void CMuleUDPSocket::Close() { wxMutexLocker lock(m_mutex); DestroySocket(); } void CMuleUDPSocket::OnSend(int errorCode) { if (errorCode) { return; } { wxMutexLocker lock(m_mutex); m_busy = false; if (m_queue.empty()) { return; } } theApp->uploadBandwidthThrottler->QueueForSendingControlPacket(this); } const unsigned UDP_BUFFER_SIZE = 16384; void CMuleUDPSocket::OnReceive(int errorCode) { AddDebugLogLineN(logMuleUDP, CFormat(wxT("Got UDP callback for read: Error %i Socket state %i")) % errorCode % Ok()); char buffer[UDP_BUFFER_SIZE]; wxIPV4address addr; unsigned length = 0; bool error = false; int lastError = 0; { wxMutexLocker lock(m_mutex); if (errorCode || (m_socket == NULL) || !m_socket->Ok()) { DestroySocket(); CreateSocket(); return; } length = m_socket->RecvFrom(addr, buffer, UDP_BUFFER_SIZE).LastCount(); error = m_socket->Error(); lastError = m_socket->LastError(); } const uint32 ip = StringIPtoUint32(addr.IPAddress()); const uint16 port = addr.Service(); if (error) { OnReceiveError(lastError, ip, port); } else if (length < 2) { // 2 bytes (protocol and opcode) is the smallets possible packet. AddDebugLogLineN(logMuleUDP, m_name + wxT(": Invalid Packet received")); } else if (!ip) { // wxFAIL; AddLogLineNS(wxT("Unknown ip receiving a UDP packet! Ignoring: '") + addr.IPAddress() + wxT("'")); } else if (!port) { // wxFAIL; AddLogLineNS(wxT("Unknown port receiving a UDP packet! Ignoring")); } else if (theApp->clientlist->IsBannedClient(ip)) { AddDebugLogLineN(logMuleUDP, m_name + wxT(": Dropped packet from banned IP ") + addr.IPAddress()); } else { AddDebugLogLineN(logMuleUDP, (m_name + wxT(": Packet received (")) << addr.IPAddress() << wxT(":") << port << wxT("): ") << length << wxT("b")); OnPacketReceived(ip, port, (byte*)buffer, length); } } void CMuleUDPSocket::OnReceiveError(int DEBUG_ONLY(errorCode), uint32 WXUNUSED(ip), uint16 WXUNUSED(port)) { AddDebugLogLineN(logMuleUDP, (m_name + wxT(": Error while reading: ")) << errorCode); } void CMuleUDPSocket::OnDisconnected(int WXUNUSED(errorCode)) { /* Due to bugs in wxWidgets, UDP sockets will sometimes * be closed. This is caused by the fact that wx treats * zero-length datagrams as EOF, which is only the case * when dealing with streaming sockets. * * This has been reported as patch #1885472: * http://sourceforge.net/tracker/index.php?func=detail&aid=1885472&group_id=9863&atid=309863 */ AddDebugLogLineC(logMuleUDP, m_name + wxT("Socket died, recreating.")); DestroySocket(); CreateSocket(); } void CMuleUDPSocket::SendPacket(CPacket* packet, uint32 IP, uint16 port, bool bEncrypt, const uint8* pachTargetClientHashORKadID, bool bKad, uint32 nReceiverVerifyKey) { wxCHECK_RET(packet, wxT("Invalid packet.")); /*wxCHECK_RET(port, wxT("Invalid port.")); wxCHECK_RET(IP, wxT("Invalid IP.")); */ if (!port || !IP) { return; } if (!Ok()) { AddDebugLogLineN(logMuleUDP, (m_name + wxT(": Packet discarded, socket not Ok (")) << Uint32_16toStringIP_Port(IP, port) << wxT("): ") << packet->GetPacketSize() << wxT("b")); delete packet; return; } AddDebugLogLineN(logMuleUDP, (m_name + wxT(": Packet queued (")) << Uint32_16toStringIP_Port(IP, port) << wxT("): ") << packet->GetPacketSize() << wxT("b")); UDPPack newpending; newpending.IP = IP; newpending.port = port; newpending.packet = packet; newpending.time = GetTickCount(); newpending.bEncrypt = bEncrypt && (pachTargetClientHashORKadID != NULL || (bKad && nReceiverVerifyKey != 0)); // ADUNANZA BEGIN // backport da aMule-SVN newpending.bEncrypt &= thePrefs::IsClientCryptLayerSupported(); // ADUNANZA END newpending.bKad = bKad; newpending.nReceiverVerifyKey = nReceiverVerifyKey; if (newpending.bEncrypt && pachTargetClientHashORKadID != NULL) { md4cpy(newpending.pachTargetClientHashORKadID, pachTargetClientHashORKadID); } else { md4clr(newpending.pachTargetClientHashORKadID); } { wxMutexLocker lock(m_mutex); m_queue.push_back(newpending); } theApp->uploadBandwidthThrottler->QueueForSendingControlPacket(this); } bool CMuleUDPSocket::Ok() { wxMutexLocker lock(m_mutex); return m_socket && m_socket->Ok(); } SocketSentBytes CMuleUDPSocket::SendControlData(uint32 maxNumberOfBytesToSend, uint32 WXUNUSED(minFragSize)) { wxMutexLocker lock(m_mutex); uint32 sentBytes = 0; while (!m_queue.empty() && !m_busy && (sentBytes < maxNumberOfBytesToSend)) { UDPPack item = m_queue.front(); CPacket* packet = item.packet; if (GetTickCount() - item.time < UDPMAXQUEUETIME) { uint32_t len = packet->GetPacketSize() + 2; uint8_t *sendbuffer = new uint8_t [len]; memcpy(sendbuffer, packet->GetUDPHeader(), 2); memcpy(sendbuffer + 2, packet->GetDataBuffer(), packet->GetPacketSize()); if (item.bEncrypt && (theApp->GetPublicIP() > 0 || item.bKad)) { len = CEncryptedDatagramSocket::EncryptSendClient(&sendbuffer, len, item.pachTargetClientHashORKadID, item.bKad, item.nReceiverVerifyKey, (item.bKad ? Kademlia::CPrefs::GetUDPVerifyKey(item.IP) : 0)); } if (SendTo(sendbuffer, len, item.IP, item.port)) { sentBytes += len; m_queue.pop_front(); delete packet; delete [] sendbuffer; } else { // TODO: Needs better error handling, see SentTo delete [] sendbuffer; break; } } else { m_queue.pop_front(); delete packet; } } if (!m_busy && !m_queue.empty()) { theApp->uploadBandwidthThrottler->QueueForSendingControlPacket(this); } SocketSentBytes returnVal = { true, 0, sentBytes }; return returnVal; } bool CMuleUDPSocket::SendTo(uint8_t *buffer, uint32_t length, uint32_t ip, uint16_t port) { // Just pretend that we sent the packet in order to avoid infinite loops. if (!(m_socket && m_socket->Ok())) { return true; } amuleIPV4Address addr; addr.Hostname(ip); addr.Service(port); // We better clear this flag here, status might have been changed // between the U.B.T. addition and the real sending happening later m_busy = false; bool sent = false; m_socket->SendTo(addr, buffer, length); if (m_socket->Error()) { wxSocketError error = m_socket->LastError(); if (error == wxSOCKET_WOULDBLOCK) { // Socket is busy and can't send this data right now, // so we just return not sent and set the wouldblock // flag so it gets resent when socket is ready. m_busy = true; } else { // An error which we can't handle happended, so we drop // the packet rather than risk entering an infinite loop. AddLogLineN((wxT("WARNING! ") + m_name + wxT(": Packet to ")) << Uint32_16toStringIP_Port(ip, port) << wxT(" discarded due to error (") << error << wxT(") while sending.")); sent = true; } } else { AddDebugLogLineN(logMuleUDP, (m_name + wxT(": Packet sent (")) << Uint32_16toStringIP_Port(ip, port) << wxT("): ") << length << wxT("b")); sent = true; } return sent; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ClientDetailDialog.h0000644000175000017500000000460612050266603022157 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef CLIENTDETAILDIALOG_H #define CLIENTDETAILDIALOG_H #include // Needed for wxDialog #include "ClientRef.h" // Needed for CClientRef /** * The ClientDetailDialog class is responsible for showing the info about a client. * * It shows all releavant data about the client: ip, port, hash, name, client * type and version, uploading/downloading data, credits, server... etc * * It's wxDialog, modal, with return value always '0'. * */ class CClientDetailDialog : public wxDialog { public: /** * Constructor. * * @param parent The window that created the dialog. * @param client The client whose details we're showing. */ CClientDetailDialog(wxWindow*parent, const CClientRef& client); /** * Destructor. * * Does nothing currently. */ virtual ~CClientDetailDialog(); protected: /** * Creates all the data objects in the dialog, filling them accordingly. * * Called when the dialog object is created. */ virtual bool OnInitDialog(); /** * Ends the dialog, calling EndModal with return value 0 * * @param evt The close event, unused right now */ void OnBnClose(wxCommandEvent& evt); DECLARE_EVENT_TABLE() private: //! The client whose data is drawn CClientRef m_client; }; #endif // CLIENTDETAILDIALOG_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/NetworkFunctions.h0000644000175000017500000001041112050266603022007 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef NETWORK_FUNCTIONS_H #define NETWORK_FUNCTIONS_H #include "Types.h" // Needed for uint16 and uint32 #include // Needed for CFormat #include // Network ip/host handling functions // These functions take IPs in anti-host order inline wxString Uint32toStringIP(uint32 ip) { return CFormat(wxT("%u.%u.%u.%u")) % (uint8)ip % (uint8)(ip>>8) % (uint8)(ip>>16) % (uint8)(ip>>24); } inline wxString Uint32_16toStringIP_Port(uint32 ip, uint16 port) { return CFormat(wxT("%u.%u.%u.%u:%u")) % (uint8)ip % (uint8)(ip>>8) % (uint8)(ip>>16) % (uint8)(ip>>24) % port; } // These functions take IPs in host-order inline wxString KadIPToString(uint32_t ip) { return CFormat(wxT("%u.%u.%u.%u")) % (uint8_t)(ip >> 24) % (uint8_t)(ip >> 16) % (uint8_t)(ip >> 8) % (uint8_t)ip; } inline wxString KadIPPortToString(uint32_t ip, uint16_t port) { return CFormat(wxT("%u.%u.%u.%u:%u")) % (uint8_t)(ip >> 24) % (uint8_t)(ip >> 16) % (uint8_t)(ip >> 8) % (uint8_t)ip % port; } /** * Parses a String-IP and saves the IP in the referenced variable. * * @param strIP A string-ip in the format "a.b.c.d". * @param Ip The value to save the result in. * @return True if the string was parsed, false otherwise. * * When parsing the IP address, whitespace before or after the * ip-address is ignored and the resulting IP is saved in * anti-host order. * * The reason for the existance of this function is the fact that * the standard inet_aton function treats numbers with 0 prefixed * as octals, which is desirable. * * Note: The reference value will not be changed unless the string * contains a valid IP adress. */ bool StringIPtoUint32(const wxString &strIP, uint32& Ip); /** * Parses a String-IP and returns the IP or 0 if it was invalid. * * @param strIP A string-ip in the format "a.b.c.d". * @return The resulting IP-address or zero if invalid (or 0.0.0.0). * * The IP will be saved in anti-host order. */ inline uint32 StringIPtoUint32(const wxString &strIP) { uint32 ip = 0; StringIPtoUint32( strIP, ip ); return ip; } /** * Parses a String-IHost and returns the IP or 0 if it was invalid. * * @param Host A string with the Host to convert. * @return The resulting IP-address or zero if invalid (or 0.0.0.0). * * The IP will be saved in anti-host order. */ uint32 StringHosttoUint32(const wxString &Host); /** * Checks for invalid IP-values. * * @param IP the IP-address to check. * @param filterLAN Specifies if LAN IP-ranges should be filtered. * @return True if it was valid, false otherwise. * * Note: IP must be in anti-host order (BE on LE platform, LE on BE platform). */ bool IsGoodIP( uint32 IP, bool filterLAN ); inline bool IsGoodIPPort(uint32 nIP, uint16 nPort) { return IsGoodIP(nIP, true) && nPort!=0; } #define HIGHEST_LOWID_ED2K_KAD 16777216 inline bool IsLowID(uint32 id) { return (id < HIGHEST_LOWID_ED2K_KAD); } /** * Checks for LAN IPs. * * @param ip The IP-address to check. * @return True if it was a LAN IP, false otherwise. * * @note IP must be in anti-host order. */ bool IsLanIP(uint32_t ip) throw(); #endif // NETWORK_FUNCTIONS_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/KADUSettings.h0000644000175000017500000002056312050266603020743 0ustar l3onl3on// // This file is part of the aMule AdunanzA Project (mod of official aMule) // // Copyright (c) 2003-2008 aMule AdunanzA Team ( http://www.adunanza.net ) // // Any parts of this program derived from the xMule, lMule, eMule or aMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #if !defined(_KADUSETTINGS_H) #define _KADUSETTINGS_H #include "Types.h" class CRemoteSettings; class CamuleApp; class CKADUSettings /*! * brief CKADUSettings class used to manage KADU constant values */ { friend class CRemoteSettings; friend class CamuleAppCommon /*CamuleApp*/ ; /* * OCCHIO: dichiarare statc const valori di default e usarli per il costruttore di default! * * Se lo scopo della CRemoteSettings e' solo scaricare da remoto il file e scivere alla fine * i valori nel file di testo allora mi sa che NON serve avere "fissa" una CRemoteSettings * (propongo la sua eliminazione, almeno x quello che riguarda la gestione con memoria dinamica) * * I valori di KADU in realta' servono: * - nell'applicazione principale (ereditata da CamuleApp) * - nei thread vari * * Verificare se non sia meglio usare una GLOBALE CKADUSettings (e, ovviamente, arbitrare gli accessi a questa classe) * * DUE POSSIBILITA': * 1) una copia all'interno di camuleApp con accesso arbitrato SOLO nei metodi che sincronizzano con il rmoto * 2) una sola copia (la globale) con semaforo per regolare OGNI accesso (mi sa pero' che questo non e'eff.) * * OCCHIO: sarebbe bello un meccanismo di sincronizzazione che facesse si' che NON PARTONO i vari thread fino a * che non ho terminato di leggere il file / ho aggiornato la CKADUSettings * */ private: long m_kadRepublishTimeK; long m_kadRepublishTimeS; long m_kadRepublishTimeN; long m_kadIndexLifeK; // Mr Hyde per allineamento a eMule 3.15b74 long m_kadIndexLifeS; // Mr Hyde per allineamento a eMule 3.15b74 uint32_t m_kadTotalStoreKey; // Mr Hyde: cambiato da long a uint32_t in accordo con kademlia.h uint32_t m_kadTotalStoreSrc; // Mr Hyde: cambiato da long a uint32_t in accordo con kademlia.h uint32_t m_kadTotalStoreNotes; // Mr Hyde: cambiato da long a uint32_t in accordo con kademlia.h long m_kadTotalSearchFile; long m_kadMaxSrcFile; long m_kadMaxNotFile; double m_kadFreshGuess_Tol; double m_kadFreshGuess_Weight; long m_kadFreshGuess_NoNorm; long m_kadFreshGuess_LowNorm; long m_kadFindValue; long m_kadStore; long m_kadFindNode; long m_kadReaskTime; long m_kadPubTime; long m_kadReaskIncs; long m_mVer; unsigned char m_kadOpcode; unsigned char m_kadZOpcode; public: void assign( long kadRepublishTimeK, long kadRepublishTimeS, long kadRepublishTimeN, long kadIndexLifeK, long kadIndexLifeS, uint32_t kadTotalStoreKey, uint32_t kadTotalStoreSrc, uint32_t kadTotalStoreNotes, long kadTotalSearchFile, long kadMaxSrcFile, long kadMaxNotFile, double kadFreshGuess_Tol, double kadFreshGuess_Weight, long kadFreshGuess_NoNorm, long kadFreshGuess_LowNorm, long kadFindValue, long kadStore, long kadFindNode, long kadReaskTime, long kadPubTime, long kadReaskIncs, long mVer, unsigned char kadOpcode, unsigned char kadZOpcode ); CKADUSettings(); // questo mi sa che lo tolgo... CKADUSettings( long kadRepublishTimeK, long kadRepublishTimeS, long kadRepublishTimeN, long kadIndexLifeK, long kadIndexLifeS, uint32_t kadTotalStoreKey, uint32_t kadTotalStoreSrc, uint32_t kadTotalStoreNotes, long kadTotalSearchFile, long kadMaxSrcFile, long kadMaxNotFile, double kadFreshGuess_Tol, double kadFreshGuess_Weight, long kadFreshGuess_NoNorm, long kadFreshGuess_LowNorm, long kadFindValue, long kadStore, long kadFindNode, long kadReaskTime, long kadPubTime, long kadReaskIncs, long mVer, unsigned char kadOpcode, unsigned char kadZOpcode ) { assign(kadRepublishTimeK, kadRepublishTimeS, kadRepublishTimeN, kadIndexLifeK, kadIndexLifeS, kadTotalStoreKey, kadTotalStoreSrc, kadTotalStoreNotes, kadTotalSearchFile, kadMaxSrcFile, kadMaxNotFile, kadFreshGuess_Tol, kadFreshGuess_Weight, kadFreshGuess_NoNorm, kadFreshGuess_LowNorm, kadFindValue, kadStore, kadFindNode, kadReaskTime, kadPubTime, kadReaskIncs, mVer, kadOpcode, kadZOpcode ); } virtual ~CKADUSettings() {}; void assign(const CKADUSettings& k) { assign(k.m_kadRepublishTimeK, k.m_kadRepublishTimeS, k.m_kadRepublishTimeN, k.m_kadIndexLifeK, k.m_kadIndexLifeS, k.m_kadTotalStoreKey, k.m_kadTotalStoreSrc, k.m_kadTotalStoreNotes, k.m_kadTotalSearchFile, k.m_kadMaxSrcFile, k.m_kadMaxNotFile, k.m_kadFreshGuess_Tol, k.m_kadFreshGuess_Weight, k.m_kadFreshGuess_NoNorm, k.m_kadFreshGuess_LowNorm, k.m_kadFindValue, k.m_kadStore, k.m_kadFindNode, k.m_kadReaskTime, k.m_kadPubTime, k.m_kadReaskIncs, k.m_mVer, k.m_kadOpcode, k.m_kadZOpcode ); } CKADUSettings(const CKADUSettings& k) {assign(k);} CKADUSettings operator=(const CKADUSettings& k) { if (this != &k) assign(k); return *this; } inline long get_kadRepublishTimeK() const {return m_kadRepublishTimeK;} inline long get_kadRepublishTimeS() const {return m_kadRepublishTimeS;} inline long get_kadRepublishTimeN() const {return m_kadRepublishTimeN;} inline long get_kadIndexLifeK() const {return m_kadIndexLifeK;} inline long get_kadIndexLifeS() const {return m_kadIndexLifeS;} inline uint32_t get_kadTotalStoreKey() const {return m_kadTotalStoreKey;} inline uint32_t get_kadTotalStoreSrc() const {return m_kadTotalStoreSrc;} inline uint32_t get_kadTotalStoreNotes() const {return m_kadTotalStoreNotes;} inline long get_kadTotalSearchFile() const {return m_kadTotalSearchFile;} inline long get_kadMaxSrcFile() const {return m_kadMaxSrcFile;} inline long get_kadMaxNotFile() const {return m_kadMaxNotFile;} inline double get_kadFreshGuess_Tol() const {return m_kadFreshGuess_Tol;} inline double get_kadFreshGuess_Weight() const {return m_kadFreshGuess_Weight;} inline long get_kadFreshGuess_NoNorm() const {return m_kadFreshGuess_NoNorm;} inline long get_kadFreshGuess_LowNorm() const {return m_kadFreshGuess_LowNorm;} inline long get_kadFindValue() const {return m_kadFindValue;} inline long get_kadStore() const {return m_kadStore;} inline long get_kadFindNode() const {return m_kadFindNode;} inline long get_kadReaskTime() const {return m_kadReaskTime;} inline long get_kadPubTime() const {return m_kadPubTime;} inline long get_kadReaskIncs() const {return m_kadReaskIncs;} inline long get_mVer() const {return m_mVer;} inline unsigned char get_kadOpcode() const {return m_kadOpcode;} inline unsigned char get_kadZOpcode() const {return m_kadZOpcode;} }; #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/RLE.cpp0000644000175000017500000001552212050266603017452 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "RLE.h" #include "ArchSpecific.h" #include "ScopedPtr.h" #include // Needed for CECTag /* * RLE encoder implementation. This is RLE implementation for very specific * purpose: encode DIFFERENCE between subsequent states of status bar. * * This difference is calculated by xor-ing with previous data * * We can't use implementation with "control char" since this encoder * will process binary data - not ascii (or unicode) strings */ void RLE_Data::setup(int len, bool use_diff, uint8 * content) { m_len = len; m_use_diff = use_diff; if (m_len) { m_buff = new uint8[m_len]; if (content) { memcpy(m_buff, content, m_len); } else { memset(m_buff, 0, m_len); } // } else { m_buff = 0; } } RLE_Data &RLE_Data::operator=(const RLE_Data &obj) { if (this == &obj) return *this; delete [] m_buff; setup(obj.m_len, obj.m_use_diff, obj.m_buff); return *this; } RLE_Data::~RLE_Data() { delete [] m_buff; } void RLE_Data::ResetEncoder() { delete m_buff; m_len = 0; m_buff = 0; } bool RLE_Data::Realloc(int size) { if ( size == m_len ) { return false; } if (size == 0) { delete [] m_buff; m_buff = 0; m_len = 0; return true; } uint8 *buff = new uint8[size]; if (m_len == 0) { memset(buff, 0, size); } else if ( size > m_len ) { memset(buff + m_len, 0, size - m_len); memcpy(buff, m_buff, m_len); } else { memcpy(buff, m_buff, size); } delete [] m_buff; m_buff = buff; m_len = size; return true; } const uint8 *RLE_Data::Decode(const uint8 *buff, int len) { uint8 * decBuf = m_len ? new uint8[m_len] : 0; // If data exceeds the buffer, switch to counting only. // Then resize and make a second pass. for (bool overrun = true; overrun;) { overrun = false; int j = 0; for (int i = 0; i < len;) { if (i < len - 2 && buff[i+1] == buff[i]) { // This is a sequence. uint8 seqLen = buff[i + 2]; if (j + seqLen <= m_len) { memset(decBuf + j, buff[i], seqLen); } j += seqLen; i += 3; } else { // This is a single byte. if (j < m_len) { decBuf[j] = buff[i]; } j++; i++; } } if (j != m_len) { overrun = j > m_len; // overrun, make a second pass Realloc(j); // size has changed, adjust if (overrun) { delete[] decBuf; decBuf = new uint8[m_len]; } } } // // Recreate data from diff // if ( m_use_diff ) { for (int k = 0; k < m_len; k++) { m_buff[k] ^= decBuf[k]; } } else { memcpy(m_buff, decBuf, m_len); } delete[] decBuf; return m_buff; } const uint8 * RLE_Data::Encode(const uint8 *data, int inlen, int &outlen, bool &changed) { changed = Realloc(inlen); // adjust size if necessary if (m_len == 0) { outlen = 0; return NULL; } // // calculate difference from prev // if ( m_use_diff ) { for (int i = 0; i < m_len; i++) { m_buff[i] ^= data[i]; if (m_buff[i]) { changed = true; } } } else { memcpy(m_buff, data, m_len); changed = true; } // // now RLE // // In worst case 2-byte sequence is encoded as 3. So, data can grow by 50%. uint8 * enc_buff = new uint8[m_len * 3/2 + 1]; int i = 0, j = 0; while ( i != m_len ) { uint8 curr_val = m_buff[i]; int seq_start = i; while ( (i != m_len) && (curr_val == m_buff[i]) && ((i - seq_start) < 0xff)) { i++; } if (i - seq_start > 1) { // if there's 2 or more equal vals - put it twice in stream enc_buff[j++] = curr_val; enc_buff[j++] = curr_val; enc_buff[j++] = i - seq_start; } else { // single value - put it as is enc_buff[j++] = curr_val; } } outlen = j; // // If using differential encoder, remember current data for // later use if ( m_use_diff ) { memcpy(m_buff, data, m_len); } return enc_buff; } const uint8 * RLE_Data::Encode(const ArrayOfUInts16 &data, int &outlen, bool &changed) { // To encode, first copy the UInts16 to a uint8 array // and limit them to 0xff. // The encoded size is the size of data. int size = (int) data.size(); if (size == 0) { return Encode(0, 0, outlen, changed); } CScopedArray buf(size); uint8 * bufPtr = buf.get(); for (int i = 0; i < size; i++) { uint16 ui = data[i]; bufPtr[i] = (ui > 0xff) ? 0xff : (uint8) ui; } return Encode(bufPtr, size, outlen, changed); } const uint8 * RLE_Data::Encode(const ArrayOfUInts64 &data, int &outlen, bool &changed) { // uint64 is copied to a uint8 buffer // first all low bytes, then all second low bytes and so on // so inital RLE will benefit from high bytes being equal (zero) // 0x000003045A6A7A8A, 0x000003045B6B7B8B // 8A8B7A7B6A6B5A5B0404030300000000 int size = (int) data.size(); if (size == 0) { return Encode(0, 0, outlen, changed); } CScopedArray buf(size * 8); uint8 * bufPtr = buf.get(); for (int i = 0; i < size; i++) { uint64 u = data[i]; for (int j = 0; j < 8; j++) { bufPtr[i + j * size] = u & 0xff; u >>= 8; } } return Encode(bufPtr, size * 8, outlen, changed); } void RLE_Data::Decode(const uint8 *data, int len, ArrayOfUInts64 &outdata) { const uint8 * decoded = Decode(data, len); wxASSERT(m_len % 8 == 0); int size = m_len / 8; outdata.resize(size); for (int i = 0; i < size; i++) { uint64 u = 0; for (int j = 8; j--;) { u <<= 8; u |= decoded[i + j * size]; } outdata[i] = u; } } void PartFileEncoderData::DecodeParts(const CECTag * tag, ArrayOfUInts16 &outdata) { const uint8 * buf = m_part_status.Decode((uint8 *)tag->GetTagData(), tag->GetTagDataLen()); int size = m_part_status.Size(); outdata.resize(size); for (int i = 0; i < size; i++) { outdata[i] = buf[i]; } } void PartFileEncoderData::DecodeGaps(const CECTag * tag, ArrayOfUInts64 &outdata) { m_gap_status.Decode((uint8 *)tag->GetTagData(), tag->GetTagDataLen(), outdata); } void PartFileEncoderData::DecodeReqs(const CECTag * tag, ArrayOfUInts64 &outdata) { m_req_status.Decode((uint8 *)tag->GetTagData(), tag->GetTagDataLen(), outdata); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/StatisticsDlg.cpp0000644000175000017500000002576612050266603021624 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include // Needed for std::ceil #include "ColorFrameCtrl.h" // Needed for CColorFrameCtrl #include "OtherFunctions.h" // Needed for CastChild() #include "OScopeCtrl.h" // Needed for COScopeCtrl #include "Preferences.h" // Needed for thePrefs #include "muuli_wdr.h" // Needed for statsDlg() #include "StatisticsDlg.h" // Interface declarations #include "Statistics.h" class CTreeItemData : public wxTreeItemData { public: explicit CTreeItemData(uint32_t uniqueid) : m_uniqueid(uniqueid) {} uint32_t GetUniqueId() const throw() { return m_uniqueid; } void SetUniqueId(uint32_t val) throw() { m_uniqueid = val; } private: uint32_t m_uniqueid; }; // CStatisticsDlg panel const wxColour& CStatisticsDlg::getColors(unsigned num) { // ADUNANZA BEGIN #if 0 wxCHECK(num < 15, *wxBLACK); #else // avendo aggiunto un dato per AdunanzA posso arrivare fino a 16! (valore di cntStatColors) wxCHECK(num < (15+1), *wxBLACK); #endif // ADUNANZA END return acrStat[num]; } CStatisticsDlg::CStatisticsDlg(wxWindow* pParent, CStatistics* stats) : wxPanel(pParent, -1) { wxSizer* content=statsDlg(this,TRUE); content->Show(this,TRUE); pscopeDL = CastChild( wxT("dloadScope"), COScopeCtrl ); pscopeDL->graph_type = GRAPH_DOWN; pscopeUL = CastChild( wxT("uloadScope"), COScopeCtrl ); pscopeUL->graph_type = GRAPH_UP; pscopeConn = CastChild( wxT("otherScope"), COScopeCtrl ); pscopeConn->graph_type = GRAPH_CONN; stattree = CastChild( wxT("statTree"), wxTreeCtrl ); m_stats = stats; } CStatisticsDlg::~CStatisticsDlg() { } void CStatisticsDlg::Init() { InitGraphs(); InitTree(); } void CStatisticsDlg::InitGraphs() { // called after preferences get initialised for (int index=0; index<=10; ++index) { ApplyStatsColor(index); } pscopeDL->SetRanges(0.0, (float)(thePrefs::GetMaxGraphDownloadRate()+4)); pscopeDL->SetYUnits(_("kB/s")); pscopeUL->SetRanges(0.0, (float)(thePrefs::GetMaxGraphUploadRate()+4)); pscopeUL->SetYUnits(_("kB/s")); pscopeConn->SetRanges(0.0, (float)(thePrefs::GetStatsMax())); pscopeConn->SetYUnits(wxEmptyString); SetUpdatePeriod(thePrefs::GetTrafficOMeterInterval()); } // this array is now used to store the current color settings and to define the defaults wxColour CStatisticsDlg::acrStat[cntStatColors] = { wxColour(0,0,64), wxColour(192,192,255), wxColour(128, 255, 128), wxColour(0, 210, 0), wxColour(0, 128, 0), wxColour(255, 128, 128), wxColour(200, 0, 0), wxColour(140, 0, 0), wxColour(150, 150, 255), wxColour(192, 0, 192), wxColour(255, 255, 128), wxColour(0, 0, 0), wxColour(128, 255, 128), wxColour(0, 210, 0), wxColour(0, 128, 0) // ADUNANZA (Mr Hyde patch) BEGIN , wxColour(255, 128, 128) // ADUNANZA (Mr Hyde patch) END }; void CStatisticsDlg::ApplyStatsColor(int index) { static char aTrend[] = { 0,0, 2, 1, 0, 2, 1, 0, 1, 2, 0 }; static int aRes[] = { 0,0, IDC_C0,IDC_C0_3,IDC_C0_2, IDC_C1,IDC_C1_3,IDC_C1_2, IDC_S0,IDC_S3,IDC_S1 }; static COScopeCtrl** apscope[] = { NULL, NULL, &pscopeDL,&pscopeDL,&pscopeDL, &pscopeUL,&pscopeUL,&pscopeUL, &pscopeConn,&pscopeConn,&pscopeConn }; const wxColour& cr = acrStat[index]; int iRes = aRes[index]; int iTrend = aTrend[index]; COScopeCtrl** ppscope = apscope[index]; CColorFrameCtrl* ctrl; switch (index) { case 0: pscopeDL->SetBackgroundColor(cr); pscopeUL->SetBackgroundColor(cr); pscopeConn->SetBackgroundColor(cr); break; case 1: pscopeDL->SetGridColor(cr); pscopeUL->SetGridColor(cr); pscopeConn->SetGridColor(cr); break; case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: (*ppscope)->SetPlotColor(cr, iTrend); if ((ctrl = CastChild(iRes, CColorFrameCtrl)) == NULL) { throw wxString(CFormat(wxT("CStatisticsDlg::ApplyStatsColor: control missing (%d)\n")) % iRes); } ctrl->SetBackgroundBrushColour(cr); ctrl->SetFrameBrushColour(*wxBLACK); break; default: break; // ignore unknown index, like SysTray speedbar color } } void CStatisticsDlg::UpdateStatGraphs(const uint32 peakconnections, const GraphUpdateInfo& update) { std::vector v1(3); v1[0] = const_cast(&update.downloads[0]); v1[1] = const_cast(&update.downloads[1]); v1[2] = const_cast(&update.downloads[2]); const std::vector &apfDown(v1); std::vector v2(3); v2[0] = const_cast(&update.uploads[0]); v2[1] = const_cast(&update.uploads[1]); v2[2] = const_cast(&update.uploads[2]); const std::vector &apfUp(v2); std::vector v3(3); v3[0] = const_cast(&update.connections[0]); v3[1] = const_cast(&update.connections[1]); v3[2] = const_cast(&update.connections[2]); const std::vector &apfConn(v3); if (!IsShownOnScreen()) { pscopeDL->DelayPoints(); pscopeUL->DelayPoints(); pscopeConn->DelayPoints(); } static unsigned nScalePrev=1; unsigned nScale = (unsigned)std::ceil((float)peakconnections / pscopeConn->GetUpperLimit()); if (nScale != nScalePrev) { nScalePrev = nScale; wxStaticText* label = CastChild( ID_ACTIVEC, wxStaticText ); label->SetLabel(CFormat(_("Active connections (1:%u)")) % nScale); label->GetParent()->Layout(); pscopeConn->SetRange(0.0, (float)nScale*pscopeConn->GetUpperLimit(), 1); } if (!IsShownOnScreen()) { return; } pscopeDL->AppendPoints(update.timestamp, apfDown); pscopeUL->AppendPoints(update.timestamp, apfUp); pscopeConn->AppendPoints(update.timestamp, apfConn); } void CStatisticsDlg::SetUpdatePeriod(int step) { // this gets called after the value in Preferences/Statistics/Update delay has been changed if (step == 0) { pscopeDL->Stop(); pscopeUL->Stop(); pscopeConn->Stop(); } else { pscopeDL->Reset(step); pscopeUL->Reset(step); pscopeConn->Reset(step); } } void CStatisticsDlg::ResetAveragingTime() { // this gets called after the value in Preferences/Statistics/time for running avg has been changed pscopeDL->InvalidateGraph(); pscopeUL->InvalidateGraph(); } void CStatisticsDlg::SetARange(bool SetDownload,int maxValue) { if ( SetDownload ) { pscopeDL->SetRanges( 0, maxValue + 4 ); } else { pscopeUL->SetRanges( 0, maxValue + 4 ); } } void CStatisticsDlg::InitTree() { #ifndef CLIENT_GUI wxTreeItemId root = #endif stattree->AddRoot(theStats::GetTreeRoot()->GetDisplayString()); ShowStatistics(true); #ifndef CLIENT_GUI // Expand root stattree->Expand(root); // Expand main items wxTreeItemIdValue cookie; wxTreeItemId expand_it = stattree->GetFirstChild(root,cookie); while(expand_it.IsOk()) { stattree->Expand(expand_it); // Next on this level expand_it = stattree->GetNextSibling(expand_it); } #endif } void CStatisticsDlg::GetExpandedNodes(NodeIdSet& nodeset, const wxTreeItemId& root) { wxTreeItemIdValue cookie; wxTreeItemId temp_it = stattree->GetFirstChild(root,cookie); while (temp_it.IsOk()) { if (stattree->IsExpanded(temp_it)) { nodeset.insert(dynamic_cast(stattree->GetItemData(temp_it))->GetUniqueId()); } if (stattree->ItemHasChildren(temp_it)) { GetExpandedNodes(nodeset, temp_it); } temp_it = stattree->GetNextSibling(temp_it); } } void CStatisticsDlg::ShowStatistics(bool init) { NodeIdSet ExpandedNodes; // If it's not the first initialization of the tree, i.e. application startup if (!init) { GetExpandedNodes(ExpandedNodes, stattree->GetRootItem()); // Update sorting / get tree via EC m_stats->UpdateStatsTree(); } CStatTreeItemBase* treeRoot = theStats::GetTreeRoot(); wxTreeItemId root = stattree->GetRootItem(); FillTree(treeRoot, root, ExpandedNodes); #ifdef CLIENT_GUI if (!init) { static bool firstUpdate = true; if (firstUpdate) { // Expand root root = stattree->GetRootItem(); stattree->Expand(root); // Expand main items wxTreeItemIdValue cookie; wxTreeItemId expand_it = stattree->GetFirstChild(root,cookie); while(expand_it.IsOk()) { stattree->Expand(expand_it); // Next on this level expand_it = stattree->GetNextSibling(expand_it); } firstUpdate = false; } } #endif } #ifdef CLIENT_GUI void CStatisticsDlg::RebuildStatTreeRemote(const CECTag * tag) { m_stats->RebuildStatTreeRemote(tag); } #endif void CStatisticsDlg::FillTree(CStatTreeItemBase* statssubtree, wxTreeItemId& StatsGUITree, const NodeIdSet& expandednodes) { wxMutexLocker lock(statssubtree->GetLock()); #ifndef CLIENT_GUI StatTreeItemIterator temp_it = statssubtree->GetFirstVisibleChild(thePrefs::GetMaxClientVersions()); #else StatTreeItemIterator temp_it = statssubtree->GetFirstVisibleChild(); #endif wxTreeItemIdValue cookie; wxTreeItemId temp_GUI_it = stattree->GetFirstChild(StatsGUITree,cookie); while (!statssubtree->IsAtEndOfList(temp_it)) { wxTreeItemId temp_item; if (temp_GUI_it.IsOk()) { // There's already a child there, update it. stattree->SetItemText(temp_GUI_it, (*temp_it)->GetDisplayString()); temp_item = temp_GUI_it; uint32_t uid = (*temp_it)->GetUniqueId(); dynamic_cast(stattree->GetItemData(temp_GUI_it))->SetUniqueId(uid); if (expandednodes.find(uid) != expandednodes.end()) { stattree->Expand(temp_GUI_it); } else { stattree->Collapse(temp_GUI_it); } temp_GUI_it = stattree->GetNextSibling(temp_GUI_it); } else { // No more child on GUI, add them. temp_item = stattree->AppendItem(StatsGUITree,(*temp_it)->GetDisplayString()); stattree->SetItemData(temp_item, new CTreeItemData((*temp_it)->GetUniqueId())); } // Has childs? if ((*temp_it)->HasVisibleChildren()) { FillTree((*temp_it), temp_item, expandednodes); } else { stattree->DeleteChildren(temp_item); } statssubtree->GetNextVisibleChild(temp_it); } // What if GUI has more items than tree? // Delete the extra items. while (temp_GUI_it.IsOk()) { wxTreeItemId backup_node = stattree->GetNextSibling(temp_GUI_it); stattree->DeleteChildren(temp_GUI_it); stattree->Delete(temp_GUI_it); temp_GUI_it = backup_node; } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ChatWnd.h0000644000175000017500000000565412050266603020032 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef CHATWND_H #define CHATWND_H #include // Needed for wxPanel #include // Needed for wxNotebookEvent #include "Types.h" class CFriend; class CChatSelector; class CFriendListCtrl; class CMD4Hash; class CChatWnd : public wxPanel { public: CChatWnd(wxWindow* pParent = NULL); ~CChatWnd() {}; void StartSession(CFriend* friend_client, bool setfocus = true); void UpdateFriend(CFriend* toupdate); void RemoveFriend(CFriend* todel); void ProcessMessage(uint64 sender, const wxString& message); void ConnectionResult(bool success, const wxString& message, uint64 id); void SendMessage(const wxString& message, const wxString& client_name = wxEmptyString, uint64 to_id = 0); bool IsIdValid(uint64 id); void ShowCaptchaResult(uint64 id, bool ok); void EndSession(uint64 id); protected: /** * Event-handler for displaying the chat-popup menu. */ void OnNMRclickChatTab(wxMouseEvent& evt); /** * Event-handler fo the Close item on the popup-menu. */ void OnPopupClose(wxCommandEvent& evt); /** * Event-handler fo the CloseAll item on the popup-menu. */ void OnPopupCloseAll(wxCommandEvent& evt); /** * Event-handler fo the CloseOthers item on the popup-menu. */ void OnPopupCloseOthers(wxCommandEvent& evt); /** * Event-handler fo the AddFriend item on the popup-menu. */ void OnAddFriend(wxCommandEvent& evt); void OnBnClickedCsend(wxCommandEvent& evt); void OnBnClickedCclose(wxCommandEvent& evt); void OnAllPagesClosed(wxNotebookEvent& evt); void CheckNewButtonsState(); DECLARE_EVENT_TABLE() //! Variable used to ensure that the popup menu doesn't get displayed twice. wxMenu* m_menu; //! Pointer to the control serving as the friend list CFriendListCtrl* friendlistctrl; //! Pointer to the chat tabs. CChatSelector* chatselector; }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ServerConnect.cpp0000644000175000017500000004504512050266603021613 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ServerConnect.h" // Interface declarations. #include #include // Sometimes we reply with TCP packets. #include #include #include #include "SearchList.h" // Needed for CSearchList #include "ServerUDPSocket.h" // Needed for CServerUDPSocket #include "SharedFileList.h" // Needed for CSharedFileList #include "Packet.h" // Needed for CTag #include "MemFile.h" // Needed for CMemFile #include "ServerSocket.h" // Needed for CServerSocket #include "ListenSocket.h" // Needed for CListenSocket #include "Server.h" // Needed for CServer #include "amule.h" // Needed for theApp #include "ServerList.h" // Needed for CServerList #include "Preferences.h" // Needed for CPreferences #include "Statistics.h" // Needed for theStats #include "Logger.h" #include "GuiEvents.h" // Needed for Notify_* #include "IPFilter.h" // Needed for theApp->ipfilter->IsReady() #include //#define DEBUG_CLIENT_PROTOCOL void CServerConnect::TryAnotherConnectionrequest() { if (m_recurseTryAnotherConnectionrequest) { return; } if ( connectionattemps.size() < (unsigned)(( thePrefs::IsSafeServerConnectEnabled()) ? 1 : 2) ) { CServer* next_server = used_list->GetNextServer(m_bTryObfuscated); if ( thePrefs::AutoConnectStaticOnly() ) { while (next_server && !next_server->IsStaticMember()) { next_server = used_list->GetNextServer(m_bTryObfuscated); } } if (!next_server) { if ( connectionattemps.empty() ) { m_recurseTryAnotherConnectionrequest = true; if (m_bTryObfuscated && !thePrefs::IsClientCryptLayerRequired()){ AddLogLineC(_("Failed to connect to all obfuscated servers listed. Making another pass without obfuscation.")); // try all servers on the non-obfuscated port next m_bTryObfuscated = false; ConnectToAnyServer( false, true); } else { AddLogLineC(_("Failed to connect to all servers listed. Making another pass.")); ConnectToAnyServer( false ); } m_recurseTryAnotherConnectionrequest = false; } return; } ConnectToServer(next_server, true, !m_bTryObfuscated); } } void CServerConnect::ConnectToAnyServer(bool prioSort, bool bNoCrypt) { if (!thePrefs::GetNetworkED2K()){ AddLogLineC(_("eD2k network disabled on preferences, not connecting.")); return; } if (!theApp->ipfilter->IsReady()) { // do it later when ipfilter is up theApp->ipfilter->ConnectToAnyServerWhenReady(); return; } StopConnectionTry(); Disconnect(); connecting = true; singleconnecting = false; m_bTryObfuscated = thePrefs::IsServerCryptLayerTCPRequested() && !bNoCrypt; // Barry - Only auto-connect to static server option if (thePrefs::AutoConnectStaticOnly()) { bool anystatic = false; CServer *next_server; used_list->ResetServerPos(); while ((next_server = used_list->GetNextServer(false)) != NULL) { if (next_server->IsStaticMember()) { anystatic = true; break; } } if (!anystatic) { connecting = false; AddLogLineC(_("No valid servers to which to connect found in server list")); return; } } if ( thePrefs::Score() && prioSort ) { used_list->Sort(); } used_list->ResetServerPos(); if (used_list->GetServerCount()==0 ) { connecting = false; AddLogLineC(_("No valid servers to which to connect found in server list")); return; } theApp->listensocket->Process(); TryAnotherConnectionrequest(); } void CServerConnect::ConnectToServer(CServer* server, bool multiconnect, bool bNoCrypt) { if (!thePrefs::GetNetworkED2K()){ AddLogLineC(_("eD2k network disabled on preferences, not connecting.")); return; } if (!multiconnect) { StopConnectionTry(); Disconnect(); } connecting = true; singleconnecting = !multiconnect; CServerSocket* newsocket = new CServerSocket(this, thePrefs::GetProxyData()); m_lstOpenSockets.push_back(newsocket); newsocket->ConnectToServer(server, bNoCrypt); connectionattemps[GetTickCount()] = newsocket; } void CServerConnect::StopConnectionTry() { connectionattemps.clear(); connecting = false; singleconnecting = false; if (m_idRetryTimer.IsRunning()) { m_idRetryTimer.Stop(); } // close all currenty opened sockets except the one which is connected to our current server for(SocketsList::iterator it = m_lstOpenSockets.begin(); it != m_lstOpenSockets.end(); ) { CServerSocket *pSck = *it++; if (pSck == connectedsocket) // don't destroy socket which is connected to server continue; if (pSck->m_bIsDeleting == false) // don't destroy socket if it is going to destroy itself later on DestroySocket(pSck); } } void CServerConnect::ConnectionEstablished(CServerSocket* sender) { if (connecting == false) { // we are already connected to another server DestroySocket(sender); return; } if (sender->GetConnectionState() == CS_WAITFORLOGIN) { AddLogLineN(CFormat( _("Connected to %s (%s:%i)") ) % sender->cur_server->GetListName() % sender->cur_server->GetFullIP() % sender->cur_server->GetPort() ); //send loginpacket CServer* update = theApp->serverlist->GetServerByAddress( sender->cur_server->GetAddress(), sender->cur_server->GetPort() ); if (update){ update->ResetFailedCount(); Notify_ServerRefresh( update ); } CMemFile data(256); data.WriteHash(thePrefs::GetUserHash()); // Why pass an ID, if we are loggin in? data.WriteUInt32(GetClientID()); data.WriteUInt16(thePrefs::GetPort()); data.WriteUInt32(4); // tagcount // Kry - Server doesn't support VBT tags afaik. // Not to mention we don't know its flags yet CTagString tagname(CT_NAME,thePrefs::GetUserNick()); tagname.WriteTagToFile(&data); CTagInt32 tagversion(CT_VERSION,EDONKEYVERSION); tagversion.WriteTagToFile(&data); uint32 dwCryptFlags = 0; if (thePrefs::IsClientCryptLayerSupported()) { dwCryptFlags |= SRVCAP_SUPPORTCRYPT; } if (thePrefs::IsClientCryptLayerRequested()) { dwCryptFlags |= SRVCAP_REQUESTCRYPT; } if (thePrefs::IsClientCryptLayerRequired()) { dwCryptFlags |= SRVCAP_REQUIRECRYPT; } // FLAGS for server connection CTagInt32 tagflags(CT_SERVER_FLAGS, CAPABLE_ZLIB | CAPABLE_AUXPORT | CAPABLE_NEWTAGS | CAPABLE_UNICODE | CAPABLE_LARGEFILES | dwCryptFlags ); tagflags.WriteTagToFile(&data); // eMule Version (14-Mar-2004: requested by lugdunummaster (need for LowID clients which have no chance // to send an Hello packet to the server during the callback test)) CTagInt32 tagMuleVersion(CT_EMULE_VERSION, (SO_AMULE << 24) | make_full_ed2k_version(VERSION_MJR, VERSION_MIN, VERSION_UPDATE) ); tagMuleVersion.WriteTagToFile(&data); CPacket* packet = new CPacket(data, OP_EDONKEYPROT, OP_LOGINREQUEST); #ifdef DEBUG_CLIENT_PROTOCOL AddLogLineC(wxT("Client: OP_LOGINREQUEST")); AddLogLineC(wxString(wxT(" Hash : ")) << thePrefs::GetUserHash().Encode()); AddLogLineC(wxString(wxT(" ClientID : ")) << GetClientID()); AddLogLineC(wxString(wxT(" Port : ")) << thePrefs::GetPort()); AddLogLineC(wxString(wxT(" User Nick: ")) << thePrefs::GetUserNick()); AddLogLineC(wxString(wxT(" Edonkey : ")) << EDONKEYVERSION); #endif theStats::AddUpOverheadServer(packet->GetPacketSize()); SendPacket(packet, true, sender); } else if (sender->GetConnectionState() == CS_CONNECTED){ theStats::AddReconnect(); theStats::GetServerConnectTimer()->ResetTimer(); connected = true; AddLogLineC(CFormat( _("Connection established on: %s") ) % sender->cur_server->GetListName()); connectedsocket = sender; StopConnectionTry(); CServer* update = theApp->serverlist->GetServerByAddress(connectedsocket->cur_server->GetAddress(),sender->cur_server->GetPort()); if ( update ) { Notify_ServerHighlight(update, true); } theApp->sharedfiles->ClearED2KPublishInfo(); Notify_ServerRemoveDead(); // tecxx 1609 2002 - serverlist update if (thePrefs::AddServersFromServer()) { CPacket* packet = new CPacket(OP_GETSERVERLIST, 0, OP_EDONKEYPROT); theStats::AddUpOverheadServer(packet->GetPacketSize()); SendPacket(packet, true); #ifdef DEBUG_CLIENT_PROTOCOL AddLogLineC(wxT("Client: OP_GETSERVERLIST")); #endif } } theApp->ShowConnectionState(); } bool CServerConnect::SendPacket(CPacket* packet,bool delpacket, CServerSocket* to) { if (!to) { if (connected) { connectedsocket->SendPacket(packet, delpacket, true); return true; } else { if ( delpacket ) { delete packet; } return false; } } else { to->SendPacket(packet, delpacket, true); return true; } } bool CServerConnect::SendUDPPacket(CPacket* packet, CServer* host, bool delpacket, bool rawpacket, uint16 port_offset) { if (connected) { serverudpsocket->SendPacket(packet, host, delpacket, rawpacket, port_offset); } else if (delpacket) { delete packet; } return true; } void CServerConnect::ConnectionFailed(CServerSocket* sender) { if (connecting == false && sender != connectedsocket) { // just return, cleanup is done by the socket itself return; } //messages CServer* pServer = theApp->serverlist->GetServerByAddress(sender->cur_server->GetAddress(), sender->cur_server->GetPort()); switch (sender->GetConnectionState()){ case CS_FATALERROR: AddLogLineC(_("Fatal Error while trying to connect. Internet connection might be down")); break; case CS_DISCONNECTED: theApp->sharedfiles->ClearED2KPublishInfo(); AddLogLineN(CFormat( _("Lost connection to %s (%s:%i)") ) % sender->cur_server->GetListName() % sender->cur_server->GetFullIP() % sender->cur_server->GetPort() ); if (pServer){ Notify_ServerHighlight(pServer, false); } break; case CS_SERVERDEAD: AddLogLineN(CFormat( _("%s (%s:%i) appears to be dead.") ) % sender->cur_server->GetListName() % sender->cur_server->GetFullIP() % sender->cur_server->GetPort() ); if (pServer) { pServer->AddFailedCount(); Notify_ServerRefresh( pServer ); } break; case CS_ERROR: break; case CS_SERVERFULL: AddLogLineN(CFormat( _("%s (%s:%i) appears to be full.") ) % sender->cur_server->GetListName() % sender->cur_server->GetFullIP() % sender->cur_server->GetPort() ); break; case CS_NOTCONNECTED:; break; } // IMPORTANT: mark this socket not to be deleted in StopConnectionTry(), // because it will delete itself after this function! sender->m_bIsDeleting = true; switch (sender->GetConnectionState()) { case CS_FATALERROR:{ bool autoretry= !singleconnecting; StopConnectionTry(); if ((thePrefs::Reconnect()) && (autoretry) && (!m_idRetryTimer.IsRunning())) { AddLogLineN(CFormat(wxPLURAL("Automatic connection to server will retry in %d second", "Automatic connection to server will retry in %d seconds", CS_RETRYCONNECTTIME)) % CS_RETRYCONNECTTIME); m_idRetryTimer.Start(1000*CS_RETRYCONNECTTIME); } break; } case CS_DISCONNECTED:{ theApp->sharedfiles->ClearED2KPublishInfo(); connected = false; Notify_ServerHighlight(sender->cur_server,false); if (connectedsocket) { connectedsocket->Close(); } connectedsocket = NULL; theApp->searchlist->StopSearch(true); Notify_SearchCancel(); theStats::GetServerConnectTimer()->StopTimer(); if (thePrefs::Reconnect() && !connecting){ ConnectToAnyServer(); } AddLogLineC(_("Connection lost") ); break; } case CS_ERROR: case CS_NOTCONNECTED:{ if (!connecting) break; AddLogLineN(CFormat( _("Connecting to %s (%s:%i) failed.") ) % sender->info % sender->cur_server->GetFullIP() % sender->cur_server->GetPort() ); } case CS_SERVERDEAD: case CS_SERVERFULL:{ if (!connecting) { break; } if (singleconnecting) { if (pServer && sender->IsServerCryptEnabledConnection() && !thePrefs::IsClientCryptLayerRequired()){ // try reconnecting without obfuscation ConnectToServer(pServer, false, true); break; } StopConnectionTry(); break; } ServerSocketMap::iterator it = connectionattemps.begin(); while ( it != connectionattemps.end() ){ if ( it->second == sender ) { connectionattemps.erase( it ); break; } ++it; } TryAnotherConnectionrequest(); } } theApp->ShowConnectionState(); } void CServerConnect::CheckForTimeout() { uint32 dwCurTick = GetTickCount(); ServerSocketMap::iterator it = connectionattemps.begin(); while ( it != connectionattemps.end() ){ if ( !it->second ) { AddLogLineN(_("ERROR: Socket invalid at timeout check")); connectionattemps.erase( it ); return; } if ( dwCurTick - it->first > CONSERVTIMEOUT) { uint32 key = it->first; CServerSocket* value = it->second; ++it; if (!value->IsSolving()) { AddLogLineN(CFormat( _("Connection attempt to %s (%s:%i) timed out.") ) % value->info % value->cur_server->GetFullIP() % value->cur_server->GetPort() ); connectionattemps.erase( key ); TryAnotherConnectionrequest(); DestroySocket( value ); } } else { ++it; } } } bool CServerConnect::Disconnect() { if (connected && connectedsocket) { theApp->sharedfiles->ClearED2KPublishInfo(); connected = false; CServer* update = theApp->serverlist->GetServerByAddress( connectedsocket->cur_server->GetAddress(), connectedsocket->cur_server->GetPort()); Notify_ServerHighlight(update, false); theApp->SetPublicIP(0); DestroySocket(connectedsocket); connectedsocket = NULL; theApp->ShowConnectionState(); theStats::GetServerConnectTimer()->StopTimer(); return true; } else { return false; } } CServerConnect::CServerConnect(CServerList* in_serverlist, amuleIPV4Address &address) : m_idRetryTimer(theApp,ID_SERVER_RETRY_TIMER_EVENT) { connectedsocket = NULL; used_list = in_serverlist; max_simcons = (thePrefs::IsSafeServerConnectEnabled()) ? 1 : 2; connecting = false; connected = false; clientid = 0; singleconnecting = false; m_recurseTryAnotherConnectionrequest = false; // ADUNANZA BEGIN // Backport m_bTryObfuscated = thePrefs::IsServerCryptLayerTCPRequested(); // ADUNANZA END // initalize socket for udp packets if (thePrefs::GetNetworkED2K()) { serverudpsocket = new CServerUDPSocket(address, thePrefs::GetProxyData()); } else { serverudpsocket = NULL; } } CServerConnect::~CServerConnect() { m_idRetryTimer.Stop(); // stop all connections StopConnectionTry(); // close connected socket, if any DestroySocket(connectedsocket); connectedsocket = NULL; // close udp socket delete serverudpsocket; } CServer* CServerConnect::GetCurrentServer() { if (IsConnected() && connectedsocket) { return connectedsocket->cur_server; } return NULL; } void CServerConnect::SetClientID(uint32 newid) { clientid = newid; if (!::IsLowID(newid)) { theApp->SetPublicIP(newid); } } void CServerConnect::DestroySocket(CServerSocket* pSck) { if (pSck == NULL) { return; } m_lstOpenSockets.remove(pSck); pSck->Destroy(); } bool CServerConnect::IsLocalServer(uint32 dwIP, uint16 nPort) { if (IsConnected()){ if (connectedsocket->cur_server->GetIP() == dwIP && connectedsocket->cur_server->GetPort() == nPort) return true; } return false; } void CServerConnect::KeepConnectionAlive() { uint32 dwServerKeepAliveTimeout = thePrefs::GetServerKeepAliveTimeout(); if (dwServerKeepAliveTimeout && connected && connectedsocket && connectedsocket->connectionstate == CS_CONNECTED && GetTickCount() - connectedsocket->GetLastTransmission() >= dwServerKeepAliveTimeout) { // "Ping" the server if the TCP connection was not used for the specified interval with // an empty publish files packet -> recommended by lugdunummaster himself! CMemFile files(4); files.WriteUInt32(0); //nFiles CPacket* packet = new CPacket(files, OP_EDONKEYPROT, OP_OFFERFILES); #ifdef DEBUG_CLIENT_PROTOCOL AddLogLineC(wxT("Client: OP_OFFERFILES")); #endif // compress packet // - this kind of data is highly compressable (N * (1 MD4 and at least 3 string meta data tags and 1 integer meta data tag)) // - the min. amount of data needed for one published file is ~100 bytes // - this function is called once when connecting to a server and when a file becomes shareable - so, it's called rarely. // - if the compressed size is still >= the original size, we send the uncompressed packet // therefor we always try to compress the packet theStats::AddUpOverheadServer(packet->GetPacketSize()); connectedsocket->SendPacket(packet,true); AddDebugLogLineN(logServer, wxT("Refreshing server connection")); } } // true if the IP is one of a server which we currently try to connect to bool CServerConnect::AwaitingTestFromIP(uint32 dwIP) { ServerSocketMap::iterator it = connectionattemps.begin(); while (it != connectionattemps.end()) { const CServerSocket* serversocket = it->second; if (serversocket && (serversocket->GetConnectionState() == CS_WAITFORLOGIN) && (serversocket->GetServerIP() == dwIP)) { return true; } ++it; } return false; } bool CServerConnect::IsConnectedObfuscated() const { return connectedsocket != NULL && connectedsocket->IsObfusicating(); } void CServerConnect::OnServerHostnameResolved(void* socket, uint32 ip) { // The socket object might have been deleted while we waited for the hostname // to be resolved, so we check if it's still among the open sockets. SocketsList::iterator it = std::find(m_lstOpenSockets.begin(), m_lstOpenSockets.end(), socket); if (it != m_lstOpenSockets.end()) { (*it)->OnHostnameResolved(ip); } else { AddLogLineNS(_("Received late result of DNS lookup, discarding.")); } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/CorruptionBlackBox.h0000644000175000017500000000451712050266603022251 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2008-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2008-2011 Stu Redman ( sturedman@amule.org ) // Copyright (C) 2002-2011 Merkur ( strEmail.Format("%s@%s", "devteam", "emule-project.net") / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef CORRUPTIONBLACKBOX_H #define CORRUPTIONBLACKBOX_H #include "Types.h" #include #include class CCorruptionBlackBox { public: void Free(); void TransferredData(uint64 nStartPos, uint64 nEndPos, uint32 senderIP); void VerifiedData(bool ok, uint16 nPart, uint32 nRelStartPos, uint32 nRelEndPos); void EvaluateData(); void SetPartFileInfo(const wxString& name, const wxString& nr) { m_fileName = name; m_partNumber = nr; } void DumpAll(); private: // downloaded data for each part class CCBBRecord { public: CCBBRecord(uint32 nStartPos, uint32 nEndPos, uint32 dwIP); bool Merge(uint32 nStartPos, uint32 nEndPos, uint32 dwIP); // Startpos / Endpos relative to part uint32 m_nStartPos; uint32 m_nEndPos; // IP of client uint32 m_dwIP; }; typedef std::list CRecordList; std::map m_Records; // good/bad data for each client class CCBBClient { public: CCBBClient() { m_downloaded = 0; } uint64 m_downloaded; }; typedef std::map CCBBClientMap; CCBBClientMap m_goodClients, m_badClients; // for debug prints wxString m_fileName; wxString m_partNumber; }; #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/DataToText.cpp0000644000175000017500000001220512050266603021044 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "KnownFile.h" // Needed by PriorityToStr #include "Constants.h" // Needed by DownloadStateToStr and GetSoftName #define __need_convstatus // Only the conversion status enum is needed #include "PartFileConvert.h" // Needed by GetConversionState #include wxString PriorityToStr( int priority, bool isAuto ) { if ( isAuto ) { switch ( priority ) { case PR_LOW: return _("Auto [Lo]"); case PR_NORMAL: return _("Auto [No]"); case PR_HIGH: return _("Auto [Hi]"); // ADUNANZA BEGIN case PR_VERYHIGH: return _("Auto [VH]"); case PR_POWERSHARE: return _("Auto [Re]"); // ADUNANZA END } } else { switch ( priority ) { case PR_VERYLOW: return _("Very low"); case PR_LOW: return _("Low"); case PR_NORMAL: return _("Normal"); case PR_HIGH: return _("High"); case PR_VERYHIGH: return _("Very High"); case PR_POWERSHARE: return _("Release"); } } // ADUNANZA BEGIN wxString unknownPriorityDesc; unknownPriorityDesc = CFormat(_("%d - Unknown")) % priority; return unknownPriorityDesc; // ADUNANZA END wxFAIL; return _("Unknown"); } wxString DownloadStateToStr( int state, bool queueFull ) { switch ( state ) { case DS_CONNECTING: return _("Connecting"); case DS_CONNECTED: return _("Asking"); case DS_WAITCALLBACK: return _("Connecting via server"); case DS_ONQUEUE: return ( queueFull ? _("Queue Full") : _("On Queue") ); case DS_DOWNLOADING: return _("Downloading"); case DS_REQHASHSET: return _("Receiving hashset"); case DS_NONEEDEDPARTS: return _("No needed parts"); case DS_LOWTOLOWIP: return _("Cannot connect LowID to LowID"); case DS_TOOMANYCONNS: return _("Too many connections"); case DS_NONE: return _("Unknown"); case DS_WAITCALLBACKKAD: return _("Connecting via Kad"); case DS_TOOMANYCONNSKAD: return _("Too many Kad connections"); case DS_BANNED: return _("Banned"); case DS_ERROR: return _("Connection Error"); case DS_REMOTEQUEUEFULL: return _("Remote Queue Full"); } wxFAIL; return _("Unknown"); } const wxString GetSoftName(unsigned int software_ident) { switch (software_ident) { case SO_OLDEMULE: case SO_EMULE: return wxT("eMule"); case SO_CDONKEY: return wxT("cDonkey"); case SO_LXMULE: return wxT("(l/x)Mule"); case SO_AMULE: return wxT("aMule"); case SO_SHAREAZA: case SO_NEW_SHAREAZA: case SO_NEW2_SHAREAZA: return wxT("Shareaza"); case SO_EMULEPLUS: return wxT("eMule+"); case SO_HYDRANODE: return wxT("HydraNode"); case SO_MLDONKEY: return wxTRANSLATE("Old MLDonkey"); case SO_NEW_MLDONKEY: case SO_NEW2_MLDONKEY: return wxTRANSLATE("New MLDonkey"); case SO_LPHANT: return wxT("lphant"); case SO_EDONKEYHYBRID: return wxT("eDonkeyHybrid"); case SO_EDONKEY: return wxT("eDonkey"); case SO_UNKNOWN: return wxTRANSLATE("Unknown"); case SO_COMPAT_UNK: return wxTRANSLATE("eMule Compatible"); default: return wxEmptyString; } } wxString OriginToText(unsigned int source_from) { switch ((ESourceFrom)source_from) { case SF_LOCAL_SERVER: return wxTRANSLATE("Local Server"); case SF_REMOTE_SERVER: return wxTRANSLATE("Remote Server"); case SF_KADEMLIA: return wxTRANSLATE("Kad"); case SF_SOURCE_EXCHANGE: return wxTRANSLATE("Source Exchange"); case SF_PASSIVE: return wxTRANSLATE("Passive"); case SF_LINK: return wxTRANSLATE("Link"); case SF_SOURCE_SEEDS: return wxTRANSLATE("Source Seeds"); case SF_SEARCH_RESULT: return wxTRANSLATE("Search Result"); case SF_NONE: default: return wxTRANSLATE("Unknown"); } } wxString GetConversionState(unsigned int state) { switch (state) { case CONV_OK : return _("Completed"); case CONV_INPROGRESS : return _("In progress"); case CONV_OUTOFDISKSPACE : return _("ERROR: Out of diskspace"); case CONV_PARTMETNOTFOUND : return _("ERROR: Partmet not found"); case CONV_IOERROR : return _("ERROR: IO error!"); case CONV_FAILED : return _("ERROR: Failed!"); case CONV_QUEUE : return _("Queued"); case CONV_ALREADYEXISTS : return _("Already downloading"); case CONV_BADFORMAT : return _("Unknown or bad tempfile format."); default: return wxT("?"); } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/EMSocket.h0000644000175000017500000001072512050266603020147 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef EMSOCKET_H #define EMSOCKET_H #include "EncryptedStreamSocket.h" // Needed for CEncryptedStreamSocket #include "ThrottledSocket.h" // Needed for ThrottledFileSocket class CPacket; #define ERR_WRONGHEADER 0x01 #define ERR_TOOBIG 0x02 #define ES_DISCONNECTED 0xFF #define ES_NOTCONNECTED 0x00 #define ES_CONNECTED 0x01 const uint32 PACKET_HEADER_SIZE = 6; class CEMSocket : public CEncryptedStreamSocket, public ThrottledFileSocket { public: CEMSocket(const CProxyData *ProxyData = NULL); virtual ~CEMSocket(); virtual void SendPacket(CPacket* packet, bool delpacket = true, bool controlpacket = true, uint32 actualPayloadSize = 0); bool IsConnected() { return byConnected==ES_CONNECTED;}; uint8 GetConState() {return byConnected;} void SetDownloadLimit(uint32 limit); void DisableDownloadLimit(); virtual uint32 GetTimeOut() const; virtual void SetTimeOut(uint32 uTimeOut); uint32 GetLastCalledSend() { return lastCalledSend; } uint64 GetSentBytesCompleteFileSinceLastCallAndReset(); uint64 GetSentBytesPartFileSinceLastCallAndReset(); uint64 GetSentBytesControlPacketSinceLastCallAndReset(); uint64 GetSentPayloadSinceLastCallAndReset(); void TruncateQueues(); virtual SocketSentBytes SendControlData(uint32 maxNumberOfBytesToSend, uint32 minFragSize) { return Send(maxNumberOfBytesToSend, minFragSize, true); }; virtual SocketSentBytes SendFileAndControlData(uint32 maxNumberOfBytesToSend, uint32 minFragSize) { return Send(maxNumberOfBytesToSend, minFragSize, false); }; uint32 GetNeededBytes(); void Destroy(); bool OnDestroy() { return DoingDestroy; }; //protected: // these functions are public on our code because of the amuleDlg::socketHandler virtual void OnError(int WXUNUSED(nErrorCode)) { }; virtual void OnSend(int nErrorCode); virtual void OnReceive(int nErrorCode); protected: virtual bool PacketReceived(CPacket* WXUNUSED(packet)) { return false; }; virtual void OnClose(int nErrorCode); uint8 byConnected; uint32 m_uTimeOut; private: virtual SocketSentBytes Send(uint32 maxNumberOfBytesToSend, uint32 minFragSize, bool onlyAllowedToSendControlPacket); void ClearQueues(); uint32 GetNextFragSize(uint32 current, uint32 minFragSize); bool HasSent() { return m_hasSent; } // Download (pseudo) rate control uint32 downloadLimit; bool downloadLimitEnable; bool pendingOnReceive; // Download partial header byte pendingHeader[PACKET_HEADER_SIZE]; uint32 pendingHeaderSize; // Download partial packet byte* pendingPacket; uint32 pendingPacketSize; // Upload control byte* sendbuffer; uint32 sendblen; uint32 sent; typedef std::list CPacketQueue; CPacketQueue m_control_queue; struct StandardPacketQueueEntry { uint32 actualPayloadSize; CPacket* packet; }; typedef std::list CStdPacketQueue; CStdPacketQueue m_standard_queue; bool m_currentPacket_is_controlpacket; wxMutex m_sendLocker; uint64 m_numberOfSentBytesCompleteFile; uint64 m_numberOfSentBytesPartFile; uint64 m_numberOfSentBytesControlPacket; bool m_currentPackageIsFromPartFile; bool m_bAccelerateUpload; uint32 lastCalledSend; uint32 lastSent; uint32 lastFinishedStandard; uint32 m_actualPayloadSize; uint32 m_actualPayloadSizeSent; bool m_bBusy; bool m_hasSent; bool DoingDestroy; }; #endif // EMSOCKET_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/PartFileConvert.cpp0000644000175000017500000003213512050266603022076 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include "PartFileConvert.h" #include "amule.h" #include "DownloadQueue.h" #include #include "Logger.h" #include "PartFile.h" #include "Preferences.h" #include "SharedFileList.h" #include #include "OtherFunctions.h" #include "GuiEvents.h" #include "DataToText.h" static unsigned s_nextJobId = 0; struct ConvertJob { unsigned id; CPath folder; CPath filename; wxString filehash; int format; ConvStatus state; uint32_t size; uint32_t spaceneeded; uint8 partmettype; bool removeSource; ConvertJob() { id=s_nextJobId++; size=0; spaceneeded=0; partmettype=PMT_UNKNOWN; removeSource=true; } }; ConvertInfo::ConvertInfo(ConvertJob *job) : id(job->id), folder(job->folder), filename(job->filename), filehash(job->filehash), state(job->state), size(job->size), spaceneeded(job->spaceneeded) {} wxThread* CPartFileConvert::s_convertPfThread = NULL; std::list CPartFileConvert::s_jobs; ConvertJob* CPartFileConvert::s_pfconverting = NULL; wxMutex CPartFileConvert::s_mutex; int CPartFileConvert::ScanFolderToAdd(const CPath& folder, bool deletesource) { int count = 0; CDirIterator finder(folder); CPath file = finder.GetFirstFile(CDirIterator::File, wxT("*.part.met")); while (file.IsOk()) { ConvertToeMule(folder.JoinPaths(file), deletesource); file = finder.GetNextFile(); count++; } /* Shareaza file = finder.GetFirstFile(CDirIterator::File, wxT("*.sd")); while (!file.IsEmpty()) { ConvertToeMule(file, deletesource); file = finder.GetNextFile(); count++; } */ file = finder.GetFirstFile(CDirIterator::Dir, wxT("*.*")); while (file.IsOk()) { ScanFolderToAdd(folder.JoinPaths(file), deletesource); file = finder.GetNextFile(); } return count; } void CPartFileConvert::ConvertToeMule(const CPath& file, bool deletesource) { if (!file.FileExists()) { return; } ConvertJob* newjob = new ConvertJob(); newjob->folder = file; newjob->removeSource = deletesource; newjob->state = CONV_QUEUE; wxMutexLocker lock(s_mutex); s_jobs.push_back(newjob); Notify_ConvertUpdateJobInfo(newjob); StartThread(); } void CPartFileConvert::StartThread() { if (!s_convertPfThread) { s_convertPfThread = new CPartFileConvert(); switch ( s_convertPfThread->Create() ) { case wxTHREAD_NO_ERROR: AddDebugLogLineN( logPfConvert, wxT("A new thread has been created.") ); break; case wxTHREAD_RUNNING: AddDebugLogLineC( logPfConvert, wxT("Error, attempt to create an already running thread!") ); break; case wxTHREAD_NO_RESOURCE: AddDebugLogLineC( logPfConvert, wxT("Error, attempt to create a thread without resources!") ); break; default: AddDebugLogLineC( logPfConvert, wxT("Error, unknown error attempting to create a thread!") ); } // The thread shouldn't hog the CPU, as it will already be hogging the HD s_convertPfThread->SetPriority(WXTHREAD_MIN_PRIORITY); s_convertPfThread->Run(); } } void CPartFileConvert::StopThread() { if (s_convertPfThread) { s_convertPfThread->Delete(); } else { return; } AddLogLineNS(_("Waiting for partfile convert thread to die...")); while (s_convertPfThread) { // ADUNANZA BEGIN // Da doc wxWidgets raccomandata wxThread::Sleep #if 0 wxSleep(1); #else wxThread::Sleep(1); #endif // ADUNANZA END } } wxThread::ExitCode CPartFileConvert::Entry() { int imported = 0; for (;;) { // search next queued job and start it { wxMutexLocker lock(s_mutex); s_pfconverting = NULL; for (std::list::iterator it = s_jobs.begin(); it != s_jobs.end(); ++it) { if ((*it)->state == CONV_QUEUE) { s_pfconverting = *it; break; } } } if (s_pfconverting) { { wxMutexLocker lock(s_mutex); s_pfconverting->state = CONV_INPROGRESS; } Notify_ConvertUpdateJobInfo(s_pfconverting); ConvStatus convertResult = performConvertToeMule(s_pfconverting->folder); { wxMutexLocker lock(s_mutex); s_pfconverting->state = convertResult; } if (s_pfconverting->state == CONV_OK) { ++imported; } Notify_ConvertUpdateJobInfo(s_pfconverting); AddLogLineC(CFormat(_("Importing %s: %s")) % s_pfconverting->folder % GetConversionState(s_pfconverting->state)); if (TestDestroy()) { wxMutexLocker lock(s_mutex); DeleteContents(s_jobs); break; } } else { break; // nothing more to do now } } // clean up Notify_ConvertClearInfos(); if (imported) { theApp->sharedfiles->PublishNextTurn(); } AddDebugLogLineN(logPfConvert, wxT("No more jobs on queue, exiting from thread.")); s_convertPfThread = NULL; return NULL; } ConvStatus CPartFileConvert::performConvertToeMule(const CPath& fileName) { wxString filepartindex, buffer; unsigned fileindex; CPath folder = fileName.GetPath(); CPath partfile = fileName.GetFullName(); CPath newfilename; CDirIterator finder(folder); Notify_ConvertUpdateProgressFull(0, _("Reading temp folder"), s_pfconverting->folder.GetPrintable()); filepartindex = partfile.RemoveAllExt().GetRaw(); Notify_ConvertUpdateProgress(4, _("Retrieving basic information from download info file")); CPartFile* file = new CPartFile(); s_pfconverting->partmettype = file->LoadPartFile(folder, partfile, false, true); switch (s_pfconverting->partmettype) { case PMT_UNKNOWN: case PMT_BADFORMAT: delete file; return CONV_BADFORMAT; } CPath oldfile = folder.JoinPaths(partfile.RemoveExt()); { wxMutexLocker lock(s_mutex); s_pfconverting->size = file->GetFileSize(); s_pfconverting->filename = file->GetFileName(); s_pfconverting->filehash = file->GetFileHash().Encode(); } Notify_ConvertUpdateJobInfo(s_pfconverting); if (theApp->downloadqueue->GetFileByID(file->GetFileHash())) { delete file; return CONV_ALREADYEXISTS; } if (s_pfconverting->partmettype == PMT_SPLITTED) { char *ba = new char [PARTSIZE]; try { CFile inputfile; // just count unsigned maxindex = 0; unsigned partfilecount = 0; CPath filePath = finder.GetFirstFile(CDirIterator::File, filepartindex + wxT(".*.part")); while (filePath.IsOk()) { long l; ++partfilecount; filePath.GetFullName().RemoveExt().GetExt().ToLong(&l); fileindex = (unsigned)l; filePath = finder.GetNextFile(); if (fileindex > maxindex) maxindex = fileindex; } float stepperpart; { wxMutexLocker lock(s_mutex); if (partfilecount > 0) { stepperpart = (80.0f / partfilecount); if (maxindex * PARTSIZE <= s_pfconverting->size) { s_pfconverting->spaceneeded = maxindex * PARTSIZE; } else { s_pfconverting->spaceneeded = s_pfconverting->size; } } else { stepperpart = 80.0f; s_pfconverting->spaceneeded = 0; } } Notify_ConvertUpdateJobInfo(s_pfconverting); sint64 freespace = CPath::GetFreeSpaceAt(thePrefs::GetTempDir()); if (freespace != wxInvalidOffset) { if (static_cast(freespace) < maxindex * PARTSIZE) { delete file; delete [] ba; return CONV_OUTOFDISKSPACE; } } // create new partmetfile, and remember the new name file->CreatePartFile(); newfilename = file->GetFullName(); Notify_ConvertUpdateProgress(8, _("Creating destination file")); file->m_hpartfile.SetLength( s_pfconverting->spaceneeded ); unsigned curindex = 0; CPath filename = finder.GetFirstFile(CDirIterator::File, filepartindex + wxT(".*.part")); while (filename.IsOk()) { // stats ++curindex; buffer = CFormat(_("Loading data from old download file (%u of %u)")) % curindex % partfilecount; Notify_ConvertUpdateProgress(10 + (curindex * stepperpart), buffer); long l; filename.GetFullName().RemoveExt().GetExt().ToLong(&l); fileindex = (unsigned)l; if (fileindex == 0) { filename = finder.GetNextFile(); continue; } uint32 chunkstart = (fileindex - 1) * PARTSIZE; // open, read data of the part-part-file into buffer, close file inputfile.Open(filename, CFile::read); uint64 toReadWrite = std::min(PARTSIZE, inputfile.GetLength()); inputfile.Read(ba, toReadWrite); inputfile.Close(); buffer = CFormat(_("Saving data block into new single download file (%u of %u)")) % curindex % partfilecount; Notify_ConvertUpdateProgress(10 + (curindex * stepperpart), buffer); // write the buffered data file->m_hpartfile.WriteAt(ba, chunkstart, toReadWrite); filename = finder.GetNextFile(); } delete[] ba; } catch (const CSafeIOException& e) { AddDebugLogLineC(logPfConvert, wxT("IO error while converting partfiles: ") + e.what()); delete[] ba; file->Delete(); return CONV_IOERROR; } file->m_hpartfile.Close(); } // import an external common format partdownload else //if (pfconverting->partmettype==PMT_DEFAULTOLD || pfconverting->partmettype==PMT_NEWOLD || Shareaza ) { if (!s_pfconverting->removeSource) { wxMutexLocker lock(s_mutex); s_pfconverting->spaceneeded = oldfile.GetFileSize(); } Notify_ConvertUpdateJobInfo(s_pfconverting); sint64 freespace = CPath::GetFreeSpaceAt(thePrefs::GetTempDir()); if (freespace == wxInvalidOffset) { delete file; return CONV_IOERROR; } else if (freespace < s_pfconverting->spaceneeded) { delete file; return CONV_OUTOFDISKSPACE; } file->CreatePartFile(); newfilename = file->GetFullName(); file->m_hpartfile.Close(); bool ret = false; Notify_ConvertUpdateProgress(92, _("Copy")); CPath::RemoveFile(newfilename.RemoveExt()); if (!oldfile.FileExists()) { // data file does not exist. well, then create a 0 byte big one CFile datafile; ret = datafile.Create(newfilename.RemoveExt()); } else if (s_pfconverting->removeSource) { ret = CPath::RenameFile(oldfile, newfilename.RemoveExt()); } else { ret = CPath::CloneFile(oldfile, newfilename.RemoveExt(), false); } if (!ret) { file->Delete(); //delete file; return CONV_FAILED; } } Notify_ConvertUpdateProgress(94, _("Retrieving source downloadfile information")); CPath::RemoveFile(newfilename); if (s_pfconverting->removeSource) { CPath::RenameFile(folder.JoinPaths(partfile), newfilename); } else { CPath::CloneFile(folder.JoinPaths(partfile), newfilename, false); } file->m_hashlist.clear(); if (!file->LoadPartFile(thePrefs::GetTempDir(), file->GetPartMetFileName(), false)) { //delete file; file->Delete(); return CONV_BADFORMAT; } if (s_pfconverting->partmettype == PMT_NEWOLD || s_pfconverting->partmettype == PMT_SPLITTED) { file->SetCompletedSize(file->transferred); file->m_iGainDueToCompression = 0; file->m_iLostDueToCorruption = 0; } Notify_ConvertUpdateProgress(100, _("Adding download and saving new partfile")); theApp->downloadqueue->AddDownload(file, thePrefs::AddNewFilesPaused(), 0); file->SavePartFile(); if (file->GetStatus(true) == PS_READY) { theApp->sharedfiles->SafeAddKFile(file); // part files are always shared files } if (s_pfconverting->removeSource) { CPath oldFile = finder.GetFirstFile(CDirIterator::File, filepartindex + wxT(".*")); while (oldFile.IsOk()) { CPath::RemoveFile(folder.JoinPaths(oldFile)); oldFile = finder.GetNextFile(); } if (s_pfconverting->partmettype == PMT_SPLITTED) { CPath::RemoveDir(folder); } } return CONV_OK; } // Notification handlers void CPartFileConvert::RemoveJob(unsigned id) { wxMutexLocker lock(s_mutex); for (std::list::iterator it = s_jobs.begin(); it != s_jobs.end(); ++it) { if ((*it)->id == id && (*it)->state != CONV_INPROGRESS) { ConvertJob *job = *it; s_jobs.erase(it); Notify_ConvertRemoveJobInfo(id); delete job; break; } } } void CPartFileConvert::RetryJob(unsigned id) { wxMutexLocker lock(s_mutex); for (std::list::iterator it = s_jobs.begin(); it != s_jobs.end(); ++it) { if ((*it)->id == id && (*it)->state != CONV_INPROGRESS && (*it)->state != CONV_OK) { (*it)->state = CONV_QUEUE; Notify_ConvertUpdateJobInfo(*it); StartThread(); break; } } } void CPartFileConvert::ReaddAllJobs() { wxMutexLocker lock(s_mutex); for (std::list::iterator it = s_jobs.begin(); it != s_jobs.end(); ++it) { Notify_ConvertUpdateJobInfo(*it); } } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/DownloadListCtrl.cpp0000644000175000017500000014440712050266603022265 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "DownloadListCtrl.h" // Interface declarations #include #include #include // Needed for CFormat #include "amule.h" // Needed for theApp #include "amuleDlg.h" // Needed for CamuleDlg #include "BarShader.h" // Needed for CBarShader #include "CommentDialogLst.h" // Needed for CCommentDialogLst #include "DataToText.h" // Needed for PriorityToStr #include "DownloadQueue.h" #include "FileDetailDialog.h" // Needed for CFileDetailDialog #include "GuiEvents.h" // Needed for CoreNotify_* #include "Logger.h" #include "muuli_wdr.h" // Needed for ID_DLOADLIST #include "PartFile.h" // Needed for CPartFile #include "Preferences.h" #include "SharedFileList.h" // Needed for CSharedFileList #include "TerminationProcess.h" // Needed for CTerminationProcess #include "TransferWnd.h" #include "SourceListCtrl.h" // ADUNANZA BEGIN // Per Clarensio #include "AdunanzA.h" // ADUNANZA END class CPartFile; struct FileCtrlItem_Struct { FileCtrlItem_Struct() : dwUpdated(0), status(NULL), m_fileValue(NULL) { } ~FileCtrlItem_Struct() { delete status; } CPartFile* GetFile() const { return m_fileValue; } void SetContents(CPartFile* file) { m_fileValue = file; } uint32 dwUpdated; wxBitmap* status; private: CPartFile* m_fileValue; }; #define m_ImageList theApp->amuledlg->m_imagelist enum ColumnEnum { ColumnPart = 0, ColumnFileName, ColumnSize, ColumnTransferred, ColumnCompleted, ColumnSpeed, ColumnProgress, ColumnSources, ColumnPriority, ColumnStatus, ColumnTimeRemaining, ColumnLastSeenComplete, ColumnLastReception, ColumnNumberOfColumns }; BEGIN_EVENT_TABLE(CDownloadListCtrl, CMuleListCtrl) EVT_LIST_ITEM_ACTIVATED(ID_DLOADLIST, CDownloadListCtrl::OnItemActivated) EVT_LIST_ITEM_RIGHT_CLICK(ID_DLOADLIST, CDownloadListCtrl::OnMouseRightClick) EVT_LIST_ITEM_MIDDLE_CLICK(ID_DLOADLIST, CDownloadListCtrl::OnMouseMiddleClick) EVT_LIST_ITEM_SELECTED(ID_DLOADLIST, CDownloadListCtrl::OnItemSelectionChanged) EVT_LIST_ITEM_DESELECTED(ID_DLOADLIST, CDownloadListCtrl::OnItemSelectionChanged) EVT_CHAR( CDownloadListCtrl::OnKeyPressed ) EVT_MENU( MP_CANCEL, CDownloadListCtrl::OnCancelFile ) EVT_MENU( MP_PAUSE, CDownloadListCtrl::OnSetStatus ) EVT_MENU( MP_STOP, CDownloadListCtrl::OnSetStatus ) EVT_MENU( MP_RESUME, CDownloadListCtrl::OnSetStatus ) EVT_MENU( MP_PRIOLOW, CDownloadListCtrl::OnSetPriority ) EVT_MENU( MP_PRIONORMAL, CDownloadListCtrl::OnSetPriority ) EVT_MENU( MP_PRIOHIGH, CDownloadListCtrl::OnSetPriority ) EVT_MENU( MP_PRIOAUTO, CDownloadListCtrl::OnSetPriority ) EVT_MENU( MP_SWAP_A4AF_TO_THIS, CDownloadListCtrl::OnSwapSources ) EVT_MENU( MP_SWAP_A4AF_TO_THIS_AUTO, CDownloadListCtrl::OnSwapSources ) EVT_MENU( MP_SWAP_A4AF_TO_ANY_OTHER, CDownloadListCtrl::OnSwapSources ) // ADUNANZA BEGIN #if !defined(CLIENT_GUI) EVT_MENU( MP_ADUSTREAMINGVIEW_REQUEST, CDownloadListCtrl::OnAduStreamingView ) EVT_MENU( MP_ADUSTREAMINGVIEW_START, CDownloadListCtrl::OnAduStreamingView ) EVT_MENU( MP_ADUSTREAMINGVIEW_STOP, CDownloadListCtrl::OnAduStreamingView ) #endif // ADUNANZA END EVT_MENU_RANGE( MP_ASSIGNCAT, MP_ASSIGNCAT + 99, CDownloadListCtrl::OnSetCategory ) EVT_MENU( MP_CLEARCOMPLETED, CDownloadListCtrl::OnClearCompleted ) EVT_MENU( MP_GETMAGNETLINK, CDownloadListCtrl::OnGetLink ) EVT_MENU( MP_GETED2KLINK, CDownloadListCtrl::OnGetLink ) EVT_MENU( MP_METINFO, CDownloadListCtrl::OnViewFileInfo ) EVT_MENU( MP_VIEW, CDownloadListCtrl::OnPreviewFile ) EVT_MENU( MP_VIEWFILECOMMENTS, CDownloadListCtrl::OnViewFileComments ) EVT_MENU( MP_WS, CDownloadListCtrl::OnGetFeedback ) END_EVENT_TABLE() //! This listtype is used when gathering the selected items. typedef std::list ItemList; CDownloadListCtrl::CDownloadListCtrl( wxWindow *parent, wxWindowID winid, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name ) : CMuleListCtrl( parent, winid, pos, size, style | wxLC_OWNERDRAW, validator, name ) { // Setting the sorter function. SetSortFunc( SortProc ); // Set the table-name (for loading and saving preferences). SetTableName( wxT("Download") ); m_menu = NULL; m_hilightBrush = CMuleColour(wxSYS_COLOUR_HIGHLIGHT).Blend(125).GetBrush(); m_hilightUnfocusBrush = CMuleColour(wxSYS_COLOUR_BTNSHADOW).Blend(125).GetBrush(); InsertColumn( ColumnPart, _("Part"), wxLIST_FORMAT_LEFT, 30, wxT("a") ); InsertColumn( ColumnFileName, _("File Name"), wxLIST_FORMAT_LEFT, 260, wxT("N") ); InsertColumn( ColumnSize, _("Size"), wxLIST_FORMAT_LEFT, 60, wxT("Z") ); InsertColumn( ColumnTransferred, _("Transferred"), wxLIST_FORMAT_LEFT, 65, wxT("T") ); InsertColumn( ColumnCompleted, _("Completed"), wxLIST_FORMAT_LEFT, 65, wxT("C") ); InsertColumn( ColumnSpeed, _("Speed"), wxLIST_FORMAT_LEFT, 65, wxT("S") ); InsertColumn( ColumnProgress, _("Progress"), wxLIST_FORMAT_LEFT, 170, wxT("P") ); InsertColumn( ColumnSources, _("Sources"), wxLIST_FORMAT_LEFT, 50, wxT("u") ); InsertColumn( ColumnPriority, _("Priority"), wxLIST_FORMAT_LEFT, 55, wxT("p") ); InsertColumn( ColumnStatus, _("Status"), wxLIST_FORMAT_LEFT, 70, wxT("s") ); InsertColumn( ColumnTimeRemaining, _("Time Remaining"), wxLIST_FORMAT_LEFT, 110, wxT("r") ); InsertColumn( ColumnLastSeenComplete, _("Last Seen Complete"), wxLIST_FORMAT_LEFT, 220, wxT("c") ); InsertColumn( ColumnLastReception, _("Last Reception"), wxLIST_FORMAT_LEFT, 220, wxT("R") ); m_category = 0; m_filecount = 0; m_ItemSelectionChangePending = false; LoadSettings(); //m_ready = true; } // This is the order the columns had before extendable list-control settings save/load code was introduced. // Don't touch when inserting new columns! wxString CDownloadListCtrl::GetOldColumnOrder() const { return wxT("N,Z,T,C,S,P,u,p,s,r,c,R"); } CDownloadListCtrl::~CDownloadListCtrl() { while ( !m_ListItems.empty() ) { delete m_ListItems.begin()->second; m_ListItems.erase( m_ListItems.begin() ); } } void CDownloadListCtrl::AddFile( CPartFile* file ) { wxASSERT( file ); // Avoid duplicate entries of files if ( m_ListItems.find( file ) == m_ListItems.end() ) { FileCtrlItem_Struct* newitem = new FileCtrlItem_Struct; newitem->SetContents(file); m_ListItems.insert( ListItemsPair( file, newitem ) ); // Check if the new file is visible in the current category if ( file->CheckShowItemInGivenCat( m_category ) ) { ShowFile( file, true ); if (file->IsCompleted()) { CastByID(ID_BTNCLRCOMPL, GetParent(), wxButton)->Enable(true); } SortList(); } } } void CDownloadListCtrl::RemoveFile( CPartFile* file ) { wxASSERT( file ); // Ensure that any list-entries are removed ShowFile( file, false ); // Find the assosiated list-item ListItems::iterator it = m_ListItems.find( file ); if ( it != m_ListItems.end() ) { delete it->second; m_ListItems.erase( it ); } } void CDownloadListCtrl::UpdateItem(const void* toupdate) { // ADUNANZA BEGIN #if !defined(CLIENT_GUI) && !defined(AMULE_DAEMON) CAdunanzAStreaming::statuses previousStreamingStatus = theApp->m_AdunanzAStreaming.m_status; theApp->m_AdunanzAStreaming.checkForReady(); if (theApp->m_AdunanzAStreaming.m_status == CAdunanzAStreaming::Ready) { if (previousStreamingStatus == CAdunanzAStreaming::Requested) { wxString msg; msg = CFormat(_("File\n%s\nis ready for streaming!\nDo you want to play it now?")) % theApp->m_AdunanzAStreaming.m_pTargetFile->GetFileName().GetPrintable(); int theAnswer = wxMessageBox(msg, _("Message"), wxYES_NO, this); if (theAnswer == wxYES) { if (theApp->m_AdunanzAStreaming.start()) { PreviewFile(theApp->m_AdunanzAStreaming.m_pTargetFile); } } } } else { theApp->m_AdunanzAStreaming.checkForStop(); } #endif // ADUNANZA END // Retrieve all entries matching the source ListIteratorPair rangeIt = m_ListItems.equal_range( toupdate ); // Visible lines, default to all because not all platforms // support the GetVisibleLines function long first = 0, last = GetItemCount(); #ifndef __WXMSW__ // Get visible lines if we need them if ( rangeIt.first != rangeIt.second ) { GetVisibleLines( &first, &last ); } #endif for ( ListItems::iterator it = rangeIt.first; it != rangeIt.second; ++it ) { FileCtrlItem_Struct* item = it->second; long index = FindItem( -1, reinterpret_cast(item) ); // Determine if the file should be shown in the current category CPartFile* file = item->GetFile(); bool show = file->CheckShowItemInGivenCat( m_category ); if ( index > -1 ) { if ( show ) { item->dwUpdated = 0; // Only update visible lines if ( index >= first && index <= last) { RefreshItem( index ); } } else { // Item should no longer be shown in // the current category ShowFile( file, false ); } } else if ( show ) { // Item has been hidden but new status means // that it should it should be shown in the // current category ShowFile( file, true ); } if (file->IsCompleted() && show) { CastByID(ID_BTNCLRCOMPL, GetParent(), wxButton)->Enable(true); } } } void CDownloadListCtrl::ShowFile( CPartFile* file, bool show ) { wxASSERT( file ); ListItems::iterator it = m_ListItems.find( file ); if ( it != m_ListItems.end() ) { FileCtrlItem_Struct* item = it->second; if ( show ) { // Check if the file is already being displayed long index = FindItem( -1, reinterpret_cast(item) ); if ( index == -1 ) { long newitem = InsertItem( GetItemCount(), wxEmptyString ); SetItemPtrData( newitem, reinterpret_cast(item) ); wxListItem myitem; myitem.m_itemId = newitem; myitem.SetBackgroundColour( GetBackgroundColour() ); SetItem(myitem); RefreshItem( newitem ); ShowFilesCount( 1 ); } } else { // Try to find the file and remove it long index = FindItem( -1, reinterpret_cast(item) ); if ( index > -1 ) { DeleteItem( index ); ShowFilesCount( -1 ); } } } } void CDownloadListCtrl::ChangeCategory( int newCategory ) { Freeze(); bool hasCompletedDownloads = false; // remove all displayed files with a different cat and show the correct ones // ADUNANZA BEGIN // backport #if 0 for (ListItems::const_iterator it = m_ListItems.begin(); it != m_ListItems.end(); it++) { #else for (ListItems::const_iterator it = m_ListItems.begin(); it != m_ListItems.end(); ++it) { #endif // ADUNANZA END CPartFile* file = it->second->GetFile(); bool curVisibility = file->CheckShowItemInGivenCat( m_category ); bool newVisibility = file->CheckShowItemInGivenCat( newCategory ); if (newVisibility && file->IsCompleted()) { hasCompletedDownloads = true; } // Check if the visibility of the file has changed. However, if the // current category is the default (0) category, then we can't use // curVisiblity to see if the visibility has changed but instead // have to let ShowFile() check if the file is or isn't on the list. if ( curVisibility != newVisibility || !newCategory ) { ShowFile( file, newVisibility ); } } CastByID(ID_BTNCLRCOMPL, GetParent(), wxButton)->Enable(hasCompletedDownloads); Thaw(); m_category = newCategory; } uint8 CDownloadListCtrl::GetCategory() const { return m_category; } /** * Helper-function: This function is used to gather selected items. * * @param list A pointer to the list to gather items from. * @return A list containing the selected items. */ ItemList GetSelectedItems( CDownloadListCtrl* list) { ItemList results; long index = list->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); while ( index > -1 ) { // ADUNANZA BEGIN // Backport #if 0 FileCtrlItem_Struct* item = (FileCtrlItem_Struct*)list->GetItemData( index ); #else FileCtrlItem_Struct* item = reinterpret_cast(list->GetItemData( index )); #endif // ADUNANZA END results.push_back( item ); index = list->GetNextItem( index, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); } return results; } void CDownloadListCtrl::OnCancelFile(wxCommandEvent& WXUNUSED(event)) { ItemList files = ::GetSelectedItems(this); for (ItemList::iterator it = files.begin(); it != files.end(); ) { ItemList::iterator it1 = it++; CPartFile* file = (*it1)->GetFile(); if (file) { switch (file->GetStatus()) { case PS_WAITINGFORHASH: case PS_HASHING: case PS_COMPLETING: case PS_COMPLETE: files.erase(it1); break; } } } // ADUNANZA BEGIN // backport #if 0 if (files.size()) { #else if (!files.empty()) { #endif // ADUNANZA END wxString question; if (files.size() == 1) { question = _("Are you sure that you wish to delete the selected file?"); } else { question = _("Are you sure that you wish to delete the selected files?"); } if (wxMessageBox( question, _("Cancel"), wxICON_QUESTION | wxYES_NO, this) == wxYES) { for (ItemList::iterator it = files.begin(); it != files.end(); ++it) { CPartFile* file = (*it)->GetFile(); if (file) { CoreNotify_PartFile_Delete(file); } } } } } void CDownloadListCtrl::OnSetPriority( wxCommandEvent& event ) { int priority = 0; switch ( event.GetId() ) { case MP_PRIOLOW: priority = PR_LOW; break; case MP_PRIONORMAL: priority = PR_NORMAL; break; case MP_PRIOHIGH: priority = PR_HIGH; break; case MP_PRIOAUTO: priority = PR_AUTO; break; default: wxFAIL; } ItemList files = ::GetSelectedItems( this ); for ( ItemList::iterator it = files.begin(); it != files.end(); ++it ) { CPartFile* file = (*it)->GetFile(); if ( priority == PR_AUTO ) { CoreNotify_PartFile_PrioAuto( file, true ); } else { CoreNotify_PartFile_PrioAuto( file, false ); CoreNotify_PartFile_PrioSet( file, priority, true ); } } } void CDownloadListCtrl::OnSwapSources( wxCommandEvent& event ) { ItemList files = ::GetSelectedItems( this ); for ( ItemList::iterator it = files.begin(); it != files.end(); ++it ) { CPartFile* file = (*it)->GetFile(); switch ( event.GetId() ) { case MP_SWAP_A4AF_TO_THIS: CoreNotify_PartFile_Swap_A4AF( file ); break; case MP_SWAP_A4AF_TO_THIS_AUTO: CoreNotify_PartFile_Swap_A4AF_Auto( file ); break; case MP_SWAP_A4AF_TO_ANY_OTHER: CoreNotify_PartFile_Swap_A4AF_Others( file ); break; } } } // ADUNANZA BEGIN #if !defined(CLIENT_GUI) && !defined(AMULE_DAEMON) void CDownloadListCtrl::OnAduStreamingView( wxCommandEvent& event ) { // supponendo sia un file video e che siano soddisfatte tutte e altre condizioni, credo che si dovrebbe: // 1) mettere in pausa tutti gli altri file [sarebbe bello: salvare la lista dei file che si mettono in pausa per fare auto-resume al termine dello streaming o comunque al completamento del file in preview] // 2) in qualche modo dire che per il file selezionato i chunk vanno scaricati in modo sequenziale a partire dall'inizio // 3) [DA VEDERE] spostare TUTTI gli A4F sul file di cui fare lo streaming // 4) in qualche modo, una volta che ho abastanza byte, far partire la preview ItemList files = ::GetSelectedItems( this ); if (files.size() != 1) return; // multi selection is not allowed here CPartFile* file = files.front()->GetFile(); if (!file) return; switch ( event.GetId() ) { case MP_ADUSTREAMINGVIEW_REQUEST: { std::list tmpList; long index = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_DONTCARE ); while ( index > -1 ) { CPartFile* loopfile = reinterpret_cast(GetItemData( index ))->GetFile(); if (loopfile && loopfile->IsPartFile() && (loopfile != file)) { tmpList.push_back(loopfile); } index = GetNextItem( index, wxLIST_NEXT_ALL, wxLIST_STATE_DONTCARE ); } // TEST per evitare di farlo solo sulla categoria selezionata // theApp->m_AdunanzAStreaming.request(file, tmpList); theApp->m_AdunanzAStreaming.request(file); } break; case MP_ADUSTREAMINGVIEW_START: // CoreNotify_PartFile_Swap_A4AF_Auto( file ); if (theApp->m_AdunanzAStreaming.start()) { PreviewFile(file); } break; case MP_ADUSTREAMINGVIEW_STOP: theApp->m_AdunanzAStreaming.stop(); // CoreNotify_PartFile_Swap_A4AF_Others( file ); break; default: break; } } #endif // ADUNANZA END void CDownloadListCtrl::OnSetCategory( wxCommandEvent& event ) { ItemList files = ::GetSelectedItems( this ); for ( ItemList::iterator it = files.begin(); it != files.end(); ++it ) { CoreNotify_PartFile_SetCat( (*it)->GetFile(), event.GetId() - MP_ASSIGNCAT ); ShowFile((*it)->GetFile(), false); } wxListEvent ev; OnItemSelectionChanged(ev); // clear clients that may have been shown ChangeCategory( m_category ); // This only updates the visibility of the clear completed button theApp->amuledlg->m_transferwnd->UpdateCatTabTitles(); } void CDownloadListCtrl::OnSetStatus( wxCommandEvent& event ) { ItemList files = ::GetSelectedItems( this ); for ( ItemList::iterator it = files.begin(); it != files.end(); ++it ) { CPartFile* file = (*it)->GetFile(); switch ( event.GetId() ) { case MP_PAUSE: CoreNotify_PartFile_Pause( file ); break; case MP_RESUME: CoreNotify_PartFile_Resume( file ); break; case MP_STOP: CoreNotify_PartFile_Stop( file ); break; } } } void CDownloadListCtrl::OnClearCompleted( wxCommandEvent& WXUNUSED(event) ) { ClearCompleted(); } void CDownloadListCtrl::OnGetLink(wxCommandEvent& event) { ItemList files = ::GetSelectedItems( this ); wxString URIs; for ( ItemList::iterator it = files.begin(); it != files.end(); ++it ) { CPartFile* file = (*it)->GetFile(); if ( event.GetId() == MP_GETED2KLINK ) { URIs += theApp->CreateED2kLink( file ) + wxT("\n"); } else { URIs += theApp->CreateMagnetLink( file ) + wxT("\n"); } } if ( !URIs.IsEmpty() ) { theApp->CopyTextToClipboard( URIs.BeforeLast(wxT('\n')) ); } } void CDownloadListCtrl::OnGetFeedback(wxCommandEvent& WXUNUSED(event)) { wxString feed; ItemList files = ::GetSelectedItems( this ); for (ItemList::iterator it = files.begin(); it != files.end(); ++it) { if (feed.IsEmpty()) { feed = CFormat(_("Feedback from: %s (%s)\n\n")) % thePrefs::GetUserNick() % theApp->GetFullMuleVersion(); } else { feed += wxT("\n"); } feed += (*it)->GetFile()->GetFeedback(); } if (!feed.IsEmpty()) { theApp->CopyTextToClipboard(feed); } } void CDownloadListCtrl::OnViewFileInfo( wxCommandEvent& WXUNUSED(event) ) { long index = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); if (index >= 0) { ShowFileDetailDialog(index); } } void CDownloadListCtrl::OnViewFileComments( wxCommandEvent& WXUNUSED(event) ) { ItemList files = ::GetSelectedItems( this ); if ( files.size() == 1 ) { CCommentDialogLst dialog( this, files.front()->GetFile() ); dialog.ShowModal(); } } void CDownloadListCtrl::OnPreviewFile( wxCommandEvent& WXUNUSED(event) ) { ItemList files = ::GetSelectedItems( this ); if ( files.size() == 1 ) { PreviewFile(files.front()->GetFile()); } } void CDownloadListCtrl::OnItemActivated( wxListEvent& evt ) { // ADUNANZA BEGIN // backport #if 0 CPartFile* file = ((FileCtrlItem_Struct*)GetItemData( evt.GetIndex()))->GetFile(); #else CPartFile* file = reinterpret_cast(GetItemData(evt.GetIndex()))->GetFile(); #endif // ADUNANZA END if ((!file->IsPartFile() || file->IsCompleted()) && file->PreviewAvailable()) { PreviewFile( file ); } } void CDownloadListCtrl::OnItemSelectionChanged( wxListEvent& ) { if (!m_ItemSelectionChangePending && !IsSorting()) { m_ItemSelectionChangePending = true; Notify_DownloadCtrlDoItemSelectionChanged(); } } void CDownloadListCtrl::DoItemSelectionChanged() { m_ItemSelectionChangePending = false; CKnownFileVector filesVector; filesVector.reserve(GetSelectedItemCount()); long index = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); while ( index > -1 ) { // ADUNANZA BEGIN // backport #if 0 CPartFile* file = ((FileCtrlItem_Struct*)GetItemData( index ))->GetFile(); #else CPartFile* file = reinterpret_cast(GetItemData( index ))->GetFile(); #endif // ADUNANZA END if (file->IsPartFile()) { filesVector.push_back(file); } index = GetNextItem( index, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); } std::sort(filesVector.begin(), filesVector.end()); theApp->amuledlg->m_transferwnd->clientlistctrl->ShowSources(filesVector); } void CDownloadListCtrl::OnMouseRightClick(wxListEvent& evt) { long index = CheckSelection(evt); if (index < 0) { return; } delete m_menu; m_menu = NULL; // ADUNANZA BEGIN // backport #if 0 FileCtrlItem_Struct* item = (FileCtrlItem_Struct*)GetItemData( index ); #else FileCtrlItem_Struct* item = reinterpret_cast(GetItemData( index )); #endif // ADUNANZA END m_menu = new wxMenu( _("Downloads") ); wxMenu* priomenu = new wxMenu(); priomenu->AppendCheckItem(MP_PRIOLOW, _("Low")); priomenu->AppendCheckItem(MP_PRIONORMAL, _("Normal")); priomenu->AppendCheckItem(MP_PRIOHIGH, _("High")); priomenu->AppendCheckItem(MP_PRIOAUTO, _("Auto")); m_menu->Append(MP_MENU_PRIO, _("Priority"), priomenu); m_menu->Append(MP_CANCEL, _("Cancel")); m_menu->Append(MP_STOP, _("&Stop")); m_menu->Append(MP_PAUSE, _("&Pause")); m_menu->Append(MP_RESUME, _("&Resume")); m_menu->Append(MP_CLEARCOMPLETED, _("C&lear completed")); //----------------------------------------------------- m_menu->AppendSeparator(); //----------------------------------------------------- wxMenu* extendedmenu = new wxMenu(); extendedmenu->Append(MP_SWAP_A4AF_TO_THIS, _("Swap every A4AF to this file now")); extendedmenu->AppendCheckItem(MP_SWAP_A4AF_TO_THIS_AUTO, _("Swap every A4AF to this file (Auto)")); //----------------------------------------------------- extendedmenu->AppendSeparator(); //----------------------------------------------------- extendedmenu->Append(MP_SWAP_A4AF_TO_ANY_OTHER, _("Swap every A4AF to any other file now")); //----------------------------------------------------- m_menu->Append(MP_MENU_EXTD, _("Extended Options"), extendedmenu); //----------------------------------------------------- m_menu->AppendSeparator(); //----------------------------------------------------- // ADUNANZA BEGIN #if !defined(CLIENT_GUI) //----------------------------------------------------- wxMenu* adustreamingviewmenu = new wxMenu(); adustreamingviewmenu->Append(MP_ADUSTREAMINGVIEW_REQUEST, _("Start")); //----------------------------------------------------- // adustreamingviewmenu->AppendSeparator(); //----------------------------------------------------- adustreamingviewmenu->AppendCheckItem(MP_ADUSTREAMINGVIEW_START, _("Play")); adustreamingviewmenu->Append(MP_ADUSTREAMINGVIEW_STOP, _("Cancel")); //----------------------------------------------------- m_menu->Append(MP_MENU_ADUSTREAMINGVIEW, _("AdunanzA Video Streaming"), adustreamingviewmenu); //----------------------------------------------------- m_menu->AppendSeparator(); //----------------------------------------------------- #endif // ADUNANZA END m_menu->Append(MP_VIEW, _("Preview")); m_menu->Append(MP_METINFO, _("Show file &details")); m_menu->Append(MP_VIEWFILECOMMENTS, _("Show all comments")); //----------------------------------------------------- m_menu->AppendSeparator(); //----------------------------------------------------- m_menu->Append(MP_GETMAGNETLINK, _("Copy magnet URI to clipboard")); m_menu->Append(MP_GETED2KLINK, _("Copy eD2k &link to clipboard")); m_menu->Append(MP_WS, _("Copy feedback to clipboard")); //----------------------------------------------------- m_menu->AppendSeparator(); //----------------------------------------------------- // Add dynamic entries wxMenu *cats = new wxMenu(_("Category")); if (theApp->glob_prefs->GetCatCount() > 1) { for (uint32 i = 0; i < theApp->glob_prefs->GetCatCount(); i++) { if ( i == 0 ) { cats->Append( MP_ASSIGNCAT, _("unassign") ); } else { cats->Append( MP_ASSIGNCAT + i, theApp->glob_prefs->GetCategory(i)->title ); } } } m_menu->Append(MP_MENU_CATS, _("Assign to category"), cats); m_menu->Enable(MP_MENU_CATS, (theApp->glob_prefs->GetCatCount() > 1) ); CPartFile* file = item->GetFile(); // then set state bool canStop; bool canPause; bool canCancel; bool fileResumable; if (file->GetStatus(true) != PS_ALLOCATING) { const uint8_t fileStatus = file->GetStatus(); canStop = (fileStatus != PS_ERROR) && (fileStatus != PS_COMPLETE) && (file->IsStopped() != true); canPause = (file->GetStatus() != PS_PAUSED) && canStop; fileResumable = (fileStatus == PS_PAUSED) || (fileStatus == PS_ERROR) || (fileStatus == PS_INSUFFICIENT); canCancel = fileStatus != PS_COMPLETE; } else { canStop = canPause = canCancel = fileResumable = false; } // ADUNANZA BEGIN #if !defined(CLIENT_GUI) && !defined(AMULE_DAEMON) // do not enable CANCEL, PAUSE, STOP, RESUME is STREAMING is running if (theApp->m_AdunanzAStreaming.m_status != CAdunanzAStreaming::None) { canCancel = canPause = canStop = fileResumable = false; } #endif // ADUNANZA END m_menu->Enable( MP_CANCEL, canCancel ); m_menu->Enable( MP_PAUSE, canPause ); m_menu->Enable( MP_STOP, canStop ); m_menu->Enable( MP_RESUME, fileResumable ); m_menu->Enable( MP_CLEARCOMPLETED, CastByID(ID_BTNCLRCOMPL, GetParent(), wxButton)->IsEnabled() ); wxString view; if (file->IsPartFile() && !file->IsCompleted()) { view = CFormat(wxT("%s [%s]")) % _("Preview") % file->GetPartMetFileName().RemoveExt(); // ADUNANZA BEGIN #if !defined(CLIENT_GUI) && !defined(AMULE_DAEMON) FileType candidateStreamingType = GetFiletype(file->GetFileName()); bool bEnableStreamingMenu = (candidateStreamingType == ftVideo); // per ora solo il tipo, poi anche altre cose (tipo "ho gia' uno streaming in corso", "ho abbastanza byte per fare lo streaming"...) // enable/disable Streaming menu elements according to current streaming status // Request: must be enabled only if no request is pending / a streaming operation is already running adustreamingviewmenu->Enable(MP_ADUSTREAMINGVIEW_REQUEST, (bEnableStreamingMenu && (theApp->m_AdunanzAStreaming.m_status == CAdunanzAStreaming::None))); // Start: must be enabled only if streaming is ready adustreamingviewmenu->Enable(MP_ADUSTREAMINGVIEW_START, (bEnableStreamingMenu && (theApp->m_AdunanzAStreaming.m_status == CAdunanzAStreaming::Ready))); // Stop: must be enabled only if status is not None adustreamingviewmenu->Enable(MP_ADUSTREAMINGVIEW_STOP, (bEnableStreamingMenu && (theApp->m_AdunanzAStreaming.m_status != CAdunanzAStreaming::None))); // enable Streaming only for not completed and known video file types m_menu->Enable(MP_MENU_ADUSTREAMINGVIEW, bEnableStreamingMenu); #endif // ADUNANZA END } else if ( file->IsCompleted() ) { view = _("&Open the file"); } m_menu->SetLabel(MP_VIEW, view); m_menu->Enable(MP_VIEW, file->PreviewAvailable()); FileRatingList ratingList; item->GetFile()->GetRatingAndComments(ratingList); m_menu->Enable(MP_VIEWFILECOMMENTS, !ratingList.empty()); m_menu->Check( MP_SWAP_A4AF_TO_THIS_AUTO, file->IsA4AFAuto() ); int priority = file->IsAutoDownPriority() ? PR_AUTO : file->GetDownPriority(); priomenu->Check( MP_PRIOHIGH, priority == PR_HIGH ); priomenu->Check( MP_PRIONORMAL, priority == PR_NORMAL ); priomenu->Check( MP_PRIOLOW, priority == PR_LOW ); priomenu->Check( MP_PRIOAUTO, priority == PR_AUTO ); m_menu->Enable( MP_MENU_EXTD, canPause ); bool autosort = thePrefs::AutoSortDownload(false); PopupMenu(m_menu, evt.GetPoint()); thePrefs::AutoSortDownload(autosort); delete m_menu; m_menu = NULL; } void CDownloadListCtrl::OnMouseMiddleClick(wxListEvent& evt) { // Check if clicked item is selected. If not, unselect all and select it. long index = CheckSelection(evt); if (index >= 0) { ShowFileDetailDialog(index); } } void CDownloadListCtrl::ShowFileDetailDialog(long index) { // Make list of part files in control std::vector files; int nrItems = GetItemCount(); files.reserve(nrItems); for (int i = 0; i < nrItems; i++) { // ADUNANZA BEGIN // backport #if 0 files.push_back(((FileCtrlItem_Struct*)GetItemData(i))->GetFile()); #else files.push_back(reinterpret_cast(GetItemData(i))->GetFile()); #endif // ADUNANZA END } bool autosort = thePrefs::AutoSortDownload(false); CFileDetailDialog(this, files, index).ShowModal(); thePrefs::AutoSortDownload(autosort); } void CDownloadListCtrl::OnKeyPressed( wxKeyEvent& event ) { // Check if delete was pressed switch (event.GetKeyCode()) { case WXK_NUMPAD_DELETE: case WXK_DELETE: { wxCommandEvent evt; OnCancelFile( evt ); break; } case WXK_F2: { ItemList files = ::GetSelectedItems( this ); if (files.size() == 1) { CPartFile* file = files.front()->GetFile(); // Currently renaming of completed files causes problem with kad if (file->IsPartFile()) { wxString strNewName = ::wxGetTextFromUser( _("Enter new name for this file:"), _("File rename"), file->GetFileName().GetPrintable()); CPath newName = CPath(strNewName); if (newName.IsOk() && (newName != file->GetFileName())) { theApp->sharedfiles->RenameFile(file, newName); } } } break; } default: event.Skip(); } } void CDownloadListCtrl::OnDrawItem( int item, wxDC* dc, const wxRect& rect, const wxRect& rectHL, bool highlighted) { // Don't do any drawing if there's nobody to see it. if ( !theApp->amuledlg->IsDialogVisible( CamuleDlg::DT_TRANSFER_WND ) ) { return; } // ADUNANZA BEGIN // backport #if 0 FileCtrlItem_Struct* content = (FileCtrlItem_Struct *)GetItemData(item); #else FileCtrlItem_Struct* content = reinterpret_cast(GetItemData(item)); #endif // ADUNANZA END // Define text-color and background // and the border of the drawn area if (highlighted) { CMuleColour colour; if (GetFocus()) { dc->SetBackground(m_hilightBrush); colour = m_hilightBrush.GetColour(); } else { dc->SetBackground(m_hilightUnfocusBrush); colour = m_hilightUnfocusBrush.GetColour(); } dc->SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT)); dc->SetPen( colour.Blend(65).GetPen() ); } else { dc->SetBackground(*(wxTheBrushList->FindOrCreateBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOX), wxSOLID))); dc->SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); dc->SetPen(*wxTRANSPARENT_PEN); } dc->SetBrush( dc->GetBackground() ); dc->DrawRectangle( rectHL.x, rectHL.y, rectHL.width, rectHL.height ); dc->SetPen(*wxTRANSPARENT_PEN); if (!highlighted || !GetFocus() ) { // If we have category, override textforeground with what category tells us. CPartFile *file = content->GetFile(); if ( file->GetCategory() ) { dc->SetTextForeground(CMuleColour(theApp->glob_prefs->GetCatColor(file->GetCategory())) ); } } // Various constant values we use const int iTextOffset = ( rect.GetHeight() - dc->GetCharHeight() ) / 2; const int iOffset = 4; wxRect cur_rec( iOffset, rect.y, 0, rect.height ); for (int i = 0; i < GetColumnCount(); i++) { wxListItem listitem; GetColumn(i, listitem); if (listitem.GetWidth() > 2*iOffset) { cur_rec.width = listitem.GetWidth() - 2*iOffset; // Make a copy of the current rectangle so we can apply specific tweaks wxRect target_rec = cur_rec; if ( i == ColumnProgress ) { // Double the offset to make room for the cirle-marker target_rec.x += iOffset; target_rec.width -= iOffset; } else { // will ensure that text is about in the middle ;) target_rec.y += iTextOffset; } // Draw the item DrawFileItem(dc, i, target_rec, content); } // Increment to the next column cur_rec.x += listitem.GetWidth(); } } void CDownloadListCtrl::DrawFileItem( wxDC* dc, int nColumn, const wxRect& rect, FileCtrlItem_Struct* item ) const { wxDCClipper clipper( *dc, rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight() ); const CPartFile* file = item->GetFile(); // Used to contain the contenst of cells that dont need any fancy drawing, just text. wxString text; switch (nColumn) { // Part Number case ColumnPart: { if (file->IsPartFile() && !file->IsCompleted()) { text = CFormat(wxT("%03d")) % file->GetPartMetNumber(); } break; } // Filename case ColumnFileName: { wxString filename = file->GetFileName().GetPrintable(); if (file->HasRating() || file->HasComment()) { int image = Client_CommentOnly_Smiley; if (file->HasRating()) { image = Client_InvalidRating_Smiley + file->UserRating() - 1; } wxASSERT(image >= Client_InvalidRating_Smiley); wxASSERT(image <= Client_CommentOnly_Smiley); int imgWidth = 16; // it's already centered by OnDrawItem() ... m_ImageList.Draw(image, *dc, rect.GetX(), rect.GetY() - 1, wxIMAGELIST_DRAW_TRANSPARENT); dc->DrawText(filename, rect.GetX() + imgWidth + 4, rect.GetY()); } else { dc->DrawText(filename, rect.GetX(), rect.GetY()); } break; } // Filesize case ColumnSize: text = CastItoXBytes( file->GetFileSize() ); break; // Transferred case ColumnTransferred: text = CastItoXBytes( file->GetTransferred() ); break; // Completed case ColumnCompleted: text = CastItoXBytes( file->GetCompletedSize() ); break; // Speed case ColumnSpeed: if ( file->GetTransferingSrcCount() ) { text = CFormat(_("%.1f kB/s")) % file->GetKBpsDown(); } break; // Progress case ColumnProgress:{ if (thePrefs::ShowProgBar()) { int iWidth = rect.GetWidth() - 2; int iHeight = rect.GetHeight() - 2; // DO NOT DRAW IT ALL THE TIME uint32 dwTicks = GetTickCount(); wxMemoryDC cdcStatus; // ADUNANZA BEGIN // backport #if 0 if ( item->dwUpdated < dwTicks || !item->status || iWidth != item->status->GetWidth() ) { #else if (item->dwUpdated < dwTicks || file->GetHashingProgress() > 0 || !item->status || iWidth != item->status->GetWidth()) { #endif // ADUNANZA END if ( item->status == NULL) { item->status = new wxBitmap(iWidth, iHeight); } else if ( item->status->GetWidth() != iWidth ) { // Only recreate if the size has changed item->status->Create(iWidth, iHeight); } cdcStatus.SelectObject( *item->status ); if ( thePrefs::UseFlatBar() ) { DrawFileStatusBar( file, &cdcStatus, wxRect(0, 0, iWidth, iHeight), true); } else { DrawFileStatusBar( file, &cdcStatus, wxRect(1, 1, iWidth - 2, iHeight - 2), false); // Draw black border cdcStatus.SetPen( *wxBLACK_PEN ); cdcStatus.SetBrush( *wxTRANSPARENT_BRUSH ); cdcStatus.DrawRectangle( 0, 0, iWidth, iHeight ); } item->dwUpdated = dwTicks + 5000; // Plus five seconds } else { cdcStatus.SelectObject( *item->status ); } dc->Blit( rect.GetX(), rect.GetY() + 1, iWidth, iHeight, &cdcStatus, 0, 0); if (thePrefs::ShowPercent()) { // ADUNANZA BEGIN // backport #if 0 // Percentage of completing // We strip anything below the first decimal point, // to avoid Format doing roundings float percent = floor( file->GetPercentCompleted() * 10.0f ) / 10.0f; #else // Percentage of completing or hashing uint16 hashingProgress = file->GetHashingProgress(); double percent = hashingProgress == 0 ? file->GetPercentCompleted() : 100.0 * hashingProgress * PARTSIZE / file->GetFileSize(); if (percent > 100.0) { percent = 100.0; } #endif // ADUNANZA END wxString buffer = CFormat(wxT("%.1f%%")) % percent; int middlex = (2*rect.GetX() + rect.GetWidth()) >> 1; int middley = (2*rect.GetY() + rect.GetHeight()) >> 1; wxCoord textwidth, textheight; dc->GetTextExtent(buffer, &textwidth, &textheight); wxColour AktColor = dc->GetTextForeground(); // ADUNANZA BEGIN // backport #if 0 if (thePrefs::ShowProgBar()) { #else // Ordinary progress bar: white percentage // Hashing progressbar (green/yellow): black percentage if (thePrefs::ShowProgBar() && hashingProgress == 0) { #endif // ADUNANZA END dc->SetTextForeground(*wxWHITE); } else { dc->SetTextForeground(*wxBLACK); } dc->DrawText(buffer, middlex - (textwidth >> 1), middley - (textheight >> 1)); dc->SetTextForeground(AktColor); } } break; } // Sources case ColumnSources: { // ADUNANZA BEGIN uint16 adunanza_sc = file->GetAduSourceCount(); // ADUNANZA END uint16 sc = file->GetSourceCount(); uint16 ncsc = file->GetNotCurrentSourcesCount(); // ADUNANZA BEGIN // Parte di codice spostata: se ho capito bene // per prima cosa si vuole avere // text // riferita ai sourcecount di Adunanza #if 0 if ( ncsc ) { text = CFormat(wxT("%i/%i")) % (sc - ncsc) % sc; } else { text = CFormat(wxT("%i")) % sc; } #else // text = wxString::Format( wxT("%i"), adunanza_sc ); text = CFormat( wxT("%i")) % adunanza_sc; #endif // ADUNANZA END if ( file->GetSrcA4AFCount() ) { text += CFormat(wxT("+%i")) % file->GetSrcA4AFCount(); } if ( file->GetTransferingSrcCount() ) { text += CFormat(wxT(" (%i)")) % file->GetTransferingSrcCount(); // ADUNANZA BEGIN if ( ncsc ) { // text += wxString::Format( wxT(" E[%i/%i]" ), sc - ncsc, sc ); text += CFormat( wxT(" E[%i/%i]" )) % (sc - ncsc) % sc; } else { text += CFormat( wxT(" E[%i]")) % sc; } // ADUNANZA END } break; } // Priority case ColumnPriority: text = PriorityToStr( file->GetDownPriority(), file->IsAutoDownPriority() ); break; // File-status case ColumnStatus: text = file->getPartfileStatus(); break; // Remaining case ColumnTimeRemaining: { if ((file->GetStatus() != PS_COMPLETING) && file->IsPartFile()) { uint64 remainSize = file->GetFileSize() - file->GetCompletedSize(); sint32 remainTime = file->getTimeRemaining(); if (remainTime >= 0) { text = CastSecondsToHM(remainTime); } else { text = _("Unknown"); } text += wxT(" (") + CastItoXBytes(remainSize) + wxT(")"); } break; } // Last seen completed case ColumnLastSeenComplete: { if ( file->lastseencomplete ) { text = wxDateTime( file->lastseencomplete ).Format( _("%y/%m/%d %H:%M:%S") ); } else { text = _("Unknown"); } break; } // Last received case ColumnLastReception: { const time_t lastReceived = file->GetLastChangeDatetime(); if (lastReceived) { text = wxDateTime(lastReceived).Format( _("%y/%m/%d %H:%M:%S") ); } else { text = _("Unknown"); } } } if ( !text.IsEmpty() ) { dc->DrawText( text, rect.GetX(), rect.GetY() ); } } wxString CDownloadListCtrl::GetTTSText(unsigned item) const { // ADUNANZA BEGIN // backport #if 0 return ((FileCtrlItem_Struct*)GetItemData(item))->GetFile()->GetFileName().GetPrintable(); #else return reinterpret_cast(GetItemData(item))->GetFile()->GetFileName().GetPrintable(); #endif // ADUNANZA END } int CDownloadListCtrl::SortProc(wxUIntPtr param1, wxUIntPtr param2, long sortData) { // ADUNANZA BEGIN // backport #if 0 FileCtrlItem_Struct* item1 = (FileCtrlItem_Struct*)param1; FileCtrlItem_Struct* item2 = (FileCtrlItem_Struct*)param2; #else FileCtrlItem_Struct* item1 = reinterpret_cast(param1); FileCtrlItem_Struct* item2 = reinterpret_cast(param2); #endif // ADUNANZA END int sortMod = (sortData & CMuleListCtrl::SORT_DES) ? -1 : 1; sortData &= CMuleListCtrl::COLUMN_MASK; // We modify the result so that it matches with ascending or decending return sortMod * Compare( item1->GetFile(), item2->GetFile(), sortData); } int CDownloadListCtrl::Compare( const CPartFile* file1, const CPartFile* file2, long lParamSort) { int result = 0; switch (lParamSort) { // Sort by part number case ColumnPart: result = CmpAny( file1->GetPartMetNumber(), file2->GetPartMetNumber() ); break; // Sort by filename case ColumnFileName: result = CmpAny( file1->GetFileName(), file2->GetFileName() ); break; // Sort by size case ColumnSize: result = CmpAny( file1->GetFileSize(), file2->GetFileSize() ); break; // Sort by transferred case ColumnTransferred: result = CmpAny( file1->GetTransferred(), file2->GetTransferred() ); break; // Sort by completed case ColumnCompleted: result = CmpAny( file1->GetCompletedSize(), file2->GetCompletedSize() ); break; // Sort by speed case ColumnSpeed: result = CmpAny( file1->GetKBpsDown() * 1024, file2->GetKBpsDown() * 1024 ); break; // Sort by percentage completed case ColumnProgress: result = CmpAny( file1->GetPercentCompleted(), file2->GetPercentCompleted() ); break; // Sort by number of sources case ColumnSources: result = CmpAny( // ADUNANZA BEGIN #if 0 file1->GetSourceCount(), file2->GetSourceCount() ); #else file1->GetAduSourceCount(), file2->GetAduSourceCount() ); #endif // ADUNANZA END break; // Sort by priority case ColumnPriority: result = CmpAny( file1->GetDownPriority(), file2->GetDownPriority() ); break; // Sort by status case ColumnStatus: result = CmpAny( file1->getPartfileStatusRang(), file2->getPartfileStatusRang() ); break; // Sort by remaining time case ColumnTimeRemaining: if (file1->getTimeRemaining() == -1) { if (file2->getTimeRemaining() == -1) { result = 0; } else { result = 1; } } else { if (file2->getTimeRemaining() == -1) { result = -1; } else { result = CmpAny( file1->getTimeRemaining(), file2->getTimeRemaining() ); } } break; // Sort by last seen complete case ColumnLastSeenComplete: result = CmpAny( file1->lastseencomplete, file2->lastseencomplete ); break; // Sort by last reception case ColumnLastReception: result = CmpAny( file1->GetLastChangeDatetime(), file2->GetLastChangeDatetime() ); break; } return result; } void CDownloadListCtrl::ClearCompleted() { CastByID(ID_BTNCLRCOMPL, GetParent(), wxButton)->Enable(false); // Search for completed files ListOfUInts32 toClear; for ( ListItems::iterator it = m_ListItems.begin(); it != m_ListItems.end(); ) { FileCtrlItem_Struct* item = it->second; ++it; CPartFile* file = item->GetFile(); if (file->IsCompleted() && file->CheckShowItemInGivenCat(m_category)) { toClear.push_back(file->ECID()); } } if (!toClear.empty()) { theApp->downloadqueue->ClearCompleted(toClear); } } void CDownloadListCtrl::ShowFilesCount( int diff ) { m_filecount += diff; wxStaticText* label = CastByName( wxT("downloadsLabel"), GetParent(), wxStaticText ); label->SetLabel(CFormat(_("Downloads (%i)")) % m_filecount); label->GetParent()->Layout(); } static const CMuleColour crHave(104, 104, 104); static const CMuleColour crFlatHave(0, 0, 0); static const CMuleColour crPending(255, 208, 0); static const CMuleColour crFlatPending(255, 255, 100); static const CMuleColour crProgress(0, 224, 0); static const CMuleColour crFlatProgress(0, 150, 0); static const CMuleColour crMissing(255, 0, 0); void CDownloadListCtrl::DrawFileStatusBar( const CPartFile* file, wxDC* dc, const wxRect& rect, bool bFlat ) const { static CBarShader s_ChunkBar(16); s_ChunkBar.SetHeight(rect.height); s_ChunkBar.SetWidth(rect.width); s_ChunkBar.SetFileSize( file->GetFileSize() ); s_ChunkBar.Set3dDepth( thePrefs::Get3DDepth() ); if ( file->IsCompleted() || file->GetStatus() == PS_COMPLETING ) { s_ChunkBar.Fill( bFlat ? crFlatProgress : crProgress ); s_ChunkBar.Draw(dc, rect.x, rect.y, bFlat); return; } // ADUNANZA BEGIN // backport else if (file->GetHashingProgress() > 0) { uint64 left = file->GetHashingProgress() * PARTSIZE; if (left < file->GetFileSize() - 1) { // Fill the amount not yet hashed with yellow s_ChunkBar.FillRange(left + 1, file->GetFileSize() - 1, bFlat ? crFlatPending : crPending); } else { left = file->GetFileSize() - 1; } // Fill the amount already hashed with green s_ChunkBar.FillRange(0, left, bFlat ? crFlatProgress : crProgress); s_ChunkBar.Draw(dc, rect.x, rect.y, bFlat); return; } // ADUNANZA END // Part availability ( of missing parts ) const CGapList& gaplist = file->GetGapList(); CGapList::const_iterator it = gaplist.begin(); uint64 lastGapEnd = 0; CMuleColour colour; for (; it != gaplist.end(); ++it) { // Start position uint32 start = ( it.start() / PARTSIZE ); // fill the Have-Part (between this gap and the last) if (it.start()) { s_ChunkBar.FillRange(lastGapEnd + 1, it.start() - 1, bFlat ? crFlatHave : crHave); } lastGapEnd = it.end(); // End position uint32 end = ( it.end() / PARTSIZE ) + 1; // Avoid going past the filesize. Dunno if this can happen, but the old code did check. if ( end > file->GetPartCount() ) { end = file->GetPartCount(); } // Place each gap, one PART at a time for ( uint64 i = start; i < end; ++i ) { if ( i < file->m_SrcpartFrequency.size() && file->m_SrcpartFrequency[i]) { int blue = 210 - ( 22 * ( file->m_SrcpartFrequency[i] - 1 ) ); colour.Set(0, ( blue < 0 ? 0 : blue ), 255 ); } else { colour = crMissing; } if ( file->IsStopped() ) { colour.Blend(50); } uint64 gap_begin = ( i == start ? it.start() : PARTSIZE * i ); uint64 gap_end = ( i == end - 1 ? it.end() : PARTSIZE * ( i + 1 ) - 1 ); s_ChunkBar.FillRange( gap_begin, gap_end, colour); } } // fill the last Have-Part (between this gap and the last) s_ChunkBar.FillRange(lastGapEnd + 1, file->GetFileSize() - 1, bFlat ? crFlatHave : crHave); // Pending parts const CPartFile::CReqBlockPtrList& requestedblocks_list = file->GetRequestedBlockList(); CPartFile::CReqBlockPtrList::const_iterator it2 = requestedblocks_list.begin(); // adjacing pending parts must be joined to avoid bright lines between them uint64 lastStartOffset = 0; uint64 lastEndOffset = 0; colour = bFlat ? crFlatPending : crPending; if ( file->IsStopped() ) { colour.Blend(50); } for (; it2 != requestedblocks_list.end(); ++it2) { if ((*it2)->StartOffset > lastEndOffset + 1) { // not adjacing, draw last block s_ChunkBar.FillRange(lastStartOffset, lastEndOffset, colour); lastStartOffset = (*it2)->StartOffset; lastEndOffset = (*it2)->EndOffset; } else { // adjacing, grow block lastEndOffset = (*it2)->EndOffset; } } s_ChunkBar.FillRange(lastStartOffset, lastEndOffset, colour); // Draw the progress-bar s_ChunkBar.Draw( dc, rect.x, rect.y, bFlat ); // Green progressbar width int width = (int)(( (float)rect.width / (float)file->GetFileSize() ) * file->GetCompletedSize() ); if ( bFlat ) { dc->SetBrush( crFlatProgress.GetBrush() ); dc->DrawRectangle( rect.x, rect.y, width, 3 ); } else { // Draw the two black lines for 3d-effect dc->SetPen( *wxBLACK_PEN ); dc->DrawLine( rect.x, rect.y + 0, rect.x + width, rect.y + 0 ); dc->DrawLine( rect.x, rect.y + 2, rect.x + width, rect.y + 2 ); // Draw the green line dc->SetPen( *(wxThePenList->FindOrCreatePen( crProgress , 1, wxSOLID ) )); dc->DrawLine( rect.x, rect.y + 1, rect.x + width, rect.y + 1 ); } } #ifdef __WXMSW__ # define QUOTE wxT("\"") #else # define QUOTE wxT("\'") #endif void CDownloadListCtrl::PreviewFile(CPartFile* file) { wxString command; // If no player set in preferences, use mplayer. // And please, do a warning also :P if (thePrefs::GetVideoPlayer().IsEmpty()) { wxMessageBox(_( "To prevent this warning to show up in every preview,\nset your preferred video player in preferences (default is mplayer)."), _("File preview"), wxOK, this); // Since newer versions for some reason mplayer does not automatically // select video output device and needs a parameter, go figure... // ADUNANZA BEGIN #if 0 command = wxT("xterm -T \"aMule Preview\" -iconic -e mplayer ") QUOTE wxT("$file") QUOTE; #else command = wxT("xterm -T \"aMuleAdunanzA Preview\" -iconic -e mplayer ") QUOTE wxT("$file") QUOTE; #endif // ADUNANZA END } else { command = thePrefs::GetVideoPlayer(); } wxString partFile; // File name with full path wxString partName; // File name only, without path // Check if we are (pre)viewing a completed file or not if (!file->IsCompleted()) { // Remove the .met and see if out video player specifiation uses the magic string partName = file->GetPartMetFileName().RemoveExt().GetRaw(); partFile = thePrefs::GetTempDir().JoinPaths(file->GetPartMetFileName().RemoveExt()).GetRaw(); } else { // This is a complete file // FIXME: This is probably not going to work if the filenames are mangled ... partName = file->GetFileName().GetRaw(); partFile = file->GetFullName().GetRaw(); } // Compatibility with old behaviour if (!command.Replace(wxT("$file"), wxT("%PARTFILE"))) { if ((command.Find(wxT("%PARTFILE")) == wxNOT_FOUND) && (command.Find(wxT("%PARTNAME")) == wxNOT_FOUND)) { // No magic string, so we just append the filename to the player command // Need to use quotes in case filename contains spaces command << wxT(" ") << QUOTE << wxT("%PARTFILE") << QUOTE; } } #ifndef __WXMSW__ // We have to escape quote characters in the file name, otherwise arbitrary // options could be passed to the player. partFile.Replace(QUOTE, wxT("\\") QUOTE); partName.Replace(QUOTE, wxT("\\") QUOTE); #endif command.Replace(wxT("%PARTFILE"), partFile); command.Replace(wxT("%PARTNAME"), partName); // We can't use wxShell here, it blocks the app CTerminationProcess *p = new CTerminationProcess(command); int ret = wxExecute(command, wxEXEC_ASYNC, p); bool ok = ret > 0; if (!ok) { delete p; AddLogLineC(CFormat( _("ERROR: Failed to execute external media-player! Command: `%s'") ) % command ); } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/AsyncDNS.h0000644000175000017500000000367512050266603020125 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef ASYNCDNS_H #define ASYNCDNS_H #include #include // Implementation of Asynchronous dns resolving using wxThread // and internal wxIPV4address handling of dns class wxEvtHandler; enum DnsSolveType { DNS_UDP, DNS_SOURCE, DNS_SERVER_CONNECT }; // Time between DNS solving the same address // 30 minutes * 60 s/m * 1000 ms/s #define DNS_SOLVE_TIME 30*60*1000 class CAsyncDNS : public wxThread { public: /** Note: wxChar* is used to circument the thread-unsafe wxString reference counting. */ CAsyncDNS(const wxChar* ipName, DnsSolveType type, wxEvtHandler* handler, void* socket = NULL); virtual ExitCode Entry(); private: DnsSolveType m_type; wxString m_ipName; void* m_socket; wxEvtHandler* m_handler; }; #endif // ASYNCDNS_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/FileDetailDialog.h0000644000175000017500000000442012050266603021612 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef FILEDETAILDIALOG_H #define FILEDETAILDIALOG_H #include class CPartFile; // CFileDetailDialog dialog class CFileDetailDialog : public wxDialog { public: CFileDetailDialog(wxWindow *parent, std::vector & files, int index); virtual ~CFileDetailDialog(); protected: void OnTimer(wxTimerEvent& evt); DECLARE_EVENT_TABLE() private: void UpdateData(bool resetFilename); std::vector & m_files; CPartFile* m_file; int m_index; wxTimer m_timer; bool m_filenameChanged; void OnClosewnd(wxCommandEvent& evt); void FillSourcenameList(); void setEnableForApplyButton(); void setValueForFilenameTextEdit(const wxString &s); void resetValueForFilenameTextEdit(); void OnBnClickedButtonStrip(wxCommandEvent& evt); void OnBnClickedShowComment(wxCommandEvent& evt); void OnBnClickedTakeOver(wxCommandEvent& evt); void OnListClickedTakeOver(wxListEvent& evt); void OnTextFileNameChange(wxCommandEvent& evt); void OnBnClickedOk(wxCommandEvent& evt); void OnBnClickedApply(wxCommandEvent& evt); void OnBnClickedPrevFile(wxCommandEvent& evt); void OnBnClickedNextFile(wxCommandEvent& evt); }; #endif // FILEDETAILDIALOG_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/Timer.h0000644000175000017500000000437512050266603017561 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef TIMER_H #define TIMER_H class wxEvtHandler; class CTimerThread; #include /** * Replacement for wxTimer as it doesn't work on non-X builds */ class CTimer { public: CTimer(wxEvtHandler *owner, int timerid = -1); ~CTimer(); /** * Starts the timer. * * @param millisecs The frequency of events. * @param oneShot Specifies if only one event should be produced. */ bool Start(int millisecs, bool oneShot = false); /** * Returns true if the timer is running. */ bool IsRunning() const; /** * Stops the timer. * * Note that this does not delete the actual thread * immediatly, but no new events will be queued after * calling this function. */ void Stop(); private: CTimerThread* m_thread; wxEvtHandler* m_owner; int m_id; }; class CTimerEvent : public wxEvent { public: CTimerEvent(int id = 0); virtual wxEvent* Clone() const; }; DECLARE_LOCAL_EVENT_TYPE(MULE_EVT_TIMER, -1) typedef void (wxEvtHandler::*MuleTimerEventFunction)(CTimerEvent&); #define EVT_MULE_TIMER(id, func) \ DECLARE_EVENT_TABLE_ENTRY(MULE_EVT_TIMER, id, -1, \ (wxObjectEventFunction) (wxEventFunction) \ wxStaticCastEvent(MuleTimerEventFunction, &func), (wxObject*) NULL), #endif /* TIMER_H */ // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ExternalConn.cpp0000644000175000017500000023610312050266603021430 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 Kry ( elkry@sourceforge.net / http://www.amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2008-2011 Froenchenko Leonid (lfroen@gmail.com) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifdef HAVE_CONFIG_H #include "config.h" // Needed for VERSION #endif #include // Needed for CECSocket #include // Needed for CFormat #include #include #include "ExternalConn.h" // Interface declarations #include "updownclient.h" // Needed for CUpDownClient #include "Server.h" // Needed for CServer #include "ServerList.h" // Needed for CServerList #include "PartFile.h" // Needed for CPartFile #include "ServerConnect.h" // Needed for CServerConnect #include "UploadQueue.h" // Needed for CUploadQueue #include "amule.h" // Needed for theApp #include "SearchList.h" // Needed for GetSearchResults #include "ClientList.h" #include "Preferences.h" // Needed for CPreferences #include "Logger.h" #include "GuiEvents.h" // Needed for Notify_* macros #include "Statistics.h" // Needed for theStats #include "KnownFileList.h" // Needed for CKnownFileList #include "Friend.h" #include "FriendList.h" #include "RandomFunctions.h" #include "kademlia/kademlia/Kademlia.h" #include "kademlia/kademlia/UDPFirewallTester.h" // ADUNANZA BEGIN // backport #include "Statistics.h" // ADUNANZA END //-------------------- File_Encoder -------------------- /* * Encode 'obtained parts' info to be sent to remote gui */ class CKnownFile_Encoder { // number of sources for each part for progress bar colouring RLE_Data m_enc_data; protected: const CKnownFile *m_file; public: CKnownFile_Encoder(const CKnownFile *file = 0) { m_file = file; } virtual ~CKnownFile_Encoder() {} virtual void Encode(CECTag *parent_tag); virtual void ResetEncoder() { m_enc_data.ResetEncoder(); } virtual void SetShared() { } virtual bool IsShared() { return true; } virtual bool IsPartFile_Encoder() { return false; } const CKnownFile * GetFile() { return m_file; } }; /*! * PartStatus strings and gap lists are quite long - RLE encoding will help. * * Instead of sending each time full part-status string, send * RLE encoded difference from previous one. * * PartFileEncoderData class is used for decode only, * while CPartFile_Encoder is used for encode only. */ class CPartFile_Encoder : public CKnownFile_Encoder { // blocks requested for download RLE_Data m_req_status; // gap list RLE_Data m_gap_status; // source names SourcenameItemMap m_sourcenameItemMap; // counter for unique source name ids int m_sourcenameID; // not all part files are shared (only when at least one part is complete) bool m_shared; // cast inherited member to CPartFile // ADUNANZA BEGIN // backport #if 0 CPartFile * m_PartFile() { wxASSERT(m_file->IsCPartFile()); return (CPartFile *)m_file; } #else const CPartFile * m_PartFile() { wxCHECK(m_file->IsCPartFile(), NULL); return static_cast(m_file); } #endif // ADUNANZA END public: // encoder side CPartFile_Encoder(const CPartFile *file = 0) : CKnownFile_Encoder(file) { m_sourcenameID = 0; m_shared = false; } virtual ~CPartFile_Encoder() {} // encode - take data from m_file virtual void Encode(CECTag *parent_tag); // Encoder may reset history if full info requested virtual void ResetEncoder(); virtual void SetShared() { m_shared = true; } virtual bool IsShared() { return m_shared; } virtual bool IsPartFile_Encoder() { return true; } }; class CFileEncoderMap : public std::map { typedef std::set IDSet; public: ~CFileEncoderMap(); void UpdateEncoders(); }; CFileEncoderMap::~CFileEncoderMap() { // DeleteContents() causes infinite recursion here! // ADUNANZA BEGIN // backport #if 0 for (iterator it = begin(); it != end(); it++) { #else for (iterator it = begin(); it != end(); ++it) { #endif // ADUNANZA END delete it->second; } } // Check if encoder contains files that are no longer used // or if we have new files without encoder yet. void CFileEncoderMap::UpdateEncoders() { IDSet curr_files, dead_files; // Downloads std::vector downloads; theApp->downloadqueue->CopyFileList(downloads, true); for (uint32 i = downloads.size(); i--;) { uint32 id = downloads[i]->ECID(); curr_files.insert(id); if (!count(id)) { (*this)[id] = new CPartFile_Encoder(downloads[i]); } } // Shares std::vector shares; theApp->sharedfiles->CopyFileList(shares); for (uint32 i = shares.size(); i--;) { uint32 id = shares[i]->ECID(); // Check if it is already there. // The curr_files.count(id) is enough, the IsCPartFile() is just a speedup. if (shares[i]->IsCPartFile() && curr_files.count(id)) { (*this)[id]->SetShared(); continue; } curr_files.insert(id); if (!count(id)) { (*this)[id] = new CKnownFile_Encoder(shares[i]); } } // Check for removed files, and store them in a set for deletion. // (std::map documentation is unclear if a construct like // iterator to_del = it++; erase(to_del) ; // works or invalidates it too.) // ADUNANZA BEGIN // backport #if 0 for (iterator it = begin(); it != end(); it++) { #else for (iterator it = begin(); it != end(); ++it) { #endif // ADUNANZA END if (!curr_files.count(it->first)) { dead_files.insert(it->first); } } // then delete them // ADUNANZA BEGIN // backport #if 0 for (IDSet::iterator it = dead_files.begin(); it != dead_files.end(); it++) { #else for (IDSet::iterator it = dead_files.begin(); it != dead_files.end(); ++it) { #endif // ADUNANZA END iterator it2 = find(*it); delete it2->second; erase(it2); } } //-------------------- CECServerSocket -------------------- class CECServerSocket : public CECMuleSocket { public: CECServerSocket(ECNotifier *notifier); virtual ~CECServerSocket(); virtual const CECPacket *OnPacketReceived(const CECPacket *packet, uint32 trueSize); virtual void OnLost(); virtual void WriteDoneAndQueueEmpty(); void ResetLog() { m_LoggerAccess.Reset(); } private: ECNotifier *m_ec_notifier; const CECPacket *Authenticate(const CECPacket *); enum { CONN_INIT, CONN_SALT_SENT, CONN_ESTABLISHED, CONN_FAILED } m_conn_state; uint64_t m_passwd_salt; CLoggerAccess m_LoggerAccess; CFileEncoderMap m_FileEncoder; CObjTagMap m_obj_tagmap; CECPacket *ProcessRequest2(const CECPacket *request); virtual bool IsAuthorized() { return m_conn_state == CONN_ESTABLISHED; } }; CECServerSocket::CECServerSocket(ECNotifier *notifier) : CECMuleSocket(true), m_conn_state(CONN_INIT), m_passwd_salt(GetRandomUint64()) { wxASSERT(theApp->ECServerHandler); theApp->ECServerHandler->AddSocket(this); m_ec_notifier = notifier; } CECServerSocket::~CECServerSocket() { wxASSERT(theApp->ECServerHandler); theApp->ECServerHandler->RemoveSocket(this); } const CECPacket *CECServerSocket::OnPacketReceived(const CECPacket *packet, uint32 trueSize) { packet->DebugPrint(true, trueSize); const CECPacket *reply = NULL; if (m_conn_state == CONN_FAILED) { // Client didn't close the socket when authentication failed. AddLogLineN(_("Client sent packet after authentication failed.")); CloseSocket(); } if (m_conn_state != CONN_ESTABLISHED) { // This is called twice: // 1) send salt // 2) verify password reply = Authenticate(packet); } else { reply = ProcessRequest2(packet); } return reply; } void CECServerSocket::OnLost() { AddLogLineN(_("External connection closed.")); theApp->ECServerHandler->m_ec_notifier->Remove_EC_Client(this); DestroySocket(); } void CECServerSocket::WriteDoneAndQueueEmpty() { if ( HaveNotificationSupport() && (m_conn_state == CONN_ESTABLISHED) ) { CECPacket *packet = m_ec_notifier->GetNextPacket(this); if ( packet ) { SendPacket(packet); } } else { //printf("[EC] %p: WriteDoneAndQueueEmpty but notification disabled\n", this); } } //-------------------- ExternalConn -------------------- enum { // id for sockets SERVER_ID = 1000 }; BEGIN_EVENT_TABLE(ExternalConn, wxEvtHandler) EVT_SOCKET(SERVER_ID, ExternalConn::OnServerEvent) END_EVENT_TABLE() ExternalConn::ExternalConn(amuleIPV4Address addr, wxString *msg) { wxString msgLocal; m_ECServer = NULL; // Are we allowed to accept External Connections? if ( thePrefs::AcceptExternalConnections() ) { // We must have a valid password, otherwise we will not allow EC connections if (thePrefs::ECPassword().IsEmpty()) { *msg += wxT("External connections disabled due to empty password!\n"); AddLogLineC(_("External connections disabled due to empty password!")); return; } // Create the socket m_ECServer = new wxSocketServer(addr, wxSOCKET_REUSEADDR); m_ECServer->SetEventHandler(*this, SERVER_ID); m_ECServer->SetNotify(wxSOCKET_CONNECTION_FLAG); m_ECServer->Notify(true); int port = addr.Service(); wxString ip = addr.IPAddress(); if (m_ECServer->Ok()) { msgLocal = CFormat(wxT("*** TCP socket (ECServer) listening on %s:%d")) % ip % port; *msg += msgLocal + wxT("\n"); AddLogLineN(msgLocal); } else { msgLocal = CFormat(wxT("Could not listen for external connections at %s:%d!")) % ip % port; *msg += msgLocal + wxT("\n"); AddLogLineN(msgLocal); } } else { *msg += wxT("External connections disabled in config file\n"); AddLogLineN(_("External connections disabled in config file")); } m_ec_notifier = new ECNotifier(); } ExternalConn::~ExternalConn() { KillAllSockets(); delete m_ECServer; delete m_ec_notifier; } void ExternalConn::AddSocket(CECServerSocket *s) { wxASSERT(s); socket_list.insert(s); } void ExternalConn::RemoveSocket(CECServerSocket *s) { wxASSERT(s); socket_list.erase(s); } void ExternalConn::KillAllSockets() { AddDebugLogLineN(logGeneral, CFormat(wxT("ExternalConn::KillAllSockets(): %d sockets to destroy.")) % socket_list.size()); SocketSet::iterator it = socket_list.begin(); while (it != socket_list.end()) { CECServerSocket *s = *(it++); s->Close(); s->Destroy(); } // ADUNANZA BEGIN // Backport socket_list.clear(); // ADUNANZA END } void ExternalConn::ResetAllLogs() { SocketSet::iterator it = socket_list.begin(); while (it != socket_list.end()) { CECServerSocket *s = *(it++); s->ResetLog(); } } void ExternalConn::OnServerEvent(wxSocketEvent& WXUNUSED(event)) { CECServerSocket *sock = new CECServerSocket(m_ec_notifier); // Accept new connection if there is one in the pending // connections queue, else exit. We use Accept(FALSE) for // non-blocking accept (although if we got here, there // should ALWAYS be a pending connection). if ( m_ECServer->AcceptWith(*sock, false) ) { AddLogLineN(_("New external connection accepted")); } else { delete sock; AddLogLineN(_("ERROR: couldn't accept a new external connection")); } } // // Authentication // const CECPacket *CECServerSocket::Authenticate(const CECPacket *request) { CECPacket *response; if (request == NULL) { return new CECPacket(EC_OP_AUTH_FAIL); } // Password must be specified if we are to allow remote connections if ( thePrefs::ECPassword().IsEmpty() ) { AddLogLineC(_("External connection refused due to empty password in preferences!")); return new CECPacket(EC_OP_AUTH_FAIL); } if ((m_conn_state == CONN_INIT) && (request->GetOpCode() == EC_OP_AUTH_REQ) ) { const CECTag *clientName = request->GetTagByName(EC_TAG_CLIENT_NAME); const CECTag *clientVersion = request->GetTagByName(EC_TAG_CLIENT_VERSION); AddLogLineN(CFormat( _("Connecting client: %s %s") ) % ( clientName ? clientName->GetStringData() : wxString(_("Unknown")) ) % ( clientVersion ? clientVersion->GetStringData() : wxString(_("Unknown version")) ) ); const CECTag *protocol = request->GetTagByName(EC_TAG_PROTOCOL_VERSION); #ifdef EC_VERSION_ID // For SVN versions, both client and server must use SVNDATE, and they must be the same CMD4Hash vhash; if (!vhash.Decode(wxT(EC_VERSION_ID))) { response = new CECPacket(EC_OP_AUTH_FAIL); response->AddTag(CECTag(EC_TAG_STRING, wxT("Fatal error, version hash is not a valid MD4-hash."))); } else if (!request->GetTagByName(EC_TAG_VERSION_ID) || request->GetTagByNameSafe(EC_TAG_VERSION_ID)->GetMD4Data() != vhash) { response = new CECPacket(EC_OP_AUTH_FAIL); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Incorrect EC version ID, there might be binary incompatibility. Use core and remote from same snapshot."))); #else // For release versions, we don't want to allow connections from any arbitrary SVN client. if (request->GetTagByName(EC_TAG_VERSION_ID)) { response = new CECPacket(EC_OP_AUTH_FAIL); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("You cannot connect to a release version from an arbitrary development snapshot! *sigh* possible crash prevented"))); #endif } else if (protocol != NULL) { uint16 proto_version = protocol->GetInt(); if (proto_version == EC_CURRENT_PROTOCOL_VERSION) { response = new CECPacket(EC_OP_AUTH_SALT); response->AddTag(CECTag(EC_TAG_PASSWD_SALT, m_passwd_salt)); m_conn_state = CONN_SALT_SENT; // // So far ok, check capabilities of client // // ADUNANZA BEGIN // Backport #if 0 bool canZLIB = false, canUTF8numbers = false; #endif // ADUNANZA END if (request->GetTagByName(EC_TAG_CAN_ZLIB)) { // ADUNANZA BEGIN // Backport #if 0 canZLIB = true; #endif // ADUNANZA END m_my_flags |= EC_FLAG_ZLIB; } if (request->GetTagByName(EC_TAG_CAN_UTF8_NUMBERS)) { // ADUNANZA BEGIN // Backport #if 0 canUTF8numbers = true; #endif // ADUNANZA END m_my_flags |= EC_FLAG_UTF8_NUMBERS; } m_haveNotificationSupport = request->GetTagByName(EC_TAG_CAN_NOTIFY) != NULL; // ADUNANZA BEGIN // Backport (ripeto alcune righe per problema compilazione su MSVC) #if 0 AddDebugLogLineN(logEC, CFormat(wxT("Client capabilities: ZLIB: %s UTF8 numbers: %s Push notification: %s") ) % (canZLIB ? wxT("yes") : wxT("no")) % (canUTF8numbers ? wxT("yes") : wxT("no")) % (m_haveNotificationSupport ? wxT("yes") : wxT("no"))); #else AddDebugLogLineN(logEC, CFormat(wxT("Client capabilities: ZLIB: %s UTF8 numbers: %s Push notification: %s") ) % ((m_my_flags & EC_FLAG_ZLIB) ? wxT("yes") : wxT("no")) % ((m_my_flags & EC_FLAG_UTF8_NUMBERS) ? wxT("yes") : wxT("no")) % (m_haveNotificationSupport ? wxT("yes") : wxT("no"))); #endif // ADUNANZA END // ADUNANZA BEGIN // Backport #if 0 if (canZLIB && canUTF8numbers) {} // get rid of unused variable warning #endif // ADUNANZA END } else { response = new CECPacket(EC_OP_AUTH_FAIL); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Invalid protocol version.") + CFormat(wxT("( %#.4x != %#.4x )")) % proto_version % (uint16_t)EC_CURRENT_PROTOCOL_VERSION)); } } else { response = new CECPacket(EC_OP_AUTH_FAIL); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Missing protocol version tag."))); } } else if ((m_conn_state == CONN_SALT_SENT) && (request->GetOpCode() == EC_OP_AUTH_PASSWD)) { const CECTag *passwd = request->GetTagByName(EC_TAG_PASSWD_HASH); CMD4Hash passh; if (!passh.Decode(thePrefs::ECPassword())) { wxString err = wxTRANSLATE("Authentication failed: invalid hash specified as EC password."); AddLogLineN(wxString(wxGetTranslation(err)) + wxT(" ") + thePrefs::ECPassword()); response = new CECPacket(EC_OP_AUTH_FAIL); response->AddTag(CECTag(EC_TAG_STRING, err)); } else { wxString saltHash = MD5Sum(CFormat(wxT("%lX")) % m_passwd_salt).GetHash(); wxString saltStr = CFormat(wxT("%lX")) % m_passwd_salt; passh.Decode(MD5Sum(thePrefs::ECPassword().Lower() + saltHash).GetHash()); if (passwd && passwd->GetMD4Data() == passh) { response = new CECPacket(EC_OP_AUTH_OK); // ADUNANZA BEGIN #if 0 response->AddTag(CECTag(EC_TAG_SERVER_VERSION, wxT(VERSION))); #else // non avendo altri campi appendo ADU_MOD in EC_TAG_VERSION per riconoscere gli AdunanzA wxString tmpVersion; tmpVersion << wxT(VERSION) << wxT(" ") << ADU_MOD; response->AddTag(CECTag(EC_TAG_SERVER_VERSION, tmpVersion)); #endif // ADUNANZA END } else { wxString err; if (passwd) { err = wxTRANSLATE("Authentication failed: wrong password."); } else { err = wxTRANSLATE("Authentication failed: missing password."); } response = new CECPacket(EC_OP_AUTH_FAIL); response->AddTag(CECTag(EC_TAG_STRING, err)); AddLogLineN(wxGetTranslation(err)); } } } else { response = new CECPacket(EC_OP_AUTH_FAIL); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Invalid request, please authenticate first."))); } if (response->GetOpCode() == EC_OP_AUTH_OK) { m_conn_state = CONN_ESTABLISHED; AddLogLineN(_("Access granted.")); // Establish notification handler if client supports it if (HaveNotificationSupport()) { theApp->ECServerHandler->m_ec_notifier->Add_EC_Client(this); } } else if (response->GetOpCode() == EC_OP_AUTH_FAIL) { // Log message sent to client if (response->GetFirstTagSafe()->IsString()) { AddLogLineN(CFormat(_("Sent error message \"%s\" to client.")) % wxGetTranslation(response->GetFirstTagSafe()->GetStringData())); } // Access denied! amuleIPV4Address address; GetPeer(address); AddLogLineN(CFormat(_("Unauthorized access attempt from %s. Connection closed.")) % address.IPAddress() ); m_conn_state = CONN_FAILED; } return response; } // Make a Logger tag (if there are any logging messages) and add it to the response static void AddLoggerTag(CECPacket *response, CLoggerAccess &LoggerAccess) { if (LoggerAccess.HasString()) { CECEmptyTag tag(EC_TAG_STATS_LOGGER_MESSAGE); // Tag structure is fix: tag carries nothing, inside are the strings // maximum of 200 log lines per message int entries = 0; wxString line; while (entries < 200 && LoggerAccess.GetString(line)) { tag.AddTag(CECTag(EC_TAG_STRING, line)); entries++; } response->AddTag(tag); //printf("send Log tag %d %d\n", FirstEntry, entries); } } static CECPacket *Get_EC_Response_StatRequest(const CECPacket *request, CLoggerAccess &LoggerAccess) { CECPacket *response = new CECPacket(EC_OP_STATS); switch (request->GetDetailLevel()) { case EC_DETAIL_FULL: // This is not an actual INC_UPDATE. // amulegui only sets the detail level of the stats package to EC_DETAIL_INC_UPDATE // so that the included conn state tag is created the way it is needed here. case EC_DETAIL_INC_UPDATE: response->AddTag(CECTag(EC_TAG_STATS_UP_OVERHEAD, (uint32)theStats::GetUpOverheadRate())); response->AddTag(CECTag(EC_TAG_STATS_DOWN_OVERHEAD, (uint32)theStats::GetDownOverheadRate())); response->AddTag(CECTag(EC_TAG_STATS_BANNED_COUNT, /*(uint32)*/theStats::GetBannedCount())); AddLoggerTag(response, LoggerAccess); // Needed only for the remote tray icon context menu response->AddTag(CECTag(EC_TAG_STATS_TOTAL_SENT_BYTES, theStats::GetTotalSentBytes())); response->AddTag(CECTag(EC_TAG_STATS_TOTAL_RECEIVED_BYTES, theStats::GetTotalReceivedBytes())); response->AddTag(CECTag(EC_TAG_STATS_SHARED_FILE_COUNT, theStats::GetSharedFileCount())); case EC_DETAIL_WEB: case EC_DETAIL_CMD: response->AddTag(CECTag(EC_TAG_STATS_UL_SPEED, (uint32)theStats::GetUploadRate())); response->AddTag(CECTag(EC_TAG_STATS_DL_SPEED, (uint32)(theStats::GetDownloadRate()))); // ADUNANZA BEGIN response->AddTag(CECTag(EC_TAG_STATS_ADU_KADU_UL_SPEED, (uint32)theStats::ADU_kadu_GetUploadRate())); response->AddTag(CECTag(EC_TAG_STATS_ADU_EXT_UL_SPEED, (uint32)(theStats::ADU_ext_GetUploadRate()))); response->AddTag(CECTag(EC_TAG_STATS_ADU_KADU_DL_SPEED, (uint32)theStats::ADU_kadu_GetDownloadRate())); response->AddTag(CECTag(EC_TAG_STATS_ADU_EXT_DL_SPEED, (uint32)(theStats::ADU_ext_GetDownloadRate()))); // ADUNANZA END response->AddTag(CECTag(EC_TAG_STATS_UL_SPEED_LIMIT, (uint32)(thePrefs::GetMaxUpload()*1024.0))); response->AddTag(CECTag(EC_TAG_STATS_DL_SPEED_LIMIT, (uint32)(thePrefs::GetMaxDownload()*1024.0))); response->AddTag(CECTag(EC_TAG_STATS_UL_QUEUE_LEN, /*(uint32)*/theStats::GetWaitingUserCount())); response->AddTag(CECTag(EC_TAG_STATS_TOTAL_SRC_COUNT, /*(uint32)*/theStats::GetFoundSources())); // User/Filecounts { uint32 totaluser = 0, totalfile = 0; theApp->serverlist->GetUserFileStatus( totaluser, totalfile ); response->AddTag(CECTag(EC_TAG_STATS_ED2K_USERS, totaluser)); response->AddTag(CECTag(EC_TAG_STATS_KAD_USERS, Kademlia::CKademlia::GetKademliaUsers())); response->AddTag(CECTag(EC_TAG_STATS_ED2K_FILES, totalfile)); response->AddTag(CECTag(EC_TAG_STATS_KAD_FILES, Kademlia::CKademlia::GetKademliaFiles())); // ADUNANZA BEGIN // backport response->AddTag(CECTag(EC_TAG_STATS_KAD_NODES, CStatistics::GetKadNodes())); // ADUNANZA END } // Kad stats if (Kademlia::CKademlia::IsConnected()) { response->AddTag(CECTag(EC_TAG_STATS_KAD_FIREWALLED_UDP, Kademlia::CUDPFirewallTester::IsFirewalledUDP(true))); response->AddTag(CECTag(EC_TAG_STATS_KAD_INDEXED_SOURCES, Kademlia::CKademlia::GetIndexed()->m_totalIndexSource)); response->AddTag(CECTag(EC_TAG_STATS_KAD_INDEXED_KEYWORDS, Kademlia::CKademlia::GetIndexed()->m_totalIndexKeyword)); response->AddTag(CECTag(EC_TAG_STATS_KAD_INDEXED_NOTES, Kademlia::CKademlia::GetIndexed()->m_totalIndexNotes)); response->AddTag(CECTag(EC_TAG_STATS_KAD_INDEXED_LOAD, Kademlia::CKademlia::GetIndexed()->m_totalIndexLoad)); response->AddTag(CECTag(EC_TAG_STATS_KAD_IP_ADRESS, wxUINT32_SWAP_ALWAYS(Kademlia::CKademlia::GetPrefs()->GetIPAddress()))); response->AddTag(CECTag(EC_TAG_STATS_KAD_IN_LAN_MODE, Kademlia::CKademlia::IsRunningInLANMode())); response->AddTag(CECTag(EC_TAG_STATS_BUDDY_STATUS, theApp->clientlist->GetBuddyStatus())); uint32 BuddyIP = 0; uint16 BuddyPort = 0; CUpDownClient * Buddy = theApp->clientlist->GetBuddy(); if (Buddy) { BuddyIP = Buddy->GetIP(); BuddyPort = Buddy->GetUDPPort(); } response->AddTag(CECTag(EC_TAG_STATS_BUDDY_IP, BuddyIP)); response->AddTag(CECTag(EC_TAG_STATS_BUDDY_PORT, BuddyPort)); // ADUNANZA BEGIN response->AddTag(CECTag(EC_TAG_STATS_KADU_ACTIVE_NODES, /*(uint32)*/theStats::GetKAduActiveNodes())); response->AddTag(CECTag(EC_TAG_STATS_KADU_TOTAL_NODES, /*(uint32)*/theStats::GetKAduTotalNodes())); // ADUNANZA END } case EC_DETAIL_UPDATE: break; }; return response; } static CECPacket *Get_EC_Response_GetSharedFiles(const CECPacket *request, CFileEncoderMap &encoders) { wxASSERT(request->GetOpCode() == EC_OP_GET_SHARED_FILES); CECPacket *response = new CECPacket(EC_OP_SHARED_FILES); EC_DETAIL_LEVEL detail_level = request->GetDetailLevel(); // // request can contain list of queried items CTagSet queryitems(request); encoders.UpdateEncoders(); for (uint32 i = 0; i < theApp->sharedfiles->GetFileCount(); ++i) { // ADUNANZA BEGIN // Backport #if 0 CKnownFile *cur_file = (CKnownFile *)theApp->sharedfiles->GetFileByIndex(i); #else const CKnownFile *cur_file = theApp->sharedfiles->GetFileByIndex(i); #endif // ADUNANZA END // ADUNANZA BEGIN #if 0 if ( !cur_file || (!queryitems.empty() && !queryitems.count(cur_file->ECID())) ) { #else # if !defined(ENABLE_ADUNSLU2) if ( !cur_file || (!queryitems.empty() && !queryitems.count(cur_file->ECID())) ) { # else if ( !cur_file || (!queryitems.empty() && !queryitems.count(cur_file->ECID())) || (cur_file->GetStatus() != PS_COMPLETE && thePrefs::GetPFlags(FL_SHAREDOWNLOADING_DISABLE))) { # endif #endif // ADUNANZA END continue; } CEC_SharedFile_Tag filetag(cur_file, detail_level); CKnownFile_Encoder *enc = encoders[cur_file->ECID()]; if ( detail_level != EC_DETAIL_UPDATE ) { enc->ResetEncoder(); } enc->Encode(&filetag); response->AddTag(filetag); } return response; } static CECPacket *Get_EC_Response_GetUpdate(CFileEncoderMap &encoders, CObjTagMap &tagmap) { CECPacket *response = new CECPacket(EC_OP_SHARED_FILES); encoders.UpdateEncoders(); for (CFileEncoderMap::iterator it = encoders.begin(); it != encoders.end(); ++it) { const CKnownFile *cur_file = it->second->GetFile(); CValueMap &valuemap = tagmap.GetValueMap(cur_file->ECID()); // Completed cleared Partfiles are still stored as CPartfile, // but encoded as KnownFile, so we have to check the encoder type // instead of the file type. if (it->second->IsPartFile_Encoder()) { // ADUNANZA BEGIN // back #if 0 CEC_PartFile_Tag filetag((const CPartFile*) cur_file, EC_DETAIL_INC_UPDATE, &valuemap); #else CEC_PartFile_Tag filetag(static_cast(cur_file), EC_DETAIL_INC_UPDATE, &valuemap); #endif // ADUNANZA END // Add information if partfile is shared filetag.AddTag(EC_TAG_PARTFILE_SHARED, it->second->IsShared(), &valuemap); // ADUNANZA BEGIN // back #if 0 CPartFile_Encoder * enc = (CPartFile_Encoder *) encoders[cur_file->ECID()]; #else CPartFile_Encoder * enc = static_cast(encoders[cur_file->ECID()]); #endif // ADUNANZA END enc->Encode(&filetag); response->AddTag(filetag); } else { CEC_SharedFile_Tag filetag(cur_file, EC_DETAIL_INC_UPDATE, &valuemap); CKnownFile_Encoder * enc = encoders[cur_file->ECID()]; enc->Encode(&filetag); response->AddTag(filetag); } } // Add clients CECEmptyTag clients(EC_TAG_CLIENT); const CClientList::IDMap& clientList = theApp->clientlist->GetClientList(); bool onlyTransmittingClients = thePrefs::IsTransmitOnlyUploadingClients(); // ADUNANZA BEGIN // back #if 0 for (CClientList::IDMap::const_iterator it = clientList.begin(); it != clientList.end(); it++) { #else for (CClientList::IDMap::const_iterator it = clientList.begin(); it != clientList.end(); ++it) { #endif // ADUNANZA END const CUpDownClient* cur_client = it->second.GetClient(); if (onlyTransmittingClients && !cur_client->IsDownloading()) { // For poor CPU cores only transmit uploading clients. This will save a lot of CPU. // Set ExternalConnect/TransmitOnlyUploadingClients to 1 for it. continue; } CValueMap &valuemap = tagmap.GetValueMap(cur_client->ECID()); clients.AddTag(CEC_UpDownClient_Tag(cur_client, EC_DETAIL_INC_UPDATE, &valuemap)); } response->AddTag(clients); // Add servers CECEmptyTag servers(EC_TAG_SERVER); std::vector serverlist = theApp->serverlist->CopySnapshot(); uint32 nrServers = serverlist.size(); for (uint32 i = 0; i < nrServers; i++) { const CServer* cur_server = serverlist[i]; CValueMap &valuemap = tagmap.GetValueMap(cur_server->ECID()); servers.AddTag(CEC_Server_Tag(cur_server, &valuemap)); } response->AddTag(servers); // Add friends CECEmptyTag friends(EC_TAG_FRIEND); // ADUNANZA BEGIN // back #if 0 for (CFriendList::const_iterator it = theApp->friendlist->begin(); it != theApp->friendlist->end(); it++) { #else for (CFriendList::const_iterator it = theApp->friendlist->begin(); it != theApp->friendlist->end(); ++it) { #endif // ADUNANZA END const CFriend* cur_friend = *it; CValueMap &valuemap = tagmap.GetValueMap(cur_friend->ECID()); friends.AddTag(CEC_Friend_Tag(cur_friend, &valuemap)); } response->AddTag(friends); return response; } static CECPacket *Get_EC_Response_GetClientQueue(const CECPacket *request, CObjTagMap &tagmap, int op) { CECPacket *response = new CECPacket(op); EC_DETAIL_LEVEL detail_level = request->GetDetailLevel(); // // request can contain list of queried items // (not for incremental update of course) CTagSet queryitems(request); const CClientRefList& clients = theApp->uploadqueue->GetUploadingList(); CClientRefList::const_iterator it = clients.begin(); for (; it != clients.end(); ++it) { CUpDownClient* cur_client = it->GetClient(); if (!cur_client) { // shouldn't happen continue; } if (!queryitems.empty() && !queryitems.count(cur_client->ECID())) { continue; } CValueMap *valuemap = NULL; if (detail_level == EC_DETAIL_INC_UPDATE) { valuemap = &tagmap.GetValueMap(cur_client->ECID()); } CEC_UpDownClient_Tag cli_tag(cur_client, detail_level, valuemap); response->AddTag(cli_tag); } return response; } static CECPacket *Get_EC_Response_GetDownloadQueue(const CECPacket *request, CFileEncoderMap &encoders) { CECPacket *response = new CECPacket(EC_OP_DLOAD_QUEUE); EC_DETAIL_LEVEL detail_level = request->GetDetailLevel(); // // request can contain list of queried items CTagSet queryitems(request); encoders.UpdateEncoders(); for (unsigned int i = 0; i < theApp->downloadqueue->GetFileCount(); i++) { CPartFile *cur_file = theApp->downloadqueue->GetFileByIndex(i); if ( !queryitems.empty() && !queryitems.count(cur_file->ECID()) ) { continue; } CEC_PartFile_Tag filetag(cur_file, detail_level); // ADUNANZA BEGIN // back #if 0 CPartFile_Encoder * enc = (CPartFile_Encoder *) encoders[cur_file->ECID()]; #else CPartFile_Encoder * enc = static_cast(encoders[cur_file->ECID()]); #endif // ADUNANZA END if ( detail_level != EC_DETAIL_UPDATE ) { enc->ResetEncoder(); } enc->Encode(&filetag); response->AddTag(filetag); } return response; } static CECPacket *Get_EC_Response_PartFile_Cmd(const CECPacket *request) { CECPacket *response = NULL; // request can contain multiple files. // ADUNANZA BEGIN // back #if 0 for (CECPacket::const_iterator it1 = request->begin(); it1 != request->end(); it1++) { #else for (CECPacket::const_iterator it1 = request->begin(); it1 != request->end(); ++it1) { #endif // ADUNANZA END const CECTag &hashtag = *it1; wxASSERT(hashtag.GetTagName() == EC_TAG_PARTFILE); CMD4Hash hash = hashtag.GetMD4Data(); CPartFile *pfile = theApp->downloadqueue->GetFileByID( hash ); if ( !pfile ) { AddLogLineN(CFormat(_("Remote PartFile command failed: FileHash not found: %s")) % hash.Encode()); response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, CFormat(wxString(wxTRANSLATE("FileHash not found: %s"))) % hash.Encode())); //return response; break; } switch (request->GetOpCode()) { case EC_OP_PARTFILE_SWAP_A4AF_THIS: CoreNotify_PartFile_Swap_A4AF(pfile); break; case EC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO: CoreNotify_PartFile_Swap_A4AF_Auto(pfile); break; case EC_OP_PARTFILE_SWAP_A4AF_OTHERS: CoreNotify_PartFile_Swap_A4AF_Others(pfile); break; case EC_OP_PARTFILE_PAUSE: pfile->PauseFile(); break; case EC_OP_PARTFILE_RESUME: pfile->ResumeFile(); pfile->SavePartFile(); break; case EC_OP_PARTFILE_STOP: pfile->StopFile(); break; case EC_OP_PARTFILE_PRIO_SET: { uint8 prio = hashtag.GetFirstTagSafe()->GetInt(); if ( prio == PR_AUTO ) { pfile->SetAutoDownPriority(1); } else { pfile->SetAutoDownPriority(0); pfile->SetDownPriority(prio); } } break; case EC_OP_PARTFILE_DELETE: if ( thePrefs::StartNextFile() && (pfile->GetStatus() != PS_PAUSED) ) { theApp->downloadqueue->StartNextFile(pfile); } pfile->Delete(); break; case EC_OP_PARTFILE_SET_CAT: pfile->SetCategory(hashtag.GetFirstTagSafe()->GetInt()); break; default: response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("OOPS! OpCode processing error!"))); break; } } if (!response) { response = new CECPacket(EC_OP_NOOP); } return response; } static CECPacket *Get_EC_Response_Server_Add(const CECPacket *request) { CECPacket *response = NULL; wxString full_addr = request->GetTagByNameSafe(EC_TAG_SERVER_ADDRESS)->GetStringData(); wxString name = request->GetTagByNameSafe(EC_TAG_SERVER_NAME)->GetStringData(); wxString s_ip = full_addr.Left(full_addr.Find(':')); wxString s_port = full_addr.Mid(full_addr.Find(':') + 1); long port = StrToULong(s_port); CServer* toadd = new CServer(port, s_ip); toadd->SetListName(name.IsEmpty() ? full_addr : name); if ( theApp->AddServer(toadd, true) ) { response = new CECPacket(EC_OP_NOOP); } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, _("Server not added"))); delete toadd; } return response; } static CECPacket *Get_EC_Response_Server(const CECPacket *request) { CECPacket *response = NULL; const CECTag *srv_tag = request->GetTagByName(EC_TAG_SERVER); CServer *srv = 0; if ( srv_tag ) { srv = theApp->serverlist->GetServerByIPTCP(srv_tag->GetIPv4Data().IP(), srv_tag->GetIPv4Data().m_port); // server tag passed, but server not found if ( !srv ) { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, CFormat(wxString(wxTRANSLATE("server not found: %s"))) % srv_tag->GetIPv4Data().StringIP())); return response; } } switch (request->GetOpCode()) { case EC_OP_SERVER_DISCONNECT: theApp->serverconnect->Disconnect(); response = new CECPacket(EC_OP_NOOP); break; case EC_OP_SERVER_REMOVE: if ( srv ) { theApp->serverlist->RemoveServer(srv); response = new CECPacket(EC_OP_NOOP); } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("need to define server to be removed"))); } break; case EC_OP_SERVER_CONNECT: if (thePrefs::GetNetworkED2K()) { if ( srv ) { theApp->serverconnect->ConnectToServer(srv); response = new CECPacket(EC_OP_NOOP); } else { theApp->serverconnect->ConnectToAnyServer(); response = new CECPacket(EC_OP_NOOP); } } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("eD2k is disabled in preferences."))); } break; } if (!response) { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("OOPS! OpCode processing error!"))); } return response; } static CECPacket *Get_EC_Response_Friend(const CECPacket *request) { CECPacket *response = NULL; const CECTag *tag = request->GetTagByName(EC_TAG_FRIEND_ADD); if (tag) { const CECTag *subtag = tag->GetTagByName(EC_TAG_CLIENT); if (subtag) { CUpDownClient * client = theApp->clientlist->FindClientByECID(subtag->GetInt()); if (client) { theApp->friendlist->AddFriend(CCLIENTREF(client, wxT("Get_EC_Response_Friend theApp->friendlist->AddFriend"))); response = new CECPacket(EC_OP_NOOP); } } else { const CECTag *hashtag = tag->GetTagByName(EC_TAG_FRIEND_HASH); const CECTag *iptag = tag->GetTagByName(EC_TAG_FRIEND_IP); const CECTag *porttag = tag->GetTagByName(EC_TAG_FRIEND_PORT); const CECTag *nametag = tag->GetTagByName(EC_TAG_FRIEND_NAME); if (hashtag && iptag && porttag && nametag) { theApp->friendlist->AddFriend(hashtag->GetMD4Data(), iptag->GetInt(), porttag->GetInt(), nametag->GetStringData()); response = new CECPacket(EC_OP_NOOP); } } } else if ((tag = request->GetTagByName(EC_TAG_FRIEND_REMOVE))) { const CECTag *subtag = tag->GetTagByName(EC_TAG_FRIEND); if (subtag) { CFriend * Friend = theApp->friendlist->FindFriend(subtag->GetInt()); if (Friend) { theApp->friendlist->RemoveFriend(Friend); response = new CECPacket(EC_OP_NOOP); } } } else if ((tag = request->GetTagByName(EC_TAG_FRIEND_FRIENDSLOT))) { const CECTag *subtag = tag->GetTagByName(EC_TAG_FRIEND); if (subtag) { CFriend * Friend = theApp->friendlist->FindFriend(subtag->GetInt()); if (Friend) { theApp->friendlist->SetFriendSlot(Friend, tag->GetInt() != 0); response = new CECPacket(EC_OP_NOOP); } } } else if ((tag = request->GetTagByName(EC_TAG_FRIEND_SHARED))) { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxT("Request shared files list not implemented yet."))); #if 0 // This works fine - but there is no way atm to transfer the results to amulegui, so disable it for now. const CECTag *subtag = tag->GetTagByName(EC_TAG_FRIEND); if (subtag) { CFriend * Friend = theApp->friendlist->FindFriend(subtag->GetInt()); if (Friend) { theApp->friendlist->RequestSharedFileList(Friend); response = new CECPacket(EC_OP_NOOP); } } else if ((subtag = tag->GetTagByName(EC_TAG_CLIENT))) { CUpDownClient * client = theApp->clientlist->FindClientByECID(subtag->GetInt()); if (client) { client->RequestSharedFileList(); response = new CECPacket(EC_OP_NOOP); } } #endif } if (!response) { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("OOPS! OpCode processing error!"))); } return response; } static CECPacket *Get_EC_Response_Search_Results(const CECPacket *request) { CECPacket *response = new CECPacket(EC_OP_SEARCH_RESULTS); EC_DETAIL_LEVEL detail_level = request->GetDetailLevel(); // // request can contain list of queried items CTagSet queryitems(request); const CSearchResultList& list = theApp->searchlist->GetSearchResults(0xffffffff); CSearchResultList::const_iterator it = list.begin(); while (it != list.end()) { CSearchFile* sf = *it++; if ( !queryitems.empty() && !queryitems.count(sf->ECID()) ) { continue; } response->AddTag(CEC_SearchFile_Tag(sf, detail_level)); } return response; } static CECPacket *Get_EC_Response_Search_Results(CObjTagMap &tagmap) { CECPacket *response = new CECPacket(EC_OP_SEARCH_RESULTS); const CSearchResultList& list = theApp->searchlist->GetSearchResults(0xffffffff); CSearchResultList::const_iterator it = list.begin(); while (it != list.end()) { CSearchFile* sf = *it++; CValueMap &valuemap = tagmap.GetValueMap(sf->ECID()); response->AddTag(CEC_SearchFile_Tag(sf, EC_DETAIL_INC_UPDATE, &valuemap)); // Add the children if (sf->HasChildren()) { const CSearchResultList& children = sf->GetChildren(); for (size_t i = 0; i < children.size(); ++i) { CSearchFile* sfc = children.at(i); CValueMap &valuemap1 = tagmap.GetValueMap(sfc->ECID()); response->AddTag(CEC_SearchFile_Tag(sfc, EC_DETAIL_INC_UPDATE, &valuemap1)); } } } return response; } static CECPacket *Get_EC_Response_Search_Results_Download(const CECPacket *request) { CECPacket *response = new CECPacket(EC_OP_STRINGS); // ADUNANZA BEGIN backport #if 0 for (CECPacket::const_iterator it = request->begin(); it != request->end(); it++) { #else for (CECPacket::const_iterator it = request->begin(); it != request->end(); ++it) { #endif // ADUNANZA END backport const CECTag &tag = *it; CMD4Hash hash = tag.GetMD4Data(); uint8 category = tag.GetFirstTagSafe()->GetInt(); theApp->searchlist->AddFileToDownloadByHash(hash, category); } return response; } static CECPacket *Get_EC_Response_Search_Stop(const CECPacket *WXUNUSED(request)) { CECPacket *reply = new CECPacket(EC_OP_MISC_DATA); theApp->searchlist->StopSearch(); return reply; } static CECPacket *Get_EC_Response_Search(const CECPacket *request) { wxString response; // ADUNANZA BEGIN backport #if 0 CEC_Search_Tag *search_request = (CEC_Search_Tag *)request->GetFirstTagSafe(); #else const CEC_Search_Tag *search_request = static_cast(request->GetFirstTagSafe()); #endif // ADUNANZA END backport theApp->searchlist->RemoveResults(0xffffffff); CSearchList::CSearchParams params; params.searchString = search_request->SearchText(); params.typeText = search_request->SearchFileType(); params.extension = search_request->SearchExt(); params.minSize = search_request->MinSize(); params.maxSize = search_request->MaxSize(); params.availability = search_request->Avail(); EC_SEARCH_TYPE search_type = search_request->SearchType(); SearchType core_search_type = LocalSearch; uint32 op = EC_OP_FAILED; switch (search_type) { case EC_SEARCH_GLOBAL: core_search_type = GlobalSearch; case EC_SEARCH_KAD: if (core_search_type != GlobalSearch) { // Not a global search obviously core_search_type = KadSearch; } case EC_SEARCH_LOCAL: { uint32 search_id = 0xffffffff; wxString error = theApp->searchlist->StartNewSearch(&search_id, core_search_type, params); if (!error.IsEmpty()) { response = error; } else { response = wxTRANSLATE("Search in progress. Refetch results in a moment!"); op = EC_OP_STRINGS; } break; } case EC_SEARCH_WEB: response = wxTRANSLATE("WebSearch from remote interface makes no sense."); break; } CECPacket *reply = new CECPacket(op); // error or search in progress reply->AddTag(CECTag(EC_TAG_STRING, response)); return reply; } static CECPacket *Get_EC_Response_Set_SharedFile_Prio(const CECPacket *request) { CECPacket *response = new CECPacket(EC_OP_NOOP); // ADUNANZA BEGIN backport #if 0 for (CECPacket::const_iterator it = request->begin(); it != request->end(); it++) { #else for (CECPacket::const_iterator it = request->begin(); it != request->end(); ++it) { #endif // ADUNANZA END backport const CECTag &tag = *it; CMD4Hash hash = tag.GetMD4Data(); uint8 prio = tag.GetFirstTagSafe()->GetInt(); CKnownFile* cur_file = theApp->sharedfiles->GetFileByID(hash); if ( !cur_file ) { continue; } if (prio == PR_AUTO) { cur_file->SetAutoUpPriority(1); cur_file->UpdateAutoUpPriority(); } else { cur_file->SetAutoUpPriority(0); cur_file->SetUpPriority(prio); } Notify_SharedFilesUpdateItem(cur_file); } return response; } void CPartFile_Encoder::Encode(CECTag *parent) { // // Source part frequencies // CKnownFile_Encoder::Encode(parent); // // Gaps // const CGapList& gaplist = m_PartFile()->GetGapList(); const size_t gap_list_size = gaplist.size(); ArrayOfUInts64 gaps; gaps.reserve(gap_list_size * 2); for (CGapList::const_iterator curr_pos = gaplist.begin(); curr_pos != gaplist.end(); ++curr_pos) { gaps.push_back(curr_pos.start()); gaps.push_back(curr_pos.end()); } int gap_enc_size = 0; bool changed; const uint8 *gap_enc_data = m_gap_status.Encode(gaps, gap_enc_size, changed); if (changed) { parent->AddTag(CECTag(EC_TAG_PARTFILE_GAP_STATUS, gap_enc_size, (void *)gap_enc_data)); } delete[] gap_enc_data; // // Requested blocks // ArrayOfUInts64 req_buffer; const CPartFile::CReqBlockPtrList& requestedblocks = m_PartFile()->GetRequestedBlockList(); CPartFile::CReqBlockPtrList::const_iterator curr_pos2 = requestedblocks.begin(); for ( ; curr_pos2 != requestedblocks.end(); ++curr_pos2 ) { Requested_Block_Struct* block = *curr_pos2; req_buffer.push_back(block->StartOffset); req_buffer.push_back(block->EndOffset); } int req_enc_size = 0; const uint8 *req_enc_data = m_req_status.Encode(req_buffer, req_enc_size, changed); if (changed) { parent->AddTag(CECTag(EC_TAG_PARTFILE_REQ_STATUS, req_enc_size, (void *)req_enc_data)); } delete[] req_enc_data; // // Source names // // First count occurrence of all source names // CECEmptyTag sourceNames(EC_TAG_PARTFILE_SOURCE_NAMES); typedef std::map strIntMap; strIntMap nameMap; const CPartFile::SourceSet &sources = m_PartFile()->GetSourceList(); for (CPartFile::SourceSet::const_iterator it = sources.begin(); it != sources.end(); ++it) { const CClientRef &cur_src = *it; if (cur_src.GetRequestFile() != m_file || cur_src.GetClientFilename().Length() == 0) { continue; } const wxString &name = cur_src.GetClientFilename(); strIntMap::iterator itm = nameMap.find(name); if (itm == nameMap.end()) { nameMap[name] = 1; } else { itm->second++; } } // // Go through our last list // for (SourcenameItemMap::iterator it1 = m_sourcenameItemMap.begin(); it1 != m_sourcenameItemMap.end();) { SourcenameItemMap::iterator it2 = it1++; strIntMap::iterator itm = nameMap.find(it2->second.name); if (itm == nameMap.end()) { // name doesn't exist anymore, tell client to forget it CECTag tag(EC_TAG_PARTFILE_SOURCE_NAMES, it2->first); tag.AddTag(CECIntTag(EC_TAG_PARTFILE_SOURCE_NAMES_COUNTS, 0)); sourceNames.AddTag(tag); // and forget it m_sourcenameItemMap.erase(it2); } else { // update count if it changed if (it2->second.count != itm->second) { CECTag tag(EC_TAG_PARTFILE_SOURCE_NAMES, it2->first); tag.AddTag(CECIntTag(EC_TAG_PARTFILE_SOURCE_NAMES_COUNTS, itm->second)); sourceNames.AddTag(tag); it2->second.count = itm->second; } // remove it from nameMap so that only new names are left there nameMap.erase(itm); } } // // Add new names // // ADUNANZA BEGIN backport #if 0 for (strIntMap::iterator it3 = nameMap.begin(); it3 != nameMap.end(); it3++) { #else for (strIntMap::iterator it3 = nameMap.begin(); it3 != nameMap.end(); ++it3) { #endif // ADUNANZA END backport int id = ++m_sourcenameID; CECIntTag tag(EC_TAG_PARTFILE_SOURCE_NAMES, id); tag.AddTag(CECTag(EC_TAG_PARTFILE_SOURCE_NAMES, it3->first)); tag.AddTag(CECIntTag(EC_TAG_PARTFILE_SOURCE_NAMES_COUNTS, it3->second)); sourceNames.AddTag(tag); // remember it m_sourcenameItemMap[id] = SourcenameItem(it3->first, it3->second); } if (sourceNames.HasChildTags()) { parent->AddTag(sourceNames); } } void CPartFile_Encoder::ResetEncoder() { CKnownFile_Encoder::ResetEncoder(); m_gap_status.ResetEncoder(); m_req_status.ResetEncoder(); } void CKnownFile_Encoder::Encode(CECTag *parent) { // // Source part frequencies // // Reference to the availability list const ArrayOfUInts16& list = m_file->IsPartFile() ? // ADUNANZA BEGIN backport #if 0 ((CPartFile*)m_file)->m_SrcpartFrequency : #else static_cast(m_file)->m_SrcpartFrequency : #endif // ADUNANZA END backport m_file->m_AvailPartFrequency; // Don't add tag if available parts aren't populated yet. if (!list.empty()) { int part_enc_size; bool changed; const uint8 *part_enc_data = m_enc_data.Encode(list, part_enc_size, changed); if (changed) { parent->AddTag(CECTag(EC_TAG_PARTFILE_PART_STATUS, part_enc_size, part_enc_data)); } delete[] part_enc_data; } } static CECPacket *GetStatsGraphs(const CECPacket *request) { CECPacket *response = NULL; switch (request->GetDetailLevel()) { case EC_DETAIL_WEB: case EC_DETAIL_FULL: { double dTimestamp = 0.0; if (request->GetTagByName(EC_TAG_STATSGRAPH_LAST) != NULL) { dTimestamp = request->GetTagByName(EC_TAG_STATSGRAPH_LAST)->GetDoubleData(); } uint16 nScale = request->GetTagByNameSafe(EC_TAG_STATSGRAPH_SCALE)->GetInt(); uint16 nMaxPoints = request->GetTagByNameSafe(EC_TAG_STATSGRAPH_WIDTH)->GetInt(); uint32 *graphData; unsigned int numPoints = theApp->m_statistics->GetHistoryForWeb(nMaxPoints, (double)nScale, &dTimestamp, &graphData); if (numPoints) { response = new CECPacket(EC_OP_STATSGRAPHS); // ADUNANZA BEGIN #if 0 response->AddTag(CECTag(EC_TAG_STATSGRAPH_DATA, 4 * numPoints * sizeof(uint32), graphData)); #else // aggiungo anche i nodi KADU attivi response->AddTag(CECTag(EC_TAG_STATSGRAPH_DATA, ((4+1) * numPoints) * sizeof(uint32), graphData)); #endif // ADUNANZA END delete [] graphData; response->AddTag(CECTag(EC_TAG_STATSGRAPH_LAST, dTimestamp)); } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("No points for graph."))); } break; } case EC_DETAIL_INC_UPDATE: case EC_DETAIL_UPDATE: case EC_DETAIL_CMD: // No graphs response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Your client is not configured for this detail level."))); break; } if (!response) { response = new CECPacket(EC_OP_FAILED); // Unknown reason } return response; } CECPacket *CECServerSocket::ProcessRequest2(const CECPacket *request) { if ( !request ) { return 0; } CECPacket *response = NULL; switch (request->GetOpCode()) { // // Misc commands // case EC_OP_SHUTDOWN: if (!theApp->IsOnShutDown()) { response = new CECPacket(EC_OP_NOOP); AddLogLineC(_("External Connection: shutdown requested")); #ifndef AMULE_DAEMON { wxCloseEvent evt; evt.SetCanVeto(false); theApp->ShutDown(evt); } #else theApp->ExitMainLoop(); #endif } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Already shutting down."))); } break; case EC_OP_ADD_LINK: // ADUNANZA BEGIN backport #if 0 for (CECPacket::const_iterator it = request->begin(); it != request->end(); it++) { #else for (CECPacket::const_iterator it = request->begin(); it != request->end(); ++it) { #endif // ADUNANZA END backport const CECTag &tag = *it; wxString link = tag.GetStringData(); int category = 0; const CECTag *cattag = tag.GetTagByName(EC_TAG_PARTFILE_CAT); if (cattag) { category = cattag->GetInt(); } AddLogLineC(CFormat(_("ExternalConn: adding link '%s'.")) % link); if ( theApp->downloadqueue->AddLink(link, category) ) { response = new CECPacket(EC_OP_NOOP); } else { // Error messages are printed by the add function. response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Invalid link or already on list."))); } } break; // // Status requests // case EC_OP_STAT_REQ: response = Get_EC_Response_StatRequest(request, m_LoggerAccess); response->AddTag(CEC_ConnState_Tag(request->GetDetailLevel())); break; case EC_OP_GET_CONNSTATE: response = new CECPacket(EC_OP_MISC_DATA); response->AddTag(CEC_ConnState_Tag(request->GetDetailLevel())); break; // // // case EC_OP_GET_SHARED_FILES: if ( request->GetDetailLevel() != EC_DETAIL_INC_UPDATE ) { response = Get_EC_Response_GetSharedFiles(request, m_FileEncoder); } break; case EC_OP_GET_DLOAD_QUEUE: if ( request->GetDetailLevel() != EC_DETAIL_INC_UPDATE ) { response = Get_EC_Response_GetDownloadQueue(request, m_FileEncoder); } break; // // This will evolve into an update-all for inc tags // case EC_OP_GET_UPDATE: if ( request->GetDetailLevel() == EC_DETAIL_INC_UPDATE ) { response = Get_EC_Response_GetUpdate(m_FileEncoder, m_obj_tagmap); } break; case EC_OP_GET_ULOAD_QUEUE: response = Get_EC_Response_GetClientQueue(request, m_obj_tagmap, EC_OP_ULOAD_QUEUE); break; case EC_OP_PARTFILE_REMOVE_NO_NEEDED: case EC_OP_PARTFILE_REMOVE_FULL_QUEUE: case EC_OP_PARTFILE_REMOVE_HIGH_QUEUE: case EC_OP_PARTFILE_SWAP_A4AF_THIS: case EC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO: case EC_OP_PARTFILE_SWAP_A4AF_OTHERS: case EC_OP_PARTFILE_PAUSE: case EC_OP_PARTFILE_RESUME: case EC_OP_PARTFILE_STOP: case EC_OP_PARTFILE_PRIO_SET: case EC_OP_PARTFILE_DELETE: case EC_OP_PARTFILE_SET_CAT: response = Get_EC_Response_PartFile_Cmd(request); break; case EC_OP_SHAREDFILES_RELOAD: theApp->sharedfiles->Reload(); response = new CECPacket(EC_OP_NOOP); break; case EC_OP_SHARED_SET_PRIO: response = Get_EC_Response_Set_SharedFile_Prio(request); break; case EC_OP_RENAME_FILE: { CMD4Hash fileHash = request->GetTagByNameSafe(EC_TAG_KNOWNFILE)->GetMD4Data(); wxString newName = request->GetTagByNameSafe(EC_TAG_PARTFILE_NAME)->GetStringData(); // search first in downloadqueue - it might be in known files as well CKnownFile* file = theApp->downloadqueue->GetFileByID(fileHash); if (!file) { file = theApp->knownfiles->FindKnownFileByID(fileHash); } if (!file) { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("File not found."))); break; } if (newName.IsEmpty()) { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Invalid file name."))); break; } if (theApp->sharedfiles->RenameFile(file, CPath(newName))) { response = new CECPacket(EC_OP_NOOP); } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Unable to rename file."))); } break; } case EC_OP_CLEAR_COMPLETED: { ListOfUInts32 toClear; // ADUNANZA BEGIN backport #if 0 for (CECTag::const_iterator it = request->begin(); it != request->end(); it++) { #else for (CECTag::const_iterator it = request->begin(); it != request->end(); ++it) { #endif // ADUNANZA END backport if (it->GetTagName() == EC_TAG_ECID) { toClear.push_back(it->GetInt()); } } theApp->downloadqueue->ClearCompleted(toClear); response = new CECPacket(EC_OP_NOOP); break; } case EC_OP_CLIENT_SWAP_TO_ANOTHER_FILE: { theApp->sharedfiles->Reload(); uint32 idClient = request->GetTagByNameSafe(EC_TAG_CLIENT)->GetInt(); CUpDownClient * client = theApp->clientlist->FindClientByECID(idClient); CMD4Hash idFile = request->GetTagByNameSafe(EC_TAG_PARTFILE)->GetMD4Data(); CPartFile * file = theApp->downloadqueue->GetFileByID(idFile); if (client && file) { client->SwapToAnotherFile( true, false, false, file); } response = new CECPacket(EC_OP_NOOP); break; } case EC_OP_SHARED_FILE_SET_COMMENT: { CMD4Hash hash = request->GetTagByNameSafe(EC_TAG_KNOWNFILE)->GetMD4Data(); CKnownFile * file = theApp->sharedfiles->GetFileByID(hash); if (file) { wxString newComment = request->GetTagByNameSafe(EC_TAG_KNOWNFILE_COMMENT)->GetStringData(); uint8 newRating = request->GetTagByNameSafe(EC_TAG_KNOWNFILE_RATING)->GetInt(); CoreNotify_KnownFile_Comment_Set(file, newComment, newRating); } response = new CECPacket(EC_OP_NOOP); break; } // // Server commands // case EC_OP_SERVER_ADD: response = Get_EC_Response_Server_Add(request); break; case EC_OP_SERVER_DISCONNECT: case EC_OP_SERVER_CONNECT: case EC_OP_SERVER_REMOVE: response = Get_EC_Response_Server(request); break; case EC_OP_GET_SERVER_LIST: { response = new CECPacket(EC_OP_SERVER_LIST); if (!thePrefs::GetNetworkED2K()) { // Kad only: just send an empty list break; } EC_DETAIL_LEVEL detail_level = request->GetDetailLevel(); std::vector servers = theApp->serverlist->CopySnapshot(); for ( std::vector::const_iterator it = servers.begin(); it != servers.end(); ++it ) { response->AddTag(CEC_Server_Tag(*it, detail_level)); } } break; case EC_OP_SERVER_UPDATE_FROM_URL: { wxString url = request->GetFirstTagSafe()->GetStringData(); // Save the new url, and update the UI (if not amuled). Notify_ServersURLChanged(url); thePrefs::SetEd2kServersUrl(url); theApp->serverlist->UpdateServerMetFromURL(url); response = new CECPacket(EC_OP_NOOP); break; } case EC_OP_SERVER_SET_STATIC_PRIO: { uint32 ecid = request->GetTagByNameSafe(EC_TAG_SERVER)->GetInt(); CServer * server = theApp->serverlist->GetServerByECID(ecid); if (server) { const CECTag * staticTag = request->GetTagByName(EC_TAG_SERVER_STATIC); if (staticTag) { theApp->serverlist->SetStaticServer(server, staticTag->GetInt() > 0); } const CECTag * prioTag = request->GetTagByName(EC_TAG_SERVER_PRIO); if (prioTag) { theApp->serverlist->SetServerPrio(server, prioTag->GetInt()); } } response = new CECPacket(EC_OP_NOOP); break; } // // Friends // case EC_OP_FRIEND: response = Get_EC_Response_Friend(request); break; // // IPFilter // case EC_OP_IPFILTER_RELOAD: NotifyAlways_IPFilter_Reload(); response = new CECPacket(EC_OP_NOOP); break; case EC_OP_IPFILTER_UPDATE: { wxString url = request->GetFirstTagSafe()->GetStringData(); if (url.IsEmpty()) { url = thePrefs::IPFilterURL(); } NotifyAlways_IPFilter_Update(url); response = new CECPacket(EC_OP_NOOP); break; } // // Search // case EC_OP_SEARCH_START: response = Get_EC_Response_Search(request); break; case EC_OP_SEARCH_STOP: response = Get_EC_Response_Search_Stop(request); break; case EC_OP_SEARCH_RESULTS: if ( request->GetDetailLevel() == EC_DETAIL_INC_UPDATE ) { response = Get_EC_Response_Search_Results(m_obj_tagmap); } else { response = Get_EC_Response_Search_Results(request); } break; case EC_OP_SEARCH_PROGRESS: response = new CECPacket(EC_OP_SEARCH_PROGRESS); response->AddTag(CECTag(EC_TAG_SEARCH_STATUS, theApp->searchlist->GetSearchProgress())); break; case EC_OP_DOWNLOAD_SEARCH_RESULT: response = Get_EC_Response_Search_Results_Download(request); break; // // Preferences // case EC_OP_GET_PREFERENCES: response = new CEC_Prefs_Packet(request->GetTagByNameSafe(EC_TAG_SELECT_PREFS)->GetInt(), request->GetDetailLevel()); break; case EC_OP_SET_PREFERENCES: // ADUNANZA BEGIN backport #if 0 ((CEC_Prefs_Packet *)request)->Apply(); #else static_cast(request)->Apply(); #endif // ADUNANZA END backport theApp->glob_prefs->Save(); if (thePrefs::IsFilteringClients()) { theApp->clientlist->FilterQueues(); } if (thePrefs::IsFilteringServers()) { theApp->serverlist->FilterServers(); } if (!thePrefs::GetNetworkED2K() && theApp->IsConnectedED2K()) { theApp->DisconnectED2K(); } if (!thePrefs::GetNetworkKademlia() && theApp->IsConnectedKad()) { theApp->StopKad(); } response = new CECPacket(EC_OP_NOOP); break; case EC_OP_CREATE_CATEGORY: if ( request->GetTagCount() == 1 ) { // ADUNANZA BEGIM // back #if 0 CEC_Category_Tag *tag = (CEC_Category_Tag *)request->GetFirstTagSafe(); if (tag->Create()) { response = new CECPacket(EC_OP_NOOP); } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_CATEGORY, theApp->glob_prefs->GetCatCount() - 1)); response->AddTag(CECTag(EC_TAG_CATEGORY_PATH, tag->Path())); } #else CEC_Category_Tag tag(*static_cast(request->GetFirstTagSafe())); if (tag.Create()) { response = new CECPacket(EC_OP_NOOP); } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_CATEGORY, theApp->glob_prefs->GetCatCount() - 1)); response->AddTag(CECTag(EC_TAG_CATEGORY_PATH, tag.Path())); } #endif // ADUNANZA END Notify_CategoryAdded(); } else { response = new CECPacket(EC_OP_NOOP); } break; case EC_OP_UPDATE_CATEGORY: if ( request->GetTagCount() == 1 ) { // ADUNANZA BEGIM // back #if 0 CEC_Category_Tag *tag = (CEC_Category_Tag *)request->GetFirstTagSafe(); if (tag->Apply()) { response = new CECPacket(EC_OP_NOOP); } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_CATEGORY, tag->GetInt())); response->AddTag(CECTag(EC_TAG_CATEGORY_PATH, tag->Path())); } Notify_CategoryUpdate(tag->GetInt()); #else CEC_Category_Tag tag(*static_cast(request->GetFirstTagSafe())); if (tag.Apply()) { response = new CECPacket(EC_OP_NOOP); } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_CATEGORY, tag.GetInt())); response->AddTag(CECTag(EC_TAG_CATEGORY_PATH, tag.Path())); } Notify_CategoryUpdate(tag.GetInt()); #endif // ADUNANZA END } else { response = new CECPacket(EC_OP_NOOP); } break; case EC_OP_DELETE_CATEGORY: if ( request->GetTagCount() == 1 ) { uint32 cat = request->GetFirstTagSafe()->GetInt(); // this noes not only update the gui, but actually deletes the cat Notify_CategoryDelete(cat); } response = new CECPacket(EC_OP_NOOP); break; // // Logging // case EC_OP_ADDLOGLINE: if (request->GetTagByName(EC_TAG_LOG_TO_STATUS) != NULL) { AddLogLineC(request->GetTagByNameSafe(EC_TAG_STRING)->GetStringData()); } else { AddLogLineN(request->GetTagByNameSafe(EC_TAG_STRING)->GetStringData()); } response = new CECPacket(EC_OP_NOOP); break; case EC_OP_ADDDEBUGLOGLINE: if (request->GetTagByName(EC_TAG_LOG_TO_STATUS) != NULL) { AddDebugLogLineC(logGeneral, request->GetTagByNameSafe(EC_TAG_STRING)->GetStringData()); } else { AddDebugLogLineN(logGeneral, request->GetTagByNameSafe(EC_TAG_STRING)->GetStringData()); } response = new CECPacket(EC_OP_NOOP); break; case EC_OP_GET_LOG: response = new CECPacket(EC_OP_LOG); response->AddTag(CECTag(EC_TAG_STRING, theApp->GetLog(false))); break; case EC_OP_GET_DEBUGLOG: response = new CECPacket(EC_OP_DEBUGLOG); response->AddTag(CECTag(EC_TAG_STRING, theApp->GetDebugLog(false))); break; case EC_OP_RESET_LOG: theApp->GetLog(true); response = new CECPacket(EC_OP_NOOP); break; case EC_OP_RESET_DEBUGLOG: theApp->GetDebugLog(true); response = new CECPacket(EC_OP_NOOP); break; case EC_OP_GET_LAST_LOG_ENTRY: { wxString tmp = theApp->GetLog(false); if (tmp.Last() == '\n') { tmp.RemoveLast(); } response = new CECPacket(EC_OP_LOG); response->AddTag(CECTag(EC_TAG_STRING, tmp.AfterLast('\n'))); } break; case EC_OP_GET_SERVERINFO: response = new CECPacket(EC_OP_SERVERINFO); response->AddTag(CECTag(EC_TAG_STRING, theApp->GetServerLog(false))); break; case EC_OP_CLEAR_SERVERINFO: theApp->GetServerLog(true); response = new CECPacket(EC_OP_NOOP); break; // // Statistics // case EC_OP_GET_STATSGRAPHS: response = GetStatsGraphs(request); break; case EC_OP_GET_STATSTREE: { theApp->m_statistics->UpdateStatsTree(); response = new CECPacket(EC_OP_STATSTREE); CECTag* tree = theStats::GetECStatTree(request->GetTagByNameSafe(EC_TAG_STATTREE_CAPPING)->GetInt()); if (tree) { response->AddTag(*tree); delete tree; } if (request->GetDetailLevel() == EC_DETAIL_WEB) { // ADUNANZA BEGIN #if 0 response->AddTag(CECTag(EC_TAG_SERVER_VERSION, wxT(VERSION))); #else // non avendo altri campi appendo ADU_MOD in EC_TAG_VERSION per riconoscere gli AdunanzA wxString tmpVersion; tmpVersion << wxT(VERSION) << wxT(" ") << ADU_MOD; response->AddTag(CECTag(EC_TAG_SERVER_VERSION, tmpVersion)); #endif // ADUNANZA END response->AddTag(CECTag(EC_TAG_USER_NICK, thePrefs::GetUserNick())); } break; } // // Kad // case EC_OP_KAD_START: if (thePrefs::GetNetworkKademlia()) { response = new CECPacket(EC_OP_NOOP); if ( !Kademlia::CKademlia::IsRunning() ) { Kademlia::CKademlia::Start(); theApp->ShowConnectionState(); } } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Kad is disabled in preferences."))); } break; case EC_OP_KAD_STOP: theApp->StopKad(); theApp->ShowConnectionState(); response = new CECPacket(EC_OP_NOOP); break; case EC_OP_KAD_UPDATE_FROM_URL: { wxString url = request->GetFirstTagSafe()->GetStringData(); // Save the new url, and update the UI (if not amuled). Notify_NodesURLChanged(url); thePrefs::SetKadNodesUrl(url); theApp->UpdateNotesDat(url); response = new CECPacket(EC_OP_NOOP); break; } case EC_OP_KAD_BOOTSTRAP_FROM_IP: if (thePrefs::GetNetworkKademlia()) { theApp->BootstrapKad(request->GetTagByNameSafe(EC_TAG_BOOTSTRAP_IP)->GetInt(), request->GetTagByNameSafe(EC_TAG_BOOTSTRAP_PORT)->GetInt()); theApp->ShowConnectionState(); response = new CECPacket(EC_OP_NOOP); } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Kad is disabled in preferences."))); } break; // // Networks // These requests are currently used only in the text client // case EC_OP_CONNECT: if (thePrefs::GetNetworkED2K()) { response = new CECPacket(EC_OP_STRINGS); if (theApp->IsConnectedED2K()) { response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Already connected to eD2k."))); } else { theApp->serverconnect->ConnectToAnyServer(); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Connecting to eD2k..."))); } } if (thePrefs::GetNetworkKademlia()) { if (!response) { response = new CECPacket(EC_OP_STRINGS); } if (theApp->IsConnectedKad()) { response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Already connected to Kad."))); } else { theApp->StartKad(); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Connecting to Kad..."))); } } if (response) { theApp->ShowConnectionState(); } else { response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("All networks are disabled."))); } break; case EC_OP_DISCONNECT: if (theApp->IsConnected()) { response = new CECPacket(EC_OP_STRINGS); if (theApp->IsConnectedED2K()) { theApp->serverconnect->Disconnect(); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Disconnected from eD2k."))); } if (theApp->IsConnectedKad()) { theApp->StopKad(); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Disconnected from Kad."))); } theApp->ShowConnectionState(); } else { response = new CECPacket(EC_OP_NOOP); } break; } if (!response) { AddLogLineN(CFormat(_("External Connection: invalid opcode received: %#x")) % request->GetOpCode()); wxFAIL; response = new CECPacket(EC_OP_FAILED); response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Invalid opcode (wrong protocol version?)"))); } return response; } /* * Here notification-based EC. Notification will be sorted by priority for possible throttling. */ /* * Core general status */ ECStatusMsgSource::ECStatusMsgSource() { m_last_ed2k_status_sent = 0xffffffff; m_last_kad_status_sent = 0xffffffff; m_server = (void *)0xffffffff; } uint32 ECStatusMsgSource::GetEd2kStatus() { if ( theApp->IsConnectedED2K() ) { return theApp->GetED2KID(); } else if ( theApp->serverconnect->IsConnecting() ) { return 1; } else { return 0; } } uint32 ECStatusMsgSource::GetKadStatus() { if ( theApp->IsConnectedKad() ) { return 1; } else if ( Kademlia::CKademlia::IsFirewalled() ) { return 2; } else if ( Kademlia::CKademlia::IsRunning() ) { return 3; } return 0; } CECPacket *ECStatusMsgSource::GetNextPacket() { if ( (m_last_ed2k_status_sent != GetEd2kStatus()) || (m_last_kad_status_sent != GetKadStatus()) || (m_server != theApp->serverconnect->GetCurrentServer()) ) { m_last_ed2k_status_sent = GetEd2kStatus(); m_last_kad_status_sent = GetKadStatus(); m_server = theApp->serverconnect->GetCurrentServer(); CECPacket *response = new CECPacket(EC_OP_STATS); response->AddTag(CEC_ConnState_Tag(EC_DETAIL_UPDATE)); return response; } return 0; } /* * Downloading files */ ECPartFileMsgSource::ECPartFileMsgSource() { for (unsigned int i = 0; i < theApp->downloadqueue->GetFileCount(); i++) { CPartFile *cur_file = theApp->downloadqueue->GetFileByIndex(i); PARTFILE_STATUS status = { true, false, false, false, true, cur_file }; m_dirty_status[cur_file->GetFileHash()] = status; } } // ADUNANZA BEGIN // back #if 0 void ECPartFileMsgSource::SetDirty(CPartFile *file) #else void ECPartFileMsgSource::SetDirty(const CPartFile *file) #endif // ADUNANZA END { CMD4Hash filehash = file->GetFileHash(); if ( m_dirty_status.find(filehash) != m_dirty_status.end() ) { m_dirty_status[filehash].m_dirty = true;; } } // ADUNANZA BEGIN // back #if 0 void ECPartFileMsgSource::SetNew(CPartFile *file) #else void ECPartFileMsgSource::SetNew(const CPartFile *file) #endif // ADUNANZA END { CMD4Hash filehash = file->GetFileHash(); wxASSERT ( m_dirty_status.find(filehash) == m_dirty_status.end() ); PARTFILE_STATUS status = { true, false, false, false, true, file }; m_dirty_status[filehash] = status; } // ADUNANZA BEGIN // back #if 0 void ECPartFileMsgSource::SetCompleted(CPartFile *file) #else void ECPartFileMsgSource::SetCompleted(const CPartFile *file) #endif // ADUNANZA END { CMD4Hash filehash = file->GetFileHash(); wxASSERT ( m_dirty_status.find(filehash) != m_dirty_status.end() ); m_dirty_status[filehash].m_finished = true; } // ADUNANZA BEGIN // back #if 0 void ECPartFileMsgSource::SetRemoved(CPartFile *file) #else void ECPartFileMsgSource::SetRemoved(const CPartFile *file) #endif // ADUNANZA END { CMD4Hash filehash = file->GetFileHash(); wxASSERT ( m_dirty_status.find(filehash) != m_dirty_status.end() ); m_dirty_status[filehash].m_removed = true; } CECPacket *ECPartFileMsgSource::GetNextPacket() { for(std::map::iterator it = m_dirty_status.begin(); it != m_dirty_status.end(); it++) { if ( it->second.m_new || it->second.m_dirty || it->second.m_removed) { CMD4Hash filehash = it->first; // ADUNANZA BEGIN // back #if 0 CPartFile *partfile = it->second.m_file; #else const CPartFile *partfile = it->second.m_file; #endif // ADUNANZA END CECPacket *packet = new CECPacket(EC_OP_DLOAD_QUEUE); if ( it->second.m_removed ) { CECTag tag(EC_TAG_PARTFILE, filehash); packet->AddTag(tag); m_dirty_status.erase(it); } else { CEC_PartFile_Tag tag(partfile, it->second.m_new ? EC_DETAIL_FULL : EC_DETAIL_UPDATE); packet->AddTag(tag); } m_dirty_status[filehash].m_new = false; m_dirty_status[filehash].m_dirty = false; return packet; } } return 0; } /* * Shared files - similar to downloading */ ECKnownFileMsgSource::ECKnownFileMsgSource() { for (unsigned int i = 0; i < theApp->sharedfiles->GetFileCount(); i++) { // ADUNANZA BEGIN // back #if 0 CKnownFile *cur_file = (CKnownFile *)theApp->sharedfiles->GetFileByIndex(i); #else const CKnownFile *cur_file = theApp->sharedfiles->GetFileByIndex(i); #endif // ADUNANZA END KNOWNFILE_STATUS status = { true, false, false, true, cur_file }; m_dirty_status[cur_file->GetFileHash()] = status; } } // ADUNANZA BEGIN // back #if 0 void ECKnownFileMsgSource::SetDirty(CKnownFile *file) #else void ECKnownFileMsgSource::SetDirty(const CKnownFile *file) #endif // ADUNANZA END { CMD4Hash filehash = file->GetFileHash(); if ( m_dirty_status.find(filehash) != m_dirty_status.end() ) { m_dirty_status[filehash].m_dirty = true;; } } // ADUNANZA BEGIN // back #if 0 void ECKnownFileMsgSource::SetNew(CKnownFile *file) #else void ECKnownFileMsgSource::SetNew(const CKnownFile *file) #endif // ADUNANZA END { CMD4Hash filehash = file->GetFileHash(); wxASSERT ( m_dirty_status.find(filehash) == m_dirty_status.end() ); KNOWNFILE_STATUS status = { true, false, false, true, file }; m_dirty_status[filehash] = status; } // ADUNANZA BEGIN // back #if 0 void ECKnownFileMsgSource::SetRemoved(CKnownFile *file) #else void ECKnownFileMsgSource::SetRemoved(const CKnownFile *file) #endif // ADUNANZA END { CMD4Hash filehash = file->GetFileHash(); wxASSERT ( m_dirty_status.find(filehash) != m_dirty_status.end() ); m_dirty_status[filehash].m_removed = true; } CECPacket *ECKnownFileMsgSource::GetNextPacket() { for(std::map::iterator it = m_dirty_status.begin(); it != m_dirty_status.end(); it++) { if ( it->second.m_new || it->second.m_dirty || it->second.m_removed) { CMD4Hash filehash = it->first; // ADUNANZA BEGIN // back #if 0 CKnownFile *partfile = it->second.m_file; #else const CKnownFile *partfile = it->second.m_file; #endif // ADUNANZA END CECPacket *packet = new CECPacket(EC_OP_SHARED_FILES); if ( it->second.m_removed ) { CECTag tag(EC_TAG_PARTFILE, filehash); packet->AddTag(tag); m_dirty_status.erase(it); } else { CEC_SharedFile_Tag tag(partfile, it->second.m_new ? EC_DETAIL_FULL : EC_DETAIL_UPDATE); packet->AddTag(tag); } m_dirty_status[filehash].m_new = false; m_dirty_status[filehash].m_dirty = false; return packet; } } return 0; } /* * Notification about search status */ ECSearchMsgSource::ECSearchMsgSource() { } CECPacket *ECSearchMsgSource::GetNextPacket() { if ( m_dirty_status.empty() ) { return 0; } CECPacket *response = new CECPacket(EC_OP_SEARCH_RESULTS); for(std::map::iterator it = m_dirty_status.begin(); it != m_dirty_status.end(); it++) { if ( it->second.m_new ) { response->AddTag(CEC_SearchFile_Tag(it->second.m_file, EC_DETAIL_FULL)); it->second.m_new = false; } else if ( it->second.m_dirty ) { response->AddTag(CEC_SearchFile_Tag(it->second.m_file, EC_DETAIL_UPDATE)); } } return response; } void ECSearchMsgSource::FlushStatus() { m_dirty_status.clear(); } // ADUNANZA BEGIN // back #if 0 void ECSearchMsgSource::SetDirty(CSearchFile *file) #else void ECSearchMsgSource::SetDirty(const CSearchFile *file) #endif // ADUNANZA END { if ( m_dirty_status.count(file->GetFileHash()) ) { m_dirty_status[file->GetFileHash()].m_dirty = true; } else { m_dirty_status[file->GetFileHash()].m_new = true; m_dirty_status[file->GetFileHash()].m_dirty = true; m_dirty_status[file->GetFileHash()].m_child_dirty = true; m_dirty_status[file->GetFileHash()].m_file = file; } } // ADUNANZA BEGIN // back #if 0 void ECSearchMsgSource::SetChildDirty(CSearchFile *file) #else void ECSearchMsgSource::SetChildDirty(const CSearchFile *file) #endif // ADUNANZA END { m_dirty_status[file->GetFileHash()].m_child_dirty = true; } /* * Notification about uploading clients */ CECPacket *ECClientMsgSource::GetNextPacket() { return 0; } // // Notification iface per-client // ECNotifier::ECNotifier() { } ECNotifier::~ECNotifier() { while (m_msg_source.begin() != m_msg_source.end()) Remove_EC_Client(m_msg_source.begin()->first); } CECPacket *ECNotifier::GetNextPacket(ECUpdateMsgSource *msg_source_array[]) { CECPacket *packet = 0; // // priority 0 is highest // for(int i = 0; i < EC_STATUS_LAST_PRIO; i++) { if ( (packet = msg_source_array[i]->GetNextPacket()) != 0 ) { break; } } return packet; } CECPacket *ECNotifier::GetNextPacket(CECServerSocket *sock) { // // OnOutput is called for a first time before // socket is registered // if ( m_msg_source.count(sock) ) { ECUpdateMsgSource **notifier_array = m_msg_source[sock]; if ( !notifier_array ) { return 0; } CECPacket *packet = GetNextPacket(notifier_array); // ADUNANZA BEGIN // backport // printf("[EC] next update packet; opcode=%x\n",packet ? packet->GetOpCode() : 0xff); // ADUNANZA END return packet; } else { return 0; } } // // Interface to notification macros // // ADUNANZA BEGIN // back #if 0 void ECNotifier::DownloadFile_SetDirty(CPartFile *file) #else void ECNotifier::DownloadFile_SetDirty(const CPartFile *file) #endif { for(std::map::iterator i = m_msg_source.begin(); // ADUNANZA BEGIN // backport #if 0 i != m_msg_source.end(); i++) { #else i != m_msg_source.end(); ++i) { #endif // ADUNANZA END CECServerSocket *sock = i->first; if ( sock->HaveNotificationSupport() ) { ECUpdateMsgSource **notifier_array = i->second; // ADUNANZA BEGIN // backport #if 0 ((ECPartFileMsgSource *)notifier_array[EC_PARTFILE])->SetDirty(file); #else static_cast(notifier_array[EC_PARTFILE])->SetDirty(file); #endif // ADUNANZA END } } NextPacketToSocket(); } // ADUNANZA BEGIN // backport #if 0 void ECNotifier::DownloadFile_RemoveFile(CPartFile *file) { for(std::map::iterator i = m_msg_source.begin(); i != m_msg_source.end(); i++) { ECUpdateMsgSource **notifier_array = i->second; ((ECPartFileMsgSource *)notifier_array[EC_PARTFILE])->SetRemoved(file); } NextPacketToSocket(); } void ECNotifier::DownloadFile_RemoveSource(CPartFile *) { // per-partfile source list is not supported (yet), and IMHO quite useless } void ECNotifier::DownloadFile_AddFile(CPartFile *file) { for(std::map::iterator i = m_msg_source.begin(); i != m_msg_source.end(); i++) { ECUpdateMsgSource **notifier_array = i->second; ((ECPartFileMsgSource *)notifier_array[EC_PARTFILE])->SetNew(file); } NextPacketToSocket(); } void ECNotifier::DownloadFile_AddSource(CPartFile *) { // per-partfile source list is not supported (yet), and IMHO quite useless } void ECNotifier::SharedFile_AddFile(CKnownFile *file) { for(std::map::iterator i = m_msg_source.begin(); i != m_msg_source.end(); i++) { ECUpdateMsgSource **notifier_array = i->second; ((ECKnownFileMsgSource *)notifier_array[EC_KNOWN])->SetNew(file); } NextPacketToSocket(); } void ECNotifier::SharedFile_RemoveFile(CKnownFile *file) { for(std::map::iterator i = m_msg_source.begin(); i != m_msg_source.end(); i++) { ECUpdateMsgSource **notifier_array = i->second; ((ECKnownFileMsgSource *)notifier_array[EC_KNOWN])->SetRemoved(file); } NextPacketToSocket(); } #else void ECNotifier::DownloadFile_RemoveFile(const CPartFile *file) { for(std::map::iterator i = m_msg_source.begin(); i != m_msg_source.end(); ++i) { ECUpdateMsgSource **notifier_array = i->second; static_cast(notifier_array[EC_PARTFILE])->SetRemoved(file); } NextPacketToSocket(); } void ECNotifier::DownloadFile_RemoveSource(const CPartFile *) { // per-partfile source list is not supported (yet), and IMHO quite useless } void ECNotifier::DownloadFile_AddFile(const CPartFile *file) { for(std::map::iterator i = m_msg_source.begin(); i != m_msg_source.end(); ++i) { ECUpdateMsgSource **notifier_array = i->second; static_cast(notifier_array[EC_PARTFILE])->SetNew(file); } NextPacketToSocket(); } void ECNotifier::DownloadFile_AddSource(const CPartFile *) { // per-partfile source list is not supported (yet), and IMHO quite useless } void ECNotifier::SharedFile_AddFile(const CKnownFile *file) { for(std::map::iterator i = m_msg_source.begin(); i != m_msg_source.end(); ++i) { ECUpdateMsgSource **notifier_array = i->second; static_cast(notifier_array[EC_KNOWN])->SetNew(file); } NextPacketToSocket(); } void ECNotifier::SharedFile_RemoveFile(const CKnownFile *file) { for(std::map::iterator i = m_msg_source.begin(); i != m_msg_source.end(); ++i) { ECUpdateMsgSource **notifier_array = i->second; static_cast(notifier_array[EC_KNOWN])->SetRemoved(file); } NextPacketToSocket(); } #endif // ADUNANZA END void ECNotifier::SharedFile_RemoveAllFiles() { // need to figure out what to do here } void ECNotifier::Add_EC_Client(CECServerSocket *sock) { ECUpdateMsgSource **notifier_array = new ECUpdateMsgSource *[EC_STATUS_LAST_PRIO]; notifier_array[EC_STATUS] = new ECStatusMsgSource(); notifier_array[EC_SEARCH] = new ECSearchMsgSource(); notifier_array[EC_PARTFILE] = new ECPartFileMsgSource(); notifier_array[EC_CLIENT] = new ECClientMsgSource(); notifier_array[EC_KNOWN] = new ECKnownFileMsgSource(); m_msg_source[sock] = notifier_array; } void ECNotifier::Remove_EC_Client(CECServerSocket *sock) { if (m_msg_source.count(sock)) { ECUpdateMsgSource **notifier_array = m_msg_source[sock]; m_msg_source.erase(sock); for(int i = 0; i < EC_STATUS_LAST_PRIO; i++) { delete notifier_array[i]; } delete [] notifier_array; } } void ECNotifier::NextPacketToSocket() { for(std::map::iterator i = m_msg_source.begin(); // ADUNANZA BEGIN // back #if 0 i != m_msg_source.end(); i++) { #else i != m_msg_source.end(); ++i) { #endif // ADUNANZA END CECServerSocket *sock = i->first; if ( sock->HaveNotificationSupport() && !sock->DataPending() ) { ECUpdateMsgSource **notifier_array = i->second; CECPacket *packet = GetNextPacket(notifier_array); if ( packet ) { // ADUNANZA BEGIN // back // printf("[EC] sending update packet; opcode=%x\n",packet->GetOpCode()); // ADUANNZA END sock->SendPacket(packet); } } } } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ClientRef.h0000644000175000017500000001505212050266603020346 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2003-2011 Stu Redman ( sturedman@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef CLIENTREF_H #define CLIENTREF_H // // Clients are stored in many places. To prevent problems when a client gets deleted // and later a pointer to a deleted client is referenced, clients are now stored in // this class only. It uses reference counting in the client which deletes the client only // after the last reference has been unlinked. // Also the class is used as abstraction layer for the CUpDownClient class. // #include #include #include "Types.h" class CUpDownClient; class CKnownFile; class CPartFile; class CFriend; class BitVector; class CMD4Hash; // ADUNANZA BEGIN // In debug da problemi con AdunanzA.h e wxString quando compila amulecmd, per ora quindi lo commento /* #ifdef __DEBUG__ #define DEBUG_ZOMBIE_CLIENTS #endif */ // ADUNANZA END #ifdef DEBUG_ZOMBIE_CLIENTS #define LINKED_FROM , wxString from #define CLIENT_DEBUGSTRING(a) , wxT(a) #define CCLIENTREF(a, b) CClientRef(a, b) #else #define LINKED_FROM #define CLIENT_DEBUGSTRING(a) #define CCLIENTREF(a, b) CClientRef(a) #endif class CClientRef { // ADUNANZA BEGIN // ritento... #if 0 CUpDownClient * m_client; #else mutable CUpDownClient * m_client; #endif // ADUNANZA END #ifdef DEBUG_ZOMBIE_CLIENTS wxString m_from; #endif public: CClientRef() { m_client = NULL; } CClientRef(const CClientRef&); CClientRef(CUpDownClient * client LINKED_FROM); // ADUNANZA BEGIN // backport #if 0 CClientRef(class CEC_UpDownClient_Tag *); #else CClientRef(const class CEC_UpDownClient_Tag *); #endif // ADUNANZA END ~CClientRef() { Unlink(); } CClientRef& operator = (const CClientRef& ref) { // ADUNANZA BEGIN if (this == &ref) return *this; // ADUNANZA END #ifdef DEBUG_ZOMBIE_CLIENTS m_from = wxT("assigned from ") + ref.m_from; Link(ref.m_client, m_from); #else Link(ref.m_client); #endif return *this; } // For sets and maps bool operator < (const CClientRef & other) const { return m_client < other.m_client; } bool operator == (const CClientRef & other) const { return m_client == other.m_client; } bool operator != (const CClientRef & other) const { return m_client != other.m_client; } void swap(CClientRef & other) { CUpDownClient * c = m_client; m_client = other.m_client; other.m_client = c; #ifdef DEBUG_ZOMBIE_CLIENTS m_from.swap(other.m_from); #endif } void Link(CUpDownClient * client LINKED_FROM); void Unlink(); bool IsLinked() const { return m_client != NULL; } // Return client, no matter if it was deleted CUpDownClient * GetClient() const { return m_client; } // Check if client was deleted, if yes unlink and return zero CUpDownClient * GetClientChecked(); // Check if client was deleted, if yes unlink CClientRef& GetRef(); void Safe_Delete(); // Wrapper methods void ClearUploadFileID() const; // only wrapper const uint32 ECID() const; bool ExtProtocolAvailable() const; uint16 GetAvailablePartCount() const; const wxString& GetClientFilename() const; const wxString& GetClientModString() const; const wxString& GetClientOSInfo() const; uint8 GetClientSoft() const; const wxString& GetClientVerString() const; uint64 GetDownloadedTotal() const; uint8 GetDownloadState() const; CFriend* GetFriend() const; bool GetFriendSlot() const; wxString GetFullIP() const; uint16 GetKadPort() const; float GetKBpsDown() const; uint32 GetIP() const; uint16 GetLastDownloadingPart() const; uint16 GetNextRequestedPart() const; uint8 GetObfuscationStatus() const; uint16 GetOldRemoteQueueRank() const; const BitVector& GetPartStatus() const; uint16 GetRemoteQueueRank() const; CPartFile* GetRequestFile() const; uint32 GetScore() const; double GetScoreRatio() const; uint32 GetServerIP() const; const wxString GetServerName() const; uint16 GetServerPort() const; const wxString& GetSoftStr() const; const wxString& GetSoftVerStr() const; int GetSourceFrom() const; // ESourceFrom wxString GetSecureIdentTextStatus() const; uint64 GetTransferredDown() const; uint64 GetTransferredUp() const; uint16 GetUDPPort() const; uint32 GetUploadDatarate() const; uint64 GetUploadedTotal() const; const CKnownFile* GetUploadFile() const; uint16 GetUploadQueueWaitingPosition() const; uint8 GetUploadState() const; size_t GetUpPartCount() const; const CMD4Hash& GetUserHash() const; uint32 GetUserIDHybrid() const; const wxString& GetUserName() const; uint16_t GetUserPort() const; uint32 GetVersion() const; bool HasDisabledSharedFiles() const; bool HasLowID() const; bool IsBadGuy() const; bool IsFriend() const; bool IsIdentified() const; bool IsRemoteQueueFull() const; bool IsUpPartAvailable(uint16 iPart) const; void RequestSharedFileList() const; void SetCommentDirty(bool bDirty = true) const; // only wrapper const void SetFriend(CFriend* newfriend) const; // only wrapper const void SetFriendSlot(bool bNV) const; // only wrapper const bool SwapToAnotherFile(bool bIgnoreNoNeeded, bool ignoreSuspensions, bool bRemoveCompletely, CPartFile* toFile = NULL) const; // only wrapper const // ADUNANZA BEGIN uint32 GetClientAduType() const; const wxString& GetClientFWCity() const; bool IsFastwebFiber() const; bool IsNotDeletedAndIsDownloadingClient() const; // ADUNANZA END }; // efficient std::swap for it namespace std { template<> inline void swap(CClientRef& a, CClientRef& b) { a.swap(b); } } typedef std::list CClientRefList; typedef std::set CClientRefSet; #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ThreadScheduler.h0000644000175000017500000001341212050266603021537 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2006-2011 Mikkel Schubert ( xaignar@amule.org / http://www.amule.org ) // Copyright (c) 2006-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef THREADSCHEDULER_H #define THREADSCHEDULER_H #include #include #include "Types.h" #include "MuleThread.h" class CThreadTask; //! The priority values of tasks. enum ETaskPriority { ETP_Low = 0, ETP_Normal, ETP_High, //! For tasks such as finding shared files and ipfilter.dat loading only. ETP_Critical }; /** * This class mananges scheduling of background tasks. * * Currently it is assumed that all tasks are IO intensive, * so that only a single task is allowed to proceed at any * one time. All threads are run in lowest priority mode. * * Tasks are sorted by priority (see ETaskPriority) and age. * * Note that the scheduler starts in suspended mode, in * which tasks are queued but not executed. Call Start() * to begin execution of the tasks. */ class CThreadScheduler { public: /** Starts execution of queued tasks. */ static void Start(); /** * Terminates task execution and frees the scheduler object. * * Tasks added after this are discarded. */ static void Terminate(); /** * Adds a new task to the queue, returning true if the task was queued. * * Before the task is queued, it is checked against the * existing tasks based on type and description. If an * matching task already exists, this task-object is * discarded. The task is also discarded if the scheduler * has been terminated. If 'overwrite' is true, any * existing duplicate task is dropped, and if already * running, terminated. * * Note: This function takes ownership of the task. * * @see Start * @see Terminate */ static bool AddTask(CThreadTask* task, bool overwrite = false); // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) static bool Busy(); #endif // ADUNANZA END private: CThreadScheduler(); ~CThreadScheduler(); /** Returns the number of tasks on the queue. */ size_t GetTaskCount() const; /** Tries to add the given task to the queue, returning true on success. */ bool DoAddTask(CThreadTask* task, bool overwrite); /** Creates the actual scheduler thread if none exist. */ void CreateSchedulerThread(); /** Entry function called via internal thread-object. */ void* Entry(); //! Contains a task and its age. typedef std::pair CEntryPair; //! List of currently scheduled tasks. std::deque m_tasks; //! Specifies if tasks should be resorted by priority. bool m_tasksDirty; // ADUNANZA BEGIN #if defined(ENABLE_ADUNSLU2) bool m_inloop; #endif // ADUNANZA END typedef std::map CDescMap; typedef std::map CTypeMap; //! Map of current task by type -> desc. Used to avoid duplicate tasks. CTypeMap m_taskDescs; //! The actual worker thread. CMuleThread* m_thread; //! The currently running task, if any. CThreadTask* m_currentTask; friend class CTaskThread; friend struct CTaskSorter; }; /** * Base-class of all threaded tasks. * * This class acts as a pseudo-thread, and is transparently * executed on a worker thread by the CThreadScheduler * class. * * Note that the task type should be an unique description * of the task type, as it is used to detect completion of * all tasks of a given type and in duplicate detection * with the description. The description should be unique * for the given task, such that duplicates can be discovered. */ class CThreadTask { public: /** * @param type Should be a name constant among tasks of the type (hashing, completion, etc). * @param desc Should be an unique description for this task, for detecting duplicates. * @param priority Decides how soon the task will be carried out. */ CThreadTask(const wxString& type, const wxString& desc, ETaskPriority priority = ETP_Normal); /** Needed since CThreadScheduler only works with CThreadTask pointers. */ virtual ~CThreadTask(); /** Returns the task type, used for debugging and duplicate detection. */ const wxString& GetType() const; /** Returns the task description, used for debugging and duplicate detection. */ const wxString& GetDesc() const; /** Returns the priority of the task. Used when selecting the next task. */ ETaskPriority GetPriority() const; protected: //! @see wxThread::Entry virtual void Entry() = 0; /** Called when the last task of a specific type has been completed. */ virtual void OnLastTask(); /** @see wxThread::OnExit */ virtual void OnExit(); /** @see wxThread::TestDestroy */ bool TestDestroy() const; private: wxString m_type; wxString m_desc; ETaskPriority m_priority; //! The owner (scheduler), used when calling TestDestroy. CMuleThread* m_owner; //! Specifies if the specifc task should be aborted. bool m_abort; friend class CThreadScheduler; }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/KadDlg.h0000644000175000017500000000410212050266603017613 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2004-2011 Angel Vidal (Kry) ( kry@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef KADDLG_H #define KADDLG_H #include // Needed for wxPanel class COScopeCtrl; class wxListEvent; class wxCommandEvent; class wxMouseEvent; typedef struct UpdateInfo GraphUpdateInfo; class CKadDlg : public wxPanel { public: CKadDlg(wxWindow* pParent); ~CKadDlg() {}; void Init(); void SetUpdatePeriod(int step); void SetGraphColors(); void UpdateGraph(const GraphUpdateInfo& update); // ADUNANZA BEGIN // back void UpdateNodeCount(unsigned nodes); // ADUNANZA END // ADUNANZA BEGIN void UpdateNodeCount(unsigned nodes, unsigned int activeNodesCount); // ADUNANZA END private: COScopeCtrl* m_kad_scope; // Event handlers void OnBnClickedBootstrapClient(wxCommandEvent& evt); void OnBnClickedBootstrapKnown(wxCommandEvent& evt); void OnBnClickedDisconnectKad(wxCommandEvent& evt); void OnBnClickedUpdateNodeList(wxCommandEvent& evt); void OnFieldsChange(wxCommandEvent& evt); DECLARE_EVENT_TABLE() }; #endif // KADDLG_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/FastwebNet.h0000644000175000017500000000765512050266603020547 0ustar l3onl3on// per problemi vari di link separo costanti e roba rete Fastweb da AdunanzA.h / AdunanzA.cpp #if !defined(_FASTWEBNET_H_) #define _FASTWEBNET_H_ // #include in realta' ci andrebbe, ma se lo metto fallisce la compilazione di amulecmd! #include "Types.h" // needed for uint32 class wxString; /* MAN Milano........................ 1.0.0.0/8 MAN Milano hinterland Nord........ 2.0.0.0/8 MAN Genova........................ 5.0.0.0/8 MAN Veneto........................ 11.0.0.0/8 MAN Milano hinterland Sud......... 14.0.0.0/8 MAN Ancona........................ 21.0.0.0/8 MAN Grosseto...................... 22.0.0.0/8 MAN Roma.......................... 23.0.0.0/8 MAN Toscana....................... 27.0.0.0/8 MAN Piemonte...................... 28.0.0.0/8 MAN Triveneto..................... 29.0.0.0/8 MAN Bari.......................... 31.0.0.0/8 MAN Sicilia....................... 36.0.0.0/8 MAN Bologna....................... 37.0.0.0/8 MAN Napoli........................ 39.0.0.0/8 MAN Torino........................ 41.0.0.0/8 MAN Reggio Emilia................. 42.0.0.0/8 MAN Cagliari...................... 51.0.0.0/8 Routers & OAM..................... 10.0.0.0/8 Organization, Administration & Management (ad. es.: Server interni ntp, voip, billing etc. etc.) */ // Definizione zone italia FW #define MAN_MILANO 1 #define MAN_MILANO_H_NORD 2 #define MAN_GENOVA 5 #define FASTWEB_ROUTERS 10 #define MAN_VENETO 11 #define MAN_MILANO_H_SUD 14 #define MAN_ANCONA 21 #define MAN_GROSSETO 22 #define MAN_ROMA 23 #define MAN_TOSCANA 27 #define MAN_PIEMONTE 28 #define MAN_TRIVENETO 29 #define MAN_BARI 31 #define MAN_SICILIA 36 #define MAN_BOLOGNA 37 #define MAN_NAPOLI 39 #define MAN_TORINO 41 #define MAN_REGGIO_EMILIA 42 #define MAN_CAGLIARI 51 // Definizioni per icone e per riconoscimento client #define ADUNANZA_ICON_NONE 0 #define ADUNANZA_ICON_FW 1 #define ADUNANZA_ICON_ADU 2 class CFastwebNet { public: static inline bool AduIsFastWebLANIP(uint32 ip) { switch (ip & 0xff) { case MAN_ROMA: case MAN_MILANO: case MAN_MILANO_H_NORD: case MAN_MILANO_H_SUD: case MAN_GENOVA: case MAN_TRIVENETO: case MAN_BARI: case MAN_BOLOGNA: case MAN_NAPOLI: case MAN_TORINO: case MAN_REGGIO_EMILIA: case MAN_TOSCANA: case MAN_PIEMONTE: case MAN_VENETO: case MAN_GROSSETO: case MAN_SICILIA: case MAN_ANCONA: case MAN_CAGLIARI: case FASTWEB_ROUTERS: return true; default: return false; } } static bool AduIsFastWebIP(uint32 ip) { if (CFastwebNet::AduIsFastWebLANIP(ip)) return true; // match rapido: (ip & mask) == netid // netid 213.140.0.0/19 - netid (hex) 0x00008cd5 / mask 0x00e0ffff if ((ip & 0x00e0ffff) == 0x00008cd5 || // netid 213.156.32.0/19 - netid (hex) 0x00209cd5 / mask 0x00e0ffff (ip & 0x00e0ffff) == 0x00209cd5 || // netid 62.101.64.0/18 - netid (hex) 0x0040653e / mask 0x00c0ffff (ip & 0x00c0ffff) == 0x0040653e || // netid 81.208.0.0/17 - netid (hex) 0x0000d051 / mask 0x0080ffff (ip & 0x0080ffff) == 0x0000d051 || // netid 83.103.0.0/17 - netid (hex) 0x00006753 / mask 0x0080ffff (ip & 0x0080ffff) == 0x00006753 || // netid 85.18.0.0/16 - netid (hex) 0x00001255 / mask 0x0000ffff (ip & 0x0000ffff) == 0x00001255 || // netid 89.96.0.0/15 - netid (hex) 0x00006059 / mask 0x0000f7ff (ip & 0x0000f7ff) == 0x00006059 || // netid 93.32.0.0/11 - netid (hex) 0x0000205d / mask 0x0000e0ff // Allineamento 3.15b74 (ip & 0x0000e0ff) == 0x0000205d) return true; return false; } static bool AduIsValidKaduAddress( uint32 host ); static bool AduIsFastWebIP(const wxString& ipv4string); static bool AduIsFiber(uint32 ip); // static uint32 AduGetTypeBand(); static wxString GetFWCityFromIP(uint32 dwUserIP); }; #endif amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/MuleGifCtrl.cpp0000644000175000017500000000763512050266603021213 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include #include #include "MuleGifCtrl.h" #include "Types.h" BEGIN_EVENT_TABLE(MuleGifCtrl, wxControl) EVT_TIMER(GIFTIMERID, MuleGifCtrl::OnTimer) EVT_PAINT(MuleGifCtrl::OnPaint) EVT_ERASE_BACKGROUND(MuleGifCtrl::OnErase) END_EVENT_TABLE() class MuleGIFDecoder : public wxGIFDecoder { public: MuleGIFDecoder() { m_nframe = 0; } ~MuleGIFDecoder() { } void GoFirstFrame() { m_nframe = 0; } // ADUNANZA BEGIN // Back #if 0 void GoNextFrame() { m_nframe < GetFrameCount() - 1 ? m_nframe++ : m_nframe = 0; } #else void GoNextFrame() { (m_nframe < GetFrameCount() - 1) ? m_nframe++ : m_nframe = 0; } #endif // ADUNANZA END void GoLastFrame() { m_nframe = GetFrameCount() - 1; } void ConvertToImage(wxImage* image) { wxGIFDecoder::ConvertToImage(m_nframe, image); } long GetDelay() { return wxGIFDecoder::GetDelay(m_nframe); } private: uint32_t m_nframe; }; MuleGifCtrl::MuleGifCtrl( wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) : wxControl(parent, id, pos, size, style, validator, name), m_decoder(NULL), m_timer(this, GIFTIMERID) { } MuleGifCtrl::~MuleGifCtrl() { m_timer.Stop(); if (m_decoder) { delete m_decoder; m_decoder = NULL; } } bool MuleGifCtrl::LoadData(const char* data, int size) { if (m_decoder) { m_timer.Stop(); delete m_decoder; m_decoder = NULL; } wxMemoryInputStream stream(data, size); m_decoder = new MuleGIFDecoder(); if ( m_decoder->LoadGIF(stream) != wxGIF_OK ) { delete m_decoder; m_decoder = NULL; return false; } m_decoder->GoFirstFrame(); wxImage frame; m_decoder->ConvertToImage( &frame ); m_frame = wxBitmap(frame); return true; } void MuleGifCtrl::Start() { if (m_decoder && m_decoder->IsAnimation()) { m_timer.Stop(); m_decoder->GoLastFrame(); #if wxCHECK_VERSION(2, 9, 0) wxTimerEvent evt(m_timer); #else wxTimerEvent evt; #endif OnTimer(evt); } } void MuleGifCtrl::Stop() { m_timer.Stop(); } wxSize MuleGifCtrl::GetBestSize() { return m_decoder->GetAnimationSize(); } void MuleGifCtrl::OnTimer(wxTimerEvent& WXUNUSED(event)) { if (m_decoder) { if (m_decoder->IsAnimation()) { m_decoder->GoNextFrame(); } wxImage frame; m_decoder->ConvertToImage(&frame); m_frame = wxBitmap(frame); Refresh(); if (m_decoder->IsAnimation()) { m_timer.Start(m_decoder->GetDelay(), true); } } } void MuleGifCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxBufferedPaintDC dc(this); wxSize clientsize = GetClientSize(); wxSize gifsize = m_decoder->GetAnimationSize(); int x = (clientsize.GetWidth()-gifsize.GetWidth())/2; int y = (clientsize.GetHeight()-gifsize.GetHeight())/2; dc.SetBackground(*(wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID))); dc.Clear(); dc.DrawBitmap(m_frame, x, y, true); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ExternalConnector.cpp0000644000175000017500000005134512050266603022470 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "ExternalConnector.h" #ifdef HAVE_CONFIG_H #include "config.h" // Needed for VERSION and readline detection #endif #include #include // Needed for CFormat #include // For wxStringTokenizer // For readline #ifdef HAVE_LIBREADLINE #if defined(HAVE_READLINE_READLINE_H) #include // Do_not_auto_remove #elif defined(HAVE_READLINE_H) #include // Do_not_auto_remove #else /* !defined(HAVE_READLINE_H) */ extern "C" char *readline (const char*); #endif /* !defined(HAVE_READLINE_H) */ #else /* !defined(HAVE_READLINE_READLINE_H) */ /* no readline */ #endif /* HAVE_LIBREADLINE */ // For history #ifdef HAVE_READLINE_HISTORY #if defined(HAVE_READLINE_HISTORY_H) #include // Do_not_auto_remove #elif defined(HAVE_HISTORY_H) #include // Do_not_auto_remove #else /* !defined(HAVE_HISTORY_H) */ extern "C" void add_history (const char*); #endif /* defined(HAVE_READLINE_HISTORY_H) */ #else /* no history */ #endif /* HAVE_READLINE_HISTORY */ #include // Needed for CECFileConfig #include // ADUNANZA BEGIN #include "AdunanzA.h" // ADUNANZA END #ifdef _MSC_VER // silly warnings about deprecated functions #pragma warning(disable:4996) #endif //------------------------------------------------------------------- CCommandTree::~CCommandTree() { DeleteContents(m_subcommands); } CCommandTree* CCommandTree::AddCommand(CCommandTree* command) { command->m_parent = this; const wxString& cmd = command->m_command; CmdPos_t it; for (it = m_subcommands.begin(); it != m_subcommands.end(); ++it) { if ((*it)->m_command > cmd) { break; } } m_subcommands.insert(it, command); return command; } int CCommandTree::FindCommandId(const wxString& command, wxString& args, wxString& cmdstr) const { wxString cmd = command.BeforeFirst(wxT(' ')).Lower(); for (CmdPosConst_t it = m_subcommands.begin(); it != m_subcommands.end(); ++it) { if ((*it)->m_command.Lower() == cmd) { args = command.AfterFirst(wxT(' ')).Trim(false); return (*it)->FindCommandId(args, args, cmdstr); } } cmdstr = GetFullCommand().Lower(); if (m_params == CMD_PARAM_ALWAYS && args.IsEmpty()) { return CMD_ERR_MUST_HAVE_PARAM; } else if (m_params == CMD_PARAM_NEVER && !args.IsEmpty()) { return CMD_ERR_NO_PARAM; } else { if ((m_cmd_id >= 0) && (m_cmd_id & CMD_DEPRECATED)) { m_app.Show(wxT('\n') + m_verbose + wxT('\n')); return m_cmd_id & ~CMD_DEPRECATED; } else { return m_cmd_id; } } } wxString CCommandTree::GetFullCommand() const { wxString cmd = m_command; const CCommandTree *parent = m_parent; while (parent && parent->m_parent) { cmd = parent->m_command + wxT(" ") + cmd; parent = parent->m_parent; } return cmd; } void CCommandTree::PrintHelpFor(const wxString& command) const { wxString cmd = command.BeforeFirst(wxT(' ')).Lower(); if (!cmd.IsEmpty()) { for (CmdPosConst_t it = m_subcommands.begin(); it != m_subcommands.end(); ++it) { if ((*it)->m_command.Lower() == cmd) { (*it)->PrintHelpFor(command.AfterFirst(wxT(' ')).Trim(false)); return; } } if (m_parent) { m_app.Show(CFormat(_("Unknown extension '%s' for the '%s' command.\n")) % command % GetFullCommand()); } else { m_app.Show(CFormat(_("Unknown command '%s'.\n")) % command); } } else { wxString fullcmd = GetFullCommand(); if (!fullcmd.IsEmpty()) { m_app.Show(fullcmd.Upper() + wxT(": ") + wxGetTranslation(m_short) + wxT("\n")); if (!m_verbose.IsEmpty()) { m_app.Show(wxT("\n")); m_app.Show(wxGetTranslation(m_verbose)); } } if (m_params == CMD_PARAM_NEVER) { m_app.Show(_("\nThis command cannot have an argument.\n")); } else if (m_params == CMD_PARAM_ALWAYS) { m_app.Show(_("\nThis command must have an argument.\n")); } if (m_cmd_id == CMD_ERR_INCOMPLETE) { m_app.Show(_("\nThis command is incomplete, you must use one of the extensions below.\n")); } if (!m_subcommands.empty()) { CmdPosConst_t it; int maxlen = 0; if (m_parent) { m_app.Show(_("\nAvailable extensions:\n")); } else { m_app.Show(_("Available commands:\n")); } for (it = m_subcommands.begin(); it != m_subcommands.end(); ++it) { if (!((*it)->m_cmd_id >= 0 && (*it)->m_cmd_id & CMD_DEPRECATED) || m_parent) { int len = (*it)->m_command.Length(); if (len > maxlen) { maxlen = len; } } } maxlen += 4; for (it = m_subcommands.begin(); it != m_subcommands.end(); ++it) { if (!((*it)->m_cmd_id >= 0 && (*it)->m_cmd_id & CMD_DEPRECATED) || m_parent) { m_app.Show((*it)->m_command + wxString(wxT(' '), maxlen - (*it)->m_command.Length()) + wxGetTranslation((*it)->m_short) + wxT("\n")); } } if (!m_parent) { m_app.Show(CFormat(_("\nAll commands are case insensitive.\nType '%s ' to get detailed info on .\n")) % wxT("help")); } } } m_app.Show(wxT("\n")); } //------------------------------------------------------------------- CaMuleExternalConnector::CaMuleExternalConnector() : m_configFile(NULL), m_port(-1), m_KeepQuiet(false), m_Verbose(false), m_interactive(false), m_commands(*this), m_ECClient(NULL), m_InputLine(NULL), m_NeedsConfigSave(false), m_locale(NULL), m_strFullVersion(NULL), m_strOSDescription(NULL) { // ADUNANZA BEGIN #if 0 SetAppName(wxT("aMule")); // Do not change! #else SetAppName(wxT(ADU_APPNAME)); // Do not change! #endif // ADUNANZA END } CaMuleExternalConnector::~CaMuleExternalConnector() { delete m_configFile; delete m_locale; free(m_strFullVersion); free(m_strOSDescription); } void CaMuleExternalConnector::OnInitCommandSet() { m_commands.AddCommand(wxT("Quit"), CMD_ID_QUIT, wxTRANSLATE("Exits from the application."), wxEmptyString); m_commands.AddCommand(wxT("Exit"), CMD_ID_QUIT, wxTRANSLATE("Exits from the application."), wxEmptyString); m_commands.AddCommand(wxT("Help"), CMD_ID_HELP, wxTRANSLATE("Show help."), /* TRANSLATORS: Do not translate the word 'help', it is a command to the program! */ wxTRANSLATE("To get help on a command, type 'help '.\nTo get the full command list type 'help'.\n")); } void CaMuleExternalConnector::Show(const wxString &s) { if( !m_KeepQuiet ) { printf("%s", (const char *)unicode2char(s)); #ifdef __WXMSW__ fflush(stdout); #endif } } void CaMuleExternalConnector::ShowGreet() { wxString text = GetGreetingTitle(); int len = text.Length(); Show(wxT('\n') + wxString(wxT('-'), 22 + len) + wxT('\n')); Show(wxT('|') + wxString(wxT(' '), 10) + text + wxString(wxT(' '), 10) + wxT('|') + wxT('\n')); Show(wxString(wxT('-'), 22 + len) + wxT('\n')); // Do not merge the line below, or translators could translate "Help" Show(CFormat(_("\nUse '%s' for command list\n\n")) % wxT("Help")); } void CaMuleExternalConnector::Process_Answer(const wxString& answer) { wxStringTokenizer tokens(answer, wxT("\n")); while ( tokens.HasMoreTokens() ) { Show(wxT(" > ") + tokens.GetNextToken() + wxT("\n")); } } bool CaMuleExternalConnector::Parse_Command(const wxString& buffer) { wxString cmd; wxStringTokenizer tokens(buffer); while (tokens.HasMoreTokens()) { cmd += tokens.GetNextToken() + wxT(' '); } cmd.Trim(false); cmd.Trim(true); int cmd_ID = GetIDFromString(cmd); if ( cmd_ID >= 0 ) { cmd_ID = ProcessCommand(cmd_ID); } wxString error; switch (cmd_ID) { case CMD_ID_HELP: m_commands.PrintHelpFor(GetCmdArgs()); break; case CMD_ERR_SYNTAX: error = _("Syntax error!"); break; case CMD_ERR_PROCESS_CMD: Show(_("Error processing command - should never happen! Report bug, please\n")); break; case CMD_ERR_NO_PARAM: error = _("This command should not have any parameters."); break; case CMD_ERR_MUST_HAVE_PARAM: error = _("This command must have a parameter."); break; case CMD_ERR_INVALID_ARG: error = _("Invalid argument."); break; case CMD_ERR_INCOMPLETE: error = _("This is an incomplete command."); break; } if (!error.IsEmpty()) { Show(error + wxT('\n')); wxString helpStr(wxT("help")); if (!GetLastCmdStr().IsEmpty()) { helpStr << wxT(' ') << GetLastCmdStr(); } Show(CFormat(_("Type '%s' to get more help.\n")) % helpStr); } return cmd_ID == CMD_ID_QUIT; } void CaMuleExternalConnector::GetCommand(const wxString &prompt, char* buffer, size_t buffer_size) { #ifdef HAVE_LIBREADLINE char *text = readline(unicode2char(prompt + wxT("$ "))); if (text && *text && (m_InputLine == 0 || strcmp(text,m_InputLine) != 0)) { add_history (text); } if (m_InputLine) free(m_InputLine); m_InputLine = text; #else Show(prompt + wxT("$ ")); const char *text = fgets(buffer, buffer_size, stdin); // == buffer if ok, NULL if eof #endif /* HAVE_LIBREADLINE */ if ( text ) { size_t len = strlen(text); if (len > buffer_size - 1) { len = buffer_size - 1; } if (buffer != text) { strncpy(buffer, text, len); } buffer[len] = 0; } else { strncpy(buffer, "quit", buffer_size); } } void CaMuleExternalConnector::TextShell(const wxString &prompt) { char buffer[2048]; wxString buf; bool The_End = false; do { GetCommand(prompt, buffer, sizeof buffer); buf = char2unicode(buffer); The_End = Parse_Command(buf); } while ((!The_End) && (m_ECClient->IsSocketConnected())); } void CaMuleExternalConnector::ConnectAndRun(const wxString &ProgName, const wxString& ProgVersion) { if (m_NeedsConfigSave) { SaveConfigFile(); return; } #ifdef SVNDATE // ADUNANZA BEGIN #if 0 Show(CFormat(_("This is %s %s %s\n")) % wxString::FromAscii(m_appname) % wxT(VERSION) % wxT(SVNDATE)); #else Show(CFormat(_("This is %s %s based on aMule %s %s\n")) % wxString::FromAscii(m_appname) % ADU_MOD_NAME % wxT(VERSION) % wxT(SVNDATE)); #endif // ADUNANZA END #else // ADUNANZA BEGIN #if 0 Show(CFormat(_("This is %s %s\n")) % wxString::FromAscii(m_appname) % wxT(VERSION)); #else Show(CFormat(_("This is %s %s based on aMule %s\n")) % wxString::FromAscii(m_appname) % ADU_MOD_NAME % wxT(VERSION)); #endif // ADUNANZA END #endif // HostName, Port and Password if ( m_password.IsEmpty() ) { wxString pass_plain; #ifndef __WXMSW__ pass_plain = char2unicode(getpass("Enter password for mule connection: ")); #else //#warning This way, pass enter is not hidden on windows. Bad thing. char temp_str[512]; fflush(stdin); printf("Enter password for mule connection: \n"); fflush(stdout); fgets(temp_str, 512, stdin); temp_str[strlen(temp_str)-1] = '\0'; pass_plain = char2unicode(temp_str); #endif wxCHECK2(m_password.Decode(MD5Sum(pass_plain).GetHash()), /* Do nothing. */ ); // MD5 hash for an empty string, according to rfc1321. if (m_password.Encode() == wxT("D41D8CD98F00B204E9800998ECF8427E")) { m_password.Clear(); } // Clear plain-text password pass_plain = wxT("01234567890123456789"); } if (!m_password.IsEmpty()) { // Create the socket Show(_("\nCreating client...\n")); m_ECClient = new CRemoteConnect(NULL); m_ECClient->SetCapabilities(m_ZLIB, true, false); // ZLIB, UTF8 numbers, notification // ConnectToCore is blocking since m_ECClient was initialized with NULL if (!m_ECClient->ConnectToCore(m_host, m_port, wxT("foobar"), m_password.Encode(), ProgName, ProgVersion)) { // no connection => close gracefully if (!m_ECClient->GetServerReply().IsEmpty()) { Show(CFormat(wxT("%s\n")) % m_ECClient->GetServerReply()); } Show(CFormat(_("Connection Failed. Unable to connect to %s:%d\n")) % m_host % m_port); } else { // Authenticate ourselves // ConnectToCore() already authenticated for us. //m_ECClient->ConnectionEstablished(); Show(m_ECClient->GetServerReply()+wxT("\n")); if (m_ECClient->IsSocketConnected()) { if (m_interactive) { ShowGreet(); } Pre_Shell(); TextShell(ProgName); Post_Shell(); if (m_interactive) { Show(CFormat(_("\nOk, exiting %s...\n")) % ProgName); } } } m_ECClient->DestroySocket(); } else { Show(_("Cannot connect with an empty password.\nYou must specify a password either in config file\nor on command-line, or enter one when asked.\n\nExiting...\n")); } } void CaMuleExternalConnector::OnInitCmdLine(wxCmdLineParser& parser, const char* appname) { m_appname = appname; parser.AddSwitch(wxEmptyString, wxT("help"), _("Show this help text."), wxCMD_LINE_PARAM_OPTIONAL); parser.AddOption(wxT("h"), wxT("host"), _("Host where aMule is running. (default: localhost)"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL); parser.AddOption(wxT("p"), wxT("port"), _("aMule's port for External Connection. (default: 4712)"), wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL); parser.AddOption(wxT("P"), wxT("password"), _("External Connection password."), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL); parser.AddOption(wxT("f"), wxT("config-file"), _("Read configuration from file."), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL); parser.AddSwitch(wxT("q"), wxT("quiet"), _("Do not print any output to stdout."), wxCMD_LINE_PARAM_OPTIONAL); parser.AddSwitch(wxT("v"), wxT("verbose"), _("Be verbose - show also debug messages."), wxCMD_LINE_PARAM_OPTIONAL); parser.AddOption(wxT("l"), wxT("locale"), _("Sets program locale (language)."), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL); parser.AddSwitch(wxT("w"), wxT("write-config"), _("Write command line options to config file."), wxCMD_LINE_PARAM_OPTIONAL); parser.AddOption(wxEmptyString, wxT("create-config-from"), _("Creates config file based on aMule's config file."), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL); parser.AddSwitch(wxEmptyString, wxT("version"), _("Print program version."), wxCMD_LINE_PARAM_OPTIONAL); } bool CaMuleExternalConnector::OnCmdLineParsed(wxCmdLineParser& parser) { if (parser.Found(wxT("version"))) { // ADUNANZA BEGIN #if 0 printf("%s %s\n", m_appname, (const char *)unicode2char(GetMuleVersion())); #else printf("%s AdunanzA %s\n", m_appname, (const char *)unicode2char(GetMuleVersion())); #endif // ADUNANZA END return false; } if (!parser.Found(wxT("config-file"), &m_configFileName)) { m_configFileName = GetConfigDir() + wxT("remote.conf"); } wxString aMuleConfigFile; if (parser.Found(wxT("create-config-from"), &aMuleConfigFile)) { aMuleConfigFile = FinalizeFilename(aMuleConfigFile); if (!::wxFileExists(aMuleConfigFile)) { fprintf(stderr, "%s\n", (const char *)unicode2char(wxT("FATAL ERROR: File does not exist: ") + aMuleConfigFile)); exit(1); } CECFileConfig aMuleConfig(aMuleConfigFile); LoadAmuleConfig(aMuleConfig); SaveConfigFile(); m_configFile->Flush(); exit(0); } LoadConfigFile(); if ( !parser.Found(wxT("host"), &m_host) ) { if ( m_host.IsEmpty() ) { m_host = wxT("localhost"); } } long port; if (parser.Found(wxT("port"), &port)) { m_port = port; } wxString pass_plain; if (parser.Found(wxT("password"), &pass_plain)) { if (!pass_plain.IsEmpty()) { m_password.Decode(MD5Sum(pass_plain).GetHash()); } else { m_password.Clear(); } } if (parser.Found(wxT("write-config"))) { m_NeedsConfigSave = true; } parser.Found(wxT("locale"), &m_language); if (parser.Found(wxT("help"))) { parser.Usage(); return false; } m_KeepQuiet = parser.Found(wxT("quiet")); m_Verbose = parser.Found(wxT("verbose")); return true; } void CaMuleExternalConnector::LoadAmuleConfig(CECFileConfig& cfg) { m_host = wxT("localhost"); m_port = cfg.Read(wxT("/ExternalConnect/ECPort"), 4712l); cfg.ReadHash(wxT("/ExternalConnect/ECPassword"), &m_password); m_language = cfg.Read(wxT("/eMule/Language"), wxEmptyString); } void CaMuleExternalConnector::LoadConfigFile() { if (!m_configFile) { m_configFile = new CECFileConfig(m_configFileName); } if (m_configFile) { m_language = m_configFile->Read(wxT("/Locale"), wxEmptyString); m_host = m_configFile->Read(wxT("/EC/Host"), wxEmptyString); m_port = m_configFile->Read(wxT("/EC/Port"), 4712l); m_configFile->ReadHash(wxT("/EC/Password"), &m_password); m_ZLIB = m_configFile->Read(wxT("/EC/ZLIB"), 1l) != 0; } } void CaMuleExternalConnector::SaveConfigFile() { if (!wxFileName::DirExists(GetConfigDir())) { wxFileName::Mkdir(GetConfigDir()); } if (!m_configFile) { m_configFile = new CECFileConfig(m_configFileName); } if (m_configFile) { m_configFile->Write(wxT("/Locale"), m_language); m_configFile->Write(wxT("/EC/Host"), m_host); m_configFile->Write(wxT("/EC/Port"), m_port); m_configFile->WriteHash(wxT("/EC/Password"), m_password); } } bool CaMuleExternalConnector::OnInit() { #ifndef __WXMSW__ #if wxUSE_ON_FATAL_EXCEPTION // catch fatal exceptions wxHandleFatalExceptions(true); #endif #endif m_strFullVersion = strdup((const char *)unicode2char(GetMuleVersion())); m_strOSDescription = strdup((const char *)unicode2char(wxGetOsDescription())); // Handle uncaught exceptions InstallMuleExceptionHandler(); bool retval = wxApp::OnInit(); OnInitCommandSet(); InitCustomLanguages(); SetLocale(m_language); return retval; } wxString CaMuleExternalConnector::SetLocale(const wxString& language) { if (!language.IsEmpty()) { m_language = language; if (m_locale) { delete m_locale; } m_locale = new wxLocale; InitLocale(*m_locale, StrLang2wx(language)); } return m_locale == NULL ? wxString() : m_locale->GetCanonicalName(); } #if !wxUSE_GUI && defined(__WXMAC__) && !wxCHECK_VERSION(2, 9, 0) #include // Do_not_auto_remove #include // Do_not_auto_remove class CaMuleExternalConnectorTraits : public wxConsoleAppTraits { public: virtual wxStandardPathsBase& GetStandardPaths() { return s_stdPaths; } private: static wxStandardPathsCF s_stdPaths; }; wxStandardPathsCF CaMuleExternalConnectorTraits::s_stdPaths; wxAppTraits* CaMuleExternalConnector::CreateTraits() { return new CaMuleExternalConnectorTraits; } #endif #if wxUSE_ON_FATAL_EXCEPTION // Gracefully handle fatal exceptions and print backtrace if possible void CaMuleExternalConnector::OnFatalException() { /* Print the backtrace */ fprintf(stderr, "\n--------------------------------------------------------------------------------\n"); fprintf(stderr, "A fatal error has occurred and %s has crashed.\n", m_appname); // ADUNANZA BEGIN // Per ora evitiamo di postare backtraces! // E soprattutto a amule.org! #if 0 fprintf(stderr, "Please assist us in fixing this problem by posting the backtrace below in our\n"); fprintf(stderr, "'aMule Crashes' forum and include as much information as possible regarding the\n"); fprintf(stderr, "circumstances of this crash. The forum is located here:\n"); fprintf(stderr, " http://forum.amule.org/index.php?board=67.0\n"); fprintf(stderr, "If possible, please try to generate a real backtrace of this crash:\n"); fprintf(stderr, " http://wiki.amule.org/index.php/Backtraces\n\n"); #else fprintf(stderr, "\n\n"); #endif // ADUNANZA END fprintf(stderr, "----------------------------=| BACKTRACE FOLLOWS: |=----------------------------\n"); fprintf(stderr, "Current version is: %s %s\n", m_appname, m_strFullVersion); fprintf(stderr, "Running on: %s\n\n", m_strOSDescription); print_backtrace(1); // 1 == skip this function. fprintf(stderr, "\n--------------------------------------------------------------------------------\n"); } #endif #ifdef __WXDEBUG__ void CaMuleExternalConnector::OnAssertFailure(const wxChar *file, int line, const wxChar *func, const wxChar *cond, const wxChar *msg) { #if !defined wxUSE_STACKWALKER || !wxUSE_STACKWALKER wxString errmsg = CFormat( wxT("%s:%s:%d: Assertion '%s' failed. %s") ) % file % func % line % cond % ( msg ? msg : wxT("") ); fprintf(stderr, "Assertion failed: %s\n", (const char*)unicode2char(errmsg)); // Skip the function-calls directly related to the assert call. fprintf(stderr, "\nBacktrace follows:\n"); print_backtrace(3); fprintf(stderr, "\n"); #else wxApp::OnAssertFailure(file, line, func, cond, msg); #endif } #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ED2KLink.cpp0000644000175000017500000002053312050266603020331 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include "ED2KLink.h" // Interface declarations. #include #include // Needed for wxRegEx #include // Needed for wxStringTokenizer #include #include "MemFile.h" // Needed for CMemFile #include "NetworkFunctions.h" // Needed for Uint32toStringIP #include // Needed for CFormat CED2KLink::CED2KLink( LinkType type ) : m_type( type ) { } CED2KLink::~CED2KLink() { } CED2KLink::LinkType CED2KLink::GetKind() const { return m_type; } CED2KLink* CED2KLink::CreateLinkFromUrl(const wxString& link) { wxRegEx re_type(wxT("ed2k://\\|(file|server|serverlist)\\|.*/"), wxRE_ICASE | wxRE_DEFAULT); { wxCHECK(re_type.IsValid(), NULL); } if (!re_type.Matches(link)) { throw wxString(wxT("Not a valid ed2k-URI")); } wxString type = re_type.GetMatch(link, 1).MakeLower(); { wxCHECK(type.Length(), NULL); } if (type == wxT("file")) { return new CED2KFileLink(link); } else if (type == wxT("server")) { return new CED2KServerLink(link); } else if (type == wxT("serverlist")) { return new CED2KServerListLink(link); } else { wxCHECK(false, NULL); } } ///////////////////////////////////////////// // CED2KServerListLink implementation ///////////////////////////////////////////// CED2KServerListLink::CED2KServerListLink(const wxString& link) : CED2KLink( kServerList ) { wxRegEx re(wxT("ed2k://\\|serverlist\\|(.*)\\|/"), wxRE_ICASE | wxRE_DEFAULT); if (!re.Matches(link)) { throw wxString(wxT("Not a valid server-list link.")); } m_address = UnescapeHTML(re.GetMatch(link, 1)); } wxString CED2KServerListLink::GetLink() const { return wxT("ed2k://|serverlist|") + m_address + wxT("|/"); } const wxString& CED2KServerListLink::GetAddress() const { return m_address; } ///////////////////////////////////////////// // CED2KServerLink implementation ///////////////////////////////////////////// CED2KServerLink::CED2KServerLink(const wxString& link) : CED2KLink( kServer ) { wxRegEx re(wxT("ed2k://\\|server\\|([^\\|]+)\\|([0-9]+)\\|/"), wxRE_ICASE | wxRE_DEFAULT); if (!re.Matches(link)) { throw wxString(wxT("Not a valid server link.")); } wxString ip = UnescapeHTML(re.GetMatch(link, 1)); wxString port = re.GetMatch(link, 2); unsigned long ul = StrToULong(port); if (ul > 0xFFFF || ul == 0) { throw wxString( wxT("Bad port number") ); } m_port = static_cast(ul); m_ip = StringIPtoUint32(ip); } wxString CED2KServerLink::GetLink() const { return wxString(wxT("ed2k://|server|")) << Uint32toStringIP(m_ip) << wxT("|") << m_port << wxT("|/"); } uint32 CED2KServerLink::GetIP() const { return m_ip; } uint16 CED2KServerLink::GetPort() const { return m_port; } ///////////////////////////////////////////// // CED2KFileLink implementation ///////////////////////////////////////////// CED2KFileLink::CED2KFileLink(const wxString& link) : CED2KLink( kFile ), m_hashset(NULL), m_size(0), m_bAICHHashValid(false) { // Start tokenizing after the "ed2k:://|file|" part of the link wxStringTokenizer tokens(link, wxT("|"), wxTOKEN_RET_EMPTY_ALL); // Must at least be ed2k://|file|NAME|SIZE|HASH|/ if (tokens.CountTokens() < 5 || tokens.GetNextToken() != wxT("ed2k://") || tokens.GetNextToken() != wxT("file")) { throw wxString(wxT("Not a valid file link")); } m_name = UnescapeHTML(tokens.GetNextToken().Strip(wxString::both)); // We don't want a path in the name. m_name.Replace(wxT("/"), wxT("_")); // Note that StrToULong returns ULONG_MAX if the value is // too large to be contained in a unsigned long, which means // that this check is valid, as odd as it seems wxString size = tokens.GetNextToken().Strip(wxString::both); m_size = StrToULongLong(size); if ((m_size == 0) || (m_size > MAX_FILE_SIZE)) { throw wxString(CFormat(wxT("Invalid file size %i")) % m_size); } if (!m_hash.Decode(tokens.GetNextToken().Strip(wxString::both))) { throw wxString(wxT("Invalid hash")); } // Check extra fields (sources, parthashes, masterhashes) while (tokens.HasMoreTokens()) { wxString field = tokens.GetNextToken().MakeLower().Strip(wxString::both); if (field.StartsWith(wxT("sources,"))) { wxStringTokenizer srcTokens(field, wxT(",")); // Skipping the first token ("sources"). wxString token = srcTokens.GetNextToken(); while (srcTokens.HasMoreTokens()) { token = srcTokens.GetNextToken().Strip(wxString::both); wxStringTokenizer sourceTokens(token, wxT(":")); wxString addr = sourceTokens.GetNextToken(); if (addr.IsEmpty()) { throw wxString( wxT("Empty address" ) ); } wxString strport = sourceTokens.GetNextToken(); if (strport.IsEmpty()) { throw wxString( wxT("Empty port" ) ); } unsigned port = StrToULong(strport); // Sanity checking if ((port == 0) || (port > 0xFFFF)) { throw wxString( wxT("Invalid Port" ) ); } wxString sourcehash; uint8 cryptoptions =0; wxString strcryptoptions = sourceTokens.GetNextToken(); if (!strcryptoptions.IsEmpty()) { cryptoptions = (uint8) StrToULong(strcryptoptions); if ((cryptoptions & 0x80) > 0) { // Source ready for encryption, hash included. sourcehash = sourceTokens.GetNextToken(); if (sourcehash.IsEmpty()) { throw wxString( wxT("Empty sourcehash conflicts with cryptoptions flag 0x80" ) ); } } } // ADUNANZA BEGIN // Fix warning Ubuntu (aMule rev 10797) #if 0 SED2KLinkSource entry = { addr, port, sourcehash, cryptoptions }; #else SED2KLinkSource entry = { addr, (uint16) port, sourcehash, cryptoptions }; #endif // ADUNANZA END m_sources.push_back(entry); } } else if (field.StartsWith(wxT("p="))) { wxStringTokenizer hashTokens(field.AfterFirst(wxT('=')), wxT(":"), wxTOKEN_RET_EMPTY_ALL); m_hashset = new CMemFile(); m_hashset->WriteHash(m_hash); m_hashset->WriteUInt16(0); while (hashTokens.HasMoreTokens()) { CMD4Hash hash; if (!hash.Decode(hashTokens.GetNextToken().Strip(wxString::both))) { throw wxString(wxT("Invalid hash in part-hashes list")); } m_hashset->WriteHash(hash); } unsigned count = m_hashset->GetLength() / 16u - 1u; if (count) { m_hashset->Seek( 16, wxFromStart); m_hashset->WriteUInt16( count ); m_hashset->Seek( 0, wxFromStart); } else { delete m_hashset; m_hashset = NULL; } } else if (field.StartsWith(wxT("h="))) { wxString hash = field.AfterFirst(wxT('=')).MakeUpper(); size_t decodedSize = DecodeBase32(hash, CAICHHash::GetHashSize(), m_AICHHash.GetRawHash()); if ((decodedSize != CAICHHash::GetHashSize()) || m_AICHHash.GetString() != hash) { throw wxString(wxT("Invalid master-hash")); } m_bAICHHashValid = true; } } } CED2KFileLink::~CED2KFileLink() { delete m_hashset; m_hashset = NULL; } wxString CED2KFileLink::GetLink() const { return CFormat(wxT("ed2k://|file|%s|%u|%s|/")) % m_name % m_size % m_hash.Encode(); } wxString CED2KFileLink::GetName() const { return m_name; } uint64 CED2KFileLink::GetSize() const { return m_size; } const CMD4Hash& CED2KFileLink::GetHashKey() const { return m_hash; } bool CED2KFileLink::HasValidAICHHash() const { return m_bAICHHashValid; } const CAICHHash& CED2KFileLink::GetAICHHash() const { return m_AICHHash; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/SearchDlg.cpp0000644000175000017500000004405312050266603020665 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include // Do_not_auto_remove (win32) #include #include "SearchDlg.h" // Interface declarations. #include "SearchListCtrl.h" // Needed for CSearchListCtrl #include "muuli_wdr.h" // Needed for IDC_STARTS #include "amuleDlg.h" // Needed for CamuleDlg #include "MuleNotebook.h" #include "GetTickCount.h" #include "Preferences.h" #include "amule.h" // Needed for theApp #include "SearchList.h" // Needed for CSearchList #include #include "Logger.h" #define ID_SEARCHLISTCTRL wxID_HIGHEST+667 // just to keep compiler happy static wxCommandEvent nullEvent; BEGIN_EVENT_TABLE(CSearchDlg, wxPanel) EVT_BUTTON( IDC_STARTS, CSearchDlg::OnBnClickedStart) EVT_TEXT_ENTER( IDC_SEARCHNAME, CSearchDlg::OnBnClickedStart) EVT_BUTTON(IDC_CANCELS, CSearchDlg::OnBnClickedStop) EVT_LIST_ITEM_SELECTED(ID_SEARCHLISTCTRL, CSearchDlg::OnListItemSelected) EVT_BUTTON(IDC_SDOWNLOAD, CSearchDlg::OnBnClickedDownload) EVT_BUTTON(IDC_SEARCH_RESET, CSearchDlg::OnBnClickedReset) EVT_BUTTON(IDC_CLEAR_RESULTS, CSearchDlg::OnBnClickedClear) EVT_CHECKBOX(IDC_EXTENDEDSEARCHCHECK,CSearchDlg::OnExtendedSearchChange) EVT_CHECKBOX(IDC_FILTERCHECK,CSearchDlg::OnFilterCheckChange) EVT_MULENOTEBOOK_PAGE_CLOSING(ID_NOTEBOOK, CSearchDlg::OnSearchClosing) EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, CSearchDlg::OnSearchPageChanged) // Event handlers for the parameter fields getting changed EVT_CUSTOM( wxEVT_COMMAND_TEXT_UPDATED, IDC_SEARCHNAME, CSearchDlg::OnFieldChanged) EVT_CUSTOM( wxEVT_COMMAND_TEXT_UPDATED, IDC_EDITSEARCHEXTENSION, CSearchDlg::OnFieldChanged) EVT_CUSTOM( wxEVT_COMMAND_SPINCTRL_UPDATED, wxID_ANY, CSearchDlg::OnFieldChanged) EVT_CUSTOM( wxEVT_COMMAND_CHOICE_SELECTED, wxID_ANY, CSearchDlg::OnFieldChanged) // Event handlers for the filter fields getting changed. EVT_TEXT_ENTER(ID_FILTER_TEXT, CSearchDlg::OnFilteringChange) EVT_CHECKBOX(ID_FILTER_INVERT, CSearchDlg::OnFilteringChange) EVT_CHECKBOX(ID_FILTER_KNOWN, CSearchDlg::OnFilteringChange) EVT_BUTTON(ID_FILTER, CSearchDlg::OnFilteringChange) END_EVENT_TABLE() CSearchDlg::CSearchDlg(wxWindow* pParent) : wxPanel(pParent, -1) { m_last_search_time = 0; wxSizer* content = searchDlg(this, true); content->Show(this, true); m_progressbar = CastChild( ID_SEARCHPROGRESS, wxGauge ); m_progressbar->SetRange(100); m_notebook = CastChild( ID_NOTEBOOK, CMuleNotebook ); #ifdef __WXMAC__ //#warning TODO: restore the image list if/when wxMac supports locating the image #else // Initialise the image list wxImageList* m_ImageList = new wxImageList(16,16); m_ImageList->Add(amuleSpecial(3)); m_ImageList->Add(amuleSpecial(4)); m_notebook->AssignImageList(m_ImageList); #endif // Sanity sanity wxChoice* searchchoice = CastChild( ID_SEARCHTYPE, wxChoice ); wxASSERT(searchchoice); wxASSERT(searchchoice->GetString(0) == _("Local")); wxASSERT(searchchoice->GetString(2) == _("Kad")); wxASSERT(searchchoice->GetCount() == 4); m_searchchoices = searchchoice->GetStrings(); // Let's break it now. FixSearchTypes(); CastChild( IDC_TypeSearch, wxChoice )->SetSelection(0); CastChild( IDC_SEARCHMINSIZE, wxChoice )->SetSelection(2); CastChild( IDC_SEARCHMAXSIZE, wxChoice )->SetSelection(2); // Not there initially. s_searchsizer->Show(s_extendedsizer, false); s_searchsizer->Show(s_filtersizer, false); Layout(); } CSearchDlg::~CSearchDlg() { } void CSearchDlg::FixSearchTypes() { wxChoice* searchchoice = CastChild( ID_SEARCHTYPE, wxChoice ); searchchoice->Clear(); // We should have only filedonkey now. Let's insert stuff. int pos = 0; // ADUNANZA BEGIN // Mr Hyde: Patch per mettere di default KAD int posToSet = pos; // ADUNANZA END if (thePrefs::GetNetworkED2K()){ searchchoice->Insert(m_searchchoices[0], pos++); searchchoice->Insert(m_searchchoices[1], pos++); } if (thePrefs::GetNetworkKademlia()) { // ADUNANZA BEGIN // Mr Hyde: Patch per mettere di default KAD posToSet = pos; // ADUNANZA END searchchoice->Insert(m_searchchoices[2], pos++); } searchchoice->Insert(m_searchchoices[3], pos++); // ADUNANZA BEGIN // Patch per mettere di default KAD #if 0 searchchoice->SetSelection(0); #else searchchoice->SetSelection(posToSet); #endif // ADUNANZA END } CSearchListCtrl* CSearchDlg::GetSearchList( wxUIntPtr id ) { int nPages = m_notebook->GetPageCount(); for ( int i = 0; i < nPages; i++ ) { CSearchListCtrl* page = dynamic_cast(m_notebook->GetPage(i)); if (page->GetSearchId() == id) { return page; } } return NULL; } void CSearchDlg::AddResult(CSearchFile* toadd) { CSearchListCtrl* outputwnd = GetSearchList( toadd->GetSearchID() ); if ( outputwnd ) { outputwnd->AddResult( toadd ); // Update the result count UpdateHitCount( outputwnd ); } } void CSearchDlg::UpdateResult(CSearchFile* toupdate) { CSearchListCtrl* outputwnd = GetSearchList( toupdate->GetSearchID() ); if ( outputwnd ) { outputwnd->UpdateResult( toupdate ); // Update the result count UpdateHitCount( outputwnd ); } } void CSearchDlg::OnListItemSelected(wxListEvent& event) { FindWindow(IDC_SDOWNLOAD)->Enable(true); event.Skip(); } void CSearchDlg::OnExtendedSearchChange(wxCommandEvent& event) { s_searchsizer->Show(s_extendedsizer, event.IsChecked()); Layout(); } void CSearchDlg::OnFilterCheckChange(wxCommandEvent& event) { s_searchsizer->Show(s_filtersizer, event.IsChecked()); Layout(); int nPages = m_notebook->GetPageCount(); for ( int i = 0; i < nPages; i++ ) { CSearchListCtrl* page = dynamic_cast(m_notebook->GetPage(i)); page->EnableFiltering(event.IsChecked()); UpdateHitCount(page); } } void CSearchDlg::OnSearchClosing(wxBookCtrlEvent& evt) { // Abort global search if it was last tab that was closed. if ( evt.GetSelection() == ((int)m_notebook->GetPageCount() - 1 ) ) { OnBnClickedStop(nullEvent); } CSearchListCtrl *ctrl = dynamic_cast(m_notebook->GetPage(evt.GetSelection())); wxASSERT(ctrl); // Zero to avoid results added while destructing. ctrl->ShowResults(0); theApp->searchlist->RemoveResults(ctrl->GetSearchId()); // Do cleanups if this was the last tab if ( m_notebook->GetPageCount() == 1 ) { FindWindow(IDC_SDOWNLOAD)->Enable(FALSE); FindWindow(IDC_CLEAR_RESULTS)->Enable(FALSE); } } void CSearchDlg::OnSearchPageChanged(wxBookCtrlEvent& WXUNUSED(evt)) { int selection = m_notebook->GetSelection(); // Workaround for a bug in wxWidgets, where deletions of pages // can result in an invalid selection. This has been reported as // http://sourceforge.net/tracker/index.php?func=detail&aid=1865141&group_id=9863&atid=109863 if (selection >= (int)m_notebook->GetPageCount()) { selection = m_notebook->GetPageCount() - 1; } // Only enable the Download button for pages where files have been selected if ( selection != -1 ) { CSearchListCtrl *ctrl = dynamic_cast(m_notebook->GetPage(selection)); bool enable = (ctrl->GetSelectedItemCount() > 0); FindWindow(IDC_SDOWNLOAD)->Enable( enable ); } } void CSearchDlg::OnBnClickedStart(wxCommandEvent& WXUNUSED(evt)) { wxString searchString = CastChild( IDC_SEARCHNAME, wxTextCtrl )->GetValue(); searchString.Trim(true); searchString.Trim(false); if ( searchString.IsEmpty() ) { return; } wxChoice* choice = CastChild( ID_SEARCHTYPE, wxChoice ); // Magic. int searchtype = choice->GetSelection(); if (!thePrefs::GetNetworkED2K()) { searchtype += 2; } if (!thePrefs::GetNetworkKademlia()) { searchtype += 1; } switch ( searchtype ) { // Local Search case 0: // Global Search case 1: // Kad Search case 2: // We musn't search more often than once every 2 secs if ((GetTickCount() - m_last_search_time) > 2000) { m_last_search_time = GetTickCount(); OnBnClickedStop(nullEvent); StartNewSearch(); } break; // Web Search (FileHash.com) case 3: theApp->amuledlg->LaunchUrl(theApp->amuledlg->GenWebSearchUrl(searchString, CamuleDlg::WS_FILEHASH)); break; // Error default: wxFAIL; } } void CSearchDlg::OnFieldChanged( wxEvent& WXUNUSED(evt) ) { bool enable = false; // These are the IDs of the search-fields int textfields[] = { IDC_SEARCHNAME, IDC_EDITSEARCHEXTENSION }; for ( uint16 i = 0; i < itemsof(textfields); i++ ) { enable |= !CastChild( textfields[i], wxTextCtrl )->GetValue().IsEmpty(); } // Check if either of the dropdowns have been changed enable |= (CastChild(IDC_SEARCHMINSIZE, wxChoice)->GetSelection() != 2); enable |= (CastChild(IDC_SEARCHMAXSIZE, wxChoice)->GetSelection() != 2); enable |= (CastChild(IDC_TypeSearch, wxChoice)->GetSelection() > 0); enable |= (CastChild(ID_AUTOCATASSIGN, wxChoice)->GetSelection() > 0); // These are the IDs of the search-fields int spinfields[] = { IDC_SPINSEARCHMIN, IDC_SPINSEARCHMAX, IDC_SPINSEARCHAVAIBILITY }; for ( uint16 i = 0; i < itemsof(spinfields); i++ ) { enable |= (CastChild( spinfields[i], wxSpinCtrl )->GetValue() > 0); } // Enable the "Reset" button if any fields contain text FindWindow(IDC_SEARCH_RESET)->Enable( enable ); // Enable the Server Search button if the Name field contains text enable = !CastChild( IDC_SEARCHNAME, wxTextCtrl )->GetValue().IsEmpty(); FindWindow(IDC_STARTS)->Enable( enable ); } void CSearchDlg::OnFilteringChange(wxCommandEvent& WXUNUSED(evt)) { wxString filter = CastChild(ID_FILTER_TEXT, wxTextCtrl)->GetValue(); bool invert = CastChild(ID_FILTER_INVERT, wxCheckBox)->GetValue(); bool known = CastChild(ID_FILTER_KNOWN, wxCheckBox)->GetValue(); // Check that the expression compiles before we try to assign it // Otherwise we will get an error-dialog for each result-list. if (wxRegEx(filter, wxRE_DEFAULT | wxRE_ICASE).IsValid()) { int nPages = m_notebook->GetPageCount(); for ( int i = 0; i < nPages; i++ ) { CSearchListCtrl* page = dynamic_cast(m_notebook->GetPage(i)); page->SetFilter(filter, invert, known); UpdateHitCount(page); } } } bool CSearchDlg::CheckTabNameExists(const wxString& searchString) { int nPages = m_notebook->GetPageCount(); for ( int i = 0; i < nPages; i++ ) { // The BeforeLast(' ') is to strip the hit-count from the name if ( m_notebook->GetPageText(i).BeforeLast(wxT(' ')) == searchString ) { return true; } } return false; } void CSearchDlg::CreateNewTab(const wxString& searchString, wxUIntPtr nSearchID) { CSearchListCtrl* list = new CSearchListCtrl( (wxWindow*)m_notebook, ID_SEARCHLISTCTRL, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxNO_BORDER); m_notebook->AddPage(list, searchString, true, 0); // Ensure that new results are filtered bool enable = CastChild(IDC_FILTERCHECK, wxCheckBox)->GetValue(); wxString filter = CastChild(ID_FILTER_TEXT, wxTextCtrl)->GetValue(); bool invert = CastChild(ID_FILTER_INVERT, wxCheckBox)->GetValue(); bool known = CastChild(ID_FILTER_KNOWN, wxCheckBox)->GetValue(); list->SetFilter(filter, invert, known); list->EnableFiltering(enable); list->ShowResults(nSearchID); Layout(); FindWindow(IDC_CLEAR_RESULTS)->Enable(true); } void CSearchDlg::OnBnClickedStop(wxCommandEvent& WXUNUSED(evt)) { theApp->searchlist->StopSearch(); ResetControls(); } void CSearchDlg::ResetControls() { m_progressbar->SetValue(0); FindWindow(IDC_CANCELS)->Disable(); FindWindow(IDC_STARTS)->Enable(!CastChild( IDC_SEARCHNAME, wxTextCtrl )->GetValue().IsEmpty()); } void CSearchDlg::LocalSearchEnd() { ResetControls(); } void CSearchDlg::KadSearchEnd(uint32 id) { int nPages = m_notebook->GetPageCount(); for (int i = 0; i < nPages; ++i) { CSearchListCtrl* page = dynamic_cast(m_notebook->GetPage(i)); if (page->GetSearchId() == id || id == 0) { // 0: just update all pages (there is only one KAD search running at a time anyway) wxString rest; if (m_notebook->GetPageText(i).StartsWith(wxT("!"),&rest)) { m_notebook->SetPageText(i,rest); } } } } void CSearchDlg::OnBnClickedDownload(wxCommandEvent& WXUNUSED(evt)) { int sel = m_notebook->GetSelection(); if (sel != -1) { CSearchListCtrl* list = dynamic_cast(m_notebook->GetPage(sel)); // Download with items added to category specified in the drop-down menu list->DownloadSelected(); } } void CSearchDlg::OnBnClickedClear(wxCommandEvent& WXUNUSED(ev)) { OnBnClickedStop(nullEvent); m_notebook->DeleteAllPages(); FindWindow(IDC_CLEAR_RESULTS)->Enable(FALSE); FindWindow(IDC_SDOWNLOAD)->Enable(FALSE); } void CSearchDlg::StartNewSearch() { static uint32 m_nSearchID = 0; m_nSearchID++; FindWindow(IDC_STARTS)->Disable(); FindWindow(IDC_SDOWNLOAD)->Disable(); FindWindow(IDC_CANCELS)->Enable(); CSearchList::CSearchParams params; params.searchString = CastChild( IDC_SEARCHNAME, wxTextCtrl )->GetValue(); params.searchString.Trim(true); params.searchString.Trim(false); if (params.searchString.IsEmpty()) { return; } if (CastChild(IDC_EXTENDEDSEARCHCHECK, wxCheckBox)->GetValue()) { params.extension = CastChild( IDC_EDITSEARCHEXTENSION, wxTextCtrl )->GetValue(); uint32 sizemin = GetTypeSize( (uint8) CastChild( IDC_SEARCHMINSIZE, wxChoice )->GetSelection() ); uint32 sizemax = GetTypeSize( (uint8) CastChild( IDC_SEARCHMAXSIZE, wxChoice )->GetSelection() ); // Parameter Minimum Size params.minSize = (uint64_t)(CastChild( IDC_SPINSEARCHMIN, wxSpinCtrl )->GetValue()) * (uint64_t)sizemin; // Parameter Maximum Size params.maxSize = (uint64_t)(CastChild( IDC_SPINSEARCHMAX, wxSpinCtrl )->GetValue()) * (uint64_t)sizemax; if ((params.maxSize < params.minSize) && (params.maxSize)) { wxMessageDialog dlg(this, _("Min size must be smaller than max size. Max size ignored."), _("Search warning"), wxOK|wxCENTRE|wxICON_INFORMATION); dlg.ShowModal(); params.maxSize = 0; } // Parameter Availability params.availability = CastChild( IDC_SPINSEARCHAVAIBILITY, wxSpinCtrl )->GetValue(); switch ( CastChild( IDC_TypeSearch, wxChoice )->GetSelection() ) { case 0: params.typeText.Clear(); break; case 1: params.typeText = ED2KFTSTR_ARCHIVE; break; case 2: params.typeText = ED2KFTSTR_AUDIO; break; case 3: params.typeText = ED2KFTSTR_CDIMAGE; break; case 4: params.typeText = ED2KFTSTR_IMAGE; break; case 5: params.typeText = ED2KFTSTR_PROGRAM; break; case 6: params.typeText = ED2KFTSTR_DOCUMENT; break; case 7: params.typeText = ED2KFTSTR_VIDEO; break; default: AddDebugLogLineC( logGeneral, CFormat( wxT("Warning! Unknown search-category (%s) selected!") ) % params.typeText ); break; } } SearchType search_type = KadSearch; int selection = CastChild( ID_SEARCHTYPE, wxChoice )->GetSelection(); if (!thePrefs::GetNetworkED2K()) { selection += 2; } if (!thePrefs::GetNetworkKademlia()) { selection += 1; } switch (selection) { case 0: // Local Search search_type = LocalSearch; break; case 1: // Global Search search_type = GlobalSearch; break; case 2: // Kad search search_type = KadSearch; break; default: // Should never happen wxFAIL; break; } uint32 real_id = m_nSearchID; wxString error = theApp->searchlist->StartNewSearch(&real_id, search_type, params); if (!error.IsEmpty()) { // Search failed / Remote in progress wxMessageBox(error, _("Search warning"), wxOK | wxCENTRE | wxICON_INFORMATION, this); FindWindow(IDC_STARTS)->Enable(); FindWindow(IDC_SDOWNLOAD)->Disable(); FindWindow(IDC_CANCELS)->Disable(); } else { CreateNewTab( ((search_type == KadSearch) ? wxT("!") : wxEmptyString) + params.searchString + wxT(" (0)"), real_id); } } void CSearchDlg::UpdateHitCount(CSearchListCtrl* page) { for ( uint32 i = 0; i < (uint32)m_notebook->GetPageCount(); ++i ) { if ( m_notebook->GetPage(i) == page ) { wxString searchtxt = m_notebook->GetPageText(i).BeforeLast(wxT(' ')); if ( !searchtxt.IsEmpty() ) { size_t shown = page->GetItemCount(); size_t hidden = page->GetHiddenItemCount(); if (hidden) { searchtxt += CFormat(wxT(" (%u/%u)")) % shown % (shown + hidden); } else { searchtxt += CFormat(wxT(" (%u)")) % shown; } m_notebook->SetPageText(i, searchtxt); } break; } } } void CSearchDlg::OnBnClickedReset(wxCommandEvent& WXUNUSED(evt)) { CastChild( IDC_SEARCHNAME, wxTextCtrl )->Clear(); CastChild( IDC_EDITSEARCHEXTENSION, wxTextCtrl )->Clear(); CastChild( IDC_SPINSEARCHMIN, wxSpinCtrl )->SetValue(0); CastChild( IDC_SEARCHMINSIZE, wxChoice )->SetSelection(2); CastChild( IDC_SPINSEARCHMAX, wxSpinCtrl )->SetValue(0); CastChild( IDC_SEARCHMAXSIZE, wxChoice )->SetSelection(2); CastChild( IDC_SPINSEARCHAVAIBILITY, wxSpinCtrl )->SetValue(0); CastChild( IDC_TypeSearch, wxChoice )->SetSelection(0); CastChild( ID_AUTOCATASSIGN, wxChoice )->SetSelection(0); FindWindow(IDC_SEARCH_RESET)->Enable(FALSE); } void CSearchDlg::UpdateCatChoice() { wxChoice* c_cat = CastChild( ID_AUTOCATASSIGN, wxChoice ); c_cat->Clear(); c_cat->Append(_("Main")); for ( unsigned i = 1; i < theApp->glob_prefs->GetCatCount(); i++ ) { c_cat->Append( theApp->glob_prefs->GetCategory( i )->title ); } c_cat->SetSelection( 0 ); } void CSearchDlg::UpdateProgress(uint32 new_value) { m_progressbar->SetValue(new_value); } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/AddFriend.h0000644000175000017500000000266412050266603020320 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef ADDFRIEND_H #define ADDFRIEND_H #include // Needed for wxDialog class CAddFriend : public wxDialog { public: CAddFriend(wxWindow* parent); ~CAddFriend() {}; protected: DECLARE_EVENT_TABLE() private: void OnAddBtn(wxCommandEvent& evt); void OnCloseBtn(wxCommandEvent& evt); }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/ClientList.h0000644000175000017500000003014212050266603020542 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef CLIENTLIST_H #define CLIENTLIST_H #include "DeadSourceList.h" // Needed for CDeadSourceList #include "ClientRef.h" #include #include class CUpDownClient; class CClientTCPSocket; class CDeletedClient; class CMD4Hash; namespace Kademlia { class CContact; class CUInt128; } enum buddyState { Disconnected, Connecting, Connected }; #define BAN_CLEANUP_TIME 1200000 // 20 min /** * This class takes care of managing existing clients. * * This class tracks a number of attributes related to existing and deleted * clients. Among other things, it keeps track of existing, banned, dead and * dying clients, as well as offers support for matching new client-instances * against already exist clients to avoid duplicates. */ class CClientList { public: /** * Constructor. */ CClientList(); /** * Destructor. */ ~CClientList(); /** * Adds a client to the global list of clients. * * @param toadd The new client. */ void AddClient( CUpDownClient* toadd ); /** * Removes a client from the client lists. * * @param client The client to be removed. * * To be called from CUpDownClient::Safe_Delete only. */ void RemoveClient( CUpDownClient* client ); /** * Updates the recorded IP of the specified client. * * @param client The client to have its entry updated. * @param newIP The new IP adress of the client. * * This function is to be called before the client actually changes its * IP-address, and will update the old entry with the new value. There * will only be added an entry if the new IP isn't zero. */ void UpdateClientIP( CUpDownClient* client, uint32 newIP ); /** * Updates the recorded ID of the specified client. * * @param client The client to have its entry updated. * @param newID The new ID of the client. * * This function is to be called before the client actually changes its * ID, and will update the old entry with the new value. Unlike the other * two functions, this function will always ensure that there is an entry * for the client, regardless of the value of newID. */ void UpdateClientID( CUpDownClient* client, uint32 newID ); /** * Updates the recorded hash of the specified client. * * @param client The client to have its entry updated. * @param newHash The new user-hash. * * This function is to be called before the client actually changes its * user-hash, and will update the old entry with the new value. There will * only be added an entry if the new hash is valid. */ void UpdateClientHash( CUpDownClient* client, const CMD4Hash& newHash ); /** * Returns the number of listed clients. */ uint32 GetClientCount() const; /** * Deletes all tracked clients. */ void DeleteAll(); /** * Replaces a new client-instance with the an already existing client, if one such exist. * * @param client A pointer to the pointer of the new instance. * @param sender The socket assosiated with the new instance. * * Call this function when a new client-instance has been created. This function will then * compare it against all existing clients and see if we already have an instance matching * the new one. If that is the case, it will delete the new instance and set the pointer to * the existing one. */ bool AttachToAlreadyKnown( CUpDownClient** client, CClientTCPSocket* sender ); /** * Finds a client with the specified ip and port. * * @param clientip The IP of the client to find. * @param port The port used by the client. */ CUpDownClient* FindClientByIP( uint32 clientip, uint16 port ); /** * Finds a client with the specified ip. * * @param clientip The IP of the client to find. * * Returns the first client found if there are several with same ip. */ CUpDownClient* FindClientByIP( uint32 clientip ); /** * Finds a client with the specified ECID. * * @param clientip The IP of the client to find. * */ CUpDownClient* FindClientByECID(uint32 ecid) const; //! The list-type used to store clients IPs and other information typedef std::map ClientMap; /** * Adds a client to the list of tracked clients. * * @param toadd The client to track. * * This function is used to keep track of clients after they * have been deleted and makes it possible to spot port or hash * changes. */ void AddTrackClient(CUpDownClient* toadd); /** * Returns the number of tracked client. * * @param dwIP The IP-adress which of the clients. * @return The number of clients tracked at the specifed IP. */ uint16 GetClientsFromIP(uint32 dwIP); /** * Checks if a client has changed its user-hash. * * @param dwIP The IP of the client. * @param nPort The port of the client. * @param pNewHash The userhash assosiated with the client. * */ bool ComparePriorUserhash( uint32 dwIP, uint16 nPort, void* pNewHash ); /** * Bans an IP address for 2 hours. * * @param dwIP The IP from which all clients will be banned. */ void AddBannedClient(uint32 dwIP); /** * Checks if a client has been banned. * * @param dwIP The IP to check. * @return True if the IP is banned, false otherwise. */ bool IsBannedClient(uint32 dwIP); /** * Unbans an IP address, if it has been banned. * * @param dwIP The IP address to unban. */ void RemoveBannedClient(uint32 dwIP); /** * Main loop. * * This function takes care of cleaning the various lists and deleting * pending clients on the deletion-queue. */ void Process(); /** * This function removes all clients filtered by the current IPFilter. * * Call this function after changing the current IPFiler list, to ensure * that no client-connections to illegal IPs exist. These would otherwise * be allowed to exist, bypassing the IPFilter. */ void FilterQueues(); //! The type of the list used to store client-pointers for a couple of tasks. typedef std::deque SourceList; /** * Returns a list of clients with the specified user-hash. * * @param hash The userhash to search for. * * This function will return a list of clients with the specified userhash, * provided that the hash is a valid non-empty userhash. Empty hashes will * simply result in nothing being found. */ SourceList GetClientsByHash( const CMD4Hash& hash ); /** * Returns a list of clients with the specified IP. * * @param ip The IP-address to search for. * * This function will return a list of clients with the specified IP, * provided that the IP is a non-zero value. A value of zero will not * result in any results. */ SourceList GetClientsByIP( unsigned long ip ); //! The type of the lists used to store IPs and IDs. typedef std::multimap IDMap; //! The pairs of the IP/ID list. typedef std::pair IDMapPair; /** * Returns a list of all clients. * * @return The complete list of clients. */ const IDMap& GetClientList(); /** * Adds a source to the list of dead sources. * * @param client The source to be recorded as dead. */ void AddDeadSource(const CUpDownClient* client); /** * Checks if a source is recorded as being dead. * * @param client The client to evaluate. * @return True if dead, false otherwise. * * Sources that are dead are not to be considered valid * sources and should not be added to partfiles. */ bool IsDeadSource(const CUpDownClient* client); /** * Sends a message to a client, identified by a GUI_ID * * @return Success */ bool SendChatMessage(uint64 client_id, const wxString& message); /** * Stops a chat session with a client. * */ void SetChatState(uint64 client_id, uint8 state); uint8 GetBuddyStatus() const {return m_nBuddyStatus;} // This must be used on CreateKadSourceLink and if we ever add the columns // on shared files control. CUpDownClient* GetBuddy() { return m_pBuddy.GetClient(); } uint32 GetBuddyIP(); uint16 GetBuddyPort(); bool RequestTCP(Kademlia::CContact* contact, uint8_t connectOptions); void RequestBuddy(Kademlia::CContact* contact, uint8_t connectOptions); bool IncomingBuddy(Kademlia::CContact* contact, Kademlia::CUInt128* buddyID); void RemoveFromKadList(CUpDownClient* torem); void AddToKadList(CUpDownClient* toadd); bool DoRequestFirewallCheckUDP(const Kademlia::CContact& contact); void AddKadFirewallRequest(uint32 ip); bool IsKadFirewallCheckIP(uint32 ip) const; // Direct Callback list void AddDirectCallbackClient(CUpDownClient *toAdd); void RemoveDirectCallback(CUpDownClient *toRemove) { m_currentDirectCallbacks.remove(CCLIENTREF(toRemove, wxEmptyString)); } void AddTrackCallbackRequests(uint32_t ip); bool AllowCallbackRequest(uint32_t ip) const; protected: /* * Avoids unwanted clients to be forever in the client list */ void CleanUpClientList(); void ProcessDirectCallbackList(); private: /** * Helperfunction which finds a client matching the specified client. * * @param client The client to search for. * @return The matching client or NULL. * * This functions searches through the list of clients and finds the first match * using the same checks as CUpDownClient::Compare, but without the overhead. */ CUpDownClient* FindMatchingClient( CUpDownClient* client ); /** * Check if we already know this IP. * * This function is used to determine if the given IP address * is already known. * * @param ip The IP address to check. */ bool IsIPAlreadyKnown(uint32_t ip); /** * Helperfunction which removes the client from the IP-list. */ void RemoveIPFromList( CUpDownClient* client ); /** * Helperfunction which removes the client from the ID-list. */ bool RemoveIDFromList( CUpDownClient* client ); /** * Helperfunction which removes the client from the hash-list. */ void RemoveHashFromList( CUpDownClient* client ); //! The type of the list used to store user-hashes. typedef std::multimap HashMap; //! The pairs of the Hash-list. typedef std::pair HashMapPair; //! The map of clients with valid hashes HashMap m_hashList; //! The map of clients with valid IPs IDMap m_ipList; //! The full lists of clients IDMap m_clientList; //! This is the map of banned clients. ClientMap m_bannedList; //! This variable is used to keep track of the last time the banned-list was pruned. uint32 m_dwLastBannCleanUp; //! This is the map of tracked clients. std::map m_trackedClientsList; //! This keeps track of the last time the tracked-list was pruned. uint32 m_dwLastTrackedCleanUp; //! This keeps track of the last time the client-list was pruned. uint32 m_dwLastClientCleanUp; //! List of unusable sources. CDeadSourceList m_deadSources; /* Kad Stuff */ CClientRefSet m_KadSources; CClientRef m_pBuddy; uint8 m_nBuddyStatus; typedef struct { uint32 ip; uint32 inserted; } IpAndTicks; typedef std::list IpAndTicksList; IpAndTicksList m_firewallCheckRequests; typedef CClientRefList DirectCallbackList; DirectCallbackList m_currentDirectCallbacks; IpAndTicksList m_directCallbackRequests; }; #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/AddFriend.cpp0000644000175000017500000000562012050266603020646 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include "AddFriend.h" // Interface declarations. #include "muuli_wdr.h" // Needed for addFriendDlg #include "amule.h" // Needed for theApp #include "amuleDlg.h" // Needed for amuleDlg #include "FriendList.h" #include "NetworkFunctions.h" #include "OtherFunctions.h" #include "MD4Hash.h" #include // Needed for unicode2char BEGIN_EVENT_TABLE(CAddFriend, wxDialog) EVT_BUTTON(ID_ADDFRIEND, CAddFriend::OnAddBtn) EVT_BUTTON(ID_CLOSEDLG, CAddFriend::OnCloseBtn) END_EVENT_TABLE() CAddFriend::CAddFriend(wxWindow* parent) : wxDialog(parent, 9995, _("Add a Friend"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxSYSTEM_MENU) { wxSizer* content=addFriendDlg(this, TRUE); content->Show(this, TRUE); } void CAddFriend::OnAddBtn(wxCommandEvent& WXUNUSED(evt)) { wxString name = CastChild(ID_USERNAME, wxTextCtrl)->GetValue().Strip(wxString::both); wxString hash = CastChild(ID_USERHASH, wxTextCtrl)->GetValue().Strip(wxString::both); wxString fullip = CastChild(ID_IPADDRESS, wxTextCtrl)->GetValue().Strip(wxString::both); uint16 port = StrToULong( CastChild(ID_IPORT, wxTextCtrl)->GetValue() ); uint32 ip = StringIPtoUint32(fullip); if (!ip || !port) { wxMessageBox(_("You have to enter a valid IP and port!"), _("Information"), wxOK | wxICON_INFORMATION, this); return; } CMD4Hash userhash; if ((!hash.IsEmpty()) && (!userhash.Decode(hash))) { wxMessageBox(_("The specified userhash is not valid!"), _("Information"), wxOK | wxICON_INFORMATION, this); return; }; // Better than nothing at all... if ( name.IsEmpty() ) { name = fullip; } theApp->friendlist->AddFriend(userhash, ip, port, name); EndModal(true); // Friend added } void CAddFriend::OnCloseBtn(wxCommandEvent& WXUNUSED(evt)) { EndModal(false); // Friend not added } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/BaseClient.cpp0000644000175000017500000033327112050266603021045 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include #include #include "updownclient.h" // Needed for CUpDownClient #include "SharedFileList.h" // Needed for CSharedFileList #include #include #include #include #include #include #include #include #include #include // Needed for inflateEnd #include // Needed for CFormat #include "SearchList.h" // Needed for CSearchList #include "DownloadQueue.h" // Needed for CDownloadQueue #include "UploadQueue.h" // Needed for CUploadQueue #include "IPFilter.h" // Needed for CIPFilter #include "ServerConnect.h" // Needed for CServerConnect #include "ClientCredits.h" // Needed for CClientCredits #include "ClientCreditsList.h" // Needed for CClientCreditsList #include "Server.h" // Needed for CServer #include "Preferences.h" // Needed for CPreferences #include "MemFile.h" // Needed for CMemFile #include "Packet.h" // Needed for CPacket #include "Friend.h" // Needed for CFriend #include "ClientList.h" // Needed for CClientList #ifndef AMULE_DAEMON #include "amuleDlg.h" // Needed for CamuleDlg #include "CaptchaDialog.h" // Needed for CCaptchaDialog #include "CaptchaGenerator.h" #include "ChatWnd.h" // Needed for CChatWnd #endif #include "amule.h" // Needed for theApp #include "PartFile.h" // Needed for CPartFile #include "ClientTCPSocket.h" // Needed for CClientTCPSocket #include "ListenSocket.h" // Needed for CListenSocket #include "FriendList.h" // Needed for CFriendList #include "Statistics.h" // Needed for theStats #include "ClientUDPSocket.h" #include "Logger.h" #include "DataToText.h" // Needed for GetSoftName() #include "GuiEvents.h" // Needed for Notify_ #include "ServerList.h" // For CServerList #include "kademlia/kademlia/Kademlia.h" #include "kademlia/kademlia/Prefs.h" #include "kademlia/kademlia/Search.h" #include "kademlia/kademlia/UDPFirewallTester.h" #include "kademlia/routing/RoutingZone.h" // ADUNANZA BEGIN #ifndef KADCONSTANTS_H #include #endif //KADCONSTANTS_H #include "RemoteSettings.h" // #include "AdunanzA.h" // Needed for AduIsFastWebIP #include "FastwebNet.h" // Needed for GetFWCityFromIP / AduIsFastWebIP // ADUNANZA END //#define __PACKET_DEBUG__ // some client testing variables static wxString crash_name = wxT("[Invalid User Name]"); static wxString empty_name = wxT("[Empty User Name]"); // members of CUpDownClient // which are used by down and uploading functions // ADUNANZA BEGIN // ADUFLAGS Mr Hyde 20080201 begin void CUpDownClient::UpdateFastwebFlags() { m_bIsFastweb = (m_dwUserIP && CFastwebNet::AduIsFastWebIP(m_dwUserIP)); // m_bIsFastwebFiber = (m_bIsFastweb && (((m_dwUserIP >> 15) & 1) == (uint32)0)); m_bIsFastwebFiber = CFastwebNet::AduIsFiber(m_dwUserIP); m_bReceivedTagAdunanzA = false; // ancora non so se e' AdunanzA m_FWCity.Empty(); /* al momento non esiste piu' check affidabile su citta'/zona residenziale, per ora commento if (m_bIsFastweb ) SetClientFWCity(); */ } void CUpDownClient::SetClientFWCity() { m_FWCity = CFastwebNet::GetFWCityFromIP(m_dwUserIP); } // ADUFLAGS Mr Hyde 20080201 end #if 0 // Metodo dell'oggetto CUpDownClient // Vedere il file // Questo metodo ritorna // ADUNANZA_ICON_NONE Se il client non e' adunanza // ADUNANZA_ICON_FW Se il client non e' adunanza ma e' sulla rete FastWeb Italia // ADUNANZA_ICON_ADU Se il client e' AdunanzA ed e' sulla rete FastWeb Italia uint32 CUpDownClient::GetClientAduType() const { // Mr Hyde ADUFLAGS if (IsFastweb()) { if (IsAdunanzA()) return ADUNANZA_ICON_ADU; else return ADUNANZA_ICON_FW; } return ADUNANZA_ICON_NONE; } #endif // ADUNANZA END CUpDownClient::CUpDownClient(CClientTCPSocket* sender) { #ifdef __DEBUG__ m_socket = NULL; SetSocket(sender); #else m_socket = sender; #endif Init(); } CUpDownClient::CUpDownClient(uint16 in_port, uint32 in_userid, uint32 in_serverip, uint16 in_serverport, CPartFile* in_reqfile, bool ed2kID, bool checkfriend) { m_socket = NULL; Init(); m_nUserPort = in_port; if(ed2kID && !IsLowID(in_userid)) { SetUserIDHybrid( wxUINT32_SWAP_ALWAYS(in_userid) ); } else { SetUserIDHybrid( in_userid); } //If highID and ED2K source, incoming ID and IP are equal.. //If highID and Kad source, incoming IP needs swap for the IP if (!HasLowID()) { if (ed2kID) { m_nConnectIP = in_userid; } else { m_nConnectIP = wxUINT32_SWAP_ALWAYS(in_userid); } // Will be on right endianess now m_FullUserIP = m_nConnectIP; } m_dwServerIP = in_serverip; m_nServerPort = in_serverport; SetRequestFile( in_reqfile ); ReGetClientSoft(); if (checkfriend) { if ((m_Friend = theApp->friendlist->FindFriend(CMD4Hash(), m_dwUserIP, m_nUserPort)) != NULL){ m_Friend->LinkClient(CCLIENTREF(this, wxT("CUpDownClient::CUpDownClient m_Friend->LinkClient"))); } else{ // avoid that an unwanted client instance keeps a friend slot m_bFriendSlot = false; } } } void CUpDownClient::Init() { // ADUNANZA BEGIN m_bIsFastweb = false; m_bIsFastwebFiber = false; m_bReceivedTagAdunanzA = false; m_FWCity= wxT(""); // ADUNANZA END m_linked = 0; #ifdef DEBUG_ZOMBIE_CLIENTS m_linkedDebug = false; #endif m_bAddNextConnect = false; credits = NULL; m_byChatstate = MS_NONE; m_nKadState = KS_NONE; m_nChatCaptchaState = CA_NONE; m_cShowDR = 0; m_reqfile = NULL; // No file required yet m_nTransferredUp = 0; m_cSendblock = 0; m_cAsked = 0; msReceivedPrev = 0; kBpsDown = 0.0; bytesReceivedCycle = 0; m_nServerPort = 0; m_iFileListRequested = 0; m_dwLastUpRequest = 0; m_bEmuleProtocol = false; m_bCompleteSource = false; m_bFriendSlot = false; m_bCommentDirty = false; m_bReaskPending = false; m_bUDPPending = false; m_nUserPort = 0; m_nPartCount = 0; m_dwLastAskedTime = 0; m_nDownloadState = DS_NONE; m_dwUploadTime = 0; m_nTransferredDown = 0; m_nUploadState = US_NONE; m_dwLastBlockReceived = 0; m_bUnicodeSupport = false; m_fSentOutOfPartReqs = 0; m_nCurQueueSessionPayloadUp = 0; m_addedPayloadQueueSession = 0; m_nUpDatarate = 0; m_nSumForAvgUpDataRate = 0; m_nRemoteQueueRank = 0; m_nOldRemoteQueueRank = 0; m_dwLastSourceRequest = 0; m_dwLastSourceAnswer = 0; m_dwLastAskedForSources = 0; m_SecureIdentState = IS_UNAVAILABLE; m_dwLastSignatureIP = 0; m_byInfopacketsReceived = IP_NONE; m_bIsHybrid = false; m_bIsML = false; m_Friend = NULL; m_iRating = 0; m_nCurSessionUp = 0; m_clientSoft=SO_UNKNOWN; m_bRemoteQueueFull = false; m_HasValidHash = false; SetWaitStartTime(); m_fHashsetRequesting = 0; m_fSharedDirectories = 0; m_lastPartAsked = 0xffff; m_nUpCompleteSourcesCount= 0; m_waitingPosition = 0; m_score = 0; m_lastRefreshedDLDisplay = 0; m_bHelloAnswerPending = false; m_fSentCancelTransfer = 0; m_Aggressiveness = 0; m_LastFileRequest = 0; m_clientState = CS_NEW; ClearHelloProperties(); m_pReqFileAICHHash = NULL; m_fSupportsAICH = 0; m_fAICHRequested = 0; m_fSupportsLargeFiles = 0; m_fExtMultiPacket = 0; m_fIsSpammer = 0; m_dwUserIP = 0; m_nConnectIP = 0; m_dwServerIP = 0; m_fNeedOurPublicIP = false; m_bHashsetRequested = false; m_lastDownloadingPart = 0; m_uploadingfile = NULL; m_OSInfo_sent = false; /* Kad stuff */ SetBuddyID(NULL); m_nBuddyIP = 0; m_nBuddyPort = 0; m_nUserIDHybrid = 0; m_nSourceFrom = SF_NONE; if (m_socket) { amuleIPV4Address address; m_socket->GetPeer(address); SetIP(StringIPtoUint32(address.IPAddress())); } else { SetIP(0); } /* Statistics */ m_lastClientSoft = (uint32)(-1); m_lastClientVersion = 0; /* Creation time (for buddies timeout) */ m_nCreationTime = ::GetTickCount(); m_MaxBlockRequests = STANDARD_BLOCKS_REQUEST; // Safe starting amount m_last_block_start = 0; m_lastaverage = 0; SetLastBuddyPingPongTime(); m_fRequestsCryptLayer = 0; m_fSupportsCryptLayer = 0; m_fRequiresCryptLayer = 0; m_fSupportsSourceEx2 = 0; m_fSupportsCaptcha = 0; m_fDirectUDPCallback = 0; m_dwDirectCallbackTimeout = 0; m_hasbeenobfuscatinglately = false; m_cCaptchasSent = 0; m_cMessagesReceived = 0; m_cMessagesSent = 0; // ADUNANZA BEGIN isAduSoftware = 0; aduver = 0; sentadu = false; // Mr Hyde: variabile al momento inutile (non viene mai controllata, solo impostata) // ADUNANZA END } // ADUNANZA BEGIN #include // ADUNANZA END CUpDownClient::~CUpDownClient() { #ifdef __DEBUG__ if (!connection_reason.IsEmpty()) { AddDebugLogLineN(logClient, wxT("Client to check for ") + connection_reason + wxT(" was deleted without connection.")); } #endif if (m_lastClientSoft == SO_UNKNOWN) { theStats::RemoveUnknownClient(); } else if (m_lastClientSoft != (uint32)(-1)) { theStats::RemoveKnownClient(m_lastClientSoft, m_lastClientVersion, m_lastOSInfo); } // Indicate that we are not anymore on stats m_lastClientSoft = (uint32)(-1); // The socket should have been removed in Safe_Delete, but it // doesn't hurt to have an extra check. if (m_socket) { m_socket->Safe_Delete(); // Paranoia SetSocket(NULL); } // ADUNANZA BEGIN #if 0 ClearUploadBlockRequests(); ClearDownloadBlockRequests(); DeleteContents(m_WaitingPackets_list); #else try { ClearUploadBlockRequests(); } catch(const std::exception& e) { std::cerr << "~CUpDownClient, excpetion in ClearUploadBlockRequests(): " << e.what() << std::endl; } catch(...) { std::cerr << "~CUpDownClient, excpetion UNK in ClearUploadBlockRequests()" << std::endl; } try { ClearDownloadBlockRequests(); } catch(const std::exception& e) { std::cerr << "~CUpDownClient, excpetion in ClearDownloadBlockRequests(): " << e.what() << std::endl; } catch(...) { std::cerr << "~CUpDownClient, excpetion in UNK ClearDownloadBlockRequests() " << std::endl; } try { DeleteContents(m_WaitingPackets_list); } catch(const std::exception& e) { std::cerr << "- ~CUpDownClient, excpetion while deleting contents of m_waitingPackets_list: " << e.what() << std::endl; } catch(...) { std::cerr << "~CUpDownClient, excpetion UNK while deleting contents of m_waitingPackets_list" << std::endl; } #endif // ADUNANZA END // Allow detection of deleted clients that didn't go through Safe_Delete m_clientState = CS_DYING; } void CUpDownClient::ClearHelloProperties() { m_nUDPPort = 0; m_byUDPVer = 0; m_byDataCompVer = 0; m_byEmuleVersion = 0; m_bySourceExchange1Ver = 0; m_byAcceptCommentVer = 0; m_byExtendedRequestsVer = 0; m_byCompatibleClient = 0; m_nKadPort = 0; m_bySupportSecIdent = 0; m_bSupportsPreview = 0; m_nClientVersion = 0; m_fSharedDirectories = 0; m_bMultiPacket = 0; m_fOsInfoSupport = 0; m_fValueBasedTypeTags = 0; SecIdentSupRec = 0; m_byKadVersion = 0; m_fRequestsCryptLayer = 0; m_fSupportsCryptLayer = 0; m_fRequiresCryptLayer = 0; m_fSupportsSourceEx2 = 0; m_fSupportsCaptcha = 0; m_fDirectUDPCallback = 0; m_bIsHybrid = false; m_bIsML = false; m_fNoViewSharedFiles = true; // that's a sensible default to assume until we get the real value m_bUnicodeSupport = false; } bool CUpDownClient::ProcessHelloPacket(const byte* pachPacket, uint32 nSize) { const CMemFile data(pachPacket,nSize); uint8 hashsize = data.ReadUInt8(); if ( 16 != hashsize ) { /* * Hint: We can not accept other sizes here because: * - the magic number is spread all over the source * - the answer packet lacks the size field */ throw wxString(wxT("Invalid Hello packet: Other userhash sizes than 16 are not implemented")); } // eMule 0.42: reset all client properties; a client may not send a particular emule tag any longer ClearHelloProperties(); return ProcessHelloTypePacket(data); } void CUpDownClient::Safe_Delete() { // Because we are delaying the deletion, we might end up trying to delete // it twice, however, this is normal and shouldn't trigger any failures if ( m_clientState == CS_DYING ) { return; } // If called from background, post an event to process it in main thread if (!wxThread::IsMain()) { CoreNotify_Client_Delete(CCLIENTREF(this, wxT("CUpDownClient::Safe_Delete CoreNotify_Client_Delete"))); return; } m_clientState = CS_DYING; // Make sure client doesn't get deleted until this method is finished CClientRef ref(CCLIENTREF(this, wxT("CUpDownClient::Safe_Delete reflocker"))); // Close the socket to avoid any more connections and related events if ( m_socket ) { m_socket->Safe_Delete(); // Paranoia SetSocket(NULL); } // Remove the client from the clientlist if we still have it if ( theApp->clientlist ) { theApp->clientlist->RemoveClient( this ); } // Doing what RemoveClient used to do. Just to be sure... if (theApp->uploadqueue) { theApp->uploadqueue->RemoveFromUploadQueue(this); theApp->uploadqueue->RemoveFromWaitingQueue(this); } if (theApp->downloadqueue) { theApp->downloadqueue->RemoveSource(this); } // For security, remove it from the lists unconditionally. Notify_SharedCtrlRemoveClient(ECID(), (CKnownFile*)NULL); Notify_SourceCtrlRemoveSource(ECID(), (CPartFile*)NULL); if (IsAICHReqPending()){ m_fAICHRequested = FALSE; CAICHHashSet::ClientAICHRequestFailed(this); } if (m_Friend) { m_Friend->UnLinkClient(); // this notifies m_Friend = NULL; } if (m_iRating>0 || !m_strComment.IsEmpty()) { m_iRating = 0; m_strComment.Clear(); if (m_reqfile) { m_reqfile->UpdateFileRatingCommentAvail(); } } // Ensure that source-counts gets updated in case // of a source not on the download-queue SetRequestFile( NULL ); SetUploadFileID(NULL); delete m_pReqFileAICHHash; m_pReqFileAICHHash = NULL; #ifdef DEBUG_ZOMBIE_CLIENTS if (m_linked > 1) { AddLogLineC(CFormat(wxT("Client %d still linked in %d places: %s")) % ECID() % (m_linked - 1) % GetLinkedFrom()); m_linkedDebug = true; } #endif } bool CUpDownClient::ProcessHelloAnswer(const byte* pachPacket, uint32 nSize) { const CMemFile data(pachPacket,nSize); bool bIsMule = ProcessHelloTypePacket(data); m_bHelloAnswerPending = false; return bIsMule; } bool CUpDownClient::ProcessHelloTypePacket(const CMemFile& data) { uint32 dwEmuleTags = 0; CMD4Hash hash = data.ReadHash(); SetUserHash( hash ); SetUserIDHybrid( data.ReadUInt32() ); uint16 nUserPort = data.ReadUInt16(); // hmm clientport is sent twice - why? uint32 tagcount = data.ReadUInt32(); for (uint32 i = 0;i < tagcount; i++){ CTag temptag(data, true); switch(temptag.GetNameID()){ case CT_NAME: m_Username = temptag.GetStr(); break; case CT_VERSION: m_nClientVersion = temptag.GetInt(); break; case ET_MOD_VERSION: if (temptag.IsStr()) { m_strModVersion = temptag.GetStr(); } else if (temptag.IsInt()) { m_strModVersion = CFormat(wxT("ModID=%u")) % temptag.GetInt(); } else { m_strModVersion = wxT("ModID="); } break; case CT_PORT: nUserPort = temptag.GetInt(); break; case CT_EMULE_UDPPORTS: // 16 KAD Port // 16 UDP Port SetKadPort((temptag.GetInt() >> 16) & 0xFFFF); m_nUDPPort = temptag.GetInt() & 0xFFFF; dwEmuleTags |= 1; #ifdef __PACKET_DEBUG__ AddLogLineNS(CFormat(wxT("Hello type packet processing with eMule ports UDP=%i KAD=%i")) % m_nUDPPort % m_nKadPort); #endif break; case CT_EMULE_BUDDYIP: // 32 BUDDY IP m_nBuddyIP = temptag.GetInt(); #ifdef __PACKET_DEBUG__ AddLogLineNS(CFormat(wxT("Hello type packet processing with eMule BuddyIP=%u (%s)")) % m_nBuddyIP % Uint32toStringIP(m_nBuddyIP)); #endif break; case CT_EMULE_BUDDYUDP: // 16 --Reserved for future use-- // 16 BUDDY Port m_nBuddyPort = (uint16)temptag.GetInt(); #ifdef __PACKET_DEBUG__ AddLogLineNS(CFormat(wxT("Hello type packet processing with eMule BuddyPort=%u")) % m_nBuddyPort); #endif break; case CT_EMULE_MISCOPTIONS1: { // 3 AICH Version (0 = not supported) // 1 Unicode // 4 UDP version // 4 Data compression version // 4 Secure Ident // 4 Source Exchange // 4 Ext. Requests // 4 Comments // 1 PeerCache supported // 1 No 'View Shared Files' supported // 1 MultiPacket // 1 Preview uint32 flags = temptag.GetInt(); m_fSupportsAICH = (flags >> (4*7+1)) & 0x07; m_bUnicodeSupport = (flags >> 4*7) & 0x01; m_byUDPVer = (flags >> 4*6) & 0x0f; m_byDataCompVer = (flags >> 4*5) & 0x0f; m_bySupportSecIdent = (flags >> 4*4) & 0x0f; m_bySourceExchange1Ver = (flags >> 4*3) & 0x0f; m_byExtendedRequestsVer = (flags >> 4*2) & 0x0f; m_byAcceptCommentVer = (flags >> 4*1) & 0x0f; m_fNoViewSharedFiles = (flags >> 1*2) & 0x01; m_bMultiPacket = (flags >> 1*1) & 0x01; m_fSupportsPreview = (flags >> 1*0) & 0x01; dwEmuleTags |= 2; #ifdef __PACKET_DEBUG__ AddLogLineNS(wxT("Hello type packet processing with eMule Misc Options:")); AddLogLineNS(CFormat(wxT("m_byUDPVer = %i")) % m_byUDPVer); AddLogLineNS(CFormat(wxT("m_byDataCompVer = %i")) % m_byDataCompVer); AddLogLineNS(CFormat(wxT("m_bySupportSecIdent = %i")) % m_bySupportSecIdent); AddLogLineNS(CFormat(wxT("m_bySourceExchangeVer = %i")) % m_bySourceExchange1Ver); AddLogLineNS(CFormat(wxT("m_byExtendedRequestsVer = %i")) % m_byExtendedRequestsVer); AddLogLineNS(CFormat(wxT("m_byAcceptCommentVer = %i")) % m_byAcceptCommentVer); AddLogLineNS(CFormat(wxT("m_fNoViewSharedFiles = %i")) % m_fNoViewSharedFiles); AddLogLineNS(CFormat(wxT("m_bMultiPacket = %i")) % m_bMultiPacket); AddLogLineNS(CFormat(wxT("m_fSupportsPreview = %i")) % m_fSharedDirectories); AddLogLineNS(wxT("That's all.")); #endif SecIdentSupRec += 1; break; } case CT_EMULE_MISCOPTIONS2: // 19 Reserved // 1 Direct UDP Callback supported and available // 1 Supports ChatCaptchas // 1 Supports SourceExachnge2 Packets, ignores SX1 Packet Version // 1 Requires CryptLayer // 1 Requests CryptLayer // 1 Supports CryptLayer // 1 Reserved (ModBit) // 1 Ext Multipacket (Hash+Size instead of Hash) // 1 Large Files (includes support for 64bit tags) // 4 Kad Version - will go up to version 15 only (may need to add another field at some point in the future) m_fDirectUDPCallback = (temptag.GetInt() >> 12) & 0x01; m_fSupportsCaptcha = (temptag.GetInt() >> 11) & 0x01; m_fSupportsSourceEx2 = (temptag.GetInt() >> 10) & 0x01; m_fRequiresCryptLayer = (temptag.GetInt() >> 9) & 0x01; m_fRequestsCryptLayer = (temptag.GetInt() >> 8) & 0x01; m_fSupportsCryptLayer = (temptag.GetInt() >> 7) & 0x01; // reserved 1 m_fExtMultiPacket = (temptag.GetInt() >> 5) & 0x01; m_fSupportsLargeFiles = (temptag.GetInt() >> 4) & 0x01; m_byKadVersion = (temptag.GetInt() >> 0) & 0x0f; dwEmuleTags |= 8; m_fRequestsCryptLayer &= m_fSupportsCryptLayer; m_fRequiresCryptLayer &= m_fRequestsCryptLayer; #ifdef __PACKET_DEBUG__ AddLogLineNS(wxT("Hello type packet processing with eMule Misc Options 2:")); AddLogLineNS(CFormat(wxT(" m_fDirectUDPCallback = %i")) % m_fDirectUDPCallback); AddLogLineNS(CFormat(wxT(" m_fSupportsCaptcha = %i")) % m_fSupportsCaptcha); AddLogLineNS(CFormat(wxT(" m_fSupportsSourceEx2 = %i")) % m_fSupportsSourceEx2); AddLogLineNS(CFormat(wxT(" m_fRequiresCryptLayer = %i")) % m_fRequiresCryptLayer); AddLogLineNS(CFormat(wxT(" m_fRequestsCryptLayer = %i")) % m_fRequestsCryptLayer); AddLogLineNS(CFormat(wxT(" m_fSupportsCryptLayer = %i")) % m_fSupportsCryptLayer); AddLogLineNS(CFormat(wxT(" m_fExtMultiPacket = %i")) % m_fExtMultiPacket); AddLogLineNS(CFormat(wxT(" m_fSupportsLargeFiles = %i")) % m_fSupportsLargeFiles); AddLogLineNS(CFormat(wxT(" KadVersion = %u")) % m_byKadVersion); AddLogLineNS(wxT("That's all.")); #endif break; // Special tag for Compat. Clients Misc options. case CT_EMULECOMPAT_OPTIONS: // 1 Operative System Info // 1 Value-based-type int tags (experimental!) m_fValueBasedTypeTags = (temptag.GetInt() >> 1*1) & 0x01; m_fOsInfoSupport = (temptag.GetInt() >> 1*0) & 0x01; break; case CT_EMULE_VERSION: // 8 Compatible Client ID // 7 Mjr Version (Doesn't really matter..) // 7 Min Version (Only need 0-99) // 3 Upd Version (Only need 0-5) // 7 Bld Version (Only need 0-99) m_byCompatibleClient = (temptag.GetInt() >> 24); m_nClientVersion = temptag.GetInt() & 0x00ffffff; m_byEmuleVersion = 0x99; m_fSharedDirectories = 1; dwEmuleTags |= 4; break; } } m_nUserPort = nUserPort; m_dwServerIP = data.ReadUInt32(); m_nServerPort = data.ReadUInt16(); // Hybrid now has an extra uint32.. What is it for? // Also, many clients seem to send an extra 6? These are not eDonkeys or Hybrids.. if ( data.GetLength() - data.GetPosition() == sizeof(uint32) ) { uint32 test = data.ReadUInt32(); /*if (test == 'KDLM') below kdlm is converted to ascii values. This fixes a warning with gcc 3.4. K=4b D=44 L=4c M=4d */ if (test == 0x4b444c4d) { //if it's == "KDLM" m_bIsML=true; } else{ m_bIsHybrid = true; m_fSharedDirectories = 1; } } if (m_socket) { amuleIPV4Address address; m_socket->GetPeer(address); SetIP(StringIPtoUint32(address.IPAddress())); } else { throw wxString(wxT("Huh, socket failure. Avoided crash this time.")); } if (thePrefs::AddServersFromClient()) { CServer* addsrv = new CServer(m_nServerPort, Uint32toStringIP(m_dwServerIP)); addsrv->SetListName(addsrv->GetAddress()); if (!theApp->AddServer(addsrv)) { delete addsrv; } } //(a)If this is a highID user, store the ID in the Hybrid format. //(b)Some older clients will not send a ID, these client are HighID users that are not connected to a server. //(c)Kad users with a *.*.*.0 IPs will look like a lowID user they are actually a highID user.. They can be detected easily //because they will send a ID that is the same as their IP.. if(!HasLowID() || m_nUserIDHybrid == 0 || m_nUserIDHybrid == m_dwUserIP ) { SetUserIDHybrid(wxUINT32_SWAP_ALWAYS(m_dwUserIP)); } // get client credits CClientCredits* pFoundCredits = theApp->clientcredits->GetCredit(m_UserHash); if (credits == NULL){ credits = pFoundCredits; if (!theApp->clientlist->ComparePriorUserhash(m_dwUserIP, m_nUserPort, pFoundCredits)){ AddDebugLogLineN( logClient, CFormat( wxT("Client: %s (%s) Banreason: Userhash changed (Found in TrackedClientsList)") ) % GetUserName() % GetFullIP() ); Ban(); } } else if (credits != pFoundCredits){ // userhash change ok, however two hours "waittime" before it can be used credits = pFoundCredits; AddDebugLogLineN( logClient, CFormat( wxT("Client: %s (%s) Banreason: Userhash changed") ) % GetUserName() % GetFullIP() ); Ban(); } if ((m_Friend = theApp->friendlist->FindFriend(m_UserHash, m_dwUserIP, m_nUserPort)) != NULL){ m_Friend->LinkClient(CCLIENTREF(this, wxT("CUpDownClient::ProcessHelloTypePacket m_Friend->LinkClient"))); } else{ // avoid that an unwanted client instance keeps a friend slot SetFriendSlot(false); } ReGetClientSoft(); m_byInfopacketsReceived |= IP_EDONKEYPROTPACK; // check if at least CT_EMULEVERSION was received, all other tags are optional bool bIsMule = (dwEmuleTags & 0x04) == 0x04; if (bIsMule) { m_bEmuleProtocol = true; m_byInfopacketsReceived |= IP_EMULEPROTPACK; } if (GetKadPort() && GetKadVersion() > 1) { Kademlia::CKademlia::Bootstrap(wxUINT32_SWAP_ALWAYS(GetIP()), GetKadPort()); } return bIsMule; } bool CUpDownClient::SendHelloPacket() { if (m_socket == NULL) { wxFAIL; return true; } // if IP is filtered, don't greet him but disconnect... amuleIPV4Address address; m_socket->GetPeer(address); if ( theApp->ipfilter->IsFiltered(StringIPtoUint32(address.IPAddress()))) { if (Disconnected(wxT("IPFilter"))) { Safe_Delete(); return false; } return true; } CMemFile data(128); data.WriteUInt8(16); // size of userhash SendHelloTypePacket(&data); CPacket* packet = new CPacket(data, OP_EDONKEYPROT, OP_HELLO); theStats::AddUpOverheadOther(packet->GetPacketSize()); SendPacket(packet,true); m_bHelloAnswerPending = true; AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_HELLO to ") + GetFullIP() ); return true; } void CUpDownClient::SendMuleInfoPacket(bool bAnswer, bool OSInfo) { if (m_socket == NULL){ wxFAIL; return; } // ADUNANZA BEGIN bool wastePackets = IsFastweb(); // ADUFLAGS Mr Hyde 20080201 // ADUNANZA END CPacket* packet = NULL; CMemFile data; data.WriteUInt8(CURRENT_VERSION_SHORT); if (OSInfo) { // Special MuleInfo packet for clients supporting it. // This means aMule >= 2.0.0 and Hydranode // Violently mark it as special Mule Info packet // Sending this makes non-supporting-osinfo clients to refuse to read this // packet. Anyway, this packet should NEVER get to non-supporting clients. data.WriteUInt8(/*EMULE_PROTOCOL*/ 0xFF); data.WriteUInt32(1); // One Tag (OS_INFO) CTagString tag1(ET_OS_INFO,theApp->GetOSType()); tag1.WriteTagToFile(&data); m_OSInfo_sent = true; // So we don't send it again } else { // Normal MuleInfo packet // Kry - There's no point on upgrading to VBT tags here // as no client supporting it uses mule info packet. data.WriteUInt8(EMULE_PROTOCOL); // Tag number // ADUNANZA BEGIN #if 0 data.WriteUInt32(9); #else // Stefano Picerno: Aggiungo il tag ET_SUPERADU3, per il riconoscimento dei client Adu // data.WriteUInt32(7 /*eMule 0.45b*/ + 1 /*ET_MOD_VERSION*/ + ( wastePackets ? 1 /*AdunanzA*/ : 0 ) ); data.WriteUInt32(9 + ( wastePackets ? 1 /*AdunanzA*/ : 0 ) ); // Fine #endif // ADUNANZA END CTagInt32 tag1(ET_COMPRESSION,1); tag1.WriteTagToFile(&data); CTagInt32 tag2(ET_UDPVER,4); tag2.WriteTagToFile(&data); CTagInt32 tag3(ET_UDPPORT, thePrefs::GetEffectiveUDPPort()); tag3.WriteTagToFile(&data); CTagInt32 tag4(ET_SOURCEEXCHANGE,3); tag4.WriteTagToFile(&data); CTagInt32 tag5(ET_COMMENTS,1); tag5.WriteTagToFile(&data); CTagInt32 tag6(ET_EXTENDEDREQUEST,2); tag6.WriteTagToFile(&data); uint32 dwTagValue = (theApp->CryptoAvailable() ? 3 : 0); // Kry - Needs the preview code from eMule /* // set 'Preview supported' only if 'View Shared Files' allowed if (thePrefs::CanSeeShares() != vsfaNobody) { dwTagValue |= 128; } */ CTagInt32 tag7(ET_FEATURES, dwTagValue); tag7.WriteTagToFile(&data); CTagInt32 tag8(ET_COMPATIBLECLIENT,SO_AMULE); tag8.WriteTagToFile(&data); // Support for tag ET_MOD_VERSION wxString mod_name(MOD_VERSION_LONG); CTagString tag9(ET_MOD_VERSION, mod_name); tag9.WriteTagToFile(&data); // Maella end // ADUNANZA BEGIN if (wastePackets) { // Stefano Picerno: In realta' gli altri client adu ignorano il valore associato al tag Adu; // e' sufficiente che tale valore sia != 0. CTagInt32 tag10(ET_SUPERADU3, ADUNANZA_FASTWEB); // E' connesso ad Adunanza tag10.WriteTagToFile(&data); } // if (wastePackets) // ADUNANZA END } packet = new CPacket(data, OP_EMULEPROT, (bAnswer ? OP_EMULEINFOANSWER : OP_EMULEINFO)); if (m_socket) { theStats::AddUpOverheadOther(packet->GetPacketSize()); SendPacket(packet,true,true); // ADUNANZA BEGIN // Backport #ifdef __DEBUG__ // ADUNANZA END if (!bAnswer) { if (!OSInfo) { AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_EMULEINFO to ") + GetFullIP() ); } else { AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_EMULEINFO/OS_INFO to ") + GetFullIP() ); } } else { AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_EMULEINFOANSWER to ") + GetFullIP() ); } // ADUNANZA BEGIN // Backport #endif // ADUNANZA END } } bool CUpDownClient::ProcessMuleInfoPacket(const byte* pachPacket, uint32 nSize) { uint8 protocol_version; const CMemFile data(pachPacket,nSize); // The version number part of this packet will soon be useless since // it is only able to go to v.99. Why the version is a uint8 and why // it was not done as a tag like the eDonkey hello packet is not known. // Therefore, sooner or later, we are going to have to switch over to // using the eDonkey hello packet to set the version. No sense making // a third value sent for versions. uint8 mule_version = data.ReadUInt8(); protocol_version = data.ReadUInt8(); uint32 tagcount = data.ReadUInt32(); if (protocol_version == 0xFF) { // OS Info supporting clients sending a recycled Mule info packet for (uint32 i = 0;i < tagcount; i++){ CTag temptag(data, true); switch(temptag.GetNameID()){ case ET_OS_INFO: // Special tag, only supporting clients (aMule/Hydranode) // It was recycled from a mod's tag, so if the other side // is not supporting OS Info, we're seriously fucked up :) m_sClientOSInfo = temptag.GetStr(); // If we didn't send our OSInfo to this client, just send it if (!m_OSInfo_sent) { SendMuleInfoPacket(false,true); } UpdateStats(); break; // Your ad... er... I mean TAG, here default: break; } } } else { // Old eMule sending tags m_byCompatibleClient = 0; m_byEmuleVersion = mule_version; if( m_byEmuleVersion == 0x2B ) { m_byEmuleVersion = 0x22; } if (!(m_bEmuleProtocol = (protocol_version == EMULE_PROTOCOL))) { return false; } for (uint32 i = 0;i < tagcount; i++){ CTag temptag(data, false); switch(temptag.GetNameID()){ case ET_COMPRESSION: // Bits 31- 8: 0 - reserved // Bits 7- 0: data compression version m_byDataCompVer = temptag.GetInt(); break; case ET_UDPPORT: // Bits 31-16: 0 - reserved // Bits 15- 0: UDP port m_nUDPPort = temptag.GetInt(); break; case ET_UDPVER: // Bits 31- 8: 0 - reserved // Bits 7- 0: UDP protocol version m_byUDPVer = temptag.GetInt(); break; case ET_SOURCEEXCHANGE: // Bits 31- 8: 0 - reserved // Bits 7- 0: source exchange protocol version m_bySourceExchange1Ver = temptag.GetInt(); break; case ET_COMMENTS: // Bits 31- 8: 0 - reserved // Bits 7- 0: comments version m_byAcceptCommentVer = temptag.GetInt(); break; case ET_EXTENDEDREQUEST: // Bits 31- 8: 0 - reserved // Bits 7- 0: extended requests version m_byExtendedRequestsVer = temptag.GetInt(); break; case ET_COMPATIBLECLIENT: // Bits 31- 8: 0 - reserved // Bits 7- 0: compatible client ID m_byCompatibleClient = temptag.GetInt(); break; case ET_FEATURES: // Bits 31- 8: 0 - reserved // Bit 7: Preview // Bit 6- 0: secure identification m_bySupportSecIdent = temptag.GetInt() & 3; m_bSupportsPreview = (temptag.GetInt() & 128) > 0; SecIdentSupRec += 2; break; case ET_MOD_VERSION: if (temptag.IsStr()) { m_strModVersion = temptag.GetStr(); // ADUNANZA BEGIN // bool bIsaMule = m_strModVersion.Contains(wxT("aMule")); int iAduModBegin = m_strModVersion.Find(ADU_MOD_NAME); if (iAduModBegin > -1) { wxString tmpAduMod = m_strModVersion.Mid(iAduModBegin); uint32 adumaj = 0; uint32 adumin = 0; uint32 adubeta = 0; char betaChar = 0x0; if (sscanf(unicode2char(tmpAduMod),"AdunanzA %u.%u%c%u", &adumaj, &adumin, &betaChar, &adubeta) < 4) { // NON e' una beta. // Se e' una ufficiale allora ho letto solo adumaj e adumin // La seg. non serve perche' ho gia' letto i due valori // sscanf(unicode2char(tmpAduMod),"AdunanzA %u.%u", &adumaj, &adumin); } else { // patch per versione fuori standard 3.11c1/3.14c1 if ((betaChar == 'c') && (adubeta == 0) && (adumaj == 3) && ((adumin == 11) || (adumin == 14))) adubeta = 1; } aduver = ADU_VER_CODE(adumaj, adumin, adubeta); } // ADUNANZA END } else if (temptag.IsInt()) { m_strModVersion = CFormat(wxT("ModID=%u")) % temptag.GetInt(); } else { m_strModVersion = wxT("ModID="); } break; // ADUNANZA BEGIN // Mod Add - Gestisce il tag ET_SUPERADU3 case ET_SUPERADU3: { uint32 tagval = 0; if (temptag.IsInt()) { tagval = temptag.GetInt(); if (tagval == 0) { std::cout << "STRANISSIMO: ricevuto tag ET_SUPERADU3 ma con valore 0!!! aduver e' " << aduver << std::endl; AddDebugLogLineN(logPacketErrors, CFormat( wxT("WARNING: received tag ET_SUPERADU3 but with 0 value from client: %s") ) % GetClientFullInfo() ); } } else { AddDebugLogLineN(logPacketErrors, CFormat( wxT("Received corrupted tag ET_SUPERADU3 (it is not int) from client: %s") ) % GetClientFullInfo() ); } SetIsAduSoftware(tagval); m_bReceivedTagAdunanzA = (tagval != 0); // ADUFLAGS Mr Hyde 20080201 if (m_bReceivedTagAdunanzA && !m_bIsFastweb) { AddDebugLogLineN(logPacketErrors, CFormat( wxT("WARNING: received tag ET_SUPERADU3 but the client is not on Fastweb network: %s") ) % GetClientFullInfo() ); } if (!aduver) { aduver = ADU_VER_CODE(3, 7, 0); std::clog << "(Mr Hyde DBG): ET_SUPERADU3 - imposto 3.7.0 aduver = " << aduver << " tagval = " << tagval << " m_strModVersion = " << (const char*) unicode2char(m_strModVersion) << std::endl; } } break; // fine mod Adu // ADUNANZA END default: AddDebugLogLineN( logPacketErrors, CFormat( wxT("Unknown Mule tag (%s) from client: %s") ) % temptag.GetFullInfo() % GetClientFullInfo() ); break; } } if( m_byDataCompVer == 0 ){ m_bySourceExchange1Ver = 0; m_byExtendedRequestsVer = 0; m_byAcceptCommentVer = 0; m_nUDPPort = 0; } //implicitly supported options by older clients //in the future do not use version to guess about new features if(m_byEmuleVersion < 0x25 && m_byEmuleVersion > 0x22) { m_byUDPVer = 1; } if(m_byEmuleVersion < 0x25 && m_byEmuleVersion > 0x21) { m_bySourceExchange1Ver = 1; } if(m_byEmuleVersion == 0x24) { m_byAcceptCommentVer = 1; } // Shared directories are requested from eMule 0.28+ because eMule 0.27 has a bug in // the OP_ASKSHAREDFILESDIR handler, which does not return the shared files for a // directory which has a trailing backslash. if(m_byEmuleVersion >= 0x28 && !m_bIsML) {// MLdonkey currently does not support shared directories m_fSharedDirectories = 1; } ReGetClientSoft(); m_byInfopacketsReceived |= IP_EMULEPROTPACK; // ADUNANZA BEGIN // lupz // if (IsOldAdu(theApp->rm->mVer)) if (IsOldAdu(theApp->get_mVer())) { AddDebugLogLineN( logClient /*logPacketErrors*/, CFormat( wxT("BANNED <%s>, Banreason: OLD AdunanzA ver <%d> banned by remote settings") ) % GetClientFullInfo() % theApp->get_mVer()); Ban(); } else if (theApp->rm->isBannedMod(m_strModVersion)) { // Mr Hyde: controllo versioni da bannare // (aggiunto per allienamento con 3.15 Windows) AddDebugLogLineN(logPacketErrors, CFormat( wxT("BANNED <%s>, Banreason: mod <%s> banned by remote settings") ) % GetClientFullInfo() % m_strModVersion ); Ban(); } // ADUNANZA END } return (protocol_version == 0xFF); // This was a OS_Info? } void CUpDownClient::SendHelloAnswer() { if (m_socket == NULL){ wxFAIL; return; } CMemFile data(128); SendHelloTypePacket(&data); CPacket* packet = new CPacket(data, OP_EDONKEYPROT, OP_HELLOANSWER); theStats::AddUpOverheadOther(packet->GetPacketSize()); AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_HELLOANSWER to ") + GetFullIP() ); SendPacket(packet,true); } void CUpDownClient::SendHelloTypePacket(CMemFile* data) { data->WriteHash(thePrefs::GetUserHash()); // ADUNANZA BEGIN #if 0 data->WriteUInt32(theApp->GetID()); #else amuleIPV4Address address; m_socket->GetPeer(address); SetIP(StringIPtoUint32(address.IPAddress())); uint32 clientid = (CAdunanzAUtilities::AduIsFastWebIP(GetIP()) ? theApp->GetID() : theApp->GetED2KID()); data->WriteUInt32(clientid); #endif // ADUNANZA END data->WriteUInt16(thePrefs::GetPort()); uint32 tagcount = 6; if( theApp->clientlist->GetBuddy() && theApp->IsFirewalled() ) { tagcount += 2; } tagcount ++; // eMule misc flags 2 (kad version) // ADUNANZA BEGIN // Siamo una MOD, quindi spedisco sempre la MOD_VERSION #if 0 #ifdef __SVN__ // Kry - This is the tagcount!!! Be sure to update it!! // Last update: CT_EMULECOMPAT_OPTIONS included data->WriteUInt32(tagcount + 1); #else data->WriteUInt32(tagcount); // NO MOD_VERSION #endif #else data->WriteUInt32(tagcount + 1); #endif // ADUNANZA END CTagString tagname(CT_NAME,thePrefs::GetUserNick()); tagname.WriteTagToFile(data, utf8strRaw); CTagVarInt tagversion(CT_VERSION, EDONKEYVERSION, GetVBTTags() ? 0 : 32); tagversion.WriteTagToFile(data); // eMule UDP Ports uint32 kadUDPPort = 0; if(Kademlia::CKademlia::IsConnected()) { if (Kademlia::CKademlia::GetPrefs()->GetExternalKadPort() != 0 && Kademlia::CKademlia::GetPrefs()->GetUseExternKadPort() && Kademlia::CUDPFirewallTester::IsVerified()) { kadUDPPort = Kademlia::CKademlia::GetPrefs()->GetExternalKadPort(); } else { kadUDPPort = Kademlia::CKademlia::GetPrefs()->GetInternKadPort(); } } CTagVarInt tagUdpPorts(CT_EMULE_UDPPORTS, (kadUDPPort << 16) | ((uint32)thePrefs::GetEffectiveUDPPort()), GetVBTTags() ? 0 : 32); tagUdpPorts.WriteTagToFile(data); if( theApp->clientlist->GetBuddy() && theApp->IsFirewalled() ) { CTagVarInt tagBuddyIP(CT_EMULE_BUDDYIP, theApp->clientlist->GetBuddy()->GetIP(), GetVBTTags() ? 0 : 32); tagBuddyIP.WriteTagToFile(data); CTagVarInt tagBuddyPort(CT_EMULE_BUDDYUDP, // ( RESERVED ) ((uint32)theApp->clientlist->GetBuddy()->GetUDPPort() ) , GetVBTTags() ? 0 : 32); tagBuddyPort.WriteTagToFile(data); } // aMule Version CTagVarInt tagMuleVersion(CT_EMULE_VERSION, (SO_AMULE << 24) | make_full_ed2k_version(VERSION_MJR, VERSION_MIN, VERSION_UPDATE) // | (RESERVED ) , GetVBTTags() ? 0 : 32); tagMuleVersion.WriteTagToFile(data); // eMule Misc. Options #1 const uint32 uUdpVer = 4; const uint32 uDataCompVer = 1; const uint32 uSupportSecIdent = theApp->CryptoAvailable() ? 3 : 0; const uint32 uSourceExchangeVer = 3; const uint32 uExtendedRequestsVer = 2; const uint32 uAcceptCommentVer = 1; const uint32 uNoViewSharedFiles = (thePrefs::CanSeeShares() == vsfaNobody) ? 1 : 0; // for backward compatibility this has to be a 'negative' flag const uint32 uMultiPacket = 1; const uint32 uSupportPreview = 0; // No network preview at all. const uint32 uPeerCache = 0; // No peercache for aMule, baby const uint32 uUnicodeSupport = 1; const uint32 nAICHVer = 1; // AICH is ENABLED right now. CTagVarInt tagMisOptions(CT_EMULE_MISCOPTIONS1, (nAICHVer << ((4*7)+1)) | (uUnicodeSupport << 4*7) | (uUdpVer << 4*6) | (uDataCompVer << 4*5) | (uSupportSecIdent << 4*4) | (uSourceExchangeVer << 4*3) | (uExtendedRequestsVer << 4*2) | (uAcceptCommentVer << 4*1) | (uPeerCache << 1*3) | (uNoViewSharedFiles << 1*2) | (uMultiPacket << 1*1) | (uSupportPreview << 1*0) , GetVBTTags() ? 0 : 32); tagMisOptions.WriteTagToFile(data); // eMule Misc. Options #2 const uint32 uKadVersion = KADEMLIA_VERSION; const uint32 uSupportLargeFiles = 1; const uint32 uExtMultiPacket = 1; const uint32 uReserved = 0; // mod bit const uint32 uSupportsCryptLayer = thePrefs::IsClientCryptLayerSupported() ? 1 : 0; const uint32 uRequestsCryptLayer = thePrefs::IsClientCryptLayerRequested() ? 1 : 0; const uint32 uRequiresCryptLayer = thePrefs::IsClientCryptLayerRequired() ? 1 : 0; const uint32 uSupportsSourceEx2 = 1; #ifdef AMULE_DAEMON // captcha for daemon/remotegui not supported for now const uint32 uSupportsCaptcha = 0; #else const uint32 uSupportsCaptcha = 1; #endif // direct callback is only possible if connected to kad, tcp firewalled and verified UDP open (for example on a full cone NAT) const uint32 uDirectUDPCallback = (Kademlia::CKademlia::IsRunning() && Kademlia::CKademlia::IsFirewalled() && !Kademlia::CUDPFirewallTester::IsFirewalledUDP(true) && Kademlia::CUDPFirewallTester::IsVerified()) ? 1 : 0; CTagVarInt tagMisOptions2(CT_EMULE_MISCOPTIONS2, // (RESERVED ) (uDirectUDPCallback << 12) | (uSupportsCaptcha << 11) | (uSupportsSourceEx2 << 10) | (uRequiresCryptLayer << 9) | (uRequestsCryptLayer << 8) | (uSupportsCryptLayer << 7) | (uReserved << 6) | (uExtMultiPacket << 5) | (uSupportLargeFiles << 4) | (uKadVersion << 0) , GetVBTTags() ? 0 : 32 ); tagMisOptions2.WriteTagToFile(data); const uint32 nOSInfoSupport = 1; // We support OS_INFO const uint32 nValueBasedTypeTags = 0; // Experimental, disabled CTagVarInt tagMisCompatOptions(CT_EMULECOMPAT_OPTIONS, (nValueBasedTypeTags << 1*1) | (nOSInfoSupport << 1*0) , GetVBTTags() ? 0 : 32); tagMisCompatOptions.WriteTagToFile(data); // ADUNANZA BEGIN // Siamo una MOD, quindi spedisco sempre la MOD_VERSION #if 0 #ifdef __SVN__ wxString mod_name(MOD_VERSION_LONG); CTagString tagModName(ET_MOD_VERSION, mod_name); tagModName.WriteTagToFile(data); #endif #else wxString mod_name(MOD_VERSION_LONG); CTagString tagModName(ET_MOD_VERSION, mod_name); tagModName.WriteTagToFile(data); #endif // ADUNANZA END uint32 dwIP = 0; uint16 nPort = 0; if (theApp->IsConnectedED2K()) { dwIP = theApp->serverconnect->GetCurrentServer()->GetIP(); nPort = theApp->serverconnect->GetCurrentServer()->GetPort(); } data->WriteUInt32(dwIP); data->WriteUInt16(nPort); } void CUpDownClient::ProcessMuleCommentPacket(const byte* pachPacket, uint32 nSize) { if (!m_reqfile) { throw CInvalidPacket(wxT("Comment packet for unknown file")); } if (!m_reqfile->IsPartFile()) { throw CInvalidPacket(wxT("Comment packet for completed file")); } const CMemFile data(pachPacket, nSize); uint8 rating = data.ReadUInt8(); if (rating > 5) { AddDebugLogLineN( logClient, wxString(wxT("Invalid Rating for file '")) << m_clientFilename << wxT("' received: ") << rating); m_iRating = 0; } else { m_iRating = rating; AddDebugLogLineN( logClient, wxString(wxT("Rating for file '")) << m_clientFilename << wxT("' received: ") << m_iRating); } // The comment is unicoded, with a uin32 len and safe read // (won't break if string size is < than advertised len) // Truncated to MAXFILECOMMENTLEN size m_strComment = data.ReadString((GetUnicodeSupport() != utf8strNone), 4 /* bytes (it's a uint32)*/, true).Left(MAXFILECOMMENTLEN); AddDebugLogLineN( logClient, wxString(wxT("Description for file '")) << m_clientFilename << wxT("' received: ") << m_strComment); // Update file rating m_reqfile->UpdateFileRatingCommentAvail(); } void CUpDownClient::ClearDownloadBlockRequests() { { std::list::iterator it = m_DownloadBlocks_list.begin(); for (; it != m_DownloadBlocks_list.end(); ++it) { Requested_Block_Struct* cur_block = *it; // ADUNANZA BEGIN if (!cur_block) continue; // ADUNANZA END if (m_reqfile){ m_reqfile->RemoveBlockFromList(cur_block->StartOffset, cur_block->EndOffset); } delete cur_block; } m_DownloadBlocks_list.clear(); } { std::list::iterator it = m_PendingBlocks_list.begin(); for (; it != m_PendingBlocks_list.end(); ++it) { Pending_Block_Struct* pending = *it; // ADUNANZA BEGIN if (!pending) continue; if (pending->block) { // ADUNANZA END if (m_reqfile) { m_reqfile->RemoveBlockFromList(pending->block->StartOffset, pending->block->EndOffset); } delete pending->block; // ADUNANZA BEGIN } // ADUNANZA END // Not always allocated if (pending->zStream){ inflateEnd(pending->zStream); delete pending->zStream; } delete pending; } m_PendingBlocks_list.clear(); } } bool CUpDownClient::Disconnected(const wxString& DEBUG_ONLY(strReason), bool bFromSocket) { //wxASSERT(theApp->clientlist->IsValidClient(this)); if (HasBeenDeleted()) { AddDebugLogLineN(logClient, wxT("Disconnected() called for already deleted client on ip ") + Uint32toStringIP(GetConnectIP())); return false; } // was this a direct callback? if (m_dwDirectCallbackTimeout != 0) { theApp->clientlist->RemoveDirectCallback(this); m_dwDirectCallbackTimeout = 0; theApp->clientlist->AddDeadSource(this); AddDebugLogLineN(logClient, wxT("Direct callback failed to client on ip ") + Uint32toStringIP(GetConnectIP())); } if (GetKadState() == KS_QUEUED_FWCHECK_UDP || GetKadState() == KS_CONNECTING_FWCHECK_UDP) { Kademlia::CUDPFirewallTester::SetUDPFWCheckResult(false, true, wxUINT32_SWAP_ALWAYS(GetConnectIP()), 0); // inform the tester that this test was cancelled } else if (GetKadState() == KS_FWCHECK_UDP) { Kademlia::CUDPFirewallTester::SetUDPFWCheckResult(false, false, wxUINT32_SWAP_ALWAYS(GetConnectIP()), 0); // inform the tester that this test has failed } else if (GetKadState() == KS_CONNECTED_BUDDY) { AddDebugLogLineN(logClient, wxT("Buddy client disconnected - ") + strReason); } //If this is a KAD client object, just delete it! SetKadState(KS_NONE); if (GetUploadState() == US_UPLOADING) { // sets US_NONE theApp->uploadqueue->RemoveFromUploadQueue(this); } if (GetDownloadState() == DS_DOWNLOADING) { SetDownloadState(DS_ONQUEUE); } else { // ensure that all possible block requests are removed from the partfile ClearDownloadBlockRequests(); if (GetDownloadState() == DS_CONNECTED) { // successfully connected, but probably didn't respond to our filerequest theApp->clientlist->AddDeadSource(this); theApp->downloadqueue->RemoveSource(this); } } // we had still an AICH request pending, handle it if (IsAICHReqPending()) { m_fAICHRequested = FALSE; CAICHHashSet::ClientAICHRequestFailed(this); } // The remote client does not have to answer with OP_HASHSETANSWER *immediatly* // after we've sent OP_HASHSETREQUEST. It may occure that a (buggy) remote client // is sending use another OP_FILESTATUS which would let us change to DL-state to DS_ONQUEUE. if (((GetDownloadState() == DS_REQHASHSET) || m_fHashsetRequesting) && (m_reqfile)) { m_reqfile->SetHashSetNeeded(true); } SourceItemType source_type = UNAVAILABLE_SOURCE; SourceItemType peer_type = UNAVAILABLE_SOURCE; //check if this client is needed in any way, if not delete it bool bDelete = true; switch (m_nUploadState) { case US_ONUPLOADQUEUE: bDelete = false; peer_type = AVAILABLE_SOURCE; break; }; switch (m_nDownloadState) { case DS_ONQUEUE: source_type = A4AF_SOURCE; // Will be checked. case DS_TOOMANYCONNS: case DS_NONEEDEDPARTS: case DS_LOWTOLOWIP: bDelete = false; break; }; switch (m_nUploadState) { case US_CONNECTING: case US_WAITCALLBACK: case US_ERROR: theApp->clientlist->AddDeadSource(this); bDelete = true; }; switch (m_nDownloadState) { case DS_CONNECTING: case DS_WAITCALLBACK: case DS_ERROR: case DS_BANNED: theApp->clientlist->AddDeadSource(this); bDelete = true; }; // We keep chat partners in any case if (GetChatState() != MS_NONE) { bDelete = false; m_pendingMessage.Clear(); Notify_ChatConnResult(false,GUI_ID(GetIP(),GetUserPort()),wxEmptyString); } // Delete socket if (!bFromSocket && m_socket) { wxASSERT (theApp->listensocket->IsValidSocket(m_socket)); m_socket->Safe_Delete(); } SetSocket(NULL); if (m_iFileListRequested) { AddLogLineC(CFormat(_("Failed to retrieve shared files from user '%s'")) % GetUserName() ); m_iFileListRequested = 0; } if (bDelete) { if (m_Friend) { // Remove the friend linkage m_Friend->UnLinkClient(); // this notifies } } else { Notify_SharedCtrlRefreshClient(ECID(), peer_type); Notify_SourceCtrlUpdateSource(ECID(), source_type); m_fHashsetRequesting = 0; SetSentCancelTransfer(0); m_bHelloAnswerPending = false; m_fSentOutOfPartReqs = 0; } AddDebugLogLineN(logClient, CFormat(wxT("--- %s client D:%d U:%d \"%s\"; Reason was %s")) % (bDelete ? wxT("Deleted") : wxT("Disconnected")) % m_nDownloadState % m_nUploadState % GetClientFullInfo() % strReason ); return bDelete; } //Returned bool is not if the TryToConnect is successful or not.. //false means the client was deleted! //true means the client was not deleted! bool CUpDownClient::TryToConnect(bool bIgnoreMaxCon) { // Kad reviewed if (theApp->listensocket->TooManySockets() && !bIgnoreMaxCon ) { if (!(m_socket && m_socket->IsConnected())) { if(Disconnected(wxT("Too many connections"))) { Safe_Delete(); return false; } return true; } } // Do not try to connect to source which are incompatible with our encryption setting (one requires it, and the other one doesn't supports it) if ( (RequiresCryptLayer() && !thePrefs::IsClientCryptLayerSupported()) || (thePrefs::IsClientCryptLayerRequired() && !SupportsCryptLayer()) ){ if(Disconnected(wxT("CryptLayer-Settings (Obfuscation) incompatible"))){ Safe_Delete(); return false; } else { return true; } } // Ipfilter check uint32 uClientIP = GetIP(); if (uClientIP == 0 && !HasLowID()) { uClientIP = wxUINT32_SWAP_ALWAYS(m_nUserIDHybrid); } if (uClientIP) { // Although we filter all received IPs (server sources, source exchange) and all incomming connection attempts, // we do have to filter outgoing connection attempts here too, because we may have updated the ip filter list if (theApp->ipfilter->IsFiltered(uClientIP)) { AddDebugLogLineN(logIPFilter, CFormat(wxT("Filtered ip %u (%s) on TryToConnect\n")) % uClientIP % Uint32toStringIP(uClientIP)); if (Disconnected(wxT("IPFilter"))) { Safe_Delete(); return false; } return true; } // for safety: check again whether that IP is banned if (theApp->clientlist->IsBannedClient(uClientIP)) { AddDebugLogLineN(logClient, wxT("Refused to connect to banned client ") + Uint32toStringIP(uClientIP)); if (Disconnected(wxT("Banned IP"))) { Safe_Delete(); return false; } return true; } } if (GetKadState() == KS_QUEUED_FWCHECK) { SetKadState(KS_CONNECTING_FWCHECK); } else if (GetKadState() == KS_QUEUED_FWCHECK_UDP) { SetKadState(KS_CONNECTING_FWCHECK_UDP); } if (HasLowID()) { if (!theApp->CanDoCallback(GetServerIP(), GetServerPort())) { //We cannot do a callback! if (GetDownloadState() == DS_CONNECTING) { SetDownloadState(DS_LOWTOLOWIP); } else if (GetDownloadState() == DS_REQHASHSET) { SetDownloadState(DS_ONQUEUE); m_reqfile->SetHashSetNeeded(true); } if (GetUploadState() == US_CONNECTING) { if(Disconnected(wxT("LowID->LowID and US_CONNECTING"))) { Safe_Delete(); return false; } } return true; } //We already know we are not firewalled here as the above condition already detected LowID->LowID and returned. //If ANYTHING changes with the "if(!theApp->CanDoCallback(this))" above that will let you fall through //with the condition that the source is firewalled and we are firewalled, we must //recheck it before the this check.. if (HasValidBuddyID() && !GetBuddyIP() && !GetBuddyPort() && !theApp->serverconnect->IsLocalServer(GetServerIP(), GetServerPort()) && !(SupportsDirectUDPCallback() && thePrefs::GetEffectiveUDPPort() != 0)) { //This is a Kad firewalled source that we want to do a special callback because it has no buddyIP or buddyPort. if( Kademlia::CKademlia::IsConnected() ) { //We are connect to Kad if( Kademlia::CKademlia::GetPrefs()->GetTotalSource() > 0 || Kademlia::CSearchManager::AlreadySearchingFor(Kademlia::CUInt128(GetBuddyID()))) { //There are too many source lookups already or we are already searching this key. SetDownloadState(DS_TOOMANYCONNSKAD); return true; } } } } if (!m_socket || !m_socket->IsConnected()) { if (m_socket) { m_socket->Safe_Delete(); } m_socket = new CClientTCPSocket(this, thePrefs::GetProxyData()); } else { ConnectionEstablished(); return true; } if (HasLowID() && SupportsDirectUDPCallback() && thePrefs::GetEffectiveUDPPort() != 0 && GetConnectIP() != 0) { // LOWID with DirectCallback if (m_dwDirectCallbackTimeout != 0) { AddDebugLogLineN(logClient, wxT("ERROR: Trying Direct UDP Callback while already trying to connect to client on ip ") + Uint32toStringIP(GetConnectIP())); return true; // We're already trying a direct connection to this client } // a direct callback is possible - since no other parties are involved and only one additional packet overhead // is used we basically handle it like a normal connection try, no restrictions apply // we already check above with !theApp->CanDoCallback(this) if any callback is possible at all m_dwDirectCallbackTimeout = ::GetTickCount() + SEC2MS(45); theApp->clientlist->AddDirectCallbackClient(this); AddDebugLogLineN(logClient, CFormat(wxT("Direct Callback on port %u to client on ip %s")) % GetKadPort() % Uint32toStringIP(GetConnectIP())); CMemFile data; data.WriteUInt16(thePrefs::GetPort()); // needs to know our port data.WriteHash(thePrefs::GetUserHash()); // and userhash // our connection settings data.WriteUInt8(Kademlia::CPrefs::GetMyConnectOptions(true, false)); AddDebugLogLineN(logClientUDP, wxT("Sending OP_DIRECTCALLBACKREQ to ") + Uint32_16toStringIP_Port(GetConnectIP(), GetKadPort())); CPacket* packet = new CPacket(data, OP_EMULEPROT, OP_DIRECTCALLBACKREQ); theStats::AddUpOverheadOther(packet->GetPacketSize()); theApp->clientudp->SendPacket(packet, GetConnectIP(), GetKadPort(), ShouldReceiveCryptUDPPackets(), GetUserHash().GetHash(), false, 0); } else if (HasLowID()) { // LOWID if (GetDownloadState() == DS_CONNECTING) { SetDownloadState(DS_WAITCALLBACK); } if (GetUploadState() == US_CONNECTING) { if(Disconnected(wxT("LowID and US_CONNECTING"))) { Safe_Delete(); return false; } return true; } if (theApp->serverconnect->IsLocalServer(m_dwServerIP,m_nServerPort)) { CMemFile data; // AFAICS, this id must be reversed to be sent to clients // But if I reverse it, we do a serve violation ;) data.WriteUInt32(m_nUserIDHybrid); CPacket* packet = new CPacket(data, OP_EDONKEYPROT, OP_CALLBACKREQUEST); theStats::AddUpOverheadServer(packet->GetPacketSize()); AddDebugLogLineN(logLocalClient, wxT("Local Client: OP_CALLBACKREQUEST to ") + GetFullIP()); theApp->serverconnect->SendPacket(packet); SetDownloadState(DS_WAITCALLBACK); } else { if (GetUploadState() == US_NONE && (!GetRemoteQueueRank() || m_bReaskPending)) { if( !HasValidBuddyID() ) { theApp->downloadqueue->RemoveSource(this); if (Disconnected(wxT("LowID and US_NONE and QR=0"))) { Safe_Delete(); return false; } return true; } if( !Kademlia::CKademlia::IsConnected() ) { //We are not connected to Kad and this is a Kad Firewalled source.. theApp->downloadqueue->RemoveSource(this); if(Disconnected(wxT("Kad Firewalled source but not connected to Kad."))) { Safe_Delete(); return false; } return true; } if( GetDownloadState() == DS_WAITCALLBACK ) { if( GetBuddyIP() && GetBuddyPort()) { CMemFile bio(34); bio.WriteUInt128(Kademlia::CUInt128(GetBuddyID())); bio.WriteUInt128(Kademlia::CUInt128(m_reqfile->GetFileHash().GetHash())); bio.WriteUInt16(thePrefs::GetPort()); // ADUNANZA BEGIN #if 0 CPacket* packet = new CPacket(bio, OP_KADEMLIAHEADER, KADEMLIA_CALLBACK_REQ); #else CPacket* packet = new CPacket(bio, theApp->get_kadOpcode(), KADEMLIA_CALLBACK_REQ); #endif // ADUNANZA END // eMule FIXME: We don't know which kadversion the buddy has, so we need to send unencrypted theApp->clientudp->SendPacket(packet, GetBuddyIP(), GetBuddyPort(), false, NULL, true, 0); AddDebugLogLineN(logClientKadUDP, CFormat(wxT("KadCallbackReq (size=%i) to %s")) % packet->GetPacketSize() % Uint32_16toStringIP_Port(GetBuddyIP(), GetBuddyPort())); theStats::AddUpOverheadKad(packet->GetRealPacketSize()); SetDownloadState(DS_WAITCALLBACKKAD); } else { AddLogLineN(_("Searching buddy for lowid connection")); //Create search to find buddy. Kademlia::CSearch *findSource = new Kademlia::CSearch; findSource->SetSearchTypes(Kademlia::CSearch::FINDSOURCE); findSource->SetTargetID(Kademlia::CUInt128(GetBuddyID())); findSource->AddFileID(Kademlia::CUInt128(m_reqfile->GetFileHash().GetHash())); if(Kademlia::CSearchManager::StartSearch(findSource)) { //Started lookup.. SetDownloadState(DS_WAITCALLBACKKAD); } else { //This should never happen.. wxFAIL; } } } } else { if (GetDownloadState() == DS_WAITCALLBACK) { m_bReaskPending = true; SetDownloadState(DS_ONQUEUE); } } } } else { // HIGHID if (!Connect()) { return false; } } return true; } bool CUpDownClient::Connect() { m_hasbeenobfuscatinglately = false; if (!m_socket->IsOk()) { // Enable or disable crypting based on our and the remote clients preference if (HasValidHash() && SupportsCryptLayer() && thePrefs::IsClientCryptLayerSupported() && (RequestsCryptLayer() || thePrefs::IsClientCryptLayerRequested())){ m_socket->SetConnectionEncryption(true, GetUserHash().GetHash(), false); } else { m_socket->SetConnectionEncryption(false, NULL, false); } amuleIPV4Address tmp; tmp.Hostname(GetConnectIP()); tmp.Service(GetUserPort()); AddDebugLogLineN(logClient, wxT("Trying to connect to ") + Uint32_16toStringIP_Port(GetConnectIP(),GetUserPort())); m_socket->Connect(tmp, false); // We should send hello packets AFTER connecting! // so I moved it to OnConnect return true; } else { return false; } } void CUpDownClient::ConnectionEstablished() { /* Kry - First thing, check if this client was just used to retrieve info. That's some debug thing for myself... check connection_reason definition */ m_hasbeenobfuscatinglately = (m_socket && m_socket->IsConnected() && m_socket->IsObfusicating()); #ifdef __DEBUG__ if (!connection_reason.IsEmpty()) { AddLogLineN(CFormat(wxT("Got client info checking for %s: %s\nDisconnecting and deleting.")) % connection_reason % GetClientFullInfo()); connection_reason.Clear(); // So we don't re-print on destructor. Safe_Delete(); return; } #endif // Check if we should use this client to retrieve our public IP // Ignore local ip on GetPublicIP (could be wrong) if (theApp->GetPublicIP(true) == 0 && theApp->IsConnectedED2K()) { SendPublicIPRequest(); } // was this a direct callback? if (m_dwDirectCallbackTimeout != 0){ theApp->clientlist->RemoveDirectCallback(this); m_dwDirectCallbackTimeout = 0; AddDebugLogLineN(logClient, wxT("Direct Callback succeeded, connection established to ") + Uint32toStringIP(GetConnectIP())); } switch (GetKadState()) { case KS_CONNECTING_FWCHECK: SetKadState(KS_CONNECTED_FWCHECK); break; case KS_CONNECTING_BUDDY: case KS_INCOMING_BUDDY: SetKadState(KS_CONNECTED_BUDDY); break; case KS_CONNECTING_FWCHECK_UDP: SetKadState(KS_FWCHECK_UDP); SendFirewallCheckUDPRequest(); break; default: break; } // ok we have a connection, lets see if we want anything from this client if (GetChatState() == MS_CONNECTING) { SetChatState( MS_CHATTING ); } if (GetChatState() == MS_CHATTING) { bool result = true; if (!m_pendingMessage.IsEmpty()) { result = SendChatMessage(m_pendingMessage); } Notify_ChatConnResult(result,GUI_ID(GetIP(),GetUserPort()),m_pendingMessage); m_pendingMessage.Clear(); } switch(GetDownloadState()) { case DS_CONNECTING: case DS_WAITCALLBACK: case DS_WAITCALLBACKKAD: m_bReaskPending = false; SetDownloadState(DS_CONNECTED); SendFileRequest(); } if (m_bReaskPending){ m_bReaskPending = false; if (GetDownloadState() != DS_NONE && GetDownloadState() != DS_DOWNLOADING) { SetDownloadState(DS_CONNECTED); SendFileRequest(); } } switch(GetUploadState()){ case US_CONNECTING: case US_WAITCALLBACK: if (theApp->uploadqueue->IsDownloading(this)) { SetUploadState(US_UPLOADING); CPacket* packet = new CPacket(OP_ACCEPTUPLOADREQ, 0, OP_EDONKEYPROT); theStats::AddUpOverheadFileRequest(packet->GetPacketSize()); SendPacket(packet,true); AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_ACCEPTUPLOADREQ to ") + GetFullIP() ); } } if (m_iFileListRequested == 1) { CPacket* packet = new CPacket(m_fSharedDirectories ? OP_ASKSHAREDDIRS : OP_ASKSHAREDFILES, 0, OP_EDONKEYPROT); theStats::AddUpOverheadOther(packet->GetPacketSize()); SendPacket(packet,true,true); // ADUNANZA BEGIN // backport #ifdef __DEBUG__ // ADUNANZA END if (m_fSharedDirectories) { AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_ASKSHAREDDIRS to ") + GetFullIP() ); } else { AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_ASKSHAREDFILES to ") + GetFullIP() ); } // ADUNANZA BEGIN // backport #endif // ADUNANZA END } while (!m_WaitingPackets_list.empty()) { CPacket* packet = m_WaitingPackets_list.front(); m_WaitingPackets_list.pop_front(); SendPacket(packet); } } int CUpDownClient::GetHashType() const { if ( m_UserHash[5] == 13 && m_UserHash[14] == 110 ) { return SO_OLDEMULE; } if ( m_UserHash[5] == 14 && m_UserHash[14] == 111 ) { return SO_EMULE; } if ( m_UserHash[5] == 'M' && m_UserHash[14] == 'L' ) { return SO_MLDONKEY; } return SO_UNKNOWN; } void CUpDownClient::SetSocket(CClientTCPSocket* socket) { #ifdef __DEBUG__ if (m_socket == NULL && socket != NULL) { theStats::SocketAssignedToClient(); } else if (m_socket != NULL && socket == NULL) { theStats::SocketUnassignedFromClient(); } #endif m_socket = socket; } void CUpDownClient::ReGetClientSoft() { if (m_Username.IsEmpty()) { m_clientSoft=SO_UNKNOWN; m_clientVerString = m_clientSoftString = m_clientVersionString = m_fullClientVerString = _("Unknown"); UpdateStats(); return; } int iHashType = GetHashType(); // ADUNANZA BEGIN AddDebugLogLineN(logClient, CFormat(wxT("soft: %u hash: %u byEmuleVersion: %u nClientVersion: %u")) % m_clientSoft % iHashType % m_byEmuleVersion % m_nClientVersion); // ADUNANZA END wxString clientModString; if (iHashType == SO_EMULE) { m_clientSoft = m_byCompatibleClient; m_clientSoftString = GetSoftName(m_clientSoft); // Special issues: // ADUNANZA BEGIN // ERRORE di aMule ufficiale: // aMule in pratica gestisce correttamente le mod di eMule, ma si dimentica di quelle di aMule! // Infatti, nel caso di mod di aMule, // // m_clientSoft == SO_AMULE // // e quindi amule va a SOVRASCRIVERE il nome del software (che deve essere solo "aMule") con la MOD_STRING // (che invece contiene "AdunanzA vN.NNbN") // // In questo modo vengono poi sbagliate le informazioni stampate nella finestra dei dettagli sul singolo client. // // Inoltre viene composta in maniera errata la m_fullClientVerString. #if 0 if(!GetClientModString().IsEmpty() && (m_clientSoft != SO_EMULE)) { #else if(!GetClientModString().IsEmpty() && (m_clientSoft != SO_EMULE) && (m_clientSoft != SO_AMULE)) { #endif // ADUNANZA END m_clientSoftString = GetClientModString(); } // ADUNANZA BEGIN // aMule a partire dalla versione 2.0.0 manda nell'Hello Packet informazioni varie, // tra cui la versione del client. // // A causa di un errore dell'applicazione della patch AdunanzA (errore storico probabilmente mio), // errore corretto nelle 3.14b4, le versioni di aMule AdunanzA < 3.14b4 non gestiscono correttamente // queste informazioni e codificano la versione di aMule su cui e' basata aMule AdunanzA in modo particolare // in m_nClientVersion. // Per la precisione: // - queste versioni di aMule AdunanzA hanno m_byEmuleVersion != 0x99 (contengono invece uno short che descrive la versione di eMule su cui e' basato aMule) // - in m_nClientVersion e' codificata la versione di aMule. // // Le versioni di aMule AdunanzA >= 3.14b4 (che gestiscono i pacchetti in maniera corretta) // usano lo stesso meccanismo usato da aMule standard quindi hanno: // - m_byEmuleVersion == 0x99 (ad indicare che gestiscono info addizionali quali il S.O.) // - la versione di aMule codificata (ma in modo diverso) in m_nClientVersion // // Per presentare dei dettagli del client le informazioni corrette sono costretto quindi, // per i client basati su aMule (quindi che hanno SO_AMULE) e che sono client AdunanzA, // a controllare m_nClientVersion per capire se sono client < 3.14b4 (e, in questo caso, decodifico // in modo diverso m_nClientVersion) // bool bAlternativeAmuleVersion(false); // ADUNANZA END // Isn't xMule annoying? if ((m_clientSoft == SO_LXMULE) && (GetMuleVersion() > 0x26) && (GetMuleVersion() != 0x99)) { m_clientSoftString += CFormat(_(" (Fake eMule version %#x)")) % GetMuleVersion(); } if ((m_clientSoft == SO_EMULE) && ( wxString(GetClientModString()).MakeLower().Find(wxT("xmule")) != -1 || GetUserName().Find(wxT("xmule.")) != -1 ) ) { // FAKE eMule -a newer xMule faking is ident. m_clientSoft = SO_LXMULE; if (GetClientModString().IsEmpty() == false) { m_clientSoftString = GetClientModString() + _(" (Fake eMule)"); } else { m_clientSoftString = _("xMule (Fake eMule)"); // don't use GetSoftName, it's not lmule. } } // Now, what if we don't know this SO_ID? if (m_clientSoftString.IsEmpty()) { if(m_bIsML) { m_clientSoft = SO_MLDONKEY; m_clientSoftString = GetSoftName(m_clientSoft); } else if (m_bIsHybrid) { m_clientSoft = SO_EDONKEYHYBRID; m_clientSoftString = GetSoftName(m_clientSoft); } else if (m_byCompatibleClient != 0) { m_clientSoft = SO_COMPAT_UNK; #ifdef __DEBUG__ if ( // Exceptions: (m_byCompatibleClient != 0xf0) // Chinese leech mod && (1==1) // Your ad here ) { AddLogLineNS(CFormat(wxT("Compatible client found with ET_COMPATIBLECLIENT of %x")) % m_byCompatibleClient); } #endif m_clientSoftString = CFormat(wxT("%s(%#x)")) % GetSoftName(m_clientSoft) % m_byCompatibleClient; } else { // If we step here, it might mean 2 things: // a eMule // a Compat Client that has sent no MuleInfo packet yet. m_clientSoft = SO_EMULE; m_clientSoftString = wxT("eMule"); } } // ADUNANZA BEGIN // Controllo se il client in oggetto: // - e' basato su aMule // - ha vecchia versione (!= 0x99) // - e' un client AdunanzA // - ha versione > 0xff // // Se TUTTE queste condizioni sono soddisfatte allora si tratta di aMule AdunanzA < 3.14b4 // quindi devo calcolare la versione di aMule su cui e' basato in modo diverso da come farebbe // aMule ufficiale. // if ((m_clientSoft == SO_AMULE) && (m_byEmuleVersion != 0x99) && IsAdunanzA() && m_nClientVersion > 0xff) { m_byEmuleVersion = 0x99; // in questo modo "devio" l'esecuzione saltare il codice riguardanti i client basati su aMule 1.x bAlternativeAmuleVersion = true; // per indicare che devo calcolare la ver di aMule in modo diverso dallo standard } // ADUNANZA END if (m_byEmuleVersion == 0) { m_nClientVersion = MAKE_CLIENT_VERSION(0,0,0); } else if (m_byEmuleVersion != 0x99) { uint32 nClientMinVersion = (m_byEmuleVersion >> 4)*10 + (m_byEmuleVersion & 0x0f); m_nClientVersion = MAKE_CLIENT_VERSION(0,nClientMinVersion,0); switch (m_clientSoft) { case SO_AMULE: m_clientVerString = CFormat(_("1.x (based on eMule v0.%u)")) % nClientMinVersion; break; case SO_LPHANT: m_clientVerString = wxT("< v0.05"); break; default: clientModString = GetClientModString(); m_clientVerString = CFormat(wxT("v0.%u")) % nClientMinVersion; break; } } else { // ADUNANZA BEGIN #if 0 uint32 nClientMajVersion = (m_nClientVersion >> 17) & 0x7f; uint32 nClientMinVersion = (m_nClientVersion >> 10) & 0x7f; uint32 nClientUpVersion = (m_nClientVersion >> 7) & 0x07; #else uint32 nClientMajVersion = 0; uint32 nClientMinVersion = 0; uint32 nClientUpVersion = 0; if (!bAlternativeAmuleVersion) { nClientMajVersion = (m_nClientVersion >> 17) & 0x7f; nClientMinVersion = (m_nClientVersion >> 10) & 0x7f; nClientUpVersion = (m_nClientVersion >> 7) & 0x07; } else { nClientMajVersion = m_nClientVersion / (100U * 10U * 100U); nClientMinVersion = m_nClientVersion / (100U * 10U) - (nClientMajVersion * 100U); nClientUpVersion = m_nClientVersion / 100U - (nClientMajVersion * 100U * 10U) - (nClientMinVersion * 10U); } #endif // ADUNANZA END m_nClientVersion = MAKE_CLIENT_VERSION(nClientMajVersion, nClientMinVersion, nClientUpVersion); switch (m_clientSoft) { case SO_AMULE: case SO_LXMULE: case SO_HYDRANODE: case SO_MLDONKEY: case SO_NEW_MLDONKEY: case SO_NEW2_MLDONKEY: // Kry - xMule started sending correct version tags on 1.9.1b. // It only took them 4 months, and being told by me and the // eMule+ developers, so I think they're slowly getting smarter. // They are based on our implementation, so we use the same format // for the version string. m_clientVerString = CFormat(wxT("v%u.%u.%u")) % nClientMajVersion % nClientMinVersion % nClientUpVersion; break; case SO_LPHANT: m_clientVerString = CFormat(wxT(" v%u.%.2u%c")) % (nClientMajVersion-1) % nClientMinVersion % ('a' + nClientUpVersion); break; case SO_EMULEPLUS: m_clientVerString = CFormat(wxT("v%u")) % nClientMajVersion; if(nClientMinVersion != 0) { m_clientVerString += CFormat(wxT(".%u")) % nClientMinVersion; } if(nClientUpVersion != 0) { m_clientVerString += CFormat(wxT("%c")) % ('a' + nClientUpVersion - 1); } break; default: clientModString = GetClientModString(); m_clientVerString = CFormat(wxT("v%u.%u%c")) % nClientMajVersion % nClientMinVersion % ('a' + nClientUpVersion); break; } } // ADUNANZA BEGIN // Stefano Picerno: Aggiungo alla versione del client i flag Adunanza / Fastweb uint32 aduResult = GetClientAduType(); if (!clientModString.IsEmpty()) { clientModString += wxT(" - "); } switch(aduResult) { case ADUNANZA_ICON_FW: /* Mr Hyde: Al momento non esiste piu' un controllo affidabile FIBRA/DLS, per ora, non stampando altro dopo Fastweb, tolgo il " - " clientModString += wxT("Fastweb - "); */ clientModString += wxT("Fastweb"); break; case ADUNANZA_ICON_ADU: { // Nella storia di AdunanzA ci sono stati un po' di cambiamenti vari sulla // MOD_STING (specialmente x colpa mia su aMule AdunanzA) // Per presentare sempre una stringa "omogenea" indipendentemente dal client // contattato ri-compongo la scritta da presentare // int theAduMaj = ADU_GET_MAJ(aduver); int theAduMin = ADU_GET_MIN(aduver); int theAduBeta = ADU_GET_B(aduver); if (theAduBeta != 0) { char theAduChar = 'b'; if ((theAduMaj == 3) && (theAduMin == 11) && (theAduBeta == 1)) theAduChar = 'c'; // m_strModVersion = wxString::Format(wxT("V%u.%u%c%u"), theAduMaj, theAduMin, theAduChar, theAduBeta); m_strModVersion = wxString::Format(wxT("AdunanzA V%u.%u%c%u"), theAduMaj, theAduMin, theAduChar, theAduBeta); } else { m_strModVersion = wxString::Format(wxT("AdunanzA V%u.%u"), theAduMaj, theAduMin); } clientModString = m_strModVersion; } break; default: // clientModString += GetClientModString(); break; } /* Mr Hyde: Al momento non esiste piu' un controllo affidabile FIBRA/DLS, per ora commento if (aduResult != ADUNANZA_ICON_NONE) { if (IsFastwebFiber()) // Mr Hyde ADUFLAGS 20080201 clientModString += _(" Fibra"); else clientModString += _(" DSL"); // SetClientFWCity(); Mr Hyde ADUFLAGS } */ // Fine // ADUNANZA END } else if (m_bIsHybrid) { // seen: // 105010 50.10 // 10501 50.1 // 1051 51.0 // 501 50.1 m_clientSoft = SO_EDONKEYHYBRID; m_clientSoftString = GetSoftName(m_clientSoft); uint32 nClientMajVersion; uint32 nClientMinVersion; uint32 nClientUpVersion; if (m_nClientVersion > 100000) { uint32 uMaj = m_nClientVersion/100000; nClientMajVersion = uMaj - 1; nClientMinVersion = (m_nClientVersion - uMaj*100000) / 100; nClientUpVersion = m_nClientVersion % 100; } else if (m_nClientVersion > 10000) { uint32 uMaj = m_nClientVersion/10000; nClientMajVersion = uMaj - 1; nClientMinVersion = (m_nClientVersion - uMaj*10000) / 10; nClientUpVersion = m_nClientVersion % 10; } else if (m_nClientVersion > 1000) { uint32 uMaj = m_nClientVersion/1000; nClientMajVersion = uMaj - 1; nClientMinVersion = m_nClientVersion - uMaj*1000; nClientUpVersion = 0; } else if (m_nClientVersion > 100) { uint32 uMin = m_nClientVersion/10; nClientMajVersion = 0; nClientMinVersion = uMin; nClientUpVersion = m_nClientVersion - uMin*10; } else{ nClientMajVersion = 0; nClientMinVersion = m_nClientVersion; nClientUpVersion = 0; } m_nClientVersion = MAKE_CLIENT_VERSION(nClientMajVersion, nClientMinVersion, nClientUpVersion); if (nClientUpVersion) { m_clientVerString = CFormat(wxT("v%u.%u.%u")) % nClientMajVersion % nClientMinVersion % nClientUpVersion; } else { m_clientVerString = CFormat(wxT("v%u.%u")) % nClientMajVersion % nClientMinVersion; } } else if (m_bIsML || (iHashType == SO_MLDONKEY)) { m_clientSoft = SO_MLDONKEY; m_clientSoftString = GetSoftName(m_clientSoft); uint32 nClientMinVersion = m_nClientVersion; m_nClientVersion = MAKE_CLIENT_VERSION(0, nClientMinVersion, 0); m_clientVerString = CFormat(wxT("v0.%u")) % nClientMinVersion; } else if (iHashType == SO_OLDEMULE) { m_clientSoft = SO_OLDEMULE; m_clientSoftString = GetSoftName(m_clientSoft); uint32 nClientMinVersion = m_nClientVersion; m_nClientVersion = MAKE_CLIENT_VERSION(0, nClientMinVersion, 0); m_clientVerString = CFormat(wxT("v0.%u")) % nClientMinVersion; } else { m_clientSoft = SO_EDONKEY; m_clientSoftString = GetSoftName(m_clientSoft); m_nClientVersion *= 10; m_clientVerString = CFormat(wxT("v%u.%u")) % (m_nClientVersion / 100000) % ((m_nClientVersion / 1000) % 100); } m_clientVersionString = m_clientVerString; if (!clientModString.IsEmpty()) { m_clientVerString += wxT(" - ") + clientModString; } m_fullClientVerString = m_clientSoftString + wxT(" ") + m_clientVerString; UpdateStats(); } void CUpDownClient::RequestSharedFileList() { if (m_iFileListRequested == 0) { AddDebugLogLineN( logClient, wxString( wxT("Requesting shared files from ") ) + GetUserName() ); m_iFileListRequested = 1; TryToConnect(true); } else { AddDebugLogLineN( logClient, CFormat( wxT("Requesting shared files from user %s (%u) is already in progress") ) % GetUserName() % GetUserIDHybrid() ); } } void CUpDownClient::ProcessSharedFileList(const byte* pachPacket, uint32 nSize, wxString& pszDirectory) { if (m_iFileListRequested > 0) { m_iFileListRequested--; theApp->searchlist->ProcessSharedFileList(pachPacket, nSize, this, NULL, pszDirectory); } } void CUpDownClient::ResetFileStatusInfo() { m_nPartCount = 0; if ( m_reqfile ) { m_reqfile->UpdatePartsFrequency( this, false ); } m_downPartStatus.clear(); m_clientFilename.Clear(); m_bCompleteSource = false; m_dwLastAskedTime = 0; m_iRating = 0; m_strComment.Clear(); if (m_pReqFileAICHHash != NULL) { delete m_pReqFileAICHHash; m_pReqFileAICHHash = NULL; } } wxString CUpDownClient::GetUploadFileInfo() { // build info text and display it wxString sRet; sRet = (CFormat(_("NickName: %s ID: %u")) % GetUserName() % GetUserIDHybrid()) + wxT(" "); if (m_reqfile) { sRet += CFormat(_("Requested: %s\n")) % m_reqfile->GetFileName(); sRet += CFormat( wxPLURAL("Filestats for this session: Accepted %d of %d request, %s transferred\n", "Filestats for this session: Accepted %d of %d requests, %s transferred\n", m_reqfile->statistic.GetRequests()) ) % m_reqfile->statistic.GetAccepts() % m_reqfile->statistic.GetRequests() % CastItoXBytes(m_reqfile->statistic.GetTransferred()); sRet += CFormat( wxPLURAL("Filestats for all sessions: Accepted %d of %d request, %s transferred\n", "Filestats for all sessions: Accepted %d of %d requests, %s transferred\n", m_reqfile->statistic.GetAllTimeRequests()) ) % m_reqfile->statistic.GetAllTimeAccepts() % m_reqfile->statistic.GetAllTimeRequests() % CastItoXBytes(m_reqfile->statistic.GetAllTimeTransferred()); } else { sRet += _("Requested unknown file"); } return sRet; } // sends a packet, if needed it will establish a connection before // options used: ignore max connections, control packet, delete packet // !if the functions returns false it is _possible_ that this clientobject was deleted, because the connectiontry fails bool CUpDownClient::SafeSendPacket(CPacket* packet) { if (IsConnected()) { SendPacket(packet, true); return true; } else { m_WaitingPackets_list.push_back(packet); return TryToConnect(true); } } void CUpDownClient::SendPublicKeyPacket(){ // send our public key to the client who requested it if (m_socket == NULL || credits == NULL || m_SecureIdentState != IS_KEYANDSIGNEEDED){ wxFAIL; return; } if (!theApp->CryptoAvailable()) return; CMemFile data; data.WriteUInt8(theApp->clientcredits->GetPubKeyLen()); data.Write(theApp->clientcredits->GetPublicKey(), theApp->clientcredits->GetPubKeyLen()); CPacket* packet = new CPacket(data, OP_EMULEPROT, OP_PUBLICKEY); theStats::AddUpOverheadOther(packet->GetPacketSize()); AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_PUBLICKEY to ") + GetFullIP() ); SendPacket(packet,true,true); m_SecureIdentState = IS_SIGNATURENEEDED; } void CUpDownClient::SendSignaturePacket(){ // signate the public key of this client and send it if (m_socket == NULL || credits == NULL || m_SecureIdentState == 0){ wxFAIL; return; } if (!theApp->CryptoAvailable()) { return; } if (credits->GetSecIDKeyLen() == 0) { return; // We don't have his public key yet, will be back here later } // do we have a challenge value received (actually we should if we are in this function) if (credits->m_dwCryptRndChallengeFrom == 0){ AddDebugLogLineN( logClient, wxString(wxT("Want to send signature but challenge value is invalid - User ")) + GetUserName()); return; } // v2 // we will use v1 as default, except if only v2 is supported bool bUseV2; if ( (m_bySupportSecIdent&1) == 1 ) bUseV2 = false; else bUseV2 = true; uint8 byChaIPKind = 0; uint32 ChallengeIP = 0; if (bUseV2){ // ADUNANZA BEGIN #if 0 if (::IsLowID(theApp->GetED2KID())) { #endif uint32 clientid = (IsFastweb() ? theApp->GetID() : theApp->GetED2KID()); // ADUFLAGS Mr Hyde 20080201 if (::IsLowID(clientid)) { // ADUNANZA END // we cannot do not know for sure our public ip, so use the remote clients one ChallengeIP = GetIP(); byChaIPKind = CRYPT_CIP_REMOTECLIENT; } else { // ADUNANZA BEGIN #if 0 ChallengeIP = theApp->GetED2KID(); #endif ChallengeIP = clientid; // ADUNANZA END byChaIPKind = CRYPT_CIP_LOCALCLIENT; } } //end v2 byte achBuffer[250]; uint8 siglen = theApp->clientcredits->CreateSignature(credits, achBuffer, 250, ChallengeIP, byChaIPKind ); if (siglen == 0){ wxFAIL; return; } CMemFile data; data.WriteUInt8(siglen); data.Write(achBuffer, siglen); if (bUseV2) { data.WriteUInt8(byChaIPKind); } CPacket* packet = new CPacket(data, OP_EMULEPROT, OP_SIGNATURE); theStats::AddUpOverheadOther(packet->GetPacketSize()); AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_SIGNATURE to ") + GetFullIP() ); SendPacket(packet,true,true); m_SecureIdentState = IS_ALLREQUESTSSEND; } void CUpDownClient::ProcessPublicKeyPacket(const byte* pachPacket, uint32 nSize) { theApp->clientlist->AddTrackClient(this); if (m_socket == NULL || credits == NULL || pachPacket[0] != nSize-1 || nSize == 0 || nSize > 250){ wxFAIL; return; } if (!theApp->CryptoAvailable()) return; // the function will handle everything (mulitple key etc) if (credits->SetSecureIdent(pachPacket+1, pachPacket[0])){ // if this client wants a signature, now we can send him one if (m_SecureIdentState == IS_SIGNATURENEEDED){ SendSignaturePacket(); } else if (m_SecureIdentState == IS_KEYANDSIGNEEDED) { // something is wrong AddDebugLogLineN( logClient, wxT("Invalid State error: IS_KEYANDSIGNEEDED in ProcessPublicKeyPacket") ); } } else { AddDebugLogLineN( logClient, wxT("Failed to use new received public key") ); } } void CUpDownClient::ProcessSignaturePacket(const byte* pachPacket, uint32 nSize) { // here we spread the good guys from the bad ones ;) if (m_socket == NULL || credits == NULL || nSize == 0 || nSize > 250){ wxFAIL; return; } uint8 byChaIPKind; if (pachPacket[0] == nSize-1) byChaIPKind = 0; else if (pachPacket[0] == nSize-2 && (m_bySupportSecIdent & 2) > 0) //v2 byChaIPKind = pachPacket[nSize-1]; else{ wxFAIL; return; } if (!theApp->CryptoAvailable()) return; // we accept only one signature per IP, to avoid floods which need a lot cpu time for cryptfunctions if (m_dwLastSignatureIP == GetIP()){ AddDebugLogLineN( logClient, wxT("received multiple signatures from one client") ); return; } // also make sure this client has a public key if (credits->GetSecIDKeyLen() == 0){ AddDebugLogLineN( logClient, wxT("received signature for client without public key") ); return; } // and one more check: did we ask for a signature and sent a challange packet? if (credits->m_dwCryptRndChallengeFor == 0){ AddDebugLogLineN( logClient, wxT("received signature for client with invalid challenge value - User ") + GetUserName() ); return; } if (theApp->clientcredits->VerifyIdent(credits, pachPacket+1, pachPacket[0], GetIP(), byChaIPKind ) ) { // result is saved in function above AddDebugLogLineN( logClient, CFormat( wxT("'%s' has passed the secure identification, V2 State: %i") ) % GetUserName() % byChaIPKind ); } else { AddDebugLogLineN( logClient, CFormat( wxT("'%s' has failed the secure identification, V2 State: %i") ) % GetUserName() % byChaIPKind ); } m_dwLastSignatureIP = GetIP(); // ADUNANZA BEGIN // Da verificare con client Windows ma secondo me da togliere // a causa del meccanismo del SendOSInfo in SendMuleInfoPacket di aMule ufficiale // SendMuleInfoPacket(false); // // la seg. variabile invece non e' mai usata // sentadu = true; // ADUNANZA END } void CUpDownClient::SendSecIdentStatePacket(){ // check if we need public key and signature uint8 nValue = 0; if (credits){ if (theApp->CryptoAvailable()){ if (credits->GetSecIDKeyLen() == 0) { nValue = IS_KEYANDSIGNEEDED; } else if (m_dwLastSignatureIP != GetIP()) { nValue = IS_SIGNATURENEEDED; } } if (nValue == 0){ AddDebugLogLineN( logClient, wxT("Not sending SecIdentState Packet, because State is Zero") ); return; } // crypt: send random data to sign uint32 dwRandom = rand()+1; credits->m_dwCryptRndChallengeFor = dwRandom; CMemFile data; data.WriteUInt8(nValue); data.WriteUInt32(dwRandom); CPacket* packet = new CPacket(data, OP_EMULEPROT, OP_SECIDENTSTATE); theStats::AddUpOverheadOther(packet->GetPacketSize()); AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_SECIDENTSTATE to ") + GetFullIP() ); SendPacket(packet,true,true); } else { wxFAIL; } } void CUpDownClient::ProcessSecIdentStatePacket(const byte* pachPacket, uint32 nSize) { if ( nSize != 5 ) { return; } if ( !credits ) { wxASSERT( credits ); return; } CMemFile data(pachPacket,nSize); switch ( data.ReadUInt8() ) { case 0: m_SecureIdentState = IS_UNAVAILABLE; break; case 1: m_SecureIdentState = IS_SIGNATURENEEDED; break; case 2: m_SecureIdentState = IS_KEYANDSIGNEEDED; break; default: return; } credits->m_dwCryptRndChallengeFrom = data.ReadUInt32(); } void CUpDownClient::InfoPacketsReceived() { // indicates that both Information Packets has been received // needed for actions, which process data from both packets wxASSERT ( m_byInfopacketsReceived == IP_BOTH ); m_byInfopacketsReceived = IP_NONE; if (m_bySupportSecIdent){ SendSecIdentStatePacket(); } } bool CUpDownClient::CheckHandshakeFinished() const { if (m_bHelloAnswerPending) { // this triggers way too often.. need more time to look at this -> only create a warning // The reason for this is that 2 clients are connecting to each other at the same time.. AddDebugLogLineN( logClient, wxT("Handshake not finished while processing packet.") ); return false; } return true; } // ADUNANZA BEGIN // Backport #ifdef __DEBUG__ // ADUNANZA END wxString CUpDownClient::GetClientFullInfo() { if (m_clientVerString.IsEmpty()) { ReGetClientSoft(); } return CFormat( wxT("Client %s on IP:Port %s:%d using %s %s %s") ) % ( m_Username.IsEmpty() ? wxString(_("Unknown")) : m_Username ) % GetFullIP() % GetUserPort() % m_clientSoftString % m_clientVerString % m_strModVersion; } // ADUNANZA BEGIN // Backport #endif // ADUNANZA END wxString CUpDownClient::GetClientShortInfo() { if (m_clientVerString.IsEmpty()) { ReGetClientSoft(); } return CFormat( wxT("'%s' (%s %s %s)") ) % ( m_Username.IsEmpty() ? wxString(_("Unknown")) : m_Username ) % m_clientSoftString % m_clientVerString % m_strModVersion; } void CUpDownClient::SendPublicIPRequest() { if (IsConnected()){ CPacket* packet = new CPacket(OP_PUBLICIP_REQ,0,OP_EMULEPROT); theStats::AddUpOverheadOther(packet->GetPacketSize()); AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_PUBLICIP_REQ to ") + GetFullIP()); SendPacket(packet,true); m_fNeedOurPublicIP = true; } } void CUpDownClient::ProcessPublicIPAnswer(const byte* pbyData, uint32 uSize) { if (uSize != 4) { throw wxString(wxT("Wrong Packet size on Public IP answer")); } uint32 dwIP = PeekUInt32(pbyData); if (m_fNeedOurPublicIP == true){ // did we? m_fNeedOurPublicIP = false; // Ignore local ip on GetPublicIP (could be wrong) if (theApp->GetPublicIP(true) == 0 && !IsLowID(dwIP) ) { theApp->SetPublicIP(dwIP); } } } bool CUpDownClient::IsConnected() const { return m_socket && m_socket->IsConnected(); } // ADUNANZA BEGIN // Stefano Picerno: aggiunto il parametro actualPayloadSize (e' necessario passarlo al socket #if 0 bool CUpDownClient::SendPacket(CPacket* packet, bool delpacket, bool controlpacket) #else bool CUpDownClient::SendPacket(CPacket* packet, bool delpacket, bool controlpacket, uint32 actualPayloadSize ) #endif // ADUNANZA END { if ( m_socket ) { // ADUNANZA BEGIN #if 0 m_socket->SendPacket(packet, delpacket, controlpacket ); #else m_socket->SendPacket(packet, delpacket, controlpacket, actualPayloadSize ); #endif // ADUNANZA END return true; } else { AddLogLineN(wxT("CAUGHT DEAD SOCKET IN SENDPACKET()")); return false; } } float CUpDownClient::SetDownloadLimit(uint32 reducedownload) { // lfroen: in daemon it actually can happen wxASSERT( m_socket ); float kBpsClient = CalculateKBpsDown(); if ( m_socket ) { if (reducedownload) { // (% to reduce * current speed) / 100 and THEN, / (1000 / CORE_TIMER_PERIOD) // which is how often it is called per second. uint32 limit = (uint32)(reducedownload * kBpsClient * 1024.0 / 100000.0 * CORE_TIMER_PERIOD); if(limit<1024 && reducedownload >= 200) { // If we're going up and this download is < 1kB, // we want it to go up fast. Can be reduced later, // and it'll probably be in a more fair way with // other downloads that are faster. limit +=1024; } else if(limit == 0) { // This download is not transferring yet... make it // 1024 so we don't fill the TCP stack and lose the // connection. limit = 1024; } m_socket->SetDownloadLimit(limit); } else { m_socket->DisableDownloadLimit(); } } else { AddLogLineNS(CFormat(wxT("CAUGHT DEAD SOCKET IN SETDOWNLOADLIMIT() WITH SPEED %f")) % kBpsClient); } return kBpsClient; } void CUpDownClient::SetUserIDHybrid(uint32 nUserID) { theApp->clientlist->UpdateClientID( this, nUserID ); m_nUserIDHybrid = nUserID; } void CUpDownClient::SetIP( uint32 val ) { theApp->clientlist->UpdateClientIP( this, val ); m_dwUserIP = val; // ADUNANZA BEGIN // ADUFLAGS Mr Hyde 20080201 begin UpdateFastwebFlags(); // aggiorna m_bIsFastweb, m_bIsFastwebFiber e mette m_bIsAdunanzA a false // ADUFLAGS Mr Hyde 20080201 end // ADUNANZA END m_nConnectIP = val; m_FullUserIP = val; } void CUpDownClient::SetUserHash(const CMD4Hash& userhash) { theApp->clientlist->UpdateClientHash( this, userhash ); m_UserHash = userhash; ValidateHash(); } EUtf8Str CUpDownClient::GetUnicodeSupport() const { return m_bUnicodeSupport ? utf8strRaw : utf8strNone; } void CUpDownClient::SetSpammer(bool bVal) { if (bVal) { Ban(); } else if (IsBanned() && m_fIsSpammer) { UnBan(); } m_fIsSpammer = bVal; } uint8 CUpDownClient::GetSecureIdentState() { if (m_SecureIdentState != IS_UNAVAILABLE) { if (!SecIdentSupRec) { // This can be caused by a 0.30x based client which sends the old // style Hello packet, and the mule info packet, but between them they // send a secure ident state packet (after a hello but before we have // the SUI capabilities). This is a misbehaving client, and somehow I // feel like it should be dropped. But then again, it won't harm to use // this SUI state if they are reporting no SUI (won't be used) and if // they report using SUI on the mule info packet, it's ok to use it. AddDebugLogLineN(logClient, wxT("A client sent secure ident state before telling us the SUI capabilities")); AddDebugLogLineN(logClient, wxT("Client info: ") + GetClientFullInfo()); AddDebugLogLineN(logClient, wxT("This client won't be disconnected, but it should be. :P")); } } return m_SecureIdentState; } bool CUpDownClient::SendChatMessage(const wxString& message) { if (GetChatCaptchaState() == CA_CAPTCHARECV) { m_nChatCaptchaState = CA_SOLUTIONSENT; } else if (GetChatCaptchaState() == CA_SOLUTIONSENT) { wxFAIL; // we responsed to a captcha but didn't heard from the client afterwards - hopefully its just lag and this message will get through } else { m_nChatCaptchaState = CA_ACCEPTING; } SetSpammer(false); IncMessagesSent(); // Already connecting? if (GetChatState() == MS_CONNECTING) { // Queue all messages till we're able to send them (or discard them) if (!m_pendingMessage.IsEmpty()) { m_pendingMessage += wxT("\n"); } else { // There must be a message to send // - except if we got disconnected. No need to assert therefore. } m_pendingMessage += message; return false; } if (IsConnected()) { // If we are already connected when we send the first message, // we have to update the chat status. SetChatState(MS_CHATTING); CMemFile data; data.WriteString(message, GetUnicodeSupport()); CPacket* packet = new CPacket(data, OP_EDONKEYPROT, OP_MESSAGE); theStats::AddUpOverheadOther(packet->GetPacketSize()); AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_MESSAGE to ") + GetFullIP()); SendPacket(packet, true, true); return true; } else { m_pendingMessage = message; SetChatState(MS_CONNECTING); // True to ignore "Too Many Connections" TryToConnect(true); return false; } } /* Kad stuff */ void CUpDownClient::SetBuddyID(const byte* pucBuddyID) { if( pucBuddyID == NULL ){ md4clr(m_achBuddyID); m_bBuddyIDValid = false; return; } m_bBuddyIDValid = true; md4cpy(m_achBuddyID, pucBuddyID); } // Kad added by me bool CUpDownClient::SendBuddyPing() { SetLastBuddyPingPongTime(); CPacket* buddyPing = new CPacket(OP_BUDDYPING, 0, OP_EMULEPROT); theStats::AddUpOverheadKad(buddyPing->GetPacketSize()); AddDebugLogLineN(logLocalClient,wxT("Local Client: OP_BUDDYPING to ") + GetFullIP()); return SafeSendPacket(buddyPing); } /* Statistics */ void CUpDownClient::UpdateStats() { if (m_lastClientSoft != m_clientSoft || m_lastClientVersion != m_nClientVersion || m_lastOSInfo != m_sClientOSInfo) { if (m_lastClientSoft == SO_UNKNOWN) { theStats::RemoveUnknownClient(); } else if (m_lastClientSoft != (uint32)(-1)) { theStats::RemoveKnownClient(m_lastClientSoft, m_lastClientVersion, m_lastOSInfo); } m_lastClientSoft = m_clientSoft; m_lastClientVersion = m_nClientVersion; m_lastOSInfo = m_sClientOSInfo; if (m_clientSoft == SO_UNKNOWN) { theStats::AddUnknownClient(); } else { theStats::AddKnownClient(this); } } } bool CUpDownClient::IsIdentified() const { return (credits && credits->GetCurrentIdentState(GetIP()) == IS_IDENTIFIED); } bool CUpDownClient::IsBadGuy() const { return (credits && credits->GetCurrentIdentState(GetIP()) == IS_IDBADGUY); } bool CUpDownClient::SUIFailed() const { return (credits && credits->GetCurrentIdentState(GetIP()) == IS_IDFAILED); } bool CUpDownClient::SUINeeded() const { return (credits && credits->GetCurrentIdentState(GetIP()) == IS_IDNEEDED); } bool CUpDownClient::SUINotSupported() const { return (credits && credits->GetCurrentIdentState(GetIP()) == IS_NOTAVAILABLE); } uint64 CUpDownClient::GetDownloadedTotal() const { return credits ? credits->GetDownloadedTotal() : 0; } uint64 CUpDownClient::GetUploadedTotal() const { return credits ? credits->GetUploadedTotal() : 0; } double CUpDownClient::GetScoreRatio() const { return credits ? credits->GetScoreRatio(GetIP(), theApp->CryptoAvailable()) : 0; } const wxString CUpDownClient::GetServerName() const { wxString ret; wxString srvaddr = Uint32toStringIP(GetServerIP()); CServer* cserver = theApp->serverlist->GetServerByAddress( srvaddr, GetServerPort()); if (cserver) { ret = cserver->GetListName(); } else { ret = _("Unknown"); } return ret; } bool CUpDownClient::ShouldReceiveCryptUDPPackets() const { return (thePrefs::IsClientCryptLayerSupported() && SupportsCryptLayer() && theApp->GetPublicIP() != 0 && HasValidHash() && (thePrefs::IsClientCryptLayerRequested() || RequestsCryptLayer()) ); } #ifdef AMULE_DAEMON void CUpDownClient::ProcessCaptchaRequest(CMemFile* WXUNUSED(data)) {} void CUpDownClient::ProcessCaptchaReqRes(uint8 WXUNUSED(nStatus)) {} void CUpDownClient::ProcessChatMessage(const wxString WXUNUSED(message)) {} #else void CUpDownClient::ProcessCaptchaRequest(CMemFile* data) { uint64 id = GUI_ID(GetIP(),GetUserPort()); // received a captcha request, check if we actually accept it (only after sending a message ourself to this client) if (GetChatCaptchaState() == CA_ACCEPTING && GetChatState() != MS_NONE && theApp->amuledlg->m_chatwnd->IsIdValid(id)) { // read tags (for future use) uint8 nTagCount = data->ReadUInt8(); if (nTagCount) { AddDebugLogLineN(logClient, CFormat(wxT("Received captcha request from client (%s) with (%u) tags")) % GetFullIP() % nTagCount); // and ignore them for now for (uint32 i = 0; i < nTagCount; i++) { CTag tag(*data, true); } } // sanitize checks - we want a small captcha not a wallpaper uint32 nSize = (uint32)(data->GetLength() - data->GetPosition()); if ( nSize > 128 && nSize < 4096 ) { uint64 pos = data->GetPosition(); wxMemoryInputStream memstr(data->GetRawBuffer() + pos, nSize); wxImage imgCaptcha(memstr, wxBITMAP_TYPE_BMP); if (imgCaptcha.IsOk() && imgCaptcha.GetHeight() > 10 && imgCaptcha.GetHeight() < 50 && imgCaptcha.GetWidth() > 10 && imgCaptcha.GetWidth() < 150 ) { m_nChatCaptchaState = CA_CAPTCHARECV; CCaptchaDialog * dialog = new CCaptchaDialog(theApp->amuledlg, imgCaptcha, id); dialog->Show(); } else { AddDebugLogLineN(logClient, CFormat(wxT("Received captcha request from client, processing image failed or invalid pixel size (%s)")) % GetFullIP()); } } else { AddDebugLogLineN(logClient, CFormat(wxT("Received captcha request from client, size sanitize check failed (%u) (%s)")) % nSize % GetFullIP()); } } else { AddDebugLogLineN(logClient, CFormat(wxT("Received captcha request from client, but don't accepting it at this time (%s)")) % GetFullIP()); } } void CUpDownClient::ProcessCaptchaReqRes(uint8 nStatus) { uint64 id = GUI_ID(GetIP(),GetUserPort()); if (GetChatCaptchaState() == CA_SOLUTIONSENT && GetChatState() != MS_NONE && theApp->amuledlg->m_chatwnd->IsIdValid(id)) { wxASSERT( nStatus < 3 ); m_nChatCaptchaState = CA_NONE; theApp->amuledlg->m_chatwnd->ShowCaptchaResult(id, nStatus == 0); } else { m_nChatCaptchaState = CA_NONE; AddDebugLogLineN(logClient, CFormat(wxT("Received captcha result from client, but not accepting it at this time (%s)")) % GetFullIP()); } } void CUpDownClient::ProcessChatMessage(wxString message) { if (IsMessageFiltered(message)) { AddLogLineC(CFormat(_("Message filtered from '%s' (IP:%s)")) % GetUserName() % GetFullIP()); return; } // advanced spamfilter check if (thePrefs::IsChatCaptchaEnabled() && !IsFriend()) { // captcha checks outrank any further checks - if the captcha has been solved, we assume it's not spam // first check if we need to send a captcha request to this client if (GetMessagesSent() == 0 && GetMessagesReceived() == 0 && GetChatCaptchaState() != CA_CAPTCHASOLVED) { // we have never sent a message to this client, and no message from him has ever passed our filters if (GetChatCaptchaState() != CA_CHALLENGESENT) { // we also aren't currently expecting a captcha response if (m_fSupportsCaptcha) { // and he supports captcha, so send him one and store the message (without showing for now) if (m_cCaptchasSent < 3) { // no more than 3 tries m_strCaptchaPendingMsg = message; wxMemoryOutputStream memstr; memstr.PutC(0); // no tags, for future use CCaptchaGenerator captcha(4); if (captcha.WriteCaptchaImage(memstr)){ m_strCaptchaChallenge = captcha.GetCaptchaText(); m_nChatCaptchaState = CA_CHALLENGESENT; m_cCaptchasSent++; CMemFile fileAnswer((byte*) memstr.GetOutputStreamBuffer()->GetBufferStart(), memstr.GetLength()); CPacket* packet = new CPacket(fileAnswer, OP_EMULEPROT, OP_CHATCAPTCHAREQ); theStats::AddUpOverheadOther(packet->GetPacketSize()); AddLogLineN(CFormat(wxT("sent Captcha %s (%d)")) % m_strCaptchaChallenge % packet->GetPacketSize()); SafeSendPacket(packet); } else { wxFAIL; } } } else { // client doesn't support captchas, but we require them, tell him that it's not going to work out // with an answer message (will not be shown and doesn't count as sent message) if (m_cCaptchasSent < 1) { // don't send this notifier more than once m_cCaptchasSent++; // always sent in english SendChatMessage(wxT("In order to avoid spam messages, this user requires you to solve a captcha before you can send a message to him. However your client does not supports captchas, so you will not be able to chat with this user.")); AddDebugLogLineN(logClient, CFormat(wxT("Received message from client not supporting captchas, filtered and sent notifier (%s)")) % GetClientFullInfo()); } else { AddDebugLogLineN(logClient, CFormat(wxT("Received message from client not supporting captchas, filtered, didn't send notifier (%s)")) % GetClientFullInfo()); } } return; } else { // (GetChatCaptchaState() == CA_CHALLENGESENT) // this message must be the answer to the captcha request we sent him, let's verify wxASSERT( !m_strCaptchaChallenge.IsEmpty() ); if (m_strCaptchaChallenge.CmpNoCase(message.Trim().Right(std::min(message.Length(), m_strCaptchaChallenge.Length()))) == 0) { // allright AddDebugLogLineN(logClient, CFormat(wxT("Captcha solved, showing withheld message (%s)")) % GetClientFullInfo()); m_nChatCaptchaState = CA_CAPTCHASOLVED; // this state isn't persitent, but the messagecounter will be used to determine later if the captcha has been solved // replace captchaanswer with withheld message and show it message = m_strCaptchaPendingMsg; m_cCaptchasSent = 0; m_strCaptchaChallenge.Clear(); CPacket* packet = new CPacket(OP_CHATCAPTCHARES, 1, OP_EMULEPROT, false); byte statusResponse = 0; // status response packet->CopyToDataBuffer(0, &statusResponse, 1); theStats::AddUpOverheadOther(packet->GetPacketSize()); SafeSendPacket(packet); } else { // wrong, cleanup and ignore AddDebugLogLineN(logClient, CFormat(wxT("Captcha answer failed (%s)")) % GetClientFullInfo()); m_nChatCaptchaState = CA_NONE; m_strCaptchaChallenge.Clear(); m_strCaptchaPendingMsg.Clear(); CPacket* packet = new CPacket(OP_CHATCAPTCHARES, 1, OP_EMULEPROT, false); byte statusResponse = (m_cCaptchasSent < 3) ? 1 : 2; // status response packet->CopyToDataBuffer(0, &statusResponse, 1); theStats::AddUpOverheadOther(packet->GetPacketSize()); SafeSendPacket(packet); return; // nothing more todo } } } } if (thePrefs::IsAdvancedSpamfilterEnabled() && !IsFriend()) { // friends are never spammer... (but what if two spammers are friends :P ) bool bIsSpam = false; if (m_fIsSpammer) { bIsSpam = true; } else { // first fixed criteria: If a client sends me an URL in his first message before I respond to him // there is a 99,9% chance that it is some poor guy advising his leech mod, or selling you .. well you know :P if (GetMessagesSent() == 0) { static wxArrayString urlindicators(wxStringTokenize(wxT("http:|www.|.de |.net |.com |.org |.to |.tk |.cc |.fr |ftp:|ed2k:|https:|ftp.|.info|.biz|.uk|.eu|.es|.tv|.cn|.tw|.ws|.nu|.jp"), wxT("|"))); for (size_t pos = urlindicators.GetCount(); pos--;) { if (message.Find(urlindicators[pos]) != wxNOT_FOUND) { bIsSpam = true; break; } } // second fixed criteria: he sent me 4 or more messages and I didn't answer him once if (GetMessagesReceived() > 3) { bIsSpam = true; } } } if (bIsSpam) { AddDebugLogLineN(logClient, CFormat(wxT("'%s' has been marked as spammer")) % GetUserName()); SetSpammer(true); theApp->amuledlg->m_chatwnd->EndSession(GUI_ID(GetIP(),GetUserPort())); return; } } wxString logMsg = CFormat(_("New message from '%s' (IP:%s)")) % GetUserName() % GetFullIP(); if(thePrefs::ShowMessagesInLog()) { logMsg += wxT(": ") + message; } AddLogLineC(logMsg); IncMessagesReceived(); Notify_ChatProcessMsg(GUI_ID(GetIP(), GetUserPort()), GetUserName() + wxT("|") + message); } bool CUpDownClient::IsMessageFiltered(const wxString& message) { bool filtered = false; // If we're chatting to the guy, we don't want to filter! if (GetChatState() != MS_CHATTING) { if (thePrefs::MsgOnlyFriends() && !IsFriend()) { filtered = true; } else if (thePrefs::MsgOnlySecure() && GetUserName().IsEmpty() ) { filtered = true; } else if (thePrefs::MustFilterMessages()) { filtered = thePrefs::IsMessageFiltered(message); } } if (filtered) { SetSpammer(true); } return filtered; } #endif void CUpDownClient::SendSharedDirectories() { // This list will contain all (unique) folders. PathList foldersToSend; // The shared folders const unsigned folderCount = theApp->glob_prefs->shareddir_list.size(); for (unsigned i = 0; i < folderCount; ++i) { foldersToSend.push_back(theApp->glob_prefs->shareddir_list[i]); } // ... the categories folders ... (category 0 -> incoming) for (unsigned i = 0; i < theApp->glob_prefs->GetCatCount(); ++i) { foldersToSend.push_back(theApp->glob_prefs->GetCategory(i)->path); } // Strip duplicates foldersToSend.sort(); foldersToSend.unique(); // Build packet CMemFile tempfile(80); // ADUNANZA BEGIN // Backport da aMule SVN #if 0 tempfile.WriteUInt32(foldersToSend.size()); #else tempfile.WriteUInt32(foldersToSend.size() + 1); // +1 for the incomplete files #endif // ADUNANZA END PathList::iterator it = foldersToSend.begin(); for (; it != foldersToSend.end(); ++it) { // Note: the public shared name contains the 'raw' path, so we can recognize it again. // the 'raw' path is determined using CPath::GetRaw() tempfile.WriteString( theApp->sharedfiles->GetPublicSharedDirName(*it), GetUnicodeSupport() ); } // ... and the Magic thing from the eDonkey Hybrids... tempfile.WriteString(OP_INCOMPLETE_SHARED_FILES, GetUnicodeSupport()); // Send the packet. CPacket* replypacket = new CPacket(tempfile, OP_EDONKEYPROT, OP_ASKSHAREDDIRSANS); theStats::AddUpOverheadOther(replypacket->GetPacketSize()); AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_ASKSHAREDDIRSANS to ") + GetFullIP() ); SendPacket(replypacket, true, true); } void CUpDownClient::SendSharedFilesOfDirectory(const wxString& strReqDir) { CKnownFilePtrList list; if (strReqDir == OP_INCOMPLETE_SHARED_FILES) { // get all shared files from download queue int iQueuedFiles = theApp->downloadqueue->GetFileCount(); for (int i = 0; i < iQueuedFiles; i++) { CPartFile* pFile = theApp->downloadqueue->GetFileByIndex(i); if (pFile == NULL || pFile->GetStatus(true) != PS_READY) { continue; } list.push_back(pFile); } } else { // get all shared files for the requested directory const CPath *sharedDir = theApp->sharedfiles->GetDirForPublicSharedDirName(strReqDir); if (sharedDir) { theApp->sharedfiles->GetSharedFilesByDirectory(sharedDir->GetRaw(), list); } else { AddLogLineC(CFormat(_("User %s (%u) requested sharedfiles-list for not existing directory '%s' -> Ignored")) % GetUserName() % GetUserIDHybrid() % strReqDir); } } CMemFile tempfile(80); tempfile.WriteString(strReqDir, GetUnicodeSupport()); tempfile.WriteUInt32(list.size()); while (!list.empty()) { if (!list.front()->IsLargeFile() || SupportsLargeFiles()) { list.front()->CreateOfferedFilePacket(&tempfile, NULL, this); } list.pop_front(); } CPacket* replypacket = new CPacket(tempfile, OP_EDONKEYPROT, OP_ASKSHAREDFILESDIRANS); theStats::AddUpOverheadOther(replypacket->GetPacketSize()); AddDebugLogLineN( logLocalClient, wxT("Local Client: OP_ASKSHAREDFILESDIRANS to ") + GetFullIP() ); SendPacket(replypacket, true, true); } void CUpDownClient::SendFirewallCheckUDPRequest() { wxASSERT(GetKadState() == KS_FWCHECK_UDP); if (!Kademlia::CKademlia::IsRunning()) { SetKadState(KS_NONE); return; } else if (GetUploadState() != US_NONE || GetDownloadState() != DS_NONE || GetChatState() != MS_NONE || GetKadVersion() <= 5 || GetKadPort() == 0) { Kademlia::CUDPFirewallTester::SetUDPFWCheckResult(false, true, wxUINT32_SWAP_ALWAYS(GetIP()), 0); // inform the tester that this test was cancelled SetKadState(KS_NONE); return; } CMemFile data; data.WriteUInt16(Kademlia::CKademlia::GetPrefs()->GetInternKadPort()); data.WriteUInt16(Kademlia::CKademlia::GetPrefs()->GetExternalKadPort()); data.WriteUInt32(Kademlia::CKademlia::GetPrefs()->GetUDPVerifyKey(GetConnectIP())); CPacket* packet = new CPacket(data, OP_EMULEPROT, OP_FWCHECKUDPREQ); theStats::AddUpOverheadKad(packet->GetPacketSize()); SafeSendPacket(packet); } void CUpDownClient::ProcessFirewallCheckUDPRequest(CMemFile* data) { if (!Kademlia::CKademlia::IsRunning() || Kademlia::CKademlia::GetUDPListener() == NULL) { //DebugLogWarning(_T("Ignored Kad Firewallrequest UDP because Kad is not running (%s)"), GetClientFullInfo()); return; } // first search if we know this IP already, if so the result might be biased and we need tell the requester bool errorAlreadyKnown = false; if (GetUploadState() != US_NONE || GetDownloadState() != DS_NONE || GetChatState() != MS_NONE) { errorAlreadyKnown = true; } else if (Kademlia::CKademlia::GetRoutingZone()->GetContact(wxUINT32_SWAP_ALWAYS(GetConnectIP()), 0, false) != NULL) { errorAlreadyKnown = true; } uint16_t remoteInternPort = data->ReadUInt16(); uint16_t remoteExternPort = data->ReadUInt16(); uint32_t senderKey = data->ReadUInt32(); if (remoteInternPort == 0) { //DebugLogError(_T("UDP Firewallcheck requested with Intern Port == 0 (%s)"), GetClientFullInfo()); return; } // if (senderKey == 0) // DebugLogWarning(_T("UDP Firewallcheck requested with SenderKey == 0 (%s)"), GetClientFullInfo()); CMemFile testPacket1; testPacket1.WriteUInt8(errorAlreadyKnown ? 1 : 0); testPacket1.WriteUInt16(remoteInternPort); DebugSend(Kad2FirewallUDP, wxUINT32_SWAP_ALWAYS(GetConnectIP()), remoteInternPort); Kademlia::CKademlia::GetUDPListener()->SendPacket(testPacket1, KADEMLIA2_FIREWALLUDP, wxUINT32_SWAP_ALWAYS(GetConnectIP()), remoteInternPort, Kademlia::CKadUDPKey(senderKey, theApp->GetPublicIP(false)), NULL); // if the client has a router with PAT (and therefore a different extern port than intern), test this port too if (remoteExternPort != 0 && remoteExternPort != remoteInternPort) { CMemFile testPacket2; testPacket2.WriteUInt8(errorAlreadyKnown ? 1 : 0); testPacket2.WriteUInt16(remoteExternPort); DebugSend(Kad2FirewalledUDP, wxUINT32_SWAP_ALWAYS(GetConnectIP()), remoteExternPort); Kademlia::CKademlia::GetUDPListener()->SendPacket(testPacket2, KADEMLIA2_FIREWALLUDP, wxUINT32_SWAP_ALWAYS(GetConnectIP()), remoteExternPort, Kademlia::CKadUDPKey(senderKey, theApp->GetPublicIP(false)), NULL); } //DebugLog(_T("Answered UDP Firewallcheck request (%s)"), GetClientFullInfo()); } void CUpDownClient::SetConnectOptions(uint8_t options, bool encryption, bool callback) { SetCryptLayerSupport((options & 0x01) != 0 && encryption); SetCryptLayerRequest((options & 0x02) != 0 && encryption); SetCryptLayerRequires((options & 0x04) != 0 && encryption); SetDirectUDPCallbackSupport((options & 0x08) != 0 && callback); } #ifdef DEBUG_ZOMBIE_CLIENTS void CUpDownClient::Unlink(const wxString& from) { std::multiset::iterator it = m_linkedFrom.find(from); if (it != m_linkedFrom.end()) { m_linkedFrom.erase(it); } m_linked--; if (!m_linked) { if (m_linkedDebug) { AddLogLineN(CFormat(wxT("Last reference to client %d %p unlinked, delete it.")) % ECID() % this); } delete this; } } #else void CUpDownClient::Unlink() { // ADUNANZA BEGIN #if 0 m_linked--; if (!m_linked) { delete this; } #else if (--m_linked == 0) delete this; #endif // ADUNANZA END } #endif // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/Scanner.l0000644000175000017500000001160312050266603020066 0ustar l3onl3on%{ // ADUNANZA BEGIN // Per DEBUG_NEW #ifdef _MSC_VER # ifdef _DEBUG # pragma message("WARNING: MSVC + DEBUG") # include # include # ifndef DEBUG_NEW # pragma message("WARNING: defining DEBUG_NEW") # define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) # define new DEBUG_NEW # endif # endif #endif // ADUNANZA END #include #include "SearchExpr.h" #include "Parser.hpp" #include "ED2KLink.h" #include #include "libs/common/StringFunctions.h" #ifdef _MSC_VER #define isatty(DUMMY) 0 // ADUNANZA BEGIN // MSVC_NON_ ha unistd.h #ifndef YY_NO_UNISTD_H #define YY_NO_UNISTD_H #endif // ADUNANZA END #endif #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define YY_NEVER_INTERACTIVE 1 extern int yyerror(const char* errstr); extern int yyerror(wxString errstr); #define YY_INPUT ReadLexBuff #define YY_FATAL_ERROR FatalLexError static void ReadLexBuff(char* pcBuff, int& riResult, size_t uMaxSize); static void FatalLexError(yyconst char msg[]); static char* _pszLexBuff; static char* _pszLexStr; %} %option noyywrap keywordchar [^ \"()] %% [ ] { /* Skip blanks. */ } "OR" { return TOK_OR; } "AND" { return TOK_AND; } "NOT" { return TOK_NOT; } "ed2k::"[a-fA-F0-9]{32} { yylval.pstr = new wxString(UTF82unicode(yytext)); return TOK_ED2K_LINK; } {keywordchar}* { yylval.pstr = new wxString(UTF82unicode(yytext)); return TOK_STRING; } "\"" { int l = 128; char* psz = (char*)malloc(l); int i = 0; int c; while ((c = yyinput()) != '\"') { if (c == EOF || c == '\n'){ unput(c); yyerror(wxT("Search expression error: unterminated string")); break; } if (c == '\\'){ /*Escape sequence*/ switch (c = yyinput()) { case '\n': continue; case 't': /*Tab*/ c = '\t'; break; case 'n': /*Linefeed*/ c = '\n'; break; case 'f': /*Formfeed*/ c = '\f'; break; case 'r': /*Carriage return*/ c = '\r'; break; case '\\': /*Backslash*/ c = '\\'; break; case '"': /*Double quotation mark*/ c = '\"'; break; case '\'': /*Single quotation mark*/ c = '\''; break; case '?': /*Question mark*/ c = '\?'; break; case 'v': /*Vertical Tab*/ c = '\v'; break; case 'a': /*Alert*/ c = '\a'; break; case 'b': /*Backspace*/ c = '\b'; break; case 'x': /*Hexadecimal number*/ { int n, octv; for (n = 1, octv = 0; n <= 3; n++) { if ((c = yyinput()) >= '0' && c <= '9') c -= '0'; else if (c >= 'a' && c <= 'f') c = (c - 'a') + 10; else if (c >= 'A' && c <= 'F') c = (c - 'A') + 10; else break; octv = octv * 16 + c; } unput(c); if (n == 1) c = 'x'; else c = octv; } break; } } else { if ((unsigned char)c >= 0x80/* && IsDBCSLeadByte(yytext[0]) */){ psz[i++] = (unsigned char)c; if (i >= l){ psz = (char*)realloc(psz, l += 128); if (psz == NULL){ yyerror("Less memory for string"); break; } } c = yyinput(); } } psz[i++] = (unsigned char)c; if (i >= l){ psz = (char*)realloc(psz, l += 128); if (psz == NULL){ yyerror("Less memory for string"); break; } } } psz[i] = '\0'; yylval.pstr = new wxString(UTF82unicode(psz)); free(psz); return TOK_STRING; } . { return yytext[0]; } %% static void ReadLexBuff(char* pcBuff, int& riResult, size_t uMaxSize) { wxASSERT( _pszLexBuff != NULL ); if (_pszLexBuff == NULL) { YY_FATAL_ERROR("Input in flex scanner failed"); } wxASSERT( sizeof(YY_CHAR) == sizeof(char) ); size_t uCharsInBuff = strlen(_pszLexBuff); size_t uCharsRead = min(uMaxSize, uCharsInBuff); riResult = uCharsRead; memcpy(pcBuff, _pszLexBuff, uCharsRead); _pszLexBuff += uCharsRead; } static void FatalLexError(yyconst char msg[]) { #ifdef _CONSOLE printf("Fatal error in flex scanner: %s\n", msg); #else printf("Fatal error in flex scanner: %s\n", msg); #endif } void LexInit(const wxString& pszInput) { _pszLexStr = strdup(unicode2UTF8(pszInput)); _pszLexBuff = _pszLexStr; } void LexFree() { yylex_destroy(); yyleng = 0; yytext = NULL; yyin = NULL; yyout = NULL; yy_hold_char = '\0'; yy_n_chars = 0; yy_c_buf_p = NULL; yy_start = 0; yy_did_buffer_switch_on_eof = 0; yy_last_accepting_state = 0; yy_last_accepting_cpos = NULL; #if YY_STACK_USED yy_start_stack_ptr = 0; yy_start_stack_depth = 0; yy_start_stack = NULL; #endif free(_pszLexStr); } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/kademlia/0000755000175000017500000000000012053222111020053 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/kademlia/kademlia/0000755000175000017500000000000012053222111021622 5ustar l3onl3onamule-adunanza-2012.1+2.3.1~dfsg1.orig/src/kademlia/kademlia/Entry.cpp0000644000175000017500000005706012050266603023452 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2008-2011 Dévai Tamás ( gonosztopi@amule.org ) // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2003-2011 Barry Dunne (http://www.emule-project.net) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // // Note To Mods // /* Please do not change anything here and release it.. There is going to be a new forum created just for the Kademlia side of the client.. If you feel there is an error or a way to improve something, please post it in the forum first and let us look at it.. If it is a real improvement, it will be added to the offical client.. Changing something without knowing what all it does can cause great harm to the network if released in mass form.. Any mod that changes anything within the Kademlia side will not be allowed to advertise there client on the eMule forum.. */ // ADUNANZA BEGIN #include "../../amule.h" // needed for theApp->get_kadRepublishTimeS() // ADUNANZA END #include "Entry.h" #include #include #include #include "Indexed.h" #include "../../SafeFile.h" #include "../../GetTickCount.h" #include "../../Logger.h" #include "../../NetworkFunctions.h" using namespace Kademlia; CKeyEntry::GlobalPublishIPMap CKeyEntry::s_globalPublishIPs; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////// CEntry CEntry::~CEntry() { deleteTagPtrListEntries(&m_taglist); } CEntry* CEntry::Copy() const { CEntry* entry = new CEntry(); for (FileNameList::const_iterator it = m_filenames.begin(); it != m_filenames.end(); ++it) { entry->m_filenames.push_back(*it); } entry->m_uIP = m_uIP; // ADUNANZA BEGIN #if 0 entry->m_uKeyID.SetValue(m_uKeyID); #else entry->m_uKeyID = m_uKeyID; #endif // ADUNANZA END entry->m_tLifeTime = m_tLifeTime; entry->m_uSize = m_uSize; entry->m_bSource = m_bSource; // ADUNANZA BEGIN #if 0 entry->m_uSourceID.SetValue(m_uSourceID); #else entry->m_uSourceID = m_uSourceID; #endif // ADUNANZA END entry->m_uTCPport = m_uTCPport; entry->m_uUDPport = m_uUDPport; for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { entry->m_taglist.push_back((*it)->CloneTag()); } return entry; } bool CEntry::GetIntTagValue(const wxString& tagname, uint64_t& value, bool includeVirtualTags) const { for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { if ((*it)->IsInt() && ((*it)->GetName() == tagname)) { value = (*it)->GetInt(); return true; } } if (includeVirtualTags) { // SizeTag is not stored anymore, but queried in some places if (tagname == TAG_FILESIZE) { value = m_uSize; return true; } } value = 0; return false; } // ADUNANZA BEGIN float CEntry::GetFloatTagValue(const wxString& tagname) const { for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { if ((*it)->IsFloat() && ((*it)->GetName() == tagname)) { return (*it)->GetFloat(); } } return 0.0f; } // ADUNANZA END wxString CEntry::GetStrTagValue(const wxString& tagname) const { for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { if (((*it)->GetName() == tagname) && (*it)->IsStr()) { return (*it)->GetStr(); } } return wxEmptyString; } void CEntry::SetFileName(const wxString& name) { if (!m_filenames.empty()) { wxFAIL; m_filenames.clear(); } sFileNameEntry sFN = { name, 1 }; m_filenames.push_front(sFN); } wxString CEntry::GetCommonFileName() const { // return the filename on which most publishers seem to agree on // due to the counting, this doesn't has to be excact, we just want to make sure to not use a filename which just // a few bad publishers used and base or search matching and answering on this, instead of the most popular name // Note: The Index values are not the acutal numbers of publishers, but just a relativ number to compare to other entries FileNameList::const_iterator result = m_filenames.end(); uint32_t highestPopularityIndex = 0; for (FileNameList::const_iterator it = m_filenames.begin(); it != m_filenames.end(); ++it) { if (it->m_popularityIndex > highestPopularityIndex) { highestPopularityIndex = it->m_popularityIndex; result = it; } } wxString strResult(result != m_filenames.end() ? result->m_filename : wxString(wxEmptyString)); wxASSERT(!strResult.IsEmpty() || m_filenames.empty()); return strResult; } void CEntry::WriteTagListInc(CFileDataIO* data, uint32_t increaseTagNumber) { // write taglist and add name + size tag wxCHECK_RET(data != NULL, wxT("data must not be NULL")); uint32_t count = GetTagCount() + increaseTagNumber; // will include name and size tag in the count if needed wxASSERT(count <= 0xFF); data->WriteUInt8((uint8_t)count); if (!GetCommonFileName().IsEmpty()){ wxASSERT(count > m_taglist.size()); data->WriteTag(CTagString(TAG_FILENAME, GetCommonFileName())); } if (m_uSize != 0){ wxASSERT(count > m_taglist.size()); data->WriteTag(CTagVarInt(TAG_FILESIZE, m_uSize)); } for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { data->WriteTag(**it); } } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////// CKeyEntry CKeyEntry::CKeyEntry() { m_publishingIPs = NULL; m_trustValue = 0; m_lastTrustValueCalc = 0; } CKeyEntry::~CKeyEntry() { if (m_publishingIPs != NULL) { for (PublishingIPList::const_iterator it = m_publishingIPs->begin(); it != m_publishingIPs->end(); ++it) { AdjustGlobalPublishTracking(it->m_ip, false, wxT("instance delete")); } delete m_publishingIPs; m_publishingIPs = NULL; } } bool CKeyEntry::SearchTermsMatch(const SSearchTerm* searchTerm) const { // boolean operators if (searchTerm->type == SSearchTerm::AND) { return SearchTermsMatch(searchTerm->left) && SearchTermsMatch(searchTerm->right); } if (searchTerm->type == SSearchTerm::OR) { return SearchTermsMatch(searchTerm->left) || SearchTermsMatch(searchTerm->right); } if (searchTerm->type == SSearchTerm::NOT) { return SearchTermsMatch(searchTerm->left) && !SearchTermsMatch(searchTerm->right); } // word which is to be searched in the file name (and in additional meta data as done by some ed2k servers???) if (searchTerm->type == SSearchTerm::String) { int strSearchTerms = searchTerm->astr->GetCount(); if (strSearchTerms == 0) { return false; } // if there are more than one search strings specified (e.g. "aaa bbb ccc") the entire string is handled // like "aaa AND bbb AND ccc". search all strings from the string search term in the tokenized list of // the file name. all strings of string search term have to be found (AND) wxString commonFileNameLower(GetCommonFileNameLowerCase()); for (int i = 0; i < strSearchTerms; i++) { // this will not give the same results as when tokenizing the filename string, but it is 20 times faster. if (commonFileNameLower.Find((*(searchTerm->astr))[i]) == -1) { return false; } } return true; } if (searchTerm->type == SSearchTerm::MetaTag) { if (searchTerm->tag->GetType() == 2) { // meta tags with string values if (searchTerm->tag->GetName() == TAG_FILEFORMAT) { // 21-Sep-2006 []: Special handling for TAG_FILEFORMAT which is already part // of the filename and thus does not need to get published nor stored explicitly, wxString commonFileName(GetCommonFileName()); int ext = commonFileName.Find(wxT('.'), true); if (ext != wxNOT_FOUND) { return commonFileName.Mid(ext + 1).CmpNoCase(searchTerm->tag->GetStr()) == 0; } } else { for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { if ((*it)->IsStr() && searchTerm->tag->GetName() == (*it)->GetName()) { return (*it)->GetStr().CmpNoCase(searchTerm->tag->GetStr()) == 0; } } } } } else if (searchTerm->type == SSearchTerm::OpGreaterEqual) { if (searchTerm->tag->IsInt()) { // meta tags with integer values uint64_t value; if (GetIntTagValue(searchTerm->tag->GetName(), value, true)) { return value >= searchTerm->tag->GetInt(); } } else if (searchTerm->tag->IsFloat()) { // meta tags with float values for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { if ((*it)->IsFloat() && searchTerm->tag->GetName() == (*it)->GetName()) { return (*it)->GetFloat() >= searchTerm->tag->GetFloat(); } } } } else if (searchTerm->type == SSearchTerm::OpLessEqual) { if (searchTerm->tag->IsInt()) { // meta tags with integer values uint64_t value; if (GetIntTagValue(searchTerm->tag->GetName(), value, true)) { return value <= searchTerm->tag->GetInt(); } } else if (searchTerm->tag->IsFloat()) { // meta tags with float values for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { if ((*it)->IsFloat() && searchTerm->tag->GetName() == (*it)->GetName()) { return (*it)->GetFloat() <= searchTerm->tag->GetFloat(); } } } } else if (searchTerm->type == SSearchTerm::OpGreater) { if (searchTerm->tag->IsInt()) { // meta tags with integer values uint64_t value; if (GetIntTagValue(searchTerm->tag->GetName(), value, true)) { return value > searchTerm->tag->GetInt(); } } else if (searchTerm->tag->IsFloat()) { // meta tags with float values for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { if ((*it)->IsFloat() && searchTerm->tag->GetName() == (*it)->GetName()) { return (*it)->GetFloat() > searchTerm->tag->GetFloat(); } } } } else if (searchTerm->type == SSearchTerm::OpLess) { if (searchTerm->tag->IsInt()) { // meta tags with integer values uint64_t value; if (GetIntTagValue(searchTerm->tag->GetName(), value, true)) { return value < searchTerm->tag->GetInt(); } } else if (searchTerm->tag->IsFloat()) { // meta tags with float values for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { if ((*it)->IsFloat() && searchTerm->tag->GetName() == (*it)->GetName()) { return (*it)->GetFloat() < searchTerm->tag->GetFloat(); } } } } else if (searchTerm->type == SSearchTerm::OpEqual) { if (searchTerm->tag->IsInt()) { // meta tags with integer values uint64_t value; if (GetIntTagValue(searchTerm->tag->GetName(), value, true)) { return value == searchTerm->tag->GetInt(); } } else if (searchTerm->tag->IsFloat()) { // meta tags with float values for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { if ((*it)->IsFloat() && searchTerm->tag->GetName() == (*it)->GetName()) { return (*it)->GetFloat() == searchTerm->tag->GetFloat(); } } } } else if (searchTerm->type == SSearchTerm::OpNotEqual) { if (searchTerm->tag->IsInt()) { // meta tags with integer values uint64_t value; if (GetIntTagValue(searchTerm->tag->GetName(), value, true)) { return value != searchTerm->tag->GetInt(); } } else if (searchTerm->tag->IsFloat()) { // meta tags with float values for (TagPtrList::const_iterator it = m_taglist.begin(); it != m_taglist.end(); ++it) { if ((*it)->IsFloat() && searchTerm->tag->GetName() == (*it)->GetName()) { return (*it)->GetFloat() != searchTerm->tag->GetFloat(); } } } } return false; } void CKeyEntry::AdjustGlobalPublishTracking(uint32_t ip, bool increase, const wxString& DEBUG_ONLY(dbgReason)) { uint32_t count = 0; bool found = false; GlobalPublishIPMap::const_iterator it = s_globalPublishIPs.find(ip & 0xFFFFFF00 /* /24 netmask, take care of endian if needed */ ); if (it != s_globalPublishIPs.end()) { count = it->second; found = true; } if (increase) { count++; } else { count--; } if (count > 0) { s_globalPublishIPs[ip & 0xFFFFFF00] = count; } else if (found) { s_globalPublishIPs.erase(ip & 0xFFFFFF00); } else { wxFAIL; } #ifdef __DEBUG__ if (!dbgReason.IsEmpty()) { AddDebugLogLineN(logKadEntryTracking, CFormat(wxT("%s %s (%s) - (%s), new count %u")) % (increase ? wxT("Adding") : wxT("Removing")) % KadIPToString(ip & 0xFFFFFF00) % KadIPToString(ip) % dbgReason % count); } #endif } void CKeyEntry::MergeIPsAndFilenames(CKeyEntry* fromEntry) { // this is called when replacing a stored entry with a refreshed one. // we want to take over the tracked IPs and the different filenames from the old entry, the rest is still // "overwritten" with the refreshed values. This might be not perfect for the taglist in some cases, but we can't afford // to store hundreds of taglists to figure out the best one like we do for the filenames now if (m_publishingIPs != NULL) { // This instance needs to be a new entry, otherwise we don't want/need to merge wxASSERT(fromEntry == NULL); wxASSERT(!m_publishingIPs->empty()); wxASSERT(!m_filenames.empty()); return; } bool refresh = false; if (fromEntry == NULL || fromEntry->m_publishingIPs == NULL) { wxASSERT(fromEntry == NULL); // if called with NULL, this is a complete new entry and we need to initalize our lists if (m_publishingIPs == NULL) { m_publishingIPs = new PublishingIPList(); } // update the global track map below } else { // merge the tracked IPs, add this one if not already on the list m_publishingIPs = fromEntry->m_publishingIPs; fromEntry->m_publishingIPs = NULL; bool fastRefresh = false; for (PublishingIPList::iterator it = m_publishingIPs->begin(); it != m_publishingIPs->end(); ++it) { if (it->m_ip == m_uIP) { refresh = true; // ADUNANZA BEGIN // (ennesimo tentativo) #if 0 if ((time(NULL) - it->m_lastPublish) < (KADEMLIAREPUBLISHTIMES - HR2S(1))) { #else // if ((time(NULL) - it->m_lastPublish) < (theApp->rm->kadRepublishTimeS - HR2S(1))) { if ((time(NULL) - it->m_lastPublish) < (theApp->get_kadRepublishTimeS() - HR2S(1))) { #endif // ADUNANZA END AddDebugLogLineN(logKadEntryTracking, wxT("FastRefresh publish, ip: ") + KadIPToString(m_uIP)); fastRefresh = true; // refreshed faster than expected, will not count into filenamepopularity index } it->m_lastPublish = time(NULL); m_publishingIPs->push_back(*it); m_publishingIPs->erase(it); break; } } // copy over trust value, in case we don't want to recalculate m_trustValue = fromEntry->m_trustValue; m_lastTrustValueCalc = fromEntry->m_lastTrustValueCalc; // copy over the different names, if they are different the one we have right now wxASSERT(m_filenames.size() == 1); // we should have only one name here, since it's the entry from one single source sFileNameEntry currentName = { wxEmptyString, 0 }; if (m_filenames.size() != 0) { currentName = m_filenames.front(); m_filenames.pop_front(); } bool duplicate = false; for (FileNameList::iterator it = fromEntry->m_filenames.begin(); it != fromEntry->m_filenames.end(); ++it) { sFileNameEntry nameToCopy = *it; if (currentName.m_filename.CmpNoCase(nameToCopy.m_filename) == 0) { // the filename of our new entry matches with our old, increase the popularity index for the old one duplicate = true; if (!fastRefresh) { nameToCopy.m_popularityIndex++; } } m_filenames.push_back(nameToCopy); } if (!duplicate) { m_filenames.push_back(currentName); } } // if this was a refresh done, otherwise update the global track map if (!refresh) { wxASSERT(m_uIP != 0); sPublishingIP add = { m_uIP, time(NULL) }; m_publishingIPs->push_back(add); // add the publisher to the tacking list AdjustGlobalPublishTracking(m_uIP, true, wxT("new publisher")); // we keep track of max 100 IPs, in order to avoid too much time for calculation/storing/loading. if (m_publishingIPs->size() > 100) { sPublishingIP curEntry = m_publishingIPs->front(); m_publishingIPs->pop_front(); AdjustGlobalPublishTracking(curEntry.m_ip, false, wxT("more than 100 publishers purge")); } // since we added a new publisher, we want to (re)calculate the trust value for this entry ReCalculateTrustValue(); } AddDebugLogLineN(logKadEntryTracking, CFormat(wxT("Indexed Keyword, Refresh: %s, Current Publisher: %s, Total Publishers: %u, Total different Names: %u, TrustValue: %.2f, file: %s")) % (refresh ? wxT("Yes") : wxT("No")) % KadIPToString(m_uIP) % m_publishingIPs->size() % m_filenames.size() % m_trustValue % m_uSourceID.ToHexString()); } void CKeyEntry::ReCalculateTrustValue() { #define PUBLISHPOINTSSPERSUBNET 10.0 // The trustvalue is supposed to be an indicator how trustworthy/important (or spammy) this entry is and lies between 0 and ~10000, // but mostly we say everything below 1 is bad, everything above 1 is good. It is calculated by looking at how many different // IPs/24 have published this entry and how many entries each of those IPs have. // Each IP/24 has x (say 3) points. This means if one IP publishes 3 different entries without any other IP publishing those entries, // each of those entries will have 3 / 3 = 1 Trustvalue. Thats fine. If it publishes 6 alone, each entry has 3 / 6 = 0.5 trustvalue - not so good // However if there is another publisher for entry 5, which only publishes this entry then we have 3/6 + 3/1 = 3.5 trustvalue for this entry // // What's the point? With this rating we try to avoid getting spammed with entries for a given keyword by a small IP range, which blends out // all other entries for this keyword do to its amount as well as giving an indicator for the searcher. So if we are the node to index "Knoppix", and someone // from 1 IP publishes 500 times "knoppix casino 500% bonus.txt", all those entries will have a trustvalue of 0.006 and we make sure that // on search requests for knoppix, those entries are only returned after all entries with a trustvalue > 1 were sent (if there is still space). // // Its important to note that entry with < 1 do NOT get ignored or singled out, this only comes into play if we have 300 more results for // a search request rating > 1 wxCHECK_RET(m_publishingIPs != NULL, wxT("No publishing IPs?")); m_lastTrustValueCalc = ::GetTickCount(); m_trustValue = 0; wxASSERT(!m_publishingIPs->empty()); for (PublishingIPList::iterator it = m_publishingIPs->begin(); it != m_publishingIPs->end(); ++it) { sPublishingIP curEntry = *it; uint32_t count = 0; GlobalPublishIPMap::const_iterator itMap = s_globalPublishIPs.find(curEntry.m_ip & 0xFFFFFF00 /* /24 netmask, take care of endian if needed*/); if (itMap != s_globalPublishIPs.end()) { count = itMap->second; } if (count > 0) { m_trustValue += PUBLISHPOINTSSPERSUBNET / count; } else { AddDebugLogLineN(logKadEntryTracking, wxT("Inconsistency in RecalcualteTrustValue()")); wxFAIL; } } } double CKeyEntry::GetTrustValue() { // update if last calcualtion is too old, will assert if this entry is not supposed to have a trustvalue if (::GetTickCount() - m_lastTrustValueCalc > MIN2MS(10)) { ReCalculateTrustValue(); } return m_trustValue; } void CKeyEntry::CleanUpTrackedPublishers() { if (m_publishingIPs == NULL) { return; } time_t now = time(NULL); while (!m_publishingIPs->empty()) { // entries are ordered, older ones first sPublishingIP curEntry = m_publishingIPs->front(); if (now - curEntry.m_lastPublish > KADEMLIAREPUBLISHTIMEK) { AdjustGlobalPublishTracking(curEntry.m_ip, false, wxT("cleanup")); m_publishingIPs->pop_front(); } else { break; } } } void CKeyEntry::WritePublishTrackingDataToFile(CFileDataIO* data) { // format: <{} Names_Count><{" "" ""; long httpOutLen = strlen(httpOut); Data.pSocket->SendHttpHeaders("text/html", false, httpOutLen, 0); Data.pSocket->SendData(httpOut, httpOutLen); } // Dummy functions for EC logging bool ECLogIsEnabled() { return false; } void DoECLogLine(const wxString &) { } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/webserver/src/Makefile.in0000644000175000017500000015357012053222405023165 0ustar l3onl3on# Makefile.in generated by automake 1.11.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = amuleweb$(EXEEXT) subdir = src/webserver/src DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/GeoIP.m4 \ $(top_srcdir)/m4/build-tools.m4 $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/cryptopp.m4 $(top_srcdir)/m4/fallocate.m4 \ $(top_srcdir)/m4/gdlib.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/kde.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libpng.m4 $(top_srcdir)/m4/libupnp.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/plasmamule.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/qt.m4 $(top_srcdir)/m4/readline.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/wxwin.m4 \ $(top_srcdir)/m4/zlib.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_amuleweb_OBJECTS = amuleweb-WebServer.$(OBJEXT) \ amuleweb-WebInterface.$(OBJEXT) amuleweb-WebSocket.$(OBJEXT) \ amuleweb-ExternalConnector.$(OBJEXT) \ amuleweb-OtherFunctions.$(OBJEXT) amuleweb-RLE.$(OBJEXT) \ amuleweb-NetworkFunctions.$(OBJEXT) \ amuleweb-LoggerConsole.$(OBJEXT) amuleweb-UPnPBase.$(OBJEXT) \ amuleweb-php_parser.$(OBJEXT) amuleweb-php_lexer.$(OBJEXT) \ amuleweb-php_syntree.$(OBJEXT) \ amuleweb-php_amule_lib.$(OBJEXT) \ amuleweb-php_core_lib.$(OBJEXT) @NEED_RC_TRUE@nodist_amuleweb_OBJECTS = amuleweb-version.$(OBJEXT) amuleweb_OBJECTS = $(am_amuleweb_OBJECTS) $(nodist_amuleweb_OBJECTS) am__DEPENDENCIES_1 = amuleweb_LINK = $(CXXLD) $(amuleweb_CXXFLAGS) $(CXXFLAGS) \ $(amuleweb_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent 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_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(amuleweb_SOURCES) $(nodist_amuleweb_SOURCES) DIST_SOURCES = $(amuleweb_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) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALCC_MANPAGES = @ALCC_MANPAGES@ ALC_MANPAGES = @ALC_MANPAGES@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AMULECMD_MANPAGES = @AMULECMD_MANPAGES@ AMULEWEB_DEFS = @AMULEWEB_DEFS@ AMULE_DAEMON_MANPAGES = @AMULE_DAEMON_MANPAGES@ AMULE_GUI_MANPAGES = @AMULE_GUI_MANPAGES@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_CPPFLAGS = @BFD_CPPFLAGS@ BFD_LIBS = @BFD_LIBS@ BUILD_CC = @BUILD_CC@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CAS_DEFS = @CAS_DEFS@ CAS_MANPAGES = @CAS_MANPAGES@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CRYPTOPP_CPPFLAGS = @CRYPTOPP_CPPFLAGS@ CRYPTOPP_LDFLAGS = @CRYPTOPP_LDFLAGS@ CRYPTOPP_LIBS = @CRYPTOPP_LIBS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEBUGFLAG = @DEBUGFLAG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ED2K_MANPAGES = @ED2K_MANPAGES@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDLIB_CFLAGS = @GDLIB_CFLAGS@ GDLIB_CONFIG_PATH = @GDLIB_CONFIG_PATH@ GDLIB_LDFLAGS = @GDLIB_LDFLAGS@ GDLIB_LIBS = @GDLIB_LIBS@ GENCAT = @GENCAT@ GEOIP_CPPFLAGS = @GEOIP_CPPFLAGS@ GEOIP_LDFLAGS = @GEOIP_LDFLAGS@ GEOIP_LIBS = @GEOIP_LIBS@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INCINTL = @INCINTL@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ KDE4_CONFIG = @KDE4_CONFIG@ KDE_APPLNK_PATH = @KDE_APPLNK_PATH@ KDE_HEADER_DIR = @KDE_HEADER_DIR@ KDE_ICON_PATH = @KDE_ICON_PATH@ KDE_MIME_PATH = @KDE_MIME_PATH@ KDE_MODULE_PATH = @KDE_MODULE_PATH@ KDE_SERVICE_PATH = @KDE_SERVICE_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ LIBPNG_CONFIG_PATH = @LIBPNG_CONFIG_PATH@ LIBPNG_LDFLAGS = @LIBPNG_LDFLAGS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBUPNP_CFLAGS = @LIBUPNP_CFLAGS@ LIBUPNP_CPPFLAGS = @LIBUPNP_CPPFLAGS@ LIBUPNP_LDFLAGS = @LIBUPNP_LDFLAGS@ LIBUPNP_LIBS = @LIBUPNP_LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONOLITHIC_MANPAGES = @MONOLITHIC_MANPAGES@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MULECFLAGS = @MULECFLAGS@ MULECPPFLAGS = @MULECPPFLAGS@ MULECXXFLAGS = @MULECXXFLAGS@ MULELDFLAGS = @MULELDFLAGS@ MULERCFLAGS = @MULERCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ QT_CORE_CXXFLAGS = @QT_CORE_CXXFLAGS@ QT_CORE_LIBS = @QT_CORE_LIBS@ QT_DBUS_LDFLAGS = @QT_DBUS_LDFLAGS@ QT_GUI_CXXFLAGS = @QT_GUI_CXXFLAGS@ QT_GUI_LIBS = @QT_GUI_LIBS@ QT_MOC = @QT_MOC@ RANLIB = @RANLIB@ RC = @RC@ RCFLAGS = @RCFLAGS@ READLINE_LIBS = @READLINE_LIBS@ RESOLV_LIB = @RESOLV_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SVNDATE = @SVNDATE@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBSERVER_MANPAGES = @WEBSERVER_MANPAGES@ WXBASE_CPPFLAGS = @WXBASE_CPPFLAGS@ WXBASE_LIBS = @WXBASE_LIBS@ WXCAS_MANPAGES = @WXCAS_MANPAGES@ WX_CFLAGS = @WX_CFLAGS@ WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@ WX_CONFIG_PATH = @WX_CONFIG_PATH@ WX_CPPFLAGS = @WX_CPPFLAGS@ WX_CXXFLAGS = @WX_CXXFLAGS@ WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@ WX_DEBUG = @WX_DEBUG@ WX_LIBS = @WX_LIBS@ WX_PORT = @WX_PORT@ WX_RESCOMP = @WX_RESCOMP@ WX_SHARED = @WX_SHARED@ WX_UNICODE = @WX_UNICODE@ WX_VERSION_FULL = @WX_VERSION_FULL@ WX_VERSION_MAJOR = @WX_VERSION_MAJOR@ WX_VERSION_MINOR = @WX_VERSION_MINOR@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@ ZLIB_LDFLAGS = @ZLIB_LDFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_BUILD_CC = @ac_ct_BUILD_CC@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ 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@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ amuleweb_SOURCES = \ WebServer.cpp \ WebInterface.cpp \ WebSocket.cpp \ $(top_srcdir)/src/ExternalConnector.cpp \ $(top_srcdir)/src/OtherFunctions.cpp \ $(top_srcdir)/src/RLE.cpp \ $(top_srcdir)/src/NetworkFunctions.cpp \ $(top_srcdir)/src/LoggerConsole.cpp \ $(top_srcdir)/src/UPnPBase.cpp \ php_parser.c \ php_lexer.c \ php_syntree.cpp \ php_amule_lib.cpp \ php_core_lib.cpp amuleweb_DEPENDENCIES = ../../libs/common/libmulecommon.a ../../libs/ec/cpp/libec.a amuleweb_CPPFLAGS = -I../.. -I$(top_srcdir)/src -I$(top_srcdir)/src/libs -I$(top_srcdir)/src/include \ $(MULECPPFLAGS) $(AMULEWEB_DEFS) $(BFD_CPPFLAGS) $(WXBASE_CPPFLAGS) \ -DWEBSERVERDIR="\"$(pkgdatadir)/webserver\"" \ $(INCINTL) $(ZLIB_CPPFLAGS) $(LIBUPNP_CPPFLAGS) amuleweb_CFLAGS = $(MULECFLAGS) $(WX_CFLAGS_ONLY) $(LIBPNG_CFLAGS) $(LIBUPNP_CFLAGS) amuleweb_CXXFLAGS = $(MULECXXFLAGS) $(WX_CFLAGS_ONLY) $(WX_CXXFLAGS_ONLY) $(LIBPNG_CFLAGS) $(LIBUPNP_CFLAGS) amuleweb_LDFLAGS = $(MULELDFLAGS) -L../../libs/common -L../../libs/ec/cpp $(LIBPNG_LDFLAGS) $(ZLIB_LDFLAGS) $(LIBUPNP_LDFLAGS) amuleweb_LDADD = -lec -lmulecommon $(WXBASE_LIBS) $(BFD_LIBS) $(ZLIB_LIBS) \ $(READLINE_LIBS) $(LIBPNG_LIBS) $(RESOLV_LIB) $(LIBINTL) $(LIBUPNP_LIBS) noinst_HEADERS = \ WebInterface.h \ WebServer.h \ WebSocket.h \ php_core_lib.h \ php_parser.h \ php_syntree.h # Resources @NEED_RC_TRUE@SUFFIXES = .rc @NEED_RC_TRUE@nodist_amuleweb_SOURCES = amuleweb-version.rc @NEED_RC_TRUE@CLEANFILES = *-version.rc MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = \ missing-template.html \ php_lexer.l \ php_parser.y all: all-am .SUFFIXES: .SUFFIXES: .rc .$(OBJEXT) .c .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/webserver/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/webserver/src/Makefile .PRECIOUS: 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(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; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) amuleweb$(EXEEXT): $(amuleweb_OBJECTS) $(amuleweb_DEPENDENCIES) $(EXTRA_amuleweb_DEPENDENCIES) @rm -f amuleweb$(EXEEXT) $(AM_V_CXXLD)$(amuleweb_LINK) $(amuleweb_OBJECTS) $(amuleweb_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-ExternalConnector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-LoggerConsole.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-NetworkFunctions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-OtherFunctions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-RLE.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-UPnPBase.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-WebInterface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-WebServer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-WebSocket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-php_amule_lib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-php_core_lib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-php_lexer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-php_parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amuleweb-php_syntree.Po@am__quote@ .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 $< .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 `$(CYGPATH_W) '$<'` amuleweb-php_parser.o: php_parser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CFLAGS) $(CFLAGS) -MT amuleweb-php_parser.o -MD -MP -MF $(DEPDIR)/amuleweb-php_parser.Tpo -c -o amuleweb-php_parser.o `test -f 'php_parser.c' || echo '$(srcdir)/'`php_parser.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-php_parser.Tpo $(DEPDIR)/amuleweb-php_parser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='php_parser.c' object='amuleweb-php_parser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CFLAGS) $(CFLAGS) -c -o amuleweb-php_parser.o `test -f 'php_parser.c' || echo '$(srcdir)/'`php_parser.c amuleweb-php_parser.obj: php_parser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CFLAGS) $(CFLAGS) -MT amuleweb-php_parser.obj -MD -MP -MF $(DEPDIR)/amuleweb-php_parser.Tpo -c -o amuleweb-php_parser.obj `if test -f 'php_parser.c'; then $(CYGPATH_W) 'php_parser.c'; else $(CYGPATH_W) '$(srcdir)/php_parser.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-php_parser.Tpo $(DEPDIR)/amuleweb-php_parser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='php_parser.c' object='amuleweb-php_parser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CFLAGS) $(CFLAGS) -c -o amuleweb-php_parser.obj `if test -f 'php_parser.c'; then $(CYGPATH_W) 'php_parser.c'; else $(CYGPATH_W) '$(srcdir)/php_parser.c'; fi` amuleweb-php_lexer.o: php_lexer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CFLAGS) $(CFLAGS) -MT amuleweb-php_lexer.o -MD -MP -MF $(DEPDIR)/amuleweb-php_lexer.Tpo -c -o amuleweb-php_lexer.o `test -f 'php_lexer.c' || echo '$(srcdir)/'`php_lexer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-php_lexer.Tpo $(DEPDIR)/amuleweb-php_lexer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='php_lexer.c' object='amuleweb-php_lexer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CFLAGS) $(CFLAGS) -c -o amuleweb-php_lexer.o `test -f 'php_lexer.c' || echo '$(srcdir)/'`php_lexer.c amuleweb-php_lexer.obj: php_lexer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CFLAGS) $(CFLAGS) -MT amuleweb-php_lexer.obj -MD -MP -MF $(DEPDIR)/amuleweb-php_lexer.Tpo -c -o amuleweb-php_lexer.obj `if test -f 'php_lexer.c'; then $(CYGPATH_W) 'php_lexer.c'; else $(CYGPATH_W) '$(srcdir)/php_lexer.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-php_lexer.Tpo $(DEPDIR)/amuleweb-php_lexer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='php_lexer.c' object='amuleweb-php_lexer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CFLAGS) $(CFLAGS) -c -o amuleweb-php_lexer.obj `if test -f 'php_lexer.c'; then $(CYGPATH_W) 'php_lexer.c'; else $(CYGPATH_W) '$(srcdir)/php_lexer.c'; fi` .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` amuleweb-WebServer.o: WebServer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-WebServer.o -MD -MP -MF $(DEPDIR)/amuleweb-WebServer.Tpo -c -o amuleweb-WebServer.o `test -f 'WebServer.cpp' || echo '$(srcdir)/'`WebServer.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-WebServer.Tpo $(DEPDIR)/amuleweb-WebServer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='WebServer.cpp' object='amuleweb-WebServer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-WebServer.o `test -f 'WebServer.cpp' || echo '$(srcdir)/'`WebServer.cpp amuleweb-WebServer.obj: WebServer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-WebServer.obj -MD -MP -MF $(DEPDIR)/amuleweb-WebServer.Tpo -c -o amuleweb-WebServer.obj `if test -f 'WebServer.cpp'; then $(CYGPATH_W) 'WebServer.cpp'; else $(CYGPATH_W) '$(srcdir)/WebServer.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-WebServer.Tpo $(DEPDIR)/amuleweb-WebServer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='WebServer.cpp' object='amuleweb-WebServer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-WebServer.obj `if test -f 'WebServer.cpp'; then $(CYGPATH_W) 'WebServer.cpp'; else $(CYGPATH_W) '$(srcdir)/WebServer.cpp'; fi` amuleweb-WebInterface.o: WebInterface.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-WebInterface.o -MD -MP -MF $(DEPDIR)/amuleweb-WebInterface.Tpo -c -o amuleweb-WebInterface.o `test -f 'WebInterface.cpp' || echo '$(srcdir)/'`WebInterface.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-WebInterface.Tpo $(DEPDIR)/amuleweb-WebInterface.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='WebInterface.cpp' object='amuleweb-WebInterface.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-WebInterface.o `test -f 'WebInterface.cpp' || echo '$(srcdir)/'`WebInterface.cpp amuleweb-WebInterface.obj: WebInterface.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-WebInterface.obj -MD -MP -MF $(DEPDIR)/amuleweb-WebInterface.Tpo -c -o amuleweb-WebInterface.obj `if test -f 'WebInterface.cpp'; then $(CYGPATH_W) 'WebInterface.cpp'; else $(CYGPATH_W) '$(srcdir)/WebInterface.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-WebInterface.Tpo $(DEPDIR)/amuleweb-WebInterface.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='WebInterface.cpp' object='amuleweb-WebInterface.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-WebInterface.obj `if test -f 'WebInterface.cpp'; then $(CYGPATH_W) 'WebInterface.cpp'; else $(CYGPATH_W) '$(srcdir)/WebInterface.cpp'; fi` amuleweb-WebSocket.o: WebSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-WebSocket.o -MD -MP -MF $(DEPDIR)/amuleweb-WebSocket.Tpo -c -o amuleweb-WebSocket.o `test -f 'WebSocket.cpp' || echo '$(srcdir)/'`WebSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-WebSocket.Tpo $(DEPDIR)/amuleweb-WebSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='WebSocket.cpp' object='amuleweb-WebSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-WebSocket.o `test -f 'WebSocket.cpp' || echo '$(srcdir)/'`WebSocket.cpp amuleweb-WebSocket.obj: WebSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-WebSocket.obj -MD -MP -MF $(DEPDIR)/amuleweb-WebSocket.Tpo -c -o amuleweb-WebSocket.obj `if test -f 'WebSocket.cpp'; then $(CYGPATH_W) 'WebSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/WebSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-WebSocket.Tpo $(DEPDIR)/amuleweb-WebSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='WebSocket.cpp' object='amuleweb-WebSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-WebSocket.obj `if test -f 'WebSocket.cpp'; then $(CYGPATH_W) 'WebSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/WebSocket.cpp'; fi` amuleweb-ExternalConnector.o: $(top_srcdir)/src/ExternalConnector.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-ExternalConnector.o -MD -MP -MF $(DEPDIR)/amuleweb-ExternalConnector.Tpo -c -o amuleweb-ExternalConnector.o `test -f '$(top_srcdir)/src/ExternalConnector.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/ExternalConnector.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-ExternalConnector.Tpo $(DEPDIR)/amuleweb-ExternalConnector.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/ExternalConnector.cpp' object='amuleweb-ExternalConnector.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-ExternalConnector.o `test -f '$(top_srcdir)/src/ExternalConnector.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/ExternalConnector.cpp amuleweb-ExternalConnector.obj: $(top_srcdir)/src/ExternalConnector.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-ExternalConnector.obj -MD -MP -MF $(DEPDIR)/amuleweb-ExternalConnector.Tpo -c -o amuleweb-ExternalConnector.obj `if test -f '$(top_srcdir)/src/ExternalConnector.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/ExternalConnector.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/ExternalConnector.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-ExternalConnector.Tpo $(DEPDIR)/amuleweb-ExternalConnector.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/ExternalConnector.cpp' object='amuleweb-ExternalConnector.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-ExternalConnector.obj `if test -f '$(top_srcdir)/src/ExternalConnector.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/ExternalConnector.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/ExternalConnector.cpp'; fi` amuleweb-OtherFunctions.o: $(top_srcdir)/src/OtherFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-OtherFunctions.o -MD -MP -MF $(DEPDIR)/amuleweb-OtherFunctions.Tpo -c -o amuleweb-OtherFunctions.o `test -f '$(top_srcdir)/src/OtherFunctions.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/OtherFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-OtherFunctions.Tpo $(DEPDIR)/amuleweb-OtherFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/OtherFunctions.cpp' object='amuleweb-OtherFunctions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-OtherFunctions.o `test -f '$(top_srcdir)/src/OtherFunctions.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/OtherFunctions.cpp amuleweb-OtherFunctions.obj: $(top_srcdir)/src/OtherFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-OtherFunctions.obj -MD -MP -MF $(DEPDIR)/amuleweb-OtherFunctions.Tpo -c -o amuleweb-OtherFunctions.obj `if test -f '$(top_srcdir)/src/OtherFunctions.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/OtherFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/OtherFunctions.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-OtherFunctions.Tpo $(DEPDIR)/amuleweb-OtherFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/OtherFunctions.cpp' object='amuleweb-OtherFunctions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-OtherFunctions.obj `if test -f '$(top_srcdir)/src/OtherFunctions.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/OtherFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/OtherFunctions.cpp'; fi` amuleweb-RLE.o: $(top_srcdir)/src/RLE.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-RLE.o -MD -MP -MF $(DEPDIR)/amuleweb-RLE.Tpo -c -o amuleweb-RLE.o `test -f '$(top_srcdir)/src/RLE.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/RLE.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-RLE.Tpo $(DEPDIR)/amuleweb-RLE.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/RLE.cpp' object='amuleweb-RLE.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-RLE.o `test -f '$(top_srcdir)/src/RLE.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/RLE.cpp amuleweb-RLE.obj: $(top_srcdir)/src/RLE.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-RLE.obj -MD -MP -MF $(DEPDIR)/amuleweb-RLE.Tpo -c -o amuleweb-RLE.obj `if test -f '$(top_srcdir)/src/RLE.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/RLE.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/RLE.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-RLE.Tpo $(DEPDIR)/amuleweb-RLE.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/RLE.cpp' object='amuleweb-RLE.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-RLE.obj `if test -f '$(top_srcdir)/src/RLE.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/RLE.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/RLE.cpp'; fi` amuleweb-NetworkFunctions.o: $(top_srcdir)/src/NetworkFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-NetworkFunctions.o -MD -MP -MF $(DEPDIR)/amuleweb-NetworkFunctions.Tpo -c -o amuleweb-NetworkFunctions.o `test -f '$(top_srcdir)/src/NetworkFunctions.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/NetworkFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-NetworkFunctions.Tpo $(DEPDIR)/amuleweb-NetworkFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/NetworkFunctions.cpp' object='amuleweb-NetworkFunctions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-NetworkFunctions.o `test -f '$(top_srcdir)/src/NetworkFunctions.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/NetworkFunctions.cpp amuleweb-NetworkFunctions.obj: $(top_srcdir)/src/NetworkFunctions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-NetworkFunctions.obj -MD -MP -MF $(DEPDIR)/amuleweb-NetworkFunctions.Tpo -c -o amuleweb-NetworkFunctions.obj `if test -f '$(top_srcdir)/src/NetworkFunctions.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/NetworkFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/NetworkFunctions.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-NetworkFunctions.Tpo $(DEPDIR)/amuleweb-NetworkFunctions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/NetworkFunctions.cpp' object='amuleweb-NetworkFunctions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-NetworkFunctions.obj `if test -f '$(top_srcdir)/src/NetworkFunctions.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/NetworkFunctions.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/NetworkFunctions.cpp'; fi` amuleweb-LoggerConsole.o: $(top_srcdir)/src/LoggerConsole.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-LoggerConsole.o -MD -MP -MF $(DEPDIR)/amuleweb-LoggerConsole.Tpo -c -o amuleweb-LoggerConsole.o `test -f '$(top_srcdir)/src/LoggerConsole.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/LoggerConsole.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-LoggerConsole.Tpo $(DEPDIR)/amuleweb-LoggerConsole.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/LoggerConsole.cpp' object='amuleweb-LoggerConsole.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-LoggerConsole.o `test -f '$(top_srcdir)/src/LoggerConsole.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/LoggerConsole.cpp amuleweb-LoggerConsole.obj: $(top_srcdir)/src/LoggerConsole.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-LoggerConsole.obj -MD -MP -MF $(DEPDIR)/amuleweb-LoggerConsole.Tpo -c -o amuleweb-LoggerConsole.obj `if test -f '$(top_srcdir)/src/LoggerConsole.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/LoggerConsole.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/LoggerConsole.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-LoggerConsole.Tpo $(DEPDIR)/amuleweb-LoggerConsole.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/LoggerConsole.cpp' object='amuleweb-LoggerConsole.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-LoggerConsole.obj `if test -f '$(top_srcdir)/src/LoggerConsole.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/LoggerConsole.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/LoggerConsole.cpp'; fi` amuleweb-UPnPBase.o: $(top_srcdir)/src/UPnPBase.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-UPnPBase.o -MD -MP -MF $(DEPDIR)/amuleweb-UPnPBase.Tpo -c -o amuleweb-UPnPBase.o `test -f '$(top_srcdir)/src/UPnPBase.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/UPnPBase.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-UPnPBase.Tpo $(DEPDIR)/amuleweb-UPnPBase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/UPnPBase.cpp' object='amuleweb-UPnPBase.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-UPnPBase.o `test -f '$(top_srcdir)/src/UPnPBase.cpp' || echo '$(srcdir)/'`$(top_srcdir)/src/UPnPBase.cpp amuleweb-UPnPBase.obj: $(top_srcdir)/src/UPnPBase.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-UPnPBase.obj -MD -MP -MF $(DEPDIR)/amuleweb-UPnPBase.Tpo -c -o amuleweb-UPnPBase.obj `if test -f '$(top_srcdir)/src/UPnPBase.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/UPnPBase.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/UPnPBase.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-UPnPBase.Tpo $(DEPDIR)/amuleweb-UPnPBase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/src/UPnPBase.cpp' object='amuleweb-UPnPBase.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-UPnPBase.obj `if test -f '$(top_srcdir)/src/UPnPBase.cpp'; then $(CYGPATH_W) '$(top_srcdir)/src/UPnPBase.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/UPnPBase.cpp'; fi` amuleweb-php_syntree.o: php_syntree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-php_syntree.o -MD -MP -MF $(DEPDIR)/amuleweb-php_syntree.Tpo -c -o amuleweb-php_syntree.o `test -f 'php_syntree.cpp' || echo '$(srcdir)/'`php_syntree.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-php_syntree.Tpo $(DEPDIR)/amuleweb-php_syntree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='php_syntree.cpp' object='amuleweb-php_syntree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-php_syntree.o `test -f 'php_syntree.cpp' || echo '$(srcdir)/'`php_syntree.cpp amuleweb-php_syntree.obj: php_syntree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-php_syntree.obj -MD -MP -MF $(DEPDIR)/amuleweb-php_syntree.Tpo -c -o amuleweb-php_syntree.obj `if test -f 'php_syntree.cpp'; then $(CYGPATH_W) 'php_syntree.cpp'; else $(CYGPATH_W) '$(srcdir)/php_syntree.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-php_syntree.Tpo $(DEPDIR)/amuleweb-php_syntree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='php_syntree.cpp' object='amuleweb-php_syntree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-php_syntree.obj `if test -f 'php_syntree.cpp'; then $(CYGPATH_W) 'php_syntree.cpp'; else $(CYGPATH_W) '$(srcdir)/php_syntree.cpp'; fi` amuleweb-php_amule_lib.o: php_amule_lib.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-php_amule_lib.o -MD -MP -MF $(DEPDIR)/amuleweb-php_amule_lib.Tpo -c -o amuleweb-php_amule_lib.o `test -f 'php_amule_lib.cpp' || echo '$(srcdir)/'`php_amule_lib.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-php_amule_lib.Tpo $(DEPDIR)/amuleweb-php_amule_lib.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='php_amule_lib.cpp' object='amuleweb-php_amule_lib.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-php_amule_lib.o `test -f 'php_amule_lib.cpp' || echo '$(srcdir)/'`php_amule_lib.cpp amuleweb-php_amule_lib.obj: php_amule_lib.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-php_amule_lib.obj -MD -MP -MF $(DEPDIR)/amuleweb-php_amule_lib.Tpo -c -o amuleweb-php_amule_lib.obj `if test -f 'php_amule_lib.cpp'; then $(CYGPATH_W) 'php_amule_lib.cpp'; else $(CYGPATH_W) '$(srcdir)/php_amule_lib.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-php_amule_lib.Tpo $(DEPDIR)/amuleweb-php_amule_lib.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='php_amule_lib.cpp' object='amuleweb-php_amule_lib.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-php_amule_lib.obj `if test -f 'php_amule_lib.cpp'; then $(CYGPATH_W) 'php_amule_lib.cpp'; else $(CYGPATH_W) '$(srcdir)/php_amule_lib.cpp'; fi` amuleweb-php_core_lib.o: php_core_lib.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-php_core_lib.o -MD -MP -MF $(DEPDIR)/amuleweb-php_core_lib.Tpo -c -o amuleweb-php_core_lib.o `test -f 'php_core_lib.cpp' || echo '$(srcdir)/'`php_core_lib.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-php_core_lib.Tpo $(DEPDIR)/amuleweb-php_core_lib.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='php_core_lib.cpp' object='amuleweb-php_core_lib.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-php_core_lib.o `test -f 'php_core_lib.cpp' || echo '$(srcdir)/'`php_core_lib.cpp amuleweb-php_core_lib.obj: php_core_lib.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -MT amuleweb-php_core_lib.obj -MD -MP -MF $(DEPDIR)/amuleweb-php_core_lib.Tpo -c -o amuleweb-php_core_lib.obj `if test -f 'php_core_lib.cpp'; then $(CYGPATH_W) 'php_core_lib.cpp'; else $(CYGPATH_W) '$(srcdir)/php_core_lib.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/amuleweb-php_core_lib.Tpo $(DEPDIR)/amuleweb-php_core_lib.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='php_core_lib.cpp' object='amuleweb-php_core_lib.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(amuleweb_CPPFLAGS) $(CPPFLAGS) $(amuleweb_CXXFLAGS) $(CXXFLAGS) -c -o amuleweb-php_core_lib.obj `if test -f 'php_core_lib.cpp'; then $(CYGPATH_W) 'php_core_lib.cpp'; else $(CYGPATH_W) '$(srcdir)/php_core_lib.cpp'; fi` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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 CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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: -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) 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 "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic 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 pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS php_parser.c: php_parser.y bison --debug -t -d -v -p php -o $@ $< php_lexer.c: php_lexer.l $(LEX) -P php -o$@ $< @NEED_RC_TRUE@.rc.$(OBJEXT): @NEED_RC_TRUE@ $(RC) $(MULERCFLAGS) -I$(top_srcdir) $(RCFLAGS) -O COFF -i "$<" -o "$@" @NEED_RC_TRUE@amuleweb-version.rc: $(top_builddir)/version.rc @NEED_RC_TRUE@ @sed -e 's/VER_FILEDESCRIPTION_STR/"aMule Web Server"/' \ @NEED_RC_TRUE@ -e 's/VER_INTERNALNAME_STR/"amuleweb"/' \ @NEED_RC_TRUE@ -e 's/VER_ORIGINALFILENAME_STR/"amuleweb$(EXEEXT)"/' "$<" > "$@" # 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: amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/webserver/src/missing-template.html0000644000175000017500000000154611332327377025300 0ustar l3onl3on aMuleWeb error page

You seeing this page instead of aMuleWeb page because valid template has not been found.

This means that there's problem with aMule installation

  • Before installation please ensure that you uninstalled previous versions of amule
  • If you installing by recompiling from source, check configuration and run "make install" again
  • If you installing binary package, you may need to contact package maintainer

For more information please visit

aMule main site aMule forum

amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/webserver/src/php_lexer.l0000644000175000017500000001177012050266603023263 0ustar l3onl3on%{ // // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2005-2011 Froenchenko Leonid ( lfroen@gmail.com / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include "php_syntree.h" #include "php_parser.h" void php_set_input_buffer(char *buf, int len) { yy_delete_buffer(YY_CURRENT_BUFFER); yy_scan_bytes(buf, len); } int yywrap(); #define MAX_INCLUDE_DEPTH 10 YY_BUFFER_STATE php_include_stack[MAX_INCLUDE_DEPTH]; int php_include_stack_ptr = 0; int yywrap() { if ( --php_include_stack_ptr < 0 ) { return 1; } else { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer(php_include_stack[php_include_stack_ptr] ); } return 0; } %} %x BLOCK_COMMENT %x LINE_COMMENT %x INCLUDE %option stack %option yylineno DEC_NUM [0-9]+ FLOANUM ([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*) HEX_NUM "0x"[0-9a-fA-F]+ IDENT [a-zA-Z_][a-zA-Z0-9_]* EOL ("\r"|"\n"|"\r\n") %% "" return END_SCRIPT; "exit"|"die" return EXIT; "function" return FUNCTION; "const" return CONST; "return" return RETURN; "if" return IF; "else" return ELSE; "elseif" return ELSEIF; "endif" return ENDIF; "while" return WHILE; "endwhile" return ENDWHILE; "do" return DO; "for" return FOR; "endfor" return ENDFOR; "foreach" return FOREACH; "as" return AS; "endforeach" return ENDFOREACH; "switch" return SWITCH; "endswitch" return ENDSWITCH; "case" return CASE; "default" return DEFAULT; "break" return BREAK; "continue" return CONTINUE; "echo" return T_ECHO; "print" return PRINT; "new" return NEW; "->" return OBJECT_OPERATOR; "list" return LIST; "array" return ARRAY; "++" return INC; "--" return DEC; "=>" return HASH_ASSIGN; "or" return LOG_OR; "xor" return LOG_XOR; "and" return LOG_AND; "||" return BOOLEAN_OR; "&&" return BOOLEAN_AND; "+=" return PLUS_EQ; "-=" return MINUS_EQ; "*=" return MUL_EQ; "/=" return DIV_EQ; ".=" return CONCAT_EQ; "%=" return MOD_EQ; "&=" return AND_EQ; "|=" return OR_EQ; "^=" return XOR_EQ; "<<=" return SL_EQ; ">>=" return SR_EQ; "===" return IS_IDENTICAL; "!===" return IS_NOIDENTICAL; "==" return IS_EQ; "!=" return IS_NOEQUAL; "<=" return IS_SMALLER_OR_EQ; ">=" return IS_GREATER_OR_EQ; "global" return GLOBAL; "static" return STATIC; "include" BEGIN(INCLUDE); [ \t]* \'[a-zA-Z_][a-zA-Z0-9_\.\-]*\' { yytext[strlen(yytext)-1] = 0; if ( php_include_stack_ptr >= MAX_INCLUDE_DEPTH ) { fprintf( stderr, "WARNING: maximum include depth (which is %d) exceed", MAX_INCLUDE_DEPTH); } else { php_include_stack[php_include_stack_ptr++] = YY_CURRENT_BUFFER; yyin = fopen(yytext+1, "r"); if ( !yyin ) { printf("WARNING: include file [%s] can not be opened\n", yytext+1); } else { yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE )); } } BEGIN(INITIAL); } "("[ \t]*("int"|"integer")[ \t]*")" { return INT_CAST; } "("[ \t]*("real"|"double"|"float")[ \t]*")" { return DOUBLE_CAST; } "("[ \t]*"string"[ \t]*")" { return STRING_CAST; } "("[ \t]*("bool"|"boolean")[ \t]*")" { return BOOL_CAST; } "#"|"//" { BEGIN(LINE_COMMENT); yymore(); } [^\n\r]+ { yymore(); } {EOL} { BEGIN(INITIAL); } "/*" { BEGIN(BLOCK_COMMENT); yymore(); } "*/" { BEGIN(INITIAL); } "$"{IDENT} { phplval.exp_node = get_var_node(yytext+1); return VARIABLE; } {IDENT} { strcpy(phplval.str_val, yytext); return IDENT; } {HEX_NUM} { int val; sscanf(yytext, "0x%x", &val); phplval.exp_node = make_const_exp_dnum(val); return DNUMBER; } {DEC_NUM} { phplval.exp_node = make_const_exp_dnum(atoi(yytext)); return DNUMBER; } {FLOANUM} { phplval.exp_node = make_const_exp_fnum(atof(yytext)); return FNUMBER; } \"(\\.|[^\\"])*\" { yytext[strlen(yytext)-1] = 0; phplval.exp_node = make_const_exp_str(yytext+1, 1); return STRING; } \'(\\.|[^\\'])*\' { yytext[strlen(yytext)-1] = 0; phplval.exp_node = make_const_exp_str(yytext+1, 0); return STRING; } [ \t\v\n\r\f] { } . { return yytext[0]; } amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/webserver/src/WebSocket.h0000644000175000017500000000445412050266603023160 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 shakraw ( shakraw@users.sourceforge.net ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef WEBSOCKET_H #define WEBSOCKET_H #include "WebServer.h" #ifdef ENABLE_UPNP class CUPnPControlPoint; class CUPnPPortMapping; #endif class CWebServer; class CWebSocket : public wxSocketClient { public: CWebSocket(CWebServerBase *parent); void OnError(); void OnLost(); void OnInput(); void OnOutput(); void OnRequestReceived(char* pHeader, char* pData, uint32 dwDataLen); void SendContent(const char* szStdResponse, const void* pContent, uint32 dwContentSize); void SendData(const void* pData, uint32 dwDataSize); void SendHttpHeaders(const char * szType, bool use_gzip, uint32 content_len, int session_id); CWebServerBase *m_pParent; class CChunk { public: char* m_pData; char* m_pToSend; uint32 m_dwSize; CChunk* m_pNext; ~CChunk() { if (m_pData) delete[] m_pData; } }; CChunk *m_pHead; // tails of what has to be sent CChunk *m_pTail; bool m_IsGet, m_IsPost; char *m_Cookie; char *m_pBuf; uint32 m_dwBufSize; uint32 m_dwRecv; uint32 m_dwHttpHeaderLen; uint32 m_dwHttpContentLen; }; #endif //WEBSERVER_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/webserver/src/php_parser.y0000644000175000017500000003733012050266603023455 0ustar l3onl3on%{ // // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2005-2011 Froenchenko Leonid ( lfroen@gmail.com / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #include #include #include "php_syntree.h" int phplex(); // add item to syntree list PHP_SYN_NODE *add_statement_2_list(PHP_SYN_NODE *list, PHP_SYN_NODE *st) { if ( st && list) { PHP_SYN_NODE *last = list; while ( last->next_node ) { last = last->next_node; } last->next_node = st; return list; } else if ( st ) { return st; } else { return list; } } PHP_SYN_NODE *add_branch_2_elseif(PHP_SYN_NODE *list, PHP_SYN_NODE *branch) { if ( list ) { PHP_SYN_NODE *curr_if = list; while ( curr_if->node_if.code_else ) { curr_if = curr_if->node_if.code_else; } curr_if->node_if.code_else = branch; return list; } else { return branch; } } %} %union { PHP_SYN_NODE *syn_node; PHP_EXP_NODE *exp_node; char str_val[256]; } %type program_tree statement top_statement function_decl_statement top_statement_list %type global_var_list static_var_list %type while_statement foreach_statement for_statement elseif_list else_statement %type VARIABLE variable deref_variable global_var static_var %type parameter_list array_pair_list array_elem %type switch_case_list case_list case_list_item %type expr expr_list for_expr exit_expr const_value function_call func_param_list assignment_list assignment_list_element %type FNUMBER DNUMBER STRING %type IDENT optional_class_type /* All my tokens */ %token FNUMBER DNUMBER STRING IDENT VARIABLE %token T_ECHO %token EXIT %token IF DO WHILE ENDWHILE FOR ENDFOR FOREACH ENDFOREACH %token DECLARE ENDDECLARE AS CONST GLOBAL UNSET ISSET EMPTY %token SWITCH ENDSWITCH CASE DEFAULT BREAK CONTINUE %token FUNCTION RETURN %token CLASS INTERFACE EXTENDS IMPLEMENTS OBJECT_OPERATOR %token HASH_ASSIGN LIST ARRAY %token CLASS_SCOPE /* Things with precedence */ %left ',' %right PRINT %left '=' PLUS_EQ MINUS_EQ MUL_EQ DIV_EQ CONCAT_EQ MOD_EQ AND_EQ OR_EQ XOR_EQ SL_EQ SR_EQ %left '?' ':' %left LOG_OR %left LOG_XOR %left LOG_AND %left BOOLEAN_OR %left BOOLEAN_AND %left '|' %left '^' %left '&' %nonassoc IS_EQ IS_NOEQUAL IS_IDENTICAL IS_NOIDENTICAL %nonassoc '<' IS_SMALLER_OR_EQ '>' IS_GREATER_OR_EQ %left SL SR %left '+' '-' '.' %left '*' '/' '%' %right '!' %nonassoc INSTANCEOF %right '~' INC DEC INT_CAST DOUBLE_CAST STRING_CAST ARRAY_CAST OBJECT_CAST BOOL_CAST UNSET_CAST '@' %right '[' %nonassoc NEW CLONE %left ELSEIF %left ELSE %left ENDIF %right STATIC ABSTRACT FINAL PRIVATE PROTECTED PUBLIC %token START_SCRIPT END_SCRIPT %% /* Rules */ program_tree: START_SCRIPT top_statement_list END_SCRIPT { g_syn_tree_top = $2; } ; top_statement_list: top_statement_list top_statement { $$ = add_statement_2_list($1, $2); } | /* empty */ { $$ = 0; } ; top_statement: statement | START_SCRIPT top_statement_list END_SCRIPT { $$ = $2; } | function_decl_statement /* | class_decl_statement */ ; statement: '{' top_statement_list '}' { $$ = $2; } | expr ';' { $$ = make_expr_syn_node(PHP_ST_EXPR, $1); } | GLOBAL global_var_list ';' { $$ = 0; } | STATIC static_var_list ';' { $$ = $2; } | IF '(' expr ')' statement elseif_list else_statement { $$ = make_ifelse_syn_node($3, $5, $6, $7); } | WHILE '(' expr ')' while_statement { $$ = make_while_loop_syn_node($3, $5, 1); } | DO statement WHILE '(' expr ')' ';' { $$ = make_while_loop_syn_node($5, $2, 0); } | FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement { $$ = make_for_syn_node($3, $5, $7, $9); } | SWITCH '(' expr ')' switch_case_list { $$ = make_switch_syn_node($3, $5); } | CONTINUE ';' { $$ = make_expr_syn_node(PHP_ST_CONTINUE, 0); } | CONTINUE expr ';' { $$ = make_expr_syn_node(PHP_ST_CONTINUE, $2); } | BREAK ';' { $$ = make_expr_syn_node(PHP_ST_BREAK, 0); } | BREAK expr ';' { $$ = make_expr_syn_node(PHP_ST_BREAK, $2); } | RETURN ';' { $$ = make_expr_syn_node(PHP_ST_RET, 0); } | RETURN expr ';' { $$ = make_expr_syn_node(PHP_ST_RET, $2); } | T_ECHO expr_list ';' { $$ = make_expr_syn_node(PHP_ST_ECHO, $2); } | UNSET '(' variable_list ')' ';' { } | FOREACH '(' expr AS variable ')' foreach_statement { $$ = make_foreach_loop_syn_node($3, 0, $5, $7, 0); } | FOREACH '(' expr AS variable HASH_ASSIGN variable ')' foreach_statement { $$ = make_foreach_loop_syn_node($3, $5, $7, $9, 0); } | FOREACH '(' expr AS variable HASH_ASSIGN '&' variable ')' foreach_statement { $$ = make_foreach_loop_syn_node($3, $5, $8, $10, 1); } | DECLARE '(' decl_list ')' statement { } | DECLARE '(' decl_list ')' ':' top_statement_list ENDDECLARE { } | ';' { $$ = 0; } ; decl_list: IDENT '=' const_value { } | decl_list ',' IDENT '=' const_value { } ; expr_list: expr { $$ = make_exp_1(PHP_OP_LIST, 0); $$->exp_node = $1; } | expr_list ',' expr { PHP_EXP_NODE *last = $1; while ( last->next) last = last->next; last->next = make_exp_1(PHP_OP_LIST, 0); last->next->exp_node = $3; $$ = $1; } ; variable_list: variable | variable_list ',' variable ; /* This IS implemented. global_var/static itself initialize ptrs as needed */ global_var_list: global_var { $$ = 0; } | global_var_list ',' global_var { } ; global_var: VARIABLE { const char *varname = get_scope_var_name(g_current_scope, $1->var_si_node->var); PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, varname); PHP_SCOPE_ITEM *gsi = get_scope_item(g_global_scope, varname); if ( gsi && (gsi->type == PHP_SCOPE_VAR) ) { free_var_node(si->var); php_exp_tree_free($1); gsi->var->ref_count++; si->var = gsi->var; } else { php_report_error(PHP_ERROR, "There is no such global var"); } } ; static_var_list: static_var { $$ = 0; } | static_var_list ',' static_var { } ; static_var : VARIABLE { $1->var_node->flags |= PHP_VARFLAG_STATIC; $$ = $1; } | VARIABLE '=' const_value { $1->var_node->flags |= PHP_VARFLAG_STATIC; $$ = $1; value_value_assign(&$1->var_node->value, &$3->val_node); } ; function_decl_statement: FUNCTION IDENT { switch_push_scope_table(make_scope_table()) } '(' parameter_list ')' '{' top_statement_list '}' { $$ = make_func_decl_syn_node($2, $5); $$->func_decl->scope = g_current_scope; $$->func_decl->is_native = 0; $$->func_decl->code = $8; switch_pop_scope_table(0); add_func_2_scope(g_current_scope, $$); $$ = 0; } | FUNCTION '&' IDENT '(' parameter_list ')' '{' top_statement_list '}' { } ; parameter_list: optional_class_type VARIABLE { $$ = make_func_param(0, $2, $1, 0); } | optional_class_type '&' VARIABLE { $$ = make_func_param(0, $3, $1, 1); } | parameter_list ',' optional_class_type VARIABLE { $$ = make_func_param($1, $4, $3, 0); } | parameter_list ',' optional_class_type '&' VARIABLE { $$ = make_func_param($1, $5, $3, 1); } | /* empty */ { $$ = 0; } ; optional_class_type: /* empty */ { $$[0] = 0; } | IDENT ; for_statement: statement | ':' top_statement_list ENDFOR ';' { $$ = $2; } ; foreach_statement: statement | ':' top_statement_list ENDFOREACH ';' { $$ = $2; } ; for_expr: expr_list | /* empty */ { $$ = 0; } ; elseif_list: elseif_list ELSEIF '(' expr ')' statement { $$ = add_branch_2_elseif($1, make_ifelse_syn_node($4, $6, 0, 0)); } | /* empty */ { $$ = 0; } ; else_statement: /* empty */ { $$ = 0; } | ELSE statement { $$ = $2; } ; while_statement: statement | ':' top_statement_list ENDWHILE ';' { $$ = $2; } ; switch_case_list: '{' case_list '}' { $$ = $2; } | '{' ';' case_list '}' { $$ = $3; } | ':' case_list ENDSWITCH ';' { $$ = $2; } | ':' ';' case_list ENDSWITCH ';' { $$ = $3; } ; case_list: /* empty */ { $$ = 0; } | case_list case_list_item case_separator top_statement_list { $2->tree_node.syn_right = $4; if ( $1 ) { PHP_EXP_NODE *last = $1; while ( last->next) last = last->next; last->next = make_exp_1(PHP_OP_LIST, 0); last->next->exp_node = $2; $$ = $1; } else { $$ = make_exp_1(PHP_OP_LIST, 0); $$->exp_node = $2; } } ; case_list_item: CASE expr { $$ = make_exp_2(PHP_OP_LIST, $2, 0); } | DEFAULT { $$ = make_exp_2(PHP_OP_LIST, 0, 0); } ; case_separator: ':' | ';' ; const_value: FNUMBER | DNUMBER | STRING | IDENT { $$ = make_known_const($1); } ; variable: deref_variable | IDENT CLASS_SCOPE IDENT { $$ = make_exp_2(PHP_OP_CLASS_DEREF, make_const_exp_str($1, 0), make_const_exp_str($3, 0)); } | deref_variable OBJECT_OPERATOR IDENT { $$ = make_exp_2(PHP_OP_OBJECT_DEREF, $1, make_const_exp_str($3, 0)); } ; deref_variable: VARIABLE | deref_variable '[' ']' { $$ = make_exp_2(PHP_OP_ARRAY_BY_KEY, $1, 0); } | deref_variable '[' expr ']' { $$ = make_exp_2(PHP_OP_ARRAY_BY_KEY, $1, $3);} | deref_variable '{' expr '}' { $$ = make_exp_2(PHP_OP_ARRAY_BY_KEY, $1, $3);} | '$' '{' expr '}' { $$ = make_exp_1(PHP_OP_VAR_BY_EXP, $3); } ; function_call: IDENT '(' func_param_list ')' { $$ = make_func_call_exp($1, $3); } | deref_variable CLASS_SCOPE IDENT '(' func_param_list ')' { } | deref_variable OBJECT_OPERATOR IDENT '(' func_param_list ')' { } ; func_param_list: expr { $$ = make_func_call_param_list(); func_call_add_expr($$->var_node, $1, 0); } | '&' variable { $$ = make_func_call_param_list(); func_call_add_expr($$->var_node, $2, 1); } | func_param_list ',' expr { $$ = $1; func_call_add_expr($$->var_node, $3, 0); } | func_param_list ',' '&' variable { $$ = $1; func_call_add_expr($$->var_node, $4, 1); } | /* empty */ { $$ = make_func_call_param_list(); } ; expr: LIST '(' assignment_list ')' '=' expr { } | variable | variable '=' expr { $$ = make_exp_2(PHP_OP_ASS, $1, $3); } | function_call { $$ = $1; } | variable '=' '&' variable { $$ = make_exp_2(PHP_MAKE_REF, $1, $4); } /* | NEW class_name_reference ctor_arguments { } | CLONE expr { } */ | variable PLUS_EQ expr { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_ADD, $1, $3)); } | variable MINUS_EQ expr { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_SUB, $1, $3)); } | variable MUL_EQ expr { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_MUL, $1, $3)); } | variable DIV_EQ expr { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_DIV, $1, $3)); } | variable CONCAT_EQ expr { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_CAT, $1, $3)); } | variable MOD_EQ expr { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_REM, $1, $3)); } | variable AND_EQ expr { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_AND, $1, $3)); } | variable OR_EQ expr { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_OR, $1, $3)); } | variable XOR_EQ expr { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_XOR, $1, $3)); } | variable SL_EQ expr { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_SHL, $1, $3)); } | variable SR_EQ expr { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_SHR, $1, $3)); } /* ++var and var++ looks same to me */ | variable INC { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_ADD, $1, make_const_exp_dnum(1))); } | INC variable { $$ = make_exp_2_self(PHP_OP_ASS, $2, make_exp_2(PHP_OP_ADD, $2, make_const_exp_dnum(1))); } | variable DEC { $$ = make_exp_2_self(PHP_OP_ASS, $1, make_exp_2(PHP_OP_SUB, $1, make_const_exp_dnum(1))); } | DEC variable { $$ = make_exp_2_self(PHP_OP_ASS, $2, make_exp_2(PHP_OP_SUB, $2, make_const_exp_dnum(1))); } | expr BOOLEAN_OR expr { $$ = make_exp_2(PHP_OP_LOG_OR, $1, $3); } | expr BOOLEAN_AND expr { $$ = make_exp_2(PHP_OP_LOG_AND, $1, $3); } | expr LOG_OR expr { $$ = make_exp_2(PHP_OP_LOG_OR, $1, $3); } | expr LOG_AND expr { $$ = make_exp_2(PHP_OP_LOG_AND, $1, $3); } | expr LOG_XOR expr { $$ = make_exp_2(PHP_OP_LOG_XOR, $1, $3); } | expr '|' expr { $$ = make_exp_2(PHP_OP_OR, $1, $3); } | expr '&' expr { $$ = make_exp_2(PHP_OP_AND, $1, $3); } | expr '^' expr { $$ = make_exp_2(PHP_OP_XOR, $1, $3); } | expr '.' expr { $$ = make_exp_2(PHP_OP_CAT, $1, $3); } | expr '+' expr { $$ = make_exp_2(PHP_OP_ADD, $1, $3); } | expr '-' expr { $$ = make_exp_2(PHP_OP_SUB, $1, $3); } | expr '*' expr { $$ = make_exp_2(PHP_OP_MUL, $1, $3); } | expr '/' expr { $$ = make_exp_2(PHP_OP_DIV, $1, $3); } | expr '%' expr { $$ = make_exp_2(PHP_OP_REM, $1, $3); } | expr SL expr { $$ = make_exp_2(PHP_OP_SHL, $1, $3); } | expr SR expr { $$ = make_exp_2(PHP_OP_SHR, $1, $3); } | '+' expr { $$ = $2; } | '-' expr { $$ = make_exp_2(PHP_OP_SUB, make_const_exp_dnum(0), $2); } | '!' expr { $$ = make_exp_1(PHP_OP_LOG_NOT, $2); } | '~' expr { $$ = make_exp_1(PHP_OP_NOT, $2); } | expr IS_IDENTICAL expr { $$ = make_exp_2(PHP_OP_SAME, $1, $3); } | expr IS_NOIDENTICAL expr { $$ = make_exp_2(PHP_OP_NOT_SAME, $1, $3); } | expr IS_EQ expr { $$ = make_exp_2(PHP_OP_EQ, $1, $3); } | expr IS_NOEQUAL expr { $$ = make_exp_2(PHP_OP_NEQ, $1, $3); } | expr '<' expr { $$ = make_exp_2(PHP_OP_LWR, $1, $3); } | expr IS_SMALLER_OR_EQ expr { $$ = make_exp_2(PHP_OP_LWR_EQ, $1, $3); } | expr '>' expr { $$ = make_exp_2(PHP_OP_GRT, $1, $3); } | expr IS_GREATER_OR_EQ expr { $$ = make_exp_2(PHP_OP_GRT_EQ, $1, $3); } | '(' expr ')' { $$ = $2; } | expr '?' expr ':' expr { $$ = make_exp_2(PHP_OP_MUX, $3, $5); $$->exp_node = $1; } | INT_CAST expr { $$ = make_exp_1(PHP_OP_CAST_INT, $2); } | DOUBLE_CAST expr { $$ = make_exp_1(PHP_OP_CAST_FLOAT, $2); } | STRING_CAST expr { $$ = make_exp_1(PHP_OP_CAST_STR, $2); } | BOOL_CAST expr { $$ = make_exp_1(PHP_OP_CAST_BOOL, $2); } /* | ARRAY_CAST expr { } */ /* | OBJECT_CAST expr { } */ | UNSET_CAST expr { } | EXIT exit_expr { } | '@' expr { $$ = $2; } | const_value { $$ = $1; } | ARRAY '(' array_pair_list ')' { $$ = make_exp_1(PHP_OP_ARRAY, $3); } | PRINT expr { $$ = make_exp_1(PHP_OP_PRINT, $2); } ; exit_expr: '(' expr ')' { $$ = $2; } | '(' ')' { $$ = 0; } | /* empty */ { $$ = 0; } ; assignment_list: assignment_list_element | assignment_list ',' assignment_list_element ; assignment_list_element: variable { /*$$ = make_assign_node($1);*/ } | LIST '(' assignment_list ')' { $$ = $3; } | /* empty */ { /*$$ = make_assign_node(0);*/ } ; array_pair_list: array_elem { $$ = make_exp_1(PHP_OP_LIST, 0); $$->exp_node = $1; } | array_pair_list ',' array_elem { PHP_EXP_NODE *last = $1; while ( last->next) last = last->next; last->next = make_exp_1(PHP_OP_LIST, 0); last->next->exp_node = $3; $$ = $1; } ; array_elem : expr { $$ = make_exp_1(PHP_OP_ARRAY_PAIR, $1); } | expr HASH_ASSIGN expr { $$ = make_exp_2(PHP_OP_ARRAY_PAIR, $1, $3); } | expr HASH_ASSIGN '&' variable { $$ = make_exp_2(PHP_OP_ARRAY_REF_PAIR, $1, $4); } | '&' variable { $$ = make_exp_1(PHP_OP_ARRAY_REF_PAIR, $2); } ; amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/webserver/src/php_amule_lib_standalone.cpp0000644000175000017500000003766012050266603026642 0ustar l3onl3on// // This file is part of the aMule Project. // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2005-2011 Froenchenko Leonid ( lfroen@gmail.com / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // // // This file is NOT part of aMule build. It's used solely for testing PHP engine // in separate build // #include // Do_not_auto_remove (g++-4.0.1) #include #include #include #define PACKAGE_VERSION "standalone" #include #include #include #include "php_syntree.h" #include "php_core_lib.h" void php_native_shared_file_cmd(PHP_VALUE_NODE *) { PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0"); if ( !si || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 1"); return; } char *str_hash = si->var->value.str_val; si = get_scope_item(g_current_scope, "__param_1"); if ( !si || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 2"); return; } char *cmd_name = si->var->value.str_val; si = get_scope_item(g_current_scope, "__param_2"); PHP_VAR_NODE *opt_param = si ? si->var : 0; if ( !strcmp(cmd_name, "prio") && !opt_param ) { php_report_error(PHP_ERROR, "Command 'prio' need 3-rd argument"); return; } printf("php_native_shared_file_cmd: hash=%s cmd=%s\n", str_hash, cmd_name); } void php_native_reload_shared_file_cmd(PHP_VALUE_NODE *) { printf("php_native_reload_shared_file_cmd\n"); } /* * * Usage: php_native_download_file_cmd($file_hash, "command", $optional_arg) * */ void php_native_download_file_cmd(PHP_VALUE_NODE *) { PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0"); if ( !si || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 1"); return; } char *str_hash = si->var->value.str_val; si = get_scope_item(g_current_scope, "__param_1"); if ( !si || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 2"); return; } char *cmd_name = si->var->value.str_val; si = get_scope_item(g_current_scope, "__param_2"); PHP_VAR_NODE *opt_param = si ? si->var : 0; if ( (!strcmp(cmd_name, "prio") || !strcmp(cmd_name, "setcat")) && !opt_param ) { php_report_error(PHP_ERROR, "Commands 'prio' and 'setcat' needs 3-rd argument"); return; } printf("php_native_download_file_cmd: hash=%s cmd=%s\n", str_hash, cmd_name); } /* * Usage amule_kad_connect($bootstrap_ip, $bootstrap_port) */ void php_native_kad_connect(PHP_VALUE_NODE *) { PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0"); if ( !si ) { php_report_error(PHP_ERROR, "Missing or bad argument 1: $bootstrap_ip_addr"); return; } cast_value_dnum(&si->var->value); unsigned int ipaddr = si->var->value.int_val; si = get_scope_item(g_current_scope, "__param_1"); if ( !si ) { php_report_error(PHP_ERROR, "Missing or bad argument 2: $bootstrap_ip_port"); return; } cast_value_dnum(&si->var->value); unsigned int ipport = si->var->value.int_val; printf("php_native_kad_connect: ip=%08x port=%d\n", ipaddr, ipport); } void php_native_kad_disconnect(PHP_VALUE_NODE *) { printf("php_native_kad_disconnect\n"); } /* * Usage amule_add_server_cmd($server_addr, $server_port, $server_name); */ void php_native_add_server_cmd(PHP_VALUE_NODE *) { PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0"); if ( !si || (si->var->value.type != PHP_VAL_STRING) ) { php_report_error(PHP_ERROR, "Missing or bad argument 1: $server_addr"); return; } char *addr = si->var->value.str_val; si = get_scope_item(g_current_scope, "__param_1"); if ( !si ) { php_report_error(PHP_ERROR, "Missing argument 2: $server_port"); return; } cast_value_dnum(&si->var->value); int port = si->var->value.int_val; si = get_scope_item(g_current_scope, "__param_2"); if ( !si || (si->var->value.type != PHP_VAL_STRING) ) { php_report_error(PHP_ERROR, "Invalid or missing argument 3: $server_name"); return; } char *name = si->var->value.str_val; printf("php_native_add_server_cmd: addr=%s port=%04d name=%s\n", addr, port, name); } /* * Usage amule_server_cmd($server_ip, $server_port, "command"); */ void php_native_server_cmd(PHP_VALUE_NODE *) { PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0"); if ( !si ) { php_report_error(PHP_ERROR, "Missing argument 1: $server_ip"); return; } cast_value_dnum(&si->var->value); uint32_t ip = si->var->value.int_val; si = get_scope_item(g_current_scope, "__param_1"); if ( !si ) { php_report_error(PHP_ERROR, "Missing argument 2: $server_port"); return; } cast_value_dnum(&si->var->value); int port = si->var->value.int_val; si = get_scope_item(g_current_scope, "__param_2"); if ( !si || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 3: $command"); return; } char *cmd = si->var->value.str_val; printf("php_native_server_cmd: ip=%08x port=%04d cmd=%s\n", ip, port, cmd); } /* * Query amule status. Return hash containing stats values */ void php_get_amule_stats(PHP_VALUE_NODE *result) { cast_value_array(result); PHP_VAR_NODE *id = array_get_by_str_key(result, "id"); cast_value_dnum(&id->value); id->value.int_val = 1234567; } void php_get_amule_categories(PHP_VALUE_NODE *result) { cast_value_array(result); for (int i = 0; i < 5; i++) { PHP_VAR_NODE *cat = array_get_by_int_key(result, i); value_value_free(&cat->value); cat->value.type = PHP_VAL_STRING; cat->value.str_val = strdup("some_cat"); } } /* * Return hash of amule options. * Key: option name * Value: option value (string) */ void php_get_amule_options(PHP_VALUE_NODE *result) { cast_value_array(result); } /* * Set amule options from given array. Argument looks like "amule_get_options" result */ void php_set_amule_options(PHP_VALUE_NODE *) { PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0"); if ( !si || (si->var->value.type != PHP_VAL_ARRAY)) { php_report_error(PHP_ERROR, "Invalid or missing argument 1 (options array)"); return; } } /* * Download 1 of search results. Params: hash, category (default=0) */ void php_native_search_download_cmd(PHP_VALUE_NODE *) { PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0"); if ( !si || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 1 (file hash)"); return; } char *str_hash = si->var->value.str_val; si = get_scope_item(g_current_scope, "__param_1"); if ( !si || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 2 (category)"); return; } cast_value_dnum(&si->var->value); int cat = si->var->value.int_val; printf("php_native_search_download_cmd: hash=%s category=%d\n", str_hash, cat); } void php_native_search_start_cmd(PHP_VALUE_NODE *) { PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0"); if ( !si || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 1 (search term)"); return; } char *search = si->var->value.str_val; if ( !(si = get_scope_item(g_current_scope, "__param_1")) || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 2 (file extension)"); return; } char *ext = si->var->value.str_val; if ( !(si = get_scope_item(g_current_scope, "__param_2")) || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 3 (file type)"); return; } char *type = si->var->value.str_val; if ( !(si = get_scope_item(g_current_scope, "__param_3")) ) { php_report_error(PHP_ERROR, "Invalid or missing argument 4 (search type)"); return; } cast_value_dnum(&si->var->value); if ( !(si = get_scope_item(g_current_scope, "__param_4")) ) { php_report_error(PHP_ERROR, "Invalid or missing argument 5 (availability)"); return; } cast_value_dnum(&si->var->value); int avail = si->var->value.int_val; if ( !(si = get_scope_item(g_current_scope, "__param_5")) ) { php_report_error(PHP_ERROR, "Invalid or missing argument 6 (min size)"); return; } cast_value_dnum(&si->var->value); int min_size = si->var->value.int_val; if ( !(si = get_scope_item(g_current_scope, "__param_6")) ) { php_report_error(PHP_ERROR, "Invalid or missing argument 7 (max size)"); return; } cast_value_dnum(&si->var->value); int max_size = si->var->value.int_val; printf("php_native_search_start_cmd: search=%s \n", search); } /* * Request contents of log */ void php_get_log(PHP_VALUE_NODE *result) { value_value_free(result); PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0"); bool rst; if ( !si ) { rst = false; } else { cast_value_dnum(&si->var->value); rst = si->var->value.int_val != 0; } printf("php_get_log: reset=%d\n", rst); } /* * Request contents of server info */ void php_get_serverinfo(PHP_VALUE_NODE *result) { value_value_free(result); PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0"); bool rst; if ( !si ) { rst = false; } else { cast_value_dnum(&si->var->value); rst = si->var->value.int_val != 0; } printf("php_get_serverinfo: reset=%d\n", rst); } /* * Download ed2k link. Params: link, category (default=0) */ void php_native_ed2k_download_cmd(PHP_VALUE_NODE *result) { PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0"); if ( !si || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 1 (file link)"); return; } char *str_link = si->var->value.str_val; si = get_scope_item(g_current_scope, "__param_1"); if ( !si || (si->var->value.type != PHP_VAL_STRING)) { php_report_error(PHP_ERROR, "Invalid or missing argument 2 (category)"); return; } cast_value_dnum(&si->var->value); int cat = si->var->value.int_val; printf("php_native_search_download_cmd: hash=%s category=%d\n", str_link, cat); } void amule_fake_obj_array_create(int count, char *class_name, PHP_VALUE_NODE *result) { for (int i = 0; i < count; i++) { PHP_VAR_NODE *var = array_push_back(result); var->value.type = PHP_VAL_OBJECT; var->value.obj_val.class_name = class_name; var->value.obj_val.inst_ptr = 0; } } void amule_load_downloads(PHP_VALUE_NODE *result) { amule_fake_obj_array_create(10, "AmuleDownloadFile", result); } void amule_load_servers(PHP_VALUE_NODE *result) { amule_fake_obj_array_create(20, "AmuleServer", result); } void amule_load_shared(PHP_VALUE_NODE *result) { amule_fake_obj_array_create(15, "AmuleSharedFile", result); } void amule_load_search(PHP_VALUE_NODE *result) { amule_fake_obj_array_create(35, "AmuleSearchFile", result); } void amule_load_uploads(PHP_VALUE_NODE *result) { amule_fake_obj_array_create(17, "AmuleUploadFile", result); } void amule_load_stats() { } void amule_load_stats_tree(PHP_VALUE_NODE *) { } void php_native_load_amule_vars(PHP_VALUE_NODE *result) { PHP_SCOPE_ITEM *si_str = get_scope_item(g_current_scope, "__param_0"); if ( !si_str ) { php_report_error(PHP_ERROR, "Missing argument 'varname' for 'load_amule_vars'"); return; } PHP_VALUE_NODE *str = &si_str->var->value; if ( str->type != PHP_VAL_STRING ) { php_report_error(PHP_ERROR, "Argument 'varname' for 'load_amule_vars' must be string"); return; } char *varname = str->str_val; if ( result ) { cast_value_array(result); } if ( strcmp(varname, "downloads") == 0 ) { amule_load_downloads(result); } else if ( strcmp(varname, "uploads") == 0 ) { amule_load_uploads(result); } else if ( strcmp(varname, "shared") == 0 ) { amule_load_shared(result); } else if ( strcmp(varname, "searchresult") == 0 ) { amule_load_search(result); } else if ( strcmp(varname, "servers") == 0 ) { amule_load_servers(result); } else if ( strcmp(varname, "stats_graph") == 0 ) { amule_load_stats(); } else if ( strcmp(varname, "stats_tree") == 0 ) { amule_load_stats_tree(result); } else { value_value_free(result); php_report_error(PHP_ERROR, "This type of amule variable is unknown"); } } /* * Amule objects implementations */ void amule_fake_prop_get(void *obj, char *prop_name, PHP_VALUE_NODE *result) { if ( !strcmp(prop_name, "name") || !strcmp(prop_name, "hash") ) { result->type = PHP_VAL_STRING; result->str_val = strdup("some_str"); } else { result->type = PHP_VAL_INT; result->int_val = 10; } } void amule_download_file_prop_get(void *obj, char *prop_name, PHP_VALUE_NODE *result) { amule_fake_prop_get(obj, prop_name, result); } void amule_upload_file_prop_get(void *obj, char *prop_name, PHP_VALUE_NODE *result) { amule_fake_prop_get(obj, prop_name, result); } void amule_server_prop_get(void *obj, char *prop_name, PHP_VALUE_NODE *result) { amule_fake_prop_get(obj, prop_name, result); } void amule_shared_file_prop_get(void *obj, char *prop_name, PHP_VALUE_NODE *result) { amule_fake_prop_get(obj, prop_name, result); } void amule_search_file_prop_get(void *obj, char *prop_name, PHP_VALUE_NODE *result) { amule_fake_prop_get(obj, prop_name, result); } void amule_version(PHP_VALUE_NODE *val) { if ( !val ) { return; } value_value_free(val); val->type = PHP_VAL_STRING; val->str_val = strdup(PACKAGE_VERSION); } PHP_BLTIN_FUNC_DEF amule_lib_funcs[] = { { "amule_load_vars", 1, php_native_load_amule_vars, }, { "amule_get_stats", 0, php_get_amule_stats, }, { "amule_get_categories", 0, php_get_amule_categories, }, { "amule_get_options", 0, php_get_amule_options, }, { "amule_set_options", 1, php_set_amule_options, }, { "amule_do_server_cmd", 3, php_native_server_cmd, }, { "amule_do_add_server_cmd", 3, php_native_add_server_cmd, }, { "amule_do_download_cmd", 3, php_native_download_file_cmd, }, { "amule_do_shared_cmd", 3, php_native_shared_file_cmd, }, { "amule_do_reload_shared_cmd", 0, php_native_reload_shared_file_cmd, }, { "amule_do_search_download_cmd", 2, php_native_search_download_cmd, }, { "amule_do_search_start_cmd", 7, php_native_search_start_cmd, }, { "amule_do_ed2k_download_cmd", 2, php_native_ed2k_download_cmd, }, { "amule_get_log", 1, php_get_log, }, { "amule_get_serverinfo", 1, php_get_serverinfo, }, { "amule_get_version", 0, amule_version, }, { 0, 0, 0, }, }; void php_init_amule_lib() { // load function definitions PHP_BLTIN_FUNC_DEF *curr_def = amule_lib_funcs; while ( curr_def->name ) { php_add_native_func(curr_def); curr_def++; } // load object definitions php_add_native_class("AmuleDownloadFile", amule_download_file_prop_get); php_add_native_class("AmuleUploadFile", amule_upload_file_prop_get); php_add_native_class("AmuleServer", amule_server_prop_get); php_add_native_class("AmuleSharedFile", amule_shared_file_prop_get); php_add_native_class("AmuleSearchFile", amule_search_file_prop_get); } int main(int argc, char *argv[]) { const char *filename = ( argc == 2 ) ? argv[1] : "test.php"; CWriteStrBuffer buffer; //phpdebug = 0; CPhpFilter php_filter((CWebServerBase*)0, (CSession *)0,filename, &buffer); int size = buffer.Length(); char *buf = new char [size+1]; buffer.CopyAll(buf); printf("%s", buf); delete [] buf; return 0; } // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/webserver/src/WebServer.h0000644000175000017500000004667612050266603023212 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifndef WEBSERVER_H #define WEBSERVER_H #ifdef WITH_LIBPNG #include #endif #include "WebInterface.h" #include "KnownFile.h" #include "RLE.h" #include "OtherStructs.h" #include // Needed for CECID #ifdef ENABLE_UPNP # include "UPnPBase.h" #endif #include // For DownloadFile::wxtLastSeenComplete #ifdef _MSC_VER #define strncasecmp _strnicmp #define snprintf sprintf_s #define atoll _atoi64 #define strdup _strdup #endif class CWebSocket; class CMD4Hash; #define SESSION_TIMEOUT_SECS 300 // 5 minutes session expiration #define SHORT_FILENAME_LENGTH 40 // Max size of file name. wxString _SpecialChars(wxString str); class CEC_PartFile_Tag; class CEC_SharedFile_Tag; class CEC_UpDownClient_Tag; class CEC_SearchFile_Tag; class CProgressImage; class CEC_KadNode_Tag; class CURLDecoder { public: static wxString Decode(const wxString& url); }; class DownloadFile : public CECID { public: wxString sFileName; uint8 nFileStatus; uint64 lFileSize; uint64 lFileCompleted; uint64 lFileTransferred; unsigned long lFileSpeed; long lSourceCount; long lNotCurrentSourceCount; long lTransferringSourceCount; long lSourceCountA4AF; double fCompleted; uint32 lFilePrio; bool bFileAutoPriority; wxString sFileHash; wxString sED2kLink; uint8 nCat; wxDateTime wxtLastSeenComplete; CMD4Hash nHash; CProgressImage *m_Image; PartFileEncoderData m_Encoder; ArrayOfUInts16 m_PartInfo; std::vector m_ReqParts; ArrayOfUInts64 m_Gaps; // container require this static class DownloadFileInfo *GetContainerInstance(); DownloadFile(CEC_PartFile_Tag *); void ProcessUpdate(CEC_PartFile_Tag *); uint32 ID() { return ECID(); } }; class SharedFile : public CECID { public: wxString sFileName; uint64 lFileSize; uint64 nFileTransferred; uint64 nFileAllTimeTransferred; uint16 nFileRequests; uint32 nFileAllTimeRequests; uint16 nFileAccepts; uint32 nFileAllTimeAccepts; uint8 nFilePriority; bool bFileAutoPriority; wxString sFileHash; wxString sED2kLink; CMD4Hash nHash; static class SharedFileInfo *GetContainerInstance(); SharedFile(CEC_SharedFile_Tag *); void ProcessUpdate(CEC_SharedFile_Tag *); uint32 ID() { return ECID(); } }; class ServerEntry { public: wxString sServerName; wxString sServerDescription; uint32 nServerIP; uint16 nServerPort; wxString sServerIP; int nServerUsers; int nServerMaxUsers; int nServerFiles; static class ServersInfo *GetContainerInstance(); uint32 ID() { return nServerIP; } }; // This is a client we are uploading to, not a file class UploadFile : public CECID { public: wxString sUserName; uint32 nTransferredUp; uint32 nTransferredDown; uint32 nSpeed; uint32 nUploadFile; // ECID of shared file uploading to client UploadFile(CEC_UpDownClient_Tag *tag); static class UploadsInfo *GetContainerInstance(); uint32 ID() { return ECID(); } }; class SearchFile : public CECID { public: wxString sFileName; uint64 lFileSize; CMD4Hash nHash; wxString sHash; long lSourceCount; bool bPresent; SearchFile(CEC_SearchFile_Tag *); void ProcessUpdate(CEC_SearchFile_Tag *); static class SearchInfo *GetContainerInstance(); uint32 ID() { return ECID(); } }; /*! * T - type of items in container */ template class ItemsContainer { protected: CamulewebApp *m_webApp; std::list m_items; void EraseAll() { m_items.erase(m_items.begin(), m_items.end()); } public: ItemsContainer(CamulewebApp *webApp) { m_webApp = webApp; } virtual ~ItemsContainer() { } int ItemCount() { return m_items.size(); } T *AddItem(T &item) { m_items.push_back(item); T *real_ptr = &(m_items.back()); return real_ptr; } /*! * Re-query server: refresh all dataset */ virtual bool ReQuery() = 0; typedef typename std::list::iterator ItemIterator; ItemIterator GetBeginIterator() { return m_items.begin(); } ItemIterator GetEndIterator() { return m_items.end(); } }; /*! * T - type of items in container * I - type of item ID * G - type of tag in EC */ template class UpdatableItemsContainer : public ItemsContainer { protected: // need duplicate list with a map, so check "do we already have" // will take O(log(n)) instead of O(n) // map will contain pointers to items in list std::map m_items_hash; public: UpdatableItemsContainer(CamulewebApp *webApp) : ItemsContainer(webApp) { } T *AddItem(T &item) { T *real_ptr = ItemsContainer::AddItem(item); m_items_hash[item.ID()] = real_ptr; return real_ptr; } T *GetByID(I id) { // avoid creating nodes return m_items_hash.count(id) ? m_items_hash[id] : NULL; } T * GetByHash(const CMD4Hash &fileHash) { T * ret = 0; // ADUNANZA BEGIN // Backport #if 0 for (typename std::map::iterator it = m_items_hash.begin(); it != m_items_hash.end(); it++) { #else for (typename std::map::iterator it = m_items_hash.begin(); it != m_items_hash.end(); ++it) { #endif // ADUNANZA END if (it->second->nHash == fileHash) { ret = it->second; break; } } return ret; } /*! * Process answer of update request, create list of new items for * full request later. Also remove items that no longer exist in core */ void ProcessUpdate(const CECPacket *reply, CECPacket *full_req, int req_type) { std::set core_files; // ADUNANZA BEGIN // Backport #if 0 for (CECPacket::const_iterator it = reply->begin(); it != reply->end(); it++) { #else for (CECPacket::const_iterator it = reply->begin(); it != reply->end(); ++it) { #endif // ADUNANZA END G *tag = (G *) & *it; core_files.insert(tag->ID()); if ( m_items_hash.count(tag->ID()) ) { T *item = m_items_hash[tag->ID()]; item->ProcessUpdate(tag); } else { full_req->AddTag(CECTag(req_type, tag->ID())); } } std::list del_ids; // ADUNANZA BEGIN // Backport #if 0 for(typename std::list::iterator j = this->m_items.begin(); j != this->m_items.end(); j++) { #else for(typename std::list::iterator j = this->m_items.begin(); j != this->m_items.end(); ++j) { #endif // ADUNANZA END if ( core_files.count(j->ID()) == 0 ) { // item may contain data that need to be freed externally, before // dtor is called and memory freed T *real_ptr = &*j; this->ItemDeleted(real_ptr); del_ids.push_back(j->ID()); } } // ADUNANZA BEGIN // Backport #if 0 for(typename std::list::iterator j = del_ids.begin(); j != del_ids.end(); j++) { #else for(typename std::list::iterator j = del_ids.begin(); j != del_ids.end(); ++j) { #endif // ADUNANZA END m_items_hash.erase(*j); // ADUNANZA BEGIN // Backport #if 0 for(typename std::list::iterator k = this->m_items.begin(); k != this->m_items.end(); k++) { #else for(typename std::list::iterator k = this->m_items.begin(); k != this->m_items.end(); ++k) { #endif // ADUNANZA END if ( *j == k->ID() ) { this->m_items.erase(k); break; } } } } void ProcessFull(const CECPacket *reply) { // ADUNANZA BEGIN // Backport #if 0 for (CECPacket::const_iterator it = reply->begin(); it != reply->end(); it++) { #else for (CECPacket::const_iterator it = reply->begin(); it != reply->end(); ++it) { #endif // ADUNANZA END G *tag = (G *) & *it; // initialize item data from EC tag T item(tag); T *real_ptr = AddItem(item); // initialize any external data that may depend on this item this->ItemInserted(real_ptr); } } bool DoRequery(int cmd, int tag) { CECPacket req_sts(cmd, EC_DETAIL_UPDATE); // // Phase 1: request status const CECPacket *reply = this->m_webApp->SendRecvMsg_v2(&req_sts); if ( !reply ) { return false; } // // Phase 2: update status, mark new files for subsequent query CECPacket req_full(cmd); ProcessUpdate(reply, &req_full, tag); delete reply; // Phase 3: request full info about files we don't have yet if ( req_full.HasChildTags() ) { reply = this->m_webApp->SendRecvMsg_v2(&req_full); if ( !reply ) { return false; } ProcessFull(reply); delete reply; } return true; } virtual void ItemDeleted(T *) { } virtual void ItemInserted(T *) { } }; class UploadsInfo : public ItemsContainer { public: // can be only one instance. static UploadsInfo *m_This; UploadsInfo(CamulewebApp *webApp); virtual bool ReQuery(); }; class ServersInfo : public ItemsContainer { public: // can be only one instance. static ServersInfo *m_This; ServersInfo(CamulewebApp *webApp); virtual bool ReQuery(); }; class SharedFileInfo : public UpdatableItemsContainer { public: // can be only one instance. static SharedFileInfo *m_This; SharedFileInfo(CamulewebApp *webApp); virtual bool ReQuery(); }; class SearchInfo : public UpdatableItemsContainer { public: static SearchInfo *m_This; SearchInfo(CamulewebApp *webApp); virtual bool ReQuery(); }; class CImageLib; class DownloadFileInfo : public UpdatableItemsContainer { CImageLib *m_ImageLib; // parameters of progress images wxString m_Template; int m_width, m_height; public: // can be only one instance. static DownloadFileInfo *m_This; DownloadFileInfo(CamulewebApp *webApp, CImageLib *imlib); void LoadImageParams(wxString &tpl, int width, int height); virtual bool ReQuery(); // container requirements void ItemInserted(DownloadFile *item); void ItemDeleted(DownloadFile *item); }; class CAnyImage { protected: unsigned char *m_data; int m_width, m_height; wxString m_name; int m_size, m_alloc_size; wxString m_Http; void Realloc(int size); void SetHttpType(wxString ext); public: CAnyImage(int size); CAnyImage(int width, int height); virtual ~CAnyImage(); const wxString& GetHTTP() const { return m_Http; } virtual unsigned char *RequestData(int &size); }; class CFileImage : public virtual CAnyImage { public: CFileImage(const wxString& name); bool OpenOk() { return m_size != 0; } }; class CImage3D_Modifiers { unsigned char *m_modifiers; int m_width; public: CImage3D_Modifiers(int width); ~CImage3D_Modifiers(); unsigned char operator[](int i) { return (i < m_width) ? m_modifiers[i] : 0; } }; class CProgressImage : public virtual CAnyImage { protected: DownloadFile *m_file; wxString m_template; // // Turn list of gaps, partstatus into array of color strips typedef struct Color_Gap_Struct : public Gap_Struct { uint32 color; } Color_Gap_Struct; // result of rendering - single line uint32 *m_ColorLine; void CreateSpan(); public: CProgressImage(int w, int h, wxString &tmpl, DownloadFile *file); ~CProgressImage(); const wxString &Name() { return m_name; } virtual wxString GetHTML() = 0; }; #ifdef WITH_LIBPNG // // Dynamic png image generation // class CDynPngImage : public virtual CAnyImage { public: CDynPngImage(int w, int h); ~CDynPngImage(); virtual unsigned char *RequestData(int &size); protected: png_bytep m_img_data; png_bytep *m_row_ptrs; static void png_write_fn(png_structp png_ptr, png_bytep data, png_size_t length); }; // // Dynamic png image generation from gap info class CDynProgressImage : public virtual CProgressImage, public virtual CDynPngImage { CImage3D_Modifiers m_modifiers; void DrawImage(); public: CDynProgressImage(int w, int h, wxString &tmpl, DownloadFile *file); ~CDynProgressImage(); virtual unsigned char *RequestData(int &size); virtual wxString GetHTML(); }; #else // // Fallback to original implementation class CDynProgressImage : public virtual CProgressImage { public: CDynProgressImage(int w, int h, wxString &tmpl, DownloadFile *file); virtual wxString GetHTML(); }; #endif // // Representing statistical sample for some parameter. Circular buffer // inside to avoid rellocations // class CStatsData { uint32 *m_data; uint32 m_max_value; int m_size; int m_start_index, m_end_index, m_curr_index; public: CStatsData(int size); ~CStatsData(); int Size() const { return m_size; } uint32 Max() const { return m_max_value; } uint32 GetFirst(); uint32 GetNext(); void PushSample(uint32 sample); }; class CStatsCollection { CStatsData *m_down_speed, *m_up_speed, *m_conn_number, *m_kad_count; // ADUNANZA BEGIN // Aggiungo anche noti KADU attivi CStatsData *m_activeKADU_count; // ADUNANZA END CamulewebApp *m_iface; double m_LastTimeStamp; int m_size; public: CStatsCollection(int size, CamulewebApp *iface); ~CStatsCollection(); CStatsData *DownloadSpeed() { return m_down_speed; } CStatsData *UploadSpeed() { return m_up_speed; } CStatsData *ConnCount() { return m_conn_number; } CStatsData *KadCount() { return m_kad_count; } // ADUNANZA BEGIN // Aggiungo anche noti KADU attivi inline CStatsData *ActiveKADUCount() { return m_activeKADU_count; } // ADUNANZA END void ReQuery(); }; #ifdef WITH_LIBPNG // // This gonna to represent data used to "write" numbers on // dynamically generated images. // Easiest way to represt numbers: 7-segments model // class CNumImageMask { png_bytep *m_row_mask_ptrs; int m_width, m_height; int m_v_segsize, m_h_segsize; // mask generation void DrawHorzLine(int off); void DrawVertLine(int offx, int offy); void DrawSegment(int id); static const int m_num_to_7_decode[10]; public: CNumImageMask(int number, int width, int height); ~CNumImageMask(); void Apply(png_bytep *image, int offx, int offy); }; class CDynStatisticImage : public virtual CDynPngImage { CStatsData *m_data; // size of "font" of imprinted numbers int m_num_font_w_size, m_num_font_h_size; int m_left_margin, m_bottom_margin; int m_y_axis_size; // hope nobody needs "define" for 10 ! CNumImageMask *m_digits[10]; // indicates whether data should be divided on 1024 before // drawing graph. bool m_scale1024; // // Prepared background // png_bytep m_background; png_bytep *m_row_bg_ptrs; void DrawImage(); public: CDynStatisticImage(int height, bool scale1024, CStatsData *data); ~CDynStatisticImage(); virtual unsigned char *RequestData(int &size); virtual wxString GetHTML(); }; #endif class CImageLib { typedef std::map ImageMap; ImageMap m_image_map; wxString m_image_dir; public: CImageLib(wxString image_dir); ~CImageLib(); CAnyImage *GetImage(const wxString &name); void AddImage(CAnyImage *img, const wxString &name); void RemoveImage(const wxString &name); }; class CParsedUrl { wxString m_path, m_file; std::map m_params; public: CParsedUrl(const wxString &url); const wxString &Path() { return m_path; } const wxString &File() { return m_file; } const wxString &Param(const wxString &key) { return m_params[key]; } void ConvertParams(std::map &); }; // Changing this to a typedef struct{} makes egcs compiler do it all wrong and crash on run struct ThreadData { CParsedUrl parsedURL; wxString sURL; int SessionID; CWebSocket *pSocket; }; enum { // Socket handlers ID_WEBLISTENSOCKET_EVENT = wxID_HIGHEST+123, // random safe ID ID_WEBCLIENTSOCKET_EVENT, }; #ifdef ENABLE_UPNP class CUPnPControlPoint; class CUPnPPortMapping; #endif class CWebServerBase : public wxEvtHandler { protected: wxSocketServer *m_webserver_socket; ServersInfo m_ServersInfo; SharedFileInfo m_SharedFileInfo; DownloadFileInfo m_DownloadFileInfo; UploadsInfo m_UploadsInfo; SearchInfo m_SearchInfo; CStatsCollection m_Stats; CImageLib m_ImageLib; virtual void ProcessURL(ThreadData) = 0; virtual void ProcessImgFileReq(ThreadData) = 0; int GzipCompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level); friend class CWebSocket; friend class CPhPLibContext; bool m_upnpEnabled; int m_upnpTCPPort; #ifdef ENABLE_UPNP CUPnPControlPoint *m_upnp; std::vector m_upnpMappings; #endif void OnWebSocketServerEvent(wxSocketEvent& event); void OnWebSocketEvent(wxSocketEvent& event); DECLARE_EVENT_TABLE(); public: CWebServerBase(CamulewebApp *webApp, const wxString& templateDir); virtual ~CWebServerBase() { } void Send_Discard_V2_Request(CECPacket *request); void StartServer(); void StopServer(); void Print(const wxString &s); long GetWSPrefs(); // // Command interface // void Send_ReloadSharedFile_Cmd(); void Send_SharedFile_Cmd(wxString file_hash, wxString cmd, uint32 opt_arg = 0); void Send_DownloadFile_Cmd(wxString file_hash, wxString cmd, uint32 opt_arg = 0); void Send_DownloadSearchFile_Cmd(wxString file_hash, uint8 cat); void Send_Server_Cmd(uint32 ip, uint16 port, wxString cmd); void Send_AddServer_Cmd(wxString addr, wxString port, wxString name); void Send_Search_Cmd(wxString search, wxString extention, wxString type, EC_SEARCH_TYPE search_type, uint32 avail, uint32 min_size, uint32 max_size); bool Send_DownloadEd2k_Cmd(wxString link, uint8 cat); void Reload_Stats() { m_Stats.ReQuery(); } CamulewebApp *webInterface; }; class CSession { public: bool m_loggedin; time_t m_last_access; std::map m_vars, m_get_vars; void LoadVars(CParsedUrl &url); }; /* * Script based webserver */ class CScriptWebServer : public CWebServerBase { wxString m_wwwroot; wxString m_index; char *ProcessHtmlRequest(const char *filename, long &size); char *ProcessPhpRequest(const char *filename, CSession *sess, long &size); char *GetErrorPage(const char *message, long &size); char *Get_404_Page(long &size); std::map m_sessions; CSession *CheckLoggedin(ThreadData &); protected: virtual void ProcessURL(ThreadData); virtual void ProcessImgFileReq(ThreadData); public: CScriptWebServer(CamulewebApp *webApp, const wxString& templateDir); ~CScriptWebServer(); }; class CNoTemplateWebServer : public CScriptWebServer { protected: virtual void ProcessURL(ThreadData); public: CNoTemplateWebServer(CamulewebApp *webApp); ~CNoTemplateWebServer(); }; #endif // WEBSERVER_H // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/webserver/src/php_syntree.h0000644000175000017500000003700312050266603023626 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // Copyright (c) 2005-2011 Froenchenko Leonid ( lfroen@gmail.com / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // /* * Syntax tree implementation for amule-PHP interpreter. */ #ifndef _PHP_SYNTREE_H_ #define _PHP_SYNTREE_H_ #ifndef __STDC_FORMAT_MACROS #define __STDC_FORMAT_MACROS #endif #ifdef _MSC_VER typedef unsigned __int64 uint64_t; #define YY_NO_UNISTD_H #else #include #endif #if !defined PRIu64 # if defined(__alpha__) || defined(__ia64__) || defined(__ppc64__) || defined(__x86_64__) \ || defined(__mips64__) || defined(__hppa64__) || defined(__sparc64__) # define PRIu64 "lu" # else # define PRIu64 "llu" # endif #endif typedef enum PHP_VALUE_TYPE { /* simple values */ PHP_VAL_NONE, PHP_VAL_INT, PHP_VAL_FLOAT, PHP_VAL_STRING, PHP_VAL_BOOL, /* both point to same map but meaning is different */ PHP_VAL_ARRAY, PHP_VAL_OBJECT, /* Internally used (not ref counted) data */ PHP_VAL_INT_DATA, /* ptr_val points to VAR_NODE */ PHP_VAL_VAR_NODE } PHP_VALUE_TYPE; typedef struct PHP_VALUE_NODE { PHP_VALUE_TYPE type; union { uint64_t int_val; double float_val; char *str_val; /* used for arrays and internal objects: * * array contain std::map of key:value pairs * * object contain internally interpreted data */ void *ptr_val; struct { void *inst_ptr; const char *class_name; } obj_val; }; } PHP_VALUE_NODE; /* * Flags for different variable types/usages */ #define PHP_VARFLAG_STATIC 0x0001 #define PHP_VARFLAG_GLOBAL 0x0002 #define PHP_VARFLAG_BYREF 0x0004 /* Data about variable. */ typedef struct PHP_VAR_NODE { PHP_VALUE_NODE value; /* php support references */ int ref_count; int flags; } PHP_VAR_NODE; /* Node in expression tree. Contain either (left op right) or (value) */ typedef enum PHP_EXP_OP { PHP_OP_VAR, PHP_OP_VAL, PHP_OP_ASS, /* dereference */ PHP_OP_ARRAY_BY_KEY, PHP_OP_VAR_BY_EXP, /* array construct */ PHP_OP_ARRAY, PHP_OP_ARRAY_PAIR, PHP_OP_ARRAY_REF_PAIR, /* object access "->" and "::" */ PHP_OP_OBJECT_DEREF, PHP_OP_CLASS_DEREF, /* casting */ PHP_OP_CAST_INT, PHP_OP_CAST_FLOAT, PHP_OP_CAST_BOOL, PHP_OP_CAST_STR, /* arithmetics */ PHP_OP_MUL, PHP_OP_DIV, PHP_OP_ADD, PHP_OP_SUB, PHP_OP_REM, /* str concat */ PHP_OP_CAT, /* bits */ PHP_OP_SHL, PHP_OP_SHR, PHP_OP_OR, PHP_OP_AND, PHP_OP_XOR, PHP_OP_NOT, /* logical */ PHP_OP_LOG_OR, PHP_OP_LOG_AND, PHP_OP_LOG_XOR, PHP_OP_LOG_NOT, /* compare */ PHP_OP_EQ, PHP_OP_NEQ, PHP_OP_SAME, PHP_OP_NOT_SAME, PHP_OP_GRT, PHP_OP_GRT_EQ, PHP_OP_LWR, PHP_OP_LWR_EQ, /* conditional assign (mux) */ PHP_OP_MUX, /* specials */ PHP_OP_FUNC_CALL, PHP_OP_PRINT, PHP_OP_ECHO, PHP_MAKE_REF, /* list of expressions */ PHP_OP_LIST, /* for "switch" list of cases */ PHP_OP_CASE } PHP_EXP_OP; struct PHP_EXP_NODE { PHP_EXP_OP op; union { struct { struct PHP_EXP_NODE *left; /* In the 'switch' statement expression points * to beginning of code*/ union { struct PHP_EXP_NODE *right; struct PHP_SYN_NODE *syn_right; }; } tree_node; struct PHP_EXP_NODE *next; }; union { PHP_VALUE_NODE val_node; // for "internal" variables, like function param list PHP_VAR_NODE *var_node; struct PHP_SCOPE_ITEM *var_si_node; struct PHP_EXP_NODE *exp_node; }; }; typedef struct PHP_EXP_NODE PHP_EXP_NODE; typedef struct PHP_LIST_ASSIGN_NODE PHP_LIST_ASSIGN_NODE; struct PHP_LIST_ASSIGN_NODE { int is_list; union { PHP_VAR_NODE *var; PHP_LIST_ASSIGN_NODE *list; }; PHP_LIST_ASSIGN_NODE *next_node; }; typedef struct PHP_FUNC_PARAM_ITEM PHP_FUNC_PARAM_ITEM; struct PHP_FUNC_PARAM_ITEM { char *name; char *class_name; int byref; PHP_FUNC_PARAM_ITEM *next_item; }; typedef struct PHP_SYN_NODE PHP_SYN_NODE; /* * Scope table: holding variable definition and declarations for * functions and classes * Can be present in several locations: * 1. Representing stack frame block, inside of called function * 2. As global scope - holder of global vars, classes and global functions * 3. At class scope - holder of class members * 4. Copied to class instanse * */ typedef enum PHP_SCOPE_ITEM_TYPE { PHP_SCOPE_NONE, PHP_SCOPE_VAR, PHP_SCOPE_FUNC, PHP_SCOPE_CLASS, PHP_SCOPE_PARAM } PHP_SCOPE_ITEM_TYPE; typedef struct PHP_SCOPE_ITEM { PHP_SCOPE_ITEM_TYPE type; union { PHP_VAR_NODE *var; PHP_SYN_NODE *func; PHP_SYN_NODE *class_decl; struct { PHP_VAR_NODE *var; int num; } param; }; } PHP_SCOPE_ITEM; /* thre's stl object behind it */ typedef void *PHP_SCOPE_TABLE; typedef void *PHP_SCOPE_STACK; /* Syntax tree node, representing 1 statement. */ typedef enum PHP_STATMENT_TYPE { PHP_ST_EXPR, PHP_ST_IF, PHP_ST_WHILE, PHP_ST_DO_WHILE, PHP_ST_FOR, PHP_ST_FOREACH, PHP_ST_SWITCH, PHP_ST_CONTINUE, PHP_ST_BREAK, PHP_ST_RET, PHP_ST_FUNC_DECL, PHP_ST_CLASS_DECL, PHP_ST_ECHO } PHP_STATMENT_TYPE; /* * Syntax tree constructs: regular statements and declarations */ typedef struct PHP_SYN_IF_NODE { PHP_EXP_NODE *cond; PHP_SYN_NODE *code_if, *code_else; } PHP_SYN_IF_NODE; typedef struct PHP_SYN_WHILE_NODE { PHP_EXP_NODE *cond; PHP_SYN_NODE *code; } PHP_SYN_WHILE_NODE; typedef struct PHP_SYN_FOR_NODE { PHP_EXP_NODE *do_start, *cond, *do_next; PHP_SYN_NODE *code; } PHP_SYN_FOR_NODE; typedef struct PHP_SYN_FOREACH_NODE { PHP_EXP_NODE *elems; PHP_SCOPE_ITEM *i_key; PHP_SCOPE_ITEM *i_val; PHP_SYN_NODE *code; int byref; } PHP_SYN_FOREACH_NODE; typedef struct PHP_SYN_SWITCH_NODE { PHP_EXP_NODE *cond; PHP_EXP_NODE *case_list; } PHP_SYN_SWITCH_NODE; /* for built-in or native functions */ typedef void (*PHP_NATIVE_FUNC_PTR)(PHP_VALUE_NODE *result); typedef struct PHP_FUNC_PARAM_DEF { char *class_name; int byref; PHP_VALUE_NODE def_value; /* * In PHP, user can choose per-call whether parameter is passed * by value of by reference. So, save ptr to original varnode, * for "byvalue" case since we don't have other lvalue to put in * that scope item. */ PHP_VAR_NODE *var; PHP_SCOPE_ITEM *si_var; } PHP_FUNC_PARAM_DEF; typedef struct PHP_SYN_FUNC_DECL_NODE { char *name; PHP_SCOPE_TABLE scope; int is_native; union { PHP_SYN_NODE *code; PHP_NATIVE_FUNC_PTR native_ptr; }; int param_count; PHP_FUNC_PARAM_DEF *params; } PHP_SYN_FUNC_DECL_NODE; /* * Evaluating $obj->some_field for built-in objects */ typedef void (*PHP_NATIVE_PROP_GET_FUNC_PTR)(void *obj, char *prop_name, PHP_VALUE_NODE *result); typedef struct PHP_SYN_CLASS_DECL_NODE { int is_native; char *name; union { PHP_SCOPE_TABLE decl_scope; PHP_NATIVE_PROP_GET_FUNC_PTR native_prop_get_ptr; }; } PHP_SYN_CLASS_DECL_NODE; struct PHP_SYN_NODE { PHP_STATMENT_TYPE type; union { PHP_EXP_NODE *node_expr; PHP_SYN_IF_NODE node_if; PHP_SYN_WHILE_NODE node_while; PHP_SYN_FOREACH_NODE node_foreach; PHP_SYN_FOR_NODE node_for; PHP_SYN_SWITCH_NODE node_switch; PHP_SYN_FUNC_DECL_NODE *func_decl; PHP_SYN_CLASS_DECL_NODE *class_decl; }; PHP_SYN_NODE *next_node; }; /* * Interface to lib of built-in functions, classes, variables */ /* * Using fixed size array will allow "in-place" definition * of built-in functions without pointer mess. * */ #define PHP_MAX_FUNC_PARAM 16 typedef struct PHP_BLTIN_FUNC_DEF { const char *name; int param_count; PHP_NATIVE_FUNC_PTR func; } PHP_BLTIN_FUNC_DEF; typedef enum PHP_MSG_TYPE { PHP_MESAGE, PHP_WARNING, PHP_ERROR, PHP_INTERNAL_ERROR } PHP_MSG_TYPE; #ifdef __cplusplus extern "C" { #endif /* * lex/yacc stuff */ int phperror(char *err); int phpparse(); extern int pphdebug; extern FILE *phpin; extern char *phptext; extern int phplineno; /* * Syntax tree interface to parser */ /* * Const expressions */ PHP_EXP_NODE *make_const_exp_dnum(int number); PHP_EXP_NODE *make_const_exp_fnum(float number); PHP_EXP_NODE *make_const_exp_str(char *s, int unescape); // exp node for internally handled data PHP_EXP_NODE *make_const_exp_int_obj(void *obj); /* casting functions */ void cast_value_dnum(PHP_VALUE_NODE *e); void cast_value_fnum(PHP_VALUE_NODE *e); void cast_value_str(PHP_VALUE_NODE *e); void cast_value_array(PHP_VALUE_NODE *e); void cast_value_bool(PHP_VALUE_NODE *e); void value_value_free(PHP_VALUE_NODE *val); void value_value_assign(PHP_VALUE_NODE *src, PHP_VALUE_NODE *dst); void var_node_free(PHP_VAR_NODE *var); /* array operations */ PHP_VAR_NODE *array_get_by_key(PHP_VALUE_NODE *array, PHP_VALUE_NODE *key); PHP_VAR_NODE *array_get_by_int_key(PHP_VALUE_NODE *array, int key); int array_is_key_here(PHP_VALUE_NODE *array, PHP_VALUE_NODE *key); int array_get_size(PHP_VALUE_NODE *array); PHP_VAR_NODE *array_push_back(PHP_VALUE_NODE *array); void array_add_to_int_key(PHP_VALUE_NODE *array, int key, PHP_VAR_NODE *node); void array_set_by_key(PHP_VALUE_NODE *array, PHP_VALUE_NODE *key, PHP_VAR_NODE *node); PHP_VAR_NODE *make_array_var(); // signle operand expression: // FIXME: prefix and postfix form not recognized PHP_EXP_NODE *make_exp_1(PHP_EXP_OP op, PHP_EXP_NODE *operand); PHP_EXP_NODE *make_exp_2(PHP_EXP_OP op, PHP_EXP_NODE *left, PHP_EXP_NODE *right); // this is for "OP=" forms PHP_EXP_NODE *make_exp_2_self(PHP_EXP_OP op, PHP_EXP_NODE *self, PHP_EXP_NODE *right); PHP_EXP_NODE *make_known_const(char *name); PHP_EXP_NODE *make_func_call_exp(char *func_name, PHP_EXP_NODE *args); // create func call param list PHP_EXP_NODE *make_func_call_param_list(); // add next argument to function call param list void func_call_add_expr(PHP_VAR_NODE *paramlist, PHP_EXP_NODE *arg, int byref); extern PHP_SYN_NODE *g_syn_tree_top; /* make syntax node for expression */ PHP_SYN_NODE *make_expr_syn_node(PHP_STATMENT_TYPE type, PHP_EXP_NODE *node); PHP_SYN_NODE *make_ifelse_syn_node(PHP_EXP_NODE *expr, PHP_SYN_NODE *then_node, PHP_SYN_NODE *elseif_list, PHP_SYN_NODE *else_node); PHP_SYN_NODE *make_while_loop_syn_node(PHP_EXP_NODE *cond, PHP_SYN_NODE *code, int do_while); PHP_SYN_NODE *make_foreach_loop_syn_node(PHP_EXP_NODE *elems, PHP_EXP_NODE *i_key, PHP_EXP_NODE *i_val, PHP_SYN_NODE *code, int byref); PHP_SYN_NODE *make_for_syn_node(PHP_EXP_NODE *start, PHP_EXP_NODE *cond, PHP_EXP_NODE *next, PHP_SYN_NODE *code); PHP_SYN_NODE *make_class_decl_syn_node(); PHP_SYN_NODE *make_func_decl_syn_node(const char *name, PHP_EXP_NODE *param_list); PHP_SYN_NODE *make_switch_syn_node(PHP_EXP_NODE *cond, PHP_EXP_NODE *case_list); // // add new item into function param list (in declaration ) // PHP_EXP_NODE *make_func_param(PHP_EXP_NODE *list, PHP_EXP_NODE *var_exp_node, char *class_name, int byref); PHP_VAR_NODE *make_var_node(); PHP_EXP_NODE *get_var_node(const char *name); // C can't call "delete" void free_var_node(PHP_VAR_NODE *v); /* scope table manipulation */ extern PHP_SCOPE_TABLE g_global_scope, g_current_scope; extern PHP_SCOPE_STACK g_scope_stack; PHP_SCOPE_TABLE make_scope_table(); void delete_scope_table(PHP_SCOPE_TABLE scope); void switch_push_scope_table(PHP_SCOPE_TABLE new_table); void switch_pop_scope_table(int old_free); void scope_reset_nonstatics(PHP_SCOPE_TABLE scope); void add_func_2_scope(PHP_SCOPE_TABLE scope, PHP_SYN_NODE *func); void add_class_2_scope(PHP_SCOPE_TABLE scope, PHP_SYN_NODE *class_node); PHP_SCOPE_ITEM *add_var_2_scope(PHP_SCOPE_TABLE scope, PHP_VAR_NODE *var, const char *name); const char *get_scope_var_name(PHP_SCOPE_TABLE scope, PHP_VAR_NODE *var); PHP_SCOPE_ITEM_TYPE get_scope_item_type(PHP_SCOPE_TABLE scope, const char *name); PHP_SCOPE_ITEM *get_scope_item(PHP_SCOPE_TABLE scope, const char *name); /* engine */ void php_engine_init(); void php_engine_free(); void php_syn_tree_free(PHP_SYN_NODE *tree); void php_exp_tree_free(PHP_EXP_NODE *tree); /* * Return code meaning: * 0 : continue execution to the next statement * +x : return and skip current loop cycle, as "continue expr" means * -x : return and break as "break expr" means * In non-loop situation any != 0 code means "return" */ int php_execute(PHP_SYN_NODE *node, PHP_VALUE_NODE *result); void php_expr_eval(PHP_EXP_NODE *expr, PHP_VALUE_NODE *result); PHP_VAR_NODE *php_expr_eval_lvalue(PHP_EXP_NODE *expr); void php_eval_simple_math(PHP_EXP_OP op, PHP_VALUE_NODE *op1, PHP_VALUE_NODE *op2, PHP_VALUE_NODE *result); void php_eval_int_math(PHP_EXP_OP op, PHP_VALUE_NODE *op1, PHP_VALUE_NODE *op2, PHP_VALUE_NODE *result); void php_eval_compare(PHP_EXP_OP op, PHP_VALUE_NODE *op1, PHP_VALUE_NODE *op2, PHP_VALUE_NODE *result); void php_add_native_func(PHP_BLTIN_FUNC_DEF *def); void php_add_native_class(const char *name, PHP_NATIVE_PROP_GET_FUNC_PTR prop_get_native_ptr); // // left = VAR(func_name), right=ARRAY(args) void php_run_func_call(PHP_EXP_NODE *node, PHP_VALUE_NODE *result); #ifdef __GNUC__ void php_report_error(PHP_MSG_TYPE mtype, const char *msg, ...) __attribute__ ((__format__ (__printf__, 2, 3))); #else void php_report_error(PHP_MSG_TYPE mtype, const char *msg, ...); #endif /* * Debugging */ void print_val_node(PHP_VALUE_NODE *node, int ident); void print_exp_node(PHP_EXP_NODE *node, int ident); void print_syn_node(PHP_SYN_NODE *node, int ident); #ifdef __cplusplus } #endif /* * C++ only functions, type definitions */ #ifdef __cplusplus typedef std::map::iterator PHP_ARRAY_ITER_TYPE; typedef std::list::iterator PHP_ARRAY_KEY_ITER_TYPE; // // In php arrays are behave like hashes (i.e. associative) and are sortable. // STL std::map is not sortable. // typedef struct { std::map array; std::list sorted_keys; PHP_ARRAY_KEY_ITER_TYPE current; } PHP_ARRAY_TYPE; // // using std::string instead of "char *" so keys will be compared // by string value typedef std::map PHP_SCOPE_TABLE_TYPE; typedef std::list PHP_SCOPE_STACK_TYPE; const std::string &array_get_ith_key(PHP_VALUE_NODE *array, int i); PHP_VAR_NODE *array_get_by_str_key(PHP_VALUE_NODE *array, std::string key); void array_add_to_str_key(PHP_VALUE_NODE *array, std::string key, PHP_VAR_NODE *node); void array_remove_at_str_key(PHP_VALUE_NODE *array, std::string key); void func_scope_init(PHP_FUNC_PARAM_DEF *params, int param_count, PHP_SCOPE_TABLE_TYPE *scope_map, PHP_VALUE_NODE *arg_array, std::map &saved_vars); #endif #endif //_PHP_SYNTREE_H_ // File_checked_for_headers amule-adunanza-2012.1+2.3.1~dfsg1.orig/src/webserver/src/WebInterface.cpp0000644000175000017500000005372712050266603024172 0ustar l3onl3on// // This file is part of the aMule Project. // // Copyright (c) 2004-2011 shakraw ( shakraw@users.sourceforge.net ) // Copyright (c) 2003-2011 Angel Vidal ( kry@amule.org ) // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) // // Any parts of this program derived from the xMule, lMule or eMule project, // or contributed by third-party developers are copyrighted by their // respective authors. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // #ifdef HAVE_CONFIG_H #include "config.h" // For VERSION and ENABLE_NLS #endif #include #ifdef __WXMAC__ #include // Do_not_auto_remove #include // Do_not_auto_remove #if wxCHECK_VERSION(2, 9, 0) #include // Do_not_auto_remove #else #include // Do_not_auto_remove #endif #endif #include // Needed for CECFileConfig #include #include "WebServer.h" #include #include #ifdef ENABLE_NLS # include #endif // ADUNANZA BEGIN #include "AdunanzA.h" // ADUNANZA END #ifdef AMULEWEB28 /* * Socket handling in wxBase (same as amuled) * */ class CSocketSet { int m_count; int m_fds[FD_SETSIZE], m_fd_idx[FD_SETSIZE]; GSocket *m_gsocks[FD_SETSIZE]; fd_set m_set; public: CSocketSet(); void AddSocket(GSocket *); void RemoveSocket(GSocket *); void FillSet(int &max_fd); void Detected(void (GSocket::*func)()); fd_set *Set() { return &m_set; } }; CSocketSet::CSocketSet() { m_count = 0; for(int i = 0; i < FD_SETSIZE; i++) { m_fds[i] = 0; m_fd_idx[i] = 0xffff; m_gsocks[i] = 0; } } void CSocketSet::AddSocket(GSocket *socket) { wxASSERT(socket); int fd = socket->m_fd; if (fd == -1) { return; } wxASSERT(fd >= 0 && fd < FD_SETSIZE); if (m_gsocks[fd]) { return; } m_fds[m_count] = fd; m_fd_idx[fd] = m_count; m_gsocks[fd] = socket; m_count++; } void CSocketSet::RemoveSocket(GSocket *socket) { wxASSERT(socket); int fd = socket->m_fd; if (fd == -1) { return; } wxASSERT(fd >= 0 && fd < FD_SETSIZE); int i = m_fd_idx[fd]; if (i == 0xffff) { return; } wxASSERT(m_fds[i] == fd); m_fds[i] = m_fds[m_count-1]; m_gsocks[fd] = 0; m_fds[m_count-1] = 0; m_fd_idx[fd] = 0xffff; m_fd_idx[m_fds[i]] = i; m_count--; } void CSocketSet::FillSet(int &max_fd) { FD_ZERO(&m_set); for(int i = 0; i < m_count; i++) { FD_SET(m_fds[i], &m_set); if (m_fds[i] > max_fd) { max_fd = m_fds[i]; } } } void CSocketSet::Detected(void (GSocket::*func)()) { for (int i = 0; i < m_count; i++) { int fd = m_fds[i]; if (FD_ISSET(fd, &m_set)) { GSocket *socket = m_gsocks[fd]; (*socket.*func)(); } } } class CWebserverGSocketFuncTable : public GSocketGUIFunctionsTable { private: CSocketSet *m_in_set; CSocketSet *m_out_set; wxMutex m_lock; public: CWebserverGSocketFuncTable(); void AddSocket(GSocket *socket, GSocketEvent event); void RemoveSocket(GSocket *socket, GSocketEvent event); void RunSelect(); virtual bool OnInit(); virtual void OnExit(); virtual bool CanUseEventLoop(); virtual bool Init_Socket(GSocket *socket); virtual void Destroy_Socket(GSocket *socket); virtual void Install_Callback(GSocket *socket, GSocketEvent event); virtual void Uninstall_Callback(GSocket *socket, GSocketEvent event); virtual void Enable_Events(GSocket *socket); virtual void Disable_Events(GSocket *socket); }; CWebserverGSocketFuncTable::CWebserverGSocketFuncTable() : m_lock(wxMUTEX_RECURSIVE) { m_in_set = new CSocketSet; m_out_set = new CSocketSet; m_lock.Unlock(); } void CWebserverGSocketFuncTable::AddSocket(GSocket *socket, GSocketEvent event) { wxMutexLocker lock(m_lock); if (event == GSOCK_INPUT) { m_in_set->AddSocket(socket); } else { m_out_set->AddSocket(socket); } } void CWebserverGSocketFuncTable::RemoveSocket(GSocket *socket, GSocketEvent event) { wxMutexLocker lock(m_lock); if (event == GSOCK_INPUT) { m_in_set->RemoveSocket(socket); } else { m_out_set->RemoveSocket(socket); } } void CWebserverGSocketFuncTable::RunSelect() { wxMutexLocker lock(m_lock); int max_fd = -1; m_in_set->FillSet(max_fd); m_out_set->FillSet(max_fd); struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 10000; // 10ms int result = select(max_fd + 1, m_in_set->Set(), m_out_set->Set(), 0, &tv); if (result > 0) { m_in_set->Detected(&GSocket::Detected_Read); m_out_set->Detected(&GSocket::Detected_Write); } } bool CWebserverGSocketFuncTable::OnInit() { return true; } void CWebserverGSocketFuncTable::OnExit() { } bool CWebserverGSocketFuncTable::CanUseEventLoop() { return false; } bool CWebserverGSocketFuncTable::Init_Socket(GSocket *) { return true; } void CWebserverGSocketFuncTable::Destroy_Socket(GSocket *) { } void CWebserverGSocketFuncTable::Install_Callback(GSocket *sock, GSocketEvent e) { AddSocket(sock, e); } void CWebserverGSocketFuncTable::Uninstall_Callback(GSocket *sock, GSocketEvent e) { RemoveSocket(sock, e); } void CWebserverGSocketFuncTable::Enable_Events(GSocket *socket) { Install_Callback(socket, GSOCK_INPUT); Install_Callback(socket, GSOCK_OUTPUT); } void CWebserverGSocketFuncTable::Disable_Events(GSocket *socket) { Uninstall_Callback(socket, GSOCK_INPUT); Uninstall_Callback(socket, GSOCK_OUTPUT); } class CWebserverAppTraits : public wxConsoleAppTraits { private: CWebserverGSocketFuncTable *m_table; wxMutex m_lock; std::list m_sched_delete; public: CWebserverAppTraits(CWebserverGSocketFuncTable *table); virtual GSocketGUIFunctionsTable* GetSocketGUIFunctionsTable(); virtual void ScheduleForDestroy(wxObject *object); virtual void RemoveFromPendingDelete(wxObject *object); void DeletePending(); }; CWebserverAppTraits::CWebserverAppTraits(CWebserverGSocketFuncTable *table) : wxConsoleAppTraits(), m_table(table),m_lock(wxMUTEX_RECURSIVE), m_sched_delete() { m_lock.Unlock(); } GSocketGUIFunctionsTable *CWebserverAppTraits::GetSocketGUIFunctionsTable() { return m_table; } void CWebserverAppTraits::ScheduleForDestroy(wxObject *object) { wxMutexLocker lock(m_lock); m_sched_delete.push_back(object); } void CWebserverAppTraits::RemoveFromPendingDelete(wxObject *object) { wxMutexLocker lock(m_lock); for(std::list::iterator i = m_sched_delete.begin(); i != m_sched_delete.end(); i++) { if (*i == object) { m_sched_delete.erase(i); return; } } } void CWebserverAppTraits::DeletePending() { wxMutexLocker lock(m_lock); while (!m_sched_delete.empty()) { std::list::iterator i = m_sched_delete.begin(); wxObject *object = *i; delete object; } } CamulewebApp::CamulewebApp() : m_table(new CWebserverGSocketFuncTable) { wxPendingEventsLocker = new wxCriticalSection; } wxAppTraits *CamulewebApp::CreateTraits() { return new CWebserverAppTraits(m_table); } #endif //------------------------------------------------------------------- IMPLEMENT_APP(CamulewebApp) //------------------------------------------------------------------- BEGIN_EVENT_TABLE(CamulewebApp, CaMuleExternalConnector) END_EVENT_TABLE() void CamulewebApp::Post_Shell() { m_webserver->StopServer(); delete m_webserver; m_webserver = 0; } bool CamulewebApp::OnInit() { return CaMuleExternalConnector::OnInit(); } #ifndef VERSION #include #endif int CamulewebApp::OnRun() { // ADUNANZA BEGIN #if 0 ConnectAndRun(wxT("aMuleweb"), wxT(VERSION)); #else wxString tmpVersion; tmpVersion << wxT(VERSION) << wxT(" ") << ADU_MOD; ConnectAndRun(wxT("aMuleweb"), tmpVersion); #endif // ADUNANZA END return 0; } bool CamulewebApp::CheckDirForTemplate(wxString& dir, const wxString& tmpl) { DebugShow(wxT("checking for directory '") + dir + wxT("'...")); if (wxFileName::DirExists(dir)) { DebugShow(wxT(" yes\n")); dir = JoinPaths(dir, tmpl); DebugShow(wxT("checking for directory '") + dir + wxT("'...")); if (wxFileName::DirExists(dir)) { DebugShow(wxT(" yes\n")); wxString tmplPath = JoinPaths(dir, wxT("login.php")); DebugShow(wxT("checking for file '") + tmplPath + wxT("'...")); if (wxFileName::FileExists(tmplPath)) { DebugShow(wxT(" yes\n")); // dir is already set to the directory component of the template path return true; } else { DebugShow(wxT(" no\n")); } } else { DebugShow(wxT(" no\n")); } } else { DebugShow(wxT(" no\n")); } return false; } bool CamulewebApp::GetTemplateDir(const wxString& templateName, wxString& templateDir) { wxString dir; m_localTemplate = false; DebugShow(wxT("looking for template: ") + templateName + wxT("\n")); #ifdef __WXMAC__ CFURLRef amuleBundleUrl; OSStatus status = LSFindApplicationForInfo( kLSUnknownCreator, // This magic string is the bundle identifier in aMule.app's Info.plist // ADUNANZA BEGIN #if 0 CFSTR("org.amule.aMule"), #else CFSTR("net.adunanza.aMuleAdunanzA"), #endif // ADUNANZA END NULL, NULL, &amuleBundleUrl); if (status == noErr && amuleBundleUrl) { CFBundleRef amuleBundle = CFBundleCreate(NULL, amuleBundleUrl); CFRelease(amuleBundleUrl); if (amuleBundle) { CFURLRef webserverDirUrl = CFBundleCopyResourceURL( amuleBundle, CFSTR("webserver"), NULL, NULL); CFRelease(amuleBundle); if (webserverDirUrl) { CFURLRef absoluteURL = CFURLCopyAbsoluteURL(webserverDirUrl); CFRelease(webserverDirUrl); if (absoluteURL) { CFStringRef pathString = CFURLCopyFileSystemPath( absoluteURL, kCFURLPOSIXPathStyle); CFRelease(absoluteURL); #if wxCHECK_VERSION(2, 9, 0) dir = wxCFStringRef(pathString). AsString(wxLocale::GetSystemEncoding()); #else dir = wxMacCFStringHolder(pathString). AsString(wxLocale::GetSystemEncoding()); #endif if (CheckDirForTemplate(dir, templateName)) { templateDir = dir; return true; } } } } } #endif dir = GetConfigDir(wxT("remote.conf")) + wxT("webserver"); if (CheckDirForTemplate(dir, templateName)) { templateDir = dir; m_localTemplate = true; return true; } #ifdef WEBSERVERDIR dir = wxT(WEBSERVERDIR); if (CheckDirForTemplate(dir, templateName)) { templateDir = dir; return true; } #endif dir = wxStandardPaths::Get().GetResourcesDir(); // Returns 'aMule' when we use 'amule' elsewhere #if !defined(__WXMSW__) && !defined(__WXMAC__) dir = dir.BeforeLast(wxFileName::GetPathSeparator()); // ADUNANZA BEGIN #if 0 dir = JoinPaths(dir, wxT("amule")); #else dir = JoinPaths(dir, wxT(PACKAGE_ADUNANZA)); #endif // ADUNANZA END #endif dir = JoinPaths(dir, wxT("webserver")); if (CheckDirForTemplate(dir, templateName)) { templateDir = dir; return true; } // template not found. reverting to default const wxChar* const defaultTemplateName = wxT("default"); if ( templateName == defaultTemplateName ) { return false; } Show(wxT("Template ") + templateName + wxT(" not found, reverting to default\n\n")); return GetTemplateDir(defaultTemplateName, templateDir); } void CamulewebApp::OnInitCmdLine(wxCmdLineParser& amuleweb_parser) { CaMuleExternalConnector::OnInitCmdLine(amuleweb_parser, "amuleweb"); amuleweb_parser.AddOption(wxT("t"), wxT("template"), _("Loads template "), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL); amuleweb_parser.AddOption(wxT("s"), wxT("server-port"), _("Web server HTTP port"), wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL); amuleweb_parser.AddSwitch(wxT("u"), wxT("enable-upnp"), _("Use UPnP port forwarding on web server port"), wxCMD_LINE_PARAM_OPTIONAL); amuleweb_parser.AddSwitch(wxT("U"), wxT("upnp-port"), _("UPnP port"), wxCMD_LINE_PARAM_OPTIONAL); amuleweb_parser.AddSwitch(wxT("z"), wxT("enable-gzip"), _("Use gzip compression"), wxCMD_LINE_PARAM_OPTIONAL); amuleweb_parser.AddSwitch(wxT("Z"), wxT("disable-gzip"), wxT("Do not use gzip compression"), wxCMD_LINE_PARAM_OPTIONAL); amuleweb_parser.AddOption(wxT("A"), wxT("admin-pass"), _("Full access password for web server"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL); amuleweb_parser.AddOption(wxT("G"), wxT("guest-pass"), _("Guest password for web server"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL); amuleweb_parser.AddSwitch(wxT("a"), wxT("allow-guest"), _("Allow guest access"), wxCMD_LINE_PARAM_OPTIONAL); amuleweb_parser.AddSwitch(wxT("d"), wxT("deny-guest"), _("Deny guest access"), wxCMD_LINE_PARAM_OPTIONAL); amuleweb_parser.AddSwitch(wxT("L"), wxT("load-settings"), _("Load/save web server settings from/to remote aMule"), wxCMD_LINE_PARAM_OPTIONAL); amuleweb_parser.AddOption(wxEmptyString, wxT("amule-config-file"), _("aMule config file path. DO NOT USE DIRECTLY!"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL); /* * In this mode, internal PHP interpreter is activated, and * amuleweb will forward there requests for .php pages */ amuleweb_parser.AddSwitch(wxEmptyString, wxT("no-php"), _("Disable PHP interpreter (deprecated)"), wxCMD_LINE_PARAM_OPTIONAL); /* * Reload .php page each time it's requested - don't cache * compilation results. Used for script development. */ amuleweb_parser.AddSwitch(wxT("N"), wxT("no-script-cache"), _("Recompile PHP pages on each request"), wxCMD_LINE_PARAM_OPTIONAL); } bool CamulewebApp::OnCmdLineParsed(wxCmdLineParser& parser) { wxString aMuleConfigFile; if (parser.Found(wxT("amule-config-file"), &aMuleConfigFile)) { aMuleConfigFile = FinalizeFilename(aMuleConfigFile); if (!::wxFileExists(aMuleConfigFile)) { fprintf(stderr, "FATAL ERROR: file '%s' does not exist.\n", (const char*)unicode2char(aMuleConfigFile)); return false; } CECFileConfig cfg(aMuleConfigFile); LoadAmuleConfig(cfg); // do not process any other command-line parameters, use defaults instead m_Verbose = false; m_KeepQuiet = true; m_LoadSettingsFromAmule = true; if (!(m_TemplateOk = GetTemplateDir(m_TemplateName, m_TemplateDir))) { // no reason to run webserver without a template fprintf(stderr, "FATAL ERROR: Cannot find template: %s\n", (const char *)unicode2char(m_TemplateName)); return false; } return true; } if (CaMuleExternalConnector::OnCmdLineParsed(parser)) { if ( parser.Found(wxT("no-php")) ) { fprintf(stderr, "WARNING: --no-php switch have no effect. Long live PHP\n"); } parser.Found(wxT("template"), &m_TemplateName); if (m_TemplateName.IsEmpty()) { m_TemplateName = wxT("default"); } if (!(m_TemplateOk = GetTemplateDir(m_TemplateName, m_TemplateDir))) { // no reason to run webserver without a template fprintf(stderr, "FATAL ERROR: Cannot find template: %s\n", (const char *)unicode2char(m_TemplateName)); return true; } long port; if (parser.Found(wxT("server-port"), &port)) { m_WebserverPort = port; } if (parser.Found(wxT("enable-upnp"))) { m_UPnPWebServerEnabled = true; } if (parser.Found(wxT("upnp-port"), &port)) { m_UPnPTCPPort = port; } if (parser.Found(wxT("enable-gzip"))) { m_UseGzip = true; } if (parser.Found(wxT("disable-gzip"))) { m_UseGzip = false; } if (parser.Found(wxT("allow-guest"))) { m_AllowGuest = true; } if (parser.Found(wxT("deny-guest"))) { m_AllowGuest = false; } wxString tmp; if ( parser.Found(wxT("admin-pass"), &tmp) ) { if (tmp.IsEmpty()) { m_AdminPass.Clear(); } else { m_AdminPass.Decode(MD5Sum(tmp).GetHash()); } } if ( parser.Found(wxT("guest-pass"), &tmp) ) { if (tmp.IsEmpty()) { m_GuestPass.Clear(); } else { m_GuestPass.Decode(MD5Sum(tmp).GetHash()); } } m_LoadSettingsFromAmule = parser.Found(wxT("load-settings")); return true; } else { return false; } } const wxString CamulewebApp::GetGreetingTitle() { // ADUNANZA BEGIN #if 0 return _("aMule Web Server"); #else return _("aMule AdunanzA Web Server"); #endif // ADUNANZA END } void CamulewebApp::Pre_Shell() { // Creating the web server if (m_TemplateOk) { m_webserver = new CScriptWebServer(this, m_TemplateDir); } else { m_webserver = new CNoTemplateWebServer(this); } m_webserver->StartServer(); } void CamulewebApp::TextShell(const wxString &) { #ifdef AMULEWEB28 while (true) { m_table->RunSelect(); ProcessPendingEvents(); ((CWebserverAppTraits *)GetTraits())->DeletePending(); } #else #ifndef AMULEWEB_DUMMY wxApp::OnRun(); #endif #endif } void CamulewebApp::LoadAmuleConfig(CECFileConfig& cfg) { CaMuleExternalConnector::LoadAmuleConfig(cfg); m_UseGzip = (cfg.Read(wxT("/WebServer/UseGzip"), 0l) == 1l); m_AllowGuest = (cfg.Read(wxT("/WebServer/UseLowRightsUser"), 0l) == 1l); cfg.ReadHash(wxT("/WebServer/Password"), &m_AdminPass); cfg.ReadHash(wxT("/WebServer/PasswordLow"), &m_GuestPass); m_WebserverPort = cfg.Read(wxT("/WebServer/Port"), 4711l); m_UPnPWebServerEnabled = (cfg.Read(wxT("/Webserver/UPnPWebServerEnabled"), 0l) == 1l); m_UPnPTCPPort = cfg.Read(wxT("/WebServer/UPnPTCPPort"), 50001l); m_PageRefresh = cfg.Read(wxT("/WebServer/PageRefreshTime"), 120l); m_TemplateName = cfg.Read(wxT("/WebServer/Template"), wxT("default")); } void CamulewebApp::LoadConfigFile() { CaMuleExternalConnector::LoadConfigFile(); if (m_configFile) { wxString tmp; m_WebserverPort = m_configFile->Read(wxT("/Webserver/Port"), 4711l); m_configFile->Read(wxT("/Webserver/UPnPWebServerEnabled"), &m_UPnPWebServerEnabled, false); m_UPnPTCPPort = m_configFile->Read(wxT("/WebServer/UPnPTCPPort"), 50001l); m_TemplateName = m_configFile->Read(wxT("/Webserver/Template"), wxEmptyString); m_configFile->Read(wxT("/Webserver/UseGzip"), &m_UseGzip, false); m_configFile->Read(wxT("/Webserver/AllowGuest"), &m_AllowGuest, false); m_configFile->ReadHash(wxT("/Webserver/AdminPassword"), &m_AdminPass); m_configFile->ReadHash(wxT("/Webserver/GuestPassword"), &m_GuestPass); m_PageRefresh = m_configFile->Read(wxT("/Webserver/PageRefreshTime"), 120l); } } void CamulewebApp::SaveConfigFile() { CaMuleExternalConnector::SaveConfigFile(); if (m_configFile) { m_configFile->Write(wxT("/Webserver/Port"), m_WebserverPort); m_configFile->Write(wxT("/Webserver/UPnPWebServerEnabled"), m_UPnPWebServerEnabled); m_configFile->Write(wxT("/WebServer/UPnPTCPPort"), m_UPnPTCPPort); m_configFile->Write(wxT("/Webserver/Template"), m_TemplateName); m_configFile->Write(wxT("/Webserver/UseGzip"), m_UseGzip); m_configFile->Write(wxT("/Webserver/AllowGuest"), m_AllowGuest); m_configFile->WriteHash(wxT("/Webserver/AdminPassword"), m_AdminPass); m_configFile->WriteHash(wxT("/Webserver/GuestPassword"), m_GuestPass); } } #ifdef ENABLE_NLS static inline bool CheckDirForMessageCatalog(const wxString& dir, const wxString& lang, const wxString& domain) { return wxFileName::FileExists(JoinPaths(dir, JoinPaths(lang, JoinPaths(wxT("LC_MESSAGES"), domain + wxT(".mo"))))); } static inline bool DirHasMessageCatalog(const wxString& dir, const wxString& lang, const wxString& domain) { if (!CheckDirForMessageCatalog(dir, lang, domain)) { wxString lingua = lang.BeforeFirst(wxT('.')).BeforeFirst(wxT('@')); if (lingua == lang || !CheckDirForMessageCatalog(dir, lingua, domain)) { wxString lng = lingua.BeforeFirst(wxT('_')); wxString ctry = lingua.AfterFirst(wxT('_')); if (ctry.IsEmpty()) { ctry = lng.Upper(); return CheckDirForMessageCatalog(dir, lng + wxT("_") + ctry, domain); } else if (ctry == lng.Upper()) { return CheckDirForMessageCatalog(dir, lng, domain); } else { return false; } } } return true; } #endif wxString CamulewebApp::SetLocale(const wxString& language) { wxString lang = CaMuleExternalConnector::SetLocale(language); // will call setlocale() for us // SetLocale() may indeed return an empty string, when no locale has been selected yet and // no locale change was requested, or, in the worst case, if the last locale change didn't succeed. if (!lang.IsEmpty()) { DebugShow(wxT("*** Language set to: ") + lang + wxT(" ***\n")); #ifdef ENABLE_NLS wxString domain = wxT("amuleweb-") + m_TemplateName; Unicode2CharBuf domainBuf = unicode2char(domain); const char *c_domain = (const char *)domainBuf; // Try to find a message catalog // First look in ~/.aMule/webserver/

aMule main site or aMule forums