# Notices for the mdmbl tool mdfsorter , openMDM(R) Eclipse Working Group

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 Audi AG
Copyright (c) 2016-2018 Gigatronik Ingolstadt GmbH
Copyright (c) 2017-2018 science + computing AG Tuebingen (ATOS SE)
Copyright (c) 2016-2020 Peak Solution GmbH
Copyright (c) 2018-2020 AKKA DSW Gmbh
Copyright (c) 2017-2020 Angelika Wittek


## 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.mdfsorter.git - The MDFSorter is a tools to preprocess MDF3.x and MDF4.x measurement data files for usage with an ASAM ODS Server.

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