International License Agreement for Non-Warranted Programs

Part 1 - General Terms

BY DOWNLOADING, INSTALLING, COPYING, ACCESSING, OR USING THE PROGRAM YOU AGREE
TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCEPTING THESE TERMS ON BEHALF OF
ANOTHER PERSON OR A COMPANY OR OTHER LEGAL ENTITY, YOU REPRESENT AND WARRANT
THAT YOU HAVE FULL AUTHORITY TO BIND THAT PERSON, COMPANY, OR LEGAL ENTITY TO
THESE TERMS. IF YOU DO NOT AGREE TO THESE TERMS, 

- DO NOT DOWNLOAD, INSTALL, COPY, ACCESS, OR USE THE PROGRAM; AND

- PROMPTLY RETURN THE PROGRAM AND PROOF OF ENTITLEMENT TO THE PARTY FROM WHOM
YOU ACQUIRED IT TO OBTAIN A REFUND OF THE AMOUNT YOU PAID. IF YOU DOWNLOADED THE
PROGRAM, CONTACT THE PARTY FROM WHOM YOU ACQUIRED IT.

"IBM" is International Business Machines Corporation or one of its subsidiaries.

"License Information" ("LI") is a document that provides information specific to
a Program. The Program's LI is available at http://www.ibm.com/software/sla/ .
The LI may also be found in a file in the Program's directory, by the use of a
system command, or as a booklet which accompanies the Program.

"Program" is the following, including the original and all whole or partial
copies: 1) machine-readable instructions and data, 2) components, 3)
audio-visual content (such as images, text, recordings, or pictures), 4) related
licensed materials, and 5) license use documents or keys, and documentation.

A "Proof of Entitlement" ("PoE") is evidence of Your authorization to use a
Program at a specified level. That level may be measured, for example, by the
number of processors or users. The PoE is also evidence of Your eligibility for 
future upgrade prices, if any, and potential special or promotional
opportunities. If IBM does not provide You with a PoE, then IBM may accept the
original paid sales receipt or other sales record from the party (either IBM or
its reseller) from whom You acquired the Program, provided that it specifies the
name of the Program and the usage level acquired. 

"You" and "Your" refer either to an individual person or to a single legal
entity.

This Agreement includes Part 1 - General Terms, Part 2 - Country-unique Terms
(if any), License Information, and Proof of Entitlement and is the complete
agreement between You and IBM regarding the use of the Program. It replaces any
prior oral or written communications between You and IBM concerning Your use of
the Program. The terms of Part 2 and License Information may replace or modify
those of Part 1. To the extent there is a conflict between the terms of this
Agreement and those of the IBM International Passport Advantage Agreement, the
terms of the latter agreement prevail.

1. Entitlement

License

The Program is owned by IBM or an IBM supplier, and is copyrighted and licensed,
not sold.

IBM grants You a nonexclusive license to use the Program when You lawfully
acquire it.

You may 1) use the Program up to the level of use specified in the PoE and 2)
make and install copies, including a backup copy, to support such use. The terms
of this license apply to each copy You make. You will reproduce all copyright
notices and all other legends of ownership on each copy, or partial copy, of the
Program.

If You acquire the Program as a program upgrade, after You install the upgrade
You may not use the Program from which You upgraded or transfer it to another
party.

You will ensure that anyone who uses the Program (accessed either locally or
remotely) does so only for Your authorized use and complies with the terms of
this Agreement.

You may not 1) use, copy, modify, or distribute the Program except as provided
in this Agreement; 2) reverse assemble, reverse compile, or otherwise translate
the Program except as specifically permitted by law without the possibility of
contractual waiver; or 3) sublicense, rent, or lease the Program.

IBM may terminate Your license if You fail to comply with the terms of this
Agreement. If IBM does so, You must destroy all copies of the Program and its
PoE.

Money-back Guarantee

If for any reason You are dissatisfied with the Program and You are the original
licensee, You may obtain a refund of the amount You paid for it, if within 30
days of Your invoice date You return the Program and its PoE to the party from
whom You obtained it. If You downloaded the Program, You may contact the party
from whom You acquired it for instructions on how to obtain the refund.

Program Transfer

You may transfer a Program and all of Your license rights and obligations to
another party only if that party agrees to the terms of this Agreement. When You
transfer the Program, You must also transfer a copy of this Agreement, including
the Program's PoE. After the transfer, You may not use the Program.

2. Charges

The amount payable for a Program license is a one-time charge. 

One-time charges are based on the level of use acquired which is specified in
the PoE. IBM does not give credits or refunds for charges already due or paid,
except as specified elsewhere in this Agreement.

If You wish to increase the level of use, notify IBM or the party from whom You
acquired it and pay any applicable charges. 

If any authority imposes a duty, tax, levy or fee, excluding those based on
IBM's net income, upon the Program, then You agree to pay the amount specified
or supply exemption documentation. You are responsible for any personal property
taxes for the Program from the date that You acquire it.

