<?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.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.8.0 http://maven.apache.org/xsd/decoration-1.8.0.xsd">

  <bannerLeft>
    <name>${project.name}</name>
    <src>https://maven.apache.org/images/apache-maven-project.png</src>
    <href>https://www.apache.org/</href>
  </bannerLeft>

  <bannerRight>
    <src>https://maven.apache.org/images/maven-logo-black-on-white.png</src>
    <href>https://maven.apache.org/</href>
  </bannerRight>

  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.9</version>
  </skin>

  <edit>${project.scm.url}</edit>
  <googleAnalyticsAccountId>UA-140879-1</googleAnalyticsAccountId>

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

  <body>

    <breadcrumbs>
      <item name="Apache" href="https://www.apache.org/" />
      <item name="Maven"  href="https://maven.apache.org/index.html" />
      <item name="Parent POMs" href="https://maven.apache.org/pom/index.html" />
      <item name="ASF"    href="https://maven.apache.org/pom/asf/index.html" />
    </breadcrumbs>

    <menu name="Overview">
      <item name="Introduction" href="index.html"/>
      <!-- According to https://issues.apache.org/jira/browse/MNGSITE-152 -->
      <item name="License" href="https://www.apache.org/licenses/"/>
      <item name="Download" href="download.html"/>
    </menu>

    <menu ref="reports" />

    <!-- Copied from Maven parent's site.xml, removing inherit="bottom" -->
    <menu name="Maven Projects">
      <item name="Archetype"         href="https://maven.apache.org/archetype/index.html" />
      <item name="Artifact Resolver" href="https://maven.apache.org/resolver/index.html" />
      <item name="Doxia"             href="https://maven.apache.org/doxia/index.html" />
      <item name="JXR"               href="https://maven.apache.org/jxr/index.html" />
      <item name="Maven"             href="https://maven.apache.org/ref/current" />
      <item name="Parent POMs"       href="https://maven.apache.org/pom/index.html" />
      <item name="Plugins"           href="https://maven.apache.org/plugins/index.html" />
      <item name="Plugin Testing"    href="https://maven.apache.org/plugin-testing/index.html" />
      <item name="Plugin Tools"      href="https://maven.apache.org/plugin-tools/index.html" />
      <item name="Resource Bundles"  href="https://maven.apache.org/apache-resource-bundles/index.html" />
      <item name="SCM"               href="https://maven.apache.org/scm/index.html" />
      <item name="Shared Components" href="https://maven.apache.org/shared/index.html" />
      <item name="Skins"             href="https://maven.apache.org/skins/index.html" />
      <item name="Surefire"          href="https://maven.apache.org/surefire/index.html" />
      <item name="Wagon"             href="https://maven.apache.org/wagon/index.html" />
    </menu>
    <menu name="ASF">
      <item name="How Apache Works"  href="https://www.apache.org/foundation/how-it-works.html"/> 
      <item name="Foundation"        href="https://www.apache.org/foundation/"/>
      <item name="Sponsoring Apache" href="https://www.apache.org/foundation/sponsorship.html"/>
      <item name="Thanks"            href="https://www.apache.org/foundation/thanks.html"/>
    </menu>

  </body>
</project>