# Notices for Eclipse MDM|BL

This content is produced and maintained by the Eclipse MDM|BL project,
it is a project of the openMDM(R) Eclipse Working Group.

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

## Trademarks

Eclipse MDM|BL, MDM|BL and Eclipse openMDM(R) logo are registered trademarks
of the Eclipse Foundation.

## Copyright

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

Copyright (c) 2016-2018 Gigatronik Ingolstadt GmbH
Copyright (c) 2016-2018 Peak Solution GmbH
Copyright (c) 2017-2018 Angelika Wittek
Copyright (c) 2018 Elektronische Fahrwerksysteme GMBH

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

org.eclipse.mdm.realms.git  A GlassFish realm using ODS authentication.

## Third-party Content

Gradle Wrapper (4.10.2)
    * License: Apache License, 2.0  

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