3. No Warranty

SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, IBM MAKES NO
WARRANTIES OR CONDITIONS EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE, AND NON-INFRINGEMENT, REGARDING THE PROGRAM OR TECHNICAL
SUPPORT, IF ANY.

The exclusion also applies to any of IBM's Program developers and suppliers.

Manufacturers, suppliers, or publishers of non-IBM Programs may provide their
own warranties.

IBM does not provide technical support, unless IBM specifies otherwise.

4. Limitation of Liability

Circumstances may arise where, because of a default on IBM's part or other
liability, You are entitled to recover damages from IBM. In each such instance,
regardless of the basis on which You may be entitled to claim damages from IBM,
(including fundamental breach, negligence, misrepresentation, or other contract
or tort claim), IBM is liable for no more than 1) damages for bodily injury
(including death) and damage to real property and tangible personal property and
2) the amount of any other actual direct damages up to the charges for the
Program that is the subject of the claim.

This limitation of liability also applies to IBM's Program developers and
suppliers. It is the maximum for which they and IBM are collectively
responsible.

UNDER NO CIRCUMSTANCES IS IBM, ITS PROGRAM DEVELOPERS OR SUPPLIERS LIABLE FOR
ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: 

1. LOSS OF, OR DAMAGE TO, DATA;

2. SPECIAL, INCIDENTAL, OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL
DAMAGES; OR

3. LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS.

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.

5. General

1. Nothing in this Agreement affects any statutory rights of consumers that
cannot be waived or limited by contract.

2. In the event that any provision of this Agreement is held to be invalid or
unenforceable, the remaining provisions of this Agreement remain in full force
and effect.

3. You agree to comply with all applicable export and import laws and
regulations.

4. You agree to allow IBM to store and use Your contact information, including
names, phone numbers, and e-mail addresses, anywhere they do business. Such
information will be processed and used in connection with our business
relationship, and may be provided to contractors, Business Partners, and
assignees of IBM for uses consistent with their collective business activities,
including communicating with You (for example, for processing orders, for
promotions, and for market research).

5. Neither You nor IBM will bring a legal action under this Agreement more than
two years after the cause of action arose unless otherwise provided by local law
without the possibility of contractual waiver or limitation.

6. Neither You nor IBM is responsible for failure to fulfill any obligations due
to causes beyond its control.

7. This Agreement will not create any right or cause of action for any third
party, nor will IBM be responsible for any third party claims against You
except, as permitted by the Limitation of Liability section above, for bodily
injury (including death) or damage to real or tangible personal property for
which IBM is legally liable.

6. Governing Law, Jurisdiction, and Arbitration

Governing Law

Both You and IBM consent to the application of the laws of the country in which
You acquired the Program license to govern, interpret, and enforce all of Your
and IBM's rights, duties, and obligations arising from, or relating in any
manner to, the subject matter of this Agreement, without regard to conflict of
law principles.

The United Nations Convention on Contracts for the International Sale of Goods
does not apply.

Jurisdiction

All of our rights, duties, and obligations are subject to the courts of the
country in which You acquired the Program license.

Part 2 - Country-unique Terms

AMERICAS

ARGENTINA: Governing Law, Jurisdiction, and Arbitration (Section 6): The
following exception is added to this section:

Any litigation arising from this Agreement will be settled exclusively by the
Ordinary Commercial Court of the city of Buenos Aires.

BRAZIL: Governing Law, Jurisdiction, and Arbitration (Section 6): The following
exception is added to this section:

Any litigation arising from this Agreement will be settled exclusively by the
court of Rio de Janeiro, RJ.

CANADA: General (Section 5): The following replaces item 7:

7. This Agreement will not create any right or cause of action for any third
party, nor will IBM be responsible for any third party claims against You except
as permitted by the Limitation of Liability section above for bodily injury
(including death) or physical harm to real or tangible personal property caused
by IBM's negligence for which IBM is legally liable."

Governing Law, Jurisdiction, and Arbitration (Section 6): The phrase "the laws
of the country in which You acquired the Program license" in the Governing Law
subsection is replaced by the following: 

the laws in the Province of Ontario"

PERU: Limitation of Liability (Section 4): The following is added at the end of
this section: 

In accordance with Article 1328 of the Peruvian Civil Code, the limitations and
exclusions specified in this section will not apply to damages caused by IBM's
willful misconduct ("dolo") or gross negligence ("culpa inexcusable").

UNITED STATES OF AMERICA: General (Section 5): The following is added to this
section:

U.S. Government Users Restricted Rights - Use, duplication or disclosure
restricted by the GSA ADP Schedule Contract with the IBM Corporation.

Governing Law, Jurisdiction, and Arbitration (Section 6): The phrase "the laws
of the country in which You acquired the Program license" in the Governing Law
subsection is replaced by the following:

the laws of the State of New York, United States of America

ASIA PACIFIC

AUSTRALIA: No Warranty (Section 3): The following is added:

