Notice: |

  Apache Brooklyn
  Copyright 2014-2020 The Apache Software Foundation

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

  This software is released under the Apache Software License, verison 2.0.
  This license and the licenses for all dependencies are included below
  following the dependencies and their notices.

Source dependencies:

  # This software includes the following third-party components in its source code.
  # Additional runtime dependencies are required when built and are listed in the subsequent section.

  # No such dependencies


Runtime dependencies:

  # This software depends on additional third-party components at runtime.
  # These are not bundled here but may be included as part of a build.

  "@uirouter/core@5.0.20": 
    Project:      "@uirouter/core (NodeJS module)"
    Version:      5.0.20
    Available at: 
      - https://github.com/ui-router/core
      - https://ui-router.github.io
    License name: MIT License
    Notice:       Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling
  
  angular-animate@1.7.2: 
    Project:      angular-animate (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-cookies@1.7.2: 
    Project:      angular-cookies (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-java-stack-viewer@1.0.1: 
    Project:      angular-java-stack-viewer (NodeJS module)
    Version:      1.0.1
    Available at: https://github.com/tbouron/angular-java-stack-viewer
    Developed by: Thomas Bouron
    License name: Apache License, version 2.0
  
  angular-multiple-transclusion@1.0.0: 
    Project:      angular-multiple-transclusion (NodeJS module)
    Version:      1.0.0
    Available at: https://github.com/mcasimir/angular-multiple-transclusion
    Developed by: mcasimir (https://github.com/mcasimir)
    License name: MIT License
  
  angular-resource@1.7.2: 
    Project:      angular-resource (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-sanitize@1.7.2: 
    Project:      angular-sanitize (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-ui-bootstrap@2.5.6: 
    Project:      angular-ui-bootstrap (NodeJS module)
    Version:      2.5.6
    Available at: 
      - http://angular-ui.github.io/bootstrap/
      - https://github.com/angular-ui/bootstrap
    Developed by: https://github.com/angular-ui/bootstrap/graphs/contributors
    License name: MIT License
    Notice:       Copyright (c) 2012-2017 the AngularUI Team, https://github.com/organizations/angular-ui/teams/291112
  
  angular-ui-router@0.3.2: 
    Project:      angular-ui-router (NodeJS module)
    Version:      0.3.2
    Available at: 
      - http://angular-ui.github.com/
      - https://github.com/angular-ui/ui-router
    License name: MIT License
    Notice:       Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling
  
  angular-ui-router@1.0.19: 
    Project:      angular-ui-router (NodeJS module)
    Version:      1.0.19
    Available at: 
      - https://github.com/angular-ui/ui-router
      - https://ui-router.github.io
    License name: MIT License
    Notice:       Copyright (c) 2013-2018 The AngularUI Team, Karsten Sperling
  
  angular-xeditable@0.4.0: 
    Project:      angular-xeditable (NodeJS module)
    Version:      0.4.0
    Available at: 
      - https://github.com/vitalets/angular-xeditable
      - https://vitalets.github.io/angular-xeditable
    Developed by: Vitaliy Potapov (noginsk@rambler.ru)
    License name: MIT License
    Notice:       Copyright (c) 2015 Vitaliy Potapov
  
  angular@1.7.2: 
    Project:      angular (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  aopalliance:1.0: 
    Project:      AOP alliance
    Version:      1.0
    Available at: http://aopalliance.sourceforge.net
    License name: Public Domain
  
  argparse@1.0.10: 
    Project:      argparse (NodeJS module)
    Version:      1.0.10
    Available at: https://github.com/nodeca/argparse
    License name: MIT License
    Notice:       Copyright (C) 2012 by Vitaly Puzrin
  
  bootstrap@3.3.7: 
    Project:      bootstrap (NodeJS module)
    Version:      3.3.7
    Available at: 
      - http://getbootstrap.com
      - https://github.com/twbs/bootstrap
    Developed by: Twitter, Inc.
    License name: MIT License
    Notice:       Copyright (c) 2011-2016 Twitter, Inc.
  
  ch.qos.logback:1.2.3: 
    Project:      Logback Logging Framework
    Version:      1.2.3
    Available at: http://logback.qos.ch
    Developed by: QOS.ch (http://www.qos.ch)
    License name: Eclipse Public License, version 1.0
  
  clipboard@1.5.16: 
    Project:      clipboard (NodeJS module)
    Version:      1.5.16
    Available at: https://github.com/zenorocha/clipboard.js
    License name: MIT License
  
  codemirror@5.39.2: 
    Project:      codemirror (NodeJS module)
    Version:      5.39.2
    Available at: 
      - http://codemirror.net
      - https://github.com/codemirror/CodeMirror
    License name: MIT License
    Notice:       Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
  
  com.fasterxml.jackson:2.10.1: 
    Project:      Jackson FasterXML
    Version:      2.10.1
    Available at: 
      - http://github.com/FasterXML/jackson
      - http://wiki.fasterxml.com/JacksonModuleJoda
      - https://github.com/FasterXML/jackson-core
      - https://github.com/FasterXML/jackson-dataformat-xml
      - https://github.com/FasterXML/jackson-dataformats-text
      - https://github.com/FasterXML/jackson-modules-base
      - https://github.com/FasterXML/jackson-modules-java8
    Developed by: FasterXML (http://fasterxml.com/)
    License name: Apache License, version 2.0
  
  com.fasterxml.woodstox.woodstox-core:5.0.3: 
    Project:      Woodstox
    Version:      5.0.3
    Available at: https://github.com/FasterXML/woodstox
    Developed by: FasterXML (http://fasterxml.com)
    License name: Apache License, version 2.0
  
  com.github.mifmif.generex:1.0.2: 
    Project:      Generex
    Version:      1.0.2
    Available at: https://github.com/mifmif/Generex/tree/master
    License name: Apache License, version 2.0
  
  com.google.code.findbugs.jsr305:2.0.1: 
    Project:      FindBugs-jsr305
    Version:      2.0.1
    Available at: http://findbugs.sourceforge.net/
    License name: Apache License, version 2.0
  
  com.google.code.gson:2.5: 
    Project:      Gson
    Version:      2.5
    Available at: https://github.com/google/gson
    Developed by: Google, Inc. (http://www.google.com)
    License name: Apache License, version 2.0
  
  com.google.errorprone.error_prone_annotations:2.1.0: 
    Project:      error-prone annotations
    Version:      2.1.0
    Available at: http://nexus.sonatype.org/oss-repository-hosting.html
    License name: Apache License, version 2.0
  
  com.google.guava:18.0: 
    Project:      "Guava: Google Core Libraries for Java"
    Version:      18.0
    Available at: http://code.google.com/p/guava-libraries
    License name: Apache License, version 2.0
  
  com.google.inject.guice:3.0: 
    Project:      Google Guice
    Version:      3.0
    Available at: http://code.google.com/p/google-guice/
    Developed by: Google, Inc. (http://www.google.com)
    License name: Apache License, version 2.0
  
  com.google.inject:3.0: 
    Project:      Google Guice
    Version:      3.0
    Available at: http://code.google.com/p/google-guice/
    Developed by: Google, Inc. (http://www.google.com)
    License name: Apache License, version 2.0
  
  com.hierynomus.sshj:0.22.0: 
    Project:      sshj
    Version:      0.22.0
    Available at: https://github.com/hierynomus/sshj
    License name: Apache License, version 2.0
  
  com.jamesmurty.utils.java-xmlbuilder:1.1: 
    Project:      java-xmlbuilder
    Version:      1.1
    Available at: https://github.com/jmurty/java-xmlbuilder
    License name: Apache License, version 2.0
  
  com.jayway.jsonpath.json-path:2.4.0: 
    Project:      project ':json-path'
    Version:      2.4.0
    Available at: https://github.com/jayway/JsonPath
    License name: Apache License, version 2.0
  
  com.jcraft.jzlib:1.1.3: 
    Project:      JZlib
    Version:      1.1.3
    Available at: http://www.jcraft.com/jzlib/
    Developed by: jcraft (http://www.jcraft.com/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved.
  
  com.jcraft:0.0.9: 
    Project:      JCraft jsch ssh library
    Version:      0.0.9
    Available at: http://www.jcraft.com/jsch-agent-proxy/
    Developed by: JCraft,Inc. (http://www.jcraft.com/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2011-2012 Atsuhiko Yamanaka, JCraft,Inc.
  
  com.maxmind.db.maxmind-db:1.2.1: 
    Project:      MaxMind DB Reader
    Version:      1.2.1
    Available at: http://dev.maxmind.com/
    Developed by: MaxMind, Inc. (http://www.maxmind.com/)
    License name: Apache License, version 2.0
  
  com.maxmind.geoip2:2.8.0-rc1: 
    Project:      MaxMind GeoIP2 API
    Version:      2.8.0-rc1
    Available at: http://dev.maxmind.com/geoip/geoip2/web-services
    Developed by: MaxMind, Inc. (http://www.maxmind.com/)
    License name: Apache License, version 2.0
  
  com.squareup.okhttp3:3.12.6: 
    Project: 
      - OkHttp
      - OkHttp Logging Interceptor
    Version:      3.12.6
    Available at: https://github.com/square/okhttp
    License name: Apache License, version 2.0
  
  com.squareup.okhttp:2.2.0: 
    Project:      OkHttp
    Version:      2.2.0
    Available at: https://github.com/square/okhttp
    License name: Apache License, version 2.0
    Notice:       Copyright (c) Square, Inc.
  
  com.squareup.okio:1.2.0: 
    Project:      Okio
    Version:      1.2.0
    Available at: https://github.com/square/okio
    License name: Apache License, version 2.0
    Notice:       Copyright (c) Square, Inc.
  
  com.sun.activation.javax.activation:1.2.0: 
    Project:      JavaBeans Activation Framework
    Version:      1.2.0
    Available at: http://java.net/
    Developed by: Oracle (http://www.oracle.com)
    License name: Common Development and Distribution License, version 1.1
  
  com.sun.istack.istack-commons-runtime:3.0.10: 
    Project:      istack common utility code runtime
    Version:      3.0.10
    Available at: https://projects.eclipse.org/projects/ee4j
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  com.sun.xml.fastinfoset.FastInfoset:1.2.16: 
    Project:      fastinfoset
    Version:      1.2.16
    Available at: https://projects.eclipse.org/projects/ee4j.jaxb-impl
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Apache License, version 2.0
  
  com.thoughtworks.xstream:1.4.11.1: 
    Project:      XStream Core
    Version:      1.4.11.1
    Available at: http://x-stream.github.io/
    Developed by: XStream (http://x-stream.github.io)
    License name: BSD 3-Clause (New BSD) License
  
  commander@2.16.0: 
    Project:      commander (NodeJS module)
    Version:      2.16.0
    Available at: https://github.com/tj/commander.js
    Developed by: TJ Holowaychuk (tj@vision-media.ca)
    License name: MIT License
    Notice:       Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
  
  commons-beanutils:1.9.4: 
    Project:      Apache Commons BeanUtils
    Version:      1.9.4
    Available at: https://commons.apache.org/proper/commons-beanutils/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-codec:1.11: 
    Project:      Apache Commons Codec
    Version:      1.11
    Available at: http://commons.apache.org/proper/commons-codec/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-collections:3.2.2: 
    Project:      Apache Commons Collections
    Version:      3.2.2
    Available at: http://commons.apache.org/collections/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-io:2.4: 
    Project:      Commons IO
    Version:      2.4
    Available at: http://commons.apache.org/io/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-lang:2.4: 
    Project:      Commons Lang
    Version:      2.4
    Available at: http://commons.apache.org/lang/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-logging:1.2: 
    Project:      Apache Commons Logging
    Version:      1.2
    Available at: http://commons.apache.org/proper/commons-logging/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  d3-array@1.2.0: 
    Project:      d3-array (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-array/
      - https://github.com/d3/d3-array
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-axis@1.0.8: 
    Project:      d3-axis (NodeJS module)
    Version:      1.0.8
    Available at: 
      - https://d3js.org/d3-axis/
      - https://github.com/d3/d3-axis
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-brush@1.0.4: 
    Project:      d3-brush (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-brush/
      - https://github.com/d3/d3-brush
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-chord@1.0.4: 
    Project:      d3-chord (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-chord/
      - https://github.com/d3/d3-chord
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-collection@1.0.4: 
    Project:      d3-collection (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-collection/
      - https://github.com/d3/d3-collection
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016, Mike Bostock. All rights reserved.
  
  d3-color@1.0.3: 
    Project:      d3-color (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-color/
      - https://github.com/d3/d3-color
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-dispatch@1.0.3: 
    Project:      d3-dispatch (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-dispatch/
      - https://github.com/d3/d3-dispatch
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-drag@1.1.1: 
    Project:      d3-drag (NodeJS module)
    Version:      1.1.1
    Available at: 
      - https://d3js.org/d3-drag/
      - https://github.com/d3/d3-drag
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-dsv@1.0.5: 
    Project:      d3-dsv (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-dsv/
      - https://github.com/d3/d3-dsv
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2013-2016 Mike Bostock. All rights reserved.
  
  d3-ease@1.0.3: 
    Project:      d3-ease (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-ease/
      - https://github.com/d3/d3-ease
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. Copyright 2001 Robert Penner. All rights reserved.
  
  d3-force@1.0.6: 
    Project:      d3-force (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-force/
      - https://github.com/d3/d3-force
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-format@1.2.0: 
    Project:      d3-format (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-format/
      - https://github.com/d3/d3-format
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-geo@1.6.4: 
    Project:      d3-geo (NodeJS module)
    Version:      1.6.4
    Available at: 
      - https://d3js.org/d3-geo/
      - https://github.com/d3/d3-geo
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.*
  
  d3-hierarchy@1.1.5: 
    Project:      d3-hierarchy (NodeJS module)
    Version:      1.1.5
    Available at: 
      - https://d3js.org/d3-hierarchy/
      - https://github.com/d3/d3-hierarchy
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-interpolate@1.1.5: 
    Project:      d3-interpolate (NodeJS module)
    Version:      1.1.5
    Available at: 
      - https://d3js.org/d3-interpolate/
      - https://github.com/d3/d3-interpolate
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-path@1.0.5: 
    Project:      d3-path (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-path/
      - https://github.com/d3/d3-path
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2015-2016 Mike Bostock. All rights reserved.
  
  d3-polygon@1.0.3: 
    Project:      d3-polygon (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-polygon/
      - https://github.com/d3/d3-polygon
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-quadtree@1.0.3: 
    Project:      d3-quadtree (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-quadtree/
      - https://github.com/d3/d3-quadtree
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-queue@3.0.7: 
    Project:      d3-queue (NodeJS module)
    Version:      3.0.7
    Available at: 
      - https://d3js.org/d3-queue/
      - https://github.com/d3/d3-queue
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2012-2016, Michael Bostock. All rights reserved.
  
  d3-random@1.1.0: 
    Project:      d3-random (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-random/
      - https://github.com/d3/d3-random
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-request@1.0.5: 
    Project:      d3-request (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-request/
      - https://github.com/d3/d3-request
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-scale@1.0.6: 
    Project:      d3-scale (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-scale/
      - https://github.com/d3/d3-scale
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-selection@1.1.0: 
    Project:      d3-selection (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-selection/
      - https://github.com/d3/d3-selection
    Developed by: Mike Bostock (https://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2010-2016, Michael Bostock. All rights reserved.
  
  d3-shape@1.2.0: 
    Project:      d3-shape (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-shape/
      - https://github.com/d3/d3-shape
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-time-format@2.0.5: 
    Project:      d3-time-format (NodeJS module)
    Version:      2.0.5
    Available at: 
      - https://d3js.org/d3-time-format/
      - https://github.com/d3/d3-time-format
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-time@1.0.7: 
    Project:      d3-time (NodeJS module)
    Version:      1.0.7
    Available at: 
      - https://d3js.org/d3-time/
      - https://github.com/d3/d3-time
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-timer@1.0.6: 
    Project:      d3-timer (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-timer/
      - https://github.com/d3/d3-timer
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-transition@1.1.0: 
    Project:      d3-transition (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-transition/
      - https://github.com/d3/d3-transition
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2010-2015, Michael Bostock. All rights reserved.*
  
  d3-voronoi@1.1.2: 
    Project:      d3-voronoi (NodeJS module)
    Version:      1.1.2
    Available at: 
      - https://d3js.org/d3-voronoi/
      - https://github.com/d3/d3-voronoi
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.*
  
  d3-zoom@1.5.0: 
    Project:      d3-zoom (NodeJS module)
    Version:      1.5.0
    Available at: 
      - https://d3js.org/d3-zoom/
      - https://github.com/d3/d3-zoom
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3@4.10.0: 
    Project:      d3 (NodeJS module)
    Version:      4.10.0
    Available at: 
      - https://d3js.org
      - https://github.com/d3/d3
    Developed by: Mike Bostock (https://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2017 Mike Bostock. All rights reserved.
  
  delegate@3.2.0: 
    Project:      delegate (NodeJS module)
    Version:      3.2.0
    Available at: https://github.com/zenorocha/delegate
    License name: MIT License
  
  dk.brics.automaton:1.11-8: 
    Project:      Automaton
    Version:      1.11-8
    Available at: http://www.brics.dk/automaton/
    License name: BSD 2-Clause (Simplified or FreeBSD) License
  
  encoding@0.1.12: 
    Project:      encoding (NodeJS module)
    Version:      0.1.12
    Available at: https://github.com/andris9/encoding
    Developed by: Andris Reinman
    License name: MIT License
    Notice:       Copyright (c) 2012-2014 Andris Reinman
  
  es6-promise@4.2.4: 
    Project:      es6-promise (NodeJS module)
    Version:      4.2.4
    Available at: https://github.com/stefanpenner/es6-promise
    Developed by: Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
    License name: MIT License
    Notice:       Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors
  
  esprima@4.0.1: 
    Project:      esprima (NodeJS module)
    Version:      4.0.1
    Available at: 
      - http://esprima.org
      - https://github.com/jquery/esprima
    Developed by: Ariya Hidayat (ariya.hidayat@gmail.com)
    License name: BSD 2-Clause (Simplified or FreeBSD) License
    Notice:       Copyright JS Foundation and other contributors, https://js.foundation/
  
  file-saver@1.3.8: 
    Project:      file-saver (NodeJS module)
    Version:      1.3.8
    Available at: https://github.com/eligrey/FileSaver.js
    Developed by: Eli Grey (me@eligrey.com)
    License name: MIT License
    Notice:       Copyright © 2016 [Eli Grey][1].
  
  font-awesome@4.7.0: 
    Project:      font-awesome (NodeJS module)
    Version:      4.7.0
    Available at: 
      - http://fontawesome.io/
      - https://github.com/FortAwesome/Font-Awesome
    Developed by: Dave Gandy (http://twitter.com/davegandy)
    License name: Font Awesome License
  
  good-listener@1.2.2: 
    Project:      good-listener (NodeJS module)
    Version:      1.2.2
    Available at: https://github.com/zenorocha/good-listener
    License name: MIT License
  
  iconv-lite@0.4.23: 
    Project:      iconv-lite (NodeJS module)
    Version:      0.4.23
    Available at: https://github.com/ashtuchkin/iconv-lite
    Developed by: Alexander Shtuchkin (ashtuchkin@gmail.com)
    License name: MIT License
    Notice:       Copyright (c) 2011 Alexander Shtuchkin
  
  identicon.js@1.3.0: 
    Project:      identicon.js (NodeJS module)
    Version:      1.3.0
    Available at: https://github.com/stewartlord/identicon.js
    Developed by: stewardlord
    License name: BSD 2-Clause (Simplified or FreeBSD) License
    Notice:       Copyright (c) 2013, Stewart Lord. All rights reserved.
  
  io.airlift.airline:0.7: 
    Project:      airline
    Version:      0.7
    Available at: https://github.com/airlift/airline
    License name: Apache License, version 2.0
  
  io.cloudsoft.windows:0.9.0: 
    Project: 
      - Java WinRM library
      - WinRM Client
    Version:      0.9.0
    Available at: http://github.com/cloudsoft/winrm4j
    License name: Apache License, version 2.0
  
  io.fabric8.zjsonpatch:0.3.0: 
    Project:      zjsonpatch
    Version:      0.3.0
    Available at: https://github.com/fabric8io/zjsonpatch/
    License name: Apache License, version 2.0
  
  io.fabric8:4.9.0: 
    Project: 
      - "Fabric8 :: Kubernetes :: Java Client"
      - "Fabric8 :: Kubernetes Model"
      - "Fabric8 :: Kubernetes Model :: Common"
      - "Fabric8 :: Openshift :: Java Client"
    Version:      4.9.0
    Available at: http://fabric8.io/
    Developed by: Red Hat (http://redhat.com)
    License name: Apache License, version 2.0
  
  io.swagger:1.5.6: 
    Project: 
      - swagger-annotations
      - swagger-core
      - swagger-jaxrs
      - swagger-models
    Version:      1.5.6
    Available at: https://github.com/swagger-api/swagger-core
    License name: Apache License, version 2.0
  
  is-stream@1.1.0: 
    Project:      is-stream (NodeJS module)
    Version:      1.1.0
    Available at: https://github.com/sindresorhus/is-stream
    Developed by: Sindre Sorhus (sindresorhus.com)
    License name: MIT License
    Notice:       Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
  
  isomorphic-fetch@2.2.1: 
    Project:      isomorphic-fetch (NodeJS module)
    Version:      2.2.1
    Available at: 
      - https://github.com/matthew-andrews/isomorphic-fetch
      - https://github.com/matthew-andrews/isomorphic-fetch/issues
    Developed by: Matt Andrews (matt@mattandre.ws)
    License name: MIT License
    Notice:       Copyright (c) 2015 Matt Andrews
  
  jakarta.activation.jakarta.activation-api:1.2.1: 
    Project:      JavaBeans Activation Framework API jar
    Version:      1.2.1
    Available at: https://github.com/eclipse-ee4j/jaf
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  jakarta.ws.rs.jakarta.ws.rs-api:2.1.5: 
    Project:      javax.ws.rs-api
    Version:      2.1.5
    Available at: https://github.com/eclipse-ee4j/jaxrs-api
    Developed by: Eclipse Foundation (https://www.eclipse.org/org/foundation/)
    License name: Eclipse Public License, version 2.0
  
  jakarta.xml.bind.jakarta.xml.bind-api:2.3.2: 
    Project:      jakarta.xml.bind-api
    Version:      2.3.2
    Available at: https://github.com/eclipse-ee4j/jaxb-api
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  java-stack-parser@1.0.0: 
    Project:      java-stack-parser (NodeJS module)
    Version:      1.0.0
    Available at: https://github.com/tbouron/java-stack-parser
    Developed by: Thomas Bouron
    License name: Apache License, version 2.0
  
  javax.annotation.javax.annotation-api:1.3.2: 
    Project:      javax.annotation API
    Version:      1.3.2
    Available at: http://jcp.org/en/jsr/detail?id=250
    Developed by: GlassFish Community (https://javaee.github.io/glassfish)
    License name: Common Development and Distribution License, version 1.1
  
  javax.annotation.jsr250-api:1.0: 
    Project:      JSR-250 Common Annotations for the JavaTM Platform
    Version:      1.0
    Available at: https://jcp.org/en/jsr/detail?id=250
    License name: Common Development and Distribution License, version 1.0
  
  javax.inject:1: 
    Project:      javax.inject
    Version:      1
    Available at: http://code.google.com/p/atinject/
    License name: Apache License, version 2.0
  
  javax.servlet.javax.servlet-api:3.1.0: 
    Project:      Java Servlet API
    Version:      3.1.0
    Available at: http://servlet-spec.java.net
    Developed by: GlassFish Community (https://glassfish.dev.java.net)
    License name: Common Development and Distribution License, version 1.1
  
  javax.validation.validation-api:1.1.0.Final: 
    Project:      Bean Validation API
    Version:      1.1.0.Final
    Available at: http://beanvalidation.org/
    License name: Apache License, version 2.0
  
  javax.ws.rs.javax.ws.rs-api:2.1.1: 
    Project:      javax.ws.rs-api
    Version:      2.1.1
    Available at: https://github.com/eclipse-ee4j/jaxrs-api
    Developed by: Eclipse Foundation (https://www.eclipse.org/org/foundation/)
    License name: Common Development and Distribution License, version 1.1
  
  joda-time:2.9.9: 
    Project:      Joda-Time
    Version:      2.9.9
    Available at: http://www.joda.org/joda-time/
    Developed by: Joda.org (http://www.joda.org)
    License name: Apache License, version 2.0
  
  jquery@1.12.4: 
    Project:      jquery (NodeJS module)
    Version:      1.12.4
    Available at: 
      - http://jquery.com
      - https://github.com/jquery/jquery
    Developed by: jQuery Foundation and other contributors (https://github.com/jquery/jquery/blob/1.12-stable/AUTHORS.txt)
    License name: MIT License
    Notice:       Copyright jQuery Foundation and other contributors, https://jquery.org/
  
  js-yaml@3.12.0: 
    Project:      js-yaml (NodeJS module)
    Version:      3.12.0
    Available at: https://github.com/nodeca/js-yaml
    Developed by: Vladimir Zapparov (dervus.grim@gmail.com)
    License name: MIT License
    Notice:       Copyright (C) 2011-2015 by Vitaly Puzrin
  
  jsonschema@1.2.4: 
    Project:      jsonschema (NodeJS module)
    Version:      1.2.4
    Available at: https://github.com/tdegrunt/jsonschema
    Developed by: Tom de Grunt (tom@degrunt.nl)
    License name: MIT License
    Notice:       Copyright (C) 2012-2015 Tom de Grunt <tom@degrunt.nl>
  
  jssha@2.3.1: 
    Project:      jssha (NodeJS module)
    Version:      2.3.1
    Available at: https://github.com/Caligatio/jsSHA
    Developed by: Brian Turek (brian.turek@gmail.com)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2008-2017, Brian Turek. All rights reserved.*
  
  lodash@4.17.10: 
    Project:      lodash (NodeJS module)
    Version:      4.17.10
    Available at: 
      - https://github.com/lodash/lodash
      - https://lodash.com/
    Developed by: John-David Dalton (http://allyoucanleet.com/)
    License name: MIT License
    Notice:       Copyright JS Foundation and other contributors <https://js.foundation/>
  
  moment@2.22.2: 
    Project:      moment (NodeJS module)
    Version:      2.22.2
    Available at: 
      - http://momentjs.com
      - https://github.com/moment/moment
    Developed by: Iskren Ivov Chernev (https://github.com/ichernev)
    License name: MIT License
    Notice:       Copyright (c) JS Foundation and other contributors
  
  net.i2p.crypto.eddsa:0.1.0: 
    Project:      ed25519-java
    Version:      0.1.0
    Available at: https://github.com/str4d/ed25519-java
    License name: Public Domain
  
  net.iharder.base64:2.3.8: 
    Project:      base64
    Version:      2.3.8
    Available at: http://iharder.net/base64/
    License name: Public Domain
  
  net.java.dev.jna:4.1.0: 
    Project: 
      - Java Native Access
      - Java Native Access Platform
    Version:      4.1.0
    Available at: https://github.com/twall/jna
    License name: Apache License, version 2.0
  
  net.minidev.accessors-smart:1.2: 
    Project:      ASM based accessors helper used by json-smart
    Version:      1.2
    Available at: http://www.minidev.net/
    Developed by: Chemouni Uriel (http://www.minidev.net/)
    License name: Apache License, version 2.0
  
  net.minidev.json-smart:2.3: 
    Project:      JSON Small and Fast Parser
    Version:      2.3
    Available at: http://www.minidev.net/
    Developed by: Chemouni Uriel (http://www.minidev.net/)
    License name: Apache License, version 2.0
  
  ngclipboard@1.1.2: 
    Project:      ngclipboard (NodeJS module)
    Version:      1.1.2
    Available at: https://github.com/sachinchoolur/ngclipboard
    Developed by: Sachin (https://github.com/sachinchoolur)
    License name: MIT License
    Notice:       Copyright (c) 2015 Sachin N
  
  node-fetch@1.7.3: 
    Project:      node-fetch (NodeJS module)
    Version:      1.7.3
    Available at: https://github.com/bitinn/node-fetch
    Developed by: David Frank
    License name: MIT License
    Notice:       Copyright (c) 2016 David Frank
  
  normalizr@2.3.1: 
    Project:      normalizr (NodeJS module)
    Version:      2.3.1
    Available at: https://github.com/paularmstrong/normalizr
    Developed by: Dan Abramov
    License name: MIT License
    Notice:       Copyright (c) 2014 Dan Abramov
  
  org.apache.commons.commons-compress:1.20: 
    Project:      Apache Commons Compress
    Version:      1.20
    Available at: https://commons.apache.org/proper/commons-compress/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.commons.commons-lang3:3.3.2: 
    Project:      Apache Commons Lang
    Version:      3.3.2
    Available at: http://commons.apache.org/proper/commons-lang/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.cxf:3.3.5: 
    Project:      Apache CXF
    Version:      3.3.5
    Available at: https://cxf.apache.org
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.configadmin:1.9.16: 
    Project:      Apache Felix Configuration Admin Service
    Version:      1.9.16
    Available at: http://felix.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.fileinstall:3.6.4: 
    Project:      Apache Felix File Install
    Version:      3.6.4
    Available at: http://felix.apache.org/site/apache-felix-file-install.html
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.framework:5.6.12: 
    Project:      Apache Felix Framework
    Version:      5.6.12
    Available at: http://felix.apache.org/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.utils:1.11.2: 
    Project:      Apache Felix Utils
    Version:      1.11.2
    Available at: http://felix.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs.geronimo-stax-api_1.0_spec:1.0.1: 
    Project:      Streaming API for XML (STAX API 1.0)
    Version:      1.0.1
    Available at: http://geronimo.apache.org/specs/geronimo-stax-api_1.0_spec
    Developed by: Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs.geronimo-ws-metadata_2.0_spec:1.1.3: 
    Project:      Web Services Metadata 2.0
    Version:      1.1.3
    Available at: http://geronimo.apache.org/maven/specs/geronimo-ws-metadata_2.0_spec/1.1.3
    Developed by: The Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs:1.1: 
    Project: 
      - Activation 1.1
      - SAAJ 1.3
    Version:      1.1
    Available at: 
      - http://geronimo.apache.org/maven/specs/geronimo-activation_1.1_spec/1.1
      - http://geronimo.apache.org/maven/specs/geronimo-saaj_1.3_spec/1.1
    Developed by: The Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs:1.2: 
    Project: 
      - Apache Geronimo JAX-WS Spec 2.2
      - Apache Geronimo STAX Spec 1.2
    Version:      1.2
    Available at: 
      - http://geronimo.apache.org/maven/specs/geronimo-jaxws_2.2_spec/1.2
      - http://geronimo.apache.org/maven/specs/geronimo-stax-api_1.2_spec/1.2
    Developed by: The Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.httpcomponents.httpasyncclient:4.1.4: 
    Project:      Apache HttpAsyncClient
    Version:      4.1.4
    Available at: http://hc.apache.org/httpcomponents-asyncclient
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.httpcomponents.httpclient:4.5.10: 
    Project:      Apache HttpClient
    Version:      4.5.10
    Available at: http://hc.apache.org/httpcomponents-client-ga
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.httpcomponents:4.4.12: 
    Project: 
      - Apache HttpCore
      - Apache HttpCore NIO
    Version:      4.4.12
    Available at: http://hc.apache.org/httpcomponents-core-ga
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.jclouds:2.1.2: 
    Project:      Apache jclouds
    Version:      2.1.2
    Available at: http://jclouds.apache.org/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.karaf:4.2.8: 
    Project: 
      - "Apache Karaf :: Assemblies :: Features :: Base"
      - "Apache Karaf :: Assemblies :: Features :: Framework"
      - "Apache Karaf :: Assemblies :: Features :: Standard"
      - "Apache Karaf :: Client"
      - "Apache Karaf :: Diagnostic :: Boot"
      - "Apache Karaf :: Features :: Core"
      - "Apache Karaf :: Features :: Extension"
      - "Apache Karaf :: JAAS :: Boot"
      - "Apache Karaf :: Main"
      - "Apache Karaf :: Shell :: Core"
      - "Apache Karaf :: Specs :: Activator"
      - "Apache Karaf :: Specs :: Java Xml"
      - "Apache Karaf :: Specs :: Java Xml WS"
      - "Apache Karaf :: Specs :: Locator"
      - "Apache Karaf :: Util"
    Version:      4.2.8
    Available at: https://www.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.neethi:3.1.1: 
    Project:      Apache Neethi
    Version:      3.1.1
    Available at: http://ws.apache.org/neethi/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.servicemix.specs:2.9.0: 
    Project: 
      - "Apache ServiceMix :: Specs :: Activation API 1.4"
      - "Apache ServiceMix :: Specs :: Activator"
      - "Apache ServiceMix :: Specs :: JAXB API 2.2"
      - "Apache ServiceMix :: Specs :: Stax API 1.0"
    Version:      2.9.0
    Available at: http://servicemix.apache.org/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.sshd.sshd-core:1.7.0: 
    Project:      "Apache Mina SSHD :: Core"
    Version:      1.7.0
    Available at: http://www.apache.org/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.ws.xmlschema.xmlschema-core:2.2.5: 
    Project:      XmlSchema Core
    Version:      2.2.5
    Available at: https://ws.apache.org/commons/xmlschema20/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.bouncycastle:1.61: 
    Project: 
      - Bouncy Castle PKIX, CMS, EAC, TSP, PKCS, OCSP, CMP, and CRMF APIs
      - Bouncy Castle Provider
    Version:      1.61
    Available at: 
      - http://www.bouncycastle.org/java.html
      - https://www.bouncycastle.org/java.html
    License name: MIT License
    Notice:       Copyright (c) The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
  
  org.codehaus.groovy.groovy-all:2.4.15: 
    Project:      Apache Groovy
    Version:      2.4.15
    Available at: http://groovy-lang.org
    Developed by: Apache Software Foundation (http://groovy-lang.org)
    License name: Apache License, version 2.0
  
  org.codehaus.woodstox.stax2-api:3.1.4: 
    Project:      Stax2 API
    Version:      3.1.4
    Available at: http://wiki.fasterxml.com/WoodstoxStax2
    Developed by: fasterxml.com (http://fasterxml.com)
    License name: BSD 2-Clause (Simplified or FreeBSD) License
  
  org.eclipse.jetty:9.4.22.v20191022: 
    Project: 
      - "Jetty :: Http Utility"
      - "Jetty :: IO Utility"
      - "Jetty :: Security"
      - "Jetty :: Server Core"
      - "Jetty :: Servlet Handling"
      - "Jetty :: Utilities"
      - "Jetty :: Webapp Application Support"
      - "Jetty :: XML utilities"
    Version:      9.4.22.v20191022
    Available at: http://www.eclipse.org/jetty
    Developed by: Webtide (https://webtide.com)
    License name: Apache License, version 2.0
  
  org.eclipse.platform.org.eclipse.osgi:3.12.100: 
    Project:      OSGi System Bundle
    Version:      3.12.100
    Available at: http://www.eclipse.org/platform
    Developed by: Eclipse Foundation (http://www.eclipse.org/)
    License name: Eclipse Public License, version 1.0
  
  org.freemarker:2.3.25-incubating: 
    Project:      Apache FreeMarker
    Version:      2.3.25-incubating
    Available at: http://freemarker.org/
    Developed by: Apache Software Foundation (http://apache.org)
    License name: Apache License, version 2.0
  
  org.glassfish.external.opendmk_jmxremote_optional_jar:1.0-b01-ea: 
    Project:      opendmk_jmxremote_optional_jar
    Version:      1.0-b01-ea
    Available at: https://opendmk.java.net/
    License name: Common Development and Distribution License, version 1.1
  
  org.glassfish.jaxb:2.3.2: 
    Project: 
      - JAXB Runtime
      - TXW2 Runtime
    Version:      2.3.2
    Available at: https://javaee.github.io/jaxb-v2/
    Developed by: Oracle Corporation (http://www.oracle.com/)
    License name: Eclipse Distribution License, version 1.0
  
  org.hamcrest.hamcrest-core:1.3: 
    Project:      Hamcrest Core
    Version:      1.3
    Available at: https://github.com/hamcrest/JavaHamcrest
    License name: BSD 3-Clause (New BSD) License
  
  org.javassist:3.19.0-GA: 
    Project:      Javassist
    Version:      3.19.0-GA
    Available at: http://www.javassist.org/
    License name: Apache License, version 2.0
    Notice:       Copyright (c) Shigeru Chiba
  
  org.jline:3.13.2: 
    Project:      JLine Bundle
    Version:      3.13.2
    Available at: http://nexus.sonatype.org/oss-repository-hosting.html
    License name: BSD 3-Clause (New BSD) License
    Notice: 
      - Copyright (c) 2002-2018, the original author or authors.
      - Neither the name of JLine nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
  
  org.jvnet.staxex.stax-ex:1.8.1: 
    Project:      Extended StAX API
    Version:      1.8.1
    Available at: https://projects.eclipse.org/projects/ee4j
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  org.ops4j.base:1.5.1: 
    Project: 
      - OPS4J Base - Lang
      - OPS4J Base - Util - Collections
      - OPS4J Base - Util - Property
    Version:      1.5.1
    Available at: http://team.ops4j.org/wiki/display/base/
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.ops4j.pax.logging:1.11.4: 
    Project: 
      - OPS4J Pax Logging - API
      - OPS4J Pax Logging - Log4Jv2 implementation
    Version:      1.11.4
    Available at: https://ops4j1.jira.com/wiki/spaces/paxlogging/overview
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.ops4j.pax.swissbox:1.8.3: 
    Project: 
      - "OPS4J Pax Swissbox :: Lifecycle"
      - "OPS4J Pax Swissbox :: OSGi Core"
      - "OPS4J Pax Swissbox :: Optional JCL"
      - "OPS4J Pax Swissbox :: Property"
    Version:      1.8.3
    Available at: http://team.ops4j.org/wiki/display/PAXSB
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.ops4j.pax.url.pax-url-aether:2.6.2: 
    Project:      OPS4J Pax Url - mvn:
    Version:      2.6.2
    Available at: https://ops4j1.jira.com/wiki/spaces/paxurl/overview
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.ops4j.pax.web.pax-web-extender-whiteboard:7.2.14: 
    Project:      OPS4J Pax Web - Extender - Whiteboard
    Version:      7.2.14
    Available at: http://team.ops4j.org/wiki/display/paxweb/
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.osgi:6.0.0: 
    Project: 
      - org.osgi.core
      - org.osgi:osgi.cmpn
    Version:      6.0.0
    Available at: http://www.osgi.org
    Developed by: 
      - OSGi Alliance (http://www.osgi.org/)
      - OSGi Alliance (http://www.osgi.org)
    Licenses: 
      -
        License name: Apache License, version 2.0
      -
        License name: Apache License, version 2.0
  
  org.ow2.asm:5.2: 
    Project:      ASM Core
    Version:      5.2
    Available at: http://asm.objectweb.org/
    Developed by: ObjectWeb (http://www.objectweb.org/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2000-2011 INRIA, France Telecom
  
  org.reflections:0.9.10: 
    Project:      Reflections
    Version:      0.9.10
    Available at: http://github.com/ronmamo/reflections
    License name: BSD 3-Clause (New BSD) License
  
  org.slf4j:1.7.25: 
    Project:      Simple Logging Framework for Java
    Version:      1.7.25
    Available at: http://www.slf4j.org
    Developed by: QOS.ch (http://www.qos.ch)
    License name: MIT License
  
  org.xmlunit:2.3.0: 
    Project: 
      - org.xmlunit:xmlunit-core
      - org.xmlunit:xmlunit-matchers
    Version:      2.3.0
    Available at: http://www.xmlunit.org/
    Developed by: XMLUnit (http://www.xmlunit.org/)
    License name: Apache License, version 2.0
  
  org.yaml.snakeyaml:1.25: 
    Project:      SnakeYAML
    Version:      1.25
    Available at: http://www.snakeyaml.org
    License name: Apache License, version 2.0
  
  rw@1.3.3: 
    Project:      rw (NodeJS module)
    Version:      1.3.3
    Available at: https://github.com/mbostock/rw
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2014-2016, Michael Bostock. All rights reserved.
  
  rxjs@5.5.11: 
    Project:      rxjs (NodeJS module)
    Version:      5.5.11
    Available at: https://github.com/ReactiveX/RxJS
    Developed by: Ben Lesh (ben@benlesh.com)
    License name: Apache License, version 2.0
  
  safer-buffer@2.1.2: 
    Project:      safer-buffer (NodeJS module)
    Version:      2.1.2
    Available at: https://github.com/ChALkeR/safer-buffer
    Developed by: Nikita Skovoroda (https://github.com/ChALkeR)
    License name: MIT License
    Notice:       Copyright (c) 2018 Nikita Skovoroda <chalkerx@gmail.com>
  
  select@1.1.2: 
    Project:      select (NodeJS module)
    Version:      1.1.2
    Available at: https://github.com/zenorocha/select
    License name: MIT License
  
  sprintf-js@1.0.3: 
    Project:      sprintf-js (NodeJS module)
    Version:      1.0.3
    Available at: https://github.com/alexei/sprintf.js
    Developed by: Alexandru Marasteanu (http://alexei.ro/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2007-2014, Alexandru Marasteanu <hello [at) alexei (dot] ro>. All rights reserved.
  
  symbol-observable@1.0.1: 
    Project:      symbol-observable (NodeJS module)
    Version:      1.0.1
    Available at: https://github.com/blesh/symbol-observable
    Developed by: Ben Lesh (ben@benlesh.com)
    License name: MIT License
    Notice:       Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com). Copyright (c) Ben Lesh <ben@benlesh.com>
  
  tiny-emitter@1.2.0: 
    Project:      tiny-emitter (NodeJS module)
    Version:      1.2.0
    Available at: https://github.com/scottcorgan/tiny-emitter
    Developed by: Scott Corgan
    License name: MIT License
    Notice:       Copyright (c) 2016 Scott Corgan
  
  underscore@1.9.1: 
    Project:      underscore (NodeJS module)
    Version:      1.9.1
    Available at: 
      - http://underscorejs.org
      - https://github.com/jashkenas/underscore
    Developed by: Jeremy Ashkenas (jeremy@documentcloud.org)
    License name: MIT License
    Notice:       Copyright (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative. Reporters & Editors
  
  whatwg-fetch@2.0.4: 
    Project:      whatwg-fetch (NodeJS module)
    Version:      2.0.4
    Available at: https://github.com/github/fetch
    License name: MIT License
    Notice:       Copyright (c) 2014-2016 GitHub, Inc.
  
  wsdl4j:1.6.3: 
    Project:      WSDL4J
    Version:      1.6.3
    Available at: http://sf.net/projects/wsdl4j
    License name: Common Public License, version 1.0
  
  xml-apis:1.0.b2: 
    Project:      XML Commons External Components XML APIs
    Version:      1.0.b2
    Available at: http://xml.apache.org/commons/#external
    Developed by: Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  xml-resolver:1.2: 
    Project:      XML Commons Resolver Component
    Version:      1.2
    Available at: http://xml.apache.org/commons/components/resolver/
    Developed by: Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  xmlhttprequest@1.8.0: 
    Project:      xmlhttprequest (NodeJS module)
    Version:      1.8.0
    Available at: https://github.com/driverdan/node-XMLHttpRequest
    Developed by: Dan DeFelippi (http://driverdan.com)
    License name: MIT License
  
  xmlpull:1.1.3.1: 
    Project:      XML Pull Parsing API
    Version:      1.1.3.1
    Available at: http://www.xmlpull.org
    License name: Public Domain
  
  xpp3.xpp3_min:1.1.4c: 
    Project:      "MXP1: Xml Pull Parser 3rd Edition (XPP3)"
    Version:      1.1.4c
    Available at: http://www.extreme.indiana.edu/xgws/xsoap/xpp/mxp1/
    Developed by: Extreme! Lab, Indiana University (http://www.extreme.indiana.edu/)
    License name: Indiana University Extreme! Lab Software License, vesion 1.1.1
    Notice:       Copyright (c) Extreme! Lab, Indiana University
  

Apache License: |

   Apache License
   Version 2.0, January 2004
   http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.


   END OF TERMS AND CONDITIONS

   APPENDIX - HOW TO APPLY THE APACHE LICENSE TO YOUR WORK
   
   To apply the Apache License to your work, attach the following boilerplate 
   notice, with the fields enclosed by brackets "[]" replaced with your own 
   identifying information. (Don't include the brackets!) The text should be 
   enclosed in the appropriate comment syntax for the file format. We also 
   recommend that a file or class name and description of purpose be included 
   on the same "printed page" as the copyright notice for easier 
   identification within third-party archives.
   
   Copyright [yyyy] [name of copyright owner]
   
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
   
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   
   
Dependency licenses:

   # Licenses of the source and binary dependencies of this software are included below.

  Apache License, version 2.0: |
    # from https://www.apache.org/licenses/LICENSE-2.0
       
                                     Apache License
                               Version 2.0, January 2004
                            http://www.apache.org/licenses/
       
       TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
       
       1. Definitions.
       
          "License" shall mean the terms and conditions for use, reproduction,
          and distribution as defined by Sections 1 through 9 of this document.
       
          "Licensor" shall mean the copyright owner or entity authorized by
          the copyright owner that is granting the License.
       
          "Legal Entity" shall mean the union of the acting entity and all
          other entities that control, are controlled by, or are under common
          control with that entity. For the purposes of this definition,
          "control" means (i) the power, direct or indirect, to cause the
          direction or management of such entity, whether by contract or
          otherwise, or (ii) ownership of fifty percent (50%) or more of the
          outstanding shares, or (iii) beneficial ownership of such entity.
       
          "You" (or "Your") shall mean an individual or Legal Entity
          exercising permissions granted by this License.
       
          "Source" form shall mean the preferred form for making modifications,
          including but not limited to software source code, documentation
          source, and configuration files.
       
          "Object" form shall mean any form resulting from mechanical
          transformation or translation of a Source form, including but
          not limited to compiled object code, generated documentation,
          and conversions to other media types.
       
          "Work" shall mean the work of authorship, whether in Source or
          Object form, made available under the License, as indicated by a
          copyright notice that is included in or attached to the work
          (an example is provided in the Appendix below).
       
          "Derivative Works" shall mean any work, whether in Source or Object
          form, that is based on (or derived from) the Work and for which the
          editorial revisions, annotations, elaborations, or other modifications
          represent, as a whole, an original work of authorship. For the purposes
          of this License, Derivative Works shall not include works that remain
          separable from, or merely link (or bind by name) to the interfaces of,
          the Work and Derivative Works thereof.
       
          "Contribution" shall mean any work of authorship, including
          the original version of the Work and any modifications or additions
          to that Work or Derivative Works thereof, that is intentionally
          submitted to Licensor for inclusion in the Work by the copyright owner
          or by an individual or Legal Entity authorized to submit on behalf of
          the copyright owner. For the purposes of this definition, "submitted"
          means any form of electronic, verbal, or written communication sent
          to the Licensor or its representatives, including but not limited to
          communication on electronic mailing lists, source code control systems,
          and issue tracking systems that are managed by, or on behalf of, the
          Licensor for the purpose of discussing and improving the Work, but
          excluding communication that is conspicuously marked or otherwise
          designated in writing by the copyright owner as "Not a Contribution."
       
          "Contributor" shall mean Licensor and any individual or Legal Entity
          on behalf of whom a Contribution has been received by Licensor and
          subsequently incorporated within the Work.
       
       2. Grant of Copyright License. Subject to the terms and conditions of
          this License, each Contributor hereby grants to You a perpetual,
          worldwide, non-exclusive, no-charge, royalty-free, irrevocable
          copyright license to reproduce, prepare Derivative Works of,
          publicly display, publicly perform, sublicense, and distribute the
          Work and such Derivative Works in Source or Object form.
       
       3. Grant of Patent License. Subject to the terms and conditions of
          this License, each Contributor hereby grants to You a perpetual,
          worldwide, non-exclusive, no-charge, royalty-free, irrevocable
          (except as stated in this section) patent license to make, have made,
          use, offer to sell, sell, import, and otherwise transfer the Work,
          where such license applies only to those patent claims licensable
          by such Contributor that are necessarily infringed by their
          Contribution(s) alone or by combination of their Contribution(s)
          with the Work to which such Contribution(s) was submitted. If You
          institute patent litigation against any entity (including a
          cross-claim or counterclaim in a lawsuit) alleging that the Work
          or a Contribution incorporated within the Work constitutes direct
          or contributory patent infringement, then any patent licenses
          granted to You under this License for that Work shall terminate
          as of the date such litigation is filed.
       
       4. Redistribution. You may reproduce and distribute copies of the
          Work or Derivative Works thereof in any medium, with or without
          modifications, and in Source or Object form, provided that You
          meet the following conditions:
       
          (a) You must give any other recipients of the Work or
              Derivative Works a copy of this License; and
       
          (b) You must cause any modified files to carry prominent notices
              stating that You changed the files; and
       
          (c) You must retain, in the Source form of any Derivative Works
              that You distribute, all copyright, patent, trademark, and
              attribution notices from the Source form of the Work,
              excluding those notices that do not pertain to any part of
              the Derivative Works; and
       
          (d) If the Work includes a "NOTICE" text file as part of its
              distribution, then any Derivative Works that You distribute must
              include a readable copy of the attribution notices contained
              within such NOTICE file, excluding those notices that do not
              pertain to any part of the Derivative Works, in at least one
              of the following places: within a NOTICE text file distributed
              as part of the Derivative Works; within the Source form or
              documentation, if provided along with the Derivative Works; or,
              within a display generated by the Derivative Works, if and
              wherever such third-party notices normally appear. The contents
              of the NOTICE file are for informational purposes only and
              do not modify the License. You may add Your own attribution
              notices within Derivative Works that You distribute, alongside
              or as an addendum to the NOTICE text from the Work, provided
              that such additional attribution notices cannot be construed
              as modifying the License.
       
          You may add Your own copyright statement to Your modifications and
          may provide additional or different license terms and conditions
          for use, reproduction, or distribution of Your modifications, or
          for any such Derivative Works as a whole, provided Your use,
          reproduction, and distribution of the Work otherwise complies with
          the conditions stated in this License.
       
       5. Submission of Contributions. Unless You explicitly state otherwise,
          any Contribution intentionally submitted for inclusion in the Work
          by You to the Licensor shall be under the terms and conditions of
          this License, without any additional terms or conditions.
          Notwithstanding the above, nothing herein shall supersede or modify
          the terms of any separate license agreement you may have executed
          with Licensor regarding such Contributions.
       
       6. Trademarks. This License does not grant permission to use the trade
          names, trademarks, service marks, or product names of the Licensor,
          except as required for reasonable and customary use in describing the
          origin of the Work and reproducing the content of the NOTICE file.
       
       7. Disclaimer of Warranty. Unless required by applicable law or
          agreed to in writing, Licensor provides the Work (and each
          Contributor provides its Contributions) on an "AS IS" BASIS,
          WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
          implied, including, without limitation, any warranties or conditions
          of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
          PARTICULAR PURPOSE. You are solely responsible for determining the
          appropriateness of using or redistributing the Work and assume any
          risks associated with Your exercise of permissions under this License.
       
       8. Limitation of Liability. In no event and under no legal theory,
          whether in tort (including negligence), contract, or otherwise,
          unless required by applicable law (such as deliberate and grossly
          negligent acts) or agreed to in writing, shall any Contributor be
          liable to You for damages, including any direct, indirect, special,
          incidental, or consequential damages of any character arising as a
          result of this License or out of the use or inability to use the
          Work (including but not limited to damages for loss of goodwill,
          work stoppage, computer failure or malfunction, or any and all
          other commercial damages or losses), even if such Contributor
          has been advised of the possibility of such damages.
       
       9. Accepting Warranty or Additional Liability. While redistributing
          the Work or Derivative Works thereof, You may choose to offer,
          and charge a fee for, acceptance of support, warranty, indemnity,
          or other liability obligations and/or rights consistent with this
          License. However, in accepting such obligations, You may act only
          on Your own behalf and on Your sole responsibility, not on behalf
          of any other Contributor, and only if You agree to indemnify,
          defend, and hold each Contributor harmless for any liability
          incurred by, or claims asserted against, such Contributor by reason
          of your accepting any such warranty or additional liability.
     

  BSD 2-Clause (Simplified or FreeBSD) License: |
    Redistribution and use in source and binary forms, with or without modification, 
    are permitted provided that the following conditions are met:
    
    1. Redistributions of source code must retain the above copyright notice, this list 
    of conditions and the following disclaimer.
    
    2. Redistributions in binary form must reproduce the above copyright notice, this 
    list of conditions and the following disclaimer in the documentation and/or other 
    materials provided with the distribution.
    
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
    SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
    TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
    DAMAGE.

  BSD 3-Clause (New BSD) License: |
    Copyright (c) as noted in accompanying NOTICE file. All rights reserved.
    
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are met:
    
      1. Redistributions of source code must retain the above copyright notice,
         this list of conditions and the following disclaimer.
    
      2. Redistributions in binary form must reproduce the above copyright 
         notice, this list of conditions and the following disclaimer in 
         the documentation and/or other materials provided with the distribution.
    
      3. The names of the authors may not be used to endorse or promote products
         derived from this software without specific prior written permission.
    
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
    FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
    INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
    OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  Common Development and Distribution License, version 1.0: |
    COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) 
    Version 1.0
    
    1. Definitions.
    1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications.
    1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
    1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
    1.4. "Executable" means the Covered Software in any form other than Source Code.
    1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License.
    1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
    1.7. "License" means this document.
    1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
    1.9. "Modifications" means the Source Code and Executable form of any of the following:
    A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
    B. Any new file that contains any part of the Original Software or previous Modification; or
    C. Any new file that is contributed or otherwise made available under the terms of this License.
    1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License.
    1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
    1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
    1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
    2. License Grants.
    2.1. The Initial Developer Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
    (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
    (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
    2.2. Contributor Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
    (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
    (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
    3. Distribution Obligations.
    3.1. Availability of Source Code. 
    Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
    3.2. Modifications. 
    The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
    3.3. Required Notices. 
    You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
    3.4. Application of Additional Terms. 
    You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
    3.5. Distribution of Executable Versions. 
    You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
    3.6. Larger Works. 
    You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
    4. Versions of the License.
    4.1. New Versions. 
    Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
    4.2. Effect of New Versions. 
    You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
    4.3. Modified Versions. 
    When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
    5. DISCLAIMER OF WARRANTY.
    COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
    
    6. TERMINATION.
    6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
    6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as "Participant") alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
    6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
    7. LIMITATION OF LIABILITY.
    UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
    
    8. U.S. GOVERNMENT END USERS.
    The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
    
    9. MISCELLANEOUS.
    This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
    
    10. RESPONSIBILITY FOR CLAIMS.
    As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.

  Common Development and Distribution License, version 1.1: |
    COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) 
    Version 1.1
    
    1. Definitions.
    1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications.
    1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
    1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
    1.4. "Executable" means the Covered Software in any form other than Source Code.
    1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License.
    1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
    1.7. "License" means this document.
    1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
    1.9. "Modifications" means the Source Code and Executable form of any of the following:
    A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
    B. Any new file that contains any part of the Original Software or previous Modification; or
    C. Any new file that is contributed or otherwise made available under the terms of this License.
    1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License.
    1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
    1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
    1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
    2. License Grants.
    2.1. The Initial Developer Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
    (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
    (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
    2.2. Contributor Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
    (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
    (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
    3. Distribution Obligations.
    3.1. Availability of Source Code. 
    Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
    3.2. Modifications. 
    The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
    3.3. Required Notices. 
    You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
    3.4. Application of Additional Terms. 
    You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
    3.5. Distribution of Executable Versions. 
    You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
    3.6. Larger Works. 
    You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
    4. Versions of the License.
    4.1. New Versions. 
    Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
    4.2. Effect of New Versions. 
    You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
    4.3. Modified Versions. 
    When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
    5. DISCLAIMER OF WARRANTY.
    COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
    
    6. TERMINATION.
    6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
    6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as "Participant") alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
    6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
    6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
    7. LIMITATION OF LIABILITY.
    UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
    
    8. U.S. GOVERNMENT END USERS.
    The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
    
    9. MISCELLANEOUS.
    This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
    
    10. RESPONSIBILITY FOR CLAIMS.
    As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
    
    NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) 
    The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.

  Common Public License, version 1.0: |
    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
    
    1.
    DEFINITIONS
    
    "Contribution" means:
    
    a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
    b) in the case of each subsequent Contributor:
    i) changes to the Program, and
    ii) additions to the Program;
    where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
    
    "Contributor" means any person or entity that distributes the Program.
    
    "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
    
    "Program" means the Contributions distributed in accordance with this Agreement.
    
    "Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
    
    2.
    GRANT OF RIGHTS
    
    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
    3.
    REQUIREMENTS
    
    A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
    
    a) it complies with the terms and conditions of this Agreement; and
    b) its license agreement:
    i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
    ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
    iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
    iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
    When the Program is made available in source code form:
    
    a) it must be made available under this Agreement; and
    b) a copy of this Agreement must be included with each copy of the Program.
    Contributors may not remove or alter any copyright notices contained within the Program.
    
    Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
    
    4.
    COMMERCIAL DISTRIBUTION
    
    Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
    
    For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
    
    5.
    NO WARRANTY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
    
    6.
    DISCLAIMER OF LIABILITY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    
    7.
    GENERAL
    
    If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
    
    If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
    
    All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
    
    Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
    
    This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
    

  Eclipse Distribution License, version 1.0: |
    Eclipse Distribution License - v 1.0
    Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.
    
    All rights reserved.
    
    Redistribution and use in source and binary forms, with or without modification, 
    are permitted provided that the following conditions are met:
    
    Redistributions of source code must retain the above copyright notice, this list 
    of conditions and the following disclaimer.
    
    Redistributions in binary form must reproduce the above copyright notice, this 
    list of conditions and the following disclaimer in the documentation and/or other 
    materials provided with the distribution.
    
    Neither the name of the Eclipse Foundation, Inc. nor the names of its contributors 
    may be used to endorse or promote products derived from this software without 
    specific prior written permission.
    
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
    IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
    OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 
    IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  Eclipse Public License, version 1.0: |
    Eclipse Public License - v 1.0
    
    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
    
    1. DEFINITIONS
    
    "Contribution" means:
    
    a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
    b) in the case of each subsequent Contributor:
      i) changes to the Program, and
      ii) additions to the Program;
    
    where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
    
    "Contributor" means any person or entity that distributes the Program.
    
    "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
    
    "Program" means the Contributions distributed in accordance with this Agreement.
    
    "Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
    
    2. GRANT OF RIGHTS
    
    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
    
    3. REQUIREMENTS
    
    A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
    
    a) it complies with the terms and conditions of this Agreement; and
    b) its license agreement:
      i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
      ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
      iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
      iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
    
    When the Program is made available in source code form:
    
    a) it must be made available under this Agreement; and
    b) a copy of this Agreement must be included with each copy of the Program.
    
    Contributors may not remove or alter any copyright notices contained within the Program.
    
    Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
    
    4. COMMERCIAL DISTRIBUTION
    
    Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
    
    For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
    
    5. NO WARRANTY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
    
    6. DISCLAIMER OF LIABILITY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    
    7. GENERAL
    
    If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
    
    If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
    
    All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
    
    Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
    
    This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

  Eclipse Public License, version 2.0: |
    Eclipse Public License - v 2.0
    
    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
    
    1. DEFINITIONS
    
    "Contribution" means:
    
    a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
    b) in the case of each subsequent Contributor:
      i) changes to the Program, and
      ii) additions to the Program;
      
    where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution "originates" from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
    
    "Contributor" means any person or entity that Distributes the Program.
    
    "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
    
    "Program" means the Contributions Distributed in accordance with this Agreement.
    
    "Recipient" means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
    
    "Derivative Works" shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
    
    "Modified Works" shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or Modified Works thereof.
    
    "Distribute" means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
    
    "Source Code" means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
    
    "Secondary License" means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
    
    2. GRANT OF RIGHTS
    
    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to Distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
    e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
    
    3. REQUIREMENTS
    
    3.1 If a Contributor Distributes the Program in any form, then:
    
    a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
    b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
      i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
      ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
      iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
      iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
    
    3.2 When the Program is Distributed as Source Code:
    
    a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
    b) a copy of this Agreement must be included with each copy of the Program.
    
    3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (‘notices’) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
    
    4. COMMERCIAL DISTRIBUTION
    
    Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
    
    For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
    
    5. NO WARRANTY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
    
    6. DISCLAIMER OF LIABILITY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    
    7. GENERAL
    
    If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
    
    If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
    
    All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
    
    Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be Distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to Distribute the Program (including its Contributions) under the new version.
    
    Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
    
    
    Exhibit A – Form of Secondary Licenses Notice
    
    "This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}."
    
    Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
    
    If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
    
    You may add additional accurate notices of copyright ownership.
    

  Font Awesome License: |
    Font Awesome Free License
    -------------------------
    
    Font Awesome Free is free, open source, and GPL friendly. You can use it for
    commercial projects, open source projects, or really almost whatever you want.
    Full Font Awesome Free license: https://fontawesome.com/license.
    
    # Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
    In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
    packaged as SVG and JS file types.
    
    # Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
    In the Font Awesome Free download, the SIL OLF license applies to all icons
    packaged as web and desktop font files.
    
    # Code: MIT License (https://opensource.org/licenses/MIT)
    In the Font Awesome Free download, the MIT license applies to all non-font and
    non-icon files.
    
    # Attribution
    Attribution is required by MIT, SIL OLF, and CC BY licenses. Downloaded Font
    Awesome Free files already contain embedded comments with sufficient
    attribution, so you shouldn't need to do anything additional when using these
    files normally.
    
    We've kept attribution comments terse, so we ask that you do not actively work
    to remove them from files, especially code. They're a great way for folks to 
    learn about Font Awesome.
    
    # Brand Icons
    All brand icons are trademarks of their respective owners. The use of these
    trademarks does not indicate endorsement of the trademark holder by Font
    Awesome, nor vice versa. **Please do not use brand logos for any purpose except
    to represent the company, product, or service to which they refer.**

  Indiana University Extreme! Lab Software License, vesion 1.1.1: |
    Indiana University Extreme! Lab Software License
    
    Version 1.1.1
    
    Copyright (c) 2002 Extreme! Lab, Indiana University. All rights reserved.
    
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    
    1. Redistributions of source code must retain the above copyright notice,
       this list of conditions and the following disclaimer.
    
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in
       the documentation and/or other materials provided with the distribution.
    
    3. The end-user documentation included with the redistribution, if any,
       must include the following acknowledgment:
    
      "This product includes software developed by the Indiana University
      Extreme! Lab (http://www.extreme.indiana.edu/)."
    
    Alternately, this acknowledgment may appear in the software itself,
    if and wherever such third-party acknowledgments normally appear.
    
    4. The names "Indiana Univeristy" and "Indiana Univeristy Extreme! Lab"
    must not be used to endorse or promote products derived from this
    software without prior written permission. For written permission,
    please contact http://www.extreme.indiana.edu/.
    
    5. Products derived from this software may not use "Indiana Univeristy"
    name nor may "Indiana Univeristy" appear in their name, without prior
    written permission of the Indiana University.
    
    THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS, COPYRIGHT HOLDERS OR ITS CONTRIBUTORS
    BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    

  MIT License: |
    MIT License
    
    Copyright (c) as noted in accompanying NOTICE file. All rights reserved.
    
    Permission is hereby granted, free of charge, to any person obtaining a copy of this 
    software and associated documentation files (the "Software"), to deal in the Software 
    without restriction, including without limitation the rights to use, copy, modify, merge, 
    publish, distribute, sublicense, and/or sell copies of the Software, and to permit 
    persons to whom the Software is furnished to do so, subject to the following conditions:
    
    The above copyright notice and this permission notice shall be included in all copies or 
    substantial portions of the Software.
    
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
    INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
    PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 
    FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
    OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
    DEALINGS IN THE SOFTWARE.

  Public Domain: |
    The project indicates it is in the public domain and does not require any license inclusion.
    

