SOFTWARE LICENSE AGREEMENT

This QUAKE 4(tm) Limited Use Software License Agreement (this "Agreement") is a legal agreement among you, the end-user, and Id Software, Inc. ("Id Software"), and Activision Publishing, Inc. ("Activision").  BY CONTINUING THE INSTALLATION OF THE GAME PROGRAM ENTITLED QUAKE 4(tm) (THE "SOFTWARE"), BY LOADING OR RUNNING THE SOFTWARE, OR BY PLACING OR COPYING THE SOFTWARE ONTO YOUR COMPUTER HARD DRIVE, COMPUTER RAM OR OTHER STORAGE, YOU ARE AGREEING TO BE BOUND BY THE TERMS AND CONDITIONS OF THIS AGREEMENT.  YOU ACKNOWLEDGE AND UNDERSTAND THAT IN ORDER TO OPERATE THE SOFTWARE, YOU MUST HAVE THE FULL VERSION OF THE ID SOFTWARE GAME ENTITLED QUAKE 4(tm) INSTALLED ON YOUR COMPUTER.

1.	Grant of License.  Subject to the terms and provisions of this Agreement and so long as you fully comply at all times with this Agreement, Id Software grants to you the non-exclusive and limited right to use the Software only in executable or object code form.  The term "Software" includes all elements of the Software, including, without limitation, data files and screen displays.  You are not receiving any ownership or proprietary right, title, or interest in or to the Software or the copyrights, trademarks, or other rights related thereto.  For purposes of the first sentence of this Section, "use" means loading the Software into RAM and/or onto computer hard drive, as well as installation of the Software on a hard disk or other storage device, and means the uses permitted in Sections 2 and 5 hereinbelow.  You agree that the Software will not be downloaded, shipped, transferred, exported or re-exported into any country in violation of the United States Export Administration Act (or any other law governing such matters) by you or anyone at your direction, and that you will not utilize and will not authorize anyone to utilize the Software in any other manner in violation of any applicable law.  The Software shall not be downloaded or otherwise exported or re-exported into (or to a national or resident of) any country to which the United States has embargoed goods, or to anyone or into any country who/that are prohibited, by applicable law, from receiving such property.  In exercising your limited rights hereunder, you shall comply, at all times, with all applicable laws, regulations, ordinances, and statutes.  Id Software reserves all rights not granted in this Agreement, including, without limitation, all rights to Id Software's trademarks.

2.	Permitted New Creations.  Subject to the terms and provisions of this Agreement and so long as you fully comply at all times with this Agreement, Id Software grants to you the non-exclusive and limited right to create for the Software (except any Software code) your own modifications (the "New Creations") that shall operate only with the Software (but not any demo, test, or other version of the Software, and not with QUAKE 4(tm) independent of the Software).  You may include within the New Creations certain textures and other images (the "Software Images") from the Software.  You shall not create any New Creations that infringe against any third-party right or that are libelous, defamatory, obscene, false, misleading, or otherwise illegal or unlawful.  You agree that the New Creations will not be downloaded, shipped, transferred, exported, or re-exported into any country in violation of the United States Export Administration Act (or any other law governing such matters) by you or anyone at your direction, and that you will not utilize and will not authorize anyone to utilize the New Creations in any other manner in violation of any applicable law.  The New Creations shall not be downloaded or otherwise exported or re-exported into (or to a national or resident of) any country to which the United States has embargoed goods or to anyone or into any country who/that are prohibited, by applicable law, from receiving such property.  You shall not rent, sell, lease, lend, offer on a pay-per-play basis, or otherwise commercially exploit or commercially distribute the New Creations.  You are permitted to distribute, without any cost or charge, the New Creations only to other end-users so long as such distribution is not infringing against any third-party right and otherwise is not illegal or unlawful.  As noted below, in the event you commit any breach of this Agreement, your license and this Agreement automatically shall terminate, without notice.

