<footer class="site-footer">

  <div class="wrapper">

    <div class="footer-col-wrapper">
      {% if site.data.project.podling %}
      {{ site.data.project.name }} is an effort undergoing <a href="https://incubator.apache.org/index.html">Incubation</a> at The Apache Software Foundation (ASF), sponsored by the Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
      <hr>
      {% endif %}
      <div style="text-align:center;">
      {% if site.data.project.podling %}
          <div style="margin-top: 20px; margin-bottom: 20px;">
              <a href="http://incubator.apache.org"><img src="/assets/img/egg-logo.png" alt="Apache Incubator"/></a>
          </div>
      {% endif %}
          <div>
          Copyright &copy; 2016 <a href="http://www.apache.org">The Apache Software Foundation</a>.
          Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
          <br>
          {% if site.data.project.podling %}
              Apache, the Apache Feather logo, and the Apache Incubator project logo are trademarks of The Apache Software Foundation.
          {% else %}
              Apache and the Apache Feather logo are trademarks of The Apache Software Foundation.
          {% endif %}
          </div>
          
      </div>
    </div>

  </div>

  {% include themes/apache/analytics/google-analytics %}

</footer>
