<!--
   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>
 <link rel="stylesheet" type="text/css" href="help.css"></link>
</head>
<body leftmargin="0" topmargin="0" style="width:100%">

  <div id="header">
  
    <a id="clickLink" 
       target="topic"
       href="docs/click.html"><img src="images/click-icon-43.png" border="0"/></a>
    
  	<span id="title">Apache Click</span>
     <span id="version">
    	<a 
  	   target="_blank"
       title="Blog"
       href="http://blogs.apache.org/click/">
       Blog
      </a> 
	    |
  	  <a 
  	   target="topic"
       title="RoadMap and Changes"
       href="docs/roadmap-changes.html">
       Version 2.1.0
      </a> 
    </span>
  </div>
  
</body>
</html>
