<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
   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.
-->
<!-- Generated by Apache Maven Doxia at $dateFormat.format( $currentDate ) -->
#macro ( link $href $name $target $img $position $alt $border $width $height )
	#set ( $linkTitle = ' title="' + $name + '"' )
	#if( $target )
		#set ( $linkTarget = ' target="' + $target + '"' )
	#else
		#set ( $linkTarget = "" )
	#end
	#if ( $href.toLowerCase().startsWith("http:/") || $href.toLowerCase().startsWith("https:/") ||
		$href.toLowerCase().startsWith("ftp:/") || $href.toLowerCase().startsWith("mailto:/") ||
		$href.toLowerCase().startsWith("file:/") || ($href.toLowerCase().indexOf("://") != -1) )
		#set ( $linkClass = ' class="external" target="_blank"' )

		#if ( $linkTarget )
		#else
			#set ( $linkTarget = "_blank" )
		#end

	#else
		#set ( $linkClass = "" )
	#end
	#if ( $img )
		#if ( $position == "left" )
			<a href="$href"$linkClass$linkTarget$linkTitle>#image($img $alt $border $width $height)$name</a>
		#else
			<a href="$href"$linkClass$linkTarget$linkTitle>$name #image($img $alt $border $width $height)</a>
		#end
	#else
		<a href="$href"$linkClass$linkTarget$linkTitle>$name</a>
	#end
#end
##
#macro ( image $img $alt $border $width $height )
  #if( $img )
    #if ( ! ( $img.toLowerCase().startsWith("http:/") || $img.toLowerCase().startsWith("https:/") ||
            $img.toLowerCase().startsWith("ftp:/") || $img.toLowerCase().startsWith("mailto:/") ||
            $img.toLowerCase().startsWith("file:/") || ($img.toLowerCase().indexOf("://") != -1) ) )
      #set ( $imgSrc = $PathTool.calculateLink( $img, $relativePath ) )
      #set ( $imgSrc = $imgSrc.replaceAll( '\\', '/' ) )
      #set ( $imgSrc = ' src="' + $imgSrc + '"' )
    #else
      #set ( $imgSrc = ' src="' + $img + '"' )
    #end
    #if( $alt )
      #set ( $imgAlt = ' alt="' + $alt + '"' )
    #else
      #set ( $imgAlt = ' alt=""' )
    #end
    #if( $border )
      #set ( $imgBorder = ' border="' + $border + '"' )
    #else
      #set ( $imgBorder = "" )
    #end
    #if( $width )
      #set ( $imgWidth = ' width="' + $width + '"' )
    #else
      #set ( $imgWidth = "" )
    #end
    #if( $height )
      #set ( $imgHeight = ' height="' + $height + '"' )
    #else
      #set ( $imgHeight = "" )
    #end
    <img class="imageLink"$imgSrc$imgAlt$imgBorder$imgWidth$imgHeight/>
  #end
#end
#macro ( banner $banner $id )
  #if ( $banner )
    #if( $banner.href )
      #set ( $hrf = $banner.href )
      #if ( ! ( $hrf.toLowerCase().startsWith("http:/") || $hrf.toLowerCase().startsWith("https:/") ||
        $hrf.toLowerCase().startsWith("ftp:/") || $hrf.toLowerCase().startsWith("mailto:/") ||
        $hrf.toLowerCase().startsWith("file:/") || ($hrf.toLowerCase().indexOf("://") != -1) ) )
        #set ( $hrf = $PathTool.calculateLink( $hrf, $relativePath ) )
        #set ( $hrf = $hrf.replaceAll( '\\', '/' ) )
        #if ( ( $hrf == '' ) )
          #set ( $hrf = './' )
        #end
      #end
      <a href="$hrf" id="$id"#if( $banner.alt ) title="$banner.alt"#end>
    #else
        <div id="$id">
    #end
##
    #if( $banner.src )
        #set ( $src = $banner.src )
        #if ( ! ( $src.toLowerCase().startsWith("http:/") || $src.toLowerCase().startsWith("https:/") ||
                $src.toLowerCase().startsWith("ftp:/") || $src.toLowerCase().startsWith("mailto:/") ||
                $src.toLowerCase().startsWith("file:/") || ($src.toLowerCase().indexOf("://") != -1) ) )
            #set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
            #set ( $src = $src.replaceAll( '\\', '/' ) )
        #end
        #if ( $banner.alt )
            #set ( $alt = $banner.alt )
        #else
            #set ( $alt = $banner.name )
        #end
        <img src="$src" alt="$alt" />
    #else
        $banner.name
    #end
