# file generated using the following command (open the link in browser for up-to-date version with html links)
# lynx -dump http://www.google.com/intl/en/policies/terms/

Google Terms of Service

   Last modified: March 1, 2012

Welcome to Google!

   Thanks for using our products and services (“Services”). The Services
   are provided by Google Inc. (“Google”), located at 1600 Amphitheatre
   Parkway, Mountain View, CA 94043, United States.

   By using our Services, you are agreeing to these terms. Please read
   them carefully.

   Our Services are very diverse, so sometimes additional terms or product
   requirements (including age requirements) may apply. Additional terms
   will be available with the relevant Services, and those additional
   terms become part of your agreement with us if you use those Services.

Using our Services

   You must follow any policies made available to you within the Services.

   Don’t misuse our Services. For example, don’t interfere with our
   Services or try to access them using a method other than the interface
   and the instructions that we provide. You may use our Services only as
   permitted by law, including applicable export and re-export control
   laws and regulations. We may suspend or stop providing our Services to
   you if you do not comply with our terms or policies or if we are
   investigating suspected misconduct.

   Using our Services does not give you ownership of any intellectual
   property rights in our Services or the content you access. You may not
   use content from our Services unless you obtain permission from its
   owner or are otherwise permitted by law. These terms do not grant you
   the right to use any branding or logos used in our Services. Don’t
   remove, obscure, or alter any legal notices displayed in or along with
   our Services.

   Our Services display some content that is not Google’s. This content is
   the sole responsibility of the entity that makes it available. We may
   review content to determine whether it is illegal or violates our
   policies, and we may remove or refuse to display content that we
   reasonably believe violates our policies or the law. But that does not
   necessarily mean that we review content, so please don’t assume that we
   do.

   In connection with your use of the Services, we may send you service
   announcements, administrative messages, and other information. You may
   opt out of some of those communications.

Your Google Account

   You may need a Google Account in order to use some of our Services. You
   may create your own Google Account, or your Google Account may be
   assigned to you by an administrator, such as your employer or
   educational institution. If you are using a Google Account assigned to
   you by an administrator, different or additional terms may apply and
   your administrator may be able to access or disable your account.

   If you learn of any unauthorized use of your password or account,
   [6]follow these instructions.

Privacy and Copyright Protection

   Google’s [7]privacy policies explain how we treat your personal data
   and protect your privacy when you use our Services. By using our
   Services, you agree that Google can use such data in accordance with
   our privacy policies.

   We respond to notices of alleged copyright infringement and terminate
   accounts of repeat infringers according to the process set out in the
   U.S. Digital Millennium Copyright Act.

   We provide information to help copyright holders manage their
   intellectual property online. If you think somebody is violating your
   copyrights and want to notify us, you can find information about
   submitting notices and Google’s policy about responding to notices
   [8]in our Help Center.

Your Content in our Services

   Some of our Services allow you to submit content. You retain ownership
   of any intellectual property rights that you hold in that content. In
   short, what belongs to you stays yours.

   When you upload or otherwise submit content to our Services, you give
   Google (and those we work with) a worldwide license to use, host,
   store, reproduce, modify, create derivative works (such as those
   resulting from translations, adaptations or other changes we make so
   that your content works better with our Services), communicate,
   publish, publicly perform, publicly display and distribute such
   content. The rights you grant in this license are for the limited
   purpose of operating, promoting, and improving our Services, and to
   develop new ones. This license continues even if you stop using our
   Services (for example, for a business listing you have added to Google
   Maps). Some Services may offer you ways to access and remove content
   that has been provided to that Service. Also, in some of our Services,
   there are terms or settings that narrow the scope of our use of the
   content submitted in those Services. Make sure you have the necessary
   rights to grant us this license for any content that you submit to our
   Services.

   You can find more information about how Google uses and stores content
   in the privacy policy or additional terms for particular Services. If
   you submit feedback or suggestions about our Services, we may use your
   feedback or suggestions without obligation to you.

About Software in our Services

   When a Service requires or includes downloadable software, this
   software may update automatically on your device once a new version or
   feature is available. Some Services may let you adjust your automatic
   update settings.

   Google gives you a personal, worldwide, royalty-free, non-assignable
   and non-exclusive license to use the software provided to you by Google
   as part of the Services. This license is for the sole purpose of
   enabling you to use and enjoy the benefit of the Services as provided
   by Google, in the manner permitted by these terms. You may not copy,
   modify, distribute, sell, or lease any part of our Services or included
   software, nor may you reverse engineer or attempt to extract the source
   code of that software, unless laws prohibit those restrictions or you
   have our written permission.

   Open source software is important to us. Some software used in our
   Services may be offered under an open source license that we will make
   available to you. There may be provisions in the open source license
   that expressly override some of these terms.

