<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->






<!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'>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Apache ActiveMQ - Login</title>
    <style type="text/css" media="screen">
        @import url('styles/type-settings.css');
        @import url('styles/site.css');
    </style>



</head>

<body>


<div class="white_box">
    <div class="header">
        <div class="header_l">
            <div class="header_r">
            </div>
        </div>
    </div>
    <div class="content">
        <div class="content_l">
            <div class="content_r">

                <div>

                    <!-- Banner -->
                    <div id="asf_logo">
                        <div id="activemq_logo">
                            <a style="float:left; width:280px;display:block;text-indent:-5000px;text-decoration:none;line-height:60px; margin-top:10px; margin-left:100px;"
                               href="http://activemq.apache.org/"
                               title="The most popular and powerful open source Message Broker">ActiveMQ</a>
                            <a style="float:right; width:210px;display:block;text-indent:-5000px;text-decoration:none;line-height:60px; margin-top:15px; margin-right:10px;"
                               href="http://www.apache.org/" title="The Apache Software Foundation">ASF</a>
                        </div>
                    </div>


                    <div class="top_red_bar">
                        <div id="site-breadcrumbs">
                        </div>
                        <div id="site-quicklinks"><p>
                            <a href="http://activemq.apache.org/support.html"
                               title="Get help and support using Apache ActiveMQ">Support</a></p>
                        </div>
                    </div>

					<div class="body-content">
						<form id="loginForm" method="post" action="j_security_check">
							<div class="navigation">
		                    	<div class="navigation_top">
		                        	<div class="navigation_bottom" id="loginForm">
		                        		<div>
								        	<label for="user">User</label>
								        	<input id="user" name="j_username" maxlength="25" type="text" size="12" value="" autofocus="autofocus"/>
								        </div>
								        <div>	
							        		<label for="pass">Password</label>
						        			<input id="pass" name="j_password" maxlength="25" type="password" size="12" value=""/>
						        		</div>
						        		<div>
						        			<label for="submit">&nbsp;</label>
						        			<input name="submit" type="submit" value="Login"/>
						        		</div>										        
									</div>
								</div>			
		                     </div>
						</form>
					</div>

                    <div class="bottom_red_bar"></div>
                </div>
            </div>
        </div>
    </div>
    <div class="black_box">
        <div class="footer">
            <div class="footer_l">
                <div class="footer_r">
                    <div>
                        Copyright 2005-2013 The Apache Software Foundation.

                        (<a href="?printable=true">printable version</a>)
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<div class="design_attribution"><a href="http://hiramchirino.com/">Graphic Design By Hiram</a></div>

</body>
</html>
