This product includes software licensed under the 
Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html)
A copy of the Apache License is included with the distribution.

Specifically, this product copies, uses, modifies, and/or redistributes 
source code from the following projects under the Apache License 2.0:
 - Apache Hadoop (Version 0.20.2 and Version 2.2.0)
 - Apache Spark (Version 0.8)
 - CHAP Links library, Timeline (Version 2.5.0)
 - The YARN integration is based on code from https://github.com/hortonworks/simple-yarn-app

 
This product includes software licensed under the MIT license 
(http://opensource.org/licenses/MIT).

Specifically, this product copies, uses, modifies, and/or redistributes 
source code from the following projects under the MIT license:
 - JQuery (Version v1.4.2)
 - JCanvas (Version 13.11.21)
 - Flot (Version 0.8.1)
 	- Categories Plugin
 	- Stack Plugin
  	- Time Plugin
