*** This is English translation of the Japanese original for reference ***


     Large Vocabulary Continuous Speech Recognition Engine Julius


 Copyright (c) 1997-2000 Information-technology Promotion Agency, Japan
 Copyright (c) 1991-2008 Kawahara Lab., Kyoto University
 Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
 Copyright (c) 2005-2008 Julius project team, Nagoya Institute of Technology

"Large Vocabulary Continuous Speech Recognition Engine Julius",
including Julian, is being developed at Kawahara Lab., Kyoto
University, Shikano Lab., Nara Institute of Science and Technology,
and Julius project team, Nagoya Institute of Technology (collectively
referred to herein as the "Licensers").  Julius was funded by the
Advanced Information Technology Program Project of
Information-technology Promotion Agency (IPA), Japan for three years
since 1997.

The Licensers reserve the copyright thereto.  However, as long as you
accept and remain in strict compliance with the terms and conditions
of the license set forth herein, you are hereby granted a royalty-free
license to use "Large Vocabulary Continuous Speech Recognition Engine
Julius" including the source code thereof and the documentation
thereto (collectively referred to herein as the "Software").  Use by
you of the Software shall constitute acceptance by you of all terms
and conditions of the license set forth herein.

	      TERMS AND CONDITIONS OF LICENSE

1. So long as you accept and strictly comply with the terms and
conditions of the license set forth herein, the Licensers will not
enforce the copyright or moral rights in respect of the Software, in
connection with the use, copying, duplication, adaptation,
modification, preparation of a derivative work, aggregation with
another program, or insertion into another program of the Software or
the distribution or transmission of the Software.  However, in the
event you or any other user of the Software revises all or any portion
of the Software, and such revision is distributed, then, in addition
to the notice required to be affixed pursuant to paragraph 2 below, a
notice shall be affixed indicating that the Software has been revised,
and indicating the date of such revision and the name of the person or
entity that made the revision.

2. In the event you provide to any third party all or any portion of
the Software, whether for copying, duplication, adaptation,
modification, preparation of a derivative work, aggregation with
another program, insertion into another program, or other use, you
shall affix the following copyright notice and all terms and
conditions of this license (both the Japanese original and English
translation) as set forth herein, without any revision or change
whatsoever.

                      Form of copyright notice:

 Copyright (c) 1997-2000 Information-technology Promotion Agency, Japan
 Copyright (c) 1991-2008 Kawahara Lab., Kyoto University
 Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
 Copyright (c) 2005-2008 Julius project team, Nagoya Institute of Technology

3. When you publish or present any results by using the Software, you
must explicitly mention your use of "Large Vocabulary Continuous
Speech Recognition Engine Julius".

4. The Licensers are licensing the Software, which is the trial
product of research and project, on an "as is" and royalty-free basis,
and makes no warranty or guaranty whatsoever with respect to the
Software, whether express or implied, irrespective of the nation where
used, and whether or not arising out of statute or otherwise,
including but not limited to any warranty or guaranty with respect to
quality, performance, merchantability, fitness for a particular
purpose, absence of defects, or absence of infringement of copyright,
patent rights, trademark rights or other intellectual property rights,
trade secrets or proprietary rights of any third party.  You and every
other user of the Software hereby acknowledge that the Software is
licensed without any warranty or guaranty, and assume all risks
arising out of the absence of any warranty or guaranty.  In the event
the terms and conditions of this license are inconsistent with the
obligations imposed upon you by judgment of a court or for any other
reason, you may not use the Software.

The Licensers shall not have any liability to you or to any third
party for damages or liabilities of any nature whatsoever arising out
of your use of or inability to use the Software, whether of an
ordinary, special, direct, indirect, consequential or incidental
nature (including without limitation lost profits) or otherwise, and
whether arising out of contract, negligence, tortuous conduct, product
liability or any other legal theory or reason whatsoever of any nation
or jurisdiction.

5. This license of use of the Software shall be governed by the laws
of Japan, and the Kyoto District Court shall have exclusive primary
jurisdiction with respect to all disputes arising with respect
thereto.

6. Inquiries for support or maintenance of the Software, or inquiries
concerning this license of use besides the conditions above, may be
sent to Julius project team, Nagoya Institute of Technology, or
Kawahara Lab., Kyoto University.