Modifying and Terminating our Services

   We are constantly changing and improving our Services. We may add or
   remove functionalities or features, and we may suspend or stop a
   Service altogether.

   You can stop using our Services at any time, although we’ll be sorry to
   see you go. Google may also stop providing Services to you, or add or
   create new limits to our Services at any time.

   We believe that you own your data and preserving your access to such
   data is important. If we discontinue a Service, where reasonably
   possible, we will give you reasonable advance notice and a chance to
   get information out of that Service.

Our Warranties and Disclaimers

   We provide our Services using a commercially reasonable level of skill
   and care and we hope that you will enjoy using them. But there are
   certain things that we don’t promise about our Services.

   OTHER THAN AS EXPRESSLY SET OUT IN THESE TERMS OR ADDITIONAL TERMS,
   NEITHER GOOGLE NOR ITS SUPPLIERS OR DISTRIBUTORS MAKE ANY SPECIFIC
   PROMISES ABOUT THE SERVICES. FOR EXAMPLE, WE DON’T MAKE ANY COMMITMENTS
   ABOUT THE CONTENT WITHIN THE SERVICES, THE SPECIFIC FUNCTION OF THE
   SERVICES, OR THEIR RELIABILITY, AVAILABILITY, OR ABILITY TO MEET YOUR
   NEEDS. WE PROVIDE THE SERVICES “AS IS”.

   SOME JURISDICTIONS PROVIDE FOR CERTAIN WARRANTIES, LIKE THE IMPLIED
   WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
   NON-INFRINGEMENT. TO THE EXTENT PERMITTED BY LAW, WE EXCLUDE ALL
   WARRANTIES.

Liability for our Services

   WHEN PERMITTED BY LAW, GOOGLE, AND GOOGLE’S SUPPLIERS AND DISTRIBUTORS,
   WILL NOT BE RESPONSIBLE FOR LOST PROFITS, REVENUES, OR DATA, FINANCIAL
   LOSSES OR INDIRECT, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE
   DAMAGES.

   TO THE EXTENT PERMITTED BY LAW, THE TOTAL LIABILITY OF GOOGLE, AND ITS
   SUPPLIERS AND DISTRIBUTORS, FOR ANY CLAIM UNDER THESE TERMS, INCLUDING
   FOR ANY IMPLIED WARRANTIES, IS LIMITED TO THE AMOUNT YOU PAID US TO USE
   THE SERVICES (OR, IF WE CHOOSE, TO SUPPLYING YOU THE SERVICES AGAIN).

   IN ALL CASES, GOOGLE, AND ITS SUPPLIERS AND DISTRIBUTORS, WILL NOT BE
   LIABLE FOR ANY LOSS OR DAMAGE THAT IS NOT REASONABLY FORESEEABLE.

Business uses of our Services

   If you are using our Services on behalf of a business, that business
   accepts these terms. It will hold harmless and indemnify Google and its
   affiliates, officers, agents, and employees from any claim, suit or
   action arising from or related to the use of the Services or violation
   of these terms, including any liability or expense arising from claims,
   losses, damages, suits, judgments, litigation costs and attorneys’
   fees.

About these Terms

   We may modify these terms or any additional terms that apply to a
   Service to, for example, reflect changes to the law or changes to our
   Services. You should look at the terms regularly. We’ll post notice of
   modifications to these terms on this page. We’ll post notice of
   modified additional terms in the applicable Service. Changes will not
   apply retroactively and will become effective no sooner than fourteen
   days after they are posted. However, changes addressing new functions
   for a Service or changes made for legal reasons will be effective
   immediately. If you do not agree to the modified terms for a Service,
   you should discontinue your use of that Service.

   If there is a conflict between these terms and the additional terms,
   the additional terms will control for that conflict.

   These terms control the relationship between Google and you. They do
   not create any third party beneficiary rights.

   If you do not comply with these terms, and we don’t take action right
   away, this doesn’t mean that we are giving up any rights that we may
   have (such as taking action in the future).

   If it turns out that a particular term is not enforceable, this will
   not affect any other terms.

   The laws of California, U.S.A., excluding California’s conflict of laws
   rules, will apply to any disputes arising out of or relating to these
   terms or the Services. All claims arising out of or relating to these
   terms or the Services will be litigated exclusively in the federal or
   state courts of Santa Clara County, California, USA, and you and Google
   consent to personal jurisdiction in those courts.

   For information about how to contact Google, please visit our
   [9]contact page.

   [English__________________]
     * [10]Google
     * [11]Privacy & Terms

References

   1. http://www.google.com/
   2. http://www.google.com/intl/en/policies/
   3. http://www.google.com/intl/en/policies/
   4. http://www.google.com/intl/en/policies/privacy/
   5. http://www.google.com/intl/en/policies/terms/archive/
   6. http://support.google.com/accounts/bin/answer.py?hl=en&answer=58585
   7. http://www.google.com/intl/en/policies/privacy/
   8. http://support.google.com/bin/static.py?hl=en&ts=1114905&page=ts.cs
   9. http://www.google.com/intl/en/contact/
  10. http://www.google.com/
  11. http://www.google.com/intl/en/policies/
