<?xml version="1.0"?>
<!--
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.
-->
<!--
 +======================================================================+
 |****                                                              ****|
 |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
 |****                    DO NOT EDIT DIRECTLY                      ****|
 |****                                                              ****|
 +======================================================================+
 | TEMPLATE FILE: download-page-template.xml                            |
 | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
 +======================================================================+
 |                                                                      |
 | 1) Re-generate using: mvn commons-build:download-page                |
 |                                                                      |
 | 2) Set the following properties in the component's pom:              |
 |    - commons.componentid     (required, alphabetic, lower case)      |
 |    - commons.release.version (required)                              |
 |    - commons.release.name    (required)                              |
 |    - commons.binary.suffix   (optional)                              |
 |      (defaults to "-bin", set to "" for pre-maven2 releases)         |
 |    - commons.release.desc    (optional)                              |
 |    - commons.release.subdir  (optional)                              |
 |    - commons.release.hash    (optional, lowercase, default sha512)   |
 |                                                                      |
 |    - commons.release.[234].version       (conditional)               |
 |    - commons.release.[234].name          (conditional)               |
 |    - commons.release.[234].binary.suffix (optional)                  |
 |    - commons.release.[234].desc          (optional)                  |
 |    - commons.release.[234].subdir        (optional)                  |
 |    - commons.release.[234].hash       (optional, lowercase, [sha512])|
 |                                                                      |
 | 3) Example Properties                                                |
 |    (commons.release.name inherited by parent:                        |
 |     ${project.artifactId}-${commons.release.version}                 |
 |                                                                      |
 |  <properties>                                                        |
 |    <commons.componentid>math</commons.componentid>                   |
 |    <commons.release.version>1.2</commons.release.version>            |
 |  </properties>                                                       |
 |                                                                      |
 +======================================================================+
-->
<document>
  <properties>
    <title>Download Apache Commons RNG</title>
    <author email="dev@commons.apache.org">Apache Commons Documentation Team</author>
  </properties>
  <body>
    <section name="Download Apache Commons RNG">
    <subsection name="Using a Mirror">
      <p>
        We recommend you use a mirror to download our release
        builds, but you <strong>must</strong> <a href="https://www.apache.org/info/verification.html">verify the integrity</a> of
        the downloaded files using signatures downloaded from our main
        distribution directories. Recent releases (48 hours) may not yet
        be available from all the mirrors.
      </p>

      <p>
        You are currently using <b>[preferred]</b>.  If you
        encounter a problem with this mirror, please select another
        mirror.  If all mirrors are failing, there are <i>backup</i>
        mirrors (at the end of the mirrors list) that should be
        available.
        <br></br>
        [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
      </p>

      <form action="[location]" method="get" id="SelectMirror">
        <p>
          Other mirrors:
          <select name="Preferred">
          [if-any http]
            [for http]<option value="[http]">[http]</option>[end]
          [end]
          [if-any ftp]
            [for ftp]<option value="[ftp]">[ftp]</option>[end]
          [end]
          [if-any backup]
            [for backup]<option value="[backup]">[backup] (backup)</option>[end]
          [end]
          </select>
          <input type="submit" value="Change"></input>
        </p>
      </form>

      <p>
        It is essential that you
        <a href="https://www.apache.org/info/verification.html">verify the integrity</a>
        of downloaded files, preferably using the <code>PGP</code> signature (<code>*.asc</code> files);
        failing that using the <code>SHA512</code> hash (<code>*.sha512</code> checksum files).
      </p>
      <p>
        The <a href="https://www.apache.org/dist/commons/KEYS">KEYS</a>
        file contains the public PGP keys used by Apache Commons developers
        to sign releases.
      </p>
    </subsection>
    </section>
    <section name="Apache Commons RNG 1.5 (requires Java 8+)">
      <subsection name="Binaries">
        <table>
          <tr>
              <td><a href="[preferred]/commons/rng/binaries/commons-rng-1.5-bin.tar.gz">commons-rng-1.5-bin.tar.gz</a></td>
              <td><a href="https://www.apache.org/dist/commons/rng/binaries/commons-rng-1.5-bin.tar.gz.sha512">sha512</a></td>
              <td><a href="https://www.apache.org/dist/commons/rng/binaries/commons-rng-1.5-bin.tar.gz.asc">pgp</a></td>
          </tr>
          <tr>
              <td><a href="[preferred]/commons/rng/binaries/commons-rng-1.5-bin.zip">commons-rng-1.5-bin.zip</a></td>
              <td><a href="https://www.apache.org/dist/commons/rng/binaries/commons-rng-1.5-bin.zip.sha512">sha512</a></td>
              <td><a href="https://www.apache.org/dist/commons/rng/binaries/commons-rng-1.5-bin.zip.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>
      <subsection name="Source">
        <table>
          <tr>
              <td><a href="[preferred]/commons/rng/source/commons-rng-1.5-src.tar.gz">commons-rng-1.5-src.tar.gz</a></td>
              <td><a href="https://www.apache.org/dist/commons/rng/source/commons-rng-1.5-src.tar.gz.sha512">sha512</a></td>
              <td><a href="https://www.apache.org/dist/commons/rng/source/commons-rng-1.5-src.tar.gz.asc">pgp</a></td>
          </tr>
          <tr>
              <td><a href="[preferred]/commons/rng/source/commons-rng-1.5-src.zip">commons-rng-1.5-src.zip</a></td>
              <td><a href="https://www.apache.org/dist/commons/rng/source/commons-rng-1.5-src.zip.sha512">sha512</a></td>
              <td><a href="https://www.apache.org/dist/commons/rng/source/commons-rng-1.5-src.zip.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>
    </section>
    <section name="Archives">
        <p>
          Older releases can be obtained from the archives.
        </p>
        <ul>
          <li class="download"><a href="[preferred]/commons/rng/">browse download area</a></li>
          <li><a href="https://archive.apache.org/dist/commons/rng/">archives...</a></li>
        </ul>
    </section>
  </body>
</document>