Although IBM specifies that there are no warranties,  You may have certain
rights under the Trade Practices Act 1974 or other legislation and are only
limited to the extent permitted by the applicable legislation.

Limitation of Liability (Section 4): The following is added:

Where IBM is in breach of a condition or warranty implied by the Trade Practices
Act 1974, IBM's liability is limited to the repair or replacement of the goods,
or the supply of equivalent goods. Where that condition or warranty relates to
right to sell, quiet possession or clear title, or the goods are of a kind
ordinarily acquired for personal, domestic or household use or consumption, then
none of the limitations in this paragraph apply.

Governing Law, Jurisdiction, and Arbitration (Section 6): The phrase "the laws
of the country in which You acquired the Program license" in the Governing Law
subsection is replaced by the following:

the laws of the State or Territory in which You acquired the Program license

CAMBODIA, LAOS, and VIETNAM: Governing Law, Jurisdiction, and Arbitration
(Section 6): The phrase "the laws of the country in which You acquired the
Program license" in the Governing Law subsection is replaced by the following:

the laws of the State of New York, United States of America

The following is added to this section:

Arbitration

Disputes arising out of or in connection with this Agreement shall be finally
settled by arbitration which shall be held in Singapore in accordance with the
Arbitration Rules of Singapore International Arbitration Center ("SIAC Rules")
then in effect. The arbitration award shall be final and binding for the parties
without appeal and shall be in writing and set forth the findings of fact and
the conclusions of law.

The number of arbitrators shall be three, with each side to the dispute being
entitled to appoint one arbitrator. The two arbitrators appointed by the parties
shall appoint a third arbitrator who shall act as chairman of the proceedings.
Vacancies in the post of chairman shall be filled by the president of the SIAC.
Other vacancies shall be filled by the respective nominating party. Proceedings
shall continue from the stage they were at when the vacancy occurred.

If one of the parties refuses or otherwise fails to appoint an arbitrator within
30 days of the date the other party appoints its, the first appointed arbitrator
shall be the sole arbitrator, provided that the arbitrator was validly and
properly appointed.

All proceedings shall be conducted, including all documents presented in such
proceedings, in the English language. The English language version of this
Agreement prevails over any other language version.

HONG KONG S.A.R. and MACAU S.A.R. of China: Governing Law, Jurisdiction, and
Arbitration (Section 6): The phrase "the laws of the country in which You
acquired the Program license" in the Governing Law subsection is replaced by the
following:

the laws of Hong Kong Special Administrative Region of China

INDIA: Limitation of Liability (Section 4): The following replaces the terms of
items 1 and 2 of the first paragraph:

1) liability for bodily injury (including death) or damage to real property and
tangible personal property will be limited to that caused by IBM's negligence;
and 2) as to any other actual damage arising in any situation involving
nonperformance by IBM pursuant to, or in any way related to the subject of this
Agreement, IBM's liability will be limited to the charge paid by You for the
individual Program that is the subject of the claim.

General (Section 5): The following replaces the terms of item 5:

If no suit or other legal action is brought, within three years after the cause
of action arose, in respect of any claim that either party may have against the
other, the rights of the concerned party in respect of such claim will be
forfeited and the other party will stand released from its obligations in
respect of such claim.

Governing Law, Jurisdiction, and Arbitration (Section 6): The following is added
to this section:

Arbitration

Disputes arising out of or in connection with this Agreement shall be finally
settled by arbitration which shall be held in Bangalore, India in accordance
with the laws of India then in effect. The arbitration award shall be final and
binding for the parties without appeal and shall be in writing and set forth the
findings of fact and the conclusions of law.

The number of arbitrators shall be three, with each side to the dispute being
entitled to appoint one arbitrator. The two arbitrators appointed by the parties
shall appoint a third arbitrator who shall act as chairman of the proceedings.
Vacancies in the post of chairman shall be filled by the president of the Bar
Council of India. Other vacancies shall be filled by the respective nominating
party. Proceedings shall continue from the stage they were at when the vacancy
occurred.

If one of the parties refuses or otherwise fails to appoint an arbitrator within
30 days of the date the other party appoints its, the first appointed arbitrator
shall be the sole arbitrator, provided that the arbitrator was validly and
properly appointed.

All proceedings shall be conducted, including all documents presented in such
proceedings, in the English language. The English language version of this
Agreement prevails over any other language version.

JAPAN: General (Section 5): The following is inserted after item 5:

Any doubts concerning this Agreement will be initially resolved between us in
good faith and in accordance with the principle of mutual trust.

MALAYSIA: Limitation of Liability (Section 4): The word "SPECIAL" in item 2 of
the third paragraph is deleted:

NEW ZEALAND: No Warranty (Section 3): The following is added:

Although IBM specifies that there are no warranties,  You may have certain
rights under the Consumer Guarantees Act 1993 or other legislation which cannot
be excluded or limited. The Consumer Guarantees Act 1993 will not apply in
respect of any goods which IBM provides, if You require the goods for the
purposes of a business as defined in that Act.

