<!--
 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.

-->
<project	xmlns="http://maven.apache.org/DECORATION/1.4.0"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd"
			name="log4cxx">
	<skin>
		<groupId>org.apache.maven.skins</groupId>
		<artifactId>maven-fluido-skin</artifactId>
		<version>1.6</version>
	</skin>

	<custom>
		<fluidoSkin>
			<sourceLineNumbersEnabled>true</sourceLineNumbersEnabled>
		</fluidoSkin>
	</custom>

	<publishDate	position="right" />
	<version		position="right" />

	<bannerLeft>
		<name>Logging Services</name>
		<src>images/logos/ls-logo.jpg</src>
		<href>http://logging.apache.org</href>
		<title>Open the Apache Logging homepage</title>
	</bannerLeft>

	<body>
		<links>
			<item	name="Logging Wiki"
					href="https://wiki.apache.org/logging"
			/>
			<item	name="Apache"
					href="https://www.apache.org/"
			/>
			<item	name="Logging Services"
					href="https://logging.apache.org/"
			/>
			<item	name="GitHub"
					href="https://github.com/apache/logging-log4cxx"
			/>
		</links>

		<menu	name="About"
				img="icon-home">
			<item	name="What is log4cxx?"
					href="/index.html"
			/>
			<item	name="Project Information"
					href="project-info.html"
			/>
			<item	name="Generated Reports"
					href="project-reports.html"
			/>
		</menu>

		<menu	name="Usage"
				img="icon-book">
			<item	name="How to use log4cxx?"
					href="/usage.html"
			/>
			<item	name="API Documentation"
					href="/apidocs/index.html"
			/>
			<item	name="FAQ"
					href="/faq.html"
			/>
		</menu>

		<menu	name="Get"
				img="icon-cog">
			<item	name="Download"
					href="/download.html"
			/>
			<item	name="Changes"
					href="/changes-report.html"
			/>
			<item	name="License"
					href="/license.html"
			/>
		</menu>

		<menu	name="Community"
				img="icon-pencil">
			<item	name="Mailing Lists"
					href="/mail-lists.html"
			/>
			<item	name="Issue Tracking"
					href="/community/issue-tracking.html"
			/>
			<item	name="Wiki"
					href="http://wiki.apache.org/logging-log4cxx"
			/>
		</menu>

		<menu	name="Development"
				img="icon-pencil">
			<item	name="Repository"
					href="/source-repository.html"
			/>
			<item	name="Dependencies"
					href="dependencies.html"
			/>
			<item	name="Building"
					href="/building/index.html">
				<item	name="autotools"
						href="/building/autotools.html"
				/>
				<item	name="Apache Ant"
						href="/building/ant.html"
				/>
				<item	name="Apache Maven 2"
						href="/building/maven.html"
				/>
				<item	name="Microsoft Visual Studio"
						href="/building/vstudio.html"
				/>
				<item	name="Apple Xcode"
						href="/building/xcode.html"
				/>
			</item>
		</menu>

		<menu	name="Apache"
				img="icon-info-sign">
			<item	name="Home"
					href="http://www.apache.org"
			/>
			<item	name="Sponsorship"
					href="http://www.apache.org/foundation/sponsorship.html"
			/>
			<item	name="Thanks"
					href="http://www.apache.org/foundation/thanks.html"
			/>
			<item	name="Conferences"
					href="http://www.apachecon.com"
			/>
		</menu>
	</body>
</project>
