Apache UIMA Sandbox components
Copyright 2006-2009 The Apache Software Foundation

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

This software also includes:

    - Beanshell 1.3.0, lightweight Scripting for Java, from http://www.beanshell.org/

    - Rhino, the open-source implementation of JavaScript written entirely in Java, from 
      http://www.mozilla.org/rhino/
      
This product includes the Google Collections Library
from http://code.google.com/p/google-collections/.

This product contains parts of Apache XMLBeans
(http://xmlbeans.apache.org/), which contains the
following software:

    - JSR-173 Streaming API for XML from http://sourceforge.net/projects/xmlpullparser/,
      Copyright 2005 BEA under the terms of the Apache Software License 2.0

This product includes the Snowball software from http://snowball.tartarus.org/.
Copyright (c) 2001, Dr Martin Porter, and (for the Java developments) 
Copyright (c) 2002, Richard Boulton.
Licensed under BSD (see http://snowball.tartarus.org/license.php).
Packages: org.tartarus.snowball

This product includes Apache Tika, which includes
software developed by the following copyright owners: 

    - Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995.
      Software written by Ian F. Darwin and others; maintained 1994- Christos Zoulas.

    - Copyright (c) 1995-2009 International Business Machines Corporation and others
