Apache Hop (incubating)
Copyright 2021 The Apache Software Foundation.

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

Based on source code originally developed by
Hitachi Vantara (https://www.hitachivantara.com//).

This product includes software developed by
JADAPTIVE (https://www.jadaptive.com/)
