# Notices for Eclipse emfatic

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

* Project home: https://projects.eclipse.org/projects/modeling.emft.emfatic

## Trademarks

 Eclipse emfatic is a trademark 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
https://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/emfatic/org.eclipse.emfatic

## Third-party Content

This project leverages the following third party content.

ANTLR runtime (3.0)

* License: New BSD license

JavaCC from CVS (20070207) (4.0)

* License: New BSD license
* Source:
   http://ftp.debian.org/debian/pool/main/j/javacc/javacc_4.0+cvs20070207.orig.tar.gz

## 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.