# Notices for Eclipse APP4MC

This content is produced and maintained by the Eclipse APP4MC project.

* Project home: https://projects.eclipse.org/projects/technology.app4mc

## Trademarks

Eclipse APP4MC, and APP4MC are trademarks of the Eclipse Foundation.

## Copyright

All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.

## Declared Project Licenses

This program and the accompanying materials are made available under the terms
of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0.

SPDX-License-Identifier: EPL-2.0

## Source Code

The project maintains the following source code repositories:

* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc
* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc.addon.migration
* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc.addon.transformation
* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc.cloud
* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc.examples
* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc.tools

## Third-party Content

This project leverages the following third party content.

Apache Commons Lang (2.6)

* License: Apache License, 2.0

Apache Commons Lang (3.1.0)

* License: Apache License, 2.0

Apache Commons Math (2.1.0)

* License: Apache License, 2.0, New BSD license 

Apache Commons Math (3.5.0)

* License: Apache License, 2.0, New BSD License

Apache Jena-ARQ (2.10.0)

* License: Apache-2.0 

Apache Jena-Core (2.7.1)

* License: Apache License 2.0, New BSD license

Apache jena-iri (0.9.2)

* License: Apache License, 2.0

Apache Jena-TDB (0.10.0)

* License: Apache-2.0 

ArduiPi Adafruit SSD1306 OLED Driver SHA Commit
37956b16aa8514dde5b6ecba04a20cc0babe39f1 (n/a)

* License: BSD-2-Clause

BCEL.Jar (5.2)

* License: Apache License, 2.0

choco (4.0.6)

* License: BSD-4-Clause
* Project: http://www.choco-solver.org
* Source: https://github.com/chocoteam/choco-solver

choco-cutoffseq (1.0.4)

* License: BSD-4-Clause
* Project: https://github.com/chocoteam/cutoffseq
* Source: https://github.com/chocoteam/cutoffseq/releases/tag/pf4cs-1.0.4

choco-graph (4.2.0)

* License: BSD-4-Clause AND BSD-2-Clause AND BSD-3-Clause
* Project: https://github.com/chocoteam/choco-graph
* Source: https://github.com/chocoteam/choco-graph

choco-sat (1.0.2)

* License: BSD-3-Clause
* Project: https://github.com/chocoteam/choco-sat
* Source: https://github.com/chocoteam/choco-sat

choco-solver (4.0.9)

* License: BSD-4-Clause
* Project: http://www.choco-solver.org
* Source: https://github.com/chocoteam/choco-solver/releases/tag/4.0.9

cpprof-java (1.3.0)

* License: MIT
* Project: https://github.com/cp-profiler/java-integration
* Source: https://github.com/cp-profiler/java-integration

dk.brics.automaton (18.01.2018)

* License: BSD 3-Clause
* Project: http://www.brics.dk/automaton/
* Source: https://github.com/cs-au-dk/dk.brics.automaton

easymock (3.3.1)

* License: Apache License, 2.0
* Project: http://easymock.org/
* Source: https://github.com/easymock/easymock/archive/easymock-3.3.1.zip

Google Guava (15.0.0)

* License: Apache License, 2.0

Google Guava (21.0)

* License: Apache License, 2.0

INCHRON Realtime System Model (2.98.2)

* License: EPL-2.0
* Project: http://www.inchron.com
* Source: http://eclipse.inchron.com/realtime/updatesites/release/2.98.2/

Inchron Realtime System model (2.98.5)

* License: EPL-2.0
* Project: http://www.inchron.com
* Source: http://eclipse.inchron.com/realtime/updatesites/release/2.98.5/

java_cup runtime Version: 10k (n/a)

* License: Java Cup License (MIT Style)

javassist (3.19.0)

* License: Mozilla Public License 1.1 (MPL), Apache 2.0 
* Project: http://jboss-javassist.github.io/javassist/
* Source:
   https://github.com/jboss-javassist/javassist/archive/rel_3_19_0_ga.zip

