// Path: src/org/transformenator/internal/UnsignedByte.java
// public class UnsignedByte
// {
// 
// 	private UnsignedByte()
// 	{
// 	}
// 
// 	/**
// 	 * Returns the value of the specified byte in unsigned form as an integer.
// 	 * 
// 	 * @param b
// 	 *                the byte to be returned as an int.
// 	 * @return unsigned b represented as an integer.
// 	 */
// 
// 	public static int intValue(byte b)
// 	{
// 		if (b >= 0)
// 			return b;
// 		else
// 			return 256 + b;
// 	}
// 
// 	public static int intValue(byte lo, byte hi)
// 	{
// 		return UnsignedByte.intValue(hi) * 256 + UnsignedByte.intValue(lo);
// 	}
// 
// 	public static byte loByte(int value)
// 	{
// 		return (byte) (value & 0x00ff);
// 	}
// 
// 	public static byte hiByte(int value)
// 	{
// 		return (byte) ((value & 0xff00) >> 8);
// 	}
// 
// 	public static byte loByte(long value)
// 	{
// 		return (byte) (loByte((int) value));
// 	}
// 
//   public static byte hiByte(long value)
//   {
//     return (byte) (hiByte((int) value));
//   }
// 
//   public static byte loNibble(byte value)
//   {
//     return (byte) (value & 0x0f);
//   }
// 
//   public static byte hiNibble(byte value)
//   {
//     return (byte) ((value & 0xf0)/16);
//   }
// 
//   public static byte composeByte(byte hiNibble, byte loNibble)
//   {
//     return (byte) (UnsignedByte.intValue(loNibble) + (UnsignedByte.intValue(hiNibble) * 16));
//   }
// 	/**
// 	 * Returns the value of the specified four bytes in unsigned form as a long.
// 	 * 
// 	 * @param b1    the least significant byte
// 	 * @param b2    the next most significant byte after b1
// 	 * @param b3    the next most significant byte after b2
// 	 * @param b4    the most significant byte
// 	 * @return long b1 through b4 represented as a long.
// 	 */
// 
// 	public static long longValue(byte b1, byte b2, byte b3, byte b4)
// 	{
// 		return UnsignedByte.intValue(b4) * (long)4294967296.0 + UnsignedByte.intValue(b3) * 65536 + UnsignedByte.intValue(b2) * 256 + UnsignedByte.intValue(b1);
// 	}
// 
// 	/**
// 	 * Returns the string representation of the specified byte in unsigned form as a two-digit hex value.
// 	 * 
// 	 * @param b
// 	 *                the byte to represent as a hex string
// 	 * @return b represented as a hex string.
// 	 */
// 
// 	public static String toString(byte b)
// 	{
// 		int i = intValue(b);
// 		char c;
// 		if (i / 16 < 10)
// 			c = (char) (i / 16 + 48);
// 		else
// 			c = (char) (i / 16 + 55);
// 
// 		char c1;
// 		if (i % 16 < 10)
// 			c1 = (char) (i % 16 + 48);
// 		else
// 			c1 = (char) (i % 16 + 55);
// 
// 		return ("" + c + "" + c1);
// 	}
// 
// 	/**
// 	 * Returns the string representation of the specified integer in unsigned form as a hex value.
// 	 * 
// 	 * @param b
// 	 *                the byte to represent as a hex string
// 	 * @return b represented as a hex string.
// 	 */
// 
// 	public static String toString(int i)
// 	{
// 		char c;
// 		if (i / 16 < 10)
// 			c = (char) (i / 16 + 48);
// 		else
// 			c = (char) (i / 16 + 55);
// 
// 		char c1;
// 		if (i % 16 < 10)
// 			c1 = (char) (i % 16 + 48);
// 		else
// 			c1 = (char) (i % 16 + 55);
// 
// 		return ("" + c + "" + c1);
// 	}
// 
// }
// 
// Path: src/org/transformenator/internal/Version.java
// public class Version
// {
// 	public static String VersionString = "v2.0.1";
// }


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.BufferedInputStream;
import java.io.InputStream;
import org.transformenator.internal.UnsignedByte;
import org.transformenator.internal.Version;
				System.err.println("Input file \"" + file + "\" not found.");
			}
			catch (IOException ex)
			{
				ex.printStackTrace();
			}
			if (inData != null)
			{
				// We have good data; get ready to deal with it.
				System.err.println("Read " + inData.length + " bytes.");
				if (args.length > 1)
				{
					// If they wanted an output directory, go ahead and make it.
					File baseDirFile = new File(args[1]);
					if (!baseDirFile.isAbsolute())
					{
						baseDirFile = new File("." + File.separator + args[1]);
					}
					// System.out.println("Making directory: ["+baseDirFile+"]");
					baseDirFile.mkdirs();
					outputFile = args[1];
				}
				// Ready to go.  Time to face the music.
				int cursor = 0x20; // Skip over the cwtool preamble
				int thisTrack;
				int offset;
				int nextTrack = 0;
				while (nextTrack < inData.length)
				{
					thisTrack = UnsignedByte.intValue(inData[cursor + 1], inData[cursor + 2]);
// Path: src/org/transformenator/internal/UnsignedByte.java
// public class UnsignedByte
// {
// 
// 	private UnsignedByte()
// 	{
// 	}
// 
// 	/**
// 	 * Returns the value of the specified byte in unsigned form as an integer.
// 	 * 
// 	 * @param b
// 	 *                the byte to be returned as an int.
// 	 * @return unsigned b represented as an integer.
// 	 */
// 
// 	public static int intValue(byte b)
// 	{
// 		if (b >= 0)
// 			return b;
// 		else
// 			return 256 + b;
// 	}
// 
// 	public static int intValue(byte lo, byte hi)
// 	{
// 		return UnsignedByte.intValue(hi) * 256 + UnsignedByte.intValue(lo);
// 	}
// 
// 	public static byte loByte(int value)
// 	{
// 		return (byte) (value & 0x00ff);
// 	}
// 
// 	public static byte hiByte(int value)
// 	{
// 		return (byte) ((value & 0xff00) >> 8);
// 	}
// 
// 	public static byte loByte(long value)
// 	{
// 		return (byte) (loByte((int) value));
// 	}
// 
//   public static byte hiByte(long value)
//   {
//     return (byte) (hiByte((int) value));
//   }
// 
//   public static byte loNibble(byte value)
//   {
//     return (byte) (value & 0x0f);
//   }
// 
//   public static byte hiNibble(byte value)
//   {
//     return (byte) ((value & 0xf0)/16);
//   }
// 
//   public static byte composeByte(byte hiNibble, byte loNibble)
//   {
//     return (byte) (UnsignedByte.intValue(loNibble) + (UnsignedByte.intValue(hiNibble) * 16));
//   }
// 	/**
// 	 * Returns the value of the specified four bytes in unsigned form as a long.
// 	 * 
// 	 * @param b1    the least significant byte
// 	 * @param b2    the next most significant byte after b1
// 	 * @param b3    the next most significant byte after b2
// 	 * @param b4    the most significant byte
// 	 * @return long b1 through b4 represented as a long.
// 	 */
// 
// 	public static long longValue(byte b1, byte b2, byte b3, byte b4)
// 	{
// 		return UnsignedByte.intValue(b4) * (long)4294967296.0 + UnsignedByte.intValue(b3) * 65536 + UnsignedByte.intValue(b2) * 256 + UnsignedByte.intValue(b1);
// 	}
// 
// 	/**
// 	 * Returns the string representation of the specified byte in unsigned form as a two-digit hex value.
// 	 * 
// 	 * @param b
// 	 *                the byte to represent as a hex string
// 	 * @return b represented as a hex string.
// 	 */
// 
// 	public static String toString(byte b)
// 	{
// 		int i = intValue(b);
// 		char c;
// 		if (i / 16 < 10)
// 			c = (char) (i / 16 + 48);
// 		else
// 			c = (char) (i / 16 + 55);
// 
// 		char c1;
// 		if (i % 16 < 10)
// 			c1 = (char) (i % 16 + 48);
// 		else
// 			c1 = (char) (i % 16 + 55);
// 
// 		return ("" + c + "" + c1);
// 	}
// 
// 	/**
// 	 * Returns the string representation of the specified integer in unsigned form as a hex value.
// 	 * 
// 	 * @param b
// 	 *                the byte to represent as a hex string
// 	 * @return b represented as a hex string.
// 	 */
// 
// 	public static String toString(int i)
// 	{
// 		char c;
// 		if (i / 16 < 10)
// 			c = (char) (i / 16 + 48);
// 		else
// 			c = (char) (i / 16 + 55);
// 
// 		char c1;
// 		if (i % 16 < 10)
// 			c1 = (char) (i % 16 + 48);
// 		else
// 			c1 = (char) (i % 16 + 55);
// 
// 		return ("" + c + "" + c1);
// 	}
// 
// }
// 
// Path: src/org/transformenator/internal/Version.java
// public class Version
// {
// 	public static String VersionString = "v2.0.1";
// }


// Path: src/org/transformenator/util/ConvertCatweaselDatastream.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.BufferedInputStream;
import java.io.InputStream;
import org.transformenator.internal.UnsignedByte;
import org.transformenator.internal.Version;

				System.err.println("Input file \"" + file + "\" not found.");
			}
			catch (IOException ex)
			{
				ex.printStackTrace();
			}
			if (inData != null)
			{
				// We have good data; get ready to deal with it.
				System.err.println("Read " + inData.length + " bytes.");
				if (args.length > 1)
				{
					// If they wanted an output directory, go ahead and make it.
					File baseDirFile = new File(args[1]);
					if (!baseDirFile.isAbsolute())
					{
						baseDirFile = new File("." + File.separator + args[1]);
					}
					// System.out.println("Making directory: ["+baseDirFile+"]");
					baseDirFile.mkdirs();
					outputFile = args[1];
				}
				// Ready to go.  Time to face the music.
				int cursor = 0x20; // Skip over the cwtool preamble
				int thisTrack;
				int offset;
				int nextTrack = 0;
				while (nextTrack < inData.length)
				{
					thisTrack = UnsignedByte.intValue(inData[cursor + 1], inData[cursor + 2]);
					offset = UnsignedByte.intValue(inData[cursor + 4], inData[cursor + 5]) + (UnsignedByte.intValue(inData[cursor + 6], inData[cursor + 7]) * 65536);