##
    #if( $banner.href )
        </a>
    #else
        </div>
    #end
  #end
#end
##
#macro ( links $links )
	<ul class="nav">
	#set ( $counter = 0 )
	#foreach( $item in $links )
		#set ( $counter = $counter + 1 )
		#set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
		#set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
		#set ( $activeClass = "" )
		#if ( $alignedFileName == $currentItemHref)
			#set ( $activeClass = ' class="active"' )
		#end
		<li$activeClass>
		#link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
		</li>
	#end
	</ul>
#end
##
#macro ( breadcrumbs $breadcrumbs )
	#foreach( $item in $breadcrumbs )
		#set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
		#set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
		#if ( ( $currentItemHref == '' ) )
			#set ( $currentItemHref = './' )
		#end
##
			#link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
			<span class="divider">&gt;</span>
	#end
	$title
#end
##
#macro ( displayTree $display $item )
	#if ( $item && $item.items && $item.items.size() > 0 )
		#foreach( $subitem in $item.items )
			#set ( $subitemHref = $PathTool.calculateLink( $subitem.href, $relativePath ) )
			#set ( $subitemHref = $subitemHref.replaceAll( '\\', '/' ) )
##
			#if ( $alignedFileName == $subitemHref )
				#set ( $display = true )
			#end
##
			#displayTree( $display $subitem )
		#end
	#end
#end
##
#macro ( menuItem $item $isComponentDocumentation )
	#set ( $collapse = "none" )
	#set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
	#set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
##
	#if ( $item && $item.items && $item.items.size() > 0 )
		#if ( $item.collapse == false )
			#set ( $collapse = "expanded" )
		#else
			## By default collapsed
			#set ( $collapse = "collapsed" )
		#end
##
		#set ( $display = false )
		#displayTree( $display $item )
##
		#if ( $alignedFileName == $currentItemHref || $display )
			#set ( $collapse = "expanded" )
		#end
	#end
	#set ( $active = "" )
	#if ( $alignedFileName == $currentItemHref )
	#set ($active = " active")
	#end
	#set ( $thisProjectDir = "../${project.artifactId}" )
	#if ($thisProjectDir == $PathTool.getDirectoryComponent( $item.href ))
	#set ($active = " active")
	#end
	#if (${project.artifactId} != "log4net" && $isComponentDocumentation &&
				($item.href == "team-list.html" || $item.href == "mail-lists.html"
				|| $item.href == "issue-tracking.html" || $item.href == "license.html"
				|| $item.href == "source-repository.html"))
	<!-- Removing overall project item $item.name from component-specific menu -->
	#else
		#set ($thisItemName = $item.name)
		#if (${project.artifactId} != "log4net" && $isComponentDocumentation )
		#set ($thisItemName = $item.name.replace("Project Information", "Component Project"))
		#set ($thisItemName = $item.name.replace("Project", "Component"))
		#end
		<li class="$collapse$active">
		#link($currentItemHref $thisItemName $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
		#if ( $item && $item.items && $item.items.size() > 0 )
			#if ( $collapse == "expanded" )
				<ul>
					#foreach( $subitem in $item.items )
						#menuItem( $subitem $isComponentDocumentation )
					#end
				</ul>
			#end
		#end
		</li>
 	#end
#end
##
#macro ( mainMenu $menus )
	#foreach( $menu in $menus )
		<ul class="nav nav-list">
		#set ($isComponentDocumentation = false)
 		#if ( $menu.name )
			#set ( $menuName = $menu.name )
			#if ( $menuName == "Project Documentation" )
			#set ( $menuName = "Component Documentation" )
			#set ($isComponentDocumentation = true)
			#end
			#if ( $menu.img )
			 <li class="nav-header"><i class="$menu.img"></i>$menuName</li>
			#else
			 <li class="nav-header">$menuName</li>
			#end
		#end
		#if ( $menu.items && $menu.items.size() > 0 )
			#foreach( $item in $menu.items )
				#menuItem( $item $isComponentDocumentation )
			#end
		#end
		</ul>
	#end
#end
##
#macro ( copyright )
  #if ( $project )
    #if ( ${project.organization} && ${project.organization.name} )
      #set ( $period = "" )
    #else
      #set ( $period = "." )
   #end