Limitation of Liability (Section 4): The following is added:

Where Programs are not acquired for the purposes of a business as defined in the
Consumer Guarantees Act 1993, the limitations in this Section are subject to the
limitations in that Act.

PEOPLE'S REPUBLIC OF CHINA: Charges (Section 2): The following is added:

All banking charges incurred in the People's Republic of China will be borne by
You and those incurred outside the People's Republic of China will be borne by
IBM.

Governing Law, Jurisdiction, and Arbitration (Section 6): The phrase "the laws
of the country in which You acquired the Program license" in the Governing Law
subsection is replaced by the following:

the laws of the State of New York, United States of America (except when local
law requires otherwise)

PHILIPPINES: Limitation of Liability (Section 4): The following replaces the
terms of item 2 of the third paragraph:

2. special (including nominal and exemplary damages), moral, incidental, or
indirect damages or for any economic consequential damages; or

Governing Law, Jurisdiction, and Arbitration (Section 6): The following is added
to this section:

Arbitration

Disputes arising out of or in connection with this Agreement shall be finally
settled by arbitration which shall be held in Metro Manila, Philippines in
accordance with the laws of the Philippines then in effect. The arbitration
award shall be final and binding for the parties without appeal and shall be in
writing and set forth the findings of fact and the conclusions of law.

The number of arbitrators shall be three, with each side to the dispute being
entitled to appoint one arbitrator. The two arbitrators appointed by the parties
shall appoint a third arbitrator who shall act as chairman of the proceedings.
Vacancies in the post of chairman shall be filled by the president of the
Philippine Dispute Resolution Center, Inc. Other vacancies shall be filled by
the respective nominating party. Proceedings shall continue from the stage they
were at when the vacancy occurred.

If one of the parties refuses or otherwise fails to appoint an arbitrator within
30 days of the date the other party appoints its, the first appointed arbitrator
shall be the sole arbitrator, provided that the arbitrator was validly and
properly appointed.

All proceedings shall be conducted, including all documents presented in such
proceedings, in the English language. The English language version of this
Agreement prevails over any other language version.

SINGAPORE: Limitation of Liability (Section 4): The words "SPECIAL" and
"ECONOMIC" are deleted from item 2 of the third paragraph.

General (Section 5): The following replaces the terms of item 7:

Subject to the rights provided to IBM's suppliers and Program developers as
provided in Section 4 above (Limitation of Liability), a person who is not a
party to this Agreement shall have no right under the Contracts (Right of Third
Parties) Act to enforce any of its terms.

EUROPE, MIDDLE EAST, AFRICA (EMEA)

No Warranty (Section 3): In the European Union, the following is added at the
beginning of this section:

In the European Union, consumers have legal rights under applicable national
legislation governing the sale of consumer goods. Such rights are not affected
by the  provisions of this Section 3.

Limitation of Liability (Section 4): In Austria, Denmark, Finland, Greece,
Italy, Netherlands, Norway, Portugal, Spain, Sweden and Switzerland, the
following replaces the terms of this section in its entirety:

Except as otherwise provided by mandatory law:

1. IBM's liability for any damages and losses that may arise as a consequence of
the fulfillment of its obligations under or in connection with this agreement or
due to any other cause related to this agreement is limited to the compensation
of only those damages and losses proved and actually arising as an immediate and
direct consequence of the non-fulfillment of such obligations (if IBM is at
fault) or of such cause, for a maximum amount equal to the charges You paid for
the Program.

The above limitation shall not apply to damages for bodily injuries (including
death) and damages to real property and tangible personal property for which IBM
is legally liable.

2. UNDER NO CIRCUMSTANCES IS IBM, OR ANY OF ITS PROGRAM DEVELOPERS, LIABLE FOR
ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: 1) LOSS OF, OR
DAMAGE TO, DATA; 2) INCIDENTAL OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC
CONSEQUENTIAL DAMAGES; 3) LOST PROFITS, EVEN IF THEY ARISE AS AN IMMEDIATE
CONSEQUENCE OF THE EVENT THAT GENERATED THE DAMAGES; OR 4) LOSS OF BUSINESS,
REVENUE, GOODWILL, OR ANTICIPATED SAVINGS. 

3. The limitation and exclusion of liability herein agreed applies not only to
the activities performed by IBM but also to the activities performed by its
suppliers and Program developers, and represents the maximum amount for which
IBM as well as its suppliers and Program developers, are collectively
responsible. 

Limitation of Liability (Section 4): In France and Belgium, the following
replaces the terms of this section in its entirety: 

Except as otherwise provided by mandatory law:

1. IBM's liability for any damages and losses that may arise as a consequence of
the fulfillment of its obligations under or in connection with this agreement is
limited to the compensation of only those damages and losses proved and actually
arising as an immediate and direct consequence of the non-fulfillment of such
obligations (if IBM is at fault), for a maximum amount equal to the charges You
paid for the Program that has caused the damages.

