[Pkg-openldap-devel] r883 - in openldap/vendor/openldap-release: . build contrib/ldapc++ contrib/ldapc++/examples contrib/ldapc++/src contrib/slapd-modules/addpartial doc/guide/admin doc/guide/images doc/guide/images/src doc/man/man1 doc/man/man3 doc/man/man5 doc/man/man8 include libraries/liblber libraries/libldap_r libraries/liblutil servers/slapd servers/slapd/back-bdb servers/slapd/back-ldif servers/slapd/back-meta servers/slapd/back-monitor servers/slapd/back-sql servers/slapd/overlays servers/slapd/schema servers/slapd/shell-backends servers/slapd/slapi tests/scripts

Steve Langasek vorlon at alioth.debian.org
Sat Dec 15 09:30:13 UTC 2007


Author: vorlon
Date: 2007-12-15 09:30:12 +0000 (Sat, 15 Dec 2007)
New Revision: 883

Added:
   openldap/vendor/openldap-release/doc/guide/admin/allmail-en.png
   openldap/vendor/openldap-release/doc/guide/admin/allusersgroup-en.png
   openldap/vendor/openldap-release/doc/guide/admin/dual_dc.png
   openldap/vendor/openldap-release/doc/guide/admin/refint.png
   openldap/vendor/openldap-release/doc/guide/images/src/
   openldap/vendor/openldap-release/doc/guide/images/src/allmail-en.svg
   openldap/vendor/openldap-release/doc/guide/images/src/allusersgroup-en.svg
   openldap/vendor/openldap-release/doc/guide/images/src/dual_dc.svg
   openldap/vendor/openldap-release/doc/guide/images/src/refint.svg
Modified:
   openldap/vendor/openldap-release/CHANGES
   openldap/vendor/openldap-release/build/man.mk
   openldap/vendor/openldap-release/build/version.var
   openldap/vendor/openldap-release/contrib/ldapc++/configure
   openldap/vendor/openldap-release/contrib/ldapc++/configure.in
   openldap/vendor/openldap-release/contrib/ldapc++/examples/urlTest.cpp
   openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPAttribute.cpp
   openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPAttributeList.cpp
   openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPBindRequest.cpp
   openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPExtRequest.cpp
   openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPModList.cpp
   openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPResult.cpp
   openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPUrl.cpp
   openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPUrl.h
   openldap/vendor/openldap-release/contrib/ldapc++/src/Makefile.am
   openldap/vendor/openldap-release/contrib/ldapc++/src/Makefile.in
   openldap/vendor/openldap-release/contrib/ldapc++/src/StringList.cpp
   openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/Makefile
   openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/README
   openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/addpartial-overlay.c
   openldap/vendor/openldap-release/doc/guide/admin/Makefile
   openldap/vendor/openldap-release/doc/guide/admin/abstract.sdf
   openldap/vendor/openldap-release/doc/guide/admin/admin.sdf
   openldap/vendor/openldap-release/doc/guide/admin/appendix-changes.sdf
   openldap/vendor/openldap-release/doc/guide/admin/appendix-common-errors.sdf
   openldap/vendor/openldap-release/doc/guide/admin/appendix-configs.sdf
   openldap/vendor/openldap-release/doc/guide/admin/appendix-contrib.sdf
   openldap/vendor/openldap-release/doc/guide/admin/appendix-deployments.sdf
   openldap/vendor/openldap-release/doc/guide/admin/appendix-ldap-result-codes.sdf
   openldap/vendor/openldap-release/doc/guide/admin/appendix-recommended-versions.sdf
   openldap/vendor/openldap-release/doc/guide/admin/appendix-upgrading.sdf
   openldap/vendor/openldap-release/doc/guide/admin/aspell.en.pws
   openldap/vendor/openldap-release/doc/guide/admin/backends.sdf
   openldap/vendor/openldap-release/doc/guide/admin/config.sdf
   openldap/vendor/openldap-release/doc/guide/admin/dbtools.sdf
   openldap/vendor/openldap-release/doc/guide/admin/glossary.sdf
   openldap/vendor/openldap-release/doc/guide/admin/guide.book
   openldap/vendor/openldap-release/doc/guide/admin/guide.html
   openldap/vendor/openldap-release/doc/guide/admin/guide.sdf
   openldap/vendor/openldap-release/doc/guide/admin/index.sdf
   openldap/vendor/openldap-release/doc/guide/admin/install.sdf
   openldap/vendor/openldap-release/doc/guide/admin/intro.sdf
   openldap/vendor/openldap-release/doc/guide/admin/maintenance.sdf
   openldap/vendor/openldap-release/doc/guide/admin/master.sdf
   openldap/vendor/openldap-release/doc/guide/admin/monitoringslapd.sdf
   openldap/vendor/openldap-release/doc/guide/admin/overlays.sdf
   openldap/vendor/openldap-release/doc/guide/admin/preface.sdf
   openldap/vendor/openldap-release/doc/guide/admin/quickstart.sdf
   openldap/vendor/openldap-release/doc/guide/admin/referrals.sdf
   openldap/vendor/openldap-release/doc/guide/admin/replication.sdf
   openldap/vendor/openldap-release/doc/guide/admin/runningslapd.sdf
   openldap/vendor/openldap-release/doc/guide/admin/sasl.sdf
   openldap/vendor/openldap-release/doc/guide/admin/schema.sdf
   openldap/vendor/openldap-release/doc/guide/admin/security.sdf
   openldap/vendor/openldap-release/doc/guide/admin/slapdconf2.sdf
   openldap/vendor/openldap-release/doc/guide/admin/slapdconfig.sdf
   openldap/vendor/openldap-release/doc/guide/admin/title.sdf
   openldap/vendor/openldap-release/doc/guide/admin/tls.sdf
   openldap/vendor/openldap-release/doc/guide/admin/troubleshooting.sdf
   openldap/vendor/openldap-release/doc/guide/admin/tuning.sdf
   openldap/vendor/openldap-release/doc/man/man1/ldapmodify.1
   openldap/vendor/openldap-release/doc/man/man1/ldappasswd.1
   openldap/vendor/openldap-release/doc/man/man3/ldap_extended_operation.3
   openldap/vendor/openldap-release/doc/man/man3/ldap_get_values.3
   openldap/vendor/openldap-release/doc/man/man3/ldap_parse_vlv_control.3
   openldap/vendor/openldap-release/doc/man/man3/ldap_url.3
   openldap/vendor/openldap-release/doc/man/man5/slapd-config.5
   openldap/vendor/openldap-release/doc/man/man5/slapd.conf.5
   openldap/vendor/openldap-release/doc/man/man5/slapo-ppolicy.5
   openldap/vendor/openldap-release/doc/man/man8/slapacl.8
   openldap/vendor/openldap-release/doc/man/man8/slapadd.8
   openldap/vendor/openldap-release/doc/man/man8/slapauth.8
   openldap/vendor/openldap-release/doc/man/man8/slapcat.8
   openldap/vendor/openldap-release/doc/man/man8/slapdn.8
   openldap/vendor/openldap-release/doc/man/man8/slapindex.8
   openldap/vendor/openldap-release/doc/man/man8/slaptest.8
   openldap/vendor/openldap-release/include/ldap_int_thread.h
   openldap/vendor/openldap-release/include/ldap_pvt_thread.h
   openldap/vendor/openldap-release/include/lutil.h
   openldap/vendor/openldap-release/libraries/liblber/Makefile.in
   openldap/vendor/openldap-release/libraries/libldap_r/thr_cthreads.c
   openldap/vendor/openldap-release/libraries/libldap_r/thr_nt.c
   openldap/vendor/openldap-release/libraries/libldap_r/thr_posix.c
   openldap/vendor/openldap-release/libraries/libldap_r/thr_pth.c
   openldap/vendor/openldap-release/libraries/libldap_r/thr_stub.c
   openldap/vendor/openldap-release/libraries/libldap_r/thr_thr.c
   openldap/vendor/openldap-release/libraries/libldap_r/tpool.c
   openldap/vendor/openldap-release/libraries/liblutil/fetch.c
   openldap/vendor/openldap-release/libraries/liblutil/utils.c
   openldap/vendor/openldap-release/servers/slapd/Makefile.in
   openldap/vendor/openldap-release/servers/slapd/abandon.c
   openldap/vendor/openldap-release/servers/slapd/acl.c
   openldap/vendor/openldap-release/servers/slapd/attr.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/add.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/back-bdb.h
   openldap/vendor/openldap-release/servers/slapd/back-bdb/cache.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/dbcache.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/delete.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/dn2entry.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/dn2id.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/filterindex.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/index.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/init.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/modify.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/modrdn.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/monitor.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/proto-bdb.h
   openldap/vendor/openldap-release/servers/slapd/back-bdb/search.c
   openldap/vendor/openldap-release/servers/slapd/back-bdb/tools.c
   openldap/vendor/openldap-release/servers/slapd/back-ldif/ldif.c
   openldap/vendor/openldap-release/servers/slapd/back-meta/config.c
   openldap/vendor/openldap-release/servers/slapd/back-meta/conn.c
   openldap/vendor/openldap-release/servers/slapd/back-monitor/operation.c
   openldap/vendor/openldap-release/servers/slapd/back-monitor/sent.c
   openldap/vendor/openldap-release/servers/slapd/back-sql/back-sql.h
   openldap/vendor/openldap-release/servers/slapd/back-sql/delete.c
   openldap/vendor/openldap-release/servers/slapd/back-sql/schema-map.c
   openldap/vendor/openldap-release/servers/slapd/back-sql/search.c
   openldap/vendor/openldap-release/servers/slapd/backglue.c
   openldap/vendor/openldap-release/servers/slapd/bconfig.c
   openldap/vendor/openldap-release/servers/slapd/cancel.c
   openldap/vendor/openldap-release/servers/slapd/config.c
   openldap/vendor/openldap-release/servers/slapd/connection.c
   openldap/vendor/openldap-release/servers/slapd/controls.c
   openldap/vendor/openldap-release/servers/slapd/daemon.c
   openldap/vendor/openldap-release/servers/slapd/filter.c
   openldap/vendor/openldap-release/servers/slapd/init.c
   openldap/vendor/openldap-release/servers/slapd/limits.c
   openldap/vendor/openldap-release/servers/slapd/main.c
   openldap/vendor/openldap-release/servers/slapd/mods.c
   openldap/vendor/openldap-release/servers/slapd/operation.c
   openldap/vendor/openldap-release/servers/slapd/overlays/accesslog.c
   openldap/vendor/openldap-release/servers/slapd/overlays/auditlog.c
   openldap/vendor/openldap-release/servers/slapd/overlays/collect.c
   openldap/vendor/openldap-release/servers/slapd/overlays/dds.c
   openldap/vendor/openldap-release/servers/slapd/overlays/dynlist.c
   openldap/vendor/openldap-release/servers/slapd/overlays/memberof.c
   openldap/vendor/openldap-release/servers/slapd/overlays/pcache.c
   openldap/vendor/openldap-release/servers/slapd/overlays/ppolicy.c
   openldap/vendor/openldap-release/servers/slapd/overlays/syncprov.c
   openldap/vendor/openldap-release/servers/slapd/overlays/translucent.c
   openldap/vendor/openldap-release/servers/slapd/overlays/unique.c
   openldap/vendor/openldap-release/servers/slapd/overlays/valsort.c
   openldap/vendor/openldap-release/servers/slapd/proto-slap.h
   openldap/vendor/openldap-release/servers/slapd/result.c
   openldap/vendor/openldap-release/servers/slapd/sasl.c
   openldap/vendor/openldap-release/servers/slapd/schema/core.ldif
   openldap/vendor/openldap-release/servers/slapd/schema/core.schema
   openldap/vendor/openldap-release/servers/slapd/schema_init.c
   openldap/vendor/openldap-release/servers/slapd/shell-backends/passwd-shell.c
   openldap/vendor/openldap-release/servers/slapd/slap.h
   openldap/vendor/openldap-release/servers/slapd/slapadd.c
   openldap/vendor/openldap-release/servers/slapd/slapcommon.c
   openldap/vendor/openldap-release/servers/slapd/slapd.ldif
   openldap/vendor/openldap-release/servers/slapd/slapi/plugin.c
   openldap/vendor/openldap-release/servers/slapd/slapi/slapi_utils.c
   openldap/vendor/openldap-release/servers/slapd/syncrepl.c
   openldap/vendor/openldap-release/tests/scripts/conf.sh
   openldap/vendor/openldap-release/tests/scripts/defines.sh
   openldap/vendor/openldap-release/tests/scripts/test020-proxycache
   openldap/vendor/openldap-release/tests/scripts/test024-unique
   openldap/vendor/openldap-release/tests/scripts/test050-syncrepl-multimaster
Log:
Load openldap-2.4.7 into vendor/openldap-release.

Modified: openldap/vendor/openldap-release/CHANGES
===================================================================
--- openldap/vendor/openldap-release/CHANGES	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/CHANGES	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,47 @@
 OpenLDAP 2.4 Change Log
 
-OpenLDAP 2.4.6 Release (10/31)
+OpenLDAP 2.4.7 Release (2007/12/14)
+	Added slapd ordered indexing of integer attributes (ITS#5239)
+	Fixed slapd paged results control handling (ITS#5191)
+	Fixed slapd sasl-host parsing (ITS#5209)
+	Fixed slapd filter normalization (ITS#5212)
+	Fixed slapd multiple suffix checking (ITS#5186)
+	Fixed slapd paged results handling when using rootdn (ITS#5230)
+	Fixed slapd syncrepl presentlist handling (ITS#5231)
+	Fixed slapd core schema 'c' definition for RFC4519 (ITS#5236)
+	Fixed slapd 3-way Multi-Master Replication (ITS#5238)
+	Fixed slapd hash collisions in index slots (ITS#5183)
+	Fixed slapd replication of dSAOperation attributes (ITS#5268)
+	Fixed slapadd contextCSN updating (ITS#5225)
+	Fixed slapd-bdb/hdb to report and fail on internal errors (ITS#5232)
+	Fixed slapd-bdb/hdb dn2entry lock bug (ITS#5257)
+	Fixed slapd-bdb/hdb dn2id lock bug (ITS#5262)
+	Fixed slapd-hdb caching on rename ops (ITS#5221)
+	Fixed slapo-accesslog abandoned op cleanup (ITS#5161)
+	Fixed slapo-dds deleting from nonexistent db (ITS#5267)
+	Fixed slapo-memberOf deleted values saving (ITS#5258)
+	Fixed slapo-pcache op->o_abandon handling (ITS#5187)
+	Fixed slapo-ppolicy single password check on modify (ITS#5146)
+	Fixed slapo-ppolicy internal search (ITS#5235)
+	Fixed slapo-syncprov refresh and persist cookie sending (ITS#5210)
+	Fixed slapo-syncprov ignore invalid cookies (ITS#5211)
+	Fixed slapo-translucent interaction with slapo-rwm (ITS#4889)
+	Updated contrib addpartial module (ITS#3593)
+	Build Environment
+		Fixed liblber socket library linking (ITS#5224)
+		Fixed Windows slapd.def rules (ITS#5215)
+	Documentation
+		Fixed grammar errors (ITS#5223)
+		Refint overlay doc contribution (ITS#5217)
+		Dynamic Lists doc contribution to the admin guide (ITS#5216)
+		Fixed ldappasswd(1) and ldapmodify(1) typos (ITS#5269)
+		Fixed domain factor typos (ITS#5237)
+		Fixed slapd.conf(5) maxderefdepth default value typo (ITS#5200)
+		Clarified slapd.conf(5) limits issues in syncrepl (ITS#5243)
+		Fixed slapd-config(5) maxderefdepth default value typo (ITS#5200)
+		Patches for minor typos in man pages (ITS#5228)
+		admin24/replication.sdf spelling (ITS#5270)
+
+
+OpenLDAP 2.4.6 Release (2007/10/31)
 	Initial release for "general use".

Modified: openldap/vendor/openldap-release/build/man.mk
===================================================================
--- openldap/vendor/openldap-release/build/man.mk	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/build/man.mk	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/ldap/build/man.mk,v 1.32.2.2 2007/08/31 23:13:50 quanah Exp $
+# $OpenLDAP: pkg/ldap/build/man.mk,v 1.32.2.3 2007/11/09 02:55:50 hyc Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 1998-2007 The OpenLDAP Foundation.
@@ -23,7 +23,7 @@
 	PAGES=`cd $(srcdir); echo *.$(MANSECT)`; \
 	for page in $$PAGES; do \
 		$(SED) -e "s%LDVERSION%$(VERSION)%" \
-			-e 's%ETCDIR%$(sysconfdir)%' \
+			-e 's%ETCDIR%$(sysconfdir)%g' \
 			-e 's%LOCALSTATEDIR%$(localstatedir)%' \
 			-e 's%SYSCONFDIR%$(sysconfdir)%' \
 			-e 's%DATADIR%$(datadir)%' \

Modified: openldap/vendor/openldap-release/build/version.var
===================================================================
--- openldap/vendor/openldap-release/build/version.var	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/build/version.var	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 #! /bin/sh
-# $OpenLDAP: pkg/ldap/build/version.var,v 1.9.2.16 2007/10/31 14:03:16 kurt Exp $
+# $OpenLDAP: pkg/ldap/build/version.var,v 1.9.2.19 2007/12/13 20:56:24 kurt Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 1998-2007 The OpenLDAP Foundation.
@@ -15,9 +15,9 @@
 ol_package=OpenLDAP
 ol_major=2
 ol_minor=4
-ol_patch=6
-ol_api_inc=20406
+ol_patch=7
+ol_api_inc=20407
 ol_api_current=2
-ol_api_revision=2
+ol_api_revision=3
 ol_api_age=0
-ol_release_date="2007/10/31"
+ol_release_date="2007/12/14"

Modified: openldap/vendor/openldap-release/contrib/ldapc++/configure
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/configure	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/configure	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for ldapcpplib 0.0.4.
+# Generated by GNU Autoconf 2.61 for ldapcpplib 0.0.5.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
 # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
@@ -726,8 +726,8 @@
 # Identity of this package.
 PACKAGE_NAME='ldapcpplib'
 PACKAGE_TARNAME='ldapcpplib'
-PACKAGE_VERSION='0.0.4'
-PACKAGE_STRING='ldapcpplib 0.0.4'
+PACKAGE_VERSION='0.0.5'
+PACKAGE_STRING='ldapcpplib 0.0.5'
 PACKAGE_BUGREPORT=''
 
 ac_unique_file="src/LDAPConnection.h"
@@ -1389,7 +1389,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures ldapcpplib 0.0.4 to adapt to many kinds of systems.
+\`configure' configures ldapcpplib 0.0.5 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1459,7 +1459,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ldapcpplib 0.0.4:";;
+     short | recursive ) echo "Configuration of ldapcpplib 0.0.5:";;
    esac
   cat <<\_ACEOF
 
@@ -1563,7 +1563,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-ldapcpplib configure 0.0.4
+ldapcpplib configure 0.0.5
 generated by GNU Autoconf 2.61
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1577,7 +1577,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by ldapcpplib $as_me 0.0.4, which was
+It was created by ldapcpplib $as_me 0.0.5, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   $ $0 $@
@@ -2268,7 +2268,7 @@
 
 # Define the identity of the package.
  PACKAGE='ldapcpplib'
- VERSION='0.0.4'
+ VERSION='0.0.5'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -20443,7 +20443,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by ldapcpplib $as_me 0.0.4, which was
+This file was extended by ldapcpplib $as_me 0.0.5, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -20496,7 +20496,7 @@
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-ldapcpplib config.status 0.0.4
+ldapcpplib config.status 0.0.5
 configured by $0, generated by GNU Autoconf 2.61,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 

Modified: openldap/vendor/openldap-release/contrib/ldapc++/configure.in
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/configure.in	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/configure.in	2007-12-15 09:30:12 UTC (rev 883)
@@ -8,7 +8,7 @@
 dnl define([AC_CACHE_LOAD], )
 dnl define([AC_CACHE_SAVE], )
 
-AC_INIT(ldapcpplib, 0.0.4)
+AC_INIT(ldapcpplib, 0.0.5)
 AC_CONFIG_SRCDIR(src/LDAPConnection.h)
 AM_INIT_AUTOMAKE(foreign)
 AM_CONFIG_HEADER(src/config.h)

Modified: openldap/vendor/openldap-release/contrib/ldapc++/examples/urlTest.cpp
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/examples/urlTest.cpp	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/examples/urlTest.cpp	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,6 @@
 #include <LDAPUrl.h>
 #include <LDAPException.h>
+#include <cstdlib>
 #include <iostream>
 
 int main(int argc, char *argv[]) {

Modified: openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPAttribute.cpp
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPAttribute.cpp	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPAttribute.cpp	2007-12-15 09:30:12 UTC (rev 883)
@@ -12,7 +12,7 @@
 
 
 #include <ldap.h> 
-//#include <ctype.h>
+#include <cstdlib>
 
 #include "debug.h"
 #include "StringList.h"

Modified: openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPAttributeList.cpp
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPAttributeList.cpp	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPAttributeList.cpp	2007-12-15 09:30:12 UTC (rev 883)
@@ -13,6 +13,8 @@
 #include "LDAPAsynConnection.h"
 #include "LDAPMessage.h"
 
+#include <cstdlib>
+
 using namespace std;
 
 // little helper function for doing case insensitve string comparison

Modified: openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPBindRequest.cpp
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPBindRequest.cpp	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPBindRequest.cpp	2007-12-15 09:30:12 UTC (rev 883)
@@ -10,6 +10,8 @@
 #include "LDAPBindRequest.h"
 #include "LDAPException.h"
 
+#include <cstdlib>
+
 using namespace std;
 
 LDAPBindRequest::LDAPBindRequest(const LDAPBindRequest& req) :

Modified: openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPExtRequest.cpp
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPExtRequest.cpp	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPExtRequest.cpp	2007-12-15 09:30:12 UTC (rev 883)
@@ -12,6 +12,8 @@
 #include "LDAPException.h"
 #include "LDAPResult.h"
 
+#include <cstdlib>
+
 using namespace std;
 
 LDAPExtRequest::LDAPExtRequest(const LDAPExtRequest& req) :

Modified: openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPModList.cpp
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPModList.cpp	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPModList.cpp	2007-12-15 09:30:12 UTC (rev 883)
@@ -7,6 +7,8 @@
 #include "LDAPModList.h"
 #include "debug.h"
 
+#include <cstdlib>
+
 using namespace std;
 
 LDAPModList::LDAPModList(){

Modified: openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPResult.cpp
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPResult.cpp	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPResult.cpp	2007-12-15 09:30:12 UTC (rev 883)
@@ -10,6 +10,8 @@
 #include "LDAPRequest.h"
 #include "LDAPException.h"
 
+#include <cstdlib>
+
 using namespace std;
 
 LDAPResult::LDAPResult(const LDAPRequest *req, LDAPMessage *msg) : 

Modified: openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPUrl.cpp
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPUrl.cpp	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPUrl.cpp	2007-12-15 09:30:12 UTC (rev 883)
@@ -70,7 +70,7 @@
     regenerate = true;
 }
 
-const string& LDAPUrl::getURLString()
+const string& LDAPUrl::getURLString() const
 {
     if (regenerate){
         this->components2Url();
@@ -323,7 +323,7 @@
 }
 
 
-void LDAPUrl::components2Url()
+void LDAPUrl::components2Url() const
 {
     std::ostringstream url; 
     std::string encoded = "";
@@ -395,7 +395,7 @@
 
 void LDAPUrl::percentEncode( const std::string &src, 
         std::string &dest, 
-        int flags)
+        int flags) const
 {
     std::ostringstream o;
     o.setf(std::ios::hex, std::ios::basefield);

Modified: openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPUrl.h
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPUrl.h	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/src/LDAPUrl.h	2007-12-15 09:30:12 UTC (rev 883)
@@ -58,7 +58,7 @@
         /**
          * @return The complete URL as a string
          */
-        const std::string& getURLString();
+        const std::string& getURLString() const;
 
         /**
          * Set the URL member attribute
@@ -140,7 +140,7 @@
          */
         void percentEncode( const std::string& src, 
                     std::string& dest, 
-                    int flags=0 );
+                    int flags=0 ) const;
    
     protected : 
         /**
@@ -158,13 +158,13 @@
          * (this function is mostly for internal use and gets called 
          * automatically whenever necessary)
          */
-        void components2Url();
+        void components2Url() const;
         
         void string2list(const std::string &src, StringList& sl,
                 bool percentDecode=false);
 
     protected :
-        bool regenerate;
+        mutable bool regenerate;
         int m_Port;
         int m_Scope;
         std::string m_Host;
@@ -172,7 +172,7 @@
         std::string m_Filter;
         StringList m_Attrs;
         StringList m_Extensions;
-        std::string m_urlString;
+        mutable std::string m_urlString;
         std::string m_Scheme;
         enum mode { base, attrs, scope, filter, extensions };
 };

Modified: openldap/vendor/openldap-release/contrib/ldapc++/src/Makefile.am
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/src/Makefile.am	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/src/Makefile.am	2007-12-15 09:30:12 UTC (rev 883)
@@ -85,5 +85,5 @@
                 LDAPSearchRequest.h 
 
 libldapcpp_la_LIBADD = -lldap -llber
-libldapcpp_la_LDFLAGS = -version-info 0:4:0
+libldapcpp_la_LDFLAGS = -version-info 0:5:0
 

Modified: openldap/vendor/openldap-release/contrib/ldapc++/src/Makefile.in
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/src/Makefile.in	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/src/Makefile.in	2007-12-15 09:30:12 UTC (rev 883)
@@ -280,7 +280,7 @@
                 LDAPSearchRequest.h 
 
 libldapcpp_la_LIBADD = -lldap -llber
-libldapcpp_la_LDFLAGS = -version-info 0:4:0
+libldapcpp_la_LDFLAGS = -version-info 0:5:0
 all: config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 

Modified: openldap/vendor/openldap-release/contrib/ldapc++/src/StringList.cpp
===================================================================
--- openldap/vendor/openldap-release/contrib/ldapc++/src/StringList.cpp	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/ldapc++/src/StringList.cpp	2007-12-15 09:30:12 UTC (rev 883)
@@ -6,6 +6,8 @@
 #include "StringList.h"
 #include "debug.h"
 
+#include <cstdlib>
+
 using namespace std;
 
 StringList::StringList(){

Modified: openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/Makefile
===================================================================
--- openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/Makefile	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/Makefile	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,6 +1,6 @@
-OPENLDAP_SRC=/usr/local/src/openldap-2.3.32
+OPENLDAP_SRC=/usr/local/src/openldap-2.4.6
 CPPFLAGS+=-I${OPENLDAP_SRC}/include -I${OPENLDAP_SRC}/servers/slapd
-LDFLAGS+=-L/usr/local/openldap-2.3.32/lib
+LDFLAGS+=-L/usr/local/openldap-2.4.6
 CC=gcc
 
 all: addpartial-overlay.so

Modified: openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/README
===================================================================
--- openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/README	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/README	2007-12-15 09:30:12 UTC (rev 883)
@@ -16,11 +16,9 @@
     in the entry in the slapd DB, a replace will be done with an empty list of
     values).
 
-    Once a modify takes place, the addpartial overlay will write changes to the
-    replog (using the slap_replog_cb).  If you are using syncrepl for
-    replication, the syncprov overlay will properly process the change, provided
-    that addpartial is the first overlay to run.  Please see the CAVEATS for
-    more specifics about this.
+    Once a modify takes place, the syncprov overlay will properly process the
+    change, provided that addpartial is the first overlay to run.  Please see
+    the CAVEATS for more specifics about this.
 
     The addpartial overlay makes it easy to replicate full entries to a slapd 
     instance without worrying about the differences between entries or even if

Modified: openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/addpartial-overlay.c
===================================================================
--- openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/addpartial-overlay.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/contrib/slapd-modules/addpartial/addpartial-overlay.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /**
- * $Id: addpartial-overlay.c 5376 2007-01-26 20:03:13Z dhawes $
+ * $Id: addpartial-overlay.c 6588 2007-11-07 18:29:25Z dhawes $
  *
  * Copyright (C) 2004 Virginia Tech, David Hawes.
  * All rights reserved.
@@ -16,8 +16,8 @@
  *
  * Author:  David H. Hawes, Jr.
  * Email:   dhawes at vt.edu
- * Version: $Revision: 5376 $
- * Updated: $Date: 2007-01-26 15:03:13 -0500 (Fri, 26 Jan 2007) $
+ * Version: $Revision: 6588 $
+ * Updated: $Date: 2007-11-07 13:29:25 -0500 (Wed, 07 Nov 2007) $
  * 
  * addpartial-overlay
  *
@@ -31,12 +31,7 @@
  */
 
 #include "portable.h" 
-#include <stdio.h>
-#include <ac/string.h>
-#include <ac/socket.h>
 #include "slap.h"
-#include <unistd.h>
-#include <lutil.h>
 
 static int addpartial_search_cb( Operation *op, SlapReply *rs);
 static int collect_error_msg_cb( Operation *op, SlapReply *rs);
@@ -159,6 +154,7 @@
                     mod->sml_type.bv_len = strlen(mod->sml_type.bv_val);
                     mod->sml_values = attr->a_vals;
                     mod->sml_nvalues = attr->a_nvals;
+                    mod->sml_numvals = attr->a_numvals;
                     *modtail = mod;
                     modtail = &mod->sml_next;
                 }
@@ -198,6 +194,7 @@
                         mod->sml_type.bv_len = strlen(mod->sml_type.bv_val);
                         mod->sml_values = attr->a_vals;
                         mod->sml_nvalues = attr->a_nvals;
+                        mod->sml_numvals = attr->a_numvals;
                         *modtail = mod;
                         modtail = &mod->sml_next;
                         continue;
@@ -253,6 +250,7 @@
                             mod->sml_type.bv_len = strlen(mod->sml_type.bv_val);
                             mod->sml_values = attr->a_vals;
                             mod->sml_nvalues = attr->a_nvals;
+                            mod->sml_numvals = attr->a_numvals;
                             *modtail = mod;
                             modtail = &mod->sml_next;
                             break;
@@ -285,6 +283,7 @@
                     mod->sml_type.bv_len = strlen(mod->sml_type.bv_val);
                     mod->sml_values = NULL;
                     mod->sml_nvalues = NULL;
+                    mod->sml_numvals = 0;
                     *modtail = mod;
                     modtail = &mod->sml_next;
                 }
@@ -305,7 +304,6 @@
                 {
                     Modifications *m = NULL;
                     int modcount;
-                    slap_callback cb2 = { NULL, slap_replog_cb, NULL, NULL };
                     slap_callback nullcb = { NULL, collect_error_msg_cb, 
                                              NULL, NULL };
                     char textbuf[SLAP_TEXT_BUFLEN];
@@ -319,8 +317,7 @@
 
                     nop.o_tag = LDAP_REQ_MODIFY;
                     nop.orm_modlist = mods;
-                    cb2.sc_next = &nullcb;
-                    nop.o_callback = &cb2;
+                    nop.o_callback = &nullcb;
                     nop.o_bd->bd_info = (BackendInfo *) on->on_info;
 
                     for(m = mods, modcount = 0; m; m = m->sml_next, 
@@ -372,7 +369,7 @@
                       addpartial.on_bi.bi_type, 0, 0);
             }
 
-            if(found != NULL) ;
+            if(found != NULL)
                 entry_free(found);
         }
         else

Modified: openldap/vendor/openldap-release/doc/guide/admin/Makefile
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/Makefile	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/Makefile	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 ## Makefile for OpenLDAP Administrator's Guide
-# $OpenLDAP: pkg/openldap-guide/admin/Makefile,v 1.5.2.4 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/Makefile,v 1.5.2.6 2007/11/29 22:51:25 quanah Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 2005-2007 The OpenLDAP Foundation.
@@ -14,6 +14,9 @@
 ## <http://www.OpenLDAP.org/license.html>.
 all: guide.html index.html
 
+# for website building (for webmaster use, don't change)
+www: guide.html index.html OpenLDAP-Admin-Guide.pdf
+
 sdf-src: \
 	../plain.sdf \
 	../preamble.sdf \
@@ -53,12 +56,16 @@
 
 sdf-img: \
 	../images/LDAPlogo.gif \
+	allmail-en.png \
+	allusersgroup-en.png \
 	config_dit.png \
 	config_local.png \
 	config_ref.png \
 	config_repl.gif \
+	dual_dc.png \
 	intro_dctree.png \
 	intro_tree.png \
+	refint.png 
 
 guide.html: guide.sdf sdf-src sdf-img
 	sdf -2html guide.sdf
@@ -69,8 +76,11 @@
 admin.html: admin.sdf sdf-src sdf-img
 	sdf -DPDF -2html admin.sdf
 
-guide.pdf: admin.html
-	htmldoc --batch guide.book
+guide.pdf: admin.html guide.book
+	htmldoc --batch guide.book -f guide.pdf
 
+OpenLDAP-Admin-Guide.pdf: admin.html guide.book
+	htmldoc --batch guide.book -f OpenLDAP-Admin-Guide.pdf
+
 clean: 
 	rm -f *.pdf *.html *~ *.bak

Modified: openldap/vendor/openldap-release/doc/guide/admin/abstract.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/abstract.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/abstract.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/abstract.sdf,v 1.7.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/abstract.sdf,v 1.7.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 # 

Modified: openldap/vendor/openldap-release/doc/guide/admin/admin.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/admin.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/admin.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/admin.sdf,v 1.2.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/admin.sdf,v 1.2.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 #

Added: openldap/vendor/openldap-release/doc/guide/admin/allmail-en.png
===================================================================
(Binary files differ)


Property changes on: openldap/vendor/openldap-release/doc/guide/admin/allmail-en.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: openldap/vendor/openldap-release/doc/guide/admin/allusersgroup-en.png
===================================================================
(Binary files differ)


Property changes on: openldap/vendor/openldap-release/doc/guide/admin/allusersgroup-en.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: openldap/vendor/openldap-release/doc/guide/admin/appendix-changes.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/appendix-changes.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/appendix-changes.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/appendix-changes.sdf,v 1.8.2.2 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/appendix-changes.sdf,v 1.8.2.3 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/appendix-common-errors.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/appendix-common-errors.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/appendix-common-errors.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/appendix-common-errors.sdf,v 1.4.2.1 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/appendix-common-errors.sdf,v 1.4.2.2 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 
@@ -22,7 +22,8 @@
 is supposed to listen on.
 * the client has not been instructed to contact a running server; with OpenLDAP 
 command-line tools this is accomplished by providing the -H switch, whose 
-argument is a valid LDAP url corresponding to the interface the server is supposed to be listening on.
+argument is a valid LDAP url corresponding to the interface the server is 
+supposed to be listening on.
 
 H3: ldap_*: No such object
 
@@ -39,7 +40,8 @@
 server and get this message, it may simply be that you have yet to add the 
 object you are trying to locate.
 
-The error commonly occurs because a DN was not specified and a default was not properly configured.
+The error commonly occurs because a DN was not specified and a default was not 
+properly configured.
 
 If you have a suffix specified in slapd.conf eg.
 
@@ -51,64 +53,112 @@
 
 to tell it where to start the search.
 
-The -b should be specified for all LDAP commands unless you have an ldap.conf(5) default configured.
+The {{F:-b}} should be specified for all LDAP commands unless you have an 
+{{ldap.conf}}(5) default configured.
 
-See Also: ldapsearch(1), ldapmodify(1), and (Xref) How do I specify default base DN for clients?
-Also, slapadd(8) and its ancillary programs are very strict about the syntax of the LDIF file. Some liberties in the LDIF file may result in an apparently successful creation of the database, but accessing some parts of it may be difficult.
+See {{ldapsearch}}(1), {{ldapmodify}}(1) 
 
-One known common error in database creation is putting a blank line before the first entry in the LDIF file. There must be no leading blank lines in the LDIF file.
+Also, {{slapadd}}(8) and its ancillary programs are very strict about the 
+syntax of the LDIF file. 
 
-It is generally recommended that ldapadd(1) be used instead of slapadd(8) when adding new entries your directory. slapadd(8) should be used to bulk load entries known to be valid.
-Another cause of this message is a referral entry to an unpopulated directory. Either remove the referral, or add a single record with the referral base DN to the empty directory.
-This error may also occur when slapd is unable to access the contents of its database because of file permission problems. For instance, on a Red Hat Linux system, slapd runs as user 'ldap'. When slapadd is run as root to create a database from scratch, the contents of /var/lib/ldap are created with user and group root and with permission 600, making the contents inaccessible to the slapd server.
+Some liberties in the LDIF file may result in an apparently successful creation 
+of the database, but accessing some parts of it may be difficult.
 
+One known common error in database creation is putting a blank line before the 
+first entry in the LDIF file. {{B:There must be no leading blank lines in the 
+LDIF file.}}
+
+It is generally recommended that {{ldapadd}}(1) be used instead of {{slapadd}}(8) 
+when adding new entries your directory. {{slapadd}}(8) should be used to bulk 
+load entries known to be valid.
+
+Another cause of this message is a referral 
+({SECT:Constructing a Distributed Directory Service}}) entry to an unpopulated 
+directory. 
+
+Either remove the referral, or add a single record with the referral base DN 
+to the empty directory.
+
+This error may also occur when slapd is unable to access the contents of its 
+database because of file permission problems. For instance, on a Red Hat Linux 
+system, slapd runs as user 'ldap'. When slapadd is run as root to create a 
+database from scratch, the contents of {{F:/var/lib/ldap}} are created with 
+user and group root and with permission 600, making the contents inaccessible 
+to the slapd server.
+
 H3: ldap_*: Can't chase referral
 
 This is caused by the line
 
 >      referral        ldap://root.openldap.org
 
-in slapd.conf, It was provided as an example for how to use referrals in the original file. however if your machine is not permanently connected to the Internet, it will fail to find the server, and hence produce an error message.
+In {{F:slapd.conf}}, it was provided as an example for how to use referrals 
+in the original file. However if your machine is not permanently connected to 
+the Internet, it will fail to find the server, and hence produce an error message.
 
-To resolve, just place a # in front of line and restart slapd or point it to an available ldap server.
-See also: ldapadd(1) ldapmodify(1) slapd.conf(5)
+To resolve, just place a # in front of line and restart slapd or point it to 
+an available ldap server.
 
+See also: {{ldapadd}}(1), {{ldapmodify}}(1) and {{slapd.conf}}(5)
+
 H3: ldap_*: server is unwilling to perform
 
-The OpenLDAP server will return an unwilling to perform error if the backend holding the target entry does not support the given operation.
-The password backend is only willing to perform searches. It will return an unwilling to perform error for all other operations.
+slapd will return an unwilling to perform error if the backend holding the 
+target entry does not support the given operation.
+
+The password backend is only willing to perform searches. It will return an 
+unwilling to perform error for all other operations.
+
 The shell backend is configurable and may support a limited subset of operations.
-Check for other errors indicating a shortage of resources required by the directory server. i.e. you may have a full disk etc
+Check for other errors indicating a shortage of resources required by the 
+directory server. i.e. you may have a full disk etc
 
 H3: ldap_*: Insufficient access
 
-This error occurs when server denies the operation due to insufficient access. This is usually caused by binding to a DN with insufficient privileges (or binding anonymously) to perform the operation. You can bind as the rootdn/rootpw specified in slapd.conf(5) to gain full access. Otherwise, you must bind to an entry which has been granted the appropriate rights through access controls.
-See also: ldapadd(1) ldapdelete(1) ldapmodify(1) ldapmodrdn(1) ldapsearch(1) slapd.conf(5)
-(Xref) ldap_bind: Insufficient access (Xref) Access Control
+This error occurs when server denies the operation due to insufficient access. 
+This is usually caused by binding to a DN with insufficient privileges 
+(or binding anonymously) to perform the operation. 
 
+You can bind as the rootdn/rootpw specified in {{slapd.conf}}(5) to gain full 
+access. Otherwise, you must bind to an entry which has been granted the 
+appropriate rights through access controls.
+
+
 H3: ldap_*: Invalid DN syntax
 
-The target (or other) DN of the operation is invalid. This implies that either the string representation of the DN is not in the required form, one of the types in the attribute value assertions is not defined, or one of the values in the attribute value assertions does not conform to the appropriate syntax.
+The target (or other) DN of the operation is invalid. This implies that either 
+the string representation of the DN is not in the required form, one of the 
+types in the attribute value assertions is not defined, or one of the values 
+in the attribute value assertions does not conform to the appropriate syntax.
 
 H3: ldap_*: Referral hop limit exceeded
 
-This error generally occurs when the client chases a referral which refers itself back to a server it already contacted. The server responds as it did before and the client loops. This loop is detected when the hop limit is exceeded.
+This error generally occurs when the client chases a referral which refers 
+itself back to a server it already contacted. The server responds as it did 
+before and the client loops. This loop is detected when the hop limit is exceeded.
 
-This is most often caused through misconfiguration of the server's default referral. The default referral should not be itself:
+This is most often caused through misconfiguration of the server's default 
+referral. The default referral should not be itself:
 
-That is, on ldap://myldap/ the default referral should not be ldap://myldap/ (or any hostname/ip which is equivalent to myldap).
+That is, on {{F:ldap://myldap/}} the default referral should not be {{F:ldap://myldap/}}
+ (or any hostname/ip which is equivalent to myldap).
 
 H3: ldap_*: operations error
 
-In some versions of slapd(8), operationsError was returned instead of other. See also: (Xref) ldap_*: other error.
+In some versions of {{slapd}}(8), {{operationsError}} was returned instead of other.
 
 H3: ldap_*: other error
 
-The other result code indicates an internal error has occurred. While the additional information provided with the result code might provide some hint as to the problem, often one will need to consult the server's log files.
+The other result code indicates an internal error has occurred. 
+While the additional information provided with the result code might provide 
+some hint as to the problem, often one will need to consult the server's log files.
 
 H3: ldap_add/modify: Invalid syntax
 
-This error is reported when a value of an attribute does not conform to syntax restrictions. Additional information is commonly provided stating which value of which attribute was found to be invalid. Double check this value and other values (the server will only report the first error it finds).
+This error is reported when a value of an attribute does not conform to syntax 
+restrictions. Additional information is commonly provided stating which value 
+of which attribute was found to be invalid. Double check this value and other 
+values (the server will only report the first error it finds).
 
 Common causes include:
 
@@ -117,71 +167,126 @@
 * empty values (few syntaxes allow empty values)
 
 
-For certain syntax, like OBJECT IDENTIFIER (OID), this error can indicate that the OID descriptor (a "short name") provided is unrecognized. For instance, this error is returned if the objectClass value provided is unrecognized.
+For certain syntax, like OBJECT IDENTIFIER (OID), this error can indicate that 
+the OID descriptor (a "short name") provided is unrecognized. For instance, 
+this error is returned if the {{objectClass}} value provided is unrecognized.
 
 H3: ldap_add/modify: Object class violation
 
-This error is returned with the entry to be added or the entry as modified violates the object class schema rules. Normally additional information is returned the error detailing the violation. Some of these are detailed below.
+This error is returned with the entry to be added or the entry as modified 
+violates the object class schema rules. Normally additional information is 
+returned the error detailing the violation. Some of these are detailed below.
 
 Violations related to the entry's attributes:
 
 >      Attribute not allowed
-        A provided attribute is not allowed by the entry's object class(es). 
+
+A provided attribute is not allowed by the entry's object class(es). 
+
 >      Missing required attribute
-        An attribute required by the entry's object class(es) was not provided. 
 
+An attribute required by the entry's object class(es) was not provided. 
+
 Violations related to the entry's class(es):
 
 >      Entry has no objectClass attribute
-        The entry did not state which object classes it belonged to. 
+
+The entry did not state which object classes it belonged to. 
+
 >      Unrecognized objectClass
-        One (or more) of the listed objectClass values is not recognized. 
+
+One (or more) of the listed objectClass values is not recognized. 
+
 >      No structural object class provided
-        None of the listed objectClass values is structural. 
+
+None of the listed objectClass values is structural. 
+
 >      Invalid structural object class chain
-        Two or more structural objectClass values are not in same structural object class chain. See also (Xref) ldap add: invalid structural object class chain. 
+
+Two or more structural objectClass values are not in same structural object 
+class chain. 
+
 >      Structural object class modification
-        Modify operation attempts to change the structural class of the entry. See also (Xref) ldap_modify: cannot modify object class. 
+
+Modify operation attempts to change the structural class of the entry. 
+
 >      Instanstantiation of abstract objectClass.
-        An abstract class is not subordinate to any listed structural or auxiliary class. 
+
+An abstract class is not subordinate to any listed structural or auxiliary class. 
+
 >      Invalid structural object class
-        Other structural object class problem. 
+
+Other structural object class problem. 
+
 >      No structuralObjectClass operational attribute
-        This is commonly returned when a shadow server is provided an entry which does not contain the structuralObjectClass operational attribute. 
 
+This is commonly returned when a shadow server is provided an entry which does 
+not contain the structuralObjectClass operational attribute. 
 
-Note that the above error messages as well as the above answer assumes basic knowledge of LDAP/X.500 schema.
 
+Note that the above error messages as well as the above answer assumes basic 
+knowledge of LDAP/X.500 schema.
+
 H3: ldap_add: No such object
 
-The "ldap_add: No such object" error is commonly returned if parent of the entry being added does not exist. Add the parent entry first...
+The "ldap_add: No such object" error is commonly returned if parent of the 
+entry being added does not exist. Add the parent entry first...
 
 For example, if you are adding "cn=bob,dc=domain,dc=com" and you get:
 
 >      ldap_add: No such object
 
-The entry "dc=domain,dc=com" likely doesn't exist. You can use ldapsearch to see if does exist:
+The entry "dc=domain,dc=com" likely doesn't exist. You can use ldapsearch to 
+see if does exist:
 
 >      ldapsearch -b 'dc=domain,dc=com' -s base '(objectclass=*)'
 
-If it doesn't, add it. See the Quick Start Guide (http://www.openldap.org/doc/admin/quickstart.html) for assistance.
+If it doesn't, add it. See {{SECT:A Quick-Start Guide}} for assistance.
 
-Note: if the entry being added is the same as database suffix, it's parent isn't required. i.e.: if your suffix is "dc=domain,dc=com", "dc=com" doesn't need to exist to add "dc=domain,dc=com".
-This error will also occur if you try to add any entry that the server is not configured to hold.
+Note: if the entry being added is the same as database suffix, it's parent 
+isn't required. i.e.: if your suffix is "dc=domain,dc=com", "dc=com" doesn't 
+need to exist to add "dc=domain,dc=com".
 
-For example, if your database suffix is "dc=domain,dc=com" and you attempt to add "dc=domain2,dc=com", "dc=com", "dc=domain,dc=org", "o=domain,c=us", or an other DN in the "dc=domain,dc=com" subtree, the server will return a "No such object" (or referral) error.
+This error will also occur if you try to add any entry that the server is not 
+configured to hold.
 
-slapd(8) will generally return "no global superior knowledge" as additional information indicating its return noSuchObject instead of a referral as the server is not configured with knowledge of a global superior server.
-See also: ldapadd(1) ldapmodify(1) (Xref) ldap_add/delete/modify/rename: no global superior knowledge
+For example, if your database suffix is "dc=domain,dc=com" and you attempt to 
+add "dc=domain2,dc=com", "dc=com", "dc=domain,dc=org", "o=domain,c=us", or an 
+other DN in the "dc=domain,dc=com" subtree, the server will return a
+ "No such object" (or referral) error.
 
+{{slapd}}(8) will generally return "no global superior knowledge" as additional 
+information indicating its return noSuchObject instead of a referral as the 
+server is not configured with knowledge of a global superior server.
+
+
 H3: ldap add: invalid structural object class chain
 
-This particular error refers to the rule about STRUCTURAL objectclasses, which states that an object is of one STRUCTURAL class, the structural class of the object. The object is said to belong to this class, zero or more auxiliaries classes, and their super classes. While all of these classes are commonly listed in the objectClass attribute of the entry, one of these classes is the structural object class of the entry. Thus, it is OK for an objectClass attribute to contain inetOrgPerson, organizationalPerson, and person because they inherit one from another to form a single super class chain. That is, inetOrgPerson SUPs organizationPerson SUPs person. On the other hand, it is invalid for both inetOrgPerson and account to be listed in objectClass as inetOrgPerson and account are not part of the same super class chain (unless some other class is also listed with is a subclass of both).
+This particular error refers to the rule about STRUCTURAL objectclasses, which 
+states that an object is of one STRUCTURAL class, the structural class of the 
+object. The object is said to belong to this class, zero or more auxiliaries
+ classes, and their super classes. 
 
-To resolve this problem, one must determine which class will better serve structural object class for the entry, adding this class to the objectClass attribute (if not already present), and remove any other structural class from the entry's objectClass attribute which is not a super class of the structural object class.
+While all of these classes are commonly listed in the objectClass attribute of 
+the entry, one of these classes is the structural object class of the entry. 
+Thus, it is OK for an objectClass attribute 
+to contain inetOrgPerson, organizationalPerson, and person because they inherit
+ one from another to form a single super class chain. That is, inetOrgPerson SUPs 
+organizationPerson SUPs person. On the other hand, it is invalid for both inetOrgPerson 
+and account to be listed in objectClass as inetOrgPerson and account are not 
+part of the same super class chain (unless some other class is also listed 
+with is a subclass of both).
 
-Which object class is better depends on the particulars of the situation. One generally should consult the documentation for the applications one is using for help in making the determination.
+To resolve this problem, one must determine which class will better serve 
+structural object class for the entry, adding this class to the objectClass 
+attribute (if not already present), and remove any other structural class from 
+the entry's objectClass attribute which is not a super class of the structural 
+object class.
 
+Which object class is better depends on the particulars of the situation. 
+One generally should consult the documentation for the applications one is 
+using for help in making the determination.
+
 H3: ldap_add: no structuralObjectClass operational attribute
 
 ldapadd(1) may error:
@@ -190,77 +295,95 @@
 >        ldap_add: Internal (implementation specific) error (80)
 >           additional info: no structuralObjectClass operational attribute
 
-when slapd(8) cannot determine, based upon the contents of the objectClass attribute, what the structural class of the object should be.
+when slapd(8) cannot determine, based upon the contents of the objectClass 
+attribute, what the structural class of the object should be.
 
-While this normally should produce an object class violation error, some versions of slapd(8) contain a minor bug which cause the object class error not to be properly detected. In these versions, slapd(8) instead catches its failure to populate the structuralObjectClass operational attribute (hence the internal error).
-Kurt at OpenLDAP.org
-See also: (Xref) ldap add: invalid structural object class chain
-Kurt at OpenLDAP.org
 
 H3: ldap_add/modify/rename: Naming violation
 
-OpenLDAP's slapd checks for naming attributes and distinguished values consistency, according to RFC 4512.
+OpenLDAP's slapd checks for naming attributes and distinguished values consistency, 
+according to RFC 4512.
 
-Naming attributes are those attributeTypes that appear in an entry's RDN; distinguished values are the values of the naming attributes that appear in an entry's RDN, e.g, in
+Naming attributes are those attributeTypes that appear in an entry's RDN;
+ distinguished values are the values of the naming attributes that appear in 
+an entry's RDN, e.g, in
 
 >      cn=Someone+mail=someone at example.com,dc=example,dc=com
 
-the naming attributes are cn and mail, and the distinguished values are Someone and someone at example.com.
+the naming attributes are cn and mail, and the distinguished values are 
+Someone and someone at example.com.
 
 OpenLDAP's slapd checks for consistency when:
 
-    * adding an entry
-    * modifying an entry, if the values of the naming attributes are changed
-    * renaming an entry, if the RDN of the entry changes
+* adding an entry
+* modifying an entry, if the values of the naming attributes are changed
+* renaming an entry, if the RDN of the entry changes
 
 Possible causes of error are:
 
-    * the naming attributes are not present in the entry; for example:
+* the naming attributes are not present in the entry; for example:
 
 >                dn: dc=example,dc=com
 >                objectClass: organization
 >                o: Example
 >                # note: "dc: example" is missing
 
-    * the naming attributes are present in the entry, but in the attributeType definition they are marked as:
-          o collective
-          o operational
-          o obsolete
-    * the naming attributes are present in the entry, but the distinguished values are not; for example:
+* the naming attributes are present in the entry, but in the attributeType 
+definition they are marked as:
+- collective
+- operational
+- obsolete
 
+* the naming attributes are present in the entry, but the distinguished values 
+are not; for example:
+
 >                dn: dc=example,dc=com
 >                objectClass: domain
 >                dc: foobar
 >                # note: "dc" is present, but the value is not "example"
 
-    * the naming attributes are present in the entry, with the distinguished values, but the naming attributes:
-          o do not have an equality field, so equality cannot be asserted
-          o the matching rule is not supported (yet)
-          o the matching rule is not appropriate
-    * the given distinguished values do not comply with their syntax
-    * other errors occurred during the validation/normalization/match process; this is a catchall: look at previous logs for details in case none of the above apply to your case.
+* the naming attributes are present in the entry, with the distinguished values, but the naming attributes:
+- do not have an equality field, so equality cannot be asserted
+- the matching rule is not supported (yet)
+- the matching rule is not appropriate
 
-In any case, make sure that the attributeType definition for the naming attributes contains an appropriate EQUALITY field; or that of the superior, if they are defined based on a superior attributeType (look at the SUP field). See RFC 4512 for details.
-ando at sys-net.it, Kurt at OpenLDAP.org
+* the given distinguished values do not comply with their syntax
 
+* other errors occurred during the validation/normalization/match process; 
+this is a catchall: look at previous logs for details in case none of the above 
+apply to your case.
+
+In any case, make sure that the attributeType definition for the naming attributes 
+contains an appropriate EQUALITY field; or that of the superior, if they are 
+defined based on a superior attributeType (look at the SUP field). See RFC 4512 for details.
+
+
 H3: ldap_add/delete/modify/rename: no global superior knowledge
 
-If the target entry name places is not within any of the databases the server is configured to hold and the server has no knowledge of a global superior, the server will indicate it is unwilling to perform the operation and provide the text "no global superior knowledge" as additional text.
+If the target entry name places is not within any of the databases the server 
+is configured to hold and the server has no knowledge of a global superior, 
+the server will indicate it is unwilling to perform the operation and provide 
+the text "no global superior knowledge" as additional text.
 
-Likely the entry name is incorrect, or the server is not properly configured to hold the named entry, or, in distributed directory environments, a default referral was not configured.
-Kurt at OpenLDAP.org
+Likely the entry name is incorrect, or the server is not properly configured 
+to hold the named entry, or, in distributed directory environments, a default 
+referral was not configured.
 
+
 H3: ldap_bind: Insufficient access
 
-Current versions of slapd(8) requires that clients have authentication permission to attribute types used for authentication purposes before accessing them to perform the bind operation. As all bind operations are done anonymously (regardless of previous bind success), the auth access must be granted to anonymous.
+Current versions of slapd(8) requires that clients have authentication 
+permission to attribute types used for authentication purposes before accessing 
+them to perform the bind operation. As all bind operations are done anonymously 
+(regardless of previous bind success), the auth access must be granted to anonymous.
 
 In the example ACL below grants the following access:
 
-    * to anonymous users:
-          o permission to authenticate using values of userPassword
-    * to authenticated users:
-          o permission to update (but not read) their userPassword
-          o permission to read any object excepting values of userPassword 
+* to anonymous users:
+- permission to authenticate using values of userPassword
+* to authenticated users:
+- permission to update (but not read) their userPassword
+- permission to read any object excepting values of userPassword 
 
 All other access is denied.
 
@@ -273,68 +396,84 @@
 >          by users read
 
 
-Note that latest versions of slapd(8) will report invalid credentials in cases where the client has insufficient access to complete the operation. This is avoid inappropriate disclosure of the validity of the user's name.
-See also: ldapadd(1) ldapdelete(1) ldapmodify(1) ldapmodrdn(1) ldapsearch(1) slapd.conf(5) (Xref) Access Control
-
 H3: ldap_bind: Invalid credentials
 
-The error usually occurs when the credentials (password) provided does not match the userPassword held in entry you are binding to.
+The error usually occurs when the credentials (password) provided does not 
+match the userPassword held in entry you are binding to.
 
 The error can also occur when the bind DN specified is not known to the server.
 
-Check both!
-In addition to the cases mentioned above you should check if the server denied access to userPassword on selected parts of the directory. In fact, slapd always returns "Invalid credentials" in case of failed bind, regardless of the failure reason, since other return codes could reveal the validity of the user's name.
+Check both! In addition to the cases mentioned above you should check if the 
+server denied access to userPassword on selected parts of the directory. In 
+fact, slapd always returns "Invalid credentials" in case of failed bind, 
+regardless of the failure reason, since other return codes could reveal the 
+validity of the user's name.
 
 To debug access rules defined in slapd.conf, add "ACL" to log level.
-See also: ldapadd(1) ldapdelete(1) ldapmodify(1) ldapmodrdn(1) ldapsearch(1) slapd.conf(5) (Xref) ldap_bind: No such object
 
-H3: ldap_bind: No such object
-
-This answer is specific to OpenLDAP 1.2 and earlier releases. In later releases, ldap_bind returns (Xref) ldap_bind: Invalid credentials instead.
-'No such object' is only returned by ldap_bind operation in a few special cases. Normally, the server returns (Xref) ldap_bind: Invalid credentials when the entry associated with the bind DN cannot be located.
-This error occurs when binding using the rootdn and the asserted value doesn't match configured password value. Rootpw values must be conform to RFC 2307 format defined for userPassword.
-See also: ldapadd(1) ldapdelete(1) ldapmodify(1) ldapmodrdn(1) ldapsearch(1) slapd.conf(5) (Xref) ldap_bind: Invalid credentials
-
 H3: ldap_bind: Protocol error
 
-There error is generally occurs when the LDAP version requested by the client is not supported by the server.
+There error is generally occurs when the LDAP version requested by the 
+client is not supported by the server.
 
-The OpenLDAP Software 1.x server only accepts version 2 LDAP Bind requests. Note that 1.x server expects U-Mich LDAP, an LDAPv2 variant, to be used. This variant is sometimes referred to as LDAPv2+.
+The OpenLDAP Software 2.x server, by default, only accepts version 3 LDAP Bind 
+requests but can be configured to accept a version 2 LDAP Bind request. 
 
-The OpenLDAP Software 2.x server, by default, only accepts version 3 LDAP Bind requests but can be configured to accept a version 2 LDAP Bind request. Note that the 2.x server expects LDAPv3 [RFC4510] to be used when the client requests version 3 and expects a limited LDAPv3 variant (basically, LDAPv3 syntax and semantics in an LDAPv2 PDUs) to be used when version 2 is expected. This variant is also sometimes referred to as LDAPv2+, but differs from the U-Mich LDAP variant in a number of ways.
+Note: The 2.x server expects LDAPv3 [RFC4510] to be used when the client 
+requests version 3 and expects a limited LDAPv3 variant (basically, LDAPv3 
+syntax and semantics in an LDAPv2 PDUs) to be used when version 2 is expected. 
 
-Use of LDAPv3!
-See also: (Xref) How to configure slapd(8) with LDAPv2 support (for legacy clients)?.
+This variant is also sometimes referred to as LDAPv2+, but differs from the U-Mich 
+LDAP variant in a number of ways.
 
 H3: ldap_modify: cannot modify object class
 
-This message is commonly returned when attempting to modify the objectClass attribute in a manner inconsistent with the LDAP/X.500 information model. In particular, it commonly occurs when one tries to change the structure of the object from one class to another, for instance, trying to change an 'apple' into a 'pear' or a 'fruit' into a 'pear'. Such changes are disallowed by the slapd(8) in accordance with LDAP and X.500 restrictions.
+This message is commonly returned when attempting to modify the objectClass 
+attribute in a manner inconsistent with the LDAP/X.500 information model. In 
+particular, it commonly occurs when one tries to change the structure of the 
+object from one class to another, for instance, trying to change an 'apple' 
+into a 'pear' or a 'fruit' into a 'pear'. 
 
-To overcome this restriction in 2.3 (and prior releases), one must re-create the object with the desired new structural object class (e.g., delete old object then add new object). In 2.4, support for a new control will (hopefully) be introduced to allow the (authorized) user to request this (and various other model restrictions) be temporarily relaxed.
+Such changes are disallowed by the slapd(8) in accordance with LDAP and X.500 restrictions.
 
+
 H3: ldap_sasl_interactive_bind_s: ...
 
-If you intended to bind using a DN and password and get an error from ldap_sasl_interactive_bind_s, you likely forgot to provide a '-x' option to the command. By default, SASL authentication is used. '-x' is necessary to select "simple" authentication.
-Kurt at OpenLDAP.org
+If you intended to bind using a DN and password and get an error from 
+ldap_sasl_interactive_bind_s, you likely forgot to provide a '-x' option to 
+the command. By default, SASL authentication is used. '-x' is necessary to 
+select "simple" authentication.
 
+
 H3: ldap_sasl_interactive_bind_s: No such Object
 
-This indicates that LDAP SASL authentication function could not read the Root DSE.
-The error will occur when the server doesn't provide a root DSE. This may be due to access controls.
+This indicates that LDAP SASL authentication function could not read the 
+Root DSE.
+The error will occur when the server doesn't provide a root DSE. This may be 
+due to access controls.
 
-Note, also, that LDAPv2 servers, such as those OpenLDAP 1.x's slapd(8), do not provide a root DSE. Use -P 2 when LDAPv2 is desired. LDAPv2 servers also do not support SASL binds, so you will need to use a "simple" bind instead.
-Note: SASL bind is the default for all OpenLDAP tools. To force use of "simple" bind, use the "-x" option. Use of "simple" bind is not recommended unless one has adequate confidentiality protection in place (e.g. TLS/SSL, IPSEC).
 
 H3: ldap_sasl_interactive_bind_s: No such attribute
 
-This indicates that LDAP SASL authentication function could read the Root DSE but it contained no supportedSASLMechanism attribute.
-The supportedSASLmechanism attribute lists mechanisms currently available. The list may be empty because none of the supported mechanisms are currently available. For example, EXTERNAL is listed only if the client has established its identity by authenticating at a lower level (e.g. TLS).
+This indicates that LDAP SASL authentication function could read the Root 
+DSE but it contained no supportedSASLMechanism attribute.
+
+The supportedSASLmechanism attribute lists mechanisms currently available. 
+The list may be empty because none of the supported mechanisms are currently 
+available. For example, EXTERNAL is listed only if the client has established 
+its identity by authenticating at a lower level (e.g. TLS).
+
 Note: the attribute may not be visible due to access controls
+
 Note: SASL bind is the default for all OpenLDAP tools, e.g. ldapsearch(1), ldapmodify(1). To force use of "simple" bind, use the "-x" option. Use of "simple" bind is not recommended unless one has adequate confidentiality protection in place (e.g. TLS/SSL, IPSEC).
 
 H3: ldap_sasl_interactive_bind_s: Unknown authentication method
 
-This indicates that none of the SASL authentication supported by the server are supported by the client, or that they are too weak or otherwise inappropriate for use by the client. Note that the default security options disallows the use of certain mechanisms such as ANONYMOUS and PLAIN (without TLS).
+This indicates that none of the SASL authentication supported by the server 
+are supported by the client, or that they are too weak or otherwise inappropriate 
+for use by the client. Note that the default security options disallows the use 
+of certain mechanisms such as ANONYMOUS and PLAIN (without TLS).
+
 Note: SASL bind is the default for all OpenLDAP tools. To force use of "simple" bind, use the "-x" option. Use of "simple" bind is not recommended unless one has adequate confidentiality protection in place (e.g. TLS/SSL, IPSEC).
 
 H3: ldap_sasl_interactive_bind_s: Local error (82)
@@ -344,10 +483,13 @@
 
 H3: ldap_search: Partial results and referral received
 
-This error is returned with the server responses to an LDAPv2 search query with both results (zero or more matched entries) and references (referrals to other servers).
+This error is returned with the server responses to an LDAPv2 search query 
+with both results (zero or more matched entries) and references (referrals to other servers).
 See also: ldapsearch(1).
-If the updatedn on the replica does not exist, a referral will be returned. It may do this as well if the ACL needs tweaking.
 
+If the updatedn on the replica does not exist, a referral will be returned. 
+It may do this as well if the ACL needs tweaking.
+
 H3: ldap_start_tls: Operations error
 
 ldapsearch(1) and other tools will return
@@ -355,96 +497,119 @@
 >        ldap_start_tls: Operations error (1)
 >              additional info: TLS already started
 
-when the user (though command line options and/or ldap.conf(5)) has requested TLS (SSL) be started twice. For instance, when specifying both "-H ldaps://server.do.main" and "-ZZ".
+When the user (though command line options and/or ldap.conf(5)) has requested 
+TLS (SSL) be started twice. For instance, when specifying both "-H ldaps://server.do.main" and "-ZZ".
 
 H2: Other Errors
 
 H3: ber_get_next on fd X failed errno=34 (Numerical result out of range)
 
-This slapd error generally indicates that the client sent a message that exceeded an administrative limit. See sockbuf_max_incoming and sockbuf_max_incoming_auth configuration directives in slapd.conf(5).
+This slapd error generally indicates that the client sent a message that 
+exceeded an administrative limit. See sockbuf_max_incoming and sockbuf_max_incoming_auth 
+configuration directives in slapd.conf(5).
 
 H3: ber_get_next on fd X failed errno=11 (Resource temporarily unavailable)
 
-This message is not indicative of abnormal behavior or error. It simply means that expected data is not yet available from the resource, in this context, a network socket. slapd(8) will process the data once it does becomes available.
+This message is not indicative of abnormal behavior or error. It simply means 
+that expected data is not yet available from the resource, in this context, a 
+network socket. slapd(8) will process the data once it does becomes available.
 
 H3: daemon: socket() failed errno=97 (Address family not supported)
 
-This message indicates that the operating system does not support one of the (protocol) address families which slapd(8) was configured to support. Most commonly, this occurs when slapd(8) was configured to support IPv6 yet the operating system kernel wasn't. In such cases, the message can be ignored.
+This message indicates that the operating system does not support one of the 
+(protocol) address families which slapd(8) was configured to support. Most 
+commonly, this occurs when slapd(8) was configured to support IPv6 yet the 
+operating system kernel wasn't. In such cases, the message can be ignored.
 
 H3: GSSAPI: gss_acquire_cred: Miscellaneous failure; Permission denied;
 
-This message means that slapd is not running as root and, thus, it cannot get its Kerberos 5 key from the keytab, usually file /etc/krb5.keytab.
+This message means that slapd is not running as root and, thus, it cannot get 
+its Kerberos 5 key from the keytab, usually file /etc/krb5.keytab.
 
-A keytab file is used to store keys that are to be used by services or daemons that are started at boot time. It is very important that these secrets are kept beyond reach of intruders.
+A keytab file is used to store keys that are to be used by services or daemons 
+that are started at boot time. It is very important that these secrets are kept 
+beyond reach of intruders.
 
-That's why the default keytab file is owned by root and protected from being read by others. Do not mess with these permissions, build a different keytab file for slapd instead.
+That's why the default keytab file is owned by root and protected from being 
+read by others. Do not mess with these permissions, build a different keytab 
+file for slapd instead.
 
 To do this, start kadmin, and enter the following commands:
 
-    * addprinc -randkey ldap/ldap.example.com at EXAMPLE.COM
-    * ktadd -k /etc/openldap/ldap.keytab ldap/ldap.example.com at EXAMPLE.COM 
+>     addprinc -randkey ldap/ldap.example.com at EXAMPLE.COM
+>     ktadd -k /etc/openldap/ldap.keytab ldap/ldap.example.com at EXAMPLE.COM 
 
 Then, on the shell, do:
 
-    * chown ldap.ldap /etc/openldap/ldap.keytab
-    * chmod 600 /etc/openldap/ldap.keytab 
+>     chown ldap.ldap /etc/openldap/ldap.keytab
+>     chmod 600 /etc/openldap/ldap.keytab 
 
-Now you have to tell slapd (well, actually tell the gssapi library in Kerberos 5 that is invoked by Cyrus SASL) where to find the new keytab. You do this by setting the environment variable KRB5_KTNAME like this:
+Now you have to tell slapd (well, actually tell the gssapi library in Kerberos 5 
+that is invoked by Cyrus SASL) where to find the new keytab. You do this by 
+setting the environment variable KRB5_KTNAME like this:
 
-export KRB5_KTNAME="FILE:/etc/openldap/ldap.keytab"
+>     export KRB5_KTNAME="FILE:/etc/openldap/ldap.keytab"
 
-Set that environment variable on the slapd start script (Red Hat users might find /etc/sysconfig/ldap a perfect place).
-jsanchez at openldap.org, hyc at openldap.org
-This only works if you are using MIT kerberos. It doesn't work with Heimdal, for instance.
-andreas at conectiva.com.br
-In Heimdal there is a function gsskrb5_register_acceptor_identity() that sets the path of the keytab file you want to use. In Cyrus SASL 2 you can add
+Set that environment variable on the slapd start script (Red Hat users might 
+find /etc/sysconfig/ldap a perfect place).
 
-    keytab: /path/to/file
+This only works if you are using MIT kerberos. It doesn't work with Heimdal, 
+for instance.
 
+
+In Heimdal there is a function gsskrb5_register_acceptor_identity() that sets 
+the path of the keytab file you want to use. In Cyrus SASL 2 you can add
+
+>    keytab: /path/to/file
+
 to your application's SASL config file to use this feature. This only works with Heimdal.
-hyc at openldap.org
 
+
 H3: access from unknown denied
 
 This related to TCP wrappers. See hosts_access(5) for more information.
-in the log file: "access from unknown denied" This related to TCP wrappers. See hosts_access(5) for more information.
-for example: add the line "slapd: .hosts.you.want.to.allow" in /etc/hosts.allow to get rid of the error.
+in the log file: "access from unknown denied" This related to TCP wrappers. 
+See hosts_access(5) for more information.
+for example: add the line "slapd: .hosts.you.want.to.allow" in /etc/hosts.allow 
+to get rid of the error.
 
 H3: ldap_read: want=# error=Resource temporarily unavailable
 
-This message occurs normally. It means that pending data is not yet available from the resource, a network socket. slapd(8) will process the data once it becomes available.
+This message occurs normally. It means that pending data is not yet available 
+from the resource, a network socket. slapd(8) will process the data once it 
+becomes available.
 
 H3: `make test' fails
 
 Some times, `make test' fails at the very first test with an obscure message like
 
-    make test
-    make[1]: Entering directory `/ldap_files/openldap-2.2.13/tests'
-    make[2]: Entering directory `/ldap_files/openldap-2.2.13/tests'
-    Initiating LDAP tests for BDB...
-    Cleaning up test run directory leftover from previous run.
-    Running ./scripts/all...
-    >>>>> Executing all LDAP tests for bdb
-    >>>>> Starting test000-rootdse ...
-    running defines.sh
-    Starting slapd on TCP/IP port 9011...
-    Using ldapsearch to retrieve the root DSE...
-    Waiting 5 seconds for slapd to start...
-    ./scripts/test000-rootdse: line 40: 10607 Segmentation fault $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >$LOG1 2>&1
-    Waiting 5 seconds for slapd to start...
-    Waiting 5 seconds for slapd to start...
-    Waiting 5 seconds for slapd to start...
-    Waiting 5 seconds for slapd to start...
-    Waiting 5 seconds for slapd to start...
-    ./scripts/test000-rootdse: kill: (10607) - No such pid
-    ldap_bind: Can't contact LDAP server (-1)
-    >>>>> Test failed
-    >>>>> ./scripts/test000-rootdse failed (exit 1)
-    make[2]: *** [bdb-yes] Error 1
-    make[2]: Leaving directory `/ldap_files/openldap-2.2.13/tests'
-    make[1]: *** [test] Error 2
-    make[1]: Leaving directory `/ldap_files/openldap-2.2.13/tests'
-    make: *** [test] Error 2
+>    make test
+>    make[1]: Entering directory `/ldap_files/openldap-2.4.6/tests'
+>    make[2]: Entering directory `/ldap_files/openldap-2.4.6/tests'
+>    Initiating LDAP tests for BDB...
+>    Cleaning up test run directory leftover from previous run.
+>     Running ./scripts/all...
+>    >>>>> Executing all LDAP tests for bdb
+>    >>>>> Starting test000-rootdse ...
+>    running defines.sh
+>    Starting slapd on TCP/IP port 9011...
+>    Using ldapsearch to retrieve the root DSE...
+>    Waiting 5 seconds for slapd to start...
+>    ./scripts/test000-rootdse: line 40: 10607 Segmentation fault $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >$LOG1 2>&1
+>    Waiting 5 seconds for slapd to start...
+>    Waiting 5 seconds for slapd to start...
+>    Waiting 5 seconds for slapd to start...
+>    Waiting 5 seconds for slapd to start...
+>    Waiting 5 seconds for slapd to start...
+>    ./scripts/test000-rootdse: kill: (10607) - No such pid
+>    ldap_sasl_bind_s: Can't contact LDAP server (-1)
+>    >>>>> Test failed
+>    >>>>> ./scripts/test000-rootdse failed (exit 1)
+>    make[2]: *** [bdb-yes] Error 1
+>    make[2]: Leaving directory `/ldap_files/openldap-2.4.6/tests'
+>    make[1]: *** [test] Error 2
+>    make[1]: Leaving directory `/ldap_files/openldap-2.4.6/tests'
+>    make: *** [test] Error 2
 
 or so. Usually, the five lines
 
@@ -452,31 +617,45 @@
 
 indicate that slapd didn't start at all.
 
-For OpenLDAP 2.2 and later, in tests/testrun/slapd.1.log there is a full log of what slapd wrote while trying to start. The log level can be increased by setting the environment variable SLAPD_DEBUG to the corresponding value; see loglevel in slapd.conf(5) for the meaning of log levels.
+In tests/testrun/slapd.1.log there is a full log of what slapd wrote while 
+trying to start. The log level can be increased by setting the environment 
+variable SLAPD_DEBUG to the corresponding value; see loglevel in slapd.conf(5) 
+for the meaning of log levels.
 
-A typical reason for this behavior is a runtime link problem, i.e. slapd cannot find some dynamic libraries it was linked against. Try running ldd(1) on slapd (for those architectures that support runtime linking).
+A typical reason for this behavior is a runtime link problem, i.e. slapd cannot 
+find some dynamic libraries it was linked against. Try running ldd(1) on slapd 
+(for those architectures that support runtime linking).
 
-There might well be other reasons; the contents of the log file should help clarifying them.
+There might well be other reasons; the contents of the log file should help 
+clarifying them.
 
-Tests that fire up multiple instances of slapd typically log to tests/testrun/slapd.<n>.log, with a distinct <n> for each instance of slapd; list tests/testrun/ for possible values of <n>.
-ando at sys-net.it
+Tests that fire up multiple instances of slapd typically log to tests/testrun/slapd.<n>.log, 
+with a distinct <n> for each instance of slapd; list tests/testrun/ for possible 
+values of <n>.
 
 H3: ldap_*: Internal (implementation specific) error (80) - additional info: entry index delete failed
 
-This seems to be related with wrong ownership of the BDB's dir (/var/lib/ldap) and files.
-chmod -r openldap:openldap /var/lib/ldap fixes it in Debian Etch.
-I don't really know how the wrong permission went into place, but I suspect it has something to do with slapd's starting, no database existing (I had deleted it to get a new, fresh one), and slapd creating one before chroot.
-After a bug report, some insightful feedback, and some amount of testing, i found out that the 'wrong ownership of new files' problem is not with slapd but with slapadd. This happens when one initially populates the Directory.
-Oh, and the right switch of chown is '-R', not '-r'.
-My God! What a mess! The right command to correct this problem is: chown -R /var/lib/ldap
+This seems to be related with wrong ownership of the BDB's dir (/var/lib/ldap) 
+and files.
 
-pedrorandrade at gmail.com
+>    chmod -R openldap:openldap /var/lib/ldap 
+
+fixes it in Debian
+
+
 H3: ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
 
-Using SASL, when a client contacts LDAP server, the slapd service dies immediately and client gets an error :
-SASL/GSSAPI authentication started ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
+Using SASL, when a client contacts LDAP server, the slapd service dies 
+immediately and client gets an error :
+
+>     SASL/GSSAPI authentication started ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
+
 Then check the slapd service, it stopped.
-This may come from incompatible of using different versions of BerkeleyDB for installing of SASL and installing of OpenLDAP. The problem arises in case of using multiple version of BerkeleyDB. Solution: - Check which version of BerkeleyDB when install Cyrus SASL. - Reinstall OpenLDAP with the version of BerkeleyDB above.
-It was my case and that was the solution I did and it worked :) Hope this gives you some information.
--- Le Trung Kien 
 
+This may come from incompatible of using different versions of BerkeleyDB for 
+installing of SASL and installing of OpenLDAP. The problem arises in case of 
+using multiple version of BerkeleyDB. Solution: - Check which version of 
+BerkeleyDB when install Cyrus SASL. 
+
+Reinstall OpenLDAP with the version of BerkeleyDB above.
+

Modified: openldap/vendor/openldap-release/doc/guide/admin/appendix-configs.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/appendix-configs.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/appendix-configs.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/appendix-configs.sdf,v 1.2.2.2 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/appendix-configs.sdf,v 1.2.2.3 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/appendix-contrib.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/appendix-contrib.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/appendix-contrib.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/appendix-contrib.sdf,v 1.1.2.1 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/appendix-contrib.sdf,v 1.1.2.2 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/appendix-deployments.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/appendix-deployments.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/appendix-deployments.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/appendix-deployments.sdf,v 1.1.2.1 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/appendix-deployments.sdf,v 1.1.2.2 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/appendix-ldap-result-codes.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/appendix-ldap-result-codes.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/appendix-ldap-result-codes.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/appendix-ldap-result-codes.sdf,v 1.1.2.2 2007/10/24 15:20:32 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/appendix-ldap-result-codes.sdf,v 1.1.2.3 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/appendix-recommended-versions.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/appendix-recommended-versions.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/appendix-recommended-versions.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/appendix-recommended-versions.sdf,v 1.3.2.1 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/appendix-recommended-versions.sdf,v 1.3.2.2 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/appendix-upgrading.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/appendix-upgrading.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/appendix-upgrading.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/appendix-upgrading.sdf,v 1.1.2.2 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/appendix-upgrading.sdf,v 1.1.2.3 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/aspell.en.pws
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/aspell.en.pws	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/aspell.en.pws	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-personal_ws-1.1 en 1483 
+personal_ws-1.1 en 1491 
 nattrsets
 inappropriateAuthentication
 api
@@ -144,23 +144,23 @@
 mkversion
 objectClasses
 objectclasses
+adminLimitExceeded
 searchResultReference
-adminLimitExceeded
 fmt
 qdescrs
 olcSuffix
 objectClassModsProhibited
+unavailableCriticalExtension
 supportedControl
 GHz
-unavailableCriticalExtension
 libpath
 INADDR
 compareDN
 sizelimit
 unixODBC
+notAllowedOnNonLeaf
 APIs
 blen
-notAllowedOnNonLeaf
 attrsOnly
 attrsonly
 slappasswd
@@ -171,8 +171,8 @@
 syncIdSet
 olcTLSCipherSuite
 username
+aliasProblem
 sizeLimitExceeded
-aliasProblem
 subst
 idl
 chroot
@@ -207,8 +207,8 @@
 balancer
 entryAlreadyExists
 BerkeleyDB's
+notAllowedOnRDN
 singleLevel
-notAllowedOnRDN
 entryDN
 dSAOperation
 includedir
@@ -268,6 +268,7 @@
 perl
 dynlist
 browseable
+posixGroup
 attrvalue
 pers
 retcode
@@ -412,6 +413,7 @@
 unindexed
 ObjectClassDescription
 attrdesc
+jsmith
 efgh
 exopPasswdDN
 ranlib
@@ -584,9 +586,9 @@
 sys
 pwdPolicy
 slapd
+affectsMultipleDSAs
 sasl
 slapauth
-affectsMultipleDSAs
 MANCOMPRESS
 octetStringOrderingStringMatch
 updatedn
@@ -683,6 +685,7 @@
 fG
 gidNumber
 fi
+Instanstantiation
 eq
 FIPS
 dx
@@ -727,8 +730,8 @@
 invalidAttributeSyntax
 errOp
 pwdMaxAge
+insufficientAccessRights
 truelies
-insufficientAccessRights
 NL
 mr
 reindex
@@ -751,8 +754,8 @@
 slapover
 RL
 sockname
+noSuchAttribute
 MANCOMPRESSSUFFIX
-noSuchAttribute
 makeinfo
 coltags
 ro
@@ -786,6 +789,7 @@
 Vu
 idlecachesize
 objectClassViolation
+allusers
 ws
 errSleepTime
 INSTALLFLAGS
@@ -885,6 +889,7 @@
 memberOf
 memberof
 pseudorootpw
+allmail
 CFLAGS
 operationsError
 substr
@@ -907,6 +912,7 @@
 octetString
 SampleLDAP
 expr
+allusersgroup
 PostgreSQL
 bvstr
 filesystem
@@ -1195,6 +1201,7 @@
 matchingrule
 SmVuc
 MSSQL
+nisMailAlias
 hostnames
 ctrlp
 lltdl
@@ -1333,6 +1340,7 @@
 attributeType
 auditModRDN
 cacert
+memberUid
 freebuf
 IDSET
 pwdGraceAuthnLimit

Modified: openldap/vendor/openldap-release/doc/guide/admin/backends.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/backends.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/backends.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/backends.sdf,v 1.8.2.2 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/backends.sdf,v 1.8.2.3 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/config.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/config.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/config.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/config.sdf,v 1.14.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/config.sdf,v 1.14.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 H1: The Big Picture - Configuration Choices

Modified: openldap/vendor/openldap-release/doc/guide/admin/dbtools.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/dbtools.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/dbtools.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/dbtools.sdf,v 1.24.2.4 2007/10/24 15:20:32 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/dbtools.sdf,v 1.24.2.5 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Added: openldap/vendor/openldap-release/doc/guide/admin/dual_dc.png
===================================================================
(Binary files differ)


Property changes on: openldap/vendor/openldap-release/doc/guide/admin/dual_dc.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: openldap/vendor/openldap-release/doc/guide/admin/glossary.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/glossary.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/glossary.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/glossary.sdf,v 1.5.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/glossary.sdf,v 1.5.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 2006-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 H1: Glossary

Modified: openldap/vendor/openldap-release/doc/guide/admin/guide.book
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/guide.book	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/guide.book	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,3 +1,3 @@
 #HTMLDOC 1.8.27
--t pdf14 -f "OpenLDAP-Admin-Guide.pdf" --book --toclevels 3 --no-numbered --toctitle "Table of Contents" --title --titleimage "../images/LDAPwww.gif" --linkstyle plain --size Universal --left 1.00in --right 0.50in --top 0.50in --bottom 0.50in --header .t. --header1 ... --footer ..1 --nup 1 --tocheader .t. --tocfooter ..i --duplex --portrait --color --no-pscommands --no-xrxcomments --compression=1 --jpeg=0 --fontsize 11.0 --fontspacing 1.2 --headingfont Helvetica --bodyfont Times --headfootsize 11.0 --headfootfont Helvetica --charset iso-8859-1 --links --embedfonts --pagemode outline --pagelayout single --firstpage p1 --pageeffect none --pageduration 10 --effectduration 1.0 --no-encryption --permissions all  --owner-password ""  --user-password "" --browserwidth 680 --no-strict --no-overflow
+-t pdf14 --book --toclevels 3 --no-numbered --toctitle "Table of Contents" --title --titleimage "../images/LDAPwww.gif" --linkstyle plain --size Universal --left 1.00in --right 0.50in --top 0.50in --bottom 0.50in --header .t. --header1 ... --footer ..1 --nup 1 --tocheader .t. --tocfooter ..i --duplex --portrait --color --no-pscommands --no-xrxcomments --compression=1 --jpeg=0 --fontsize 11.0 --fontspacing 1.2 --headingfont Helvetica --bodyfont Times --headfootsize 11.0 --headfootfont Helvetica --charset iso-8859-1 --links --embedfonts --pagemode outline --pagelayout single --firstpage p1 --pageeffect none --pageduration 10 --effectduration 1.0 --no-encryption --permissions all  --owner-password ""  --user-password "" --browserwidth 680 --no-strict --no-overflow
 admin.html

Modified: openldap/vendor/openldap-release/doc/guide/admin/guide.html
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/guide.html	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/guide.html	2007-12-15 09:30:12 UTC (rev 883)
@@ -23,7 +23,7 @@
 <DIV CLASS="title">
 <H1 CLASS="doc-title">OpenLDAP Software 2.4 Administrator's Guide</H1>
 <ADDRESS CLASS="doc-author">The OpenLDAP Project &lt;<A HREF="http://www.openldap.org/">http://www.openldap.org/</A>&gt;</ADDRESS>
-<ADDRESS CLASS="doc-modified">31 October 2007</ADDRESS>
+<ADDRESS CLASS="doc-modified">13 December 2007</ADDRESS>
 <BR CLEAR="All">
 </DIV>
 <DIV CLASS="contents">
@@ -411,9 +411,9 @@
 <BR>
 <A HREF="#delta-syncrepl replication">16.2.2. delta-syncrepl replication</A>
 <BR>
-<A HREF="#N-Way Multi-Master">16.2.3. N-Way Multi-Master</A>
+<A HREF="#N-Way Multi-Master replication">16.2.3. N-Way Multi-Master replication</A>
 <BR>
-<A HREF="#MirrorMode">16.2.4. MirrorMode</A></UL>
+<A HREF="#MirrorMode replication">16.2.4. MirrorMode replication</A></UL>
 <BR>
 <A HREF="#LDAP Sync Replication">16.3. LDAP Sync Replication</A><UL>
 <A HREF="#The LDAP Content Synchronization Protocol">16.3.1. The LDAP Content Synchronization Protocol</A>
@@ -606,26 +606,24 @@
 <BR>
 <A HREF="#ldap_bind: Invalid credentials">C.1.18. ldap_bind: Invalid credentials</A>
 <BR>
-<A HREF="#ldap_bind: No such object">C.1.19. ldap_bind: No such object</A>
+<A HREF="#ldap_bind: Protocol error">C.1.19. ldap_bind: Protocol error</A>
 <BR>
-<A HREF="#ldap_bind: Protocol error">C.1.20. ldap_bind: Protocol error</A>
+<A HREF="#ldap_modify: cannot modify object class">C.1.20. ldap_modify: cannot modify object class</A>
 <BR>
-<A HREF="#ldap_modify: cannot modify object class">C.1.21. ldap_modify: cannot modify object class</A>
+<A HREF="#ldap_sasl_interactive_bind_s: ..">C.1.21. ldap_sasl_interactive_bind_s: ...</A>
 <BR>
-<A HREF="#ldap_sasl_interactive_bind_s: ..">C.1.22. ldap_sasl_interactive_bind_s: ...</A>
+<A HREF="#ldap_sasl_interactive_bind_s: No such Object">C.1.22. ldap_sasl_interactive_bind_s: No such Object</A>
 <BR>
-<A HREF="#ldap_sasl_interactive_bind_s: No such Object">C.1.23. ldap_sasl_interactive_bind_s: No such Object</A>
+<A HREF="#ldap_sasl_interactive_bind_s: No such attribute">C.1.23. ldap_sasl_interactive_bind_s: No such attribute</A>
 <BR>
-<A HREF="#ldap_sasl_interactive_bind_s: No such attribute">C.1.24. ldap_sasl_interactive_bind_s: No such attribute</A>
+<A HREF="#ldap_sasl_interactive_bind_s: Unknown authentication method">C.1.24. ldap_sasl_interactive_bind_s: Unknown authentication method</A>
 <BR>
-<A HREF="#ldap_sasl_interactive_bind_s: Unknown authentication method">C.1.25. ldap_sasl_interactive_bind_s: Unknown authentication method</A>
+<A HREF="#ldap_sasl_interactive_bind_s: Local error (82)">C.1.25. ldap_sasl_interactive_bind_s: Local error (82)</A>
 <BR>
-<A HREF="#ldap_sasl_interactive_bind_s: Local error (82)">C.1.26. ldap_sasl_interactive_bind_s: Local error (82)</A>
+<A HREF="#ldap_search: Partial results and referral received">C.1.26. ldap_search: Partial results and referral received</A>
 <BR>
-<A HREF="#ldap_search: Partial results and referral received">C.1.27. ldap_search: Partial results and referral received</A>
+<A HREF="#ldap_start_tls: Operations error">C.1.27. ldap_start_tls: Operations error</A></UL>
 <BR>
-<A HREF="#ldap_start_tls: Operations error">C.1.28. ldap_start_tls: Operations error</A></UL>
-<BR>
 <A HREF="#Other Errors">C.2. Other Errors</A><UL>
 <A HREF="#ber_get_next on fd X failed errno=34 (Numerical result out of range)">C.2.1. ber_get_next on fd X failed errno=34 (Numerical result out of range)</A>
 <BR>
@@ -967,8 +965,6 @@
 <P>Existing commercial LDAP server implementations that use a relational database are either from the first kind or the third. I don't know of any implementation that uses a relational database to do inefficiently what BDB does efficiently. For those who are interested in &quot;third way&quot; (exposing EXISTING data from RDBMS as LDAP tree, having some limitations compared to classic LDAP model, but making it possible to interoperate between LDAP and SQL applications):</P>
 <P>OpenLDAP includes back-sql - the backend that makes it possible. It uses ODBC + additional metainformation about translating LDAP queries to SQL queries in your RDBMS schema, providing different levels of access - from read-only to full access depending on RDBMS you use, and your schema.</P>
 <P>For more information on concept and limitations, see <EM>slapd-sql</EM>(5) man page, or the <A HREF="#Backends">Backends</A> section. There are also several examples for several RDBMSes in <TT>back-sql/rdbms_depend/*</TT> subdirectories.</P>
-<P>TO REFERENCE:</P>
-<P>http://blogs.sun.com/treydrake/entry/ldap_vs_relational_database http://blogs.sun.com/treydrake/entry/ldap_vs_relational_database_part</P>
 <H2><A NAME="What is slapd and what can it do">1.9. What is slapd and what can it do?</A></H2>
 <P><EM>slapd</EM>(8) is an LDAP directory server that runs on many different platforms. You can use it to provide a directory service of your very own.  Your directory can contain pretty much anything you want to put in it. You can connect it to the global LDAP directory service, or run a service all by yourself. Some of slapd's more interesting features and capabilities include:</P>
 <P><B>LDAPv3</B>: <EM>slapd</EM> implements version 3 of <TERM>Lightweight Directory Access Protocol</TERM>. <EM>slapd</EM> supports LDAP over both <TERM>IPv4</TERM> and <TERM>IPv6</TERM> and Unix <TERM>IPC</TERM>.</P>
@@ -2201,7 +2197,7 @@
         dnattr=&lt;dn-valued attribute name&gt;
 </PRE>
 <P>The dnattr specification is used to give access to an entry whose DN is listed in an attribute of the entry (e.g., give access to a group entry to whoever is listed as the owner of the group entry).</P>
-<P>Some factors may not be appropriate in all environments (or any). For example, the domain factor relies on IP to domain name lookups. As these can easily spoofed, the domain factor should not be avoided.</P>
+<P>Some factors may not be appropriate in all environments (or any). For example, the domain factor relies on IP to domain name lookups. As these can easily be spoofed, the domain factor should be avoided.</P>
 <H3><A NAME="The access to grant">5.3.3. The access to grant</A></H3>
 <P>The kind of &lt;access&gt; granted can be one of the following:</P>
 <TABLE CLASS="columns" BORDER ALIGN='Center'>
@@ -3046,7 +3042,7 @@
         dnattr=&lt;dn-valued attribute name&gt;
 </PRE>
 <P>The dnattr specification is used to give access to an entry whose DN is listed in an attribute of the entry (e.g., give access to a group entry to whoever is listed as the owner of the group entry).</P>
-<P>Some factors may not be appropriate in all environments (or any). For example, the domain factor relies on IP to domain name lookups. As these can easily spoofed, the domain factor should not be avoided.</P>
+<P>Some factors may not be appropriate in all environments (or any). For example, the domain factor relies on IP to domain name lookups. As these can easily be spoofed, the domain factor should be avoided.</P>
 <H3><A NAME="The access to grant">6.3.3. The access to grant</A></H3>
 <P>The kind of &lt;access&gt; granted can be one of the following:</P>
 <TABLE CLASS="columns" BORDER ALIGN='Center'>
@@ -3849,8 +3845,54 @@
 <H3><A NAME="Dynamic Group Configuration">10.6.2. Dynamic Group Configuration</A></H3>
 <H2><A NAME="Dynamic Lists">10.7. Dynamic Lists</A></H2>
 <H3><A NAME="Overview">10.7.1. Overview</A></H3>
-<P>This overlay allows expansion of dynamic groups and more.</P>
+<P>This overlay allows expansion of dynamic groups and lists. Instead of having the group members or list attributes hard coded, this overlay allows us to define an LDAP search whose results will make up the group or list.</P>
 <H3><A NAME="Dynamic List Configuration">10.7.2. Dynamic List Configuration</A></H3>
+<P>This module can behave both as a dynamic list and dynamic group, depending on the configuration. The syntax is as follows:</P>
+<PRE>
+       overlay dynlist
+       dynlist-attrset &lt;group-oc&gt; &lt;URL-ad&gt; [member-ad]
+</PRE>
+<P>The parameters to the <TT>dynlist-attrset</TT> directive have the following meaning:</P>
+<UL>
+<LI><TT>&lt;group-oc&gt;</TT>: specifies which object class triggers the subsequent LDAP search. Whenever an entry with this object class is retrieved, the search is performed.
+<LI><TT>&lt;URL-ad&gt;</TT>: is the name of the attribute which holds the search URI. It has to be a subtype of <TT>labeledURI</TT>. The attributes and values present in the search result are added to the entry unless <TT>member-ad</TT> is used (see below).
+<LI><TT>member-ad</TT>: if present, changes the overlay behaviour into a dynamic group. Instead of inserting the results of the search in the entry, the distinguished name of the results are added as values of this attribute.</UL>
+<P>Here is an example which will allow us to have an email alias which automatically expands to all user's emails according to our LDAP filter:</P>
+<P>In <EM>slapd.conf</EM>(5):</P>
+<PRE>
+       overlay dynlist
+       dynlist-attrset nisMailAlias labeledURI
+</PRE>
+<P>This means that whenever an entry which has the <TT>nisMailAlias</TT> object class is retrieved, the search specified in the <TT>labeledURI</TT> attribute is performed.</P>
+<P>Let's say we have this entry in our directory:</P>
+<PRE>
+       cn=all,ou=aliases,dc=example,dc=com
+       cn: all
+       objectClass: nisMailAlias
+       labeledURI: ldap:///ou=People,dc=example,dc=com?mail?one?(objectClass=inetOrgPerson)
+</PRE>
+<P>If this entry is retrieved, the search specified in <TT>labeledURI</TT> will be performed and the results will be added to the entry just as if they have always been there. In this case, the search filter selects all entries directly under <TT>ou=People</TT> that have the <TT>inetOrgPerson</TT> object class and retrieves the <TT>mail</TT> attribute, if it exists.</P>
+<P>This is what gets added to the entry when we have two users under <TT>ou=People</TT> that match the filter:</P>
+<P><CENTER><IMG SRC="allmail-en.png" ALIGN="center"></CENTER></P>
+<P ALIGN="Center">Figure X.Y: Dynamic List for all emails</P>
+<P>The configuration for a dynamic group is similar. Let's see an example which would automatically populate an <TT>allusers</TT> group with all the user accounts in the directory.</P>
+<P>In <TT>slapd.conf</TT>(5):</P>
+<PRE>
+       overlay dynlist
+       dynlist-attrset groupOfNames labeledURI member
+</PRE>
+<P>Let's apply it to the following entry:</P>
+<PRE>
+       cn=allusers,ou=group,dc=example,dc=com
+       cn: all
+       objectClass: groupOfNames
+       labeledURI: ldap:///ou=people,dc=example,dc=com??one?(objectClass=inetOrgPerson)
+</PRE>
+<P>The behaviour is similar to the dynamic list configuration we had before: whenever an entry with the <TT>groupOfNames</TT> object class is retrieved, the search specified in the <TT>labeledURI</TT> attribute is performed. But this time, only the distinguished names of the results are added, and as values of the <TT>member</TT> attribute.</P>
+<P>This is what we get:</P>
+<P><CENTER><IMG SRC="allusersgroup-en.png" ALIGN="center"></CENTER></P>
+<P ALIGN="Center">Figure X.Y: Dynamic Group for all users</P>
+<P>Note that a side effect of this scheme of dymamic groups is that the members need to be specified as full DNs. So, if you are planning in using this for <TT>posixGroup</TT>s, be sure to use RFC2307bis and some attribute which can hold distinguished names. The <TT>memberUid</TT> attribute used in the <TT>posixGroup</TT> object class can hold only names, not DNs, and is therefore not suitable for dynamic groups.</P>
 <H2><A NAME="Reverse Group Membership Maintenance">10.8. Reverse Group Membership Maintenance</A></H2>
 <H3><A NAME="Overview">10.8.1. Overview</A></H3>
 <P>In some scenarios, it may be desirable for a client to be able to determine which groups an entry is a member of, without performing an additional search. Examples of this are applications using the <TERM>DIT</TERM> for access control based on group authorization.</P>
@@ -3944,7 +3986,7 @@
         database        ldap
         suffix          &quot;dc=example,dc=com&quot;
         rootdn          &quot;dc=example,dc=com&quot;
-        uri             ldap://ldap.example.com/dc=example%2cdc=com
+        uri             ldap://ldap.example.com/
         overlay proxycache
         proxycache    bdb 100000 1 1000 100
         proxyAttrset  0 mail postaladdress telephonenumber
@@ -3981,8 +4023,32 @@
 <H3><A NAME="Password Policy Configuration">10.10.2. Password Policy Configuration</A></H3>
 <H2><A NAME="Referential Integrity">10.11. Referential Integrity</A></H2>
 <H3><A NAME="Overview">10.11.1. Overview</A></H3>
-<P>This overlay can be used with a backend database such as slapd-bdb (5) to maintain the cohesiveness of a schema which utilizes reference attributes.</P>
+<P>This overlay can be used with a backend database such as slapd-bdb(5) to maintain the cohesiveness of a schema which utilizes reference attributes.</P>
+<P>Whenever a <EM>modrdn</EM> or <EM>delete</EM> is performed, that is, when an entry's DN is renamed or an entry is removed, the server will search the directory for references to this DN (in selected attributes: see below) and update them accordingly. If it was a <EM>delete</EM> operation, the reference is deleted. If it was a <EM>modrdn</EM> operation, then the reference is updated with the new DN.</P>
+<P>For example, a very common administration task is to maintain group membership lists, specially when users are removed from the directory. When an user account is deleted or renamed, all groups this user is a member of have to be updated. LDAP administrators usually have scripts for that. But we can use the <TT>refint</TT> overlay to automate this task. In this example, if the user is removed from the directory, the overlay will take care to remove the user from all the groups he/she was a member of. No more scripting for this.</P>
 <H3><A NAME="Referential Integrity Configuration">10.11.2. Referential Integrity Configuration</A></H3>
+<P>The configuration for this overlay is as follows:</P>
+<PRE>
+       overlay refint
+       refint_attributes &lt;attribute [attribute ...]&gt;
+       refint_nothing &lt;string&gt;
+</PRE>
+<UL>
+<LI><TT>refint_attributes</TT>: this parameter specifies a space separated list of attributes which will have the referential integrity maintained. When an entry is removed or has its DN renamed, the server will do an internal search for any of the <TT>refint_attributes</TT> that point to the affected DN and update them accordingly. IMPORTANT: the attributes listed here must have the <TT>distinguishedName</TT> syntax, that is, hold DNs as values.
+<LI><TT>refint_nothing</TT>: some times, while trying to maintain the referential integrity, the server has to remove the last attribute of its kind from an entry. This may be prohibited by the schema: for example, the <TT>groupOfNames</TT> object class requires at least one member. In these cases, the server will add the attribute value specified in <TT>refint_nothing</TT> to the entry.</UL>
+<P>To illustrate this overlay, we will use the group membership scenario.</P>
+<P>In <TT>slapd.conf</TT>:</P>
+<PRE>
+       overlay refint
+       refint_attributes member
+       refint_nothing &quot;cn=admin,dc=example,dc=com&quot;
+</PRE>
+<P>This configuration tells the overlay to maintain the referential integrity of the <TT>member</TT> attribute. This attribute is used in the <TT>groupOfNames</TT> object class which always needs a member, so we add the <TT>refint_nothing</TT> directive to fill in the group with a standard member should all the members vanish.</P>
+<P>If we have the following group membership, the refint overlay will automatically remove <TT>john</TT> from the group if his entry is removed from the directory:</P>
+<P><CENTER><IMG SRC="refint.png" ALIGN="center"></CENTER></P>
+<P ALIGN="Center">Figure X.Y: Maintaining referential integrity in groups</P>
+<P>Notice that if we rename (<TT>modrdn</TT>) the <TT>john</TT> entry to, say, <TT>jsmith</TT>, the refint overlay will also rename the reference in the <TT>member</TT> attribute, so the group membership stays correct.</P>
+<P>If we removed all users from the directory who are a member of this group, then the end result would be a single member in the group: <TT>cn=admin,dc=example,dc=com</TT>. This is the <TT>refint_nothing</TT> parameter kicking into action so that the schema is not violated.</P>
 <H2><A NAME="Return Code">10.12. Return Code</A></H2>
 <H3><A NAME="Overview">10.12.1. Overview</A></H3>
 <P>This overlay is useful to test the behavior of clients when server-generated erroneous and/or unusual responses occur.</P>
@@ -5126,9 +5192,23 @@
 <H2><A NAME="Replication Types">16.2. Replication Types</A></H2>
 <H3><A NAME="syncrepl replication">16.2.1. syncrepl replication</A></H3>
 <H3><A NAME="delta-syncrepl replication">16.2.2. delta-syncrepl replication</A></H3>
-<H3><A NAME="N-Way Multi-Master">16.2.3. N-Way Multi-Master</A></H3>
-<P>http://www.connexitor.com/blog/pivot/entry.php?id=105#body http://www.openldap.org/lists/openldap-software/200702/msg00006.html http://www.openldap.org/lists/openldap-software/200602/msg00064.html</P>
-<H3><A NAME="MirrorMode">16.2.4. MirrorMode</A></H3>
+<H3><A NAME="N-Way Multi-Master replication">16.2.3. N-Way Multi-Master replication</A></H3>
+<P>Multi-Master replication is a replication technique using Syncrepl to replicate data to multiple Master Directory servers.</P>
+<UL>
+<LI>Advantages of Multi-Master replication:<UL>
+<LI>If any master fails, other masters will continue to accept updates
+<LI>Avoids a single point of failure
+<LI>Masters can be located in several physical sites i.e. distributed across the network/globe.
+<LI>Good for Automatic failover/High Availability</UL>
+<LI>Disadvantages of Multi-Master replication:<UL>
+<LI>It has <B>NOTHING</B> to do with load balancing
+<LI><A HREF="http://www.openldap.org/faq/data/cache/1240.html">http://www.openldap.org/faq/data/cache/1240.html</A>
+<LI>If connectivity with a master is lost because of a network partition, then &quot;automatic failover&quot; can just compound the problem
+<LI>Typically, a particular machine cannot distinguish between losing contact with a peer because that peer crashed, or because the network link has failed
+<LI>If a network is partitioned and multiple clients start writing to each of the &quot;masters&quot; then reconciliation will be a pain; it may be best to simply deny writes to the clients that are partitioned from the single master
+<LI>Masters <B>must</B> propagate writes to <B>all</B> the other servers, which means the network traffic and write load is constant and spreads across all of the servers</UL></UL>
+<P>This is discussed in full in the <A HREF="#N-Way Multi-Master">N-Way Multi-Master</A> section below</P>
+<H3><A NAME="MirrorMode replication">16.2.4. MirrorMode replication</A></H3>
 <P>MirrorMode is a hybrid configuration that provides all of the consistency guarantees of single-master replication, while also providing the high availability of multi-master. In MirrorMode two masters are set up to replicate from each other (as a multi-master configuration) but an external frontend is employed to direct all writes to only one of the two servers. The second master will only be used for writes if the first master crashes, at which point the frontend will switch to directing all writes to the second master. When a crashed master is repaired and restarted it will automatically catch up to any changes on the running master and resync.</P>
 <P>This is discussed in full in the <A HREF="#MirrorMode">MirrorMode</A> section below</P>
 <H2><A NAME="LDAP Sync Replication">16.3. LDAP Sync Replication</A></H2>
@@ -5218,11 +5298,13 @@
 <P>The provider <EM>slapd</EM>(8) is not required to be restarted. <EM>contextCSN</EM> is automatically generated as needed: it might be originally contained in the <TERM>LDIF</TERM> file, generated by <EM>slapadd</EM> (8), generated upon changes in the context, or generated when the first LDAP Sync search arrives at the provider.  If an LDIF file is being loaded which did not previously contain the <EM>contextCSN</EM>, the <EM>-w</EM> option should be used with <EM>slapadd</EM> (8) to cause it to be generated. This will allow the server to startup a little quicker the first time it runs.</P>
 <P>When starting a consumer <EM>slapd</EM>(8), it is possible to provide a synchronization cookie as the <EM>-c cookie</EM> command line option in order to start the synchronization from a specific state.  The cookie is a comma separated list of name=value pairs. Currently supported syncrepl cookie fields are <EM>csn=&lt;csn&gt;</EM> and <EM>rid=&lt;rid&gt;</EM>. <EM>&lt;csn&gt;</EM> represents the current synchronization state of the consumer replica.  <EM>&lt;rid&gt;</EM> identifies a consumer replica locally within the consumer server. It is used to relate the cookie to the syncrepl definition in <EM>slapd.conf</EM>(5) which has the matching replica identifier.  The <EM>&lt;rid&gt;</EM> must have no more than 3 decimal digits.  The command line cookie overrides the synchronization cookie stored in the consumer replica database.</P>
 <H2><A NAME="N-Way Multi-Master">16.4. N-Way Multi-Master</A></H2>
+<P>Import and expand from link:</P>
+<P><A HREF="http://blog.suretecsystems.com/archives/40-OpenLDAP-Weekly-News-Issue-5.html#extended">http://blog.suretecsystems.com/archives/40-OpenLDAP-Weekly-News-Issue-5.html#extended</A></P>
 <H2><A NAME="MirrorMode">16.5. MirrorMode</A></H2>
 <H3><A NAME="Arguments for MirrorMode">16.5.1. Arguments for MirrorMode</A></H3>
 <UL>
 <LI>Provides a high-availability (HA) solution for directory writes (replicas handle reads)
-<LI>As long as one Master is operational, writes can safely be excepted
+<LI>As long as one Master is operational, writes can safely be accepted
 <LI>Master nodes replicate from each other, so they are always up to date and can be ready to take over (hot standby)
 <LI>Syncrepl also allows the master nodes to re-synchronize after any downtime
 <LI>Delta-Syncrepl can be used</UL>
@@ -5237,13 +5319,16 @@
 <LI>To ensure that both databases are consistent, each database might have to be put in read-only mode while performing a slapcat.
 <LI>When using slapcat, the generated LDIF files can be rather large. This can happen with a non-MirrorMode deployment also.</UL></UL>
 <H3><A NAME="MirrorMode Configuration">16.5.3. MirrorMode Configuration</A></H3>
-<P>MirrorMode configuration is actually very easy. If you have ever setup a normal slapd syncrepl provider, then the only change is the directive:</P>
+<P>MirrorMode configuration is actually very easy. If you have ever setup a normal slapd syncrepl provider, then the only change is the following two directives:</P>
 <PRE>
        mirrormode  on
+       serverID    1
 </PRE>
-<P>You also need to make you the <EM>rid</EM> of each mirror node pair is different and that the <EM>provider</EM> syncrepl directive points to the other mirror pair.</P>
+<P><HR WIDTH="80%" ALIGN="Left">
+<STRONG>Note: </STRONG>You need to make sure that the <EM>serverID</EM> of each mirror node pair is different and that the <EM>provider</EM> syncrepl directive points to the opposite mirror node.
+<HR WIDTH="80%" ALIGN="Left"></P>
 <H4><A NAME="Mirror Node Configuration">16.5.3.1. Mirror Node Configuration</A></H4>
-<P>This is the same as the <A HREF="#Set up the provider slapd">Set up the provider slapd</A> section, referencing <A HREF="#delta-syncrepl replication">delta-syncrepl replication</A> if using <EM>delta-syncrepl</EM>.</P>
+<P>This is the same as the <A HREF="#Set up the provider slapd">Set up the provider slapd</A> section, reference <A HREF="#delta-syncrepl replication">delta-syncrepl replication</A> if using <EM>delta-syncrepl</EM>.</P>
 <P>Here's a specific cut down example using <A HREF="#LDAP Sync Replication">LDAP Sync Replication</A> in <EM>refreshAndPersist</EM> mode (<EM>delta-syncrepl</EM> can be used also):</P>
 <P>MirrorMode node 1:</P>
 <PRE>
@@ -5259,11 +5344,12 @@
                      retry=&quot;60 +&quot;
 
        mirrormode on
+       serverID    1
 </PRE>
 <P>MirrorMode node 2:</P>
 <PRE>
        # syncrepl directives
-       syncrepl      rid=2
+       syncrepl      rid=1
                      provider=ldap://ldap-rid1.example.com
                      bindmethod=simple
                      binddn=&quot;cn=mirrormode,dc=example,dc=com&quot;
@@ -5274,11 +5360,14 @@
                      retry=&quot;60 +&quot;
 
        mirrormode on
+       serverID    2
 </PRE>
-<P>It's simple really; each MirrorMode node is setup <B>exactly</B> the same, except that the <B>provider</B> directive is set to point to the other MirrorMode node.</P>
+<P>It's simple really; each MirrorMode node is setup <B>exactly</B> the same, except that the <B>provider</B> directive is set to point to the other MirrorMode node and the <EM>serverID</EM> is unique.</P>
 <H4><A NAME="Failover Configuration">16.5.3.2. Failover Configuration</A></H4>
 <P>There are generally 2 choices for this; 1.  Hardware proxies/load-balancing or dedicated proxy software, 2. using a Back-LDAP proxy as a syncrepl provider</P>
-<P>MORE HERE and a nice PICTURE</P>
+<P>A typical enterprise example might be:</P>
+<P><CENTER><IMG SRC="dual_dc.png" ALIGN="center"></CENTER></P>
+<P ALIGN="Center">Figure X.Y: MirrorMode in a Dual Data Center Configuration</P>
 <H4><A NAME="Normal Consumer Configuration">16.5.3.3. Normal Consumer Configuration</A></H4>
 <P>This is exactly the same as the <A HREF="#Set up the consumer slapd">Set up the consumer slapd</A> section. It can either setup in normal <A HREF="#syncrepl replication">syncrepl replication</A> mode, or in <A HREF="#delta-syncrepl replication">delta-syncrepl replication</A> mode.</P>
 <H3><A NAME="MirrorMode Summary">16.5.4. MirrorMode Summary</A></H3>
@@ -6040,29 +6129,38 @@
       ldapsearch -b 'dc=example,dc=com' '(cn=jane*)'
 </PRE>
 <P>to tell it where to start the search.</P>
-<P>The -b should be specified for all LDAP commands unless you have an ldap.conf(5) default configured.</P>
-<P>See Also: ldapsearch(1), ldapmodify(1), and (Xref) How do I specify default base DN for clients? Also, slapadd(8) and its ancillary programs are very strict about the syntax of the LDIF file. Some liberties in the LDIF file may result in an apparently successful creation of the database, but accessing some parts of it may be difficult.</P>
-<P>One known common error in database creation is putting a blank line before the first entry in the LDIF file. There must be no leading blank lines in the LDIF file.</P>
-<P>It is generally recommended that ldapadd(1) be used instead of slapadd(8) when adding new entries your directory. slapadd(8) should be used to bulk load entries known to be valid. Another cause of this message is a referral entry to an unpopulated directory. Either remove the referral, or add a single record with the referral base DN to the empty directory. This error may also occur when slapd is unable to access the contents of its database because of file permission problems. For instance, on a Red Hat Linux system, slapd runs as user 'ldap'. When slapadd is run as root to create a database from scratch, the contents of /var/lib/ldap are created with user and group root and with permission 600, making the contents inaccessible to the slapd server.</P>
+<P>The <TT>-b</TT> should be specified for all LDAP commands unless you have an <EM>ldap.conf</EM>(5) default configured.</P>
+<P>See <EM>ldapsearch</EM>(1), <EM>ldapmodify</EM>(1)</P>
+<P>Also, <EM>slapadd</EM>(8) and its ancillary programs are very strict about the syntax of the LDIF file.</P>
+<P>Some liberties in the LDIF file may result in an apparently successful creation of the database, but accessing some parts of it may be difficult.</P>
+<P>One known common error in database creation is putting a blank line before the first entry in the LDIF file. <B>There must be no leading blank lines in the LDIF file.</B></P>
+<P>It is generally recommended that <EM>ldapadd</EM>(1) be used instead of <EM>slapadd</EM>(8) when adding new entries your directory. <EM>slapadd</EM>(8) should be used to bulk load entries known to be valid.</P>
+<P>Another cause of this message is a referral ({SECT:Constructing a Distributed Directory Service}}) entry to an unpopulated directory.</P>
+<P>Either remove the referral, or add a single record with the referral base DN to the empty directory.</P>
+<P>This error may also occur when slapd is unable to access the contents of its database because of file permission problems. For instance, on a Red Hat Linux system, slapd runs as user 'ldap'. When slapadd is run as root to create a database from scratch, the contents of <TT>/var/lib/ldap</TT> are created with user and group root and with permission 600, making the contents inaccessible to the slapd server.</P>
 <H3><A NAME="ldap_*: Can\'t chase referral">C.1.3. ldap_*: Can't chase referral</A></H3>
 <P>This is caused by the line</P>
 <PRE>
       referral        ldap://root.openldap.org
 </PRE>
-<P>in slapd.conf, It was provided as an example for how to use referrals in the original file. however if your machine is not permanently connected to the Internet, it will fail to find the server, and hence produce an error message.</P>
-<P>To resolve, just place a # in front of line and restart slapd or point it to an available ldap server. See also: ldapadd(1) ldapmodify(1) slapd.conf(5)</P>
+<P>In <TT>slapd.conf</TT>, it was provided as an example for how to use referrals in the original file. However if your machine is not permanently connected to the Internet, it will fail to find the server, and hence produce an error message.</P>
+<P>To resolve, just place a # in front of line and restart slapd or point it to an available ldap server.</P>
+<P>See also: <EM>ldapadd</EM>(1), <EM>ldapmodify</EM>(1) and <EM>slapd.conf</EM>(5)</P>
 <H3><A NAME="ldap_*: server is unwilling to perform">C.1.4. ldap_*: server is unwilling to perform</A></H3>
-<P>The OpenLDAP server will return an unwilling to perform error if the backend holding the target entry does not support the given operation. The password backend is only willing to perform searches. It will return an unwilling to perform error for all other operations. The shell backend is configurable and may support a limited subset of operations. Check for other errors indicating a shortage of resources required by the directory server. i.e. you may have a full disk etc</P>
+<P>slapd will return an unwilling to perform error if the backend holding the target entry does not support the given operation.</P>
+<P>The password backend is only willing to perform searches. It will return an unwilling to perform error for all other operations.</P>
+<P>The shell backend is configurable and may support a limited subset of operations. Check for other errors indicating a shortage of resources required by the directory server. i.e. you may have a full disk etc</P>
 <H3><A NAME="ldap_*: Insufficient access">C.1.5. ldap_*: Insufficient access</A></H3>
-<P>This error occurs when server denies the operation due to insufficient access. This is usually caused by binding to a DN with insufficient privileges (or binding anonymously) to perform the operation. You can bind as the rootdn/rootpw specified in slapd.conf(5) to gain full access. Otherwise, you must bind to an entry which has been granted the appropriate rights through access controls. See also: ldapadd(1) ldapdelete(1) ldapmodify(1) ldapmodrdn(1) ldapsearch(1) slapd.conf(5) (Xref) ldap_bind: Insufficient access (Xref) Access Control</P>
+<P>This error occurs when server denies the operation due to insufficient access. This is usually caused by binding to a DN with insufficient privileges (or binding anonymously) to perform the operation.</P>
+<P>You can bind as the rootdn/rootpw specified in <EM>slapd.conf</EM>(5) to gain full access. Otherwise, you must bind to an entry which has been granted the appropriate rights through access controls.</P>
 <H3><A NAME="ldap_*: Invalid DN syntax">C.1.6. ldap_*: Invalid DN syntax</A></H3>
 <P>The target (or other) DN of the operation is invalid. This implies that either the string representation of the DN is not in the required form, one of the types in the attribute value assertions is not defined, or one of the values in the attribute value assertions does not conform to the appropriate syntax.</P>
 <H3><A NAME="ldap_*: Referral hop limit exceeded">C.1.7. ldap_*: Referral hop limit exceeded</A></H3>
 <P>This error generally occurs when the client chases a referral which refers itself back to a server it already contacted. The server responds as it did before and the client loops. This loop is detected when the hop limit is exceeded.</P>
 <P>This is most often caused through misconfiguration of the server's default referral. The default referral should not be itself:</P>
-<P>That is, on ldap://myldap/ the default referral should not be ldap://myldap/ (or any hostname/ip which is equivalent to myldap).</P>
+<P>That is, on <A HREF="ldap://myldap/">ldap://myldap/</A> the default referral should not be <A HREF="ldap://myldap/">ldap://myldap/</A> (or any hostname/ip which is equivalent to myldap).</P>
 <H3><A NAME="ldap_*: operations error">C.1.8. ldap_*: operations error</A></H3>
-<P>In some versions of slapd(8), operationsError was returned instead of other. See also: (Xref) ldap_*: other error.</P>
+<P>In some versions of <EM>slapd</EM>(8), <EM>operationsError</EM> was returned instead of other.</P>
 <H3><A NAME="ldap_*: other error">C.1.9. ldap_*: other error</A></H3>
 <P>The other result code indicates an internal error has occurred. While the additional information provided with the result code might provide some hint as to the problem, often one will need to consult the server's log files.</P>
 <H3><A NAME="ldap_add/modify: Invalid syntax">C.1.10. ldap_add/modify: Invalid syntax</A></H3>
@@ -6072,25 +6170,51 @@
 <LI>extraneous white space (especially trailing white space)
 <LI>improperly encoded characters (LDAPv3 uses UTF-8 encoded Unicode)
 <LI>empty values (few syntaxes allow empty values)</UL>
-<P>For certain syntax, like OBJECT IDENTIFIER (OID), this error can indicate that the OID descriptor (a &quot;short name&quot;) provided is unrecognized. For instance, this error is returned if the objectClass value provided is unrecognized.</P>
+<P>For certain syntax, like OBJECT IDENTIFIER (OID), this error can indicate that the OID descriptor (a &quot;short name&quot;) provided is unrecognized. For instance, this error is returned if the <EM>objectClass</EM> value provided is unrecognized.</P>
 <H3><A NAME="ldap_add/modify: Object class violation">C.1.11. ldap_add/modify: Object class violation</A></H3>
 <P>This error is returned with the entry to be added or the entry as modified violates the object class schema rules. Normally additional information is returned the error detailing the violation. Some of these are detailed below.</P>
 <P>Violations related to the entry's attributes:</P>
 <PRE>
-      Attribute not allowed A provided attribute is not allowed by the entry's object class(es).
-      Missing required attribute An attribute required by the entry's object class(es) was not provided.
+      Attribute not allowed
 </PRE>
+<P>A provided attribute is not allowed by the entry's object class(es).</P>
+<PRE>
+      Missing required attribute
+</PRE>
+<P>An attribute required by the entry's object class(es) was not provided.</P>
 <P>Violations related to the entry's class(es):</P>
 <PRE>
-      Entry has no objectClass attribute The entry did not state which object classes it belonged to.
-      Unrecognized objectClass One (or more) of the listed objectClass values is not recognized.
-      No structural object class provided None of the listed objectClass values is structural.
-      Invalid structural object class chain Two or more structural objectClass values are not in same structural object class chain. See also (Xref) ldap add: invalid structural object class chain.
-      Structural object class modification Modify operation attempts to change the structural class of the entry. See also (Xref) ldap_modify: cannot modify object class.
-      Instanstantiation of abstract objectClass. An abstract class is not subordinate to any listed structural or auxiliary class.
-      Invalid structural object class Other structural object class problem.
-      No structuralObjectClass operational attribute This is commonly returned when a shadow server is provided an entry which does not contain the structuralObjectClass operational attribute.
+      Entry has no objectClass attribute
 </PRE>
+<P>The entry did not state which object classes it belonged to.</P>
+<PRE>
+      Unrecognized objectClass
+</PRE>
+<P>One (or more) of the listed objectClass values is not recognized.</P>
+<PRE>
+      No structural object class provided
+</PRE>
+<P>None of the listed objectClass values is structural.</P>
+<PRE>
+      Invalid structural object class chain
+</PRE>
+<P>Two or more structural objectClass values are not in same structural object class chain.</P>
+<PRE>
+      Structural object class modification
+</PRE>
+<P>Modify operation attempts to change the structural class of the entry.</P>
+<PRE>
+      Instanstantiation of abstract objectClass.
+</PRE>
+<P>An abstract class is not subordinate to any listed structural or auxiliary class.</P>
+<PRE>
+      Invalid structural object class
+</PRE>
+<P>Other structural object class problem.</P>
+<PRE>
+      No structuralObjectClass operational attribute
+</PRE>
+<P>This is commonly returned when a shadow server is provided an entry which does not contain the structuralObjectClass operational attribute.</P>
 <P>Note that the above error messages as well as the above answer assumes basic knowledge of LDAP/X.500 schema.</P>
 <H3><A NAME="ldap_add: No such object">C.1.12. ldap_add: No such object</A></H3>
 <P>The &quot;ldap_add: No such object&quot; error is commonly returned if parent of the entry being added does not exist. Add the parent entry first...</P>
@@ -6102,14 +6226,16 @@
 <PRE>
       ldapsearch -b 'dc=domain,dc=com' -s base '(objectclass=*)'
 </PRE>
-<P>If it doesn't, add it. See the Quick Start Guide (http://www.openldap.org/doc/admin/quickstart.html) for assistance.</P>
+<P>If it doesn't, add it. See <A HREF="#A Quick-Start Guide">A Quick-Start Guide</A> for assistance.</P>
 <P><HR WIDTH="80%" ALIGN="Left">
-<STRONG>Note: </STRONG>if the entry being added is the same as database suffix, it's parent isn't required. i.e.: if your suffix is &quot;dc=domain,dc=com&quot;, &quot;dc=com&quot; doesn't need to exist to add &quot;dc=domain,dc=com&quot;. This error will also occur if you try to add any entry that the server is not configured to hold.
+<STRONG>Note: </STRONG>if the entry being added is the same as database suffix, it's parent isn't required. i.e.: if your suffix is &quot;dc=domain,dc=com&quot;, &quot;dc=com&quot; doesn't need to exist to add &quot;dc=domain,dc=com&quot;.
 <HR WIDTH="80%" ALIGN="Left"></P>
+<P>This error will also occur if you try to add any entry that the server is not configured to hold.</P>
 <P>For example, if your database suffix is &quot;dc=domain,dc=com&quot; and you attempt to add &quot;dc=domain2,dc=com&quot;, &quot;dc=com&quot;, &quot;dc=domain,dc=org&quot;, &quot;o=domain,c=us&quot;, or an other DN in the &quot;dc=domain,dc=com&quot; subtree, the server will return a &quot;No such object&quot; (or referral) error.</P>
-<P>slapd(8) will generally return &quot;no global superior knowledge&quot; as additional information indicating its return noSuchObject instead of a referral as the server is not configured with knowledge of a global superior server. See also: ldapadd(1) ldapmodify(1) (Xref) ldap_add/delete/modify/rename: no global superior knowledge</P>
+<P><EM>slapd</EM>(8) will generally return &quot;no global superior knowledge&quot; as additional information indicating its return noSuchObject instead of a referral as the server is not configured with knowledge of a global superior server.</P>
 <H3><A NAME="ldap add: invalid structural object class chain">C.1.13. ldap add: invalid structural object class chain</A></H3>
-<P>This particular error refers to the rule about STRUCTURAL objectclasses, which states that an object is of one STRUCTURAL class, the structural class of the object. The object is said to belong to this class, zero or more auxiliaries classes, and their super classes. While all of these classes are commonly listed in the objectClass attribute of the entry, one of these classes is the structural object class of the entry. Thus, it is OK for an objectClass attribute to contain inetOrgPerson, organizationalPerson, and person because they inherit one from another to form a single super class chain. That is, inetOrgPerson SUPs organizationPerson SUPs person. On the other hand, it is invalid for both inetOrgPerson and account to be listed in objectClass as inetOrgPerson and account are not part of the same super class chain (unless some other class is also listed with is a subclass of both).</P>
+<P>This particular error refers to the rule about STRUCTURAL objectclasses, which states that an object is of one STRUCTURAL class, the structural class of the object. The object is said to belong to this class, zero or more auxiliaries classes, and their super classes.</P>
+<P>While all of these classes are commonly listed in the objectClass attribute of the entry, one of these classes is the structural object class of the entry. Thus, it is OK for an objectClass attribute to contain inetOrgPerson, organizationalPerson, and person because they inherit one from another to form a single super class chain. That is, inetOrgPerson SUPs organizationPerson SUPs person. On the other hand, it is invalid for both inetOrgPerson and account to be listed in objectClass as inetOrgPerson and account are not part of the same super class chain (unless some other class is also listed with is a subclass of both).</P>
 <P>To resolve this problem, one must determine which class will better serve structural object class for the entry, adding this class to the objectClass attribute (if not already present), and remove any other structural class from the entry's objectClass attribute which is not a super class of the structural object class.</P>
 <P>Which object class is better depends on the particulars of the situation. One generally should consult the documentation for the applications one is using for help in making the determination.</P>
 <H3><A NAME="ldap_add: no structuralObjectClass operational attribute">C.1.14. ldap_add: no structuralObjectClass operational attribute</A></H3>
@@ -6120,7 +6246,6 @@
            additional info: no structuralObjectClass operational attribute
 </PRE>
 <P>when slapd(8) cannot determine, based upon the contents of the objectClass attribute, what the structural class of the object should be.</P>
-<P>While this normally should produce an object class violation error, some versions of slapd(8) contain a minor bug which cause the object class error not to be properly detected. In these versions, slapd(8) instead catches its failure to populate the structuralObjectClass operational attribute (hence the internal error). Kurt at OpenLDAP.org See also: (Xref) ldap add: invalid structural object class chain Kurt at OpenLDAP.org</P>
 <H3><A NAME="ldap_add/modify/rename: Naming violation">C.1.15. ldap_add/modify/rename: Naming violation</A></H3>
 <P>OpenLDAP's slapd checks for naming attributes and distinguished values consistency, according to RFC 4512.</P>
 <P>Naming attributes are those attributeTypes that appear in an entry's RDN; distinguished values are the values of the naming attributes that appear in an entry's RDN, e.g, in</P>
@@ -6143,7 +6268,10 @@
                 # note: &quot;dc: example&quot; is missing
 </PRE>
 <UL>
-<LI>the naming attributes are present in the entry, but in the attributeType definition they are marked as: o collective o operational o obsolete
+<LI>the naming attributes are present in the entry, but in the attributeType definition they are marked as:<UL>
+<LI>collective
+<LI>operational
+<LI>obsolete</UL>
 <LI>the naming attributes are present in the entry, but the distinguished values are not; for example:</UL>
 <PRE>
                 dn: dc=example,dc=com
@@ -6152,19 +6280,25 @@
                 # note: &quot;dc&quot; is present, but the value is not &quot;example&quot;
 </PRE>
 <UL>
-<LI>the naming attributes are present in the entry, with the distinguished values, but the naming attributes: o do not have an equality field, so equality cannot be asserted o the matching rule is not supported (yet) o the matching rule is not appropriate
+<LI>the naming attributes are present in the entry, with the distinguished values, but the naming attributes:<UL>
+<LI>do not have an equality field, so equality cannot be asserted
+<LI>the matching rule is not supported (yet)
+<LI>the matching rule is not appropriate</UL>
 <LI>the given distinguished values do not comply with their syntax
 <LI>other errors occurred during the validation/normalization/match process; this is a catchall: look at previous logs for details in case none of the above apply to your case.</UL>
-<P>In any case, make sure that the attributeType definition for the naming attributes contains an appropriate EQUALITY field; or that of the superior, if they are defined based on a superior attributeType (look at the SUP field). See RFC 4512 for details. ando at sys-net.it, Kurt at OpenLDAP.org</P>
+<P>In any case, make sure that the attributeType definition for the naming attributes contains an appropriate EQUALITY field; or that of the superior, if they are defined based on a superior attributeType (look at the SUP field). See RFC 4512 for details.</P>
 <H3><A NAME="ldap_add/delete/modify/rename: no global superior knowledge">C.1.16. ldap_add/delete/modify/rename: no global superior knowledge</A></H3>
 <P>If the target entry name places is not within any of the databases the server is configured to hold and the server has no knowledge of a global superior, the server will indicate it is unwilling to perform the operation and provide the text &quot;no global superior knowledge&quot; as additional text.</P>
-<P>Likely the entry name is incorrect, or the server is not properly configured to hold the named entry, or, in distributed directory environments, a default referral was not configured. Kurt at OpenLDAP.org</P>
+<P>Likely the entry name is incorrect, or the server is not properly configured to hold the named entry, or, in distributed directory environments, a default referral was not configured.</P>
 <H3><A NAME="ldap_bind: Insufficient access">C.1.17. ldap_bind: Insufficient access</A></H3>
 <P>Current versions of slapd(8) requires that clients have authentication permission to attribute types used for authentication purposes before accessing them to perform the bind operation. As all bind operations are done anonymously (regardless of previous bind success), the auth access must be granted to anonymous.</P>
 <P>In the example ACL below grants the following access:</P>
 <UL>
-<LI>to anonymous users: o permission to authenticate using values of userPassword
-<LI>to authenticated users: o permission to update (but not read) their userPassword o permission to read any object excepting values of userPassword</UL>
+<LI>to anonymous users:<UL>
+<LI>permission to authenticate using values of userPassword</UL>
+<LI>to authenticated users:<UL>
+<LI>permission to update (but not read) their userPassword
+<LI>permission to read any object excepting values of userPassword</UL></UL>
 <P>All other access is denied.</P>
 <PRE>
         access to attr=userPassword
@@ -6174,54 +6308,51 @@
           by self write
           by users read
 </PRE>
-<P>Note that latest versions of slapd(8) will report invalid credentials in cases where the client has insufficient access to complete the operation. This is avoid inappropriate disclosure of the validity of the user's name. See also: ldapadd(1) ldapdelete(1) ldapmodify(1) ldapmodrdn(1) ldapsearch(1) slapd.conf(5) (Xref) Access Control</P>
 <H3><A NAME="ldap_bind: Invalid credentials">C.1.18. ldap_bind: Invalid credentials</A></H3>
 <P>The error usually occurs when the credentials (password) provided does not match the userPassword held in entry you are binding to.</P>
 <P>The error can also occur when the bind DN specified is not known to the server.</P>
 <P>Check both! In addition to the cases mentioned above you should check if the server denied access to userPassword on selected parts of the directory. In fact, slapd always returns &quot;Invalid credentials&quot; in case of failed bind, regardless of the failure reason, since other return codes could reveal the validity of the user's name.</P>
-<P>To debug access rules defined in slapd.conf, add &quot;ACL&quot; to log level. See also: ldapadd(1) ldapdelete(1) ldapmodify(1) ldapmodrdn(1) ldapsearch(1) slapd.conf(5) (Xref) ldap_bind: No such object</P>
-<H3><A NAME="ldap_bind: No such object">C.1.19. ldap_bind: No such object</A></H3>
-<P>This answer is specific to OpenLDAP 1.2 and earlier releases. In later releases, ldap_bind returns (Xref) ldap_bind: Invalid credentials instead. 'No such object' is only returned by ldap_bind operation in a few special cases. Normally, the server returns (Xref) ldap_bind: Invalid credentials when the entry associated with the bind DN cannot be located. This error occurs when binding using the rootdn and the asserted value doesn't match configured password value. Rootpw values must be conform to RFC 2307 format defined for userPassword. See also: ldapadd(1) ldapdelete(1) ldapmodify(1) ldapmodrdn(1) ldapsearch(1) slapd.conf(5) (Xref) ldap_bind: Invalid credentials</P>
-<H3><A NAME="ldap_bind: Protocol error">C.1.20. ldap_bind: Protocol error</A></H3>
+<P>To debug access rules defined in slapd.conf, add &quot;ACL&quot; to log level.</P>
+<H3><A NAME="ldap_bind: Protocol error">C.1.19. ldap_bind: Protocol error</A></H3>
 <P>There error is generally occurs when the LDAP version requested by the client is not supported by the server.</P>
-<P>The OpenLDAP Software 1.x server only accepts version 2 LDAP Bind requests. Note that 1.x server expects U-Mich LDAP, an LDAPv2 variant, to be used. This variant is sometimes referred to as LDAPv2+.</P>
-<P>The OpenLDAP Software 2.x server, by default, only accepts version 3 LDAP Bind requests but can be configured to accept a version 2 LDAP Bind request. Note that the 2.x server expects LDAPv3 [RFC4510] to be used when the client requests version 3 and expects a limited LDAPv3 variant (basically, LDAPv3 syntax and semantics in an LDAPv2 PDUs) to be used when version 2 is expected. This variant is also sometimes referred to as LDAPv2+, but differs from the U-Mich LDAP variant in a number of ways.</P>
-<P>Use of LDAPv3! See also: (Xref) How to configure slapd(8) with LDAPv2 support (for legacy clients)?.</P>
-<H3><A NAME="ldap_modify: cannot modify object class">C.1.21. ldap_modify: cannot modify object class</A></H3>
-<P>This message is commonly returned when attempting to modify the objectClass attribute in a manner inconsistent with the LDAP/X.500 information model. In particular, it commonly occurs when one tries to change the structure of the object from one class to another, for instance, trying to change an 'apple' into a 'pear' or a 'fruit' into a 'pear'. Such changes are disallowed by the slapd(8) in accordance with LDAP and X.500 restrictions.</P>
-<P>To overcome this restriction in 2.3 (and prior releases), one must re-create the object with the desired new structural object class (e.g., delete old object then add new object). In 2.4, support for a new control will (hopefully) be introduced to allow the (authorized) user to request this (and various other model restrictions) be temporarily relaxed.</P>
-<H3><A NAME="ldap_sasl_interactive_bind_s: ..">C.1.22. ldap_sasl_interactive_bind_s: ...</A></H3>
-<P>If you intended to bind using a DN and password and get an error from ldap_sasl_interactive_bind_s, you likely forgot to provide a '-x' option to the command. By default, SASL authentication is used. '-x' is necessary to select &quot;simple&quot; authentication. Kurt at OpenLDAP.org</P>
-<H3><A NAME="ldap_sasl_interactive_bind_s: No such Object">C.1.23. ldap_sasl_interactive_bind_s: No such Object</A></H3>
-<P>This indicates that LDAP SASL authentication function could not read the Root DSE. The error will occur when the server doesn't provide a root DSE. This may be due to access controls.</P>
-<P>Note, also, that LDAPv2 servers, such as those OpenLDAP 1.x's slapd(8), do not provide a root DSE. Use -P 2 when LDAPv2 is desired. LDAPv2 servers also do not support SASL binds, so you will need to use a &quot;simple&quot; bind instead.</P>
+<P>The OpenLDAP Software 2.x server, by default, only accepts version 3 LDAP Bind requests but can be configured to accept a version 2 LDAP Bind request.</P>
 <P><HR WIDTH="80%" ALIGN="Left">
-<STRONG>Note: </STRONG>SASL bind is the default for all OpenLDAP tools. To force use of &quot;simple&quot; bind, use the &quot;-x&quot; option. Use of &quot;simple&quot; bind is not recommended unless one has adequate confidentiality protection in place (e.g. TLS/SSL, IPSEC).
+<STRONG>Note: </STRONG>The 2.x server expects LDAPv3 [RFC4510] to be used when the client requests version 3 and expects a limited LDAPv3 variant (basically, LDAPv3 syntax and semantics in an LDAPv2 PDUs) to be used when version 2 is expected.
 <HR WIDTH="80%" ALIGN="Left"></P>
-<H3><A NAME="ldap_sasl_interactive_bind_s: No such attribute">C.1.24. ldap_sasl_interactive_bind_s: No such attribute</A></H3>
-<P>This indicates that LDAP SASL authentication function could read the Root DSE but it contained no supportedSASLMechanism attribute. The supportedSASLmechanism attribute lists mechanisms currently available. The list may be empty because none of the supported mechanisms are currently available. For example, EXTERNAL is listed only if the client has established its identity by authenticating at a lower level (e.g. TLS).</P>
+<P>This variant is also sometimes referred to as LDAPv2+, but differs from the U-Mich LDAP variant in a number of ways.</P>
+<H3><A NAME="ldap_modify: cannot modify object class">C.1.20. ldap_modify: cannot modify object class</A></H3>
+<P>This message is commonly returned when attempting to modify the objectClass attribute in a manner inconsistent with the LDAP/X.500 information model. In particular, it commonly occurs when one tries to change the structure of the object from one class to another, for instance, trying to change an 'apple' into a 'pear' or a 'fruit' into a 'pear'.</P>
+<P>Such changes are disallowed by the slapd(8) in accordance with LDAP and X.500 restrictions.</P>
+<H3><A NAME="ldap_sasl_interactive_bind_s: ..">C.1.21. ldap_sasl_interactive_bind_s: ...</A></H3>
+<P>If you intended to bind using a DN and password and get an error from ldap_sasl_interactive_bind_s, you likely forgot to provide a '-x' option to the command. By default, SASL authentication is used. '-x' is necessary to select &quot;simple&quot; authentication.</P>
+<H3><A NAME="ldap_sasl_interactive_bind_s: No such Object">C.1.22. ldap_sasl_interactive_bind_s: No such Object</A></H3>
+<P>This indicates that LDAP SASL authentication function could not read the Root DSE. The error will occur when the server doesn't provide a root DSE. This may be due to access controls.</P>
+<H3><A NAME="ldap_sasl_interactive_bind_s: No such attribute">C.1.23. ldap_sasl_interactive_bind_s: No such attribute</A></H3>
+<P>This indicates that LDAP SASL authentication function could read the Root DSE but it contained no supportedSASLMechanism attribute.</P>
+<P>The supportedSASLmechanism attribute lists mechanisms currently available. The list may be empty because none of the supported mechanisms are currently available. For example, EXTERNAL is listed only if the client has established its identity by authenticating at a lower level (e.g. TLS).</P>
 <P><HR WIDTH="80%" ALIGN="Left">
 <STRONG>Note: </STRONG>the attribute may not be visible due to access controls
 <HR WIDTH="80%" ALIGN="Left"></P>
 <P><HR WIDTH="80%" ALIGN="Left">
 <STRONG>Note: </STRONG>SASL bind is the default for all OpenLDAP tools, e.g. ldapsearch(1), ldapmodify(1). To force use of &quot;simple&quot; bind, use the &quot;-x&quot; option. Use of &quot;simple&quot; bind is not recommended unless one has adequate confidentiality protection in place (e.g. TLS/SSL, IPSEC).
 <HR WIDTH="80%" ALIGN="Left"></P>
-<H3><A NAME="ldap_sasl_interactive_bind_s: Unknown authentication method">C.1.25. ldap_sasl_interactive_bind_s: Unknown authentication method</A></H3>
+<H3><A NAME="ldap_sasl_interactive_bind_s: Unknown authentication method">C.1.24. ldap_sasl_interactive_bind_s: Unknown authentication method</A></H3>
 <P>This indicates that none of the SASL authentication supported by the server are supported by the client, or that they are too weak or otherwise inappropriate for use by the client. Note that the default security options disallows the use of certain mechanisms such as ANONYMOUS and PLAIN (without TLS).</P>
 <P><HR WIDTH="80%" ALIGN="Left">
 <STRONG>Note: </STRONG>SASL bind is the default for all OpenLDAP tools. To force use of &quot;simple&quot; bind, use the &quot;-x&quot; option. Use of &quot;simple&quot; bind is not recommended unless one has adequate confidentiality protection in place (e.g. TLS/SSL, IPSEC).
 <HR WIDTH="80%" ALIGN="Left"></P>
-<H3><A NAME="ldap_sasl_interactive_bind_s: Local error (82)">C.1.26. ldap_sasl_interactive_bind_s: Local error (82)</A></H3>
+<H3><A NAME="ldap_sasl_interactive_bind_s: Local error (82)">C.1.25. ldap_sasl_interactive_bind_s: Local error (82)</A></H3>
 <P>Apparently not having forward and reverse DNS entries for the LDAP server can result in this error.</P>
-<H3><A NAME="ldap_search: Partial results and referral received">C.1.27. ldap_search: Partial results and referral received</A></H3>
-<P>This error is returned with the server responses to an LDAPv2 search query with both results (zero or more matched entries) and references (referrals to other servers). See also: ldapsearch(1). If the updatedn on the replica does not exist, a referral will be returned. It may do this as well if the ACL needs tweaking.</P>
-<H3><A NAME="ldap_start_tls: Operations error">C.1.28. ldap_start_tls: Operations error</A></H3>
+<H3><A NAME="ldap_search: Partial results and referral received">C.1.26. ldap_search: Partial results and referral received</A></H3>
+<P>This error is returned with the server responses to an LDAPv2 search query with both results (zero or more matched entries) and references (referrals to other servers). See also: ldapsearch(1).</P>
+<P>If the updatedn on the replica does not exist, a referral will be returned. It may do this as well if the ACL needs tweaking.</P>
+<H3><A NAME="ldap_start_tls: Operations error">C.1.27. ldap_start_tls: Operations error</A></H3>
 <P>ldapsearch(1) and other tools will return</P>
 <PRE>
         ldap_start_tls: Operations error (1)
               additional info: TLS already started
 </PRE>
-<P>when the user (though command line options and/or ldap.conf(5)) has requested TLS (SSL) be started twice. For instance, when specifying both &quot;-H ldaps://server.do.main&quot; and &quot;-ZZ&quot;.</P>
+<P>When the user (though command line options and/or ldap.conf(5)) has requested TLS (SSL) be started twice. For instance, when specifying both &quot;-H ldaps://server.do.main&quot; and &quot;-ZZ&quot;.</P>
 <H2><A NAME="Other Errors">C.2. Other Errors</A></H2>
 <H3><A NAME="ber_get_next on fd X failed errno=34 (Numerical result out of range)">C.2.1. ber_get_next on fd X failed errno=34 (Numerical result out of range)</A></H3>
 <P>This slapd error generally indicates that the client sent a message that exceeded an administrative limit. See sockbuf_max_incoming and sockbuf_max_incoming_auth configuration directives in slapd.conf(5).</P>
@@ -6234,51 +6365,82 @@
 <P>A keytab file is used to store keys that are to be used by services or daemons that are started at boot time. It is very important that these secrets are kept beyond reach of intruders.</P>
 <P>That's why the default keytab file is owned by root and protected from being read by others. Do not mess with these permissions, build a different keytab file for slapd instead.</P>
 <P>To do this, start kadmin, and enter the following commands:</P>
-<UL>
-<LI>addprinc -randkey ldap/ldap.example.com at EXAMPLE.COM
-<LI>ktadd -k /etc/openldap/ldap.keytab ldap/ldap.example.com at EXAMPLE.COM</UL>
+<PRE>
+     addprinc -randkey ldap/ldap.example.com at EXAMPLE.COM
+     ktadd -k /etc/openldap/ldap.keytab ldap/ldap.example.com at EXAMPLE.COM
+</PRE>
 <P>Then, on the shell, do:</P>
-<UL>
-<LI>chown ldap.ldap /etc/openldap/ldap.keytab
-<LI>chmod 600 /etc/openldap/ldap.keytab</UL>
+<PRE>
+     chown ldap.ldap /etc/openldap/ldap.keytab
+     chmod 600 /etc/openldap/ldap.keytab
+</PRE>
 <P>Now you have to tell slapd (well, actually tell the gssapi library in Kerberos 5 that is invoked by Cyrus SASL) where to find the new keytab. You do this by setting the environment variable KRB5_KTNAME like this:</P>
-<P>export KRB5_KTNAME=&quot;FILE:/etc/openldap/ldap.keytab&quot;</P>
-<P>Set that environment variable on the slapd start script (Red Hat users might find /etc/sysconfig/ldap a perfect place). jsanchez at openldap.org, hyc at openldap.org This only works if you are using MIT kerberos. It doesn't work with Heimdal, for instance. andreas at conectiva.com.br In Heimdal there is a function gsskrb5_register_acceptor_identity() that sets the path of the keytab file you want to use. In Cyrus SASL 2 you can add</P>
-<P>keytab: /path/to/file</P>
-<P>to your application's SASL config file to use this feature. This only works with Heimdal. hyc at openldap.org</P>
+<PRE>
+     export KRB5_KTNAME=&quot;FILE:/etc/openldap/ldap.keytab&quot;
+</PRE>
+<P>Set that environment variable on the slapd start script (Red Hat users might find /etc/sysconfig/ldap a perfect place).</P>
+<P>This only works if you are using MIT kerberos. It doesn't work with Heimdal, for instance.</P>
+<P>In Heimdal there is a function gsskrb5_register_acceptor_identity() that sets the path of the keytab file you want to use. In Cyrus SASL 2 you can add</P>
+<PRE>
+    keytab: /path/to/file
+</PRE>
+<P>to your application's SASL config file to use this feature. This only works with Heimdal.</P>
 <H3><A NAME="access from unknown denied">C.2.5. access from unknown denied</A></H3>
 <P>This related to TCP wrappers. See hosts_access(5) for more information. in the log file: &quot;access from unknown denied&quot; This related to TCP wrappers. See hosts_access(5) for more information. for example: add the line &quot;slapd: .hosts.you.want.to.allow&quot; in /etc/hosts.allow to get rid of the error.</P>
 <H3><A NAME="ldap_read: want=# error=Resource temporarily unavailable">C.2.6. ldap_read: want=# error=Resource temporarily unavailable</A></H3>
 <P>This message occurs normally. It means that pending data is not yet available from the resource, a network socket. slapd(8) will process the data once it becomes available.</P>
 <H3><A NAME="`make test\' fails">C.2.7. `make test' fails</A></H3>
 <P>Some times, `make test' fails at the very first test with an obscure message like</P>
-<P>make test make[1]: Entering directory `/ldap_files/openldap-2.2.13/tests' make[2]: Entering directory `/ldap_files/openldap-2.2.13/tests' Initiating LDAP tests for BDB... Cleaning up test run directory leftover from previous run. Running ./scripts/all...</P>
 <PRE>
-&gt;&gt;&gt;&gt; Executing all LDAP tests for bdb
-&gt;&gt;&gt;&gt; Starting test000-rootdse ... running defines.sh Starting slapd on TCP/IP port 9011... Using ldapsearch to retrieve the root DSE... Waiting 5 seconds for slapd to start...
+    make test
+    make[1]: Entering directory `/ldap_files/openldap-2.4.6/tests'
+    make[2]: Entering directory `/ldap_files/openldap-2.4.6/tests'
+    Initiating LDAP tests for BDB...
+    Cleaning up test run directory leftover from previous run.
+     Running ./scripts/all...
+    &gt;&gt;&gt;&gt;&gt; Executing all LDAP tests for bdb
+    &gt;&gt;&gt;&gt;&gt; Starting test000-rootdse ...
+    running defines.sh
+    Starting slapd on TCP/IP port 9011...
+    Using ldapsearch to retrieve the root DSE...
+    Waiting 5 seconds for slapd to start...
+    ./scripts/test000-rootdse: line 40: 10607 Segmentation fault $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING &gt;$LOG1 2&gt;&amp;1
+    Waiting 5 seconds for slapd to start...
+    Waiting 5 seconds for slapd to start...
+    Waiting 5 seconds for slapd to start...
+    Waiting 5 seconds for slapd to start...
+    Waiting 5 seconds for slapd to start...
+    ./scripts/test000-rootdse: kill: (10607) - No such pid
+    ldap_sasl_bind_s: Can't contact LDAP server (-1)
+    &gt;&gt;&gt;&gt;&gt; Test failed
+    &gt;&gt;&gt;&gt;&gt; ./scripts/test000-rootdse failed (exit 1)
+    make[2]: *** [bdb-yes] Error 1
+    make[2]: Leaving directory `/ldap_files/openldap-2.4.6/tests'
+    make[1]: *** [test] Error 2
+    make[1]: Leaving directory `/ldap_files/openldap-2.4.6/tests'
+    make: *** [test] Error 2
 </PRE>
-<UL>
-/scripts/test000-rootdse: line 40: 10607 Segmentation fault $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING &gt;$LOG1 2&gt;&amp;1 Waiting 5 seconds for slapd to start... Waiting 5 seconds for slapd to start... Waiting 5 seconds for slapd to start... Waiting 5 seconds for slapd to start... Waiting 5 seconds for slapd to start...
-<BR>
-/scripts/test000-rootdse: kill: (10607) - No such pid ldap_bind: Can't contact LDAP server (-1)</UL>
-<PRE>
-&gt;&gt;&gt;&gt; Test failed
-&gt;&gt;&gt;&gt; ./scripts/test000-rootdse failed (exit 1) make[2]: *** [bdb-yes] Error 1 make[2]: Leaving directory `/ldap_files/openldap-2.2.13/tests' make[1]: *** [test] Error 2 make[1]: Leaving directory `/ldap_files/openldap-2.2.13/tests' make: *** [test] Error 2
-</PRE>
 <P>or so. Usually, the five lines</P>
 <P>Waiting 5 seconds for slapd to start...</P>
 <P>indicate that slapd didn't start at all.</P>
-<P>For OpenLDAP 2.2 and later, in tests/testrun/slapd.1.log there is a full log of what slapd wrote while trying to start. The log level can be increased by setting the environment variable SLAPD_DEBUG to the corresponding value; see loglevel in slapd.conf(5) for the meaning of log levels.</P>
+<P>In tests/testrun/slapd.1.log there is a full log of what slapd wrote while trying to start. The log level can be increased by setting the environment variable SLAPD_DEBUG to the corresponding value; see loglevel in slapd.conf(5) for the meaning of log levels.</P>
 <P>A typical reason for this behavior is a runtime link problem, i.e. slapd cannot find some dynamic libraries it was linked against. Try running ldd(1) on slapd (for those architectures that support runtime linking).</P>
 <P>There might well be other reasons; the contents of the log file should help clarifying them.</P>
-<P>Tests that fire up multiple instances of slapd typically log to tests/testrun/slapd.&lt;n&gt;.log, with a distinct &lt;n&gt; for each instance of slapd; list tests/testrun/ for possible values of &lt;n&gt;. ando at sys-net.it</P>
+<P>Tests that fire up multiple instances of slapd typically log to tests/testrun/slapd.&lt;n&gt;.log, with a distinct &lt;n&gt; for each instance of slapd; list tests/testrun/ for possible values of &lt;n&gt;.</P>
 <H3><A NAME="ldap_*: Internal (implementation specific) error (80) - additional info: entry index delete failed">C.2.8. ldap_*: Internal (implementation specific) error (80) - additional info: entry index delete failed</A></H3>
-<P>This seems to be related with wrong ownership of the BDB's dir (/var/lib/ldap) and files. chmod -r openldap:openldap /var/lib/ldap fixes it in Debian Etch. I don't really know how the wrong permission went into place, but I suspect it has something to do with slapd's starting, no database existing (I had deleted it to get a new, fresh one), and slapd creating one before chroot. After a bug report, some insightful feedback, and some amount of testing, i found out that the 'wrong ownership of new files' problem is not with slapd but with slapadd. This happens when one initially populates the Directory. Oh, and the right switch of chown is '-R', not '-r'. My God! What a mess! The right command to correct this problem is: chown -R /var/lib/ldap</P>
-<P>pedrorandrade at gmail.com</P>
+<P>This seems to be related with wrong ownership of the BDB's dir (/var/lib/ldap) and files.</P>
+<PRE>
+    chmod -R openldap:openldap /var/lib/ldap
+</PRE>
+<P>fixes it in Debian</P>
 <H3><A NAME="ldap_sasl_interactive_bind_s: Can\'t contact LDAP server (-1)">C.2.9. ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)</A></H3>
-<P>Using SASL, when a client contacts LDAP server, the slapd service dies immediately and client gets an error : SASL/GSSAPI authentication started ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1) Then check the slapd service, it stopped. This may come from incompatible of using different versions of BerkeleyDB for installing of SASL and installing of OpenLDAP. The problem arises in case of using multiple version of BerkeleyDB. Solution: - Check which version of BerkeleyDB when install Cyrus SASL. - Reinstall OpenLDAP with the version of BerkeleyDB above. It was my case and that was the solution I did and it worked :) Hope this gives you some information.</P>
-<UL><UL><UL>
-<LI>Le Trung Kien</UL></UL></UL>
+<P>Using SASL, when a client contacts LDAP server, the slapd service dies immediately and client gets an error :</P>
+<PRE>
+     SASL/GSSAPI authentication started ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
+</PRE>
+<P>Then check the slapd service, it stopped.</P>
+<P>This may come from incompatible of using different versions of BerkeleyDB for installing of SASL and installing of OpenLDAP. The problem arises in case of using multiple version of BerkeleyDB. Solution: - Check which version of BerkeleyDB when install Cyrus SASL.</P>
+<P>Reinstall OpenLDAP with the version of BerkeleyDB above.</P>
 <P></P>
 <HR>
 <H1><A NAME="Recommended OpenLDAP Software Dependency Versions">D. Recommended OpenLDAP Software Dependency Versions</A></H1>

Modified: openldap/vendor/openldap-release/doc/guide/admin/guide.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/guide.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/guide.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/guide.sdf,v 1.7.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/guide.sdf,v 1.7.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 #

Modified: openldap/vendor/openldap-release/doc/guide/admin/index.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/index.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/index.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/index.sdf,v 1.7.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/index.sdf,v 1.7.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 #

Modified: openldap/vendor/openldap-release/doc/guide/admin/install.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/install.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/install.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/install.sdf,v 1.38.2.4 2007/10/24 15:20:32 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/install.sdf,v 1.38.2.5 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/intro.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/intro.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/intro.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/intro.sdf,v 1.45.2.4 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/intro.sdf,v 1.45.2.5 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 H1: Introduction to OpenLDAP Directory Services
@@ -361,11 +361,7 @@
 or the {{SECT: Backends}} section. There are also several examples for several 
 RDBMSes in {{F:back-sql/rdbms_depend/*}} subdirectories. 
 
-TO REFERENCE:
 
-http://blogs.sun.com/treydrake/entry/ldap_vs_relational_database
-http://blogs.sun.com/treydrake/entry/ldap_vs_relational_database_part
-
 H2: What is slapd and what can it do?
 
 {{slapd}}(8) is an LDAP directory server that runs on many different

Modified: openldap/vendor/openldap-release/doc/guide/admin/maintenance.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/maintenance.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/maintenance.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/maintenance.sdf,v 1.7.2.2 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/maintenance.sdf,v 1.7.2.3 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/master.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/master.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/master.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/master.sdf,v 1.18.2.4 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/master.sdf,v 1.18.2.5 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 #

Modified: openldap/vendor/openldap-release/doc/guide/admin/monitoringslapd.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/monitoringslapd.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/monitoringslapd.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/monitoringslapd.sdf,v 1.9.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/monitoringslapd.sdf,v 1.9.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 H1: Monitoring

Modified: openldap/vendor/openldap-release/doc/guide/admin/overlays.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/overlays.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/overlays.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/overlays.sdf,v 1.8.2.3 2007/10/24 15:20:32 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/overlays.sdf,v 1.8.2.5 2007/11/27 19:06:07 quanah Exp $
 # Copyright 2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 
@@ -211,12 +211,87 @@
    
 H3: Overview
 
-This overlay allows expansion of dynamic groups and more.
+This overlay allows expansion of dynamic groups and lists. Instead of having the
+group members or list attributes hard coded, this overlay allows us to define
+an LDAP search whose results will make up the group or list.
 
-
 H3: Dynamic List Configuration
 
+This module can behave both as a dynamic list and dynamic group, depending on
+the configuration. The syntax is as follows:
 
+>       overlay dynlist
+>       dynlist-attrset <group-oc> <URL-ad> [member-ad]
+
+The parameters to the {{F:dynlist-attrset}} directive have the following meaning:
+* {{F:<group-oc>}}: specifies which object class triggers the subsequent LDAP search.
+Whenever an entry with this object class is retrieved, the search is performed.
+* {{F:<URL-ad>}}: is the name of the attribute which holds the search URI. It
+has to be a subtype of {{F:labeledURI}}. The attributes and values present in
+the search result are added to the entry unless {{F:member-ad}} is used (see
+below).
+* {{F:member-ad}}: if present, changes the overlay behaviour into a dynamic group.
+Instead of inserting the results of the search in the entry, the distinguished name
+of the results are added as values of this attribute.
+
+Here is an example which will allow us to have an email alias which automatically
+expands to all user's emails according to our LDAP filter:
+
+In {{slapd.conf}}(5):
+>       overlay dynlist
+>       dynlist-attrset nisMailAlias labeledURI
+
+This means that whenever an entry which has the {{F:nisMailAlias}} object class is
+retrieved, the search specified in the {{F:labeledURI}} attribute is performed.
+
+Let's say we have this entry in our directory:
+>       cn=all,ou=aliases,dc=example,dc=com
+>       cn: all
+>       objectClass: nisMailAlias
+>       labeledURI: ldap:///ou=People,dc=example,dc=com?mail?one?(objectClass=inetOrgPerson)
+
+If this entry is retrieved, the search specified in {{F:labeledURI}} will be
+performed and the results will be added to the entry just as if they have always
+been there. In this case, the search filter selects all entries directly
+under {{F:ou=People}} that have the {{F:inetOrgPerson}} object class and retrieves
+the {{F:mail}} attribute, if it exists.
+
+This is what gets added to the entry when we have two users under {{F:ou=People}}
+that match the filter:
+!import "allmail-en.png"; align="center"; title="Dynamic list for email aliases"
+FT[align="Center"] Figure X.Y: Dynamic List for all emails
+
+The configuration for a dynamic group is similar. Let's see an example which would
+automatically populate an {{F:allusers}} group with all the user accounts in the
+directory.
+
+In {{F:slapd.conf}}(5):
+>       overlay dynlist
+>       dynlist-attrset groupOfNames labeledURI member
+
+Let's apply it to the following entry:
+>       cn=allusers,ou=group,dc=example,dc=com
+>       cn: all
+>       objectClass: groupOfNames
+>       labeledURI: ldap:///ou=people,dc=example,dc=com??one?(objectClass=inetOrgPerson)
+
+The behaviour is similar to the dynamic list configuration we had before:
+whenever an entry with the {{F:groupOfNames}} object class is retrieved, the
+search specified in the {{F:labeledURI}} attribute is performed. But this time,
+only the distinguished names of the results are added, and as values of the
+{{F:member}} attribute.
+
+This is what we get:
+!import "allusersgroup-en.png"; align="center"; title="Dynamic group for all users"
+FT[align="Center"] Figure X.Y: Dynamic Group for all users
+
+Note that a side effect of this scheme of dymamic groups is that the members
+need to be specified as full DNs. So, if you are planning in using this for
+{{F:posixGroup}}s, be sure to use RFC2307bis and some attribute which can hold
+distinguished names. The {{F:memberUid}} attribute used in the {{F:posixGroup}}
+object class can hold only names, not DNs, and is therefore not suitable for
+dynamic groups.
+
 H2: Reverse Group Membership Maintenance
 
 H3: Overview
@@ -396,7 +471,7 @@
 >	database 	ldap
 >	suffix 		"dc=example,dc=com" 
 >	rootdn 		"dc=example,dc=com" 
->	uri    		ldap://ldap.example.com/dc=example%2cdc=com
+>	uri    		ldap://ldap.example.com/
 >	overlay proxycache
 >	proxycache    bdb 100000 1 1000 100
 >	proxyAttrset  0 mail postaladdress telephonenumber 
@@ -458,14 +533,71 @@
 
 H3: Overview
 
-This overlay can be used with a backend database such as slapd-bdb (5)
+This overlay can be used with a backend database such as slapd-bdb(5)
 to maintain the cohesiveness of a schema which utilizes reference
 attributes.
 
+Whenever a {{modrdn}} or {{delete}} is performed, that is, when an entry's DN
+is renamed or an entry is removed, the server will search the directory for
+references to this DN (in selected attributes: see below) and update them
+accordingly. If it was a {{delete}} operation, the reference is deleted. If it
+was a {{modrdn}} operation, then the reference is updated with the new DN.
 
+For example, a very common administration task is to maintain group membership
+lists, specially when users are removed from the directory. When an
+user account is deleted or renamed, all groups this user is a member of have to be
+updated. LDAP administrators usually have scripts for that. But we can use the
+{{F:refint}} overlay to automate this task. In this example, if the user is
+removed from the directory, the overlay will take care to remove the user from
+all the groups he/she was a member of. No more scripting for this.
+
 H3: Referential Integrity Configuration
 
+The configuration for this overlay is as follows:
+>       overlay refint
+>       refint_attributes <attribute [attribute ...]>
+>       refint_nothing <string>
 
+* {{F:refint_attributes}}: this parameter specifies a space separated list of
+attributes which will have the referential integrity maintained. When an entry is
+removed or has its DN renamed, the server will do an internal search for any of the
+{{F:refint_attributes}} that point to the affected DN and update them accordingly. IMPORTANT:
+the attributes listed here must have the {{F:distinguishedName}} syntax, that is,
+hold DNs as values.
+* {{F:refint_nothing}}: some times, while trying to maintain the referential
+integrity, the server has to remove the last attribute of its kind from an
+entry. This may be prohibited by the schema: for example, the
+{{F:groupOfNames}} object class requires at least one member. In these cases,
+the server will add the attribute value specified in {{F:refint_nothing}}
+to the entry.
+
+To illustrate this overlay, we will use the group membership scenario.
+
+In {{F:slapd.conf}}:
+>       overlay refint
+>       refint_attributes member
+>       refint_nothing "cn=admin,dc=example,dc=com"
+
+This configuration tells the overlay to maintain the referential integrity of the {{F:member}}
+attribute. This attribute is used in the {{F:groupOfNames}} object class which always needs
+a member, so we add the {{F:refint_nothing}} directive to fill in the group with a standard
+member should all the members vanish.
+
+If we have the following group membership, the refint overlay will
+automatically remove {{F:john}} from the group if his entry is removed from the
+directory:
+
+!import "refint.png"; align="center"; title="Group membership"
+FT[align="Center"] Figure X.Y: Maintaining referential integrity in groups
+
+Notice that if we rename ({{F:modrdn}}) the {{F:john}} entry to, say, {{F:jsmith}}, the refint
+overlay will also rename the reference in the {{F:member}} attribute, so the group membership
+stays correct.
+
+If we removed all users from the directory who are a member of this group, then the end result
+would be a single member in the group: {{F:cn=admin,dc=example,dc=com}}. This is the
+{{F:refint_nothing}} parameter kicking into action so that the schema is not violated.
+
 H2: Return Code
 
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/preface.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/preface.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/preface.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/preface.sdf,v 1.25.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/preface.sdf,v 1.25.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 # 

Modified: openldap/vendor/openldap-release/doc/guide/admin/quickstart.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/quickstart.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/quickstart.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/quickstart.sdf,v 1.44.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/quickstart.sdf,v 1.44.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/referrals.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/referrals.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/referrals.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/referrals.sdf,v 1.25.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/referrals.sdf,v 1.25.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Added: openldap/vendor/openldap-release/doc/guide/admin/refint.png
===================================================================
(Binary files differ)


Property changes on: openldap/vendor/openldap-release/doc/guide/admin/refint.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: openldap/vendor/openldap-release/doc/guide/admin/replication.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/replication.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/replication.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/replication.sdf,v 1.32.2.4 2007/10/24 15:20:32 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/replication.sdf,v 1.32.2.9 2007/12/10 15:31:27 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 
@@ -149,15 +149,39 @@
 H3: delta-syncrepl replication
 
 
-H3: N-Way Multi-Master
+H3: N-Way Multi-Master replication
 
-http://www.connexitor.com/blog/pivot/entry.php?id=105#body
-http://www.openldap.org/lists/openldap-software/200702/msg00006.html
-http://www.openldap.org/lists/openldap-software/200602/msg00064.html
+Multi-Master replication is a replication technique using Syncrepl to replicate 
+data to multiple Master Directory servers. 
 
+* Advantages of Multi-Master replication:
 
-H3: MirrorMode
+- If any master fails, other masters will continue to accept updates
+- Avoids a single point of failure
+- Masters can be located in several physical sites i.e. distributed across the 
+network/globe.
+- Good for Automatic failover/High Availability
 
+* Disadvantages of Multi-Master replication:
+
+- It has {{B:NOTHING}} to do with load balancing
+- {{URL:http://www.openldap.org/faq/data/cache/1240.html}}
+- If connectivity with a master is lost because of a network partition, then 
+"automatic failover" can just compound the problem
+- Typically, a particular machine cannot distinguish between losing contact
+ with a peer because that peer crashed, or because the network link has failed
+- If a network is partitioned and multiple clients start writing to each of the 
+"masters" then reconciliation will be a pain; it may be best to simply deny 
+writes to the clients that are partitioned from the single master
+- Masters {{B:must}} propagate writes to {{B:all}} the other servers, which 
+means the network traffic and write load is constant and spreads across all 
+of the servers
+
+
+This is discussed in full in the {{SECT:N-Way Multi-Master}} section below
+
+H3: MirrorMode replication
+
 MirrorMode is a hybrid configuration that provides all of the consistency
 guarantees of single-master replication, while also providing the high
 availability of multi-master. In MirrorMode two masters are set up to
@@ -575,13 +599,16 @@
 
 H2: N-Way Multi-Master
 
+Import and expand from link:
 
+{{URL:http://blog.suretecsystems.com/archives/40-OpenLDAP-Weekly-News-Issue-5.html#extended}}
+
 H2: MirrorMode
 
 H3: Arguments for MirrorMode
 
 * Provides a high-availability (HA) solution for directory writes (replicas handle reads)
-* As long as one Master is operational, writes can safely be excepted
+* As long as one Master is operational, writes can safely be accepted
 * Master nodes replicate from each other, so they are always up to date and
 can be ready to take over (hot standby)
 * Syncrepl also allows the master nodes to re-synchronize after any downtime
@@ -611,16 +638,18 @@
 H3: MirrorMode Configuration
 
 MirrorMode configuration is actually very easy. If you have ever setup a normal
-slapd syncrepl provider, then the only change is the directive:
+slapd syncrepl provider, then the only change is the following two directives:
 
 >       mirrormode  on
+>       serverID    1
 
-You also need to make you the {{rid}} of each mirror node pair is different and
-that the {{provider}} syncrepl directive points to the other mirror pair.
+Note: You need to make sure that the {{serverID}} of each mirror node pair is 
+different and that the {{provider}} syncrepl directive points to the opposite 
+mirror node.
 
 H4: Mirror Node Configuration
 
-This is the same as the {{SECT:Set up the provider slapd}} section, referencing
+This is the same as the {{SECT:Set up the provider slapd}} section, reference
 {{SECT:delta-syncrepl replication}} if using {{delta-syncrepl}}.
 
 Here's a specific cut down example using {{SECT:LDAP Sync Replication}} in
@@ -628,7 +657,7 @@
 
 MirrorMode node 1:
 
->       # syncrepl directives
+>       # syncrepl directives    
 >       syncrepl      rid=1
 >                     provider=ldap://ldap-rid2.example.com
 >                     bindmethod=simple
@@ -640,11 +669,12 @@
 >                     retry="60 +"
 >       
 >       mirrormode on
+>       serverID    1
 
 MirrorMode node 2:
 
 >       # syncrepl directives
->       syncrepl      rid=2
+>       syncrepl      rid=1
 >                     provider=ldap://ldap-rid1.example.com
 >                     bindmethod=simple
 >                     binddn="cn=mirrormode,dc=example,dc=com"
@@ -655,17 +685,21 @@
 >                     retry="60 +"
 >       
 >       mirrormode on
+>       serverID    2
 
 It's simple really; each MirrorMode node is setup {{B:exactly}} the same, except
-that the {{B:provider}} directive is set to point to the other MirrorMode node.
+that the {{B:provider}} directive is set to point to the other MirrorMode node
+and the {{serverID}} is unique.
 
 H4: Failover Configuration
 
 There are generally 2 choices for this; 1.  Hardware proxies/load-balancing or 
 dedicated proxy software, 2. using a Back-LDAP proxy as a syncrepl provider
 
-MORE HERE and a nice PICTURE
+A typical enterprise example might be:
 
+!import "dual_dc.png"; align="center"; title="MirrorMode Enterprise Configuration"
+FT[align="Center"] Figure X.Y: MirrorMode in a Dual Data Center Configuration
 
 H4: Normal Consumer Configuration
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/runningslapd.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/runningslapd.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/runningslapd.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/runningslapd.sdf,v 1.16.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/runningslapd.sdf,v 1.16.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 H1: Running slapd

Modified: openldap/vendor/openldap-release/doc/guide/admin/sasl.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/sasl.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/sasl.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/sasl.sdf,v 1.34.2.5 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/sasl.sdf,v 1.34.2.6 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/schema.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/schema.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/schema.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/schema.sdf,v 1.41.2.4 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/schema.sdf,v 1.41.2.5 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/security.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/security.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/security.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/security.sdf,v 1.16.2.4 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/security.sdf,v 1.16.2.5 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/slapdconf2.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/slapdconf2.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/slapdconf2.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/slapdconf2.sdf,v 1.20.2.6 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/slapdconf2.sdf,v 1.20.2.9 2007/11/27 20:31:23 quanah Exp $
 # Copyright 2005-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 
@@ -1104,7 +1104,7 @@
 
 Some factors may not be appropriate in all environments (or any).
 For example, the domain factor relies on IP to domain name lookups.
-As these can easily spoofed, the domain factor should not be avoided.
+As these can easily be spoofed, the domain factor should be avoided.
 
 
 H3: The access to grant

Modified: openldap/vendor/openldap-release/doc/guide/admin/slapdconfig.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/slapdconfig.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/slapdconfig.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/slapdconfig.sdf,v 1.87.2.8 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/slapdconfig.sdf,v 1.87.2.11 2007/11/27 20:31:23 quanah Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 
@@ -660,7 +660,7 @@
 
 Some factors may not be appropriate in all environments (or any).
 For example, the domain factor relies on IP to domain name lookups.
-As these can easily spoofed, the domain factor should not be avoided.
+As these can easily be spoofed, the domain factor should be avoided.
 
 
 H3: The access to grant

Modified: openldap/vendor/openldap-release/doc/guide/admin/title.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/title.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/title.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/title.sdf,v 1.9.6.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/title.sdf,v 1.9.6.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007, The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 #

Modified: openldap/vendor/openldap-release/doc/guide/admin/tls.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/tls.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/tls.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/tls.sdf,v 1.13.2.5 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/tls.sdf,v 1.13.2.6 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/troubleshooting.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/troubleshooting.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/troubleshooting.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/troubleshooting.sdf,v 1.10.2.2 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/troubleshooting.sdf,v 1.10.2.3 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Modified: openldap/vendor/openldap-release/doc/guide/admin/tuning.sdf
===================================================================
--- openldap/vendor/openldap-release/doc/guide/admin/tuning.sdf	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/guide/admin/tuning.sdf	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-# $OpenLDAP: pkg/openldap-guide/admin/tuning.sdf,v 1.9.2.3 2007/10/23 19:06:09 quanah Exp $
+# $OpenLDAP: pkg/openldap-guide/admin/tuning.sdf,v 1.9.2.4 2007/11/07 23:01:35 ghenry Exp $
 # Copyright 1999-2007 The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 

Added: openldap/vendor/openldap-release/doc/guide/images/src/allmail-en.svg
===================================================================
--- openldap/vendor/openldap-release/doc/guide/images/src/allmail-en.svg	                        (rev 0)
+++ openldap/vendor/openldap-release/doc/guide/images/src/allmail-en.svg	2007-12-15 09:30:12 UTC (rev 883)
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="487.42709"
+   height="139.10474"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   version="1.0"
+   sodipodi:docbase="/home/andreas/palestra"
+   sodipodi:docname="allmail-en.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/home/andreas/palestra/ppolicy.png"
+   inkscape:export-xdpi="136.2"
+   inkscape:export-ydpi="136.2">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path3186"
+         d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3183"
+         d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Send"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Send"
+       style="overflow:visible">
+      <path
+         id="path3198"
+         d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lstart"
+       style="overflow:visible">
+      <path
+         id="path3201"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="matrix(1.1,0,0,1.1,1.1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend"
+       style="overflow:visible">
+      <path
+         id="path8347"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.351189"
+     inkscape:cx="115.68184"
+     inkscape:cy="40.808267"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showguides="false"
+     inkscape:window-width="1272"
+     inkscape:window-height="724"
+     inkscape:window-x="0"
+     inkscape:window-y="24" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Camada 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-29.405584,-34.695505)">
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="116.88309"
+       y="48.033184"
+       id="text2170"
+       inkscape:export-filename="/home/andreas/palestra/allmail.png"
+       inkscape:export-xdpi="136.2"
+       inkscape:export-ydpi="136.2"><tspan
+         sodipodi:role="line"
+         id="tspan2172"
+         x="116.88309"
+         y="48.033184">DN: cn=all,ou=aliases,dc=example,dc=com</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="63.033184"
+         id="tspan2174">cn: all</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="78.033184"
+         id="tspan5373">objectClass: <tspan
+   style="font-weight:bold"
+   id="tspan5377">nisMailAlias</tspan></tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="92.036435"
+         id="tspan3404"
+         style="font-size:11px;font-weight:bold">labeledURI: <tspan
+   style="font-weight:normal"
+   id="tspan5513">ldap:///ou=People,dc=example,dc=com?mail?</tspan></tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="105.78643"
+         id="tspan3413"
+         style="font-size:11px;font-weight:normal">   one?(objectClass=inetOrgPerson)</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="120.53318"
+         id="tspan2180">mail: john at example.com</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="135.53318"
+         id="tspan3411">mail: mary at example.com</tspan></text>
+    <rect
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.15456796px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect7321"
+       width="403.52588"
+       height="106.68739"
+       x="112.72952"
+       y="35.272789"
+       inkscape:export-filename="/home/andreas/palestra/allmail.png"
+       inkscape:export-xdpi="136.2"
+       inkscape:export-ydpi="136.2" />
+    <rect
+       style="opacity:0.28915663;fill:#aa9ab2;fill-opacity:1;stroke:none;stroke-width:0.69669151;stroke-opacity:1"
+       id="rect7323"
+       width="168.38275"
+       height="31.950695"
+       x="113.71371"
+       y="107.91574"
+       inkscape:export-filename="/home/andreas/palestra/allmail.png"
+       inkscape:export-xdpi="136.2"
+       inkscape:export-ydpi="136.2" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="28.755194"
+       y="104.6917"
+       id="text4394"
+       inkscape:export-filename="/home/andreas/palestra/allmail.png"
+       inkscape:export-xdpi="136.2"
+       inkscape:export-ydpi="136.2"><tspan
+         sodipodi:role="line"
+         x="28.755194"
+         y="104.6917"
+         id="tspan5371">search</tspan><tspan
+         sodipodi:role="line"
+         x="28.755194"
+         y="119.6917"
+         id="tspan2187">results</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+       d="M 108.91035,92.832512 C 59.12768,98.112492 59.881964,116.96956 108.15606,124.51239"
+       id="path4400"
+       sodipodi:nodetypes="cc"
+       inkscape:export-filename="/home/andreas/palestra/allmail.png"
+       inkscape:export-xdpi="136.2"
+       inkscape:export-ydpi="136.2" />
+    <path
+       style="opacity:1;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 417.4481,61.482433 C 381.50911,141.44198 176.87108,164.40908 132.69882,105.71538"
+       id="path5515"
+       transform="translate(11.556417,34.695505)"
+       sodipodi:nodetypes="cc" />
+    <rect
+       inkscape:export-ydpi="136.2"
+       inkscape:export-xdpi="136.2"
+       inkscape:export-filename="/home/andreas/palestra/allmail.png"
+       y="81.541206"
+       x="417.55688"
+       height="12.386127"
+       width="24.625708"
+       id="rect6492"
+       style="opacity:0.28915663;fill:#aa9ab2;fill-opacity:1;stroke:none;stroke-width:0.69669151;stroke-opacity:1" />
+  </g>
+</svg>

Added: openldap/vendor/openldap-release/doc/guide/images/src/allusersgroup-en.svg
===================================================================
--- openldap/vendor/openldap-release/doc/guide/images/src/allusersgroup-en.svg	                        (rev 0)
+++ openldap/vendor/openldap-release/doc/guide/images/src/allusersgroup-en.svg	2007-12-15 09:30:12 UTC (rev 883)
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="419.4133"
+   height="107.84196"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   version="1.0"
+   sodipodi:docbase="/home/andreas/palestra"
+   sodipodi:docname="allusersgroup-en.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/home/andreas/palestra/ppolicy.png"
+   inkscape:export-xdpi="136.2"
+   inkscape:export-ydpi="136.2">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lstart"
+       style="overflow:visible">
+      <path
+         id="path3201"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="matrix(1.1,0,0,1.1,1.1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend"
+       style="overflow:visible">
+      <path
+         id="path8347"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.3724279"
+     inkscape:cx="216.23418"
+     inkscape:cy="53.920976"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showguides="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="953"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Camada 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-29.134918,-34.695504)">
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="116.88309"
+       y="48.033184"
+       id="text2170"
+       inkscape:export-filename="/home/andreas/palestra/allmail.png"
+       inkscape:export-xdpi="136.2"
+       inkscape:export-ydpi="136.2"><tspan
+         sodipodi:role="line"
+         id="tspan2172"
+         x="116.88309"
+         y="48.033184">DN: cn=allusers,ou=group,dc=example,dc=com</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="63.033184"
+         id="tspan2174">cn: all</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="78.033184"
+         id="tspan5379">objectClass: <tspan
+   style="font-weight:bold"
+   id="tspan5396">groupOfNames</tspan></tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="92.036435"
+         id="tspan3413"
+         style="font-size:11px;font-weight:bold">labeledURI<tspan
+   style="font-weight:normal"
+   id="tspan5410">: ldap:///ou=People,dc=example,dc=com??</tspan></tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="105.78643"
+         style="font-size:11px;font-weight:normal"
+         id="tspan5386">    one?(objectClass=inetOrgPerson)</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="120.53318"
+         id="tspan2180"><tspan
+   style="font-weight:bold"
+   id="tspan5400">member</tspan>: uid=john,ou=people,dc=example,dc=com</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="135.53318"
+         id="tspan3411"><tspan
+   style="font-weight:bold"
+   id="tspan5404">member</tspan>: uid=mary,ou=people,dc=example,dc=com</tspan></text>
+    <rect
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.05301607px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect7321"
+       width="335.34296"
+       height="106.78895"
+       x="112.67875"
+       y="35.222012"
+       inkscape:export-filename="/home/andreas/palestra/allmail.png"
+       inkscape:export-xdpi="136.2"
+       inkscape:export-ydpi="136.2" />
+    <rect
+       style="opacity:0.28915663;fill:#aa9ab2;fill-opacity:1;stroke:none;stroke-width:0.69669151;stroke-opacity:1"
+       id="rect7323"
+       width="329.5397"
+       height="29.000132"
+       x="114.97823"
+       y="110.02328"
+       inkscape:export-filename="/home/andreas/palestra/allmail.png"
+       inkscape:export-xdpi="136.2"
+       inkscape:export-ydpi="136.2" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="28.484528"
+       y="99.799805"
+       id="text4394"
+       inkscape:export-filename="/home/andreas/palestra/allmail.png"
+       inkscape:export-xdpi="136.2"
+       inkscape:export-ydpi="136.2"><tspan
+         sodipodi:role="line"
+         x="28.484528"
+         y="99.799805"
+         id="tspan5390">DNs of</tspan><tspan
+         sodipodi:role="line"
+         x="28.484528"
+         y="114.7998"
+         id="tspan2186">search</tspan><tspan
+         sodipodi:role="line"
+         x="28.484528"
+         y="129.7998"
+         id="tspan2188">results</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+       d="M 108.91035,92.832512 C 59.12768,98.112492 59.881964,116.96956 108.15606,124.51239"
+       id="path4400"
+       sodipodi:nodetypes="cc"
+       inkscape:export-filename="/home/andreas/palestra/allmail.png"
+       inkscape:export-xdpi="136.2"
+       inkscape:export-ydpi="136.2" />
+  </g>
+</svg>

Added: openldap/vendor/openldap-release/doc/guide/images/src/dual_dc.svg
===================================================================
--- openldap/vendor/openldap-release/doc/guide/images/src/dual_dc.svg	                        (rev 0)
+++ openldap/vendor/openldap-release/doc/guide/images/src/dual_dc.svg	2007-12-15 09:30:12 UTC (rev 883)
@@ -0,0 +1,6810 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="744.09448"
+   id="svg7893"
+   inkscape:version="0.45.1"
+   sodipodi:docbase="/home/ghenry/Desktop"
+   sodipodi:docname="dual_dc.svg"
+   sodipodi:version="0.32"
+   width="1052.3622"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   inkscape:export-filename="/home/ghenry/Desktop/dual_dc.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata2563">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:title>Firewall2</dc:title>
+        <dc:description />
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>wall</rdf:li>
+            <rdf:li>brick</rdf:li>
+            <rdf:li>computer</rdf:li>
+            <rdf:li>networksym</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <dc:publisher>
+          <cc:Agent
+             rdf:about="http://www.openclipart.org/">
+            <dc:title>Open Clip Art Library</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>HASH(0x89c79d4)</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>HASH(0x89c79d4)</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <dc:date />
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <cc:license
+           rdf:resource="http://web.resource.org/cc/PublicDomain" />
+        <dc:language>en</dc:language>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://web.resource.org/cc/PublicDomain">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs7895">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;">
+      <path
+         id="path17680"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.8) rotate(180) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path17677"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;">
+      <path
+         id="path17686"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path17683"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.4) translate(10,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient6508">
+      <stop
+         id="stop6509"
+         offset="0.0000000"
+         style="stop-color:#ff0000;stop-opacity:1.0000000;" />
+      <stop
+         id="stop6511"
+         offset="0.64370060"
+         style="stop-color:#ffb900;stop-opacity:1.0000000;" />
+      <stop
+         id="stop6512"
+         offset="0.79038113"
+         style="stop-color:#ffff00;stop-opacity:0.84102565;" />
+      <stop
+         id="stop6510"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.21568628;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient13376">
+      <stop
+         style="stop-color:#d4d4d4;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop13377" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.49803922;"
+         offset="0.50000000"
+         id="stop13380" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.0000000;"
+         offset="1.0000000"
+         id="stop13378" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12744">
+      <stop
+         style="stop-color:#839da4;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop12745" />
+      <stop
+         style="stop-color:#496d77;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop12746" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient10810">
+      <stop
+         style="stop-color:#0e0000;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop10811" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1.0000000;"
+         offset="0.50000000"
+         id="stop10814" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop10812" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11442">
+      <stop
+         style="stop-color:#6e6e6e;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop11443" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop11444" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14160">
+      <stop
+         style="stop-color:#4af853;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop14161" />
+      <stop
+         style="stop-color:#68b96d;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop14162" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14835">
+      <stop
+         style="stop-color:#bed1d0;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop14836" />
+      <stop
+         style="stop-color:#52727b;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop14837" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29203">
+      <stop
+         style="stop-color:#d3d3d3;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop29205" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop29207" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6658">
+      <stop
+         style="stop-color:#677883;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop6659" />
+      <stop
+         style="stop-color:#677883;stop-opacity:0.0000000;"
+         offset="1.0000000"
+         id="stop6660" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient41493">
+      <stop
+         style="stop-color:#181818;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop41495" />
+      <stop
+         style="stop-color:#5e5e5e;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop41497" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12759">
+      <stop
+         style="stop-color:#b4b4b4;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop12761" />
+      <stop
+         style="stop-color:#d7d8de;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop12763" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient21825">
+      <stop
+         style="stop-color:#808080;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop21827" />
+      <stop
+         style="stop-color:#5e5e5e;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop21829" />
+    </linearGradient>
+    <radialGradient
+       xlink:href="#linearGradient13376"
+       r="31.620827"
+       id="radialGradient25527"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.776429,0.000000,0.000000,0.659114,-120.5524,673.5049)"
+       fy="254.35735"
+       fx="-19.038713"
+       cy="253.63734"
+       cx="-19.261518" />
+    <linearGradient
+       y2="275.81308"
+       y1="233.36613"
+       xlink:href="#linearGradient12759"
+       x2="8.3977861"
+       x1="-35.945030"
+       id="linearGradient25525"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.505549,0.000000,0.000000,0.399114,-145.4580,730.6984)" />
+    <linearGradient
+       y2="275.81308"
+       y1="233.36613"
+       xlink:href="#linearGradient21825"
+       x2="8.3977861"
+       x1="-35.945030"
+       id="linearGradient25403"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.500039,0.000000,0.000000,0.399114,-145.2247,712.7020)" />
+    <linearGradient
+       y2="1977.8738"
+       y1="1924.0137"
+       xlink:href="#linearGradient41493"
+       x2="-35.763195"
+       x1="-39.828941"
+       id="linearGradient25401"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.672454,0.000000,0.000000,0.374188,-3.473342,95.27180)" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient25353"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.270019,0.000000,0.000000,0.370779,-149.3489,792.5495)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient26976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-90.06505,808.8095)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient26972"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.058310,0.000000,0.000000,0.803858,616.2490,115.0105)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient26974"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.838868,0.000000,0.000000,0.530755,508.4408,137.6640)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient26964"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.058310,0.000000,0.000000,0.803858,616.2490,115.0105)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient26966"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.838868,0.000000,0.000000,0.530755,508.4408,137.6640)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28284"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28286"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28288"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.026341e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28290"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28274"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28276"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28278"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.026156e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28280"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28264"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28266"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28268"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.027076e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28270"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28254"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28256"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28258"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.026932e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28260"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28244"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28246"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28248"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.026947e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28250"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28234"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28236"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28238"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.026928e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28240"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28224"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28228"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.026495e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28230"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28214"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28216"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28218"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.026890e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28220"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28208"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-125.9178,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28210"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.0884,752.1340)"
+       fy="113.72600"
+       fx="97.536598"
+       cy="113.72600"
+       cx="97.536598" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28204"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-121.5730,808.7592)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28206"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.0884,752.1340)"
+       fy="113.72600"
+       fx="100.67591"
+       cy="113.72600"
+       cx="100.67591" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28200"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-116.9703,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28202"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.0884,752.1340)"
+       fy="113.72600"
+       fx="104.00187"
+       cy="113.72600"
+       cx="104.00187" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28196"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-112.6254,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28198"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.0884,752.1340)"
+       fy="113.72600"
+       fx="107.14119"
+       cy="113.72600"
+       cx="107.14119" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28192"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-108.4824,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28194"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.0884,752.1340)"
+       fy="113.72600"
+       fx="110.13468"
+       cy="113.72600"
+       cx="110.13468" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28188"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-104.1375,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28190"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.0884,752.1340)"
+       fy="113.72600"
+       fx="113.27399"
+       cy="113.72600"
+       cx="113.27399" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28184"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-99.77797,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28186"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.0884,752.1340)"
+       fy="113.72600"
+       fx="116.42374"
+       cy="113.72600"
+       cx="116.42374" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28180"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-95.43307,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28182"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.0884,752.1340)"
+       fy="113.72600"
+       fx="119.56305"
+       cy="113.72600"
+       cx="119.56305" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28172"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28174"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28176"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.023496e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28178"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28162"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28164"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28166"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.023311e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28168"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28152"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28154"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28156"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.024231e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28158"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28142"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28144"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28146"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.024087e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28148"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28132"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28134"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28136"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.024102e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28138"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28122"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28124"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28126"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.024083e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28128"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28112"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28114"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28116"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.023650e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28118"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28102"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28104"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28106"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.024045e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28108"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28096"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-161.2375,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28098"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="71.480988"
+       cy="113.72600"
+       cx="71.480988" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28092"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-156.8927,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28094"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="74.620308"
+       cy="113.72600"
+       cx="74.620308" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28088"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-152.2900,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28090"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="77.946259"
+       cy="113.72600"
+       cx="77.946259" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28084"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-147.9451,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28086"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="81.085587"
+       cy="113.72600"
+       cx="81.085587" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28080"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-143.8021,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28082"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="84.079071"
+       cy="113.72600"
+       cx="84.079071" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28076"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-139.4573,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28078"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="87.218399"
+       cy="113.72600"
+       cx="87.218399" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28072"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-135.0980,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28074"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="90.368126"
+       cy="113.72600"
+       cx="90.368126" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28068"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-130.7531,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="93.507462"
+       cy="113.72600"
+       cx="93.507462" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28060"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28062"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28064"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.026556e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28066"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28050"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28052"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28054"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.027091e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28056"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28040"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28042"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28044"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.026139e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28046"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28030"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28032"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28034"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025995e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28036"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28020"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28022"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28024"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.026010e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28026"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28010"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28012"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28014"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025991e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28016"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient28000"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28002"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient28004"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025558e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient28006"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27990"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27992"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27994"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.026529e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27996"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient27984"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-197.2616,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient27986"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="45.452175"
+       cy="113.72600"
+       cx="45.452175" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient27980"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-192.9168,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient27982"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="48.591496"
+       cy="113.72600"
+       cx="48.591496" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient27976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-188.3141,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient27978"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="51.917450"
+       cy="113.72600"
+       cx="51.917450" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient27972"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-183.9692,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient27974"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="55.056770"
+       cy="113.72600"
+       cx="55.056770" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient27968"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-179.8262,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient27970"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="58.050255"
+       cy="113.72600"
+       cx="58.050255" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient27964"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-175.4813,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient27966"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="61.189575"
+       cy="113.72600"
+       cx="61.189575" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient27960"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-171.1220,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient27962"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="64.339317"
+       cy="113.72600"
+       cx="64.339317" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient27956"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-166.7771,808.7593)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient27958"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.3469,752.1340)"
+       fy="113.72600"
+       fx="67.478638"
+       cy="113.72600"
+       cx="67.478638" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27928"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27930"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27932"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034243e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27934"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27918"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27920"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27922"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034058e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27924"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27908"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27910"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27912"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034978e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27914"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27898"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27900"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27902"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034834e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27904"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27888"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27890"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27892"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034849e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27894"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27878"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27880"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27882"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034830e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27884"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27868"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27870"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27872"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034397e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27874"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27858"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27860"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27862"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034792e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27864"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27848"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27850"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27852"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.031398e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27854"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27838"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27840"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27842"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.031213e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27844"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27828"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27830"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27832"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.032133e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27834"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27818"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27820"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27822"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.031989e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27824"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27808"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27810"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27812"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.032004e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27814"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27800"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27802"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.031985e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27804"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27788"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27790"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27792"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.031552e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27794"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27778"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27780"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27782"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.031947e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27784"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27768"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27770"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27772"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034458e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27774"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27758"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27760"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27762"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034993e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27764"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27748"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27750"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27752"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034041e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27754"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27738"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27740"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27742"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.033897e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27744"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27728"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27730"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27732"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.033912e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27734"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27718"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27722"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.033893e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27724"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27708"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27712"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.033460e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27714"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient27698"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27700"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient27702"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.034431e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="2.8901422"
+       id="radialGradient27704"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.112677,0.898733)"
+       fy="84.146240"
+       fx="-75.268890"
+       cy="84.146240"
+       cx="-75.268890" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28432"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-126.1386,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28434"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.3092,761.0352)"
+       fy="113.72600"
+       fx="97.536598"
+       cy="113.72600"
+       cx="97.536598" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28428"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-121.7938,817.6604)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28430"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.3092,761.0352)"
+       fy="113.72600"
+       fx="100.67591"
+       cy="113.72600"
+       cx="100.67591" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28424"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-117.1911,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28426"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.3092,761.0352)"
+       fy="113.72600"
+       fx="104.00187"
+       cy="113.72600"
+       cx="104.00187" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28420"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-112.8462,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28422"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.3092,761.0352)"
+       fy="113.72600"
+       fx="107.14119"
+       cy="113.72600"
+       cx="107.14119" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28416"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-108.7032,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.3092,761.0352)"
+       fy="113.72600"
+       fx="110.13468"
+       cy="113.72600"
+       cx="110.13468" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28412"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-104.3583,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28414"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.3092,761.0352)"
+       fy="113.72600"
+       fx="113.27399"
+       cy="113.72600"
+       cx="113.27399" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28408"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-99.99876,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28410"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.3092,761.0352)"
+       fy="113.72600"
+       fx="116.42374"
+       cy="113.72600"
+       cx="116.42374" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28404"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-95.65386,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28406"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-286.3092,761.0352)"
+       fy="113.72600"
+       fx="119.56305"
+       cy="113.72600"
+       cx="119.56305" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28400"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-161.4583,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28402"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="71.480988"
+       cy="113.72600"
+       cx="71.480988" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-157.1135,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28398"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="74.620308"
+       cy="113.72600"
+       cx="74.620308" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28392"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-152.5108,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28394"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="77.946259"
+       cy="113.72600"
+       cx="77.946259" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28388"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-148.1659,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28390"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="81.085587"
+       cy="113.72600"
+       cx="81.085587" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28384"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-144.0229,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28386"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="84.079071"
+       cy="113.72600"
+       cx="84.079071" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28380"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-139.6781,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28382"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="87.218399"
+       cy="113.72600"
+       cx="87.218399" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28376"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-135.3188,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28378"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="90.368126"
+       cy="113.72600"
+       cx="90.368126" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28372"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-130.9739,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28374"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="93.507462"
+       cy="113.72600"
+       cx="93.507462" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28368"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-197.4824,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28370"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="45.452175"
+       cy="113.72600"
+       cx="45.452175" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28364"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-193.1376,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28366"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="48.591496"
+       cy="113.72600"
+       cx="48.591496" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28360"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-188.5349,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28362"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="51.917450"
+       cy="113.72600"
+       cx="51.917450" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28356"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-184.1900,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28358"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="55.056770"
+       cy="113.72600"
+       cx="55.056770" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28352"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-180.0470,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28354"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="58.050255"
+       cy="113.72600"
+       cx="58.050255" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28348"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-175.7021,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28350"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="61.189575"
+       cy="113.72600"
+       cx="61.189575" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28344"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-171.3428,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28346"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="64.339317"
+       cy="113.72600"
+       cx="64.339317" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28340"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-166.9979,817.6605)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient6658"
+       r="0.55242717"
+       id="radialGradient28342"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.384013,0.000000,0.000000,0.656868,-285.5677,761.0352)"
+       fy="113.72600"
+       fx="67.478638"
+       cy="113.72600"
+       cx="67.478638" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient28438"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.380937,0.000000,0.000000,0.180797,-90.25863,817.7848)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <linearGradient
+       y2="275.81308"
+       y1="233.36613"
+       xlink:href="#linearGradient12759"
+       x2="8.3977861"
+       x1="-35.945030"
+       id="linearGradient36281"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.505549,0.000000,0.000000,0.399114,-149.8970,802.9053)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36283"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36285"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025564e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36287"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36289"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025379e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36291"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36293"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025424e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36295"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36297"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025375e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36299"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36301"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025318e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36303"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36305"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025343e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36307"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36309"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.031109e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36311"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36313"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.030924e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36317"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.030969e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36319"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36321"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.030920e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36323"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36325"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.030863e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36327"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36329"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.030888e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36331"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-187.5348,879.6483)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36333"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-185.7196,879.6483)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36335"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-189.3500,879.6484)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36337"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-180.2740,879.6484)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36339"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-183.9043,879.6483)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36341"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-182.0892,879.6483)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <linearGradient
+       y2="275.81308"
+       y1="233.36613"
+       xlink:href="#linearGradient21825"
+       x2="8.3977861"
+       x1="-35.945030"
+       id="linearGradient36343"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.500039,0.000000,0.000000,0.399114,-149.6637,784.9089)" />
+    <linearGradient
+       y2="1977.8738"
+       y1="1924.0137"
+       xlink:href="#linearGradient41493"
+       x2="-35.763195"
+       x1="-39.828941"
+       id="linearGradient36345"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.672454,0.000000,0.000000,0.374188,-7.912301,167.4787)" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36347"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-187.5296,881.7645)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36349"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-185.7144,881.7645)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36351"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-189.3448,881.7646)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36353"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-180.2688,881.7646)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36355"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-183.8991,881.7645)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36357"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-182.0840,881.7645)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36359"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-198.4916,883.5145)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36361"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-190.0460,883.5145)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36363"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-187.2306,883.5145)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36365"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-192.8611,883.5145)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36367"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-195.6763,883.5145)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <linearGradient
+       y2="1085.6781"
+       y1="1085.6781"
+       xlink:href="#linearGradient12759"
+       x2="-116.40664"
+       x1="-128.30727"
+       id="linearGradient36369"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.742720,0.000000,0.000000,0.445632,-87.12747,420.4818)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36371"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36373"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.028536e-10)" />
+    <linearGradient
+       y2="1085.6781"
+       y1="1085.6781"
+       xlink:href="#linearGradient12759"
+       x2="-116.40664"
+       x1="-128.30727"
+       id="linearGradient36375"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.787283,0.000000,0.000000,0.475341,-91.66274,388.2275)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36377"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36379"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.027980e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36381"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.270019,0.000000,0.000000,0.370779,-153.7879,864.7564)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <linearGradient
+       y2="275.81308"
+       y1="233.36613"
+       xlink:href="#linearGradient12759"
+       x2="8.3977861"
+       x1="-35.945030"
+       id="linearGradient35867"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.505549,0.000000,0.000000,0.399114,-141.9847,635.4266)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35869"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35871"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025486e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35873"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35875"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025301e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35877"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35879"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025346e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35881"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35883"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025297e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35885"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35887"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025240e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35889"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35891"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.025265e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35893"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35895"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.024517e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35897"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35899"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.024373e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35901"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35903"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.024388e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35905"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35907"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.024369e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35909"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35911"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.035110e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35913"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35915"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.024331e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35917"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35919"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.031174e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35921"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35923"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.030989e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35925"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35927"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.031034e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35929"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35931"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.030985e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35933"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.030928e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35937"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35939"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.030953e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35941"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35943"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.023950e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35945"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35947"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.023806e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35949"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35951"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.023821e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35953"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35955"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.023802e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35957"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35959"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.023764e-10)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient35961"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient35963"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.023379e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35965"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-179.6225,712.1696)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35967"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-168.7312,712.1696)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35969"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-163.2856,712.1696)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35971"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-161.4702,712.1696)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35973"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-165.1007,712.1696)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35975"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-177.8073,712.1696)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35977"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-166.9159,712.1696)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35979"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-181.4377,712.1697)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35981"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-170.5465,712.1697)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35983"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-172.3617,712.1697)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35985"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-175.9920,712.1696)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35987"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-174.1769,712.1696)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <linearGradient
+       y2="275.81308"
+       y1="233.36613"
+       xlink:href="#linearGradient21825"
+       x2="8.3977861"
+       x1="-35.945030"
+       id="linearGradient35989"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.500039,0.000000,0.000000,0.399114,-141.7514,617.4302)" />
+    <linearGradient
+       y2="1977.8738"
+       y1="1924.0137"
+       xlink:href="#linearGradient41493"
+       x2="-35.763195"
+       x1="-39.828941"
+       id="linearGradient35991"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(2.672454,0.374188)" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35993"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-179.6173,714.2858)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-168.7260,714.2858)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35997"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-163.2804,714.2858)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient35999"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-161.4650,714.2858)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36001"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-165.0955,714.2858)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36003"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-177.8021,714.2858)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36005"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-166.9107,714.2858)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36007"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-181.4325,714.2859)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36009"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-170.5413,714.2859)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36011"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-172.3565,714.2859)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36013"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-175.9868,714.2858)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36015"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-174.1717,714.2858)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36017"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-190.5793,716.0358)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36019"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-182.1337,716.0358)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36021"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-179.3183,716.0358)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36023"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-184.9488,716.0358)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36025"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0.000000,0.000000,0.194625,-187.7640,716.0358)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <linearGradient
+       y2="1085.6781"
+       y1="1085.6781"
+       xlink:href="#linearGradient12759"
+       x2="-116.40664"
+       x1="-128.30727"
+       id="linearGradient36027"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.742720,0.000000,0.000000,0.445632,-79.21517,253.0031)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36029"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36031"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.028790e-10)" />
+    <linearGradient
+       y2="1085.6781"
+       y1="1085.6781"
+       xlink:href="#linearGradient12759"
+       x2="-116.40664"
+       x1="-128.30727"
+       id="linearGradient36033"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.787283,0.000000,0.000000,0.475341,-83.75044,220.7488)" />
+    <linearGradient
+       y2="84.271248"
+       y1="80.490494"
+       xlink:href="#linearGradient10810"
+       x2="-152.33473"
+       x1="-156.03067"
+       id="linearGradient36035"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.731264,0.000000,0.000000,1.388554,183.0968,-38.74554)" />
+    <linearGradient
+       y2="80.317116"
+       y1="83.947449"
+       xlink:href="#linearGradient11442"
+       x2="-63.953007"
+       x1="-64.000694"
+       id="linearGradient36037"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.372284,0.000000,0.000000,0.916806,6.735873,-1.028234e-10)" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient36039"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.270019,0.000000,0.000000,0.370779,-145.8756,697.2777)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient13376"
+       r="31.620827"
+       id="radialGradient12151"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.20227,0,0,0.454077,6.691668,-148.3193)"
+       fy="254.35735"
+       fx="-19.038713"
+       cy="253.63734"
+       cx="-19.261518" />
+    <linearGradient
+       y2="275.81308"
+       y1="233.36613"
+       xlink:href="#linearGradient12744"
+       x2="8.3977861"
+       x1="-35.945030"
+       id="linearGradient12153"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.505549,0,0,0.399114,1.691668,-145.8193)" />
+    <linearGradient
+       y2="275.81308"
+       y1="233.36613"
+       xlink:href="#linearGradient14835"
+       x2="8.3977861"
+       x1="-35.945030"
+       id="linearGradient12155"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.500039,0,0,0.399114,1.924904,-161.8157)" />
+    <linearGradient
+       y2="275.81308"
+       y1="233.36613"
+       xlink:href="#linearGradient12744"
+       x2="8.3977861"
+       x1="-35.945030"
+       id="linearGradient12157"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.505549,0,0,0.350818,114.6621,-134.6472)" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient12159"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-59.65453)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient12161"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-61.33423)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient12163"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-63.01391)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       xlink:href="#linearGradient14160"
+       r="2.0070677"
+       id="radialGradient12165"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.09869,-64.40064)"
+       fy="99.988457"
+       fx="-66.099426"
+       cy="99.988457"
+       cx="-66.099426" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13376"
+       id="radialGradient16585"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.20227,0,0,0.454077,6.691668,-148.3193)"
+       cx="-19.261518"
+       cy="253.63734"
+       fx="-19.038713"
+       fy="254.35735"
+       r="31.620827" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12744"
+       id="linearGradient16587"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.505549,0,0,0.399114,1.691668,-145.8193)"
+       x1="-35.945030"
+       y1="233.36613"
+       x2="8.3977861"
+       y2="275.81308" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14835"
+       id="linearGradient16589"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.500039,0,0,0.399114,1.924904,-161.8157)"
+       x1="-35.945030"
+       y1="233.36613"
+       x2="8.3977861"
+       y2="275.81308" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12744"
+       id="linearGradient16591"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.505549,0,0,0.350818,114.6621,-134.6472)"
+       x1="-35.945030"
+       y1="233.36613"
+       x2="8.3977861"
+       y2="275.81308" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient16593"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-59.65453)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient16595"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-61.33423)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient16597"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-63.01391)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient16599"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.09869,-64.40064)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13376"
+       id="radialGradient3109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.20227,0,0,0.454077,6.691668,-148.3193)"
+       cx="-19.261518"
+       cy="253.63734"
+       fx="-19.038713"
+       fy="254.35735"
+       r="31.620827" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12744"
+       id="linearGradient3111"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.505549,0,0,0.399114,1.691668,-145.8193)"
+       x1="-35.945030"
+       y1="233.36613"
+       x2="8.3977861"
+       y2="275.81308" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14835"
+       id="linearGradient3113"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.500039,0,0,0.399114,1.924904,-161.8157)"
+       x1="-35.945030"
+       y1="233.36613"
+       x2="8.3977861"
+       y2="275.81308" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12744"
+       id="linearGradient3115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.505549,0,0,0.350818,114.6621,-134.6472)"
+       x1="-35.945030"
+       y1="233.36613"
+       x2="8.3977861"
+       y2="275.81308" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient3117"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-59.65453)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient3119"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-61.33423)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient3121"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-63.01391)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient3123"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.09869,-64.40064)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13376"
+       id="radialGradient3239"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.20227,0,0,0.454077,6.691668,-148.3193)"
+       cx="-19.261518"
+       cy="253.63734"
+       fx="-19.038713"
+       fy="254.35735"
+       r="31.620827" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12744"
+       id="linearGradient3241"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.505549,0,0,0.399114,1.691668,-145.8193)"
+       x1="-35.945030"
+       y1="233.36613"
+       x2="8.3977861"
+       y2="275.81308" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14835"
+       id="linearGradient3243"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.500039,0,0,0.399114,1.924904,-161.8157)"
+       x1="-35.945030"
+       y1="233.36613"
+       x2="8.3977861"
+       y2="275.81308" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12744"
+       id="linearGradient3245"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.505549,0,0,0.350818,114.6621,-134.6472)"
+       x1="-35.945030"
+       y1="233.36613"
+       x2="8.3977861"
+       y2="275.81308" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient3247"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-59.65453)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient3249"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-61.33423)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient3251"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.07916,-63.01391)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14160"
+       id="radialGradient3253"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.389249,0,0,0.194625,-60.09869,-64.40064)"
+       cx="-66.099426"
+       cy="99.988457"
+       fx="-66.099426"
+       fy="99.988457"
+       r="2.0070677" />
+  </defs>
+  <sodipodi:namedview
+     bordercolor="#666666"
+     borderopacity="1.0"
+     id="base"
+     inkscape:current-layer="layer1"
+     inkscape:cx="495.44191"
+     inkscape:cy="375.2641"
+     inkscape:document-units="px"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:window-height="953"
+     inkscape:window-width="1280"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:zoom="1"
+     pagecolor="#ffffff"
+     width="1052.3622px"
+     height="744.09448px" />
+  <g
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <g
+       id="g5278"
+       transform="matrix(0.1267968,0,0,0.1710106,100.15833,410.75325)">
+      <path
+         transform="matrix(0,-0.604122,1.608296,0,-165.2214,394.5863)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.75"
+         sodipodi:nodetypes="ccccccc"
+         id="path569"
+         d="M 426.278,378.046 L 79.4376,379.165 C 79.4376,379.165 -4.63207,356.939 -1.27547,255.125 C -13.892,169.635 56.2895,146.476 60.7648,142 C 65.2402,137.525 427.397,137.496 427.397,137.496 L 427.397,137.496 L 426.278,378.046 z " />
+      <path
+         transform="matrix(0,-0.174045,0.823205,0,39.47672,182.772)"
+         style="font-size:12px;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:9.76546001"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path568"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+      <path
+         transform="matrix(0,-0.169729,0.807961,0,43.34661,181.9851)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke-width:3.75"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path566"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+    </g>
+    <g
+       id="g12726"
+       transform="matrix(1.2500391,0,0,1.184913,99.819149,206.94272)">
+      <g
+         transform="translate(152.9277,120.7469)"
+         id="g26712">
+        <path
+           style="fill:url(#radialGradient12151);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path12747"
+           d="M 24.972918,-30.66305 C 24.972918,-22.90055 -16.207082,-20.35055 -53.230207,-20.66305 C -90.878332,-20.66305 -92.370832,-26.65055 -92.370832,-34.41305 C -92.370832,-42.17555 -71.190832,-40.03805 -33.542707,-40.03805 C 4.105418,-40.03805 24.972918,-38.42555 24.972918,-30.66305 z " />
+        <path
+           style="fill:url(#linearGradient12153);fill-opacity:1;stroke:#677883;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="rect8945"
+           d="M -88.933334,-50.694302 L 23.566666,-50.694302 L 23.566666,-37.18304 L -88.933334,-37.18304 L -88.933334,-50.694302 z " />
+        <path
+           style="fill:url(#linearGradient12155);fill-opacity:1;stroke:#677883;stroke-width:0.49944988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="rect14210"
+           d="M -75.933161,-61.840606 L 36.319422,-61.840606 L 23.751782,-51.190703 L -88.500801,-51.190703 L -75.933161,-61.840606 z " />
+        <path
+           style="fill:url(#linearGradient12157);fill-opacity:1;stroke:#677883;stroke-width:0.46877259;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="rect14838"
+           d="M 23.981782,-50.846435 L 36.765614,-61.588097 L 36.752498,-48.186223 L 24.037025,-37.40884 L 23.981782,-50.846435 z " />
+        <rect
+           y="-40.584919"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient12159);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect14843"
+           height="0.78125" />
+        <rect
+           y="-42.264622"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient12161);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect14845"
+           height="0.78125" />
+        <rect
+           y="-43.944294"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient12163);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect14847"
+           height="0.78125" />
+        <rect
+           y="-45.33102"
+           x="-86.609116"
+           width="1.5625"
+           style="fill:url(#radialGradient12165);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect14849"
+           height="0.78125" />
+      </g>
+    </g>
+    <g
+       id="g12774"
+       transform="matrix(0.1881701,0,0,0.2844466,210.77219,75.336794)">
+      <path
+         transform="matrix(0,-0.604122,1.608296,0,-165.2214,394.5863)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.75"
+         sodipodi:nodetypes="ccccccc"
+         id="path12776"
+         d="M 426.278,378.046 L 79.4376,379.165 C 79.4376,379.165 -4.63207,356.939 -1.27547,255.125 C -13.892,169.635 56.2895,146.476 60.7648,142 C 65.2402,137.525 427.397,137.496 427.397,137.496 L 427.397,137.496 L 426.278,378.046 z " />
+      <path
+         transform="matrix(0,-0.174045,0.823205,0,39.47672,182.772)"
+         style="font-size:12px;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:9.76546001"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path12778"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+      <path
+         transform="matrix(0,-0.169729,0.807961,0,43.34661,181.9851)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke-width:3.75"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path12780"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+    </g>
+    <g
+       id="g12782"
+       transform="matrix(0.1881701,0,0,0.2844466,707.44948,77.500676)">
+      <path
+         transform="matrix(0,-0.604122,1.608296,0,-165.2214,394.5863)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.75"
+         sodipodi:nodetypes="ccccccc"
+         id="path12784"
+         d="M 426.278,378.046 L 79.4376,379.165 C 79.4376,379.165 -4.63207,356.939 -1.27547,255.125 C -13.892,169.635 56.2895,146.476 60.7648,142 C 65.2402,137.525 427.397,137.496 427.397,137.496 L 427.397,137.496 L 426.278,378.046 z " />
+      <path
+         transform="matrix(0,-0.174045,0.823205,0,39.47672,182.772)"
+         style="font-size:12px;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:9.76546001"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path12786"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+      <path
+         transform="matrix(0,-0.169729,0.807961,0,43.34661,181.9851)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke-width:3.75"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path12788"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+    </g>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot12862"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial"
+       transform="translate(-143.44166,-193.94928)"><flowRegion
+         id="flowRegion12864"><rect
+           id="rect12866"
+           width="157.14285"
+           height="40"
+           x="194.28572"
+           y="475.52304"
+           style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara23709">Load Balancer</flowPara></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot12890"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:Arial"
+       transform="translate(-12.992469,-434.27533)"><flowRegion
+         id="flowRegion12892"><rect
+           id="rect12894"
+           width="157.14285"
+           height="40"
+           x="194.28572"
+           y="475.52304"
+           style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara12898">Data Center A</flowPara></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot12900"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:Arial"
+       transform="translate(486.55966,-436.47728)"><flowRegion
+         id="flowRegion12902"><rect
+           id="rect12904"
+           width="157.14285"
+           height="40"
+           x="194.28572"
+           y="475.52304"
+           style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara12908">Data Center B</flowPara></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot12976"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial"
+       transform="translate(667.90714,-192.88096)"><flowRegion
+         id="flowRegion12978"><rect
+           id="rect12980"
+           width="157.14285"
+           height="40"
+           x="194.28572"
+           y="475.52304"
+           style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara23707">Load Balancer</flowPara></flowRoot>    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
+       d="M 519.21841,49.109532 L 519.21841,687.52594"
+       id="path14553" />
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot15524"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial"
+       transform="translate(-105.05587,-187.88838)"><flowRegion
+         id="flowRegion15526"><rect
+           id="rect15528"
+           width="129.29955"
+           height="26.263966"
+           x="137.38075"
+           y="681.46503"
+           style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara15542">Replica Pool</flowPara></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot15534"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial"
+       transform="translate(781.35941,-209.327)"><flowRegion
+         id="flowRegion15536"><rect
+           id="rect15538"
+           width="129.29955"
+           height="26.263966"
+           x="137.38075"
+           y="681.46503"
+           style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara15544">Replica Pool</flowPara></flowRoot>    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.71494228px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 254.55844,186.23712 L 254.55844,261.49474"
+       id="path16515" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.10873353px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 299.05951,113.93024 L 711.09302,176.21781"
+       id="path16519" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.03299749px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 301.04196,179.66157 L 715.17151,118.56769"
+       id="path16521" />
+    <g
+       id="g16529"
+       transform="matrix(1.2344541,0,0,1.166142,100.35599,485.83269)">
+      <g
+         transform="translate(152.9277,120.7469)"
+         id="g16531">
+        <path
+           style="fill:url(#radialGradient16585);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path16533"
+           d="M 24.972918,-30.66305 C 24.972918,-22.90055 -16.207082,-20.35055 -53.230207,-20.66305 C -90.878332,-20.66305 -92.370832,-26.65055 -92.370832,-34.41305 C -92.370832,-42.17555 -71.190832,-40.03805 -33.542707,-40.03805 C 4.105418,-40.03805 24.972918,-38.42555 24.972918,-30.66305 z " />
+        <path
+           style="fill:url(#linearGradient16587);fill-opacity:1;stroke:#677883;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path16535"
+           d="M -88.933334,-50.694302 L 23.566666,-50.694302 L 23.566666,-37.18304 L -88.933334,-37.18304 L -88.933334,-50.694302 z " />
+        <path
+           style="fill:url(#linearGradient16589);fill-opacity:1;stroke:#677883;stroke-width:0.49944988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path16537"
+           d="M -75.933161,-61.840606 L 36.319422,-61.840606 L 23.751782,-51.190703 L -88.500801,-51.190703 L -75.933161,-61.840606 z " />
+        <path
+           style="fill:url(#linearGradient16591);fill-opacity:1;stroke:#677883;stroke-width:0.46877259;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path16539"
+           d="M 23.981782,-50.846435 L 36.765614,-61.588097 L 36.752498,-48.186223 L 24.037025,-37.40884 L 23.981782,-50.846435 z " />
+        <rect
+           y="-40.584919"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient16593);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect16541"
+           height="0.78125" />
+        <rect
+           y="-42.264622"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient16595);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect16543"
+           height="0.78125" />
+        <rect
+           y="-43.944294"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient16597);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect16545"
+           height="0.78125" />
+        <rect
+           y="-45.33102"
+           x="-86.609116"
+           width="1.5625"
+           style="fill:url(#radialGradient16599);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect16547"
+           height="0.78125" />
+      </g>
+    </g>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot16549"
+       style="font-size:17.99999953px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:Arial"
+       transform="matrix(0.7525038,0,0,0.6775389,64.79681,269.22814)"><flowRegion
+         id="flowRegion16551"><rect
+           id="rect16553"
+           width="157.14285"
+           height="40"
+           x="194.28572"
+           y="475.52304"
+           style="font-size:17.99999953px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara23713">Load Balancer</flowPara></flowRoot>    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.22766685px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 273.86518,195.76282 L 748.4092,262.07055"
+       id="path21761" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.10209382px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 273.80239,258.50247 L 744.43138,197.3106"
+       id="path21763" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.76721847px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 757.61441,187.27341 L 757.61441,274.60058"
+       id="path23705" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend)"
+       d="M 131.31983,412.76445 L 238.396,364.27713"
+       id="path23715" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.03078127px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 277.57943,366.85652 L 399.22276,412.20536"
+       id="path25655" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
+       d="M 258.59905,410.74414 L 258.59905,356.19591"
+       id="path25659" />
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot27609"
+       style="font-family:Arial;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:18px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%"><flowRegion
+         id="flowRegion27611"><rect
+           id="rect27613"
+           width="105.05586"
+           height="34.345188"
+           x="96.974648"
+           y="113.75929"
+           style="font-family:Arial;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:18px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%" /></flowRegion><flowPara
+         id="flowPara27617">MirrorMode 1</flowPara></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot27619"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:Arial"
+       transform="translate(750.17468,-1.4171474)"><flowRegion
+         id="flowRegion27621"><rect
+           id="rect27623"
+           width="105.05586"
+           height="34.345188"
+           x="96.974648"
+           y="113.75929"
+           style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara27627">MirrorMode 2</flowPara></flowRoot>    <path
+       d="M 103.99577,648.52356 C 103.99577,648.52356 103.75488,628.78956 123.98963,634.70975 C 144.22438,640.62995 140.61103,650.49696 140.85192,650.49696 C 141.09281,650.49696 137.23858,638.37464 152.65553,636.11932 C 166.62714,637.52889 173.13117,640.62995 172.4085,651.06079 C 171.68583,661.49163 164.94091,664.02886 164.94091,664.02886 C 164.94091,664.02886 177.2263,665.43843 173.85384,686.58202 C 168.55426,701.24157 168.55426,699.832 156.26888,701.52349 C 150.72841,698.98626 150.48752,696.73094 150.48752,696.73094 C 150.48752,696.73094 160.60489,707.72561 145.42883,714.77347 C 128.32565,720.12985 126.15764,715.3373 118.93094,712.80007 C 111.94514,707.72561 113.39048,701.52349 113.39048,701.52349 C 113.39048,701.52349 117.7265,711.95432 103.03221,713.92773 C 88.337924,715.90113 82.797457,711.95432 80.147668,695.8852 C 79.424999,683.76287 92.433052,682.63522 92.433052,682.63522 C 92.433052,682.63522 84.483686,682.91713 82.315677,676.71501 C 80.147668,670.51289 78.702329,662.33737 85.206355,651.3427 C 97.25085,638.09272 105.44111,646.83207 103.99577,648.52356 z "
+       id="path1503"
+       sodipodi:nodetypes="cccccccccccccccccc"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.78178847;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g1556"
+       style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(5.9849059e-2,0,0,6.3887019e-2,92.207875,643.07667)">
+      <g
+         id="g770"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="translate(107.0886,1.392441)">
+        <path
+           d="M 299.842,180.38 L 177.215,74.367 L 250.791,71.9936 L 385.285,162.183 C 385.285,162.183 353.639,191.456 299.842,180.38 z "
+           id="path743"
+           sodipodi:nodetypes="ccccc"
+           style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+        <g
+           id="g761"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 176.424,74.367 L 178.006,238.924 L 300.633,364.715 L 301.424,181.962 L 176.424,74.367 z "
+             id="path744"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g754"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 302.216,181.171 C 302.216,181.171 328.323,184.335 348.102,180.38 C 375,170.095 386.076,163.766 386.076,163.766 L 386.867,342.563 C 386.867,342.563 371.835,353.639 353.64,360.759 C 323.576,367.088 300.633,364.715 300.633,364.715 L 302.216,181.171 z "
+               id="path742"
+               sodipodi:nodetypes="ccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+            <g
+               id="g749"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 315.665,205.696 C 315.665,205.696 378.956,192.247 378.956,193.038 C 378.956,193.829 378.165,218.354 378.165,218.354 C 378.165,218.354 316.456,231.804 315.665,231.804 C 314.874,231.804 314.874,207.278 315.665,205.696 z "
+                 id="path745"
+                 style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+                 transform="translate(-1.58226,0)" />
+              <path
+                 d="M 323.576,246.835 L 370.253,237.342 L 370.253,241.298 L 323.576,251.582 L 323.576,246.835 z "
+                 id="path746"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#000100;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 360.76,268.987 L 372.627,267.405 L 372.627,279.272 L 360.76,281.646 L 360.76,268.987 z "
+                 id="path747"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00b300;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 365.506,298.259 L 373.418,297.468 L 373.418,306.962 L 365.506,308.544 L 365.506,298.259 z "
+                 id="path748"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g818"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.868723,0,0,0.841809,-27.91207,15.52193)">
+        <g
+           id="g801"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 119.557,425.383 L 119.557,438.102 L 435.832,344.83 L 436.68,329.568 L 119.557,425.383 z "
+             id="path607"
+             sodipodi:nodetypes="ccccc"
+             style="font-size:12px;fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(-0.847921,19.50222)" />
+          <g
+             id="g798"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 166.193,347.374 L 119.557,426.231 L 436.68,329.568 L 345.104,298.194 L 166.193,347.374 z "
+               id="path606"
+               sodipodi:nodetypes="ccccc"
+               style="font-size:12px;fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+               transform="translate(-0.847921,19.50222)" />
+            <path
+               d="M 139.059,335.503 C 139.059,335.503 127.188,354.157 132.275,369.42 C 136.515,388.075 150.082,392.314 153.474,392.314 C 156.866,392.314 377.177,334.884 377.177,334.884 C 377.177,334.884 383.26,322.784 386.652,303.282 C 379.869,279.54 367.15,276.996 352.735,276.996 C 328.993,263.43 353.584,276.996 353.584,276.996 L 139.059,335.503 z "
+               id="path605"
+               sodipodi:nodetypes="cccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.708121,0,0,0.825311,71.30738,59.20586)" />
+          </g>
+        </g>
+        <g
+           id="g811"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 420.57,16.6844 C 420.57,17.5323 399.371,11.5968 377.325,9.90093 C 367.15,10.7489 66.1379,65.8638 63.5942,65.8638 C 67.8338,65.0159 54.267,65.8638 50.8753,73.4951 C 47.4836,81.1264 47.4836,343.134 47.4836,343.134 C 47.4836,343.134 47.4837,350.766 52.5712,356.701 C 60.2025,360.093 80.5526,360.941 72.9213,360.941 L 420.57,16.6844 z "
+             id="path602"
+             sodipodi:nodetypes="cccccccc"
+             style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g806"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 71.2332,108.009 L 418.873,40.4261 C 423.961,43.8178 429.049,41.2741 431.593,51.4492 C 434.137,61.6241 430.745,304.978 430.745,304.978 C 430.745,304.978 432.44,312.609 426.505,316.849 C 420.569,321.088 79.6699,416.904 79.6699,416.904 C 79.6699,416.904 69.4946,421.143 63.5593,412.664 C 55.0803,410.121 60.2025,124.37 60.2025,124.37 C 60.2025,124.37 61.0271,110.72 71.2332,108.009 z "
+               id="path600"
+               sodipodi:nodetypes="ccccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.995445,0,0,0.910163,2.817975,-20.11005)" />
+            <g
+               id="g795"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 89.0318,98.0844 L 394.284,38.7303 C 394.284,38.7303 401.915,36.1865 407.851,45.5137 C 413.786,54.8408 412.09,59.0804 412.09,59.0804 L 412.09,234.6 C 411.242,243.927 412.938,240.535 407.851,250.711 C 397.675,254.102 105.142,333.807 105.142,333.807 C 105.142,333.807 105.142,335.503 94.9673,333.807 C 84.7922,332.111 81.4005,316.001 81.4005,315.153 C 81.4005,314.305 78.0088,115.891 78.0088,115.891 C 78.0088,115.891 79.7048,101.476 89.0318,98.0844 z "
+                 id="path603"
+                 sodipodi:nodetypes="ccccccccccc"
+                 style="fill:url(#linearGradient614);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 368.846,266.821 L 398.523,258.342 L 398.523,271.909 C 398.523,271.909 368.846,279.54 368.846,280.388 C 368.846,281.236 368.846,266.821 368.846,266.821 z "
+                 id="path604"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00feb3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g878"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(1.060794,0,0,0.913679,-36.3605,196.9337)">
+        <g
+           id="g875"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 35.6013,306.962 L 454.114,242.088 L 454.114,266.614 L 35.6012,332.279 L 35.6013,306.962 z "
+             id="path831"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b2b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(3.955698,-6.329117)" />
+          <path
+             d="M 39.557,300.633 C 41.9304,296.677 90.981,199.367 90.981,199.367 L 371.044,173.259 L 458.07,235.759 L 39.557,300.633 z "
+             id="path832"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+        </g>
+        <g
+           id="g859"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <g
+             id="g844"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 331.487,184.335 C 331.487,184.335 332.279,193.038 332.279,193.829 C 332.279,194.62 366.298,234.177 366.298,234.177 L 424.051,224.683 L 423.26,218.354 L 422.468,218.354 L 331.487,184.335 z "
+               id="path841"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 332.279,184.336 L 369.462,180.38 L 424.051,218.354 L 370.253,225.475 L 332.279,184.336 z "
+               id="path840"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g847"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 297.468,195.411 C 297.468,195.411 297.468,203.323 297.468,204.114 C 297.468,204.905 318.038,241.297 318.829,241.297 C 319.62,241.297 353.639,236.551 353.639,236.551 L 352.057,227.057"
+               id="path843"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 298.26,195.411 C 299.051,195.411 322.785,193.038 322.785,193.038 L 352.848,227.057 L 321.994,231.804 L 298.26,195.411 z "
+               id="path842"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g850"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.1899,208.861 L 98.1013,195.411 L 272.943,178.006 L 282.437,189.082 L 90.1899,208.861 z "
+               id="path833"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 90.1899,209.652 L 89.3988,215.19 L 282.437,194.62 L 282.437,188.291 L 90.1899,209.652 z "
+               id="path834"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g853"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.981,215.981 L 287.184,194.62 L 309.336,229.43 L 71.9936,261.867 L 90.981,215.981 z "
+               id="path835"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 71.9937,261.076 L 71.2026,268.987 L 309.336,236.551 C 310.127,236.551 308.544,230.221 308.544,229.43 C 308.544,228.639 71.9937,263.449 71.9937,261.076 z "
+               id="path836"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g856"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 82.2785,274.525 L 301.424,242.089 L 306.171,250.791 L 79.9051,284.019 L 82.2785,274.525 z "
+               id="path838"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 79.1139,284.81 L 79.1139,291.93 L 306.171,255.538 L 305.38,250 L 79.1139,284.81 z "
+               id="path839"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+        </g>
+      </g>
+    </g>
+    <g
+       id="g1647"
+       style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(5.9849059e-2,0,0,6.3887019e-2,135.04094,644.20433)">
+      <g
+         id="g1648"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="translate(107.0886,1.392441)">
+        <path
+           d="M 299.842,180.38 L 177.215,74.367 L 250.791,71.9936 L 385.285,162.183 C 385.285,162.183 353.639,191.456 299.842,180.38 z "
+           id="path1649"
+           sodipodi:nodetypes="ccccc"
+           style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+        <g
+           id="g1650"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 176.424,74.367 L 178.006,238.924 L 300.633,364.715 L 301.424,181.962 L 176.424,74.367 z "
+             id="path1651"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g1652"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 302.216,181.171 C 302.216,181.171 328.323,184.335 348.102,180.38 C 375,170.095 386.076,163.766 386.076,163.766 L 386.867,342.563 C 386.867,342.563 371.835,353.639 353.64,360.759 C 323.576,367.088 300.633,364.715 300.633,364.715 L 302.216,181.171 z "
+               id="path1653"
+               sodipodi:nodetypes="ccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+            <g
+               id="g1654"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 315.665,205.696 C 315.665,205.696 378.956,192.247 378.956,193.038 C 378.956,193.829 378.165,218.354 378.165,218.354 C 378.165,218.354 316.456,231.804 315.665,231.804 C 314.874,231.804 314.874,207.278 315.665,205.696 z "
+                 id="path1655"
+                 style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+                 transform="translate(-1.58226,0)" />
+              <path
+                 d="M 323.576,246.835 L 370.253,237.342 L 370.253,241.298 L 323.576,251.582 L 323.576,246.835 z "
+                 id="path1656"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#000100;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 360.76,268.987 L 372.627,267.405 L 372.627,279.272 L 360.76,281.646 L 360.76,268.987 z "
+                 id="path1657"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00b300;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 365.506,298.259 L 373.418,297.468 L 373.418,306.962 L 365.506,308.544 L 365.506,298.259 z "
+                 id="path1658"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g1659"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.868723,0,0,0.841809,-27.91207,15.52193)">
+        <g
+           id="g1660"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 119.557,425.383 L 119.557,438.102 L 435.832,344.83 L 436.68,329.568 L 119.557,425.383 z "
+             id="path1661"
+             sodipodi:nodetypes="ccccc"
+             style="font-size:12px;fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(-0.847921,19.50222)" />
+          <g
+             id="g1662"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 166.193,347.374 L 119.557,426.231 L 436.68,329.568 L 345.104,298.194 L 166.193,347.374 z "
+               id="path1663"
+               sodipodi:nodetypes="ccccc"
+               style="font-size:12px;fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+               transform="translate(-0.847921,19.50222)" />
+            <path
+               d="M 139.059,335.503 C 139.059,335.503 127.188,354.157 132.275,369.42 C 136.515,388.075 150.082,392.314 153.474,392.314 C 156.866,392.314 377.177,334.884 377.177,334.884 C 377.177,334.884 383.26,322.784 386.652,303.282 C 379.869,279.54 367.15,276.996 352.735,276.996 C 328.993,263.43 353.584,276.996 353.584,276.996 L 139.059,335.503 z "
+               id="path1664"
+               sodipodi:nodetypes="cccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.708121,0,0,0.825311,71.30738,59.20586)" />
+          </g>
+        </g>
+        <g
+           id="g1665"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 420.57,16.6844 C 420.57,17.5323 399.371,11.5968 377.325,9.90093 C 367.15,10.7489 66.1379,65.8638 63.5942,65.8638 C 67.8338,65.0159 54.267,65.8638 50.8753,73.4951 C 47.4836,81.1264 47.4836,343.134 47.4836,343.134 C 47.4836,343.134 47.4837,350.766 52.5712,356.701 C 60.2025,360.093 80.5526,360.941 72.9213,360.941 L 420.57,16.6844 z "
+             id="path1666"
+             sodipodi:nodetypes="cccccccc"
+             style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g1667"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 71.2332,108.009 L 418.873,40.4261 C 423.961,43.8178 429.049,41.2741 431.593,51.4492 C 434.137,61.6241 430.745,304.978 430.745,304.978 C 430.745,304.978 432.44,312.609 426.505,316.849 C 420.569,321.088 79.6699,416.904 79.6699,416.904 C 79.6699,416.904 69.4946,421.143 63.5593,412.664 C 55.0803,410.121 60.2025,124.37 60.2025,124.37 C 60.2025,124.37 61.0271,110.72 71.2332,108.009 z "
+               id="path1668"
+               sodipodi:nodetypes="ccccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.995445,0,0,0.910163,2.817975,-20.11005)" />
+            <g
+               id="g1669"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 89.0318,98.0844 L 394.284,38.7303 C 394.284,38.7303 401.915,36.1865 407.851,45.5137 C 413.786,54.8408 412.09,59.0804 412.09,59.0804 L 412.09,234.6 C 411.242,243.927 412.938,240.535 407.851,250.711 C 397.675,254.102 105.142,333.807 105.142,333.807 C 105.142,333.807 105.142,335.503 94.9673,333.807 C 84.7922,332.111 81.4005,316.001 81.4005,315.153 C 81.4005,314.305 78.0088,115.891 78.0088,115.891 C 78.0088,115.891 79.7048,101.476 89.0318,98.0844 z "
+                 id="path1670"
+                 sodipodi:nodetypes="ccccccccccc"
+                 style="fill:url(#linearGradient614);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 368.846,266.821 L 398.523,258.342 L 398.523,271.909 C 398.523,271.909 368.846,279.54 368.846,280.388 C 368.846,281.236 368.846,266.821 368.846,266.821 z "
+                 id="path1671"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00feb3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g1672"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(1.060794,0,0,0.913679,-36.3605,196.9337)">
+        <g
+           id="g1673"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 35.6013,306.962 L 454.114,242.088 L 454.114,266.614 L 35.6012,332.279 L 35.6013,306.962 z "
+             id="path1674"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b2b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(3.955698,-6.329117)" />
+          <path
+             d="M 39.557,300.633 C 41.9304,296.677 90.981,199.367 90.981,199.367 L 371.044,173.259 L 458.07,235.759 L 39.557,300.633 z "
+             id="path1675"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+        </g>
+        <g
+           id="g1676"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <g
+             id="g1677"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 331.487,184.335 C 331.487,184.335 332.279,193.038 332.279,193.829 C 332.279,194.62 366.298,234.177 366.298,234.177 L 424.051,224.683 L 423.26,218.354 L 422.468,218.354 L 331.487,184.335 z "
+               id="path1678"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 332.279,184.336 L 369.462,180.38 L 424.051,218.354 L 370.253,225.475 L 332.279,184.336 z "
+               id="path1679"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g1680"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 297.468,195.411 C 297.468,195.411 297.468,203.323 297.468,204.114 C 297.468,204.905 318.038,241.297 318.829,241.297 C 319.62,241.297 353.639,236.551 353.639,236.551 L 352.057,227.057"
+               id="path1681"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 298.26,195.411 C 299.051,195.411 322.785,193.038 322.785,193.038 L 352.848,227.057 L 321.994,231.804 L 298.26,195.411 z "
+               id="path1682"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g1683"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.1899,208.861 L 98.1013,195.411 L 272.943,178.006 L 282.437,189.082 L 90.1899,208.861 z "
+               id="path1684"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 90.1899,209.652 L 89.3988,215.19 L 282.437,194.62 L 282.437,188.291 L 90.1899,209.652 z "
+               id="path1685"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g1686"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.981,215.981 L 287.184,194.62 L 309.336,229.43 L 71.9936,261.867 L 90.981,215.981 z "
+               id="path1687"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 71.9937,261.076 L 71.2026,268.987 L 309.336,236.551 C 310.127,236.551 308.544,230.221 308.544,229.43 C 308.544,228.639 71.9937,263.449 71.9937,261.076 z "
+               id="path1688"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g1689"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 82.2785,274.525 L 301.424,242.089 L 306.171,250.791 L 79.9051,284.019 L 82.2785,274.525 z "
+               id="path1690"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 79.1139,284.81 L 79.1139,291.93 L 306.171,255.538 L 305.38,250 L 79.1139,284.81 z "
+               id="path1691"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+        </g>
+      </g>
+    </g>
+    <g
+       id="g1692"
+       style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(5.9849059e-2,0,0,6.3887019e-2,112.49722,673.80536)">
+      <g
+         id="g1693"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="translate(107.0886,1.392441)">
+        <path
+           d="M 299.842,180.38 L 177.215,74.367 L 250.791,71.9936 L 385.285,162.183 C 385.285,162.183 353.639,191.456 299.842,180.38 z "
+           id="path1694"
+           sodipodi:nodetypes="ccccc"
+           style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+        <g
+           id="g1695"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 176.424,74.367 L 178.006,238.924 L 300.633,364.715 L 301.424,181.962 L 176.424,74.367 z "
+             id="path1696"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g1697"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 302.216,181.171 C 302.216,181.171 328.323,184.335 348.102,180.38 C 375,170.095 386.076,163.766 386.076,163.766 L 386.867,342.563 C 386.867,342.563 371.835,353.639 353.64,360.759 C 323.576,367.088 300.633,364.715 300.633,364.715 L 302.216,181.171 z "
+               id="path1698"
+               sodipodi:nodetypes="ccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+            <g
+               id="g1699"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 315.665,205.696 C 315.665,205.696 378.956,192.247 378.956,193.038 C 378.956,193.829 378.165,218.354 378.165,218.354 C 378.165,218.354 316.456,231.804 315.665,231.804 C 314.874,231.804 314.874,207.278 315.665,205.696 z "
+                 id="path1700"
+                 style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+                 transform="translate(-1.58226,0)" />
+              <path
+                 d="M 323.576,246.835 L 370.253,237.342 L 370.253,241.298 L 323.576,251.582 L 323.576,246.835 z "
+                 id="path1701"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#000100;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 360.76,268.987 L 372.627,267.405 L 372.627,279.272 L 360.76,281.646 L 360.76,268.987 z "
+                 id="path1702"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00b300;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 365.506,298.259 L 373.418,297.468 L 373.418,306.962 L 365.506,308.544 L 365.506,298.259 z "
+                 id="path1703"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g1704"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.868723,0,0,0.841809,-27.91207,15.52193)">
+        <g
+           id="g1705"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 119.557,425.383 L 119.557,438.102 L 435.832,344.83 L 436.68,329.568 L 119.557,425.383 z "
+             id="path1706"
+             sodipodi:nodetypes="ccccc"
+             style="font-size:12px;fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(-0.847921,19.50222)" />
+          <g
+             id="g1707"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 166.193,347.374 L 119.557,426.231 L 436.68,329.568 L 345.104,298.194 L 166.193,347.374 z "
+               id="path1708"
+               sodipodi:nodetypes="ccccc"
+               style="font-size:12px;fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+               transform="translate(-0.847921,19.50222)" />
+            <path
+               d="M 139.059,335.503 C 139.059,335.503 127.188,354.157 132.275,369.42 C 136.515,388.075 150.082,392.314 153.474,392.314 C 156.866,392.314 377.177,334.884 377.177,334.884 C 377.177,334.884 383.26,322.784 386.652,303.282 C 379.869,279.54 367.15,276.996 352.735,276.996 C 328.993,263.43 353.584,276.996 353.584,276.996 L 139.059,335.503 z "
+               id="path1709"
+               sodipodi:nodetypes="cccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.708121,0,0,0.825311,71.30738,59.20586)" />
+          </g>
+        </g>
+        <g
+           id="g1710"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 420.57,16.6844 C 420.57,17.5323 399.371,11.5968 377.325,9.90093 C 367.15,10.7489 66.1379,65.8638 63.5942,65.8638 C 67.8338,65.0159 54.267,65.8638 50.8753,73.4951 C 47.4836,81.1264 47.4836,343.134 47.4836,343.134 C 47.4836,343.134 47.4837,350.766 52.5712,356.701 C 60.2025,360.093 80.5526,360.941 72.9213,360.941 L 420.57,16.6844 z "
+             id="path1711"
+             sodipodi:nodetypes="cccccccc"
+             style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g1712"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 71.2332,108.009 L 418.873,40.4261 C 423.961,43.8178 429.049,41.2741 431.593,51.4492 C 434.137,61.6241 430.745,304.978 430.745,304.978 C 430.745,304.978 432.44,312.609 426.505,316.849 C 420.569,321.088 79.6699,416.904 79.6699,416.904 C 79.6699,416.904 69.4946,421.143 63.5593,412.664 C 55.0803,410.121 60.2025,124.37 60.2025,124.37 C 60.2025,124.37 61.0271,110.72 71.2332,108.009 z "
+               id="path1713"
+               sodipodi:nodetypes="ccccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.995445,0,0,0.910163,2.817975,-20.11005)" />
+            <g
+               id="g1714"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 89.0318,98.0844 L 394.284,38.7303 C 394.284,38.7303 401.915,36.1865 407.851,45.5137 C 413.786,54.8408 412.09,59.0804 412.09,59.0804 L 412.09,234.6 C 411.242,243.927 412.938,240.535 407.851,250.711 C 397.675,254.102 105.142,333.807 105.142,333.807 C 105.142,333.807 105.142,335.503 94.9673,333.807 C 84.7922,332.111 81.4005,316.001 81.4005,315.153 C 81.4005,314.305 78.0088,115.891 78.0088,115.891 C 78.0088,115.891 79.7048,101.476 89.0318,98.0844 z "
+                 id="path1715"
+                 sodipodi:nodetypes="ccccccccccc"
+                 style="fill:url(#linearGradient614);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 368.846,266.821 L 398.523,258.342 L 398.523,271.909 C 398.523,271.909 368.846,279.54 368.846,280.388 C 368.846,281.236 368.846,266.821 368.846,266.821 z "
+                 id="path1716"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00feb3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g1717"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(1.060794,0,0,0.913679,-36.3605,196.9337)">
+        <g
+           id="g1718"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 35.6013,306.962 L 454.114,242.088 L 454.114,266.614 L 35.6012,332.279 L 35.6013,306.962 z "
+             id="path1719"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b2b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(3.955698,-6.329117)" />
+          <path
+             d="M 39.557,300.633 C 41.9304,296.677 90.981,199.367 90.981,199.367 L 371.044,173.259 L 458.07,235.759 L 39.557,300.633 z "
+             id="path1720"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+        </g>
+        <g
+           id="g1721"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <g
+             id="g1722"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 331.487,184.335 C 331.487,184.335 332.279,193.038 332.279,193.829 C 332.279,194.62 366.298,234.177 366.298,234.177 L 424.051,224.683 L 423.26,218.354 L 422.468,218.354 L 331.487,184.335 z "
+               id="path1723"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 332.279,184.336 L 369.462,180.38 L 424.051,218.354 L 370.253,225.475 L 332.279,184.336 z "
+               id="path1724"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g1725"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 297.468,195.411 C 297.468,195.411 297.468,203.323 297.468,204.114 C 297.468,204.905 318.038,241.297 318.829,241.297 C 319.62,241.297 353.639,236.551 353.639,236.551 L 352.057,227.057"
+               id="path1726"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 298.26,195.411 C 299.051,195.411 322.785,193.038 322.785,193.038 L 352.848,227.057 L 321.994,231.804 L 298.26,195.411 z "
+               id="path1727"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g1728"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.1899,208.861 L 98.1013,195.411 L 272.943,178.006 L 282.437,189.082 L 90.1899,208.861 z "
+               id="path1729"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 90.1899,209.652 L 89.3988,215.19 L 282.437,194.62 L 282.437,188.291 L 90.1899,209.652 z "
+               id="path1730"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g1731"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.981,215.981 L 287.184,194.62 L 309.336,229.43 L 71.9936,261.867 L 90.981,215.981 z "
+               id="path1732"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 71.9937,261.076 L 71.2026,268.987 L 309.336,236.551 C 310.127,236.551 308.544,230.221 308.544,229.43 C 308.544,228.639 71.9937,263.449 71.9937,261.076 z "
+               id="path1733"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g1734"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 82.2785,274.525 L 301.424,242.089 L 306.171,250.791 L 79.9051,284.019 L 82.2785,274.525 z "
+               id="path1735"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 79.1139,284.81 L 79.1139,291.93 L 306.171,255.538 L 305.38,250 L 79.1139,284.81 z "
+               id="path1736"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+        </g>
+      </g>
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.89171284px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 182.78346,673.43795 L 255.62274,616.76111"
+       id="path28400" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.90486449px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 745.21711,622.36338 L 838.70209,667.83568"
+       id="path28404" />
+    <path
+       d="M 879.79292,636.40173 C 879.79292,636.40173 879.55203,616.66773 899.78678,622.58792 C 920.02153,628.50812 916.40818,638.37513 916.64907,638.37513 C 916.88996,638.37513 913.03573,626.25281 928.45268,623.99749 C 942.42429,625.40706 948.92832,628.50812 948.20565,638.93896 C 947.48298,649.3698 940.73806,651.90703 940.73806,651.90703 C 940.73806,651.90703 953.02345,653.3166 949.65099,674.46019 C 944.35141,689.11974 944.35141,687.71017 932.06603,689.40166 C 926.52556,686.86443 926.28467,684.60911 926.28467,684.60911 C 926.28467,684.60911 936.40204,695.60378 921.22598,702.65164 C 904.1228,708.00802 901.95479,703.21547 894.72809,700.67824 C 887.74229,695.60378 889.18763,689.40166 889.18763,689.40166 C 889.18763,689.40166 893.52365,699.83249 878.82936,701.8059 C 864.13507,703.7793 858.59461,699.83249 855.94482,683.76337 C 855.22215,671.64104 868.2302,670.51339 868.2302,670.51339 C 868.2302,670.51339 860.28083,670.7953 858.11283,664.59318 C 855.94482,658.39106 854.49948,650.21554 861.0035,639.22087 C 873.048,625.97089 881.23826,634.71024 879.79292,636.40173 z "
+       id="path28406"
+       sodipodi:nodetypes="cccccccccccccccccc"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.78178847;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g28408"
+       style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(5.9849059e-2,0,0,6.3887019e-2,868.00502,630.95484)">
+      <g
+         id="g28410"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="translate(107.0886,1.392441)">
+        <path
+           d="M 299.842,180.38 L 177.215,74.367 L 250.791,71.9936 L 385.285,162.183 C 385.285,162.183 353.639,191.456 299.842,180.38 z "
+           id="path28412"
+           sodipodi:nodetypes="ccccc"
+           style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+        <g
+           id="g28414"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 176.424,74.367 L 178.006,238.924 L 300.633,364.715 L 301.424,181.962 L 176.424,74.367 z "
+             id="path28416"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g28418"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 302.216,181.171 C 302.216,181.171 328.323,184.335 348.102,180.38 C 375,170.095 386.076,163.766 386.076,163.766 L 386.867,342.563 C 386.867,342.563 371.835,353.639 353.64,360.759 C 323.576,367.088 300.633,364.715 300.633,364.715 L 302.216,181.171 z "
+               id="path28420"
+               sodipodi:nodetypes="ccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+            <g
+               id="g28422"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 315.665,205.696 C 315.665,205.696 378.956,192.247 378.956,193.038 C 378.956,193.829 378.165,218.354 378.165,218.354 C 378.165,218.354 316.456,231.804 315.665,231.804 C 314.874,231.804 314.874,207.278 315.665,205.696 z "
+                 id="path28424"
+                 style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+                 transform="translate(-1.58226,0)" />
+              <path
+                 d="M 323.576,246.835 L 370.253,237.342 L 370.253,241.298 L 323.576,251.582 L 323.576,246.835 z "
+                 id="path28426"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#000100;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 360.76,268.987 L 372.627,267.405 L 372.627,279.272 L 360.76,281.646 L 360.76,268.987 z "
+                 id="path28428"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00b300;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 365.506,298.259 L 373.418,297.468 L 373.418,306.962 L 365.506,308.544 L 365.506,298.259 z "
+                 id="path28430"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g28432"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.868723,0,0,0.841809,-27.91207,15.52193)">
+        <g
+           id="g28434"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 119.557,425.383 L 119.557,438.102 L 435.832,344.83 L 436.68,329.568 L 119.557,425.383 z "
+             id="path28436"
+             sodipodi:nodetypes="ccccc"
+             style="font-size:12px;fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(-0.847921,19.50222)" />
+          <g
+             id="g28438"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 166.193,347.374 L 119.557,426.231 L 436.68,329.568 L 345.104,298.194 L 166.193,347.374 z "
+               id="path28440"
+               sodipodi:nodetypes="ccccc"
+               style="font-size:12px;fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+               transform="translate(-0.847921,19.50222)" />
+            <path
+               d="M 139.059,335.503 C 139.059,335.503 127.188,354.157 132.275,369.42 C 136.515,388.075 150.082,392.314 153.474,392.314 C 156.866,392.314 377.177,334.884 377.177,334.884 C 377.177,334.884 383.26,322.784 386.652,303.282 C 379.869,279.54 367.15,276.996 352.735,276.996 C 328.993,263.43 353.584,276.996 353.584,276.996 L 139.059,335.503 z "
+               id="path28442"
+               sodipodi:nodetypes="cccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.708121,0,0,0.825311,71.30738,59.20586)" />
+          </g>
+        </g>
+        <g
+           id="g28444"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 420.57,16.6844 C 420.57,17.5323 399.371,11.5968 377.325,9.90093 C 367.15,10.7489 66.1379,65.8638 63.5942,65.8638 C 67.8338,65.0159 54.267,65.8638 50.8753,73.4951 C 47.4836,81.1264 47.4836,343.134 47.4836,343.134 C 47.4836,343.134 47.4837,350.766 52.5712,356.701 C 60.2025,360.093 80.5526,360.941 72.9213,360.941 L 420.57,16.6844 z "
+             id="path28446"
+             sodipodi:nodetypes="cccccccc"
+             style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g28448"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 71.2332,108.009 L 418.873,40.4261 C 423.961,43.8178 429.049,41.2741 431.593,51.4492 C 434.137,61.6241 430.745,304.978 430.745,304.978 C 430.745,304.978 432.44,312.609 426.505,316.849 C 420.569,321.088 79.6699,416.904 79.6699,416.904 C 79.6699,416.904 69.4946,421.143 63.5593,412.664 C 55.0803,410.121 60.2025,124.37 60.2025,124.37 C 60.2025,124.37 61.0271,110.72 71.2332,108.009 z "
+               id="path28450"
+               sodipodi:nodetypes="ccccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.995445,0,0,0.910163,2.817975,-20.11005)" />
+            <g
+               id="g28452"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 89.0318,98.0844 L 394.284,38.7303 C 394.284,38.7303 401.915,36.1865 407.851,45.5137 C 413.786,54.8408 412.09,59.0804 412.09,59.0804 L 412.09,234.6 C 411.242,243.927 412.938,240.535 407.851,250.711 C 397.675,254.102 105.142,333.807 105.142,333.807 C 105.142,333.807 105.142,335.503 94.9673,333.807 C 84.7922,332.111 81.4005,316.001 81.4005,315.153 C 81.4005,314.305 78.0088,115.891 78.0088,115.891 C 78.0088,115.891 79.7048,101.476 89.0318,98.0844 z "
+                 id="path28454"
+                 sodipodi:nodetypes="ccccccccccc"
+                 style="fill:url(#linearGradient614);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 368.846,266.821 L 398.523,258.342 L 398.523,271.909 C 398.523,271.909 368.846,279.54 368.846,280.388 C 368.846,281.236 368.846,266.821 368.846,266.821 z "
+                 id="path28456"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00feb3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g28458"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(1.060794,0,0,0.913679,-36.3605,196.9337)">
+        <g
+           id="g28460"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 35.6013,306.962 L 454.114,242.088 L 454.114,266.614 L 35.6012,332.279 L 35.6013,306.962 z "
+             id="path28462"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b2b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(3.955698,-6.329117)" />
+          <path
+             d="M 39.557,300.633 C 41.9304,296.677 90.981,199.367 90.981,199.367 L 371.044,173.259 L 458.07,235.759 L 39.557,300.633 z "
+             id="path28464"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+        </g>
+        <g
+           id="g28466"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <g
+             id="g28468"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 331.487,184.335 C 331.487,184.335 332.279,193.038 332.279,193.829 C 332.279,194.62 366.298,234.177 366.298,234.177 L 424.051,224.683 L 423.26,218.354 L 422.468,218.354 L 331.487,184.335 z "
+               id="path28470"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 332.279,184.336 L 369.462,180.38 L 424.051,218.354 L 370.253,225.475 L 332.279,184.336 z "
+               id="path28472"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28474"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 297.468,195.411 C 297.468,195.411 297.468,203.323 297.468,204.114 C 297.468,204.905 318.038,241.297 318.829,241.297 C 319.62,241.297 353.639,236.551 353.639,236.551 L 352.057,227.057"
+               id="path28476"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 298.26,195.411 C 299.051,195.411 322.785,193.038 322.785,193.038 L 352.848,227.057 L 321.994,231.804 L 298.26,195.411 z "
+               id="path28478"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28480"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.1899,208.861 L 98.1013,195.411 L 272.943,178.006 L 282.437,189.082 L 90.1899,208.861 z "
+               id="path28482"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 90.1899,209.652 L 89.3988,215.19 L 282.437,194.62 L 282.437,188.291 L 90.1899,209.652 z "
+               id="path28484"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28486"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.981,215.981 L 287.184,194.62 L 309.336,229.43 L 71.9936,261.867 L 90.981,215.981 z "
+               id="path28488"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 71.9937,261.076 L 71.2026,268.987 L 309.336,236.551 C 310.127,236.551 308.544,230.221 308.544,229.43 C 308.544,228.639 71.9937,263.449 71.9937,261.076 z "
+               id="path28490"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28492"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 82.2785,274.525 L 301.424,242.089 L 306.171,250.791 L 79.9051,284.019 L 82.2785,274.525 z "
+               id="path28494"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 79.1139,284.81 L 79.1139,291.93 L 306.171,255.538 L 305.38,250 L 79.1139,284.81 z "
+               id="path28496"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+        </g>
+      </g>
+    </g>
+    <g
+       id="g28498"
+       style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(5.9849059e-2,0,0,6.3887019e-2,910.83809,632.0825)">
+      <g
+         id="g28500"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="translate(107.0886,1.392441)">
+        <path
+           d="M 299.842,180.38 L 177.215,74.367 L 250.791,71.9936 L 385.285,162.183 C 385.285,162.183 353.639,191.456 299.842,180.38 z "
+           id="path28502"
+           sodipodi:nodetypes="ccccc"
+           style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+        <g
+           id="g28504"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 176.424,74.367 L 178.006,238.924 L 300.633,364.715 L 301.424,181.962 L 176.424,74.367 z "
+             id="path28506"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g28508"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 302.216,181.171 C 302.216,181.171 328.323,184.335 348.102,180.38 C 375,170.095 386.076,163.766 386.076,163.766 L 386.867,342.563 C 386.867,342.563 371.835,353.639 353.64,360.759 C 323.576,367.088 300.633,364.715 300.633,364.715 L 302.216,181.171 z "
+               id="path28510"
+               sodipodi:nodetypes="ccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+            <g
+               id="g28512"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 315.665,205.696 C 315.665,205.696 378.956,192.247 378.956,193.038 C 378.956,193.829 378.165,218.354 378.165,218.354 C 378.165,218.354 316.456,231.804 315.665,231.804 C 314.874,231.804 314.874,207.278 315.665,205.696 z "
+                 id="path28514"
+                 style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+                 transform="translate(-1.58226,0)" />
+              <path
+                 d="M 323.576,246.835 L 370.253,237.342 L 370.253,241.298 L 323.576,251.582 L 323.576,246.835 z "
+                 id="path28516"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#000100;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 360.76,268.987 L 372.627,267.405 L 372.627,279.272 L 360.76,281.646 L 360.76,268.987 z "
+                 id="path28518"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00b300;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 365.506,298.259 L 373.418,297.468 L 373.418,306.962 L 365.506,308.544 L 365.506,298.259 z "
+                 id="path28520"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g28522"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.868723,0,0,0.841809,-27.91207,15.52193)">
+        <g
+           id="g28524"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 119.557,425.383 L 119.557,438.102 L 435.832,344.83 L 436.68,329.568 L 119.557,425.383 z "
+             id="path28526"
+             sodipodi:nodetypes="ccccc"
+             style="font-size:12px;fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(-0.847921,19.50222)" />
+          <g
+             id="g28528"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 166.193,347.374 L 119.557,426.231 L 436.68,329.568 L 345.104,298.194 L 166.193,347.374 z "
+               id="path28530"
+               sodipodi:nodetypes="ccccc"
+               style="font-size:12px;fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+               transform="translate(-0.847921,19.50222)" />
+            <path
+               d="M 139.059,335.503 C 139.059,335.503 127.188,354.157 132.275,369.42 C 136.515,388.075 150.082,392.314 153.474,392.314 C 156.866,392.314 377.177,334.884 377.177,334.884 C 377.177,334.884 383.26,322.784 386.652,303.282 C 379.869,279.54 367.15,276.996 352.735,276.996 C 328.993,263.43 353.584,276.996 353.584,276.996 L 139.059,335.503 z "
+               id="path28532"
+               sodipodi:nodetypes="cccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.708121,0,0,0.825311,71.30738,59.20586)" />
+          </g>
+        </g>
+        <g
+           id="g28534"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 420.57,16.6844 C 420.57,17.5323 399.371,11.5968 377.325,9.90093 C 367.15,10.7489 66.1379,65.8638 63.5942,65.8638 C 67.8338,65.0159 54.267,65.8638 50.8753,73.4951 C 47.4836,81.1264 47.4836,343.134 47.4836,343.134 C 47.4836,343.134 47.4837,350.766 52.5712,356.701 C 60.2025,360.093 80.5526,360.941 72.9213,360.941 L 420.57,16.6844 z "
+             id="path28536"
+             sodipodi:nodetypes="cccccccc"
+             style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g28538"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 71.2332,108.009 L 418.873,40.4261 C 423.961,43.8178 429.049,41.2741 431.593,51.4492 C 434.137,61.6241 430.745,304.978 430.745,304.978 C 430.745,304.978 432.44,312.609 426.505,316.849 C 420.569,321.088 79.6699,416.904 79.6699,416.904 C 79.6699,416.904 69.4946,421.143 63.5593,412.664 C 55.0803,410.121 60.2025,124.37 60.2025,124.37 C 60.2025,124.37 61.0271,110.72 71.2332,108.009 z "
+               id="path28540"
+               sodipodi:nodetypes="ccccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.995445,0,0,0.910163,2.817975,-20.11005)" />
+            <g
+               id="g28542"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 89.0318,98.0844 L 394.284,38.7303 C 394.284,38.7303 401.915,36.1865 407.851,45.5137 C 413.786,54.8408 412.09,59.0804 412.09,59.0804 L 412.09,234.6 C 411.242,243.927 412.938,240.535 407.851,250.711 C 397.675,254.102 105.142,333.807 105.142,333.807 C 105.142,333.807 105.142,335.503 94.9673,333.807 C 84.7922,332.111 81.4005,316.001 81.4005,315.153 C 81.4005,314.305 78.0088,115.891 78.0088,115.891 C 78.0088,115.891 79.7048,101.476 89.0318,98.0844 z "
+                 id="path28544"
+                 sodipodi:nodetypes="ccccccccccc"
+                 style="fill:url(#linearGradient614);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 368.846,266.821 L 398.523,258.342 L 398.523,271.909 C 398.523,271.909 368.846,279.54 368.846,280.388 C 368.846,281.236 368.846,266.821 368.846,266.821 z "
+                 id="path28546"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00feb3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g28548"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(1.060794,0,0,0.913679,-36.3605,196.9337)">
+        <g
+           id="g28550"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 35.6013,306.962 L 454.114,242.088 L 454.114,266.614 L 35.6012,332.279 L 35.6013,306.962 z "
+             id="path28552"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b2b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(3.955698,-6.329117)" />
+          <path
+             d="M 39.557,300.633 C 41.9304,296.677 90.981,199.367 90.981,199.367 L 371.044,173.259 L 458.07,235.759 L 39.557,300.633 z "
+             id="path28554"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+        </g>
+        <g
+           id="g28556"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <g
+             id="g28558"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 331.487,184.335 C 331.487,184.335 332.279,193.038 332.279,193.829 C 332.279,194.62 366.298,234.177 366.298,234.177 L 424.051,224.683 L 423.26,218.354 L 422.468,218.354 L 331.487,184.335 z "
+               id="path28560"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 332.279,184.336 L 369.462,180.38 L 424.051,218.354 L 370.253,225.475 L 332.279,184.336 z "
+               id="path28562"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28564"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 297.468,195.411 C 297.468,195.411 297.468,203.323 297.468,204.114 C 297.468,204.905 318.038,241.297 318.829,241.297 C 319.62,241.297 353.639,236.551 353.639,236.551 L 352.057,227.057"
+               id="path28566"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 298.26,195.411 C 299.051,195.411 322.785,193.038 322.785,193.038 L 352.848,227.057 L 321.994,231.804 L 298.26,195.411 z "
+               id="path28568"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28570"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.1899,208.861 L 98.1013,195.411 L 272.943,178.006 L 282.437,189.082 L 90.1899,208.861 z "
+               id="path28572"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 90.1899,209.652 L 89.3988,215.19 L 282.437,194.62 L 282.437,188.291 L 90.1899,209.652 z "
+               id="path28574"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28576"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.981,215.981 L 287.184,194.62 L 309.336,229.43 L 71.9936,261.867 L 90.981,215.981 z "
+               id="path28578"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 71.9937,261.076 L 71.2026,268.987 L 309.336,236.551 C 310.127,236.551 308.544,230.221 308.544,229.43 C 308.544,228.639 71.9937,263.449 71.9937,261.076 z "
+               id="path28580"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28582"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 82.2785,274.525 L 301.424,242.089 L 306.171,250.791 L 79.9051,284.019 L 82.2785,274.525 z "
+               id="path28584"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 79.1139,284.81 L 79.1139,291.93 L 306.171,255.538 L 305.38,250 L 79.1139,284.81 z "
+               id="path28586"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+        </g>
+      </g>
+    </g>
+    <g
+       id="g28588"
+       style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(5.9849059e-2,0,0,6.3887019e-2,888.29437,661.68353)">
+      <g
+         id="g28590"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="translate(107.0886,1.392441)">
+        <path
+           d="M 299.842,180.38 L 177.215,74.367 L 250.791,71.9936 L 385.285,162.183 C 385.285,162.183 353.639,191.456 299.842,180.38 z "
+           id="path28592"
+           sodipodi:nodetypes="ccccc"
+           style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+        <g
+           id="g28594"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 176.424,74.367 L 178.006,238.924 L 300.633,364.715 L 301.424,181.962 L 176.424,74.367 z "
+             id="path28596"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b3b2b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g28598"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 302.216,181.171 C 302.216,181.171 328.323,184.335 348.102,180.38 C 375,170.095 386.076,163.766 386.076,163.766 L 386.867,342.563 C 386.867,342.563 371.835,353.639 353.64,360.759 C 323.576,367.088 300.633,364.715 300.633,364.715 L 302.216,181.171 z "
+               id="path28600"
+               sodipodi:nodetypes="ccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1" />
+            <g
+               id="g28602"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 315.665,205.696 C 315.665,205.696 378.956,192.247 378.956,193.038 C 378.956,193.829 378.165,218.354 378.165,218.354 C 378.165,218.354 316.456,231.804 315.665,231.804 C 314.874,231.804 314.874,207.278 315.665,205.696 z "
+                 id="path28604"
+                 style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+                 transform="translate(-1.58226,0)" />
+              <path
+                 d="M 323.576,246.835 L 370.253,237.342 L 370.253,241.298 L 323.576,251.582 L 323.576,246.835 z "
+                 id="path28606"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#000100;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 360.76,268.987 L 372.627,267.405 L 372.627,279.272 L 360.76,281.646 L 360.76,268.987 z "
+                 id="path28608"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00b300;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 365.506,298.259 L 373.418,297.468 L 373.418,306.962 L 365.506,308.544 L 365.506,298.259 z "
+                 id="path28610"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g28612"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.868723,0,0,0.841809,-27.91207,15.52193)">
+        <g
+           id="g28614"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 119.557,425.383 L 119.557,438.102 L 435.832,344.83 L 436.68,329.568 L 119.557,425.383 z "
+             id="path28616"
+             sodipodi:nodetypes="ccccc"
+             style="font-size:12px;fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(-0.847921,19.50222)" />
+          <g
+             id="g28618"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 166.193,347.374 L 119.557,426.231 L 436.68,329.568 L 345.104,298.194 L 166.193,347.374 z "
+               id="path28620"
+               sodipodi:nodetypes="ccccc"
+               style="font-size:12px;fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+               transform="translate(-0.847921,19.50222)" />
+            <path
+               d="M 139.059,335.503 C 139.059,335.503 127.188,354.157 132.275,369.42 C 136.515,388.075 150.082,392.314 153.474,392.314 C 156.866,392.314 377.177,334.884 377.177,334.884 C 377.177,334.884 383.26,322.784 386.652,303.282 C 379.869,279.54 367.15,276.996 352.735,276.996 C 328.993,263.43 353.584,276.996 353.584,276.996 L 139.059,335.503 z "
+               id="path28622"
+               sodipodi:nodetypes="cccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.708121,0,0,0.825311,71.30738,59.20586)" />
+          </g>
+        </g>
+        <g
+           id="g28624"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 420.57,16.6844 C 420.57,17.5323 399.371,11.5968 377.325,9.90093 C 367.15,10.7489 66.1379,65.8638 63.5942,65.8638 C 67.8338,65.0159 54.267,65.8638 50.8753,73.4951 C 47.4836,81.1264 47.4836,343.134 47.4836,343.134 C 47.4836,343.134 47.4837,350.766 52.5712,356.701 C 60.2025,360.093 80.5526,360.941 72.9213,360.941 L 420.57,16.6844 z "
+             id="path28626"
+             sodipodi:nodetypes="cccccccc"
+             style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          <g
+             id="g28628"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 71.2332,108.009 L 418.873,40.4261 C 423.961,43.8178 429.049,41.2741 431.593,51.4492 C 434.137,61.6241 430.745,304.978 430.745,304.978 C 430.745,304.978 432.44,312.609 426.505,316.849 C 420.569,321.088 79.6699,416.904 79.6699,416.904 C 79.6699,416.904 69.4946,421.143 63.5593,412.664 C 55.0803,410.121 60.2025,124.37 60.2025,124.37 C 60.2025,124.37 61.0271,110.72 71.2332,108.009 z "
+               id="path28630"
+               sodipodi:nodetypes="ccccccccc"
+               style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+               transform="matrix(0.995445,0,0,0.910163,2.817975,-20.11005)" />
+            <g
+               id="g28632"
+               style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+              <path
+                 d="M 89.0318,98.0844 L 394.284,38.7303 C 394.284,38.7303 401.915,36.1865 407.851,45.5137 C 413.786,54.8408 412.09,59.0804 412.09,59.0804 L 412.09,234.6 C 411.242,243.927 412.938,240.535 407.851,250.711 C 397.675,254.102 105.142,333.807 105.142,333.807 C 105.142,333.807 105.142,335.503 94.9673,333.807 C 84.7922,332.111 81.4005,316.001 81.4005,315.153 C 81.4005,314.305 78.0088,115.891 78.0088,115.891 C 78.0088,115.891 79.7048,101.476 89.0318,98.0844 z "
+                 id="path28634"
+                 sodipodi:nodetypes="ccccccccccc"
+                 style="fill:url(#linearGradient614);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+              <path
+                 d="M 368.846,266.821 L 398.523,258.342 L 398.523,271.909 C 398.523,271.909 368.846,279.54 368.846,280.388 C 368.846,281.236 368.846,266.821 368.846,266.821 z "
+                 id="path28636"
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#00feb3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         id="g28638"
+         style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(1.060794,0,0,0.913679,-36.3605,196.9337)">
+        <g
+           id="g28640"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             d="M 35.6013,306.962 L 454.114,242.088 L 454.114,266.614 L 35.6012,332.279 L 35.6013,306.962 z "
+             id="path28642"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#b2b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+             transform="translate(3.955698,-6.329117)" />
+          <path
+             d="M 39.557,300.633 C 41.9304,296.677 90.981,199.367 90.981,199.367 L 371.044,173.259 L 458.07,235.759 L 39.557,300.633 z "
+             id="path28644"
+             sodipodi:nodetypes="ccccc"
+             style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+        </g>
+        <g
+           id="g28646"
+           style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+          <g
+             id="g28648"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 331.487,184.335 C 331.487,184.335 332.279,193.038 332.279,193.829 C 332.279,194.62 366.298,234.177 366.298,234.177 L 424.051,224.683 L 423.26,218.354 L 422.468,218.354 L 331.487,184.335 z "
+               id="path28650"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 332.279,184.336 L 369.462,180.38 L 424.051,218.354 L 370.253,225.475 L 332.279,184.336 z "
+               id="path28652"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28654"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 297.468,195.411 C 297.468,195.411 297.468,203.323 297.468,204.114 C 297.468,204.905 318.038,241.297 318.829,241.297 C 319.62,241.297 353.639,236.551 353.639,236.551 L 352.057,227.057"
+               id="path28656"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 298.26,195.411 C 299.051,195.411 322.785,193.038 322.785,193.038 L 352.848,227.057 L 321.994,231.804 L 298.26,195.411 z "
+               id="path28658"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28660"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.1899,208.861 L 98.1013,195.411 L 272.943,178.006 L 282.437,189.082 L 90.1899,208.861 z "
+               id="path28662"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 90.1899,209.652 L 89.3988,215.19 L 282.437,194.62 L 282.437,188.291 L 90.1899,209.652 z "
+               id="path28664"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28666"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 90.981,215.981 L 287.184,194.62 L 309.336,229.43 L 71.9936,261.867 L 90.981,215.981 z "
+               id="path28668"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 71.9937,261.076 L 71.2026,268.987 L 309.336,236.551 C 310.127,236.551 308.544,230.221 308.544,229.43 C 308.544,228.639 71.9937,263.449 71.9937,261.076 z "
+               id="path28670"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+          <g
+             id="g28672"
+             style="stroke:#000000;stroke-width:4.29749012;stroke-dasharray:none;stroke-opacity:1">
+            <path
+               d="M 82.2785,274.525 L 301.424,242.089 L 306.171,250.791 L 79.9051,284.019 L 82.2785,274.525 z "
+               id="path28674"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               d="M 79.1139,284.81 L 79.1139,291.93 L 306.171,255.538 L 305.38,250 L 79.1139,284.81 z "
+               id="path28676"
+               sodipodi:nodetypes="ccccc"
+               style="fill:#e5e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.29749012;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+        </g>
+      </g>
+    </g>
+    <g
+       id="g3073"
+       transform="matrix(0.1267968,0,0,0.1710106,229.00249,409.01498)">
+      <path
+         transform="matrix(0,-0.604122,1.608296,0,-165.2214,394.5863)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.75"
+         sodipodi:nodetypes="ccccccc"
+         id="path3075"
+         d="M 426.278,378.046 L 79.4376,379.165 C 79.4376,379.165 -4.63207,356.939 -1.27547,255.125 C -13.892,169.635 56.2895,146.476 60.7648,142 C 65.2402,137.525 427.397,137.496 427.397,137.496 L 427.397,137.496 L 426.278,378.046 z " />
+      <path
+         transform="matrix(0,-0.174045,0.823205,0,39.47672,182.772)"
+         style="font-size:12px;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:9.76546001"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path3077"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+      <path
+         transform="matrix(0,-0.169729,0.807961,0,43.34661,181.9851)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke-width:3.75"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path3079"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+    </g>
+    <g
+       id="g3081"
+       transform="matrix(0.1267968,0,0,0.1710106,376.48475,404.97437)">
+      <path
+         transform="matrix(0,-0.604122,1.608296,0,-165.2214,394.5863)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.75"
+         sodipodi:nodetypes="ccccccc"
+         id="path3083"
+         d="M 426.278,378.046 L 79.4376,379.165 C 79.4376,379.165 -4.63207,356.939 -1.27547,255.125 C -13.892,169.635 56.2895,146.476 60.7648,142 C 65.2402,137.525 427.397,137.496 427.397,137.496 L 427.397,137.496 L 426.278,378.046 z " />
+      <path
+         transform="matrix(0,-0.174045,0.823205,0,39.47672,182.772)"
+         style="font-size:12px;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:9.76546001"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path3085"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+      <path
+         transform="matrix(0,-0.169729,0.807961,0,43.34661,181.9851)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke-width:3.75"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path3087"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+    </g>
+    <g
+       id="g3089"
+       transform="matrix(1.2500391,0,0,1.184913,597.0199,213.65087)">
+      <g
+         transform="translate(152.9277,120.7469)"
+         id="g3091">
+        <path
+           style="fill:url(#radialGradient3109);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path3093"
+           d="M 24.972918,-30.66305 C 24.972918,-22.90055 -16.207082,-20.35055 -53.230207,-20.66305 C -90.878332,-20.66305 -92.370832,-26.65055 -92.370832,-34.41305 C -92.370832,-42.17555 -71.190832,-40.03805 -33.542707,-40.03805 C 4.105418,-40.03805 24.972918,-38.42555 24.972918,-30.66305 z " />
+        <path
+           style="fill:url(#linearGradient3111);fill-opacity:1;stroke:#677883;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path3095"
+           d="M -88.933334,-50.694302 L 23.566666,-50.694302 L 23.566666,-37.18304 L -88.933334,-37.18304 L -88.933334,-50.694302 z " />
+        <path
+           style="fill:url(#linearGradient3113);fill-opacity:1;stroke:#677883;stroke-width:0.49944988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path3097"
+           d="M -75.933161,-61.840606 L 36.319422,-61.840606 L 23.751782,-51.190703 L -88.500801,-51.190703 L -75.933161,-61.840606 z " />
+        <path
+           style="fill:url(#linearGradient3115);fill-opacity:1;stroke:#677883;stroke-width:0.46877259;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path3099"
+           d="M 23.981782,-50.846435 L 36.765614,-61.588097 L 36.752498,-48.186223 L 24.037025,-37.40884 L 23.981782,-50.846435 z " />
+        <rect
+           y="-40.584919"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient3117);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect3101"
+           height="0.78125" />
+        <rect
+           y="-42.264622"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient3119);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect3103"
+           height="0.78125" />
+        <rect
+           y="-43.944294"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient3121);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect3105"
+           height="0.78125" />
+        <rect
+           y="-45.33102"
+           x="-86.609116"
+           width="1.5625"
+           style="fill:url(#radialGradient3123);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect3107"
+           height="0.78125" />
+      </g>
+    </g>
+    <g
+       id="g3125"
+       transform="matrix(0.1267968,0,0,0.1710106,587.83432,404.25336)">
+      <path
+         transform="matrix(0,-0.604122,1.608296,0,-165.2214,394.5863)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.75"
+         sodipodi:nodetypes="ccccccc"
+         id="path3127"
+         d="M 426.278,378.046 L 79.4376,379.165 C 79.4376,379.165 -4.63207,356.939 -1.27547,255.125 C -13.892,169.635 56.2895,146.476 60.7648,142 C 65.2402,137.525 427.397,137.496 427.397,137.496 L 427.397,137.496 L 426.278,378.046 z " />
+      <path
+         transform="matrix(0,-0.174045,0.823205,0,39.47672,182.772)"
+         style="font-size:12px;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:9.76546001"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path3129"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+      <path
+         transform="matrix(0,-0.169729,0.807961,0,43.34661,181.9851)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke-width:3.75"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path3131"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 618.99582,406.26456 L 726.07199,357.77724"
+       id="path3133" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.03078127px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 765.25542,360.35663 L 886.89875,405.70547"
+       id="path3135" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 746.27504,404.24425 L 746.27504,349.69602"
+       id="path3137" />
+    <g
+       id="g3139"
+       transform="matrix(0.1267968,0,0,0.1710106,716.67848,402.51509)">
+      <path
+         transform="matrix(0,-0.604122,1.608296,0,-165.2214,394.5863)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.75"
+         sodipodi:nodetypes="ccccccc"
+         id="path3141"
+         d="M 426.278,378.046 L 79.4376,379.165 C 79.4376,379.165 -4.63207,356.939 -1.27547,255.125 C -13.892,169.635 56.2895,146.476 60.7648,142 C 65.2402,137.525 427.397,137.496 427.397,137.496 L 427.397,137.496 L 426.278,378.046 z " />
+      <path
+         transform="matrix(0,-0.174045,0.823205,0,39.47672,182.772)"
+         style="font-size:12px;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:9.76546001"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path3143"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+      <path
+         transform="matrix(0,-0.169729,0.807961,0,43.34661,181.9851)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke-width:3.75"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path3145"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+    </g>
+    <g
+       id="g3147"
+       transform="matrix(0.1267968,0,0,0.1710106,864.16074,398.47448)">
+      <path
+         transform="matrix(0,-0.604122,1.608296,0,-165.2214,394.5863)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.75"
+         sodipodi:nodetypes="ccccccc"
+         id="path3149"
+         d="M 426.278,378.046 L 79.4376,379.165 C 79.4376,379.165 -4.63207,356.939 -1.27547,255.125 C -13.892,169.635 56.2895,146.476 60.7648,142 C 65.2402,137.525 427.397,137.496 427.397,137.496 L 427.397,137.496 L 426.278,378.046 z " />
+      <path
+         transform="matrix(0,-0.174045,0.823205,0,39.47672,182.772)"
+         style="font-size:12px;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:9.76546001"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path3151"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+      <path
+         transform="matrix(0,-0.169729,0.807961,0,43.34661,181.9851)"
+         style="font-size:12px;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke-width:3.75"
+         sodipodi:type="arc"
+         sodipodi:ry="236.07524"
+         sodipodi:rx="234.95641"
+         sodipodi:cy="253.85521"
+         sodipodi:cx="260.68973"
+         id="path3153"
+         d="M 495.64613 253.85521 A 234.95641 236.07524 0 1 1  25.733322,253.85521 A 234.95641 236.07524 0 1 1  495.64613 253.85521 z" />
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.06804883px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 132.72111,484.54548 L 239.79728,539.85635"
+       id="path3155" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.10092473px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 278.98071,536.91396 L 400.62404,485.18325"
+       id="path3157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.06804883px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 260.00033,486.85011 L 260.00033,549.07483"
+       id="path3159" />
+    <g
+       id="g3205"
+       transform="matrix(1.2344541,0,0,1.166142,589.26929,486.12951)">
+      <g
+         transform="translate(152.9277,120.7469)"
+         id="g3207">
+        <path
+           style="fill:url(#radialGradient3239);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path3209"
+           d="M 24.972918,-30.66305 C 24.972918,-22.90055 -16.207082,-20.35055 -53.230207,-20.66305 C -90.878332,-20.66305 -92.370832,-26.65055 -92.370832,-34.41305 C -92.370832,-42.17555 -71.190832,-40.03805 -33.542707,-40.03805 C 4.105418,-40.03805 24.972918,-38.42555 24.972918,-30.66305 z " />
+        <path
+           style="fill:url(#linearGradient3241);fill-opacity:1;stroke:#677883;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path3211"
+           d="M -88.933334,-50.694302 L 23.566666,-50.694302 L 23.566666,-37.18304 L -88.933334,-37.18304 L -88.933334,-50.694302 z " />
+        <path
+           style="fill:url(#linearGradient3243);fill-opacity:1;stroke:#677883;stroke-width:0.49944988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path3213"
+           d="M -75.933161,-61.840606 L 36.319422,-61.840606 L 23.751782,-51.190703 L -88.500801,-51.190703 L -75.933161,-61.840606 z " />
+        <path
+           style="fill:url(#linearGradient3245);fill-opacity:1;stroke:#677883;stroke-width:0.46877259;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           id="path3215"
+           d="M 23.981782,-50.846435 L 36.765614,-61.588097 L 36.752498,-48.186223 L 24.037025,-37.40884 L 23.981782,-50.846435 z " />
+        <rect
+           y="-40.584919"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient3247);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect3217"
+           height="0.78125" />
+        <rect
+           y="-42.264622"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient3249);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect3219"
+           height="0.78125" />
+        <rect
+           y="-43.944294"
+           x="-86.589584"
+           width="1.5625"
+           style="fill:url(#radialGradient3251);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect3221"
+           height="0.78125" />
+        <rect
+           y="-45.33102"
+           x="-86.609116"
+           width="1.5625"
+           style="fill:url(#radialGradient3253);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           rx="0"
+           id="rect3223"
+           height="0.78125" />
+      </g>
+    </g>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3225"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial"
+       transform="matrix(0.7525038,0,0,0.6775389,553.71011,269.52496)"><flowRegion
+         id="flowRegion3227"><rect
+           id="rect3229"
+           width="157.14285"
+           height="40"
+           x="194.28572"
+           y="475.52304"
+           style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara3231">Load Balancer</flowPara></flowRoot>    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.06804883px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 621.63441,484.8423 L 728.71058,540.15317"
+       id="path3233" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.10092473px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 767.89401,537.21078 L 889.53734,485.48007"
+       id="path3235" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.06804883px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend);stroke-opacity:1"
+       d="M 748.91363,487.14693 L 748.91363,549.37165"
+       id="path3237" />
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3255"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial"
+       transform="translate(-22.223356,-10.101525)"><flowRegion
+         id="flowRegion3257"><rect
+           id="rect3259"
+           width="151.52289"
+           height="32.324883"
+           x="44.446712"
+           y="364.27713"
+           style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara3263">Chaining Overlay</flowPara></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3265"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial"
+       transform="matrix(1,0,0,1.2037203,31.345186,184.04024)"><flowRegion
+         id="flowRegion3267"><rect
+           id="rect3269"
+           width="208.52287"
+           height="72.93808"
+           x="412.14224"
+           y="279.42432"
+           style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara3096">50% of total writes </flowPara><flowPara
+         id="flowPara3098">(DC A + DC B) are </flowPara><flowPara
+         id="flowPara3100">always off-site</flowPara></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3102"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"
+       transform="translate(-8,4)"><flowRegion
+         id="flowRegion3104"><rect
+           id="rect3106"
+           width="70"
+           height="24"
+           x="196"
+           y="688.09448"
+           style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara
+         id="flowPara3110">Clients</flowPara></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3112"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"
+       transform="translate(750.19434,-91.642006)"><flowRegion
+         id="flowRegion3114"><rect
+           id="rect3116"
+           width="70"
+           height="24"
+           x="196"
+           y="688.09448"
+           style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara
+         id="flowPara3118">Clients</flowPara></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3120"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial"
+       transform="matrix(1,0,0,1.2037203,18.69043,-89.07388)"><flowRegion
+         id="flowRegion3122"><rect
+           id="rect3124"
+           width="208.52287"
+           height="72.93808"
+           x="412.14224"
+           y="279.42432"
+           style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
+         id="flowPara3132">Each LB points to</flowPara><flowPara
+         id="flowPara3134">the same MirrorMode</flowPara><flowPara
+         id="flowPara3136">Node at any time.</flowPara></flowRoot>  </g>
+</svg>


Property changes on: openldap/vendor/openldap-release/doc/guide/images/src/dual_dc.svg
___________________________________________________________________
Name: svn:executable
   + *

Added: openldap/vendor/openldap-release/doc/guide/images/src/refint.svg
===================================================================
--- openldap/vendor/openldap-release/doc/guide/images/src/refint.svg	                        (rev 0)
+++ openldap/vendor/openldap-release/doc/guide/images/src/refint.svg	2007-12-15 09:30:12 UTC (rev 883)
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="412.04193"
+   height="172.80376"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   version="1.0"
+   sodipodi:docbase="/home/andreas/palestra"
+   sodipodi:docname="refint.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend"
+       style="overflow:visible">
+      <path
+         id="path8347"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.386"
+     inkscape:cx="381.27532"
+     inkscape:cy="98.970161"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showguides="false"
+     inkscape:window-width="1278"
+     inkscape:window-height="724"
+     inkscape:window-x="0"
+     inkscape:window-y="25" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Camada 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-29.66815,-34.695504)">
+    <g
+       id="g7325"
+       transform="translate(-297.25829,101.81818)">
+      <g
+         transform="translate(233.76623,-28.71069)"
+         id="g7289">
+        <text
+           xml:space="preserve"
+           style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+           x="124.81962"
+           y="80.50071"
+           id="text2160"><tspan
+             sodipodi:role="line"
+             id="tspan2162"
+             x="124.81962"
+             y="80.50071"
+             style="font-weight:normal">DN: uid=john,ou=people,dc=example,dc=com</tspan><tspan
+             sodipodi:role="line"
+             x="124.81962"
+             y="95.50071"
+             id="tspan2164">uid: john</tspan><tspan
+             sodipodi:role="line"
+             x="124.81962"
+             y="110.50071"
+             id="tspan2166">mail: john at example.com</tspan><tspan
+             sodipodi:role="line"
+             x="124.81962"
+             y="125.50071"
+             id="tspan2168">(...)</tspan></text>
+        <rect
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.79348463px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="rect2182"
+           width="298.90784"
+           height="68.027596"
+           x="121.10886"
+           y="65.967438" />
+        <rect
+           style="opacity:0.28915663;fill:#aa9ab2;fill-opacity:1;stroke:none;stroke-width:0.69669151;stroke-opacity:1"
+           id="rect3159"
+           width="298.28311"
+           height="17.619322"
+           x="121.06046"
+           y="66.674454" />
+      </g>
+      <text
+         xml:space="preserve"
+         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         x="358.58585"
+         y="51.79002"
+         id="text7300"><tspan
+           sodipodi:role="line"
+           id="tspan7302"
+           x="358.58585"
+           y="51.79002"
+           style="font-weight:normal">DN: uid=john,ou=people,dc=example,dc=com</tspan><tspan
+           sodipodi:role="line"
+           x="358.58585"
+           y="66.79002"
+           id="tspan7304">uid: john</tspan><tspan
+           sodipodi:role="line"
+           x="358.58585"
+           y="81.79002"
+           id="tspan7306">mail: john at example.com</tspan><tspan
+           sodipodi:role="line"
+           x="358.58585"
+           y="96.79002"
+           id="tspan7308">(...)</tspan></text>
+      <rect
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.79348463px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="rect7310"
+         width="298.90784"
+         height="68.027596"
+         x="354.87509"
+         y="37.256748" />
+      <rect
+         style="opacity:0.28915663;fill:#aa9ab2;fill-opacity:1;stroke:none;stroke-width:0.69669151;stroke-opacity:1"
+         id="rect7312"
+         width="298.28311"
+         height="17.619322"
+         x="354.82669"
+         y="37.963764" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="116.88309"
+       y="48.033184"
+       id="text2170"><tspan
+         sodipodi:role="line"
+         id="tspan2172"
+         x="116.88309"
+         y="48.033184">DN: cn=tech,ou=group,dc=example,dc=com</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="63.033184"
+         id="tspan2174">cn: tech</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="78.033184"
+         id="tspan2176"
+         style="font-weight:normal">member: uid=john,ou=people,dc=example,dc=com</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="93.033184"
+         id="tspan2178">member: uid=mary,ou=people,dc=example,dc=com</tspan><tspan
+         sodipodi:role="line"
+         x="116.88309"
+         y="108.03318"
+         id="tspan2180">(...)</tspan></text>
+    <rect
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8948347px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect7321"
+       width="328.38803"
+       height="78.748756"
+       x="112.59964"
+       y="35.142921" />
+    <rect
+       style="opacity:0.28915663;fill:#aa9ab2;fill-opacity:1;stroke:none;stroke-width:0.69669151;stroke-opacity:1"
+       id="rect7323"
+       width="329.30765"
+       height="17.619322"
+       x="112.40244"
+       y="65.054672" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+       d="M 54.112554,146.87878 C -1.5132611,141.59779 49.816091,72.233662 106.06061,73.285704"
+       id="path7352"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>

Modified: openldap/vendor/openldap-release/doc/man/man1/ldapmodify.1
===================================================================
--- openldap/vendor/openldap-release/doc/man/man1/ldapmodify.1	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man1/ldapmodify.1	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 .TH LDAPMODIFY 1 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" $OpenLDAP: pkg/ldap/doc/man/man1/ldapmodify.1,v 1.49.2.3 2007/08/31 23:13:52 quanah Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man1/ldapmodify.1,v 1.49.2.5 2007/12/10 18:19:13 quanah Exp $
 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
 .SH NAME
@@ -79,6 +79,8 @@
 [\c
 .BI \-y \ passwdfile\fR]
 [\c
+.BI \-H \ ldapuri\fR]
+[\c
 .BI \-h \ ldaphost\fR]
 [\c
 .BI \-p \ ldapport\fR]
@@ -326,6 +328,7 @@
     title: the world's most famous mythical manager
     mail: bjensen at example.com
     uid: bjensen
+.fi
 .LP
 the command:
 .LP
@@ -344,6 +347,7 @@
 .nf
     dn: cn=Barbara Jensen,dc=example,dc=com
     changetype: delete
+.fi
 .LP
 the command:
 .LP

Modified: openldap/vendor/openldap-release/doc/man/man1/ldappasswd.1
===================================================================
--- openldap/vendor/openldap-release/doc/man/man1/ldappasswd.1	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man1/ldappasswd.1	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 .TH LDAPPASSWD 1 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" $OpenLDAP: pkg/ldap/doc/man/man1/ldappasswd.1,v 1.39.2.3 2007/08/31 23:13:52 quanah Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man1/ldappasswd.1,v 1.39.2.4 2007/12/10 18:19:13 quanah Exp $
 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
 .SH NAME
@@ -47,14 +47,12 @@
 [\c
 .BI \-U \ authcid\fR]
 [\c
-.BI \-R \ authcid\fR]
+.BI \-R \ realm\fR]
 [\c
 .BR \-x ]
 [\c
 .BI \-X \ authzid\fR]
 [\c
-.BI \-R \ realm\fR]
-[\c
 .BI \-Y \ mech\fR]
 [\c
 .BR \-Z[Z] ]

Modified: openldap/vendor/openldap-release/doc/man/man3/ldap_extended_operation.3
===================================================================
--- openldap/vendor/openldap-release/doc/man/man3/ldap_extended_operation.3	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man3/ldap_extended_operation.3	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 .TH LDAP_EXTENDED_OPERATION 3 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" $OpenLDAP: pkg/ldap/doc/man/man3/ldap_extended_operation.3,v 1.1.2.4 2007/08/31 23:13:52 quanah Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man3/ldap_extended_operation.3,v 1.1.2.5 2007/11/14 09:04:34 ghenry Exp $
 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
 .SH NAME
@@ -32,7 +32,7 @@
 const struct berval *\fIrequestdata\fB,
 LDAPControl **\fIsctrls\fB,
 LDAPControl **\fIcctrls\fB,
-char **\fIretoidp\fB;
+char **\fIretoidp\fB,
 struct berval **\fIretdatap\fB );
 .RE
 .SH DESCRIPTION

Modified: openldap/vendor/openldap-release/doc/man/man3/ldap_get_values.3
===================================================================
--- openldap/vendor/openldap-release/doc/man/man3/ldap_get_values.3	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man3/ldap_get_values.3	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 .TH LDAP_GET_VALUES 3 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" $OpenLDAP: pkg/ldap/doc/man/man3/ldap_get_values.3,v 1.17.2.2 2007/08/31 23:13:52 quanah Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man3/ldap_get_values.3,v 1.17.2.3 2007/11/14 09:04:34 ghenry Exp $
 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
 .SH NAME
@@ -17,32 +17,32 @@
 .ft
 LDAP *ld;
 LDAPMessage *entry;
-char *attr
+char *attr;
 .LP
 .ft B
 struct berval **ldap_get_values_len(ld, entry, attr)
 .ft
 LDAP *ld;
 LDAPMessage *entry;
-char *attr
+char *attr;
 .LP
 .ft B
-ldap_count_values(vals)
+int ldap_count_values(vals)
 .ft
 char **vals;
 .LP
 .ft B
-ldap_count_values_len(vals)
+int ldap_count_values_len(vals)
 .ft
 struct berval **vals;
 .LP
 .ft B
-ldap_value_free(vals)
+void ldap_value_free(vals)
 .ft
 char **vals;
 .LP
 .ft B
-ldap_value_free_len(vals)
+void ldap_value_free_len(vals)
 .ft
 struct berval **vals;
 .SH DESCRIPTION

Modified: openldap/vendor/openldap-release/doc/man/man3/ldap_parse_vlv_control.3
===================================================================
--- openldap/vendor/openldap-release/doc/man/man3/ldap_parse_vlv_control.3	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man3/ldap_parse_vlv_control.3	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 .TH LDAP_PARSE_VLV_CONTROL 3 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" $OpenLDAP: pkg/ldap/doc/man/man3/ldap_parse_vlv_control.3,v 1.1.2.2 2007/08/31 23:13:52 quanah Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man3/ldap_parse_vlv_control.3,v 1.1.2.3 2007/11/14 09:04:34 ghenry Exp $
 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
 .SH NAME
@@ -12,7 +12,7 @@
 #include <ldap.h>
 .LP
 .ft B
-int ldap_parse_vlv_control( ld, ctrlp, target_posp, list_countp, contextp, errcodep );  
+int ldap_parse_vlv_control( ld, ctrlp, target_posp, list_countp, contextp, errcodep )
 .ft
 LDAP *ld;
 LDAPControl **ctrlp;

Modified: openldap/vendor/openldap-release/doc/man/man3/ldap_url.3
===================================================================
--- openldap/vendor/openldap-release/doc/man/man3/ldap_url.3	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man3/ldap_url.3	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 .TH LDAP_URL 3 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" $OpenLDAP: pkg/ldap/doc/man/man3/ldap_url.3,v 1.18.2.3 2007/08/31 23:13:52 quanah Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man3/ldap_url.3,v 1.18.2.4 2007/11/14 09:04:34 ghenry Exp $
 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
 .SH NAME
@@ -31,7 +31,7 @@
 } LDAPURLDesc;
 .LP
 .ft B
-ldap_free_urldesc( LDAPURLDesc *ludp )
+void ldap_free_urldesc( LDAPURLDesc *ludp );
 .SH DESCRIPTION
 These routines support the use of LDAP URLs (Uniform Resource Locators)
 as detailed in RFC 4516.  LDAP URLs look like this:

Modified: openldap/vendor/openldap-release/doc/man/man5/slapd-config.5
===================================================================
--- openldap/vendor/openldap-release/doc/man/man5/slapd-config.5	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man5/slapd-config.5	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,7 +1,7 @@
 .TH SLAPD-CONFIG 5 "RELEASEDATE" "OpenLDAP LDVERSION"
 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
-.\" $OpenLDAP: pkg/ldap/doc/man/man5/slapd-config.5,v 1.13.2.3 2007/09/29 09:57:16 hyc Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man5/slapd-config.5,v 1.13.2.6 2007/12/03 17:47:41 quanah Exp $
 .SH NAME
 slapd-config \- configuration backend to slapd
 .SH SYNOPSIS
@@ -445,7 +445,7 @@
 .B with another database,
 without disrupting the currently active clients.
 The default is FALSE.  You may wish to use
-.B olcIdletTmeout
+.B olcIdleTimeout
 along with this option.
 .TP
 .B olcIdleTimeout: <integer>
@@ -453,6 +453,12 @@
 an idle client connection.  A setting of 0 disables this
 feature.  The default is 0.
 .TP
+.B olcIndexIntLen: <integer>
+Specify the key length for ordered integer indices. The most significant
+bytes of the binary integer will be used for index keys. The default
+value is 4, which provides exact indexing for 31 bit values.
+A floating point representation is used to index too large values.
+.TP
 .B olcIndexSubstrIfMaxlen: <integer>
 Specify the maximum length for subinitial and subfinal indices. Only
 this many characters of an attribute value will be processed by the
@@ -479,7 +485,11 @@
 using this filter "cn=*abcdefgh*" would generate index lookups for
 "abcd", "cdef", and "efgh".
 
-Note: Indexing support depends on the particular backend in use.
+.LP
+Note: Indexing support depends on the particular backend in use. Also,
+changing these settings will generally require deleting any indices that
+depend on these parameters and recreating them with
+.BR slapindex (8).
 
 .TP
 .B olcLocalSSF: <SSF>
@@ -1458,7 +1468,7 @@
 .TP
 .B olcMaxDerefDepth: <depth>
 Specifies the maximum number of aliases to dereference when trying to
-resolve an entry, used to avoid infinite alias loops. The default is 1.
+resolve an entry, used to avoid infinite alias loops. The default is 15.
 .TP
 .B olcMirrorMode: TRUE | FALSE
 This option puts a replica database into "mirror" mode.  Update

Modified: openldap/vendor/openldap-release/doc/man/man5/slapd.conf.5
===================================================================
--- openldap/vendor/openldap-release/doc/man/man5/slapd.conf.5	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man5/slapd.conf.5	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,7 +1,7 @@
 .TH SLAPD.CONF 5 "RELEASEDATE" "OpenLDAP LDVERSION"
 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
-.\" $OpenLDAP: pkg/ldap/doc/man/man5/slapd.conf.5,v 1.239.2.9 2007/10/18 00:29:52 quanah Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man5/slapd.conf.5,v 1.239.2.14 2007/12/03 17:47:41 quanah Exp $
 .SH NAME
 slapd.conf \- configuration file for slapd, the stand-alone LDAP daemon
 .SH SYNOPSIS
@@ -470,6 +470,12 @@
 Read additional configuration information from the given file before
 continuing with the next line of the current file.
 .TP
+.B index_intlen <integer>
+Specify the key length for ordered integer indices. The most significant
+bytes of the binary integer will be used for index keys. The default
+value is 4, which provides exact indexing for 31 bit values.
+A floating point representation is used to index too large values.
+.TP
 .B index_substr_if_minlen <integer>
 Specify the minimum length for subinitial and subfinal indices. An
 attribute value must have at least this many characters in order to be
@@ -496,7 +502,11 @@
 using this filter "cn=*abcdefgh*" would generate index lookups for
 "abcd", "cdef", and "efgh".
 
-Note: Indexing support depends on the particular backend in use.
+.LP
+Note: Indexing support depends on the particular backend in use. Also,
+changing these settings will generally require deleting any indices that
+depend on these parameters and recreating them with
+.BR slapindex (8).
 
 .TP
 .B localSSF <SSF>
@@ -1342,11 +1352,17 @@
 size limit of regular searches unless extended by the
 .B prtotal
 switch.
+
+The \fBlimits\fP statement is typically used to let an unlimited
+number of entries be returned by searches performed
+with the identity used by the consumer for synchronization purposes
+by means of the RFC 4533 LDAP Content Synchronization protocol
+(see \fBsyncrepl\fP for details).
 .RE
 .TP
 .B maxderefdepth <depth>
 Specifies the maximum number of aliases to dereference when trying to
-resolve an entry, used to avoid infinite alias loops. The default is 1.
+resolve an entry, used to avoid infinite alias loops. The default is 15.
 .TP
 .B mirrormode on | off
 This option puts a replica database into "mirror" mode.  Update
@@ -1622,16 +1638,21 @@
 will send search requests to the provider
 .B slapd
 according to the search specification. The search specification includes
-.B searchbase, scope, filter, attrs, attrsonly, sizelimit,
+.BR searchbase ", " scope ", " filter ", " attrs ", " attrsonly ", " sizelimit ", "
 and
 .B timelimit
 parameters as in the normal search specification. 
 The \fBscope\fP defaults to \fBsub\fP, the \fBfilter\fP defaults to
-\fB(objectclass=*)\fP, and there is no default \fBsearchbase\fP. The
+\fB(objectclass=*)\fP, while there is no default \fBsearchbase\fP. The
 \fBattrs\fP list defaults to \fB"*,+"\fP to return all user and operational
 attributes, and \fBattrsonly\fP is unset by default.
 The \fBsizelimit\fP and \fBtimelimit\fP only
 accept "unlimited" and positive integers, and both default to "unlimited".
+The \fBsizelimit\fP and \fBtimelimit\fP parameters define
+a consumer requested limitation on the number of entries that can be returned
+by the LDAP Content Synchronization operation; as such, it is intended
+to implement partial replication based on the size of the replicated database
+and on the time required by the synchronization.
 Note, however, that any provider-side limits for the replication identity
 will be enforced by the provider regardless of the limits requested
 by the LDAP Content Synchronization operation, much like for any other
@@ -1665,7 +1686,13 @@
 The schema checking can be enforced at the LDAP Sync
 consumer site by turning on the
 .B schemachecking
-parameter. The default is off.
+parameter. The default is \fBoff\fP.
+Schema checking \fBon\fP means that replicated entries must have
+a structural objectClass, must obey to objectClass requirements
+in terms of required/allowed attributes, and that naming attributes
+and distinguished values must be present.
+As a consequence, schema checking should be \fBoff\fP when partial
+replication is used.
 
 A
 .B bindmethod
@@ -1699,12 +1726,17 @@
 option. A non default SASL realm can be set with the
 .B realm 
 option.
+The identity used for synchronization by the consumer should be allowed
+to receive an unlimited number of entries in response to a search request.
 The provider, other than allow authentication of the syncrepl identity,
 should grant that identity appropriate access privileges to the data 
 that is being replicated (\fBaccess\fP directive), and appropriate time 
-and size limits (\fBlimits\fP directive).
+and size limits.
+This can be accomplished by either allowing unlimited \fBsizelimit\fP
+and \fBtimelimit\fP, or by setting an appropriate \fBlimits\fP statement
+in the consumer's configuration (see \fBsizelimit\fP and \fBlimits\fP
+for details).
 
-
 The
 .B starttls
 parameter specifies use of the StartTLS extended operation

Modified: openldap/vendor/openldap-release/doc/man/man5/slapo-ppolicy.5
===================================================================
--- openldap/vendor/openldap-release/doc/man/man5/slapo-ppolicy.5	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man5/slapo-ppolicy.5	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-.\" $OpenLDAP: pkg/ldap/doc/man/man5/slapo-ppolicy.5,v 1.12.2.4 2007/08/31 23:13:53 quanah Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man5/slapo-ppolicy.5,v 1.12.2.5 2007/11/14 09:04:34 ghenry Exp $
 .\" Copyright 2004-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
 .TH SLAPO_PPOLICY 5 "RELEASEDATE" "OpenLDAP LDVERSION"
@@ -503,7 +503,7 @@
 .B userPassword
 .P
 The
-.b userPassword
+.B userPassword
 attribute is not strictly part of the
 .B ppolicy
 module.  It is, however, the attribute that is tracked and controlled

Modified: openldap/vendor/openldap-release/doc/man/man8/slapacl.8
===================================================================
--- openldap/vendor/openldap-release/doc/man/man8/slapacl.8	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man8/slapacl.8	2007-12-15 09:30:12 UTC (rev 883)
@@ -10,7 +10,7 @@
 .B [\-D authcDN | \-U authcID]
 .B [\-f slapd.conf]
 .B [\-F confdir]
-.B [\-o name[=value]
+.B [\-o name[=value]]
 .B [\-u]
 .B [\-v]
 .B [\-X authzID | \-o authzDN=DN]

Modified: openldap/vendor/openldap-release/doc/man/man8/slapadd.8
===================================================================
--- openldap/vendor/openldap-release/doc/man/man8/slapadd.8	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man8/slapadd.8	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 .TH SLAPADD 8C "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" $OpenLDAP: pkg/ldap/doc/man/man8/slapadd.8,v 1.34.2.6 2007/10/04 09:02:46 ando Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man8/slapadd.8,v 1.34.2.7 2007/11/14 09:04:34 ghenry Exp $
 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
 .SH NAME
@@ -15,7 +15,7 @@
 .B [\-j lineno]
 .B [\-l ldif-file]
 .B [\-n dbnum]
-.B [\-o name[=value]
+.B [\-o name[=value]]
 .B [\-q]
 .B [\-s]
 .B [\-S SID]

Modified: openldap/vendor/openldap-release/doc/man/man8/slapauth.8
===================================================================
--- openldap/vendor/openldap-release/doc/man/man8/slapauth.8	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man8/slapauth.8	2007-12-15 09:30:12 UTC (rev 883)
@@ -9,7 +9,7 @@
 .B [\-f slapd.conf]
 .B [\-F confdir]
 .B [\-M mech]
-.B [\-o name[=value]
+.B [\-o name[=value]]
 .B [\-R realm]
 .B [\-U authcID]
 .B [\-v]

Modified: openldap/vendor/openldap-release/doc/man/man8/slapcat.8
===================================================================
--- openldap/vendor/openldap-release/doc/man/man8/slapcat.8	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man8/slapcat.8	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 .TH SLAPCAT 8C "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" $OpenLDAP: pkg/ldap/doc/man/man8/slapcat.8,v 1.28.2.5 2007/08/31 23:13:53 quanah Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man8/slapcat.8,v 1.28.2.6 2007/11/14 09:04:34 ghenry Exp $
 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
 .SH NAME
@@ -15,7 +15,7 @@
 .B [\-g]
 .B [\-l ldif-file]
 .B [\-n dbnum]
-.B [\-o name[=value]
+.B [\-o name[=value]]
 .B [\-s subtree-dn]
 .B [\-v]
 .B 

Modified: openldap/vendor/openldap-release/doc/man/man8/slapdn.8
===================================================================
--- openldap/vendor/openldap-release/doc/man/man8/slapdn.8	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man8/slapdn.8	2007-12-15 09:30:12 UTC (rev 883)
@@ -9,7 +9,7 @@
 .B [\-f slapd.conf]
 .B [\-F confdir]
 .B [\-N | \-P]
-.B [\-o name[=value]
+.B [\-o name[=value]]
 .B [\-v]
 .B DN [...]
 .LP

Modified: openldap/vendor/openldap-release/doc/man/man8/slapindex.8
===================================================================
--- openldap/vendor/openldap-release/doc/man/man8/slapindex.8	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man8/slapindex.8	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 .TH SLAPINDEX 8C "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" $OpenLDAP: pkg/ldap/doc/man/man8/slapindex.8,v 1.19.2.6 2007/10/04 09:02:46 ando Exp $
+.\" $OpenLDAP: pkg/ldap/doc/man/man8/slapindex.8,v 1.19.2.8 2007/11/27 19:29:13 quanah Exp $
 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
 .SH NAME
@@ -13,8 +13,9 @@
 .B [\-F confdir]
 .B [\-g]
 .B [\-n dbnum]
-.B [\-o name[=value]
+.B [\-o name[=value]]
 .B [\-q]
+.B [\-t]
 .B [\-v]
 .B [attr] [...]
 .B 
@@ -116,6 +117,10 @@
 the database will most likely be unusable if any errors or
 interruptions occur.
 .TP
+.B \-t
+enable truncate mode. Truncates (empties) an index database before indexing
+any entries. May only be used with Quick mode.
+.TP
 .B \-v
 enable verbose mode.
 .SH LIMITATIONS

Modified: openldap/vendor/openldap-release/doc/man/man8/slaptest.8
===================================================================
--- openldap/vendor/openldap-release/doc/man/man8/slaptest.8	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/doc/man/man8/slaptest.8	2007-12-15 09:30:12 UTC (rev 883)
@@ -8,7 +8,7 @@
 .B [\-d level]
 .B [\-f slapd.conf]
 .B [\-F confdir]
-.B [\-o name[=value]
+.B [\-o name[=value]]
 .B [\-Q]
 .B [\-u]
 .B [\-v]

Modified: openldap/vendor/openldap-release/include/ldap_int_thread.h
===================================================================
--- openldap/vendor/openldap-release/include/ldap_int_thread.h	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/include/ldap_int_thread.h	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* ldap_int_thread.h - ldap internal thread wrappers header file */
-/* $OpenLDAP: pkg/ldap/include/ldap_int_thread.h,v 1.20.2.3 2007/08/31 23:13:53 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/include/ldap_int_thread.h,v 1.20.2.4 2007/11/07 20:58:37 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  * 
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -44,6 +44,7 @@
 typedef pthread_t		ldap_int_thread_t;
 typedef pthread_mutex_t		ldap_int_thread_mutex_t;
 typedef pthread_cond_t		ldap_int_thread_cond_t;
+typedef pthread_key_t		ldap_int_thread_key_t;
 
 #define ldap_int_thread_equal(a, b)	pthread_equal((a), (b))
 
@@ -88,6 +89,7 @@
 typedef cthread_t		ldap_int_thread_t;
 typedef struct mutex		ldap_int_thread_mutex_t;
 typedef struct condition	ldap_int_thread_cond_t;
+typedef cthread_key_t		ldap_int_thread_key_t;
 
 LDAP_END_DECL
 
@@ -106,6 +108,7 @@
 typedef pth_t		ldap_int_thread_t;
 typedef pth_mutex_t	ldap_int_thread_mutex_t;
 typedef pth_cond_t	ldap_int_thread_cond_t;
+typedef pth_key_t	ldap_int_thread_key_t;
 
 #if 0
 #define LDAP_THREAD_HAVE_RDWR 1
@@ -129,6 +132,7 @@
 typedef thread_t		ldap_int_thread_t;
 typedef mutex_t			ldap_int_thread_mutex_t;
 typedef cond_t			ldap_int_thread_cond_t;
+typedef thread_key_t	ldap_int_thread_key_t;
 
 #define HAVE_REENTRANT_FUNCTIONS 1
 
@@ -181,6 +185,7 @@
 typedef unsigned long	ldap_int_thread_t;
 typedef HANDLE	ldap_int_thread_mutex_t;
 typedef HANDLE	ldap_int_thread_cond_t;
+typedef DWORD	ldap_int_thread_key_t;
 
 LDAP_END_DECL
 
@@ -201,6 +206,7 @@
 typedef int			ldap_int_thread_t;
 typedef int			ldap_int_thread_mutex_t;
 typedef int			ldap_int_thread_cond_t;
+typedef int			ldap_int_thread_key_t;
 
 #define LDAP_THREAD_HAVE_TPOOL 1
 typedef int			ldap_int_thread_pool_t;

Modified: openldap/vendor/openldap-release/include/ldap_pvt_thread.h
===================================================================
--- openldap/vendor/openldap-release/include/ldap_pvt_thread.h	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/include/ldap_pvt_thread.h	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* ldap_pvt_thread.h - ldap threads header file */
-/* $OpenLDAP: pkg/ldap/include/ldap_pvt_thread.h,v 1.51.2.5 2007/10/18 00:39:22 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/include/ldap_pvt_thread.h,v 1.51.2.6 2007/11/07 20:58:37 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  * 
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -34,6 +34,7 @@
 typedef ldap_int_thread_rdwr_t		ldap_pvt_thread_rdwr_t;
 #endif
 typedef ldap_int_thread_rmutex_t	ldap_pvt_thread_rmutex_t;
+typedef ldap_int_thread_key_t	ldap_pvt_thread_key_t;
 #endif /* !LDAP_PVT_THREAD_H_DONE */
 
 #define ldap_pvt_thread_equal		ldap_int_thread_equal
@@ -169,6 +170,18 @@
 LDAP_F( int )
 ldap_pvt_thread_rdwr_wunlock LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp));
 
+LDAP_F( int )
+ldap_pvt_thread_key_create LDAP_P((ldap_pvt_thread_key_t *keyp));
+
+LDAP_F( int )
+ldap_pvt_thread_key_destroy LDAP_P((ldap_pvt_thread_key_t key));
+
+LDAP_F( int )
+ldap_pvt_thread_key_setdata LDAP_P((ldap_pvt_thread_key_t key, void *data));
+
+LDAP_F( int )
+ldap_pvt_thread_key_getdata LDAP_P((ldap_pvt_thread_key_t key, void **data));
+
 #ifdef LDAP_DEBUG
 LDAP_F( int )
 ldap_pvt_thread_rdwr_readers LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp));

Modified: openldap/vendor/openldap-release/include/lutil.h
===================================================================
--- openldap/vendor/openldap-release/include/lutil.h	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/include/lutil.h	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/include/lutil.h,v 1.63.2.3 2007/10/01 14:39:34 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/include/lutil.h,v 1.63.2.4 2007/12/03 15:04:30 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -304,9 +304,8 @@
 #define lutil_atol(v, s)	lutil_atolx((v), (s), 10)
 #define lutil_atoul(v, s)	lutil_atoulx((v), (s), 10)
 
-/* Parse and unparse time intervals */
 LDAP_LUTIL_F (int)
-lutil_str2bin( struct berval *in, struct berval *out );
+lutil_str2bin( struct berval *in, struct berval *out, void *ctx );
 
 /* Parse and unparse time intervals */
 LDAP_LUTIL_F (int)

Modified: openldap/vendor/openldap-release/libraries/liblber/Makefile.in
===================================================================
--- openldap/vendor/openldap-release/libraries/liblber/Makefile.in	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/libraries/liblber/Makefile.in	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 # LIBLBER
-# $OpenLDAP: pkg/ldap/libraries/liblber/Makefile.in,v 1.37.2.2 2007/08/31 23:13:54 quanah Exp $
+# $OpenLDAP: pkg/ldap/libraries/liblber/Makefile.in,v 1.37.2.3 2007/11/15 00:31:05 quanah Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 1998-2007 The OpenLDAP Foundation.
@@ -37,6 +37,7 @@
 XLIBS = $(LIBRARY) $(LDAP_LIBLUTIL_A)
 XXLIBS = 
 NT_LINK_LIBS = $(AC_LIBS)
+UNIX_LINK_LIBS = $(AC_LIBS)
 
 dtest:    $(XLIBS) dtest.o
 	$(LTLINK) -o $@ dtest.o $(LIBS)

Modified: openldap/vendor/openldap-release/libraries/libldap_r/thr_cthreads.c
===================================================================
--- openldap/vendor/openldap-release/libraries/libldap_r/thr_cthreads.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/libraries/libldap_r/thr_cthreads.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* thr_cthreads.c - wrapper for mach cthreads */
-/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_cthreads.c,v 1.20.2.2 2007/08/31 23:13:56 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_cthreads.c,v 1.20.2.3 2007/11/07 20:58:37 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -153,4 +153,28 @@
 	return cthread_self();
 }
 
+int
+ldap_pvt_thread_key_create( ldap_pvt_thread_key_t *key )
+{
+	return cthread_keycreate( key );
+}
+
+int
+ldap_pvt_thread_key_destroy( ldap_pvt_thread_key_t key )
+{
+	return( 0 );
+}
+
+int
+ldap_pvt_thread_key_setdata( ldap_pvt_thread_key_t key, void *data )
+{
+	return cthread_setspecific( key, data );
+}
+
+int
+ldap_pvt_thread_key_getdata( ldap_pvt_thread_key_t key, void **data )
+{
+	return cthread_getspecific( key, data );
+}
+
 #endif /* HAVE_MACH_CTHREADS */

Modified: openldap/vendor/openldap-release/libraries/libldap_r/thr_nt.c
===================================================================
--- openldap/vendor/openldap-release/libraries/libldap_r/thr_nt.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/libraries/libldap_r/thr_nt.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* thr_nt.c - wrapper around NT threads */
-/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_nt.c,v 1.32.2.3 2007/08/31 23:13:56 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_nt.c,v 1.32.2.4 2007/11/07 20:58:37 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -198,4 +198,37 @@
 	return GetCurrentThreadId();
 }
 
+int
+ldap_pvt_thread_key_create( ldap_pvt_thread_key_t *keyp )
+{
+	DWORD key = TlsAlloc();
+	if ( key != TLS_OUT_OF_INDEXES ) {
+		*keyp = key;
+		return 0;
+	} else {
+		return -1;
+	}
+}
+
+int
+ldap_pvt_thread_key_destroy( ldap_pvt_thread_key_t key )
+{
+	/* TlsFree returns 0 on failure */
+	return( TlsFree( key ) == 0 );
+}
+
+int
+ldap_pvt_thread_key_setdata( ldap_pvt_thread_key_t key, void *data )
+{
+	return ( TlsSetValue( key, data ) == 0 );
+}
+
+int
+ldap_pvt_thread_key_getdata( ldap_pvt_thread_key_t key, void **data )
+{
+	void *ptr = TlsGetValue( key );
+	*data = ptr;
+	return( ptr ? GetLastError() : 0 );
+}
+
 #endif

Modified: openldap/vendor/openldap-release/libraries/libldap_r/thr_posix.c
===================================================================
--- openldap/vendor/openldap-release/libraries/libldap_r/thr_posix.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/libraries/libldap_r/thr_posix.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* thr_posix.c - wrapper around posix and posixish thread implementations.  */
-/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_posix.c,v 1.46.2.2 2007/08/31 23:13:56 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_posix.c,v 1.46.2.3 2007/11/07 20:58:37 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -312,6 +312,31 @@
 	return pthread_self();
 }
 
+int
+ldap_pvt_thread_key_create( ldap_pvt_thread_key_t *key )
+{
+	return pthread_key_create( key, NULL );
+}
+
+int
+ldap_pvt_thread_key_destroy( ldap_pvt_thread_key_t key )
+{
+	return pthread_key_delete( key );
+}
+
+int
+ldap_pvt_thread_key_setdata( ldap_pvt_thread_key_t key, void *data )
+{
+	return pthread_setspecific( key, data );
+}
+
+int
+ldap_pvt_thread_key_getdata( ldap_pvt_thread_key_t key, void **data )
+{
+	*data = pthread_getspecific( key );
+	return 0;
+}
+
 #ifdef LDAP_THREAD_HAVE_RDWR
 #ifdef HAVE_PTHREAD_RWLOCK_DESTROY
 int 

Modified: openldap/vendor/openldap-release/libraries/libldap_r/thr_pth.c
===================================================================
--- openldap/vendor/openldap-release/libraries/libldap_r/thr_pth.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/libraries/libldap_r/thr_pth.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* thr_pth.c - wrappers around GNU Pth */
-/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_pth.c,v 1.16.2.2 2007/08/31 23:13:56 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_pth.c,v 1.16.2.3 2007/11/07 20:58:37 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -159,6 +159,31 @@
 	return pth_self();
 }
 
+int
+ldap_pvt_thread_key_create( ldap_pvt_thread_key_t *key )
+{
+	return pth_key_create( key, NULL );
+}
+
+int
+ldap_pvt_thread_key_destroy( ldap_pvt_thread_key_t key )
+{
+	return pth_key_delete( key );
+}
+
+int
+ldap_pvt_thread_key_setdata( ldap_pvt_thread_key_t key, void *data )
+{
+	return pth_key_setdata( key, data );
+}
+
+int
+ldap_pvt_thread_key_getdata( ldap_pvt_thread_key_t key, void **data )
+{
+	*data = pth_key_getdata( key );
+	return 0;
+}
+
 #ifdef LDAP_THREAD_HAVE_RDWR
 int 
 ldap_pvt_thread_rdwr_init( ldap_pvt_thread_rdwr_t *rw )

Modified: openldap/vendor/openldap-release/libraries/libldap_r/thr_stub.c
===================================================================
--- openldap/vendor/openldap-release/libraries/libldap_r/thr_stub.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/libraries/libldap_r/thr_stub.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* thr_stub.c - stubs for the threads */
-/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_stub.c,v 1.27.2.3 2007/10/23 20:26:55 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_stub.c,v 1.27.2.4 2007/11/07 20:58:37 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -237,6 +237,30 @@
 	return(0);
 }
 
+int
+ldap_pvt_thread_key_create( ldap_pvt_thread_key_t *key )
+{
+	return(0);
+}
+
+int
+ldap_pvt_thread_key_destroy( ldap_pvt_thread_key_t key )
+{
+	return(0);
+}
+
+int
+ldap_pvt_thread_key_setdata( ldap_pvt_thread_key_t key, void *data )
+{
+	return(0);
+}
+
+int
+ldap_pvt_thread_key_getdata( ldap_pvt_thread_key_t key, void **data )
+{
+	return(0);
+}
+
 ldap_pvt_thread_t
 ldap_pvt_thread_pool_tid( void *vctx )
 {

Modified: openldap/vendor/openldap-release/libraries/libldap_r/thr_thr.c
===================================================================
--- openldap/vendor/openldap-release/libraries/libldap_r/thr_thr.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/libraries/libldap_r/thr_thr.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* thr_thr.c - wrappers around solaris threads */
-/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_thr.c,v 1.18.2.2 2007/08/31 23:13:56 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/libraries/libldap_r/thr_thr.c,v 1.18.2.3 2007/11/07 20:58:37 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -159,4 +159,28 @@
 	return thr_self();
 }
 
+int
+ldap_pvt_thread_key_create( ldap_pvt_thread_key_t *key )
+{
+	return thr_keycreate( key, NULL );
+}
+
+int
+ldap_pvt_thread_key_destroy( ldap_pvt_thread_key_t key )
+{
+	return( 0 );
+}
+
+int
+ldap_pvt_thread_key_setdata( ldap_pvt_thread_key_t key, void *data )
+{
+	return thr_setspecific( key, data );
+}
+
+int
+ldap_pvt_thread_key_getdata( ldap_pvt_thread_key_t key, void **data )
+{
+	return thr_getspecific( key, data );
+}
+
 #endif /* HAVE_THR */

Modified: openldap/vendor/openldap-release/libraries/libldap_r/tpool.c
===================================================================
--- openldap/vendor/openldap-release/libraries/libldap_r/tpool.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/libraries/libldap_r/tpool.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/libraries/libldap_r/tpool.c,v 1.52.2.7 2007/10/19 01:56:47 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/libraries/libldap_r/tpool.c,v 1.52.2.8 2007/11/07 20:58:37 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -38,11 +38,11 @@
 } ldap_int_thread_pool_state_t;
 
 /* Thread-specific key with data and optional free function */
-typedef struct ldap_int_thread_key_s {
+typedef struct ldap_int_tpool_key_s {
 	void *ltk_key;
 	void *ltk_data;
 	ldap_pvt_thread_pool_keyfree_t *ltk_free;
-} ldap_int_thread_key_t;
+} ldap_int_tpool_key_t;
 
 /* Max number of thread-specific keys we store per thread.
  * We don't expect to use many...
@@ -55,7 +55,7 @@
 /* Context: thread ID and thread-specific key/data pairs */
 typedef struct ldap_int_thread_userctx_s {
 	ldap_pvt_thread_t ltu_id;
-	ldap_int_thread_key_t ltu_key[MAXKEYS];
+	ldap_int_tpool_key_t ltu_key[MAXKEYS];
 } ldap_int_thread_userctx_t;
 
 
@@ -126,6 +126,8 @@
 
 static void *ldap_int_thread_pool_wrapper( void *pool );
 
+static ldap_pvt_thread_key_t	ldap_tpool_key;
+
 /* Context of the main thread */
 static ldap_int_thread_userctx_t ldap_int_main_thrctx;
 
@@ -133,6 +135,7 @@
 ldap_int_thread_pool_startup ( void )
 {
 	ldap_int_main_thrctx.ltu_id = ldap_pvt_thread_self();
+	ldap_pvt_thread_key_create( &ldap_tpool_key );
 	return ldap_pvt_thread_mutex_init(&ldap_pvt_thread_pool_mutex);
 }
 
@@ -145,6 +148,7 @@
 		(ldap_pvt_thread_pool_destroy)(&pool, 0); /* ignore thr_debug macro */
 	}
 	ldap_pvt_thread_mutex_destroy(&ldap_pvt_thread_pool_mutex);
+	ldap_pvt_thread_key_destroy( ldap_tpool_key );
 	return(0);
 }
 
@@ -552,6 +556,8 @@
 	ctx.ltu_id = ldap_pvt_thread_self();
 	TID_HASH(ctx.ltu_id, hash);
 
+	ldap_pvt_thread_key_setdata( ldap_tpool_key, &ctx );
+
 	ldap_pvt_thread_mutex_lock(&pool->ltp_mutex);
 
 	/* thread_keys[] is read-only when paused */
@@ -819,29 +825,10 @@
  */
 void *ldap_pvt_thread_pool_context( )
 {
-	ldap_pvt_thread_t tid;
-	unsigned i, hash;
-	ldap_int_thread_userctx_t *ctx;
+	void *ctx = NULL;
 
-	tid = ldap_pvt_thread_self();
-	if ( ldap_pvt_thread_equal( tid, ldap_int_main_thrctx.ltu_id ))
-		return &ldap_int_main_thrctx;
-
-	TID_HASH( tid, hash );
-	i = hash &= (LDAP_MAXTHR-1);
-	ldap_pvt_thread_mutex_lock(&ldap_pvt_thread_pool_mutex);
-	do {
-		ctx = thread_keys[i].ctx;
-		if ( ctx == DELETED_THREAD_CTX )
-			continue;
-		if ( !ctx || ldap_pvt_thread_equal(thread_keys[i].ctx->ltu_id, tid) )
-			goto done;
-	} while ( (i = (i+1) & (LDAP_MAXTHR-1)) != hash );
-	ctx = NULL;
- done:
-	ldap_pvt_thread_mutex_unlock(&ldap_pvt_thread_pool_mutex);
-
-	return ctx;
+	ldap_pvt_thread_key_getdata( ldap_tpool_key, &ctx );
+	return ctx ? ctx : &ldap_int_main_thrctx;
 }
 
 /*

Modified: openldap/vendor/openldap-release/libraries/liblutil/fetch.c
===================================================================
--- openldap/vendor/openldap-release/libraries/liblutil/fetch.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/libraries/liblutil/fetch.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* fetch.c - routines for fetching data at URLs */
-/* $OpenLDAP: pkg/ldap/libraries/liblutil/fetch.c,v 1.10.2.3 2007/09/02 02:29:08 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/libraries/liblutil/fetch.c,v 1.10.2.4 2007/12/02 01:54:33 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1999-2007 The OpenLDAP Foundation.
@@ -57,6 +57,14 @@
 		}
 
 		p = ber_strdup( urlstr );
+
+		/* But we should convert to LDAP_DIRSEP before use */
+		if ( LDAP_DIRSEP[0] != '/' ) {
+			char *s = p;
+			while (( s = strchr( s, '/' )))
+				*s++ = LDAP_DIRSEP[0];
+		}
+
 		ldap_pvt_hex_unescape( p );
 
 		url = fopen( p, "rb" );

Modified: openldap/vendor/openldap-release/libraries/liblutil/utils.c
===================================================================
--- openldap/vendor/openldap-release/libraries/liblutil/utils.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/libraries/liblutil/utils.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/libraries/liblutil/utils.c,v 1.33.2.6 2007/10/17 01:52:19 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/libraries/liblutil/utils.c,v 1.33.2.15 2007/12/10 18:00:18 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -35,6 +35,7 @@
 #include "lutil.h"
 #include "ldap_defaults.h"
 #include "ldap_pvt.h"
+#include "lber_pvt.h"
 
 #ifdef HAVE_EBCDIC
 int _trans_argv = 1;
@@ -604,18 +605,18 @@
 }
 
 /* Multiply an integer by 100000000 and add new */
-typedef struct _decnum {
+typedef struct lutil_int_decnum {
 	unsigned char *buf;
 	int bufsiz;
 	int beg;
 	int len;
-} _decnum;
+} lutil_int_decnum;
 
 #define	FACTOR1	(100000000&0xffff)
 #define FACTOR2 (100000000>>16)
 
 static void
-scale( int new, _decnum *prev, unsigned char *tmp )
+scale( int new, lutil_int_decnum *prev, unsigned char *tmp )
 {
 	int i, j;
 	unsigned char *in = prev->buf+prev->beg;
@@ -643,19 +644,18 @@
 		prev->len -= j;
 	}
 
-	out = tmp + prev->bufsiz - 1;
-	for ( i = 0; new ; i-- ) {
+	out = tmp + prev->bufsiz;
+	i = 0;
+	do {
+		i--;
 		new += out[i];
 		out[i] = new & 0xff;
 		new >>= 8;
-		if (!new ) {
-			if ( !prev->len ) {
-				prev->beg += i;
-				prev->len = -i;
-				prev->len++;
-			}
-			break;
-		}
+	} while ( new );
+	i = -i;
+	if ( prev->len < i ) {
+		prev->beg = prev->bufsiz - i;
+		prev->len = i;
 	}
 	AC_MEMCPY( prev->buf+prev->beg, tmp+prev->beg, prev->len );
 }
@@ -663,9 +663,16 @@
 /* Convert unlimited length decimal or hex string to binary.
  * Output buffer must be provided, bv_len must indicate buffer size
  * Hex input can be "0x1234" or "'1234'H"
+ *
+ * Temporarily modifies the input string.
+ *
+ * Note: High bit of binary form is always the sign bit. If the number
+ * is supposed to be positive but has the high bit set, a zero byte
+ * is prepended. It is assumed that this has already been handled on
+ * any hex input.
  */
 int
-lutil_str2bin( struct berval *in, struct berval *out )
+lutil_str2bin( struct berval *in, struct berval *out, void *ctx )
 {
 	char *pin, *pout, ctmp;
 	char *end;
@@ -722,19 +729,26 @@
 	} else {
 	/* Decimal */
 		char tmpbuf[64], *tmp;
-		_decnum num;
+		lutil_int_decnum num;
+		int neg = 0;
 
 		len = in->bv_len;
 		pin = in->bv_val;
-		num.buf = out->bv_val;
+		num.buf = (unsigned char *)out->bv_val;
 		num.bufsiz = out->bv_len;
 		num.beg = num.bufsiz-1;
 		num.len = 0;
+		if ( pin[0] == '-' ) {
+			neg = 0xff;
+			len--;
+			pin++;
+		}
 
 #define	DECMAX	8	/* 8 digits at a time */
 
-		if ( len > sizeof(tmpbuf)) {
-			tmp = ber_memalloc( len );
+		/* tmp must be at least as large as outbuf */
+		if ( out->bv_len > sizeof(tmpbuf)) {
+			tmp = ber_memalloc_x( out->bv_len, ctx );
 		} else {
 			tmp = tmpbuf;
 		}
@@ -752,17 +766,36 @@
 				rc = -1;
 				goto decfail;
 			}
-			scale( l, &num, tmp );
+			scale( l, &num, (unsigned char *)tmp );
 			pin += chunk;
 			len -= chunk;
-			chunk = HEXMAX;
+			chunk = DECMAX;
 		}
+		/* Negate the result */
+		if ( neg ) {
+			unsigned char *ptr;
+
+			ptr = num.buf+num.beg;
+
+			/* flip all bits */
+			for ( i=0; i<num.len; i++ )
+				ptr[i] ^= 0xff;
+
+			/* add 1, with carry - overflow handled below */
+			while ( i-- && ! (ptr[i] = (ptr[i] + 1) & 0xff )) ;
+		}
+		/* Prepend sign byte if wrong sign bit */
+		if (( num.buf[num.beg] ^ neg ) & 0x80 ) {
+			num.beg--;
+			num.len++;
+			num.buf[num.beg] = neg;
+		}
 		if ( num.beg )
 			AC_MEMCPY( num.buf, num.buf+num.beg, num.len );
 		out->bv_len = num.len;
 decfail:
 		if ( tmp != tmpbuf ) {
-			ber_memfree( tmp );
+			ber_memfree_x( tmp, ctx );
 		}
 	}
 	return rc;

Modified: openldap/vendor/openldap-release/servers/slapd/Makefile.in
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/Makefile.in	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/Makefile.in	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 ## Makefile.in for slapd
-# $OpenLDAP: pkg/ldap/servers/slapd/Makefile.in,v 1.186.2.4 2007/08/31 23:13:57 quanah Exp $
+# $OpenLDAP: pkg/ldap/servers/slapd/Makefile.in,v 1.186.2.5 2007/11/20 18:54:55 quanah Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 1998-2007 The OpenLDAP Foundation.
@@ -138,7 +138,7 @@
 # for functions, but it is required for variables.
 #
 # The symdummy.c file basically references EVERY symbol available to slapd.exe,
-# including symbols that slapd.exe never actually refereneced. The file
+# including symbols that slapd.exe never actually referenced. The file
 # is compiled and included at link time. Without this object file, slapd.exe
 # would NOT export symbols that it never referenced. The reason that these
 # symbols must still be exported is because a dynamic module may want to
@@ -155,7 +155,7 @@
 # on its own very long list of dependencies.
 #
 slapd.def: libbackends.a liboverlays.a version.o
-	@for i in $(LDFLAGS) ; do \
+	@for i in XX $(LDFLAGS) ; do \
 	    path=`expr "$$i" : "-L\(.*\)"`; \
 	    if test $$? != 0; then continue; fi; \
 	    paths="$$paths $$path"; \
@@ -167,7 +167,7 @@
 		-l*) \
 		    done="" ;\
 		    base=`expr "$$i" : "-l\(.*\)"`; \
-		    for p in $$paths ; do \
+		    for p in . $$paths ; do \
 			for ext in la dll dll.a a ; do \
 			    path=$$p/lib$$base.$$ext; \
 			    test ! -f $$path && continue; \

Modified: openldap/vendor/openldap-release/servers/slapd/abandon.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/abandon.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/abandon.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* abandon.c - decode and handle an ldap abandon operation */
-/* $OpenLDAP: pkg/ldap/servers/slapd/abandon.c,v 1.52.2.2 2007/08/31 23:13:57 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/abandon.c,v 1.52.2.3 2007/11/07 20:58:38 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -98,7 +98,7 @@
 					o, Operation, o_next );
 				LDAP_STAILQ_NEXT(o, o_next) = NULL;
 				op->o_conn->c_n_ops_pending--;
-				slap_op_free( o );
+				slap_op_free( o, NULL );
 				break;
 			}
 		}

Modified: openldap/vendor/openldap-release/servers/slapd/acl.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/acl.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/acl.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* acl.c - routines to parse and check acl's */
-/* $OpenLDAP: pkg/ldap/servers/slapd/acl.c,v 1.303.2.10 2007/10/17 02:01:49 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/acl.c,v 1.303.2.11 2007/11/27 18:25:33 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -2122,7 +2122,7 @@
 		
 	} else {
 		op2.ors_filterstr = *slap_filterstr_objectClass_pres;
-		op2.ors_filter = slap_filter_objectClass_pres;
+		op2.ors_filter = (Filter *)slap_filter_objectClass_pres;
 	}
 
 

Modified: openldap/vendor/openldap-release/servers/slapd/attr.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/attr.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/attr.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* attr.c - routines for dealing with attributes */
-/* $OpenLDAP: pkg/ldap/servers/slapd/attr.c,v 1.112.2.5 2007/09/29 09:55:21 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/attr.c,v 1.112.2.6 2007/11/27 19:52:32 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -318,9 +318,8 @@
 	}
 
 	if ( a->a_flags & SLAP_ATTR_SORTED_VALS ) {
-	/* Binary search */
+		/* Binary search */
 		unsigned base = 0, n = a->a_numvals;
-		int val = 0;
 
 		while ( 0 < n ) {
 			unsigned pivot = n >> 1;

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/add.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/add.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/add.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* add.c - ldap BerkeleyDB back-end add routine */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/add.c,v 1.152.2.5 2007/08/31 23:14:01 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/add.c,v 1.152.2.6 2007/11/11 19:33:12 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -285,12 +285,13 @@
 			goto return_results;
 		}
 
-		if ( subentry ) {
-			/* FIXME: */
-			/* parent must be an administrative point of the required kind */
-		}
 	}
 
+	if ( subentry ) {
+		/* FIXME: */
+		/* parent must be an administrative point of the required kind */
+	}
+
 	/* free parent and reader lock */
 	if ( p != (Entry *)&slap_entry_root ) {
 		bdb_unlocked_cache_return_entry_r( bdb, p );

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/back-bdb.h
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/back-bdb.h	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/back-bdb.h	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* back-bdb.h - bdb back-end header file */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/back-bdb.h,v 1.141.2.5 2007/09/29 09:27:01 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/back-bdb.h,v 1.141.2.10 2007/12/06 17:29:52 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -70,13 +70,15 @@
 extern int __lock_getlocker(DB_LOCKTAB *lt, u_int32_t locker, int create, DB_LOCKER **ret);
 
 #define CURSOR_SETLOCKER(cursor, id)	cursor->locker = id
-#define	CURSOR_GETLOCKER(cursor)	cursor->locker
+#define CURSOR_GETLOCKER(cursor)	cursor->locker
+#define BDB_LOCKID(locker)	locker->id
 #else
 
 typedef u_int32_t BDB_LOCKER;
 
 #define CURSOR_SETLOCKER(cursor, id)	cursor->locker = id
 #define CURSOR_GETLOCKER(cursor)	cursor->locker
+#define BDB_LOCKID(locker)	locker
 
 #endif
 
@@ -106,7 +108,7 @@
 	 * to avoid conflicting with BDB's internal locks. So add a byte here
 	 * that is always zero.
 	 */
-	char bei_lockpad;
+	short bei_lockpad;
 
 	short bei_state;
 #define	CACHE_ENTRY_DELETED	1
@@ -117,6 +119,7 @@
 #define	CACHE_ENTRY_WALKING	0x20
 #define	CACHE_ENTRY_ONELEVEL	0x40
 #define	CACHE_ENTRY_REFERENCED	0x80
+#define	CACHE_ENTRY_NOT_CACHED	0x100
 	int bei_finders;
 
 	/*
@@ -173,10 +176,14 @@
 #define BDB_INDICES		128
 
 struct bdb_db_info {
-	char		*bdi_name;
+	struct berval	bdi_name;
 	DB			*bdi_db;
 };
 
+#ifdef LDAP_DEVEL
+#define BDB_MONITOR_IDX
+#endif /* LDAP_DEVEL */
+
 typedef struct bdb_monitor_t {
 	void		*bdm_cb;
 	struct berval	bdm_ndn;
@@ -307,8 +314,30 @@
 #define TXN_ID(txn)	(txn)->locker
 #endif
 
+/* #undef BDB_LOG_DEBUG */
+
+#ifdef BDB_LOG_DEBUG
+
+/* env->log_printf appeared in 4.4 */
+#if DB_VERSION_FULL >= 0x04040000
+#define	BDB_LOG_PRINTF(env,txn,fmt,...)	(env)->log_printf((env),(txn),(fmt),__VA_ARGS__)
+#else
+extern int __db_logmsg(const DB_ENV *env, DB_TXN *txn, const char *op, u_int32_t flags,
+	const char *fmt,...);
+#define	BDB_LOG_PRINTF(env,txn,fmt,...)	__db_logmsg((env),(txn),"DIAGNOSTIC",0,(fmt),__VA_ARGS__)
 #endif
 
+/* !BDB_LOG_DEBUG */
+#elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
+	(defined(__GNUC__) && __GNUC__ >= 3 && !defined(__STRICT_ANSI__))
+#define BDB_LOG_PRINTF(a,b,c,...)
+#else
+#define BDB_LOG_PRINTF (void)	/* will evaluate and discard the arguments */
+
+#endif /* BDB_LOG_DEBUG */
+
+#endif
+
 #ifndef DB_BUFFER_SMALL
 #define DB_BUFFER_SMALL			ENOMEM
 #endif

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/cache.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/cache.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/cache.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* cache.c - routines to maintain an in-core cache of entries */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/cache.c,v 1.120.2.4 2007/08/31 23:14:01 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/cache.c,v 1.120.2.7 2007/12/06 05:43:27 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -119,13 +119,13 @@
 bdb_cache_lru_link( struct bdb_info *bdb, EntryInfo *ei )
 {
 
+	/* Already linked, ignore */
+	if ( ei->bei_lruprev )
+		return;
+
 	/* Insert into circular LRU list */
 	ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_lru_mutex );
 
-	/* Still linked, remove */
-	if ( ei->bei_lruprev ) {
-		LRU_DEL( &bdb->bi_cache, ei );
-	}
 	ei->bei_lruprev = bdb->bi_cache.c_lrutail;
 	if ( bdb->bi_cache.c_lrutail ) {
 		ei->bei_lrunext = bdb->bi_cache.c_lrutail->bei_lrunext;
@@ -155,12 +155,6 @@
  * alternatives though.
  */
 
-#if DB_VERSION_FULL >= 0x04060012
-#define BDB_LOCKID(locker)	locker->id
-#else
-#define BDB_LOCKID(locker)	locker
-#endif
-
 /* Atomically release and reacquire a lock */
 int
 bdb_cache_entry_db_relock(
@@ -250,6 +244,28 @@
 #endif
 }
 
+void
+bdb_cache_return_entry_rw( struct bdb_info *bdb, Entry *e,
+	int rw, DB_LOCK *lock )
+{
+	EntryInfo *ei;
+	int free = 0;
+
+	bdb_cache_entry_db_unlock( bdb, lock );
+	ei = e->e_private;
+	bdb_cache_entryinfo_lock( ei );
+	if ( ei->bei_state & CACHE_ENTRY_NOT_CACHED ) {
+		ei->bei_e = NULL;
+		ei->bei_state ^= CACHE_ENTRY_NOT_CACHED;
+		free = 1;
+	}
+	bdb_cache_entryinfo_unlock( ei );
+	if ( free ) {
+		e->e_private = NULL;
+		bdb_entry_return( e );
+	}
+}
+
 static int
 bdb_cache_entryinfo_destroy( EntryInfo *e )
 {
@@ -329,6 +345,8 @@
 		ei->bei_rdn.bv_val = NULL;
 #endif
 	} else {
+		int rc;
+
 		bdb->bi_cache.c_eiused++;
 		ber_dupbv( &ei2->bei_nrdn, &ei->bei_nrdn );
 
@@ -338,8 +356,13 @@
 		 */
 		if ( ei->bei_parent->bei_kids || !ei->bei_parent->bei_id )
 			bdb->bi_cache.c_leaves++;
-		avl_insert( &ei->bei_parent->bei_kids, ei2, bdb_rdn_cmp,
+		rc = avl_insert( &ei->bei_parent->bei_kids, ei2, bdb_rdn_cmp,
 			avl_dup_error );
+		if ( rc ) {
+			/* This should never happen; entry cache is corrupt */
+			bdb->bi_dbenv->log_flush( bdb->bi_dbenv, NULL );
+			assert( !rc );
+		}
 #ifdef BDB_HIER
 		ei->bei_parent->bei_ckids++;
 #endif
@@ -358,7 +381,7 @@
 int
 bdb_cache_find_ndn(
 	Operation	*op,
-	DB_TXN		*txn,
+	BDB_LOCKER		locker,
 	struct berval	*ndn,
 	EntryInfo	**res )
 {
@@ -396,6 +419,7 @@
 		ei.bei_parent = eip;
 		ei2 = (EntryInfo *)avl_find( eip->bei_kids, &ei, bdb_rdn_cmp );
 		if ( !ei2 ) {
+			DB_LOCK lock;
 			int len = ei.bei_nrdn.bv_len;
 				
 			if ( BER_BVISEMPTY( ndn )) {
@@ -407,18 +431,27 @@
 				(ei.bei_nrdn.bv_val - ndn->bv_val);
 			bdb_cache_entryinfo_unlock( eip );
 
-			rc = bdb_dn2id( op, txn, &ei.bei_nrdn, &ei );
+			BDB_LOG_PRINTF( bdb->bi_dbenv, NULL, "slapd Reading %s",
+				ei.bei_nrdn.bv_val );
+
+			lock.mode = DB_LOCK_NG;
+			rc = bdb_dn2id( op, &ei.bei_nrdn, &ei, locker, &lock );
 			if (rc) {
 				bdb_cache_entryinfo_lock( eip );
+				bdb_cache_entry_db_unlock( bdb, &lock );
 				*res = eip;
 				return rc;
 			}
 
+			BDB_LOG_PRINTF( bdb->bi_dbenv, NULL, "slapd Read got %s(%d)",
+				ei.bei_nrdn.bv_val, ei.bei_id );
+
 			/* DN exists but needs to be added to cache */
 			ei.bei_nrdn.bv_len = len;
 			rc = bdb_entryinfo_add_internal( bdb, &ei, &ei2 );
 			/* add_internal left eip and c_rwlock locked */
 			ldap_pvt_thread_rdwr_wunlock( &bdb->bi_cache.c_rwlock );
+			bdb_cache_entry_db_unlock( bdb, &lock );
 			if ( rc ) {
 				*res = eip;
 				return rc;
@@ -462,7 +495,6 @@
 int
 hdb_cache_find_parent(
 	Operation *op,
-	DB_TXN *txn,
 	BDB_LOCKER	locker,
 	ID id,
 	EntryInfo **res )
@@ -476,7 +508,7 @@
 	ei.bei_ckids = 0;
 
 	for (;;) {
-		rc = hdb_dn2id_parent( op, txn, locker, &ei, &eip.bei_id );
+		rc = hdb_dn2id_parent( op, locker, &ei, &eip.bei_id );
 		if ( rc ) break;
 
 		/* Save the previous node, if any */
@@ -541,6 +573,7 @@
 
 		/* Got the parent, link in and we're done. */
 		if ( ei2 ) {
+			bdb_cache_entryinfo_lock( eir );
 			bdb_cache_entryinfo_lock( ei2 );
 			ein->bei_parent = ei2;
 
@@ -553,7 +586,6 @@
 				ein->bei_state &= ~CACHE_ENTRY_NOT_LINKED;
 
 			bdb_cache_entryinfo_unlock( ei2 );
-			bdb_cache_entryinfo_lock( eir );
 
 			*res = eir;
 			break;
@@ -737,7 +769,7 @@
 
 /*
  * cache_find_id - find an entry in the cache, given id.
- * The entry is locked for Read upon return. Call with islocked TRUE if
+ * The entry is locked for Read upon return. Call with flag ID_LOCKED if
  * the supplied *eip was already locked.
  */
 
@@ -747,7 +779,7 @@
 	DB_TXN	*tid,
 	ID				id,
 	EntryInfo	**eip,
-	int		islocked,
+	int		flag,
 	BDB_LOCKER	locker,
 	DB_LOCK		*lock )
 {
@@ -789,7 +821,7 @@
 				ldap_pvt_thread_yield();
 				goto again;
 			}
-			islocked = 1;
+			flag |= ID_LOCKED;
 		}
 		ldap_pvt_thread_rdwr_runlock( &bdb->bi_cache.c_rwlock );
 	}
@@ -799,9 +831,9 @@
 #ifndef BDB_HIER
 		rc = bdb_id2entry( op->o_bd, tid, locker, id, &ep );
 		if ( rc == 0 ) {
-			rc = bdb_cache_find_ndn( op, tid,
+			rc = bdb_cache_find_ndn( op, locker,
 				&ep->e_nname, eip );
-			if ( *eip ) islocked = 1;
+			if ( *eip ) flag |= ID_LOCKED;
 			if ( rc ) {
 				ep->e_private = NULL;
 #ifdef SLAP_ZONE_ALLOC
@@ -813,8 +845,8 @@
 			}
 		}
 #else
-		rc = hdb_cache_find_parent(op, tid, locker, id, eip );
-		if ( rc == 0 ) islocked = 1;
+		rc = hdb_cache_find_parent(op, locker, id, eip );
+		if ( rc == 0 ) flag |= ID_LOCKED;
 #endif
 	}
 
@@ -839,9 +871,18 @@
 				(*eip)->bei_state |= CACHE_ENTRY_LOADING;
 			}
 
-			if ( islocked ) {
+			/* If the entry was loaded before but uncached, and we need
+			 * it again, clear the uncached state
+			 */
+			if ( (*eip)->bei_state & CACHE_ENTRY_NOT_CACHED ) {
+				(*eip)->bei_state ^= CACHE_ENTRY_NOT_CACHED;
+				if ( flag & ID_NOCACHE )
+					flag ^= ID_NOCACHE;
+			}
+
+			if ( flag & ID_LOCKED ) {
 				bdb_cache_entryinfo_unlock( *eip );
-				islocked = 0;
+				flag ^= ID_LOCKED;
 			}
 			rc = bdb_cache_entry_db_lock( bdb, locker, *eip, load, 0, lock );
 			if ( (*eip)->bei_state & CACHE_ENTRY_DELETED ) {
@@ -863,6 +904,11 @@
 #endif
 						ep = NULL;
 						bdb_cache_lru_link( bdb, *eip );
+						if ( flag & ID_NOCACHE ) {
+							bdb_cache_entryinfo_lock( *eip );
+							(*eip)->bei_state |= CACHE_ENTRY_NOT_CACHED;
+							bdb_cache_entryinfo_unlock( *eip );
+						}
 					}
 					if ( rc == 0 ) {
 						/* If we succeeded, downgrade back to a readlock. */
@@ -878,7 +924,7 @@
 					 */
 					bdb_cache_entry_db_unlock( bdb, lock );
 					bdb_cache_entryinfo_lock( *eip );
-					islocked = 1;
+					flag |= ID_LOCKED;
 					goto load1;
 #ifdef BDB_HIER
 				} else {
@@ -904,7 +950,7 @@
 			}
 		}
 	}
-	if ( islocked ) {
+	if ( flag & ID_LOCKED ) {
 		bdb_cache_entryinfo_unlock( *eip );
 	}
 	if ( ep ) {
@@ -919,14 +965,16 @@
 		int purge = 0;
 
 		if ( load ) {
-			ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_count_mutex );
-			bdb->bi_cache.c_cursize++;
-			if ( bdb->bi_cache.c_cursize > bdb->bi_cache.c_maxsize &&
-				!bdb->bi_cache.c_purging ) {
-				purge = 1;
-				bdb->bi_cache.c_purging = 1;
+			if ( !( flag & ID_NOCACHE )) {
+				ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_count_mutex );
+				bdb->bi_cache.c_cursize++;
+				if ( bdb->bi_cache.c_cursize > bdb->bi_cache.c_maxsize &&
+					!bdb->bi_cache.c_purging ) {
+					purge = 1;
+					bdb->bi_cache.c_purging = 1;
+				}
+				ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.c_count_mutex );
 			}
-			ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.c_count_mutex );
 		}
 		if ( purge )
 			bdb_cache_lru_purge( bdb );
@@ -1110,9 +1158,6 @@
 	free( ei->bei_nrdn.bv_val );
 	ber_dupbv( &ei->bei_nrdn, nrdn );
 
-	if ( !pei->bei_kids )
-		pei->bei_state |= CACHE_ENTRY_NO_KIDS | CACHE_ENTRY_NO_GRANDKIDS;
-
 #ifdef BDB_HIER
 	free( ei->bei_rdn.bv_val );
 
@@ -1123,8 +1168,16 @@
 		rdn.bv_len = ptr - rdn.bv_val;
 	}
 	ber_dupbv( &ei->bei_rdn, &rdn );
-	pei->bei_ckids--;
-	if ( pei->bei_dkids ) pei->bei_dkids--;
+
+	/* If new parent, decrement kid counts */
+	if ( ein ) {
+		pei->bei_ckids--;
+		if ( pei->bei_dkids ) {
+			pei->bei_dkids--;
+			if ( pei->bei_dkids < 2 )
+				pei->bei_state |= CACHE_ENTRY_NO_KIDS | CACHE_ENTRY_NO_GRANDKIDS;
+		}
+	}
 #endif
 
 	if (!ein) {
@@ -1133,27 +1186,32 @@
 		ei->bei_parent = ein;
 		bdb_cache_entryinfo_unlock( pei );
 		bdb_cache_entryinfo_lock( ein );
-	}
-	/* parent now has kids */
-	if ( ein->bei_state & CACHE_ENTRY_NO_KIDS )
-		ein->bei_state ^= CACHE_ENTRY_NO_KIDS;
 
+		/* new parent now has kids */
+		if ( ein->bei_state & CACHE_ENTRY_NO_KIDS )
+			ein->bei_state ^= CACHE_ENTRY_NO_KIDS;
+		/* grandparent has grandkids */
+		if ( ein->bei_parent )
+			ein->bei_parent->bei_state &= ~CACHE_ENTRY_NO_GRANDKIDS;
 #ifdef BDB_HIER
-	/* parent might now have grandkids */
-	if ( ein->bei_state & CACHE_ENTRY_NO_GRANDKIDS &&
-		!(ei->bei_state & (CACHE_ENTRY_NO_KIDS)))
-		ein->bei_state ^= CACHE_ENTRY_NO_GRANDKIDS;
+		/* parent might now have grandkids */
+		if ( ein->bei_state & CACHE_ENTRY_NO_GRANDKIDS &&
+			!(ei->bei_state & CACHE_ENTRY_NO_KIDS))
+			ein->bei_state ^= CACHE_ENTRY_NO_GRANDKIDS;
 
-	{
-		/* Record the generation number of this change */
-		ldap_pvt_thread_mutex_lock( &bdb->bi_modrdns_mutex );
-		bdb->bi_modrdns++;
-		ei->bei_modrdns = bdb->bi_modrdns;
-		ldap_pvt_thread_mutex_unlock( &bdb->bi_modrdns_mutex );
+		ein->bei_ckids++;
+		if ( ein->bei_dkids ) ein->bei_dkids++;
+#endif
 	}
-	ein->bei_ckids++;
-	if ( ein->bei_dkids ) ein->bei_dkids++;
+
+#ifdef BDB_HIER
+	/* Record the generation number of this change */
+	ldap_pvt_thread_mutex_lock( &bdb->bi_modrdns_mutex );
+	bdb->bi_modrdns++;
+	ei->bei_modrdns = bdb->bi_modrdns;
+	ldap_pvt_thread_mutex_unlock( &bdb->bi_modrdns_mutex );
 #endif
+
 	avl_insert( &ein->bei_kids, ei, bdb_rdn_cmp, avl_dup_error );
 	bdb_cache_entryinfo_unlock( ein );
 	return rc;

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/dbcache.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/dbcache.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/dbcache.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* dbcache.c - manage cache of open databases */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dbcache.c,v 1.43.2.2 2007/08/31 23:14:01 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dbcache.c,v 1.43.2.4 2007/11/26 04:08:37 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -60,7 +60,7 @@
 int
 bdb_db_cache(
 	Backend	*be,
-	const char *name,
+	struct berval *name,
 	DB **dbout )
 {
 	int i, flags;
@@ -72,7 +72,7 @@
 	*dbout = NULL;
 
 	for( i=BDB_NDB; i < bdb->bi_ndatabases; i++ ) {
-		if( !strcmp( bdb->bi_databases[i]->bdi_name, name) ) {
+		if( !ber_bvcmp( &bdb->bi_databases[i]->bdi_name, name) ) {
 			*dbout = bdb->bi_databases[i]->bdi_db;
 			return 0;
 		}
@@ -82,7 +82,7 @@
 
 	/* check again! may have been added by another thread */
 	for( i=BDB_NDB; i < bdb->bi_ndatabases; i++ ) {
-		if( !strcmp( bdb->bi_databases[i]->bdi_name, name) ) {
+		if( !ber_bvcmp( &bdb->bi_databases[i]->bdi_name, name) ) {
 			*dbout = bdb->bi_databases[i]->bdi_db;
 			ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex );
 			return 0;
@@ -96,7 +96,7 @@
 
 	db = (struct bdb_db_info *) ch_calloc(1, sizeof(struct bdb_db_info));
 
-	db->bdi_name = ch_strdup( name );
+	ber_dupbv( &db->bdi_name, name );
 
 	rc = db_create( &db->bdi_db, bdb->bi_dbenv, 0 );
 	if( rc != 0 ) {
@@ -113,8 +113,9 @@
 #endif
 	rc = db->bdi_db->set_flags( db->bdi_db, DB_DUP | DB_DUPSORT );
 
-	file = ch_malloc( strlen( name ) + sizeof(BDB_SUFFIX) );
-	sprintf( file, "%s%s", name, BDB_SUFFIX );
+	file = ch_malloc( db->bdi_name.bv_len + sizeof(BDB_SUFFIX) );
+	strcpy( file, db->bdi_name.bv_val );
+	strcpy( file+db->bdi_name.bv_len, BDB_SUFFIX );
 
 #ifdef HAVE_EBCDIC
 	__atoe( file );
@@ -138,7 +139,7 @@
 	if( rc != 0 ) {
 		Debug( LDAP_DEBUG_ANY,
 			"bdb_db_cache: db_open(%s) failed: %s (%d)\n",
-			name, db_strerror(rc), rc );
+			name->bv_val, db_strerror(rc), rc );
 		ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex );
 		return rc;
 	}

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/delete.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/delete.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/delete.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* delete.c - bdb backend delete routine */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/delete.c,v 1.155.2.4 2007/08/31 23:14:01 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/delete.c,v 1.155.2.5 2007/12/06 05:43:27 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -372,6 +372,9 @@
 		goto return_results;
 	}
 
+	BDB_LOG_PRINTF( bdb->bi_dbenv, lt2, "slapd Starting delete %s(%d)",
+		e->e_nname.bv_val, e->e_id );
+
 	/* Can't do it if we have kids */
 	rs->sr_err = bdb_cache_children( op, lt2, e );
 	if( rs->sr_err != DB_NOTFOUND ) {
@@ -492,6 +495,9 @@
 		p = NULL;
 	}
 
+	BDB_LOG_PRINTF( bdb->bi_dbenv, lt2, "slapd Commit1 delete %s(%d)",
+		e->e_nname.bv_val, e->e_id );
+
 	if ( TXN_COMMIT( lt2, 0 ) != 0 ) {
 		rs->sr_err = LDAP_OTHER;
 		rs->sr_text = "txn_commit(2) failed";
@@ -517,6 +523,10 @@
 			goto return_results;
 		}
 	} else {
+
+		BDB_LOG_PRINTF( bdb->bi_dbenv, ltid, "slapd Cache delete %s(%d)",
+			e->e_nname.bv_val, e->e_id );
+
 		rc = bdb_cache_delete( bdb, e, locker, &lock );
 		switch( rc ) {
 		case DB_LOCK_DEADLOCK:
@@ -529,6 +539,9 @@
 	ltid = NULL;
 	op->o_private = NULL;
 
+	BDB_LOG_PRINTF( bdb->bi_dbenv, NULL, "slapd Committed delete %s(%d)",
+		e->e_nname.bv_val, e->e_id );
+
 	if( rs->sr_err != 0 ) {
 		Debug( LDAP_DEBUG_TRACE,
 			LDAP_XSTRING(bdb_delete) ": txn_%s failed: %s (%d)\n",

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/dn2entry.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/dn2entry.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/dn2entry.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* dn2entry.c - routines to deal with the dn2id / id2entry glue */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dn2entry.c,v 1.28.2.3 2007/08/31 23:14:01 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dn2entry.c,v 1.28.2.6 2007/12/06 05:43:27 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -45,7 +45,7 @@
 
 	*e = NULL;
 
-	rc = bdb_cache_find_ndn( op, tid, dn, &ei );
+	rc = bdb_cache_find_ndn( op, locker, dn, &ei );
 	if ( rc ) {
 		if ( matched && rc == DB_NOTFOUND ) {
 			/* Set the return value, whether we have its entry
@@ -54,7 +54,7 @@
 			*e = ei;
 			if ( ei && ei->bei_id ) {
 				rc2 = bdb_cache_find_id( op, tid, ei->bei_id,
-					&ei, 1, locker, lock );
+					&ei, ID_LOCKED, locker, lock );
 				if ( rc2 ) rc = rc2;
 			} else if ( ei ) {
 				bdb_cache_entryinfo_unlock( ei );
@@ -65,7 +65,7 @@
 			bdb_cache_entryinfo_unlock( ei );
 		}
 	} else {
-		rc = bdb_cache_find_id( op, tid, ei->bei_id, &ei, 1,
+		rc = bdb_cache_find_id( op, tid, ei->bei_id, &ei, ID_LOCKED,
 			locker, lock );
 		if ( rc == 0 ) {
 			*e = ei;
@@ -73,7 +73,7 @@
 			/* always return EntryInfo */
 			if ( ei->bei_parent ) {
 				ei = ei->bei_parent;
-				rc2 = bdb_cache_find_id( op, tid, ei->bei_id, &ei, 1,
+				rc2 = bdb_cache_find_id( op, tid, ei->bei_id, &ei, 0,
 					locker, lock );
 				if ( rc2 ) rc = rc2;
 			}

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/dn2id.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/dn2id.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/dn2id.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* dn2id.c - routines to deal with the dn2id index */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dn2id.c,v 1.137.2.2 2007/08/31 23:14:01 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dn2id.c,v 1.137.2.6 2007/12/13 07:05:24 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -23,6 +23,32 @@
 #include "idl.h"
 #include "lutil.h"
 
+#define bdb_dn2id_lock					BDB_SYMBOL(dn2id_lock)
+
+static int
+bdb_dn2id_lock( struct bdb_info *bdb, struct berval *dn,
+	int rw, BDB_LOCKER locker, DB_LOCK *lock )
+{
+	int       rc;
+	DBT       lockobj;
+	int       db_rw;
+
+	if (!locker)
+		return 0;
+
+	if (rw)
+		db_rw = DB_LOCK_WRITE;
+	else
+		db_rw = DB_LOCK_READ;
+
+	lockobj.data = dn->bv_val;
+	lockobj.size = dn->bv_len;
+
+	rc = LOCK_GET(bdb->bi_dbenv, BDB_LOCKID(locker), DB_LOCK_NOWAIT,
+					&lockobj, db_rw, lock);
+	return rc;
+}
+
 #ifndef BDB_HIER
 int
 bdb_dn2id_add(
@@ -39,8 +65,8 @@
 	char		*buf;
 	struct berval	ptr, pdn;
 
-	Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_add( \"%s\", 0x%08lx )\n",
-		e->e_ndn, (long) e->e_id, 0 );
+	Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_add 0x%lx: \"%s\"\n",
+		e->e_id, e->e_ndn, 0 );
 	assert( e->e_id != NOID );
 
 	DBTzero( &key );
@@ -63,8 +89,8 @@
 	/* store it -- don't override */
 	rc = db->put( db, txn, &key, &data, DB_NOOVERWRITE );
 	if( rc != 0 ) {
-		Debug( LDAP_DEBUG_ANY, "=> bdb_dn2id_add: put failed: %s %d\n",
-			db_strerror(rc), rc, 0 );
+		Debug( LDAP_DEBUG_ANY, "=> bdb_dn2id_add 0x%lx: put failed: %s %d\n",
+			e->e_id, db_strerror(rc), rc );
 		goto done;
 	}
 
@@ -76,8 +102,8 @@
 		rc = db->put( db, txn, &key, &data, DB_NOOVERWRITE );
 		if( rc != 0 ) {
 			Debug( LDAP_DEBUG_ANY,
-			"=> bdb_dn2id_add: subtree (%s) put failed: %d\n",
-			ptr.bv_val, rc, 0 );
+			"=> bdb_dn2id_add 0x%lx: subtree (%s) put failed: %d\n",
+			e->e_id, ptr.bv_val, rc );
 			goto done;
 		}
 		
@@ -97,8 +123,8 @@
 
 		if( rc != 0 ) {
 			Debug( LDAP_DEBUG_ANY,
-				"=> bdb_dn2id_add: parent (%s) insert failed: %d\n",
-					ptr.bv_val, rc, 0 );
+				"=> bdb_dn2id_add 0x%lx: parent (%s) insert failed: %d\n",
+					e->e_id, ptr.bv_val, rc );
 			goto done;
 		}
 	}
@@ -115,8 +141,8 @@
 
 		if( rc != 0 ) {
 			Debug( LDAP_DEBUG_ANY,
-				"=> bdb_dn2id_add: subtree (%s) insert failed: %d\n",
-					ptr.bv_val, rc, 0 );
+				"=> bdb_dn2id_add 0x%lx: subtree (%s) insert failed: %d\n",
+					e->e_id, ptr.bv_val, rc );
 			break;
 		}
 #ifdef BDB_MULTIPLE_SUFFIXES
@@ -133,7 +159,7 @@
 
 done:
 	op->o_tmpfree( buf, op->o_tmpmemctx );
-	Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id_add: %d\n", rc, 0, 0 );
+	Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id_add 0x%lx: %d\n", e->e_id, rc, 0 );
 	return rc;
 }
 
@@ -146,13 +172,14 @@
 {
 	struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
 	DB *db = bdb->bi_dn2id->bdi_db;
-	int		rc;
+	char		*buf;
 	DBT		key;
-	char		*buf;
+	DB_LOCK	lock;
 	struct berval	pdn, ptr;
+	int		rc;
 
-	Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_delete( \"%s\", 0x%08lx )\n",
-		e->e_ndn, e->e_id, 0 );
+	Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_delete 0x%lx: \"%s\"\n",
+		e->e_id, e->e_ndn, 0 );
 
 	DBTzero( &key );
 	key.size = e->e_nname.bv_len + 2;
@@ -165,11 +192,15 @@
 	AC_MEMCPY( ptr.bv_val, e->e_nname.bv_val, e->e_nname.bv_len );
 	ptr.bv_val[ptr.bv_len] = '\0';
 
+	/* We hold this lock until the TXN completes */
+	rc = bdb_dn2id_lock( bdb, &e->e_nname, 1, TXN_ID( txn ), &lock );
+	if ( rc ) goto done;
+
 	/* delete it */
 	rc = db->del( db, txn, &key, 0 );
 	if( rc != 0 ) {
-		Debug( LDAP_DEBUG_ANY, "=> bdb_dn2id_delete: delete failed: %s %d\n",
-			db_strerror(rc), rc, 0 );
+		Debug( LDAP_DEBUG_ANY, "=> bdb_dn2id_delete 0x%lx: delete failed: %s %d\n",
+			e->e_id, db_strerror(rc), rc );
 		goto done;
 	}
 
@@ -181,8 +212,8 @@
 		rc = bdb_idl_delete_key( op->o_bd, db, txn, &key, e->e_id );
 		if( rc != 0 ) {
 			Debug( LDAP_DEBUG_ANY,
-			"=> bdb_dn2id_delete: subtree (%s) delete failed: %d\n",
-			ptr.bv_val, rc, 0 );
+			"=> bdb_dn2id_delete 0x%lx: subtree (%s) delete failed: %d\n",
+			e->e_id, ptr.bv_val, rc );
 			goto done;
 		}
 
@@ -202,8 +233,8 @@
 
 		if( rc != 0 ) {
 			Debug( LDAP_DEBUG_ANY,
-				"=> bdb_dn2id_delete: parent (%s) delete failed: %d\n",
-				ptr.bv_val, rc, 0 );
+				"=> bdb_dn2id_delete 0x%lx: parent (%s) delete failed: %d\n",
+				e->e_id, ptr.bv_val, rc );
 			goto done;
 		}
 	}
@@ -219,8 +250,8 @@
 		rc = bdb_idl_delete_key( op->o_bd, db, txn, &key, e->e_id );
 		if( rc != 0 ) {
 			Debug( LDAP_DEBUG_ANY,
-				"=> bdb_dn2id_delete: subtree (%s) delete failed: %d\n",
-				ptr.bv_val, rc, 0 );
+				"=> bdb_dn2id_delete 0x%lx: subtree (%s) delete failed: %d\n",
+				e->e_id, ptr.bv_val, rc );
 			goto done;
 		}
 #ifdef BDB_MULTIPLE_SUFFIXES
@@ -237,24 +268,27 @@
 
 done:
 	op->o_tmpfree( buf, op->o_tmpmemctx );
-	Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id_delete %d\n", rc, 0, 0 );
+	Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id_delete 0x%lx: %d\n", e->e_id, rc, 0 );
 	return rc;
 }
 
 int
 bdb_dn2id(
 	Operation *op,
-	DB_TXN *txn,
 	struct berval	*dn,
-	EntryInfo *ei )
+	EntryInfo *ei,
+	BDB_LOCKER locker,
+	DB_LOCK *lock )
 {
 	struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
 	DB *db = bdb->bi_dn2id->bdi_db;
+	DBC	*cursor;
 	int		rc;
 	DBT		key, data;
 	ID		nid;
 
 	Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id(\"%s\")\n", dn->bv_val, 0, 0 );
+
 	DBTzero( &key );
 	key.size = dn->bv_len + 2;
 	key.data = op->o_tmpalloc( key.size, op->o_tmpmemctx );
@@ -267,18 +301,31 @@
 	data.ulen = sizeof(ID);
 	data.flags = DB_DBT_USERMEM;
 
+	rc = db->cursor( db, NULL, &cursor, bdb->bi_db_opflags );
+	if ( rc ) goto leave;
+
+	rc = bdb_dn2id_lock( bdb, dn, 0, locker, lock );
+	if ( rc ) goto nolock;
+
+	if ( locker ) {
+		CURSOR_SETLOCKER(cursor, locker);
+	}
+
 	/* fetch it */
-	rc = db->get( db, txn, &key, &data, bdb->bi_db_opflags );
+	rc = cursor->c_get( cursor, &key, &data, DB_SET );
 
+nolock:
+	cursor->c_close( cursor );
+leave:
+
 	if( rc != 0 ) {
 		Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: get failed: %s (%d)\n",
 			db_strerror( rc ), rc, 0 );
 	} else {
 		BDB_DISK2ID( &nid, &ei->bei_id );
-		Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: got id=0x%08lx\n",
+		Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: got id=0x%lx\n",
 			ei->bei_id, 0, 0 );
 	}
-
 	op->o_tmpfree( key.data, op->o_tmpmemctx );
 	return rc;
 }
@@ -407,6 +454,31 @@
 	unsigned char entryID[sizeof(ID)];  /* variable placement */
 } diskNode;
 
+/* Sort function for the sorted duplicate data items of a dn2id key.
+ * Sorts based on normalized RDN, in length order.
+ */
+int
+hdb_dup_compare(
+	DB *db, 
+	const DBT *usrkey,
+	const DBT *curkey
+)
+{
+	diskNode *un, *cn;
+	int rc, ul, cl;
+
+	un = (diskNode *)usrkey->data;
+	cn = (diskNode *)curkey->data;
+
+	/* data is not aligned, cannot compare directly */
+	rc = un->nrdnlen[0] - cn->nrdnlen[0];
+	if ( rc ) return rc;
+	rc = un->nrdnlen[1] - cn->nrdnlen[1];
+	if ( rc ) return rc;
+
+	return strcmp( un->nrdn, cn->nrdn );
+}
+
 /* This function constructs a full DN for a given entry.
  */
 int hdb_fix_dn(
@@ -482,6 +554,9 @@
 	diskNode *d;
 	char *ptr;
 
+	Debug( LDAP_DEBUG_TRACE, "=> hdb_dn2id_add 0x%lx: \"%s\"\n",
+		e->e_id, e->e_ndn, 0 );
+
 	nrlen = dn_rdnlen( op->o_bd, &e->e_nname );
 	if (nrlen) {
 		rlen = dn_rdnlen( op->o_bd, &e->e_name );
@@ -548,7 +623,10 @@
 			bdb_idl_cache_add_id( bdb, db, &key, e->e_id );
 		}
 	}
+
+leave:
 	op->o_tmpfree( d, op->o_tmpmemctx );
+	Debug( LDAP_DEBUG_TRACE, "<= hdb_dn2id_add 0x%lx: %d\n", e->e_id, rc, 0 );
 
 	return rc;
 }
@@ -568,7 +646,11 @@
 	int rc;
 	ID	nid;
 	unsigned char dlen[2];
+	DB_LOCK	lock;
 
+	Debug( LDAP_DEBUG_TRACE, "=> hdb_dn2id_delete 0x%lx: \"%s\"\n",
+		e->e_id, e->e_ndn, 0 );
+
 	DBTzero(&key);
 	key.size = sizeof(ID);
 	key.ulen = key.size;
@@ -582,8 +664,6 @@
 	data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL;
 
 	key.data = &nid;
-	rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags );
-	if ( rc ) return rc;
 
 	d = op->o_tmpalloc( data.size, op->o_tmpmemctx );
 	d->nrdnlen[1] = BEI(e)->bei_nrdn.bv_len & 0xff;
@@ -593,6 +673,13 @@
 	strcpy( d->nrdn, BEI(e)->bei_nrdn.bv_val );
 	data.data = d;
 
+	rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags );
+	if ( rc ) goto leave;
+
+	/* We hold this lock until the TXN completes */
+	rc = bdb_dn2id_lock( bdb, &e->e_nname, 1, TXN_ID( txn ), &lock );
+	if ( rc ) goto nolock;
+
 	/* Delete our ID from the parent's list */
 	rc = cursor->c_get( cursor, &key, &data, DB_GET_BOTH_RANGE );
 	if ( rc == 0 ) {
@@ -613,7 +700,10 @@
 		if ( rc == 0 )
 			rc = cursor->c_del( cursor, 0 );
 	}
+
+nolock:
 	cursor->c_close( cursor );
+leave:
 	op->o_tmpfree( d, op->o_tmpmemctx );
 
 	/* Delete IDL cache entries */
@@ -631,6 +721,7 @@
 			bdb_idl_cache_del_id( bdb, db, &key, e->e_id );
 		}
 	}
+	Debug( LDAP_DEBUG_TRACE, "<= hdb_dn2id_delete 0x%lx: %d\n", e->e_id, rc, 0 );
 	return rc;
 }
 
@@ -638,9 +729,10 @@
 int
 hdb_dn2id(
 	Operation	*op,
-	DB_TXN *txn,
 	struct berval	*in,
-	EntryInfo	*ei )
+	EntryInfo	*ei,
+	BDB_LOCKER locker,
+	DB_LOCK *lock )
 {
 	struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
 	DB *db = bdb->bi_dn2id->bdi_db;
@@ -652,6 +744,8 @@
 	unsigned char dlen[2];
 	ID idp, parentID;
 
+	Debug( LDAP_DEBUG_TRACE, "=> hdb_dn2id(\"%s\")\n", in->bv_val, 0, 0 );
+
 	nrlen = dn_rdnlen( op->o_bd, in );
 	if (!nrlen) nrlen = in->bv_len;
 
@@ -669,8 +763,11 @@
 	data.dlen = data.ulen;
 	data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL;
 
-	rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags );
+	rc = db->cursor( db, NULL, &cursor, bdb->bi_db_opflags );
 	if ( rc ) return rc;
+	if ( locker ) {
+		CURSOR_SETLOCKER( cursor, locker );
+	}
 
 	d = op->o_tmpalloc( data.size * 3, op->o_tmpmemctx );
 	d->nrdnlen[1] = nrlen & 0xff;
@@ -681,6 +778,9 @@
 	*ptr = '\0';
 	data.data = d;
 
+	rc = bdb_dn2id_lock( bdb, in, 0, locker, lock );
+	if ( rc ) goto leave;
+
 	rc = cursor->c_get( cursor, &key, &data, DB_GET_BOTH_RANGE );
 	if ( rc == 0 && (dlen[1] != d->nrdnlen[1] || dlen[0] != d->nrdnlen[0] ||
 		strncmp( d->nrdn, in->bv_val, nrlen ))) {
@@ -702,8 +802,17 @@
 			ei->bei_parent->bei_dkids = dkids;
 		}
 	}
+
+leave:
 	cursor->c_close( cursor );
 	op->o_tmpfree( d, op->o_tmpmemctx );
+	if( rc != 0 ) {
+		Debug( LDAP_DEBUG_TRACE, "<= hdb_dn2id: get failed: %s (%d)\n",
+			db_strerror( rc ), rc, 0 );
+	} else {
+		Debug( LDAP_DEBUG_TRACE, "<= hdb_dn2id: got id=0x%lx\n",
+			ei->bei_id, 0, 0 );
+	}
 
 	return rc;
 }
@@ -711,7 +820,6 @@
 int
 hdb_dn2id_parent(
 	Operation *op,
-	DB_TXN *txn,
 	BDB_LOCKER	locker,
 	EntryInfo *ei,
 	ID *idp )
@@ -735,9 +843,9 @@
 	DBTzero(&data);
 	data.flags = DB_DBT_USERMEM;
 
-	rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags );
+	rc = db->cursor( db, NULL, &cursor, bdb->bi_db_opflags );
 	if ( rc ) return rc;
-	if ( !txn && locker ) {
+	if ( locker ) {
 		CURSOR_SETLOCKER(cursor, locker);
 	}
 

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/filterindex.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/filterindex.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/filterindex.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* filterindex.c - generate the list of candidate entries from a filter */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/filterindex.c,v 1.64.2.3 2007/10/16 22:47:55 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/filterindex.c,v 1.64.2.4 2007/12/06 05:43:27 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -504,7 +504,7 @@
 		BDB_IDL_ZERO( ids );
 		if ( mra->ma_rule == slap_schema.si_mr_distinguishedNameMatch ) {
 			ei = NULL;
-			rc = bdb_cache_find_ndn( op, NULL, &mra->ma_value, &ei );
+			rc = bdb_cache_find_ndn( op, locker, &mra->ma_value, &ei );
 			if ( rc == LDAP_SUCCESS )
 				bdb_idl_insert( ids, ei->bei_id );
 			if ( ei )
@@ -518,7 +518,7 @@
 				struct berval pdn;
 				ei = NULL;
 				dnParent( &mra->ma_value, &pdn );
-				bdb_cache_find_ndn( op, NULL, &pdn, &ei );
+				bdb_cache_find_ndn( op, locker, &pdn, &ei );
 				if ( ei ) {
 					bdb_cache_entryinfo_unlock( ei );
 					while ( ei && ei->bei_id ) {
@@ -538,7 +538,7 @@
 				scope = LDAP_SCOPE_BASE;
 			if ( scope > LDAP_SCOPE_BASE ) {
 				ei = NULL;
-				rc = bdb_cache_find_ndn( op, NULL, &mra->ma_value, &ei );
+				rc = bdb_cache_find_ndn( op, locker, &mra->ma_value, &ei );
 				if ( ei )
 					bdb_cache_entryinfo_unlock( ei );
 				if ( rc == LDAP_SUCCESS ) {

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/index.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/index.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/index.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* index.c - routines for dealing with attribute indexes */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/index.c,v 1.61.2.2 2007/08/31 23:14:01 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/index.c,v 1.61.2.4 2007/12/01 18:10:47 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -25,10 +25,10 @@
 #include "back-bdb.h"
 #include "lutil_hash.h"
 
-static char presence_keyval[LUTIL_HASH_BYTES] = {0,0,0,1};
-static struct berval presence_key = {LUTIL_HASH_BYTES, presence_keyval};
+static char presence_keyval[] = {0,0};
+static struct berval presence_key = BER_BVC(presence_keyval);
 
-static AttrInfo *index_mask(
+AttrInfo *bdb_index_mask(
 	Backend *be,
 	AttributeDescription *desc,
 	struct berval *atname )
@@ -70,21 +70,6 @@
 	return 0;
 }
 
-int bdb_index_is_indexed(
-	Backend *be,
-	AttributeDescription *desc )
-{
-	AttrInfo *ai;
-	struct berval prefix;
-
-	ai = index_mask( be, desc, &prefix );
-
-	if( !ai )
-		return LDAP_INAPPROPRIATE_MATCHING;
-
-	return LDAP_SUCCESS;
-}
-
 /* This function is only called when evaluating search filters.
  */
 int bdb_index_param(
@@ -100,7 +85,7 @@
 	slap_mask_t mask, type = 0;
 	DB *db;
 
-	ai = index_mask( be, desc, prefixp );
+	ai = bdb_index_mask( be, desc, prefixp );
 
 	if ( !ai ) {
 #ifdef BDB_MONITOR_IDX
@@ -127,7 +112,7 @@
 	}
 	mask = ai->ai_indexmask;
 
-	rc = bdb_db_cache( be, prefixp->bv_val, &db );
+	rc = bdb_db_cache( be, prefixp, &db );
 
 	if( rc != LDAP_SUCCESS ) {
 		return rc;
@@ -200,7 +185,7 @@
 
 	assert( mask != 0 );
 
-	rc = bdb_db_cache( op->o_bd, atname->bv_val, &db );
+	rc = bdb_db_cache( op->o_bd, atname, &db );
 	
 	if ( rc != LDAP_SUCCESS ) {
 		Debug( LDAP_DEBUG_ANY,

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/init.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/init.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/init.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* init.c - initialize bdb backend */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/init.c,v 1.247.2.5 2007/09/26 15:46:37 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/init.c,v 1.247.2.8 2007/12/06 15:13:57 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -30,13 +30,13 @@
 
 static const struct bdbi_database {
 	char *file;
-	char *name;
+	struct berval name;
 	int type;
 	int flags;
 } bdbi_databases[] = {
-	{ "id2entry" BDB_SUFFIX, "id2entry", DB_BTREE, 0 },
-	{ "dn2id" BDB_SUFFIX, "dn2id", DB_BTREE, 0 },
-	{ NULL, NULL, 0, 0 }
+	{ "id2entry" BDB_SUFFIX, BER_BVC("id2entry"), DB_BTREE, 0 },
+	{ "dn2id" BDB_SUFFIX, BER_BVC("dn2id"), DB_BTREE, 0 },
+	{ NULL, BER_BVNULL, 0, 0 }
 };
 
 typedef void * db_malloc(size_t);
@@ -87,6 +87,10 @@
 	be->be_private = bdb;
 	be->be_cf_ocs = be->bd_info->bi_cf_ocs;
 
+#ifndef BDB_MULTIPLE_SUFFIXES
+	SLAP_DBFLAGS( be ) |= SLAP_DBFLAG_ONE_SUFFIX;
+#endif
+
 	rc = bdb_monitor_db_init( be );
 
 	return rc;
@@ -119,19 +123,6 @@
 		LDAP_XSTRING(bdb_db_open) ": \"%s\"\n",
 		be->be_suffix[0].bv_val, 0, 0 );
 
-#ifndef BDB_MULTIPLE_SUFFIXES
-	if ( be->be_suffix[1].bv_val ) {
-		if (cr) {
-			snprintf(cr->msg, sizeof(cr->msg),
-				"database \"%s\": only one suffix allowed.",
-				be->be_suffix[0].bv_val);
-			Debug( LDAP_DEBUG_ANY,
-				LDAP_XSTRING(bdb_db_open) ": %s\n", cr->msg, 0, 0 );
-		}
-		return -1;
-	}
-#endif
-
 	/* Check existence of dbenv_home. Any error means trouble */
 	rc = stat( bdb->bi_dbenv_home, &stat1 );
 	if( rc != 0 ) {
@@ -382,7 +373,7 @@
 		BDB_INDICES * sizeof(struct bdb_db_info *) );
 
 	/* open (and create) main database */
-	for( i = 0; bdbi_databases[i].name; i++ ) {
+	for( i = 0; bdbi_databases[i].name.bv_val; i++ ) {
 		struct bdb_db_info *db;
 
 		db = (struct bdb_db_info *) ch_calloc(1, sizeof(struct bdb_db_info));
@@ -421,6 +412,8 @@
 				flags |= DB_CREATE;
 			}
 #else
+			rc = db->bdi_db->set_dup_compare( db->bdi_db,
+				bdb_dup_compare );
 			if ( slapMode & (SLAP_TOOL_READONLY|SLAP_TOOL_READMAIN) ) {
 				flags |= DB_RDONLY;
 			} else {
@@ -555,7 +548,7 @@
 		rc = db->bdi_db->close( db->bdi_db, 0 );
 		/* Lower numbered names are not strdup'd */
 		if( bdb->bi_ndatabases >= BDB_NDB )
-			free( db->bdi_name );
+			free( db->bdi_name.bv_val );
 		free( db );
 	}
 	free( bdb->bi_databases );

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/modify.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/modify.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/modify.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* modify.c - bdb backend modify routine */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/modify.c,v 1.156.2.4 2007/08/31 23:14:01 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/modify.c,v 1.156.2.6 2007/12/10 17:54:46 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -42,6 +42,8 @@
 	Attribute	*save_attrs;
 	Attribute 	*ap;
 	int			glue_attr_delete = 0;
+	int			got_delete;
+	AttrInfo *ai;
 
 	Debug( LDAP_DEBUG_TRACE, "bdb_modify_internal: 0x%08lx: %s\n",
 		e->e_id, e->e_dn, 0);
@@ -87,7 +89,9 @@
 	}
 
 	for ( ml = modlist; ml != NULL; ml = ml->sml_next ) {
+		struct berval ix_at;
 		mod = &ml->sml_mod;
+		got_delete = 0;
 
 		switch ( mod->sm_op ) {
 		case LDAP_MOD_ADD:
@@ -117,6 +121,8 @@
 			if( err != LDAP_SUCCESS ) {
 				Debug(LDAP_DEBUG_ARGS, "bdb_modify_internal: %d %s\n",
 					err, *text, 0);
+			} else {
+				got_delete = 1;
 			}
 			break;
 
@@ -129,6 +135,8 @@
 			if( err != LDAP_SUCCESS ) {
 				Debug(LDAP_DEBUG_ARGS, "bdb_modify_internal: %d %s\n",
 					err, *text, 0);
+			} else {
+				got_delete = 1;
 			}
 			break;
 
@@ -142,6 +150,8 @@
 				Debug(LDAP_DEBUG_ARGS,
 					"bdb_modify_internal: %d %s\n",
 					err, *text, 0);
+			} else {
+				got_delete = 1;
 			}
 			break;
 
@@ -194,13 +204,24 @@
 
 		/* check if modified attribute was indexed
 		 * but not in case of NOOP... */
-		err = bdb_index_is_indexed( op->o_bd, mod->sm_desc );
-		if ( err == LDAP_SUCCESS && !op->o_noop ) {
-			ap = attr_find( save_attrs, mod->sm_desc );
-			if ( ap ) ap->a_flags |= SLAP_ATTR_IXDEL;
+		ai = bdb_index_mask( op->o_bd, mod->sm_desc, &ix_at );
+		if ( ai && !op->o_noop ) {
+			if ( got_delete ) {
+				struct berval ix2;
 
-			ap = attr_find( e->e_attrs, mod->sm_desc );
-			if ( ap ) ap->a_flags |= SLAP_ATTR_IXADD;
+				ap = attr_find( save_attrs, mod->sm_desc );
+				if ( ap ) ap->a_flags |= SLAP_ATTR_IXDEL;
+
+				/* Find all other attrs that index to same slot */
+				for ( ap = e->e_attrs; ap; ap=ap->a_next ) {
+					ai = bdb_index_mask( op->o_bd, ap->a_desc, &ix2 );
+					if ( ai && ix2.bv_val == ix_at.bv_val )
+						ap->a_flags |= SLAP_ATTR_IXADD;
+				}
+			} else {
+				ap = attr_find( e->e_attrs, mod->sm_desc );
+				if ( ap ) ap->a_flags |= SLAP_ATTR_IXADD;
+			}
 		}
 	}
 
@@ -230,24 +251,57 @@
 	/* start with deleting the old index entries */
 	for ( ap = save_attrs; ap != NULL; ap = ap->a_next ) {
 		if ( ap->a_flags & SLAP_ATTR_IXDEL ) {
-			rc = bdb_index_values( op, tid, ap->a_desc,
-				ap->a_nvals,
-				e->e_id, SLAP_INDEX_DELETE_OP );
-			if ( rc != LDAP_SUCCESS ) {
-				attrs_free( e->e_attrs );
-				e->e_attrs = save_attrs;
-				Debug( LDAP_DEBUG_ANY,
-				       "Attribute index delete failure",
-				       0, 0, 0 );
-				return rc;
+			struct berval *vals;
+			Attribute *a2;
+			ap->a_flags &= ~SLAP_ATTR_IXDEL;
+			a2 = attr_find( e->e_attrs, ap->a_desc );
+			if ( a2 ) {
+				/* need to detect which values were deleted */
+				int i, j;
+				struct berval tmp;
+				j = ap->a_numvals;
+				for ( i=0; i<j; ) {
+					rc = attr_valfind( a2, SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH,
+						&ap->a_nvals[i], NULL, op->o_tmpmemctx );
+					/* Move deleted values to end of array */
+					if ( rc == LDAP_NO_SUCH_ATTRIBUTE ) {
+						j--;
+						if ( i != j ) {
+							tmp = ap->a_nvals[j];
+							ap->a_nvals[j] = ap->a_nvals[i];
+							ap->a_nvals[i] = tmp;
+							tmp = ap->a_vals[j];
+							ap->a_vals[j] = ap->a_vals[i];
+							ap->a_vals[i] = tmp;
+						}
+						continue;
+					}
+					i++;
+				}
+				vals = &ap->a_nvals[j];
+			} else {
+				/* attribute was completely deleted */
+				vals = ap->a_nvals;
 			}
-			ap->a_flags &= ~SLAP_ATTR_IXDEL;
+			if ( !BER_BVISEMPTY( vals )) {
+				rc = bdb_index_values( op, tid, ap->a_desc,
+					vals, e->e_id, SLAP_INDEX_DELETE_OP );
+				if ( rc != LDAP_SUCCESS ) {
+					attrs_free( e->e_attrs );
+					e->e_attrs = save_attrs;
+					Debug( LDAP_DEBUG_ANY,
+						   "Attribute index delete failure",
+						   0, 0, 0 );
+					return rc;
+				}
+			}
 		}
 	}
 
 	/* add the new index entries */
 	for ( ap = e->e_attrs; ap != NULL; ap = ap->a_next ) {
 		if (ap->a_flags & SLAP_ATTR_IXADD) {
+			ap->a_flags &= ~SLAP_ATTR_IXADD;
 			rc = bdb_index_values( op, tid, ap->a_desc,
 				ap->a_nvals,
 				e->e_id, SLAP_INDEX_ADD_OP );
@@ -259,7 +313,6 @@
 				       0, 0, 0 );
 				return rc;
 			}
-			ap->a_flags &= ~SLAP_ATTR_IXADD;
 		}
 	}
 

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/modrdn.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/modrdn.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/modrdn.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* modrdn.c - bdb backend modrdn routine */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/modrdn.c,v 1.185.2.4 2007/08/31 23:14:01 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/modrdn.c,v 1.185.2.6 2007/12/06 05:43:27 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -303,11 +303,11 @@
 		dnParent( &e->e_nname, &p_ndn );
 	}
 	np_ndn = &p_ndn;
-	if ( p_ndn.bv_len != 0 ) {
+	eip = ei->bei_parent;
+	if ( eip && eip->bei_id ) {
 		/* Make sure parent entry exist and we can write its 
 		 * children.
 		 */
-		eip = ei->bei_parent;
 		rs->sr_err = bdb_cache_find_id( op, ltid,
 			eip->bei_id, &eip, 0, locker, &plock );
 
@@ -551,7 +551,7 @@
 
 	/* Shortcut the search */
 	nei = neip ? neip : eip;
-	rs->sr_err = bdb_cache_find_ndn ( op, ltid, &new_ndn, &nei );
+	rs->sr_err = bdb_cache_find_ndn ( op, locker, &new_ndn, &nei );
 	if ( nei ) bdb_cache_entryinfo_unlock( nei );
 	switch( rs->sr_err ) {
 	case DB_LOCK_DEADLOCK:

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/monitor.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/monitor.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/monitor.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* monitor.c - monitor bdb backend */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/monitor.c,v 1.19.2.6 2007/09/29 09:55:22 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/monitor.c,v 1.19.2.7 2007/11/15 00:59:10 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -266,8 +266,8 @@
 		argv[ 2 ] = s_oid[ i ].oid;
 
 		if ( parse_oidm( &c, 0, NULL ) != 0 ) {
-			Debug( LDAP_DEBUG_ANY,
-				"bdb_monitor_initialize: unable to add "
+			Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(bdb_monitor_initialize)
+				": unable to add "
 				"objectIdentifier \"%s=%s\"\n",
 				s_oid[ i ].name, s_oid[ i ].oid, 0 );
 			return 1;
@@ -277,8 +277,8 @@
 	for ( i = 0; s_at[ i ].desc != NULL; i++ ) {
 		code = register_at( s_at[ i ].desc, s_at[ i ].ad, 1 );
 		if ( code != LDAP_SUCCESS ) {
-			Debug( LDAP_DEBUG_ANY,
-				"bdb_monitor_initialize: register_at failed\n",
+			Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(bdb_monitor_initialize)
+				": register_at failed\n",
 				0, 0, 0 );
 		}
 		(*s_at[ i ].ad)->ad_type->sat_flags |= SLAP_AT_HIDE;
@@ -287,8 +287,8 @@
 	for ( i = 0; s_oc[ i ].desc != NULL; i++ ) {
 		code = register_oc( s_oc[ i ].desc, s_oc[ i ].oc, 1 );
 		if ( code != LDAP_SUCCESS ) {
-			Debug( LDAP_DEBUG_ANY,
-				"bdb_monitor_initialize: register_oc failed\n",
+			Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(bdb_monitor_initialize)
+				": register_oc failed\n",
 				0, 0, 0 );
 		}
 		(*s_oc[ i ].oc)->soc_flags |= SLAP_OC_HIDE;
@@ -356,8 +356,8 @@
 		static int warning = 0;
 
 		if ( warning++ == 0 ) {
-			Debug( LDAP_DEBUG_ANY, "bdb_monitor_open: "
-				"monitoring disabled; "
+			Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(bdb_monitor_db_open)
+				": monitoring disabled; "
 				"configure monitor database to enable\n",
 				0, 0, 0 );
 		}

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/proto-bdb.h
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/proto-bdb.h	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/proto-bdb.h	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/proto-bdb.h,v 1.137.2.3 2007/08/31 23:14:01 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/proto-bdb.h,v 1.137.2.7 2007/12/06 15:13:57 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -74,7 +74,7 @@
 int
 bdb_db_cache(
     Backend	*be,
-    const char *name,
+    struct berval *name,
 	DB **db );
 
 /*
@@ -97,9 +97,10 @@
 
 int bdb_dn2id(
 	Operation *op,
-	DB_TXN *tid,
 	struct berval *dn,
-	EntryInfo *ei );
+	EntryInfo *ei,
+	BDB_LOCKER locker,
+	DB_LOCK *lock );
 
 int bdb_dn2id_add(
 	Operation *op,
@@ -128,15 +129,20 @@
 
 #ifdef BDB_HIER
 #define bdb_dn2id_parent			BDB_SYMBOL(dn2id_parent)
+#define bdb_dup_compare				BDB_SYMBOL(dup_compare)
 #define bdb_fix_dn					BDB_SYMBOL(fix_dn)
 
 int bdb_dn2id_parent(
 	Operation *op,
-	DB_TXN *txn,
 	BDB_LOCKER locker,
 	EntryInfo *ei,
 	ID *idp );
 
+int bdb_dup_compare(
+	DB *db,
+	const DBT *usrkey,
+	const DBT *curkey );
+
 int bdb_fix_dn( Entry *e, int checkit );
 #endif
 
@@ -328,17 +334,18 @@
 /*
  * index.c
  */
-#define bdb_index_is_indexed		BDB_SYMBOL(index_is_indexed)
+#define bdb_index_mask				BDB_SYMBOL(index_mask)
 #define bdb_index_param				BDB_SYMBOL(index_param)
 #define bdb_index_values			BDB_SYMBOL(index_values)
 #define bdb_index_entry				BDB_SYMBOL(index_entry)
 #define bdb_index_recset			BDB_SYMBOL(index_recset)
 #define bdb_index_recrun			BDB_SYMBOL(index_recrun)
 
-extern int
-bdb_index_is_indexed LDAP_P((
+extern AttrInfo *
+bdb_index_mask LDAP_P((
 	Backend *be,
-	AttributeDescription *desc ));
+	AttributeDescription *desc,
+	struct berval *name ));
 
 extern int
 bdb_index_param LDAP_P((
@@ -456,6 +463,7 @@
  * cache.c
  */
 #define bdb_cache_entry_db_unlock	BDB_SYMBOL(cache_entry_db_unlock)
+#define bdb_cache_return_entry_rw	BDB_SYMBOL(cache_return_entry_rw)
 
 #define	bdb_cache_entryinfo_lock(e) \
 	ldap_pvt_thread_mutex_lock( &(e)->bei_kids_mutex )
@@ -467,15 +475,8 @@
 /* What a mess. Hopefully the current cache scheme will stabilize
  * and we can trim out all of this stuff.
  */
-#if 0
 void bdb_cache_return_entry_rw( struct bdb_info *bdb, Entry *e,
 	int rw, DB_LOCK *lock );
-#else
-#define bdb_cache_return_entry_rw( bdb, e, rw, lock ) \
-	bdb_cache_entry_db_unlock( bdb, lock )
-#define	bdb_cache_return_entry( bdb, lock ) \
-	bdb_cache_entry_db_unlock( bdb, lock )
-#endif
 #define bdb_cache_return_entry_r(bdb, e, l) \
 	bdb_cache_return_entry_rw((bdb), (e), 0, (l))
 #define bdb_cache_return_entry_w(bdb, e, l) \
@@ -534,7 +535,7 @@
 );
 int bdb_cache_find_ndn(
 	Operation *op,
-	DB_TXN	*txn,
+	BDB_LOCKER	locker,
 	struct berval   *ndn,
 	EntryInfo	**res
 );
@@ -542,19 +543,21 @@
 	struct bdb_info *bdb,
 	ID id
 );
+
+#define	ID_LOCKED	1
+#define	ID_NOCACHE	2
 int bdb_cache_find_id(
 	Operation *op,
 	DB_TXN	*tid,
 	ID		id,
 	EntryInfo **eip,
-	int	islocked,
+	int	flag,
 	BDB_LOCKER	locker,
 	DB_LOCK		*lock
 );
 int
 bdb_cache_find_parent(
 	Operation *op,
-	DB_TXN *txn,
 	BDB_LOCKER	locker,
 	ID id,
 	EntryInfo **res

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/search.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/search.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/search.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* search.c - search operation */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/search.c,v 1.246.2.5 2007/09/27 21:38:26 ralf Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/search.c,v 1.246.2.9 2007/11/20 18:46:34 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -303,19 +303,20 @@
 bdb_search( Operation *op, SlapReply *rs )
 {
 	struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
-	time_t		stoptime;
 	ID		id, cursor;
+	ID		lastid = NOID;
 	ID		candidates[BDB_IDL_UM_SIZE];
 	ID		scopes[BDB_IDL_DB_SIZE];
 	Entry		*e = NULL, base, *e_root;
 	Entry		*matched = NULL;
 	EntryInfo	*ei;
+	AttributeName	*attrs;
 	struct berval	realbase = BER_BVNULL;
 	slap_mask_t	mask;
+	time_t		stoptime;
 	int		manageDSAit;
-	int		tentries = 0;
-	ID		lastid = NOID;
-	AttributeName	*attrs;
+	int		tentries = 0, nentries = 0;
+	int		idflag = 0;
 
 	BDB_LOCKER	locker = 0;
 	DB_LOCK		lock;
@@ -611,26 +612,15 @@
 			goto done;
 		}
 
-		if ( (ID)( ps->ps_cookie ) == 0 ) {
-			id = bdb_idl_first( candidates, &cursor );
-
-		} else {
-			if ( ps->ps_size == 0 ) {
-				rs->sr_err = LDAP_SUCCESS;
-				rs->sr_text = "search abandoned by pagedResult size=0";
-				send_ldap_result( op, rs );
-				goto done;
-			}
-			for ( id = bdb_idl_first( candidates, &cursor );
-				id != NOID &&
-					id <= (ID)( ps->ps_cookie );
-				id = bdb_idl_next( candidates, &cursor ) )
-			{
-				/* empty */;
-			}
+		cursor = (ID) ps->ps_cookie;
+		if ( cursor && ps->ps_size == 0 ) {
+			rs->sr_err = LDAP_SUCCESS;
+			rs->sr_text = "search abandoned by pagedResult size=0";
+			send_ldap_result( op, rs );
+			goto done;
 		}
-
-		if ( cursor == NOID ) {
+		id = bdb_idl_first( candidates, &cursor );
+		if ( id == NOID ) {
 			Debug( LDAP_DEBUG_TRACE, 
 				LDAP_XSTRING(bdb_search)
 				": no paged results candidates\n",
@@ -640,6 +630,9 @@
 			rs->sr_err = LDAP_OTHER;
 			goto done;
 		}
+		nentries = ps->ps_count;
+		if ( id == (ID)ps->ps_cookie )
+			id = bdb_idl_next( candidates, &cursor );
 		goto loop_begin;
 	}
 
@@ -676,11 +669,19 @@
 			goto done;
 		}
 
+		/* If we inspect more entries than will
+		 * fit into the entry cache, stop caching
+		 * any subsequent entries
+		 */
+		nentries++;
+		if ( nentries > bdb->bi_cache.c_maxsize && !idflag )
+			idflag = ID_NOCACHE;
+
 fetch_entry_retry:
 			/* get the entry with reader lock */
 			ei = NULL;
 			rs->sr_err = bdb_cache_find_id( op, ltid,
-				id, &ei, 0, locker, &lock );
+				id, &ei, idflag, locker, &lock );
 
 			if (rs->sr_err == LDAP_BUSY) {
 				rs->sr_text = "ldap server busy";
@@ -691,6 +692,10 @@
 				|| rs->sr_err == DB_LOCK_NOTGRANTED )
 			{
 				goto fetch_entry_retry;
+			} else if ( rs->sr_err == LDAP_OTHER ) {
+				rs->sr_text = "internal error";
+				send_ldap_result( op, rs );
+				goto done;
 			}
 
 			if ( ei && rs->sr_err == LDAP_SUCCESS ) {
@@ -1123,12 +1128,7 @@
 static int
 parse_paged_cookie( Operation *op, SlapReply *rs )
 {
-	LDAPControl	**c;
 	int		rc = LDAP_SUCCESS;
-	ber_tag_t	tag;
-	ber_int_t	size;
-	BerElement	*ber;
-	struct berval	cookie = BER_BVNULL;
 	PagedResultsState *ps = op->o_pagedresults_state;
 
 	/* this function must be invoked only if the pagedResults
@@ -1136,53 +1136,17 @@
 	 * by the frontend */
 	assert( get_pagedresults( op ) > SLAP_CONTROL_IGNORED );
 
-	/* look for the appropriate ctrl structure */
-	for ( c = op->o_ctrls; c[0] != NULL; c++ ) {
-		if ( strcmp( c[0]->ldctl_oid, LDAP_CONTROL_PAGEDRESULTS ) == 0 )
-		{
-			break;
-		}
-	}
-
-	if ( c[0] == NULL ) {
-		rs->sr_text = "missing pagedResults control";
-		return LDAP_PROTOCOL_ERROR;
-	}
-
-	/* Tested by frontend */
-	assert( c[0]->ldctl_value.bv_len > 0 );
-
-	/* Parse the control value
-	 *	realSearchControlValue ::= SEQUENCE {
-	 *		size	INTEGER (0..maxInt),
-	 *				-- requested page size from client
-	 *				-- result set size estimate from server
-	 *		cookie	OCTET STRING
-	 * }
-	 */
-	ber = ber_init( &c[0]->ldctl_value );
-	if ( ber == NULL ) {
-		rs->sr_text = "internal error";
-		return LDAP_OTHER;
-	}
-
-	tag = ber_scanf( ber, "{im}", &size, &cookie );
-
-	/* Tested by frontend */
-	assert( tag != LBER_ERROR );
-	assert( size >= 0 );
-
 	/* cookie decoding/checks deferred to backend... */
-	if ( cookie.bv_len ) {
+	if ( ps->ps_cookieval.bv_len ) {
 		PagedResultsCookie reqcookie;
-		if( cookie.bv_len != sizeof( reqcookie ) ) {
+		if( ps->ps_cookieval.bv_len != sizeof( reqcookie ) ) {
 			/* bad cookie */
 			rs->sr_text = "paged results cookie is invalid";
 			rc = LDAP_PROTOCOL_ERROR;
 			goto done;
 		}
 
-		AC_MEMCPY( &reqcookie, cookie.bv_val, sizeof( reqcookie ));
+		AC_MEMCPY( &reqcookie, ps->ps_cookieval.bv_val, sizeof( reqcookie ));
 
 		if ( reqcookie > ps->ps_cookie ) {
 			/* bad cookie */
@@ -1198,22 +1162,11 @@
 
 	} else {
 		/* Initial request.  Initialize state. */
-#if 0
-		if ( op->o_conn->c_pagedresults_state.ps_cookie != 0 ) {
-			/* There's another pagedResults control on the
-			 * same connection; reject new pagedResults controls 
-			 * (allowed by RFC2696) */
-			rs->sr_text = "paged results cookie unavailable; try later";
-			rc = LDAP_UNWILLING_TO_PERFORM;
-			goto done;
-		}
-#endif
 		ps->ps_cookie = 0;
 		ps->ps_count = 0;
 	}
 
 done:;
-	(void)ber_free( ber, 1 );
 
 	return rc;
 }

Modified: openldap/vendor/openldap-release/servers/slapd/back-bdb/tools.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-bdb/tools.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-bdb/tools.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* tools.c - tools for slap tools */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/tools.c,v 1.105.2.5 2007/10/23 15:41:23 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/tools.c,v 1.105.2.8 2007/12/13 07:05:24 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2000-2007 The OpenLDAP Foundation.
@@ -231,7 +231,7 @@
 	op.o_tmpmemctx = NULL;
 	op.o_tmpmfuncs = &ch_mfuncs;
 
-	rc = bdb_cache_find_ndn( &op, NULL, dn, &ei );
+	rc = bdb_cache_find_ndn( &op, 0, dn, &ei );
 	if ( ei ) bdb_cache_entryinfo_unlock( ei );
 	if ( rc == DB_NOTFOUND )
 		return NOID;
@@ -306,7 +306,7 @@
 			op.o_tmpmemctx = NULL;
 			op.o_tmpmfuncs = &ch_mfuncs;
 
-			rc = bdb_cache_find_parent( &op, NULL, CURSOR_GETLOCKER(cursor), id, &ei );
+			rc = bdb_cache_find_parent( &op, CURSOR_GETLOCKER(cursor), id, &ei );
 			if ( rc == LDAP_SUCCESS ) {
 				bdb_cache_entryinfo_unlock( ei );
 				e->e_private = ei;
@@ -340,7 +340,7 @@
 		return 0;
 	}
 
-	rc = bdb_cache_find_ndn( op, tid, &ndn, &ei );
+	rc = bdb_cache_find_ndn( op, tid ? TXN_ID( tid ) : 0, &ndn, &ei );
 	if ( ei ) bdb_cache_entryinfo_unlock( ei );
 	if ( rc == DB_NOTFOUND ) {
 		if ( !be_issuffix( op->o_bd, &ndn ) ) {
@@ -746,18 +746,22 @@
 		(long) e->e_id, e->e_dn, 0 );
 
 	if (! (slapMode & SLAP_TOOL_QUICK)) {
-	rc = TXN_BEGIN( bdb->bi_dbenv, NULL, &tid, 
-		bdb->bi_db_opflags );
-	if( rc != 0 ) {
-		snprintf( text->bv_val, text->bv_len,
-			"txn_begin failed: %s (%d)",
-			db_strerror(rc), rc );
-		Debug( LDAP_DEBUG_ANY,
-			"=> " LDAP_XSTRING(bdb_tool_entry_modify) ": %s\n",
-			 text->bv_val, 0, 0 );
-		return NOID;
+		if( cursor ) {
+			cursor->c_close( cursor );
+			cursor = NULL;
+		}
+		rc = TXN_BEGIN( bdb->bi_dbenv, NULL, &tid, 
+			bdb->bi_db_opflags );
+		if( rc != 0 ) {
+			snprintf( text->bv_val, text->bv_len,
+				"txn_begin failed: %s (%d)",
+				db_strerror(rc), rc );
+			Debug( LDAP_DEBUG_ANY,
+				"=> " LDAP_XSTRING(bdb_tool_entry_modify) ": %s\n",
+				 text->bv_val, 0, 0 );
+			return NOID;
+		}
 	}
-	}
 
 	op.o_hdr = &ohdr;
 	op.o_bd = be;

Modified: openldap/vendor/openldap-release/servers/slapd/back-ldif/ldif.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-ldif/ldif.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-ldif/ldif.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* ldif.c - the ldif backend */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-ldif/ldif.c,v 1.48.2.8 2007/10/10 16:51:59 ando Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-ldif/ldif.c,v 1.48.2.9 2007/11/27 20:27:31 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2005-2007 The OpenLDAP Foundation.
@@ -97,7 +97,9 @@
 
 	dn = *orig_dn;
 
-	for ( ptr = dn.bv_val, end = &dn.bv_val[dn.bv_len]; ptr < end; ptr++) {
+	/* escape dirsep's
+	 * use "\" + hexpair, so the escaped DN remains formally valid */
+	for ( ptr = dn.bv_val, end = &dn.bv_val[dn.bv_len]; ptr < end; ptr++ ) {
 		if ( ptr[0] == LDAP_DIRSEP[0] ) {
 			nsep++;
 		}
@@ -114,7 +116,7 @@
 		{
 			static const char hex[] = "0123456789ABCDEF";
 			if ( ptr[0] == LDAP_DIRSEP[0] ) {
-				*p++ = '\\';	/* FIXME: fs-escape */
+				*p++ = '\\';
 				*p++ = hex[(LDAP_DIRSEP[0] & 0xF0U) >> 4];
 				*p = hex[LDAP_DIRSEP[0] & 0x0FU];
 			} else {

Modified: openldap/vendor/openldap-release/servers/slapd/back-meta/config.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-meta/config.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-meta/config.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-meta/config.c,v 1.74.2.7 2007/09/13 19:10:55 ando Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-meta/config.c,v 1.74.2.8 2007/11/27 19:49:13 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1999-2007 The OpenLDAP Foundation.
@@ -1325,7 +1325,7 @@
 
 		if ( BER_BVISNULL( &be->be_nsuffix[ c ] ) ) {
 			Debug( LDAP_DEBUG_ANY, "%s: line %d: "
-	"%s: line %d: <suffix> \"%s\" must be within the database naming context, in "
+	"<suffix> \"%s\" must be within the database naming context, in "
 	"\"suffixMassage <suffix> <massaged suffix>\"\n",
 				fname, lineno, pvnc.bv_val );
 			free( pvnc.bv_val );

Modified: openldap/vendor/openldap-release/servers/slapd/back-meta/conn.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-meta/conn.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-meta/conn.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-meta/conn.c,v 1.86.2.11 2007/10/18 00:20:07 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-meta/conn.c,v 1.86.2.12 2007/11/27 19:49:13 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1999-2007 The OpenLDAP Foundation.
@@ -867,7 +867,7 @@
 		op2.ors_slimit = 1;
 		op2.ors_tlimit = SLAP_NO_LIMIT;
 
-		op2.ors_filter = slap_filter_objectClass_pres;
+		op2.ors_filter = (Filter *)slap_filter_objectClass_pres;
 		op2.ors_filterstr = *slap_filterstr_objectClass_pres;
 
 		op2.o_callback = &cb2;

Modified: openldap/vendor/openldap-release/servers/slapd/back-monitor/operation.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-monitor/operation.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-monitor/operation.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* operation.c - deal with operation subsystem */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-monitor/operation.c,v 1.46.2.2 2007/08/31 23:14:03 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-monitor/operation.c,v 1.46.2.3 2007/11/07 20:58:38 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2001-2007 The OpenLDAP Foundation.
@@ -177,6 +177,7 @@
 	struct berval		rdn;
 	int 			i;
 	Attribute		*a;
+	slap_counters_t *sc;
 	static struct berval	bv_ops = BER_BVC( "cn=operations" );
 
 	assert( mi != NULL );
@@ -188,21 +189,35 @@
 		ldap_pvt_mp_init( nInitiated );
 		ldap_pvt_mp_init( nCompleted );
 
-		ldap_pvt_thread_mutex_lock( &slap_counters.sc_ops_mutex );
+		ldap_pvt_thread_mutex_lock( &slap_counters.sc_mutex );
 		for ( i = 0; i < SLAP_OP_LAST; i++ ) {
 			ldap_pvt_mp_add( nInitiated, slap_counters.sc_ops_initiated_[ i ] );
 			ldap_pvt_mp_add( nCompleted, slap_counters.sc_ops_completed_[ i ] );
 		}
-		ldap_pvt_thread_mutex_unlock( &slap_counters.sc_ops_mutex );
+		for ( sc = slap_counters.sc_next; sc; sc = sc->sc_next ) {
+			ldap_pvt_thread_mutex_lock( &sc->sc_mutex );
+			for ( i = 0; i < SLAP_OP_LAST; i++ ) {
+				ldap_pvt_mp_add( nInitiated, sc->sc_ops_initiated_[ i ] );
+				ldap_pvt_mp_add( nCompleted, sc->sc_ops_completed_[ i ] );
+			}
+			ldap_pvt_thread_mutex_unlock( &sc->sc_mutex );
+		}
+		ldap_pvt_thread_mutex_unlock( &slap_counters.sc_mutex );
 		
 	} else {
 		for ( i = 0; i < SLAP_OP_LAST; i++ ) {
 			if ( dn_match( &rdn, &monitor_op[ i ].nrdn ) )
 			{
-				ldap_pvt_thread_mutex_lock( &slap_counters.sc_ops_mutex );
+				ldap_pvt_thread_mutex_lock( &slap_counters.sc_mutex );
 				ldap_pvt_mp_init_set( nInitiated, slap_counters.sc_ops_initiated_[ i ] );
 				ldap_pvt_mp_init_set( nCompleted, slap_counters.sc_ops_completed_[ i ] );
-				ldap_pvt_thread_mutex_unlock( &slap_counters.sc_ops_mutex );
+				for ( sc = slap_counters.sc_next; sc; sc = sc->sc_next ) {
+					ldap_pvt_thread_mutex_lock( &sc->sc_mutex );
+					ldap_pvt_mp_add( nInitiated, sc->sc_ops_initiated_[ i ] );
+					ldap_pvt_mp_add( nCompleted, sc->sc_ops_completed_[ i ] );
+					ldap_pvt_thread_mutex_unlock( &sc->sc_mutex );
+				}
+				ldap_pvt_thread_mutex_unlock( &slap_counters.sc_mutex );
 				break;
 			}
 		}

Modified: openldap/vendor/openldap-release/servers/slapd/back-monitor/sent.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-monitor/sent.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-monitor/sent.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* sent.c - deal with data sent subsystem */
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-monitor/sent.c,v 1.42.2.2 2007/08/31 23:14:04 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-monitor/sent.c,v 1.42.2.3 2007/11/07 20:58:38 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2001-2007 The OpenLDAP Foundation.
@@ -166,6 +166,7 @@
 	struct berval		nrdn;
 	ldap_pvt_mp_t		n;
 	Attribute		*a;
+	slap_counters_t *sc;
 	int			i;
 
 	assert( mi != NULL );
@@ -183,28 +184,48 @@
 		return SLAP_CB_CONTINUE;
 	}
 
-	ldap_pvt_thread_mutex_lock(&slap_counters.sc_sent_mutex);
+	ldap_pvt_thread_mutex_lock(&slap_counters.sc_mutex);
 	switch ( i ) {
 	case MONITOR_SENT_ENTRIES:
 		ldap_pvt_mp_init_set( n, slap_counters.sc_entries );
+		for ( sc = slap_counters.sc_next; sc; sc = sc->sc_next ) {
+			ldap_pvt_thread_mutex_lock( &sc->sc_mutex );
+			ldap_pvt_mp_add( n, sc->sc_entries );
+			ldap_pvt_thread_mutex_unlock( &sc->sc_mutex );
+		}
 		break;
 
 	case MONITOR_SENT_REFERRALS:
 		ldap_pvt_mp_init_set( n, slap_counters.sc_refs );
+		for ( sc = slap_counters.sc_next; sc; sc = sc->sc_next ) {
+			ldap_pvt_thread_mutex_lock( &sc->sc_mutex );
+			ldap_pvt_mp_add( n, sc->sc_refs );
+			ldap_pvt_thread_mutex_unlock( &sc->sc_mutex );
+		}
 		break;
 
 	case MONITOR_SENT_PDU:
 		ldap_pvt_mp_init_set( n, slap_counters.sc_pdu );
+		for ( sc = slap_counters.sc_next; sc; sc = sc->sc_next ) {
+			ldap_pvt_thread_mutex_lock( &sc->sc_mutex );
+			ldap_pvt_mp_add( n, sc->sc_pdu );
+			ldap_pvt_thread_mutex_unlock( &sc->sc_mutex );
+		}
 		break;
 
 	case MONITOR_SENT_BYTES:
 		ldap_pvt_mp_init_set( n, slap_counters.sc_bytes );
+		for ( sc = slap_counters.sc_next; sc; sc = sc->sc_next ) {
+			ldap_pvt_thread_mutex_lock( &sc->sc_mutex );
+			ldap_pvt_mp_add( n, sc->sc_bytes );
+			ldap_pvt_thread_mutex_unlock( &sc->sc_mutex );
+		}
 		break;
 
 	default:
 		assert(0);
 	}
-	ldap_pvt_thread_mutex_unlock(&slap_counters.sc_sent_mutex);
+	ldap_pvt_thread_mutex_unlock(&slap_counters.sc_mutex);
 	
 	a = attr_find( e->e_attrs, mi->mi_ad_monitorCounter );
 	assert( a != NULL );

Modified: openldap/vendor/openldap-release/servers/slapd/back-sql/back-sql.h
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-sql/back-sql.h	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-sql/back-sql.h	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-sql/back-sql.h,v 1.49.2.2 2007/08/31 23:14:05 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-sql/back-sql.h,v 1.49.2.3 2007/11/27 19:45:37 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1999-2007 The OpenLDAP Foundation.
@@ -266,12 +266,6 @@
 	struct backsql_api	*ba_next;
 } backsql_api;
 
-#ifdef BACKSQL_ARBITRARY_KEY
-#define BACKSQL_ENTRYID_INIT { BER_BVNULL, BER_BVNULL, 0, BER_BVNULL, BER_BVNULL, NULL }
-#else /* ! BACKSQL_ARBITRARY_KEY */
-#define BACKSQL_ENTRYID_INIT { 0, 0, 0, BER_BVNULL, BER_BVNULL, NULL }
-#endif /* BACKSQL_ARBITRARY_KEY */
-
 /*
  * "structural" objectClass mapping structure
  */
@@ -398,6 +392,12 @@
 	struct backsql_entryID	*eid_next;
 } backsql_entryID;
 
+#ifdef BACKSQL_ARBITRARY_KEY
+#define BACKSQL_ENTRYID_INIT { BER_BVNULL, BER_BVNULL, 0, NULL, BER_BVNULL, BER_BVNULL, NULL }
+#else /* ! BACKSQL_ARBITRARY_KEY */
+#define BACKSQL_ENTRYID_INIT { 0, 0, 0, NULL, BER_BVNULL, BER_BVNULL, NULL }
+#endif /* BACKSQL_ARBITRARY_KEY */
+
 /* the function must collect the entry associated to nbase */
 #define BACKSQL_ISF_GET_ID	0x1U
 #define BACKSQL_ISF_GET_ENTRY	( 0x2U | BACKSQL_ISF_GET_ID )

Modified: openldap/vendor/openldap-release/servers/slapd/back-sql/delete.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-sql/delete.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-sql/delete.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-sql/delete.c,v 1.35.2.6 2007/09/27 21:38:26 ralf Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-sql/delete.c,v 1.35.2.7 2007/11/27 19:45:37 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1999-2007 The OpenLDAP Foundation.
@@ -293,7 +293,6 @@
 backsql_tree_delete_search_cb( Operation *op, SlapReply *rs )
 {
 	if ( rs->sr_type == REP_SEARCH ) {
-		backsql_info 		*bi = (backsql_info*)op->o_bd->be_private;
 		backsql_tree_delete_t	*btd;
 		backsql_entryID		*eid;
 
@@ -367,7 +366,7 @@
 	op2.ors_deref = LDAP_DEREF_NEVER;
 	op2.ors_slimit = SLAP_NO_LIMIT;
 	op2.ors_tlimit = SLAP_NO_LIMIT;
-	op2.ors_filter = slap_filter_objectClass_pres;
+	op2.ors_filter = (Filter *)slap_filter_objectClass_pres;
 	op2.ors_filterstr = *slap_filterstr_objectClass_pres;
 	op2.ors_attrs = slap_anlist_all_attributes;
 	op2.ors_attrsonly = 0;
@@ -403,7 +402,6 @@
 int
 backsql_delete( Operation *op, SlapReply *rs )
 {
-	backsql_info 		*bi = (backsql_info*)op->o_bd->be_private;
 	SQLHDBC 		dbh = SQL_NULL_HDBC;
 	SQLHSTMT		sth = SQL_NULL_HSTMT;
 	backsql_oc_map_rec	*oc = NULL;

Modified: openldap/vendor/openldap-release/servers/slapd/back-sql/schema-map.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-sql/schema-map.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-sql/schema-map.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-sql/schema-map.c,v 1.59.2.3 2007/08/31 23:14:05 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-sql/schema-map.c,v 1.59.2.4 2007/11/15 22:13:38 ando Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1999-2007 The OpenLDAP Foundation.
@@ -395,7 +395,7 @@
 		}
 
 		ber_str2bv( at_row.cols[ 1 ], 0, 1, &at_map->bam_sel_expr );
-		if ( at_row.value_len[ 8 ] < 0 ) {
+		if ( at_row.value_len[ 8 ] <= 0 ) {
 			BER_BVZERO( &at_map->bam_sel_expr_u );
 
 		} else {
@@ -406,7 +406,7 @@
 		ber_str2bv( at_row.cols[ 2 ], 0, 0, &bv );
 		backsql_merge_from_clause( bas->bas_bi, &bb, &bv );
 		at_map->bam_from_tbls = bb.bb_val;
-		if ( at_row.value_len[ 3 ] < 0 ) {
+		if ( at_row.value_len[ 3 ] <= 0 ) {
 			BER_BVZERO( &at_map->bam_join_where );
 
 		} else {
@@ -542,16 +542,16 @@
 		
 		ber_str2bv( oc_row.cols[ 2 ], 0, 1, &oc_map->bom_keytbl );
 		ber_str2bv( oc_row.cols[ 3 ], 0, 1, &oc_map->bom_keycol );
-		oc_map->bom_create_proc = ( oc_row.value_len[ 4 ] < 0 ) ? NULL 
+		oc_map->bom_create_proc = ( oc_row.value_len[ 4 ] <= 0 ) ? NULL 
 			: ch_strdup( oc_row.cols[ 4 ] );
 
 		colnum = 5;
 		if ( BACKSQL_CREATE_NEEDS_SELECT( bi ) ) {
 			colnum = 6;
-			oc_map->bom_create_keyval = ( oc_row.value_len[ 5 ] < 0 ) 
+			oc_map->bom_create_keyval = ( oc_row.value_len[ 5 ] <= 0 ) 
 				? NULL : ch_strdup( oc_row.cols[ 5 ] );
 		}
-		oc_map->bom_delete_proc = ( oc_row.value_len[ colnum ] < 0 ) ? NULL 
+		oc_map->bom_delete_proc = ( oc_row.value_len[ colnum ] <= 0 ) ? NULL 
 			: ch_strdup( oc_row.cols[ colnum ] );
 		if ( lutil_atoix( &oc_map->bom_expect_return, oc_row.cols[ colnum + 1 ], 0 ) != 0 ) {
 			Debug( LDAP_DEBUG_TRACE, "backsql_load_schema_map(): "

Modified: openldap/vendor/openldap-release/servers/slapd/back-sql/search.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/back-sql/search.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/back-sql/search.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/back-sql/search.c,v 1.117.2.5 2007/08/31 23:14:05 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/back-sql/search.c,v 1.117.2.6 2007/11/08 19:16:50 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1999-2007 The OpenLDAP Foundation.
@@ -2668,12 +2668,7 @@
 static int
 parse_paged_cookie( Operation *op, SlapReply *rs )
 {
-	LDAPControl	**c;
 	int		rc = LDAP_SUCCESS;
-	ber_tag_t	tag;
-	ber_int_t	size;
-	BerElement	*ber;
-	struct berval	cookie = BER_BVNULL;
 	PagedResultsState *ps = op->o_pagedresults_state;
 
 	/* this function must be invoked only if the pagedResults
@@ -2681,53 +2676,17 @@
 	 * by the frontend */
 	assert( get_pagedresults( op ) > SLAP_CONTROL_IGNORED );
 
-	/* look for the appropriate ctrl structure */
-	for ( c = op->o_ctrls; c[0] != NULL; c++ ) {
-		if ( strcmp( c[0]->ldctl_oid, LDAP_CONTROL_PAGEDRESULTS ) == 0 )
-		{
-			break;
-		}
-	}
-
-	if ( c[0] == NULL ) {
-		rs->sr_text = "missing pagedResults control";
-		return LDAP_PROTOCOL_ERROR;
-	}
-
-	/* Tested by frontend */
-	assert( c[0]->ldctl_value.bv_len > 0 );
-
-	/* Parse the control value
-	 *	realSearchControlValue ::= SEQUENCE {
-	 *		size	INTEGER (0..maxInt),
-	 *				-- requested page size from client
-	 *				-- result set size estimate from server
-	 *		cookie	OCTET STRING
-	 * }
-	 */
-	ber = ber_init( &c[0]->ldctl_value );
-	if ( ber == NULL ) {
-		rs->sr_text = "internal error";
-		return LDAP_OTHER;
-	}
-
-	tag = ber_scanf( ber, "{im}", &size, &cookie );
-
-	/* Tested by frontend */
-	assert( tag != LBER_ERROR );
-	assert( size >= 0 );
-
 	/* cookie decoding/checks deferred to backend... */
-	if ( cookie.bv_len ) {
+	if ( ps->ps_cookieval.bv_len ) {
 		PagedResultsCookie reqcookie;
-		if( cookie.bv_len != sizeof( reqcookie ) ) {
+		if( ps->ps_cookieval.bv_len != sizeof( reqcookie ) ) {
 			/* bad cookie */
 			rs->sr_text = "paged results cookie is invalid";
 			rc = LDAP_PROTOCOL_ERROR;
 			goto done;
 		}
 
-		AC_MEMCPY( &reqcookie, cookie.bv_val, sizeof( reqcookie ));
+		AC_MEMCPY( &reqcookie, ps->ps_cookieval.bv_val, sizeof( reqcookie ));
 
 		if ( reqcookie > ps->ps_cookie ) {
 			/* bad cookie */
@@ -2743,22 +2702,11 @@
 
 	} else {
 		/* Initial request.  Initialize state. */
-#if 0
-		if ( op->o_conn->c_pagedresults_state.ps_cookie != 0 ) {
-			/* There's another pagedResults control on the
-			 * same connection; reject new pagedResults controls 
-			 * (allowed by RFC2696) */
-			rs->sr_text = "paged results cookie unavailable; try later";
-			rc = LDAP_UNWILLING_TO_PERFORM;
-			goto done;
-		}
-#endif
 		ps->ps_cookie = 0;
 		ps->ps_count = 0;
 	}
 
 done:;
-	(void)ber_free( ber, 1 );
 
 	return rc;
 }

Modified: openldap/vendor/openldap-release/servers/slapd/backglue.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/backglue.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/backglue.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* backglue.c - backend glue */
-/* $OpenLDAP: pkg/ldap/servers/slapd/backglue.c,v 1.112.2.6 2007/08/31 23:13:58 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/backglue.c,v 1.112.2.8 2007/11/15 00:34:01 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2001-2007 The OpenLDAP Foundation.
@@ -161,6 +161,31 @@
 			if (!j) {
 				newctrls = ch_malloc((i+1)*sizeof(LDAPControl *));
 			} else {
+				/* Forget old pagedResults response if we're sending
+				 * a new one now
+				 */
+				if ( get_pagedresults( op ) > SLAP_CONTROL_IGNORED ) {
+					int newpage = 0;
+					for ( k=0; k<i; k++ ) {
+						if ( !strcmp(rs->sr_ctrls[k]->ldctl_oid,
+							LDAP_CONTROL_PAGEDRESULTS )) {
+							newpage = 1;
+							break;
+						}
+					}
+					if ( newpage ) {
+						for ( k=0; k<j; k++ ) {
+							if ( !strcmp(gs->ctrls[k]->ldctl_oid,
+								LDAP_CONTROL_PAGEDRESULTS )) {
+									gs->ctrls[k]->ldctl_oid = NULL;
+									ldap_control_free( gs->ctrls[k] );
+									gs->ctrls[k] = gs->ctrls[--j];
+									gs->ctrls[j] = NULL;
+									break;
+							}
+						}
+					}
+				}
 				newctrls = ch_realloc(gs->ctrls,
 					(j+i+1)*sizeof(LDAPControl *));
 			}
@@ -379,6 +404,13 @@
 				continue;
 			if (get_no_subordinate_glue(op) && btmp != b1)
 				continue;
+			/* If we remembered which backend we were on before,
+			 * skip down to it now
+			 */
+			if ( get_pagedresults( op ) > SLAP_CONTROL_IGNORED &&
+				op->o_conn->c_pagedresults_state.ps_be &&
+				op->o_conn->c_pagedresults_state.ps_be != btmp )
+				continue;
 
 			if (tlimit0 != SLAP_NO_LIMIT) {
 				op->o_time = slap_get_time();
@@ -449,7 +481,41 @@
 			case LDAP_X_CANNOT_CHAIN:
 #endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */
 				goto end_of_loop;
-			
+
+			case LDAP_SUCCESS:
+				if ( get_pagedresults( op ) > SLAP_CONTROL_IGNORED ) {
+					PagedResultsState *ps = op->o_pagedresults_state;
+
+					/* Assume this backend can be forgotten now */
+					op->o_conn->c_pagedresults_state.ps_be = NULL;
+
+					/* If we have a full page, exit the loop. We may
+					 * need to remember this backend so we can continue
+					 * from here on a subsequent request.
+					 */
+					if ( rs->sr_nentries >= ps->ps_size ) {
+						/* Don't bother to remember the first backend.
+						 * Only remember the last one if there's more state left.
+						 */
+						if ( op->o_bd != b0 &&
+							( op->o_conn->c_pagedresults_state.ps_cookie ||
+							op->o_bd != gi->gi_n[0].gn_be ))
+							op->o_conn->c_pagedresults_state.ps_be = op->o_bd;
+						goto end_of_loop;
+					}
+
+					/* This backend has run out of entries, but more responses
+					 * can fit in the page. Fake a reset of the state so the
+					 * next backend will start up properly. Only back-[bh]db
+					 * and back-sql look at this state info.
+					 */
+					if ( ps->ps_cookieval.bv_len == sizeof( PagedResultsCookie )) {
+						ps->ps_cookie = 0;
+						memset( ps->ps_cookieval.bv_val, 0,
+							sizeof( PagedResultsCookie ));
+					}
+				}
+				
 			default:
 				break;
 			}

Modified: openldap/vendor/openldap-release/servers/slapd/bconfig.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/bconfig.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/bconfig.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* bconfig.c - the config backend */
-/* $OpenLDAP: pkg/ldap/servers/slapd/bconfig.c,v 1.202.2.16 2007/10/18 01:03:41 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/bconfig.c,v 1.202.2.22 2007/12/03 15:04:31 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2005-2007 The OpenLDAP Foundation.
@@ -179,6 +179,7 @@
 	CFG_MONITORING,
 	CFG_SERVERID,
 	CFG_SORTVALS,
+	CFG_IX_INTLEN,
 
 	CFG_LAST
 };
@@ -372,6 +373,9 @@
 	{ "index_substr_any_step", "step", 2, 2, 0, ARG_INT|ARG_NONZERO,
 		&index_substr_any_step, "( OLcfgGlAt:23 NAME 'olcIndexSubstrAnyStep' "
 			"SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL },
+	{ "index_intlen", "len", 2, 2, 0, ARG_INT|ARG_MAGIC|CFG_IX_INTLEN,
+		&config_generic, "( OLcfgGlAt:84 NAME 'olcIndexIntLen' "
+			"SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL },
 	{ "lastmod", "on|off", 2, 2, 0, ARG_DB|ARG_ON_OFF|ARG_MAGIC|CFG_LASTMOD,
 		&config_generic, "( OLcfgDbAt:0.4 NAME 'olcLastMod' "
 			"SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL },
@@ -508,7 +512,7 @@
 		&config_generic, NULL, NULL, NULL },
 	{ "sasl-host", "host", 2, 2, 0,
 #ifdef HAVE_CYRUS_SASL
-		ARG_STRING|ARG_UNIQUE, &global_host,
+		ARG_STRING|ARG_UNIQUE, &sasl_host,
 #else
 		ARG_IGNORED, NULL,
 #endif
@@ -709,8 +713,8 @@
 		 "olcConnMaxPending $ olcConnMaxPendingAuth $ "
 		 "olcDisallows $ olcGentleHUP $ olcIdleTimeout $ "
 		 "olcIndexSubstrIfMaxLen $ olcIndexSubstrIfMinLen $ "
-		 "olcIndexSubstrAnyLen $ olcIndexSubstrAnyStep $ olcLocalSSF $ "
-		 "olcLogLevel $ "
+		 "olcIndexSubstrAnyLen $ olcIndexSubstrAnyStep $ olcIndexIntLen $ "
+		 "olcLocalSSF $ olcLogLevel $ "
 		 "olcPasswordCryptSaltFormat $ olcPasswordHash $ olcPidFile $ "
 		 "olcPluginLogFile $ olcReadOnly $ olcReferral $ "
 		 "olcReplogFile $ olcRequires $ olcRestrict $ olcReverseLookup $ "
@@ -1014,6 +1018,9 @@
 		case CFG_SSTR_IF_MIN:
 			c->value_int = index_substr_if_minlen;
 			break;
+		case CFG_IX_INTLEN:
+			c->value_int = index_intlen;
+			break;
 		case CFG_SORTVALS: {
 			ADlist *sv;
 			rc = 1;
@@ -1151,6 +1158,12 @@
 			c->be->be_flags &= ~SLAP_DBFLAG_HIDDEN;
 			break;
 
+		case CFG_IX_INTLEN:
+			index_intlen = SLAP_INDEX_INTLEN_DEFAULT;
+			index_intlen_strlen = SLAP_INDEX_INTLEN_STRLEN(
+				SLAP_INDEX_INTLEN_DEFAULT );
+			break;
+
 		case CFG_ACL:
 			if ( c->valx < 0 ) {
 				AccessControl *end;
@@ -1494,6 +1507,16 @@
 					return(1);
 			break;
 
+		case CFG_IX_INTLEN:
+			if ( c->value_int < SLAP_INDEX_INTLEN_DEFAULT )
+				c->value_int = SLAP_INDEX_INTLEN_DEFAULT;
+			else if ( c->value_int > 255 )
+				c->value_int = 255;
+			index_intlen = c->value_int;
+			index_intlen_strlen = SLAP_INDEX_INTLEN_STRLEN(
+				index_intlen );
+			break;
+			
 		case CFG_SORTVALS: {
 			ADlist *svnew = NULL, *svtail, *sv;
 
@@ -2244,8 +2267,17 @@
 	}
 #endif
 
+	if (SLAP_DB_ONE_SUFFIX( c->be ) && c->be->be_suffix ) {
+		snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> Only one suffix is allowed on this %s backend",
+			c->argv[0], c->be->bd_info->bi_type );
+		Debug(LDAP_DEBUG_ANY, "%s: %s\n",
+			c->log, c->cr_msg, 0);
+		return(1);
+	}
+
 	pdn = c->value_dn;
 	ndn = c->value_ndn;
+
 	if (SLAP_DBHIDDEN( c->be ))
 		tbe = NULL;
 	else
@@ -4900,6 +4932,7 @@
 	struct berval rdn;
 	char *ptr;
 	AttributeDescription *rad = NULL;
+	int do_pause = 1;
 
 	cfb = (CfBackInfo *)op->o_bd->be_private;
 
@@ -4930,11 +4963,17 @@
 			rs->sr_text = "Use modrdn to change the entry name";
 			goto out;
 		}
+		/* Internal update of contextCSN? */
+		if ( ml->sml_desc == slap_schema.si_ad_contextCSN && op->o_conn->c_conn_idx == -1 ) {
+			do_pause = 0;
+			break;
+		}
 	}
 
 	slap_mods_opattrs( op, &op->orm_modlist, 1 );
 
-	ldap_pvt_thread_pool_pause( &connection_pool );
+	if ( do_pause )
+		ldap_pvt_thread_pool_pause( &connection_pool );
 
 	/* Strategy:
 	 * 1) perform the Modify on the cached Entry.
@@ -4966,7 +5005,8 @@
 		op->o_ndn = ndn;
 	}
 
-	ldap_pvt_thread_pool_resume( &connection_pool );
+	if ( do_pause )
+		ldap_pvt_thread_pool_resume( &connection_pool );
 out:
 	send_ldap_result( op, rs );
 	slap_graduate_commit_csn( op );
@@ -5934,6 +5974,7 @@
 	Connection conn = {0};
 	Operation *op = NULL;
 	void *thrctx;
+	int isFrontend = 0;
 
 	/* Create entry for frontend database if it does not exist already */
 	if ( !entry_put_got_frontend ) {
@@ -5983,11 +6024,12 @@
 				}
 			} else {
 				entry_put_got_frontend++;
+				isFrontend = 1;
 			}
 		}
 	}
 	/* Create entry for config database if it does not exist already */
-	if ( !entry_put_got_config ) {
+	if ( !entry_put_got_config && !isFrontend ) {
 		if ( !strncmp( e->e_nname.bv_val, "olcDatabase",
 				STRLENOF( "olcDatabase" ))) {
 			if ( strncmp( e->e_nname.bv_val +

Modified: openldap/vendor/openldap-release/servers/slapd/cancel.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/cancel.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/cancel.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* cancel.c - LDAP cancel extended operation */
-/* $OpenLDAP: pkg/ldap/servers/slapd/cancel.c,v 1.23.2.2 2007/08/31 23:13:58 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/cancel.c,v 1.23.2.3 2007/11/07 20:58:38 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -70,7 +70,7 @@
 			LDAP_STAILQ_REMOVE( &op->o_conn->c_pending_ops, o, Operation, o_next );
 			LDAP_STAILQ_NEXT(o, o_next) = NULL;
 			op->o_conn->c_n_ops_pending--;
-			slap_op_free( o );
+			slap_op_free( o, NULL );
 			ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex );
 			return LDAP_SUCCESS;
 		}

Modified: openldap/vendor/openldap-release/servers/slapd/config.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/config.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/config.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* config.c - configuration file handling routines */
-/* $OpenLDAP: pkg/ldap/servers/slapd/config.c,v 1.441.2.9 2007/09/29 08:01:42 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/config.c,v 1.441.2.10 2007/11/08 19:30:04 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -64,6 +64,7 @@
 int		global_idletimeout = 0;
 char	*global_host = NULL;
 char	*global_realm = NULL;
+char	*sasl_host = NULL;
 char		**default_passwd_hash = NULL;
 struct berval default_search_base = BER_BVNULL;
 struct berval default_search_nbase = BER_BVNULL;

Modified: openldap/vendor/openldap-release/servers/slapd/connection.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/connection.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/connection.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/connection.c,v 1.358.2.8 2007/08/31 23:13:58 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/connection.c,v 1.358.2.11 2007/11/27 20:11:48 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -83,25 +83,19 @@
 
 static Connection* connection_get( ber_socket_t s );
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
-
 typedef struct conn_readinfo {
 	Operation *op;
 	ldap_pvt_thread_start_t *func;
 	void *arg;
+	void *ctx;
 	int nullop;
 } conn_readinfo;
 
 static int connection_input( Connection *c, conn_readinfo *cri );
-#else
-static int connection_input( Connection *c );
-#endif
 static void connection_close( Connection *c );
 
 static int connection_op_activate( Operation *op );
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 static void connection_op_queue( Operation *op );
-#endif
 static int connection_resched( Connection *conn );
 static void connection_abandon( Connection *conn );
 static void connection_destroy( Connection *c );
@@ -260,70 +254,19 @@
 
 	if(s == AC_SOCKET_INVALID) return NULL;
 
-#ifndef HAVE_WINSOCK
 	assert( s < dtblsize );
 	c = &connections[s];
 
-#else
-	c = NULL;
-	{
-		ber_socket_t i, sd;
-
-		ldap_pvt_thread_mutex_lock( &connections_mutex );
-		for(i=0; i<dtblsize; i++) {
-			if( connections[i].c_struct_state == SLAP_C_PENDING )
-				continue;
-
-			if( connections[i].c_struct_state == SLAP_C_UNINITIALIZED ) {
-				assert( connections[i].c_conn_state == SLAP_C_INVALID );
-				assert( connections[i].c_sb == 0 );
-				break;
-			}
-
-			ber_sockbuf_ctrl( connections[i].c_sb,
-				LBER_SB_OPT_GET_FD, &sd );
-
-			if( connections[i].c_struct_state == SLAP_C_UNUSED ) {
-				assert( connections[i].c_conn_state == SLAP_C_INVALID );
-				assert( sd == AC_SOCKET_INVALID );
-				continue;
-			}
-
-			/* state can actually change from used -> unused by resched,
-			 * so don't assert details here.
-			 */
-
-			if( sd == s ) {
-				c = &connections[i];
-				break;
-			}
-		}
-		ldap_pvt_thread_mutex_unlock( &connections_mutex );
-	}
-#endif
-
 	if( c != NULL ) {
-		ber_socket_t	sd;
-
 		ldap_pvt_thread_mutex_lock( &c->c_mutex );
 
 		assert( c->c_struct_state != SLAP_C_UNINITIALIZED );
 
-		ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_GET_FD, &sd );
-#ifdef HAVE_WINSOCK
-		/* Avoid race condition after releasing
-		 * connections_mutex
-		 */
-		if ( sd != s ) {
-			ldap_pvt_thread_mutex_unlock( &c->c_mutex );
-			return NULL;
-		}
-#endif
 		if( c->c_struct_state != SLAP_C_USED ) {
 			/* connection must have been closed due to resched */
 
 			assert( c->c_conn_state == SLAP_C_INVALID );
-			assert( sd == AC_SOCKET_INVALID );
+			assert( c->c_sd == AC_SOCKET_INVALID );
 
 			Debug( LDAP_DEBUG_TRACE,
 				"connection_get(%d): connection not used\n",
@@ -341,7 +284,7 @@
 
 		assert( c->c_struct_state == SLAP_C_USED );
 		assert( c->c_conn_state != SLAP_C_INVALID );
-		assert( sd != AC_SOCKET_INVALID );
+		assert( c->c_sd != AC_SOCKET_INVALID );
 
 #ifndef SLAPD_MONITOR
 		if ( global_idletimeout > 0 )
@@ -372,6 +315,7 @@
 	unsigned long id;
 	Connection *c;
 	int doinit = 0;
+	ber_socket_t sfd = SLAP_FD2SOCK(s);
 
 	assert( connections != NULL );
 
@@ -390,7 +334,6 @@
 	}
 
 	assert( s >= 0 );
-#ifndef HAVE_WINSOCK
 	assert( s < dtblsize );
 	c = &connections[s];
 	if( c->c_struct_state == SLAP_C_UNINITIALIZED ) {
@@ -398,56 +341,7 @@
 	} else {
 		assert( c->c_struct_state == SLAP_C_UNUSED );
 	}
-#else
-	{
-		ber_socket_t i;
-		c = NULL;
 
-		ldap_pvt_thread_mutex_lock( &connections_mutex );
-		for( i=0; i < dtblsize; i++) {
-			ber_socket_t	sd;
-
-			if ( connections[i].c_struct_state == SLAP_C_PENDING )
-				continue;
-
-			if( connections[i].c_struct_state == SLAP_C_UNINITIALIZED ) {
-				assert( connections[i].c_sb == 0 );
-				c = &connections[i];
-				c->c_struct_state = SLAP_C_PENDING;
-				doinit = 1;
-				break;
-			}
-
-			sd = AC_SOCKET_INVALID;
-			if (connections[i].c_sb != NULL) {
-				ber_sockbuf_ctrl( connections[i].c_sb,
-					LBER_SB_OPT_GET_FD, &sd );
-			}
-
-			if( connections[i].c_struct_state == SLAP_C_UNUSED ) {
-				assert( sd == AC_SOCKET_INVALID );
-				c = &connections[i];
-				c->c_struct_state = SLAP_C_PENDING;
-				break;
-			}
-
-			if( connections[i].c_conn_state == SLAP_C_CLIENT ) continue;
-
-			assert( connections[i].c_struct_state == SLAP_C_USED );
-			assert( connections[i].c_conn_state != SLAP_C_INVALID );
-			assert( sd != AC_SOCKET_INVALID );
-		}
-		ldap_pvt_thread_mutex_unlock( &connections_mutex );
-
-		if( c == NULL ) {
-			Debug( LDAP_DEBUG_ANY,
-				"connection_init(%d): connection table full "
-				"(%d/%d)\n", s, i, dtblsize);
-			return NULL;
-		}
-	}
-#endif
-
 	if( doinit ) {
 		c->c_send_ldap_result = slap_send_ldap_result;
 		c->c_send_search_entry = slap_send_search_entry;
@@ -525,13 +419,14 @@
 	assert( c->c_writewaiter == 0);
 
 	c->c_listener = listener;
+	c->c_sd = s;
 
 	if ( flags & CONN_IS_CLIENT ) {
 		c->c_connid = 0;
 		c->c_conn_state = SLAP_C_CLIENT;
 		c->c_struct_state = SLAP_C_USED;
 		c->c_close_reason = "?";			/* should never be needed */
-		ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_SET_FD, &s );
+		ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_SET_FD, &sfd );
 		ldap_pvt_thread_mutex_unlock( &c->c_mutex );
 
 		return c;
@@ -568,7 +463,7 @@
 			LBER_SBIOD_LEVEL_PROVIDER, (void*)"udp_" );
 #endif
 		ber_sockbuf_add_io( c->c_sb, &ber_sockbuf_io_udp,
-			LBER_SBIOD_LEVEL_PROVIDER, (void *)&s );
+			LBER_SBIOD_LEVEL_PROVIDER, (void *)&sfd );
 		ber_sockbuf_add_io( c->c_sb, &ber_sockbuf_io_readahead,
 			LBER_SBIOD_LEVEL_PROVIDER, NULL );
 	} else
@@ -580,7 +475,7 @@
 			LBER_SBIOD_LEVEL_PROVIDER, (void*)"ipc_" );
 #endif
 		ber_sockbuf_add_io( c->c_sb, &ber_sockbuf_io_fd,
-			LBER_SBIOD_LEVEL_PROVIDER, (void *)&s );
+			LBER_SBIOD_LEVEL_PROVIDER, (void *)&sfd );
 #ifdef LDAP_PF_LOCAL_SENDMSG
 		if ( !BER_BVISEMPTY( peerbv ))
 			ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_UNGET_BUF, peerbv );
@@ -593,7 +488,7 @@
 			LBER_SBIOD_LEVEL_PROVIDER, (void*)"tcp_" );
 #endif
 		ber_sockbuf_add_io( c->c_sb, &ber_sockbuf_io_tcp,
-			LBER_SBIOD_LEVEL_PROVIDER, (void *)&s );
+			LBER_SBIOD_LEVEL_PROVIDER, (void *)&sfd );
 	}
 
 #ifdef LDAP_DEBUG
@@ -677,10 +572,10 @@
 static void
 connection_destroy( Connection *c )
 {
-	ber_socket_t	sd;
 	unsigned long	connid;
 	const char		*close_reason;
 	Sockbuf			*sb;
+	ber_socket_t	sd;
 
 	assert( connections != NULL );
 	assert( c != NULL );
@@ -743,6 +638,8 @@
 	}
 #endif
 
+	sd = c->c_sd;
+	c->c_sd = AC_SOCKET_INVALID;
 	c->c_conn_state = SLAP_C_INVALID;
 	c->c_struct_state = SLAP_C_UNUSED;
 	c->c_close_reason = "?";			/* should never be needed */
@@ -754,8 +651,6 @@
 		ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_SET_MAX_INCOMING, &max );
 	}
 
-	ber_sockbuf_ctrl( sb, LBER_SB_OPT_GET_FD, &sd );
-
 	/* c must be fully reset by this point; when we call slapd_remove
 	 * it may get immediately reused by a new connection.
 	 */
@@ -813,7 +708,7 @@
 	while ( (o = LDAP_STAILQ_FIRST( &c->c_txn_ops )) != NULL) {
 		LDAP_STAILQ_REMOVE_HEAD( &c->c_txn_ops, o_next );
 		LDAP_STAILQ_NEXT(o, o_next) = NULL;
-		slap_op_free( o );
+		slap_op_free( o, NULL );
 	}
 
 	/* clear transaction */
@@ -825,7 +720,7 @@
 	while ( (o = LDAP_STAILQ_FIRST( &c->c_pending_ops )) != NULL) {
 		LDAP_STAILQ_REMOVE_HEAD( &c->c_pending_ops, o_next );
 		LDAP_STAILQ_NEXT(o, o_next) = NULL;
-		slap_op_free( o );
+		slap_op_free( o, NULL );
 	}
 }
 
@@ -839,18 +734,15 @@
 	/* c_mutex must be locked by caller */
 
 	if( c->c_conn_state != SLAP_C_CLOSING ) {
-		ber_socket_t	sd;
-
-		ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_GET_FD, &sd );
 		Debug( LDAP_DEBUG_TRACE,
 			"connection_closing: readying conn=%lu sd=%d for close\n",
-			c->c_connid, sd, 0 );
+			c->c_connid, c->c_sd, 0 );
 		/* update state to closing */
 		c->c_conn_state = SLAP_C_CLOSING;
 		c->c_close_reason = why;
 
 		/* don't listen on this port anymore */
-		slapd_clr_read( sd, 0 );
+		slapd_clr_read( c->c_sd, 0 );
 
 		/* abandon active operations */
 		connection_abandon( c );
@@ -862,13 +754,13 @@
 			 * connection_resched / connection_close before we
 			 * finish, but that's OK.
 			 */
-			slapd_clr_write( sd, 1 );
+			slapd_clr_write( c->c_sd, 1 );
 			ldap_pvt_thread_mutex_unlock( &c->c_mutex );
 			ldap_pvt_thread_mutex_lock( &c->c_write_mutex );
 			ldap_pvt_thread_mutex_lock( &c->c_mutex );
 			ldap_pvt_thread_mutex_unlock( &c->c_write_mutex );
 		} else {
-			slapd_clr_write( sd, 1 );
+			slapd_clr_write( c->c_sd, 1 );
 		}
 
 	} else if( why == NULL && c->c_close_reason == conn_lost_str ) {
@@ -880,8 +772,6 @@
 static void
 connection_close( Connection *c )
 {
-	ber_socket_t	sd = AC_SOCKET_INVALID;
-
 	assert( connections != NULL );
 	assert( c != NULL );
 
@@ -894,22 +784,17 @@
 
 	/* NOTE: c_mutex should be locked by caller */
 
-	/* NOTE: don't get the file descriptor if not needed */
-	if ( LogTest( LDAP_DEBUG_TRACE ) ) {
-		ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_GET_FD, &sd );
-	}
-
 	if ( !LDAP_STAILQ_EMPTY(&c->c_ops) ||
 		!LDAP_STAILQ_EMPTY(&c->c_pending_ops) )
 	{
 		Debug( LDAP_DEBUG_TRACE,
 			"connection_close: deferring conn=%lu sd=%d\n",
-			c->c_connid, sd, 0 );
+			c->c_connid, c->c_sd, 0 );
 		return;
 	}
 
 	Debug( LDAP_DEBUG_TRACE, "connection_close: conn=%lu sd=%d\n",
-		c->c_connid, sd, 0 );
+		c->c_connid, c->c_sd, 0 );
 
 	connection_destroy( c );
 }
@@ -959,11 +844,7 @@
 		int c_struct;
 		if( connections[*index].c_struct_state == SLAP_C_UNINITIALIZED ) {
 			assert( connections[*index].c_conn_state == SLAP_C_INVALID );
-#ifdef HAVE_WINSOCK
-			break;
-#else
 			continue;
-#endif
 		}
 
 		if( connections[*index].c_struct_state == SLAP_C_USED ) {
@@ -1011,24 +892,24 @@
 /* FIXME: returns 0 in case of failure */
 #define INCR_OP_INITIATED(index) \
 	do { \
-		ldap_pvt_thread_mutex_lock( &slap_counters.sc_ops_mutex ); \
-		ldap_pvt_mp_add_ulong(slap_counters.sc_ops_initiated_[(index)], 1); \
-		ldap_pvt_thread_mutex_unlock( &slap_counters.sc_ops_mutex ); \
+		ldap_pvt_thread_mutex_lock( &op->o_counters->sc_mutex ); \
+		ldap_pvt_mp_add_ulong(op->o_counters->sc_ops_initiated_[(index)], 1); \
+		ldap_pvt_thread_mutex_unlock( &op->o_counters->sc_mutex ); \
 	} while (0)
 #define INCR_OP_COMPLETED(index) \
 	do { \
-		ldap_pvt_thread_mutex_lock( &slap_counters.sc_ops_mutex ); \
-		ldap_pvt_mp_add_ulong(slap_counters.sc_ops_completed, 1); \
-		ldap_pvt_mp_add_ulong(slap_counters.sc_ops_completed_[(index)], 1); \
-		ldap_pvt_thread_mutex_unlock( &slap_counters.sc_ops_mutex ); \
+		ldap_pvt_thread_mutex_lock( &op->o_counters->sc_mutex ); \
+		ldap_pvt_mp_add_ulong(op->o_counters->sc_ops_completed, 1); \
+		ldap_pvt_mp_add_ulong(op->o_counters->sc_ops_completed_[(index)], 1); \
+		ldap_pvt_thread_mutex_unlock( &op->o_counters->sc_mutex ); \
 	} while (0)
 #else /* !SLAPD_MONITOR */
 #define INCR_OP_INITIATED(index) do { } while (0)
 #define INCR_OP_COMPLETED(index) \
 	do { \
-		ldap_pvt_thread_mutex_lock( &slap_counters.sc_ops_mutex ); \
-		ldap_pvt_mp_add_ulong(slap_counters.sc_ops_completed, 1); \
-		ldap_pvt_thread_mutex_unlock( &slap_counters.sc_ops_mutex ); \
+		ldap_pvt_thread_mutex_lock( &op->o_counters->sc_mutex ); \
+		ldap_pvt_mp_add_ulong(op->o_counters->sc_ops_completed, 1); \
+		ldap_pvt_thread_mutex_unlock( &op->o_counters->sc_mutex ); \
 	} while (0)
 #endif /* !SLAPD_MONITOR */
 
@@ -1049,6 +930,62 @@
 	NULL
 };
 
+/* Counters are per-thread, not per-connection.
+ */
+static void
+conn_counter_destroy( void *key, void *data )
+{
+	slap_counters_t **prev, *sc;
+
+	ldap_pvt_thread_mutex_lock( &slap_counters.sc_mutex );
+	for ( prev = &slap_counters.sc_next, sc = slap_counters.sc_next; sc;
+		prev = &sc->sc_next, sc = sc->sc_next ) {
+		if ( sc == data ) {
+			int i;
+
+			*prev = sc->sc_next;
+			/* Copy data to main counter */
+			ldap_pvt_mp_add( slap_counters.sc_bytes, sc->sc_bytes );
+			ldap_pvt_mp_add( slap_counters.sc_pdu, sc->sc_pdu );
+			ldap_pvt_mp_add( slap_counters.sc_entries, sc->sc_entries );
+			ldap_pvt_mp_add( slap_counters.sc_refs, sc->sc_refs );
+			ldap_pvt_mp_add( slap_counters.sc_ops_initiated, sc->sc_ops_initiated );
+			ldap_pvt_mp_add( slap_counters.sc_ops_completed, sc->sc_ops_completed );
+#ifdef SLAPD_MONITOR
+			for ( i = 0; i < SLAP_OP_LAST; i++ ) {
+				ldap_pvt_mp_add( slap_counters.sc_ops_initiated_[ i ], sc->sc_ops_initiated_[ i ] );
+				ldap_pvt_mp_add( slap_counters.sc_ops_initiated_[ i ], sc->sc_ops_completed_[ i ] );
+			}
+#endif /* SLAPD_MONITOR */
+			slap_counters_destroy( sc );
+			ber_memfree_x( data, NULL );
+			break;
+		}
+	}
+	ldap_pvt_thread_mutex_unlock( &slap_counters.sc_mutex );
+}
+
+static void
+conn_counter_init( Operation *op, void *ctx )
+{
+	slap_counters_t *sc;
+	void *vsc = NULL;
+
+	if ( ldap_pvt_thread_pool_getkey( ctx, conn_counter_init, &vsc, NULL ) || !vsc ) {
+		vsc = ch_malloc( sizeof( slap_counters_t ));
+		sc = vsc;
+		slap_counters_init( sc );
+		ldap_pvt_thread_pool_setkey( ctx, conn_counter_init, vsc,
+			conn_counter_destroy );
+
+		ldap_pvt_thread_mutex_lock( &slap_counters.sc_mutex );
+		sc->sc_next = slap_counters.sc_next;
+		slap_counters.sc_next = sc;
+		ldap_pvt_thread_mutex_unlock( &slap_counters.sc_mutex );
+	}
+	op->o_counters = vsc;
+}
+
 static void *
 connection_operation( void *ctx, void *arg_v )
 {
@@ -1062,10 +999,11 @@
 	void *memctx_null = NULL;
 	ber_len_t memsiz;
 
-	ldap_pvt_thread_mutex_lock( &slap_counters.sc_ops_mutex );
+	conn_counter_init( op, ctx );
+	ldap_pvt_thread_mutex_lock( &op->o_counters->sc_mutex );
 	/* FIXME: returns 0 in case of failure */
-	ldap_pvt_mp_add_ulong(slap_counters.sc_ops_initiated, 1);
-	ldap_pvt_thread_mutex_unlock( &slap_counters.sc_ops_mutex );
+	ldap_pvt_mp_add_ulong(op->o_counters->sc_ops_initiated, 1);
+	ldap_pvt_thread_mutex_unlock( &op->o_counters->sc_mutex );
 
 	op->o_threadctx = ctx;
 	op->o_tid = ldap_pvt_thread_pool_tid( ctx );
@@ -1175,7 +1113,6 @@
 
 	LDAP_STAILQ_REMOVE( &conn->c_ops, op, Operation, o_next);
 	LDAP_STAILQ_NEXT(op, o_next) = NULL;
-	slap_op_free( op );
 	conn->c_n_ops_executing--;
 	conn->c_n_ops_completed++;
 
@@ -1190,42 +1127,44 @@
 
 	connection_resched( conn );
 	ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
+	slap_op_free( op, ctx );
 	return NULL;
 }
 
 static const Listener dummy_list = { BER_BVC(""), BER_BVC("") };
 
-int connection_client_setup(
+Connection *connection_client_setup(
 	ber_socket_t s,
 	ldap_pvt_thread_start_t *func,
 	void *arg )
 {
 	Connection *c;
+	ber_socket_t sfd = SLAP_SOCKNEW( s );
 
-	c = connection_init( s, (Listener *)&dummy_list, "", "",
+	c = connection_init( sfd, (Listener *)&dummy_list, "", "",
 		CONN_IS_CLIENT, 0, NULL
 		LDAP_PF_LOCAL_SENDMSG_ARG(NULL));
-	if ( !c ) return -1;
+	if ( c ) {
+		c->c_clientfunc = func;
+		c->c_clientarg = arg;
 
-	c->c_clientfunc = func;
-	c->c_clientarg = arg;
-
-	slapd_add_internal( s, 0 );
-	slapd_set_read( s, 1 );
-	return 0;
+		slapd_add_internal( sfd, 0 );
+		slapd_set_read( sfd, 1 );
+	}
+	return c;
 }
 
 void connection_client_enable(
-	ber_socket_t s )
+	Connection *c )
 {
-	slapd_set_read( s, 1 );
+	slapd_set_read( c->c_sd, 1 );
 }
 
 void connection_client_stop(
-	ber_socket_t s )
+	Connection *c )
 {
-	Connection *c;
 	Sockbuf *sb;
+	ber_socket_t s = c->c_sd;
 
 	/* get (locked) connection */
 	c = connection_get( s );
@@ -1235,6 +1174,7 @@
 	c->c_listener = NULL;
 	c->c_conn_state = SLAP_C_INVALID;
 	c->c_struct_state = SLAP_C_UNUSED;
+	c->c_sd = AC_SOCKET_INVALID;
 	c->c_close_reason = "?";			/* should never be needed */
 	sb = c->c_sb;
 	c->c_sb = ber_sockbuf_alloc( );
@@ -1247,20 +1187,19 @@
 	connection_return( c );
 }
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
-
 static int connection_read( ber_socket_t s, conn_readinfo *cri );
 
 static void* connection_read_thread( void* ctx, void* argv )
 {
 	int rc ;
-	conn_readinfo cri = { NULL, NULL, NULL, 0 };
+	conn_readinfo cri = { NULL, NULL, NULL, NULL, 0 };
 	ber_socket_t s = (long)argv;
 
 	/*
 	 * read incoming LDAP requests. If there is more than one,
 	 * the first one is returned with new_op
 	 */
+	cri.ctx = ctx;
 	if( ( rc = connection_read( s, &cri ) ) < 0 ) {
 		Debug( LDAP_DEBUG_CONNS, "connection_read(%d) error\n", s, 0, 0 );
 		return (void*)(long)rc;
@@ -1300,14 +1239,9 @@
 
 	return rc;
 }
-#endif
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 static int
 connection_read( ber_socket_t s, conn_readinfo *cri )
-#else
-int connection_read(ber_socket_t s)
-#endif
 {
 	int rc = 0;
 	Connection *c;
@@ -1336,15 +1270,9 @@
 	}
 
 	if ( c->c_conn_state == SLAP_C_CLIENT ) {
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 		cri->func = c->c_clientfunc;
 		cri->arg = c->c_clientarg;
 		/* read should already be cleared */
-#else
-		slapd_clr_read( s, 0 );
-		ldap_pvt_thread_pool_submit( &connection_pool,
-			c->c_clientfunc, c->c_clientarg );
-#endif
 		connection_return( c );
 		return 0;
 	}
@@ -1399,10 +1327,7 @@
 		/* if success and data is ready, fall thru to data input loop */
 		if( !ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_DATA_READY, NULL ) )
 		{
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 			slapd_set_read( s, 1 );
-#endif
-
 			connection_return( c );
 			return 0;
 		}
@@ -1413,10 +1338,7 @@
 	if ( c->c_sasl_layers ) {
 		/* If previous layer is not removed yet, give up for now */
 		if ( !c->c_sasl_sockctx ) {
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 			slapd_set_read( s, 1 );
-#endif
-
 			connection_return( c );
 			return 0;
 		}
@@ -1444,11 +1366,7 @@
 
 	do {
 		/* How do we do this without getting into a busy loop ? */
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 		rc = connection_input( c, cri );
-#else
-		rc = connection_input( c );
-#endif
 	}
 #ifdef DATA_READY_LOOP
 	while( !rc && ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_DATA_READY, NULL ));
@@ -1470,33 +1388,18 @@
 		return 0;
 	}
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 	if ( ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_NEEDS_WRITE, NULL ) ) {
 		slapd_set_write( s, 0 );
 	}
 
 	slapd_set_read( s, 1 );
-#else
-	if ( ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_NEEDS_READ, NULL ) ) {
-		slapd_set_read( s, 1 );
-	}
-
-	if ( ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_NEEDS_WRITE, NULL ) ) {
-		slapd_set_write( s, 1 );
-	}
-#endif
-
 	connection_return( c );
 
 	return 0;
 }
 
 static int
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 connection_input( Connection *conn , conn_readinfo *cri )
-#else
-connection_input( Connection *conn )
-#endif
 {
 	Operation *op;
 	ber_tag_t	tag;
@@ -1509,6 +1412,7 @@
 	char 		*cdn = NULL;
 #endif
 	char *defer = NULL;
+	void *ctx;
 
 	if ( conn->c_currentber == NULL &&
 		( conn->c_currentber = ber_alloc()) == NULL )
@@ -1538,15 +1442,12 @@
 	tag = ber_get_next( conn->c_sb, &len, conn->c_currentber );
 	if ( tag != LDAP_TAG_MESSAGE ) {
 		int err = sock_errno();
-		ber_socket_t	sd;
 
-		ber_sockbuf_ctrl( conn->c_sb, LBER_SB_OPT_GET_FD, &sd );
-
 		if ( err != EWOULDBLOCK && err != EAGAIN ) {
 			/* log, close and send error */
 			Debug( LDAP_DEBUG_TRACE,
 				"ber_get_next on fd %d failed errno=%d (%s)\n",
-			sd, err, sock_errstr(err) );
+			conn->c_sd, err, sock_errstr(err) );
 			ber_free( conn->c_currentber, 1 );
 			conn->c_currentber = NULL;
 
@@ -1592,7 +1493,8 @@
 		connection_abandon( conn );
 	}
 
-	op = slap_op_alloc( ber, msgid, tag, conn->c_n_ops_received++ );
+	ctx = cri->ctx;
+	op = slap_op_alloc( ber, msgid, tag, conn->c_n_ops_received++, ctx );
 
 	op->o_conn = conn;
 	/* clear state if the connection is being reused from inactive */
@@ -1682,7 +1584,6 @@
 	} else {
 		conn->c_n_ops_executing++;
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 		/*
 		 * The first op will be processed in the same thread context,
 		 * as long as there is only one op total.
@@ -1701,9 +1602,6 @@
 			}
 			connection_op_activate( op );
 		}
-#else
-		connection_op_activate( op );
-#endif
 	}
 
 #ifdef NO_THREADS
@@ -1723,12 +1621,9 @@
 	Operation *op;
 
 	if( conn->c_conn_state == SLAP_C_CLOSING ) {
-		ber_socket_t	sd;
-		ber_sockbuf_ctrl( conn->c_sb, LBER_SB_OPT_GET_FD, &sd );
-
 		Debug( LDAP_DEBUG_TRACE, "connection_resched: "
 			"attempting closing conn=%lu sd=%d\n",
-			conn->c_connid, sd, 0 );
+			conn->c_connid, conn->c_sd, 0 );
 		connection_close( conn );
 		return 0;
 	}
@@ -2010,6 +1905,7 @@
 	Operation *op = (Operation *) opbuf;
 
 	conn->c_connid = -1;
+	conn->c_conn_idx = -1;
 	conn->c_send_ldap_result = slap_send_ldap_result;
 	conn->c_send_search_entry = slap_send_search_entry;
 	conn->c_send_search_reference = slap_send_search_reference;
@@ -2028,6 +1924,7 @@
 	op->o_threadctx = ctx;
 	op->o_tid = ldap_pvt_thread_pool_tid( ctx );
 
+	op->o_counters = &slap_counters;
 	op->o_conn = conn;
 	op->o_connid = op->o_conn->c_connid;
 	connection_init_log_prefix( op );

Modified: openldap/vendor/openldap-release/servers/slapd/controls.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/controls.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/controls.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/controls.c,v 1.174.2.7 2007/10/17 00:51:19 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/controls.c,v 1.174.2.8 2007/11/08 19:16:50 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -1050,12 +1050,13 @@
 	SlapReply *rs,
 	LDAPControl *ctrl )
 {
+	BerElementBuffer berbuf;
+	BerElement	*ber = (BerElement *)&berbuf;
+	struct berval	cookie;
+	PagedResultsState	*ps;
 	int		rc = LDAP_SUCCESS;
 	ber_tag_t	tag;
 	ber_int_t	size;
-	BerElement	*ber;
-	struct berval	cookie = BER_BVNULL;
-	PagedResultsState	*ps;
 
 	if ( op->o_pagedresults != SLAP_CONTROL_NONE ) {
 		rs->sr_text = "paged results control specified multiple times";
@@ -1080,11 +1081,7 @@
 	 *		cookie	OCTET STRING
 	 * }
 	 */
-	ber = ber_init( &ctrl->ldctl_value );
-	if ( ber == NULL ) {
-		rs->sr_text = "internal error";
-		return LDAP_OTHER;
-	}
+	ber_init2( ber, &ctrl->ldctl_value, LBER_USE_DER );
 
 	tag = ber_scanf( ber, "{im}", &size, &cookie );
 
@@ -1103,6 +1100,7 @@
 	ps = op->o_tmpalloc( sizeof(PagedResultsState), op->o_tmpmemctx );
 	*ps = op->o_conn->c_pagedresults_state;
 	ps->ps_size = size;
+	ps->ps_cookieval = cookie;
 	op->o_pagedresults_state = ps;
 
 	/* NOTE: according to RFC 2696 3.:
@@ -1126,7 +1124,6 @@
 	}
 
 done:;
-	(void)ber_free( ber, 1 );
 	return rc;
 }
 

Modified: openldap/vendor/openldap-release/servers/slapd/daemon.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/daemon.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/daemon.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,7 +1,8 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/daemon.c,v 1.380.2.6 2007/08/31 23:13:58 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/daemon.c,v 1.380.2.8 2007/11/27 20:11:48 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
+ * Portions Copyright 2007 by Howard Chu, Symas Corporation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -85,13 +86,13 @@
 #ifdef NO_THREADS
 #define WAKE_LISTENER(w)	do { \
 	if ((w) && ++waking < 5) { \
-		tcp_write( wake_sds[1], "0", 1 ); \
+		tcp_write( SLAP_FD2SOCK(wake_sds[1]), "0", 1 ); \
 	} \
 } while (0)
 #else /* ! NO_THREADS */
 #define WAKE_LISTENER(w)	do { \
 	if (w) { \
-		tcp_write( wake_sds[1], "0", 1 ); \
+		tcp_write( SLAP_FD2SOCK(wake_sds[1]), "0", 1 ); \
 	} \
 } while (0)
 #endif /* ! NO_THREADS */
@@ -100,6 +101,15 @@
 volatile sig_atomic_t slapd_gentle_shutdown = 0;
 volatile sig_atomic_t slapd_abrupt_shutdown = 0;
 
+#ifdef HAVE_WINSOCK
+ldap_pvt_thread_mutex_t slapd_ws_mutex;
+SOCKET *slapd_ws_sockets;
+#define	SD_READ 1
+#define	SD_WRITE	2
+#define	SD_ACTIVE	4
+#define	SD_LISTENER	8
+#endif
+
 static struct slap_daemon {
 	ldap_pvt_thread_mutex_t	sd_mutex;
 #ifdef HAVE_TCPD
@@ -108,28 +118,27 @@
 
 	ber_socket_t		sd_nactives;
 	int			sd_nwriters;
+	int			sd_nfds;
 
 #if defined(HAVE_EPOLL)
 	struct epoll_event	*sd_epolls;
 	int			*sd_index;
 	int			sd_epfd;
-	int			sd_nfds;
 #elif defined(SLAP_X_DEVPOLL) && defined(HAVE_DEVPOLL)
 	/* eXperimental */
 	struct pollfd		*sd_pollfd;
 	int			*sd_index;
 	Listener		**sd_l;
 	int			sd_dpfd;
-	int			sd_nfds;
 #else /* ! epoll && ! /dev/poll */
-#ifndef HAVE_WINSOCK
-	/* In winsock, accept() returns values higher than dtblsize
-		so don't bother with this optimization */
-	int			sd_nfds;
-#endif /* ! HAVE_WINSOCK */
+#ifdef HAVE_WINSOCK
+	char	*sd_flags;
+	char	*sd_rflags;
+#else /* ! HAVE_WINSOCK */
 	fd_set			sd_actives;
 	fd_set			sd_readers;
 	fd_set			sd_writers;
+#endif /* ! HAVE_WINSOCK */
 #endif /* ! epoll && ! /dev/poll */
 } slap_daemon;
 
@@ -182,14 +191,12 @@
 # define SLAP_SOCK_CLR_READ(s)		SLAP_EPOLL_SOCK_CLR((s), EPOLLIN)
 # define SLAP_SOCK_CLR_WRITE(s)		SLAP_EPOLL_SOCK_CLR((s), EPOLLOUT)
 
-# ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 #  define SLAP_SOCK_SET_SUSPEND(s) \
 	( slap_daemon.sd_suspend[SLAP_EPOLL_SOCK_IX(s)] = 1 )
 #  define SLAP_SOCK_CLR_SUSPEND(s) \
 	( slap_daemon.sd_suspend[SLAP_EPOLL_SOCK_IX(s)] = 0 )
 #  define SLAP_SOCK_IS_SUSPEND(s) \
 	( slap_daemon.sd_suspend[SLAP_EPOLL_SOCK_IX(s)] == 1 )
-# endif /* SLAP_LIGHTWEIGHT_DISPATCHER */
 
 # define SLAP_EPOLL_EVENT_CLR(i, mode)	(revents[(i)].events &= ~(mode))
 
@@ -356,14 +363,12 @@
 # define SLAP_SOCK_CLR_READ(s)		SLAP_DEVPOLL_SOCK_CLR((s), POLLIN)
 # define SLAP_SOCK_CLR_WRITE(s)		SLAP_DEVPOLL_SOCK_CLR((s), POLLOUT)
 
-# ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 #  define SLAP_SOCK_SET_SUSPEND(s) \
 	( slap_daemon.sd_suspend[SLAP_DEVPOLL_SOCK_IX((s))] = 1 )
 #  define SLAP_SOCK_CLR_SUSPEND(s) \
 	( slap_daemon.sd_suspend[SLAP_DEVPOLL_SOCK_IX((s))] = 0 )
 #  define SLAP_SOCK_IS_SUSPEND(s) \
 	( slap_daemon.sd_suspend[SLAP_DEVPOLL_SOCK_IX((s))] == 1 )
-# endif /* SLAP_LIGHTWEIGHT_DISPATCHER */
 
 # define SLAP_DEVPOLL_EVENT_CLR(i, mode)	(revents[(i)].events &= ~(mode))
 
@@ -461,13 +466,119 @@
 } while (0)
 
 #else /* ! epoll && ! /dev/poll */
+# ifdef HAVE_WINSOCK
+# define SLAP_EVENT_FNAME		"WSselect"
+/* Winsock provides a "select" function but its fd_sets are
+ * actually arrays of sockets. Since these sockets are handles
+ * and not a contiguous range of small integers, we manage our
+ * own "fd" table of socket handles and use their indices as
+ * descriptors.
+ *
+ * All of our listener/connection structures use fds; the actual
+ * I/O functions use sockets. The SLAP_FD2SOCK macro in proto-slap.h
+ * handles the mapping.
+ *
+ * Despite the mapping overhead, this is about 45% more efficient
+ * than just using Winsock's select and FD_ISSET directly.
+ *
+ * Unfortunately Winsock's select implementation doesn't scale well
+ * as the number of connections increases. This probably needs to be
+ * rewritten to use the Winsock overlapped/asynchronous I/O functions.
+ */
+# define SLAP_EVENTS_ARE_INDEXED	1
+# define SLAP_EVENT_DECL		fd_set readfds, writefds
+# define SLAP_EVENT_INIT	do { \
+	int i; \
+	FD_ZERO( &readfds ); \
+	FD_ZERO( &writefds ); \
+	memset( slap_daemon.sd_rflags, 0, slap_daemon.sd_nfds ); \
+	for ( i=0; i<slap_daemon.sd_nfds; i++ ) { \
+		if ( slap_daemon.sd_flags[i] & SD_READ ) \
+			FD_SET( slapd_ws_sockets[i], &readfds );\
+		if ( slap_daemon.sd_flags[i] & SD_WRITE ) \
+			FD_SET( slapd_ws_sockets[i], &writefds ); \
+	} } while ( 0 )
 
+# define SLAP_EVENT_MAX		slap_daemon.sd_nfds
+
+# define SLAP_EVENT_WAIT(tvp, nsp)	do { \
+	int i; \
+	*(nsp) = select( SLAP_EVENT_MAX, &readfds, \
+		nwriters > 0 ? &writefds : NULL, NULL, (tvp) ); \
+	for ( i=0; i<readfds.fd_count; i++) { \
+		int fd = slapd_sock2fd(readfds.fd_array[i]); \
+		if ( fd >= 0 ) { \
+			slap_daemon.sd_rflags[fd] = SD_READ; \
+			if ( fd >= *(nsp)) *(nsp) = fd+1; \
+		} \
+	} \
+	for ( i=0; i<writefds.fd_count; i++) { \
+		int fd = slapd_sock2fd(writefds.fd_array[i]); \
+		if ( fd >= 0 ) { \
+			slap_daemon.sd_rflags[fd] = SD_WRITE; \
+			if ( fd >= *(nsp)) *(nsp) = fd+1; \
+		} \
+	} \
+} while (0)
+
+# define SLAP_EVENT_IS_READ(fd)		(slap_daemon.sd_rflags[fd] & SD_READ)
+# define SLAP_EVENT_IS_WRITE(fd)	(slap_daemon.sd_rflags[fd] & SD_WRITE)
+
+# define SLAP_EVENT_CLR_READ(fd) 	slap_daemon.sd_rflags[fd] &= ~SD_READ;
+# define SLAP_EVENT_CLR_WRITE(fd)	slap_daemon.sd_rflags[fd] &= ~SD_WRITE;
+
+# define SLAP_SOCK_INIT		do { \
+	ldap_pvt_thread_mutex_init( &slapd_ws_mutex ); \
+	slapd_ws_sockets = ch_malloc( dtblsize * ( sizeof(SOCKET) + 2)); \
+	slap_daemon.sd_flags = (char *)(slapd_ws_sockets + dtblsize); \
+	slap_daemon.sd_rflags = slap_daemon.sd_flags + dtblsize; \
+	memset( slapd_ws_sockets, -1, dtblsize * sizeof(SOCKET) ); \
+	slapd_ws_sockets[0] = wake_sds[0]; \
+	slapd_ws_sockets[1] = wake_sds[1]; \
+	wake_sds[0] = 0; \
+	wake_sds[1] = 1; \
+	slap_daemon.sd_nfds = 2; \
+	} while ( 0 )
+
+# define SLAP_SOCK_DESTROY	do { \
+	ch_free( slapd_ws_sockets ); slapd_ws_sockets = NULL; \
+	slap_daemon.sd_flags = NULL; \
+	slap_daemon.sd_rflags = NULL; \
+	ldap_pvt_thread_mutex_destroy( &slapd_ws_mutex ); \
+	} while ( 0 )
+
+# define SLAP_SOCK_IS_ACTIVE(fd) ( slap_daemon.sd_flags[fd] & SD_ACTIVE )
+# define SLAP_SOCK_IS_READ(fd) ( slap_daemon.sd_flags[fd] & SD_READ )
+# define SLAP_SOCK_IS_WRITE(fd) ( slap_daemon.sd_flags[fd] & SD_WRITE )
+# define SLAP_SOCK_NOT_ACTIVE(fd)	(!slap_daemon.sd_flags[fd])
+
+# define SLAP_SOCK_SET_READ(fd)		( slap_daemon.sd_flags[fd] |= SD_READ )
+# define SLAP_SOCK_SET_WRITE(fd)		( slap_daemon.sd_flags[fd] |= SD_WRITE )
+
+# define SLAP_SELECT_ADDTEST(s)	do { \
+	if ((s) >= slap_daemon.sd_nfds) slap_daemon.sd_nfds = (s)+1; \
+} while (0)
+
+# define SLAP_SOCK_CLR_READ(fd)		( slap_daemon.sd_flags[fd] &= ~SD_READ )
+# define SLAP_SOCK_CLR_WRITE(fd)		( slap_daemon.sd_flags[fd] &= ~SD_WRITE )
+
+# define SLAP_SOCK_ADD(s, l)	do { \
+	SLAP_SELECT_ADDTEST((s)); \
+	slap_daemon.sd_flags[s] = SD_ACTIVE|SD_READ; \
+} while ( 0 )
+
+# define SLAP_SOCK_DEL(s) do { \
+	slap_daemon.sd_flags[s] = 0; \
+	slapd_sockdel( s ); \
+} while ( 0 )
+
+# else /* !HAVE_WINSOCK */
+
 /**************************************
  * Use select system call - select(2) *
  **************************************/
 # define SLAP_EVENT_FNAME		"select"
 /* select */
-
 # define SLAP_EVENTS_ARE_INDEXED	1
 # define SLAP_EVENT_DECL		fd_set readfds, writefds
 
@@ -504,25 +615,13 @@
 # define SLAP_SOCK_NOT_ACTIVE(fd)	(!SLAP_SOCK_IS_ACTIVE(fd) && \
 	 !SLAP_SOCK_IS_READ(fd) && !SLAP_SOCK_IS_WRITE(fd))
 
-# ifdef HAVE_WINSOCK
-#  define SLAP_SOCK_SET_READ(fd)	do { \
-	if (!SLAP_SOCK_IS_READ(fd)) { FD_SET((fd), &slap_daemon.sd_readers); } \
-} while (0)
-#  define SLAP_SOCK_SET_WRITE(fd)	do { \
-	if (!SLAP_SOCK_IS_WRITE(fd)) { FD_SET((fd), &slap_daemon.sd_writers); } \
-} while (0)
+# define SLAP_SOCK_SET_READ(fd)	FD_SET((fd), &slap_daemon.sd_readers)
+# define SLAP_SOCK_SET_WRITE(fd)	FD_SET((fd), &slap_daemon.sd_writers)
 
-#  define SLAP_SELECT_ADDTEST(s)	
-#  define SLAP_EVENT_MAX		dtblsize
-# else /* ! HAVE_WINSOCK */
-#  define SLAP_SOCK_SET_READ(fd)	FD_SET((fd), &slap_daemon.sd_readers)
-#  define SLAP_SOCK_SET_WRITE(fd)	FD_SET((fd), &slap_daemon.sd_writers)
-
-#  define SLAP_EVENT_MAX		slap_daemon.sd_nfds
-#  define SLAP_SELECT_ADDTEST(s)	do { \
+# define SLAP_EVENT_MAX		slap_daemon.sd_nfds
+# define SLAP_SELECT_ADDTEST(s)	do { \
 	if ((s) >= slap_daemon.sd_nfds) slap_daemon.sd_nfds = (s)+1; \
 } while (0)
-# endif /* ! HAVE_WINSOCK */
 
 # define SLAP_SOCK_CLR_READ(fd)		FD_CLR((fd), &slap_daemon.sd_readers)
 # define SLAP_SOCK_CLR_WRITE(fd)	FD_CLR((fd), &slap_daemon.sd_writers)
@@ -549,6 +648,7 @@
 	*(nsp) = select( SLAP_EVENT_MAX, &readfds, \
 		nwriters > 0 ? &writefds : NULL, NULL, (tvp) ); \
 } while (0)
+# endif /* !HAVE_WINSOCK */
 #endif /* ! epoll && ! /dev/poll */
 
 #ifdef HAVE_SLP
@@ -679,6 +779,42 @@
 }
 #endif /* HAVE_SLP */
 
+#ifdef HAVE_WINSOCK
+/* Manage the descriptor to socket table */
+ber_socket_t
+slapd_socknew( ber_socket_t s )
+{
+	ber_socket_t i;
+	ldap_pvt_thread_mutex_lock( &slapd_ws_mutex );
+	for ( i = 0; i < dtblsize && slapd_ws_sockets[i] != INVALID_SOCKET; i++ );
+	if ( i == dtblsize ) {
+		WSASetLastError( WSAEMFILE );
+	} else {
+		slapd_ws_sockets[i] = s;
+	}
+	ldap_pvt_thread_mutex_unlock( &slapd_ws_mutex );
+	return i;
+}
+
+void
+slapd_sockdel( ber_socket_t s )
+{
+	ldap_pvt_thread_mutex_lock( &slapd_ws_mutex );
+	slapd_ws_sockets[s] = INVALID_SOCKET;
+	ldap_pvt_thread_mutex_unlock( &slapd_ws_mutex );
+}
+
+ber_socket_t
+slapd_sock2fd( ber_socket_t s )
+{
+	ber_socket_t i;
+	for ( i=0; i<dtblsize && slapd_ws_sockets[i] != s; i++);
+	if ( i == dtblsize )
+		i = -1;
+	return i;
+}
+#endif
+
 /*
  * Add a descriptor to daemon control
  *
@@ -704,9 +840,7 @@
 
 	ldap_pvt_thread_mutex_unlock( &slap_daemon.sd_mutex );
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 	WAKE_LISTENER(1);
-#endif /* SLAP_LIGHTWEIGHT_DISPATCHER */
 }
 
 /*
@@ -854,7 +988,10 @@
 {
 	Debug( LDAP_DEBUG_CONNS, "daemon: closing %ld\n",
 		(long) s, 0, 0 );
-	tcp_close(s);
+	tcp_close( SLAP_FD2SOCK(s) );
+#ifdef HAVE_WINSOCK
+	slapd_sockdel( s );
+#endif
 }
 
 static void
@@ -1109,6 +1246,7 @@
 	int err, addrlen = 0;
 	struct sockaddr **sal, **psal;
 	int socktype = SOCK_STREAM;	/* default to COTS */
+	ber_socket_t s;
 
 #if defined(LDAP_PF_LOCAL) || defined(SLAP_X_LISTENER_MOD)
 	/*
@@ -1128,9 +1266,7 @@
 
 	l.sl_url.bv_val = NULL;
 	l.sl_mute = 0;
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 	l.sl_busy = 0;
-#endif /* SLAP_LIGHTWEIGHT_DISPATCHER */
 
 #ifndef HAVE_TLS
 	if( ldap_pvt_url_scheme2tls( lud->lud_scheme ) ) {
@@ -1228,8 +1364,8 @@
 		if( l.sl_is_udp ) socktype = SOCK_DGRAM;
 #endif /* LDAP_CONNECTIONLESS */
 
-		l.sl_sd = socket( (*sal)->sa_family, socktype, 0);
-		if ( l.sl_sd == AC_SOCKET_INVALID ) {
+		s = socket( (*sal)->sa_family, socktype, 0);
+		if ( s == AC_SOCKET_INVALID ) {
 			int err = sock_errno();
 			Debug( LDAP_DEBUG_ANY,
 				"daemon: %s socket() failed errno=%d (%s)\n",
@@ -1237,17 +1373,16 @@
 			sal++;
 			continue;
 		}
+		l.sl_sd = SLAP_SOCKNEW( s );
 
-#ifndef HAVE_WINSOCK
 		if ( l.sl_sd >= dtblsize ) {
 			Debug( LDAP_DEBUG_ANY,
 				"daemon: listener descriptor %ld is too great %ld\n",
 				(long) l.sl_sd, (long) dtblsize, 0 );
-			tcp_close( l.sl_sd );
+			tcp_close( s );
 			sal++;
 			continue;
 		}
-#endif /* ! HAVE_WINSOCK */
 
 #ifdef LDAP_PF_LOCAL
 		if ( (*sal)->sa_family == AF_LOCAL ) {
@@ -1258,7 +1393,7 @@
 #ifdef SO_REUSEADDR
 			/* enable address reuse */
 			tmp = 1;
-			rc = setsockopt( l.sl_sd, SOL_SOCKET, SO_REUSEADDR,
+			rc = setsockopt( s, SOL_SOCKET, SO_REUSEADDR,
 				(char *) &tmp, sizeof(tmp) );
 			if ( rc == AC_SOCKET_ERROR ) {
 				int err = sock_errno();
@@ -1278,7 +1413,7 @@
 #ifdef IPV6_V6ONLY
 			/* Try to use IPv6 sockets for IPv6 only */
 			tmp = 1;
-			rc = setsockopt( l.sl_sd, IPPROTO_IPV6, IPV6_V6ONLY,
+			rc = setsockopt( s , IPPROTO_IPV6, IPV6_V6ONLY,
 				(char *) &tmp, sizeof(tmp) );
 			if ( rc == AC_SOCKET_ERROR ) {
 				int err = sock_errno();
@@ -1296,7 +1431,7 @@
 #ifdef LOCAL_CREDS
 			{
 				int one = 1;
-				setsockopt( l.sl_sd, 0, LOCAL_CREDS, &one, sizeof( one ) );
+				setsockopt( s, 0, LOCAL_CREDS, &one, sizeof( one ) );
 			}
 #endif /* LOCAL_CREDS */
 
@@ -1320,7 +1455,7 @@
 				old_umask = umask( 0 );
 			}
 #endif /* LDAP_PF_LOCAL */
-			rc = bind( l.sl_sd, *sal, addrlen );
+			rc = bind( s, *sal, addrlen );
 #ifdef LDAP_PF_LOCAL
 			if ( (*sal)->sa_family == AF_LOCAL ) {
 				umask( old_umask );
@@ -1332,7 +1467,7 @@
 			Debug( LDAP_DEBUG_ANY,
 				"daemon: bind(%ld) failed errno=%d (%s)\n",
 				(long)l.sl_sd, err, sock_errstr( err ) );
-			tcp_close( l.sl_sd );
+			tcp_close( s );
 			sal++;
 			continue;
 		}
@@ -1506,8 +1641,8 @@
 slapd_daemon_destroy( void )
 {
 	connections_destroy();
-	tcp_close( wake_sds[1] );
-	tcp_close( wake_sds[0] );
+	tcp_close( SLAP_FD2SOCK(wake_sds[1]) );
+	tcp_close( SLAP_FD2SOCK(wake_sds[0]) );
 	sockdestroy();
 
 #ifdef HAVE_SLP
@@ -1566,7 +1701,7 @@
 {
 	Sockaddr		from;
 
-	ber_socket_t s;
+	ber_socket_t s, sfd;
 	ber_socklen_t len = sizeof(from);
 	Connection *c;
 	slap_ssf_t ssf = 0;
@@ -1606,15 +1741,13 @@
 	from.sa_un_addr.sun_path[0] = '\0';
 #  endif /* LDAP_PF_LOCAL */
 
-	s = accept( sl->sl_sd, (struct sockaddr *) &from, &len );
+	s = accept( SLAP_FD2SOCK( sl->sl_sd ), (struct sockaddr *) &from, &len );
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 	/* Resume the listener FD to allow concurrent-processing of
 	 * additional incoming connections.
 	 */
 	sl->sl_busy = 0;
 	WAKE_LISTENER(1);
-#endif /* SLAP_LIGHTWEIGHT_DISPATCHER */
 
 	if ( s == AC_SOCKET_INVALID ) {
 		int err = sock_errno();
@@ -1641,24 +1774,23 @@
 		ldap_pvt_thread_yield();
 		return 0;
 	}
+	sfd = SLAP_SOCKNEW( s );
 
-#ifndef HAVE_WINSOCK
 	/* make sure descriptor number isn't too great */
-	if ( s >= dtblsize ) {
+	if ( sfd >= dtblsize ) {
 		Debug( LDAP_DEBUG_ANY,
 			"daemon: %ld beyond descriptor table size %ld\n",
-			(long) s, (long) dtblsize, 0 );
+			(long) sfd, (long) dtblsize, 0 );
 
-		slapd_close(s);
+		tcp_close(s);
 		ldap_pvt_thread_yield();
 		return 0;
 	}
-#endif /* ! HAVE_WINSOCK */
 
 #ifdef LDAP_DEBUG
 	ldap_pvt_thread_mutex_lock( &slap_daemon.sd_mutex );
 	/* newly accepted stream should not be in any of the FD SETS */
-	assert( SLAP_SOCK_NOT_ACTIVE( s ));
+	assert( SLAP_SOCK_NOT_ACTIVE( sfd ));
 	ldap_pvt_thread_mutex_unlock( &slap_daemon.sd_mutex );
 #endif /* LDAP_DEBUG */
 
@@ -1679,7 +1811,7 @@
 			int err = sock_errno();
 			Debug( LDAP_DEBUG_ANY,
 				"slapd(%ld): setsockopt(SO_KEEPALIVE) failed "
-				"errno=%d (%s)\n", (long) s, err, sock_errstr(err) );
+				"errno=%d (%s)\n", (long) sfd, err, sock_errstr(err) );
 		}
 #endif /* SO_KEEPALIVE */
 #ifdef TCP_NODELAY
@@ -1691,7 +1823,7 @@
 			int err = sock_errno();
 			Debug( LDAP_DEBUG_ANY,
 				"slapd(%ld): setsockopt(TCP_NODELAY) failed "
-				"errno=%d (%s)\n", (long) s, err, sock_errstr(err) );
+				"errno=%d (%s)\n", (long) sfd, err, sock_errstr(err) );
 		}
 #endif /* TCP_NODELAY */
 	}
@@ -1699,7 +1831,7 @@
 
 	Debug( LDAP_DEBUG_CONNS,
 		"daemon: listen=%ld, new connection on %ld\n",
-		(long) sl->sl_sd, (long) s, 0 );
+		(long) sl->sl_sd, (long) sfd, 0 );
 
 	cflag = 0;
 	switch ( from.sa_addr.sa_family ) {
@@ -1771,7 +1903,7 @@
 		break;
 
 	default:
-		slapd_close(s);
+		slapd_close(sfd);
 		return 0;
 	}
 
@@ -1806,11 +1938,11 @@
 				/* DENY ACCESS */
 				Statslog( LDAP_DEBUG_STATS,
 					"fd=%ld DENIED from %s (%s)\n",
-					(long) s,
+					(long) sfd,
 					dnsname != NULL ? dnsname : SLAP_STRING_UNKNOWN,
 					peeraddr != NULL ? peeraddr : SLAP_STRING_UNKNOWN,
 					0, 0 );
-				slapd_close(s);
+				slapd_close(sfd);
 				return 0;
 			}
 		}
@@ -1820,7 +1952,7 @@
 #ifdef HAVE_TLS
 	if ( sl->sl_is_tls ) cflag |= CONN_IS_TLS;
 #endif
-	c = connection_init(s, sl,
+	c = connection_init(sfd, sl,
 		dnsname != NULL ? dnsname : SLAP_STRING_UNKNOWN,
 		peername, cflag, ssf,
 		authid.bv_val ? &authid : NULL
@@ -1831,20 +1963,19 @@
 	if( !c ) {
 		Debug( LDAP_DEBUG_ANY,
 			"daemon: connection_init(%ld, %s, %s) failed.\n",
-			(long) s, peername, sl->sl_name.bv_val );
-		slapd_close(s);
+			(long) sfd, peername, sl->sl_name.bv_val );
+		slapd_close(sfd);
 		return 0;
 	}
 
 	Statslog( LDAP_DEBUG_STATS,
 		"conn=%ld fd=%ld ACCEPT from %s (%s)\n",
-		c->c_connid, (long) s, peername, sl->sl_name.bv_val,
+		c->c_connid, (long) sfd, peername, sl->sl_name.bv_val,
 		0 );
 
 	return 0;
 }
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 static void*
 slap_listener_thread(
 	void* ctx,
@@ -1885,7 +2016,6 @@
 	}
 	return rc;
 }
-#endif /* SLAP_LIGHTWEIGHT_DISPATCHER */
 
 static void *
 slapd_daemon_task(
@@ -1927,7 +2057,7 @@
 			continue;
 #endif /* LDAP_CONNECTIONLESS */
 
-		if ( listen( slap_listeners[l]->sl_sd, SLAPD_LISTEN_BACKLOG ) == -1 ) {
+		if ( listen( SLAP_FD2SOCK( slap_listeners[l]->sl_sd ), SLAPD_LISTEN_BACKLOG ) == -1 ) {
 			int err = sock_errno();
 
 #ifdef LDAP_PF_INET6
@@ -1972,16 +2102,14 @@
 			return (void*)-1;
 		}
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 		/* make the listening socket non-blocking */
-		if ( ber_pvt_socket_set_nonblock( slap_listeners[l]->sl_sd, 1 ) < 0 ) {
+		if ( ber_pvt_socket_set_nonblock( SLAP_FD2SOCK( slap_listeners[l]->sl_sd ), 1 ) < 0 ) {
 			Debug( LDAP_DEBUG_ANY, "slapd_daemon_task: "
 				"set nonblocking on a listening socket failed\n",
 				0, 0, 0 );
 			slapd_shutdown = 2;
 			return (void*)-1;
 		}
-#endif /* SLAP_LIGHTWEIGHT_DISPATCHER */
 
 		slapd_add( slap_listeners[l]->sl_sd, 0, slap_listeners[l] );
 	}
@@ -2061,11 +2189,7 @@
 
 			if ( lr->sl_sd == AC_SOCKET_INVALID ) continue;
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 			if ( lr->sl_mute || lr->sl_busy )
-#else /* ! SLAP_LIGHTWEIGHT_DISPATCHER */
-			if ( lr->sl_mute )
-#endif /* ! SLAP_LIGHTWEIGHT_DISPATCHER */
 			{
 				SLAP_SOCK_CLR_READ( lr->sl_sd );
 			} else {
@@ -2140,7 +2264,6 @@
 				continue;
 			}
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 			if ( lr->sl_busy ) {
 				Debug( LDAP_DEBUG_CONNS,
 					"daemon: " SLAP_EVENT_FNAME ": "
@@ -2148,7 +2271,6 @@
 					lr->sl_sd, 0, 0 );
 				continue;
 			}
-#endif /* SLAP_LIGHTWEIGHT_DISPATCHER */
 
 			Debug( LDAP_DEBUG_CONNS,
 				"daemon: " SLAP_EVENT_FNAME ": "
@@ -2207,7 +2329,7 @@
 			char c[BUFSIZ];
 			SLAP_EVENT_CLR_READ( wake_sds[0] );
 			waking = 0;
-			tcp_read( wake_sds[0], c, sizeof(c) );
+			tcp_read( SLAP_FD2SOCK(wake_sds[0]), c, sizeof(c) );
 			Debug( LDAP_DEBUG_CONNS, "daemon: waked\n", 0, 0, 0 );
 			continue;
 		}
@@ -2231,11 +2353,7 @@
 			SLAP_EVENT_CLR_WRITE( slap_listeners[l]->sl_sd );
 			ns--;
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 			rc = slap_listener_activate( slap_listeners[l] );
-#else /* ! SLAP_LIGHTWEIGHT_DISPATCHER */
-			rc = slap_listener( slap_listeners[l] );
-#endif /* ! SLAP_LIGHTWEIGHT_DISPATCHER */
 		}
 
 		/* bypass the following tests if no descriptors left */
@@ -2247,19 +2365,6 @@
 		}
 
 		Debug( LDAP_DEBUG_CONNS, "daemon: activity on:", 0, 0, 0 );
-#ifdef HAVE_WINSOCK
-		nrfds = readfds.fd_count;
-		nwfds = writefds.fd_count;
-		for ( i = 0; i < readfds.fd_count; i++ ) {
-			Debug( LDAP_DEBUG_CONNS, " %d%s",
-				readfds.fd_array[i], "r", 0 );
-		}
-		for ( i = 0; i < writefds.fd_count; i++ ) {
-			Debug( LDAP_DEBUG_CONNS, " %d%s",
-				writefds.fd_array[i], "w", 0 );
-		}
-
-#else /* ! HAVE_WINSOCK */
 		nrfds = 0;
 		nwfds = 0;
 		for ( i = 0; i < nfds; i++ ) {
@@ -2282,18 +2387,13 @@
 			}
 			if ( ns <= 0 ) break;
 		}
-#endif /* ! HAVE_WINSOCK */
 		Debug( LDAP_DEBUG_CONNS, "\n", 0, 0, 0 );
 
 		/* loop through the writers */
 		for ( i = 0; nwfds > 0; i++ ) {
 			ber_socket_t wd;
-#ifdef HAVE_WINSOCK
-			wd = writefds.fd_array[i];
-#else /* ! HAVE_WINSOCK */
 			if ( ! SLAP_EVENT_IS_WRITE( i ) ) continue;
 			wd = i;
-#endif /* ! HAVE_WINSOCK */
 
 			SLAP_EVENT_CLR_WRITE( wd );
 			nwfds--;
@@ -2321,12 +2421,8 @@
 
 		for ( i = 0; nrfds > 0; i++ ) {
 			ber_socket_t rd;
-#ifdef HAVE_WINSOCK
-			rd = readfds.fd_array[i];
-#else /* ! HAVE_WINSOCK */
 			if ( ! SLAP_EVENT_IS_READ( i ) ) continue;
 			rd = i;
-#endif /* ! HAVE_WINSOCK */
 			SLAP_EVENT_CLR_READ( rd );
 			nrfds--;
 
@@ -2339,11 +2435,7 @@
 			 * active.
 			 */
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 			connection_read_activate( rd );
-#else /* ! SLAP_LIGHTWEIGHT_DISPATCHER */
-			connection_read( rd );
-#endif /* ! SLAP_LIGHTWEIGHT_DISPATCHER */
 		}
 #else	/* !SLAP_EVENTS_ARE_INDEXED */
 	/* FIXME */
@@ -2366,7 +2458,7 @@
 		Debug( LDAP_DEBUG_CONNS, "daemon: activity on:", 0, 0, 0 );
 
 		for ( i = 0; i < ns; i++ ) {
-			int	r, w;
+			int	r, w, fd;
 
 			/* Don't log listener events */
 			if ( SLAP_EVENT_IS_LISTENER( i )
@@ -2378,13 +2470,14 @@
 				continue;
 			}
 
+			fd = SLAP_EVENT_FD( i );
 			/* Don't log internal wake events */
-			if ( SLAP_EVENT_FD( i ) == wake_sds[0] ) continue;
+			if ( fd == wake_sds[0] ) continue;
 
 			r = SLAP_EVENT_IS_READ( i );
 			w = SLAP_EVENT_IS_WRITE( i );
 			if ( r || w ) {
-				Debug( LDAP_DEBUG_CONNS, " %d%s%s", SLAP_EVENT_FD(i),
+				Debug( LDAP_DEBUG_CONNS, " %d%s%s", fd,
 				    r ? "r" : "", w ? "w" : "" );
 			}
 		}
@@ -2395,11 +2488,7 @@
 			int rc = 1, fd;
 
 			if ( SLAP_EVENT_IS_LISTENER( i ) ) {
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 				rc = slap_listener_activate( SLAP_EVENT_LISTENER( i ) );
-#else /* ! SLAP_LIGHTWEIGHT_DISPATCHER */
-				rc = slap_listener( SLAP_EVENT_LISTENER( i ) );
-#endif /* ! SLAP_LIGHTWEIGHT_DISPATCHER */
 			}
 
 			/* If we found a regular listener, rc is now zero, and we
@@ -2413,7 +2502,7 @@
 				if ( fd == wake_sds[0] ) {
 					char c[BUFSIZ];
 					waking = 0;
-					tcp_read( wake_sds[0], c, sizeof(c) );
+					tcp_read( SLAP_FD2SOCK(wake_sds[0]), c, sizeof(c) );
 					break;
 				}
 
@@ -2441,17 +2530,7 @@
 						fd, 0, 0 );
 
 					SLAP_EVENT_CLR_READ( i );
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 					connection_read_activate( fd );
-#else /* ! SLAP_LIGHTWEIGHT_DISPATCHER */
-					/*
-					 * NOTE: it is possible that the connection was closed
-					 * and that the stream is now inactive.
-					 * connection_read() must valid the stream is still
-					 * active.
-					 */
-					connection_read( fd );
-#endif /* ! SLAP_LIGHTWEIGHT_DISPATCHER */
 				} else {
 					Debug( LDAP_DEBUG_CONNS,
 						"daemon: hangup on %d\n", fd, 0, 0 );

Modified: openldap/vendor/openldap-release/servers/slapd/filter.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/filter.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/filter.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* filter.c - routines for parsing and dealing with filters */
-/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.134.2.8 2007/10/18 01:35:12 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.134.2.10 2007/11/09 15:15:17 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -607,7 +607,8 @@
 
 simple:
 		value = f->f_av_value;
-		if ( f->f_av_desc->ad_type->sat_equality->smr_usage & SLAP_MR_MUTATION_NORMALIZER ) {
+		if ( f->f_av_desc->ad_type->sat_equality &&
+			( f->f_av_desc->ad_type->sat_equality->smr_usage & SLAP_MR_MUTATION_NORMALIZER )) {
 			f->f_av_desc->ad_type->sat_equality->smr_normalize(
 				(SLAP_MR_DENORMALIZE|SLAP_MR_VALUE_OF_ASSERTION_SYNTAX),
 				NULL, NULL, &f->f_av_value, &value, op->o_tmpmemctx );

Modified: openldap/vendor/openldap-release/servers/slapd/init.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/init.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/init.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* init.c - initialize various things */
-/* $OpenLDAP: pkg/ldap/servers/slapd/init.c,v 1.97.2.6 2007/09/27 21:38:25 ralf Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/init.c,v 1.97.2.7 2007/11/07 20:58:38 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -67,7 +67,7 @@
 int		slap_tool_thread_max = 1;
 ldap_pvt_thread_mutex_t	gmtime_mutex;
 
-slap_counters_t			slap_counters;
+slap_counters_t			slap_counters, *slap_counters_list;
 
 static const char* slap_name = NULL;
 int slapMode = SLAP_UNDEFINED_MODE;
@@ -76,7 +76,6 @@
 slap_init( int mode, const char *name )
 {
 	int rc;
-	int i;
 
 	assert( mode );
 
@@ -144,27 +143,12 @@
 		ldap_pvt_thread_pool_init( &connection_pool,
 				connection_pool_max, 0);
 
-		ldap_pvt_thread_mutex_init( &slap_counters.sc_sent_mutex );
-		ldap_pvt_thread_mutex_init( &slap_counters.sc_ops_mutex );
-		ldap_pvt_mp_init( slap_counters.sc_bytes );
-		ldap_pvt_mp_init( slap_counters.sc_pdu );
-		ldap_pvt_mp_init( slap_counters.sc_entries );
-		ldap_pvt_mp_init( slap_counters.sc_refs );
+		slap_counters_init( &slap_counters );
 
-		ldap_pvt_mp_init( slap_counters.sc_ops_initiated );
-		ldap_pvt_mp_init( slap_counters.sc_ops_completed );
-
 		ldap_pvt_thread_mutex_init( &slapd_rq.rq_mutex );
 		LDAP_STAILQ_INIT( &slapd_rq.task_list );
 		LDAP_STAILQ_INIT( &slapd_rq.run_list );
 
-#ifdef SLAPD_MONITOR
-		for ( i = 0; i < SLAP_OP_LAST; i++ ) {
-			ldap_pvt_mp_init( slap_counters.sc_ops_initiated_[ i ] );
-			ldap_pvt_mp_init( slap_counters.sc_ops_completed_[ i ] );
-		}
-#endif /* SLAPD_MONITOR */
-
 		ldap_pvt_thread_mutex_init( &gmtime_mutex );
 		slap_passwd_init();
 
@@ -264,7 +248,6 @@
 int slap_destroy(void)
 {
 	int rc;
-	int i;
 
 	Debug( LDAP_DEBUG_TRACE,
 		"%s destroy: freeing system resources.\n",
@@ -288,24 +271,8 @@
 
 	switch ( slapMode & SLAP_MODE ) {
 	case SLAP_SERVER_MODE:
-
 	case SLAP_TOOL_MODE:
-
-		ldap_pvt_thread_mutex_destroy( &slap_counters.sc_sent_mutex );
-		ldap_pvt_thread_mutex_destroy( &slap_counters.sc_ops_mutex );
-		ldap_pvt_mp_clear( slap_counters.sc_bytes );
-		ldap_pvt_mp_clear( slap_counters.sc_pdu );
-		ldap_pvt_mp_clear( slap_counters.sc_entries );
-		ldap_pvt_mp_clear( slap_counters.sc_refs );
-		ldap_pvt_mp_clear( slap_counters.sc_ops_initiated );
-		ldap_pvt_mp_clear( slap_counters.sc_ops_completed );
-
-#ifdef SLAPD_MONITOR
-		for ( i = 0; i < SLAP_OP_LAST; i++ ) {
-			ldap_pvt_mp_clear( slap_counters.sc_ops_initiated_[ i ] );
-			ldap_pvt_mp_clear( slap_counters.sc_ops_completed_[ i ] );
-		}
-#endif /* SLAPD_MONITOR */
+		slap_counters_destroy( &slap_counters );
 		break;
 
 	default:
@@ -324,3 +291,46 @@
 	/* should destroy the above mutex */
 	return rc;
 }
+
+void slap_counters_init( slap_counters_t *sc )
+{
+	int i;
+
+	ldap_pvt_thread_mutex_init( &sc->sc_mutex );
+	ldap_pvt_mp_init( sc->sc_bytes );
+	ldap_pvt_mp_init( sc->sc_pdu );
+	ldap_pvt_mp_init( sc->sc_entries );
+	ldap_pvt_mp_init( sc->sc_refs );
+
+	ldap_pvt_mp_init( sc->sc_ops_initiated );
+	ldap_pvt_mp_init( sc->sc_ops_completed );
+
+#ifdef SLAPD_MONITOR
+	for ( i = 0; i < SLAP_OP_LAST; i++ ) {
+		ldap_pvt_mp_init( sc->sc_ops_initiated_[ i ] );
+		ldap_pvt_mp_init( sc->sc_ops_completed_[ i ] );
+	}
+#endif /* SLAPD_MONITOR */
+}
+
+void slap_counters_destroy( slap_counters_t *sc )
+{
+	int i;
+
+	ldap_pvt_thread_mutex_destroy( &sc->sc_mutex );
+	ldap_pvt_mp_clear( sc->sc_bytes );
+	ldap_pvt_mp_clear( sc->sc_pdu );
+	ldap_pvt_mp_clear( sc->sc_entries );
+	ldap_pvt_mp_clear( sc->sc_refs );
+
+	ldap_pvt_mp_clear( sc->sc_ops_initiated );
+	ldap_pvt_mp_clear( sc->sc_ops_completed );
+
+#ifdef SLAPD_MONITOR
+	for ( i = 0; i < SLAP_OP_LAST; i++ ) {
+		ldap_pvt_mp_clear( sc->sc_ops_initiated_[ i ] );
+		ldap_pvt_mp_clear( sc->sc_ops_completed_[ i ] );
+	}
+#endif /* SLAPD_MONITOR */
+}
+

Modified: openldap/vendor/openldap-release/servers/slapd/limits.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/limits.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/limits.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* limits.c - routines to handle regex-based size and time limits */
-/* $OpenLDAP: pkg/ldap/servers/slapd/limits.c,v 1.73.2.4 2007/08/31 23:13:59 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/limits.c,v 1.73.2.5 2007/11/15 00:37:15 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -1118,6 +1118,18 @@
 			op->ors_slimit = SLAP_NO_LIMIT;
 		}
 
+		/* if paged results and slimit are requested */	
+		if ( get_pagedresults( op ) > SLAP_CONTROL_IGNORED &&
+			op->ors_slimit != SLAP_NO_LIMIT ) {
+			PagedResultsState *ps = op->o_pagedresults_state;
+			int total = op->ors_slimit - ps->ps_count;
+			if ( total > 0 ) {
+				op->ors_slimit = total;
+			} else {
+				op->ors_slimit = 0;
+			}
+		}
+
 	/* if not root, get appropriate limits */
 	} else {
 		( void ) limits_get( op, &op->o_ndn, &op->ors_limit );

Modified: openldap/vendor/openldap-release/servers/slapd/main.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/main.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/main.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/main.c,v 1.239.2.9 2007/09/27 21:38:25 ralf Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/main.c,v 1.239.2.10 2007/11/08 19:30:04 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -832,6 +832,12 @@
 	}
 #endif
 
+#ifdef HAVE_CYRUS_SASL
+	if( sasl_host == NULL ) {
+		sasl_host = ch_strdup( global_host );
+	}
+#endif
+
 	(void) SIGNAL( LDAP_SIGUSR1, slap_sig_wake );
 	(void) SIGNAL( LDAP_SIGUSR2, slap_sig_shutdown );
 

Modified: openldap/vendor/openldap-release/servers/slapd/mods.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/mods.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/mods.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/mods.c,v 1.59.2.3 2007/09/29 09:55:21 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/mods.c,v 1.59.2.4 2007/11/27 19:52:32 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -69,7 +69,7 @@
 	if ( a != NULL ) {
 		MatchingRule	*mr;
 		struct berval *cvals;
-		int		rc, i, j, p;
+		int		rc, i, p;
 		unsigned flags;
 
 		mr = mod->sm_desc->ad_type->sat_equality;

Modified: openldap/vendor/openldap-release/servers/slapd/operation.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/operation.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/operation.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* operation.c - routines to deal with pending ldap operations */
-/* $OpenLDAP: pkg/ldap/servers/slapd/operation.c,v 1.75.2.3 2007/08/31 23:13:59 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/operation.c,v 1.75.2.4 2007/11/07 20:58:38 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -38,26 +38,27 @@
 #endif
 
 static ldap_pvt_thread_mutex_t	slap_op_mutex;
-static LDAP_STAILQ_HEAD(s_o, Operation)	slap_free_ops;
 static time_t last_time;
 static int last_incr;
 
 void slap_op_init(void)
 {
 	ldap_pvt_thread_mutex_init( &slap_op_mutex );
-	LDAP_STAILQ_INIT(&slap_free_ops);
 }
 
 void slap_op_destroy(void)
 {
-	Operation *o;
+	ldap_pvt_thread_mutex_destroy( &slap_op_mutex );
+}
 
-	while ( (o = LDAP_STAILQ_FIRST( &slap_free_ops )) != NULL) {
-		LDAP_STAILQ_REMOVE_HEAD( &slap_free_ops, o_next );
-		LDAP_STAILQ_NEXT(o, o_next) = NULL;
-		ch_free( o );
+static void
+slap_op_q_destroy( void *key, void *data )
+{
+	Operation *op, *op2;
+	for ( op = data; op; op = op2 ) {
+		op2 = LDAP_STAILQ_NEXT( op, o_next );
+		ber_memfree_x( op, NULL );
 	}
-	ldap_pvt_thread_mutex_destroy( &slap_op_mutex );
 }
 
 void
@@ -72,7 +73,7 @@
 }
 
 void
-slap_op_free( Operation *op )
+slap_op_free( Operation *op, void *ctx )
 {
 	OperationBuffer *opbuf;
 
@@ -110,15 +111,22 @@
 	}
 #endif /* defined( LDAP_SLAPI ) */
 
-
 	opbuf = (OperationBuffer *) op;
 	memset( opbuf, 0, sizeof(*opbuf) );
 	op->o_hdr = &opbuf->ob_hdr;
 	op->o_controls = opbuf->ob_controls;
 
-	ldap_pvt_thread_mutex_lock( &slap_op_mutex );
-	LDAP_STAILQ_INSERT_HEAD( &slap_free_ops, op, o_next );
-	ldap_pvt_thread_mutex_unlock( &slap_op_mutex );
+	if ( ctx ) {
+		Operation *op2;
+		void *otmp = NULL;
+		ldap_pvt_thread_pool_getkey( ctx, (void *)slap_op_free, &otmp, NULL );
+		op2 = otmp;
+		LDAP_STAILQ_NEXT( op, o_next ) = op2;
+		ldap_pvt_thread_pool_setkey( ctx, (void *)slap_op_free, (void *)op,
+			slap_op_q_destroy );
+	} else {
+		ber_memfree_x( op, NULL );
+	}
 }
 
 void
@@ -141,16 +149,21 @@
     BerElement		*ber,
     ber_int_t	msgid,
     ber_tag_t	tag,
-    ber_int_t	id )
+    ber_int_t	id,
+	void *ctx )
 {
-	Operation	*op;
+	Operation	*op = NULL;
 
-	ldap_pvt_thread_mutex_lock( &slap_op_mutex );
-	if ((op = LDAP_STAILQ_FIRST( &slap_free_ops ))) {
-		LDAP_STAILQ_REMOVE_HEAD( &slap_free_ops, o_next );
+	if ( ctx ) {
+		void *otmp = NULL;
+		ldap_pvt_thread_pool_getkey( ctx, (void *)slap_op_free, &otmp, NULL );
+		if ( otmp ) {
+			op = otmp;
+			otmp = LDAP_STAILQ_NEXT( op, o_next );
+			ldap_pvt_thread_pool_setkey( ctx, (void *)slap_op_free, otmp,
+				slap_op_q_destroy );
+		}
 	}
-	ldap_pvt_thread_mutex_unlock( &slap_op_mutex );
-
 	if (!op) {
 		op = (Operation *) ch_calloc( 1, sizeof(OperationBuffer) );
 		op->o_hdr = &((OperationBuffer *) op)->ob_hdr;

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/accesslog.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/accesslog.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/accesslog.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* accesslog.c - log operations for audit/history purposes */
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/accesslog.c,v 1.37.2.10 2007/09/29 09:55:22 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/accesslog.c,v 1.37.2.13 2007/12/10 18:03:30 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2005-2007 The OpenLDAP Foundation.
@@ -67,6 +67,7 @@
 	Entry *li_old;
 	log_attr *li_oldattrs;
 	int li_success;
+	int li_unlock;
 	ldap_pvt_thread_rmutex_t li_op_rmutex;
 	ldap_pvt_thread_mutex_t li_log_mutex;
 } log_info;
@@ -515,11 +516,13 @@
 }
 
 static void
-log_age_unparse( int age, struct berval *agebv )
+log_age_unparse( int age, struct berval *agebv, size_t size )
 {
-	int dd, hh, mm, ss;
+	int dd, hh, mm, ss, len;
 	char *ptr;
 
+	assert( size > 0 );
+
 	ss = age % 60;
 	age /= 60;
 	mm = age % 60;
@@ -530,11 +533,22 @@
 
 	ptr = agebv->bv_val;
 
-	if ( dd ) 
-		ptr += sprintf( ptr, "%d+", dd );
-	ptr += sprintf( ptr, "%02d:%02d", hh, mm );
-	if ( ss )
-		ptr += sprintf( ptr, ":%02d", ss );
+	if ( dd ) {
+		len = snprintf( ptr, size, "%d+", dd );
+		assert( len >= 0 && len < size );
+		size -= len;
+		ptr += len;
+	}
+	len = snprintf( ptr, size, "%02d:%02d", hh, mm );
+	assert( len >= 0 && len < size );
+	size -= len;
+	ptr += len;
+	if ( ss ) {
+		len = snprintf( ptr, size, ":%02d", ss );
+		assert( len >= 0 && len < size );
+		size -= len;
+		ptr += len;
+	}
 
 	agebv->bv_len = ptr - agebv->bv_val;
 }
@@ -704,11 +718,11 @@
 				break;
 			}
 			agebv.bv_val = agebuf;
-			log_age_unparse( li->li_age, &agebv );
+			log_age_unparse( li->li_age, &agebv, sizeof( agebuf ) );
 			agebv.bv_val[agebv.bv_len] = ' ';
 			agebv.bv_len++;
 			cyclebv.bv_val = agebv.bv_val + agebv.bv_len;
-			log_age_unparse( li->li_cycle, &cyclebv );
+			log_age_unparse( li->li_cycle, &cyclebv, sizeof( agebuf ) - agebv.bv_len );
 			agebv.bv_len += cyclebv.bv_len;
 			value_add_one( &c->rvalue_vals, &agebv );
 			break;
@@ -845,7 +859,7 @@
 		case LOG_OLD:
 			li->li_oldf = str2filter( c->argv[1] );
 			if ( !li->li_oldf ) {
-				sprintf( c->cr_msg, "bad filter!" );
+				snprintf( c->cr_msg, sizeof( c->cr_msg ), "bad filter!" );
 				rc = 1;
 			}
 			break;
@@ -1165,8 +1179,8 @@
 	timestamp.bv_val = rdnbuf+STRLENOF(RDNEQ);
 	timestamp.bv_len = sizeof(rdnbuf) - STRLENOF(RDNEQ);
 	slap_timestamp( &op->o_time, &timestamp );
-	sprintf( timestamp.bv_val + timestamp.bv_len-1, ".%06dZ", op->o_tincr );
-	timestamp.bv_len += 7;
+	snprintf( timestamp.bv_val + timestamp.bv_len-1, sizeof(".123456Z"), ".%06dZ", op->o_tincr );
+	timestamp.bv_len += STRLENOF(".123456");
 
 	rdn.bv_len = STRLENOF(RDNEQ)+timestamp.bv_len;
 	ad_reqStart->ad_type->sat_equality->smr_normalize(
@@ -1190,8 +1204,8 @@
 
 	timestamp.bv_len = sizeof(rdnbuf) - STRLENOF(RDNEQ);
 	slap_timestamp( &op2->o_time, &timestamp );
-	sprintf( timestamp.bv_val + timestamp.bv_len-1, ".%06dZ", op2->o_tincr );
-	timestamp.bv_len += 7;
+	snprintf( timestamp.bv_val + timestamp.bv_len-1, sizeof(".123456Z"), ".%06dZ", op2->o_tincr );
+	timestamp.bv_len += STRLENOF(".123456");
 
 	attr_merge_normalize_one( e, ad_reqEnd, &timestamp, op->o_tmpmemctx );
 
@@ -1210,8 +1224,10 @@
 		attr_merge_one( e, ad_reqType, &lo->word, NULL );
 	}
 
-	rdn.bv_len = sprintf( rdn.bv_val, "%lu", op->o_connid );
-	attr_merge_one( e, ad_reqSession, &rdn, NULL );
+	rdn.bv_len = snprintf( rdn.bv_val, sizeof( rdnbuf ), "%lu", op->o_connid );
+	if ( rdn.bv_len >= 0 || rdn.bv_len < sizeof( rdnbuf ) ) {
+		attr_merge_one( e, ad_reqSession, &rdn, NULL );
+	} /* else? */
 
 	if ( BER_BVISNULL( &op->o_dn ) ) {
 		attr_merge_one( e, ad_reqAuthzID, (struct berval *)&slap_empty_bv,
@@ -1326,6 +1342,7 @@
 		ldap_pvt_thread_mutex_lock( &li->li_log_mutex );
 		old = li->li_old;
 		li->li_old = NULL;
+		li->li_unlock = 0;
 		ldap_pvt_thread_rmutex_unlock( &li->li_op_rmutex, op->o_tid );
 	}
 
@@ -1340,11 +1357,12 @@
 		ber_str2bv( rs->sr_text, 0, 0, &bv );
 		attr_merge_one( e, ad_reqMessage, &bv, NULL );
 	}
-	bv.bv_len = sprintf( timebuf, "%d", rs->sr_err );
-	bv.bv_val = timebuf;
+	bv.bv_len = snprintf( timebuf, sizeof( timebuf ), "%d", rs->sr_err );
+	if ( bv.bv_len >= 0 && bv.bv_len < sizeof( timebuf ) ) {
+		bv.bv_val = timebuf;
+		attr_merge_one( e, ad_reqResult, &bv, NULL );
+	}
 
-	attr_merge_one( e, ad_reqResult, &bv, NULL );
-
 	last_attr = attr_find( e->e_attrs, ad_reqResult );
 
 	switch( logop ) {
@@ -1556,20 +1574,28 @@
 			op->o_tmpfree( vals, op->o_tmpmemctx );
 		}
 		bv.bv_val = timebuf;
-		bv.bv_len = sprintf( bv.bv_val, "%d", rs->sr_nentries );
-		attr_merge_one( e, ad_reqEntries, &bv, NULL );
+		bv.bv_len = snprintf( bv.bv_val, sizeof( timebuf ), "%d", rs->sr_nentries );
+		if ( bv.bv_len >= 0 && bv.bv_len < sizeof( timebuf ) ) {
+			attr_merge_one( e, ad_reqEntries, &bv, NULL );
+		} /* else? */
 
-		bv.bv_len = sprintf( bv.bv_val, "%d", op->ors_tlimit );
-		attr_merge_one( e, ad_reqTimeLimit, &bv, NULL );
+		bv.bv_len = snprintf( bv.bv_val, sizeof( timebuf ), "%d", op->ors_tlimit );
+		if ( bv.bv_len >= 0 && bv.bv_len < sizeof( timebuf ) ) {
+			attr_merge_one( e, ad_reqTimeLimit, &bv, NULL );
+		} /* else? */
 
-		bv.bv_len = sprintf( bv.bv_val, "%d", op->ors_slimit );
-		attr_merge_one( e, ad_reqSizeLimit, &bv, NULL );
+		bv.bv_len = snprintf( bv.bv_val, sizeof( timebuf ), "%d", op->ors_slimit );
+		if ( bv.bv_len >= 0 && bv.bv_len < sizeof( timebuf ) ) {
+			attr_merge_one( e, ad_reqSizeLimit, &bv, NULL );
+		} /* else? */
 		break;
 
 	case LOG_EN_BIND:
 		bv.bv_val = timebuf;
-		bv.bv_len = sprintf( bv.bv_val, "%d", op->o_protocol );
-		attr_merge_one( e, ad_reqVersion, &bv, NULL );
+		bv.bv_len = snprintf( bv.bv_val, sizeof( timebuf ), "%d", op->o_protocol );
+		if ( bv.bv_len >= 0 && bv.bv_len < sizeof( timebuf ) ) {
+			attr_merge_one( e, ad_reqVersion, &bv, NULL );
+		} /* else? */
 		if ( op->orb_method == LDAP_AUTH_SIMPLE ) {
 			attr_merge_one( e, ad_reqMethod, &simple, NULL );
 		} else {
@@ -1663,13 +1689,40 @@
 }
 
 static int
+accesslog_mod_cleanup( Operation *op, SlapReply *rs )
+{
+	slap_callback *sc = op->o_callback;
+	slap_overinst *on = sc->sc_private;
+	log_info *li = on->on_bi.bi_private;
+	op->o_callback = sc->sc_next;
+
+	op->o_tmpfree( sc, op->o_tmpmemctx );
+
+	if ( li->li_unlock ) {
+		BackendInfo *bi = op->o_bd->bd_info;
+		op->o_bd->bd_info = (BackendInfo *)on;
+		accesslog_response( op, rs );
+		op->o_bd->bd_info = bi;
+	}
+	return 0;
+}
+
+static int
 accesslog_op_mod( Operation *op, SlapReply *rs )
 {
 	slap_overinst *on = (slap_overinst *)op->o_bd->bd_info;
 	log_info *li = on->on_bi.bi_private;
 
 	if ( li->li_ops & LOG_OP_WRITES ) {
+		slap_callback *cb = op->o_tmpalloc( sizeof( slap_callback ), op->o_tmpmemctx );
+		cb->sc_cleanup = accesslog_mod_cleanup;
+		cb->sc_response = NULL;
+		cb->sc_private = on;
+		cb->sc_next = op->o_callback;
+		op->o_callback = cb;
+
 		ldap_pvt_thread_rmutex_lock( &li->li_op_rmutex, op->o_tid );
+		li->li_unlock = 1;
 		if ( li->li_oldf && ( op->o_tag == LDAP_REQ_DELETE ||
 			op->o_tag == LDAP_REQ_MODIFY ||
 			( op->o_tag == LDAP_REQ_MODRDN && li->li_oldattrs ))) {
@@ -1743,8 +1796,10 @@
 
 	e = accesslog_entry( op, rs, LOG_EN_ABANDON, &op2 );
 	bv.bv_val = buf;
-	bv.bv_len = sprintf( buf, "%d", op->orn_msgid );
-	attr_merge_one( e, ad_reqId, &bv, NULL );
+	bv.bv_len = snprintf( buf, sizeof( buf ), "%d", op->orn_msgid );
+	if ( bv.bv_len >= 0 && bv.bv_len < sizeof( buf ) ) {
+		attr_merge_one( e, ad_reqId, &bv, NULL );
+	} /* else? */
 
 	op2.o_hdr = op->o_hdr;
 	op2.o_tag = LDAP_REQ_ADD;
@@ -1771,6 +1826,9 @@
 	slap_overinst *on = (slap_overinst *)op->o_bd->bd_info;
 	log_info *li = on->on_bi.bi_private;
 
+	if ( op->o_sync != SLAP_CONTROL_NONE )
+		return SLAP_CB_CONTINUE;
+
 	if ( rs->sr_entry != NULL
 		&& dn_match( &op->o_bd->be_nsuffix[0], &rs->sr_entry->e_nname ) )
 	{

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/auditlog.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/auditlog.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/auditlog.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* auditlog.c - log modifications for audit/history purposes */
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/auditlog.c,v 1.7.2.4 2007/08/31 23:14:05 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/auditlog.c,v 1.7.2.5 2007/11/27 19:59:20 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2005-2007 The OpenLDAP Foundation.
@@ -224,32 +224,6 @@
 	return 0;
 }
 
-static int
-auditlog_config(
-	BackendDB	*be,
-	const char	*fname,
-	int		lineno,
-	int		argc,
-	char	**argv
-)
-{
-	slap_overinst *on = (slap_overinst *) be->bd_info;
-	auditlog_data *ad = on->on_bi.bi_private;
-
-	/* history log file */
-	if ( strcasecmp( argv[0], "auditlog" ) == 0 ) {
-		if ( argc < 2 ) {
-			Debug( LDAP_DEBUG_ANY,
-	    "%s: line %d: missing filename in \"auditlog <filename>\" line\n",
-			    fname, lineno, 0 );
-				return( 1 );
-		}
-		ad->ad_logfile = ch_strdup( argv[1] );
-		return 0;
-	}
-	return SLAP_CONF_UNKNOWN;
-}
-
 int auditlog_initialize() {
 	int rc;
 

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/collect.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/collect.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/collect.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* collect.c - Demonstration of overlay code */
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/collect.c,v 1.5.2.2 2007/08/31 23:14:05 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/collect.c,v 1.5.2.3 2007/11/27 18:11:43 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2003-2007 The OpenLDAP Foundation.
@@ -58,12 +58,14 @@
 		collect_info *ci;
 		for ( ci = on->on_bi.bi_private; ci; ci = ci->ci_next ) {
 			struct berval bv;
+			int len;
 
-			bv.bv_len = ci->ci_dn.bv_len + 3 +
+			bv.bv_len = ci->ci_dn.bv_len + STRLENOF("\"\" ") +
 				ci->ci_ad->ad_cname.bv_len;
 			bv.bv_val = ch_malloc( bv.bv_len + 1 );
-			sprintf( bv.bv_val, "\"%s\" %s", ci->ci_dn.bv_val,
-				ci->ci_ad->ad_cname.bv_val );
+			len = snprintf( bv.bv_val, bv.bv_len + 1, "\"%s\" %s",
+				ci->ci_dn.bv_val, ci->ci_ad->ad_cname.bv_val );
+			assert( len == bv.bv_len );
 			ber_bvarray_add( &c->rvalue_vals, &bv );
 			rc = 0;
 		}

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/dds.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/dds.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/dds.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/dds.c,v 1.7.2.6 2007/09/29 09:55:22 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/dds.c,v 1.7.2.7 2007/12/10 17:51:41 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2005-2007 The OpenLDAP Foundation.
@@ -134,6 +134,9 @@
 
 	int		ndeletes, ntotdeletes;
 
+	int		rc;
+	char		*extra = "";
+
 	connection_fake_init( &conn, &opbuf, ctx );
 	op = &opbuf.ob_op;
 
@@ -184,10 +187,21 @@
 	op->o_tmpfree( op->ors_filterstr.bv_val, op->o_tmpmemctx );
 	filter_free_x( op, op->ors_filter );
 
-	if ( rs.sr_err != LDAP_SUCCESS ) {
-		Log1( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
-			"DDS expired objects lookup failed err=%d\n",
-			rs.sr_err );
+	rc = rs.sr_err;
+	switch ( rs.sr_err ) {
+	case LDAP_SUCCESS:
+		break;
+
+	case LDAP_NO_SUCH_OBJECT:
+		/* (ITS#5267) database not created yet? */
+		rs.sr_err = LDAP_SUCCESS;
+		extra = " (ignored)";
+		/* fallthru */
+
+	default:
+		Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
+			"DDS expired objects lookup failed err=%d%s\n",
+			rc, extra );
 		goto done;
 	}
 
@@ -1609,6 +1623,9 @@
 	slap_callback	sc = { 0 };
 	SlapReply	rs = { REP_RESULT };
 
+	int		rc;
+	char		*extra = "";
+
 	connection_fake_init( &conn, &opbuf, ctx );
 	op = &opbuf.ob_op;
 
@@ -1644,6 +1661,7 @@
 	op->o_callback = &sc;
 	sc.sc_response = dds_count_cb;
 	sc.sc_private = &di->di_num_dynamicObjects;
+	di->di_num_dynamicObjects = 0;
 
 	op->o_bd->bd_info = (BackendInfo *)on->on_info;
 	(void)op->o_bd->bd_info->bi_op_search( op, &rs );
@@ -1653,15 +1671,25 @@
 	op->o_tmpfree( op->ors_filterstr.bv_val, op->o_tmpmemctx );
 	filter_free_x( op, op->ors_filter );
 
-	if ( rs.sr_err == LDAP_SUCCESS ) {
+	rc = rs.sr_err;
+	switch ( rs.sr_err ) {
+	case LDAP_SUCCESS:
 		Log1( LDAP_DEBUG_STATS, LDAP_LEVEL_INFO,
 			"DDS non-expired=%d\n",
 			di->di_num_dynamicObjects );
+		break;
 
-	} else {
-		Log1( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
-			"DDS non-expired objects lookup failed err=%d\n",
-			rs.sr_err );
+	case LDAP_NO_SUCH_OBJECT:
+		/* (ITS#5267) database not created yet? */
+		rs.sr_err = LDAP_SUCCESS;
+		extra = " (ignored)";
+		/* fallthru */
+
+	default:
+		Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
+			"DDS non-expired objects lookup failed err=%d%s\n",
+			rc, extra );
+		break;
 	}
 
 	return rs.sr_err;

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/dynlist.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/dynlist.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/dynlist.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* dynlist.c - dynamic list overlay */
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/dynlist.c,v 1.20.2.10 2007/09/29 09:55:22 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/dynlist.c,v 1.20.2.11 2007/11/27 18:11:43 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2003-2007 The OpenLDAP Foundation.
@@ -1311,7 +1311,8 @@
 			if ( oc == NULL ) {
 				oc = oc_find( "groupOfURLs" );
 				if ( oc == NULL ) {
-					sprintf( cr->msg, "unable to fetch objectClass \"groupOfURLs\"" );
+					snprintf( cr->msg, sizeof( cr->msg),
+						"unable to fetch objectClass \"groupOfURLs\"" );
 					Debug( LDAP_DEBUG_ANY, "dynlist_db_open: %s.\n", cr->msg, 0, 0 );
 					return 1;
 				}
@@ -1324,7 +1325,8 @@
 			if ( ad == NULL ) {
 				rc = slap_str2ad( "memberURL", &ad, &text );
 				if ( rc != LDAP_SUCCESS ) {
-					sprintf( cr->msg, "unable to fetch attributeDescription \"memberURL\": %d (%s)",
+					snprintf( cr->msg, sizeof( cr->msg),
+						"unable to fetch attributeDescription \"memberURL\": %d (%s)",
 						rc, text );
 					Debug( LDAP_DEBUG_ANY, "dynlist_db_open: %s.\n", cr->msg, 0, 0 );
 					return 1;

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/memberof.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/memberof.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/memberof.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* memberof.c - back-reference for group membership */
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/memberof.c,v 1.2.2.4 2007/09/29 09:55:22 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/memberof.c,v 1.2.2.5 2007/12/10 17:47:05 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2005-2007 Pierangelo Masarati <ando at sys-net.it>
@@ -748,102 +748,133 @@
 	save_dn = op->o_dn;
 	save_ndn = op->o_ndn;
 
-	if ( MEMBEROF_DANGLING_CHECK( mo )
-			&& !get_relax( op )
-			&& memberof_isGroupOrMember( op, &iswhat ) == LDAP_SUCCESS
-			&& ( iswhat & MEMBEROF_IS_GROUP ) )
+	if ( memberof_isGroupOrMember( op, &iswhat ) == LDAP_SUCCESS
+		&& ( iswhat & MEMBEROF_IS_GROUP ) )
 	{
-		op->o_dn = op->o_bd->be_rootdn;
-		op->o_dn = op->o_bd->be_rootndn;
-		op->o_bd->bd_info = (BackendInfo *)on->on_info;
-	
-		assert( op->orm_modlist != NULL );
-	
-		for ( mlp = &op->orm_modlist; *mlp; ) {
-			Modifications	*ml = *mlp;
-			int		i;
-	
-			if ( !is_ad_subtype( ml->sml_desc, mo->mo_ad_member ) ) {
-				mlp = &ml->sml_next;
-				continue;
+		Modifications *ml;
+		int save_member = 0;
+
+		for ( ml = op->orm_modlist; ml; ml = ml->sml_next ) {
+			if ( ml->sml_desc == mo->mo_ad_member ) {
+				switch ( ml->sml_op ) {
+				case LDAP_MOD_DELETE:
+				case LDAP_MOD_REPLACE:
+					save_member = 1;
+					break;
+				}
 			}
-	
-			switch ( ml->sml_op ) {
-			case LDAP_MOD_DELETE:
-				/* we don't care about cancellations: if the value
-				 * exists, fine; if it doesn't, we let the underlying
-				 * database fail as appropriate; */
-				mlp = &ml->sml_next;
-				break;
-	
-			case LDAP_MOD_REPLACE:
-			case LDAP_MOD_ADD:
-				/* NOTE: right now, the attributeType we use
-				 * for member must have a normalized value */
-				assert( ml->sml_nvalues != NULL );
-	
-				for ( i = 0; !BER_BVISNULL( &ml->sml_nvalues[ i ] ); i++ ) {
-					int		rc;
-					Entry		*e;
-	
-					if ( be_entry_get_rw( op, &ml->sml_nvalues[ i ],
-							NULL, NULL, 0, &e ) == LDAP_SUCCESS )
-					{
-						be_entry_release_r( op, e );
-						continue;
+		}
+
+		if ( save_member ) {
+			BerVarray	vals = NULL;
+
+			op->o_dn = op->o_bd->be_rootdn;
+			op->o_dn = op->o_bd->be_rootndn;
+			op->o_bd->bd_info = (BackendInfo *)on->on_info;
+			rc = backend_attribute( op, NULL, &op->o_req_ndn,
+					mo->mo_ad_member, &vals, ACL_READ );
+			op->o_bd->bd_info = (BackendInfo *)on;
+			if ( rc == LDAP_SUCCESS && vals != NULL ) {
+				memberof_saved_member_set( op, &saved_member_vals, vals );
+				ber_bvarray_free_x( vals, op->o_tmpmemctx );
+			}
+		}
+
+		if ( MEMBEROF_DANGLING_CHECK( mo )
+				&& !get_relax( op ) )
+		{
+			op->o_dn = op->o_bd->be_rootdn;
+			op->o_dn = op->o_bd->be_rootndn;
+			op->o_bd->bd_info = (BackendInfo *)on->on_info;
+		
+			assert( op->orm_modlist != NULL );
+		
+			for ( mlp = &op->orm_modlist; *mlp; ) {
+				Modifications	*ml = *mlp;
+				int		i;
+		
+				if ( !is_ad_subtype( ml->sml_desc, mo->mo_ad_member ) ) {
+					mlp = &ml->sml_next;
+					continue;
+				}
+		
+				switch ( ml->sml_op ) {
+				case LDAP_MOD_DELETE:
+					/* we don't care about cancellations: if the value
+					 * exists, fine; if it doesn't, we let the underlying
+					 * database fail as appropriate; */
+					mlp = &ml->sml_next;
+					break;
+		
+				case LDAP_MOD_REPLACE:
+				case LDAP_MOD_ADD:
+					/* NOTE: right now, the attributeType we use
+					 * for member must have a normalized value */
+					assert( ml->sml_nvalues != NULL );
+		
+					for ( i = 0; !BER_BVISNULL( &ml->sml_nvalues[ i ] ); i++ ) {
+						int		rc;
+						Entry		*e;
+		
+						if ( be_entry_get_rw( op, &ml->sml_nvalues[ i ],
+								NULL, NULL, 0, &e ) == LDAP_SUCCESS )
+						{
+							be_entry_release_r( op, e );
+							continue;
+						}
+		
+						if ( MEMBEROF_DANGLING_ERROR( mo ) ) {
+							rc = rs->sr_err = LDAP_CONSTRAINT_VIOLATION;
+							rs->sr_text = "adding non-existing object "
+								"as group member";
+							send_ldap_result( op, rs );
+							goto done;
+						}
+		
+						if ( MEMBEROF_DANGLING_DROP( mo ) ) {
+							int	j;
+		
+							Debug( LDAP_DEBUG_ANY, "%s: memberof_op_modify(\"%s\"): "
+								"member=\"%s\" does not exist (stripping...)\n",
+								op->o_log_prefix, op->o_req_dn.bv_val,
+								ml->sml_nvalues[ i ].bv_val );
+		
+							for ( j = i + 1; !BER_BVISNULL( &ml->sml_nvalues[ j ] ); j++ );
+							ber_memfree( ml->sml_values[ i ].bv_val );
+							BER_BVZERO( &ml->sml_values[ i ] );
+							ber_memfree( ml->sml_nvalues[ i ].bv_val );
+							BER_BVZERO( &ml->sml_nvalues[ i ] );
+							ml->sml_numvals--;
+							if ( j - i == 1 ) {
+								break;
+							}
+		
+							AC_MEMCPY( &ml->sml_values[ i ], &ml->sml_values[ i + 1 ],
+								sizeof( struct berval ) * ( j - i ) );
+							AC_MEMCPY( &ml->sml_nvalues[ i ], &ml->sml_nvalues[ i + 1 ],
+								sizeof( struct berval ) * ( j - i ) );
+							i--;
+						}
 					}
-	
-					if ( MEMBEROF_DANGLING_ERROR( mo ) ) {
-						rc = rs->sr_err = LDAP_CONSTRAINT_VIOLATION;
-						rs->sr_text = "adding non-existing object "
-							"as group member";
-						send_ldap_result( op, rs );
-						goto done;
+		
+					if ( BER_BVISNULL( &ml->sml_nvalues[ 0 ] ) ) {
+						*mlp = ml->sml_next;
+						slap_mod_free( &ml->sml_mod, 0 );
+						free( ml );
+		
+					} else {
+						mlp = &ml->sml_next;
 					}
-	
-					if ( MEMBEROF_DANGLING_DROP( mo ) ) {
-						int	j;
-	
-						Debug( LDAP_DEBUG_ANY, "%s: memberof_op_modify(\"%s\"): "
-							"member=\"%s\" does not exist (stripping...)\n",
-							op->o_log_prefix, op->o_req_dn.bv_val,
-							ml->sml_nvalues[ i ].bv_val );
-	
-						for ( j = i + 1; !BER_BVISNULL( &ml->sml_nvalues[ j ] ); j++ );
-						ber_memfree( ml->sml_values[ i ].bv_val );
-						BER_BVZERO( &ml->sml_values[ i ] );
-						ber_memfree( ml->sml_nvalues[ i ].bv_val );
-						BER_BVZERO( &ml->sml_nvalues[ i ] );
-						ml->sml_numvals--;
-						if ( j - i == 1 ) {
-							break;
-						}
-	
-						AC_MEMCPY( &ml->sml_values[ i ], &ml->sml_values[ i + 1 ],
-							sizeof( struct berval ) * ( j - i ) );
-						AC_MEMCPY( &ml->sml_nvalues[ i ], &ml->sml_nvalues[ i + 1 ],
-							sizeof( struct berval ) * ( j - i ) );
-						i--;
-					}
+		
+					break;
+		
+				default:
+					assert( 0 );
 				}
-	
-				if ( BER_BVISNULL( &ml->sml_nvalues[ 0 ] ) ) {
-					*mlp = ml->sml_next;
-					slap_mod_free( &ml->sml_mod, 0 );
-					free( ml );
-	
-				} else {
-					mlp = &ml->sml_next;
-				}
-	
-				break;
-	
-			default:
-				assert( 0 );
 			}
 		}
 	}
-
+	
 	if ( mmlp != NULL ) {
 		Modifications	*ml = *mmlp;
 		int		i;
@@ -1280,12 +1311,10 @@
 				/* fall thru */
 	
 			case LDAP_MOD_REPLACE:
+				vals = memberof_saved_member_get( op, &saved_member_vals );
+
 				/* delete all ... */
-				op->o_bd->bd_info = (BackendInfo *)on->on_info;
-				rc = backend_attribute( op, NULL, &op->o_req_ndn,
-						mo->mo_ad_member, &vals, ACL_READ );
-				op->o_bd->bd_info = (BackendInfo *)on;
-				if ( rc == LDAP_SUCCESS ) {
+				if ( vals != NULL ) {
 					for ( i = 0; !BER_BVISNULL( &vals[ i ] ); i++ ) {
 						(void)memberof_value_modify( op, rs,
 								&vals[ i ], mo->mo_ad_memberof,
@@ -1448,39 +1477,7 @@
 	slap_overinst	*on = (slap_overinst *)be->bd_info;
 	memberof_t	tmp_mo = { 0 }, *mo;
 
-	int		rc;
-	const char	*text = NULL;
-
-	rc = slap_str2ad( SLAPD_MEMBEROF_ATTR, &tmp_mo.mo_ad_memberof, &text );
-	if ( rc != LDAP_SUCCESS ) {
-		Debug( LDAP_DEBUG_ANY,
-			"memberof_db_init: "
-			"unable to find attribute=\"%s\": %s (%d)\n",
-			SLAPD_MEMBEROF_ATTR, text, rc );
-		return rc;
-	}
-
-	rc = slap_str2ad( SLAPD_GROUP_ATTR, &tmp_mo.mo_ad_member, &text );
-	if ( rc != LDAP_SUCCESS ) {
-		Debug( LDAP_DEBUG_ANY,
-			"memberof_db_init: "
-			"unable to find attribute=\"%s\": %s (%d)\n",
-			SLAPD_GROUP_ATTR, text, rc );
-		return rc;
-	}
-
-	tmp_mo.mo_oc_group = oc_find( SLAPD_GROUP_CLASS );
-	if ( tmp_mo.mo_oc_group == NULL ) {
-		Debug( LDAP_DEBUG_ANY,
-			"memberof_db_init: "
-			"unable to find objectClass=\"%s\"\n",
-			SLAPD_GROUP_CLASS, 0, 0 );
-		return 1;
-	}
-
 	mo = (memberof_t *)ch_calloc( 1, sizeof( memberof_t ) );
-	*mo = tmp_mo;
-
 	on->on_bi.bi_private = (void *)mo;
 
 	return 0;
@@ -1656,8 +1653,10 @@
 
 		switch( c->type ) {
 		case MO_DN:
-			value_add_one( &c->rvalue_vals, &mo->mo_dn );
-			value_add_one( &c->rvalue_nvals, &mo->mo_ndn );
+			if ( mo->mo_dn.bv_val != NULL) {
+				value_add_one( &c->rvalue_vals, &mo->mo_dn );
+				value_add_one( &c->rvalue_nvals, &mo->mo_ndn );
+			}
 			break;
 
 		case MO_DANGLING:
@@ -1683,18 +1682,21 @@
 #endif
 
 		case MO_GROUP_OC:
-			assert( mo->mo_oc_group != NULL );
-			value_add_one( &c->rvalue_vals, &mo->mo_oc_group->soc_cname );
+			if ( mo->mo_oc_group != NULL ){
+				value_add_one( &c->rvalue_vals, &mo->mo_oc_group->soc_cname );
+			}
 			break;
 
 		case MO_MEMBER_AD:
-			assert( mo->mo_ad_member != NULL );
-			value_add_one( &c->rvalue_vals, &mo->mo_ad_member->ad_cname );
+			if ( mo->mo_ad_member != NULL ){
+				value_add_one( &c->rvalue_vals, &mo->mo_ad_member->ad_cname );
+			}
 			break;
 
 		case MO_MEMBER_OF_AD:
-			assert( mo->mo_ad_memberof != NULL );
-			value_add_one( &c->rvalue_vals, &mo->mo_ad_memberof->ad_cname );
+			if ( mo->mo_ad_memberof != NULL ){
+				value_add_one( &c->rvalue_vals, &mo->mo_ad_memberof->ad_cname );
+			}
 			break;
 
 		default:
@@ -1842,7 +1844,41 @@
 {
 	slap_overinst	*on = (slap_overinst *)be->bd_info;
 	memberof_t	*mo = (memberof_t *)on->on_bi.bi_private;
+	
+	int		rc;
+	const char	*text = NULL;
 
+	if( ! mo->mo_ad_memberof ){
+		rc = slap_str2ad( SLAPD_MEMBEROF_ATTR, &mo->mo_ad_memberof, &text );
+		if ( rc != LDAP_SUCCESS ) {
+			Debug( LDAP_DEBUG_ANY, "memberof_db_open: "
+					"unable to find attribute=\"%s\": %s (%d)\n",
+					SLAPD_MEMBEROF_ATTR, text, rc );
+			return rc;
+		}
+	}
+
+	if( ! mo->mo_ad_member ){
+		rc = slap_str2ad( SLAPD_GROUP_ATTR, &mo->mo_ad_member, &text );
+		if ( rc != LDAP_SUCCESS ) {
+			Debug( LDAP_DEBUG_ANY, "memberof_db_open: "
+					"unable to find attribute=\"%s\": %s (%d)\n",
+					SLAPD_GROUP_ATTR, text, rc );
+			return rc;
+		}
+	}
+
+    if( ! mo->mo_oc_group ){
+		mo->mo_oc_group = oc_find( SLAPD_GROUP_CLASS );
+		if ( mo->mo_oc_group == NULL ) {
+			Debug( LDAP_DEBUG_ANY,
+					"memberof_db_open: "
+					"unable to find objectClass=\"%s\"\n",
+					SLAPD_GROUP_CLASS, 0, 0 );
+			return 1;
+		}
+	}
+
 	if ( BER_BVISNULL( &mo->mo_dn ) ) {
 		ber_dupbv( &mo->mo_dn, &be->be_rootdn );
 		ber_dupbv( &mo->mo_ndn, &be->be_rootndn );

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/pcache.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/pcache.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/pcache.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/pcache.c,v 1.88.2.10 2007/10/18 00:56:53 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/pcache.c,v 1.88.2.13 2007/11/27 19:56:43 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2003-2007 The OpenLDAP Foundation.
@@ -1483,67 +1483,91 @@
 	int*			filter_got_oc )
 {
 	AttributeDescription *ad;
+	int len, ret;
 
 	switch ( f->f_choice ) {
 	case LDAP_FILTER_EQUALITY:
 		ad = f->f_av_desc;
-		sprintf( fstr->bv_val+fstr->bv_len, "(%s=)", ad->ad_cname.bv_val );
-		fstr->bv_len += ad->ad_cname.bv_len + ( sizeof("(=)") - 1 );
+		len = STRLENOF( "(=)" ) + ad->ad_cname.bv_len;
+		ret = snprintf( fstr->bv_val+fstr->bv_len, len + 1, "(%s=)", ad->ad_cname.bv_val );
+		assert( ret == len );
+		fstr->bv_len += len;
 		break;
 
 	case LDAP_FILTER_GE:
 		ad = f->f_av_desc;
-		sprintf( fstr->bv_val+fstr->bv_len, "(%s>=)", ad->ad_cname.bv_val);
-		fstr->bv_len += ad->ad_cname.bv_len + ( sizeof("(>=)") - 1 );
+		len = STRLENOF( "(>=)" ) + ad->ad_cname.bv_len;
+		ret = snprintf( fstr->bv_val+fstr->bv_len, len + 1, "(%s>=)", ad->ad_cname.bv_val);
+		assert( ret == len );
+		fstr->bv_len += len;
 		break;
 
 	case LDAP_FILTER_LE:
 		ad = f->f_av_desc;
-		sprintf( fstr->bv_val+fstr->bv_len, "(%s<=)", ad->ad_cname.bv_val);
-		fstr->bv_len += ad->ad_cname.bv_len + ( sizeof("(<=)") - 1 );
+		len = STRLENOF( "(<=)" ) + ad->ad_cname.bv_len;
+		ret = snprintf( fstr->bv_val+fstr->bv_len, len + 1, "(%s<=)", ad->ad_cname.bv_val);
+		assert( ret == len );
+		fstr->bv_len += len;
 		break;
 
 	case LDAP_FILTER_APPROX:
 		ad = f->f_av_desc;
-		sprintf( fstr->bv_val+fstr->bv_len, "(%s~=)", ad->ad_cname.bv_val);
-		fstr->bv_len += ad->ad_cname.bv_len + ( sizeof("(~=)") - 1 );
+		len = STRLENOF( "(~=)" ) + ad->ad_cname.bv_len;
+		ret = snprintf( fstr->bv_val+fstr->bv_len, len + 1, "(%s~=)", ad->ad_cname.bv_val);
+		assert( ret == len );
+		fstr->bv_len += len;
 		break;
 
 	case LDAP_FILTER_SUBSTRINGS:
 		ad = f->f_sub_desc;
-		sprintf( fstr->bv_val+fstr->bv_len, "(%s=)", ad->ad_cname.bv_val );
-		fstr->bv_len += ad->ad_cname.bv_len + ( sizeof("(=)") - 1 );
+		len = STRLENOF( "(=)" ) + ad->ad_cname.bv_len;
+		ret = snprintf( fstr->bv_val+fstr->bv_len, len + 1, "(%s=)", ad->ad_cname.bv_val );
+		assert( ret == len );
+		fstr->bv_len += len;
 		break;
 
 	case LDAP_FILTER_PRESENT:
 		ad = f->f_desc;
-		sprintf( fstr->bv_val+fstr->bv_len, "(%s=*)", ad->ad_cname.bv_val );
-		fstr->bv_len += ad->ad_cname.bv_len + ( sizeof("(=*)") - 1 );
+		len = STRLENOF( "(=*)" ) + ad->ad_cname.bv_len;
+		ret = snprintf( fstr->bv_val+fstr->bv_len, len + 1, "(%s=*)", ad->ad_cname.bv_val );
+		assert( ret == len );
+		fstr->bv_len += len;
 		break;
 
 	case LDAP_FILTER_AND:
 	case LDAP_FILTER_OR:
 	case LDAP_FILTER_NOT: {
 		int rc = 0;
-		sprintf( fstr->bv_val+fstr->bv_len, "(%c",
-			f->f_choice == LDAP_FILTER_AND ? '&' :
-			f->f_choice == LDAP_FILTER_OR ? '|' : '!' );
-		fstr->bv_len += sizeof("(%") - 1;
+		fstr->bv_val[fstr->bv_len++] = '(';
+		switch ( f->f_choice ) {
+		case LDAP_FILTER_AND:
+			fstr->bv_val[fstr->bv_len] = '&';
+			break;
+		case LDAP_FILTER_OR:
+			fstr->bv_val[fstr->bv_len] = '|';
+			break;
+		case LDAP_FILTER_NOT:
+			fstr->bv_val[fstr->bv_len] = '!';
+			break;
+		}
+		fstr->bv_len++;
 
 		for ( f = f->f_list; f != NULL; f = f->f_next ) {
 			rc = filter2template( op, f, fstr, filter_attrs, filter_cnt,
 				filter_got_oc );
 			if ( rc ) break;
 		}
-		sprintf( fstr->bv_val+fstr->bv_len, ")" );
-		fstr->bv_len += sizeof(")") - 1;
+		fstr->bv_val[fstr->bv_len++] = ')';
+		fstr->bv_val[fstr->bv_len] = '\0';
 
 		return rc;
 		}
 
 	default:
-		strcpy( fstr->bv_val, "(?=?)" );
-		fstr->bv_len += sizeof("(?=?)")-1;
+		/* a filter should at least have room for "()",
+		 * an "=" and for a 1-char attr */
+		strcpy( fstr->bv_val, "(?=)" );
+		fstr->bv_len += STRLENOF("(?=)");
 		return -1;
 	}
 
@@ -1877,14 +1901,19 @@
 	Entry		*e;
 	struct berval	crp_uuid;
 	char		uuidbuf[ LDAP_LUTIL_UUIDSTR_BUFSIZE ];
-	Operation op_tmp = *op;
+	Operation	*op_tmp;
+	Connection	conn = {0};
+	OperationBuffer opbuf;
+	void		*thrctx = ldap_pvt_thread_pool_context();
 
 	query_uuid->bv_len = lutil_uuidstr(uuidbuf, sizeof(uuidbuf));
 	ber_str2bv(uuidbuf, query_uuid->bv_len, 1, query_uuid);
 
-	op_tmp.o_bd = &cm->db;
-	op_tmp.o_dn = cm->db.be_rootdn;
-	op_tmp.o_ndn = cm->db.be_rootndn;
+	connection_fake_init2( &conn, &opbuf, thrctx, 0 );
+	op_tmp = &opbuf.ob_op;
+	op_tmp->o_bd = &cm->db;
+	op_tmp->o_dn = cm->db.be_rootdn;
+	op_tmp->o_ndn = cm->db.be_rootndn;
 
 	Debug( pcache_debug, "UUID for query being added = %s\n",
 			uuidbuf, 0, 0 );
@@ -1894,10 +1923,10 @@
 		e->e_private = NULL;
 		while ( cm->cur_entries > (cm->max_entries) ) {
 			BER_BVZERO( &crp_uuid );
-			remove_query_and_data( &op_tmp, rs, cm, &crp_uuid );
+			remove_query_and_data( op_tmp, rs, cm, &crp_uuid );
 		}
 
-		return_val = merge_entry(&op_tmp, e, query_uuid);
+		return_val = merge_entry(op_tmp, e, query_uuid);
 		ldap_pvt_thread_mutex_lock(&cm->cache_mutex);
 		cm->cur_entries += return_val;
 		Debug( pcache_debug,
@@ -1959,7 +1988,8 @@
 			rs->sr_attrs = si->save_attrs;
 			op->ors_attrs = si->save_attrs;
 		}
-		if ( op->o_abandon || rs->sr_err == SLAPD_ABANDON ) {
+		if ( (op->o_abandon || rs->sr_err == SLAPD_ABANDON) && 
+				si->caching_reason == PC_IGNORE ) {
 			filter_free( si->query.filter );
 			if ( si->count ) {
 				/* duplicate query, free it */
@@ -1985,6 +2015,9 @@
 				case PC_SIZELIMIT:
 					qc->q_sizelimit = rs->sr_nentries;
 					break;
+				default:
+					assert( 0 );
+					break;
 				}
 				ldap_pvt_thread_rdwr_wunlock(&qc->rwlock);
 				ldap_pvt_thread_mutex_lock(&cm->cache_mutex);
@@ -2665,7 +2698,11 @@
 	struct berval bv;
 
 	/* FIXME: should not hardcode "olcDatabase" here */
-	bv.bv_len = sprintf( ca->cr_msg, "olcDatabase=%s", cm->db.bd_info->bi_type );
+	bv.bv_len = snprintf( ca->cr_msg, sizeof( ca->cr_msg ),
+		"olcDatabase=%s", cm->db.bd_info->bi_type );
+	if ( bv.bv_len < 0 || bv.bv_len >= sizeof( ca->cr_msg ) ) {
+		return -1;
+	}
 	bv.bv_val = ca->cr_msg;
 	ca->be = &cm->db;
 	cm->defer_db_open = 0;

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/ppolicy.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/ppolicy.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/ppolicy.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/ppolicy.c,v 1.75.2.6 2007/09/29 09:55:22 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/ppolicy.c,v 1.75.2.8 2007/11/21 17:43:53 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2004-2007 The OpenLDAP Foundation.
@@ -1559,8 +1559,6 @@
 			if ((ml->sml_op == LDAP_MOD_ADD) ||
 				(ml->sml_op == LDAP_MOD_REPLACE))
 			{
-				addmod = ml;
-
 				/* FIXME: there's no easy way to ensure
 				 * that add does not cause multiple
 				 * userPassword values; one way (that 
@@ -1572,13 +1570,15 @@
 				 * Let's check at least that a single value
 				 * is being added
 				 */
-				assert( addmod->sml_values != NULL );
-				assert( !BER_BVISNULL( &addmod->sml_values[ 0 ] ) );
-				if ( !BER_BVISNULL( &addmod->sml_values[ 1 ] ) ) {
+				assert( ml->sml_values != NULL );
+				assert( !BER_BVISNULL( &ml->sml_values[ 0 ] ) );
+				if ( addmod || !BER_BVISNULL( &ml->sml_values[ 1 ] ) ) {
 					rs->sr_err = LDAP_CONSTRAINT_VIOLATION; 
 					rs->sr_text = "Password policy only allows one password value";
 					goto return_results;
 				}
+
+				addmod = ml;
 			}
 
 		} else if ( !is_at_operational( ml->sml_desc->ad_type ) ) {
@@ -2121,8 +2121,11 @@
 
 	on->on_bi.bi_private = ch_calloc( sizeof(pp_info), 1 );
 
-	if ( dtblsize && !pwcons )
-		pwcons = ch_calloc(sizeof(pw_conn), dtblsize );
+	if ( dtblsize && !pwcons ) {
+		/* accommodate for c_conn_idx == -1 */
+		pwcons = ch_calloc( sizeof(pw_conn), dtblsize + 1 );
+		pwcons++;
+	}
 
 	return 0;
 }
@@ -2149,6 +2152,7 @@
 	/* Perhaps backover should provide bi_destroy hooks... */
 	ov_count--;
 	if ( ov_count <=0 && pwcons ) {
+		pwcons--;
 		free( pwcons );
 		pwcons = NULL;
 	}

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/syncprov.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/syncprov.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/syncprov.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.147.2.11 2007/10/18 01:35:12 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.147.2.14 2007/12/10 18:10:39 quanah Exp $ */
 /* syncprov.c - syncrepl provider */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
@@ -624,8 +624,11 @@
 				maxid = i;
 			}
 		}
-		fop.ors_filterstr.bv_len = sprintf( buf, "(entryCSN>=%s)",
-			cf.f_av_value.bv_val );
+		fop.ors_filterstr.bv_len = snprintf( buf, sizeof( buf ),
+			"(entryCSN>=%s)", cf.f_av_value.bv_val );
+		if ( fop.ors_filterstr.bv_len < 0 || fop.ors_filterstr.bv_len >= sizeof( buf ) ) {
+			return LDAP_OTHER;
+		}
 		fop.ors_attrsonly = 0;
 		fop.ors_attrs = csn_anlist;
 		fop.ors_slimit = SLAP_NO_LIMIT;
@@ -649,17 +652,20 @@
 		/* Look for exact match the first time */
 		if ( findcsn_retry ) {
 			cf.f_choice = LDAP_FILTER_EQUALITY;
-			fop.ors_filterstr.bv_len = sprintf( buf, "(entryCSN=%s)",
-				cf.f_av_value.bv_val );
+			fop.ors_filterstr.bv_len = snprintf( buf, sizeof( buf ),
+				"(entryCSN=%s)", cf.f_av_value.bv_val );
 		/* On retry, look for <= */
 		} else {
 			cf.f_choice = LDAP_FILTER_LE;
 			fop.ors_limit = &fc_limits;
 			memset( &fc_limits, 0, sizeof( fc_limits ));
 			fc_limits.lms_s_unchecked = 1;
-			fop.ors_filterstr.bv_len = sprintf( buf, "(entryCSN<=%s)",
-				cf.f_av_value.bv_val );
+			fop.ors_filterstr.bv_len = snprintf( buf, sizeof( buf ),
+				"(entryCSN<=%s)", cf.f_av_value.bv_val );
 		}
+		if ( fop.ors_filterstr.bv_len < 0 || fop.ors_filterstr.bv_len >= sizeof( buf ) ) {
+			return LDAP_OTHER;
+		}
 		fop.ors_attrsonly = 1;
 		fop.ors_attrs = slap_anlist_no_attrs;
 		fop.ors_slimit = 1;
@@ -1814,7 +1820,9 @@
 	BerVarray ss_ctxcsn;
 	int *ss_sids;
 	int ss_numcsns;
-	int ss_present;
+#define	SS_PRESENT	0x01
+#define	SS_CHANGED	0x02
+	int ss_flags;
 } searchstate;
 
 static int
@@ -2003,26 +2011,32 @@
 	} else if ( rs->sr_type == REP_RESULT && rs->sr_err == LDAP_SUCCESS ) {
 		struct berval cookie;
 
-		slap_compose_sync_cookie( op, &cookie, ss->ss_ctxcsn,
-			srs->sr_state.rid, srs->sr_state.sid );
+		if ( ss->ss_flags & SS_CHANGED ) {
+			slap_compose_sync_cookie( op, &cookie, ss->ss_ctxcsn,
+				srs->sr_state.rid, srs->sr_state.sid );
 
-		Debug( LDAP_DEBUG_SYNC, "syncprov_search_response: cookie=%s\n", cookie.bv_val, 0, 0 );
+			Debug( LDAP_DEBUG_SYNC, "syncprov_search_response: cookie=%s\n", cookie.bv_val, 0, 0 );
+		}
 
-		/* Is this a regular refresh? */
+		/* Is this a regular refresh?
+		 * Note: refresh never gets here if there were no changes
+		 */
 		if ( !ss->ss_so ) {
 			rs->sr_ctrls = op->o_tmpalloc( sizeof(LDAPControl *)*2,
 				op->o_tmpmemctx );
 			rs->sr_ctrls[1] = NULL;
 			rs->sr_err = syncprov_done_ctrl( op, rs, rs->sr_ctrls,
-				0, 1, &cookie, ss->ss_present ?  LDAP_SYNC_REFRESH_PRESENTS :
+				0, 1, &cookie, ( ss->ss_flags & SS_PRESENT ) ?  LDAP_SYNC_REFRESH_PRESENTS :
 					LDAP_SYNC_REFRESH_DELETES );
 			op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );
 		} else {
 		/* It's RefreshAndPersist, transition to Persist phase */
-			syncprov_sendinfo( op, rs, ss->ss_present ?
+			syncprov_sendinfo( op, rs, ( ss->ss_flags & SS_PRESENT ) ?
 	 			LDAP_TAG_SYNC_REFRESH_PRESENT : LDAP_TAG_SYNC_REFRESH_DELETE,
-				&cookie, 1, NULL, 0 );
-			op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );
+				( ss->ss_flags & SS_CHANGED ) ? &cookie : NULL,
+				1, NULL, 0 );
+			if ( ss->ss_flags & SS_CHANGED )
+				op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );
 
 			/* Detach this Op from frontend control */
 			ldap_pvt_thread_mutex_lock( &ss->ss_so->s_mutex );
@@ -2050,7 +2064,7 @@
 	slap_overinst		*on = (slap_overinst *)op->o_bd->bd_info;
 	syncprov_info_t		*si = (syncprov_info_t *)on->on_bi.bi_private;
 	slap_callback	*cb;
-	int gotstate = 0, nochange = 0, do_present;
+	int gotstate = 0, changed = 0, do_present = 0;
 	syncops *sop = NULL;
 	searchstate *ss;
 	sync_control *srs;
@@ -2065,8 +2079,6 @@
 		return rs->sr_err;
 	}
 
-	do_present = si->si_nopres ? 0 : 1;
-
 	srs = op->o_controls[slap_cids.sc_LDAPsync];
 	op->o_managedsait = SLAP_CONTROL_NONCRITICAL;
 
@@ -2134,6 +2146,9 @@
 		if ( !numcsns )
 			goto no_change;
 
+		if ( !si->si_nopres )
+			do_present = SS_PRESENT;
+
 		/* If there are SIDs we don't recognize in the cookie, drop them */
 		for (i=0; i<srs->sr_state.numcsns; ) {
 			for (j=0; j<numcsns; j++) {
@@ -2164,21 +2179,21 @@
 
 		/* If nothing has changed, shortcut it */
 		if ( srs->sr_state.numcsns == numcsns ) {
-			int i, j, changed = 0;
+			int i, j;
 			for ( i=0; i<srs->sr_state.numcsns; i++ ) {
 				for ( j=0; j<numcsns; j++ ) {
 					if ( srs->sr_state.sids[i] != sids[j] )
 						continue;
 					if ( !bvmatch( &srs->sr_state.ctxcsn[i], &ctxcsn[j] ))
-						changed = 1;
+						changed = SS_CHANGED;
 					break;
 				}
 				if ( changed )
 					break;
 			}
 			if ( !changed ) {
-no_change:		nochange = 1;
-				if ( !(op->o_sync_mode & SLAP_SYNC_PERSIST) ) {
+				do_present = 0;
+no_change:		if ( !(op->o_sync_mode & SLAP_SYNC_PERSIST) ) {
 					LDAPControl	*ctrls[2];
 
 					ctrls[0] = NULL;
@@ -2234,6 +2249,9 @@
 				return rs->sr_err;
 			}
 		}
+	} else {
+		/* No consumer state, assume something has changed */
+		changed = SS_CHANGED;
 	}
 
 shortcut:
@@ -2245,7 +2263,7 @@
 	}
 
 	/* If something changed, find the changes */
-	if ( gotstate && !nochange ) {
+	if ( gotstate && changed ) {
 		Filter *fand, *fava;
 
 		fand = op->o_tmpalloc( sizeof(Filter), op->o_tmpmemctx );
@@ -2272,7 +2290,7 @@
 	ss = (searchstate *)(cb+1);
 	ss->ss_on = on;
 	ss->ss_so = sop;
-	ss->ss_present = do_present;
+	ss->ss_flags = do_present | changed;
 	ss->ss_ctxcsn = ctxcsn;
 	ss->ss_numcsns = numcsns;
 	ss->ss_sids = sids;
@@ -2286,7 +2304,7 @@
 	 * the refresh phase, just invoke the response callback to transition
 	 * us into persist phase
 	 */
-	if ( nochange ) {
+	if ( !changed ) {
 		rs->sr_err = LDAP_SUCCESS;
 		rs->sr_nentries = 0;
 		send_ldap_result( op, rs );
@@ -2303,6 +2321,12 @@
 	slap_overinst		*on = (slap_overinst *)op->o_bd->bd_info;
 	syncprov_info_t		*si = (syncprov_info_t *)on->on_bi.bi_private;
 
+	/* This prevents generating unnecessarily; frontend will strip
+	 * any statically stored copy.
+	 */
+	if ( op->o_sync != SLAP_CONTROL_NONE )
+		return SLAP_CB_CONTINUE;
+
 	if ( rs->sr_entry &&
 		dn_match( &rs->sr_entry->e_nname, op->o_bd->be_nsuffix )) {
 
@@ -2400,10 +2424,14 @@
 		case SP_CHKPT:
 			if ( si->si_chkops || si->si_chktime ) {
 				struct berval bv;
-				bv.bv_len = sprintf( c->cr_msg, "%d %d",
-					si->si_chkops, si->si_chktime );
-				bv.bv_val = c->cr_msg;
-				value_add_one( &c->rvalue_vals, &bv );
+				bv.bv_len = snprintf( c->cr_msg, sizeof( c->cr_msg ),
+					"%d %d", si->si_chkops, si->si_chktime );
+				if ( bv.bv_len < 0 || bv.bv_len >= sizeof( c->cr_msg ) ) {
+					rc = 1;
+				} else {
+					bv.bv_val = c->cr_msg;
+					value_add_one( &c->rvalue_vals, &bv );
+				}
 			} else {
 				rc = 1;
 			}
@@ -2818,10 +2846,14 @@
 	sr->sr_rhint = rhint;
 	if (!BER_BVISNULL(&cookie)) {
 		ber_dupbv_x( &sr->sr_state.octet_str, &cookie, op->o_tmpmemctx );
+		/* If parse fails, pretend no cookie was sent */
 		if ( slap_parse_sync_cookie( &sr->sr_state, op->o_tmpmemctx ) ||
 			sr->sr_state.rid == -1 ) {
-			rs->sr_text = "Sync control : cookie parsing error";
-			return LDAP_PROTOCOL_ERROR;
+			if ( sr->sr_state.ctxcsn ) {
+				ber_bvarray_free_x( sr->sr_state.ctxcsn, op->o_tmpmemctx );
+				sr->sr_state.ctxcsn = NULL;
+			}
+			sr->sr_state.numcsns = 0;
 		}
 	}
 

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/translucent.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/translucent.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/translucent.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* translucent.c - translucent proxy module */
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/translucent.c,v 1.13.2.8 2007/10/18 00:56:54 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/translucent.c,v 1.13.2.11 2007/11/29 22:53:50 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2004-2007 The OpenLDAP Foundation.
@@ -128,8 +128,11 @@
 	Debug(LDAP_DEBUG_TRACE, "==> translucent_cfadd\n", 0, 0, 0);
 
 	/* FIXME: should not hardcode "olcDatabase" here */
-	bv.bv_len = sprintf( ca->cr_msg, "olcDatabase=%s",
-			     ov->db.bd_info->bi_type );
+	bv.bv_len = snprintf( ca->cr_msg, sizeof( ca->cr_msg ),
+		"olcDatabase=%s", ov->db.bd_info->bi_type );
+	if ( bv.bv_len < 0 || bv.bv_len >= sizeof( ca->cr_msg ) ) {
+		return -1;
+	}
 	bv.bv_val = ca->cr_msg;
 	ca->be = &ov->db;
 	ov->defer_db_open = 0;
@@ -279,7 +282,11 @@
 		op->o_bd->bd_info = (BackendInfo *) on;
 		return(rs->sr_err);
 	}
-	if(!ov->no_glue) glue_parent(op);
+	if(!ov->no_glue) {
+		op->o_tag = LDAP_REQ_ADD;
+		glue_parent(op);
+		op->o_tag = LDAP_REQ_MODRDN;
+	}
 	return(SLAP_CB_CONTINUE);
 }
 
@@ -324,13 +331,13 @@
 
 static int translucent_modify(Operation *op, SlapReply *rs) {
 	SlapReply nrs = { REP_RESULT };
-	Operation nop = *op;
 
 	slap_overinst *on = (slap_overinst *) op->o_bd->bd_info;
 	translucent_info *ov = on->on_bi.bi_private;
 	Entry *e = NULL, *re = NULL;
 	Attribute *a, *ax;
 	Modifications *m, **mm;
+	BackendDB *db;
 	int del, rc, erc = 0;
 	slap_callback cb = { 0 };
 
@@ -349,14 +356,15 @@
 **
 */
 
-	nop.o_bd = &ov->db;
-	rc = ov->db.bd_info->bi_entry_get_rw(&nop, &nop.o_req_ndn, NULL, NULL, 0, &re);
+	db = op->o_bd;
+	op->o_bd = &ov->db;
+	rc = ov->db.bd_info->bi_entry_get_rw(op, &op->o_req_ndn, NULL, NULL, 0, &re);
 	if(rc != LDAP_SUCCESS || re == NULL ) {
-		send_ldap_error((&nop), rs, LDAP_NO_SUCH_OBJECT,
+		send_ldap_error((op), rs, LDAP_NO_SUCH_OBJECT,
 			"attempt to modify nonexistent local record");
 		return(rs->sr_err);
 	}
-	nop = *op;
+	op->o_bd = db;
 /*
 ** fetch entry from local backend;
 ** if it exists:
@@ -410,9 +418,11 @@
 		erc = SLAP_CB_CONTINUE;
 release:
 		if(re) {
-			if(ov->db.bd_info->bi_entry_release_rw)
-				ov->db.bd_info->bi_entry_release_rw(&nop, re, 0);
-			else
+			if(ov->db.bd_info->bi_entry_release_rw) {
+				op->o_bd = &ov->db;
+				ov->db.bd_info->bi_entry_release_rw(op, re, 0);
+				op->o_bd = db;
+			} else
 				entry_free(re);
 		}
 		op->o_bd->bd_info = (BackendInfo *) on->on_info;
@@ -429,9 +439,11 @@
 
 	/* don't leak remote entry copy */
 	if(re) {
-		if(ov->db.bd_info->bi_entry_release_rw)
-			ov->db.bd_info->bi_entry_release_rw(&nop, re, 0);
-		else
+		if(ov->db.bd_info->bi_entry_release_rw) {
+			op->o_bd = &ov->db;
+			ov->db.bd_info->bi_entry_release_rw(op, re, 0);
+			op->o_bd = db;
+		} else
 			entry_free(re);
 	}
 /*
@@ -492,28 +504,29 @@
 	ber_dupbv( &e->e_nname, &op->o_req_ndn );
 	e->e_attrs = a;
 
-	nop.o_tag	= LDAP_REQ_ADD;
-	nop.oq_add.rs_e	= e;
+	op->o_tag	= LDAP_REQ_ADD;
+	cb.sc_response = translucent_tag_cb;
+	cb.sc_private = op->orm_modlist;
+	op->oq_add.rs_e	= e;
 
-	glue_parent(&nop);
+	glue_parent(op);
 
-	cb.sc_response = translucent_tag_cb;
-	cb.sc_private = op->orm_modlist;
-	cb.sc_next = nop.o_callback;
-	nop.o_callback = &cb;
-	rc = on->on_info->oi_orig->bi_op_add(&nop, &nrs);
-	if ( nop.ora_e == e )
+	cb.sc_next = op->o_callback;
+	op->o_callback = &cb;
+	rc = on->on_info->oi_orig->bi_op_add(op, &nrs);
+	if ( op->ora_e == e )
 		entry_free( e );
+	op->o_callback = cb.sc_next;
 
 	return(rc);
 }
 
 static int translucent_compare(Operation *op, SlapReply *rs) {
-	Operation nop = *op;
 	slap_overinst *on = (slap_overinst *) op->o_bd->bd_info;
 	translucent_info *ov = on->on_bi.bi_private;
 	AttributeAssertion *ava = op->orc_ava;
 	Entry *e;
+	BackendDB *db;
 	int rc;
 
 	Debug(LDAP_DEBUG_TRACE, "==> translucent_compare: <%s> %s:%s\n",
@@ -524,14 +537,11 @@
 **	CONTINUE and let it do the compare;
 **
 */
-	op->o_bd->bd_info = (BackendInfo *) on->on_info;
-	rc = be_entry_get_rw(op, &op->o_req_ndn, NULL, ava->aa_desc, 0, &e);
+	rc = overlay_entry_get_ov(op, &op->o_req_ndn, NULL, ava->aa_desc, 0, &e, on);
 	if(e && rc == LDAP_SUCCESS) {
-		be_entry_release_r(op, e);
-		op->o_bd->bd_info = (BackendInfo *) on;
+		overlay_entry_release_ov(op, e, 0, on);
 		return(SLAP_CB_CONTINUE);
 	}
-	op->o_bd->bd_info = (BackendInfo *) on;
 
 	if(ov->defer_db_open) {
 		send_ldap_error(op, rs, LDAP_UNAVAILABLE,
@@ -543,9 +553,10 @@
 ** return the result;
 **
 */
-	nop.o_bd = &ov->db;
-	nop.o_callback = NULL;
-	rc = ov->db.bd_info->bi_op_compare(&nop, rs);
+	db = op->o_bd;
+	op->o_bd = &ov->db;
+	rc = ov->db.bd_info->bi_op_compare(op, rs);
+	op->o_bd = db;
 
 	return(rc);
 }
@@ -557,10 +568,10 @@
 */
 
 static int translucent_search_cb(Operation *op, SlapReply *rs) {
+	BackendDB *db;
 	slap_overinst *on;
 	Entry *e, *re = NULL;
 	Attribute *a, *ax, *an, *as = NULL;
-	Operation * original_op, local_op;
 	int rc;
 
 	if(!op || !rs || rs->sr_type != REP_SEARCH || !rs->sr_entry)
@@ -569,13 +580,11 @@
 	Debug(LDAP_DEBUG_TRACE, "==> translucent_search_cb: %s\n",
 		rs->sr_entry->e_name.bv_val, 0, 0);
 
-	original_op = op->o_callback->sc_private;
-	on = (slap_overinst *) original_op->o_bd->bd_info;
-	local_op = *original_op;
+	db = op->o_bd;
+	op->o_bd = op->o_callback->sc_private;
+	on = (slap_overinst *) op->o_bd->bd_info;
 
-	local_op.o_bd->bd_info = (BackendInfo *) on->on_info->oi_orig;
-	rc = be_entry_get_rw(&local_op, &rs->sr_entry->e_nname, NULL, NULL, 0, &e);
-	local_op.o_bd->bd_info = (BackendInfo *) on;
+	rc = overlay_entry_get_ov(op, &rs->sr_entry->e_nname, NULL, NULL, 0, &e, on);
 
 /*
 ** if we got an entry from local backend:
@@ -610,9 +619,7 @@
 			an->a_next = as;
 			as = an;
 		}
-		local_op.o_bd->bd_info = (BackendInfo *) on->on_info->oi_orig;
-		be_entry_release_r(&local_op, e);
-		local_op.o_bd->bd_info = (BackendInfo *) on;
+		overlay_entry_release_ov(op, e, 0, on);
 
 		/* literally append, so locals are always last */
 		if(as) {
@@ -627,6 +634,7 @@
 		rs->sr_flags |= REP_ENTRY_MUSTBEFREED;
 	}
 
+	op->o_bd = db;
 	return(SLAP_CB_CONTINUE);
 }
 
@@ -639,9 +647,9 @@
 
 static int translucent_search(Operation *op, SlapReply *rs) {
 	slap_overinst *on = (slap_overinst *) op->o_bd->bd_info;
-	Operation nop = *op;
 	translucent_info *ov = on->on_bi.bi_private;
 	slap_callback cb = { NULL, NULL, NULL, NULL };
+	int rc;
 
 	Debug(LDAP_DEBUG_TRACE, "==> translucent_search: <%s> %s\n",
 		op->o_req_dn.bv_val, op->ors_filterstr.bv_val, 0);
@@ -652,12 +660,15 @@
 		return(rs->sr_err);
 	}
 	cb.sc_response = (slap_response *) translucent_search_cb;
-	cb.sc_private = op;
-	cb.sc_next = nop.o_callback;
+	cb.sc_private = op->o_bd;
+	cb.sc_next = op->o_callback;
 
-	nop.o_callback = &cb;
-	nop.o_bd = &ov->db;
-	return (ov->db.bd_info->bi_op_search(&nop, rs));
+	op->o_callback = &cb;
+	op->o_bd = &ov->db;
+	rc = ov->db.bd_info->bi_op_search(op, rs);
+	op->o_bd = cb.sc_private;
+
+	return rc;
 }
 
 
@@ -669,8 +680,9 @@
 
 static int translucent_bind(Operation *op, SlapReply *rs) {
 	slap_overinst *on = (slap_overinst *) op->o_bd->bd_info;
-	Operation nop = *op;
 	translucent_info *ov = on->on_bi.bi_private;
+	BackendDB *db;
+	int rc;
 
 	Debug(LDAP_DEBUG_TRACE, "translucent_bind: <%s> method %d\n",
 		op->o_req_dn.bv_val, op->orb_method, 0);
@@ -680,8 +692,11 @@
 			"remote DB not available");
 		return(rs->sr_err);
 	}
-	nop.o_bd = &ov->db;
-	return (ov->db.bd_info->bi_op_bind(&nop, rs));
+	db = op->o_bd;
+	op->o_bd = &ov->db;
+	rc = ov->db.bd_info->bi_op_bind(op, rs);
+	op->o_bd = db;
+	return rc;
 }
 
 /*

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/unique.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/unique.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/unique.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* unique.c - attribute uniqueness module */
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/unique.c,v 1.20.2.3 2007/08/31 23:14:06 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/unique.c,v 1.20.2.4 2007/11/27 18:11:43 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2004-2007 The OpenLDAP Foundation.
@@ -198,7 +198,7 @@
 		}
 
 		if ( !dnIsSuffix ( uri->ndn, &be->be_nsuffix[0] ) ) {
-			sprintf ( c->cr_msg,
+			snprintf( c->cr_msg, sizeof( c->cr_msg ),
 				  "dn <%s> is not a suffix of backend base dn <%s>",
 				  uri->dn->bv_val,
 				  be->be_nsuffix[0].bv_val );
@@ -401,7 +401,7 @@
 	case LDAP_MOD_ADD:
 	case SLAP_CONFIG_ADD:
 		if ( domains ) {
-			sprintf ( c->cr_msg,
+			snprintf( c->cr_msg, sizeof( c->cr_msg ),
 				  "cannot set legacy attrs when URIs are present" );
 			Debug ( LDAP_DEBUG_CONFIG, "unique config: %s\n",
 				c->cr_msg, NULL, NULL );
@@ -410,7 +410,7 @@
 		}
 		if ( !dnIsSuffix ( &c->value_ndn,
 				   &be->be_nsuffix[0] ) ) {
-			sprintf ( c->cr_msg,
+			snprintf( c->cr_msg, sizeof( c->cr_msg ),
 				  "dn is not a suffix of backend base" );
 			Debug ( LDAP_DEBUG_CONFIG, "unique config: %s\n",
 				c->cr_msg, NULL, NULL );
@@ -499,7 +499,7 @@
 	case LDAP_MOD_ADD:
 	case SLAP_CONFIG_ADD:
 		if ( domains ) {
-			sprintf ( c->cr_msg,
+			snprintf( c->cr_msg, sizeof( c->cr_msg ),
 				  "cannot set legacy attrs when URIs are present" );
 			Debug ( LDAP_DEBUG_CONFIG, "unique config: %s\n",
 				c->cr_msg, NULL, NULL );
@@ -510,7 +510,7 @@
 		     && legacy->uri
 		     && legacy->uri->attrs
 		     && (c->type == UNIQUE_IGNORE) != legacy->ignore ) {
-			sprintf ( c->cr_msg,
+			snprintf( c->cr_msg, sizeof( c->cr_msg ),
 				  "cannot set both attrs and ignore-attrs" );
 			Debug ( LDAP_DEBUG_CONFIG, "unique config: %s\n",
 				c->cr_msg, NULL, NULL );
@@ -620,7 +620,7 @@
 	case LDAP_MOD_ADD:
 	case SLAP_CONFIG_ADD:
 		if ( domains ) {
-			sprintf ( c->cr_msg,
+			snprintf( c->cr_msg, sizeof( c->cr_msg ),
 				  "cannot set legacy attrs when URIs are present" );
 			Debug ( LDAP_DEBUG_CONFIG, "unique config: %s\n",
 				c->cr_msg, NULL, NULL );
@@ -705,7 +705,7 @@
 	case SLAP_CONFIG_ADD: /* fallthrough */
 	case LDAP_MOD_ADD:
 		if ( legacy ) {
-			sprintf ( c->cr_msg,
+			snprintf( c->cr_msg, sizeof( c->cr_msg ),
 				  "cannot set Uri when legacy attrs are present" );
 			Debug ( LDAP_DEBUG_CONFIG, "unique config: %s\n",
 				c->cr_msg, NULL, NULL );
@@ -902,6 +902,7 @@
 	AttributeDescription *ad,
 	BerVarray b,
 	char *kp,
+	int ks,
 	void *ctx
 )
 {
@@ -923,15 +924,21 @@
 		if ( b && b[0].bv_val ) {
 			for ( i = 0; b[i].bv_val; i++ ) {
 				struct berval	bv;
+				int len;
 
 				ldap_bv2escaped_filter_value_x( &b[i], &bv, 1, ctx );
-				kp += sprintf( kp, "(%s=%s)", ad->ad_cname.bv_val, bv.bv_val );
+				len = snprintf( kp, ks, "(%s=%s)", ad->ad_cname.bv_val, bv.bv_val );
+				assert( len >= 0 && len < ks );
+				kp += len;
 				if ( bv.bv_val != b[i].bv_val ) {
 					ber_memfree_x( bv.bv_val, ctx );
 				}
 			}
 		} else if ( domain->strict ) {
-			kp += sprintf( kp, "(%s=*)", ad->ad_cname.bv_val );
+			int len;
+			len = snprintf( kp, ks, "(%s=*)", ad->ad_cname.bv_val );
+			assert( len >= 0 && len < ks );
+			kp += len;
 		}
 		break;
 	}
@@ -1020,13 +1027,16 @@
 
 	for ( domain = legacy ? legacy : domains;
 	      domain;
-	      domain = domain->next ) {
+	      domain = domain->next )
+	{
 		unique_domain_uri *uri;
 		int ks = 0;
 
 		for ( uri = domain->uri;
 		      uri;
-		      uri = uri->next ) {
+		      uri = uri->next )
+		{
+			int len;
 
 			if ( uri->ndn
 			     && !dnIsSuffix( &op->o_req_ndn, uri->ndn ))
@@ -1055,9 +1065,14 @@
 				ks += uri->filter->bv_len + STRLENOF ("(&)");
 			kp = key = op->o_tmpalloc(ks, op->o_tmpmemctx);
 
-			if ( uri->filter && uri->filter->bv_len )
-				kp += sprintf (kp, "(&%s", uri->filter->bv_val);
-			kp += sprintf(kp, "(|");
+			if ( uri->filter && uri->filter->bv_len ) {
+				len = snprintf (kp, ks, "(&%s", uri->filter->bv_val);
+				assert( len >= 0 && len < ks );
+				kp += len;
+			}
+			len = snprintf(kp, ks - (kp - key), "(|");
+			assert( len >= 0 && len < ks - (kp - key) );
+			kp += len;
 
 			for(a = op->ora_e->e_attrs; a; a = a->a_next)
 				kp = build_filter(domain,
@@ -1065,11 +1080,17 @@
 						  a->a_desc,
 						  a->a_vals,
 						  kp,
+						  ks - ( kp - key ),
 						  op->o_tmpmemctx);
 
-			kp += sprintf(kp, ")");
-			if ( uri->filter && uri->filter->bv_len )
-				kp += sprintf (kp, ")");
+			len = snprintf(kp, ks - (kp - key), ")");
+			assert( len >= 0 && len < ks - (kp - key) );
+			kp += len;
+			if ( uri->filter && uri->filter->bv_len ) {
+				len = snprintf(kp, ks - (kp - key), ")");
+				assert( len >= 0 && len < ks - (kp - key) );
+				kp += len;
+			}
 
 			rc = unique_search ( op,
 					     &nop,
@@ -1110,13 +1131,16 @@
 
 	for ( domain = legacy ? legacy : domains;
 	      domain;
-	      domain = domain->next ) {
+	      domain = domain->next )
+	{
 		unique_domain_uri *uri;
 		int ks = 0;
 
 		for ( uri = domain->uri;
 		      uri;
-		      uri = uri->next ) {
+		      uri = uri->next )
+		{
+			int len;
 
 			if ( uri->ndn
 			     && !dnIsSuffix( &op->o_req_ndn, uri->ndn ))
@@ -1146,9 +1170,14 @@
 				ks += uri->filter->bv_len + STRLENOF ("(&)");
 			kp = key = op->o_tmpalloc(ks, op->o_tmpmemctx);
 
-			if ( uri->filter && uri->filter->bv_len )
-				kp += sprintf (kp, "(&%s", uri->filter->bv_val);
-			kp += sprintf(kp, "(|");
+			if ( uri->filter && uri->filter->bv_len ) {
+				len = snprintf(kp, ks, "(&%s", uri->filter->bv_val);
+				assert( len >= 0 && len < ks );
+				kp += len;
+			}
+			len = snprintf(kp, ks - (kp - key), "(|");
+			assert( len >= 0 && len < ks - (kp - key) );
+			kp += len;
 
 			for(m = op->orm_modlist; m; m = m->sml_next)
 				if ( (m->sml_op & LDAP_MOD_OP)
@@ -1158,11 +1187,17 @@
 							    m->sml_desc,
 							    m->sml_values,
 							    kp,
+							    ks - (kp - key),
 							    op->o_tmpmemctx );
 
-			kp += sprintf (kp, ")");
-			if ( uri->filter && uri->filter->bv_len )
-				kp += sprintf (kp, ")");
+			len = snprintf(kp, ks - (kp - key), ")");
+			assert( len >= 0 && len < ks - (kp - key) );
+			kp += len;
+			if ( uri->filter && uri->filter->bv_len ) {
+				len = snprintf (kp, ks - (kp - key), ")");
+				assert( len >= 0 && len < ks - (kp - key) );
+				kp += len;
+			}
 
 			rc = unique_search ( op,
 					     &nop,
@@ -1204,14 +1239,16 @@
 
 	for ( domain = legacy ? legacy : domains;
 	      domain;
-	      domain = domain->next ) {
+	      domain = domain->next )
+	{
 		unique_domain_uri *uri;
 		int ks = 0;
 
 		for ( uri = domain->uri;
 		      uri;
-		      uri = uri->next ) {
-			int i;
+		      uri = uri->next )
+		{
+			int i, len;
 
 			if ( uri->ndn
 			     && !dnIsSuffix( &op->o_req_ndn, uri->ndn )
@@ -1263,9 +1300,14 @@
 				ks += uri->filter->bv_len + STRLENOF ("(&)");
 			kp = key = op->o_tmpalloc(ks, op->o_tmpmemctx);
 
-			if ( uri->filter && uri->filter->bv_len )
-				kp += sprintf (kp, "(&%s", uri->filter->bv_val);
-			kp += sprintf(kp, "(|");
+			if ( uri->filter && uri->filter->bv_len ) {
+				len = snprintf(kp, ks, "(&%s", uri->filter->bv_val);
+				assert( len >= 0 && len < ks );
+				kp += len;
+			}
+			len = snprintf(kp, ks - (kp - key), "(|");
+			assert( len >= 0 && len < ks - (kp - key) );
+			kp += len;
 
 			for ( i=0; newrdn[i]; i++) {
 				bv[0] = newrdn[i]->la_value;
@@ -1274,12 +1316,18 @@
 						    newrdn[i]->la_private,
 						    bv,
 						    kp,
+						    ks - (kp - key ),
 						    op->o_tmpmemctx);
 			}
 
-			kp += sprintf(kp, ")");
-			if ( uri->filter && uri->filter->bv_len )
-				kp += sprintf (kp, ")");
+			len = snprintf(kp, ks - (kp - key), ")");
+			assert( len >= 0 && len < ks - (kp - key) );
+			kp += len;
+			if ( uri->filter && uri->filter->bv_len ) {
+				len = snprintf (kp, ks - (kp - key), ")");
+				assert( len >= 0 && len < ks - (kp - key) );
+				kp += len;
+			}
 
 			rc = unique_search ( op,
 					     &nop,

Modified: openldap/vendor/openldap-release/servers/slapd/overlays/valsort.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/overlays/valsort.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/overlays/valsort.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* valsort.c - sort attribute values */
-/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/valsort.c,v 1.17.2.3 2007/09/29 09:55:22 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/valsort.c,v 1.17.2.4 2007/11/27 18:11:43 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2005-2007 The OpenLDAP Foundation.
@@ -152,13 +152,13 @@
 	vitmp.vi_ad = NULL;
 	i = slap_str2ad( c->argv[1], &vitmp.vi_ad, &text );
 	if ( i ) {
-		sprintf( c->cr_msg, "<%s> %s", c->argv[0], text );
+		snprintf( c->cr_msg, sizeof( c->cr_msg), "<%s> %s", c->argv[0], text );
 		Debug( LDAP_DEBUG_ANY, "%s: %s (%s)!\n",
 			c->log, c->cr_msg, c->argv[1] );
 		return(1);
 	}
 	if ( is_at_single_value( vitmp.vi_ad->ad_type )) {
-		sprintf( c->cr_msg, "<%s> %s is single-valued, ignoring", c->argv[0],
+		snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> %s is single-valued, ignoring", c->argv[0],
 			vitmp.vi_ad->ad_cname.bv_val );
 		Debug( LDAP_DEBUG_ANY, "%s: %s (%s)!\n",
 			c->log, c->cr_msg, c->argv[1] );
@@ -170,14 +170,14 @@
 	ber_str2bv( c->argv[2], 0, 0, &bv );
 	i = dnNormalize( 0, NULL, NULL, &bv, &vitmp.vi_dn, NULL );
 	if ( i ) {
-		sprintf( c->cr_msg, "<%s> unable to normalize DN", c->argv[0] );
+		snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> unable to normalize DN", c->argv[0] );
 		Debug( LDAP_DEBUG_ANY, "%s: %s (%s)!\n",
 			c->log, c->cr_msg, c->argv[2] );
 		return(1);
 	}
 	i = verb_to_mask( c->argv[3], sorts );
 	if ( BER_BVISNULL( &sorts[i].word )) {
-		sprintf( c->cr_msg, "<%s> unrecognized sort type", c->argv[0] );
+		snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> unrecognized sort type", c->argv[0] );
 		Debug( LDAP_DEBUG_ANY, "%s: %s (%s)!\n",
 			c->log, c->cr_msg, c->argv[3] );
 		return(1);
@@ -186,7 +186,7 @@
 	if ( sorts[i].mask == VALSORT_WEIGHTED && c->argc == 5 ) {
 		i = verb_to_mask( c->argv[4], sorts );
 		if ( BER_BVISNULL( &sorts[i].word )) {
-			sprintf( c->cr_msg, "<%s> unrecognized sort type", c->argv[0] );
+			snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> unrecognized sort type", c->argv[0] );
 			Debug( LDAP_DEBUG_ANY, "%s: %s (%s)!\n",
 				c->log, c->cr_msg, c->argv[4] );
 			return(1);
@@ -194,7 +194,7 @@
 		vitmp.vi_sort |= sorts[i].mask;
 	}
 	if (( vitmp.vi_sort & VALSORT_NUMERIC ) && !is_numeric ) {
-		sprintf( c->cr_msg, "<%s> numeric sort specified for non-numeric syntax",
+		snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> numeric sort specified for non-numeric syntax",
 			c->argv[0] );
 		Debug( LDAP_DEBUG_ANY, "%s: %s (%s)!\n",
 			c->log, c->cr_msg, c->argv[1] );

Modified: openldap/vendor/openldap-release/servers/slapd/proto-slap.h
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/proto-slap.h	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/proto-slap.h	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/proto-slap.h,v 1.670.2.13 2007/09/29 09:55:21 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/proto-slap.h,v 1.670.2.17 2007/12/03 15:04:31 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -707,12 +707,12 @@
 LDAP_SLAPD_F (int) connections_destroy LDAP_P((void));
 LDAP_SLAPD_F (int) connections_timeout_idle LDAP_P((time_t));
 
-LDAP_SLAPD_F (int) connection_client_setup LDAP_P((
+LDAP_SLAPD_F (Connection *) connection_client_setup LDAP_P((
 	ber_socket_t s,
 	ldap_pvt_thread_start_t *func,
 	void *arg ));
-LDAP_SLAPD_F (void) connection_client_enable LDAP_P(( ber_socket_t s ));
-LDAP_SLAPD_F (void) connection_client_stop LDAP_P(( ber_socket_t s ));
+LDAP_SLAPD_F (void) connection_client_enable LDAP_P(( Connection *c ));
+LDAP_SLAPD_F (void) connection_client_stop LDAP_P(( Connection *c ));
 
 #ifdef LDAP_PF_LOCAL_SENDMSG
 #define LDAP_PF_LOCAL_SENDMSG_ARG(arg)	, arg
@@ -736,11 +736,7 @@
 LDAP_SLAPD_F (const char *) connection_state2str LDAP_P(( int state ))
 	LDAP_GCCATTR((const));
 
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 LDAP_SLAPD_F (int) connection_read_activate LDAP_P((ber_socket_t s));
-#else
-LDAP_SLAPD_F (int) connection_read LDAP_P((ber_socket_t s));
-#endif
 LDAP_SLAPD_F (int) connection_write LDAP_P((ber_socket_t s));
 
 LDAP_SLAPD_F (unsigned long) connections_nextid(void);
@@ -826,6 +822,19 @@
 LDAP_SLAPD_V (slap_ssf_t) local_ssf;
 LDAP_SLAPD_V (struct runqueue_s) slapd_rq;
 
+#ifdef HAVE_WINSOCK
+LDAP_SLAPD_F (ber_socket_t) slapd_socknew(ber_socket_t s);
+LDAP_SLAPD_F (ber_socket_t) slapd_sock2fd(ber_socket_t s);
+LDAP_SLAPD_V (SOCKET *) slapd_ws_sockets;
+#define	SLAP_FD2SOCK(s)	slapd_ws_sockets[s]
+#define	SLAP_SOCK2FD(s)	slapd_sock2fd(s)
+#define	SLAP_SOCKNEW(s)	slapd_socknew(s)
+#else
+#define	SLAP_FD2SOCK(s)	s
+#define	SLAP_SOCK2FD(s)	s
+#define	SLAP_SOCKNEW(s)	s
+#endif
+
 /*
  * dn.c
  */
@@ -1067,6 +1076,8 @@
 LDAP_SLAPD_F (int)	slap_startup LDAP_P(( Backend *be ));
 LDAP_SLAPD_F (int)	slap_shutdown LDAP_P(( Backend *be ));
 LDAP_SLAPD_F (int)	slap_destroy LDAP_P((void));
+LDAP_SLAPD_F (void) slap_counters_init LDAP_P((slap_counters_t *sc));
+LDAP_SLAPD_F (void) slap_counters_destroy LDAP_P((slap_counters_t *sc));
 
 LDAP_SLAPD_V (char *)	slap_known_controls[];
 
@@ -1372,11 +1383,11 @@
 LDAP_SLAPD_F (void) slap_op_init LDAP_P(( void ));
 LDAP_SLAPD_F (void) slap_op_destroy LDAP_P(( void ));
 LDAP_SLAPD_F (void) slap_op_groups_free LDAP_P(( Operation *op ));
-LDAP_SLAPD_F (void) slap_op_free LDAP_P(( Operation *op ));
+LDAP_SLAPD_F (void) slap_op_free LDAP_P(( Operation *op, void *ctx ));
 LDAP_SLAPD_F (void) slap_op_time LDAP_P(( time_t *t, int *n ));
 LDAP_SLAPD_F (Operation *) slap_op_alloc LDAP_P((
 	BerElement *ber, ber_int_t msgid,
-	ber_tag_t tag, ber_int_t id ));
+	ber_tag_t tag, ber_int_t id, void *ctx ));
 
 LDAP_SLAPD_F (int) slap_op_add LDAP_P(( Operation **olist, Operation *op ));
 LDAP_SLAPD_F (int) slap_op_remove LDAP_P(( Operation **olist, Operation *op ));
@@ -1865,6 +1876,11 @@
 LDAP_SLAPD_V (unsigned int) index_substr_if_maxlen;
 LDAP_SLAPD_V (unsigned int) index_substr_any_len;
 LDAP_SLAPD_V (unsigned int) index_substr_any_step;
+LDAP_SLAPD_V (unsigned int) index_intlen;
+/* all signed integers from strings of this size need more than intlen bytes */
+/* i.e. log(10)*(index_intlen_strlen-2) > log(2)*(8*(index_intlen)-1) */
+LDAP_SLAPD_V (unsigned int) index_intlen_strlen;
+#define SLAP_INDEX_INTLEN_STRLEN(intlen) ((8*(intlen)-1) * 146/485 + 3)
 
 LDAP_SLAPD_V (ber_len_t) sockbuf_max_incoming;
 LDAP_SLAPD_V (ber_len_t) sockbuf_max_incoming_auth;
@@ -1881,6 +1897,7 @@
 LDAP_SLAPD_V (int)		global_idletimeout;
 LDAP_SLAPD_V (char *)	global_host;
 LDAP_SLAPD_V (char *)	global_realm;
+LDAP_SLAPD_V (char *)	sasl_host;
 LDAP_SLAPD_V (char **)	default_passwd_hash;
 LDAP_SLAPD_V (int)		lber_debug;
 LDAP_SLAPD_V (int)		ldap_syslog;

Modified: openldap/vendor/openldap-release/servers/slapd/result.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/result.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/result.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* result.c - routines to send ldap results, errors, and referrals */
-/* $OpenLDAP: pkg/ldap/servers/slapd/result.c,v 1.289.2.7 2007/10/18 00:39:22 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/result.c,v 1.289.2.10 2007/12/10 18:10:39 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -149,7 +149,6 @@
 	/* write the pdu */
 	while( 1 ) {
 		int err;
-		ber_socket_t	sd;
 
 		if ( connection_state_closing( conn ) ) {
 			ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
@@ -184,8 +183,7 @@
 
 		/* wait for socket to be write-ready */
 		conn->c_writewaiter = 1;
-		ber_sockbuf_ctrl( conn->c_sb, LBER_SB_OPT_GET_FD, &sd );
-		slapd_set_write( sd, 1 );
+		slapd_set_write( conn->c_sd, 1 );
 
 		ldap_pvt_thread_cond_wait( &conn->c_write_cv, &conn->c_mutex );
 		conn->c_writewaiter = 0;
@@ -508,10 +506,10 @@
 		goto cleanup;
 	}
 
-	ldap_pvt_thread_mutex_lock( &slap_counters.sc_sent_mutex );
-	ldap_pvt_mp_add_ulong( slap_counters.sc_pdu, 1 );
-	ldap_pvt_mp_add_ulong( slap_counters.sc_bytes, (unsigned long)bytes );
-	ldap_pvt_thread_mutex_unlock( &slap_counters.sc_sent_mutex );
+	ldap_pvt_thread_mutex_lock( &op->o_counters->sc_mutex );
+	ldap_pvt_mp_add_ulong( op->o_counters->sc_pdu, 1 );
+	ldap_pvt_mp_add_ulong( op->o_counters->sc_bytes, (unsigned long)bytes );
+	ldap_pvt_thread_mutex_unlock( &op->o_counters->sc_mutex );
 
 cleanup:;
 	/* Tell caller that we did this for real, as opposed to being
@@ -744,9 +742,10 @@
 	}
 
 	/* Every 64 entries, check for thread pool pause */
-	if (( rs->sr_nentries & 0x3f == 0x3f ) &&
+	if ( ( ( rs->sr_nentries & 0x3f ) == 0x3f ) &&
 		ldap_pvt_thread_pool_query( &connection_pool,
-			LDAP_PVT_THREAD_POOL_PARAM_PAUSING, &i ) == 0 && i ) {
+			LDAP_PVT_THREAD_POOL_PARAM_PAUSING, &i ) == 0 && i )
+	{
 		return LDAP_BUSY;
 	}
 
@@ -899,12 +898,16 @@
 		} else {
 			/* specific attrs requested */
 			if ( is_at_operational( desc->ad_type ) ) {
-				if ( !SLAP_OPATTRS( rs->sr_attr_flags ) &&
-					!ad_inlist( desc, rs->sr_attrs ) )
-				{
-					continue;
+				/* if not explicitly requested */
+				if ( !ad_inlist( desc, rs->sr_attrs )) {
+					/* if not all op attrs requested, skip */
+					if ( !SLAP_OPATTRS( rs->sr_attr_flags ))
+						continue;
+					/* if DSA-specific and replicating, skip */
+					if ( op->o_sync != SLAP_CONTROL_NONE &&
+						desc->ad_type->sat_usage == LDAP_SCHEMA_DSA_OPERATION )
+						continue;
 				}
-
 			} else {
 				if ( !userattrs && !ad_inlist( desc, rs->sr_attrs ) ) {
 					continue;
@@ -1194,11 +1197,11 @@
 		}
 		rs->sr_nentries++;
 
-		ldap_pvt_thread_mutex_lock( &slap_counters.sc_sent_mutex );
-		ldap_pvt_mp_add_ulong( slap_counters.sc_bytes, (unsigned long)bytes );
-		ldap_pvt_mp_add_ulong( slap_counters.sc_entries, 1 );
-		ldap_pvt_mp_add_ulong( slap_counters.sc_pdu, 1 );
-		ldap_pvt_thread_mutex_unlock( &slap_counters.sc_sent_mutex );
+		ldap_pvt_thread_mutex_lock( &op->o_counters->sc_mutex );
+		ldap_pvt_mp_add_ulong( op->o_counters->sc_bytes, (unsigned long)bytes );
+		ldap_pvt_mp_add_ulong( op->o_counters->sc_entries, 1 );
+		ldap_pvt_mp_add_ulong( op->o_counters->sc_pdu, 1 );
+		ldap_pvt_thread_mutex_unlock( &op->o_counters->sc_mutex );
 	}
 
 	Statslog( LDAP_DEBUG_STATS2, "%s ENTRY dn=\"%s\"\n",
@@ -1361,11 +1364,11 @@
 	if ( bytes < 0 ) {
 		rc = LDAP_UNAVAILABLE;
 	} else {
-		ldap_pvt_thread_mutex_lock( &slap_counters.sc_sent_mutex );
-		ldap_pvt_mp_add_ulong( slap_counters.sc_bytes, (unsigned long)bytes );
-		ldap_pvt_mp_add_ulong( slap_counters.sc_refs, 1 );
-		ldap_pvt_mp_add_ulong( slap_counters.sc_pdu, 1 );
-		ldap_pvt_thread_mutex_unlock( &slap_counters.sc_sent_mutex );
+		ldap_pvt_thread_mutex_lock( &op->o_counters->sc_mutex );
+		ldap_pvt_mp_add_ulong( op->o_counters->sc_bytes, (unsigned long)bytes );
+		ldap_pvt_mp_add_ulong( op->o_counters->sc_refs, 1 );
+		ldap_pvt_mp_add_ulong( op->o_counters->sc_pdu, 1 );
+		ldap_pvt_thread_mutex_unlock( &op->o_counters->sc_mutex );
 	}
 #ifdef LDAP_CONNECTIONLESS
 	}

Modified: openldap/vendor/openldap-release/servers/slapd/sasl.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/sasl.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/sasl.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/sasl.c,v 1.239.2.5 2007/10/08 09:52:25 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/sasl.c,v 1.239.2.6 2007/11/08 19:30:04 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -1279,8 +1279,8 @@
 #ifdef HAVE_CYRUS_SASL
 	sasl_done();
 #endif
-	free( global_host );
-	global_host = NULL;
+	free( sasl_host );
+	sasl_host = NULL;
 
 	return 0;
 }
@@ -1389,7 +1389,7 @@
 		ipremoteport = slap_sasl_peer2ipport( &conn->c_peer_name );
 	}
 
-	sc = sasl_server_new( "ldap", global_host, global_realm,
+	sc = sasl_server_new( "ldap", sasl_host, global_realm,
 		iplocalport, ipremoteport, session_callbacks, SASL_SUCCESS_DATA, &ctx );
 	if ( iplocalport != NULL ) {
 		ch_free( iplocalport );
@@ -1398,7 +1398,7 @@
 		ch_free( ipremoteport );
 	}
 #else
-	sc = sasl_server_new( "ldap", global_host, global_realm,
+	sc = sasl_server_new( "ldap", sasl_host, global_realm,
 		session_callbacks, SASL_SECURITY_LAYER, &ctx );
 #endif
 

Modified: openldap/vendor/openldap-release/servers/slapd/schema/core.ldif
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/schema/core.ldif	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/schema/core.ldif	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 # OpenLDAP Core schema
-# $OpenLDAP: pkg/ldap/servers/slapd/schema/core.ldif,v 1.2.2.2 2007/08/31 23:14:06 quanah Exp $
+# $OpenLDAP: pkg/ldap/servers/slapd/schema/core.ldif,v 1.2.2.4 2007/12/13 07:31:15 hyc Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 1998-2007 The OpenLDAP Foundation.
@@ -94,9 +94,12 @@
   SUBSTR caseIgnoreSubstringsMatch
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{64} )
 #
+# RFC 4519 definition ('countryName' in X.500 and RFC2256)
 olcAttributeTypes: ( 2.5.4.6 NAME ( 'c' 'countryName' )
-  DESC 'RFC2256: ISO-3166 country 2-letter code'
-  SUP name SINGLE-VALUE )
+  DESC 'RFC4519: two-letter ISO-3166 country code'
+  SUP name
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.11
+  SINGLE-VALUE )
 #
 olcAttributeTypes: ( 2.5.4.7 NAME ( 'l' 'localityName' )
   DESC 'RFC2256: locality which this object resides in'

Modified: openldap/vendor/openldap-release/servers/slapd/schema/core.schema
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/schema/core.schema	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/schema/core.schema	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 # OpenLDAP Core schema
-# $OpenLDAP: pkg/ldap/servers/slapd/schema/core.schema,v 1.88.2.3 2007/08/31 23:14:06 quanah Exp $
+# $OpenLDAP: pkg/ldap/servers/slapd/schema/core.schema,v 1.88.2.5 2007/12/13 07:31:15 hyc Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 1998-2007 The OpenLDAP Foundation.
@@ -92,11 +92,9 @@
 	SUBSTR caseIgnoreSubstringsMatch
 	SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{64} )
 
-# RFC 4519 definition (cannot be loaded because SYNTAX conflicts
-# with that of name).
-#
-attributetype ( 2.5.4.6 NAME 'c'
-	DESC 'RFC2256: ISO-3166 country 2-letter code'
+# RFC 4519 definition ('countryName' in X.500 and RFC2256)
+attributetype ( 2.5.4.6 NAME ( 'c' 'countryName' )
+	DESC 'RFC4519: two-letter ISO-3166 country code'
 	SUP name
 	SYNTAX 1.3.6.1.4.1.1466.115.121.1.11
 	SINGLE-VALUE )

Modified: openldap/vendor/openldap-release/servers/slapd/schema_init.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/schema_init.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/schema_init.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* schema_init.c - init builtin schema */
-/* $OpenLDAP: pkg/ldap/servers/slapd/schema_init.c,v 1.386.2.12 2007/10/18 01:35:12 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/schema_init.c,v 1.386.2.17 2007/12/03 15:04:31 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -62,6 +62,10 @@
 unsigned int index_substr_any_len = SLAP_INDEX_SUBSTR_ANY_LEN_DEFAULT;
 unsigned int index_substr_any_step = SLAP_INDEX_SUBSTR_ANY_STEP_DEFAULT;
 
+unsigned int index_intlen = SLAP_INDEX_INTLEN_DEFAULT;
+unsigned int index_intlen_strlen = SLAP_INDEX_INTLEN_STRLEN(
+	SLAP_INDEX_INTLEN_DEFAULT );
+
 ldap_pvt_thread_mutex_t	ad_undef_mutex;
 ldap_pvt_thread_mutex_t	oc_undef_mutex;
 
@@ -2109,8 +2113,187 @@
 	*matchp = match;
 	return LDAP_SUCCESS;
 }
-	
+
+/* 10**Chop < 256**Chopbytes and Chop > Chopbytes<<1 (for sign bit and itmp) */
+#define INDEX_INTLEN_CHOP 7
+#define INDEX_INTLEN_CHOPBYTES 3
+
 static int
+integerVal2Key(
+	struct berval *in,
+	struct berval *key,
+	struct berval *tmp,
+	void *ctx )
+{
+	/* index format:
+	 * only if too large: one's complement <sign*exponent (chopped bytes)>,
+	 * two's complement value (sign-extended or chopped as needed),
+	 * however the top <number of exponent-bytes + 1> bits of first byte
+	 * above is the inverse sign.   The next bit is the sign as delimiter.
+	 */
+	ber_slen_t k = index_intlen_strlen;
+	ber_len_t chop = 0;
+	unsigned signmask = ~0x7fU;
+	unsigned char lenbuf[sizeof(k) + 2], *lenp, neg = 0xff;
+	struct berval val = *in, itmp = *tmp;
+
+	if ( val.bv_val[0] != '-' ) {
+		neg = 0;
+		--k;
+	}
+
+	/* Chop least significant digits, increase length instead */
+	if ( val.bv_len > (ber_len_t) k ) {
+		chop = (val.bv_len-k+2)/INDEX_INTLEN_CHOP; /* 2 fewer digits */
+		val.bv_len -= chop * INDEX_INTLEN_CHOP;	/* #digits chopped */
+		chop *= INDEX_INTLEN_CHOPBYTES;		/* #bytes added */
+	}
+
+	if ( lutil_str2bin( &val, &itmp, ctx )) {
+		return LDAP_INVALID_SYNTAX;
+	}
+
+	/* Omit leading sign byte */
+	if ( itmp.bv_val[0] == neg ) {
+		itmp.bv_val++;
+		itmp.bv_len--;
+	}
+
+	k = (ber_slen_t) index_intlen - (ber_slen_t) (itmp.bv_len + chop);
+	if ( k > 0 ) {
+		assert( chop == 0 );
+		memset( key->bv_val, neg, k );	/* sign-extend */
+	} else if ( k != 0 || ((itmp.bv_val[0] ^ neg) & 0xc0) ) {
+		lenp = lenbuf + sizeof(lenbuf);
+		chop = - (ber_len_t) k;
+		do {
+			*--lenp = ((unsigned char) chop & 0xff) ^ neg;
+			signmask >>= 1;
+		} while ( (chop >>= 8) != 0 || (signmask >> 1) & (*lenp ^ neg) );
+		/* With n bytes in lenbuf, the top n+1 bits of (signmask&0xff)
+		 * are 1, and the top n+2 bits of lenp[] are the sign bit. */
+		k = (lenbuf + sizeof(lenbuf)) - lenp;
+		if ( k > (ber_slen_t) index_intlen )
+			k = index_intlen;
+		memcpy( key->bv_val, lenp, k );
+		itmp.bv_len = index_intlen - k;
+	}
+	memcpy( key->bv_val + k, itmp.bv_val, itmp.bv_len );
+	key->bv_val[0] ^= (unsigned char) signmask & 0xff; /* invert sign */
+	return 0;
+}
+
+/* Index generation function */
+static int
+integerIndexer(
+	slap_mask_t use,
+	slap_mask_t flags,
+	Syntax *syntax,
+	MatchingRule *mr,
+	struct berval *prefix,
+	BerVarray values,
+	BerVarray *keysp,
+	void *ctx )
+{
+	char ibuf[64];
+	struct berval itmp;
+	BerVarray keys;
+	ber_len_t vlen;
+	int i, rc;
+	unsigned maxstrlen = index_intlen_strlen + INDEX_INTLEN_CHOP-1;
+
+	/* count the values and find max needed length */
+	vlen = 0;
+	for( i = 0; !BER_BVISNULL( &values[i] ); i++ ) {
+		if ( vlen < values[i].bv_len )
+			vlen = values[i].bv_len;
+	}
+	if ( vlen > maxstrlen )
+		vlen = maxstrlen;
+
+	/* we should have at least one value at this point */
+	assert( i > 0 );
+
+	keys = slap_sl_malloc( sizeof( struct berval ) * (i+1), ctx );
+	for ( i = 0; !BER_BVISNULL( &values[i] ); i++ ) {
+		keys[i].bv_len = index_intlen;
+		keys[i].bv_val = slap_sl_malloc( index_intlen, ctx );
+	}
+	keys[i].bv_len = 0;
+	keys[i].bv_val = NULL;
+
+	if ( vlen > sizeof(ibuf) ) {
+		itmp.bv_val = slap_sl_malloc( vlen, ctx );
+	} else {
+		itmp.bv_val = ibuf;
+	}
+	itmp.bv_len = sizeof(ibuf);
+
+	for ( i=0; !BER_BVISNULL( &values[i] ); i++ ) {
+		if ( itmp.bv_val != ibuf ) {
+			itmp.bv_len = values[i].bv_len;
+			if ( itmp.bv_len <= sizeof(ibuf) )
+				itmp.bv_len = sizeof(ibuf);
+			else if ( itmp.bv_len > maxstrlen )
+				itmp.bv_len = maxstrlen;
+		}
+		rc = integerVal2Key( &values[i], &keys[i], &itmp, ctx );
+		if ( rc )
+			goto leave;
+	}
+	*keysp = keys;
+leave:
+	if ( itmp.bv_val != ibuf ) {
+		slap_sl_free( itmp.bv_val, ctx );
+	}
+	return rc;
+}
+
+/* Index generation function */
+static int
+integerFilter(
+	slap_mask_t use,
+	slap_mask_t flags,
+	Syntax *syntax,
+	MatchingRule *mr,
+	struct berval *prefix,
+	void * assertedValue,
+	BerVarray *keysp,
+	void *ctx )
+{
+	char ibuf[64];
+	struct berval iv;
+	BerVarray keys;
+	struct berval *value;
+	int rc;
+
+	value = (struct berval *) assertedValue;
+
+	keys = slap_sl_malloc( sizeof( struct berval ) * 2, ctx );
+
+	keys[0].bv_len = index_intlen;
+	keys[0].bv_val = slap_sl_malloc( index_intlen, ctx );
+
+	iv.bv_len = value->bv_len < index_intlen_strlen + INDEX_INTLEN_CHOP-1
+		? value->bv_len : index_intlen_strlen + INDEX_INTLEN_CHOP-1;
+	if ( iv.bv_len > (int) sizeof(ibuf) ) {
+		iv.bv_val = slap_sl_malloc( iv.bv_len, ctx );
+	} else {
+		iv.bv_val = ibuf;
+		iv.bv_len = sizeof(ibuf);
+	}
+
+	rc = integerVal2Key( value, keys, &iv, ctx );
+	if ( rc == 0 )
+		*keysp = keys;
+
+	if ( iv.bv_val != ibuf ) {
+		slap_sl_free( iv.bv_val, ctx );
+	}
+	return rc;
+}
+
+static int
 countryStringValidate(
 	Syntax *syntax,
 	struct berval *val )
@@ -2932,7 +3115,6 @@
 	char sbuf[64], *stmp = sbuf;
 	int rc;
 	ber_len_t n;
-	int is_hex = 0;
 
 	assert( in != NULL );
 	assert( out != NULL );
@@ -2958,7 +3140,7 @@
 	}
 	sn2.bv_val = stmp;
 	sn2.bv_len = sn.bv_len;
-	if ( lutil_str2bin( &sn, &sn2 )) {
+	if ( lutil_str2bin( &sn, &sn2, ctx )) {
 		rc = LDAP_INVALID_SYNTAX;
 		goto leave;
 	}
@@ -2983,10 +3165,11 @@
 	AC_MEMCPY( &out->bv_val[n], sn.bv_val, sn.bv_len );
 	{
 		int j;
-		unsigned char *v = sn2.bv_val;
+		unsigned char *v = (unsigned char *)sn2.bv_val;
 		out->bv_val[n++] = '\'';
 		for ( j = 0; j < sn2.bv_len; j++ ) {
-			sprintf( &out->bv_val[n], "%02X", v[j] );
+			snprintf( &out->bv_val[n], out->bv_len - n + 1,
+				"%02X", v[j] );
 			n += 2;
 		}
 		out->bv_val[n++] = '\'';
@@ -4650,14 +4833,14 @@
 
 	{"( 2.5.13.14 NAME 'integerMatch' "
 		"SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )",
-		SLAP_MR_EQUALITY | SLAP_MR_EXT, NULL,
+		SLAP_MR_EQUALITY | SLAP_MR_EXT | SLAP_MR_ORDERED_INDEX, NULL,
 		NULL, NULL, integerMatch,
-		octetStringIndexer, octetStringFilter,
+		integerIndexer, integerFilter,
 		NULL },
 
 	{"( 2.5.13.15 NAME 'integerOrderingMatch' "
 		"SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )",
-		SLAP_MR_ORDERING, NULL,
+		SLAP_MR_ORDERING | SLAP_MR_ORDERED_INDEX, NULL,
 		NULL, NULL, integerMatch,
 		NULL, NULL,
 		"integerMatch" },

Modified: openldap/vendor/openldap-release/servers/slapd/shell-backends/passwd-shell.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/shell-backends/passwd-shell.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/shell-backends/passwd-shell.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* passwd-shell.c - passwd(5) shell-based backend for slapd(8) */
-/* $OpenLDAP: pkg/ldap/servers/slapd/shell-backends/passwd-shell.c,v 1.14.2.2 2007/08/31 23:14:06 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/shell-backends/passwd-shell.c,v 1.14.2.3 2007/11/27 18:11:43 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -144,8 +144,6 @@
     struct ldattr	*attr;
     int			i;
 
-    entry = (struct ldentry *) ecalloc( 1, sizeof( struct ldentry ));
-
     /* 
      * construct the DN from pw_name
      */
@@ -153,13 +151,19 @@
 	/*
 	 * X.500 style DN
 	 */
-	sprintf( tmpbuf, "cn=%s, %s", pw->pw_name, op->ldop_suffixes[ 0 ] );
+	i = snprintf( tmpbuf, sizeof( tmpbuf ), "cn=%s, %s", pw->pw_name, op->ldop_suffixes[ 0 ] );
     } else {
 	/*
 	 * RFC-822 style DN
 	 */
-	sprintf( tmpbuf, "%s@%s", pw->pw_name, op->ldop_suffixes[ 0 ] );
+	i = snprintf( tmpbuf, sizeof( tmpbuf ), "%s@%s", pw->pw_name, op->ldop_suffixes[ 0 ] );
     }
+
+    if ( i < 0 || i >= sizeof( tmpbuf ) ) {
+        return NULL;
+    }
+
+    entry = (struct ldentry *) ecalloc( 1, sizeof( struct ldentry ));
     entry->lde_dn = estrdup( tmpbuf );
 
     /*

Modified: openldap/vendor/openldap-release/servers/slapd/slap.h
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/slap.h	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/slap.h	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* slap.h - stand alone ldap server include file */
-/* $OpenLDAP: pkg/ldap/servers/slapd/slap.h,v 1.764.2.15 2007/10/18 01:35:12 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/slap.h,v 1.764.2.19 2007/11/27 20:19:14 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -58,8 +58,6 @@
 
 LDAP_BEGIN_DECL
 
-#define SLAP_LIGHTWEIGHT_DISPATCHER /* experimental slapd architecture */
-
 #ifdef LDAP_DEVEL
 #define LDAP_COLLECTIVE_ATTRIBUTES
 #define LDAP_COMP_MATCH
@@ -254,6 +252,9 @@
 #define SLAP_INDEX_SUBSTR_ANY_LEN_DEFAULT		4
 #define SLAP_INDEX_SUBSTR_ANY_STEP_DEFAULT		2
 
+/* default for ordered integer index keys */
+#define SLAP_INDEX_INTLEN_DEFAULT	4
+
 #define SLAP_INDEX_FLAGS         0xF000UL
 #define SLAP_INDEX_NOSUBTYPES    0x1000UL /* don't use index w/ subtypes */
 #define SLAP_INDEX_NOTAGS        0x2000UL /* don't use index w/ tags */
@@ -1766,6 +1767,7 @@
 #define SLAP_DBFLAG_NOLASTMOD		0x0001U
 #define SLAP_DBFLAG_NO_SCHEMA_CHECK	0x0002U
 #define	SLAP_DBFLAG_HIDDEN		0x0004U
+#define	SLAP_DBFLAG_ONE_SUFFIX		0x0008U
 #define	SLAP_DBFLAG_GLUE_INSTANCE	0x0010U	/* a glue backend */
 #define	SLAP_DBFLAG_GLUE_SUBORDINATE	0x0020U	/* child of a glue hierarchy */
 #define	SLAP_DBFLAG_GLUE_LINKED		0x0040U	/* child is connected to parent */
@@ -1783,6 +1785,7 @@
 #define SLAP_NOLASTMOD(be)			(SLAP_DBFLAGS(be) & SLAP_DBFLAG_NOLASTMOD)
 #define SLAP_LASTMOD(be)			(!SLAP_NOLASTMOD(be))
 #define SLAP_DBHIDDEN(be)			(SLAP_DBFLAGS(be) & SLAP_DBFLAG_HIDDEN)
+#define SLAP_DB_ONE_SUFFIX(be)		(SLAP_DBFLAGS(be) & SLAP_DBFLAG_ONE_SUFFIX)
 #define SLAP_ISOVERLAY(be)			(SLAP_DBFLAGS(be) & SLAP_DBFLAG_OVERLAY)
 #define SLAP_ISGLOBALOVERLAY(be)		(SLAP_DBFLAGS(be) & SLAP_DBFLAG_GLOBAL_OVERLAY)
 #define SLAP_DBMONITORING(be)			(SLAP_DBFLAGS(be) & SLAP_DBFLAG_MONITORING)
@@ -2332,8 +2335,9 @@
 typedef struct PagedResultsState {
 	Backend *ps_be;
 	ber_int_t ps_size;
+	int ps_count;
 	PagedResultsCookie ps_cookie;
-	int ps_count;
+	struct berval ps_cookieval;
 } PagedResultsState;
 
 struct slap_csn_entry {
@@ -2391,6 +2395,39 @@
 };
 
 /*
+ * Operation indices
+ */
+typedef enum {
+	SLAP_OP_BIND = 0,
+	SLAP_OP_UNBIND,
+	SLAP_OP_SEARCH,
+	SLAP_OP_COMPARE,
+	SLAP_OP_MODIFY,
+	SLAP_OP_MODRDN,
+	SLAP_OP_ADD,
+	SLAP_OP_DELETE,
+	SLAP_OP_ABANDON,
+	SLAP_OP_EXTENDED,
+	SLAP_OP_LAST
+} slap_op_t;
+
+typedef struct slap_counters_t {
+	struct slap_counters_t	*sc_next;
+	ldap_pvt_thread_mutex_t	sc_mutex;
+	ldap_pvt_mp_t		sc_bytes;
+	ldap_pvt_mp_t		sc_pdu;
+	ldap_pvt_mp_t		sc_entries;
+	ldap_pvt_mp_t		sc_refs;
+
+	ldap_pvt_mp_t		sc_ops_completed;
+	ldap_pvt_mp_t		sc_ops_initiated;
+#ifdef SLAPD_MONITOR
+	ldap_pvt_mp_t		sc_ops_completed_[SLAP_OP_LAST];
+	ldap_pvt_mp_t		sc_ops_initiated_[SLAP_OP_LAST];
+#endif /* SLAPD_MONITOR */
+} slap_counters_t;
+
+/*
  * represents an operation pending from an ldap client
  */
 typedef struct Opheader {
@@ -2407,6 +2444,8 @@
 	void	*oh_tmpmemctx;		/* slab malloc context */
 	BerMemoryFunctions *oh_tmpmfuncs;
 
+	slap_counters_t	*oh_counters;
+
 	char		oh_log_prefix[ /* sizeof("conn=18446744073709551615 op=18446744073709551615") */ SLAP_TEXT_BUFLEN ];
 
 #ifdef LDAP_SLAPI
@@ -2439,6 +2478,7 @@
 #define o_threadctx o_hdr->oh_threadctx
 #define o_tmpmemctx o_hdr->oh_tmpmemctx
 #define o_tmpmfuncs o_hdr->oh_tmpmfuncs
+#define o_counters o_hdr->oh_counters
 
 #define	o_tmpalloc	o_tmpmfuncs->bmf_malloc
 #define o_tmpcalloc	o_tmpmfuncs->bmf_calloc
@@ -2668,6 +2708,7 @@
 	int			c_struct_state; /* structure management state */
 	int			c_conn_state;	/* connection state */
 	int			c_conn_idx;		/* slot in connections array */
+	ber_socket_t	c_sd;
 	const char	*c_close_reason; /* why connection is closing */
 
 	ldap_pvt_thread_mutex_t	c_mutex; /* protect the connection */
@@ -2685,7 +2726,6 @@
 #define c_sock_name c_listener->sl_name	/* sock name (trans=addr:port) */
 
 	/* only can be changed by binding thread */
-	int		c_sasl_bind_in_progress;	/* multi-op bind in progress */
 	struct berval	c_sasl_bind_mech;			/* mech in progress */
 	struct berval	c_sasl_dn;	/* temporary storage */
 	struct berval	c_sasl_authz_dn;	/* SASL proxy authz */
@@ -2712,22 +2752,25 @@
 	ldap_pvt_thread_cond_t	c_write_cv;		/* used to wait for sd write-ready*/
 
 	BerElement	*c_currentber;	/* ber we're attempting to read */
-	int		c_writewaiter;	/* true if writer is waiting */
 
+	char		c_sasl_bind_in_progress;	/* multi-op bind in progress */
+
+	char		c_writewaiter;	/* true if writer is waiting */
+
 #define	CONN_IS_TLS	1
 #define	CONN_IS_UDP	2
 #define	CONN_IS_CLIENT	4
 #define	CONN_IS_IPC	8
 
 #ifdef LDAP_CONNECTIONLESS
-	int	c_is_udp;		/* true if this is (C)LDAP over UDP */
+	char	c_is_udp;		/* true if this is (C)LDAP over UDP */
 #endif
 #ifdef HAVE_TLS
-	int	c_is_tls;		/* true if this LDAP over raw TLS */
-	int	c_needs_tls_accept;	/* true if SSL_accept should be called */
+	char	c_is_tls;		/* true if this LDAP over raw TLS */
+	char	c_needs_tls_accept;	/* true if SSL_accept should be called */
 #endif
-	int		c_sasl_layers;	 /* true if we need to install SASL i/o handlers */
-	int	c_sasl_done;		/* SASL completed once */
+	char	c_sasl_layers;	 /* true if we need to install SASL i/o handlers */
+	char	c_sasl_done;		/* SASL completed once */
 	void	*c_sasl_authctx;	/* SASL authentication context */
 	void	*c_sasl_sockctx;	/* SASL security layer context */
 	void	*c_sasl_extra;		/* SASL session extra stuff */
@@ -2810,48 +2853,13 @@
 	int	sl_is_udp;		/* UDP listener is also data port */
 #endif
 	int	sl_mute;	/* Listener is temporarily disabled due to emfile */
-#ifdef SLAP_LIGHTWEIGHT_DISPATCHER
 	int	sl_busy;	/* Listener is busy (accept thread activated) */
-#endif
 	ber_socket_t sl_sd;
 	Sockaddr sl_sa;
 #define sl_addr	sl_sa.sa_in_addr
 };
 
 /*
- * Operation indices
- */
-typedef enum {
-	SLAP_OP_BIND = 0,
-	SLAP_OP_UNBIND,
-	SLAP_OP_SEARCH,
-	SLAP_OP_COMPARE,
-	SLAP_OP_MODIFY,
-	SLAP_OP_MODRDN,
-	SLAP_OP_ADD,
-	SLAP_OP_DELETE,
-	SLAP_OP_ABANDON,
-	SLAP_OP_EXTENDED,
-	SLAP_OP_LAST
-} slap_op_t;
-
-typedef struct slap_counters_t {
-	ldap_pvt_thread_mutex_t	sc_sent_mutex;
-	ldap_pvt_mp_t		sc_bytes;
-	ldap_pvt_mp_t		sc_pdu;
-	ldap_pvt_mp_t		sc_entries;
-	ldap_pvt_mp_t		sc_refs;
-
-	ldap_pvt_thread_mutex_t	sc_ops_mutex;
-	ldap_pvt_mp_t		sc_ops_completed;
-	ldap_pvt_mp_t		sc_ops_initiated;
-#ifdef SLAPD_MONITOR
-	ldap_pvt_mp_t		sc_ops_completed_[SLAP_OP_LAST];
-	ldap_pvt_mp_t		sc_ops_initiated_[SLAP_OP_LAST];
-#endif /* SLAPD_MONITOR */
-} slap_counters_t;
-
-/*
  * Better know these all around slapd
  */
 #define SLAP_LDAPDN_PRETTY 0x1

Modified: openldap/vendor/openldap-release/servers/slapd/slapadd.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/slapadd.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/slapadd.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/slapadd.c,v 1.36.2.3 2007/08/31 23:14:00 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/slapadd.c,v 1.36.2.4 2007/11/15 00:27:55 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -353,10 +353,13 @@
 			ctxcsn_e = be->be_entry_get( be, ctxcsn_id );
 			if ( ctxcsn_e != NULL ) {
 				Entry *e = entry_dup( ctxcsn_e );
+				int change;
 				attr = attr_find( e->e_attrs, slap_schema.si_ad_contextCSN );
 				if ( attr ) {
 					int		i;
 
+					change = 0;
+
 					for ( i = 0; !BER_BVISNULL( &attr->a_nvals[ i ] ); i++ ) {
 						int rc_sid;
 
@@ -384,7 +387,9 @@
 								&maxcsn[ sid ], &attr->a_nvals[i], &text );
 						}
 
-						if ( match < 0 ) {
+						if ( match > 0 ) {
+							change = 1;
+						} else {
 							AC_MEMCPY( maxcsn[ sid ].bv_val,
 								attr->a_nvals[ i ].bv_val,
 								attr->a_nvals[ i ].bv_len );
@@ -393,30 +398,37 @@
 						}
 					}
 
-					if ( attr->a_nvals != attr->a_nvals ) {
-						ber_bvarray_free( attr->a_nvals );
+					if ( change ) {
+						if ( attr->a_nvals != attr->a_vals ) {
+							ber_bvarray_free( attr->a_nvals );
+						}
+						attr->a_nvals = NULL;
+						ber_bvarray_free( attr->a_vals );
+						attr->a_vals = NULL;
+						attr->a_numvals = 0;
 					}
-					attr->a_nvals = NULL;
-					ber_bvarray_free( attr->a_vals );
-					attr->a_vals = NULL;
+				} else {
+					change = 1;
 				}
 
-				for ( sid = 0; sid <= SLAP_SYNC_SID_MAX; sid++ ) {
-					if ( maxcsn[ sid ].bv_len ) {
-						attr_merge_one( e, slap_schema.si_ad_contextCSN,
-							&maxcsn[ sid], NULL );
+				if ( change ) {
+					for ( sid = 0; sid <= SLAP_SYNC_SID_MAX; sid++ ) {
+						if ( maxcsn[ sid ].bv_len ) {
+							attr_merge_one( e, slap_schema.si_ad_contextCSN,
+								&maxcsn[ sid], NULL );
+						}
 					}
+
+					ctxcsn_id = be->be_entry_modify( be, e, &bvtext );
+					if( ctxcsn_id == NOID ) {
+						fprintf( stderr, "%s: could not modify ctxcsn\n",
+							progname);
+						rc = EXIT_FAILURE;
+					} else if ( verbose ) {
+						fprintf( stderr, "modified: \"%s\" (%08lx)\n",
+							e->e_dn, (long) ctxcsn_id );
+					}
 				}
-			
-				ctxcsn_id = be->be_entry_modify( be, e, &bvtext );
-				if( ctxcsn_id == NOID ) {
-					fprintf( stderr, "%s: could not modify ctxcsn\n",
-						progname);
-					rc = EXIT_FAILURE;
-				} else if ( verbose ) {
-					fprintf( stderr, "modified: \"%s\" (%08lx)\n",
-						e->e_dn, (long) ctxcsn_id );
-				}
 				entry_free( e );
 			}
 		} 

Modified: openldap/vendor/openldap-release/servers/slapd/slapcommon.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/slapcommon.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/slapcommon.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* slapcommon.c - common routine for the slap tools */
-/* $OpenLDAP: pkg/ldap/servers/slapd/slapcommon.c,v 1.73.2.5 2007/10/17 01:02:21 quanah Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/slapcommon.c,v 1.73.2.6 2007/11/27 19:27:10 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 1998-2007 The OpenLDAP Foundation.
@@ -88,7 +88,7 @@
 		break;
 
 	case SLAPINDEX:
-		options = " [-c]\n\t[-g] [-n databasenumber | -b suffix] [attr ...] [-q]\n";
+		options = " [-c]\n\t[-g] [-n databasenumber | -b suffix] [attr ...] [-q] [-t]\n";
 		break;
 
 	case SLAPTEST:
@@ -241,7 +241,7 @@
 
 	switch( tool ) {
 	case SLAPADD:
-		options = "b:cd:f:F:gj:l:n:o:qsS:tuvw";
+		options = "b:cd:f:F:gj:l:n:o:qsS:uvw";
 		break;
 
 	case SLAPCAT:
@@ -265,7 +265,7 @@
 		break;
 
 	case SLAPINDEX:
-		options = "b:cd:f:F:gn:o:qv";
+		options = "b:cd:f:F:gn:o:qtv";
 		mode |= SLAP_TOOL_READMAIN;
 		break;
 

Modified: openldap/vendor/openldap-release/servers/slapd/slapd.ldif
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/slapd.ldif	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/slapd.ldif	2007-12-15 09:30:12 UTC (rev 883)
@@ -28,6 +28,7 @@
 #
 #dn: cn=module,cn=config
 #objectClass: olcModuleList
+#cn: module
 #olcModulepath:	%MODULEDIR%
 #olcModuleload:	back_bdb.la
 #olcModuleload:	back_hdb.la
@@ -82,7 +83,7 @@
 olcSuffix:		dc=my-domain,dc=com
 olcRootDN:		cn=Manager,dc=my-domain,dc=com
 # Cleartext passwords, especially for the rootdn, should
-# be avoided.  See slappasswd(8) and slapd.d(5) for details.
+# be avoided.  See slappasswd(8) and slapd-config(5) for details.
 # Use of strong authentication encouraged.
 olcRootPW:		secret
 # The database directory MUST exist prior to running slapd AND 

Modified: openldap/vendor/openldap-release/servers/slapd/slapi/plugin.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/slapi/plugin.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/slapi/plugin.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/slapi/plugin.c,v 1.43.2.3 2007/10/08 09:49:41 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/slapi/plugin.c,v 1.43.2.4 2007/11/27 18:11:43 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2002-2007 The OpenLDAP Foundation.
@@ -722,7 +722,11 @@
 		slapi_pblock_get( pp, SLAPI_X_CONFIG_ARGV, &argv );
 		if ( argv == NULL ) /* could be dynamic plugin */
 			continue;
-		idx.bv_len = sprintf( idx.bv_val, "{%d}", i );
+		idx.bv_len = snprintf( idx.bv_val, sizeof( ibuf ), "{%d}", i );
+		if ( idx.bv_len >= sizeof( ibuf ) ) {
+			/* FIXME: just truncating by now */
+			idx.bv_len = sizeof( ibuf ) - 1;
+		}
 		bv.bv_len = idx.bv_len;
 		for (j=1; argv[j]; j++) {
 			bv.bv_len += strlen(argv[j]);

Modified: openldap/vendor/openldap-release/servers/slapd/slapi/slapi_utils.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/slapi/slapi_utils.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/slapi/slapi_utils.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,4 +1,4 @@
-/* $OpenLDAP: pkg/ldap/servers/slapd/slapi/slapi_utils.c,v 1.189.2.5 2007/09/29 09:55:22 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/slapi/slapi_utils.c,v 1.189.2.8 2007/11/27 20:00:53 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2002-2007 The OpenLDAP Foundation.
@@ -2153,7 +2153,6 @@
 int slapi_attr_value_find( const Slapi_Attr *a, struct berval *v )
 {
 	int rc;
-	int ret;
 
 	if ( a ->a_vals == NULL ) {
 		return -1;
@@ -3216,21 +3215,27 @@
 	int rc;
 
 	size = sizeof("ldap:///");
-	if ( secure )
+	if ( secure ) {
 		size++;
+	}
 	size += strlen( ldaphost );
-	if ( ldapport != 0 )
+	if ( ldapport != 0 ) {
 		size += 32;
+	}
 
 	url = slapi_ch_malloc( size );
 
 	if ( ldapport != 0 ) {
-		sprintf( url, "ldap%s://%s:%d/", ( secure ? "s" : "" ), ldaphost, ldapport );
+		rc = snprintf( url, size, "ldap%s://%s:%d/", ( secure ? "s" : "" ), ldaphost, ldapport );
 	} else {
-		sprintf( url, "ldap%s://%s/", ( secure ? "s" : "" ), ldaphost );
+		rc = snprintf( url, size, "ldap%s://%s/", ( secure ? "s" : "" ), ldaphost );
 	}
 
-	rc = ldap_initialize( &ld, url );
+	if ( rc > 0 && rc < size ) {
+		rc = ldap_initialize( &ld, url );
+	} else {
+		ld = NULL;
+	}
 
 	slapi_ch_free_string( &url );
 

Modified: openldap/vendor/openldap-release/servers/slapd/syncrepl.c
===================================================================
--- openldap/vendor/openldap-release/servers/slapd/syncrepl.c	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/servers/slapd/syncrepl.c	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 /* syncrepl.c -- Replication Engine which uses the LDAP Sync protocol */
-/* $OpenLDAP: pkg/ldap/servers/slapd/syncrepl.c,v 1.254.2.18 2007/10/22 07:16:20 hyc Exp $ */
+/* $OpenLDAP: pkg/ldap/servers/slapd/syncrepl.c,v 1.254.2.21 2007/11/27 20:11:48 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2003-2007 The OpenLDAP Foundation.
@@ -93,11 +93,12 @@
 	int			si_tlimit;
 	int			si_refreshDelete;
 	int			si_refreshPresent;
+	int			si_refreshDone;
 	int			si_syncdata;
 	int			si_logstate;
-	int			si_conn_setup;
 	Avlnode			*si_presentlist;
 	LDAP			*si_ld;
+	Connection		*si_conn;
 	LDAP_LIST_HEAD(np, nonpresent_entry)	si_nonpresentlist;
 	ldap_pvt_thread_mutex_t	si_mutex;
 } syncinfo_t;
@@ -521,6 +522,7 @@
 				if ( ber_bvarray_dup_x( &si->si_syncCookie.ctxcsn,
 					si->si_cookieState->cs_vals, NULL )) {
 					rc = LDAP_NO_MEMORY;
+					ldap_pvt_thread_mutex_unlock( &si->si_cookieState->cs_mutex );
 					goto done;
 				}
 				si->si_syncCookie.numcsns = si->si_cookieState->cs_num;
@@ -628,6 +630,8 @@
 		ldap_pvt_thread_mutex_unlock( &si->si_cookieState->cs_mutex );
 	}
 
+	si->si_refreshDone = 0;
+
 	rc = ldap_sync_search( si, op->o_tmpmemctx );
 
 	if( rc != LDAP_SUCCESS ) {
@@ -716,7 +720,6 @@
 	struct timeval tout = { 0, 0 };
 
 	int		refreshDeletes = 0;
-	int		refreshDone = 1;
 	BerVarray syncUUIDs = NULL;
 	ber_tag_t si_tag;
 
@@ -973,10 +976,14 @@
 								slap_parse_sync_cookie( &syncCookie, NULL );
 							}
 						}
+						/* Defaults to TRUE */
 						if ( ber_peek_tag( ber, &len ) ==
 							LDAP_TAG_REFRESHDONE )
 						{
-							ber_scanf( ber, "b", &refreshDone );
+							ber_scanf( ber, "b", &si->si_refreshDone );
+						} else
+						{
+							si->si_refreshDone = 1;
 						}
 						ber_scanf( ber, /*"{"*/ "}" );
 						break;
@@ -1106,11 +1113,9 @@
 	if ( res ) ldap_msgfree( res );
 
 	if ( rc && rc != LDAP_SYNC_REFRESH_REQUIRED && si->si_ld ) {
-		if ( si->si_conn_setup ) {
-			ber_socket_t s;
-			ldap_get_option( si->si_ld, LDAP_OPT_DESC, &s );
-			connection_client_stop( s );
-			si->si_conn_setup = 0;
+		if ( si->si_conn ) {
+			connection_client_stop( si->si_conn );
+			si->si_conn = NULL;
 		}
 		ldap_unbind_ext( si->si_ld, NULL, NULL );
 		si->si_ld = NULL;
@@ -1153,10 +1158,9 @@
 
 	if ( slapd_shutdown ) {
 		if ( si->si_ld ) {
-			if ( si->si_conn_setup ) {
-				ldap_get_option( si->si_ld, LDAP_OPT_DESC, &s );
-				connection_client_stop( s );
-				si->si_conn_setup = 0;
+			if ( si->si_conn ) {
+				connection_client_stop( si->si_conn );
+				si->si_conn = NULL;
 			}
 			ldap_unbind_ext( si->si_ld, NULL, NULL );
 			si->si_ld = NULL;
@@ -1208,7 +1212,7 @@
 
 		/* We got deleted while running on cn=config */
 		if ( !si->si_ctype ) {
-			if ( si->si_conn_setup )
+			if ( si->si_conn )
 				dostop = 1;
 			rc = -1;
 		}
@@ -1218,14 +1222,12 @@
 			 * If we failed, tear down the connection and reschedule.
 			 */
 			if ( rc == LDAP_SUCCESS ) {
-				if ( si->si_conn_setup ) {
-					connection_client_enable( s );
+				if ( si->si_conn ) {
+					connection_client_enable( si->si_conn );
 				} else {
-					rc = connection_client_setup( s, do_syncrepl, arg );
-					if ( rc == 0 )
-						si->si_conn_setup = 1;
+					si->si_conn = connection_client_setup( s, do_syncrepl, arg );
 				} 
-			} else if ( si->si_conn_setup ) {
+			} else if ( si->si_conn ) {
 				dostop = 1;
 			}
 		} else {
@@ -1246,7 +1248,8 @@
 	}
 
 	if ( dostop ) {
-		connection_client_stop( s );
+		connection_client_stop( si->si_conn );
+		si->si_conn = NULL;
 	}
 
 	if ( rc == LDAP_SUCCESS ) {
@@ -1888,7 +1891,7 @@
 		si->si_ridtxt, syncrepl_state2str( syncstate ), 0 );
 
 	if (( syncstate == LDAP_SYNC_PRESENT || syncstate == LDAP_SYNC_ADD ) ) {
-		if ( !si->si_refreshPresent ) {
+		if ( !si->si_refreshPresent && !si->si_refreshDone ) {
 			syncuuid_inserted = avl_presentlist_insert( si, syncUUID );
 		}
 	}
@@ -3217,11 +3220,9 @@
 		si_next = sie->si_next;
 
 		if ( sie->si_ld ) {
-			if ( sie->si_conn_setup ) {
-				ber_socket_t s;
-				ldap_get_option( sie->si_ld, LDAP_OPT_DESC, &s );
-				connection_client_stop( s );
-				sie->si_conn_setup = 0;
+			if ( sie->si_conn ) {
+				connection_client_stop( sie->si_conn );
+				sie->si_conn = NULL;
 			}
 			ldap_unbind_ext( sie->si_ld, NULL, NULL );
 		}
@@ -3837,7 +3838,6 @@
 	si->si_manageDSAit = 0;
 	si->si_tlimit = 0;
 	si->si_slimit = 0;
-	si->si_conn_setup = 0;
 
 	si->si_presentlist = NULL;
 	LDAP_LIST_INIT( &si->si_nonpresentlist );

Modified: openldap/vendor/openldap-release/tests/scripts/conf.sh
===================================================================
--- openldap/vendor/openldap-release/tests/scripts/conf.sh	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/tests/scripts/conf.sh	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 #! /bin/sh
-# $OpenLDAP: pkg/ldap/tests/scripts/conf.sh,v 1.49.2.6 2007/09/27 21:38:26 ralf Exp $
+# $OpenLDAP: pkg/ldap/tests/scripts/conf.sh,v 1.49.2.7 2007/11/27 20:21:56 quanah Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 1998-2007 The OpenLDAP Foundation.
@@ -44,6 +44,7 @@
 	-e "s/^#${AC_accesslog}#//"			\
 	-e "s/^#${AC_dds}#//"				\
 	-e "s/^#${AC_dynlist}#//"			\
+	-e "s/^#${AC_memberof}#//"			\
 	-e "s/^#${AC_pcache}#//"			\
 	-e "s/^#${AC_ppolicy}#//"			\
 	-e "s/^#${AC_refint}#//"			\

Modified: openldap/vendor/openldap-release/tests/scripts/defines.sh
===================================================================
--- openldap/vendor/openldap-release/tests/scripts/defines.sh	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/tests/scripts/defines.sh	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 #! /bin/sh
-# $OpenLDAP: pkg/ldap/tests/scripts/defines.sh,v 1.141.2.8 2007/10/19 03:01:07 hyc Exp $
+# $OpenLDAP: pkg/ldap/tests/scripts/defines.sh,v 1.141.2.9 2007/11/20 19:11:27 quanah Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 1998-2007 The OpenLDAP Foundation.
@@ -291,7 +291,9 @@
 MASTEROUT=$SERVER1OUT
 MASTERFLT=$SERVER1FLT
 SLAVEOUT=$SERVER2OUT
+SLAVE2OUT=$SERVER3OUT
 SLAVEFLT=$SERVER2FLT
+SLAVE2FLT=$SERVER3FLT
 
 # original outputs for cmp
 PROXYCACHEOUT=$DATADIR/proxycache.out

Modified: openldap/vendor/openldap-release/tests/scripts/test020-proxycache
===================================================================
--- openldap/vendor/openldap-release/tests/scripts/test020-proxycache	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/tests/scripts/test020-proxycache	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 #! /bin/sh
-# $OpenLDAP: pkg/ldap/tests/scripts/test020-proxycache,v 1.26.2.6 2007/10/23 09:37:59 ralf Exp $
+# $OpenLDAP: pkg/ldap/tests/scripts/test020-proxycache,v 1.26.2.8 2007/11/29 12:46:24 hyc Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 1998-2007 The OpenLDAP Foundation.
@@ -416,34 +416,32 @@
 #actually, 12 would be answerable, but since 8 made mail=*example.com
 #not answerable because of sizelimit, queries contained in it are no longer
 #answerable as well
+ANSWERABILITY=111001
+grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ 
+		if (NR > FIRST) { 
+			if ($2 == "NOT") 
+				printf "Query %d not answerable\n",NR
+			else 
+				printf "Query %d answerable\n",NR 
+		}
+	}' 
+ANSWERED=`grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ 
+		if (NR > FIRST) { 
+			if ($2 == "NOT") 
+				printf "0" 
+			else 
+				printf "1"
+		} 
+	}'`
 
-#FIXME: Anwerability test is currently disabled due to ITS#5187
-#ANSWERABILITY=111001
-#grep ANSWERABLE $LOG2 | awk -vFIRST=$FIRST '{ 
-#		if (NR > FIRST) { 
-#			if ($2 == "NOT") 
-#				printf "Query %d not answerable\n",NR
-#			else 
-#				printf "Query %d answerable\n",NR 
-#		}
-#	}' 
-#ANSWERED=`grep ANSWERABLE $LOG2 | awk -vFIRST=$FIRST '{ 
-#		if (NR > FIRST) { 
-#			if ($2 == "NOT") 
-#				printf "0" 
-#			else 
-#				printf "1"
-#		} 
-#	}'`
-
 test $KILLSERVERS != no && kill -HUP $KILLPIDS
 
-#if test "$ANSWERABILITY" = "$ANSWERED" ; then
-#	echo "Successfully verified answerability"
-#else 
-#	echo "Error in verifying answerability"
-#	exit 1
-#fi
+if test "$ANSWERABILITY" = "$ANSWERED" ; then
+	echo "Successfully verified answerability"
+else 
+	echo "Error in verifying answerability"
+	exit 1
+fi
 
 echo "Filtering ldapsearch results..."
 . $LDIFFILTER < $SEARCHOUT > $SEARCHFLT

Modified: openldap/vendor/openldap-release/tests/scripts/test024-unique
===================================================================
--- openldap/vendor/openldap-release/tests/scripts/test024-unique	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/tests/scripts/test024-unique	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 #! /bin/sh
-# $OpenLDAP: pkg/ldap/tests/scripts/test024-unique,v 1.8.2.2 2007/08/31 23:14:09 quanah Exp $
+# $OpenLDAP: pkg/ldap/tests/scripts/test024-unique,v 1.8.2.3 2007/11/28 22:34:19 quanah Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 2004-2007 The OpenLDAP Foundation.
@@ -28,7 +28,7 @@
 
 echo "Running slapadd to build slapd database..."
 . $CONFFILTER $BACKEND $MONITORDB < $UNIQUECONF > $CONF1
-$SLAPADD -f $CONF1 -l $LDIFUNIQUE -d7
+$SLAPADD -f $CONF1 -l $LDIFUNIQUE
 RC=$?
 if test $RC != 0 ; then
 	echo "slapadd failed ($RC)!"

Modified: openldap/vendor/openldap-release/tests/scripts/test050-syncrepl-multimaster
===================================================================
--- openldap/vendor/openldap-release/tests/scripts/test050-syncrepl-multimaster	2007-12-15 09:23:40 UTC (rev 882)
+++ openldap/vendor/openldap-release/tests/scripts/test050-syncrepl-multimaster	2007-12-15 09:30:12 UTC (rev 883)
@@ -1,5 +1,5 @@
 #! /bin/sh
-# $OpenLDAP: pkg/ldap/tests/scripts/test050-syncrepl-multimaster,v 1.3.2.3 2007/09/02 00:02:15 hyc Exp $
+# $OpenLDAP: pkg/ldap/tests/scripts/test050-syncrepl-multimaster,v 1.3.2.4 2007/11/20 19:11:27 quanah Exp $
 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
 ##
 ## Copyright 1998-2007 The OpenLDAP Foundation.
@@ -23,12 +23,15 @@
 
 PRODIR=$TESTDIR/pro
 CONDIR=$TESTDIR/con
+CONDIR2=$TESTDIR/con2
 DBPRO=$PRODIR/db
 DBCON=$CONDIR/db
+DBCON2=$CONDIR2/db
 CFPRO=$PRODIR/slapd.d
 CFCON=$CONDIR/slapd.d
+CFCON2=$CONDIR2/slapd.d
 
-mkdir -p $TESTDIR $PRODIR $CONDIR $DBPRO $DBCON $CFPRO $CFCON
+mkdir -p $TESTDIR $PRODIR $CONDIR $CONDIR2 $DBPRO $DBCON $DBCON2 $CFPRO $CFCON $CFCON2
 
 $SLAPPASSWD -g -n >$CONFIGPWF
 
@@ -36,6 +39,7 @@
 # Test replication of dynamic config:
 # - start producer
 # - start consumer
+# - start consumer2
 # - configure over ldap
 # - populate over ldap
 # - configure syncrepl over ldap
@@ -43,6 +47,18 @@
 #
 
 echo "Initializing server configurations..."
+$SLAPADD -F $CFCON2 -n 0 <<EOF
+dn: cn=config
+objectClass: olcGlobal
+cn: config
+olcServerID: 3
+
+dn: olcDatabase={0}config,cn=config
+objectClass: olcDatabaseConfig
+olcDatabase: {0}config
+olcRootPW:< file://$CONFIGPWF
+EOF
+
 $SLAPADD -F $CFCON -n 0 <<EOF
 dn: cn=config
 objectClass: olcGlobal
@@ -128,6 +144,7 @@
 replace: olcServerID
 olcServerID: 1 $URI1
 olcServerID: 2 $URI2
+olcServerID: 3 $URI3
 
 dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config
 changetype: add
@@ -144,6 +161,9 @@
 olcSyncRepl: rid=002 provider=$URI2 binddn="cn=config" bindmethod=simple
   credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
   retry="5 5 300 5" timeout=1
+olcSyncRepl: rid=003 provider=$URI3 binddn="cn=config" bindmethod=simple
+  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
+  retry="5 5 300 5" timeout=1
 -
 add: olcMirrorMode
 olcMirrorMode: TRUE
@@ -197,11 +217,64 @@
 olcSyncRepl: rid=002 provider=$URI2 binddn="cn=config" bindmethod=simple
   credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
   retry="5 5 300 5" timeout=1
+olcSyncRepl: rid=003 provider=$URI3 binddn="cn=config" bindmethod=simple
+  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
+  retry="5 5 300 5" timeout=1
 -
 add: olcMirrorMode
 olcMirrorMode: TRUE
 EOF
 
+echo "Starting consumer2 slapd on TCP/IP port $PORT3..."
+cd $CONDIR2
+$SLAPD -F ./slapd.d -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 &
+SLAVE2PID=$!
+if test $WAIT != 0 ; then
+    echo SLAVE2PID $SLAVE2PID
+    read foo
+fi
+KILLPIDS="$KILLPIDS $SLAVE2PID"
+cd $TESTWD
+
+sleep 1
+
+echo "Using ldapsearch to check that consumer2 slapd is running..."
+for i in 0 1 2 3 4 5; do
+	$LDAPSEARCH -s base -b "" -H $URI3 \
+		'objectclass=*' > /dev/null 2>&1
+	RC=$?
+	if test $RC = 0 ; then
+		break
+	fi
+	echo "Waiting 5 seconds for slapd to start..."
+	sleep 5
+done
+
+if test $RC != 0 ; then
+	echo "ldapsearch failed ($RC)!"
+	test $KILLSERVERS != no && kill -HUP $KILLPIDS
+	exit $RC
+fi
+
+echo "Configuring syncrepl on consumer2..."
+$LDAPMODIFY -D cn=config -H $URI3 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
+dn: olcDatabase={0}config,cn=config
+changetype: modify
+add: olcSyncRepl
+olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple
+  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
+  retry="5 5 300 5" timeout=1
+olcSyncRepl: rid=002 provider=$URI2 binddn="cn=config" bindmethod=simple
+  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
+  retry="5 5 300 5" timeout=1
+olcSyncRepl: rid=003 provider=$URI3 binddn="cn=config" bindmethod=simple
+  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
+  retry="5 5 300 5" timeout=1
+-
+add: olcMirrorMode
+olcMirrorMode: TRUE
+EOF
+
 echo "Adding schema and databases on producer..."
 $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
 include: file://$ABS_SCHEMADIR/core.ldif
@@ -246,12 +319,15 @@
 olcDbDirectory: ./db
 olcRootDN: $MANAGERDN
 olcRootPW: $PASSWD
-olcSyncRepl: rid=003 provider=$URI1 binddn="$MANAGERDN" bindmethod=simple
+olcSyncRepl: rid=004 provider=$URI1 binddn="$MANAGERDN" bindmethod=simple
   credentials=$PASSWD searchbase="$BASEDN" type=refreshOnly
   interval=00:00:00:10 retry="5 5 300 5" timeout=1
-olcSyncRepl: rid=004 provider=$URI2 binddn="$MANAGERDN" bindmethod=simple
+olcSyncRepl: rid=005 provider=$URI2 binddn="$MANAGERDN" bindmethod=simple
   credentials=$PASSWD searchbase="$BASEDN" type=refreshOnly
   interval=00:00:00:10 retry="5 5 300 5" timeout=1
+olcSyncRepl: rid=006 provider=$URI3 binddn="$MANAGERDN" bindmethod=simple
+  credentials=$PASSWD searchbase="$BASEDN" type=refreshOnly
+  interval=00:00:00:10 retry="5 5 300 5" timeout=1
 olcMirrorMode: TRUE
 
 dn: olcOverlay=syncprov,olcDatabase={1}${BACKEND},cn=config
@@ -301,6 +377,26 @@
 	exit $RC
 fi
 
+echo "Using ldapsearch to check that syncrepl received database changes on consumer2..."
+RC=32
+for i in 0 1 2 3 4 5; do
+	RESULT=`$LDAPSEARCH -H $URI3 \
+		-s base -b "cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com" \
+		'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
+	if test "x$RESULT" = "xOK" ; then
+		RC=0
+		break
+	fi
+	echo "Waiting 5 seconds for syncrepl to receive changes..."
+	sleep 5
+done
+
+if test $RC != 0 ; then
+	echo "ldapsearch failed ($RC)!"
+	test $KILLSERVERS != no && kill -HUP $KILLPIDS
+	exit $RC
+fi
+
 echo "Using ldapsearch to read config from the producer..."
 $LDAPSEARCH -b cn=config -D cn=config -H $URI1 -y $CONFIGPWF  \
 	'objectclass=*' > $MASTEROUT 2>&1
@@ -323,10 +419,23 @@
 	exit $RC
 fi
 
+echo "Using ldapsearch to read config from consumer2..."
+$LDAPSEARCH -b cn=config -D cn=config -H $URI3 -y $CONFIGPWF \
+	'objectclass=*' > $SLAVE2OUT 2>&1
+RC=$?
+
+if test $RC != 0 ; then
+	echo "ldapsearch failed at consumer2 ($RC)!"
+	test $KILLSERVERS != no && kill -HUP $KILLPIDS
+	exit $RC
+fi
+
 echo "Filtering producer results..."
 . $LDIFFILTER < $MASTEROUT > $MASTERFLT
 echo "Filtering consumer results..."
 . $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
+echo "Filtering consumer2 results..."
+. $LDIFFILTER < $SLAVE2OUT > $SLAVE2FLT
 
 echo "Comparing retrieved configs from producer and consumer..."
 $CMP $MASTERFLT $SLAVEFLT > $CMPOUT
@@ -337,6 +446,15 @@
 	exit 1
 fi
 
+echo "Comparing retrieved configs from producer and consumer2..."
+$CMP $MASTERFLT $SLAVE2FLT > $CMPOUT
+
+if test $? != 0 ; then
+	echo "test failed - producer and consumer2 configs differ"
+	test $KILLSERVERS != no && kill -HUP $KILLPIDS
+	exit 1
+fi
+
 echo "Using ldapsearch to read all the entries from the producer..."
 $LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI1 -w $PASSWD  \
 	'objectclass=*' > $MASTEROUT 2>&1
@@ -359,12 +477,26 @@
 	exit $RC
 fi
 
+echo "Using ldapsearch to read all the entries from the consumer2..."
+$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI3 -w $PASSWD  \
+	'objectclass=*' > $SLAVE2OUT 2>&1
+RC=$?
+
+if test $RC != 0 ; then
+	echo "ldapsearch failed at consumer2 ($RC)!"
+	test $KILLSERVERS != no && kill -HUP $KILLPIDS
+	exit $RC
+fi
+
+
 test $KILLSERVERS != no && kill -HUP $KILLPIDS
 
 echo "Filtering producer results..."
 . $LDIFFILTER < $MASTEROUT > $MASTERFLT
 echo "Filtering consumer results..."
 . $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
+echo "Filtering consumer2 results..."
+. $LDIFFILTER < $SLAVE2OUT > $SLAVE2FLT
 
 echo "Comparing retrieved entries from producer and consumer..."
 $CMP $MASTERFLT $SLAVEFLT > $CMPOUT
@@ -374,6 +506,14 @@
 	exit 1
 fi
 
+echo "Comparing retrieved entries from producer and consumer2..."
+$CMP $MASTERFLT $SLAVE2FLT > $CMPOUT
+
+if test $? != 0 ; then
+	echo "test failed - producer and consumer2 databases differ"
+	exit 1
+fi
+
 test $KILLSERVERS != no && wait
 
 echo "Restarting servers..."
@@ -438,6 +578,38 @@
 	exit $RC
 fi
 
+echo "Starting consumer2 slapd on TCP/IP port $PORT3..."
+cd $CONDIR2
+echo "======================= RESTART =======================" >> $LOG3
+$SLAPD -F ./slapd.d -h $URI3 -d $LVL $TIMING >> $LOG3 2>&1 &
+SLAVE2PID=$!
+if test $WAIT != 0 ; then
+    echo SLAVE2PID $SLAVE2PID
+    read foo
+fi
+KILLPIDS="$KILLPIDS $SLAVE2PID"
+cd $TESTWD
+
+sleep 1
+
+echo "Using ldapsearch to check that consumer2 slapd is running..."
+for i in 0 1 2 3 4 5; do
+	$LDAPSEARCH -s base -b "" -H $URI3 \
+		'objectclass=*' > /dev/null 2>&1
+	RC=$?
+	if test $RC = 0 ; then
+		break
+	fi
+	echo "Waiting 5 seconds for slapd to start..."
+	sleep 5
+done
+
+if test $RC != 0 ; then
+	echo "ldapsearch failed ($RC)!"
+	test $KILLSERVERS != no && kill -HUP $KILLPIDS
+	exit $RC
+fi
+
 # Insert modifications and more tests here.
 SLEEP=10
 echo "Waiting $SLEEP seconds for servers to resync..."




More information about the Pkg-openldap-devel mailing list