2010-12-27 08:29:22 +00:00
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
|
|
<head>
|
|
|
|
<title>Compiling GtkRadiant on Windows</title>
|
|
|
|
<style type="text/css">
|
|
|
|
body
|
|
|
|
{
|
|
|
|
color: black;
|
|
|
|
background-color: white;
|
|
|
|
font-family: sans-serif;
|
|
|
|
margin: 1em 1em 1em 1em;
|
|
|
|
}
|
|
|
|
a { color: blue; text-decoration: underline; }
|
|
|
|
a:hover { color: red; text-decoration: underline; }
|
|
|
|
.error { color: #dd0000; }
|
|
|
|
</style>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div style="left:0px; top:0px; width:88px; height:31px; position:absolute">
|
|
|
|
<a href="http://validator.w3.org/check?uri=referer">
|
|
|
|
<img src="http://www.w3.org/Icons/valid-xhtml10"
|
|
|
|
style="border-style:none"
|
|
|
|
alt="Valid XHTML 1.0!" height="31" width="88" />
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
<br />
|
|
|
|
<center><h1>Compiling GtkRadiant on Windows</h1></center>
|
|
|
|
<hr />
|
|
|
|
<p>This guide explains how to compile GtkRadiant 1.6.x from source code on Windows operating systems.
|
|
|
|
The source code is obtained from
|
|
|
|
id Software's official GtkRadiant SVN repository, which is open to the public (details follow).
|
|
|
|
These instructions are aimed at developers wanting to test changes to GtkRadiant source code.
|
|
|
|
The instructions below have been executed successfully on
|
|
|
|
Windows XP 32 bit (some late service pack) and on Windows 7 Ultimate 32 bit. Since 64 bit systems have not been tested by me, I cannot
|
|
|
|
give any advice on how to complete these instructions on those systems. (Also, I'm an advanced UNIX user but a complete Windows nub.)</p>
|
|
|
|
<p>This guide is divided into the following main sections. I choose to use MSYS instead of Cygwin in this
|
|
|
|
tutorial because using MinGW/MSYS is the documented and supported way to compile ioquake3. The need for MinGW/MSYS is
|
|
|
|
really only to execute a single SCons build target; you could presumably execute those needed steps by
|
|
|
|
hand if you really don't want to bother with installing MSYS (but you're on your own if you choose that route).
|
|
|
|
</p>
|
|
|
|
<ul>
|
|
|
|
<li><h3><a href="#mingw">Section 1: Installing MinGW</a></h3></li>
|
|
|
|
<li><h3><a href="#msys">Section 2: Installing MSYS</a></h3></li>
|
|
|
|
<li><h3><a href="#python">Section 3: Installing Python</a></h3></li>
|
|
|
|
<li><h3><a href="#scons">Section 4: Installing SCons</a></h3></li>
|
|
|
|
<li><h3><a href="#svn">Section 5: Installing SVN</a></h3></li>
|
|
|
|
<li><h3><a href="#vcpp">Section 6: Installing Visual C++</a></h3></li>
|
|
|
|
<li><h3><a href="#sources">Section 7: Obtaining Source Code, Game Paks, and Libs</a></h3></li>
|
|
|
|
<li><h3><a href="#compile">Section 8: Compiling GtkRadiant</a></h3></li>
|
|
|
|
<li><h3><a href="#run">Section 9: Running GtkRadiant</a></h3></li>
|
|
|
|
</ul>
|
|
|
|
<hr />
|
|
|
|
<br />
|
|
|
|
<a name="mingw"></a>
|
|
|
|
<h2>Section 1: Installing MinGW</h2>
|
|
|
|
<p>The following URL can be used as a coarse guide for installing MinGW:
|
|
|
|
<a href="http://www.mingw.org/wiki/Getting_Started">http://www.mingw.org/wiki/Getting_Started</a>.
|
|
|
|
The needed steps are reproduced below.
|
|
|
|
</p>
|
|
|
|
<h3>Step A: Download</h3>
|
|
|
|
<p>Download the <tt>mingw-get</tt> program. We're going to use <tt>mingw-get</tt>
|
|
|
|
as opposed to the graphical installer <tt>mingw-get-inst</tt> . You can download the most
|
|
|
|
recent version of <tt>mingw-get</tt> from
|
|
|
|
<a href="http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get/">this SourceForge page</a>.
|
|
|
|
(That page also contains a <tt>readme.txt</tt> file that has very useful information on how to use
|
|
|
|
<tt>mingw-get</tt> , for your reading pleasure.) Download the binary zip file version;
|
|
|
|
the downloaded file should have a name along the lines of <tt>mingw-get-0.1-mingw32-alpha-5-bin.zip</tt> .
|
|
|
|
</p>
|
|
|
|
<h3>Step B: Extract</h3>
|
|
|
|
<p>
|
|
|
|
Extract the zip file you just downloaded to <tt>C:\MinGW</tt> . I would use that exact location; I will be referring to
|
2011-01-09 21:36:32 +00:00
|
|
|
that location in the rest of the instructions. <font color="#ff0000">If you choose a different location, make sure that there is no space in
|
|
|
|
the path.</font> After extraction, double check that there exists a file
|
2010-12-27 08:29:22 +00:00
|
|
|
<tt>C:\MinGW\bin\mingw-get.exe</tt> . If such a file does not exist, you extracted at an incorrect level or you downloaded
|
|
|
|
the wrong zip archive.
|
|
|
|
</p>
|
|
|
|
<h3>Step C: Set <tt>PATH</tt></h3>
|
|
|
|
<p>
|
|
|
|
You need to add <tt>C:\MinGW\bin</tt> to your <tt>PATH</tt> system environment variable. Don't forget that the semicolon
|
|
|
|
character is the separator for the elements in <tt>PATH</tt> . The steps to find where <tt>PATH</tt> can be edited are roughly
|
|
|
|
as follows on Windows XP:
|
|
|
|
</p>
|
|
|
|
<ol>
|
|
|
|
<li>Go to Control Panel (usually in Start menu).</li>
|
|
|
|
<li>In Control Panel, go to System.</li>
|
|
|
|
<li>Hit "Advanced" tab.</li>
|
|
|
|
<li>Hit "Environment Variables" button.</li>
|
|
|
|
<li>Near the bottom, under "System variables", highlight "Path" and click "Edit".</li>
|
|
|
|
<li>Tack on the string "C:\MinGW\bin" to the end, making sure to use a semicolon to separate the existing <tt>PATH</tt> from
|
|
|
|
your new entry.</li>
|
|
|
|
<li>Reboot? (I don't know if it's necessary.)</li>
|
|
|
|
</ol>
|
|
|
|
<h3>Step D: Update/Upgrade</h3>
|
|
|
|
<p>
|
|
|
|
We're going to update the <tt>mingw-get</tt> program with the latest version and pull in the latest distribution manifest.
|
|
|
|
Open up Command Prompt. Execute the following commands:
|
|
|
|
</p>
|
|
|
|
<blockquote>
|
|
|
|
<pre width="80" style="background: #CCCCCC; padding: 2mm; border-style: ridge">C:\MinGW> <b>mingw-get update</b>
|
|
|
|
C:\MinGW> <b>mingw-get upgrade mingw-get</b>
|
|
|
|
</pre>
|
|
|
|
</blockquote>
|
|
|
|
<p>
|
|
|
|
The above commands can be executed from any directory; <tt>C:\MinGW</tt> happened to be the currect directory in my case.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Note: If you execute <tt>mingw-get</tt> without any arguments, you might get an unpleasant-looking error.
|
|
|
|
This is normal.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
We're all done installing the base of the MinGW system. You don't need to install any additional <tt>mingw-*</tt> packages
|
|
|
|
to get GtkRadiant to compile (because we're using different software to actually compile GtkRadiant).
|
|
|
|
</p>
|
|
|
|
<hr />
|
|
|
|
<br />
|
|
|
|
<a name="msys"></a>
|
|
|
|
<h2>Section 2: Installing MSYS</h2>
|
|
|
|
<p>We're now going to install MSYS, which sits on top of MinGW.</p>
|
|
|
|
<h3>Step A: Install <tt>msys-base</tt></h3>
|
|
|
|
<p>
|
|
|
|
Open up Command Prompt. Execute the following command:
|
|
|
|
</p>
|
|
|
|
<blockquote>
|
|
|
|
<pre width="80" style="background: #CCCCCC; padding: 2mm; border-style: ridge">C:\MinGW> <b>mingw-get install msys-base</b>
|
|
|
|
</pre>
|
|
|
|
</blockquote>
|
|
|
|
<p>You can now close the Command Prompt. You won't have to use it again!</p>
|
|
|
|
<h3>Step B: Fire Up MSYS</h3>
|
|
|
|
<p>
|
|
|
|
In your native file exploring application in Windows, navigate to <tt>C:\MinGW\msys\1.0</tt> . Here you will find
|
|
|
|
a file <tt>msys.bat</tt> . This script is what launches MSYS. You can make a shortcut to this file and place the shortcut
|
|
|
|
in a convenient location such as your Desktop. You can also use the provided icon <tt>msys.ico</tt> (in the same
|
|
|
|
directory) for your shortcut icon.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Now start MSYS by double-clicking <tt>msys.bat</tt> (or your shortcut). We will use MSYS to install some remaining packages that are needed.
|
|
|
|
In case you are completely new to MSYS, I'd like to point out that it's much like a UNIX shell.
|
|
|
|
In fact you can access the <tt>C:</tt> Windows drive in MSYS via the <tt>/c</tt> path.
|
|
|
|
</p>
|
|
|
|
<h3>Step C: Install MSYS Additions</h3>
|
|
|
|
<p>
|
|
|
|
There are many MinGW/MSYS packages you can install; you may even choose to install all of them.
|
|
|
|
However, for the purposes of compiling GtkRadiant, you will need only the following. Execute this
|
|
|
|
from your MSYS shell:
|
|
|
|
</p>
|
|
|
|
<blockquote>
|
|
|
|
<pre width="80" style="background: #CCCCCC; padding: 2mm; border-style: ridge">$ <b>mingw-get install msys-wget</b>
|
|
|
|
$ <b>mingw-get install msys-unzip</b>
|
|
|
|
</pre>
|
|
|
|
</blockquote>
|
|
|
|
<p>You should now have the two commands <tt>wget</tt> and <tt>unzip</tt> at your disposal in the MSYS shell.
|
|
|
|
We will be needing these commands to successfully execute the SCons build target later on.</p>
|
|
|
|
<p>You can leave your MSYS shell open because we will use it again in a little while.</p>
|
|
|
|
<p>Side Note: The <tt>msys-openssh</tt> package comes with traditional <tt>scp</tt> and <tt>ssh</tt> commands that work
|
|
|
|
orders of magnitude faster than WinSCP or PuTTY.</p>
|
|
|
|
<hr />
|
|
|
|
<br />
|
|
|
|
<a name="python"></a>
|
|
|
|
<h2>Section 3: Installing Python</h2>
|
|
|
|
<p>We will now install the Python programming language, which is needed for SCons to work.</p>
|
|
|
|
<p>
|
|
|
|
The homepage for Python is <a href="http://www.python.org/download">www.python.org</a>. You should download and install
|
|
|
|
a version of Python suitable for your version of Windows. I would strongly recommend sticking to a version of Python
|
|
|
|
that is 2.x.x, <i>not</i> 3.x.x. This is because lots of legacy software that uses Python is known to work correctly
|
|
|
|
with 2.x.x, but might not necessarily work with 3.x.x. At the time of writing this tutorial, the preferred version of Python
|
|
|
|
was 2.7.1. For purposes of this tutorial, Python is installed to <tt>C:\Python27</tt> . All of the default
|
|
|
|
options for installing Python should be fine.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
The following step is needed since we're going to be calling SCons in such a way that requires the <tt>python</tt>
|
|
|
|
command to be in our <tt>PATH</tt> in MSYS. In your MSYS shell, execute this:
|
|
|
|
</p>
|
|
|
|
<blockquote>
|
|
|
|
<pre width="80" style="background: #CCCCCC; padding: 2mm; border-style: ridge">$ <b>mkdir -p /usr/local/bin</b>
|
|
|
|
$ <b>ln -s /c/Python27/python.exe /usr/local/bin/python</b>
|
|
|
|
</pre>
|
|
|
|
</blockquote>
|
|
|
|
<p>You should now have the <tt>python</tt> command at your disposal in your MSYS shell.</p>
|
|
|
|
<hr />
|
|
|
|
<br />
|
|
|
|
<a name="scons"></a>
|
|
|
|
<h2>Section 4: Installing SCons</h2>
|
|
|
|
<p>We will now install SCons, which is a multi-platform substitute for traditional Make.</p>
|
|
|
|
<p>
|
|
|
|
The homepage for SCons is <a href="http://www.scons.org/download.php">www.scons.org</a>. You should download and install the
|
|
|
|
latest production release. During the install procedure you will be asked to confirm the location of your Python
|
|
|
|
installation.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
SCons gets installed into <tt>C:\Python27\Scripts</tt> because it's basically a Python script.
|
|
|
|
You would normally invoke SCons by using the <tt>scons.bat</tt> script
|
|
|
|
in this directory. However, since we will be invoking SCons from MSYS (which is UNIX-like), we're actually going to call the UNIX script version
|
|
|
|
of SCons, which is the plain-old file <tt>scons</tt> in this same directory. Furthermore, we're going to make sure that the <tt>scons</tt>
|
|
|
|
command is available under MSYS. Execute these commands in your MSYS shell:
|
|
|
|
</p>
|
|
|
|
<blockquote>
|
|
|
|
<pre width="80" style="background: #CCCCCC; padding: 2mm; border-style: ridge">$ <b>mkdir -p /usr/local/bin</b>
|
|
|
|
$ <b>ln -s /c/Python27/Scripts/scons /usr/local/bin/scons</b>
|
|
|
|
</pre>
|
|
|
|
</blockquote>
|
|
|
|
<p>
|
|
|
|
You now have the <tt>scons</tt> command at your disposal in the MSYS shell.
|
|
|
|
</p>
|
|
|
|
<hr />
|
|
|
|
<br />
|
|
|
|
<a name="svn"></a>
|
|
|
|
<h2>Section 5: Installing SVN</h2>
|
|
|
|
<p>
|
|
|
|
We're now going to install a command-line version of the SVN client that we can use from MSYS. We don't need no
|
|
|
|
stinkin' GUI. Anyhow, command-line SVN is required to perform the SCons build target later on.
|
|
|
|
In fact, you don't need to touch TortoiseSVN or any other GUI-based SVN client for any part of this entire tutorial.
|
|
|
|
(I wouldn't touch a GUI-based SVN client with a 10 foot pole given the opportunity to use command-line SVN instead.)
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
The preferred download site for SVN client for Windows is <a href="http://www.collab.net/downloads/subversion/">CollabNet</a>.
|
|
|
|
You should download and install CollabNet Subversion Command-Line Client,
|
|
|
|
<i>not</i> CollabNet Subversion Edge or something of any other nature. Unfortunately you'll have to create an account with CollabNet
|
|
|
|
to download this software, but everything is free. You can use all defaults when installing SVN.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
The CollabNet version of SVN client for Windows should automatically modify your <tt>PATH</tt> , and you should be able to
|
|
|
|
execute the <tt>svn</tt> command in MSYS after closing MSYS and starting it again. If this is not the case for some strange
|
|
|
|
reason, you'll have to tweak your environment to ensure that you can execute the <tt>svn</tt> command from MSYS.
|
|
|
|
</p>
|
|
|
|
<hr />
|
|
|
|
<br />
|
|
|
|
<a name="vcpp"></a>
|
|
|
|
<h2>Section 6: Installing Visual C++</h2>
|
|
|
|
<p>
|
|
|
|
The GtkRadiant developers are currently using Microsoft Visual C++ 2008 to compile GtkRadiant. Even though Visual C++ 2010 is a newer
|
|
|
|
version, don't use it [unless you want to be on your own]. You can download Visual C++ 2008 Express Edition from
|
|
|
|
<a href="http://www.microsoft.com/express/Downloads/#Visual_Studio_2008_Express_Downloads">this Microsoft webpage</a>.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
When you install Visual C++ 2008 Express Edition, you can install the bare minimum application <i>without</i> any extras such as
|
|
|
|
Microsoft Silverlight Runtime or Microsoft SQL Server 2008 Express Edition. For the rest of the install options, the
|
|
|
|
defaults can be chosen.
|
|
|
|
</p>
|
|
|
|
<hr />
|
|
|
|
<br />
|
|
|
|
<a name="sources"></a>
|
|
|
|
<h2>Section 7: Obtaining Source Code, Game Paks, and Libs</h2>
|
|
|
|
<p>We are now ready to get the source code for GtkRadiant.</p>
|
|
|
|
<h3>Step A: Get Base Project</h3>
|
|
|
|
<p>
|
|
|
|
Open an MSYS shell. When you start the shell, you will be in what is called your "home directory". You can execute the
|
|
|
|
<tt>pwd</tt> command in MSYS to find out which directory you are currently in. For example, when I start MSYS, my
|
|
|
|
current directory is <tt>/home/rambetter</tt> . In reality, this path is relative to the MSYS install root.
|
|
|
|
For example, in the Windows operating system, my home directory is actually <tt>C:\MinGw\msys\1.0\home\rambetter</tt> .
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
In any case, we need to create ourselves a work area for purposes of downloading files and compiling software. I would recommend
|
|
|
|
creating a directory <tt>radiant-work</tt> in your home directory. So:
|
|
|
|
</p>
|
|
|
|
<blockquote>
|
|
|
|
<pre width="80" style="background: #CCCCCC; padding: 2mm; border-style: ridge">$ <b>mkdir radiant-work</b>
|
|
|
|
</pre>
|
|
|
|
</blockquote>
|
|
|
|
<p>Now, we're going to change to that directory and get the base GtkRadiant project:</p>
|
|
|
|
<blockquote>
|
|
|
|
<pre width="88" style="background: #CCCCCC; padding: 2mm; border-style: ridge">$ <b>cd radiant-work</b>
|
|
|
|
$ <b>svn checkout https://zerowing.idsoftware.com/svn/radiant/GtkRadiant/trunk ./GtkRadiant</b>
|
|
|
|
</pre>
|
|
|
|
</blockquote>
|
|
|
|
<p>We created the extra <tt>radiant-work</tt> parent directory of <tt>GtkRadiant</tt> because the following step will
|
|
|
|
place many files into the project's parent directory, and we don't want to litter our home directory with these files.</p>
|
|
|
|
<h3>Step B: Execute SCons Build Target</h3>
|
|
|
|
<p>
|
|
|
|
Remember all the work we did earlier in order to install SCons? Well, thanks to all that work we did,
|
|
|
|
obtaining the remaining things we need for compiling is really really easy:
|
|
|
|
</p>
|
|
|
|
<blockquote>
|
|
|
|
<pre width="80" style="background: #CCCCCC; padding: 2mm; border-style: ridge">$ <b>cd GtkRadiant</b>
|
|
|
|
$ <b>scons target=setup</b>
|
|
|
|
</pre>
|
|
|
|
</blockquote>
|
|
|
|
<p>This SCons build target performs several actions:</p>
|
|
|
|
<ul>
|
|
|
|
<li>Downloads "install paks" for several games such as Quake III Arena and Urban Terror.</li>
|
|
|
|
<li>Downloads library dependencies (such as GTK+) for building and running GtkRadiant.</li>
|
|
|
|
<li>Places library dependencies in proper locations.</li>
|
|
|
|
<li>Performs any other actions needed prior to compiling GtkRadiant.</li>
|
|
|
|
</ul>
|
|
|
|
<hr />
|
|
|
|
<br />
|
|
|
|
<a name="compile"></a>
|
|
|
|
<h2>Section 8: Compiling GtkRadiant</h2>
|
|
|
|
<p>We are now finally going to compile GtkRadiant using Microsoft Visual C++.</p>
|
|
|
|
<p>
|
|
|
|
Start Microsoft Visual C++. From the "File" menu, choose "Open" -> "Project/Solution...".
|
|
|
|
Navigate to your <tt>GtkRadiant</tt> directory (in my case <tt>C:\MinGW\msys\1.0\home\rambetter\radiant-work\GtkRadiant</tt>).
|
|
|
|
Choose the project file <tt>radiant_VC9.sln</tt> from this directory.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
You now have the GtkRadiant project loaded in Visual C++. You can poke around if you like, e.g. open up some source code
|
|
|
|
files and edit them.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Before you build the project, you might want to select the "Release" target (as pictured below).
|
|
|
|
</p>
|
|
|
|
<table border="0" cellpadding="0" cellspacing="0">
|
|
|
|
<tr>
|
|
|
|
<td width="20"> </td>
|
|
|
|
<td><img src="vc-radiant-release.png" alt="vc-radiant-release.png"></img></td>
|
|
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
<p>
|
|
|
|
To build GtkRadiant, choose "Build Solution" from the "Build" menu. The build will take
|
|
|
|
about 5 minutes [on a Pentium 4 with HTT], so this would be a good time to go get coffee.
|
|
|
|
</p>
|
|
|
|
<p>If the build completes successfully, you will get a message similar to the following in the output
|
|
|
|
of Visual C++:</p>
|
|
|
|
<blockquote>
|
|
|
|
<pre width="80" style="background: #CCCCCC; padding: 2mm; border-style: ridge">radiant - 0 error(s), 1 warning(s)
|
|
|
|
========== Build: 20 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
|
|
|
|
</pre>
|
|
|
|
</blockquote>
|
|
|
|
<hr />
|
|
|
|
<br />
|
|
|
|
<a name="run"></a>
|
|
|
|
<h2>Section 9: Running GtkRadiant</h2>
|
|
|
|
<p>All of the files needed to run GtkRadiant are going to be in the folder <tt>radiant-work\GtkRadiant\install</tt> [relative
|
|
|
|
to your home directory in MSYS]. You can copy the entire <tt>install</tt> folder to some place such as your Desktop
|
|
|
|
and you can rename this folder to <tt>ZeroRadiant</tt> for example.
|
|
|
|
Then, you will use <tt>radiant.exe</tt> in that directory to launch the application.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
There is one little bit of optional cleanup you can perform on your installation folder. You can remove all SVN-related
|
|
|
|
files since they are no longer needed and only take up disk space. Let's say that you renamed your installation folder
|
|
|
|
to <tt>ZeroRadiant</tt> (as the previous paragraph suggests), and let's say that you're in the MSYS shell, and that your current
|
|
|
|
working directory is the parent directory of <tt>ZeroRadiant</tt>. Then, in your MSYS shell, you can execute this command to
|
|
|
|
delete all SVN-related files (all <tt>.svn</tt> directories):
|
|
|
|
</p>
|
|
|
|
<blockquote>
|
|
|
|
<pre width="80" style="background: #CCCCCC; padding: 2mm; border-style: ridge">$ <b>find ZeroRadiant/ -type d -name '\.svn' -print0 | xargs -0 rm -rf</b>
|
|
|
|
</pre>
|
|
|
|
</blockquote>
|
|
|
|
<p>
|
|
|
|
That's it! Good luck and thanks for reading my tutorial! If you have comments or suggestions please email me at nlandys@gmail.com .
|
|
|
|
More information about GtkRadiant is on <a href="http://www.qeradiant.com/cgi-bin/trac.cgi">www.qeradiant.com</a>.
|
|
|
|
</p>
|
|
|
|
<br />
|
|
|
|
<br />
|
|
|
|
</body>
|
|
|
|
</html>
|