3.	Prohibitions with Regard to the Software.  You, whether directly or indirectly, shall not do any of the following acts:
a.	rent the Software;
b.	sell the Software;
c.	lease or lend the Software;
d.	offer the Software on a pay-per-play basis;
e.	distribute the Software by any means, including, but not limited to, Internet or other electronic distribution, direct mail, retail, mail order, or other means;
f.	in any other manner and through any medium whatsoever commercially exploit the Software or use the Software for any commercial purpose;
g.	disassemble, reverse engineer, decompile, modify (except as permitted under Section 2 hereinabove) or alter the Software;
h.	translate the Software;
i.	reproduce or copy the Software (except as permitted under Section 5 hereinbelow);
j.	publicly display the Software;
k.	prepare or develop derivative works based upon the Software;
l.	remove or alter any notices or other markings or legends, such as trademark or copyright notices, affixed on or within the Software or the Printed Materials (as defined in Section 6  hereinbelow); or
m.	remove, alter, modify, disable, or reduce any of the anti-piracy measures contained in the Software, including, without limitation, measures relating to multiplayer play.

4.	Prohibition against Cheat Programs.  Any attempt by you, either directly or indirectly, to circumvent or bypass any element of the Software to gain any advantage in multiplayer play of the Software is a material breach of this Agreement.  It is a material breach of this Agreement for you, whether directly or indirectly, to create, develop, copy, reproduce, distribute, or otherwise make any use of any software program or any modification to the Software ("Cheat Program") itself that enables or allows the user thereof to obtain an advantage or otherwise exploit another Software player or user when playing the Software against other players or users on a local area network, any other network, or on the Internet.  Hacking into the executable of the Software, modification of the Software, or any other use of the Software in connection with the creation, development, or use of any such unauthorized Cheat Program is a material breach of this Agreement.  Cheat Programs include, but are not limited to, programs that allow Software players or users to see through walls or other level geometry; programs that allow Software players or users to change their rate of speed outside the allowable limits of the Software; programs that crash either and/or other Software players, users, PC clients, or network servers; programs that automatically target other Software players or users (commonly referred to as "aimbots") that automatically simulate Software player or user input for the purpose of gaining an advantage over other Software players or users; or any other program or modification that functions in a similar capacity or allows any prohibited conduct.
	In the event you breach this Section or otherwise breach this Agreement, your license and this Agreement automatically shall terminate, without notice, and you shall have no right to play the Software against other players or make any other use of the Software.

5.	Permitted Copying.  You may make only the following copies of the Software:  (i) you may copy the Software from the CD ROM that you purchase onto your computer hard drive; (ii) you may copy the Software from your computer hard drive into your computer RAM; and (iii) you may make one (1) "back up" or archival copy of the Software on one (1) hard disk.

6.	Intellectual Property Rights.  Certain printed materials (the "Printed Materials") accompany the Software.  The Software, the Printed Materials, and all copyrights, trademarks, and all other conceivable intellectual property rights related to the Software and the Printed Materials are owned by Id Software and are protected by United States copyright laws, international treaty provisions, and all applicable law, such as the Lanham Act.  You must treat the Software and the Printed Materials like any other copyrighted material, as required by 17 U.S.C. sub-section 101 et seq. and other applicable law.  You agree to use your best efforts to see that any user of the Software licensed hereunder, the Printed Materials or the New Creations complies with this Agreement.  You agree that you are receiving a copy of the Software and the Printed Materials by limited license only and not by sale and that the "first sale" doctrine of 17 U.S.C. sub-section 109 does not apply to your receipt or use of the Software or the Printed Materials.  This Section shall survive the cancellation or termination of this Agreement.
7.	Information Collection.  You consent to Activision obtaining certain information about your computer and its operating system, including the type and speed of the central processing unit, the amount of RAM in the central processing unit, the operating system, the type of video card used, whether your computer uses a CD or DVD drive, and whether your computer is equipped with a joystick, without any further notice to you.  Such information is not personally identifiable. The computer information that is collected simply helps Activision to understand and analyze broad, anonymous market information about our consumers, so that Activision can better serve their needs and demands.  Activision will only share such information with others, if at all, in the aggregate, reflecting overall computer features and capabilities.

8.	NO ID SOFTWARE WARRANTIES.  ID SOFTWARE DISCLAIMS ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND ANY WARRANTY OF NON-INFRINGEMENT, WITH RESPECT TO THE SOFTWARE, THE PRINTED MATERIALS, THE SOFTWARE IMAGES, AND OTHERWISE.  THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY.  ID SOFTWARE DOES NOT WARRANT THAT THE SOFTWARE OR THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE OR THAT THE SOFTWARE WILL MEET YOUR SPECIFIC OR SPECIAL REQUIREMENTS.  ADDITIONAL STATEMENTS, WHETHER ORAL OR WRITTEN, DO NOT CONSTITUTE WARRANTIES BY ID SOFTWARE AND SHOULD NOT BE RELIED UPON.  This Section shall survive the cancellation or termination of this Agreement.

