From: David Schmidt Date: Tue, 18 Jul 2006 14:49:15 +0000 (+0000) Subject: Reorganizing the repository: swapping out what was HEAD (the old 3.1 branch) X-Git-Tag: v_3_0_5~177 X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=commitdiff_plain;h=72081f829de368392d04076728f8c991178c0080 Reorganizing the repository: swapping out what was HEAD (the old 3.1 branch) with what was really the latest development (the v_3_0_branch branch) --- diff --git a/.gitignore b/.gitignore index b61a8d62..bff9f853 100644 --- a/.gitignore +++ b/.gitignore @@ -29,9 +29,6 @@ core *.txt GNUmakefile Makefile -autom4te.cache -build-stamp -configure-stamp configure config.base config.cache @@ -57,3 +54,4 @@ vc_release vc_release_winthr w32.aps w32.res +.project diff --git a/AUTHORS b/AUTHORS index f0e0f89e..aff9e9c8 100644 --- a/AUTHORS +++ b/AUTHORS @@ -4,18 +4,19 @@ Current Developement Team: Hal Burgiss (docs) - Jon Foster Andreas Oesterhelt David Schmidt (OS/2, Mac OSX ports) - + Current and Former Project Contributors: Johny Agotnes Rodrigo Barbosa (RPM specfiles) Moritz Barsnick + Brian Dessent Mattes Dolak + Jon Foster Karsten Hopp (Red Hat) Alexander Lazic Daniel Leite diff --git a/ChangeLog b/ChangeLog index 9ddb8a40..a64af740 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,15 +1,63 @@ -------------------------------------------------------------------- ChangeLog for Privoxy -------------------------------------------------------------------- -*** Version 3.1.1 *** -- Major re-write of make install target. Add uninstall and - install-strip targets. Add user and group testing to configure. -- Add an INSTALL file, and remove these instructions from README. -- Add a demoronizer filter, which fixes MS's abuse of std charsets - (common cases anyway). -- Add a 'dashboard' to watch activity in real-time - implemented - as a GUI in Java -- Add the ability to specify the 'blocked' image to serve +*** Since 3.0.3 *** +- Multiple filter files can now be specified in config. +- Added jpeg filtering to defend against MS jpeg vulnerability MS04-028 +- Removed the "arbitrary" 1000 filter limit - addresses tracker #911950 +- Thanks to Jindrich Makovicka for a race condition fix for the log + file. The race condition remains for non-pthread implementations. + Reference patch #1175720. + +*** Version 3.0.3 *** + +- Fixed yet another two memory leaks. Process growth seems stopped now. +- Further tightened security against malicious toggle-off links. +- Excluded text/plain MIME types from filtering. This fixes a + couple of client-crashing, download corruption and + Privoxy performance issues, whose root cause lies in + web servers labelling content of unknown type as text/plain. +- Assorted fixes for POSIX compliance, signal handling, graceful + termination, compiler warnings, OSX support, Win32 systray, + error logging, hostname wildcards, correct detection of NetBSD. +- Workarounds for client (iTunes etc) and server (PHP < 4.2.3) bugs + including the notorious "blank page" problem. +- Various filter improvements; most notably the unsolicited-popups + filter became less destructive +- Major revamp of the actions file + +*** Version 3.0.2 *** + +- Fixed two memory leaks, one serious +- Fixed bug in pcrs which could cause crashes with user-defined filters +- Fixed bug in domain name matching +- Assorted small fixes (Win32 menu, CGI URL editor, ..) +- Added basic support for the OPTIONS and TRACE http methods +- Added workaround for Bug in Mac OSX that made Privoxy crash occasionally +- Refined the default action file through >400 items of user feedback +- Filter changes: + - Assorted refinements, optimizations and fixes in the js-annoyances, + img-reorder, banners-by-size, banners-by-link, webbugs, refresh-tags, + html-annoyances, content-cookies and fun filters + - Replaced filter "popups" by choice between two modes: + - "unsolicited-popups" tries to catch only the unsolicited ones + - "all-popups" tries to kill them all (as before) + - New filter "tiny-textforms" Help those tiny or hard-wrap textareas. + - New filter "jumping-windows" that prevents windows from resizing + and moving themselves + - New filter "demoronizer" which fixes MS's abuse of std charsets + (common cases anyway). + - Replaced "nimda" with more general "ie-exploits" filter in which + all filters for exploits shall be collected +- Improved cookie logging +- Rewrote make install target. Added uninstall and install-strip + targets. +- Fixed a potential (application-level, NOT OS-level!) security + problem involving remote toggling and action file manipulation + by mailicious websites. +- Added ability to chroot (thanks to Sviatoslav Sviridov) +- Added more action aliases for prehistoric action names +- Add Slackware support to Makefile. *** Version 3.0 *** diff --git a/GNUmakefile.in b/GNUmakefile.in index 18601df6..65c2b4bc 100644 --- a/GNUmakefile.in +++ b/GNUmakefile.in @@ -1,8 +1,8 @@ # Note: Makefile is built automatically from Makefile.in # -# $Id: GNUmakefile.in,v 1.138 2003/10/17 17:51:58 oes Exp $ +# $Id: GNUmakefile.in,v 1.104.2.28 2004/06/10 17:06:05 hal9 Exp $ # -# Written by and Copyright (C) 2001 the SourceForge +# Written by and Copyright (C) 2001 - 2004 the SourceForge # Privoxy team. http://www.privoxy.org/ # # Based on the Internet Junkbuster originally written @@ -48,23 +48,13 @@ SNAPVERSION = $(RPM_VERSION)-$(shell date "+%Y%m%d") ############################################################################# -# Source directories +# "make install" directories and variables ############################################################################# -DIR_PRIVOXY_ROOT := . -DIR_PRIVOXY_SRC := $(DIR_PRIVOXY_ROOT)/src -DIR_PRIVOXY_SRC_PCRE := $(DIR_PRIVOXY_ROOT)/pcre -DIR_PRIVOXY_SRC_JAVA := $(DIR_PRIVOXY_ROOT)/src/java -DIR_PRIVOXY_OBJ := $(DIR_PRIVOXY_ROOT)/obj -############################################################################# -# "make install" settings -############################################################################# - -# User and Group settings -USER = @USER@ -GROUP = @GROUP@ +#User Group paras +USER = @USER@ +GROUP = @GROUP@ -# PATHS set from configure prefix = @prefix@ exec_prefix = @exec_prefix@ CONF_BASE = @sysconfdir@ @@ -88,53 +78,52 @@ PIDS_DEST = $(VAR_DEST)/run # finally if $prefix=/usr/local and VAR_DEST=$prefix/var it # changes this to /var for storing the logs and pidfile -# Where to find docs. The install goes to $share_dest/doc/privoxy. -DOK_WEB = doc/webserver/ +# used in source dir only, the install goes to $share_dest/doc/privoxy +DOK_WEB = doc/webserver/ # Install usage should be compatible with install-sh. INSTALL = @INSTALL@ - -# Permissions used during installation. -# Binaries (daemon, init scripts) +# Binaries BIN_MODE = 0755 -# Files daemon writes to: *action, trust and logs. -RWD_MODE = 0660 -# Misc files, docs, etc. -RA_MODE = 0664 +# Support files, docs, etc. +RA_MODE = 0664 # Directory DIR_MODE = 0755 - +# Files daemon writes to. +RWD_MODE = 0660 INSTALL_P = -m $(BIN_MODE) INSTALL_T = -m $(RA_MODE) INSTALL_D = -m $(DIR_MODE) -d INSTALL_R = -m $(RWD_MODE) + # install options for superuser install -#INSTALL_S = -g -o +#INSTALL_S = -g @GROUP@ -o @USER@ ############################################################################# -# Build and Install tools +# Build tools ############################################################################# PROGRAM = privoxy@EXEEXT@ CC = @CC@ ECHO = echo GZIP_PROG = gzip + # id -u is not universal. FIXME: need to set from configure. Breaks on # Solaris. #ID = id -u ID = id LD = @CC@ RM = rm -f +CP = cp -f RMDIR = rmdir MKDIR = ./mkinstalldirs STRIP_PROG = strip -CP = cp -f SED = sed GREP = grep CAT = cat RPM = rpm -RPMBUILD = rpm -MV = mv +RPMBUILD = rpmbuild +MV = mv TAR = tar LN = ln TOUCH = touch @@ -143,24 +132,29 @@ CHMOD = chmod CHOWN = chown CHGRP = chgrp GROUPS = groups -DOC_STATUS = @DOC_STATUS@ -# Note: Please make sure that -d ldp.dsl\#html stays the last option to -# $(JADEBIN), because for some targets "-notoc" will be appended -# to it (--> "ldp.dsl\#html-notoc"). +WDUMP = @WDUMP@ -dump +JADECAT = @JADECAT@ +JADEBIN = @JADEBIN@ +DB = $(JADEBIN) $(JADECAT) -ihtml -t sgml -D.. -d ldp.dsl\#html +DB2HTML = @DB2HTML@ +MAN2HTML = @MAN2HTML@ +G2H_CMD = groff -mandoc -Thtml TARGET_OS = @host@ PERL = perl -DOC_DIR = doc/source +DOC_DIR = doc/source +DOC_TMP = $(DOC_DIR)/tmp +DOC_STATUS = @DOC_STATUS@ # Program to do LF->CRLF # -# The sed version should be the most portable, but it doesn't work for me, +# The sed version should be the most portable, but it doesn't for for me, # the other two do. FIXME. # - Jon #DOSFILTER = $(SED) -e $$'s,$$,\r,' #DOSFILTER = gawk -v ORS='\r\n' '{print $0;}' DOSFILTER = $(PERL) -p -e 's/\n/\r\n/' CVSROOT = :pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa -TMPDIR := $(shell mktemp -d /tmp/$(PROGRAM).XXXXXX) +#TMPDIR := $(shell mktemp -d /tmp/$(PROGRAM).XXXXXX) ############################################################################# # Setup for make distribution rh and suse for now @@ -183,64 +177,45 @@ DOC_FILES = AUTHORS LICENSE README ChangeLog INSTALL \ `find doc/text/ -type f | grep -v "CVS" | grep -v "\.\#" | grep -v ".*~" | grep -v ".cvsignore" | grep -v "TAGS"` \ `find doc/webserver/ -name "*.html" | grep -v "\(webserver\|team\)\/index\.html"` \ `find doc/webserver/ -name "*.css"` \ - privoxy.1 + privoxy.1 \ + doc/pdf/*.pdf ############################################################################# # Filenames and libraries ############################################################################# -C_SRC = \ - $(DIR_PRIVOXY_SRC)/actions.c \ - $(DIR_PRIVOXY_SRC)/cgi.c \ - $(DIR_PRIVOXY_SRC)/cgiedit.c \ - $(DIR_PRIVOXY_SRC)/cgisimple.c \ - $(DIR_PRIVOXY_SRC)/deanimate.c \ - $(DIR_PRIVOXY_SRC)/encode.c \ - $(DIR_PRIVOXY_SRC)/errlog.c \ - $(DIR_PRIVOXY_SRC)/filters.c \ - $(DIR_PRIVOXY_SRC)/gateway.c \ - $(DIR_PRIVOXY_SRC)/jbsockets.c \ - $(DIR_PRIVOXY_SRC)/jcc.c \ - $(DIR_PRIVOXY_SRC)/killpopup.c \ - $(DIR_PRIVOXY_SRC)/list.c \ - $(DIR_PRIVOXY_SRC)/loadcfg.c \ - $(DIR_PRIVOXY_SRC)/loaders.c \ - $(DIR_PRIVOXY_SRC)/miscutil.c \ - $(DIR_PRIVOXY_SRC)/parsers.c \ - $(DIR_PRIVOXY_SRC)/ssplit.c \ - $(DIR_PRIVOXY_SRC)/urlmatch.c - -C_OBJS = $(C_SRC:$(DIR_PRIVOXY_SRC)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@) -C_HDRS = $(C_SRC:.c=.h) $(DIR_PRIVOXY_SRC)/project.h $(DIR_PRIVOXY_SRC)/actionlist.h - -W32_SRC = @WIN_ONLY@$(DIR_PRIVOXY_SRC)/w32log.c $(DIR_PRIVOXY_SRC)/w32taskbar.c $(DIR_PRIVOXY_SRC)/win32.c -W32_FILES = @WIN_ONLY@$(DIR_PRIVOXY_OBJ)/w32res.res -W32_OBJS = @WIN_ONLY@$(W32_SRC:$(DIR_PRIVOXY_SRC)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@) $(W32_FILES) -W32_HDRS = @WIN_ONLY@$(DIR_PRIVOXY_SRC)/w32log.h $(DIR_PRIVOXY_SRC)/w32taskbar.h $(DIR_PRIVOXY_SRC)/win32.h $(DIR_PRIVOXY_SRC)/w32res.h +C_SRC = actions.c cgi.c cgiedit.c cgisimple.c deanimate.c encode.c \ + errlog.c filters.c gateway.c jbsockets.c jcc.c killpopup.c \ + list.c loadcfg.c loaders.c miscutil.c parsers.c ssplit.c \ + urlmatch.c + +C_OBJS = $(C_SRC:.c=.@OBJEXT@) +C_HDRS = $(C_SRC:.c=.h) project.h actionlist.h + +W32_SRC = @WIN_ONLY@w32log.c w32taskbar.c win32.c +W32_FILES = @WIN_ONLY@w32.res +W32_OBJS = @WIN_ONLY@$(W32_SRC:.c=.@OBJEXT@) $(W32_FILES) +W32_HDRS = @WIN_ONLY@w32log.h w32taskbar.h win32.h w32res.h W32_LIB = @WIN_ONLY@-lwsock32 -lcomctl32 W32_INIS = @WIN_ONLY@config.txt trust.txt -PCRS_SRC = @STATIC_PCRS_ONLY@$(DIR_PRIVOXY_SRC)/pcrs.c -PCRS_OBJS = @STATIC_PCRS_ONLY@$(PCRS_SRC:$(DIR_PRIVOXY_SRC)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@) +PCRS_SRC = @STATIC_PCRS_ONLY@pcrs.c +PCRS_OBJS = @STATIC_PCRS_ONLY@$(PCRS_SRC:.c=.@OBJEXT@) PCRS_HDRS = @STATIC_PCRS_ONLY@$(PCRS_SRC:.c=.h) -PCRE_SRC = @STATIC_PCRE_ONLY@$(DIR_PRIVOXY_SRC_PCRE)/get.c $(DIR_PRIVOXY_SRC_PCRE)/maketables.c $(DIR_PRIVOXY_SRC_PCRE)/study.c $(DIR_PRIVOXY_SRC_PCRE)/pcre.c -PCRE_OBJS = @STATIC_PCRE_ONLY@$(PCRE_SRC:$(DIR_PRIVOXY_SRC_PCRE)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@) -PCRE_HDRS = @STATIC_PCRE_ONLY@$(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/chartables.c $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h - -ACTIVITY_SRC = @ACTIVITY_ONLY@$(DIR_PRIVOXY_SRC)/stats.c -ACTIVITY_OBJS = @ACTIVITY_ONLY@$(ACTIVITY_SRC:$(DIR_PRIVOXY_SRC)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@) -ACTIVITY_HDRS = @ACTIVITY_ONLY@$(ACTIVITY_SRC:.c=.h) $(DIR_PRIVOXY_SRC)/ipc.h +PCRE_SRC = @STATIC_PCRE_ONLY@pcre/get.c pcre/maketables.c pcre/study.c pcre/pcre.c +PCRE_OBJS = @STATIC_PCRE_ONLY@$(PCRE_SRC:.c=.@OBJEXT@) +PCRE_HDRS = @STATIC_PCRE_ONLY@pcre/config.h pcre/chartables.c pcre/internal.h pcre/pcre.h # No REGEX (maybe because dynamically linked pcreposix): REGEX_SRC = -@STATIC_PCRE_ONLY@REGEX_SRC = $(DIR_PRIVOXY_SRC_PCRE)/pcreposix.c +@STATIC_PCRE_ONLY@REGEX_SRC = pcre/pcreposix.c -REGEX_OBJS = $(REGEX_SRC:$(DIR_PRIVOXY_SRC_PCRE)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@) +REGEX_OBJS = $(REGEX_SRC:.c=.@OBJEXT@) REGEX_HDRS = $(REGEX_SRC:.c=.h) # Dependencies introduced by #include "project.h". -PROJECT_H_DEPS = $(DIR_PRIVOXY_SRC)/project.h $(REGEX_HDRS) $(PCRS_HDRS) @STATIC_PCRE_ONLY@$(DIR_PRIVOXY_SRC_PCRE)/pcre.h +PROJECT_H_DEPS = project.h $(REGEX_HDRS) $(PCRS_HDRS) @STATIC_PCRE_ONLY@pcre/pcre.h # Socket libraries for platforms that need them explicitly defined SOCKET_LIB = @SOCKET_LIB@ @@ -248,9 +223,9 @@ SOCKET_LIB = @SOCKET_LIB@ # PThreads library, if needed. PTHREAD_LIB = @PTHREAD_ONLY@@PTHREAD_LIB@ -SRCS = $(C_SRC) $(W32_SRC) $(PCRS_SRC) $(PCRE_SRC) $(REGEX_SRC) $(ACTIVITY_SRC) -OBJS = $(C_OBJS) $(W32_OBJS) $(PCRS_OBJS) $(PCRE_OBJS) $(REGEX_OBJS) $(ACTIVITY_OBJS) -HDRS = $(C_HDRS) $(W32_HDRS) $(PCRS_HDRS) $(PCRE_OBJS) $(REGEX_HDRS) $(ACTIVITY_HDRS) +SRCS = $(C_SRC) $(W32_SRC) $(PCRS_SRC) $(PCRE_SRC) $(REGEX_SRC) +OBJS = $(C_OBJS) $(W32_OBJS) $(PCRS_OBJS) $(PCRE_OBJS) $(REGEX_OBJS) +HDRS = $(C_HDRS) $(W32_HDRS) $(PCRS_HDRS) $(PCRE_OBJS) $(REGEX_HDRS) LIBS = @LIBS@ $(W32_LIB) $(SOCKET_LIB) $(PTHREAD_LIB) @@ -279,31 +254,23 @@ LDFLAGS = $(DEBUG_CFLAGS) $(SPECIAL_CFLAGS) # # There should NOT be any targets above this line. ############################################################################# -all: user-warned-once $(PROGRAM) default.action +all: $(PROGRAM) default.action ############################################################################# # Phony targets ############################################################################# -.PHONY: all inifiles redhat-dist redhat-upload redhat-test solaris-dist suse-dist \ +.PHONY: all inifiles redhat-dist redhat-upload solaris-dist suse-dist \ suse-upload win-dist tarball-dist dok redhat-dok webserver clean clobber tags \ -install conectiva-spec conectiva-dist conectiva-upload debian-dist \ -debian-upload ensure-wdump ensure-jadebin ensure-dkprefix CONF_DEST LOG_DEST \ -PID_DEST check_doc install-strip uninstall GROUP_T java-activity-console - +install conectiva-spec conectiva-dist conectiva-upload CONF_DEST LOG_DEST \ +PID_DEST check_doc install-strip uninstall GROUP_T ############################################################################# -# Compile command +# Define this explicitly because Solaris is broken! ############################################################################# -$(DIR_PRIVOXY_OBJ)/%.o: $(DIR_PRIVOXY_SRC)/%.c $(DIR_PRIVOXY_OBJ) +%.o: %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ -$(DIR_PRIVOXY_OBJ)/%.o: $(DIR_PRIVOXY_SRC_PCRE)/%.c $(DIR_PRIVOXY_OBJ) - $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ - -$(DIR_PRIVOXY_OBJ): - $(CHMOD) $(DIR_MODE) $(MKDIR) - $(MKDIR) obj ############################################################################# # Strip master copy comments from default.action: @@ -355,40 +322,6 @@ dist-check: if [ "$$answer" != "yes i am sure" ]; then exit 1; fi \ fi; -############################################################################# -# One-time warning for unstable trunk version -############################################################################# -user-warned-once: - @if [ ! -f .user-has-been-warned ]; then \ - $(ECHO) "****************************************************"; \ - $(ECHO) "*** ***"; \ - $(ECHO) "*** WARNING: LOTS OF TROUBLE AHEAD! ***"; \ - $(ECHO) "*** ------------------------------- ***"; \ - $(ECHO) "*** ***"; \ - $(ECHO) "*** You are about to compile the trunk (aka CVS ***"; \ - $(ECHO) "*** HEAD) version of Privoxy which contains a ***"; \ - $(ECHO) "*** zillion known bugs that are already fixed ***"; \ - $(ECHO) "*** in the stable branch, along with unfinished ***"; \ - $(ECHO) "*** features which will annoy you to death. ***"; \ - $(ECHO) "*** ***"; \ - $(ECHO) "*** Unless you are developing or alpha-testing ***"; \ - $(ECHO) "*** Privoxy, THIS VERSION IS NOT FOR YOU! It is ***"; \ - $(ECHO) "*** UNSTABLE, LEAKY, UNDOCUMENTED, UNSUPPORTED! ***"; \ - $(ECHO) "*** ***"; \ - $(ECHO) "*** If the latest release from www.privoxy.org ***"; \ - $(ECHO) "*** doesn't satisfy your bleeding-edge fetish, ***"; \ - $(ECHO) "*** check out the stable branch from CVS using ***"; \ - $(ECHO) "*** -r v_3_0_branch or use a snapshot from ***"; \ - $(ECHO) "*** http://www.oesterhelt.org/privoxy-snapshots/ ***"; \ - $(ECHO) "*** ***"; \ - $(ECHO) "*****************************************************"; \ - $(ECHO) "Type \"yes i am sure\" if you are sure that you"; \ - $(ECHO) -n "really want to proceed: "; \ - read answer; \ - if [ "$$answer" != "yes i am sure" ]; then exit 1; fi; \ - touch .user-has-been-warned; \ - fi; - ############################################################################# # create tar.gz from CVS: @@ -400,6 +333,7 @@ user-warned-once: # This creates a tar.gz and spec-file for a Red Hat 6.x version. ############################################################################# create-snapshot: + TMPDIR=$(shell mktemp -d /tmp/$(PROGRAM).XXXXXX) @tag=`cvs -d $(CVSROOT) status Makefile | awk ' /Sticky Tag/ { print $$3 } '` 2> /dev/null; \ [ x"$$tag" = x"(none)" ] && tag=HEAD; \ echo "*** Creating package from $$tag!"; \ @@ -424,10 +358,10 @@ create-snapshot: fi; \ $(RM) $(TMPFILE); \ cd $(TMPDIR)/current; \ - $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-suse.spec" \ - -czf $(TMPDIR)/$(PROGRAM)-rh-$(VERSION).tar.gz .; \ - $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-rh.spec" \ - -czf $(TMPDIR)/$(PROGRAM)-suse-$(VERSION).tar.gz . + $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude \ + "privoxy-suse.spec" -czf $(TMPDIR)/$(PROGRAM)-rh-$(VERSION).tar.gz .; \ + $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude \ + "privoxy-rh.spec" -czf $(TMPDIR)/$(PROGRAM)-suse-$(VERSION).tar.gz . @$(MV) -f $(TMPDIR)/$(PROGRAM)-rh-$(VERSION).tar.gz . @$(MV) -f $(TMPDIR)/$(PROGRAM)-suse-$(VERSION).tar.gz . @$(RM) -rf $(TMPDIR) @@ -444,9 +378,8 @@ create-snapshot: create-archive: make SNAPVERSION=$(SNAPVERSION) create-snapshot - ############################################################################# -# RPM specific stuff (SuSE or Redhat, ..) +# RPM specifice stuff (SuSE or Redhat, ..) ############################################################################# rpm-stuff: dist-check clean clobber for dir in RPMS SRPMS BUILD SOURCES SPECS; do \ @@ -493,8 +426,8 @@ conectiva-spec: ############################################################################# conectiva-dist: rpm-stuff conectiva-spec - $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-suse.spec" --exclude="privoxy-rh.spec" --exclude="PACKAGERS" -czf $(TAR_ARCH) . - $(RPM) --clean -ta $(TAR_ARCH) + $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude "privoxy-suse.spec" --exclude "privoxy-rh.spec" --exclude "PACKAGERS" -czf $(TAR_ARCH) . + $(RPMBUILD) --clean -ta $(TAR_ARCH) if [ -f $(TAR_ARCH) ]; then $(RM) $(TAR_ARCH); fi conectiva-upload: check-release @@ -505,14 +438,14 @@ conectiva-upload: check-release ############################################################################# redhat-dist: rpm-stuff echo $(CONFIG_FILES) - $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-suse.spec" --exclude="privoxy-cl.spec" --exclude="PACKAGERS" -czf $(TAR_ARCH) . + $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude "privoxy-suse.spec" --exclude "privoxy-cl.spec" --exclude "PACKAGERS" -czf $(TAR_ARCH) . $(RPMBUILD) --clean -ta $(TAR_ARCH) if [ -f $(TAR_ARCH) ]; then $(RM) $(TAR_ARCH); fi # For testing build issues only! Use redhat-dist for official releases. redhat-test: echo $(CONFIG_FILES) - $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-suse.spec" --exclude="privoxy-cl.spec" --exclude="PACKAGERS" -czf $(TAR_ARCH) . + $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude "privoxy-suse.spec" --exclude "privoxy-cl.spec" --exclude "PACKAGERS" -czf $(TAR_ARCH) . $(RPMBUILD) --clean -tb $(TAR_ARCH) if [ -f $(TAR_ARCH) ]; then $(RM) $(TAR_ARCH); fi @echo "WARNING: This target is only for testing. Use redhat-dist for releases!!!" @@ -529,6 +462,17 @@ redhat-upload: check-release @$(ECHO) ------------------------------------------------------- # w3m http://sourceforge.net/project/admin/editpackages.php?group_id=11118 + +############################################################################# +# Creates a Red Hat sourcepackage from CVS (not from the current sources +# on disk) +############################################################################# +redhat-srpm: + make create-archive + $(MV) $(PROGRAM)-rh-$(VERSION).tar.gz $(PROGRAM)-$(VERSION).tar.gz + $(RPMBUILD) -ts --nodeps $(PROGRAM)-$(VERSION).tar.gz + + ############################################################################# # suse distribution. works fine. no need to be root. ############################################################################# @@ -543,7 +487,7 @@ suse-dist: rpm-stuff # exit 1;\ # fi - $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-rh.spec" --exclude="privoxy-cl.spec" --exclude="PACKAGERS" -czf $(TAR_ARCH) . + $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude "privoxy-rh.spec" --exclude "privoxy-cl.spec" --exclude "PACKAGERS" -czf $(TAR_ARCH) . $(RPM) --clean -ta $(TAR_ARCH) if [ -f $(TAR_ARCH) ]; then $(RM) $(TAR_ARCH); fi @@ -579,7 +523,6 @@ suse-clean: $(RM) /usr/sbin/rcprivoxy $(RM) /usr/share/man/man1/privoxy.1.gz - ############################################################################# # generic distribution ############################################################################# @@ -591,14 +534,14 @@ gen-dist: dist-check $(STRIP_PROG) $(PROGRAM) $(LN) -s current ../privoxy-$(VERSION)-$(CODE_STATUS) # add program - (cd .. && $(TAR) --exclude="PACKAGERS" -cvhf privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$(PROGRAM)) + (cd .. && $(TAR) -cvhf --exclude "PACKAGERS" privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$(PROGRAM)) # add config files for foo in $(CONFIG_FILES); do \ - (cd .. && $(TAR) --exclude="PACKAGERS" -uvhf privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$$foo;) \ + (cd .. && $(TAR) -uvhf --exclude "PACKAGERS" privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$$foo;) \ done; # add documentation for foo in $(DOC_FILES); do \ - (cd .. && $(TAR) --exclude="PACKAGERS" -uvhf privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$$foo;) \ + (cd .. && $(TAR) -uvhf --exclude "PACKAGERS" privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$$foo;) \ done; # and zip the archive $(RM) ../privoxy-$(VERSION)-$(CODE_STATUS) @@ -642,16 +585,9 @@ hpux-upload: # debian distribution ############################################################################# debian-dist: - @$(ECHO) Creating Debian package. Will exist in parent directory. - dpkg-buildpackage -rfakeroot -us -uc + @$(ECHO) coming soon. debian-upload: - ncftpput -u anonymous -p ijbswa-developers@lists.sourceforge.net upload.sourceforge.net /incoming ../privoxy_$(shell dpkg-parsechangelog | grep "Version" | sed "s/Version: //")_$(shell dpkg --print-architecture).deb - @$(ECHO) ------------------------------------------------------- - @$(ECHO) Now goto - @$(ECHO) http://sourceforge.net/project/admin/editpackages.php?group_id=11118 - @$(ECHO) ... and release the files. - @$(ECHO) ------------------------------------------------------- - + @$(ECHO) coming soon. ############################################################################# # macosx distribution @@ -685,10 +621,7 @@ freebsd-clean: gen-clean # Windows distribution ############################################################################# win-dist: - @$(ECHO) RTFM. You shouldn't run configure before making - @$(ECHO) the Windows release, so you need to start again from - @$(ECHO) a clean CVS export. - @false + $(ECHO) Not implemented. ############################################################################# @@ -700,7 +633,8 @@ tarball-dist: dist-check clean clobber $(LN) -s current ../privoxy-$(VERSION)-$(CODE_STATUS) for i in `find . -type f -a -not \( -path "*/CVS*" -o -name ".*" \ - -o -path "*/debian/*" -o -path "*/actions/*" -o -name "*.php" -o -name "PACKAGERS" \)`; do \ + -o -path "*/debian/*" -o -path "*/actions/*" -o -name "*.php" -o \ + -name "PACKAGERS" -o -path "*/pdf/*" \)`; do \ files="$$files privoxy-$(VERSION)-$(CODE_STATUS)/$$i"; \ done && \ cd .. && $(TAR) -cvhf privoxy-$(VERSION)-$(CODE_STATUS)-src.tar $$files ; \ @@ -722,13 +656,6 @@ tarball-upload: tarball-clean: $(RM) ../privoxy-$(VERSION)-$(CODE_STATUS)-src.tar.gz -############################################################################# -# java Activity Console -############################################################################# -java-activity-console: - javac -classpath $(DIR_PRIVOXY_SRC_JAVA):$(CLASSPATH) $(DIR_PRIVOXY_SRC)/java/org/privoxy/activityconsole/*.java - jar -cvfm ActivityConsole.jar $(DIR_PRIVOXY_SRC_JAVA)/org/privoxy/activityconsole/acon.manifest -C $(DIR_PRIVOXY_SRC_JAVA) org/privoxy/activityconsole - ############################################################################# # # Documentation @@ -737,9 +664,231 @@ java-activity-console: # ############################################################################# - -dok: - cd $(DOC_DIR) && $(MAKE) +# developer manual +dok-devel: + $(RM) doc/webserver/developer-manual/*.html + $(RM) -r doc/source/developer-manual + mkdir -p doc/text doc/source/developer-manual + cd doc/source/developer-manual && $(DB) ../developer-manual.sgml && cd .. && cp developer-manual/*.html ../webserver/developer-manual/ + cd doc/source && $(DB) -V nochunks developer-manual.sgml > tmp.html && $(WDUMP) tmp.html > ../text/developer-manual.txt && $(RM) -r tmp.html developer-manual + +# user manual +dok-user: + $(RM) doc/webserver/user-manual/*.html + $(RM) -r doc/source/user-manual/ + mkdir -p doc/text doc/source/user-manual + cd doc/source/user-manual && $(DB) -iuser-man ../user-manual.sgml && cd .. && cp user-manual/*.html ../webserver/user-manual/ + cd doc/source && $(DB) -iuser-man -V nochunks user-manual.sgml > tmp.html && $(WDUMP) tmp.html > ../text/user-manual.txt && $(RM) -r tmp.html user-manual + +# faq +dok-faq: + $(RM) doc/webserver/faq/*.html + $(RM) -r doc/source/faq + mkdir -p doc/text doc/source/faq + cd doc/source/faq && $(DB) ../faq.sgml && cd .. && cp faq/*.html ../webserver/faq/ + cd doc/source && $(DB) -V nochunks faq.sgml > tmp.html && $(WDUMP) tmp.html > ../text/faq.txt && $(RM) -r tmp.html faq + +# man page, one variation. Try to use the next target, just 'make man'. +dok-man: + $(RM) doc/man/* doc/webserver/man-page/*.html +ifneq ($(MAN2HTML),false) + $(ECHO) "Privoxy Man page

NAME

" > doc/webserver/man-page/privoxy-man-page.html + man ./privoxy.1 | $(MAN2HTML) -bare >> doc/webserver/man-page/privoxy-man-page.html + $(ECHO) "" >> doc/webserver/man-page/privoxy-man-page.html +else + $(MAKE) groff2html +endif + +# Build man page from sgml. This requires the SGMLSpm perl module. +# See CPAN, or your favorite perl repository. This is the preferred +# target for man page generation! +man: dok-release + mkdir -p doc/source/temp && cd doc/source/temp && $(RM) * ;\ + nsgmls ../privoxy-man-page.sgml | sgmlspl ../../../utils/docbook2man/docbook2man-spec.pl &&\ + perl -pi.bak -e 's/ //; s/\[ /\[/g' privoxy.1 ;\ + $(DB) ../privoxy-man-page.sgml && $(MV) -f privoxy.1 ../../../privoxy.1 + +# For those with man2html ala RH7s. +man2html: + mkdir -p doc/webserver/man-page +ifneq ($(MAN2HTML),false) + $(MAN2HTML) privoxy.1 |grep -v "^Content-type" > tmp.html + $(PERL) -pi.bak -e 's///; s//man2html/' tmp.html + $(PERL) -pi.bak -e 's/(<\/HEAD>)/<\/HEAD>/' tmp.html +# Twice because my version of man2html is pulling in commas and periods in URLs. + $(PERL) -pi.bak -e 's/()/$$1$$2/g' tmp.html + $(PERL) -pi.bak -e 's,\.">,">,g' tmp.html +# Get rid of spurious  from conversion. (How to do this with perl?) + $(SED) -e 's///g' tmp.html > doc/webserver/man-page/privoxy-man-page.html && $(RM) tmp.* +else + $(MAKE) groff2html +endif + + +# Otherwise we get plain groff conversion. +groff2html: + $(G2H_CMD) ./privoxy.1 | $(SED) -e 's@@@' > doc/webserver/man-page/privoxy-man-page.html + + +# readme page and INSTALL file +dok-readme: dok-release + cd doc/source && $(DB)-notoc -V nochunks readme.sgml > tmp.html &&\ + $(WDUMP) tmp.html > ../../README ;\ + $(DB)-notoc -V nochunks install.sgml > tmp.html &&\ + $(WDUMP) tmp.html > ../../INSTALL ;\ + $(RM) tmp.* + +# index.sgml is used to create both the Home Page, and a local index +# for documentation, etc. +# +# index.html for webserver: +dok-webserver: + cd doc/source/webserver && $(DB)-notoc -ip-homepage -V nochunks index.sgml > ../../webserver/index.html + $(PERL) -pi.bak -e 's/..\/p_doc.css/p_doc.css/;\ + s/<\/HEAD/\n<\/HEAD/;\ + s/<\/HEAD/\n<\/HEAD/;\ + s/\.\d\. //;\ + s/__copy/©/'\ + doc/webserver/index.html && $(RM) doc/webserver/*.bak + +# privoxy-index.html for local documentation: +dok-index: + cd doc/source/webserver && $(DB)-notoc -ip-index -V nochunks index.sgml > ../../webserver/privoxy-index.html + $(PERL) -pi.bak -e 's/..\/p_doc.css/p_doc.css/;\ + s/<\/HEAD/\n<\/HEAD/;\ + s/<\/HEAD/\n<\/HEAD/;\ + s/\.\d\. //;\ + s/__copy/©/' \ + doc/webserver/privoxy-index.html && $(RM) doc/webserver/*.bak + +# Main documentation target. +dok: dok-release dok-devel dok-user dok-faq dok-readme dok-webserver dok-authors dok-index + @$(ECHO) Documentation created. + +# +# an alternative to the above dok. disabled man page creation for the moment +# +redhat-dok: dok-release dok-devel dok-user dok-faq redhat-readme dok-webserver dok-authors + @$(ECHO) Documentation created. + +## Make README +redhat-readme: + cd doc/source && $(DB)-notoc -V nochunks readme.sgml > tmp.html && $(WDUMP) \ + tmp.html > ../../README && $(RM) -r tmp.html + +## Make AUTHORS file +dok-authors: + cd doc/source && $(DB) -V nochunks authors.sgml > tmp.html && $(WDUMP) \ + tmp.html > ../../AUTHORS && $(RM) tmp.html + +# Set doc entities for VERSION and CODE_STATUS in sgml docs. Toggle content +# exceptions accordingly. This needs to go before any doc building (doh). +dok-release: + @$(ECHO) Setting doc version and status to $(VERSION), $(CODE_STATUS) + @$(PERL) -pi.bak -e 's///;\ + s///' \ + doc/source/*sgml doc/source/*/*sgml + $(RM) -r doc/source/*bak doc/source/*/*bak +ifeq ($(CODE_STATUS),stable) + @$(ECHO) Setting docs to stable $(VERSION) + @$(PERL) -pi.bak -e 's///;\ + s///' \ + doc/source/*sgml doc/source/*/*sgml + $(RM) -r doc/source/*bak doc/source/*/*bak +else + @$(ECHO) Setting docs to not stable $(VERSION) + @$(PERL) -pi.bak -e 's///;\ + s///' \ + doc/source/*sgml doc/source/*/*sgml + $(RM) -r doc/source/*bak doc/source/*/*bak +endif + +# Generate single page html. Used only for creating pdf docs (ATM). +# Currently using: See http://www.easysw.com/htmldoc/pdf-o-matic.php. +# If using this generator, remember U-M has a couple of graphics in +# a parallel directory. +# +dok-shtml: dok-release + mkdir -p doc/source/temp # this directory not in cvs + cd doc/source && $(DB) -iuser-man -V nochunks user-manual.sgml > temp/privoxy-user-manual.html + cd doc/source && $(DB) -V nochunks developer-manual.sgml > temp/privoxy-developer-manual.html + cd doc/source && $(DB) -V nochunks faq.sgml > temp/privoxy-faq.html +# one could use html2ps and ps2pdf. well, that does not work. htmlps produces incorrect output. + +# Make pdf docs from single page html. Requires htmldoc, see +# (http://www.easysw.com/htmldoc/). Note: 1.8.20 has a TOC bug. +# PDF docs are uploaded to webserver as zip archive. +dok-pdf: dok-shtml + @$(ECHO) -n "starting htmldoc version: "; + if htmldoc --version ; then : ; \ + else $(ECHO) "WARNING: could not get htmldoc version" ; fi + cd utils/ldp_print && $(RM) *html *bak *jpg *tmp *pdf *zip + cp -f doc/source/temp/*html doc/webserver/images/*jpg utils/ldp_print + cd utils/ldp_print ;\ + $(PERL) -pi.bak -e 's/\.\.\/images\///; s/(<\/?)SUB/$$1small/i;\ + s/\.\.\/user-manual\/index\.html/privoxy-user-manual.pdf/;\ + s/\.\.\/developer-manual\/index\.html/privoxy-developer-manual.pdf/;\ + s/\.\.\/faq\/index\.html/privoxy-faq.pdf/' *.html ;\ + for i in developer-manual user-manual faq; do \ + ./ldp_print privoxy-$$i.html ;\ + $(ECHO) DONE: privoxy-$$i.pdf ;\ + done ;\ + $(MV) *.pdf ../../doc/pdf ;\ + $(RM) -r *html *bak *jpg *pdf *zip ../../doc/source/temp + +# Create release announcement in text and html, with short and long versions. +# This is a standalone target, and must be invoked directly. +# announce: dok-release +# mkdir -p $(DOC_TMP) +# cd $(DOC_TMP) && cp -f ../announce.sgml . && $(DB) -iannounce-big announce.sgml &&\ +# mv -f index.html announce.html && $(WDUMP) announce.html > announce.txt +# cd $(DOC_TMP) && $(DB) announce.sgml &&\ +# mv -f index.html announce-mini.html && $(WDUMP) announce-mini.html > announce-mini.txt &&\ +# mv -f *html *txt ../../.. +# rm -fr $(DOC_TMP) + +# The main Privoxy config file, generated from sgml sources. +# NOTE: This will require some hand editing. The new file is outputted +# as config.new so that problem sections can be compared to previous +# version. This is hardcored to w3m for html/text conversion. Also, +# requires the shell util 'fmt'. +config-file: dok-release + cd doc/source && $(DB)-notoc -iconfig-file -V nochunks config.sgml > __tmp.html &&\ + w3m -dump __tmp.html |fmt -w 70 > ../../config.new && $(RM) -r __tmp.* + $(PERL) -pi.bak -e 's/^1\. \@\@TITLE\@\@/ /i;\ + /^\d\.\d\.\s+/ && tr/[a-z]/[A-Z]/;\ + $$header_len=0 unless $$hit_header;\ + if ($$hit_header) {\ + print "# ";\ + for ($$i=1; $$i < $$header_len; $$i++) {print "=";}\ + print "\n";\ + };\ + $$hit_header=0;\ + $$hit_header=1 if m/^(\d\.)(\d\.)(\d\.)?\s/ && s/^(\d\.)//;\ + $$header_len = length($$_);\ + s/^/# /; /^# #{12,}/ && s/^# #/####/;\ + s/^.*$$// if $$hit_option;\ + $$hit_option=0;\ + s/^\n//; s/^#\s*-{20,}//; s/ *$$//;\ + $$hit_option=1 if s/^#\s+@@//;' config.new + $(RM) *.bak + @$(ECHO) "****************************************************" + @$(ECHO) "The output file is config.new." + @$(ECHO) "Now -- you need to hand edit the results!!!" + @$(ECHO) "In particular, check the Debug levels, the" + @$(ECHO) "permit-access, forward & socks examples and the" + @$(ECHO) "various user-manual examples, which all" + @$(ECHO) "probably got hammered." + @$(ECHO) "****************************************************" + +# config file, alternate verison using lynx (perl stuff unfinished). Lynx +# does not do so good a job. +config-file-alt: + cd doc/source && $(ECHO) -e ".h2 JUSTIFY\\nJUSTIFY:FALSE" > __tmp.lynx_cfg &&\ + $(DB)-notoc -iconfig-file -V nochunks config.sgml > __tmp.html &&\ + lynx -cfg=__tmp.lynx_cfg -width=78 -dump __tmp.html > ../../config.new && $(RM) -r __tmp.* + $(PERL) -pi -e 's/^( )//;\ + s/:$\/:\n/' config.new ############################################################################# # @@ -781,82 +930,89 @@ web-actions: tidy @ssh ijbswa.sourceforge.net 'find /home/groups/i/ij/ijbswa/htdocs/actions/ -type f | xargs chmod 664 2>/dev/null' @ssh ijbswa.sourceforge.net 'chmod 666 /home/groups/i/ij/ijbswa/htdocs/actions/results/actions-feedback.txt 2>/dev/null' +## +dok-put: + tar --exclude ".cvsignore" --exclude "CVS" --exclude "source" --exclude ".htaccess" \ + --exclude "obsolete" --exclude "actions" --exclude "*.zip" --exclude "robots.txt"\ + doc/* INSTALL LICENSE AUTHORS README \ + -czf $(DOC_FILE) ;\ + $(ECHO) "Uploading doc package ..." ;\ + scp $(DOC_FILE) ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/docs/ + @ssh ijbswa.sourceforge.net 'chmod 775 /home/groups/i/ij/ijbswa/htdocs/docs/*gz 2>/dev/null; true' + $(RM) $(DOC_FILE) + +dok-get: + cd /tmp ;\ + $(WGET) http://privoxy.org/docs/$(DOC_FILE) ;\ + $(TAR) -zxvf $(DOC_FILE) + + ############################################################################# # Source file dependencies ############################################################################# -$(DIR_PRIVOXY_OBJ)/actions.@OBJEXT@: $(DIR_PRIVOXY_SRC)/actions.c $(DIR_PRIVOXY_SRC)/actions.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/list.h $(DIR_PRIVOXY_SRC)/loaders.h $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/actionlist.h -$(DIR_PRIVOXY_OBJ)/cgi.@OBJEXT@: $(DIR_PRIVOXY_SRC)/cgi.c $(DIR_PRIVOXY_SRC)/cgi.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/cgiedit.h $(DIR_PRIVOXY_SRC)/cgisimple.h $(DIR_PRIVOXY_SRC)/list.h $(DIR_PRIVOXY_SRC)/pcrs.h $(DIR_PRIVOXY_SRC)/encode.h $(DIR_PRIVOXY_SRC)/ssplit.h $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/filters.h $(DIR_PRIVOXY_SRC)/actions.h $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/miscutil.h -$(DIR_PRIVOXY_OBJ)/cgiedit.@OBJEXT@: $(DIR_PRIVOXY_SRC)/cgiedit.c $(DIR_PRIVOXY_SRC)/cgiedit.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/cgi.h $(DIR_PRIVOXY_SRC)/list.h $(DIR_PRIVOXY_SRC)/pcrs.h $(DIR_PRIVOXY_SRC)/encode.h $(DIR_PRIVOXY_SRC)/ssplit.h $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/filters.h $(DIR_PRIVOXY_SRC)/actions.h $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/miscutil.h -$(DIR_PRIVOXY_OBJ)/cgisimple.@OBJEXT@: $(DIR_PRIVOXY_SRC)/cgisimple.c $(DIR_PRIVOXY_SRC)/cgisimple.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/cgi.h $(DIR_PRIVOXY_SRC)/list.h $(DIR_PRIVOXY_SRC)/pcrs.h $(DIR_PRIVOXY_SRC)/encode.h $(DIR_PRIVOXY_SRC)/ssplit.h $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/filters.h $(DIR_PRIVOXY_SRC)/actions.h $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/miscutil.h -$(DIR_PRIVOXY_OBJ)/deanimate.@OBJEXT@: $(DIR_PRIVOXY_SRC)/deanimate.c $(DIR_PRIVOXY_SRC)/deanimate.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) -$(DIR_PRIVOXY_OBJ)/encode.@OBJEXT@: $(DIR_PRIVOXY_SRC)/encode.c $(DIR_PRIVOXY_SRC)/encode.h $(DIR_PRIVOXY_SRC)/config.h -$(DIR_PRIVOXY_OBJ)/errlog.@OBJEXT@: $(DIR_PRIVOXY_SRC)/errlog.c $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) @WIN_ONLY@$(DIR_PRIVOXY_SRC)/w32log.h -$(DIR_PRIVOXY_OBJ)/filters.@OBJEXT@: $(DIR_PRIVOXY_SRC)/filters.c $(DIR_PRIVOXY_SRC)/filters.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/encode.h $(DIR_PRIVOXY_SRC)/gateway.h $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/loadcfg.h $(DIR_PRIVOXY_SRC)/parsers.h $(DIR_PRIVOXY_SRC)/ssplit.h $(DIR_PRIVOXY_SRC)/cgi.h $(DIR_PRIVOXY_SRC)/deanimate.h @WIN_ONLY@$(DIR_PRIVOXY_SRC)/win32.h -$(DIR_PRIVOXY_OBJ)/gateway.@OBJEXT@: $(DIR_PRIVOXY_SRC)/gateway.c $(DIR_PRIVOXY_SRC)/gateway.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/loadcfg.h -$(DIR_PRIVOXY_OBJ)/jbsockets.@OBJEXT@: $(DIR_PRIVOXY_SRC)/jbsockets.c $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/filters.h -$(DIR_PRIVOXY_OBJ)/jcc.@OBJEXT@: $(DIR_PRIVOXY_SRC)/jcc.c $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/filters.h $(DIR_PRIVOXY_SRC)/gateway.h $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/killpopup.h $(DIR_PRIVOXY_SRC)/loadcfg.h $(DIR_PRIVOXY_SRC)/loaders.h $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/parsers.h @WIN_ONLY@$(DIR_PRIVOXY_SRC)/w32log.h $(DIR_PRIVOXY_SRC)/win32.h $(DIR_PRIVOXY_SRC)/cgi.h -$(DIR_PRIVOXY_OBJ)/killpopup.@OBJEXT@: $(DIR_PRIVOXY_SRC)/killpopup.c $(DIR_PRIVOXY_SRC)/killpopup.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/loadcfg.h -$(DIR_PRIVOXY_OBJ)/list.@OBJEXT@: $(DIR_PRIVOXY_SRC)/list.c $(DIR_PRIVOXY_SRC)/list.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/list.h $(DIR_PRIVOXY_SRC)/miscutil.h -$(DIR_PRIVOXY_OBJ)/loadcfg.@OBJEXT@: $(DIR_PRIVOXY_SRC)/loadcfg.c $(DIR_PRIVOXY_SRC)/loadcfg.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/filters.h $(DIR_PRIVOXY_SRC)/gateway.h $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/killpopup.h $(DIR_PRIVOXY_SRC)/loaders.h $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/parsers.h @WIN_ONLY@$(DIR_PRIVOXY_SRC)/w32log.h $(DIR_PRIVOXY_SRC)/win32.h -$(DIR_PRIVOXY_OBJ)/loaders.@OBJEXT@: $(DIR_PRIVOXY_SRC)/loaders.c $(DIR_PRIVOXY_SRC)/loaders.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/encode.h $(DIR_PRIVOXY_SRC)/filters.h $(DIR_PRIVOXY_SRC)/gateway.h $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/loadcfg.h $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/parsers.h $(DIR_PRIVOXY_SRC)/ssplit.h -$(DIR_PRIVOXY_OBJ)/miscutil.@OBJEXT@: $(DIR_PRIVOXY_SRC)/miscutil.c $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/config.h -$(DIR_PRIVOXY_OBJ)/parsers.@OBJEXT@: $(DIR_PRIVOXY_SRC)/parsers.c $(DIR_PRIVOXY_SRC)/parsers.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/encode.h $(DIR_PRIVOXY_SRC)/filters.h $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/loadcfg.h $(DIR_PRIVOXY_SRC)/loaders.h $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/ssplit.h -$(DIR_PRIVOXY_OBJ)/ssplit.@OBJEXT@: $(DIR_PRIVOXY_SRC)/ssplit.c $(DIR_PRIVOXY_SRC)/ssplit.h $(DIR_PRIVOXY_SRC)/config.h $(DIR_PRIVOXY_SRC)/miscutil.h -$(DIR_PRIVOXY_OBJ)/urlmatch.@OBJEXT@: $(DIR_PRIVOXY_SRC)/urlmatch.c $(DIR_PRIVOXY_SRC)/urlmatch.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/ssplit.h +actions.@OBJEXT@: actions.c actions.h config.h $(PROJECT_H_DEPS) errlog.h jcc.h list.h loaders.h miscutil.h actionlist.h ssplit.h +cgi.@OBJEXT@: cgi.c cgi.h config.h $(PROJECT_H_DEPS) cgiedit.h cgisimple.h list.h pcrs.h encode.h ssplit.h jcc.h filters.h actions.h errlog.h miscutil.h +cgiedit.@OBJEXT@: cgiedit.c cgiedit.h config.h $(PROJECT_H_DEPS) cgi.h list.h pcrs.h encode.h ssplit.h jcc.h filters.h actions.h errlog.h miscutil.h +cgisimple.@OBJEXT@: cgisimple.c cgisimple.h config.h $(PROJECT_H_DEPS) cgi.h list.h pcrs.h encode.h ssplit.h jcc.h filters.h actions.h errlog.h miscutil.h +deanimate.@OBJEXT@: deanimate.c deanimate.h config.h $(PROJECT_H_DEPS) +encode.@OBJEXT@: encode.c encode.h config.h +errlog.@OBJEXT@: errlog.c errlog.h config.h $(PROJECT_H_DEPS) @WIN_ONLY@w32log.h +filters.@OBJEXT@: filters.c filters.h config.h $(PROJECT_H_DEPS) errlog.h encode.h gateway.h jbsockets.h jcc.h loadcfg.h parsers.h ssplit.h cgi.h deanimate.h @WIN_ONLY@win32.h +gateway.@OBJEXT@: gateway.c gateway.h config.h $(PROJECT_H_DEPS) errlog.h jbsockets.h jcc.h loadcfg.h +jbsockets.@OBJEXT@: jbsockets.c jbsockets.h config.h $(PROJECT_H_DEPS) filters.h +jcc.@OBJEXT@: jcc.c jcc.h config.h $(PROJECT_H_DEPS) errlog.h filters.h gateway.h jbsockets.h killpopup.h loadcfg.h loaders.h miscutil.h parsers.h @WIN_ONLY@w32log.h win32.h cgi.h +killpopup.@OBJEXT@: killpopup.c killpopup.h config.h $(PROJECT_H_DEPS) jcc.h loadcfg.h +list.@OBJEXT@: list.c list.h config.h $(PROJECT_H_DEPS) list.h miscutil.h +loadcfg.@OBJEXT@: loadcfg.c loadcfg.h config.h $(PROJECT_H_DEPS) errlog.h filters.h gateway.h jbsockets.h jcc.h killpopup.h loaders.h miscutil.h parsers.h @WIN_ONLY@w32log.h win32.h +loaders.@OBJEXT@: loaders.c loaders.h config.h $(PROJECT_H_DEPS) errlog.h encode.h filters.h gateway.h jcc.h loadcfg.h miscutil.h parsers.h ssplit.h +miscutil.@OBJEXT@: miscutil.c miscutil.h config.h +parsers.@OBJEXT@: parsers.c parsers.h config.h $(PROJECT_H_DEPS) errlog.h encode.h filters.h jbsockets.h jcc.h loadcfg.h loaders.h miscutil.h ssplit.h +ssplit.@OBJEXT@: ssplit.c ssplit.h config.h miscutil.h +urlmatch.@OBJEXT@: urlmatch.c urlmatch.h config.h $(PROJECT_H_DEPS) errlog.h miscutil.h ssplit.h + +# GNU regex +gnu_regex.@OBJEXT@: gnu_regex.c gnu_regex.h config.h # PCRS -$(DIR_PRIVOXY_OBJ)/pcrs.@OBJEXT@: $(DIR_PRIVOXY_SRC)/pcrs.c $(DIR_PRIVOXY_SRC_PCRE)/pcre.h $(DIR_PRIVOXY_SRC)/pcrs.h $(DIR_PRIVOXY_SRC)/config.h +pcrs.@OBJEXT@: pcrs.c pcrs.h config.h pcre/pcre.h # PCRE -$(DIR_PRIVOXY_OBJ)/get.@OBJEXT@: $(DIR_PRIVOXY_SRC_PCRE)/get.c $(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h -$(DIR_PRIVOXY_OBJ)/maketables.@OBJEXT@: $(DIR_PRIVOXY_SRC_PCRE)/maketables.c $(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h -$(DIR_PRIVOXY_OBJ)/pcre.@OBJEXT@: $(DIR_PRIVOXY_SRC_PCRE)/pcre.c $(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h $(DIR_PRIVOXY_SRC_PCRE)/chartables.c -$(DIR_PRIVOXY_OBJ)/pcreposix.@OBJEXT@: $(DIR_PRIVOXY_SRC_PCRE)/pcreposix.c $(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h $(DIR_PRIVOXY_SRC_PCRE)/pcreposix.h -$(DIR_PRIVOXY_OBJ)/study.@OBJEXT@: $(DIR_PRIVOXY_SRC_PCRE)/study.c $(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h +pcre/get.@OBJEXT@: pcre/get.c pcre/config.h pcre/internal.h pcre/pcre.h +pcre/maketables.@OBJEXT@: pcre/maketables.c pcre/config.h pcre/internal.h pcre/pcre.h +pcre/pcre.@OBJEXT@: pcre/pcre.c pcre/config.h pcre/internal.h pcre/pcre.h pcre/chartables.c +pcre/pcreposix.@OBJEXT@: pcre/pcreposix.c pcre/config.h pcre/internal.h pcre/pcre.h pcre/pcreposix.h +pcre/study.@OBJEXT@: pcre/study.c pcre/config.h pcre/internal.h pcre/pcre.h # An auxiliary program makes the PCRE default character table source -$(DIR_PRIVOXY_SRC_PCRE)/chartables.c: $(DIR_PRIVOXY_OBJ)/dftables@EXEEXT@ - $(DIR_PRIVOXY_SRC_PCRE)/dftables@EXEEXT@ >$(DIR_PRIVOXY_SRC_PCRE)/chartables.c +pcre/chartables.c: pcre/dftables@EXEEXT@ + pcre/dftables@EXEEXT@ >pcre/chartables.c -$(DIR_PRIVOXY_OBJ)/dftables@EXEEXT@: $(DIR_PRIVOXY_SRC_PCRE)/dftables.c $(DIR_PRIVOXY_SRC_PCRE)/maketables.c $(DIR_PRIVOXY_SRC_PCRE)/pcre.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/config.h - $(CC) -o $(DIR_PRIVOXY_SRC_PCRE)/dftables@EXEEXT@ $(CFLAGS) $(DIR_PRIVOXY_SRC_PCRE)/dftables.c +pcre/dftables@EXEEXT@: pcre/dftables.c pcre/maketables.c pcre/pcre.h pcre/internal.h pcre/config.h + $(CC) -o pcre/dftables@EXEEXT@ $(CFLAGS) pcre/dftables.c # Win32 -$(DIR_PRIVOXY_OBJ)/w32log.@OBJEXT@: $(DIR_PRIVOXY_SRC)/config.h $(DIR_PRIVOXY_SRC)/errlog.h $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/loadcfg.h $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/pcrs.h $(DIR_PRIVOXY_SRC)/project.h $(DIR_PRIVOXY_SRC)/w32log.c $(DIR_PRIVOXY_SRC)/w32log.h $(DIR_PRIVOXY_SRC)/w32taskbar.h $(DIR_PRIVOXY_SRC)/win32.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h $(DIR_PRIVOXY_SRC_PCRE)/pcreposix.h -$(DIR_PRIVOXY_OBJ)/win32.@OBJEXT@: $(DIR_PRIVOXY_SRC)/config.h $(DIR_PRIVOXY_SRC)/jcc.h $(DIR_PRIVOXY_SRC)/loadcfg.h $(DIR_PRIVOXY_SRC)/pcrs.h $(DIR_PRIVOXY_SRC)/project.h $(DIR_PRIVOXY_SRC)/w32log.h $(DIR_PRIVOXY_SRC)/win32.c $(DIR_PRIVOXY_SRC)/win32.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h $(DIR_PRIVOXY_SRC_PCRE)/pcreposix.h -$(DIR_PRIVOXY_OBJ)/w32taskbar.@OBJEXT@: $(DIR_PRIVOXY_SRC)/config.h $(DIR_PRIVOXY_SRC)/w32log.h $(DIR_PRIVOXY_SRC)/w32taskbar.c $(DIR_PRIVOXY_SRC)/w32taskbar.h - -$(DIR_PRIVOXY_OBJ)/w32res.res: $(DIR_PRIVOXY_SRC)/w32res.rc \ - $(DIR_PRIVOXY_SRC)/w32res.h \ - $(DIR_PRIVOXY_SRC)/config.h \ - $(DIR_PRIVOXY_SRC)/icons/ico00001.ico \ - $(DIR_PRIVOXY_SRC)/icons/ico00002.ico \ - $(DIR_PRIVOXY_SRC)/icons/ico00003.ico \ - $(DIR_PRIVOXY_SRC)/icons/ico00004.ico \ - $(DIR_PRIVOXY_SRC)/icons/ico00005.ico \ - $(DIR_PRIVOXY_SRC)/icons/ico00006.ico \ - $(DIR_PRIVOXY_SRC)/icons/ico00007.ico \ - $(DIR_PRIVOXY_SRC)/icons/ico00008.ico \ - $(DIR_PRIVOXY_SRC)/icons/idle.ico \ - $(DIR_PRIVOXY_SRC)/icons/privoxy.ico +w32log.@OBJEXT@: w32log.c errlog.h config.h jcc.h loadcfg.h miscutil.h pcre/pcre.h pcre/pcreposix.h pcrs.h project.h w32log.h w32taskbar.h win32.h +w32taskbar.@OBJEXT@: w32taskbar.c config.h w32log.h w32taskbar.h +win32.@OBJEXT@: win32.c config.h jcc.h loadcfg.h pcre/pcre.h pcre/pcreposix.h pcrs.h project.h w32log.h win32.h + +w32.res: w32.rc w32res.h icons/ico00001.ico icons/ico00002.ico icons/ico00003.ico icons/ico00004.ico icons/ico00005.ico icons/ico00006.ico icons/ico00007.ico icons/ico00008.ico icons/idle.ico icons/privoxy.ico config.h windres -D__MINGW32__=0.2 -O coff -i $< -o $@ # AmigaOS -@AMIGAOS_ONLY@OBJS += $(DIR_PRIVOXY_OBJ)/amiga.@OBJEXT@ +@AMIGAOS_ONLY@OBJS += amiga.o @AMIGAOS_ONLY@CFLAGS += -D__AMIGAVERSION__=\"$(VERSION_MAJOR).$(VERSION_MINOR)$(VERSION_POINT)\" -D__AMIGADATE__=\"`date +%d.%m.%Y`\" -W -m68020 -noixemul -fbaserel -msmall-code @AMIGAOS_ONLY@LDFLAGS += -m68020 -noixemul -fbaserel @AMIGAOS_ONLY@LIBS = -lm /gg/lib/libb/libm020/libnix/swapstack.o -$(DIR_PRIVOXY_OBJ)/amiga.@OBJEXT@: $(DIR_PRIVOXY_SRC)/amiga.c $(DIR_PRIVOXY_SRC)/amiga.h $(DIR_PRIVOXY_SRC)/config.h +@AMIGAOS_ONLY@amiga.o: amiga.c amiga.h config.h $(PROGRAM): $(OBJS) $(W32_FILES) $(LD) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LIBS) clean: - $(RM) a.out $(OBJS) $(W32_FILES) $(W32_INIS) $(PROGRAM) \ - default.action `find . -name TAGS -o -name tags` + $(RM) a.out $(OBJS) $(W32_FILES) $(W32_INIS) $(PROGRAM) default.action `find . -name TAGS -o -name tags` tidy: $(RM) `find . -name "*~"` @@ -864,9 +1020,9 @@ tidy: $(RM) `find . -name ".\#*"` clobber: tidy - $(RM) GNUmakefile configure src/config.h.in src/config.h config.cache config.status config.log logfile \ - privoxy.log core *.tar.gz *.tar privoxy-cl.spec $(DOC_DIR)/ldp.dsl \ - $(DOC_DIR)/GNUmakefile + $(RM) GNUmakefile configure config.h.in config.h config.cache config.status config.log logfile \ + privoxy.log core *.tar.gz *.tar privoxy-cl.spec doc/source/ldp.dsl + $(RM) -r autom4te.cache # # FIXME: What is all this? @@ -982,8 +1138,8 @@ install: CONF_DEST LOG_DEST PID_DEST check_doc GROUP_T $(MV) config.updated config @# Install the config support files. Test for root install, and abort - @# if there is no privoxy user, and no other user or group was enabled - @# during configure. + @# if there is no privoxy user, and no other user was enabled during + @# configure. Later, install init script if appropriate. @$(ECHO) Installing templates to $(CONF_DEST)/templates @for i in `find templates -type f`; do \ $(INSTALL) $(INSTALL_T) $$i $(CONF_DEST)/templates ;\ @@ -1189,172 +1345,117 @@ coffee: ## end: # $Log: GNUmakefile.in,v $ -# Revision 1.138 2003/10/17 17:51:58 oes -# Added a one-time warning for compiling CVS HEAD -# -# Revision 1.137 2003/01/18 19:04:58 david__schmidt -# Build support for the Java Activity Console - build with 'make java-activity-console', run with 'java -jar ActivityConsole.jar' -# -# Revision 1.136 2002/12/28 04:10:21 david__schmidt -# Initial drop of dashboard instrumentation - enabled with -# --enable-activity-console -# -# Revision 1.135 2002/11/04 05:11:05 hal9 -# Just a clean up of overly verbose output from install/uninstall. -# -# Revision 1.134 2002/10/28 06:01:39 hal9 -# Make uninstall: cp -v problems on SF Solaris. -# -# Revision 1.133 2002/10/28 02:12:22 hal9 -# Make install/uninstall: -# - More cleanup of variables -# - Make the minimum requirement for root install, an available non-root GROUP. -# If a privoxy user exists (and no other USER is specified), then the files -# that require write access are installed as group owned by privoxy. FIXME: -# There has to be a cleaner way to do this. -# - Uninstall now saves configuration files to /tmp. -# -# Revision 1.132 2002/10/24 22:24:58 hal9 -# Make install: Minor clean up for variable handling. -# -# Revision 1.131 2002/10/23 07:00:21 agotneja -# added a chmod on mkinstalldirs just before using it, otherwise it -# will fail when running make for the first time. -# -# Revision 1.130 2002/10/22 05:49:14 hal9 -# Make install: -# - /bin/sh on Solaris does not handle: ! test. -# - Remove some unused doc variables. -# - Make configs group writable. -# -# Revision 1.129 2002/10/20 07:15:12 hal9 -# Getting near the end (I hope) of install target updates: -# - Rewrite RH init script to reflect configured values. -# - Test for USER=root as well as UID=0 -# - Test for invalid group (probably needs more work). -# - Add /usr to /usr/local test for when to install init scripts, etc. -# - More testing on previous changes. -# -# Revision 1.128 2002/10/18 05:36:32 hal9 -# More install target fixes: -# - Quick fix of log ownership on root install (lightly tested). If this goes -# true to form, then the fix will break something else :( -# - Fix what looks like was invalid user on Slack if root install and -# we use an existing privoxy user. No way to test this. -# See FIXMEs. -# -# Revision 1.127 2002/10/18 00:58:07 hal9 -# More install/uninstall/install-strip updates: -# - Don't install gzipped man page (Solaris again). -# - Don't overwrite existing config files, and install new versions as *.new. -# Fix permissions/ownership here too. -# - Better testing before removing directories. -# - Some better messages during install, ie 'Preserving configs', etc. -# - Better handling of install-strip to fix previous problem of trying to strip -# init scripts. -# - Crude test for valid USER in case is set on command line. -# - Force immediate exit on some errors (eg invalid group). -# -# Revision 1.126 2002/10/16 05:38:00 hal9 -# More make install/uninstall updates: -# -Make compatible with install-sh with does not support -b flag, and can only -# handle one file at a time (sigh). -# -Manually save existing config files, if they exist. -# -Fix install-strip so does not try to strip init scripts. -# -# Revision 1.125 2002/10/15 05:53:34 hal9 -# A few more cleanups: -# -use mkinstalldirs consistently. -# -Install init script and logrotate only is prefix=/usr/local (installed to -# system dir /etc instead of /usr/local...) -# -Test for directory existence before removing to avoid misleading error -# messages. -# -# Revision 1.124 2002/10/13 19:58:09 hal9 -# Hopefully, this is final updates for install and uninstall targets. -# - Fix typo in chown syntax -# - chmod on mkinstalldirs to make it executable (is there a better way?). -# - Cleanup comments, and revert most of previous output cleanup changes. -# - Include all HTML docs, since there are cross links between these. -# - Improved group handling (still some potential problems, see FIXME). -# - Update PHONY targets. -# - Uninstall was not removing CONF and LOG destinations in some situations. -# - Various other minor cleanups. -# -# Revision 1.123 2002/10/12 06:05:41 hal9 -# WIP: This is mostly to fix various problems encountered on SF CF Solaris -# servers for the install target only. This did not handle /[^C]*, test -e, not -# quoting within tests (ie [ `id $(USER)` = `id` ] needs quoting) in some -# situations, and does not support id -u (with the id in $PATH, but there is -# another...). Also, cleaned up output. Needs testing. I am unable to test the -# root install stuff either. It installs now at least (not tested further). -# A few other nits. -# -# Revision 1.122 2002/10/11 06:03:08 hal9 -# Really install FAQ this time, and not u-m in two locations. Include images -# for u-m. -# -# Revision 1.120 2002/10/10 20:39:27 dessent -# -# -# Fixes for Win32 GUI build (added "$(DIR_PRIVOXY_SRC)/" to dependencies list) -# -# Revision 1.119 2002/09/23 03:42:41 hal9 -# This is higuita's make install/uninstall patch. Needs testing please!!! -# -# Revision 1.118 2002/09/11 08:22:37 oes -# Fixed path (C_HDRS are in src/ now) -# -# Revision 1.117 2002/09/06 23:33:35 hal9 -# Fix clobber for config.h and config.h.in are in src now. -# -# Revision 1.116 2002/09/06 05:22:57 hal9 -# Adapt make webserver target to 3.0 for pdf uploading. -# -# Revision 1.115 2002/09/05 19:13:04 hal9 -# Migrate Karstens make snapshot stuff (not tested). -# -# Revision 1.114 2002/09/05 11:58:30 oes -# Synced in some changes fromm the stable branch: -# From Revision 1.104.2.14 2002/08/10 11:19:37 oes: -# - Add dependency: pcrs.o deps on config.h -# Revision 1.104.2.9 2002/07/26 15:17:02 oes -# - Added generation of default.action from defaul.action.master -# - Deleted obsolete re_filterfile.txt generation -# -# Revision 1.113 2002/07/30 21:50:25 hal9 -# Add redhat-test target, and migrate the RPM_PACKAGEV stuff from 3.0 branch. -# -# Revision 1.112 2002/06/28 18:30:10 jongfoster -# Fixing bugs compiling PCRE -# -# Revision 1.111 2002/06/05 00:26:21 hal9 -# Move all doc build stuff to doc/source/GNUmakefile, leaving a 'make dok' -# target only in toplevel. Add DOC_STATUS variable so docs can be built without -# touching sgml source. -# -# Revision 1.110 2002/06/04 14:51:48 jongfoster -# Updating for new paths: -# - Source files in src/ -# - Object files in obj/ -# -# Revision 1.109 2002/05/28 09:16:15 oes -# Added comment for -notoc kludge -# -# Revision 1.108 2002/05/28 03:56:08 hal9 -# make dok-index target for privoxy-index.html. Fix *bak dead soldiers in -# doc/webserver. -# -# Revision 1.107 2002/05/27 23:26:33 mal0rd -# Made doc-generation configuration automatic. -# References to DB2HTML were removed, not used. -# --with-docbook now only needed if in odd path. -# -# Revision 1.106 2002/05/26 04:55:11 mal0rd -# Added debian-dist and debian-upload targets. Also documented usage. -# -# Revision 1.105 2002/05/25 22:48:19 hal9 -# Add -notoc to README build (per oes's dsl magic). +# Revision 1.104.2.28 2004/06/10 17:06:05 hal9 +# Fix bug #959617, by moving TMPDIR var to create-snapshot target, which is the +# only place it is used. +# +# Revision 1.104.2.27 2004/02/07 16:11:10 oes +# Make clobber remove the autom4te.cache dir. +# Closes BR #889300 +# +# Revision 1.104.2.26 2004/01/31 16:32:25 oes +# Adding a check for an htmldoc variant from the debian diff +# +# Revision 1.104.2.25 2004/01/31 01:15:33 oes +# Fixed a typo; updated copyright notice +# +# Revision 1.104.2.24 2003/12/03 10:30:02 oes +# - Added new dependency: actions.c -> ssplit.h +# - Excluded PDF docs from src tarball +# +# Revision 1.104.2.23 2003/04/20 17:28:52 hal9 +# Strip trailing spaces from config-file generation, bug #724596. +# +# Revision 1.104.2.22 2003/03/28 03:32:01 hal9 +# Minor changes for Privoxy home page: +# - Handle © more sanely +# - include link to announce.txt +# Also, disable 'make announce' target. +# +# Revision 1.104.2.21 2002/11/04 07:04:03 hal9 +# Catch up with main trunk install/uninstall. Quiet output, etc. +# +# Revision 1.104.2.20 2002/10/25 02:44:22 hal9 +# Port of make install, etc from main trunk. Needs testing! Add Slackware +# support, and other related changes. Update related docs. +# +# Revision 1.104.2.19 2002/09/26 22:50:02 hal9 +# New user-manual examples in config-file are getting wrapped. Add warning. +# +# Revision 1.104.2.18 2002/08/23 12:22:40 oes +# Added warning to broken install target +# +# Revision 1.104.2.17 2002/08/16 03:19:34 hal9 +# More (minor) cleanup of html before pdf processing to make some relative +# links work as pdf -> pdf. Upload pdf as zip archive now. +# +# Revision 1.104.2.16 2002/08/14 16:43:27 hal9 +# Added pdf docs to make webserver target. +# +# Revision 1.104.2.15 2002/08/11 20:02:41 hal9 +# New targets for man page (make man) and pdf (make dok-pdf) targets. +# +# Revision 1.104.2.14 2002/08/10 11:19:37 oes +# - Make -Ipcre (again) conditional on STATIC_PCRE +# - $(RPMBUILD) -> $(RPM) for SuSE +# - Add dependency: pcrs.o deps on config.h +# +# Revision 1.104.2.13 2002/08/07 15:13:54 hal9 +# Remove pdf2 target, and make it dok-shtml (single page html for pdf +# conversion). +# +# Revision 1.104.2.12 2002/08/06 11:29:36 oes +# Fixed detection/inclusion of pcre.h, which is in a pcre subdir on RH +# +# Revision 1.104.2.11 2002/07/30 19:38:11 hal9 +# Add redhat-test target for testing purposes only. Fix RPM_PACKAGEV to what +# *I think* it was supposed to be (was breaking upload targets since it was +# set to RPM_VERSION). +# +# Revision 1.104.2.10 2002/07/27 22:56:53 kick_ +# cleanups of the redhat-srpm target +# +# Revision 1.104.2.9 2002/07/26 15:17:02 oes +# - Added generation of default.action from defaul.action.master +# - Deleted obsolete re_filterfile.txt generation +# +# Revision 1.104.2.8 2002/07/12 10:04:32 kick_ +# added helper targets to the makefile. They shouldn't break anything, but +# make my life a lot easier. +# +# The new rpm has been splitted into two parts, one for package installation/ +# removal, one for package building. +# Therefore rpm -ta isn't a valid command anymore and needs to be replaced +# by rpmbuild -ta (this is backwards compatible) +# +# Revision 1.104.2.7 2002/06/07 00:23:47 hal9 +# Fixing a quirk of man2html (on my system) that pulls punctuation into URLs, +# thus breaking them completely. +# +# Revision 1.104.2.6 2002/06/02 03:26:25 hal9 +# Update CONFIG_FILES (ie update basic.action, etc), and also DOC_FILES (exclude +# index.html and team/index.html) +# +# Revision 1.104.2.5 2002/05/30 15:35:01 hal9 +# This is more cleanup on the make config-file target. Most issues for +# automatic generation are taken care of. There are still some problems +# that require hand editing. Namely, some of the examples that are > 80 chars. +# +# Revision 1.104.2.4 2002/05/29 02:12:17 hal9 +# Ooops...forgot about perl -pi cygwin problem. Add -pi.bak. Also, the +# new target is 'make config-file', _not_ make config. +# +# Revision 1.104.2.3 2002/05/29 02:05:48 hal9 +# 'make config' target added (WIP) for future generation of config file from +# text in u-m so the two are in sync. New generated config, which requires +# some hand editing for the time being. +# +# Revision 1.104.2.2 2002/05/28 02:32:55 hal9 +# New target 'make dok-index' for privoxy-index.html. Also, fixed *.bak files +# not being cleaned up in doc/webserver. +# +# Revision 1.104.2.1 2002/05/26 17:19:34 hal9 +# Remove Table of Contents from readme with oes's dsl trick. # # Revision 1.104 2002/05/24 00:03:49 oes # Use p_doc.css for the Homepage for consistency diff --git a/INSTALL b/INSTALL index 18ec2724..0ab1e84f 100644 --- a/INSTALL +++ b/INSTALL @@ -1,6 +1,6 @@ /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/doc/source/install.sgml,v $ + * File : $Source: /cvsroot/ijbswa/current/INSTALL,v $ * * Purpose : INSTALL file to help with installing from source. * @@ -34,121 +34,50 @@ ------------------------------------------------------------------------------- -This file describes installing Privoxy from source. If you are installing a -pre-built binary installation, you should probably read the appropriate section -in User Manual. - To build Privoxy from source, autoconf, GNU make (gmake), and, of course, a C compiler like gcc are required. When building from a source tarball (either release version or nightly CVS tarball), first unpack the source: - tar xzvf privoxy-3.1.1-beta-src* [.tgz or .tar.gz] - cd privoxy-3.1.1-beta + tar xzvf privoxy-3.0.3-src* [.tgz or .tar.gz] + cd privoxy-3.0.3 + For retrieving the current CVS sources, you'll need CVS installed. Note that sources from CVS are development quality, and may not be stable, or well tested. To download CVS source: - cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login - cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co current - cd current + cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login + cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co current + cd current + This will create a directory named current/, which will contain the source tree. -You can also check out any Privoxy "branch", just exchange the current name -with the wanted branch name (Example: v_3_0_branch for the 3.0 cvs tree). - -It is also strongly recommended to not run Privoxy as root, and instead it is -suggested to create a "privoxy" user and group for this purpose. See your local -documentation for the correct command line to do this. - -/etc/passwd might then look like: - - privoxy:*:7777:7777:privoxy proxy:/no/home:/no/shell +Then, in either case, to build from unpacked tarball or CVS source: -And then /etc/group, like: + autoheader + autoconf + ./configure # (--help to see options) + make # (the make from gnu, gmake for *BSD) + su + make -n install # (to see where all the files will go) + make install # (to really install) - privoxy:*:7777: -Some binary packages may do this for you. - -Then, to build from either unpacked tarball or CVS source: - - autoheader - autoconf - ./configure # (--help to see options) - make # (the make from GNU, sometimes called gmake) - su - make -n install # (to see where all the files will go) - make -s install # (to really install, -s to silence output) - -If you have GNU make, you can have the first four steps automatically done for +If you have gnu make, you can have the first four steps automatically done for you by just typing: - make + make -in the freshly downloaded or unpacked source directory. -WARNING: If installing as root, the install will fail unless a non-root user or -group is specified, or a privoxy user and group already exist on the system. If -a non-root user is specified, and no group, then the installation will try to -also use a group of the same name as "user". If a group is specified (and no -user), then the support files will be installed as writable by that group, and -owned by the user running the installation. - -configure accepts --with-user and --with-group options for setting user and -group ownership of the configuration files (which need to be writable by the -daemon). The specified user must already exist. When starting Privoxy, it -should be run as this same user to insure write access to configuration and log -files. - -Alternately, you can specify user and group on the make command line, but be -sure both already exist: - - make -s install USER=privoxy GROUP=privoxy - -The default installation path for make install is /usr/local. This may of -course be customized with the various ./configure path options. If you are -doing a root install to anywhere else besides /usr/local, be sure to set the -appropriate paths with the correct configure options (./configure --help). - -If you do install to /usr/local, the install will use sysconfdir=$prefix/etc/ -privoxy by default. All other destinations, and the direct usage of ---sysconfdir flag behave like normal, i.e. will not add the extra privoxy -directory. This is for a safer install, as there may already exist another -program that uses a file with the "config" name, and thus makes /usr/local/etc -cleaner. - -If installing to /usr/local, the docs will go by default to $prefix/share/doc. -But if this directory doesn't exist, it will then try $prefix/doc and install -there before creating a new $prefix/share/doc just for Privoxy. - -Again, if the installs goes to /usr/local, the localstatedir (ie: var/) will -default to /var instead of $prefix/var so the logs will go to /var/log/privoxy -/, and the pid file will be created in /var/run/privoxy.pid. - -make install will attempt to set the correct values in config (main -configuration file). You may want to check this to make sure all values are -correct. If appropriate, an init script will be installed, but it is up to the -user to determine how and where to start Privoxy. The init script should be -checked for correct paths and values, if anything other than a default install -is done. - -If install finds previous versions of any configuration files, these will not -be overwritten, and the new ones will be installed with a "new" extension. You -will then need to manually update the installed configuration files as needed. -All template files will be overwritten. If you have customized, local -templates, you should save these first. If a previous version of Privoxy is -already running, you will have to restart it manually. +in the freshly downloaded or unpacked source directory. For more detailed instructions on how to build Redhat and SuSE RPMs, Windows self-extracting installers, building on platforms with special requirements etc, please consult the developer manual. -The simplest command line to start Privoxy is $path/privoxy --user=privoxy -$path/etc/privoxy/config. See privoxy --usage, or the man page, for other -options, and configuration. +For binary RPM installation, and other platforms, see the user-manual as well. diff --git a/LICENSE b/LICENSE index 09aa295a..ddc3d607 100644 --- a/LICENSE +++ b/LICENSE @@ -1,8 +1,4 @@ - Copyright (C) 2001, 2002 Privoxy Developers , - and licensed under the GNU General Public License. - - - GNU GENERAL PUBLIC LICENSE + GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. diff --git a/Makefile b/Makefile index 9b914527..e506703f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.9 2002/10/23 06:14:09 agotneja Exp $ +# $Id: Makefile,v 1.5.2.2 2002/10/25 02:44:23 hal9 Exp $ # # Written by and Copyright (C) 2001 the SourceForge # Privoxy team. http://www.privoxy.org/ @@ -26,17 +26,11 @@ # Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # $Log: Makefile,v $ -# Revision 1.9 2002/10/23 06:14:09 agotneja -# Added FreeBSD checks to stop people from using the default 'make' +# Revision 1.5.2.2 2002/10/25 02:44:23 hal9 +# Port of make install, etc from main trunk. Needs testing! Add Slackware +# support, and other related changes. Update related docs. # -# Revision 1.8 2002/10/23 05:41:45 agotneja -# Added checks for Solaris 'make' command, and more extensive checks that -# the user is running GNU make. -# -# Revision 1.7 2002/10/22 02:22:18 hal9 -# Look for gmake first, and fall back to make. More Solaris trouble. -# -# Revision 1.6 2002/09/05 14:35:17 oes +# Revision 1.5.2.1 2002/08/05 17:46:13 oes # Change make to gmake to fix auto-build on Solaris # # Revision 1.5 2002/04/11 12:51:34 oes @@ -58,16 +52,6 @@ ############################################################################# -# This script will first try to use the GNU make command, then the standard -# make command, checking whether the command returns 'GNU' as part of its -# version string. Amend this to point to your GNU make command if it is -# not in your path. -# Further tests; -# GNU 'make' sets the MAKE_VERSION variable -# Solaris 'make' sets the HOST_ARCH variable -# FreeBSD 'make' sets the MACHINE_ARCH variable -# We check if this isn't GNU but matches one of the above we error out - GNU_MAKE_CMD = gmake MAKE_CMD = make @@ -113,7 +97,6 @@ error: .PHONY: error - ############################################################################# ## Local Variables: diff --git a/README b/README index 1a0bfc1a..b2f48849 100644 --- a/README +++ b/README @@ -1,10 +1,10 @@ /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/doc/source/readme.sgml,v $ + * File : $Source: /cvsroot/ijbswa/current/README,v $ * * Purpose : README file to give a short intro. * - * Copyright : Written by and Copyright (C) 2001,2002 the SourceForge + * Copyright : Written by and Copyright (C) 2001 - 2004 the SourceForge * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -31,19 +31,13 @@ * *********************************************************************/ -This README is included with the development version of Privoxy 3.1.1, which -will someday become Privoxy v3.2. See http://www.privoxy.org/ for more -information. The current code level is technically alpha, but is not yet -significantly different from the 3.0.0 stable branch at this time (other -than more bugs). - -There is not much reason to actually run this branch unless you want to help -chase bugs, or with development. +This README is included with Privoxy 3.0.3. See http://www.privoxy.org/ for +more information. The current code maturity level is "stable". ------------------------------------------------------------------------------- Privoxy is a web proxy with advanced filtering capabilities for protecting -privacy, filtering web page content, managing cookies, controlling access, and +privacy, modifying web page content, managing cookies, controlling access, and removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a very flexible configuration and can be customized to suit individual needs and tastes. Privoxy has application for both stand-alone systems and multi-user @@ -55,6 +49,16 @@ Privoxy is based on Internet Junkbuster (tm). 1. IMPORTANT CHANGES +MORE NEWS! January 2004, Privoxy 3.0.3 is released. This is the another +maintenance release of Privoxy which fixes more bugs, further refines the +configuration and works around some known third-party problems. See the +ChangeLog for complete details. Upgrading from 3.0.2 is recommended. + +NEWS! March 2003, Privoxy 3.0.2 is released. This is the first maintenance +release of Privoxy. There are no significant new features in this release. Some +bugs are fixed, and some existing features have been enhanced. See ChangeLog +for details. Upgrading from 3.0.0 is recommended. + REALLY BIG NEWS! August 2002: The long-awaited, oft-delayed stable version of Privoxy 3.0 is finally released! This is way behind schedule, but better late than never. The developers all hope the wait was worth it. @@ -81,7 +85,7 @@ User Manual, for other installation types. 3. RUN privoxy [--help] [--version] [--no-daemon] [--pidfile PIDFILE] [--user USER -[.GROUP]] [config_file] +[.GROUP]] [--chroot] [config_file] See the man page or User Manual for an explanation of each option, and other configuration and usage issues. @@ -110,29 +114,23 @@ Junkbuster v2.0.x. The User Manual has an explanation of all configuration options, and examples: http://www.privoxy.org/user-manual/. Be sure to set your browser(s) for HTTP/HTTPS Proxy at :, or whatever -you specify in the config file under 'listen-address'. DEFAULT is localhost: -8118. Note that Privoxy ONLY proxies HTTP (and HTTPS) traffic. Do not try it -with FTP or other protocols for the simple reason it does not work. +you specify in the config file under 'listen-address'. DEFAULT is +localhost:8118. Note that Privoxy ONLY proxies HTTP (and HTTPS) traffic. Do not +try it with FTP or other protocols for the simple reason it does not work. The actions list can be configured via the web interface accessed via http:// p.p/, as well other options. -All configuration files are subject to unannounced changes during the -development process. - ------------------------------------------------------------------------------- 5. DOCUMENTATION -There should be documentation in the 'doc' subdirectory, but it is not -completed at this point. In particular, see the User Manual there, the FAQ, and -those interested in Privoxy development, should look at developer-manual. +There should be documentation in the 'doc' subdirectory. In particular, see the +User Manual there, the FAQ, and those interested in Privoxy development, should +look at developer-manual. -The most up to date source of information on the current development version, -may still be either comments in the source code, or the included configuration -files. The source and configuration files are all well commented. The main -configuration files are: 'config', 'default.action', and 'default.filter' in -the toplevel source directory. +The source and configuration files are all well commented. The main +configuration files are: 'config', 'default.action', and 'default.filter'. Included documentation may vary according to platform and packager. All documentation is posted on http://www.privoxy.org, in case you don't have it, @@ -150,7 +148,7 @@ with the best support: 6.1. Get Support -For casual users, our support forum at SourceForge is probably best suited: +For casual users, our support forum at SourceForge is probably best suited: http://sourceforge.net/tracker/?group_id=11118&atid=211118 All users are of course welcome to discuss their issues on the users mailing @@ -173,7 +171,7 @@ debugging. If you are using your own custom configuration, please try the stock configs to see if the problem is configuration related. If not using the latest version, chances are that the bug has been found and -fixed in the meantime. We would appreciate if you could take the time to +fixed in the meantime. We would appreciate if you could take the time to upgrade to the latest version (or even the latest CVS snapshot) and verify your bug, but this is not required for reporting. diff --git a/acconfig.h b/acconfig.h index 815f3f8e..0bc0daa0 100644 --- a/acconfig.h +++ b/acconfig.h @@ -37,12 +37,18 @@ * * Revisions : * $Log: acconfig.h,v $ - * Revision 1.30 2002/09/06 12:14:12 oes - * Added missing preproc symbols PCRE*_H_IN_SUBDIR + * Revision 1.27.2.4 2003/12/17 16:34:40 oes + * Cosmetics * - * Revision 1.29 2002/09/04 12:03:18 oes - * re-enable build on older setups + * Revision 1.27.2.3 2003/03/27 16:03:19 oes + * Another shot at Bug #707467 * + * Revision 1.27.2.2 2003/03/21 14:39:12 oes + * Presumably fixed Bug #707467 by defining unix ifdef __unix__ + * + * Revision 1.27.2.1 2002/08/10 11:22:31 oes + * - Add two AC_DEFINEs that indicate if the pcre*.h headers + * are located in a pcre/ subdir to the include path. * * Revision 1.27 2002/04/25 19:13:57 morcego * Removed RPM release number declaration on configure.in @@ -258,16 +264,6 @@ */ #undef STATIC_PCRS -/* - * Does pcre.h need to be included as ? - */ -#undef PCRE_H_IN_SUBDIR - -/* - * Does pcreposix.h need to be included as ? - */ -#undef PCREPOSIX_H_IN_SUBDIR - /* * Allows the use of an ACL to control access to the proxy by IP address. */ @@ -399,7 +395,7 @@ #undef HAVE_GETHOSTBYADDR_R_7_ARGS #undef HAVE_GETHOSTBYADDR_R_5_ARGS -/* Define if you have gmtime_r and localtime_r with a signature +/* Defined if you have gmtime_r and localtime_r with a signature * of (struct time *, struct tm *) */ #undef HAVE_GMTIME_R @@ -409,6 +405,13 @@ */ #undef socklen_t +/* Define if pcre.h must be included as + */ +#undef PCRE_H_IN_SUBDIR + +/* Define if pcreposix.h must be included as + */ +#undef PCREPOSIX_H_IN_SUBDIR @BOTTOM@ @@ -440,9 +443,9 @@ /* * On OpenBSD and maybe also FreeBSD, gcc doesn't define the cpp - * symbol unix; it defines __unix__ + * symbol unix; it defines __unix__ and sometimes not even that: */ -#if defined(__unix__) && !defined(unix) +#if ( defined(__unix__) || defined(__NetBSD__) ) && !defined(unix) #define unix 1 #endif diff --git a/src/actionlist.h b/actionlist.h similarity index 93% rename from src/actionlist.h rename to actionlist.h index ce5f5fea..1e063641 100644 --- a/src/actionlist.h +++ b/actionlist.h @@ -1,6 +1,6 @@ /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/src/actionlist.h,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/actionlist.h,v $ * * Purpose : Master list of supported actions. * Not really a header, since it generates code. @@ -39,16 +39,20 @@ * * Revisions : * $Log: actionlist.h,v $ - * Revision 2.2 2002/09/12 14:05:14 oes + * Revision 1.17.2.3 2004/10/03 12:53:32 david__schmidt + * Add the ability to check jpeg images for invalid + * lengths of comment blocks. Defensive strategy + * against the exploit: + * Microsoft Security Bulletin MS04-028 + * Buffer Overrun in JPEG Processing (GDI+) Could + * Allow Code Execution (833987) + * Enabled with +inspect-jpegs in actions files. + * + * Revision 1.17.2.2 2002/09/25 15:25:25 oes * Added more aliases for prehistoric action names * - * Revision 2.1 2002/09/04 14:52:18 oes - * Synced with the stable branch: - * Revision 1.17.2.1 2002/08/02 12:50:47 oes - * Consistency with docs: Change default name for action from hide-referer to hide-referrer - * - * Revision 2.0 2002/06/04 14:34:21 jongfoster - * Moving source files to src/ + * Revision 1.17.2.1 2002/08/02 12:50:47 oes + * Consistency with docs: Change default name for action from hide-referer to hide-referrer * * Revision 1.17 2002/05/14 21:25:55 oes * Renamed prevent-(setting/reading)-cookies to crunch-(incoming/outgoing)-cookies diff --git a/src/actions.c b/actions.c similarity index 92% rename from src/actions.c rename to actions.c index 977f1161..dc33b9fa 100644 --- a/src/actions.c +++ b/actions.c @@ -1,7 +1,7 @@ -const char actions_rcs[] = "$Id: actions.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"; +const char actions_rcs[] = "$Id: actions.c,v 1.32.2.6 2006/01/29 23:10:56 david__schmidt Exp $"; /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/src/actions.c,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/actions.c,v $ * * Purpose : Declares functions to work with actions files * Functions declared include: FIXME @@ -33,10 +33,27 @@ const char actions_rcs[] = "$Id: actions.c,v 2.0 2002/06/04 14:34:21 jongfoster * * Revisions : * $Log: actions.c,v $ - * Revision 2.0 2002/06/04 14:34:21 jongfoster - * Moving source files to src/ + * Revision 1.32.2.6 2006/01/29 23:10:56 david__schmidt + * Multiple filter file support * - * Revision 1.33 2002/05/26 12:14:19 roro + * Revision 1.32.2.5 2005/06/09 01:18:41 david__schmidt + * Tweaks to conditionally include pthread.h if FEATURE_PTHREAD is enabled - + * this becomes important when jcc.h gets included later down the line. + * + * Revision 1.32.2.4 2003/12/03 10:33:11 oes + * - Implemented Privoxy version requirement through + * for-privoxy-version= statement in {{settings}} + * block + * - Fix for unchecked out-of-memory condition + * + * Revision 1.32.2.3 2003/02/28 12:52:10 oes + * Fixed memory leak reported by Dan Price in Bug #694713 + * + * Revision 1.32.2.2 2002/11/20 14:36:55 oes + * Extended unload_current_actions_file() to multiple AFs. + * Thanks to Oliver Stoeneberg for the hint. + * + * Revision 1.32.2.1 2002/05/26 12:13:16 roro * Change unsigned to unsigned long in actions_name struct. This closes * SourceForge Bug #539284. * @@ -191,6 +208,10 @@ const char actions_rcs[] = "$Id: actions.c,v 2.0 2002/06/04 14:34:21 jongfoster #include #include +#ifdef FEATURE_PTHREAD +#include +#endif + #include "project.h" #include "jcc.h" #include "list.h" @@ -201,6 +222,7 @@ const char actions_rcs[] = "$Id: actions.c,v 2.0 2002/06/04 14:34:21 jongfoster #include "encode.h" #include "urlmatch.h" #include "cgi.h" +#include "ssplit.h" const char actions_h_rcs[] = ACTIONS_H_VERSION; @@ -215,26 +237,27 @@ const char actions_h_rcs[] = ACTIONS_H_VERSION; * an enumerated type (well, the preprocessor equivalent). Here are * the values: */ -#define AV_NONE 0 /**< Action type: +bool-action or -bool-action */ -#define AV_ADD_STRING 1 /**< Action type: +string-action{string} */ -#define AV_REM_STRING 2 /**< Action type: -string-action */ -#define AV_ADD_MULTI 3 /**< Action type: +multi-action{string} */ -#define AV_REM_MULTI 4 /**< Action type: -multi-action{string} or -multi-action */ - -/** - * A structure holding information about a single built-in action string. +#define AV_NONE 0 /* +opt -opt */ +#define AV_ADD_STRING 1 /* +stropt{string} */ +#define AV_REM_STRING 2 /* -stropt */ +#define AV_ADD_MULTI 3 /* +multiopt{string} +multiopt{string2} */ +#define AV_REM_MULTI 4 /* -multiopt{string} -multiopt */ + +/* + * We need a structure to hold the name, flag changes, + * type, and string index. */ struct action_name { - const char * name; /**< Action name */ - unsigned long mask; /**< A bit set to "0" = remove action */ - unsigned long add; /**< A bit set to "1" = add action */ - int takes_value; /**< An AV_... constant */ - int index; /**< Index into strings[] or multi[] */ + const char * name; + unsigned long mask; /* a bit set to "0" = remove action */ + unsigned long add; /* a bit set to "1" = add action */ + int takes_value; /* an AV_... constant */ + int index; /* index into strings[] or multi[] */ }; -/** - * The array of all built-in action strings. +/* + * And with those building blocks in place, here's the array. */ static const struct action_name action_names[] = { @@ -266,15 +289,6 @@ static const struct action_name action_names[] = }; -/** - * The currently loaded actions files. - */ -static struct file_list *current_actions_file[MAX_ACTION_FILES] = { - NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL -}; - - static int load_one_actions_file(struct client_state *csp, int fileid); @@ -868,6 +882,12 @@ void free_current_action (struct current_action_spec *src) } +static struct file_list *current_actions_file[MAX_AF_FILES] = { + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL +}; + + #ifdef FEATURE_GRACEFUL_TERMINATION /********************************************************************* * @@ -883,10 +903,15 @@ void free_current_action (struct current_action_spec *src) *********************************************************************/ void unload_current_actions_file(void) { - if (current_actions_file) + int i; + + for (i = 0; i < MAX_AF_FILES; i++) { - current_actions_file->unloader = unload_actions_file; - current_actions_file = NULL; + if (current_actions_file[i]) + { + current_actions_file[i]->unloader = unload_actions_file; + current_actions_file[i] = NULL; + } } } #endif /* FEATURE_GRACEFUL_TERMINATION */ @@ -965,7 +990,7 @@ int load_actions_file(struct client_state *csp) int i; int result; - for (i = 0; i < MAX_ACTION_FILES; i++) + for (i = 0; i < MAX_AF_FILES; i++) { if (csp->config->actions_file[i]) { @@ -985,23 +1010,6 @@ int load_actions_file(struct client_state *csp) return 0; } - -/** load_one_actions_file() parser status: At start of file. */ -#define MODE_START_OF_FILE 1 - -/** load_one_actions_file() parser status: In "{{settings}}" block. */ -#define MODE_SETTINGS 2 - -/** load_one_actions_file() parser status: In "{{description}}" block. */ -#define MODE_DESCRIPTION 3 - -/** load_one_actions_file() parser status: In "{{alias}}" block. */ -#define MODE_ALIAS 4 - -/** load_one_actions_file() parser status: In "{+some-actions}" block. */ -#define MODE_ACTIONS 5 - - /********************************************************************* * * Function : load_one_actions_file @@ -1024,6 +1032,11 @@ static int load_one_actions_file(struct client_state *csp, int fileid) * Note: Keep these in the order they occur in the file, they are * sometimes tested with <= */ +#define MODE_START_OF_FILE 1 +#define MODE_SETTINGS 2 +#define MODE_DESCRIPTION 3 +#define MODE_ALIAS 4 +#define MODE_ACTIONS 5 int mode = MODE_START_OF_FILE; @@ -1244,9 +1257,44 @@ static int load_one_actions_file(struct client_state *csp, int fileid) { /* * Part of the {{settings}} block. - * Ignore for now, but we may want to read & check permissions - * when we go multi-user. + * For now only serves to check if the file's minimum Privoxy + * version requirement is met, but we may want to read & check + * permissions when we go multi-user. */ + if (!strncmp(buf, "for-privoxy-version=", 20)) + { + char *version_string, *fields[3]; + int num_fields; + + if ((version_string = strdup(buf + 20)) == NULL) + { + fclose(fp); + log_error(LOG_LEVEL_FATAL, + "can't load actions file '%s': out of memory!", + csp->config->actions_file[fileid]); + return 1; /* never get here */ + } + + num_fields = ssplit(version_string, ".", fields, 3, TRUE, FALSE); + + if (num_fields < 1 || atoi(fields[0]) == 0) + { + log_error(LOG_LEVEL_ERROR, + "While loading actions file '%s': invalid line (%lu): %s", + csp->config->actions_file[fileid], linenum, buf); + } + else if ( atoi(fields[0]) > VERSION_MAJOR + || (num_fields > 1 && atoi(fields[1]) > VERSION_MINOR) + || (num_fields > 2 && atoi(fields[2]) > VERSION_POINT)) + { + fclose(fp); + log_error(LOG_LEVEL_FATAL, + "Actions file '%s', line %lu requires newer Privoxy version: %s", + csp->config->actions_file[fileid], linenum, buf ); + return 1; /* never get here */ + } + free(version_string); + } } else if (mode == MODE_DESCRIPTION) { @@ -1309,7 +1357,14 @@ static int load_one_actions_file(struct client_state *csp, int fileid) return 1; /* never get here */ } - new_alias->name = strdup(buf); + if ((new_alias->name = strdup(buf)) == NULL) + { + fclose(fp); + log_error(LOG_LEVEL_FATAL, + "can't load actions file '%s': out of memory!", + csp->config->actions_file[fileid]); + return 1; /* never get here */ + } strcpy(actions_buf, start); @@ -1381,6 +1436,7 @@ static int load_one_actions_file(struct client_state *csp, int fileid) fclose(fp); free_action(cur_action); + freez(cur_action); free_alias_list(alias_list); diff --git a/src/actions.h b/actions.h similarity index 92% rename from src/actions.h rename to actions.h index c0513fff..3f5c62db 100644 --- a/src/actions.h +++ b/actions.h @@ -1,9 +1,9 @@ #ifndef ACTIONS_H_INCLUDED #define ACTIONS_H_INCLUDED -#define ACTIONS_H_VERSION "$Id: actions.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $" +#define ACTIONS_H_VERSION "$Id: actions.h,v 1.12 2002/05/06 07:56:50 oes Exp $" /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/src/actions.h,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/actions.h,v $ * * Purpose : Declares functions to work with actions files * Functions declared include: FIXME @@ -35,9 +35,6 @@ * * Revisions : * $Log: actions.h,v $ - * Revision 2.0 2002/06/04 14:34:21 jongfoster - * Moving source files to src/ - * * Revision 1.12 2002/05/06 07:56:50 oes * Made actions_to_html independent of FEATURE_CGI_EDIT_ACTIONS * @@ -107,14 +104,12 @@ struct client_state; -/** - * This structure is used to hold user-defined aliases - */ +/* This structure is used to hold user-defined aliases */ struct action_alias { - const char * name; /**< Alias name. */ - struct action_spec action[1]; /**< Alias value. */ - struct action_alias * next; /**< Next alias in list */ + const char * name; + struct action_spec action[1]; + struct action_alias * next; }; diff --git a/src/amiga.c b/amiga.c similarity index 95% rename from src/amiga.c rename to amiga.c index 97d9f75a..ccd021e4 100644 --- a/src/amiga.c +++ b/amiga.c @@ -1,7 +1,7 @@ -const char amiga_rcs[] = "$Id: amiga.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"; +const char amiga_rcs[] = "$Id: amiga.c,v 1.9 2002/03/26 22:29:54 swa Exp $"; /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/src/amiga.c,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/amiga.c,v $ * * Purpose : Amiga-specific declarations. * @@ -28,9 +28,6 @@ const char amiga_rcs[] = "$Id: amiga.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp * * Revisions : * $Log: amiga.c,v $ - * Revision 2.0 2002/06/04 14:34:21 jongfoster - * Moving source files to src/ - * * Revision 1.9 2002/03/26 22:29:54 swa * we have a new homepage! * @@ -232,7 +229,7 @@ void free (void *m) void *realloc (void *old, size_t ns) { - void *new_buf; + void *new; LONG osize, *o = old; LONG nsize = ns; @@ -245,9 +242,9 @@ void *realloc (void *old, size_t ns) { return old; } - if ((new_buf = malloc(nsize))) + if ((new = malloc(nsize))) { - ULONG *n = new_buf; + ULONG *n = new; osize >>= 2; while(osize--) @@ -256,7 +253,7 @@ void *realloc (void *old, size_t ns) } free(old); } - return new_buf; + return new; } void __memCleanUp (void) diff --git a/src/amiga.h b/amiga.h similarity index 98% rename from src/amiga.h rename to amiga.h index b52a551c..4d13690b 100644 --- a/src/amiga.h +++ b/amiga.h @@ -4,7 +4,7 @@ #define AMIGA_H_VERSION "$Id: amiga.h,v 1.9 2002/03/26 22:29:54 swa Exp $" /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/amiga.h,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/amiga.h,v $ * * Purpose : Amiga-specific declarations. * diff --git a/src/cgi.c b/cgi.c similarity index 87% rename from src/cgi.c rename to cgi.c index 034f872d..1db93f85 100644 --- a/src/cgi.c +++ b/cgi.c @@ -1,7 +1,7 @@ -const char cgi_rcs[] = "$Id: cgi.c,v 2.3 2002/11/12 16:19:18 oes Exp $"; +const char cgi_rcs[] = "$Id: cgi.c,v 1.70.2.13 2004/02/17 13:30:23 oes Exp $"; /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/src/cgi.c,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/cgi.c,v $ * * Purpose : Declares functions to intercept request, generate * html or gif answers, and to compose HTTP resonses. @@ -38,19 +38,71 @@ const char cgi_rcs[] = "$Id: cgi.c,v 2.3 2002/11/12 16:19:18 oes Exp $"; * * Revisions : * $Log: cgi.c,v $ - * Revision 2.3 2002/11/12 16:19:18 oes - * Fix: g_bToggleIJB was used outside #ifdef FEATURE_TOGGLE - * - * Revision 2.2 2002/09/04 15:17:28 oes - * Synced with the stable branch: - * Revision 1.70.2.1 2002/08/05 11:17:46 oes - * Fixed Bug #587820, i.e. added workaround for IE bug that includes fragment identifier in (cgi) query - * - * Revision 2.1 2002/06/04 17:55:24 jongfoster - * Adding comments - * - * Revision 2.0 2002/06/04 14:34:21 jongfoster - * Moving source files to src/ + * Revision 1.70.2.13 2004/02/17 13:30:23 oes + * Moved cgi_error_disabled() from cgiedit.c to + * cgi.c to re-enable build with --disable-editor. + * Fixes Bug #892744. Thanks to Matthew Fischer + * for spotting. + * + * Revision 1.70.2.12 2003/12/17 16:33:16 oes + * - Added new function cgi_redirect to handle creation of + * HTTP redirect messages formerly repeated in the code. + * - Send cgi_error_disabled instead of cgi_error_404 when + * referrer check fails + * - Dynamic content now gets Expires header field with date + * in the past + * + * Revision 1.70.2.11 2003/10/23 12:29:26 oes + * Bugfix: Transparent PNG was not transparent. Thanks to + * Dan Razzell of Starfish Systems for notice and new PNG. + * + * Revision 1.70.2.10 2003/06/06 07:54:25 oes + * Security fix: dspatch_known_cgi no longer considers an empty + * referrer safe for critical CGIs, since malicious links could + * reside on https:// locations which browsers don't advertize as + * referrers. Closes bug #749916, thanks to Jeff Epler for the + * hint. Goodbye One-Click[tm] toggling :-( + * + * Revision 1.70.2.9 2003/05/08 15:11:31 oes + * Nit + * + * Revision 1.70.2.8 2003/04/29 13:33:51 oes + * Killed a compiler warning on OSX + * + * Revision 1.70.2.7 2003/04/03 13:50:58 oes + * - Don't call cgi_error_disabled ifndef FEATURE_CGI_EDIT_ACTIONS + * (fixes bug #710056) + * - Show toggle info only if we have it + * + * Revision 1.70.2.6 2003/03/12 01:26:25 david__schmidt + * Move declaration of struct tm dummy outside of a control block so it is + * accessible later on during snprintf in get_http_time. + * + * Revision 1.70.2.5 2003/03/11 11:53:58 oes + * Cosmetic: Renamed cryptic variable + * + * Revision 1.70.2.4 2003/03/07 03:41:03 david__schmidt + * Wrapping all *_r functions (the non-_r versions of them) with mutex semaphores for OSX. Hopefully this will take care of all of those pesky crash reports. + * + * Revision 1.70.2.3 2002/11/28 18:14:32 oes + * Disable access to critical CGIs via untrusted referrers. + * This prevents users from being tricked by malicious websites + * into making unintentional configuration changes: + * + * - Added flag to each cgi_dispatcher that allows or denies + * external linking + * - Introduced proviorical function that greps for the + * referrer header before regular header parsing happens + * - Added safety check to dispatch_known_cgi. CGI is called + * if (cgi harmless || no referrer || we are referrer). + * Else a) toggle calls are modified not to change status and + * b) all other calls are denied. + * + * Revision 1.70.2.2 2002/11/12 16:20:37 oes + * Added missing #ifdef FEATURE_TOGGLE around g_bToggleIJB; fixes bug #636651 + * + * Revision 1.70.2.1 2002/08/05 11:17:46 oes + * Fixed Bug #587820, i.e. added workaround for IE bug that includes fragment identifier in (cgi) query * * Revision 1.70 2002/05/19 11:33:20 jongfoster * If a CGI error was not handled, and propogated back to @@ -428,126 +480,138 @@ const char cgi_rcs[] = "$Id: cgi.c,v 2.3 2002/11/12 16:19:18 oes Exp $"; #include "cgiedit.h" #endif /* def FEATURE_CGI_EDIT_ACTIONS */ #include "loadcfg.h" -/* loadcfg.h is for g_bToggleIJB only */ +/* loadcfg.h is for global_toggle_state only */ #ifdef FEATURE_PTHREAD #include #include "jcc.h" /* jcc.h is for mutex semaphore globals only */ #endif /* def FEATURE_PTHREAD */ - const char cgi_h_rcs[] = CGI_H_VERSION; -/** - * List of CGI functions: name, handler, description. +/* + * List of CGI functions: name, handler, description * Note: Do NOT use single quotes in the description; * this will break the dynamic "blocked" template! */ static const struct cgi_dispatcher cgi_dispatchers[] = { { "", cgi_default, - "Privoxy main page" }, + "Privoxy main page", + TRUE }, #ifdef FEATURE_GRACEFUL_TERMINATION { "die", cgi_die, "Shut down - Do not deploy this build in a production environment, " - "this is a one click Denial Of Service attack!!!" }, + "this is a one click Denial Of Service attack!!!", + FALSE }, #endif { "show-status", cgi_show_status, - "View & change the current configuration" }, +#ifdef FEATURE_CGI_EDIT_ACTIONS + "View & change the current configuration", +#else + "View the current configuration", +#endif + TRUE }, { "show-version", cgi_show_version, - "View the source code version numbers" }, + "View the source code version numbers", + TRUE }, { "show-request", cgi_show_request, - "View the request headers." }, + "View the request headers.", + TRUE }, { "show-url-info", cgi_show_url_info, - "Look up which actions apply to a URL and why" }, + "Look up which actions apply to a URL and why", + TRUE }, #ifdef FEATURE_CGI_EDIT_ACTIONS { "toggle", cgi_toggle, - "Toggle Privoxy on or off" }, - + "Toggle Privoxy on or off", + FALSE }, { "edit-actions", /* Edit the actions list */ cgi_edit_actions, - NULL }, + NULL, FALSE }, { "eaa", /* Shortcut for edit-actions-add-url-form */ cgi_edit_actions_add_url_form, - NULL }, + NULL, FALSE }, { "eau", /* Shortcut for edit-actions-url-form */ cgi_edit_actions_url_form, - NULL }, + NULL, FALSE }, { "ear", /* Shortcut for edit-actions-remove-url-form */ cgi_edit_actions_remove_url_form, - NULL }, + NULL, FALSE }, + { "eal", /* Shortcut for edit-actions-list */ + cgi_edit_actions_list, + NULL, FALSE }, { "eafu", /* Shortcut for edit-actions-for-url */ cgi_edit_actions_for_url, - NULL }, + NULL, FALSE }, { "eas", /* Shortcut for edit-actions-submit */ cgi_edit_actions_submit, - NULL }, + NULL, FALSE }, { "easa", /* Shortcut for edit-actions-section-add */ cgi_edit_actions_section_add, - NULL }, + NULL, FALSE }, { "easr", /* Shortcut for edit-actions-section-remove */ cgi_edit_actions_section_remove, - NULL }, + NULL, FALSE }, { "eass", /* Shortcut for edit-actions-section-swap */ cgi_edit_actions_section_swap, - NULL }, + NULL, FALSE }, { "edit-actions-for-url", cgi_edit_actions_for_url, - NULL /* Edit the actions for (a) specified URL(s) */ }, + NULL, FALSE /* Edit the actions for (a) specified URL(s) */ }, { "edit-actions-list", cgi_edit_actions_list, - NULL /* Edit the actions list */ }, + NULL, TRUE /* Edit the actions list */ }, { "edit-actions-submit", cgi_edit_actions_submit, - NULL /* Change the actions for (a) specified URL(s) */ }, + NULL, FALSE /* Change the actions for (a) specified URL(s) */ }, { "edit-actions-url", cgi_edit_actions_url, - NULL /* Change a URL pattern in the actionsfile */ }, + NULL, FALSE /* Change a URL pattern in the actionsfile */ }, { "edit-actions-url-form", cgi_edit_actions_url_form, - NULL /* Form to change a URL pattern in the actionsfile */ }, + NULL, FALSE /* Form to change a URL pattern in the actionsfile */ }, { "edit-actions-add-url", cgi_edit_actions_add_url, - NULL /* Add a URL pattern to the actionsfile */ }, + NULL, FALSE /* Add a URL pattern to the actionsfile */ }, { "edit-actions-add-url-form", cgi_edit_actions_add_url_form, - NULL /* Form to add a URL pattern to the actionsfile */ }, + NULL, FALSE /* Form to add a URL pattern to the actionsfile */ }, { "edit-actions-remove-url", cgi_edit_actions_remove_url, - NULL /* Remove a URL pattern from the actionsfile */ }, + NULL, FALSE /* Remove a URL pattern from the actionsfile */ }, { "edit-actions-remove-url-form", cgi_edit_actions_remove_url_form, - NULL /* Form to remove a URL pattern from the actionsfile */ }, + NULL, FALSE /* Form to remove a URL pattern from the actionsfile */ }, { "edit-actions-section-add", cgi_edit_actions_section_add, - NULL /* Remove a section from the actionsfile */ }, + NULL, FALSE /* Remove a section from the actionsfile */ }, { "edit-actions-section-remove", cgi_edit_actions_section_remove, - NULL /* Remove a section from the actionsfile */ }, + NULL, FALSE /* Remove a section from the actionsfile */ }, { "edit-actions-section-swap", cgi_edit_actions_section_swap, - NULL /* Swap two sections in the actionsfile */ }, + NULL, FALSE /* Swap two sections in the actionsfile */ }, #endif /* def FEATURE_CGI_EDIT_ACTIONS */ { "robots.txt", cgi_robots_txt, - NULL /* Sends a robots.txt file to tell robots to go away. */ }, + NULL, TRUE /* Sends a robots.txt file to tell robots to go away. */ }, { "send-banner", cgi_send_banner, - NULL /* Send a built-in image */ }, + NULL, TRUE /* Send a built-in image */ }, { "send-stylesheet", cgi_send_stylesheet, - NULL /* Send templates/cgi-style.css */ }, + NULL, TRUE /* Send templates/cgi-style.css */ }, { "t", cgi_transparent_image, - NULL /* Send a transparent image (short name) */ }, + NULL, TRUE /* Send a transparent image (short name) */ }, { NULL, /* NULL Indicates end of list and default page */ cgi_error_404, - NULL /* Unknown CGI page */ } + NULL, TRUE /* Unknown CGI page */ } }; @@ -577,17 +641,15 @@ const char image_pattern_data[] = */ const char image_blank_data[] = "\211\120\116\107\015\012\032\012\000\000\000\015\111\110\104\122" - "\000\000\000\004\000\000\000\004\010\006\000\000\000\251\361\236" - "\176\000\000\000\007\164\111\115\105\007\322\003\013\020\073\070" - "\013\025\036\203\000\000\000\011\160\110\131\163\000\000\013\022" - "\000\000\013\022\001\322\335\176\374\000\000\000\004\147\101\115" - "\101\000\000\261\217\013\374\141\005\000\000\000\033\111\104\101" - "\124\170\332\143\070\161\342\304\207\377\377\377\347\302\150\006" - "\144\016\210\146\040\250\002\000\042\305\065\221\270\027\131\110" + "\000\000\000\001\000\000\000\001\001\003\000\000\000\045\333\126" + "\312\000\000\000\003\120\114\124\105\377\377\377\247\304\033\310" + "\000\000\000\001\164\122\116\123\000\100\346\330\146\000\000\000" + "\001\142\113\107\104\000\210\005\035\110\000\000\000\012\111\104" + "\101\124\170\001\143\140\000\000\000\002\000\001\163\165\001\030" "\000\000\000\000\111\105\116\104\256\102\140\202"; #else -/** +/* * Checkerboard pattern, as a GIF. */ const char image_pattern_data[] = @@ -597,7 +659,7 @@ const char image_pattern_data[] = "\054\000\000\000\000\004\000\004\000\000\002\005\104\174\147" "\270\005\000\073"; -/** +/* * 1x1 transparant GIF. */ const char image_blank_data[] = @@ -606,27 +668,12 @@ const char image_blank_data[] = "\000\001\000\000\002\002D\001\000;"; #endif -/** - * The size of the image_pattern, in bytes. - */ const size_t image_pattern_length = sizeof(image_pattern_data) - 1; - -/** - * The size of the image_blank, in bytes. - */ const size_t image_blank_length = sizeof(image_blank_data) - 1; -/** - * The "Out of memory" CGI response. This is statically allocated - * and is initialized at startup, for obvious reasons. It's - * read-only. finish_http_response() and free_http_response() - * have been special-cased to do nothing if they are passed - * this structure. - */ static struct http_response cgi_error_memory_response[1]; - static struct http_response *dispatch_known_cgi(struct client_state * csp, const char * path); static struct map *parse_cgi_parameters(char *argstring); @@ -683,7 +730,7 @@ struct http_response *dispatch_cgi(struct client_state *csp) else if (*path != '\0') { /* - * wierdness: URL is /configXXX, where XXX is some string + * weirdness: URL is /configXXX, where XXX is some string * Do *NOT* intercept. */ return NULL; @@ -703,6 +750,42 @@ struct http_response *dispatch_cgi(struct client_state *csp) } +/********************************************************************* + * + * Function : grep_cgi_referrer + * + * Description : Ugly provisorical fix that greps the value of the + * referer HTTP header field out of a linked list of + * strings like found at csp->headers. Will disappear + * in Privoxy 3.1. + * + * FIXME: csp->headers ought to be csp->http->headers + * FIXME: Parsing all client header lines should + * happen right after the request is received! + * + * Parameters : + * 1 : csp = Current client state (buffers, headers, etc...) + * + * Returns : pointer to value (no copy!), or NULL if none found. + * + *********************************************************************/ +char *grep_cgi_referrer(struct client_state *csp) +{ + struct list_entry *p; + + for (p = csp->headers->first; p != NULL; p = p->next) + { + if (p->str == NULL) continue; + if (strncmpic(p->str, "Referer: ", 9) == 0) + { + return ((p->str) + 9); + } + } + return NULL; + +} + + /********************************************************************* * * Function : dispatch_known_cgi @@ -731,6 +814,7 @@ static struct http_response *dispatch_known_cgi(struct client_state * csp, struct http_response *rsp; char *query_args_start; char *path_copy; + char *referrer; jb_err err; if (NULL == (path_copy = strdup(path))) @@ -754,7 +838,6 @@ static struct http_response *dispatch_known_cgi(struct client_state * csp, return cgi_error_memory(); } - /* * At this point: * path_copy = CGI call name @@ -773,15 +856,45 @@ static struct http_response *dispatch_known_cgi(struct client_state * csp, log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 3", csp->ip_addr_str, csp->http->cmd); - /* Find and start the right CGI function*/ + /* + * Find and start the right CGI function + */ d = cgi_dispatchers; for (;;) { if ((d->name == NULL) || (strcmp(path_copy, d->name) == 0)) { - err = (d->handler)(csp, rsp, param_list); + /* + * If the called CGI is either harmless, or referred + * from a trusted source, start it. + */ + if (d->harmless + || ((NULL != (referrer = grep_cgi_referrer(csp))) + && (0 == strncmp(referrer, "http://config.privoxy.org/", 26))) + ) + { + err = (d->handler)(csp, rsp, param_list); + } + else + { + /* + * Else, modify toggle calls so that they only display + * the status, and deny all other calls. + */ + if (0 == strcmp(path_copy, "toggle")) + { + unmap(param_list, "set"); + err = (d->handler)(csp, rsp, param_list); + } + else + { + err = cgi_error_disabled(csp, rsp); + } + } + free(path_copy); free_map(param_list); + if (err == JB_ERR_CGI_PARAMS) { err = cgi_error_bad_param(csp, rsp); @@ -807,8 +920,8 @@ static struct http_response *dispatch_known_cgi(struct client_state * csp, d++; } } - - + + /********************************************************************* * * Function : parse_cgi_parameters @@ -1135,6 +1248,42 @@ struct http_response *error_response(struct client_state *csp, } +/********************************************************************* + * + * Function : cgi_error_disabled + * + * Description : CGI function that is called to generate an error + * response if the actions editor or toggle CGI are + * accessed despite having being disabled at compile- + * or run-time. + * + * Parameters : + * 1 : csp = Current client state (buffers, headers, etc...) + * 2 : rsp = http_response data structure for output + * + * CGI Parameters : none + * + * Returns : JB_ERR_OK on success + * JB_ERR_MEMORY on out-of-memory error. + * + *********************************************************************/ +jb_err cgi_error_disabled(struct client_state *csp, + struct http_response *rsp) +{ + struct map *exports; + + assert(csp); + assert(rsp); + + if (NULL == (exports = default_exports(csp, NULL))) + { + return JB_ERR_MEMORY; + } + + return template_fill_for_cgi(csp, "cgi-error-disabled", exports, rsp); +} + + /********************************************************************* * * Function : cgi_init_error_messages @@ -1382,6 +1531,42 @@ jb_err cgi_error_bad_param(struct client_state *csp, } +/********************************************************************* + * + * Function : cgi_redirect + * + * Description : CGI support function to generate a HTTP redirect + * message + * + * Parameters : + * 1 : rsp = http_response data structure for output + * 2 : target = string with the target URL + * + * CGI Parameters : None + * + * Returns : JB_ERR_OK on success + * JB_ERR_MEMORY on out-of-memory error. + * + *********************************************************************/ +jb_err cgi_redirect (struct http_response * rsp, const char *target) +{ + jb_err err; + + assert(rsp); + assert(target); + + err = enlist_unique_header(rsp->headers, "Location", target); + + rsp->status = strdup("302 Local Redirect from Privoxy"); + if (rsp->status == NULL) + { + return JB_ERR_MEMORY; + } + + return err; +} + + /********************************************************************* * * Function : add_help_link @@ -1587,7 +1772,7 @@ struct http_response *finish_http_response(struct http_response *rsp) get_http_time(0, buf); if (!err) err = enlist_unique_header(rsp->headers, "Date", buf); if (!err) err = enlist_unique_header(rsp->headers, "Last-Modified", buf); - if (!err) err = enlist_unique_header(rsp->headers, "Expires", buf); + if (!err) err = enlist_unique_header(rsp->headers, "Expires", "Sat, 17 Jun 2000 12:00:00 GMT"); } @@ -1989,7 +2174,9 @@ struct map *default_exports(const struct client_state *csp, const char *caller) if (!err) err = map(exports, "user-manual", 1, csp->config->usermanual ,1); if (!err) err = map(exports, "actions-help-prefix", 1, ACTIONS_HELP_PREFIX ,1); #ifdef FEATURE_TOGGLE - if (!err) err = map_conditional(exports, "enabled-display", g_bToggleIJB); + if (!err) err = map_conditional(exports, "enabled-display", global_toggle_state); +#else + if (!err) err = map_block_killer(exports, "can-toggle"); #endif snprintf(buf, 20, "%d", csp->config->hport); diff --git a/src/cgi.h b/cgi.h similarity index 92% rename from src/cgi.h rename to cgi.h index 813d1e8e..ebbc392d 100644 --- a/src/cgi.h +++ b/cgi.h @@ -1,9 +1,9 @@ #ifndef CGI_H_INCLUDED #define CGI_H_INCLUDED -#define CGI_H_VERSION "$Id: cgi.h,v 1.29 2002/05/19 11:33:21 jongfoster Exp $" +#define CGI_H_VERSION "$Id: cgi.h,v 1.29.2.2 2004/02/17 13:30:23 oes Exp $" /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/cgi.h,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/cgi.h,v $ * * Purpose : Declares functions to intercept request, generate * html or gif answers, and to compose HTTP resonses. @@ -38,6 +38,15 @@ * * Revisions : * $Log: cgi.h,v $ + * Revision 1.29.2.2 2004/02/17 13:30:23 oes + * Moved cgi_error_disabled() from cgiedit.c to + * cgi.c to re-enable build with --disable-editor. + * Fixes Bug #892744. Thanks to Matthew Fischer + * for spotting. + * + * Revision 1.29.2.1 2003/12/17 16:33:28 oes + * Added prototype of new function cgi_redirect + * * Revision 1.29 2002/05/19 11:33:21 jongfoster * If a CGI error was not handled, and propogated back to * dispatch_known_cgi(), then it was assumed to be "out of memory". @@ -205,12 +214,16 @@ extern jb_err template_fill_for_cgi(struct client_state *csp, extern void cgi_init_error_messages(void); extern struct http_response *cgi_error_memory(void); +extern jb_err cgi_redirect (struct http_response * rsp, const char *target); + extern jb_err cgi_error_no_template(struct client_state *csp, struct http_response *rsp, const char *template_name); extern jb_err cgi_error_bad_param(struct client_state *csp, struct http_response *rsp); -jb_err cgi_error_unknown(struct client_state *csp, +extern jb_err cgi_error_disabled(struct client_state *csp, + struct http_response *rsp); +extern jb_err cgi_error_unknown(struct client_state *csp, struct http_response *rsp, jb_err error_to_report); diff --git a/src/cgiedit.c b/cgiedit.c similarity index 94% rename from src/cgiedit.c rename to cgiedit.c index 3f22c23b..49e6cf95 100644 --- a/src/cgiedit.c +++ b/cgiedit.c @@ -1,7 +1,7 @@ -const char cgiedit_rcs[] = "$Id: cgiedit.c,v 2.1 2002/09/04 15:21:18 oes Exp $"; +const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.41.2.12 2006/01/30 15:16:25 david__schmidt Exp $"; /********************************************************************* * - * File : $Source: /cvsroot/ijbswa//current/src/cgiedit.c,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/cgiedit.c,v $ * * Purpose : CGI-based actionsfile editor. * @@ -42,16 +42,49 @@ const char cgiedit_rcs[] = "$Id: cgiedit.c,v 2.1 2002/09/04 15:21:18 oes Exp $"; * * Revisions : * $Log: cgiedit.c,v $ - * Revision 2.1 2002/09/04 15:21:18 oes - * Synced with the stable branch: - * Revision 1.41.2.2 2002/08/05 20:02:59 oes - * Bugfix: "Insert new section at top" did not work properly if first non-comment line in file was of type FILE_LINE_ACTION + * Revision 1.41.2.12 2006/01/30 15:16:25 david__schmidt + * Remove a little residual debugging info * - * Revision 1.41.2.1 2002/08/02 12:43:14 oes - * Fixed bug #588514: first_time now set on a per-string basis in actions_from_radio; javascriptify now called on copies + * Revision 1.41.2.11 2006/01/29 23:10:56 david__schmidt + * Multiple filter file support * - * Revision 2.0 2002/06/04 14:34:21 jongfoster - * Moving source files to src/ + * Revision 1.41.2.10 2005/07/04 03:13:43 david__schmidt + * Undo some damaging memory leak patches + * + * Revision 1.41.2.9 2005/07/04 00:31:04 david__schmidt + * Removing a double free + * + * Revision 1.41.2.8 2005/05/07 21:50:54 david__schmidt + * A few memory leaks plugged (mostly on error paths) + * + * Revision 1.41.2.7 2004/02/17 13:30:23 oes + * Moved cgi_error_disabled() from cgiedit.c to + * cgi.c to re-enable build with --disable-editor. + * Fixes Bug #892744. Thanks to Matthew Fischer + * for spotting. + * + * Revision 1.41.2.6 2003/12/18 08:13:48 oes + * One line lost in last commit + * + * Revision 1.41.2.5 2003/12/17 16:33:47 oes + * - All edit functions that redirect back to the list page + * now use cgi_redirect + * - All redirects now contain useless parameter "foo", whose + * value are raw seconds since epoch, in order to force + * Opera and Konqueror to properly reload the list. Closes + * bug #859993 + * + * Revision 1.41.2.4 2003/03/11 11:53:59 oes + * Cosmetic: Renamed cryptic variable + * + * Revision 1.41.2.3 2002/11/12 15:01:41 oes + * Fix: Don't free uninitialized struct editable_file + * + * Revision 1.41.2.2 2002/08/05 20:02:59 oes + * Bugfix: "Insert new section at top" did not work properly if first non-comment line in file was of type FILE_LINE_ACTION + * + * Revision 1.41.2.1 2002/08/02 12:43:14 oes + * Fixed bug #588514: first_time now set on a per-string basis in actions_from_radio; javascriptify now called on copies * * Revision 1.41 2002/05/21 19:09:45 oes * - Made Add/Edit/Remove URL Submit and Cancel @@ -297,7 +330,7 @@ const char cgiedit_rcs[] = "$Id: cgiedit.c,v 2.1 2002/09/04 15:21:18 oes Exp $"; #include "errlog.h" #include "loaders.h" #include "loadcfg.h" -/* loadcfg.h is for g_bToggleIJB only */ +/* loadcfg.h is for global_toggle_state only */ #include "urlmatch.h" const char cgiedit_h_rcs[] = CGIEDIT_H_VERSION; @@ -457,8 +490,6 @@ jb_err cgi_error_file(struct client_state *csp, jb_err cgi_error_file_read_only(struct client_state *csp, struct http_response *rsp, const char *filename); -jb_err cgi_error_disabled(struct client_state *csp, - struct http_response *rsp); /* Internal arbitrary config file support functions */ static jb_err edit_read_file_lines(FILE *fp, struct file_line ** pfile, int *newline); @@ -2394,40 +2425,6 @@ jb_err cgi_error_file_read_only(struct client_state *csp, } -/********************************************************************* - * - * Function : cgi_error_disabled - * - * Description : CGI function that is called if the actions editor - * is called although it's disabled in config - * - * Parameters : - * 1 : csp = Current client state (buffers, headers, etc...) - * 2 : rsp = http_response data structure for output - * - * CGI Parameters : none - * - * Returns : JB_ERR_OK on success - * JB_ERR_MEMORY on out-of-memory error. - * - *********************************************************************/ -jb_err cgi_error_disabled(struct client_state *csp, - struct http_response *rsp) -{ - struct map *exports; - - assert(csp); - assert(rsp); - - if (NULL == (exports = default_exports(csp, NULL))) - { - return JB_ERR_MEMORY; - } - - return template_fill_for_cgi(csp, "cgi-error-disabled", exports, rsp); -} - - /********************************************************************* * * Function : cgi_edit_actions @@ -2457,20 +2454,9 @@ jb_err cgi_edit_actions(struct client_state *csp, } /* FIXME: Incomplete */ - rsp->status = strdup("302 Local Redirect from Privoxy"); - if (rsp->status == NULL) - { - return JB_ERR_MEMORY; - } - if (enlist_unique_header(rsp->headers, "Location", - CGI_PREFIX "edit-actions-list?f=default")) - { - free(rsp->status); - rsp->status = NULL; - return JB_ERR_MEMORY; - } - return JB_ERR_OK; + return cgi_redirect(rsp, CGI_PREFIX "edit-actions-list?f=default"); + } @@ -2589,7 +2575,7 @@ jb_err cgi_edit_actions_list(struct client_state *csp, } buttons = strdup(""); - for (i = 0; i < MAX_ACTION_FILES; i++) + for (i = 0; i < MAX_AF_FILES; i++) { if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL)) { @@ -2987,8 +2973,8 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp, struct file_line * cur_line; unsigned line_number; jb_err err; - struct file_list *filter_file; struct re_filterfile_spec *filter_group; + int i, have_filters = 0; if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS)) { @@ -3037,10 +3023,15 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp, if (!err) err = actions_to_radio(exports, cur_line->data.action); - filter_file = csp->rlist; - filter_group = ((filter_file != NULL) ? filter_file->f : NULL); - - if (!err) err = map_conditional(exports, "any-filters-defined", (filter_group != NULL)); + for (i = 0; i < MAX_AF_FILES; i++) + { + if ((csp->rlist[i] != NULL) && (csp->rlist[i]->f != NULL)) + { + if (!err) err = map_conditional(exports, "any-filters-defined", 1); + have_filters = 1; + break; + } + } if (err) { @@ -3049,10 +3040,8 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp, return err; } - if (filter_group == NULL) - { + if (0 == have_filters) err = map(exports, "filter-params", 1, "", 1); - } else { /* We have some entries in the filter list */ @@ -3076,69 +3065,75 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp, result = strdup(""); - for (;(!err) && (filter_group != NULL); filter_group = filter_group->next) + for (i = 0; i < MAX_AF_FILES; i++) { - char current_mode = 'x'; - struct list_entry *filter_name; - char * this_line; - struct map *line_exports; - char number[20]; - - filter_name = cur_line->data.action->multi_add[ACTION_MULTI_FILTER]->first; - while ((filter_name != NULL) - && (0 != strcmp(filter_group->name, filter_name->str))) + if ((csp->rlist[i] != NULL) && (csp->rlist[i]->f != NULL)) { - filter_name = filter_name->next; - } - - if (filter_name != NULL) - { - current_mode = 'y'; - } - else - { - filter_name = cur_line->data.action->multi_remove[ACTION_MULTI_FILTER]->first; - while ((filter_name != NULL) - && (0 != strcmp(filter_group->name, filter_name->str))) - { - filter_name = filter_name->next; - } - if (filter_name != NULL) + filter_group = csp->rlist[i]->f; + for (;(!err) && (filter_group != NULL); filter_group = filter_group->next) { - current_mode = 'n'; - } - } + char current_mode = 'x'; + struct list_entry *filter_name; + char * this_line; + struct map *line_exports; + char number[20]; + + filter_name = cur_line->data.action->multi_add[ACTION_MULTI_FILTER]->first; + while ((filter_name != NULL) + && (0 != strcmp(filter_group->name, filter_name->str))) + { + filter_name = filter_name->next; + } - /* Generate a unique serial number */ - snprintf(number, sizeof(number), "%x", index++); - number[sizeof(number) - 1] = '\0'; + if (filter_name != NULL) + { + current_mode = 'y'; + } + else + { + filter_name = cur_line->data.action->multi_remove[ACTION_MULTI_FILTER]->first; + while ((filter_name != NULL) + && (0 != strcmp(filter_group->name, filter_name->str))) + { + filter_name = filter_name->next; + } + if (filter_name != NULL) + { + current_mode = 'n'; + } + } - line_exports = new_map(); - if (line_exports == NULL) - { - err = JB_ERR_MEMORY; - freez(result); - } - else - { - if (!err) err = map(line_exports, "index", 1, number, 1); - if (!err) err = map(line_exports, "name", 1, filter_group->name, 1); - if (!err) err = map(line_exports, "description", 1, filter_group->description, 1); - if (!err) err = map_radio(line_exports, "this-filter", "ynx", current_mode); + /* Generate a unique serial number */ + snprintf(number, sizeof(number), "%x", index++); + number[sizeof(number) - 1] = '\0'; - this_line = NULL; - if (!err) - { - this_line = strdup(filter_template); - if (this_line == NULL) err = JB_ERR_MEMORY; - } - if (!err) err = template_fill(&this_line, line_exports); - string_join(&result, this_line); + line_exports = new_map(); + if (line_exports == NULL) + { + err = JB_ERR_MEMORY; + freez(result); + } + else + { + if (!err) err = map(line_exports, "index", 1, number, 1); + if (!err) err = map(line_exports, "name", 1, filter_group->name, 1); + if (!err) err = map(line_exports, "description", 1, filter_group->description, 1); + if (!err) err = map_radio(line_exports, "this-filter", "ynx", current_mode); + + this_line = NULL; + if (!err) + { + this_line = strdup(filter_template); + if (this_line == NULL) err = JB_ERR_MEMORY; + } + if (!err) err = template_fill(&this_line, line_exports); + string_join(&result, this_line); - free_map(line_exports); + free_map(line_exports); + } + } } } - freez(filter_template); if (!err) @@ -3196,7 +3191,7 @@ jb_err cgi_edit_actions_submit(struct client_state *csp, struct editable_file * file; struct file_line * cur_line; unsigned line_number; - char * target; + char target[1024]; jb_err err; int index; const char * action_set_name; @@ -3242,7 +3237,7 @@ jb_err cgi_edit_actions_submit(struct client_state *csp, get_string_param(parameters, "p", &action_set_name); if (action_set_name != NULL) { - for (index = 0; index < MAX_ACTION_FILES; index++) + for (index = 0; index < MAX_AF_FILES; index++) { if (((fl = csp->actions_list[index]) != NULL) && ((b = fl->f) != NULL)) { @@ -3384,29 +3379,12 @@ jb_err cgi_edit_actions_submit(struct client_state *csp, return err; } - target = strdup(CGI_PREFIX "edit-actions-list?f="); - string_append(&target, file->identifier); - string_join(&target, section_target(sectionid)); - + snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s#l%d", + (long) time(NULL), file->identifier, sectionid); edit_free_file(file); - if (target == NULL) - { - /* Out of memory */ - return JB_ERR_MEMORY; - } - - rsp->status = strdup("302 Local Redirect from Privoxy"); - if (rsp->status == NULL) - { - free(target); - return JB_ERR_MEMORY; - } - err = enlist_unique_header(rsp->headers, "Location", target); - free(target); - - return err; + return cgi_redirect(rsp, target); } @@ -3445,9 +3423,13 @@ jb_err cgi_edit_actions_url(struct client_state *csp, struct file_line * cur_line; unsigned line_number; unsigned section_start_line_number = 0; - char * target; + char target[1024]; jb_err err; + assert(csp); + assert(rsp); + assert(parameters); + if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS)) { return cgi_error_disabled(csp, rsp); @@ -3518,28 +3500,12 @@ jb_err cgi_edit_actions_url(struct client_state *csp, return err; } - target = strdup(CGI_PREFIX "edit-actions-list?f="); - string_append(&target, file->identifier); - string_join(&target, section_target(section_start_line_number)); + snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s#l%d", + (long) time(NULL), file->identifier, section_start_line_number); edit_free_file(file); - if (target == NULL) - { - /* Out of memory */ - return JB_ERR_MEMORY; - } - - rsp->status = strdup("302 Local Redirect from Privoxy"); - if (rsp->status == NULL) - { - free(target); - return JB_ERR_MEMORY; - } - err = enlist_unique_header(rsp->headers, "Location", target); - free(target); - - return err; + return cgi_redirect(rsp, target); } @@ -3577,7 +3543,7 @@ jb_err cgi_edit_actions_add_url(struct client_state *csp, struct editable_file * file; struct file_line * cur_line; unsigned line_number; - char * target; + char target[1024]; jb_err err; if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS)) @@ -3663,28 +3629,12 @@ jb_err cgi_edit_actions_add_url(struct client_state *csp, return err; } - target = strdup(CGI_PREFIX "edit-actions-list?f="); - string_append(&target, file->identifier); - string_join(&target, section_target(sectionid)); + snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s#l%d", + (long) time(NULL), file->identifier, sectionid); edit_free_file(file); - if (target == NULL) - { - /* Out of memory */ - return JB_ERR_MEMORY; - } - - rsp->status = strdup("302 Local Redirect from Privoxy"); - if (rsp->status == NULL) - { - free(target); - return JB_ERR_MEMORY; - } - err = enlist_unique_header(rsp->headers, "Location", target); - free(target); - - return err; + return cgi_redirect(rsp, target); } @@ -3721,7 +3671,7 @@ jb_err cgi_edit_actions_remove_url(struct client_state *csp, struct file_line * prev_line; unsigned line_number; unsigned section_start_line_number = 0; - char * target; + char target[1024]; jb_err err; if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS)) @@ -3790,28 +3740,12 @@ jb_err cgi_edit_actions_remove_url(struct client_state *csp, return err; } - target = strdup(CGI_PREFIX "edit-actions-list?f="); - string_append(&target, file->identifier); - string_join(&target, section_target(section_start_line_number)); + snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s#l%d", + (long) time(NULL), file->identifier, section_start_line_number); edit_free_file(file); - if (target == NULL) - { - /* Out of memory */ - return JB_ERR_MEMORY; - } - - rsp->status = strdup("302 Local Redirect from Privoxy"); - if (rsp->status == NULL) - { - free(target); - return JB_ERR_MEMORY; - } - err = enlist_unique_header(rsp->headers, "Location", target); - free(target); - - return err; + return cgi_redirect(rsp, target); } @@ -3848,7 +3782,7 @@ jb_err cgi_edit_actions_section_remove(struct client_state *csp, struct file_line * cur_line; struct file_line * prev_line; unsigned line_number; - char * target; + char target[1024]; jb_err err; if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS)) @@ -3928,27 +3862,12 @@ jb_err cgi_edit_actions_section_remove(struct client_state *csp, return err; } - target = strdup(CGI_PREFIX "edit-actions-list?f="); - string_append(&target, file->identifier); + snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s", + (long) time(NULL), file->identifier); edit_free_file(file); - if (target == NULL) - { - /* Out of memory */ - return JB_ERR_MEMORY; - } - - rsp->status = strdup("302 Local Redirect from Privoxy"); - if (rsp->status == NULL) - { - free(target); - return JB_ERR_MEMORY; - } - err = enlist_unique_header(rsp->headers, "Location", target); - free(target); - - return err; + return cgi_redirect(rsp, target); } @@ -3986,7 +3905,7 @@ jb_err cgi_edit_actions_section_add(struct client_state *csp, struct editable_file * file; struct file_line * cur_line; unsigned line_number; - char * target; + char target[1024]; jb_err err; if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS)) @@ -4112,27 +4031,12 @@ jb_err cgi_edit_actions_section_add(struct client_state *csp, return err; } - target = strdup(CGI_PREFIX "edit-actions-list?f="); - string_append(&target, file->identifier); + snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s", + (long) time(NULL), file->identifier); edit_free_file(file); - if (target == NULL) - { - /* Out of memory */ - return JB_ERR_MEMORY; - } - - rsp->status = strdup("302 Local Redirect from Privoxy"); - if (rsp->status == NULL) - { - free(target); - return JB_ERR_MEMORY; - } - err = enlist_unique_header(rsp->headers, "Location", target); - free(target); - - return err; + return cgi_redirect(rsp, target); } @@ -4181,7 +4085,7 @@ jb_err cgi_edit_actions_section_swap(struct client_state *csp, struct file_line * line_end_section2; struct file_line * line_after_section2; unsigned line_number; - char * target; + char target[1024]; jb_err err; if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS)) @@ -4316,27 +4220,12 @@ jb_err cgi_edit_actions_section_swap(struct client_state *csp, } } /* END if (section1 != section2) */ - target = strdup(CGI_PREFIX "edit-actions-list?f="); - string_append(&target, file->identifier); + snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s", + (long) time(NULL), file->identifier); edit_free_file(file); - if (target == NULL) - { - /* Out of memory */ - return JB_ERR_MEMORY; - } - - rsp->status = strdup("302 Local Redirect from Privoxy"); - if (rsp->status == NULL) - { - free(target); - return JB_ERR_MEMORY; - } - err = enlist_unique_header(rsp->headers, "Location", target); - free(target); - - return err; + return cgi_redirect(rsp, target); } @@ -4383,17 +4272,17 @@ jb_err cgi_toggle(struct client_state *csp, if (mode == 'E') { /* Enable */ - g_bToggleIJB = 1; + global_toggle_state = 1; } else if (mode == 'D') { /* Disable */ - g_bToggleIJB = 0; + global_toggle_state = 0; } else if (mode == 'T') { /* Toggle */ - g_bToggleIJB = !g_bToggleIJB; + global_toggle_state = !global_toggle_state; } if (NULL == (exports = default_exports(csp, "toggle"))) diff --git a/src/cgiedit.h b/cgiedit.h similarity index 91% rename from src/cgiedit.h rename to cgiedit.h index 821b5288..7bb344d9 100644 --- a/src/cgiedit.h +++ b/cgiedit.h @@ -1,9 +1,9 @@ #ifndef CGIEDIT_H_INCLUDED #define CGIEDIT_H_INCLUDED -#define CGIEDIT_H_VERSION "$Id: cgiedit.h,v 1.7 2002/03/26 22:29:54 swa Exp $" +#define CGIEDIT_H_VERSION "$Id: cgiedit.h,v 1.7.2.2 2004/02/17 13:30:23 oes Exp $" /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/cgiedit.h,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/cgiedit.h,v $ * * Purpose : CGI-based actionsfile editor. * @@ -37,6 +37,15 @@ * * Revisions : * $Log: cgiedit.h,v $ + * Revision 1.7.2.2 2004/02/17 13:30:23 oes + * Moved cgi_error_disabled() from cgiedit.c to + * cgi.c to re-enable build with --disable-editor. + * Fixes Bug #892744. Thanks to Matthew Fischer + * for spotting. + * + * Revision 1.7.2.1 2002/11/28 18:15:17 oes + * Added cgi_error_disabled + * * Revision 1.7 2002/03/26 22:29:54 swa * we have a new homepage! * @@ -134,9 +143,9 @@ extern jb_err cgi_edit_actions_section_add (struct client_state *csp, extern jb_err cgi_edit_actions_section_swap (struct client_state *csp, struct http_response *rsp, const struct map *parameters); -extern jb_err cgi_toggle(struct client_state *csp, - struct http_response *rsp, - const struct map *parameters); +extern jb_err cgi_toggle (struct client_state *csp, + struct http_response *rsp, + const struct map *parameters); #endif /* def FEATURE_CGI_EDIT_ACTIONS */ diff --git a/src/cgisimple.c b/cgisimple.c similarity index 93% rename from src/cgisimple.c rename to cgisimple.c index 92d0e3f8..3db9ab19 100644 --- a/src/cgisimple.c +++ b/cgisimple.c @@ -1,7 +1,7 @@ -const char cgisimple_rcs[] = "$Id: cgisimple.c,v 2.2 2002/12/28 03:58:19 david__schmidt Exp $"; +const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.35.2.7 2006/01/29 23:10:56 david__schmidt Exp $"; /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/src/cgisimple.c,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/cgisimple.c,v $ * * Purpose : Simple CGIs to get information about Privoxy's * status. @@ -36,15 +36,33 @@ const char cgisimple_rcs[] = "$Id: cgisimple.c,v 2.2 2002/12/28 03:58:19 david__ * * Revisions : * $Log: cgisimple.c,v $ - * Revision 2.2 2002/12/28 03:58:19 david__schmidt - * Initial drop of dashboard instrumentation - enabled with - * --enable-activity-console + * Revision 1.35.2.7 2006/01/29 23:10:56 david__schmidt + * Multiple filter file support * - * Revision 2.1 2002/07/04 14:35:05 oes + * Revision 1.35.2.6 2005/07/04 03:13:43 david__schmidt + * Undo some damaging memory leak patches + * + * Revision 1.35.2.5 2005/05/07 21:50:55 david__schmidt + * A few memory leaks plugged (mostly on error paths) + * + * Revision 1.35.2.4 2005/04/04 02:21:24 david__schmidt + * Another instance of: + * Don't show "Edit" buttons #ifndef FEATURE_CGI_EDIT_ACTIONS + * Thanks to Magnus Holmgren for the patch + * + * Revision 1.35.2.3 2003/12/17 16:34:15 oes + * - Prevent line wrap beween "View/Edit" link buttons on status page + * - Some (mostly irrelevant) fixes for Out-of-mem-case handling + * + * Revision 1.35.2.2 2003/04/03 13:48:28 oes + * Don't show "Edit" buttons #ifndef FEATURE_CGI_EDIT_ACTIONS + * + * Revision 1.35.2.1 2002/07/04 15:02:38 oes * Added ability to send redirects to send-banner CGI, so that it can completely mimic the image blocking action if called with type=auto * - * Revision 2.0 2002/06/04 14:34:21 jongfoster - * Moving source files to src/ + * Revision 1.35.2.1 2002/07/01 17:32:04 morcego + * Applying patch from Andreas as provided by Hal on the list. + * Message-ID: <20020701121218.V1606@feenix.burgiss.net> * * Revision 1.35 2002/05/12 21:44:44 jongfoster * Adding amiga.[ch] revision information, if on an amiga. @@ -442,7 +460,6 @@ jb_err cgi_send_banner(struct client_state *csp, const struct map *parameters) { char imagetype = lookup(parameters, "type")[0]; - char *image_mimetype = BUILTIN_IMAGE_MIMETYPE; /* * If type is auto, then determine the right thing @@ -474,10 +491,6 @@ jb_err cgi_send_banner(struct client_state *csp, { imagetype = 'p'; } - else if (0 == strcmpic(p, "custom")) - { - imagetype = 'c'; - } /* * If the action is to call this CGI, determine @@ -530,12 +543,6 @@ jb_err cgi_send_banner(struct client_state *csp, rsp->body = bindup(image_blank_data, image_blank_length); rsp->content_length = image_blank_length; } - else if (imagetype == 'c') - { - rsp->body = bindup(csp->config->image_blocker_data, csp->config->image_blocker_length); - rsp->content_length = csp->config->image_blocker_length; - image_mimetype = csp->config->image_blocker_format; - } else { rsp->body = bindup(image_pattern_data, image_pattern_length); @@ -546,11 +553,7 @@ jb_err cgi_send_banner(struct client_state *csp, { return JB_ERR_MEMORY; } - if (enlist(rsp->headers, "Content-Type: ")) - { - return JB_ERR_MEMORY; - } - if (enlist(rsp->headers, image_mimetype)) + if (enlist(rsp->headers, "Content-Type: " BUILTIN_IMAGE_MIMETYPE)) { return JB_ERR_MEMORY; } @@ -757,7 +760,7 @@ jb_err cgi_show_status(struct client_state *csp, switch (*(lookup(parameters, "file"))) { case 'a': - if (!get_number_param(csp, parameters, "index", &i) && i < MAX_ACTION_FILES && csp->actions_list[i]) + if (!get_number_param(csp, parameters, "index", &i) && i < MAX_AF_FILES && csp->actions_list[i]) { filename = csp->actions_list[i]->filename; file_description = "Actions File"; @@ -765,9 +768,9 @@ jb_err cgi_show_status(struct client_state *csp, break; case 'f': - if (csp->rlist) + if (!get_number_param(csp, parameters, "index", &i) && i < MAX_AF_FILES && csp->rlist[i]) { - filename = csp->rlist->filename; + filename = csp->rlist[i]->filename; file_description = "Filter File"; } break; @@ -882,19 +885,19 @@ jb_err cgi_show_status(struct client_state *csp, * FIXME: Shouldn't include hardwired HTML here, use line template instead! */ s = strdup(""); - for (i = 0; i < MAX_ACTION_FILES; i++) + for (i = 0; i < MAX_AF_FILES; i++) { if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL)) { if (!err) err = string_append(&s, ""); if (!err) err = string_join(&s, html_encode(csp->actions_list[i]->filename)); - snprintf(buf, 100, "View ", i); + snprintf(buf, 100, "View", i); if (!err) err = string_append(&s, buf); #ifdef FEATURE_CGI_EDIT_ACTIONS if (NULL == strstr(csp->actions_list[i]->filename, "standard.action") && NULL != csp->config->actions_file_short[i]) { - snprintf(buf, 100, "Edit", csp->config->actions_file_short[i]); + snprintf(buf, 100, "  Edit", csp->config->actions_file_short[i]); if (!err) err = string_append(&s, buf); } #endif @@ -911,13 +914,29 @@ jb_err cgi_show_status(struct client_state *csp, if (!err) err = map(exports, "actions-filenames", 1, "None specified", 1); } - if (csp->rlist) + /* + * List all re_filterfiles in use, together with view options. + * FIXME: Shouldn't include hardwired HTML here, use line template instead! + */ + s = strdup(""); + for (i = 0; i < MAX_AF_FILES; i++) { - if (!err) err = map(exports, "re-filter-filename", 1, html_encode(csp->rlist->filename), 0); + if (((fl = csp->rlist[i]) != NULL) && ((b = fl->f) != NULL)) + { + if (!err) err = string_append(&s, ""); + if (!err) err = string_join(&s, html_encode(csp->rlist[i]->filename)); + snprintf(buf, 100, "View", i); + if (!err) err = string_append(&s, buf); + if (!err) err = string_append(&s, "\n"); + } + } + if (*s != '\0') + { + if (!err) err = map(exports, "re-filter-filename", 1, s, 0); } else { - if (!err) err = map(exports, "re-filter-filename", 1, "None specified", 1); + if (!err) err = map(exports, "re-filter-filename", 1, "None specified", 1); if (!err) err = map_block_killer(exports, "have-filterfile"); } @@ -1094,6 +1113,7 @@ jb_err cgi_show_url_info(struct client_state *csp, if (err == JB_ERR_MEMORY) { + free_http_request(url_to_query); free_current_action(action); free_map(exports); return JB_ERR_MEMORY; @@ -1106,6 +1126,7 @@ jb_err cgi_show_url_info(struct client_state *csp, if (!err) err = map(exports, "final", 1, lookup(exports, "default"), 1); free_current_action(action); + free_http_request(url_to_query); if (err) { @@ -1125,13 +1146,14 @@ jb_err cgi_show_url_info(struct client_state *csp, { free_current_action(action); free_map(exports); + free_http_request(url_to_query); return JB_ERR_MEMORY; } } matches = strdup(""); - for (i = 0; i < MAX_ACTION_FILES; i++) + for (i = 0; i < MAX_AF_FILES; i++) { if (NULL == csp->config->actions_file_short[i] || !strcmp(csp->config->actions_file_short[i], "standard")) continue; @@ -1147,9 +1169,13 @@ jb_err cgi_show_url_info(struct client_state *csp, string_join (&matches, html_encode(csp->config->actions_file_short[i])); snprintf(buf, 150, ".action ", i); string_append(&matches, buf); - string_append(&matches, "View"); +#ifdef FEATURE_CGI_EDIT_ACTIONS + string_append(&matches, " config->actions_file_short[i])); - string_append(&matches, "\">Edit\n"); + string_append(&matches, "\">Edit"); +#endif + string_append(&matches, "\n"); hits = 0; b = b->next; @@ -1434,9 +1460,6 @@ static char *show_rcs(void) SHOW_RCS(filters_rcs) SHOW_RCS(gateway_h_rcs) SHOW_RCS(gateway_rcs) -#ifdef FEATURE_ACTIVITY_CONSOLE - SHOW_RCS(ipc_h_rcs) -#endif /* def FEATURE_ACTIVITY_CONSOLE */ SHOW_RCS(jbsockets_h_rcs) SHOW_RCS(jbsockets_rcs) SHOW_RCS(jcc_h_rcs) @@ -1460,10 +1483,6 @@ static char *show_rcs(void) SHOW_RCS(project_h_rcs) SHOW_RCS(ssplit_h_rcs) SHOW_RCS(ssplit_rcs) -#ifdef FEATURE_ACTIVITY_CONSOLE - SHOW_RCS(stats_h_rcs) - SHOW_RCS(stats_rcs) -#endif /* def FEATURE_ACTIVITY_CONSOLE */ SHOW_RCS(urlmatch_h_rcs) SHOW_RCS(urlmatch_rcs) #ifdef _WIN32 diff --git a/src/cgisimple.h b/cgisimple.h similarity index 98% rename from src/cgisimple.h rename to cgisimple.h index 8f367499..2bfe562c 100644 --- a/src/cgisimple.h +++ b/cgisimple.h @@ -3,7 +3,7 @@ #define CGISIMPLE_H_VERSION "$Id: cgisimple.h,v 1.11 2002/04/05 15:50:53 oes Exp $" /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/cgisimple.h,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/cgisimple.h,v $ * * Purpose : Declares functions to intercept request, generate * html or gif answers, and to compose HTTP resonses. diff --git a/config b/config index 5aac5a30..daee979b 100644 --- a/config +++ b/config @@ -1,9 +1,9 @@ -# Sample Configuration File for Privoxy v3.1.1 -# -# Copyright (C) 2001, 2002 Privoxy Developers http://privoxy.org -# -# $Id: config,v 1.45 2003/09/22 00:33:01 david__schmidt Exp $ -# +# Sample Configuration File for Privoxy v3.0.x +# +# Copyright (C) 2001-2004 Privoxy Developers http://privoxy.org +# +# $Id: config,v 1.39.2.17 2006/01/31 11:52:32 david__schmidt Exp $ +# #################################################################### # # # Table of Contents # @@ -19,879 +19,875 @@ # 6. WINDOWS GUI OPTIONS # # # #################################################################### -# -# +# +# # I. INTRODUCTION # =============== -# +# # This file holds the Privoxy configuration. If you modify this file, # you will need to send a couple of requests to the proxy before any # changes take effect. -# +# # When starting Privoxy on Unix systems, give the name of this file as # an argument. On Windows systems, Privoxy will look for this file # with the name 'config.txt' in the same directory where Privoxy # is installed. -# -# +# +# # II. FORMAT OF THE CONFIGURATION FILE # ==================================== -# +# # Configuration lines consist of an initial keyword followed by a # list of values, all separated by whitespace (any number of spaces # or tabs). For example, -# +# # actionsfile default.action -# +# # Indicates that the actionsfile is named 'default.action'. -# +# # The '#' indicates a comment. Any part of a line following a '#' # is ignored, except if the '#' is preceded by a '\'. -# +# # Thus, by placing a # at the start of an existing configuration line, # you can make it a comment and it will be treated as if it weren't # there. This is called "commenting out" an option and can be useful. -# +# # Note that commenting out and option and leaving it at its default # are two completely different things! Most options behave very # differently when unset. See the the "Effect if unset" explanation # in each option's description for details. -# +# # Long lines can be continued on the next line by using a `\' as the # last character. -# +# -# +# # 1. CONFIGURATION AND LOG FILE LOCATIONS # ======================================= -# +# # Privoxy can (and normally does) use a number of other files for # additional configuration, help and logging. This section of the # configuration file tells Privoxy where to find those other files. -# +# # The user running Privoxy, must have read permission for all # configuration files, and write permission to any files that would # be modified, such as log files and actions files. -# +# -# +# # 1.1. confdir # ============ -# +# # Specifies: -# +# # The directory where the other configuration files are located -# +# # Type of value: -# +# # Path name -# +# # Default value: -# +# # /etc/privoxy (Unix) or Privoxy installation dir (Windows) -# +# # Effect if unset: -# +# # Mandatory -# +# # Notes: -# +# # No trailing "/", please -# +# # When development goes modular and multi-user, the blocker, # filter, and per-user config will be stored in subdirectories of # "confdir". For now, the configuration directory structure is # flat, except for confdir/templates, where the HTML templates # for CGI output reside (e.g. Privoxy's 404 error page). -# +# confdir . -# +# # 1.2. logdir # =========== -# +# # Specifies: -# +# # The directory where all logging takes place (i.e. where logfile # and jarfile are located) -# +# # Type of value: -# +# # Path name -# +# # Default value: -# +# # /var/log/privoxy (Unix) or Privoxy installation dir (Windows) -# +# # Effect if unset: -# +# # Mandatory -# +# # Notes: -# +# # No trailing "/", please -# +# logdir . -# +# # 1.3. actionsfile # ================ -# +# # Specifies: -# +# # The actions file(s) to use -# +# # Type of value: -# +# # File name, relative to confdir, without the .action suffix -# +# # Default values: -# +# # standard # Internal purposes, no editing recommended -# +# # default # Main actions file -# +# # user # User customizations -# +# # Effect if unset: -# +# # No actions are taken at all. Simple neutral proxying. -# +# # Notes: -# +# # Multiple actionsfile lines are permitted, and are in fact # recommended! -# +# # The default values include standard.action, which is used # for internal purposes and should be loaded, default.action, # which is the "main" actions file maintained by the developers, # and user.action, where you can make your personal additions. -# +# # Actions files are where all the per site and per URL # configuration is done for ad blocking, cookie management, # privacy considerations, etc. There is no point in using Privoxy # without at least one actions file. -# +# actionsfile standard # Internal purpose, recommended actionsfile default # Main actions file actionsfile user # User customizations -# +# # 1.4. filterfile # =============== -# +# # Specifies: -# -# The filter file to use -# +# +# The filter file(s) to use +# # Type of value: -# +# # File name, relative to confdir -# +# # Default value: -# +# # default.filter (Unix) or default.filter.txt (Windows) -# +# # Effect if unset: -# +# # No textual content filtering takes place, i.e. all +filter{name} # actions in the actions files are turned neutral. -# +# # Notes: -# -# The filter file contains content modification rules that use +# +# The filter files contain content modification rules that use # regular expressions. These rules permit powerful changes on the # content of Web pages, e.g., you could disable your favorite # JavaScript annoyances, re-write the actual displayed text, -# or just have some fun replacing "Microsoft" with "MicroSuck" -# wherever it appears on a Web page. -# +# or just have some fun playing buzzword bingo with a web page. +# # The +filter{name} actions rely on the relevant filter (name) -# to be defined in the filter file! -# +# to be defined in a filter file! +# # A pre-defined filter file called default.filter that contains # a bunch of handy filters for common problems is included in the # distribution. See the section on the filter action for a list. +# When adding your own, it is recommended you add them to the +# user.filter file. # filterfile default.filter +#filterfile user.filter -# +# # 1.5. logfile # ============ -# +# # Specifies: -# +# # The log file to use -# +# # Type of value: -# +# # File name, relative to logdir -# +# # Default value: -# +# # logfile (Unix) or privoxy.log (Windows) -# +# # Effect if unset: -# +# # No log file is used, all log messages go to the console (STDERR). -# +# # Notes: -# +# +# The windows version will additionally log to the console. +# # The logfile is where all logging and error messages are # written. The level of detail and number of messages are set with # the debug option (see below). The logfile can be useful for # tracking down a problem with Privoxy (e.g., it's not blocking # an ad you think it should block) but in most cases you probably # will never look at it. -# +# # Your logfile will grow indefinitely, and you will probably # want to periodically remove it. On Unix systems, you can do # this with a cron job (see "man cron"). For Red Hat, a logrotate # script has been included. -# +# # On SuSE Linux systems, you can place a line like # "/var/log/privoxy.* +1024k 644 nobody.nogroup" in /etc/logfiles, # with the effect that cron.daily will automatically archive, # gzip, and empty the log, when it exceeds 1M size. -# +# # Any log files must be writable by whatever user Privoxy is # being run as (default on UNIX, user id is "privoxy"). -# +# logfile logfile -# +# # 1.6. jarfile # ============ -# +# # Specifies: -# +# # The file to store intercepted cookies in -# +# # Type of value: -# +# # File name, relative to logdir -# +# # Default value: -# +# # jarfile (Unix) or privoxy.jar (Windows) -# +# # Effect if unset: -# +# # Intercepted cookies are not stored at all. -# +# # Notes: -# +# # The jarfile may grow to ridiculous sizes over time. -# +# jarfile jarfile -# +# # 1.7. trustfile # ============== -# +# # Specifies: -# +# # The trust file to use -# +# # Type of value: -# +# # File name, relative to confdir -# +# # Default value: -# +# # Unset (commented out). When activated: trust (Unix) or trust.txt # (Windows) -# +# # Effect if unset: -# -# The whole trust mechanism is turned off. -# +# +# The entire trust mechanism is turned off. +# # Notes: -# +# # The trust mechanism is an experimental feature for building # white-lists and should be used with care. It is NOT recommended # for the casual user. -# +# # If you specify a trust file, Privoxy will only allow access to -# sites that are named in the trustfile. You can also mark sites -# as trusted referrers (with +), with the effect that access -# to untrusted sites will be granted, if a link from a trusted -# referrer was used. The link target will then be added to the -# "trustfile". Possible applications include limiting Internet -# access for children. -# -# If you use + operator in the trust file, it may grow considerably -# over time. -# +# sites that are specified in the trustfile. Sites can be listed +# in one of two ways: +# +# Prepending a ~ character limits access to this site only (and +# any sub-paths within this site), e.g. ~www.example.com. +# +# Or, you can designate sites as trusted referrers, by prepending +# the name with a + character. The effect is that access to +# untrusted sites will be granted -- but only if a link from this +# trusted referrer was used. The link target will then be added +# to the "trustfile" so that future, direct accesses will be +# granted. Sites added via this mechanism do not become trusted +# referrers themselves (i.e. they are added with a ~ designation). +# +# If you use the + operator in the trust file, it may grow +# considerably over time. +# +# It is recommended that Privoxy be compiled with the +# --disable-force, --disable-toggle and --disable-editor options, +# if this feature is to be used. +# +# Possible applications include limiting Internet access for +# children. +# #trustfile trust -# -# 1.8. image-blocker-custom-file -# ============== -# -# Specifies: -# -# The custom image to display for blocked images when -# +set-image-blocker{custom} is in effect in an action file -# -# Type of value: -# -# File name, relative to confdir; can be a jpeg, png or gif image -# -# Default value: -# -# Unset -# -# Effect if unset: -# -# If a custom image is called for and it is unset, the "pattern" -# built-in image will be sent instead. I.e. it is as if you had -# specified "+set-image-blocker{pattern}" instead of -# "+set-image-blocker{custom}". -# -# Notes: -# -# If the specified file signature is not found to be jpeg, png -# or gif, the the built-in "pattern" image will be sent instead. -# -#image-blocker-custom-file my-custom-image.jpg - -# +# # 2. LOCAL SET-UP DOCUMENTATION # ============================= -# +# # If you intend to operate Privoxy for more users than just yourself, # it might be a good idea to let them know how to reach you, what # you block and why you do that, your policies, etc. -# +# -# +# # 2.1. user-manual # ================ -# +# # Specifies: -# +# # Location of the Privoxy User Manual. -# +# # Type of value: -# +# # A fully qualified URI -# +# # Default value: -# +# # Unset -# +# # Effect if unset: -# +# # http://www.privoxy.org/version/user-manual/ will be used, # where version is the Privoxy version. -# +# # Notes: -# +# # The User Manual URI is used for help links from some of the # internal CGI pages. The manual itself is normally packaged # with the binary distributions, so you probably want to set this # to a locally installed copy. For multi-user setups, you could # provide a copy on a local webserver for all your users and use # the corresponding URL here. -# +# # Examples: -# +# # Unix, in local filesystem: -# -# user-manual file:///usr/share/doc/privoxy-2.9.18/user-manual/ -# +# +# user-manual file:///usr/share/doc/privoxy-3.0.1/user-manual/index.html +# +# Windows, in local filesystem, must use forward slash notation, +# and %20 to denote spaces in path names: +# +# user-manual file:///c:/some%20dir/privoxy/user-manual/index.html +# +# Windows, UNC notation (forward slashes required again): +# +# user-manual file://///some-server/some-path/privoxy/user-manual/index.html +# # Any platform, on local webserver (called "local-webserver"): -# -# user-manual http://local-webserver/privoxy-user-manual/ -# +# +# user-manual http://local-webserver/privoxy-user-manual/ +# # WARNING!!! -# +# # If set, this option should be the first option in the config # file, because it is used while the config file is being read. -# +# #user-manual http://www.privoxy.org/user-manual/ -# +# # 2.2. trust-info-url # =================== -# +# # Specifies: -# +# # A URL to be displayed in the error page that users will see if # access to an untrusted page is denied. -# +# # Type of value: -# +# # URL -# +# # Default value: -# +# # Two example URL are provided -# +# # Effect if unset: -# +# # No links are displayed on the "untrusted" error page. -# +# # Notes: -# +# # The value of this option only matters if the experimental trust # mechanism has been activated. (See trustfile above.) -# +# # If you use the trust mechanism, it is a good idea to write # up some on-line documentation about your trust policy and to # specify the URL(s) here. Use multiple times for multiple URLs. -# +# # The URL(s) should be added to the trustfile as well, so users # don't end up locked out from the information on why they were # locked out in the first place! -# +# trust-info-url http://www.example.com/why_we_block.html trust-info-url http://www.example.com/what_we_allow.html -# +# # 2.3. admin-address # ================== -# +# # Specifies: -# +# # An email address to reach the proxy administrator. -# +# # Type of value: -# +# # Email address -# +# # Default value: -# +# # Unset -# +# # Effect if unset: -# +# # No email address is displayed on error pages and the CGI user # interface. -# +# # Notes: -# +# # If both admin-address and proxy-info-url are unset, the whole # "Local Privoxy Support" box on all generated pages will not # be shown. -# +# #admin-address privoxy-admin@example.com -# +# # 2.4. proxy-info-url # =================== -# +# # Specifies: -# +# # A URL to documentation about the local Privoxy setup, # configuration or policies. -# +# # Type of value: -# +# # URL -# +# # Default value: -# +# # Unset -# +# # Effect if unset: -# +# # No link to local documentation is displayed on error pages and # the CGI user interface. -# +# # Notes: -# +# # If both admin-address and proxy-info-url are unset, the whole # "Local Privoxy Support" box on all generated pages will not # be shown. -# +# # This URL shouldn't be blocked ;-) -# +# #proxy-info-url http://www.example.com/proxy-service.html -# +# # 3. DEBUGGING # ============ -# +# # These options are mainly useful when tracing a problem. Note that # you might also want to invoke Privoxy with the --no-daemon command # line option when debugging. -# +# -# +# # 3.1. debug # ========== -# +# # Specifies: -# +# # Key values that determine what information gets logged to # the logfile. -# +# # Type of value: -# +# # Integer values -# +# # Default value: -# +# # 12289 (i.e.: URLs plus informational and warning messages) -# +# # Effect if unset: -# +# # Nothing gets logged. -# +# # Notes: -# +# # The available debug levels are: -# -# debug 1 # show each GET/POST/CONNECT request -# debug 2 # show each connection status -# debug 4 # show I/O status -# debug 8 # show header parsing -# debug 16 # log all data into the logfile -# debug 32 # debug force feature +# +# debug 1 # show each GET/POST/CONNECT request +# debug 2 # show each connection status +# debug 4 # show I/O status +# debug 8 # show header parsing +# debug 16 # log all data into the logfile +# debug 32 # debug force feature # debug 64 # debug regular expression filter -# debug 128 # debug fast redirects -# debug 256 # debug GIF de-animation +# debug 128 # debug fast redirects +# debug 256 # debug GIF de-animation # debug 512 # Common Log Format -# debug 1024 # debug kill pop-ups -# debug 2048 # CGI user interface +# debug 1024 # debug kill pop-ups +# debug 2048 # CGI user interface # debug 4096 # Startup banner and warnings. # debug 8192 # Non-fatal errors -# +# # To select multiple debug levels, you can either add them or # use multiple debug lines. -# +# # A debug level of 1 is informative because it will show you each # request as it happens. 1, 4096 and 8192 are highly recommended # so that you will notice when things go wrong. The other levels # are probably only of interest if you are hunting down a specific # problem. They can produce a hell of an output (especially 16). -# +# # The reporting of fatal errors (i.e. ones which crash Privoxy) # is always on and cannot be disabled. -# +# # If you want to use CLF (Common Log Format), you should set # "debug 512" ONLY and not enable anything else. -# +# debug 1 # show each GET/POST/CONNECT request debug 4096 # Startup banner and warnings debug 8192 # Errors - *we highly recommended enabling this* -# +# # 3.2. single-threaded # ==================== -# +# # Specifies: -# +# # Whether to run only one server thread -# +# # Type of value: -# +# # None -# +# # Default value: -# +# # Unset -# +# # Effect if unset: -# +# # Multi-threaded (or, where unavailable: forked) operation, # i.e. the ability to serve multiple requests simultaneously. -# +# # Notes: -# +# # This option is only there for debug purposes and you should # never need to use it. It will drastically reduce performance. -# +# #single-threaded -# +# # 4. ACCESS CONTROL AND SECURITY # ============================== -# +# # This section of the config file controls the security-relevant # aspects of Privoxy's configuration. -# +# -# +# # 4.1. listen-address # =================== -# +# # Specifies: -# +# # The IP address and TCP port on which Privoxy will listen for # client requests. -# +# # Type of value: -# +# # [IP-Address]:Port -# +# # Default value: -# +# # 127.0.0.1:8118 -# +# # Effect if unset: -# +# # Bind to 127.0.0.1 (localhost), port 8118. This is suitable and # recommended for home users who run Privoxy on the same machine # as their browser. -# +# # Notes: -# +# # You will need to configure your browser(s) to this proxy address # and port. -# +# # If you already have another service running on port 8118, or # if you want to serve requests from other machines (e.g. on your # local network) as well, you will need to override the default. -# +# # If you leave out the IP address, Privoxy will bind to all # interfaces (addresses) on your machine and may become reachable # from the Internet. In that case, consider using access control # lists (ACL's, see below), and/or a firewall. -# +# # If you open Privoxy to untrusted users, you will also want # to turn off the enable-edit-actions and enable-remote-toggle # options! -# +# # Example: -# +# # Suppose you are running Privoxy on a machine which has the # address 192.168.0.1 on your local private network (192.168.0.0) # and has another outside connection with a different address. You # want it to serve requests from inside only: -# +# # listen-address 192.168.0.1:8118 -# -listen-address 127.0.0.1:8118 +# +listen-address :8118 -# +# # 4.2. toggle # =========== -# +# # Specifies: -# +# # Initial state of "toggle" status -# +# # Type of value: -# +# # 1 or 0 -# +# # Default value: -# +# # 1 -# +# # Effect if unset: -# +# # Act as if toggled on -# +# # Notes: -# +# # If set to 0, Privoxy will start in "toggled off" mode, # i.e. behave like a normal, content-neutral proxy where all ad # blocking, filtering, etc are disabled. See enable-remote-toggle # below. This is not really useful anymore, since toggling is # much easier via the web interface than via editing the conf file. -# +# # The windows version will only display the toggle icon in the # system tray if this option is present. -# +# toggle 1 -# +# # 4.3. enable-remote-toggle # ========================= -# +# # Specifies: -# +# # Whether or not the web-based toggle feature may be used -# +# # Type of value: -# +# # 0 or 1 -# +# # Default value: -# +# # 1 -# +# # Effect if unset: -# +# # The web-based toggle feature is disabled. -# +# # Notes: -# +# # When toggled off, Privoxy acts like a normal, content-neutral # proxy, i.e. it acts as if none of the actions applied to # any URL. -# +# # For the time being, access to the toggle feature can not be # controlled separately by "ACLs" or HTTP authentication, so that # everybody who can access Privoxy (see "ACLs" and listen-address # above) can toggle it for all users. So this option is not # recommended for multi-user environments with untrusted users. -# +# # Note that you must have compiled Privoxy with support for this # feature, otherwise this option has no effect. -# +# enable-remote-toggle 1 -# +# # 4.4. enable-edit-actions # ======================== -# +# # Specifies: -# +# # Whether or not the web-based actions file editor may be used -# +# # Type of value: -# +# # 0 or 1 -# +# # Default value: -# +# # 1 -# +# # Effect if unset: -# +# # The web-based actions file editor is disabled. -# +# # Notes: -# +# # For the time being, access to the editor can not be controlled # separately by "ACLs" or HTTP authentication, so that everybody # who can access Privoxy (see "ACLs" and listen-address above) # can modify its configuration for all users. So this option is # not recommended for multi-user environments with untrusted users. -# +# # Note that you must have compiled Privoxy with support for this # feature, otherwise this option has no effect. -# +# enable-edit-actions 1 -# +# # 4.5. ACLs: permit-access and deny-access # ======================================== -# +# # Specifies: -# +# # Who can access what. -# +# # Type of value: -# +# # src_addr[/src_masklen] [dst_addr[/dst_masklen]] -# +# # Where src_addr and dst_addr are IP addresses in dotted decimal # notation or valid DNS names, and src_masklen and dst_masklen are # subnet masks in CIDR notation, i.e. integer values from 2 to 30 # representing the length (in bits) of the network address. The # masks and the whole destination part are optional. -# +# # Default value: -# +# # Unset -# +# # Effect if unset: -# +# # Don't restrict access further than implied by listen-address -# +# # Notes: -# +# # Access controls are included at the request of ISPs and systems # administrators, and are not usually needed by individual # users. For a typical home user, it will normally suffice to # ensure that Privoxy only listens on the localhost (127.0.0.1) # or internal (home) network address by means of the listen-address # option. -# +# # Please see the warnings in the FAQ that this proxy is not # intended to be a substitute for a firewall or to encourage # anyone to defer addressing basic security weaknesses. -# +# # Multiple ACL lines are OK. If any ACLs are specified, then # the Privoxy talks only to IP addresses that match at least one # permit-access line and don't match any subsequent deny-access # line. In other words, the last match wins, with the default # being deny-access. -# +# # If Privoxy is using a forwarder (see forward below) for a # particular destination URL, the dst_addr that is examined is # the address of the forwarder and NOT the address of the ultimate # target. This is necessary because it may be impossible for the # local Privoxy to determine the IP address of the ultimate target # (that's often what gateways are used for). -# +# # You should prefer using IP addresses over DNS names, because # the address lookups take time. All DNS names must resolve! You # can not use domain patterns like "*.org" or partial domain # names. If a DNS name resolves to multiple IP addresses, only # the first one is used. -# +# # Denying access to particular sites by ACL may have undesired # side effects if the site in question is hosted on a machine # which also hosts other sites. -# +# # Examples: -# +# # Explicitly define the default behavior if no ACL and # listen-address are set: "localhost" is OK. The absence of a # dst_addr implies that all destination addresses are OK: -# +# # permit-access localhost -# +# # Allow any host on the same class C subnet as www.privoxy.org # access to nothing but www.example.com: -# +# # permit-access www.privoxy.org/24 www.example.com/32 -# +# # Allow access from any host on the 26-bit subnet 192.168.45.64 # to anywhere, with the exception that 192.168.45.73 may not # access www.dirty-stuff.example.com: -# -# permit-access 192.168.45.64/26 +# +# permit-access 192.168.45.64/26 # deny-access 192.168.45.73 www.dirty-stuff.example.com -# +# -# +# # 4.6. buffer-limit # ================= -# +# # Specifies: -# +# # Maximum size of the buffer for content filtering. -# +# # Type of value: -# +# # Size in Kbytes -# +# # Default value: -# +# # 4096 -# +# # Effect if unset: -# +# # Use a 4MB (4096 KB) limit. -# +# # Notes: -# +# # For content filtering, i.e. the +filter and +deanimate-gif # actions, it is necessary that Privoxy buffers the entire document # body. This can be potentially dangerous, since a server could # just keep sending data indefinitely and wait for your RAM to # exhaust -- with nasty consequences. Hence this option. -# +# # When a document buffer size reaches the buffer-limit, it is # flushed to the client unfiltered and no further attempt to filter # the rest of the document is made. Remember that there may be # multiple threads running, which might require up to buffer-limit # Kbytes each, unless you have enabled "single-threaded" above. -# +# buffer-limit 4096 -# +# # 5. FORWARDING # ============= -# +# # This feature allows routing of HTTP requests through a chain # of multiple proxies. It can be used to better protect privacy # and confidentiality when accessing specific domains by routing @@ -900,191 +896,179 @@ buffer-limit 4096 # proxy to speed up browsing. Or chaining to a parent proxy may be # necessary because the machine that Privoxy runs on has no direct # Internet access. -# +# # Also specified here are SOCKS proxies. Privoxy supports the SOCKS # 4 and SOCKS 4A protocols. -# +# -# +# # 5.1. forward # ============ -# +# # Specifies: -# +# # To which parent HTTP proxy specific requests should be routed. -# +# # Type of value: -# +# # target_pattern http_parent[:port] -# +# # where target_pattern is a URL pattern that specifies to which # requests (i.e. URLs) this forward rule shall apply. Use / # to denote "all URLs". http_parent[:port] is the DNS name or # IP address of the parent HTTP proxy through which the requests # should be forwarded, optionally followed by its listening port # (default: 8080). Use a single dot (.) to denote "no forwarding". -# +# # Default value: -# +# # Unset -# +# # Effect if unset: -# +# # Don't use parent HTTP proxies. -# +# # Notes: -# +# # If http_parent is ".", then requests are not forwarded to # another HTTP proxy but are made directly to the web servers. -# +# # Multiple lines are OK, they are checked in sequence, and the # last match wins. -# +# # Examples: -# +# # Everything goes to an example anonymizing proxy, except SSL on # port 443 (which it doesn't handle): -# -# forward / anon-proxy.example.org:8080 +# +# forward / anon-proxy.example.org:8080 # forward :443 . -# +# # Everything goes to our example ISP's caching proxy, except for # requests to that ISP's sites: -# +# # forward / caching-proxy.example-isp.net:8000 # forward .example-isp.net . -# +# -# +# # 5.2. forward-socks4 and forward-socks4a # ======================================= -# +# # Specifies: -# +# # Through which SOCKS proxy (and to which parent HTTP proxy) # specific requests should be routed. -# +# # Type of value: -# +# # target_pattern socks_proxy[:port] http_parent[:port] -# +# # where target_pattern is a URL pattern that specifies to which # requests (i.e. URLs) this forward rule shall apply. Use / to # denote "all URLs". http_parent and socks_proxy are IP addresses # in dotted decimal notation or valid DNS names (http_parent may # be "." to denote "no HTTP forwarding"), and the optional port # parameters are TCP ports, i.e. integer values from 1 to 64535 -# +# # Default value: -# +# # Unset -# +# # Effect if unset: -# +# # Don't use SOCKS proxies. -# +# # Notes: -# +# # Multiple lines are OK, they are checked in sequence, and the # last match wins. -# +# # The difference between forward-socks4 and forward-socks4a # is that in the SOCKS 4A protocol, the DNS resolution of the # target hostname happens on the SOCKS server, while in SOCKS 4 # it happens locally. -# +# # If http_parent is ".", then requests are not forwarded to another # HTTP proxy but are made (HTTP-wise) directly to the web servers, # albeit through a SOCKS proxy. -# +# # Examples: -# +# # From the company example.com, direct connections are made to all # "internal" domains, but everything outbound goes through their # ISP's proxy by way of example.com's corporate SOCKS 4A gateway # to the Internet. -# -# forward-socks4a / socks-gw.example.com:1080 www-cache.example-isp.net:8080 +# +# forward-socks4a / socks-gw.example.com:1080 www-cache.example-isp.net:8080 # forward .example.com . -# +# # A rule that uses a SOCKS 4 gateway for all destinations but no # HTTP parent looks like this: -# +# # forward-socks4 / socks-gw.example.com:1080 . -# +# -# +# # 6. WINDOWS GUI OPTIONS # ====================== -# +# # Privoxy has a number of options specific to the Windows GUI # interface: -# +# # If "activity-animation" is set to 1, the Privoxy icon will animate # when "Privoxy" is active. To turn off, set to 0. -# +# #activity-animation 1 # If "log-messages" is set to 1, Privoxy will log messages to the # console window: -# +# #log-messages 1 # If "log-buffer-size" is set to 1, the size of the log buffer, # i.e. the amount of memory used for the log messages displayed in # the console window, will be limited to "log-max-lines" (see below). -# +# # Warning: Setting this to 0 will result in the buffer to grow # infinitely and eat up all your memory! -# +# #log-buffer-size 1 # log-max-lines is the maximum number of lines held in the log # buffer. See above. -# +# #log-max-lines 200 # If "log-highlight-messages" is set to 1, Privoxy will highlight # portions of the log messages with a bold-faced font: -# +# #log-highlight-messages 1 # The font used in the console window: -# +# #log-font-name Comic Sans MS # Font size used in the console window: -# +# #log-font-size 8 # "show-on-task-bar" controls whether or not Privoxy will appear as # a button on the Task bar when minimized: -# +# #show-on-task-bar 0 # If "close-button-minimizes" is set to 1, the Windows close button # will minimize Privoxy instead of closing the program (close with # the exit option on the File menu). -# +# #close-button-minimizes 1 # The "hide-console" option is specific to the MS-Win console version # of Privoxy. If this option is used, Privoxy will disconnect from # and hide the command console. -# +# #hide-console -# The experimental "activity-console-address" option is used to -# specify where statistical information should be sent for monitoring -# by the activity console. -# -#activity-console-address 127.0.0.1:8119 - -# The experimental "activity-console-update-freq" option is used to -# specify how often (in seconds) statistics should be forwarded to the -# activity console. -# -#activity-console-update-freq 5 - -# +# diff --git a/configure.in b/configure.in index e36526a0..e9130b37 100644 --- a/configure.in +++ b/configure.in @@ -1,8 +1,8 @@ dnl Process this file with autoconf to produce a configure script. dnl -dnl $Id: configure.in,v 1.88 2003/03/23 02:15:51 hal9 Exp $ +dnl $Id: configure.in,v 1.68.2.20 2004/01/31 16:31:46 oes Exp $ dnl -dnl Written by and Copyright (C) 2001, 2002 the SourceForge +dnl Written by and Copyright (C) 2001 - 2004 the SourceForge dnl Privoxy team. http://www.privoxy.org/ dnl dnl Based on the Internet Junkbuster originally written @@ -28,78 +28,69 @@ dnl or write to the Free Software Foundation, Inc., 59 dnl Temple Place - Suite 330, Boston, MA 02111-1307, USA. dnl dnl $Log: configure.in,v $ -dnl Revision 1.88 2003/03/23 02:15:51 hal9 -dnl Apply Docbook/FreeBSD patch from a.go at tiscali.nl. Thanks! +dnl Revision 1.68.2.20 2004/01/31 16:31:46 oes +dnl Resetting version info to 0.0.0 UNRELEASED dnl -dnl Revision 1.87 2002/12/28 04:10:22 david__schmidt -dnl Initial drop of dashboard instrumentation - enabled with -dnl --enable-activity-console +dnl Revision 1.68.2.19 2004/01/30 09:26:03 oes +dnl Added docbook paths for debian sarge; set status for release dnl -dnl Revision 1.86 2002/12/13 23:47:10 hal9 -dnl Add openbsd special flags per gunner at styx2002.no-ip.org +dnl Revision 1.68.2.18 2003/12/08 15:10:29 oes +dnl Bugfix: --with-docbook now correctly accepts its path parameter. Thanks, Roland! dnl -dnl Revision 1.85 2002/11/27 12:40:54 oes -dnl Fixed broken handling of pre-set CFLAGS +dnl Revision 1.68.2.17 2003/10/18 18:41:26 david__schmidt +dnl Update to remain buildable on OS/2 - remove the failures +dnl due to missing unixisms dnl -dnl Revision 1.84 2002/10/24 22:24:57 hal9 -dnl Make install: Minor clean up for variable handling. +dnl Revision 1.68.2.16 2003/03/26 16:05:14 oes +dnl Marked as 0.0.0 UNRELEASED dnl -dnl Revision 1.83 2002/10/24 16:32:41 hal9 -dnl echo -n does not work with true /bin/sh. Use AC_MSG_CHECKING for docbook stuff. +dnl Revision 1.68.2.15 2003/03/26 00:25:00 oes +dnl Bump version for 3.0.2 dnl -dnl Revision 1.82 2002/09/27 04:24:07 hal9 -dnl Minor change of "! test" to "test -ne" for Solaris. +dnl Revision 1.68.2.14 2003/03/25 13:27:12 hal9 +dnl Manually apply Docbook/FreeBSD patch #708081 from a.go at tiscali.nl. dnl -dnl Revision 1.81 2002/09/27 00:38:44 hal9 -dnl Some general cleanup of the user/group stuff. Including remove up to ':' to -dnl make Linux (?) compatible with other *nix. Better AC output stuff. +dnl Revision 1.68.2.13 2003/03/18 19:38:57 oes +dnl Set version info for 3.0.1 release dnl -dnl Revision 1.80 2002/09/26 18:47:46 hal9 -dnl This is most of Al's patch for --with-user and --with-group which tests that -dnl these are valid values, if specified. If not specified, they are left empty. +dnl Revision 1.68.2.12 2003/03/07 03:41:04 david__schmidt +dnl Wrapping all *_r functions (the non-_r versions of them) with mutex semaphores for OSX. Hopefully this will take care of all of those pesky crash reports. dnl -dnl Revision 1.79 2002/09/07 02:11:06 hal9 -dnl Remove some testing stuff inadvertantly left in. +dnl Revision 1.68.2.11 2003/03/06 15:22:37 oes +dnl Fixed minor shell syntax bug dnl -dnl Revision 1.78 2002/09/06 23:18:08 hal9 -dnl Migrate PCRE_H_IN_SUBDIR from 3.0 branch for pcre/pcre.h on RH, etc. +dnl Revision 1.68.2.10 2003/01/08 16:39:41 oes +dnl Changing default to exclude FEATURE_IMAGE_DETECT_MSIE because of problem reports with recent IEs dnl -dnl Revision 1.77 2002/09/06 13:23:03 oes -dnl Removed non-functional test for gcc support for -pthread +dnl Revision 1.68.2.9 2002/12/13 23:47:45 hal9 +dnl Add openbsd $specialflags per gunner at styx2002.no-ip.org dnl -dnl Revision 1.76 2002/09/05 14:52:17 oes -dnl Synced in some changes fromm the stable branch: -dnl Fixed detection/inclusion of pcre.h, which is in a pcre subdir on RH +dnl Revision 1.68.2.8 2002/11/27 12:55:26 oes +dnl Fixed broken handling of pre-set CFLAGS dnl -dnl Revision 1.75 2002/09/04 12:19:33 oes -dnl Resurrected acconfig.h and removed double quotes from AC_DEFINE params to enable build on older systems +dnl Revision 1.68.2.7 2002/10/25 02:44:22 hal9 +dnl Port of make install, etc from main trunk. Needs testing! Add Slackware +dnl support, and other related changes. Update related docs. dnl -dnl Revision 1.74 2002/09/03 17:31:33 oes -dnl Added workaround for very strange behaviour of AC_PROG_CC, which sets CFLAGS to -g -O2 if empty +dnl Revision 1.68.2.6 2002/09/25 15:35:15 oes +dnl Marking as non-release dnl -dnl Revision 1.73 2002/06/05 00:26:21 hal9 -dnl Move all doc build stuff to doc/source/GNUmakefile, leaving a 'make dok' -dnl target only in toplevel. Add DOC_STATUS variable so docs can be built without -dnl touching sgml source. +dnl Revision 1.68.2.5 2002/08/25 23:37:00 hal9 +dnl Getting ready for 3.0 release. dnl -dnl Revision 1.72 2002/06/04 15:52:25 jongfoster -dnl Removing need for acconfig.h (apparently using acconfig.h is an -dnl obsolete coding style). -dnl Moving the DocBook stuff together +dnl Revision 1.68.2.4 2002/08/10 11:21:57 oes +dnl - Set Version to 2.9.20 (beta) +dnl - Add two AC_DEFINEs that indicate if the pcre*.h headers +dnl are located in a pcre/ subdir to the include path. dnl -dnl Revision 1.71 2002/06/04 14:51:49 jongfoster -dnl Updating for new paths: -dnl - Source files in src/ -dnl - Object files in obj/ +dnl Revision 1.68.2.3 2002/08/06 11:29:36 oes +dnl Fixed detection/inclusion of pcre.h, which is in a pcre subdir on RH dnl -dnl Revision 1.70 2002/05/27 23:26:34 mal0rd -dnl Made doc-generation configuration automatic. -dnl References to DB2HTML were removed, not used. -dnl --with-docbook now only needed if in odd path. +dnl Revision 1.68.2.2 2002/07/30 19:36:09 hal9 +dnl Bump version to 2.9.17. dnl -dnl Revision 1.69 2002/05/25 18:11:49 jongfoster -dnl Wahay!!! 3.0.x has branched! -dnl New development version is 3.1.1 alpha +dnl Revision 1.68.2.1 2002/07/26 15:21:12 oes +dnl Bumped version number for 2.9.16 freeze dnl dnl Revision 1.68 2002/05/25 16:54:54 jongfoster dnl Detect if the compiler supports -pthread. @@ -443,9 +434,10 @@ dnl ================================================================= dnl AutoConf Initialization dnl ================================================================= -AC_REVISION($Revision: 1.88 $) -AC_INIT(src/jcc.c) -if test ! -f src/config.h.in; then +AC_REVISION($Revision: 1.68.2.20 $) +AC_INIT(jcc.c) + +if test ! -f config.h.in; then echo "You need to run autoheader first. " echo -n "Shall I do this for you now? (y/n) " read answer @@ -456,21 +448,44 @@ if test ! -f src/config.h.in; then fi fi -AC_CONFIG_HEADER([src/config.h]) +AC_CONFIG_HEADER([config.h]) AC_CANONICAL_HOST +dodk=auto +DKPREFIX=none +AC_ARG_WITH(docbook, dnl + --with-docbook=[[yes|no|directory]] + Enable docbook documentation creation + (default = yes, for gnu and linux),[dnl +case "$with_docbook" in +yes) dodk=yes;; +no) dodk=no;; +*) + dodk=yes + DKPREFIX=$withval + ;; +esac +]) +DB2HTML=false +AC_ARG_WITH(db2html, dnl + --with-db2html= + Set the location of the docbook to html converter + (default = search),[dnl +DB2HTML=$withval +]) dnl ================================================================= dnl Application version number dnl ================================================================= -VERSION_MAJOR=3 -VERSION_MINOR=1 -VERSION_POINT=1 -CODE_STATUS="alpha" +VERSION_MAJOR=0 +VERSION_MINOR=0 +VERSION_POINT=0 +CODE_STATUS="UNRELEASED" dnl CODE_STATUS can be "alpha", "beta", or "stable", and will be -dnl used for CGI output +dnl used for CGI output. Set version to 0.0.0 and status to "UNRELEASED" +dnl whenever CVS in a stable branch differs from the last release. dnl ================================================================= dnl Substitute the version numbers @@ -480,19 +495,13 @@ AC_SUBST(VERSION_MAJOR) AC_SUBST(VERSION_MINOR) AC_SUBST(VERSION_POINT) AC_SUBST(CODE_STATUS) -AC_SUBST(SYSCONFDIR) dnl -AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR}, - [Version number - Major (X._._).]) -AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR}, - [Version number - Minor (_.X._).]) -AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT}, - [Version number - Point (_._.X).]) -AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}", - [Version number, as a string.]) -AC_DEFINE_UNQUOTED(CODE_STATUS,"${CODE_STATUS}", - [Status of the code: "alpha", "beta" or "stable".]) +AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR}) +AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR}) +AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT}) +AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}") +AC_DEFINE_UNQUOTED(CODE_STATUS,"${CODE_STATUS}") dnl ================================================================= dnl Checks for programs needed to build. @@ -500,7 +509,7 @@ dnl ================================================================= dnl Keep AC_PROG_CC from setting its own defaults: if test "X$CFLAGS" = "X"; then - CFLAGS = " " + CFLAGS=" " fi AC_PROG_CC @@ -551,17 +560,23 @@ dnl ================================================================= dnl Check for user and group validity dnl ================================================================= -$ID privoxy >/dev/null 2>/dev/null -if test $? -ne 0 ; then - AC_MSG_WARN(There is no user 'privoxy' on this system) -fi -AC_MSG_CHECKING([for user]) -AC_ARG_WITH(user, + +if test "$EMXOS2" = yes; then + echo "Skipping user and group validity stuff."; + +else + + $ID privoxy >/dev/null 2>/dev/null + if test $? -ne 0 ; then + AC_MSG_WARN(There is no user 'privoxy' on this system) + fi + AC_MSG_CHECKING([for user]) + AC_ARG_WITH(user, [ --with-user=privoxy Set user under which privoxy will run], [ if test "x$withval" != "xyes"; then if test $ID = no ; then - AC_MSG_WARN(There is no 'id' program on this system) + AC_MSG_ERROR(There is no 'id' program on this system) else AC_MSG_RESULT($with_user) $ID $with_user 2>/dev/null >/dev/null @@ -577,17 +592,17 @@ AC_ARG_WITH(user, ], [ if test $ID = no ; then - AC_MSG_WARN(There is no 'id' program on this system) + AC_MSG_ERROR(There is no 'id' programm on this system) else AC_MSG_RESULT(none specified) USER=$with_user fi ] -) -AC_SUBST(USER) + ) + AC_SUBST(USER) -AC_MSG_CHECKING([for group]) -AC_ARG_WITH(group, + AC_MSG_CHECKING([for group]) + AC_ARG_WITH(group, [ --with-group=privoxy Set group for privoxy], [ if test "x$withval" != "xyes"; then @@ -614,14 +629,16 @@ AC_ARG_WITH(group, ], [ if test $BGROUPS = no ; then - AC_MSG_WARN(There is no 'groups' program on this system) + AC_MSG_ERROR(There is no 'groups' programm on this system) else AC_MSG_RESULT(none specified) GROUP=$with_group; fi ] -) -AC_SUBST(GROUP) + ) + AC_SUBST(GROUP) + +fi dnl ================================================================= dnl additional gcc flags @@ -658,6 +675,17 @@ else fi fi +if test $dodk = auto; then + dodk=no + if test $target_type = unix; then + case "$host_os" in + linux* | gnu*) + dodk=yes + ;; + esac + fi +fi + dnl Decide what to do based on target_type dnl Note: PTHREAD_LIB is always set, even if pthread is disabled. dnl This is because we don't know yet whether pthread is enabled. @@ -686,6 +714,90 @@ else fi AC_SUBST(WIN_ONLY) +dnl Checking which text html browser we have avaliable +if test $dodk != no; then + AC_CHECK_PROGS(WDUMP,w3m lynx links,false) + if test "$WDUMP" = false; then + AC_MSG_WARN(You need some kind of text browser to build documentation \(w3m, lynx and links are supported\)) + fi + if test $DB2HTML = false; then + dnl We need to clean the variable, otherwise AC_CHECK_PROGS + dnl will fail + DB2HTML="" + AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false) + fi +fi +AC_SUBST(WDUMP) +AC_SUBST(DB2HTML) + +dnl If we use rpm, we need to check where %_topdir is +AC_CHECK_PROGS(RPMBIN,rpm,false) +if test $RPMBIN != false; then + RPM_BASE=`rpm --eval "%{_topdir}"` + if test "$RPM_BASE" = ""; then + RPM_BASE=/usr/src/redhat + fi +fi +AC_SUBST(RPM_BASE) + +dnl Check for jade, so we can build the documentation +AC_CHECK_PROGS(JADEBIN,jade openjade,false) +AC_SUBST(JADEBIN) + +dnl Check for man2html for docs. +AC_CHECK_PROGS(MAN2HTML,man2html,false) +AC_SUBST(MAN2HTML) + +dnl Set doc status flag for conditional content inclusions +DOC_STATUS=p-not-stable +if test $CODE_STATUS = stable; then + DOC_STATUS="p-stable" +fi +AC_SUBST(DOC_STATUS) + +dnl Checking for the docbook.dsl stylesheet file +dnl It is still not portable (directory slash) +JADECAT="" +if test $dodk = yes; then + if test $DKPREFIX = none; then + for i in /usr/share/sgml/docbook/dsssl-stylesheets \ + /usr/share/sgml/docbkdsl /usr/share/sgml/docbook-dsssl \ + /usr/local/share/sgml/docbook/dsssl/modular \ + /usr/share/sgml/docbook/stylesheet/dsssl/modular/ \ + ; do +dnl echo -n does not fly with /bin/sh. +dnl echo -n "checking for $i/html/docbook.dsl..." + AC_MSG_CHECKING([for $i]) + if test -f $i/html/docbook.dsl; then + echo "yes" + DKPREFIX=$i + break + else + echo "no" + fi + done +# where are the catalogs? + for i in /usr/share/sgml/CATALOG.docbk30 \ + /usr/share/sgml/CATALOG.docbk31 \ + /usr/share/sgml/CATALOG.docbk31 \ + /usr/local/share/sgml/docbook/3.0/docbook.cat \ + /usr/local/share/sgml/docbook/3.1/docbook.cat \ + /usr/share/sgml/docbook/dtd/3.1/docbook.cat \ + ; do +dnl echo -n "checking for $i..." + AC_MSG_CHECKING([for $i]) + if test -f $i; then + echo "yes" + JADECAT="$JADECAT -c $i" + else + echo "no" + fi + done + fi +fi +AC_SUBST(JADECAT) +AC_SUBST(DKPREFIX) + dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS old_CFLAGS_nospecial=$CFLAGS CFLAGS="$CFLAGS $SPECIAL_CFLAGS" @@ -713,16 +825,22 @@ fi]) if test $have_pthread = yes; then PTHREAD_ONLY= - AC_DEFINE(FEATURE_PTHREAD,1, - [Define to use POSIX threads instead of native threads.]) + AC_DEFINE(FEATURE_PTHREAD) echo Using POSIX threads if test "$GCC" = "yes"; then # Set a GCC specific switch: if test "$target_type" = "unix"; then - # This compiler switch makes GCC on Linux thread-safe - # However, it's not supported on most other OS. - PTHREAD_LIB= - SPECIAL_CFLAGS="-pthread" + ac_jgf_save_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -pthread" + AC_TRY_LINK([#include ], + [void *p = pthread_create;], + [ + # This compiler switch makes GCC on Linux thread-safe + # However, it's not supported on most other OS. + PTHREAD_LIB= + SPECIAL_CFLAGS="-pthread" + ]) + CFLAGS=$ac_jgf_save_CFLAGS fi fi else @@ -750,8 +868,7 @@ AC_CHECK_FUNC(gethostbyaddr_r, [ int l, bl, t, e; (void) gethostbyaddr_r(a, l, t, h, b, bl, &hp, &e) ], [ - AC_DEFINE(HAVE_GETHOSTBYADDR_R_8_ARGS,1, - [Define if gethostbyaddr_r() exists and takes 8 arguments]) + AC_DEFINE(HAVE_GETHOSTBYADDR_R_8_ARGS) AC_MSG_RESULT([8 args]) ], [ AC_TRY_COMPILE([ @@ -762,8 +879,7 @@ AC_CHECK_FUNC(gethostbyaddr_r, [ int l, bl, t, e; (void) gethostbyaddr_r(a, l, t, h, b, bl, &e) ], [ - AC_DEFINE(HAVE_GETHOSTBYADDR_R_7_ARGS,1, - [Define if gethostbyaddr_r() exists and takes 7 arguments]) + AC_DEFINE(HAVE_GETHOSTBYADDR_R_7_ARGS) AC_MSG_RESULT([7 args]) ], [ AC_TRY_COMPILE([ @@ -775,8 +891,7 @@ AC_CHECK_FUNC(gethostbyaddr_r, [ int l, t; (void) gethostbyaddr_r(a, l, t, h, d) ], [ - AC_DEFINE(HAVE_GETHOSTBYADDR_R_5_ARGS,1, - [Define if gethostbyaddr_r() exists and takes 5 arguments]) + AC_DEFINE(HAVE_GETHOSTBYADDR_R_5_ARGS) AC_MSG_RESULT([5 args]) ], [ AC_MSG_RESULT(unrecognised) @@ -797,8 +912,7 @@ AC_CHECK_FUNC(gethostbyname_r, [ int bl, e; (void) gethostbyname_r(n, h, b, bl, &r, &e) ], [ - AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARGS,1, - [Define if gethostbyname_r() exists and takes 6 arguments]) + AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARGS) AC_MSG_RESULT([6 args]) ], [ AC_TRY_COMPILE([ @@ -809,8 +923,7 @@ AC_CHECK_FUNC(gethostbyname_r, [ int bl, e; (void) gethostbyname_r(n, h, b, bl, &e) ], [ - AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARGS,1, - [Define if gethostbyname_r() exists and takes 5 arguments]) + AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARGS) AC_MSG_RESULT([5 args]) ], [ AC_TRY_COMPILE([ @@ -821,8 +934,7 @@ AC_CHECK_FUNC(gethostbyname_r, [ char *n, (void) gethostbyname_r(n, h, d) ], [ - AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARGS,1, - [Define if gethostbyname_r() exists and takes 3 arguments]) + AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARGS) AC_MSG_RESULT([3 args]) ], [ AC_MSG_RESULT(unrecognised) @@ -843,8 +955,7 @@ AC_CHECK_FUNC(gmtime_r, [ (void) gmtime_r(t, tm) ], [ AC_MSG_RESULT(ok) - AC_DEFINE(HAVE_GMTIME_R,1, - [Define if gmtime_r(struct time *, struct tm *) exists]) + AC_DEFINE(HAVE_GMTIME_R) ], [ AC_MSG_RESULT(unrecognised) ]) @@ -862,8 +973,7 @@ AC_CHECK_FUNC(localtime_r, [ (void) localtime_r(t, tm) ], [ AC_MSG_RESULT(ok) - AC_DEFINE(HAVE_LOCALTIME_R,1, - [Define if localtime_r(struct time *, struct tm *) exists]) + AC_DEFINE(HAVE_LOCALTIME_R) ], [ AC_MSG_RESULT(unrecognised) ]) @@ -875,9 +985,9 @@ dnl ================================================================= dnl Solaris specific dnl FIXME: Not tested on Solaris yet... dnl ISFIXED: Have tested it on Solaris, but there are other ways to -dnl make these checks generic, e.g.: +dnl make these checks generic, e.g.: dnl AC_CHECK_FUNC(getsockopt, , AC_CHECK_LIB(socket, getsockopt)) -dnl (Moritz Barsnick ) +dnl (Moritz Barsnick ) dnl ================================================================= @@ -885,8 +995,7 @@ SOCKET_LIB= case "$host" in *-solaris*) SOCKET_LIB="-lsocket -lnsl" - AC_DEFINE(__EXTENSIONS__,1, - [Define to 1 on Solaris. Do not define on other platforms.]) + AC_DEFINE(__EXTENSIONS__) if test "$GCC" = "yes"; then # Set a GCC specific switch: # This compiler switch makes Solaris thread-safe @@ -907,9 +1016,9 @@ dnl ================================================================= AC_MSG_CHECKING([for socklen_t]) AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]), - AC_MSG_RESULT([no]) - AC_DEFINE(socklen_t,int, - [ Define to 'int' if doesn't have it. ])) + AC_MSG_RESULT([no]) + AC_DEFINE(socklen_t,int, + [ Define to 'int' if doesn't have it. ])) dnl ================================================================= @@ -1025,8 +1134,7 @@ dnl ================================================================= dnl Always defined dnl ================================================================= -AC_DEFINE(__MT__,1, - [Always define this, for thread safety on some platforms.]) +AC_DEFINE(__MT__) dnl ================================================================= dnl Features @@ -1034,161 +1142,86 @@ dnl ================================================================= AC_ARG_ENABLE(toggle, [ --disable-toggle Don't support temporary disable], -[enableval2=$enableval], -[enableval2=yes]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_TOGGLE,1, - [ Allow Privoxy to be "disabled" so it is just a normal non-blocking - non-anonymizing proxy. This is useful if you're trying to access a - blocked or broken site - just change the setting in the config file, - or use the handy "Disable" menu option in the Windows GUI. ]) -fi +[if test $enableval = yes; then + AC_DEFINE(FEATURE_TOGGLE) +fi],AC_DEFINE(FEATURE_TOGGLE)) AC_ARG_ENABLE(force, [ --disable-force Don't allow single-page disable], -[enableval2=$enableval], -[enableval2=yes]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_FORCE_LOAD,1, - [ Bypass filtering for 1 page only. ]) -fi +[if test $enableval = yes; then + AC_DEFINE(FEATURE_FORCE_LOAD) +fi],AC_DEFINE(FEATURE_FORCE_LOAD)) AC_ARG_ENABLE(fast-redirects, [ --disable-fast-redirects Don't support fast redirects], -[enableval2=$enableval], -[enableval2=yes]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_FAST_REDIRECTS,1, - [ Locally redirect remote script-redirect URLs. ]) -fi +[if test $enableval = yes; then + AC_DEFINE(FEATURE_FAST_REDIRECTS) +fi], AC_DEFINE(FEATURE_FAST_REDIRECTS)) AC_ARG_ENABLE(killpopup, [ --disable-killpopup Never block popups], -[enableval2=$enableval], -[enableval2=yes]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_KILL_POPUPS,1, - [ Kills JavaScript popups - window.open, onunload, etc. ]) -fi +[if test $enableval = yes; then + AC_DEFINE(FEATURE_KILL_POPUPS) +fi],AC_DEFINE(FEATURE_KILL_POPUPS)) AC_ARG_ENABLE(stats, [ --disable-stats Don't keep statistics], -[enableval2=$enableval], -[enableval2=yes]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_STATISTICS,1, - [ Enables statistics function. ]) -fi - -AC_ARG_ENABLE(activity-console, -[ --enable-activity-console Gather and send extended statistics to the activity console], -[enableval2=$enableval], -[enableval2=no]) -if test $enableval2 = yes; then - ACTIVITY_ONLY= - AC_DEFINE(FEATURE_ACTIVITY_CONSOLE,1, - [ Enables sending statistics to the activity console. This is currently - experimental, and will require some porting work for a few more platforms. ]) - else - ACTIVITY_ONLY=# -fi -AC_SUBST(ACTIVITY_ONLY) +[if test $enableval = yes; then + AC_DEFINE(FEATURE_STATISTICS) +fi],AC_DEFINE(FEATURE_STATISTICS)) AC_ARG_ENABLE(ie-images, -[ --enable-ie-images Don't auto-detect whether a request from MS Internet - Explorer is for an image or HTML.], -[enableval2=$enableval], -[enableval2=yes]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE,1, - [ Detect image requests automatically for MSIE. Will fall back to - other image-detection methods (i.e. ´´+image´´ action) for other - browsers. - - You must also define FEATURE_IMAGE_BLOCKING to use this feature. - - It detects the following header pair as an image request: - ´´User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)´´, - ´´Accept: * / *´´. - - And the following as a HTML request: - User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0), - Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, * / *. - - And no, I haven't got that backwards - IE is being wierd. - - Known limitations: - 1) If you press shift-reload on a blocked HTML page, you get - the image blocked page, not the HTML ´´blocked´´ page. - 2) Once an image ´´blocked´´ page has been sent, viewing it - in it's own browser window *should* bring up the HTML - ´´blocked´´ page, but it doesn't. You need to clear the - browser cache to get the HTML version again. - - These limitations are due to IE making inconsistent choices - about which ´´Accept:´´ header to send. ]) -fi +[ --enable-ie-images Enable a quick but not always reliable auto-detect whether requests from + MS Internet Explorer are for an image or not.], +[if test $enableval = yes; then + AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE) +fi],) AC_ARG_ENABLE(image-blocking, [ --disable-image-blocking Don't try to figure out whether a request is for an image or HTML - assume HTML.], -[enableval2=$enableval], -[enableval2=yes]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_IMAGE_BLOCKING,1, - [ Allow blocking using images as well as HTML. - If you do not define this then everything is blocked as HTML. - Note that this is required if you want to use FEATURE_IMAGE_DETECT_MSIE. ]) -fi +[if test $enableval = yes; then + AC_DEFINE(FEATURE_IMAGE_BLOCKING) +fi], +AC_DEFINE(FEATURE_IMAGE_BLOCKING)) AC_ARG_ENABLE(acl-files, [ --disable-acl-files Prevents the use of ACL files to control access to the proxy by IP address.], -[enableval2=$enableval], -[enableval2=yes]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_ACL,1, - [ Define to 1 to allow the use of an ACL to control access to the proxy by IP address. ]) -fi +[if test $enableval = yes; then + AC_DEFINE(FEATURE_ACL) +fi], +AC_DEFINE(FEATURE_ACL)) AC_ARG_ENABLE(trust-files, [ --disable-trust-files Prevents the use of trust files.], -[enableval2=$enableval], -[enableval2=yes]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_TRUST,1, - [ Define to 1 to allow the use of trust files. ]) -fi +[if test $enableval = yes; then + AC_DEFINE(FEATURE_TRUST) +fi], +AC_DEFINE(FEATURE_TRUST)) AC_ARG_ENABLE(jar-files, [ --disable-jar-files Prevents the use of jar files to capture cookies.], -[enableval2=$enableval], -[enableval2=yes]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_COOKIE_JAR,1, - [ Define to 1 to allow the user to capture cookies. ]) -fi +[if test $enableval = yes; then + AC_DEFINE(FEATURE_COOKIE_JAR) +fi], +AC_DEFINE(FEATURE_COOKIE_JAR)) AC_ARG_ENABLE(editor, [ --disable-editor Prevents the use of the web-based actions file editor and web-based temporary disable setting.], -[enableval2=$enableval], -[enableval2=yes]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS,1, - [ Define to 1 to enable the web-based configuration (actions file) editor. - If you have a shared proxy, you might want to turn this off. ]) -fi +[if test $enableval = yes; then + AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS) +fi], +AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)) AC_ARG_ENABLE(no-gifs, [ --enable-no-gifs Use politically correct PNG format instead of GIF for built-in images. May not work with all browsers.], -[enableval2=$enableval], -[enableval2=no]) -if test $enableval2 = yes; then - AC_DEFINE(FEATURE_NO_GIFS,1, - [ Define to 1 to use PNG instead of GIF for built-in images. ]) -fi +[if test $enableval = yes; then + AC_DEFINE(FEATURE_NO_GIFS) +fi]) + dnl pcre/pcrs is needed for CGI anyway, so dnl the choice is only between static and @@ -1217,12 +1250,7 @@ if test $have_pcre = "yes"; then else echo "using built-in static pcre" pcre_dyn=no - AC_DEFINE(STATIC_PCRE,1, - [Define to 1 if PCRE should be statically built in instead of linking - with libpcre. - (This is determined by configure depending on the availiability of - libpcre and user preferences). The name is ugly, but pcre needs it. - Don't try to change this here! Use configure instead.]) + AC_DEFINE(STATIC_PCRE) STATIC_PCRE_ONLY= fi @@ -1236,129 +1264,13 @@ if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then LIBS="$LIBS -lpcrs" else echo "using built-in static pcrs" - AC_DEFINE(STATIC_PCRS,1, - [Define to 1 if PCRS should be statically built in instead of linking - with libpcrs. - (This is determined by configure depending on the availiability of - libpcrs and user preferences). - Don't try to change this here! Use configure instead.]) + AC_DEFINE(STATIC_PCRS) STATIC_PCRS_ONLY= fi AC_SUBST(STATIC_PCRE_ONLY) AC_SUBST(STATIC_PCRS_ONLY) -dnl ================================================================= -dnl DocBook stuff -dnl ================================================================= - -AC_ARG_WITH(docbook, dnl - --with-docbook= - Set the location of the dsssl stylesheet - (default = search),[dnl -DKPREFIX=$withval -]) - -dnl Check for jade, so we can build the documentation -dnl Openjade is preferred according to docs, but jade -dnl is *much* faster. -AC_CHECK_PROGS(JADEBIN,jade openjade,false) -AC_SUBST(JADEBIN) - -dnl Checking for the docbook.dsl stylesheet file -dnl It is still not portable (directory slash) -dnl ^ Why not? All systems use / don't they? -dnl Windows certainly can. Is this a Mac or -dnl Amiga issue? -- Jon /dsssl/docbook/html/docbook.dsl -DKPREFIXCOPY=$DKPREFIX -DKPREFIX=false -for i in $DKPREFIXCOPY /usr/share/sgml/docbook/stylesheet/dsssl/modular \ - /usr/share/sgml/docbook/dsssl-stylesheets /usr/share/sgml/docbkdsl \ - /usr/share/sgml/docbook-dsssl /usr/local/share/sgml/docbook/dsssl/modular; do -dnl echo -n does not fly with /bin/sh. -dnl echo -n "checking for $i/html/docbook.dsl..." - AC_MSG_CHECKING([for $i]) - if test -f $i/html/docbook.dsl; then - echo "yes" - DKPREFIX=$i - break - else - echo "no" - fi -done -AC_SUBST(DKPREFIX) - -JADECAT="" -dnl where are the catalogs? -for i in /usr/share/sgml/CATALOG.docbk30 \ - /usr/share/sgml/CATALOG.docbk31 \ - /usr/local/share/sgml/docbook/3.0/docbook.cat \ - /usr/local/share/sgml/docbook/3.1/docbook.cat \ - ; do -dnl echo -n "checking for $i..." - AC_MSG_CHECKING([for $i]) - if test -f $i; then - echo "yes" - JADECAT="$JADECAT -c $i" - else - echo "no" - fi -done -AC_SUBST(JADECAT) - -dnl NOT USED? -dnl DB2HTML=false -dnl AC_ARG_WITH(db2html, dnl -dnl --with-db2html= -dnl Set the location of the docbook to html converter -dnl (default = search),[dnl -dnl DB2HTML=$withval -dnl ]) -dnl if ! test -x $DB2HTML; then -dnl DB2HTML="" -dnl fi -dnl -dnl Check for a docbook -> HTML converter -dnl AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false) -dnl AC_SUBST(DB2HTML) - -dnl Check for a text browser that supports -dump -AC_CHECK_PROGS(WDUMP,w3m lynx links,false) -AC_SUBST(WDUMP) - -dnl Check for man2html for docs. -AC_CHECK_PROGS(MAN2HTML,man2html,false) -AC_SUBST(MAN2HTML) - -dnl Set doc status, used for conditional content inclusions -DOC_STATUS="" -if test $CODE_STATUS = alpha; then - DOC_STATUS="-ip-alpha -ip-not-stable" -fi -if test $CODE_STATUS = beta; then - DOC_STATUS="-ip-beta -ip-not-stable" -fi -if test $CODE_STATUS = stable; then - DOC_STATUS="-ip-stable" -fi -echo "checking for doc status flags... $DOC_STATUS" -AC_SUBST(DOC_STATUS) - -dnl ================================================================= -dnl RPM stuff -dnl ================================================================= - -dnl If we use rpm, we need to check where %_topdir is -AC_CHECK_PROGS(RPMBIN,rpm,false) -if test $RPMBIN != false; then - RPM_BASE=`rpm --eval "%{_topdir}"` - if test "$RPM_BASE" = ""; then - RPM_BASE=/usr/src/redhat - fi -fi -AC_SUBST(RPM_BASE) - - dnl ================================================================= dnl Final cleanup and output dnl ================================================================= @@ -1370,5 +1282,4 @@ AC_SUBST(SPECIAL_CFLAGS) AC_SUBST(PTHREAD_LIB) -AC_OUTPUT(GNUmakefile doc/source/ldp.dsl doc/source/GNUmakefile) - +AC_OUTPUT(GNUmakefile doc/source/ldp.dsl) diff --git a/src/cygwin.h b/cygwin.h similarity index 97% rename from src/cygwin.h rename to cygwin.h index 1ed69f62..c57602ee 100644 --- a/src/cygwin.h +++ b/cygwin.h @@ -3,7 +3,7 @@ #define CYGWIN_H_VERSION "$Id: cygwin.h,v 1.4 2002/03/26 22:29:54 swa Exp $" /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/cygwin.h,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/cygwin.h,v $ * * Purpose : The windows.h file seems to be a *tad* different, so I * will bridge the gaps here. Perhaps I should convert the diff --git a/src/deanimate.c b/deanimate.c similarity index 94% rename from src/deanimate.c rename to deanimate.c index b411f90c..b9592e8f 100644 --- a/src/deanimate.c +++ b/deanimate.c @@ -1,7 +1,7 @@ -const char deanimate_rcs[] = "$Id: deanimate.c,v 2.1 2002/08/26 11:06:27 sarantis Exp $"; +const char deanimate_rcs[] = "$Id: deanimate.c,v 1.12.2.1 2004/10/03 12:53:32 david__schmidt Exp $"; /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/src/deanimate.c,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/deanimate.c,v $ * * Purpose : Declares functions to manipulate binary images on the * fly. High-level functions include: @@ -40,11 +40,14 @@ const char deanimate_rcs[] = "$Id: deanimate.c,v 2.1 2002/08/26 11:06:27 saranti * * Revisions : * $Log: deanimate.c,v $ - * Revision 2.1 2002/08/26 11:06:27 sarantis - * Fix typo failiure -> failure - * - * Revision 2.0 2002/06/04 14:34:21 jongfoster - * Moving source files to src/ + * Revision 1.12.2.1 2004/10/03 12:53:32 david__schmidt + * Add the ability to check jpeg images for invalid + * lengths of comment blocks. Defensive strategy + * against the exploit: + * Microsoft Security Bulletin MS04-028 + * Buffer Overrun in JPEG Processing (GDI+) Could + * Allow Code Execution (833987) + * Enabled with +inspect-jpegs in actions files. * * Revision 1.12 2002/05/12 21:36:29 jongfoster * Correcting function comments @@ -139,7 +142,7 @@ void buf_free(struct binbuffer *buf) * 2 : length = Desired minimum size * * - * Returns : 0 on success, 1 on failure. + * Returns : 0 on success, 1 on failiure. * *********************************************************************/ int buf_extend(struct binbuffer *buf, size_t length) @@ -180,7 +183,7 @@ int buf_extend(struct binbuffer *buf, size_t length) * 2 : dst = Pointer to the destination binbuffer * 3 : length = Number of bytes to be copied * - * Returns : 0 on success, 1 on failure. + * Returns : 0 on success, 1 on failiure. * *********************************************************************/ int buf_copy(struct binbuffer *src, struct binbuffer *dst, size_t length) @@ -226,7 +229,7 @@ int buf_copy(struct binbuffer *src, struct binbuffer *dst, size_t length) * 1 : src = Pointer to the source binbuffer * 2 : offset = Offset to the desired byte * - * Returns : The byte on success, or 0 on failure + * Returns : The byte on success, or 0 on failiure * *********************************************************************/ unsigned char buf_getbyte(struct binbuffer *src, size_t offset) @@ -255,7 +258,7 @@ unsigned char buf_getbyte(struct binbuffer *src, size_t offset) * Parameters : * 1 : buf = Pointer to the binbuffer * - * Returns : 0 on success, or 1 on failure + * Returns : 0 on success, or 1 on failiure * *********************************************************************/ int gif_skip_data_block(struct binbuffer *buf) @@ -294,7 +297,7 @@ int gif_skip_data_block(struct binbuffer *buf) * 1 : src = Pointer to the source binbuffer * 2 : dst = Pointer to the destination binbuffer * - * Returns : 0 on success, or 1 on failure + * Returns : 0 on success, or 1 on failiure * *********************************************************************/ int gif_extract_image(struct binbuffer *src, struct binbuffer *dst) @@ -359,7 +362,7 @@ int gif_extract_image(struct binbuffer *src, struct binbuffer *dst) * 3 : get_first_image = Flag: If set, get the first image * If unset (default), get the last * - * Returns : 0 on success, or 1 on failure + * Returns : 0 on success, or 1 on failiure * *********************************************************************/ int gif_deanimate(struct binbuffer *src, struct binbuffer *dst, int get_first_image) @@ -525,7 +528,7 @@ write: * Parameters : * 1 : src = Pointer to the image binbuffer * - * Returns : 0 on success, or 1 on failure + * Returns : 0 on success, or 1 on failiure * *********************************************************************/ int jpeg_inspect(struct binbuffer *src, struct binbuffer *dst) diff --git a/src/deanimate.h b/deanimate.h similarity index 86% rename from src/deanimate.h rename to deanimate.h index f0aed467..71cb5479 100644 --- a/src/deanimate.h +++ b/deanimate.h @@ -1,9 +1,9 @@ #ifndef DEANIMATE_H_INCLUDED #define DEANIMATE_H_INCLUDED -#define DEANIMATE_H_VERSION "$Id: deanimate.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $" +#define DEANIMATE_H_VERSION "$Id: deanimate.h,v 1.8.2.1 2004/10/03 12:53:32 david__schmidt Exp $" /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/src/deanimate.h,v $ + * File : $Source: /cvsroot/ijbswa/current/Attic/deanimate.h,v $ * * Purpose : Declares functions to manipulate binary images on the * fly. High-level functions include: @@ -44,8 +44,14 @@ * * Revisions : * $Log: deanimate.h,v $ - * Revision 2.0 2002/06/04 14:34:21 jongfoster - * Moving source files to src/ + * Revision 1.8.2.1 2004/10/03 12:53:32 david__schmidt + * Add the ability to check jpeg images for invalid + * lengths of comment blocks. Defensive strategy + * against the exploit: + * Microsoft Security Bulletin MS04-028 + * Buffer Overrun in JPEG Processing (GDI+) Could + * Allow Code Execution (833987) + * Enabled with +inspect-jpegs in actions files. * * Revision 1.8 2002/03/26 22:29:54 swa * we have a new homepage! diff --git a/debian/.gitignore b/debian/.gitignore deleted file mode 100644 index 0bf51c70..00000000 --- a/debian/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -files -privoxy -privoxy.postinst.debhelper -privoxy.postrm.debhelper -privoxy.prerm.debhelper -privoxy.substvars - diff --git a/debian/README.Debian b/debian/README.Debian index 1e13c06f..738b98a0 100644 --- a/debian/README.Debian +++ b/debian/README.Debian @@ -7,5 +7,16 @@ privoxy for Debian want to use these features, you can enable them in /etc/privoxy/config and do a "/etc/init.d/privoxy restart". +- A patch was applied to access the local copy of the user manual + (/usr/share/doc/privoxy/user-manual/*) was applied. With the option + user-manual /usr/share/doc/privoxy/user-manual + in /etc/privoxy/config this is activated and the manual can be + accessed as http://config.privoxy.org/user-manual + +- A patch was applied to use multiple filter files. So you can leave + /etc/privoxy/default.filter untouched and use a local file like + /etc/privoxy/user.filter for your local changes (you have to enable + this file using a second filterfile directive in /etc/privoxy/config). + Roland Rosenfeld -$Id$ +$Id: README.Debian,v 1.1.2.3 2006/07/02 11:06:24 roro Exp $ diff --git a/debian/changelog b/debian/changelog index 4865bc2c..804eefcd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,42 +1,168 @@ -privoxy (3.1.1-3) unstable; urgency=low - - * New build based on CVS as of 2003-03-01. +privoxy (3.0.3-2-1) unstable; urgency=low + + * New upstream version 3.0.3-2. + * Add debian/watch file. + * Remove parts of 13_memory.dpatch, which seem to be free too much + memory (Closes: #353110, #354611). + + -- Roland Rosenfeld Mon, 27 Feb 2006 23:28:52 +0100 + +privoxy (3.0.3-6) unstable; urgency=low + + * Now hopefully really redirect all output of logrotate to /dev/null + (Closes: #314868). + * Migrate all patches to dpatch mechanism. + * Upgrade to debhelper 5. + * Call htmldoc with parameter --no-embedfonts to keep PDF files small. + * Build-Depends on htmldoc (>= 1.8.25-1), because older versions caused + broken PDF documentation on 64bit systems. + * Fix some typos in user-manual. + * Add multiple filter file support (from CVS) (Closes: #201177). + * Fix some memory leaks, mallocs, double frees (from CVS). + * Remove CVS $-tags from config files to make it easier for users to + keep the configuration in a VCS (Closes: #350799). + * Remove trailing spaces from all config files now. + * Build man page (and HTML version of it) at build time. + + -- Roland Rosenfeld Sat, 11 Feb 2006 21:27:14 +0100 + +privoxy (3.0.3-5) unstable; urgency=low + + * Redirect output of restart script in logrotate to /dev/null + (Closes: #314868). + * Upgrade to Standards-Version 3.6.2: + - Recommends: doc-base + * Build-Depends on autotools-dev and copy config.guess and config.sub + from there on every build (Closes: #332767). + * After dechunking remove the "chunked"-header instead of replacing it + by an d"identity" header. Thanks to Michael Shields for reporting this + (Closes: #318683). + * Update address of FSF in copyright file. + + -- Roland Rosenfeld Sun, 9 Oct 2005 13:44:55 +0200 + +privoxy (3.0.3-4) unstable; urgency=low + + * Stop converting entities to 8bit chars in the documentation + (Closes: #203697). + * Fix typos ('persistant' and 'Januar') in man page and man page sources + (Closes: #302145). + * Restart privoxy in logrotate script instead of sendig a kill -HUP, to + triggering reopen of log files (Closes: #285059). + * Apply patch by Jindrich Makovicka to fix race conditions in log + writing functions (Closes: #299662). + * Stop hiding referrer for www.petitiononline.com/mod_perl/signed.cgi, + because this site does not work otherwise (Closes: #250407). + + -- Roland Rosenfeld Sun, 15 May 2005 15:28:56 +0200 + +privoxy (3.0.3-3) unstable; urgency=low + + * Now really remove multiproxy.org from all documentation, not only from + the config file (Closes: #198953). + + -- Roland Rosenfeld Sun, 15 Feb 2004 23:11:29 +0100 + +privoxy (3.0.3-2) unstable; urgency=low + + * no banners-by-side on "/valid-" images, because that's usually from + validator.w3.org (Closes: #221009). + * Upgrade to Standards-Version 3.6.1 (no changes). + * Add Homepage URL to the package description. + * If the privoxy user is already existing as a non-system user in + postinst, this no longer fails, but deletes the non-system user before + adding it again as a system user (Closes: #232724). + * Use deluser instead of userdel in postrm. + * Redirect stderr of privoxy to /var/log/privoxy/errfile to avoid + problems with kept open file descriptors (Closes: #200712). + * Remove comment from config file, which points to list of open proxies + at multiproxy.org (Closes: #198953). + + -- Roland Rosenfeld Sun, 15 Feb 2004 15:13:27 +0100 + +privoxy (3.0.3-1) unstable; urgency=low + + * New upstream version 3.0.3. + - This introduces workarounds for server (PHP <4.2.3) bugs including + the "blank page" problem (Closes: #215231). + - Avoid the conversion of "open" in scripts to "PrivoxyWindowOpen" + (Closes: #197995). + - "advocancy" is no longer blocked (Closes: #202042). + - Fixed yet another two memory leaks (Closes: #215911). + * Stop backup of pdf directory, because it is no longer contained in the + upstream package. + * Create doc/pdf, which is missing upstream. + * disable filter{unsolicited-popups} for www.perl.com/language/newdocs/pod/ + to avoid problems with "PrivoxyWindowOpen" in Perl manuals + (Closes: #195311). + * Apply patch make privoxy compilable on woody where htmldoc --version + doesn't exist (Closes: #216524). + + -- Roland Rosenfeld Sat, 31 Jan 2004 11:25:53 +0100 + +privoxy (3.0.2-5) unstable; urgency=low + + * Merge corrections from upstream default.action 1.7. + - demoronizer filter (which caused trouble on non latin1 charsets) is + now switched off by default (Closes: #202234). + + -- Roland Rosenfeld Tue, 9 Sep 2003 21:31:51 +0200 + +privoxy (3.0.2-4) unstable; urgency=low + + * Add a versioned build dependency on htmldoc (>= 1.8.20), because there + seem to be some options mission in the old 1.8.17 (Closes: #192457). + * Merge rotation of logfile and jarfile in logrotate script. + * Test whether /var/run/privoxy.pid is existing and don't bother when no + privoxy is running in logrotate script (Closes: #191838). + * Remove /var/run/privoxy.pid on privoxy stop in init.d script. + * Mention apt-get instead of dpkg in user-manual (Closes: #189239). + * Remove trailing whitespace from text versions of user-manual, + developer-manual and faq (Closes: #192566). + + -- Roland Rosenfeld Fri, 9 May 2003 08:21:30 +0200 + +privoxy (3.0.2-3) unstable; urgency=low + + * Stop filtering favicon.ico, which may cause trouble (Closes: #188947). + * Send SIGHUP to privoxy instead of touching /etc/provoxy/config in + logrotate script to tell privoxy that the logfiles were rotated + (Closes: #189240). + * Remove trailing spaces from config file (Closes: #189240). + * Install man page as privoxy(8) instead of privoxy(1), because this is + a system binary. * Build HTML, text, and PDF versions of the documentation from source. + * Fix setting of dodk in configure.in. + * Add option "--linkcolor #0000ff" to htmldoc call in ldp_print to be + independent of ~/.htmldocrc color setting. * Mention PDF and text version of the documentation in doc-base files. * Install PDF version of the documentation, too. * Install HTML version of the man page, too. - -- Roland Rosenfeld Sat, 1 Mar 2003 13:54:32 +0100 + -- Roland Rosenfeld Mon, 21 Apr 2003 11:11:31 +0200 + +privoxy (3.0.2-2) unstable; urgency=low -privoxy (3.1.1-2) unstable; urgency=low + * Don't apply any filters to {bugs|lists}.debian.org (Closes: #186537). + * Prepend "http://config.privoxy.org" before "/user-manual/" to always + get a correct URL for the local user-manual (also on 404 error pages). + (Closes SF-719724). - * Stop creating documentation, it's usually available upstream and can - be used as is without depending on docbook and the like. - * Added LICENSE, pdfs, privoxy-index and HTMLized man-page from package. - The LICENSE is already mentioned in debian/copyright (adding a - separate file conflicts with the policy), the man page is available in - nroff format and the PDFs are not better than the HTML version. + -- Roland Rosenfeld Sun, 13 Apr 2003 12:49:15 +0200 - -- Roland Rosenfeld Fri, 6 Sep 2002 18:37:19 +0200 +privoxy (3.0.2-1) unstable; urgency=low -privoxy (3.1.1-1) unstable; urgency=low + * New upstream version 3.0.2. + * Update Standards-Version to 3.5.9 (no changes). - * Removed build dependency on w3m. - * Removed ./configure argument for docbook, moving the path to the - configure.in. - * Added LICENSE, pdfs, privoxy-index and HTMLized man-page + -- Roland Rosenfeld Wed, 26 Mar 2003 19:45:07 +0100 - -- Devin Bayer Tue, 28 May 2002 21:21:48 -0400 +privoxy (3.0.0-6) unstable; urgency=low -privoxy (3.1.1-0) unstable; urgency=low + * Fixed a bug in local user-manual patch, which failed when accessing + http://config.privoxy.org/user-manual/ (without a file name). - * Added debian-dist and debian-upload targets to the top level makefile. - debian-dist runs "dpkg-buildpackage -rfakeroot -us -uc" so that - any debian user can build it. - * Removed build dependency on docbook, leaving generation of docs to - another target or makefile. - - -- Devin Bayer Sat, 25 May 2002 22:49:30 -0400 + -- Roland Rosenfeld Sun, 2 Mar 2003 13:40:48 +0100 privoxy (3.0.0-5) unstable; urgency=low diff --git a/debian/compat b/debian/compat index b8626c4c..7ed6ff82 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -4 +5 diff --git a/debian/control b/debian/control index f7e81ea6..cd43c6c7 100644 --- a/debian/control +++ b/debian/control @@ -2,12 +2,13 @@ Source: privoxy Section: web Priority: optional Maintainer: Roland Rosenfeld -Build-Depends: debhelper (>= 4.0.0), autoconf, libpcre3-dev, jade, docbook-dsssl, w3m, sp, sgmlspl, groff, htmldoc -Standards-Version: 3.5.8 +Build-Depends: debhelper (>= 5.0.0), autoconf, autotools-dev, libpcre3-dev, jade, docbook-dsssl, w3m, sp, sgmlspl, groff, htmldoc (>= 1.8.25-1), man2html, dpatch +Standards-Version: 3.6.2 Package: privoxy Architecture: any -Depends: ${shlibs:Depends}, logrotate, adduser +Depends: ${shlibs:Depends}, ${misc:Depends}, logrotate, adduser +Recommends: doc-base Description: Privacy enhancing HTTP Proxy Privoxy is a web proxy with advanced filtering capabilities for protecting privacy, filtering web page content, managing cookies, @@ -17,3 +18,5 @@ Description: Privacy enhancing HTTP Proxy has application for both stand-alone systems and multi-user networks. . Privoxy is based on Internet Junkbuster (tm). + . + Homepage: http://www.privoxy.org/ diff --git a/debian/copyright b/debian/copyright index 2ae2775c..4b0ed5ed 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,19 +1,18 @@ + This package was debianized by Roland Rosenfeld on Fri, 29 Mar 2002 11:52:03 +0100. -It was downloaded from http://privoxy.org/ and +It was downloaded from http://www.privoxy.org/ and http://sourceforge.net/project/showfiles.php?group_id=11118 Upstream Authors: ijbswa-developers@lists.sourceforge.net -Current Project developers: +Current Development Team: - Stefan Waldherr - Andreas Oesterhelt + Hal Burgiss (docs) Jon Foster - - Markus Breitenbach - Thomas Steudten + Andreas Oesterhelt + David Schmidt (OS/2, Mac OSX ports) Originally developed by: @@ -42,8 +41,8 @@ Copyright: Written by and Copyright (C) 2001 the SourceForge The GNU General Public License should be included with this file. If not, you can view it at http://www.gnu.org/copyleft/gpl.html - or write to the Free Software Foundation, Inc., 59 - Temple Place - Suite 330, Boston, MA 02111-1307, USA. + or write to the Free Software Foundation, Inc., + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. The complete GNU General Public License can be found at /usr/share/common-licenses/GPL diff --git a/debian/doc-base.user b/debian/doc-base.user index 4d21c6e9..1828834b 100644 --- a/debian/doc-base.user +++ b/debian/doc-base.user @@ -14,4 +14,3 @@ Files: /usr/share/doc/privoxy/user-manual.txt.gz Format: pdf Files: /usr/share/doc/privoxy/privoxy-user-manual.pdf - diff --git a/debian/init.d b/debian/init.d index 012668da..9fc1a8f3 100644 --- a/debian/init.d +++ b/debian/init.d @@ -17,13 +17,14 @@ case "$1" in echo -n "Starting $DESC: " start-stop-daemon --oknodo --start --quiet --pidfile $PIDFILE \ --exec $DAEMON -- --pidfile $PIDFILE --user $OWNER $CONFIGFILE \ - 2>/dev/null + 2>> /var/log/privoxy/errorfile echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \ --exec $DAEMON + rm -f $PIDFILE echo "$NAME." ;; #reload) @@ -44,12 +45,14 @@ case "$1" in # option to the "reload" entry above. If not, "force-reload" is # just the same as "restart". # - echo "Restarting $DESC: " + echo -n "Restarting $DESC: " start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \ --exec $DAEMON sleep 1 start-stop-daemon --oknodo --start --quiet --pidfile $PIDFILE \ - --exec $DAEMON -- --pidfile $PIDFILE --user $OWNER $CONFIGFILE + --exec $DAEMON -- --pidfile $PIDFILE --user $OWNER $CONFIGFILE \ + 2>> /var/log/privoxy/errorfile + echo "$NAME." ;; *) N=/etc/init.d/$NAME diff --git a/debian/logrotate b/debian/logrotate index d230a8b0..a110e932 100644 --- a/debian/logrotate +++ b/debian/logrotate @@ -1,21 +1,17 @@ -/var/log/privoxy/logfile { +/var/log/privoxy/logfile /var/log/privoxy/jarfile /var/log/privoxy/errorfile { create 0640 privoxy adm missingok weekly rotate 7 compress + sharedscripts postrotate - touch /etc/privoxy/config - endscript -} - -/var/log/privoxy/jarfile { - create 0640 privoxy adm - missingok - weekly - rotate 7 - compress - postrotate - touch /etc/privoxy/config + if [ -x /usr/sbin/invoke-rc.d ]; then + invoke-rc.d privoxy restart > /dev/null + else + if [ -f /var/run/privoxy.pid ]; then + /etc/init.d/privoxy restart > /dev/null + fi + fi endscript } diff --git a/debian/manpages b/debian/manpages index 66709657..51ec1109 100644 --- a/debian/manpages +++ b/debian/manpages @@ -1 +1 @@ -privoxy.1 +privoxy.8 diff --git a/debian/patches/00list b/debian/patches/00list new file mode 100644 index 00000000..6c2fb3f7 --- /dev/null +++ b/debian/patches/00list @@ -0,0 +1,14 @@ +01_local_usermanual.dpatch +02_linkcolor.dpatch +04_nomultiproxy.dpatch +05_defaut_action.dpatch +06_8bit_manual.dpatch +07_typos.dpatch +08_log_pthread.dpatch +09_no_identity.dpatch +10_backup_doc.dpatch +11_backup_autotools.dpatch +12_multiple-filters.dpatch +13_memory.dpatch +14_config.dpatch +15_mansection8.dpatch diff --git a/debian/patches/01_local_usermanual.dpatch b/debian/patches/01_local_usermanual.dpatch new file mode 100644 index 00000000..a5c51fa6 --- /dev/null +++ b/debian/patches/01_local_usermanual.dpatch @@ -0,0 +1,211 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 01_local_usermanual.dpatch by Roland Rosenfeld +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Add new "cgi" user-manual, which sends the user manual to the client +## DP: and activate it in config file (Closes: #148128). + +@DPATCH@ +diff -urNad privoxy~/cgi.c privoxy/cgi.c +--- privoxy~/cgi.c 2006-02-11 23:44:26.000000000 +0100 ++++ privoxy/cgi.c 2006-02-11 23:44:34.000000000 +0100 +@@ -609,6 +609,9 @@ + { "t", + cgi_transparent_image, + NULL, TRUE /* Send a transparent image (short name) */ }, ++ { "user-manual", ++ cgi_send_user_manual, ++ NULL, TRUE /* Send user-manual */ }, + { NULL, /* NULL Indicates end of list and default page */ + cgi_error_404, + NULL, TRUE /* Unknown CGI page */ } +@@ -821,21 +824,28 @@ + { + return cgi_error_memory(); + } +- + query_args_start = path_copy; +- while (*query_args_start && *query_args_start != '?') ++ while (*query_args_start && *query_args_start != '?' && *query_args_start != '/') + { + query_args_start++; + } +- if (*query_args_start == '?') ++ if (*query_args_start == '/') + { + *query_args_start++ = '\0'; +- } +- +- if (NULL == (param_list = parse_cgi_parameters(query_args_start))) +- { +- free(path_copy); +- return cgi_error_memory(); ++ if ((param_list = new_map())) ++ { ++ map(param_list, "file", 1, url_decode(query_args_start), 0); ++ } ++ } else { ++ if (*query_args_start == '?') ++ { ++ *query_args_start++ = '\0'; ++ } ++ if (NULL == (param_list = parse_cgi_parameters(query_args_start))) ++ { ++ free(path_copy); ++ return cgi_error_memory(); ++ } + } + + /* +@@ -1597,7 +1607,13 @@ + if (!item) return NULL; + + result = strdup("usermanual); ++ if (config->usermanual[0] == '/') { ++ string_append(&result, "http://"); ++ string_append(&result, CGI_SITE_2_HOST); ++ string_append(&result, "/user-manual/"); ++ } else { ++ string_append(&result, config->usermanual); ++ } + string_append(&result, ACTIONS_HELP_PREFIX); + string_join (&result, string_toupper(item)); + string_append(&result, "\">"); +@@ -2171,7 +2187,11 @@ + if (!err) err = map(exports, "default-cgi", 1, html_encode(CGI_PREFIX), 0); + if (!err) err = map(exports, "menu", 1, make_menu(caller), 0); + if (!err) err = map(exports, "code-status", 1, CODE_STATUS, 1); +- if (!err) err = map(exports, "user-manual", 1, csp->config->usermanual ,1); ++ if (csp->config->usermanual[0] == '/') { ++ if (!err) err = map(exports, "user-manual", 1, "http://"CGI_SITE_2_HOST"/user-manual/" ,1); ++ } else { ++ if (!err) err = map(exports, "user-manual", 1, csp->config->usermanual ,1); ++ } + if (!err) err = map(exports, "actions-help-prefix", 1, ACTIONS_HELP_PREFIX ,1); + #ifdef FEATURE_TOGGLE + if (!err) err = map_conditional(exports, "enabled-display", global_toggle_state); +diff -urNad privoxy~/cgisimple.c privoxy/cgisimple.c +--- privoxy~/cgisimple.c 2006-02-11 23:44:26.000000000 +0100 ++++ privoxy/cgisimple.c 2006-02-11 23:44:34.000000000 +0100 +@@ -642,6 +642,89 @@ + return JB_ERR_OK; + + } ++/********************************************************************* ++ * ++ * Function : cgi_send_user_manual ++ * ++ * Description : CGI function that sends a user manual HTML file ++ * ++ * Parameters : ++ * 1 : csp = Current client state (buffers, headers, etc...) ++ * 2 : rsp = http_response data structure for output ++ * 3 : parameters = map of cgi parameters ++ * ++ * CGI Parameters : file=name.html, the mane of the HTML file ++ * (relative to user-manual from config) ++ * ++ * Returns : JB_ERR_OK on success ++ * JB_ERR_MEMORY on out-of-memory error. ++ * ++ *********************************************************************/ ++jb_err cgi_send_user_manual(struct client_state *csp, ++ struct http_response *rsp, ++ const struct map *parameters) ++{ ++ const char * filename; ++ char *full_path; ++ FILE *fp; ++ char buf[BUFFER_SIZE]; ++ ++ assert(csp); ++ assert(rsp); ++ assert(parameters); ++ ++ get_string_param(parameters, "file", &filename); ++ /* Check paramter for hack attempts */ ++ if (filename && strchr(filename, '/')) { ++ return JB_ERR_CGI_PARAMS; ++ } ++ if (filename && strstr(filename, "..")) { ++ return JB_ERR_CGI_PARAMS; ++ } ++ ++ full_path = make_path(csp->config->usermanual, ++ filename?filename:"index.html"); ++ if (full_path == NULL) ++ { ++ return JB_ERR_MEMORY; ++ } ++ ++ /* Allocate buffer */ ++ rsp->body = strdup(""); ++ if (rsp->body == NULL) ++ { ++ free(full_path); ++ return JB_ERR_MEMORY; ++ } ++ ++ /* Open user-manual file */ ++ if (NULL == (fp = fopen(full_path, "r"))) ++ { ++ log_error(LOG_LEVEL_ERROR, "Cannot open user-manual file %s: %E", full_path); ++ free(full_path); ++ free(rsp->body); ++ return JB_ERR_FILE; ++ } ++ free(full_path); ++ ++ /* Read file and write it out */ ++ while (fgets(buf, BUFFER_SIZE, fp)) ++ { ++ if (string_append(&rsp->body, buf)) ++ { ++ fclose(fp); ++ return JB_ERR_MEMORY; ++ } ++ } ++ fclose(fp); ++ ++ if (enlist(rsp->headers, "Content-Type: text/html")) ++ { ++ return JB_ERR_MEMORY; ++ } ++ ++ return JB_ERR_OK; ++} + + + /********************************************************************* +diff -urNad privoxy~/cgisimple.h privoxy/cgisimple.h +--- privoxy~/cgisimple.h 2006-02-11 23:44:26.000000000 +0100 ++++ privoxy/cgisimple.h 2006-02-11 23:44:34.000000000 +0100 +@@ -128,6 +128,9 @@ + extern jb_err cgi_send_stylesheet(struct client_state *csp, + struct http_response *rsp, + const struct map *parameters); ++extern jb_err cgi_send_user_manual(struct client_state *csp, ++ struct http_response *rsp, ++ const struct map *parameters); + + #ifdef FEATURE_GRACEFUL_TERMINATION + extern jb_err cgi_die (struct client_state *csp, +diff -urNad privoxy~/loadcfg.c privoxy/loadcfg.c +--- privoxy~/loadcfg.c 2006-02-11 23:44:26.000000000 +0100 ++++ privoxy/loadcfg.c 2006-02-11 23:44:34.000000000 +0100 +@@ -1579,7 +1579,13 @@ + * link to it's section in the user-manual + */ + buf = strdup("\n
usermanual); ++ if (config->usermanual[0] == '/') { ++ string_append(&buf, "http://"); ++ string_append(&buf, CGI_SITE_2_HOST); ++ string_append(&buf, "/user-manual/"); ++ } else { ++ string_append(&buf, config->usermanual); ++ } + string_append(&buf, CONFIG_HELP_PREFIX); + string_join (&buf, string_toupper(command)); + string_append(&buf, "\">"); diff --git a/debian/patches/02_linkcolor.dpatch b/debian/patches/02_linkcolor.dpatch new file mode 100644 index 00000000..160778d8 --- /dev/null +++ b/debian/patches/02_linkcolor.dpatch @@ -0,0 +1,19 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 02_linkcolor.dpatch by Roland Rosenfeld +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Run htmldoc with --linkcolor #0000ff and --no-embedfonts + +@DPATCH@ +diff -urNad privoxy~/utils/ldp_print/ldp_print privoxy/utils/ldp_print/ldp_print +--- privoxy~/utils/ldp_print/ldp_print 2006-02-05 22:03:58.000000000 +0100 ++++ privoxy/utils/ldp_print/ldp_print 2006-02-05 22:12:43.000000000 +0100 +@@ -54,7 +54,7 @@ + + my($cmd) = "htmldoc --size universal --bodyfont helvetica --fontsize 8 " . + "-t pdf -f ${fname_wo_ext}.pdf --firstpage p1 --titlefile title.html" . +- " body.html --footer c.1"; ++ " body.html --footer c.1 --linkcolor #0000ff --no-embedfonts"; + + # For postscript output; append onto the above cmd string: + # diff --git a/debian/patches/04_nomultiproxy.dpatch b/debian/patches/04_nomultiproxy.dpatch new file mode 100644 index 00000000..2a451a18 --- /dev/null +++ b/debian/patches/04_nomultiproxy.dpatch @@ -0,0 +1,59 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 04_multiproxy.dpatch by Roland Rosenfeld +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: emove comment from config file and FAQ, which points to list of +## DP: open proxies at multiproxy.org (Closes: #198953). + +@DPATCH@ +diff -urNad privoxy~/config privoxy/config +--- privoxy~/config 2006-02-05 16:23:12.000000000 +0100 ++++ privoxy/config 2006-02-05 16:25:45.000000000 +0100 +@@ -889,11 +889,10 @@ + # This feature allows routing of HTTP requests through a chain + # of multiple proxies. It can be used to better protect privacy + # and confidentiality when accessing specific domains by routing +-# requests to those domains through an anonymous public proxy (see +-# e.g. http://www.multiproxy.org/anon_list.htm) Or to use a caching +-# proxy to speed up browsing. Or chaining to a parent proxy may be +-# necessary because the machine that Privoxy runs on has no direct +-# Internet access. ++# requests to those domains through an anonymous public proxy ++# or to use a caching proxy to speed up browsing. Or chaining to ++# a parent proxy may be necessary because the machine that Privoxy ++# runs on has no direct Internet access. + # + # Also specified here are SOCKS proxies. Privoxy supports the SOCKS + # 4 and SOCKS 4A protocols. +diff -urNad privoxy~/doc/source/faq.sgml privoxy/doc/source/faq.sgml +--- privoxy~/doc/source/faq.sgml 2006-02-05 16:23:12.000000000 +0100 ++++ privoxy/doc/source/faq.sgml 2006-02-05 16:25:45.000000000 +0100 +@@ -1255,13 +1255,6 @@ + on (those suspicious) people with a more than average preference for privacy. + + +- You can find a list of anonymous public proxies at multiproxy.org and many +- more through Google. A particularly interesting project is the JAP service +- offered by the Technical University of Dresden (http://anon.inf.tu-dresden.de/index_en.html). +- +- + There is, however, even in the single-machine case the possibility to make the + server believe that your machine is in fact a shared proxy serving a whole big + LAN, and we are looking into that. +diff -urNad privoxy~/doc/source/p-config.sgml privoxy/doc/source/p-config.sgml +--- privoxy~/doc/source/p-config.sgml 2006-02-05 16:23:12.000000000 +0100 ++++ privoxy/doc/source/p-config.sgml 2006-02-05 16:25:45.000000000 +0100 +@@ -1519,9 +1519,8 @@ + multiple proxies. + It can be used to better protect privacy and confidentiality when + accessing specific domains by routing requests to those domains +- through an anonymous public proxy (see e.g. http://www.multiproxy.org/anon_list.htm) +- Or to use a caching proxy to speed up browsing. Or chaining to a parent ++ through an anonymous public proxy ++ or to use a caching proxy to speed up browsing. Or chaining to a parent + proxy may be necessary because the machine that Privoxy + runs on has no direct Internet access. + diff --git a/debian/patches/05_defaut_action.dpatch b/debian/patches/05_defaut_action.dpatch new file mode 100644 index 00000000..cf779e0b --- /dev/null +++ b/debian/patches/05_defaut_action.dpatch @@ -0,0 +1,37 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 05_default_action.dpatch by Roland Rosenfeld +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Serveral changes/additons to default.action. + +@DPATCH@ +diff -urNad privoxy~/default.action.master privoxy/default.action.master +--- privoxy~/default.action.master 2006-02-05 16:23:12.000000000 +0100 ++++ privoxy/default.action.master 2006-02-05 16:25:47.000000000 +0100 +@@ -1444,6 +1444,8 @@ + .microsoft.com + #MASTER# PROBLEM-URL: http://javabog.dk/ijk/ + javabog.dk/ijk/ ++#MASTER# PROBLEM-URL: http://validator.w3.org/ ++/valid- + + #---------------------------------------------------------------------------- + # These don't work without the referrer information: +@@ -1464,6 +1466,8 @@ + #MASTER# PROBLEM-URL: http://www.mandrakelinux.com/en/ftp.php3 + #MASTER# REMARKS: Link to download page breaks + www.mandrakelinux.com/en/ftp.php3 ++#MASTER# PROBLEM-URL: http://www.petitiononline.com/mod_perl/signed.cgi?eldred&2901 ++www.petitiononline.com/mod_perl/signed.cgi + + #---------------------------------------------------------------------------- + # These animated gifs are either useful or nice: +@@ -1601,6 +1605,8 @@ + cf.nbc4.com/ + #MASTER# PROBLEM-URL: http://www.hh.schule.de/ak/nt/ + www.hh.schule.de/ak/nt/ ++#MASTER# PROBLEM-URL: http://www.perl.com/language/newdocs/pod/perlop.html#Regexp_Quote_Like_Operators ++www.perl.com/language/newdocs/pod/ + + {+fast-redirects -block} + #MASTER# PROBLEM-URL: http://isbn.nu/0596001088/price/2.html diff --git a/debian/patches/06_8bit_manual.dpatch b/debian/patches/06_8bit_manual.dpatch new file mode 100644 index 00000000..3ddc5869 --- /dev/null +++ b/debian/patches/06_8bit_manual.dpatch @@ -0,0 +1,36 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 06_8bit_manual.dpatch by Roland Rosenfeld +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Stop converting 8bit chars in the documentation (#203697) + +@DPATCH@ +diff -urNad privoxy-dpatch~/doc/source/ldp.dsl.in privoxy-dpatch/doc/source/ldp.dsl.in +--- privoxy-dpatch~/doc/source/ldp.dsl.in 2006-02-05 16:17:43.000000000 +0100 ++++ privoxy-dpatch/doc/source/ldp.dsl.in 2006-02-05 16:17:46.000000000 +0100 +@@ -47,9 +47,9 @@ + + ;; this is necessary because right now jadetex does not understand + ;; symbolic entities, whereas things work well with numeric entities. +-(declare-characteristic preserve-sdata? +- "UNREGISTERED::James Clark//Characteristic::preserve-sdata?" +- #f) ++;(declare-characteristic preserve-sdata? ++; "UNREGISTERED::James Clark//Characteristic::preserve-sdata?" ++; #f) + + ;; put the legal notice in a separate file + (define %generate-legalnotice-link% +@@ -257,9 +257,9 @@ + + ;; this is necessary because right now jadetex does not understand + ;; symbolic entities, whereas things work well with numeric entities. +-(declare-characteristic preserve-sdata? +- "UNREGISTERED::James Clark//Characteristic::preserve-sdata?" +- #f) ++;(declare-characteristic preserve-sdata? ++; "UNREGISTERED::James Clark//Characteristic::preserve-sdata?" ++; #f) + + ;; put the legal notice in a separate file + (define %generate-legalnotice-link% diff --git a/debian/patches/07_typos.dpatch b/debian/patches/07_typos.dpatch new file mode 100644 index 00000000..32669d15 --- /dev/null +++ b/debian/patches/07_typos.dpatch @@ -0,0 +1,50 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 07_typos.dpatch by Roland Rosenfeld +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: s/persistant/persistent/, s/Januar/January/ in man page. +## DP: Several typos in user-manual fixed. + +@DPATCH@ +diff -urNad privoxy~/doc/source/privoxy-man-page.sgml privoxy/doc/source/privoxy-man-page.sgml +--- privoxy~/doc/source/privoxy-man-page.sgml 2006-02-05 22:03:58.000000000 +0100 ++++ privoxy/doc/source/privoxy-man-page.sgml 2006-02-11 18:32:40.000000000 +0100 +@@ -333,7 +333,7 @@ + + # Set personal exceptions to the policies in default.action ####### + +- # Sites where we want persistant cookies, so allow *all* cookies ++ # Sites where we want persistent cookies, so allow *all* cookies + {-crunch-cookies -session-cookies-only} + .redhat.com + .sun.com +diff -urNad privoxy~/doc/source/user-manual.sgml privoxy/doc/source/user-manual.sgml +--- privoxy~/doc/source/user-manual.sgml 2004-01-31 10:49:48.000000000 +0100 ++++ privoxy/doc/source/user-manual.sgml 2006-02-11 18:34:24.000000000 +0100 +@@ -368,7 +368,7 @@ + + + +- In order not to loose your personal changes and adjustments when updating ++ In order not to lose your personal changes and adjustments when updating + to the latest default.action file we strongly + recommend that you use user.action for your + customization of Privoxy. See the + To determine which actions apply to a request, the URL of the request is +- compared to all patterns in each action file file. Every time it matches, the list of ++ compared to all patterns in each action file file. Every time it matches, the list of + applicable actions for the URL is incrementally updated, using the heading + of the section in which the pattern is located. If multiple matches for + the same URL set the same action differently, the last match wins. If not, +@@ -5251,7 +5251,7 @@ + blocks of HTML code disappear when a specific symbol is set. We use this + for many purposes, one of them being to include the beta warning in all + our user interface (CGI) pages when Privoxy +- in in an alpha or beta development stage: ++ is in an alpha or beta development stage: + + + diff --git a/debian/patches/08_log_pthread.dpatch b/debian/patches/08_log_pthread.dpatch new file mode 100644 index 00000000..dc1b07f9 --- /dev/null +++ b/debian/patches/08_log_pthread.dpatch @@ -0,0 +1,259 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 08_log_pthread.dpatch by Jindrich Makovicka +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fix race conditions in log writing functions (Closes: #299662). + +@DPATCH@ +diff -urNad privoxy-dpatch~/errlog.c privoxy-dpatch/errlog.c +--- privoxy-dpatch~/errlog.c 2006-02-05 16:17:43.000000000 +0100 ++++ privoxy-dpatch/errlog.c 2006-02-05 16:18:06.000000000 +0100 +@@ -292,6 +292,30 @@ + static char *os2_socket_strerr(int errcode, char *tmp_buf); + #endif + ++#ifdef FEATURE_PTHREAD ++static inline void lock_logfile() ++{ ++ pthread_mutex_lock(&log_mutex); ++} ++static inline void unlock_logfile() ++{ ++ pthread_mutex_unlock(&log_mutex); ++} ++static inline void lock_loginit() ++{ ++ pthread_mutex_lock(&log_init_mutex); ++} ++static inline void unlock_loginit() ++{ ++ pthread_mutex_unlock(&log_init_mutex); ++} ++#else /* ! FEATURE_PTHREAD */ ++static inline void lock_logfile() {} ++static inline void unlock_logfile() {} ++static inline void lock_loginit() {} ++static inline void unlock_loginit() {} ++#endif ++ + /********************************************************************* + * + * Function : fatal_error +@@ -346,7 +370,7 @@ + { + FILE *fp; + +- /* FIXME RACE HAZARD: should start critical section error_log_use here */ ++ lock_loginit(); + + /* set the logging detail level */ + debug = debuglevel | LOG_LEVEL_MINIMUM; +@@ -354,9 +378,13 @@ + if ((logfp != NULL) && (logfp != stderr)) + { + log_error(LOG_LEVEL_INFO, "(Re-)Open logfile %s", logfname ? logfname : "none"); ++ lock_logfile(); + fclose(logfp); ++ } else { ++ lock_logfile(); + } + logfp = stderr; ++ unlock_logfile(); + + /* set the designated log file */ + if( logfname ) +@@ -369,7 +397,9 @@ + /* set logging to be completely unbuffered */ + setbuf(fp, NULL); + ++ lock_logfile(); + logfp = fp; ++ unlock_logfile(); + } + + log_error(LOG_LEVEL_INFO, "Privoxy version " VERSION); +@@ -378,7 +408,7 @@ + log_error(LOG_LEVEL_INFO, "Program name: %s", prog_name); + } + +- /* FIXME RACE HAZARD: should end critical section error_log_use here */ ++ unlock_loginit(); + + } /* init_error_log */ + +@@ -428,6 +458,9 @@ + return; + } + ++ /* protect the whole function because of the static buffer (outbuf) */ ++ lock_logfile(); ++ + /* FIXME get current thread id */ + #ifdef FEATURE_PTHREAD + this_thread = (long)pthread_self(); +@@ -480,41 +513,41 @@ + switch (loglevel) + { + case LOG_LEVEL_ERROR: +- outc = sprintf(outbuf, "Privoxy(%05ld) Error: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Error: ", this_thread); + break; + case LOG_LEVEL_FATAL: +- outc = sprintf(outbuf, "Privoxy(%05ld) Fatal error: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Fatal error: ", this_thread); + break; + case LOG_LEVEL_GPC: +- outc = sprintf(outbuf, "Privoxy(%05ld) Request: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Request: ", this_thread); + break; + case LOG_LEVEL_CONNECT: +- outc = sprintf(outbuf, "Privoxy(%05ld) Connect: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Connect: ", this_thread); + break; + case LOG_LEVEL_LOG: +- outc = sprintf(outbuf, "Privoxy(%05ld) Writing: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Writing: ", this_thread); + break; + case LOG_LEVEL_HEADER: +- outc = sprintf(outbuf, "Privoxy(%05ld) Header: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Header: ", this_thread); + break; + case LOG_LEVEL_INFO: +- outc = sprintf(outbuf, "Privoxy(%05ld) Info: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Info: ", this_thread); + break; + case LOG_LEVEL_RE_FILTER: +- outc = sprintf(outbuf, "Privoxy(%05ld) Re-Filter: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Re-Filter: ", this_thread); + break; + #ifdef FEATURE_FORCE_LOAD + case LOG_LEVEL_FORCE: +- outc = sprintf(outbuf, "Privoxy(%05ld) Force: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Force: ", this_thread); + break; + #endif /* def FEATURE_FORCE_LOAD */ + #ifdef FEATURE_FAST_REDIRECTS + case LOG_LEVEL_REDIRECTS: +- outc = sprintf(outbuf, "Privoxy(%05ld) Redirect: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Redirect: ", this_thread); + break; + #endif /* def FEATURE_FAST_REDIRECTS */ + case LOG_LEVEL_DEANIMATE: +- outc = sprintf(outbuf, "Privoxy(%05ld) Gif-Deanimate: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Gif-Deanimate: ", this_thread); + break; + case LOG_LEVEL_CLF: + outbuf = outbuf_save; +@@ -523,14 +556,14 @@ + break; + #ifdef FEATURE_KILL_POPUPS + case LOG_LEVEL_POPUPS: +- outc = sprintf(outbuf, "Privoxy(%05ld) Kill-Popups: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) Kill-Popups: ", this_thread); + break; + #endif /* def FEATURE_KILL_POPUPS */ + case LOG_LEVEL_CGI: +- outc = sprintf(outbuf, "Privoxy(%05ld) CGI: ", this_thread); ++ outc = sprintf(outbuf, "Privoxy(%08lx) CGI: ", this_thread); + break; + default: +- outc = sprintf(outbuf, "Privoxy(%05ld) UNKNOWN LOG TYPE(%d): ", this_thread, loglevel); ++ outc = sprintf(outbuf, "Privoxy(%08lx) UNKNOWN LOG TYPE(%d): ", this_thread, loglevel); + break; + } + +@@ -605,16 +638,14 @@ + else + { + /* Error */ +- sprintf(outbuf, "Privoxy(%ld) Error: log_error(): Bad format string:\n" ++ sprintf(outbuf, "Privoxy(%08lx) Error: log_error(): Bad format string:\n" + "Format = \"%s\"\n" + "Exiting.", this_thread, fmt); +- /* FIXME RACE HAZARD: should start critical section error_log_use here */ + if( !logfp ) + { + logfp = stderr; + } + fputs(outbuf, logfp); +- /* FIXME RACE HAZARD: should end critical section error_log_use here */ + fatal_error(outbuf); + /* Never get here */ + break; +@@ -768,16 +799,15 @@ + } + break; + default: +- sprintf(outbuf, "Privoxy(%ld) Error: log_error(): Bad format string:\n" ++ sprintf(outbuf, "Privoxy(%08lx) Error: log_error(): Bad format string:\n" + "Format = \"%s\"\n" + "Exiting.", this_thread, fmt); +- /* FIXME RACE HAZARD: should start critical section error_log_use here */ + if( !logfp ) + { + logfp = stderr; + } + fputs(outbuf_save, logfp); +- /* FIXME RACE HAZARD: should end critical section error_log_use here */ ++ unlock_logfile(); + fatal_error(outbuf_save); + /* Never get here */ + break; +@@ -814,8 +844,6 @@ + outbuf[outc] = '\0'; + } + +- /* FIXME RACE HAZARD: should start critical section error_log_use here */ +- + /* deal with glibc stupidity - it won't let you initialize logfp */ + if( !logfp ) + { +@@ -830,7 +858,7 @@ + /* Never get here */ + } + +- /* FIXME RACE HAZARD: should end critical section error_log_use here */ ++ unlock_logfile(); + + #if defined(_WIN32) && !defined(_WIN_CONSOLE) + /* Write to display */ +diff -urNad privoxy-dpatch~/jcc.c privoxy-dpatch/jcc.c +--- privoxy-dpatch~/jcc.c 2006-02-05 16:17:43.000000000 +0100 ++++ privoxy-dpatch/jcc.c 2006-02-05 16:18:06.000000000 +0100 +@@ -722,6 +722,10 @@ + pthread_mutex_t gethostbyaddr_mutex; + pthread_mutex_t gethostbyname_mutex; + #endif /* def OSX_DARWIN */ ++#ifdef FEATURE_PTHREAD ++pthread_mutex_t log_mutex; ++pthread_mutex_t log_init_mutex; ++#endif /* FEATURE_PTHREAD */ + + #if defined(unix) || defined(__EMX__) + const char *basedir = NULL; +@@ -1923,7 +1927,10 @@ + pthread_mutex_init(&gethostbyaddr_mutex,0); + pthread_mutex_init(&gethostbyname_mutex,0); + #endif /* def OSX_DARWIN */ +- ++#ifdef FEATURE_PTHREAD ++ pthread_mutex_init(&log_mutex,0); ++ pthread_mutex_init(&log_init_mutex,0); ++#endif /* FEATURE_PTHREAD */ + /* + * Unix signal handling + * +diff -urNad privoxy-dpatch~/jcc.h privoxy-dpatch/jcc.h +--- privoxy-dpatch~/jcc.h 2006-02-05 16:17:43.000000000 +0100 ++++ privoxy-dpatch/jcc.h 2006-02-05 16:18:06.000000000 +0100 +@@ -127,6 +127,10 @@ + extern pthread_mutex_t gethostbyaddr_mutex; + extern pthread_mutex_t gethostbyname_mutex; + #endif /* def OSX_DARWIN */ ++#ifdef FEATURE_PTHREAD ++extern pthread_mutex_t log_mutex; ++extern pthread_mutex_t log_init_mutex; ++#endif /* FEATURE_PTHREAD */ + + /* Functions */ + diff --git a/debian/patches/09_no_identity.dpatch b/debian/patches/09_no_identity.dpatch new file mode 100644 index 00000000..95129c7f --- /dev/null +++ b/debian/patches/09_no_identity.dpatch @@ -0,0 +1,38 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 09_no_identity.dpatch by Michael Shields +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: After dechunking remove the "chunked"-header instead of replacing it +## DP: by an "identity" header. (#318683). + +@DPATCH@ +diff -urNad privoxy~/parsers.c privoxy/parsers.c +--- privoxy~/parsers.c 2006-02-05 16:23:12.000000000 +0100 ++++ privoxy/parsers.c 2006-02-05 16:25:49.000000000 +0100 +@@ -871,8 +871,7 @@ + * + * Description : - Prohibit filtering (CT_TABOO) if transfer coding compresses + * - Raise the CSP_FLAG_CHUNKED flag if coding is "chunked" +- * - Change from "chunked" to "identity" if body was chunked +- * but has been de-chunked for filtering. ++ * - Remove if chunked body was de-chunked for filtering. + * + * Parameters : + * 1 : csp = Current client state (buffers, headers, etc...) +@@ -904,13 +903,13 @@ + + /* + * If the body was modified, it has been +- * de-chunked first, so adjust the header: ++ * de-chunked first, so remove the header. ++ * Don't use "identity" encoding, which was included in ++ * RFC 2616 by mistake (http://purl.org/NET/http-errata#identity). + */ + if (csp->flags & CSP_FLAG_MODIFIED) + { + freez(*header); +- *header = strdup("Transfer-Encoding: identity"); +- return (header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK; + } + } + diff --git a/debian/patches/10_backup_doc.dpatch b/debian/patches/10_backup_doc.dpatch new file mode 100644 index 00000000..c28a7dfe --- /dev/null +++ b/debian/patches/10_backup_doc.dpatch @@ -0,0 +1,21 @@ +#! /bin/sh -e +## 10_backup_doc.dpatch by Roland Rosenfeld +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Backup the upstream versions of all generated documentation + +dpatch_patch () +{ + tar cf debian/patched/doc.bak.tar \ + doc/source doc/text doc/webserver \ + INSTALL README AUTHORS privoxy.1 +} + +dpatch_unpatch () +{ + tar xf debian/patched/doc.bak.tar +} + +DPATCH_LIB_NO_DEFAULT=1 + +. /usr/share/dpatch/dpatch.lib.sh diff --git a/debian/patches/11_backup_autotools.dpatch b/debian/patches/11_backup_autotools.dpatch new file mode 100644 index 00000000..b3aa917f --- /dev/null +++ b/debian/patches/11_backup_autotools.dpatch @@ -0,0 +1,25 @@ +#! /bin/sh -e +## 11_backup_autotools.dpatch by Ralf Treinen +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: replace all config.{guess,sub} by the vesion installed in +## DP: /usr/share/misc + +dpatch_patch () +{ + find . -name config.guess -o -name config.sub \ + | tar cf debian/patched/config.guess+sub.tar -T - + find . -name config.guess \ + -exec ln -sf /usr/share/misc/config.guess '{}' \; + find . -name config.sub \ + -exec ln -sf /usr/share/misc/config.sub '{}' \; +} + +dpatch_unpatch () +{ + tar xf debian/patched/config.guess+sub.tar +} + +DPATCH_LIB_NO_DEFAULT=1 + +. /usr/share/dpatch/dpatch.lib.sh diff --git a/debian/patches/12_multiple-filters.dpatch b/debian/patches/12_multiple-filters.dpatch new file mode 100644 index 00000000..b926bcae --- /dev/null +++ b/debian/patches/12_multiple-filters.dpatch @@ -0,0 +1,755 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 12_multiple-filters.dpatch +## by David Schmidt +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Multiple filter file support + +@DPATCH@ +diff -urNad privoxy~/actions.c privoxy/actions.c +--- privoxy~/actions.c 2006-02-11 23:44:25.000000000 +0100 ++++ privoxy/actions.c 2006-02-11 23:44:37.000000000 +0100 +@@ -871,7 +871,7 @@ + } + + +-static struct file_list *current_actions_file[MAX_ACTION_FILES] = { ++static struct file_list *current_actions_file[MAX_AF_FILES] = { + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL + }; +@@ -894,7 +894,7 @@ + { + int i; + +- for (i = 0; i < MAX_ACTION_FILES; i++) ++ for (i = 0; i < MAX_AF_FILES; i++) + { + if (current_actions_file[i]) + { +@@ -979,7 +979,7 @@ + int i; + int result; + +- for (i = 0; i < MAX_ACTION_FILES; i++) ++ for (i = 0; i < MAX_AF_FILES; i++) + { + if (csp->config->actions_file[i]) + { +diff -urNad privoxy~/cgiedit.c privoxy/cgiedit.c +--- privoxy~/cgiedit.c 2006-02-11 23:44:25.000000000 +0100 ++++ privoxy/cgiedit.c 2006-02-11 23:44:37.000000000 +0100 +@@ -2560,7 +2560,7 @@ + } + + buttons = strdup(""); +- for (i = 0; i < MAX_ACTION_FILES; i++) ++ for (i = 0; i < MAX_AF_FILES; i++) + { + if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL)) + { +@@ -2958,8 +2958,8 @@ + struct file_line * cur_line; + unsigned line_number; + jb_err err; +- struct file_list *filter_file; + struct re_filterfile_spec *filter_group; ++ int i, have_filters = 0; + + if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS)) + { +@@ -3008,10 +3008,15 @@ + + if (!err) err = actions_to_radio(exports, cur_line->data.action); + +- filter_file = csp->rlist; +- filter_group = ((filter_file != NULL) ? filter_file->f : NULL); +- +- if (!err) err = map_conditional(exports, "any-filters-defined", (filter_group != NULL)); ++ for (i = 0; i < MAX_AF_FILES; i++) ++ { ++ if ((csp->rlist[i] != NULL) && (csp->rlist[i]->f != NULL)) ++ { ++ if (!err) err = map_conditional(exports, "any-filters-defined", 1); ++ have_filters = 1; ++ break; ++ } ++ } + + if (err) + { +@@ -3020,10 +3025,8 @@ + return err; + } + +- if (filter_group == NULL) +- { ++ if (0 == have_filters) + err = map(exports, "filter-params", 1, "", 1); +- } + else + { + /* We have some entries in the filter list */ +@@ -3047,69 +3050,76 @@ + + result = strdup(""); + +- for (;(!err) && (filter_group != NULL); filter_group = filter_group->next) ++ for (i = 0; i < MAX_AF_FILES; i++) + { +- char current_mode = 'x'; +- struct list_entry *filter_name; +- char * this_line; +- struct map *line_exports; +- char number[20]; +- +- filter_name = cur_line->data.action->multi_add[ACTION_MULTI_FILTER]->first; +- while ((filter_name != NULL) +- && (0 != strcmp(filter_group->name, filter_name->str))) +- { +- filter_name = filter_name->next; +- } +- +- if (filter_name != NULL) +- { +- current_mode = 'y'; +- } +- else ++ if ((csp->rlist[i] != NULL) && (csp->rlist[i]->f != NULL)) + { +- filter_name = cur_line->data.action->multi_remove[ACTION_MULTI_FILTER]->first; +- while ((filter_name != NULL) +- && (0 != strcmp(filter_group->name, filter_name->str))) +- { +- filter_name = filter_name->next; +- } +- if (filter_name != NULL) ++ filter_group = csp->rlist[i]->f; ++ for (;(!err) && (filter_group != NULL); filter_group = filter_group->next) + { +- current_mode = 'n'; +- } +- } ++ char current_mode = 'x'; ++ struct list_entry *filter_name; ++ char * this_line; ++ struct map *line_exports; ++ char number[20]; + +- /* Generate a unique serial number */ +- snprintf(number, sizeof(number), "%x", index++); +- number[sizeof(number) - 1] = '\0'; ++ filter_name = cur_line->data.action->multi_add[ACTION_MULTI_FILTER]->first; ++ while ((filter_name != NULL) ++ && (0 != strcmp(filter_group->name, filter_name->str))) ++ { ++ filter_name = filter_name->next; ++ } + +- line_exports = new_map(); +- if (line_exports == NULL) +- { +- err = JB_ERR_MEMORY; +- freez(result); +- } +- else +- { +- if (!err) err = map(line_exports, "index", 1, number, 1); +- if (!err) err = map(line_exports, "name", 1, filter_group->name, 1); +- if (!err) err = map(line_exports, "description", 1, filter_group->description, 1); +- if (!err) err = map_radio(line_exports, "this-filter", "ynx", current_mode); ++ if (filter_name != NULL) ++ { ++ current_mode = 'y'; ++ } ++ else ++ { ++ filter_name = cur_line->data.action->multi_remove[ACTION_MULTI_FILTER]->first; ++ log_error(LOG_LEVEL_CGI, "cgiedit: filter_group->name: [%s]",filter_group->name); ++ while ((filter_name != NULL) ++ && (0 != strcmp(filter_group->name, filter_name->str))) ++ { ++ filter_name = filter_name->next; ++ } ++ if (filter_name != NULL) ++ { ++ current_mode = 'n'; ++ } ++ } + +- this_line = NULL; +- if (!err) +- { +- this_line = strdup(filter_template); +- if (this_line == NULL) err = JB_ERR_MEMORY; +- } +- if (!err) err = template_fill(&this_line, line_exports); +- string_join(&result, this_line); ++ /* Generate a unique serial number */ ++ snprintf(number, sizeof(number), "%x", index++); ++ number[sizeof(number) - 1] = '\0'; + +- free_map(line_exports); ++ line_exports = new_map(); ++ if (line_exports == NULL) ++ { ++ err = JB_ERR_MEMORY; ++ freez(result); ++ } ++ else ++ { ++ if (!err) err = map(line_exports, "index", 1, number, 1); ++ if (!err) err = map(line_exports, "name", 1, filter_group->name, 1); ++ if (!err) err = map(line_exports, "description", 1, filter_group->description, 1); ++ if (!err) err = map_radio(line_exports, "this-filter", "ynx", current_mode); ++ ++ this_line = NULL; ++ if (!err) ++ { ++ this_line = strdup(filter_template); ++ if (this_line == NULL) err = JB_ERR_MEMORY; ++ } ++ if (!err) err = template_fill(&this_line, line_exports); ++ string_join(&result, this_line); ++ ++ free_map(line_exports); ++ } ++ } + } + } +- + freez(filter_template); + + if (!err) +@@ -3213,7 +3223,7 @@ + get_string_param(parameters, "p", &action_set_name); + if (action_set_name != NULL) + { +- for (index = 0; index < MAX_ACTION_FILES; index++) ++ for (index = 0; index < MAX_AF_FILES; index++) + { + if (((fl = csp->actions_list[index]) != NULL) && ((b = fl->f) != NULL)) + { +diff -urNad privoxy~/cgisimple.c privoxy/cgisimple.c +--- privoxy~/cgisimple.c 2006-02-11 23:44:37.000000000 +0100 ++++ privoxy/cgisimple.c 2006-02-11 23:44:37.000000000 +0100 +@@ -829,7 +829,7 @@ + switch (*(lookup(parameters, "file"))) + { + case 'a': +- if (!get_number_param(csp, parameters, "index", &i) && i < MAX_ACTION_FILES && csp->actions_list[i]) ++ if (!get_number_param(csp, parameters, "index", &i) && i < MAX_AF_FILES && csp->actions_list[i]) + { + filename = csp->actions_list[i]->filename; + file_description = "Actions File"; +@@ -837,9 +837,9 @@ + break; + + case 'f': +- if (csp->rlist) ++ if (!get_number_param(csp, parameters, "index", &i) && i < MAX_AF_FILES && csp->rlist[i]) + { +- filename = csp->rlist->filename; ++ filename = csp->rlist[i]->filename; + file_description = "Filter File"; + } + break; +@@ -954,7 +954,7 @@ + * FIXME: Shouldn't include hardwired HTML here, use line template instead! + */ + s = strdup(""); +- for (i = 0; i < MAX_ACTION_FILES; i++) ++ for (i = 0; i < MAX_AF_FILES; i++) + { + if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL)) + { +@@ -983,13 +983,29 @@ + if (!err) err = map(exports, "actions-filenames", 1, "
", 1); + } + +- if (csp->rlist) ++ /* ++ * List all re_filterfiles in use, together with view options. ++ * FIXME: Shouldn't include hardwired HTML here, use line template instead! ++ */ ++ s = strdup(""); ++ for (i = 0; i < MAX_AF_FILES; i++) + { +- if (!err) err = map(exports, "re-filter-filename", 1, html_encode(csp->rlist->filename), 0); ++ if (((fl = csp->rlist[i]) != NULL) && ((b = fl->f) != NULL)) ++ { ++ if (!err) err = string_append(&s, "\n"); ++ } ++ } ++ if (*s != '\0') ++ { ++ if (!err) err = map(exports, "re-filter-filename", 1, s, 0); + } + else + { +- if (!err) err = map(exports, "re-filter-filename", 1, "None specified", 1); ++ if (!err) err = map(exports, "re-filter-filename", 1, "", 1); + if (!err) err = map_block_killer(exports, "have-filterfile"); + } + +@@ -1206,7 +1222,7 @@ + + matches = strdup("
None specified
"); ++ if (!err) err = string_join(&s, html_encode(csp->rlist[i]->filename)); ++ snprintf(buf, 100, "View", i); ++ if (!err) err = string_append(&s, buf); ++ if (!err) err = string_append(&s, "
None specified
"); + +- for (i = 0; i < MAX_ACTION_FILES; i++) ++ for (i = 0; i < MAX_AF_FILES; i++) + { + if (NULL == csp->config->actions_file_short[i] + || !strcmp(csp->config->actions_file_short[i], "standard")) continue; +diff -urNad privoxy~/config privoxy/config +--- privoxy~/config 2006-02-11 23:44:37.000000000 +0100 ++++ privoxy/config 2006-02-11 23:44:37.000000000 +0100 +@@ -182,7 +182,7 @@ + # + # Specifies: + # +-# The filter file to use ++# The filter file(s) to use + # + # Type of value: + # +@@ -199,21 +199,23 @@ + # + # Notes: + # +-# The filter file contains content modification rules that use ++# The filter files contain content modification rules that use + # regular expressions. These rules permit powerful changes on the + # content of Web pages, e.g., you could disable your favorite + # JavaScript annoyances, re-write the actual displayed text, +-# or just have some fun replacing "Microsoft" with "MicroSuck" +-# wherever it appears on a Web page. ++# or just have some fun playing buzzword bingo with a web page. + # + # The +filter{name} actions rely on the relevant filter (name) +-# to be defined in the filter file! ++# to be defined in a filter file! + # + # A pre-defined filter file called default.filter that contains + # a bunch of handy filters for common problems is included in the + # distribution. See the section on the filter action for a list. +-# ++# When adding your own, it is recommended you add them to the ++# user.filter file. ++# + filterfile default.filter ++#filterfile user.filter + + # + # 1.5. logfile +diff -urNad privoxy~/filters.c privoxy/filters.c +--- privoxy~/filters.c 2006-02-11 23:44:25.000000000 +0100 ++++ privoxy/filters.c 2006-02-11 23:44:37.000000000 +0100 +@@ -1290,6 +1290,8 @@ + struct re_filterfile_spec *b; + struct list_entry *filtername; + ++ int i, found_filters = 0; ++ + /* + * Sanity first + */ +@@ -1299,10 +1301,26 @@ + } + size = csp->iob->eod - csp->iob->cur; + +- if ( ( NULL == (fl = csp->rlist) ) || ( NULL == fl->f) ) ++ /* ++ * Need to check the set of re_filterfiles... ++ */ ++ for (i = 0; i < MAX_AF_FILES; i++) ++ { ++ fl = csp->rlist[i]; ++ if (NULL != fl) ++ { ++ if (NULL != fl->f) ++ { ++ found_filters = 1; ++ break; ++ } ++ } ++ } ++ ++ if (0 == found_filters) + { + log_error(LOG_LEVEL_ERROR, "Unable to get current state of regexp filtering."); +- return(NULL); ++ return(NULL); + } + + /* +@@ -1320,6 +1338,11 @@ + csp->flags |= CSP_FLAG_MODIFIED; + } + ++ for (i = 0; i < MAX_AF_FILES; i++) ++ { ++ fl = csp->rlist[i]; ++ if ((NULL == fl) || (NULL == fl->f)) ++ break; + /* + * For all applying +filter actions, look if a filter by that + * name exists and if yes, execute it's pcrs_joblist on the +@@ -1356,6 +1379,7 @@ + } + } + } ++ } + + /* + * If there were no hits, destroy our copy and let +@@ -1536,7 +1560,7 @@ + + init_current_action(csp->action); + +- for (i = 0; i < MAX_ACTION_FILES; i++) ++ for (i = 0; i < MAX_AF_FILES; i++) + { + if (((fl = csp->actions_list[i]) == NULL) || ((b = fl->f) == NULL)) + { +diff -urNad privoxy~/loadcfg.c privoxy/loadcfg.c +--- privoxy~/loadcfg.c 2006-02-11 23:44:37.000000000 +0100 ++++ privoxy/loadcfg.c 2006-02-11 23:44:37.000000000 +0100 +@@ -65,7 +65,7 @@ + * - savearg now embeds option names in help links + * + * Revision 1.45 2002/04/24 02:11:54 oes +- * Jon's multiple AF patch: Allow up to MAX_ACTION_FILES actionsfile options ++ * Jon's multiple AF patch: Allow up to MAX_AF_FILES actionsfile options + * + * Revision 1.44 2002/04/08 20:37:13 swa + * fixed JB spelling +@@ -510,7 +510,7 @@ + freez(config->haddr); + freez(config->logfile); + +- for (i = 0; i < MAX_ACTION_FILES; i++) ++ for (i = 0; i < MAX_AF_FILES; i++) + { + freez(config->actions_file_short[i]); + freez(config->actions_file[i]); +@@ -530,7 +530,11 @@ + list_remove_all(config->trust_info); + #endif /* def FEATURE_TRUST */ + +- freez(config->re_filterfile); ++ for (i = 0; i < MAX_AF_FILES; i++) ++ { ++ freez(config->re_filterfile[i]); ++ } ++ + freez(config); + } + +@@ -694,16 +698,16 @@ + * *************************************************************************/ + case hash_actions_file : + i = 0; +- while ((i < MAX_ACTION_FILES) && (NULL != config->actions_file[i])) ++ while ((i < MAX_AF_FILES) && (NULL != config->actions_file[i])) + { + i++; + } + +- if (i >= MAX_ACTION_FILES) ++ if (i >= MAX_AF_FILES) + { + log_error(LOG_LEVEL_FATAL, "Too many 'actionsfile' directives in config file - limit is %d.\n" +- "(You can increase this limit by changing MAX_ACTION_FILES in project.h and recompiling).", +- MAX_ACTION_FILES); ++ "(You can increase this limit by changing MAX_AF_FILES in project.h and recompiling).", ++ MAX_AF_FILES); + } + config->actions_file_short[i] = strdup(arg); + p = malloc(strlen(arg) + sizeof(".action")); +@@ -860,15 +864,27 @@ + * In confdir by default. + * *************************************************************************/ + case hash_filterfile : +- if(config->re_filterfile) ++ i = 0; ++ while ((i < MAX_AF_FILES) && (NULL != config->re_filterfile[i])) + { +- log_error(LOG_LEVEL_ERROR, "Ignoring extraneous directive 'filterfile %s' " +- "in line %lu in configuration file (%s).", arg, linenum, configfile); +- string_append(&config->proxy_args, +- " WARNING: extraneous directive, ignored"); +- continue; ++ i++; + } +- config->re_filterfile = make_path(config->confdir, arg); ++ ++ if (i >= MAX_AF_FILES) ++ { ++ log_error(LOG_LEVEL_FATAL, "Too many 'filterfile' directives in config file - limit is %d.\n" ++ "(You can increase this limit by changing MAX_AF_FILES in project.h and recompiling).", ++ MAX_AF_FILES); ++ } ++ config->re_filterfile_short[i] = strdup(arg); ++ p = malloc(strlen(arg)); ++ if (p == NULL) ++ { ++ log_error(LOG_LEVEL_FATAL, "Out of memory"); ++ } ++ strcpy(p, arg); ++ config->re_filterfile[i] = make_path(config->confdir, p); ++ free(p); + continue; + + /* ************************************************************************* +diff -urNad privoxy~/loaders.c privoxy/loaders.c +--- privoxy~/loaders.c 2006-02-11 23:44:25.000000000 +0100 ++++ privoxy/loaders.c 2006-02-11 23:44:37.000000000 +0100 +@@ -329,7 +329,12 @@ + static struct file_list *current_trustfile = NULL; + #endif /* def FEATURE_TRUST */ + +-static struct file_list *current_re_filterfile = NULL; ++static int load_one_re_filterfile(struct client_state *csp, int fileid); ++ ++static struct file_list *current_re_filterfile[MAX_AF_FILES] = { ++ NULL, NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, NULL ++}; + + + +@@ -388,7 +393,7 @@ + /* + * Actions files + */ +- for (i = 0; i < MAX_ACTION_FILES; i++) ++ for (i = 0; i < MAX_AF_FILES; i++) + { + if (csp->actions_list[i]) + { +@@ -397,11 +402,14 @@ + } + + /* +- * Filter file ++ * Filter files + */ +- if (csp->rlist) ++ for (i = 0; i < MAX_AF_FILES; i++) + { +- csp->rlist->active = 1; ++ if (csp->rlist[i]) ++ { ++ csp->rlist[i]->active = 1; ++ } + } + + /* +@@ -1247,10 +1255,15 @@ + *********************************************************************/ + void unload_current_re_filterfile(void) + { +- if (current_re_filterfile) ++ int i; ++ ++ for (i = 0; i < MAX_AF_FILES; i++) + { +- current_re_filterfile->unloader = unload_re_filterfile; +- current_re_filterfile = NULL; ++ if (current_re_filterfile[i]) ++ { ++ current_re_filterfile[i]->unloader = unload_re_filterfile; ++ current_re_filterfile[i] = NULL; ++ } + } + } + #endif +@@ -1273,6 +1286,46 @@ + *********************************************************************/ + int load_re_filterfile(struct client_state *csp) + { ++ int i; ++ int result; ++ ++ for (i = 0; i < MAX_AF_FILES; i++) ++ { ++ if (csp->config->re_filterfile[i]) ++ { ++ result = load_one_re_filterfile(csp, i); ++ if (result) ++ { ++ return result; ++ } ++ } ++ else if (current_re_filterfile[i]) ++ { ++ current_re_filterfile[i]->unloader = unload_re_filterfile; ++ current_re_filterfile[i] = NULL; ++ } ++ } ++ ++ return 0; ++} ++ ++/********************************************************************* ++ * ++ * Function : load_one_re_filterfile ++ * ++ * Description : Load a re_filterfile. ++ * Generate a chained list of re_filterfile_spec's from ++ * the "FILTER: " blocks, compiling all their substitutions ++ * into chained lists of pcrs_job structs. ++ * ++ * Parameters : ++ * 1 : csp = Current client state (buffers, headers, etc...) ++ * ++ * Returns : 0 => Ok, everything else is an error. ++ * ++ *********************************************************************/ ++int load_one_re_filterfile(struct client_state *csp, int fileid) ++{ + FILE *fp; + + struct re_filterfile_spec *new_bl, *bl = NULL; +@@ -1286,11 +1339,12 @@ + /* + * No need to reload if unchanged + */ +- if (!check_file_changed(current_re_filterfile, csp->config->re_filterfile, &fs)) ++ log_error(LOG_LEVEL_RE_FILTER, "load_one_re_filterfile: checking: %s\n",csp->config->re_filterfile[fileid]); ++ if (!check_file_changed(current_re_filterfile[fileid], csp->config->re_filterfile[fileid], &fs)) + { + if (csp) + { +- csp->rlist = current_re_filterfile; ++ csp->rlist[fileid] = current_re_filterfile[fileid]; + } + return(0); + } +@@ -1302,7 +1356,7 @@ + /* + * Open the file or fail + */ +- if ((fp = fopen(csp->config->re_filterfile, "r")) == NULL) ++ if ((fp = fopen(csp->config->re_filterfile[fileid], "r")) == NULL) + { + goto load_re_filterfile_error; + } +@@ -1397,9 +1451,9 @@ + /* + * Schedule the now-obsolete old data for unloading + */ +- if ( NULL != current_re_filterfile ) ++ if ( NULL != current_re_filterfile[fileid] ) + { +- current_re_filterfile->unloader = unload_re_filterfile; ++ current_re_filterfile[fileid]->unloader = unload_re_filterfile; + } + + /* +@@ -1407,18 +1461,18 @@ + */ + fs->next = files->next; + files->next = fs; +- current_re_filterfile = fs; ++ current_re_filterfile[fileid] = fs; + + if (csp) + { +- csp->rlist = fs; ++ csp->rlist[fileid] = fs; + } + + return( 0 ); + + load_re_filterfile_error: + log_error(LOG_LEVEL_FATAL, "can't load re_filterfile '%s': %E", +- csp->config->re_filterfile); ++ csp->config->re_filterfile[fileid]); + return(-1); + + } +diff -urNad privoxy~/project.h privoxy/project.h +--- privoxy~/project.h 2006-02-11 23:44:25.000000000 +0100 ++++ privoxy/project.h 2006-02-11 23:44:37.000000000 +0100 +@@ -1010,10 +1010,10 @@ + #define RC_FLAG_BLOCKED 0x20 + + /** +- * Maximum number of actions files. This limit is arbitrary - it's just used ++ * Maximum number of actions/filter files. This limit is arbitrary - it's just used + * to size an array. + */ +-#define MAX_ACTION_FILES 10 ++#define MAX_AF_FILES 10 + + /** + * The state of a Privoxy processing thread. +@@ -1069,10 +1069,10 @@ + char *x_forwarded; + + /** Actions files associated with this client */ +- struct file_list *actions_list[MAX_ACTION_FILES]; ++ struct file_list *actions_list[MAX_AF_FILES]; + +- /** pcrs job file. */ +- struct file_list *rlist; ++ /** pcrs job files. */ ++ struct file_list *rlist[MAX_AF_FILES]; + + /** Length after content modification. */ + size_t content_length; +@@ -1328,10 +1328,10 @@ + const char *logdir; + + /** The full paths to the actions files. */ +- const char *actions_file[MAX_ACTION_FILES]; ++ const char *actions_file[MAX_AF_FILES]; + + /** The short names of the actions files. */ +- const char *actions_file_short[MAX_ACTION_FILES]; ++ const char *actions_file_short[MAX_AF_FILES]; + + /** The administrator's email address */ + char *admin_address; +@@ -1342,8 +1342,11 @@ + /** URL to the user manual (on our website or local copy) */ + char *usermanual; + +- /** The file name of the pcre filter file */ +- const char *re_filterfile; ++ /** The file names of the pcre filter files. */ ++ const char *re_filterfile[MAX_AF_FILES]; ++ ++ /** The short names of the pcre filter files. */ ++ const char *re_filterfile_short[MAX_AF_FILES]; + + #ifdef FEATURE_COOKIE_JAR + +diff -urNad privoxy~/templates/show-status privoxy/templates/show-status +--- privoxy~/templates/show-status 2006-02-11 23:44:25.000000000 +0100 ++++ privoxy/templates/show-status 2006-02-11 23:44:37.000000000 +0100 +@@ -149,17 +149,12 @@ + + @actions-filenames@ + +- ++ + + + +- + + + diff --git a/debian/patches/13_memory.dpatch b/debian/patches/13_memory.dpatch new file mode 100644 index 00000000..40d7f553 --- /dev/null +++ b/debian/patches/13_memory.dpatch @@ -0,0 +1,91 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 13_memory.dpatch by David Schmidt +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: A few memory leaks plugged (mostly on error paths) +## DP: Removing a double free +## DP: Don't forget to malloc space for the null terminator... + +@DPATCH@ +#diff -urNad privoxy~/cgisimple.c privoxy/cgisimple.c +#--- privoxy~/cgisimple.c 2006-02-11 18:55:17.000000000 +0100 +#+++ privoxy/cgisimple.c 2006-02-11 18:55:27.000000000 +0100 +#@@ -880,12 +880,13 @@ +# string_join (&s, html_encode(buf)); +# } +# fclose(fp); +#- +# if (map(exports, "contents", 1, s, 0)) +# { +#+ freez(s); +# free_map(exports); +# return JB_ERR_MEMORY; +# } +#+ freez(s); +# } +# +# return template_fill_for_cgi(csp, "show-status-file", exports, rsp); +#@@ -898,7 +899,7 @@ +# if (!err) err = string_append(&s, " "); +# } +# if (!err) err = map(exports, "invocation", 1, s, 0); +#- +#+ freez(s); +# if (!err) err = map(exports, "options", 1, csp->config->proxy_args, 1); +# if (!err) err = show_defines(exports); +# +diff -urNad privoxy~/filters.c privoxy/filters.c +--- privoxy~/filters.c 2006-02-11 18:55:17.000000000 +0100 ++++ privoxy/filters.c 2006-02-11 18:55:27.000000000 +0100 +@@ -966,6 +966,7 @@ + string_append(&p, buf); + } + err = map(exports, "trusted-referrers", 1, p, 0); ++ freez(p); + + if (err) + { +@@ -988,6 +989,7 @@ + string_append(&p, buf); + } + err = map(exports, "trust-info", 1, p, 0); ++ freez(p); + } + else + { +diff -urNad privoxy~/jbsockets.c privoxy/jbsockets.c +--- privoxy~/jbsockets.c 2004-01-31 10:27:50.000000000 +0100 ++++ privoxy/jbsockets.c 2006-02-11 18:55:27.000000000 +0100 +@@ -434,7 +434,7 @@ + return 0; + } + +- if (len < 0) ++ if (len < 0) /* constant condition - size_t isn't ever negative */ + { + return 1; + } +diff -urNad privoxy~/loadcfg.c privoxy/loadcfg.c +--- privoxy~/loadcfg.c 2006-02-11 18:55:17.000000000 +0100 ++++ privoxy/loadcfg.c 2006-02-11 18:55:37.000000000 +0100 +@@ -877,7 +877,7 @@ + MAX_AF_FILES); + } + config->re_filterfile_short[i] = strdup(arg); +- p = malloc(strlen(arg)); ++ p = malloc(strlen(arg) + 1); + if (p == NULL) + { + log_error(LOG_LEVEL_FATAL, "Out of memory"); +diff -urNad privoxy~/pcrs.c privoxy/pcrs.c +--- privoxy~/pcrs.c 2004-01-31 10:27:51.000000000 +0100 ++++ privoxy/pcrs.c 2006-02-11 18:55:27.000000000 +0100 +@@ -744,7 +744,7 @@ + int pcrs_execute_list(pcrs_job *joblist, char *subject, size_t subject_length, char **result, size_t *result_length) + { + pcrs_job *job; +- char *old, *new; ++ char *old, *new = NULL; + int hits, total_hits; + + old = subject; diff --git a/debian/patches/14_config.dpatch b/debian/patches/14_config.dpatch new file mode 100644 index 00000000..b1b9695f --- /dev/null +++ b/debian/patches/14_config.dpatch @@ -0,0 +1,72 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 14_config.dpatch by Roland Rosenfeld +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Several Debian specific changes to config file + +@DPATCH@ +diff -urNad privoxy~/config privoxy/config +--- privoxy~/config 2006-02-11 20:29:59.000000000 +0100 ++++ privoxy/config 2006-02-11 20:30:28.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Sample Configuration File for Privoxy v3.0.x ++# Sample Configuration File for Privoxy + # + # Copyright (C) 2001-2004 Privoxy Developers http://privoxy.org + # +@@ -104,7 +104,7 @@ + # flat, except for confdir/templates, where the HTML templates + # for CGI output reside (e.g. Privoxy's 404 error page). + # +-confdir . ++confdir /etc/privoxy + + # + # 1.2. logdir +@@ -131,7 +131,7 @@ + # + # No trailing "/", please + # +-logdir . ++logdir /var/log/privoxy + + # + # 1.3. actionsfile +@@ -406,7 +406,7 @@ + # If set, this option should be the first option in the config + # file, because it is used while the config file is being read. + # +-#user-manual http://www.privoxy.org/user-manual/ ++user-manual /usr/share/doc/privoxy/user-manual + + # + # 2.2. trust-info-url +@@ -442,8 +442,8 @@ + # don't end up locked out from the information on why they were + # locked out in the first place! + # +-trust-info-url http://www.example.com/why_we_block.html +-trust-info-url http://www.example.com/what_we_allow.html ++#trust-info-url http://www.example.com/why_we_block.html ++#trust-info-url http://www.example.com/what_we_allow.html + + # + # 2.3. admin-address +@@ -730,7 +730,7 @@ + # Note that you must have compiled Privoxy with support for this + # feature, otherwise this option has no effect. + # +-enable-remote-toggle 1 ++enable-remote-toggle 0 + + # + # 4.4. enable-edit-actions +@@ -763,7 +763,7 @@ + # Note that you must have compiled Privoxy with support for this + # feature, otherwise this option has no effect. + # +-enable-edit-actions 1 ++enable-edit-actions 0 + + # + # 4.5. ACLs: permit-access and deny-access diff --git a/debian/patches/15_mansection8.dpatch b/debian/patches/15_mansection8.dpatch new file mode 100644 index 00000000..8311c667 --- /dev/null +++ b/debian/patches/15_mansection8.dpatch @@ -0,0 +1,96 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 15_mansection8.dpatch by Roland Rosenfeld +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Move man page from man section 1 to man section 8. + +@DPATCH@ +diff -urNad privoxy~/doc/source/privoxy-man-page.sgml privoxy/doc/source/privoxy-man-page.sgml +--- privoxy~/doc/source/privoxy-man-page.sgml 2006-02-11 23:44:40.000000000 +0100 ++++ privoxy/doc/source/privoxy-man-page.sgml 2006-02-11 23:44:40.000000000 +0100 +@@ -57,7 +57,7 @@ + + + privoxy +- 1 ++ 8 + + Privoxy &p-version; + +diff -urNad privoxy~/GNUmakefile.in privoxy/GNUmakefile.in +--- privoxy~/GNUmakefile.in 2006-02-11 23:44:25.000000000 +0100 ++++ privoxy/GNUmakefile.in 2006-02-11 23:44:40.000000000 +0100 +@@ -177,7 +177,7 @@ + `find doc/text/ -type f | grep -v "CVS" | grep -v "\.\#" | grep -v ".*~" | grep -v ".cvsignore" | grep -v "TAGS"` \ + `find doc/webserver/ -name "*.html" | grep -v "\(webserver\|team\)\/index\.html"` \ + `find doc/webserver/ -name "*.css"` \ +- privoxy.1 \ ++ privoxy.8 \ + doc/pdf/*.pdf + + ############################################################################# +@@ -520,7 +520,7 @@ + $(RM) /etc/init.d/privoxy + $(RM) /usr/sbin/privoxy + $(RM) /usr/sbin/rcprivoxy +- $(RM) /usr/share/man/man1/privoxy.1.gz ++ $(RM) /usr/share/man/man1/privoxy.8.gz + + ############################################################################# + # generic distribution +@@ -692,7 +692,7 @@ + $(RM) doc/man/* doc/webserver/man-page/*.html + ifneq ($(MAN2HTML),false) + $(ECHO) "Privoxy Man page

NAME

" > doc/webserver/man-page/privoxy-man-page.html +- man ./privoxy.1 | $(MAN2HTML) -bare >> doc/webserver/man-page/privoxy-man-page.html ++ man ./privoxy.8 | $(MAN2HTML) -bare >> doc/webserver/man-page/privoxy-man-page.html + $(ECHO) "" >> doc/webserver/man-page/privoxy-man-page.html + else + $(MAKE) groff2html +@@ -704,14 +704,14 @@ + man: dok-release + mkdir -p doc/source/temp && cd doc/source/temp && $(RM) * ;\ + nsgmls ../privoxy-man-page.sgml | sgmlspl ../../../utils/docbook2man/docbook2man-spec.pl &&\ +- perl -pi.bak -e 's/ //; s/\[ /\[/g' privoxy.1 ;\ +- $(DB) ../privoxy-man-page.sgml && $(MV) -f privoxy.1 ../../../privoxy.1 ++ perl -pi.bak -e 's/ //; s/\[ /\[/g' privoxy.8 ;\ ++ $(DB) ../privoxy-man-page.sgml && $(MV) -f privoxy.8 ../../../privoxy.8 + + # For those with man2html ala RH7s. + man2html: + mkdir -p doc/webserver/man-page + ifneq ($(MAN2HTML),false) +- $(MAN2HTML) privoxy.1 |grep -v "^Content-type" > tmp.html ++ $(MAN2HTML) privoxy.8 |grep -v "^Content-type" > tmp.html + $(PERL) -pi.bak -e 's/
//; s//man2html/' tmp.html + $(PERL) -pi.bak -e 's/(<\/HEAD>)/<\/HEAD>/' tmp.html + # Twice because my version of man2html is pulling in commas and periods in URLs. +@@ -726,7 +726,7 @@ + + # Otherwise we get plain groff conversion. + groff2html: +- $(G2H_CMD) ./privoxy.1 | $(SED) -e 's@@@' > doc/webserver/man-page/privoxy-man-page.html ++ $(G2H_CMD) ./privoxy.8 | $(SED) -e 's@@@' > doc/webserver/man-page/privoxy-man-page.html + + + # readme page and INSTALL file +@@ -1122,8 +1122,8 @@ + $(INSTALL) $(INSTALL_T) $(DOK_WEB)/p_doc.css $$DOC;\ + fi + @# Not all platforms support gzipped man pages. +- @$(ECHO) Installing man page to $(MAN_DEST)/privoxy.1 +- -$(INSTALL) $(INSTALL_T) privoxy.1 $(MAN_DEST)/privoxy.1 ++ @$(ECHO) Installing man page to $(MAN_DEST)/privoxy.8 ++ -$(INSTALL) $(INSTALL_T) privoxy.8 $(MAN_DEST)/privoxy.8 + + @# Change the config file default directories according to the configured ones + @$(ECHO) Rewriting config for this installation +@@ -1273,7 +1273,7 @@ + + @# man page and docs + @$(ECHO) Removing $(PROGRAM) docs +- -$(RM) $(MAN_DEST)/privoxy.1* ++ -$(RM) $(MAN_DEST)/privoxy.8* + -$(RM) -r $(DOC_DEST) || $(RM) -r $(prefix)/doc/privoxy + + @# Log and jarfile and pidfile diff --git a/debian/postinst b/debian/postinst index 1c1f1264..5bc965bc 100644 --- a/debian/postinst +++ b/debian/postinst @@ -25,8 +25,15 @@ set -e case "$1" in configure) - adduser --quiet --system --home /etc/privoxy --ingroup nogroup \ - --disabled-password privoxy + if ! adduser --quiet --system --home /etc/privoxy --no-create-home \ + --ingroup nogroup --disabled-password privoxy + then + # user privoxy seems to exist + # -> remove him before newly adding him. + deluser --quiet privoxy + adduser --quiet --system --home /etc/privoxy --no-create-home \ + --ingroup nogroup --disabled-password privoxy + fi chown -R privoxy.adm /var/log/privoxy chmod 750 /var/log/privoxy chown privoxy /etc/privoxy/*.action /etc/privoxy/trust diff --git a/debian/postrm b/debian/postrm index b3cb9f7e..b79c8ec6 100644 --- a/debian/postrm +++ b/debian/postrm @@ -20,7 +20,7 @@ set -e case "$1" in purge) - userdel privoxy || echo "WARNING: Problem removing user privoxy." + deluser --quiet privoxy rm -rf /var/log/privoxy /etc/privoxy ;; diff --git a/debian/rules b/debian/rules index 5490b5db..815f2aeb 100755 --- a/debian/rules +++ b/debian/rules @@ -1,6 +1,8 @@ #!/usr/bin/make -f +# +# (C) 2002-2006 Roland Rosenfeld , based on # Sample debian/rules that uses debhelper. -# GNU copyright 1997 to 1999 by Joey Hess. +# This file is public domain software, originally written by Joey Hess. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 @@ -19,72 +21,54 @@ else OPTIMIZE=-O2 endif -configure: configure-stamp -configure-stamp: +build: build-stamp +build-stamp: patch-stamp dh_testdir autoheader autoconf env CFLAGS="$(OPTIMIZE) -g" \ ./configure --prefix=/usr --sysconfdir=/etc \ - --mandir=/usr/share/man $(WITHDEBUG) - - touch configure-stamp - -build: build-stamp -build-stamp: configure-stamp - dh_testdir - + --mandir=/usr/share/man $(WITHDEBUG) \ + --with-docbook=/usr/share/sgml/docbook/stylesheet/dsssl/modular $(MAKE) - -# backup formatted upstream documentation: - for x in text webserver pdf; do \ - if [ ! -d doc/$$x.dist ]; then \ - cp -a doc/$$x doc/$$x.dist; \ - fi; \ +# create missing doc/pdf directory if necessary: + [ -d doc/pdf ] || mkdir doc/pdf + $(MAKE) dok-pdf + $(MAKE) dok + env -u LANG $(MAKE) man + $(MAKE) man2html + +# remove trailing whitespaces: + for x in developer-manual user-manual faq; do \ + sed -e 's/[ ]*$$//' < doc/text/$$x.txt > doc/text/$$x.nws;\ + mv -f doc/text/$$x.nws doc/text/$$x.txt; \ done - for x in INSTALL README privoxy.1; do \ - if [ ! -f $$x.dist ]; then \ - cp -a $$x $$x.dist; \ - fi; \ - done - - (cd doc/source; $(MAKE) pdf) - (cd doc/source; $(MAKE) all) touch build-stamp -clean: +clean: clean1 unpatch +clean1: dh_testdir dh_testroot rm -f build-stamp configure-stamp -$(MAKE) clean -$(MAKE) distclean - rm -f privoxy - rm -f configure config.h GNUmakefile - rm -f doc/source/ldp.dsl + rm -f configure config.h GNUmakefile + rm -f privoxy.8 + rm -rf obj rm -f ActivityConsole.jar rm -f src/java/org/privoxy/activityconsole/*.class -# restore formatted upstream documentation: - for x in text webserver pdf; do \ - if [ -d doc/$$x.dist ]; then \ - rm -rf doc/$$x; \ - mv doc/$$x.dist doc/$$x; \ - fi; \ - done - for x in INSTALL README privoxy.1; do \ - if [ -f $$x.dist ]; then \ - rm -f $$x; \ - mv $$x.dist $$x; \ - fi; \ - done + rm -f doc/source/ldp.dsl + rm -rf doc/source/temp + rm -rf doc/pdf dh_clean -install: build +install: build-stamp dh_testdir dh_testroot dh_clean -k @@ -92,14 +76,7 @@ install: build install -m 0755 privoxy $(DEBDIR)/usr/sbin/privoxy - sed -e 's/^\(\(trust\|proxy\)-info-url\|admin-address\)/#\1/' \ - -e 's/^\(enable-\(edit-actions\|remote-toggle\)\)[ ]*1/\1 0/' \ - -e 's#^confdir .*#confdir /etc/privoxy#' \ - -e 's#^logdir .*#logdir /var/log/privoxy#' \ - -e 's%^#\(user-manual\).*%\1 /usr/share/doc/privoxy/user-manual%' \ - -e 's/\(Sample Configuration File for Privoxy\).*/\1/' \ - -e 's/Id: config,v.*/Id: config,v $$/' \ - < config > $(DEBDIR)/etc/privoxy/config + install -m 644 config $(DEBDIR)/etc/privoxy/config install -m 0644 default.action $(DEBDIR)/etc/privoxy/default.action install -m 0644 standard.action $(DEBDIR)/etc/privoxy/standard.action install -m 0644 user.action $(DEBDIR)/etc/privoxy/user.action @@ -110,13 +87,23 @@ install: build rm -f $(DEBDIR)/etc/privoxy/templates/*~ rm -rf $(DEBDIR)/etc/privoxy/templates/CVS +# Remove CVS tags and trailing spaces from config files: + find $(DEBDIR)/etc/privoxy -type f \ + | xargs grep -l '\$$[A-Z][^$$]*:[^$$]*\$$' \ + | while read f; do \ + sed -e 's/\$$\(Id: [^$$]*,v\)[^$$]*\$$/\1/' \ + -e 's/\$$\(Source: [^$$]*\)\$$/\1/' \ + -e 's/\$$\(Log: [^$$]*\)\$$/\1/' \ + -e 's/ *$$//' < $$f > $$f.new; \ + mv -f $$f.new $$f; \ + done # Build architecture-independent files here. -binary-indep: build install +binary-indep: build-stamp install # We have nothing to do by default. # Build architecture-dependent files here. -binary-arch: build install +binary-arch: build-stamp install dh_testdir dh_testroot # dh_installdebconf @@ -147,5 +134,17 @@ binary-arch: build install dh_md5sums dh_builddeb +patch: patch-stamp +patch-stamp: + dpatch apply-all + touch patch-stamp + #dpatch call-all -a=pkg-info >patch-stamp + +unpatch: + dpatch deapply-all + rm -rf patch-stamp debian/patched + binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install configure + +.PHONY: build clean binary-indep binary-arch binary install patch unpatch \ + clean1 diff --git a/debian/watch b/debian/watch new file mode 100644 index 00000000..abc7f3f3 --- /dev/null +++ b/debian/watch @@ -0,0 +1,8 @@ +# See uscan(1) for format + +# Compulsory line, this is a version 3 file +version=3 + +#http://sourceforge.net/project/showfiles.php?group_id=11118 http://prdownloads.sourceforge.net/ijbswa/privoxy-(.*)-stable-src.tar.gz\?download + +http://prdownloads.sourceforge.net/ijbswa/privoxy-(.*)-stable-src.tar.gz diff --git a/default.action.master b/default.action.master index a218c6d6..a22f606f 100644 --- a/default.action.master +++ b/default.action.master @@ -2,18 +2,14 @@ # # File : $Source: /cvsroot/ijbswa/current/default.action.master,v $ # -# $Id: default.action.master,v 1.8 2003/09/22 00:33:01 david__schmidt Exp $ +# $Id: default.action.master,v 1.1.2.39 2004/10/03 14:03:33 david__schmidt Exp $ # # Purpose : Default actions file, see # http://www.privoxy.org/user-manual/actions-file.html # -# Copyright : Written by and Copyright +# Copyright : Written by and Copyright (C) 2001 - 2004 the # Privoxy team. http://www.privoxy.org/ # -# Based on the Internet Junkbuster originally written -# by and Copyright (C) 1997 Anonymous Coders and -# Junkbusters Corporation. http://www.junkbusters.com -# # Note: Updated versions of this file will be made available from time # to time. Check http://sourceforge.net/project/showfiles.php?group_id=11118 # for updates and/or subscribe to the announce mailing list @@ -50,10 +46,13 @@ # Syntax ############################################################################# # +# A much better explanation can be found in the user manual which is +# part of the distribution and can be found at http://www.privoxy.org/user-manual +# # To determine which actions apply to a request, the URL of the request is # compared to all patterns in this file. Every time it matches, the list of # applicable actions for this URL is incrementally updated. You can trace -# this process by visiting http://i.j.b/show-url-info +# this process by visiting http://config.privoxy.org/show-url-info # # There are 4 types of lines in this file: comments (like this line), # actions, aliases and patterns, all of which are explained below. @@ -70,7 +69,7 @@ # can be left out: # # www.example.com -# is a domain-only pattern and will match any request to www.yahoo.com +# is a domain-only pattern and will match any request to www.example.com # # www.example.com/ # means exactly the same (but is slightly less efficient) @@ -230,21 +229,26 @@ # Filters predefined in the supplied default.action include: # # js-annoyances: Get rid of particularly annoying JavaScript abuse +# js-events: Kill all JS event bindings (Radically destructive! Use only on real suckers) # html-annoyances: Get rid of particularly annoying HTML abuse # content-cookies: Kill cookies that come in the HTML or JS content -# webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking) -# popups: Kill all popups in JS and HTML -# frameset-borders: Give frames a border # refresh-tags: Kill automatic refresh tags (for dial-on-demand setups) +# unsolicited-popups: Disable only unsolicited pop-up windows +# all-popups: Kill all popups in JavaScript and HTML # img-reorder: Reorder attributes in tags to make the banners-by-* filters more effective # banners-by-size: Kill banners by size (very efficient!) # banners-by-link: Kill banners by their links to known clicktrackers -# fun: Text replacements for subversive browsing fun! -# nimda: Remove Nimda (virus) code. +# webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking) +# tiny-textforms: Extend those tiny textareas up to 40x80 and kill the hard wrap +# jumping-windows: Prevent windows from resizing and moving themselves +# frameset-borders: Give frames a border +# demoronizer: Fix MS's non-standard use of standard charsets # shockwave-flash: Kill embedded Shockwave Flash objects # quicktime-kioskmode: Make Quicktime movies saveable -# js-events: Kill all JS event bindings (Radically destructive! Use only on real suckers) +# fun: Text replacements for subversive browsing fun! # crude-parental: Kill all web pages that contain the words "sex" or "warez" +# ie-exploits: Disable some known Internet Explorer bug exploits +# site-specifics Cure for site-specific problems. Don't apply generally! # # +hide-forwarded-for-headers # Block any existing X-Forwarded-for header, and do not add a new one. @@ -288,17 +292,15 @@ # # +set-image-blocker{blank} # +set-image-blocker{pattern} -# +set-image-blocker{custom} # +set-image-blocker{} with being any valid image URL # Decides what to do with URLs that end up tagged with {+block +handle-as-image}. -# There are 5 options: +# There are 4 options: # * "-set-image-blocker" will send a HTML "blocked" page, usually # resulting in a "broken image" icon. # * "+set-image-blocker{blank}" will send a 1x1 transparent image # * "+set-image-blocker{pattern}" will send a 4x4 grey/white pattern -# which is easier to recognize than the transparent one. -# * "+set-image-blocker{custom}" will send an image file as specified -# in the config file (see image-blocker-custom-file within config). +# which is less intrusive than the logo but easier to recognize +# than the transparent one. # * "+set-image-blocker{}" will send a HTTP temporary redirect # to the specified image URL. # @@ -340,7 +342,7 @@ # +crunch-incoming-cookies # Prevent the website from setting cookies # -# +kill-popups +# +kill-popups (deprecated) # Filter the website through a built-in filter to disable # window.open() etc. The two alternative spellings are # equivalent. @@ -363,7 +365,7 @@ ############################################################################# {{settings}} ############################################################################# -for-privoxy-version=3.0 +for-privoxy-version=3.0.3 ############################################################################# # Aliases @@ -393,7 +395,7 @@ for-privoxy-version=3.0 +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies allow-all-cookies = -crunch-all-cookies -session-cookies-only - allow-popups = -filter{popups} -kill-popups + allow-popups = -filter{all-popups} -kill-popups +block-as-image = +block +handle-as-image -block-as-image = -block @@ -405,7 +407,7 @@ shop = -crunch-all-cookies allow-popups # Your favourite blend of filters: # -myfilters = +filter{html-annoyances} +filter{js-annoyances} +filter{popups}\ +myfilters = +filter{html-annoyances} +filter{js-annoyances} +filter{all-popups}\ +filter{webbugs} +filter{nimda} +filter{banners-by-size} #+filter{fun} # Allow ads for selected useful free sites: @@ -426,27 +428,32 @@ allow-ads = -block -filter{banners-by-size} -filter{banners-by-link} -downgrade-http-version \ -fast-redirects \ +filter{js-annoyances} \ +-filter{js-events} \ +filter{html-annoyances} \ -+filter{content-cookies} \ -+filter{webbugs} \ -+filter{popups} \ --filter{frameset-borders} \ --filter{refresh-tags} \ --filter{img-reorder} \ +-filter{content-cookies} \ ++filter{refresh-tags} \ ++filter{unsolicited-popups} \ +-filter{all-popups} \ ++filter{img-reorder} \ +filter{banners-by-size} \ -filter{banners-by-link} \ --filter{fun} \ -+filter{nimda} \ ++filter{webbugs} \ +-filter{tiny-textforms} \ ++filter{jumping-windows} \ +-filter{frameset-borders} \ +-filter{demoronizer} \ -filter{shockwave-flash} \ -+filter{quicktime-kioskmode} \ --filter{js-events} \ +-filter{quicktime-kioskmode} \ +-filter{fun} \ -filter{crude-parental} \ ++filter{ie-exploits} \ +-filter{site-specifics} \ -handle-as-image \ +hide-forwarded-for-headers \ +hide-from-header{block} \ +hide-referrer{forge} \ -hide-user-agent \ -+inspect-jpegs \ +-inspect-jpegs \ -kill-popups \ -limit-connect \ +prevent-compression \ @@ -460,41 +467,86 @@ allow-ads = -block -filter{banners-by-size} -filter{banners-by-link} ############################################################################# # Needed for automatic feedback evaluation; Please don't change or delete! ############################################################################# -{+add-header{X-Actions-File-Version: 1.5} -filter -kill-popups} +{+add-header{X-Actions-File-Version: 1.8} -filter -kill-popups} .privoxy.org .oesterhelt.org/actions ############################################################################# # These extensions belong to images: ############################################################################# -{+handle-as-image} +{+handle-as-image -filter} ############################################################################# /.*\.(gif|jpe?g|png|bmp|ico)($|\?) ############################################################################# -# Generic block patterns (the most effective!): +# These don't: +############################################################################# +{-handle-as-image} +/.*\.(js|php|css|.?html) + +############################################################################# +# Generic block patterns by host: ############################################################################# {+block} #MASTER# DONT-VERIFY (generic) - -# By hostname: -# ad*. .*ads. +.ad. *banner*. count*. +*counter. -# By path: -# -/(.*/)?(ads(erver?|tream)?|.*?ads/|ad/|adv(iew|ert(s|enties|is(ing|e?ments)?)?)?|(ad|all|nn)?[-_]?banner(s|ads?|farm)?) -/(.*/)?(publicite|werbung|rekla(ma|me|am)|annonse|maino(kset|nta|s)?/) -/.*(count|track)(er|run)?\.(pl|cgi|exe|dll|asp|php[34]?) -/.*promo.gif +############################################################################# +# Generic unblockers by host: +############################################################################# +{-block} +#MASTER# DONT-VERIFY (generic) +adsl. +ad[udmw]*. +adbl*. +adam*. +adv[oia]*. +.*road*. +.olympiad*. +.*load*. +.*[epu]ad*. +county*. +countr*. ############################################################################# -# Site-specific block patterns; +# Generic block patterns by path: ############################################################################# +{+block} +#MASTER# DONT-VERIFY (generic) +/(.*/)?ad(/|s|v|images|cycle|rotate|mentor|click|frame) +/.*ads/ +/(.*/)?(ad|all|nn|db|promo(tion)?)?[-_]?banner +/(.*/)?(publicite|werbung|reklaa?m|annonse|maino(kset|nta|s)?/) +/.*(count|track|compteur|adframe|banner)(er|run)?(\?|\.(pl|cgi|exe|dll|asp|php|cpt)) +############################################################################# +# Generic unblockers by path: +############################################################################# +{-block} +#MASTER# DONT-VERIFY (generic) +/.*ad(sl|v(i[cs]|o|an|ertencia|ent|.*search)) # advice/advisories/advan*/advertencia (spanish) +/.*(lo|thre|he|d|gr|l|ro|re|squ)ads +/.*account + +############################################################################# +# Exceptions for academia +############################################################################# +.edu +.ac.*/ +.uni-*.de +.tu-*.de + +.gov + +############################################################################# +# Site-specific block patterns; +############################################################################# +{+block} #MASTER# BLOCK-REFERRER: http://www.brooksbrothers.com/ #MASTER# BLOCK-REFERRER: http://www.autodesk.com/ .hitbox.com @@ -504,6 +556,9 @@ www.the-gadgeteer.com/cgi-bin/getimage.cgi/ www.stern.de/bilder/poweredby #MASTER# BLOCK-REFERRER: http://www.gmx.net/de/cgi/logoutpage?CN=sJywqKCElHw%3D%3D images.gmx.net/images/bs/ +#MASTER# BLOCK-REFERRER: http://www.gmx.de/ +www.gmx.de/promo +images.gmx.net/images/.*/promo/ #MASTER# BLOCK-REFERRER: http://www.max.de/ .akamaitech.net/.*/img/e-commerce www.max.de/_teaser/partner/ @@ -523,8 +578,6 @@ www.beseen.com/images/website3.gif #MASTER# BLOCK-REFERRER: http://www.planetspiele.de/ .planetspiele.de/gfx/partner #MASTER# BLOCK-REFERRER: http://www.hot.ee/toptools/ -#MASTER# REMARKS: Yes, block *all* their graphics. -www.hot.ee/.*\.(gif|jpe?g) top.ultraseek.net/top_sit.*\.gif #MASTER# BLOCK-REFERRER: http://kickme.to/FOSI fosi.ural.net/.*\.jpg @@ -543,17 +596,20 @@ cobolreport.com/images/Acucorp1.gif cobolreport.com/images/netcobol.jpg cobolreport.com/images/NetCOBOL-banner.gif objectz.com/images/Landmark%20120x240.gif -#MASTER# BLOCK-REFERRER: http://www.theregister.co.uk/ -www.theregister.co.uk/media #MASTER# BLOCK-REFERRER: http://www.dpreview.com/reviews/canons40/ tribalfusion.speedera.net .tribalfusion.com/media/ +#MASTER# BLOCK-REFERRER: http://www.stuff.co.nz +#MASTER# REMARKS: http://www.speedera.com/primary/newsroom/apr292002-arch.htm +engage.speedera.net/ #MASTER# BLOCK-REFERRER: http://www.portalofevil.com/ b*.portalofevil.com/shlv #MASTER# BLOCK-REFERRER: http://us.imdb.com/Quotes?0110912 i.imdb.com/Vpics/ #MASTER# BLOCK-REFERRER: http://us.imdb.com/Title?0110912 -i.imdb.com/Photos/CMSIcons +#MASTER# BLOCK-REFERRER: http://www.imdb.com/help/boards/markup +#MASTER# REMARKS: 2nd is for emoticons exception +i.imdb.com/Photos/CMSIcons/(?!buttons|emoticons) rcm.amazon.com #MASTER# BLOCK-REFERRER: http://us.imdb.com/Trivia?0110116 i.imdb.com/Icons/apix/ @@ -564,6 +620,65 @@ www.salon.com/Creatives images.salon.com/plus/gear/src/ #MASTER# BLOCK-REFERRER: http://www.sourceforge.net/ images.sourceforge.net/images/DB2powered.gif +#MASTER# BLOCK-REFERRER: http://www.planetgamecube.com/media.cfm?action=shot&id=250&seq=2 +/.*paypal-smad\.gif +www.planetgamecube.com/images/PGC_Q_Edit.gif +#MASTER# BLOCK-REFERRER: http://www.samachar.com/ +.samachar.com/banimages/ +#MASTER# BLOCK-REFERRER: http://www.weatherbug.com/aws/index.asp +.weatherbug.com/popups/ +#MASTER# BLOCK-REFERRER: http://portale.web.de/Film/ +.web.de/.*/EIGENWERBUNG/ +#MASTER# BLOCK-REFERRER: http://www.aintitcool.com/ +www.aintitcool.com/.*\.swf +#MASTER# BLOCK-REFERRER: http://www.hispasexo.net/fotos/index.php?currDir=./Negras&pageType=image&image=bla001.jpg +www.hispasexo.net/.*/sxb +#MASTER# BLOCK-REFERRER: http://www.nytimes.com/2002/09/05/technology/05CODE.html +graphics.nytimes.com/nytstore/images/ctx +#MASTER# BLOCK-REFERRER: http://www.macfixit.com/ +spinbox.techtracker.com +#MASTER# BLOCK-REFERRER: http://www.javaworld.com/javaworld/jw-11-2003/jw-1114-toolbox.html? +spinbox.macworld.com/ +#MASTER# BLOCK-REFERRER: http://www.sharereactor.com/ +#MASTER# BLOCK-REFERRER: http://www.popupad.net/ +www.popupad.net/ats/ +#MASTER# BLOCK-REFERRER: http://www.gamespot.com/ +www.gamespot.com/promos/ +#MASTER# BLOCK-REFERRER: http://www.famousbabes.com/gabrielleR/grpics1.htm +#MASTER# BLOCK-REFERRER: http://www.hit-now.com/ +hit-now.com +#MASTER# BLOCK-REFERRER: http://www.pgpi.org/ +[a-v]*.valueclick.com +#MASTER# BLOCK-REFERRER: http://astalavista.box.sk/ +www.crazypopups.com +#MASTER# DONT-VERIFY: Opera's list of banners to load (XML) +/scripts/cms/xcms.asp +#MASTER# BLOCK-REFERRER: http://www.searchking.com/servlet/SearchKing?at=search&keyword=google+owns+you&but1.x=0&but1.y=0 +www.searchking.com/skbanners/ +www.searchking.com:443 +#MASTER# BLOCK-REFERRER: http://www.dshield.org/dshieldmovie.php +www.dshield.org/.*anner.gif +#MASTER# REMARKS: #MASTER# BLOCK-REFERRER: http://www.msnbc.com/news/880835.asp?cp1=1 +#MASTER# REMARKS: di.image.eshop.msn.com +#MASTER# BLOCK-REFERRER: http://www.nytimes.com/2003/12/18/politics/campaigns/18BRAU.html?hp +xlonhcld.xlontech.net/ + +#---------------------------------------------------------------------------- +# JavaScripts for ad and popup generation +#---------------------------------------------------------------------------- +#MASTER# BLOCK-REFERRER: http://www.britannica.com/ +www.britannica.com/marketing/ +#MASTER# BLOCK-REFERRER: http://www.planetgamecube.com/ +mediamgr.ugo.com +#MASTER# BLOCK-REFERRER: http://www.ebookers.fr +#MASTER# REMARKS: Unanimis Advertising +awrz.net/ +#MASTER# BLOCK-REFERRER: http://www.chip.de/artikel/c_artikelunterseite_10423683.html +pagead*.googlesyndication.com/.*\.js +a.tfag.de/js.ng/ +#MASTER# BLOCK-REFERRER: http://www.nbc4.com/news/2672416/detail.html +y.nbc4.com/js.ng +y.ibsys.com/event.ng/ ############################################################################# # Generic block-as-image patterns: @@ -571,10 +686,24 @@ images.sourceforge.net/images/DB2powered.gif {+block-as-image} #MASTER# BLOCK-REFERRER: http://experts-exchange.com/os2gen/ /.*adimage\.(php|cgi) +#MASTER# BLOCK-REFERRER: http://flashhentai.com/Tgp/28-09-2002/index4.html +#MASTER# BLOCK-REFERRER: http://www.thughosting.com/www/ixix/a912/912s2.html +#MASTER# BLOCK-REFERRER: http://www.fantasiegirl.com/cumshots/3/spunkpatrolgirl302.htm +#MASTER# BLOCK-REFERRER: http://www.asianuncut.com/asian2/sep5628.html +#MASTER# BLOCK-REFERRER: http://www.tatgirls.com/gals/redhot-2/kitty-carl/lb10.html +#MASTER# BLOCK-REFERRER: http://www.cream-porn.com/1/hard/29/02.html +/.*recips?/ +#MASTER# BLOCK-REFERRER: http://www.paroles.net/texte/10818 +/bandeaux/ +#MASTER# BLOCK-REFERRER: http://www.usatoday.com/ +/sponsors/.*\.gif ############################################################################# # Site-specific block-as-image patterns: ############################################################################# +#---------------------------------------------------------------------------- +# Banner farms: +#---------------------------------------------------------------------------- #MASTER# BLOCK-REFERRER: http://www.cnn.com/ #MASTER# BLOCK-REFERRER: http://www.aol.com/ ar.atwola.com @@ -585,27 +714,24 @@ ar.atwola.com #MASTER# BLOCK-REFERRER: http://www.theinquirer.net/ netcomm.spinbox.net #MASTER# BLOCK-REFERRER: http://www.joecartoon.com/ -servedby.advertising.com -#MASTER# BLOCK-REFERRER: http://hwww.yahoo.com/ +.*servedby.advertising.com +#MASTER# BLOCK-REFERRER: http://www.yahoo.com/ .a.yimg.com/(?:(?!/i/).)*$ .a[0-9].yimg.com/(?:(?!/i/).)*$ -.yimg.com/.*/a/ -.yimg.com/.*/flash/promotions +.yimg.com/(.*/)?a/ +.yimg.com/.*/(flash|java)/promotions +.yimg.com/a/.*/flash/ +#MASTER# BLOCK-REFERRER: http://freeshells.linuxhelpnetwork.net/ +.yimg.com/.*/justdeals #MASTER# BLOCK-REFERRER: http://www.kostenlos.de/ werbung.guj.de #MASTER# DONT-VERIFY bs*.gsanet.com bs*.einets.com -#MASTER# DONT-VERIFY (Opera browser built-in ads) +#MASTER# DONT-VERIFY .qkimg.net -/scripts/cms/xcms.asp #MASTER# BLOCK-REFERRER: http://www.sevac.com/ .sexcounter. -#MASTER# BLOCK-REFERRER: http://www.asahi.com/ -www.asahi.com/(.*/)?ad/ -#MASTER# BLOCK-REFERRER: http://www.travelocity.com/Vacations/0,,TRAVELOCITY||Y,00.html?HPTRACK=mpc_vac -#MASTER# BLOCK-REFERRER: http://dest.travelocity.com/DestGuides/geo_frontdoor/0,,TRAVELOCITY,00.html?HPTRACK=icon_dest -.travelocity./Sponsor_gifs/ #MASTER# DONT-VERIFY #MASTER# REMARKS: Bannerfarms used by grokster and others: james.adbutler.de @@ -616,8 +742,6 @@ gkas.de/affilinet cashformel.com/web-sponsor www.cash4banner.com/web-sponsor 213.221.106.162 -#MASTER# BLOCK-REFERRER: http://www.ebay.com -pics.ebay.com/aw/pics/homepage/big8 #MASTER# BLOCK-REFERRER: http://www.falk-online.de/index.jsp #MASTER# REMARKS: ad*.adsolution.de 62.26.220.2 @@ -627,57 +751,256 @@ pics.ebay.com/aw/pics/homepage/big8 #MASTER# REMARKS: both exist and are banner farms www.bannermania.nom.pl magic.koti.com.pl/cgi-magic/banner_img.cgi -#MASTER# BLOCK-REFERRER: http://www.linuxdot.org/cgi-bin/columns.cgi?id=26 -naturalismedicina.com/cgibin/linswap -#MASTER# BLOCK-REFERRER: http://www.dhtmlplanet.com/ -statse.webtrendslive.com -#MASTER# BLOCK-REFERRER: http://www.versiontracker.com/ -#MASTER# REMARKS: 1) Used on many sites 2) URLs don't _end_ in .gif, hence +imageblock -spinbox.versiontracker.com/.*\.gif #MASTER# BLOCK-REFERRER: http://educ8search.tripod.com/hacksoft.html #MASTER# REMARKS: Counter .netscape.com/c\.cgi\? -#MASTER# BLOCK-REFERRER: http://privacy.net/analyze/ -a.consumer.net #MASTER# BLOCK-REFERRER: http://mycroft.mozdev.org/ #MASTER# REMARKS: Counter m[0-9].nedstatbasic.net #MASTER# BLOCK-REFERRER: http://salon.com/ +#MASTER# BLOCK-REFERRER: http://maps.yahoo.com/ #MASTER# REMARKS: Banner farms; just exclude their corp. info -[a-v,x-z]*.atdmt.com/ +[a-vx-z]*.atdmt.com/ +#MASTER# BLOCK-REFERRER: http://f1.racing-live.com/en/ +.akamai.net/.*f1-live\.com/.*pub +#MASTER# BLOCK-REFERRER: http://www.melodysoft.com/cgi-bin/foro.cgi +tracker.tradedoubler.com +#MASTER# BLOCK-REFERRER: http://dlh.net/german.html +imp*.tradedoubler.com +#MASTER# BLOCK-REFERRER: http://www.physlink.com/Education/AskExperts/ae353.cfm +/.*affiliate.*120x90 +#MASTER# BLOCK-REFERRER: http://www.amayita.com/imagenes/index.php?currDir=./Hall_of_Fame&pageType=image&image=img_0265.jpg +www.spanishbanner.com/cgi/bserve.cgi +#MASTER# BLOCK-REFERRER: http://www.macgamer.com/ +.qksrv.net +#MASTER# BLOCK-REFERRER: http://www.drudgereport.com/ +#MASTER# BLOCK-REFERRER: http://www.rpmseek.com/index.html +#MASTER# BLOCK-REFERRER: http://www.funnyjunk.com/pages/cooties.htm +.instacontent.net/fastclick/ +#MASTER# BLOCK-REFERRER: http://www.macnn.com/ +kermit.macnn.com/ +#MASTER# BLOCK-REFERRER: http://www.sdtimes.com/news/ +www.sdtimes.com/phpads +#MASTER# BLOCK-REFERRER: http://www.pagesjaunes.fr/pj.cgi? +www.pagesjaunes.fr/EDITO/FR/images/barre_partenaires.gif +#MASTER# BLOCK-REFERRER: http://www.allocine.fr/ +.allocine.fr/.*/logo_partenaire/ +#MASTER# BLOCK-REFERRER: http://www.virtual-hideout.net/guides/psu_relay_timer_mod/index.shtml +www.virtual-hideout.net/sponsors/ +#MASTER# BLOCK-REFERRER: http://www.the-underdogs.org/featured.php +?.websponsors.com/ +#MASTER# BLOCK-REFERRER: http://www.globalseeker.com/freesamples/ +quinst.com/images +#MASTER# BLOCK-REFERRER: http://www.newsmax.com/archives/articles/2003/11/20/185048.shtml +ad*.fameleads.com +#MASTER# BLOCK-REFERRER: http://www.imdb.com/ +ia.imdb.com/.*(\.swf|[0-9]\.(gif|jpg)) +#MASTER# BLOCK-REFERRER: http://www.paroles.net/texte/10818 +.[a-vx-z]*.comclick.com/ +#MASTER# BLOCK-REFERRER: http://freemail.web.de/ +#MASTER# BLOCK-REFERRER: http://www.nytimes.com/2003/11/19/politics/19DEAN.html?ex=1069822800&en=dc82dfff0502faeb&ei=5062&partner=GOOGLE +.as*.falkag. +#MASTER# BLOCK-REFERRER: http://www.macnn.com/news/18944 +a.tribalfusion.com/ +#MASTER# BLOCK-REFERRER: http://reviews.infosyncworld.com/palmos/featured/index.html?start=1&offset=10 +.instacontent.net/adcouncil/ +.adserver.com/ +#MASTER# BLOCK-REFERRER: http://computers.cnet.com/hardware/0-1027-404-20857400.html?tag=rev +#MASTER# REMARKS: Pointdexter +.ru4.com/ +#MASTER# BLOCK-REFERRER: http://arstechnica.com/ +content.ad-flow.com/ +#MASTER# BLOCK-REFERRER: http://www.boursorama.com/infos/actualites/detail_actu_marches.phtml?news=1510287 +www.smartadserver.com/ +#MASTER# BLOCK-REFERRER: http://www.dn.se/hund +www.flashbanner.no/ +#MASTER# BLOCK-REFERRER: http://abcnews.go.com/sections/us/GoodMorningAmerica/scottpeterson030509.html +.akamai.net/.*/adinterax.com/ +#MASTER# BLOCK-REFERRER: http://www.chez.tiscali.fr/ +admedia.tiscali. +pub.chez.com/ +#MASTER# DONT-VERIFY +#MASTER# REMARKS: Bannerfarm used by Morpheus file sharing software +jmcms.cydoor.com/ +#MASTER# BLOCK-REFERRER: http://www.ecranbureau.com/ +www.allosponsor.com/images/ban +#MASTER# BLOCK-REFERRER: http://www.tech-report.com/etc/2003q2/3dmurk03/index.x?pg=7 +#MASTER# REMARKS: Netshelter.com farm +.adtrix.com +#MASTER# BLOCK-REFERRER: http://discussion.brighthand.com/forumdisplay.php?s=fee44a5b2a6fc2e9e79d6472bc8fbe94&forumid=197 +*[0-9].tribalfusion.com/ +#MASTER# BLOCK-REFERRER: http://www.sf.net/ +ads.osdn.com/?ad +#MASTER# BLOCK-REFERRER: http://www.nytimes.com/ +kt*.kliptracker.com/ +gfx.dvlabs.com/klipmart/ + +#---------------------------------------------------------------------------- +# Cross-site user tracking +#---------------------------------------------------------------------------- +#MASTER# BLOCK-REFERRER: http://os2.ru/ +.*.*.spylog.com/ +#MASTER# BLOCK-REFERRER: http://www.dhtmlplanet.com/ +statse.webtrendslive.com +#MASTER# BLOCK-REFERRER: http://www.versiontracker.com/ +#MASTER# REMARKS: 1) Used on many sites 2) URLs don't _end_ in .gif, hence +imageblock +spinbox.versiontracker.com/.*\.(gif|jpg) +#MASTER# BLOCK-REFERRER: http://mycroft.mozdev.org/ +stat.onestat.com +#MASTER# BLOCK-REFERRER: http://www.global.net.uk/ +.[a-vx-z]*.tradedoubler.com +#MASTER# BLOCK-REFERRER: http://www.sharepoint.boo.pl/ +stat.webmedia.pl/ +#MASTER# BLOCK-REFERRER: http://www.asp-php.net/index.php +log*.xiti.com/ +log*.hit-parade.com/ +#MASTER# BLOCK-REFERRER: http://www.msnbc.com/news/884810.asp?0si=-&cp1=1 +www.xml.eshop.msn.com/tracksponsorimpression.asp +#MASTER# BLOCK-REFERRER: http://www.washingtonpost.com/ +stats.surfaid.ihost.com/(crc/)?images/(bounce/)?uc.GIF +#MASTER# BLOCK-REFERRER: http://www.planetgamecube.com/ +.imrworldwide.com + +#---------------------------------------------------------------------------- +# Specific counters (see above for generic patterns) +#---------------------------------------------------------------------------- +#MASTER# BLOCK-REFERRER: http://www.distrowatch.com/table.php?distribution=linex +s*.sitemeter.com/meter\.asp +#MASTER# BLOCK-REFERRER: http://personales.mundivia.es/lbouza/ +fastcounter.bcentral.com/ +#MASTER# BLOCK-REFERRER: http://osnews.com/ +bilbo.counted.com/ +#MASTER# BLOCK-REFERRER: http://www.slovio.com/ +ww2.fce.vutbr.cz/bin/counter.gif +#MASTER# BLOCK-REFERRER: http://enciclopedia.us.es/ +p[0-9].nedstatbasic.net/ +#MASTER# BLOCK-REFERRER: http://www.vencor.narod.ru/films/inolv.htm +bs.yandex.ru/count/ + +#---------------------------------------------------------------------------- +# On-site ads and other single sources: +#---------------------------------------------------------------------------- +#MASTER# BLOCK-REFERRER: http://www.fotw.net/flags/ +www.fotw.net/images/linea2.gif +#MASTER# BLOCK-REFERRER: http://www.asahi.com/ +www.asahi.com/(.*/)?ad/ +#MASTER# BLOCK-REFERRER: http://www.travelocity.com/Vacations/0,,TRAVELOCITY||Y,00.html?HPTRACK=mpc_vac +#MASTER# BLOCK-REFERRER: http://dest.travelocity.com/DestGuides/geo_frontdoor/0,,TRAVELOCITY,00.html?HPTRACK=icon_dest +.travelocity./Sponsor_gifs/ +#MASTER# BLOCK-REFERRER: http://www.ebay.com +pics.ebay.com/aw/pics/homepage/big8 +#MASTER# BLOCK-REFERRER: http://www.linuxdot.org/cgi-bin/columns.cgi?id=26 +naturalismedicina.com/cgibin/linswap +#MASTER# BLOCK-REFERRER: http://privacy.net/analyze/ +a.consumer.net #MASTER# BLOCK-REFERRER: http://www.deviantart.com/ images.deviantart.com/affiliates/ images.deviantart.com/shared/(winzip|trillian)\.gif +#MASTER# BLOCK-REFERRER: http://www.happypuppy.com/ +www.happypuppy.com/newstuff/netsys\.swf +www.happypuppy.com/images/[^/]+\.gif +www.happypuppy.com/images/sav_creative/savage_01.jpg +www.happypuppy.com/images/site/cnb_but_nav.gif #MASTER# DONT-VERIFY #MASTER# REMARKS: Referenced from HTML-Emails .weather.com/creatives/ .weather.com/web/services/email/ - -############################################################################# -# Generic unblockers to narrow the side effects of the generic blockers: -############################################################################# -{-block} -#MASTER# DONT-VERIFY (generic) - -# By host: -# -adsl. -ad[ud]*. -advice. -.edu -.ac.uk -.uni-*.de -.*load*. - -# By path: -# -/.*ad(sl|v(i[cs]|an|ertencia|entu)) # advice/advisories/advan*/advertencia (spanish) -/.*((up|down)lo|p?thre|he|d|gr|l|ro)ads -/.*account +#MASTER# BLOCK-REFERRER: http://www.mapblast.com/ +:81/feeds/ +x.mycity.com +#MASTER# BLOCK-REFERRER: http://gamespot.com/gamespot/filters/0,10850,6013548,00.html +/.*/topslots/topslot_ +#MASTER# BLOCK-REFERRER: http://maccentral.macworld.com/ +maccentral.macworld.com/images/subsad +#MASTER# BLOCK-REFERRER: http://bigcharts.marketwatch.com/ +a.mktw.net +#MASTER# BLOCK-REFERRER: http://www.happypuppy.com/win/ +www.happypuppy.com/images/sav_creative +#MASTER# BLOCK-REFERRER: http://www.wral.com/ +images.ibsys.com/.*/sponsors/ +#MASTER# BLOCK-REFERRER: http://www.usatoday.com/money/economy/fed/2002-09-23-bubble-debate_x.htm +www.usatoday.com/sponsors/ +#MASTER# BLOCK-REFERRER: http://www.jpost.com/ +ads.jpost.com +#MASTER# BLOCK-REFERRER: http://www.jpost.com/servlet/Satellite?pagename=JPost/A/JPArticle/ShowFull&cid=1038889003183 +/.*/images/\d+/promos/ +#MASTER# BLOCK-REFERRER: http://astalavista.box.sk/ +www.subteran.ro/adult/adult20.jpg +#MASTER# BLOCK-REFERRER: http://www.kuro5hin.org/ +#www.kuro5hin.org/images/[^/]+\.gif +#MASTER# BLOCK-REFERRER: http://www.uolsinectis.com.ar/ +ad.uol.com.br +#MASTER# BLOCK-REFERRER: http://www.spammimic.com/credits.shtml +www.anonymizer.com/images/affiliate/ +#MASTER# BLOCK-REFERRER: http://cracks.thebugs.ws/pages/H/7.shtml +img.thebugs.ws +#MASTER# BLOCK-REFERRER: http://www.kinghost.com/fetish/xworx/Azian/nextdoor/06/realm.html +www.kinghost.com/ban/ +#MASTER# BLOCK-REFERRER: http://www.infoempleo.com/ +www.infoempleo.com/(pop-up|images(/Nueva/banner_|/motor)) +#MASTER# BLOCK-REFERRER: http://www.hardocp.com/ +hera.hardocp.com/ +#MASTER# BLOCK-REFERRER: http://www.slovio.com/ +www.slovio.com/1/signs/(66|120) +#MASTER# BLOCK-REFERRER: http://www.usatoday.com/ +images.usatoday.com/.*promo +images.usatoday.com/shop +#MASTER# BLOCK-REFERRER: http://www.free.fr/ +www.free.fr/img_une +www.free.fr/promos +#MASTER# BLOCK-REFERRER: http://people.aol.com/ +i.timeinc.net/sponsors +#MASTER# BLOCK-REFERRER: http://www.watch.impress.co.jp/akiba/hotline/20021221/ballpc.html +ngs.impress.co.jp/image.ng +#MASTER# BLOCK-REFERRER: http://forums2.warcry.com/forum.phtml?f=69 +ims.warcry.com/scripts/ims/skyscrapers +#MASTER# BLOCK-REFERRER: http://www.mapquest.com/directions/main.adp?go=1&do=nw&ct=NA&1y=US&1a=255+w+88+st&1p=&1c=&1s=&1z=10024&2y=US&2a=20+milltown+rd&2p=&2c=&2s=&2z=10509&lr=2 +cdn.mapquest.com/mqhome/toy_ +www.sunbelt-software.com/cfbanners/ +#MASTER# BLOCK-REFERRER: http://www.chip.de/ +195.27.236.226/ +#MASTER# BLOCK-REFERRER: http://astalavista.box.sk/ +astalavista.box.sk/adult.*\.jpg +.box.sk/(468x60|120x600|hbb) +#MASTER# BLOCK-REFERRER: http://www.investorguide.com +www.investorguide.com/ad_ +#MASTER# BLOCK-REFERRER: http://www.ig.com.br/ +image.ig.com.br/gn/modulos/ +image.ig.com.br/v5/flash/ig_br/flash\.swf +#MASTER# BLOCK-REFERRER: http://www.bol.com.br/ +b.i.bol.com.br/b/catho/a_ +#MASTER# BLOCK-REFERRER: http://news.independent.co.uk/world/australasia/story.jsp?story=381080 +www.independent.co.uk/img/commercial/ +#MASTER# BLOCK-REFERRER: http://groups.yahoo.com/group/epdf/ +a.rn11.com/ +#MASTER# BLOCK-REFERRER: http://www.planetgamecube.com/ +www.planetgamecube.com/ad.swf +#MASTER# BLOCK-REFERRER: http://www.dinside.no/ +www.dinside.no/annonsorer/ +#MASTER# BLOCK-REFERRER: http://www.computrabajo.es/ +www.computrabajo.es/imagenes/publicidad/ +#MASTER# BLOCK-REFERRER: http://www.boursorama.com/ +www.boursorama.com/pub/ +#MASTER# BLOCK-REFERRER: http://www.baquia.com/com/20020416/art00010.html +www.baquia.com/imagenes/pub/ +#MASTER# BLOCK-REFERRER: http://www.aint-it-cool-news.com/display.cgi?id=15348 +www.aintitcool.com/foxsearchlight/ +#MASTER# BLOCK-REFERRER: http://www.diabloii.net +etype.adbureau.net/ +rcm-images.amazon.com/ +#MASTER# BLOCK-REFERRER: http://millionaire.itv.com/millionaire/game/freegame/nq-anytime/anytimeset.html +millionaire.itv.com/.*/assets/ +www.digitoday.fi/services/ +#MASTER# BLOCK-REFERRER: http://www.heise.de/ +#MASTER# BLOCK-REFERRER: http://www.spiegel.de/ +/RealMedia/ads/ ############################################################################# # Site-specific unblockers: ############################################################################# +{-block} +#MASTER# UNBLOCK-REFERRER: http://www.faqs.org/ +www.faqs.org/banner\.html #MASTER# UNBLOCK-REFERRER: http://bannerblind.mozdev.org/ bannerblind.mozdev.org #MASTER# UNBLOCK-REFERRER: http://advogato.org/ @@ -715,6 +1038,125 @@ www.gnome.org .nycsubway.org/img/banner #MASTER# UNBLOCK-REFERRER: http://www.hellug.gr ads.hellug.gr +#MASTER# UNBLOCK-REFERRER: http://www.ebgames.com/ebx/ads/promos/bargainbin/pc/ +www.ebgames.com/ebx/ads/promos/ +#MASTER# UNBLOCK-REFERRER: http://www.forgotten-ny.com/ADS/manhattanads/moremahnattan.html +www.forgotten-ny.com/ADS/ +#MASTER# UNBLOCK-REFERRER: http://bricolage.thepirtgroup.com/docs/Bric/AdvTemplates.html +/.*/AdvTemplates.html +#MASTER# UNBLOCK-REFERRER: http://counter.li.org +counter.li.org +#MASTER# UNBLOCK-REFERRER: http://adrian.adrian.org/ +adrian.adrian.org +#MASTER# UNBLOCK-REFERRER: http://www.tompaine.com/op_ads/ +www.tompaine.com/op_ads/ +#MASTER# UNBLOCK-REFERRER: http://adela.karlin.mff.cuni.cz/ +adela.karlin.mff.cuni.cz +#MASTER# UNBLOCK-REFERRER: http://www.swcp.com/rtoads/printmag/issue3/neg_data.html +www.swcp.com/rtoads/ +#MASTER# UNBLOCK-REFERRER: http://www.privoxy.org/actions/index.php +#MASTER# REMARKS: Don't block our own feedback process, even if the +#MASTER# REMARKS: parameters contain block patterns +www.privoxy.org +#MASTER# UNBLOCK-REFERRER: http://sourceforge.net/help/tracker.php +sourceforge.net/.*tracker +#MASTER# UNBLOCK-REFERRER: http://www.brawnylads.com/ +www.brawnylads.com +#MASTER# UNBLOCK-REFERRER: http://www.artbrokerage.com/ads/ads2.htm +www.artbrokerage.com/ads/ +#MASTER# UNBLOCK-REFERRER: http://www.tivoli.com/support/storage_mgr/ +www.tivoli.com/support/storage_mgr/adsercli.htm +#MASTER# UNBLOCK-REFERRER: http://www.acm.org/siggroup/ +www.acm.org +#MASTER# UNBLOCK-REFERRER: http://www.motel6.com/ +www.motel6.com/maps/detailmap_tracker.asp +#MASTER# UNBLOCK-REFERRER: http://adzapper.sourceforge.net/ +adzapper. +#MASTER# UNBLOCK-REFERRER: http://de.altavista.com/web/adv +.altavista.com/web/adv +#MASTER# UNBLOCK-REFERRER: http://rads.mcafee.com/rads/scripts/RADS.dll?QueryProduct2 +rads.mcafee.com/rads/ +#MASTER# UNBLOCK-REFERRER: http://linuxfromscratch.org/cgi-bin/lfscounter.cgi +linuxfromscratch.org/cgi-bin/lfscounter.cgi +#MASTER# UNBLOCK-REFERRER: http://www.wholetomato.com/ +www.wholetomato.com/images/banner.jpg +#MASTER# UNBLOCK-REFERRER: http://dv411.com/advc50.html +dv411.com/advc50.html +#MASTER# UNBLOCK-REFERRER: http://www.freeswan.org/freeswan_trees/freeswan-1.98b/doc/adv_config.html +www.freeswan.org/freeswan_trees/freeswan-1.98b/doc/adv_config.html +#MASTER# UNBLOCK-REFERRER: http://www.percom.org/ +www.percom.org/banner.html +#MASTER# UNBLOCK-REFERRER: http://www.aaai.org/Magazine/Departments/calendar.html +www.aaai.org/Graphics/Banners/ +#MASTER# UNBLOCK-REFERRER: http://www.arm.com/support/ads_faq?OpenDocument&ExpandSection=11 +www.arm.com/.*ads +#MASTER# UNBLOCK-REFERRER: http://www.anybrowser.org/campaign/ +www.anybrowser.org/.*banner +#MASTER# UNBLOCK-REFERRER: http://www.tads.org/ +www.tads.org/ +#MASTER# UNBLOCK-REFERRER: http://www.mbe.com/redir/packtrack.asp +www.mbe.com/redir/packtrack.asp +www.iship.com/trackit/ +#MASTER# UNBLOCK-REFERRER: http://www.newegg.com/ +www.newegg.com/track.asp +#MASTER# UNBLOCK-REFERRER: http://kt.aspseek.org/ +kt.aspseek.org/adv.html +#MASTER# UNBLOCK-REFERRER: http://www.esis.com.au/AdvSerialCards/Firewire.htm +www.esis.com.au/AdvSerialCards +#MASTER# UNBLOCK-REFERRER: http://www.familysearch.org/ +www.familysearch.org/.*banner +#MASTER# UNBLOCK-REFERRER: http://coder.com/ +coder.com/creations/banner/ +#MASTER# UNBLOCK-REFERRER: http://arnolds.dhs.org/static/adv_tools.html +arnolds.dhs.org/static/adv_tools.html +#MASTER# UNBLOCK-REFERRER: http://www.ibm.com/ +www-3.ibm.com/software/ad/ +#MASTER# UNBLOCK-REFERRER: http://www.gpl.org/ +www.gpl.org/TLCimages2/banner2.gif +#MASTER# UNBLOCK-REFERRER: http://europa.eu.int/yourvoice/ +europa.eu.int +#MASTER# UNBLOCK-REFERRER: http://www.schooner.com/~loverso/no-ads/ +www.schooner.com/~loverso/no-ads/ +#MASTER# UNBLOCK-REFERRER: http://www.debka.com/ +ad.debka.com/(css|images) +#MASTER# UNBLOCK-REFERRER: http://www.directv.com/DTVAPP/index.jsp +#MASTER# REMARKS: Yuck! +realmedia*./.*/DIRECTV/ +www.directv.com/includes/jvs/BannerHome.js +oascentral.directv.com/ +#MASTER# UNBLOCK-REFERRER: http://source.bungie.org/ +source.bungie.org/ +#MASTER# UNBLOCK-REFERRER: http://adonthell.linuxgames.com/ +adonthell.linuxgames.com/ +#MASTER# UNBLOCK-REFERRER: http://www.meine-erste-homepage.com/bannergenerator/formbanner.php +www.meine-erste-homepage.com/bannergenerator/ +#MASTER# UNBLOCK-REFERRER: http://www.france-histoire.com/russie/visarussie.htm +www.france-histoire.com/russie/ad/uts.htm +#MASTER# UNBLOCK-REFERRER: http://news.bbc.co.uk/furniture/chinese/banner/bbccantonese_600.gif +#MASTER# REMARKS: Banner-free site(s). +.bbc.co.uk/ +#MASTER# UNBLOCK-REFERRER: http://www.eclipse.org +www.eclipse.org/banner\.html +#MASTER# UNBLOCK-REFERRER: http://www.egads.com/ +.egads.com/ +#MASTER# UNBLOCK-REFERRER: http://adc.netlabs.org/ +adc.netlabs.org/ +#MASTER# UNBLOCK-REFERRER: http://www.tela.bc.ca/tads/authoring/multimedia-tads-docs/latin2.htm +www.tela.bc.ca/tads/ +#MASTER# UNBLOCK-REFERRER: http://adbusters.org/information/ +adbusters.org/ +#MASTER# UNBLOCK-REFERRER: http://www.eads.com/ +#MASTER# UNBLOCK-REFERRER: http://www.eads.net/ +#MASTER# UNBLOCK-REFERRER: http://www.eads.de/ +.eads.*/ +#MASTER# UNBLOCK-REFERRER: http://www.qualcomm.com/brew/developer/resources/ad/documentation.html +www.qualcomm.com/brew/developer/resources/ad/ +#MASTER# UNBLOCK-REFERRER: http://www.tomshardware.com/storage/20031001/index.html +www.ad.tomshardware.com/cgi-bin/logo2.m? +#MASTER# UNBLOCK-REFERRER: http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=2959829594&category=30018#ebayphotohosting +.ebayimg.com/ +#MASTER# UNBLOCK-REFERRER: http://www.baycitybaptist.org/ +www.baycitybaptist.org/images/Banner.jpg ############################################################################# # Site-specific special rules: @@ -727,6 +1169,7 @@ ads.hellug.gr {fragile} .office.microsoft.com .windowsupdate.microsoft.com +.apple.com #---------------------------------------------------------------------------- # Shopping and banking sites - allow cookies and pop-ups @@ -740,11 +1183,24 @@ ads.hellug.gr .overclockers.co.uk .deutsche-bank-24.de .db24.de +.deutsche-bank.de .ebay. .mobile.de +www.fondationlejeu.com +www.techtv.com +.mywebgrocer.com #---------------------------------------------------------------------------- -# These sites require pop-ups +# Subscription sites (with credible privacy policy) - allow permanent cookies +#---------------------------------------------------------------------------- +{-session-cookies-only} +#MASTER# PROBLEM-URL: http://www.nytimes.com/auth/login +.nytimes.com/ +#MASTER# PROBLEM-URL: http://www.volkskrant.nl/ +.volkskrant.nl/ + +#---------------------------------------------------------------------------- +# These sites require pop-ups, so don't use the unconditional filters. #---------------------------------------------------------------------------- {allow-popups} #MASTER# PROBLEM-URL: http://www.aprilbarrows.com/discography.html @@ -765,8 +1221,6 @@ www.reuters.com/news_article.jhtml www.xmms.org #MASTER# PROBLEM-URL: http://www.bild.de/ .bild.t-online.de -#MASTER# PROBLEM-URL: http://klubwakacyjny.interia.pl/pytanie.html -klubwakacyjny.interia.pl/pytanie.html #MASTER# PROBLEM-URL: http://www.m-w.com/cgi-bin/dictionary?book=Dictionary&va=cupel www.m-w.com #MASTER# PROBLEM-URL: http://www.pcbox.es/boxshop/catalogo/entrada.asp?centro=53 @@ -777,8 +1231,23 @@ www.hola.com/club/ www.infoempleo.com #MASTER# PROBLEM-URL: http://www.netflix.com/ www.netflix.com +#MASTER# PROBLEM-URL: http://amnistiapornigeria.org/ +amnistiapornigeria.org +#MASTER# PROBLEM-URL: http://ponteensupiel.org/index2.html +ponteensupiel.org +#MASTER# PROBLEM-URL: http://www.ifilm.com/ifilm/aicn +www.ifilm.com/ifilm +#MASTER# PROBLEM-URL: http://www.pogo.com/ +.pogo.com +#MASTER# PROBLEM-URL: http://my.aol.com/ +my.aol.com +#MASTER# PROBLEM-URL: http://www.cnn.com/ +#MASTER# REMARKS: Re-enable "Story Tools" i.e. printing, emailing etc. +i.cnn.net/cnn/.*/clickability/button +#MASTER# PROBLEM-URL: http://www.rosettaproject.org:8080/live/search/contribute/swadesh/view?ethnocode=SPN +www.rosettaproject.org -##---------------------------------------------------------------------------- +#---------------------------------------------------------------------------- # Sometimes (i.e. often!) fast-redirects catches things by mistake #---------------------------------------------------------------------------- {-fast-redirects} @@ -807,50 +1276,94 @@ login.passport.com/logout\.(asp|srf)\? #MASTER# PROBLEM-URL: http://www.fileplanet.com download.com.com/redir\? www.fileplanet.com/redir\.asp\? -#MASTER# PROBLEM-URL: http://www.washingtonpost.com/ -.washingtonpost.com +#MASTER# PROBLEM-URL: http://web.archive.org/web/19970715180251/http://www.gmd.de/ +web.archive.org +#MASTER# PROBLEM-URL: http://cyber.law.harvard.edu/filtering/china/test/ +.edu +#MASTER# PROBLEM-URL: http://web.archive.org +.archive.org +#MASTER# PROBLEM-URL: http://www.guenstiger.de/gt/link.asp?url=http://www.edv-supermarkt.de&source=produkt=238284&USID=00086443917155&hnr=2199&pnr=238284&ppr=158,00 +www.guenstiger.de +#MASTER# PROBLEM-URL: http://anon.free.anonymizer.com/http://www.privoxy.org/ +.anonymizer.com +#MASTER# PROBLEM-URL: http://www.mailtothefuture.com/public/logon?http://www.mailtothefuture.com/ +www.mailtothefuture.com +#MASTER# PROBLEM-URL: http://support.microsoft.com/default.aspx?scid=KB;en-us;q219110 +support.microsoft.com/ +#MASTER# PROBLEM-URL: http://www.alexa.com/data/details/traffic_details?q=blogspot&url=http://www.blogalia.com +www.alexa.com +#MASTER# PROBLEM-URL: http://www.translate.ru/url/tran_url.asp?lang=es&url=http%3A%2F%2Fos2progg.by.ru%2Findex.shtml&direction=rs&template=General&cp1=NO&cp2=NO&autotranslate=on&transliterate=on&psubmit2.x=68&psubmit2.y=12 +www.translate.ru/url/ #---------------------------------------------------------------------------- -# No filtering for sourcecode +# No filtering for sourcecode or other automatically parsed content #---------------------------------------------------------------------------- {-filter} #MASTER# PROBLEM-URL: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/current/ cvs. +/.*(cvs(view|web)|viewcvs) #MASTER# PROBLEM-URL: http://liveupdate.symantec.com/ennlu.x86 +#MASTER# REMARKS: Jeez, could you please stay with one of them? liveupdate.symantec.com +liveupdate.liveupdatesymantec.com +liveupdate.symantecliveupdate.com +#MASTER# PROBLEM-URL: http://www.bookmarklets.com/ +www.bookmarklets.com +#MASTER# PROBLEM-URL: http://www.squarefree.com/bookmarklets/ +www.squarefree.com/bookmarklets/ +#MASTER# DONT-VERIFY +#MASTER# REMARKS: Used by Mac OSX's automatic software update feature +swquery.apple.com +swscan.apple.com +#MASTER# PROBLEM-URL: http://atl.speakeasy.net/300k +#MASTER# REMARKS: These are various US DSL speed tests sites, where MIME is wrong +.speakeasy.net/\d+k +#MASTER# PROBLEM-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=185033 +.debian.org +#MASTER# DONT-VERIFY +#MASTER# REMARKS: Popular bug-tracking system - likely to contain code +bugzilla. +.tldp.org #---------------------------------------------------------------------------- # These sites suffer from a bug in PHP < 4.2.3 (ob_gzhandler broken; # workaround is to use zlib.output_compression): +# (Section obsolete as of Privoxy 3.0.3, which has workaround) #---------------------------------------------------------------------------- -{-prevent-compression} +#{-prevent-compression} #MASTER# PROBLEM-URL: http://www.powie.de/ -www.powie.de +#www.powie.de #MASTER# PROBLEM-URL: http://www.phpcenter.de/ -www.phpcenter.de -#MASTER# PROBLEM-URL: http://www.debianhelp.org/ -www.debianhelp.org +#www.phpcenter.de #MASTER# PROBLEM-URL: http://www.timeanddate.com -www.timeanddate.com +#www.timeanddate.com #MASTER# PROBLEM-URL: http://www.pclinuxonline.com/ #MASTER# PROBLEM-URL: http://pclinuxonline.com/ -.pclinuxonline.com -#MASTER# PROBLEM-URL: http://www.dhd24.com/ -www.dhd24.com -#MASTER# PROBLEM-URL: http://www.linuxandmain.com/ -.linuxandmain.com -#MASTER# PROBLEM-URL: http://www.ofb.biz/ -.ofb.biz +#.pclinuxonline.com #MASTER# PROBLEM-URL: http://www.dungeoncrawl.org/ -.dungeoncrawl.org -#MASTER# PROBLEM-URL: http://www.deviantart.com/ -.deviantart.com -#MASTER# PROBLEM-URL: http://www.planetspiele.de/wbboard/ -www.planetspiele.de/wbboard/ +#.dungeoncrawl.org #MASTER# PROBLEM-URL: http://www.digitalspy.co.uk/ -www.digitalspy.co.uk -#MASTER# PROBLEM-URL: http://www.dealnews.com/ -.dealnews.com +#www.digitalspy.co.uk +#MASTER# PROBLEM-URL: http://www.audio-illumination.org/forums/ +#www.audio-illumination.org/forums/ +#MASTER# PROBLEM-URL: http://www.catchword.com/ +#www.catchword.com +#MASTER# PROBLEM-URL: http://www.ubernet.org +#www.ubernet.org +#MASTER# PROBLEM-URL: http://www.ooodocs.org/ +#www.ooodocs.org +#MASTER# PROBLEM-URL: http://www.ntcompatible.com/ +#www.ntcompatible.com +#MASTER# PROBLEM-URL: http://www.winehq.com/ +#.winehq.com +#MASTER# PROBLEM-URL: http://www.dotcomtod.de/ +#.dotcomtod.de/ +#MASTER# PROBLEM-URL: http://www.tweakers.net +#.tweakers.net +#MASTER# PROBLEM-URL: http://www.troublesathome.nl +#.troublesathome.nl +#MASTER# PROBLEM-URL: http://www.art.softshape.com +#.art.softshape.com #---------------------------------------------------------------------------- # The first frame of the gif animation is more useful here: @@ -868,6 +1381,73 @@ www.digitalspy.co.uk .max.de #MASTER# PROBLEM-URL: http://www.unmuseum.org/pirate.htm www.unmuseum.org +#MASTER# PROBLEM-URL: http://www.connected-media.com/riven/hints.htm +www.connected-media.com/.*/hints\.htm +#MASTER# PROBLEM-URL: http://www.pricegrabber.com/search_getprod.php?masterid=580330&zip_code=92840&found=1&ut=40a6c41f2c9d1244 +www.pricegrabber.com/search_getprod.php +#MASTER# PROBLEM-URL: http://www.ebgames.com/ebx/categories/products/product.asp?pf_id=158422 +www.ebgames.com/ebx/.*/product.asp\? +#MASTER# PROBLEM-URL: http://www.cnn.com/WORLD/ +#MASTER# REMARKS: URL-based filtering is enough here. 120x90 content images +.cnn.com +#MASTER# PROBLEM-URL: http://gamespot.com/gamespot/filters/0,10850,6013054,00.html +#MASTER# REMARKS: 120x90 content images +.gamespot.com/gamespot +.cnet.com +#MASTER# PROBLEM-URL: http://www.connected-media.com/riven/hint.htm +www.connected-media.com/riven/ +#MASTER# PROBLEM-URL: http://www.wral.com/ +www.wral.com +#MASTER# PROBLEM-URL: http://www.canada.com/calgary/ +www.canada.com +#MASTER# PROBLEM-URL: http://www.theonionavclub.com +www.theonionavclub.com +#MASTER# PROBLEM-URL: http://www.lowermybills.com/servlet/LMBServlet?the_action=NavigateLongDistanceResults&sourceid=meweapu7att203500227&areacode=770&prefix=650&Go.x=23&Go.y=9 +#MASTER# REMARKS: Actually needs banners +www.lowermybills.com +#MASTER# PROBLEM-URL: http://www.theonionavclub.com +www.theonionavclub.com +#MASTER# PROBLEM-URL: http://www.care2.com/send/catbirthd1.html +www.care2.com +#MASTER# PROBLEM-URL: http://www.cartoonnetwork.com/ +www.cartoonnetwork.com/ +#MASTER# PROBLEM-URL: http://www.anybrowser.org/campaign/ +www.anybrowser.org +#MASTER# PROBLEM-URL: http://images.google.de/images?q=cookie+monster&svnum=10&hl=de&lr=&ie=UTF-8&oe=UTF-8&start=40&sa=N +images.google. +#MASTER# PROBLEM-URL: http://www.local6.com/news/1821238/detail.html +www.local6.com/ +#MASTER# PROBLEM-URL: http://www.pbs.org/wgbh/pages/roadshow/series/highlights/2003/albuquerque/index.html +www.pbs.org/wgbh/pages/roadshow/series +#MASTER# PROBLEM-URL: http://objects.povworld.org/cat/Toys/for_Adults/ +objects.povworld.org/cat/ +#MASTER# PROBLEM-URL: http://www.xach.com/gimp/tutorials/tiles.html +www.xach.com/gimp/ +#MASTER# PROBLEM-URL: http://www.mapquest.com/directions/main.adp?go=1&do=nw&ct=NA&1y=US&1a=255+w+88+st&1p=&1c=&1s=&1z=10024&2y=US&2a=20+milltown+rd&2p=&2c=&2s=&2z=10509&lr=2 +#MASTER# REMARKS: The destination map at the bottom of the page. +www.mapquest.com/directions/ +#MASTER# PROBLEM-URL: http://www.theonion.com/ +www.theonion.com/ +#MASTER# PROBLEM-URL: http://www.bookofratings.com/dangersymbols2.html +www.bookofratings.com +#MASTER# PROBLEM-URL: http://www.pattilupone.net/gallery.html +www.pattilupone.net/gallery.html +#MASTER# PROBLEM-URL: http://www.animositisomina.com/discog/present.php4 +www.animositisomina.com/discog/ +#MASTER# PROBLEM-URL: http://www.gamespot.com/pc/rpg/deusexinvisiblewar/screenindex.html +www.gamespot.com/.*/screenindex\.html +#MASTER# PROBLEM-URL: http://www.ambrosiasw.com/games/evn/desktops.html +www.ambrosiasw.com/ +#MASTER# PROBLEM-URL: http://www.capitalnews9.com/ +www.capitalnews9.com +#MASTER# PROBLEM-URL: http://www.golitestore.com/store/products.asp?dept=1003 +www.golitestore.com/store +#MASTER# PROBLEM-URL: http://www.thinkgeek.com/ +www.thinkgeek.com/ +#MASTER# PROBLEM-URL: http://oca.microsoft.com/en/Welcome.asp +.microsoft.com +#MASTER# PROBLEM-URL: http://javabog.dk/ijk/ +javabog.dk/ijk/ #---------------------------------------------------------------------------- # These don't work without the referrer information: @@ -883,6 +1463,11 @@ printerfriendly.abcnews.com www.amazon.de/exec/obidos/clipserve/ #MASTER# PROBLEM-URL: http://www.lufthansa.de/ http://www.lufthansa.com/ http://cms.lufthansa.com/ .lufthansa. +#MASTER# REMARKS: These are movie clips, linked from http://us.imdb.com +.totaleclips.com +#MASTER# PROBLEM-URL: http://www.mandrakelinux.com/en/ftp.php3 +#MASTER# REMARKS: Link to download page breaks +www.mandrakelinux.com/en/ftp.php3 #---------------------------------------------------------------------------- # These animated gifs are either useful or nice: @@ -895,16 +1480,57 @@ www.amazon.de/exec/obidos/clipserve/ #MASTER# PROBLEM-URL: http://www.ameritrade.com #MASTER# REMARKS: Animated link texts www.ameritrade.com +#MASTER# PROBLEM-URL: http://www.myrealbox.com/a?B.KL.U6wQ.d +#MASTER# REMARKS: Bogus web server doesn't close connection -> deanimation doesn't terminate +www.myrealbox.com +#MASTER# PROBLEM-URL: http://weather.chicagotribune.com/radar/station.asp?ID=LOT19&type=loop +#MASTER# REMARKS: These are weather radar images. +.wunderground.com +#MASTER# PROBLEM-URL: http://www.freewarepalm.com/games/spacetrader.shtml +#MASTER# REMARKS: Alternating screenshots +www.freewarepalm.com/images/products +#MASTER# PROBLEM-URL: http://www.capitalnews9.com/ +images.newsx.cc/news9albany_media/weather/ +#MASTER# PROBLEM-URL: http://www.wunderground.com/radar/station.asp?ID=MPX19&type=loop&clutter=1 +66.28.250.180/data/ +#MASTER# PROBLEM-URL: http://www.stanford.edu/group/pandegroup/folding/ +www.stanford.edu/group/pandegroup/folding/villin/ +#MASTER# PROBLEM-URL: http://www.teamquest.com/html/gunther/laquiz.shtml +www.teamquest.com/gifs/gunther/ #---------------------------------------------------------------------------- # These sites are so abusive that we need to kill all JS event bindings (and # probably a break a lot along the way) #---------------------------------------------------------------------------- -{+filter{js-events}} -#MASTER# PROBLEM-URL: http://www..planetspiele.de/ +{+filter{js-radical}} +#MASTER# PROBLEM-URL: http://www.planetspiele.de/ .planetspiele.de 216.12.219.40 +#---------------------------------------------------------------------------- +# The "site-specifics" filter has special cures for problems found here: +#---------------------------------------------------------------------------- +{+filter{site-specifics}} +#MASTER# PROBLEM-URL: http://www.spiegel.de/static/js/flash-plugin.js +www.spiegel.de/static/js/flash-plugin\.js +#MASTER# PROBLEM-URL: http://www.quelle-bausparkasse.de/ +www.quelle-bausparkasse.de/$ +#MASTER# PROBLEM-URL: http://de.groups.yahoo.com/group/die-spinner/interrupt?st=2&ln=die-spinner&m=1&done=%2Fgroup%2Fdie-spinner%2Fmessage%2F416 +.groups.yahoo.com/group/ +#MASTER PROBLEM-URL: http://www.nytimes.com/ +www.nytimes.com/ + +#---------------------------------------------------------------------------- +# Content under these TLDs is most probably in character sets which the +# demoronizer filter would mess up +#---------------------------------------------------------------------------- +{-filter{demoronizer}} +.jp +.cn +.tw +.ru +.kr + #---------------------------------------------------------------------------- # Misc special rules: #---------------------------------------------------------------------------- @@ -912,8 +1538,11 @@ www.ameritrade.com #MASTER# PROBLEM-URL: http://www.friendscout24.de/ #MASTER# REMARKS: Needs content-cookies for cookie test on index page; needs webbugs for storing profile(!) www.friendscout24.de +#MASTER# PROBLEM-URL: http://www.webreference.com/js/column8/property.html +#MASTER# REMARKS: Explains how content cookies work +www.webreference.com/js/column8/property.html -{-deanimate-gifs -filter{popups} -kill-popups} +{-deanimate-gifs -filter{all-popups} -kill-popups} #MASTER# PROBLEM-URL: http://www.valueclick.com/html/ #MASTER# REMARKS: Know your enemy ;-) www.valueclick.com @@ -929,6 +1558,9 @@ realguide.real.com/games #MASTER# PROBLEM-URL: http://www.linuxtoday.com/ #MASTER# REMARKS: /adi has HTML snipplets for use in IFRAMEs .doubleclick.net/adi +#MASTER# PROBLEM-URL: http://maps.yahoo.com/ +#MASTER# REMARKS: /AVE/iview has HTML snipplets for use in IFRAMEs +view.atdmt.com/(.*/)?iview/ {+block} #MASTER# BLOCK-REFERRER: http://www.geocities.com/the_sockman1/index.html @@ -944,3 +1576,71 @@ www.geocities.com/js_source #MASTER# PROBLEM-URL: http://www.dn.se/ #MASTER# REMARKS: Can't catch by size or location www.dn.se + +{-filter{js-annoyances}} +#MASTER# PROBLEM-URL: http://www.munichre.com/ +#MASTER# REMARKS: Endless reload loop if referrer info supressed +www.munichre.com +#MASTER# PROBLEM-URL: http://www.sfgate.com +.sfgate.com +#MASTER# PROBLEM-URL: http://www.nasa.gov +#MASTER# REMARKS: No progress past main page without js-annoyances +.nasa.gov + +{-filter{unsolicited-popups}} +#MASTER# DONT-VERIFY +#MASTER# REMARKS: Breaks Movable Type's admin interface (http://www.movabletype.org/) +/.*mt.cgi$ +#MASTER# PROBLEM-URL: http://www.discovery.de/ +.discovery.de +#MASTER# PROBLEM-URL: http://www.bankrate.com/yclc/calc/mortgage-calculator/mortgage-calculator.asp? +www.bankrate.com/brm/ +#MASTER# PROBLEM-URL: http://www.ukoln.ac.uk/cgi-bin/dcdot.pl?mode=auto&url=http://www.skripczynski.de/people/skripi/bookmark.shtml +www.ukoln.ac.uk/cgi-bin/dcdot.pl +#MASTER# PROBLEM-URL: http://www.metrolounge.de +www.metrolounge.de +#MASTER# PROBLEM-URL: http://www.mcmaster.com +www.mcmaster.com/products.html +#MASTER# PROBLEM-URL: http://www.nbc4.com/news/2672416/detail.html +cf.nbc4.com/ +#MASTER# PROBLEM-URL: http://www.hh.schule.de/ak/nt/ +www.hh.schule.de/ak/nt/ + +{+fast-redirects -block} +#MASTER# PROBLEM-URL: http://isbn.nu/0596001088/price/2.html +www.commission-junction.com/track/ +#MASTER# PROBLEM-URL: http://uk.rd.yahoo.com/M=200059723.200849546.202365062.200414073/D=ukhmpg/S=15426100:TEAR/A=200396897/R=1119/id=img1_nocap_dial/*http://ad.uk.doubleclick.net/clk;5982435;8261020;g?http://www.lunnpoly.com +#MASTER# REMARKS: Basically all of Yahoo's outbound links +.*rd.yahoo.com/ + +{-filter{webbugs}} +#MASTER# REMARKS: Has nasty webbugs-in-JS-string syntaxy problem +www.meteo.fr + +{+block} +#MASTER# PROBLEM-URL: http://www.anti-leech.com/theft_example.html +#MASTER# REMARKS: Lame attempt at banning ad-blockers. Used by other websites as well. +/antitheft\.php + +{+filter{tiny-textforms}} +.sourceforge.net/tracker + +{+downgrade-http-version} +#MASTER# REMARKS: This is work-around for CUPS http configuration. +:631 +#MASTER# PROBLEM-URL: http://cr.yp.to/ +cr.yp.to/ +#MASTER# PROBLEM-URL: http://www.canada.com/vancouver/ +www.canada.com/ + +{ -crunch-outgoing-cookies \ + -crunch-incoming-cookies \ + +session-cookies-only \ +} +www.versiontracker.com/ + +# The JS abuse hall of shame: +# +{ +filter{js-events} } +#MASTER# PROBLEM-URL: http://www.pharmcast.com/WarningLetters/Yr2002/December2002/J&J1202.htm +www.pharmcast.com/ diff --git a/default.filter b/default.filter index b127c023..f4d1b1a7 100644 --- a/default.filter +++ b/default.filter @@ -2,11 +2,11 @@ # # File : $Source: /cvsroot/ijbswa/current/default.filter,v $ # -# $Id: default.filter,v 1.17 2002/11/12 16:16:49 oes Exp $ +# $Id: default.filter,v 1.11.2.23 2004/02/17 13:34:01 oes Exp $ # # Purpose : Rules to process the content of web pages # -# Copyright : Written by and Copyright +# Copyright : Written by and Copyright (C) 2001 - 2004 the # Privoxy team. http://www.privoxy.org/ # # We value your feedback. However, to provide you with the best support, @@ -78,16 +78,16 @@ FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse # Get rid of Javascript referrer tracking. # Test page: http://www.javascript-page.com/referrer.html # -s|document\.referrer|"Not Your Business!"|gisU +s|(?:\w+\.)+referrer|"Not Your Business!"|gisU # The status bar is for displaying link targets, not pointless blahblah -# -s/(([\n =;{}]|window\.)(default)?status)\s*=\s*((['"]).*?\5)/if(typeof(this.href) != 'undefined') $1 = $4 + ' URL: ' + this.href;else return false/ig +# +s/(\W\s*)((this|window)\.(default)?status)\s*=\s*((['"]).*?\6)/$1if(typeof(this.href) != 'undefined') $2 = $5 + ' URL: ' + this.href;else return false/ig # Kill OnUnload popups. Yummy. # Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html # -s/(]*)onunload(.*>)/$1never$2/siU +s/(]*)onunload/$1never/siU s|()|$1never|sigU # If we allow window.open, we want normal window features: @@ -102,11 +102,24 @@ s/(open\s*\([^\)]+toolbar=)(["']?)(?:no|0)\2/$1$2yes$2/sigU s/(open\s*\([^\)]+directories=)(["']?)(?:no|0)\2/$1$2yes$2/sigU s/(open\s*\([^\)]+fullscreen=)(["']?)(?:yes|1)\2/$1$2no$2/sigU s/(open\s*\([^\)]+always(?:raised|lowered)=)(["']?)(?:yes|1)\2/$1$2no$2/sigU -s/(open\s*\([^\)]+zlock=)(["']?)(?:yes|1)\2/$1$2no$2/sigU +s/(open\s*\([^\)]+z-?lock=)(["']?)(?:yes|1)\2/$1$2no$2/sigU s/(open\s*\([^\)]+hotkeys=)(["']?)(?:yes|1)\2/$1$2no$2/sigU -s/(open\s*\([^\)]+titlebar=)(["']?)(?:yes|1)\2/$1$2yes$2/sigU +s/(open\s*\([^\)]+titlebar=)(["']?)(?:no|0)\2/$1$2yes$2/sigU +s/(open\s*\([^\)]+always(?:raised|lowered)=)(["']?)(?:yes|1)\2/$1$2no$2/sigU +################################################################################# +# +# js-events: Kill all JS event bindings and timers (Radically destructive! Only for extra nasty sites) +# +################################################################################# +FILTER: js-events Kill all JS event bindings and timers (Radically destructive! Only for extra nasty sites) + +s/(on|event\.)((mouse(over|out|down|up|move))|(un)?load|contextmenu|selectstart)/never/ig +# Not events, but abused on the same type of sites: +s/(alert|confirm)\s*\(/concat(/ig +s/settimeout\(/concat(/ig + ################################################################################# # # html-annoyances: Get rid of particularly annoying HTML abuse @@ -123,9 +136,9 @@ s/(]+status=)(['"]?)(?:no|0)\2/$1$2yes1$2/igU s/(]+scrolling=)(['"]?)(?:no|0)\2/$1$2auto$2/igU s/(]+menubar=)(['"]?)(?:no|0)\2/$1$2yes$2/igU -# The tag was a crime! +# The and tags were crimes! # -s*|**ig +s---sigU ################################################################################# @@ -135,9 +148,9 @@ s*|**ig ################################################################################# FILTER: content-cookies Kill cookies that come in the HTML or JS content -# JS cookies, like found on privacy.net: +# JS cookies, except those used by antiadbuster.com to detect us: # -s|document\.cookie(?=[ \t\r\n]*=)|ZappedCookie|ig +s|(\w+\.)+cookie(?=[ \t\r\n]*=)(?!='aab)|ZappedCookie|ig # HTML cookies: # @@ -146,53 +159,41 @@ s|||igU ################################################################################# # -# webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking) +# refresh-tags: Kill automatic refresh tags (for dial-on-demand setups) # ################################################################################# -FILTER: webbugs Squish WebBugs (1x1 invisible GIFs used for user tracking) - -s/]*(?:width|height)\s*=\s*['"]?1(?=\D)[^>]*(?:width|height)\s*=\s*['"]?1(?=\D)[^>]*?>//siUg - +FILTER: refresh-tags Kill automatic refresh tags (for dial-on-demand setups) -################################################################################## -# -# popups: Kill all popups in JS and HTML +# Note: Only deactivates refreshes with more than 9 seconds delay to +# preserve monster-stupid but common redirections via meta tags. # -################################################################################# -FILTER: popups Kill all popups in JS and HTML - -s/([\n =;{}]|window\.)open\s*\\?\(/$1concat(/ig # JavaScript -s/ target\s*=\s*(['"]?)(_blank|_new)\1?/ notarget/ig # HTML +s/\2]*))?\2/]*)framespacing=(['"]?)(no|0)\2/$1/igU -s/(]*)frameborder=(['"]?)(no|0)\2/$1/igU -s/(]*)border=(['"]?)(no|0)\2/$1/igU -s/(]*)noresize/$1/igU -s/(]*)frameborder=(['"]?)(no|0)\2/$1/igU -s/(]*)scrolling=(['"]?)(no|0)\2/$1/igU +s+([^'"]\s*)(?=\s*[^'"])+$1+isU +s+([^\w\s.]\s*)((window|this|parent)\.)?open\s*\(+$1PrivoxyWindowOpen(+ig +s+([^'"]\s*)(?!\s*(\\n|'|"))+$1+iU -################################################################################# +################################################################################## # -# refresh-tags: Kill automatic refresh tags (for dial-on-demand setups) +# all-popups: Kill all popups in JavaScript and HTML # ################################################################################# -FILTER: refresh-tags Kill automatic refresh tags (for dial-on-demand setups) +FILTER: all-popups Kill all popups in JavaScript and HTML -# Note: Only deactivates refreshes with more than 9 seconds delay to -# preserve monster-stupid but common redirections via meta tags. -# -s/\2]*))?\2/ tags to make the banners-by-* filters more effective # @@ -202,12 +203,12 @@ FILTER: img-reorder Reorder attributes in tags to make the banners-by-* fi # In the first step src is moved to the start, then width is moved to the second # place to guarantee an order of src, width, height. # This makes banners-by-size more effective and allows both banners-by-size -# and banners-by-link to preserve the original image URL in the alt attribute. +# and banners-by-link to preserve the original image URL in the title attribute. s|]*) src\s*=\s*(['"])([^>\\\2]+)\2|]*) src\s*=\s*([^'">\\\s]+)|\\\\2]+\2\|[^'">\\\s]+?))([^>]*)width\s*=\s*(["']?)(\d+?)|\\\\2]+\2\|[^'">\\\s]+?))([^>]*)width\s*=\s*(["']?)(\d+?)\4|\\\\2]+\2\|[^'">\\\s]+?))([^>]*)width\s*=\s*(["']?)(\d+? # # Note: Use http://config.privoxy.org/send-banner?type=trans for a transparent 1x1 image # Use http://config.privoxy.org/send-banner?type=pattern for a grey/white pattern image -# Use http://config.privoxy.org/send-banner?type=custom for the image specified in config # Use http://config.privoxy.org/send-banner?type=auto to auto-select. # # Note2: Use img-reorder before this filter to ensure maximum matching success @@ -229,32 +229,32 @@ s|\\\\2]+\2\|[^'">\\\s]+?))([^>]*)width\s*=\s*(["']?)(\d+? FILTER: banners-by-size Kill banners by size # 88*31 -s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)88\4)[^>]*?(height=(['"]?)31\6)[^>]*>@$1Killed-$2-by-size$1@sig +s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)88\4)[^>]*?(height=(['"]?)31\6)[^>]*>@@sig # 120*60, 120*90, 120*240, 120*600 -s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)120\4)[^>]*?(height=(['"]?)(?:600?|90|240)\6)[^>]*>@$1Killed-$2-by-size$1@sig +s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)120\4)[^>]*?(height=(['"]?)(?:600?|90|240)\6)[^>]*>@@sig # 125*125 -s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)125\4)[^>]*?(height=(['"]?)125\6)[^>]*>@$1Killed-$2-by-size$1@sig +s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)125\4)[^>]*?(height=(['"]?)125\6)[^>]*>@@sig # 160*600 -s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)160\4)[^>]*?(height=(['"]?)600\6)[^>]*>@$1Killed-$2-by-size$1@sig +s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)160\4)[^>]*?(height=(['"]?)600\6)[^>]*>@@sig # 180*150 -s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)180\4)[^>]*?(height=(['"]?)150\6)[^>]*>@$1Killed-$2-by-size$1@sig +s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)180\4)[^>]*?(height=(['"]?)150\6)[^>]*>@@sig # 234*60, 468*60 (Most Banners!) -s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)(?:234|468)\4)[^>]*?(height=(['"]?)60\6)[^>]*>@$1Killed-$2-by-size$1@sig +s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)(?:234|468)\4)[^>]*?(height=(['"]?)60\6)[^>]*>@@sig # 240*400 -s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)240\4)[^>]*?(height=(['"]?)400\6)[^>]*>@$1Killed-$2-by-size$1@sig +s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)240\4)[^>]*?(height=(['"]?)400\6)[^>]*>@@sig # 250*250, 300*250 -s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)(?:250|300)\4)[^>]*?(height=(['"]?)250\6)[^>]*>@$1Killed-$2-by-size$1@sig +s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)(?:250|300)\4)[^>]*?(height=(['"]?)250\6)[^>]*>@@sig # 336*280 -s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)336\4)[^>]*?(height=(['"]?)280\6)[^>]*>@$1Killed-$2-by-size$1@sig +s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)336\4)[^>]*?(height=(['"]?)280\6)[^>]*>@@sig # Note: 200*50 was also proposed, but it probably causes too much collateral damage: # -#s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)200\4)[^>]*?(height=(['"]?)50\6)[^>]*>@$1Killed-$2-by-size$1@sig +#s@\\\1\s]+)\1)?[^>]*?(width=(['"]?)200\4)[^>]*?(height=(['"]?)50\6)[^>]*>@@sig ################################################################################# # -# banners-by-link: Kill banners by their links to known clicktrackers +# banners-by-link: Kill banners by their links to known clicktrackers (Experimental) # ################################################################################# FILTER: banners-by-link Kill banners by their links to known clicktrackers @@ -268,92 +268,58 @@ s@\1\s]*?(?:\ | tracker | counter # common \ | adlog\.pl # see sf.net \ )[^>\1\s]*)\1[^>]*>\s*\\\3\s]+)\3)?[^>]*((?:width|height)\s*=\s*(['"]?)\d+?\6)[^>]*((?:width|height)\s*=\s*(['"]?)\d+?\8)[^>]*>\ -@$1Killed@sigx +@@sigx # Rare case w/o explicit dimensions: # -s@\1\s]*?(?:adclick|atwola\.com/(?:link|redir)|doubleclick\.net/jump/|tracker|counter|adlog\.pl)[^>\1\s]*)\1[^>]*>\s*\\\3\s]+)\3)?[^>]*>@$1Killed@sig +s@\1\s]*?(?:adclick|atwola\.com/(?:link|redir)|doubleclick\.net/jump/|tracker|counter|adlog\.pl)[^>\1\s]*)\1[^>]*>\s*\\\3\s]+)\3)?[^>]*>@@sig -################################################################################# -# -# fun: Text replacements for subversive browsing fun! -# -################################################################################# -FILTER: fun Text replacements for subversive browsing fun! -s/microsoft(?!.com)/MicroSuck/ig - -# Buzzword Bingo (example for extended regex syntax) +################################################################################ # -s* industry[ -]leading \ -| cutting[ -]edge \ -| customer[ -]focused \ -| market[ -]driven \ -| award[ -]winning # Comments are OK, too! \ -| high[ -]performance \ -| solutions[ -]based \ -| unmatched \ -| unparalleled \ -| unrivalled \ -*BINGO! \ -*igx - - -################################################################################# -# -# nimda: Remove Nimda (virus) code +# webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking) # ################################################################################# -FILTER: nimda Remove Nimda (virus) code +FILTER: webbugs Squish WebBugs (1x1 invisible GIFs used for user tracking) -s%%
WARNING: This Server is infected with Nimda!%g +s/]*(?:width|height)\s*=\s*['"]?[01](?=\D)[^>]*(?:width|height)\s*=\s*['"]?[01](?=\D)[^>]*?>//siUg ################################################################################# # -# shockwave-flash: Kill embedded Shockwave Flash objects +# tiny-textforms: Extend those tiny textareas up to 40x80 and kill the hard wrap # ################################################################################# -FILTER: shockwave-flash Kill embedded Shockwave Flash objects +FILTER: tiny-textforms Extend those tiny textareas up to 40x80 and kill the hard wrap -s|]*application/x-shockwave-flash.*||sigU +s/(]*?)(?:\s*(?:rows|cols)=(['"]?)\d+\2)+/$1 rows=$2\40$2 cols=$2\80$2/ig +s/(]*?)wrap=(['"]?)hard\2/$1/ig ################################################################################# # -# quicktime-kioskmode: Make Quicktime movies saveable +# jumping-windows: Prevent windows from resizing and moving themselves # ################################################################################# -FILTER: quicktime-kioskmode Make Quicktime movies saveable +FILTER: jumping-windows Prevent windows from resizing and moving themselves -s/(]*)kioskmode\s*=\s*(["']?)true\2/$1/ig +s/(?:window|this|self)\.(?:move|resize)(?:to|by)\(/''.concat(/ig ################################################################################# # -# js-events: Kill all JS event bindings (Radically destructive! Only for extra nasty sites) +# frameset-borders: Give frames a border, make them resizable and scrollable # ################################################################################# -FILTER: js-events Kill all JS event bindings (Radically destructive! Only for extra nasty sites) - -s/(on|event\.)((mouse(over|out|down|up|move))|(un)?load|contextmenu|selectstart)/never/ig -# Not events, but abused on the same type of sites: -s/(alert|confirm)\s*\(/concat(/ig - +FILTER: frameset-borders Give frames a border and make them resizable -################################################################################# -# -# crude-parental: Crude parental filtering? (Use along with a suitable blocklist). -# Shows how to deny access to whole page based on a keyword. -# -################################################################################# -FILTER: crude-parental Crude parental filtering (demo only) +s/(]*)framespacing=(['"]?)(no|0)\2/$1/igU +s/(]*)frameborder=(['"]?)(no|0)\2/$1/igU +s/(]*)border=(['"]?)(no|0)\2/$1/igU +s/(]*)noresize/$1/igU +s/(]*)frameborder=(['"]?)(no|0)\2/$1/igU +s/(]*)scrolling=(['"]?)(no|0)\2/$1/igU -# (Note: Middlesex, Sussex and Essex are counties in the UK, not rude words) -# (Note #2: Is 'sex' a rude word?!) - -s%^.*(?Blocked

Blocked due to possible adult content. Please see this site.

%is -s+^.*warez.*$+No Warez

You're not searching for illegal stuff, are you?

+is ################################################################################# @@ -366,7 +332,7 @@ s+^.*warez.*$+No Warez

You're not sea # John Walker -- January 1998, http://www.fourmilab.ch/webtools/demoroniser # ################################################################################# -FILTER: demoronizer fixing MS's non-standard use of std charsets. +FILTER: demoronizer Fix MS's non-standard use of standard charsets s/(&\#[0-2]\d\d)\s/$1; /g # per Robert Lynch: http://slate.msn.com//?id=2067547, just a guess. @@ -392,47 +358,244 @@ s/\x97/--/g # per Robert Lynch. s/\x9B/>/g # 155 + +################################################################################# +# +# shockwave-flash: Kill embedded Shockwave Flash objects +# Note: Better just block "/.*\.swf$"! +# +################################################################################# +FILTER: shockwave-flash Kill embedded Shockwave Flash objects + +s|]*macromedia.*||sigU +s|]*(application/x-shockwave-flash\|\.swf).*>(.*)?||sigU + + +################################################################################# +# +# quicktime-kioskmode: Make Quicktime movies saveable +# +################################################################################# +FILTER: quicktime-kioskmode Make Quicktime movies saveable + +s/(]*)kioskmode\s*=\s*(["']?)true\2/$1/ig + + +################################################################################# +# +# fun: Text replacements for subversive browsing fun! +# +################################################################################# +FILTER: fun Text replacements for subversive browsing fun! + +# SCNR +# +s/microsoft(?!.com)/MicroSuck/ig + +# Buzzword Bingo (example for extended regex syntax) +# +s* (?:industry|world)[ -]leading \ +| cutting[ -]edge \ +| customer[ -]focused \ +| market[ -]driven \ +| award[ -]winning # Comments are OK, too! \ +| high[ -]performance \ +| solutions[ -]based \ +| unmatched \ +| unparalleled \ +| unrivalled \ +*$0Bingo! \ +*igx + +# For Germans only +# +s/(M|m)edien(?![^<]*>)/$1ädchen/Ug + +################################################################################# +# +# crude-parental: Crude parental filtering? (Use along with a suitable blocklist). +# Shows how to deny access to whole page based on a keyword. +# +################################################################################# +FILTER: crude-parental Crude parental filtering (demo only) + +# (Note: Middlesex, Sussex and Essex are counties in the UK, not rude words) +# (Note #2: Is 'sex' a rude word?!) + +s%^.*(?Blocked

Blocked due to possible adult content. Please see this site.

%is +s+^.*warez.*$+No Warez

You're not searching for illegal stuff, are you?

+is + + +################################################################################# +# +# IE-Exploits: Disable some known Internet Explorer bug exploits +# +################################################################################# +FILTER: ie-exploits Disable some known Internet Explorer bug exploits + +# Note: This is basically a demo and waits for someone more interested in IE +# security (sic!) to take over. + +# Cross-site-scripting: +# +s%f\("javascript:location.replace\('mk:@MSITStore:C:'\)"\);%alert\("This page looks like it tries to use a vulnerability described here:\n http://online.securityfocus.com/archive/1/298748/2002-11-02/2002-11-08/2"\);%siU + +# Address bar spoofing (http://www.secunia.com/advisories/10395/): +# +s/(]*href[^>]*)(\x01|\x02|\x03|%0[012])/$1MALICIOUS-LINK/ig + +# Nimda: +# +s%%
WARNING: This Server is infected with Nimda!%g + + +################################################################################# +# +# +# site-specifics: Cure for site-specific problems. Don't apply generally! +# +# Note: The fixes contained here are so specific to the problems of the +# particular web sites they are designed for that they would be a +# waste of CPU cycles (or even destructive!) on 99.9% of the web +# sites where they don't apply. +# +################################################################################# +FILTER: site-specifics Cure for site-specific problems. Don't apply generally! + +# www.spiegel.de excludes X11 users from viewing Flash5 objects - shame. +# Apply to: www.spiegel.de/static/js/flash-plugin.js +# +s/indexOf\("x11"\)/indexOf("x13")/ + +# www.quelle-bausparkasse.de uses a very stupid redirect mechanism that +# relies on a webbug being present. Can we tolerate that? No! +# Apply to: www.quelle-bausparkasse.de/$ +# +s/mylogfunc()//g + +# groups.yahoo.com has splash pages that one needs to click through in +# order to access the actual messages. Let the browser do that. Thanks +# to Paul Jobson for this one: +# +s|(?:Continue to message\|Weiter zu Nachricht)||ig + +# monster.com has two very similar gimmicks: +# +s|||i + +s|||i + +# nytimes.com triggers popups through the onload handler of dummy images +# to fool popup-blockers. +# +s|(]*)onload|$1never|sig + +# Pre-check all the "Discard" buttons in GNU Mailman's web interface. +# (This saves a lot of mouse aiming practice when flushing spamtraps) +# +s|( tags enclosed in JS strings +# +# Revision 1.11.2.14 2003/03/19 13:17:50 oes +# - Added filter "site-specifics" to address site specific problems +# - Fixed a small problem in the img-reorder filter +# +# Revision 1.11.2.13 2003/03/18 19:28:59 oes +# Fixed a minor problem in the img-reorder filter +# +# Revision 1.11.2.12 2003/03/15 14:06:58 oes +# - Assorted refinements, optimizations and fixes in the js-annoyances, +# img-reorder, banners-by-size, banners-by-link, webbugs, refresh-tags, +# html-annoyances, content-cookies and fun filters +# - Replaced filter "popups" by choice between two modes: +# - "unsolicited-popups" tries to catch only the unsolicited ones +# - "all-popups" tries to kill them all (as before) +# - New filter "tiny-textforms" Help those tiny or hard-wrap textareas. +# - New filter "jumping-windows" that prevents windows from resizing +# and moving themselves +# - Replaced "nimda" with more general "ie-exploits" filter in which +# all filters for exploits shall be collected +# +# Revision 1.11.2.11 2002/11/12 16:14:43 oes # Exchanged js-annoyance filter against status bar rewrites with improved version by Don Libes # -# Revision 1.16 2002/11/11 13:40:38 oes +# Revision 1.11.2.10 2002/11/11 13:39:47 oes # Make refresh-tags filter work even on incorrect refresh tags like found on usatoday.com # -# Revision 1.15 2002/11/08 16:40:56 oes +# Revision 1.11.2.9 2002/11/08 16:39:17 oes # Made img-reorder more cautious. Fixes bug #632715 # -# Revision 1.14 2002/10/13 21:58:20 hal9 -# Add demoronizer filter to sync with 3.0.1. +# Revision 1.11.2.8 2002/10/13 21:56:52 hal9 +# Adding demoronizer filter. This should include all the common abuses. I have +# left a few of the rare cases commented out (never found these in the wild). # -# Revision 1.13 2002/09/11 16:04:20 oes +# Revision 1.11.2.7 2002/09/25 15:09:39 oes # Preserve original quoting style in tags wherever possible. Fixes Bug #605956 # -# Revision 1.12 2002/09/05 14:55:38 oes -# Synced with the stable branch: -# Revision 1.11.2.6 2002/08/23 14:12:26 oes -# Proofed frameset-borders against "fremaborder=0 border=0" +# Revision 1.11.2.6 2002/08/23 14:12:26 oes +# Proofed frameset-borders against "fremaborder=0 border=0" # -# Revision 1.11.2.5 2002/08/22 15:05:20 oes -# Added Filter to make Quicktime movies saveable (thanks to aaron@linville.org for the idea) +# Revision 1.11.2.5 2002/08/22 15:05:20 oes +# Added Filter to make Quicktime movies saveable (thanks to aaron@linville.org for the idea) # -# Revision 1.11.2.4 2002/08/10 11:32:29 oes -# Attribute values in replacement tags of banners-by-size filter now undelimited. (Fixes bug #592493) +# Revision 1.11.2.4 2002/08/10 11:32:29 oes +# Attribute values in replacement tags of banners-by-size filter now undelimited. (Fixes bug #592493) # -# Revision 1.11.2.3 2002/08/05 11:43:56 oes -# Fixed a bug in the popups filter that was introduced with the last fix :-( +# Revision 1.11.2.3 2002/08/05 11:43:56 oes +# Fixed a bug in the popups filter that was introduced with the last fix :-( # -# Revision 1.11.2.2 2002/08/01 11:20:13 oes -# Fixed bugs 587802, 577802 and an unreported one +# Revision 1.11.2.2 2002/08/01 11:20:13 oes +# Fixed bugs 587802, 577802 and an unreported one # -# Revision 1.11.2.1 2002/07/26 15:18:26 oes -# - All filters reviewed and many shorcomings fixed -# - New filters: img-reorder, banners-by-link and js-events -# - Jobs reorderd because they are now executed in order of -# appearance +# Revision 1.11.2.1 2002/07/26 15:18:26 oes +# - All filters reviewed and many shorcomings fixed +# - New filters: img-reorder, banners-by-link and js-events +# - Jobs reorderd because they are now executed in order of +# appearance # # Revision 1.11 2002/05/24 00:57:18 oes # Made WeBugs job ungreedy; Fixes bug 559190 @@ -530,3 +693,5 @@ s/\x9B/>/g # 155 # # # + + diff --git a/doc/Doxyfile b/doc/Doxyfile deleted file mode 100644 index 18052580..00000000 --- a/doc/Doxyfile +++ /dev/null @@ -1,188 +0,0 @@ -# Doxyfile 1.2.13-20020210 - -#--------------------------------------------------------------------------- -# General configuration options -#--------------------------------------------------------------------------- -PROJECT_NAME = "Privoxy 3.1.1" -PROJECT_NUMBER = -OUTPUT_DIRECTORY = dox -OUTPUT_LANGUAGE = English -EXTRACT_ALL = NO -EXTRACT_PRIVATE = NO -EXTRACT_STATIC = YES -EXTRACT_LOCAL_CLASSES = YES -HIDE_UNDOC_MEMBERS = NO -HIDE_UNDOC_CLASSES = NO -BRIEF_MEMBER_DESC = NO -REPEAT_BRIEF = YES -ALWAYS_DETAILED_SEC = YES -INLINE_INHERITED_MEMB = NO -FULL_PATH_NAMES = NO -STRIP_FROM_PATH = -INTERNAL_DOCS = NO -STRIP_CODE_COMMENTS = NO -CASE_SENSE_NAMES = YES -SHORT_NAMES = NO -HIDE_SCOPE_NAMES = NO -VERBATIM_HEADERS = YES -SHOW_INCLUDE_FILES = NO -JAVADOC_AUTOBRIEF = YES -INHERIT_DOCS = YES -INLINE_INFO = YES -SORT_MEMBER_DOCS = YES -DISTRIBUTE_GROUP_DOC = NO -TAB_SIZE = 8 -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = YES -ALIASES = -ENABLED_SECTIONS = -MAX_INITIALIZER_LINES = 30 -OPTIMIZE_OUTPUT_FOR_C = YES -SHOW_USED_FILES = YES -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- -QUIET = YES -WARNINGS = YES -WARN_IF_UNDOCUMENTED = YES -WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT = ../src/ -FILE_PATTERNS = *.c \ - *.h -RECURSIVE = NO -EXCLUDE = -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = config.h \ - actionlist.h \ - w32res.h \ - pcrs.c \ - pcrs.h -EXAMPLE_PATH = -EXAMPLE_PATTERNS = -EXAMPLE_RECURSIVE = NO -IMAGE_PATH = -INPUT_FILTER = -FILTER_SOURCE_FILES = NO -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- -SOURCE_BROWSER = NO -INLINE_SOURCES = NO -REFERENCED_BY_RELATION = YES -REFERENCES_RELATION = YES -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- -ALPHABETICAL_INDEX = YES -COLS_IN_ALPHA_INDEX = 1 -IGNORE_PREFIX = -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- -GENERATE_HTML = YES -HTML_OUTPUT = html -HTML_FILE_EXTENSION = .html -HTML_HEADER = -HTML_FOOTER = -HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES -GENERATE_HTMLHELP = NO -GENERATE_CHI = NO -BINARY_TOC = NO -TOC_EXPAND = NO -DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = YES -TREEVIEW_WIDTH = 250 -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- -GENERATE_LATEX = NO -LATEX_OUTPUT = latex -LATEX_CMD_NAME = latex -MAKEINDEX_CMD_NAME = makeindex -COMPACT_LATEX = NO -PAPER_TYPE = a4wide -EXTRA_PACKAGES = -LATEX_HEADER = -PDF_HYPERLINKS = NO -USE_PDFLATEX = NO -LATEX_BATCHMODE = NO -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- -GENERATE_RTF = NO -RTF_OUTPUT = rtf -COMPACT_RTF = NO -RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- -GENERATE_MAN = NO -MAN_OUTPUT = man -MAN_EXTENSION = .3 -MAN_LINKS = NO -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- -GENERATE_XML = NO -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- -GENERATE_AUTOGEN_DEF = NO -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = NO -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = YES -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- -TAGFILES = -GENERATE_TAGFILE = -ALLEXTERNALS = NO -EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- -CLASS_DIAGRAMS = YES -HAVE_DOT = NO -CLASS_GRAPH = YES -COLLABORATION_GRAPH = YES -TEMPLATE_RELATIONS = YES -HIDE_UNDOC_RELATIONS = YES -INCLUDE_GRAPH = YES -INCLUDED_BY_GRAPH = YES -GRAPHICAL_HIERARCHY = YES -DOT_IMAGE_FORMAT = gif -DOT_PATH = -DOTFILE_DIRS = -MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1024 -GENERATE_LEGEND = YES -DOT_CLEANUP = YES -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- -SEARCHENGINE = NO -CGI_NAME = search.cgi -CGI_URL = -DOC_URL = -DOC_ABSPATH = -BIN_ABSPATH = /usr/local/bin/ -EXT_DOC_PATHS = diff --git a/doc/pcrs.3 b/doc/pcrs.3 index 2a96d5a0..59e0f227 100644 --- a/doc/pcrs.3 +++ b/doc/pcrs.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2001 Andreas S. Oesterhelt +.\" Copyright (c) 2001-2003 Andreas S. Oesterhelt .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -20,7 +20,7 @@ .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, .\" MA 02111, USA. .\" -.TH PCRS 3 "4 March 2002" "pcrs-0.0.1" +.TH PCRS 3 "2 December 2003" "pcrs-0.0.3" .SH NAME pcrs - Perl-compatible regular substitution. .SH SYNOPSIS @@ -251,21 +251,26 @@ Unsupported options are silently ignored. .RI "The first " subject_length " bytes following " subject " are processed, so" .RI "a " subject_length " that exceeds the actual " subject " is dangerous." -Note that if you want to get your zero-terminated C strings back including their -.RI "termination, you must let " subject_length " include the binary zero, i.e." -set it to -.BI strlen( subject ") + 1." +.RI "Note that for zero-terminated C strings, you should set " subject_length " to" +.BI strlen( subject ) \fR, +so that the dollar metacharacter matches at the end of the string, not after +the string-terminating null byte. For convenience, an extra null byte is +appended to the result so it can again be used as a string. .RI "The " subject " itself is left untouched, and the " *result " is dynamically" .RB "allocated, so it is the caller's responsibility to " free() " it when it's" no longer needed. -.RI "The result's length is written to " *result_length "." +.RI "The result's length (excluding the extra null byte) is written to " *result_length "." .RB "If the job matched, the " PCRS_SUCCESS " flag in" .IB job ->flags is set. + +.SS String subjects +If your + .SS Return value and diagnostics .RB "On success, " pcrs_execute() " returns the number of substitutions that" @@ -419,9 +424,9 @@ int main(int Argc, char **Argv) fprintf(stderr, "%s: compile error: %s (%d).\\n", Argv[0], pcrs_strerror(err), err); } - if (0 > (err = pcrs_execute(job, Argv[2], strlen(Argv[2]) + 1, &result, &newsize))) + if (0 > (err = pcrs_execute(job, Argv[2], strlen(Argv[2]), &result, &newsize))) { - fprintf(stderr, "%s: Exec error: %s (%d).\\n", Argv[0], pcrs_strerror(err), err); + fprintf(stderr, "%s: exec error: %s (%d).\\n", Argv[0], pcrs_strerror(err), err); } else { @@ -446,6 +451,10 @@ The number of capturing subpatterns is currently limited to 33, which is a Bad Thing[tm]. It should be dynamically expanded until it reaches the .SM PCRE limit of 99. +.br +This limitation is particularly embarassing since +.SM PCRE +3.5 has raised the capturing subpattern limit to 65K. All of the above values can be adjusted in the "Capacity" section .RB "of " pcrs.h "." @@ -459,8 +468,8 @@ and should be considered high risk. .SH HISTORY .SM PCRS -was originally written for the Internet Junkbuster project -(http://sourceforge.net/projects/ijbswa/). +was originally written for the Privoxy project +(http://www.privoxy.org/). .SH SEE ALSO .B PCRE(3), perl(1), perlre(1) @@ -468,7 +477,7 @@ was originally written for the Internet Junkbuster project .SH AUTHOR .SM PCRS -is Copyright 2000, 2001 by Andreas Oesterhelt and is +is Copyright 2000 - 2003 by Andreas Oesterhelt and is licensed under the terms of the GNU Lesser General Public License (LGPL), version 2.1, which should be included in this distribution, with the exception that the permission to replace that license with the GNU General Public diff --git a/doc/pdf/privoxy-developer-manual.pdf b/doc/pdf/privoxy-developer-manual.pdf index f1b89617..df8319e7 100644 --- a/doc/pdf/privoxy-developer-manual.pdf +++ b/doc/pdf/privoxy-developer-manual.pdf @@ -1,71 +1,86 @@ %PDF-1.3 %âãÏÓ -1 0 obj<>endobj +1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj -4 0 obj<>endobj -5 0 obj<>endobj -6 0 obj<>endobj -7 0 obj<>endobj -8 0 obj<>endobj -9 0 obj<>endobj -10 0 obj<>endobj -11 0 obj<>endobj -12 0 obj<>endobj -13 0 obj<>endobj -14 0 obj<>endobj -15 0 obj<>endobj -16 0 obj<>endobj -17 0 obj[11 0 R -13 0 R -15 0 R -16 0 R]endobj -18 0 obj<>endobj -19 0 obj<>endobj -20 0 obj<>endobj -21 0 obj<>endobj -22 0 obj<>endobj -23 0 obj<>endobj -24 0 obj<>endobj -25 0 obj<>endobj -26 0 obj<>endobj -27 0 obj<>endobj -28 0 obj<>endobj -29 0 obj<>endobj -30 0 obj<>endobj -31 0 obj<>endobj -32 0 obj<>endobj -33 0 obj<>endobj -34 0 obj<>endobj -35 0 obj<>endobj -36 0 obj<>endobj -37 0 obj<>endobj -38 0 obj<>endobj -39 0 obj<>endobj -40 0 obj<>endobj -41 0 obj<>endobj -42 0 obj<>endobj -43 0 obj<>endobj -44 0 obj<>endobj -45 0 obj<>endobj -46 0 obj<>endobj -47 0 obj<>endobj -48 0 obj<>endobj -49 0 obj<>endobj -50 0 obj<>endobj -51 0 obj<>endobj -52 0 obj<>endobj -53 0 obj<>endobj -54 0 obj<>endobj -55 0 obj<>endobj -56 0 obj<>endobj -57 0 obj<>endobj -58 0 obj<>endobj -59 0 obj<>endobj -60 0 obj<>endobj -61 0 obj<>endobj -62 0 obj<>endobj -63 0 obj[18 0 R +4 0 obj<>endobj +5 0 obj<>endobj +6 0 obj<>endobj +7 0 obj<>endobj +8 0 obj<>endobj +9 0 obj<>endobj +10 0 obj<>endobj +11 0 obj<>endobj +12 0 obj<>endobj +13 0 obj<>endobj +14 0 obj[8 0 R +10 0 R +12 0 R +13 0 R]endobj +15 0 obj<>endobj +16 0 obj<>endobj +17 0 obj<>endobj +18 0 obj<>endobj +19 0 obj<>endobj +20 0 obj<>endobj +21 0 obj<>endobj +22 0 obj<>endobj +23 0 obj<>endobj +24 0 obj<>endobj +25 0 obj<>endobj +26 0 obj<>endobj +27 0 obj<>endobj +28 0 obj<>endobj +29 0 obj<>endobj +30 0 obj<>endobj +31 0 obj<>endobj +32 0 obj<>endobj +33 0 obj<>endobj +34 0 obj<>endobj +35 0 obj<>endobj +36 0 obj<>endobj +37 0 obj<>endobj +38 0 obj<>endobj +39 0 obj<>endobj +40 0 obj<>endobj +41 0 obj<>endobj +42 0 obj<>endobj +43 0 obj<>endobj +44 0 obj<>endobj +45 0 obj<>endobj +46 0 obj<>endobj +47 0 obj<>endobj +48 0 obj<>endobj +49 0 obj<>endobj +50 0 obj<>endobj +51 0 obj<>endobj +52 0 obj<>endobj +53 0 obj<>endobj +54 0 obj<>endobj +55 0 obj<>endobj +56 0 obj<>endobj +57 0 obj<>endobj +58 0 obj<>endobj +59 0 obj<>endobj +60 0 obj<>endobj +61 0 obj<>endobj +62 0 obj<>endobj +63 0 obj<>endobj +64 0 obj<>endobj +65 0 obj<>endobj +66 0 obj<>endobj +67 0 obj<>endobj +68 0 obj<>endobj +69 0 obj<>endobj +70 0 obj<>endobj +71 0 obj<>endobj +72 0 obj<>endobj +73 0 obj<>endobj +74 0 obj<>endobj +75 0 obj[15 0 R +16 0 R +17 0 R +18 0 R 19 0 R 20 0 R 21 0 R @@ -109,49 +124,9 @@ 59 0 R 60 0 R 61 0 R -62 0 R]endobj -64 0 obj<>endobj -65 0 obj<>endobj -66 0 obj<>endobj -67 0 obj<>endobj -68 0 obj<>endobj -69 0 obj<>endobj -70 0 obj<>endobj -71 0 obj<>endobj -72 0 obj<>endobj -73 0 obj<>endobj -74 0 obj<>endobj -75 0 obj<>endobj -76 0 obj<>endobj -77 0 obj<>endobj -78 0 obj<>endobj -79 0 obj<>endobj -80 0 obj<>endobj -81 0 obj<>endobj -82 0 obj<>endobj -83 0 obj<>endobj -84 0 obj<>endobj -85 0 obj<>endobj -86 0 obj<>endobj -87 0 obj<>endobj -88 0 obj<>endobj -89 0 obj<>endobj -90 0 obj<>endobj -91 0 obj<>endobj -92 0 obj<>endobj -93 0 obj<>endobj -94 0 obj<>endobj -95 0 obj<>endobj -96 0 obj<>endobj -97 0 obj<>endobj -98 0 obj<>endobj -99 0 obj<>endobj -100 0 obj<>endobj -101 0 obj<>endobj -102 0 obj<>endobj -103 0 obj<>endobj -104 0 obj<>endobj -105 0 obj[64 0 R +62 0 R +63 0 R +64 0 R 65 0 R 66 0 R 67 0 R @@ -161,9 +136,37 @@ 71 0 R 72 0 R 73 0 R -74 0 R -75 0 R -76 0 R +74 0 R]endobj +76 0 obj<>endobj +77 0 obj<>endobj +78 0 obj<>endobj +79 0 obj<>endobj +80 0 obj<>endobj +81 0 obj<>endobj +82 0 obj<>endobj +83 0 obj<>endobj +84 0 obj<>endobj +85 0 obj<>endobj +86 0 obj<>endobj +87 0 obj<>endobj +88 0 obj<>endobj +89 0 obj<>endobj +90 0 obj<>endobj +91 0 obj<>endobj +92 0 obj<>endobj +93 0 obj<>endobj +94 0 obj<>endobj +95 0 obj<>endobj +96 0 obj<>endobj +97 0 obj<>endobj +98 0 obj<>endobj +99 0 obj<>endobj +100 0 obj<>endobj +101 0 obj<>endobj +102 0 obj<>endobj +103 0 obj<>endobj +104 0 obj<>endobj +105 0 obj[76 0 R 77 0 R 78 0 R 79 0 R @@ -192,109 +195,105 @@ 102 0 R 103 0 R 104 0 R]endobj -106 0 obj<>endobj -107 0 obj<>endobj -108 0 obj<>endobj -109 0 obj<>endobj -110 0 obj[106 0 R -107 0 R -108 0 R -109 0 R]endobj -111 0 obj<>endobj -112 0 obj<>endobj -113 0 obj<>endobj -114 0 obj<>endobj -115 0 obj[112 0 R -114 0 R]endobj -116 0 obj<>endobj -117 0 obj<>endobj -118 0 obj<>endobj -119 0 obj<>endobj -120 0 obj<>endobj -121 0 obj<>endobj -122 0 obj<>endobj -123 0 obj<>endobj -124 0 obj<>endobj -125 0 obj<>endobj -126 0 obj<>endobj -127 0 obj[117 0 R +106 0 obj<>endobj +107 0 obj<>endobj +108 0 obj[107 0 R]endobj +109 0 obj<>endobj +110 0 obj<>endobj +111 0 obj<>endobj +112 0 obj<>endobj +113 0 obj<>endobj +114 0 obj<>endobj +115 0 obj<>endobj +116 0 obj<>endobj +117 0 obj<>endobj +118 0 obj<>endobj +119 0 obj<>endobj +120 0 obj<>endobj +121 0 obj<>endobj +122 0 obj[110 0 R +112 0 R +114 0 R +115 0 R +117 0 R 119 0 R -121 0 R -123 0 R -124 0 R -126 0 R]endobj -128 0 obj<>endobj -129 0 obj<>endobj -130 0 obj[129 0 R]endobj -131 0 obj<>endobj -132 0 obj<>endobj -133 0 obj<>endobj -134 0 obj<>endobj -135 0 obj<>endobj -136 0 obj<>endobj -137 0 obj[132 0 R -134 0 R -136 0 R]endobj -138 0 obj<>endobj -139 0 obj<>endobj -140 0 obj[139 0 R]endobj -141 0 obj<>endobj -142 0 obj<>endobj +121 0 R]endobj +123 0 obj<>endobj +124 0 obj<>endobj +125 0 obj<>endobj +126 0 obj<>endobj +127 0 obj<>endobj +128 0 obj<>endobj +129 0 obj[124 0 R +126 0 R +128 0 R]endobj +130 0 obj<>endobj +131 0 obj<>endobj +132 0 obj[131 0 R]endobj +133 0 obj<>endobj +134 0 obj<>endobj +135 0 obj[134 0 R]endobj +136 0 obj<>endobj +137 0 obj<>endobj +138 0 obj<>endobj +139 0 obj<>endobj +140 0 obj[137 0 R +139 0 R]endobj +141 0 obj<>endobj +142 0 obj<>endobj 143 0 obj[142 0 R]endobj -144 0 obj<>endobj -145 0 obj<>endobj -146 0 obj[145 0 R]endobj -147 0 obj<>endobj -148 0 obj<>endobj -149 0 obj[148 0 R]endobj -150 0 obj<>endobj -151 0 obj<>endobj -152 0 obj[151 0 R]endobj -153 0 obj<>endobj -154 0 obj<>endobj -155 0 obj<>endobj -156 0 obj<>endobj -157 0 obj[154 0 R -156 0 R]endobj -158 0 obj<>endobj -159 0 obj<>endobj -160 0 obj<>endobj -161 0 obj<>endobj -162 0 obj<>endobj -163 0 obj<>endobj -164 0 obj[159 0 R +144 0 obj<>endobj +145 0 obj<>endobj +146 0 obj<>endobj +147 0 obj<>endobj +148 0 obj<>endobj +149 0 obj<>endobj +150 0 obj<>endobj +151 0 obj<>endobj +152 0 obj[145 0 R +147 0 R +149 0 R +151 0 R]endobj +153 0 obj<>endobj +154 0 obj<>endobj +155 0 obj[154 0 R]endobj +156 0 obj<>endobj +157 0 obj<>endobj +158 0 obj<>endobj +159 0 obj<>endobj +160 0 obj<>endobj +161 0 obj<>endobj +162 0 obj<>endobj +163 0 obj<>endobj +164 0 obj<>endobj +165 0 obj<>endobj +166 0 obj<>endobj +167 0 obj<>endobj +168 0 obj<>endobj +169 0 obj<>endobj +170 0 obj<>endobj +171 0 obj<>endobj +172 0 obj<>endobj +173 0 obj<>endobj +174 0 obj<>endobj +175 0 obj<>endobj +176 0 obj<>endobj +177 0 obj<>endobj +178 0 obj<>endobj +179 0 obj<>endobj +180 0 obj<>endobj +181 0 obj<>endobj +182 0 obj<>endobj +183 0 obj<>endobj +184 0 obj<>endobj +185 0 obj<>endobj +186 0 obj[157 0 R +159 0 R 161 0 R -163 0 R]endobj -165 0 obj<>endobj -166 0 obj<>endobj -167 0 obj[166 0 R]endobj -168 0 obj<>endobj -169 0 obj<>endobj -170 0 obj<>endobj -171 0 obj<>endobj -172 0 obj<>endobj -173 0 obj<>endobj -174 0 obj<>endobj -175 0 obj<>endobj -176 0 obj<>endobj -177 0 obj<>endobj -178 0 obj<>endobj -179 0 obj<>endobj -180 0 obj<>endobj -181 0 obj<>endobj -182 0 obj<>endobj -183 0 obj<>endobj -184 0 obj<>endobj -185 0 obj<>endobj -186 0 obj<>endobj -187 0 obj<>endobj -188 0 obj<>endobj -189 0 obj<>endobj -190 0 obj<>endobj -191 0 obj<>endobj -192 0 obj<>endobj -193 0 obj<>endobj -194 0 obj[169 0 R +163 0 R +165 0 R +167 0 R +169 0 R 171 0 R 173 0 R 175 0 R @@ -302,1250 +301,1133 @@ 179 0 R 181 0 R 183 0 R -185 0 R -187 0 R -189 0 R -191 0 R -193 0 R]endobj -195 0 obj<>endobj -196 0 obj<>endobj -197 0 obj[196 0 R]endobj -198 0 obj<>endobj -199 0 obj<>endobj -200 0 obj<>endobj -201 0 obj<>endobj -202 0 obj<>endobj -203 0 obj<>endobj -204 0 obj<>endobj -205 0 obj<>endobj -206 0 obj<>endobj -207 0 obj<>endobj -208 0 obj<>endobj -209 0 obj<>endobj -210 0 obj<>endobj -211 0 obj<>endobj -212 0 obj<>endobj -213 0 obj<>endobj -214 0 obj<>endobj -215 0 obj<>endobj -216 0 obj<>endobj -217 0 obj<>endobj -218 0 obj<>endobj -219 0 obj<>endobj -220 0 obj[199 0 R -201 0 R -203 0 R -205 0 R -207 0 R -209 0 R +185 0 R]endobj +187 0 obj<>endobj +188 0 obj<>endobj +189 0 obj<>endobj +190 0 obj<>endobj +191 0 obj<>endobj +192 0 obj<>endobj +193 0 obj<>endobj +194 0 obj<>endobj +195 0 obj<>endobj +196 0 obj<>endobj +197 0 obj<>endobj +198 0 obj<>endobj +199 0 obj<>endobj +200 0 obj<>endobj +201 0 obj<>endobj +202 0 obj<>endobj +203 0 obj<>endobj +204 0 obj<>endobj +205 0 obj<>endobj +206 0 obj<>endobj +207 0 obj[188 0 R +190 0 R +192 0 R +194 0 R +196 0 R +198 0 R +200 0 R +202 0 R +204 0 R +206 0 R]endobj +208 0 obj<>endobj +209 0 obj<>endobj +210 0 obj<>endobj +211 0 obj<>endobj +212 0 obj<>endobj +213 0 obj<>endobj +214 0 obj<>endobj +215 0 obj<>endobj +216 0 obj<>endobj +217 0 obj<>endobj +218 0 obj<>endobj +219 0 obj<>endobj +220 0 obj<>endobj +221 0 obj<>endobj +222 0 obj<>endobj +223 0 obj<>endobj +224 0 obj<>endobj +225 0 obj<>endobj +226 0 obj<>endobj +227 0 obj<>endobj +228 0 obj<>endobj +229 0 obj<>endobj +230 0 obj<>endobj +231 0 obj<>endobj +232 0 obj<>endobj +233 0 obj<>endobj +234 0 obj<>endobj +235 0 obj<>endobj +236 0 obj[209 0 R 211 0 R 213 0 R 215 0 R 217 0 R -219 0 R]endobj -221 0 obj<>endobj -222 0 obj<>endobj -223 0 obj<>endobj -224 0 obj<>endobj -225 0 obj<>endobj -226 0 obj<>endobj -227 0 obj<>endobj -228 0 obj<>endobj -229 0 obj<>endobj -230 0 obj<>endobj -231 0 obj<>endobj -232 0 obj<>endobj -233 0 obj<>endobj -234 0 obj<>endobj -235 0 obj<>endobj -236 0 obj<>endobj -237 0 obj<>endobj -238 0 obj<>endobj -239 0 obj<>endobj -240 0 obj<>endobj -241 0 obj<>endobj -242 0 obj<>endobj -243 0 obj<>endobj -244 0 obj<>endobj -245 0 obj<>endobj -246 0 obj<>endobj -247 0 obj<>endobj -248 0 obj<>endobj -249 0 obj[222 0 R -224 0 R -226 0 R -228 0 R -230 0 R -232 0 R -234 0 R -236 0 R -238 0 R -240 0 R -242 0 R -244 0 R -246 0 R -248 0 R]endobj -250 0 obj<>endobj -251 0 obj<>endobj -252 0 obj<>endobj -253 0 obj<>endobj -254 0 obj<>endobj -255 0 obj<>endobj -256 0 obj<>endobj -257 0 obj<>endobj -258 0 obj<>endobj -259 0 obj<>endobj -260 0 obj<>endobj -261 0 obj<>endobj -262 0 obj<>endobj -263 0 obj<>endobj -264 0 obj<>endobj -265 0 obj<>endobj -266 0 obj<>endobj -267 0 obj<>endobj -268 0 obj<>endobj -269 0 obj<>endobj -270 0 obj<>endobj -271 0 obj<>endobj -272 0 obj<>endobj -273 0 obj<>endobj -274 0 obj<>endobj -275 0 obj<>endobj -276 0 obj<>endobj -277 0 obj<>endobj -278 0 obj<>endobj -279 0 obj<>endobj -280 0 obj<>endobj -281 0 obj<>endobj -282 0 obj<>endobj -283 0 obj<>endobj -284 0 obj<>endobj -285 0 obj<>endobj -286 0 obj<>endobj -287 0 obj<>endobj -288 0 obj<>endobj -289 0 obj<>endobj -290 0 obj<>endobj -291 0 obj<>endobj -292 0 obj<>endobj -293 0 obj<>endobj -294 0 obj<>endobj -295 0 obj<>endobj -296 0 obj<>endobj -297 0 obj<>endobj -298 0 obj<>endobj -299 0 obj<>endobj -300 0 obj<>endobj -301 0 obj<>endobj -302 0 obj<>endobj -303 0 obj<>endobj -304 0 obj<>endobj -305 0 obj<>endobj -306 0 obj<>endobj -307 0 obj<>endobj -308 0 obj<>endobj -309 0 obj<>endobj -310 0 obj<>endobj -311 0 obj<>endobj -312 0 obj<>endobj -313 0 obj<>endobj -314 0 obj<>endobj -315 0 obj<>endobj -316 0 obj<>endobj -317 0 obj<>endobj -318 0 obj<>endobj -319 0 obj<>endobj -320 0 obj<>endobj -321 0 obj<>endobj -322 0 obj<>endobj -323 0 obj<>endobj -324 0 obj<>endobj -325 0 obj<>endobj -326 0 obj<>endobj -327 0 obj<>endobj -328 0 obj<>endobj -329 0 obj<>endobj -330 0 obj<>endobj -331 0 obj<>endobj -332 0 obj<>endobj -333 0 obj<>endobj -334 0 obj<>endobj -335 0 obj<>endobj -336 0 obj<>endobj -337 0 obj<>endobj -338 0 obj<>endobj -339 0 obj<>endobj -340 0 obj<>endobj -341 0 obj<>endobj -342 0 obj<>endobj -343 0 obj<>endobj -344 0 obj<>endobj -345 0 obj<>endobj +238 0 obj<>endobj +239 0 obj<>endobj +240 0 obj<>endobj +241 0 obj<>endobj +242 0 obj<>endobj +243 0 obj<>endobj +244 0 obj<>endobj +245 0 obj<>endobj +246 0 obj<>endobj +247 0 obj<>endobj +248 0 obj<>endobj +249 0 obj<>endobj +250 0 obj<>endobj +251 0 obj<>endobj +252 0 obj<>endobj +253 0 obj<>endobj +254 0 obj<>endobj +255 0 obj<>endobj +256 0 obj<>endobj +257 0 obj<>endobj +258 0 obj<>endobj +259 0 obj<>endobj +260 0 obj<>endobj +261 0 obj<>endobj +262 0 obj<>endobj +263 0 obj<>endobj +264 0 obj<>endobj +265 0 obj<>endobj +266 0 obj<>endobj +267 0 obj<>endobj +268 0 obj<>endobj +269 0 obj<>endobj +270 0 obj<>endobj +271 0 obj<>endobj +272 0 obj<>endobj +273 0 obj<>endobj +274 0 obj<>endobj +275 0 obj<>endobj +276 0 obj<>endobj +277 0 obj<>endobj +278 0 obj<>endobj +279 0 obj<>endobj +280 0 obj<>endobj +281 0 obj<>endobj +282 0 obj<>endobj +283 0 obj<>endobj +284 0 obj<>endobj +285 0 obj<>endobj +286 0 obj<>endobj +287 0 obj<>endobj +288 0 obj<>endobj +289 0 obj<>endobj +290 0 obj<>endobj +291 0 obj<>endobj +292 0 obj<>endobj +293 0 obj<>endobj +294 0 obj<>endobj +295 0 obj<>endobj +296 0 obj<>endobj +297 0 obj<>endobj +298 0 obj<>endobj +299 0 obj<>endobj +300 0 obj<>endobj +301 0 obj<>endobj +302 0 obj<>endobj +303 0 obj<>endobj +304 0 obj<>endobj +305 0 obj<>endobj +306 0 obj<>endobj +307 0 obj<>endobj +308 0 obj<>endobj +309 0 obj<>endobj +310 0 obj<>endobj +311 0 obj<>endobj +312 0 obj<>endobj +313 0 obj<>endobj +314 0 obj<>endobj +315 0 obj<>endobj +316 0 obj<>endobj +317 0 obj<>endobj +318 0 obj<>endobj +319 0 obj<>endobj +320 0 obj<>endobj +321 0 obj<>endobj +322 0 obj<>endobj +323 0 obj<>endobj +324 0 obj<>endobj +325 0 obj<>endobj +326 0 obj<>endobj +327 0 obj<>endobj +328 0 obj<>endobj +329 0 obj<>endobj +330 0 obj<>endobj +331 0 obj<>endobj +332 0 obj<>endobj -346 0 obj<>/XObject<<>>>>/Annots 17 0 R>>endobj -347 0 obj<>stream -xuTËnÛ0¼û+¶@S"õ²|lš9HS] -øÂJÔ#•DU¤¥øﻤ$¿Š"Á%wgf‡+ÿY¹$öà¼ô¸øÄD1ƒ^@¾¢öˆBÄÀ !m°ÆÅ$³P³¼}5'„!‰ jø±ÚnIpº£4 ñÅåeÜ |â]Ü2Œ·à{aˆë.¡sd€©¤>3ÔHêbΘ»‹°0ºº»‘Ò¥Ô¢˜Âskvgì0,ÔÂo#Ü3ü·¶|NVÎs ̅$G‡Bχ$³¶àIº~í«A~á‹D-;ÑÃ7Þx}Ÿ¼_°X‘Åyöa;mÐG¡Ö²;öUQêë’EØö, ÈïÒ³2øu¼Î\À×ðu¹`”Î:X„o…:î^²dK›Æ¶ATÑÔÚáYrǍ7—íX´ b(yÃÓGw– 6^LBƒ–”â t½ªL((UÆÛT€l!•YÕ …ÒvÓñô7/ì6“é¡­æºÂLÞf u‰WJFæ3+5³ƒ¬UÓÉ^[d-A—R ¨ÚAփÈ`¬ty²hnԀxшhDf\Ëþûµ¡*EÝå‡úÓþ'‘ËUe+nˆÇRÂÈ[­yßeÕ"¹À–xCæLâ÷‚_kÁQU+5ޗ\ã‚ÜK£FG*[…=èúÂHGb‰ÉJqTPK× …º‘ 90‘,ŽÀ» ]æ0ˆ^¡i7:=‚Ÿò)o!¯°OƒR#ˆÒKkO­´ùíøÍ|ž§®ÔºÛ9Î8Ž¤›¾"û¹%ÇJ9ý¦,³¸&0Yr£T‰ÉãSÁ™Ð~”8©%R3ÿÁ6óUÊÑ< -ºj LñIš²¯ó”¬¾¯þ(nŸendstream +333 0 obj<>/XObject<<>>>>/Annots 14 0 R>>endobj +334 0 obj<>stream +xeRÁr›0½û+¶3983±Œ„ÁÆǦi'‡Î¤-—Î䢂 ¤€(’!þû>ÉØ¡Ík´Zí{ûÞêÏ"`IHoK_P€_”D´MõŠ î8m…1e j\º.ß¿¸Šƒ„ jH„l75ýXÄ1N/¹]ĒYn6ÄyÄâY’ Î6aêVö9ؐÇ׸¡0 À2ËÎbd£´³ì,Fv·eÑ,û&Ìïœ#Pô±Á݀þޙébý9!î§ØG;Æ·1¥¹÷' 4[>õÕ _OôI ªÖêé«l²¾M_P MÀõū͖%âå½îN}U”–žEÄI¿s« _'zh.PS+°ð@7ùžò óªñÌÌM}7üÅp÷bÍñqˆÙs±ç•²Nèáµ£ÐJìœÌ|™–ê ’ÎÔõz¨re¨8V¹l3Eº¥LçU[ܑUÆúM'³ß²ðÛ\gÇFµVÚ +7e›“¶%Ì©Œ9F¨j:Ý[e5ÙREU;èzPùÔRâ¼Ë—ceË«-“Z‡ÍèÑÐõ˜K«û=/S©êîp¬?<ßbŽÒõHÝ£‰“n¥¦Q¶Öh_tՂ[AƒlØDËÝKïS­$šjµE¾” Ø.Ês¦[ ¶>‘rƒŠQêne1Ø»^t +.pà*<ŽBîŒ'ÕçRÈ2ú©”É–´ î_3j`{­A¹oßqN³Aim·_¯ÇqdÝù}2Ýëÿ_ʚѤÑ('QѽÆÈ2KFe~pèªÔ£s +R}æ]CWPãý{HßþêLendstream endobj -348 0 obj<>/XObject<<>>>>/Annots 63 0 R>>endobj -349 0 obj<>stream -xÍ\[sÇÑ}ׯØrâT…ÔÞ/²d9ªX)Y¢W/Á¥ˆÀÒ¸H–}NwÏt÷b!GJ‘”¿TÉ88˜™¾Îôô.¿_¥ç]‘Ø?Û·IŠÿU]•4]žl‡äúQÆ_eI“'E,Ö“âGôOFÿ¼þŽ¾Iê²Ã¿ë¤=ÏÃçUò摡uÒ`G5*ªó£ªü¼ -€†9¸N²4;Ïé1Ø,?/=ë0؊eãUhb×IŽßFˆåߦæ zðgÕ#0yw^$µRB’DUÎA҃­¡$ êj,@€ rm ‰ŒsptÍyã8±`žÁâ6Pl ö›¸b` Že2NÆ՝yªb`ã×Ôçubœƒä§ -.6Òc°uE¢ê´ä‰ª,Ôò9zB™Öv”AÌ(Ró4N`‘:k30%'áU)é1©AáæX‡ÁV¬¤ulCÑáÆ:Œ`L›ÉÌ"pÖ8o10×¥4«rbÉ:¥øPÒc°%ØYYY2-œ£ؒ“5”s“æ É£¤Ç$9ÕXrtِæ’rò™¤d‰LY) ÊAd@‹ålëPÖ¥ùY€ê¹ ‰X'FÊÀ -{ZLǒ \›!sê´£‰ °hØ¢M‹ÿ I«Aþ%‘dµˆÁ"•°¦±#ròN6VÍKL€]—e`‹¦ÃÊ9HšPXé1X¸KêPÁvÅdb(ËØË"(pYZÒ´JzŒi‘MÉX‡ÁÖ-¶Ç:L"ed|ë0ÙWYÁ©^*V§€µhãfu¨:‘Ë`Ÿ.1ÒcˆTRX8Öa°m -‘ë0m§ÆŠHmÅÁ+"10‘DPÒc)ƒ¦…±“H,°±C¤’Îp+"5döh%&Rà‚JzŒEqv×Ia¬Ã`‘“°¡±ƒEÉQzÖaR'ÇAîÆ:,!ŠGg¦ˆ,RÎKå1؂’΍u,¶}øÎfvlK‡„c^'WÆz ¶ JɱƒE…ç꺃E|y<^#5҉F¼Yí¡v@ÎåÊ"r8°&ÿ8áq•”ˆÁÎB‡1‹˜ÀeÕh…’SLPº+Ó"‡-]Ø´Ër6’Ó´%³²2-$¡óB¤e`Ó.Cä ΔôÓbŸ…´Æ: ¶éhQeeÑTŠfY”-8ڐa"%=Æ´8‚Æ:ŒÄ.ìY^4ï(⃦tÑÈIæÉQ’Cr(‡…è N~:Rs²"ô<)ÒÔR6³ r&Mช5ÎALŠã5MŒôlIÑîX‡‰m¡g ƒ­©"w¬Ã`¡Úd¬Ã´ocm¬¨Š¸Ó˘ªËÒab¤ÇX~À´:Ôc‰Š@Ç: ‘2*¯Œõ,·ڳÛ!çÜX‡Á¢†)T*Q¶[†ø•)¸ŽÕ\9¡ Žp¨ª¤Ç¤*ÍîX‡!b¢p¬Ç`ÅS:³ˆ›Ó'&7p\UåÊ9rv¸’ƒeÛØPI%ë0ąß`%e=Uac¡zÄ`QgNÆ: ¶â×±bìqºkÓQY&fˆÀeØnÈJzL¦à6Öa2U£n¬Ã`q€çl¬Ãd -Ú֍õ˜ÔáˆÑ±ƒí¦2‹²©Ü"%H˜²ËRªØs%=e±I˼`°²Ýë0Xl(PÖX‡ÉœsÆ: ¹ Ïë0”…OýÌ“¡¨\²±ƒÅÕҙÙPT0êÖ%@ 9Îㄸ0b¡iè1Xl'Öa°˜©rcù,Êw·@óòY¹ 7W ä_2I‡!ݛ5ј&“rÁH!OQ")ë0Xl†­cEZ\ôä¤Û‚$•H8±—q,,¦ÖZ‡ÖÍ-bAt° ’ƒERÀÆ:LÂRÉâX‡ÁvTf:ÖaÄ w9ŒõlI{»c¦äpP©<¦,'2{L…3eÍ,ñ‰™Å'ójà¨O•aw¢_é1”EÌ՞u˜ÌȋÚX‡Á"ù ’±“¡ZŠ;e=›së0XÔý¹ë0X„¶_WLÁñN2 3E਼Ã@Fl -‡¡:;𻱋²0”±P6bˆ„í+ë1XD|ü-­ë1X”{^*Á¢lEDÙÌӅ‰ªdcÙ((4Õù³"0ÒTÊAè‰R½IŒ3z”Ž3HÖ«f6Î 8þÚ8ƒÐWgãX.‚+ù³*‘X)£ƱqKlœÁ¨€q¬@‡S4§"?l`´I¡;£{V!CÖð3¢Äbˆ<ÏWÑI¤S:—ÜÖ8¶šHºðg$0”ñè¡ÒÏD…´íƇ½9wœAru5t Oj«„?« á½^CX -·Rê_aÑ ˆˆNªrX4@pð uÅâ8ƒû,u½Ç"ærá—‡>«ˆ¡Ë -ÉH9H‚ÐEÆ8ƒàš|2Î A  h‰s:Ãß8ˆ~ -7>·žƒ”ø|©Œs:,\L”3="Ç}sឆ¡•&x‚öø9•XÉÅ5‡bŠçZM™\\ñ#3|½øú¢¿\ Éx<7ûa³ßýíâ?nœ4aÁÍsFAŒ‰Îršèëìœ ¸*<šN^löÛñê°Ø/Ç QÔôÜùŸñÿ2òñsì¼¢^Q@E:X9Q/£úYÔûá°\ü²Û÷Û=Ãí»jê@íGú -—¾"mÃW¯¶Ëwãoè{Ü[ª¶ ß?Þ «ñv ƒ‹¢á ÜýÛ(h¬ÍÑǃûÎPq³Kóc—^Ü $%ðªÁӟÞðwÈËhš×Ãí¸[îÇ-닌*3<Ï%;Þ¿NŸ´BN;W£ûµ£³ó󙳟,Î3¢@¿-̓÷N8:š•PùgљÕ=C‡œœkZŠ{]H³í7‹›õĞ3ù“Lú@?Uè²?Q¥àHuªD7 m]Æ°|:®×KN3ê|g!͒ïË«aµÜ½Q)µ!‘H'·LLÍHzí3Rôt›ì³qq Í£»,Úöm5žªF=¼Cñå±ÊúœM|ô¢Žµøq<†©Ò<t‚ÄÒÝ­®ùr1èmt¢¦°邏ø×P­Ì‚'§"Aõ8@ÑϚ}”àh¥<ˆÂ¢5|ÁB‰Ÿ¼F?îx¯CCÀŽ½ËՈҜó ·û(sr=né;zåK7ËÅÔ£i÷ÀTEAâ RUöK¯ê?‡á–Àã™.^5|DâéÞ} ¥©Ü¹Pì©ï÷7Ò @Ï0bAžŒï7<'™áÝJ¹ÚP1ĖB™Uß»Ç;Z -§a3ó¶l¤ÞA]Q¢5¥¥ÝÐ/nX ¨¦Õùj|»\ô+ú¼©·Û‹ñ†Ù¨g‰š¥¢)ÚÇÇq]ñþó)š>Y±B(u[½\>?lø–-…»·ËÅ͸ooVrC³?ZÇĺ»OQÁ– ÔÉVT²‚=WèôtLã‘K–ƒÎ™~7œ(çÆkþº-ޗÛ77ô€Ê˜Kþ%^ÐÍáÔ é„ðhtÔ´l\ò„ÑnÁëq+5Wu^Ä/ÙßôóäCnù:t·Øÿ “r5lÞî%®!jþǙŒ_ ­ã,?«ºþÕ¯c-‚gèjN4}ÞádC«†uÃÛ/iõÀ[á43nNœ¡«<ÝãýÀçÊOývIÝ+ržJÖyè6$P68‡aþ𥰩ÕAïgêžù‰³™µÁ•­Ž{½iƒ i¿dwá£ÚÌ­ ýÕÀÇ:·Uû^×Kqö`m%·Ûq?î?܆›x{ŽÜC×ø_ÁÏðÎÃÔOó³èÛ nÞ[¾xï¸nB½R£*gè©ëæ_®†ëØgÀ+xøD­ð ð8N=ô5C`Š‡ö‚%Ž}Ê -ʈ³¶õŽ·¸ÆÏéÂýÍ-ŽŽzó?6R[ñ>¥ð ypñbå·¹W9‘2Zæ}ä|›W=i··õÓ"{¾´—\&ëÝ°z7ìødzµêžKä`<›úy¾Q>ùþ{v)l¥Zё½¥æC§Vëô~°»ÆéÑ·»+î ¡J´ý¦'ƒNnÛø3+òUƒ¥Àc<Ðw7™4Šrôۏ£c¾Ñ>“‡¾Fڌ0¾V¼Výå¸} Áߟø>giŠ‹½³Õ e =¨Ð‹ÒðÛí-p-ÐԏÇìݨ«ÊÖG[ŠÖYñxêÖ÷þf¹áO=Ì»šùø¶Z^£Þ’š‚ÖÄÉå°èr¡$å븙K×÷e=‹O”€4'E½›xOUv&½µÓ»çêÌ@ÏÆÍ_Ùùx–ÓÄr(¨69s?Çj=îRvã)HÞų|·ßâ)ßA -`znPÄ~ÉxKä¸åšO,ë;Û;¢%PîMj¼%1³ÅËþ— -}ªÞ_õ;I$„ö|x‡ nqâª1ۮõŒ㸷:‡NWÞpè&¯71lï¨xñ'w}âFƒaGœ„N33שÜâ£×=vXÜô¸Xí¥°£6{|ؕ,7WîSQþñ½ånv0KÆ­Ù³¬F«h’!®Nx±A7¹_-·!TFŽ2'Ú#¨RNÊÜBgþRM8ÈéÕ½€ö¡Yàº@ïÂ]IRò =ŠnBöNÝ$ÉëÜ/C"óD¿øÿf åöÿ‘Ë*œÁ3/Ñåwô“µœˆ;„h‡?OÓc ­ي\u¶°Énf“Ìöá=/ƒ×¬,šýõ0ì¨ Àò#–Òì.²"؉Þbžd%ªÞ™¡ž¬Þ÷XR¼nj½”Ýí°X^s}JI5áLƒX‰®•l:ßè<ÕžMMRÜm݃xŠæAåpdžy™÷r¹Y®—¿K®£“­çT“”œœ6h®Øž“¾ïûi8¡>°"ÎëØòGÖüfpÐ'$˜Aß™n/èÕÿÿÛ,Ñ,x!f’\órðU//g@C{åæÔ üµ¦Ð¤#<×ý0©¨>ÔÛÖëázعJÒ[ÀåWü~sA¹J¾<ËðâÆQXÌë½»·ÀOýê ƒ¶Fv÷ÉDÕ)ˆŠÏžŠ@’Ù~a]1_“ž¨Ï–›ÅêpÅ*áù±]©%;#ÞÜÀ·¢ÎQÛã“p^™½ÚŽïð® -g8kå¸>¬öË[i¨Qêk¼²Êtg£!T¦ižR«mÐWóð,¥¹ÇgÏYxÄÓeÓDngÎnß÷[¾Q ¢²òâ _ÌØFþ)ö³a±BùߢwhuáØöбeü1{"Ÿ^H>ÉQ?)¨?¹Y+Öá7Sí~Gü!/_Òß씽¥Šx¦×<ÂÛ"IxarØ&/ûÍ!<ÝÃßpå%.6MÚÑo—$þ·~xô_Ý"È endstream +335 0 obj<>/XObject<<>>>>/Annots 75 0 R>>endobj +336 0 obj<>stream +xÕ]ÛrG’}×WtxäXRh4®ûæÑÅëkC#ў}C`SÄ@sp‘dýžÌ¬Ê<ÍnÚô¬LA36ª«2+++3«þç£Áù¼*â»wÅÿÏÇÅt>,vuqõ¨ÔÊb:,ªI±Ü Í_ò¼þV>)&“ê|VlŠÉù4ý½.Þ< +´)Æãó QÕDZGçC´ÍÏ«¤ÁM1›J;ý¢p7Å|r>&Žà¦(‡£ó9‘ŒÁNG­.U†jŒ1%ôo—!1Ãê¼,&N„ %AÈ0nq&ûp|>rÙ„쉛Nñ•‰sñÌ TAH7PÙ½¡uXÊ(²²D‡‰Ã@Ñ¡sÖn =åv +¢]â&3™Mçb’¦"¼s1ЪMÊ4Œ1Åyìï< ÎL1 DÄËF¤Š0VÍ% ¸™Sà +Ž`²³àÔÎr»²À’‚dŒáŒDéÄ;`½kƒˆNò`Ä`yðTçŠNe)Éì¸ÍZ—ãYLñXAt™8ëÃ9‚xè@i4d,’µ¬Nr5IÖ¿}’ƒF£bìÁ ¼“tÇž?œÇz22$n^É3gã*ç¤nÑ.qÓ¡àAHWág‚„§’ïŠb ä¡¥¡xû¦ŒÁŽ‡bVúe ƒÍÅʝµN¨%wª :MÜ|9vŽ  HVŒÁ'"§7e v¢sì¬h4/u’Ul> ÌÍÅSG…§ÉìHMˀFXZÄ;+¡*b ƒÅ¯ˆ5aðñ×&Œ‚&qâ|0$'ã±ðcf ƒÅ9b–0XØÄñ'ې¦²çä!)ˆ!%. ÁIÆxìP,{,aÒLÄ –ð¦JØ`°6¤É0 ¤ †”¸4'£S]fє1X87tm ƒÍDKÁqÄKKìL#±„Áb¥”ÌUˆc‰¶ŒÁV¥¨ÑGÅXØù-60؉ì.Ԗ0Øé¬5*Æ`áîXŒ7E=ó¨ƒUmV–÷>HŒÆgdr Âç2"ý¢N|@( Tì¤Y z’íÞ֕‚°˜Ä• GN2ÆcaèÓY{,>Œåª ›¸A Tà$cyìH–«³öXÄ|±äÄcW†ÒÐIÆxl©/XÂ`Ñ ·µNñßMF +¢ÓĕC ‚dŒÇB90PoÊìTçÅYë1¤ï&#Ñiâdïƒu:©j5·0ZÍ€4$ˆÉ·A ¶æÄé`* L“‘ðÁdn&1LpMéc"e2 »œ0Kl%BƃƒÕ]ˆXÂ`ÕÅK T %XU'#‹ª DMœnەsÑe)YWŒe@â1ˆ% V}±„e¸bDÁ2‹½ŸÌ,| f܇l¢"hp»®„¨‰C^ƒ‰rŽ ,E"·àB”‰vè ƒEd‚–° ¶Ý© v<‰õP)ˆÁ&Î&Â9‚è²”ø!2 g«÷¦ŒÁâsÌi°„Áj0H,a°XŽ­~ ûœú“Óœ*–9•˜:žlŠY~¦»RŠHÂ8Œ×9‚Ð@§ÍIÆ`qSÆ`1,òhK¬†GÄaڃb vÜî×DEzê›H¥ DMÔ #tŽ ‰Š5ᤈš1X݈% Ž+&Ú‹ñÁ^‚% Æó–0X{«-aQSÕjË,¶•©I÷žì²„šgkÁ9‚Z!€V‚“|Þ  ï {p’1XĦ0Pgm*)›­ÈplJüžêœ‰1˜Ñ +Wb$N" ÎIÆŽfPÄ‹`V¼­v¯%Ꮞ΀6sZÛ N;Ä"wÓ4àƒÍJ-“"8‚¢WÉ‚d,CÃ'–0X”-ÆÌvŠ5Jm ÀP*˜ËXŒoÖz2c1¾qëɌÁŽ% ~MMˆG=^*5%®D"=9Éâ %§ –0X¤¨PT´% »+,aQ”¸b ƒEªõdÂ`áRKnKX%X<9©‚jCLÙ° U'…R&£ÓJÊ|Ä‹M£b–0XX(ٟLƢඌÁbâ~ƒIŠOf ۔¨"÷kª@å±­¤XREâ PôéA?aœd,jÒy –0Xøq (XÂ`'·žLØÔ[ô¶&̘ª,C1¯‰³Ñ;GЅq2 “Z&a‚5a2kƒ–° Oଠ•ñp\ +b¸‰K+ÐIÆx,"Mh0XÂ`Í(ƒ% cà¶6$õ…iÿ’HuF搸Rƒß K§’‚K,âLtêf,“*)e°6$b<4*-%N÷Ðà¢ËR—›7dlÅ« ÃÍ,*OXPÁ;W'ଠ‰`,(1ÜÄix>tŽ  H§ÅIÆ2 )«ESÆ`g’nKX´+¹]°ŒÁ¢@Q½_Æ`§™™` ƒENÚz2a)¯LeÛð¶¶Ùcªc³W j²½?q3)‹M Ô BT­³ÉìHB¥`ufJ­y'Û6à3“¹¹´ Ž t)Ö$c°º¸‚µ.5kÌ]*ˆ.gËÇòM!ã±XÑL¬t­,aéT6b ƒÕº)±„Áâ̤õdÂ`5T¡¶„Å”$N–±˜’LY°¦ +ì>¾Œå̑ö\ƒzÀ ;‡m>C­…`fœC]:C ±:t’1X8À!³„EPq¡Ô–0XØ '5 áë‚e,¬„KÌ Gãb u ,»L»©…{w-RÕ§½Ú Ô¤Ò8GPÔ$Î#2;”À€XÂ`1§°40c°H> j°„ÁbåB‰Á‹-xD¬‰ +SõR¨Ø±¹Ìæ9qh‡>#ˆ‡",Ápd ™º –0XxÂ܋.9Â`q¢ {‰¶„Á"Á¼9kÂà¤Ó÷y9Ŧj ͹8É,òa 8XÂ`q ýK,â&Ìk°„Á"ㅰÁvw6¸b°péPr°„Áâp‘ûe á–Ž·5EiD•Ý¥™›õęE;GÂÀcnœd VŽ‚µ.‘„[R]&}@EΔ.Õ9É, ó,aDÇÄ݋ –±é¾ÅB÷ƒEvÅý2 Ç1Ævm–ècf Ñ|ˆ³¦DZÃ1)%&Î&Ê9‚Pü7ê$c°ZÓ –0Xóæі°¨XÊëԖ°¨X§ÇÛ2 È£b,¬TâɌÁ"NÃÒð'›š³¨SS+U j +(ª¯t’1XÔ±`àÁ‹’:ÖT°„Á"„*‚%Œ£$qœe,ª÷–°«QS°„Ábùò˜ƒ…Ä„%tÔøÆY Q¼oª¡¢þ-J „=P¢`g‰vŵ;EPt+# . hV¼UpÁa¯ãv!â¤y´#sGc!{%õ'Ëç›â§ÄÛèŸ"´hj +{s"‚*‰‚‘R*¶,Y®ª3ýÛ5˜˜nTÉ·„ ÝJ êL ѭ̕S:U¨Cy¯{G‰Ả‹ò-•Ç:ïçÌ_.n߶à ½'/°Û"MBe»Í^É N}W%½»ô%%,"½Í9J)ƒ& ÷SIÿC¬E%MÛÃï|®_Gž}BŠ1©õZ\ËБ³ë´·ÄþaßÍFÞ®doêF”§]5;ù —ó»ÛÞ¹dócÔ4Ž¤9ùn/Û%ZÚøk]ߨܨì r2Ëk("qµLúÈÁxq¸®W¦$iúfÒ|تâpDšØBbUý®åD¶×©ŒçLê¥JÎd¹ØÖÑÒTRŠ4A%'äªËk• qƒ‡SëæÝj¹XËçxÕ0¾¼?˜ºå-º¼iù~î?“B\”‰ŠBÆ݅t—B¾Y«Üb%n&/Ž[-Y6‡›õÙŠ‹ëf×ß]¯-éG£¼-^edÛ@™cÍ{ÅýU±Ð¼K?X/j,\;ª{âñæJ¾Æ-ßEá€&‡gÅJ¿ˆO<’íëbiu>mÜ;×UŠ•>0'›f§£ƒÝGŽu¸^ØbÆ÷¢Ik™SˆýrW×úU9 ñ®ëí»ƒ®”À!}‡99Î*¼¡ÑÚåz‚àÿ^lò&ÏÁ.ʞï±É£r©òãÌíK øLtWf‘áuå¾ þÇÅn%…^Ñî…w‚V’%aþNc¹ýÎbObÃ/EM¤îÙß³«Q©‘.º§ ©a7yüN¿Ÿ•NBãܾÕäl¯µ;ýW½¸¬u#–Š²‡+W«”ÔbKó2óÍ®94‡_nRéß?Ý×t€û`ìƒQqîúàç[ŠvZ'ÚkL«/3[ÔÖWñø·ËúÊËgˆ³Î>ë”sçsõråÑI[øÞ½x‹Ã‡tƒ³®/,m1QqØßN[l–[Uáþ¤íÍ öFQÊW'7<§wým +@ *î8‚œ«·–ú«£FòFžo²wÝx}!Zâ’…å‘¿Õ` D|„¨b³¯×ïë½.½®åèî.¡äó´JP]¯‘²êzö†o¾ÿ^䗓¨l&…„F»ÆBuŽ[°žµ—¤(”ƒ—bÝ×ZCÅK]/Þ[pǙ@Gáškê(pÅã3%Ñå@p&×m¤ÀZëÉŸé&®ÓIJmÌ9Œ}[¯o›Ýøáì¨Y%^-’mNµèum±$Þ㚠~±Ïë7;|y0&ùágؐ²Np\.ccôì6}U„׫CŽŸ)åkù¦,ôbeKyàß#q~[/G+PÈ ¼¥vÄQ~;r—Ç©MáÎJθdùÝê$+Q~ñã`%öìZϚícµ#ø·Ižó"ɏ9;˜âhvtÒ*܊ò}°Øv¸«p´Ç!qtßÜHØÐì,7ET™»½%۟K=PÇÖ"ü9«¬'Ó|¹øÙLŒ­¦/ã[/öy›'®Û„؉ÜÐ÷Í£›kvœÖUÊߥ-¯çšt˜#Äx";L;²’¼úÿ$åÝùجU¹áØ*e`ßêƎ}«¹Yy§\^/‚,ÊÆYCäS«í%e“¸ü!ə:·;Ç÷ÐDևœ¤·ôa˲c}·ÅIÐb½ú5¥ÎrwêKɏoéµÔç3øR:5Äí»¾tÙÅÖ†„9ûb‘*Z0|·ü÷)¹6¯°3[ÿ­œLZÐ_#j•„ÍÁ´&?§Ï&•µp +‚ü‘1ä©G©±^¸Uôº@jê#(²ÏËû‚O=*bæZÙìjl.ÛôŒ¬³¢ãHï +‚ÚK+âî´ýç±ÞKÍJ‡“ÎgVD+ÿÚw“.åõ! YY™}QöúÃâ•;°ÇÙû›z¹ºÒÄB7æýu¤ìW¤”+D¹(MÇÎÝs>Óy\žESŽDr=è_ÓÄÿ£U^…ò:MËá–h×"_®¶«ÍêWóE¸½‘Ëtn–¢ ފqÜ°6#ÂåC·Õש$‹ü%ïň&µPb'á‹ç½›÷ý””ŸpÛû}’²îoê6› üêD+²D.×ÕÞ«EºI‡Ï|Ž]ôU^Dzåä¯'FÍØ"*¹"“¯Ò¼®¯ê]½µâƒÔ]>÷`Y‰]œÉ/ĉÉðJí Àÿ5ý¸X͕"y8õ›¶CdÖª'|‘oŽõëDɘY7\^m—ëã¥I-_ô$ÕW[’'|À4r«ÄŠþžUµkÞãÖ¡nr¨J»?ÙׇՍUšå’¢Ÿ«b$³WgÅI—Ô k¿;Ž¨4·¡¹zè?³mtjI8îí*£/gø©þתÒò÷ÕÓ¯~ È»®´^ϼ¸bnplc…¹Ý×Ck£Õ_92·‚w[µœäv5ó÷køD5TÇò¼¯Ôxp¥µy¼Òí«¤O‘/šÝ‡ÅN3K=¹JûÓMâõÑ䄟ÕË5R³|CT”–WàwðÙ8Ñ|îÙ]ÃßÙÖåŠ-Q}?i—4(¿»1mÅà¶ÎZ1ø·õ´–$yw¦Ûkìe^IVºJgêØSK>ûLI~‚#Iì]KºH!5ކ‹"F·¨ SÙ"Wµ¹Cù0G?­~O$[WØ[ü6NW¯îpºHçY 8bµuÄ2¹ìº\¤ Or™-­£¾À¹'ÇÝXìr .±Dñ÷Ve¿õàՁì`Eè;¢d] ^Ø %XbEwߪX¼oV¹”^ú +Qu¾A@.çp­—VT×Ø ýd@”­fÈAâj+߃ûñggî~OÓ*”üžÂ,ír,Ã="ÕÂK÷-åöDÚ}ÞûñºÙ¾{¬ÊAölÎîÒAYÙXŠÇ8GÙì{ø}/vßßi?^m­='f¡›{8‘¤>yyrtku÷Dàý%ðÍê£hAª¿Uì‘ þÃV7b_NÓ lW¬ö¡ûXáþ(¶³'¸‡<îW\[ˆÇ[·p·²»’m§ÏhĽwðrŽ*š”DÙëÝ}:³ã5Y®¬w÷š•½,‰JM$Ùw]wTpŽQ=tm0kUÞ)¿¥Õž°¾o oà÷šå“_õ_¢őIïoPýܾ³¬­DÝÓË|aE«Ü÷¤ºfuá/(†ˆØvßí¸!­+ ¿ÍÈ߯í@”ƒèÐü>–œ»ùǦEópØ©²ܺv÷ºÞß ¸ Á±jš6úùvå«Yók=åPû’p)ïÿ÷TØo-©s(ïíáÁ¼ßöÄÿß\ê>Ú:e_7r?ÉT„‡xU°»÷fý$÷˜þ±^íÍÛc5Ï|·¸û`¯ow÷âf—.N¡²”úÛÚøTl6ÒÎÉŒv`VŠ°+©øêԙv‡Åjû•š .õûVº­?ÈgPywîNOý³#".HwšÛɁ¶[ú1Ÿt˜ûâ»ÿyù\F‹k¢øí˜OœfÙÂï¦Y¶ì[iìWo›ÿTubSuu^ԛ›uÊÁ['}=ëQLSíZìݗ~ŸíåR´t'RŽŒÒ;ú1éÉ^JÐÁᚉ;Oe}w=Ǭ2^«â·é+)%æ¼-Ša‡x!çQMÎU¿âÖë™È˳1ßÕùé~^êE#z«Êސʮ0Ÿ(¶ Lô;ÚêÌòUÔ3ÚÕ¸“6JúOW!22Sʲ0¾ŽŒbµÈ‡ ~¢ ѲŠˆÛvxãg•ÜÏ+ⴅn.ìB~cãJþsNó ~õñÒ|:•DH/bé×ê]ñr±=æò”5ªŠ³é@fc%*z~ñèoþ2ifAendstream endobj -350 0 obj<>/XObject<<>>>>/Annots 105 0 R>>endobj -351 0 obj<>stream -xÍ[Év×Ýë+úd#眐êyÈNŠ{!K!©ØY9Ø$ eûësoÕªX EItrŽ¬‹Ûo¨z5½êÖ/Òã®Hâ«Ë$Åÿ«®Jš.OV}rñ(“Ÿ²¤É“¢N¦ ŒIñÿÈøÇÉ+þ’Ôe‡?I{œ»¿Ï“ÓG-’²Q.’®=ÎÌ°¢æŒEuÜbÆ*?®à”b\Êqò 9I–Ë‚´lÝ7fhUrɒ:°6÷å\@è8:lŠ -…O’´jG®h «ÓJFwÐt§u\†û@éj’:%I([xÿoeI)[rEV$-‹ÑV§Íõ^¤óà’b ¼ -i1§eD‰¬N •Jè§æⴎËÒñ$’Âxo Z¨€ˆç¨f´IyÆur¹8Ž£ýJ¼ênsê}ôÓùdbNÙ¹sï' Š»Ô{ÑÍd5c¤‚ð% 1æ&֛ÕvªJ³ž¸«gšKŒbnZ~_c >̤¨ûGWÏ«öp‡Ÿ½/¡Ý…ô1r&Í°·9Ó±e9}ò»ü‡ªAݜX_CiÃå\‚ޕ ¥¥*¾Ã?ñÑ<çnŽ2¼Vڕ¬Ý3„³+9ÖQ˜@Bº\M µh–í…·®$ôŽÒ0"ÆL››«z$‚ Ð©½õ'3y•oÚúüuÒ¯¯—ÃzæL m‘*÷ Jc/†õ–Ê¥˜%îÙ!<=¾Xõ½-œ…÷í[ÔèÔU »Œ¬ ÛÓÕÓsÍ0#ë\NÎû•È4ŠˆRBwŒxÔ.fóþ§ùl­±Ò¤©]=i«^ŠÎ!šÎKù݁,µ\ak\ÇU¸p‹2n£óBl ýö±²pž$ø¦Ì'›¿¼¦ýj3™ !U¡ÑÚy†þƒì ås(N¦K­øV-¸$}¢é SÇD6½š —ju£€t@ëý¯P®¯P«ãz“]Ø\¸ui èð_~÷ãë"j_Gߦ)‡Èú£ø¢>hêw˜U?œoçó¸¦ÅÐwÖ/®ç(ÄH”¸¿…ŠïWВÄGÑó©\lÜ4"£ .áôƒo„¬¸÷t?¯e¼’W÷º1¨^ž¼ ¦B#íÒ±\™4c›+ÓYøÇw¦ -—éúK×·žúÎyó3×9´fŒ5à^&~c¬ÂâÐ9sˆŠÞCg¾êç½/Y‘È|ÔÜÙÄׂ*,nti hd’ÒìtÕ_£àÔ8Ê<ï*˯µõ¯ãO1˜,;ãÌ­ÞdµÀ2&{"ãs¾"9JnuæÉï](´Qï_È(Þ?Q}×÷¹3|\²;°y»cÊl=[FZÛ=i+BoõÃvñÞ'MÄtJäÖq‡Í|þGU¼#¼LÉ´g½Ïz8¢Dd\_ãuûPrW#è%n²Ñ²ÚK”)¿Ë9>R¨\Vüü2}lƼãq¢âQKöý%|!²{ŠÏ¶³¹ïY± ñæ˜Ê-cÇM„øuHCo'ӟ'.‘£öiš¯¡ -/y½sÔ(ÒEt[ø¿Ôì;*x÷ï2oW³›å¯Rë# ÇCåóa×ͯ" {áúke£1Ow¿uºÜ®¦jÒ¶­t6Y½w#¼ꪇͭ…ö>p- U:¥ÙonO_h]×ÅM³}ۣ蹑ð‹~V¼¤è~œôZèãÝGˆÛßN¤.ÝúOÞ¾–D†‹ÚÆ_4†9ñ³Y~ ð’nÏjߜ>‘; Ji_Ž,|E®Ð»iَOq¿IsºDBïŠxƒöy./ŸEN'¿sÙ9‡ý.˳á|ùAŠD·?‰…ÞKðmÖ®û}çýû™–¢R÷Y¿Ãñ89GÁ`¿½ñz2E§9\žÞœþè~{è˜æ%vâ4¦nflÛï@°pxvúœÛÿTÉý0¨]oß½õãÞކ{&Áýãö~wK¯Ð{ý·PyÐåvG9m‹ãébv) …¥`hX¾9åsxñÞNÜk;÷\Tr:ø`a×Ýñž|O ïÔ5xIý¢éìnB9ð*w|áÐÌg.Ïï®çèÇùz ÿÀ&ÊÝjÕ£"¢nFÝ|W¬ŠÎÐÑl¿´ŠœÔa|%Ñdi¤~z± /‚K*·Ý…D$À7ÌÈÂÈEÍí˜vP†;2«¿ZkR2æw×ç®%Æè¡>óòÚÆÝýûu¿ºq}lÔ÷ÙýÞ±øBCè•à; -#­f0#-?;àûzívºƒ‡$>ïoúùò—k)Ñt­ñQƒœròl+s´]¼”ÖßN¤íâgG½šžÎaðåU>RxÙO6®;axAtÒÿ²EÛJ |þ~ÿZ¸Øm6à_ ÄpŒwPºŒ¼ê÷ËóÓí5›JÎaòc€ÃTð‘ÑH®½vƒˆ`s ÎR´•þ™ze^,v‰íyí5œÉˆ`8ΧµÃœÙ‰ÀÝåtÒoG?8¸§çznöjyàúέoßBåúTÚöë#Äq„@¹£âߨ5þ-<ÞÛáÚBÝo’ü¸}ëûô_œüü o|Â{YɊð¥Så§ÉSH L>‹ÈÇ\­ûúªC{.ã?¯æ·ºø&Çõy’ç>Ì&¯'ÃÖ}{ŏÑñyÇQƒ7xxv6£q¿8{ôÏGÿsÞendstream +337 0 obj<>/XObject<<>>>>/Annots 105 0 R>>endobj +338 0 obj<>stream +xÝZÛr¹ }×WðÑ©Ê´ûƾäÍ^¯×©Š×ŠFÎ&-©¥d.Ú¹x³ùú$™‘íËebWÙ:} ‚ ˆÖ/gyÖWNÿYß¹}ï]ۗn=ºÛ³‚®-]Õ¸ëdr¼”þ¹øž¸¦©²Î-\“µá繛ž)Z¸ZQ.œ¯²Úˆ¸ÀÀI=ɸpE^e¬z××Y‰©Ô}VÀ*„ÒŽæÉ/²R…PZðˆ‰¥u‘¢Rª4p­Ï +×$ÎÀ…ëºÌÎ@ X–4Ó$h1XØç$V¦SyX§Ã@§¸Ž×%q.\ïÉo‰3V¼‰´˜¦Ã먬Á`»š|X8 RzX§+`§+Ą*’ã‰3Jóšü“H‹iº%­¥²ƒE¼XY™Pá9XeB tB+ò‚\”H‹¡¶ìHmbEmÞpà‰Zª6p}—õ®Iœd »6‘ƒ…£áKe ۔{Š-Û¶dŒÊ ¶ßgÙß7ðlŒ€dLäúA­œÈu-G¦È1P¹ÀyŽ%ó‰AÌ)E‰g ‚+rÚ¨JŠ`Óêjz*8Y=%EÐwº^ž +®/0)å „ßŠœìO‚¢´îŒß¨ÒÀyh÷‰ÁªÇQ¦ð XP!FÌi¥”´˜æÃÞI¢¢¶¤ôÁj¨ÚÀQ…•‰´˜Ô¶4ÛĊڢ§óô¨ÚÀac²‰ãÄå᳔œçêÈ!.HŽ^$Î@ò@…ÇJZ ¶ÆafYƒÁ69’[ Ӆ+ÓE¤¦´ïèt×° g Ò~/©œ°à“ ¥ëoÐjQ"Ÿi8E Âé5¢ Ä1J.S19ÁֆãÁ3h-X=ÿœ 4`‰2R5\­œd%O%-Ë¡dXƒÁ6°†5lG©Û°/\Y4{“²¬÷äŸdŽøΗºÂ5ƒ´ÂÙT©¯5¹(ɉκâ­ÌQ]3PCu%Î@èä5NœèäS9œø5Õ8å „ÎžÆKr©üXI°”ŠNŒ` Nf81 ‡@â ĀzO"-‹çX'e ¦ yÖ`Š€~O³˜R˜Š°f ¦®åé&ŽöG…²ˆŠ,Úò3I)Âf¤“G)±õU‰¸ÄTA‹É~Ê(†5,Λʰla…m@yƒK@²0r-:ʉ–ŒÊv‘c rkšMâØ,/Ŷ9T2 1±”Å•3ÃѨʽ¼<¼Uà&òüuÀÄ{—·¼ëá×PH…»¼áHî.¯Ÿ]WóÑ­nÝw«åv\n7¸üç ³ä„‰N|×CôY“Ñ+°w¨¸yæ.Æù8lfË;"pfäE˜áðÕÇ_éŽZÿÛ¸ÞÌVKz^!Gáì‰ü)sšùó×]pYƒ2¶†Ç(c°» +v£ªëàc2²·>_îWð»¢Ìjüø=ÛÛsȜŸvãùpý¯án”À‚š.â)8¬,ȸ ß ‹}ÉÎ)mFùqµ•(A:Ž#¹ƒÒg|r¾ž}Xýû7±.«±%ÄÄÑÅ`ºS‹œè º5`gè>¡Î³çéj·¾–]Кà¸ÖWÃ|ÎæKþfóOaµ?:‡²ä0@á=ˆÙ)ûvï¦ßÿ‘ÍCÇ¬Š#l¼ÞÎ>𩳷'Vkz™M¸xfɞj²®ÏÞ [z UŒNçoùY—Åa>jÁ7!‚›ŠŽõq|¼›>g·¢¬K¦“i~¥A‚µ¸“WÉÓ;]͇õŒs\‰+@~j[ûs>)+Š´ 5¦J{‚¢plìO³åÍê×X)ÄcásCœ ¥[öž áöØÐWãÕlX’gþϵ;¶õípÍɦÕÝêÞMÿž¥Ãÿ4Vñ3³(kŽf´»Ž±þØn*æ^N_‘@eúgF8 ú£v¢F•uV7ñ„zs>yÏˉª?+@Ô9«Býr–}bÁhúj…ëšÝÁ¨ÂŽ¬~±˜Ýñ™ _èiûnJ/¢.~:fãbGsž4Eæ¢vÛýgÙº°úäêÌO,n¤JÏÆzd£½ÃWꌽkÚûûùjHW|ˆÿ¿]]þr–ƒÂìŽpu¡Ç*üx…Ž“|¬ÿƒs +jŠ¢ÒÐ- …Éžw^ÜnÇ#»>qÛ ¶>¡Û¿xôÈ~%ž%uAä`·M£÷÷7ƒ\娒êòè´Sý4^mÆõñ!úº1s>ÖÚɸeÛ _Ix3E¿H`ýB}¸·˜ÐM‹é!¿ÜŒÆùê #¾ ¡plbžq/w܍Ã5²mãýæb¼_­“fú]êÞÅ-ژ{òëqØî¤EC›.^«/Æ_vãFz„h€z¤…ov±,[r ¶ÙJ˜fÚl]ö@›í‡Q.ttÖNw÷ä҅¾ðÓÌËì‰ÉA^FÒåh/óȊ³±èJÆò‚‚C®I!¾$ IFÂ`âûÌ#®cÚEOÿ!ã9ZÉzüRƒ6¥µ­)&¼Ü§pºÇ=óHVþžaƒ'ð•Å”`hi=äˆò6 +^Ü°¹è짻²;n”¼Cæáà ¿f£ôjµÜLІDçV +>ÓuN’Êùz…ï + ñ'~S%và~a_ûà¨_?¨úԘyà¨Vk‹¬}Z·êC·Å„?åàºÐz$Ë=Ì=¦kÊY?vM¿[Ýÿ¶žÝý¼•cqŽæ¿Ì®Çå†;{{ì¡CåÍl³]­¥)‹#?„Êá´—Ýþ1S”ˆsΠ2=Þ`Æ 8TN¥DýOŠõ4[|"ˆ;5ܱÍv5‘UžÚW;뜸æi§Ð‡Ý(á"o¿/LGùš)Vén˜oV;ȧ0߬0²–|ýŸË>îúpŒoÉhÐt=}¶.²ªm©‚ iýŠå¨{;,w~¨ò2ëòÂMڜ?Ïf¤îû˳¿žýN€Àendstream endobj -352 0 obj<>/XObject<<>>>>/Annots 110 0 R>>endobj -353 0 obj<>stream -xÍTMoÛ0 ½ûWðس"êÓº®[¶Ãl«ÿ€—:­ tNV¬ÿ~¤¬ÄjO=K!ä#)>>*¿ )‚†õ˜ï@Ò× >(˜[Ø]^v°(GRÈÇÏÏìgTB¥ß=Ü«5€ñÂgPf€…ÉÀÜ&Tár4³ uR`Žf6¡¡:Cµãfµ5k•°Éàn3“ˆ„ؒ§5rʋƚ—°*r>c<M…yЭ‹Ái™9€V4€ËLºNS++ö¡Î4ˆBn›m%¡ÞZR‚hyõmŠÜ»«ºùÕ·0íázíx<¼«²:QËXÇ"×)S¡Rq¡« 8ÈYZ²áûÜ=MŸÙKz¤EŠþëéñyîîîï¢Þ½ úÚíÚñÐƔJ ­Ø’ÒŒ·ìSR˜êäûÒŽÓ¼”§Xm–Xq‘ÜÍfkΓpŠy—¤˜ZfqèH˜…BNÍ -ŸÜhöÍW,¬JZò—TÔk*ùäÿg*›íyUùё>ÊÑ#¢ÝD¹p¢Ý;ésÓƵÃJ¸Ó*AÓ¦´wˆîrûõfÉò@ƒÜj|îël•Ö‰~…<¤ÿCz¡ð±}jû鱝á[3þiz.¤¥Ú(½ Ûu»?ÕŏâµëDlendstream +339 0 obj<>/XObject<<>>>>/Annots 108 0 R>>endobj +340 0 obj<>stream +xmTMoã6½ûWÌ­਒¿ulÑnÚ¢h²]÷PÀšˌ%RKRöúß÷ åÔqZ$r>Þ¼y3_GyVÎèöð5åø-Ê­Ê)y¦ý¨HG­¦4[’ná“Ãè߇ød9-‹žóµ<§ø'ߛUzûóiTٔ«2[SKÅlËá«¡/£÷߸]Ùòýí»oÜ®fw·‚a^.pöϛÑ÷ŸJäBÊÍÅ,×ó¬X-iS¥*rÚèq‘ѯ6zWõ:g6¯pZÓÕãqšg³åãoNîÛeB*²t`ã):ú­·Ç]"û ™tóܱ¥/®÷š©óî•u„CEÑlWÔۊá{`zzù=£…^&tÍ@Ÿ¸q]Ë6JÈÎE¼Õ4A—Óc‰ZÈI"@Pöâ,Óùàèp8š–'t´îÜpUãUT šíP²Ùõ‘ÉXñ'­:¥M¼dôÜ{ªjP Œƒi»æòæclÄoM`k‚‹{L0÷îÄoµ ‰‘±UGä'eµk €=›Š€T_¶` gCp˜d×ÐE å ÞgY9d]D¥È‚À;¸͵Wm+´¾¯.£¥ª6¶T1½ó× j Àq¤@ù«Û¡v@ã¦I’ˆŠ *=Nç&xŠ âùÜ} Qù(©ßZøÓ­……jÊ|.þ¹7>D‚|:i5"¼:tD(¾ª€ýwì™Ð!¡3úÛõ藅jv-(½@jU˜ó„̬D(’:õƒÐ^RKwàáê¡FäDºû.êÝ;_ƒc ++p¤¾#Â^dÙ{4 +҂Œt"ˆd‡€ k²ö|2|ƱûØP)äl@>ÔæÈò€&uV‘>!Gꞈ 7ò*7ú0x!x%7!nvoý£íxpÌmâ7éÅó×£&Ìíÿ¯öORûö3mAjšW šÖ†tžA€‰Îcj~@Hãžþø œ˜F¨u#Ù +R_ÎÖ ÜÔ¶wЎÑ}£|#Û¥㹗‰½VË m>’¤I/2ò-9¶cÏ +\¥>쌪À¢‡è‡u'B?© ¤çý0DR Ãæ ƒ¦†ËF3ˆ3 ëM»ŠeÒ^é8¹‡+RÁ$vÀó¨B§iXËÊ5–°LÙô|gëõÃ(÷’öçÍèóèqn'3endstream endobj -354 0 obj<>/XObject<<>>>>/Annots 115 0 R>>endobj -355 0 obj<>stream -xeTÁnÛ8½û+æ¶઒íØò±‹nº]´›´u|¡)Zb,‘*IÙõß÷ ¥D‰‹ †DÍpޛyo~NÒd³ ñǕ”âïvsKë͜œ¢Ã$‹G­ç´X‘l“"èù‡säÜn’œ–ùÏsüÇÜ1*ãø¯&Y¶L–t›®“5”­Q{x«éÛd±âKž¾.ò_cã×ï -Óy2ñ•A,6|vâïíäí݆æ)mà²Zç´-"œÈi–ÐGœ-:´57ÛG„/)Ëúð7óWn‹éƒÓ'ûë2#áIª”v,ýיã¾óA¹éøå¾U†¾ÙÎIE­³J$Tk©ŒWu¦PÈ­}xø”Ð;O¾“ÕŒ† -Œ ¥7Ù¢¯[¨“ªmÛ(¸@kž´¨ë Y® Â\¬Qt®,U@Ç7ݨ=ת(ñÈ -å5æ‚ iAYï» Hο**E+¤—„î;G¥5¨!Õë¦Eáám:܆jö½›ñD8{ROlúÊ8oÄÅЊ“еØׇðW…ϺPÀC¢+´2è ø´·#!bç+H¹çÂ*OÆGM”Ù#…Û^:Ñ4Üæ—dzò(JmJ`U>ÄnMkÝð–h.ÓÀ‘@Óíäÿªê:bmeëA, V7 e dõ¥ÓòèƒpQ Ó¥÷ã<™Ïk­±-þÃvƒQP 7CJÛI¯Î+SÁÓAnëJ›ôìÎCÁw-“"hZx–UBŸ1ºðñÇ÷ÀúúŠhÝþ -ŒºÖ>¼þ>–àFžf °¸PĸQÉOfh„%FÃZEŽ(}=\´€ÎM€ôlß 0ˆS$OPEœ$ë-®¡ò  eÕgÁ#Ì ñ1y_q,©3¦G»iŸà•j®Ç‹ZQINýìà™è>{ú|Ç}ÞÝÀð†¬‹f† ¥T¾7Ãs -²ÕÁ:xèßEtüÿßißéº@›-LÅ+¯:UZFÝc…¸›¶Ð’–]-\͋¨ F>Do—ì¯ÝÍuõy€_»›:%ЭP¡¸Çv‚sG¿–p¡®ß…L±­•ð -t½™˜„ú…ä5 '-Lfx`U½öƁû~ J[ôÞ}{—{u™.z§ü±~—yšäù»šÄ­ùg;ù2ù _Cendstream +341 0 obj<>/XObject<<>>>>/Annots 122 0 R>>endobj +342 0 obj<>stream +x¥X]ÛÆ}ß_që‡Z´\}¯ -â$Ò§ÍnSXÀ‘#rl’ÃpȕÕ_ßsï IQ–‘NìõJÙ¹çž{.»™E»% ?ê”fø½[ÓýnAµ¦ÃÍ\¾šÓý‚–Š ì™á¡þï‰f´Y­£-­¶÷ø}¿²wxJ~ûåǛùjíh3ÛF*h¾»Ç¿þSN7Ëå:Z÷«Ëõ2Z¯ž}.`Ì6šŸ¯ž}.hµXÀœád6q½eÃ.L\l缄‹0hu?ÿþ´ØÎpÉ +GÏ°ºœí`žÿ$æž}ÆêjÕ?Ë«|åj¾€ƒW®VËhI‹Å<ºç+7klóŸäÐ ö-°oŽÅÍ ðúµù|#k‹5Ÿí?u÷ívlÂ8 ¯oîÞìh¾D@Èæf Cï7ô˜HgôO=fš¾ûõ~ѕu¦±õéÕã{lÝRØw»˜EËÍû&?èd[ÚëØš*U7dÔà7æYS¢Ÿun«B— 5ZSyþhòœ°R6­Êó•Z't¬MÃûbí5–l[Sf±šÖÊäS9•íª{»"ú¹ÔáB¶qF·;„vñUTèb¯kGr›\S†!™qÔVt°5›Ñ?s­œÆÉ*ñ‹q¦ªF×·ª\7Vì5ïì3eJÏFqœ"vPH`o«e;½ˆ¾í]Â㗱œï¢ÝlÅÏrÜ«Ú¾×qóÒIO gÖ5“-顉õ[§úÌö셃ü`¾£ ©2¡{2Øô§"ŸÈ‰[Nˆj ã ðžFÇYib•#ò‘èIp]Èj²•®qâàN°«ˆö Àð)LgK7äÍéú&Â,ç:ñ‘PUŠŸ]dÞïÝQENüƒað¯ÔÍ(dà(4c‹¯žîO¾<‰ƒÃ¾û ©©µ¦Â&m®?of[׈Ýø¤ßÁŠêu­Ê8Ón´xÒÿX–bÎåâ0#½qN²ºG`X/9›:ñáñá9ìñ‡ú‹‡h_sƒ^øó_ °–z¸®Ö¼¨¯ªÖ7 +ª\5ÈUA®Ò±9˜±s­vÂ$|?Ì £Þ?}ì؁=Ì TÇىTCYÓT_ßÝ1.²§ævoÊ;ÞÏëø|çÓy7[uÌLœQaÒ ê¼Bå7êԁeÌÿ«™=r„Që•Ñ :ЁM5»+Yô9‘âír&QljåO?À×îoϹ­R¸éPÛBX(zݖ"òú‡Ràw„=¨É›’Ê F`4dCåGu 1‚ÁŠ/<<^\3ŠYÙ2—À¸Ò¨=_kO‚(S’GƒœEoÓ5bW<²“Šª!pK©?6Ý=þ|zšè(h-¢O¯"p½oa{UÞdI+ä2Øv¹gÆ{¦°Ý;)Å +¾a—ä¾w´uŒ“ઌà}û7XÃm>ü²˜’nb¶íç¾p.Lin»Zž*OÝ·Á¦L¡‹!0%I,8wˆaoðl‰Ã[ʎìÛô`>^PhУ=Sè²úVœvBÊ¡[í5£]¬0MH8·,8þªûݑ[ÀÛÖ7Ê=ZõQ’ÖÑ=ÁÙüΉž^ëÀZR!ì’´WðA›7Ì5= +›#ÐåU€÷Z£„ÕªDtã…âÞJ6ŽßÃ_ãˆZÿ֚®´Åӄsj +“«ú顏¡Ô,ï­Æ.gJ,ò‘˜z#ӕd‚Ó®ÀP‡Æ4ÌN>Ī¬˜>ÊjI{‹Â–:ôeÂ-£-¸a8FˆBå΂ˆ½kðÁ°u"]yœUÉÙ tü|ÔÔ_'•‡FB¡Š4TžŸ"ú7x ¦]@ I·µÿ2h¶ r•r<$XrPW<@y”~}åŒØ†c†ª~~·|7{0_k!¿Ó —‘›ïôck›òÛ¸oh‹=úö Àq62´&TdÒ³‡æÈÍ.¨ˆ~ïõÔPĄ́*AÄÀ-¥k\œ%üq"ý˜§"ù2¦DÎu HBԄ–?„;¡b¨1ÅÐéØ6OÚ{×ó`€M`§>„eϛ‰tЮ? +‡†Sž˜Ô¥ŸqïìÁ3–k ½0‰J|ÿðrð`söØ&ɸ´ov¨¾ø,#S1š]ìŠWv`ôãäȖ·{ËæK•¼há牨]$Õ }- ȓ“¯zWð…P¯eêeÄ7Ò¸Sg¶¶mšÁé]ƒîš`ú%"ç–ë¤3JÕîs¸HaåxÒAsLºùDŠˆFÁHå/F¸€çØ«ÔÛu´ÙR˜1ž›{9'«}xþ+Çx¤$NÁ'—Ù6O(åÑH1¶b›-¢ԑ?¯—iGæBž°¼9A3÷Uý4)A&…"Ï\€æ“3NçGð#£'ô®!^ ‘÷llËâR¬÷ê?µ6!ýQñ`ô%áùޖ/nyRώ9¾‹ºNnbpòŒk¦ \üã¸XÑ@¼ªrI8"Æ£ðôµœa¸M&ŸËXH¨fûÔCϪO éŠ6¶ ’£øPóô[ÁÎÎÊÄ"ÛÎúoP=PR¥O)e ð!ðΤ¥j˜¡XYС-ÑFmɒÏb§_#áÁ§<°ªýŠ+©‚«'·¸,Ë i¯›£ÖeDp¶dìT}š‚6¹­H*ÆWõàŸ¦ÛT—)@ àl¦x9QJ(ÔÝþbŒI@ª×üøƒþ"A‰–hGÈT¡ÞC¥\8†)&)Õ"•íh8òêýÀ gö&7͉q!º çbº€Æ7òg©©$fkñŸrév‰·9 ºíróàuNÇúppa‚‰Ý<øQ£Wjù|9 +üؾN$}U=Ðnèf‚ht£([ž2ñã'FV} xOÇ>ª=hR + fêî@¤sˆÍ¸Á>M‚F]À2>ïîMÏ­çbÆ/õ¼êzõIËûÞ +,àÅyèÑ<Á§gæC Ådè.îh{$z“ZV¥·IQB·B‰@ ŸHêé¥zxËäÎÅ ÊÁ~$@œjûŒ²ïáYâ5¯¹ú‚ñoïDPáó§°4n€èÍH¶Ç4+«naÓE ¯ÌÎyà‚Qt]umÿñúè *ÇàR™º ð8mLÇFDscš}oßæ`[4t8'ê"­1TŽ¯_Î(fA©a߯ؿPÒ¡pù‡á¥—÷²ShŒÂ’Ë·#¡ôïþžBUïLòÍÿmÿŠwsÉ7Kù]^Ä º {xž¬4˜ÂK/@¨<Η)¡©öÜoº*€Dˆuզ׈ޢvðIàÖæþâëd¤¬>íÒó9¿Rí8j>»Ö˝³ú™Õ+¼ªßnWx¿Íï_ù’oþuó= Ä®endstream endobj -356 0 obj<>/XObject<<>>>>/Annots 127 0 R>>endobj -357 0 obj<>stream -x¥Xێã6}ï¯(ÌËx·|¿åal:Ø}˜ìf èZ¢$vK¤"Rö8_¿§H]lu÷ Àb¦mË"YU§N*ù»ytXÑðRg4Ç¿ÍaC»Ã’jIéݵ Ý’V[ŠKì™cQÿÂ{¢9m—›hOëýŸ—øó{‡U ^ÿëÏw‹ý*ÚÐf·Š¶TÒr½‰–íUA_ï֋etèï®Wëhq}÷꺤õfy³—ØlçÑçn7x |¬¿µ\cùkÿh ¼/«}´k¯ºM«åA•Ã{ -|ë겤Ý.÷ØÖjÁ(Œl6ü]ðo±\Áç]]–´Ø°±þÞçÇ»ÙÁ–szL‘‰ínO‰‡ßēeD¹¤ûJ¿ÊÊXåL}ùôøŒMkZ,¦ûå±?&“¦t1 )í¤NÈÊeQQcé¬\NUm²Z”¥Òٔ7¥ÔN8e4™š*¿ˆ ÷ügU¤¥Lè\+'Iı´–4MÍöçt¿X«¹).„“U1%×:[÷ÎFôïB -+ÁŸre)ÎEådM±)«B:‰íG™P*˜a'NJpÔQˆõ@‹]+’³æX—Ñ"¢¿÷naíkXvÈ<–2‚þYÆî£õXîüɍuˆÔhXÏ|ÏiÐB_t,LIïÐÀ{ÿɯé£Lpb$Ú@-mI !;dæ]p é•~ÁîMžn7¶·çdœk‹¢ËW"Òb‰€5™JÖH9¶]F„¨I¯üFdÉmûLŽÜ±²>!>N¢( -€Æ÷g󖋓ød#õ|´gY,4-]Xؑv Üæáí#Ãq¯¶3 Œq0C®–cèJ“4…üŽ¯M]£F'q¨ÆϵÐq.íí.Tò%Ûï(5¥½k\µC„>bæ8þ‚kÖ³â؞6[â’DAÊ$à‚Ã:ìi †Àß -âª8?S"úhՃeœXÕÒžgGU‡\•d+«TÅÀÍ6Òzýaëp‚ÎòxRòL&íãËUÇù…„Gr(®|®œÉ«~˜Í˜$#vÌâLÝ•žñù|׳ùG<Û³~Jç\Å9•*Ë]P:/s'eQ¨?™ä¹9³§PŸJI(¥*x9˜3™ddBa#Û /]¢=öÕQÔ@è8ØæxŸÈ“,LÅ ƒvB^Óڔ–RpªêF¿Dtņ¿’¸I›„&ë1Ÿ¶{Bt|âÌgqÁ›#–Z%“ô!ðêÃ[~œ7,y Ñ8qDÔ2è4J\!ïõ¦G”ÚÓÁ»¡qê$ùÀ '^€4c¾h•IËo®3 ÐÓDFYDh"Ñ·§O`? -Ú/—–jdÿØd©úÆlOl½n½¥5ˆ»ªß5$ˆq³b07gsSÄòúÕc8žù6¶Ž\hýnq²×'‚ãC$sÌ3í‡å”¤‹9®_4pàÜ)­œ‚6ðF1 }é¾mÊš-p ýbHƒG•3ôþfm; FúÑQ=e9–¹°êJ€CùäéËњ[ðú]C>J.#4êR¹–0ܕû×Vo_µË«zÿM֖Nj/MyÄGg¿¾/dØ*P§ìkׯ°m†÷Â|ôô)øþæ°Š|GÿÑ»H?7*‘…ÒßhfòUÓàüsvr)jTNJ`rt˜ÔYvÛÁ!¢Ÿü÷2…ŸŽJfʑK"ArA8m,v9jPá¿õã×ÕÔG=d‡UøŠã£Ù¢û²Š`+z*9U²Ë$*ÅLÁyÈúèÆeÐr¡kŠ\©#»7Êâ„€ý3’…¦é ‹†Pn[ügB‰„5‰ƒe¸RS i·NýКì%TXô‘!%Sï5ÇܕÖïÀcG¯º_}°‹‡Esö0ðZóMÔ^!z2?}âd`žÁ\éU-06äÖl³˜ÎB„¦qXëU†“årS›&ËcªjëÆÒ÷{.5púˆà㠗xÕ¬šcèZ5˜Œ"¥’aéä0L‚µôMÓÏ_Á‹ ®³‡¸-Ùû]´_P7O?-·»v®êô÷{þ˓\!¸bâ²¹iŠ„2cÁ¬Š<5€ªíرÌ3S•Ÿ‚KÉQä@:ª¬«I@ ¾¼>Å?Ü_ýՙ@w|¬×i Pñ 'eðtÒÆ´=3&!ùMð£Áÿ‰Ó?ŒþèX=c­(Q¯-\˜²)œ‚$–¦Ôh¼Y&„ü3¾ª -´BŸo.L<'´«=EÆùÃ[2y7y]vÃ3òçùˆ™¿¯}éê86—³£–A9dçè@j? "͐_å£í³h×:å¢å¶*Ó±lq ¢´ÑèåFssÄm,’ÊvŒŠ ~N°ê¨ -å.Lq µhòÒu5 n1LÙ÷÷¼›ð'ݚ¿!m~c^ÐçDòWQØwâˆ_7ºÇï&þiþݟDÖûy´ß¯ñ+ -ÿ<À®þôx÷Ÿ»ÿ_‘Á©endstream +343 0 obj<>/XObject<<>>>>/Annots 129 0 R>>endobj +344 0 obj<>stream +xYkoÛÊýî_1×(P'hYRü(Ò¾±ó’8‰Õ‹u?¬È•Äk’Ëp—vt}ÏÌ.I‘~\ Èù;;3gfÖ?ö&Ñٌºÿª5MðçÕÙ+:9›R¥iµw$ŽèdJ³cŠsì™`Qûß÷÷{óÉItDÇÇÓè”ršÏ!0|ËèzïètÎoç³èo§3^å¿ñÛéìU4éÞ¾âUÝÛîùÄúaõlvŠUóÓ|žâŸèùëbïðÝÍ ~±‚ÒÇ|îÉ1-ÑvB‹ø`х‰ë\N¹Ôô¾N¥…¶/¿CÀ)…Ýãé$š¿Âîƒó,£•©r•Q6[R84W)ä`sBiÁ‚—ÆÜÒõûϟH e&VοsMþ€‰?à’­©«X¾ì}@IZéؙjÑ¿MM÷)Î/4…Fq¼gBã38*6g_,.þ +Ýp8ŸØ<ÍMRgª"붙¶­¥›SQlòRUj™iR™ÓU§Üi{ób$2t +)ý®MXmJ]Èç›(hrx1ÑÉÍ oÊ2ô•‚OL•@€3´¬Ó,a÷YZU&'ozDoëªB0²-+ —¦!*¸‰j««q®ŠZe}7ü×vá»óoƒlÃˆÌ +f֕Õ8!µ­ïßµ;}§3÷ø9ZÞé!à"Zxç·º(|¿<¿ø|9Ðb æù?®¾_SY¥wæç6:ê/G\`,•j­CûcS¬Òõ`Ó*E\’*³† +s¿‹Me[$06ŸC6è~£ ySÐr¦g졳žràZº˜‹¼_舗é«7qü ùm\>ˆ',gÜ*ºSUê“ùé=óF1Áã§Ä <ºÐäZŽC㬶œû÷€7Cގoápû~^Ãw>Ÿ-Ýë,‹Ѹ¸¢/W ÒIêÀðªOÞlۏPD—a‰çápr‚CbÇë;u­Éµ)ŝÉî:¶;ä9 Ƕ*»yô $yGgє âQØTúG ®±ˆl®É–:NÁq„Œ¸œ€[•…¯`R`‡ð$0÷jˏ9·*ðéŸN,Âä³¹°cƒ’Ã<µÀ@ÌоäûÌëò—%è—À=Œi$Ìåú "y7Ôlox è‚‰±{Òmã¤“ƒ®$‘«Ta3äØÄq>v>¢vX'l(ؤ‚DVnª ±TDKûq†K 2°Ieàdé-·UÍ%B50-ûáèo>©ZÚyíR—é7Ÿ·´à¯ý÷^êˆÝ[ ÷ý`‚Ç5î 01۔ïº< Kë*Œ_Bïk”tLs`¹.eæIÅ;Y4«u ôòå™KC-ÉüŸà‰ÿÒ¿©prÓÕ\M\­O‹ ©„´‡%‚¹aJÅfá¥O1¸3Œ~ü"Ĉ6—shŽü 3p×fx¹„SKXƒÁ*î9Á–¾ÿváÔ¦> €JÒç·ÁdD.$Éð·>ýeFóC|NY\½åKK$ §‹RKp‹äw¥áöϸ¾A8þ\ùQoI—7lçÔ¿kʅ0KoùˆÝ¬¿Ì»_Ê,ÅÌå@K`ì#›çmæiœX>_=µWj # | %°—çBP«ŸQ҆»ù6÷M³Ó3›Öù$Cqqìä•ÜWÕä®o7­}Šø¨rÿã6IӍ–¶^¡Z§|Å(f,ë +½µ~@rcÂ(pAÃȐ‹xP +dÐÀªŸüGÑ|6EEžDÇø‰ªúZl}}øˆÉ#Î µ®T &Åí>ÌÔ@Ĺ%U‰9JîG >'.8¬ÛÑ*ÆÝßI 2ù®GÿŒKNض]Ô4æ‚?æþ¯u^¢Ií›×‡íÇ~Tä^¤GÎ2Ðøv—éi읷{˼s·ÊÊh?ðí4WÏæ +À­ÒB90X™Í§¡Èð¼½»zNnp1œe +¡uÙÿ>”̱÷Ï:²ÇÍæË#ße|ÝóÜé8>/XObject<<>>>>/Annots 130 0 R>>endobj -359 0 obj<>stream -x¥UێÛ6}÷WL^ -'X˒åk€¢h»M‘‡MÖh_XPâØâF"U’²×ßCJÎzÝ P 6LPÔp.gÎÿ=J“MNϋÝSŠïb³ ÕfF–i7ÊâQF«åK*ÜIa–,,ŸåË—s¬ åé&YO5Ý]˜Ç;!D°N簚¯WØÏð‹¡~ڎ¦æ”e´Ý!êr½¢­Œ¡Rږã;/Šš©°B—;¸T -k–tT¾"É¥’,ë5ïJÜ»ǢƩØy¶ä+&¥•Ç½KÞÅà5 [8£#GǏóo·£”&YžÌÈXi*ºýN=Á½ä„>jR‘ÑäMô+ -s€Ÿ¢àÚI´m­«Ñˆ?¹Ë:è~\vÖ²öÁ â«˜‡‡ü!}èKnÒ~(ÿþíû`‰ŽLfËdÒ»5ádúa98&m<•¦i”Ge'_)½ïMΏÄkIÝP§kvŽTÓ°TÂ3’+xP¤ùˆ~EÈÞжbjfé®R‡ã‚ɳóˆKÒè€It|*åýüç]9LY»Ž|%l]S‰Îî‡&DkZò Ð—$Úp|Œ àJCÊ%}Éå€Êd•¬3:cv?[®è%&ñý$$¨ÅòZ㜂¿›!/P圣«LWËsµ`#˜(Ðl$rªMÛ Ãäm§¿ uë|Ò#wUC#ÎdÊR8ÐÊÑ1ÆGëÐ ºUû\<Âî«Wë;Sö›õø±†$tl𠔍CþçÂJÊ3¹®‡<^G­ðQ}oâ# -å@%ܙΖ¡Ï{LPi$êÕÐÀ˜\(«ò¾}?ºç«‰f?¼NØ[ÓµJ~Ÿá³þNxló¸ø}Hç 3ŽèBžhK-#7ËÅÇÿ×­¹Uϛg¹}Kcƒ–N¨îßWâtÁƒ´rÎ8°íDD²ÔpS°½V˜ÙEš¡m\ú^JÑ´‚ª£l˜r/íʕpF0)Á± <<ô¾"[©V h_ÞKÝüg^ @ûA - -¬ÇhìžçñSÉ-¦Y¨ìúÐb°€ÞƒÀ½y-<þäø‚ÓëAÔÙ"K²Ù‚²MÞËö«æéD·½ø€àoBw¢N'Ùj“äق&«tÎ"[Â4¢Ï (oì)XÎ×i²^ÏñW«<œü²}ýۇ,üendstream +345 0 obj<>/XObject<<>>>>/Annots 132 0 R>>endobj +346 0 obj<>stream +x­XÛnÛH}÷WÔèÉ,êb]3ZI'YØ»³¶‚`¿´É–Ô#’Ía“’5_¿§ªI‰RìÝ`±1"ˆd³».§Î©ÒŸgÝ`zE‡|I]ü §COû”kZœõäVÆ}ºQ˜à.í?>Ÿ¯‚FÓ`B M'A·ºˆéñ¬q™Po88zؼÆÓñ(7^m^'Ôïõ‚AãióšŸN‚«£§‡k<ía›·j^ãé`z¼sãOÇ㣧Ïå‡L|êcÕ`2Æ÷>þKèøA¿;ÄçɃó³Îí„&4_ º£i—æ‘„_Âó;kפ +RéŽì‚Š•&ýb\aÒ%E6t´°9î¨$‹µã*Žy•Óx%¢Äæ:¸˜ÿqÖ¥voô±÷ùﶤÄ,WØ4v–ëZßs#{ÞØ°LtZ¨Âؔ¾9>÷>°mzOsåVôі¹Ó-*^”±й²2ôn´ûƒ ÁiWA? ßr³±/;Þ©±ûc±‹5×🭜vüæׂ¶Þ<ÃeåŒÎÉ,Hot¾³)ÀhãØn)r&1±Êi[¹àxۀæ+ãèÒ”¨5bcŠz›Â"%*¢í +u6ѼŸŽ²•r²M¡S> ¯`ŽhÄKLZErŒØÀÃÑ ñ:ôÔË&ïøM”Ì> ï9MjéÈ­lGì$܁¡r>cÛЃ¢= F@'>õGc:Š˜×@ ڈ3ö !Sž‘ö¸p< ²GÿOn9tRÿMá1 «Î¹×;@æ õ.㺠W:\ƒ`lˆÖ䍚A"Uõ4! èñóýÏ)páá»ïëÚ_üª­AS—± 0ÿÏWÎvºF½Ù×Ùë´½<4óí«npÕ§fGuèè?¢i¡~JÑ€Žìðxªºùz¨á $¸”CQZ&ÏH$F˜Pöän„ZàyÙ¸ÅT±P!ãœ)ëx›… ۗvÉà[.Òú§QY j=[ðOŽ +,0Æx.bq¥¥NQ¾aU•Ob£W€¤Œ ƒI‹Ge{P«T‹'Ô ©(®ÕøŠc3'ü iÑ8>‚îòÑ5eðJ ÎkûÝXàœBÓ ¡f•^¦`‚%µ„ë}Ådù¦ß•(%>]’01*&á!Ï{ƒ‘§9N`Tù~”Ãó“Þl^E„ÍÊÊ䣅Ç<å°fcŒ«éFå;vFì~)|óÂNªˆ-e c<_¢ÇñM ücædHõ铁í¦ÒjtF18¤јöHá¼Èü‹´KwK ó³ÈO–Ûe®dÐw 7ô9ƒ" [¨O-  J©Oë &VZ‘µ‘®ÙãyS „+v)‚Ô!ba™ƒþŠý<\½ŽÆ…%# Í­¸F£ ` !€\ª%B +üW­´Œ>/XObject<<>>>>/Annots 137 0 R>>endobj -361 0 obj<>stream -xX]oÛ¸}ϯ˜.pÂ–¿Ç~ºÈ6I mÚÄ»ÀòBK´ÍFµ¤d×ÿþž!%Kf’]à"ëHâpæ̙3Cýu6ŠSj?̆Fø¹\\ÒÕbBFÒúlì.éjBÓÅ֌ðŒùãñÓÙÅ(šÑlz‰ÏŒæÓèªþ#¥'~šf£E4Á­ËEtQÿÁ·f“h|¼7ŸEÓνv÷ƒ¡ÅU4§‹ù¾Nðëüû}y6¼[ÐdDË5\]Íi™8ÿp%îM#ºÑq•É¼¥Ò9}ªT"S•K{¾ü‰¥4û¥ƒÉn.“ÞušÒZ›L¤”Ôk- ì– 3X›ÊÙîJëzúôõ ‰<¡TÇ¢ô÷Ê­$o09û=˜Z]™X?œnÝ£D—Ú"ú¯®øîˆã©wg¯àO.e⮟¢`z#§·Üz}bggo–7ÿF0ð¶{5ÓI• -C¶<¤Òn¥,-=÷´¡Xg…0b•Ji)MwÒ>Ÿ÷'Ù¢T°iè§H$a­.dî¾?÷ÎƒD&ÏçÀΖ"M=RÚ$XSjZU*MpKk£3òXEô±2ÙKì1’ \âZ‚8‡áݬMeƒ]e¥d"¯Dú6<-z>¤Wø¶v{twýãŸÍ0º}Òk€W+ᶲ. ¼´k-‘;™¥®‡˜c¼Ös±Œh¹•¡‰ÇÛ뛯·þjÃdHw£ë?–ŸŸœë-¯ -£vú×!ˑy F…ØH䙣 wu¾V›pÙZ;®NDj5åzß-aä‚qÑ·¨Oû­ÌÊ>Âe¦–º¤ŒW͋¶d܎™KãŠÏü®á‚gþwfXŽ -dümËÌ£ ûsÉ,h'ŒòšÙàDnñNýÐl êà]ó}ʤÈKN*"Óʲ*íQ:Ì} ¿x®°Pr€ —K{™¦ÑiV:‚qó@ß–$UrÍe¯/é!HYD·õ3Þ²/9p— J—@;“:GÕå;îZqƒ¯Qde€Na°1âü,ÒçóÚ×F áëd†^­}›JFþUA­Ûžl!c1Þ"/PîãÔ_X ‡Q"ev%³¾ –[áP ù«”¹…zŽze‚à¹róŒ¤LÊ­zžÝ‚ -d¥Ãžˆ~¯ü~ˆl'Ënat,­…ËuX0¼Ì¹”–:pêó=¢XÂkþ¿Àµ¥²äÕµ±Ä1‰KDf+™@aY´¹ßوž=V"‡I¢h®‘ÓÊì€Ð vu´¢Ûz3(.g߯‡ù_"+¸Â¢ÜSoX»‘š(Þ¢SÄhØRU z;óÝ«Ê&ØWWeQ!”ï ï¢Ôôˆr¹÷7Zƒd¨xKv«+´•;%÷Ÿw’œ>ßç2e-l=ä1BGaÛµÂÓ.G¢À©X£ïÄÐ#`ëhÖnÅDʅ[ÿŽÏ¿®:¼€UÓ'àYë{wÖxîÉ,°ørÿñöÛÓ+±»ÿö´¼þò%Øm7˜` 'EŠaÆs̋w]G± ñúÐJoD×%BÖË“°T`ÌJr•Ö‹›Jÿ³îȜ»#”Ð^15Ô<íHKDwÇ:d‘U8!$V*U%f‚fpà‹<<.óL–¦d‘+©.H˜–ôaW^d ÉéãŸO¹Â;>Æ·ÍÌEÕ}š*ôãnۑax3ÜË&Ø{5ó…ð Ì×'ÏD¥oßWñ"9QT -³á aœnÎýÂ8¼ø˝rŠÍ'QÙo-32X^¯Žè~Í :Át=†ˆ ¾1f<ᘭt¹}«ú!˜,.E®otŽ“ÞÀ!¯™–_a‡¬îTE‚îӀÎo˜e& ýõ#>~"ÖÔ±ã˜Ð´¹÷\ló Ó{sÒ/÷F±N6êYè3.wç%[‹¨­bn ë -TFuAΤSyå[ŠäÅäf©ÐÖ*¤'ôæ3f³D'±Ž˜ss  ŠdäÆc ˆ†y°µÙ<Ÿÿ‡ÃÅyðØÇÐJ?Ä7µH«™*Ϲ]‰x‡§þÔñ“†Ó‹ï7wN úø<ÝxÐápãàHpÝ6Ϋ8¹5‰±—c\9†üXåoFu„ÑïÜrÌw,×7 ‚ ª]wÚ9õÒßµƒt3¾<À…MØO+i§Ù¸pùï†3ñá &—4˜.ppÇ(v§r…³_}k»ŽcÁc ë(f‡UÖyÙ鐰¿s}øaøá­!í¨Í0c±NfþIé3wÖvºîDH¸òàf`2ԁ;/˄¥c þÉv¨QY¡MÉ3øÏ - ¼ÖNÄ;ûЀ‰=† -Wš¿Ñw_¢(îQ>äæ¼Ù#±F9û‹mº9G6ÿúóöñéþá[ø(ÏPN Sõ†~à[«˜ k‚»S`ÉÏÍЊ¨™Nۍ·"ì‚+‰ÆWz‚Œ¹6 Pžì[¿“°ƒû‚ÆWõK’é…ܧJâG¥âæR¡qî…GÃcíi”€wrå™v¿vÒÃݕçѵÈÐÌñúÁ‚x%¤Ìõšh^ª‚R‘o*(Y…gñ(\eÆ—8Üs‡gS~Bå½; =®Çi›,Žm+Ì¢5‹þä‘ý˜»b ½Ïá&Oƒ®-;̼þ4V©Â{ˆ«²áݼ} 16`ñá·s`:} u1Eóù^_¡ /ØõÛåُ³ÿºDï¨endstream +347 0 obj<>/XObject<<>>>>>>endobj +348 0 obj<>stream +x}TMÚ0½ó+¦9T¬D¼ùB¶·vÛª‡Jmő‹7™€·ÁNcvÿ}ŸØ-hU!’8žyóÞøMþLQæôz鷔à·(T”õLÍ$ ¯R*2ʗT푓 èåâsr–©(h¾*ðœár?®'·_V´¢u㓗eBë:ä⡚~ÓävÊ?É}×ò +¦ÊhÇÚY2MX7Êïܬ•ŒPS;té×Ân÷í¸w*3%ʃT­|hÁßô¤tÕVMR?w jÊWfªM%hmh/óHe'»ŽõÌC&—b ÂÓÇÁ:j©+Ȥ͑jn”æšÀV¹ç»‘†8toªa –þ4éë jn1ÕÁfóU"V«9>€ˆ]øҟדŸ“¿Uð‹ªendstream endobj -362 0 obj<>/XObject<<>>>>/Annots 140 0 R>>endobj -363 0 obj<>stream -x}Wmoã6þž_1𗺀­Øòû!·@7íîH°½[w‡Û~ %ÊfC‰^RŠãþú>CJŽ$› Žd’óòÌÌ3Ão7“h3£×»§ ~›­61YIÙÍÔ5¥UL³%%9ÎL°‰?¦üñï7›E´ x¶ˆ&”Ó4ÞDëúMӗ›ö{NñdÍZ«íw¬âì¼½ÚzÇêjÞ=ÛzÇêzÅí³­w¬nfѦ½ÚzÏiÇÉíw¬.–ÕWüƒÏãxýóõŠŸñçÁ{¿½¹ý0§é”¶p\®W´M=xÚ&Ã÷¦<ÐIiM•“4(ÅÞ ¨4”›‹’JùR’(RÂ6i)1E)‹2¢/ˆ7S" -ÚIÊ«ä@¹Êga•LGþT¦å‹Úi9¢]Uþ¸ýófBã)ƒ´M‡© ‡LFMN䒞T‘:òߨbï"Úb…ÕŒÈXH-s¨wH‡¦TfªOªðùýXPŽ -CNöU\ _„MÝ.¨"‘t’^T堏~6ÉΘ'(«lðŽÕ”hÊà¸h•)íÎÍþˆÙ{˜}0'v¦ç)¬Tî@©I*6ŸÍ³²H¥…<§²”6WEÉXÀγ–î %| ´¾y=àõIÝÀˆöØÝÓ\ZQ8-JˆFL?m<!˜!Ä.ªÏÄK$>â²å¨ÐŒêBˆ´Ð'qv4H4`IaÞ¯Ð.Gt6UÈ$­ž¤>ÞBZè&i­±æ//"?jùVxûÅ[çä%%îJUjùîñL[~¸» ïa“ÃCÈÙÇBhgNŽUádáT©žC²q`]iM±‡%®Úï¥+‘âed×æ$m,–ò’')Hm“E©vJ«ò ×P)ÿ¯QùƒþûøÐGî3²¦ ² õädR*S ¦€¶ÏóÜÀ£°\Dõb@ ЭI¤ªÀ¿Ž¤@¦8ú:”Ñ>¢.vÃôëéîi•[Ó?ðõǐ`M¸Û‰vá$%—€vüXÎÕ­/@äþ}àç=õI ,"(=œ·Ÿïp>|¨P/}¸¾î­D¥(8T]O†oÙ?zkSÜC%°ÑÒf½!ñ Ç>ߪdö}½¥gÞ=ނÚC‡²@Ös}Öy€ºÿV)+á~_\û]Cª)/8ÒR L!¯Î#§Ä»ÞqÚ@ˆ‚´ÊŽf”¡H‹ø@Ël-Ÿ¥n—p=D\£”ÊDî`* -ÄS•e*QLkœáLœÇÊA WÄòŀáQS¹)·\ UfŽš4š”«IbY“Ä4šÏbÇ«hÿ`©;ïîÝí[^¸¾Äފ#HWz·¥ERqåù†ÆlՆà²Û½žhš *ù ð˜ôlïA%_d-7J(àÞX;fD—Ñd¹ð¦ÊüxN¹ww·—Ç^ FžÚµ—‹'n: #U -­’çí‡FGWE¦´,ÐA¡âòx¥‚Wyèæ)r0) çvÏô®XŽöCjót%´^ Èýûò@¤h Z D¼„Ôîû•lΉë<·²Ÿæ£0y ÿàà÷-€¹úK¦Z96 óú†~dŒçý]¥5Úk¬^œY& ôŽÕW2s™ï0Iy®Cní̳ìIí†À%(¸"ë‡+á{T^y¬Ð…Z,ÂzÛw¡îYÐó«Òªx¢Êêê(Gˆú6ù•ëhø¸ñ´qeÅCñäÒÓÞõÿ[eJNëðÿÊ{ÎM÷0"ÞÀ=ƒ+ÜK_‘Ɔ;â1®87À|ŠHášUݺêDæ<*„ÞÇUÃ㭗 ›ié ®\íÊ­£^J¶òuD÷wŒèÃÿXÌ'P…VëAÌ ÂߛÑó=[7¦ŸèÞ -Œ‹÷àRHçrÝi¦ýá€Ç‹¬Ò5tšb¬çù~<›‡1SvD¿Yõl^ü ÚÒø…§Ë.’ìÑ*Z2]ýÊ)¿Áè5 -¹ª2B[°gî:™Ñ˜¸9´-,j¯1mûs¾àÒx‰×OQžp_[˜ŸýY£™ÔMgŒnÃwO€ò5^®êdnæP¿x]ýÔ\7Ž±ø6l=¤6ÉSô¡OB¾aa¸{†·.g7ýN4•–‰H¤¡mœ -tÊ#Ò¸±7IsÙ6yI¡AúL|½sù&ì›àÞ :Üàôš‹µº*$^¾¦ðã=ͅÅ]mh¤êY¥•Ðt2¸WùëE&OÍÛåày٥Ϸ´ë¦Û/¦Ñ4^Ðr:â9_X‡—LæÅ‘•¢€Z–;ž®6Ñlº ñj²áͳ¨Wc+ű)¤¿ Íדh½ž‡È.XÂ/ۛÝü ãÜÕendstream +349 0 obj<>/XObject<<>>>>>>endobj +350 0 obj<>stream +xÍWQoÛF ~ϯàü²4H[v{E ´]3´°óú”—³DÙj¤;õN²ã ûïûHIŽÛ +ØıÎ<ùñãÇóç“a4ÓË_Ñ¿Wó+ºžÇ䙲“‘.è:¦ñ”’{†0ڿȞHöŒ£)Mf×xãO÷£Ù Ÿö/éx8âÎtÇѼ7~Êo<ŸG“éwÍz·Ó½Û׋'"¾¼™ÓHÌқÎ&ÑèzJ‹TóÒ"9DôÆ¥¹]ÑMžr‘[ÏŸNtç(ºjw^Äp2ÃCŠ £ˆÞÙÚ»´IêÜÙÖzFÝ!£y4NÄt±Î®ÉejcSãÓ@XK9ä+Ë)ՎJsÇäOE¾á@lBÎ'ԭᆠWÁr›×kª×L!/«‚iåL!~×\T}莹R“å-á8‚©wN%Ä!]ÌQ9„õÁçw¿PâlÈCͶVkìͲàˆk¸C`â¸4¹…‰± wÁµ®mâ%VX$kù0h–M‚wúVbÅéŸ8©£î| K¯Z½6ŠK‚Ô#”–&¹LpºP6Í7yژ"Œ¶03Ëzr ZÊ +PÙ瀥,ÄY–'9[üÁÄö»ƒ+6L¥ó| + ”ˆ=n8Ԕ9¯y­8\v(ʈK`µ´bËȘ ÔÂ¥d–®AF’ N@ÄÏ/^¶Ôˆ4‰ÐaÊ£8¢_À7®Tç½¹ÖI{ccË¥I ñ:Óó¿¼i÷šC^é9oï«ÂX#Lý®5:¢ªÚt^ô²IÖò¿r!ä ƒO2C…$H)¸å–›Ü5HóHñ½QR¦Ž¬Û›ÒÀ|4^)%\² Õ]ö«i$ðÏ<"(KÈy»Þу‹°vM‘Ò4ì=I {o½oP¹%'¦£ U샳ÊP5E)Sê@ ²dp vÈ°(¨±)Ì¥IõX竇žÙ +]‘Ä’€ÔYtÉ+°Å`ZdG¡bl5Tˆk°‹ê¼„¬æ«ÆËA°÷±rº"ù—¦ïè`R<÷5£­f½6›G„­<¨Î”V$÷µ7ˆ'°ñÉ:¢š“Uh'ê²ôvžÞ½ý-•€¾éRìÛr?]¡çZŸmžíô,Õm^9YPÕöl”$"p‰Ï—€: ±ëµ‚–g{iTô¾$D{ªu + VTQ º¨9ÊéÝʛ²_ì=`B=\’4^V¹¼9j€ŽÿÊ͎ûѵhú(šŒc±Æä‘~¼<£<£Ê¬DbƒÀ¢¸5Ó`GwE]vAëÓS˜ßžÒìø‘íª^ߞÞ>£—4ƺ}vhùûááGœ –…KÛT²~húG÷0RÝ~!Ò¥)ŠsÌQ%Ԓ: ÿq¤:øR.1_@Ë4ˆÑ†ÿ!³­¼´ ´ uÌi´Ÿ”Ô"0;[›ûž—½q`Ì.¤ ëþ#)TýÐÞàƒ‰yRC…ŠÝa#‹‰ŒûNv/:j`äϧ +¼h¯Š5ÔFjÚñp¤ÚGÄûbå ªR2Ë¥ýÑ;]HŠ¦e cE?VÍP‘IûžÊrJ™w¥òI¥N­úNŒè'˸càeßã­\wu—'M*ãsP«2(!¦ «· łßއŽÃöYTൠC¸FaNd¸Æà¦ãÎi uD“:H¬ônoÞ^iP?H•?‡dd¹•ëÇq<•ìWhﳯðsÈ&:CY@)íäÐ9)é€`èE^)E¯´*ôâ8{J‰ ³¡­ôâ€6õþùïé{÷K¯ÓÙïޕ•ó˜…µHÚóä{E‚ĵšÙX\•ê .vç8ˆÈ<”þþÙÊô?€C×£Ø÷m4Âq +uüË`»¼™á&(痘ñ4ºêæéo!“™|«šà*´§Rˆ·‹“ŸOþV-%ðendstream endobj -364 0 obj<>/XObject<<>>>>>>endobj -365 0 obj<>stream -x¥WÛnã6}ÏWLóä¶lçf;ëh7›n‹M/».Šy¡%Jæšµ$eÇýúž!%'ñ&-Ð&ˆaHœá\Î93ùr4Jfgôøa á÷bvA“Ù)YIùÑ8<Óä”Î.)-a3¡ýÛ$#:=$çt>ðwüÛïGÃۍǴÈÙúr:¡EŒG´H{ªhUÉ«“Åg9SJòòÁSa¤£•´2a·Oœ-DáÈ­L£3ZJª¤ó2#Qe„/5©*“?ɍ¥¥6é:úÓj-¯è¾'RY{ 1“‡·û“y—âàÉm4¯…×m ã³ä4&4W^–ê/™iåüׯ_3#š³¿`DDŸ¾.b%ÓXbC’¢¬õ¾(Áv>üßóá+‰ ¿Ê„óß;~Í÷ág±RŽJ±F¯‚Cg¥å>çhùUÛKQšª`ðnߛAWó´EË`’LÇ4>¿ˆ¾?½œÐs<…ƒñÅ4bêw'i»Bìäj‘¯!'9E<ѦP©Ð”©rÊTŽ¶Ê¯PFA™I›飜k ù­”LSÏúØT•ªŠƒ†Ë´;vQà¢B"K)Σ%p¦w5X ›ÅX)".·Æ®ÉTÈÃۃŒ[D½špÇ¡C•ñ`„SžsD¾\wDQr>ˆümûRQ‘D£A•¸êóöØ5I-cþ GxóÍ`pì`p .íôÞ9å¢TZ K¹5%½_Ü}H@¥Ÿ â@UoLº4fM›óäáÉM@†•µFs@ÔÝÁs+Ka××ÉË@è²~µ,g³ä’™ø‡¤•ØHð‘xi+Á}DïE“)Y¥•¹3Äî´¨Š>!ùwUº¬Heʸ]•Z¯CZÞpi«—8pîêþ¤¡Žï›.„vˆ‚·Æ[QÁ=j²•Z)óª”îÿõ}aC k m3@¡€kV[Ò²*ü -¼z! @®4BAÔÓ¥À¡HQǹ⹠‚h–enŒpîÀè8èÐ[±sTçÔRË~àP{ëŽ~ÿø!zT•ó‚ëÌæÿÝ¿@ß:j:;b#”¸˜ÌTžKË샪—‚ÑþQ+°·}†ñ.Ø|æ)ÄÁ‚gHŸÔ~ ¿ÞÜöò[6ž “¤½/¦+(o|ƒûcÞ@½ß%ô=¨€ òFÇ*„ìï{óX_ߟÄKÄÆ(V=–DØFâ“ir·•6ÆÙâN¨±úÛã•÷õÕp؉Œ7u0ì躷U€„•˜{@¤£ã—.a'ÇháJ¥@|Ä+0 ¡'ºæ´P2%ÚÀ {`'j$'y:_ºäß2y’Ö³„Q3;ÿ*ùÇ£‹Èþïù#l—W3ӕLד¦à6«‚F/EûŠЧî>Ķ²Fw«@oð>>趚™š¦ëD'÷=ýþȨ°tóŠ¶íMg܌ÆX©rlLÓd<£Áù$æw–œ%ô«Uó°£·@7Ô÷]…õJõ<.Ykԝï -‘›Þ8f ª)—h®É) .y¡c ‘à÷˜$)CŸÅ칛äÂÈÛ3þ ¸!ÅLÜî'Á¯œŽ—²dÁJ/[‰âiL…¬@é´eª_ ,ec˜T6Ú+,:|=؁.vÖ0Þ¶L¡Bóîȵ/0kS评<ÿ°˜`IܟaPóÝÔÇԈÓ/Á]‡N`Ådç±ô6¸aá%Q ÷„~Ìî•ê†[]nA?nŸ‚^ƒTe\„89ÿ¸µÆÞ]¶»O¯«Åó–ö8íXfÝXh’|µg_<ä±þ†zឍ°;qZHäÁÇý‡³di ªX“âÞÓvÂÒö2 ¸ØÐ-‡rÓNz,WJÓN\M{ìpÈ5g „ q)Vñ0§jk -+JÔ¤HèP”~{8xLžÐ-†V7Y [퐁Ÿõ­arÔ.†„ÑÉasÐ;ÌFÔ1m,ÄÒïiÕÚcãá“П¦áð*‰·Øaì˜¶¢LÁ“v¿ -»($v?-“¸Èÿ¸oÛ¹ {+¿4 -':0$'ÐA - Çb;îðîû^f0𗜍¤;ÌÆ–úŽ€×C˜ïؼoFۄðïÑRj³EP’7¥fWLæ@0« ·bÝm/Ó«ãÉ,9_ÐådÊëW§57Xµ©Á’;Q5B³³Awv0Íø0´ -ëwÔ¤•I^f‚˜OGÉtzŽTqö’=¼[ývô7¸Þ éendstream +351 0 obj<>/XObject<<>>>>>>endobj +352 0 obj<>stream +xµWmoÛ6þž_qÈ>,ÍlÅï/-Š¡]“¡ØÚm˜QìC€‚–h›©$ª$Çúß÷IÉvšv+Ö&ˆbKäñî¹çî½?é%ó!í/fM=üŽçcšÎd$­NúþVŸ¦N(-°§‡Eí…÷$=šŒɌF³)>ðç÷ö’Ù O›K\:O° .Ž’y³ø!»ƒÑ<4‹÷v{ÔǃáC†óy¾8¹¸4£Å +áLæ=Zd>|HÏ.ïRY9¥ËǏ7X8kvû|ø";{¹¢®I *gvª\“Ó$²ŒÙBä9åz­RJuQÈґ(3Ê4•ÚÑVÙ />͔5uåNÉmk®·¤Wþsª3Ù¡•”9­ŒÄšj+a¹O¹*ekt»Q醔e{ԝ'öìõo Ò¥7dE!Ãa[ËIiN~=Gßp¦°u” ’aB¿HYÑOÁsm)Cz[zca‹C2ö˜\ÞU¹(Åçqs´ÖÒÒR¤ï80Žý}--oâø™Xª\¹]B™Ÿ7 ªÆz00R . _JÚ“IðAX‘Æn¸c؂qåpFŒÓtš”/6ÙößpZdC`ˁÀ‚©sd.äÅntgìÌ­Ò¹p2óÙÌwž zådù˜²Úxî ÊL®T©n…Qb™KÛ!á< +@i®-¶;¿4"å¥Û,™+ˆX·°U€NS”º˜9QT¹ŒlG=$S.Œ~2ó9äâüküDß=å蜌œOœu\'ºvˆR +¨TÉef JâÞ¾çXÇô°2ÕØ&ï| ´Õå÷®É]<ãkx}qx¼ZÑõ™Ïù›˜(zú߅k¿_?:Üð÷á"z¡ÿÔHÊ©|#ÍîeQiƒèÝõÙõ£'‡k?Ä/}_Üÿé\º8OÁwîO<-äçGΑ/0Æ]K +«òݱÆµÁè›q9îDö§àXƒÚûºó|E…~³,£s×&·o}AÖè)õžð Bßq9òãÐc~À¿™räöVâóOY¹¿ý0ç}&Ø_ô•YR‡VeÜg(yÈGÄ–¯”±Î÷–NÀÃÈÊH‹igÉ6ܾE»¹”wa/îx0Ü,sŒ½ó‹ :InÄퟏêåC°Þ½|ý¢ûÉ£“WíLìÆÎ7&ó‰/<£¤™Š(L^?âENÖɊO=_6e­ ¼vpÄiÚùFæi4>/XObject<<>>>>>>endobj -367 0 obj<>stream -x…TÁnÛ8½û+¦:`±’,[VZôÐMwÑCÝV—|a$ÚfB“Z‘r’¿ï#%»µR`aزș7ófÞ̳„•KúùÓí)ÁgU®¨(3êífi8J©Èh¹¦úŸF—ïÃÊW +(ßøŸá|?U³w攦Tí¼÷zSPÕ焪zþMÄÝ©D×*îDDN<;ÚI'…%”Fì¤ )ù(noª &#bœPœ­YÌù‡7Áë…l߶¦sðøþï÷êóWŠ.'Ìî*ú8€œÓúä‹&w–Ä3?¶J,ð&¨6Úےم÷Ò]Ðu&óë×æH~âRñ{…’šŽ¤®Uo¥ÑÄõËÓA€§ÔÞ ŒÒ%Ë<#»15£ÊБ?Š!µo[¡ôÐ[‡"ïàªk'H›§Kµ†bÜNÓ|{Éóý4ÇíÜ:ށæ“t¤5ɝåºÁUƒ5gC²â(ãÚ(£·7‹p{Uµ'©݃J„4˨¥=à‰;œq7‰ÙX³!ÑúÜó‚mR*³¡ëÛl]ŒÏý ÷qš¬ØÚWñs<­^¨·ˆPtš«‹Æ¢QSë?eù2ƒ¬ƒ'ÚøâhÕ¤`·Åߝ<™çmȺNêý‚Û3Š–,ei428Gð-^³d½ÐQu×Û߂·yµ¨7(:#:Š¸j£Wav½œ0o¡ç{¡E‡½ÑÚ@b½ˆ©dYžy5%%vT3ÿžâlÃÒҒ•YØ5UX¿œŒoˆõ¥9ñNšÞöXšx5_­/?õœl+j¹“5µ}š‚Ñ7Á› $kú®oR›³‹’-ÓeyÁVCð³âîÄI(ƒ¡¤¯\÷\yÇ8íã")=Ÿ%£;S÷G¬î»Jõ² - 5(.ß$l³É±áa[x„ÏÕìŸÙ4[ÇBendstream +353 0 obj<>/XObject<<>>>>>>endobj +354 0 obj<>stream +xíWMoÛF½ûWÌ-²c­IŠ’¨>¤þh|ˆÑ"jЃcE®ÄmH®Ê]IŠþ÷¾Y’²”º©[äP …B$gçÍ<¾y»þå$“=]ê%øN†4žDT+Zœ„þQHãˆ#JK¬I¬é.¼FbSœŒñ; FbÒ¬Æ+dÜ_ºàáXŒÚà <ÐSJÿ« DÁ>4D¥]l@Q·âÁ›g£q,—†£? Ãè 0ù2 SðÀo§'·š ¡é´Ž’œM3OP@Ó´‹HŒ]™²T•#éÈåŠT•‘Yм–©²¤þaj*Ç1ÚRi@ ËeE¦RdÓZ©Š +U-]~:ý˜’’±NÄ0dïæqUÈJ:mª7MPrÔÄÈ4§´0VW˝lnÖEFs(Ã…Ù*TVùz¬,Ìw$)m[@YŽ2…¢ôÅs;¦ÖKÝ@s[üÈ·ÖuÖ¾/º§–ë ¨ïyËzf±è–5­ž##¤©·Ú¢0Y“ÜÊ-jSúìG-šæàl«‹‚¬.W…^ì|T¦æë% +[žS)5“+«T“ûµ’™œëB»]‡šL‰¶2°ê {kѹEe™X:§5 +⶘ÇE!—àÁäS󮣊´³mÛþ£6¸…òŸt@œö)%Ø>üHoè7º8£þÍýuœÎz³Sfh›ëBQw§\*„ ³‹gÒ +D‚œùâbcÖP(âAÔ2™° ÇYBº¼¤ŸhvÚ2½e½_oˆèÚ|0¥r9hø¨êÝ]¹2µ“•ãš¾ù,ÅYSaÀY¡­cޙ)°dñò0ü¨]zä‘ÛΘ3LTSï9ô÷ÿº²IÜ– …¡2ïý–øhçõÄb è^–,ª+Sm`М–#—éGH°ÏÀ^"ôQÖZÎ!¬Ví‚h?Bˆ“ÄVP§Ò¶óbÕJÖÒ)ښ:³´ÑcDë*SµMÙ­f½W¯f§š Ê8²NÖð»ŠtÆ},´‚`µË— ¬{{ÿᎮ0‘V՛ÆQü0Ô­"Z—à ñìA5+H®€³;ëTI9µŒF[/x‡Aäî'Qk …ᬨAýš+¹KAH#uè;-¤µçäê5n²`. T4y\™·H٘0ÚÂà7¨.S)ðÙx,èûZoÌ#:0t<Îñ™‘ÿ½1ÅVQÚ­íð!—é'º¤ÀÏÜ>é^aŒ¼Âî*p%yïi·ˆ/¸€OÏÙ÷ÉÑ CÞáÙ»cÀý¸‡ˆIÉ +Ý®«Ô;èÿ +ýO)´02{`ßX`ba‰ã”:̖†-<À%à)g©]µ;Í×/#3ðËp±­øŽ%Î+y_»}aÅ¡~˜ú;oNĥЪ6θÝêkøt{[9½Ab46cOÅ'7¸‘?§tƒ·Çå7[ú‚¬ ö|Žõ'¾çÓ,@(N€;³æ³Ð±¶˜©OüB‡K°#úsÈx"ágèX$Ž&Y¯sÌkØiaVè콬ֲ`Ð~ØÆ÷ǁ?¶Ä|ÊÎxïün Ûåƒ«ß cüW‘$1NçȘðқéÉ'¿ 7Õßendstream endobj -368 0 obj<>/XObject<<>>>>>>endobj -369 0 obj<>stream -xÍVËnã6Ýç+n½i2+–ìøÑÌI1ƒ.RÀí*Z¤,&é!%;nÑï¹W’ãºí¢»Î ~Ð÷qxxÎ¥¾^M’Õ”Þ^–&ø·º£Å*£`¨¸Je)¥EFÓ9å5r&:½pN‚œlžd4[.ð9ßäN’å¿/}hš®’»>4Ï’ÕüOuÓð.ë~Z_Ý>¬(›Ðº¼ùbIk-˜°’_ÏúÁkë¶ôckµ©¬3ñfý,9é¢ËOgÀ»ÖNúìšàu›7Ö».rFiÚGf‹dΑëÒFŠ¦!_Pl”Ó*èHXÓ&Ú­3šOµz1äÛ@•Ý›HFEk4]àÞT~‡ÈƒmJjJCÑÖ»ÊÐÖ«Šë–¦Ú1ðVOhœN;˜/Æì$aä́МüµƒÝû×ãˆrqì\m*“кl##ãʵ²!Êå¦G×Usy`°nËû?kœ—eÓmŽOò‘¡£ý³É›¤O€fLÓG`kJ%4å`"«Qa£ò¦XxsÚî­nUAOA„)‡eÁÑq¨ðU;BG>¤ „¦(lnÃ_dŠÜP+újo¨öÐ"¨eÈÁ|mMl¨ðxc[o{¹ €1±Ž¶Æ™€)Œ©p6^“Úøö²±l-°ïÇ:ݬè\aB„–Ð/L-dYKŸS,XÁãé¤ÓÇB}Üû¿}èççâdÎï_w•rŠåû]r®ßþ`ú¢L~Ýæ%¿ï|Œ=bƒ|R ±2_~³·¾Åþ@˜yU¢UíÉùS(Ô¯*ˆÐ qn~&Ð qæ›!fÄfƒF•F=€هòHo5béÛJÓê’É©@B_ZœàÆ䪅´íLˆkϳ” g iCÚCŒ¹6XG¹#6\UÔ:d¶²€À,\Xzc˜íÜóQ*™ë)î ¢U\ ʺØpck M»mç3£CÅ­—Þ.ªã÷„“ð{:D: ¥‚~w.€eÙU åµ ê¢i0Ѩ— =Vð°‘)BGžB›à‘èó—Oßb«Œè›>{ðëU{±£–ô]gPm‹£t–±!®fÌ«ø¶û"ªáA˜»ÙŽoJáÐ… ì` ®gÇ$ä ådB -KXqÌ6D€ó ~T]s1ˆÂùø>/XObject<<>>>>>>endobj +356 0 obj<>stream +x¥WmoÓHþÞ_1.Edk;΋9TŠƒ"ŽkRÝéÉÚØëÆ`{ÍzÓ6‡øï÷ìÚn›(W +¨’³‰çõ™gf¶_Ž èþ¡®ÈÁß0Ò8ðH J\û“Kc#Š èL&ÐéF‡94Ì%2Æٝ° Q¶o¼¶o¼Ñƒ7pŜöÑYqGlÜÉ’àޗ=µ¢CÇ¿Ýuèã×ñ½Ç‚1óŸæÐùlԊºÀ¬ ùÄÚäþ=‡îdtœ÷x†ŸMZ«8¶þÞ,P€5{'Sh,Rr™?ðh4 XิH,Æ-âÞ²ÇÖËc·Z¨’²RS.yñ8O³\,{Tkµ‰5Åy&J՚kAÏ㺢åñïNjOGõ'°h Å0ôcŒ“)'XH©ßDÙ÷6ŒÍYYkÁ’éËFr/¡¾0/Z÷?‘‡I‚¤¢½DµdTöä6ñ€çaê4©ûlÀ|Fa¹)„â:“eý‚x™Ð³D¤Y)êèP@1ô ám•óÒª´¨M|!+sY âyN1¯2ÍsʅFýáá&Ókڔ ¾ÄR‰šVBßQҍTIÍè­¤Rj‚+p(KÀŠ,̈́jTñÓ½6£eïôÃ|FgèŠZ¨kØÓkœ(æ|®¶-’‡¤‡·Ë¢õ”Ͷނ­Á„Ä–ÇÒn³æE•‹'ðDÜC +¾¾$óÞH™ ÿ•¦§çóð-..Cú¶Çð{«Öžém8=½<_DóÙ?!¹ŽcUáô©»(Ûºôè/Ak~’`˄«„J^dåÕñZ ^]á!פåÕUn4RÁõ1+ ¶T)Q)‹º–ê%MÃÓÅåE½Fe×R¯)«›µTzúeª)¸¶Ê·äš¦ðlёl"êXe•!!ûUü;غȦ\œ·6׶ý³,É"­€5w6Œnôñ"œÎþ¦UÎ×;B¢L²”Nž#ü=[ôü¤Iã;ý7dt†¾CIô¯µÛ¼¦ÙdQȶ“Hn4˜§3%÷²—4}¥D!Áƒky#òzylÑÞk[YBá}—oûŸKySR" ŽêóXÉr[ ¼˜|µRâ:kÒhú<û·iû¶Ý1WM·Š‡œÝ÷2bŒ@-©ÇD‚¥ä‘Cgà çâ­Œá:[%ÃlqhX4%iwÁƒ¤ÃÛ§uvNJËyÍޟ¾ £óÙ|ÑPë‘~ü³ëá]tnÌ﯏N(ڏ‚;ülæ8íŠEÿoó2Ê +~%¢<«µ•;h¯3#un…:ž».n[ÍW5Ûl¾Y3—µ6ó +õì4Ú̈́BxÐu|³ZŒ¬Ëè#¸»R­ |æ”ca”›ùSÔ"ǘ?4&ž¾˜cÖ>•B$Økè+³¹à.Óp–¾° ÉLDh¡ç ©ÍÑÞT +Ðìß(ôL1Fß&Oš˜7UCD#›N·Wf¾®Åö7eÑíz☪1šJ$VÑbqZ +Å‚ +þdhl^›ˆ¸Ûýh±!Y‰Òàl4ΥżÊ,DŽ&ãχ°û¡‡©‡{›6¡½z…O`ÓìM$bççׇ¼!"ƺ޷¯¿5˜‹«"îŽã1¸2À]÷³±¹=ö>ªìZÞné-š;GVŠÞórÃs£Øwqç¸Cê{3½Îdbò~·1c«»¼øsq÷ñ,F5\ýyôó´ŽXendstream endobj -370 0 obj<>/XObject<<>>>>>>endobj -371 0 obj<>stream -xÝVÁŽÛ6½ïWLséî–-ɶìAm²AP´iQ#§½ÐÒÈbK‰IÙkù÷<ҒŒx @÷ÐÖhњyœyœyäÇ«i´Jé<˜-Mñ¯æ”­2LåUþŠ)K(]P^Ãg¹„O?xŸhJ³8bš-3<'ñ2Z¼ñ -ˆÃЧé2š÷Æp !ÃSgš$<ÀƳ¬‡½[#ŒKäÉýŒâ˜Ö%"^,3Zaå)­óë÷ “’r]×Ü8K…¦F;ÒeɆcîäžÉòNá¤nhÃîÀܐ«7MÑÍ ŽèNéü/’e)ÙxÔÑÍúÏ«)ÁG‚®7G²­1ºm -Ùlg:HW‘ \±0#*¸”Ø(¦pŽMy˜ÉýbÈhœ,¢™|ó(êâ—'ƒ)­|Æq4K'óh‰_XMnŸãÓç‚ñ tKëJZÄ®YçÉЭ;堎$:êրタ{âúñL.PeI×àTÚÂÈÀß«W˜ 7Ìn.|þ¾˜Ñký‡®0Íö›ã»z§ ²s×7?\˜êæirڎÉ-µM û¶ŽÕq¡ZC}Ýþ Cþ&Ö‰yb‡L‹Vy’Ðsðy.ôq_ÉY¨èPï9ï|Cvnò¡%ޕ¾ðH@Gœ9†6Ó$ŠýekZUz+ó¾÷Cw퐶"§éE!­iwîr†ê)}€2„g_Ì#*™•†±€î ¢kðÖ2։¿:T2¯ìýú~MЏjE݉°t×ç+ŠÑÜ^¹Æ)ðÍ6‹’(ègæýÔ«Ö J҇&¬èƒ9³÷Ä Db§ -òë´9Új¶´P1àƒüز ê‡ô ‹Bl¤’î8öï;ýô©}--’J˜…ó„8Lñ¥ÂúæíÐ%dºÏ3ðäÓëTpZï~Ç+¿-üØU ¨õ™ >Ó*ìÜi'l¥[U@Òi/µB£a7!ZAÄJÇÍK*ZÓKtÐcÙq±áûNj숪'…½–ÐAm=ÀƈœñöPáô@y K=çh ‹ÿºÄ'Ýùt¸Ãià ±œkp§£ŠºùÞõ;æÿ³!‰£…ï½o•×•ïeË¢|kþñ +ÛßhXX©ŽOй5¹_vŠ8Ëp…Ki‘­¢é*hÆoFîõã‘^óž•Þ¡eM+”/ÿq »4žÓ8›âÂáÕ ¢n4o[\€üÝÊzÃÙÒßÞf2­ü?oÖW¿_}ñéJendstream +357 0 obj<>/XObject<<>>>>>>endobj +358 0 obj<>stream +x¥VïoÛ6ýž¿âà/sښ¶l9¶VdÀÖ¦]vèÐì[€–N1[ZÔH)ŽQôß#õîë&ņŽCw÷Þ½ã?g‘Ìhÿaoi‚Ÿy2§E2%˔ŸEa)¢Å”f”npf¹Ä™îߊ“¹ˆ(^.ð}¾Is;pØt¶Ë¥˜µ¶S؇{ö÷Öt6ŸŠ¸5§»Æ!Â#n£eìc¦òïB8mƒÎ¶wûÛõÙø•¤%]ç¨ÏE2¡ë,$Š/éðMá*–™üçó돰\v–£(SØUN7CªÖÊÑå%þʊnÎé3 !è‹?4¡ÞÖØ£…GÄÖ{ùÃTüu8CzSàj&Wrª¤¦T:nbñ«*¹JV¼á¢"Ä© +§2&IژòÉ"#6*«îpü)Á¯Uì*G¹±0NM‘©J’„³ºS¦Æ¾5›p}YÛÒ8n“Lą/ÉÃÞJ›ôÓ32´*Ø:’ø]™;¦Ü‘)+•J­wTZvl±ìC÷’«lV5ØåCÝÈOH©"–N±¥Ês™‰ŸɾZyíŽë•ñkS²eÊ¥–}^ßuqu/7¥fâû”¦)Zoà‹XxâD"žM˜“Äç¼]+؃ƒ¨}¾Èß|¤ G[ .~>ü‡ˆÆOè½FnL™IëÙ¶©÷%/L Ø„ ï˜Ö ÇOÆGnf©ê'\ è{(Vª¨ùykŒpofþvfà rq‹Àƒë›óÎ,„è<~•P@6GÂMÞәH.‚ŸXÄb*è×·oÃEÖh€×2ϑ[›Zg´–WR „âˆãóÐVW÷¥–…<¨ö·­÷—C¬´²2EyÁƒÀŒÖ1m•ÖÍÊÎÔá€ñ \O&Í΁q`¥wÀÖ‹ðqÒ×éÇÂG·LÏ8 ߧbË£GÙsRñ=æÌKóaÝh€ö`ûJ;¾™´¸¶½Ó£:³Õÿ¬‚‡KŠ¤ÓÓÔÈc×'ˆxtJ,¯!,¹²Òv¶*h°ÏrА‡ï9­+hM¶ndÑ"Q‚æ¬e«‚hôt”ªWÊØ)Ëèó!ô§3Èn ò͹ †³ž- -wZo÷¼ÃI8 +Ãe3„Ìò@Àû*c¥•§Á"ÍodVjgH–¥VìZ­ë[$žNEèrßÃ3¨‚جXã´£[·£º¤•1P§•ó:í †îD黺ù(ß{}ý’kyK—^9÷ã¦ek/ÿƒ ‡N1£¿½8zN_ˆÑ$'w'Ø=‘íÃD3vãià‚ø÷ƒHRå0e=˜L¶Æf»f œç*U`€è‚tÁ³;­bTðÖëÈéÅì#§TÊ_}M2?WüüÜ“ èSa¶š³[Æû†^Œ_<}*Pùß1é æAÀßä9C'W»æZítãÄ?q–£fœŒ…#.ŞôLèô’+!Ö '3&ýŠSYc«y|øÅÅí¨ôø8x×> :oj‹‰ŠÞw‡/T&lj“VxóáEÔ¼¨ +¾¯è¶Æ{ÉOÄǞý3#ŠÂ»`‘ˆY4§‹E$fó؏û÷xb™û½ì±{'‹ZjŸù(jíG‹IxF t/Læ‡Üë.‚Ðmñ"‹ <Þ½ÇhâÏ^]Ÿýyö/Oj‚@endstream endobj -372 0 obj<>/XObject<<>>>>>>endobj -373 0 obj<>stream -x­VÛnã6}÷W җ$udËww‘‡l“ t‹5Š>h‰²™P¤–¤rA±ÿÞ3”lJ,ÐuGçræ̙‘¾ô†ÉrL‡/·¡!þ¦Ë)͗#r’Š^o¥4ÑxFY ŸÅ>»/öI†4™-’1Ms\FËdÞxã÷_;ã)´Æpˆ‰8Êh1J¦ÿu¦‹×W½Áõ–´*(M&ãÍfÓd9[Ð*I‡´ÊŽ§ßãs²ºë é,Eáˆ~L§ô±} -[IÒd¶vb#s’O™¬‚²ÆÿôÊá{ t¢*¨vÚß:)râÏ9 ?ċÁ)ý@¶ˆÇ Ç?âߝÌpž¾¨5y+P7Â(Mf̈*èæ˜R:?§¿éæ¤ôŸÎo@¼´ÚR†­2›¿¤{þTVÖaÂÍñÍɇŽù×ö÷x”L8™ßÂöwdk< -å|¨„e÷@‘“•“^šàÉïмfgïoäSãŽ;oûKí%‚| I’d6—´•N⺾#õk“åìê·Ë³7Ëmñ®—”‚*ÃpÆla(À×$ÁeB?Û²D­$E¶%m7*š|§\Ï(MÙ:ÍÙíê©ÒÂtÔóàzòÂdÖôâ×qÀâÖÖ:§µ¤¬Iµ‹òtEÓâ<VkûGúe<)Ò£S¿á B„Éw!<=*­w='±¤RÜËè­K‹Â*k-÷,¶?ôlkڊI£)ie¤çœÑóQ@$vÙúѸ­£rvÏ´±´Ù=±%¸&/™û -ë66t@ªBlk^aúl} #8õéèq«´ä‹Üâ[† J@låév‡à–Œ—{˜ ]A:ZÇ5É @©};ÏTŠ;ëšw0eÖ -œ<dƒ¶¡œ^¦½\hM×µÉâf£†Ï֛­~þ?²¹ˆíBmóc3êá>2É`ážø†>ZEyº«A^å*„ ­åFƒUÂá-XVQ§ü\ùL:½ o éÐRí­0 &kÄ×d4^~©ù^TLí9… - Hhô†ZÐƆFb€ÄJìä ÛHÚA²0Ë%:X¢„í)h£ þ=v…ižÁ€'`땃j/›ìF…ìÊ༌3ŠØ/;Ï«vXÚ%Çúi¨„ŒÍëØÑe\‡5Ç¼x -ªl øzÝp ®8¸‚©¸\®ë øßôAM§ì8˜j·ÛU¨Üt3|N¢Zã.¯æVp±­r¸ÌD€¶‚¨*ÍµVZá÷ÛD%¾¨wÏ!sÇî>/XObject<<>>>>>>endobj +360 0 obj<>stream +x¥WmOÜFþί˜Þ—ÅËÙ÷êVD" THµå’¨*U´ØkÎÁçu¼6/Šøï}f½ö™ËåE­8¾Û™Ùgfžy>î E8¢õ[yCCüL Í€JEɎo¿òiÐhJÑ +>ó9|Ú7öCšŽ|áÓx>ãç©gœ `÷ÖÚc1r¶ìí=ëˆöəŽç´¦ß;ž„kÛ¯‡£Î4Dþ-„mhƒ`(Æ-„¯‡ 8›¦þÛÌ^.P³Íȇ§¨“˜Ñ"!_ŒGM硇>-b[°!-¢Ý4¯(IKS½•Y­ˆèˆ†¿ì->ì ɛÃÒ½RíùV™ëj©ÊÆf[„j™š·²Låu¦úü©½#¡«]zns„ϨœÏ՞Õxô ‘ÎâææŸ8 ^k¼=ƒvµGÝ#®ºS%51OC +p$ä5uòкpj‘ÅXL½ÒùÕFÁ9­™BFŠd©ë<&S•uTÕh„.T)+]Æzx* L@nÏÅ$àLOŠLæ²Juþsc4ïY¯±Ðh ¶‘9»÷bìÈd¥Vכ‡Â%uñ5ˆ©¥ÊÑ"£,¶’½í¬¢6t£r€Ï(ÒqšßPQJ¸#ÉJSQW䀘.Q)>/XObject<<>>>>>>endobj -375 0 obj<>stream -xíV]oâF}çWÜ·%»0`0l•‡mBºyh´«¥«> Eƒ=†éŽ=tÆ@PÕÿÞsý„¶R«ªŠDlÏý<÷œkÿÚŠYDç·¦!þƳ1ųœ¢¬TŠCŠ&”äð™NáÓþ°Ò( EL£iŒë`‰¨öÆ"ž~Zã`$‚Æ8„C•è²ºjLÃptŽá²±E–8£6ãåÉ_$ &¡˜^'ü~Ñ<Œ(h‘¡ÉÉ4¦EZ;¤EҝËdC‰±^kZ9™(ò»3)­€‹5ÆTJ¶ rƒ™+2ºP´:’¤Äæ¹*JɒRå§WÊW–Öéµ.d©ái3~t³ø¥3¤~‰tëTº:¢ÆÚ4hŸ¬ñ#„UªèÁˆ,⸃ö¨L:’y¤ÌÙ¼ÊøªA‹ ¢´1äu¾5:;^Àý¤jµ[£Îur©‹R²HTd‘b2•+mtyl+IlªD&œ`,èãƒQ”¯šíÑåqð<†53r X,’|«ÏZä8‘.}Ówn1ö:¯Qï¯qØsH€9³÷ô; ÞRþtß'-»ËÆë°ÑFQ{§ÊDAoyð09q¢ß63‘ÀªN=xҌ9þE!õñ˜â?ZÆЖ] -èö–~¦åM‹+ø̧¿]ÝѽýbsUn€ÅW厏ùÖºR%öݟÍQ¤‡= ìŒö%ãψ-Ã+WÓ aîAÓ$øbÂeYw´yò¯nãàÓÄfØ<‘~3’h\ݍD$èIæ̶;[ì¡J(Ï3Rƒ¸ª,þ~4¬Ñ`û@ÐWé´\"pUõ%-xUtç/[#k)W^n“s~;%ÄÆëÂ%Ò7"òj+,¬K=íµ„¶hW¤Êù„Ù¾ì¾y~³¼à¶$_JW²N¹‡L+°X—›×n' -4ËdÙýðôå‘î ¯Ü¾ÞA•^\%Gl+V$8´… °9 ;ô¥Êi™£Á4%°ÐÎÙ±D6+RVÒ¬¢§-›ìº :ý»w ÍÅZBµ0$FzߣÒíp“IÃЀÄÜsµ£@W`Èè HíQ^ªÀ ƒ…BŸœÞÛ´`é)ê¡^Ž©YEÿP½XعÖڏŸ72ùF·4¬DxÞ-¿Â¸å×c°$ÞYC¿Ý Ut~Šö8ã#ž}|¯%f›/ -Û|ÌÏPÐîHª­ú??ÿsüœ6¯Ÿ ž‰(Ó$ÅlV½S[ÂßC Æn¡ˆe±“†™ßoíûñ¯'^}Øx)/¾vP T›lã“j‚o86 -ö/:Ÿ;J¡èlendstream +361 0 obj<>/XObject<<>>>>>>endobj +362 0 obj<>stream +x¥W[sÓF~ϯ8“§ÐƋ%_UÚ NÈL”˜0ÂdÖÒÚÞFÚ5Ò*ÆtúßûÕű ¥-Ό/ÚsÛï|璏]õhû–/¨‹¿A4 QR®h~øGBê )Π3C§ycÑ¥a/õÇ#þ>Q¥ŒlßÙ°/zµlyïgkÑ«EûcD׈~Ãl?¶!|Ãl…Û¾a6Ä  am— /ú_4ÀÜ¿F4„bN¯ß€ól +,÷ñy| +üĈ¦s +D¿Òp‰¨Ð4ñ@vi‘J õhúÇA—:cœñ£?÷~ãQ®\™›÷GôâÕ»›“ó“›ß^½½9›Lo^LÞLèý£'{*Õ¿ƒam³5p9¹ž¼aÕ«}ÝJÖk>>(€¢ïTáw¨âÍõÅ@йÑNËTÖfÁÎX%8ŸƒgÊÝ>ûfáàž¸"™¦t's-g©**UI¸»W "1Yoòi•J#¶æ§Jh|_ȘX2֑,Š2Sä–ÒáMmS¢âTæ*¡µ†S–)* <(Ó)ɹS9ëlh)ïN•asza #a)-6S륻9Y¤÷ÛD‰fñäèÊ,¬p ñRšX‘“Œc(ãpí |.’þ[7 ÞØãÓ,j(d¶JU í:@,Œ"†¬XÚh˜+ÿù uwX1O-ð‘§þƒöO ——±£V.ÇÙåۋ ¯Ü†Ó² +zCςK뚐êÌѹ#]PVÆKR²ÐŒ­Ef%îLWçgW“³kÒsP¦ŠB.€®Ü´±%!Qäò -ÀÊi¾!™$9ÿìÖ/Ü2á|îâ„ÑéÓn>!›Ã\.7¯]þ{Øý@±D֋&ˆkº+ÄV ûá«Ð_9éÊb—€G¸ÑJíJåD1J $åkqPÖ Íõ›Ì2(mºVútAؓð°æª'|ζ¹¢úÛÔPÐiiböZ×Ï×J}TÐ¥DqÌ`Tíx̬Mø(œ¥*ØêCpüûª¼®ŠfiË4áz[-sÉ%·ã¢ +cíeR»Ð±/HKS¬Qjµ8X‰"Êi.¹ò +dCe¨¥ºÆªT‚{§ž¥6¾.uñþh¯‡>·¨XmŠ§æ<K¿8?/Þ©ÙkœðÖm“À†d¼ÿð\<7…ã¼b媷¬¶V“Ò_„ µȒ_÷üµªu‘ñŒ®Ô*‹ŠO¸V–ÙD#P·¢1öe¿ë"Ñ 4Å`Œõ?9zë;ûiƒÔ×[½”¦”)Ö jùΨëw¸¾ çÖóã¬ÄژjSíÈýæÿÿ¯±Å dÝÉôà׃¿£&žendstream endobj -376 0 obj<>/XObject<<>>>>>>endobj -377 0 obj<>stream -x­VÛnÛF}×W ڈּ“J€ŽMµ’4µi´(kri± vYre[(úï=K‘ºX€ã&…ŠgΜ™93Ë¿F6›x´»4÷dãLŠ&.5‚Š‘ÓýåPä’R¶„OÃg¸fSûÌ#?Žpïx,Ú8wO\{ûÄõY°}‚PÌî/ŠãÀuƒâ©c°‹ÕÝõ¦~3w0݇%/ö¶½·=Ê«‹Ú£x‘ÿڀ®ëlaò 8Ø2 B6y)^²p =ä÷1MmšPZÃ|ÏE1#„1¥yW"›ÒÌ*¥¦Jñ|Þª¥˜e%fµºYeš²ªRÏ[͵ Ó¬­ivr’þ ؐÇàŽ7Àc7ꤹu%[-xNªx·1=`0vƒ ‡À&îëÂÚ‡Ví;ßÀyúJÎrü}Ξ;p†Äð¡ŸÁ[4dÈPÝ(­ôºíaÂààF†AòTW\r]*Ù'ê÷51&!C¨ÜºmqÊE›5e­Ëàò†/…F‰o*%éÆa%3ƒ´ kž,v|ZFËضÆïÆ°4õñ 6†{îpäšÖjE+ ôA³.Svœ_O>yâ˺ßhãÌb‹Ù ‰'ä$Ý«‰gÕ·›ú~`ÝwX°þÈ!ÿä÷e‚‘xOª¡ãT^,‹ñ:vùÞì_–¶Ï(‘«¥h:µ¶o‰ËœÞä˜:ù?È»ª(ãu©yE•ÐP<–zA+‰ij3Ո–î„~BÒ£jrhùR‘Tk†7l¨Ì±gÊ¢ÄXt®økçÍhf¹¹¢‹¡`½È,š Cíu.yß­»9ÉÔ²Æ$7]¶í[iُD˞¯±½‘}­êÅ®¢ì;2¿é£R•ù¿izþé&yKéõmBÿ뼯~çÙßÓe2=¿ý”Îo®þHȱíÎë¥UûEéa:‡ÝcÑo|ŽEÃMueΛÜlšRÞS›-V‡)ÓÐüÍ^Ðêþ+S!¸^áTëDݬÁL´­jº-°·`¦Éyz{Ì? Ù ŸT¶&èB¡¥3 ¾wW­É1ãáv­G¾Ûe¨ä®ž¡p—é/ר\¯«¡Y…oÊR§£AHýÞÙ€ù×ëdzõ;ÝU|ñÜNȼ,èìY>/XObject<<>>>>>>endobj +364 0 obj<>stream +x­WmsÓFþž_±¸êçbËï@;SBhÓá%·NÃxÎÒ)–tâî”ÄeúßûìI~eZ`Œ¬ÛÛ}v÷Ù¿;êˆI¶æš:ø;˜ h4 È(ŠºþU—Fõ†f¸3ãÎúƒïˆ ƒ‘˜P<Âó«Ë8ÂÍG-;˜¢Wː÷vXIˆñ¡ƒn >>XcðhjåÁˆ­W@ºã =:9±;mdw 2o»µÖ^ÇÞ­ýÞÇ~?ž>•4¦iŒH'šF>dx›çw2+Rõàxúb8#ìŠ~/ “îD“ .4mò—š9JUNßÑ<ÕáòYbÝ3•_»ÅUóêø!+èàƐ¥cmèªIõ¥0w¸ÔyHüðˆuT÷ïÓÕq}ð¢æûÝ/D$ðg÷ÕßüeãÌI 2èˆÞЛ=¿ UáÛڟqåv“’˜ÜBэLKE:>äµ2¹jQ¸ù5d …ºL#jÚ©Ü%2M7§mV–ÓJ—”•ÖA2R^\æ!Û§â”äü²v`"֑9½]$©¢TëÂ{wútBþ”ós0C‹¾Š¾ Ki-É<¢Wʕ&§ùŠÎàŸÃ÷X•‡^ÿ&&œ‰¬áü®He.Ï~8*!/3]$PŸ¦úÿQ¤nTª eÈi|‰“\ámèí:ÉN‹÷ÞZ;,è"æxlßP¤•¥\;Zț*:•¢¥ZÝjµéV"îEæDIÎ `(­Ú×*¼÷I ֙0+ڜÚÄAŠ¼‚‘´HÝmŽ¸Z|Dn µl·½~ +@À sÁuÛExŸbÆÏ `pBv¤¹¾ùÖr~3™ä¼~‚ ¶‡ã&|Ø*“|áÏ70Fï·hüËΛ65 +“Üè»UƒÑ'ùNŠk·`E¤ + ZÞ@ëGÇ’)ÁÓ ÌJæFš•çK‹lÀs»ð¼vZ}ƒƒìûKh¯¿–sÏ5è‹ì•! Ž„2ç0Lj±Îe J˜L¦‘á’P|ð媙%Øѕ÷žoôQ  +P«©²öêXÐKن‚5-Áˆ0•ÆײTU®R-£™ ÓuxÕÜ/Ð +…iÃ3@p­-¶Š{"óäև‘q€ÎKA¯5ڂ¦9đy4GÜß xäAg(ŒvÚ­ +€¿MÞFÁeŽÚö ªqe±}`­-²Ow‘¡ 2ã8¡Rò0-ѬØsûŸ²øûZS‡-ÕôB ˜zž™lŒr@ðÎêB…t ASð–ŸÖ·¼”#A³¿ú\.цRÕF&ù5\ ¸9|!®Í~ê¢Ä(´_î6š¬’&ô…]Q"‘·eÁ’í¡,ë¸ Vù^V-Ì 2•ãZ²:v·\vn!Ñ\’b rÏDCàáP¹áô‡ˆ¬ì2±Ibh¡$7/ŠÎÈ®àpÆ$F¡ãhW¢®ÐÍôö¹êíÿnl³ÎУUg”ÌÄâ{LV¢Ó¢·ñ9,1ÐÖ7mÖžøa´QÓ@^ãäZ,^ÉVÍÅëO¨ØŒ¦ÏŒë/nŸÛ¦98eÔ»¨rJ©T1#µNé /ùSNWÂÂBŸAû{ÀþmÒeª¤U÷¸»ú F5N.D£"•¢5}wˆ?»Qf5£k­#@–Vç\ÈBT©§©õÌ߆œ!rÀç +“4Ñæ m{„¶mô f$–“Ô%ØZ^L¸óp‘è|Ïݯíá—«—;Dà«ö‚4ɗxTÆhŒä‚í£j=ύòã9ñû·"°Þz_v†ÝïF¤$ +w§ ªÉ3.Ö¼ª°J»B¹ã8”ÎúŽç¯qée ´¥±h&Fa5 +]¾zùóùÙtöSe¢Z` \ó¥ÞÙ¸u¡“ûFÜžù 1bۍYãQ†>ÅKBY`{ +Á‰ÿ¡rãÛBœ]¼8{öë“ó'{d®·´#¥x‘Þ»¥ÐcnŸ0š©è1¦n×ÿðƒ¬GÃÁPtG=nA—ÕÒBO6Kãs™—2å‹'ÝÑDôº:uüÏl²g:âÄýX‚™ J5~ú£¾ ñs5v{|÷|zôËÑ?O+Cvendstream endobj -378 0 obj<>/XObject<<>>>>>>endobj -379 0 obj<>stream -x•VËnÛ8Ýû+.0‹q€˜µdù5@ópƒiÑAœƒ–蘍DjDʉ[̿Ϲ”d'ÓN‘@¡­sßç\æŸÞPÌGtzT÷4ÄÏx>¦é<¦JѶ…¯"šÆ4šPZÀf6ƒM÷`›á\D”̦8G#1mŒùMÅøؼOÄüø¡Ä°}´^’arôÃ6dpŠN-4šÅ"nÝ&XìKä×9 'Àß}˜S”Ðr‹R&3²yHË´Ÿˆ‘ úÓç¥ñîbù¥÷îÄ¢¨Áâ)ðýÅS™K#½¶æ·’<ƒL;íߖ*Ï)µEa =Ú*sdkOÊx]©ü@«~fÉXT »W´·*w« Á‡4ˆ[?wN‘50xÔìÆ>Êl!µ!™VÖ -GÒd$7›JíuÈË¡ -Yj/sýU‘D&¹ò^UHb pgx.Xm2àR‹®úëÕyKN•²’ž²/2E ƒ³‘?©½ªÑ -.ÁˆŒ, -ð;Änë/bîÓ)\Hæe»Û,ždQæªmöæ<ŽH$£}‹þÂÓ/™Új£èîv±¾þøûÕb}s}»¤èåÝ4ØÃîÓV2Cg~*ÀÕú†½“­¨+ ”|žÈúu&À¾}‰\×míÔZò^­sí|€¾åÕ©kÞ\Ó°$ÞRׇѸëC"AwN›{º-1å#¾UË`4®‘ Ï ó¦¤£(çæoäwªp*ß+wf¢ÿ_@˼±{2JA= á†¥ÐEbR#šöˆµ½ R’žƒCc<Ìp„Ž½*@Xè¡® ¢6a·³už5)×e f×֗ì(åEPÕ)»m|~…,¤s6…ÎT -wÚQ‰\½Fº…|@K4´.f!X‚t¡ûmè ÙRn2k6Í-7üUì6É-¨%i“ÛôáL'Jz 1£ -äùþ}SÍꢋÚÒöÛ«ÏD$DŒuµ tiÇ¢øm5Ùg³¡oŽB€gûï(™n!þÐø”Ý37Ÿ¬ïöG—PŸ®MC’RaœXÖ»¶›4éíàÈBß´q#³ÏÚò2L3Æ _ilÝü’´P‚çî•óŽšéB™æ›¢q¬ÃÂýlif7{mk +[„dʺ*-ïü†Àaú— ½°¾°À%~7|cò.rPÂôSNUøš‰Ë)RCݚ k²n¶mXæèKŠVX-ËfímMçbqMÆb>·ÚgÔjŸôV|"WôQšZæì~ÐáÓ!64ï \¥SýªæË ù‡ò“i"¦üßÀ hĶ‹eïïÞnøpoendstream +365 0 obj<>/XObject<<>>>>>>endobj +366 0 obj<>stream +x­WßSÛF~ç¯Ø’ ÁgK6¶Õ¼•†‡t҉;Lg˜!‡tB×ÈwêIòvú¿÷ۓdd’iÓF–n÷v¿ýöÛóïGcMèéÍ=Ò?ÑÍ£œ¢ô(𷚇4™Q¼‚Íb›îml™XÐt1Çõ"QcŒ'p¸Û¯e‹fmˆ+¿Ï“GÕ.D1k—NÿÅíd²Ø‡Ðs;¦p:“¯Û/dÃ&² ŒD‹ÁKdý<“ÑUD‚[¦@h¶Xˆ)-Ÿì˜–ñ`*ˆ _JEÕ¶RÎÐñåñGÚdʐ, +g §e¥N—¿®$-Gà !< Þn‹\Yik¾o-ú‹üš›”lí(S2Q®$ $µ‰ó:Q ¥Î®èòõësª2µ£U]V”¨8çEl”Ö&fç0+B´ÌtInK±…6tyN5_ÅNÉR•ì• +[)Si™s€cz<’Sú”:×Վlcl%¾l›«\¹jóœbÎpb: ‰! £ˆ1y¥ÓD¥ty]ò_»1ÐKO0÷ïþÙÿðJ™D§4:~èlÔ® PÒd „Ø#ÄkµÑ X™~xz°úŸãúë¿DУհÍ?œˆhæ£bRE‚n}ïmYê‡\{’]Y·‘.¡•«ãŠ~ô•öì¡SV`Wâ¦a‡‡í³œNëœIѯʤ§3¤Ð|C,Y°ÄQéc:)½³€_Ç>.¿@mcU‚lžÁ”êÌZÉŲFç¥Ü)ÁÂUÁϾ™A£³—xõ Jgt«N@ +¹¶:Ñ摤麙£ÅWèdèÔw‡v/IÇZß ÎÅû\—Õ›þ~mw0Äþ!mwø{"ì 7“†p?¡ÁÕg@­÷Zrüä‘ÓÝ`£«ÌB,‰ðl¸;õ:Ô!Ã0ù§A¤W~‚ôŤn'ºÍ¬Éw´‘À¤‚vV¶Ú€¼M°Õ–yç”ٍZ+ç·|î¼6OîÙ|Ÿ=ô‹•†»ÿÊV—Ïg-çÔ(Ñ%Tõ åcDA .Z§Ã^ð_е2Êɜ.Á|$ýÞI¨.Òk¶îac"Þ0€ ×Ö og`ûUMÛ¸ý|R\6 äöÎü°X©ÒL兯*„.Ð?¢WE‘KÔ1O¨j#ÁHXI³ã‰Q´ê5bH®/1 ¸¢%Š3®âñðVæù1òp°€ÛToëÕ¹ë<ðû€BÌ÷žPJ»ÖÐÉú,뼂h B©u„}»@öøUð–¼Çˆ[V8¦}•ió‰Ó{¬¥zP¨†²àN2Øy×{ijTÑZ浂eë"±æ„›ƒ±KV9æuœ©Ø»f­i-J»R q£‘Ôƒ?/r ºü ¶oV܆w>Pd÷(PŸâUBw§øm)á+{0«‰š‚z;îœUîYlÈW x,Ëç51z£¹÷ô…ùÔ©a3àaãéâ½ÇÖ¤‰v/å¸ããâÌíã½rÎ:@À1ߝvaõÂåÒؕ—|RcñÙÉ£·áWÚÔê ¨Ij«+lðü±Š;lFW è•?`Íç8ÈOh6‹ðMÀ‹Ö{§×v»Ãb­r/Î朗›Þ0˜Gb\Ðp>ö籩ètíºF+æÚ4Â6CûføšÀíL¹Äo—G?ý ,³Šˆendstream endobj -380 0 obj<>/XObject<<>>>>>>endobj -381 0 obj<>stream -x¥VmÚFþίñ¥ˆۀ¡ÑUj/wm¤´Jú ©Zì1lÎxé®}ŠòßûìÚ§©: öìÙÙÙy^†:#1èôaÖ4Âßd>¡x’aÊ:PR4¥d‹=³ö´nÀžéTÄ4žÅXÇ31©7ã ?ÚØÉLMlˆxÎ)£_5¡QŠ¨ Lż}-m8šco¤ ™˜6iƒ…û~Yàr—™‡S -ZdèÃtÓ"õÑ"é}.eYÙû‹/á㸠ëQÊϜë›Aªlb¸TºuÐ)× œŠ1²õ^äv—3ñKÂ;ÚäÑܝˆqÒ œˆ¾¿ß(D/{´Õ¨:W[’X–)-ûîœ tÑE½øŸˆ†oèSÎÒ2¥:©¶\”´ßȒ”*K….IR¢·þ…KOFú7ÃëL*su¨òTpܲìcY”ª¨ø]³% ÐmƒÃSý·Õ[.7ªXc¯Ï¿ì·mÕßÜÆá㜴(Ãmê&D¡ÿF¦±‹PÐÏ?úÌÎÉ vE[²]å)mä3£°U®“§:áyû”hþ.—…pYN ±6-UU~_êkV5ÛÿÐ%_ÔݣņªŒ-¡õZóª îé¢ÝšLüÂIU2ᥳŠ‚ é"t5N0dƒ%4ܚ VVN/¨´ìÁˆ+…2<ϗ}A5£=WZïOŠÙ¤,JN‘Ôèf —3Üþ]>I¦ë¹'su/ÎΌÞú"wZÁeäJ;AæV“ÜírŶap«s@AêN˜Nà‘tސVœc³BÊûAµ£•Öp°}D±ÖÂ4í5À}§o(Á–¦JÜ%?e¹\ӝó5H3UΠ -oP§Qðèzž–¾Â¶.ÞÑ7bèæÕ·#¼½¾ëMÚi³u4°~Lm µ$Êrlÿô!{m҃‡.“e*Q ƒh‡†´C£¦¡,'^€_ðÞyã(Œï '% ƒ¢„Jh@Rw­uÚ¥§BïsN× ­Óýðþí[öÿ†J0/<t–1ltu¨ÏÍ]‚vF áiä†^cŸ³AícÃÇY3”ƒx.¢`‚ Ži?÷ ûdÔ³~9Ðû£€~—E%½ÚøA<Âvt¤{º1ðk¥RöS×ÝwE<Åï!ŒÝ£‡EçÏοR"¨Ëendstream +367 0 obj<>/XObject<<>>>>>>endobj +368 0 obj<>stream +x¥WkoÛ6ýž_q‘/N[ñ+~¬†vI‹ XÚ5.º:Z¢dv钒Øß¹¤äGã †F+S—çžsîÃ_NºÑt@»›Q®¦W4žöÉJJOzþQÆ}Œ(.ðÎd‚wš~'êÒh2Žz4Äg—zˆ^Æ7¸ýhÎvÑU}¶óþ2]Eýc_ ÆC„ ÑÞèO‡ÇÞhÀy˜õ­½É š41Fß@ØÛm¾š\¾F¢Ñ˜f)õ¢á ¬§Ñ´Û£Yâ³ìÒ,>û‡./Hê„ÜZ•ñâáŒÂ->¹Ò*áq‘ÐÃ9ÿ½¸<Ÿ}FPAÙ 1;ýn4óìΔò‡pfΜÑmJS‘ȭɱW’%2U^Rlt¢Jet;œµf¾R¦rù†ä£,–%¥ÖT.”£¥QºŒèmJ7µ©0®$“âKIoï`lI±ÈsÇ0ºÔ™Fٟ×2ý¨tbÖ﬉[$ÒRZÿ^Ț\)JYH?ã«^¾»õqèÂ-L•'4—¤tœW‰Lð½v¯ЃË{Sˆ ^^î÷ãÇ߆ q„œ¡¢ŠˆÍd‰¹ÊU¹!å\Î?6ó +)/­É¬( +¾eВN…6…qž…ÌHG¸UžR!6 _#¼±ò™r!8™%Ô.©4ž“ûÙõÍû÷à0 +z8ÃÝÈ87"ùÁR•=œCKªô¡q*Ç­¸¡^¾º¹»Þé=ÇÉ=¯Ü×n:>3•([ÉÞ@Ž$’•r2©ÃMÉ뚢Ö;ý>¼’‡Ñ8€»á4Äʨ„Rc’Ê…5U¶€¢¤xõžè~è•Wïæq™ -É!Ü=…o5eRK+ò`äµÊsZ‹@iíùÖDýÕÚYPp €‘š·[‹Ý,êJܬ=‰dÌÚQj‚s½ÊH¼?•5(gIªt"-lªá©uÃÏÒʲ'ùMТa¹‚ýq–aÃ㮲0…ç+…3 i´$™;I9JÅ"ßÒ1\ÒY˜Øåbdh‡6@ùöhcׂ۬B„ô¸[ +æÜÇb ·ú^À@˜­A^ñºÈœ*–ìÆ ™B•e_’'{ =z¸f>E–ˆJ|Mq ›CíT•®Mó +…ë{Ê ‚SÙeVxrÁaDûÁ÷PùkD¬«·C8uØbö¬»k¼01Ù÷L¢÷}ÃY0d0679š£!ÕìÆÛzÀ4 +qÊo½ØøîœJtlÔüý@ËX:'ìæ9Œèµr£3¸ÛR HlÙ®D“c÷ÐzZÿ«üÞjô;s`ƒmJY@nh•«À`L ³aĤhf:CÓÔ{ïÉyú?63³”ºSšN"ç¨o_l]@ðÓëõýknçŸeŒjz8 †=ûû囻›BÄîá¼ÍZÁKì§r³”ŸÈÇpŠCŸèÄöFmÄ0öÐ<òK¥V"—:–E€ÁÕëõ—ØÆÔfͽý>øy“„ÏsÝþò +Cd.Í0? CrJèÙjYþÔ|®M_Etmt ÓC=’SËO¥o aJ2?¾·›F0ü÷wãÚ +Ga–ëð+aš“ˆ­qX$—0?z ñ’ŤÅƁF“sƒÂ^/$3Ï®Çr*Ó¨l¸¸ÒáßmþO8º1ìªp–ÊÀå·d Ñâë¬3¡PÈ>äÎ0¹G3rlI*M!;OΆ¥%îÒ$š×xÐrc/±žqGcÌh¾ëq›Dà'È_q +ÃñW˜”•cÓÕ¨TØÙ0¾QÝ#¤)ãœSòk Ÿ»ևŠ› æ7¼mÖØ ”–Çjèû•½åô4ÞZûé½kŒÏnájŒž6Åþòm¸½ÑðìÚrF64ƒ¥ýü·6Ÿz<@­0{±1«•JÐC÷øì@k§P>/XObject<<>>>>>>endobj -383 0 obj<>stream -x¥VMsÛ6½ëWìäR9)!~“jÇ>¤¶39ēNÕô¢ D®,&ɒ £L¦ÿ½ É_­;Iì¾}Ø}»ÔŸ_Ì#:^ú[òñJæ eóz¦õ$0Ke!E)[øø0:\´ð)Íç"¦8Ïpâc|}‘çØuk籈¬)¼"gûlœ%"{l˜'"°¦QòÏ°aâlÿ…mšÎ„Ș“½]<‘‡Ùõœ‚˜k¤,Ms‘Ó¢4™òiQLc¡_ôûÀôuS)¦¡“2Ü3×ßhŅ±U)ª³x¶ø<™]§{D/̀7½Úuµl¤ªÚ槽I|b’‚,Œ>È/ªgYÊU͂¦¦Uúñ®àNjiªæö)F QWƒâ’*jwÞ)º«’ëªañ˜Ÿ ~µ“Û®fËΧ¹æˆ8 -É ‘ã«FѺêõIÖ#Ñ9ù?kLŸ¼šq6C»egòœÄÉ6Üï͞ÁQ›jø$ûÊdàÄ5MM¬5-§8ç©Õ9~K´^Ë3ËÏùœð?§¶.÷Þh ¼Ì=ºÇpyF2.ßqO{Ô£v<›ª(4)Cª´nA—móƒB½îëGöíؔ4¨~,Ôq¶÷Rµýð¸@/wص¨ˆ:`}¶WÞÅ+0Ç9¶¼]=Üvo=6…Öـó—ÔɞÔi`C u­bÞÑKºåÜk*ÚR‹²ë%ÜÑ#i7*²D†уkXÁ¸×Ð.ÐiŒ½^áÚÈ-‚þ¨ÔÆé+Fƒ¦¡Õ]´MÆ-zQ}eދ¾]}ƪ rgu0;DÓȺ]!?’5Ëþÿö…üÍTÒ»Lfö„ÝÏl_۔߀Úrº<3îÇ1âÄfN\ïô¸,©]?'S²¡È» í°&ŽK§!¡CÌã0ô"hZ7™Vr*Ȍ'ôZŠV(3d»&y¬ã tYÛQ=+âÏ›ªBØv;2ߝ(ìÐÁ(‚$Èøz¼×3º¬n~]‰ÜXø ³×ä]Ý\z‡#ôzfÑtg»ñæ´¾”Þ“à¡ÿO…Îís#Èð<²2‘Í ³}u×î¾Ñ%&T­û%kFYëxÎÞË|Œv]TB"tþsÓàq‹,Åm$Ú÷j1ùuò7 -ÛXÓendstream +369 0 obj<>/XObject<<>>>>>>endobj +370 0 obj<>stream +x­WksÚFýî_q‡xƄÁ6àN?$©Ýñ47!Ó¤uÇ^¤l,í*Z‰@;ýï=wW`ðc’Lk{„‘öqî¹çž»ú¼× Æ}º½3êâ÷h|DÃq +IÉ^èn…4ìQÿ˜¢ sF#ÌY_xN€9£0èÑ`4Äÿá(ûÉx‚7—õØá Ôc{ïö¹]ÑýWõ‚Ñ7.ۍZ¶K½ñ(ïï a¸Yý+@zü܇7èa‡ùùl܍°s6¦qpL“Ì;L“Ø‘Ð¥IÔCüÒ{+)ij¢Î_îƒl. +¥géêéäÓ^çLÐÈ/qŽƒ£Mâæé2O…¥2úÄmrc^R”’ae‘’-‹**é²i4•s‰ï"º¹|J*q_ØRLSI_TšRª˜©cŠß)çÊOŠŒ.å²$“ÑÐD¥#Æ@Ø H—¤ÛÿNWÔð‘5ã.€¹ùýý,6OjØJÄT® >õWÜ¡«fKdy*k¦Š`Ȅ†Á ßóxÇcfõ<Ìۘö9óaKSH¾—* +* ©’@¨ÃG®âfªlÙfÀšŸÚ¹©Rp)¥U)AËìrƑ ˜JеçéÀ‘¸¥›Ãd¯Œ¡¤Ø©fÐd\fVˆ,Œß憅dé ^ˆ”¥·ÒæF[ÅiMLA§ÚV,,:H +)þ“ºÀÕÊT4 +8¸Í3"ÖЖŽdۍ¨P¶#<r.J—×õ†}íÐÅm’ æÏë3–5a,7~PR‚;¶VgM¾«¶¸iM&ɀþ‚ò GPVdbÐGàfT"µæ4¹-–©t¬ReœºË¦ +°ˆ6n Yct{ó-EB/Ÿrv07Ú|ѻ؄¥Fj¾F¦ÊS$¥]a¬ ÆÌ–9§è²Yf—Om&V¤%¤¦M’ ,è)ìT:5"îÄÒr\®ò­ºÄxE&ËLÌ^€¥m­°Sù®*îa)"¾*äU¢R®ò²¹.ð(UÈÎ4€[‘Í Uþ7A@ÿl×P-ŒŠÉÇqoE÷¬•ÜY`Sâ›âè}_§ËHæœ0û¨-ráÄPjrð ͙D=Êe.#.GpÑ,T,k%r:Ö®`]!½ ¢Ò‡,˜Õ´Åjkj«hNÈô5òWùº¬ï“þ$TwÀ6oñÆÊF…“ /yÔ™Ò ªÐ3àÁœOЉÂiˆ«|]'@ÍÊbpÀڃ+¶°Ë&tW\æhHÆP®÷„­¶uˆvç,»Õ8 gqì²/ T„qµ{Íù¿bË;¨5€ ¼ª5eáW݉þÛûع7·҃ð|è’SXè,Ä\u3&$“ý8ÍçÂoÐ9,ڒV!ç\q܁½Çü Õ«ÀJدÙÕ¼Pd‘,J^/ó@®r^›rÝ\ê6Üä¹jEžK-×>·…ŠM sç ý;ÿðêô^¿C[HjSÍæX^'(_&ÌrŠ ³ó©ÞàkÓŒr[`?h}®Ð¨[¨cÜp…ÆM †UÖ²½´YB®þœÑl{:-rAøêt;ÏÁ;ŸÃfð;ä@ÐĐñiÍèÃÇßÛÔ"Q–2ƒyp•¨%µ:ôD%86ÐÅËg“³7o_±‹zBcZœdÃy‚s’JêįO`¦xÜ9ÃÓ7¸"ÀB͔ÆQTåàP):]&¬Þõ ì0lþ»nrá +¢… +i¡¤¸AÍ$#š‘L­ Éo¸™QGú€V¯A/LÜ@å¶Îqr}"Z×\}x°»2q§bî a•*A‰sûÖQZAóŠþñ ̈́ÛÎû º!À¬“réç$…ɶgm¹0^JŽê£þë8ýÁ…‘ð*;¡ 4çחØ¡4výÍÉ͟KÎä֍fljÇ݁¥p‡äÍ:З›¹žóø±1Y°;‡Ï¿<}ýìÕéUÙ?þ¤©±Ÿlõ³LèJ¤ei{Á'ðã „!õºÝ^'Ä_Haÿ$을G°ýtLxÓ¡ýƵÆ\'ê´þŸí©µûÎ¸ŸÔ?'Dûïà‘ÜßÅß:g#¼;º·‰áoÂ}¼ç!Sx¯ÀQý¢P ³\ÑO›ãÆ+>O< ‡ã (‡]÷ò1腉¹~® - ¥å¼"ñžÍ+†Ç|ët²÷ëÞ¿º'·Ûendstream endobj -384 0 obj<>/XObject<<>>>>>>endobj -385 0 obj<>stream -x¥V[oâF~ϯ8å)… ¶CWûmÈn¤4Û&¤«U·Bƒc7ƒ‡zÆå¿÷;¾JR© -ñeæÜÏw¾ñ_G1 èå’Ï©ƒ¿Þ°GáЧ\Q|ä•K…>}ŠÐé@h{aA Ô„xöñ_êvÄ`€ÝæR‹ú¾/ÂFÔˆa#|È®ïu…׿eûuCÑ«¬~øì²KžGã¹õ!geBGÇiæ(.²È¥&󾓂¾¿£'~ˆÌLñ{®\‘gØÄÃOXƒÀ{z¦]UWõùÝøÏ£³ËþÖiÛï‹.Üߧ~¬v›ŽéÞ*òhªeö@:ÍMUlPP—(Š´±i6§i.#E2›‘_ÊX’±SùZæ3Aã$µ´ʖ: -R&ÞfEÖAÏŽýv¨íÂçXœ)¥Æ:Š¤-¤¦UªÖ*t®]bŠyòb#2‹…Êœ¥Dé%Yµ”¹tÀK]9{ -[?ëR­IÒܘ¡‚ˆ~Ïñ¹¸4R‚®2Šñ|JW­Íš#B5òB#—u¢2*ªôµ‰`>£JÓ:¥Ö:Iµâ‡™i‘6f‰¸<Ú ZiLOϜ·SeÔ{8c#׏$b…)§ì’ Œøã\©ªhàlöU gj¥´Yª¼=Km˜M„·0+SxBG^Zl2d©ûd±ý®5U,Cò€ Fp;ð*0uEW„¢„O@Q‚ŽDœRšÍÐ)`_gÁØ?=.5É"{‰ÀxƒÔ«˜¬Y(Ô_Ñ`Çúøü#°‡Boww}ó.CÀå9‰dƽy “•Ê7'”Ëù\°w¦´ìõåP¨¢Þ)1mLè?`.*íÊ×RZË[yåÑ%y \Iqª¹¶ˆ’–ZêqÉa·]Ъì•w=ð¬e[ƒuõ aô(KÝLs‡†Üt&ðQĞàŽZ3Ó±e;xøAÏ8¤¸ƒ<1ÍÌ ºU 3åB"3°*¨OFQÊ´„´75§ƒŠl막÷\brT#»+勉ÄX”H^–7jÎ.õií…!¾`ê‡Ñ–}ø%OWæqC ËÓÏ2ÃyÉmk{áP^ÚaÀ  |#0|*2èe»!غï#òú¬;ýzô­2¾nendstream +371 0 obj<>/XObject<<>>>>>>endobj +372 0 obj<>stream +xíX[OãF~çWœ²H…UâØ›`PM ·&¦ÛU©Ø‰=vf±gR_"õÇ÷›q.„îUZõ ƒ,{.gÎå;ç|ñ_;¶å5i}Ëb²ñ÷Áû@mÏ¥ŒS´ã˜!‡Ú.5[¤Øst„=˛ÞcÙÔôˡã¶~¶[–WíÖS®‹[5ã¹V»š9õ!ÉÆq«$5z6µ°ÂÈ±›.µŽ<˳òC³Ð&?ا÷t[f•sÒ×1Ñý~O$ ¥œ„¤™(ÆÄ(V*¤çA&&…Pò‡ûƒÿˎMõ#HƒÍ7:S“y&âqQ‰ü˜‰¢à’Fsb2|6{¿v@® ¥Š1§¡*³€÷TórëÛm&¦êiNg©E㢘7³Ù̚TD46El¾­EUO§,ç!)iÔè˂g’ôK)GeŽ7R0GH–$sšUÖlø SÏkSG*9OU™Ã!Ïrí”íÒ֊è=WÆt,znû—•¶¹¨tSâæÛKóý±Èi’©8c)á1Ê8§\EŌeü„檤€I`-y‘‰QYÅv™0ª¡2JU(¢9VS)a¬q0šæ¤"ór~}Gç\òŒ%Ûޖ£Dt).WõH>Fäàn  žÖ{¸Ð{»´ž‚>Ƌ'ār¨6E,àUr—ª-Žª!úH öŠÁðpbò frN ÓÐYˆµ6õÙ|{- k¿‡:-µ­c5áx`…öí )»]âˆS™ó¨Lj„ðÑǾqsçSçú}ì kÿӉIw…Y>E¶âí"E:IœdLsí¶«îàìÂ:§ý˾ÿI{®×÷¯»Ã!õnÔÙ.ñ¶3ðûgw—ÝÞ no†]@|ˆ˜jƒŸ5Kca»°%P"ƒBÔߐL$ù Ä×^0«2üt± ’2Ôޘ¶+Vèl‹DÂa\?"©ŠÚ*Ŧ‚Ït@_Û³šËÒÔ»E7áQш'‰5.ÒW¯èJß*ãލܡuzÔ¨/«†F¶Ý*ŸœnpªÓ°Ô²›M»F§*/”¬ÑU‡ÈvÇ©;M»]£»ag{,|*tFæHãŸ¾w©â½ÍáÍ·÷ßáZ¶÷Pwºw‹0Ón d$bk¼»8Òi™NHdY–äÏs–¡ìU¨0ÑFÌásT}8>/XObject<<>>>>>>endobj -387 0 obj<>stream -xVMoÛF½ûW |R‹!©ï¦9$©p ·Q’C+r%nMî2»K+jÑÿÞ7KRrH+)Îμ™÷f†ŸOâh1¢ÃÝPŒïd1¡Ù"%+i}’„¿š¥4šRVáÌ|Ž3ýŸ‰bšÎÇшÆó®“Q4kã îzÛxƒÖ6…}ˆsð®:Óq:‰’Ît4A„Îö1·ãdM¾uÓ(™?ö Ïàa¼d2¦ñ¡C¼WKd}òÙEL Z®)‰Æ£˜E“霖yH8¦e6pÞ6™§joé]¿¿ºzþdùÇɳ‹)% ¶g‡é,øXæƒkã叭Ѹ3Ð¥'å¨j²‚¤pJZò†r¹j6$èÝå›wço>Z“/$UÒ9±‘äÄÎÑÎ4$‚·;¥7|Jd `U»#‘ç·/˜Q”ÿ î>$tNÚxJÒÅÅË8IŸ“±ðgÅîÆÛßÒøe¢qÒõ(>н‹ñ§èët#FcŽñΠ߸o2Íå½,M-í0W.³Ò+£93Fbt¹ë³¼V‰U)¹.Â9µÑ2Š{Q6’N]a¬‡±X{iOQ©¬V°¯Ђ’×€FãÐ8šFtÑèŒÍBEž]À `[³ºn6K"ºš£·FᅇT|c5P¬Œ)¥Àæs#݃È=ó\ -@Èç_êRèõ!䅴š2§•¤º°ÂqÆ#´(¶Á¦4•‰5€µÐn+moMJæq-J™€YIíÿ•©ó/¢ªË^”_i~ˆîœCûÌgÀöQ¾*Mv·,”»Ü> jG ZŒ^í…Ò¬ ÑÇL.ÝG¹ºÁÃW¨ÊÝÞâÀEß2£´o¦$èe¹eÉ»Zfj î{>ü®U,Ü=aÈòû¹X¢Ér¹M¹§ükïA“P­ö-Ñq÷F©j¥6ò»3‚¬QóÀ£ÓÛBêÐÉ­žŽz³”׍­“g¡/öþB N…!ën$ô:¥Ü W¹¡µ„0 zÉê/0 ݱ—=T/ûQDo•V•úó } €²t0+4tŒ9³ÚQãø¢oÓ®ŸþŸøÛé‡Á·cÈ[‹8¡>kS–fËa2“wµ”¡õxHmV5ðinJä|]Ê3’홥Þg£siÑ :ïZð!Ðn`}_0—·r¨Ñï/(~.~¢÷ƕrþJê/‚¸Ã£§OéöIOt×+ÝQ„ÏÑ¿óýÞ'ï5púSG–$¸ÇFwaïÅÂ̆¾‘{‡0f3vFG3f)qŸCç,@Þ\Z›BŠó}·Û,µ5+ª3P6GÇFU«Kµ †Kcó=šÂ« -<`Ê·âï܎þˆ~–µÔ9‹Âè£à[¦ßdYctpÿ#Áý²¤Jm -ÏI….c¿\‰3ݚ°SÛß`ÒVy^ÐYqx_±³Ö›Ç¬ÜŒ!d•¡xµÌLUc³!Ê)´sÊÕà¢:Þ6a·… \éˆ~Åð®VáÀÐð(pÀŽ–`&áê±lô0»ÜCû¸=£½ôú ~©g¢Íºkö#?”7!v´¯€ka]‡¼Úu d¼¹Û…Þ²*ù ÉvŒ|+¤Þ¼›XóîU)™-¢Q2¡ét-arÝXuo¾ì ŒîÍ‚Þ -݈’K5ì퇳¯r¼Ýéµ êyÓ¨\–JË0ºÆ³q4ÃËÞêòA2ã³ç˓_Nþ°^'endstream +373 0 obj<>/XObject<<>>>>>>endobj +374 0 obj<>stream +xµUßoÛ6~÷_ñÍíCjÄ´$˖•¡¶4Þ¤é6x{Y†€¡(›Lj$•¸ú¿ï(ÙµÕmyêhX¶x÷ïÇwÇ?˧8>ì}fù YžÀJ”ƒ¸ÝŠ‘%˜Î!¶„Y,sx ‹Îf,FºÈè’&,ïÐA”d1›íEñ,=Ña,Ú?öv’töI9!pëÃw«ÁdaÎ2¬JÄ,&˜/r–G1VEk$ÂJœaZ/oÌúå«ÕûA„ñ‚ä´Ý}5ٛLÒp ¥EÕÃښ÷Rx¶îây§P²Äý½¨«Æ…ï©Krç¥Õ^ñ×éþ © Uö Q|Œ1”^ä…´Ž~)S$Ù+wnMFøY>*…Ñޚ +Î[¥×¥5[ø +Ð`\àΡ¸—˜@©*‰Ñ!Ò6•{Oɘón±¼¾¹ºýöíÕ½î·ß¿>uÿåM_ýÅç’ôÎI¦úŽýKªº­€Òmî?yúÃ1¨®:“>Apc¯ð+·Š?TÒ]œxþ0~R…ß\`ڗP¹zº‹“%%¯Ä¸cî8‰ØtÞÒâjÇ·5%¹4öXRa¶[©}wì?x?Žs–äy Õä ðxÔý³7,<#Þ]Ë_n/W×ïnïCÅ{±|#°ªn9JÀ»³¥ª*l%”Æ“òp¬)Põ¾º{õ¬Éš[¾•Ô)Ž|ék†¶ïVÜúÙªÆxÚ(MxCü†ÚÖÆz®} ¾^ÿ—¤µ±ë öl8C(dådߣÆóÕä*-J@„×ßàÝ琏Ò~8Ú5 y&­5öмÿûÐj Äôëyw†G£ +Œºì‡‘qèòÑýêôæ…x=÷ É@F#‚æB×oC®ži‹[ãe[áÉrѵήK菳¨UN.MHó}£ +Y)-ÛéŸf)Ëæt—†^Ž{µü4ø³fö;endstream endobj -388 0 obj<>/XObject<<>>>>>>endobj -389 0 obj<>stream -x¥VkoÛ6ýž_q—}Xâ:Œå·ÛnÀí ºÕ0,EÁPTÄY5’Šãûï;—’ìÖM‡[ïãÜs_úûd$V:|¹[á3[Íh±“Ó”$ñQB‹1Mæ¤Jè,—Ðé¿XGŒh>šˆM— ¾^ˆE«ŒÜu²³Ù ­ìòÑ™,–böÐÁx -ô"šH"’^r -kÑøkÀ>†rù|NIBë Η Z§êˆÖêìÙ½,ëB?>_ÿurù|D+KÄt2¦‹ñL,ñ»NϼùG¿ T芾¥›ÂªÍ ãà ]݆üúìúü « ‘ˆ9ËgÖÑõujª -P=!¾xÊVÚËGèú¼ÓLk¾;º'"¿£§ÿòý!¬‹ð"‡™g÷J×ÁØÊw‘M;ÎÈdrMw²h4Ùì¡phPÊ݀T.«[È8R¶)RÔ6è*YûÓ!«hg*zœyS6ÕÑ[ÖTŠá‚2™ª}hÝå67…¦ÂÚ:Æxù|EÉ´MÕÅa1'S1SA¯¤÷$«”~Ó¡qÝìèGpŸi§+¥?d…óÁÉu!+ÉþØ`Øf¡un`½(ì?”ê;]ØZ; -7™©4žªè®¶¦ -8a(1﨏PÐUÆtžPjµ§ÊÊå]¤ã#–8ŠÞm­K‡´Õú£Â ¼Þ€€h¼þЬˆÑ›H|pª¬‡œZ Vh1§$ýcÒ÷€[õãô´z(TdÚÑÀ'ÃþjŒÊÜuÇÐUW1áC‚?€S¶¬%¼Jw{÷çü–ÒTÙe¼‚ ¾Ä±‚‹Èbë’þ|gô®‹¢ñáèÍðˆ¦Óڙ;{¿;el[à½üý`CÎUL]‚G@Dwƒ¯8-\÷Š\ƒ.QtæÆI·‹àjç‘*DSàóXóÁÚÿ/Ìك…ù;wח”ãK‹’@~…ZGù(Y1åø¶—¨WÊ2Rmm‰H®ÏŒÐ‚ÃÜÅØYcŠ> 0€..´÷×炾ßÈ! ô{DsªU!]ìP´Ñm +Ó·Rڕ'[DFª0ðü˜õõažõmµ,2÷FÐk‹‰a …ÍyÁ…þû|·ÞQIµ³Á†] ô[ƒìžÖ<Ðöqv>ì(–‡`8?9mæ‚~‘%³†ŽªTÑ`ŒqäþKRú…ÞZ¤¬DðžºJ\…ídä¡XA Ü6hªeÈ­QÂ|ÕkÈ‚YLa™Ux)7^…¢YMuKW˜L¬B- $Rã43%K^K§bÁXj’šFg5SaŒt;…eË6¹€ÀûÎÛòØ;ü guà.ó6 [nȐKŒŽ` -ìTµ¼RÚ¨`9E8€Ú¡G¹–<åb(s¶$¿CÈ%×4ºG­ÄQìQ¾kÞà À~àÞæÿºOØSƒŽtZ–"ÿK™èr€d€üsyK,1lƒ}‚—=œn³ï-"ә¹ùi´s°tõúV>kÓw«mÙ-úd±“d†w´±H&¼á^µã“~Úﶗ²jdÁ8/zñ‹Å¯@¼s±^R.™Ÿì˜ã1ÿt1‹9Þ Y(Y²î³õɯ'ÿô©’endstream +375 0 obj<>/XObject<<>>>>/Annots 135 0 R>>endobj +376 0 obj<>stream +x¥UMoÛ8½ûWÌ1YÔ´õ-õR´H[,°‡nâc.²4–ÙH¢–¤âøßï#å¯ÔmÝÀ° ‰š73oÿ™-EÑù¢Zâ— eEHši3 ü«€²¢”ª1K|tº¸±¤4IDLqžá>ÄßǺ…8OýõDžKŒû¯³ *DHqœ‹œ: +’XD‡§–f—ÏXÍB‘\¬º4Q!ò‡üŸV³Å—‚·´Ú`#i‹ KiUû,iUÝ$‚Vl¬ìú:ʚ[Ù³¹]}GhN‡¸y¸Qš îf¥hºÈ¶åZLŸ!CB>Ã<ŒJ…LÈC[ö´Q5i¹4×àA!Šeìb>¿àcÙ¿¤~ìÖ¬ ®ü®ô;êd¯´ šŸ¹UŸ!±­<4i@Oáž;õÌTö{â9íQí¤Ý’»™³ÛÁE/R” ÀÙ½šÞÌ ájusƒ3ÙmiiWjyc )Àiµ•†d_µc͆oÖ£%¼é•¥VvÒrMV=Þ:ðKŠ‹çR/ZÕ,-ŸÕË~ªh5Ėa<{ “¥§vjË´xä¸@Þ2½0kÙ¿Éё½´¢~;–cU«ÓöþøEšG©È!È$›Z¾êošMBù³7¶l[4–.}t’Ñ¢íؘ²aóÁ%½TJô +é ÀhûÎX5àRÚÑз©¯“澸’Y‘©´,¤Â¢äû§+”ËUíX3rP·‚îy­ ¥½A©¬¶RAw +R+G«|ZÚ)ýtE3þÍG“ÖZí æþtbê`è/Õx­ï´´–û+\؆«ÈOåwe¤¨³C6˜r7žõt:A{ë:Ë<ÌD¸´´Ò`¥í•e]囷2ãsHö"†TßîÏ­ñKpªŽ0ߥ®O *½ÚjFëd7`üåÁ¼w»¿œä¸[e©*-7Jïß{1Õp-áRõ®ySvÕœó8ç‰Hó㘧Ùë1÷kÇ)?$i´‡)ÌÇ8pµ9Im²'ø¡r­`DV-õÿ&þÃ÷;z»®Ô{˜jMwlKtÒÝLbvD¼¹Õ±…HX¢å¶• ÷NêOÌ¡ f‹–yŒAc C㯧úw%™G8ŽÂ³Ïß)ï³ȸ­:ù¹{—¾EwÇhLïÌØ3°º¬žÐ|8´¡DDè3…çÙá4‹ŠP©?›~yNÆŽ¼cÿ‚Âmãójö÷ì_D§`endstream endobj -390 0 obj<>/XObject<<>>>>>>endobj -391 0 obj<>stream -x­VMsÛ6½ëWlåCÝĂDŠ"¥N§‡*vëN㨭29*0 šh(€HYšNÿ{@RŽ4n“™vlsø±Ø}ûöí®?&l1¥§‹y  ~f‹%‹Œ |øW%!McJ·83ŸãLqg؄âdÊfÍ܇nýa|Ã㥷 glÚÛ¾3í=zߝiNÙ¢3bô¶Ï¹‚/v$3unƒü›ß ŽÙüîëÁøfB Zç°hRŒÜgñœÖ™ÏxBëôrü‚Ö…´„_¥kâTꔗ$UZ6™¸¢û¦F䏍4ÂâkÅë‚D)¶BՌ^Œé›õƒ €Ðù½¼èÒwö`ǹ,Åß -V|ïìÆ71Ã3jÂÄÃÁ;]‹o[£¨3º¤U)¸_Q¦[pYFÃÑ-R­©.½æ„‹A².4rÚì„9lèAë ¸¹ÕŠµ fMUʔ×HÃíöø§,tø‡Î+†t/ -¾“Ú°ӂ‚ÈGªS`w¦‹YÂheôNf‚¶MYË -X<VjE•ARiÛÓìá$Lœ‹ë}UrŝÅYîÎ$n㬌؁mK©ÞV@gˆ«ŒJ©>àV£E¦Ö…W”½Åc^”tŽIç$k±µ>“Oü¾3¼"Áӂ -Á3ø:2é ÊuYêGçÒTÍ÷Žóª…òL®Ö…q¼zþèM´±È1g<¯~{óóõr½ùɗŽ0nã+Èåª}9D¡—W"sÁ‡›á•O}‹ª#%jªJ˜éjԋ듯÷|‹štäž4Ã->GS  2W ŒŽ 6·wË_Þ¾º~Õ£îÕíiŸ7$Æzº!T&sB¿ýC,tÓ©Öú&™†}“8Éͽµ‚Þ‹}-Œ¢árøž ¡ˆWÐ[e$$þ_äv›“+F« ´>/XObject<<>>>>>>endobj +378 0 obj<>stream +xYkoÛÈýž_1 +Di$ڒß.ZÀÛÄÛH6M¼ÏºFäHbLÎpù°¬]ìï9wf$‘În"ˆ-Só¸sÏ}ðç'‡ÉőÚý¨—êÿN.NÔÙÅLÕF-žLåÑTÍÔÑ©JKì9Ä¢íîI°çü<™©ãó3|žá¿ìå³Ã³äôñççØàŒ£S¬=Ÿ%Su|x’\¨)¤ò‡|uó…+®±ä(9W7 Èwz~œLÏNÕM&‚ª›ttš¨¦0ºÉíRiõάÕw¦nrg_Ü|~rp}®ÂæÉì09:=ÁæÑ÷+cÕÚà^n4êÞoh”[¨÷u~ï6cåºZ­]}§°æÞà;üº_6ª1imZUè¹Ò6S+ݨÖù¥¹UíÊ`Y‘A*]|ïê"ûw[þ'QßØÔ¨¼Uy¯ÍƔðPM.`8H…°&¾·8Moxhª‹‚›æ:½«Æ… ïFåeåêVÛWêV-kƒŸ©öG´ú*âc›d‰á¾vEC՝mÔ"·f,:X‡Spºmk—u©é VÕn^˜²Á÷¢ž\_è¦Uen»Ö$aùôЀ"!?-ìÍëýbá—`汪¼Ùu&›¶…èKãá¶ÔdÚum3/ “®t՚zxß v-\Q¸5ïÂþe­!-MQ›Ÿ»¼ÆÐÎ/8I.išKåAHa#›.ÚªêZÿ4@g¤ný·/ƃõMZÁ-ÍêÑz<{¼zYÂ+–~ýîÛçM´ ÈUØ̅;pè®u©³‹±Jï1€„Æ4 “Ùq‚Ð…õO“iC@Ù®œܽK±žº8<æê뼆7®SÖx3e&†c œ˜§«­dþ(@Œ›ux®I ›Áj¸ÌÙ&Ç Ð«]ÕÆD‰`6SéZ·¸t¾é뚹¶«"¿C4XõCòcò\`’e¢Žp - €Õæ’ûÀVÔGtÿaJ€%?»z,!0bŒ¢È.M–¨7¹E8ƒ(‡rP;‡¨]m=n3l)\UÄÙ¼ÖA”8Õ´1¡šnŽO¶Í¨-ü5ࢳ³i ‰t‘· –®8ÆÔ Vp$»È—ìA¹›mõC¢ÞRþFM%Fg`, úŸ½›w öúÐ=Râ…9c‰;½p4Îd‡ @l‘}†RüÉIrz®¢og§gé!äëÉìœLœ~˜9·4smªÚ40”×9Xk“qD8qGDH¢®ZèµQ•ƒ%$Äót- %c·]»`r°ïÜÀ}˜”ñßd—Š\âïBp1. Ï/b£aýÙ;@ü/è×öœC°È]Jg0A†wЙwËÉ"€(m(HxtöîåÔÛæ1nö.õ¨©ªÚ_¸K?Šš*€ÚA*c‰¸à!™¡´ÕÀɩˌêª&ǯ̭­ÈŸ#ñ7è”q“¶È”¡Ñ%Ì ³“ïóL …£e}»ö¦4ÆÛÓç²¹ýbj×7ËíÈdÆpÝÇԑ°cX1%!ëž-|˜]K m=9Qj!æÃ>&úa¬aplâå÷nabîáh ˜(é*ðLžÀâ€EáÀõÖ&#íðþ…«Ëã‚°t?dI] ?q)²^ß&û_Î|k.ý’þ8òˆºÊ@½/í ë.åïíé™çƟ¼ôÞz PWŒÅ^ìêÈž³·h× ÈÊ:De$P(Z…l *õ>EyRš,¿3väë[Œ— +^È ¿Àèoì,` +$iO‰e¯A€#3L Ú©p ¢”ètUÀ^xnvCÙH2ÜÑbfPüxò4÷®¸'æá%<’”Eõ»:…?ÁËÿî#™cnÚµ1Vô÷E½˜úI<%×ĵûáíQ‚£J'q`ÊÈ`”«Á(÷ҀMwŠ +F éø±™QïYÕÃ+ƛ¤9­áÏè#T/A©=ï‰õ‚…Wd"֔Açy—jÉڕ¢scuÕ¬Á…ÃY—J¶Ë›bTֆ"‹ôEÍ^¾º9z®~D7{¬Bz‰Ýä‹_ŽúT½µ¾õõEۂ +³|±~-*PÔ$0µ``†ØÔVÂn …}‡¢EX10YÓÏñ6%¥aí%uܞZ1™H.xbgW‚ßÑ]økYU¡´[LTkÄ~!ð‹w‚fJè@þü8T‘…üf¥:㧼î»9„“6º&ºP$êP +³ÃJ¹iÛCÆ +u9¯´W¦Î $Ñ° 9ï•Xý7öòi@ðknCOÒž·}1ó¡TìTÀ5ñ¶¾|9Èyž|c•j®A0BÄ‘4ïʊj§à&¾KÅӟ·µËÍ©šü̓ød6¸ÕÿÙ«¤.~‡’'GhBg(X§'ž•Áyð|©k 2õJµhÑî((Ÿîƒ.äŸÿ˜5hü$w¶&Ä¡(‹¶â Ö<´1ó¡úÌMã]AÙwdÀ§ a(]  e9D—"© $›ß£’V)\‰Ã>x•}jÕýÄ' ÀãDË1MØZûöö±úötF¾ŽÃµY(­%Dç‡{c¶}8¯Îmβ]ýY¦¾#”¿NÒàÏÁ÷(¨Ø/c¯@ y²+ð7¯í[¥¢¯%L¶‘\!\àŒÊ;zÙƱÔu¬g«Ä0.=Œ|Õ-Á4ÛKœúŒ~ _lÀüÄCP}`&ªƒ^Ôd „†.󬿗¿_?è}ú¥o¹"ô%$à´68£"‡«C:Ø+ýû*õÍu„†õ¸I;dr±G#!àƒ…¤Ç 7p}”Ìü&Êd¤P)¿Y AnÔÏ­ŒÖs;k¨ˆ[pÍ ÑVoBŸ¿ ÷]²ã¼H³¸¤/6ÓhÔÛòiXÛ¨W¾wDÿYÕ“$¡(ˆ6›+³ ·àDï×(jÏnÄÌ$ý^Éz 'Xé“a²0é L¡±f…WæM…í¢<˜A¨&x›ø0 #ȶgì3O‹:×KC‡ZÐBFÜAÇÐðÍܵ«'^`I¤[#- ¿ë[t{iº2éû•Æ×ãž½¨Ürp½uáŸl‡5ôpŽç1Ù>Ê)÷ŸŽ>~ò>&™ ¬Œ$lÛÛÿcð2KÔW¾¦ütñR]K}Û;ٗ'asƒÅÛùÕ@¿¡M&÷ÄE`©àšáxg„jBˆÃ?–Ø{” âïÏKÞ¢ËL<”Zlæ.Û ØœðÞ.‘P#©+•ø,ó¿ÔuàVÊ3›5Ö,¨@LVRNm èá™uOŸ±HJ9nÅva̽ªHHµ”´ ¡v8ð$êïËkUå•á<™ëʂC©†r’í§£QÖy Xù ӒLöf–½bñຟ¼ÿ¸¡Šáý&²¥Ø#rk¨ËoG¾v•LÇZ¦îêìǔGiž¢IÆWÞûq§B&Ém>£ñáý[ÕT&ÅЇs¡ñ¸²ì€Ï~g'­á”äö…?óÿÒ}153 ÝmÂÒ`0z .¼SQÏJ‰-žˆ9:ôÜÛ>3>G¶D ÛL£-ÉɜZqa [rrìÜóVjÅ=PE—ävl8u•|E 'H2><¸Æ{…äŒSÔir,µ†‰l©•úõ%Æ@“•Ñ™©ýaråe˜\C†Éwþ­Á%ÏýMa8T ERë&•«0ƒù­ç²I8]ÞBHuˆ°G@È0²‡ —0qéÁÚÌQ­A‘ƒ þAn3óT+ žEõüOqÈý)¬ùD}ŠÚÿU=ƒ€Ïþòü Þ>†ªþ•ÈïMN0òó+®O©#†1å¶Cª´JºÄž2ôN¢®QlI뇶ɰÈð¦W±Ë¾ùÂÕ5ƒ†€qŒÄ wèyÎy*]ë¯Çq ¦Mè‡Ø4É]%^¤Ä̃é*'nnÞ Ò/ÙÏ8W€V¼…úÑ×s": tdU¥—b²2Á#®ÚÅܪ-‹~±µÛCȆMêý«k/åBÞóh¦>,]½Aùúêí«×ý;Çêêۛ|óá£?ÆSD¨/úRðL]€aèG¦y‘¦aŽ +K- Ÿn¡*8 +4ïBc´À—°5†ú|ôÑì…~Sâظ‡±é”!û¡“ãäÜÇÜ¿Ï;>ÃkLªñê/ͤ=}}óä_Oþ äÝUwendstream endobj -392 0 obj<>/XObject<<>>>>>>endobj -393 0 obj<>stream -x­V]o7|÷¯Øú%²`tú´š'ǁ⺉ -£€—ºãI¬ïH•äÉR‹þ÷ÎòîEJТˆmȒŽœáÎîÎò“^4Ðç» ~GÓM¦}²’²“8|Ó¤Oƒ1%ö\\`OóÂ{¢‡qÓðb‚÷£q4­6ã w/õÚÑxêµ}¬< 2 ±³Ù{ÐPÒ#Ž';¾x2Š&Ê»ÎwÈÙ½íєfÅÑpЧ19_Ð, GëÑ,iuÛßãçlöûI:1 -ôµéQ¾AtbmTªô‚„&¥“¼L%9/¼,¤ö´”Vþp´õ{œ§{€ê¼-O™Êås®œ{ð\n¼´úósjo¶†EÝÛ1Å1kØ©Dìô'AL„yo¼ü‘‘º·ÃzQ‹î2ښ’R™ä -œî8‰!Oé©õªüҔžüRÒÊ( ꧳sþ؈Ċ…§Ö¬¤…N"Å?F"åHËD:'ì6YÈ ê³òLmt¾¥W½¡•5Þøí -¹hÈÎii^åZÚÀyˆ^êÏøUlHp ™ærXº£Øq’8:J•K¬ôÊè¨Â˜R°ÀZ'óŒ2kŠÐd¥~ÑæUŸCšW±u´ë}圗+x‰òCëBß/ÁºYn6¢XåS|áȝþ(º€3£T+¼§øÝò†…²Æ§¤Héé  }m±|&ªrvs힃c„Ôqá5挥DQQbP#xs …s¤ì¥ñÉ~\u¾•X£³TYúÎMÉ~67‹gi­±Ð†cx:kÎxŸÐ¦¨ºçÂHäç›#¯t)ßR·ŽoäFyPÅLÄ}²·¿‘åoê¶I¢sÿ-‰Ô“éÿ‘#)éö°DqðTqÆÏC×°}™ùZ™Ò!x¹‘Å -£¯*w´g9ý”‘Æü:§Â8O&ã^h -¡¶¨Ç»{ÔfP/Aû:úíZf°Aó -‡IސÈ0»BuÚ\—w(4d»²Ë6wf}€;wU“ü7}»­.q|䓾:…;€5ä %¬V° ¥b®rå·pëÍâk3/¡F劢àéžVuzTF2qQÂ­·œ™Aàiˆ˜˜ïì?ìUŸf×7?â„s¸€äF¤ÏÜKjñt†¼XR> a{&@uùîæþš‰»·õ]#žL£A<µ®Åö«Öf³¥kL÷<\>]Šœ÷ušåIwBž¤ÍÔ}_bXäJWcw8ÁŒÅ-×ôÕïñޛÙÉÏ'ÿØÿ2âendstream +379 0 obj<>/XObject<<>>>>>>endobj +380 0 obj<>stream +x¥YkoÛÆýî_1ɽÀ•ïµ¨§%˟nšG qÒØ š@@°"WcŠËKÉê¯ï™Ù%%ÒÎ-šº)ÉݝǙ3gÖ_OúÁlD‡ùŠúøç|vNÓِrM˓<ÐtH£ …¬éã£ú¯ °æ|\ÐøbŠ¿ñ¯¬íx[ýðŸŽG“`à?ƒYõíCێ¦ƒ`ÚÞö—›“Þ‹ º ›%Û4™õé&“ð—°óø})§+²kM;½(t¾ÕùcŠS<‰ Ú¨´T -MN‘¶*NŠàôæËIŸº³`‚­:7kÍz/”;¤Cï±½–uî?¾CØO%…¡²Ð‘lšÔê;K…N‹ØÆ[MkdòŠíyúëKÒQlMÐ [ƒ?°®ˆMzXrFØÑ®•°uN»8Ih¥mÓR•e¹ÉòXÙ£c°ko%¹N´*t@×Ë횴 +×ÕSR´Ìu±>¾6eÑBS™%FEpDzG!¤yGÈV§-C"øÄ>ø5å¾ø©&qz kÌFŽã¥”©•¦"NC>žRí¬¹Õ:óé+$¢[•Ç¦¬#ˆ\l‘OµHôü”ã+y<$–ƒÏ;.œr. .ÌFÃ1 &‰oÛ©_[›]özòÖÜ퓯zÿžw><wýòÍÕü´ÇÙé:HõšØð –ÌUHxOÉHªwÍ`։ƒ($„;5@ß­^Ɖ&«ràÀ +ï%ø¯7úÑ£GôÒJ¼ðÀp6#“j³d/@ï½®»çÁä‚FÁ˜Q?N¦Ôð@^wÇ(´¨óð‹ôV'&Z©phIŒ¹uh¿´ïKæéZ¥+ýʬ;vH¥¬¹ErK¸–«w&·ë=…²îàq®—pɏ2˜ËýØZ_¥ÎZ_ÂOÍf[”&êAC0¸švNwPäè@“ZÔhauVÌ~ã°µ:: è}úáÚU—OUÝi¹YH!£»“f>Xáb“íç?>üü©²Ç=3é,S måƒ3ÞÔ}‹¿~þ#ø|Bqîä3Äóv~Jچ?¼‡üy¹”Bô0¤âzaøüotji‘«4\ŸáE˜3ËȊÌÄxU9, È)˜(‚…lé¼óéƒù)LT+.uüqWЃ.ãàTâ<2£(t)ޛ2÷9}È_‡o{0 † §7ÜŽ¨î Ûg{y&ôë{JJ¡ºv¨­¬›p9Pç:Á@êºéŒä¦™PÏ èðÑ#Szóx­"B°/ìÜî:£Ý:‘¯p{ 0¤IQ†Ú‰ïðô ƒèzFÎãÕúãRìÜ +H2δÎ[ÜOsÕ4Î؞ƒ9ÒøŠýFxô¾ÛHt‰n:ϬtÿÓä…%îå‘ó£ = ê=ïĺ`d,š‚[Ü(ñ +G™Ñ`œ³ÀèŽúÁhHÝñ(€$R&Á( _Ê8‰¸a0ßIŸ­Ç[Þr‹iX‰˜á”Y_ˆöÊ?[œFñ6ŽX‹d~0”2i/°?Ø ›û"ŒºWbhŒ•Ë¯o_á*LÊ‚R‹óÂVûxê¯Ö:‘²S{÷iŠ [MeøJxœ±âì “;?j%„žuÈî3 €ªœRHJ‰›æÎã¾ÅG†Ždê—6%l?tq’Ÿs ª¸ Bh($1½ Åžô]†ÆQE]Ð͆ÐÙ !fd)l¢7™Ýê¶åμó…­A"lËø¾¹€Ï+R¸ßœ9QPB\Ñ+,fÈxÎÐ4#‚úN…6q½¦`„&ÒíB|+RUŽ”×Úà8-l^†ìÄ÷ëMX„ÓM¢,hÌtI?S…V¹JÌ. '8ÏIl+öiº~-)˜ªbƒÒ1!l!ŒåYwF°%FÊîpˆyÑÓéÀ“xëd6½BD~IwÌt.Ôä#"#ÌB%­tªseUƨ²8+A[l8dRÀYi_ègD:x9ñ¼ &*΅qç~‡ö2C§1‡JͳKއÖ¹þZB*4ûB‡v90J*”ˆYs)˜qK+=ôßA†¡è8]ë0†Ê•‹ÿƒ³ð­Õb‘—ZÝyA@Á²ÉÖ9bæ¤ÅBƒ´Ð8|@äñhµ€Ìû0úpøT7ìOj0ŸQ(J4C¹ñ¬„Ö–¬:¥pJ´FÔŠ†Æ›rS“0 US0Xd*FB^½|úüêúy+~fJ®øسöRûh¨óîù“g¯ÿÎ6]ž¼¿ùíÍ»ël ´Êu%Y߇txF¿ïÖ½Oã».·Tì[7,EE|çæcÞAZzõýJcníÚ ã‹'¿ßs¾¹ÕR}í¹-ŽZ‚Oæ¾m)Ê$Èý²…ôgՈúðmMÛæz¢õ<%¨ g^UßeŒ4ß;4—ßw×)v$îwðo7¯_1ê ¡%Á.r[î–|;~kÆqäOZW~dåŠóU¨ã-nIönON_tnÞ*MÌÀž‡êÃØÁÌ=é"^¥èaE‰i¤¾­:vƒ׀å¢Ã€™r'ç2¦NŽÆ§Xs_DìýÍ¢Õhá{‡•œ­‹Ÿq‘¸Š©o퐾­tW|""1ƚœo.qߖ³ì±:ý»7no„Iª‹"§çÝ=ß¡jX3Ç@0»¹—ïm"½TeÂœ§VôHø–ïQ«‡ßݹ 0 ~Á Ç, [ËL0É5RÌ’+cøÒ3…<-è²[5Çj¤Á@äÌø"˜áW2“ F̆ÌZaÒCÝ®;˜Î‚ÑàœºÓ¾  “àè†BÑ¢ðÁýOÇÁ·ÀrÏ9ð£ç7'¿Ÿüendstream endobj -394 0 obj<>/XObject<<>>>>>>endobj -395 0 obj<>stream -x¥VaoÛ6ýž_qè;€­X–-Û†ݒ"¶uˆ ìC€–(‹­Dº$eÇûõ{GÉJêºA!ˆ,ˆ<Þ»{ïîøùj­z~Ø-Mð7_Íi±š’•T\ÅáSL‹)%)e5l&ØÔ?Ø&šP:[EKš-xŸâ?ØòÂl–FÓK Éd¥—âÕ"š}½°\ÂÑéÑyÅÙI·3™ã5x}»¾€ñænFqLëá¤Ë­óÄÖÙ03:W^]¯?^ÝÜ¥ýÎñ4”u>|ðÂ7î‡výtҐÞ[³µ¢®¥¥\¹ÌJ>…”#‘ï•“ywàŠbœÂ®ÇIÜ8‹QÑÚÉ{£r*DU)½%_ZÓlKʄ“Ž”&Aî |V’ YKí/ 嘆·O»JhÁ0ÎÀÂ÷)˜{M[©¥ՈŽ¦¡ƒª*:íJ)ö+ŧÁ³Gìò%°H†6 S\‚Fë’3PUæà¨0–“ïq¢/%e&—ìl#©6 ¾r±©àXçÔè\ZDªÃ§QøV4v6l΄¦•{¤{·ÌÉ5vg‘rä« gji´„yïNß «P×"³Æ¹gÑ0„ âw®©w<°scPô‡R2 \hNm5ªùmtû>:ãK­a‰”±äZËÞ Jsnjb:uQo…B]ô­q†®è²( ž2NK-š8‰“Ù™ðÀSÀ?^‡ÙÃ! ·„É-‡"‚2éÎ&iãXƒ, nÒ¯{ŠÈdVqHaÈõð¹³8on<˜îPº9h¨–jêûëþžãÑÜ1ÓÁO~CyY•fÄyB¦*càøƒÿVz`t¥}û$0^dw˜ÐŠ¯!¸‚$S\æÑ¿Ɂ\A?ÑäǸjõ+›o®dýÊÍݲ»5ŋ®i ¥óü$|Ê{«öæéˆôîe…¶béw¡ÑÛØÙ8^¬¢$žÓx1º|ˆžû‹ =ä]£rÉa†š-pgJq äMӘmo×W]ýûKkendstream +381 0 obj<>/XObject<<>>>>/Annots 140 0 R>>endobj +382 0 obj<>stream +xÕXmoÛFþî_1ð‡FE¥µDêÕÀ×äâ4@“Kc%½+r%nMry\R²î×ß3»¤hÚBc܇;Ad‰û6ó̳ÏÌð_c± +©û(w4Æ¿ÙjF‹U@¥¢íÅÄ=šÐ" pNQ†5cL:}ð1¦yŠ9M— |ðß­‹å£íG3u6ç~êd)Ví\ŒÅ´YÝÈt9‹s#gL™NgbòԔžÕß\„ã@„Î؝Q8™Šeó+¥Û‹‡¿1Ì{£Oî[ãX°švFö f³ÎåžcÁdvÞå3ŽM+Xñ,Œ'p'x‚W8™Å'§%ÿu?ØaŽI8?79Yùr}&äW7KZÒz˜˜¯Æ´Ž%ð%|H•´Š¢DEwT¤²Úš2#[¨HouD¹©”%S•hK±‰†¤·t45%r¯òžåŠ.?”zoTÈèNît¾£ÂV ¥)ÉT‰*Ÿîþýú÷‹1Vˆé:hkke½2ù^•V¥Ç!–8ëd“̏5U"+gÂ]n$q†Î +SV2¯Üi°îÁa_0 2y%£ŠØV³…3Š}¡Lj<×9ŽëÛRŒ{Ÿw# g¿|/xÞÕMäñÍÄ|I“¢¾óùño7< +– Æ?8hpÙÄÔiÌGHºŒàc~ Œm%Ó´1OÃ?ä¶x›Z§1ê+A·X8ŠRíµ©9>níiãÂeÌÌ^Å´Õ¥­¨2}ÿTnkàÆ8µ+uulÉÕ!=ºóªÖAëDåTÖÌÕ>u`K:$:ÅVhÞ)j÷Åî™ÜÙx#‹ÒlR•Ùaߔ†&u‘É>á9ÚliŽEÐhêb0¡ ºŒ­e¹¦½˜€pØÌ;apœ=W7҇tÐs£!s¶¥² Q÷L6@ËP”z—TÄ|Õ&g,92¤²xƺTQeÊcïü /ƒ[…;ó² ©Ìcċ©Înân/In†sÝ=iCqí·…šCÇp¹'bÊ80W+æQST—¥Ê«sÇC"YW&Q2¯¾ûÎýÂÙòwqÅßôìèY=jv‡æ‡sw]±y†Ž•Å(ÖÖsÒ¤3;òlè‘ Èú¨BPvjH—Ñpªñm$z6øÝ¿áßÜ–(…¶Æ#"þéãÏo,¶Ìþ¢Þ¤:‚9 Á+Ý@|x(‘ùNQjv¸‘*‡TCuy„¿gé² “ÈëSë’Óí.ø¯Ü>?›]Ïú6MUssN7«‚ÀK_‹×¢¾}=då£ö’`ÜG¸õhþñûޖ¯ÉÛW=ḾéY©ûj«IÔpätužw@]%¤ð®]–É¥öPœi„ÊÖ9üÙÂÚf‚­ ­É\DªpN=IH8²*q +ïu2c2zõùvˆÉˆÌŸÜvŽi=^ +ŸvGþi‡. ãFÔ'ô^|ŽÈ%$@”xRG·NØpë2éÜà ÀÄcՂÌ×Ùfŏ 'B’ZŸc”Œ’“j"w•áxðRÐO*‡r늲‰kóÈ h°âtæ29R³+KP™°A>Õ±Y0¶ßá¾ì€™‰†XË©•ãÞúûñ›ø'JWù½qËSlÂåOí²§ ×©…u¦â +;ÛxA‚Ä ü™œ2-¡ºG’{©S‰lxDwGkL‘"Å36MlZ–`—“Ÿ!ÁÿƒDàÿ£läÈÖÆ¥IZƒ.0§¥ƒÿk’x–M~z<·,²¯MúFiæG›Rðiš;@ èl0`ª2³ÎÝ;”æ +U"K*e.ý· ŒÍî(ÛËfŸä,î|wÀ‚ð0¿ñEbC­/šÌßÖ5ßÈRSA¿½ +zØù|ðg/Ùv,€…Ý£[UÕe&®Sõœû»·4úwH£øº°ª„2\ËÜäÇ Õÿ_£½ú÷=Há!‡‚ì”ÈUu}…±Ò˜êʏCœÉØ2U=„Ÿ²ó7´x~$WL)Êô=W&±Ú«ÔJJ¨°IѯA†\#…ͳ²æszË´Ü•o_¾£ÏÚÖ2¥Q½úá®Ò3t y„cdy¤ƒ)ï¨êö‰èvyóþ“?vø@C½rËÒµB ­F3’˜Í-ežÙZ¨¸Æ‰M_«Ñ ½ä>¶sÒ#Ҧ̮Fî!56-ÞÃy\3÷g¹ìÚßÐ&¦xüøawÝL¯ ®ÖêÀð(þ*Ëâíûo9œ”GiÝ´‹0çBîÔ5Ý3È.,³‰¯,»¦¥­~ûNœeÏ […¤#!2Ï1Õ5­"ʸ õ=¢ËÜêLP÷*ª+—yB.3èÖ ò—=èý›Öì”δ8Mëûú^½Ç꿼h*"þÕÑü«Oå8éE ÿdâÚ¥ÅïºBš/Æb2qÅfóƒþæIŽ‚æÌÁX^8â÷9ádF£ÅØuWsÚ¹íÙ$½WúìÛ@ž>]àíÞ ð˖Aàäìõú○ÿ¥=åèendstream endobj -396 0 obj<>/XObject<<>>>>>>endobj -397 0 obj<>stream -x¥V]o"7}ϯ¸â%d&ÀðÙ}kš­ö¡Úm—ªª„´qf<à®ÇžŽ=Zõ¿÷\3 -ÙÝVU’AëëãsÏ9æ÷«~2Oéø¨WÔÇÏx>¦é|Hµ¤âjÞÐtH鄲kú(:Ô ñÄæ[¡³/—7h²xOpÀ•b‡»2ó¶( ȽkŒ¶"¿ËåÞzÈV¾ŽG½Èøê²9'6r­ú^¼ÿ‡à -äÈ?Öòc¡4,‚§\v£û3­pO~Äx±á«ÌU„ø“’$¡¿"½­ƒ¸FeôlUNû“\4 Ÿ½*Îz# šg8æyØ~æ¶: .vÖ!Èm†Ç ¿Êm%3¶+x‹WÈ^< .8ížêÆôXˆ³§ZÔ»“>­kpÿ ÏÜ*ù“Ê›*†À cøð.žð¢2jpÉ µyƘ$&ê 2þö݃S°öX;|"ˆ"¦vϞA]v¡„ê–ïl|17ݽ™µ_¾Óy’Æ4§Išr,¾Çµn·;ú.^”ôƒ0ø®Áëz±¼7í#¡9éèÞæ åû÷5_éÅhŠ œà»+ ‡¼öaqõãÕߑÖi«endstream +383 0 obj<>/XObject<<>>>>/Annots 143 0 R>>endobj +384 0 obj<>stream +xÕXÛnÛ8}ÏW òк@Dے¯Ø6½ { º»½À@@K´¤VU‘²ã~ý’’cÅIk}Y´0d‰âž™sfœ¯'=6 èö£Œ©‡ÃéÆSŸJA˓¾½Õ§±OÁˆÂޙLðNóaÞa=ÆlJƒÉ×}ìè^¶Oü î{‚P¬WÔ» 'ë×k}ìdÜƲWÍR¼[Ú8MÙ¤ 8ه2zÌožìƒ¼J0€;Д°…þöՉïû8]04']QЛ”û–ÑÕ\ùÓ݃üËâ>ô{ú½ñŽ×=€M^ö¹êúl|oÀ~πšK⨌™z6;龜ЄfKÐhÚ£Yd󍋰s)nô‰(Õ¤AOfŸ±ºçVw^ÿñŒmRånÖ[th™f‚”´ëK‘ ®åÕj!JZq&BQšß³Û›§>}õâõó;û)êTæçMìÖ>>yý)ó§S`îívøíôM™®å͖f‚¯æóúÛî‚Þðð Å|þa>ÿ8Ÿ:mÅôê½ý F#³÷GY=F‰çrƒJçі´¤E•f£·Õ1ФòíúÇ¡Mše 1,GïyY¼¾ôÒ\iže|nō+m/ï%’uM +î¦%JK)Ë-£wE&¹Ù>UÄs™oW²R™9TÃq] ÞåãWöŔ¬ÊP,e – ÝMóP®ÒV„“ uÉË­SNJ%G”$VQ¸¼K\‹¯Ãj»H¤lxIãD“,DÉ5ˆ&µUZ¬hÞQ–¸çb‘òœ@æü £÷‰È)“q,"ˆìÌÅáµ\!¿/Pf…BÖ ×&”ð5zG)T‚ü‹›B–¯ÚŒØÈkQ*ˆ›¹â¸¥AŪÐ[ÚVëTWBÐé3£ƒÝdÕåÙ|«ó¥N‰/äÚ¢ŸôåQz +# +«²¹6QÊf˜ˆWZ&P(ÌæÑ#û-”ùÒ\³®¹Jc¿ôþ†[O|ÐpbǨ+(/J•E³³Óí7I¢ ¬Øx„¿|˜}ýÀÜz1;ùçä?a½ +endstream endobj -398 0 obj<>/XObject<<>>>>>>endobj -399 0 obj<>stream -x­VmoÛ6þž_qsÌ1bْß=ìCÚŃ·¤õZë6#Q–ItI*Žÿýž£ü’Úë†s9!ïŽÏÝ=ÏQŸÎÚÞ¨C‡‡^R?½Q£€´¤øÌwK> êô)ÌáӆÑþÁ>|ú<»C~øu¾¼`£{º1Âm÷ØÆرçû^üÞ^.ÈËù?ٚŒÈïÒ<ºþDR›æa½ë ¼‘GWQD™‘Ô†¬"›Hú+N3ù1Ký–ŒÕehK!ŠˆÒ‚”†éÅüþ¬5é“ïW±›Á±ë×O«L¦ªW&Ýg&}@…Ñ”ñ(«82"‘e¤bwní.SáƒÔ5bªH2¤;ÉçŠl•ˆÊË£©¥Ô&•šMDµ´rMÛ(†Ö‰,F›š~Ç øð*I>­dhIP(µ»”¼Óœ¶€_++Ò©3‚\lH¬VRB"¬KáJFx§Õƒ,> -J,lhöfö~FVkbžKd+Txöêí»j㗥=‚nÒ"„ {ÃQpEŒ+Ž–±Ô¥äBúyzsSY]Rêêf{ŒX0‰*³ˆoSmì6óSš¿jSÄo{T{£]­j®Â®3àCKi -Q,‘—O  çÃû—T¹K¡ï ¹ú“é‡ÛëÓ:wbâ:ÉB•ËgqI® ÊÌýwèÙg;ðۃ½¤»@É e©ñ©L­la–WTÜáÞ²F˕Ôai ˆm.™mhvj)@®`K”Vƒ\†c·[áHЁ-ӐÐ%ÀRŽ ÏéÃo¿_Rƒ„µ2_¹Ò¡ŒqúD½HãHÆ4»¹šOÞ¼½%ÏóªZGGè\¾‰ÔôBQo-vÀ”þ2Ô)ƒ-{•N—i!2¥M’ʲ åRLïÔð €v€²M²:ü+NÝ÷É)§)5 )Ȁ—ŒhI23.¥êÀ½Ç6S>ìóô¯r­ˆ“‹ÐÄÒ3EpZNÊȗ͌ÀÄT[*åú (‹ºÍ5'¨uŠ‰‹ÃôaúÙ4Æ4(Ž{Íf%ƨɓu¥Õ=ϞE½âç#¦®D…åSek•?7\\Ä •ðovº;qÝôFÃË|Ls0(šFhžŸà&v\!Ïc4*Ïs×£vÄÍʊȟsàõ«‰.ötfçÒ¦üèBÏâJ‡ö ʜ`6N¦7ׯ¯n¯?êÐüñ'}Oµói4¦H>ÊLAWÍ\¥È<³Ì³ËG܊ -Úí ÕµÚ=jã`0ùlD¸`è¼öÝ6 Œ&7VZÿãs”' 4ákiû¿ÃL åù‰áÉÍJ½R¦r†ç¢ŽP„ÅÄX§6ßÝ"iBb¨â›ÅÅIœ“z¥V¨6±€…À¿ê³¤à{†»Ø]Ô_-.¸°¾ãW…|¢ôr?£·ÅÄ8:úÌtú¨ž6¸™DîQbíjÜj­×koUmxˆÒ:Av²p•^ -ƒ; ÌdaL +u!-ýTw¥Á¸ë«i}¬«´þ3æÒöG£]ªØäª4¨Š{Ûy¦Ö/æ~€Ãnè¡vo7=¯Ãý³ñ ³”¼Ðš ·¯Bþ`€7ºõ#¨¦ÃjÙUø‡&èÖi‚›>ì:~šƒ6´Ὅàùc‰É“¥…4lØàºîã}‘‚/]ÏÏ~9ûÒ"Pendstream +385 0 obj<>/XObject<<>>>>>>endobj +386 0 obj<>stream +xíWmoÛ6þž_qȇÆlÚò»òiKÚ`–-[Ü- +´DKl%R#)'ʯß%9‘ã!ɀ 00ìðx÷ÜÝsÉߏF,œÀÇI`„³p‹p FÀæ(ðÿ +`1†É¢÷,—¸§ý =lóɂaº\à÷=֛ie¶ Ù¼]YvVFþ<°A°QóÑøŸÎçlÒ؎ѫÇö€ÂkM1~kڅ2™Mpk°eLØ´]y ÿ”ñ|¹Kõ(A8=œû·ºmëôŒÛpv8^çáÎtçôlu4¼Ú²Ú`{çË%&¿Š}ÕG°ŠzXk¶dpÉ#øñúæíê nX²6!›Ñ¾w!uýz™×Ë=ÈùW¶Ä¹”;¨t )ß"•Œ°iV¸+´q"ÆeF&©ƒ­0VjR9 \È WA,ˆœ6U'~Á§Þµp|VÊ,–*Á1ò!ÜÒ¯‚G_y"ì1ðµÞŠOoíÁÀç÷V©Pçã7‚®, ×q™‰Ó:օ-(ã€M'c ¬ÇaHiD[ ƒû âÓ +ƒøO¹ÒªÊui¿ÁE&¿¬í-gV—&mÁ”p§C\3Z»a½‘mï|ðN’ƒ&æ™<Ç.5¨M©^.î8Å̱q„zM{6Ž´p+³ 0´•ðïñÒéTðX˜Ž“^ÿ€]¤Õ¦kåÛÔuHF2Aªì["¸ÝóLÜêÚ2¸ŠgYÕéjà‘.*ÀÎßa%"a-7ld&, ÐxäälØvaXí¨Ø;ؔ·(Œ&_D²uµ‡ìªfÝ%Ü«NK?âõá̐dÛã-ˆÜ¥[}W5‹¬Èm±ØH%áëQå¦òö ÝAñ'Nãø¹¨öTZÓ|¤X¸ãs#¸ÛË¿ñqŒ qN+6~nm!"ŠÃ† *V|ÅqÃ"¢']º¢tí¸ùø}¿+ F‘åci‘螯3÷²ð‰ì²î¶#ÒyŽ˜_@ur4 Æøša?ûYú|Ç*vÏhõðqžNØo(T;èe‘iïõøÏÃt\÷°à ÜaKêÕQ#µk»¯ C©0o¤F×W¿­"o$n¯uÄOéê£Ôž ìÆZ - 0*¬FJ;d?Qá<å*ð½NP“uî­j¡Ç͇©mª§n稌ÇÌ« !Ÿâìú]3ÎÕî„À Ù áúA O,ê^^ ‘nrØJÖ¦/h7ZA´Ù¯\'øÓ¾ž§Z·µð§.„ᎆÐV։œÁ¯ÄÖL' žJRýã%ð F¯=Ý`Eè_|4D¥1B¹&fs2<(;¼yô‹¤™¾³áa‘~ZçWÀHü/bmãiÃ3=¼M%ŠZ­'HbHp´Oè +Á p¥r‹Œ¿æ1táÀ9F¾Ci›Ó"ì\NÚÀõ$vB÷5–Ææ_QR1‚xïPT´q +Þ+€$CéÛnÿüeÇ ±*é`B©÷ZB^¬O}â„.~DÛ¡¥=¤øP”ëLFYõŠ¹î¢"OiÈñ ß] >Þ@tJõxÌÿ»ÁÉÜÄ.>Ü\¾Fqƒ€Á·¹L8^ËÿoÆß%b{ÍX"óý;`²I0çnÀf!> â^s»€wb+2:WðÉDSO½ý`1òφ9ƒŸw¯?ˆ[ø¥~øùt1e‹9¾¬ÉïxJÿz¿:úéè{&ŽTendstream endobj -400 0 obj<>/XObject<<>>>>>>endobj -401 0 obj<>stream -xÝW]oâF}ϯ¸e#•D`l $êIaC•¯évUªì`a6ö R|ό!¤°QµO%’óqçÜ{Ï=wüׁë4«´yè1¹ø«5kÔhú¤9Ežò¨áSµNA‚=§§Ø³~˜=ŽKÕSÏiRÍóœU½ºãå»Í”ïãQs]§A¾w‚§µ{1€%ǽ<`©Òq©Iƒˆ<ç¤êSý´áÔê§4í2—A‘Žië3˜ˆ”¦Z5K_#Í9¥*ÊLósZªLâÔP¤™£YÆIdGƒ¯.•=xûß0ËdXQšŠh‰ 4“!הM8e\')©Èþøxû@¹äšÅ{mÞÏF±èZ\¦œp›‘tÂC-­¹ŽAß_¡ßk°£€ŠeBÉsâØ4͹Nñ›ü5ÀÕi%‚7Ã"Ûï9"¦IMÕá1¹¤˜ÁåµegÕÎÀV†h;E›L„$¤õ{¢¦ì„e&Ô ïæˆÓ,åÑ,.rJŸºƒ«»‡µn?Ó§V¯×º|>‡¥l¢0Ëçܞ³ªH¦±@:@Íd¶4Q¼i÷.¯`¯uѽî>›@vºƒÛv¿O»µö½oõݡëVîz÷wý¶CÔG¢ ›^ˆr‚ìµ·&Pd Šz -yÆDœþ§Ô| Á ESD/9Q22ˆg¡‰ BºafŠ21‡£Ýˆ¤ÊJ/•8|a²ü*N²lzV©, g,gŽÒãJ ¦Ë˜GYe<I–ì' -‚´ÐUŸ©Ý£M •¨+§ýÛëހƒ&œîcp*SfÌW«n‰.Tš)Y¢›‘ë{žWöªn£DýÖ{²ÓãsaÊ7E }ÆáµîÌì ‡Oeeµê;'F$?¬8@…@ÉHŒIaµÂ÷œº•Q"Çq$xš2 ÙÌIc™> ³Ô¤!TdDf¡ôÖoñ4£`ÂL™]·o[7íÇÉ£Ò?þ¤Ÿ6CW¿µ{ýîÝí¹Ù_éÔÉóLï(çÍ£ì7lî[•qÌJçdµ¨˜kRȃ]˜Pˆ8æL 6Ší´hCî¯TÀø¢Œžó¼,3=N 4ecPL·Ä÷ áÊ5¯êø&>Ì4·ŠmR›×@ä 'Às9ε¡p ¶k1ždJy`$Ù`Ð| -Ð\f9n3ŸÚòZ —`ÁÖ© ú m 7Bûóëyf߈0)Dž›t°À´\¤MËÍ!XxÄ¢|ŽS ’Ä@‹bµÀò‘z6]>…Kˀañ÷¿¡yãv‚t *][†¤Obj½C? D(¤1‡ËyO8ÓÙºÇ*ähnsÁè C¼Ã²Iɏvח ž6cÃ#•ËYÊ·_³Ú$¢µ\½´ö3³*`hm¤ŽÉ\VHW”ûו¦ìלS\ml5E¸QDôøBò«5žÕ¥ä¦…äïX±1±. -*vÃ34†9ÑZu9arÆb''qiN¾S%ßuýŠÛ¬¸5(ՙß8«5‘¦¸Iíç)®K{}Cª|A9>Þòv¨cB¹úœö¡‡ä¡{ê©Â½Ê|°sX„©˜Ó»l×BQŽ• -”4ÐÂ^p~½ÒKæ†?¡›d¸O € )7³Ãâ%nLˆ«g©›#ï k½0íÍëæ½sÈ î–,qèUߛæ¶÷½ªu~ó¸ËC2ªëJÔ¨D ý2“O£Yj*V¡|…dq¼´Mní²±–{Ãm¯ÙlPK*¹LTþ%‰R~¥oú¾c¶!‡Ú -$®¯âðõsê ÂvPî lÃÞ¾„þÏÞ*ÓUoó ¼žU©Žÿ.r­Y³ëçµЍ•´²×h:U¯F冋—¯°xâ˜ä 9¦3òdeú¤·7¼Žá=,,ú'fo{pðëÁ?N=æÎendstream +387 0 obj<>/XObject<<>>>>/Annots 152 0 R>>endobj +388 0 obj<>stream +xWkÛ¶ý¾¿bj­ز-¿m’fÛ½IîÚé ´DÛÌJ¤JJëõýõ÷ )ٖӢðZ"9œ9sæÌø÷›a´ÓùÃîhˆÿÓå”æ˘¬¤íÍÈ¿Ñ<¦ñŒ’g œi>øL4¤Ùd-h²˜ãûÃa^™.–ѬYY´V&K<þÁ8 ëÚþt8‰æõÞV½oç]þÛÝw7ó8šÒd²ˆÆ”S<œáoxÊhu3ÃÅñrC9ã%Ã/²«1ÜÇÄé’1¼Q<å 8¶˜E“ú‰]>ç4M،ßË«—ÏXg­Õx´€+ñd‹ðv:å{üŸ½|Æêb¬Î«ÞÝxŒ“Wî¾\ß n—Ę¯·ÈÝl±À¦uê!Ò:é”hGôâÍÏÏÖ±{A‹°·?ZFÓ›»?˜ÒTZ™Ê&rkìN~é(1y¡2¹6§G%ȹýó`!Ü8Š&ã˜ØR¼\²)â]”l#w6iY¶îî×Çâa4žÁó´ûjoŒ“Tî%YµÛ—d +iE©ôŽÜѕ2è§½Ô”™ÝN¦¤t/!˜.åâA’«@”r/J:šŠö┶Òí³#ɧÂØGÏW)gömÈl¯ÜøüÇ×w«7ïÞB¯>õîÛ׿­Ö/ÖV÷ÏÚyꑌvuñŸBGÈ;nd)®\gï-”ïcåJxœeøîKÂS€xô²é”h{€Eè#‰9,¬‚~70õ +𸽩²*(CøMW Õ Àš|sV:+”=ōKuÇäÜB.­ º!xU§£Aeòà}¼ôccžî»Ò±˜ßÉ\æà’$ß+‹'$ ä«s'½OƒUµÉUÙ¡MU–F»Ï|¨ÝG;hSê»ïâ*âÚD<ÃG1f:‚¦ +÷p^T„îÒ]¥CÒy¤8ó¤fk6òÄy.$øÝùP¤À»ãwû¨¸\ÁöfËùaÉb¹Ñ +£ âú8ÕB’‚™ •óÄh18è\G<4tISªí‘WrÔï`Ž×)d¹ÆU5d©Aø¬F­‘øÄeëç«óIku=Bu4å㧇Äw=,ðvô|ºèÒ9L8ÊwavÒ 4ß0€ÐvheI=wœJà5¤¥áÍuÅ(Ó"½®¹³€ü¹SÖe§žO}ò4¤ÕRý˜Ê-ü¾kìs¤ EP»Neâ±ÛHèÍ©„x„ôhŠG$Pl2ôV@Äõ‰Ñ¯8wŒÏN«3¿d.0g{æ³ûösºóc=åþýýJ'۞t©9h³P‚š€ÞšUÈ*ßÕì€>'Ç –_7 þ<àðÛ0ä@ÉXæL +^èvÑUžõ)½•r1 ƒ’×] aRº˜ñ‚¨‡cþöï ¨âw1f©I Ð(Ûf¶¢ó”5TkƒÞ{€’4¤ü¯—9~Žðr>F3ßöÞ[õhžŽômÓ®é?~VäƒýQ½¿?ú;3V¦fèÕpóöÉ“Z3ÄS~õz}óߛÿ«m¨„endstream endobj -402 0 obj<>/XObject<<>>>>>>endobj -403 0 obj<>stream -x­VïoâFýž¿â5¹ ã€!ÑUâr BÁé)jªÈ±×°wÆK×ëTõï¬ÁáG%ªŽ(ÙÝyžy3ófÿ:2ŽƒÝCÎ`ÒO³Ó„Û±!¢#+_²àÚpZdÓn“MñÐ6† «Ó64MÓpÑètè™[ë-Û¦G£íêSN«Øùä’I¯{}R½o¢/‚e4-2j¶ÚðÂü˜ /8E{Ÿ¾È’ÐW\$`\͙Ä3“)ý"­`È–¤¬ -!ñpê«3ï둉šEqú k‘Iˆ¥F}8ƒŸ¬ûj‡l”J {^›óK)fÒ_€¾†;,´Äæâ -3!Bõ×s¿<œ½xéÓ|eÔ_¤ûÔw°r·óÓ>b)x¢ç;É#©3 @!>Ý*ɬôÚÝl·s˜—ÍÂ0© 7´5Xœ²DizVe2½ÓÄÇ_qû­ªÇ¶\ïô݁\dR -Yt~Ѥș®÷ÛÛÚ²\—.jZnÇht\] cɟÅËŸ 6¦û†ÄŸd~>Ajs¬&j®I×°ð´aàR„:†«Œ‡,æ ˵¬á6 —.ft# Oí¦Ž¥çývô/C•©uendstream +389 0 obj<>/XObject<<>>>>/Annots 155 0 R>>endobj +390 0 obj<>stream +xVÛnã6}÷WL·q6}/})Ú¢YhÓK¼Ý‡º´HÙ¬%RKJqü÷=CÉv”éd›ä gΜ3£Ï¡XNèòð[âs³¼¡ùrL^SÚÅ¥ÍÇ4™Q’Ãf±€ÍéÁ6bH³ÑX,iº˜ã÷kcޙÎçbòÚ®ÃæñۇÎbÁ‡obN9\ŒÄ´ù—Ñ}çéìN‡âæÉîÅOüՄ4ùT i ß1oWÁí’F± UŠÜf‹©Íg´R1œ!­’î\ÐÇBÉRS¹ÓôIo‚öÚ_¯þ‚ñ‚Ëþx(&³XvW8v8£°sU¦h£©Š^ɒ2-CISîHËdG¡”›L#(ÞЂ>í´­Ï»íQ—)uYæFÐ0ÑE ÒQ.÷øW!¡r×ÖqdCê/çÑÝx·‡³ÌØ}葱‰³ÁÀؖ„ŸüÈy*´ÏMÆY*¼C0y@|YF.I*Oë® dJÚá+—öH¥É5Vl¥@6_¬¯¿jn-Ř¯þ!¥£«`ó )ÙI»ÕHÞË’:™Ö™÷7^Zà \RåI–Hp•O4ÝøéGJM¦¿rñ’Á-jn h ÆdL}¾s¹ä[©FD¹=Nïû…JéKď¯"T^+àÔ²E&m6±z3ìêãü {Îb}Ý*x¿¹6V=â¼bð#b[mµg¾ÔÚ"]ä68ÓbPE} Yɬå¸Û{ÓLé9ëئòó?_¸ïž­£:I«Þ ÐX¥Ů̟¥E²*]Žº&2ˎ‚½Ãé3¦œHÂB«±¡BnÁîH”ÿ_A Ë>› +oÜ㑡Š ¯…µ9’¯¬eF¾«S^6õŠdi ˆî»S荼֐»I +º±ð¥ô[]’ª IGJ¨ØÄ@1‘Ö¹&· ЕfÝeo +èð yCSßý~ߣMÅb§4TXjHVý)è^CK.g‘°üêàŠ]ªôáî#‡Ï¢i‡/j¿„þ ѬTŠ¬>Ôzã®Å™¶=J¼nZaN™‹Å7¾¦o×ݫLJìhQgX[á¿ÖZ@¯ØZT]ªÈœT/ª,‡ƒhh/œß®¯‘­"mã|€òšºòâS 82ãì¶ÞU¼‰é9Ž¿ÔƒHÅ3¸•TèîçU+‡.¡¿E »¦\K îFôùjïYp±§¿Ì‚YøàŒzm&qQ‚;ODàÁiðàÊpÄò6=“%Cu¥X‡ž0ÄyÞA+p¼¨6™I²#Ž¥V—ù2¼¡Êp´I=³‘e<Á]ššÄÈì<¹O(ŒFõ E:á·£8ßx‘˜Î§b>Û°ñŒ½|¿êüÚù‹ ëNendstream endobj -404 0 obj<>/XObject<<>>>>>>endobj -405 0 obj<>stream -x­’Moœ0†ïüŠW9‘Uðb¾ í©I³UÙ6½EªX0»D^¼5f“*ê©”\cK#{晗™1¿½1þ³EH;-Rˆ"‚‘h=>¹8D„8C½§œ<§œ“q9,DÆ –"ɝENÇ)™"$øjf6œÅ3?¡—¥·\…(P¶à,‰#d$–f9Êf’QÖ>±–çåƒ"àÔÉû]o±ú¹¾*o¾¯­¿Ü^ßû8ê®ÁâP™jÏ/Pë~°¨w•Áâ ÷çožßÜ0ÆÞ;´£éI=$Ïs<â,sUüu÷å*çnÁË‚HLÓ `­­üô%3äã¦Å£D¥Z­”~„Ýu¦ªmWË vzT 6„m”„Õ ¶ =j¬™<µ‘•%gƒTmÐèzÜËÞvýöŒ$6§Vb¹RÕVNí-Wù\ ‹y -e,ÏRGý0ÝQ?ýÁWy”J¤ÁmՏ•rbÁ‰DHoÞø Õnè{ø6vT]/&"a‚þzþƏ2çº.½;ï*ƒ­ƒendstream +391 0 obj<>/XObject<<>>>>/Annots 186 0 R>>endobj +392 0 obj<>stream +x¥WaoÛFýî_1ýR¸€MK$EIŠCRœ{÷åÚKŒ+(p È¥´1Ée¹¤ÿû{oHQ”‚ÆÀ]š:íÎî›7ofÇÜ,‚m$çí^øoµ]ÉzJk¤¸YêWKY‡%’UðY`Óôƒ>ÁB’xl$Þ¬ñ9Äÿê{Þ¥Ÿ>þ|³^KI› ‘J–‹˜žj•òéfnc5L‚õ|ufc5ZጙïÌÆê&žîáÉa²™ì +(“`;ó —› ’ÕfÄ@Æ ì,õÙXMÖ¸w¶:³±ºÞ^¬’™Õ†|\1³Ü,aÇ € „:X¼2^Å\ "áêªZ\ÕC— E üg¥?¹!’Xâm¢ÇF1y,]Ù•D«-.=¯N q.®\)æPè93±Fžϸv6gòÐiqnc5¼ô{ùh×êjZçòhÒ®GãùhþèïüOŸqËFÆ+(YáŠÛߌ¼¤eoäÕõ­Æä»4{äﵸîNŽ¬|W‹í¤sb«¦u/F~mí‹ûò*¼Ïv^2Wvß·ig]ÈßÜÛ;iJ“z#µëŒ"/\Yº#ã8غ|ïp .äžM¨²´Þbs&GÛÔy‡hÄ÷ ƒ}7Dî–PœrwÆÚ3N@ùÙtòiØ|ÍÀrl1w>ºV²Ô÷i)½W>ÉÄx‡®í+Iq¾Í 6ïXOt»t^FD¶3ù;9t]óîáÁë^¸îMP›î¡kÁ©iþ²o]ßüÇæ?.ñgó=¨Ê õó?`)ü÷åˆFR¤Ñ`·oÁâє™«@¤“Üú¬÷ž´Ø<2Í,QˆT©-Ési=y08êR;’–`ÿbS +hu|›Ó0…FÍ}¥ª3§¿9oU”¸¤”Ý´?Tx ¬åëEZn(öaà!#qÿ±ä¯À³ ò‚úqdÆ»IŸUúlu¥é&ODpH=¥‹Z“æL·©±mWÙWñ»dƒ‚ Kšç–ú‡˜TÝT¿ï\Ã,òãà<¢õHÕ5Бî}e¶QJ¶À§DBéTÀy§H¨ìZw"®=d©a¶õªº¾fw –çî÷ªW§Ó†“¼Ê¼TziªKÀlãe´Ù36³¼Ô•SŽ#%Eë0€ŠÁB>´UÎ=ZL(Ô{ÄgT"{Ûwãu§ÇråÃؔËe·o2å`.Ì¢‹Îè®(óô/<¦¤ #VΜkўˆÔîÌ©èv؏´÷hQºh/i±Ÿwþ˜ÞŸ6éØ ýà|RÁÇYCE=êÐÀñºqµ÷ßhÞÐÿ +)#Ã!çáô>/XObject<<>>>>/Annots 143 0 R>>endobj -407 0 obj<>stream -x­UÁŽÛ6½û+æè-bڒlËÊ¥H±IP ‡dWG_d‰–™•D•¤Öë¿ÏJ–œ`S´èÂ0!‰œÇǙ7ÏV"‰hLI+ü6Ɇâ$$#é8 ü§€â¢-å5bVX4#V´Œë]Œ1ÄßÇòD”„"|ebÀèáó,ˆC‘P´æš‚߇·Šg·ï5…ÁF7³n8â§ýÿHgËO …+J8Æ6ÞQZxîø’Ï7‚RijJúÜ©BVª‘ö.ý† 5A´wàŸóTÓ QU% ѯJ(ˆ‡UÑZ¬y˜õ¨m•5tÔ™¨df_ŽÅ–C>¾`­j® ©éêƒ4VP}ÓæÕªÑFP!Ÿe¥[9! -’.÷TP™E¸í<ÈZ?Kʚ ÉÕÏ´5•;?,$³_à€ÈB1_~Çë"ˆú£Þ@༒Ü)stÎ,Uòè蠓ž”%ÕäUWHKûù¡s„/vT©Z9YÓû;†¾e·|Î̲Òå²5êY¿\úDæCºAJ¬"H’‰íÃÍÊS›Ê1LD—HÀ!uÖ,íA5oÇÄT£œ(ސùz<íoÿ-q‹h#’mŒ¶î+NEGzåþÙX—UŠ-Y&‚>°‚Œ„kimVJû;o: -'š0®Â‚qï¬Ó-†Ìu–¾ôeîÕÇж•¹:ªœlnTë )JA¾’&Gº8kלCíï=ȃ†².º3Ìa5iµÎòúVн†³ÎiO‚ÎÚ<|¯üÖåk»<2e:}¶0‚fdÍ ô—.}œrN6#ªW)L„½Ò>ÿ”Hú€L3¨EÛs¿?¢n{Tv¯Þbᆓɠ~l]nµq¯˜Öà-_¼÷íhIr7!¤›ê2–Å'uôtoÊ0öy«\DžÅóƒEQr‰E%ªžŒD‘UÝÂ7¬“­}Ï¡·ðCÌ噓¥6—÷^qœÊ(˜ˆÒ —¹ßY7ƒÓŽ‹Ýà[ûzfìÉüähÃ>¥Ñ]Ûo㲌¯£.{kƒ]âÂÊ&æôՉÿÇޟpMøs=vu™ 츠{é2”œzñ3oËV×ÒAÆ%ÕɪR¥l¸5ž¤l …³'TÙc´íc%z¢?ú¿K _bA2Ý÷Úu :|^V*?3 -…ÀÎg‰5ì枃3YþÉÀâmÑ"ÂL$v7·å6|Ëþúr]Çkow½Ç‡1ãc:û:ûPïgKendstream +393 0 obj<>/XObject<<>>>>/Annots 207 0 R>>endobj +394 0 obj<>stream +x¥W]oÛÈ}÷¯¸^@bø!QRUÒ8q‘M\‹n /#r(MMr¸3¤µü÷=wHI”êÝ(;ÍÌý8÷Üs'¿ÝøÞ*¢ó/³#æ«9-V!IùMྠ+hRSZ⎏C§_o‚ÅÒ (ŽCoI%…ËÈ[ «‚6×çهçSÆ^L³åŸCüô¾f> ÍÃÐ a(ˆÏ+64^cwåÃ]ÖíŽÖ"˜]ìŽ×؝Íàü|—šÅ1n\䯼ÍÂŽÃe´ä#nå\ŽÖØ]r¸çÝp°Ùán„|–øîx]R´ð/vì0‚çÖ_ÂP¿:ãpÜ ý9®žwÇkΔ8ïÎÆòdy6›#äón0÷QºhÞ2Xνհr~GkF8ºØ¯±‹³ÄwÇkìF1û=ïŽÖ؍—œýiwÆtˆ|.hI öÜÂÅÄ@…«¹# ¬Ì‡%ŋÓAÞãŠ÷~®*þ.¹ys·B©á-ÉÁýx9ó‚ELIæHïS’Þ®«TVV’¨2ú¤l£M÷Kòo˜[Ò`kú^Ïaëöt~„ó€BßhÊÿÌh۝¬ÿ]¾ÈB×ÒXêMù½©Û¿d§¿Õ}(ž6»¿^; V@î6º”dukRI©Î$)K[aeFºê¿¸ +(X­ɺÒUWêÖ"ӌãàìþÑVÏÛÖ6XOè¾J=÷mÑçŸQ[á$5{ÙG#†˜éã—'þƧ)W Q}”•4¢ ‡v‹ËG/r¸õú%J º®$ÓpæAŽ``åÞ«×੯€&Nk…œs#‡¼9#ßR§[JEõÉP0£¶mhNç6TêLåqJ‰tiIç¯çG?“Ò„^€œòᄄ½Ä¤f,ì•úÀî8äÍ2Ýi„"\vÀôy:,’=ò«ÞQryÏe¤*gj*áƒh8¥ƒ* +ÚJj­ÌÛbBȝ¾Ý'Ÿ¾>%´þò¾­×_’ïoq²Ùkì‚r½UօB„шªéÇe¿~x|ÿ —×ïî?ß'ß XÞÝ'_>l6t÷õ‘Öô°~Lîß?}^?ÒÃÓãÃ×͏6ÈóUÒü¨”»‚aŽd²ª3{•îÅelâ»b[`¸]þ)ĎÜÌCJ$R–ôP4Д6­Q¢ÈŸÐ;N¯&ôëšü0‚iù‹ =mÖ×ú²YYd´/¤K¥zŒX3ˆÿOú¢ÐÕΕ +VÎLxK*§JCž†cnôÑɈ:—»„kĸ¡×ÿŽ««¯bsu@ ÚöG-z$§ç¿ï‰¹•;UUªÚM8Kpá ,‚H¡o+ٌ¤ ŒÿßòÕ3µ6}ÃÑ}C•Ë¨UǍÃzH…nþ«j–ºN +St”‰ÎÉÆAnId€FYꔓ-QcDúŒo®ióÇ)àâ}ëz¼Ñ©.z-¶ ÄJ˜ |giæ^Å)—?´*ÝWê·VBøÐøIÙe8˜êʶ ‚oïÀEjk-ø¬KðA²ge.K¶5úÀ¡÷Ù°­;¶ AÃñrBϲfµÐÅ çCO5m%Yt}d¯Ô‚•1S=ú×Q=߃Bž€b.-ÁåkÕüqËÉ+ûã‡U!,×$W©Âx1²˜utÕù£)vYæ»q´Pʽ€Khß`h4áx¦ÑLJσØ\%ŠBÀ–¼5ÀÅ@˜Ü4/eÕ0÷4i¯Ë½Ñ´idŽ¡ôMNÞF˜Æ±NU6æ7jMPaƒe§iÒ Èi¼i=h +wÓ"ž|­Úr‹hpº–šU 4f_FµhÒ½>/XObject<<>>>>>>endobj -409 0 obj<>stream -x}XÁrÛ6½û+¶¹ÔÈŒ%9’œCgÚNÓIgš¶‰›6iz€HPBL ZV¾¾o -Ñn'cG&ìîÛ÷vú|r^\Îéþ—ßÐ9þ=¿|NËËyMõÉTMi9£ù‚Ê{αèîï)°çbQ,èbµÄç~d/¿X>/.ÆÏ¿¿:yöò’fçtUãøÅrEW•œ‰'å颠7ºÑ*»!E¯õŽÞiŒ³ß\}ÂÎ šNÓγ٪˜aïéŸ[mi§a–÷iºI빚~óæÆÝî'äzO;ç¯ kn4ÞáïÒ}ÙSХבµ&e+Úª@Ñ¥¥ÆRÜj,k*6~NgÓy2ùF«æOç›êïØþSЯ¶Ôd"™08QMx+€À#‹ãԞO-UÓðºµ*¯'\Þ‡÷dÚÎù¨lÄFiã5~—JŽYêãºÒÙzBåMXÓef÷ü"¿(¦Å ²}»»˜›-!@dê¥ñÈâÞõdu©ÒiÕH¡)·wŽ¤“$ýƒnvìÜBÅ ›Ñj$ÌÙ``ÁÕìÂAœqëµÜ~ºS^E¸°ÞSåb˜Pc®¡Kï‹À_›‚æʃ~yý‚E¡9ˆ÷—¨è΋V}r~"*À0æ<“ÈntUÐ+ ±Ð3ʀ˜vˆÛÔ{om+li\×jèlí•-%Ïg‘@&ŽBTP…~O6èvŸ ¡<0={[F%՘ˆêÒ8‚Ú× -s\[lm6=@À* -{ÕmA¿p¦#ô¸ðÌPÂ@ðŸ{{½îNJ❓¤eÍ*‡YÉoö.׶¡äd -•™úgËb5¥ɏ³Å23}¼?›_&æ¼Am,CíuçuX)ê„<â:#IJ†ô]DÅÙS瀅¨Ü´(Bð‘!e£°ãÎå$  ¯5g¨U؉]½ .9Ôd4eXàÄ[.VìcPHÀì5x. ·ndè([̟dLUhÂà;‹ü®ûÍYmná WšVU¹~Î^?&t²‡­ŽŒ%I<‡N‡Ûî{qGåjÀ˜ÁÂ-m™vtâúƬKWiê»`ð_åvb𐲁0ñ%–Åd@^´v"¨ÜA¸FޘJt€ ÒIç\ÑÙ Àø¦ž´TЙÀ¿/Ú;9ᇒÆ">d1²ØXŸÒ§Õ™PÜt[…xS͂Û#L¡¤HpÏ,AVŽŦ4¡_ôà86†iÓwpÚÀ¹q¨~dm€FW\šÄÚùv”Èì:“¾”®EÞx)7Æ#ÖÂøÓY³â·#c‡ä¸?sÎþºN#¾Gu==žtûŸÂžNWV§R B$Emì‘ÀÕPH¸Iq$ÁÕqÇRÈzWY¬C¥Å¯Ì8YIÇTÓêÊ °¾d1i…6$”®Ñ3¾ ¯ì#¤Ðè"KvEô.ŒÐ˄åÎäQ©:fƒš@zÕ á¤$ >ÊU,w$«ÒŒRYÕ7®¹a! qxtïK,L£ç÷x÷¤CHòÄåµ³Œƒ['­TÀf…Šì<ªŽ«m£Qï;G˜‹`îãà¬ANü)í18FæÕeø(’oUóÀ6”+?sÐëÞ4ÆNïZ :XՅ-Z¿TSè›ýÈR…Q¨÷&l!cٙg‘j`hH¥(‘7'û®$q¦¥Ý)Yi"fªã†¸¼Lü#ºá ÅôCþ -ð2ôm«< S‡ë‚Ä1a_³üôaj¹B6\ jLñ‚ë(u¾… \LП0BÅêÛ8TŒF 04{T6ÕoTƒKw²lMdBûæSɸ¿°K8%ïMyh¦ãê%iáÃ%è anCáÜå« 8$³E¯˜…DƒÃXyÜZŒÜ–Æm¬áA‹ä™.ƒÓ4vÐ,ÖÐZ!ßpp%ô”¯¾ÁßC+O\ôÈ3-Û -Ð0äZh7‚=£ aî3õ¡0u2~‰zõ˜ËXp>“NyêM–~¼U-nd/ÒtMgßʇ)>ŒBæéIÇRüãËi5ÛÎr>˜÷FPÌq9¹åðËå×Ê­oJæ ¢‡‘q¹ŒC¸Q§#0q ÎóЫZ&ÉÏ=' ·Ž»KfÇωéáf‘hüìåb¸öå^Ã&ï¿282Ëf¸úåhGŽ%h¿J{W÷_7¬©rüÿ7ˋb¹Xᛠ´ÞيOùñêä÷“ї¨endstream +395 0 obj<>/XObject<<>>>>/Annots 236 0 R>>endobj +396 0 obj<>stream +x•Tێã6 }ÏWûÒ-0‘ï·ykN//ÝÝ ÐgٖcMlË#Éñ¤__Rv<‹`²@ u(òÔëÎgEï_ú>~’"¬A hv; + !J¡êñŽNÛ×·ßw‹!CByÈ¢ÕèàyBŸ Ë uÆJŠœùQÄ +ä%‹°0ÎÑ÷Š†E†ÞQâK²ÔÝÌÓÍ ‹c Œƒ%«µQ&D…”~AžÎÚ°(pXÄ,…ÄY†þ9ÝKºç¬+禋X˜¢Ïbmú‡9kÃâyP™닝±Aa€©SšsÖ‹ŠbÁ¯/a¿n›ƒ õž +”Ó:4ØÉ4Y¥p¨] }8TŸŸÁ³À;£~>¼ì¼§V÷=v+Jtÿü·m…Æ‘h„C% ð¡#-þS ÈÁâ¹±`|Ñò¬Þ.0¡Í#EĆE!P°1Xkíøèyó<³qñfJ½@’íþª0ò£`cïc€ùK6w4üõ&ÈÓ/_Ýõn5éJ4È,Ø ¬7jõ"*k<ùRš™o‘Ü)|ÁL·üÔÏ.“‹@I~ÄR©¡‘ÇêœE¹/¹µSj‘°á•`C?¡¢¥= ƒŽŽÝ¶ÒÊ³Ò'ì[«´­&û«"#½{™ÜÊÍ++Õ`¨Nf*{iáS/æQ3jq±“we¬Î†ÝJY徔ƒw–b&í«ª¨‡Õ²DÖJ©ÎQ3 kÁ 4Zõ[ùn€îÒR5/Óp*Q$J¯R½×ZO Æ=IaXkûî @¼8U ­š‰˜€ã ‡$µ+Vóêؓenÿ-ÎËJF’)-ràüIKƒmiþ0ìÌ»—L»]x/ •z¶¢Á:þY~2pƒ©ܽ÷è‹~s+«vSqFYk[&jÇþá"Ñòêâ֕ê.ÿ +¤å¤E3unÏI¤ª$RË-Ž+îB¿hÊK5Y¸¨ p6;ÁO()&Ñ wVj5ᦠåý¡æu’õ¾âȳ>œ*½À¨Æ©ã¢MÀU}»< VŠ¤ª±b¸öò(Ü[5K»©p¿òÛ¥Ø~ßóaâmÇwÒûÀôb½°ûõ©‹}ŸÅiFoÝíóg1ËÒc–õ·Ãîëî?T/?.endstream endobj -410 0 obj<>/XObject<<>>>>>>endobj -411 0 obj<>stream -x¥XïOãHýÎ_Q •&h±C$0§ûÀü`ig†…Ìhw uìNâÅq{Ýí„Üjÿ÷}UíN€»“NÃ@ätwU½zõªÚìÇ'ôô«šÑ1þ]œÑð¢O•¦é^Oõhا“% ì9?Ǟð {N16õÎã!ŸÅÔ;ÁGÙ}ãÄÍ/6€µ½Á«NχøÜÇYún´×½ÂÞ!¦°98ïÑ(•½Ç4J:ƒ¸Ó;=5Xìæšnu®•ÕoéªÒúßúpô;¶ŸR»x{ÔÆÐaíÔä¹YeÅ̯4«:´¨­£‰¦Ôš&kâ?f*ç§z©sSêÊnÝ¡²ÊLEΐVɜ -½‚ÿâKÌ+RÔħlû“zÐdkñX9‰ÕzbÒ5­æ†æÊÒÊT:…Y1™˜TSæ?ç -ž%¦.sñ(Uk+;æ*%EÉ\ p0l1B´@¼Ï×:Ïé 0û|P€øä5¶.5•ºH‚ìži۝fÚ6³ŠÊ¬ÔyVhÓeQ˜Z,0z0Yƒ£”c‹-ƒ…ñe°›NWSpW™›“„°ÈŠÚé`Rê^%M¢aŒ,´ÆýÁ¶Á– ŸÊë"©ôBNИ6rE½˜èŠÆÒÀxkdÒT´ÔÇ×äR¶N*@7×v|ˆ¯¼902Ð&™˜bšÍº8, -ÜêÄ°u{ó‰l©šf90\qø…F*A ð) žâ §Y‰Ç‡ÞØvðÁÞ«Át®§ 6ÁÙNª§ªÎ]¬¶ëY˜&3¸`áöùh¨Š²XÇHêÔ­2žƒÙÖ©"U9ׂ?ÚJ”l •øfÃøðˆ&õ¢¤º¤ÌY -YɊ)øbè2~ÇpóÌ“ëm@ü‚ë´ŸžôQ/gñ9þ‚¿Dþ¨Ò4šk•êêÏ_£K ÎFWÀ9úæSþ–Oý‹"`ÂQT˜¨4e]Ú¿¶AˆÂñC1ãÅU!¨lqH¼e¢˜¤»Ò«+ÄÑm¢ïfEªãr^=…ÐBâÍ•þ£Î*Þ7;î™÷ŠÒü=øÇïÝvþ‡àöàŒC•ýøÜ/¹ËàbÍDVœt²sSç)S®Ò“:ÃG5eLX!ƒ}NOLWY‘Ù9ȀlkVØ¿“ÝÄ,™sžÐï¿Ý/P^k (\ݦöU¨&Yž¹µð^ìã<«Ç‡1ݙ +Œ-Ôî DT),¨v¬™‰MX%ËÊ$ڂ­3œgr‘‡lCy_•þᦏ$څ*¨T3 OA_y4w‹|ƒB#ëaó¶Y·ãÌ͇+ïöT‰¦á(p7QNÏLµŽéöã姷Ñå×Ñ¿¾ÜÞùC½›d>FåOr[®ŸÁÌ F±$§#iaÕBIöÛÉC{0(‘ì‚Ð4ÜüZ¤'¸;-õD_Ë b ÛÛ¤kH¼À©†=ö'ÕNeH†‡}›¾鱯R얲F~÷SëýŠ"£ObŵÉ'nÁ«¶ˆŒ=žN?:²º°™ËÐÊæ:/å+vÿýOפÓ̙Š±Ânüòo¶í Ñ´3‰†*¯á3íH•à!š<2þdÇv9-¡ÕƒÞ¾ËÉÔSq³´ó`}×ä¦X_ÍØ+ðsA .OÜ{5 -)4£ÿ Gèíƒï‡íÍ-å’zñÍa¥7ýëAë¦8ÿP~À¿T˜xê ¦È΄P“\깕 ðaM'Ã~8iY³Îåæ"ŸõMiϝ+ßv»À}i×±©fÝƝoo﮿|v9G‘÷ª»C˜&ë;M˜µk­fÆ7„z6¹qA€{aÀÊÍ -NNULÆ@²‚Nþºl¡÷÷÷éÚ hVÔÏO‘;)÷çë‹'TÇ«åå—9Rt3]ɍy qé˜ï¥Åýlš÷©´Xò›©´0NcuóuÐÈÏ<ÄadH_tãøV· -\ôÃZhÞKA!CDdFâá”ÃX"s†Œ‰AE[§K»ï3»­1»öB4ÛöFjÖ2†£¹kÉÊärÐ ‹òüÀ; ·d‰Dâ”åý¯÷¿Ý÷ßcƒ˜>˜â#‘–²B$¥M1Xñ{øø·ø;êy%»xÒÇÄ©]ò"¦µW©Ð9ž 8+L—,/Œ¸G~ -m®ä§ã€ƒLÉ`”H OËãû;î|ÿ±7>ô£j«tÕ ÊÆ<(›¢ýS²tWßßhmjˆ¸pòÿ‹þ‹¿mÚÜZC‰áˆˆ†ûrãrTr1s¦Œr.J1Ÿ%è`:( ؉D²µ“òFWÐt0œ€Ïo?҆Xí ”|ï`G¸‰ᚗá†(w¯6 ‘3…Yóˆ5|u˜€Ûˆ|•ÍænCX?¶°c­tø0c t‹—X‚¡„Ç»^ˆ0¿9ò!ï;ñ3Ž/,Þ­ Îôö²–«-Vý÷Órlj¬”[Jj&J¿[ÂÕ°U7áBÔ?{ EBñ ^ð„Ê ˆeðV.íaºñãÖÎe„÷ŸÍJҋË@¶ÌRŽš‡C¡q…DÎnÊ3é3$V˜#]䧛Ÿ‘eMÁtÂÕ:«pÍoÎñ]„£láNòCъ_ðF‹Šâªš€Î ûÚ¼w¸22aw¯‚4wXŸá¿.Áj,Ä!Š‘ׂÐs#¢ví#QÕþÊSCççþ."5‘àÝ.*â°Àۊ¯\ôc‰Ò°M~ÙÏ:.ŁSô¢Ä]cSË»;¿ó ”–µÀÙÕU„È)˯Y¸«|Ke-´967Óó¦ôНOzg48à ë¯_7~6¡¡·æ×(¬†Ç¸Ú¦x_Õb˜¢ÏxMôÍ__كÓái<à=/í_𣏣½_öþ¼`ñ†endstream -endobj -412 0 obj<>/XObject<<>>>>>>endobj -413 0 obj<>stream -x­WÛnÛ8}ÏWÌb_’E$[¾;O›mt6½Ä-¶‹-Ñ6YTIÊNúõ{†”|KÒ»‹ N,‘Ù3gÎ ¿µãq—¶fNmüôÇ}Ž;d$͎ÿ(¡a‡ºJ—Ø3aOóÁ{â6 úI<¦~w÷©7ˆ“°o`póQ¯í÷q$õFCìëàןóÇä¨uÙ¦1Mf”Ľn‡XÐŒh’ymš¤ÇDË»Lʔuô+e2—N’6”.´¶Ïg3idá¨KIjFʑȍÙÉ{ì²'“/GmŠ„Ó°˜fÞÜãç+KQvVZiVҜ‰BK]ÙßӕÕ—©]‹Øêʤr¦Í\ƅtg-¼3Z»VxO¹ž«âiËߺÿÙº¼/µqZÝþuûùöoJ+ÃÑó‰­Ë% Ã<£ÎÐ㊠_jºz;h¢˜Ë°¸W/>&AVó\ÒT¹SREšWœÒ´¬ÚQ®–ÊɌœ&c•.° -,…ãÿÅÌI°½o3£—ôâÓuL“…²¤6ðwãÃKq'ÉV`[ÎVFäR ¥HïÄ\ÚSEFkåX#—øŠE³Êñ¦i5Çz>Œ—ñìÌŽÈ{‘ºü·š<ÔG§:“qý¬3ˆ{ìλpîLá8‘eŠ9³ÎT)³„HƒIŸ{rÂLÙöOÂVµRY…me.ãž–²È˜–SUópàI&Me®×1ÃT&P¹å8Øêõ–h[tŒN¥µaV çÃi]Ž)A43TnÔEî9°A܍“˜®4—KAïŒZéûzçFv÷I€áwR–ìR2—…4ˆm^)TŸ*$’ZВ[/dAeåìs‰†ày“HfeÉyÑáԆ§ ^ž?r$©ÓՀiá%Тh“´Ì¡1#¿VÊHϸÖå–ßkö’H=vNŸy2…Íí¦~‹Ad{ߛcš©Ü³ùFi7ßêÌØcl]‰ÛÃyKLŸu6ÃH!eÆÛ"V¤mI ùÒS. ZBìւ£Lã -‰I­9V§>mj~jLÞtCڏſßBxŠ]R…lã,œ2VK0××6¨‰E…¡ÌàžZV˳ý¨·R3‚„ƒx¯ÿ|qqu}±ø1Ý òË(—+™C}L67'ûƘ†ã¸3賡ç/ßüvÎ?N^½ýpý¯â4m=Z -ÐòôS¦Néc¡î£\Aì6TF)æߏõBсè( )B~Zk9 MªUáo¿°´uˆæ¾ó—çïdl&¾ÖFv:HÖóÜjˆöâŒVpV“kS?/9±ºüi¿³f}íü͉×ÓàáÆê ߯^ëÇjµ!úÓ´Šý{"úF¿zÖ·’W“7¯¹¬.ž‰/8t'ï]ÓýX÷=Ý©fÎ/n¢½^¨tA©®ò ŸE*ÕJL¡ŠÞü”û7^™ùÂfÞÕ-Š±W”´Ü ½™´j^ ùÙ -¦}7eý؍Š}Z·X£ñސoÒ¥€¬çÒSl×ÿº8UӅí» ë¶Åm}õæ2(s„î ïã…[>"pŠ:ŒØ§/±]aô'+ )÷W­ÐRY -9G~[ˆ£DëÄôW@HY>oŽ9¿¥¶V1È’0øf?sÇϺzsÒd¢!›Ÿh¶phÈu4ȧ‡tü†@nª¸ QûîŽg,#,¹@ƒ9§¾…¶°“‡fÒBPµY¿ v±k¥UF½v¯žM&!̽À©tø«O؂®Ä§pãH{Ã^<ąÙCßmó£‹ÉÑû£uQÛendstream -endobj -414 0 obj<>/XObject<<>>>>/Annots 146 0 R>>endobj -415 0 obj<>stream -xÕWMoÛF½ëW tH@ڐÔ¥Þš4N -$…k«A[ø²"WâÖ$W%—’õïûfɵ$ǁ{iÂ°LqgwfÞ¼y³þkŠå„Nõ–Bü̖3J–1Պ6ƒÈ½Š(‰i2§´ÄžF¼G„4BÓt‘à9ƯÛŠÅ«þ£7…K1ó¦S<ö¶!Mgs1éW¢‰HÎV 펿Xy&”Él*þüS(>êˆC¿ù0ˆ§ì;C1§’â9GÝ}+èvpþ«ÉٝVO9¹§>±(ŽEä_$6_ˆåWÑ¿]=ƒå›«)E­6Œö|‘Ð*s`‡´JƒëBÉFQš«ôžv…´S—ÔìTª7:¥ÊXՐ®È溡̤#Ò:š–r¹WÕwï*EÃëZïÍÃqH;™ÞË­®¶´V8 -å6õë՟ƒÆ9†ïÀØ\ÕÏøÒMÓªFÐ;SíUݨâ8‚• OfÉê؇csi] ÷•9„]îLmeeÙ/=õù˜Ù]ƒÔTV¦–8t³AnŠS£Rj¼×œ“5xÕeÝ'œJ¤{÷Zp6o®ÒÒq"J-¦œÚ]@…d‰åŽcvû -À¥º»n@¿Y"¿'<ü;3?ÃGös1C8ƒ“â¡KéÒà¾à50è±?ª¶\£à,ÿ©¥ÖÖÇ·zvGãè¡dš?ºÂ”«-Á?X+裪À;m©l1Ôܔk”›n<Û1¹Ý½WŽ¨›|=³Ï°á;Ã7q9a€‡8pÏaÜ4¸€ßÄïâ\]Ü5 -¾ø¸Ó…ÖÝq£ëڒŠ^úNîÉ äÖÍeAï‹êv–[Ÿ§’cà¨N@Ï‘E -?’ÜK]HŒÖçŠÀÙº”}WàúÀhº O½†’¸qÿ¢®ÿGó¥+ѷǜ㧯£›…ÁIúmÁ¿:w}ßEÉRL¢ÍçS1‰âödúQíUavh†Ï²j¥»“Œ½ý8 7ß^ Ã~òKúYèKw·àô¦ÉT$süĦ“ˆ_½_ ~ü áýðÆendstream -endobj -416 0 obj<>/XObject<<>>>>/Annots 149 0 R>>endobj -417 0 obj<>stream -xµWioÛ8ýž_1ȇFEcÚ²|(°MšÙm³ÙÄ=a  %Úb+‰ª(9ñþú}$e;¶st±X$0ds8Ǜ7‡~îµØ0 õG1£þºÃ.õ‡m*M÷|û“Oý6= -SÜ pgùaî°õPgÐdz°¾»Œ(\},eƒókÙ6䭝µFûT‹v;½'ÕúF÷õù^{Øbm¨ôY—R -:Îó-¡¸Ü¢¼<ä ÂjAî×)hõŸ´n#«=mwºløkAù½¡uv+úk8U#Ó¢`H·]<™È¶nžµhH£)ù¬´‘—>ëö4ŠlZ4 -=¢”ÿôrô}¯yÖvÒ^$ué~©ï{*O¶äŠ<ý–óðŸ‰BÌݍù¾1Ùp6í¾µ=Š¼ÛR+ NÊ{J…GRS º¾zðÁµ ¬J'¢ ®)¥(R™‰ˆøDÍ£sE%þqä _àèÃõ;âYdœkÁ©h×¥6#;•‰ ¼š$2L¤2ºQUŠ©*fÐù6ÔòF¦J¡F -cžÍ%jFÓB¥VJÛ«Tòb“„jp˜ƒfH~Ç@? cü£Y‡ÑŸ7Íö&|i÷Ä™,tyè{5¶žKš®€g󒪢˜ÏK!tŒ(Ä]®Šá[×å,.i. --Ì€ÏH¤y¹P…KU,6Í{ŒÆލ´\É$’ÙìQÍY§Þw™¿d4ŠEF3QZL|t#Ê*§TEU"Žœ¹ z6Ú]6M4Q8×Ôø; Ft”kQÀù#ž©l‘ªJÿ†C&¿Oô-gp—«L”GMœJ•MwN¡"¥Ûژތp—Ÿ_â­DÖ2a(E©¼#5Íæ"Qy*2Ä¢T¢mlȀ̠=ÍeÂKƒk‰:Òօjʘ.ŽßÓG©+žÐðääÕ+˃{,¼Q©®!ŒòbA·ªø±«æüòƒ³{H|ÎamºZÂÍy!9 4%•«ÉDh–¥ºb"ªvLæ"”SJÐsqh‰³Žy™”º6yUªXðH›Ðy‡u£½ÛZ÷Œd¨²é–œ-“-¥:Þºªã‘aÔ6šæÒ=ä>ñ"¿¸|‘C=L*K_Yj`¼st+K¿u¿´“½Û£;“›Ckp§£zK<Û=WÀ'® ¬Êhـ¶¢~˜ƒÞºüFÒ d'¦èX˜F®9¡`Á`[IS™OâN„U阀î•ñT,[v¸3U@Œ§y"êîñx±ÉL—àÃ靸„¦×y!çênG¾ÙÊùö™}a_¬l&o·ˆ.Å]yHbË ¿³[©7•x.Hí:÷ªÏº>Ÿò2ŒQW(6Óʶô]½9ùãÍùéÅÛmM Eùl›Y)x½傦‘àéx\[=Е›sãñçñøËxüuÓä.h'èϙºÅìàÑÂ0Ã啮«ç=[²à̸®f¸vïj£Q'Ւä_’5ÍÜI̊֘ƒn(cÌäU'Ƥ)ÕfNî©Ûôvn¢(æöl34t•@•èˆ«a‹¾N|2ã3Îà©ì±©lôÝ3o.Õåùî¿Îè.ÃV€&½Í]˜sc ²êþòp ë!¦¼Hi.9i?ËIÈP8ÝFm¬]ºÄJ-W;ïU. -L&ôR½Ð¥H1б»Ø*z+&4“ú“™ÔØbf˜z2û·«ÆèÿÏâQâ©U£ø…š -±´UEI¾ôïnßXÏ:zñ‚–óÌ<³¦™lr†eë¹؝Ž8¹ÇûíÌîÜÚª±Þ¶õ<õû}¼SÔëáµ`Ð3.»Ó[·`~Ï3¬ÆTÃïYàw©ÑoaÝ7[%]ÛuÙÆéRÜÒG·ýñN¿Ãúx ÀþyÝ;OG{íýÜ >/XObject<<>>>>/Annots 152 0 R>>endobj -419 0 obj<>stream -xÝWMsÛ6½ûWìøfF„DR")ŸÚ¤u.ÛÚJ›t<ãHPDB,Jf~})™ŠRw2½´c[¶ÅÅ~¼·û°úóbF–_š Ìðk±\@² ¡aP\ö­’¢²-ž™¡ÑáŜ!3ˆçK’™5U%VÁªÊ¢aŠ‹×¼QzâjO:É«Kª S%rÎkÙhÓ¤AÃ7å.}*€mkÝAΖiÙt.¡ âsÇ\¾jy•c9†Ô“’éæYϤºº–;fðX•LÀ†i›AÏ ¶˜nkØʼ­Ø•‹8ƒ¥aB¬zARü´d;þçÀϯjלWTHÑme«¾Ã§„\«=%®­ì°ÁôÕŸ5Rê©{™D¼…=®Ò¢&6:FµY÷C kSºÍèT¬Š+Àï¢5“E[-·Ø_ùĶ<¾ŸI¡ìD~ÝÁP¡SoHbúæ村‚a²Žâã ìSþ=Ž‰IG0Ã¥„\bôç‘ËGÕ@…v¨šÀÏ¡pƒ22€p‘† ºe§5Õ ßÉÇîÁ¢KØã‰oÏ$}ÃèÈÃû‡œ9è íµ‹kãã‰úìÚH$J„é¶c?š®ï93Šê´ÎšNŒ.»©è5îo%ë$ì·XBà¶æTŒQ?è×zÀiž£ˆU(ò ¿;ÃvnkŸfö:@Ã1 -Þx\›™2—&­ðšÍÑOÉ6œéØ#ÝÖ3ÓÕ´B ø<; ˜‹þpå!O«º¤~—7l÷£Òu;Ü—ãϋÄĄ>týiã[ºÑo -@£Nà·¨omþúù€Ϟ£¸-ät¢™C5ªïGiL°þqú•o5ë÷–£fË'Ë ðC‡É³z;őùSm?û_Wt»ÿ¸†­?ÃÕ?@…ƒ› %ð–fðóÝûqÿ ®È¾Äo»"ÿ…RªÇ~C{?íW’?šDÁâ$$ îâx—þâ®T¿«d«å[»’ýÁÞOfxÿ›Un­ ÛUÌ\þæV6c>Oæ$‰ñӍ1"ó֏«‹_/þaˆïendstream -endobj -420 0 obj<>/XObject<<>>>>>>endobj -421 0 obj<>stream -xÕVMoÛF½ëW |ˆ@ZI¤>{´¡šÀ­•6 +rInMî²»KÙʯï̒´$Ê®{ð¥@Pä|¾™÷–÷ÆlÂábRão¶šÁb€ô&þÑ„sˆ -ôY.ѧ½Ã|²L— ¼¦xëéÍl6eaóf²ÅÓLÅÆÍ¥‰2]lÕFAß&H›ËgmM's<ÂpyrRJ°œaþºÈ×J °‹¶ìàßK™!›·U'|¦Ãåò`ÚF½ÚôFë1¬`“À„MÃæˆãl¾„Mì1Ã&êD1hûh…«Ê÷›¿zcN4ÂwÛJæ1=­§0™P¨ak,|L4ÛdÒƒÌs0•‚ÚzÜX÷yåt&x,Ìi˜þà9ËH«¤c\Å]S2“ieę-"°n».¿ïZ3XKÅó|?éê"]îAï„—ysB#čÀ6•ˆ„µÜì!‘¹°à4µèêç±4"ršì´¤2he 4šÜ¥Ja»ïwã{žŠÏXc&F-bÁœM©Š+C!ªŽ}°x—ùjnŒÜéÇ}󒕅-!‰TÒI­|å(t,“½·/ëÌ x!¨£‚»ÈGjҶ͑ nÅÀO#C¸¨õ‹k#¸Ð¹ÀuqN+ŸØë -l)"JÄFMY¬¼Oi6ä¬+WV®õõ ¼WÄU'9š+ˆê\äKëŒÄd|› ø!KßׄHnÍOõvœP`ÌØ©à·›<‡4Žñ»gÁ÷G¶g?½=ª»ö2 þƱtêMá|rÍÏÖöåD§Áûˆ²VûBW6Ç1鶏š€G+Y§±ÌêÊD×-L 7’ -!À=é„´ r”@?O¿¢ÒÕcő]¢4ÆZ _-îbÝ*턥xG鉙×W©€_t -‰Ñ…÷©ËÇÍéՎØoòh½‚ .r‚ú? QJhs²²Ñquûá´h4 d„$¢«áöÐì¥l´D:n -ØIÖf¯m Jº°&>×¹ëLë™ft) wÄG»·N þ áç:ME R êˆóV ‘]÷,êÂĝßöŒïð<4Âf8jñXjãÐ×#O9:ˆ£2Yâ±T.›(J·G>4ŠsÚAŸÁ]ÿV O¯HÆ©NšX=Qú×ðÖ^ߢèݽg°¡PÆ_…O¨2F¨§Ÿƒäûw@ÿH¯éž^Pîs°ÿs!©[INQ8ýIÔ¸ZO,pH‘é—:7ÀM”Éîÿ-é` CVãöCe›dv:Ï6uMÆÓä}ÀaÑ0–·s¨îñr×WT”¸e‘FA‚¢ôø ñÒ¬*:­Zq¡°M¹ç´À0`…¡“ì0óšÑtJuÖª¬¶¹Œòý ´÷!ފèøq?ß ¿~COÁz¢úZëހ<ðté õ?"O¬aýéÛ珍î.›­,V,œÌ`>^±~£´6§|;‘“¨ÁgN»F½[ûábŒŸ’$Öð›?<¼žÀñ¿×ªDæÓŔ-ð¿-ã~8¥G7½_{ÿ)e‚dendstream -endobj -422 0 obj<>/XObject<<>>>>/Annots 157 0 R>>endobj -423 0 obj<>stream -xÕWÛnÛF}÷WL… Q‹©{€¢u«0ÐÄ©¥¤)` X‘+r’ËrIÛê×÷Ì.)Úr€´E^š2ŝÛ™93úódä-ÇÔ}”1ðºœÒ|P)iwâÛW>ÍÏ(Ìpg±Àöƒïx#šÆޒ&‹9žƒ‰7u—q…‡Fv:[t²·v:ö©,oܨõÇÞ¼•ÑğâêW ÂM‚îäÁ¯¸2úƒÎ•ÖkŸ]¿úådx -F ĕQ0eŸÜ·”Ö'KH‘,ñ2£Éh Q÷_nN†«%ùÚìÉÙ‘MɈ6aæ=ß÷è,S± ËõóÍgÈOÈ÷ü ˜C¾¿R¥©NÝá¬9ìS&¾H25ÒW%¢¢½®)7­”&I÷$ï -]V2±¤RÅIE7²4Jç¤òJ“ÈIfEµ§H•2¬t¹h¾ïÑu-%õ^Ö*TãJÄ2# ³»VÊT -Ãg…¿ˆXš‰­¾‘×Ï=Ú$2§²Î_8Å#ZrX¾74¦Þ¡ƒ(Œ(¬ËRæU«UàŽD]éDŠH–ôô)ñ·Pç;~ö†ü¤bdà¡ãƒÖÂÜZ‚ëH¤iuññ͹ç¤;Tc\`kŽp\||¨;$~Õ±Ê É[ëº åN—±|f(ÔY¡R¹eF7J1É7c† …;ÏtŠ¼\Úø» -xÉ«DkÈ·êB–¢bÌÞT2óèwÎzªãЫü;”M‹Iùw("ôñÿ¦lþIýÚVên)óMoúRŠJÿ¥Šgܦ¢$Q†‰º‘­E”îOmS‡"ÏuEµiÊ|úØl]¤ZØÖìj§Oht®“{¥ -΀þ\¢±s}k¨+nÜ?À%¹¾u|‚jÏD^‹œâ Yµ«›jÈÈeÂ|Ñ@íJv‡&92[ÔÛT…éÞ£÷m]ÛڐpÀæ*^%"%¡ù@n:³æ]ßpÒ¶ð¬eŸ®·AœÌ¸ƒñ¤íí LØ<5LFW‡"D¼%½sö•Î÷fÌg» -!qFª#eˆ€“ªøK¥2Ä©Û,áå)V̧6!±†’R×qb•¹V“W²0–3›ûG‰‚þH:æ—ÕæåŒäA0sºØ`ўtS×1ÌÓ>˜áƒð˜w†*‰!3Öêad[5¸<\…MÕ æނ—$ä:˜Íéaºìáa8 dˍf¤j}‘ë|ŸéÚ¸›ÿEo!Œ¹ÕeôH·ú¼5·bÉ™21šŸS4¤9ößX Ï_vi¾,¹9§åa7>ÌFŸË3–ºàI–j‹F·óÑV*ϕ¾Ë²Â3Nl»7 z‹JÿàzŸÌ'Þ|†ßf¬w<åW盓ßNþ±< cendstream -endobj -424 0 obj<>/XObject<<>>>>/Annots 164 0 R>>endobj -425 0 obj<>stream -x}T]Û6|÷¯˜Þ“ð)ú°-;oI›´}hÑ挤-ֲr钔/÷ï;¤å³´…aAäÎpwg‡ú{’&ë—‡mò·X/P®sXÁn’Å­ eŽb‰ª''%èå8IŠe^$sÌW%ßsþ#÷‚Êþϓy¾JÖX”Y’£Ç¼,’Õ¸êpŽÆb±â³GQ$ËqBWKòց1VΙûLœçi²¸Š^¯I%«¼ŠÆ”yÆó¾©ýífòêýY†ÍŽ,W%6uì;ŦšöF·ÞØV7x6ƒÅ¡S~gl?Cµ—ê~/¸‘^µÝ ¶æ ”[G±Ï\{ozxm|»{‘fZžpPÕ£j$ÁfߺÛÍçIŠ»¬ d›zêöfèjÔ­ÿnŒåKöÏØÏ»P öê(èU-ku3 -R‡”½zÖ¨t# x¥4ÃäÖ Íâœhߪ®‹…Á©^à¼ßN:©|Èüê}ú¢ÏK}ïêÖã1ÊÉ tq:C«yªC¯_0}S×ÿÁJNÈ52N Œâ®ãf»Ëd‘àÍ΋ÊýkRÂó’N"üÓ^4ئƾFoœE¸=KîNâm…ÐáЊXCéú$§:ržjÛɌ*p“ÂÅ]9ÃPè7–ç혦͠«Sü2É`ŽàŸ®uQÎ 5¾ê ÷Ãö3å~›b]k4þHþLþÂK) ëè†'Š½Ið–ÃxûXR««n  þ§´3©”çñ_÷pUÈùKýö4ä`bqQ$bð}´VgŽ¦sf†CЙJ ‡Zyªù«<9z78^ǹ¬ -ràž—©öÔPd -ë¹ä<i?ú2rÂ|jS9*©™agÃíb-ÈÃԉ`+yz¸µ͛•ë¤Èô×x~³íÑ|yÆr$á@{ý¢ô ºPËÝ}W¦ë“ G߆QªÐÆIøœŸ¦r¹¢kiÀb¶Þm&¿Oþ ”Œ¹endstream -endobj -426 0 obj<>/XObject<<>>>>/Annots 167 0 R>>endobj -427 0 obj<>stream -xVM“â6½ó+:›Ã0[ À|rI%©ÌÖV%“a³‡ƒ°Ûà`K^ɆŸ'ÙfÀ;™š¢Ê€¥Vw¿~¯[_zc±šÒóÃìhŒÏ|5§paJzÿjBa@ÓE9l–KØ´g#`³ŊfË¿'SÖÆne:_ˆéK+p%ÆØí~èM`6£ét"&”Ó$X‰Eó/£‡Þ嬆¡˜_¬úƒžMLÁ|~ö ŸÏëÞènEÁ˜Ö R[„KZÇ>¼‰ú¡ OE,K¦rÏô™·–Í#›Ûõ¿0›ÑdR› ƒ¥`Ø_c×±ÝEv¯«,¦-Så‰I–”±´%ÓrO,£=ÙRn3F4n}Þ³ª÷§j7 Â¿¦Dg™>º(,Ä ëbÓ0yÏ¥¦\°V!¯rGJÓÖèNËRu°JU¤•Ma­JÂO÷mI*Ø䩵©VThr‹³ŒtU†6}i)-i¯\ªS×sš3֕‡¨@rßln¿kö ¸|Lè¤+œðÈí¥Ú1°P§r[ÓˆáÖHXbU9”¥ ËêÊDL~ý…’4cdkïdt7¦•«ÂD̦ ƒ¹Xâ>©$Öì= ‹8¡o‘ ò½ñHŽÓðbý†Ò¤YÄÛ˜±U7(–6TÀ¸6·×Ŷ~Cïßsà{øv¬Ø8òÔ& ·çK¹Î,UàÔ¸V2»>º?xÝ0æGÎ4Š÷?Ö×^/¸rí?‘_ÞâøÞ <;›QÇøõ8Só“Ø—y7?’U©sT8’Yvî`DÙáLK'À%*äD÷”Z”ߘ.κF…IõÓɁç_¼áöD¦RÊÑô]í`ÞVѓÆ<Þ l½O! K²É©U©åBzF”Ò츤¸‚X5Å\0@RQ -%yºçLzk¡>vêÌÈF&- Ö¿º´öÓ_ÚVNå C«%CØñ?‚˜;^#;)y‘Öў©øáþ“ËÃiª“‡¨™þuAŽíAË8&ÅÇZî…«Ð™ÖŠ 73§Lû·RïqÍÇ÷@(N G¥6'¯^·zÁåƋ ¤Ýç@¬§y•–/›Û.ÿîù©DÀ½ͪi\–£sŸ¬Üjô3ߍ]þ¨‰ P -Ëå÷„–Wwk‰"Ãs‹l~Ýçn“§ÐENommg°¯sy©%‹¾%Åu™ª"Ó2FÐM7rŸ‡/Æeÿº–×›üN¿iÓ?¢Ñ‘Ðf·¹õ݀•ŸBuC×".«ƒœ -€ñ'?±ÑUAG“ú™Ø-Èïõ(Œ}У»E+Dºÿm}@ŸÐT}Í´sE9Ka¡".6acœ ý ùŠ¸î…|ÔiüÒXtõµzÐ »™ÑÀÖ©±Á֗ÜS¥éÓN‚˜Ènº9•ÂEÂÍ\+h åÕ6K£ìD…vB®)ó|ƒ€æíIEÏþ)s— -$i”Êì|™¨QY^ÜS 1Ýt|åf3 g"\àVçöMCwÈÏëÞ½ÿLX>endstream -endobj -428 0 obj<>/XObject<<>>>>/Annots 194 0 R>>endobj -429 0 obj<>stream -xµWÛnã6}ÏWL_ -Hdëâ[¢Ø-ºm_ºÛ$hQ @A[”͍$º¢oþ¾g†”%{“´}è^Œ0CgÎÌ9ÿu5‹Ö) ͎fø;_Ïi¹N¨ÑT\Åò«˜– ¥ ÚV83æÓŸ‰f´˜Åъ²Õ?'ø/g‡]1ï¿ýá*^,£˜æÙ:ZPEI²8­Jºc×4OQƶeŠ=~Ŷd±æ½1ïuEó°ëh]Qš"§‘u¼†5“ÄS«üóð)Kbª„ãW|hFdÅ©V'sÜçWl¯as̃5›%È0ÏÅq–1p~ÅgÇ늲ùò´W<¯4c@!]¿bëx ë<>íëh +*±Ÿ­a]­¢åØ:ZÁ$å˜% -‰jÉ8$ËP9 ›„•Ü;ZÃ3­£5¬é÷zO>£aÍ1sOŒ¬£5¬ë¢¬Œz2OÁE]—sÜ##®]:OÐW~Å7ò©x¹B§Ø°ö}KÍd!é#Áe ܎j¯g|#/ؖ¢5æ½ÍwÞ`“F çÒUŒ8N¶ >ƒtA–"âÁ6,aCÝkŸ´“ð"ú·÷WÓwkJft_€Ñ‹åŠîs¡1~³¬"úÎÖ­Ú¶¦ÞQ»×”ëG]ڃnÜ5½ívt«¶«ªó¯î?^Íè&ÉàdòN«¶ßoõ_v­cãô]FqìïºIMlüMÓ£*;MO¶k¨Ð:ߨíCD?ÕTàæk:jèFùD¶&ÓRkÉT‡Æ>júИGûé‰p5,Ž¶¶.Ì®kTklяöˆh›k:”Z9Mµmu1fžânN©°eiœàÞÔ-òr–¯Üªšø“Kdt4í^ Ø r݁ÿÚgµFo„¬Ò ‚çUGôƒnéÎïü<}&ãdÜå:URçW†!øGpMW‘j%ŠnBb't‡Í[ ;ŸÚi *¹å-Æqµ„!vÓê\B—]òÑ»Dýzpöm{øz:urÙé¨Öí´mPÝL¿Ý5¶;üiòobüY} Ôóoùù<Ú>n Ö$ý¦ ْB‹Ø¥ë”è¨Ë­­497nÛ9ǐ›I8t·ÖçîûÈ'?ª”)¹š¥q°õLÐS{‹Ï;šTé¬øa àI!Ñ:ØÄly¦ÖI˜À¤x¦ÕC­?øFl„4¸®¤Íiû"0c‚$Ë'Wϖ "E »=qoà …"ü?EäÆ«s”OØ £R¾Õh ƒe̝=±­Rm,(+ÐLãÀ÷Ê1‘|£UΩklÛT¦ES -•í<½ùˆÊsÃlVåea˜« †ìj큛è•Öð70ª™W¨UÛ£7#°O6TýVÃOáç¬AIÀÒ05ÖAì%¶0LTºæ• ç.òæ´¸‚þ¾ò2ÿÓë)Ïeº`¥ýòü%}¡R¯a—ÞŸ7¹dú^2}#´s7·¾Õ¡X…—1 ¢ç §IŒTð*½îJ­@Kz¤®ÑÛµÝ2v¦R;°Bvùqݔ ¨Î½2©ó[>óQb阰‘u 4/ƒ0}‡¡[ÆÅI® Օmä…ćױ0%d(žß†‡iÜcÚW¢bÚ¿X¹QL¡„Çã1:øQ3Â4 Χ/ՉÞ3—Àƒ¹ Þz/¨0, ´±ö¡RͳÝc¸„]hάçù¢\1L#Ead([¤ -sÿÂðü+ †|Ü ¸‚X°ôsˆ…’ùñ9'ãÀØù@í«<Ê2R⥀è¨GÌ]2Qx Û9w¨C_y€ÜeF’ø§ÑFdUÎ!úsl‰37î¨núíçÛQãÙOxˆJ°ãñéïÜGO‰Ðæ%ß4àæÜ:qùˆóRûó=§è‘WÃW!|ãã/^ÿõûV¯‘½n -§²e-+|›ƒÃT¦¸ïï¯~¹úS5endstream -endobj -430 0 obj<>/XObject<<>>>>/Annots 197 0 R>>endobj -431 0 obj<>stream -x]RM›0½ó+¦·TJ &„•ªJÛ6=UmS.=U®‚Wfm“tÿ}gP¢m -b,†7óޛá9ÉD³…×àÑ½kvP59x„>‘KJB•Ã¶}¢šŒ@$‡Ãç$/*‘A™—OPµ×7 ?þÁ/EÌÁhYŠŠš+sz®Ç6I÷ È -ڞhËZBÛ-\´zU‹€¯q@ÿ¶}"d’ŒÜä•( »Ú;j|Ç(0!ÌÖÐ#Zè="Ds c@8)cÍxkB ZÔÃh´²öÌÑcˆØ1ÚjÙÁ„n²—ÁÁńZ± -â–[rBÜڍћßs\h˜bòî uEî” TˆV»‚ žÑº‰XÅøéfÐj„Þ!îŒþlð®§ö?Âoޜݟ—G«X띣5¹ÐvînI„̙ǡâÃÒé~‘´˜ 1NiÜì5öÎQŒS?z7O¿L÷NÒUß·¸ív%8ŸîëëndՈ­ÜA½Œèª>ތÃ5Îj1¶¹A7UÖð>/XObject<<>>>>/Annots 220 0 R>>endobj -433 0 obj<>stream -x¥X]oÛ:}ϯ˜Ç\ÀQôáOt±X·Û´Yô¶ÙXÙ¢@_h‰²¹‘D]‘Š¯ÿýž¡dKVӋ‹ †)ΐ3gfΌüǕï­"ê?êùø›­f´X…TKÊ®÷( EHќ’:>„ø#àÇWax3šO—Þ’ -HͽE·Êi3wJ|‡Çw¬¼)M— |ñßÞµ˜òÃiàÍqPèûç4\c7Zya'ëvkì.|ўävk˜èóµý.ÍBÜ:6(šáaä )(X°H»âC‡k\F|Œ“åÝxœ¤ šú‘ v‡kìÎؙ. \ÀE†æ äV|ò»óóîtB·ßeg8"!4go¹E‹Bˆ@6ÃÕü,êÜA0" -–úÛ®œî` g罬Û¬}vg ;Xcw5ƒ[ƒÝÁÎFs/ìÎ6ʁ—våLž2K¾ á™3ànáöú%îôç9ï¹ äpâý6¾º½[Ašâ y?_,)N]²ãIr½òè¡V/úÏ#½ÓÕ±V»½Ð'•ÈÒHeJ•±º>þÿÁÉ =è&\âú8½>«Ñ÷ppŠþ i{<ŸýOù"s]ÉÚP{JÍtý7^Ãøa¢ ®Ó³Æ?ªÖ@O×»Ka§ÆÂÿѺ9Ѕu]H2º©I‰N%)C[adJºlŒìV«[¾.uy,tc€KÊv3ÿjÊçmc,Öº/Ÿ:›è&àÄčy‹]JM =²{Ù7?yL>?ÑYÊZäôÐl¡püҍk¯]¯P¦è®`pÉÊ ¼×•|º 9ƒ t -,\ÎjÉ0dö jù†Žº¡D” ¨Ñ­Õ¶±@Ʋ7·º¦B§*;òƒ³Ÿ C:û5‡F˜tù4roB/R!ᄄ¡Š±0{Äø7ºc«7Õt§a°w¸°£]ã=\¬j½«EÁîJI•î¨=’_„e¯*Ïi+©12kò Á}úzüòÓúó7úº~|\Ž¿½¤ÝëƎÜAj¶§ª¢Ê쪵(í‘ñùýý㻏Ð^¿½ÿt#àyw~¿ÙÐݗGZÓÃú1¾÷ôiýHO_6ï=ÚH—%ðé”FÿOÞP悈”J+TŽd=ìU²glÄ ˆmŽFXëâ/av)>ù>[Q,ᶤ‡\ ¨nhÓ(dOùz«Áå„~_“Aoüńž6ëqȾ!  ÍSڋ‰LL¤z”UY9 ;~ä†Û»_­¥^÷D=…]“Èu¹s! }½!•Q©Aƒ‡š=³zÁÉ°>/3u$>H܎4þñŽ…€oG«¯REèýœÄ;ª¸oóy+wª,U¹›pb (˓»?r4(´PJ; FgÛYôû5ŠìuN½”wó3úàDfàºÒµ+ýKñóñݏ‹Ô ­R*Dyä:g§\[®ÐJ€:^¢Î”Š£ã¶ƒÜ’HÁJV à8Ÿ•ÉÖ"yƓq¿s‚âÌâXÈêDçm¿0Œ*êÈíƒÙR\j²/Ս;£\ñŸð•­­V£ JÓ y ÖÞ¡6¨©F ªM¨˜Ìv¨š¶µ>°íí|²©Ž|0hńžeeI¾èü…¢§B¶)…•ù±5ígaíÙ)U)—ˆGÿ91¸ç{`ñžÂ/ZéE„ú~Íî+óý7‡V. "S‰ùeDû¨e.Ѩ/·ÏñØ¥TÈ a°û•œºƒ¾±hMÜßÙ6èñÜÔfć‡O—[g/N¼,ò\­YS#F5hۍK…,-êfd¹f3Îč¦•šúW‘§@à­¨­«U¢ p]# /Mé¡B/«‘Gé¹)·½þ<5\ê \@®¶Ý…Û¢mà˵V6Åžèld}%57dw7w¤¨G›ì¥áÆsn "¯¥HÀ¹rMf+JŒK¦- ÁÕXš -“ àQ…ØÉ6Ù9<‚2U#»ºÉbt9¿®nšŠž1¸*áÞÏ#²ÔXž  y¤$×åЏŠÀ\WÈpԕ|® -e9¡PMƒ6ے&ÁôçøÇ·^LSÕÀY.ÿTܑ1ßn9@'S»¦¥¼ Œ»ëF3•´cÅ°ÊS—§žŽf&3.ë‘ÿìe‡ ¿¢záM€®}Q´˜Üýqná4uƒQú2 úäé§õK‰sšP¥’g$ g(íž܆픦¶©]ŠòþiTM…©3غî{ª°„2rz\™ÂYMð tDšrÚs¸´¬·½”ʤÀõÒ\ÊôÖ·£[vÇWàÁ½¦É]wq£ÐMß\âÈ¥.-á+º ׄðÂÖ2ä™QÖÍ/í”»èönÙ¿tÍ#ü áæÿÓù¿ðÚ6Åo‹ùoМúìãûøêßWÿeçƒendstream -endobj -434 0 obj<>/XObject<<>>>>/Annots 249 0 R>>endobj -435 0 obj<>stream -x¥Vßo£8~Ï_1ڗëICì۞t¹/·{tÏLp˜Ú&4÷×ßØÒF¥·Õªdç›o>û´òIÂõ¡àãß&ÝÀ6¥ 8”«À} -`K!Œ!o0ÆÇEöØÇß¿­ALт?Å÷hÕðà|›4 [ë£1 pwk;˜b4úâ„Ä°q–õ…%›‹Ý@¸µ9®^g…!¡62IgÍ»Rˆ¾(²›8crE©?‚‰løh;ØnÜÝFøŽœ5ûBêÒÑÀ®‰œ5û|JRWD„P"gM¾pba¶ÀãFkö…Á¥„ׄΚ|4I.¤¥$Ñš}›ëÂ=Óˤβ¾_ö/ºãZ„õv)Pö%62Þ&°/\÷ðK~ø8Vkùóþqåí"äs\»¦ ‚Ûw™Š+CÉos®µhað—,A´¿kFÂW%Nòù ½æJ¶ވá {!…5ݒ߸}eL÷Ùó†a ÝO¤:x¯£§bîîÑ̉~— ‡Ž8y½Ü)Ó©yMSBãÍ;‰Jöô}Év_¾} –½Êy‰¥pÒrãuJ>òÜhOv㖤\¶¥8|Cž­3¦yáz?Š¢d9'3ò¦GdT߶¢=¸ªL%´ÕÍ Õ…XIeòÞ,aâI)™Žt#op+'–![ýítŸ5ÂÀ§FhÍõ'‹ÌŠ­à'^Ë%ý!OšÜj ?ˆu&Zï$ø£íIH¸Q"[ƗKY»“Wö-ˆ‚3 ¥’Í̯;s ßê°%è±oöŖ–ËÆ«ŒÇ[3פ2M½ ¥{Dü¹«YË,¯PÉ.qÀðÞ@4…ãO±ü¨Žq&ü ><:í’JDËjøÃN&>endobj -437 0 obj<>endobj -438 0 obj<>endobj -439 0 obj<>endobj -440 0 obj<>endobj -441 0 obj<>endobj -442 0 obj<>endobj -443 0 obj<>endobj -444 0 obj<>endobj -445 0 obj<>endobj -446 0 obj<>endobj -447 0 obj<>endobj -448 0 obj<>endobj -449 0 obj<>endobj -450 0 obj<>endobj -451 0 obj<>endobj -452 0 obj<>endobj -453 0 obj<>endobj -454 0 obj<>endobj -455 0 obj<>endobj -456 0 obj<>endobj -457 0 obj<>endobj -458 0 obj<>endobj -459 0 obj<>endobj -460 0 obj<>endobj -461 0 obj<>endobj -462 0 obj<>endobj -463 0 obj<>endobj -464 0 obj<>endobj -465 0 obj<>endobj -466 0 obj<>endobj -467 0 obj<>endobj -468 0 obj<>endobj -469 0 obj<>endobj -470 0 obj<>endobj -471 0 obj<>endobj -472 0 obj<>endobj -473 0 obj<>endobj -474 0 obj<>endobj -475 0 obj<>endobj -476 0 obj<>endobj -477 0 obj<>endobj -478 0 obj<>endobj -479 0 obj<>endobj -480 0 obj<>endobj -481 0 obj<>endobj -482 0 obj<>endobj -483 0 obj<>endobj -484 0 obj<>endobj -485 0 obj<>endobj -486 0 obj<>endobj -487 0 obj<>endobj -488 0 obj<>endobj -489 0 obj<>endobj -490 0 obj<>endobj -491 0 obj<>endobj -492 0 obj<>endobj -493 0 obj<>endobj -494 0 obj<>endobj -495 0 obj<>endobj -496 0 obj<>endobj -497 0 obj<>endobj -498 0 obj<>endobj -499 0 obj<>endobj -500 0 obj<>endobj -501 0 obj<>endobj -502 0 obj<>endobj -503 0 obj<>endobj -504 0 obj<>endobj -505 0 obj<>endobj -506 0 obj<>endobj -507 0 obj<>endobj -508 0 obj<>endobj -509 0 obj<>endobj -510 0 obj<>endobj -511 0 obj<>endobj -512 0 obj<>endobj -513 0 obj<>endobj -514 0 obj<>endobj -515 0 obj<>endobj -516 0 obj<>endobj -517 0 obj<>endobj -518 0 obj<>endobj -519 0 obj<>endobj -520 0 obj<>endobj -521 0 obj<>endobj -522 0 obj<>endobj -523 0 obj<>endobj -524 0 obj<>endobj -525 0 obj<>endobj -526 0 obj<>endobj -527 0 obj<>1<>4<>5<>7<>11<>30<>31<>40<>41<>43<>44<>]>>>>endobj +397 0 obj<>endobj +398 0 obj<>endobj +399 0 obj<>endobj +400 0 obj<>endobj +401 0 obj<>endobj +402 0 obj<>endobj +403 0 obj<>endobj +404 0 obj<>endobj +405 0 obj<>endobj +406 0 obj<>endobj +407 0 obj<>endobj +408 0 obj<>endobj +409 0 obj<>endobj +410 0 obj<>endobj +411 0 obj<>endobj +412 0 obj<>endobj +413 0 obj<>endobj +414 0 obj<>endobj +415 0 obj<>endobj +416 0 obj<>endobj +417 0 obj<>endobj +418 0 obj<>endobj +419 0 obj<>endobj +420 0 obj<>endobj +421 0 obj<>endobj +422 0 obj<>endobj +423 0 obj<>endobj +424 0 obj<>endobj +425 0 obj<>endobj +426 0 obj<>endobj +427 0 obj<>endobj +428 0 obj<>endobj +429 0 obj<>endobj +430 0 obj<>endobj +431 0 obj<>endobj +432 0 obj<>endobj +433 0 obj<>endobj +434 0 obj<>endobj +435 0 obj<>endobj +436 0 obj<>endobj +437 0 obj<>endobj +438 0 obj<>endobj +439 0 obj<>endobj +440 0 obj<>endobj +441 0 obj<>endobj +442 0 obj<>endobj +443 0 obj<>endobj +444 0 obj<>endobj +445 0 obj<>endobj +446 0 obj<>endobj +447 0 obj<>endobj +448 0 obj<>endobj +449 0 obj<>endobj +450 0 obj<>endobj +451 0 obj<>endobj +452 0 obj<>endobj +453 0 obj<>endobj +454 0 obj<>endobj +455 0 obj<>endobj +456 0 obj<>endobj +457 0 obj<>endobj +458 0 obj<>endobj +459 0 obj<>endobj +460 0 obj<>endobj +461 0 obj<>endobj +462 0 obj<>endobj +463 0 obj<>endobj +464 0 obj<>endobj +465 0 obj<>endobj +466 0 obj<>endobj +467 0 obj<>endobj +468 0 obj<>endobj +469 0 obj<>endobj +470 0 obj<>endobj +471 0 obj<>endobj +472 0 obj<>endobj +473 0 obj<>endobj +474 0 obj<>endobj +475 0 obj<>endobj +476 0 obj<>endobj +477 0 obj<>endobj +478 0 obj<>endobj +479 0 obj<>endobj +480 0 obj<>endobj +481 0 obj<>endobj +482 0 obj<>endobj +483 0 obj<>endobj +484 0 obj<>endobj +485 0 obj<>endobj +486 0 obj<>endobj +487 0 obj<>endobj +488 0 obj<>1<>3<>4<>5<>8<>21<>22<>28<>29<>30<>31<>]>>>>endobj xref -0 528 +0 489 0000000000 65535 f 0000000015 00000 n -0000000247 00000 n -0000001813 00000 n -0000001887 00000 n -0000001969 00000 n -0000002047 00000 n -0000002124 00000 n -0000002203 00000 n -0000002279 00000 n -0000002360 00000 n -0000002419 00000 n -0000002520 00000 n -0000002573 00000 n -0000002658 00000 n -0000002729 00000 n -0000002814 00000 n -0000002915 00000 n -0000002959 00000 n -0000003060 00000 n -0000003162 00000 n -0000003263 00000 n -0000003365 00000 n -0000003467 00000 n -0000003569 00000 n -0000003670 00000 n -0000003772 00000 n -0000003874 00000 n -0000003976 00000 n -0000004077 00000 n -0000004179 00000 n -0000004281 00000 n -0000004383 00000 n -0000004485 00000 n -0000004587 00000 n -0000004689 00000 n -0000004791 00000 n -0000004893 00000 n -0000004995 00000 n -0000005097 00000 n -0000005199 00000 n -0000005301 00000 n -0000005403 00000 n -0000005505 00000 n -0000005607 00000 n -0000005709 00000 n -0000005811 00000 n -0000005913 00000 n -0000006015 00000 n -0000006117 00000 n -0000006219 00000 n -0000006321 00000 n -0000006423 00000 n -0000006525 00000 n -0000006627 00000 n -0000006729 00000 n -0000006831 00000 n -0000006933 00000 n -0000007035 00000 n -0000007137 00000 n -0000007239 00000 n -0000007340 00000 n -0000007440 00000 n -0000007540 00000 n -0000007871 00000 n -0000007972 00000 n -0000008074 00000 n -0000008176 00000 n -0000008278 00000 n -0000008380 00000 n -0000008482 00000 n -0000008584 00000 n -0000008686 00000 n -0000008788 00000 n -0000008890 00000 n -0000008992 00000 n -0000009094 00000 n -0000009196 00000 n -0000009297 00000 n -0000009399 00000 n -0000009501 00000 n -0000009602 00000 n -0000009704 00000 n -0000009806 00000 n -0000009908 00000 n -0000010010 00000 n -0000010112 00000 n -0000010214 00000 n -0000010316 00000 n -0000010418 00000 n -0000010520 00000 n -0000010622 00000 n -0000010724 00000 n -0000010826 00000 n -0000010928 00000 n -0000011030 00000 n -0000011132 00000 n -0000011234 00000 n -0000011336 00000 n -0000011437 00000 n -0000011538 00000 n -0000011641 00000 n -0000011744 00000 n -0000011847 00000 n -0000011950 00000 n -0000012053 00000 n -0000012362 00000 n -0000012464 00000 n -0000012567 00000 n -0000012670 00000 n -0000012772 00000 n -0000012821 00000 n -0000012876 00000 n -0000012963 00000 n -0000013024 00000 n -0000013111 00000 n -0000013144 00000 n -0000013199 00000 n -0000013286 00000 n -0000013359 00000 n -0000013446 00000 n -0000013519 00000 n -0000013605 00000 n -0000013691 00000 n -0000013777 00000 n -0000013879 00000 n -0000013981 00000 n -0000014066 00000 n -0000014131 00000 n -0000014221 00000 n -0000014308 00000 n -0000014333 00000 n -0000014387 00000 n -0000014474 00000 n -0000014550 00000 n -0000014636 00000 n -0000014704 00000 n -0000014791 00000 n +0000000244 00000 n +0000001810 00000 n +0000001884 00000 n +0000001960 00000 n +0000002041 00000 n +0000002125 00000 n +0000002183 00000 n +0000002282 00000 n +0000002334 00000 n +0000002418 00000 n +0000002489 00000 n +0000002574 00000 n +0000002676 00000 n +0000002719 00000 n +0000002820 00000 n +0000002922 00000 n +0000003023 00000 n +0000003125 00000 n +0000003227 00000 n +0000003329 00000 n +0000003430 00000 n +0000003532 00000 n +0000003634 00000 n +0000003736 00000 n +0000003837 00000 n +0000003939 00000 n +0000004041 00000 n +0000004143 00000 n +0000004245 00000 n +0000004347 00000 n +0000004449 00000 n +0000004551 00000 n +0000004653 00000 n +0000004755 00000 n +0000004857 00000 n +0000004959 00000 n +0000005061 00000 n +0000005163 00000 n +0000005265 00000 n +0000005367 00000 n +0000005469 00000 n +0000005571 00000 n +0000005673 00000 n +0000005775 00000 n +0000005877 00000 n +0000005979 00000 n +0000006081 00000 n +0000006183 00000 n +0000006285 00000 n +0000006387 00000 n +0000006489 00000 n +0000006591 00000 n +0000006693 00000 n +0000006795 00000 n +0000006897 00000 n +0000006999 00000 n +0000007101 00000 n +0000007203 00000 n +0000007305 00000 n +0000007407 00000 n +0000007509 00000 n +0000007611 00000 n +0000007713 00000 n +0000007815 00000 n +0000007917 00000 n +0000008019 00000 n +0000008121 00000 n +0000008223 00000 n +0000008325 00000 n +0000008427 00000 n +0000008529 00000 n +0000008630 00000 n +0000008732 00000 n +0000008833 00000 n +0000009269 00000 n +0000009370 00000 n +0000009472 00000 n +0000009574 00000 n +0000009676 00000 n +0000009778 00000 n +0000009880 00000 n +0000009982 00000 n +0000010084 00000 n +0000010186 00000 n +0000010288 00000 n +0000010390 00000 n +0000010492 00000 n +0000010594 00000 n +0000010696 00000 n +0000010798 00000 n +0000010900 00000 n +0000011002 00000 n +0000011104 00000 n +0000011205 00000 n +0000011306 00000 n +0000011408 00000 n +0000011510 00000 n +0000011612 00000 n +0000011714 00000 n +0000011817 00000 n +0000011919 00000 n +0000012022 00000 n +0000012125 00000 n +0000012227 00000 n +0000012452 00000 n +0000012513 00000 n +0000012600 00000 n +0000012625 00000 n +0000012680 00000 n +0000012767 00000 n +0000012840 00000 n +0000012927 00000 n +0000013013 00000 n +0000013100 00000 n +0000013203 00000 n +0000013305 00000 n +0000013392 00000 n +0000013494 00000 n +0000013581 00000 n +0000013671 00000 n +0000013758 00000 n +0000013831 00000 n +0000013885 00000 n +0000013972 00000 n +0000014048 00000 n +0000014135 00000 n +0000014203 00000 n +0000014290 00000 n +0000014331 00000 n +0000014418 00000 n +0000014505 00000 n +0000014530 00000 n +0000014629 00000 n +0000014716 00000 n +0000014741 00000 n 0000014832 00000 n 0000014919 00000 n -0000015006 00000 n -0000015031 00000 n -0000015130 00000 n -0000015217 00000 n -0000015242 00000 n -0000015333 00000 n -0000015420 00000 n -0000015445 00000 n -0000015503 00000 n -0000015590 00000 n -0000015615 00000 n -0000015669 00000 n -0000015756 00000 n -0000015781 00000 n -0000015850 00000 n -0000015937 00000 n -0000016037 00000 n -0000016124 00000 n -0000016157 00000 n -0000016233 00000 n -0000016320 00000 n -0000016396 00000 n -0000016482 00000 n -0000016573 00000 n -0000016660 00000 n -0000016701 00000 n -0000016756 00000 n -0000016843 00000 n -0000016868 00000 n -0000016923 00000 n -0000017010 00000 n -0000017100 00000 n -0000017186 00000 n -0000017274 00000 n -0000017361 00000 n +0000014977 00000 n +0000015064 00000 n +0000015097 00000 n +0000015151 00000 n +0000015238 00000 n +0000015263 00000 n +0000015332 00000 n +0000015419 00000 n +0000015519 00000 n +0000015606 00000 n +0000015682 00000 n +0000015769 00000 n +0000015860 00000 n +0000015947 00000 n +0000015996 00000 n +0000016051 00000 n +0000016138 00000 n +0000016163 00000 n +0000016253 00000 n +0000016340 00000 n +0000016430 00000 n +0000016517 00000 n +0000016605 00000 n +0000016692 00000 n +0000016782 00000 n +0000016869 00000 n +0000016968 00000 n +0000017055 00000 n +0000017154 00000 n +0000017239 00000 n 0000017451 00000 n -0000017537 00000 n -0000017636 00000 n -0000017723 00000 n -0000017935 00000 n -0000018022 00000 n -0000018114 00000 n -0000018201 00000 n -0000018285 00000 n -0000018372 00000 n -0000018462 00000 n -0000018549 00000 n -0000018746 00000 n -0000018832 00000 n -0000018923 00000 n -0000019008 00000 n -0000019099 00000 n -0000019184 00000 n -0000019246 00000 n -0000019331 00000 n -0000019452 00000 n -0000019527 00000 n -0000019614 00000 n -0000019639 00000 n -0000019700 00000 n -0000019787 00000 n -0000019855 00000 n -0000019942 00000 n -0000020009 00000 n -0000020096 00000 n -0000020155 00000 n -0000020242 00000 n -0000020321 00000 n -0000020408 00000 n -0000020466 00000 n -0000020553 00000 n -0000020611 00000 n -0000020697 00000 n -0000020765 00000 n -0000020852 00000 n -0000020919 00000 n -0000021006 00000 n -0000021095 00000 n +0000017538 00000 n +0000017630 00000 n +0000017717 00000 n +0000017801 00000 n +0000017888 00000 n +0000017978 00000 n +0000018064 00000 n +0000018261 00000 n +0000018348 00000 n +0000018439 00000 n +0000018525 00000 n +0000018616 00000 n +0000018703 00000 n +0000018765 00000 n +0000018852 00000 n +0000018927 00000 n +0000019013 00000 n +0000019150 00000 n +0000019211 00000 n +0000019298 00000 n +0000019366 00000 n +0000019453 00000 n +0000019520 00000 n +0000019607 00000 n +0000019666 00000 n +0000019753 00000 n +0000019832 00000 n +0000019919 00000 n +0000019977 00000 n +0000020064 00000 n +0000020132 00000 n +0000020219 00000 n +0000020286 00000 n +0000020373 00000 n +0000020462 00000 n +0000020549 00000 n +0000020642 00000 n +0000020728 00000 n +0000020825 00000 n +0000020880 00000 n +0000020966 00000 n +0000021025 00000 n +0000021111 00000 n 0000021182 00000 n -0000021275 00000 n -0000021362 00000 n +0000021268 00000 n +0000021322 00000 n +0000021409 00000 n 0000021467 00000 n -0000021522 00000 n -0000021608 00000 n -0000021667 00000 n -0000021753 00000 n -0000021824 00000 n -0000021910 00000 n -0000021964 00000 n -0000022051 00000 n -0000022109 00000 n -0000022195 00000 n -0000022238 00000 n -0000022324 00000 n -0000022521 00000 n -0000022607 00000 n -0000022701 00000 n -0000022787 00000 n -0000022864 00000 n -0000022950 00000 n -0000023017 00000 n -0000023103 00000 n -0000023170 00000 n -0000023256 00000 n -0000023315 00000 n -0000023401 00000 n -0000023460 00000 n -0000023546 00000 n -0000023618 00000 n -0000023704 00000 n -0000023833 00000 n -0000023867 00000 n -0000023901 00000 n -0000025444 00000 n -0000025487 00000 n -0000025530 00000 n -0000025573 00000 n -0000025616 00000 n -0000025659 00000 n -0000025702 00000 n -0000025745 00000 n -0000025788 00000 n -0000025831 00000 n -0000025874 00000 n -0000025917 00000 n -0000025960 00000 n -0000026003 00000 n -0000026046 00000 n -0000026089 00000 n -0000026132 00000 n -0000026175 00000 n -0000026218 00000 n -0000026261 00000 n -0000026304 00000 n -0000026347 00000 n -0000026390 00000 n -0000026433 00000 n -0000026476 00000 n -0000026519 00000 n -0000026562 00000 n -0000026605 00000 n -0000026648 00000 n -0000026691 00000 n -0000026734 00000 n -0000026777 00000 n -0000026820 00000 n -0000026863 00000 n -0000026906 00000 n -0000026949 00000 n -0000026992 00000 n -0000027035 00000 n -0000027078 00000 n -0000027121 00000 n -0000027164 00000 n -0000027207 00000 n -0000027250 00000 n -0000027293 00000 n -0000027336 00000 n -0000027379 00000 n -0000027422 00000 n -0000027465 00000 n -0000027508 00000 n -0000027551 00000 n -0000027594 00000 n -0000027637 00000 n -0000027680 00000 n -0000027723 00000 n -0000027766 00000 n -0000027809 00000 n -0000027852 00000 n -0000027895 00000 n -0000027938 00000 n -0000027981 00000 n -0000028024 00000 n -0000028067 00000 n -0000028110 00000 n -0000028153 00000 n -0000028196 00000 n -0000028239 00000 n -0000028282 00000 n -0000028325 00000 n -0000028368 00000 n -0000028411 00000 n -0000028454 00000 n -0000028497 00000 n -0000028540 00000 n -0000028583 00000 n -0000028626 00000 n -0000028669 00000 n -0000028712 00000 n -0000028755 00000 n -0000028798 00000 n -0000028841 00000 n -0000028884 00000 n -0000028927 00000 n -0000028970 00000 n -0000029013 00000 n -0000029056 00000 n -0000029099 00000 n -0000029142 00000 n -0000029185 00000 n -0000029228 00000 n -0000029271 00000 n -0000029314 00000 n -0000029357 00000 n -0000029400 00000 n -0000029807 00000 n -0000029986 00000 n -0000030721 00000 n -0000030909 00000 n -0000035336 00000 n -0000035525 00000 n -0000039541 00000 n -0000039730 00000 n -0000040292 00000 n -0000040472 00000 n -0000041430 00000 n -0000041638 00000 n -0000043766 00000 n -0000043956 00000 n -0000044933 00000 n -0000045131 00000 n -0000047272 00000 n -0000047480 00000 n -0000049353 00000 n -0000049546 00000 n -0000051364 00000 n -0000051548 00000 n -0000052411 00000 n -0000052594 00000 n -0000053893 00000 n -0000054076 00000 n -0000055097 00000 n -0000055280 00000 n -0000056533 00000 n -0000056716 00000 n -0000057788 00000 n -0000057971 00000 n -0000058989 00000 n -0000059172 00000 n -0000060237 00000 n -0000060420 00000 n -0000061527 00000 n -0000061710 00000 n -0000062659 00000 n -0000062842 00000 n -0000064044 00000 n -0000064227 00000 n -0000065615 00000 n -0000065798 00000 n -0000067098 00000 n -0000067281 00000 n -0000068412 00000 n -0000068595 00000 n -0000069929 00000 n -0000070112 00000 n -0000071435 00000 n -0000071618 00000 n -0000072968 00000 n -0000073151 00000 n -0000074509 00000 n -0000074683 00000 n -0000076212 00000 n -0000076377 00000 n -0000077544 00000 n -0000077718 00000 n -0000078200 00000 n -0000078390 00000 n -0000079399 00000 n -0000079592 00000 n -0000081642 00000 n -0000081844 00000 n -0000084094 00000 n -0000084287 00000 n -0000086078 00000 n -0000086295 00000 n -0000087761 00000 n -0000087968 00000 n -0000089482 00000 n -0000089689 00000 n -0000091041 00000 n -0000091233 00000 n -0000092495 00000 n -0000092712 00000 n -0000094304 00000 n -0000094493 00000 n -0000095311 00000 n -0000095518 00000 n -0000096736 00000 n -0000096934 00000 n -0000098847 00000 n -0000099027 00000 n -0000099566 00000 n -0000099764 00000 n -0000101691 00000 n -0000101880 00000 n -0000102910 00000 n -0000102966 00000 n -0000103065 00000 n -0000103211 00000 n -0000103318 00000 n -0000103470 00000 n -0000103570 00000 n -0000103678 00000 n -0000103786 00000 n -0000103944 00000 n -0000104061 00000 n -0000104188 00000 n -0000104298 00000 n -0000104449 00000 n -0000104548 00000 n -0000104698 00000 n -0000104812 00000 n -0000104937 00000 n -0000105070 00000 n -0000105197 00000 n -0000105331 00000 n -0000105494 00000 n -0000105648 00000 n -0000105751 00000 n -0000105867 00000 n -0000105991 00000 n -0000106119 00000 n -0000106217 00000 n -0000106364 00000 n -0000106488 00000 n -0000106632 00000 n -0000106776 00000 n -0000106919 00000 n -0000107069 00000 n -0000107214 00000 n -0000107329 00000 n -0000107477 00000 n -0000107577 00000 n -0000107722 00000 n -0000107862 00000 n -0000108008 00000 n -0000108167 00000 n -0000108303 00000 n -0000108429 00000 n -0000108553 00000 n -0000108692 00000 n -0000108827 00000 n -0000108982 00000 n -0000109143 00000 n -0000109248 00000 n -0000109398 00000 n -0000109557 00000 n -0000109697 00000 n -0000109831 00000 n -0000109982 00000 n -0000110111 00000 n -0000110280 00000 n -0000110435 00000 n -0000110588 00000 n -0000110732 00000 n -0000110884 00000 n -0000110992 00000 n -0000111091 00000 n -0000111248 00000 n -0000111350 00000 n -0000111476 00000 n -0000111648 00000 n -0000111762 00000 n -0000111878 00000 n -0000112010 00000 n -0000112116 00000 n -0000112225 00000 n -0000112334 00000 n -0000112442 00000 n -0000112551 00000 n -0000112660 00000 n -0000112771 00000 n -0000112882 00000 n -0000112975 00000 n -0000113111 00000 n -0000113215 00000 n -0000113333 00000 n -0000113528 00000 n -0000113626 00000 n -0000113737 00000 n -0000113857 00000 n -0000114001 00000 n -0000114093 00000 n -0000114265 00000 n -0000114359 00000 n -0000114453 00000 n -0000114547 00000 n +0000021553 00000 n +0000021596 00000 n +0000021683 00000 n +0000021880 00000 n +0000021966 00000 n +0000022060 00000 n +0000022146 00000 n +0000022223 00000 n +0000022309 00000 n +0000022376 00000 n +0000022462 00000 n +0000022529 00000 n +0000022615 00000 n +0000022674 00000 n +0000022760 00000 n +0000022819 00000 n +0000022905 00000 n +0000022977 00000 n +0000023063 00000 n +0000023192 00000 n +0000023226 00000 n +0000023260 00000 n +0000024803 00000 n +0000024846 00000 n +0000024889 00000 n +0000024932 00000 n +0000024975 00000 n +0000025018 00000 n +0000025061 00000 n +0000025104 00000 n +0000025147 00000 n +0000025190 00000 n +0000025233 00000 n +0000025276 00000 n +0000025319 00000 n +0000025362 00000 n +0000025405 00000 n +0000025448 00000 n +0000025491 00000 n +0000025534 00000 n +0000025577 00000 n +0000025620 00000 n +0000025663 00000 n +0000025706 00000 n +0000025749 00000 n +0000025792 00000 n +0000025835 00000 n +0000025878 00000 n +0000025921 00000 n +0000025964 00000 n +0000026007 00000 n +0000026050 00000 n +0000026093 00000 n +0000026136 00000 n +0000026179 00000 n +0000026222 00000 n +0000026265 00000 n +0000026308 00000 n +0000026351 00000 n +0000026394 00000 n +0000026437 00000 n +0000026480 00000 n +0000026523 00000 n +0000026566 00000 n +0000026609 00000 n +0000026652 00000 n +0000026695 00000 n +0000026738 00000 n +0000026781 00000 n +0000026824 00000 n +0000026867 00000 n +0000026910 00000 n +0000026953 00000 n +0000026996 00000 n +0000027039 00000 n +0000027082 00000 n +0000027125 00000 n +0000027168 00000 n +0000027211 00000 n +0000027254 00000 n +0000027297 00000 n +0000027340 00000 n +0000027383 00000 n +0000027426 00000 n +0000027469 00000 n +0000027512 00000 n +0000027555 00000 n +0000027598 00000 n +0000027641 00000 n +0000027684 00000 n +0000027727 00000 n +0000027770 00000 n +0000027813 00000 n +0000027856 00000 n +0000027899 00000 n +0000027942 00000 n +0000027985 00000 n +0000028028 00000 n +0000028071 00000 n +0000028114 00000 n +0000028157 00000 n +0000028200 00000 n +0000028243 00000 n +0000028286 00000 n +0000028329 00000 n +0000028372 00000 n +0000028415 00000 n +0000028458 00000 n +0000028501 00000 n +0000028544 00000 n +0000028587 00000 n +0000028630 00000 n +0000028673 00000 n +0000028716 00000 n +0000028759 00000 n +0000029062 00000 n +0000029232 00000 n +0000029926 00000 n +0000030096 00000 n +0000036270 00000 n +0000036441 00000 n +0000038831 00000 n +0000039002 00000 n +0000040005 00000 n +0000040194 00000 n +0000042937 00000 n +0000043126 00000 n +0000046218 00000 n +0000046416 00000 n +0000048731 00000 n +0000048905 00000 n +0000049683 00000 n +0000049857 00000 n +0000051396 00000 n +0000051570 00000 n +0000053193 00000 n +0000053367 00000 n +0000054634 00000 n +0000054808 00000 n +0000056183 00000 n +0000056357 00000 n +0000057695 00000 n +0000057869 00000 n +0000059294 00000 n +0000059468 00000 n +0000061091 00000 n +0000061265 00000 n +0000062934 00000 n +0000063108 00000 n +0000064493 00000 n +0000064667 00000 n +0000066543 00000 n +0000066717 00000 n +0000068587 00000 n +0000068752 00000 n +0000070302 00000 n +0000070467 00000 n +0000071375 00000 n +0000071555 00000 n +0000072551 00000 n +0000072734 00000 n +0000075993 00000 n +0000076176 00000 n +0000078968 00000 n +0000079166 00000 n +0000081147 00000 n +0000081336 00000 n +0000083057 00000 n +0000083231 00000 n +0000084613 00000 n +0000084811 00000 n +0000086709 00000 n +0000086898 00000 n +0000088084 00000 n +0000088273 00000 n +0000090260 00000 n +0000090449 00000 n +0000092266 00000 n +0000092446 00000 n +0000093401 00000 n +0000093457 00000 n +0000093556 00000 n +0000093702 00000 n +0000093809 00000 n +0000093961 00000 n +0000094061 00000 n +0000094169 00000 n +0000094277 00000 n +0000094435 00000 n +0000094552 00000 n +0000094679 00000 n +0000094789 00000 n +0000094940 00000 n +0000095039 00000 n +0000095189 00000 n +0000095303 00000 n +0000095428 00000 n +0000095561 00000 n +0000095688 00000 n +0000095822 00000 n +0000095985 00000 n +0000096139 00000 n +0000096242 00000 n +0000096358 00000 n +0000096482 00000 n +0000096610 00000 n +0000096708 00000 n +0000096855 00000 n +0000096979 00000 n +0000097123 00000 n +0000097267 00000 n +0000097410 00000 n +0000097560 00000 n +0000097705 00000 n +0000097820 00000 n +0000097968 00000 n +0000098068 00000 n +0000098213 00000 n +0000098353 00000 n +0000098499 00000 n +0000098658 00000 n +0000098794 00000 n +0000098920 00000 n +0000099044 00000 n +0000099183 00000 n +0000099318 00000 n +0000099473 00000 n +0000099634 00000 n +0000099739 00000 n +0000099889 00000 n +0000100048 00000 n +0000100188 00000 n +0000100322 00000 n +0000100473 00000 n +0000100602 00000 n +0000100771 00000 n +0000100926 00000 n +0000101079 00000 n +0000101223 00000 n +0000101375 00000 n +0000101483 00000 n +0000101582 00000 n +0000101739 00000 n +0000101841 00000 n +0000101967 00000 n +0000102139 00000 n +0000102253 00000 n +0000102369 00000 n +0000102501 00000 n +0000102607 00000 n +0000102716 00000 n +0000102825 00000 n +0000102933 00000 n +0000103042 00000 n +0000103151 00000 n +0000103262 00000 n +0000103373 00000 n +0000103466 00000 n +0000103602 00000 n +0000103706 00000 n +0000103824 00000 n +0000104019 00000 n +0000104117 00000 n +0000104228 00000 n +0000104348 00000 n +0000104492 00000 n +0000104584 00000 n +0000104756 00000 n +0000104850 00000 n +0000104944 00000 n +0000105038 00000 n trailer -<<6750eed934b4b51d10590b7355a06df5>]>> +<<04b4774cc3dfeec612ef5046ac002262>]>> startxref -114928 +105418 %%EOF diff --git a/doc/pdf/privoxy-faq.pdf b/doc/pdf/privoxy-faq.pdf index e7bd2db1..ba021f4d 100644 --- a/doc/pdf/privoxy-faq.pdf +++ b/doc/pdf/privoxy-faq.pdf @@ -1,79 +1,96 @@ %PDF-1.3 %âãÏÓ -1 0 obj<>endobj +1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj 4 0 obj<>endobj -5 0 obj<>endobj -6 0 obj<>endobj -7 0 obj<>endobj -8 0 obj<>endobj -9 0 obj<>endobj -10 0 obj<>endobj -11 0 obj<>endobj -12 0 obj<>endobj -13 0 obj<>endobj -14 0 obj<>endobj -15 0 obj<>endobj -16 0 obj<>endobj -17 0 obj<>endobj -18 0 obj<>endobj -19 0 obj<>endobj -20 0 obj<>endobj -21 0 obj<>endobj -22 0 obj[11 0 R -13 0 R -15 0 R -17 0 R -19 0 R -20 0 R -21 0 R]endobj -23 0 obj<>endobj -24 0 obj<>endobj -25 0 obj<>endobj -26 0 obj<>endobj -27 0 obj<>endobj -28 0 obj<>endobj -29 0 obj<>endobj -30 0 obj<>endobj -31 0 obj<>endobj -32 0 obj<>endobj -33 0 obj<>endobj -34 0 obj<>endobj -35 0 obj<>endobj -36 0 obj<>endobj -37 0 obj<>endobj -38 0 obj<>endobj -39 0 obj<>endobj -40 0 obj<>endobj -41 0 obj<>endobj -42 0 obj<>endobj -43 0 obj<>endobj -44 0 obj<>endobj -45 0 obj<>endobj -46 0 obj<>endobj -47 0 obj<>endobj -48 0 obj<>endobj -49 0 obj<>endobj -50 0 obj<>endobj -51 0 obj<>endobj -52 0 obj<>endobj -53 0 obj<>endobj -54 0 obj<>endobj -55 0 obj<>endobj -56 0 obj<>endobj -57 0 obj<>endobj -58 0 obj<>endobj -59 0 obj<>endobj -60 0 obj<>endobj -61 0 obj<>endobj -62 0 obj<>endobj -63 0 obj<>endobj -64 0 obj<>endobj -65 0 obj<>endobj -66 0 obj<>endobj -67 0 obj<>endobj -68 0 obj[23 0 R +5 0 obj<>endobj +6 0 obj<>endobj +7 0 obj<>endobj +8 0 obj<>endobj +9 0 obj<>endobj +10 0 obj<>endobj +11 0 obj<>endobj +12 0 obj<>endobj +13 0 obj<>endobj +14 0 obj<>endobj +15 0 obj<>endobj +16 0 obj<>endobj +17 0 obj<>endobj +18 0 obj<>endobj +19 0 obj<>endobj +20 0 obj[10 0 R +12 0 R +14 0 R +16 0 R +18 0 R +19 0 R]endobj +21 0 obj<>endobj +22 0 obj<>endobj +23 0 obj<>endobj +24 0 obj<>endobj +25 0 obj<>endobj +26 0 obj<>endobj +27 0 obj<>endobj +28 0 obj<>endobj +29 0 obj<>endobj +30 0 obj<>endobj +31 0 obj<>endobj +32 0 obj<>endobj +33 0 obj<>endobj +34 0 obj<>endobj +35 0 obj<>endobj +36 0 obj<>endobj +37 0 obj<>endobj +38 0 obj<>endobj +39 0 obj<>endobj +40 0 obj<>endobj +41 0 obj<>endobj +42 0 obj<>endobj +43 0 obj<>endobj +44 0 obj<>endobj +45 0 obj<>endobj +46 0 obj<>endobj +47 0 obj<>endobj +48 0 obj<>endobj +49 0 obj<>endobj +50 0 obj<>endobj +51 0 obj<>endobj +52 0 obj<>endobj +53 0 obj<>endobj +54 0 obj<>endobj +55 0 obj<>endobj +56 0 obj<>endobj +57 0 obj<>endobj +58 0 obj<>endobj +59 0 obj<>endobj +60 0 obj<>endobj +61 0 obj<>endobj +62 0 obj<>endobj +63 0 obj<>endobj +64 0 obj<>endobj +65 0 obj<>endobj +66 0 obj<>endobj +67 0 obj<>endobj +68 0 obj<>endobj +69 0 obj<>endobj +70 0 obj<>endobj +71 0 obj<>endobj +72 0 obj<>endobj +73 0 obj<>endobj +74 0 obj<>endobj +75 0 obj<>endobj +76 0 obj<>endobj +77 0 obj<>endobj +78 0 obj<>endobj +79 0 obj<>endobj +80 0 obj<>endobj +81 0 obj<>endobj +82 0 obj<>endobj +83 0 obj<>endobj +84 0 obj[21 0 R +22 0 R +23 0 R 24 0 R 25 0 R 26 0 R @@ -117,42 +134,9 @@ 64 0 R 65 0 R 66 0 R -67 0 R]endobj -69 0 obj<>endobj -70 0 obj<>endobj -71 0 obj<>endobj -72 0 obj<>endobj -73 0 obj<>endobj -74 0 obj<>endobj -75 0 obj<>endobj -76 0 obj<>endobj -77 0 obj<>endobj -78 0 obj<>endobj -79 0 obj<>endobj -80 0 obj<>endobj -81 0 obj<>endobj -82 0 obj<>endobj -83 0 obj<>endobj -84 0 obj<>endobj -85 0 obj<>endobj -86 0 obj<>endobj -87 0 obj<>endobj -88 0 obj<>endobj -89 0 obj<>endobj -90 0 obj<>endobj -91 0 obj<>endobj -92 0 obj<>endobj -93 0 obj<>endobj -94 0 obj<>endobj -95 0 obj<>endobj -96 0 obj<>endobj -97 0 obj<>endobj -98 0 obj<>endobj -99 0 obj<>endobj -100 0 obj<>endobj -101 0 obj<>endobj -102 0 obj<>endobj -103 0 obj[69 0 R +67 0 R +68 0 R +69 0 R 70 0 R 71 0 R 72 0 R @@ -166,9 +150,37 @@ 80 0 R 81 0 R 82 0 R -83 0 R -84 0 R -85 0 R +83 0 R]endobj +85 0 obj<>endobj +86 0 obj<>endobj +87 0 obj<>endobj +88 0 obj<>endobj +89 0 obj<>endobj +90 0 obj<>endobj +91 0 obj<>endobj +92 0 obj<>endobj +93 0 obj<>endobj +94 0 obj<>endobj +95 0 obj<>endobj +96 0 obj<>endobj +97 0 obj<>endobj +98 0 obj<>endobj +99 0 obj<>endobj +100 0 obj<>endobj +101 0 obj<>endobj +102 0 obj<>endobj +103 0 obj<>endobj +104 0 obj<>endobj +105 0 obj<>endobj +106 0 obj<>endobj +107 0 obj<>endobj +108 0 obj<>endobj +109 0 obj<>endobj +110 0 obj<>endobj +111 0 obj<>endobj +112 0 obj<>endobj +113 0 obj<>endobj +114 0 obj[85 0 R 86 0 R 87 0 R 88 0 R @@ -185,180 +197,186 @@ 99 0 R 100 0 R 101 0 R -102 0 R]endobj -104 0 obj<>endobj -105 0 obj<>endobj -106 0 obj<>endobj -107 0 obj<>endobj -108 0 obj<>endobj -109 0 obj<>endobj -110 0 obj<>endobj -111 0 obj<>endobj -112 0 obj<>endobj -113 0 obj<>endobj -114 0 obj<>endobj -115 0 obj<>endobj -116 0 obj<>endobj -117 0 obj<>endobj -118 0 obj<>endobj -119 0 obj<>endobj -120 0 obj<>endobj -121 0 obj<>endobj -122 0 obj<>endobj -123 0 obj<>endobj -124 0 obj<>endobj -125 0 obj<>endobj -126 0 obj<>endobj -127 0 obj<>endobj -128 0 obj[105 0 R +102 0 R +103 0 R +104 0 R +105 0 R +106 0 R 107 0 R +108 0 R 109 0 R +110 0 R 111 0 R -113 0 R -115 0 R -117 0 R -119 0 R -121 0 R -123 0 R -125 0 R -127 0 R]endobj -129 0 obj<>endobj -130 0 obj<>endobj -131 0 obj<>endobj -132 0 obj<>endobj -133 0 obj<>endobj -134 0 obj<>endobj -135 0 obj[130 0 R +112 0 R +113 0 R]endobj +115 0 obj<>endobj +116 0 obj<>endobj +117 0 obj<>endobj +118 0 obj<>endobj +119 0 obj<>endobj +120 0 obj<>endobj +121 0 obj<>endobj +122 0 obj<>endobj +123 0 obj<>endobj +124 0 obj<>endobj +125 0 obj<>endobj +126 0 obj<>endobj +127 0 obj<>endobj +128 0 obj<>endobj +129 0 obj<>endobj +130 0 obj<>endobj +131 0 obj<>endobj +132 0 obj<>endobj +133 0 obj<>endobj +134 0 obj<>endobj +135 0 obj<>endobj +136 0 obj<>endobj +137 0 obj<>endobj +138 0 obj<>endobj +139 0 obj<>endobj +140 0 obj<>endobj +141 0 obj[116 0 R +118 0 R +120 0 R +122 0 R +124 0 R +126 0 R +128 0 R +130 0 R 132 0 R -134 0 R]endobj -136 0 obj<>endobj -137 0 obj<>endobj -138 0 obj<>endobj -139 0 obj<>endobj -140 0 obj<>endobj -141 0 obj<>endobj -142 0 obj[136 0 R +134 0 R +136 0 R 138 0 R -139 0 R -141 0 R]endobj -143 0 obj<>endobj -144 0 obj<>endobj -145 0 obj<>endobj -146 0 obj<>endobj -147 0 obj<>endobj -148 0 obj<>endobj -149 0 obj<>endobj -150 0 obj<>endobj -151 0 obj<>endobj -152 0 obj<>endobj -153 0 obj[144 0 R +140 0 R]endobj +142 0 obj<>endobj +143 0 obj<>endobj +144 0 obj<>endobj +145 0 obj<>endobj +146 0 obj<>endobj +147 0 obj<>endobj +148 0 obj[143 0 R +144 0 R 146 0 R -148 0 R -150 0 R -152 0 R]endobj -154 0 obj<>endobj -155 0 obj<>endobj -156 0 obj<>endobj -157 0 obj<>endobj -158 0 obj<>endobj -159 0 obj<>endobj -160 0 obj<>endobj -161 0 obj<>endobj -162 0 obj<>endobj -163 0 obj<>endobj -164 0 obj[155 0 R -157 0 R -159 0 R -161 0 R -163 0 R]endobj -165 0 obj<>endobj -166 0 obj<>endobj -167 0 obj<>endobj -168 0 obj<>endobj -169 0 obj[166 0 R -168 0 R]endobj -170 0 obj<>endobj -171 0 obj<>endobj -172 0 obj<>endobj -173 0 obj<>endobj -174 0 obj<>endobj -175 0 obj<>endobj -176 0 obj<>endobj -177 0 obj<>endobj -178 0 obj<>endobj -179 0 obj<>endobj -180 0 obj<>endobj -181 0 obj<>endobj -182 0 obj<>endobj -183 0 obj<>endobj -184 0 obj<>endobj -185 0 obj<>endobj -186 0 obj<>endobj -187 0 obj<>endobj -188 0 obj<>endobj -189 0 obj<>endobj -190 0 obj<>endobj -191 0 obj<>endobj -192 0 obj<>endobj -193 0 obj<>endobj -194 0 obj<>endobj -195 0 obj<>endobj -196 0 obj<>endobj -197 0 obj<>endobj -198 0 obj[171 0 R +147 0 R]endobj +149 0 obj<>endobj +150 0 obj<>endobj +151 0 obj<>endobj +152 0 obj<>endobj +153 0 obj<>endobj +154 0 obj<>endobj +155 0 obj<>endobj +156 0 obj<>endobj +157 0 obj<>endobj +158 0 obj<>endobj +159 0 obj<>endobj +160 0 obj<>endobj +161 0 obj[150 0 R +152 0 R +154 0 R +156 0 R +158 0 R +160 0 R]endobj +162 0 obj<>endobj +163 0 obj<>endobj +164 0 obj<>endobj +165 0 obj<>endobj +166 0 obj<>endobj +167 0 obj<>endobj +168 0 obj<>endobj +169 0 obj<>endobj +170 0 obj<>endobj +171 0 obj<>endobj +172 0 obj<>endobj +173 0 obj<>endobj +174 0 obj<>endobj +175 0 obj<>endobj +176 0 obj<>endobj +177 0 obj<>endobj +178 0 obj<>endobj +179 0 obj<>endobj +180 0 obj[162 0 R +163 0 R +165 0 R +167 0 R +169 0 R +171 0 R 173 0 R 175 0 R 177 0 R -179 0 R -181 0 R -183 0 R -185 0 R -187 0 R -189 0 R -191 0 R +179 0 R]endobj +181 0 obj<>endobj +182 0 obj<>endobj +183 0 obj<>endobj +184 0 obj<>endobj +185 0 obj<>endobj +186 0 obj<>endobj +187 0 obj<>endobj +188 0 obj<>endobj +189 0 obj[182 0 R +184 0 R +186 0 R +188 0 R]endobj +190 0 obj<>endobj +191 0 obj<>endobj +192 0 obj<>endobj +193 0 obj<>endobj +194 0 obj<>endobj +195 0 obj<>endobj +196 0 obj<>endobj +197 0 obj<>endobj +198 0 obj<>endobj +199 0 obj<>endobj +200 0 obj<>endobj +201 0 obj<>endobj +202 0 obj<>endobj +203 0 obj<>endobj +204 0 obj<>endobj +205 0 obj<>endobj +206 0 obj<>endobj +207 0 obj<>endobj +208 0 obj<>endobj +209 0 obj<>endobj +210 0 obj<>endobj +211 0 obj<>endobj +212 0 obj<>endobj +213 0 obj<>endobj +214 0 obj<>endobj +215 0 obj<>endobj +216 0 obj<>endobj +217 0 obj<>endobj +218 0 obj<>endobj +219 0 obj<>endobj +220 0 obj<>endobj +221 0 obj<>endobj +222 0 obj<>endobj +223 0 obj<>endobj +224 0 obj<>endobj +225 0 obj<>endobj +226 0 obj<>endobj +227 0 obj<>endobj +228 0 obj<>endobj +229 0 obj<>endobj +230 0 obj<>endobj +231 0 obj<>endobj +232 0 obj<>endobj +233 0 obj<>endobj +234 0 obj<>endobj +235 0 obj<>endobj +236 0 obj<>endobj +237 0 obj<>endobj +238 0 obj[191 0 R 193 0 R 195 0 R -197 0 R]endobj -199 0 obj<>endobj -200 0 obj<>endobj -201 0 obj<>endobj -202 0 obj<>endobj -203 0 obj<>endobj -204 0 obj<>endobj -205 0 obj<>endobj -206 0 obj<>endobj -207 0 obj<>endobj -208 0 obj<>endobj -209 0 obj<>endobj -210 0 obj<>endobj -211 0 obj<>endobj -212 0 obj<>endobj -213 0 obj[200 0 R -202 0 R -204 0 R -206 0 R -208 0 R -210 0 R -212 0 R]endobj -214 0 obj<>endobj -215 0 obj<>endobj -216 0 obj<>endobj -217 0 obj<>endobj -218 0 obj<>endobj -219 0 obj<>endobj -220 0 obj<>endobj -221 0 obj<>endobj -222 0 obj<>endobj -223 0 obj<>endobj -224 0 obj<>endobj -225 0 obj<>endobj -226 0 obj<>endobj -227 0 obj<>endobj -228 0 obj<>endobj -229 0 obj<>endobj -230 0 obj<>endobj -231 0 obj<>endobj -232 0 obj[215 0 R +197 0 R +199 0 R +201 0 R +203 0 R +205 0 R +207 0 R +209 0 R +211 0 R +213 0 R +215 0 R 217 0 R 219 0 R 221 0 R @@ -366,242 +384,249 @@ 225 0 R 227 0 R 229 0 R -231 0 R]endobj -233 0 obj<>endobj -234 0 obj<>endobj -235 0 obj<>endobj -236 0 obj<>endobj -237 0 obj<>endobj -238 0 obj<>endobj -239 0 obj<>endobj -240 0 obj<>endobj -241 0 obj<>endobj -242 0 obj<>endobj -243 0 obj<>endobj -244 0 obj<>endobj -245 0 obj<>endobj -246 0 obj<>endobj -247 0 obj<>endobj -248 0 obj<>endobj -249 0 obj<>endobj -250 0 obj[234 0 R -236 0 R -238 0 R -240 0 R +231 0 R +233 0 R +235 0 R +237 0 R]endobj +239 0 obj<>endobj +240 0 obj<>endobj +241 0 obj<>endobj +242 0 obj<>endobj +243 0 obj<>endobj +244 0 obj<>endobj +245 0 obj<>endobj +246 0 obj<>endobj +247 0 obj<>endobj +248 0 obj<>endobj +249 0 obj<>endobj +250 0 obj<>endobj +251 0 obj<>endobj +252 0 obj<>endobj +253 0 obj<>endobj +254 0 obj<>endobj +255 0 obj<>endobj +256 0 obj<>endobj +257 0 obj<>endobj +258 0 obj<>endobj +259 0 obj<>endobj +260 0 obj<>endobj +261 0 obj<>endobj +262 0 obj<>endobj +263 0 obj<>endobj +264 0 obj<>endobj +265 0 obj<>endobj +266 0 obj<>endobj +267 0 obj<>endobj +268 0 obj<>endobj +269 0 obj<>endobj +270 0 obj<>endobj +271 0 obj<>endobj +272 0 obj[240 0 R 242 0 R 244 0 R 246 0 R -247 0 R -249 0 R]endobj -251 0 obj<>endobj -252 0 obj<>endobj -253 0 obj<>endobj -254 0 obj<>endobj -255 0 obj<>endobj -256 0 obj<>endobj -257 0 obj<>endobj -258 0 obj<>endobj -259 0 obj<>endobj -260 0 obj<>endobj -261 0 obj[252 0 R +248 0 R +250 0 R +252 0 R 254 0 R 256 0 R 258 0 R -260 0 R]endobj -262 0 obj<>endobj -263 0 obj<>endobj -264 0 obj<>endobj -265 0 obj<>endobj -266 0 obj<>endobj -267 0 obj<>endobj -268 0 obj<>endobj -269 0 obj<>endobj -270 0 obj<>endobj -271 0 obj<>endobj -272 0 obj<>endobj -273 0 obj<>endobj -274 0 obj<>endobj -275 0 obj<>endobj -276 0 obj<>endobj -277 0 obj<>endobj -278 0 obj[263 0 R -265 0 R -267 0 R -269 0 R -271 0 R -273 0 R -275 0 R -277 0 R]endobj -279 0 obj<>endobj -280 0 obj<>endobj -281 0 obj<>endobj -282 0 obj<>endobj -283 0 obj<>endobj -284 0 obj<>endobj -285 0 obj<>endobj -286 0 obj[280 0 R -281 0 R -283 0 R -285 0 R]endobj -287 0 obj<>endobj -288 0 obj<>endobj -289 0 obj<>endobj -290 0 obj<>endobj -291 0 obj<>endobj -292 0 obj<>endobj -293 0 obj[288 0 R -290 0 R -292 0 R]endobj -294 0 obj<>endobj -295 0 obj<>endobj -296 0 obj<>endobj -297 0 obj<>endobj -298 0 obj<>endobj -299 0 obj<>endobj -300 0 obj<>endobj -301 0 obj<>endobj -302 0 obj[295 0 R +260 0 R +262 0 R +264 0 R +266 0 R +268 0 R +270 0 R +271 0 R]endobj +273 0 obj<>endobj +274 0 obj<>endobj +275 0 obj<>endobj +276 0 obj<>endobj +277 0 obj<>endobj +278 0 obj<>endobj +279 0 obj<>endobj +280 0 obj<>endobj +281 0 obj<>endobj +282 0 obj<>endobj +283 0 obj<>endobj +284 0 obj<>endobj +285 0 obj<>endobj +286 0 obj<>endobj +287 0 obj[274 0 R +276 0 R +278 0 R +280 0 R +282 0 R +284 0 R +286 0 R]endobj +288 0 obj<>endobj +289 0 obj<>endobj +290 0 obj<>endobj +291 0 obj<>endobj +292 0 obj<>endobj +293 0 obj<>endobj +294 0 obj<>endobj +295 0 obj<>endobj +296 0 obj<>endobj +297 0 obj<>endobj +298 0 obj<>endobj +299 0 obj<>endobj +300 0 obj<>endobj +301 0 obj<>endobj +302 0 obj<>endobj +303 0 obj<>endobj +304 0 obj<>endobj +305 0 obj<>endobj +306 0 obj<>endobj +307 0 obj<>endobj +308 0 obj<>endobj +309 0 obj<>endobj +310 0 obj<>endobj +311 0 obj[289 0 R +291 0 R +293 0 R +295 0 R 297 0 R 299 0 R -301 0 R]endobj -303 0 obj<>endobj -304 0 obj<>endobj -305 0 obj<>endobj -306 0 obj<>endobj -307 0 obj<>endobj -308 0 obj<>endobj -309 0 obj<>endobj -310 0 obj<>endobj -311 0 obj<>endobj -312 0 obj<>endobj -313 0 obj<>endobj -314 0 obj<>endobj -315 0 obj<>endobj -316 0 obj<>endobj -317 0 obj<>endobj -318 0 obj<>endobj -319 0 obj<>endobj -320 0 obj<>endobj -321 0 obj<>endobj -322 0 obj<>endobj -323 0 obj<>endobj -324 0 obj<>endobj -325 0 obj<>endobj -326 0 obj<>endobj -327 0 obj<>endobj -328 0 obj<>endobj -329 0 obj<>endobj -330 0 obj<>endobj -331 0 obj[304 0 R +301 0 R +303 0 R +305 0 R 306 0 R 308 0 R -310 0 R -312 0 R -314 0 R -316 0 R -318 0 R -320 0 R +310 0 R]endobj +312 0 obj<>endobj +313 0 obj<>endobj +314 0 obj<>endobj +315 0 obj<>endobj +316 0 obj<>endobj +317 0 obj<>endobj +318 0 obj[313 0 R +315 0 R +317 0 R]endobj +319 0 obj<>endobj +320 0 obj<>endobj +321 0 obj<>endobj +322 0 obj<>endobj +323 0 obj<>endobj +324 0 obj<>endobj +325 0 obj<>endobj +326 0 obj<>endobj +327 0 obj<>endobj +328 0 obj<>endobj +329 0 obj<>endobj +330 0 obj<>endobj +331 0 obj[320 0 R 322 0 R 324 0 R 326 0 R 328 0 R 330 0 R]endobj -332 0 obj<>endobj -333 0 obj<>endobj -334 0 obj[333 0 R]endobj -335 0 obj<>endobj -336 0 obj<>endobj -337 0 obj<>endobj -338 0 obj<>endobj -339 0 obj<>endobj -340 0 obj<>endobj -341 0 obj<>endobj -342 0 obj<>endobj -343 0 obj<>endobj -344 0 obj<>endobj -345 0 obj<>endobj -346 0 obj<>endobj -347 0 obj<>endobj -348 0 obj<>endobj -349 0 obj<>endobj -350 0 obj<>endobj -351 0 obj<>endobj -352 0 obj<>endobj -353 0 obj[336 0 R -338 0 R -340 0 R -342 0 R -344 0 R -346 0 R -348 0 R -350 0 R -352 0 R]endobj -354 0 obj<>endobj -355 0 obj<>endobj -356 0 obj<>endobj -357 0 obj<>endobj -358 0 obj<>endobj -359 0 obj<>endobj -360 0 obj<>endobj -361 0 obj<>endobj -362 0 obj<>endobj -363 0 obj<>endobj -364 0 obj<>endobj -365 0 obj<>endobj -366 0 obj<>endobj -367 0 obj<>endobj -368 0 obj<>endobj -369 0 obj<>endobj -370 0 obj<>endobj -371 0 obj<>endobj -372 0 obj<>endobj -373 0 obj<>endobj -374 0 obj<>endobj -375 0 obj<>endobj -376 0 obj<>endobj -377 0 obj<>endobj -378 0 obj<>endobj -379 0 obj<>endobj -380 0 obj[355 0 R +332 0 obj<>endobj +333 0 obj<>endobj +334 0 obj<>endobj +335 0 obj<>endobj +336 0 obj<>endobj +337 0 obj<>endobj +338 0 obj<>endobj +339 0 obj<>endobj +340 0 obj<>endobj +341 0 obj<>endobj +342 0 obj<>endobj +343 0 obj<>endobj +344 0 obj<>endobj +345 0 obj<>endobj +346 0 obj<>endobj +347 0 obj<>endobj +348 0 obj<>endobj +349 0 obj<>endobj +350 0 obj<>endobj +351 0 obj<>endobj +352 0 obj<>endobj +353 0 obj<>endobj +354 0 obj<>endobj +355 0 obj<>endobj +356 0 obj<>endobj +357 0 obj<>endobj +358 0 obj<>endobj +359 0 obj<>endobj +360 0 obj[333 0 R +335 0 R +337 0 R +339 0 R +341 0 R +343 0 R +345 0 R +347 0 R +349 0 R +351 0 R +353 0 R +355 0 R 357 0 R -359 0 R -361 0 R -363 0 R -365 0 R -367 0 R -369 0 R -371 0 R -373 0 R -375 0 R -377 0 R -379 0 R]endobj -381 0 obj<>endobj -382 0 obj<>endobj -383 0 obj[382 0 R]endobj -384 0 obj<>endobj -385 0 obj<>endobj -386 0 obj<>endobj -387 0 obj<>endobj -388 0 obj<>endobj -389 0 obj<>endobj -390 0 obj<>endobj -391 0 obj<>endobj -392 0 obj<>endobj -393 0 obj<>endobj -394 0 obj<>endobj -395 0 obj<>endobj -396 0 obj<>endobj -397 0 obj<>endobj -398 0 obj<>endobj -399 0 obj<>endobj -400 0 obj<>endobj -401 0 obj<>endobj -402 0 obj<>endobj -403 0 obj<>endobj -404 0 obj<>endobj -405 0 obj<>endobj -406 0 obj[385 0 R -387 0 R +359 0 R]endobj +361 0 obj<>endobj +362 0 obj<>endobj +363 0 obj<>endobj +364 0 obj<>endobj +365 0 obj<>endobj +366 0 obj<>endobj +367 0 obj<>endobj +368 0 obj<>endobj +369 0 obj<>endobj +370 0 obj<>endobj +371 0 obj<>endobj +372 0 obj<>endobj +373 0 obj<>endobj +374 0 obj<>endobj +375 0 obj<>endobj +376 0 obj<>endobj +377 0 obj[362 0 R +364 0 R +366 0 R +368 0 R +370 0 R +372 0 R +374 0 R +376 0 R]endobj +378 0 obj<>endobj +379 0 obj<>endobj +380 0 obj[379 0 R]endobj +381 0 obj<>endobj +382 0 obj<>endobj +383 0 obj<>endobj +384 0 obj<>endobj +385 0 obj[382 0 R +384 0 R]endobj +386 0 obj<>endobj +387 0 obj<>endobj +388 0 obj<>endobj +389 0 obj<>endobj +390 0 obj<>endobj +391 0 obj<>endobj +392 0 obj<>endobj +393 0 obj<>endobj +394 0 obj<>endobj +395 0 obj<>endobj +396 0 obj<>endobj +397 0 obj<>endobj +398 0 obj<>endobj +399 0 obj<>endobj +400 0 obj<>endobj +401 0 obj<>endobj +402 0 obj<>endobj +403 0 obj<>endobj +404 0 obj<>endobj +405 0 obj<>endobj +406 0 obj<>endobj +407 0 obj<>endobj +408 0 obj<>endobj +409 0 obj<>endobj +410 0 obj<>endobj +411 0 obj<>endobj +412 0 obj<>endobj +413 0 obj<>endobj +414 0 obj<>endobj +415 0 obj<>endobj +416 0 obj[387 0 R 389 0 R 391 0 R 393 0 R @@ -610,1134 +635,1251 @@ 399 0 R 401 0 R 403 0 R -405 0 R]endobj -407 0 obj<>endobj -408 0 obj<>endobj -409 0 obj<>endobj -410 0 obj<>endobj -411 0 obj<>endobj -412 0 obj<>endobj -413 0 obj<>endobj -414 0 obj<>endobj -415 0 obj<>endobj -416 0 obj<>endobj -417 0 obj<>endobj -418 0 obj<>endobj -419 0 obj<>endobj -420 0 obj<>endobj -421 0 obj<>endobj -422 0 obj<>endobj -423 0 obj<>endobj -424 0 obj<>endobj -425 0 obj<>endobj -426 0 obj<>endobj -427 0 obj<>endobj -428 0 obj<>endobj -429 0 obj<>endobj -430 0 obj<>endobj -431 0 obj<>endobj -432 0 obj<>endobj -433 0 obj<>endobj -434 0 obj<>endobj -435 0 obj<>endobj -436 0 obj<>endobj -437 0 obj<>endobj -438 0 obj<>endobj -439 0 obj<>endobj -440 0 obj<>endobj -441 0 obj<>endobj -442 0 obj<>endobj -443 0 obj<>endobj -444 0 obj<>endobj -445 0 obj<>endobj -446 0 obj<>endobj -447 0 obj<>endobj -448 0 obj<>endobj -449 0 obj<>endobj -450 0 obj<>endobj -451 0 obj<>endobj -452 0 obj<>endobj -453 0 obj<>endobj -454 0 obj<>endobj -455 0 obj<>endobj -456 0 obj<>endobj -457 0 obj<>endobj -458 0 obj<>endobj -459 0 obj<>endobj -460 0 obj<>endobj -461 0 obj<>endobj -462 0 obj<>endobj -463 0 obj<>endobj -464 0 obj<>endobj -465 0 obj<>endobj -466 0 obj<>endobj -467 0 obj<>endobj -468 0 obj<>endobj -469 0 obj<>endobj -470 0 obj<>endobj -471 0 obj<>endobj -472 0 obj<>endobj -473 0 obj<>endobj -474 0 obj<>endobj -475 0 obj<>endobj -476 0 obj<>endobj -477 0 obj<>endobj -478 0 obj<>endobj -479 0 obj<>endobj -480 0 obj<>endobj -481 0 obj<>endobj -482 0 obj<>endobj -483 0 obj<>endobj -484 0 obj<>endobj -485 0 obj<>endobj -486 0 obj<>endobj -487 0 obj<>endobj -488 0 obj<>endobj -489 0 obj<>endobj -490 0 obj<>endobj +418 0 obj<>endobj +419 0 obj<>endobj +420 0 obj<>endobj +421 0 obj<>endobj +422 0 obj<>endobj +423 0 obj<>endobj +424 0 obj<>endobj +425 0 obj<>endobj +426 0 obj<>endobj +427 0 obj<>endobj +428 0 obj<>endobj +429 0 obj<>endobj +430 0 obj<>endobj +431 0 obj<>endobj +432 0 obj<>endobj +433 0 obj<>endobj +434 0 obj<>endobj +435 0 obj<>endobj +436 0 obj<>endobj +437 0 obj[418 0 R +420 0 R +422 0 R +424 0 R +426 0 R +428 0 R +430 0 R +432 0 R +434 0 R +436 0 R]endobj +438 0 obj<>endobj +439 0 obj<>endobj +440 0 obj<>endobj +441 0 obj<>endobj +442 0 obj<>endobj +443 0 obj<>endobj +444 0 obj<>endobj +445 0 obj<>endobj +446 0 obj<>endobj +447 0 obj<>endobj +448 0 obj<>endobj +449 0 obj<>endobj +450 0 obj<>endobj +451 0 obj<>endobj +452 0 obj<>endobj +453 0 obj<>endobj +454 0 obj<>endobj +455 0 obj<>endobj +456 0 obj<>endobj +457 0 obj<>endobj +458 0 obj<>endobj +459 0 obj<>endobj +460 0 obj<>endobj +461 0 obj<>endobj +462 0 obj<>endobj +463 0 obj<>endobj +464 0 obj<>endobj +465 0 obj<>endobj +466 0 obj<>endobj +467 0 obj<>endobj +468 0 obj<>endobj +469 0 obj<>endobj +470 0 obj<>endobj +471 0 obj<>endobj +472 0 obj<>endobj +473 0 obj<>endobj +474 0 obj<>endobj +475 0 obj<>endobj +476 0 obj<>endobj +477 0 obj<>endobj +478 0 obj<>endobj +479 0 obj<>endobj +480 0 obj<>endobj +481 0 obj<>endobj +482 0 obj<>endobj +483 0 obj<>endobj +484 0 obj<>endobj +485 0 obj<>endobj +486 0 obj<>endobj +487 0 obj<>endobj +488 0 obj<>endobj +489 0 obj<>endobj +490 0 obj<>endobj +491 0 obj<>endobj +492 0 obj<>endobj +493 0 obj<>endobj +494 0 obj<>endobj +495 0 obj<>endobj +496 0 obj<>endobj +497 0 obj<>endobj +498 0 obj<>endobj +499 0 obj<>endobj +500 0 obj<>endobj +501 0 obj<>endobj +502 0 obj<>endobj +503 0 obj<>endobj +504 0 obj<>endobj +505 0 obj<>endobj +506 0 obj<>endobj +507 0 obj<>endobj +508 0 obj<>endobj +509 0 obj<>endobj +510 0 obj<>endobj +511 0 obj<>endobj +512 0 obj<>endobj +513 0 obj<>endobj +514 0 obj<>endobj +515 0 obj<>endobj +516 0 obj<>endobj +517 0 obj<>endobj +518 0 obj<>endobj +519 0 obj<>endobj +520 0 obj<>endobj +521 0 obj<>endobj +522 0 obj<>endobj +523 0 obj<>endobj +524 0 obj<>endobj +525 0 obj<>endobj +526 0 obj<>endobj +527 0 obj<>endobj +528 0 obj<>endobj +529 0 obj<>endobj +530 0 obj<>endobj +531 0 obj<>endobj +532 0 obj<>endobj +533 0 obj<>endobj +534 0 obj<>endobj +535 0 obj<>endobj +536 0 obj<>endobj -491 0 obj<>/XObject<<>>>>/Annots 22 0 R>>endobj -492 0 obj<>stream -x}UMâ8½ó+ê0Ò2ò¤o³³ÃªWZiz—=ŒÔ'qÀƒ§mšùõûìèÙU„ÛU¯^½ª -/£yÅô¶è-Íñ¤YJË,"Í©…þ(¤eDñ‚Š>s¹%tË_¿»J‹`I5ÅQœ7’þ­VAz¹ Ã4È®.¯÷5…iÄW·Q–%Y†¸q¬Î;ìb&«֚¢1û»ºÚ֔®nï’%àb„rŽñ2 çóL’ðê6Y®‚ðêօŒ“9hÀÓú͙ÍY/ŒÓÑÃʱ\bðózþºÍÖEsÚTv'´)½ž8)Æ_µ8¨×­5éxcå‰>™=/é©ãÆ -՘›ï÷5@¼Ù:¡U9E)b€Ž?«ö¤Åvgo]ŠczŽÒLæáÄ­å§[K_`€i õ?p©Z®ïh ˜ŽFžyDK”<><–T±—Àlk99@‹ÈǛͳÙ<¥yò¥xÙ1™Ñ—×–>x43”›0´þôD[qà†^:Qì‰5ædUob1/¤ëÅ"–«î.ÿwYÝ&=¤2èÑRÁš_,b•T*nÜ»æ­d'»ã·Žîl½xÓ Œ‘,RøÇpM²¦còÖk÷¦Ü88§-лðćŒŽ<§V»9 -»#VXS ?*!-עقrËr!…ЪRڙ[^Xw×¢½Xqš\™{@¶åT¨Æ¢ã&çèóš5lëq•Úrâ µ’Ò²¢àgN!Íkuð‡%NrÖ4¨Ï„ZÕN»Üa¢ š&•7êU¨ÎÐ#Bê†[úÞ5û!ï!ò÷Ž¹Ä\Ÿ¨’üUäғ­Ä¶ÓÌ̈́‡F¥(ÇEg¬ªÅH‚Î0°$šRD é©á¼ì™Xf,7ÁÐÙwIûm+EÑp2æ OÆ")“ªádN€¨{¸º“VL;We¤sTzo†t~RƜðñKþ ÿÔáÿ<¶õóÇwޒÉ”­Ç,ôC©Š®FÑ﨟cç>ü ¤«D@~t -|\ßjn`‹‘ف¼e@ò8w=ºªœÌ’Þé!ú¦:7èÔÒ¡H€;8üÝé…ûÏÑÛYÛ>ÌfÇã1p=‰~”ÞÎð•˜ùЗ?™a>0Ž_{’†ÿÏðé3ژ}`š½dܜÓzM¢¢r;B>×6n€Ñ'sùäù’|ٌžFÿ%`Àendstream +537 0 obj<>/XObject<<>>>>/Annots 20 0 R>>endobj +538 0 obj<>stream +x}TMÛ6½ûWÌ!@À¦õeÉÚ[šf‹-P Ûº‡{¡$Êf,‰Z’²×ýõ}#Ù^' +ÃəyóæÍP¯³@ä1½/vG~ë|MY‘UTÏÂñ*¤,¢8¥²EL§Ûòç¯|Ci‹ˆZŠb±¹úk–¦"¾Ù6©ïlwǖÂp-²;c³ó:el ¦‰H/'†³L¬oÖ8O¿·Þ[J¢50&$ŽåL)%YŒÈa„<Ӊ­QšùfÍsð¿³Þ[Š£ž[ßEw¬&2'Ð ¢d“aá?ªúóv¶zÌ)dµ¶5$N×f)m«Qۀ¶åü«æíLV½ªó͙>¹ƒªèyPÎkÓ¹ÛoÀÙW4Â,“LäI˜ùgӟ­Þí=½D됢 —X*ÎtEþEUczeoH:ðI4â|xª¨–¯ÂíÚfq¤P¤¡ˆD‚j€¶ +ÂUP˜=ÁC“QŽ¾¼õô©´Œ6\a5ßîµ£ÇOÏ´ÓG¸¼º<ìÜ ¹Éªßk”c¨xª‘da¥,èÉS)»Ÿ<¢+ª÷Võ,ù½š4‘4V2§¿²ô»ìÙ\՚,âÂ0äÁë&à)é¤ +ê-‹Ò~O²:Ê®„òµn¼²ºÛC/ Ýh¯QNm,»{Uz¶õhœ,Ï jM¥ë3_€r§¨4G/a“ÜHƲ¸ðɹ—Õœý¬iöe©œ[Œ[՚ãxYᦐ]ԛ~9ô Q T°dŠÎ¼i38zBFÛ)Oß†î ®JÒ^r¥GeÏT7êMÍȮֻÁJ/û”쨀×à¼iõ?­sƒö¤»Ju•©Sªšˆxé¼r?dìûF—>ËV€-9TK٘N‘;#¨Ú¡ñz9p ÁÿdìÁýOÛ +éÀ¼oÿ†‚ EüËÜ·/ÿÝ(Q‡Öav¤Ç‚þW¦Z4‰°G˜?>u4 K/hœæŒÏ*_Lñä½҈£`›ÐMÍ*;V4ˆ}51Æ íºÌ,Ë¥õ 0œ¿Å œ¡o¤€¾÷¾X­N§“àYÜ +cw+¼ÒԞ²:5>úŒA’¥'Çà +º¦3ҟPwçŒÍcŠÛç`ÔéËvö<ûY³×¢endstream endobj -493 0 obj<>/XObject<<>>>>/Annots 68 0 R>>endobj -494 0 obj<>stream -x͝]s[Éq†ï÷W tc§*¢ðý‘›ÔÆÎÚëd]þPÕ&— ‰°H€@Éú÷yºg¦û=Ä¡Ì¥Vvì² -/^̜™îžîžž9ô_¿^¬&ƒüçðn0俳Õl°X‡Íàí7#ÿj4XŒ“ùàò–6C~dÿŒìŸ?ýƾ̧+þ½,/ÆõóÍàÏß$ºL—+¡ÞFÃÕÅHÈÉܺœÌ.–t9_Ì*°>Þ2Lkç?4N CYÙX‚h\Ðw’ŠaÇ>Öhªv>ÑÙCÃ.f6Ïl+øv0M:“Qlìòb*m‹Æã‹yˆÁAŠ¡r‹9?™'Ð&319©¸L -»4‰Ö~G»ÓV0mg+b¶ »œÛd’ÌTÇˉ°Ša'ؖ²‚a±µ…°EL˜Ð4Ää ÅT¹"—àÞV+SLp™ÊdaB R1,öÀT’lbp&+˜© §¦¹`›F&ÂdÃ2~Ĭ‹a¶š£±ºh -14ÎWIrë¢IÎMkG×Kœƒ=Àúh"šòu’Šµuªlb Y¨°‚M€ón[Á&¢ BȶŠagc²EDˉ»*w$3)¢Ê¹i$'°ZJrn)ÚDÍR’Tl5KV°Mt‰ -+võ€ÌDG#CLF± i• +vjV0쪰‚a—C,TXÁ·ƒÉpܑFÿܼF³P)þÊ-LC³à"ˆÑÐ&¤bØ¢€d›ˆ'6™d3™á¬Ó³bX‚ꉶŠa§³Nϊa®øl+–•¤3RŒ§cq´-BœY“&D)ÄÊ¡(Æœ@1\š½©Ø„8²%+vj±SXÁ°( kʶ‚™*¡m֝Q)†eÁ¢¼èY±±3³5aÃâätTŠ1«G{Vlì¢3*Å°Dz}®bØŸÛV0,æ‡jc̊I˜« YKŠfSkÒï _¹â>ƒˆ_˜C N Žm°>šÁÌl"ÑP±Œ%L -†‘b*+Ø fÔeÃ7—ÏŒZÇÝQ)†øj¶ŠaqU(.YÁ¨f:²ÕlYu“!VÔ„ï …ß8—Dr [p ®×ÚÎV ¶¤bÄ0²”GXÁ° ¶ÓV0,ÐaÃbL4Ÿ+! }e«ØX_Â&†ÏmUkۄÙpâÎß6å³ 0Ñ-›sþ3£\îӕ¹ü*÷Bî[Z"•œ@æH¼ -©Ø¤g+›*6ùX^)¬`“À#JV1ìtˆÖ„l¬…›dËT ×¦ê §Z¹2·àÚTÍà¦A*†ÏQ¶°‚mª¶ÓV0Ãe51™è¹ uŊ˜:ÈáVΣwr}ÿ†p£^ºA†Cf‹Ö‚T K–Â`“lu1$+˜©°z&ÒV1ìØæ”=—‰ÎlGÒôâ 'Ú8fr ™¨e`Óà2XŒ’Ša l 'š*6Öº²‰‹:=#††aW椭`Ó·¯¨x®bØy>Ç¡Öó›ìY1ìÊaãyQ;K*ž«–ý¤ÎW±ymÛÅI[ ™SRÀH8 HÕUÎ÷@É ¬^;9÷Ú­O ƒˆÐ{±N#`– MV°)Ç›¬`Ø¥ùti+bÁmf.~Á°lŠRô\,³N'ê ÅÐ87Ùä6 ®XpmW-6HÅL¥Xp²‚uK61¬o½¦É -61¸5«¸ˆ!%‹X†-6š¬`ØÕȬ0YÁf£ s Á*6µ&¬`³Qˆ„ Ë -EíÙ³`K -'«…·ù™j-àNȗÌAÛ¿å³1‰ª^“r[™,g´­Þ®€°•ÆyØIN Z#u“ÞZ/ÖP±±f¼Ê&†%§c¬ÙV0ìÜ6 -†e3¾PV°ÙòӶL•t3¼ÃÄANµr²’X#˜pÁ -$¡¶‚Ir*•@DT KÖÔúq -6!˜H[Á°dpúØ2͙yþ¦Q9Íʹכ'°:ÁäÜ ÈÑ6ɆŠaIsÐg²‚m*–~&[ËO" š8ÈÁVŽ -N Žü‘A*†õ"f6U ëAPXÁ˜G«Ö3Él«–òh§­`X ¾Ã -†%D"☑bs8¶ËLV±¹Ë3…\Žö\0±ºo³©€Ê¹#ž'Ã÷Eœ@̶€Á©–sЬ`Ä@º­mòH˜J´U ‹ŸÕžÃú6[Ú -†¥‡³gÁˆ¦£RlʱÌ1Û*†%Ëb±FϊaY5:£¢õM9R9•c/»¢pa~Õ8(ÇJ”É Dü^hOR1,Þ -1D·ŠÕ–r°Ša½$ ¬`Xl²ÓV°‰ßª›ÒV0,3ÐÉ*6NMí1ª"BÒ¶túR„•+œ@DhuªIp1ù©ÖK¯Â -†ú`³­`&*Ȇ«¸ [‰¶&´†%.T¬‹aÌŒ P@ˆ¡q¸¡ "¶º%%,S iSmØ&céc6U ËҎ3ÎEZO>UÁ°$ÚV±±VÇÊç*F¤n#aÃzA)Û*†eC¬=+&ý"iÓ1E#”YÕqêbô³‡I!l'›œÀjiɹ¥µvŲ’TŒ€)L2Øx¤bXöWce#B’eÃÒ3žÃp²‚a9½éô,¸X©ölVÛ0,þ})=+†¥ ­bT ‹ëÒQ)¶¼ÚÊá9fÅ°Tà;=Û®rLéÄC¤›_; IšlÇU~èk'aSl´+Š­}ڑ+'HŨÎ3Ge-“lã±Êk#Û -¦­W҄lj_˜r¢­bX\U‡ K Ó1+†eMf¾žÒ½iÛ²r8»ó=ˆ·t®ë¥'©­X›¤bc}ÑESÅ°Älì.YÁ°Ø?"NV0l™L²‚a±‰Î¨ò_Á³­`Ää‡|É*6֊ZÊ&†eu`áѳbXJ¶‚a½2.mۚµ¬+Ù¢<|=Àºò¤ò*GLAÆÁ Døû©Ša}{œMÃR d@ѱbX\/‚HV0,v‰%&+׬CVŒ˜Èh”U KyU=+6[’(¬`DLØÖ)†[TɶŠa½æ,¬`XŠ/:fÅæ}ʋjÉß=ipÕ:HÕV®,Äà"DßBÙá@É(›zlÕ +Øà.(Û -†õsi+!F[Å°^IʶŠ‹ò0‹l‹2Fˆ8dÜP°EL|éßÅä ÅT9ÊÓ(.8ÄÏÁ d¢ä08‘ ÃrúÃp’ ‹EcKÉ -6!uYÅ°ì3QN´Ul¬mƒ”M [²Ál+Áñ%+–èØa›ø=ZF[Å°Åý&+Ø,ÜWV°Ša™«#YÁ–ØU©d‹Ú=ê°9swëÀ՞|Ï*»ãàz5ÃJζ6zʀôƒC šIØ^/IŰܶjýØp›ÁxâûD¬Š᷀°ßÆ-Ìá%'NGvm'IÅ°Tµ©bÕB¤­`Xw  -†%¡\i[ÁX“\«–ƒ>·‚r_„2»Ý°,¼­ëY¬–‡$'¹\“Tl¬ùAeÃ"&íX1,W:˜L I1,åÆN[ÁLÕ¯f[Å°äìÚ³bXˆã¹Ša©8ës³ÝKf[Å°”P@ô\0¯§¿.qi‰•+¦œ@ÏÂmp$\ šø݃T ‹°ÒdÃR"b¢É -†¥°ÉT’ Ë(–Ê -F„­bX¯e+–CTÏU ‹…wXp,›ý&±bSŽ%‰Ù³bó³–++_In¤Ò(Š%'i·ŠêÞØõ\¹¢Éàšz\A*†-.&YÁ°Å¥$+¶¸”d›lÕV Kú‰£­ÂØ~œ©»”Ï&ÞDî÷Ûό*ò!ÌG•ªÜPv÷¼¹ÀZ;HÎk3cF¹Þ‹5TÌY‰˜B²‚aIFPv²‚a Ì1YÁH€ä]{VlòqSˆ¶ŠaÙ[`(É -ÆÈ8iОÃåo´Ulæ뚬`Xî$±˜“ K¾§’T ë%Ti+ØRŒî|ÃRžTIºâ‰ìQ–óÏ¡öƘN&PÍ‚áðüÎlڎ.‚hú´zOr áüëä¢-â(Û „ÃÊ "1,³Ì­=!eäIö)Ž -ÐL¸„p¬8m—ÐtÐi'Ð\“¹µ˜Ÿ+€lÛ.la‰xñKΐ-ÇÁˆÕT†ºWÅíWÆ$B5–j“¨ˆ‘‹ô­‘‰±B8ü9ӃK‡¡q=¿q>@J£qrëŸc€•áçvó“_“ïd‹:˜DØë®OÖFáXÏvÏ´q áðv‘´q mҖuçƒg§Ï?Çà+ãþ-˜Dµž êä®R魔EƒÈQ>GõöC{”@8–¦r áØxr= µóÁsº«Ö?Çà+ãà &Q|0>øÚ¦Öt­k .4ŽíÛ¢àÚÄV4I.¡MÌËfÑ.!e6qû×ò¾‘l8à¡WßÙ^bðú-=±ëÀ:ÓÁë+)ˆ¯/ùzýæf3Ø¿üj¿;mv§ã¿¼þ‹ôC,¬ýÇFÖÏËÚÑ˱uôËх5À¬g¼|üf³ÛÖ7ö-å‹ùdZ¿ÿ~÷v¸]Ÿ¶ûq$3óѼpÿ?þ3²q½úŽV&êYÑKˆq™h™*‰L›ê×듵!Ïu.ƒ­K}îp¹¨S?]×/™ó´5Þm>z[$m?lÇ*ꔼ—Q;Ø¿µŸRR\xÌÅü‡ÃöÃþoŸì{s3íYÿî_\¬–ãˆh]d/íþÓ ÃIÝ(:’ò‘R ÌI½¨SxaC&›ÍëÜ|¬çe›þ×ç­×֊S„Ñn}»±ï:ʸ¼^ïÞù×8Õ° -ePԆŽæ¼:Wä¹¾¹ñç2èÅÄ^¤Ã–¿†Y‰y9¸#²ÉC‘ýv_ìCEvµß¸uá=þ®% ®¶oßn.à²Îiðö°¿õ/µãÓµ ɒôÈþæÊ~ÇwËá²Jéw÷»÷oÍÁ…Eª½þìª" âTĪ¦EôÔõwf+/î¬7<Ïd¹*Ó;3¼/ÖÁÇýá½÷jÕ¨éWswcSÔK?êHlöPb_<¡÷»j–˜TXÊÇæÕ¤züàzçE$Víúê_ý;Îøc¹¯wÅðð–ñ»§>b·?•eŒ¼«Ñ~ñ*®ÒOÕçEû«2;ö5ÓE[k8éÁíúý¹¯ºÝO|,VÈJŒÉ¿®ñƒe?‰¥Øë ˜þٚ=îï‹@±ÁḚú€PSœ*·‡V-P/·¤Û·ÛKŸµÆù¸r?]Š7J;ÿè.ãÅCÉýà!‘Îѽ9ì?‹ó¢‘ΫwÒ}ÎëØ¢‰ü¬…\âðî]q d\‰×%b?!ºúÈIºZ‡}éx½¿/ž“‹B™|oÒà-Ûà÷Çâr)¥ÄwÙËç⇳ªÔÏé¨jƒ»:Œ^œêò¡6¾/ÒÐ؈€Å^IÕ'͂ú¸MRƒòÍör³+%§¡í=.uš·›Mñ”$DópO†µ~³¿/y—:¡3'ÿq}8¬w§Om=-Æ-ŠýióŽµvð\ÔYîdr—ð¹A¿ŠöÌÐWg¢}hÃT¨†´9ßl‹s TߝöÖyåú¿ÞÜÜٗ”«2‹ù´¿w:niM¯ß¼*½Q7nÏ<³Î«½ ÆeÍÂ>g\_ʹ_}[ 7 3%—óMFÉ'e“ñý_ys“» w2_-iûÒùÑ~fº’Í2d²É{h,?^o/¯­‘¹‘Ø!TÇèkÔ^6m»ŽuY –ÀE¦w¼¿»ÛN¦$ØPޏ+ðˆç)kçb2úšÛ ÍËñp•~‰ ô4yìïØlžpë&)âUº˜ã'ÒÔ[”nŸ•T™/‰ƒùÊÖTf=¢¶¤á‘ÿpâ}‰ÅÙzݖáAcÛ#zì‰ÿþc ÿ™ÝEU5"“Ë…J:Ń¯,–¶TØT.ÔΒÿ3ü…}‰Ÿ•±½Ê¥®6å‘="—¾„ø'‡Ãõî“ç6ŠMẏw›Ëm©‡tBàÙø¯×Jå˜kÔBUã?÷Þää® Þ™Y>%èsgÅí<^óŽ/šãS7]}Y™o»Ü쨳GÖ³¾º:lŽe¥’žD‚ñÓ«Ϗá}"y仺p»æy¶8SïÏcž%ºgàîÛ+± °D×äL±s2o1¢'a»^ßÝmvüص̽RÎxË -|{ã5¼Îö¿O§ë+××E£=ÑȓȲºøiÛr̜~QtO…tÒ’‡ýî]ñ:ÜÍáõº¹ÍQò†)Í|[ÞP|©ä 9ßnßÝ[È(eÈùW÷óXÑßýzQæÕÈâS"sg}¾2kšnC¤Ð—u×M&^åÌ8ßmÚ¾1wõ÷wW뚚Éâ¯Û£†S=ÞтdßAÃa½­ÁGw°ÇÍåýa{òeÑÉ#·Çã}]åv½«ãºòU<å–Zw³O5&êœ?ÕñK ®¦p;ã\ÓzÅéÌ£Š–‰Œ–Jžú¼3Ñ¿(qƒ¤ÀU7ߢ -6þöYá3¿+“¦tÜ µäŽŸíuëÀݸÈLî½2Í}ÖKYT[=”lÀFÆßÈ=GÏ͙dû‹ \:9ë­'¯ÿïo_²UN›¦ÏÕçÊ©r熖[ö'a¹VÊÞ¬½FËî5+?=Ù[íâ¹ÿØ.K ځ¬..ôYSMK^Nìo“ãÂ×õ&….ÜóÚî™ôûJ5‡­‹ Í¥îgnHø+ _l?±Øžó¡ŸßOíF¦²Œ5ÚW¾y,œîwf?Ýbd©Oêñþ™q×àGÕÖÖL5¶P¥H¨ìÇínü_¯~ÿÚ×!{ϖî>GŸiӖ&w7ÃbÈÊÎ/Dóì Ý»uyL¨¶ q Iao¢Iá¹+éO-0³³váê­Æ¾ƒî?ÿõ¾Ø25DþHC1Ñâó8æ®ÛüÏÈíQjTo•qa÷A<.iŸ¹-ÂÞb~_&ô˜L{"__ÒÎo]ôz«hé¡M²oïsº¾w‘Ûë,ívè`ýa_Å«®w»»Ú~Ø^Ý×[»lââÌో8]ˆë‡¿D0lÙlG Uòåe5æ²ïü¬àßs×ù n}ìŽwT#v'OÁy÷j¶ªžpàd16NB–_`;rPD"ü}Ñ<µ(ñWN-~Ø/7ÜvØmØ!›9Ø_}xäHDžòÏù8Û妃¿jz'ýóÀ‰+k{ƒ>/v{_.?tR„ÞÛ_™Èñ¦ÆW6£­¾9èÉüÝÂÛjk-·\í?îŠ1èŒ×}wñ®ëþDÏÀzV8&; Ž»}d.GdËyôyÚÖz¯Þøëé± ÞEÊkq³È¢Œ—Sꢁ³’3ÿÆöžpè£í\DgÙ·WTyiÀ¦Â-þÉ´zéÁÕæfý©¸y-hoKHÖ»Kwä…ÖœëÜð6¥P^@Àf2ý¿Üßڊ-™!™o”&{җÊõÙäU™sG•å/¶T6u 1ЃÉnõ™å]ÕNn"ZÚ¹O_¡öÅõét÷o¯^§qW^=¸ØÞ½r'jÿ7%q{¿¿W{¸»¸{õÂ/ÝÛí¥ÏÌäiT¯½1+©$ª{èj~]n¾aD±Ì¹2ç‹R¶ÇÓ¶~óå¼]æ¥z»;ñ?ûµ^ðè3¹77ûË÷v’S Œ„Ôvªô´=ûW£‰ï%îDuÿ¤£™'U*÷on·ž“pH²ˆª¾·Y(W¸ªÉ@¦Ã/Hݞ+‹& -v“šòQÜ{h}èIҸƺ#ÓM\OùþncœTG(ª·^J„ám¾°„ŠplŸ]þ¢ü“¿0Æ˳åý'óü8÷¹ÿy0^‡©‘vð{êÝéæÓàÛãûÍÕàæ·ãNg­ 6P/Ü¡£ÕÖfþŸ¯¿ùã7ÿ5ÁÞQendstream +539 0 obj<>/XObject<<>>>>/Annots 84 0 R>>endobj +540 0 obj<>stream +x՝_s\G’Ýßõ)Ú|™ÙğFð‹Cž]ÍÈ­µ#:äØ—&Ð$z 1݀8úöþefUæ¹¼·)¢(y»æÁéª[•™••™U÷êï_\œÌêÿlßÌù§§³³‹ãÙv5{ýőÿéhvv<;YÌ.oisȏòÿüíÏö—Ùbqrp>»-ÎÚ¿ofß}Qèvvr> ÞÎÎçÒìda=žÎŽéq~qpҀu)ðvvvÈOâ‡Æ „;rogÇö<€µx;;:¼`&E*†=9²‚aç>ãìX1ìÙé`HŠ½8XÈsCó9ìBpPBhÜâÌÚ%'NLêI*6vqp4` ÃÏæÊ +†=92%UςaOOLkÅ +†=gT‚a/R|;;><ôb:9e0]LJL ¹$'û;39$'áÚp’T Ë߬`X¦-U[Á°Œó-V0ìùá`PŠÃñ©™p¶ 1ðÇyŠÁA‰¡q±F’ؗLq¾dZ»X¢É d¨GÇf)I*6vaB¶0¬OAXÁ°,%Ä[mޟ˜ˆŠl–²´ ¡MóSáF”ˆ¦‘œÀn)Ʌ¥´vÍ2’Tl]œÎÅ +¶‰º+ {6·E^¬`ØósR±‚MHÞ›•›ê²­bؓÃ!+v~>˜oˆ”SwPâoÜÂ~²HN ŽÛgšœ@&Š!à$Ãb9©XÁ&ÂcófÅ +†½82ñ+ØDhΧXÅ&‹!+؄´0o–=+†Å/²®’už^˜Y7 "ìÜÂ" “ãACÅ° B éV1ì¹­Èz¨bý!Vpˆ^'j¢ïØD8•bX6¬cé9„˂΍äÔA ·q‹ck—œÀXçE@¦‚—DºÙP1,^ 1+vn›¼°‚aÏ|*ÕV0,V4èY0b8rg[ÅÆǬØDxȚªQ)†=µõ(¬`؅Å +†=³HDXÁ„’‡óAϊaNÌrFŠaÍ +k±æé™w_SJí;µÀ/~hœÀ¶qç¡gïóÜÜYq»¹äóÂ\ÚóŽ°Þ>2{ b3— ›d6Uæ¢5ó逪­`ØXaÅ +6Öˆ´l1·Õšmò=c.ÉƊc{µ Ù#£S.^ œÂY "\A\–¹Èâ"^ÛS‹ÈD†òŠa}Í+öäb0 Å° !T[Á° W\±‚aÏNÌU+ö|ØÖ „mÖ¶K…â +¢1‚W¤ž¤bXßބ ‹µb ÕV°Ù‚%âÅÆ4O,âè^ÒAM³q½Ì“؂™â0>ÄÚڅWÎv¸T; ôÈ*ZE*6ØA…°‚aÉãÑI>4&Éf\>ÁAM²q±&'°ï‡Åùzlí<ë™''ÁZ0‘$ÛD.ÌV“¡éfp9wPCmÜ¢µâº\yb¶C®ÚpÎÍ%©–¸É+–²Aïɤ˜åîçÕV1,˝õ•=+†E ú\Å°8?–Cµ K~ª3RŒ3 ãÒ¶Šµ³šê9ÄOâAïÜA‰¿q±¨’Øþjç›^@DÈÊƯeCŦ×j±‚M9–çI[Á°ž¦+ØXKù•-lÊñŖÏUÊa±þÆ1¬Ÿ+ؔãGµ ‹·Ä+‰b“uåœP#I— •Ó9J㧳â¢+v'!aa'B*†›rª©bX_ +6ñ›õ +˜‰™3)V1,[ᡲ‚a•ö¬ØDh¥•ê9Dè™^s÷'J„sƒ.N "´³8p9 W!¸í©Ö3[a›¬a3MBB˜SQ {jR±!L-·ƒ%„ÆùÿWœ@&j«86 @ŠT Kµ©ä#Ãb­è³XÁL……ÊT’Ul¬%WÊ1hÏ&–ŽaÙAtTŠñ“”€Î¥gÅ°¾¨ë¹!`º•9(7.Ì*9Ýʒ +kíÂʊs+k\œiž$©ØTãÂ/V° ßR i+Ö+1 +F€$1XDö¬Öa›j,`V0,Q0J¯žÃbõ:fŶÁÙ^VmÃR Ç¥eϊM­V Ö"NšmŽž/0µ +$T²X¶8]­Þ‰µ µ¶>YÓýÆ ô˜cÍv¾õ±D™«HŨF¬Ælª8TŽŠõâöì.EXÁfV³V0ŠáPZYÅÆZàWmcÍp +b›[HÓA ·qø„”œÀî}“‹eÒÚy‘¦Ú d"X ƒÉ†Ša™6T¬`X¯è+Ö+8 +†ÅéàVªgÁ°žÇ +–³|~µŒx ìTLŠMønÙV1¬×»«gÅ°œV¨4Bq\²² *ç ×8L NN ÖmYYq™¨Ÿd©ÖCDaë~;ª–$Q«ØØ Ûª­`°¥þÅ*j[aÇ°~'m›€ÝíäsÃbð˜L±‚a ¶q=Å +†Å£ Ú +6gx4˜Q(–È„P¬ƒRlãb &'źHN )Ç2u+o{ùU±‰ßª +†õ([XÁ°ž‚ +ØX3Ve #$vDÜVŽJ1,ÅrUÉã×.$%¤Îyˆ[\A/©1žä(©uؘ\°õyDڌý&©Øh§: +!` Õ¡t ë¥+aÃ2ŠÁs#"ŽPXèÙ³bX®•XÁ°¸$íY1,çLõ,û%6Ԟ›uŸ™ug[Å°˜j-V0,Ç gÁ°ÈFǬ–bã ­`‚C²s}®bXj˜bŽJ1,†ªÏU Ë|mòßkÛ0cm…6ʌ )9˜ª§É Äd¸¦‚1&©CF±Å +†åp+Öïy+–#‹Ás›©z“=»Žx!R sWœÀ„çAHoçQGqª©vn%}aÛ4íhSXÁ°îð„ K.>èY0"b?UV±­W ú«gŶ^-SV°±¶Ö‹ á{í°¹Òc%üƹÑ'WjûpQŒÅÅ D‡>Ô| bX¿‰VMÃ"„CéX1,®„iVςaq%V0¬IÒV0,ŠBéÕ³`ÄK”ª=+†EÚ i«ƒV1*Æ¥!+¤bXæw"=‡Z¹:ŸaıƒRkãBÉ l®¥Ú¹k ˆܵ©Ö]‰°‚aݕ+ÖkX +FH$ ˆ?Ü&jGÝ~™CÜaððéØ!6jL‚Àî<²]8Ö.¼Ermš-U§ŠaÃ沩bXòßA[Á°„h»Ú +†õDTXÁˆÈc©bÃKa¡Ù³bX²o,4Ù¯ïø]¼ʎòLN`or!ÞÖ.䙜@¦IlÁP“T Kduª¬`X? –¶‚a±)„_= †õ"¶°‚‘×k‹U K‰fÏ!@²·ÚÜ”KN``r!ÀÖ.$–œ@&Â"Åè“T KVŒ‹ W¬`‘…ËÒV0Bàj6Þ(Û*6Ùሰ‚a ’ð‚ÙÖ½<;92_1þo_!7Û¤Bê~½Ž°ËbA»¢/·¥ú™;ÚJÎks_œ@æOô‚ʆŠa=V0,~AªÖ¯{H[Á&Yß1ó¹ŠaYùh´XÁ°íñ)Å +†õ‹Æ +6ÖRie ÃzJXÁ¶sÙF±ŠaŽJ1,*e¡æ˜Ã"l¥X+åYx™iÌZ +;ƒƒZˆ ;ON Êñ"MuªØk%Ha›b-oV0¬’„Œ€)1Ñ”bX¦ƒrŠlªs+ÖoK[Á°}—¨ J±)Ç$]mòÑh[Å°81L5G+֏MûŠuPªkœoMv£UnÄOÚÉCq0CHÙP1,ETl´XÁˆtñ'ëƒ Ø Û9ÖÐyó•Æ $ ±ñT;D^vvTœ@†J,u$¤bXÆvª¬`‚¹žê8&‚©å¡”Ùa†|Ál~²8÷“#‘â|"­]®ëŠª_9V°MÓò1aòVO„iʤƒ³8gQ·€2M«4'ã2/Uœ@è7 ŠTl¬Õì”- ë'žÂ +†%FÕÇÆTØ +ó\ÝöÁXÔaz#7Ãf’ÈT¬¾Qœ@èåö"ÛT|8Ù­bXO¥­à˜ +Z©¶~ÆYxv^¬bcÝp³­bXj:!Å°l«V0õðÌœ=+6_m7p„µ­2.tæ7 ʅ9얔\XRãÂt’ˆ®&IÅ°”×a±‚a¹0ÊD‹ Kp+–e‹é+–øk*V0öóbÒíiϊa9ÖО›ê|'Èç†õ“+d~n—ËÂñzp]Âkr±~ßA’ÈDCüI*†õ¦©–ab+ÕV0¬×“„ ‹@RµlvûNV1,Çd’ !¹Ô[òi ¶äöá¬&+\Ahu¶â"À!'‰øMj¨ØDäË8‡£6TX¬`Xì•-ºXÁ&"`²ŠMD¾nŠ ËâWA(†¥h2`òzYUÕ³`ÜeRVd²Ša=†V°¹_7ÕV0,ÊS…ÒñÝY7Ç[\ˆ±qž!'°ïÖÙÎæø)â÷ƒäj¨66Àlª8UWl¨®è‘áԊŒ€yq&e™feÀÖhl€1ÑƅKN òת¡b›ªÇ‘ÙT±±¾{ [–C!¬´XÁÆډœ²…a «˜jµ ‹X°Ãb#&2\eÒ0`-ÙV±‰Øª Â +6¶ÆhۜbXf4èY0,VªóU KðÎnZ£ {L±‚me¹·JV1,û­Îȍ?•Çþþo››Lc|-$S¨-Œd|]´6 j/³[o…З_iÎFMÓfÔÅ„óŠIqÍ,ÍHΧÅhr7ôç´ã)R2…èŽýla×ۙvA8œ‘rá(3I»‚pÝWŸáøó©´+Ç><® ¦àÑÉ>Â7J; eɬkû¿S$Á<Îâ“>ÆBÓVË6… ß»IJ œ»¿â +ÂqD~R] +´IÛ!qµ+h“¶´<9pî‹+Gí‡,™lrMXv9»¸‚p¤Dsá +Ây*]í +ÚJ´%œ@ãìõ=áÂùÎV\A8MŠ+Gà¤}š¡ •ûžÿ;ÞÊ|®Ã~eL!‚;N¦Êq©&%ÐnΤ¸‚p~mª¸‚Æ Û„cqóž>H(.Ãhœ…ÙN )Õ2áâ +ÂȈP"d?fÎv¾ª¼0Õ"Jÿw +¹3fsÅ$òS$ûdšrñ[úÙÚDF“”@âùKqá8Ræ=êÞ¥@8n¦ñ²jráü­§â +"܌´çAv¶Ç +¯¡öç „C†Ê„ã‰ÀÂù5•ê³ ­»ü”œ+Çë¦ÿw*§1(›×A,üv$bX®”L¡¶6Šñ×>¬Äè™PRá¸!& +„cûáš> p^ê(® âðúNráæÜW.^»èÏh"ö·k:çbäm‰ÜLýß)ÆÆ ?î¢Ø¯Œ)„°,\O¦ ˲ؤ±}I3&,+V»‚ ÞßGLN {5÷)û š@üÒRr3YT»‚pØ*·^²]As¶“ç{qáØb¸öÓûGÆ)sH݅TDäò?^¾ûA¾<øâ+"i –^¾fÍs³âØ\$ã<:š½¼ò/Î^^þñåòÕÍj¶y=ûÓæîau÷°û§—ÿù…5ö–Ï{ÓçŒûôü‚¦<:°Ÿ[ñ Cº¸úãìÏ«»Õvycfã?¬7wÆQ8[œwðÿÝÿ…`Λ`ˆ¸—5{n~ąbAä'óy›ÿ÷×ËkÅ>z~х²v 71Ì®[ä™ò¼[½µfˆ¼šý¸Úîš9;<ìl^ÛOYÈù€o·ë7ÿøÉÌ çí—ÿÝÿppvØF÷{Q€Ëõ¹ß˜ZÌEžÇnfïÈÓge™Ïq—ñ³6Ýg6=¯Ù¹[¥Ï—ˆ®Ïöýõ¸õÒZ©)ß-oW.(²É“nߗ×Ë»7ñgÊ(ÃìC¹*úå͍?–QóÁOÿÕo)æ&Zœôé鱈öd,Ú¿lÂäT´W›•Ûª]þïëv¶ÇºfWëׯW[Gïiž¯·›[ûã@g×.́n77Wþ;¶²´äÿùx÷ëÇÝÃjÊäâÆÑo'Ö&M»\‹4jáÏÇÒ|ÂÂYÞ³û-«Ö͘½>­ldÆ¿XSo7Û¼W¢¨ùy[-¿¥™›âÙ`Þ5ÓÓ±`ñä¸ C¸ä·ÍOÛÇúšºéå'‰eç—WÿÕÿ¤þ~y6ÌGr½ü|ßw›‡p$rì(Ÿ×k„ìíÖ÷9k¶Œz1–ýŸštWÚç n—?„¿äÆy÷—·ëÝßùl)@—ƒ}ÙwA^<å³Èá^'݉}·y Á“UðÁ†þ^ûÜ]®‰q֯ח>?*Tçݝÿz+ Éؒ¤ã8Ëøûõ‡Qv Ô7êÙ×6cÝÉ®—?†UÇü°±Ÿént¹¹{½~ó¸õߒ¾åָ׉¿Z°…â8IÛ?€Ëf +ÖgÓÖã.†$Z‡]³eþf^¦¹ + feÞçcÑÖÂþÓG;{µÝ¼ÝŦÆUӊÏ&-sjSÛõhB—!ßÝßX¹‘QŽb{­>gÏêò±Ÿd 4Ùì®7±¥R̶ϏǢÙ҄ÞöÐ͐"ðØ|½¾¼¶fìÿ•î5çíށ¼°¼÷2œÙG…&»ÇûûÍöaåñµìž]¿ŠMá N9–/;ügà¦4à2$ f “ —ì&Sê)Ùmî©ç<°M™T‰NÏzP¶û‰tì6„J¶ÿù½2 ߣ_÷lScþœkò¡€¼cۚ +zGŽåöзë7Uj;eª·ãÐcu»\{$H’V{Ï卅¯.O‹u»ø?§ìö<«‹”“ s^­*Æå؏é:|œ¯jŽ»ú®·7rÝîۏm{ʄ£êFq`rBÄã ¶ZOû¾gVŸ÷ÏM†ìò§D%É5¸ZÞýäa­ pV/f»ûÕå:JÃVÆÿĔf¼Ë“Ï»2-wïÓûÕÔòÿª€ÄFØçØÊ'#Âa :•1xȤȺ/C^^]mW»ðºìE]‹Vû%"û½8`WÐ>sŸH‹GæòiÌÝ#K5÷©KØ\'Zýêòzy¿ºãwn öºo–@¿l)=¡iƦSª_^¹‚-õï‘óÔ¶êÙM,T ¯›‚™Û¼=×2œ½ÝnîÞÄ~ÁùM÷~½>BeöñËÁ¾9‘M4öfþiP/3¡jdۋùîF¸Ï˜™øPØSE W«®$Nwë3væ«(©â”R#W·±år’R»ðý²Õø©_÷0n¶¼y ‘~ã{¶]jIÕìñ ï¤™ÛÇ;3Šf§x¶ ӊóQ”ç¡&¡¸ýýû¯4AqÕâ_T‚šÈ0^¶óETÒçï—t¹º÷݉*oÄÌìŠí#‚.*W½€w» +ÍØ!O+ª~{³Z¶Ò!n´oÉ7ïÌ,sËØmÚÙ²†v㎠¾u¦;ÙÞñÇh~­T&Än·¸±O$%S‡sSL³H_²Itù’u‰irë›SŒ+7VNQSOXS‘ÚZ¯B9$%5€·ËHÄõñã:å8!@ŒC-£ó¾¾>Ö!¼¯]S—&í ¼ÖÀDþÁhEp©ÄNic·"unš^,‰}Ê ¦»RÛ/VÌöšâÌ5‰½ôh…›÷`¦Æ2¥¬>ŽË¶ò¾ÔYß7ß'«çº”94’)›Ó%0[^^rü9ò^zÈÿ«šä”˜›©°|ÆDž°'oy¿!¸Er Ðã¡Ù«ÕÃÛÕêÎÿ®Õ‡©nžýiùH°õ¸‹‘ÝNGéà³oVWëÇÛø!ÅÔ|ÞTøþìË«Y-8*óóކ7õ/rÕ\­^/oÚé7©[ÛP¦ø³ Û r½„ÆãÆ&:u8øÝséiJ¤ÝEg¾`Ué¤'Kž£c°V®wïgÕmoýçv ipaã¡_ØЛSYáv¹nçÒvT޺ܭ.·ë_mönOFõëÝÛÌ ßCúYmLýà̌ñùXCSÇh“þq˜òv±Ë„›Aàt¹!eÓ +§ûâïôÂÆ5Rͳx‚›4)S&ÇÞ;çå=ƚïÿ·´vFŠØôZ2§ç•ë®w­x¡—Óã°R÷•Æ!éË^JëF6›8ÿibº:ȝ ïMÎc&r§¿~ù¯¡0è_âz>\£¡!ÿ¤™”,, o¥²³ÍÕҏá¬8ӝ$”mŠz»…rÙød¸Ýîܜ}Rb>õåõêò‡ÕöÕf¹õÑðQ‚E–£î—,¹;>¤6†Ñ³®6w]ó³^Ö{Ëy¿kLd·ݨéev0‡š}CúpŒZ4%ñšÅ`Ëf÷‘ªŽ¦v”Ƀ†ûjså~vp(ðñó·±h¥ê)Z +«ç’}—ÿhî¿Âš8©ÚXP‘:w Fò̈́æ'sÇõ-%Ë^4ªTwº¸]Ýß,/ÛY•Ì¼Ý5qÆ=Z «„ÅJqÚN—j©æ®0±Tû極ß÷jÎ'«‹—JºÞ¦opÇÕ?ªæ•Ç]·Ë̺ñ³¶‘اJÔÛu\éÔâýØUÈë¾=Ÿ«:7?ŸSä±ë†b -‹ÖÕ5U.Û·³P^vkÒ« OÙG¸Ôö#÷¬­'À-0Š×4ôÍ÷ë»ãÿõâ__úâ½¢ÍÊÜ>ï?C’ö="+Y‰$[ +¬’üØÝ~29Û§K´\øò¬ôL†¼œ#åùªðږN1ÂU¡é÷䥩ïþþöh/#·²I¨æàsa¡ÿoÕвcUÀ”)VÝäQÞTÀµOãsâ>†Ýîq5iMðüÐÿ$!ÜTb÷pýè꡸S÷Җ?nš&¨Ë÷cÕÙúîjýãúê±½ ¥>iß]ÒAî亴Ïuå~ôâ +5½sRGÈÕRðŸÓÒ>Y¬ÃyÆ5Æ»Ý=5Ÿ»Ï#Èù +_ó;ÖÆ6͗ŠZ”ôÑSÿ ›—yçÄ×òkßÇz™®x÷ÂOº=çOXú¤ïùߏ7›;*Ëx»Œgÿòû¼XPËÀUÁlû­¯O џé¢yêü÷Å­“õûýŸ¼b²[a”ÉÙSx "ùí#'oþl©Lúª µüåå7µ¶Y±òKõ³\S™v3jûxÆ !Fýd2æZj¾_#'ë+Þ½k¥dû\E¦u—eßýHÒ‘NÈt"¥}ØÚËa‘,ÊÁËnýЫ8¼?Ü+¥ÓBùÄu×I»}HÉ^¸Ì³öˆþ5ƒùf½»\q™÷nEIÒô@“Ó.‡O<ºÏØݑo­/¾Ê£vâxyƒWaÂè4%˜ò¤·íj¯ž™M¾±oËÚ5‹¼8aL¾A·»¤Ö•u\mÞÞõÍ©<çË©W–®[ð-YÒ8:á2—¯7H¯¶žtáð*‘{Xǁ¡E݌gãûÈ]¢ì$Ýë|°ºCiÏO8µô°G×c¬¬QGù•”"#lÞ aŸÛ­¯8bâ=s›·}ªo,³«ÕÍò§~)Þ?Ølß¼ð¨Œaf•d6 ÷îî_<óEaŸ&ìu±§Níü®Iç˜ëv'«Luâ:À?Ç«! õ³Ù¯•´5˜9Ûî¡¿{G6ÊÆ}÷ÀÿÚ¯­†•‡Svóêfsùƒû·C¾³ø›'ÌïȺÉÍ?ß3ðÇO<ÏÊÉÑîñÕíÚ³-{õ¬›gS_5 ˆ›aQ÷pïŒø÷»Ô¨X_Ps-k›8xŸÚŞ"µkœ¤Û¤¦™ûÔ×ßÚ¯ôتÝvAšü$Pc¥uÚ{ ¸–'NÕ§êû¶÷7Äï|¹$"x^*Î5>Ú¡–ñ%BŽnjø¸ÍÝO·D^áËxñ¯Ž'ðÿrÔ?ÜÀQMùï ]ÿ7ë7×±Ô4@š¬û5æØkõ¢Ü«íj‰!å½,µ¾Z].[r9(Ý_SñmU,{K²gðëw¾ô¢7—ƯP²ýاf̎‡<Ã#Ïé26r¹Øwì¿ÿÒ÷ü_¦ž&qûrÞå%è±È?Ä:?ö ïÙåòÒnû®LH—wfÓG€ã¸†/Z0¦/ŏ-ß®^¹×ÑZy(ãð¢¾ëý2!ïoÝÄï£*TÎáɧåÓïÚF¯oïN6^¯·«·ý»-\sêS}ˆšQÊÃ*Ît)ad]ë6ïW.>Wyv ãîGÞIùI¾&Rþ‘»œ¬—Ü,·uK¾Oj¶º½o×)0¶ü+õ>.mù*×[v/ì/ú¦æH'ï=jg¯­ÛrASG¿oóœŽkâE \]$eïÿ¢Â«v÷S³VNC}PFùe­º²—!CYçäOŒ2öíšugd[~g7c|'܋ü?þååËo¿û2¡S%«ðøÿüí¯±ué÷¥3°ÁϺ¥óŸîdSÇ×ûdBm;ü c­O9M{fÇi«møjþ{}Wô­C_/šRš_F +‘ëQçp+l_ÒÀ֥ʉ¬f´„ïú ¯´Œ÷ +û*‹©vxÂq×¥–±çe>JÈ þC„Qv6Jû®ý£øþ/.›•E0qp>%ϧ„Ú¼ÁÌyÐr»¾ñ)rmª~µÞõJÅ` 챚˜ðÁa:?|Ÿ´E“žeUîq°*&Nš¿¿Ž+“ö†éWSžµùÇ[SÔN½nñΛM{äAyʾMwë¤ßö% ÖcUy¦ÎÑÃõW÷ëK»T±_OÍ?©ÜÞÛYª}€Øî݊MN:«†BJ¯ŠÌn6ñ¹—Á­$¾ÏòÖ÷0ý6à>¡>»Ä9±+ƝU*è•ÀL݂zŸ{y³‹2ˆz먝áWòÕN÷ú»?ýÙ]Ëà¥u{]n.ÇÕߎ˜,E Ùh»o³ ÿõœzI›‚×/ñӛ /Ê¢È'WïÓȊ¯Ýµ€Os¿ßÄWÕ¦Éëª#gmuæ›MÜ}ã[¬uH2ù ½‘ äc +—¤)ÞW/½f0Øêå·ø¹_¡dÐW ߚ¶È@VÍÄôH“'m]B«Qy¬e`2×c•oWۛ‘v—ÛõýC\ó6ù´ãç©Bç>½·ôÓºÖHýð_ìOZ±þw¾z7­ä‘AñÛ~uYîþ ׇ—½;^|ZwwtbÃ|~Lœ¤5˜©smv‡ +jï)Ûëk®A¸ì%t¸íßãô¯ï•”ù9ç“ïÃêJšLèöj%X—À¶-Lïx ”ƒ-¤Ë™ÿr›\JFèçÙ_ÿ¡}ÍM>ã3Ûwš2éJö‰%®ð{P;(â<ûf}¹Ýì6¯Û] ö“.ˆ‰ã¥øõw—?¸‡fÙuoF*{ÇÔÍЩsˆ‰ò;ÄëûGû¨Q¼.=8&š(ƒk¼Üþ”²g¨ÅN%í+ȯgÏý¿ÇÁÜ\õà?¼mß[jœ}å§Kw7?;Üý°ºšý›5õ·tOìÅ!kèìÐ?Š¼6ƒÿ——_üÛÿ©Hendstream endobj -495 0 obj<>/XObject<<>>>>/Annots 103 0 R>>endobj -496 0 obj<>stream -x͛]sǕ†ïõ+¦t³NՒÂ÷Gʕ-GkÙ®ŠcGbÖ{‘’ˆ@ €Rôï÷9§§û¼C U’ÊÙ8©(|ñ¢{ºÏwŸiüãÙà|9®âŸýM5à¿Ó崚/GÕ¾®®Ÿ ý£a5UãYµ¾c̀/Ù?CûçõwöI5›,ù÷®ZœÚ¿·Õ›gîªù¼|ͨñÌàxz¾`Ôtt>mq7._4Nà]5Îg2P1ìtv>TV0ì¬ûPÅ°óÅù\Ç -¾«Fcߌ¯>63±˜¼±™–[ŒlE…È#‹©–G.d¨bÛÌä|©¬`–;ð­–Ç*¶ÍLLˆÁ -†],ÏÇÊ -¾«Æƒ¡)¼ŒU ‹’u¬bØÉì|¢câh]•â»j2|ô\·¦Á’ ³„Z.™Oá"ÄdM…T ;rk -V°©gaf¬`ØÉÔ¬)XÁ°Ë¡m5XÁ(`äþUXŦ¼¡‰8XÁ°Ó¥™T°‚aç#3š`Ã.')6å¹I•±îÎÓå k@&‹\ flÁ Dhu!¤bØÑ!ÆPÅ°¾qaâ葎 »4[“±‚“ˆu¬‰[XÅ°tQO°‚aIUˆ8XÁ°ìwV0ìÂM*XÁÆZt”±‚Q÷ƒU K©Š±–™›j»kV K©ªÏuŏÉ×~ü2$P<ºp&qár®°Dœ@”3²€¤bX÷haÃzðV0¬ô…Œ€i“Í幊a½º‰±Šaç&Ba›ê¬u!¬`Xz¾ce#~ÂðLXŦ:‹1sR²”1c¡œ–óvhp ·3“C'z¦ R1,¾ÀbËPÅ°d,X1¬Wd2V0B¢¸Ð±Š“ø;,âÏ!ÑÑE9eUŠa x('XÁ°K -†Å€:cÃbÖC+؎uv^‰™Ã&µÇª,ŽÙ–H³¹=Ձ)6)ø\r¬ëY„âg½ªàf¥—qIé휭’ ©¸(=Ødy,ÿ¿‡3–æ!ûŠ±‚Q+ŠCø…U ›T¬`X’JV0¬ø„ ËÛ c£Vâ>WXÅ°mV0,kTi(†%ÔvÆ -†¥g†9Åsc0C‹ÈÁ*6sêª^1ìÌJÉ› ŠºÎs»µ€¬èks{@³Œ Ž¢-C¸¥¹`pQ;"Dí…Tl571+ØLÆE¬`TG«µV1¬÷¹… K6Öç*†Å4uCŠQe(¦Zž›DH_3²¤ƒęó´\@DhG¨qáâ¯Ö2 -N "JÚ.ÃzÕCÃrô¡ŠayɀýÆ̂Møne…U ˱ V0ì̳`°‚M¼n0…U Ë~1¼`âVURÍ0ݶ°÷lȑéF± ãa­µ0¢V´@kî–þ¶q³y‚Ȩ~œ@žæ+ R1,¥Ì\†*F|ÞŠ±ŠaG–„l¢·÷ -F|ž=ƒM‹Ä»Káo­)üÄz-û'Í°\6S¦IQyq³‡Q¤°‘ŸÙPp™Ôo™&å \Š!;§×Á~DIjÔZÕÁ ´I­<R±)¥Ë¦GR’–>ÆÈAqûó> -—öю,ÒÄ@Ŷ +… ëHXÁf‚Ulv`Åd°i3~’mÏîé›i9¬xÌÜvä5νÄ_%µ^â/i™‰›s¡² ׸I!Ã"'$¬`XZ–Ø]°‚a9¸°ÖÂúíÕ{±‘Ê3DZ{J<°/—Æ‘ðŠ¢í‚Ä" 6A`‘!¸?^Èõ/5¨¸2öâñbP]\û‘wÀE®ù¤º¸ò;b|¼þêbu¹­«æºzÙìŽõîxøÝÅße¿Fæó°Ä¡Ísfgg&:ÙD_MÎm+™r \ý¸9¬ëívµ«›ŸìÅ«I;”d;g o±FièÜÓóσ_®v6eÞdn—ÛlŸ÷›wÍ??ØçT®Óżýüæaµ_±æÚlq:ÈÌö ÷—†ÜŸó)Vwö‰½[àæ\ûÑ®Ù}¸c‰ÿe•Ï`‘˜óɆc{̙YGW‹Ç"øqss{´/S@Ì&Y0‡æÎ÷Éi{Y$s¼Ýìn\Ɲï^îëÕ[Ÿ‚j‘ÅxY¯WŸÄÄ8Ë3ßÖ««zo_'É ÊǛÝu³¿[7k„`4+²küëù—EÂëd=> Y~wôŽôvÍûÖàÂùßßâ§þ)ñiT"ìUR5KJL Ú$«¦h-ö˜ÿeü–õ/²î¹ýàŠÃ#8ÿô[t¶X;Bw•0ê*áûvr‹Û®S¦Á0E Oešë'ß³Nñ¦^?$Q9g%Ðþí«ï/.~~ó·ßÙ{c[Üᯯÿ”Ò ª›Ú­~žÝ}ìÛé=ñÌî6us ן=ø©}îv®EÞ'Æ¢WŸàÃÏõþ]½÷ȅ´é2Ç l°>EBŠÜ_)Îߓ86ÇäËÿ;SMì'·ËÁU=®Ç «·É®5¼®vID|Âõz³ÚÚÞ:Þr¿·k³ãщí¶ZšÐU¤¥TJåUŸ°ú¬ödÃGG³_í7[_;©;ÒÅÕæ`_»öpË'L"ås®!÷»àÇÌñÓ¹l¸'Åɸc¸¿ÜÖ;ÿ€ -´xíóvOW)S„çXõÑ­ŽÍ‘$”Ãíb–Cc›Ö¨#¸6׶ˆNýs¼u™vJÌûÍúH€pҐ˜ýZŸÅEÑÚ {³®´~̦;唲mÚz/ÙᶍZ[>%§çk¢ÉäàҞâ²9ª¬®ÿéÊá4Ëyá2Uñ­¶wÛN•¿I'Bç̶€jÞ'mk8zùÛ{'DݯnêƒïÝ:¢“\@õ*=&q’+Û=&{âáÓvƤÉóyÎRaáO;u:â§þœš¦¾¾nK« sùR‘RБÁ±­Êh(•Zá$2\!Ñm³ò¬Ìõ­È†×ûƏH¼ ˆOäBý™½ ‚>Çbœõüêâg×=/Gù3ù.qrœm"¤öä_ÙMvF »Sˆ¦³R‘%Ñ ¤ß8¸|Rˆ¼ÞìRi¢Í»¦-lx£9Í6ø±sPÑû”ç¬Ò#;©d_oWÇT%ujˆÍáðP·µX''YäIÑ9‘ä÷âU9³#|¯‘h¤ø©=ÅU9µ_ì›ò¡ 9¶Ç³…ý܌øÇõÿËfÑQ8õöãèéq€x“xâ8¤“9½„š‡û›=çàäÔl¥šëÓZO;á¦>f¹™­—:ü9ã^œÑ֦ȩe__[‰œª&Šiú+éàø~s¼uoâJ{™©¦Àò€N0ˆS}ߑС{(ßä2÷'j1‰Ÿ3ѕã‡Á/èꪕ&­‰ÈÕ'!eWçFÔ(û‡m2 e5¦$”¾Lҗut„vo7ž9èÞÅq$…=K0åГ ÇÍÖK; ¤³¬‘§Ô{¼ÅonnSî¡ åoIýǟª|)kÁ~ÖÑQC*áÅ®ڝV«=…É]*´|¹^½kö›c*¹Ä›íñÀg©þW»»jʇQ.îšäB:íûfŸºN>{Mù‰éRäÝSÖxoþþ¤ð~Õ¸ði_Orîþô8•U@z՝·”=á›ë|,¤rÊRÜìVI¶AÔî%”„øľ“­Ç¾O"VoÏ çCuga£Sl%G贛ú#ÉqÓvUù'KaoûÔçÑ¢ì‡o“hº'øž6ÑÍæ]NkTjˏ7ùBeÃe[<ŠM)‰Sœ¬simÕº›¥]ÕFe›•fcÑ]Lû€½ÅŽ9O²`îLsgç •W‡º¾K¾Fà/ñ¨çù—é\¡QërÛ¬ p®k^ú—rï®í£`õŸrZ1g—ýӑB%¼sӖ菫µ}f/€Jßí§7ÿ›ÌÚúc)€÷éæ?’-ñêlšýÕ\onÚƊÝ0ÎíÞ,¬÷Í¡¹ö1òõ^ìwµªÏoÿy¿¥¨ó֍Iª´ÖzÝöÆ-f”fÕSÚëé‰ô¥"ë%Ãå åx4ÁVÞvsáȒ5ÿÛù+›…¯Rʂ“W7?üz†qµ_ÝÜ´U1¿q(µXŸŒŸRÑu³m_kt -Å÷Ízܯ©ÓQO,möù)’zò°kó‚Ù·a£òÜÝ ˆÐ³aö?÷4,û–iǘdÝgvQÿ‰‰y —ÛyqØOA‡Ž.ý‰c^5»Ö1y½È¡¬7 ®¯7ë /}c|¿„€{ÞÛqTåhî”7{ÔÛìîÛ³«ÆEÆa•ßË|byûqj­œß‡‡IfI39KPÚæ:â<©q×ÍÝý¶F^Šq#6þ%ïISѤ¯M¬€·iù\¼#HÙÔî!”~r“JÀΉҊ¸$Þ4ÎsßçùÿlR¡MçyQ՛æa¿®ÓùÃ: 9R[Cȕ&±©jvÛ¿·UÙ/h¸2’ª¾¾=Þmÿðõesõá_¿hÿÏ?sép¿u‘_UøÚèM­nØÇ«ìh`«‘S1—vyÝ‰S¦“#ñK^iòR°M´ Ù.5W\QVm›ûzŸº`üF%Î.|H/<µ;òº¦I[f§Q²N{ä´öXi®½ªWÖK´ Ø¡¦äÄ×õ?h¤Þµæ¯ðRa4LRÊ/íϸªÆ‹;Åw­h‹üÍýíΗËå«ÜMUmüÛþN<#%wöurÎM -ò-p-N‡.ST•2ï߶ypÞ!¸³¯“ƒck2¾1²kÙ؟ۣ¸ÖìR0àåò¿ô5€l¦ïÏvƒC{C¯yr,{BqߤW”®sÏM†Ÿpîô®O_Æã-œÃÙëhØñkæy΍?ïºg©¢·_Éæ$Ø·/ý¬Ý¿]¸ëjøä¤[øŒÞ×.ì ƍF)Ȕ%ÍƉSi)‘Xk<íè¼lî?ìíºŒ5¸€ ïO›u½ko»¨‘÷ÅÖï7‡c“zk´]Jwè ¶õÙCFã$‡lí§Gª]ʂÇñV·Æm¾ß ‚Ó®÷f ·¢’ÿ-oÅoÓÅ?~nÑ^jãf㌖Á~«­5ÖêÕÞRóî¸ýP}sx[_U±Dm/‡SJA³êlΛUz웍}øíų¿<û?ñÔÁÒendstream +541 0 obj<>/XObject<<>>>>/Annots 114 0 R>>endobj +542 0 obj<>stream +xÕ\]“Û֑}ׯ@éÅRU†&H‚[®¤GŠUµ¶iíƒ^8Cp†1IL@ŽÆÚ_¿§»ïí>8Ž¬•ì$©r|xpÜþüóÁp°ñöªâ¿Õ¢*f‹QÑÖÅúA©?•ÅlTŒ§Ååk†¸Èÿñê¯òK1ŽóbWL³ôïÛâõƒ@;ÜÀ/j<XM#¬š,ã„#¸+*¹±](A¨ˆ#¸+Êá¤C2;JZÊìx<˜0KlµL™%¼+FÃîZÆ`ÇU繌ÁVeçΌÁÎ>¸3a°‹aGˆŒwŸœˆfTÞ!þɏËâWâOœÉÛ9‚YüΙøÓºÅh°(¦ÎÜ •_p!Ür*js’±(f"› –0ØÉLÄ,a°ÓRL.XÂ`ã.K…1Á\|-c°å¨Ë;ª:¢` ¶ú`-a°ó±¨-žKJNÅL5Ÿ‚… ]© +B©‰›ªc:G~Z‰ #¸+æêo΄¡8hÜIÆ`ñ;ߖ1تB µ„Ášaŝ ƒ«Òƒ% šâœe v<c –°°ê3Ä‹wä1;J؊µ„…íî—1Xx2¯5µÂŠ&®V¡Öę\œ#1 K¹©“ŒÁŽ5xKXX±…UÅl¥þ,a°SÙ½a°³¹x{¬% v®V,aq¨¶ê,c°øÆ,a°´{2c°“¹x{¬% vª‰%XÂ`烂%lþÌû5ŗ—ƒ´‚P|â,*;G>«éÙ9‚a©jw’±° ñJbƒµÐ,a°–É‚% Åü.XÂLÚYÆ`GS1ä` ƒ…ÇÁ+ƒ% vòÁZÂ`ͼb-a°H0gM9ˆÀQÀ(å$®š‹#˜ƒ­slÓº…º‘s!@ˆ~ã$c°(nø‘ŒE5ês±–0X?XÂL‚ŸË,”Üa ƒ…'ÀºýΌÁb„Å3Tø¾–±70§`Qìd v4ÅK,ޑ÷Ë,Þ¢ÃJÕZA^6p¥gNµÁ¤ôàTéyj98‚YéAšÒóJ ҋônò:Œ±–>f–0ؙd6º3a1‰™ïZïLŠJ(µŒÁj !–0رDb ƒEùÆoÅ,Ò۔×;›Áè΄¡Öᢳ#Æ`ËîZÆ`Qø­ƒEï’-DdÅì¬ìh1XT.;Fü‡Ë—´#ÆÂVý2;š f†4ƒE9!V#[…‡K9]ÈJ²‚b’š‚d V[b ƒÏe³~cÆ`QCŒÁ ó„1;k/ {T)Ö^Ò zI ÅÁÌ^éëÌ+Ó=êÎÄË@¶°'ËF$èKX6"±„Á.>` Ñ»!|.ca¥©b60رzt¬% °Ib-aØðPmØYÆ`é9ê„ÁNGb‡±–0X­ ‰% Vkfb ‹ý«ïøƒEwS –0X¤Gø³flÓ„Ÿ½CAxGâPi!9G°tòÁƒRUùBÆbPB‚%,%ù9nl/«vŽÈ”¥Rž‘8-ƒ#ˆMÎD¾Ž ¼F¦3ÁÄËÀáùŒÁjeKË6¥Ž#–0Ø©$xb ƒ…¨ù…ƒµìåÛal~:kŽa°!o—1X˚±–0X(¹³–0t3uXÆÂJoŬVÞÄ /âçšI g‰FA˜Dâê! çÂ~‡â1΄€Ñyáe´"³K:1ÃR $[ҘïAt1RVΧJ . ^S ¼Œ“ŒÁŽF²` ƒEŠ‚ýK,ôÜa CÛpK¤_Ë,tÂkƒË°‰ÖF¤ÓÆ6X/b†$?“§‚oâtÊS9G"‹·9GÕAjŒE„š|)c’ô贖0XtûüXÆ`‘ ‘†â΄Á.džA,aˆBâç2 Ûä;3å¨ùsƒÅ$–謉ÙVҁ‰_Aˆ?q3iç*çBüÒ7G®&­rp!mƒd lÐɬEÔ` + ŽÖkök ƒµÚ)XÂ`uLCw&,ŠÓnÂ×2ÅiN –0XÌáYŒŒÁZjŒµ„Á¢˜ì¬% ŸC×ÏÊc  ¼ÙïÌìD}=XÂ`1‘ï¬% „Ù­ v–±d…¡ÊdÀ Uªqp3¸ªKãµrŽ ‹à‰Pë$c°9Ú –0XŸˆ??”±™Œø@fm+Ã!n˜·¢ ¶’8K!ÎԌw%C<ýaFrSÆ`-äùRÆ`\ †` ƒE–€tƒ% © b–0lTdžÁ2‹ŽžïÌX¬_&δ–°Xÿ¸Ë†¢¦çµ*þ â­'t.þÌiýAˆ_2opae’³ƒ#hâ)âÎ, +A^ÊXÄ;ôkU­„…;,š¾)?—0'¬ˆ5iO:Q"Jœšdp5)—EpÐI†àäЃ¸€xUÕWŒÁ꜈XÂØF‡§¿,ca%q2,æ~¬% ýڈYÂ`!Nfe)•«+±kûw_ HVÊРb•´åÁ„ J FA2«ÉXÂ`µ&–0X#ÄÆ.õŒ,XÆ`!ݵìԌ“¯Ô' +„Ó^ΠnÆçœ6C™ÓYEpvωœu"EHC8Q÷LœæìàfÿôuvO="Ï÷T÷LœZ†tÛÍ:qOÉtÁ„PuIöÀ‘}q`›PLœ½µsñ@5ç⁈À0'ƒÅïÐS°„Å佈%,°èÜÙ¶‚DÅ-óÚ·É!äãœøÇéWGtpûw€øGfP̉"ˆ·e±`çû ÉXö/GkñDÆ`µ +Vw8ֆ-Y‡WVæP۔˜J! œ­ƒÊüðK†ñsåT2Ñ6Êcp>ÿð|Öòõ³¬«Ï×ê¢xe|<‚ª»,‹ó•~Î2,Î///¶uѬ‹o›ý±ÞÏÿñ@ëÊ3ñnYz&)ÌXú¨È%8À2¸ÅêQqÞ6·¸ËáºiŽ›ý•Ò°NŒüGþ§œ˜ æI˜ÝÀ&Š3qZB©b€ˆÇy£ÅsY"Ÿ'Áüãöp”ß`Ä!­Û›«v¹ªWBˆÊGINÅr¯¿¡ò®¦ù˝®ÇSð-’Iûª>f)£,óÕ/›ý¾¾²Ìüï6Çk}>«ð·®ßÕí{ù3ÄÙ<¿Ý]}‘®œ/ò«Ü,¯ê?镈Ù>›ºMgz°!&è¢}ªè—«$wô/“iÞÙRvÀö¼¯ïz[mo·õôWŒ{](·¦_¶‚ãu­×ño‡c]ïÚ¨fP} Ë,Á¥©ÃÚ¬«z`Öÿá¸ÙnÓíf³¼ê8^ï®U:ãrPùõß5w¦&ùò-Ý䳩In”U%'Rcö’q_U/ö&ŸyN³–=ÎaZ;µ@Dåù<Ëb½|×´›£®F@žTYü¨R+ñøl†ÅªI?¢PuÚ7}…Ý5íO*b„cWÃIÏxÙnÞ5?›oà²ÇèQ¹¹/¾¹^êcPZƎ.—ª~¸·?¤0VêIwÞÝgÕSºYV¦7C¸AxÖ¤¯®'ëcÝfñ¸‘îÇåv›‚=Š•‚÷ÈH}‡eÔÛûõòëëØ|hÛFŒX†Ç!s,ÒHq:†7;·½ìý¨­µf%ìêϟšlà½Ãl‘'õ|µyWrTÌAæ³j1«¯çm–š9'Á “pöHÉC„OÜûâ_îÍ1ɊŸ¿Tû€C»PÕ%Í/Øî1ŽâP×;õ`4ü]ûO¿0õQ¸¼Ø6—¬jóÜÓwµé /šãàgU‚Þ,k³ÂªSLûŽô|ÿ¡)¿¼ì îÅëÿ1WÁ¡—§éž¯@‰_™‰"fzăכ«ÛV…$ ²¦Õ ßo.ÛæЬu K"J>GÕ×îk W莼fxúóͶiÍõ%e¹Ñ÷µ‚ÚB÷A6qŸ¢—§1Èò·>•/¿;7›BŸ!ù¦Eì5›Â„8çà_§Ô²’7=“cYIùf_Va«vyu•j>Î̧6ŸìÖÍveúÀÜr&Ýöõqê¦ÇvyÐR9)tÙœM›ŸÁ~ÛÆí~c9@äÙq¼ÍQEÉÑø‡Æ +*|Œ¡åD™´ÞìóÓ;;¬·[³.SS(çÒ¸ç'«&û L; ,'š³1æ_s¼P¶‚âp»^o.7hƒtW(¡ñGæA7Hý›m}e5…Ôí¿àõîæhUæCq݉«Z̦áð9xý:›þrW'o)e°Ž’5Ë MéÿÃ[4T Ôʒ}¹ÜÃ`µÄàÔóö¦ß㷏-V 7;´–-0xvñ"ºÕ{¹¹X¸ØëåÆêgbåz­è›ó¶I•8W¥hȾnôÅ䋗aîzVVÿ|S·°šK ƒóGmqF{8ŒÔ" ¯êíò}NxñsߥÃêíI^)OuÀ"{þ•u‹˜Ÿåw½=¤Üx6ÆW3j£ +$Îåöº9ômýD>QŽ_´ÍÝ¡n¿ÒmÀ!²>5Lë;sûx°®ÕL³„œš¾œñþš;gC‡î杂xqÂÐeoÜ壓Ÿ:eW¯§¼lv7ÛúXo5.à/ڗ‹ír¯ úí°…“š·¶‚û¤&uS<4âËÞÿz‘üðïëk‘=²y¼nnÛËÚæx%÷%ŒrîÌ<ñß¡Ùoßÿ—n•Ü÷›ëãnûÇo.šÕû?~óuúýM¯Ä±t^oº§ðӇÆ:èŽwP„Ù⣔•9ö§’ÛIY‰—ØX¬H1^.rtÿ5¦òû]›Œ§Sˆ4 E×Д ÿÎ*Þ\[™Î÷Ä,©Êî™,ô̹ŽU½lvOÛ6EKù›: ¾}ôæõ“§ß¾øá‡WOŸýøúé_Þ>–U8я®ÞÆU8žð„pºw‹YÎÑ>­øûeÕ%ñêß± ù&ù¦QË÷{/o©š&¥á2âH²åÎ$`—š¨Î|íá{ÅÊňéáŠý\u*ޜˆÏÍÝ^Uį#á~¿Ü™Ç#•n0èåëƒy(~°#keQ´fý²?‰Í²—ó Ì{HöiÖDzsò<šƒœtz†|´¦Ø•_Ôåvy»¿´²§ ƒ šrÝð¯g§T“Æ>làÙQp4o·«‡”í¥CË­ÛÛ&M#öó›àû™ržì*jîèp¹mëåÊÊPl"ϓŠ~‘þMS¾ϱ®k¾ìÂ;lv›íÒª!Tc9˜žI1òö±vÉûÉvðSöcß:’êÇ8ÿ’í‘êÓìUÿÒ+?.ÈNÎê~<vf"bXã”ü”§LKk™‘Á=²WËî¸2—€žr3ÞßÁoþK9՟ɇ¥Fd‚4¿c‘Ì'ö{±Ù/Ó؟›–5šžÖÜ`‡Ûä7\ä(­X·¸¸mÿeÓ¶·7Ç8ñ’ý.û7çí{\²èÚ¼œrøè-ÁŸS?Iô'’Dš½uEb Ü}áSÕÌÃU½kÚf¿ùߺU¿Ä9wöŸ“‡Dw)ÙswÜ}ÌF+TÔèÜ~·qvó%Dõ±bÏ֌ÃIɛÒ­+Ò~]³Ò1W½lðS]ßh2d¯ÇÐ15G2uôàÿ0™Ú #š»7õþí£·Uò‰œÏ­úq´]ژŽaS+l Õ¿Ï .›•Kœ;ˏ•ØÇ_g²ã\ù$[•È<#)ÑLÄ|ø%çÀK#ÚH5G=/»qTï6´B¥¶mÐû43âs¬©ÖüùÖÆôP^¿¯jÉeùιHÌǞl½Ïêå1Ï1)q¾ªÿy[,€£ã¬ò°òãòéW–3Qâ×ÏòðْòÕtpâ@ø¯©3¤ÁèëۛœÐQZxüéïõÛ¯4Iœaæ-sŽì¯°n͕6Ø4Þ³~‡æ”Q²ß~Ÿüļyšã‹ðS›Wk•ÝwÎ|HÇËܛ%ƒW©ðÑí'¿ç—_˜$!_ÄFԆŸ„›<ÇÀ'֞£_¢!ž˜•yÂ{‘‡ƒ¡÷ýÐápö +ƒ´TCàm¥/¶ÎóeÛ z³3%TÓÃ\8y±ôŸU~à¿ú¢ŠÝ¢®Ê=@ÿ–ÿ ¿Ø¶#÷à{.I‹g9õ؉ §ªñàqzõmsó¾Ý\]-Íð)òo.ë½?u|ìTRùns86©Ä……Ýۑü®Âµ¶.ÒL‰!÷EøË´¾Õ´_½¯×ú]wö1·ÝŸa +XN-ø»¿gÖ&¢Jî>æ)ÿnׄÎåã¼5þ¯¨£¾i„E—³™”iÉ3Šg­T@ûãö}ñäðS½*þ&õ>ù²Ä!þ‚X<ê‡z›¤ž§çþöàÿÒ|ÿÏendstream endobj -497 0 obj<>/XObject<<>>>>/Annots 128 0 R>>endobj -498 0 obj<>stream -xXÛr7}×WtñI©¢h¯âSÊIŎS[[Þ5³yÉ 8’°0Àd€Í¿ÏéÆÜD[Y—¥±À}9Ý}†ÝÍg»% úDsü[ïÖ´Ý-¨Öt¼Ë䣌¶ Zn(/qfŽMüÈøñß÷wÙr=ÛÐ&{œ=RIÙvѯ,}º¯KZ,–³y»—¥ËÕc¿»¤Õ|9[Ž¤ã5¤ëÝl1’.çÛٖÖë…Ü»\ÁžvŚWnzéj³ÀÙ´—¥p€ÖËv”øŸE²`Ѭ{áb·é·²4{ÜÂÄõœÀ¥¨••œ­!Ý {E:ZCºew’¦tﰆt·ž­ÆÒѺ¤år3ËFÒu£V‹yÊÀ¸£¯Kw?ì?Ë©l•N=,3x°/°þ8«H&P<ãáô…župŠü‘>ÖæÙ¹þ˜4¬(ËZ ‹-ŸÿàpJÓAŸŒsƝ¦¼D".ŠÕi>%)“‡”*’wÓ¢®Žô[ãžMÀêåVÙÏ[§t¸Ò[çݵôM Ÿ}ÛH¹âåþAõ ‘wו¯û –ôêgô!Š&z¤Â¥ žuA¥rWj‚\FÖGŽE¥Œ#ü°ÇZÕöJ…º–\ôT°E¶OS¬Uþ„Ofí%H#RPÜÿÔDQƒƒS21PUûèsoÅ7 -T]„©¨º˜xÆ. .EŸù«Ñ_þÍùÊdkô”{šRÃœ>™gMMuã¢j¢w¾¼’‡Él‡©éPû ۞ndÍ¡º²bà;Ê)=é*’~öö™¢ß^±q*j{M¦½–Ö!¸…)Èù8£ÿµCáÎSªšƒ5áŒÀ#¾Ùn÷8ýyϑ4áÏ$ZVNÄÑäFÙ×Pk«U¸^ŸpRÏÊXu°+µ/_S2BÑMì¾SïƁ1‘Ϊ@‰h‡%¶8ŸÞÿû÷׌xÿñ_/E½ˆÎÙägRÖú ‚vlj䨦B?kë«R»ˆº¹±Üó–p‹ÄOž>E}TŽþP¶À$>ª:J yF’2TÐPp¦v¹dF]7QðÇxQõk‰b|ëŒv±/WRäšòOüñÆúJû -Iºcm ÛW©˜ŸuàÆç-Z«âŠ8WVåèKÊ¡’R\.T° á1¥:évN¢£©®Ö‰›Ë¹ø}õÐTôd¬•* (IAiˆøO^)·> pq€©tÈ×íQYd ŽJÉ[Sš(Í …N§4M‚éO_à×ýþãôkl­ÐÕÐ ŽV1ŒäJ×ÁD‰ÎќšÔò¦¸XâÅ0¨¹nF{äGŠ©¤Ôàˆþ¯\Ö7þs;ïÒ+ûÍoŠv1ÿhu]×8¸æË ài‹ÉўÕõH§ÊäO%BÏ ŠgNpJ[ÓØÔÑ1èÐF‚)4ùqj*ù»ðXӍŽ¡'áW¦ -A—ˆ&ú Ψ¢`ØóxiÙ`;OÊ£V¸^¿j½²Zز‹º~#<¸74V¦‹D h'.—8°Ô¾r¢ÛtM ü5uȾ£¼mN˜£S06™YÂxÞËÜÁØçy¥I{ÍäGY¢îfF~Vî„Ѥ¯Íüödb š&é²MK îY¬ò+ýâ LFÓÇ "íêÄýdFomðiøqQ߂TßgÐÁ;Â$ŒD]}ƒî!yÒ(L³¬þʦŠmŠ‚Â7ïzH†ÙфG¸äHRŽzvٞÓCêÑhø‚!hOkô;Ì®~àv]¡/¬Öˆo Q®¡nD2*áâóƒQ,úEßG³&pŽ%Ñ óÄŽ öЋC§ønÏùÁÐ%«Ox澬lÛM@C0H%~œGöUÈOÔÁ4¹º]@ººq¢‹d*ȶժХªû>øUFîGÜñû˜Þ^˜)|šÒSýl -.BþðYç ƒÖ‘ÁÞTÕÂF£ŸƒÇˆéj#µp_×ö˜úäàEà3G•£0Ӕg*cí ±˜Ÿ<þúF -ºyÎ#LòpÐÖÀpć);.h“„ aMõ;ÊH²ęI3ý4µ¢àF©žå›Täà)œP«§!½Ó/&déHBRâà è®„Aw†«:Tš)¡ó—4õ8Z•vÒU»©óՐïf ÚÛ?õ°åŒ~…Þ£ªº `¼qmõXô C*ÿ_/ã)xÈ\$¦ÃAþ(œ“û••œ³æ®ï£#—`Hi¢ò@èÌIÙ>XÏzAÅ¿1wZrÒ! # ¨-ÿdtËü“š³¶UzE`ŒI‡“Ž–_g„7 !ß©\-i鼺“ ˜v“áރ3Þw;Å̓CÌOÒ[Ž4Œg ÛÓ]Ü#›¨öl€ãÂth=æä„m¸ÈœüK[Ë1BÑ㇠¦ Fà1½¹\˜CáÕÀ€¶ Œ¸YJ¼ŒÙ[:ØT'´Ö!%Œùɗ”‰Ä/qB“WYLi"ô/IÑL¿Jrb?„«£ÇŒÓéEsh Ä©ô'¨jîŒhËùjI¦ôFÍ/E”0ɓ-\Á¤aÕ'ÍæU:ÿ¥&“wÿÀŠøý¬Ð çmßxóîqüjŽïäåþµïVø’æq…ïxçö—ýÝîþw†Õ²endstream +543 0 obj<>/XObject<<>>>>/Annots 141 0 R>>endobj +544 0 obj<>stream +x¥XÛrÛ8}÷Wtéeœ*‰Öý’—©d+N<5ÙõÆÎfü‘„˜$8(Yóõ{ºAR¢ïNykb(@_NŸ>ÀÃh5¡ÓG¹¥!þ›­f´X©Ô´¹ÉO#ZŒi2§8Ü!^j?¾|¼ WєæÓQ´ ŒF“e´¬ŸRº»8ÆèrÎFÇËQ4lçNÆóv%ž{þœÑd1ìŒ.VÑÆN¶Ã% +O²íœ7jFÇæžFϟ3OفÓèf,Û¹Óé¬]IVž ±ãl>Vìîr†ÿ‡'={ÆÊ£Igôü£ã1ï#+ñÜógŒNæ¼ïiôì£ó%{ߎNÇјf£¹µœð˜<ˆM¨á"šÀ`¬2£™<ðØÙcFóÏkÇNY–o ÄxŠ.ð¹À÷1þ&20âŸ2šN`÷Tx‡³ÇŒ0ë|Œ§MìI=-<´Óš1™v“iÞ33Æ짓Sƒ¼MëYðô˜ÑlŠ`„yìì1£Õ:±Î +™áW„o2a¿å‰gN$Íèt8EN£Øs;ßß_\]¯P+pá~ƒ›/§Ñh1§ûDjkH÷ñå(¢:×¥Jé&ßØ2SÞØüÍýw™Ë9•©ƒñ(ZÍg˜Š˜óm§<G~‡\h¯K‡‰d7t[š½}:þYR½û`´Šfc^á&ÇÞéÖªÎ~l«4!•–Z%GD¢HUŒ‚S9*ݑÀN1†sW`oxh2µ… œ ¢)‘•3c [ ¸G“¦'XèJÍ:ùÝ#Å©uÀ ¶r°/É©ÐØa[”½J‘F?ܔ:IMf¼T.Ðíª# `ù#»ÿéþþö +܃ÁEŽ¢Ù¤úÉ0@ +]œñ›ÙVúØJ¢Åþe61XM ÷°ƒQ×E@ƒ<Á››Þp-ˆM$æƒÑðÒÇÃáð98°K_,j¶¿0ñ#BƒPr4üŽSß ÇW¥ †Çx šœI½ +ŽW…|OìësÊð&ã]9§3µ…·T’ Q]… +™®7ZaPJ-Ê[Ôñ'`YW¥\Ÿx \5¿s!Ù5R`<§¢SŸÐÀ¤òOeø®Ú‚Êû„Pe#nNg †;­´—1·—#õê}z¿Ê#JA!’ñNå[°ƒgä¼Üb깡Eiêq®®UèE—<ªâ#}ȱš°ìm‰Ž^ªÖe/¢w©³Æ¹êžãHBÿ-J ‰8I¡£­¸ …}5?•Ïm(د»{’N ÷ßâÝ͜dH¯ŸgèÔ!;ÝOporî%°ÜÚ4‡¶üšL…ľÐsmøœYŒ8í7©¢ %]3[¼žH×qÚ$wŒÌÐÈ6Çê¹3÷¢@HÈ-om9äÜR½Ågl³"­k=’»G…S€FÁ©>³S¶®Ÿá €È­aMÁ֔*љ*™aºŽœí6¢ÖÈ>íÐ0ø>!ÙõwsêjË^˜Ïþ³Ñ >ÑxS N7m5£ñ¢}nTìû]³Õº‰óN@¬‰[‹o? é9ùH\×:5°›iek8àøCȅB‰E¸¡l„:áF%Ú/Т7H.|ÊÔ#ýkôº5¨èñ” â¦eΪg0‚ö2hsð˜Ùîü%ˆIDŸì x7½3È[TXô¿Sþ7Q0-;fåƒÄã4àۈOÕÇ)¯(„¡ß”µüꦋ½f®,mJàg<½ì}ñöê*¼1¬Ð #[n¯èáÒí âÊ¿m^+¢âêá PÇÇ +È.ÑyÝtðÑHÚÅ†Ê +’€÷Eø@¸=»ˆ¾è,d»e5YW{Úó`͗A$—ãù‚xƒ«ëº1Ëhëü7œÐ +‘¸Æi[±—¨Mhn¤·¾*\ÿ‘™|c˖Îkƒuµu½>ý†“Ç]\œŠØôO÷ŸǗÜ!Aw}>˜j ƒÚÇÑÛ`ïkÜùl“*U%̓dU›°®ˆ‹€æ(IN{ô¿m 9œ¶¿p%¬QÝNCë% –A÷És,%¢¾ëSU$‚©ºÂ4:ØüÐ!ÚÞ¡dÉ ÇÍÞ$8®HU·Öü)m•~hø +I}¸äãŠHÎ ¶àªÄŽ|hËCZX8èýI†,0_BTS±a ©Ï[]¦¸TÈpΘ|Ñ[Î}x*j¹Ax³[k5]0~¶ávEsÂ7Î`E°^ˆ.WG}éÆ¿»b`—pÌÇæ{Ã× µÚ]ÿêú5€»iÎ¥-Y šäÔÛFöáRG¸pµÂ UT·©×úãÍ5p r03çóµ {„Àpµt>|4—3䤌à£öÖ ‡P‰)ƒ\{½ýŸq,2ƒp€Cµ>\Þþãîæ߸<áû™0†kŽ×ºö•)6Æ©ÉfæO9_ y ! ô"@íò-ÓÓq . +`’ä-4Eô„(_oÍ;Ü5Aõ㞊Ó%Ž–zÀçךîb…(jaðSdþ•*laÉ•ŽsZøî¢Â©Zßs>Ûkøú57O¯wîjéؐ ˜æÐôÊpÅþžîкùÎÚNËíրü»+Å^àˆPnªT¢ÅåŠ è7̟$îµÀøÌWš.à +èªÝó|Ptg×)²5÷6ÀžÛasÛ ã + ~Ä)ÒI{ÒÉ_3g4â;áÁdMÆ4À=øx†_øb˜^¸JæÛüårŠ+h~iîÃýÅ?/þÄÁ£endstream endobj -499 0 obj<>/XObject<<>>>>/Annots 135 0 R>>endobj -500 0 obj<>stream -x¥X]oÛ¸}ϯ˜›—uX±Çû²h/š6‹·Û¸ØûàZ¢lÖ²¨%)+Þ_¿g†’¸)°@P4qDŠœ9sæ̌ÿº$ó:ýpkàßíü–¦ó9MùÅP i:¢› ¥;¼3À&þ1ä_?\Ü pMnçɄv4Þ&·í_=\ÜL’MƓdŒÅé<¶ðÚé,ùÄ÷cóx8JF4žMñy„ÿb/Œ3\q¶€mcš±¼£!ÞÆ?øø'bm섄  -$z´ ¡úõú:‘TѢĺõõó7:ìz´ìùu!­ƒXøã¡êo.LnO¯’êgÇ-ß$ô.zӏÞ§RS®ÉæäêB‹?¹)ÜÕy®Óàúªw6h -v½.°7a[¯ïÒéþ4™ ©³a9šL)nèB!ëG\ÿÔ+ªÔZ3ŽA—âmlòçpÓAY©²ÔŽ3â€Ù›¿õbµ7Þ¬`æe£WýU½ö—Wô»Ú«‡Ô™*°õä “‹ÏŸð¸´U¦Ú_Qe«~]QcÊ Q½"ÒdùæU.}¶Y](ÏÙ6 -Fn¢Ü:ò*—‘×!Àe/x×L®ã“`‘Þdîâi¥˜„g^3öÅ[’L‰ƒ Ž ÕU&œU)Ó·òNjlùK @ëgJ8oö&«HûôòׅöãbñåzˆtMí®*ŒBp—½U¨´‚يÂ¥¼é˜ -jàëªÍu†¾ dpÖû)·:ò=ÄSê/Úô_‚˜4"ŽòB?ÊmÏEÂÊ Âí{ckO†Xñ¢¿G?uù(S»Ê!®L<»5švªDrí$±:‰[öt²NÀ%qû(c¼ß¿ -ï÷w”é¾*ÍNÔðEWþ]èÞ*å=› ´0é¶ÏÊ´eJ{Ém.©½5™o K2ã P嫼ø\ÁôÃÆi•ÈeïËÿîÿ/™Y­=”OÖ^‡Õ7äY?­}°;ó·bFŠ4T¢>€k ªT?R«‹%;/1¼\6ÝêìR¿Êí·u°ýL‡ˆ ¸ëtŸA`ÐQ"‡EA(ݨf¼"À÷Q½Y³àÀŒëJnV\­)S(%r ê·ì}+Íã«\|;tBj¤è T.ßT!,ž5ò̟o¬ì¨=û<“YPBíòº`Ëτ™“¯#º,¶}ÄóEÈþuzæ|ð;œƒñ¬oQÈzE…Ù™ ÇZÂ5™Áe«,b^§5Dÿ@Ë¥ 7:{ѨóD£ÁâVª?š%Ã9õo†±3¯„þäÊfp'] -a/£À7³¸¢í´PuÜö·¨æ]/€neÄmYï-¡‚G®Çc{“¢Èk¾B}ËCËCº!u<ù*–=ètŽsÃ$:éÚ4¤)¥ªä†:ç 6ŸÅ Q-™ø`zh< -/W¶‹áþ áGÜ ºR‡„\.Úk±ù­løˆ ÅFÙÕwîŸøóáìúR‹ÐœÞhmvñ7Uæ®nÄë :O½QEãÙðµlU¼rX2[¢„Zœ$¯äNî" lþìêTµs5z"dàÀ´/|ÉvQc(‚çN¾1¤]Ø`%:Æåȱe/‡&7à+ ]¾A{•ç&E˜Ò”ªt#υ˜N8òcñB´à;“/–d©ãÒÆ®3L°I¥è6 ÐP ba!ƒ•ê‰S'…²m°Z -{äŸ[¨3Âй1W°ûžÊã÷ºÜ’æŒãº`˄Œ´qˆOh4Âr°µ;Ç;¶ÛèãPÎG]G(‰LB#"JÄ 7äz„ã…M±·uXÙ/C¡ ȧ)ÑOƪ‹‘‹|u—g&à‚B+®¥Í F•ÁoSÆ3Ù­„zVVC/Pàý¦4Õꌄ5‘ËV›áð#T0 úô‚÷È3ö -Çùln~ž«jlRœØ!vu¦S Äñ$>·ÉJ³emo:I˜­öuÐ€þLˆZb`,T⠆2îRfYú à›Û"‹3Ø)UîŒóÕ¨ãkª]Pˆ&ºN– ‰,V9 ×w“vbêQWd$9OC+{ß¾~b¦Þ8µÊÀÒÃÜ­ÐXÇh¬?‚)îÚàE ÷ÆÖEƍÿôÐÿ&æ‘(J:)Ö9>„5¦¹rgw`A”E‹ú™rõÉè²ÝpùŸ'DFÂÅa÷4q¡åç…Á㈯̺ó„7óãVêÁJ³EÍ·5º¡tËM_‘»¸ A½ÒEÅ|,l@p¬*Am™¦Ùó4óÌg&-•c¢ÕœÆ²çù—2Žëc¤žï9 à ƒÇdBHAI_qNh0dìÀÅÄ °àÿN滖/|ùS~ð¸{Î Lî0QæꆠNcF˜73_P󤊰Ûf±w&Öç!Âä[66züåÌ3¹œIA6k‰S¶Ö+°.dÉÂFª ÓðÕºÓUU`E¹­º’'ííYp<4 -C¸hGû5ähÃíÁ”)a»ºÖÅiôÆüncáç0'ÖJñí4QG„ |op^p³z·;<9æ4;?ÕMi_Û6´lr¡>/XObject<<>>>>/Annots 142 0 R>>endobj -502 0 obj<>stream -xuWMoÛ8½çW̞ê¶jùÛØCm í¦­½äBK´ÍF]RŠãýõûf¨¯¸ ‚8¡)gÞ¼y3úu5ŽÖSê>ܞÆø™¯ç´\OÈiÚ]ÅòULË M”ä83ÆC퟉ƴX.¢ ÍVKü?Á¯œížŠùùo¯æ«(¦ùlÍ(§å4Z׋Œ¾_õ–9­Ç탼×[æ/æÑ¢w°¿ÆîzÍû»½uN“É~Ø0û>Ÿ®`ïwßiº^Âыx²Œ–4E +ÄÏgÑ´^±½þš}‰bxVv{köeÒZâÝþ»óõóÝÞ»@dÞ³<™OÃtÊÈä4#©õª‰r|Ç¿ƒ´-(^Ær,@VÁ]†²ÙÄœØn·¿†C1»ÛßíÖ؝Å@²ÛeØãE /ÐåÕÞ\|ÿvsõæ,Ĵف‘‹Õ’6©ÐpL›dð֖²;*Ɠ)mö¨=)J´+•)Hå¶*J~b_iïOÖ=*R2~È_&¶r^iç´ÎÎX;³¯œÚf:z½ù‰«×ÏÂÕ£)‡²IÀ,¢wª ;gíәrõ )7¾Ä_Mö%µð£°%y8Ò£vgò‰ÑEiv&©wq&×à&)+•eç!™òDZÍT]Iî_Ó L5|7%B •ÔÙÓÑzoà2•–êQó9gUJ®Â—*ILŠ{Ù.ìYسŽ’ƒ*öšcÓ(ž¢6p½·¹’Åž¶ˆ*!ªæëhom*GMg[!ò3.)€<®öUrÀ3Þ †ÒX€ÏÑçþa?¢[ñ¹t&y8_\|r¦äkÙaÏa$ˆ‘ؐ•D›GNJªÉL Œ8‘ ±Måq¡D¸×%íTæåYXm„9Y„¾­Ê@°Ull5³g€<ÂÀ_<¦Û4·ìà€‡x·ËôƒÜÁ¡¬J%›I$/¢•t˜Ý™­ÃÏò|Ä°±EÎ7Þ#A3v-Mè«SR`•Ö©Nq_–٣ƙ`Ì*_ÚÜü'©q—w g–Ib"ºÈv+æ"ÓPôÁwbÞ8[!(d%1^'õVãÎçgEìùltÿšw^¨™eDŸÁ?gO™•ò`p½A„sà—o°ŽèÇõÒsK•o™º€t€©Mébˆê:Üû[9}¶)§²¾”‹LMŸ”I8mWŸi©½ÜU…€ ˜}Ϝý¬ÎHRÐ „‘ê_¨4QÔrÓЯ©2¦_ã?X”sÙä%>y$ˆkÌ>ړv»* Äb"À}EE•o`мbŽBâO€Yóªl®mX‹‚LST„-`’ŽŽ¥ ÷×5m ènvB&à ·²ÒáKc‚éyùtó…NÒÛ>•ØüX• ¹¶‰VÔ2ÅybNw"۔dÚ(WH]]ELèÔ"†p¸C̃ £Jr“)(X#ÖbXsîzbV«"ËsÑ/¸÷EWÐ(Ƴ•» ˜Àï´¾)™o[‹*:)çTQž¯é›ÞC+ÔÖKTì%¼¶š2‰ûÄóߋ‘>~ù—>êB;•ÑêÑ$ô©vé~ðñîS(8)ÀîCJ±[îk, Hè€!š¹MYzRÊN›-²vê3p2þÐùHHn.2%<¯ƒˆè.Ó -ù /Eòw;³?”ÏhµçƒÀpÍH1˜ÿ桑 —4(uͪö@j…Cóý#ˆßó憍Pܟnß½ÿòý}ø¶Ñ‰í¸Ø¤€j­Aמ6DnêgSó"Øèd£°-.Í£H™{!é§cÐptïü˜¨bÅü¢ÖÜgÁ.dׅų“ô¨Ä¢®VßÑcyŽÒ9‡á q=Ov”$JÕ©ªç6ƒYÀøËP˜.—1 :C†óG$é¯ðÀç¢5 -ˆ‚¿™ÁLæqûc6 éÄáAÂnñQW ŒÔs]=ÿ`jŽb4 - ª÷ùÜ©^+ÿ^÷渓ΠDšÅC˜1†’bÊC—QÃ̱Բ¤Ô8i‡6:¤muævêí®Dq‹û¥ö²ïYÿD›ŸyÀ¶~Å -…i3KG'´{ÂT2*->‘ö{Püsÿ€ÉÕÅO+Aw=\ç¸{Ɇe$È2¬ìk僫6ä!q ƒP”ÔÙ#B±uÝ·OµÅ(̍l³Ã/n2úâ-*¢ï5B/¦¥ŠAThkEÊLG1ÐIoGNc û[œ%"™Yy6SôzàxÄ9iT¡ ö¨…À.¨så.åKª¦É¦STTŽ1æÊKÏÅjZ%åP”.geâ†â‘+‡Aöx̄ -¼¬0ìM«{?.¯•¦;¤Ú6<â…Cq]óO·£î̓´Â#ðÇ˔['غ•©Uéñ¦Âã…‘<ºpŽU],ü¦¹š/h/ñºÔ›…>8Ì°‰8oüþ -CÜ¥ÎG͹Ñr¼¹l{Ëm§µœÒ^ÄV«^·`}Êß¼ß\}½úqLàéendstream -endobj -503 0 obj<>/XObject<<>>>>/Annots 153 0 R>>endobj -504 0 obj<>stream -x…SYo›@~çW|oq%{Ã} RTY†™Ùï˜áÑqYàzÑ\úEY„$󡶎g_yH|1Š†z\*2Ï\~Þ9^3q³ ¼Ègþ)’Ø8Ә²qĂiv7ð]–Æ”õ®8æäiLỪáYÀÒ «0 gÙiÜ L]OX‘<ÄA@Ä8`Ñ)0 IF*¯¹Ððµ•Vkp©3±§^²~–™£Ü˜x5ü€%§ÈôNcÊ&äî${uÝ>™IQ>JÆ0MèÙ§¿ØÇܹ]gð<ä[^œ&ÈK;1y±ðXƆßjÀÈ۽¨ôcÝï0tïßå©?¼ô¯|3×¼\<)—Ø y¨Û -ýN ¼A݁ˑé†J©u)8ÃÀ(d¡VŒ(œê t·Ä{^™CªA”6˜.VdµoJU h{ÞתŨëžú6usG[;ßArcJôà-xQ¨dQãF ºk¥+ÁZÑÏÏ6.¨©DÃk‰#Õ{ã©›—Û]·8W%¶‹d¼b/ëî-,†|'Z'”·!>ŸÍºéð·—s2îì}Ñ÷¶0¶cǟxYŠÒˆ: ²ãZš7R¾”Xke¢ëþ#ûÓ¯ ñ>¨®î•~5„ Ÿ¥5³W4‹ÐÄÄ mk2˜¿2©êžÿ‘´C¼Ûc«´áeåÜ®ÓÓîyQÈÒ(¦(|ÙÀº~RÿŽXkñ8Ð~È#>t{y?ˆÎìJgPVç¾Uâff<†;Ñ -Í%¾¶Õؽ2¥æ»OӐ¾* ͛/¹sï<»P|endstream -endobj -505 0 obj<>/XObject<<>>>>/Annots 164 0 R>>endobj -506 0 obj<>stream -x}WÛrÛ6}÷Wlõg†¦u³-õ¥cçVwrQ#uœÎø"! 1 ((YýúžHIfìŒÙ€ÝÅÙ³g—?Nºéx@‡»¤.~.Æt5´8酯ztÕ§Á%e%Ît±iÿÁgRœõÓKŽ®ðwÿÃY^öFÏ.Ô6zlè뇓Aw˜Ži0`sIƒþ%~ǧ‚¦'ÇÏX\í÷†Õ£g¬Ž†p{8;ìöÓ«½åáÅ0­rˆƒA7¯øØìŘ½Ôk# t´vôXR¯w™öŽÙfòíÅøāÜÌNÎߏ©ß¥ÙÙ¸¼Ñ,)À7Ùi?¥[í¼( -á•Ñ¯gßÃöÞ0n?°ÕYŽ}½”îV*[Ñܚ­“Ö‘@ž\µ^ëeNóM¬Ú˜ÇÝÑÊw«­ô¯ØƵÞ5‡É¯„§LhšKʌ^¨eeaĪœ$Ak C mƒG·2U’6Êú -Áî1—Ò[eeæ›/Ø—Îzƒ{#)GÚxÒ2“Î »#§t&›¨ÉVwÂ?rr-¬ðˆc½.T!¡ž(éW²qFJócÛ§Ç~asõnõçl6áy“™"¡ï•óT¨¾çVÎáÎn¤¥ÜH—>—ä‚€TصDtJ/É휗e+/ÂïƒtRûdg@ò Í70|2šî”ΑàûÓñEBãQBŸÞ% O·›Ð·Éýë„>*]=ÒýéW™ÿ)`kZM±ã­œ+¡“ o Ðöj#úÇÆ`{!²‡-¸Ã¶>‰Œ¾L¿%ø8ï't]ª¥ø2MèFòç{+åÍômBŸ¥¿§¦V¹$$£4¶ú¢fšý£Õc@D€  o*“;jÙò?{39¿$šàe&ûtó‚Ó•o„öb)ÙAMvN¿§üÖØ™·îïèʅ&K”Ksh͈ׄ À6A¯?Óäۊ]J³•ä¤p`\§þ¾2Dœ·!€MÍÔð%s³ÁC›5mt¦¦²(‡Ìä’Keð¹Î6B€@&ä q­³uÐÅÀ´ýÙ*‚çBZçÔ\Êï~ÅìAJo ·À2HÑ&Ämé¯J?ÌQ2Ò¾Äì;‰–‘™²”¨Ñ©¨Òg©ÃiZ(‹ÂCè¥ÒªDeåA{Ċ“¬C•C²RúFJ±£-òÍ'œØ´†\²ÔÈWÌóBàK‹ÊCÓÙ™“B6ŸÝÍÎÝÌz¤ATçÀA{ÅJ×bT¶z)ó ¾êVA™ábBGuä<11µð@OC'§RîÅj߅CE+>eyÄ:4x½´"‡ÆçûèMhμ?]:بhüû<=y0z$¤{—»è 9á ¾d€QÏ¥a£•þgÜìwšš܎$ãÆ)•7%¢ÍB[y–9 ©E£¿±sî¨Ç-²Vè!šiT÷ÆGÞP+¨× P ¿ -꽖RŒ3!ëÀ=7HÁö%š_µ<*¹‰ #z¦ § m³Q— )¡ƒrWvìf± e 5Ȍ ½2®‹>/XObject<<>>>>/Annots 169 0 R>>endobj -508 0 obj<>stream -x]T]Ú:}çWŒö¥T“„B_ª½{KµR[uw©®®Ô“8ݬMmg·üû; „0ϜsæŒO¶YÒù¥K -ðI6 ­7iAÅ$ô…´Žh¹¢ìg^î hoXJqºÆï?{Ž -]üãçÉ2Nن’$EÈ Å«%KúUCO“8ô»AÂ"·»Lؚ¿ò»kì&K^ì:ñ&añ5ˆv“Å6¦0¤].«tM»Üh—M Ä ñ½zŒ¾)+ÈVÜÒw]¿ª?Gʕ0ò¥¦6VHR’¸<җÛoTK+tÁ3ah8Qð¶±ìýî×$ y´”]>½LCRYÊZ­…´Í‘*.óFÐA+«2Õ2mV9,ÛÝ÷=}uïû¯xïðº{˜‘Ò¤l%4Ý»ÒRØóa_w±ÝPˆ²Žè|v"¶btO¿ZcÙXÞ4"èÍÀ&w¸ªZ–T€:„Ä‚ÑmÓ@ -¨“C-zbá -1‡‚ý­ÞzÓJ–]È¥Øóȉ=ý·Îé¨Zʔ,겅7°Ò´×ềŒUÔ1 òÍp¼þ?Ò½õú{áŒjµ©ŸՖѓ²®iÿ#÷K]Vv€¸„P—7F‘ÕG*šÖx‚ŽN_ 3žUhêJgHGE ÎZ̵à¹Dtà¥0Œ\ŒKzº.Žc‹Ô檰n¥“°wÄ -g -ȜNzäÎ@0r£¨i"«yC?¿|ðÉOçG S7¥ÊÚÇŢ˝_™Òåb|¡;1x3ìõÙU€c*Õ69Y]Õ©Á=i²µuN¹ñaˆì­ÌØ ½ÕNÍ`}/_¿IýLH¸q[+ ÿ.ù•L-„ñÌÌQ–¾:|F¥RÀ£ð=œCK2Q¿º¹váG'ÔÍ0\çF«—ý¦ÏwÑl8ûª¶‹7 ö0øÏ÷锱”ú3 -yìæE4ðíÏ)̺ç{4t˜#\˜²Ÿïgp*”€¾WÕôƒó÷ý]3FÚ¹½Ãv2‹þÑÅ4&M]MFw•Èž cœmÓ¨’Šº¹Ú›d±Mû3Lb–&+Š‚¨›ûA¡­¿Ûî"»5ÏðÉC+Œk¶Wz>œ›¯ƒ›Å½¼Ðԁ‹Ó€¥iŒ» -û+÷ϧÝäaògendstream -endobj -509 0 obj<>/XObject<<>>>>/Annots 198 0 R>>endobj -510 0 obj<>stream -x…XMs䶽ëWtöÈU³ÔœO_oÊJœJ¥[‰/¾`HÌ W$A Fú÷y €$8Ò$µµ³‚ht¿~ýг¿ß-“}NӇ>ÑÖû5m÷iIÇ»Ôý*¥mFù†Šg–ØÄ)üüWþ m–ëdC ¥»d5ýr-Zg3Û.K²é\ºNÖñÁh ¯ù~¼ƒÝòëÍŸ ­Rô 6EËpãds ç¶Ë$ÎEK܇۳ȯa]ϯŒ×°n¶É6:;áå~bŒ9úõ7¬v[üœá¯Ãš «Õš?ßòý&Y!ß|…ƒ~ÁùFK仓-Í7ã!Å]lÍ2 —¯r_¸Õ–ýº•«\´ÆÙÝrÜ; ہבæYŽK2àÇlÈ׌…_¹`£5¬Ûu’ÆÖhÍuåMgWù6ò¼ZïÆÕÐ2óñ?™[°iŸr Á–.·€d2Æk¤™îÙëx4^Úç!²FkXQ÷øÚt¿ Ã½ö"×Ñs¼n([3¼‘5Zús8g™&é>ÂW4ɐêI¬°.7pêWDé’9GãlJA…aL@A¸q[5ZÊæ±5Zʲح‘ Ð_EÖx +z7ö¯Á–e>³2 -pþŽ_žî¹Äôt„vm¶;z*`á7Å}žÐ_T{¬N½¶Rí7O_Ýþtå÷Î9§ӄ~=Ktf!Zú‘NÒRߕÂʒ¾/ø¬¡Çª–æ;ÁG¶e_„ÁVÕқê5¥,¢x&іdÏðªZ[µ}՞¨”/²V]#[»ïáŽ#ßA—ª®é ©¥$ñ"ªZjÉÞዱ.;-ÿœæ>ïÃHçr¾ÛÃî{RGB s«Óxgí´úŠóԉÓÕ}£‡Ä¥Ï+øñÈ©#ts&« q…¬^}K²AÔ*[«ÂՁ.gÙM‰µx -Ñý¤«õúFJ;ðbp‡¼¤1}ÓL¡+À‡0¸¢mUß gUsêÊع›1«U_æ">‡þ̛MbਐG¥O2i¥uÉ3ób&9PÎq¨GR ’¨K.?XH®2·ôš˜·ÖŠ×µ}száèÓõºSp\¼›@fïÎ§l&êúŠ³hO ãQ«†þ޷χÞX`Í\”BוôuŸ C%Œ£ø„}BÇî‚^´gIŒÚÃ#ɑÿþP«ây@óáqhŠ{O`Tœ.J£ ,!°„Eº¬ïNZ”\ ¥àw1y ”ˆÂZb¡'Zô—µSÚúN›C‚†lç–kå…P°F؄þ©,èpF `ë"PÛ”6@Î0^Ý`üýÀGæ÷øs¡óU˜u’WQtí;„ -ŠRt”Ó\ùñõþàòƒÄpøFM_œ©jéX« ÿ;Ýg¤®¤ù_T„þýÊIW†ûðSè£O®¤Ž†ïudª"ZÊKÛ .é}C\Tt5>_„®TïÑ|'S÷‚¸åÇièÿ¦:-Yæ]ÎPF‚.Ò捠Bj+€ˆ–¿÷Ò@LÃu ƒúË|~ë ?hÀ'Ճܥ|ÀV^û'¹€ö…´Ú#\ xÀó'ÿj³ú“Q{Ÿá‡46>1Œn‚P Ä(/¨>šY5]exj(+Sô(2&4%Üp³~r, ByjpéÉw7ߖ'{ü:BŒ¯&Ÿ©e¼ÂÞòÄù…i ŒìE=?0ºÃ›õm‹º/™Wó]S+;‘(ëK¨ç|ëèÐ5•ðTù™ÚÞ*‘à–+¹<µazÐx¡B‰>dÅ:¡¿á↙QŽ+â&lY~7¾6\1”̈́@8í,Gu Ä`Fߚ…¾ŸÃ|çWÌ0då« cêÑîd‡7œœ  ²D«”˜CìûÜ9þ•Ò }A¿â9¸‰u0M3‡–cÕGS3 ¥2Ä,@UÁ¢£ÀXé.qc?‹éA« ÛÅՈ9Uûlm÷íÃÇ-éü¬›`´|¸U©ßî9câ)zûí|Ëà4ƒ÷.én¹ûí›Iš †oÌùŸ>v{ÿŸ -CÔÃDéú°èµÆ7—±êã÷*GÑ郿F`Ðà”1Æ·>°k7}uJ—©‰¾¨­ðß»Ý -_ë "[ð‡§»Ýý ‰Cendstream -endobj -511 0 obj<>/XObject<<>>>>/Annots 213 0 R>>endobj -512 0 obj<>stream -xµZMsã6½ûW ”C¼U-’úœË–w6ž™­LÕdâTv I\S¤Âi”­ýïû%nð’l¹,›lô{×Lú·»I°ŠÅõ£ÞŠ ¾f«™X¬"QK±¹ Õ­P,"ÏEº‡Ïƒè#¤¯îâ( B1çÁTìE/‚Ø\âç;ûÖED¶ÕºÞ‹éd~ã;ã`yAžÎ¦ÁÊòEb>‰Üäú‚H¯Aªßhb<›N‚¹˜.ø=·šà$X.aí?ÌÐx‚KÎ1=-Ƃü'3øîE8 œ¾"ÎpYÖh1¿±F`½úÆ«ÙåÊo¼Œ!‡o4 O¦ø„bá4úʉ˜‰0Šð9Á(3M̉ҷ«¥™î-X )¦=¨.KžÅ˜žhƒÛà”Ãdœ¸ùøñâù %Á1Ù>“qâ˜üx&3Ìlm‡É+«2 ¶¦*io2ÄX®‡ÞÄ u‹Sn@R?žQ‡a²}¦Iýx&C “íã0ye%C¸\aMÒ²r3ÄY®ǀ¤ÚÄ¡iu8‹íã0 HêÇÓêpL¶Ã4 ©Ogˆc²}&¯¬Ê° ®Éfˆ±\=ŽI‰A3ê0ÛÇaÔgÔa˜l‡i@R?žÉÃdû8L^Y•a¶@‡f3ÄX®ǀ¤ÆÄ u‹íã0 HêÇ3ê0L¶Ã4 ©Ïdˆa²}&¯¬Ê€³ N~\—c,W‡c@RcbЌ:ŒÅöq˜$õãu&ÛÇaÔg2Ä0Ù>“WVeˆf¾ 1–«‡Ã1 ©11hFÆbû8L’úñŒ: “íã0 HêÇ3b˜l‡É+«2LV8/°kˆ±\=ŽI‰A3ê0ÛÇaÔgÔa˜l‡i@R?žÉÃdû8L^YÉ°Š= b —ñÁ€žÚÄ`ieƒåáÐ ˆéEÓ²04–‡C3 ¤M煡±<Ÿ˜t7¯ØUÃ.ã|¿ŽÚÂ@iMƒåá°øeô‚iIËÃañ«èÓaX,‡Å§$ݟãé›ÆpïàûUÔJKÂ,‡Å¯¢LK°X‹_E/˜ÎÃby8,>%éþ”úp; c¸Œwðý*j ¥%a –‡ÃâWÑ ¦%aX,‡Å¯¢Lg„a±<Ÿ’t?Zâ¬Ìe„1\Æ;ø~µ…Ò’0ËÃañ«èӒ0,–‡ÃâWÑ ¦3°XËß^îŸWx+^6xN=_◠i˜àÁôKzó@¼ì$€&ønäQÖI!²|³Á½²£$móªlFb“² į»¤Uc۝¼ŒKeó׿¼üTS†šj-@uÿԈj#¾Ôù±úvÇ(XáìA´»Z‚Sƒkl…º–y¹y™]&3Œ«ÄZŠ®‘™ØTõ…°‡®>TlÞQø -_G€P}!=ùF ™Ü$]Ñšî6Ð{ŠEŠÑ>ÉËÑM@â´ËӝÈu÷(‹³ A-¾Íú¬üú‰eP®¨²n¼a`µ/†“ʍ2!Ë´êêd &H°O^%Ñåµ8@ɤ•"횶Úç¿'*=")3/qÓšԙŸÜL”$Æ e]¢ú©!(Q•Å9_ -™à¢‘’¨¨ˆT%é×x-p¯$铚î’ n‡*'54/iô­U½/QVRBÙĸÏâ>)»¤¸u¸ÂQè‰ØWÐ.“ÈQåä·C‘”J¡À€Eô -%ñCR¹¬꽡ú¾”‚¢Ê¼®€Ë”1U -=>÷U6\[ª°Õ¥<‰&ÝÉ=Jµ(ªSCõìÌp[K¤¶›B~Ë×y‘·gZV¬šA ” 9\WÔØÈAïbµx{«÷Ôï)¿×¾“ÊKqÑíÑû¤ÃºïšÑƒ}–YÞí±Yé–Oìô²Jž²cR¦2õ Ì»/¿7í„Ê¢ïôØê¨.©ÀkÚîZì5(u40Tª,ªiE`C©[ڞO]¦:æ™.ÔSÞ¢lj–º’îÚÍõ.!FXæ¯ØæpÀ05‰ú6ͬßHèä!0ç–Z|{›‚뎱kÛûÇGÝ&Ú&qà°‚ÑUNc„ÜvÍ­sŸ¿{Ý¢7U&qBm“5 ”†À¬ÕÁÀìûªQíªª±Ë¶bƒޡӚ]œ\3ššZÑ7=Ü,¼‡îÏ+ñ -¯¼‘ÆEâï¦KöÉқ=…ׯ«E¿®ž5¯²áuëo± ª¯÷þ'Úå÷I–cÃqm}Ñýë‰n¬™3Ul“ùŒÀŸ²ñ›Ó+ÕÎC¿|ýх:K%9µûˆü·xd¡Š&ÿýM¸~@†–áøðé«eœ”ù^éëΡ¬Ü;~Fþ«¤£46u”¢©-;®?ˆþ^õ{ì#ºÃ»‘–UùF¯¾½õm͎æÛa0óøRÆÝAЈ?Ï öVô´}S2o5z{Çä„ üãËçE›Ð†àÊãO¤-ŠúÉ1ù9­ó6óÿ Á¯r=^w[Ÿê4þççù¤ÇI9Åá´ü³Õÿ´Gw‡:[pTu¦V²›†·Ù|{ÇLõñyiúå8 -ñO6Ñ\Ìño¾P§ú~#{®åoæ‚=ì©yEþ©“úCIwˆ“ZÎæb¼˜à’á¯`qÓaiÐtIÿñ„ÿ4¡KºóÃËÝOwÿ£.#™endstream +545 0 obj<>/XObject<<>>>>/Annots 148 0 R>>endobj +546 0 obj<>stream +x}X]oÛ¸}ϯàö¥)hmÇv’{Š¶h»ÒÞnëÅb¼Ð³‘D—”âzý=gHùCi‹í&‘Hçã̙};e×jÿÃß«þ›]ÏÔåõDy£Ê“±¼«Ë‰º˜«¼Æ™6í~ðL†3—Ól¬¦W—ø{‚ÿåì~—üõùýÉäꚛG£ìJÕêbt™MÒS¥¾œ>cõâ*›¬òšéxžÍ‡×\L.³Kl¿ÀŽMÇÙuz¡ÏXÍ²‹ÃՃçâ§GgŸ±:@¡x%>cu>ÃýûUª{1™ÃÀ§^Q“é,›ýha<ŸÂ5ƒãÑ/Ǔk(Wã÷þ‰j>cu6ä¸WVž±z9?^=x®Õd4‡sögŸ±*÷ïWÇ£™h5ÂH†sx–O¼—æOŒ|½8ùýݵº†¯%°5¿b”…@j¤ùé8›fêï•n• J«gkï¾oŸ½T¸*œ ꓷx¥6Î?¼|±ø +Wê*Š;_g³ 䝾R³Tr8 + +Æ?Úܜ©¥¦P®ðàÊv£ÖÐå+¥w²ÏTKòʚ¦ êîÔf&SKï6î^¨\7ª FÙ&´FCZ©r×4&oms¯ +ëñWµU­ƒ CGê\l.N©u *uuÓ´Æ7¦ÍÔOý­XŽáA¶DC ¯4-Tå)·üŠ[ÿÞªÆÀ¦;¾Ö÷&œ)[Çßµ{´ðŽAïx¡õÇ*-ÍJWå™ÒM¡6¼•âã+8¥p <ä ²U+ì‘+‘â¡«pýRçPQ MªgI:b!¡X¬ \L7׺Ùâ ®'.ìÃ%Ïvq&ï¼m·0©„37ºªàØ»gʔ¥Í–œk¹ÎWò^TwPÛCÍàŸñί]hZÞ}lvaË»šVl¥“ ’ÎsW׮Э‡ÓµahSBÁh +NÂlp•AìK—!´5«¡0öµ„±¿v̓2•­m£ù2S_l+Zšvc‡­ë|»»S/Ù¶ƒŒņcÃ,±½6¾Äej킕+ [iÊuíÒuÐ{ +]Ç¥óµh«ýۙ?•Ñð4œXUÅ߶‰RhG¦nZ†“)û¨½5ˆ+Õ‚í«Æ~뢣 BÆ2\†üÙ¬,sQƒfPR4@RµÞUêÑj†TD».0ÙJ{ßù¨1ÌâÅ0È­ijŒÖϜO&`+ðÂ8›eO¹ä¡»lzҁûŠ£þUãڟSMÂÂs¨°FˆIiY¹œ.ƒ,¸ +ØÚ¸ÒUÅÉñÎúВoz¼æÆ·\떬@7s•Ç~§#ѝ*Û%ò;fp¾eÚÈD[ñœ7D3HÙsŒõdì6¾ ØêÕr•žk•‚?v°ÿšA 3õÚ0d(EˆW˜¤÷¸—F¡@I MÒ¢£áXá6MåtAK-ÀÇ̱¥H+„查uNUˆp…~DŒpdc‹v%%Ë؏Êړ¢®‚ƒ5aÝ×'õÇâÃ-œØùÎg²³6³>1í+2-jsŸj™”|Þ¬+ǞÅe$m +‚ãb•ËTh¡•öEqí/ººfÝé¢Î|†4ÇLQ¥R@r³­a\ÊB0(ÒõX!Qrè×L®[¶ytÕ#a×Xé H•1ÓØËÄ0€ñ2‡«gÂ9»–ã¬CèX੧v“!E¦àßÎIldõ†qÙ+‡VÄß~¾«L}€‰q(Œ£)³3hŒðHr7Qr¤ÏÆü¾‘Á§'iÀöóöòƒC;Œ´KÓ'-±è-êX¤·°¤ +%½Ê®‘ìÒd¯#õ>è-[XÎAþÒtx0¶½ÆØP“Y¬c·ƒbIjG9Ÿ–]ó€ùݵjºz}Ü$¨ÛÙ'6?’À˜G¦ˆÜ÷’zùÊa¼ïûç5²Ö®¡K/Z€ŸªÐí«±kØíB¶îÐr‡„Ô/™MÔcœþ`Þâˆ,@´• Ã،fB®#°ÑÓK_¯˜ø*:w<ÄÀÓ©Zù”{µYñ¯‘–àuÉu¸ÍMë!®4æeü”¢1©fHgï‘Ñۗ곹G_¨Ÿcï âIn‘Æ3zåýÇ¿Ô{¤¸GV~Bnsu›n¿;}ÿé–}7ÆB¨Å>†Yˆ°œÁî5*'fl ¨YP»„ï‰HºncÃêà¥tjNZ¡¿Ç„ +«ÁSt†zƒ;¼½_¡à§‰›HNþL³nú“¤h©œÌÔÿ¼ÈŠù4J£×í͛·¿¼$GPlfƒs|9È ToâbH당(oW ·‹Õà&XNp`´D›l¾¯c!FWVs²Ã #àCPö"Í´ûfJ””9@ÏÄRÇ4¨îÒÇõ +þyóþÕ?@Œ2%ŒßU±`"Ô;øsbSÍ9!$’ÅÎ1?âgø:›«9>žŽåûQÂwҘ7ü°ö*°ZýÉá‹ó>o8ïž_Ž®ã¤¿çÍþó·N¯ðújŠÏø 0ᛷ‹“?Oþ\×c¥endstream endobj -513 0 obj<>/XObject<<>>>>/Annots 232 0 R>>endobj -514 0 obj<>stream -x•XےÛ6}Ÿ¯èÒ¾ÈU#ŽxÑ-/.{7ϖrbmåÅ/JÜ!†—Ñèï÷tƒ¤(Zö&e[e@÷éÓWèÏ»¹· éòQhŽ?‹Í‚V›€JMɝ/_ù´ -(\Rœã·ú¾ãÍi¹YãÓoõÊݕµïmä+é­[™#Ë;—#Q>®¬oki·nH ¢pnéÞij/ݲçûòÂå njÞij/ÝÒô}yÑzÅtß°vxg¤éâ.Ÿ÷û/waàù´ ç^H9-B/‹Œ¾Ü –9­×8rÙsÐê€#qø$F˞Í) 7|DV,2âUÄßåä‡Ë~Å{>lYõ»Á|éEíŠw‡ëœ‚åúzw°ÆîzXszø.ƒæsÆ%¬õ`ý ΅ ßáñ˜èV|+jìú·9îsH»ï×؏H 9+waے3ó‚¼M»’ÝÁw‘,ëÁîpÝhÉN’謱 »Wƒ]¶Ô߯#KW È#qK0÷Ì­XèpÍä† w°;X3¹sÀ½ì†QÄJ[É ÞÅÙ5²¾ûèªÄª÷…‘DÎû퍚òði>mò=Œ€_x‹åš¶{.7ˆám<}·Ÿ%iVë25ڝ)KÍó›íï8¹W(C8<5öÿsÖš…Kpµh¬¼5tâúG ŒõQÓ^'ªÉꊾÈÒg©¶´+µz¦Ê暪´ÖÕ=é×XujME‰-éÙؓ¡ÂM¦Jš¥Ýe:Ÿ¸Ó",5qÖìõþžAÌifD÷®©)5tÐF—*»¹…vu8”ºªÒMg۔4ªt]ƒ -88>„ãtJ³ŒŽ -—?WÏ°FCo¤ý‹»åÛ¾ØKõ€/§ÔTºÄmÓ¨ìú{‡ä[¯HﵪÓLïiŸVqèֈ¾‡Ç ù{v‡ð4szþ8ž)V†ž(>*sp>ˆ­IÒCSB˜50¤>BÁ®´'€yKÿ²ºIª&cëÎî9Yª´‚‡tܔi}¦´ª]½åC—@„`ҟjXvÆiSU—­zÈ-õA¼ÈÆWOïÓZã â ‚&-;tˆ •ÕGÛŽrüt´™vê‘CçÏ?è:~(Êôžž¯1Né˜"ÊôìtfÙÛp#¨xñ%·&÷„5ÓeQ¡ËVsXvž8c]Œ$– ’ZFg;UÁel¢-ï鳓Li]é,…t—œz-€!½×±bý5ɱ‘ec ßVì´oáƒWöSìrâJ~ëßΆ§D,€Ì^!‡_ŽŒM‹ ÒM]6U sœï¾Nµwð8½}|÷ë×7÷r_rƒSTíÀÛI8ì6¥'½s¤´Ú»Lu‘2{„Hn¯= 6AÜ7ÈU²IªÍPšˆ€oÒêá± †©6€ g,y¦b)'×w.y6çKO' d„ð/+tøgÿ_×"áÄëó—b‘+ì_'/'ÊõñÞ q|þ*„r^;-}½»’xO뙍UÖ;9õ´`qˆ‚1‘M¬êÉ×7]`t,Nnãôµ|Ä]}D¬ã/ª -}EC)s•egHP—‚Ò–õ5ÎU­pÏZý¶þMÛþ⹎æ6»â8•ºò¶¿®hâŽM¾W¶Ȩkz;o bì[•âƒËÊø ®„ä=7E‡£…/Aˆ."I>¼ÃÝzRƒþF§c…ø$üž³+·û49²•cïEã˜ÞQ¡.>.ýΪ52žä‚‘dg¥ÿ£ã…ôã1*eÎpŸ9¸ï»‘bÚEkÃ›2†Zׇ¹$}Ø~úHµ:pÕFNÿ[½¨/q™µG¿» Ü^ é×B:27}¶EFlSqló"K+®úiåü œÿ‘iòš¨M—g-IL2óÈÌ kf®ŒCJnÍH©2ƞ•‰µ“Ûßdé’ H։yÀ‹~örWïŒv8»Ê/~T–†ÑyaÓ¨ëË}:3×ÖR2ÂÏNlK›„Ìpîd ITSÛ­ ßbràŠ¸—¡*5pxiÑì¸9|zúô3ÕçD´*FmITžf)F0iÎ]'8Îùš]ï¸áî“YûLHY† -}/)Æ4É«fÑ%þí®VjýZ·-UbËùÈÍq<(¶îçHqU§@õ3u*(zÑåÃäI—I“uíåžxT,õŸMʽ†‡ÑÕ0S—5@pÆÎbnºA€àaû>l·ŸÇT~†hÉÎ2Y‚P©ˆôËž:s¬L½â)™…*‘¬‰7*Ռ—'æ¸uìƒëx|zþE•©mª›YҊïFè¿ãWTûYM”~úS.Fí 4ŒÕÖæëK}Èÿ° ø}°'1ý‰Œ8ý̂…‰ÇÛëYØÌÏ<£|¯Ô¿Gn¸·ÉeF“ô‡Ã -köRJ88t…×KRÚ|̒÷°{>›s Þ)º]ß1¿¾AHZ÷nÀhÖ£Ä$Œ˜˜jä7£ë“-Ÿ9^8VPj -J¿é÷Œ»o0ÿ7§úÈÉÊSgëµgn4?e$ÖLí÷\¹¯wŽrá¢{üFs_ lª4R%Â"¾Û„Ÿüo½s¾³™GŸøµUa ÄÍùӘþŠ«> -úÁð.ÛÐb»]9t@õ;Aw -¥e¢¸‰q¿*,¯í.ˆ(wÞáœsa•#_¿Á¯AøEÁÇ뜸gbu9²†6ú°hZûþºu2^à0Ϝlïj'?”b1\07—çü,XtOlÂkzè -Âù‰…»û]»™¹ø‘Î? àóE³ ų¥>­¹ü´SGÿlŸŽ`Ïßö…ƒ¹ÜÍm¨2ëøB(ÃÿÁLGRGëˆGr›îøqÄý`±ˆ¼õbIËÕÆ Cؽ% ¹ˆÂψ“ß8)ùMÆrg~{q¶šƒ*~÷°åÅˇ"þf¹76üÍÏÛ»ßîþ©²:Ïendstream +547 0 obj<>/XObject<<>>>>/Annots 161 0 R>>endobj +548 0 obj<>stream +x}UێÛF }÷Wðm7€­JòMz*zÛ A›®Ñ @^ÆÒ؞Ýь2—Uü÷=ß´‹&0,‹&‡<<<”¾Nò¬žÓíâö”㳬—´®Kr’v“"ýUк¤ùŠšgr]/¿Ÿ,ò<[Ñj^gu´(ª¬>[š'cÞ²¾Æ&ïȆw¾ÊÊñّ ïr‘å#ï DºcôÉ_dkZTkܗø¦.ر\—øƱX¬½¼`_9Y ÝÈF}$(Gޔø—躬¸B2øàÈì(%¿ùFfG¸«G‹ª¸ÚÈZιâ-íȆw™gÕØ;²á]•¯¼ó‚9å&t6Î<¶á­jfåVw1Ï´,òlν"3XJVjvdÃ[××Xö&–ò]½¡þ×Í䧇šX›T¶ª*Ü´I\9mš{ #Ïè 6ꖴz–,¤îéh㔆ƒÔZD´öçw›§”¯:e›L‰t§,EF­‘Çñõt¢¢Ñ‰t೜’ÝQc£ó¸¤nl'QÈ ¬ñ$LË^`Š^R—òî¬CD'”âöÊé”ÙOiø%owaÐ"ÒúË©ûíHƒ +‡)g|UÙ]N³DO{œQ *œngƒj%íe˜‹ëA:O_î‚?_ށ±óCÒ<Ù#Á}«ÎÈwRê™Ì$ƒ‹>Á qíqJO [g{ö +26Èì-Å%kèÂp™Ñã¹Éï{ÆÅ4z‘¦g Z€âíÌI-‚loXÓ¼m¼t<‡-áæE␣ށ½DÜXÀ +‚¥ñ‘©fy\xvƒóµá ¯¹å0a)i›0Môuj˜³ñ`ۑ}¯Ó,ot5¶?2­Ԕ}–Ôs‡ ;H@Ò> +'Lg<ƒ×ZÓN}#ßĚ „~ Šë¡¶­Ò*Iy%ÆÀ“pÒG~<‹yFÿBê2ÍóiÂџ÷äÿT¯5`Ÿ%Áª Rt( ˜ƒ8ré½µ- ‘½ì…‘µèUÛBœR/šg±g]í£Wi1šØ¡Í´?48…íðЋê@)  ðºÑ`Á€Þ¨*ºF>X·—™I¡-aÏôidªM+¸7 ÉÍ4ö0£ÍAòR +D"ì÷ Ô;O…‰B'.±jxb$9ÿi IÒA¼@¨m Qò:ñæžYI¹ÃôRHꇀXú$?ŽúíŸG”ì­WÁº³N/ˊÜ|v§°ŒºRAl5èþ™ø1‚bçñVTü8+ð櫖+*j¼­Ƌ¬œüÁ,hüÅ?é'%=¥˜ÏÙåàl×§M¥÷ÒH'4}0¨Õ¥‰pè¢ÂˤZà9Œ…žó?l&Ÿ&ÿÚU¯endstream endobj -515 0 obj<>/XObject<<>>>>/Annots 250 0 R>>endobj -516 0 obj<>stream -x¥XێÛF}Ÿ¯¨ÌƒWŒ(Qw0ۛIŒx½[‹ À‹Ù™!»vsdýýžª&EJölAdµŠ¬Ë©ªSÕóçÍ8ZO©û¨ö4Æóõœ–ë Ušv7±üÓrBÓ%%Þã!þˆùãÓO7³8ŽÖ´X-¢1•4›M¢Us*èóMÿ ér-{R(¢Å’ß()ž³9ð‹½cIói4ïÉ:'ä;ΊS|ÎVK|Nð¿0Y£bZF ؘ®'ø7œØHÿ ï&“hړÎ×üð|]ìÞê|ÿ ¸“Nâéù$RšÃí¿Âìx†°ÃIÌöΐNglVžeédÂoÍã/i²œÁ~8‰´wfÍK ÖIûgH'sÖ,šÄnï )P…Wg)c8s”W.–ˆe¶`yIkv+XeïŒ&ŒU'ìŸÁ%ìõ¤½3¤°r!í!Úëþ»½3¤kƨ§¹w‚1'½“öϐ¢`§}iï ébra—1˜¢˜Áe± F®¾%€NåtÍE"†.èúZÕÛÍÍèaFqL›Úo±ZÒ&•žÓ&¼ßÑÉÖTՆþUåÏöˉ¬!EÞ|¤cî3ª¯jçuJµÓ•»§£F/$¶,µIÉgʋ‚ÔÖÛB“L'OøUßmþ¸în4րT’hç(±Pk yŠ†(÷ ¼(ht:©«ÜŸ. :´ +°Ÿ[ã¾cùèaMñ,6DÅãk:˜FȽ7ðY¥dw¤Rxmì‘ÞÓ^{Ä&NêjkU•ÒAy¯+ƒ7(µæožŽÊxòŽ„ àÞ‰÷N>ËÍ> -¶;P‡u°ÉšC¡ p<ílEÛÂ&O//Õ^#neh«Ûð dF— "àÑ*Ar7pÚEÍ0(­.Ý`lšK=gà"úyÎÔ³>§§>Élžhë›èÜ5_)ãªâÈâ/1ýôþ!DEõ¤èv[(ótûxwOˆ[‰4G¡–À5dËð‚xØGŠP‚ ³}´ž}Dam@ÖøfŠÜw¤w;ÖÊà6 ³<ÉžÑÆcAvOy•ÇÌ:MÿþôÁ]Ù.•Ç«[‹BW Š"W.äáÛHmÆÏ_>ôuZ™‹æËZ$‰½|£M`×Äm¢¥ ‡íûÃÉ"ÔÓѽ2FñKÝÞsæ Uf/Uð×ÿ5ÇmԔEDIf¨t’z¼+ŒG{±—âY¯öS½SuᣮÄûxìòBKՁSê}Æ -.Ala€½¶Ã­rh¼ Ê¿LlÚJC ÞÝsNÓïßæšiD¿e':Úº€NsÚÚ§ŽC^à›ØÁ.†15ò ÔQnu…”)¯‹‚ -…/•Nè` Æcm|v©£­¦ÃQiGWíkPòÑVO -£ŠÏìá܄glhÚyØ`î‹ïò}])æVˆo|w¥ª<,xá;q(/ -*Ր®*[9.Ð O‹–ˆÏa<ç®VüJu²¹—º*Ù֞5»ÌŒ¡Šµ´¤ÀßöÅЊhØ÷YW ]vuA9õ@ƚŒzÎ÷!•‡Öí ƒpÐGº:æx<7ƲwÁbªÀÚÖ®7†#úÌjÚk™ï3̟ÂYÒæ{âÃiD$ÀÆ\·ÃVƒ‰ËÕ,¢>±È¨º,¡ACî2¹¢ÿY³3žv0‚nۊ/ÍüJѝÌùú "ìF)\i³ÑÌįSúóÁq¥¶»U.Ø)ý¥Ú†ÈÔ᠍CÆ@U°G- Ìï 2âöHS©AþóæP‰©Œ/~á€I‹ -qºØݓT‹A°˜\ -s…ŸnChÊùqàêíã]j“šÇ6ŽÙÃæ -«‚!ðØã ¼ÛUªÄG%ȱP'Y‰8XXFY/,ª;¾UÙN’ô{»ô¼܍5a¨„|˦r™ 8é|îë&ˆfÓp𘗶Þ#’Ô¦î¯âª’M-Oíäu’™<ᦻ'—¬‚|…C;ë/L\æfÍDðÝò8è%QhHžÍ•þ\ÂË¢2WVåِƒvfm¶žó’A•*6èÙõ¬òBaÅ$ì ð} 2M°®Ða&W¾FêüÑÁ‘ð>ß]äÜT\ï!­2A@ ïWG63E…ªPOØfèö퇾ûåÇ¿ß65ɪo -¼á®£j&ñ¡Ò;!ô®–¶À†$¸ÕBÞ Ÿ•X•¤;ñp•jd.Ă…Õ »¦.·sŸ´sæ¤wEž<µƒöö3xà˜n p¡°]q¬Ms]'åÈ<苧bÿ*ÏUµ‘±ÛœÌˆÞìÐaõh-˓œÇڄ¶\*[ m›Z<øÛÛ+Ãܬ¡TùqÎQX¼›Å%†ew𒍊ÒÇÏ<Îÿé»Ç;zF@ArúÒ=cÑ;4^{qâK””!šæYöiC¿åfòËèãæ%Îû]ãrÒ Êîýz¨D 55ZrÏюæçÕÒUÏ‘þ"ŒÜmƒ0Z¥?Ùn1—›Â7 5¬Ðù³æ!›;i+¤ê -Ð6¬cžw|d -½FàȚj*Ä+÷´UU¸^ð€•+ïw`IοÌÌ@ÄLßa×nv{Ÿc:~ÿ8h,÷è oF§I9E;úºaYÿy–Ю6ríQ.˜·¨f¶Š°påp¼—¼´Gõ88óþðýhäp I4n¨X£ýWÞOF?°‘שöà WXÒ×ÓEÇ«WX^ÏVóE¼|µÇêyøÎÄ+ èüÇ­ÞÖÅז ygHÕêN•¼+\¬VM®šäÇóY£´À‘äbÚfêAÐ1¼Ó½q|ëü•Ù˜¯Ëldؾ7\Ž×á¦Lïú?4Ä–‹U¸ŽÄcþéÇÍͯ7ÿš‹Ïòendstream +549 0 obj<>/XObject<<>>>>/Annots 180 0 R>>endobj +550 0 obj<>stream +x…YÛrÛ¶}÷Wàè¥ÎŒ¢èjK}éäÒ4î$¹“v&/ I¨HB!AË:_ÖÚ $J¶s&‰,ľ¬½öÌ÷‹~o6RǏr¥úø3™MÔõl¨J£–ùÕ@]ÕèJ%9ÎôñÐáƒgz}u5÷®ÕxzïCü“³Ü˜`cúÄF[Ɨß.ƓQoŒÇú½‘ÊÕøz Ò¸ÊÔü¢½ÆîôJDÆ]ª_÷q"‡îaóçŽ«\®©@ãVk™«« öZË\MBx®µÌÕ`@_ÛkìŽG'Ö´×ܽî]µÎŠ£qorÖ`ШQƒÌpڛ5 q𸧭=x—¹º¾‚¡AÏÍÐeFÇ7ÛkØyՇMÇ£ 0:œöûëÄ Öр¹Qwéã‘~’)Ù }J¡Ñx ÃÑZàáŒòÂ*ʳGòÆØÈ®p?fá»8×'ì“°oCú& Ù;.±7ÁÚÃÞh: ͹ñ`ÜÞk-ÁÎááAÊl-±ß[úZK²š\:èÌ`昈Dêò;%憝ÀÔ¸#ð>‘noî.^½ŸÁ#8}·DB_MǽÁõ•ºK%“ûê.¹öÔMQyeÚ[W¼¸ûWÑ 9ór8èÍ®&8ƒG=õum“µZ”nW™²R_ÕÛ­+½IÕb¯nK{ïö¿ASÕ¨~ Ç&CJy]ìãqå×Ú«DjaT⊥]Õ%Äx§êÊ(­¶%DuÕNtVkWgÐaÔ½-} ‹÷ +QXÕSïliíR¶R…óª0‰©*]îUe‹ÄÐÀ¾z)Ž¦—Ùª¬ 8…¿ª2[]j3¶ÛÌ&‚ŽÒ¬ÓÙ¦¢~mºl!KY¤ºLíáƇ»»[ºà]â²®ú·®¼Ê솎íÌ +Ê{SªÔ™ª÷ìCF #Bt·50È+Uí+oò3ô¹‡¦2…ïÆø”Máv0ÛÑiå +õÕ)Âúír6éªÙ´«>ýÚUÈô~Wý}ûíEW}´Eý ¾]~1é YózŽ'ޙ…ÕEW½u@ØÛ{ÝU¿A•sx ÓÉfŽàô)ޟt¢>ÏÿîâãÕ°«^çv¥?Ï»êáçûҘ7ów]õ‡ñòóóÖòeî2]Úª+‘È5¸”;6Lß;ÐÑ-Õ_…}<\N8÷¦ö8°WçJÌïÞÞ¾º¹í +AÅÄÀ‘æ5–ÞëÂ땡‚H„\ƒT~çÊ ¢]Yp’)º˜Û k¡ã€†cBœÑêãë?Ô +|Ûé}OÝ­ CBý Y§ù}êL*ÜC@dA2všÅõÂÝcqΓs8æ®.f\jȃ%Ðf.Ýk›ÁgÓU•SÌhJ=D—¥ò¨Î`.³eëªÊ.lfýþ‡dõÔ[äû$ø"ë×*ß+“Õdôù›+•9Xi˜¸P¹Ü(˜Bs+ƒ`’ïa¯–®t‚à.¿jo„Dp»•ÞM)BñIYuŒ8n==­|i˜ª­Ñ"£OÚijbGAê ƒèêÕêp<‡m,Bˆ„âj4—N£šÒÀÔèŒRwÄBÜibš¸<'A°JþáîÓGò Z=57F}p;÷Ô ›cI=’‘Ò?×>sn£~}`U¨~5Ð +I&h£Íç¬y~1—±‰ª-V„€5µ…4(ê|A®,U]Øï5zƒIꤐ|Ý¢7èd)Í)c«ªfm 4ßkÔðo “jc³Œ„?u ,/‹‘Dt÷p¤¯ ™pTéE~uÂ(Òå¹vƒŒ‡ÈÆ+ph›iVtóà#{ЏJ£+Wü¸X#¿mhªäi²ú½.6ˆ£7åóôþJEы½«äË(ìx^-m +ÁÔÜ6G¿‘h£QyÄþ³WôÔ?BþíPÃ$A4Š$#Nè§|}7Ô®¥ÍÀ2PáðeíљaØ ‡â€ê(uW{˵¦žª^°)z+ý:YëbÅäB…¡o;„WŠšx¢‹ÐÕY{Žnµ`ÀT?5‹©„¬%11lW¥Ne& bÁ)hÝB“†'H`º(kRÏ£î<âûü³š³²4Ò(œ@êÚ»¢ñéÉøt•]ƦûÍI¬5TºûóW ¢’4r;±Ä¡y!%AhTŸP⌠ ¿SvÏóéukDR9gÖ Fž Ö± +KG’‰‹sœ(Z˜%®”Ù*ìë4eåIÍ`5yß,… Ɏ$?×)aPKtL¯8H…z&)·™útÆ,³ºZb4Åö'Ä h…ú’Újƒ:˜À^ø¶B(mÊbÄÞ/¿Ou±95Êr” +E Yà,¯<æ +f‡ÛØÿ3 ]q@CeA™'T§A{ðó!ºYJ2°qÕ[‘c7šá,!ßÖ$2S' €æírŒdH_6iT8´6¦öÍüà43&*»´”ã´‚DÅÙãфvtE’¤‰·†úKÜ£pïǟA x3ì_Âjó6G)‘’Ñ õ`X'sȚµ«|'Îõ l‘Ù…F±“…¨ìˆmÛXšuS° ­ó¾ Ê{ë+“-¿½†Š'ditd:Lad] ÖU¦$ÓcеJíRJ&è ý“ò2‹*^¼Œ‰ˆ‰à·ç­ó+'ŽH~¦”„èÈá@ğ#W°Èï·M}Á0$‘Å€ãÊ´ ' Áã3ddç“N,w ÷€8ìeçxuxEéH9;µéþr~Ä.Í&Ã;Ä®#YÛ!"vFаO·ÝbpåHåŽÆû›;Æ<ëbJHa5:=MH¤L*79Ž¿áš#~l 7) ©p稜j0\“uê5 ®œØQ\؃ÂPaäÓì7•ÜoŽøÂ6"Îa$³þ©ùÑ& ÒŒèÝ(Ž7÷:ƒ9Mª÷Ô-‰¥1>¯ +L.¯¹3U™S}O±1Áý=^‹Ÿx©$y…cå‚m§Yh©qûeJ¥f©ëÌ?‡$eʤ +6 ÕsâEMI³PÃUÈʝõ¥Æø +ßßáê4ÿÄϛOø÷å->ÞþÙUÆ'¢é¹öwý|û %í]ÐDÇ5ÒSljŒƒÆm(Œ¤˜KBFÕە¸<_nß¡) ܇„l†¡&I¹§Ûâ/êÆËu]ð©\ rË}ÞbØçÞêÎ[vµFTÙµ<*˜t®ØKy&iP’à,®gè5Ü,ÍKÐ6åao‹K(&!ª çQ풗Ä+Ú¼ã4&̎Îa³iål¬HM­%MO-‹¥ù¯/Vkï·?¿zµím_5¹ß´h¹)Wˆ !oËÞú Â;R" ºI^¯î9:á+™VA@ð„­²5Z'3h›äÙLzÈ‚w:('VÎÉt³r‡c^p£'¨bX¥e²é´rD‹ùŠÖr…º×ŽOÄ8"Ð62N!kϟˆÓœÉ0}»D>-äeC$;¢‰Ñ’¯\pùL¤4刳ƒMò?mÚ!¼MÕ92ã̐æñ-BP‰ÛËÚ$Ÿ¹nÒê=j(*k¼ßÁ ˆ•C}xA!$Õ¢E'¡Ã°Ü Áqâø™mõ¦ˆLñî½y/‰·ìƒk,øŠìÑ+LþÂt:Æ;Oì)ü×»‹?/þ5ýÔVendstream endobj -517 0 obj<>/XObject<<>>>>/Annots 261 0 R>>endobj -518 0 obj<>stream -x¥UMoã6½ûW öä֌õaIî¥Øݶ—¢Ûø˜ -Ñ×2é%©hýïû†²ü‘¢ÛE!äp†oÞ{Ã|-Å:£ëǽÐ?«õŠÊuJNÑn–Ä­„Ê”²‚êr–8ğ„?þÂ;T䩨è@y%ÖçEGO³›åªürcI’ˆÕ%1ÉRQÜdÞ®”¥(o¢Wñ/ε³ ß¼*ñMñàÀ*ÏQüM «Ö"£|UˆœçàἊÈoֈ–WŽg9šæè6Ï3‘rê겈™×%zIçƒËÐEž1$ô´J‘>®8Æ»yºä½û~ÚÌ>­)Éi³ƒE…?š(Á’6õ<I!èW;P- ýF¹Wô‡Ó¯öۉëö4èВ ­rttö›Vž:CO_{Ýüø~óõsJ’±þ"-Q¾iµ·ŠkIÓ¶ì.(C½W»¾£`©¶‡­Fåi«ŒÚéÀ‡®øòÐZ¯xW¢dÝjó‘œ=©˜Ê @À­³¢ s 8;ëéά[y ÊݧÄd¤ÌIÆrVQw Èô²»?r-0´ºn©Q¾vz ®ZP‹F‹ºÚ N»Õc‘%p BˆRÐcáKïy.4 ®¦£uªe$3´½'ùj5x5~ÕÍŠ´âš[gF\[³Ó/½“A[óO’ýn?³°p>t9vº–A5À PøAQVkºÑ~ô†?ªZˎöÀśl²7v0$=½ N”N™ð.Œgi¦ÃÏs1·ª³ÃóûïÒT4M&u}¼CÞß2:ä{½Nùuïzj,ô26P+_ÙWð«ÜêN‡Ó¬lÿ҂ vñ±“Æ€Ø -žÜõ¡eNuJz’®ÍNó¦g§0;H™˜ÁMÇæ„Çy8®`VÉF9VNó3@ƒ‹%ôb ŽrÛñtDΖ´HùI‚ø­Ô†‹NnF§y®Ã|Šº¢_×.ytÛáBžÿ±ó™µ9sñŸF 'éÿï¬ ú…èÆ\£ê>/XObject<<>>>>/Annots 189 0 R>>endobj +552 0 obj<>stream +xmTMoÛ8½ûW<ä’°K¶di dÛ¦è¡Åvחi‰²¸–H—¤âº¿~gèÈAaXАóñޛý˜ÌE¹ÀëÃm1§_VfX•)œB3IâQ‚UŠEŽª§˜99]ÿ|š¤ÙB”Èó={¤E)²³Õá_öGžbÁw¹X ¾™=+QŒîFfOÙ(ü”„ãFfry“3Ir..˜,–7‘c»G’§7±i*Rä‹R$„5‹x¢q¦1¦ÍR±¬XP†e±¢÷”þQ²¿Ö“Çç¥È±nH¾¼(Äë:ª6ǺzHE!ð[ q÷·Ó/öçÚÃ؀Òf‹Á«úõÐ÷GìåVAv¡µÃ¶ÅÈÝ Æ°³4õ(L¼[ÿG +§ú³„:’€‡gí|˜¢—;?ØÐÊ0Jx +”§Àb#»îx“[›#^´×á´!ìÿx|܋ý£Àw;Àò®†W\Q] öR›HŽÄh˜ûôâÂ5ç˜E 뇪•û ¬ÒÅWLLIr9âeÙEúL¬#é¯ö݌Aá`ÝΣ±G;L±,sÆÛ\ Þ{ÔÚPùFV¤ZK٘Ãkg¦œÄaãìA´Ò£’U«jê­Sµvª +š ëpËJ™Êœ˜<7ŠÀ¼ +s ¯cpÒÐ(ò U§dÄ}-I cA¯6œ{ê[݄™S•5·ä2 `îßÀiU·'ýµ!–<÷]G‚wGâÐ8åÛ7)¦qV9í˜cœ'X³&áÔÛv¬)dïl¥j@îAdt™àE:­¨CÎöWa‰ûYc'O3õSöûNMñÅþÒ]'yiu,[Õéj‡µ˜Íþ¤†ª†Ð;Ïöm+žêI7uô|Ï͋+Eø ¡ã<šܽÚQ½uGD¿»èx¾ø ýî||ÝÁ$á%L²¥(²üu¢/+­âe~Ÿú1(Hè'¿#ßåy^Ëb.ŠbIºÏøäãzòmò?Ëñ¾endstream endobj -519 0 obj<>/XObject<<>>>>/Annots 278 0 R>>endobj -520 0 obj<>stream -x•WÛnÛF}÷W ô)SÔÍy P nÝ6½$.ò’—¹’6!w™Ý¥eõë{fHJã´)l ¦ö2·sÎ ¿\\'7>ü–®ñ3¿™ÓòfJ^Óæ"•¯RZN)[P^áÌ56ñGÊï~¼HÓe’Ò<[$×TQ:_$Ë÷é2MfÇÕé"KVOVO·Éìn™§>g«%>§øOsÜ3›-“[¹žóyb+Ù -aWgË,ɞ¬òY6M¦Ã;yaºÊÚ+Ó®µOråW³›Åùêbw¦Ý™áì•'>;]®„4ã=eé»Ú'¹ùÉ3V³œ=­²OË9Œ âÿáþbr{CÓkºß (‹åŠî ©¾É/g ½5!×e©¬vMxyÿIö§³vÿU–"þûӄ~r{ªš|G…ӁþðæÁ=(”üõÖÞ탱[¬îíkºß™@;(:REÁ7_ÓUÊ Á}ú1zEÑTš×û£IkFiÚٟ.y÷]¤°sMYuø— \#†HÙ‹j«’¢öU㫂*u •ÇF•åvº¬)ÔZwp1Pƒgcs ×p`­¬Õ>ðÁÞϬÛŝöô©±ŸIPl~­%HêRt‘ R\#¦¨ö.×A² ±yý¥1fׇc¾L ºÜÐÆyÒ -ɬÕVÉHî9Ce¯K̓†û¡B$œ!÷ =?†|§‘=·éBjÃÞ©ºÖ66¶óÏå=D-ðµÉ%#•C4q§,.ØaÃ]ñ?¨8ÏQsQK§ -Žóëµ-´—§‚L…‚TL0ª6º5%*‚=#ʝÚFz0¨:¢{ç¢On!Rúˍœ=ߐƒÖ¼­GÈ%!‹ç›D`Îï*´²p1ê«­Ù´y>š~îNÓ8$‘1”«& ¼TkŸk”£øq6Æ-‚™ãà(ŠŽ”åMÅA[Ox°Ö´n6-ˆÐ@6µ8B’z¯±®îŽ7ô”‡’ÓY2MèŽ+brø‚´ƒ:¨u‰«€˜êlR¨Ð—F‡°©ª^`ßµ*(ïØø3ð½nŠ•Ð‡Š/í½³Û×Ü)Û\ۖáŸdôûÏ|o1ÛÄ#±,2Žöƒ¬g(€ÌßàË^¯¯Ö ˜¬c>f|ªþž°±÷ì¹òVÈêFLdÙXä¹Ò`˜“󨏰Ïž"ªtú™PqYöÎЄ:³^1w#©« è%n-a ö^ÐÒ!ïa±'­ðY„›éÌr ea¶ú¨Ÿ¶©ÖÐAb[ì®Öeg¿0\±ª[VTŽgÙÇ¡ç¬–‚J¸¢òl²W / Yê¨{]ÓÖ<°!6 -Xy0®· …™() -£NË4|É#§ECÖsÃÁ h)".8ÛöŒû ü Åi¦ø0a·½bñÕª‰ªÑ)&ˆÊ—RJc¡³ÞÕÞ@UèíÝÛ7¬­rÃ}†¸YË-é#£]Œõ«É®lÌ6Á=ÜJ緓‘Èk¿¡NêÉHh(B%'…ëeðHÌo_{ÎÑ^õ.¥+ çèЍ‹ÛI×סë鸂žHE€kí7*ùú>yTÑÞ¥Kê<`¿ÿŤâ~îc˜q4qXˆ÷Ҝ#z&P÷Z[VÏôï‘'ùbÜܱƒV €KŽÖ PÆ$Ä÷¹®‚$²Q zš. ˜n¸Ç)ö€"6V´7q‡{Ÿ$eÄ>ªhµ£¡ûÒpU ê3nc{Š¶ÎA„¡Éò,qôLnÐxÀÍÙWt·á&ÒöWí¯w¿žgó«„?ƒ¤ó}ɟˆZßx’IÑâÐÄ)¨ópԏ ] ’d4&ÍSÅQ~ÿ¨m[‡çûҁG`â Í,w°2BiÐtT1æw•í3R˜Â¾ˆ ½‘’5ÎFWÆ1æ:á¸ÚÇá:|¬·ÆÅ=TOƒÇ»Ã\ƒ™g5î‹;ÁÁäóv;}ˆ>²Ó§æw)˜ |WlpHÜ!>0`¼ÎY¶‘· ʼn^ôñ²û/+7É£Ÿö_J:¤ƒªØ€£hb]‚¬áWÒØA†Ûé-âԜ·œ¬QN‹²Y® ÓŽçè9á­ŽÐÉô7f©Ëa.~sȦͶ© Õ †wa_Píi¢NC MzŒavj£÷“meaÙ_A›WÊc>`"wÛLò)YO>/XObject<<>>>>/Annots 238 0 R>>endobj +554 0 obj<>stream +x}XkoÜÆý®_1ݍ¬¨%¹OImÃN\ÔE+u äË,9»K‹K2|h¥ýï=çÎ̒\[BÉ£;3÷uî¹wøÇÕ,ØĪÿQïÕ ÿ-6 µÚDª6jwʟBµŠT¼TÉgfØtþñëOWñzDj9ƒ•:ªùl†ßv•«OWÃ5¤Ñú¼W¤ ¨ïÏ®VA88 5jGøÛQ…«`í</ÖÁ\-ÃǏ*ÞÌ)••HkšÓ¤³t¸†7/†ÒÁÒŜögkH×ÑÙ +ꃡ-†MZ$ÿv’aØj8‡Pãöùz…Gø_B.‚ˆ}C0_oÄãh‰8Ú¯,aUw{Y8[ÃA0Œ—PÔK7kn^†6ÈðBYñÚp°F +æsìê¥4tC¿ò Z2à±7uÂV»[k¤N’ÓK‡kH‘ýåàlŒðÏÏ7Ç«htóp0‰Ã³ó9!䭚/˜ ^ïp³K†e ¬!]­át/e âõLÒ-ðË.èì‚iõ²ÕF âFÊKÀ¥ßHÙ`‰À‡ëÑ¥¢¾ø0Þ0 (²9°EVx¤e E怳4†¦º³ÖäTÜë¥+ ? û5Â.™¤³t¸†4Ú0´½t°†t±Y%®Âý5ü™/(’ݱ¢ª.ê$Ž"ø-VøI- Ï®xl¸†Tb2֐" áàì<Œá§¿y“òú³Ã5¬]Îí^Js£0”R¼¨÷õlà8jA9±ó,fY:Žánÿ„g‹óŠž…°®—FÒh,Ýô{]0¿ÁO!î uŒìELȈp‡³Ä‹o‰${^¶"¹ÉBdý±ŽÏ²7wW·ï7 +®ÕÝ-g‰ž®–ê.•^3SwÉu¨·e±Ëö]­Û¬,~¸û"§XTrè& +ƒÍrCØêóÁ h‰.Ôµ7­êªT·&U¯oÔû,7͏öšµršoÂM°ˆxÇÝ`sY¨§²«ÕΘt«“{¥‹TµÜ[mVtY±W©y0yYMÑNÏZ´Ó²£uÊò\m:êÔ(ý ³\osÃÛy—ÝÓ9¢Ê¢Æª.¿à/´o¦nÄËôºÒ{¸?ÁR1ôÎ&BEsPm  $&{€–B™#©¢l³]–HÐÔé` +˜[«“ÁÎÜÀIgrCÅ¿ÔÙCùø¤ÊZ :1UM·m’:ƒPCuQ”]‘Э,G$ƶæYƒxd_¶ÍIßø­á_› ÁñÄìÊA2#‚©ŒxIb[°-O} ÁîùÞ!¶ÍSÑêÇ©*ºãÖÔSÉ_ÕÕU‰Ëà°½ÈAÊ%â ñµÕH±Îó'•t±vuyTíŠûm×´"Á`tgø7‚Ú®ú0 +ŒƒBã%ÝS•g÷FQzû~fáw½ÍËäž²v¨¼¶ðAÕ©¬ÁVÁª@¹Äk ¼«öµN F1Qsœ½MS`°Ž™¾ª¬[‹ìqP"šrÀrlxaN +ù:ê6P/[`à;% áJ·Há­B´?©wÜ4Vc/¶²@)½µ®Z¼¥€›Nu…ÊEòš±QãKmªE÷Ö@%2ò¤Ž]rPY¡vyyâï^]cêÌ4/Bœó™nf ËiâÊa"|vž`¬“Lª?t•®rÔ ôwÌö‡Vµ˜8À¬ÿÄ4 sªUbêVÃúÚüÑ–oõޛ@{ªPâÀªËuÙåé8V©Ùeb©p!0Šµîr@ih®*ÀùÇUê·_ÿÖL°ÐSYê´A¹K2ñ9ƒ5N±'(R1²i jÕÔ¡™-þÜlÛ×eW´À”ºnÚYøeÚ$8s°{ØýVàÙïÅ +Kô¥‰¢pN;\‰Ü!ž¿ØFGfUMyæG²àsM;-ßÞ#á¨ÀòëQ ›kš5I‡,£r¸ÊœEIýS…̱¹ŠÇŽQϛò#X­ö¤Dÿ‰ŸN“ÚÁ9E’w)3ŒN»¡E9Ύ/û‘>˜9TÛµeöEÝ8#4-JÅèsív¨ŸA•Ûð>𹛾Lúã™é9Üћ´0GÊ摽0X½X ï ç º©jÍcë0°šªLBó«ÓEG &ÒR4Åö€}rŽ*ë@½ÚAœ[Ø¥qÀ(™ EÐ4~Òùþ¢£H²yÙi 6¢C@2϶.OÌ:¡m«W··6&AeǦóÌ­úýúÓÝ5éÚW~[T·¿ÿÐsLƒÉ+iÕ䟺êŸ]§%]]cŽ§ÙG^F8tN!tg÷bu,‡ÜÔpîC@Ól‡"„’ü6î®Ù1#¼ÝïC¸^èu£±ñ<\°iÔæ?B_†Ü堍†Ž| # 蘊Pf^%’hG´æG(”ùµžoR†t-5ÁXZLÆ¡Bš–Ã@Hb†Ç´€l´°g 4# +¾?»!CÞôÂBæ+lWä tS$|1ÃË vd³‡ŽŒÃ~ö€ÇÉØV0L[³ÿHÚ¡–%0Žê¹Hu>«ÞùÇØ +¨ äß{³ÀÕùә¤Œ.û=OP’,=¶Vzbj½î™Ç*ׅX~9¼»˜=jz Gj6vþ% mkààÚ$Ö¢€Åø}mo¼ëró˜mñziñ°Ø)Ìßú‚cGÅg“Àpz.ÀÐwmA»v€>q㇜‰ÞC:š;~MTŽ*Ì_ž:W–Év€H€¯žëCYÞþ\¶|kÝþôñ_$2¼¾ì›àù½c%»QoäŠjìíÅ÷h5Ç +9—Üwî£Áaƶ7@ ~ÈÀҜøžªCy"§L­‘ýTҚ#^ºÆ8ŠáK]²è1>„ò8FL]—ª‘…=Z@Rc˜”Xù5í‰S½?…Þ.ï­ó;Ȏ*òªâS ÔrÐhÕøûxƒm®¨r£QömDÀ¨±M®;´¾ÁùnØl"Æž8åN:±óJŠ”_7™#U}ÖgYÂAõ5g*™÷ä¢'¦[ٙ1Ǩ'¯ÅW¾–øð„oøøGŠŸ,¢Í†åïÔkB\¦wŸ +‚UÀcÃ*wàƒ‚<®¿sÎËâ¿ê†Ëë¤Æ›þpƒªùûw‘ÈÆ[ʮݗÏlqéñ§oÈ4öŠÿ •’ë@Ü  ²Ádrã\ŒðámÉïAø°¶}ê{ùÏ-ÍÚ#„ÁŸ¼ÕÞ*]3™ªÉGŒÝq":y¢‘HÃApâkã…÷ÖÍ=̱çNô bŒðÄWüaŒԙ¼’i‹xvהß[0˜Ë’ÉsÇmÏdA3˜ÀÙ÷v~wey~…XR¿/ÊSçWÕ庖ðᆼËn!|«±ï"ê´Œ¡È laÞÙ0t_c|L\£Ü½¯¿@Îña|½žã›%6,yøÝÝÕ?®þðá.nendstream endobj -521 0 obj<>/XObject<<>>>>/Annots 286 0 R>>endobj -522 0 obj<>stream -x}W]oã¶}ϯ˜ö¥i+ñwܗ‹ìö¦MÑ.Ò».. -,pAI´Í†"]’²×ÿþžJ±£b‹ †-Qóqæ̙Ñ_WwÅjJ珰¥;üÍWsZ®&4m®ÆriLË MT5xæ‡øcÌÿùñjz7-–´˜/Š;jh:]‹î—¥W—¿qw¾*¦wÏÖäG+‹éŸ³û%>'øϑLçxt~?+fp3^N^±›Ëß MîŤ;ËwÙè|1Ɠ£“ɱO3[‹ûî—ÄÎ÷fc˜‚ÃÕ²˜w¿z“ùüÀ$ûšÝÃÞàú»õÕíãŠÆ3Zoêâ_jAòŽÖÕ5Ò*èO'ßRLÆZj”q ÿ”všJë«kbŠÿúvý',Íh<ΖF“%,]ð­qr¯RÒÁEÚø3nKÎc4µ¦Oתñ¸äa7À8nÇOßRvÄÆ¥ò!%FQ®IUÉx6j¬ŽoÉI>tCǝ©v¤P/>Ðö$Gi4žDÙç¤kø‹I«º Z“ÓŸýÕjdîE‘“<Ã5šrõ`aVÌ ú ÙTÊÑŶlLÂóGRõ±ùCÇReô¶Mê+z¶ZEM®ÂÛ|ÎI¿÷(@•pL²{ì5mz‡ˆ’§ÚÞJEïÀùÄT’º~ºNºÚ9S)kO€ÜiàÐû?ƒdUôÌÁ>ÑA‡È¨p=Q­È~Ž>¼üF‹KŒv\õæDOÏÀ¨ ¾ˆÓÓFâ ­£ôàب þAå$VÚ -tä$näw4š,2s}H­¶öĉ1Iñßp@û¶´¦Âõ6ªÒâ†óîÔø6J¶FGòmÊõ$—B>‚g*‡dǍƒ©¹ûmÚÀ>Éjtù è_›yE¥NG­`ÙÃ|Ô%²cn(îi ]´Úï­¡%÷6·ã}tJìTà -Zº*Ò×5êè¾æ6G—‚•Ît"i]ÐL¹ÑVht…ZE€*›ù*ï*ȋ®‡ðþêÁY˜Cš ªní ¡).°¾ çLA‰¾Q/šÐ¾ê ŒäQ:&jÓΓzD\q³"ô0 •ôÉ3é$mRÓ§, -ö>êXЈ{™­€¯ß$BhŽB‹rçâ¢I£oÉÁ;B†æ2¡¾«¼µ¨×wÇÆ¡/%º…&E‹ïàº÷¦2 ú|/Ë­ ¨ñ RpH[µ…d½¬D¿Gã«ê4ø9$uWÄÀñ¾àª°ø•²Fo絈yÓÚd¤ ¶_’5¦—tGpðívG?z¿µè҇{’©Z«PÃàB>sp~þnÌ®ìÏÏÂkƒdý†Óbó­u/Žô»Ãð€ê¡œÈ𘪵8ütý6ðWÙÞ¥´ÿþö–q)P"µ#=X(j} ðôçÿáû.5ö­…WE"¿µ0˜!¯Œòä‘IiZ=jT…Yª3Y90/šÒXN ²óõNÜJm Ì›¥Y öö yU/R¼Œ£ÈËqçÁãÒl闇YŽY߬÷¹u´f»¹ÜD.Fë² ÷àe/×ÛV…Rj Z՜™öO+X¨»+VÍ 4…g>áLTÖÝmÐ*1U–I]ßP ‰m֋˜[Ú¡÷:€èöL*§‡áÜB)`)a,¶tÄjÃ#)«[4µÌ`£“,<âÃf¹"ÿ…Øò>'Y똒_ž#=:ü²CðtP[u:‹*YV 7¹˜–˜£ûE·»]óí|©_箳X½óÞ4@ªK–ƒ”SoÍÛTc¶»Ä~x[¬Ÿu[%”ªK÷ÃÇ÷Ø^ÿ†ê»ì/^ S™`¨Ä, U¡Ùùñï!I¹Ž-K ãzb»ÒnÚ^7ÚaC~bú¡ûE$™zèU‡bðÝ_óXĈ–ANÀSC`ïÑnZfêfì|Ièކ‚‡ðþÌë*^Ž@oÄ6ÈÒé4àQ?Œ§Êר{©+Ä^_CåJ[z§4kðva4‡À=)ÄÎ6oè—öEÅÆnï;ÏgÅý/ͳ^ñŽÓ3ôQ2Ç2ù_ J¿uoH¢#£þ¹Ñòn•_èWô’¶V9 9b/³å¬X.îñ »ã)_ú÷úê·«ÿ³endstream +555 0 obj<>/XObject<<>>>>/Annots 272 0 R>>endobj +556 0 obj<>stream +xYێÛF}Ÿ¯è}ÈÑ"uÏKàdãxvàØ ø¥Eµ$îl¥IŽ¬¿ßsª›7ŲÁ`jõ­êTÕ©ªžßo¦Ñf¦ú?î ¦øYljµI”3jËW±Z%j¶Ti=S,êþ|øéf6‹£™Z®7ÑTj¶˜Fó0ÊÕǛᳫu´ÌöÉ'J€S–óY”¨ùz…Ï ~E’u-ÕbG1n‰\áG¼%^Ï C;›,ûg“Í|°wÏG{‡cH¸LƳƒ1åŸG«Á½”v1G›kiã%fæ+Î +ÂAP~9‡"‰(}ü@ôXtC\¶Æ]ƒ9lYàËtë9ô#@?.T'°B?;c6é× +>ƒ1fç+Ñ兩³Õ’*Œ-²H(¬OyV4”ðÈÁ²&Sž(+EÖÁ³³þ™]mpW{n2#xýÞi´^ÃIÚ?Ác’M }½|1<Ú» %Oäôë8S fXIˆºQ€YBeãÕêÁ +pµYÉì`L‡Ø`•_+³ƒ1f7 ¾HhÀ^è ֛BUµ WBjgM®45®‘Ì.óæðâ(š òÒ@È̵U÷€²†-G‘þ|´°•—N¾{iêôåÉc6’íN3ã´KÃÖä¾Ëùރࡄ„b©ÛpÂí½Cl»œÏÕɸšÓÁ¯ýì·£)Åéq‚œpœluŸ£’ÖÝ·öTY]™|Oç9O„C¤·‰!RߛTóÀà\äúà“×gõX/½9íw<>¬ìBe/ +à‚î>^€ÏN€º)k×TŒ ^Z!LLtˆTVo_ýüéÅ}õ¥­Þ"$κ„u¡[ãJ‘àl¶#LðŠ¡‰u‡C.´Ð¦õ{DÃ^méRB=êÖÛ·eSâ:3!Νzšú%-ÜÊU_Þç˜xÔ6BG§Ðø0Žzëµ/ü,ºe¾–6G[ï=gä6Õy‡h™WYØ!y+“Õ·`š'”&DƒOÜ«ŠžÏLôé®{é<¿`îBvì´On +‘üåë/ÓŠ%ðµðôçь[Š¹ ZE€¬îg»“@Ú@æ»î­nýºÛ¯“Æ# öÇ´ñü¥+ZsÊAGã®s‰¿Kb¼KowÌVLaYiÀ¹çc–Tdx4²”Ýeû‹‚ÛÓ#ž‘Üà¯êDVô5²íB_Øç—H½ՑO§ü2F¸Ò¤7]^`¦òà5ì´."WTȱ)îô ‚QþæñÝ[UëÉqòoý¬?¦.;Ցú˜Ô|>IŽfÖ¥‚­*:MmqʳŠt™!o^Ls‰‹Z6Å´‡tƒ“&  ³Âô˜ÁE%?àÈè²´¦Bl·–‡ [¶‡ðJ*=[@®ð4Q8Äå·•̓èøV™o—-%[ÒmÐClJå-Cὺ©m,‡H%¡X W줬ÈJØÎY0>)òÝûU}9á„Ñ9RÁ½.²1kSTÜ÷œí €Wú/9{ÈÎ5*…LÄ!<ÎR ŒmÊ X–÷ôp1•u&(hõlÜEìÙ¸}“·õ…¯Yœù½ÉàUàT%P͸šùo-ʄ/(-âPç—oß_Ã÷‡áêü"Õ"@²R?ýúÐjc¥p››´“ +ˆ€]ñ&«*֗Ä5ó¥ç÷Y»Ì6՝>œ­÷±PŽý_栗u5 +9"ä´¡ÍþœcãH½±gQ偹 ɺ˾œÇL¯é3Ÿ/‚Nqa¶ý:‹~÷ez_nHLÂ'[î$¢i`SÕ(+-F±w‡N+ø‰ý÷]Ø}ºëÒѧp*ëk{To”¨ àU¡^/M}¶î‰§µïrõö*Áû‚tGߢ­¿–cÕ[F ’`Àµ‚äàؽۑ ¯ÄöŽÕò=«Rð=y þˆ´p¦\·ÿ¼UÕ¥ØÚ¬áªf¿Ç9cÁè‡'_γ>kÄ?‡‚šm V¿~x[!ÉÔ¨ý¥”‘ZxKð<žèʃ)þ#'Ž¨ ½„4™×±óà{è¡àõ„e¿>hàºç—¿e>F}€8”u,‚àð>h~‘šƒAÇHð7\——^ð+m„ù]_1Óºþµåï—83ÿüt–W8ÄÄÖîúw‰“/ÆÔ×+œéXüK(Œ{‹KÍþÅ!úÃD…ð„'Àøè§áS@ Š'åœQG°–§â‡ÄTîå£ú“G€ÙÐٌñª +¤1\B†Iäb¾Ê»§qκÐ+ø£÷9«ðîÉîĤˆ-_†ã,ïÙ¿¦Š²^öq­Ûósðøû±@^ïàRìM~b­ÌâYÊW÷¥~ÎPžð Pg <4‚TîìëýÒRœ±g†¡Ôא5܋]¶ 'cùLTd‡cÿêÉî;Ž¥šXà_‹%þÃ7f‰ÔmÊ}-å(ÛT?ä¾_Xœ2¡Q£IvNVSÙ‡j‹‘›‹ækþãgŽ‡OÔ)+~óããÍ/7ÿ<|lendstream endobj -523 0 obj<>/XObject<<>>>>/Annots 293 0 R>>endobj -524 0 obj<>stream -x}W]sÛF|ׯ˜ÒKè*?DJ•‡”㳧.Çb*uU~Y Ñ‹ì¢y¿þº DÁ§+—mû13===ƒ¿/®’Û¥<ÿör…?׷ײ¹]H°’_ÌõÕ\6 Y®%­pæ -›žþá™äJ–››d-«› ~/ðWÏ>ïšsÿçŸ.ض‘å’G*Y^m’ùðääþbq{›\Ër¾Nn¸z=çª>qõü«7ëdy¶ºš/qêtvµ\==ñìùs%«ºüt3Ÿ·<ÿm²X,’ÅxáÇíÅÛ»[™¯d› õ ~dŠÊ•lÓ Œ'òk¹/Z‰¾²Òe½² Ö<ÈΦ¦‹V -k2¤¬s*Ӗ¾$õukëVÊøfû×ŕÌÔËm6ÙYÜ!Ƶ6Øì.¾½[É|Þ{0[làÁä6/ë²µîûI0u&D¼B»?o·ŸNÆOÖZ/™MËÌÊ¡0­ð±Œ3G½ ð‡óWe›œ|[˜Ýp -.Keê£Ì1"dÞSà]jjÄ,\q6›ü~d0… ™ÈMl%tÎÆ)oiC™>OFë„èN.ÿˆ6ÌÞíÎ%P“Æ„¶L;g€aŸ6ƗqM ú¨ê¶Ìñ»°H?àš©š5Ù_ Ÿ@0iêCǀÞ(À÷ð~O—õâx|™ >géxí[É»€ëÖm°•×iñ·ûóyCgy"ØÔW•­3Ť¬SäȏÌ*œ}æ2/ÎûY ûheo[épI,ƒÙ9‹kcçZpí(é¹Ó§ˆNhÞñž:¶†§Èvž#…àÝPO•ç׶N=¡!Ðò¹‹±Dœ$×ûÿØ´ ©`RP Lmh rp°;ԏx9 - €ãm‹ îÁI_πÓ,w Û)ÌÁcÊES>06‘ŸJ…Öˆò¡_¼”CÙzâ|½Ùó (0¤/ck+ÖÙ'Ûåp½ °¤…ûšíaW.YT:õ®Î{wö½ÜwЁ´ãä}7l¨åCààêoŒ…ï\Ö'5£ÅF‘PÔy„œÈ;@ pˆúA Ž('ßA!`ðàÄä8Š•$a¤Z}V.?[&6\ø}Ï[ÊœÜ”®G‚ªT树yÄ;Ò(‘-Ð?XƒÝ»ÍûGv®LIz”°™ÞYø»s>}@‚8[†Ð,ÖþÌ!;8«ÂÑTŒ–Êà>h×~5UCg¾L~ìZ9‚ò”ÀþÛ81„d@ûž*ç -k -_ÞhxTGüÕëí Â¥4§¡½¥Sï|ŽXÅ 2äÞ;1gt—Ú}YUjƒïÐ_Ӏì8Z¡¦rÞ*¿úû4”M«Ò4媁¾D@f÷Á¢JÞþúO±ÎB5Ú8¶ò1W€˜šHbÕ#{ȼ©.Jç4wj ×?àª}'/÷ëè©ÙHޓR(T¢Å›A1ë.Z¸òÍGze¥ŸˆT¤R¡h‚ý»+Ѿ¦²Cz@¢Bi°]XNúÚjdçíu¶œ÷-`•ÜÂdæS(ýW -F+žÉejR6ÙKzˆÀ vfFËë¯5ÎytžV28©Î -£Š½Ù•®la -–œë…÷`ØsÑ2håÅÓT¤óF£‰Ü#âì墎EºH1§­w$ˆýogñÖj²L|˜Žøv -œôLýÌ~-ºŠ_OaÔ~¦µJ˜4úÖ;‘Ƚå(òª«°{@G&¡ç Dæ5¿{U|¹ú2š05£îŒ{¹åEà£À2‹¦ázV¿’ûùU"’MfÇêÖ¼ç Óyùá-|kAÊ¾žoŒXœ rà&¥…DœRÏÞÌ"ÆàÁ -å'y"sPXאrjN ©5Mzì)*â<Û+yð¬ÁDÔ¢kћT¶|äü_rª}ˆ¨]t°¡@æËNÏî{6Dò@žæÞÞ­‡Áp";ð¢w'ÿ¯¾æsXïÙÉBסGGԒA󑷨´´°ø°óÞŸÑã8Aá)©ÙS·ç¹Mg28·ƒÿY_Ëb>hg„NÍ¢FŸqçñZ­M«–©kvA$ ÚËIÌÈ¡“*&l<)j±˜qpûTéѼ´ÊÆ -–yò‡›ûFÆwZ]yÉÁ›ãi‚0N®pY)Tx$¤¬Ø¦ƒ6\LU±Ï/×U¸uÚ±>˜ig[Q°¿ø|„Ëý˜ª-õdªŸïøD1Ep0£*‚Ùv€„7Dëí7=‚]TE­GsXì0^ð4ß~€|ÿé\Á;„0r2È:ÆÌ6xíìˆ@÷–ž+®œöþW„‡¢Ä|ØÐWÆÉÍÞ:#©†™ÑTœnxé=%^Cï³N-Hf/wC6•z#hiêüÎ݈‹i&6Ù':¢pØáÀq… Â.¢TF'¨s_ñ5„¦mÑÄO³…‘Ç2Bá (‘mLö ç$~r°ŽF -ï™ßq۾nj òõwè(]ÓxÌŚ¢A…2› ôÌÑsîŅ¢E z’ -øüC 6Pèy?— -!qùPü7ƒ@̯ñ­z½–õ®ÙäÔ^î”\5õæ]ä8÷;©‘Ò➝NÍ6W·<¶â×nL1šÚúN7­6«d³¾Á×16ÌWDèÃöâ÷‹ÿšMHFendstream +557 0 obj<>/XObject<<>>>>/Annots 287 0 R>>endobj +558 0 obj<>stream +x•XmoãÆþ~¿bê°hQï +¹«¯g$Í%=¡AŒ\‰{&¹:îÒ²ä¿÷™YRÛmÄ'rßfžyæ™Y~}3Œ–c:þ©74ÄÓå”æË՚ÖobyÓ|Dã¥%Ö 1éð‡×DCš-âhF“Å¿Gø_ÖòÀt4ŠFÏ œîñ¿ñ®4™Ï±GIã႗ÈSAŸÃØ4æýýÇ ™Ï¢Ë&£y´ ‰<ñ²ÓgŒNgÑüdT΢)VÆS¶]xáÉ#ÖMøÜÃ//—8ðÌÀ°àÌÈákF˱9ž,pVxâ³NŸá9|žžŽâ¤ñaí$žcãÚÓg6tÚ[;š,£ cqq<“Qyê0͸3sُÑhòlÌ(s”»…§n·øùE‹øÑýiÉ2Š£e{n¼ÀO!Ë»Õ3Ôºù° ­Ö ál9¤U&ÌÏôRW_잜֦ÚPnwTªjO‰ª*];ò¹Þ_­¾¼¹ù Â—”ÙêÞµ›^R®5yËÛDQ[Ò>ʑp§g—ˆÝ$¢;žFƚL©6ÚQ"‡×z[¨Tg”ìI‘×OžLå¼VÙ5[Bi®Ó]'VÕYXÑo9fW™˜žYl¾ÑbݐqMG|nmÚ-Œû¾g9OZ¶“V¹qpd»Õ•£]®+9²BÜÊzÒe¢³ Fš0þqõ÷Ÿ(µ™îlÜÂ#2Þéb}MIÃ>Àß­ª•×$³ï/]“Ü_e6mJ]yYyÂl,ܲ˪pp½¿4÷WëZ•ËÖá±P{DèZœ8NÓu¥ŠpÌq¶=), Ë"z'XW¶´àsˆ4ÐçØè¼ñ?3K\'áQ®k¶¾B¼ŽóCd®¡IsÚÙ¦ÈÀü¨È¯Ó¼2©*Šý59S¥ ‚›Ôv簟~Úê¨pPUšê-~۪د80}œŒGÔ¬ÿÚh°‹ª>BÈiaà +‡X+¾¨Lñ9€šMQÊ*)0o FŠ)¹áÚÀÎSTšÊ(ß\¿³ƒÂ aȬé4n®„—w͑[7E1@,víŒÏûž(*T öÔpââÝOŸÞÿxû׋6yç֘ËݹSwkÚۆ¶µ^KL€g—ÂùÕşs+ÄýZ旍ó’Žð@ +‰ò‘Aàpˆ&Ɛnpùmbô=9°í}aÒVÞôâ3ò~—ï/` k˜z̤óì  cÔÅÐp|Ý &íæ²%/¢Ö >ÔAU›î,™ +õíj*ÿhQßÍkٲ㡜ïë=“‚c*ƒ*õ ,`ÛÉ3•ýk ¼ÁH6F¶¹¿ÌíVsð÷¹¿êÛô„ ¯Ëæ4¢÷àõ/µy´O{ª¤s óhÀP[Ño¦ýxóóêe…û—†\ Ê)v:î°GҔ‡$ä† ¼ù°ìßՏ¨ ‘~)8Ԓˈ8 ìyf\Ú8g`†êÔ·•±Üûí·77Î6uª×üŽ*ío|­XÊo¾_7Uú]¦=2î­ò&ûn<‹ãxñVáçd1Åó·›Ú6Ûãñ⚰ …­üUnAÔVk³i L0å7í{ÿ£.´êï•{HÒy®cBvø=[g}©9w(¶úUQH–²°¢fÞ Œ, &}þژìåØJõâ=‘ë¨ÐA³`EjT0‹ÉÇLNm™@©ÄÍDWzRÅ¥«c–ïs‹r‚· +f¦9ӘmÙ‡w(Â<‚´ÛrúHúÜƹ57œ!ƒ3íÒÚ$ðŠ3¡f3r¯c6ô¿£/A¯üÁ^ì€ChkkO‹¡Íç RãÑ¢è›*3&“”mËK"/ãù³åTqTZp m!d¨àœè™u2"Á\JGM‡Î¡z¸ ÕËÙ.Š«>²öܯ å5ŠÿÅ!Èè +L‰†¸ß_½ŽÆâ1øóÆû×삞65ƒ›YD†©::¦´JLa4Ñ{ •Ýq§ÔY +)º•Rm×ç ÿ>W(Ñ8¡[‘hp™„c~AÞyOî $[o¹ð o MKpü ?S±ã;ª°;óì ©-HX, H"—‚Å;†´ƒe-šœ€èüZ=ÝívQà‘$fU¤,«‘jnþ{–§úÓeÃQ„XÊ8£„ÌŸ_Xû@·Oh,Ü+ÍóÙDÞÁÑ]Åý(:K,/G(ÑH$ˆ“4½hK¸Y!ÂÒp„^v­=ÚF¾„|\­~é˜ÐvÉ¥ÂÝä¤û€è¨ª²Ôt]¢ž b–eF?âÔ®#§m´ø|wËT¹º RL:B¨ÆÛo¤}eS\ŽDÎ^MØÑðr1âp#à>ÅYcäÅx¶ýåÄ]!=ÀNèTdÏ ª {õÿªÔùǔ®àƒ’³úp*†øÀ…í&áÂ#Òƕ‘«wmö¡;—~I+¹&{yۇ¥ßcãƸpøF¹Ù鄸3Ã^ ïÁ§£m"ã ²?ƒætÉ­r{²Ã-1ܯRè ÛN° —*±úþêš>Ýö­ +ü»e€Ã%©ç ã݁KP.LÏ8i*‘ƒV¦¢LӞ˜ì·Øáiß*>Qä Bj´™zr5ù€ Š6Öf§-ܗÛ2þem4ÎᦃÚöh‹G.‡UZ4RŒ·hUnÄNCסÜí† %¦oÑÿݝ¤“îl6ZNѨõ»³×!>MÄò½Õ5HµÜî0J%¤±F­‡{ÎxýŠò U¾…8Ž */zt¹ ”$¾x#žíö\¶Ñ"éµj +Æ" Á1'˜$%ý +&íb»î¢»Ð–y'è æù}X …kUˆ6º‡P]Üvã¶ЅÁE6r¯U‡¾A%,ÃÁ~‘¨ƒïø-n·rÈI"ß,€*ÇNUgMxg)\dÓÎ åJØ.Äç$ ³;[@‘ìva°)D§©P|mR„ +ß;XÑE“ñÁ¥ñÒª32'Ÿô“´êJAé>"}ñ… +ñÝ(Ž&ã‘|Ÿ-—ü‡~§AŠ{Kš@x Ô6ƒÎ¤n‡nlo E»›9àÖ¦@þ‰G{ì»Á?è6Žò¹Šwž?YÇbÝtMF|°Dã¹Ø×iÉ1i§~pøæB¿ò‡ ¦$o>ˆ§“÷̇²lŒnîôÚ“& þØ7Áç:ø½à7·«7¿¾ùÀOGendstream endobj -525 0 obj<>/XObject<<>>>>/Annots 302 0 R>>endobj -526 0 obj<>stream -x}WËrÛF¼ë+¦x±\%A ˜KJNâDUvbGtåâËX€»°0Í¿OÏ,@B°å²L v===ƒÿ.n£Í‚ÎMA·ø·Ú¬h½™S£)¿ˆå«˜ÖsZ$”V8s‹‡N|&º¥än-iy·Æßsü—³|c¹Ùðç77z1úû÷‹yœà±E²Žªh¾L¢»þª¤Ç‹ñ5îÞÝ>¿;ºÆ]8\ŽÏŽ®+Z,8Âà‡-¯qw=âÑ]N`±ˆ¿ŸÙ<ÙH°ñb-(\±ÉxD›þšSáãç»ãkÜ]¯že‡œlòÄ(Nbä=2^1pk>sÀµã Ž„/9ßə7ۋ›·Š—´ÍQÞ$¹ƒÝm&U½¥mz¹ŒâyD¸¥Ê҇Æ|q_”›Òë†uÚ¡¼Ÿ/ÿØn?<~~MŸþ~×þüzû/Œ.)ŽƒÑëù&/M5µá ÔY«SoœmIÁŽ¶is¬½Îèññžl[¹µÓþ µ¥£ëÚ5îе²ùýÉ^k¼¾’/aˆ¸¥ëxÍÙq¥•õäí4ÈXµ+!Ƥñ²ëyä—Wìq™–Jã}©q­ü $ƒÕÎÓ~§Q*Ìn§Óî)S^áŒëŠ=卫ÈÙipšóp’ŠcoÔÙºq)r×YÔ'2OÀ$²E¾Î–GÒ_S]3ná(âÃÏ®t铱펴w­§ZyɶÀ¥ii4°ZgøNuYž²a0­ªà!ç‡'6ºržÑn¾èæŠZŽx…n=å´ÙÔ¹¶=°E<-æ+åÓ½FÁ%ÈkɧTðž8>Û¡ƒA¸¨¡$ú-:÷-å -Āéì €‰8èŒí¬Jàˉ*¢õr–Œ§J‘©®§pöZpEšºÜk; Ód@ÖäÌ-x¤œs ¦“;Þ7R¤S—*å}G-P«‚QDA:{jŒ‰W >lÉ&w é<7)jœ‘—jÑWWt؛tÆÔ ÅoyŌƶ„£L˜RàjÃ8‰°¦‘‚€R3·M@² %…õS*Âáœ+ -Nbx ‰J™˜3€’û=ÅQ!ÏóT5̜ÒÕ"Ü_ޅ(AxPÜpuYϲÌ0q‚þuÓ -‘ƒŠàÆ U%ÊÓRá3ÒEôFóÌ¢Vå2l-„·iŽ?”¡åy=yÀH«jרƀê™iEŽûü~ #±4è;0ûÈa1-CõÎØøýóÝ2bÂôãÑ»¢=°ýô}VŒ¶’½÷õO77¡Q«È5ÅM°òÜÀˆš¡ úĝ3íÞ8÷T©æ©Ô`ÇxÁÖhÔß¼=ïBŸÐÊô^Ù.Ôü¼Ê]r›‚ ×Q°:%Îä9›kå±þ°x«ˆþ³iÖ+›1þêÞyí–†µ„jÌj}©˜BgÅù¿Êɛ“¬ìV! zW–ÎÁñy˜!€Öó®Á1ey®õzÆý"¦¹O2‡Û“̹cúP‡-úQ4dtp]™A˜›JC¿`d¡HA‘3tÀ´øÍ*“e¥¾®”2"ø… )Lœ¿¸)ô»ŒG¯ò‰—zÑû#•A·<Ά g)¦/m3´4T”APi<\ˆÇî/¿?`Û,zó£iþa¤ƒ½ ؘ½T¸ûÓ´ªQôP¼!Iš·^…Î|m±$ ÖáÆðâõEâPå@Cú‹÷¶À„dl†=˜"º_É®¦€Žär+: qÂRVéÛ¢i+é ߨºfOÃĒox$v(h½…Cc±.c/…6‡&¾¹×ú챔=Óm1DÊ¿ 2—ô¢¸ˆ“jœTs¯Äx¥3 Ó9¤Íl/œô!Zžï–†Ï¯§x ¯A¹ª ^´aÆóÐá¨Ñhaž½­~B…1ÁÆAAN¸åmÈòÖ"£I8yfROå»þ.^-£»UBÉ*¯}sÞJMÄÌ}û¯ył*Êø½Î]¯o7¼€bœ¼7mŠW#eµëä¡åz­“;¼ ãxÅ þ¶½øxñ?ӆU4endstream +559 0 obj<>/XObject<<>>>>>>endobj +560 0 obj<>stream +xQËnÛ0¼ë+æè6Cù¡Ç1-šcúJZÙL(ÒÉ8úû,¥¤z*,ø˜™Y¾eRÔü-Ó’ש>¡¬÷˜C–/W9Ê=º‘9’AJ≢Üs=V%×´[¸?›ìî¡B…f`•¢–hú…Ê›nódTG‚jÝ;A[üh^˜!WÆ&zš„ê‚vv}ø’Ú<º@ðn$¸!Ix¨f´é< ÑÓ ¢ Pv¾©yËX†iQŸ/!á&ê£í• [´1$ ¶ÌëpQӘJìjQ°çMKڞAW£;’ÓÛEÌ.âƉt½’ÿ5:{òìÊhå1¸iõèuˆ*¥Þ¢SÆP¿¦W_ca¸q·]çÜ«&ÿÏd¾yž†žŸŽ¢:ØWkŽ§I¿»½E²Á̸÷¯Ôã9’O¹Ý7mWÊ:Å?ürvÐç8-¾R“c%EUù_P§›ßMöœ}ª§«fendstream endobj -527 0 obj<>/XObject<<>>>>/Annots 331 0 R>>endobj -528 0 obj<>stream -x•WÉrÛ8½û+º|¥Ê¢D‰ÚrIeM2US“LT•‹/ I°)€@3Ê×ÏkpQ¼ÈãTEXûu÷ë×ÐÝÅ8ZMéôaw4ƟÙjF‹Õ„¬¤íE¦bZLh:§ì€3cl⏘?þýób:GKšOæј4MûQA_~ر ìK8MÉrÏ þ5¶¢„¦‹Ž(¯0݌øš˜×’e4ã5˜ŠÛQ¿¯¢ ¯Í—Ñœ¦aÄkÓx‚3Íà`÷ô«<š¬NÆÓhڎº['‹y@“$¸¤ôKÉ¢“LaxFýZ¼ `&‹„ „Q·/Ù±fÙx3ê×f«hœH%£~m:Æ~vpÊç¨[[.[æð= º•dÖFl?€W~Ý\ŒÖ+ŠÚl‘ßù_òÔ1m²Aŋˆ~š>Yuo¾In·2ó´U…tä÷ÂÓGÊM­ #rÚZs AµL´÷Ò¾£õæӛÍÍ؆1Ço“Úž­?n,' ^]ó ~/Owü⨔֕°ªîå/‚"ʑ6”+ ±Rg’Rék)5Ý+Y+½ŠÜdÕAjO×É3¥ØÉë7W$tށâŒÁlçAs’‹hN‚-o+IfÛE!¢ÛAá³=m…‘póÃÊÓGkTIpu&»}¸««‡S@ë½´úŠ”§Z9ϟ©|=\'óàCÌLe:„Mz¯Lå"Z«÷±ƒ˜-Gd”(Š# ≃GI«É)Ž(gÁJWޑÀmü#Ó¢¨Åё3½•vª’y4èHs«MÍl‘?d ètK#‘eÆæ ͛°ëò÷.w›c)/I8 )õ2§ô¶ôks¡Ü#pð²?•^ÂÛ끌v]Š²,T&¼2zô]•—möðÎf{P™È'ê·^R;Í1Ã"]3ÙÆå֔VÁ$àù&âΩ´÷¦–¨ ¾ÕÓ±´-&4çBS¥Ùž&õNjiC¾„sàuαzB†K/¿ùQY¥/¯ß4¼I!Þ!÷$®™ô{HµÛ{\…| u†0õ¡{6Ü®ÝEÈ|{ì|¯É¥Ô8ÊtÔ`]ÞAGqÝ7ßsånÛX }d2;›c º=¶"’!˜Å8–™m|‰®z·;æ*d·É×õ¹IE -'‘xŠ#T™pÒE흏ù›ˆøÏXÑQC*®ÈhÜòaƒÜéMfŠæŠ%u8euG1@K—} ò•!Á7å§4Ä*6’HMå;¥a­B2 -0©×¬VHx Ý;†|Ò m#¤ÿÀ[‹“­>¢„q‘SŽ€_œ Ô6blzK”Ù½ x"_pa:á«£%þ‡3{ïË·£Q]×xΝ!2v7zxº“µAHno胁¨²7á~bŒ}@ ŸÏ^0´w¯3¶~ÿù'Ì8ˆg&‘ €Ó•dÍ -ÔMêjñ&Ãfú×á:ù3úa\Âs Ma@_‚½5Û{¸¥ÝðÃ炄ÂÙªÝë ¦à}Nœû†[‘A³:ä‡ -4ØJkÖgnq¡³€7µ±·}ÙC–³ÊŸ!7þ¶Ç¶”)£² ã+²,Ðóv/„ݐ«ÒZäåõ Ýe×BrhlaøåðS¼wÑcd;5L•ñË"Ã:ÆX©¬JÏãˌ)Båm+M*—hdáÔÅ7ÔÜ€Ïe˜ëí!E^صÌF{?’zK· - -¶÷‡â •ø‰@òºƒn”b΅4¡­x+²[~^œ àkñ¡t^F¥"cÕNiQÐGV&”ýÕ»ù“ñ©E‘Cûl¤S°Î'鋗[Dæk{N4ÇR ¥<Á@áÇi½Wh~]kÚ—cÇó¯,4¶3¨Ÿ-Ü'Dv ’ƒäÇïò<\ÁYÙVxB͙îÙ^rºø5ñ´MÅϏBŠ[$àяy.µx’…7L`Ë >Ò~ú¹„»»JåÃLÇËM@4·4eU‹–‹wD"û툮 ¬f‹öÏN2w24²Zù>èÞh½lÔ1~f&“„æóI”„Ÿ]rÖVÞUxI I¿wìþg4Ì (ìó0ž%Ñr6§áb¼j4ý­\& ˆÄ›™7%øݶ˜/ñÓM/žóÔ›‹ÏÿJe|íendstream +561 0 obj<>/XObject<<>>>>/Annots 311 0 R>>endobj +562 0 obj<>stream +xXÛrÜ6}×WôÎKäԈs¿å%•lâDÙuÖ+•J•ª¶0$f‹ƨÑì×ïé97Ù©-[¶HèÛéÓüt3ÌV:ýã·4ğÙjF‹Õ˜¼¦ÍÍHnh1¦Éœòï ñÐñŸß~ºY.³)͇“lB5†³lÑ^Uôáf4še£Óêb”-ÏVOûÈoì@–sì5].ðû?âÈt…7g³lÕ4_`ÓtÁFÆxtu\œL§Ùül•·œâñõ–²0‹ßË)v˜Ê…츘ÃBº®i2!¨³ÕÕÎLð‡nT«©<6ªªTêjGa§uA±„[\›k¸ƒÖÊZ탼èb©=}lì)4\k¼ÃÎ éNRÜ&ì*uÐE†à°‹X¢w¹¸çõ§ÆxX]Ž)21èjCçI+äo§¶ºOȏוŠæYÃßPÃmŽ +¾{֞/C^j$ÌmÚ$ÎK¯JµÛio¦ó§êÀbwü‡É%µCd±T»m‚F„‡T žá-Ç̅«œ*¸ˆœO¯m¡½\dj8¤^H Ê$Uê½5*€gz”;µôlPçR§ÊªTÙ[Úȃå¾%篞*´²°õÝÖlZD¶à¸åŒ‡P¹Î¹jj@;ís Ž ßV™ówP –75»fAäZÜ;ÕvÝl6Zª¦Q%¼‘j¸2ú 5à¶`]ÑY‡Œ¹Ã¸?ÆÝsM_Š`;µ®°Š|@5¬ÔYýÔèªw€ðéRсõ_€ÁuÒŒþ(Uü*ÐÞ;»ýö"q©mŸl¤/$öp•ÎÏ&=¥iâVFƒ¦‡¸Ì]OÁüÝëõݺAïè˜÷Q­ÏÔõÿ¨X_»®E0‘WöøT†2b,rRk`VÝyäRڇ‹zò·Ö9mBÍ)Ü;ÿ”xUàŽgü®z›_áìS4‚i<(€®1ý]HK Ýqƒ0á UÙèVÈ6õLJi`‹ÔºjíFpe#VuÂlí8n&K¡€MP'CTž´]w™0ðR騻FëÓÖ<³¶‰ú{´CgŒÑ3Qrz-h¸’GΊ/æFbIˆœM4[`\ [<Ïw¡·]Óófª‰ÛÒ ‡7+¤ZƂœ¼ÛyƒŽ¦w÷ï~dB‹Ð÷HL #Á%æ7ÍhCÁ<˜Œjî¼Þ9>á¥ã»‚%Û¥à2E`·‹¡±î°¢‹>ÞàY²Öّ•E-Ÿ, +A%¦ +p¬–ø›p&©é¨­«¡ò™WÜFÉ]D¾–.Èô>êLUÔ3L^ðÓ59ïω¿g“V£ÿÐ9¦_0è"fÜÏõŽû­åc6ŠWx¬¤P rxeÐÄRM{ËKЉ]”½„{×ÞËHVU±©'lÍæmƒ£˜r-at!\ãºßð8Kó˜#ûý·vüLq)Š–L6æ$¦7u¶.ýïuR¡Ëk–e½>iÖGý×?0ÝÒ ÙB:\lG½îM³$1Ìôc 2…Þƒ»m‰ºØ +Sد"£¢ ÇéÙ§9ÇʍkxԄhïc¹Ã¹Vo A­ÀªŒ‡ë+%Â,ΖoÊBÊf@Ghº×ɼ®ä<Ëy¶ MADÉ öôxÛÞʼnk•½ˆcÐyÚ?¾I£ð²@Ú*6脃$0—‚ðWÐàͱÁá›Èè_f³€âYéØ|º0hk~ÔQ ¸×Šî×#+³¥ã@ ë] ë+ƒ~8ü$[hÐ5KÔ£_® ók€ßßa$¼®`oÛÇLö1[PFLDë.ƒª `24; ¬À[4†h “FIÍ o`ùÖµ¾À¡=Et³»Uf8 l}’ºèI6Ì&É©8,ýàÒ~b²VÀ~¤ëÊAvˆº/诎ǰF#Ff¤Ôÿò"Ó=¦ŚèQ5Â¥t(‘ o€ 1Õi`©ZiXıˆÀ¨–ƒDç™È(iÀ$a-N`—YÞc¬¡åSC|^ÚÎÒяÙóy^×hC«÷|Žúr¼j>•­ƒ«šˆóÍßè}¥× jš‘õwœà3®Ec8»1ÌzXELêôÊI(p{?ÞFÈ>›ôÚ^vävlÔõàgx……_Œ÷ü<î’kƒcîýûn<|9öœ½»FÅ»Žùñ¿4t¦œÎR‘`æO±$“àdKÏ14ž8'„·‰{ Á«ÕOrй¬6"f±“FåÙθ•œœJ£cUåOœ"xqM~oрEª1D#?5û³k֕Éq¿ =Ôø² ÁœK +ÙóÑB x€¬Û|@ëÔ|,EjžM:…Ò¦ñl…*pZmq“±Îw @gR@h…7=cwJ8*Çòä¬v ¥45b !­EyI揢 W@©[žeì1&„u(Û7VNﺸtéø&Ÿ¬ +…¬Íñõ#ç±ÈJü³*)®“ûŽÏI\²Ö¨*¨Ûó,î*ÛWµc0±šàÁ¨ž•©D­¢p<„9ô”‰œx¸Ÿs÷q)0[á*dâAÚ/÷¦†d—áx’¯»Æï\`Ñ~oZ–7V1¿eÐø‡ÜTYÖ߬i»Dbë0#£éëÜUªõõõ CK—0n ø\a€ôõN +”€¯ˆ?_\&Z¾e`Ô{V6;¯ùü΁§Ü2Wå‡ëôþ™Ç ySČͮžáT|„+©›*éUÖÌ,Oû9Å»f[ÒOÎm1àè;°»ÇI¨©0#[ Jâªc‹½˗‘üòÝ{´ Ƨ¸Ó~‡î¢‡Žêèw z‡Ö@­àò†üãm;=9† ú!‹Íëp,f… Pýòü^ƺz|ÓÒݒF£ö߆W¸àO¯?NÓl1_â" Ùínþ}ó?yáX·endstream endobj -529 0 obj<>/XObject<<>>>>/Annots 334 0 R>>endobj -530 0 obj<>stream -xMÛN„0EßùŠýˆ‰(´|ÓD|2q´?0Î Êm¸ ÎßÛ2¢¤éém¯³wÏN@i„ÿÒ˜!R™†è5[®dˆ(F^&0"[˜-ï/#Ž8á£K9¿§ -õ‚Xû.#ŠÀiö¡™‹Ó“Ú¨—ÞFígŒAŒBÓYˆ¨bÉ@åîi»ߟ発¾¼´ßWjû£_苮ÚN÷^½o¦}åߩύÚǽÇxÒx»‘ø£p£ÈR~–¬)DD<äÍbâ¨Â]Á¬×çI7cuÅãð¥ ì&=ŒeÛ ¶ƒÇ§DÄðdZŒ^Ë!×Uµot;-".9Ió9ó«ÂeÒrÏÊÙ9?E,kÝendstream +563 0 obj<>/XObject<<>>>>/Annots 318 0 R>>endobj +564 0 obj<>stream +x}˜[oG…ßõ+zõh‘Öuó8Þ8ñÂñ:–‚`¿4gzȎæÂÌE4÷×ïwª‡)_@1g¦«»N:U՝Mn^¸Ç?íñßÅͅ»º™¹6¸âhj¦îjæ^\º¬bÍíþhÍäÌ]^Íø{~}Å_ýËÖêÅÅô|rñ¥/În¾¸bßø‡_ŽfÓëɵ›]óqåfçÓÉùø«t·Gә¬Ï.ÏyZ¹)ÿŸŽ¿ìíÞoÞÞ¼ÀFúVogœ ËãÚًÙärÿíÞoö½œ¬•g³ 9û—ggã /®/?_ðÓÝÑó××îÚÝ }ysæîrƒ—dÏî–$cwâ–Í:<„öÄñ·v±vý2¸.֋2œV>[Æ:¸ÌwÁž¯š®‹óXÆ~ãúÆUþ>=ïB‹ 7eÄ ŸúÞmš¡å‹d!v2]ø¬wÞuK߆ܭÚæÓæû»¿ŽÎÜé ÝåÏd‡­ùf½lÊàæqáÞ¾|wâ|»up¬seÓÜë›Xsí4‘ç¯oœ‘·§³ÀÞùäjâ^ùÚ½o㻹Åà[_÷!¸7ÎW˜mêMÕ ÝÉƯÓéÍäb&û¯\ɖ¾ÎBçšV>ÖvЭ;Ú¢ ¾/7.Vøöò7z7Ôeè:áaqšðiÚÞ5µ{ÃYÚ:ô® ÙÐ +ÖØ»u3”9`ºÎ¡ëAú%ßuC5¢¬Ømz¢´° òFVÂ?ܸÕ2Ó·>ï¹Ïî5b^š“[x´ç8»{ðm`.š¶ò}Ä®Ÿ7øÃú_–ͺKÈùÄ´gz{€å3W5JÚ6„¼©´²˜"³%LëÁTØhᄎ~Œ¶8”‡ÞÇÒ¶x$‰>^DÙjñߗ÷çŠýwëúX–.ñ×@‘öÑE„KòŠÙƐjâ~%XÞÀöµ‡ÜK«¯—~µ +õS¼^º"¬Ý¼ÅýÐv.]V6cŽ <’(R:Ÿç­‚ù3Bkt’Áà$ùº|ÇQÈ=ÂTwEh۔ETlÜë»÷“ó´ê¦Ç‹æò¾|S˜S5p'/ +89´áÄ5­ñ/k 1œËÇpŠ,vVø—d1b²9¹·õn¤X{èىíVÅŲwXîˆì“S‘ +ùõ„ftöÝí«2øÏ0ýi‹¦9?Çû¦&™€gk؈ç™eƒA}ÚõœØ·¹[϶±ˆpWÑõ5¹´Ç]Ü܌å Ÿ‘ÊZðO2O4 ‡PV¾¤V§`–1 5»z2l?ÆyQ:ä_×â’Á(7ì)UÌ&/)½åè¯wwïGBìvØ0×ÏØ­Jò\¨€û"Á%VI h„ @EK²pHi›rÁïþm5Œ"GŠa¿ð@ځùÚ·1»ßä‡çâ$,E/ ˜š\«Õu³wvÎԔª¡–~?”𞨵m>ùjUÒf||¦NeÛîÀ~À˜óÍ®„)Ú*_Ô1Åx¯‚žÊ“ÿ¿ß*•úbË®´Ý(XÆi Ô¢q‰#J$Eþ"µ)uôPT$‚êÂاÐ:šc_›Dn'…8™;ÎlFZ넌(x×­Ô½ +‹Œ%7ûzY|×@6šåmo˜@RëÇY¢›H2k­óc– +w‹w*ˆ¬Úb) è*XóÀÓ`ŒõÝýÉ®­²æ4|Ši±2ê"Ȝ–[ºÉ3õo›MÜmê»´ëšR)J"$+$ Õ¸ z§Œ­_ÚÙÆià›(OÏ&îO•ê4«Ðyzå6¬ñÿǃQ3õy´ +ßB–ö$ÍSª·Ê[EÝzé½ç^ƒ 3θÚÌǖ]H-C¹RxmC#íØ&>©dî½eXbRb¾¥ƒÒ‡˜úÑ_õéZ'ŽRˆ¡íHJCKpzזªŽíUc± XeòùëÝÌ&JÆøÙ·1ž²yJEÄӁ6°–1³sÏA<[„´7êhˆ­x¨Í@€`“‡œ‚² Š£€m¾ÜÜ Äà·¬Qm:ãG¹t¨躕‹s_ת"„e#h–Æ?-W¥ã?ÂiXÃw¦œºãß7䑸È£­Txv#}ÃX'ø±=‰Öë,é#V*y­U/»A°ð꽩bêÔ¯0Å(šeè­¾óEÅ<‹ Æ)VŸ¶ÆSkôÙ±¤T¸ÖÙüˆÌu¡|Ÿé¯JRê)S9gŒÓýºjãœ5b¯Þÿ i´ÀÝ‘Q@i×ú¶IÂJS­ò…†ªJKr0û­w¼¡#uˆª6§î€¶Ý–熆ö ›cèŒi ’tkˆd*c(ׄóþ2•eQ¹Ë]˜,& +y/‘ŠzcŒû× /Ë}åªk ü–a̺ :çšûêòš«Qn4§S=úùîè÷£ÿÁÜÍÞendstream endobj -531 0 obj<>/XObject<<>>>>/Annots 353 0 R>>endobj -532 0 obj<>stream -x­W]oÛF}÷¯¸›—(€L‹¢¾Ü—"âÝ.Št7qQðˈJS“ffhE(ö¿ï¹wHI¦ã¢E`EÔÌ܏sÏ=sùåj–Üftþp;šáßòvIëÛ99MåU*?¥´žS¶¢¼Æ™6ñGÊŸþy•¥‹$£åâ6™SM‹Ù*Y÷O}¾º|Æj¶NV—«i’Ò2[%3]-“MÿÀ'/kJçëäöbñò«‹%‡ vøè9HùƉÁÃr¾Bˆ‹Íßçø“×ì4»]೦ùr /ñ©·CÙf‰½£Sl.›g’qšÝÂy|âCé,M4ßdÈ&7)þOƒÉùbó{µÂÉøÄkóe†ß—È,3üÀk5eˆóbm‘ÍÕ¾«E²<ŸãHß,E’ò}€½ä‡û«›»[šÏè¾DñWë ÝRqü’O– Ý;Ûm+í÷ÖÓìÞÝÿ.'ÒE¬Ã}ivCd%–¦,µÓM Öº@a¯:ìU¸4Úy˜Kú¸@*$^Lî÷šlUœö=L$ÕÊ[úw×D›MWoµÜU…ìtuì“­bô¹¢ Yoî .RÙIe[s­ŠÂiïyûÍÝPö ٖ‰óÜÈÐñ2qÔé‘êyñVìÈ>ù!ƒÛ ÕÊ÷žJHYšJ¿â@À½rÉ|áÂ2™Ÿ˜ÐŸT\Wé)m;æ•&d¦›GxTSÑSU§Æ{tÙn?°l`ÿ¿ìá5ò£vlÆöø -Æ·•:ÂÿVƒÞZê2ÁÓ/Ÿ~š’a¾ÀqëìVmQž­¦½‘Ûë›å-zEåx†Áã «·5hj¤²ö`æìž;Úöi Ÿ¤Ùš#zþK§¡=uЕhû©¨ÄÐÅ÷1,ƘFþ[pÌýƒpÅڞµ6 Äã)@Hʪóñח9ù„ÞC–-RÆ^µä‡þxa¬°Ú£7£66È 9n„NÚ9hI×<âÞ¶•Ñëç‘Z…rsŒŒhøQ ²RÁQvzÔ¼—iÒûœgòîCh¿»¹‰ôMÚ¨‰u»(õáºsÕµiÊÑñs·°Zy ˆK.¡ÓªjPsۜûš³ù3Þg ýÜ@Kª¹z²Î09dQ$ù¾Æ ýÊ›»ðk ¿3TALyr8HQÓ¬Qꤽ\‘J×h5ì³»]ÅðÈӆ¾»¾ %_6½b¼Ž©˜}M"…O ]®®¬’"rÁûð@‚†F›ÜÝãîà( {ˆ}'éQG|€pƒP9„Ò±C¡Ø2Ü ¬y‚ÄN#ݟ©3ýø(­Uëڂ„ÒÐþáÝ7¨ÅH ¡Nimqço¥7Täe;D”^h¹ÈO Ür¨Ö-nÑÏ q¼Ý”Ìž”o«¥…br#Èďû¶£så‡òƒ9¾¢QÜI­m¼Ùd|`N&ôw4|Ö ¤<ðµÎ­çà!ÿ)˜‰|ÒÐ>¨Ð®²q;W­Õhn`zž+±. «Ñ˜¿aàžÄÐA:ŽV•µý¤äû±-bnáö.\ÂÁƒô(¾ó­„baCÇP0îRfä邻¹U‡q'sËŸt¸iu­5K™|ê¶Ò2\°H ‘qj§ƒ¸qÓâÊɕÇy˜9u:·u ­åº)™ù‰y‘m ‡œ@Äu×'4íûïY>ÜÖQä5žM9mµóqüôäÉ—HAñKOá®Át ׈\2¦À„jJ\'b;ï*„êqÅjÄ.è£Ø*̲Ü"kFÎ9,‹̽½ôS¼ü蓆H`zã£rwŽÅ$ŠxÖ -X\ßaªŒ³¡ÿGïn¸A‰*L nMÀŽJ¦OlEA ÂJ‹a€÷1 UŽ¸Cý^’öŠÇ¹Ó!ó=…ye”åkÔOpô#¡•7<;pé¹î¸c4’R/Ù€Lgð‹!]¦7Á`5r}"[TÄ«³íT:µc5ÿ_\9¶ƒîèšÇ%±\£CÃL±a°*ƒ i@®¼—믶HðMÁï˜.ý¶p!8= â„Êføå¥2<´#¶Ó›aŠö”vPÜ¿º®½ÎSeàŽäf>©S€Œ!ÊÆȵѲ©“¾rÇá=g ÏèµóE“æç+&¦ -!^¼eLøíÇ]תéPj°„Ǭ¯×iïIOe¸DÖ**öÒiãù.ìq庀QHU¯™çßoî6çڅ¼Ð~ûm{±^$ëÕoçxýK7|öÃýÕ¯þ÷vÊendstream +565 0 obj<>/XObject<<>>>>/Annots 331 0 R>>endobj +566 0 obj<>stream +x}™KsÛÆ…÷úSÜX©’ ñ¡—7)ŹJ”ò#‰•Êƛ!0$Ç0ŠfnÝÿ~¿îHB¶\Q\"1˜éÇ9§»Gÿ'7S³ÿ§^šsþ»¸¹0W7S;³8ëWcs51ÓK“¼s΢Ý?þr4O“ss9'צ0ӛirÕ}ÊÍÇçëå VsF21³ë+~Ÿð<ëüŠ//Ø膍ÆÓY2í>ÉF‡Ÿyzyž\>=øÌÓ«Ëd|øôàsa&çœϑ?ót:<sg˜;}nît<áÏ0w†Ùý§Îo3»8ט̮±5~G ƒeì¯ w¯Í¦lù,8bÆôfüƒéöæzBì§ú¡ßl:9ÿÚô1Kffru¡æ/®Y?í^»³†ùùéáèìîÚ\›‡¨¸¼97™B_Ò㇕3¡Ì·Æ}I]ÕúPš6˜våÃÏ<é£/—f¾5«Ð´¦²mëê²91¶a•3iî]ٚҹŒ/xÓå¹ù½öOáËV”¶à„…þ^»"´Î4®~rõ‰iä ÛöËxø|tnNo’K,·£ÖãM•ÛÔeƗF¢V¦õ¶jù\Ù% +$`]î¿-CéØBÍ_„ڸŧd1Ýâˆm‚dw³òé +LT¡Á`V$whX±XÍ*l\-èÒþj¼ç½ %®·Ø½kFæÓq‹ÏN"×jl\1wYý‘SlÚ®mn~}x÷Ö`ïo{Çt#윘vvg#ʏÍÂçÀô¿$MŽ:íŽú_\ÕqáøÓ']Ä>~|kÚږ '¯¡Ÿ=b|A0/™çÊ Âšá:6b>‡e^^osêv]ZÈ°íð’âX†V1¡à—[IPíšÔ•¶ö¡ÃK!të ¤ °Ô6Hl +‡õê³»£¶ŸN&h¸ž%È}Ÿ S¯KrďE.ŽókØ`[º›ïöGós0÷Jlåµ}ÄàLW.õœXÕ.µkõ÷ÇA\96](VŽýïe0e؀Î/U|+ "݅_®Húb±{óó¡4•þËiî9´Ù6­+Àd¯*¢ x̧rãs·1küéы+œÚ(8ö‚ÝÜÁ&X +wØ*1·yN„™[Øu¾³%j#Ž”lµûg ۑ‰:f„>Ú\;ҕ‰ÁcÂ(ú†}„ª= †V €÷._ “šyìjU‡…s™Æœ½îA0²ÃK³0[ø庶;!܆µÙX,WöÉí¥vÄ0½½}OÆÐäŽ +j],XFŽ*‡¶™uÅ&CÃlžDÑ Ù£wîí±#âîUÆÃ>²b’e±ËûK8±Am–!š$Õ%ËČo¨É—× µX))« ‹Ç]ʇ " T`f†>ÌE/PYT[>òP‘í[¬ÑEoY(IòX ¦8µÅ8Çúæë¶Þà˜ä·Â;4L±(e(®–ñMҏ`¥š¾Ö“î0òaõ"v°ÚÀÞé !~°¦bxe\Sí¾É6VÒ.“a׶Kxélh!£¾ŠPƊ,ãnwʃ1Ë:Fh4[ÇLlV2©é„¡Hr“:‘ĈoЮ=³­¹ÅÕC£·ÃlÃd™ü _$èÝkëÿu’`Ýó]˜ß|QlÁKN×´gKFEùehQœp IæÌgLÊE’ºP³S©!Ã#ÏüЬ ÚíFsKõëmÒÑ`Cq +å+iȞµèÁê‘45ßzgh’¼=(n\(ˆDM؃™—#¤ÉÑ  +£”¿µÜ>èQ‘tjg7©cî¾z5ðFßMD@z‡%\ *Xë™/sRå됺N èšB $;F?÷d|ØVŽ’%âE&eµ³tGøŽ]„ŸÝ*¶”‚i>KG> áéÏ}ªÇÙ¿¾E:~¥‡HW¸#Ì'1{ù꜠d.©÷Šg’ùíêP՞÷™9Ä©$!Ò!ýx–r<Ƶ‡tôÏ;A"ÍzþY¤“𼔡½ô£_/hÖÆ+Áˆç֖؝%sR­ +`ð«õahZ3“ÎԺѧS|=R §ƒ{8³ŠË":rì'»}3Ía”ÞŸv˜lÚêÇ/•FÏåVJ&}2€ãFý¼?v9”1@ÅhœŽ‹s鷬ܮDtíT‹°»Zë·¤•.9ÒýÓ19Ÿ+ÝÀ Q¡÷è‘Öß¿½—ûAµ jä2EGv!ÜXsM—óþÃC>qF¤Bz}ŗ!t÷€£'Yæ©¢*îú`‡Ýæ¹U÷¨û +BáÐa=}xO[J À¼ä¤+ŠÂÃïÒPóµgè@0СøMSeæÝ C<CQ +Jݧc|¤͙GžIò®’N_gyO$õضÈ92$w°Qõ »ô)ٗ»9࿍Œ%| c[ßXvÒ%9j‰ +¸ôïì)±ZªeÜÒ‡tÁ&n-*î¤zQ.¿ +þBúû¸#ÝôdSìp.¤ÚÆ«­1˜=àÝútÛZªNZz ãÆAõÒ²KMZs«Ç-OO‰Þ¾îžú£^êò’§]º/€áŽÎe„«3ô ï~³O¶a¿j×7I¨¸`‡ûÛ0¹‹ÍU¨N¹¡á¢¤KÆâl´»d‰´•&5{v›´‡©Û·q$,ߋƒÜ[´iÕXkq”p‹2Æ¡¼chÇJÎqÄÕ»¬¢Ê2“EŸ÷{è¯öå’.Ù_µTF9*¶-2nEýÐKGf9‡Î’…•?L|Ŝí3æÈ ÃH"䤩(:ûæ'bÄ>îâ¿úsÀN-úÛ[0&vÜM:€ôë߀Â6¤!—úˆDìû÷D>ÛÝ%˵åo1ã‹Yr}qi./'ñ/ýaw:béqÛ<’æ?äÆQ´P|;íß;½:¿‰W»æçò8ÏméèßdÑìj–\]^sÌÝïx"_ýçá菣ÿq}0vendstream endobj -533 0 obj<>/XObject<<>>>>>>endobj -534 0 obj<>stream -x…WÛVÛF}ç+Ny ¬…ÛøÆSWš@C[)î"Y¥cidO,i” ã¿ï>s±AÐfq3͜}öÙç2ßúÉÙ)í™%õñ5>ÓôlHFR~0p4Òé„Ò{úxi÷‹÷$}:Ž“fS|âÇíå…áx” _[œž%£îÂ/óƒ·g4Ñ<‡áÉ 2g­OóôhœŒz—7Ґªl#ŠBUKº1êA?nOè’VâAR£©ÐK¼AòAš-5ª”XÃû¦¡Ëó„îV¢9ž;èSo0ìyv´TÒþÌß^Œh0ðö{Ã)/ÎWʾ}o•YSƒý$ó\¦Å?2‚Òé|R]}k«Ô-mT³¢Ë -ø+ÙÐùc]h_D•ížF\§` ¦ß몂>÷v% »‹wªÊôÆÒ°XðîøàËMBs²Û²nti©[u-…aZpŒiëFf¤MǖªD¡2úð×5YÙ40fOðÕÂڍ6™MŽá¡º»•¬â«ÔրB×sZ‹ã#$»µ,ɹ"E[Ý:d9üðl6+¶F™¦J78;ÞÄL3æŸÏ5Èá€?lþk@€³ -Lüx£Š‚j£bQl½HøM¬î‚±'ºc2Ò~tùþöþØ;òA‰‚·_ËĬÔýxãuÆý-ÁÂïüY©*e#¦zU…\J›Ð׀®cô9ÖRdP5‹CAEIˆ¡ -øä4¯¡Dh)Mu[9]’X./àr˜¡¦¨cÑ–Ðy²Lèª-9îDƌZö”eHeÁ•b-‘јmU㸸\-[çsœÀ»ÖêljÂaÎOY=(£«RV>Ð.€1¹EÁ€M[†èüÊ÷ÑÜ¥¢v~Üñ5"³PÊUÚ¥ mV*]íØk±µ2æõÁA°0£>bîOÇæB¦ºe8ê † öû]9«R¹—+r¹@™B1’—TîVӕ¨–¬ÙÅÝV™'¦c;„‰m#Ýt$ŒO؋)¡zÃÓ+˜Ó&:—]"·½Àœ»¤ÂCh®"⼎áŽ\=r”LíôCÏä{x%!Íb{¸O -…Õ´/l5ŠÀ"“ “±V‘'C -„1rˆŒû?…±ˆÍAƒ‘Â"ê^¾Øû"ÏÛyÓYãw.Ϲ8&ö¡<çwƒ;ŽsÆ0’Ö?Þ=Ëfˆïã³\ v°œ#Î"j&êGÖ¢ûmÑ ¬…á6@—Beûw:&c~ºVe ‰‹|åFU–à@W\—>:űBrelã{(óèƒ]ÿ\K6²·ÐÐCµìž]EV«ü\åkiʲN×¾˜Ÿ¸~†ÄFs}Lë¡ %ô[ @ ǽi]Ç¡¼ø6‰¥¯ðEv¥Û"ã>øé÷n3û{ÖN¢dþjyܯ=ÄÛ¶‹RY‹^œüÃ>Tz§ßÇÉYM©¨ØŐ^¬xQméb~CV5Lp¬xÜêœM`Z:u½¤”Ü+£HÜÎ)XàÁÄWB†Ê6Ðh€==!¤Oh©1ð®ÂZÌùg…͝UñºãÃh!0MÆ´ ²cXotª ò5ÂééãH°Îoƒ?ûÑî aW¯DJŸn¿ðçÞ8î|+¡+•muŽéíÅìäˆpÃ4Y5,a‡Ä»àãöbÂû? ÷Gê"ÞR¡Ö’ÆɝÞHN~´Gß{…6ÁŽ'‚]ò:ß0;y®}ŒhÌ÷"&®Ä­`nŒ 士8-TºæλÂøA -Ñu†øá®lÔ¢ -•9´žú¤cùÙa7h¦ -µc@eÑĝ‘Ã;¹€\¹ÓÞ1•÷LJ”®dº^èGV‚ûŒÎ⪈<Ëý0G †¸àkðœý#ž€¸ -=C{®d‘1ŽWΛ ³×¢?읃ŒJ>>)^ñ -pB(C¡€àQd (m˜€[¤§?ýUµN»j͌pÃs…—ë"DœŸ"1CÀÙ¨ƒèqk[…Û `%t­7Žwî{¬Y˜ãù“iÎ ?˵œàŠç£z7N"›;'KTQ\€"†ÿª*®¢:?x’ý¡#Ö é²ÒíҍF™,dƒ¢ð‘ÛÖuÁjBcÙ¹—p‹J"È ÿÃ0Œb\mÜT™ -(·(à@D2Ù`ÈEÅüÄi±s儯ûÿÅùNÔmN xi9Ó-†çÞ. ؃¯a"ç&šÃ,ë*¨)ý%µÎXžLö|G‹m'= 0À%x6žÐd:õ׺HӅ‘ß[·’wv CŸ¡>¾íYæ¨÷õ¦ý3¾o¡µÌÃ ñî:íh:J¦“îËxepÆ;ÏçŸþKž-ƒendstream +567 0 obj<>/XObject<<>>>>/Annots 360 0 R>>endobj +568 0 obj<>stream +x}VMoÛ8½çWL|i +IJ$˲ÝË¢ lv»@±ÉÆ@Q š¢,ƒ舔ï¯ß7”-i\±4rÞÌã|ðù* –S:ÿ4 +ñ7[Îh¾Œ©Q”_EþSDó˜¦)É +{B,~xORš†ÁŒ’Åï1þýÞó*ÿöïŸWQP&Á’*ZÄÁô(”ôèU3|cÕrÌ©PEÓ)–̼ĺ8YðÚ£6^΃蕖ñfS^¼txãtž²¡£2‰bøßKd”úQ¸ä•^:é’e¤0Güì¥A7g[p5a_â¥A7cž ‹S„“xiÐÅ x8è¼4èÂl™ñ%^8©¦‹Ä«¢u½4èÒ8ˆÙ$€R K¬ã#›Î¦€ûùÈ(^„0øFñûêjr·¤%̬räDº`gW™O…Vò& ¢E@_詵Ž2ÓÕ¥™ÊHнjJ²²Ñ;wK¢Îè¾Ñ{ór Q:Õ`‰v×ô]o•½¥®Ž´¥®1õæúãê ° Zô ãhÌb ÞܗJX…4X›½ +ú¥¯<Ç1(ÆZ8¶ è[(’¢†‹¹†•¬ëÜ4•pÚÔl§ugß°¤Q¥p쟵­²¿]ôæãX¢–Êú ­vx3908JâÌ`½µª±ŸØ RtÓ8Æá w çvŸ&“®ë‚]ÏS`šÍä–2ìÿËTŠvbÓÇ=ae—Î~a ÏoŒÜ}~𴽷ۚ¶‘ +ä¢Vn²k̓’ÎNôÓÚvb°ä¿Ò=åF«¡N»…Ë‘¿-Š!áǕ¨[Qru¼jJƒšzµ7üjjŒO½. â¾×á%ÄÌø°WT§%§x²õÉ8úªec,"ñÅ׋­ÜŽ®ÑØ1H¬L'p5“ᘇêp,ö(:N Ï6T—;ù7õ¦àK@+Dæԋãê·N»Ö7„Þ?ÆbL«#ñk¦­X—@מ” YٖõÄ-®mŽ3ƒ-ôn‡|£ï0R„®p8“ž´òäµµÙ 7¢½ŸBLõˆCšÜ‰~"Þ 9ôŽ#òf„ÙÆCõ|ú9ה*ÅZ±{£ÇÔ(T½T•ª 7‚ôewN,¬_P²žZï©®v¥–ÚÁÞÙ/tÆõ§eaŒef¼ÏŸ³=pZÌ@L­ç'œäÙëÕçV¯2í€öãU¸3h[ãA(R¶3Ó5;øññ˜` Š"¾ D³$XÌpCRÅxò=áxÓ¸kÔs '`ó³å|À@÷ÊüO;ÇópÙ_諶R•hÊ´–%ó$˜§ Ü}`7šò§?VWWÿÿâp1endstream endobj -535 0 obj<>/XObject<<>>>>>>endobj -536 0 obj<>stream -x…TÁnã6½û+éÅ ¬I–%{,Ðt²¨ÑÓ^h‰’XK¤—¤œÅþ{ßÐRÒf Äqh›œy|ó捾-±[ÓËâZJð·Ùm¨Üeä5‹4n¥Tf´.¨“ èyá‘PQ¬±æÛk†ÿ˜›ˆí§ó2…æ›Rì¦Ð¼éû°y¾ë×°¿î·÷9¥)í°+¶%íëH)¡}µÜwŠ‚“¾£A^ÈÝ÷$O'%5#o‚r:í©²Ã Mý3©á.ڴ؞“g‡ø³Vþì‰|gǾèQ‘ä»ý_‹„VéZd ±Œ8$[©à£Ûû¥ù•çj -|­—±ô™Z¦pêUPý…½4G:ÉV‘ d"¯ƒtó§Vô‡]¥n˜Æ£Çiù0_^ˆ-ãÞuaè?Þl}ùxw;}Ľ‰Ë‹f«Œ5ƒTo IL,Ö)?ö¸¼µGuðʝ!ÖèY›‡ßjƒöd땟r¾ÊzpúlŸ ¹25N,b}õ3×I(Ö¹²×úº”û0¶_ßEªP4+®b}6`R«F2-d4º ښ÷Ï: x’ho-ƒ¤´cè›Ñ°ÀL@Õ7‚æ‚9C;UScÙ -*ªþŠb£{… G­dåÐüVW\Ú£uG4ѐ·ƒ"'á÷JzåßG´ƒCΉ/*B66Üht%zŒC€¾ºujš"qO@Eÿ6W€Òƶ…à Ï4H:; ) æU¯ª Ïl¨0:ƒV6¸‡’ØÀL£d67O†W׫§Nàn?VTìäY['èӓd›ØÖD μ½O¦9\Ž(XÈx|=™Ý¶Œ>åȆ`¡¿˜|„DôýÎS¥ž*ub|I î*R@¡‘ð„¾ýš+ƒçþí¬7#~„ý{ca³Õì1Pÿþ&Ð~„%¡®j À^¥ÜN"§›µÈ³œ²¼œÕ›‡î> hû/þžðL²– ±J7¹Øn -Z• ºÀÏ ÚÃ6Ìpgm€Ë9,/sQxfsH–ðÖ§ýâËâÌ<à endstream +569 0 obj<>/XObject<<>>>>/Annots 377 0 R>>endobj +570 0 obj<>stream +xY]sÛÈ|ׯ˜èåä* â§(å%åœå;]î|ŽÅ+ç*ÊÃX’°, ˆf¥òßÓ=» ÚrR‰ƒûÕ3Ó3Ó»ùãdÜŒåðW½’þ3½™Êìf$µ•åÉPÊl$ã+IK¬`Òþ¯?œŒo’+¹Œ“±”r3Þrò쳔ápÖ^aŸýÊáì°—>ÿ.e4ê¯}þÑÉ Ɲ¸ö€OÿEÃp Kndr=ÿGø£êÀpŒOO’™Lõ+n#ÓÁ fÃd$“ÙÓK_ö_\6»†+&“!´á”ƒúÌJ®e2éÊá„6‡/Ž#ŒŽ³dÊ¥Óa2‰_:úì£×W°9ÌåèxÂUÝÚñlÚ}ö]Êd0ÄÃZ:a<  åVœ¾×þ:?¹|{‡î| Ž\]O’áìJ晒c óôlšÈ¼ví¢°~í\“W«WóOºŽV벋¼t5Å2Ì&r'ŸZßH»YÕ&³™˜ +JYنËå4uUeÓ&w¢·l½ÍNe›7k±O¶ÞÉÖ.dcVö/á k‰è.†7ÉtÄSn1ÙÖò¾ÎŸÜçä^*×HÝVö?WËεµ,j·õ˜‡q¹ÌWm 4K ÉòåÒÖ¶jdãêFšµ©d»6ÍóM[í¢׳çk+®ÈöóÎÔ¼Â;ù©­°ÜÖ¯„f…½¯H¶ÅN2»4mÑÀŸk Z/ k+Iqô +s§‡×°g{.Ykù«QôEž6ÁKï^ßGLììáìm¶®~”×m–;¹·õSžÚ‡Wç0)O×ÄâX %O¶ú®9׏Ê N߁‡Ke·a—ª-¶VG›æV¦±Å®*îƒu!Œ&„ñLŠª.L–ÕÖû0c|&n£´È«Î¿ßy) >»_æ…ÕÀ¿ÏxÈÄSŽö,Ä90Ì(øº-ì¹,ZÆÛ +`Øê{›ŒñM^{’6k~µNäG·}™ˆp$wÂküÑpf¹ßf‡3T³êÜ"o¼üöáçsÉI¶©ÝÂ,Š¦ÊڂTÃý"qa{jR|“²Þ•`C^ÂP­Ûa¡Þ=#§3¡\´Tc«¼¯vH¹?Z‹ôŒAE‚ ëÎ5I»„RpL)àŠ6 ҇ä>]¿f2c— p¼4ÈÜeÑúðkˆúבE>‘×( +°c¡Y!ÆǙ¦ÎÅΙ³4¥‡6«{¿‘Á@.¶®á¢•Q^ßlŠÜf,`;T˜€éÏÎG$ąø9Ԃ*ã(©P5®OåuÓlþ|y(˜lBÕI\½ºDIÜ^´uq‘WK$*Lò.[2>µ5B[š!ô!¡˜A„÷MîŽùµB‘YJ —š'Wç ؊¿‚/´ØiºkьAKä#ËW +oÜÁe/söm^#úˆy¾ÜÁX°ps^e,¦Ë®ÿË9¾1M‹C5e +¨µØl`3 ýDúèX½l–3…ô;Ziž)6(ƒÂ¹ÇØè}TÁdÖ2Ý šlˆ¾õ…â°!šfe$¡¢Ž#A6¦aÓÓTh07û>Àö5xÐ¥y´BÚÅËMaÙ)µuÀhÙ~´-ô#TéÔx¬'ÊÚ¦®,QŸè~£j‡E7"®Âvœ¯¡AD Îc&|ª£°æWÈKÝ%+l³ÏÖmÚCƒÄs"¬´™„D굚¦ÖZ­ÄyA•/Qsu·´-€ +b„J@Ww鶙­#é[x•8þ‚J‹§ 'BƒÉ +éÁÉÚlŽ“:$1ÓiIDyEgú"(ÿ§è“NÏu¥B Ü@0£àtD¦![ë4ös£$t藜G֙3ÑgüZ‘{Ã6­Me32VG^âv‚zdÀ—ѲÆç쵌;ƒŽ–À¨E±Vz¤3 íαP”*i°„ŒÝ³‹{žrùv/Çþ-ËÚ¬XEÿFöZ¬#(œFQÂ!3ê$§¿¤Ó›(¦âÐA˜"‡àÕLc”½6’ÒÁ¶ÓŒúj˟v»PVù#sؕì@=‚+H~ô.›u•¥p[ðDM ŸL +•Qe}Pp`˃îxÜ)….5õ®+kSŽ®AXöNdIÚz*~8K·Êlcø$Ÿé±‹ÒT-âPl|V)¢uf*—XNᦶAÓ7Å7eÂmn‰:„3PL íÎïƒ69‡Є„Ï +·"Špµ¢~ÄæãÎsw5à +mÒ¿,ôºB”hQ9.D ɔBÏÒº HsȖ= +œ Ñô©­ÂeO›Ç]ÅÚi¹ý¼)PTæ ëþ×ïwÃûµ©ÙՐþ!Np—ëGoÄ{ÇQùÇû Oýmӕ¼9 èp·Ñ‚1›ººn7 â„R”WO`e&o~{Ù¦wS<  W{è«ÌwšdZœª5½’wsY T@ø}²4:Bk±,aFÌVÊ9s%ù „™£Éze…±ŸÙ'{”P”˜ÜáP´þÜ¿[(8£ßróÃÙÝ÷÷¸¸j”Þ€}\/–ÄôpGqœN«xg͏@éZ“•y…îQ°˜}é Õee¡ùÿ:¸¯p (ÆP€1Ýë€yBi†sºž:tXJh-ÛÙxÈîæàö¤Jä6Y%òK[2Ìo öáO;Iã92ŠM„Gi׳|›³ +÷Ÿ¸ê1ÿß<éx ÕfÚê)¯]…¦®ñ ëVoÔ +å ¯€¨f-ÑÛ§bv‹PB¨ ÚoJ?öså™S‘NA ª°o9¨.mٔH §†…{ƒ]¦΂ª>beª&ž«êEWhI¨ÒpS>‚ã}HELx„Á¼Øy¯Ç\h!€‚•1,<Ùä:äÁL½¸³è¾ÒÖΚ%duŠ¡àPc‚[pAďxEpEâæGäŒz‚TãõÈzú D ¤Ùé3Òk3;”žÓÅÜ#STmöqu…H‚ñ{Ÿ!Ÿáúc53N\<=‚H¶á¿¡ds9áòIÅ9w·œ¡¦âx˹qґÝÌEòóë^²‚ÜØJ-é[Aßa+Jw¯¨tµˆzˆê¡-;´3à¢RSYÞ/ЉQcº9ûôÓNã†QÓ®M £]Å:ó£%õxîR/»Úöàï>. @O;¶N[jm/á±³W_qQfµ¡dÝØøJ¨a Còi‹þ£?‡@œÇŽ’à’ÞøRŒx¾es79ˆ^ípðàNÙâ‰=â׿%ђNšüsåòˆ8;ù€?àn¿äƒj8áõí¢Ì½‡ºHþŵ/½›áµ÷Ž²–&Ædâ¦ÑoçïÃ#kxxeßÒCjQ¸p/»×¯<Üv ã Аt ^¬Q鈖§ s~ª]±Cî oˆG÷² hŒb·-÷ªt -Q P‘3j<§âˆ`þ^ÿ´>-( +]êŠØp”]?Î èø¿úøzù¶“É +~‡ñ5|>/XObject<<>>>>/Annots 380 0 R>>endobj -538 0 obj<>stream -xµWÛnã6}ÏWL_ -Hdëâ[¢Ø-ºm_ºÛ$hQ @A[”͍$º¢oþ¾g†”%{“´}è^Œ0ÃË̙sé¿®fÑ:¥á£ÙÑ çë9-× 5šŠ«X~Ó2¡tAÛ -kf˜túà5ь³8ZQ¶Zâçÿeí0+æù·?\ŋeÓ<[G ª(I§QIw¼5ÍÓE”ql™bŽq,Y¬ynÌs]gÑ<Œ$:W”¦¨iÍ$Ù©?Õ'þyú”%±OUÒñ#^´N#²âR+Š“9Îó#ŽÇˆÎ9ç!šÍT˜Îç²q–1p~ÄkÇ㊲ùò4Wv^3:iÆ;…t üˆ£ã1¢óø4W¢£1¢èÄb¼v4FtµŠ–ãèh “”s–,$«%ã,Cç€lFrîhŒè|M—8×ïä+Ɯ3sb]¯Õeԓy - .úºœãŒqïÒy^ùŸÈ«âå -\¬âÀÚó6–žÉ@ÊG Ê8Ý^ÏøDp,5æ}Ì3oˆ út#S,Þa° K‘ñ†ˆ¡oȵ?O¨Æ"¼ÈþíýÕôݚ’ÝPôb¹¢û\dŒßl'‹ˆ¾³u«¶­©wÔî5åúQ—ö wMo»Ýêƒm$ªêü«ûW3ºI2l2y§UÛAï·ú¯N»Öqpú.£8ögÝ$Œ&&þ¦éQ•¦'Û5ThoÔö!¢Ÿj*pò55|£|"[“i©µdªCc5}hÌ£ýôD8G[[f×5ª5¶ŽèG{D¶Í5J­œ¦Ú¶:¤³Nq6—Tز´G.poêu9ËGnUM|ŒÉ%3:šv/lP ¹îÀ…í«Zƒ¡ª4Cƒ°3,,¢tKw~æçå³Ð'Ûà,ש’:'¸2 a$×t©Vò>¹«ø&,vBw˜¼ÕØcçK;MAÇa·<Å8®c£6€0änZKê2K>ú-Ñ¿œ}Û¾žNDv:ªu;m´G7Óowíšü›V_õü›D~>϶O…©Á^€¢ß”¡ZR ˆ-к®A‹ŽºÜÚJs“s㶝s ¹iP„‹˜Ÿoßg>ñøQ¥LÉÝ,»€­OdNí5>g4©ÒYÙ{„ÂN -…ÖyÄ!VË3½N¢ Å3T½þà‰Øˆhp\I›ÓôEPÆE–Oþ¬^-dŠv{bn` …&ü?MäÆ«s”OØ £V¾Õ ŒÁ2æΞÔV©  Ê -²…Ò8ñ½r,Dßh•3#ui›Ê´ ¥HÙn ț—¨<7¬fU^6†µ -aȬÖ˜D¯PßÀrªþe]¡WmóÄl„˜?íq"LšR'ûAYג¸ÔE›ÆQA×B“ª Ó¸–VPW3&×h ôX`•Æ­Ýí„Á¶(žOv$Òà>§5ÁA$_êŠØª!ÑýËÂQ‡ƒ®só)€(B‚Žj˜Òó LD+Ò̽.EW’©\±^0ø¢[|ƒ@»¹V;E €ß‹ü;ÇÔ÷·Çš úÖVçf~b•´¼À”íC˜°4”~q4{–Ý|§(Pî’Ïè÷Ñ'ÅäYp|0À¡†kÚîU½…±s xROm¡sÁv!Œ(Ì'ÚˆkQ¥UݚJG„+ïh»²¿0{ÃE½58»ÈðÀ˜Z–ŸÂ«QìyOât‡]£p]ŽÏ?_t’3ý1QqOúC±ßýzG®V··í_q)¨=Hӄÿ›Ž¥ññkpí›Ń„WÂkš²‡Ê[~ÖG -Íô÷@ŸÑTŽ+.¾ÕاðïŒ!IÀÒ°4ÖÁì%·ð˜¨tÍ .Ö]ÔÍe1‚ÿ¾r3ÿÓí)×eº`§ýòü&}¡S¯a—îŸ7¹Tú^*}#²s7·žêp,Ñ¢ÓspƒÓKŒTØU¸îJ¯%=R×àvm·Œ©ÔªYG¾\7%$ªsïLªÆû­GŸõ(9Œ|LÔÈ>ÈË LßáÑ-ÏÅI® ՕmäÄ‡Û±0% dhžŸ†‡×$´Ç²5®"dŲ±s£œB ÇctðOͯ iØ|úRŸè=k :8‘kÑñÑà®ç熭6Ö>TªyÀCÄl÷x\".2gÕóû;D9bx Œ‘¡lQ*PÌý Ãï_Q0ìãX`+˜ÛñaƒþÝa¡eþùœ“‡ñ?`ì|¢v‹«\Êò¤ÄMÓQxwᑉÆ㱝3kÄúÈä.+’Â7X u°UY‡ìϱ,Î|ܸ£ºé§ŸOLß~bÀCV‚?Ÿ^ٝyäp•ˆl^Ú ls„¹|ÄzéýùœSvAȫ᫾ññ¯ÿú}«÷ÈÞ7ESÙ2‹–‹¾ÍaÃ$澿¿úåêo´+!endstream +571 0 obj<>/XObject<<>>>>/Annots 380 0 R>>endobj +572 0 obj<>stream +x…XmsÛÆþ®_±U>˜ž!!o"]O2®#×êÔ¶bÑU›ÑLæH„Á¢Nÿ{ŸÝÃA¢,ÙñD¢Üݾ<ûì³÷ÇÑi°œÐýjC§ø7[Îèl9¦JSrÊW!i2§(ǚS¼Ôÿà5Á)ÍÃi0¥é⠟Çø_ÖòƒÙtLžz0…xüĊ 6™?ñà᩟ÿ~ΧAH“iŒ)§p1Ý_]ÁÊņù•ãùYoÌd,{3îíߝ„ÁÙfPxvŠ#Ÿ0|± f¿ÿÛêèä݂´JÈùò”V±D¢ÁckZWfoue©)büªUÓ»Õ%)K{eüûýjuÐEB­i(2E¡£šjCŠlZë!íÓz‹?¾|þ'eéN¿\ýŽS•;u@I]¾:9ÁÏ@ß©¼Ìt™Ü½ÓY6òΕ7…RK¹Ú¥Å†ß:¥Ñ YÅUˆa©)†ÄƦÆál£· º2´ß¦™>Ü:W-ÙR«o5¤Ë*½5w-ÅF[ÞÈí©‚7-+~d›hKu¥’$‚Πp‰À¢•Á‘p)T­as]#‚C²&×d[[ëœ=ii«n5lÜèBWiDDzó1Y]×ðܦ8dŸ"Ü&u֒.Ô:{˵©·‡¡sŽû¤ÉÆØò/ì~Z#’‡!,µ)¶•ìEQã,•õ§I|ý”ToµÕ)«m@ol“À㦲Èzšà1RµUe© ¸íƒ)~¤@“Ž±´Á؇"6-" íòѧ]aölÃã8_sdüöúVW]n§]j~¢/ƒ/kZm5à÷è†}œÊœ“Xie=hàíMµã@kȽ+‚?ƒê- ‡( +h´ÎŬ“wK@rEÆ\÷@Â,˜£B +ú "útõï!]ÀõâE͐LÒMƒÝ>¤Qe¬Ij¼œº¦ó»2ÃA[Áqò.¢æØ@Á´¤£;¹¯ä8~kכRˆhY„•Ò¤YÞ¼D$PQ|HG{`D¤C%LR`ó"ÄbÃ!yh֐ R˜Ì+Ù®èY@º †g„*ّLÑÇî¬á‘sx_0•ªàsôrfS—_¢2S<¨Õ: óÂrxy‡ãk½ÆÉ(ÛC›nʛ—ÇpCG»µ¹ãËg`”­CèŠ= ®pŒv‚¡ûޓUW¼¤j)Iu³_¯_„áâ饗¦ªýÊì.ô5k0ƒñøâ%V“Ýš&‹ÝAh3¡`©Î[•5(OwÒÓØ<{ŒÍ¸R› \ç yÐ%&ërÍߢ¬ì–]íÐiÓP‰iÐGT*¿—p¡!hà:M©aØ46\€¶aM8Ôoz ¦Ûp 鼬[ÙNŽ}íÿàšãArß·Þ¿.L³‡Šu¦AÔl¿÷Ú6%øf Ô{¹Cå ‹„hÙI2 +HÂs+Ü|ߝb]«4CÕ|BIÜû2såïg¶7MÝmٝŽMÆõEÃ&ÿØn] £"fÈ`b*Ç1ÚêœÑ|ˆŠó´H-¢+ï”ÊZÔz,† }?ë/”W3í2»«Š’†?'@9|áâqú«ËÏ†CMR™\<ŽµÝÕ¦ì@수î¶tYW•ßDïâ!zéR𨢛AxLn^¢JrÅ8³"ð ’À©ÎŒ’Ê>A|.Hߕè¼ÌFT!@0PP­e€—Xý´¼>áà9˜]y­=õp@¤²-”{ÒހSÞz1óÂzášýóؾִր"¤‚DAŽ|†Î*èâòv>ª`3ç|ÝlØpé3k Ç•g¨}¨â8ñ©µØ£Õ€Ø\­4sÐ)ӹϚ´O¿8ÐyÔ ¸{„?χP:ˆ¶I~¢ž@¹Í à*É)8¬¾‰‚%<€‚b­'š … wי*v’BB‘ô –¤ÿ+Õ{ˆ ¦Š4„ÖO³ö½ÞÖyöã뵉Û_Ÿt¿ä»¾®pgU’VzÏ¢µnK‘MqÃëç¨MóÁ蟻Aµó´ŸÞ0¿˜ªË`¾t9y&åa@Z4ˆ †+t„ž{üE†yŽ.w0¨³/ˆÅC¡rô'€œÙXy>ឨkè .ïûm<½º™NÂÒ%Š1Õk² \íÄ17‚Ç x„e³>f ­]{6 u/èœëž\]tC´üW·¨.FÝñë^~ ¤ø¦‰ëéncD¨ó ½DìôîýµƒÄ\î8ez„öú¶-qU™já}ö<[K J‹¸BàRËM°>÷N2k.X˜Ö_)(´7LC$„$º»$d xˆ>ê®\;gîQî"ÂfxåNñR #0Pq¬}²;øóÇ+A{ßôÂ1£Us!ÍxË:ÿÖoÈ÷¢¡@2Â@¯-+šcaežX…C2ܕÄ-›Œz  L»BᴁåúùŽç&çíÛøeÚ÷tþîc(ˆZ½½¤cìvLlôˆO˜Ë—·Öå-×Æn8“ &¿Îp‚2­²âǼ֝×ÙÞ!´«Ç5>/XObject<<>>>>/Annots 383 0 R>>endobj -540 0 obj<>stream -x]RÁŽ›0½óÓ[*%d¥ªêV¥Çv³\zª¨‚·fmCš¿ï J´MAŒÅð潙7¼F‰Øoá-¸#$tïö;(ö)8„.’KJB‘Â6u¢š„@$‡Ã×(Í -‘@žæOe¥×7Ïÿà—"Ö`´ÌE -Yɕ)=‹ÖcÅÕduG²y)¡n­jµÊÅNÀ·Ð£{_¿2IFnÒBä„]UÖA3\À2 -´÷ú5tˆ:‡ÁÂäéèN6z8‚Ñ>x5ª~Ъ1æzèÐlí®Êënä.å.‡r±èÚ1T_'yýÉÿ¦ÖŸhOAÛÁsõæV´)’=;› øLæ6*ð4ìì›skxœŽpÀѺå+¯ªÂ&LäùUh»Lš™(ò’~"LSN}©£§è/FÊáõendstream +573 0 obj<>/XObject<<>>>>/Annots 385 0 R>>endobj +574 0 obj<>stream +xµWÛn7}÷W ôR6º_žŠ&ˆÛ5œÔ*‚z¡v)‰ñ.¹!¹–կ: úRÄ$-‡s9gΌ¾Þô²ùN/vC=üÏÇ4ÈJZßôÃW}šh8¡¼‚M‡Ž/l“õh2ïgͦx?Àÿ`{:ÞýùëÍp:Íú4M²)U4Œ³IúTÒ#_M“ÁÏ®.êOÇørŒ× ̃.‰ŸfãÉì›þiˆÀF×÷±£a¯[®½]ܼ¹›Ó~kd>™N²-Špy{œõ‡}éh§ü–þZÜug´6Ú;H{#쪔Ev»ø‚»fs¾©ÛŸgã®j/¶ÊþrÑ8YÐjO~+©UÈÊX£Õ?Ò¶h­J/m‡v[•oi'` ½5E“ÃBiz–Ö)£i˜õ²A‡„.Ò!Q×ÖÔV /K\ÜX „—B®ESúŒþ6 ‡˜BžEÛmMS$‘Ž´ÔÔ+ +I­z6/ûKÂS)…óLJބ¨+ƒï¬Ì¥öîńÛo"÷ô¢mNO’xª¨­­©èÑ46—wÆndF–ö¦A‰‚åY¤ªª‘W¡\0äÕ-•-•þ Æî``dôF}ÞîT+¥…݇h-Û®A­¹Ô£»¼¥ÜXÛÔÜm¥>„±cä~¾Hê•€“ÒZÉÿ5P͍þÒèP°È-A;¹"'-ðF½|WÊYYë•ÞˆµôûU{{ž¸x‰²|‘UH&”;¡û“KEã˖íF—Ò¹í™gN½x’äÄ>>"Au)»—/>IJ¼Íèý÷™´qw.ƒûŸˆ!úǢXÓ×Z +Yj“çËÀ.âOW®\:…æÇۆYļtp 5ÔRœ©Ð¢Ê7‚E×¥Á Ê2ÂÇJ¢Lã˜?эo{fyíóÃ:è1cÕ8.Àk8;áDaHBBßd” 9DƖ)r`;S;Ï|+,æfڙ +¿Û[®r?ï¶J[0òUÅ4·çî”bÒlŽ` £Fs,…ß6Žoxs'Ҙ¢4û8hõõ¤º®ÃC:”k ú‚±4è@dþ-žG×<ÎLž nCQ2jÆ«\"tiÁ‡Sx m¬g¥6[ä'0_Y6Ñ̨ê!ÂB7†ëU!èÇŲÀU9Nö rhnø<-L¤ÐÓÉ †¹cÖk~„àÉ5+'¿6<õÓ!F.+„Î7Fu²hãˆÂw„yG4¸ôž¤¬Y˜t­øg¥ ³{¨¥^¶—·-ŽÊŠØÏz«øTÍ#¼ç‰˜dç°ST¤ ]ò;6”¤Ú¡$0~ÍÔE2WTj´3l -êÖ¦nêĵ´†µ$?‰ ÖæVµ’ë¸Ç´Ç»ÖƘ¢uYFΉœVu-±fmj­DÑ +É\#5 j ÇM,Ô¡%¢HòNŲ·Z9ˆD‡SeJDÉáè¢i©žxÉ ¢ƒ|»˜f»€L`aªg\„OÜuLج *èáPÝ(.Ø)¢@uÀ´¸“ âº4XL ~Šµ:<¬)RnµÔÖ<<„Æ|É%€Íylq&—å…d²z‡Æ‹.C0_±wˍU~nNžN¨³ºz'l¤a4Â،ø”x>£~ŸôÇ£l6žàGÉ<ñïŠöŽw6öêù‹{BŽŸ邈s¤Ýƒawڛ³V—…5 D‰BHô†¦£l:™á׎ô'üÕûÅͧ›Œ‰|¬endstream endobj -541 0 obj<>/XObject<<>>>>/Annots 406 0 R>>endobj -542 0 obj<>stream -x¥Xk›Èý>¿¢´ŸÉÃððS¹ººNnœÌ*›8cf£Hù҆Æî;@³<ÆË¿¿§ ˜$«¬VÑ 7UÝ]uêԃüqc[kúG~$ÿæë9-×.咢Ǽrh钷  ÁJüpøñðöÆukN‹ÙÊZQ­…µlW1íúfßaáŽùÚ³Õ¿]ü5w-g֌f6¿HȵínÅ אzkËmut°†tiÈæ$#¬a¢Í×öR6Ès<~72ț[ r¶ñÌYºÝŠ®q¥Ë4º,õ€G¿wf{–7× Í€†;²KrֳѐnW|ò ÒE'-\ìmtYÊÎ8+ Í=™‹\80ï„îzÑ©²Ôï9³}ÏkVfï` g½®‘֌>»ÓœÔÜÛ¯!]Ïׁt°Fl¼…å ¤sFÁE¦–c;L-^ƒgŒÃlm\u ·YY¿Äööt²WþÍÝv·äG`÷b¹"?4”Æ›`²´h—«gýgM¯uVçêx*§ô^2-$‰4¤wª(u^¿ðÿ‡ƒàŠÓtë®pNºmô՝;LdgÊO—uwö峌u&󂚃6sÐä_¼6Éb&͐6“°ÛñŸ¬1ÐÒùñZÙì`åkݰú½N$ºÊI%©‚¢!é´y1²ßY¯—lù&Õièª.!ÛÍXüZ¥O‡ª(±žÒ}XüÖØD·H)ƒGÜ`R•b•'Ù7ÓۏôV¦21íª6\¿vcbµG»­3;—J§éç“PU"ӒJÊ/çú,Ã_(ÊuÂ7“F@UŠ{zËéë¤L¾¾ íæÓÔ8•èPE -ˆ8™e¹Þ¢4VÛ½[‘Î/Ñ4f1©œeˏKÐ^ZŽõ}_p’ˆ҅o°?Ê%G'*Ïpà%Õº¢@¤¨!H—«CU"`ð. ïp½1´æ´„P$-?ó(T-ÍG¨OéñÎä ‚2Qq@ ƒºe«÷­Õ´Õ°Fp\Æáò9DÀ󘋄y×;’JÍQ'ä~ˆ’½:«8¦ƒ¤ªQO îÓç{ÿÝÇGŸ6¾ÐçÍÃÃæƒÿå%4˓®Ê‘;ȘæT•d1¨æ"-kæËoo^¿ÃîÍ«û÷÷þ0ƒ¶÷þ‡7û=m?>Іv›ÿþõãûÍív÷o,ÚË1 þ ‰9”hP5”¥P1rè|RÁ‰±Ïx!1ºð…»?‚ÙdÞtäû|M¾„Û’v±@®ßÒ¾R`çÙSz¥QÂÒ)ý¶!Ûu¹j/§ô¸ßŒCö ,mÒI>/XObject<<>>>>/Annots 416 0 R>>endobj +576 0 obj<>stream +x¥WïÛ6ý¾ÅôK±¼Zë‡e;@pH‚Û¶_Ú^²¸â€Z¢lf%Q¥uö¿ï›!-ËšîÒtã19ä›7o†³Þ,£mJçýž–øoµ]Ñz›P¯©º‰å«˜Ö ¥9 |–Ø4ý`ŸhIy¶Š6”mÖøœàñ=ï’O¼Y¯¢˜òå&Ê©¡x™±§X5}º™ÛXMòh=_ÙXMW8cæ;³±ºÉ¦{øä$ßLv”y´ù&ñ&JiµÙFP%Ù{½%¾3«ù÷ÎVg6V×ۋUffµa>®˜‰71 ¬² ¤Ðr‰P½ÅWf«ŒW‘áʪX¼*‡Æ9E üÏJ~òRŠH2ʶ¹›f̳·duf7”®¶¸ô¼:%0Á¹¸r%˜bϙ‰5æ‰ã kgx– :-Îm¬&—ÇÎm¬fÛ@”?8]ó=ÀÌ!Û`0 ™ÙÐzÍғ¼63Úƀy^›™¸0N8ÊÉqn3;­2íY‡Ø/UNé6ÃQR‘‹±°S +6bádæ”ä\ )îHᖢ.6ÁšÜ–,DÎòIÅॡ¯ƒ ›⛭ÎlF“ð±“o‚"É&ß$§“øä¹ _(ôtÏ R"Q^I™CLR®/ÀY±*¼59¥,ß+§÷7÷[T1ð=Vh19Wì:§ÇRz˒‹Û<¢¶T1˜vOÃAS©Ÿum;Ý»½÷ôQw¶—UՖô Õ0¢ñ|ÔŽÚ î‡ÇϸeCáŠ;¨/ÍW¸âöwMϪ5½Ø±§Jër§Š§ˆ~n©Âu :jt°ú…lKf Á’iºÞ>kú­7ÏöË ñ}fpTض2û±Wƒ±mD?Ù# ö êj­œ¦ÖZW¶®í‘ã8˜v|gq #\Ò7  *TK|‹)Ípç¢!7v츋¡8áî.É"´gœGqD?ê>ùÍ× ÄÛh»Ìxçƒí©PnT5Nød&ÂTÙ~lHá|[hlÞk2ŽÑíÔ¼DfÐå: C÷æþÞÉ^¸îuÔêá~èÁ©îïÿ±ïíØýהocüÙ|ªÊ·‰|ñ–ÀW4¤F[Ý±‹G]¶‘–JãŠÑ9¦Åô€äiΫC¡F™šy®ãD4ŽºÔ©ì6)@kËèۜ&Qkî+U9ýÍç¼Q⒚vÓ~åUx ¬õËEZn(öâ Àƒqÿ±Ì+^+fßkäõc™g'}6êI#ëBÒÍ<1‚ƒr,]ÄÐkUrºu‹m»Æ ȸˆßî »¨²4¬ˆIÔÍÊáïÛqù£w¨‚Þ©¹8úÎ6JÉTøtÀ¨C(PMœ A"@i×Û#tí K £2½PՍ-¹µ|î~/ +±Uu:͟ä4Tîñ²ÒkÝ\æÆU¹ˆ9ê®Ómi¾œBdùA}-×TP˜£ƒ®»j¬É´­t –+÷4üSjD±GN$š‘tœ%iMöØô>Ø+$mgʦDÇd¶x +­ ¥béëÀ˜Ë‹C¸ß)$÷:!  ö˜8“¼ í©qaA +©@rÉJ¢xÓID"œŠkLRU™/ñåÚhզѡíXcO×õº0¸óÀ| àû2½L_ÂÎÝØí{…ž‰_¤?n! 4ei@ÿáߟȵªs;üñƒ` ZÚE[»‘U žð—)èñ¬˜ø‘Iáåy¥w¤Ü;ä9¢_ôñôD}£‰ü'ˆ`Öó|íž”%TÓâ Ê¿u°!yDÝsoð_x¯Ýrçþü$Ncè5¨ØK~_ëéÒÄӜ{Í÷—ýýB²©™¾+ý¯‚þ„»ûèUˆº”úûQ¡S8Ôàô‚KiáXÑ¡« *âñá/ »ÖLˆiÔŠ•]G~v5 +F—¾ ¨ïþ‰RnÎ×¥—Suÿ°œ‹ÐÏJ]©±"_Ü~S˜>n©25×Ç9~²¦j4—’q  —"·Ñ‡ãñu~ôˆðÀÞçûˆ~e]C¡BZHÉ ^n@—­ !í¬}jTÿ„—ÑÌØÌå%®<á8¦¤ê-&P12X(}[å¹GŠ …z‡˜àŒJäÞö]¸îô˜Cî ÜM%]Pvû*SγfyXdæ@wE™«g¼ð˜B6ŒX%ç\ŠöD¤tgžÝû‘ö-Jví%-æóÎÕÝi“Œ ÒÎ×ü8K¨È£CCõ ¯/ ö>ãIÂ+ú_!eÌ°'ä<œžÇˆ”ôYƒ~ÄY°Lj$/w<„Ç`泿JPPk +L/û€4:–‘Ÿ‹8s¶L‘z ŸÆa¸´ü ½A¯›úç)4ôKªäQ;õ%°Îι0÷qÿâAÖË­% Íý³AÇU<…ú.<7—!põXr©ñü†G¥8˜gyYùÉ÷<-ÿM‡bJ®Gΐ’ fæÓĜâwÍ-,ž™ÿÿß2²5&ð|ƒßcp`¼fÚþùx󯛿bN+vendstream endobj -543 0 obj<>/XObject<<>>>>>>endobj -544 0 obj<>stream -xEÍNÃ0„ï~Š9)uçÇɱ "¨ä“BBmÈÛ³©ÐZ{Ï·³{a‚— þ›ë ¨²2ƒ*%œAËâ«CI$9Îì^&È÷×;T)âº%w^(èæú/ Ï;Ýåç!`jzëAïÅÙ¯ég‰ðÝOž‚¬ó>Ô¯ÃêLíM„„ 2Ô~Sçnö!‚Bò;ýÆUqKŽ³”Y))~w›Ê™ËlÆ0,8úwÓà4ì4ú•ÞoÐ^‰rÅß6ÃÃô¹8Ûõ”ölÏf¤-ë±Á“õarËJ§*å*/èf"eºJšØ/—é`Œendstream +577 0 obj<>/XObject<<>>>>/Annots 437 0 R>>endobj +578 0 obj<>stream +x¥WÛnÛF}÷W úäËDJHQTIãDEš¨Ý @^VäRښä2KÒ*ÿ¾g–Ôµn H,{¹Ë™33gά¾Þ¸Î< Ó‡Ù’‹Óù”¢¹OFRvãÙGE>!%ÞqqèøqÿöƋfŽGaè;3*ȟN4¬rZ_ŸgŽK¡9šÌ"üíã§÷5qahêxPžVlè|Ý¹ wýY»{¶or±{¾Æîdâ„gï2 É$³k@îœQz.>á2˜Áh¿².ÏÖ؝1ÜÓ®?óØìðnà‡GKüîùº  b§w£9°H¨uëÎ`¨_òpØõÝ)NvÏ×)pڝÆìhy2™òiכº(]ðÎMù°²~Ï֜áàb÷|]ŸÉÐ[âwÏ×Ø BökýØݳ5vÃGܝøŽVM-(+'ʏBKX™ Þ;[ruûƒ¼÷*¾yq7GE2Î@ñp6q¼(¤8µÜv)Nn#‡VF=é?;z­«Î¨í®Ñ{•È²–$ʔީºÑ¦û>þæf4Øû®„Sغ=¾G_ü©G¾ëz4æ_ÚtGë?Ë'™ëJššzSnoêö‡ô¸óSÕCq´ÙþxíЛ#Ep·Ö…¤Z·&‘”èT’ªi#j™’.ûW€¼ù-ãwbZ|øLŸ÷÷‹ñç—8Ùì4vÁýގ*ªœ«†$Q6Hqįoî_¿ÃˋWË÷Ëø3¸@wËøÛõšî>ÞӂV‹ûxùúáýâžV÷«ë7­ç³ìý¦¤ZÎdLe#TŽÙïT²C*.±‰'ìŠM–¨úO)¶]6Âü¥X"dI«\ “Ç´nˆîˆ^iHN9¢_äúžç½ÀFô°^\è3ÈV#‘yJ;ñ$AºDª'&?¤ â$þŸðE®Ë­-¬œ˜ð’TF¥†Nî cnôÁIß"¶.9v™®3Æ ¢ó/é¸zõÙÜ\A¢‘…ü?Ûâ¾óOº~jñeO̍„䔪܎8Jpaaá&Z–èÛR6gbÆÿ·ÎB~M¥Mßp´l¨FåR*DÙqã°0S®›¿5@%ÐrC×IaòŽRÑYÙØË ‰Ш@­ ²%jŒHñäš6¯Ðy^¡om7:Ñy?êb%L +¾óŒà^Å)?´*ٕêk+!|hAü$ì²&$tˆ8ðàí-¸HmE¢Ÿu>${Væ²d(=Cï²áºêØ. Nj=ʊÕBçO=”8Ô´%”=ïzdÏÔ‚•2Súý ŽŽë@!OŠˆ„b@ÎÀåkÕürËÁ«Ås•‹šk’©Da™K ]ºêüÓ\â){Væ»s´Pʝ€Khß`èlÔòp¥·«÷ƒØ\&Jä9ÏDÊZPÂd¯vj‚{šÖ×å^kZ72ÃPú$ò'ÞF˜Æ²N•6æ7jMPaƒ¥ÇiÒ Èq¼!ÓzÐ@V|-Ûb48]Iͪ ³/¥J4ÉNQ 7?±Â%r#EÚ!••Â(q—¨{Ú æpYW­¸¨BleÏN  LTå0úؽ®Æ Ü#‘¥O LèÙºá鄳%¹®Á›ã½é2Ç\íÃME`ö#LÛ'¹*Tc;ì®[Œ‚A €ü‘ÃÇ«n¾u[¡ÉÑ4Y.ÿT<p÷׬—ÈM¦¶m¯#dœ-Ž¯¿»$ƒ4Äë.ј7LȲ̸lŒ‡Làë–ã=̒ ¦ãRê^“^0jj¾Užn¢T©ä4@*9͎KÔ'þÀœ¦5–5¼¸ý@žj…+)&ûïÚ¿S½‡}n%œd¾‹º–‚ÞÂ)‘¦(ÔeˆV +K¹§L +¸Ôô“ˆ]íE÷L0[·9÷'¼ %ø?Üи‹Pì)Ï¥Ò4"| µjÃE»ÅuxÄ÷wß:âK¿çn‰Óȉ ¿'\|Ã7‡I„ëe8×ܽ‡û&¾ùíæ/Ì«xendstream endobj -545 0 obj<>endobj -546 0 obj<>endobj -547 0 obj<>endobj -548 0 obj<>endobj -549 0 obj<>endobj -550 0 obj<>endobj -551 0 obj<>endobj -552 0 obj<>endobj -553 0 obj<>endobj -554 0 obj<>endobj -555 0 obj<>endobj -556 0 obj<>endobj -557 0 obj<>endobj -558 0 obj<>endobj -559 0 obj<>endobj -560 0 obj<>endobj -561 0 obj<>endobj -562 0 obj<>endobj -563 0 obj<>endobj -564 0 obj<>endobj -565 0 obj<>endobj -566 0 obj<>endobj -567 0 obj<>endobj -568 0 obj<>endobj -569 0 obj<>endobj -570 0 obj<>endobj -571 0 obj<>endobj -572 0 obj<>endobj -573 0 obj<>endobj -574 0 obj<>endobj -575 0 obj<>endobj -576 0 obj<>endobj -577 0 obj<>endobj -578 0 obj<>endobj -579 0 obj<>endobj -580 0 obj<>endobj -581 0 obj<>endobj -582 0 obj<>endobj -583 0 obj<>endobj -584 0 obj<>endobj -585 0 obj<>endobj -586 0 obj<>endobj -587 0 obj<>endobj -588 0 obj<>endobj -589 0 obj<>endobj -590 0 obj<>endobj -591 0 obj<>endobj -592 0 obj<>endobj -593 0 obj<>endobj -594 0 obj<>endobj -595 0 obj<>endobj -596 0 obj<>endobj -597 0 obj<>endobj -598 0 obj<>endobj -599 0 obj<>endobj -600 0 obj<>endobj -601 0 obj<>endobj -602 0 obj<>endobj -603 0 obj<>endobj -604 0 obj<>endobj -605 0 obj<>endobj -606 0 obj<>endobj -607 0 obj<>endobj -608 0 obj<>endobj -609 0 obj<>endobj -610 0 obj<.)/Dest[535 0 R/XYZ 0 745 0]/Prev 609 0 R>>endobj -611 0 obj<>endobj -612 0 obj<>endobj -613 0 obj<>endobj -614 0 obj<>endobj -615 0 obj<>endobj -616 0 obj<>endobj -617 0 obj<>endobj -618 0 obj<>endobj -619 0 obj<>endobj -620 0 obj<>1<>3<>7<>9<>14<>20<>23<>25<>]>>>>endobj +579 0 obj<>endobj +580 0 obj<>endobj +581 0 obj<>endobj +582 0 obj<>endobj +583 0 obj<>endobj +584 0 obj<>endobj +585 0 obj<>endobj +586 0 obj<>endobj +587 0 obj<>endobj +588 0 obj<>endobj +589 0 obj<>endobj +590 0 obj<>endobj +591 0 obj<>endobj +592 0 obj<>endobj +593 0 obj<>endobj +594 0 obj<>endobj +595 0 obj<>endobj +596 0 obj<>endobj +597 0 obj<>endobj +598 0 obj<>endobj +599 0 obj<>endobj +600 0 obj<>endobj +601 0 obj<>endobj +602 0 obj<>endobj +603 0 obj<>endobj +604 0 obj<>endobj +605 0 obj<>endobj +606 0 obj<>endobj +607 0 obj<>endobj +608 0 obj<>endobj +609 0 obj<>endobj +610 0 obj<>endobj +611 0 obj<>endobj +612 0 obj<>endobj +613 0 obj<>endobj +614 0 obj<>endobj +615 0 obj<>endobj +616 0 obj<>endobj +617 0 obj<>endobj +618 0 obj<>endobj +619 0 obj<>endobj +620 0 obj<>endobj +621 0 obj<>endobj +622 0 obj<>endobj +623 0 obj<>endobj +624 0 obj<>endobj +625 0 obj<>endobj +626 0 obj<>endobj +627 0 obj<>endobj +628 0 obj<>endobj +629 0 obj<>endobj +630 0 obj<>endobj +631 0 obj<>endobj +632 0 obj<>endobj +633 0 obj<>endobj +634 0 obj<>endobj +635 0 obj<>endobj +636 0 obj<>endobj +637 0 obj<>endobj +638 0 obj<>endobj +639 0 obj<>endobj +640 0 obj<>endobj +641 0 obj<>endobj +642 0 obj<>endobj +643 0 obj<>endobj +644 0 obj<>endobj +645 0 obj<>endobj +646 0 obj<>endobj +647 0 obj<>endobj +648 0 obj<>endobj +649 0 obj<>endobj +650 0 obj<>endobj +651 0 obj<>endobj +652 0 obj<>endobj +653 0 obj<. Without Privoxy the page loads fine.)/Dest[571 0 R/XYZ 0 457 0]/Prev 652 0 R/Next 654 0 R>>endobj +654 0 obj<>endobj +655 0 obj<>endobj +656 0 obj<>endobj +657 0 obj<>endobj +658 0 obj<>endobj +659 0 obj<>endobj +660 0 obj<>endobj +661 0 obj<>endobj +662 0 obj<>endobj +663 0 obj<>endobj +664 0 obj<>endobj +665 0 obj<>endobj +666 0 obj<>endobj +667 0 obj<>endobj +668 0 obj<>endobj +669 0 obj<>endobj +670 0 obj<>1<>3<>6<>8<>12<>16<>19<>20<>]>>>>endobj xref -0 621 +0 671 0000000000 65535 f 0000000015 00000 n -0000000257 00000 n -0000001823 00000 n -0000001897 00000 n -0000001976 00000 n -0000002054 00000 n -0000002131 00000 n -0000002210 00000 n -0000002286 00000 n -0000002367 00000 n -0000002426 00000 n -0000002527 00000 n -0000002580 00000 n -0000002665 00000 n -0000002719 00000 n -0000002804 00000 n -0000002879 00000 n -0000002963 00000 n -0000003021 00000 n -0000003106 00000 n -0000003208 00000 n -0000003309 00000 n -0000003374 00000 n -0000003475 00000 n -0000003577 00000 n -0000003679 00000 n -0000003781 00000 n -0000003883 00000 n -0000003985 00000 n -0000004087 00000 n -0000004189 00000 n -0000004291 00000 n -0000004393 00000 n -0000004494 00000 n -0000004596 00000 n -0000004698 00000 n -0000004800 00000 n -0000004902 00000 n -0000005004 00000 n -0000005106 00000 n -0000005207 00000 n -0000005309 00000 n -0000005411 00000 n -0000005513 00000 n -0000005615 00000 n -0000005717 00000 n -0000005819 00000 n -0000005921 00000 n -0000006023 00000 n -0000006125 00000 n -0000006227 00000 n -0000006329 00000 n -0000006431 00000 n -0000006533 00000 n -0000006635 00000 n -0000006737 00000 n -0000006839 00000 n -0000006941 00000 n -0000007043 00000 n -0000007145 00000 n -0000007246 00000 n -0000007348 00000 n -0000007450 00000 n -0000007552 00000 n -0000007654 00000 n -0000007755 00000 n -0000007855 00000 n -0000007955 00000 n -0000008286 00000 n -0000008387 00000 n -0000008489 00000 n -0000008591 00000 n -0000008693 00000 n -0000008795 00000 n -0000008897 00000 n -0000008999 00000 n -0000009101 00000 n -0000009203 00000 n -0000009305 00000 n -0000009407 00000 n -0000009509 00000 n -0000009611 00000 n -0000009712 00000 n -0000009814 00000 n -0000009916 00000 n -0000010018 00000 n -0000010120 00000 n -0000010222 00000 n -0000010324 00000 n -0000010426 00000 n -0000010528 00000 n -0000010630 00000 n -0000010732 00000 n -0000010834 00000 n -0000010935 00000 n -0000011037 00000 n -0000011139 00000 n -0000011241 00000 n -0000011343 00000 n -0000011445 00000 n -0000011547 00000 n -0000011650 00000 n -0000011753 00000 n -0000012011 00000 n -0000012078 00000 n -0000012165 00000 n -0000012224 00000 n -0000012311 00000 n -0000012390 00000 n -0000012477 00000 n -0000012535 00000 n -0000012622 00000 n -0000012680 00000 n -0000012766 00000 n -0000012834 00000 n -0000012921 00000 n -0000012988 00000 n -0000013075 00000 n -0000013164 00000 n -0000013251 00000 n +0000000254 00000 n +0000001820 00000 n +0000001894 00000 n +0000001973 00000 n +0000002049 00000 n +0000002130 00000 n +0000002214 00000 n +0000002302 00000 n +0000002360 00000 n +0000002460 00000 n +0000002513 00000 n +0000002598 00000 n +0000002652 00000 n +0000002737 00000 n +0000002812 00000 n +0000002897 00000 n +0000002955 00000 n +0000003040 00000 n +0000003142 00000 n +0000003200 00000 n +0000003301 00000 n +0000003403 00000 n +0000003505 00000 n +0000003607 00000 n +0000003709 00000 n +0000003811 00000 n +0000003913 00000 n +0000004015 00000 n +0000004117 00000 n +0000004219 00000 n +0000004321 00000 n +0000004422 00000 n +0000004524 00000 n +0000004626 00000 n +0000004728 00000 n +0000004830 00000 n +0000004932 00000 n +0000005034 00000 n +0000005136 00000 n +0000005238 00000 n +0000005339 00000 n +0000005441 00000 n +0000005543 00000 n +0000005645 00000 n +0000005747 00000 n +0000005849 00000 n +0000005951 00000 n +0000006053 00000 n +0000006155 00000 n +0000006257 00000 n +0000006359 00000 n +0000006461 00000 n +0000006563 00000 n +0000006665 00000 n +0000006767 00000 n +0000006869 00000 n +0000006971 00000 n +0000007073 00000 n +0000007175 00000 n +0000007277 00000 n +0000007379 00000 n +0000007481 00000 n +0000007582 00000 n +0000007684 00000 n +0000007786 00000 n +0000007888 00000 n +0000007990 00000 n +0000008092 00000 n +0000008194 00000 n +0000008296 00000 n +0000008398 00000 n +0000008500 00000 n +0000008602 00000 n +0000008704 00000 n +0000008806 00000 n +0000008908 00000 n +0000009010 00000 n +0000009112 00000 n +0000009214 00000 n +0000009316 00000 n +0000009417 00000 n +0000009517 00000 n +0000009617 00000 n +0000010074 00000 n +0000010175 00000 n +0000010277 00000 n +0000010379 00000 n +0000010481 00000 n +0000010583 00000 n +0000010685 00000 n +0000010787 00000 n +0000010889 00000 n +0000010991 00000 n +0000011093 00000 n +0000011195 00000 n +0000011297 00000 n +0000011399 00000 n +0000011501 00000 n +0000011603 00000 n +0000011706 00000 n +0000011809 00000 n +0000011912 00000 n +0000012015 00000 n +0000012118 00000 n +0000012220 00000 n +0000012323 00000 n +0000012426 00000 n +0000012529 00000 n +0000012632 00000 n +0000012735 00000 n +0000012837 00000 n +0000012940 00000 n +0000013043 00000 n +0000013277 00000 n 0000013344 00000 n 0000013431 00000 n -0000013486 00000 n -0000013572 00000 n -0000013627 00000 n -0000013714 00000 n -0000013765 00000 n -0000013850 00000 n -0000013963 00000 n -0000014021 00000 n -0000014108 00000 n -0000014151 00000 n -0000014238 00000 n -0000014283 00000 n -0000014370 00000 n -0000014411 00000 n -0000014514 00000 n -0000014582 00000 n -0000014669 00000 n -0000014772 00000 n -0000014833 00000 n -0000014920 00000 n -0000014969 00000 n -0000015045 00000 n -0000015132 00000 n -0000015193 00000 n -0000015280 00000 n -0000015341 00000 n -0000015426 00000 n -0000015507 00000 n -0000015594 00000 n -0000015668 00000 n -0000015755 00000 n -0000015812 00000 n -0000015863 00000 n -0000015950 00000 n -0000016000 00000 n -0000016087 00000 n -0000016137 00000 n -0000016223 00000 n -0000016299 00000 n -0000016386 00000 n -0000016434 00000 n -0000016521 00000 n -0000016578 00000 n -0000016636 00000 n -0000016723 00000 n -0000016764 00000 n -0000016851 00000 n -0000016884 00000 n -0000016975 00000 n -0000017061 00000 n -0000017123 00000 n -0000017210 00000 n -0000017302 00000 n -0000017388 00000 n -0000017438 00000 n -0000017524 00000 n -0000017565 00000 n -0000017652 00000 n -0000017697 00000 n -0000017784 00000 n -0000017834 00000 n -0000017921 00000 n -0000017997 00000 n -0000018084 00000 n -0000018160 00000 n -0000018246 00000 n -0000018287 00000 n -0000018374 00000 n -0000018420 00000 n -0000018507 00000 n -0000018565 00000 n -0000018652 00000 n -0000018695 00000 n -0000018781 00000 n -0000018850 00000 n -0000018937 00000 n -0000019066 00000 n -0000019116 00000 n -0000019203 00000 n -0000019279 00000 n -0000019366 00000 n -0000019442 00000 n -0000019528 00000 n -0000019585 00000 n -0000019671 00000 n -0000019728 00000 n -0000019815 00000 n -0000019869 00000 n -0000019956 00000 n -0000020025 00000 n -0000020112 00000 n -0000020185 00000 n -0000020261 00000 n -0000020348 00000 n -0000020401 00000 n -0000020488 00000 n -0000020542 00000 n -0000020628 00000 n -0000020672 00000 n -0000020759 00000 n -0000020808 00000 n -0000020894 00000 n -0000020934 00000 n -0000021021 00000 n -0000021090 00000 n -0000021177 00000 n -0000021221 00000 n -0000021308 00000 n -0000021356 00000 n -0000021443 00000 n -0000021532 00000 n -0000021580 00000 n -0000021667 00000 n -0000021715 00000 n -0000021801 00000 n +0000013490 00000 n +0000013577 00000 n +0000013656 00000 n +0000013743 00000 n +0000013801 00000 n +0000013888 00000 n +0000013956 00000 n +0000014043 00000 n +0000014110 00000 n +0000014197 00000 n +0000014286 00000 n +0000014373 00000 n +0000014466 00000 n +0000014552 00000 n +0000014607 00000 n +0000014693 00000 n +0000014748 00000 n +0000014834 00000 n +0000014885 00000 n +0000014971 00000 n +0000015029 00000 n +0000015116 00000 n +0000015159 00000 n +0000015246 00000 n +0000015367 00000 n +0000015412 00000 n +0000015499 00000 n +0000015602 00000 n +0000015670 00000 n +0000015757 00000 n +0000015860 00000 n +0000015909 00000 n +0000015970 00000 n +0000016057 00000 n +0000016133 00000 n +0000016220 00000 n +0000016296 00000 n +0000016382 00000 n +0000016443 00000 n +0000016530 00000 n +0000016611 00000 n +0000016698 00000 n +0000016772 00000 n +0000016859 00000 n +0000016924 00000 n +0000017027 00000 n +0000017129 00000 n +0000017180 00000 n +0000017266 00000 n +0000017316 00000 n +0000017403 00000 n +0000017479 00000 n +0000017566 00000 n +0000017614 00000 n +0000017701 00000 n +0000017744 00000 n +0000017831 00000 n +0000017872 00000 n +0000017957 00000 n +0000018036 00000 n +0000018121 00000 n +0000018188 00000 n +0000018272 00000 n +0000018369 00000 n +0000018412 00000 n +0000018499 00000 n +0000018578 00000 n +0000018664 00000 n +0000018731 00000 n +0000018818 00000 n +0000018861 00000 n +0000018947 00000 n +0000018996 00000 n +0000019087 00000 n +0000019174 00000 n +0000019236 00000 n +0000019323 00000 n +0000019385 00000 n +0000019470 00000 n +0000019562 00000 n +0000019649 00000 n +0000019741 00000 n +0000019826 00000 n +0000019876 00000 n +0000019962 00000 n +0000020003 00000 n +0000020090 00000 n +0000020135 00000 n +0000020222 00000 n +0000020272 00000 n +0000020359 00000 n +0000020435 00000 n +0000020522 00000 n +0000020563 00000 n +0000020650 00000 n +0000020691 00000 n +0000020776 00000 n +0000020822 00000 n +0000020909 00000 n +0000020967 00000 n +0000021054 00000 n +0000021097 00000 n +0000021184 00000 n +0000021253 00000 n +0000021340 00000 n +0000021409 00000 n +0000021495 00000 n +0000021545 00000 n +0000021632 00000 n +0000021708 00000 n +0000021795 00000 n 0000021852 00000 n -0000021939 00000 n -0000021988 00000 n -0000022075 00000 n -0000022114 00000 n -0000022201 00000 n -0000022252 00000 n -0000022339 00000 n -0000022408 00000 n -0000022495 00000 n -0000022598 00000 n -0000022711 00000 n -0000022796 00000 n -0000022885 00000 n -0000022929 00000 n -0000023015 00000 n -0000023091 00000 n -0000023178 00000 n -0000023222 00000 n -0000023309 00000 n -0000023385 00000 n -0000023471 00000 n -0000023536 00000 n -0000023622 00000 n -0000023679 00000 n -0000023719 00000 n -0000023806 00000 n -0000023854 00000 n -0000023941 00000 n +0000021938 00000 n +0000021995 00000 n +0000022082 00000 n +0000022136 00000 n +0000022223 00000 n +0000022292 00000 n +0000022378 00000 n +0000022428 00000 n +0000022514 00000 n +0000022723 00000 n +0000022799 00000 n +0000022886 00000 n +0000022939 00000 n +0000023026 00000 n +0000023080 00000 n +0000023167 00000 n +0000023211 00000 n +0000023298 00000 n +0000023347 00000 n +0000023433 00000 n +0000023473 00000 n +0000023559 00000 n +0000023628 00000 n +0000023715 00000 n +0000023759 00000 n +0000023846 00000 n +0000023894 00000 n 0000023981 00000 n -0000024068 00000 n -0000024116 00000 n -0000024203 00000 n -0000024261 00000 n -0000024347 00000 n -0000024390 00000 n -0000024477 00000 n -0000024535 00000 n -0000024622 00000 n -0000024672 00000 n -0000024759 00000 n -0000024840 00000 n -0000024890 00000 n -0000024977 00000 n -0000025080 00000 n -0000025151 00000 n -0000025238 00000 n -0000025313 00000 n -0000025399 00000 n -0000025448 00000 n -0000025507 00000 n -0000025594 00000 n -0000025638 00000 n -0000025725 00000 n -0000025801 00000 n -0000025888 00000 n -0000025929 00000 n -0000025977 00000 n -0000026064 00000 n -0000026128 00000 n -0000026214 00000 n -0000026260 00000 n -0000026347 00000 n -0000026404 00000 n -0000026491 00000 n -0000026540 00000 n -0000026579 00000 n -0000026666 00000 n -0000026721 00000 n -0000026807 00000 n -0000026866 00000 n -0000026952 00000 n -0000027023 00000 n -0000027109 00000 n -0000027163 00000 n -0000027250 00000 n -0000027308 00000 n -0000027394 00000 n -0000027437 00000 n -0000027523 00000 n -0000027720 00000 n -0000027806 00000 n -0000027900 00000 n -0000027986 00000 n -0000028063 00000 n -0000028149 00000 n -0000028216 00000 n -0000028302 00000 n -0000028369 00000 n -0000028455 00000 n -0000028514 00000 n -0000028600 00000 n -0000028659 00000 n -0000028743 00000 n -0000028872 00000 n -0000028944 00000 n -0000029030 00000 n -0000029055 00000 n -0000029103 00000 n -0000029190 00000 n -0000029234 00000 n -0000029321 00000 n -0000029392 00000 n -0000029479 00000 n -0000029543 00000 n -0000029629 00000 n -0000029700 00000 n -0000029787 00000 n -0000029856 00000 n -0000029942 00000 n -0000029987 00000 n -0000030073 00000 n -0000030119 00000 n -0000030205 00000 n -0000030251 00000 n -0000030335 00000 n -0000030424 00000 n -0000030479 00000 n -0000030566 00000 n -0000030656 00000 n -0000030742 00000 n -0000030830 00000 n -0000030917 00000 n -0000031007 00000 n -0000031093 00000 n -0000031192 00000 n -0000031279 00000 n -0000031491 00000 n -0000031578 00000 n -0000031670 00000 n -0000031757 00000 n -0000031841 00000 n -0000031928 00000 n -0000032018 00000 n -0000032105 00000 n -0000032302 00000 n +0000024028 00000 n +0000024115 00000 n +0000024163 00000 n +0000024250 00000 n +0000024301 00000 n +0000024388 00000 n +0000024437 00000 n +0000024524 00000 n +0000024563 00000 n +0000024650 00000 n +0000024701 00000 n +0000024788 00000 n +0000024857 00000 n +0000024944 00000 n +0000025045 00000 n +0000025198 00000 n +0000025311 00000 n +0000025397 00000 n +0000025441 00000 n +0000025528 00000 n +0000025604 00000 n +0000025690 00000 n +0000025734 00000 n +0000025821 00000 n +0000025897 00000 n +0000025984 00000 n +0000026049 00000 n +0000026136 00000 n +0000026249 00000 n +0000026335 00000 n +0000026408 00000 n +0000026448 00000 n +0000026535 00000 n +0000026583 00000 n +0000026670 00000 n +0000026710 00000 n +0000026797 00000 n +0000026845 00000 n +0000026932 00000 n +0000026990 00000 n +0000027076 00000 n +0000027119 00000 n +0000027206 00000 n +0000027264 00000 n +0000027351 00000 n +0000027401 00000 n +0000027488 00000 n +0000027538 00000 n +0000027625 00000 n +0000027728 00000 n +0000027799 00000 n +0000027885 00000 n +0000027960 00000 n +0000028045 00000 n +0000028158 00000 n +0000028217 00000 n +0000028304 00000 n +0000028348 00000 n +0000028435 00000 n +0000028511 00000 n +0000028598 00000 n +0000028639 00000 n +0000028695 00000 n +0000028782 00000 n +0000028830 00000 n +0000028917 00000 n +0000028981 00000 n +0000029068 00000 n +0000029114 00000 n +0000029200 00000 n +0000029257 00000 n +0000029343 00000 n +0000029382 00000 n +0000029469 00000 n +0000029534 00000 n +0000029589 00000 n +0000029675 00000 n +0000029734 00000 n +0000029820 00000 n +0000029891 00000 n +0000029977 00000 n +0000030031 00000 n +0000030118 00000 n +0000030176 00000 n +0000030262 00000 n +0000030305 00000 n +0000030392 00000 n +0000030589 00000 n +0000030675 00000 n +0000030769 00000 n +0000030855 00000 n +0000030932 00000 n +0000031018 00000 n +0000031085 00000 n +0000031171 00000 n +0000031238 00000 n +0000031324 00000 n +0000031383 00000 n +0000031469 00000 n +0000031528 00000 n +0000031614 00000 n +0000031686 00000 n +0000031772 00000 n +0000031901 00000 n +0000031949 00000 n +0000032036 00000 n +0000032080 00000 n +0000032167 00000 n +0000032238 00000 n +0000032324 00000 n 0000032388 00000 n -0000032479 00000 n -0000032564 00000 n -0000032655 00000 n -0000032740 00000 n -0000032802 00000 n -0000032887 00000 n -0000033008 00000 n -0000033083 00000 n -0000033170 00000 n -0000033195 00000 n -0000033256 00000 n -0000033343 00000 n -0000033411 00000 n -0000033498 00000 n -0000033565 00000 n -0000033652 00000 n -0000033711 00000 n -0000033798 00000 n -0000033877 00000 n -0000033964 00000 n -0000034022 00000 n -0000034109 00000 n -0000034167 00000 n -0000034253 00000 n -0000034321 00000 n -0000034408 00000 n -0000034475 00000 n -0000034562 00000 n -0000034651 00000 n -0000034737 00000 n -0000034830 00000 n -0000034915 00000 n -0000035020 00000 n -0000035054 00000 n -0000035088 00000 n -0000036496 00000 n -0000036539 00000 n -0000036582 00000 n -0000036625 00000 n -0000036668 00000 n -0000036711 00000 n -0000036754 00000 n -0000036797 00000 n -0000036840 00000 n -0000036883 00000 n -0000036926 00000 n -0000036969 00000 n -0000037012 00000 n -0000037055 00000 n -0000037098 00000 n -0000037141 00000 n -0000037184 00000 n -0000037227 00000 n -0000037270 00000 n -0000037313 00000 n -0000037356 00000 n -0000037399 00000 n +0000032475 00000 n +0000032546 00000 n +0000032633 00000 n +0000032702 00000 n +0000032788 00000 n +0000032833 00000 n +0000032920 00000 n +0000032966 00000 n +0000033053 00000 n +0000033134 00000 n +0000033185 00000 n +0000033272 00000 n +0000033297 00000 n +0000033388 00000 n +0000033475 00000 n +0000033566 00000 n +0000033653 00000 n +0000033686 00000 n +0000033776 00000 n +0000033863 00000 n +0000033953 00000 n +0000034040 00000 n +0000034128 00000 n +0000034215 00000 n +0000034305 00000 n +0000034392 00000 n +0000034491 00000 n +0000034578 00000 n +0000034677 00000 n +0000034762 00000 n +0000034974 00000 n +0000035061 00000 n +0000035153 00000 n +0000035240 00000 n +0000035324 00000 n +0000035411 00000 n +0000035501 00000 n +0000035587 00000 n +0000035784 00000 n +0000035871 00000 n +0000035962 00000 n +0000036048 00000 n +0000036139 00000 n +0000036226 00000 n +0000036288 00000 n +0000036375 00000 n +0000036450 00000 n +0000036536 00000 n +0000036673 00000 n +0000036734 00000 n +0000036821 00000 n +0000036889 00000 n +0000036976 00000 n +0000037043 00000 n +0000037130 00000 n +0000037189 00000 n +0000037276 00000 n +0000037355 00000 n 0000037442 00000 n -0000037485 00000 n -0000037528 00000 n -0000037571 00000 n -0000037614 00000 n -0000037657 00000 n -0000037700 00000 n -0000037743 00000 n -0000037786 00000 n -0000037829 00000 n -0000037872 00000 n -0000037915 00000 n -0000037958 00000 n -0000038001 00000 n -0000038044 00000 n -0000038087 00000 n -0000038130 00000 n -0000038173 00000 n -0000038216 00000 n -0000038259 00000 n -0000038302 00000 n -0000038345 00000 n -0000038388 00000 n -0000038431 00000 n -0000038474 00000 n -0000038517 00000 n -0000038560 00000 n -0000038603 00000 n -0000038646 00000 n -0000038689 00000 n -0000038732 00000 n -0000038775 00000 n -0000038818 00000 n -0000038861 00000 n -0000038904 00000 n -0000038947 00000 n -0000038990 00000 n -0000039033 00000 n -0000039076 00000 n -0000039119 00000 n -0000039162 00000 n -0000039205 00000 n -0000039248 00000 n -0000039291 00000 n -0000039334 00000 n -0000039377 00000 n -0000039420 00000 n -0000039463 00000 n -0000039506 00000 n -0000039549 00000 n -0000039592 00000 n -0000039635 00000 n -0000039678 00000 n -0000039721 00000 n -0000039764 00000 n -0000039807 00000 n -0000039850 00000 n -0000039893 00000 n -0000039936 00000 n -0000040199 00000 n -0000040387 00000 n -0000041377 00000 n -0000041565 00000 n -0000048461 00000 n -0000048650 00000 n -0000054014 00000 n -0000054203 00000 n -0000056409 00000 n -0000056608 00000 n -0000058903 00000 n -0000059101 00000 n -0000061069 00000 n -0000061249 00000 n -0000061952 00000 n -0000062141 00000 n -0000064014 00000 n -0000064194 00000 n -0000065135 00000 n -0000065324 00000 n -0000067329 00000 n -0000067527 00000 n -0000070054 00000 n -0000070261 00000 n -0000072590 00000 n -0000072797 00000 n -0000075065 00000 n -0000075245 00000 n -0000076224 00000 n -0000076422 00000 n -0000078267 00000 n -0000078456 00000 n -0000080490 00000 n -0000080679 00000 n -0000082763 00000 n -0000082952 00000 n -0000084986 00000 n -0000085175 00000 n -0000086898 00000 n -0000087078 00000 n -0000087425 00000 n -0000087614 00000 n -0000089672 00000 n -0000089846 00000 n -0000091725 00000 n -0000091899 00000 n -0000092773 00000 n -0000092971 00000 n -0000094883 00000 n -0000095063 00000 n -0000095609 00000 n -0000095807 00000 n -0000097762 00000 n -0000097918 00000 n -0000098237 00000 n -0000098292 00000 n -0000098391 00000 n -0000098544 00000 n -0000098667 00000 n -0000098807 00000 n -0000098955 00000 n -0000099096 00000 n -0000099249 00000 n -0000099412 00000 n -0000099588 00000 n -0000099754 00000 n -0000099880 00000 n -0000100026 00000 n -0000100153 00000 n -0000100291 00000 n -0000100429 00000 n -0000100598 00000 n -0000100735 00000 n -0000100910 00000 n -0000101058 00000 n -0000101183 00000 n -0000101313 00000 n -0000101439 00000 n -0000101610 00000 n -0000101779 00000 n -0000101949 00000 n -0000102098 00000 n -0000102277 00000 n -0000102464 00000 n -0000102617 00000 n -0000102772 00000 n -0000102952 00000 n -0000103106 00000 n -0000103318 00000 n -0000103460 00000 n -0000103619 00000 n -0000103806 00000 n -0000103935 00000 n -0000104083 00000 n -0000104254 00000 n -0000104446 00000 n -0000104602 00000 n -0000104739 00000 n -0000104864 00000 n -0000104993 00000 n -0000105130 00000 n -0000105309 00000 n -0000105471 00000 n -0000105621 00000 n -0000105803 00000 n -0000105949 00000 n -0000106138 00000 n -0000106277 00000 n -0000106432 00000 n -0000106617 00000 n -0000106788 00000 n -0000106943 00000 n -0000107092 00000 n -0000107251 00000 n -0000107426 00000 n -0000107593 00000 n -0000107770 00000 n -0000107937 00000 n -0000108128 00000 n -0000108386 00000 n -0000108569 00000 n -0000108764 00000 n -0000108862 00000 n -0000108973 00000 n -0000109093 00000 n -0000109237 00000 n -0000109329 00000 n -0000109488 00000 n -0000109582 00000 n -0000109676 00000 n +0000037500 00000 n +0000037587 00000 n +0000037655 00000 n +0000037742 00000 n +0000037809 00000 n +0000037896 00000 n +0000037985 00000 n +0000038072 00000 n +0000038165 00000 n +0000038251 00000 n +0000038348 00000 n +0000038382 00000 n +0000038416 00000 n +0000040108 00000 n +0000040151 00000 n +0000040194 00000 n +0000040237 00000 n +0000040280 00000 n +0000040323 00000 n +0000040366 00000 n +0000040409 00000 n +0000040452 00000 n +0000040495 00000 n +0000040538 00000 n +0000040581 00000 n +0000040624 00000 n +0000040667 00000 n +0000040710 00000 n +0000040753 00000 n +0000040796 00000 n +0000040839 00000 n +0000040882 00000 n +0000040925 00000 n +0000040968 00000 n +0000041011 00000 n +0000041054 00000 n +0000041097 00000 n +0000041140 00000 n +0000041183 00000 n +0000041226 00000 n +0000041269 00000 n +0000041312 00000 n +0000041355 00000 n +0000041398 00000 n +0000041441 00000 n +0000041484 00000 n +0000041527 00000 n +0000041570 00000 n +0000041613 00000 n +0000041656 00000 n +0000041699 00000 n +0000041742 00000 n +0000041785 00000 n +0000041828 00000 n +0000041871 00000 n +0000041914 00000 n +0000041957 00000 n +0000042000 00000 n +0000042043 00000 n +0000042086 00000 n +0000042129 00000 n +0000042172 00000 n +0000042215 00000 n +0000042258 00000 n +0000042301 00000 n +0000042344 00000 n +0000042387 00000 n +0000042430 00000 n +0000042473 00000 n +0000042516 00000 n +0000042559 00000 n +0000042602 00000 n +0000042645 00000 n +0000042688 00000 n +0000042731 00000 n +0000042774 00000 n +0000042817 00000 n +0000042860 00000 n +0000042903 00000 n +0000042946 00000 n +0000042989 00000 n +0000043032 00000 n +0000043075 00000 n +0000043118 00000 n +0000043161 00000 n +0000043204 00000 n +0000043247 00000 n +0000043290 00000 n +0000043333 00000 n +0000043376 00000 n +0000043419 00000 n +0000043462 00000 n +0000043505 00000 n +0000043548 00000 n +0000043591 00000 n +0000043634 00000 n +0000043677 00000 n +0000043720 00000 n +0000043763 00000 n +0000043806 00000 n +0000043849 00000 n +0000043892 00000 n +0000043935 00000 n +0000043978 00000 n +0000044021 00000 n +0000044064 00000 n +0000044107 00000 n +0000044150 00000 n +0000044193 00000 n +0000044408 00000 n +0000044587 00000 n +0000045523 00000 n +0000045693 00000 n +0000055892 00000 n +0000056063 00000 n +0000061005 00000 n +0000061194 00000 n +0000064078 00000 n +0000064267 00000 n +0000067009 00000 n +0000067180 00000 n +0000068265 00000 n +0000068445 00000 n +0000071295 00000 n +0000071475 00000 n +0000072318 00000 n +0000072507 00000 n +0000075480 00000 n +0000075678 00000 n +0000078851 00000 n +0000079040 00000 n +0000081640 00000 n +0000081805 00000 n +0000082241 00000 n +0000082421 00000 n +0000085165 00000 n +0000085345 00000 n +0000088267 00000 n +0000088456 00000 n +0000091733 00000 n +0000091922 00000 n +0000093361 00000 n +0000093550 00000 n +0000096543 00000 n +0000096741 00000 n +0000099573 00000 n +0000099762 00000 n +0000101426 00000 n +0000101615 00000 n +0000103603 00000 n +0000103792 00000 n +0000105674 00000 n +0000105729 00000 n +0000105828 00000 n +0000105982 00000 n +0000106105 00000 n +0000106245 00000 n +0000106393 00000 n +0000106534 00000 n +0000106687 00000 n +0000106850 00000 n +0000107003 00000 n +0000107179 00000 n +0000107345 00000 n +0000107472 00000 n +0000107618 00000 n +0000107745 00000 n +0000107883 00000 n +0000108022 00000 n +0000108160 00000 n +0000108329 00000 n +0000108466 00000 n +0000108654 00000 n +0000108831 00000 n +0000108979 00000 n +0000109104 00000 n +0000109234 00000 n +0000109360 00000 n +0000109531 00000 n +0000109700 00000 n +0000109870 00000 n +0000110019 00000 n +0000110203 00000 n +0000110390 00000 n +0000110543 00000 n +0000110698 00000 n +0000110878 00000 n +0000111032 00000 n +0000111244 00000 n +0000111386 00000 n +0000111545 00000 n +0000111732 00000 n +0000111874 00000 n +0000112032 00000 n +0000112182 00000 n +0000112325 00000 n +0000112473 00000 n +0000112644 00000 n +0000112836 00000 n +0000112992 00000 n +0000113129 00000 n +0000113254 00000 n +0000113383 00000 n +0000113520 00000 n +0000113699 00000 n +0000113861 00000 n +0000114011 00000 n +0000114193 00000 n +0000114339 00000 n +0000114528 00000 n +0000114667 00000 n +0000114822 00000 n +0000115007 00000 n +0000115178 00000 n +0000115357 00000 n +0000115525 00000 n +0000115712 00000 n +0000115862 00000 n +0000116021 00000 n +0000116196 00000 n +0000116363 00000 n +0000116540 00000 n +0000116707 00000 n +0000116898 00000 n +0000117156 00000 n +0000117412 00000 n +0000117645 00000 n +0000117809 00000 n +0000117971 00000 n +0000118183 00000 n +0000118319 00000 n +0000118491 00000 n +0000118638 00000 n +0000118790 00000 n +0000118985 00000 n +0000119083 00000 n +0000119194 00000 n +0000119314 00000 n +0000119458 00000 n +0000119550 00000 n +0000119709 00000 n +0000119803 00000 n +0000119897 00000 n trailer -<]>> +<]>> startxref -109998 +120219 %%EOF diff --git a/doc/pdf/privoxy-user-manual.pdf b/doc/pdf/privoxy-user-manual.pdf index b0056d18..cba3056c 100644 Binary files a/doc/pdf/privoxy-user-manual.pdf and b/doc/pdf/privoxy-user-manual.pdf differ diff --git a/doc/source/GNUmakefile.in b/doc/source/GNUmakefile.in deleted file mode 100644 index 5565963a..00000000 --- a/doc/source/GNUmakefile.in +++ /dev/null @@ -1,419 +0,0 @@ -# Note: Makefile is built automatically from Makefile.in -# -# $Id: GNUmakefile.in,v 1.8 2002/09/26 22:51:16 hal9 Exp $ -# -# Location: doc/source/Makefile.in -# Purpose: Build documentation -# -# Written by and Copyright (C) 2002 the Privoxy -# team. http://www.privoxy.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. -# -# The GNU General Public License should be included with -# this file. If not, you can view it at -# http://www.gnu.org/copyleft/gpl.html -# or write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# - -############################################################################# -# Set make command correctly -############################################################################# -@SET_MAKE@ - -############################################################################# -# Version number (for RPM) -############################################################################# - -VERSION_MAJOR = @VERSION_MAJOR@ -VERSION_MINOR = @VERSION_MINOR@ -VERSION_POINT = @VERSION_POINT@ -CODE_STATUS = @CODE_STATUS@ -VERSION = $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_POINT) -# Whatever the most recent stable version is. -STABLE = 3.0.0 - -############################################################################# -# Build tools -############################################################################# - -PROGRAM = privoxy@EXEEXT@ -ECHO = echo -INSTALL = @INSTALL@ -RM = rm -fr -SED = sed -CAT = cat -MV = mv -f -WDUMP = @WDUMP@ -dump -JADECAT = @JADECAT@ -JADEBIN = @JADEBIN@ -DOC_STATUS = @DOC_STATUS@ -MAN2HTML = @MAN2HTML@ -DKPREFIX = @DKPREFIX@ -# Note: Please make sure that -d ldp.dsl\#html stays the last option to -# $(JADEBIN), because for some targets "-notoc" will be appended -# to it (--> "ldp.dsl\#html-notoc"). -DB = $(JADEBIN) $(JADECAT) $(DOC_STATUS) -ihtml -t sgml -D.. -d ldp.dsl\#html -G2H_CMD = groff -mandoc -Thtml -TARGET_OS = @host@ -PERL = perl -DOC_DIR = . -DOC_TMP = $(DOC_DIR)/tmp -ROOT = ../.. -UTILS = $(ROOT)/utils -DOK_WEB_USEM=$(ROOT)/webserver/user-manual - -DOC_FILES = $(ROOT)/AUTHORS $(ROOT)/LICENSE $(ROOT)/README $(ROOT)/INSTALL $(ROOT)/ChangeLog \ - `find ../text/ -type f | grep -v "CVS" | grep -v "\.\#" | grep -v ".*~" | grep -v ".cvsignore" | grep -v "TAGS"` \ - `find ../webserver/ -name "*.html" | grep -v "\(webserver\|team\)\/index\.html"` \ - `find ../webserver/ -name "*.css"` \ - $(ROOT)/privoxy.1 - -############################################################################# -# Phony targets -############################################################################# -.PHONY: all dok webserver doc-webserver clean doc-clean clobber ensure-wdump \ -ensure-jadebin ensure-dkprefix user doc-user devel doc-devel faq doc-faq \ -readme doc-readme authors doc-authors index doc-index webserver doc-webserver \ -man doc-man man2html manuals doc-release doc-pdf doc-shtml announce config-file -############################################################################# -# -# Documentation -# -# converts *.sgml into html, pdf, text and man pages -# -############################################################################# - -############################################################################# -# Build the Manuals, etc ######################################### -# This does not build _all_ targets ######################################### -all: $(DOC_DIR)/doc_version.tmp doc-user doc-devel doc-faq doc-webserver doc-index doc-readme doc-authors doc-man doc-clean - @$(ECHO) Documentation created. - -############################################################################# -# Shortcuts. Use these targets if building docs selectively (ie not 'all'). -# -# Both index pages (index.html and privoxy-index.html) -index: $(DOC_DIR)/doc_version.tmp doc-webserver doc-index doc-clean - -# Just index.html -webserver: $(DOC_DIR)/doc_version.tmp doc-webserver doc-clean - -# User Manual html and text -user: $(DOC_DIR)/doc_version.tmp doc-user doc-clean - -# Developer Manual html and text -devel: $(DOC_DIR)/doc_version.tmp doc-devel doc-clean - -# FAQ html and text -faq: $(DOC_DIR)/doc_version.tmp doc-faq doc-clean - -# All formal manuals (html and text). -manuals: $(DOC_DIR)/doc_version.tmp doc-user doc-devel doc-faq doc-clean - -# README and INSTALL -readme: $(DOC_DIR)/doc_version.tmp doc-readme doc-clean - -# man page and html man page -man: $(DOC_DIR)/doc_version.tmp doc-man doc-clean - -# AUTHORS file only. -authors: $(DOC_DIR)/doc_version.tmp doc-authors doc-clean - -# PDF version of manuals. -pdf: $(DOC_DIR)/doc_version.tmp doc-pdf - -# doh. -clean: doc-clean - -# backward compatibility targets -dok-user: user -dok-faq: faq -dok-devel: devel -dok-index: index -dok-man: man -dok-readme: readme -dok: all - -# 3 checks to make sure docs will be generated -ensure-wdump: -ifeq (@WDUMP@,false) - @$(ECHO) - @$(ECHO) "Cannot build docs; one of w3m, links, or lynx must be installed." - @$(ECHO) "You should install the appropriate package and rerun ./configure" - @exit 1 -endif - -ensure-jadebin: -ifeq (@JADEBIN@,false) - @$(ECHO) - @$(ECHO) "Cannot build docs; one of openjade or jade must be installed" - @$(ECHO) "You should install the appropriate package and rerun ./configure" - @exit 1 -endif - -ensure-dkprefix: -ifeq (@DKPREFIX@,false) - @$(ECHO) - @$(ECHO) "Cannot build docs; cannot find docbook-dsssl stylesheets" - @$(ECHO) "You should install the appropriate package and rerun ./configure" - @exit 1 -endif - -# Update release info, so it can be read by Docbook/jade, and run other -# checks. -$(DOC_DIR)/doc_version.tmp: ensure-dkprefix ensure-jadebin ensure-wdump doc-release - -# Write VERSION and CODE_STATUS to tmp files so they can be read into the doc -# processing. This needs to go before any doc building (doh). -doc-release: - @$(ECHO) Setting doc version and status to $(VERSION), $(CODE_STATUS) - $(MAKE) doc-clean - mkdir -p $(DOC_TMP) - $(ECHO) -n $(VERSION) > $(DOC_DIR)/doc_version.tmp - $(ECHO) -n $(CODE_STATUS) > $(DOC_DIR)/doc_status.tmp - $(ECHO) -n $(STABLE) > $(DOC_DIR)/doc_stable.tmp - -# user manual -doc-user: - test -f $(DOC_DIR)/doc_version.tmp || exit 1 - cd $(DOC_TMP) && $(RM) * && $(DB) -iuser-man ../user-manual.sgml && cd .. && \ - $(RM) ../webserver/user-manual/*.html && cp $(DOC_TMP)/*.html ../webserver/user-manual/ - $(DB) -iuser-man -V nochunks user-manual.sgml > tmp.html && $(WDUMP) tmp.html > ../text/user-manual.txt - -# developer manual -doc-devel: - test -f $(DOC_DIR)/doc_version.tmp || exit 1 - cd $(DOC_TMP) && $(RM) * && $(DB) ../developer-manual.sgml && cd .. && \ - $(RM) ../webserver/developer-manual/*.html && cp -f $(DOC_TMP)/*.html ../webserver/developer-manual/ - $(DB) -V nochunks developer-manual.sgml > tmp.html && $(WDUMP) tmp.html > ../text/developer-manual.txt - -# faq -doc-faq: - test -f $(DOC_DIR)/doc_version.tmp || exit 1 - cd $(DOC_TMP) && $(RM) * && $(DB) ../faq.sgml && cd .. && \ - $(RM) ../webserver/faq/*.html && cp $(DOC_TMP)/*.html ../webserver/faq/ - $(DB) -V nochunks faq.sgml > tmp.html && $(WDUMP) tmp.html > ../text/faq.txt - -# Build README and INSTALL files. -doc-readme: - test -f $(DOC_DIR)/doc_version.tmp || exit 1 - $(DB)-notoc -V nochunks readme.sgml > tmp.html &&\ - $(WDUMP) tmp.html > $(ROOT)/README ;\ - $(DB)-notoc -V nochunks install.sgml > tmp.html &&\ - $(WDUMP) tmp.html > $(ROOT)/INSTALL ;\ - $(RM) tmp.* - -# index.sgml is used to create both the Home Page, and a local index -# for documentation (privoxy-index.html), etc. -# -# index.html for webserver: -doc-webserver: - test -f $(DOC_DIR)/doc_version.tmp || exit 1 - cd webserver && $(DB)-notoc -ip-homepage -V nochunks index.sgml > index.html ;\ - $(PERL) -pi.bak -e 's/..\/p_doc.css/p_doc.css/;\ - s/<\/HEAD/\n<\/HEAD/;\ - s/<\/HEAD/\n<\/HEAD/;\ - s/\.\d\. //' index.html ;\ - $(MV) index.html ../../webserver ;\ - $(RM) *.html *.bak - -# privoxy-index.html for bundling with locally installed documentation: -doc-index: - test -f $(DOC_DIR)/doc_version.tmp || exit 1 - cd webserver && $(DB)-notoc -ip-index -V nochunks index.sgml > privoxy-index.html ;\ - $(PERL) -pi.bak -e 's/..\/p_doc.css/p_doc.css/;\ - s/<\/HEAD/\n<\/HEAD/;\ - s/<\/HEAD/\n<\/HEAD/;\ - s/\.\d\. //' privoxy-index.html ;\ - $(MV) privoxy-index.html ../../webserver ;\ - $(RM) *.html *.bak - -## Make AUTHORS file -doc-authors: - test -f $(DOC_DIR)/doc_version.tmp || exit 1 - $(DB) -V nochunks authors.sgml > tmp.html && $(WDUMP) \ - tmp.html > ../../AUTHORS - -# Make a man page, and then HTML version. Uses docbook2man (short perl script) -# in utils dir. -doc-man: - test -f $(DOC_DIR)/doc_version.tmp || exit 1 - cd $(DOC_TMP) && $(RM) * &&\ - nsgmls $(DOC_STATUS) ../privoxy-man-page.sgml | sgmlspl ../../../utils/docbook2man/docbook2man-spec.pl &&\ - perl -pi.bak -e 's/ //; s/\[ /\[/g' privoxy.1 -# cd $(DOC_TMP) && $(DB) ../privoxy-man-page.sgml &&\ -# $(MV) -f index.html privoxy-man-page.html - # This html is not used. See make man2html. - $(MV) -f $(DOC_TMP)/privoxy.1 $(ROOT)/privoxy.1 - $(MAKE) man2html - $(MAKE) clean - -# For those with man2html ala RH7s. -man2html: - test -f $(DOC_DIR)/doc_version.tmp || exit 1 - mkdir -p ../webserver/man-page -ifneq ($(MAN2HTML),false) - $(MAN2HTML) $(ROOT)/privoxy.1 |grep -v "^Content-type" > tmp.html - $(PERL) -pi.bak -e 's///; s//man2html/' tmp.html - $(PERL) -pi.bak -e 's/(<\/HEAD>)/<\/HEAD>/' tmp.html -# Twice because my version of man2html is pulling in commas and periods in URLs. - $(PERL) -pi.bak -e 's/()/$$1$$2/g' tmp.html - $(PERL) -pi.bak -e 's,\.">,">,g' tmp.html -# Get rid of spurious  from conversion. (How to do this with perl?) - $(SED) -e 's///g' tmp.html > ../webserver/man-page/privoxy-man-page.html && $(RM) tmp.* -else - $(MAKE) groff2html -endif - -# Otherwise we get plain groff conversion. -groff2html: - $(G2H_CMD) $(ROOT)/privoxy.1 | $(SED) -e 's@@@' >\ - ../webserver/man-page/privoxy-man-page.html - -# Make pdf docs from single page html. Requires htmldoc, see -# (http://www.easysw.com/htmldoc/). Note: 1.8.20 has a TOC bug. -# PDF docs are uploaded to webserver as zip archive. -doc-pdf: doc-shtml - @$(ECHO) -n "starting htmldoc version: "; htmldoc --version - cd $(UTILS)/ldp_print && $(RM) *html *bak *jpg *tmp *pdf *zip - cp -f $(DOC_TMP)/*html ../webserver/images/*jpg $(UTILS)/ldp_print - cd $(UTILS)/ldp_print ;\ - $(PERL) -pi.bak -e 's/\.\.\/images\///; s/(<\/?)SUB/$$1small/i;\ - s/\.\.\/user-manual\/index\.html/privoxy-user-manual.pdf/;\ - s/\.\.\/developer-manual\/index\.html/privoxy-developer-manual.pdf/;\ - s/\.\.\/faq\/index\.html/privoxy-faq.pdf/' *.html ;\ - for i in developer-manual user-manual faq; do \ - ./ldp_print privoxy-$$i.html ;\ - $(ECHO) DONE: privoxy-$$i.pdf ;\ - done ;\ - $(MV) *.pdf ../../doc/pdf ;\ - $(RM) *html *bak *jpg *pdf *zip - $(RM) $(DOC_TMP) - - -# Generate single page html. Used only for creating pdf docs (ATM). -doc-shtml: - test -f $(DOC_DIR)/doc_version.tmp || exit 1 - $(DB) -iuser-man -V nochunks user-manual.sgml > $(DOC_TMP)/privoxy-user-manual.html - $(DB) -V nochunks developer-manual.sgml > $(DOC_TMP)/privoxy-developer-manual.html - $(DB) -V nochunks faq.sgml > $(DOC_TMP)/privoxy-faq.html - -# Create release announcement in text and html, with short and long versions. -# This is a standalone target, and must be invoked directly. -announce: $(DOC_DIR)/doc_version.tmp - cd $(DOC_TMP) && $(DB) -iannounce-big ../announce.sgml &&\ - mv -f index.html announce.html && $(WDUMP) announce.html > announce.txt - cd $(DOC_TMP) && $(DB) ../announce.sgml &&\ - mv -f index.html announce-mini.html && $(WDUMP) announce-mini.html > announce-mini.txt &&\ - mv -f *html *txt $(ROOT) - $(MAKE) doc-clean - @$(ECHO) Announce texts are done. Please check them. Some hand editing - @$(ECHO) may be required. - -# The main Privoxy config file, generated from sgml sources. -# NOTE: This will require some hand editing. The new file is outputted -# as config.new so that problem sections can be compared to previous -# version. This is hardcored to w3m for html/text conversion. Also, -# requires the shell util 'fmt'. -config-file: $(DOC_DIR)/doc_version.tmp - $(DB)-notoc -iconfig-file -V nochunks config.sgml > tmp.html &&\ - w3m -dump tmp.html |fmt -w 70 > $(ROOT)/config.new && $(RM) tmp.* - $(PERL) -pi.bak -e 's/^1\. \@\@TITLE\@\@/ /i;\ - /^\d\.\d\.\s+/ && tr/[a-z]/[A-Z]/;\ - $$header_len=0 unless $$hit_header;\ - if ($$hit_header) {\ - print "# ";\ - for ($$i=1; $$i < $$header_len; $$i++) {print "=";}\ - print "\n";\ - };\ - $$hit_header=0;\ - $$hit_header=1 if m/^(\d\.)(\d\.)(\d\.)?\s/ && s/^(\d\.)//;\ - $$header_len = length($$_);\ - s/^/# /; /^# #{12,}/ && s/^# #/####/;\ - s/^.*$$// if $$hit_option;\ - $$hit_option=0;\ - s/^\n//; s/^#\s*-{20,}//; s/ *$$//;\ - $$hit_option=1 if s/^#\s+@@//;' $(ROOT)/config.new - $(RM) $(ROOT)/*.bak *.tmp tmp.* $(DOC_TMP) - @$(ECHO) "****************************************************" - @$(ECHO) "The output file is config.new." - @$(ECHO) "Now -- you need to hand edit the results!!!" - @$(ECHO) "In particular, check the Debug levels, the" - @$(ECHO) "permit-access, forward & socks examples and the" - @$(ECHO) "various user-manual examples, which all" - @$(ECHO) "probably got hammered." - @$(ECHO) "****************************************************" - -# config file, alternate verison using lynx (perl stuff unfinished). Lynx -# does not do so good a job. -config-file-alt: doc-release ensure-wdump - $(ECHO) -e ".h2 JUSTIFY\\nJUSTIFY:FALSE" > tmp.lynx_cfg &&\ - $(DB)-notoc -iconfig-file -V nochunks config.sgml > tmp.html &&\ - lynx -cfg=tmp.lynx_cfg -width=78 -dump tmp.html > ../../config.new && $(RM) tmp.* - $(PERL) -pi -e 's/^( )//;\ - s/:$\/:\n/' $(ROOT)/config.new - -# This is mostly to catch cruft from build failures -doc-clean: - $(RM) $(DOC_TMP) *.html `find $(ROOT) -name "tmp.*" -o -name "*.tmp" -o -name "*.bak" -o -name "*.fot"` - -tidy: - $(RM) doc_* `find . -name "*~"` `find . -name ".\#*"` - -clobber: tidy clean - $(RM) GNUmakefile ldp.dsl - -distclean: clobber - -coffee: - @perl -e 'print pack "C*", (31,139,8,8,153,63,226,60,2,3,99,111,102,102,101,101,0,109,143,205,13,192,32,8,133,\ - 239,78,241,110,234,1,28,160,171,152,208,53,26,117,247,22,165,73,137,125,9,1,62,126,2,128,169,5,243,143,\ - 13,139,49,164,65,100,149,152,102,73,141,88,73,178,116,205,100,69,253,36,102,81,49,83,236,19,225,171,131,\ - 214,172,163,73,4,168,123,115,71,126,247,122,94,128,178,227,95,154,12,86,215,122,197,249,146,187,54,220,125,\ - 193,51,228,11,1,0,0);'|zcat - -############################################################################# - -# $Log: GNUmakefile.in,v $ -# Revision 1.8 2002/09/26 22:51:16 hal9 -# New user-manual examples in config-file are wrapping now. Add warning. -# -# Revision 1.7 2002/09/16 06:04:34 hal9 -# Improved $(VERSION) handling, and related cleanups, with minor changes to most -# targets. Renamed all dok-* targets to doc-*, and added some backward -# compatibility targets. -# -# Revision 1.6 2002/09/06 01:58:28 hal9 -# Create a separate INSTALL file, and remove install instructions from README. -# INSTALL is built from dok-readme target. -# -# Revision 1.5 2002/09/05 23:12:04 hal9 -# Updated Makefile with 3.0 changes (pdf and man targets, etc). Revise comments -# in privoxy-man-page.sgml to remove out of date comments. -# -# Revision 1.4 2002/08/08 01:02:26 hal9 -# Update pdf2 target to dok-shtml (for single page html) -# -# Revision 1.3 2002/06/07 00:27:04 hal9 -# Fixing man2html quirk that pulls in punctuation, and breaks URLs. -# -# Revision 1.2 2002/06/05 04:17:19 hal9 -# Add dok-man-test target as temp workaround for docbook2man ignoring -i command -# line option. -# -# Revision 1.1 2002/06/05 00:28:28 hal9 -# Moving all doc building to doc/source. Rewrite all targets (not well tested). -# Docs are now built without touching sgml source. -# diff --git a/doc/source/announce.sgml b/doc/source/announce.sgml index 4d262c91..549d6b4e 100644 --- a/doc/source/announce.sgml +++ b/doc/source/announce.sgml @@ -5,10 +5,10 @@ - - + + - + diff --git a/doc/source/authors.sgml b/doc/source/authors.sgml index d9df2320..c2a1ba39 100644 --- a/doc/source/authors.sgml +++ b/doc/source/authors.sgml @@ -26,9 +26,9 @@ - - - + + + diff --git a/doc/source/buildsource.sgml b/doc/source/buildsource.sgml index a24da213..963760a6 100644 --- a/doc/source/buildsource.sgml +++ b/doc/source/buildsource.sgml @@ -3,7 +3,7 @@ Purpose : Entity included in other project documents. - $Id: buildsource.sgml,v 2.3 2002/09/06 01:58:28 hal9 Exp $ + $Id: buildsource.sgml,v 1.9.2.3 2003/11/06 13:36:37 oes Exp $ Copyright (C) 2001, 2002 Privoxy Developers See LICENSE. @@ -18,7 +18,7 @@ This file is included into: user-manual - INSTALL + README --> @@ -34,7 +34,7 @@ When building from a source tarball (either release version or nightly CVS + url="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.bz2">nightly CVS tarball), first unpack the source: @@ -65,40 +65,7 @@ - You can also check out any Privoxy - branch, just exchange the current - name with the wanted branch name (Example: v_3_0_branch for the 3.0 cvs - tree). - - - - It is also recommended to not run Privoxy as - root, and instead it is suggested to create a privoxy user for - this purpose. - - - - /etc/passwd might then look like: - - - - privoxy:*:7777:7777:privoxy proxy:/no/home:/no/shell - - - - And then /etc/group, like: - - - - privoxy:*:7777:privoxy - - - - Some binary packages may do this for you. - - - - Then, to build from either unpacked tarball or CVS source: + Then, in either case, to build from unpacked tarball or CVS source: @@ -112,18 +79,9 @@ make install # (to really install) - + - If you have GNU make, you can have the first four steps + If you have gnu make, you can have the first four steps automatically done for you by just typing: @@ -137,48 +95,6 @@ in the freshly downloaded or unpacked source directory. - - The default installation path for make install is - /usr/local. This may of course be customized with - the various ./configure path options. - configure also accepts a --with-user and - --with-group options for setting user and group - ownership. - - - - If you do install to /usr/local, the install will use - sysconfdir=$prefix/etc/privoxy by default. All other - destinations, and the direct usage of --sysconfdir flag - behave like normal, i.e. will not add the extra privoxy - directory. This is for a safer install, as there may already exist another - program that uses a file with the config name, and thus makes - /usr/local/etc cleaner. - - - - If installing to /usr/local, the docs will go by default - to $prefix/share/doc. But if this directory doesn't - exist, it will then try $prefix/doc and install there before - creating a new $prefix/share/doc just for - Privoxy. - - - - Again, if the installs goes to /usr/local, the - localstatedir (ie: var/) will default to - /var instead of $prefix/var so the - logs will go to /var/log/privoxy/, and the pid file will - be created in /var/run/privoxy.pid. - - - - make install will attempt to set the correct values - in config (main configuration file). If appropriate, - an init script will be installed, but it is up to the user to determine - how and where to start Privoxy. - - For more detailed instructions on how to build Redhat and SuSE RPMs, Windows self-extracting installers, building on platforms with @@ -187,10 +103,9 @@ - - For binary RPM installation, and other platforms, see the User Manual + For binary RPM installation, and other platforms, see the user-manual as well. ]]> diff --git a/doc/source/config.sgml b/doc/source/config.sgml index 28920ae8..1b6de2dc 100644 --- a/doc/source/config.sgml +++ b/doc/source/config.sgml @@ -1,14 +1,14 @@ - - - + + + ]> - Copyright &my-copy; 2001, 2002 by Privoxy Developers developers@privoxy.org + Copyright &my-copy; 2001 - 2004 by Privoxy Developers developers@privoxy.org diff --git a/doc/source/developer-manual.sgml b/doc/source/developer-manual.sgml index bcf2e9f5..93f23834 100644 --- a/doc/source/developer-manual.sgml +++ b/doc/source/developer-manual.sgml @@ -8,10 +8,10 @@ - - + + - + @@ -23,14 +23,16 @@ This file belongs into ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/ - $Id: developer-manual.sgml,v 2.5 2002/09/26 21:50:39 hal9 Exp $ + $Id: developer-manual.sgml,v 1.46.2.11 2002/12/11 13:12:15 hal9 Exp $ Copyright (C) 2001, 2002 Privoxy Developers See LICENSE. ======================================================================== NOTE: Please read developer-manual/documentation.html before touching - anything in this, or other Privoxy documentation. + anything in this, or other Privoxy documentation. You have been warned! + Failure to abide by this rule will result in the revocation of your license + to live a peaceful existence! ======================================================================== --> @@ -48,7 +50,7 @@ - $Id: developer-manual.sgml,v 2.5 2002/09/26 21:50:39 hal9 Exp $ + $Id: developer-manual.sgml,v 1.46.2.11 2002/12/11 13:12:15 hal9 Exp $ - + the state at the release of version &p-version;. You can find the latest version of the this manual at http://www.privoxy.org/developer-manual/. Please see the Contact section @@ -201,12 +202,11 @@ Hal. is always at least one branch from the main trunk devoted to a stable release series. The main trunk is where active development takes place for the next stable series (e.g. 3.2.x). - And for testing bugfixes for the stable series. Just prior to each - stable series (e.g. 3.0.x), a branch is created just for stable series - releases (e.g. 3.0.0 -> 3.0.1 -> 3.0.2, etc). Once the initial stable - release of any stable branch has taken place, this branch is - only used for bugfixes, which have had prior - testing before being committed to CVS. (See 3.0.1 -> 3.0.2, etc). + Once the initial stable release of any stable branch has taken place, + this branch is only used for bugfixes, which have + had prior testing before being committed to CVS. (See Version Numbers below for details on versioning.) @@ -272,10 +272,10 @@ Hal. - Stable branches are handled with decidedly more care, especially after - the initial *.*.0 release, and we are just in bugfix mode. In addition - to the above, the below applies only to the stable branch (currently - the v_3_0_branch branch): + Stable branches are handled with more care, especially after the + initial *.*.0 release, and we are just in bugfix mode. In addition to + the above, the below applies only to the stable branch (currently the + v_3_0_branch branch): @@ -1857,7 +1857,7 @@ static void unload_re_filterfile( void *f ) { ... } Example for file comments: -const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 2.5 2002/09/26 21:50:39 hal9 Exp $"; +const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 1.46.2.11 2002/12/11 13:12:15 hal9 Exp $"; /********************************************************************* * * File : $Source$ @@ -1917,7 +1917,7 @@ const char FILENAME_h_rcs[] = FILENAME_H_VERSION; #ifndef _FILENAME_H #define _FILENAME_H -#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 2.5 2002/09/26 21:50:39 hal9 Exp $" +#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 1.46.2.11 2002/12/11 13:12:15 hal9 Exp $" /********************************************************************* * * File : $Source$ @@ -2095,7 +2095,7 @@ at sourceforge. Three simple steps: First you need to determine which version number the release will have. Privoxy version numbers consist of three numbers, - separated by dots, like in X.Y.Z (e.g. 3.0.0), where: + separated by dots, like in X.Y.Z (e.g. 3.0.0), where: @@ -3029,22 +3029,16 @@ at sourceforge. Three simple steps: Temple Place - Suite 330, Boston, MA 02111-1307, USA. $Log: developer-manual.sgml,v $ - Revision 2.5 2002/09/26 21:50:39 hal9 + Revision 1.46.2.11 2002/12/11 13:12:15 hal9 + Rewrite cvs write access give-away section. + + Revision 1.46.2.10 2002/09/26 21:53:45 hal9 Changes to reflect recent change in stable branch commit policy (hopefully clearer now). - Revision 2.4 2002/09/26 05:57:14 hal9 - Conditionally exclude 'this doc is evolving' comment in intro for non release - situations. - - Revision 2.3 2002/09/05 02:27:59 hal9 - Mention tested stable branch fixes in main trunk, as alternate to posting - patches. - - Revision 2.2 2002/09/04 01:55:44 hal9 - Migrating developer manual, and related sgml files from 3.0. Add additional - commentary on cvs, versioning, stable branches, and how to handle stable - branches in cvs. + Revision 1.46.2.9 2002/09/26 01:21:40 hal9 + Porting 3.1.1 changes: more on cvs and branches, more on versions and + releases. Revision 1.46.2.8 2002/08/17 00:16:10 hal9 Add note on updating webserver for User-manual/CGI editor, which is version diff --git a/doc/source/faq.sgml b/doc/source/faq.sgml index af9d6d64..dfdd88cb 100644 --- a/doc/source/faq.sgml +++ b/doc/source/faq.sgml @@ -8,10 +8,10 @@ - - + + - + @@ -24,9 +24,9 @@ This file belongs into ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/ - $Id: faq.sgml,v 2.9 2002/10/29 03:22:22 hal9 Exp $ + $Id: faq.sgml,v 1.61.2.41 2004/04/05 13:44:05 oes Exp $ - Copyright (C) 2001, 2002 Privoxy Developers + Copyright (C) 2001-2004 Privoxy Developers See LICENSE. Based partially on the Internet Junkbuster FAQ originally written by and @@ -50,9 +50,12 @@ ======================================================================== NOTE: Please read developer-manual/documentation.html before touching - anything in this, or other Privoxy documentation. You have been warned! - Failure to abide by this rule will result in the revocation of your license - to live a peaceful existence! + this file! + + Please we keep the info in this file as version independent as possible + so we only have to maintain one FAQ. Where significant changes are + made to Privoxy configuration, please note the change in such a way that + it makes sense to both users of older and newer versions. ======================================================================== @@ -67,12 +70,12 @@ - Copyright &my-copy; 2001, 2002 by + Copyright &my-copy; 2001-2004 by Privoxy Developers -$Id: faq.sgml,v 2.9 2002/10/29 03:22:22 hal9 Exp $ +$Id: faq.sgml,v 1.61.2.41 2004/04/05 13:44:05 oes Exp $ - + the state at the release of version &p-version;. You can find the latest version of the document at http://www.privoxy.org/faq/. Please see the Contact section if you want to @@ -274,8 +276,8 @@ an ad, and what is not? This does not sound very scientific. Actually, it's a black art ;-) And yes, it is always possible to have a broad - rule accidentally block or change something by mistake. There is a good chance - you may run into such a situation at some point. It is tricky writing rules to + rule accidentally block or change something by mistake. You will almost surely + run into such situations at some point. It is tricky writing rules to cover every conceivable possibility, and not occasionally get false positives. @@ -290,6 +292,24 @@ This does not sound very scientific. + +Will I have to configure <application>Privoxy</application> + before I can use it? + + No, not really. The default installation should give you a good starting + point, and block most unwanted content. + + + But you will certainly run into situations where there are false positives, + or ads not being blocked that you may not want to see. In these cases, you + would certainly benefit by customizing Privoxy's + configuration to more closely match your individual situation. And we would + encourage you to do this. This is where the real power of + Privoxy lies! + + + + My browser does the same things as <application>Privoxy</application>. Why should I use <application>Privoxy</application> at all? @@ -397,12 +417,13 @@ Include supported.sgml here: Can I use <application>Privoxy</application> with my email client? - As long as there is some way to set a HTTP proxy for the client, then yes, + As long as there is some way to set a HTTP proxy for the client, then yes, any application can be used, whether it is strictly speaking a browser or not. Though this may not be the best approach for dealing with some of the common abuses of HTML in email. See How can I configure Privoxy with - Outlook Express? below for more on this. + linkend="outlook">How can I configure Privoxy + with Outlook Express? below for more on + this. Be aware that HTML email presents a number of unique security and privacy @@ -440,7 +461,7 @@ special I have to do now? as a proxy by specifying the correct proxy address and port number in the appropriate configuration area for the browser. See below. You should also flush your browser's memory and disk cache to get rid of any - cached junk items, and any stored cookies. + cached junk items, and remove any stored cookies. @@ -476,8 +497,7 @@ special I have to do now? Privoxy does not currently handle - protocols such as FTP, SMTP, IM, IRC, ICQ, or other Internet - protocols. + any other protocols such as FTP, SMTP, IM, IRC, ICQ, etc. @@ -491,7 +511,9 @@ All the ads are there. What's wrong? the browser's caches to force a full re-reading of pages. You can verify that Privoxy is running, and your browser is correctly configured by entering the special URL: - http://config.privoxy.org/. + http://p.p/. + This should take you to a page titled This is Privoxy.. with access to Privoxy's internal configuration. If you see this, then you are good to go. If you receive a page saying @@ -500,11 +522,47 @@ All the ads are there. What's wrong? If you receive anything else (probably nothing at all), it could either be that the browser is not set up correctly, or that Privoxy is not running at all. Check the log file. + url="../user-manual/config.html#LOGFILE">log file. For instructions + on starting Privoxy and browser configuration, + see the chapter + on starting Privoxy in the + user manual. + +I get a <quote>Privoxy is not being used</quote> dummy page although +<application>Privoxy</application> is running and being used. + + + First, make sure that Privoxy is really running and + being used by visiting http://p.p/. You + should see the Privoxy main page. If not, see + the chapter + on starting Privoxy in the + user manual. + + + + Now if http://p.p/ works for you, but + other parts of Privoxy's web interface show + the dummy page, your browser has cached a redirection it encountered before + Privoxy was being used. You need to clear your + browser's cache. Note that shift-reloading the dummy page won't help, since + that'll only refresh the dummy page, not the redirection that lead you there. + + + + The procedure for clearing the cache varies from browser to browser. As an + example, Mozilla users would click + Edit --> Preferences --> + Advanced --> Cache and + then click both Clear Memory Cache + and Clear Disk Cache. + + + @@ -597,7 +655,6 @@ way to do this? - There are several different <quote>actions</quote> files. What are the differences? @@ -643,152 +700,29 @@ the differences? What's the difference between the -<quote>Cautious</quote>, <quote>Medium</quote> and <quote>Radical</quote> defaults? +Cautious, Medium and Adventuresome defaults? Configuring Privoxy is not entirely trivial. To help you get started, we provide you with three different default action profiles in the web based actions file editor at http://config.privoxy.org/show-status. - The following table shows you, which of the most important features are - enabled in each configuration: + See the User + Manual for a list of actions, and how the default + profiles are set. - -

Filter File:Filter Files:
+ @re-filter-filename@ + +- +- View +- +-
Default Configurations - - - - - - - - Feature - Cautious - Intermadiate - Radical - - - - - - - - - - - - - - Ad-blocking by URL - yes - yes - yes - - - - Ad-filtering by size - yes - yes - yes - - - - GIF de-animation - no - yes - yes - - - - Referer forging - no - yes - yes - - - - Cookie handling - none - session-only - kill - - - - Pop-up killing - no - yes - yes - - - - Fast redirects - no - no - yes - - - - HTML taming - yes - yes - yes - - - - JavaScript taming - yes - yes - yes - - - - Web-bug killing - yes - yes - yes - - - - Fun text replacements - no - no - yes - - - - Image tag reordering - no - no - yes - - - - Ad-filtering by link - no - no - yes - - - - Demoronizer - no - no - yes - - - - -
- + Where the defaults are likely to break some sites, exceptions for known popular problem sites are included, but in - general, the more aggressive your default settings are, the more - exceptions you will have to make later. See the user manual for a more - deatiled discussion. + general, the more aggressive your default settings are, the more exceptions + you will have to make later. See the User Manual + for a more deatiled discussion. + - It should be noted that the Radical profile is not only more + It should be noted that the Adventuresome profile (formerly known + as the Advanced profile) is not only more aggressive, but also includes fun and, extreme usage of most of Privoxy's features. Use at your own risk! @@ -868,7 +802,7 @@ with a browser? Does that not raise security issues? url="../user-manual/config.html#LISTEN-ADDRESS">listen-address option, which may be commented out with a # symbol. Make sure it is uncommented, and assign it the address of the LAN gateway interface, - and port number to use. Assuming your server's LAN address is 192.168.1.1 and you + and port number to use. Assuming your LAN address is 192.168.1.1 and you wish to run Privoxy on port 8118, this line should look like: @@ -908,7 +842,7 @@ with a browser? Does that not raise security issues? If you run Privoxy on a LAN with untrusted users, - we recommend that you double-check all access control and security options! @@ -1073,6 +1007,7 @@ on Win2K/NT? + How can I make <application>Privoxy</application> work with other proxies like <application>Squid</application>? @@ -1139,8 +1074,8 @@ and thus avoid individual browser configuration? Privoxy just blindly proxies all requests. In the case of Outlook Express (see above), OE uses IE anyway, and there is no way for Privoxy to ever - be able to distinguish between them (nor could any other proxy type - application for that matter). + be able to distinguish between them (nor could any other proxy type application for + that matter). For a good discussion of some of the issues involved (including privacy and @@ -1172,7 +1107,7 @@ and thus avoid individual browser configuration? be off by default anyway, so this might be redundant, but there is no harm being explicit in what you want to happen. user.action includes an alias for this situation, called - allow-cookies. + allow-all-cookies. @@ -1226,7 +1161,12 @@ delays in page requests compared to the old Junkbuster. What's wrong? noticeable on slow dialup connections. - Filtering is automatically disabled for inappropriate MIME types. + Filtering is automatically disabled for inappropriate MIME types. But note + that if the web server mis-reports the MIME type, then content that should + not be filtered, could be. Privoxy only knows how + to differentiate filterable content because of the MIME type as reported by + the server, or because of some configuration setting that enables/disables + filtering. @@ -1577,24 +1517,65 @@ from a webserver? FTP server? viewing a document (i.e. a page), and downloading a file. The same is true of Privoxy. If there is a match for a block pattern, - it will still be blocked, and of course this is obvious. Filtering is - potentially more of a concern since the results are not always so obvious. + it will still be blocked, and of course this is obvious. + + + Filtering is potentially more of a concern since the results are not always + so obvious, and the effects of filtering are there whether the file is simply + viewed, or downloaded. And potentially whether the content is some obnoxious + advertizement, or Mr. Jimmy's latest/greatest source code jewel. Of course, + one of these presumably is bad content that we don't want, and + the other is good content that we do want. + Privoxy is blind to the differences, and can only + distinguish good from bad by the configuration parameters + we give it. Privoxy knows the differences in files according to the Document Type as reported by the webserver. If this is reported accurately (e.g. application/zip for a zip archive), then Privoxy knows to ignore these where - appropriate. It is possible, however, that documents that are of an unknown - type (generally assumed to be text/plain) will be filtered, as - will those that might be incorrectly reported by the webserver. If such a - file is a downloaded file that is intended to be saved to disk, then any - content that might have been altered by filtering, will be saved too, for - these (probably very rare) cases. + appropriate. Privoxy potentially can filter HTML + as well as plain text documents, subject to configuration parameters of + course. Also, documents that are of an unknown type (generally assumed to be + text/plain) can be filtered, as will those that might be + incorrectly reported by the webserver. If such a file is a downloaded file + that is intended to be saved to disk, then any content that might have been + altered by filtering, will be saved too, for these (probably rare) cases. + + + Note that versions later than 3.0.2 do NOT filter document types of + text/plain. Prior to this, Privoxy + did filter this document type. + + + In short, filtering is ON if a) the Document Type as reported + by the webserver is appropriate and b) the configuration + allows it (or at least does not disallow it). That's it. There is no magic + cookie anywhere to say this is good and this is + bad. It's the configuration that let's it all happen or not. + + + If you download text files, you probably do not want these to be filtered, + particularly if the content is source code, or other critical content. Source + code sometimes might be mistaken for Javascript (i.e. the kind that might + open a pop-up window). It is recommended to turn off filtering for download + sites (particularly if the content may be plain text files and you are using + version 3.0.2 or earlier) in your user.action file. And + also, for any site or page where making any changes at + all to the content is to be avoided. Privoxy does not do FTP at all, only HTTP - protocols. + protocols, so please don't even try. + + + + +I just downloaded a Perl script, and <application>Privoxy</application> +altered it! Yikes, what is wrong! + + Please read above. @@ -1625,7 +1606,8 @@ and related issues? activated the fun filter which is clearly labeled Text replacements for subversive browsing fun! or you have implicitly activated it by choosing the - Radical profile in the web-based editor. + Adventuresome profile in the web-based editor (formerly known + as the Advanced profile). @@ -1787,7 +1769,8 @@ every time I start IE. What gives? Privoxy cannot act as a proxy for FTP traffic, so do not configure your browser to use Privoxy - as an FTP proxy. The same is true for any protocol other than HTTP or HTTPS. + as an FTP proxy. The same is true for any protocol other than HTTP + or HTTPS. Most browsers understand FTP as well as HTTP. If you connect to a site, with @@ -1796,6 +1779,18 @@ every time I start IE. What gives? speak FTP, Privoxy does not, and cannot proxy such traffic. + + To complicate matters, some systems may have a generic proxy + setting, which will silently enable both HTTP and FTP + proxying! So it is possible to accidentally enable FTP proxying in these + cases. And of course, if this happens, Privoxy + will indeed cause problems since it does not know FTP. + + + Will Privoxy ever proxy FTP traffic? Unlikely. + There just is not much reason, and the work to make this happen is more than + it may seem. + @@ -1833,6 +1828,19 @@ every time I start IE. What gives? + + +In Mac OSX Panther (10.3), images often fail to load and/or I + experience random delays in page loading. I'm using + <literal>localhost</literal> as my browser's proxy setting. + + We believe this is due to an IPv6-related bug in OSX, but don't fully + understand the issue yet. In any case, changing the proxy setting to + 127.0.0.1 instead of localhost + works around the problem. + + + I get a completely blank page at one site. <quote>View Source</quote> @@ -1875,20 +1883,123 @@ every time I start IE. What gives? - - + +My logs show many <quote>Unable to get my own hostname</quote> lines. +Why? + + Privoxy tries to get the hostname of the system + its running on from the IP address of the system interface it is bound to + (from the config file + listen-address setting). If the system cannot supply + this information, Privoxy logs this condition. + + + Typically, this would be considered a system configuration error. It is not a + fatal error to Privoxy however, but may result in + a much slower response from Privoxy due to DNS + timeouts. + + - - Contacting the developers, Bug Reporting and Feature Requests @@ -1904,6 +2015,7 @@ FIXME: Commented out until we have something to put here. HB 03/18/02. ©right; + Portions of this document are borrowed from the original Junkbuster (tm) FAQ, and modified as @@ -1946,8 +2058,6 @@ FIXME: Commented out until we have something to put here. HB 03/18/02. diff --git a/doc/source/install.sgml b/doc/source/install.sgml index 7b0f8b8a..afd630fc 100644 --- a/doc/source/install.sgml +++ b/doc/source/install.sgml @@ -1,10 +1,10 @@ - - + + - + @@ -16,7 +16,7 @@ Purpose : INSTALL file for Privoxy - $Id: install.sgml,v .0 2002/09/05 17:58:29 hal9 Exp $ + $Id: install.sgml,v 2.1.2.1 2002/10/24 22:07:39 hal9 Exp $ Copyright (C) 2001, 2002 Privoxy Developers See LICENSE. @@ -35,27 +35,6 @@ dok-readme'. =================================================================== - READ: - - ====================================================================== - NOTE: The left margin spacing is *important* when using 'literallayout' - WYSISWYG!!! Don't mess this up!!! Careful with linebreaks too, ie - the para tag forces a linebreak. Tags need to be carefully placed as a result - to avoid extra blank lines, etc. - ====================================================================== - - For stable releases, change - - entity % p-not-stable "INCLUDE" - - to - - entity % p-not-stable "IGNORE" - - in the DTD at the top. This will toggle various text 'off'. BOTH - MUST be toggled in this case or you will get both text referencing - stable and unstable versions. You only want one or the other! - -->
diff --git a/doc/source/p-authors.sgml b/doc/source/p-authors.sgml index 226d4cbf..7919c5cf 100644 --- a/doc/source/p-authors.sgml +++ b/doc/source/p-authors.sgml @@ -3,7 +3,7 @@ Purpose : Entity included in other project documents. - $Id: p-authors.sgml,v 2.7 2002/11/30 02:35:16 hal9 Exp $ + $Id: p-authors.sgml,v 1.8.2.14 2003/12/03 13:02:51 hal9 Exp $ Copyright (C) 2001, 2002 Privoxy Developers See LICENSE. @@ -30,7 +30,6 @@ Hal Burgiss (docs) - Jon Foster Andreas Oesterhelt David Schmidt (OS/2, Mac OSX ports) See LICENSE. @@ -95,7 +95,7 @@ Sample Configuration File for Privoxy v&p-version; - $Id: p-config.sgml,v 2.3 2002/10/09 01:45:05 hal9 Exp $ + $Id: p-config.sgml,v 1.1.2.10 2003/02/20 13:50:37 hal9 Exp $ Copyright (C) 2001, 2002 Privoxy Developers http://privoxy.org @@ -468,12 +468,13 @@ actionsfile Notes: - + --> The logfile is where all logging and error messages are written. The level of detail and number of messages are set with the debug @@ -578,7 +579,7 @@ actionsfile Effect if unset: - The whole trust mechanism is turned off. + The entire trust mechanism is turned off. @@ -621,6 +622,7 @@ actionsfile Possible applications include limiting Internet access for children. + @@ -687,31 +689,29 @@ actionsfile Examples: - Unix, in local filesystem: -  user-manual  file:///usr/share/doc/privoxy-&p-version;/user-manual/index.html +   user-manual  file:///usr/share/doc/privoxy-&p-version;/user-manual/ - Windows, in local filesystem, must use forward slash notation, and %20 to denote - spaces in path names: + Windows, in local filesystem, must use forward slash notation: -  user-manual  file:///c:/some%20dir/privoxy/user-manual/index.html +   user-manual  file:/c:/some-dir/privoxy-&p-version;/user-manual/ - Windows, UNC notation (forward slashes required again): + Windows, UNC notation (with forward slashes): -  user-manual  file://///some-server/some-path/privoxy/user-manual/index.html +   user-manual  file://///some-server/some-path/privoxy-&p-version;/user-manual/ Any platform, on local webserver (called local-webserver): -  user-manual  http://local-webserver/privoxy-user-manual/ +   user-manual  http://local-webserver/privoxy-user-manual/ diff --git a/doc/source/privoxy-man-page.sgml b/doc/source/privoxy-man-page.sgml index faabc56d..53781f25 100644 --- a/doc/source/privoxy-man-page.sgml +++ b/doc/source/privoxy-man-page.sgml @@ -5,7 +5,7 @@ This file belongs into ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/ - $Id: privoxy-man-page.sgml,v 2.3 2002/09/05 05:45:30 hal9 Exp $ + $Id: privoxy-man-page.sgml,v 1.13.2.7 2003/03/26 02:06:21 hal9 Exp $ Copyright (C) 2001, 2002 Privoxy Developers See LICENSE. @@ -24,6 +24,12 @@ The 'replaceable' and 'command' tags are used here somewhat unconventionally, since it seems to generate the proper formatting (at least for me :). + Create man page: 'make man' + + Requires docbook2man (short perl script), see CVS + http://sources.redhat.com/docbook-tools/. Also requires openjade and SGMLSpm + perl module. + For man page references, see: http://www.linuxdoc.org/HOWTO/mini/DocBook-Install/using.html http://docbook.org/tdg/en/html/ch02.html#making-refentry @@ -36,12 +42,10 @@ - - + + - - - + @@ -72,6 +76,7 @@ pidfile user[.group] + configfile  (UNIX) @@ -147,8 +152,21 @@ + + --chroot + + + Before changing to the user ID given in the --user option, chroot to + that user's home directory, i.e. make the kernel pretend to the + Privoxy process that the directory tree starts + there. If set up carefully, this can limit the impact of possible + vulnerabilities in Privoxy to the files contained in + that hierarchy. + + + - + If the configfile is not specified on the command line, Privoxy will look for a file named diff --git a/doc/source/privoxy.sgml b/doc/source/privoxy.sgml index f0cb4b25..e6902acd 100644 --- a/doc/source/privoxy.sgml +++ b/doc/source/privoxy.sgml @@ -3,9 +3,9 @@ Purpose : Entity included in other project documents. - $Id: privoxy.sgml,v 1.7 2002/05/10 01:48:20 hal9 Exp $ + $Id: privoxy.sgml,v 1.7.2.1 2004/01/30 13:13:40 oes Exp $ - Copyright (C) 2001, 2002 Privoxy Developers + Copyright (C) 2001 - 2004 Privoxy Developers See LICENSE. ====================================================================== @@ -28,7 +28,7 @@ Privoxy is a web proxy with advanced filtering - capabilities for protecting privacy, filtering web page content, managing + capabilities for protecting privacy, modifying web page content, managing cookies, controlling access, and removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a very flexible configuration and can be customized to suit individual needs and diff --git a/doc/source/readme.sgml b/doc/source/readme.sgml index e97c2099..8a6ae668 100644 --- a/doc/source/readme.sgml +++ b/doc/source/readme.sgml @@ -4,12 +4,10 @@ - - - - - - + + + + @@ -19,9 +17,9 @@ Purpose : README for Privoxy - $Id: readme.sgml,v 2.3 2002/09/05 17:58:29 hal9 Exp $ + $Id: readme.sgml,v 1.16.2.9 2004/01/30 14:09:59 oes Exp $ - Copyright (C) 2001, 2002 Privoxy Developers + Copyright (C) 2001 - 2004 Privoxy Developers See LICENSE. ======================================================================== @@ -82,7 +80,7 @@ * * Purpose : README file to give a short intro. * - * Copyright : Written by and Copyright (C) 2001,2002 the SourceForge + * Copyright : Written by and Copyright (C) 2001 - 2004 the SourceForge * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -116,10 +114,9 @@ This README is included with - Privoxy &p-version;. See http://www.privoxy.org/ for more information. The current code - level is technically &p-status;. + Privoxy &p-version;. See http://www.privoxy.org/ for more information. The current code maturity + level is &p-status;. @@ -130,6 +127,18 @@ IMPORTANT CHANGES + + MORE NEWS! January 2004, Privoxy 3.0.3 is released. This is the another + maintenance release of Privoxy which fixes more bugs, further refines + the configuration and works around some known third-party problems. See the + ChangeLog for complete details. Upgrading from 3.0.2 is recommended. + + + NEWS! March 2003, Privoxy 3.0.2 is released. This is the first maintenance + release of Privoxy. There are no significant new features in this release. + Some bugs are fixed, and some existing features have been enhanced. See + ChangeLog for details. Upgrading from 3.0.0 is recommended. + REALLY BIG NEWS! August 2002: The long-awaited, oft-delayed stable version of Privoxy 3.0 is finally released! This is way behind schedule, but better @@ -153,10 +162,10 @@ INSTALL - - - See the INSTALL file in this directory, for installing from source, and - the User Manual, for other installation types. + + See the INSTALL file in this directory, for installing + from source, and the User Manual, for other + installation types. @@ -165,7 +174,7 @@ privoxy [——help] [——version] [——no-daemon] [——pidfile PIDFILE] [——user - USER[.GROUP]] [config_file] + USER[.GROUP]] [——chroot] [config_file] See the man page or User Manual for an explanation of each option, and @@ -255,7 +264,7 @@ - +
diff --git a/doc/source/supported.sgml b/doc/source/supported.sgml index 14c53195..e7bcfdc2 100644 --- a/doc/source/supported.sgml +++ b/doc/source/supported.sgml @@ -3,7 +3,7 @@ Purpose : Entity included in other project documents. - $Id: supported.sgml,v 2.3 2002/09/05 05:45:30 hal9 Exp $ + $Id: supported.sgml,v 1.10.2.4 2002/12/14 04:04:32 hal9 Exp $ Copyright (C) 2001, 2002 Privoxy Developers See LICENSE. @@ -25,9 +25,9 @@ --> At present, Privoxy is known to run on - Windows(95, 98, ME, 2000, XP), Linux (RedHat, SuSE, Debian, Conectiva, Gentoo, + Windows(95, 98, ME, 2000, XP), Linux (RedHat, SuSE, Debian, Conectiva, Gentoo, Slackware), Mac OSX, OS/2, AmigaOS, BeOS, FreeBSD, NetBSD, OpenBSD, Solaris, - and more flavors of Unix. + and many more flavors of Unix. - - + + - + @@ -32,9 +32,9 @@ This file belongs into ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/ - $Id: user-manual.sgml,v 2.9 2003/04/11 03:14:53 hal9 Exp $ + $Id: user-manual.sgml,v 1.123.2.43 2005/05/23 09:59:10 hal9 Exp $ - Copyright (C) 2001, 2002 Privoxy Developers + Copyright (C) 2001- 2003 Privoxy Developers See LICENSE. ======================================================================== @@ -53,12 +53,12 @@ - Copyright &my-copy; 2001, 2002 by + Copyright &my-copy; 2001 - 2004 by Privoxy Developers -$Id: user-manual.sgml,v 2.9 2003/04/11 03:14:53 hal9 Exp $ +$Id: user-manual.sgml,v 1.123.2.43 2005/05/23 09:59:10 hal9 Exp $ @@ -125,10 +114,12 @@ Hal. This documentation is included with the current &p-status; version of Privoxy, v.&p-version;. + and is mostly complete at this point. The most up to date reference for the + time being is still the comments in the source files and in the individual + configuration files. Development of version 3.0 is currently nearing + completion, and includes many significant changes and enhancements over + earlier versions. The target release date for + stable v3.0 is soon ;-)]]>. @@ -137,7 +128,7 @@ Hal. Since this is a &p-status; version, not all new features are well tested. This documentation may be slightly out of sync as a result (especially with CVS sources). And there may be bugs, though hopefully - not many! Please find them! + not many! ]]> @@ -232,8 +223,7 @@ automatically start Privoxy in the boot process. Just double-click the installer, which will guide you through the installation process. You will find the configuration files - in the same directory as you installed Privoxy in. We do not - use the registry of Windows. + in the same directory as you installed Privoxy in. @@ -350,7 +340,7 @@ automatically start Privoxy in the boot process. possibly unstable development versions, you can check out the up-to-the-minute version directly from the CVS repository or simply download the nightly CVS + url="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.bz2">the nightly CVS tarball. @@ -377,7 +367,7 @@ automatically start Privoxy in the boot process. - In order not to loose your personal changes and adjustments when updating + In order not to lose your personal changes and adjustments when updating to the latest default.action file we strongly recommend that you use user.action for your customization of Privoxy. See the next section for a quick introduction to how Privoxy blocks ads and banners.]]> - + @@ -565,6 +555,14 @@ automatically start Privoxy in the boot process. + + + For easy access to Privoxy's most important controls, drag the provided + Bookmarklets into your browser's + personal toolbar. + + + Please see the section Contacting the @@ -1050,7 +1048,7 @@ Example Unix startup command: See the section Command line options for - furher info. + further info. must find a better place for this paragraph @@ -1204,7 +1202,20 @@ must find a better place for this paragraph USER, and if included the GID of GROUP. Exit if the privileges are not sufficient to do so. Unix only. - + + + + --chroot + + + + Before changing to the user ID given in the --user option, + chroot to that user's home directory, i.e. make the kernel pretend to the Privoxy + process that the directory tree starts there. If set up carefully, this can limit + the impact of possible vulnerabilities in Privoxy to the files contained in that hierarchy. + Unix only. + + configfile @@ -1444,9 +1455,9 @@ must find a better place for this paragraph Privoxy takes for which URLs, and thus determine how ad images, cookies and various other aspects of HTTP content and transactions are handled, and on which sites (or even parts thereof). There - are three such files included with Privoxy, with - differing purposes: - + are three such files included with Privoxy + with differing purposes: + @@ -1478,14 +1489,149 @@ must find a better place for this paragraph you select them explicitly in the editor. It is not recommend to edit this file. + + The default profiles, and their associated actions, as pre-defined in + standard.action are: + + + Default Configurations + + + + + + + + Feature + Cautious + Medium + Adventuresome + + + + + + + + + + + + + + Ad-blocking by URL + yes + yes + yes + + + + Ad-filtering by size + yes + yes + yes + + + + GIF de-animation + no + yes + yes + + + + Referer forging + no + yes + yes + + + + Cookie handling + none + session-only + kill + + + + Pop-up killing + unsolicited + unsolicited + all + + + + Fast redirects + no + no + yes + + + + HTML taming + yes + yes + yes + + + + JavaScript taming + yes + yes + yes + + + + Web-bug killing + yes + yes + yes + + + + Fun text replacements + no + no + yes + + + + Image tag reordering + no + no + yes + + + + Ad-filtering by link + no + no + yes + + + + Demoronizer + no + no + yes + + + + + +
+
+
The list of actions files to be used are defined in the main configuration - file, and are processed in the order they are defined. The content of these - can all be viewed and edited from default.action is typically process before + user.action). The content of these can all be viewed and + edited from http://config.privoxy.org/show-status. @@ -1523,10 +1669,10 @@ must find a better place for this paragraph certainly a matter of personal taste. In general, it can be said that the more aggressive your default settings (in the top section of the actions file) are, the more exceptions for trusted sites you - will have to make later. If, for example, you want to kill popup windows per + will have to make later. If, for example, you want to crunch all cookies per default, you'll have to make exceptions from that rule for sites that you - regularly use and that require popups for actually useful content, like maybe - your bank, favorite shop, or newspaper. + regularly use and that require cookies for actually useful puposes, like maybe + your bank, favorite shop, or newspaper. @@ -1546,8 +1692,8 @@ must find a better place for this paragraph url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status. The editor allows both fine-grained control over every single feature on a per-URL basis, and easy choosing from wholesale sets of defaults like - Cautious, Medium or Radical. - Warning: the Radical setting is not only more aggressive, + Cautious, Medium or Adventuresome. + Warning: the Adventuresome setting is not only more aggressive, but includes settings that are fun and subversive, and which some may find of dubious merit! @@ -1573,7 +1719,7 @@ must find a better place for this paragraph To determine which actions apply to a request, the URL of the request is - compared to all patterns in each action file file. Every time it matches, the list of + compared to all patterns in each action file file. Every time it matches, the list of applicable actions for the URL is incrementally updated, using the heading of the section in which the pattern is located. If multiple matches for the same URL set the same action differently, the last match wins. If not, @@ -1682,7 +1828,7 @@ must find a better place for this paragraph matches any domain that ENDS in - .example.com (e.g. www.example.com) + .example.com @@ -2447,9 +2593,12 @@ problem-host.example.com Effect: - Text documents, including HTML and JavaScript, to which this action - applies, are filtered on-the-fly through the specified regular expression - based substitutions. + All files of text-based type, most notably HTML and JavaScript, to which this + action applies, are filtered on-the-fly through the specified regular expression + based substitutions. (Note: as of version 3.0.3 plain text documents + are exempted from filtering, because web servers often use the + text/plain MIME type for all files whose type they + don't know.) @@ -2469,8 +2618,8 @@ problem-host.example.com The name of a filter, as defined in the filter file (typically default.filter, set by the filterfile - option in the config file). Filtering - can be completely disabled without the use of parameters. + option in the config file). When used in its negative form, + and without parameters, filtering is completely disabled. @@ -2483,10 +2632,6 @@ problem-host.example.com in the distribution filter file that you can use. See the examples below for a list. - - This is potentially a very powerful feature! But rolling your own - filters requires a knowledge of regular expressions and HTML. - Filtering requires buffering the page content, which may appear to slow down page rendering since nothing is displayed until all content has @@ -2494,6 +2639,10 @@ problem-host.example.com since the page is not incrementally displayed.) This effect will be more noticeable on slower connections. + + This is very powerful feature, but rolling your own + filters requires a knowledge of regular expressions and HTML. + The amount of data that can be filtered is limited to the buffer-limit @@ -2502,9 +2651,12 @@ problem-host.example.com data, and all pending data, is passed through unfiltered. - Inappropriate MIME types, such as zipped files, are not filtered at all. - Encrypted SSL data (from HTTPS servers) cannot be filtered either since - this would violate the integrity of the secure transaction. + Inadequate MIME types, such as zipped files, are not filtered at all. + (Again, only text-based types except plain text). Encrypted SSL data + (from HTTPS servers) cannot be filtered either, since this would violate + the integrity of the secure transaction. In some situations it might + be necessary to protect certain text, like source code, from filtering + by defining appropriate -filter sections. At this time, Privoxy cannot (yet!) uncompress compressed @@ -2525,75 +2677,99 @@ problem-host.example.com Feedback with suggestions for new or improved filters is particularly welcome! + + The below list has only the names and a one-line description of each + predefined filter. There are more + verbose explanations of what these filters do in the filter file chapter. + - Example usage (with filters from the distribution default.filter file): + Example usage (with filters from the distribution default.filter file). + See the Predefined Filters section for + more explanation on each: + + + +filter{js-annoyances} # Get rid of particularly annoying JavaScript abuse + + + + +filter{js-events} # Kill all JS event bindings (Radically destructive! Only for extra nasty sites) + - +filter{html-annoyances} # Get rid of particularly annoying HTML abuse. + +filter{html-annoyances} # Get rid of particularly annoying HTML abuse - - +filter{js-annoyances} # Get rid of particularly annoying JavaScript abuse + + +filter{content-cookies} # Kill cookies that come in the HTML or JS content - - +filter{banners-by-size} # Kill banners based on their size for this page (very efficient!) + + +filter{refresh-tags} # Kill automatic refresh tags (for dial-on-demand setups) - - +filter{banners-by-link} # Kill banners based on the link they are contained in (experimental) + + +filter{unsolicited-popups} # Disable only unsolicited pop-up windows + + + + +filter{all-popups} # Kill all popups in JavaScript and HTML +filter{img-reorder} # Reorder attributes in <img> tags to make the banners-by-* filters more effective - - +filter{content-cookies} # Kill cookies that come sneaking in the HTML or JS content + + +filter{banners-by-size} # Kill banners by size - - +filter{popups} # Kill all popups in JS and HTML + + +filter{banners-by-link} # Kill banners by their links to known clicktrackers +filter{webbugs} # Squish WebBugs (1x1 invisible GIFs used for user tracking) - - +filter{fun} # Text replacements for subversive browsing fun! + + +filter{tiny-textforms} # Extend those tiny textareas up to 40x80 and kill the hard wrap - - +filter{frameset-borders} # Give frames a border and make them resizeable + + +filter{jumping-windows} # Prevent windows from resizing and moving themselves - - +filter{refresh-tags} # Kill automatic refresh tags (for dial-on-demand setups) + + +filter{frameset-borders} # Give frames a border and make them resizable - - +filter{nimda} # Remove Nimda (virus) code. + + +filter{demoronizer} # Fix MS's non-standard use of standard charsets +filter{shockwave-flash} # Kill embedded Shockwave Flash objects - - +filter{crude-parental} # Kill all web pages that contain the words "sex" or "warez" + + +filter{quicktime-kioskmode} # Make Quicktime movies saveable - - +filter{js-events} # Kill all JS event bindings (Radically destructive! Only for extra nasty sites) + + +filter{fun} # Text replacements for subversive browsing fun! - - +filter{demoronizer} # Fix non-standard MS font extensions for non-MS browsers + + +filter{crude-parental} # Crude parental filtering (demo only) + + + + +filter{ie-exploits} # Disable some known Internet Explorer bug exploits @@ -2998,7 +3174,7 @@ ad.doubleclick.net Typical use: - Eliminate those annoying pop-up windows + Eliminate those annoying pop-up windows (deprecated) @@ -3033,13 +3209,15 @@ ad.doubleclick.net Notes: - This action is easily confused with the built-in, hardwired filter + This action is basically a built-in, hardwired special-purpose filter action, but there are important differences: For kill-popups, the document need not be buffered, so it can be incrementally rendered while downloading. But kill-popups doesn't catch as many pop-ups as filter{popups} - does. + linkend="FILTER-ALL-POPUPS">filter{all-popups} + does and is not as smart as filter{unsolicited-popups} + is. Think of it as a fast and efficient replacement for a filter that you @@ -3050,9 +3228,12 @@ ad.doubleclick.net the kill-popups action over its filter equivalent. - Killing all pop-ups is a dangerous business. Many shops and banks rely on - pop-ups to display forms, shopping carts etc, and killing only the unwanted pop-ups - would require artificial intelligence in Privoxy. + Killing all pop-ups unconditionally is problematic. Many shops and banks rely on + pop-ups to display forms, shopping carts etc, and the filter{unsolicited-popups} + does a fairly good job of catching only the unwanted ones. + + If the only kind of pop-ups that you want to kill are exit consoles (those really nasty windows that appear when you close an other one), you might want to use @@ -3391,7 +3572,8 @@ my-internal-testing-server.void Typical use: - Allow only temporary session cookies (for the current browser session only). + Allow only temporary session cookies (for the current + browser session only). @@ -3400,8 +3582,9 @@ my-internal-testing-server.void Effect: - Deletes the expires field from Set-Cookie: server headers. - Most browsers will not store such cookies permanently and forget them in between sessions. + Deletes the expires field from Set-Cookie: + server headers. Most browsers will not store such cookies permanently and + forget them in between sessions. @@ -3530,7 +3713,8 @@ my-internal-testing-server.void target-url to send a redirect to target-url. You can redirect - to any image anywhere, even in your local filesystem (via file:/// URL). + to any image anywhere, even in your local filesystem via file:/// URL. + (But note that not all browsers support redirecting to a local file system). A good application of redirects is to use special Privoxy-built-in @@ -3660,16 +3844,16 @@ my-internal-testing-server.void # These aliases just save typing later: # (Note that some already use other aliases!) # - +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies - -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies + +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies + -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies block-as-image = +block +handle-as-image - mercy-for-cookies = -crunch-all-cookies -session-cookies-only + mercy-for-cookies = -crunch-all-cookies -session-cookies-only -filter{content-cookies} # These aliases define combinations of actions # that are useful for certain types of sites: # - fragile = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups - shop = -crunch-all-cookies -filter{popups} -kill-popups + fragile = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -kill-popups + shop = -crunch-all-cookies -filter{all-popups} -kill-popups # Short names for other aliases, for really lazy people ;-) # @@ -3703,7 +3887,7 @@ my-internal-testing-server.void # These shops require pop-ups: # - {shop -kill-popups -filter{popups}} + {shop -kill-popups -filter{all-popups}} .dabs.com .overclockers.co.uk @@ -3767,19 +3951,19 @@ that also explains why and how aliases are used: ########################################################################## {{alias}} -# These aliases just save typing later: -# (Note that some already use other aliases!) -# -+crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies --crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies -block-as-image = +block +handle-as-image -mercy-for-cookies = -crunch-all-cookies -session-cookies-only + # These aliases just save typing later: + # (Note that some already use other aliases!) + # + +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies + -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies + block-as-image = +block +handle-as-image + mercy-for-cookies = -crunch-all-cookies -session-cookies-only -filter{content-cookies} -# These aliases define combinations of actions -# that are useful for certain types of sites: -# -fragile = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups -shop = mercy-for-cookies -filter{popups} -kill-popups + # These aliases define combinations of actions + # that are useful for certain types of sites: + # + fragile = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -kill-popups + shop = -crunch-all-cookies -filter{all-popups} -kill-popups @@ -3822,20 +4006,26 @@ shop = mercy-for-cookies -filter{popups} -kill-popups +deanimate-gifs \ -downgrade-http-version \ +fast-redirects \ - +filter{html-annoyances} \ +filter{js-annoyances} \ + -filter{js-events} \ + +filter{html-annoyances} \ -filter{content-cookies} \ - +filter{popups} \ - +filter{webbugs} \ - -filter{refresh-tags} \ - -filter{fun} \ - +filter{nimda} \ + +filter{refresh-tags} \ + +filter{unsolicited-popups} \ + -filter{all-popups} \ + +filter{img-reorder} \ +filter{banners-by-size} \ -filter{banners-by-link} \ - -filter{img-reorder} \ + +filter{webbugs} \ + -filter{tiny-textforms} \ + +filter{jumping-windows} \ + -filter{frameset-borders} \ + -filter{demoronizer} \ -filter{shockwave-flash} \ + -filter{quicktime-kioskmode} \ + -filter{fun} \ -filter{crude-parental} \ - -filter{js-events} \ + +filter{ie-exploits} \ -handle-as-image \ +hide-forwarded-for-headers \ +hide-from-header{block} \ @@ -3859,8 +4049,6 @@ shop = mercy-for-cookies -filter{popups} -kill-popups like not blocking (which is understandably the default!) need exceptions, i.e. we need to specify explicitly what we want to block in later sections. - We will also want to make exceptions from our general pop-up-killing, - and use our defined aliases for that. @@ -3902,13 +4090,15 @@ shop = mercy-for-cookies -filter{popups} -kill-popups .scan.co.uk + + The fast-redirects action, which we enabled per default above, breaks some sites. So disable @@ -4115,6 +4307,7 @@ www.ugu.com/sui/ugu/adv user.action + So far we are painting with a broad brush by setting general policies, which would be a reasonable starting point for many people. Now, @@ -4162,14 +4355,14 @@ www.ugu.com/sui/ugu/adv +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies allow-all-cookies = -crunch-all-cookies -session-cookies-only - allow-popups = -filter{popups} -kill-popups + allow-popups = -filter{all-popups} -kill-popups +block-as-image = +block +handle-as-image -block-as-image = -block # These aliases define combinations of actions that are useful for # certain types of sites: # -fragile = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups +fragile = -block -crunch-all-cookies -filter -fast-redirects -hide-referrer -kill-popups shop = -crunch-all-cookies allow-popups # Allow ads for selected useful free sites: @@ -4191,43 +4384,40 @@ allow-ads = -block -filter{banners-by-size} -filter{banners-by-link} { allow-all-cookies } +sourceforge.net sunsolve.sun.com -slashdot.org +.slashdot.org .yahoo.com .msdn.microsoft.com .redhat.com - Your bank needs popups and is allergic to some filter, but you don't - know which, so you disable them all: + Your bank is allergic to some filter, but you don't know which, so you disable them all: -{ -filter -kill-popups } +{ -filter } .your-home-banking-site.com - Some hosts and some file types you may not want to filter. - Privoxy makes no distinctions between regular web - pages and downloads done via your web browser if it is an html or text type - document. + Some file types you may not want to filter for various reasons: -{ -filter } -localhost -apache_server.mylan - -# A list of common file extensions that are likely to indicate raw text, and best -# if unfiltered. -/(.*/)?.*\.(pl|(s|p)?h|c(c|xx|pp)?|tcl|am|init?|cfg?|conf(ig)?|txt|rc|bat)$ +# Technical documentation is likely to contain strings that might +# erroneously get altered by the JavaScript-oriented filters: +# +.tldp.org +/(.*/)?selfhtml/ -# Documentation should not need filtering (at least on some sites). -.tldp.org +# And this stupid host sends streaming video with a wrong MIME type, +# so that Privoxy thinks it is getting HTML and starts filtering: +# +stupid-server.example.com/ @@ -4245,30 +4435,27 @@ apache_server.mylan { +block } www.example.com/nasty-ads/sponsor.gif -another.popular.site.net/more/junk/here/ - -# Here we found one that is not in Privoxy's default blocked list: -.adfactory.net +another.popular.site.net/more/junk/here/ - To force URLs that tend to have ad images, but it is difficult for - Privoxy to know this since the ultimate returned - object is obscured for one reason or another, we can try to force these to be - treated as images (and thus avoid Privoxy's - BLOCKED banner page). Note that if what is returned by the - server turns out NOT to be an image, then your browser typically will display - a broken icon image. Use cautiously. + The URLs of dynamically generated banners, especially from large banner + farms, often don't use the well-known image file name extensions, which + makes it impossible for Privoxy to guess + the file type just by looking at the URL. + You can use the +block-as-image alias defined above for + these cases. + Note that objects which match this rule but then turn out NOT to be an + image are typically rendered as a broken image icon by the + browser. Use cautiously. { +block-as-image } -# A shockwave ad, very annoying. -.trip.com/.*\.swf .doubleclick.net /Realmedia/ads/ -adremote. +ar.atwola.com/ @@ -4381,11 +4568,11 @@ adremote. - Filtering works on any text-based document type, including plain - text, HTML, JavaScript, CSS etc. (all text/* - MIME types). Substitutions are made at the source level, so if - you want to roll your own filters, you should be - familiar with HTML syntax. + Filtering works on any text-based document type, including + HTML, JavaScript, CSS etc. (all text/* + MIME types, except text/plain). + Substitutions are made at the source level, so if you want to roll + your own filters, you should be familiar with HTML syntax. @@ -4442,6 +4629,7 @@ adremote. The below examples might also help to get you started. + Filter File Tutorial @@ -4668,6 +4856,349 @@ s* industry[ -]leading \ You get the idea? + + + + +The Pre-defined Filters + + + + +The distribution default.filter file contains a selection of +pre-defined filters for your convenience: + + + + + js-annoyances + + + The purpose of this filter is to get rid of particularly annoying JavaScript abuse. + To that end, it + + + + replaces JavaScript references to the browser's referrer information + with the string "Not Your Business!". This compliments the hide-referrer action on the content level. + + + + + removes the bindings to the DOM's + unload + event which we feel has no right to exist and is responsible for most exit consoles, i.e. + nasty windows that pop up when you close another one. + + + + + removes code that causes new windows to be opened with undesired properties, such as being + full-screen, non-resizable, without location, status or menu bar etc. + + + + + + + + + js-events + + + This is a very radical measure. It removes virtually all JavaScript event bindings, which + means that scripts can not react to user actions such as mouse movements or clicks, window + resizing etc, anymore. + + + We strongly discourage using this filter as a default since it breaks + many legitimate scripts. It is meant for use only on extra-nasty sites (should you really + need to go there). + + + + + + html-annoyances + + + This filter will undo many common instances of HTML based abuse. + + + The BLINK and MARQUEE tags + are neutralized (yeah baby!), and browser windows will be created as + resizable (as of course they should be!), and will have location, + scroll and menu bars -- even if specified otherwise. + + + + + + content-cookies + + + Most cookies are set in the HTTP dialogue, where they can be intercepted + by the + crunch-incoming-cookies + and crunch-outgoing-cookies + actions. But web sites increasingly make use of HTML meta tags and JavaScript + to sneak cookies to the browser on the content level. + + + This filter disables HTML and JavaScript code that reads or sets cookies. Use + it wherever you would also use the cookie crunch actions. + + + + + + refresh tags + + + Disable any refresh tags if the interval is greater than nine seconds (so + that redirections done via refresh tags are not destroyed). This is useful + for dial-on-demand setups, or for those who find this HTML feature + annoying. + + + + + + unsolicited-popups + + + This filter attempts to prevent only unsolicited pop-up + windows from opening, yet still allow pop-up windows that the user + has explicitly chosen to open. It was added in version 3.0.1, + as an improvement over earlier such filters. + + + Technical note: The filter works by redefining the window.open JavaScript + function to a dummy function during the loading and rendering phase of each + HTML page access, and restoring the function afterwards. + + + + + + all-popups + + + Attempt to prevent all pop-up windows from opening. + Note this should be used with more discretion than the above, since it is + more likely to break some sites that require pop-ups for normal usage. Use + with caution. + + + + + + img-reorder + + + This is a helper filter that has no value if used alone. It makes the + banners-by-size and banners-by-link + (see below) filters more effective and should be enabled together with them. + + + + + + banners-by-size + + + This filter removes image tags purely based on what size they are. Fortunately + for us, many ads and banner images tend to conform to certain standardized + sizes, which makes this filter quite effective for ad stripping purposes. + + + Occasionally this filter will cause false positives on images that are not ads, + but just happen to be of one of the standard banner sizes. + + + + + + banners-by-link + + + This is an experimental filter that attempts to kill any banners if + their URLs seem to point to known or suspected click trackers. It is currently + not of much value and is not recommended for use by default. + + + + + + webbugs + + + Webbugs are small, invisible images (technically 1X1 GIF images), that + are used to track users across websites, and collect information on them. + As an HTML page is loaded by the browser, an embedded image tag causes the + browser to contact a third-party site, disclosing the tracking information + through the requested URL and/or cookies for that third-party domain, without + the use ever becoming aware of the interaction with the third-party site. + HTML-ized spam also uses a similar technique to verify email addresses. + + + This filter removes the HTML code that loads such webbugs. + + + + + + tiny-textforms + + + A rather special-purpose filter that can be used to enlarge textareas (those + multi-line text boxes in web forms) and turn off hard word wrap in them. + It was written for the sourceforge.net tracker system where such boxes are + a nuisance, but it can be handy on other sites, too. + + + It is not recommended to use this filter as a default. + + + + + + jumping-windows + + + Many consider windows that move, or resize themselves to be abusive. This filter + neutralizes the related JavaScript code. Note that some sites might not display + or behave as intended when using this filter. + + + + + + frameset-borders + + + Some web designers seem to assume that everyone in the world will view their + web sites using the same browser brand and version, screen resolution etc, + because only that assumption could explain why they'd use static frame sizes, + yet prevent their frames from being resized by the user, should they be too + small to show their whole content. + + + This filter removes the related HTML code. It should only be applied to sites + which need it. + + + + + + demoronizer + + + Many Microsoft products that generate HTML use non-standard extensions (read: + violations) of the ISO 8859-1 aka Latin-1 character set. This causes those + HTML documents to display with errors on standard-compliant platforms. + + + This filter translates the MS-only characters into Latin-1 equivalents. + It is not necessary when using MS products, and will cause corruption of + all documents that use 8-bit character sets other than Latin-1. It's mostly + worthwhile for Europeans on non-MS platforms, if wierd garbage characters + sometimes appear on some pages. + + + + + + shockwave-flash + + + A filter for shockwave haters. As the name suggests, this filter strips code + out of web pages that is used to embed shockwave flash objects. + + + + + + + + quicktime-kioskmode + + + Change HTML code that embeds Quicktime objects so that kioskmode, which + prevents saving, is disabled. + + + + + + fun + + + Text replacements for subversive browsing fun. Make fun of your favorite + Monopolist or play buzzword bingo. + + + + + + crude-parental + + + A demonstration-only filter that shows how Privoxy + can be used to delete web content on a keyword basis. + + + + + + ie-exploits + + + A collection of text replacements to disable malicious HTML and JavaScript + code that exploits known security holes in Internet Explorer. + + + Presently, it only protects against Nimda and a cross-site scripting bug, and + would need active maintenance to provide more substantial protection. + + + + + + site-specifics + + + Some web sites have very specific problems, the cure for which doesn't apply + anywhere else, or could even cause damage on other sites. + + + This is a collection of such site-specific cures which should only be applied + to the sites they were intended for, which is what the supplied + default.action file does. Users shouldn't need to change + anything regarding this filter. + + + + + + +
@@ -4720,7 +5251,7 @@ s* industry[ -]leading \ blocks of HTML code disappear when a specific symbol is set. We use this for many purposes, one of them being to include the beta warning in all our user interface (CGI) pages when Privoxy - in in an alpha or beta development stage: + is in an alpha or beta development stage: @@ -5764,32 +6295,88 @@ In file: user.action [ View ] [ Edit ] + - - + + - + @@ -20,9 +20,9 @@ This file belongs into ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/ - $Id: index.sgml,v 1.16.2.8 2002/08/16 03:05:42 hal9 Exp $ + $Id: index.sgml,v 1.16.2.12 2004/01/30 14:33:41 oes Exp $ - Copyright (C) 2001, 2002 Privoxy Developers + Copyright (C) 2001 - 2004 Privoxy Developers See LICENSE. ======================================================================== @@ -59,6 +59,15 @@ + + + This is here to keep vim syntax file from breaking :/ + If I knew enough to fix it, I would. + PLEASE DO NOT REMOVE! HB: hal@foobox.net + + +]]> &p-intro; @@ -66,7 +75,7 @@ - The most recent release is &p-version; (&p-status;). + The most recent release is &p-version; (&p-status;). ]]> @@ -86,7 +95,7 @@ - Download the latest CVS snapshot (source tarball) + Download the latest CVS snapshot (source tarball) @@ -117,7 +126,7 @@ + The above docs as PDF in Zip archive @@ -213,9 +222,11 @@ ]]> + + - Copyright © 2001, 2002 by Privoxy Developers + Copyright __copy 2001 - 2004 by Privoxy Developers @@ -242,6 +253,18 @@ Temple Place - Suite 330, Boston, MA 02111-1307, USA. $Log: index.sgml,v $ + Revision 1.16.2.12 2004/01/30 14:33:41 oes + Vi(m) syntax voodoo now hidden; copyright updated + + Revision 1.16.2.11 2003/08/16 12:16:30 hal9 + Update cvs tarball URL (to bz2) + + Revision 1.16.2.10 2003/03/28 03:33:09 hal9 + Include link for announce.txt, and change handling of ©. + + Revision 1.16.2.9 2003/03/26 02:03:45 oes + Updated hard-coded copyright dates + Revision 1.16.2.8 2002/08/16 03:05:42 hal9 Put all pdf docs in a zip archive now. diff --git a/doc/text/developer-manual.txt b/doc/text/developer-manual.txt index c65e06f4..9b7c46ee 100644 --- a/doc/text/developer-manual.txt +++ b/doc/text/developer-manual.txt @@ -1,8 +1,8 @@ Privoxy Developer Manual -Copyright © 2001, 2002 by Privoxy Developers +[ Copyright © 2001, 2002 by Privoxy Developers ] -$Id: developer-manual.sgml,v 2.3 2002/09/05 02:27:59 hal9 Exp $ +$Id: developer-manual.txt,v 1.32.2.7 2004/01/30 23:46:56 oes Exp $ The developer manual provides guidance on coding, testing, packaging, documentation and other issues of importance to those involved with Privoxy @@ -10,7 +10,7 @@ development. It is mandatory (and helpful!) reading for anyone who wants to join the team. Please note that this document is constantly evolving. This copy represents the -state at the release of version 3.1.1. You can find the latest version of the +state at the release of version 3.0.3. You can find the latest version of the this manual at http://www.privoxy.org/developer-manual/. Please see the Contact section on how to contact the developers. @@ -18,26 +18,26 @@ section on how to contact the developers. Table of Contents 1. Introduction - + 1.1. Quickstart to Privoxy Development - + 2. The CVS Repository - + 2.1. Access to CVS 2.2. Branches 2.3. CVS Commit Guidelines - + 3. Documentation Guidelines - + 3.1. Quickstart to Docbook and SGML 3.2. Privoxy Documentation Style 3.3. Privoxy Custom Entities - + 4. Coding Guidelines - + 4.1. Introduction 4.2. Using Comments - + 4.2.1. Comment, Comment, Comment 4.2.2. Use blocks for comments 4.2.3. Keep Comments on their own line @@ -45,17 +45,17 @@ Table of Contents 4.2.5. Comment All Functions Thoroughly 4.2.6. Comment at the end of braces if the content is more than one screen length - + 4.3. Naming Conventions - + 4.3.1. Variable Names 4.3.2. Function Names 4.3.3. Header file prototypes 4.3.4. Enumerations, and #defines 4.3.5. Constants - + 4.4. Using Space - + 4.4.1. Put braces on a line by themselves. 4.4.2. ALL control statements should have a block 4.4.3. Do not belabor/blow-up boolean expressions @@ -63,13 +63,13 @@ Table of Contents 4.4.5. Don't use white space around structure operators 4.4.6. Make the last brace of a function stand out 4.4.7. Use 3 character indentions - + 4.5. Initializing - + 4.5.1. Initialize all variables - + 4.6. Functions - + 4.6.1. Name functions that return a boolean as a question. 4.6.2. Always specify a return type for a function. 4.6.3. Minimize function calls when iterating by using variables @@ -80,9 +80,9 @@ Table of Contents 4.6.8. Use `extern "C"` when appropriate 4.6.9. Where Possible, Use Forward Struct Declaration Instead of Includes - + 4.7. General Coding Practices - + 4.7.1. Turn on warnings 4.7.2. Provide a default case for all switch statements 4.7.3. Try to avoid falling through cases in a switch statement. @@ -94,20 +94,20 @@ Table of Contents 'free' 4.7.9. Add loaders to the `file_list' structure and in order 4.7.10. "Uncertain" new code and/or changes to existing code, use FIXME - + 4.8. Addendum: Template for files and function comment blocks: - + 5. Testing Guidelines - + 5.1. Testplan for releases 5.2. Test reports - + 6. Releasing a New Version - + 6.1. Version numbers 6.2. Before the Release: Freeze 6.3. Building and Releasing the Packages - + 6.3.1. Note on Privoxy Packaging 6.3.2. Source Tarball 6.3.3. SuSE, Conectiva or Red Hat RPM @@ -120,24 +120,24 @@ Table of Contents 6.3.10. HP-UX 11 6.3.11. Amiga OS 6.3.12. AIX - + 6.4. Uploading and Releasing Your Package 6.5. After the Release - + 7. Update the Webserver 8. Contacting the developers, Bug Reporting and Feature Requests - + 8.1. Get Support 8.2. Report Bugs 8.3. Request New Features 8.4. Report Ads or Other Actions-Related Problems 8.5. Other - + 9. Privoxy Copyright, License and History - + 9.1. License 9.2. History - + 10. See also 1. Introduction @@ -155,24 +155,27 @@ porting, are all important jobs as well. 1.1. Quickstart to Privoxy Development -You'll need an account on Sourceforge to support our development. Mail your ID -to the list and wait until a project manager has added you. +The first step is to join the developer's mailing list. You can submit your +ideas, or even better patches. Patches are best submitted to the Sourceforge +tracker set up for this purpose, but can be sent to the list for review too. You will also need to have a cvs package installed, which will entail having ssh installed as well (which seems to be a requirement of SourceForge), in order to access the cvs repository. Having the GNU build tools is also going to be important (particularly, autoconf and gmake). -For the time being (read, this section is under construction), please refer to -the extensive comments in the source code. +For the time being (read, this section is under construction), you can also +refer to the extensive comments in the source code. In fact, reading the code +is recommended in any case. ------------------------------------------------------------------------------- 2. The CVS Repository -If you intend to help us with programming, documentation or packaging you will -need write access to our holy grail, the CVS repository. Please read this -chapter completely before accessing via CVS. +If you become part of the active development team, you will eventually need +write access to our holy grail, the CVS repository. One of the team members +will need to set this up for you. Please read this chapter completely before +accessing via CVS. ------------------------------------------------------------------------------- @@ -197,13 +200,19 @@ visualizing how these pieces fit together. Branches are used to fork a sub-development path from the main trunk. Within the current module where the sources are, there is always at least one "branch" from the main trunk devoted to a stable release series. The main trunk is where -active development takes place for the next stable series (e.g. 3.2.x). And for -testing bugfixes for the stable series. Just prior to each stable series (e.g. -3.0.x), a branch is created just for stable series releases (e.g. 3.0.0 -> -3.0.1 -> 3.0.2, etc). Once the initial stable release of any stable branch has -taken place, this branch is only used for bugfixes, which have had prior -testing before being committed to CVS. (See Version Numbers below for details -on versioning.) +active development takes place for the next stable series (e.g. 3.2.x). So just +prior to each stable series (e.g. 3.0.x), a branch is created just for stable +series releases (e.g. 3.0.0 -> 3.0.1 -> 3.0.2, etc). Once the initial stable +release of any stable branch has taken place, this branch is only used for +bugfixes, which have had prior testing before being committed to CVS. (See +Version Numbers below for details on versioning.) + +This will result in at least two active branches, which means there may be +occasions that require the same (or similar) item to be checked into to two +different places (assuming its a bugfix and needs fixing in both the stable and +unstable trees). This also means that in order to have access to both trees, +both will have to be checked out separately. Use the cvs -r flag to check out a +branch, e.g: cvs co -r v_3_0_branch current. ------------------------------------------------------------------------------- @@ -220,49 +229,43 @@ Basic Guidelines, for all branches: * Never (read: never, ever) be tempted to commit that small change without testing it thoroughly first. When we're close to a public release, ask a fellow developer to review your changes. - + * Your commit message should give a concise overview of what you changed (no big details) and why you changed it Just check previous messages for good examples. - + * Don't use the same message on multiple files, unless it equally applies to all those files. - + * If your changes span multiple files, and the code won't recompile unless all changes are committed (e.g. when changing the signature of a function), then commit all files one after another, without long delays in between. If necessary, prepare the commit messages in advance. - + * Before changing things on CVS, make sure that your changes are in line with the team's general consensus on what should be done. - + * Note that near a major public release, we get more cautious. There is always the possibility to submit a patch to the patch tracker instead. - -Stable branches are handled with decidedly more care, especially after the -initial *.*.0 release, and we are just in bugfix mode. In addition to the -above, the below applies only to the stable branch (currently the -v_3_0_branchpoint branch): - - * Do not commit anything into the stable branch, unless immediately before a - new release! There needs to be testing done before it hits CVS, and to - ensure that all changes are appropriate just to fix whatever the problem - is. - + +Stable branches are handled with more care, especially after the initial *.*.0 +release, and we are just in bugfix mode. In addition to the above, the below +applies only to the stable branch (currently the v_3_0_branch branch): + + * Do not commit anything unless your proposed changes have been well tested + first, preferably by other members of the project, or have prior approval + of the project leaders or consensus of the devel list. + * Where possible, bugfixes and changes should be tested in the main development trunk first. There may be occasions where this is not feasible, though. - + * Alternately, proposed changes can be submitted as patches to the patch tracker on Sourceforge first: http://sourceforge.net/tracker/?group_id= 11118&atid=311118. Then ask for peer review. - - * Do not commit anything unless your proposed changes have been well tested - first, by other members of the project, and have prior approval of the - project leaders or consensus of the devel list. - + * Do not even think about anything except bugfixes. No new features! - + ------------------------------------------------------------------------------- 3. Documentation Guidelines @@ -270,7 +273,7 @@ v_3_0_branchpoint branch): All formal documents are maintained in Docbook SGML and located in the doc/ source/* directory. You will need Docbook, the Docbook DTD's and the Docbook modular stylesheets (or comparable alternatives), and either jade or openjade -(recommended) installed in order to build docs from source. Currently there is +(recommended) installed in order to build docs from source. Currently there is user-manual, FAQ, and, of course this, the developer-manual in this format. The README, AUTHORS privoxy.1 (man page), and config files are also now maintained as Docbook SGML. These files, when built, in the top-level source directory are @@ -307,10 +310,10 @@ How do you update the webserver (i.e. the pages on privoxy.org)? 1. First, build the docs by running make dok (or alternately make redhat-dok). For PDF docs, do make dok-pdf. - + 2. Run make webserver which copies all files from doc/webserver to the sourceforge webserver via scp. - + Finished docs should be occasionally submitted to CVS (doc/webserver/*/*.html) so that those without the ability to build them locally, have access to them if needed. This is especially important just prior to a new release! Please do @@ -346,17 +349,17 @@ sufficient for our purposes. Some common elements that you likely will use: -, paragraph delimiter. Most text needs to be within paragraph -elements (there are some exceptions). -, the stylesheets make this italics. -, files and directories. -, command examples. -, like
, more or less.                     
-, list with bullets.                              
-, member of the above.                                    
-, screen output, implies .                     
-, like HTML  tag.                          
-, for, doh, quoting text.                                       
+, paragraph delimiter. Most text needs to be within paragraph
+elements (there are some exceptions).
+, the stylesheets make this italics.
+, files and directories.
+, command examples.
+, like 
, more or less.
+, list with bullets.
+, member of the above.
+, screen output, implies .
+, like HTML  tag.
+, for, doh, quoting text.
 
 Look at any of the existing docs for examples of all these and more.
 
@@ -374,23 +377,23 @@ fashion.
 Here it is:
 
   * All tags should be lower case.
-   
+
   * Tags delimiting a block of text (even small blocks) should be on their own
     line. Like:
-   
+
      
       Some text goes here.
      
            
-   
+
     Tags marking individual words, or few words, should be in-line:
-   
+
       Just to emphasize, some text goes here.
            
-   
+
   * Tags should be nested and step indented for block text like: (except
     in-line tags)
-   
+
      
       
        
@@ -401,39 +404,39 @@ Here it is:
       
      
            
-   
+
     This makes it easier to find the text amongst the tags ;-)
-   
+
   * Use white space to separate logical divisions within a document, like
     between sections. Running everything together consistently makes it harder
     to read and work on.
-   
+
   * Do not hesitate to make comments. Comments can either use the 
     element, or the  style comment familiar from HTML. (Note in Docbook
     v4.x  is replaced by .)
-   
+
   * We have an international audience. Refrain from slang, or English
     idiosyncrasies (too many to list :). Humor also does not translate well
     sometimes.
-   
+
   * Try to keep overall line lengths in source files to 80 characters or less
     for obvious reasons. This is not always possible, with lengthy URLs for
     instance.
-   
+
   * Our documents are available in differing formats. Right now, they are just
     plain text, TML, and PDF, but others are always a future possibility. Be
     careful with URLs (), and avoid this mistake:
-   
+
     My favorite site is here.
-   
+
     This will render as "My favorite site is here", which is not real helpful
     in a text doc. Better like this:
-   
+
     My favorite site is example.com.
-   
+
   * All documents should be spell checked occasionally. aspell can check SGML
     with the -H option. (ispell I think too.)
-   
+
 -------------------------------------------------------------------------------
 
 3.3. Privoxy Custom Entities
@@ -455,24 +458,24 @@ re-setting with each release (done by the Makefile). A sampling of custom
 entities are listed below. See any of the main docs for examples.
 
   * Re- "boilerplate" text entities are defined like:
-   
+
     
-   
+
     In this example, the contents of the file, supported.sgml is available for
     inclusion anywhere in the doc. To make this happen, just reference the now
     defined entity: &supported; (starts with an ampersand and ends with a
     semi-colon), and the contents will be dumped into the finished doc at that
     point.
-   
+
   * Commonly used "internal entities":
-   
-    p-version: the Privoxy version string, e.g. "3.1.1".                       
-    p-status: the project status, either "alpha", "beta", or "stable".         
-    p-not-stable: use to conditionally include text in "not stable" releases   
-    (e.g. "beta").                                                             
-    p-stable: just the opposite.                                               
-    p-text: this doc is only generated as text.                                
-   
+
+    p-version: the Privoxy version string, e.g. "3.0.3".
+    p-status: the project status, either "alpha", "beta", or "stable".
+    p-not-stable: use to conditionally include text in "not stable" releases
+    (e.g. "beta").
+    p-stable: just the opposite.
+    p-text: this doc is only generated as text.
+
 There are others in various places that are defined for a specific purpose.
 Read the source!
 
@@ -512,21 +515,22 @@ programming error is occurring.
 
 Example:
 
-/* if page size greater than 1k ... */                                         
-if ( PageLength() > 1024 )                                                     
-{                                                                              
-    ... "block" the page up ...                                                
-}                                                                              
-                                                                               
-/* if page size is small, send it in blocks */                                 
-if ( PageLength() > 1024 )                                                     
-{                                                                              
-    ... "block" the page up ...                                                
-}                                                                              
-                                                                               
-This demonstrates 2 cases of "what not to do".  The first is a                 
-"syntax comment".  The second is a comment that does not fit what              
-is actually being done.                                                        
+/* if page size greater than 1k ... */
+if ( PageLength() > 1024 )
+{
+    ... "block" the page up ...
+}
+
+/* if page size is small, send it in blocks */
+if ( PageLength() > 1024 )
+{
+    ... "block" the page up ...
+}
+
+This demonstrates 2 cases of "what not to do".  The first is a
+"syntax comment".  The second is a comment that does not fit what
+is actually being done.
+
 
 -------------------------------------------------------------------------------
 
@@ -541,26 +545,27 @@ surrounding the code with a clear, definable pattern.
 
 Example:
 
-/*********************************************************************         
- * This will stand out clearly in your code!                                   
- *********************************************************************/        
-if ( thisVariable == thatVariable )                                            
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-}                                                                              
-                                                                               
-                                                                               
-/* unfortunately, this may not */                                              
-if ( thisVariable == thatVariable )                                            
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-}                                                                              
-                                                                               
-                                                                               
-if ( thisVariable == thatVariable ) /* this may not either */                  
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-}                                                                              
+/*********************************************************************
+ * This will stand out clearly in your code!
+ *********************************************************************/
+if ( thisVariable == thatVariable )
+{
+   DoSomethingVeryImportant();
+}
+
+
+/* unfortunately, this may not */
+if ( thisVariable == thatVariable )
+{
+   DoSomethingVeryImportant();
+}
+
+
+if ( thisVariable == thatVariable ) /* this may not either */
+{
+   DoSomethingVeryImportant();
+}
+
 
 Exception:
 
@@ -583,40 +588,41 @@ used to comment parameters.
 
 Example:
 
-/*********************************************************************         
- * This will stand out clearly in your code,                                   
- * But the second example won't.                                               
- *********************************************************************/        
-if ( thisVariable == thatVariable )                                            
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-}                                                                              
-                                                                               
-if ( thisVariable == thatVariable ) /*can you see me?*/                        
-{                                                                              
-   DoSomethingVeryImportant(); /*not easily*/                                  
-}                                                                              
-                                                                               
-                                                                               
-/*********************************************************************         
- * But, the encouraged exceptions:                                             
- *********************************************************************/        
-int urls_read     = 0;     /* # of urls read + rejected */                     
-int urls_rejected = 0;     /* # of urls rejected */                            
-                                                                               
-if ( 1 == X )                                                                  
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-}                                                                              
-                                                                               
-                                                                               
-short DoSomethingVeryImportant(                                                
-   short firstparam,   /* represents something */                              
-   short nextparam     /* represents something else */ )                       
-{                                                                              
-   ...code here...                                                             
-                                                                               
-}   /* -END- DoSomethingVeryImportant */                                       
+/*********************************************************************
+ * This will stand out clearly in your code,
+ * But the second example won't.
+ *********************************************************************/
+if ( thisVariable == thatVariable )
+{
+   DoSomethingVeryImportant();
+}
+
+if ( thisVariable == thatVariable ) /*can you see me?*/
+{
+   DoSomethingVeryImportant(); /*not easily*/
+}
+
+
+/*********************************************************************
+ * But, the encouraged exceptions:
+ *********************************************************************/
+int urls_read     = 0;     /* # of urls read + rejected */
+int urls_rejected = 0;     /* # of urls rejected */
+
+if ( 1 == X )
+{
+   DoSomethingVeryImportant();
+}
+
+
+short DoSomethingVeryImportant(
+   short firstparam,   /* represents something */
+   short nextparam     /* represents something else */ )
+{
+   ...code here...
+
+}   /* -END- DoSomethingVeryImportant */
+
 
 -------------------------------------------------------------------------------
 
@@ -669,19 +675,20 @@ use following a closing brace: } /* -END- if() or while () or etc... */
 
 Example:
 
-if ( 1 == X )                                                                  
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-   ...some long list of commands...                                            
-} /* -END- if x is 1 */                                                        
-                                                                               
-or:                                                                            
-                                                                               
-if ( 1 == X )                                                                  
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-   ...some long list of commands...                                            
-} /* -END- if ( 1 == X ) */                                                    
+if ( 1 == X )
+{
+   DoSomethingVeryImportant();
+   ...some long list of commands...
+} /* -END- if x is 1 */
+
+or:
+
+if ( 1 == X )
+{
+   DoSomethingVeryImportant();
+   ...some long list of commands...
+} /* -END- if ( 1 == X ) */
+
 
 -------------------------------------------------------------------------------
 
@@ -699,11 +706,13 @@ port Privoxy to C++.
 
 Example:
 
-int ms_iis5_hack = 0;                                                          
+int ms_iis5_hack = 0;
+
 
 Instead of:
 
-int msiis5hack = 0; int msIis5Hack = 0;                                        
+int msiis5hack = 0; int msIis5Hack = 0;
+
 
 -------------------------------------------------------------------------------
 
@@ -719,12 +728,14 @@ port Privoxy to C++.
 
 Example:
 
-int load_some_file( struct client_state *csp )                                 
+int load_some_file( struct client_state *csp )
+
 
 Instead of:
 
-int loadsomefile( struct client_state *csp )                                   
-int loadSomeFile( struct client_state *csp )                                   
+int loadsomefile( struct client_state *csp )
+int loadSomeFile( struct client_state *csp )
+
 
 -------------------------------------------------------------------------------
 
@@ -737,14 +748,16 @@ the same parameter name in the header file that you use in the c file.
 
 Example:
 
-(.h) extern int load_aclfile( struct client_state *csp );                      
-(.c) int load_aclfile( struct client_state *csp )                              
+(.h) extern int load_aclfile( struct client_state *csp );
+(.c) int load_aclfile( struct client_state *csp )
+
 
 Instead of:
 
-(.h) extern int load_aclfile( struct client_state * ); or                      
-(.h) extern int load_aclfile();                                                
-(.c) int load_aclfile( struct client_state *csp )                              
+(.h) extern int load_aclfile( struct client_state * ); or
+(.h) extern int load_aclfile();
+(.c) int load_aclfile( struct client_state *csp )
+
 
 -------------------------------------------------------------------------------
 
@@ -758,8 +771,9 @@ and system headers.)
 
 Example:
 
-(enumeration) : enum Boolean { FALSE, TRUE };                                  
-(#define) : #define DEFAULT_SIZE 100;                                          
+(enumeration) : enum Boolean { FALSE, TRUE };
+(#define) : #define DEFAULT_SIZE 100;
+
 
 Note: We have a standard naming scheme for #defines that toggle a feature in
 the preprocessor: FEATURE_>, where > is a short (preferably 1 or 2 word)
@@ -767,11 +781,12 @@ description.
 
 Example:
 
-#define FEATURE_FORCE 1                                                        
-                                                                               
-#ifdef FEATURE_FORCE                                                           
-#define FORCE_PREFIX blah                                                      
-#endif /* def FEATURE_FORCE */                                                 
+#define FEATURE_FORCE 1
+
+#ifdef FEATURE_FORCE
+#define FORCE_PREFIX blah
+#endif /* def FEATURE_FORCE */
+
 
 -------------------------------------------------------------------------------
 
@@ -789,15 +804,17 @@ terminate a name with an underscore.
 
 Example:
 
-#define USE_IMAGE_LIST 1                                                       
+#define USE_IMAGE_LIST 1
+
 
 Instead of:
 
-#define USE_IMG_LST 1 or                                                       
-#define _USE_IMAGE_LIST 1 or                                                   
-#define USE_IMAGE_LIST_ 1 or                                                   
-#define use_image_list 1 or                                                    
-#define UseImageList 1                                                         
+#define USE_IMG_LST 1 or
+#define _USE_IMAGE_LIST 1 or
+#define USE_IMAGE_LIST_ 1 or
+#define use_image_list 1 or
+#define UseImageList 1
+
 
 -------------------------------------------------------------------------------
 
@@ -814,10 +831,11 @@ block.
 
 Example:
 
-if ( this == that )                                                            
-{                                                                              
-   ...                                                                         
-}                                                                              
+if ( this == that )
+{
+   ...
+}
+
 
 Instead of:
 
@@ -836,13 +854,14 @@ Status: developer-discretion.
 
 Example exception:
 
-while ( more lines are read )                                                  
-{                                                                              
-   /* Please document what is/is not a comment line here */                    
-   if ( it's a comment ) continue;                                             
-                                                                               
-   do_something( line );                                                       
-}                                                                              
+while ( more lines are read )
+{
+   /* Please document what is/is not a comment line here */
+   if ( it's a comment ) continue;
+
+   do_something( line );
+}
+
 
 -------------------------------------------------------------------------------
 
@@ -855,11 +874,12 @@ to error. All control statements should have a block defined.
 
 Example:
 
-if ( this == that )                                                            
-{                                                                              
-   DoSomething();                                                              
-   DoSomethingElse();                                                          
-}                                                                              
+if ( this == that )
+{
+   DoSomething();
+   DoSomethingElse();
+}
+
 
 Instead of:
 
@@ -880,7 +900,8 @@ above also applies.
 
 Example:
 
-structure->flag = ( condition );                                               
+structure->flag = ( condition );
+
 
 Instead of:
 
@@ -901,14 +922,15 @@ in the next guideline.
 
 Example:
 
-int firstValue   = 0;                                                          
-int someValue    = 0;                                                          
-int anotherValue = 0;                                                          
-int thisVariable = 0;                                                          
-                                                                               
-if ( thisVariable == thatVariable )                                            
-                                                                               
-firstValue = oldValue + ( ( someValue - anotherValue ) - whatever )            
+int firstValue   = 0;
+int someValue    = 0;
+int anotherValue = 0;
+int thisVariable = 0;
+
+if ( thisVariable == thatVariable )
+
+firstValue = oldValue + ( ( someValue - anotherValue ) - whatever )
+
 
 -------------------------------------------------------------------------------
 
@@ -925,9 +947,10 @@ variable/function name is not as clear.
 
 Example:
 
-aStruct->aMember;                                                              
-aStruct.aMember;                                                               
-FunctionName();                                                                
+aStruct->aMember;
+aStruct.aMember;
+FunctionName();
+
 
 Instead of: aStruct -> aMember; aStruct . aMember; FunctionName ();
 
@@ -937,17 +960,18 @@ Instead of: aStruct -> aMember; aStruct . aMember; FunctionName ();
 
 Example:
 
-int function1( ... )                                                           
-{                                                                              
-   ...code...                                                                  
-   return( retCode );                                                          
-                                                                               
-}   /* -END- function1 */                                                      
-                                                                               
-                                                                               
-int function2( ... )                                                           
-{                                                                              
-}   /* -END- function2 */                                                      
+int function1( ... )
+{
+   ...code...
+   return( retCode );
+
+}   /* -END- function1 */
+
+
+int function2( ... )
+{
+}   /* -END- function2 */
+
 
 Instead of:
 
@@ -968,32 +992,34 @@ of function comments.
 
 Explanation:
 
-If some use 8 character TABs and some use 3 character TABs, the code can look *
-very* ragged. So use 3 character indentions only. If you like to use TABs, pass
-your code through a filter such as "expand -t3" before checking in your code.
+If some use 8 character TABs and some use 3 character TABs, the code can look
+*very* ragged. So use 3 character indentions only. If you like to use TABs,
+pass your code through a filter such as "expand -t3" before checking in your
+code.
 
 Example:
 
-static const char * const url_code_map[256] =                                  
-{                                                                              
-   NULL, ...                                                                   
-};                                                                             
-                                                                               
-                                                                               
-int function1( ... )                                                           
-{                                                                              
-   if ( 1 )                                                                    
-   {                                                                           
-      return( ALWAYS_TRUE );                                                   
-   }                                                                           
-   else                                                                        
-   {                                                                           
-      return( HOW_DID_YOU_GET_HERE );                                          
-   }                                                                           
-                                                                               
-   return( NEVER_GETS_HERE );                                                  
-                                                                               
-}                                                                              
+static const char * const url_code_map[256] =
+{
+   NULL, ...
+};
+
+
+int function1( ... )
+{
+   if ( 1 )
+   {
+      return( ALWAYS_TRUE );
+   }
+   else
+   {
+      return( HOW_DID_YOU_GET_HERE );
+   }
+
+   return( NEVER_GETS_HERE );
+
+}
+
 
 -------------------------------------------------------------------------------
 
@@ -1009,9 +1035,10 @@ accidentally using an unassigned variable.
 
 Example:
 
-short anShort = 0;                                                             
-float aFloat  = 0;                                                             
-struct *ptr = NULL;                                                            
+short anShort = 0;
+float aFloat  = 0;
+struct *ptr = NULL;
+
 
 Note: It is much easier to debug a SIGSEGV if the message says you are trying
 to access memory address 00000000 and not 129FA012; or arrayPtr[20] causes a
@@ -1033,9 +1060,10 @@ true or false statement
 
 Example:
 
-ShouldWeBlockThis();                                                           
-ContainsAnImage();                                                             
-IsWebPageBlank();                                                              
+ShouldWeBlockThis();
+ContainsAnImage();
+IsWebPageBlank();
+
 
 -------------------------------------------------------------------------------
 
@@ -1058,10 +1086,11 @@ the code is easy to understand:
 
 Example:
 
-for ( size_t cnt = 0; cnt < blockListLength(); cnt ++ )                        
-{                                                                              
-   ....                                                                        
-}                                                                              
+for ( size_t cnt = 0; cnt < blockListLength(); cnt ++ )
+{
+   ....
+}
+
 
 Note: Unfortunately, this makes a function call for each and every iteration.
 This increases the overhead in the program, because the compiler has to look up
@@ -1076,15 +1105,16 @@ variable, and evaluate using the variable.
 
 Example:
 
-size_t len = blockListLength();                                                
-                                                                               
-for ( size_t cnt = 0; cnt < len; cnt ++ )                                      
-{                                                                              
-   ....                                                                        
-}                                                                              
+size_t len = blockListLength();
+
+for ( size_t cnt = 0; cnt < len; cnt ++ )
+{
+   ....
+}
 
-Exceptions: if the value of blockListLength() *may* change or could *
-potentially* change, then you must code the function call in the for/while
+
+Exceptions: if the value of blockListLength() *may* change or could
+*potentially* change, then you must code the function call in the for/while
 loop.
 
 -------------------------------------------------------------------------------
@@ -1131,13 +1161,15 @@ other header files.
 
 Example:
 
-#include      /* This is not a local include */                    
-#include "config.h"       /* This IS a local include */                        
+#include      /* This is not a local include */
+#include "config.h"       /* This IS a local include */
+
 
 Exception:
 
-/* This is not a local include, but requires a path element. */                
-#include                                                       
+/* This is not a local include, but requires a path element. */
+#include 
+
 
 Note: Please! do not add "-I." to the Makefile without a _very_ good reason.
 This duplicates the #include "file.h" behavior.
@@ -1156,10 +1188,11 @@ to "_", and make it uppercase.
 
 Example:
 
-#ifndef PROJECT_H_INCLUDED                                                     
-#define PROJECT_H_INCLUDED                                                     
- ...                                                                           
-#endif /* ndef PROJECT_H_INCLUDED */                                           
+#ifndef PROJECT_H_INCLUDED
+#define PROJECT_H_INCLUDED
+ ...
+#endif /* ndef PROJECT_H_INCLUDED */
+
 
 -------------------------------------------------------------------------------
 
@@ -1173,16 +1206,17 @@ of our code.
 
 Example:
 
-#ifdef __cplusplus                                                             
-extern "C"                                                                     
-{                                                                              
-#endif /* def __cplusplus */                                                   
-                                                                               
-... function definitions here ...                                              
-                                                                               
-#ifdef __cplusplus                                                             
-}                                                                              
-#endif /* def __cplusplus */                                                   
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* def __cplusplus */
+
+... function definitions here ...
+
+#ifdef __cplusplus
+}
+#endif /* def __cplusplus */
+
 
 -------------------------------------------------------------------------------
 
@@ -1195,11 +1229,12 @@ excess header files may cause needless compiles.
 
 Example:
 
-/*********************************************************************         
- * We're avoiding an include statement here!                                   
- *********************************************************************/        
-struct file_list;                                                              
-extern file_list *xyz;                                                         
+/*********************************************************************
+ * We're avoiding an include statement here!
+ *********************************************************************/
+struct file_list;
+extern file_list *xyz;
+
 
 Note: If you declare "file_list xyz;" (without the pointer), then including the
 proper header file is necessary. If you only want to prototype a pointer,
@@ -1232,22 +1267,23 @@ statement.
 
 Example:
 
-switch( hash_string( cmd ) )                                                   
-{                                                                              
-   case hash_actions_file :                                                    
-      ... code ...                                                             
-      break;                                                                   
-                                                                               
-   case hash_confdir :                                                         
-      ... code ...                                                             
-      break;                                                                   
-                                                                               
-   default :                                                                   
-      log_error( ... );                                                        
-      ... anomaly code goes here ...                                           
-      continue; / break; / exit( 1 ); / etc ...                                
-                                                                               
-} /* end switch( hash_string( cmd ) ) */                                       
+switch( hash_string( cmd ) )
+{
+   case hash_actions_file :
+      ... code ...
+      break;
+
+   case hash_confdir :
+      ... code ...
+      break;
+
+   default :
+      log_error( ... );
+      ... anomaly code goes here ...
+      continue; / break; / exit( 1 ); / etc ...
+
+} /* end switch( hash_string( cmd ) ) */
+
 
 Note: If you already have a default condition, you are obviously exempt from
 this point. Of note, most of the WIN32 code calls `DefWindowProc' after the
@@ -1314,9 +1350,10 @@ It can be tempting to declare a series of variables all on one line. Don't.
 
 Example:
 
-long a = 0;                                                                    
-long b = 0;                                                                    
-long c = 0;                                                                    
+long a = 0;
+long b = 0;
+long c = 0;
+
 
 Instead of:
 
@@ -1347,8 +1384,9 @@ the context of one function call.
 
 Example:
 
-If a function creates a struct and stores a pointer to it in a                 
-list, then it should definitely be allocated via `malloc'.                     
+If a function creates a struct and stores a pointer to it in a
+list, then it should definitely be allocated via `malloc'.
+
 
 -------------------------------------------------------------------------------
 
@@ -1365,8 +1403,9 @@ function to accommodate this.
 
 Example:
 
-int load_re_filterfile( struct client_state *csp ) { ... }                     
-static void unload_re_filterfile( void *f ) { ... }                            
+int load_re_filterfile( struct client_state *csp ) { ... }
+static void unload_re_filterfile( void *f ) { ... }
+
 
 Exceptions:
 
@@ -1420,49 +1459,53 @@ from the project).
 
 Example for file comments:
 
-const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 2.3 2002/09/05 02:27:59 hal9 Exp $"; 
-/*********************************************************************                         
- *                                                                                             
- * File        :  $Source$                                                                     
- *                                                                                             
- * Purpose     :  (Fill me in with a good description!)                                        
- *                                                                                             
- * Copyright   :  Written by and Copyright (C) 2001 the SourceForge                            
- *                Privoxy team. http://www.privoxy.org/                                        
- *                                                                                             
- *                Based on the Internet Junkbuster originally written                          
- *                by and Copyright (C) 1997 Anonymous Coders and                               
- *                Junkbusters Corporation.  http://www.junkbusters.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.                                                    
- *                                                                                             
- *                The GNU General Public License should be included with                       
- *                this file.  If not, you can view it at                                       
- *                http://www.gnu.org/copyleft/gpl.html                                         
- *                or write to the Free Software Foundation, Inc., 59                           
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.                       
- *                                                                                             
- * Revisions   :                                                                               
- *    $Log$                                                                                    
- *                                                                                             
- *********************************************************************/                        
-                                                                                               
-                                                                                               
-#include "config.h"                                                                            
-                                                                                               
-   ...necessary include files for us to do our work...                                         
-                                                                                               
-const char FILENAME_h_rcs[] = FILENAME_H_VERSION;                                              
+const char FILENAME_rcs[] = "$Id: developer-manual.txt,v 1.32.2.7 2004/01/30 23:46:56 oes Exp $";
+/*********************************************************************
+ *
+ * File        :  $Source: /cvsroot/ijbswa/current/doc/text/developer-manual.txt,v $
+ *
+ * Purpose     :  (Fill me in with a good description!)
+ *
+ * Copyright   :  Written by and Copyright (C) 2001 the SourceForge
+ *                Privoxy team. http://www.privoxy.org/
+ *
+ *                Based on the Internet Junkbuster originally written
+ *                by and Copyright (C) 1997 Anonymous Coders and
+ *                Junkbusters Corporation.  http://www.junkbusters.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.
+ *
+ *                The GNU General Public License should be included with
+ *                this file.  If not, you can view it at
+ *                http://www.gnu.org/copyleft/gpl.html
+ *                or write to the Free Software Foundation, Inc., 59
+ *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * Revisions   :
+ *    $Log: developer-manual.txt,v $
+ *    Revision 1.32.2.7  2004/01/30 23:46:56  oes
+ *    Re-generated from sgml source
+ *
+ *
+ *********************************************************************/
+
+
+#include "config.h"
+
+   ...necessary include files for us to do our work...
+
+const char FILENAME_h_rcs[] = FILENAME_H_VERSION;
+
 
 Note: This declares the rcs variables that should be added to the
 "show-proxy-args" page. If this is a brand new creation by you, you are free to
@@ -1475,93 +1518,98 @@ can.
 
 Example for file header comments:
 
-#ifndef _FILENAME_H                                                                          
-#define _FILENAME_H                                                                          
-#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 2.3 2002/09/05 02:27:59 hal9 Exp $" 
-/*********************************************************************                       
- *                                                                                           
- * File        :  $Source$                                                                   
- *                                                                                           
- * Purpose     :  (Fill me in with a good description!)                                      
- *                                                                                           
- * Copyright   :  Written by and Copyright (C) 2001 the SourceForge                          
- *                Privoxy team. http://www.privoxy.org/                                      
- *                                                                                           
- *                Based on the Internet Junkbuster originally written                        
- *                by and Copyright (C) 1997 Anonymous Coders and                             
- *                Junkbusters Corporation.  http://www.junkbusters.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.                                                  
- *                                                                                           
- *                The GNU General Public License should be included with                     
- *                this file.  If not, you can view it at                                     
- *                http://www.gnu.org/copyleft/gpl.html                                       
- *                or write to the Free Software Foundation, Inc., 59                         
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.                     
- *                                                                                           
- * Revisions   :                                                                             
- *    $Log$                                                                                  
- *                                                                                           
- *********************************************************************/                      
-                                                                                             
-                                                                                             
-#include "project.h"                                                                         
-                                                                                             
-#ifdef __cplusplus                                                                           
-extern "C" {                                                                                 
-#endif                                                                                       
-                                                                                             
-   ... function headers here ...                                                             
-                                                                                             
-                                                                                             
-/* Revision control strings from this header and associated .c file */                       
-extern const char FILENAME_rcs[];                                                            
-extern const char FILENAME_h_rcs[];                                                          
-                                                                                             
-                                                                                             
-#ifdef __cplusplus                                                                           
-} /* extern "C" */                                                                           
-#endif                                                                                       
-                                                                                             
-#endif /* ndef _FILENAME_H */                                                                
-                                                                                             
-/*                                                                                           
-  Local Variables:                                                                           
-  tab-width: 3                                                                               
-  end:                                                                                       
-*/                                                                                           
+#ifndef _FILENAME_H
+#define _FILENAME_H
+#define FILENAME_H_VERSION "$Id: developer-manual.txt,v 1.32.2.7 2004/01/30 23:46:56 oes Exp $"
+/*********************************************************************
+ *
+ * File        :  $Source: /cvsroot/ijbswa/current/doc/text/developer-manual.txt,v $
+ *
+ * Purpose     :  (Fill me in with a good description!)
+ *
+ * Copyright   :  Written by and Copyright (C) 2001 the SourceForge
+ *                Privoxy team. http://www.privoxy.org/
+ *
+ *                Based on the Internet Junkbuster originally written
+ *                by and Copyright (C) 1997 Anonymous Coders and
+ *                Junkbusters Corporation.  http://www.junkbusters.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.
+ *
+ *                The GNU General Public License should be included with
+ *                this file.  If not, you can view it at
+ *                http://www.gnu.org/copyleft/gpl.html
+ *                or write to the Free Software Foundation, Inc., 59
+ *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * Revisions   :
+ *    $Log: developer-manual.txt,v $
+ *    Revision 1.32.2.7  2004/01/30 23:46:56  oes
+ *    Re-generated from sgml source
+ *
+ *
+ *********************************************************************/
+
+
+#include "project.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+   ... function headers here ...
+
+
+/* Revision control strings from this header and associated .c file */
+extern const char FILENAME_rcs[];
+extern const char FILENAME_h_rcs[];
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* ndef _FILENAME_H */
+
+/*
+  Local Variables:
+  tab-width: 3
+  end:
+*/
+
 
 Example for function comments:
 
-/*********************************************************************         
- *                                                                             
- * Function    :  FUNCTION_NAME                                                
- *                                                                             
- * Description :  (Fill me in with a good description!)                        
- *                                                                             
- * parameters  :                                                               
- *          1  :  param1 = pointer to an important thing                       
- *          2  :  x      = pointer to something else                           
- *                                                                             
- * Returns     :  0 => Ok, everything else is an error.                        
- *                                                                             
- *********************************************************************/        
-int FUNCTION_NAME( void *param1, const char *x )                               
-{                                                                              
-   ...                                                                         
-   return( 0 );                                                                
-                                                                               
-}                                                                              
+/*********************************************************************
+ *
+ * Function    :  FUNCTION_NAME
+ *
+ * Description :  (Fill me in with a good description!)
+ *
+ * parameters  :
+ *          1  :  param1 = pointer to an important thing
+ *          2  :  x      = pointer to something else
+ *
+ * Returns     :  0 => Ok, everything else is an error.
+ *
+ *********************************************************************/
+int FUNCTION_NAME( void *param1, const char *x )
+{
+   ...
+   return( 0 );
+
+}
+
 
 Note: If we all follow this practice, we should be able to parse our code to
 create a "self-documenting" web page.
@@ -1579,28 +1627,28 @@ To be filled.
 Explain release numbers. major, minor. developer releases. etc.
 
  1. Remove any existing rpm with rpm -e
-   
+
  2. Remove any file that was left over. This includes (but is not limited to)
-   
+
       + /var/log/privoxy
-       
+
       + /etc/privoxy
-       
+
       + /usr/sbin/privoxy
-       
+
       + /etc/init.d/privoxy
-       
+
       + /usr/doc/privoxy*
-       
+
  3. Install the rpm. Any error messages?
-   
+
  4. start,stop,status Privoxy with the specific script (e.g. /etc/rc.d/init/
     privoxy stop). Reboot your machine. Does autostart work?
-   
+
  5. Start browsing. Does Privoxy work? Logfile written?
-   
+
  6. Remove the rpm. Any error messages? All files removed?
-   
+
 -------------------------------------------------------------------------------
 
 5.2. Test reports
@@ -1609,12 +1657,12 @@ Please submit test reports only with the test form at sourceforge. Three simple
 steps:
 
   * Select category: the distribution you test on.
-   
+
   * Select group: the version of Privoxy that we are about to release.
-   
+
   * Fill the Summary and Detailed Description with something intelligent (keep
     it short and precise).
-   
+
 Do not mail to the mailing list (we cannot keep track on issues there).
 
 -------------------------------------------------------------------------------
@@ -1644,7 +1692,7 @@ version numbers consist of three numbers, separated by dots, like in X.Y.Z
     turning a development branch into stable substantially changes the
     functionality, user interface or configuration syntax. Majors 1 and 2 were
     Junkbuster, and 3 will be the first stable Privoxy release.
-   
+
   * Y, the version minor, represents the branch within the major version. At
     any point in time, there are two branches being maintained: The stable
     branch, with an even minor, say, 2N, in which no functionality is being
@@ -1656,7 +1704,7 @@ version numbers consist of three numbers, separated by dots, like in X.Y.Z
     point where it can be turned into stable, the old stable branch 2N is given
     up (i.e. no longer maintained), the former development branch 2N+1 becomes
     the new stable branch 2N+2, and a new development branch 2N+3 is opened.
-   
+
   * Z, the point or sub version, represents a release of the software within a
     branch. It is therefore incremented immediately before each code freeze. In
     development branches, only the even point versions correspond to actual
@@ -1667,19 +1715,33 @@ version numbers consist of three numbers, separated by dots, like in X.Y.Z
     thereafter. This ensures that builds from CVS snapshots are easily
     distinguished from released versions. The point version is reset to zero
     when the minor changes.
-   
+
+    Stable branches work a little differently, since there should be little to
+    no development happening in such branches. Remember, only bugfixes, which
+    presumably should have had some testing before being committed. Stable
+    branches will then have their version reported as 0.0.0, during that period
+    between releases when changes are being added. This is to denote that this
+    code is not for release. Then as the release nears, the version is bumped
+    according: e.g. 3.0.1 -> 0.0.0 -> 3.0.2.
+
 In summary, the main CVS trunk is the development branch where new features are
 being worked on for the next stable series. This should almost always be where
 the most activity takes place. There is always at least one stable branch from
 the trunk, e.g now it is 3.0, which is only used to release stable versions.
-Once the initial .0 release of the stable branch has been done, then as a rule,
-only bugfixes that have had prior testing should be committed to the stable
-branch. At that point, it is mostly "hands off". Once there are enough bugfixes
-to justify a new release, the version of this branch is again incremented
-Example: 3.0.0 -> 3.0.1 -> 3.0.2, etc are all stable releases from within the
-stable branch. 3.1.x is currently the main trunk, and where work on 3.2.x is
-taking place. If any questions, please post to the devel list before committing
-to a stable branch!
+Once the initial *.0 release of the stable branch has been done, then as a
+rule, only bugfixes that have had prior testing should be committed to the
+stable branch. Once there are enough bugfixes to justify a new release, the
+version of this branch is again incremented Example: 3.0.0 -> 3.0.1 -> 3.0.2,
+etc are all stable releases from within the stable branch. 3.1.x is currently
+the main trunk, and where work on 3.2.x is taking place. If any questions,
+please post to the devel list before committing to a stable branch!
+
+Developers should remember too that if they commit a bugfix to the stable
+branch, this will more than likely require a separate submission to the main
+trunk, since these are separate development trees within CVS. If you are
+working on both, then this would require at least two separate check outs (i.e
+main trunk, and the stable release branch, which is v_3_0_branch at the
+moment).
 
 -------------------------------------------------------------------------------
 
@@ -1691,20 +1753,21 @@ The following must be done by one of the developers prior to each new release.
     days has had a chance to yell "no!" in case they have pending changes/fixes
     in their pipelines. Announce the freeze so that nobody will interfere with
     last minute changes.
-   
+
   * Increment the version number (point from odd to even in development
     branches!) in configure.in. (RPM spec files will need to be incremented as
     well.)
-   
+
   * If default.action has changed since last release (i.e. software release or
     standalone actions file release), bump up its version info to A.B in this
     line:
-   
-      {+add-header{X-Actions-File-Version: A.B} -filter -no-popups}    
-   
+
+      {+add-header{X-Actions-File-Version: A.B} -filter -no-popups}
+
+
     Then change the version info in doc/webserver/actions/index.php, line:
     '$required_actions_file_version = "A.B";'
-   
+
   * All documentation should be rebuild after the version bump. Finished docs
     should be then be committed to CVS (for those without the ability to build
     these). Some docs may require rather obscure processing tools. config, the
@@ -1713,7 +1776,7 @@ The following must be done by one of the developers prior to each new release.
     committed to CVS for other packagers. The formal docs should be uploaded to
     the webserver. See the Section "Updating the webserver" in this manual for
     details.
-   
+
   * The User Manual is also used for context sensitive help for the CGI editor.
     This is version sensitive, so that the user will get appropriate help for
     his/her release. So with each release a fresh version should be uploaded to
@@ -1722,24 +1785,24 @@ The following must be done by one of the developers prior to each new release.
     The CGI pages will link to something like http://privoxy.org/$(VERSION)/
     user-manual/. This will need to be updated for each new release. There is
     no Makefile target for this at this time!!! It needs to be done manually.
-   
+
   * All developers should look at the ChangeLog and make sure noteworthy
     changes are referenced.
-   
+
   * Commit all files that were changed in the above steps!
-   
+
   * Tag all files in CVS with the version number with "cvs tag v_X_Y_Z". Don't
     use vX_Y_Z, ver_X_Y_Z, v_X.Y.Z (won't work) etc.
-   
+
   * If the release was in a development branch, increase the point version from
     even to odd (X.Y.(Z+1)) again in configure.in and commit your change.
-   
+
   * On the webserver, copy the user manual to a new top-level directory called
     X.Y.Z. This ensures that help links from the CGI pages, which have the
     version as a prefix, will go into the right version of the manual. If this
     is a development branch release, also symlink X.Y.(Z-1) to X.Y.Z and X.Y.
     (Z+1) to . (i.e. dot).
-   
+
 -------------------------------------------------------------------------------
 
 6.3. Building and Releasing the Packages
@@ -1751,11 +1814,12 @@ For all types of packages, including the source tarball, you must make sure
 that you build from clean sources by exporting the right version from CVS into
 an empty directory (just press return when asked for a password):
 
-  mkdir dist # delete or choose different name if it already exists                                
-  cd dist                                                                                          
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                        
+  mkdir dist # delete or choose different name if it already exists
+  cd dist
+  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
   cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
 
+
 Do NOT change a single bit, including, but not limited to version information
 after export from CVS. This is to make sure that all release packages, and with
 them, all future bug reports, are based on exactly the same code.
@@ -1774,26 +1838,26 @@ package. These apply to all platforms!
   * Privoxy requires write access to: all *.action files, all logfiles, and the
     trust file. You will need to determine the best way to do this for your
     platform.
-   
+
   * Please include up to date documentation. At a bare minimum:
-   
+
     LICENSE (top-level directory)
-   
+
     README (top-level directory)
-   
+
     AUTHORS (top-level directory)
-   
+
     man page (top-level directory, Unix-like platforms only)
-   
+
     The User Manual (doc/webserver/user-manual/)
-   
+
     FAQ (doc/webserver/faq/)
-   
+
     Also suggested: Developer Manual (doc/webserver/developer-manual) and
     ChangeLog (top-level directory). FAQ and the manuals are HTML docs. There
     are also text versions in doc/text/ which could conceivably also be
     included.
-   
+
     The documentation has been designed such that the manuals are linked to
     each other from parallel directories, and should be packaged that way.
     privoxy-index.html can also be included and can serve as a focal point for
@@ -1805,24 +1869,24 @@ package. These apply to all platforms!
     included for better presentation: p_doc.css. This should be in the same
     directory with privoxy-index.html, (i.e. one level up from the manual
     directories).
-   
+
   * user.action is designed for local preferences. Make sure this does not get
     overwritten!
-   
+
   * Other configuration files should be installed as the new defaults, but all
     previously installed configuration files should be preserved as backups.
     This is just good manners :-)
-   
+
   * Please check platform specific notes in this doc, if you haven't done
     "Privoxy" packaging before for other platform specific issues. Conversely,
     please add any notes that you know are important for your platform (or
     contact one of the doc maintainers to do this if you can't).
-   
+
   * Packagers should do a "clean" install of their package after building it.
     So any previous installs should be removed first to ensure the integrity of
     the newly built package. Then run the package for a while to make sure
     there are no obvious problems, before uploading.
-   
+
 -------------------------------------------------------------------------------
 
 6.3.2. Source Tarball
@@ -1830,16 +1894,19 @@ package. These apply to all platforms!
 First, make sure that you have freshly exported the right version into an empty
 directory. (See "Building and releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then do:
 
-  make tarball-dist                                                            
+  make tarball-dist
+
 
 To upload the package to Sourceforge, simply issue
 
-  make tarball-upload                                                          
+  make tarball-upload
+
 
 Go to the displayed URL and release the file publicly on Sourceforge. For the
 change log field, use the relevant section of the ChangeLog file.
@@ -1864,16 +1931,19 @@ that version plus one.
 
 Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then do
 
-  make dist-dist                                                               
+  make dist-dist
+
 
 To upload the package to Sourceforge, simply issue
 
-  make dist-upload rpm_packagerev                                              
+  make dist-upload rpm_packagerev
+
 
 where rpm_packagerev is the RPM release number as determined above. Go to the
 displayed URL and release the file publicly on Sourceforge. Use the release
@@ -1889,6 +1959,7 @@ Setup module:
 
   cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co os2setup
 
+
 You will need a mix of development tools. The main compilation takes place with
 IBM Visual Age C++. Some ancillary work takes place with GNU tools, available
 from various sources like hobbes.nmsu.edu. Specificially, you will need
@@ -1898,16 +1969,19 @@ available from various sources, including its home page: xworkplace.
 Change directory to the os2setup directory. Edit the os2build.cmd file to set
 the final executable filename. For example,
 
-  installExeName='privoxyos2_setup_X.Y.Z.exe'                                  
+  installExeName='privoxyos2_setup_X.Y.Z.exe'
+
 
 Next, edit the IJB.wis file so the release number matches in the PACKAGEID
 section:
 
-  PACKAGEID="Privoxy Team\Privoxy\Privoxy Package\X\Y\Z"                       
+  PACKAGEID="Privoxy Team\Privoxy\Privoxy Package\X\Y\Z"
+
 
 You're now ready to build. Run:
 
-  os2build                                                                     
+  os2build
+
 
 You will find the WarpIN-installable executable in the ./files directory.
 Upload this anonymously to uploads.sourceforge.net/incoming, create a release
@@ -1920,18 +1994,21 @@ tarball package.
 
 Login to Sourceforge's compilefarm via ssh:
 
-  ssh cf.sourceforge.net                                                       
+  ssh cf.sourceforge.net
+
 
 Choose the right operating system (not the Debian one). When logged in, make
 sure that you have freshly exported the right version into an empty directory.
 (See "Building and releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then run
 
-  gmake solaris-dist                                                           
+  gmake solaris-dist
+
 
 which creates a gzip'ed tar archive. Sadly, you cannot use make solaris-upload
 on the Sourceforge machine (no ncftpput). You now have to manually upload the
@@ -1951,11 +2028,13 @@ setup module:
 
   cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co winsetup
 
+
 Then you can build the package. This is fully automated, and is controlled by
 winsetup/GNUmakefile. All you need to do is:
 
-  cd winsetup                                                                  
-  make                                                                         
+  cd winsetup
+  make
+
 
 Now you can manually rename privoxy_setup.exe to privoxy_setup_X_Y_Z.exe, and
 upload it to SourceForge. When releasing the package on SourceForge, use the
@@ -1969,16 +2048,19 @@ First, make sure that you have freshly exported the right version into an empty
 directory. (See "Building and releasing packages" above). Then add a log entry
 to debian/changelog, if it is not already there, for example by running:
 
-  debchange -v 3.1.1-alpha-1 "New upstream version"                            
+  debchange -v 3.0.3-stable-1 "New upstream version"
+
 
 Then, run:
 
-  dpkg-buildpackage -rfakeroot -us -uc -b                                      
+  dpkg-buildpackage -rfakeroot -us -uc -b
 
-This will create ../privoxy_3.1.1-alpha-1_i386.deb which can be uploaded. To
+
+This will create ../privoxy_3.0.3-stable-1_i386.deb which can be uploaded. To
 upload the package to Sourceforge, simply issue
 
-  make debian-upload                                                           
+  make debian-upload
+
 
 -------------------------------------------------------------------------------
 
@@ -1990,10 +2072,12 @@ setup module:
 
   cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co osxsetup
 
+
 Then run:
 
-  cd osxsetup                                                                  
-  build                                                                        
+  cd osxsetup
+  build
+
 
 This will run autoheader, autoconf and configure as well as make. Finally, it
 will copy over the necessary files to the ./osxsetup/files directory for
@@ -2004,7 +2088,8 @@ package name to match the release, and hit the "Create package" button. If you
 specify ./Privoxy.pkg as the output package name, you can then create the
 distributable zip file with the command:
 
-  zip -r privoxyosx_setup_x.y.z.zip Privoxy.pkg                                
+  zip -r privoxyosx_setup_x.y.z.zip Privoxy.pkg
+
 
 You can then upload privoxyosx_setup_x.y.z.zip anonymously to
 uploads.sourceforge.net/incoming, create a release for it, and you're done. Use
@@ -2016,18 +2101,21 @@ the release notes and Change Log from the source tarball package.
 
 Login to Sourceforge's compile-farm via ssh:
 
-  ssh cf.sourceforge.net                                                       
+  ssh cf.sourceforge.net
+
 
 Choose the right operating system. When logged in, make sure that you have
 freshly exported the right version into an empty directory. (See "Building and
 releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then run:
 
-  gmake freebsd-dist                                                           
+  gmake freebsd-dist
+
 
 which creates a gzip'ed tar archive. Sadly, you cannot use make freebsd-upload
 on the Sourceforge machine (no ncftpput). You now have to manually upload the
@@ -2041,8 +2129,9 @@ release notes and Change Log from the source tarball package.
 First, make sure that you have freshly exported the right version into an empty
 directory. (See "Building and releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then do FIXME.
 
@@ -2053,8 +2142,9 @@ Then do FIXME.
 First, make sure that you have freshly exported the right version into an empty
 directory. (See "Building and releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then do FIXME.
 
@@ -2064,18 +2154,21 @@ Then do FIXME.
 
 Login to Sourceforge's compilefarm via ssh:
 
-  ssh cf.sourceforge.net                                                       
+  ssh cf.sourceforge.net
+
 
 Choose the right operating system. When logged in, make sure that you have
 freshly exported the right version into an empty directory. (See "Building and
 releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then run:
 
-  make aix-dist                                                                
+  make aix-dist
+
 
 which creates a gzip'ed tar archive. Sadly, you cannot use make aix-upload on
 the Sourceforge machine (no ncftpput). You now have to manually upload the
@@ -2090,18 +2183,18 @@ After the package is ready, it is time to upload it to SourceForge, and go
 through the release steps. The upload is done via FTP:
 
   * Upload to: ftp://upload.sourceforge.net/incoming
-   
+
   * user: anonymous
-   
+
   * password: ijbswa-developers@lists.sourceforge.net
-   
+
 Or use the make targets as described above.
 
 Once this done go to http://sourceforge.net/project/admin/editpackages.php?
 group_id=11118, making sure you are logged in. Find your target platform in the
 second column, and click Add Release. You will then need to create a new
 release for your package, using the format of $VERSION ($CODE_STATUS), e.g.
-3.1.1 (beta).
+3.0.3 (beta).
 
 Now just follow the prompts. Be sure to add any appropriate Release notes. You
 should see your freshly uploaded packages in "Step 2. Add Files To This
@@ -2139,6 +2232,7 @@ files, do:
 
   make dok dok-pdf # (or 'make redhat-dok dok-pdf' if 'make dok' doesn't work for you)
 
+
 That will generate doc/webserver/user-manual, doc/webserver/developer-manual,
 doc/webserver/faq, doc/pdf/*.pdf and doc/webserver/index.html automatically.
 
@@ -2153,7 +2247,8 @@ webserver/* directory (or create new directories under doc/webserver).
 Next, commit any changes from the above steps to CVS. All set? If these are
 docs in the stable branch, then do:
 
-  make webserver                                                               
+  make webserver
+
 
 This will do the upload to the webserver (www.privoxy.org) and ensure all files
 and directories there are group writable.
@@ -2175,7 +2270,7 @@ with the best support:
 
 8.1. Get Support
 
-For casual users, our support forum at SourceForge is probably best suited: 
+For casual users, our support forum at SourceForge is probably best suited:
 http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
 All users are of course welcome to discuss their issues on the users mailing
@@ -2198,7 +2293,7 @@ debugging. If you are using your own custom configuration, please try the stock
 configs to see if the problem is configuration related.
 
 If not using the latest version, chances are that the bug has been found and
-fixed in the meantime. We would appreciate if you could take the time to 
+fixed in the meantime. We would appreciate if you could take the time to
 upgrade to the latest version (or even the latest CVS snapshot) and verify your
 bug, but this is not required for reporting.
 
@@ -2238,7 +2333,7 @@ group_id=11118.
 
 9. Privoxy Copyright, License and History
 
-Copyright © 2001, 2002 by Privoxy Developers 
+Copyright © 2001 - 2004 by Privoxy Developers 
 
 Some source code is based on code Copyright © 1997 by Anonymous Coders and
 Junkbusters, Inc. and licensed under the GNU General Public License.
@@ -2269,7 +2364,7 @@ this program; if not, write to the
 
 9.2. History
 
-In the beginning, there was the Internet Junkbuster, by Anonymous Coders and 
+In the beginning, there was the Internet Junkbuster, by Anonymous Coders and
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
@@ -2292,7 +2387,7 @@ Then, some developers picked up the thread, and started turning the software
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
-The result of this is Privoxy, whose first stable release, 3.0, was released
+The result of this is Privoxy, whose first stable version, 3.0, was released
 August, 2002.
 
 -------------------------------------------------------------------------------
@@ -2305,30 +2400,30 @@ http://www.privoxy.org/, the Privoxy Home page.
 
 http://www.privoxy.org/faq/, the Privoxy FAQ.
 
-http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on       
-SourceForge.                                                                   
+http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on
+SourceForge.
 
-http://config.privoxy.org/, the web-based user interface. Privoxy must be      
-running for this to work. Shortcut: http://p.p/                                
+http://config.privoxy.org/, the web-based user interface. Privoxy must be
+running for this to work. Shortcut: http://p.p/
 
 http://www.privoxy.org/actions/, to submit "misses" to the developers.
 
-http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun   
-ideas from Privoxy users.                                                      
+http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun
+ideas from Privoxy users.
 
-http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are  
-used to track web users.                                                       
+http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are
+used to track web users.
 
 http://www.junkbusters.com/ijb.html, the original Internet Junkbuster.
 
-http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,  
-from which Privoxy was derived.                                                
+http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,
+from which Privoxy was derived.
 
-http://privacy.net/analyze/, a useful site to check what information about you 
-is leaked while you browse the web.                                            
+http://privacy.net/analyze/, a useful site to check what information about you
+is leaked while you browse the web.
 
-http://www.squid-cache.org/, a very popular caching proxy, which is often used 
-together with Privoxy.                                                         
+http://www.squid-cache.org/, a very popular caching proxy, which is often used
+together with Privoxy.
 
 http://www.privoxy.org/developer-manual/, the Privoxy developer manual.
 
diff --git a/doc/text/faq.txt b/doc/text/faq.txt
index 05ac4b52..91eb9e8b 100644
--- a/doc/text/faq.txt
+++ b/doc/text/faq.txt
@@ -1,14 +1,14 @@
 Privoxy Frequently Asked Questions
 
-Copyright © 2001, 2002 by Privoxy Developers
+[ Copyright © 2001-2004 by Privoxy Developers ]
 
-$Id: faq.sgml,v 2.2 2002/09/05 04:25:05 hal9 Exp $
+$Id: faq.txt,v 1.42.2.7 2004/01/30 23:46:57 oes Exp $
 
 This FAQ gives quick answers to frequently asked questions about Privoxy. It
 can't and doesn't replace the User Manual.
 
 Privoxy is a web proxy with advanced filtering capabilities for protecting
-privacy, filtering web page content, managing cookies, controlling access, and
+privacy, modifying web page content, managing cookies, controlling access, and
 removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a
 very flexible configuration and can be customized to suit individual needs and
 tastes. Privoxy has application for both stand-alone systems and multi-user
@@ -17,7 +17,7 @@ networks.
 Privoxy is based on Internet Junkbuster (tm).
 
 Please note that this document is constantly evolving. This copy represents the
-state at the release of version 3.1.1. You can find the latest version of the
+state at the release of version 3.0.3. You can find the latest version of the
 document at http://www.privoxy.org/faq/. Please see the Contact section if you
 want to contact the developers.
 
@@ -25,34 +25,38 @@ want to contact the developers.
 
 Table of Contents
 1. General Information
-   
+
     1.1. What is this new version of Privoxy?
     1.2. Why "Privoxy"? Why a name change at all?
     1.3. How does Privoxy differ from the old Junkbuster?
     1.4. What is a "proxy"? How does Privoxy work?
     1.5. How does Privoxy know what is an ad, and what is not?
     1.6. Can Privoxy make mistakes? This does not sound very scientific.
-    1.7. My browser does the same things as Privoxy. Why should I use Privoxy
+    1.7. Will I have to configure Privoxy before I can use it?
+    1.8. My browser does the same things as Privoxy. Why should I use Privoxy
         at all?
-    1.8. Is there is a license or fee? What about a warranty? Registration?
-    1.9. I would like to help you, what do I do?
-       
-        1.9.1. Money Money Money
-        1.9.2. Software
-        1.9.3. You want to work with us?
-       
+    1.9. Is there is a license or fee? What about a warranty? Registration?
+    1.10. I would like to help you, what do I do?
+
+        1.10.1. Money Money Money
+        1.10.2. Software
+        1.10.3. You want to work with us?
+
 2. Installation
-   
+
     2.1. Which browsers are supported by Privoxy?
     2.2. Which operating systems are supported?
-    2.3. Can I install Privoxy over Junkbuster?
-    2.4. I just installed Privoxy. Is there anything special I have to do now?
-    2.5. What is the proxy address of Privoxy?
-    2.6. I just installed Privoxy, and nothing is happening. All the ads are
+    2.3. Can I use Privoxy with my email client?
+    2.4. Can I install Privoxy over Junkbuster?
+    2.5. I just installed Privoxy. Is there anything special I have to do now?
+    2.6. What is the proxy address of Privoxy?
+    2.7. I just installed Privoxy, and nothing is happening. All the ads are
         there. What's wrong?
-   
+    2.8. I get a "Privoxy is not being used" dummy page although Privoxy is
+        running and being used.
+
 3. Configuration
-   
+
     3.1. Where can I get updated Actions Files?
     3.2. Can I use my old config files?
     3.3. What is an "actions" file?
@@ -61,8 +65,8 @@ Table of Contents
     3.5. How are actions files configured? What is the easiest way to do this?
     3.6. There are several different "actions" files. What are the differences?
     3.7. How can I make my Yahoo/Hotmail/GMX account work?
-    3.8. What's the difference between the "Cautious", "Medium" and "Advanced"
-        defaults?
+    3.8. What's the difference between the "Cautious", "Medium" and
+        "Adventuresome" defaults?
     3.9. Why can I change the configuration with a browser? Does that not raise
         security issues?
     3.10. What is the default.filter file? What is a "filter"?
@@ -77,9 +81,12 @@ Table of Contents
     3.17. Can I just set Privoxy to use port 80 and thus avoid individual
         browser configuration?
     3.18. Can Privoxy run as a "transparent" proxy?
-   
+    3.19. How can I configure Privoxy for use with Outlook Express?
+    3.20. How can I have separate rules just for HTML mail?
+    3.21. How can I allow permanent cookies for my trusted sites?
+
 4. Miscellaneous
-   
+
     4.1. How much does Privoxy slow my browsing down? This has to add extra
         time to browsing.
     4.2. I noticed considerable delays in page requests compared to the old
@@ -104,10 +111,14 @@ Table of Contents
         is a "crunch"?
     4.17. Can Privoxy effect files that I download from a webserver? FTP
         server?
-    4.18. Where can I find more information about Privoxy and related issues?
-   
+    4.18. I just downloaded a Perl script, and Privoxy altered it! Yikes, what
+        is wrong!
+    4.19. Where can I find more information about Privoxy and related issues?
+    4.20. I've noticed that Privoxy changes "Microsoft" to "MicroSuck"! Why are
+        you manipulating my browsing?
+
 5. Troubleshooting
-   
+
     5.1. I just upgraded and am getting "connection refused" with every web
         page?
     5.2. I just added a new rule, but the steenkin ad is still getting through.
@@ -121,27 +132,38 @@ Table of Contents
     5.7. In Mac OSX, I dragged the Privoxy folder to the trash in order to
         uninstall it. Now the finder tells me I don't have sufficient
         privileges to empty the trash.
-    5.8. I get a completely blank page at one site. "View Source" shows only:
-        .
-   
+    5.8. In Mac OSX Panther (10.3), images often fail to load and/or I
+        experience random delays in page loading. I'm using localhost as my
+        browser's proxy setting.
+    5.9. I get a completely blank page at one site. "View Source" shows only:
+        . Without Privoxy the page loads fine.
+    5.10. Why am I getting a 503 Error (WSAECONNREFUSED) on every page?
+    5.11. My logs show many "Unable to get my own hostname" lines. Why?
+    5.12. When I try to launch Privoxy, I get an error message "port 8118 is
+        already in use" (or similar wording). Why?
+    5.13. Pages with UTF-8 fonts are garbled.
+    5.14. Why are binary files (such as images) corrupted when Privoxy is used?
+    5.15. What is the "demoronizer" and why is it there?
+    5.16. Why do I keep seeing "PrivoxyWindowOpen()" in raw source code?
+
 6. Contacting the developers, Bug Reporting and Feature Requests
-   
+
     6.1. Get Support
     6.2. Report Bugs
     6.3. Request New Features
     6.4. Report Ads or Other Actions-Related Problems
     6.5. Other
-   
+
 7. Privoxy Copyright, License and History
-   
+
     7.1. License
     7.2. History
-   
+
 1. General Information
 
 1.1. What is this new version of Privoxy?
 
-In the beginning, there was the Internet Junkbuster, by Anonymous Coders and 
+In the beginning, there was the Internet Junkbuster, by Anonymous Coders and
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
@@ -164,7 +186,7 @@ Then, some developers picked up the thread, and started turning the software
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
-The result of this is Privoxy, whose first stable release, 3.0, was released
+The result of this is Privoxy, whose first stable version, 3.0, was released
 August, 2002.
 
 -------------------------------------------------------------------------------
@@ -185,7 +207,7 @@ project itself, and they, in fact, still share our ideals and goals.
 
 The developers also believed that there are so many changes from the original
 code, that it was time to make a clean break from the past and make a name in
-their own right, especially now with the pending release of version 3.0.
+their own right.
 
 -------------------------------------------------------------------------------
 
@@ -207,41 +229,41 @@ Privoxy's new features include:
   * Integrated browser based configuration and control utility at http://
     config.privoxy.org/ (shortcut: http://p.p/). Browser-based tracing of rule
     and filter effects. Remote toggling.
-   
+
   * Web page content filtering (removes banners based on size, invisible
     "web-bugs", JavaScript and HTML annoyances, pop-up windows, etc.)
-   
+
   * Modularized configuration that allows for standard settings and user
     settings to reside in separate files, so that installing updated actions
     files won't overwrite individual user settings.
-   
+
   * HTTP/1.1 compliant (but not all optional 1.1 features are supported).
-   
+
   * Support for Perl Compatible Regular Expressions in the configuration files,
     and generally a more sophisticated and flexible configuration syntax over
     previous versions.
-   
+
   * Improved cookie management features (e.g. session based cookies).
-   
+
   * GIF de-animation.
-   
+
   * Bypass many click-tracking scripts (avoids script redirection).
-   
+
   * Multi-threaded (POSIX and native threads).
-   
+
   * User-customizable HTML templates for all proxy-generated pages (e.g.
     "blocked" page).
-   
+
   * Auto-detection and re-reading of config file changes.
-   
+
   * Improved signal handling, and a true daemon mode (Unix).
-   
+
   * Every feature now controllable on a per-site or per-location basis,
     configuration more powerful and versatile over-all.
-   
+
   * Many smaller new features added, limitations and bugs removed, and security
     holes fixed.
-   
+
 -------------------------------------------------------------------------------
 
 1.4. What is a "proxy"? How does Privoxy work?
@@ -291,9 +313,9 @@ configurable.
 1.6. Can Privoxy make mistakes? This does not sound very scientific.
 
 Actually, it's a black art ;-) And yes, it is always possible to have a broad
-rule accidentally block or change something by mistake. There is a good chance
-you may run into such a situation at some point. It is tricky writing rules to
-cover every conceivable possibility, and not occasionally get false positives.
+rule accidentally block or change something by mistake. You will almost surely
+run into such situations at some point. It is tricky writing rules to cover
+every conceivable possibility, and not occasionally get false positives.
 
 But this should not be a big concern since the Privoxy configuration is very
 flexible, and includes tools to help identify these types of situations so they
@@ -302,7 +324,20 @@ the Troubleshooting section below.)
 
 -------------------------------------------------------------------------------
 
-1.7. My browser does the same things as Privoxy. Why should I use Privoxy at
+1.7. Will I have to configure Privoxy before I can use it?
+
+No, not really. The default installation should give you a good starting point,
+and block most unwanted content.
+
+But you will certainly run into situations where there are false positives, or
+ads not being blocked that you may not want to see. In these cases, you would
+certainly benefit by customizing Privoxy's configuration to more closely match
+your individual situation. And we would encourage you to do this. This is where
+the real power of Privoxy lies!
+
+-------------------------------------------------------------------------------
+
+1.8. My browser does the same things as Privoxy. Why should I use Privoxy at
 all?
 
 Modern browsers do indeed have some of the same functionality as Privoxy. Maybe
@@ -315,7 +350,7 @@ you don't have to maintain a similar configuration for possibly many browsers.
 
 -------------------------------------------------------------------------------
 
-1.8. Is there is a license or fee? What about a warranty? Registration?
+1.9. Is there is a license or fee? What about a warranty? Registration?
 
 Privoxy is licensed under the GNU General Public License (GPL). It is free to
 use, copy, modify or distribute as you wish under the terms of this license.
@@ -328,9 +363,9 @@ Privoxy really is free in every respect!
 
 -------------------------------------------------------------------------------
 
-1.9. I would like to help you, what do I do?
+1.10. I would like to help you, what do I do?
 
-1.9.1. Money Money Money
+1.10.1. Money Money Money
 
 We, of course, welcome donations and could use money for domain registering,
 buying software to test Privoxy with, and, of course, for regular world-wide
@@ -339,7 +374,7 @@ a donation, just drop us a note.
 
 -------------------------------------------------------------------------------
 
-1.9.2. Software
+1.10.2. Software
 
 If you are a vendor of a web-related software like a browser, web server or
 proxy, and would like us to ensure that Privoxy runs smoothly with your
@@ -349,11 +384,11 @@ result.
 
 -------------------------------------------------------------------------------
 
-1.9.3. You want to work with us?
+1.10.3. You want to work with us?
 
 Well, helping the team is always a good idea. We welcome new developers,
 packaging gurus or documentation writers. Simply get an account on
-SourceForge.net and mail your id to the developers mailing list. Then read the 
+SourceForge.net and mail your id to the developers mailing list. Then read the
 Developer's Manual.
 
 Once we have added you to the team, you'll have write access to the CVS
@@ -376,7 +411,7 @@ protocol, just like a web server does.
 
 At present, Privoxy is known to run on Windows(95, 98, ME, 2000, XP), Linux
 (RedHat, SuSE, Debian, Conectiva, Gentoo, Slackware), Mac OSX, OS/2, AmigaOS,
-BeOS, FreeBSD, NetBSD, Solaris, and more flavors of Unix.
+BeOS, FreeBSD, NetBSD, OpenBSD, Solaris, and many more flavors of Unix.
 
 But any operating system that runs TCP/IP, can conceivably take advantage of
 Privoxy in a networked situation where Privoxy would run as a server on a LAN
@@ -388,7 +423,22 @@ always a possibility.
 
 -------------------------------------------------------------------------------
 
-2.3. Can I install Privoxy over Junkbuster?
+2.3. Can I use Privoxy with my email client?
+
+As long as there is some way to set a HTTP proxy for the client, then yes, any
+application can be used, whether it is strictly speaking a "browser" or not.
+Though this may not be the best approach for dealing with some of the common
+abuses of HTML in email. See How can I configure Privoxy with Outlook Express?
+below for more on this.
+
+Be aware that HTML email presents a number of unique security and privacy
+related issues, that can require advanced skills to overcome. The developers
+recommend using email clients that can be configured to convert HTML to plain
+text for these reasons.
+
+-------------------------------------------------------------------------------
+
+2.4. Can I install Privoxy over Junkbuster?
 
 We recommend you un-install Junkbuster first to minimize conflicts and
 confusion. You may want to save your old configuration files for future
@@ -400,16 +450,16 @@ Note: Some installers may automatically un-install Junkbuster, if present!
 
 -------------------------------------------------------------------------------
 
-2.4. I just installed Privoxy. Is there anything special I have to do now?
+2.5. I just installed Privoxy. Is there anything special I have to do now?
 
 All browsers must be told to use Privoxy as a proxy by specifying the correct
 proxy address and port number in the appropriate configuration area for the
 browser. See below. You should also flush your browser's memory and disk cache
-to get rid of any cached junk items. 
+to get rid of any cached junk items, and remove any stored cookies.
 
 -------------------------------------------------------------------------------
 
-2.5. What is the proxy address of Privoxy?
+2.6. What is the proxy address of Privoxy?
 
 If you set up the Privoxy to run on the computer you browse from (rather than
 your ISP's server or some networked computer on a LAN), the proxy will be on
@@ -428,24 +478,45 @@ would enter either the IP address of the LAN host where Privoxy is running, or
 the equivalent hostname. Port assignment would be same as above. Note that
 Privoxy doesn't listen on any LAN interfaces by default.
 
-Privoxy does not currently handle protocols such as FTP, SMTP, IM, IRC, ICQ, or
-other Internet protocols.
+Privoxy does not currently handle any other protocols such as FTP, SMTP, IM,
+IRC, ICQ, etc.
 
 -------------------------------------------------------------------------------
 
-2.6. I just installed Privoxy, and nothing is happening. All the ads are there.
+2.7. I just installed Privoxy, and nothing is happening. All the ads are there.
 What's wrong?
 
 Did you configure your browser to use Privoxy as a proxy? It does not sound
 like it. See above. You might also try flushing the browser's caches to force a
 full re-reading of pages. You can verify that Privoxy is running, and your
-browser is correctly configured by entering the special URL: http://
-config.privoxy.org/. This should take you to a page titled "This is Privoxy.."
-with access to Privoxy's internal configuration. If you see this, then you are
-good to go. If you receive a page saying "Privoxy is not running", then the
-browser is not set up to use your Privoxy installation. If you receive anything
-else (probably nothing at all), it could either be that the browser is not set
-up correctly, or that Privoxy is not running at all. Check the log file.
+browser is correctly configured by entering the special URL: http://p.p/. This
+should take you to a page titled "This is Privoxy.." with access to Privoxy's
+internal configuration. If you see this, then you are good to go. If you
+receive a page saying "Privoxy is not running", then the browser is not set up
+to use your Privoxy installation. If you receive anything else (probably
+nothing at all), it could either be that the browser is not set up correctly,
+or that Privoxy is not running at all. Check the log file. For instructions on
+starting Privoxy and browser configuration, see the chapter on starting Privoxy
+in the user manual.
+
+-------------------------------------------------------------------------------
+
+2.8. I get a "Privoxy is not being used" dummy page although Privoxy is running
+and being used.
+
+First, make sure that Privoxy is really running and being used by visiting
+http://p.p/. You should see the Privoxy main page. If not, see the chapter on
+starting Privoxy in the user manual.
+
+Now if http://p.p/ works for you, but other parts of Privoxy's web interface
+show the dummy page, your browser has cached a redirection it encountered
+before Privoxy was being used. You need to clear your browser's cache. Note
+that shift-reloading the dummy page won't help, since that'll only refresh the
+dummy page, not the redirection that lead you there.
+
+The procedure for clearing the cache varies from browser to browser. As an
+example, Mozilla users would click Edit --> Preferences --> Advanced --> Cache
+and then click both "Clear Memory Cache" and "Clear Disk Cache".
 
 -------------------------------------------------------------------------------
 
@@ -487,13 +558,13 @@ then applied to requests matching one or more patterns. There are many possible
 actions that might apply to any given site. As an example, if you are blocking
 cookies as one of your default actions, but need to accept cookies from a given
 site, you would need to define an exception for this site in one of your
-actions files, preferably in user.action
+actions files, preferably in user.action.
 
 -------------------------------------------------------------------------------
 
 3.4. The "actions" concept confuses me. Please list some of these "actions".
 
-For a comprehensive discussion of the actions concept, please refer to the 
+For a comprehensive discussion of the actions concept, please refer to the
 actions file chapter in the user manual. It includes a list of all actions and
 an actions file tutorial to get you started.
 
@@ -532,62 +603,30 @@ like not to have to log in manually each time you access those websites, simply
 turn off all cookie handling for them in the user.action file. An example for
 yahoo might look like:
 
-# Allow all cookies for Yahoo login:                                           
-#                                                                              
-{ -crunch-incoming-cookies -crunch-outgoing-cookies -session-cookies-only }    
-.login.yahoo.com                                                               
+# Allow all cookies for Yahoo login:
+#
+{ -crunch-incoming-cookies -crunch-outgoing-cookies -session-cookies-only }
+.login.yahoo.com
+
 
 -------------------------------------------------------------------------------
 
-3.8. What's the difference between the "Cautious", "Medium" and "Advanced"
+3.8. What's the difference between the "Cautious", "Medium" and "Adventuresome"
 defaults?
 
 Configuring Privoxy is not entirely trivial. To help you get started, we
-provide you with three different default action "packages" in the web based
-actions file editor at http://config.privoxy.org/show-status. The following
-table shows you, which of the most important features are enabled in each
-configuration:
-
-Table 1. Default Configurations
-
-+-----------------------------------------------------------------------------+
-|Feature            |Cautious          |Intermadiate       |Advanced          |
-|-------------------+------------------+-------------------+------------------|
-|Ad-blocking by URL |yes               |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Ad-filtering by    |yes               |yes                |yes               |
-|size               |                  |                   |                  |
-|-------------------+------------------+-------------------+------------------|
-|GIF de-animation   |no                |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Referer forging    |no                |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Cookie handling    |none              |session-only       |kill              |
-|-------------------+------------------+-------------------+------------------|
-|Pop-up killing     |no                |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Fast redirects     |no                |no                 |yes               |
-|-------------------+------------------+-------------------+------------------|
-|HTML taming        |yes               |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|JavaScript taming  |yes               |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Web-bug killing    |yes               |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Fun text           |no                |no                 |yes               |
-|replacements       |                  |                   |                  |
-|-------------------+------------------+-------------------+------------------|
-|Image tag          |no                |no                 |yes               |
-|reordering         |                  |                   |                  |
-|-------------------+------------------+-------------------+------------------|
-|Ad-filtering by    |no                |no                 |yes               |
-|link               |                  |                   |                  |
-+-----------------------------------------------------------------------------+
+provide you with three different default action "profiles" in the web based
+actions file editor at http://config.privoxy.org/show-status. See the User
+Manual for a list of actions, and how the default profiles are set.
 
 Where the defaults are likely to break some sites, exceptions for known popular
 "problem" sites are included, but in general, the more aggressive your default
-settings are, the more exceptions you will have to make later. See the user
-manual for a more deatiled discussion.
+settings are, the more exceptions you will have to make later. See the User
+Manual for a more deatiled discussion.
+
+It should be noted that the "Adventuresome" profile (formerly known as the
+"Advanced" profile) is not only more aggressive, but also includes fun and,
+extreme usage of most of Privoxy's features. Use at your own risk!
 
 -------------------------------------------------------------------------------
 
@@ -644,11 +683,23 @@ of the LAN gateway interface, and port number to use. Assuming your LAN address
 is 192.168.1.1 and you wish to run Privoxy on port 8118, this line should look
 like:
 
-  listen-address  192.168.1.1:8118                                             
+  listen-address  192.168.1.1:8118
+
 
 Save the file, and restart Privoxy. Configure all browsers on the network then
 to use this address and port number.
 
+Alternately, you can have Privoxy listen on all available interfaces:
+
+  listen-address    :8118
+
+
+And then use Privoxy's permit-access feature to limit connections. A firewall
+in this situation is recommended as well.
+
+The above steps should be the same for any TCP network, regardless of operating
+system.
+
 If you run Privoxy on a LAN with untrusted users, we recommend that you
 double-check the access control and security options!
 
@@ -664,7 +715,7 @@ this choice only has effect for images which are blocked as images, i.e. whose
 URLs match both a handle-as-image and block action.
 
 If you want to see nothing, then change the set-image-blocker action to
-"blank". This can be done by editing the default.action file, or trough the 
+"blank". This can be done by editing the default.action file, or trough the
 web-based actions file editor.
 
 -------------------------------------------------------------------------------
@@ -705,13 +756,12 @@ will try to load the actual banner images and the usual image blocking will
 
 3.15. Can Privoxy run as a service on Win2K/NT?
 
-Yes, it can run as a system service using srvany.exe. The only catch is that
-this will effectively disable the Privoxy icon (and its menu!) in the taskbar.
-You can have one or the other, but not both at this time :(
+Yes, it can run as a system service using srvany.exe. See the discussion at
+http://sourceforge.net/tracker/?func=detail&atid=361118&aid=485617&group_id=
+11118, for details, and a sample configuration.
 
-There is a pending feature request for this functionality. See the discussion
-at http://sourceforge.net/tracker/?func=detail&atid=361118&aid=485617&group_id=
-11118, for details, and a sample configuration. 
+Version 3.0.1 fixes the problem where the icon and menu where not available in
+the taskbar for this usage.
 
 -------------------------------------------------------------------------------
 
@@ -743,6 +793,51 @@ used for chaining we recommend Transproxy (http://www.transproxy.nlc.net.au/).
 
 -------------------------------------------------------------------------------
 
+3.19. How can I configure Privoxy for use with Outlook Express?
+
+Outlook Express uses Internet Explorer components to both render HTML, and
+fetch any HTTP requests that may be embedded in an HTML email. So however you
+have Privoxy configured to work with IE, this configuration should
+automatically be shared.
+
+-------------------------------------------------------------------------------
+
+3.20. How can I have separate rules just for HTML mail?
+
+The short answer is, you can't. Privoxy has no way of knowing which particular
+application makes a request, so there is no way to distinguish between web
+pages and HTML mail. Privoxy just blindly proxies all requests. In the case of
+Outlook Express (see above), OE uses IE anyway, and there is no way for Privoxy
+to ever be able to distinguish between them (nor could any other proxy type
+application for that matter).
+
+For a good discussion of some of the issues involved (including privacy and
+security issues), see http://sourceforge.net/tracker/?func=detail&atid=211118&
+aid=629518&group_id=11118.
+
+-------------------------------------------------------------------------------
+
+3.21. How can I allow permanent cookies for my trusted sites?
+
+There are several actions that relate to cookies. The default behavior is to
+allow only "session cookies", which means the cookies only last for the current
+browser session. This eliminates most kinds of abuse related to cookies. But
+there may be cases where we want cookies to last.
+
+To disable all cookie actions, so that cookies are allowed unrestricted, both
+in and out, for example.com:
+
+ { -crunch-incoming-cookies -crunch-outgoing-cookies -session-cookies-only -filter{content-cookies} }
+  .example.com
+
+
+Place the above in user.action. Note some of these may be off by default
+anyway, so this might be redundant, but there is no harm being explicit in what
+you want to happen. user.action includes an alias for this situation, called
+allow-cookies.
+
+-------------------------------------------------------------------------------
+
 4. Miscellaneous
 
 4.1. How much does Privoxy slow my browsing down? This has to add extra time to
@@ -773,7 +868,11 @@ different, because most browsers are able to start rendering incomplete
 content, giving the user a feeling of "it works". This effect is especially
 noticeable on slow dialup connections.
 
-Filtering is automatically disabled for inappropriate MIME types. 
+Filtering is automatically disabled for inappropriate MIME types. But note that
+if the web server mis-reports the MIME type, then content that should not be
+filtered, could be. Privoxy only knows how to differentiate filterable content
+because of the MIME type as reported by the server, or because of some
+configuration setting that enables/disables filtering.
 
 -------------------------------------------------------------------------------
 
@@ -787,10 +886,11 @@ intercept requests for these addresses and answer them with its built-in "web
 server".
 
 This also makes for a good test for your browser configuration: If entering the
-URL http://config.privoxy.org/ takes you to a page saying "This is Privoxy..",
-everything is OK. If you get a page saying "Privoxy is not working" instead,
-then your browser didn't use Privoxy for the request, hence it could not be
-intercepted, and you have accessed the real web site at config.privoxy.org.
+URL http://config.privoxy.org/ takes you to a page saying "This is Privoxy
+...", everything is OK. If you get a page saying "Privoxy is not working"
+instead, then your browser didn't use Privoxy for the request, hence it could
+not be intercepted, and you have accessed the real web site at
+config.privoxy.org.
 
 With recent versions of Privoxy (version 2.9.x and later), the user interface
 features information on the run time status, the configuration, and even a
@@ -799,7 +899,7 @@ built-in editor for the actions files.
 Note that the built-in URLs from earlier versions of Junkbuster / Privoxy,
 http://example.com/show-proxy-args and http://i.j.b/, are no longer supported.
 If you still use such an old version, you should really consider upgrading to
-3.1.1.
+3.0.3.
 
 -------------------------------------------------------------------------------
 
@@ -836,7 +936,7 @@ can't even rule out that some of them only exist to *collect* information on
 You can find a list of anonymous public proxies at multiproxy.org and many more
 through Google. A particularly interesting project is the JAP service offered
 by the Technical University of Dresden (http://anon.inf.tu-dresden.de/
-index_en.html.
+index_en.html).
 
 There is, however, even in the single-machine case the possibility to make the
 server believe that your machine is in fact a shared proxy serving a whole big
@@ -955,6 +1055,11 @@ banners to be placed in an encrypted page come unencrypted nonetheless for
 efficiency reasons, which exposes them to the full power of Privoxy's ad
 blocking.
 
+"Content cookies" (those that are embedded in the actual HTML or JS page
+content, see filter{content-cookies}), in an SSL transaction will be impossible
+to block under these conditions. Fortunately, this does not seem to be a very
+common scenario since most cookies come by traditional means.
+
 -------------------------------------------------------------------------------
 
 4.13. Privoxy runs as a "server". How secure is it? Do I need to take any
@@ -1009,23 +1114,55 @@ browser, and the log consequently will show a "crunch".
 From the webserver's perspective, there is no difference between viewing a
 document (i.e. a page), and downloading a file. The same is true of Privoxy. If
 there is a match for a block pattern, it will still be blocked, and of course
-this is obvious. Filtering is potentially more of a concern since the results
-are not always so obvious.
+this is obvious.
+
+Filtering is potentially more of a concern since the results are not always so
+obvious, and the effects of filtering are there whether the file is simply
+viewed, or downloaded. And potentially whether the content is some obnoxious
+advertizement, or Mr. Jimmy's latest/greatest source code jewel. Of course, one
+of these presumably is "bad" content that we don't want, and the other is
+"good" content that we do want. Privoxy is blind to the differences, and can
+only distinguish "good from bad" by the configuration parameters we give it.
 
 Privoxy knows the differences in files according to the "Document Type" as
 reported by the webserver. If this is reported accurately (e.g. "application/
 zip" for a zip archive), then Privoxy knows to ignore these where appropriate.
-It is possible, however, that documents that are of an unknown type (generally
-assumed to be "text/plain") will be filtered, as will those that might be
-incorrectly reported by the webserver. If such a file is a downloaded file that
-is intended to be saved to disk, then any content that might have been altered
-by filtering, will be saved too, for these (probably very rare) cases.
+Privoxy potentially can filter HTML as well as plain text documents, subject to
+configuration parameters of course. Also, documents that are of an unknown type
+(generally assumed to be "text/plain") can be filtered, as will those that
+might be incorrectly reported by the webserver. If such a file is a downloaded
+file that is intended to be saved to disk, then any content that might have
+been altered by filtering, will be saved too, for these (probably rare) cases.
+
+Note that versions later than 3.0.2 do NOT filter document types of "text/
+plain". Prior to this, Privoxy did filter this document type.
+
+In short, filtering is "ON" if a) the Document Type as reported by the
+webserver is appropriate and b) the configuration allows it (or at least does
+not disallow it). That's it. There is no magic cookie anywhere to say this is
+"good" and this is "bad". It's the configuration that let's it all happen or
+not.
+
+If you download text files, you probably do not want these to be filtered,
+particularly if the content is source code, or other critical content. Source
+code sometimes might be mistaken for Javascript (i.e. the kind that might open
+a pop-up window). It is recommended to turn off filtering for download sites
+(particularly if the content may be plain text files and you are using version
+3.0.2 or earlier) in your user.action file. And also, for any site or page
+where making any changes at all to the content is to be avoided.
+
+Privoxy does not do FTP at all, only HTTP protocols, so please don't even try.
+
+-------------------------------------------------------------------------------
+
+4.18. I just downloaded a Perl script, and Privoxy altered it! Yikes, what is
+wrong!
 
-Privoxy does not do FTP at all, only HTTP protocols.
+Please read above.
 
 -------------------------------------------------------------------------------
 
-4.18. Where can I find more information about Privoxy and related issues?
+4.19. Where can I find more information about Privoxy and related issues?
 
 Other references and sites of interest to Privoxy users:
 
@@ -1033,35 +1170,46 @@ http://www.privoxy.org/, the Privoxy Home page.
 
 http://www.privoxy.org/faq/, the Privoxy FAQ.
 
-http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on       
-SourceForge.                                                                   
+http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on
+SourceForge.
 
-http://config.privoxy.org/, the web-based user interface. Privoxy must be      
-running for this to work. Shortcut: http://p.p/                                
+http://config.privoxy.org/, the web-based user interface. Privoxy must be
+running for this to work. Shortcut: http://p.p/
 
 http://www.privoxy.org/actions/, to submit "misses" to the developers.
 
-http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun   
-ideas from Privoxy users.                                                      
+http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun
+ideas from Privoxy users.
 
-http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are  
-used to track web users.                                                       
+http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are
+used to track web users.
 
 http://www.junkbusters.com/ijb.html, the original Internet Junkbuster.
 
-http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,  
-from which Privoxy was derived.                                                
+http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,
+from which Privoxy was derived.
 
-http://privacy.net/analyze/, a useful site to check what information about you 
-is leaked while you browse the web.                                            
+http://privacy.net/analyze/, a useful site to check what information about you
+is leaked while you browse the web.
 
-http://www.squid-cache.org/, a very popular caching proxy, which is often used 
-together with Privoxy.                                                         
+http://www.squid-cache.org/, a very popular caching proxy, which is often used
+together with Privoxy.
 
 http://www.privoxy.org/developer-manual/, the Privoxy developer manual.
 
 -------------------------------------------------------------------------------
 
+4.20. I've noticed that Privoxy changes "Microsoft" to "MicroSuck"! Why are you
+manipulating my browsing?
+
+We're not. The text substitutions that you are seeing are disabled in the
+default configuration as shipped. You have either manually activated the "fun"
+filter which is clearly labeled "Text replacements for subversive browsing fun!
+" or you have implicitly activated it by choosing the "Adventuresome" profile
+in the web-based editor (formerly known as the Advanced profile).
+
+-------------------------------------------------------------------------------
+
 5. Troubleshooting
 
 5.1. I just upgraded and am getting "connection refused" with every web page?
@@ -1072,7 +1220,7 @@ port than what Privoxy is using.
 The old Privoxy (and also Junkbuster) used port 8000 by default. This has been
 changed to port 8118 now, due to a conflict with NAS (Network Audio Service),
 which uses port 8000. If you haven't, you need to change your browser to the
-new port number, or alternately change the listen-address option in Privoxy's 
+new port number, or alternately change the listen-address option in Privoxy's
 main configuration file.
 
 -------------------------------------------------------------------------------
@@ -1166,6 +1314,19 @@ Privoxy cannot act as a proxy for FTP traffic, so do not configure your browser
 to use Privoxy as an FTP proxy. The same is true for any protocol other than
 HTTP or HTTPS.
 
+Most browsers understand FTP as well as HTTP. If you connect to a site, with a
+URL like ftp://ftp.example.com, your browser is making an FTP connection, and
+not a HTTP connection. So while your browser may speak FTP, Privoxy does not,
+and cannot proxy such traffic.
+
+To complicate matters, some systems may have a generic "proxy" setting, which
+will silently enable both HTTP and FTP proxying! So it is possible to
+accidentally enable FTP proxying in these cases. And of course, if this
+happens, Privoxy will indeed cause problems since it does not know FTP.
+
+Will Privoxy ever proxy FTP traffic? Unlikely. There just is not much reason,
+and the work to make this happen is more than it may seem.
+
 -------------------------------------------------------------------------------
 
 5.6. In Mac OSX, I can't configure Microsoft Internet Explorer to use Privoxy
@@ -1195,22 +1356,129 @@ desktop should make it appear empty again.
 
 -------------------------------------------------------------------------------
 
-5.8. I get a completely blank page at one site. "View Source" shows only:
-.
+5.8. In Mac OSX Panther (10.3), images often fail to load and/or I experience
+random delays in page loading. I'm using localhost as my browser's proxy
+setting.
+
+We believe this is due to an IPv6-related bug in OSX, but don't fully
+understand the issue yet. In any case, changing the proxy setting to 127.0.0.1
+instead of localhost works around the problem.
+
+-------------------------------------------------------------------------------
+
+5.9. I get a completely blank page at one site. "View Source" shows only:
+. Without Privoxy the page loads fine.
+
+Chances are that the site suffers from a bug in PHP, which results in empty
+pages being sent if the client explicitly requests an uncompressed page, like
+Privoxy does. This bug has been fixed in PHP 4.2.3.
+
+To find out if this is in fact the source of the problem, try adding the site
+to a -prevent-compression section in user.action:
+
+   # Make exceptions for ill-behaved sites:
+   #
+   {-prevent-compression}
+    .example.com
+
+
+If that works, you may also want to report the problem to the site's
+webmasters, telling them to use zlib.output_compression instead of ob_gzhandler
+in their PHP applications (workaround) or upgrade to PHP 4.2.3 or later (fix).
+
+-------------------------------------------------------------------------------
+
+5.10. Why am I getting a 503 Error (WSAECONNREFUSED) on every page?
+
+More than likely this is a problem with the network stack. ZoneAlarm has been
+reported to cause this symptom -- even if not running. The solution is to
+either fight the ZA configuration, or uninstall ZoneAlarm, and then find
+something better behaved in its place. Other firewall type products may cause
+similar type problems if not configured correctly.
+
+-------------------------------------------------------------------------------
+
+5.11. My logs show many "Unable to get my own hostname" lines. Why?
+
+Privoxy tries to get the hostname of the system its running on from the IP
+address of the system interface it is bound to (from the config file
+listen-address setting). If the system cannot supply this information, Privoxy
+logs this condition.
+
+Typically, this would be considered a system configuration error. It is not a
+fatal error to Privoxy however, but may result in a much slower response from
+Privoxy due to DNS timeouts.
+
+-------------------------------------------------------------------------------
+
+5.12. When I try to launch Privoxy, I get an error message "port 8118 is
+already in use" (or similar wording). Why?
+
+Port 8118 is Privoxy's default TCP "listening" port. Typically this message
+would mean that there is already one instance of Privoxy running, and you are
+actually trying to start a second Privoxy on the same port, which will not
+work. How and why this might happen varies from platform to platform, but you
+need to check your installation and start-up procedures.
+
+-------------------------------------------------------------------------------
+
+5.13. Pages with UTF-8 fonts are garbled.
+
+This is caused by the "demoronizer" filter, which was introduced in version
+3.0.2, and was inappropriately turned on by default. You should either upgrade
+Privoxy, or at least upgrade to the most recent default.action file available
+from SourceForge. Or you can simply disable the demoronizer filter.
+
+-------------------------------------------------------------------------------
+
+5.14. Why are binary files (such as images) corrupted when Privoxy is used?
+
+This may also be caused by the "demoronizer" filter, in conjunction with a web
+server that is misreporting a file type. Binary files are exempted from
+Privoxy's filtering (unless the web server by mistake says the file is a plain
+text file). Either upgrade Privoxy, or go to the most recent default.action
+file available from SourceForge.
+
+-------------------------------------------------------------------------------
+
+5.15. What is the "demoronizer" and why is it there?
+
+The original demoronizer was a Perl script that cleaned up HTML pages which
+were created with certain Microsoft products. MS has used proprietary
+extensions to standardized font encodings (ISO 8859-1), which has caused
+problems for pages that are viewed with non-Microsoft products (and are
+expecting to see a standard set of fonts). The demoronizer corrected these
+errors so the pages displayed correctly. Privoxy borrowed from this script,
+introducing a filter based on the original demoronizer, which in turn could
+correct these errors on the fly.
+
+But this is only needed in some situations, and will cause serious problems in
+some other situations.
+
+If you are using Microsoft products, you do not need it. If you need to view
+pages with UTF-8 characters (such as Cyrillic or Chinese), then it will cause
+corruption of the fonts, and thus should not be on.
+
+On the other hand, if you use non-Microsoft products, and you occasionally
+notice wierd characters on pages, you might want to try it.
+
+This filter was introduced with version 3.0.2 of Privoxy, and was on by default
+in that version. It is off in all subsequent versions (unless turned on by the
+user).
+
+-------------------------------------------------------------------------------
 
-This is often the result of a webserver using PHP that mishandles the request
-Privoxy sends to not compress the content (a PHP bug).
+5.16. Why do I keep seeing "PrivoxyWindowOpen()" in raw source code?
 
-In a default configuration, Privoxy requests all data be sent "uncompressed".
-This is required for the page filtering and other magic to work. In some rare
-cases, the browser and webserver miscommunicate and the result is a totally
-blank page. The suggested work around is to selectively turn off this feature
-for sites that exhibit such behavior. Example section for user.action:
+Privoxy is attempting to disable malicious Javascript in this case, with the
+unsolicited-popups filter. Privoxy cannot tell very well "good" code snippets
+from "bad" code snippets.
 
-   # Make exceptions for ill-behaved sites:                                      
-   #                                                                             
-   {-prevent-compression}                                                        
-    .example.com                                                                 
+If you see this in HTML source, and the page displays without problems, then
+this is good, and likely some pop-up window was disabled. If you see this where
+it is causing a problem, such as a downloaded program source code file, then
+you should set an exception for this site or page such that the integrity of
+the page stays in tact by disabling all filtering.
 
 -------------------------------------------------------------------------------
 
@@ -1224,7 +1492,7 @@ with the best support:
 
 6.1. Get Support
 
-For casual users, our support forum at SourceForge is probably best suited: 
+For casual users, our support forum at SourceForge is probably best suited:
 http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
 All users are of course welcome to discuss their issues on the users mailing
@@ -1247,7 +1515,7 @@ debugging. If you are using your own custom configuration, please try the stock
 configs to see if the problem is configuration related.
 
 If not using the latest version, chances are that the bug has been found and
-fixed in the meantime. We would appreciate if you could take the time to 
+fixed in the meantime. We would appreciate if you could take the time to
 upgrade to the latest version (or even the latest CVS snapshot) and verify your
 bug, but this is not required for reporting.
 
@@ -1287,7 +1555,7 @@ group_id=11118.
 
 7. Privoxy Copyright, License and History
 
-Copyright © 2001, 2002 by Privoxy Developers 
+Copyright © 2001 - 2004 by Privoxy Developers 
 
 Some source code is based on code Copyright © 1997 by Anonymous Coders and
 Junkbusters, Inc. and licensed under the GNU General Public License.
@@ -1321,7 +1589,7 @@ this program; if not, write to the
 
 7.2. History
 
-In the beginning, there was the Internet Junkbuster, by Anonymous Coders and 
+In the beginning, there was the Internet Junkbuster, by Anonymous Coders and
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
@@ -1344,6 +1612,6 @@ Then, some developers picked up the thread, and started turning the software
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
-The result of this is Privoxy, whose first stable release, 3.0, was released
+The result of this is Privoxy, whose first stable version, 3.0, was released
 August, 2002.
 
diff --git a/doc/text/user-manual.txt b/doc/text/user-manual.txt
index 2e5302c9..f229e883 100644
--- a/doc/text/user-manual.txt
+++ b/doc/text/user-manual.txt
@@ -1,14 +1,14 @@
-Privoxy 3.1.1 User Manual
+Privoxy 3.0.3 User Manual
 
-Copyright © 2001, 2002 by Privoxy Developers
+[ Copyright © 2001 - 2004 by Privoxy Developers ]
 
-$Id: user-manual.sgml,v 2.2 2002/09/05 05:45:30 hal9 Exp $
+$Id: user-manual.txt,v 1.60.2.7 2004/01/30 23:46:57 oes Exp $
 
-The User Manual gives users information on how to install, configure and use 
+The User Manual gives users information on how to install, configure and use
 Privoxy.
 
 Privoxy is a web proxy with advanced filtering capabilities for protecting
-privacy, filtering web page content, managing cookies, controlling access, and
+privacy, modifying web page content, managing cookies, controlling access, and
 removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a
 very flexible configuration and can be customized to suit individual needs and
 tastes. Privoxy has application for both stand-alone systems and multi-user
@@ -23,13 +23,13 @@ user-manual/. Please see the Contact section on how to contact the developers.
 
 Table of Contents
 1. Introduction
-   
+
     1.1. Features
-   
+
 2. Installation
-   
+
     2.1. Binary Packages
-       
+
         2.1.1. Red Hat, SuSE and Conectiva RPMs
         2.1.2. Debian
         2.1.3. Windows
@@ -38,17 +38,17 @@ Table of Contents
         2.1.6. Mac OSX
         2.1.7. AmigaOS
         2.1.8. Gentoo
-       
+
     2.2. Building from Source
     2.3. Keeping your Installation Up-to-Date
-   
+
 3. Note to Upgraders
 4. Quickstart to Using Privoxy
-   
+
     4.1. Quickstart to Ad Blocking
-   
+
 5. Starting Privoxy
-   
+
     5.1. Red Hat and Conectiva
     5.2. Debian
     5.3. SuSE
@@ -59,16 +59,16 @@ Table of Contents
     5.8. AmigaOS
     5.9. Gentoo
     5.10. Command Line Options
-   
+
 6. Privoxy Configuration
-   
+
     6.1. Controlling Privoxy with Your Web Browser
     6.2. Configuration Files Overview
-   
+
 7. The Main Configuration File
-   
+
     7.1. Configuration and Log File Locations
-       
+
         7.1.1. confdir
         7.1.2. logdir
         7.1.3. actionsfile
@@ -76,48 +76,48 @@ Table of Contents
         7.1.5. logfile
         7.1.6. jarfile
         7.1.7. trustfile
-       
+
     7.2. Local Set-up Documentation
-       
+
         7.2.1. user-manual
         7.2.2. trust-info-url
         7.2.3. admin-address
         7.2.4. proxy-info-url
-       
+
     7.3. Debugging
-       
+
         7.3.1. debug
         7.3.2. single-threaded
-       
+
     7.4. Access Control and Security
-       
+
         7.4.1. listen-address
         7.4.2. toggle
         7.4.3. enable-remote-toggle
         7.4.4. enable-edit-actions
         7.4.5. ACLs: permit-access and deny-access
         7.4.6. buffer-limit
-       
+
     7.5. Forwarding
-       
+
         7.5.1. forward
         7.5.2. forward-socks4 and forward-socks4a
         7.5.3. Advanced Forwarding Examples
-       
+
     7.6. Windows GUI Options
-   
+
 8. Actions Files
-   
+
     8.1. Finding the Right Mix
     8.2. How to Edit
     8.3. How Actions are Applied to URLs
     8.4. Patterns
-       
+
         8.4.1. The Domain Pattern
         8.4.2. The Path Pattern
-       
+
     8.5. Actions
-       
+
         8.5.1. add-header
         8.5.2. block
         8.5.3. crunch-incoming-cookies
@@ -139,102 +139,94 @@ Table of Contents
         8.5.19. session-cookies-only
         8.5.20. set-image-blocker
         8.5.21. Summary
-       
+
     8.6. Aliases
     8.7. Actions Files Tutorial
-       
+
         8.7.1. default.action
         8.7.2. user.action
-       
+
 9. The Filter File
-   
+
     9.1. Filter File Tutorial
-   
+    9.2. The Pre-defined Filters
+
 10. Templates
 11. Contacting the Developers, Bug Reporting and Feature Requests
-   
+
     11.1. Get Support
     11.2. Report Bugs
     11.3. Request New Features
     11.4. Report Ads or Other Actions-Related Problems
     11.5. Other
-   
+
 12. Privoxy Copyright, License and History
-   
+
     12.1. License
     12.2. History
     12.3. Authors
-   
+
 13. See Also
 14. Appendix
-   
+
     14.1. Regular Expressions
     14.2. Privoxy's Internal Pages
-       
+
         14.2.1. Bookmarklets
-       
+
     14.3. Chain of Events
     14.4. Anatomy of an Action
-   
-1. Introduction
 
-This documentation is included with the current alpha version of Privoxy,
-v.3.1.1, and is mostly complete at this point. The most up to date reference
-for the time being is still the comments in the source files and in the
-individual configuration files. Development of version 3.0 is currently nearing
-completion, and includes many significant changes and enhancements over earlier
-versions. The target release date for stable v3.0 is "soon" ;-).
+1. Introduction
 
-Since this is a alpha version, not all new features are well tested. This
-documentation may be slightly out of sync as a result (especially with CVS
-sources). And there may be bugs, though hopefully not many!
+This documentation is included with the current stable version of Privoxy,
+v.3.0.3.
 
 -------------------------------------------------------------------------------
 
 1.1. Features
 
 In addition to Internet Junkbuster's traditional features of ad and banner
-blocking and cookie management, Privoxy provides new features, some of them
-currently under development:
+blocking and cookie management, Privoxy provides new features:
 
   * Integrated browser based configuration and control utility at http://
     config.privoxy.org/ (shortcut: http://p.p/). Browser-based tracing of rule
     and filter effects. Remote toggling.
-   
+
   * Web page content filtering (removes banners based on size, invisible
     "web-bugs", JavaScript and HTML annoyances, pop-up windows, etc.)
-   
+
   * Modularized configuration that allows for standard settings and user
     settings to reside in separate files, so that installing updated actions
     files won't overwrite individual user settings.
-   
+
   * HTTP/1.1 compliant (but not all optional 1.1 features are supported).
-   
+
   * Support for Perl Compatible Regular Expressions in the configuration files,
     and generally a more sophisticated and flexible configuration syntax over
     previous versions.
-   
+
   * Improved cookie management features (e.g. session based cookies).
-   
+
   * GIF de-animation.
-   
+
   * Bypass many click-tracking scripts (avoids script redirection).
-   
+
   * Multi-threaded (POSIX and native threads).
-   
+
   * User-customizable HTML templates for all proxy-generated pages (e.g.
     "blocked" page).
-   
+
   * Auto-detection and re-reading of config file changes.
-   
+
   * Improved signal handling, and a true daemon mode (Unix).
-   
+
   * Every feature now controllable on a per-site or per-location basis,
     configuration more powerful and versatile over-all.
-   
+
   * Many smaller new features added, limitations and bugs removed, and security
     holes fixed.
-   
+
 -------------------------------------------------------------------------------
 
 2. Installation
@@ -259,7 +251,7 @@ How to install the binary packages depends on your operating system:
 
 2.1.1. Red Hat, SuSE and Conectiva RPMs
 
-RPMs can be installed with rpm -Uvh privoxy-3.1.1-1.rpm, and will use /etc/
+RPMs can be installed with rpm -Uvh privoxy-3.0.3-1.rpm, and will use /etc/
 privoxy for the location of configuration files.
 
 Note that on Red Hat, Privoxy will not be automatically started on system boot.
@@ -267,7 +259,7 @@ You will need to enable that using chkconfig, ntsysv, or similar methods. Note
 that SuSE will automatically start Privoxy in the boot process.
 
 If you have problems with failed dependencies, try rebuilding the SRC RPM: rpm
---rebuild privoxy-3.1.1-1.src.rpm. This will use your locally installed
+--rebuild privoxy-3.0.3-1.src.rpm. This will use your locally installed
 libraries and RPM version.
 
 Also note that if you have a Junkbuster RPM installed on your system, you need
@@ -278,8 +270,8 @@ remove Junkbuster automatically, before installing Privoxy.
 
 2.1.2. Debian
 
-DEBs can be installed with dpkg -i privoxy_3.1.1-1.deb, and will use /etc/
-privoxy for the location of configuration files.
+DEBs can be installed with apt-get install privoxy, and will use /etc/privoxy
+for the location of configuration files.
 
 -------------------------------------------------------------------------------
 
@@ -302,7 +294,7 @@ most part, you'll have to figure out where things go.
 
 First, make sure that no previous installations of Junkbuster and / or Privoxy
 are left on your system. Check that no Junkbuster or Privoxy objects are in
-your startup folder. 
+your startup folder.
 
 Then, just double-click the WarpIN self-installing archive, which will guide
 you through the installation process. A shadow of the Privoxy executable will
@@ -326,8 +318,9 @@ automatically, remove or rename the folder /Library/StartupItems/Privoxy.
 To start Privoxy by hand, double-click on StartPrivoxy.command in the /Library/
 Privoxy folder. Or, type this command in the Terminal:
 
-  /Library/Privoxy/StartPrivoxy.command                                        
-                                                                               
+  /Library/Privoxy/StartPrivoxy.command
+
+
 
 You will be prompted for the administrator password.
 
@@ -352,7 +345,7 @@ latest changes from the Portage tree. With emerge privoxy you install the
 latest version.
 
 Configuration files are in /etc/privoxy, the documentation is in /usr/share/doc
-/privoxy-3.1.1 and the Log directory is in /var/log/privoxy.
+/privoxy-3.0.3 and the Log directory is in /var/log/privoxy.
 
 -------------------------------------------------------------------------------
 
@@ -371,42 +364,38 @@ compiler like gcc are required.
 When building from a source tarball (either release version or nightly CVS
 tarball), first unpack the source:
 
- tar xzvf privoxy-3.1.1-beta-src* [.tgz or .tar.gz]                            
- cd privoxy-3.1.1-beta                                                         
+ tar xzvf privoxy-3.0.3-src* [.tgz or .tar.gz]
+ cd privoxy-3.0.3
+
 
 For retrieving the current CVS sources, you'll need CVS installed. Note that
 sources from CVS are development quality, and may not be stable, or well
 tested. To download CVS source:
 
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login          
-  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co current 
-  cd current                                                                         
+  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
+  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co current
+  cd current
+
 
 This will create a directory named current/, which will contain the source
 tree.
 
 Then, in either case, to build from unpacked tarball or CVS source:
 
- autoheader                                                                    
- autoconf                                                                      
- ./configure      # (--help to see options)                                    
- make             # (the make from gnu, gmake for *BSD)                        
- su                                                                            
- make -n install  # (to see where all the files will go)                       
- make install     # (to really install)                                        
-
-+-----------------------------------------------------------------------------+
-|                                   Warning                                   |
-|-----------------------------------------------------------------------------|
-|The "make install" target is temporary quite broken! It is recommended to use|
-|a binary package, or do a source build, and manually install the components. |
-|Sorry.                                                                       |
-+-----------------------------------------------------------------------------+
+ autoheader
+ autoconf
+ ./configure      # (--help to see options)
+ make             # (the make from gnu, gmake for *BSD)
+ su
+ make -n install  # (to see where all the files will go)
+ make install     # (to really install)
+
 
 If you have gnu make, you can have the first four steps automatically done for
 you by just typing:
 
-  make                                                                         
+  make
+
 
 in the freshly downloaded or unpacked source directory.
 
@@ -458,67 +447,71 @@ A quick list of things to be aware of before upgrading:
 
   * The default listening port is now 8118 due to a conflict with another
     service (NAS).
-   
+
   * Some installers may remove earlier versions completely. Save any important
     configuration files!
-   
+
   * Privoxy is controllable with a web browser at the special URL: http://
     config.privoxy.org/ (Shortcut: http://p.p/). Many aspects of configuration
     can be done here, including temporarily disabling Privoxy.
-   
+
   * The primary configuration files for cookie management, ad and banner
     blocking, and many other aspects of Privoxy configuration are the actions
     files. It is strongly recommended to become familiar with the new actions
     concept below, before modifying these files. Locally defined rules should
     go into user.action.
-   
+
   * Some installers may not automatically start Privoxy after installation.
-   
+
 -------------------------------------------------------------------------------
 
 4. Quickstart to Using Privoxy
 
   * If upgrading, from versions before 2.9.16, please back up any configuration
     files. See the Note to Upgraders Section.
-   
+
   * Install Privoxy. See the Installation Section below for platform specific
     information.
-   
+
   * Advanced users and those who want to offer Privoxy service to more than
-    just their local machine should check the main config file, especially the 
+    just their local machine should check the main config file, especially the
     security-relevant options. These are off by default.
-   
+
   * Start Privoxy, if the installation program has not done this already (may
     vary according to platform). See the section Starting Privoxy.
-   
-  * Set your browser to use Privoxy as HTTP and HTTPS proxy by setting the
-    proxy configuration for address of 127.0.0.1 and port 8118. (Junkbuster and
-    earlier versions of Privoxy used port 8000.) See the section Starting
+
+  * Set your browser to use Privoxy as HTTP and HTTPS (SSL) proxy by setting
+    the proxy configuration for address of 127.0.0.1 and port 8118. (Junkbuster
+    and earlier versions of Privoxy used port 8000.) See the section Starting
     Privoxy below for more details on this.
-   
+
   * Flush your browser's disk and memory caches, to remove any cached ad
-    images.
-   
+    images. If using Privoxy to manage cookies, you should remove any currently
+    stored cookies too.
+
   * A default installation should provide a reasonable starting point for most.
     There will undoubtedly be occasions where you will want to adjust the
     configuration, but that can be dealt with as the need arises. Little to no
     initial configuration is required in most cases.
-   
+
     See the Configuration section for more configuration options, and how to
     customize your installation.
-   
+
   * If you experience ads that slipped through, innocent images that are
     blocked, or otherwise feel the need to fine-tune Privoxy's behaviour, take
     a look at the actions files. As a quick start, you might find the richly
     commented examples helpful. You can also view and edit the actions files
     through the web-based user interface. The Appendix "Anatomy of an Action"
     has hints how to debug actions that "misbehave".
-   
+
+  * For easy access to Privoxy's most important controls, drag the provided
+    Bookmarklets into your browser's personal toolbar.
+
   * Please see the section Contacting the Developers on how to report bugs or
     problems with websites or to get help.
-   
+
   * Now enjoy surfing with enhanced comfort and privacy!
-   
+
 -------------------------------------------------------------------------------
 
 4.1. Quickstart to Ad Blocking
@@ -544,7 +537,7 @@ Secondly, a brief explanation of Privoxy's "actions". "Actions" in this
 context, are the directives we use to tell Privoxy to perform some task
 relating to HTTP transactions (i.e. web browsing). We tell Privoxy to take some
 "action". Each action has a unique name and function. While there are many
-potential actions in Privoxy's arsenal, only a few are used for ad blocking. 
+potential actions in Privoxy's arsenal, only a few are used for ad blocking.
 Actions, and action configuration files, are explained in depth below.
 
 Actions are specified in Privoxy's configuration, followed by one or more URLs
@@ -571,7 +564,7 @@ and set-image-blocker:
     itself, it simply stops any communication with the remote server and sends
     Privoxy's own built-in BLOCKED page instead to let you now what has
     happened.
-   
+
   * handle-as-image - tells Privoxy to treat this URL as an image. Privoxy's
     default configuration already does this for all common image types (e.g.
     GIF), but there are many situations where this is not so easy to determine.
@@ -581,25 +574,25 @@ and set-image-blocker:
     page (which would only result in a "broken image" icon). There are some
     limitations to this though. For instance, you can't just brute-force an
     image substitution for an entire HTML page in most situations.
-   
+
   * set-image-blocker - tells Privoxy what to display in place of an ad image
     that has hit a block rule. For this to come into play, the URL must match a
-    block action somewhere in the configuration, and, it must also match an 
+    block action somewhere in the configuration, and, it must also match an
     handle-as-image action.
-   
+
     The configuration options on what to display instead of the ad are:
-   
-       pattern - a checkerboard pattern, so that an ad replacement is obvious. 
-    This is the default.                                                       
-   
+
+       pattern - a checkerboard pattern, so that an ad replacement is obvious.
+    This is the default.
+
        blank - A very small empty GIF image is displayed. This is the so-called
-    "invisible" configuration option.                                          
-   
-       http:// - A redirect to any image anywhere of the user's choosing  
-    (advanced usage).                                                          
-   
+    "invisible" configuration option.
+
+       http:// - A redirect to any image anywhere of the user's choosing
+    (advanced usage).
+
 The quickest way to adjust any of these settings is with your browser through
-the special Privoxy editor at http://config.privoxy.org/show-status (shortcut: 
+the special Privoxy editor at http://config.privoxy.org/show-status (shortcut:
 http://p.p/show-status). This is an internal page, and does not require
 Internet access. Select the appropriate "actions" file, and click "Edit". It is
 best to put personal or local preferences in user.action since this is not
@@ -612,28 +605,28 @@ A quick and simple step by step example:
 
   * Right click on the ad image to be blocked, then select "Copy Link Location"
     from the pop-up menu.
-   
+
   * Set your browser to http://config.privoxy.org/show-status
-   
+
   * Find user.action in the top section, and click on "Edit":
-   
+
     Figure 1. Actions Files in Use
-   
+
     [files-in-u]
-   
+
   * You should have a section with only block listed under "Actions:". If not,
     click a "Insert new section below" button, and in the new section that just
     appeared, click the Edit button right under the word "Actions:". This will
     bring up a list of all actions. Find block near the top, and click in the
     "Enabled" column, then "Submit" just below the list.
-   
+
   * Now, in the block actions section, click the "Add" button, and paste the
     URL the browser got from "Copy Link Location". Remove the http:// at the
     beginning of the URL. Then, click "Submit" (or "OK" if in a pop-up window).
-   
+
   * Now go back to the original page, and press SHIFT-Reload (or flush all
     browser caches). The image should be gone now.
-   
+
 This is a very crude and simple example. There might be good reasons to use a
 wildcard pattern match to include potentially similar images from the same
 site. For a more extensive explanation of "patterns", and the entire actions
@@ -701,7 +694,8 @@ We use a script. Note that Red Hat does not start Privoxy upon booting per
 default. It will use the file /etc/privoxy/config as its main configuration
 file.
 
- # /etc/rc.d/init.d/privoxy start                                              
+ # /etc/rc.d/init.d/privoxy start
+
 
 -------------------------------------------------------------------------------
 
@@ -710,7 +704,8 @@ file.
 We use a script. Note that Debian starts Privoxy upon booting per default. It
 will use the file /etc/privoxy/config as its main configuration file.
 
- # /etc/init.d/privoxy start                                                   
+ # /etc/init.d/privoxy start
+
 
 -------------------------------------------------------------------------------
 
@@ -719,7 +714,8 @@ will use the file /etc/privoxy/config as its main configuration file.
 We use a script. It will use the file /etc/privoxy/config as its main
 configuration file. Note that SuSE starts Privoxy upon booting your PC.
 
- # rcprivoxy start                                                             
+ # rcprivoxy start
+
 
 -------------------------------------------------------------------------------
 
@@ -735,7 +731,8 @@ Note that Windows will automatically start Privoxy upon booting you PC.
 
 Example Unix startup command:
 
- # /usr/sbin/privoxy /etc/privoxy/config                                       
+ # /usr/sbin/privoxy /etc/privoxy/config
+
 
 -------------------------------------------------------------------------------
 
@@ -754,8 +751,9 @@ system restarts. To start Privoxy by hand, double-click on the
 StartPrivoxy.command icon in the /Library/Privoxy folder. Or, type this command
 in the Terminal:
 
-  /Library/Privoxy/StartPrivoxy.command                                        
-                                                                               
+  /Library/Privoxy/StartPrivoxy.command
+
+
 
 You will be prompted for the administrator password.
 
@@ -763,8 +761,8 @@ You will be prompted for the administrator password.
 
 5.8. AmigaOS
 
-Start Privoxy (with RUN <>NIL:) in your startnet script (AmiTCP), in s:
-user-startup (RoadShow), as startup program in your startup script (Genesis),
+Start Privoxy (with RUN <>NIL:) in your startnet script (AmiTCP), in
+s:user-startup (RoadShow), as startup program in your startup script (Genesis),
 or as startup action (Miami and MiamiDx). Privoxy will automatically quit when
 you quit your TCP/IP stack (just ignore the harmless warning your TCP/IP stack
 may display that Privoxy is still running).
@@ -776,14 +774,16 @@ may display that Privoxy is still running).
 A script is again used. It will use the file /etc/privoxy/config as its main
 configuration file.
 
- /etc/init.d/privoxy start                                                     
-                                                                               
+ /etc/init.d/privoxy start
+
+
 
 Note that Privoxy is not automatically started at boot time by default. You can
 change this with the rc-update command.
 
- rc-update add privoxy default                                                 
-                                                                               
+ rc-update add privoxy default
+
+
 
 -------------------------------------------------------------------------------
 
@@ -792,37 +792,45 @@ change this with the rc-update command.
 Privoxy may be invoked with the following command-line options:
 
   * --version
-   
+
     Print version info and exit. Unix only.
-   
+
   * --help
-   
+
     Print short usage info and exit. Unix only.
-   
+
   * --no-daemon
-   
+
     Don't become a daemon, i.e. don't fork and become process group leader, and
     don't detach from controlling tty. Unix only.
-   
+
   * --pidfile FILE
-   
+
     On startup, write the process ID to FILE. Delete the FILE on exit. Failure
     to create or delete the FILE is non-fatal. If no FILE option is given, no
     PID file will be used. Unix only.
-   
+
   * --user USER[.GROUP]
-   
+
     After (optionally) writing the PID file, assume the user ID of USER, and if
     included the GID of GROUP. Exit if the privileges are not sufficient to do
     so. Unix only.
-   
+
+  * --chroot
+
+    Before changing to the user ID given in the --user option, chroot to that
+    user's home directory, i.e. make the kernel pretend to the Privoxy process
+    that the directory tree starts there. If set up carefully, this can limit
+    the impact of possible vulnerabilities in Privoxy to the files contained in
+    that hierarchy. Unix only.
+
   * configfile
-   
+
     If no configfile is included on the command line, Privoxy will look for a
     file named "config" in the current directory (except on Win32 where it will
     look for "config.txt" instead). Specify full path to avoid confusion. If no
     config file is found, Privoxy will fail to start.
-   
+
 -------------------------------------------------------------------------------
 
 6. Privoxy Configuration
@@ -837,16 +845,16 @@ easily with a web browser.
 
 Privoxy's user interface can be reached through the special URL http://
 config.privoxy.org/ (shortcut: http://p.p/), which is a built-in page and works
-without Internet access. You will see the following section: 
+without Internet access. You will see the following section:
+
+     Privoxy Menu
+        ?  View & change the current configuration
+        ?  View the source code version numbers
+        ?  View the request headers.
+        ?  Look up which actions apply to a URL and why
+        ?  Toggle Privoxy on or off
+        ?  Documentation
 
-     Privoxy Menu                                                              
-        ?  View & change the current configuration                             
-        ?  View the source code version numbers                                
-        ?  View the request headers.                                           
-        ?  Look up which actions apply to a URL and why                        
-        ?  Toggle Privoxy on or off                                            
-        ?  Documentation                                                       
-                                                                               
 
 This should be self-explanatory. Note the first item leads to an editor for the
 actions files, which is where the ad, banner, cookie, and URL blocking magic is
@@ -867,9 +875,7 @@ you can toggle Privoxy with one click from your browser.
 
 For Unix, *BSD and Linux, all configuration files are located in /etc/privoxy/
 by default. For MS Windows, OS/2, and AmigaOS these are all in the same
-directory as the Privoxy executable. The name and number of configuration files
-has changed from previous versions, and is subject to change as development
-progresses.
+directory as the Privoxy executable.
 
 The installed defaults provide a reasonable starting point, though some
 settings may be aggressive by some standards. For the time being, the principle
@@ -877,30 +883,31 @@ configuration files are:
 
   * The main configuration file is named config on Linux, Unix, BSD, OS/2, and
     AmigaOS and config.txt on Windows. This is a required file.
-   
+
   * default.action (the main actions file) is used to define which "actions"
     relating to banner-blocking, images, pop-ups, content modification, cookie
     handling etc should be applied by default. It also defines many exceptions
     (both positive and negative) from this default set of actions that enable
     Privoxy to selectively eliminate the junk, and only the junk, on as many
     websites as possible.
-   
+
     Multiple actions files may be defined in config. These are processed in the
     order they are defined. Local customizations and locally preferred
     exceptions to the default policies as defined in default.action (which you
     will most probably want to define sooner or later) are probably best
     applied in user.action, where you can preserve them across upgrades.
     standard.action is for Privoxy's internal use.
-   
+
     There is also a web based editor that can be accessed from http://
     config.privoxy.org/show-status (Shortcut: http://p.p/show-status) for the
     various actions files.
-   
+
   * default.filter (the filter file) can be used to re-write the raw page
     content, including viewable text as well as embedded HTML and JavaScript,
     and whatever else lurks on any given web page. The filtering jobs are only
     pre-defined here; whether to apply them or not is up to the actions files.
-   
+    Only one filter file may be defined.
+
 All files use the "#" character to denote a comment (the rest of the line will
 be ignored) and understand line continuation through placing a backslash ("\")
 as the very last character in a line. If the # is preceded by a backslash, it
@@ -917,11 +924,6 @@ however, that it may take one or two additional requests for the change to take
 effect. When changing the listening address of Privoxy, these "wake up"
 requests must obviously be sent to the old listening address.
 
-While under development, the configuration content is subject to change. The
-below documentation may not be accurate by the time you read this. Also, what
-constitutes a "default" setting, may change, so please check all your
-configuration files on important issues.
-
 -------------------------------------------------------------------------------
 
 7. The Main Configuration File
@@ -960,229 +962,239 @@ files and actions files.
 7.1.1. confdir
 
 Specifies:
-   
+
     The directory where the other configuration files are located
-   
+
 Type of value:
-   
+
     Path name
-   
+
 Default value:
-   
+
     /etc/privoxy (Unix) or Privoxy installation dir (Windows)
-   
+
 Effect if unset:
-   
+
     Mandatory
-   
+
 Notes:
-   
+
     No trailing "/", please
-   
+
     When development goes modular and multi-user, the blocker, filter, and
     per-user config will be stored in subdirectories of "confdir". For now, the
     configuration directory structure is flat, except for confdir/templates,
     where the HTML templates for CGI output reside (e.g. Privoxy's 404 error
     page).
-   
+
 -------------------------------------------------------------------------------
 
 7.1.2. logdir
 
 Specifies:
-   
+
     The directory where all logging takes place (i.e. where logfile and jarfile
     are located)
-   
+
 Type of value:
-   
+
     Path name
-   
+
 Default value:
-   
+
     /var/log/privoxy (Unix) or Privoxy installation dir (Windows)
-   
+
 Effect if unset:
-   
+
     Mandatory
-   
+
 Notes:
-   
+
     No trailing "/", please
-   
+
 -------------------------------------------------------------------------------
 
 7.1.3. actionsfile
 
 Specifies:
-   
+
     The actions file(s) to use
-   
+
 Type of value:
-   
+
     File name, relative to confdir, without the .action suffix
-   
+
 Default values:
-   
+
       standard     # Internal purposes, no editing recommended
-                                                              
-      default      # Main actions file                        
-                                                              
-      user         # User customizations                      
-   
+
+      default      # Main actions file
+
+      user         # User customizations
+
 Effect if unset:
-   
+
     No actions are taken at all. Simple neutral proxying.
-   
+
 Notes:
-   
+
     Multiple actionsfile lines are permitted, and are in fact recommended!
-   
+
     The default values include standard.action, which is used for internal
     purposes and should be loaded, default.action, which is the "main" actions
     file maintained by the developers, and user.action, where you can make your
     personal additions.
-   
+
     Actions files are where all the per site and per URL configuration is done
     for ad blocking, cookie management, privacy considerations, etc. There is
     no point in using Privoxy without at least one actions file.
-   
+
 -------------------------------------------------------------------------------
 
 7.1.4. filterfile
 
 Specifies:
-   
+
     The filter file to use
-   
+
 Type of value:
-   
+
     File name, relative to confdir
-   
+
 Default value:
-   
+
     default.filter (Unix) or default.filter.txt (Windows)
-   
+
 Effect if unset:
-   
+
     No textual content filtering takes place, i.e. all +filter{name} actions in
     the actions files are turned neutral.
-   
+
 Notes:
-   
+
     The filter file contains content modification rules that use regular
     expressions. These rules permit powerful changes on the content of Web
     pages, e.g., you could disable your favorite JavaScript annoyances,
     re-write the actual displayed text, or just have some fun replacing
     "Microsoft" with "MicroSuck" wherever it appears on a Web page.
-   
+
     The +filter{name} actions rely on the relevant filter (name) to be defined
     in the filter file!
-   
+
     A pre-defined filter file called default.filter that contains a bunch of
     handy filters for common problems is included in the distribution. See the
     section on the filter action for a list.
-   
+
 -------------------------------------------------------------------------------
 
 7.1.5. logfile
 
 Specifies:
-   
+
     The log file to use
-   
+
 Type of value:
-   
+
     File name, relative to logdir
-   
+
 Default value:
-   
+
     logfile (Unix) or privoxy.log (Windows)
-   
+
 Effect if unset:
-   
+
     No log file is used, all log messages go to the console (STDERR).
-   
+
 Notes:
-   
-    The windows version will additionally log to the console.
-   
+
     The logfile is where all logging and error messages are written. The level
     of detail and number of messages are set with the debug option (see below).
     The logfile can be useful for tracking down a problem with Privoxy (e.g.,
     it's not blocking an ad you think it should block) but in most cases you
     probably will never look at it.
-   
+
     Your logfile will grow indefinitely, and you will probably want to
     periodically remove it. On Unix systems, you can do this with a cron job
     (see "man cron"). For Red Hat, a logrotate script has been included.
-   
+
     On SuSE Linux systems, you can place a line like "/var/log/privoxy.* +1024k
     644 nobody.nogroup" in /etc/logfiles, with the effect that cron.daily will
     automatically archive, gzip, and empty the log, when it exceeds 1M size.
-   
+
     Any log files must be writable by whatever user Privoxy is being run as
     (default on UNIX, user id is "privoxy").
-   
+
 -------------------------------------------------------------------------------
 
 7.1.6. jarfile
 
 Specifies:
-   
+
     The file to store intercepted cookies in
-   
+
 Type of value:
-   
+
     File name, relative to logdir
-   
+
 Default value:
-   
+
     jarfile (Unix) or privoxy.jar (Windows)
-   
+
 Effect if unset:
-   
+
     Intercepted cookies are not stored at all.
-   
+
 Notes:
-   
+
     The jarfile may grow to ridiculous sizes over time.
-   
+
 -------------------------------------------------------------------------------
 
 7.1.7. trustfile
 
 Specifies:
-   
+
     The trust file to use
-   
+
 Type of value:
-   
+
     File name, relative to confdir
-   
+
 Default value:
-   
+
     Unset (commented out). When activated: trust (Unix) or trust.txt (Windows)
-   
+
 Effect if unset:
-   
-    The whole trust mechanism is turned off.
-   
+
+    The entire trust mechanism is turned off.
+
 Notes:
-   
+
     The trust mechanism is an experimental feature for building white-lists and
     should be used with care. It is NOT recommended for the casual user.
-   
+
     If you specify a trust file, Privoxy will only allow access to sites that
-    are named in the trustfile. You can also mark sites as trusted referrers
-    (with +), with the effect that access to untrusted sites will be granted,
-    if a link from a trusted referrer was used. The link target will then be
-    added to the "trustfile". Possible applications include limiting Internet
-    access for children.
-   
-    If you use + operator in the trust file, it may grow considerably over
+    are specified in the trustfile. Sites can be listed in one of two ways:
+
+    Prepending a ~ character limits access to this site only (and any sub-paths
+    within this site), e.g. ~www.example.com.
+
+    Or, you can designate sites as trusted referrers, by prepending the name
+    with a + character. The effect is that access to untrusted sites will be
+    granted -- but only if a link from this trusted referrer was used. The link
+    target will then be added to the "trustfile" so that future, direct
+    accesses will be granted. Sites added via this mechanism do not become
+    trusted referrers themselves (i.e. they are added with a ~ designation).
+
+    If you use the + operator in the trust file, it may grow considerably over
     time.
-   
+
+    It is recommended that Privoxy be compiled with the --disable-force,
+    --disable-toggle and --disable-editor options, if this feature is to be
+    used.
+
+    Possible applications include limiting Internet access for children.
+
 -------------------------------------------------------------------------------
 
 7.2. Local Set-up Documentation
@@ -1196,40 +1208,52 @@ that, your policies, etc.
 7.2.1. user-manual
 
 Specifies:
-   
+
     Location of the Privoxy User Manual.
-   
+
 Type of value:
-   
+
     A fully qualified URI
-   
+
 Default value:
-   
+
     Unset
-   
+
 Effect if unset:
-   
+
     http://www.privoxy.org/version/user-manual/ will be used, where version is
     the Privoxy version.
-   
+
 Notes:
-   
+
     The User Manual URI is used for help links from some of the internal CGI
     pages. The manual itself is normally packaged with the binary
     distributions, so you probably want to set this to a locally installed
     copy. For multi-user setups, you could provide a copy on a local webserver
     for all your users and use the corresponding URL here.
-   
+
     Examples:
-   
+
     Unix, in local filesystem:
-   
-    user-manual  file:///usr/share/doc/privoxy-3.1.1/user-manual/      
-   
+
+      user-manual  file:///usr/share/doc/privoxy-3.0.3/user-manual/
+
+
+    Windows, in local filesystem, must use forward slash notation:
+
+      user-manual  file:/c:/some-dir/privoxy-3.0.3/user-manual/
+
+
+    Windows, UNC notation (with forward slashes):
+
+      user-manual  file://///some-server/some-path/privoxy-3.0.3/user-manual/
+
+
     Any platform, on local webserver (called "local-webserver"):
-   
-    user-manual  http://local-webserver/privoxy-user-manual/           
-   
+
+      user-manual  http://local-webserver/privoxy-user-manual/
+
+
     +-----------------------------------------------------------------+
     |                             Warning                             |
     |-----------------------------------------------------------------|
@@ -1242,89 +1266,89 @@ Notes:
 7.2.2. trust-info-url
 
 Specifies:
-   
+
     A URL to be displayed in the error page that users will see if access to an
     untrusted page is denied.
-   
+
 Type of value:
-   
+
     URL
-   
+
 Default value:
-   
+
     Two example URL are provided
-   
+
 Effect if unset:
-   
+
     No links are displayed on the "untrusted" error page.
-   
+
 Notes:
-   
+
     The value of this option only matters if the experimental trust mechanism
     has been activated. (See trustfile above.)
-   
+
     If you use the trust mechanism, it is a good idea to write up some on-line
     documentation about your trust policy and to specify the URL(s) here. Use
     multiple times for multiple URLs.
-   
+
     The URL(s) should be added to the trustfile as well, so users don't end up
     locked out from the information on why they were locked out in the first
     place!
-   
+
 -------------------------------------------------------------------------------
 
 7.2.3. admin-address
 
 Specifies:
-   
+
     An email address to reach the proxy administrator.
-   
+
 Type of value:
-   
+
     Email address
-   
+
 Default value:
-   
+
     Unset
-   
+
 Effect if unset:
-   
+
     No email address is displayed on error pages and the CGI user interface.
-   
+
 Notes:
-   
+
     If both admin-address and proxy-info-url are unset, the whole "Local
     Privoxy Support" box on all generated pages will not be shown.
-   
+
 -------------------------------------------------------------------------------
 
 7.2.4. proxy-info-url
 
 Specifies:
-   
+
     A URL to documentation about the local Privoxy setup, configuration or
     policies.
-   
+
 Type of value:
-   
+
     URL
-   
+
 Default value:
-   
+
     Unset
-   
+
 Effect if unset:
-   
+
     No link to local documentation is displayed on error pages and the CGI user
     interface.
-   
+
 Notes:
-   
+
     If both admin-address and proxy-info-url are unset, the whole "Local
     Privoxy Support" box on all generated pages will not be shown.
-   
+
     This URL shouldn't be blocked ;-)
-   
+
 -------------------------------------------------------------------------------
 
 7.3. Debugging
@@ -1338,81 +1362,82 @@ debugging.
 7.3.1. debug
 
 Specifies:
-   
+
     Key values that determine what information gets logged to the logfile.
-   
+
 Type of value:
-   
+
     Integer values
-   
+
 Default value:
-   
+
     12289 (i.e.: URLs plus informational and warning messages)
-   
+
 Effect if unset:
-   
+
     Nothing gets logged.
-   
+
 Notes:
-   
+
     The available debug levels are:
-   
-      debug         1 # show each GET/POST/CONNECT request             
-      debug         2 # show each connection status                    
-      debug         4 # show I/O status                                
-      debug         8 # show header parsing                            
-      debug        16 # log all data into the logfile                  
-      debug        32 # debug force feature                            
-      debug        64 # debug regular expression filter                
-      debug       128 # debug fast redirects                           
-      debug       256 # debug GIF de-animation                         
-      debug       512 # Common Log Format                              
-      debug      1024 # debug kill pop-ups                             
-      debug      2048 # CGI user interface                             
-      debug      4096 # Startup banner and warnings.                   
-      debug      8192 # Non-fatal errors                               
-   
+
+      debug         1 # show each GET/POST/CONNECT request
+      debug         2 # show each connection status
+      debug         4 # show I/O status
+      debug         8 # show header parsing
+      debug        16 # log all data into the logfile
+      debug        32 # debug force feature
+      debug        64 # debug regular expression filter
+      debug       128 # debug fast redirects
+      debug       256 # debug GIF de-animation
+      debug       512 # Common Log Format
+      debug      1024 # debug kill pop-ups
+      debug      2048 # CGI user interface
+      debug      4096 # Startup banner and warnings.
+      debug      8192 # Non-fatal errors
+
+
     To select multiple debug levels, you can either add them or use multiple
     debug lines.
-   
+
     A debug level of 1 is informative because it will show you each request as
     it happens. 1, 4096 and 8192 are highly recommended so that you will notice
     when things go wrong. The other levels are probably only of interest if you
     are hunting down a specific problem. They can produce a hell of an output
     (especially 16).
-   
+
     The reporting of fatal errors (i.e. ones which crash Privoxy) is always on
     and cannot be disabled.
-   
+
     If you want to use CLF (Common Log Format), you should set "debug 512" ONLY
     and not enable anything else.
-   
+
 -------------------------------------------------------------------------------
 
 7.3.2. single-threaded
 
 Specifies:
-   
+
     Whether to run only one server thread
-   
+
 Type of value:
-   
+
     None
-   
+
 Default value:
-   
+
     Unset
-   
+
 Effect if unset:
-   
+
     Multi-threaded (or, where unavailable: forked) operation, i.e. the ability
     to serve multiple requests simultaneously.
-   
+
 Notes:
-   
+
     This option is only there for debug purposes and you should never need to
     use it. It will drastically reduce performance.
-   
+
 -------------------------------------------------------------------------------
 
 7.4. Access Control and Security
@@ -1425,256 +1450,260 @@ Privoxy's configuration.
 7.4.1. listen-address
 
 Specifies:
-   
+
     The IP address and TCP port on which Privoxy will listen for client
     requests.
-   
+
 Type of value:
-   
+
     [IP-Address]:Port
-   
+
 Default value:
-   
+
     127.0.0.1:8118
-   
+
 Effect if unset:
-   
+
     Bind to 127.0.0.1 (localhost), port 8118. This is suitable and recommended
     for home users who run Privoxy on the same machine as their browser.
-   
+
 Notes:
-   
+
     You will need to configure your browser(s) to this proxy address and port.
-   
+
     If you already have another service running on port 8118, or if you want to
     serve requests from other machines (e.g. on your local network) as well,
     you will need to override the default.
-   
+
     If you leave out the IP address, Privoxy will bind to all interfaces
     (addresses) on your machine and may become reachable from the Internet. In
     that case, consider using access control lists (ACL's, see below), and/or a
     firewall.
-   
-    If you open Privoxy to untrusted users, you will also want to turn off the 
+
+    If you open Privoxy to untrusted users, you will also want to turn off the
     enable-edit-actions and enable-remote-toggle options!
-   
+
 Example:
-   
+
     Suppose you are running Privoxy on a machine which has the address
     192.168.0.1 on your local private network (192.168.0.0) and has another
     outside connection with a different address. You want it to serve requests
     from inside only:
-   
-      listen-address  192.168.0.1:8118                                 
-   
+
+      listen-address  192.168.0.1:8118
+
+
 -------------------------------------------------------------------------------
 
 7.4.2. toggle
 
 Specifies:
-   
+
     Initial state of "toggle" status
-   
+
 Type of value:
-   
+
     1 or 0
-   
+
 Default value:
-   
+
     1
-   
+
 Effect if unset:
-   
+
     Act as if toggled on
-   
+
 Notes:
-   
+
     If set to 0, Privoxy will start in "toggled off" mode, i.e. behave like a
     normal, content-neutral proxy where all ad blocking, filtering, etc are
     disabled. See enable-remote-toggle below. This is not really useful
     anymore, since toggling is much easier via the web interface than via
     editing the conf file.
-   
+
     The windows version will only display the toggle icon in the system tray if
     this option is present.
-   
+
 -------------------------------------------------------------------------------
 
 7.4.3. enable-remote-toggle
 
 Specifies:
-   
+
     Whether or not the web-based toggle feature may be used
-   
+
 Type of value:
-   
+
     0 or 1
-   
+
 Default value:
-   
+
     1
-   
+
 Effect if unset:
-   
+
     The web-based toggle feature is disabled.
-   
+
 Notes:
-   
+
     When toggled off, Privoxy acts like a normal, content-neutral proxy, i.e.
     it acts as if none of the actions applied to any URL.
-   
+
     For the time being, access to the toggle feature can not be controlled
     separately by "ACLs" or HTTP authentication, so that everybody who can
     access Privoxy (see "ACLs" and listen-address above) can toggle it for all
     users. So this option is not recommended for multi-user environments with
     untrusted users.
-   
+
     Note that you must have compiled Privoxy with support for this feature,
     otherwise this option has no effect.
-   
+
 -------------------------------------------------------------------------------
 
 7.4.4. enable-edit-actions
 
 Specifies:
-   
+
     Whether or not the web-based actions file editor may be used
-   
+
 Type of value:
-   
+
     0 or 1
-   
+
 Default value:
-   
+
     1
-   
+
 Effect if unset:
-   
+
     The web-based actions file editor is disabled.
-   
+
 Notes:
-   
+
     For the time being, access to the editor can not be controlled separately
     by "ACLs" or HTTP authentication, so that everybody who can access Privoxy
     (see "ACLs" and listen-address above) can modify its configuration for all
     users. So this option is not recommended for multi-user environments with
     untrusted users.
-   
+
     Note that you must have compiled Privoxy with support for this feature,
     otherwise this option has no effect.
-   
+
 -------------------------------------------------------------------------------
 
 7.4.5. ACLs: permit-access and deny-access
 
 Specifies:
-   
+
     Who can access what.
-   
+
 Type of value:
-   
+
     src_addr[/src_masklen] [dst_addr[/dst_masklen]]
-   
+
     Where src_addr and dst_addr are IP addresses in dotted decimal notation or
     valid DNS names, and src_masklen and dst_masklen are subnet masks in CIDR
     notation, i.e. integer values from 2 to 30 representing the length (in
     bits) of the network address. The masks and the whole destination part are
     optional.
-   
+
 Default value:
-   
+
     Unset
-   
+
 Effect if unset:
-   
+
     Don't restrict access further than implied by listen-address
-   
+
 Notes:
-   
+
     Access controls are included at the request of ISPs and systems
     administrators, and are not usually needed by individual users. For a
     typical home user, it will normally suffice to ensure that Privoxy only
     listens on the localhost (127.0.0.1) or internal (home) network address by
     means of the listen-address option.
-   
+
     Please see the warnings in the FAQ that this proxy is not intended to be a
     substitute for a firewall or to encourage anyone to defer addressing basic
     security weaknesses.
-   
+
     Multiple ACL lines are OK. If any ACLs are specified, then the Privoxy
     talks only to IP addresses that match at least one permit-access line and
     don't match any subsequent deny-access line. In other words, the last match
     wins, with the default being deny-access.
-   
+
     If Privoxy is using a forwarder (see forward below) for a particular
     destination URL, the dst_addr that is examined is the address of the
     forwarder and NOT the address of the ultimate target. This is necessary
     because it may be impossible for the local Privoxy to determine the IP
     address of the ultimate target (that's often what gateways are used for).
-   
+
     You should prefer using IP addresses over DNS names, because the address
     lookups take time. All DNS names must resolve! You can not use domain
     patterns like "*.org" or partial domain names. If a DNS name resolves to
     multiple IP addresses, only the first one is used.
-   
+
     Denying access to particular sites by ACL may have undesired side effects
     if the site in question is hosted on a machine which also hosts other
     sites.
-   
+
 Examples:
-   
+
     Explicitly define the default behavior if no ACL and listen-address are
     set: "localhost" is OK. The absence of a dst_addr implies that all
     destination addresses are OK:
-   
-      permit-access  localhost                                         
-   
+
+      permit-access  localhost
+
+
     Allow any host on the same class C subnet as www.privoxy.org access to
     nothing but www.example.com:
-   
-      permit-access  www.privoxy.org/24 www.example.com/32             
-   
+
+      permit-access  www.privoxy.org/24 www.example.com/32
+
+
     Allow access from any host on the 26-bit subnet 192.168.45.64 to anywhere,
     with the exception that 192.168.45.73 may not access
     www.dirty-stuff.example.com:
-   
-      permit-access  192.168.45.64/26                                  
-      deny-access    192.168.45.73    www.dirty-stuff.example.com      
-   
+
+      permit-access  192.168.45.64/26
+      deny-access    192.168.45.73    www.dirty-stuff.example.com
+
+
 -------------------------------------------------------------------------------
 
 7.4.6. buffer-limit
 
 Specifies:
-   
+
     Maximum size of the buffer for content filtering.
-   
+
 Type of value:
-   
+
     Size in Kbytes
-   
+
 Default value:
-   
+
     4096
-   
+
 Effect if unset:
-   
+
     Use a 4MB (4096 KB) limit.
-   
+
 Notes:
-   
+
     For content filtering, i.e. the +filter and +deanimate-gif actions, it is
     necessary that Privoxy buffers the entire document body. This can be
     potentially dangerous, since a server could just keep sending data
     indefinitely and wait for your RAM to exhaust -- with nasty consequences.
     Hence this option.
-   
+
     When a document buffer size reaches the buffer-limit, it is flushed to the
     client unfiltered and no further attempt to filter the rest of the document
     is made. Remember that there may be multiple threads running, which might
     require up to buffer-limit Kbytes each, unless you have enabled
     "single-threaded" above.
-   
+
 -------------------------------------------------------------------------------
 
 7.5. Forwarding
@@ -1695,105 +1724,109 @@ Also specified here are SOCKS proxies. Privoxy supports the SOCKS 4 and SOCKS
 7.5.1. forward
 
 Specifies:
-   
+
     To which parent HTTP proxy specific requests should be routed.
-   
+
 Type of value:
-   
+
     target_pattern http_parent[:port]
-   
+
     where target_pattern is a URL pattern that specifies to which requests
     (i.e. URLs) this forward rule shall apply. Use / to denote "all URLs".
     http_parent[:port] is the DNS name or IP address of the parent HTTP proxy
     through which the requests should be forwarded, optionally followed by its
     listening port (default: 8080). Use a single dot (.) to denote "no
     forwarding".
-   
+
 Default value:
-   
+
     Unset
-   
+
 Effect if unset:
-   
+
     Don't use parent HTTP proxies.
-   
+
 Notes:
-   
+
     If http_parent is ".", then requests are not forwarded to another HTTP
     proxy but are made directly to the web servers.
-   
+
     Multiple lines are OK, they are checked in sequence, and the last match
     wins.
-   
+
 Examples:
-   
+
     Everything goes to an example anonymizing proxy, except SSL on port 443
     (which it doesn't handle):
-   
-      forward   /      anon-proxy.example.org:8080                     
-      forward   :443   .                                               
-   
+
+      forward   /      anon-proxy.example.org:8080
+      forward   :443   .
+
+
     Everything goes to our example ISP's caching proxy, except for requests to
     that ISP's sites:
-   
-      forward   /                  caching-proxy.example-isp.net:8000  
-      forward   .example-isp.net   .                                   
-   
+
+      forward   /                  caching-proxy.example-isp.net:8000
+      forward   .example-isp.net   .
+
+
 -------------------------------------------------------------------------------
 
 7.5.2. forward-socks4 and forward-socks4a
 
 Specifies:
-   
+
     Through which SOCKS proxy (and to which parent HTTP proxy) specific
     requests should be routed.
-   
+
 Type of value:
-   
+
     target_pattern socks_proxy[:port] http_parent[:port]
-   
+
     where target_pattern is a URL pattern that specifies to which requests
     (i.e. URLs) this forward rule shall apply. Use / to denote "all URLs".
     http_parent and socks_proxy are IP addresses in dotted decimal notation or
     valid DNS names (http_parent may be "." to denote "no HTTP forwarding"),
     and the optional port parameters are TCP ports, i.e. integer values from 1
     to 64535
-   
+
 Default value:
-   
+
     Unset
-   
+
 Effect if unset:
-   
+
     Don't use SOCKS proxies.
-   
+
 Notes:
-   
+
     Multiple lines are OK, they are checked in sequence, and the last match
     wins.
-   
+
     The difference between forward-socks4 and forward-socks4a is that in the
     SOCKS 4A protocol, the DNS resolution of the target hostname happens on the
     SOCKS server, while in SOCKS 4 it happens locally.
-   
+
     If http_parent is ".", then requests are not forwarded to another HTTP
     proxy but are made (HTTP-wise) directly to the web servers, albeit through
     a SOCKS proxy.
-   
+
 Examples:
-   
+
     From the company example.com, direct connections are made to all "internal"
     domains, but everything outbound goes through their ISP's proxy by way of
     example.com's corporate SOCKS 4A gateway to the Internet.
-   
-      forward-socks4a   /              socks-gw.example.com:1080  www-cache.example-isp.net:8080 
-      forward           .example.com   .                                                         
-   
+
+      forward-socks4a   /              socks-gw.example.com:1080  www-cache.example-isp.net:8080
+      forward           .example.com   .
+
+
     A rule that uses a SOCKS 4 gateway for all destinations but no HTTP parent
     looks like this:
-   
-      forward-socks4   /               socks-gw.example.com:1080  .    
-   
+
+      forward-socks4   /               socks-gw.example.com:1080  .
+
+
 -------------------------------------------------------------------------------
 
 7.5.3. Advanced Forwarding Examples
@@ -1809,13 +1842,15 @@ look like this:
 
 host-a:
 
-  forward    /           .                                                     
-  forward    .isp-b.net  host-b:8118                                           
+  forward    /           .
+  forward    .isp-b.net  host-b:8118
+
 
 host-b:
 
-  forward    /           .                                                     
-  forward    .isp-a.net  host-a:8118                                           
+  forward    /           .
+  forward    .isp-a.net  host-a:8118
+
 
 Now, your users can set their browser's proxy to use either host-a or host-b
 and be able to browse the internal content of both isp-a and isp-b.
@@ -1826,17 +1861,18 @@ squid -> privoxy is the recommended way.
 Assuming that Privoxy and squid run on the same box, your squid configuration
 could then look like this:
 
-  # Define Privoxy as parent proxy (without ICP)                               
-  cache_peer 127.0.0.1 parent 8118 7 no-query                                  
-                                                                               
-  # Define ACL for protocol FTP                                                
-  acl ftp proto FTP                                                            
-                                                                               
-  # Do not forward FTP requests to Privoxy                                     
-  always_direct allow ftp                                                      
-                                                                               
-  # Forward all the rest to Privoxy                                            
-  never_direct allow all                                                       
+  # Define Privoxy as parent proxy (without ICP)
+  cache_peer 127.0.0.1 parent 8118 7 no-query
+
+  # Define ACL for protocol FTP
+  acl ftp proto FTP
+
+  # Do not forward FTP requests to Privoxy
+  always_direct allow ftp
+
+  # Forward all the rest to Privoxy
+  never_direct allow all
+
 
 You would then need to change your browser's proxy settings to squid's address
 and port. Squid normally uses port 3128. If unsure consult http_port in
@@ -1845,8 +1881,9 @@ squid.conf.
 You could just as well decide to only forward requests for Windows executables
 through a virus-scanning parent proxy, say, on antivir.example.com, port 8010:
 
-  forward   /                          .                                       
-  forward   /.*\.(exe|com|dll|zip)$    antivir.example.com:8010                
+  forward   /                          .
+  forward   /.*\.(exe|com|dll|zip)$    antivir.example.com:8010
+
 
 -------------------------------------------------------------------------------
 
@@ -1923,29 +1960,67 @@ console.
 The actions files are used to define what actions Privoxy takes for which URLs,
 and thus determine how ad images, cookies and various other aspects of HTTP
 content and transactions are handled, and on which sites (or even parts
-thereof). There are three such files included with Privoxy (as of version
-2.9.15), with differing purposes:
+thereof). There are three such files included with Privoxy with differing
+purposes:
 
   * default.action - is the primary action file that sets the initial values
     for all actions. It is intended to provide a base level of functionality
     for Privoxy's array of features. So it is a set of broad rules that should
     work reasonably well for users everywhere. This is the file that the
     developers are keeping updated, and making available to users.
-   
+
   * user.action - is intended to be for local site preferences and exceptions.
     As an example, if your ISP or your bank has specific requirements, and need
     special handling, this kind of thing should go here. This file will not be
     upgraded.
-   
+
   * standard.action - is used by the web based editor, to set various
     pre-defined sets of rules for the default actions section in
     default.action. These have increasing levels of aggressiveness and have no
     influence on your browsing unless you select them explicitly in the editor.
     It is not recommend to edit this file.
-   
+
+    The default profiles, and their associated actions, as pre-defined in
+    standard.action are:
+
+    Table 1. Default Configurations
+
+    +------------------------------------------------------------+
+    |       Feature       | Cautious  |   Medium   |Adventuresome|
+    |---------------------+-----------+------------+-------------|
+    |Ad-blocking by URL   |yes        |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Ad-filtering by size |yes        |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |GIF de-animation     |no         |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Referer forging      |no         |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Cookie handling      |none       |session-only|kill         |
+    |---------------------+-----------+------------+-------------|
+    |Pop-up killing       |unsolicited|unsolicited |all          |
+    |---------------------+-----------+------------+-------------|
+    |Fast redirects       |no         |no          |yes          |
+    |---------------------+-----------+------------+-------------|
+    |HTML taming          |yes        |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |JavaScript taming    |yes        |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Web-bug killing      |yes        |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Fun text replacements|no         |no          |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Image tag reordering |no         |no          |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Ad-filtering by link |no         |no          |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Demoronizer          |no         |no          |yes          |
+    +------------------------------------------------------------+
+
 The list of actions files to be used are defined in the main configuration
-file, and are processed in the order they are defined. The content of these can
-all be viewed and edited from http://config.privoxy.org/show-status.
+file, and are processed in the order they are defined (e.g. default.action is
+typically process before user.action). The content of these can all be viewed
+and edited from http://config.privoxy.org/show-status.
 
 An actions file typically has multiple sections. If you want to use "aliases"
 in an actions file, you have to place the (optional) alias section at the top
@@ -1972,10 +2047,10 @@ some sites unusable that rely on these techniques to work properly. Finding the
 right mix of actions is not always easy and certainly a matter of personal
 taste. In general, it can be said that the more "aggressive" your default
 settings (in the top section of the actions file) are, the more exceptions for
-"trusted" sites you will have to make later. If, for example, you want to kill
-popup windows per default, you'll have to make exceptions from that rule for
-sites that you regularly use and that require popups for actually useful
-content, like maybe your bank, favorite shop, or newspaper.
+"trusted" sites you will have to make later. If, for example, you want to
+crunch all cookies per default, you'll have to make exceptions from that rule
+for sites that you regularly use and that require cookies for actually useful
+puposes, like maybe your bank, favorite shop, or newspaper.
 
 We have tried to provide you with reasonable rules to start from in the
 distribution actions files. But there is no general rule of thumb on these
@@ -1991,7 +2066,9 @@ The easiest way to edit the actions files is with a browser by using our
 browser-based editor, which can be reached from http://config.privoxy.org/
 show-status. The editor allows both fine-grained control over every single
 feature on a per-URL basis, and easy choosing from wholesale sets of defaults
-like "Cautious", "Medium" or "Advanced".
+like "Cautious", "Medium" or "Adventuresome". Warning: the "Adventuresome"
+setting is not only more aggressive, but includes settings that are fun and
+subversive, and which some may find of dubious merit!
 
 If you prefer plain text editing to GUIs, you can of course also directly edit
 the the actions files. Look at default.action which is richly commented.
@@ -2025,33 +2102,41 @@ More detail on this is provided in the Appendix, Anatomy of an Action.
 
 8.4. Patterns
 
-Generally, a pattern has the form /, where both the  and
- are optional. (This is why the pattern / matches all URLs).
+As mentioned, Privoxy uses "patterns" to determine what actions might apply to
+which sites and pages your browser attempts to access. These "patterns" use
+wild card type pattern matching to achieve a high degree of flexibility. This
+allows one expression to be expanded and potentially match against many similar
+patterns.
+
+Generally, a Privoxy pattern has the form /, where both the
+ and  are optional. (This is why the special / pattern matches
+all URLs). Note that the protocol portion of the URL pattern (e.g. http://)
+should not be included in the pattern. This is assumed already!
 
 www.example.com/
-   
+
     is a domain-only pattern and will match any request to www.example.com,
     regardless of which document on that server is requested.
-   
+
 www.example.com
-   
+
     means exactly the same. For domain-only patterns, the trailing / may be
     omitted.
-   
+
 www.example.com/index.html
-   
+
     matches only the single document /index.html on www.example.com.
-   
+
 /index.html
-   
+
     matches the document /index.html, regardless of the domain, i.e. on any web
     server.
-   
+
 index.html
-   
+
     matches nothing, since it would be interpreted as a domain name and there
     is no top-level domain called .html.
-   
+
 -------------------------------------------------------------------------------
 
 8.4.1. The Domain Pattern
@@ -2060,18 +2145,18 @@ The matching of the domain part offers some flexible options: if the domain
 starts or ends with a dot, it becomes unanchored at that end. For example:
 
 .example.com
-   
+
     matches any domain that ENDS in .example.com
-   
+
 www.
-   
+
     matches any domain that STARTS with www.
-   
+
 .example.
-   
+
     matches any domain that CONTAINS .example. (Correctly speaking: It matches
     any FQDN that contains example as a domain.)
-   
+
 Additionally, there are wild-cards that you can use in the domain names
 themselves. They work pretty similar to shell wild-cards: "*" stands for zero
 or more arbitrary characters, "?" stands for any single character, you can
@@ -2079,23 +2164,23 @@ define character classes in square brackets and all of that can be freely
 mixed:
 
 ad*.example.com
-   
+
     matches "adserver.example.com", "ads.example.com", etc but not
     "sfads.example.com"
-   
+
 *ad*.example.com
-   
+
     matches all of the above, and then some.
-   
+
 .?pix.com
-   
+
     matches www.ipix.com, pictures.epix.com, a.b.c.d.e.upix.com etc.
-   
+
 www[1-9a-ez].example.c*
-   
+
     matches www1.example.com, www4.example.cc, wwwd.example.cy,
     wwwz.example.com etc., but not wwww.example.com.
-   
+
 -------------------------------------------------------------------------------
 
 8.4.2. The Path Pattern
@@ -2127,7 +2212,7 @@ somewhere in an actions file. Actions are turned on if preceded with a "+", and
 turned off if preceded with a "-". So a +action means "do that action", e.g.
 +block means "please block URLs that match the following patterns", and -block
 means "don't block URLs that match the following patterns, even if +block
-previously applied." 
+previously applied."
 
 Again, actions are invoked by placing them on a line, enclosed in curly braces
 and separated by whitespace, like in {+some-action -some-other-action
@@ -2138,39 +2223,42 @@ a section of the actions file.
 There are three classes of actions:
 
   * Boolean, i.e the action can only be "enabled" or "disabled". Syntax:
-   
-      +name        # enable action name                                
-      -name        # disable action name                               
-   
+
+      +name        # enable action name
+      -name        # disable action name
+
+
     Example: +block
-   
+
   * Parameterized, where some value is required in order to enable this type of
     action. Syntax:
-   
-      +name{param}  # enable action and set parameter to param,             
-                   # overwriting parameter from previous match if necessary 
-      -name         # disable action. The parameter can be omitted          
-   
+
+      +name{param}  # enable action and set parameter to param,
+                   # overwriting parameter from previous match if necessary
+      -name         # disable action. The parameter can be omitted
+
+
     Note that if the URL matches multiple positive forms of a parameterized
     action, the last match wins, i.e. the params from earlier matches are
     simply ignored.
-   
+
     Example: +hide-user-agent{ Mozilla 1.0 }
-   
+
   * Multi-value. These look exactly like parameterized actions, but they behave
     differently: If the action applies multiple times to the same URL, but with
     different parameters, all the parameters from all matches are remembered.
     This is used for actions that can be executed for the same request
     repeatedly, like adding multiple headers, or filtering through multiple
     filters. Syntax:
-   
-      +name{param}   # enable action and add param to the list of parameters                 
-      -name{param}   # remove the parameter param from the list of parameters                
-                    # If it was the last one left, disable the action.                       
+
+      +name{param}   # enable action and add param to the list of parameters
+      -name{param}   # remove the parameter param from the list of parameters
+                    # If it was the last one left, disable the action.
       -name          # disable this action completely and remove all parameters from the list
-   
+
+
     Examples: +add-header{X-Fun-Header: Some text} and +filter{html-annoyances}
-   
+
 If nothing is specified in any actions file, no "actions" are taken. So in this
 case Privoxy would just be a normal, non-blocking, non-anonymizing proxy. You
 must specifically enable the privacy and blocking features you need (although
@@ -2191,57 +2279,58 @@ The list of valid Privoxy actions are:
 8.5.1. add-header
 
 Typical use:
-   
+
     Confuse log analysis, custom applications
-   
+
 Effect:
-   
+
     Sends a user defined HTTP header to the web server.
-   
+
 Type:
-   
+
     Multi-value.
-   
+
 Parameter:
-   
+
     Any string value is possible. Validity of the defined HTTP headers is not
     checked. It is recommended that you use the "X-" prefix for custom headers.
-   
+
 Notes:
-   
+
     This action may be specified multiple times, in order to define multiple
     headers. This is rarely needed for the typical user. If you don't know what
     "HTTP headers" are, you definitely don't need to worry about this one.
-   
+
 Example usage:
-   
-    +add-header{X-User-Tracking: sucks}                                
-   
+
+    +add-header{X-User-Tracking: sucks}
+
+
 -------------------------------------------------------------------------------
 
 8.5.2. block
 
 Typical use:
-   
+
     Block ads or other obnoxious content
-   
+
 Effect:
-   
+
     Requests for URLs to which this action applies are blocked, i.e. the
     requests are not forwarded to the remote server, but answered locally with
-    a substitute page or image, as determined by the handle-as-image and 
+    a substitute page or image, as determined by the handle-as-image and
     set-image-blocker actions.
-   
+
 Type:
-   
+
     Boolean.
-   
+
 Parameter:
-   
+
     N/A
-   
+
 Notes:
-   
+
     Privoxy sends a special "BLOCKED" page for requests to blocked pages. This
     page contains links to find out why the request was blocked, and a
     click-through to the blocked content (the latter only if compiled with the
@@ -2249,501 +2338,558 @@ Notes:
     space -- it displays full-blown if space allows, or miniaturized and
     text-only if loaded into a small frame or window. If you are using Privoxy
     right now, you can take a look at the "BLOCKED" page.
-   
+
     A very important exception occurs if both block and handle-as-image, apply
-    to the same request: it will then be replaced by an image. If 
+    to the same request: it will then be replaced by an image. If
     set-image-blocker (see below) also applies, the type of image will be
     determined by its parameter, if not, the standard checkerboard pattern is
     sent.
-   
+
     It is important to understand this process, in order to understand how
     Privoxy deals with ads and other unwanted content.
-   
+
     The filter action can perform a very similar task, by "blocking" banner
     images and other content through rewriting the relevant URLs in the
     document's HTML source, so they don't get requested in the first place.
     Note that this is a totally different technique, and it's easy to confuse
     the two.
-   
+
 Example usage (section):
-   
-    {+block}      # Block and replace with "blocked" page              
-    .nasty-stuff.example.com                                           
-                                                                       
-    {+block +handle-as-image} # Block and replace with image           
-    .ad.doubleclick.net                                                
-    .ads.r.us                                                          
-   
+
+    {+block}      # Block and replace with "blocked" page
+    .nasty-stuff.example.com
+
+    {+block +handle-as-image} # Block and replace with image
+    .ad.doubleclick.net
+    .ads.r.us
+
+
 -------------------------------------------------------------------------------
 
 8.5.3. crunch-incoming-cookies
 
 Typical use:
-   
+
     Prevent the web server from setting any cookies on your system
-   
+
 Effect:
-   
+
     Deletes any "Set-Cookie:" HTTP headers from server replies.
-   
+
 Type:
-   
+
     Boolean.
-   
+
 Parameter:
-   
+
     N/A
-   
+
 Notes:
-   
+
     This action is only concerned with incoming cookies. For outgoing cookies,
     use crunch-outgoing-cookies. Use both to disable cookies completely.
-   
-    It makes no sense at all to use this action in conjunction with the 
+
+    It makes no sense at all to use this action in conjunction with the
     session-cookies-only action, since it would prevent the session cookies
-    from being set.
-   
+    from being set. See also filter-content-cookies.
+
 Example usage:
-   
-    +crunch-incoming-cookies                                           
-   
+
+    +crunch-incoming-cookies
+
+
 -------------------------------------------------------------------------------
 
 8.5.4. crunch-outgoing-cookies
 
 Typical use:
-   
+
     Prevent the web server from reading any cookies from your system
-   
+
 Effect:
-   
+
     Deletes any "Cookie:" HTTP headers from client requests.
-   
+
 Type:
-   
+
     Boolean.
-   
+
 Parameter:
-   
+
     N/A
-   
+
 Notes:
-   
+
     This action is only concerned with outgoing cookies. For incoming cookies,
     use crunch-incoming-cookies. Use both to disable cookies completely.
-   
-    It makes no sense at all to use this action in conjunction with the 
+
+    It makes no sense at all to use this action in conjunction with the
     session-cookies-only action, since it would prevent the session cookies
     from being read.
-   
+
 Example usage:
-   
-    +crunch-outgoing-cookies                                           
-   
+
+    +crunch-outgoing-cookies
+
+
 -------------------------------------------------------------------------------
 
 8.5.5. deanimate-gifs
 
 Typical use:
-   
+
     Stop those annoying, distracting animated GIF images.
-   
+
 Effect:
-   
+
     De-animate GIF animations, i.e. reduce them to their first or last image.
-   
+
 Type:
-   
+
     Parameterized.
-   
+
 Parameter:
-   
+
     "last" or "first"
-   
+
 Notes:
-   
+
     This will also shrink the images considerably (in bytes, not pixels!). If
     the option "first" is given, the first frame of the animation is used as
     the replacement. If "last" is given, the last frame of the animation is
     used instead, which probably makes more sense for most banner animations,
     but also has the risk of not showing the entire last frame (if it is only a
     delta to an earlier frame).
-   
+
     You can safely use this action with patterns that will also match non-GIF
     objects, because no attempt will be made at anything that doesn't look like
     a GIF.
-   
+
 Example usage:
-   
-    +deanimate-gifs{last}                                              
-   
+
+    +deanimate-gifs{last}
+
+
 -------------------------------------------------------------------------------
 
 8.5.6. downgrade-http-version
 
 Typical use:
-   
+
     Work around (very rare) problems with HTTP/1.1
-   
+
 Effect:
-   
+
     Downgrades HTTP/1.1 client requests and server replies to HTTP/1.0.
-   
+
 Type:
-   
+
     Boolean.
-   
+
 Parameter:
-   
+
     N/A
-   
+
 Notes:
-   
+
     This is a left-over from the time when Privoxy didn't support important
     HTTP/1.1 features well. It is left here for the unlikely case that you
     experience HTTP/1.1 related problems with some server out there. Not all
     (optional) HTTP/1.1 features are supported yet, so there is a chance you
     might need this action.
-   
+
 Example usage (section):
-   
-    {+downgrade-http-version}                                          
-    problem-host.example.com                                           
-   
--------------------------------------------------------------------------------
+
+    {+downgrade-http-version}
+    problem-host.example.com
+
+
+-------------------------------------------------------------------------------
 
 8.5.7. fast-redirects
 
 Typical use:
-   
+
     Fool some click-tracking scripts and speed up indirect links
-   
+
 Effect:
-   
+
     Cut off all but the last valid URL from requests.
-   
+
 Type:
-   
+
     Boolean.
-   
+
 Parameter:
-   
+
     N/A
-   
+
 Notes:
-   
+
     Many sites, like yahoo.com, don't just link to other sites. Instead, they
     will link to some script on their own servers, giving the destination as a
     parameter, which will then redirect you to the final target. URLs resulting
     from this scheme typically look like: http://some.place/click-tracker.cgi?
     target=http://some.where.else.
-   
+
     Sometimes, there are even multiple consecutive redirects encoded in the
     URL. These redirections via scripts make your web browsing more traceable,
     since the server from which you follow such a link can see where you go to.
     Apart from that, valuable bandwidth and time is wasted, while your browser
     ask the server for one redirect after the other. Plus, it feeds the
     advertisers.
-   
+
     This feature is currently not very smart and is scheduled for improvement.
     It is likely to break some sites. You should expect to need possibly many
     exceptions to this action, if it is enabled by default in default.action.
     Some sites just don't work without it.
-   
+
 Example usage:
-   
-    {+fast-redirects}                                                  
-   
+
+    {+fast-redirects}
+
+
 -------------------------------------------------------------------------------
 
 8.5.8. filter
 
 Typical use:
-   
+
     Get rid of HTML and JavaScript annoyances, banner advertisements (by size),
     do fun text replacements, etc.
-   
+
 Effect:
-   
-    Text documents, including HTML and JavaScript, to which this action
-    applies, are filtered on-the-fly through the specified regular expression
-    based substitutions.
-   
+
+    All files of text-based type, most notably HTML and JavaScript, to which
+    this action applies, are filtered on-the-fly through the specified regular
+    expression based substitutions. (Note: as of version 3.0.3 plain text
+    documents are exempted from filtering, because web servers often use the
+    text/plain MIME type for all files whose type they don't know.)
+
 Type:
-   
+
     Parameterized.
-   
+
 Parameter:
-   
+
     The name of a filter, as defined in the filter file (typically
-    default.filter, set by the filterfile option in the config file). Filtering
-    can be completely disabled without the use of parameters.
-   
+    default.filter, set by the filterfile option in the config file). When used
+    in its negative form, and without parameters, filtering is completely
+    disabled.
+
 Notes:
-   
+
     For your convenience, there are a number of pre-defined filters available
     in the distribution filter file that you can use. See the examples below
     for a list.
-   
-    This is potentially a very powerful feature! But "rolling your own" filters
-    requires a knowledge of regular expressions and HTML.
-   
+
     Filtering requires buffering the page content, which may appear to slow
     down page rendering since nothing is displayed until all content has passed
     the filters. (It does not really take longer, but seems that way since the
     page is not incrementally displayed.) This effect will be more noticeable
     on slower connections.
-   
+
+    This is very powerful feature, but "rolling your own" filters requires a
+    knowledge of regular expressions and HTML.
+
     The amount of data that can be filtered is limited to the buffer-limit
     option in the main config file. The default is 4096 KB (4 Megs). Once this
     limit is exceeded, the buffered data, and all pending data, is passed
-    through unfiltered. Inappropriate MIME types are not filtered.
-   
+    through unfiltered.
+
+    Inadequate MIME types, such as zipped files, are not filtered at all.
+    (Again, only text-based types except plain text). Encrypted SSL data (from
+    HTTPS servers) cannot be filtered either, since this would violate the
+    integrity of the secure transaction. In some situations it might be
+    necessary to protect certain text, like source code, from filtering by
+    defining appropriate -filter sections.
+
     At this time, Privoxy cannot (yet!) uncompress compressed documents. If you
     want filtering to work on all documents, even those that would normally be
     sent compressed, use the prevent-compression action in conjunction with
     filter.
-   
+
     Filtering can achieve some of the same effects as the block action, i.e. it
     can be used to block ads and banners. But the mechanism works quite
     differently. One effective use, is to block ad banners based on their size
     (see below), since many of these seem to be somewhat standardized.
-   
+
     Feedback with suggestions for new or improved filters is particularly
     welcome!
-   
-Example usage (with filters from the distribution default.filter file):
-   
-    +filter{html-annoyances}     # Get rid of particularly annoying HTML abuse.
-   
+
+    The below list has only the names and a one-line description of each
+    predefined filter. There are more verbose explanations of what these
+    filters do in the filter file chapter.
+
+Example usage (with filters from the distribution default.filter file). See the
+    Predefined Filters section for more explanation on each:
+
     +filter{js-annoyances}       # Get rid of particularly annoying JavaScript abuse
-   
-    +filter{banners-by-size}     # Kill banners based on their size for this page (very efficient!)
-   
-    +filter{banners-by-link}     # Kill banners based on the link they are contained in (experimental)
-   
+
+
+    +filter{js-events}           # Kill all JS event bindings (Radically destructive! Only for extra nasty sites)
+
+
+    +filter{html-annoyances}     # Get rid of particularly annoying HTML abuse
+
+
+    +filter{content-cookies}     # Kill cookies that come in the HTML or JS content
+
+
+    +filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)
+
+
+    +filter{unsolicited-popups}  # Disable only unsolicited pop-up windows
+
+
+    +filter{all-popups}          # Kill all popups in JavaScript and HTML
+
+
     +filter{img-reorder}         # Reorder attributes in  tags to make the banners-by-* filters more effective
-   
-    +filter{content-cookies}     # Kill cookies that come sneaking in the HTML or JS content
-   
-    +filter{popups}              # Kill all popups in JS and HTML      
-   
+
+
+    +filter{banners-by-size}     # Kill banners by size
+
+
+    +filter{banners-by-link}     # Kill banners by their links to known clicktrackers
+
+
     +filter{webbugs}             # Squish WebBugs (1x1 invisible GIFs used for user tracking)
-   
-    +filter{fun}                 # Text replacements for subversive browsing fun!
-   
-    +filter{frameset-borders}    # Give frames a border and make them resizeable
-   
-    +filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)
-   
-    +filter{nimda}               # Remove Nimda (virus) code.          
-   
+
+
+    +filter{tiny-textforms}      # Extend those tiny textareas up to 40x80 and kill the hard wrap
+
+
+    +filter{jumping-windows}     # Prevent windows from resizing and moving themselves
+
+
+    +filter{frameset-borders}    # Give frames a border and make them resizable
+
+
+    +filter{demoronizer}         # Fix MS's non-standard use of standard charsets
+
+
     +filter{shockwave-flash}     # Kill embedded Shockwave Flash objects
-   
-    +filter{crude-parental}      # Kill all web pages that contain the words "sex" or "warez"
-   
-    +filter{js-events}           # Kill all JS event bindings (Radically destructive! Only for extra nasty sites) 
-   
+
+
+    +filter{quicktime-kioskmode} # Make Quicktime movies saveable
+
+
+    +filter{fun}                 # Text replacements for subversive browsing fun!
+
+
+    +filter{crude-parental}      # Crude parental filtering (demo only)
+
+
+    +filter{ie-exploits}         # Disable some known Internet Explorer bug exploits
+
+
 -------------------------------------------------------------------------------
 
 8.5.9. handle-as-image
 
 Typical use:
-   
+
     Mark URLs as belonging to images (so they'll be replaced by images if they
     get blocked)
-   
+
 Effect:
-   
+
     This action alone doesn't do anything noticeable. It just marks URLs as
     images. If the block action also applies, the presence or absence of this
     mark decides whether an HTML "blocked" page, or a replacement image (as
     determined by the set-image-blocker action) will be sent to the client as a
     substitute for the blocked content.
-   
+
 Type:
-   
+
     Boolean.
-   
+
 Parameter:
-   
+
     N/A
-   
+
 Notes:
-   
+
     The below generic example section is actually part of default.action. It
     marks all URLs with well-known image file name extensions as images and
     should be left intact.
-   
+
     Users will probably only want to use the handle-as-image action in
     conjunction with block, to block sources of banners, whose URLs don't
     reflect the file type, like in the second example section.
-   
+
     Note that you cannot treat HTML pages as images in most cases. For
     instance, (in-line) ad frames require an HTML page to be sent, or they
     won't display properly. Forcing handle-as-image in this situation will not
     replace the ad frame with an image, but lead to error messages.
-   
+
 Example usage (sections):
-   
-    # Generic image extensions:                                        
-    #                                                                  
-    {+handle-as-image}                                                 
-    /.*\.(gif|jpg|jpeg|png|bmp|ico)$                                   
-                                                                       
-    # These don't look like images, but they're banners and should be  
-    # blocked as images:                                               
-    #                                                                  
-    {+block +handle-as-image}                                          
-    some.nasty-banner-server.com/junk.cgi?output=trash                 
-                                                                       
-    # Banner source! Who cares if they also have non-image content?    
-    ad.doubleclick.net                                                 
-   
+
+    # Generic image extensions:
+    #
+    {+handle-as-image}
+    /.*\.(gif|jpg|jpeg|png|bmp|ico)$
+
+    # These don't look like images, but they're banners and should be
+    # blocked as images:
+    #
+    {+block +handle-as-image}
+    some.nasty-banner-server.com/junk.cgi?output=trash
+
+    # Banner source! Who cares if they also have non-image content?
+    ad.doubleclick.net
+
+
 -------------------------------------------------------------------------------
 
 8.5.10. hide-forwarded-for-headers
 
 Typical use:
-   
+
     Improve privacy by hiding the true source of the request
-   
+
 Effect:
-   
+
     Deletes any existing "X-Forwarded-for:" HTTP header from client requests,
     and prevents adding a new one.
-   
+
 Type:
-   
+
     Boolean.
-   
+
 Parameter:
-   
+
     N/A
-   
+
 Notes:
-   
+
     It is fairly safe to leave this on.
-   
+
     This action is scheduled for improvement: It should be able to generate
     forged "X-Forwarded-for:" headers using random IP addresses from a
     specified network, to make successive requests from the same client look
     like requests from a pool of different users sharing the same proxy.
-   
+
 Example usage:
-   
-    +hide-forwarded-for-headers                                        
-   
+
+    +hide-forwarded-for-headers
+
+
 -------------------------------------------------------------------------------
 
 8.5.11. hide-from-header
 
 Typical use:
-   
+
     Keep your (old and ill) browser from telling web servers your email address
-   
+
 Effect:
-   
+
     Deletes any existing "From:" HTTP header, or replaces it with the specified
     string.
-   
+
 Type:
-   
+
     Parameterized.
-   
+
 Parameter:
-   
+
     Keyword: "block", or any user defined value.
-   
+
 Notes:
-   
+
     The keyword "block" will completely remove the header (not to be confused
     with the block action).
-   
+
     Alternately, you can specify any value you prefer to be sent to the web
     server. If you do, it is a matter of fairness not to use any address that
     is actually used by a real person.
-   
+
     This action is rarely needed, as modern web browsers don't send "From:"
     headers anymore.
-   
+
 Example usage:
-   
-    +hide-from-header{block}                                           
-   
+
+    +hide-from-header{block}
+
+
     or
-   
-    +hide-from-header{spam-me-senseless@sittingduck.example.com}       
-   
+
+    +hide-from-header{spam-me-senseless@sittingduck.example.com}
+
+
 -------------------------------------------------------------------------------
 
 8.5.12. hide-referrer
 
 Typical use:
-   
+
     Conceal which link you followed to get to a particular site
-   
+
 Effect:
-   
+
     Deletes the "Referer:" (sic) HTTP header from the client request, or
     replaces it with a forged one.
-   
+
 Type:
-   
+
     Parameterized.
-   
+
 Parameter:
-   
+
       + "block" to delete the header completely.
-       
+
       + "forge" to pretend to be coming from the homepage of the server we are
         talking to.
-       
+
       + Any other string to set a user defined referrer.
-       
+
 Notes:
-   
+
     "forge" is the preferred option here, since some servers will not send
     images back otherwise, in an attempt to prevent their valuable content from
     being embedded elsewhere (and hence, without being surrounded by their
     banners).
-   
+
     hide-referer is an alternate spelling of hide-referrer and the two can be
     can be freely substituted with each other. ("referrer" is the correct
     English spelling, however the HTTP specification has a bug - it requires it
     to be spelled as "referer".)
-   
+
 Example usage:
-   
-    +hide-referrer{forge}                                              
-   
+
+    +hide-referrer{forge}
+
+
     or
-   
-    +hide-referrer{http://www.yahoo.com/}                              
-   
+
+    +hide-referrer{http://www.yahoo.com/}
+
+
 -------------------------------------------------------------------------------
 
 8.5.13. hide-user-agent
 
 Typical use:
-   
+
     Conceal your type of browser and client operating system
-   
+
 Effect:
-   
+
     Replaces the value of the "User-Agent:" HTTP header in client requests with
     the specified value.
-   
+
 Type:
-   
+
     Parameterized.
-   
+
 Parameter:
-   
+
     Any user-defined string.
-   
+
 Notes:
-   
+
     +-----------------------------------------------------------------+
     |                             Warning                             |
     |-----------------------------------------------------------------|
@@ -2751,7 +2897,7 @@ Notes:
     |in order to customize their content for different browsers       |
     |(which, by the way, is NOT a smart way to do that!).             |
     +-----------------------------------------------------------------+
-   
+
     Using this action in multi-user setups or wherever different types of
     browsers will access the same Privoxy is not recommended. In single-user,
     single-browser setups, you might use it to delete your OS version
@@ -2761,332 +2907,352 @@ Notes:
     reason in some cases). Example of this: some MSN sites will not let Mozilla
     enter, yet forging to a Netscape 6.1 user-agent works just fine. (Must be
     just a silly MS goof, I'm sure :-).
-   
+
     This action is scheduled for improvement.
-   
+
 Example usage:
-   
-    +hide-user-agent{Netscape 6.1 (X11; I; Linux 2.4.18 i686)}         
-   
+
+    +hide-user-agent{Netscape 6.1 (X11; I; Linux 2.4.18 i686)}
+
+
 -------------------------------------------------------------------------------
 
 8.5.14. kill-popups
 
 Typical use:
-   
-    Eliminate those annoying pop-up windows
-   
+
+    Eliminate those annoying pop-up windows (deprecated)
+
 Effect:
-   
+
     While loading the document, replace JavaScript code that opens pop-up
     windows with (syntactically neutral) dummy code on the fly.
-   
+
 Type:
-   
+
     Boolean.
-   
+
 Parameter:
-   
+
     N/A
-   
+
 Notes:
-   
-    This action is easily confused with the built-in, hardwired filter action,
-    but there are important differences: For kill-popups, the document need not
-    be buffered, so it can be incrementally rendered while downloading. But
-    kill-popups doesn't catch as many pop-ups as filter{popups} does.
-   
+
+    This action is basically a built-in, hardwired special-purpose filter
+    action, but there are important differences: For kill-popups, the document
+    need not be buffered, so it can be incrementally rendered while
+    downloading. But kill-popups doesn't catch as many pop-ups as filter
+    {all-popups} does and is not as smart as filter{unsolicited-popups} is.
+
     Think of it as a fast and efficient replacement for a filter that you can
     use if you don't want any filtering at all. Note that it doesn't make sense
     to combine it with any filter action, since as soon as one filter applies,
     the whole document needs to be buffered anyway, which destroys the
     advantage of the kill-popups action over its filter equivalent.
-   
-    Killing all pop-ups is a dangerous business. Many shops and banks rely on
-    pop-ups to display forms, shopping carts etc, and killing only the unwanted
-    pop-ups would require artificial intelligence in Privoxy. If the only kind
-    of pop-ups that you want to kill are exit consoles (those really nasty
-    windows that appear when you close an other one), you might want to use 
-    filter{js-annoyances} instead.
-   
+
+    Killing all pop-ups unconditionally is problematic. Many shops and banks
+    rely on pop-ups to display forms, shopping carts etc, and the filter
+    {unsolicited-popups} does a fairly good job of catching only the unwanted
+    ones.
+
+    If the only kind of pop-ups that you want to kill are exit consoles (those
+    really nasty windows that appear when you close an other one), you might
+    want to use filter{js-annoyances} instead.
+
 Example usage:
-   
-    +kill-popups                                                       
-   
+
+    +kill-popups
+
+
 -------------------------------------------------------------------------------
 
 8.5.15. limit-connect
 
 Typical use:
-   
+
     Prevent abuse of Privoxy as a TCP proxy relay
-   
+
 Effect:
-   
+
     Specifies to which ports HTTP CONNECT requests are allowable.
-   
+
 Type:
-   
+
     Parameterized.
-   
+
 Parameter:
-   
+
     A comma-separated list of ports or port ranges (the latter using dashes,
     with the minimum defaulting to 0 and the maximum to 65K).
-   
+
 Notes:
-   
+
     By default, i.e. if no limit-connect action applies, Privoxy only allows
     HTTP CONNECT requests to port 443 (the standard, secure HTTPS port). Use
     limit-connect if more fine-grained control is desired for some or all
     destinations.
-   
+
     The CONNECT methods exists in HTTP to allow access to secure websites
     ("https://" URLs) through proxies. It works very simply: the proxy connects
     to the server on the specified port, and then short-circuits its
     connections to the client and to the remote server. This can be a big
     security hole, since CONNECT-enabled proxies can be abused as TCP relays
     very easily.
-   
+
     If you don't know what any of this means, there probably is no reason to
     change this one, since the default is already very restrictive.
-   
+
 Example usages:
-   
-    +limit-connect{443}                   # This is the default and need not be specified.        
-    +limit-connect{80,443}                # Ports 80 and 443 are OK.                              
-    +limit-connect{-3, 7, 20-100, 500-}   # Ports less than 3, 7, 20 to 100 and above 500 are OK. 
-    +limit-connect{-}                     # All ports are OK (gaping security hole!)              
-   
+
+    +limit-connect{443}                   # This is the default and need not be specified.
+    +limit-connect{80,443}                # Ports 80 and 443 are OK.
+    +limit-connect{-3, 7, 20-100, 500-}   # Ports less than 3, 7, 20 to 100 and above 500 are OK.
+    +limit-connect{-}                     # All ports are OK (gaping security hole!)
+
+
 -------------------------------------------------------------------------------
 
 8.5.16. prevent-compression
 
 Typical use:
-   
+
     Ensure that servers send the content uncompressed, so it can be passed
     through filters
-   
+
 Effect:
-   
+
     Adds a header to the request that asks for uncompressed transfer.
-   
+
 Type:
-   
+
     Boolean.
-   
+
 Parameter:
-   
+
     N/A
-   
+
 Notes:
-   
+
     More and more websites send their content compressed by default, which is
-    generally a good idea and saves bandwidth. But for the filter, 
+    generally a good idea and saves bandwidth. But for the filter,
     deanimate-gifs and kill-popups actions to work, Privoxy needs access to the
     uncompressed data. Unfortunately, Privoxy can't yet(!) uncompress, filter,
     and re-compress the content on the fly. So if you want to ensure that all
     websites, including those that normally compress, can be filtered, you need
     to use this action.
-   
+
     This will slow down transfers from those websites, though. If you use any
     of the above-mentioned actions, you will typically want to use
     prevent-compression in conjunction with them.
-   
+
     Note that some (rare) ill-configured sites don't handle requests for
     uncompressed documents correctly (they send an empty document body). If you
     use prevent-compression per default, you'll have to add exceptions for
     those sites. See the example for how to do that.
-   
+
 Example usage (sections):
-   
-    # Set default:                                                     
-    #                                                                  
-    {+prevent-compression}                                             
-    / # Match all sites                                                
-                                                                       
-    # Make exceptions for ill sites:                                   
-    #                                                                  
-    {-prevent-compression}                                             
-    www.debianhelp.org                                                 
-    www.pclinuxonline.com                                              
-   
+
+    # Set default:
+    #
+    {+prevent-compression}
+    / # Match all sites
+
+    # Make exceptions for ill sites:
+    #
+    {-prevent-compression}
+    www.debianhelp.org
+    www.pclinuxonline.com
+
+
 -------------------------------------------------------------------------------
 
 8.5.17. send-vanilla-wafer
 
 Typical use:
-   
+
     Feed log analysis scripts with useless data.
-   
+
 Effect:
-   
+
     Sends a cookie with each request stating that you do not accept any
     copyright on cookies sent to you, and asking the site operator not to track
     you.
-   
+
 Type:
-   
+
     Boolean.
-   
+
 Parameter:
-   
+
     N/A
-   
+
 Notes:
-   
+
     The vanilla wafer is a (relatively) unique header and could conceivably be
     used to track you.
-   
+
     This action is rarely used and not enabled in the default configuration.
-   
+
 Example usage:
-   
-    +send-vanilla-wafer                                                
-   
+
+    +send-vanilla-wafer
+
+
 -------------------------------------------------------------------------------
 
 8.5.18. send-wafer
 
 Typical use:
-   
+
     Send custom cookies or feed log analysis scripts with even more useless
     data.
-   
+
 Effect:
-   
+
     Sends a custom, user-defined cookie with each request.
-   
+
 Type:
-   
+
     Multi-value.
-   
+
 Parameter:
-   
+
     A string of the form "name=value".
-   
+
 Notes:
-   
+
     Being multi-valued, multiple instances of this action can apply to the same
     request, resulting in multiple cookies being sent.
-   
+
     This action is rarely used and not enabled in the default configuration.
-   
+
 Example usage (section):
-   
-    {+send-wafer{UsingPrivoxy=true}}                                   
-    my-internal-testing-server.void                                    
-   
+
+    {+send-wafer{UsingPrivoxy=true}}
+    my-internal-testing-server.void
+
+
 -------------------------------------------------------------------------------
 
 8.5.19. session-cookies-only
 
 Typical use:
-   
+
     Allow only temporary "session" cookies (for the current browser session
     only).
-   
+
 Effect:
-   
+
     Deletes the "expires" field from "Set-Cookie:" server headers. Most
     browsers will not store such cookies permanently and forget them in between
     sessions.
-   
+
 Type:
-   
+
     Boolean.
-   
+
 Parameter:
-   
+
     N/A
-   
+
 Notes:
-   
+
     This is less strict than crunch-incoming-cookies / crunch-outgoing-cookies
     and allows you to browse websites that insist or rely on setting cookies,
     without compromising your privacy too badly.
-   
+
     Most browsers will not permanently store cookies that have been processed
     by session-cookies-only and will forget about them between sessions. This
     makes profiling cookies useless, but won't break sites which require
     cookies so that you can log in for transactions. This is generally turned
     on for all sites, and is the recommended setting.
-   
-    It makes no sense at all to use session-cookies-only together with 
+
+    It makes no sense at all to use session-cookies-only together with
     crunch-incoming-cookies or crunch-outgoing-cookies. If you do, cookies will
     be plainly killed.
-   
+
     Note that it is up to the browser how it handles such cookies without an
     "expires" field. If you use an exotic browser, you might want to try it out
     to be sure.
-   
+
+    This setting also has no effect on cookies that may have been stored
+    previously by the browser before starting Privoxy. These would have to be
+    removed manually.
+
+    Privoxy also uses the content-cookies filter to block some types of
+    cookies. Content cookies are not effected by session-cookies-only.
+
 Example usage:
-   
-    +session-cookies-only                                              
-   
+
+    +session-cookies-only
+
+
 -------------------------------------------------------------------------------
 
 8.5.20. set-image-blocker
 
 Typical use:
-   
+
     Choose the replacement for blocked images
-   
+
 Effect:
-   
-    This action alone doesn't do anything noticeable. If both block and 
+
+    This action alone doesn't do anything noticeable. If both block and
     handle-as-image also apply, i.e. if the request is to be blocked as an
     image, then the parameter of this action decides what will be sent as a
     replacement.
-   
+
 Type:
-   
+
     Parameterized.
-   
+
 Parameter:
-   
+
       + "pattern" to send a built-in checkerboard pattern image. The image is
         visually decent, scales very well, and makes it obvious where banners
         were busted.
-       
+
       + "blank" to send a built-in transparent image. This makes banners
         disappear completely, but makes it hard to detect where Privoxy has
         blocked images on a given page and complicates troubleshooting if
         Privoxy has blocked innocent images, like navigation icons.
-       
+
       + "target-url" to send a redirect to target-url. You can redirect to any
         image anywhere, even in your local filesystem (via "file:///" URL).
-       
+
         A good application of redirects is to use special Privoxy-built-in
         URLs, which send the built-in images, as target-url. This has the same
         visual effect as specifying "blank" or "pattern" in the first place,
         but enables your browser to cache the replacement image, instead of
         requesting it over and over again.
-       
+
 Notes:
-   
+
     The URLs for the built-in images are "http://config.privoxy.org/
     send-banner?type=type", where type is either "blank" or "pattern".
-   
+
     There is a third (advanced) type, called "auto". It is NOT to be used in
     set-image-blocker, but meant for use from filters. Auto will select the
     type of image that would have applied to the referring page, had it been an
     image.
-   
+
 Example usage:
-   
+
     Built-in pattern:
-   
-    +set-image-blocker{pattern}                                        
-   
+
+    +set-image-blocker{pattern}
+
+
     Redirect to the BSD devil:
-   
-    +set-image-blocker{http://www.freebsd.org/gifs/dae_up3.gif}        
-   
+
+    +set-image-blocker{http://www.freebsd.org/gifs/dae_up3.gif}
+
+
     Redirect to the built-in pattern for better caching:
-   
+
     +set-image-blocker{http://config.privoxy.org/send-banner?type=pattern}
-   
+
+
 -------------------------------------------------------------------------------
 
 8.5.21. Summary
@@ -3129,57 +3295,59 @@ Privoxy.
 
 Now let's define some aliases...
 
- # Useful custom aliases we can use later.                                                   
- #                                                                                           
- # Note the (required!) section header line and that this section                            
- # must be at the top of the actions file!                                                   
- #                                                                                           
- {{alias}}                                                                                   
-                                                                                             
- # These aliases just save typing later:                                                     
- # (Note that some already use other aliases!)                                               
- #                                                                                           
- +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies                     
- -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies                     
- block-as-image      = +block +handle-as-image                                               
- mercy-for-cookies   = -crunch-all-cookies -session-cookies-only                             
-                                                                                             
- # These aliases define combinations of actions                                              
- # that are useful for certain types of sites:                                               
- #                                                                                           
- fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups 
- shop        = -crunch-all-cookies -filter{popups} -kill-popups                              
-                                                                                             
- # Short names for other aliases, for really lazy people ;-)                                 
- #                                                                                           
- c0 = +crunch-all-cookies                                                                    
- c1 = -crunch-all-cookies                                                                    
+ # Useful custom aliases we can use later.
+ #
+ # Note the (required!) section header line and that this section
+ # must be at the top of the actions file!
+ #
+ {{alias}}
+
+ # These aliases just save typing later:
+ # (Note that some already use other aliases!)
+ #
+ +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
+ -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
+ block-as-image      = +block +handle-as-image
+ mercy-for-cookies   = -crunch-all-cookies -session-cookies-only -filter{content-cookies}
+
+ # These aliases define combinations of actions
+ # that are useful for certain types of sites:
+ #
+ fragile     = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -kill-popups
+ shop        = -crunch-all-cookies -filter{all-popups} -kill-popups
+
+ # Short names for other aliases, for really lazy people ;-)
+ #
+ c0 = +crunch-all-cookies
+ c1 = -crunch-all-cookies
+
 
 ...and put them to use. These sections would appear in the lower part of an
 actions file and define exceptions to the default actions (as specified further
 up for the "/" pattern):
 
- # These sites are either very complex or very keen on                         
- # user data and require minimal interference to work:                         
- #                                                                             
- {fragile}                                                                     
- .office.microsoft.com                                                         
- .windowsupdate.microsoft.com                                                  
- .nytimes.com                                                                  
-                                                                               
- # Shopping sites:                                                             
- # Allow cookies (for setting and retrieving your customer data)               
- #                                                                             
- {shop}                                                                        
- .quietpc.com                                                                  
- .worldpay.com   # for quietpc.com                                             
- .scan.co.uk                                                                   
-                                                                               
- # These shops require pop-ups:                                                
- #                                                                             
- {shop -kill-popups -filter{popups}}                                           
-  .dabs.com                                                                    
-  .overclockers.co.uk                                                          
+ # These sites are either very complex or very keen on
+ # user data and require minimal interference to work:
+ #
+ {fragile}
+ .office.microsoft.com
+ .windowsupdate.microsoft.com
+ .nytimes.com
+
+ # Shopping sites:
+ # Allow cookies (for setting and retrieving your customer data)
+ #
+ {shop}
+ .quietpc.com
+ .worldpay.com   # for quietpc.com
+ .scan.co.uk
+
+ # These shops require pop-ups:
+ #
+ {shop -kill-popups -filter{all-popups}}
+  .dabs.com
+  .overclockers.co.uk
+
 
 Aliases like "shop" and "fragile" are often used for "problem" sites that
 require some actions to be disabled in order to function properly.
@@ -3199,40 +3367,43 @@ and user.action file and see how all these pieces come together:
 
 Every config file should start with a short comment stating its purpose:
 
-# Sample default.action file                           
+# Sample default.action file 
+
 
 Then, since this is the default.action file, the first section is a special
 section for internal use that you needn't change or worry about:
 
-##########################################################################     
-# Settings -- Don't change! For internal Privoxy use ONLY.                     
-##########################################################################     
-                                                                               
-{{settings}}                                                                   
-for-privoxy-version=3.0                                                        
+##########################################################################
+# Settings -- Don't change! For internal Privoxy use ONLY.
+##########################################################################
+
+{{settings}}
+for-privoxy-version=3.0
+
 
 After that comes the (optional) alias section. We'll use the example section
 from the above chapter on aliases, that also explains why and how aliases are
 used:
 
-##########################################################################                  
-# Aliases                                                                                   
-##########################################################################                  
-{{alias}}                                                                                   
-                                                                                            
-# These aliases just save typing later:                                                     
-# (Note that some already use other aliases!)                                               
-#                                                                                           
-+crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies                     
--crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies                     
-block-as-image      = +block +handle-as-image                                               
-mercy-for-cookies   = -crunch-all-cookies -session-cookies-only                             
-                                                                                            
-# These aliases define combinations of actions                                              
-# that are useful for certain types of sites:                                               
-#                                                                                           
-fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups 
-shop        = mercy-for-cookies -filter{popups} -kill-popups                                
+##########################################################################
+# Aliases
+##########################################################################
+{{alias}}
+
+ # These aliases just save typing later:
+ # (Note that some already use other aliases!)
+ #
+ +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
+ -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
+ block-as-image      = +block +handle-as-image
+ mercy-for-cookies   = -crunch-all-cookies -session-cookies-only -filter{content-cookies}
+
+ # These aliases define combinations of actions
+ # that are useful for certain types of sites:
+ #
+ fragile     = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -kill-popups
+ shop        = -crunch-all-cookies -filter{all-popups} -kill-popups
+
 
 Now come the regular sections, i.e. sets of actions, accompanied by URL
 patterns to which they apply. Remember all actions are disabled when matching
@@ -3251,53 +3422,58 @@ complete listing for your reference. (Remember: a "+" preceding the action name
 enables the action, a "-" disables!). Also note how this long line has been
 made more readable by splitting it into multiple lines with line continuation.
 
-##########################################################################     
-# "Defaults" section:                                                          
-##########################################################################     
- { \                                                                           
- -add-header \                                                                 
- -block \                                                                      
- -crunch-incoming-cookies \                                                    
- -crunch-outgoing-cookies \                                                    
- +deanimate-gifs \                                                             
- -downgrade-http-version \                                                     
- +fast-redirects \                                                             
- +filter{html-annoyances} \                                                    
- +filter{js-annoyances} \                                                      
- -filter{content-cookies} \                                                    
- +filter{popups} \                                                             
- +filter{webbugs} \                                                            
- -filter{refresh-tags} \                                                       
- -filter{fun} \                                                                
- +filter{nimda} \                                                              
- +filter{banners-by-size} \                                                    
- -filter{banners-by-link} \                                                    
- -filter{img-reorder} \                                                        
- -filter{shockwave-flash} \                                                    
- -filter{crude-parental} \                                                     
- -filter{js-events} \                                                          
- -handle-as-image \                                                            
- +hide-forwarded-for-headers \                                                 
- +hide-from-header{block} \                                                    
- +hide-referrer{forge} \                                                       
- -hide-user-agent \                                                            
- -kill-popups \                                                                
- -limit-connect \                                                              
- +prevent-compression \                                                        
- -send-vanilla-wafer \                                                         
- -send-wafer \                                                                 
- +session-cookies-only \                                                       
- +set-image-blocker{pattern} \                                                 
- }                                                                             
- / # forward slash will match *all* potential URL patterns.                    
+##########################################################################
+# "Defaults" section:
+##########################################################################
+ { \
+ -add-header \
+ -block \
+ -crunch-incoming-cookies \
+ -crunch-outgoing-cookies \
+ +deanimate-gifs \
+ -downgrade-http-version \
+ +fast-redirects \
+ +filter{js-annoyances} \
+ -filter{js-events} \
+ +filter{html-annoyances} \
+ -filter{content-cookies} \
+ +filter{refresh-tags} \
+ +filter{unsolicited-popups} \
+ -filter{all-popups} \
+ +filter{img-reorder} \
+ +filter{banners-by-size} \
+ -filter{banners-by-link} \
+ +filter{webbugs} \
+ -filter{tiny-textforms} \
+ +filter{jumping-windows} \
+ -filter{frameset-borders} \
+ -filter{demoronizer} \
+ -filter{shockwave-flash} \
+ -filter{quicktime-kioskmode} \
+ -filter{fun} \
+ -filter{crude-parental} \
+ +filter{ie-exploits} \
+ -handle-as-image \
+ +hide-forwarded-for-headers \
+ +hide-from-header{block} \
+ +hide-referrer{forge} \
+ -hide-user-agent \
+ -kill-popups \
+ -limit-connect \
+ +prevent-compression \
+ -send-vanilla-wafer \
+ -send-wafer \
+ +session-cookies-only \
+ +set-image-blocker{pattern} \
+ }
+ / # forward slash will match *all* potential URL patterns.
+
 
 The default behavior is now set. Note that some actions, like not hiding the
 user agent, are part of a "general policy" that applies universally and won't
 get any exceptions defined later. Other choices, like not blocking (which is
 understandably the default!) need exceptions, i.e. we need to specify
-explicitly what we want to block in later sections. We will also want to make
-exceptions from our general pop-up-killing, and use our defined aliases for
-that.
+explicitly what we want to block in later sections.
 
 The first of our specialized sections is concerned with "fragile" sites, i.e.
 sites that require minimum interference, because they are either very complex
@@ -3305,53 +3481,41 @@ or very keen on tracking you (and have mechanisms in place that make them
 unusable for people who avoid being tracked). We will simply use our
 pre-defined fragile alias instead of stating the list of actions explicitly:
 
-##########################################################################     
-# Exceptions for sites that'll break under the default action set:             
-##########################################################################     
-                                                                               
-# "Fragile" Use a minimum set of actions for these sites (see alias above):    
-#                                                                              
-{ fragile }                                                                    
-.office.microsoft.com           # surprise, surprise!                          
-.windowsupdate.microsoft.com                                                   
+##########################################################################
+# Exceptions for sites that'll break under the default action set:
+##########################################################################
+
+# "Fragile" Use a minimum set of actions for these sites (see alias above):
+#
+{ fragile }
+.office.microsoft.com           # surprise, surprise!
+.windowsupdate.microsoft.com
+
 
 Shopping sites are not as fragile, but they typically require cookies to log
 in, and pop-up windows for shopping carts or item details. Again, we'll use a
 pre-defined alias:
 
-# Shopping sites:                                                              
-#                                                                              
-{ shop }                                                                       
-.quietpc.com                                                                   
-.worldpay.com   # for quietpc.com                                              
-.jungle.com                                                                    
-.scan.co.uk                                                                    
-
-Then, there are sites which rely on pop-up windows (yuck!) to work. Since we
-made pop-up-killing our default above, we need to make exceptions now. Mozilla
-users, who can turn on smart handling of unwanted pop-ups in their browsers,
-can safely choose -filter{popups} (and -kill-popups) above and hence don't need
-this section. Anyway, disabling an already disabled action doesn't hurt, so
-we'll define our exceptions regardless of what was chosen in the defaults
-section:
-
-# These sites require pop-ups too :(                                           
-#                                                                              
-{ -kill-popups -filter{popups} }                                               
-.dabs.com                                                                      
-.overclockers.co.uk                                                            
-.deutsche-bank-24.de                                                           
+# Shopping sites:
+#
+{ shop }
+.quietpc.com
+.worldpay.com   # for quietpc.com
+.jungle.com
+.scan.co.uk
+
 
 The fast-redirects action, which we enabled per default above, breaks some
 sites. So disable it for popular sites where we know it misbehaves:
 
-{ -fast-redirects }                                                            
-login.yahoo.com                                                                
-edit.*.yahoo.com                                                               
-.google.com                                                                    
-.altavista.com/.*(like|url|link):http                                          
-.altavista.com/trans.*urltext=http                                             
-.nytimes.com                                                                   
+{ -fast-redirects }
+login.yahoo.com
+edit.*.yahoo.com
+.google.com
+.altavista.com/.*(like|url|link):http
+.altavista.com/trans.*urltext=http
+.nytimes.com
+
 
 It is important that Privoxy knows which URLs belong to images, so that if they
 are to be blocked, a substitute image can be sent, rather than an HTML page.
@@ -3361,15 +3525,16 @@ advertisers (in terms of money and information). We can mark any URL as an
 image with the handle-as-image action, and marking all URLs that end in a known
 image file extension is a good start:
 
-##########################################################################     
-# Images:                                                                      
-##########################################################################     
-                                                                               
-# Define which file types will be treated as images, in case they get          
-# blocked further down this file:                                              
-#                                                                              
-{ +handle-as-image }                                                           
-/.*\.(gif|jpe?g|png|bmp|ico)$                                                  
+##########################################################################
+# Images:
+##########################################################################
+
+# Define which file types will be treated as images, in case they get
+# blocked further down this file:
+#
+{ +handle-as-image }
+/.*\.(gif|jpe?g|png|bmp|ico)$
+
 
 And then there are known banner sources. They often use scripts to generate the
 banners, so it won't be visible from the URL that the request is for an image.
@@ -3380,17 +3545,18 @@ chosen by the set-image-blocker action. Since all URLs have matched the default
 section with its +set-image-blocker{pattern} action before, it still applies
 and needn't be repeated:
 
-# Known ad generators:                                                         
-#                                                                              
-{ block-as-image }                                                             
-ar.atwola.com                                                                  
-.ad.doubleclick.net                                                            
-.ad.*.doubleclick.net                                                          
-.a.yimg.com/(?:(?!/i/).)*$                                                     
-.a[0-9].yimg.com/(?:(?!/i/).)*$                                                
-bs*.gsanet.com                                                                 
-bs*.einets.com                                                                 
-.qkimg.net                                                                     
+# Known ad generators:
+#
+{ block-as-image }
+ar.atwola.com
+.ad.doubleclick.net
+.ad.*.doubleclick.net
+.a.yimg.com/(?:(?!/i/).)*$
+.a[0-9].yimg.com/(?:(?!/i/).)*$
+bs*.gsanet.com
+bs*.einets.com
+.qkimg.net
+
 
 One of the most important jobs of Privoxy is to block banners. A huge bunch of
 them are already "blocked" by the filter{banners-by-size} action, which we
@@ -3405,23 +3571,24 @@ typical domain and path name components of banners. Then comes a list of
 individual patterns for specific sites, which is omitted here to keep the
 example short:
 
-##########################################################################     
-# Block these fine banners:                                                    
-##########################################################################     
-{ +block }                                                                     
-                                                                               
-# Generic patterns:                                                            
-#                                                                              
-ad*.                                                                           
-.*ads.                                                                         
-banner?.                                                                       
-count*.                                                                        
-/.*count(er)?\.(pl|cgi|exe|dll|asp|php[34]?)                                   
-/(?:.*/)?(publicite|werbung|rekla(ma|me|am)|annonse|maino(kset|nta|s)?)/       
-                                                                               
-# Site-specific patterns (abbreviated):                                        
-#                                                                              
-.hitbox.com                                                                    
+##########################################################################
+# Block these fine banners:
+##########################################################################
+{ +block }
+
+# Generic patterns:
+#
+ad*.
+.*ads.
+banner?.
+count*.
+/.*count(er)?\.(pl|cgi|exe|dll|asp|php[34]?)
+/(?:.*/)?(publicite|werbung|rekla(ma|me|am)|annonse|maino(kset|nta|s)?)/
+
+# Site-specific patterns (abbreviated):
+#
+.hitbox.com
+
 
 You wouldn't believe how many advertisers actually call their banner servers
 ads.company.com, or call the directory in which the banners are stored simply
@@ -3440,37 +3607,39 @@ exception to the general non-blocking policy, and suddenly +block applies. And
 now, it'll match .*loads., where -block applies, so (unless it matches again
 further down) it ends up with no block action applying.
 
-##########################################################################     
-# Save some innocent victims of the above generic block patterns:              
-##########################################################################     
-                                                                               
-# By domain:                                                                   
-#                                                                              
-{ -block }                                                                     
-adv[io]*.  # (for advogato.org and advice.*)                                   
-adsl.      # (has nothing to do with ads)                                      
-ad[ud]*.   # (adult.* and add.*)                                               
-.edu       # (universities don't host banners (yet!))                          
-.*loads.   # (downloads, uploads etc)                                          
-                                                                               
-# By path:                                                                     
-#                                                                              
-/.*loads/                                                                      
-                                                                               
-# Site-specific:                                                               
-#                                                                              
-www.globalintersec.com/adv # (adv = advanced)                                  
-www.ugu.com/sui/ugu/adv                                                        
+##########################################################################
+# Save some innocent victims of the above generic block patterns:
+##########################################################################
+
+# By domain:
+#
+{ -block }
+adv[io]*.  # (for advogato.org and advice.*)
+adsl.      # (has nothing to do with ads)
+ad[ud]*.   # (adult.* and add.*)
+.edu       # (universities don't host banners (yet!))
+.*loads.   # (downloads, uploads etc)
+
+# By path:
+#
+/.*loads/
+
+# Site-specific:
+#
+www.globalintersec.com/adv # (adv = advanced)
+www.ugu.com/sui/ugu/adv
+
 
 Filtering source code can have nasty side effects, so make an exception for our
 friends at sourceforge.net, and all paths with "cvs" in them. Note that -filter
 disables all filters in one fell swoop!
 
-# Don't filter code!                                                           
-#                                                                              
-{ -filter }                                                                    
-/.*cvs                                                                         
-.sourceforge.net                                                               
+# Don't filter code!
+#
+{ -filter }
+/.*cvs
+.sourceforge.net
+
 
 The actual default.action is of course more comprehensive, but we hope this
 example made clear how it works.
@@ -3492,84 +3661,147 @@ and you'll probably want to install updated versions from time to time.
 So let's look at a few examples of things that one might typically do in
 user.action:
 
-# My user.action file.                                        
+# My user.action file. 
+
 
 As aliases are local to the actions file that they are defined in, you can't
 use the ones from default.action, unless you repeat them here:
 
-# (Re-)define aliases for this file:                                                        
-#                                                                                           
-{{alias}}                                                                                   
--crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies                     
-mercy-for-cookies   = -crunch-all-cookies -session-cookies-only                             
-fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups 
-shop        = mercy-for-cookies -filter{popups} -kill-popups                                
-allow-ads   = -block -filter{banners-by-size} # (see below)                                 
+# Aliases are local to the file they are defined in.
+# (Re-)define aliases for this file:
+#
+{{alias}}
+#
+# These aliases just save typing later, and the alias names should
+# be self explanatory.
+#
++crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
+-crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
+ allow-all-cookies  = -crunch-all-cookies -session-cookies-only
+ allow-popups       = -filter{all-popups} -kill-popups
++block-as-image     = +block +handle-as-image
+-block-as-image     = -block
+
+# These aliases define combinations of actions that are useful for
+# certain types of sites:
+#
+fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referrer -kill-popups
+shop        = -crunch-all-cookies allow-popups
+
+# Allow ads for selected useful free sites:
+#
+allow-ads   = -block -filter{banners-by-size} -filter{banners-by-link}
+
 
 Say you have accounts on some sites that you visit regularly, and you don't
 want to have to log in manually each time. So you'd like to allow persistent
-cookies for these sites. The mercy-for-cookies alias defined above does exactly
-that, i.e. it disables crunching of cookies in any direction, and processing of
-cookies to make them temporary.
+cookies for these sites. The allow-all-cookies alias defined above does exactly
+that, i.e. it disables crunching of cookies in any direction, and the
+processing of cookies to make them only temporary.
+
+{ allow-all-cookies }
+sourceforge.net
+sunsolve.sun.com
+.slashdot.org
+.yahoo.com
+.msdn.microsoft.com
+.redhat.com
+
+
+Your bank is allergic to some filter, but you don't know which, so you disable
+them all:
+
+{ -filter }
+.your-home-banking-site.com
+
+
+Some file types you may not want to filter for various reasons:
+
+# Technical documentation is likely to contain strings that might
+# erroneously get altered by the JavaScript-oriented filters:
+#
+.tldp.org
+/(.*/)?selfhtml/
 
-{ mercy-for-cookies }                                                          
-sunsolve.sun.com                                                               
-slashdot.org                                                                   
-.yahoo.com                                                                     
-.msdn.microsoft.com                                                            
-.redhat.com                                                                    
+# And this stupid host sends streaming video with a wrong MIME type,
+# so that Privoxy thinks it is getting HTML and starts filtering:
+#
+stupid-server.example.com/
 
-Your bank needs popups and is allergic to some filter, but you don't know
-which, so you disable them all:
 
-{ -filter -kill-popups }                                                       
-.your-home-banking-site.com                                                    
+Example of a simple block action. Say you've seen an ad on your favourite page
+on example.com that you want to get rid of. You have right-clicked the image,
+selected "copy image location" and pasted the URL below while removing the
+leading http://, into a { +block } section. Note that { +handle-as-image } need
+not be specified, since all URLs ending in .gif will be tagged as images by the
+general rules as set in default.action anyway:
 
-While browsing the web with Privoxy you noticed some ads that sneaked through,
-but you were too lazy to report them through our fine and easy feedback system,
-so you have added them here:
+{ +block }
+www.example.com/nasty-ads/sponsor.gif
+another.popular.site.net/more/junk/here/
 
-{ +block }                                                                     
-www.a-popular-site.com/some/unobvious/path                                     
-another.popular.site.net/more/junk/here/                                       
 
-Note that, assuming the banners in the above example have regular image
-extensions (most do), +handle-as-image need not be specified, since all URLs
-ending in these extensions will already have been tagged as images in the
-relevant section of default.action by now.
+The URLs of dynamically generated banners, especially from large banner farms,
+often don't use the well-known image file name extensions, which makes it
+impossible for Privoxy to guess the file type just by looking at the URL. You
+can use the +block-as-image alias defined above for these cases. Note that
+objects which match this rule but then turn out NOT to be an image are
+typically rendered as a "broken image" icon by the browser. Use cautiously.
 
-Then you noticed that the default configuration breaks Forbes Magazine, but you
+{ +block-as-image }
+.doubleclick.net
+/Realmedia/ads/
+ar.atwola.com/
+
+
+Now you noticed that the default configuration breaks Forbes Magazine, but you
 were too lazy to find out which action is the culprit, and you were again too
 lazy to give feedback, so you just used the fragile alias on the site, and --
-whoa! -- it worked:
+whoa! -- it worked. The fragile aliases disables those actions that are most
+likely to break a site. Also, good for testing purposes to see if it is Privoxy
+that is causing the problem or not.
+
+{ fragile }
+.forbes.com
 
-{ fragile }                                                                    
-.forbes.com                                                                    
 
 You like the "fun" text replacements in default.filter, but it is disabled in
 the distributed actions file. (My colleagues on the team just don't have a
 sense of humour, that's why! ;-). So you'd like to turn it on in your private,
 update-safe config, once and for all:
 
-{ +filter{fun} }                                                               
-/ # For ALL sites!                                                             
+{ +filter{fun} }
+/ # For ALL sites!
+
 
 Note that the above is not really a good idea: There are exceptions to the
 filters in default.action for things that really shouldn't be filtered, like
 code on CVS->Web interfaces. Since user.action has the last word, these
 exceptions won't be valid for the "fun" filtering specified here.
 
-Finally, you might think about how your favourite free websites are funded, and
+You might also worry about how your favourite free websites are funded, and
 find that they rely on displaying banner advertisements to survive. So you
 might want to specifically allow banners for those sites that you feel provide
 value to you:
 
-{ allow-ads }                                                                  
-.sourceforge.net                                                               
-.slashdot.org                                                                  
-.osdn.net                                                                      
+{ allow-ads }
+.sourceforge.net
+.slashdot.org
+.osdn.net
+
+
+Note that allow-ads has been aliased to -block, -filter{banners-by-size}, and -
+filter{banners-by-link} above.
+
+user.action is generally the best place to define exceptions and additions to
+the default policies of default.action. Some actions are safe to have their
+default policies set here though. So let's set a default policy to have a
+"blank" image as opposed to the checkerboard pattern for ALL sites. "/" of
+course matches all URL paths and patterns:
+
+{ +set-image-blocker{blank} }
+/ # ALL sites
 
-Note that allow-ads has been aliased to -block -filter{banners-by-size} above.
 
 -------------------------------------------------------------------------------
 
@@ -3585,17 +3817,17 @@ without navigation tools, the infamous  tag etc, to suppress images with
 certain width and height attributes (standard banner sizes or web-bugs), or
 just to have fun. The possibilities are endless.
 
-Filtering works on any text-based document type, including plain text, HTML,
-JavaScript, CSS etc. (all text/* MIME types). Substitutions are made at the
-source level, so if you want to "roll your own" filters, you should be familiar
-with HTML syntax.
+Filtering works on any text-based document type, including HTML, JavaScript,
+CSS etc. (all text/* MIME types, except text/plain). Substitutions are made at
+the source level, so if you want to "roll your own" filters, you should be
+familiar with HTML syntax.
 
 Just like the actions files, the filter file is organized in sections, which
 are called filters here. Each filter consists of a heading line, that starts
 with the keyword FILTER:, followed by the filter's name, and a short (one line)
 description of what it does. Below that line come the jobs, i.e. lines that
 define the actual text substitutions. By convention, the name of a filter
-should describe what the filter eliminates. The comment is used in the 
+should describe what the filter eliminates. The comment is used in the
 web-based user interface.
 
 Once a filter called name has been defined in the filter file, it can be
@@ -3603,7 +3835,8 @@ invoked by using an action of the form +filter{name} in any actions file.
 
 A filter header line for a filter called "foo" could look like this:
 
-FILTER: foo Replace all "foo" with "bar"                                       
+FILTER: foo Replace all "foo" with "bar"
+
 
 Below that line, and up to the next header line, come the jobs that define what
 text replacements the filter executes. They are specified in a syntax that
@@ -3612,7 +3845,7 @@ this to be quite intuitive, and may want to look at the PCRS man page for the
 subtle differences to Perl behaviour. Most notably, the non-standard option
 letter U is supported, which turns the default to ungreedy matching.
 
-If you are new to regular expressions, you might want to take a look at the 
+If you are new to regular expressions, you might want to take a look at the
 Appendix on regular expressions, and see the Perl manual for the s///
 operator's syntax and Perl-style regular expressions in general. The below
 examples might also help to get you started.
@@ -3625,28 +3858,32 @@ Now, let's complete our "foo" filter. We have already defined the heading, but
 the jobs are still missing. Since all it does is to replace "foo" with "bar",
 there is only one (trivial) job needed:
 
-s/foo/bar/                                                                     
+s/foo/bar/
+
 
 But wait! Didn't the comment say that all occurrences of "foo" should be
 replaced? Our current job will only take care of the first "foo" on each page.
 For global substitution, we'll need to add the g option:
 
-s/foo/bar/g                                                                    
+s/foo/bar/g
+
 
 Our complete filter now looks like this:
 
-FILTER: foo Replace all "foo" with "bar"                                       
-s/foo/bar/g                                                                    
+FILTER: foo Replace all "foo" with "bar"
+s/foo/bar/g
+
 
 Let's look at some real filters for more interesting examples. Here you see a
 filter that protects against some common annoyances that arise from JavaScript
 abuse. Let's look at its jobs one after the other:
 
-FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse                         
-                                                                                                
-# Get rid of JavaScript referrer tracking. Test page: http://www.randomoddness.com/untitled.htm 
-#                                                                                               
-s|()|$1"Not Your Business!"$2|Usg                       
+FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse
+
+# Get rid of JavaScript referrer tracking. Test page: http://www.randomoddness.com/untitled.htm
+#
+s|()|$1"Not Your Business!"$2|Usg
+
 
 Following the header line and a comment, you see the job. Note that it uses |
 as the delimiter instead of /, because the pattern contains a forward slash,
@@ -3677,8 +3914,8 @@ parentheses: The portions of the page matched by sub-patterns that are enclosed
 in parentheses, will be remembered and be available through the variables $1,
 $2, ... in the substitute. The U option switches to ungreedy matching, which
 means that the first .* in the pattern will only "eat up" all text in between "
-" tag. Furthermore, the s
+" tag. Furthermore, the s
 option says that the match may span multiple lines in the page, and the g
 option again means that the substitution is global.
 
@@ -3703,9 +3940,10 @@ referrer information anymore.
 We'll show you two other jobs from the JavaScript taming department, but this
 time only point out the constructs of special interest:
 
-# The status bar is for displaying link targets, not pointless blahblah        
-#                                                                              
-s/window\.status\s*=\s*(['"]).*?\1/dUmMy=1/ig                                  
+# The status bar is for displaying link targets, not pointless blahblah
+#
+s/window\.status\s*=\s*(['"]).*?\1/dUmMy=1/ig
+
 
 \s stands for whitespace characters (space, tab, newline, carriage return, form
 feed), so that \s* means: "zero or more whitespace". The ? in .*? makes this
@@ -3722,9 +3960,10 @@ scripts). Thus, it catches many cases where e.g. pointless descriptions are
 displayed in the status bar instead of the link target when you move your mouse
 over links.
 
-# Kill OnUnload popups. Yummy. Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html 
-#                                                                                    
-s/(]*)onunload(.*>)/$1never$2/iU                                            
+# Kill OnUnload popups. Yummy. Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html
+#
+s/(]*)onunload(.*>)/$1never$2/iU
+
 
 Including the OnUnload event binding in the HTML DOM was a CRIME. When I close
 a browser window, I want it to close and die. Basta. This job replaces the
@@ -3737,31 +3976,33 @@ content does.
 
 The last example is from the fun department:
 
-FILTER: fun Fun text replacements                                              
-                                                                               
-# Spice the daily news:                                                        
-#                                                                              
-s/microsoft(?!\.com)/MicroSuck/ig                                              
+FILTER: fun Fun text replacements
+
+# Spice the daily news:
+#
+s/microsoft(?!\.com)/MicroSuck/ig
+
 
 Note the (?!\.com) part (a so-called negative lookahead) in the job's pattern,
 which means: Don't match, if the string ".com" appears directly following
 "microsoft" in the page. This prevents links to microsoft.com from being
 trashed, while still replacing the word everywhere else.
 
-# Buzzword Bingo (example for extended regex syntax)                           
-#                                                                              
-s* industry[ -]leading \                                                       
-|  cutting[ -]edge \                                                           
-|  customer[ -]focused \                                                       
-|  market[ -]driven \                                                          
-|  award[ -]winning # Comments are OK, too! \                                  
-|  high[ -]performance \                                                       
-|  solutions[ -]based \                                                        
-|  unmatched \                                                                 
-|  unparalleled \                                                              
-|  unrivalled \                                                                
-*BINGO! \                                      
-*igx                                                                           
+# Buzzword Bingo (example for extended regex syntax)
+#
+s* industry[ -]leading \
+|  cutting[ -]edge \
+|  customer[ -]focused \
+|  market[ -]driven \
+|  award[ -]winning # Comments are OK, too! \
+|  high[ -]performance \
+|  solutions[ -]based \
+|  unmatched \
+|  unparalleled \
+|  unrivalled \
+*BINGO! \
+*igx
+
 
 The x option in this job turns on extended syntax, and allows for e.g. the
 liberal use of (non-interpreted!) whitespace for nicer formatting.
@@ -3770,6 +4011,194 @@ You get the idea?
 
 -------------------------------------------------------------------------------
 
+9.2. The Pre-defined Filters
+
+The distribution default.filter file contains a selection of pre-defined
+filters for your convenience:
+
+js-annoyances
+
+    The purpose of this filter is to get rid of particularly annoying
+    JavaScript abuse. To that end, it
+
+      + replaces JavaScript references to the browser's referrer information
+        with the string "Not Your Business!". This compliments the
+        hide-referrer action on the content level.
+
+      + removes the bindings to the DOM's unload event which we feel has no
+        right to exist and is responsible for most "exit consoles", i.e. nasty
+        windows that pop up when you close another one.
+
+      + removes code that causes new windows to be opened with undesired
+        properties, such as being full-screen, non-resizable, without location,
+        status or menu bar etc.
+
+js-events
+
+    This is a very radical measure. It removes virtually all JavaScript event
+    bindings, which means that scripts can not react to user actions such as
+    mouse movements or clicks, window resizing etc, anymore.
+
+    We strongly discourage using this filter as a default since it breaks many
+    legitimate scripts. It is meant for use only on extra-nasty sites (should
+    you really need to go there).
+
+html-annoyances
+
+    This filter will undo many common instances of HTML based abuse.
+
+    The BLINK and MARQUEE tags are neutralized (yeah baby!), and browser
+    windows will be created as resizable (as of course they should be!), and
+    will have location, scroll and menu bars -- even if specified otherwise.
+
+content-cookies
+
+    Most cookies are set in the HTTP dialogue, where they can be intercepted by
+    the crunch-incoming-cookies and crunch-outgoing-cookies actions. But web
+    sites increasingly make use of HTML meta tags and JavaScript to sneak
+    cookies to the browser on the content level.
+
+    This filter disables HTML and JavaScript code that reads or sets cookies.
+    Use it wherever you would also use the cookie crunch actions.
+
+refresh tags
+
+    Disable any refresh tags if the interval is greater than nine seconds (so
+    that redirections done via refresh tags are not destroyed). This is useful
+    for dial-on-demand setups, or for those who find this HTML feature
+    annoying.
+
+unsolicited-popups
+
+    This filter attempts to prevent only "unsolicited" pop-up windows from
+    opening, yet still allow pop-up windows that the user has explicitly chosen
+    to open. It was added in version 3.0.1, as an improvement over earlier such
+    filters.
+
+    Technical note: The filter works by redefining the window.open JavaScript
+    function to a dummy function during the loading and rendering phase of each
+    HTML page access, and restoring the function afterwards.
+
+all-popups
+
+    Attempt to prevent all pop-up windows from opening. Note this should be
+    used with more discretion than the above, since it is more likely to break
+    some sites that require pop-ups for normal usage. Use with caution.
+
+img-reorder
+
+    This is a helper filter that has no value if used alone. It makes the
+    banners-by-size and banners-by-link (see below) filters more effective and
+    should be enabled together with them.
+
+banners-by-size
+
+    This filter removes image tags purely based on what size they are.
+    Fortunately for us, many ads and banner images tend to conform to certain
+    standardized sizes, which makes this filter quite effective for ad
+    stripping purposes.
+
+    Occasionally this filter will cause false positives on images that are not
+    ads, but just happen to be of one of the standard banner sizes.
+
+banners-by-link
+
+    This is an experimental filter that attempts to kill any banners if their
+    URLs seem to point to known or suspected click trackers. It is currently
+    not of much value and is not recommended for use by default.
+
+webbugs
+
+    Webbugs are small, invisible images (technically 1X1 GIF images), that are
+    used to track users across websites, and collect information on them. As an
+    HTML page is loaded by the browser, an embedded image tag causes the
+    browser to contact a third-party site, disclosing the tracking information
+    through the requested URL and/or cookies for that third-party domain,
+    without the use ever becoming aware of the interaction with the third-party
+    site. HTML-ized spam also uses a similar technique to verify email
+    addresses.
+
+    This filter removes the HTML code that loads such "webbugs".
+
+tiny-textforms
+
+    A rather special-purpose filter that can be used to enlarge textareas
+    (those multi-line text boxes in web forms) and turn off hard word wrap in
+    them. It was written for the sourceforge.net tracker system where such
+    boxes are a nuisance, but it can be handy on other sites, too.
+
+    It is not recommended to use this filter as a default.
+
+jumping-windows
+
+    Many consider windows that move, or resize themselves to be abusive. This
+    filter neutralizes the related JavaScript code. Note that some sites might
+    not display or behave as intended when using this filter.
+
+frameset-borders
+
+    Some web designers seem to assume that everyone in the world will view
+    their web sites using the same browser brand and version, screen resolution
+    etc, because only that assumption could explain why they'd use static frame
+    sizes, yet prevent their frames from being resized by the user, should they
+    be too small to show their whole content.
+
+    This filter removes the related HTML code. It should only be applied to
+    sites which need it.
+
+demoronizer
+
+    Many Microsoft products that generate HTML use non-standard extensions
+    (read: violations) of the ISO 8859-1 aka Latin-1 character set. This causes
+    those HTML documents to display with errors on standard-compliant
+    platforms.
+
+    This filter translates the MS-only characters into Latin-1 equivalents. It
+    is not necessary when using MS products, and will cause corruption of all
+    documents that use 8-bit character sets other than Latin-1. It's mostly
+    worthwhile for Europeans on non-MS platforms, if wierd garbage characters
+    sometimes appear on some pages.
+
+shockwave-flash
+
+    A filter for shockwave haters. As the name suggests, this filter strips
+    code out of web pages that is used to embed shockwave flash objects.
+
+quicktime-kioskmode
+
+    Change HTML code that embeds Quicktime objects so that kioskmode, which
+    prevents saving, is disabled.
+
+fun
+
+    Text replacements for subversive browsing fun. Make fun of your favorite
+    Monopolist or play buzzword bingo.
+
+crude-parental
+
+    A demonstration-only filter that shows how Privoxy can be used to delete
+    web content on a keyword basis.
+
+ie-exploits
+
+    A collection of text replacements to disable malicious HTML and JavaScript
+    code that exploits known security holes in Internet Explorer.
+
+    Presently, it only protects against Nimda and a cross-site scripting bug,
+    and would need active maintenance to provide more substantial protection.
+
+site-specifics
+
+    Some web sites have very specific problems, the cure for which doesn't
+    apply anywhere else, or could even cause damage on other sites.
+
+    This is a collection of such site-specific cures which should only be
+    applied to the sites they were intended for, which is what the supplied
+    default.action file does. Users shouldn't need to change anything regarding
+    this filter.
+
+-------------------------------------------------------------------------------
+
 10. Templates
 
 All Privoxy built-in pages, i.e. error pages such as the "404 - No Such Domain"
@@ -3798,17 +4227,19 @@ HTML code disappear when a specific symbol is set. We use this for many
 purposes, one of them being to include the beta warning in all our user
 interface (CGI) pages when Privoxy in in an alpha or beta development stage:
 
-                                                    
-                                                                               
-  ... beta warning HTML code goes here ...                                     
-                                                                               
-                                                      
+
+
+  ... beta warning HTML code goes here ...
+
+
+
 
 If the "unstable" symbol is set, everything in between and including
 @if-unstable-start and if-unstable-end@ will disappear, leaving nothing but an
 empty comment:
 
-                                                                      
+
+
 
 There's also an if-then-else construct and an #include mechanism, but you'll
 sure find out if you are inclined to edit the templates ;-)
@@ -3829,7 +4260,7 @@ with the best support:
 
 11.1. Get Support
 
-For casual users, our support forum at SourceForge is probably best suited: 
+For casual users, our support forum at SourceForge is probably best suited:
 http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
 All users are of course welcome to discuss their issues on the users mailing
@@ -3852,7 +4283,7 @@ debugging. If you are using your own custom configuration, please try the stock
 configs to see if the problem is configuration related.
 
 If not using the latest version, chances are that the bug has been found and
-fixed in the meantime. We would appreciate if you could take the time to 
+fixed in the meantime. We would appreciate if you could take the time to
 upgrade to the latest version (or even the latest CVS snapshot) and verify your
 bug, but this is not required for reporting.
 
@@ -3892,7 +4323,7 @@ group_id=11118.
 
 12. Privoxy Copyright, License and History
 
-Copyright © 2001, 2002 by Privoxy Developers 
+Copyright © 2001 - 2004 by Privoxy Developers 
 
 Some source code is based on code Copyright © 1997 by Anonymous Coders and
 Junkbusters, Inc. and licensed under the GNU General Public License.
@@ -3923,7 +4354,7 @@ this program; if not, write to the
 
 12.2. History
 
-In the beginning, there was the Internet Junkbuster, by Anonymous Coders and 
+In the beginning, there was the Internet Junkbuster, by Anonymous Coders and
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
@@ -3946,37 +4377,44 @@ Then, some developers picked up the thread, and started turning the software
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
-The result of this is Privoxy, whose first stable release, 3.0, was released
+The result of this is Privoxy, whose first stable version, 3.0, was released
 August, 2002.
 
 -------------------------------------------------------------------------------
 
 12.3. Authors
 
-Current Project Developers:
+Current Developement Team:
 
- Jon Foster
+ Hal Burgiss (docs)
  Andreas Oesterhelt
- Stefan Waldherr
+ David Schmidt (OS/2, Mac OSX ports)
  
- Thomas Steudten
- Rodney Stromlund
 
-Current Project Contributors:
 
+Current and Former Project Contributors:
+
+ Johny Agotnes 
  Rodrigo Barbosa (RPM specfiles)
  Moritz Barsnick
- Hal Burgiss (docs)
+ Brian Dessent
+ Mattes Dolak 
+ Jon Foster
  Karsten Hopp (Red Hat)
  Alexander Lazic
+ Daniel Leite
  Gábor Lipták
- Guy
+ Adam Lock (Win32)
+ Guy Laroche
  Haroon Rafique
  Roland Rosenfeld (Debian)
  Georg Sauthoff (Gentoo)
- David Schmidt (OS/2, Mac OSX ports)
+ Thomas Steudten
  Joerg Strohmayer (Amiga)
+ Rodney Stromlund
+ Sviatoslav Sviridov
  Sarantis Paskalis
+ Stefan Waldherr
 
 Based in part on code originally developed by:
 
@@ -3992,12 +4430,14 @@ suggestions. These include (in alphabetical order):
  Andrew J. Caines
  Clifford Caoile
  Michael T. Davis
+ Brian Dessent
  Peter E
  Aaron Hamid
  Magnus Holmgren
- Daniel Leite
+ Don Libes  
  Paul Lieverse
  David Mediavilla 
+ Oliver Stoeneberg
  Roberto Ragusa
  Maynard Riley
  Bart Schelstraete
@@ -4014,30 +4454,30 @@ http://www.privoxy.org/, the Privoxy Home page.
 
 http://www.privoxy.org/faq/, the Privoxy FAQ.
 
-http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on       
-SourceForge.                                                                   
+http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on
+SourceForge.
 
-http://config.privoxy.org/, the web-based user interface. Privoxy must be      
-running for this to work. Shortcut: http://p.p/                                
+http://config.privoxy.org/, the web-based user interface. Privoxy must be
+running for this to work. Shortcut: http://p.p/
 
 http://www.privoxy.org/actions/, to submit "misses" to the developers.
 
-http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun   
-ideas from Privoxy users.                                                      
+http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun
+ideas from Privoxy users.
 
-http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are  
-used to track web users.                                                       
+http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are
+used to track web users.
 
 http://www.junkbusters.com/ijb.html, the original Internet Junkbuster.
 
-http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,  
-from which Privoxy was derived.                                                
+http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,
+from which Privoxy was derived.
 
-http://privacy.net/analyze/, a useful site to check what information about you 
-is leaked while you browse the web.                                            
+http://privacy.net/analyze/, a useful site to check what information about you
+is leaked while you browse the web.
 
-http://www.squid-cache.org/, a very popular caching proxy, which is often used 
-together with Privoxy.                                                         
+http://www.squid-cache.org/, a very popular caching proxy, which is often used
+together with Privoxy.
 
 http://www.privoxy.org/developer-manual/, the Privoxy developer manual.
 
@@ -4078,7 +4518,7 @@ examples:
 . - Matches any single character, e.g. "a", "A", "4", ":", or "@".
 
 ? - The preceding character or expression is matched ZERO or ONE times. Either/
-or.                                                                            
+or.
 
 + - The preceding character or expression is matched ONE or MORE times.
 
@@ -4086,29 +4526,29 @@ or.
 
 \ - The "escape" character denotes that the following character should be taken
 literally. This is used where one of the special characters (e.g. ".") needs to
-be taken literally and not as a special meta-character. Example: "example      
-\.com", makes sure the period is recognized only as a period (and not expanded 
-to its meta-character meaning of any single character).                        
+be taken literally and not as a special meta-character. Example: "example
+\.com", makes sure the period is recognized only as a period (and not expanded
+to its meta-character meaning of any single character).
 
-[] - Characters enclosed in brackets will be matched if any of the enclosed    
-characters are encountered. For instance, "[0-9]" matches any numeric digit    
-(zero through nine). As an example, we can combine this with "+" to match any  
-digit one of more times: "[0-9]+".                                             
+[] - Characters enclosed in brackets will be matched if any of the enclosed
+characters are encountered. For instance, "[0-9]" matches any numeric digit
+(zero through nine). As an example, we can combine this with "+" to match any
+digit one of more times: "[0-9]+".
 
-() - parentheses are used to group a sub-expression, or multiple               
-sub-expressions.                                                               
+() - parentheses are used to group a sub-expression, or multiple
+sub-expressions.
 
-| - The "bar" character works like an "or" conditional statement. A match is   
-successful if the sub-expression on either side of "|" matches. As an example: 
-"/(this|that) example/" uses grouping and the bar character and would match    
-either "this example" or "that example", and nothing else.                     
+| - The "bar" character works like an "or" conditional statement. A match is
+successful if the sub-expression on either side of "|" matches. As an example:
+"/(this|that) example/" uses grouping and the bar character and would match
+either "this example" or "that example", and nothing else.
 
 These are just some of the ones you are likely to use when matching URLs with
 Privoxy, and is a long way from a definitive list. This is enough to get us
 started with a few simple examples which may be more illuminating:
 
-/.*/banners/.* - A simple example that uses the common combination of "." and "
-*" to denote any character, zero or more times. In other words, any string at
+/.*/banners/.* - A simple example that uses the common combination of "." and
+"*" to denote any character, zero or more times. In other words, any string at
 all. So we start with a literal forward slash, then our regular expression
 pattern (".*") another literal forward slash, the string "banners", another
 forward slash, and lastly another ".*". We are building a directory path here.
@@ -4180,48 +4620,48 @@ Since Privoxy proxies each requested web page, it is easy for Privoxy to trap
 certain special URLs. In this way, we can talk directly to Privoxy, and see how
 it is configured, see how our rules are being applied, change these rules and
 other configuration options, and even turn Privoxy's filtering off, all with a
-web browser. 
+web browser.
 
 The URLs listed below are the special ones that allow direct access to Privoxy.
 Of course, Privoxy must be running to access these. If not, you will get a
 friendly error message. Internet access is not necessary either.
 
   * Privoxy main page:
-   
+
         http://config.privoxy.org/
-       
+
     There is a shortcut: http://p.p/ (But it doesn't provide a fall-back to a
     real page, in case the request is not sent through Privoxy)
-   
+
   * Show information about the current configuration, including viewing and
     editing of actions files:
-   
+
         http://config.privoxy.org/show-status
-       
+
   * Show the source code version numbers:
-   
+
         http://config.privoxy.org/show-version
-       
+
   * Show the browser's request headers:
-   
+
         http://config.privoxy.org/show-request
-       
+
   * Show which actions apply to a URL and why:
-   
+
         http://config.privoxy.org/show-url-info
-       
+
   * Toggle Privoxy on or off. In this case, "Privoxy" continues to run, but
     only as a pass-through proxy, with no actions taking place:
-   
+
         http://config.privoxy.org/toggle
-       
+
     Short cuts. Turn off, then on:
-   
+
         http://config.privoxy.org/toggle?set=disable
-       
+
         http://config.privoxy.org/toggle?set=enable
-       
-These may be bookmarked for quick reference. See next. 
+
+These may be bookmarked for quick reference. See next.
 
 -------------------------------------------------------------------------------
 
@@ -4241,18 +4681,18 @@ bar (IE) or the "Personal Toolbar" (Netscape), and run them with a single
 click.
 
   * Privoxy - Enable
-   
+
   * Privoxy - Disable
-   
+
   * Privoxy - Toggle Privoxy (Toggles between enabled and disabled)
-   
+
   * Privoxy- View Status
-   
+
   * Privoxy - Submit Actions File Feedback
-   
+
   * Privoxy - Why?
-   
-Credit: The site which gave us the general idea for these bookmarklets is 
+
+Credit: The site which gave us the general idea for these bookmarklets is
 www.bookmarklets.com. They have more information about bookmarklets.
 
 -------------------------------------------------------------------------------
@@ -4265,40 +4705,40 @@ requested by your browser and Privoxy is on duty:
   * First, your web browser requests a web page. The browser knows to send the
     request to Privoxy, which will in turn, relay the request to the remote web
     server after passing the following tests:
-   
+
   * Privoxy traps any request for its own internal CGI pages (e.g http://p.p/)
     and sends the CGI page back to the browser.
-   
+
   * Next, Privoxy checks to see if the URL matches any "+block" patterns. If
     so, the URL is then blocked, and the remote web server will not be
     contacted. "+handle-as-image" is then checked and if it does not match, an
     HTML "BLOCKED" page is sent back. Otherwise, if it does match, an image is
     returned. The type of image depends on the setting of "+set-image-blocker"
     (blank, checkerboard pattern, or an HTTP redirect to an image elsewhere).
-   
+
   * Untrusted URLs are blocked. If URLs are being added to the trust file, then
     that is done.
-   
+
   * If the URL pattern matches the "+fast-redirects" action, it is then
     processed. Unwanted parts of the requested URL are stripped.
-   
+
   * Now the rest of the client browser's request headers are processed. If any
     of these match any of the relevant actions (e.g. "+hide-user-agent", etc.),
     headers are suppressed or forged as determined by these actions and their
     parameters.
-   
+
   * Now the web server starts sending its response back (i.e. typically a web
     page and related data).
-   
+
   * First, the server headers are read and processed to determine, among other
     things, the MIME type (document type) and encoding. The headers are then
-    filtered as determined by the "+crunch-incoming-cookies", 
+    filtered as determined by the "+crunch-incoming-cookies",
     "+session-cookies-only", and "+downgrade-http-version" actions.
-   
+
   * If the "+kill-popups" action applies, and it is an HTML or JavaScript
     document, the popup-code in the response is filtered on-the-fly as it is
     received.
-   
+
   * If a "+filter" or "+deanimate-gifs" action applies (and the document type
     fits the action), the rest of the page is read into memory (up to a
     configurable limit). Then the filter rules (from default.filter) are
@@ -4307,17 +4747,17 @@ requested by your browser and Privoxy is on duty:
     are reduced to either the first or last frame, depending on the action
     setting.The entire page, which is now filtered, is then sent by Privoxy
     back to your browser.
-   
+
     If neither "+filter" or "+deanimate-gifs" matches, then Privoxy passes the
     raw data through to the client browser as it becomes available.
-   
+
   * As the browser receives the now (probably filtered) page content, it reads
     and then requests any URLs that may be embedded within the page source,
     e.g. ad images, stylesheets, JavaScript, other HTML documents (e.g.
     frames), sounds, etc. For each of these objects, the browser issues a new
     request. And each such request is in turn processed as above. Note that a
     complex web page may have many such embedded URLs.
-   
+
 -------------------------------------------------------------------------------
 
 14.4. Anatomy of an Action
@@ -4352,50 +4792,51 @@ and grab the URL.
 
 Let's try an example, google.com, and look at it one section at a time:
 
- Matches for http://google.com:                                                
-                                                                               
- In file: default.action [ View ] [ Edit ]                                     
-                                                                               
-{-add-header                                                                   
- -block                                                                        
- -crunch-outgoing-cookies                                                      
- -crunch-incoming-cookies                                                      
- +deanimate-gifs{last}                                                         
- -downgrade-http-version                                                       
- +fast-redirects                                                               
- -filter{popups}                                                               
- -filter{fun}                                                                  
- -filter{shockwave-flash}                                                      
- -filter{crude-parental}                                                       
- +filter{html-annoyances}                                                      
- +filter{js-annoyances}                                                        
- +filter{content-cookies}                                                      
- +filter{webbugs}                                                              
- +filter{refresh-tags}                                                         
- +filter{nimda}                                                                
- +filter{banners-by-size}                                                      
- +hide-forwarded-for-headers                                                   
- +hide-from-header{block}                                                      
- +hide-referer{forge}                                                          
- -hide-user-agent                                                              
- -handle-as-image                                                              
- -kill-popups                                                                  
- -limit-connect                                                                
- +prevent-compression                                                          
- -send-vanilla-wafer                                                           
- -send-wafer                                                                   
- +session-cookies-only                                                         
- +set-image-blocker{pattern} }                                                 
-/                                                                              
-                                                                               
- { -session-cookies-only }                                                     
- .google.com                                                                   
-                                                                               
- { -fast-redirects }                                                           
- .google.com                                                                   
-                                                                               
-In file: user.action [ View ] [ Edit ]                                         
-(no matches in this file)                                                      
+ Matches for http://google.com:
+
+ In file: default.action [ View ] [ Edit ]
+
+{-add-header
+ -block
+ -crunch-outgoing-cookies
+ -crunch-incoming-cookies
+ +deanimate-gifs{last}
+ -downgrade-http-version
+ +fast-redirects
+ -filter{popups}
+ -filter{fun}
+ -filter{shockwave-flash}
+ -filter{crude-parental}
+ +filter{html-annoyances}
+ +filter{js-annoyances}
+ +filter{content-cookies}
+ +filter{webbugs}
+ +filter{refresh-tags}
+ +filter{nimda}
+ +filter{banners-by-size}
+ +hide-forwarded-for-headers
+ +hide-from-header{block}
+ +hide-referer{forge}
+ -hide-user-agent
+ -handle-as-image
+ -kill-popups
+ -limit-connect
+ +prevent-compression
+ -send-vanilla-wafer
+ -send-wafer
+ +session-cookies-only
+ +set-image-blocker{pattern} }
+/
+
+ { -session-cookies-only }
+ .google.com
+
+ { -fast-redirects }
+ .google.com
+
+In file: user.action [ View ] [ Edit ]
+(no matches in this file)
+
 
 This tells us how we have defined our "actions", and which ones match for our
 example, "google.com". The first listing is any matches for the standard.action
@@ -4421,54 +4862,56 @@ actions defined somewhere in the lower part of our default.action file, and
 Then, for our user.action file, we again have no hits.
 
 And finally we pull it all together in the bottom section and summarize how
-Privoxy is applying all its "actions" to "google.com": 
-
- Final results:                                                                
-                                                                               
- -add-header                                                                   
- -block                                                                        
- -crunch-outgoing-cookies                                                      
- -crunch-incoming-cookies                                                      
- +deanimate-gifs{last}                                                         
- -downgrade-http-version                                                       
- -fast-redirects                                                               
- -filter{popups}                                                               
- -filter{fun}                                                                  
- -filter{shockwave-flash}                                                      
- -filter{crude-parental}                                                       
- +filter{html-annoyances}                                                      
- +filter{js-annoyances}                                                        
- +filter{content-cookies}                                                      
- +filter{webbugs}                                                              
- +filter{refresh-tags}                                                         
- +filter{nimda}                                                                
- +filter{banners-by-size}                                                      
- +hide-forwarded-for-headers                                                   
- +hide-from-header{block}                                                      
- +hide-referer{forge}                                                          
- -hide-user-agent                                                              
- -handle-as-image                                                              
- -kill-popups                                                                  
- -limit-connect                                                                
- +prevent-compression                                                          
- -send-vanilla-wafer                                                           
- -send-wafer                                                                   
- -session-cookies-only                                                         
- +set-image-blocker{pattern}                                                   
+Privoxy is applying all its "actions" to "google.com":
+
+ Final results:
+
+ -add-header
+ -block
+ -crunch-outgoing-cookies
+ -crunch-incoming-cookies
+ +deanimate-gifs{last}
+ -downgrade-http-version
+ -fast-redirects
+ -filter{popups}
+ -filter{fun}
+ -filter{shockwave-flash}
+ -filter{crude-parental}
+ +filter{html-annoyances}
+ +filter{js-annoyances}
+ +filter{content-cookies}
+ +filter{webbugs}
+ +filter{refresh-tags}
+ +filter{nimda}
+ +filter{banners-by-size}
+ +hide-forwarded-for-headers
+ +hide-from-header{block}
+ +hide-referer{forge}
+ -hide-user-agent
+ -handle-as-image
+ -kill-popups
+ -limit-connect
+ +prevent-compression
+ -send-vanilla-wafer
+ -send-wafer
+ -session-cookies-only
+ +set-image-blocker{pattern}
+
 
 Notice the only difference here to the previous listing, is to "fast-redirects"
 and "session-cookies-only".
 
 Now another example, "ad.doubleclick.net":
 
- { +block +handle-as-image }                                                   
-  .ad.doubleclick.net                                                          
-                                                                               
- { +block +handle-as-image }                                                   
-  ad*.                                                                         
-                                                                               
- { +block +handle-as-image }                                                   
-  .doubleclick.net                                                             
+ { +block +handle-as-image }
+  .ad.doubleclick.net
+
+ { +block +handle-as-image }
+  ad*.
+
+ { +block +handle-as-image }
+  .doubleclick.net
+
 
 We'll just show the interesting part here, the explicit matches. It is matched
 three different times. Each as an "+block +handle-as-image", which is the
@@ -4480,55 +4923,57 @@ Any one of these would have done the trick and blocked this as an unwanted
 image. This is unnecessarily redundant since the last case effectively would
 also cover the first. No point in taking chances with these guys though ;-)
 Note that if you want an ad or obnoxious URL to be invisible, it should be
-defined as "ad.doubleclick.net" is done here -- as both a "+block" and an 
+defined as "ad.doubleclick.net" is done here -- as both a "+block" and an
 "+handle-as-image". The custom alias "+imageblock" just simplifies the process
 and make it more readable.
 
 One last example. Let's try "http://www.rhapsodyk.net/adsl/HOWTO/". This one is
 giving us problems. We are getting a blank page. Hmmm ...
 
- Matches for http://www.rhapsodyk.net/adsl/HOWTO/:                             
-                                                                               
- In file: default.action [ View ] [ Edit ]                                     
-                                                                               
- {-add-header                                                                  
-  -block                                                                       
-  -crunch-incoming-cookies                                                     
-  -crunch-outgoing-cookies                                                     
-  +deanimate-gifs                                                              
-  -downgrade-http-version                                                      
-  +fast-redirects                                                              
-  +filter{html-annoyances}                                                     
-  +filter{js-annoyances}                                                       
-  +filter{kill-popups}                                                         
-  +filter{webbugs}                                                             
-  +filter{nimda}                                                               
-  +filter{banners-by-size}                                                     
-  +filter{hal}                                                                 
-  +filter{fun}                                                                 
-  +hide-forwarded-for-headers                                                  
-  +hide-from-header{block}                                                     
-  +hide-referer{forge}                                                         
-  -hide-user-agent                                                             
-  -handle-as-image                                                             
-  +kill-popups                                                                 
-  +prevent-compression                                                         
-  -send-vanilla-wafer                                                          
-  -send-wafer                                                                  
-  +session-cookies-only                                                        
-  +set-image-blocker{blank} }                                                  
-   /                                                                           
-                                                                               
- { +block +handle-as-image }                                                   
-  /ads                                                                         
+ Matches for http://www.rhapsodyk.net/adsl/HOWTO/:
+
+ In file: default.action [ View ] [ Edit ]
+
+ {-add-header
+  -block
+  -crunch-incoming-cookies
+  -crunch-outgoing-cookies
+  +deanimate-gifs
+  -downgrade-http-version
+  +fast-redirects
+  +filter{html-annoyances}
+  +filter{js-annoyances}
+  +filter{kill-popups}
+  +filter{webbugs}
+  +filter{nimda}
+  +filter{banners-by-size}
+  +filter{hal}
+  +filter{fun}
+  +hide-forwarded-for-headers
+  +hide-from-header{block}
+  +hide-referer{forge}
+  -hide-user-agent
+  -handle-as-image
+  +kill-popups
+  +prevent-compression
+  -send-vanilla-wafer
+  -send-wafer
+  +session-cookies-only
+  +set-image-blocker{blank} }
+   /
+
+ { +block +handle-as-image }
+  /ads
+
 
 Ooops, the "/adsl/" is matching "/ads"! But we did not want this at all! Now we
 see why we get the blank page. We could now add a new action below this that
 explicitly does not block ("{-block}") paths with "adsl". There are various
 ways to handle such exceptions. Example:
 
- { -block }                                                                    
-  /adsl                                                                        
+ { -block }
+  /adsl
+
 
 Now the page displays ;-) Be sure to flush your browser's caches when making
 such changes. Or, try using Shift+Reload.
@@ -4536,8 +4981,9 @@ such changes. Or, try using Shift+Reload.
 But now what about a situation where we get no explicit matches like we did
 with:
 
- { +block +handle-as-image }                                                   
- /ads                                                                          
+ { +block +handle-as-image }
+ /ads
+
 
 That actually was very telling and pointed us quickly to where the problem was.
 If you don't get this kind of match, then it means one of the default rules in
@@ -4547,18 +4993,20 @@ cause would be one of the "{+filter}" actions. These tend to be harder to
 troubleshoot. Try adding the URL for the site to one of aliases that turn off
 "+filter":
 
- {shop}                                                                        
- .quietpc.com                                                                  
- .worldpay.com   # for quietpc.com                                             
- .jungle.com                                                                   
- .scan.co.uk                                                                   
- .forbes.com                                                                   
+ {shop}
+ .quietpc.com
+ .worldpay.com   # for quietpc.com
+ .jungle.com
+ .scan.co.uk
+ .forbes.com
+
 
 "{shop}" is an "alias" that expands to "{ -filter -session-cookies-only }". Or
-you could do your own exception to negate filtering: 
+you could do your own exception to negate filtering:
+
+ {-filter}
+ .forbes.com
 
- {-filter}                                                                     
- .forbes.com                                                                   
 
 This would turn off all filtering for that site. This would probably be most
 appropriately put in user.action, for local site exceptions.
diff --git a/doc/webserver/actions/index.php b/doc/webserver/actions/index.php
index 65ca715a..c6ba857c 100755
--- a/doc/webserver/actions/index.php
+++ b/doc/webserver/actions/index.php
@@ -2,15 +2,36 @@
 
  
 
-
-Privoxy not running
-    
+
+
+  Privoxy is not being used
+  
+  
+  
 
 
 
 
-

Privoxy isn't working

- -

If you were redirected to this page, it means that you aren't using -Privoxy.   Please check your browser settings.

- -

Until version 2.9.13, Privoxy was also known as Internet +

Privoxy is not being used

+ +

The fact that you are reading this page shows that Privoxy was +not used in the process of accessing it. Had the request been +made through Privoxy, it would have been intercepted and you +would be looking at Privoxy's web-based user interface now.

+ +

So what went wrong? Chances are (in this order) that:

+ +
    +
  • this page is in your browser's cache. You've once been here +before starting to use Privoxy, and now your browser thinks that +it already knows the content of this page. Hence it doesn't request +a fresh copy.

    +

    Force your browser to do that. With most browsers, clicking "reload" +while holding down the shift key (shift-reloading) should suffice, but +you might need to manually clear the browser's cache (both memory and +disk cache).

    + +
  • your browser is not set up to use Privoxy.

    +

    Check your browser's proxy settings and make sure that it uses +127.0.0.1, port 8118 (or, if you did a custom configuration, whatever +different values you used).

  • + +
  • when using multiple proxies in a chain, that either the chain +is broken at some point before Privoxy, or that an earlier proxy +serves this page from its cache.

    +

    Shift-reload, clear all caches, and if the problem still persists, +trace the proxy chain starting with your browser's settings. Please +refer to the +forwarding +chapter of the user +manual for details.

  • +
+ +

Until version 2.9.13, Privoxy was also known as Internet Junkbuster. If you recently upgraded, then the web-based interface has moved - it is now at http://config.privoxy.org/ (Short form: p.p -[Privoxy Proxy]).

+[Privoxy Proxy]).

-

Please see the Privoxy home page.

+

If you have read the user +manual and still have trouble, feel free to submit +a support request to get help.

- diff --git a/doc/webserver/default_page.php b/doc/webserver/default_page.php deleted file mode 100644 index 75a4fdcc..00000000 --- a/doc/webserver/default_page.php +++ /dev/null @@ -1,69 +0,0 @@ - - - -SourceForge: Welcome - - - - - - - - - - - -
   - Home | - About | - Partners | - Contact Us
- - - - - - - - - -
- - - VA Linux Systems -
- - - - - - - -
-

-

Welcome to http:///

-

We're Sorry but this Project hasn't yet uploaded their personal webpage yet.
- Please check back soon for updates or visit SourceForge


-
-
- - - - - - - -
- All trademarks and copyrights on this page are properties of their respective owners. Forum comments are owned by the poster. The rest is copyright ©1999-2000 VA Linux Systems, Inc. -
- - - - diff --git a/doc/webserver/developer-manual/coding.html b/doc/webserver/developer-manual/coding.html index ca973e34..fead798d 100644 --- a/doc/webserver/developer-manual/coding.html +++ b/doc/webserver/developer-manual/coding.html @@ -1,11 +1,11 @@ + Coding Guidelines

4. Coding Guidelines

4. Coding Guidelines

4.1. Introduction

4.1. Introduction

This set of standards is designed to make our lives easier. It is developed with the simple goal of helping us keep the "new and improved @@ -100,13 +104,17 @@ CLASS="SECT2" >

4.2. Using Comments

4.2. Using Comments

4.2.1. Comment, Comment, Comment

4.2.1. Comment, Comment, Comment

4.2.2. Use blocks for comments

4.2.2. Use blocks for comments

4.2.3. Keep Comments on their own line

4.2.3. Keep Comments on their own line

4.2.4. Comment each logical step

4.2.4. Comment each logical step

4.2.5. Comment All Functions Thoroughly

4.2.5. Comment All Functions Thoroughly

4.2.6. Comment at the end of braces if the - content is more than one screen length

4.2.6. Comment at the end of braces if the + content is more than one screen length

4.3. Naming Conventions

4.3. Naming Conventions

4.3.1. Variable Names

4.3.1. Variable Names

4.3.2. Function Names

4.3.2. Function Names

4.3.3. Header file prototypes

4.3.3. Header file prototypes

4.3.4. Enumerations, and #defines

4.3.4. Enumerations, and #defines

4.3.5. Constants

4.3.5. Constants

4.4. Using Space

4.4. Using Space

4.4.1. Put braces on a line by themselves.

4.4.1. Put braces on a line by themselves.

4.4.2. ALL control statements should have a - block

4.4.2. ALL control statements should have a + block

4.4.3. Do not belabor/blow-up boolean - expressions

4.4.3. Do not belabor/blow-up boolean + expressions

4.4.4. Use white space freely because it is - free

4.4.4. Use white space freely because it is + free

4.4.5. Don't use white space around structure - operators

4.4.5. Don't use white space around structure + operators

4.4.6. Make the last brace of a function stand - out

4.4.6. Make the last brace of a function stand + out

4.4.7. Use 3 character indentions

4.4.7. Use 3 character indentions

4.5. Initializing

4.5. Initializing

4.5.1. Initialize all variables

4.5.1. Initialize all variables

4.6. Functions

4.6. Functions

4.6.1. Name functions that return a boolean as a - question.

4.6.1. Name functions that return a boolean as a + question.

4.6.2. Always specify a return type for a - function.

4.6.2. Always specify a return type for a + function.

4.6.3. Minimize function calls when iterating by - using variables

4.6.3. Minimize function calls when iterating by + using variables

4.6.4. Pass and Return by Const Reference

4.6.4. Pass and Return by Const Reference

4.6.5. Pass and Return by Value

4.6.5. Pass and Return by Value

4.6.6. Names of include files

4.6.6. Names of include files

4.6.7. Provide multiple inclusion - protection

4.6.7. Provide multiple inclusion + protection

4.6.8. Use `extern "C"` when appropriate

4.6.8. Use `extern "C"` when appropriate

4.6.9. Where Possible, Use Forward Struct - Declaration Instead of Includes

4.6.9. Where Possible, Use Forward Struct + Declaration Instead of Includes

4.7. General Coding Practices

4.7. General Coding Practices

4.7.1. Turn on warnings

4.7.1. Turn on warnings

4.7.2. Provide a default case for all switch - statements

4.7.2. Provide a default case for all switch + statements

4.7.3. Try to avoid falling through cases in a - switch statement.

4.7.3. Try to avoid falling through cases in a + switch statement.

4.7.4. Use 'long' or 'short' Instead of - 'int'

4.7.4. Use 'long' or 'short' Instead of + 'int'

4.7.5. Don't mix size_t and other types

4.7.5. Don't mix size_t and other types

4.7.6. Declare each variable and struct on its - own line.

4.7.6. Declare each variable and struct on its + own line.

4.7.7. Use malloc/zalloc sparingly

4.7.7. Use malloc/zalloc sparingly

4.7.8. The Programmer Who Uses 'malloc' is - Responsible for Ensuring 'free'

4.7.8. The Programmer Who Uses 'malloc' is + Responsible for Ensuring 'free'

4.7.9. Add loaders to the `file_list' structure - and in order

4.7.9. Add loaders to the `file_list' structure + and in order

4.7.10. "Uncertain" new code and/or changes to - existing code, use FIXME

4.7.10. "Uncertain" new code and/or changes to + existing code, use FIXME

4.8. Addendum: Template for files and function - comment blocks:

4.8. Addendum: Template for files and function + comment blocks:

const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 2.3 2002/09/05 02:27:59 hal9 Exp $";
+>const char FILENAME_rcs[] = "$Id: coding.html,v 1.19.2.7 2004/01/31 00:05:44 oes Exp $";
 /*********************************************************************
  *
- * File        :  $Source$
+ * File        :  $Source: /cvsroot/ijbswa/current/doc/webserver/developer-manual/coding.html,v $
  *
  * Purpose     :  (Fill me in with a good description!)
  *
@@ -2273,7 +2367,10 @@ CLASS="PROGRAMLISTING"
  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
  * Revisions   :
- *    $Log$
+ *    $Log: coding.html,v $
+ *    Revision 1.19.2.7  2004/01/31 00:05:44  oes
+ *    Regenerated from sgml source
+ *
  *
  *********************************************************************/
 
@@ -2327,10 +2424,10 @@ WIDTH="100%"
 CLASS="PROGRAMLISTING"
 >#ifndef _FILENAME_H
 #define _FILENAME_H
-#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 2.3 2002/09/05 02:27:59 hal9 Exp $"
+#define FILENAME_H_VERSION "$Id: coding.html,v 1.19.2.7 2004/01/31 00:05:44 oes Exp $"
 /*********************************************************************
  *
- * File        :  $Source$
+ * File        :  $Source: /cvsroot/ijbswa/current/doc/webserver/developer-manual/coding.html,v $
  *
  * Purpose     :  (Fill me in with a good description!)
  *
@@ -2360,7 +2457,10 @@ CLASS="PROGRAMLISTING"
  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
  * Revisions   :
- *    $Log$
+ *    $Log: coding.html,v $
+ *    Revision 1.19.2.7  2004/01/31 00:05:44  oes
+ *    Regenerated from sgml source
+ *
  *
  *********************************************************************/
 
diff --git a/doc/webserver/developer-manual/contact.html b/doc/webserver/developer-manual/contact.html
index 73659918..31383e67 100644
--- a/doc/webserver/developer-manual/contact.html
+++ b/doc/webserver/developer-manual/contact.html
@@ -1,11 +1,11 @@
+
 Contacting the developers, Bug Reporting and Feature Requests

8. Contacting the developers, Bug Reporting and Feature Requests

8. Contacting the developers, Bug Reporting and Feature Requests

We value your feedback. In fact, we rely on it to improve

8.1. Get Support

8.1. Get Support

For casual users, our support forum at +> For casual users, our SourceForgesupport forum at SourceForge is probably best suited:

8.2. Report Bugs

8.2. Report Bugs

Please report all bugs

8.3. Request New Features

8.3. Request New Features

You are welcome to submit ideas on new features or other proposals for improvement through our feature request tracker at @@ -192,7 +200,9 @@ CLASS="SECT2" >

8.4. Report Ads or Other Actions-Related Problems

8.4. Report Ads or Other Actions-Related Problems

Please send feedback on ads that slipped through, innocent images that were blocked, and any other problems relating to the

8.5. Other

8.5. Other

For any other issues, feel free to use the mailing lists. Technically interested users and people who wish to contribute to the project are also welcome on the developers list! diff --git a/doc/webserver/developer-manual/copyright.html b/doc/webserver/developer-manual/copyright.html index e425e346..aae28830 100644 --- a/doc/webserver/developer-manual/copyright.html +++ b/doc/webserver/developer-manual/copyright.html @@ -1,11 +1,11 @@ + Privoxy Copyright, License and History

9. Privoxy Copyright, License and History

9. Privoxy Copyright, License and History

Copyright © 2001, 2002 by Privoxy Developers Copyright © 2001 - 2004 by Privoxy Developers

Some source code is based on code Copyright © 1997 by Anonymous Coders @@ -94,7 +96,9 @@ CLASS="SECT2" >

9.1. License

9.1. License

9.2. History

9.2. History

In the beginning, there was the Privoxy, whose first - stable release, 3.0, was released August, 2002. + stable version, 3.0, was released August, 2002.

The CVS Repository

2. The CVS Repository

2. The CVS Repository

If you intend to help us with programming, documentation or packaging - you will need write access to our holy grail, the CVS repository. - Please read this chapter completely before accessing via CVS. +> If you become part of the active development team, you will eventually + need write access to our holy grail, the CVS repository. One of the + team members will need to set this up for you. Please read + this chapter completely before accessing via CVS.

2.2. Branches

2.2. Branches

Within the CVS repository, there are modules and branches. As - mentioned, the sources are in the currentcurrent

Branches are used to fork a sub-development path from the main trunk. - Within the currentcurrent module where the sources are, there is always at least one from the main trunk devoted to a stable release series. The main trunk is where active development takes place for the next stable series (e.g. 3.2.x). - And for testing bugfixes for the stable series. Just prior to each - stable series (e.g. 3.0.x), a branch is created just for stable series - releases (e.g. 3.0.0 -> 3.0.1 -> 3.0.2, etc). Once the initial stable - release of any stable branch has taken place, this branch is - only used for bugfixes, which have had prior - testing before being committed to CVS. (See , which have + had prior testing before being committed to CVS. (See Version Numbers below for details on versioning.)

This will result in at least two active branches, which means there may + be occasions that require the same (or similar) item to be + checked into to two different places (assuming its a bugfix and needs + fixing in both the stable and unstable trees). This also means that in + order to have access to both trees, both will have to be checked out + separately. Use the cvs -r flag to check out a + branch, e.g: cvs co -r v_3_0_branch current. +

2.3. CVS Commit Guidelines

2.3. CVS Commit Guidelines

The source tree is the heart of every software project. Every effort must be made to ensure that it is readable, compilable and consistent at all @@ -255,10 +278,13 @@ TARGET="_top" >

Stable branches are handled with decidedly more care, especially after - the initial *.*.0 release, and we are just in bugfix mode. In addition - to the above, the below applies only to the stable branch (currently - the v_3_0_branchpoint branch): +> Stable branches are handled with more care, especially after the + initial *.*.0 release, and we are just in bugfix mode. In addition to + the above, the below applies only to the stable branch (currently the + v_3_0_branch branch):

@@ -173,18 +200,18 @@ CLASS="APPLICATION" > In summary, the main CVS trunk is the development branch where new features are being worked on for the next stable series. This should almost always be where the most activity takes place. There is always at - least one stable branch from the trunk, e.g now it is 3.0, which is only - used to release stable versions. Once the initial .0 release of the - stable branch has been done, then as a rule, only bugfixes that have had - prior testing should be committed to the stable branch. At that point, it - is mostly "hands off". Once there are enough bugfixes to - justify a new release, the version of this branch is again incremented - Example: 3.0.0 -> 3.0.1 -> 3.0.2, etc are all stable releases from within - the stable branch. 3.1.x is currently the main trunk, and where work on - 3.2.x is taking place. If any questions, please post to the devel list + least one stable branch from the trunk, e.g now it is + 3.0, which is only used to release stable versions. + Once the initial *.0 release of the stable branch has been done, then as a + rule, only bugfixes that have had prior testing should be committed to + the stable branch. Once there are enough bugfixes to justify a new + release, the version of this branch is again incremented Example: 3.0.0 + -> 3.0.1 -> 3.0.2, etc are all stable releases from within the stable + branch. 3.1.x is currently the main trunk, and where work on 3.2.x is + taking place. If any questions, please post to the devel list before committing to a stable branch! - +

Developers should remember too that if they commit a bugfix to the stable + branch, this will more than likely require a separate submission to the + main trunk, since these are separate development trees within CVS. If you + are working on both, then this would require at least two separate check + outs (i.e main trunk, and the stable release branch, + which is v_3_0_branch at the moment).

6.2. Before the Release: Freeze

6.2. Before the Release: Freeze

The following link from the main page since we need to keep manuals for various versions available). The CGI pages will link to something like - http://privoxy.org/$(VERSION)/user-manual/http://privoxy.org/$(VERSION)/user-manual/. This will need to be updated for each new release. There is no Makefile target for this at this time!!! It needs to be done manually. @@ -383,7 +428,9 @@ CLASS="SECT2" >

6.3. Building and Releasing the Packages

6.3. Building and Releasing the Packages

Now the individual packages can be built and released. Note that for GPL reasons the first package to be released is always the source tarball. @@ -446,7 +493,9 @@ CLASS="SECT3" >

6.3.1. Note on Privoxy Packaging

6.3.1. Note on Privoxy Packaging

Please keep these general guidelines in mind when putting together your package. These apply to

6.3.2. Source Tarball

6.3.2. Source Tarball

First,

6.3.3. SuSE, Conectiva or Red Hat RPM

6.3.3. SuSE, Conectiva or Red Hat RPM

In following text, replace In following text, replace distdist with either privoxy-distdist.specdistdist which is built from version X.Y.Z. Check the

  make   make distdist-dist
  make   make dist-upload dist-upload rpm_packagerevrpm_packagerev

where where rpm_packagerevrpm_packagerev is the RPM release number as determined above. Go to the displayed URL and release the file publicly on Sourceforge. @@ -916,7 +955,9 @@ CLASS="SECT3" >

6.3.4. OS/2

6.3.4. OS/2

First,

6.3.5. Solaris

6.3.5. Solaris

Login to Sourceforge's compilefarm via ssh:

6.3.6. Windows

6.3.6. Windows

You should ensure you have the latest version of Cygwin (from

6.3.7. Debian

6.3.7. Debian

First,

  debchange -v 3.1.1-alpha-1 "New upstream version"
debchange -v 3.0.3-stable-1 "New upstream version"
This will create ../privoxy_3.1.1-alpha-1_i386.deb../privoxy_3.0.3-stable-1_i386.deb which can be uploaded. To upload the package to Sourceforge, simply issue @@ -1290,7 +1337,9 @@ CLASS="SECT3" >

6.3.8. Mac OSX

6.3.8. Mac OSX

First,

6.3.9. FreeBSD

6.3.9. FreeBSD

Login to Sourceforge's compile-farm via ssh:

6.3.10. HP-UX 11

6.3.10. HP-UX 11

First,

6.3.11. Amiga OS

6.3.11. Amiga OS

First,

6.3.12. AIX

6.3.12. AIX

Login to Sourceforge's compilefarm via ssh:

6.4. Uploading and Releasing Your Package

6.4. Uploading and Releasing Your Package

After the package is ready, it is time to upload it to SourceForge, and go through the release steps. The upload @@ -1654,17 +1713,17 @@ TARGET="_top" >

  • user: user: anonymousanonymous

  • password: password: ijbswa-developers@lists.sourceforge.netijbswa-developers@lists.sourceforge.net

  • http://sourceforge.net/project/admin/editpackages.php?group_id=11118, making sure you are logged in. Find your target platform in the - second column, and click Add ReleaseAdd Release. You will then need to create a new release for your package, using the format - of $VERSION ($CODE_STATUS)$VERSION ($CODE_STATUS), e.g. 3.1.1 +>3.0.3 (beta). @@ -1727,13 +1786,13 @@ CLASS="QUOTE"

    If you have made errors, or need to make changes, you can go through - essentially the same steps, but select Edit ReleaseEdit Release, - instead of Add ReleaseAdd Release.

    6.5. After the Release

    6.5. After the Release

    When all (or: most of the) packages have been uploaded and made available, send an email to the Quickstart to Privoxy Development

    Privoxy Developer Manual
    PrevNext

    3. Quickstart to Privoxy Development

    You'll need an account on Sourceforge to support our + development. Mail your ID to the list and wait until a + project manager has added you. +

    For the time being (read, this section is under construction), please + refer to the extensive comments in the source code. +


    PrevHomeNext
    Introduction The CVS Repository
    \ No newline at end of file diff --git a/doc/webserver/developer-manual/seealso.html b/doc/webserver/developer-manual/seealso.html index d18d3ec1..c6440994 100644 --- a/doc/webserver/developer-manual/seealso.html +++ b/doc/webserver/developer-manual/seealso.html @@ -1,11 +1,11 @@ + See also

    10. See also

    10. See also

    Other references and sites of interest to Testing Guidelines

    5. Testing Guidelines

    5. Testing Guidelines

    To be filled.

    5.1. Testplan for releases

    5.1. Testplan for releases

    Explain release numbers. major, minor. developer releases. etc. @@ -154,7 +158,9 @@ CLASS="SECT2" >

    5.2. Test reports

    5.2. Test reports

    Please submit test reports only with the Update the Webserver

    7. Update the Webserver

    7. Update the Webserver

    The webserver should be updated at least with each stable release. When updating, please follow these steps to make sure that no broken links, diff --git a/doc/webserver/faq/configuration.html b/doc/webserver/faq/configuration.html index 2703bd32..73ff78cb 100644 --- a/doc/webserver/faq/configuration.html +++ b/doc/webserver/faq/configuration.html @@ -1,11 +1,11 @@ + Configuration

    3. Configuration

    3. Configuration

    3.1. Where can I get updated Actions Files?

    3.1. Where can I get updated Actions Files?

    Based on your feedback and the continuing development, updated actions files will be made available on the

    3.2. Can I use my old config files?

    3.2. Can I use my old config files?

    The syntax, number, and purpose of configuration files has substantially changed from

    3.3. What is an 3.3. What is an "actions" file?

    file?

    user.action

    .

    3.4. The 3.4. The "actions" concept confuses me. Please list some of these "actions".

    .

    For a comprehensive discussion of the actions concept, please refer to the

    3.5. How are actions files configured? What is the easiest -way to do this?

    3.5. How are actions files configured? What is the easiest +way to do this?

    Actions files are just text files in a special syntax and can be edited with a text editor. But probably the easiest way is to access @@ -250,11 +262,13 @@ CLASS="SECT2" >

    3.6. There are several different 3.6. There are several different "actions" files. What are -the differences?

    As of

    3.7. How can I make my Yahoo/Hotmail/GMX account work?

    3.7. How can I make my Yahoo/Hotmail/GMX account work?

    The default configuration shouldn't impact the usability of any of these services. It will, however, make all cookies temporary, so that your browser will forget your @@ -361,7 +377,8 @@ CLASS="SECT2" >

    3.8. What's the difference between the +NAME="CONFIGFILES" +>3.8. What's the difference between the "Cautious""Medium" and "Advanced" defaults?

    "Adventuresome" defaults?

    Configuring Privoxy is not entirely trivial. To help you get - started, we provide you with three different default action is not entirely trivial. To + help you get started, we provide you with three different default action + "packages" in - the web based actions file editor at "profiles" in the web based actions file editor at http://config.privoxy.org/show-status. - The following table shows you, which of the most important features are enabled in each - configuration: + See the User + Manual for a list of actions, and how the default + profiles are set.

    Where the defaults are likely to break some sites, exceptions for known popular "problem" sites are included, but in - general, the more aggressive your default settings are, the more - exceptions you will have to make later. See the user manual for a more - deatiled discussion.

    User Manual + for a more deatiled discussion.

    It should be noted that the "Adventuresome" profile (formerly known + as the "Advanced" profile) is not only more + aggressive, but also includes fun and, extreme usage of most of + Privoxy's features. Use at your own risk!

    3.9. Why can I change the configuration -with a browser? Does that not raise security issues?

    3.9. Why can I change the configuration +with a browser? Does that not raise security issues?

    It may seem strange that regular users can edit the config files with their browsers, although the whole ""enable-edit-actions - 0" and ""enable-remote-toggle - 0" in the

    3.10. What is the 3.10. What is the default.filter file? What is a "filter"?

    ?

    The filterfilter action in one of the actions files. Filtering is automatically @@ -881,32 +602,34 @@ CLASS="SECT2" >

    3.11. How can I set up 3.11. How can I set up Privoxy to act as a proxy for my - LAN?

    By default, Privoxy only responds to requests - from 127.0.0.1127.0.0.1 (localhost). To have it act as a server for a network, this needs to be changed in the main configuration file. Look for - the listen-address option, which may be commented out with a . Configure all browsers on the network then to use this address and port number.

    Alternately, you can have Privoxy listen on + all available interfaces:

      listen-address    :8118

    And then use Privoxy's + permit-access + feature to limit connections. A firewall in this situation is recommended + as well.

    The above steps should be the same for any TCP network, regardless of + operating system.

    If you run Privoxy

    3.12. Instead of ads, now I get a checkerboard pattern. I don't want to see anything.

    3.12. Instead of ads, now I get a checkerboard pattern. I don't want to see anything.

    The replacement for blocked images can be controlled with the set-image-blockerset-image-blocker action. You have the choice of a checkerboard pattern, a transparent 1x1 GIF @@ -972,13 +732,13 @@ CLASS="QUOTE" >"blank"), or a redirect to a custom image of your choice. Note that this choice only has effect for images which are blocked as images, i.e. - whose URLs match both a handle-as-image and block action.

    If you want to see nothing, then change the set-image-blockerset-image-blocker action to

    3.13. Why would anybody want to see a checkerboard pattern?

    3.13. Why would anybody want to see a checkerboard pattern?

    Remember that

    3.14. I see some images being replaced by a text -instead of the checkerboard image. Why and how do I get rid of this?

    3.14. I see some images being replaced by a text +instead of the checkerboard image. Why and how do I get rid of this?

    This happens when the banners are not embedded in the HTML code of the page itself, but in separate HTML (sub)documents that are loaded into (i)frames @@ -1074,44 +838,43 @@ CLASS="SECT2" >

    3.15. Can 3.15. Can Privoxy run as a service -on Win2K/NT?

    Yes, it can run as a system service using srvany.exe. - The only catch is that this will effectively disable the - Privoxy icon (and its menu!) in the taskbar. You can have - one or the other, but not both at this time :(

    There is a pending feature request for this functionality. See the discussion - at http://sourceforge.net/tracker/?func=detail&atid=361118&aid=485617&group_id=11118, - for details, and a sample configuration.

    , + for details, and a sample configuration.

    Version 3.0.1 fixes the problem where the icon and menu where not available + in the taskbar for this usage.

    3.19. How can I configure Privoxy for use with Outlook + Express?

    Outlook Express uses Internet Explorer + components to both render HTML, and fetch any HTTP requests that may be embedded in an HTML email. + So however you have Privoxy configured to work + with IE, this configuration should automatically be shared.

    3.20. How can I have separate rules just for HTML mail?

    The short answer is, you can't. Privoxy has no way + of knowing which particular application makes a request, so there is no way to + distinguish between web pages and HTML mail. + Privoxy just blindly proxies all requests. In the + case of Outlook Express (see above), OE uses + IE anyway, and there is no way for Privoxy to ever + be able to distinguish between them (nor could any other proxy type application for + that matter).

    For a good discussion of some of the issues involved (including privacy and + security issues), see + http://sourceforge.net/tracker/?func=detail&atid=211118&aid=629518&group_id=11118.

    3.21. How can I allow permanent cookies for my trusted sites?

    There are several actions that relate to cookies. The default behavior is to + allow only "session cookies", which means the cookies only last + for the current browser session. This eliminates most kinds of abuse related + to cookies. But there may be cases where we want cookies to last.

    To disable all cookie actions, so that cookies are allowed unrestricted, + both in and out, for example.com:

     { -crunch-incoming-cookies -crunch-outgoing-cookies -session-cookies-only -filter{content-cookies} }
    +  .example.com

    Place the above in user.action. Note some of these may + be off by default anyway, so this might be redundant, but there is no harm + being explicit in what you want to happen. user.action + includes an alias for this situation, called + allow-cookies.

    General Information

    1. General Information

    1. General Information

    1.2. Why 1.2. Why "Privoxy"? Why a name change at all?

    ? Why a name change at all?

    The developers also believed that there are so many changes from the original code, that it was time to make a clean break from the past and make - a name in their own right, especially now with the pending - release of version 3.0.

    1.8. My browser does the same things as PrivoxyPrivoxy at all?

    at all?

    Modern browsers do indeed have

    1.8. Is there is a license or fee? What about a -warranty? Registration?

    1.9. Is there is a license or fee? What about a +warranty? Registration?

    1.9. I would like to help you, what do I do?

    1.10. I would like to help you, what do I do?

    1.9.1. Money Money Money

    1.10.1. Money Money Money

    We, of course, welcome donations and could use money for domain registering, buying software to test

    1.9.2. Software

    1.10.2. Software

    If you are a vendor of a web-related software like a browser, web server or proxy, and would like us to ensure that

    1.9.3. You want to work with us?

    1.10.3. You want to work with us?

    Well, helping the team is always a good idea. We welcome new developers, packaging gurus or documentation writers. Simply Privoxy Frequently Asked Questions

    Privoxy Frequently Asked Questions

    Privoxy Frequently Asked Questions

    Copyright © 2001, 2002 by +> © 2001-2004 by

    $Id: faq.sgml,v 2.2 2002/09/05 04:25:05 hal9 Exp $

    $Id: index.html,v 1.15.2.10 2004/01/31 00:05:43 oes Exp $

    This FAQ gives quick answers to frequently asked questions about Privoxy is a web proxy with advanced filtering - capabilities for protecting privacy, filtering web page content, managing + capabilities for protecting privacy, modifying web page content, managing cookies, controlling access, and removing ads, banners, pop-ups and other obnoxious Internet junk. (tm).

    Please note that this document is constantly evolving. This copy represents - the state at the release of version 3.1.1. + the state at the release of version 3.0.3. You can find the latest version of the document at

    1.7. Will I have to configure Privoxy + before I can use it?
    1.8. My browser does the same things as at all?
    1.8. 1.9. Is there is a license or fee? What about a warranty? Registration?
    1.9. 1.10. I would like to help you, what do I do?
    1.9.1. 1.10.1. Money Money Money
    1.9.2. 1.10.2. Software
    1.9.3. 1.10.3. You want to work with us?
    2.3. Can I use Privoxy with my email client?
    2.4. Can I install ?
    2.4. 2.5. I just installed Privoxy
    2.5. 2.6. What is the proxy address of ?
    2.6. 2.7. I just installed , and nothing is happening. All the ads are there. What's wrong?
    2.8. I get a "Privoxy is not being used" dummy page although +Privoxy is running and being used.
    3.3. What is an "actions"
    3.5. How are actions files configured? What is the easiest way to do this?
    3.6. There are several different "actions""Medium" and "Advanced""Adventuresome" defaults?
    3.10. What is the default.filter
    3.11. How can I set up Privoxy
    3.12. Instead of ads, now I get a checkerboard pattern. I don't want to see anything.
    3.13. Why would anybody want to see a checkerboard pattern?
    3.14. I see some images being replaced by a text instead of the checkerboard image. Why and how do I get rid of this?
    "transparent" proxy?
    3.19. How can I configure Privoxy for use with Outlook + Express?
    3.20. How can I have separate rules just for HTML mail?
    3.21. How can I allow permanent cookies for my trusted sites?
    4.1. How much does Privoxy
    4.7. Can Privoxy
    4.8. Might some things break because header information or content is being altered?
    4.9. Can Privoxy
    4.10. What about as a firewall? Can Privoxy
    4.11. I have large empty spaces / a checkerboard pattern now where ads used to be. Why?
    4.12. How can Privoxy
    4.13. Privoxy
    4.18. I just downloaded a Perl script, and Privoxy +altered it! Yikes, what is wrong!
    4.19. Where can I find more information about and related issues?
    4.20. I've noticed that Privoxy changes "Microsoft" to +"MicroSuck"! Why are you manipulating my browsing?
    5.1. I just upgraded and am getting "connection refused"
    5.2. I just added a new rule, but the steenkin ad is still getting through. How?
    5.8. In Mac OSX Panther (10.3), images often fail to load and/or I + experience random delays in page loading. I'm using + localhost as my browser's proxy setting.
    5.9. I get a completely blank page at one site. <html><body></body></html>.. Without + Privoxy the page loads fine.
    5.10. Why am I getting a 503 Error (WSAECONNREFUSED) on every page?
    5.11. My logs show many "Unable to get my own hostname" lines. +Why?
    5.12. When I try to launch Privoxy, I get an +error message "port 8118 is already in use" (or similar wording). +Why?
    5.13. Pages with UTF-8 fonts are garbled.
    5.14. Why are binary files (such as images) corrupted when Privoxy + is used?
    5.15. What is the "demoronizer" and why is it there?
    5.16. Why do I keep seeing "PrivoxyWindowOpen()" in raw source code?
    7.1. License
    7.2. History
    Installation

    2. Installation

    2. Installation

    2.1. Which browsers are supported by 2.1. Which browsers are supported by Privoxy?

    ?

    Any browser that can be configured to use a proxy, which should be virtually all browsers. Direct browser support is not necessary @@ -98,15 +102,17 @@ CLASS="SECT2" >

    2.2. Which operating systems are supported?

    2.2. Which operating systems are supported?

    At present, Privoxy is known to run on - Windows(95, 98, ME, 2000, XP), Linux (RedHat, SuSE, Debian, Conectiva, Gentoo, - Slackware), Mac OSX, OS/2, AmigaOS, BeOS, FreeBSD, NetBSD, Solaris, and more - flavors of Unix.

    But any operating system that runs TCP/IP, can conceivably take advantage of

    2.3. Can I install +NAME="EMAIL-CLIENT" +>2.3. Can I use Privoxy with my email client?

    As long as there is some way to set a HTTP proxy for the client, then yes, + any application can be used, whether it is strictly speaking a + "browser" or not. Though this may not be the best approach for + dealing with some of the common abuses of HTML in email. See How can I configure Privoxy + with Outlook Express? below for more on + this.

    Be aware that HTML email presents a number of unique security and privacy + related issues, that can require advanced skills to overcome. The developers + recommend using email clients that can be configured to convert HTML to plain + text for these reasons.

    2.5. What is the proxy address of 2.6. What is the proxy address of Privoxy?

    ?

    If you set up the Privoxy to run on the computer you browse from (rather than your ISP's server or some - networked computer on a LAN), the proxy will be on 127.0.0.1127.0.0.1 (sometimes referred to as Privoxy does not currently handle - protocols such as FTP, SMTP, IM, IRC, ICQ, or other Internet - protocols. + any other protocols such as FTP, SMTP, IM, IRC, ICQ, etc.

    2.8. I get a "Privoxy is not being used" dummy page although +Privoxy is running and being used.

    First, make sure that Privoxy is really running and + being used by visiting http://p.p/. You + should see the Privoxy main page. If not, see + the chapter + on starting Privoxy in the + user manual.

    Now if http://p.p/ works for you, but + other parts of Privoxy's web interface show + the dummy page, your browser has cached a redirection it encountered before + Privoxy was being used. You need to clear your + browser's cache. Note that shift-reloading the dummy page won't help, since + that'll only refresh the dummy page, not the redirection that lead you there.

    The procedure for clearing the cache varies from browser to browser. As an + example, Mozilla users would click + Edit --> Preferences --> + Advanced --> Cache and + then click both "Clear Memory Cache" + and "Clear Disk Cache".

    Miscellaneous

    4. Miscellaneous

    4. Miscellaneous

    4.1. How much does 4.1. How much does Privoxy slow my browsing down? This -has to add extra time to browsing.

    It should not slow you down any in real terms, and may actually help speed things up since ads, banners and other junk are not being displayed. @@ -98,21 +102,21 @@ CLASS="APPLICATION" > "Filtering" content via the content via the filter or - deanimate-gifs actions may cause a perceived slowdown, since the entire document needs to be buffered before displaying. See below.

    4.2. I noticed considerable -delays in page requests compared to the old Junkbuster. What's wrong?

    4.2. I noticed considerable +delays in page requests compared to the old Junkbuster. What's wrong?

    If you use any If you use any filter action, - such as filtering banners by size, web-bugs etc, or the deanimate-gifs action, the entire document must be loaded into memory in order for the filtering mechanism to work, and nothing is sent to the browser during this time.

    Filtering is automatically disabled for inappropriate MIME types.

    Filtering is automatically disabled for inappropriate MIME types. But note + that if the web server mis-reports the MIME type, then content that should + not be filtered, could be. Privoxy only knows how + to differentiate filterable content because of the MIME type as reported by + the server, or because of some configuration setting that enables/disables + filtering.

    4.4. Do you still maintain the blocklists?

    4.4. Do you still maintain the blocklists?

    No. The patterns for blocking now reside (among other things) in the

    4.5. How can I submit new ads?

    4.5. How can I submit new ads?

    Yes, absolutely! Please see the

    4.6. How can I hide my IP address?

    4.6. How can I hide my IP address?

    If you run both the browser and the proxy locally, you cannot hide your IP address with http://anon.inf.tu-dresden.de/index_en.html.

    ).

    There is, however, even in the single-machine case the possibility to make the server believe that your machine is in fact a shared proxy serving a whole big @@ -310,10 +332,12 @@ CLASS="SECT2" >

    4.7. Can 4.7. Can Privoxy guarantee I am anonymous?

    guarantee I am anonymous?

    No. Your chances of remaining anonymous are greatly improved, but unless you are an expert on Internet security it would be safest to assume that @@ -357,8 +381,10 @@ CLASS="SECT2" >

    4.8. Might some things break because header information or -content is being altered?

    4.8. Might some things break because header information or +content is being altered?

    Definitely. More and more sites use HTTP header content to decide what to display and how to display it. There is many ways that this can be handled, @@ -405,14 +431,16 @@ CLASS="SECT2" >

    4.9. Can 4.9. Can Privoxy act as a "caching" proxy to -speed up web browsing?

    No, it does not have this ability at all. You want something like

    4.10. What about as a firewall? Can 4.10. What about as a firewall? Can Privoxy protect me?

    protect me?

    Not in the way you mean, or in the way a true firewall can.

    4.11. I have large empty spaces / a checkerboard pattern now where -ads used to be. Why?

    4.11. I have large empty spaces / a checkerboard pattern now where +ads used to be. Why?

    It would be technically possible eliminate the banners in a way that frees their screen estate in many cases, by doing all banner blocking with filters, @@ -492,10 +524,12 @@ CLASS="SECT2" >

    4.12. How can 4.12. How can Privoxy filter Secure (HTTPS) URLs?

    filter Secure (HTTPS) URLs?

    Since secure HTTP connections are encrypted SSL sessions between your browser and the secure site, and are meant to be reliably Privoxy's ad blocking.

    "Content cookies" (those that are embedded in the actual HTML or + JS page content, see filter{content-cookies}), + in an SSL transaction will be impossible to block under these conditions. + Fortunately, this does not seem to be a very common scenario since most + cookies come by traditional means.

    4.13. 4.13. Privoxy runs as a "server". How -secure is it? Do I need to take any special precautions?

    There are no known exploits that might affect

    4.14. How can I temporarily disable 4.14. How can I temporarily disable Privoxy?

    ?

    The easiest way is to access

    4.15. When 4.15. When "disabled" is Privoxy totally -out of the picture?

    No, this just means all filtering and actions are disabled.

    4.16. My logs show 4.16. My logs show Privoxy "crunch"?

    ?

    A

    4.17. Can 4.17. Can Privoxy effect files that I download -from a webserver? FTP server?

    From the webserver's perspective, there is no difference between viewing a document (i.e. a page), and downloading a file. The same is true of Privoxy. If there is a match for a . If there is a match for a block pattern, - it will still be blocked, and of course this is obvious. Filtering is - potentially more of a concern since the results are not always so obvious.

    Filtering is potentially more of a concern since the results are not always + so obvious, and the effects of filtering are there whether the file is simply + viewed, or downloaded. And potentially whether the content is some obnoxious + advertizement, or Mr. Jimmy's latest/greatest source code jewel. Of course, + one of these presumably is "bad" content that we don't want, and + the other is "good" content that we do want. + Privoxy is blind to the differences, and can only + distinguish "good from bad" by the configuration parameters + we give it.

    Privoxy knows to ignore these where - appropriate. It is possible, however, that documents that are of an unknown - type (generally assumed to be Privoxy potentially can filter HTML + as well as plain text documents, subject to configuration parameters of + course. Also, documents that are of an unknown type (generally assumed to be + "text/plain") can be filtered, as will those that might be + incorrectly reported by the webserver. If such a file is a downloaded file + that is intended to be saved to disk, then any content that might have been + altered by filtering, will be saved too, for these (probably rare) cases.

    Note that versions later than 3.0.2 do NOT filter document types of + "text/plain") will be filtered, as - will those that might be incorrectly reported by the webserver. If such a - file is a downloaded file that is intended to be saved to disk, then any - content that might have been altered by filtering, will be saved too, for - these (probably very rare) cases.

    . Prior to this, Privoxy + did filter this document type.

    In short, filtering is "ON" if a) the Document Type as reported + by the webserver is appropriate and b) the configuration + allows it (or at least does not disallow it). That's it. There is no magic + cookie anywhere to say this is "good" and this is + "bad". It's the configuration that let's it all happen or not.

    If you download text files, you probably do not want these to be filtered, + particularly if the content is source code, or other critical content. Source + code sometimes might be mistaken for Javascript (i.e. the kind that might + open a pop-up window). It is recommended to turn off filtering for download + sites (particularly if the content may be plain text files and you are using + version 3.0.2 or earlier) in your user.action file. And + also, for any site or page where making any changes at + all to the content is to be avoided.

    Privoxy does not do FTP at all, only HTTP - protocols.

    4.20. I've noticed that Privoxy changes "Microsoft" to +"MicroSuck"! Why are you manipulating my browsing?

    We're not. The text substitutions that you are seeing are disabled + in the default configuration as shipped. You have either manually + activated the "fun" filter which + is clearly labeled "Text replacements for subversive browsing + fun!" or you have implicitly activated it by choosing the + "Adventuresome" profile in the web-based editor (formerly known + as the Advanced profile).

    Privoxy - Home Page

    Privoxy - Home Page

    Privoxy - Home Page

    Privoxy is a web proxy with advanced filtering - capabilities for protecting privacy, filtering web page content, managing + capabilities for protecting privacy, modifying web page content, managing cookies, controlling access, and removing ads, banners, pop-ups and other obnoxious Internet junk. (tm).

    The most recent release is 3.1.1 (alpha). +> The most recent release is 3.0.3 (stable).

    Download

    Download

  • Download the latest CVS snapshot (source tarball) @@ -157,7 +167,9 @@ CLASS="SECT1" >


    Documentation

    Documentation


    More information

    More information


    Privoxy 3.0.3 User Manual

    - Example: +block+block

    - Example: +hide-user-agent{ Mozilla 1.0 }+hide-user-agent{ Mozilla 1.0 }

    - Examples: +add-header{X-Fun-Header: Some text}+add-header{X-Fun-Header: Some text} and - +filter{html-annoyances}+filter{html-annoyances}

    8.5.1. add-header

    8.5.1. add-header

    Any string value is possible. Validity of the defined HTTP headers is not checked. It is recommended that you use the ""X-X-" prefix for custom headers. @@ -1074,7 +1303,9 @@ CLASS="SECT3" >

    8.5.2. block

    8.5.2. block

    Requests for URLs to which this action applies are blocked, i.e. the requests are not forwarded to the remote server, but answered locally with a substitute page or image, - as determined by the handle-as-image - and set-image-blocker actions.

    both - block and block and handle-as-image, apply to the same request: it will then be replaced by an image. If - set-image-blocker (see below) also applies, the type of image will be determined by its parameter, if not, the standard checkerboard pattern is sent. @@ -1192,12 +1423,12 @@ CLASS="APPLICATION" ads and other unwanted content.

    The The filter action can perform a very similar task, by

    8.5.3. crunch-incoming-cookies

    8.5.3. crunch-incoming-cookies

    outgoing cookies, use - crunch-outgoing-cookies. Use no sense at all to use this action in conjunction - with the session-cookies-only action, - since it would prevent the session cookies from being set. + since it would prevent the session cookies from being set. See also + filter-content-cookies.

    8.5.4. crunch-outgoing-cookies

    8.5.4. crunch-outgoing-cookies

    incoming cookies, use - crunch-incoming-cookies. Use no sense at all to use this action in conjunction - with the session-cookies-only action, since it would prevent the session cookies from being read.

    8.5.5. deanimate-gifs

    8.5.5. deanimate-gifs

    Text documents, including HTML and JavaScript, to which this action - applies, are filtered on-the-fly through the specified regular expression - based substitutions. +> All files of text-based type, most notably HTML and JavaScript, to which this + action applies, are filtered on-the-fly through the specified regular expression + based substitutions. (Note: as of version 3.0.3 plain text documents + are exempted from filtering, because web servers often use the + text/plain MIME type for all files whose type they + don't know.)

    default.filter, set by the - filterfile option in the config file). Filtering - can be completely disabled without the use of parameters. +>). When used in its negative form, + and without parameters, filtering is completely disabled.

    This is potentially a very powerful feature! But "rolling your own" - filters requires a knowledge of regular expressions and HTML. -

    Filtering requires buffering the page content, which may appear to slow down page rendering since nothing is displayed until all content has passed the filters. (It does not really take longer, but seems that way @@ -1801,21 +2050,38 @@ CLASS="QUOTE" noticeable on slower connections.

    This is very powerful feature, but "rolling your own" + filters requires a knowledge of regular expressions and HTML. +

    The amount of data that can be filtered is limited to the - buffer-limit option in the main config file. The default is 4096 KB (4 Megs). Once this limit is exceeded, the buffered - data, and all pending data, is passed through unfiltered. Inappropriate - MIME types are not filtered. + data, and all pending data, is passed through unfiltered. +

    Inadequate MIME types, such as zipped files, are not filtered at all. + (Again, only text-based types except plain text). Encrypted SSL data + (from HTTPS servers) cannot be filtered either, since this would violate + the integrity of the secure transaction. In some situations it might + be necessary to protect certain text, like source code, from filtering + by defining appropriate -filter sections.

    At this time, cannot (yet!) uncompress compressed documents. If you want filtering to work on all documents, even those that would normally be sent compressed, use the - prevent-compression - action in conjunction with filterfilter.

    Filtering can achieve some of the same effects as the - block action, i.e. it can be used to block ads and banners. But the mechanism works quite differently. One effective use, is to block ad banners @@ -1857,16 +2123,32 @@ HREF="contact.html" > with suggestions for new or improved filters is particularly welcome!

    The below list has only the names and a one-line description of each + predefined filter. There are more + verbose explanations of what these filters do in the filter file chapter. +

    Example usage (with filters from the distribution default.filter file):
    file). + See the Predefined Filters section for + more explanation on each:

    Privoxy is developed on:
    >

    Copyright © 2001, 2002 by Privoxy Developers +> Copyright © 2001 - 2004 by Privoxy Developers

    Manpage of PRIVOXY

    PRIVOXY

    -Section: (1)
    Updated: 05 September 2002
    Index +Section: (1)
    Updated: 25 March 2003
    Index
      @@ -13,7 +13,7 @@ privoxy - Privacy Enhancing Proxy

    SYNOPSIS

    -privoxy [--help ] [--version ] [--no-daemon ] [--pidfile pidfile ] [--user user[.group] ] [configfile ] (UNIX) +privoxy [--help ] [--version ] [--no-daemon ] [--pidfile pidfile ] [--user user[.group] ] [--chroot ] [configfile ] (UNIX)

    privoxy.exe [configfile ] (Windows) @@ -45,6 +45,13 @@ After (optionally) writing the PID file, assume the user ID of group was not given, the default group of user. Exit if the privileges are not sufficient to do so. +

    --chroot
    +Before changing to the user ID given in the --user option, chroot to +that user's home directory, i.e. make the kernel pretend to the +Privoxy process that the directory tree starts +there. If set up carefully, this can limit the impact of possible +vulnerabilities in Privoxy to the files contained in +that hierarchy.

    @@ -113,8 +120,7 @@ executable.

    The name and number of configuration files has changed from previous -versions, and is subject to change as development -progresses. In fact, the configuration itself is changed and much more +versions. In fact, the configuration itself is changed and much more sophisticated. See the user-manual for a complete explanation of all configuration options and general usage, and notes for upgrading from Junkbuster and earlier Privoxy @@ -266,10 +272,6 @@ automatically.

    -This is a alpha version of Privoxy. Not -all features are well tested. -

    - Please see the User Manual on how to contact the developers for feature requests, reporting problems, and other questions.   @@ -324,24 +326,30 @@ the Privoxy developer manual.

    + Hal Burgiss (docs)
      Jon Foster
      Andreas Oesterhelt
    - Stefan Waldherr
    - Thomas Steudten
    - Rodney Stromlund
    + David Schmidt (OS/2, Mac OSX ports)
    +
    + Johny Agotnes 
      Rodrigo Barbosa (RPM specfiles)
      Moritz Barsnick
    - Hal Burgiss (docs)
    + Mattes Dolak 
      Karsten Hopp (Red Hat)
      Alexander Lazic
    + Daniel Leite
      Gábor Lipták
    - Guy
    + Adam Lock (Win32)
    + Guy Laroche
      Haroon Rafique
      Roland Rosenfeld (Debian)
      Georg Sauthoff (Gentoo)
    - David Schmidt (OS/2, Mac OSX ports)
    + Thomas Steudten
      Joerg Strohmayer (Amiga)
    + Rodney Stromlund
    + Sviatoslav Sviridov
      Sarantis Paskalis
    + Stefan Waldherr
     
      @@ -352,7 +360,7 @@ the Privoxy developer manual.

    -Copyright (C) 2001, 2002 by Privoxy Developers <developers@privoxy.org> +Copyright (C) 2001 - 2003 by Privoxy Developers <developers@privoxy.org>

    Some source code is based on code Copyright (C) 1997 by Anonymous Coders @@ -409,6 +417,6 @@ USA This document was created by man2html, using the manual pages.
    -Time: 23:23:42 GMT, September 05, 2002 +Time: 02:05:48 GMT, March 26, 2003 diff --git a/doc/webserver/p_doc.css b/doc/webserver/p_doc.css index 84459e61..7ab1ef4d 100644 --- a/doc/webserver/p_doc.css +++ b/doc/webserver/p_doc.css @@ -1,7 +1,7 @@ /* * CSS for Privoxy documentation * - * $Id: p_doc.css,v 1.2 2002/05/23 23:20:48 oes Exp $ + * $Id: p_doc.css,v 1.2.2.1 2002/05/28 02:31:38 hal9 Exp $ */ /* diff --git a/doc/webserver/p_web.css b/doc/webserver/p_web.css deleted file mode 100644 index 8eb2159a..00000000 --- a/doc/webserver/p_web.css +++ /dev/null @@ -1,11 +0,0 @@ -hr { width: 95% } -body { background: #EEEEEE; } -h1, h2, h3, h4 { font-family: arial, helvetica, sans-serif } -code { color: green } -pre { margin-left: 2% } -# p { margin-left:20px } -body { margin-left:20px } -h1 { color: #404; font-size: 175%; margin-left:0px } -h2 { color: #606; margin-left:0px } -h3, h4 { color: #806; margin-left:0px } -ul { list-style-type: square } diff --git a/doc/webserver/privoxy-index.html b/doc/webserver/privoxy-index.html index f353f5fc..85fe9d32 100644 --- a/doc/webserver/privoxy-index.html +++ b/doc/webserver/privoxy-index.html @@ -1,11 +1,11 @@ + Privoxy - The Privacy Enhancing Proxy

    Privoxy - The Privacy Enhancing Proxy

    Privoxy - The Privacy Enhancing Proxy

    Project Index Page v3.1.1

    Project Index Page v3.0.3

    Privoxy is a web proxy with advanced filtering - capabilities for protecting privacy, filtering web page content, managing + capabilities for protecting privacy, modifying web page content, managing cookies, controlling access, and removing ads, banners, pop-ups and other obnoxious Internet junk.

    Download

    Download

  • Download the latest CVS snapshot (source tarball) @@ -157,7 +163,9 @@ CLASS="SECT1" >


    Documentation

    Documentation


    More information

    More information


    Copyright © 2001, 2002 by Privoxy Developers +> Copyright © 2001 - 2004 by Privoxy Developers

  • + + + Privoxy|Confirm ad submission + + + +

    Privoxy Feedback

    + +

    Confirm Ad Submission

    + +

    We have detemined that ...

    + + + + + \ No newline at end of file diff --git a/doc/webserver/submit/index.php b/doc/webserver/submit/index.php new file mode 100644 index 00000000..a000fb3d --- /dev/null +++ b/doc/webserver/submit/index.php @@ -0,0 +1,210 @@ + + + + Privoxy|Submit + + + +

    Privoxy Feedback

    + +

    Compared to bug +reports or feature +requests, this page is intended to optimize the blocking behavior +of Privoxy. Therefor we need your feedback.

    If you have +observed and advertisement, that was not blocked or an image that was +incorrectly blocked, please use the forms below to report this.

    + +

    New Advertisement

    + + + + + 0) + $np = $ip; + else + $np = $REMOTE_ADDR; + if ($np != $ip) + $count += 1; + rewind ($fp); + fputs ($fp,substr($np." ",0,15).$count); + fclose ($fp); + echo $count; +} +else { + $fp = fopen($cfile,"w"); + $np = $REMOTE_ADDR; + $count = "1"; + fputs ($fp,substr($np." ",0,15).$count); + fclose ($fp); + echo $count; +} +?> + + +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Your name: + +optional
    Your email address: + +optional
    Website, where I observed an ad: + +Please change, if necessary
    How annoying is the ad: + +Please select one
    Privoxy Version: + +Automatically determined
    Action File: + +Automatically determined
    Action File Version: + +Automatically determined
    Remarks: + +Please change, if necessary
    + + +
    +
    +

    + +

    Incorrect blocking

    +

    We soon present a form where you can submit websites, where the +default action file was too agressive.

    + +

    Misc

    +

    Bla bla bla

    + + + + + \ No newline at end of file diff --git a/doc/webserver/team/09member.jpg b/doc/webserver/team/09member.jpg deleted file mode 100644 index 97042aaa..00000000 Binary files a/doc/webserver/team/09member.jpg and /dev/null differ diff --git a/doc/webserver/team/09member_t.jpg b/doc/webserver/team/09member_t.jpg deleted file mode 100644 index c9ffd9b5..00000000 Binary files a/doc/webserver/team/09member_t.jpg and /dev/null differ diff --git a/doc/webserver/team/10member.jpg b/doc/webserver/team/10member.jpg deleted file mode 100644 index 97042aaa..00000000 Binary files a/doc/webserver/team/10member.jpg and /dev/null differ diff --git a/doc/webserver/team/10member_t.jpg b/doc/webserver/team/10member_t.jpg deleted file mode 100644 index c9ffd9b5..00000000 Binary files a/doc/webserver/team/10member_t.jpg and /dev/null differ diff --git a/doc/webserver/team/11member.jpg b/doc/webserver/team/11member.jpg deleted file mode 100644 index 97042aaa..00000000 Binary files a/doc/webserver/team/11member.jpg and /dev/null differ diff --git a/doc/webserver/team/11member_t.jpg b/doc/webserver/team/11member_t.jpg deleted file mode 100644 index c9ffd9b5..00000000 Binary files a/doc/webserver/team/11member_t.jpg and /dev/null differ diff --git a/doc/webserver/team/12member.jpg b/doc/webserver/team/12member.jpg deleted file mode 100644 index 97042aaa..00000000 Binary files a/doc/webserver/team/12member.jpg and /dev/null differ diff --git a/doc/webserver/team/12member_t.jpg b/doc/webserver/team/12member_t.jpg deleted file mode 100644 index c9ffd9b5..00000000 Binary files a/doc/webserver/team/12member_t.jpg and /dev/null differ diff --git a/doc/webserver/team/13member.jpg b/doc/webserver/team/13member.jpg deleted file mode 100644 index 97042aaa..00000000 Binary files a/doc/webserver/team/13member.jpg and /dev/null differ diff --git a/doc/webserver/team/13member_t.jpg b/doc/webserver/team/13member_t.jpg deleted file mode 100644 index c9ffd9b5..00000000 Binary files a/doc/webserver/team/13member_t.jpg and /dev/null differ diff --git a/doc/webserver/team/14member.jpg b/doc/webserver/team/14member.jpg deleted file mode 100644 index 97042aaa..00000000 Binary files a/doc/webserver/team/14member.jpg and /dev/null differ diff --git a/doc/webserver/team/14member_t.jpg b/doc/webserver/team/14member_t.jpg deleted file mode 100644 index c9ffd9b5..00000000 Binary files a/doc/webserver/team/14member_t.jpg and /dev/null differ diff --git a/doc/webserver/team/15member.jpg b/doc/webserver/team/15member.jpg deleted file mode 100644 index 97042aaa..00000000 Binary files a/doc/webserver/team/15member.jpg and /dev/null differ diff --git a/doc/webserver/team/15member_t.jpg b/doc/webserver/team/15member_t.jpg deleted file mode 100644 index c9ffd9b5..00000000 Binary files a/doc/webserver/team/15member_t.jpg and /dev/null differ diff --git a/doc/webserver/team/16member.jpg b/doc/webserver/team/16member.jpg deleted file mode 100644 index 97042aaa..00000000 Binary files a/doc/webserver/team/16member.jpg and /dev/null differ diff --git a/doc/webserver/team/16member_t.jpg b/doc/webserver/team/16member_t.jpg deleted file mode 100644 index c9ffd9b5..00000000 Binary files a/doc/webserver/team/16member_t.jpg and /dev/null differ diff --git a/doc/webserver/team/17member.jpg b/doc/webserver/team/17member.jpg deleted file mode 100644 index 97042aaa..00000000 Binary files a/doc/webserver/team/17member.jpg and /dev/null differ diff --git a/doc/webserver/team/17member_t.jpg b/doc/webserver/team/17member_t.jpg deleted file mode 100644 index c9ffd9b5..00000000 Binary files a/doc/webserver/team/17member_t.jpg and /dev/null differ diff --git a/doc/webserver/team/18member.jpg b/doc/webserver/team/18member.jpg deleted file mode 100644 index 97042aaa..00000000 Binary files a/doc/webserver/team/18member.jpg and /dev/null differ diff --git a/doc/webserver/team/18member_t.jpg b/doc/webserver/team/18member_t.jpg deleted file mode 100644 index c9ffd9b5..00000000 Binary files a/doc/webserver/team/18member_t.jpg and /dev/null differ diff --git a/doc/webserver/team/19member.jpg b/doc/webserver/team/19member.jpg deleted file mode 100644 index 97042aaa..00000000 Binary files a/doc/webserver/team/19member.jpg and /dev/null differ diff --git a/doc/webserver/team/19member_t.jpg b/doc/webserver/team/19member_t.jpg deleted file mode 100644 index c9ffd9b5..00000000 Binary files a/doc/webserver/team/19member_t.jpg and /dev/null differ diff --git a/doc/webserver/team/index.html b/doc/webserver/team/index.html index fe12d905..2903bcf5 100644 --- a/doc/webserver/team/index.html +++ b/doc/webserver/team/index.html @@ -1,83 +1,26 @@ - - - - - - -Privoxy - Team page - - - - -
    -

    Privoxy - Team page

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -01stefanw.jpg -02jon.jpg -03andreas.jpg -04rodney.jpg
    -05david.jpg -06member.jpg -07member.jpg -08member.jpg
    -09member.jpg -10member.jpg -11member.jpg -12member.jpg
    -13member.jpg -14member.jpg -15member.jpg -16member.jpg
    -17member.jpg -18member.jpg -19member.jpg -20member.jpg
    - -
    -Created by IrfanView -
    - - + + + + Privoxy - Team Photos + + + +

    Privoxy - Team Photos

    +
    +

    In our day jobs, we're all models ;-)

    + + + + + + + + + + + + + +
    + + diff --git a/doc/webserver/user-manual/actions-file.html b/doc/webserver/user-manual/actions-file.html index 9162118f..a08da896 100644 --- a/doc/webserver/user-manual/actions-file.html +++ b/doc/webserver/user-manual/actions-file.html @@ -1,13 +1,13 @@ + Actions Files
    Privoxy 3.1.1 User Manual

    8. Actions Files

    8. Actions Files

    The actions files are used to define what actions Privoxy (as of - version 2.9.15), with differing purposes: +> + with differing purposes:

    . It is not recommend to edit this file.

    The default profiles, and their associated actions, as pre-defined in + standard.action are: +

    Table 1. Default Configurations

    FeatureCautiousMediumAdventuresome
    Ad-blocking by URLyesyesyes
    Ad-filtering by sizeyesyesyes
    GIF de-animationnoyesyes
    Referer forgingnoyesyes
    Cookie handlingnonesession-onlykill
    Pop-up killingunsolicitedunsolicitedall
    Fast redirectsnonoyes
    HTML tamingyesyesyes
    JavaScript tamingyesyesyes
    Web-bug killingyesyesyes
    Fun text replacementsnonoyes
    Image tag reorderingnonoyes
    Ad-filtering by linknonoyes
    Demoronizernonoyes
    +

    The list of actions files to be used are defined in the main configuration - file, and are processed in the order they are defined. The content of these - can all be viewed and edited from default.action is typically process before + user.action). The content of these can all be viewed and + edited from http://config.privoxy.org/show-status

    8.1. Finding the Right Mix

    8.1. Finding the Right Mix

    Note that some "trusted" sites you - will have to make later. If, for example, you want to kill popup windows per + will have to make later. If, for example, you want to crunch all cookies per default, you'll have to make exceptions from that rule for sites that you - regularly use and that require popups for actually useful content, like maybe - your bank, favorite shop, or newspaper.

    We have tried to provide you with reasonable rules to start from in the distribution actions files. But there is no general rule of thumb on these @@ -243,7 +443,9 @@ CLASS="SECT2" >

    8.2. How to Edit

    8.2. How to Edit

    The easiest way to edit the actions files is with a browser by using our browser-based editor, which can be reached from "Medium" or "Advanced".

    "Adventuresome". + Warning: the "Adventuresome" setting is not only more aggressive, + but includes settings that are fun and subversive, and which some may find of + dubious merit!

    If you prefer plain text editing to GUIs, you can of course also directly edit the the actions files. Look at

    8.3. How Actions are Applied to URLs

    8.3. How Actions are Applied to URLs

    Actions files are divided into sections. There are special sections, like the { +handle-as-image } }, - then later another one with just { +block } }, resulting in

    8.4. Patterns

    8.4. Patterns

    + As mentioned, Privoxy uses "patterns" + to determine what actions might apply to which sites and pages your browser + attempts to access. These "patterns" use wild card type + pattern matching to achieve a high degree of + flexibility. This allows one expression to be expanded and potentially match + against many similar patterns.

    Generally, a pattern has the form Generally, a Privoxy pattern has the form + <domain>/<path>, - where both the <domain>/<path>, where both the + <domain> and <domain> and <path> - are optional. (This is why the pattern <path> are + optional. (This is why the special / pattern matches all + URLs). Note that the protocol portion of the URL pattern (e.g. + / matches all URLs).

    http://) should not be included in + the pattern. This is assumed already!

    www.example.com/www.example.com/

    is a domain-only pattern and will match any request to is a domain-only pattern and will match any request to www.example.comwww.example.com, regardless of which document on that server is requested.

    www.example.comwww.example.com

    means exactly the same. For domain-only patterns, the trailing means exactly the same. For domain-only patterns, the trailing // may be omitted.

    www.example.com/index.htmlwww.example.com/index.html

    matches only the single document matches only the single document /index.html/index.html - on www.example.comwww.example.com.

    /index.html/index.html

    matches the document matches the document /index.html/index.html, regardless of the domain, i.e. on

    index.htmlindex.html

    matches nothing, since it would be interpreted as a domain name and - there is no top-level domain called .html.html.

    8.4.1. The Domain Pattern

    8.4.1. The Domain Pattern

    The matching of the domain part offers some flexible options: if the domain starts or ends with a dot, it becomes unanchored at that end. @@ -456,9 +709,9 @@ NAME="AEN1716">8.4.1. The Domain Pattern

    .example.com.example.com

    ENDS in - .example.com.example.com

    www.www.

    STARTS with - www.www.

    .example..example.

    CONTAINS .example..example. - (Correctly speaking: It matches any FQDN that contains exampleexample as a domain.)

    ad*.example.comad*.example.com

    *ad*.example.com*ad*.example.com

    .?pix.com.?pix.com

    matches matches www.ipix.comwww.ipix.com, - pictures.epix.com, pictures.epix.com, a.b.c.d.e.upix.coma.b.c.d.e.upix.com etc.

    www[1-9a-ez].example.c*www[1-9a-ez].example.c*

    matches matches www1.example.comwww1.example.com, - www4.example.cc, www4.example.cc, wwwd.example.cywwwd.example.cy, - wwwz.example.comwwwz.example.com etc., but not - wwww.example.comwwww.example.com.

    8.4.2. The Path Pattern

    8.4.2. The Path Pattern

    http://www.pcre.org/man.txt. - You might also find the Perl man page on regular expressions (man perlreman perlre) useful, which is available on-line at "(?-i)" switch: switch: www.example.com/(?-i)PaTtErN.*www.example.com/(?-i)PaTtErN.* will match - only documents whose path starts with PaTtErNPaTtErN in

    8.5. Actions

    8.5. Actions

    All actions are disabled by default, until they are explicitly enabled somewhere in an actions file. Actions are turned on if preceded with a @@ -716,29 +973,29 @@ CLASS="QUOTE" CLASS="QUOTE" >"-". So a - +action+action means "do that action", e.g. - +block+block means "please block URLs that match the following patterns", and , and -block-block means "don't - block URLs that match the following patterns, even if +block+block previously applied."

    Again, actions are invoked by placing them on a line, enclosed in curly braces and separated by whitespace, like in - {+some-action -some-other-action{some-parameter}}{+some-action -some-other-action{some-parameter}}, followed by a list of URL patterns, one per line, to which they apply. Together, the actions line and the following pattern lines make up a section @@ -781,27 +1038,19 @@ WIDTH="90%" >
      +  +name        # enable action name        # enable action namename
    -  -name        # disable action name        # disable action namename
      +  +name{name{param}  # enable action and set parameter to param}  # enable action and set parameter to paramparam,
                    # overwriting parameter from previous match if necessary
    -  -namename         # disable action. The parameter can be omitted
      +  +name{name{param}   # enable action and add param}   # enable action and add paramparam to the list of parameters
    -  -name{name{param}   # remove the parameter param}   # remove the parameter paramparam from the list of parameters
                     # If it was the last one left, disable the action.
    -  -name-name          # disable this action completely and remove all parameters from the list
    +filter{html-annoyances}     # Get rid of particularly annoying HTML abuse.
    +filter{js-annoyances} # Get rid of particularly annoying JavaScript abuse

    +filter{js-annoyances}       # Get rid of particularly annoying JavaScript abuse
    +filter{js-events} # Kill all JS event bindings (Radically destructive! Only for extra nasty sites)

    +filter{banners-by-size}     # Kill banners based on their size for this page (very efficient!)
    +filter{html-annoyances} # Get rid of particularly annoying HTML abuse

    +filter{banners-by-link}     # Kill banners based on the link they are contained in (experimental)
    +filter{content-cookies} # Kill cookies that come in the HTML or JS content

    +filter{img-reorder}         # Reorder attributes in <img> tags to make the banners-by-* filters more effective
    +filter{refresh-tags} # Kill automatic refresh tags (for dial-on-demand setups)

    +filter{content-cookies}     # Kill cookies that come sneaking in the HTML or JS content
    +filter{unsolicited-popups} # Disable only unsolicited pop-up windows

    +filter{popups}              # Kill all popups in JS and HTML
    +filter{all-popups} # Kill all popups in JavaScript and HTML

    +filter{webbugs}             # Squish WebBugs (1x1 invisible GIFs used for user tracking)
    +filter{img-reorder} # Reorder attributes in <img> tags to make the banners-by-* filters more effective

    +filter{fun}                 # Text replacements for subversive browsing fun!
    +filter{banners-by-size} # Kill banners by size

    +filter{frameset-borders}    # Give frames a border and make them resizeable
    +filter{banners-by-link} # Kill banners by their links to known clicktrackers
    +>

    +filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)
    +filter{webbugs} # Squish WebBugs (1x1 invisible GIFs used for user tracking)

    +filter{nimda}               # Remove Nimda (virus) code.
    +filter{tiny-textforms} # Extend those tiny textareas up to 40x80 and kill the hard wrap

    +filter{shockwave-flash}     # Kill embedded Shockwave Flash objects
    +filter{jumping-windows} # Prevent windows from resizing and moving themselves

    +filter{crude-parental}      # Kill all web pages that contain the words "sex" or "warez"
    +filter{frameset-borders} # Give frames a border and make them resizable

    +filter{js-events}           # Kill all JS event bindings (Radically destructive! Only for extra nasty sites) 
    +filter{demoronizer} # Fix MS's non-standard use of standard charsets

  • +
    +filter{shockwave-flash}     # Kill embedded Shockwave Flash objects
    +

    +
    +filter{quicktime-kioskmode} # Make Quicktime movies saveable
    +

    +
    +filter{fun}                 # Text replacements for subversive browsing fun!
    +

    +
    +filter{crude-parental}      # Crude parental filtering (demo only)
    +

    +
    +filter{ie-exploits}         # Disable some known Internet Explorer bug exploits
    +

    8.5.9. handle-as-image

    8.5.9. handle-as-image

    This action alone doesn't do anything noticeable. It just marks URLs as images. - If the block action "blocked" - page, or a replacement image (as determined by the set-image-blocker action) will be sent to the client as a substitute for the blocked content.

    Users will probably only want to use the handle-as-image action in conjunction with - block, to block sources of banners, whose URLs don't reflect the file type, like in the second example section.

    Note that you cannot treat HTML pages as images in most cases. For instance, (in-line) ad frames require an HTML page to be sent, or they won't display properly. - Forcing handle-as-imagehandle-as-image in this situation will not replace the ad frame with an image, but lead to error messages.

    8.5.10. hide-forwarded-for-headers

    8.5.10. hide-forwarded-for-headers

    8.5.11. hide-from-header

    8.5.11. hide-from-header

    "block" will completely remove the header - (not to be confused with the block action).

    8.5.12. hide-referrer

    8.5.12. hide-referrer

    - hide-refererhide-referer is an alternate spelling of - hide-referrerhide-referrer and the two can be can be freely substituted with each other. (

    8.5.13. hide-user-agent

    8.5.13. hide-user-agent

    Eliminate those annoying pop-up windows

    Eliminate those annoying pop-up windows (deprecated)

    Effect:
    Notes:

    This action is easily confused with the built-in, hardwired This action is basically a built-in, hardwired special-purpose filter + action, but there are important differences: For filter - action, but there are important differences: For kill-popupskill-popups, the document need not be buffered, so it can be incrementally rendered while - downloading. But kill-popupskill-popups doesn't catch as many pop-ups as - filter{filter{popups}all-popups} + does and is not as smart as filter{unsolicited-popups} - does. + is.

    Think of it as a fast and efficient replacement for a filter that you can use if you don't want any filtering at all. Note that it doesn't make - sense to combine it with any filter action, - since as soon as one filter applies, the whole document needs to be buffered anyway, which destroys the advantage of - the kill-popupskill-popups action over its filter equivalent.

    Killing all pop-ups is a dangerous business. Many shops and banks rely on - pop-ups to display forms, shopping carts etc, and killing only the unwanted pop-ups - would require artificial intelligence in Privoxy. - If the only kind of pop-ups that you want to kill are exit consoles (those +> Killing all pop-ups unconditionally is problematic. Many shops and banks rely on + pop-ups to display forms, shopping carts etc, and the filter{unsolicited-popups} + does a fairly good job of catching only the unwanted ones. +

    If the only kind of pop-ups that you want to kill are exit consoles (those windows that appear when you close an other one), you might want to use - filter{{js-annoyances}js-annoyances} instead.

    8.5.15. limit-connect

    8.5.15. limit-connect

    Notes:

    By default, i.e. if no By default, i.e. if no limit-connectlimit-connect action applies, Privoxy only allows HTTP CONNECT requests to port 443 (the standard, secure HTTPS port). Use - limit-connectlimit-connect if more fine-grained control is desired for some or all destinations.

    8.5.16. prevent-compression

    8.5.16. prevent-compression

    Ensure that servers send the content uncompressed, so it can be - passed through filters

    More and more websites send their content compressed by default, which - is generally a good idea and saves bandwidth. But for the filter, , deanimate-gifs - and kill-popups actions to work,

    This will slow down transfers from those websites, though. If you use any of the above-mentioned - actions, you will typically want to use prevent-compressionprevent-compression in conjunction with them.

    Note that some (rare) ill-configured sites don't handle requests for uncompressed - documents correctly (they send an empty document body). If you use prevent-compressionprevent-compression per default, you'll have to add exceptions for those sites. See the example for how to do that.

    8.5.17. send-vanilla-wafer

    8.5.17. send-vanilla-wafer

    8.5.18. send-wafer

    8.5.18. send-wafer

    A string of the form ""name=name=valuevalue".

    8.5.19. session-cookies-only

    8.5.19. session-cookies-only

    Allow only temporary "session" cookies (for the current browser session cookies (for the current + browser session only). +>).

    field from "Set-Cookie:" server headers. - Most browsers will not store such cookies permanently and forget them in between sessions. +> + server headers. Most browsers will not store such cookies permanently and + forget them in between sessions.

    Notes:

    This is less strict than This is less strict than crunch-incoming-cookies / - crunch-outgoing-cookies and allows you to browse websites that insist or rely on setting cookies, without compromising your privacy too badly.

    Most browsers will not permanently store cookies that have been processed by - session-cookies-onlysession-cookies-only and will forget about them between sessions. This makes profiling cookies useless, but won't break sites which require cookies so that you can log in for transactions. This is generally turned on for all @@ -3387,23 +3780,23 @@ CLASS="emphasis" CLASS="EMPHASIS" >no sense at all to use to use session-cookies-onlysession-cookies-only - together with crunch-incoming-cookies or - crunch-outgoing-cookies. If you do, cookies will be plainly killed.

    field. If you use an exotic browser, you might want to try it out to be sure.

    This setting also has no effect on cookies that may have been stored + previously by the browser before starting Privoxy. + These would have to be removed manually. +

    Privoxy also uses + the content-cookies filter + to block some types of cookies. Content cookies are not effected by + session-cookies-only. +

    Example usage:

    8.5.20. set-image-blocker

    8.5.20. set-image-blocker

    both - block and handle-as-image

    ""target-urltarget-url" to - send a redirect to target-urltarget-url. You can redirect to any image anywhere, even in your local filesystem (via Privoxy-built-in - URLs, which send the built-in images, as target-urltarget-url. This has the same visual effect as specifying

    The URLs for the built-in images are "http://config.privoxy.org/send-banner?type="http://config.privoxy.org/send-banner?type=typetype", where , where typetype is either NOT to be - used in set-image-blockerset-image-blocker, but meant for use from filters

    8.5.21. Summary

    8.5.21. Summary

    Note that many of these actions have the potential to cause a page to misbehave, possibly even not to display at all. There are many ways @@ -3716,7 +4126,9 @@ CLASS="SECT2" >

    8.6. Aliases

    8.6. Aliases

    Custom crunch-incoming-cookies +crunch-outgoing-cookies + -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies block-as-image = +block +handle-as-image - mercy-for-cookies = -crunch-all-cookies -session-cookies-only + mercy-for-cookies = -crunch-all-cookies -session-cookies-only -filter{content-cookies} # These aliases define combinations of actions # that are useful for certain types of sites: # - fragile = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups - shop = -crunch-all-cookies -filter{popups} -kill-popups + fragile = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -kill-popups + shop = -crunch-all-cookies -filter{all-popups} -kill-popups # Short names for other aliases, for really lazy people ;-) # @@ -3897,7 +4348,7 @@ CLASS="SCREEN" # These shops require pop-ups: # - {shop -kill-popups -filter{popups}} + {shop -kill-popups -filter{all-popups}} .dabs.com .overclockers.co.uk

    8.7. Actions Files Tutorial

    8.7. Actions Files Tutorial

    The above chapters have shown

    8.7.1. default.action

    8.7.1. default.action

    Every config file should start with a short comment stating its purpose:

    crunch-incoming-cookies +crunch-outgoing-cookies + -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies + block-as-image = +block +handle-as-image + mercy-for-cookies = -crunch-all-cookies -session-cookies-only -filter{content-cookies} -# These aliases define combinations of actions -# that are useful for certain types of sites: -# -fragile = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups -shop = mercy-for-cookies -filter{popups} -kill-popupsblock -filter -crunch-all-cookies -fast-redirects -hide-referrer -kill-popups + shop = -crunch-all-cookies -filter{all-popups} -kill-popups The first regular section is probably the most important. It has only one pattern, ""//", but this pattern fast-redirects \ - +filter{html-annoyances} \ +filter{js-annoyances} \ -filter{content-cookies} \ - +filter{popups}filter{js-events} \ +filter{webbugs}filter{html-annoyances} \ -filter{content-cookies} \ + +filter{refresh-tags} \ + +filter{unsolicited-popups} \ -filter{fun}filter{all-popups} \ +filter{nimda}filter{img-reorder} \ +filter{banners-by-link} \ + +filter{webbugs} \ -filter{img-reorder}filter{tiny-textforms} \ + +filter{jumping-windows} \ + -filter{frameset-borders} \ + -filter{demoronizer} \ -filter{shockwave-flash} \ -filter{crude-parental}filter{quicktime-kioskmode} \ -filter{js-events}filter{fun} \ -filter{crude-parental} \ + +filter{ie-exploits} \ + -handle-as-image \ @@ -4255,9 +4773,7 @@ CLASS="EMPHASIS" > the default!) need exceptions, i.e. we need to specify explicitly what we - want to block in later sections. - We will also want to make exceptions from our general pop-up-killing, - and use our defined aliases for that.

    The first of our specialized sections is concerned with fragilefragile alias instead of stating the list of actions explicitly:

    Then, there are sites which rely on pop-up windows (yuck!) to work. - Since we made pop-up-killing our default above, we need to make exceptions - now. Mozilla users, who - can turn on smart handling of unwanted pop-ups in their browsers, can - safely choose - -filter{popups} (and - -kill-popups) above - and hence don't need this section. Anyway, disabling an already disabled - action doesn't hurt, so we'll define our exceptions regardless of what was - chosen in the defaults section:

    # These sites require pop-ups too :( 
    -#
    -{ -kill-popups -filter{popups} }
    -.dabs.com
    -.overclockers.co.uk
    -.deutsche-bank-24.de

    The The fast-redirects action, which we enabled per default above, breaks some sites. So disable it for popular sites where we know it misbehaves:

    and - information). We can mark any URL as an image with the handle-as-image action, and marking all URLs that end in a known image file extension is a good start:

    mark them as images in one go, with the help of our - block-as-imageblock-as-image alias defined above. (We could of - course just as well use +handle-as-image here.) Remember that the type of the replacement image is chosen by the - set-image-blocker action. Since all URLs have matched the default section with its - +set-image-blocker{pattern}{pattern} action before, it still applies and needn't be repeated:

    "blocked" - by the filter{banners-by-size}{banners-by-size} action, which we enabled above, and which deletes the references to banner images from the pages while they are loaded, so the browser doesn't request them anymore, and hence they don't need to be blocked here. But this naturally doesn't catch all banners, and some people choose not to use filters, so we need a comprehensive list of patterns for banner URLs here, and apply the - block action to them.

    First comes a bunch of generic patterns, which do most of the work, by @@ -4593,11 +5057,9 @@ count*. >

    You wouldn't believe how many advertisers actually call their banner - servers ads.companycompany.com, or call the directory in which the banners are stored simply

    But being very generic, they necessarily also catch URLs that we don't want - to block. The pattern .*ads..*ads. e.g. catches l.some-provider.net." So here come some - well-known exceptions to the +block section above.

    "downloads.sourcefroge.net": Initially, all actions are deactivated, so it wouldn't get blocked. Then comes the defaults section, which matches the - URL, but just deactivates the block - action once again. Then it matches .*ads..*ads., an exception to the general non-blocking policy, and suddenly - +block applies. And now, it'll match - .*loads., where .*loads., where -block applies, so (unless it matches again further down) it ends up - with no block action applying.

    "cvs" in them. Note that - -filter disables

    8.7.2. user.action

    8.7.2. user.action

    So far we are painting with a broad brush by setting general policies, which would be a reasonable starting point for many people. Now, @@ -4860,29 +5324,46 @@ WIDTH="100%" >

    # (Re-)define aliases for this file:
    +># Aliases are local to the file they are defined in.
    +# (Re-)define aliases for this file:
     #
     {{alias}}
    +# 
    +# These aliases just save typing later, and the alias names should 
    +# be self explanatory.
    +#
    ++crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
     -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
    -mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
    -fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
    -shop        = mercy-for-cookies -filter{popups} -kill-popups
    -allow-ads   = -block -filter{banners-by-size} # (see below)
    +

    Say you have accounts on some sites that you visit regularly, and you don't want to have to log in manually each time. So you'd like to allow persistent cookies for these sites. The - mercy-for-cookiesallow-all-cookies alias defined above does exactly - that, i.e. it disables crunching of cookies in any direction, and - processing of cookies to make them temporary.

    { mercy-for-cookies }
    +>{ allow-all-cookies }
    +sourceforge.net
     sunsolve.sun.com
    -slashdot.org
    +.slashdot.org
     .yahoo.com
     .msdn.microsoft.com
     .redhat.com

    Your bank needs popups and is allergic to some filter, but you don't - know which, so you disable them all:

    Your bank is allergic to some filter, but you don't know which, so you disable them all:

    { -filter -kill-popups } .your-home-banking-site.com

    While browsing the web with Privoxy you - noticed some ads that sneaked through, but you were too lazy to - report them through our fine and easy feedback Some file types you may not want to filter for various reasons:

    # Technical documentation is likely to contain strings that might
    +# erroneously get altered by the JavaScript-oriented filters:
    +#
    +.tldp.org
    +/(.*/)?selfhtml/
    +
    +# And this stupid host sends streaming video with a wrong MIME type,
    +# so that Privoxy thinks it is getting HTML and starts filtering:
    +#
    +stupid-server.example.com/

    Example of a simple block action. Say you've + seen an ad on your favourite page on example.com that you want to get rid of. + You have right-clicked the image, selected "copy image location" - system, so you have added them here:

    { +block } section. Note that { +handle-as-image + } need not be specified, since all URLs ending in + .gif will be tagged as images by the general rules as set + in default.action anyway:

    block } -www.a-popular-site.com/some/unobvious/path +www.example.com/nasty-ads/sponsor.gif another.popular.site.net/more/junk/here/

    Note that, assuming the banners in the above example have regular image - extensions (most do), - The URLs of dynamically generated banners, especially from large banner + farms, often don't use the well-known image file name extensions, which + makes it impossible for Privoxy to guess + the file type just by looking at the URL. + You can use the +handle-as-image - need not be specified, since all URLs ending in these extensions will - already have been tagged as images in the relevant section of - default.action by now.

    +block-as-image alias defined above for + these cases. + Note that objects which match this rule but then turn out NOT to be an + image are typically rendered as a "broken image" icon by the + browser. Use cautiously.

    Then you noticed that the default configuration breaks Forbes Magazine, +>
    { +block-as-image }
    +.doubleclick.net
    +/Realmedia/ads/
    +ar.atwola.com/

    Now you noticed that the default configuration breaks Forbes Magazine, but you were too lazy to find out which action is the culprit, and you were again too lazy to give feedback, so - you just used the fragilefragile alias on the site, and - -- whoa! -- it worked:

    whoa! -- it worked. The fragile + aliases disables those actions that are most likely to break a site. Also, + good for testing purposes to see if it is Privoxy + that is causing the problem or not.

    "fun" filtering specified here.

    Finally, you might think about how your favourite free websites are +> You might also worry about how your favourite free websites are funded, and find that they rely on displaying banner advertisements to survive. So you might want to specifically allow banners for those sites that you feel provide value to you:

    Note that Note that allow-adsallow-ads has been aliased to - -block - , + -filter{banners-by-size} - above.

    , and + -filter{banners-by-link} above.

    user.action is generally the best place to define + exceptions and additions to the default policies of + default.action. Some actions are safe to have their + default policies set here though. So let's set a default policy to have a + "blank" image as opposed to the checkerboard pattern for + ALL sites. "/" of course matches all URL + paths and patterns:

    { +set-image-blocker{blank} }
    +/ # ALL sites

    AppendixPrivoxy 3.1.1 User ManualPrivoxy 3.0.3 User Manual

    14. Appendix

    14. Appendix

    14.1. Regular Expressions

    14.1. Regular Expressions

    dir command in DOS. - *.**.* matches all filenames. The "special" character here is the asterisk which matches any and all characters. We can be - more specific and use ?? to match just individual characters. So /.*/banners/.*/.*/banners/.* - A simple example @@ -481,9 +485,9 @@ CLASS="QUOTE" CLASS="emphasis" >/.*/adv((er)?ts?|ertis(ing|ements?))?//.*/adv((er)?ts?|ertis(ing|ements?))?/ - @@ -605,9 +609,9 @@ CLASS="QUOTE" CLASS="emphasis" >/.*/advert[0-9]+\.(gif|jpe?g)/.*/advert[0-9]+\.(gif|jpe?g) - Again @@ -740,10 +744,12 @@ CLASS="SECT2" >

    14.2. 14.2. Privoxy's Internal Pages

    's Internal Pages

    Since

    @@ -818,7 +826,9 @@ CLASS="APPLICATION" editing of actions files:

    @@ -836,7 +846,9 @@ TARGET="_top" Show the source code version numbers:

    @@ -854,7 +866,9 @@ TARGET="_top" Show the browser's request headers:

    @@ -872,7 +886,9 @@ TARGET="_top" Show which actions apply to a URL and why:

    @@ -894,7 +910,9 @@ CLASS="QUOTE" to run, but only as a pass-through proxy, with no actions taking place:

    @@ -909,7 +927,9 @@ TARGET="_top" > Short cuts. Turn off, then on:

    @@ -921,7 +941,9 @@ TARGET="_top"

    @@ -942,7 +964,9 @@ CLASS="SECT3" >

    14.2.1. Bookmarklets

    14.2.1. Bookmarklets

    Below are some

    14.3. Chain of Events

    14.3. Chain of Events

    Let's take a quick look at the basic sequence of events when a web page is requested by your browser and

    14.4. Anatomy of an Action

    14.4. Anatomy of an Action

    The way

    Now the page displays ;-) Be sure to flush your browser's caches when - making such changes. Or, try using Shift+ReloadShift+Reload.

    But now what about a situation where we get no explicit matches like diff --git a/doc/webserver/user-manual/config.html b/doc/webserver/user-manual/config.html index 06b0042d..6e6354c2 100644 --- a/doc/webserver/user-manual/config.html +++ b/doc/webserver/user-manual/config.html @@ -1,13 +1,13 @@ + The Main Configuration FilePrivoxy 3.1.1 User ManualPrivoxy 3.0.3 User Manual

    7. The Main Configuration File

    7. The Main Configuration File

    Again, the main configuration file is named

    -

    Assigns the value Assigns the value /etc/privoxy/etc/privoxy to the option - confdirconfdir and thus indicates that the configuration directory is named "/etc/privoxy/".

    All options in the config file except for All options in the config file except for confdirconfdir and - logdirlogdir are optional. Watch out in the below description for what happens if you leave them unset.

    7.1. Configuration and Log File Locations

    7.1. Configuration and Log File Locations

    7.1.1. confdir

    7.1.1. confdir

    No trailing ""//", please

    7.1.2. logdir

    7.1.2. logdir

    No trailing ""//", please

    7.1.3. actionsfile

    7.1.3. actionsfileType of value:

    File name, relative to File name, relative to confdir, without the confdir, without the .action.action suffix

    Notes:

    Multiple Multiple actionsfileactionsfile lines are permitted, and are in fact recommended!

    7.1.4. filterfile

    7.1.4. filterfileType of value:

    File name, relative to File name, relative to confdirconfdir

    No textual content filtering takes place, i.e. all - +filter{{name}name} actions in the actions files are turned neutral.

    The - +filter{{name}name} - actions rely on the relevant filter (namename) to be defined in the filter file!

    default.filter
    that contains a bunch of handy filters for common problems is included in the distribution. - See the section on the filter action for a list.

    7.1.5. logfile

    7.1.5. logfile

    Type of value:

    File name, relative to File name, relative to logdirlogdir

    Effect if unset:

    No log file is used, all log messages go to the console ( No log file is used, all log messages go to the console (STDERRSTDERR).

    Notes:

    The windows version will additionally log to the console. -

    The logfile is where all logging and error messages are written. The level - of detail and number of messages are set with the debugdebug option (see below). The logfile can be useful for tracking down a problem with

    7.1.6. jarfile

    7.1.6. jarfile

    Type of value:

    File name, relative to File name, relative to logdirlogdir

    7.1.7. trustfile

    7.1.7. trustfile

    Type of value:

    File name, relative to File name, relative to confdirconfdir

    Effect if unset:

    The whole trust mechanism is turned off. +> The entire trust mechanism is turned off.

    Privoxy will only allow - access to sites that are named in the trustfile. - You can also mark sites as trusted referrers (with +), with - the effect that access to untrusted sites will be granted, if a link from a - trusted referrer was used. - The link target will then be added to the

    Prepending a ~ character limits access to this site + only (and any sub-paths within this site), e.g. + ~www.example.com. +

    Or, you can designate sites as trusted referrers, by + prepending the name with a + character. The effect is that + access to untrusted sites will be granted -- but only if a link from this + trusted referrer was used. The link target will then be added to the + "trustfile". - Possible applications include limiting Internet access for children. +> so that future, direct accesses will be granted. + Sites added via this mechanism do not become trusted referrers themselves + (i.e. they are added with a ~ designation).

    If you use If you use the + operator in the trust file, it may grow considerably over time. +>+ operator in the trust file, it may grow + considerably over time. +

    It is recommended that Privoxy be compiled with + the --disable-force, --disable-toggle and + --disable-editor options, if this feature is to be + used. +

    Possible applications include limiting Internet access for children.

    7.2. Local Set-up Documentation

    7.2. Local Set-up Documentation

    If you intend to operate

    7.2.1. user-manual

    7.2.1. user-manual

    http://www.privoxy.org/http://www.privoxy.org/versionversion/user-manual/ - will be used, where versionversion is the Privoxy
    user-manual  file:///usr/share/doc/privoxy-3.1.1/user-manual/
      user-manual  file:///usr/share/doc/privoxy-3.0.3/user-manual/ +

    Windows, in local filesystem, must use forward slash notation: +

      user-manual  file:/c:/some-dir/privoxy-3.0.3/user-manual/
    +

    Windows, UNC notation (with forward slashes): +

      user-manual  file://///some-server/some-path/privoxy-3.0.3/user-manual/

    user-manual  http://local-webserver/privoxy-user-manual/
      user-manual  http://local-webserver/privoxy-user-manual/

    7.2.2. trust-info-url

    7.2.2. trust-info-url

    If both If both admin-address and admin-address and proxy-info-urlproxy-info-url are unset, the whole "Local Privoxy Support" box on all generated pages will not be shown. @@ -1115,7 +1217,9 @@ CLASS="SECT3" >

    7.2.4. proxy-info-url

    7.2.4. proxy-info-url

    Notes:

    If both If both admin-address and admin-address and proxy-info-urlproxy-info-url are unset, the whole "Local Privoxy Support" box on all generated pages will not be shown. @@ -1184,16 +1288,18 @@ CLASS="SECT2" >

    7.3. Debugging

    7.3. Debugging

    These options are mainly useful when tracing a problem. Note that you might also want to invoke Privoxy with the with the --no-daemon--no-daemon command line option when debugging.

    7.3.1. debug

    7.3.1. debug

    To select multiple debug levels, you can either add them or use - multiple debugdebug lines.

    7.3.2. single-threaded

    7.3.2. single-threaded

    7.4. Access Control and Security

    7.4. Access Control and Security

    This section of the config file controls the security-relevant aspects of

    7.4.1. listen-address

    7.4.1. listen-address

    Type of value:

    [[IP-Address]:IP-Address]:PortPort

    Privoxy to untrusted users, you will - also want to turn off the enable-edit-actions and - enable-remote-toggle options!

    7.4.2. toggle

    7.4.2. toggle

    "toggled off" mode, i.e. behave like a normal, content-neutral proxy where all ad blocking, filtering, etc are disabled. See - enable-remote-toggleenable-remote-toggle below. This is not really useful anymore, since toggling is much easier via

    7.4.3. enable-remote-toggle

    7.4.3. enable-remote-toggle

    "ACLs" and and listen-addresslisten-address above) can toggle it for all users. So this option is

    7.4.4. enable-edit-actions

    7.4.4. enable-edit-actions

    "ACLs" and and listen-addresslisten-address above) can modify its configuration for all users. So this option is

    7.4.5. ACLs: permit-access and deny-access

    7.4.5. ACLs: permit-access and deny-accessType of value:

    src_addr[/src_addr[/src_masklensrc_masklen] - [dst_addr[/dst_addr[/dst_masklendst_masklen]]

    Where Where src_addrsrc_addr and - dst_addrdst_addr are IP addresses in dotted decimal notation or valid - DNS names, and src_masklensrc_masklen and - dst_masklendst_masklen are subnet masks in CIDR notation, i.e. integer values from 2 to 30 representing the length (in bits) of the network address. The masks and the whole destination part are optional. @@ -1894,9 +1996,9 @@ CLASS="EMPHASIS" >Effect if unset:

    Don't restrict access further than implied by Don't restrict access further than implied by listen-addresslisten-address

    Privoxy - talks only to IP addresses that match at least one permit-accesspermit-access line - and don't match any subsequent deny-accessdeny-access line. In other words, the - last match wins, with the default being deny-accessdeny-access.

    If Privoxy is using a forwarder (see is using a forwarder (see forwardforward below) - for a particular destination URL, the dst_addrdst_addr that is examined is the address of the forwarder and

    Explicitly define the default behavior if no ACL and - listen-addresslisten-address are set: "localhost" - is OK. The absence of a dst_addrdst_addr implies that

    7.4.6. buffer-limit

    7.4.6. buffer-limit

    Notes:

    For content filtering, i.e. the For content filtering, i.e. the +filter+filter and - +deanimate-gif+deanimate-gif actions, it is necessary that

    When a document buffer size reaches the When a document buffer size reaches the buffer-limitbuffer-limit, it is flushed to the client unfiltered and no further attempt to filter the rest of the document is made. Remember that there may be multiple threads - running, which might require up to buffer-limitbuffer-limit Kbytes

    7.5. Forwarding

    7.5. Forwarding

    This feature allows routing of HTTP requests through a chain of multiple proxies. @@ -2204,7 +2306,9 @@ CLASS="SECT3" >

    7.5.1. forward

    7.5.1. forward

    Type of value:

    target_patterntarget_pattern - http_parent[:http_parent[:portport]

    where where target_patterntarget_pattern is a URL pattern - that specifies to which requests (i.e. URLs) this forward rule shall apply. Use // to denote "all URLs". - http_parent[:http_parent[:portport] is the DNS name or IP address of the parent HTTP proxy through which the requests should be forwarded, optionally followed by its listening port (default: 8080). - Use a single dot (..) to denote "no forwarding"Notes:

    If If http_parenthttp_parent is "."

    7.5.2. forward-socks4 and forward-socks4a

    7.5.2. forward-socks4 and forward-socks4aType of value:

    target_patterntarget_pattern - socks_proxy[:socks_proxy[:portport] - http_parent[:http_parent[:portport]

    where where target_patterntarget_pattern is a URL pattern - that specifies to which requests (i.e. URLs) this forward rule shall apply. Use // to denote "all URLs". - http_parent and http_parent and socks_proxysocks_proxy - are IP addresses in dotted decimal notation or valid DNS names (http_parenthttp_parent may be "no HTTP forwarding"), and the optional - portport parameters are TCP ports, i.e. integer values from 1 to 64535

    Multiple lines are OK, they are checked in sequence, and the last match wins.

    The difference between The difference between forward-socks4 and forward-socks4 and forward-socks4aforward-socks4a is that in the SOCKS 4A protocol, the DNS resolution of the target hostname happens on the SOCKS server, while in SOCKS 4 it happens locally.

    If If http_parenthttp_parent is "."

    7.5.3. Advanced Forwarding Examples

    7.5.3. Advanced Forwarding Examples

    If you have links to multiple ISPs that provide various special content only to their subscribers, you can configure multiple squid locally, then chain as - browser -> squid -> privoxybrowser -> squid -> privoxy is the recommended way.

    Assuming that squid's address and port. - Squid normally uses port 3128. If unsure consult http_porthttp_port in squid.conf.

    You could just as well decide to only forward requests for Windows executables through - a virus-scanning parent proxy, say, on antivir.example.comantivir.example.com, port 8010:

    7.6. Windows GUI Options

    7.6. Windows GUI Options

    "Privoxy" is active. To turn off, set to 0.


       

    -

    will log messages to the console window:


       

    -

    Warning: Setting this to 0 will result in the buffer to grow infinitely and eat up all your memory!


       

    -

    is the maximum number of lines held in the log buffer. See above.


       

    -

    will highlight portions of the log messages with a bold-faced font:


       

    -

    The font used in the console window:


       

    -

    Font size used in the console window:


       

    -

    will appear as a button on the Task bar when minimized:


       

    -

    instead of closing the program (close with the exit option on the File menu).


       

    -

    will disconnect from and hide the command console.


       

    -

    Privoxy Configuration
    Privoxy 3.0.3 User Manual
    Privoxy 3.1.1 User Manual

    6. 6. Privoxy Configuration

    Configuration

    All

    6.1. Controlling 6.1. Controlling Privoxy with Your Web Browser

    with Your Web Browser

        Privoxy Menu

        Privoxy Menu

    Privoxy 3.0.3 User ManualPrivoxy 3.0.3 User Manual
            ▪  Documentation @@ -244,7 +250,9 @@ CLASS="SECT2" >

    6.2. Configuration Files Overview

    6.2. Configuration Files Overview

    For Unix, *BSD and Linux, all configuration files are located in Privoxy executable. The name - and number of configuration files has changed from previous versions, and is - subject to change as development progresses.

    executable.

    The installed defaults provide a reasonable starting point, though some settings may be aggressive by some standards. For the time being, the @@ -356,7 +362,8 @@ HREF="filter-file.html" >) can be used to re-write the raw page content, including viewable text as well as embedded HTML and JavaScript, and whatever else lurks on any given web page. The filtering jobs are only pre-defined here; - whether to apply them or not is up to the actions files. + whether to apply them or not is up to the actions files. Only one filter + file may be defined.

    All files use the ""##" character to denote a comment (the rest of the line will be ignored) and understand line continuation - through placing a backslash ("\\") as the very last character - in a line. If the ## is preceded by a backslash, it looses - its special function. Placing a ## in front of an otherwise valid configuration line to prevent it from being interpreted is called "commenting out" that line.

    old listening address.

    While under development, the configuration content is subject to change. - The below documentation may not be accurate by the time you read this. - Also, what constitutes a "default" setting, may change, so - please check all your configuration files on important issues.

    <META NAME="GENERATOR" -CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+ -"><LINK +CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="HOME" -TITLE="Privoxy 3.1.1 User Manual" +TITLE="Privoxy 3.0.3 User Manual" HREF="index.html"><LINK REL="PREVIOUS" TITLE="Templates" @@ -38,7 +38,7 @@ CELLSPACING="0" ><TH COLSPAN="3" ALIGN="center" ->Privoxy 3.1.1 User Manual</TH +>Privoxy 3.0.3 User Manual</TH ></TR ><TR ><TD @@ -74,8 +74,10 @@ CLASS="SECT1" ><H1 CLASS="SECT1" ><A -NAME="CONTACT">11. Contacting the Developers, Bug Reporting and Feature -Requests</H1 +NAME="CONTACT" +>11. Contacting the Developers, Bug Reporting and Feature +Requests</A +></H1 ><P > We value your feedback. In fact, we rely on it to improve <SPAN @@ -89,13 +91,15 @@ CLASS="SECT2" ><H2 CLASS="SECT2" ><A -NAME="CONTACT-SUPPORT">11.1. Get Support</H2 +NAME="CONTACT-SUPPORT" +>11.1. Get Support</A +></H2 ><P -> For casual users, our support forum at +> For casual users, our <A -HREF="http://sourceforge.net/" +HREF="http://sourceforge.net/tracker/?group_id=11118&atid=211118" TARGET="_top" ->SourceForge</A +>support forum at SourceForge</A > is probably best suited: <A @@ -116,7 +120,9 @@ CLASS="SECT2" ><H2 CLASS="SECT2" ><A -NAME="CONTACT-BUGS">11.2. Report Bugs</H2 +NAME="CONTACT-BUGS" +>11.2. Report Bugs</A +></H2 ><P > Please report all bugs <SPAN CLASS="emphasis" @@ -179,7 +185,9 @@ CLASS="SECT2" ><H2 CLASS="SECT2" ><A -NAME="CONTACT-FEATURE">11.3. Request New Features</H2 +NAME="CONTACT-FEATURE" +>11.3. Request New Features</A +></H2 ><P > You are welcome to submit ideas on new features or other proposals for improvement through our feature request tracker at @@ -194,7 +202,9 @@ CLASS="SECT2" ><H2 CLASS="SECT2" ><A -NAME="CONTACT-ADS">11.4. Report Ads or Other Actions-Related Problems</H2 +NAME="CONTACT-ADS" +>11.4. Report Ads or Other Actions-Related Problems</A +></H2 ><P > Please send feedback on ads that slipped through, innocent images that were blocked, and any other problems relating to the <TT @@ -235,7 +245,9 @@ CLASS="SECT2" ><H2 CLASS="SECT2" ><A -NAME="CONTACT-OTHER">11.5. Other</H2 +NAME="CONTACT-OTHER" +>11.5. Other</A +></H2 ><P >For any other issues, feel free to use the mailing lists. Technically interested users and people who wish to contribute to the project are also welcome on the developers list! diff --git a/doc/webserver/user-manual/copyright.html b/doc/webserver/user-manual/copyright.html index ee550945..3e0331d4 100644 --- a/doc/webserver/user-manual/copyright.html +++ b/doc/webserver/user-manual/copyright.html @@ -1,13 +1,13 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML ><HEAD ><TITLE >Privoxy Copyright, License and History
    Privoxy 3.1.1 User Manual

    12. 12. Privoxy Copyright, License and History

    Copyright, License and History

    Copyright © 2001, 2002 by Privoxy Developers Copyright © 2001 - 2004 by Privoxy Developers

    Some source code is based on code Copyright © 1997 by Anonymous Coders @@ -98,7 +100,9 @@ CLASS="SECT2" >

    12.1. License

    12.1. License

    12.2. History

    12.2. History

    In the beginning, there was the Privoxy, whose first - stable release, 3.0, was released August, 2002. + stable version, 3.0, was released August, 2002.

    12.3. Authors

    12.3. Authors

    Current Project Developers:

    Current Developement Team:

     Jon Foster
    +> Hal Burgiss (docs)
     Andreas Oesterhelt
    - Stefan Waldherr

    - Thomas Steudten
    - Rodney Stromlund


    Current Project Contributors:

    Current and Former Project Contributors:

     Rodrigo Barbosa (RPM specfiles)
    +> Johny Agotnes 
    + Rodrigo Barbosa (RPM specfiles)
     Moritz Barsnick
    - Hal Burgiss (docs)
    + Brian Dessent
    + Mattes Dolak 
    + Jon Foster
     Karsten Hopp (Red Hat)
     Alexander Lazic
    + Daniel Leite
     Gábor Lipták
    - Guy
    + Adam Lock (Win32)
    + Guy Laroche
     Haroon Rafique
     Roland Rosenfeld (Debian)
     Georg Sauthoff (Gentoo)
    - David Schmidt (OS/2, Mac OSX ports)
    + Thomas Steudten
     Joerg Strohmayer (Amiga)
    - Sarantis Paskalis

    + Sviatoslav Sviridov
    + Sarantis Paskalis
    + Stefan Waldherr

    Based in part on code originally developed by:

     Clifford Caoile
     Michael T. Davis
    + Brian Dessent
     Peter E
     Aaron Hamid
     Magnus Holmgren
    - Daniel Leite
    + Don Libes  
     Paul Lieverse
     David Mediavilla 
    + Oliver Stoeneberg
     Roberto Ragusa
     Maynard Riley
     Bart Schelstraete
    diff --git a/doc/webserver/user-manual/filter-file.html b/doc/webserver/user-manual/filter-file.html index 2ca2bb5b..19642832 100644 --- a/doc/webserver/user-manual/filter-file.html +++ b/doc/webserver/user-manual/filter-file.html @@ -1,13 +1,13 @@ + The Filter File

    Privoxy 3.1.1 User Manual

    9. The Filter File

    9. The Filter File

    All text substitutions that can be invoked through the - filter action must first be defined in the filter file, which is typically called default.filter and which can be - selected through the filterfile config option.

    Filtering works on any text-based document type, including plain - text, HTML, JavaScript, CSS etc. (all Filtering works on any text-based document type, including + HTML, JavaScript, CSS etc. (all text/*text/* - MIME types). Substitutions are made at the source level, so if - you want to except text/plain). + Substitutions are made at the source level, so if you want to "roll your own" filters, you should be - familiar with HTML syntax.

    "roll + your own" filters, you should be familiar with HTML syntax.

    Just like the keyword FILTER:FILTER:, followed by the filter's .

    Once a filter called Once a filter called namename has been defined in the filter file, it can be invoked by using an action of the form - +filter{{name}name} in any Perl's - s///s/// operator. If you are familiar with Perl, you will find this to be quite intuitive, and may want to look at the PCRS man page for the subtle differences to Perl behaviour. Most notably, the non-standard - option letter UU is supported, which turns the default to ungreedy matching.

    the - s///s/// operator's syntax and

    9.1. Filter File Tutorial

    9.1. Filter File Tutorial

    Now, let's complete our "foo" on each page. For global substitution, - we'll need to add the gg option:

    Following the header line and a comment, you see the job. Note that it uses - | as the delimiter instead of | as the delimiter instead of //, because the pattern contains a forward slash, which would otherwise have to be escaped - by a backslash (\\).

    Now, let's examine the pattern: it starts with the text Now, let's examine the pattern: it starts with the text <script.*<script.* - enclosed in parentheses. Since the dot matches any character, and ** means: text, i.e. it matches the whole page, from the start of the first <script> tag.

    That's more than we want, but the pattern continues: That's more than we want, but the pattern continues: document\.referrerdocument\.referrer matches only the exact string

    But there's still more pattern to go. The next element, again enclosed in parentheses, - is .*</script>. You already know what .*</script>. You already know what .*.* means, so the whole pattern translates to: Match from the start of the first <script> tag in a page to the end of the last <script> tag, provided that the text @@ -460,17 +469,17 @@ CLASS="QUOTE" >

    This is still not the whole story, since we have ignored the options and the parentheses: The portions of the page matched by sub-patterns that are enclosed in parentheses, will be - remembered and be available through the variables $1, $2, ...$1, $2, ... in - the substitute. The UU option switches to ungreedy matching, which means - that the first .*.* in the pattern will only "eat up""document.referrer", and that the second , and that the second .*.* will only span the text up to the "</script>" - tag. Furthermore, the ss option says that the match may span - multiple lines in the page, and the gg option again means that the substitution is global.

    "document.referrer" as as $1$1, and the part following - that string, up to and including the closing tag, as $2$2.

    Now the pattern is deciphered, but wasn't this about substituting things? So - lets look at the substitute: $1"Not Your Business!"$2$1"Not Your Business!"$2 is - easy to read: The text remembered as $1$1, followed by - "Not Your Business!""Not Your Business!" (including - the quotation marks!), followed by the text remembered as $2$2. This produces an exact copy of the original string, with the middle part (the "document.referrer") replaced by ) replaced by "Not Your - Business!".

    The whole job now reads: Replace "document.referrer" by - "Not Your Business!""Not Your Business!" wherever it appears inside a <script> tag. Note that this job won't break JavaScript syntax, since both the original and the replacement are syntactically valid @@ -595,31 +604,31 @@ s/window\.status\s*=\s*(['"]).*?\1/dUmMy=1/ig

    \s\s stands for whitespace characters (space, tab, newline, - carriage return, form feed), so that \s*\s* means: "zero or more whitespace". The . The ? in ? in .*?.*? - makes this matching of arbitrary text ungreedy. (Note that the UU - option is not set). The ['"]['"] construct means: "a single @@ -630,13 +639,13 @@ CLASS="EMPHASIS" >or a double quote". Finally, . Finally, \1\1 is - a backreference to the first parenthesis just like $1$1 above, with the difference that in the "<body>" tags with the dummy word tags with the dummy word nevernever. - Note that the ii option makes the pattern matching case-insensitive. Also note that ungreedy matching alone doesn't always guarantee - a minimal match: In the first parenthesis, we had to use [^>]*[^>]* - instead of .*.* to prevent the match from exceeding the <body> tag if it doesn't contain

    Note the Note the (?!\.com)(?!\.com) part (a so-called negative lookahead) in the job's pattern, which means: Don't match, if the string

    The The xx option in this job turns on extended syntax, and allows for e.g. the liberal use of (non-interpreted!) whitespace for nicer formatting.

    You get the idea?

    9.2. The Pre-defined Filters

    The distribution default.filter file contains a selection of +pre-defined filters for your convenience:

    js-annoyances

    The purpose of this filter is to get rid of particularly annoying JavaScript abuse. + To that end, it +

    • replaces JavaScript references to the browser's referrer information + with the string "Not Your Business!". This compliments the hide-referrer action on the content level. +

    • removes the bindings to the DOM's + unload + event which we feel has no right to exist and is responsible for most "exit consoles", i.e. + nasty windows that pop up when you close another one. +

    • removes code that causes new windows to be opened with undesired properties, such as being + full-screen, non-resizable, without location, status or menu bar etc. +

    +

    js-events

    This is a very radical measure. It removes virtually all JavaScript event bindings, which + means that scripts can not react to user actions such as mouse movements or clicks, window + resizing etc, anymore. +

    We strongly discourage using this filter as a default since it breaks + many legitimate scripts. It is meant for use only on extra-nasty sites (should you really + need to go there). +

    html-annoyances

    This filter will undo many common instances of HTML based abuse. +

    The BLINK and MARQUEE tags + are neutralized (yeah baby!), and browser windows will be created as + resizable (as of course they should be!), and will have location, + scroll and menu bars -- even if specified otherwise. +

    content-cookies

    Most cookies are set in the HTTP dialogue, where they can be intercepted + by the + crunch-incoming-cookies + and crunch-outgoing-cookies + actions. But web sites increasingly make use of HTML meta tags and JavaScript + to sneak cookies to the browser on the content level. +

    This filter disables HTML and JavaScript code that reads or sets cookies. Use + it wherever you would also use the cookie crunch actions. +

    refresh tags

    Disable any refresh tags if the interval is greater than nine seconds (so + that redirections done via refresh tags are not destroyed). This is useful + for dial-on-demand setups, or for those who find this HTML feature + annoying. +

    unsolicited-popups

    This filter attempts to prevent only "unsolicited" pop-up + windows from opening, yet still allow pop-up windows that the user + has explicitly chosen to open. It was added in version 3.0.1, + as an improvement over earlier such filters. +

    Technical note: The filter works by redefining the window.open JavaScript + function to a dummy function during the loading and rendering phase of each + HTML page access, and restoring the function afterwards. +

    all-popups

    Attempt to prevent all pop-up windows from opening. + Note this should be used with more discretion than the above, since it is + more likely to break some sites that require pop-ups for normal usage. Use + with caution. +

    img-reorder

    This is a helper filter that has no value if used alone. It makes the + banners-by-size and banners-by-link + (see below) filters more effective and should be enabled together with them. +

    banners-by-size

    This filter removes image tags purely based on what size they are. Fortunately + for us, many ads and banner images tend to conform to certain standardized + sizes, which makes this filter quite effective for ad stripping purposes. +

    Occasionally this filter will cause false positives on images that are not ads, + but just happen to be of one of the standard banner sizes. +

    banners-by-link

    This is an experimental filter that attempts to kill any banners if + their URLs seem to point to known or suspected click trackers. It is currently + not of much value and is not recommended for use by default. +

    webbugs

    Webbugs are small, invisible images (technically 1X1 GIF images), that + are used to track users across websites, and collect information on them. + As an HTML page is loaded by the browser, an embedded image tag causes the + browser to contact a third-party site, disclosing the tracking information + through the requested URL and/or cookies for that third-party domain, without + the use ever becoming aware of the interaction with the third-party site. + HTML-ized spam also uses a similar technique to verify email addresses. +

    This filter removes the HTML code that loads such "webbugs". +

    tiny-textforms

    A rather special-purpose filter that can be used to enlarge textareas (those + multi-line text boxes in web forms) and turn off hard word wrap in them. + It was written for the sourceforge.net tracker system where such boxes are + a nuisance, but it can be handy on other sites, too. +

    It is not recommended to use this filter as a default. +

    jumping-windows

    Many consider windows that move, or resize themselves to be abusive. This filter + neutralizes the related JavaScript code. Note that some sites might not display + or behave as intended when using this filter. +

    frameset-borders

    Some web designers seem to assume that everyone in the world will view their + web sites using the same browser brand and version, screen resolution etc, + because only that assumption could explain why they'd use static frame sizes, + yet prevent their frames from being resized by the user, should they be too + small to show their whole content. +

    This filter removes the related HTML code. It should only be applied to sites + which need it. +

    demoronizer

    Many Microsoft products that generate HTML use non-standard extensions (read: + violations) of the ISO 8859-1 aka Latin-1 character set. This causes those + HTML documents to display with errors on standard-compliant platforms. +

    This filter translates the MS-only characters into Latin-1 equivalents. + It is not necessary when using MS products, and will cause corruption of + all documents that use 8-bit character sets other than Latin-1. It's mostly + worthwhile for Europeans on non-MS platforms, if wierd garbage characters + sometimes appear on some pages. +

    shockwave-flash

    A filter for shockwave haters. As the name suggests, this filter strips code + out of web pages that is used to embed shockwave flash objects. +

    quicktime-kioskmode

    Change HTML code that embeds Quicktime objects so that kioskmode, which + prevents saving, is disabled. +

    fun

    Text replacements for subversive browsing fun. Make fun of your favorite + Monopolist or play buzzword bingo. +

    crude-parental

    A demonstration-only filter that shows how Privoxy + can be used to delete web content on a keyword basis. +

    ie-exploits

    A collection of text replacements to disable malicious HTML and JavaScript + code that exploits known security holes in Internet Explorer. +

    Presently, it only protects against Nimda and a cross-site scripting bug, and + would need active maintenance to provide more substantial protection. +

    site-specifics

    Some web sites have very specific problems, the cure for which doesn't apply + anywhere else, or could even cause damage on other sites. +

    This is a collection of such site-specific cures which should only be applied + to the sites they were intended for, which is what the supplied + default.action file does. Users shouldn't need to change + anything regarding this filter. +