Contributors to the Python Documentation
----------------------------------------

This section lists people who have contributed in some way to the Python
documentation.  It is probably not complete -- if you feel that you or
anyone else should be on this list, please let us know (send email to
docs@python.org), and we'll be glad to correct the problem.

.. acks::

   * Aahz
   * Michael Abbott
   * Steve Alexander
   * Jim Ahlstrom
   * Fred Allen
   * A. Amoroso
   * Pehr Anderson
   * Oliver Andrich
   * Heidi Annexstad
   * Jesús Cea Avión
   * Manuel Balsera
   * Daniel Barclay
   * Chris Barker
   * Don Bashford
   * Anthony Baxter
   * Alexander Belopolsky
   * Bennett Benson
   * Jonathan Black
   * Robin Boerdijk
   * Michal Bozon
   * Aaron Brancotti
   * Georg Brandl
   * Keith Briggs
   * Ian Bruntlett
   * Lee Busby
   * Lorenzo M. Catucci
   * Carl Cerecke
   * Mauro Cicognini
   * Gilles Civario
   * Mike Clarkson
   * Steve Clift
   * Dave Cole
   * Matthew Cowles
   * Jeremy Craven
   * Andrew Dalke
   * Ben Darnell
   * L. Peter Deutsch
   * Robert Donohue
   * Fred L. Drake, Jr.
   * Josip Dzolonga
   * Jeff Epler
   * Michael Ernst
   * Blame Andy Eskilsson
   * Carey Evans
   * Martijn Faassen
   * Carl Feynman
   * Dan Finnie
   * Hernán Martínez Foffani
   * Stefan Franke
   * Jim Fulton
   * Peter Funk
   * Lele Gaifax
   * Matthew Gallagher
   * Gabriel Genellina
   * Ben Gertzfield
   * Nadim Ghaznavi
   * Jonathan Giddy
   * Matt Giuca
   * Shelley Gooch
   * Nathaniel Gray
   * Grant Griffin
   * Thomas Guettler
   * Anders Hammarquist
   * Mark Hammond
   * Harald Hanche-Olsen
   * Manus Hand
   * Gerhard Häring
   * Travis B. Hartwell
   * Tim Hatch
   * Janko Hauser
   * Thomas Heller
   * Bernhard Herzog
   * Magnus L. Hetland
   * Konrad Hinsen
   * Stefan Hoffmeister
   * Albert Hofkamp
   * Gregor Hoffleit
   * Steve Holden
   * Thomas Holenstein
   * Gerrit Holl
   * Rob Hooft
   * Brian Hooper
   * Randall Hopper
   * Michael Hudson
   * Eric Huss
   * Jeremy Hylton
   * Roger Irwin
   * Jack Jansen
   * Philip H. Jensen
   * Pedro Diaz Jimenez
   * Kent Johnson
   * Lucas de Jonge
   * Andreas Jung
   * Robert Kern
   * Jim Kerr
   * Jan Kim
   * Greg Kochanski
   * Guido Kollerie
   * Peter A. Koren
   * Daniel Kozan
   * Andrew M. Kuchling
   * Dave Kuhlman
   * Erno Kuusela
   * Thomas Lamb
   * Detlef Lannert
   * Piers Lauder
   * Glyph Lefkowitz
   * Robert Lehmann
   * Marc-André Lemburg
   * Ross Light
   * Ulf A. Lindgren
   * Everett Lipman
   * Mirko Liss
   * Martin von Löwis
   * Fredrik Lundh
   * Jeff MacDonald
   * John Machin
   * Andrew MacIntyre
   * Vladimir Marangozov
   * Vincent Marchetti
   * Laura Matson
   * Daniel May
   * Rebecca McCreary
   * Doug Mennella
   * Paolo Milani
   * Skip Montanaro
   * Paul Moore
   * Ross Moore
   * Sjoerd Mullender
   * Dale Nagata
   * Ng Pheng Siong
   * Koray Oner
   * Tomas Oppelstrup
   * Denis S. Otkidach
   * Zooko O'Whielacronx
   * Shriphani Palakodety
   * William Park
   * Joonas Paalasmaa
   * Harri Pasanen
   * Bo Peng
   * Tim Peters
   * Benjamin Peterson
   * Christopher Petrilli
   * Justin D. Pettit
   * Chris Phoenix
   * François Pinard
   * Paul Prescod
   * Eric S. Raymond
   * Edward K. Ream
   * Terry J. Reedy
   * Sean Reifschneider
   * Bernhard Reiter
   * Armin Rigo
   * Wes Rishel
   * Armin Ronacher
   * Jim Roskind
   * Guido van Rossum
   * Donald Wallace Rouse II
   * Mark Russell
   * Nick Russo
   * Chris Ryland
   * Constantina S.
   * Hugh Sasse
   * Bob Savage
   * Scott Schram
   * Neil Schemenauer
   * Barry Scott
   * Joakim Sernbrant
   * Justin Sheehy
   * Charlie Shepherd
   * Michael Simcich
   * Ionel Simionescu
   * Michael Sloan
   * Gregory P. Smith
   * Roy Smith
   * Clay Spence
   * Nicholas Spies
   * Tage Stabell-Kulo
   * Frank Stajano
   * Anthony Starks
   * Greg Stein
   * Peter Stoehr
   * Mark Summerfield
   * Reuben Sumner
   * Kalle Svensson
   * Jim Tittsler
   * David Turner
   * Ville Vainio
   * Martijn Vries
   * Charles G. Waldman
   * Greg Ward
   * Barry Warsaw
   * Corran Webster
   * Glyn Webster
   * Bob Weiner
   * Eddy Welbourne
   * Jeff Wheeler
   * Mats Wichmann
   * Gerry Wiener
   * Timothy Wild
   * Collin Winter
   * Blake Winton
   * Dan Wolfe
   * Steven Work
   * Thomas Wouters
   * Ka-Ping Yee
   * Rory Yorke
   * Moshe Zadka
   * Milan Zamazal
   * Cheng Zhang
   * Trent Nelson
   * Michael Foord
