rendered paste bodypackage rs;
import java.io.*;
import rs.sign.signlink;
// Referenced classes of package rs:
// Stream
public class Decompressor
{
public Decompressor(int i, int j, RandomAccessFile randomaccessfile, RandomAccessFile randomaccessfile1, int k)
{
aBoolean515 = false;
anInt516 = 3;
anInt521 = 65000;
anInt520 = i;
if(k < 4 || k > 4)
anInt516 = 148;
dataFile = randomaccessfile;
indexFile = randomaccessfile1;
anInt521 = j;
}
public synchronized byte[] decompress(byte byte0, int i)
{
if(byte0 == 6)
byte0 = 0;
else
aBoolean515 = !aBoolean515;
try
{
seekTo(true, i * 6, indexFile);
int l;
for(int j = 0; j < 6; j += l)
{
l = indexFile.read(buffer, j, 6 - j);
if(l == -1)
return null;
}
int i1 = ((buffer[0] & 0xff) << 16) + ((buffer[1] & 0xff) << 8) + (buffer[2] & 0xff);
int j1 = ((buffer[3] & 0xff) << 16) + ((buffer[4] & 0xff) << 8) + (buffer[5] & 0xff);
if(i1 < 0 || i1 > anInt521)
return null;
if(j1 <= 0 || (long)j1 > dataFile.length() / 520L)
return null;
byte abyte0[] = new byte[i1];
int k1 = 0;
for(int l1 = 0; k1 < i1; l1++)
{
if(j1 == 0)
return null;
seekTo(true, j1 * 520, dataFile);
int k = 0;
int i2 = i1 - k1;
if(i2 > 512)
i2 = 512;
int j2;
for(; k < i2 + 8; k += j2)
{
j2 = dataFile.read(buffer, k, (i2 + 8) - k);
if(j2 == -1)
return null;
}
int k2 = ((buffer[0] & 0xff) << 8) + (buffer[1] & 0xff);
int l2 = ((buffer[2] & 0xff) << 8) + (buffer[3] & 0xff);
int i3 = ((buffer[4] & 0xff) << 16) + ((buffer[5] & 0xff) << 8) + (buffer[6] & 0xff);
int j3 = buffer[7] & 0xff;
if(k2 != i || l2 != l1 || j3 != anInt520)
return null;
if(i3 < 0 || (long)i3 > dataFile.length() / 520L)
return null;
for(int k3 = 0; k3 < i2; k3++)
abyte0[k1++] = buffer[k3 + 8];
j1 = i3;
}
return abyte0;
}
catch(IOException _ex)
{
return null;
}
}
public synchronized boolean method293(int i, boolean flag, byte abyte0[], int j)
{
if(!flag)
{
for(int k = 1; k > 0; k++);
}
boolean flag1 = method294(abyte0, anInt514, j, true, i);
if(!flag1)
flag1 = method294(abyte0, anInt514, j, false, i);
return flag1;
}
public synchronized boolean method294(byte abyte0[], int i, int j, boolean flag, int k)
{
if(i != 0)
throw new NullPointerException();
try
{
int l;
if(flag)
{
seekTo(true, j * 6, indexFile);
int k1;
for(int i1 = 0; i1 < 6; i1 += k1)
{
k1 = indexFile.read(buffer, i1, 6 - i1);
if(k1 == -1)
return false;
}
l = ((buffer[3] & 0xff) << 16) + ((buffer[4] & 0xff) << 8) + (buffer[5] & 0xff);
if(l <= 0 || (long)l > dataFile.length() / 520L)
return false;
} else
{
l = (int)((dataFile.length() + 519L) / 520L);
if(l == 0)
l = 1;
}
buffer[0] = (byte)(k >> 16);
buffer[1] = (byte)(k >> 8);
buffer[2] = (byte)k;
buffer[3] = (byte)(l >> 16);
buffer[4] = (byte)(l >> 8);
buffer[5] = (byte)l;
seekTo(true, j * 6, indexFile);
indexFile.write(buffer, 0, 6);
int j1 = 0;
for(int l1 = 0; j1 < k; l1++)
{
int i2 = 0;
if(flag)
{
seekTo(true, l * 520, dataFile);
int j2;
int l2;
for(j2 = 0; j2 < 8; j2 += l2)
{
l2 = dataFile.read(buffer, j2, 8 - j2);
if(l2 == -1)
break;
}
if(j2 == 8)
{
int i3 = ((buffer[0] & 0xff) << 8) + (buffer[1] & 0xff);
int j3 = ((buffer[2] & 0xff) << 8) + (buffer[3] & 0xff);
i2 = ((buffer[4] & 0xff) << 16) + ((buffer[5] & 0xff) << 8) + (buffer[6] & 0xff);
int k3 = buffer[7] & 0xff;
if(i3 != j || j3 != l1 || k3 != anInt520)
return false;
if(i2 < 0 || (long)i2 > dataFile.length() / 520L)
return false;
}
}
if(i2 == 0)
{
flag = false;
i2 = (int)((dataFile.length() + 519L) / 520L);
if(i2 == 0)
i2++;
if(i2 == l)
i2++;
}
if(k - j1 <= 512)
i2 = 0;
buffer[0] = (byte)(j >> 8);
buffer[1] = (byte)j;
buffer[2] = (byte)(l1 >> 8);
buffer[3] = (byte)l1;
buffer[4] = (byte)(i2 >> 16);
buffer[5] = (byte)(i2 >> 8);
buffer[6] = (byte)i2;
buffer[7] = (byte)anInt520;
seekTo(true, l * 520, dataFile);
dataFile.write(buffer, 0, 8);
int k2 = k - j1;
if(k2 > 512)
k2 = 512;
dataFile.write(abyte0, j1, k2);
j1 += k2;
l = i2;
}
return true;
}
catch(IOException _ex)
{
return false;
}
}
public synchronized void seekTo(boolean flag, int i, RandomAccessFile randomaccessfile)
throws IOException
{
if(!flag)
return;
if(i < 0 || i > 0x3c00000)
{
System.out.println("Badseek - pos:" + i + " len:" + randomaccessfile.length());
i = 0x3c00000;
try
{
Thread.sleep(1000L);
}
catch(Exception _ex) { }
}
randomaccessfile.seek(i);
}
public int anInt514;
public boolean aBoolean515;
public int anInt516;
public static byte buffer[] = new byte[520];
public RandomAccessFile dataFile;
public RandomAccessFile indexFile;
public int anInt520;
public int anInt521;
}