##
   #set ( $currentYear = ${currentDate.year} + 1900 )
##
    #if ( ${project.inceptionYear} && ( ${project.inceptionYear} != ${currentYear.toString()} ) )
      ${project.inceptionYear}-${currentYear}${period}
    #else
      ${currentYear}${period}
    #end
##
    #if ( ${project.organization} )
      #if ( ${project.organization.name} && ${project.organization.url} )
          <a href="$project.organization.url">${project.organization.name}</a>.
      #elseif ( ${project.organization.name} )
        ${project.organization.name}.
      #end
    #end
  #end
#end
##
#macro ( publishDate $position $publishDate $version )
	#if ( $publishDate && $publishDate.format )
		#set ( $format = $publishDate.format )
	#else
		#set ( $format = "yyyy-MM-dd" )
	#end
##
	$dateFormat.applyPattern( $format )
##
	#set ( $dateToday = $dateFormat.format( $currentDate ) )
##
	#if ( $publishDate && $publishDate.position )
		#set ( $datePosition = $publishDate.position )
	#else
		#set ( $datePosition = "left" )
	#end
##
	#if ( $version )
		#if ( $version.position )
			#set ( $versionPosition = $version.position )
		#else
			#set ( $versionPosition = "left" )
		#end
	#else
		#set ( $version = "" )
		#set ( $versionPosition = "left" )
	#end
##
	#set ( $breadcrumbs = $decoration.body.breadcrumbs )
	#set ( $links = $decoration.body.links )

	#if ( $datePosition.equalsIgnoreCase( $position ) )
		#if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( $datePosition.equalsIgnoreCase( "bottom" ) ) )
			<span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
			#if ( $versionPosition.equalsIgnoreCase( $position ) )
				<span class="divider">|</span> <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
			#end
		#elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $datePosition.equalsIgnoreCase( "navigation-top" ) ) )
			<div id="lastPublished">
				<span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
				#if ( $versionPosition.equalsIgnoreCase( $position ) )
					<span class="divider">|</span> <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
				#end
			</div>
		#elseif ( $datePosition.equalsIgnoreCase("left") )
			<div class="pull-left">
				<span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
				#if ( $versionPosition.equalsIgnoreCase( $position ) )
					<span class="divider">|</span> <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
				#end
				#if ( $breadcrumbs && $breadcrumbs.size() > 0 )
					<span class="divider">|</span> #breadcrumbs( $breadcrumbs )
				#end
			</div>
		#end
	#elseif ( $versionPosition.equalsIgnoreCase( $position ) )
		#if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || ( $versionPosition.equalsIgnoreCase( "bottom" ) ) )
			$prefix <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
		#elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) )
			<div id="lastPublished">
				<span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
			</div>
		#elseif ( $versionPosition.equalsIgnoreCase("left") )
			<div class="pull-left">
				<span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
				#if ( $breadcrumbs && $breadcrumbs.size() > 0 )
					<span class="divider">|</span> #breadcrumbs( $breadcrumbs )
				#end
			</div>
		#end
	#elseif ( $position.equalsIgnoreCase( "left" ) )
		#if ( $breadcrumbs && $breadcrumbs.size() > 0 )
			<div class="pull-left">
				#breadcrumbs( $breadcrumbs )
			</div>
		#end
	#end
#end
##
#macro ( poweredByLogo $poweredBy )
	#if( $poweredBy )
		#foreach ($item in $poweredBy)
			#if( $item.href )
				#set ( $href = $PathTool.calculateLink( $item.href, $relativePath ) )
				#set ( $href = $href.replaceAll( '\\', '/' ) )
			#else
				#set ( $href="http://maven.apache.org/" )
			#end
##
			#if( $item.name )
				#set ( $name = $item.name )
			#else
				#set ( $name = $i18n.getString( "site-renderer", $locale, "template.builtby" )	)
				#set ( $name = "${name} Maven"	)
			#end
##
			#if( $item.img )
				#set ( $img = $item.img )
			#else
				#set ( $img = "images/maven-feather.png" )
			#end
##
			#if ( ! ( $img.toLowerCase().startsWith("http:/") || $img.toLowerCase().startsWith("https:/") ||
						$img.toLowerCase().startsWith("ftp:/") || $img.toLowerCase().startsWith("mailto:/") ||
						$img.toLowerCase().startsWith("file:/") || ($img.toLowerCase().indexOf("://") != -1) ) )
				#set ( $img = $PathTool.calculateLink( $img, $relativePath ) )
				#set ( $img = $img.replaceAll( '\\', '/' ) )
			#end
