<!--
  ~ 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.
  -->

<html>
 <head><title>Error In Admin Application</title></head>
 <body>
 <table summary="header table" width="100%">
  <tr>
    <td align="left"><img src="../images/asf-logo.gif" alt="Apache Software Foundation Logo"/></td>
    <td align="right"><img src="../images/axis_l.jpg" alt="AXIS Logo"/></td>
    </tr>
</table>
<table summary="main content table" width="100%">
  <tr>
    <td align="center">Server Encountered an Error!</td>
  
    </tr>
    <tr>  <td align="center"><a href="/">home</a></td></tr>
</table>

<hr/>
<table summary="footer table" width="100%">
 <tr>
   <td align="center">All rights reserved by Apache Software Foundation</td>
   </tr>
</table>
 </body>
</html>
