/* FLAC - Free Lossless Audio Codec
 * Copyright (C) 2001,2002,2003  Josh Coalson
 *
 * This program is part of FLAC; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */


FLAC (http://flac.sourceforge.net/) is an Open Source lossless audio
codec developed by Josh Coalson <jcoalson@users.sourceforge.net>.

Other major contributors and their contributions:
"Andrey Astafiev" <andrei@tvcell.ru>
* Russian translation of the HTML documentation

"Miroslav Lichvar" <mirator@upcase.inf.upol.cz>
* IA-32 assembly versions of several libFLAC routines

"Brady Patterson" <bpat@users.sourceforge.net>
* AIFF file support

"Daisuke Shimamura" <Daisuke_Shimamura@nifty.com>
* id3 v1/v2 and i18n support in the XMMS plugin

"Matt Zimmerman" <mdz@debian.org>
* Libtool/autoconf/automake make system, flac man page

