
Apache Directory Server
Copyright 2003-2013 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Safehaus JUG
Copyright 2005 Safehaus

This product includes software developed at
Safehaus (http://docs.safehaus.org/display/HAUS/Home).

    ======================================================================
    == NOTICE file corresponding to section 4 d of the Apache License,  ==
    == Version 2.0, in this case for the Spring Framework distribution. ==
    ======================================================================

    This product includes software developed by
    the Apache Software Foundation (http://www.apache.org).

    This product also includes software developed by
    Clinton Begin (http://www.ibatis.com).
