////
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.
////
= Arthur Downloads

License under Apache License v2 (ALv2).

[.table.table-bordered,options="header"]
|===
|Name|Version|Date|Size|Type|Links
|Arthur Source Release|1.0.3|2021-08-30 15:08:48|573 kB|zip| https://dist.apache.org/repos/dist/release/geronimo/arthur/arthur-1.0.3-source-release.zip[icon:download[] zip] https://dist.apache.org/repos/dist/release/geronimo/arthur/arthur-1.0.3-source-release.zip.sha512[icon:download[] sha512] https://dist.apache.org/repos/dist/release/geronimo/arthur/arthur-1.0.3-source-release.zip.asc[icon:download[] asc]
|Arthur Source Release|1.0.2|2021-02-11 11:12:23|539 kB|zip| https://archive.apache.org/dist/geronimo/arthur/arthur-1.0.2-source-release.zip[icon:download[] zip] https://archive.apache.org/dist/geronimo/arthur/arthur-1.0.2-source-release.zip.sha512[icon:download[] sha512] https://archive.apache.org/dist/geronimo/arthur/arthur-1.0.2-source-release.zip.asc[icon:download[] asc]
|Arthur Source Release|1.0.0|2019-12-05 08:44:02|502 kB|zip| https://archive.apache.org/dist/geronimo/arthur/arthur-1.0.0-source-release.zip[icon:download[] zip] https://archive.apache.org/dist/geronimo/arthur/arthur-1.0.0-source-release.zip.sha512[icon:download[] sha512] https://archive.apache.org/dist/geronimo/arthur/arthur-1.0.0-source-release.zip.asc[icon:download[] asc]
|===
