<!DOCTYPE html>
## 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.
##
#parse( "default-site-macros.vm" )
<!--
 | Generated by #generatedBy()
#if( $docRenderingContext && ( $docRenderingContext.generator || $docRenderingContext.doxiaSource ) ) from##
#**##if( $docRenderingContext.generator ) $docRenderingContext.generator#end##
#**##if( $docRenderingContext.doxiaSource ) $docRenderingContext.doxiaSourcePath#end##
#end
 at $dateFormat.format( $currentDate )

 | Rendered using Apache Maven Default Skin
-->
##
<html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end>
  <head>
    <meta charset="${outputEncoding}" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
## put meta together
    <meta name="generator" content="#generatedBy()" />
#foreach( $author in $authors )
    <meta name="author" content="$author" />
#end
#if ( $documentDate )
    <meta name="date" content="$documentDate" />
#end
    <title>$title</title>
    <link rel="stylesheet" href="$relativePath/css/maven-base.css" />
    <link rel="stylesheet" href="$relativePath/css/maven-theme.css" />
    <link rel="stylesheet" href="$relativePath/css/site.css" />
    <link rel="stylesheet" href="$relativePath/css/print.css" media="print" />
#**##if( $decoration.body.head )
#*  *#$render.eval( $decoration.body.head )
#**##end
#**##if( $headContent )$headContent#end
#**##googleAnalytics( $decoration.googleAnalyticsAccountId )
  </head>
  <body class="composite">
    <div id="banner">
#*  *##banner( $decoration.bannerLeft "bannerLeft" )
#*  *##banner( $decoration.bannerRight "bannerRight" )
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
#*  *##publishDate( "left" $decoration.publishDate $decoration.version )
      <div class="xright">#links( $decoration.body.links )
#*  *##publishDate( "right" $decoration.publishDate $decoration.version )
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
#*   *##publishDate( "navigation-top" $decoration.publishDate $decoration.version )
#*   *##mainMenu( $decoration.body.menus )
#*   *##poweredByLogo( $decoration.poweredBy )
#*   *##publishDate( "navigation-bottom" $decoration.publishDate $decoration.version )
      </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
#*   *#$bodyContent
      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">
#*  *##if( $decoration.body.footer )
        $render.eval( $decoration.body.footer )
#*  *##else
        Copyright &#169;#copyright().#publishDate( "bottom" $decoration.publishDate $decoration.version )
#*  *##end
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
