# This is the official list of people who can contribute
# (and typically have contributed) code to the Go frontend
# repository.  The AUTHORS file lists the copyright holders; this file
# lists people.  For example, Google employees are listed here
# but not in AUTHORS, because Google holds the copyright.
#
# The submission process automatically checks to make sure
# that people submitting code are listed in this file (by email address).
#
# Names should be added to this file only after verifying that
# the individual or the individual's organization has agreed to
# the appropriate Contributor License Agreement, found here:
#
#     http://code.google.com/legal/individual-cla-v1.0.html
#     http://code.google.com/legal/corporate-cla-v1.0.html
#
# The agreement for individuals can be filled out on the web.
#
# When adding J Random Contributor's name to this file,
# either J's name or J's organization's name should be
# added to the AUTHORS file, depending on whether the
# individual or corporate CLA was used.

# Names should be added to this file like so:
#     Name <email address>

# Please keep the list sorted.

Alexander Shopov <ash@kambanaria.org> <ash%kambanaria.org@gtempaccount.com>
Andreas Krebbel <krebbel@linux.vnet.ibm.com>
Andreas Schwab <schwab@suse.de>
Andrew Wilkins <axwalk@gmail.com>
Chris Manghane <cmang@golang.org>
Christopher Wedgwood <cw@f00f.org>
Dave Cheney <dave@cheney.net>
David Daney <david.daney@cavium.com>
Diego Novillo <dnovillo@google.com>
Dominik Vogt <vogt@linux.vnet.ibm.com>
Ettl Martin <ettl.martin78@googlemail.com>
Evan Shaw <edsrzf@gmail.com>
Ian Lance Taylor <iant@golang.org>
James Clarke <jrtc27@jrtc27.com>
James Cowgill <james.cowgill@imgtec.com>
Janne Snabb <snabb@epipe.com>
Joel Sherrill <joel.sherrill@gmail.com>
Lynn A. Boger <laboger@linux.vnet.ibm.com>
Marek Polacek <mpolacek@redhat.com>
Matthias Klose <doko@ubuntu.com>
Matthieu Sarter <matthieu.sarter.external@atos.net>
Michael Hudson-Doyle <michael.hudson@linaro.org>
Peter Collingbourne <pcc@google.com>
Rainer Orth <ro@cebitec.uni-bielefeld.de>
Rémy Oudompheng <oudomphe@phare.normalesup.org> <remyoudompheng@gmail.com>
Richard Henderson <rth@redhat.com>
Roberto Lublinerman Reitzes <rluble@google.com> <rluble@gmail.com>
Sanjoy Das <sanjoy@playingwithpointers.com> <thedigitalangel@gmail.com>
Shenghou Ma <minux@golang.org> <minux.ma@gmail.com>
Tim Shen <timshen@google.com>
Than McIntosh <thanm@google.com>
Uros Bizjak <ubizjak@gmail.com>
Vinu Rajashekhar <vinutheraj@gmail.com>
Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
Xia Bin <snyh@snyh.org>
