Apache Drill
Copyright 2013-2022 The Apache Software Foundation

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

This product depends on third party software that falls under a variety of licenses.
All dependencies with licenses other than Apache are specified in the LICENSE file.
For easy reference, all of the dependencies that fall under Class B licenses Reciprocal 
Licenses are included in the binary release under a separate directory located at jar/classb.
More information on Class B licenses is available here:
http://www.apache.org/legal/3party.html

Please see LICENSE for additional copyright and licensing information.
