License for VLGothic Font Family
--------------------------------

This font includes glyphs derived from M+ FONTS which is created by
M+ FONTS PROJECT. License for M+ FONTS part is described in M+ FONTS
PROJECT's license. See attached 'LICENSE_E.mplus'.

This font also includes glyphs derived from Sazanami Gothic font which
is created by Electronic Font Open Laboratory (/efont/). Licenses for
Sazanami Gothic part is described in it's license. See attached
'README.sazanami' for original Sazanami Gothic font license.

There is no limitation and the below description is not applied
as for in order not to reuse as font (ex: font is embeded to documents).

Copyright (c) 1990-2003 Wada Laboratory, the University of Tokyo.
Copyright (c) 2003-2004 Electronic Font Open Laboratory (/efont/).
Copyright (C) 2003-2006 M+ FONTS PROJECT
Copyright (C) 2006 Daisuke SUZUKI <daisuke@vinelinux.org>.
Copyright (C) 2006 Project Vine <Vine@vinelinux.org>.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright notice,
   this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.
3. Neither the name of the Wada Laboratory, the University of Tokyo nor
   the names of its contributors may be used to endorse or promote products
   derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY WADA LABORATORY, THE UNIVERSITY OF TOKYO AND
CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE LABORATORY OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
