Sybase Open Watcom Public License version 1.0

USE OF THE SYBASE OPEN WATCOM SOFTWARE DESCRIBED BELOW ("SOFTWARE") IS SUBJECT
TO THE TERMS AND CONDITIONS SET FORTH IN THE SYBASE OPEN WATCOM PUBLIC LICENSE
SET FORTH BELOW ("LICENSE"). YOU MAY NOT USE THE SOFTWARE IN ANY MANNER UNLESS
YOU ACCEPT THE TERMS AND CONDITIONS OF THE LICENSE. YOU INDICATE YOUR
ACCEPTANCE BY IN ANY MANNER USING (INCLUDING WITHOUT LIMITATION BY REPRODUCING,
MODIFYING OR DISTRIBUTING) THE SOFTWARE. IF YOU DO NOT ACCEPT ALL OF THE TERMS
AND CONDITIONS OF THE LICENSE, DO NOT USE THE SOFTWARE IN ANY MANNER.

Sybase Open Watcom Public License version 1.0

1. General; Definitions. This License applies only to the following software
programs: the open source versions of Sybase's Watcom C/C++ and Fortran
compiler products ("Software"), which are modified versions of, with
significant changes from, the last versions made commercially available by
Sybase. As used in this License:
1.1 "Applicable Patent Rights" mean: (a) in the case where Sybase is the
grantor of rights, (i) claims of patents that are now or hereafter acquired,
owned by or assigned to Sybase and (ii) that cover subject matter contained in
the Original Code, but only to the extent necessary to use, reproduce and/or
distribute the Original Code without infringement; and (b) in the case where
You are the grantor of rights, (i) claims of patents that are now or hereafter
acquired, owned by or assigned to You and (ii) that cover subject matter in
Your Modifications, taken alone or in combination with Original Code.
1.2 "Contributor" means any person or entity that creates or contributes to the
creation of Modifications.
1.3 "Covered Code" means the Original Code, Modifications, the combination of
Original Code and any Modifications, and/or any respective portions thereof.
1.4 "Deploy" means to use, sublicense or distribute Covered Code other than for
Your internal research and development (R&D) and/or Personal Use, and includes
without limitation, any and all internal use or distribution of Covered Code
within Your business or organization except for R&D use and/or Personal Use, as
well as direct or indirect sublicensing or distribution of Covered Code by You
to any third party in any form or manner.
1.5 "Larger Work" means a work which combines Covered Code or portions thereof
with code not governed by the terms of this License.
1.6 "Modifications" mean any addition to, deletion from, and/or change to, the
substance and/or structure of the Original Code, any previous Modifications,
the combination of Original Code and any previous Modifications, and/or any
respective portions thereof. When code is released as a series of files, a
Modification is: (a) any addition to or deletion from the contents of a file
containing Covered Code; and/or (b) any new file or other representation of
computer program statements that contains any part of Covered Code.
1.7 "Original Code" means (a) the Source Code of a program or other work as
originally made available by Sybase under this License, including the Source
Code of any updates or upgrades to such programs or works made available by
Sybase under this License, and that has been expressly identified by Sybase as
such in the header file(s) of such work; and (b) the object code compiled from
such Source Code and originally made available by Sybase under this License.
1.8 "Personal Use" means use of Covered Code by an individual solely for his or
her personal, private and non-commercial purposes. An individual's use of
Covered Code in his or her capacity as an officer, employee, member,
independent contractor or agent of a corporation, business or organization
(commercial or non-commercial) does not qualify as Personal Use.
1.9 "Source Code" means the human readable form of a program or other work that
is suitable for making modifications to it, including all modules it contains,
plus any associated interface definition files, scripts used to control
compilation and installation of an executable (object code).
1.10 "You" or "Your" means an individual or a legal entity exercising rights
under this License. For legal entities, "You" or "Your" includes any entity
which controls, is controlled by, or is under common control with, You, where
"control" means (a) the power, direct or indirect, to cause the direction or
management of such entity, whether by contract or otherwise, or (b) ownership
of fifty percent (50%) or more of the outstanding shares or beneficial
ownership of such entity.
2. Permitted Uses; Conditions & Restrictions.Subject to the terms and
conditions of this License, Sybase hereby grants You, effective on the date You
accept this License and download the Original Code, a world-wide, royalty-free,
non-exclusive license, to the extent of Sybase's Applicable Patent Rights and
copyrights covering the Original Code, to do the following:
2.1 You may use, reproduce, display, perform, modify and distribute Original
Code, with or without Modifications, solely for Your internal research and
development and/or Personal Use, provided that in each instance:
(a) You must retain and reproduce in all copies of Original Code the copyright
and other proprietary notices and disclaimers of Sybase as they appear in the
Original Code, and keep intact all notices in the Original Code that refer to
this License; and
(b) You must retain and reproduce a copy of this License with every copy of
Source Code of Covered Code and documentation You distribute, and You may not
offer or impose any terms on such Source Code that alter or restrict this
License or the recipients' rights hereunder, except as permitted under Section
6.
(c) Whenever reasonably feasible you should include the copy of this License in
a click-wrap format, which requires affirmative acceptance by clicking on an "I
accept" button or similar mechanism. If a click-wrap format is not included,
you must include a statement that any use (including without limitation
reproduction, modification or distribution) of the Software, and any other
affirmative act that you define, constitutes acceptance of the License, and
instructing the user not to use the Covered Code in any manner if the user does
not accept all of the terms and conditions of the License.
2.2 You may use, reproduce, display, perform, modify and Deploy Covered Code,
provided that in each instance:
(a) You must satisfy all the conditions of Section 2.1 with respect to the
Source Code of the Covered Code;
(b) You must duplicate, to the extent it does not already exist, the notice in
Exhibit A in each file of the Source Code of all Your Modifications, and cause
the modified files to carry prominent notices stating that You changed the
files and the date of any change;
(c) You must make Source Code of all Your Deployed Modifications publicly
available under the terms of this License, including the license grants set
forth in Section 3 below, for as long as you Deploy the Covered Code or twelve
(12) months from the date of initial Deployment, whichever is longer. You
should preferably distribute the Source Code of Your Deployed Modifications
electronically (e.g. download from a web site);
(d) if You Deploy Covered Code in object code, executable form only, You must
include a prominent notice, in the code itself as well as in related
documentation, stating that Source Code of the Covered Code is available under
the terms of this License with information on how and where to obtain such
Source Code; and
(e) the object code form of the Covered Code may be distributed under Your own
license agreement, provided that such license agreement contains terms no less
protective of Sybase and each Contributor than the terms of this License, and
stating that any provisions which differ from this License are offered by You
alone and not by any other party.
2.3 You expressly acknowledge and agree that although Sybase and each
Contributor grants the licenses to their respective portions of the Covered
Code set forth herein, no assurances are provided by Sybase or any Contributor
that the Covered Code does not infringe the patent or other intellectual
property rights of any other entity. Sybase and each Contributor disclaim any
liability to You for claims brought by any other entity based on infringement
of intellectual property rights or otherwise. As a condition to exercising the
rights and licenses granted hereunder, You hereby assume sole responsibility to
secure any other intellectual property rights needed, if any. For example, if a
third party patent license is required to allow You to distribute the Covered
Code, it is Your responsibility to acquire that license before distributing the
Covered Code.
3. Your Grants. In consideration of, and as a condition to, the licenses
granted to You under this License, You hereby grant to Sybase and all third
parties a non-exclusive, royalty-free license, under Your Applicable Patent
Rights and other intellectual property rights (other than patent) owned or
controlled by You, to use, reproduce, display, perform, modify, distribute and
Deploy Your Modifications of the same scope and extent as Sybase's licenses
under Sections 2.1 and 2.2.
4. Larger Works. You may create a Larger Work by combining Covered Code with
other code not governed by the terms of this License and distribute the Larger
Work as a single product. In each such instance, You must make sure the
requirements of this License are fulfilled for the Covered Code or any portion
thereof.
5. Limitations on Patent License. Except as expressly stated in Section 2, no
other patent rights, express or implied, are granted by Sybase herein.
Modifications and/or Larger Works may require additional patent licenses from
Sybase which Sybase may grant in its sole discretion.
6. Additional Terms. You may choose to offer, and to charge a fee for,
warranty, support, indemnity or liability obligations and/or other rights
consistent with this License ("Additional Terms") to one or more recipients of
Covered Code. However, You may do so only on Your own behalf and as Your sole
responsibility, and not on behalf of Sybase or any Contributor. You must obtain
the recipient's agreement that any such Additional Terms are offered by You
alone, and You hereby agree to indemnify, defend and hold Sybase and every
Contributor harmless for any liability incurred by or claims asserted against
Sybase or such Contributor by reason of any such Additional Terms.
7. Versions of the License. Sybase may publish revised and/or new versions of
this License from time to time. Each version will be given a distinguishing
version number. Once Original Code has been published under a particular
version of this License, You may continue to use it under the terms of that
version. You may also choose to use such Original Code under the terms of any
subsequent version of this License published by Sybase. No one other than
Sybase has the right to modify the terms applicable to Covered Code created
under this License.
8. NO WARRANTY OR SUPPORT. The Covered Code may contain in whole or in part
pre-release, untested, or not fully tested works. The Covered Code may contain
errors that could cause failures or loss of data, and may be incomplete or
contain inaccuracies. You expressly acknowledge and agree that use of the
Covered Code, or any portion thereof, is at Your sole and entire risk. THE
COVERED CODE IS PROVIDED "AS IS" AND WITHOUT WARRANTY, UPGRADES OR SUPPORT OF
ANY KIND AND SYBASE AND SYBASE'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS
"SYBASE" FOR THE PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY
DISCLAIM ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF
SATISFACTORY QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF
QUIET ENJOYMENT, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. SYBASE AND EACH
CONTRIBUTOR DOES NOT WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE
COVERED CODE, THAT THE FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR
REQUIREMENTS, THAT THE OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR
ERROR-FREE, OR THAT DEFECTS IN THE COVERED CODE WILL BE CORRECTED. NO ORAL OR
WRITTEN INFORMATION OR ADVICE GIVEN BY SYBASE, A SYBASE AUTHORIZED
REPRESENTATIVE OR ANY CONTRIBUTOR SHALL CREATE A WARRANTY. You acknowledge that
the Covered Code is not intended for use in the operation of nuclear
facilities, aircraft navigation, communication systems, or air traffic control
machines in which case the failure of the Covered Code could lead to death,
personal injury, or severe physical or environmental damage.
9. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT
SHALL SYBASE OR ANY CONTRIBUTOR BE LIABLE FOR ANY DIRECT, INCIDENTAL, SPECIAL,
INDIRECT, CONSEQUENTIAL OR OTHER DAMAGES OF ANY KIND ARISING OUT OF OR RELATING
TO THIS LICENSE OR YOUR USE OR INABILITY TO USE THE COVERED CODE, OR ANY
PORTION THEREOF, WHETHER UNDER A THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING
NEGLIGENCE), PRODUCTS LIABILITY OR OTHERWISE, EVEN IF SYBASE OR SUCH
CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, AND
NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME
JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY OF INCIDENTAL OR
CONSEQUENTIAL OR OTHER DAMAGES OF ANY KIND, SO THIS LIMITATION MAY NOT APPLY TO
YOU. In no event shall Sybase's or any Contributor's total liability to You for
all damages (other than as may be required by applicable law) under this
License exceed the amount of five hundred dollars ($500.00).
10. Trademarks. This License does not grant any rights to use the trademarks or
trade names "Sybase" or any other trademarks or trade names belonging to Sybase
(collectively "Sybase Marks") or to any trademark or trade name belonging to
any Contributor("Contributor Marks"). No Sybase Marks or Contributor Marks may
be used to endorse or promote products derived from the Original Code or
Covered Code other than with the prior written consent of Sybase or the
Contributor, as applicable.
11. Ownership. Subject to the licenses granted under this License, each
Contributor retains all rights, title and interest in and to any Modifications
made by such Contributor. Sybase retains all rights, title and interest in and
to the Original Code and any Modifications made by or on behalf of Sybase
("Sybase Modifications"), and such Sybase Modifications will not be
automatically subject to this License. Sybase may, at its sole discretion,
choose to license such Sybase Modifications under this License, or on different
terms from those contained in this License or may choose not to license them at
all.
12. Termination.
12.1 Termination. This License and the rights granted hereunder will terminate:
(a) automatically without notice if You fail to comply with any term(s) of this
License and fail to cure such breach within 30 days of becoming aware of such
breach;
(b) immediately in the event of the circumstances described in Section 13.5(b);
or
(c) automatically without notice if You, at any time during the term of this
License, commence an action for patent infringement (including as a cross claim
or counterclaim) against Sybase or any Contributor.
12.2 Effect of Termination. Upon termination, You agree to immediately stop any
further use, reproduction, modification, sublicensing and distribution of the
Covered Code and to destroy all copies of the Covered Code that are in your
possession or control. All sublicenses to the Covered Code that have been
properly granted prior to termination shall survive any termination of this
License. Provisions which, by their nature, should remain in effect beyond the
termination of this License shall survive, including but not limited to
Sections 3, 5, 8, 9, 10, 11, 12.2 and 13. No party will be liable to any other
for compensation, indemnity or damages of any sort solely as a result of
terminating this License in accordance with its terms, and termination of this
License will be without prejudice to any other right or remedy of any party.
13. Miscellaneous.
13.1 Government End Users. The Covered Code is a "commercial item" as defined
in FAR 2.101. Government software and technical data rights in the Covered Code
include only those rights customarily provided to the public as defined in this
License. This customary commercial license in technical data and software is
provided in accordance with FAR 12.211 (Technical Data) and 12.212 (Computer
Software) and, for Department of Defense purchases, DFAR 252.227-7015
(Technical Data -- Commercial Items) and 227.7202-3 (Rights in Commercial
Computer Software or Computer Software Documentation). Accordingly, all U.S.
Government End Users acquire Covered Code with only those rights set forth
herein.
13.2 Relationship of Parties. This License will not be construed as creating an
agency, partnership, joint venture or any other form of legal association
between or among you, Sybase or any Contributor, and You will not represent to
the contrary, whether expressly, by implication, appearance or otherwise.
13.3 Independent Development. Nothing in this License will impair Sybase's or
any Contributor's right to acquire, license, develop, have others develop for
it, market and/or distribute technology or products that perform the same or
similar functions as, or otherwise compete with, Modifications, Larger Works,
technology or products that You may develop, produce, market or distribute.
13.4 Waiver; Construction. Failure by Sybase or any Contributor to enforce any
provision of this License will not be deemed a waiver of future enforcement of
that or any other provision. Any law or regulation which provides that the
language of a contract shall be construed against the drafter will not apply to
this License.
13.5 Severability. (a) If for any reason a court of competent jurisdiction
finds any provision of this License, or portion thereof, to be unenforceable,
that provision of the License will be enforced to the maximum extent
permissible so as to effect the economic benefits and intent of the parties,
and the remainder of this License will continue in full force and effect. (b)
Notwithstanding the foregoing, if applicable law prohibits or restricts You
from fully and/or specifically complying with Sections 2 and/or 3 or prevents
the enforceability of either of those Sections, this License will immediately
terminate and You must immediately discontinue any use of the Covered Code and
destroy all copies of it that are in your possession or control.
13.6 Dispute Resolution. Any litigation or other dispute resolution between You
and Sybase relating to this License shall take place in the Northern District
of California, and You and Sybase hereby consent to the personal jurisdiction
of, and venue in, the state and federal courts within that District with
respect to this License. The application of the United Nations Convention on
Contracts for the International Sale of Goods is expressly excluded.
13.7 Entire Agreement; Governing Law. This License constitutes the entire
agreement between the parties with respect to the subject matter hereof. This
License shall be governed by the laws of the United States and the State of
California, except that body of California law concerning conflicts of law.
Where You are located in the province of Quebec, Canada, the following clause
applies: The parties hereby confirm that they have requested that this License
and all related documents be drafted in English. Les parties ont exigè que le
prèsent contrat et tous les documents connexes soient rèdiès en anglais.

EXHIBIT A.

"Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
This file contains Original Code and/or Modifications of Original Code as
defined in and that are subject to the Sybase Open Watcom Public License
version 1.0 (the 'License'). You may not use this file except in compliance
with the License. BY USING THIS FILE YOU AGREE TO ALL TERMS AND CONDITIONS OF
THE LICENSE. A copy of the License is provided with the Original Code and
Modifications, and is also available at www.sybase.com/developer/opensource.

The Original Code and all software distributed under the License are
distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM ALL SUCH
WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please
see the License for the specific language governing rights and limitations
under the License."