<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
 * 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.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
  <bannerLeft>
    <name>Apache HTrace</name>
    <href>http://htrace.incubator.apache.org/</href>
  </bannerLeft>
  <bannerRight>
    <name />
  </bannerRight>
  <body>
    <menu name="Apache HTrace Project">
      <item name="Overview" href="index.html"/>
      <item name="License" href="license.html" />
      <item name="Downloads" href="http://www.apache.org/dyn/closer.cgi/htrace/" />
      <item name="Distribution" href="dependency-management.html" />
      <item name="Dependency" href="dependency-info.html" />
      <item name="Issue Tracking" href="issue-tracking.html" />
      <item name="CI" href="integration.html" />
      <item name="Mailing Lists" href="mail-lists.html" />
      <item name="Source Repository" href="source-repository.html" />
      <item name="Modules" href="modules.html" />
      <item name="Project Info" href="project-info.html" />
      <item name="Team" href="team-list.html" />
    </menu>
    <menu name="ASF">
        <item name="Apache Software Foundation"      href="http://www.apache.org/foundation/" />
        <item name="How Apache Works"      href="http://www.apache.org/foundation/how-it-works.html" />
        <item name="Sponsoring Apache"      href="http://www.apache.org/foundation/sponsorship.html" />
    </menu>
  </body>
 <custom>
    <reflowSkin>
      <theme>bootswatch-flatly</theme>
      <toc>top</toc>
      <highlightJs>true</highlightJs>
      <slogan position="bannerRight">A tracing framework for use with distributed systems written in java</slogan>
      <bottomNav>
        <column>Home</column>
      </bottomNav>
    </reflowSkin>
 </custom>
    <skin>
      <groupId>lt.velykis.maven.skins</groupId>
      <artifactId>reflow-maven-skin</artifactId>
      <version>1.1.1</version>
    </skin>
</project>
