 SUN COMMUNITY SOURCE LICENSE Version 2.3 (Rev.  Date Feb.
 23, 1999)
 
 RECITALS
 
 Original Contributor has developed Specifications and Source
 Code implementations of certain Technology; and
 
 Original Contributor desires to license the Technology to a
 large community to facilitate research, innovation and
 product development while maintaining compatibility of such
 products with the Technology as delivered by Original
 Contributor; and
 
 Original Contributor desires to license certain Sun
 Trademarks for the purpose of branding products that are
 compatible with the relevant Technology delivered by
 Original Contributor; and
 
 You desire to license the Technology and possibly certain
 Sun Trademarks from Original Contributor on the terms and
 conditions specified in this License.
 
 In consideration for the mutual covenants contained herein,
 You and Original Contributor agree as follows:
 
 AGREEMENT
 
 1.  Introduction.  The Sun Community Source License and
 effective attachments ("License") may include five distinct
 licenses:  Research Use, TCK, Internal Deployment Use,
 Commercial Use and Trademark License.  The Research Use
 license is effective when You click and accept this License.
 The TCK and Internal Deployment Use licenses are effective
 when You click and accept this License, unless otherwise
 specified in the TCK and Internal Deployment Use
 attachments.  The Commercial Use and Trademark licenses must
 be signed by You and Original Contributor in order to become
 effective.  Once effective, these licenses and the
 associated requirements and responsibilities are cumulative.
 Capitalized terms used in this License are defined in the
 Glossary.
 
 2.  License Grants.
 
 2.1 Original Contributor Grant.  Subject to Your compliance
 with Sections 3, 8.10 and Attachment A of this License,
 Original Contributor grants to You a worldwide,
 royalty-free, non-exclusive license, to the extent of
 Original Contributor's Intellectual Property Rights covering
 the Original Code, Upgraded Code and Specifications, to do
 the following:
 
 a) Research Use License:
 
 (i) use, reproduce and modify the Original Code, Upgraded
 Code and Specifications to create Modifications and
 Reformatted Specifications for Research Use by You,
 
 (ii) publish and display Original Code, Upgraded Code and
 Specifications with, or as part of Modifications, as
 permitted under Section 3.1 b) below,
 
 (iii) reproduce and distribute copies of Original Code and
 Upgraded Code to Licensees and students for Research Use by
 You,
 
 (iv) compile, reproduce and distribute Original Code and
 Upgraded Code in Executable form, and Reformatted
 Specifications to anyone for Research Use by You.
 
 b) Other than the licenses expressly granted in this
 License, Original Contributor retains all right, title, and
 interest in Original Code and Upgraded Code and
 Specifications.
 
 2.2 Your Grants.
 
 a) To Other Licensees.  You hereby grant to each Licensee a
 license to Your Error Corrections and Shared Modifications,
 of the same scope and extent as Original Contributor's
 licenses under Section 2.1 a) above relative to Research
 Use, Attachment C relative to Internal Deployment Use, and
 Attachment D relative to Commercial Use.
 
 b) To Original Contributor.  You hereby grant to Original
 Contributor a worldwide, royalty-free, non-exclusive,
 perpetual and irrevocable license, to the extent of Your
 Intellectual Property Rights covering Your Error
 Corrections, Shared Modifications and Reformatted
 Specifications, to use, reproduce, modify, display and
 distribute Your Error Corrections, Shared Modifications and
 Reformatted Specifications, in any form, including the right
 to sublicense such rights through multiple tiers of
 distribution.
 
 c) Other than the licenses expressly granted in Sections 2.2
 a) and b) above, and the restriction set forth in Section
 3.1 d)(iv) below, You retain all right, title, and interest
 in Your Error Corrections, Shared Modifications and
 Reformatted Specifications.
 
 2.3 Contributor Modifications.  You may use, reproduce,
 modify, display and distribute Contributor Error
 Corrections, Shared Modifications and Reformatted
 Specifications, obtained by You under this License, to the
 same scope and extent as with Original Code, Upgraded Code
 and Specifications.
 
 2.4 Subcontracting.  You may deliver the Source Code of
 Covered Code to other Licensees having at least a Research
 Use license, for the sole purpose of furnishing development
 services to You in connection with Your rights granted in
 this License.  All such Licensees must execute appropriate
 documents with respect to such work consistent with the
 terms of this License, and acknowledging their
 work-made-for-hire status or assigning exclusive right to
 the work product and associated Intellectual Property Rights
 to You.
 
 3.  Requirements and Responsibilities.  3.1 Research Use
 License.  As a condition of exercising the rights granted
 under Section 2.1 a) above, You agree to comply with the
 following:
 
 a) Your Contribution to the Community.  All Error
 Corrections and Shared Modifications which You create or
 contribute to are automatically subject to the licenses
 granted under Section 2.2 above.  You are encouraged to
 license all of Your other Modifications under Section 2.2 as
 Shared Modifications, but are not required to do so.  You
 agree to notify Original Contributor of any errors in the
 Specification.
 
 b) Source Code Availability.  You agree to provide all Your
 Error Corrections to Original Contributor as soon as
 reasonably practicable and, in any event, prior to Internal
 Deployment Use or Commercial Use, if applicable.  Original
 Contributor may, at its discretion, post Source Code for
 Your Error Corrections and Shared Modifications on the
 Community Webserver.  You may also post Error Corrections
 and Shared Modifications on a web-server of Your choice;
 provided, that You must take reasonable precautions to
 ensure that only Licensees have access to such Error
 Corrections and Shared Modifications.  Such precautions
 shall include, without limitation, a password protection
 scheme limited to Licensees and a click-on, download
 certification of Licensee status required of those
 attempting to download from the server.  An example of an
 acceptable certification is attached as Attachment A-2.
 
 c) Notices.  All Error Corrections and Shared Modifications
 You create or contribute to must include a file documenting
 the additions and changes You made and the date of such
 additions and changes.  You must also include the notice set
 forth in Attachment A-1 in the file header.  If it is not
 possible to put the notice in a particular Source Code file
 due to its structure, then You must include the notice in a
 location (such as a relevant directory file), where a
 recipient would be most likely to look for such a notice.
 
 d) Redistribution.
 
 (i) Source.  Covered Code may be distributed in Source Code
 form only to another Licensee (except for students as
 provided below).  You may not offer or impose any terms on
 any Covered Code that alter the rights, requirements, or
 responsibilities of such Licensee.  You may distribute
 Covered Code to students for use in connection with their
 course work and research projects undertaken at accredited
 educational institutions.  Such students need not be
 Licensees, but must be given a copy of the notice set forth
 in Attachment A-3 and such notice must also be included in a
 file header or prominent location in the Source Code made
 available to such students.
 
 (ii) Executable.  You may distribute Executable version(s)
 of Covered Code to Licensees and other third parties only
 for the purpose of evaluation and comment in connection with
 Research Use by You and under a license of Your choice, but
 which limits use of such Executable version(s) of Covered
 Code only to that purpose.
 
 (iii) Modified Class,Interface and Package Naming.  In
 connection with Research Use by You only, You may use
 Original Contributor's class, interface and package names
 only to accurately reference or invoke the Source Code files
 You modify.  Original Contributor grants to You a litmited
 license to the extent necessary for such purposes.
 
 (iv) You expressly agree that any distribution, in whole or
 in part, of Modifications developed by You shall only be
 done pursuant to the term and conditions of this License.
 
 e) Extensions.
 
 (i) Covered Code.  You may not include any Source Code of
 Community Code in any Extensions;
 
 (ii) Publication.  No later than the date on which You first
 distribute such Extension for Commercial Use, You must
 publish to the industry, on a non-confidential basis and
 free of all copyright restrictions with respect to
 reproduction and use, an accurate and current specification
 for any Extension.  In addition, You must make available an
 appropriate test suite, pursuant to the same rights as the
 specification, sufficiently detailed to allow any third
 party reasonably skilled in the technology to produce
 implementations of the Extension compatible with the
 specification.  Such test suites must be made available as
 soon as reasonably practicable but, in no event, later than
 ninety (90) days after Your first Commercial Use of the
 Extension.  You must use reasonable efforts to promptly
 clarify and correct the specification and the test suite
 upon written request by Original Contributor.
 
 (iii) Open.  You agree to refrain from enforcing any
 Intellectual Property Rights You may have covering any
 interface(s) of Your Extension, which would prevent the
 implementation of such interface(s) by Original Contributor
 or any Licensee.  This obligation does not prevent You from
 enforcing any Intellectual Property Right You have that
 would otherwise be infringed by an implementation of Your
 Extension.
 
 (iv) Class, Interface and Package Naming.  You may not add
 any packages, or any public or protected classes or
 interfaces with names that originate or might appear to
 originate from Original Contributor including, without
 limitation, package or class names which begin with "sun",
 "java", "javax", "jini", "net.jini", "com.sun" or their
 equivalents in any subsequent class, interface and/ or
 package naming convention adopted by Original Contributor.
 It is specifically suggested that You name any new packages
 using the "Unique Package Naming Convention" as described in
 "The Java Language Specification" by James Gosling, Bill
 Joy, and Guy Steele, ISBN 0-201-63451-1, August 1996.
 Section 7.7 "Unique Package Names", on page 125 of this
 specification which states, in part:
 
 "You form a unique package name by first having (or
 belonging to an organization that has) an Internet domain
 name, such as "sun.com".  You then reverse the name,
 component by component, to obtain, in this example,
 "Com.sun", and use this as a prefix for Your package names,
 using a convention developed within Your organization to
 further administer package names."
 
 3.2 Additional Requirements and Responsibilities.  Any
 additional requirements and responsibilities relating to the
 Technology are listed in Attachment F (Additional
 Requirements and Responsibilities), if applicable, and are
 hereby incorporated into this Section 3.
 
 4.  Versions of the License.
 
 4.1 License Versions.  Original Contributor may publish
 revised versions of the License from time to time.  Each
 version will be given a distinguishing version number.
 
 4.2 Effect.  Once a particular version of Covered Code has
 been provided under a version of the License, You may always
 continue to use such Covered Code under the terms of that
 version of the License.  You may also choose to use such
 Covered Code under the terms of any subsequent version of
 the License.  No one other than Original Contributor has the
 right to promulgate License versions.
 
 5.  Disclaimer of Warranty.
 
 5.1 COVERED CODE IS PROVIDED UNDER THIS LICENSE "AS IS,"
 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
 INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED
 CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
 PURPOSE OR NON-INFRINGING.  YOU AGREE TO BEAR THE ENTIRE
 RISK IN CONNECTION WITH YOUR USE AND DISTRIBUTION OF COVERED
 CODE UNDER THIS LICENSE.  THIS DISCLAIMER OF WARRANTY
 CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.  NO USE OF
 ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT SUBJECT TO
 THIS DISCLAIMER.
 
 5.2 You acknowledge that Original Code, Upgraded Code and
 Specifications are not designed or intended for use in (i)
 on-line control of aircraft, air traffic, aircraft
 navigation or aircraft communications; or (ii) in the
 design, construction, operation or maintenance of any
 nuclear facility.  Original Contributor disclaims any
 express or implied warranty of fitness for such uses.
 
 6.  Termination.
 
 6.1 By You.  You may terminate this Research Use license at
 anytime by providing written notice to Original Contributor.
 
 6.2 By Original Contributor.  This License and the rights
 granted hereunder will terminate:
 
 (i) automatically if You fail to comply with the terms of
 this License and fail to cure such breach within 30 days of
 receipt of written notice of the breach;
 
 (ii) immediately in the event of circumstances specified in
 Sections 7.1 and 8.4; or
 
 (iii) at Original Contributor's discretion upon any action
 initiated in the first instance by You alleging that use or
 distribution by Original Contributor or any Licensee, of
 Original Code, Upgraded Code, Error Corrections or Shared
 Modifications contributed by You, or Specifications,
 infringe a patent owned or controlled by You.
 
 6.3 Effective of Termination.  Upon termination, You agree
 to discontinue use and return or destroy all copies of
 Covered Code in your possession.  All sublicenses to the
 Covered Code which you have properly granted 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, without limitation,
 Sections 2.2, 3, 5, 7 and 8.
 
 6.4 Each party waives and releases the other from any claim
 to compensation or indemnity for permitted or lawful
 termination of the business relationship established by this
 License.
 
 7.  Liability.
 
 7.1 Infringement.  Should any of the Original Code, Upgraded
 Code, TCK or Specifications ("Materials") become the subject
 of a claim of infringement, Original Contributor may, at its
 sole option, (i) attempt to procure the rights necessary for
 You to continue using the Materials, (ii) modify the
 Materials so that they are no longer infringing, or (iii)
 terminate Your right to use the Materials, immediately upon
 written notice, and refund to You the amount, if any, having
 then actually been paid by You to Original Contributor for
 the Original Code, Upgraded Code and TCK, depreciated on a
 straight line, five year basis.
 
 7.2 LIMITATION OF LIABILITY.  TO THE FULL EXTENT ALLOWED BY
 APPLICABLE LAW, ORIGINAL CONTRIBUTOR's LIABILITY TO YOU FOR
 CLAIMS RELATING TO THIS LICENSE, WHETHER FOR BREACH OR IN
 TORT, SHALL BE LIMITED TO ONE HUNDRED PERCENT (100%) OF THE
 AMOUNT HAVING THEN ACTUALLY BEEN PAID BY YOU TO ORIGINAL
 CONTRIBUTOR FOR ALL COPIES LICENSED HEREUNDER OF THE
 PARTICULAR ITEMS GIVING RISE TO SUCH CLAIM, IF ANY.  IN NO
 EVENT WILL YOU (RELATIVE TO YOUR SHARED MODIFICATIONS OR
 ERROR CORRECTIONS) OR SUN BE LIABLE FOR ANY INDIRECT,
 PUNITIVE, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES IN
 CONNECTION WITH OR ARISING OUT OF THIS LICENSE (INCLUDING,
 WITHOUT LIMITATION, LOSS OF PROFITS, USE, DATA, OR OTHER
 ECONOMIC ADVANTAGE), HOWEVER IT ARISES AND ON ANY THEORY OF
 LIABILITY, WHETHER IN AN ACTION FOR CONTRACT, STRICT
 LIABILITY OR TORT (INCLUDING NEGLIGENCE) OR OTHERWISE,
 WHETHER OR NOT YOU OR ORIGINAL CONTRIBUTOR HAS BEEN ADVISED
 OF THE POSSIBILITY OF SUCH DAMAGE AND NOTWITHSTANDING THE
 FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY.
 
 8.  Miscellaneous.
 
 8.1 Trademark.  You agree to comply with the then current
 Sun Trademark & Logo Usage Requirements accessible through
 the SCSL Webpage.  Except as expressly provided in the
 License, You are granted no right, title or license to, or
 interest in, any Sun Trademarks.  You agree not to (i)
 challenge Original Contributor's ownership or use of Sun
 Trademarks; (ii) attempt to register any Sun Trademarks, or
 any mark or logo substantially similar thereto; or (iii)
 incorporate any Sun Trademarks into your own trademarks,
 product names, service marks, company names, or domain
 names.
 
 8.2 Integration.  This License represents the complete
 agreement concerning the subject matter hereof.
 
 8.3 Assignment.  Original Contributor may assign this
 License, and its rights and obligations hereunder, in its
 sole discretion.  You may assign the Research Use portions
 of this License to a third party upon prior written notice
 to Original Contributor (which may be provided via the
 Community Web-Server).  You may not assign the Commercial
 Use license or TCK license, including by way of merger
 (regardless of whether You are the surviving entity) or
 acquisition, without Original Contributor's prior written
 consent.
 
 8.4 Severability.  If any provision of this License is held
 to be unenforceable, such provision shall be reformed only
 to the extent necessary to make it enforceable.
 Notwithstanding the foregoing, if You are prohibited by law
 from fully and specifically complying with Sections 2.2 or
 3, this License will immediately terminate and You must
 immediately discontinue any use of Covered Code.
 
 8.5 Governing Law.  This License shall be governed by the
 laws of the United States and the State of California, as
 applied to contracts entered into and to be performed in
 California between California residents.  The application of
 the United Nations Convention on Contracts for the
 International Sale of Goods is expressly excluded.
 
 8.6 Dispute Resolution.
 
 a) Any dispute arising out of or relating to this License
 shall be finally settled by arbitration as set out herein,
 except that either party may bring any action, in a court of
 competent jurisdiction (which jurisdiction shall be
 exclusive), with respect to any dispute relating to such
 party's Intellectual Property Rights or with respect to Your
 compliance with the TCK license.  Arbitration shall be
 administered:  (i) by the American Arbitration Association
 (AAA), (ii) in accordance with the rules of the United
 Nations Commission on International Trade Law (UNCITRAL)
 (the "Rules") in effect at the time of arbitration as
 modified herein; and (iii) the arbitrator will apply the
 substantive laws of California and United States.  Judgement
 upon the award rendered by the arbitrator may be entered in
 any court having jurisdiction to enforce such award.
 
 b) All arbitration proceedings shall be conducted in English
  by a single arbitrator selected in accordance with the
  Rules, who must be fluent in English and be either a
  retired judge or practicing attorney having at least ten
  (10) years litigation experience and be reasonably familiar
  with the technology matters relative to the dispute.
  Unless otherwise agreed, arbitration venue shall be in
  London, Tokyo, or San Francisco, whichever is closest to
  defendant's principal business office.  The arbitrator may
  award monetary damages only and nothing shall preclude
  either party from seeking provisional or emergency relief
  from a court of competent jurisdiction.  The arbitrator
  shall have no authority to award damages in excess of those
  permitted in this License and any such award in excess is
  void.  All awards will be payable in U.S.  dollars and may
  include, for the prevailing party (i) pre-judgment award
  interest, (ii) reasonable attorneys' fees incurred in
  connection with the arbitration, and (iii) reasonable costs
  and expenses incurred in enforcing the award.  The
  arbitrator will order each party to produce identified
  documents and respond to no more than twenty-five single
  question interrogatories.
 
 8.7 Construction.  Any law or regulation which provides that
 the language of a contract shall be construed against the
 drafter shall not apply to this License.
 
 8.8 U.S.  Government End Users.  The Covered Code is a
 "commercial item," as that term is defined in 48 C.F.R.
 2.101 (Oct.  1995), consisting of "commercial computer
 software" and "commercial computer software documentation,"
 as such terms are used in 48 C.F.R.  12.212 (Sept.  1995).
 Consistent with 48 C.F.R.  12.212 and 48 C.F.R.  227.7202-1
 through 227.7202-4 (June 1995), all U.S.  Government End
 Users acquire Covered Code with only those rights set forth
 herein.  You agree to pass this notice to Your licensees.
 
 8.9 Press Announcements.  All press announcements relative
 to the execution of this License must be reviewed and
 approved by Original Contributor and You prior to release.
 
 8.10 International Use.
 
 a) Export/Import laws.  Covered Code is subject to U.S.
 export control laws and may be subject to export or import
 regulations in other countries.  Each party agrees to comply
 strictly with all such laws and regulations and acknowledges
 their responsibility to obtain such licenses to export,
 re-export, or import as may be required.  You agree to pass
 these obligations to Your licensees.
 
 b) Intellectual Property Protection.  Due to limited
 intellectual property protection and enforcement in certain
 countries, You agree not to redistribute the Original Code,
 Upgraded Code, TCK and Specifications to any country other
 than the list of restricted countries on the SCSL Webpage.
 
 8.11 Language.  This License is in the English language
 only, which language shall be controlling in all respects,
 and all versions of this License in any other language shall
 be for accommodation only and shall not be binding on the
 parties to this License.  All communications and notices
 made or given pursuant to this License, and all
 documentation and support to be provided, unless otherwise
 noted, shall be in the English language.
 
 PLEASE READ THE TERMS OF THIS LICENSE CAREFULLY.  BY
 CLICKING ON THE "ACCEPT" BUTTON BELOW YOU ARE ACCEPTING AND
 AGREEING TO THE TERMS AND CONDITIONS OF THIS LICENSE WITH
 SUN MICROSYSTEMS, INC.  IF YOU ARE AGREEING TO THIS LICENSE
 ON BEHALF OF A COMPANY, YOU REPRESENT THAT YOU ARE
 AUTHORIZED TO BIND THE COMPANY TO SUCH A LICENSE.  WHETHER
 YOU ARE ACTING ON YOUR OWN BEHALF, OR REPRESENTING A
 COMPANY, YOU MUST BE OF MAJORITY AGE AND BE OTHERWISE
 COMPETENT TO ENTER INTO CONTRACTS.  IF YOU DO NOT MEET THIS
 CRITERIA OR YOU DO NOT AGREE TO ANY OF THE TERMS AND
 CONDITIONS OF THIS LICENSE, CLICK ON THE REJECT BUTTON TO
 EXIT.
 
 ACCEPT REJECT
 
 
 
 
 
 
 
 
 
 
 GLOSSARY
 
 1.  "Commercial Use" means any use (excluding Internal
 Deployment Use) or distribution, directly or indirectly of
 Compliant Covered Code by You to any third party, alone or
 bundled with any other software or hardware, for direct or
 indirect commercial or strategic gain or advantage, subject
 to execution of Attachment D by You and Original
 Contributor.
 
 2.  "Community Code" means the Original Code, Upgraded Code,
 Error Corrections, Shared Modifications, or any combination
 thereof.
 
 3.  "Community Webserver(s)" means the webservers designated
 by Original Contributor for posting Error Corrections and
 Shared Modifications.
 
 4.  "Compliant Covered Code" means Covered Code that
 complies with the requirements of the TCK.
 
 5.  "Contributor" means each Licensee that creates or
 contributes to the creation of any Error Correction or
 Shared Modification.
 
 6.  "Covered Code" means the Original Code, Upgraded Code,
 Modifications, or any combination thereof.
 
 7.  "Error Correction" means any change made to Community
 Code which conforms to the Specification and corrects the
 adverse effect of a failure of Community Code to perform any
 function set forth in or required by the Specifications.
 
 7.  "Executable" means Covered Code that has been converted
 to a form other than Source Code.
 
 9.  "Extension(s)" means any additional classes or other
 programming code and/or interfaces developed by or for You
 which:  (i) are designed for use with the Technology; (ii)
 constitute an API for a library of computing functions or
 services; and (iii) are disclosed to third party software
 developers for the purpose of developing software which
 invokes such additional classes or other programming code
 and/or interfaces.  The foregoing shall not apply to
 software development by Your subcontractors to be
 exclusively used by You.
 
 10.  "Intellectual Property Rights" means worldwide
 statutory and common law rights associated solely with (i)
 patents and patent applications; (ii) works of authorship
 including copyrights, copyright applications, copyright
 registrations and "moral rights"; (iii) the protection of
 trade and industrial secrets and confidential information;
 and (iv) divisions, continuations, renewals, and
 re-issuances of the foregoing now existing or acquired in
 the future.
 
 11.  "Internal Deployment Use" means use of Compliant
 Covered Code (excluding Research Use) within Your business
 or organization only by Your employees and/or agents,
 subject to execution of Attachment C by You and Original
 Contributor, if required.
 
 12.  "Licensee" means any party that has entered into and
 has in effect a version of this License with Original
 Contributor.
 
 13.  "Modification(s)" means (i) any change to Covered Code;
 (ii) any new file or other representation of computer
 program statements that contains any portion of Covered
 Code; and/or (iii) any new Source Code implementing any
 portion of the Specifications.
 
 14.  "Original Code" means the initial Source Code for the
 Technology as described on the Technology Download Site.
 
 15.  "Original Contributor" means Sun Microsystems, Inc.,
 its affiliates and its successors and assigns.
 
 16.  "Reformatted Specifications" means any revision to the
 Specifications which translates or reformats the
 Specifications (as for example in connection with Your
 documentation) but which does not alter, subset or superset
 the functional or operational aspects of the Specifications.
 
 17.  "Research Use" means use and distribution of Covered
 Code only for Your research, development, educational or
 personal and individual use, and expressly excludes Internal
 Deployment Use and Commercial Use.
 
 18.  "SCSL Webpage" means the Sun Community Source license
 webpage located at http://sun.com/software/communitysource,
 or such other url that Sun may designate from time to time.
 
 19.  "Shared Modifications" means Modifications provided by
 You, at Your option, pursuant to Section 2.2, or received by
 You from a Contributor pursuant to Section 2.3.
 
 20.  "Source Code" means computer program statements written
 in any high-level, readable form suitable for modification
 and development.
 
 21.  "Specifications" means the specifications for the
 Technology and other documentation, as designated on the
 Technology Download Site, as may be revised by Original
 Contributor from time to time.
 
 22.  "Sun Trademarks" means Original Contributor's SUN,
 JAVA, and JINI trademarks and logos, whether now used or
 adopted in the future.  23.  "Technology" means the
 technology described in Attachment B, and Upgrades.
 
 24.  "Technology Compatibility Kit" or "TCK" means the test
 programs, procedures and/or other requirements, designated
 by Original Contributor for use in verifying compliance of
 Covered Code with the Specifications, in conjunction with
 the Original Code and Upgraded Code.  Original Contributor
 may, in its sole discretion and from time to time, revise a
 TCK to correct errors and/or omissions and in connection
 with Upgrades.
 
 25.  "Technology Download Site" means the site(s) designated
 by Original Contributor for access to the Original Code,
 Upgraded Code, TCK and Specifications.
 
 26.  "Upgrade(s)" means new versions of Technology
 designated exclusively by Original Contributor as an
 "Upgrade" and released by Original Contributor from time to
 time.
 
 27.  "Upgraded Code" means the Source Code for Upgrades,
 possibly including Modifications made by Contributors.
 
 28.  "You(r)" means an individual, or a legal entity acting
 by and through an individual or individuals, exercising
 rights either under this License or under a future version
 of this License issued pursuant to Section 4.1.  For legal
 entities, "You(r)" includes any entity that by majority
 voting interest controls, is controlled by, or is under
 common control with You.
 
 ATTACHMENT A
 
 REQUIRED NOTICES
 
 
 ATTACHMENT A-1
 
 REQUIRED IN ALL CASES
 
 "The contents of this file, or the files included with this
 file, are subject to the current version of Sun Community
 Source License for [fill in name of applicable Technology]
 (the "License"); You may not use this file except in
 compliance with the License.  You may obtain a copy of the
 License at http://sun.com/software/communitysource.  See the
 License for the rights, obligations and limitations
 governing use of the contents of the file.
 
 
 The Original and Upgraded Code is [fill in name and version
 of applicable Technology].  The developer of the Original
 and Upgraded Code is Sun Microsystems, Inc.  Sun
 Microsystems, Inc.  owns the copyrights in the portions it
 created.  All Rights Reserved.
 
 
 Contributor(s):
 _______________________________________________
 
 Associated Test Suite(s) Location:
 ________________________________
 
 
 
 ATTACHMENT A-2
 
 SAMPLE LICENSEE CERTIFICATION
 
 "By clicking the `Agree' button below, You certify that You
 are a Licensee in good standing under the Sun Community
 Source License, [fill in applicable Technology and Version]
 ("License") and that Your access, use and distribution of
 code and information You may obtain at this site is subject
 to the License."
 
 
 
 ATTACHMENT A-3
 
 REQUIRED STUDENT NOTIFICATION
 
 "This software and related documentation has been obtained
 by your educational institution subject to the Sun Community
 Source License, [fill in applicable Technology].  You have
 been provided access to the software and related
 documentation for use only in connection with your course
 work and research activities as a matriculated student of
 your educational institution.  Any other use is expressly
 prohibited.
 
 THIS SOFTWARE AND RELATED DOCUMENTATION CONTAINS PROPRIETARY
 MATERIAL OF SUN MICROSYSTEMS, INC, WHICH ARE PROTECTED BY
 VARIOUS INTELLECTUAL PROPERTY RIGHTS.
 
 You may not use this file except in compliance with the
 License.  You may obtain a copy of the License on the web at
 http://sun.com/software/communitysource."
 
 
 
 ATTACHMENT B
 
 Java(tm) 2 SDK Technology
 
 Description of "Technology"
 
 Java(tm) 2 SDK Technology v.1.2 as described on the
 Technology Download Site.
 
 
 
 ATTACHMENT C
 
 INTERNAL DEPLOYMENT USE
 
 This Attachment C is only effective for the Technology
 specified in Attachment B, upon execution of Attachment D
 (Commercial Use License) including the requirement to pay
 royalties.  In the event of a conflict between the terms of
 this Attachment C and Attachment D, the terms of Attachment
 D shall govern.
 
 1.  Internal Deployment License Grant.  Subject to Your
 compliance with Section 2 below, and Section 8.10 of the
 Research Use license; in addition to the Research Use
 license and the TCK license, Original Contributor grants to
 You a worldwide, non-exclusive license, to the extent of
 Original Contributor's Intellectual Property Rights covering
 the Original Code, Upgraded Code and Specifications, to do
 the following:
 
 a) reproduce and distribute internally, Original Code and
 Upgraded Code as part of Compliant Covered Code, and
 Specifications, for Internal Deployment Use,
 
 b) compile such Original Code and Upgraded Code, as part of
 Compliant Covered Code, and reproduce and distribute
 internally the same in Executable form for Internal
 Deployment Use, and
 
 c) reproduce and distribute internally, Reformatted
 Specifications for use in connection with Internal
 Deployment Use.
 
 2.  Additional Requirements and Responsibilities.  In
 addition to the requirements and responsibilities described
 under Section 3.1 of the Research Use license, and as a
 condition to exercising the rights granted under Section 3
 above, You agree to the following additional requirements
 and responsibilities:
 
 2.1 Compatibility.  All Covered Code must be Compliant
 Covered Code prior to any Internal Deployment Use or
 Commercial Use, whether originating with You or acquired
 from a third party.  Successful compatibility testing must
 be completed in accordance with the TCK License.  If You
 make any further Modifications to any Covered Code
 previously determined to be Compliant Covered Code, you must
 ensure that it continues to be Compliant Covered Code.
 
 
 
 ATTACHMENT D COMMERCIAL USE LICENSE
 
 1.  Effect.  This Attachment D is effective only if signed
 below by You and Original Contributor, and applies to Your
 Commercial Use of Original Code and Upgraded Code.
 
 2.  Term.  Upon execution of this Attachment D by You and
 Original Contributor, this Commercial Use license shall have
 an initial term of 3 years and shall automatically renew for
 additional one year terms unless either party provides
 notice to the other no less than 60 days prior to an
 anniversary date.
 
 3.  Commercial Use License Grant.  Subject to Your
 compliance with Section 4 below, Section 8.10 of the
 Research Use license, and the TCK license; in addition to
 the Research Use license, the TCK license, and the Internal
 Deployment Use license, Original Contributor grants to You a
 worldwide, non-exclusive, non-transferable license, to the
 extent of Original Contributor's Intellectual Property
 Rights covering the Original Code, Upgraded Code and
 Specifications, to do the following:
 
 a) reproduce and distribute Compliant Covered Code;
 
 b) compile Compliant Covered Code and reproduce and
 distribute the same in Executable form through multiple
 tiers of distribution; and
 
 c) reproduce and distribute Reformatted Specifications in
 association with Compliant Covered Code.
 
 4.  Additional Requirements and Responsibilities.  In
 addition to the requirements and responsibilities specified
 in the Research Use license, the TCK license and the
 Internal Deployment license, and as a condition to
 exercising the rights granted in Section 3 above, You agree
 to the following additional requirements and
 responsibilities:
 
 a) Distribution of Source Code.  Source Code of Compliant
 Covered Code may be distributed only to another Licensee of
 the same Technology.
 
 b) Distribution of Executable Code.  You may distribute the
 Executable version(s) of Compliant Covered Code under a
 license of Your choice, which may contain terms different
 from this License, provided (i) that You are in compliance
 with the terms of this License, and (ii) You must make it
 absolutely clear that any terms which differ from this
 License are offered by You alone, not by Original
 Contributor or any other Contributor.
 
 c) Branding.  Products integrating Compliant Covered Code
 used for Commercial Use must be branded with the Technology
 compliance logo under a separate trademark license required
 to be executed by You and Original Contributor concurrent
 with execution of this Attachment D.
 
 5.  Indemnity/Limitation of Liability.  The provisions of
 Section 7.1 of the Research Use license are superseded by
 the following:
 
 a) Your Indemnity Obligation.  You hereby agree to defend,
 at Your expense, any legal proceeding brought against
 Original Contributor or any Licensee to the extent it is
 based on a claim:  (i) that the use, reproduction or
 distribution of any of Your Error Corrections or Shared
 Modifications is an infringement of a third party trade
 secret or a copyright in a country that is a signatory to
 the Berne Convention; (ii) arising in connection with any
 representation, warranty, support, indemnity, liability or
 other license terms You may offer in connection with any
 Covered Code; or (iii) arising from Your Commercial Use of
 Covered Code, other than a claim covered by Section 5.b)
 below, or a patent claim based solely on Covered Code not
 provided by You.  You will pay all damages costs and fees
 awarded by a court of competent jurisdiction, or such
 settlement amount negotiated by You, attributable to such
 claim.
 
 b) Original Contributor's Indemnity Obligation.  Original
 Contributor will defend, at its expense, any legal
 proceeding brought against You, to the extent it is based on
 a claim that Your authorized Commercial Use of Original Code
 and Upgraded Code is an infringement of a third party trade
 secret or a copyright in a country that is a signatory to
 the Berne Convention, and will pay all damages costs and
 fees awarded by a court of competent jurisdiction, or such
 settlement amount negotiated by Original Contributor,
 attributable to such claim.  The foregoing shall not apply
 to any claims of intellectual property infringement based
 upon the combination of code or documentation supplied by
 Original Contributor with code, technology or documentation
 from other sources.
 
 c) Right of Intervention.  Original Contributor will have
 the right, but not the obligation, to defend You, at
 Original Contributor's expense, in connection with a claim
 that Your Commercial Use of Original Code and Upgraded Code
 is an infringement of a third party patent and will, if
 Original Contributor chooses to defend You, pay all damages
 costs and fees awarded by a court of competent jurisdiction,
 or such settlement amount negotiated by Original
 Contributor, attributable to such claim.
 
 d) Prerequisites.  Under Sections 5.b) and c) above, You
 must, and under Section 5.a) above, Original Contributor or
 any Licensee must:  (i) provide notice of the claim promptly
 to the party providing an indemnity; (ii) give the
 indemnifying party sole control of the defense and
 settlement of the claim; (iii) provide the indemnifying
 party, at indemnifying party's expense, all available
 information, assistance and authority to defend; and (iv)
 not have compromised or settled such claim or proceeding
 without the indemnifying party's prior written consent.
 
 e) Additional Remedies.  Should any Original Code, Upgraded
 Code, TCK, Specifications, or Modifications become, or in
 the indemnifying party's opinion be likely to become, the
 subject of a claim of infringement for which indemnity is
 provided above, the indemnifying party may, at its sole
 option, attempt to procure on reasonable terms the rights
 necessary for the indemnified party to exercise its license
 rights under this License with respect to the infringing
 items, or to modify the infringing items so that they are no
 longer infringing without substantially impairing their
 function or performance.  If the indemnifying party is
 unable to do the foregoing after reasonable efforts, then
 the indemnifying party may send a notice of such inability
 to the indemnified party together with a refund of any
 license fees received by the indemnifying party from the
 indemnified party for the infringing items applicable to the
 indemnified party's future use or distribution of such
 infringing items, in which case the indemnif ying party will
 not be liable for any damages resulting from infringing
 activity with respect to the infringing items occurring
 after such notice and refund.
 
 6.  Support Programs.
 
 Support to You.  Technical support is not provided to You by
 Original Contributor under this License.  You may contract
 for one or more support programs from Original Contributor
 relating to the Technology which are described on the SCSL
 Webpage.
 
 Customer Support.  You are responsible for providing
 technical and maintenance support services to Your customers
 for Your products and services incorporating the Compliant
 Covered code.
 
 7.  Royalties and Payments.
 
 Technology specified in Attachment B.
 
 
 Field of Use:____________________
 
 Royalty per Unit $_____________
 
 
 b) Royalty Payments.  Payment of royalties shall be made
 quarterly, shall be due thirty (30) days following the end
 of the calendar quarter to which they relate and shall be
 submitted with a written statement documenting the basis for
 the royalty calculation.
 
 
 c) Taxes.  All payments required by this License shall be
 made in United States dollars, are exclusive of taxes, and
 Licensee agrees to bear and be responsible for the payment
 of all such taxes, including, but not limited to, all sales,
 use, rental receipt, personal property or other taxes and
 their equivalents which may be levied or assessed in
 connection with this License (excluding only taxes based on
 Original Contributor's net income).  To the extent Licensee
 is required to withhold taxes based upon Original
 Contributor's income in any country, You agree to provide
 Original Contributor with written evidence of such
 withholding, suitable for Original Contributor to obtain a
 tax credit in the United States.
 
 d) Records.  You agree to maintain account books and records
 consistent with Generally Accepted Accounting Principles
 appropriate to Your domicile, as may be in effect from time
 to time, sufficient to allow the correctness of the
 royalties required to be paid pursuant to this License to be
 determined.
 
 e) Audit Rights.  Original Contributor shall have the right
 to audit such accounts upon reasonable prior notice using an
 independent auditor of Original Contributor's choice (the
 "Auditor").  The Auditor shall be bound to keep confidential
 the details of Your business affairs and to limit disclosure
 of the results of any audit to the sufficiency of the
 accounts and the amount, if any, of a payment adjustment
 that should be made.  Such audits shall not occur more than
 once each year (unless discrepancies are discovered in
 excess of the five percent (5%) threshold set forth in
 Section 7.f) below, in which case two consecutive quarters
 per year may be audited).  Except as set forth in Section
 7.f) below, Original Contributor shall bear all costs and
 expenses associated with the exercise of its rights to
 audit.
 
 f) Payment Errors.  In the event that any errors in payments
 shall be determined, such errors shall be corrected by
 appropriate adjustment in payment for the quarterly period
 during which the error is discovered.  In the event of an
 underpayment of more than five percent (5%) of the proper
 amount owed, upon such underpayment being properly
 determined by the Auditor, You agree to reimburse Original
 Contributor the amount of the underpayment and all
 reasonable costs and expenses associated with the exercise
 of its rights to audit, and interest on the overdue amount
 at the maximum allowable interest rate from the date of
 accrual of such obligation.
 
 8.  Notice of Breach or Infringement.  Each party shall
 notify the other immediately in writing when it becomes
 aware of any breach or violation of the terms of this
 License, or when You become aware of any potential or actual
 infringement by a third party of the Technology or Sun's
 Intellectual Property Rights therein.
 
 9.  Proprietary Rights Notices.  You may not remove any
 copyright notices, trademark notices or other proprietary
 legends of Original Contributor or its suppliers contained
 on or in the Original Code, Upgraded Code and
 Specifications.
 
 10.  Notices.  All written notices required by this License
 must be delivered in person or by means evidenced by a
 delivery receipt and will be effective upon receipt by the
 persons at the addresses specified below.
 
 
 Original Contributor:  You:
 
 Sun Microsystems, Inc.  _____________________________
 
 901 San Antonio Road ______________________________
 
 Palo Alto, California 94303 ______________________________
 
 Attn.:  VP, Sun Software and Technology Sales
 ______________________________
 
 cc:  Sun Software and Technology, General Counsel
 
 11.  Disclaimer of Agency.  The relationship created hereby
 is that of licensor and licensee and the parties hereby
 acknowledge and agree that nothing herein shall be deemed to
 constitute You as a franchisee of Original Contributor.  You
 hereby waive the benefit of any state or federal statutes
 dealing with the establishment and regulation of franchises.
 
 Agreed:
 
 You:  Original Contributor:
 
 _____________________________ Sun Microsystems, Inc.
 
 (Your Name) By:________________________
 By:________________________
 
 Title_________________________ Title:_____________________
 
 Date:_________________________ Date:______________________
 
 
 
 
 ATTACHMENT E TECHNOLOGY COMPATIBILITY KIT
 
 The following license is effective for the Java(tm)2 SDK
 Version 1.2 Technology Compatibility Kit only upon execution
 of a separate support agreement between You and Original
 Contributor (subject to an annual fee) as described on the
 SCSL Webpage.  The Technology Compatibility Kit for the
 Technology specified in Attachment B may be accessed at the
 Technology Download Site only upon execution of the support
 agreement.
 
 1.  TCK License.
 
 a) Subject to the restrictions set forth in Section 1.b
 below and Section 8.10 of the Research Use license, in
 addition to the Research Use license, Original Contributor
 grants to You a worldwide, non-exclusive, non-transferable
 license, to the extent of Original Contributor's
 Intellectual Property Rights in the TCK (without the right
 to sublicense), to use the TCK to develop and test Covered
 Code.
 
 b) TCK Use Restrictions.  You are not authorized to create
 derivative works of the TCK or use the TCK to test any
 implementation of the Specification that is not Covered
 Code.  You may not publish your test results or make claims
 of comparative compatibility with respect to other
 implementations of the Specification.  In consideration for
 the license grant in Section 1.a above you agree not to
 develop your own tests which are intended to validate
 conformation with the Specification.
 
 2.  Requirements for Determining Compliance.
 
 2.1 Definitions.
 
 a) "Added Value" means code which:
 
 (i) has a principal purpose which is substantially different
 from that of the stand-alone Technology;
 
 (ii) represents a significant functional and value
 enhancement to the Technology;
 
 (iii) operates in conjunction with the Technology; and
 
 (iv) is not marketed as a technology which replaces or
 substitutes for the Technology.
 
 b) "Java Classes" means the specific class libraries
 associated with each Technology defined in Attachment B.
 
 c) "Java Runtime Interpreter" means the program(s) which
 implement the Java virtual machine for the Technology as
 defined in the Specification.
 
 d) "Platform Dependent Part" means those Original Code and
 Upgraded Code files of the Technology which are not in a
 "share" directory or subdirectory thereof.
 
 e) "Shared Part" means those Original Code and Upgraded Code
 files of the Technology which are identified as "shared" (or
 words of similar meaning) or which are in any "share"
 directory or subdirectory thereof, except those files
 specifically designated by Original Contributor as
 modifiable.
 
 f) "User's Guide" means the users guide for the TCK which
 Sun makes available to You to provide direction in how to
 run the TCK and properly interpret the results, as may be
 revised by Sun from time to time.
 
 2.2 Development Restrictions.  Compliant Covered Code:
 
 a) must include Added Value;
 
 b) must fully comply with the Specifications for the
 Technology specified in Attachment B;
 
 c) must include the Shared Part, complete and unmodified;
 
 d) may not modify the functional behavior of the Java
 Runtime Interpreter or the Java Classes;
 
 e) may not modify, subset or superset the interfaces of the
 Java Runtime Interpreter or the Java Classes;
 
 f) may not subset or superset the Java Classes; and
 
 g) may not modify or extend the required public class or
 public interface declarations whose names begin with "java",
 "javax", "jini", "net.jini", "sun.hotjava", "COM.sun" or
 their equivalents in any subsequent naming convention.
 
 2.3 Compatibility Testing.  Successful compatibility testing
 must be completed by You, or at Original Contributor's
 option, a third party designated by Original Contributor, to
 conduct such tests, in accordance with the User's Guide, and
 using the most current version of the applicable TCK
 available from Original Contributor one hundred twenty (120)
 days (two hundred forty [240] days in the case of silicon
 implementations) prior to:  (i) Your Internal Deployment
 Use; and (ii) each release of Compliant Covered Code by You
 for Commercial Use.  In the event that You elect to use a
 version of Upgraded Code that is newer than that which is
 required under this Section 2.3, then You agree to pass the
 version of the TCK that corresponds to such newer version of
 Upgraded Code.
 
 2.4 Test Results.  You agree to provide to Original
 Contributor or the third party test facility if applicable,
 Your test results that demonstrate that Covered Code is
 Compliant Covered Code and that Original Contributor may
 publish or otherwise distribute such test results.
 