The above limitation shall not apply to damages for bodily injuries (including
death) and damages to real property and tangible personal property for which IBM
is legally liable.

2. UNDER NO CIRCUMSTANCES IS IBM, OR ANY OF ITS PROGRAM DEVELOPERS, LIABLE FOR
ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: 1) LOSS OF, OR
DAMAGE TO, DATA; 2) INCIDENTAL OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC
CONSEQUENTIAL DAMAGES; 3) LOST PROFITS, EVEN IF THEY ARISE AS AN IMMEDIATE
CONSEQUENCE OF THE EVENT THAT GENERATED THE DAMAGES; OR 4) LOSS OF BUSINESS,
REVENUE, GOODWILL, OR ANTICIPATED SAVINGS. 

3. The limitation and exclusion of liability herein agreed applies not only to
the activities performed by IBM but also to the activities performed by its
suppliers and Program developers, and represents the maximum amount for which
IBM as well as its suppliers and Program developers, are collectively
responsible.

Governing Law, Jurisdiction, and Arbitration (Section 6)

Governing Law

The phrase "the laws of the country in which You acquired the Program license"
is replaced by: 
1) "the laws of Austria" in Albania, Armenia, Azerbaijan, Belarus,
Bosnia-Herzegovina, Bulgaria, Croatia, Georgia, Hungary, Kazakhstan, Kyrgyzstan,
FYR Macedonia, Moldavia, Poland, Romania, Russia, Slovakia, Slovenia,
Tajikistan, Turkmenistan, Ukraine, Uzbekistan, and FR Yugoslavia; 
2) "the laws of France" in Algeria, Benin, Burkina Faso, Cameroon, Cape Verde,
Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic
Republic of Congo, Equatorial Guinea, French Guiana, French Polynesia, Gabon,
Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali,
Mauritania, Mauritius, Mayotte, Morocco, New Caledonia, Niger, Reunion, Senegal,
Seychelles, Togo, Tunisia, Vanuatu, and Wallis & Futuna; 
3) "the laws of Finland" in Estonia, Latvia, and Lithuania; 
4) "the laws of England" in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea,
Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique,
Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome, Saudi Arabia, Sierra Leone,
Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West
Bank/Gaza, Yemen, Zambia, and Zimbabwe; and 
5) "the laws of South Africa" in South Africa, Namibia, Lesotho and Swaziland.

Jurisdiction

The following exceptions are added to this section:

1) In Austria the choice of jurisdiction for all disputes arising out of this
Agreement and relating thereto, including its existence, will be the competent
court of law in Vienna, Austria (Inner-City); 
2) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana,
Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman,
Pakistan, Qatar, Rwanda, Sao Tome, Saudi Arabia, Sierra Leone, Somalia,
Tanzania, Uganda, United Arab Emirates, West Bank/Gaza, Yemen, Zambia, and
Zimbabwe all disputes arising out of this Agreement or related to its execution,
including summary proceedings, will be submitted to the exclusive jurisdiction
of the English courts; 
3) in Belgium and Luxembourg, for all disputes arising out of this Agreement or
related to its interpretation or its execution, only the law and the courts of
the capital of the country in which Your registered office and/or commercial
office is located are competent; 
4) in France, Algeria, Benin, Burkina Faso, Cameroon, Cape Verde, Central
African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic
of Congo, Equatorial Guinea, French Guiana, French Polynesia, Gabon, Gambia,
Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania,
Mauritius, Mayotte, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles,
Togo, Tunisia, Vanuatu, and Wallis & Futuna all disputes arising out of this
Agreement or related to its violation or execution, including summary
proceedings, will be settled exclusively by the Commercial Court of Paris; 
5) in Russia, all disputes arising out of or in relation to the interpretation,
the violation, the termination, the nullity of the execution of this Agreement
shall be settled by Arbitration Court of Moscow; 
6) in South Africa, Namibia, Lesotho and Swaziland, both of us agree to submit
all disputes relating to this Agreement to the jurisdiction of the High Court in
Johannesburg; 
7) in Turkey all disputes arising out of or in connection with this Agreement
shall be resolved by the Istanbul Central (Sultanahmet) Courts and Execution
Directorates of Istanbul, the Republic of Turkey; 
8) in each of the following specified countries, any legal claim arising out of
this Agreement will be brought before, and settled exclusively by, the competent
court of a) Athens for Greece, b) Tel Aviv-Jaffa for Israel, c) Milan for Italy,
d) Lisbon for Portugal, and e) Madrid for Spain; and 
9) in the United Kingdom, both of us agree to submit all disputes relating to
this Agreement to the jurisdiction of the English courts. 

Arbitration 

In Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia,
Georgia, Hungary, Kazakhstan, Kyrgyzstan, FYR Macedonia, Moldavia, Poland,
Romania, Russia, Slovakia, Slovenia, Tajikistan, Turkmenistan, Ukraine,
Uzbekistan, and FR Yugoslavia all disputes arising out of this Agreement or
related to its violation, termination or nullity will be finally settled under
the Rules of Arbitration and Conciliation of the International Arbitral Center
of the Federal Economic Chamber in Vienna (Vienna Rules) by three arbitrators
appointed in accordance with these rules. 
The arbitration will be held in Vienna, Austria, and the official language of
the proceedings will be English. The decision of the arbitrators will be final
and binding upon both parties. Therefore, pursuant to paragraph 598 (2) of the
Austrian Code of Civil Procedure, the parties expressly waive the application of
paragraph 595 (1) figure 7 of the Code. IBM may, however, institute proceedings
in a competent court in the country of installation.

In Estonia, Latvia and Lithuania all disputes arising in connection with this
Agreement will be finally settled in arbitration that will be held in Helsinki,
Finland in accordance with the arbitration laws of Finland then in effect. Each
party will appoint one arbitrator. The arbitrators will then jointly appoint the
chairman. If arbitrators cannot agree on the chairman, then the Central Chamber
of Commerce in Helsinki will appoint the chairman.

AUSTRIA: No Warranty (Section 3): The terms of this section are completely
replaced by the following:

The following limited warranty applies if You have paid a charge to obtain the
Program:

The warranty period is twelve months from the date of delivery. The limitation
period for consumers in action for breach of warranty is the statutory period as
a minimum.

The warranty for an IBM Program covers the functionality of the Program for its
normal use and the Program's conformity to its specifications.

IBM warrants that when the Program is used in the specified operating
environment it will conform to its specifications. IBM does not warrant
uninterrupted or error-free operation of the Program or that IBM will correct
all Program defects. You are responsible for the results obtained from the use
of the Program.

The warranty applies only to the unmodified portion of the Program.

If the Program does not function as warranted during the warranty period and the
problem cannot be resolved with information available. You may return the
Program to the party from whom You acquired it and receive a refund in the
amount You paid. If You downloaded the Program, You may contact the party from
whom You acquired it to obtain the refund.

This is our sole obligation to You, except as otherwise required by applicable
statutory law.

General (Section 5): The following is added to item 4:

For purposes of this clause, contact information will also include information
about You as a legal entity, for example revenue data and other transactional
information.

GERMANY: No Warranty (Section 3): The same changes apply as those in No Warranty
(Section 3) under Austria above.

Limitation of Liability (Section 4): The following paragraph is added to this
Section:

The limitations and exclusions specified in this Section will not apply to
damages caused by IBM intentionally or by gross negligence.

General (Section 5): The following replaces the terms of item 5:

Any claims resulting from this Agreement are subject to a statute of limitation
of three years, except as stated in Section 3 (No Warranty) of this Agreement.

HUNGARY: Limitation of Liability (Section 4): The following is added at the end
of this section:

The limitation and exclusion specified herein shall not apply to liability for a
breach of contract damaging life, physical well-being, or health that has been
caused intentionally, by gross negligence, or by a criminal act.

The parties accept the limitations of liability as valid provisions and state
that the Section 314.(2) of the Hungarian Civil Code applies as the acquisition
price as well as other advantages arising out of the present Agreement balance
this limitation of liability.

IRELAND: No Warranty (Section 3): The following is added to this section:

Except as expressly provided in these terms and conditions, or section 12 of the
Sale of Goods Act 1893 (as amended by the Sale of Goods and Supply of Services
Act 1980 ("the 1980 Act")), all conditions and warranties (express or implied,
statutory or otherwise) are hereby excluded including, without limitation, any
warranties implied by the Sale of Goods Act 1893 as amended by the 1980 Act
(including, for the avoidance of doubt, section 39 of the 1980 Act).

Limitation of Liability (Section 4): The following replaces the terms of this
section in its entirety:

For the purposes of this section, a "Default" means any act, statement,
omission, or negligence on the part of IBM in connection with, or in relation
to, the subject matter of an Agreement in respect of which IBM is legally liable
to You whether in contract or tort. A number of Defaults which together result
in, or contribute to, substantially the same loss or damage will be treated as
one Default occurring on the date of occurrence of the last such Default.

Circumstances may arise where, because of a Default, You are entitled to recover
damages from IBM. This section sets out the extent of IBM's liability and Your
sole remedy.

1. IBM will accept unlimited liability for (a) death or personal injury caused
by the negligence of IBM, and (b) subject always to the Items for Which IBM is
Not Liable below, for physical damage to Your tangible property resulting from
the negligence of IBM.

2. Except as provided in item 1 above, IBM's entire liability for actual damages
for any one Default will not in any event exceed the greater of 1) EUR 125,000,
or 2) 125% of the amount You paid for the Program directly relating to the
Default. These limits also apply to any of IBM's suppliers and Program
developers. They state the maximum for which IBM and such suppliers and Program
developers are collectively responsible.

Items for Which IBM is Not Liable

