####################################################################################
#
#    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.
#
####################################################################################
<html>
<head>
    <link href="style.css" type="text/css" rel="stylesheet"/>
</head>

<body>
<a href="archives.html">archives</a> - <a href="licenses.html">licenses</a> - <a href="notices.html">notices</a> - <a href="content">contents</a><br/><br/>

<h1>Archives</h1>
<ul>
    #foreach($archive in $archives)
        <li>$archive.uri  (<a href="${reports.licenses($archive)}">licenses</a>, <a href="$reports.notices($archive)">notices</a>, <a href="content/${archive.uri}.contents">contents</a>)
            <ul> Declared
                #foreach($file in $archive.legal.entrySet())
                    <li><a href="$file.value">$file.key</a></li>
                #end
            </ul>
            #if ($archive.otherLegal.size() > 0 )
                <ul> Jars
                    #foreach($file in $archive.otherLegal.entrySet())
                        <li><a href="$file.value">$file.key</a></li>
                    #end
                </ul>
            #end
        </li>
    #end
</ul>
</body>
</html>