Files
david 9f107b5f80 Initial commit: akai-fetch - AKAI sampler ISO downloader & extractor
- fetch: Go CLI tool for searching, downloading, and extracting
  AKAI sampler ISOs from archive.org
- scripts/extract_wavs.sh: Shell script driving akaiutil to
  convert samples to WAV
- Dockerfile: Multi-stage build packaging akaiutil + fetch
- third_party/akaiutil: Vendored akaiutil v4.6.7 source (GPLv2)
- docs/akaiutil.md: Full akaiutil reference
2026-06-15 22:33:53 -07:00

756 lines
25 KiB
Plaintext
Executable File

akaiutil: access to AKAI S900/S1000/S3000 filesystems
Copyright (c) 2008-2022 by Klaus Michael Indlekofer. All rights reserved.
Note: Special restrictions apply. See disclaimers below and within the distribution.
Release akaiutil-4.6.7 (21-OCT-2022)
Email: m.indlekofer@gmx.de
Usage:
------
akaiutil [-h] [-r] [-F] [-C] [-l <lock-file>] [-o <start-offset>] [-s <pseudo-disk-size>] [-n <pseudo-disk-number>] [-c <cdrom-index> ...] [-p <physdrive-index> ...] [[-f] <floppy-drive> ...] [[-f] <disk-file> ...]
-h print this info
-r read-only mode
-F disable floppy filesystem for disk-files/CD-ROM drives/physical drives
-C disable cache
-l lock-file
-o set start offset for disk-file/drive in bytes
-s set pseudo-disk size in KB
-n set max. number of pseudo-disks per disk-file/drive
-c CD-ROM drive
-p physical drive
-f floppy drive or disk-file
<floppy-drive> = floppyla: | floppylb: | floppyha: | floppyhb:
Commands:
---------
help [<cmd>] print help information for a command
=man
exit exit program
=quit
=bye
=q
restart restart program (with opened disks)
restartkeep restart program (with opened disks, keep current directory path etc.)
=restart.
=sync
df print disk info
dinfo print current directory info
=pwd
cd [<path>] change current directory
cdi <volume-index> change current volume
dir [<path>] list directory
=ls
dirrec list current directory recursively
=lsrec
lstags list tags in partition
=dirtags
inittags initialize tags of disk or partition
rentag <tag-index> <tag-name> rename tag in partition
cdinfo print CD3000 CD-ROM info
vcdinfo print verbose CD3000 CD-ROM info
setcdinfo [<cdlabel>] set CD3000 CD-ROM info of disk or partition
lcd <dir-path> change current local (external) directory
ldir list files in current local (external) directory
=lls
lsfat print FAT of current partition
lsfati <file-index> print FAT-chain of file
lstfati <take-index> print FAT-chain of DD take
infoi <file-index> print information for file
infoall print information for all files in current volume
tinfoi <take-index> print information for DD take
tinfoall print information for all DD takes in current partition
del <file-path> delete file
=rm
deli <file-index> delete file
rmi
tdeli <take-index> delete DD take
trmi
ren <old-file-path> <new-file-path> [<new-file-index>] rename/move file
=mv
reni <old-file-index> <new-file-path> [<new-file-index>] rename/move file
=mvi
setosveri <file-index> <new-os-version> set OS version of file in S1000/S3000 volume
setosverall <new-os-version> set OS version of all files in current S1000/S3000 volume
setuncompri <file-index> <new-uncompr> set uncompr value of compressed file in S900 volume
updateuncompri <file-index> update uncompr value of compressed file in S900 volume
updateuncomprall update uncompr value of all compressed files in current S900 volume
sample900uncompr <file-path> [<dest-vol-path>] uncompress S900 compressed sample file
=s9uncompr
sample900uncompri <file-index> [<dest-vol-path>] uncompress S900 compressed sample file
=s9uncompri
sample900uncomprall [<dest-vol-path>] uncompress all S900 compressed sample files in current volume
=s9uncomprall
sample900compr <file-path> [<dest-vol-path>] compress S900 non-compressed sample file
=s9compr
sample900compri <file-index> [<dest-vol-path>] compress S900 non-compressed sample file
=s9compri
sample900comprall [<dest-vol-path>] compress all S900 non-compressed sample files in current volume
=s9comprall
fixramname <file-path> fix name in file header
fixramnamei <file-index> fix name in file header
fixramnameall fix name in file header of all files in current volume
clrtagi <file-index> {<tag-index>|all} untag file
clrtagall {<tag-index>|all} untag all files in current volume
settagi <file-index> <tag-index> tag file
settagall <tag-index> tag all files in current volume
treni <take-index> <new-name> rename DD take
=tmvi
clrfiltertag {<tag-index>|all} remove tag from file filter
setfiltertag <tag-index> add tag to file filter
copy <src-file-path> <new-file-path> [<new-file-index>] copy file
=cp
copyi <src-file-index> <new-file-path> [<new-file-index>] copy file
=cpi
copyvol <src-volume-path> <new-volume-path> copy volume (with all of its files)
=cpvol
copyvoli <src-volume-index> <new-volume-path> copy volume (with all of its files)
=cpvoli
copypart <src-partition-path> <dst-partition-path> copy all volumes of a partition
=cppart
copytags <src-partition-path> <dst-partition-path> copy all tags of a partition
=cptags
wipevol <volume-path> delete all files in volume
=wipedir
=rmall
wipevoli <volume-index> delete all files in volume
=wipediri
=rmalli
delvol <volume-path> delete volume and all of its files
=deldir
=rmvol
=rmdir
delvoli <volume-index> delete volume and all of its files
=deldiri
=rmvoli
=rmdiri
formatfloppyl9 format/erase low-density floppy for S900/S950, create filesystem
=formatfl9
formatfloppyl1 format/erase low-density floppy for S1000, create filesystem
=formatfl1
formatfloppyl3 format/erase low-density floppy for S3000, create filesystem
=formatfl3
formatfloppyh9 format/erase high-density floppy for S950, create filesystem
=formatfh9
formatfloppyh1 format/erase high-density floppy for S1000, create filesystem
=formatfh1
formatfloppyh3 format/erase high-density floppy for S3000, create filesystem
=formatfh3
wipefloppy create filesystem on floppy
=newfsfloppy
formatharddisk9 [<total-size>[M]|SH205|SUPRA20M|SUPRA30M|SUPRA60M] create filesystem on harddisk for S900/S950 (size in blocks or MB, or drive name)
=formathd9
=newfsharddisk9
=newfshd9
formatharddisk1 [<part-size>[M] [<total-size>[M]]] create filesystem on harddisk for S1000 (size in blocks or MB)
=formathd1
=newfsharddisk9
=newfshd1
formatharddisk3 [<part-size>[M] [<total-size>[M]]] create filesystem on harddisk for S3000 or CD3000 (size in blocks or MB)
=formathd3
=newfsharddisk3
=newfshd3
formatharddisk3cd [<part-size>[M] [<total-size>[M]]] create filesystem on harddisk for CD3000 CD-ROM (size in blocks or MB)
=formatcd
=newfsharddisk3cd
=newfscd
wipepart [<partition-path>] create filesystem in harddisk partition
=newfspart
wipepart3cd [<partition-path>] create filesystem in harddisk partition for CD3000 CD-ROM
=newfspart3cd
fixpart [<partition-path>] fix filesystem in harddisk partition
fixharddisk [<disk-path>] fix filesystem on harddisk
scanbadblkspart [<partition-path>] scan for bad blocks/clusters in partition
markbadblkspart [<partition-path>] mark free bad blocks/clusters in partition
scanbadblksdisk [<disk-path>] scan for bad blocks/clusters in all partitions of disk
markbadblksdisk [<disk-path>] mark free bad blocks/clusters in all partitions of disk
getdisk <file-name> get disk (to external file)
=dget
=dexport
putdisk <file-name> put disk (from external file)
=dput
=dimport
getpart [<partition-path>] <file-name> get partition (to external file)
=pget
=pexport
putpart <file-name> [<partition-path>] put partition (from external file)
=pput
=pimport
gettags <file-name> get tags from partition (to external file)
=tagsget
=tagsexport
puttags <file-name> put tags to partition (from external file)
=tagsput
=tagsimport
renvol <old-path> <new-name> rename volume
=rendir
=mvvol
=mvdir
renvoli <volume-index> <new-name> rename volume
=rendiri
=mvvoli
=mvdiri
setosvervol <new-os-version> set OS version of current volume
setosvervoli <volume-index> <new-os-version> set OS version of volume
setlnum <new-load-number> set load number of current volume (OFF for none)
setlnumi <volume-index> <new-load-number> set load number of volume (OFF for none)
lsparam list parameters in current volume
lsparami <volume-index> list parameters in volume
initparam initialize parameters in current volume
initparami <volume-index> initialize parameters in volume
setparam <par-index> <par-value> set parameters in current volume
setparami <volume-index> <par-index> <par-value> set parameters in volume
getparam <file-name> get parameters from current volume (to external file)
=paramget
=paramexport
getparami <volume-index> <file-name> get parameters from volume (to external file)
=paramgeti
=paramexporti
putparam <file-name> put parameters to current volume (from external file)
=paramput
=paramimport
putparami <volume-index> <file-name> put parameters to volume (from external file)
=paramputi
=paramimporti
get <file-path> [<begin-byte> [<end-byte>]] get file (to external)
=export
geti <file-index> [<begin-byte> [<end-byte>]] get file (to external)
=exporti
getall get all files (to external)
=exportall
sample2wav <file-path> convert sample file into external WAV file
=s2wav
=getwav
sample2wavi <file-index> convert sample file into external WAV file
=s2wavi
=getwavi
sample2wavall convert all sample files into external WAV files
=s2wavall
=getwavall
put [<volume-path>/]<file-name> [<file-index>] put file (from external, use * for all local files)
=import
wav2sample [<volume-path>/]<wav-file> [<file-index>] convert external WAV file into sample file (use *.wav for all local WAV files)
=wav2s
=putwav
wav2sample9 [<volume-path>/]<wav-file> [<file-index>] convert external WAV file into S900 non-compressed sample file (use *.wav for all local WAV files)
=wav2s9
=putwav9
wav2sample9c [<volume-path>/]<wav-file> [<file-index>] convert external WAV file into S900 compressed sample file (use *.wav for all local WAV files)
=wav2s9c
=putwav9c
wav2sample1 [<volume-path>/]<wav-file> [<file-index>] convert external WAV file into S1000 sample file (use *.wav for all local WAV files)
=wav2s1
=putwav1
wav2sample3 [<volume-path>/]<wav-file> [<file-index>] convert external WAV file into S3000 sample file (use *.wav for all local WAV files)
=wav2s3
=putwav3
tgeti <take-index> get DD take (to external)
=texporti
tgetall get all DD takes (to external)
=texportall
take2wavi <take-index> convert DD take into external WAV file
=t2wavi
=tgetwavi
=getwavti
take2wavall convert all DD takes into external WAV files
=t2wavall
=tgetwavall
=getwavtall
tput <take-file> put DD take (from external, use *.TK for all local DD take files)
=timport
wav2take <wav-file> convert external WAV file into DD take (use *.wav for all local WAV files)
=wav2t
=tputwav
=putwavt
tarc <tar-file> tar c from current directory (to external)
=target
=gettar
tarcwav <tar-file> tar c from current directory (to external) with WAV conversion
=targetwav
=gettarwav
tarx <tar-file> tar x in current directory (from external)
=tarput
=puttar
tarx9 <tar-file> tar x in current directory (from external) for S900
=tarput9
=puttar9
tarx1 <tar-file> tar x in current directory (from external) for S1000
=tarput1
=puttar1
tarx3 <tar-file> tar x in current directory (from external) for S3000 or CD3000
=tarput3
=puttar3
tarx3cd <tar-file> tar x in current directory (from external) for CD3000 CD-ROM
=tarput3cd
=puttar3cd
tarxwav <tar-file> tar x in current directory (from external) with WAV conversion
=tarputwav
=puttarwav
tarxwav9 <tar-file> tar x in current directory (from external) with WAV conversion to S900 non-compressed sample
=tarputwav9
=puttarwav9
tarxwav9c <tar-file> tar x in current directory (from external) with WAV conversion to S900 compressed sample
=tarputwav9c
=puttarwav9c
tarxwav1 <tar-file> tar x in current directory (from external) with WAV conversion to S1000 sample
=tarputwav1
=puttarwav1
tarxwav3 <tar-file> tar x in current directory (from external) with WAV conversion to S3000 sample
=tarputwav3
=puttarwav3
mkvol [<volume-path>] create new volume
=mkdir
mkvol9 [<volume-path>] create new volume for S900
=mkdir9
mkvol1 [<volume-path> [<load-number>]] create new volume for S1000
=mkdir1
mkvol3 [<volume-path> [<load-number>]] create new volume for S3000 or CD3000
=mkdir3
mkvol3cd [<volume-path> [<load-number>]] create new volume for CD3000 CD-ROM
=mkdir3cd
mkvoli <volume-index> [<volume-name> [<load-number>]] create new volume at index
=mkdiri
mkvoli9 <volume-index> [<volume-name>] create new volume for S900 at index
=mkdiri9
mkvoli1 <volume-index> [<volume-name> [<load-number>]] create new volume for S1000 at index
=mkdiri1
mkvoli3 <volume-index> [<volume-name> [<load-number>]] create new volume for S3000 or CD3000 at index
=mkdiri3
mkvoli3cd <volume-index> [<volume-name> [<load-number>]] create new volume for CD3000 CD-ROM
=mkdiri3cd
dircache print cache information
=lscache
disablecache disable cache
enablecache enable cache
lock acquire lock
unlock release lock
playwav [<wav-file>] start playback of current external WAV file
=p
stopwav stop playback of current external WAV file
=s
delwav delete current external WAV file
=rmwav
Examples:
---------
Example 1: access floppy image fff.img
akaiutil.exe fff.img
Example 2: access harddisk images hhh1.img and hhh2.img
akaiutil.exe hhh1.img hhh2.img
Example 3: access harddisk image hhh.img and floppy image fff.img
akaiutil.exe hhh.img fff.img
Example 4: access multi-harddisk image mmm.img with pseudo-disks of 524280KB
akaiutil.exe -s 524280 mmm.img
Example 5: access high-density (HD) floppy in floppy drive A: on Windows PC:
akaiutil.exe floppyha:
Example 6: access Windows physical drive 1 and Windows CD-ROM drive 0
akaiutil.exe -p 1 -c 0
Example 7: access Windows physical drive 2, harddisk image hhh.img, and floppy image fff.img
akaiutil.exe -p 2 hhh.img fff.img
Example 8: access UNIX harddisks /dev/da1, /dev/da2, and harddisk image hhh.img
akaiutil /dev/da1 /dev/da2 hhh.img
Example 9: access Darwin harddisk /dev/disk1
akaiutil /dev/disk1
Example 10: access Darwin CD-ROM /dev/disk2s0 in read-only mode
akaiutil -r /dev/disk2s0
Warning:
--------
Accessing disk-files or floppies or physical drives might destroy their contents!!! Use at your own risk!!!
It is strongly recommended to use the read-only mode (-r) for testing and for accessing valuable drives, floppies, or files.
Notes:
------
* whole (pseudo-)disks can be imported/exported via "putdisk"/"getdisk"
* whole partitions can be imported/exported via "putpart"/"getpart"
* individual files can be imported/exported via "put"/"get"
* sample files can be exported to external WAV files via "sample2wav", "sample2wavall"
* DD takes can be exported to external WAV files via "take2wav", "take2wavall"
* external WAV files can be imported to sample files via "wav2sample", "wav2sample9", "wav2sample1","wav2sample3"
WAV files for sample import must be mono or stereo, and in 8bit or 16bit or 24bit or 32bit PCM format
* external WAV files can be imported to DD takes via "wav2take"
WAV files for DD take import must be mono or stereo, and in 8bit or 16bit or 24bit or 32bit PCM format
* the current external WAV file (e.g. previously exported via "sample2wav" or "take2wav") can be played back via "playwav"
* individual files can be copied via "copy"
* whole volumes and partitions can be copied via "copyvol" and "copypart"
* whole directory trees can be imported/exported from/to tar archives via "tarput"/"target"
* WAV file conversion for tar archives via "tarputwav"/"targetwav"
* file path names in akaiutil are of the form "/disk/partition/volume/file", e.g. "/disk2/C/VOLUME_007/SINE.S"
* for access to files/volumes via index, some commands have an "i" version
* abbreviations:
".." = one level up, "." = stay in same directory
"/N" = "/diskN"
"/floppyN" = "/diskN/A/<volume1>"
'_' can be used as a typable replacement for ' ' (space) in file or volume names
* if the pseudo-disk size ("-s" option) and the max. number of pseudo-disks ("-n" option) are both specified,
the given values are taken and the usable disk size is not determined automatically,
which might be useful e.g. for accessing harddisks which have bad blocks
* for shared access to drives or disk-files,
it might be useful to disable the cache (via the "-C" option or via the "disablecache" command),
and the "restartkeep" command can be used to rescan disks/partitions/volumes,
and a lock-file ("-l" option and "lock"/"unlock" commands) can be used for exclusive access
* for detailed information about individual akaiutil commands please read the online help infos
Floppy drives:
--------------
In order to access a floppy drive to format, read, or write an AKAI floppy on a Windows PC,
fdrawcmd.sys (by Simon Owen, see https://simonowen.com/fdrawcmd/) has to be installed.
Floppy drive arguments for akaiutil running on a Windows PC:
"floppyla:" for low-density (DD) floppy in drive A:
"floppylb:" for low-density (DD) floppy in drive B:
"floppyha:" for high-density (HD) floppy in drive A:
"floppyhb:" for high-density (HD) floppy in drive B:
Formatting drives and images:
-----------------------------
Low-density (DD) floppy size: 800 blocks (1KB) = 800KB
High-density (HD) floppy size: 1600 blocks (1KB) = 1600KB
Max. S900/S950 harddisk (or CD-ROM) size: 8191 blocks (8KB) = 65528KB = approx. 64MB
S900/S950 standard harddisk sizes:
2601 blocks (8KB) = 20808KB ("Atari SH205")
2500 blocks (8KB) = 20000KB ("Supra 20M")
3812 blocks (8KB) = 30496KB ("Supra 30M")
7624 blocks (8KB) = 60992KB ("Supra 60M")
Max. S1000/S3000 harddisk (or CD-ROM) size: 65535 blocks (8KB) = 524280KB = approx. 512MB
S1000/S3000 standard harddisk partition sizes:
3840 blocks (8KB) = 30720KB = 30MB
5120 blocks (8KB) = 40960KB = 40MB
6400 blocks (8KB) = 51200KB = 50MB
7680 blocks (8KB) = 61440KB = 60MB
ZIP100 disk size (as seen by akaiutil): 12288 blocks (8KB) = 98304KB = 96MB
ZIP250 disk size (as seen by akaiutil): 30595 blocks (8KB) = 244760KB = approx. 239MB
Warning: Formatting disk-files or floppies or physical drives destroys their contents!!! Use at your own risk!!!
Example 1: format S900 low-density (DD) floppy in floppy drive A: on Windows PC:
akaiutil.exe floppyla:
-> formatfloppyl9
Example 2: create and format S900 low-density floppy image
dd if=/dev/zero of=fff.img bs=1024 count=800
akaiutil fff.img
-> formatfloppyl9
Example 3: create and format S1000 high-density floppy image
dd if=/dev/zero of=fff.img bs=1024 count=1600
akaiutil fff.img
-> formatfloppyh1
Example 4: create and format CD3000 CD-ROM image of max. size
dd if=/dev/zero of=hhh.img bs=8192 count=65535
akaiutil hhh.img
-> formatharddisk3cd 60M
(this gives 8 partitions of 60MB and 1 partition of approx. 32MB)
-> setcdinfo MYCDROM
(this must be done after all volumes/files have been transferred)
Example 5: create and format S950 harddisk image of max. size
dd if=/dev/zero of=hhh.img bs=8192 count=8191
akaiutil hhh.img
-> formatharddisk9
Example 6: format ZIP100 drive at Windows physical drive 3 for S1000
akaiutil.exe -p 3
-> formatharddisk1 60M
(this gives 1 partition of 60MB and 1 partition of 36MB)
Example 7: format drive at Windows physical drive 4 for S1100 with DD space
akaiutil.exe -p 4
-> formatharddisk1 1M 1M
(this gives 1 partition of 1MB, rest of disk is allocated for DD)
Compilation:
------------
Depending on the operating system and the programming environment,
use Makefile (for make) or Makefile.nmake (for nmake) or the .vcproj file.
References:
-----------
* documentation, manuals, and webpages for AKAI samplers
* floppies, harddisks, CD-ROMs, and files for AKAI samplers
* "AkaiDisk" and its documentation, by Paul Kellett, accessed 09-JAN-2008, 06-MAR-2008, 27-MAR-2010
* "akaitools", by Hiroyuki Ohsaki, accessed 09-JAN-2008
* "akaifs", by Raymond Dresens and Roger Karis, accessed 18-JAN-2008
* "libakai", by Sbastien Mtrot and Christian Schoenebeck, accessed 09-JAN-2008
* "fdrawcmd.sys" by Simon Owen, https://simonowen.com/fdrawcmd/, accessed 14-AUG-2020
* "DiskUtil" by Simon Owen, https://simonowen.com/fdrawcmd/DiskUtil.zip, accessed 14-AUG-2020
---
The following holds for all files in this distribution (unless stated otherwise on an
individual basis for each file and statement):
These program/data/document/HTML/picture/media files (materials) are distributed in the
hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. In no event shall the author be
liable for any direct, indirect, incidental, special, exemplary, or consequential damages
(including, but not limited to, procurement of substitue goods or services; loss of use,
data, or profits; or business interruption) however caused and on any theory of liability,
whether in contract, strict liability, or tort (including negligence or otherwise) arising
in any way out of the use of data/information/software from this distribution, even if
advised of the possibility of such damage.
The contents of this distribution are intended for educational, non-commercial purposes
only. Materials contained herein are property of their respective owners.
All brand names and trademarks are property of their respective owners.
If any copyrighted works/trademarks have been used, please contact the author
and the item will be either removed or properly credited (at the copyright/trademark
owner's discretion). We have no intention of violating any copyrights or trademarks.
This distribution might use inlining and deep-linking, i.e. links in this distribution
might lead directly to materials on other web sites/distributions (in which case the
target page normally should be listed/credited in a "links" section). The author does
not take responsibility for the contents of any links referred to. We do not necessarily
endorse, sanction, support, encourage, verify or agree with the contents, opinions or
statements of/on any of the linked pages. These statements hold for all links/references
in all files in this distribution. We are in no way affiliated with any
companies/institutions/individuals which might be mentioned in any manner in this
distribution.
The author does not take responsibility for incorrect, incomplete or misleading information.
Statements are to be considered as the author's free personal opinion. The author does not
necessarly possess any of the items mentioned in files in this distribution.
Files (and the information therein) created by the author are copyright
(c) by the author. Unless protected/restricted otherwise, the author permits
reproduction/redistribution of material contained in this distribution under the condition
that the item is properly credited. Links to items/materials in this distribution are welcome.
Projects/publications/papers that make use of materials, programs, or generated output
of this distribution must properly credit the author and mention the usage of this distribution.
Please contact the author for comments or further questions
and permission to use materials/information from this distribution.
---
This product includes software developed by the University of California, Berkeley
and its contributors.
Copyright (c) 1987-2002 The Regents of the University of California.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. [rescinded 22 July 1999]
4. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
---
End of file