Apache Sanselan
Copyright 2007-2008 The Apache Software Foundation.

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

See http://www.apache.org/legal/3party.html for the 
ASF third-party licenses policy.