Save with respect to any liability referred to in item 1 above, under no
circumstances is IBM or any of its suppliers or Program developers liable for
any of the following, even if IBM or they were informed of the possibility of
such losses:

1. loss of, or damage to, data;

2. special, indirect, or consequential loss; or

3. loss of profits, business, revenue, goodwill, or anticipated savings.

ITALY: General (Section 5): The following is added to this section:

IBM and Customer (hereinafter, individually, "Party") shall comply with all the
obligations of the applicable provisions of law and/or regulation on personal
data protection. Each of the Parties will indemnify and keep the other Party
harmless from any damage, claim, cost or expense incurred by the latter,
directly and or indirectly, as a consequence of an infringement of the other
Party of the mentioned provisions of law and/or regulations. 

SLOVAKIA: Limitation of Liability (Section 4): The following is added to the end
of the last paragraph:

The limitations apply to the extent they are not prohibited under �� 373-386 of
the Slovak Commercial Code.

General (Section 5): The terms of item 5 are replaced with the following:

THE PARTIES AGREE THAT, AS DEFINED BY APPLICABLE LOCAL LAW, ANY LEGAL OR OTHER
ACTION RELATED TO A BREACH OF THIS AGREEMENT MUST BE COMMENCED NO LATER  THAN
FOUR YEARS FROM THE DATE ON WHICH THE CAUSE OF ACTION AROSE.

SWITZERLAND: General (Section 5): The following is added to item 4:

For purposes of this clause, contact information will also include information
about You as a legal entity, for example revenue data and other transactional
information.

UNITED KINGDOM: No Warranty (Section 3): The following replaces the first
sentence in the first paragraph of this section:

SUBJECT TO ANY STATUTORY WARRANTIES WHICH CANNOT BE EXCLUDED, IBM MAKES NO
WARRANTY OR CONDITION EITHER EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION)
THE IMPLIED WARRANTIES OF SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR
PURPOSE, AND NON-INFRINGEMENT, REGARDING THE PROGRAM.

Limitation of Liability (Section 4): The following replaces the terms of this
section in its entirety: 

For the purposes of this section, a "Default" means any act, statement,
omission, or negligence on the part of IBM in connection with, or in relation
to, the subject matter of an Agreement in respect of which IBM is legally liable
to You, whether in contract or tort. A number of Defaults which together result
in, or contribute to, substantially the same loss or damage will be treated as
one Default.

Circumstances may arise where, because of a Default, You are entitled to recover
damages from IBM. This section sets out the extent of IBM's liability and Your
sole remedy.

1. IBM will accept unlimited liability for:

a. death or personal injury caused by the negligence of IBM; 

b. any breach of its obligations implied by Section 12 of the Sale of Goods Act
1979 or Section 2 of the Supply of Goods and Services Act 1982, or any statutory
modification or re-enactment of either such Section; and

c. subject always to the Items for Which IBM is Not Liable below, for physical
damage to Your tangible property resulting from the negligence of IBM.

2. IBM's entire liability for actual damages for any one Default will not in any
event, except as provided in item 1 above, exceed the greater of 1) �75,000, or
2) 125% of the amount You paid for the Program directly relating to the Default.
These limits also apply to IBM's suppliers and Program developers. They state
the maximum for which IBM and such suppliers and Program developers are
collectively responsible.

Items for Which IBM is Not Liable

Save with respect to any liability referred to in item 1 above, under no
circumstances is IBM or any of its suppliers or Program developers liable for
any of the following, even if IBM or they were informed of the possibility of
such losses:

1. loss of, or damage to, data;

2. special, indirect, or consequential loss; or

3. loss of profits, business, revenue, goodwill, or anticipated savings.

Z125-5589-03 (06/2006)



LICENSE INFORMATION

The Programs listed below are licensed under the following terms and conditions
in addition to those of the International License Agreement for Non-Warranted
Programs.

Program Name: IBM(R) 32-bit SDK for Linux(R) on Intel(R) architecture, Java(TM)
Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Program Name: IBM(R) 64-bit SDK for Linux(R) on AMD64 / EM64T architecture,
Java(TM) Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Program Name: IBM(R) 32-bit SDK for Linux(R) on System i(TM) and System p(TM)
architecture, Java(TM) Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Program Name: IBM(R) 64-bit SDK for Linux(R) on System i(TM) and System p(TM)
architecture, Java(TM) Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Program Name: IBM(R) 31-bit SDK for Linux(R) on System z(TM) architecture,
Java(TM) Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Program Name: IBM(R) 64-bit SDK for Linux(R) on System z(TM) architecture,
Java(TM) Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Program Name: IBM(R) 32-bit Runtime Environment for Linux(R) on Intel(R)
architecture, Java(TM) Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Program Name: IBM(R) 64-bit Runtime Environment for Linux(R) on AMD64 / EM64T
architecture, Java(TM) Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Program Name: IBM(R) 32-bit Runtime Environment for Linux(R) on System i(TM) and
System p(TM), Java(TM) Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Program Name: IBM(R) 64-bit Runtime Environment for Linux(R) on System i(TM) and
System p(TM), Java(TM) Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Program Name: IBM(R) 31-bit Runtime Environment for Linux(R) on System z(TM),
Java(TM) Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Program Name: IBM(R) 64-bit Runtime Environment for Linux(R) on System z(TM),
Java(TM) Technology Edition, Version 6
Program Number: 6207-001
Authorization for Use on Home/Portable Computer:  The Program may be stored on
the primary machine and another machine, provided that the Program is not in
active use on both machines at the same time.