9.	Limited Activision Warranty.  Activision warrants to the original consumer purchaser of the Software that the recording medium on which the Software is recorded will be free from defects in material and workmanship for ninety (90) days from the date of purchase.  If the recording medium is found defective within ninety (90) days of original purchase, Activision agrees to replace, free of charge, any Software discovered to be defective within such period upon its receipt of the Software, postage paid, with the proof of the date of purchase, as long as the Software still is being manufactured by Activision.  In the event that the Software no longer is available, Activision retains the right to substitute a similar game program of equal or greater value.  This warranty is limited to the recording medium containing the Software as originally provided by Activision and is not applicable to normal wear and tear. This warranty shall not be applicable and shall be void if the defect has arisen through abuse, mistreatment, or neglect.
EXCEPT AS SET FORTH ABOVE, THIS WARRANTY IS IN LIEU OF ALL OTHER WARRANTIES, WHETHER ORAL OR WRITTEN, EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, AND NO OTHER REPRESENTATIONS OR CLAIMS OF ANY KIND SHALL BE BINDING ON OR OBLIGATE ACTIVISION.
When returning the Software for warranty replacement, the original Software disks must be sent only in protective packaging and include:  (1) photocopy of your dated sales receipt; (2) your name and return address typed or clearly printed; (3) a brief note describing the defect, the problem(s) you are encountering, and the system on which you are running the Software; and (4) if you are returning the Software after the ninety (90) day warranty period, but within one (1) year after the date of purchase, please include check or money order for $10.00 U.S. (A$25 for Australia (subject to availability), or £6.00 for Europe) currency per CD or floppy disk replacement or $15.00 U.S.( £9.00 for Europe) per DVD replacement.

Note:  Certified mail recommended. In the United States, send to:
Warranty Replacements
Activision, Inc.
P.O. Box 67713
Los Angeles, California  90067

In Europe, send to:
Warranty Replacements
Activision
Parliament House
St. Laurence Way
Slough, Berkshire SL1 2BW
United Kingdom

In Australia and Asia Pacific territories, send to:
Warranty Replacements
Activision
Level 5, 51 Rawson Street
Epping, NSW 2121
Australia

10.	Governing Law, Venue, Indemnity, and Liability Limitation.  This Agreement shall be construed in accordance with and governed by the applicable laws of the State of Texas (but excluding conflicts of laws principles) and applicable United States federal law.  Except as set forth below, exclusive venue for all litigation regarding this Agreement shall be in Dallas County, Texas, and you agree to submit to the jurisdiction of the federal and state courts in Dallas County, Texas, for any such litigation.  Exclusive venue for all litigation involving Activision, but not involving Id Software, with regard to this Agreement shall be in Los Angeles County, California, and you agree to submit to the jurisdiction of the courts in Los Angeles, California, for any such litigation.  You hereby agree to indemnify, defend and hold harmless Id Software and Activision and Id Software's and Activision's respective officers, employees, directors, agents, licensees (excluding you), sub-licensees (excluding you), successors, and assigns from and against all losses, lawsuits, damages, causes of action, and claims relating to and/or arising from the New Creations or the distribution or other use of the New Creations or relating to and/or arising from your breach of this Agreement.  You agree that your unauthorized use of the Software Images, the Printed Materials, or the Software, or any part thereof, immediately and irreparably may damage Id Software such that Id Software could not be adequately compensated solely by a monetary award, and in such event, at Id Software's option, that Id Software shall be entitled to an injunctive order, in addition to all other available remedies, including a monetary award, to prohibit such unauthorized use without the necessity of Id Software posting bond or other security.  IN ANY CASE, ID SOFTWARE, ACTIVISION, AND ID SOFTWARE AND ACTIVISION'S RESPECTIVE OFFICERS, EMPLOYEES, DIRECTORS, SHAREHOLDERS, REPRESENTATIVES, AGENTS, LICENSEES (EXCLUDING YOU), SUB-LICENSEES (EXCLUDING YOU), SUCCESSORS, AND ASSIGNS SHALL NOT BE LIABLE FOR LOSS OF DATA, LOSS OF PROFITS, LOST SAVINGS, SPECIAL, INCIDENTAL, CONSEQUENTIAL, INDIRECT OR PUNITIVE DAMAGES, OR ANY OTHER DAMAGES ARISING FROM ANY ALLEGED CLAIM FOR BREACH OF WARRANTY, BREACH OF CONTRACT, NEGLIGENCE, STRICT PRODUCT LIABILITY, OR OTHER LEGAL THEORY EVEN IF ID SOFTWARE, ACTIVISION, OR THEIR RESPECTIVE AGENT(S) HAVE BEEN ADVISED OF THE POSSIBILITY OF ANY SUCH DAMAGES, OR EVEN IF SUCH DAMAGES ARE FORESEEABLE, OR LIABLE FOR ANY CLAIM BY ANY OTHER PARTY.  Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so the above limitation or exclusion may not apply to you.  This Section shall survive the cancellation or termination of this Agreement.

