Apache Empire-db
Copyright 2008 The Apache Software Foundation

This product includes software originally developed by ESTEAM Software.
For further information see http://www.empire-db.org

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).