Apache Kylin
Copyright 2014-2020 The Apache Software Foundation

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

-----
Metrics
Copyright 2010-2013 Coda Hale and Yammer, Inc., 2014-2017 Dropwizard Team

This product includes software developed by Coda Hale and Yammer, Inc.

This product includes code derived from the JSR-166 project (ThreadLocalRandom, Striped64,
LongAdder), which was released with the following comments:

    Written by Doug Lea with assistance from members of JCP JSR-166
    Expert Group and released to the public domain, as explained at
    http://creativecommons.org/publicdomain/zero/1.0/


-----
The web site includes files depend on jQuery.


-----
stream-lib
Copyright 2016 AddThis

This product includes software developed by AddThis.

This product also includes code adapted from:

Apache Solr (http://lucene.apache.org/solr/)
Copyright 2014 The Apache Software Foundation

Apache Mahout (http://mahout.apache.org/)
Copyright 2014 The Apache Software Foundation


-----
kafka-hadoop-loader
This product is based on ideas from stealth.ly metrics-kafka, riemann and influxDb.

Packaged version of this software contains:

- Apache Kafka (Apache 2.0 License)
- Apache Hadoop (Apache 2.0 License)