11.	United States Government Restricted Rights.  To the extent applicable, the United States Government shall have only those rights to use the Software and the Printed Materials as expressly stated and expressly limited and restricted in this Agreement, as provided in 48 C.F.R. sub-sections 227.7201 through 227.7204, inclusive.

12.	General Provisions.  Neither this Agreement nor any part or portion hereof shall be assigned or sublicensed by you.  Id Software and Activision each may assign its respective rights under this Agreement in the assigning party's sole discretion.  Should any provision of this Agreement be held to be void, invalid, unenforceable, or illegal by a court of competent jurisdiction, the validity and enforceability of the other provisions shall not be affected thereby.  If any provision is determined to be unenforceable by a court of competent jurisdiction, you agree to a modification of such provision to provide for enforcement of the provision's intent, to the extent permitted by applicable law.  Failure of Id Software or Activision to enforce any provision of this Agreement shall not constitute or be construed as a waiver of such provision or of the right to enforce such provision.  IMMEDIATELY UPON YOUR FAILURE TO COMPLY WITH, OR YOUR BREACH OF ANY TERM OR PROVISION OF THIS AGREEMENT, YOUR LICENSE GRANTED HEREIN AND THIS AGREEMENT AUTOMATICALLY SHALL TERMINATE, WITHOUT NOTICE, AND ID SOFTWARE AND ACTIVISION MAY PURSUE ALL RELIEF AND REMEDIES AGAINST YOU THAT ARE AVAILABLE UNDER APPLICABLE LAW AND/OR THIS AGREEMENT.  Immediately upon termination of this Agreement, any and all rights you are granted hereunder shall terminate, you shall have no right to use the Software, the Printed Materials, or the New Creations, in any manner, you immediately shall destroy all copies of the Software, the Printed Materials, and the New Creations in your possession, custody, or control, and all rights granted hereunder shall revert, without notice, to and be vested in Id Software.

YOU ACKNOWLEDGE THAT YOU HAVE READ THIS AGREEMENT, YOU UNDERSTAND THIS AGREEMENT, AND UNDERSTAND THAT BY CONTINUING THE INSTALLATION OF THE SOFTWARE, BY LOADING OR RUNNING THE SOFTWARE, OR BY PLACING OR COPYING THE SOFTWARE ONTO YOUR COMPUTER HARD DRIVE, COMPUTER RAM OR OTHER STORAGE, YOU AGREE TO BE BOUND BY THE TERMS AND CONDITIONS OF THIS AGREEMENT.  YOU FURTHER AGREE THAT, EXCEPT FOR WRITTEN SEPARATE AGREEMENTS, IF ANY, AMONG ID SOFTWARE, ACTIVISION, AND YOU, THIS AGREEMENT IS A COMPLETE AND EXCLUSIVE STATEMENT OF THE RIGHTS AND LIABILITIES OF THE PARTIES HERETO, RELATING TO THE SUBJECT MATTER HEREOF.  THIS AGREEMENT SUPERSEDES ALL PRIOR ORAL AGREEMENTS, PROPOSALS, OR UNDERSTANDINGS, AND ANY OTHER COMMUNICATIONS, IF ANY, AMONG ID SOFTWARE, ACTIVISION, AND YOU RELATING TO THE SUBJECT MATTER OF THIS AGREEMENT.