jaxen (1.1.6)

* License: BSD License, W3C (One File)
* Project: https://github.com/codehaus/jaxen
* Source: https://github.com/codehaus/jaxen/tree/V_1_1_6_Final/jaxen

jcl-over-slf4j-1.7.10.jar (1.7.10)

* License: Apache-2.0

jdom (2.0.6)

* License: JDom License (based on Apache 1.1 Style License)
* Project: http://www.jdom.org
* Source: http://www.jdom.org/dist/binary/jdom-2.0.6.zip

jenetics (3.0.1)

* License: Apache License, 2.0
* Project: http://jenetics.io/
* Source: https://github.com/jenetics/jenetics/releases/tag/v3.0.1

Jenetics (3.8.0)

* License: Apache-2.0
* Project: http://jenetics.io/
* Source: https://github.com/jenetics/jenetics/tree/v3.8.0

jgrapht (0.9.0)

* License: Eclipse Public License 1.0
* Project: http://jgrapht.org/

jgrapht-core (1.1.0)

* License: EPL-1.0 OR LGPL-2.1-or-later 	

JHHC-SR04 (n/a)

* License: Pending

JHPWMDriver (n/a)

* License: MIT

JUnit (4.12)

* License: Eclipse Public License

log4j (1.2.15)

* License: Apache License, 2.0

log4j over slf4j 1.7.10.jar (1.7.10)

* License: Apache-2.0

mxGraph (3.7.0.0)

* License: Apache-2.0 AND BSD-3-Clause
* Project: https://jgraph.github.io/mxgraph/
* Source: https://github.com/jgraph/mxgraph

net.sf.trove4j:trove4j (3.0.3)

* License: GNU Library or 'Lesser' General Public License (LGPL) 2.1, MIT Style
   (2 Files)

ojalgo (39.0)

* License: MIT License, BSD, Public Domain
* Project: http://ojalgo.org/
* Source: https://github.com/optimatika/ojAlgo/tree/v39

org.chocosolver.cutoffseq:cutoffseq:1.0.5 (1.0.5)

* License: BSD-3-Clause

org.xerial.sqlite (3.7.2)

* License: Apache License, 2.0, ISC License

pf4cs (1.0.5)

* License: BSD-4-Clause
* Project: https://github.com/chocoteam/pf4cs
* Source: https://github.com/chocoteam/pf4cs

plantUML (2018.8)

* License: (EPL-1.0 OR BSD-3-CLAUSE OR MIT OR Apache-2.0 OR GPL-2.0-or-later OR
   LGPL-3.0-or-later) AND (EPL-1.0 OR BSD-3-CLAUSE OR MIT OR Apache-2.0 OR
   GPL-2.0-or-later OR LGPL-3.0-or-later OR AGPL-3.0-or-later) AND BSD-3-Clause
   AND MIT AND Apache-2.0  

PlantUML Eclipse Plugin (1.1.23)

* License: EPL-1.0 AND Apache-2.0

PlantUML Eclipse Plugin (1.1.24)

* License: EPL-1.0

PlantUML EPL Version: 8000 (n/a)

* License: Eclipse Public License + Public Domain (One File)

protobuf-java (3.2.0)

* License: New BSD license

resolver.jar (1.2)

* License: Apache License, 2.0

serializer.jar (2.7.1)

* License: Apache License, 2.0

SLF4J API Module (slf4j-api-1.7.10.jar) (1.7.10)

* License: MIT

xalan 2.7.1 top level jar (2.7.1)

* License: Apache License, 2.0

Xerces (2.9.0)

* License: Apache License, 2.0

xml-apis.jar (1.3.04)

* License: Apache License, 2.0, Public Domain, W3C

## Cryptography

Content may contain encryption software. The country in which you are currently
may have restrictions on the import, possession, and use, and/or re-export to
another country, of encryption software. BEFORE using any encryption software,
please check the country's laws, regulations and policies concerning the import,
possession, or use, and re-export of encryption software, to see if this is
permitted.
