
This Software Licensing Agreement ("Agreement") is a legal agreement between you and GarageGames.com, Inc. ('GarageGames'). These are the only terms by which GarageGames permits any use of the Software.

GarageGames Licensing Agreement for Bridge Construction Set Demo.

1. The Software.
The Software licensed under this Agreement is the computer program entitled
'Bridge Construction Set Demo', which consists of executable files, data files, and documentation.

2. Grant of License.
GarageGames grants you the nontransferable, nonexclusive right to use the Software in accordance with the terms of this Agreement.

YOU MAY: (i) load the software into RAM as well as install it on a hard disk or other storage device, and (ii) make one copy for backup purposes.

YOU MAY NOT: modify, translate, disassemble, reverse engineer, decompile, or create derivative works based upon the Software.

When you purchase the Software, you will receive the full registered version. You agree not to distribute the registered version to others and to use it only for your own personal use. You acknowledge that distribution of the registered version to others, whether intentional or unintentional, could damage GarageGames both financially and professionally. Any unauthorized distribution of your registered version will result in immediate and automatic termination of your license, and may result in civil and criminal penalties.

3. Copyright.
The Software is owned by GarageGames and is protected by United States copyright laws and international treaties. GarageGames reserves the exclusive copyright and all other rights, title and interest to distribute the Software, and to use Trademarks in connection with them. &#8220;Trademarks&#8221; refers to the name of the Software, the Software logo, the name GarageGames, and the GarageGames logo.


4. NO WARRANTY.
THE SOFTWARE IS PROVIDED "AS-IS". NO WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, ARE MADE AS TO IT OR ANY MEDIUM IT MAY BE ON. GARAGEGAMES WILL PROVIDE NO REMEDY FOR INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES ARISING FROM IT, INCLUDING SUCH FROM NEGLIGENCE, STRICT LIABILITY, OR BREACH OF WARRANTY OR CONTRACT, EVEN AFTER NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.

5. Term.
The term of this license grant is perpetual. You may terminate this Agreement at any time by destroying all copies of the Software in your possession. Your license to use the Software will automatically terminate if you breach the terms of this Agreement.

6. General Provisions.
This Agreement is the sole and entire Agreement relating to the Software, and supercedes all prior understandings, agreements, and documentation relating to the Software. If any provision in this Agreement is held by a court of competent jurisdiction to be invalid, void, or unenforceable, the remaining provisions will continue in full force without being impaired or invalidated in any way. This Agreement will be governed by the laws of the State of Oregon, without regard for its conflict of laws principles. With respect to every matter arising under this Agreement, you consent to the exclusive jurisdiction and venue of the state and federal courts sitting in Lane County, Oregon. This Agreement does not create any agency or partner relationship. Your rights under this Agreement are personal and do not include any right to sublicense the Software.

BY CLICKING ON 'I AGREE' BELOW, YOU ACKNOWLEDGE THAT YOU HAVE READ THIS
AGREEMENT, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS.
IF YOU DO NOT AGREE WITH THIS AGREEMENT, PLEASE CLICK 'CANCEL'.
