 ALM WORKS LTD -- End User License Agreement -- Version 1.2 -- 2007-01-02 
 
 IMPORTANT! READ CAREFULLY: THIS IS A LEGAL AGREEMENT. BY DOWNLOADING, INSTALLING, COPYING, SAVING ON YOUR COMPUTER, OR OTHERWISE USING ALM WORKS SOFTWARE, YOU (LICENSEE, AS DEFINED BELOW) ARE BECOMING A PARTY TO THIS AGREEMENT AND YOU ARE CONSENTING TO BE BOUND BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT, YOU SHOULD NOT DOWNLOAD, INSTALL OR USE THE SOFTWARE. 
 
 This End User License Agreement ("Agreement") is a legally binding agreement between you, on behalf of yourself and the legal entity for whom you are downloading and installing the software, or that has given you the authorization to use the software, whether explicit or implied ("Licensee", "You") and ALM Works Ltd, the developer and the owner of the software ("Licensor", "ALM Works"). 
 
 1. DEFINITIONS 
 
 1.1 "Product Set" means all software and documentation items that are delivered to end-users by ALM Works under a single trade name. 
 
 1.2 "Product Version" means all software and documentation from a single Product Set that is labeled with the same numerical version tag. Version tag has the form of "M.N", where M is the major version number and N is the minor version number. 
 
 1.3 "Product" means all Product Versions that (a) belong to a single Product Set, referred to in License Keys and (b) have the same major version number that corresponds to the latest software version at the moment License Keys are delivered to the Licensee. 
 
 1.4 "License Keys" means electronic files that have been delivered to Licensee as a consequence of this Agreement, and that provide technical means for running the Product and that contain detailed information about the type of license and license options. 
 
 1.5 "License Key Type" means identifiable type of a License Key (with the help of the Product or of other software), and may be one of: single-user license (also known as full license), floating license, personal license, site license, evaluation license, academic license, license for open-source. 
 
 1.6 "License Key Capacity" means the maximum allowed concurrent users for the Floating and Academic License Key Types. 
 
 1.7 "Authorized Person" means either (a) solely you, the Licensee, if Licensee is an individual; (b) if Licensee is a legal entity, any employee, independent contractor and other temporary worker authorized by Licensee to use the Software while performing duties within the scope of their employment or assignment. 
 
 1.8 "Product Instance" means Product software executing on a single computer as a single process. 
 
 2. GRANT OF LICENSE 
 
 Provided that You agree and fully comply with this Agreement, subject to the terms and conditions set forth in this Agreement, ALM Works grants You a non-exclusive, non-transferable (with a single exception set forth in paragraph 12), limited license to use the Product as follows: 
 
 2.1. You may: 
 
 2.1.1. Install and use the Product on multiple computers, operating systems and accounts, subject to limitations set forth in paragraphs 4 - 8 according to License Key Types and License Keys Capacity; 
 
 2.1.2 Make backup copies of the Product and License Keys; 
 
 2.2 You may not: 
 
 2.2.1 Sell, redistribute (except for redistributing among Authorized Persons), encumber, give, lend, rent, lease, sublicense, or otherwise transfer the Product, or any portions of the Product, to anyone without prior written consent of the Licensor; 
 2.2.2 Decompile, disassemble, reverse engineer, modify, or translate the Software or otherwise attempt to discover the source code. You are given notice that any and all information obtained during such lawful reverse engineering and/or decompiling activities, including, but not limited to, the organization, logic, algorithms, and processes of the Product, is and shall remain the confidential and proprietary information of ALM Works or its licensors; 
 
 2.2.3 Modify the Product, create derivative works based on the Product, attempt to modify the Software, or attempt to create derivative works based on the Product. 
 
 3. OWNERSHIP 
 
 The Product is the property of the Licensor. The Product is licensed, not sold or otherwise transferred. You acknowledge and agree that: 
 
 3.1 The Product is protected under International and U.S. copyright laws; 
 
 3.2 ALM Works and its licensors retain all copyrights and other intellectual property rights in the Product; 
 
 3.3 There are no implied licenses under this Agreement, and any rights not expressly granted to you hereunder are reserved by ALM Works; 
 
 3.4 You acquire no ownership or other interest (other than your license rights) in or to the Product, including, but not limited to, any rights or interest in or to any trademark, service mark, logo or trade name of ALM Works or its licensors. 
 
 4. SINGLE-USER LICENSE TERMS 
 
 A License Key of type "Single-user license" or "Full license" or "Commercial license" allows only one Authorized Person to use the Product on multiple computers, provided that the software is not running on more than one computer at a time. 
 
 5. FLOATING LICENSE TERMS 
 
 A License Key of type "Floating license" allows any number of Authorized Persons to use the Product on multiple computers, provided that at any time the number of running Product Instances is not greater than the License Capacity. 
 
 ALM Works reserves the right to require technical means for controlling floating licenses use, such as a license server, to be installed at the Licensee's site(s). 
 
 6. PERSONAL LICENSE TERMS 
 
 A License Key of type "Personal license" allows only one individual to use the Product on multiple computers, provided that the software is not running on more than one computer at a time. 
 
 The licensee of a Personal license is always a person designated in the license key, not a legal entity, regardless of billing address. 
 
 The Product may have functional limitations when used with a Personal license. 
 
 7. SITE LICENSE 
 
 A License Key of type "Site license" allows unlimited number of Authorized Persons to use the Product, provided that the Product is used to work only with site(s) designated in the License Key. 
 
 The Product may have functional limitations when used with a Site license. 
 
 8. EVALUATION LICENSE TERMS 
 
 A License Key of type "Evaluation license" allows using the Product for a time-limited evaluation period without executing a purchase. During the evaluation period, the Product may be used for trial and testing purposes only and not for general commercial use. At the end of evaluation period Licensee has to either discontinue using the Product or pay licensee fee to remove evaluation restrictions. 
 
 9. ACADEMIC LICENSE TERMS 
 
 A License Key of type "Academic License" allows any number of Authorized Persons to use the Product on multiple computers for non-commercial, educational purposes only, provided that at any time the number of running Product Instances is not greater than the License Capacity. 
 
 Using the Product for commercial or non-educational purposes is not allowed by Academic License. 
 
 Academic License is valid only when Licensee is an accredited educational institution including vocational/trade schools, colleges and universities. 
 
 10. SPECIAL LICENSE TERMS 
 
 A License Key of type "License for Open-Source Projects" or "License for Open-Source" allows only one Authorized Person to use the Product on multiple computers, provided that the software is not running on more than one computer at a time, and provided that the Authorized Person uses the Product to work exclusively on non-commercial open-source projects specified in the License Key. 
 
 ALM Works reserves the right to limit the functionality of the Product to technically enforce the terms and limitations of a License for Open-Source Projects. 
 
 11. DELIVERY 
 
 The Product is delivered electronically. Licensee downloads the software and documentation from Licensor's web site. License Keys are delivered to Licensee by electronic mail within 48 hours after payment confirmation (for Academic, Single-user and Floating license keys) or within 48 hours after successful application (for Special and Evaluation license keys) is confirmed. ALM Works is not to be held responsible for any delay in delivering the license key to you that may arise due to the nature of electronic mail and the Internet. 
 
 12. NO WARRANTY. LIMITATION OF LIABILITY 
 
 THE PRODUCT IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED TO THE EXTENT NOT PROHIBITED BY LAW. IN NO EVENT SHALL THE ALM WORKS OR ITS LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 
 13. TERMINATION 
 
 This Agreement is effective until terminated. You may terminate this Agreement at any time by destroying License Keys. This Agreement will terminate immediately without notice from ALM Works if you fail to comply with any provision of this Agreement. 
 
 Agreement is terminated if you receive refund for returning the Product to ALM Works, as described in Return Policy on the ALM Works website. 
 
 You must stop using the Product once the License Agreement is terminated. 
 
 14. TRANSFER 
 
 You may perform a one full transfer of all rights granted by this Agreement to any other party, provided you meet the following conditions: 
 
 14.1 You destroy electronic license key on your computers and discontinue using the Product; 
 
 14.2 You send us a written notice about the transfer, including information about the transfer beneficiary and the number of licenses transferred, so that we can issue new electronic license keys for the beneficiary; 
 
 14.3 You will indemnify, defend and hold ALM Works and its licensors and suppliers and each of their respective employees, officers, directors and affiliates, harmless from and against any claims or liabilities arising out of Product transfer by you or third parties that have received the product from you. 
 
 14.4 You may not redistribute electronic license key. The new Product Licensee will have to acquire his own license key. 
 
 15. THIRD-PARTY SOFTWARE 
 
 The Product may include the software or other files provided by a third party vendor, which may be subject to additional license restrictions. You agree to abide by the corresponding third-party agreements, which may be found in "license" directory within the Product distribution, or on the third-party vendor's websites. 
 
 16. MARKETING 
 
 You agree to be identified as a customer of ALM Works and that ALM Works may refer to You by name, trade name and trademark, if applicable, and may briefly describe Your business in ALM Works marketing materials and on ALM Works web sites. 
 
 17. SUPPORT SERVICES 
 
 ALM Works provides you with support services related to the Product according to support policies described on ALM Works website. 
 
 Any supplemental software code or related materials that ALM Works provides to you as a part of the support services, in upgrades to the Product or otherwise, is to be considered part of the Product and is subject to the terms and conditions of this Agreement. 
 
 -- 
 If you have any questions about this Agreement, please contact ALM Works Ltd at Times Center, Suite 214; St.Petersburg, 197342; Russian Federation; email: info@almworks.com 
 
 