Apache Edgent
Copyright 2016 The Apache Software Foundation

Apache Edgent is currently undergoing Incubation at the Apache Software Foundation.

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

Portions of this bundle were developed by IBM Corp.
Copyright IBM Corp. 2015, 2016

===============================================================================

APACHE EDGENT SUBCOMPONENTS:

This Apache Edgent binary release includes a number of subcomponents with
separate copyright notices and license terms.  The following notices apply.

--------------------------------
ext/    # common dependencies for all Edgent components
  metrics-core-3.1.2.jar            io.dropwizard.metrics:metrics-core:3.1.2
                                    See licenses/binary-release/metrics-core-3.1.2.NOTICE

--------------------------------
analytics/math3/ext/
  commons-math3-3.4.1.jar           org.apache.commons:commons-math3:3.4.1
                                    See licenses/binary-release/commons-math3-3.4.1.NOTICE

--------------------------------
connectors/http/ext
  httpclient-4.5.1.jar              org.apache.httpcomponents:httpclient:4.5.1
                                    See licenses/binary-release/httpclient-4.5.1.NOTICE
                                    
  httpcore-4.4.4.jar                org.apache.httpcomponents:httpcore:4.4.4
                                    See licenses/binary-release/httpcore-4.4.4.NOTICE
                                    
  commons-codec-1.9.jar             org.apache.commons:commons-codec:1.9
                                    See licenses/binary-release/commons-codec-1.9.NOTICE
                                    
  commons-logging-1.2.jar           org.apache.commons:commons-logging:1.2
                                    See licenses/binary-release/commons-logging-1.2.NOTICE
        
--------------------------------
connectors/iotp/ext
  commons-codec-1.10.jar            org.apache.commons:commons-codec:1.10
                                    See licenses/binary-release/commons-codec-1.10.NOTICE
                                    
  commons-lang3-3.4.jar             org.apache.commons:commons-lang3:3.4
                                    See licenses/binary-release/commons-lang3-3.4.NOTICE
                                    
  commons-logging-1.2.jar           org.apache.commons:commons-logging:1.2
                                    See licenses/binary-release/commons-logging-1.2.NOTICE
                                    
  commons-net-3.3.jar               org.apache.commons:commons-net:3.3
                                    See licenses/binary-release/commons-net-3.3.NOTICE
                                    
  httpclient-4.5.1.jar              org.apache.httpcomponents:httpclient:4.5.1
                                    See licenses/binary-release/httpclient-4.5.1.NOTICE
                                    
  httpcore-4.4.3.jar                org.apache.httpcomponents:httpcore:4.4.3
                                    See licenses/binary-release/httpcore-4.4.3.NOTICE
                                    
  joda-time-2.9.2.jar               joda-time:joda-time:2.9.2
                                    See licenses/binary-release/joda-time-2.9.2.NOTICE
                                    
  log4j-1.2.17.jar                  log4j:log4j:1.2.17
                                    See licenses/binary-release/log4j-1.2.17.NOTICE
        
--------------------------------
connectors/kafka/ext
  kafka-clients-0.8.2.2.jar         org.apache.kafka:kafka-clients:0.8.2.2
                                    See licenses/binary-release/kafka-clients-0.8.2.2.NOTICE
                                    
  kafka_2.10-0.8.2.2.jar            org.apache.kafka:kafka_2.10:0.8.2.2
                                    See licenses/binary-release/kafka_2.10-0.8.2.2.NOTICE
                                    
  log4j-1.2.16.jar                  log4j:log4j:1.2.16
                                    See licenses/binary-release/log4j-1.2.16.NOTICE
                                    
  metrics-core-2.2.0.jar            com.yammer.metrics:metrics-core:2.2.0
                                    See licenses/binary-release/metrics-core-2.2.0.NOTICE
    
--------------------------------
    