<?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: issue-tracking-template.xml                           |
 | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
 +======================================================================+
 |                                                                      |
 | 1) Re-generate using: mvn commons:jira-page                          |
 |                                                                      |
 | 2) Set the following properties in the component's pom:              |
 |    - commons.jira.id  (required, alphabetic, upper case)             |
 |    - commons.jira.pid (required, numeric)                            |
 |                                                                      |
 | 3) Example Properties                                                |
 |                                                                      |
 |  <properties>                                                        |
 |    <commons.jira.id>MATH</commons.jira.id>                           |
 |    <commons.jira.pid>12310485</commons.jira.pid>                     |
 |  </properties>                                                       |
 |                                                                      |
 +======================================================================+
-->
<document>
  <properties>
    <title>Apache Commons RNG Issue tracking</title>
    <author email="dev@commons.apache.org">Commons Documentation Team</author>
  </properties>
  <body>

    <section name="Apache Commons RNG Issue tracking">
      <p>
      Apache Commons RNG uses <a href="https://issues.apache.org/jira/">ASF JIRA</a> for tracking issues.
      See the <a href="https://issues.apache.org/jira/browse/RNG">Apache Commons RNG JIRA project page</a>.
      </p>

      <p>
      To use JIRA you may need to <a href="https://issues.apache.org/jira/secure/Signup!default.jspa">create an account</a>
      (if you have previously created/updated Commons issues using Bugzilla an account will have been automatically
      created and you can use the <a href="https://issues.apache.org/jira/secure/ForgotPassword!default.jspa">Forgot Password</a>
      page to get a new password).
      </p>

      <p>
      If you would like to report a bug, or raise an enhancement request with
      Apache Commons RNG please do the following:
      <ol>
        <li><a href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12320623&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=1&amp;status=3&amp;status=4">Search existing open bugs</a>.
            If you find your issue listed then please add a comment with your details.</li>
        <li><a href="mail-lists.html">Search the mailing list archive(s)</a>.
            You may find your issue or idea has already been discussed.</li>
        <li>Decide if your issue is a bug or an enhancement.</li>
        <li>Submit either a <a href="https://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12320623&amp;issuetype=1&amp;priority=4&amp;assignee=-1">bug report</a>
            or <a href="https://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12320623&amp;issuetype=4&amp;priority=4&amp;assignee=-1">enhancement request</a>.</li>
      </ol>
      </p>

      <p>
      Please also remember these points:
      <ul>
        <li>the more information you provide, the better we can help you</li>
        <li>test cases are vital, particularly for any proposed enhancements</li>
        <li>the developers of Apache Commons RNG are all unpaid volunteers</li>
      </ul>
      </p>

      <p>
      For more information on subversion and creating patches see the
      <a href="http://www.apache.org/dev/contributors.html">Apache Contributors Guide</a>.
      </p>

      <p>
      You may also find these links useful:
      <ul>
        <li><a href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12320623&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=1&amp;status=3&amp;status=4">All Open Apache Commons RNG bugs</a></li>
        <li><a href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12320623&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=5&amp;status=6">All Resolved Apache Commons RNG bugs</a></li>
        <li><a href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12320623&amp;sorter/field=issuekey&amp;sorter/order=DESC">All Apache Commons RNG bugs</a></li>
      </ul>
      </p>
    </section>
  </body>
</document>