Limited Use Rights for Other IBM Programs

If You acquired this Program as part of another IBM Program ("Principal
Program") that lists this Program under "Other IBM Programs", You received this
Program only in support of the Principal Program, and Your rights to use this
Program will be limited by the license of the Principal Program. Please contact
Your IBM Sales Representative if You wish to acquire a separate license to this
Program not limited by the Principal Program's license terms.

Excluded Components

The provisions of this paragraph do not apply to the extent they are held to be
invalid or unenforceable under the law that governs this license. The components
listed below are "Excluded Components." Notwithstanding any of the terms in the
Agreement or any other agreement You may have with IBM:
(a) the third party suppliers of such Excluded Components ("Suppliers") provide
the components WITHOUT WARRANTIES OF ANY KIND and, such Suppliers DISCLAIM ANY
AND ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS INCLUDING, BUT NOT LIMITED
TO, THE WARRANTY OF TITLE, NON-INFRINGEMENT OR INTERFERENCE AND THE IMPLIED
WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE, WITH RESPECT TO THE EXCLUDED COMPONENTS;
(b) in no event are the Suppliers liable for any direct, indirect, incidental,
special, exemplary, punitive or consequential damages, including but not limited
to lost data, lost savings, and lost profits, with respect to the Excluded
Components; and,
(c) IBM and the Suppliers are not liable to You, and will not defend, indemnify,
or hold You harmless for any claims arising from or related to the Excluded
Components.

Notwithstanding these exclusions, in Germany and Austria, IBM's warranty and
liability for the Excluded Components is governed only by the respective terms
applicable for Germany and Austria in the IBM license agreements.

Notices and important information that IBM is required to provide to You with
respect to the Excluded Components, including instructions for obtaining source
code for certain Excluded Components, may be found in the NOTICES file(s) that
accompanies the Program.

Your use of the Excluded Components is governed by the terms of the Agreement
and not by any terms that may be contained in the NOTICES file(s). The terms
contained in the Agreement are offered by IBM and not by any other party. Future
Program updates or fixpacks may contain additional Excluded Components. Such
additional Excluded Components, and related notices and information, if any,
will be listed in another NOTICES file that accompanies the Program update or
fixpack.

The following are Excluded Components:
Apache Harmony :-
* Annotation    (Subversion: r573440 2007-09-11 (Arena R4745))
* Beans     (Subversion: r573440 2007-09-11 (Arena R4745))
* jndi     (Subversion: r573440 2007-09-11 (Arena R4745))
* lang-management   (Subversion: r573440 2007-09-11 (Arena R4745))
* logging    (Subversion: r573440 2007-09-11 (Arena R4745))
* security     (Subversion: r573440 2007-09-11 (Arena R4745))
* sql     (Subversion: r573440 2007-09-11 (Arena R4745))
* java.util (part of luni)  (Subversion: r573440 2007-09-11 (Arena R4745))

Specified Operating Environment

The Program's specifications and specified operating environment information may
be found in documentation accompanying the Program, if available, such as a
read-me file, or other information published by IBM, such as an announcement
letter.

Program-unique Terms

1. GENERAL

To the extent of any conflict between the terms of the International License
Agreement for Non-Warranted Programs and this License Information, the terms of
this License Information shall prevail.

WHERE THE PROGRAM HAS BEEN PROVIDED TO YOU SEPARATELY BY IBM, IT IS PROVIDED AT
NO CHARGE.

The Program consists of binary code that executes on the operating system(s)
specified in Readme files that accompany the Program.

3. TRADEMARKS AND COPYRIGHT: YOUR RESPONSIBILITIES

a) You shall not modify, delete, suppress, or obscure any copyright, trademark
or other legal notice (whether from IBM or any third party) which may be
displayed by or included within the Program.

b) Java and all Java-based Trademarks are trademarks of Sun Microsystems, Inc.
in the United States, other countries, or both.

c) You recognize IBM's and Sun Microsystems, Inc.'s ownership and title to their
respective trademarks and of any goodwill attaching thereto, including goodwill
resulting from use. You will not use or attempt to register any trademark which
is confusingly similar to such IBM or Sun trademarks.

3. PROOF OF ENTITLEMENT

This License Agreement constitutes your Proof of Entitlement.



D/N:  L-RVEK-75GKYF
P/N:  L-RVEK-75GKYF 