##
			#if( $item.alt )
				#set ( $alt = ' alt="' + $item.alt + '"' )
			#else
				#set ( $alt = ' alt="' + $name + '"' )
			#end
##
			#if( $item.border )
				#set ( $border = ' border="' + $item.border + '"' )
			#else
				#set ( $border = "" )
			#end
##
			#if( $item.width )
				#set ( $width = ' width="' + $item.width + '"' )
			#else
				#set ( $width = "" )
			#end
			#if( $item.height )
				#set ( $height = ' height="' + $item.height + '"' )
			#else
				#set ( $height = "" )
			#end
##
			<a href="$href" title="$name" class="poweredBy">
				<img class="poweredBy" $alt src="$img" $border $width $height />
			</a>
		#end
		#if( $poweredBy.isEmpty() )
			<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
				<img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/maven-feather.png" />
			</a>
		#end
	#else
		<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
			<img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/maven-feather.png" />
		</a>
	#end
#end
##
#macro ( googleAnalytics $accountId )
	#if( $accountId && $accountId != "" )
		<!-- Google Analytics -->
		<script type="text/javascript">

			var _gaq = _gaq || [];
			_gaq.push(['_setAccount', '$accountId']);
			_gaq.push (['_gat._anonymizeIp']);
			_gaq.push(['_trackPageview']);

			(function() {
				var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
				ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
				var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
			})();

		</script>
	#end
#end
##
<html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
		<title>$title - $project.name</title>
		<link rel="stylesheet" href="$relativePath/css/bootstrap.min.css" type="text/css" />
		<link rel="stylesheet" href="$relativePath/css/site.css" type="text/css" />
		<script type="text/javascript" src="$relativePath/js/jquery.min.js"></script>
		<script type="text/javascript" src="$relativePath/js/bootstrap.min.js"></script>
		<script type="text/javascript" src="$relativePath/js/prettify.min.js"></script>
		<script type="text/javascript" src="$relativePath/js/site.js"></script>
#foreach( $author in $authors )
      <meta name="author" content="$author" />
#end
#if ( $dateCreation )
    <meta name="Date-Creation-yyyymmdd" content="$dateCreation" />
#end
#if ( $dateRevision )
    <meta name="Date-Revision-yyyymmdd" content="$dateRevision" />
#end
#if ( $locale )
    <meta http-equiv="Content-Language" content="$locale.language" />
#end
		$headContent
		#googleAnalytics( $decoration.googleAnalyticsAccountId )
	</head>
	<body class="composite">
		<a href="https://logging.apache.org/">
			<img class="logo-left" src="$relativePath/images/ls-logo.jpg" alt="Apache logging services logo" />
		</a>
		<!--img class="logo-right" src="$relativePath/images/logo.png" alt="Apache log4net logo" /-->
		<div class="clear"></div>

		<div class="navbar">
			<div class="navbar-inner">
				<div class="container-fluid">
					<a class="brand" href="$project.url">$project.name &trade;</a>
					#links( $decoration.body.links )
				</div>
			</div>
		</div>

		<div class="container-fluid">
			<table class="layout-table">
				<tr>
					<td class="sidebar">
						<div class="well sidebar-nav">
							#mainMenu( $decoration.body.menus )
						</div>
						<div id="poweredBy">
							#poweredByLogo( $decoration.poweredBy )
						</div>
					</td>
					<td class="content">
						$bodyContent
					</td>
				</tr>
			</table>
		</div>

		<div class="footer">
			#set ( $currentYear = ${currentDate.year} + 1900 )
				<p>Copyright &copy; ${project.inceptionYear}-${currentYear} <a class="external" href="$project.organization.url">${project.organization.name}</a>. All Rights Reserved.</p>
				<p>Apache log4net, Apache, log4net, the Apache feather logo, the Apache Logging Services project logo and the Built by Maven logo are trademarks of The Apache Software Foundation.</p>
				<p>Site powered by <a class="external" href="http://getbootstrap.com/">Twitter Bootstrap</a>. Icons from <a class="external" href="http://glyphicons.com/">Glyphicons Free</a>.</p>
			</div>
		</div>
	</body>
</html>
