MoparScape/client317/src/rs/config/Censor.java

822 lines
27 KiB
Java
Executable File

package rs.config;
import rs.stream.Stream;
import rs.stream.StreamLoader;// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
public final class Censor {
public static void loadConfig(StreamLoader streamLoader) {
Stream stream = new Stream(streamLoader.getDataForName("fragmentsenc.txt"));
Stream stream_1 = new Stream(streamLoader.getDataForName("badenc.txt"));
Stream stream_2 = new Stream(streamLoader.getDataForName("domainenc.txt"));
Stream stream_3 = new Stream(streamLoader.getDataForName("tldlist.txt"));
readValues(stream, stream_1, stream_2, stream_3);
}
private static void readValues(Stream stream, Stream stream_1, Stream stream_2, Stream stream_3) {
readBadEnc(stream_1);
readDomainEnc(stream_2);
readFragmentsEnc(stream);
readTldList(stream_3);
}
private static void readTldList(Stream stream) {
int i = stream.readDWord();
aCharArrayArray624 = new char[i][];
anIntArray625 = new int[i];
for (int j = 0; j < i; j++) {
anIntArray625[j] = stream.readUnsignedByte();
char ac[] = new char[stream.readUnsignedByte()];
for (int k = 0; k < ac.length; k++)
ac[k] = (char) stream.readUnsignedByte();
aCharArrayArray624[j] = ac;
}
}
private static void readBadEnc(Stream stream) {
int j = stream.readDWord();
aCharArrayArray621 = new char[j][];
aByteArrayArrayArray622 = new byte[j][][];
method493(stream, aCharArrayArray621, aByteArrayArrayArray622);
}
private static void readDomainEnc(Stream stream) {
int i = stream.readDWord();
aCharArrayArray623 = new char[i][];
method494(aCharArrayArray623, stream);
}
private static void readFragmentsEnc(Stream stream) {
anIntArray620 = new int[stream.readDWord()];
for (int i = 0; i < anIntArray620.length; i++)
anIntArray620[i] = stream.readUnsignedWord();
}
private static void method493(Stream stream, char ac[][], byte abyte0[][][]) {
for (int j = 0; j < ac.length; j++) {
char ac1[] = new char[stream.readUnsignedByte()];
for (int k = 0; k < ac1.length; k++)
ac1[k] = (char) stream.readUnsignedByte();
ac[j] = ac1;
byte abyte1[][] = new byte[stream.readUnsignedByte()][2];
for (int l = 0; l < abyte1.length; l++) {
abyte1[l][0] = (byte) stream.readUnsignedByte();
abyte1[l][1] = (byte) stream.readUnsignedByte();
}
if (abyte1.length > 0)
abyte0[j] = abyte1;
}
}
private static void method494(char ac[][], Stream stream) {
for (int j = 0; j < ac.length; j++) {
char ac1[] = new char[stream.readUnsignedByte()];
for (int k = 0; k < ac1.length; k++)
ac1[k] = (char) stream.readUnsignedByte();
ac[j] = ac1;
}
}
private static void method495(char ac[]) {
int i = 0;
for (int j = 0; j < ac.length; j++) {
if (method496(ac[j]))
ac[i] = ac[j];
else
ac[i] = ' ';
if (i == 0 || ac[i] != ' ' || ac[i - 1] != ' ')
i++;
}
for (int k = i; k < ac.length; k++)
ac[k] = ' ';
}
private static boolean method496(char c) {
return c >= ' ' && c <= '\177' || c == ' ' || c == '\n' || c == '\t' || c == '\243' || c == '\u20AC';
}
public static String doCensor(String s) {
char ac[] = s.toCharArray();
method495(ac);
String s1 = (new String(ac)).trim();
ac = s1.toLowerCase().toCharArray();
String s2 = s1.toLowerCase();
method505(ac);
method500(ac);
method501(ac);
method514(ac);
for (int j = 0; j < exceptions.length; j++) {
for (int k = -1; (k = s2.indexOf(exceptions[j], k + 1)) != -1;) {
char ac1[] = exceptions[j].toCharArray();
System.arraycopy(ac1, 0, ac, k, ac1.length);
}
}
method498(s1.toCharArray(), ac);
method499(ac);
//return (new String(ac)).trim(); //xxx chat filter, return s to avoid
return s;
}
private static void method498(char ac[], char ac1[]) {
for (int j = 0; j < ac.length; j++)
if (ac1[j] != '*' && isUpperCaseLetter(ac[j]))
ac1[j] = ac[j];
}
private static void method499(char ac[]) {
boolean flag = true;
for (int j = 0; j < ac.length; j++) {
char c = ac[j];
if (isLetter(c)) {
if (flag) {
if (isLowerCaseLetter(c))
flag = false;
} else if (isUpperCaseLetter(c))
ac[j] = (char) ((c + 97) - 65);
} else {
flag = true;
}
}
}
private static void method500(char ac[]) {
for (int i = 0; i < 2; i++) {
for (int j = aCharArrayArray621.length - 1; j >= 0; j--)
method509(aByteArrayArrayArray622[j], ac, aCharArrayArray621[j]);
}
}
private static void method501(char ac[]) {
char ac1[] = ac.clone();
char ac2[] = {
'(', 'a', ')'
};
method509(null, ac1, ac2);
char ac3[] = ac.clone();
char ac4[] = {
'd', 'o', 't'
};
method509(null, ac3, ac4);
for (int i = aCharArrayArray623.length - 1; i >= 0; i--)
method502(ac, aCharArrayArray623[i], ac3, ac1);
}
private static void method502(char ac[], char ac1[], char ac2[], char ac3[]) {
if (ac1.length > ac.length)
return;
int j;
for (int k = 0; k <= ac.length - ac1.length; k += j) {
int l = k;
int i1 = 0;
j = 1;
while (l < ac.length) {
int j1;
char c = ac[l];
char c1 = '\0';
if (l + 1 < ac.length)
c1 = ac[l + 1];
if (i1 < ac1.length && (j1 = method511(c, ac1[i1], c1)) > 0) {
l += j1;
i1++;
continue;
}
if (i1 == 0)
break;
if ((j1 = method511(c, ac1[i1 - 1], c1)) > 0) {
l += j1;
if (i1 == 1)
j++;
continue;
}
if (i1 >= ac1.length || !method517(c))
break;
l++;
}
if (i1 >= ac1.length) {
boolean flag1 = false;
int k1 = method503(ac, ac3, k);
int l1 = method504(ac2, l - 1, ac);
if (k1 > 2 || l1 > 2)
flag1 = true;
if (flag1) {
for (int i2 = k; i2 < l; i2++)
ac[i2] = '*';
}
}
}
}
private static int method503(char ac[], char ac1[], int j) {
if (j == 0)
return 2;
for (int k = j - 1; k >= 0; k--) {
if (!method517(ac[k]))
break;
if (ac[k] == '@')
return 3;
}
int l = 0;
for (int i1 = j - 1; i1 >= 0; i1--) {
if (!method517(ac1[i1]))
break;
if (ac1[i1] == '*')
l++;
}
if (l >= 3)
return 4;
return !method517(ac[j - 1]) ? 0 : 1;
}
private static int method504(char ac[], int i, char ac1[]) {
if (i + 1 == ac1.length)
return 2;
for (int j = i + 1; j < ac1.length; j++) {
if (!method517(ac1[j]))
break;
if (ac1[j] == '.' || ac1[j] == ',')
return 3;
}
int k = 0;
for (int l = i + 1; l < ac1.length; l++) {
if (!method517(ac[l]))
break;
if (ac[l] == '*')
k++;
}
if (k >= 3)
return 4;
return !method517(ac1[i + 1]) ? 0 : 1;
}
private static void method505(char ac[]) {
char ac1[] = ac.clone();
char ac2[] = {
'd', 'o', 't'
};
method509(null, ac1, ac2);
char ac3[] = ac.clone();
char ac4[] = {
's', 'l', 'a', 's', 'h'
};
method509(null, ac3, ac4);
for (int i = 0; i < aCharArrayArray624.length; i++)
method506(ac3, aCharArrayArray624[i], anIntArray625[i], ac1, ac);
}
private static void method506(char ac[], char ac1[], int i, char ac2[], char ac3[]) {
if (ac1.length > ac3.length)
return;
int j;
for (int k = 0; k <= ac3.length - ac1.length; k += j) {
int l = k;
int i1 = 0;
j = 1;
while (l < ac3.length) {
int j1;
char c = ac3[l];
char c1 = '\0';
if (l + 1 < ac3.length)
c1 = ac3[l + 1];
if (i1 < ac1.length && (j1 = method511(c, ac1[i1], c1)) > 0) {
l += j1;
i1++;
continue;
}
if (i1 == 0)
break;
if ((j1 = method511(c, ac1[i1 - 1], c1)) > 0) {
l += j1;
if (i1 == 1)
j++;
continue;
}
if (i1 >= ac1.length || !method517(c))
break;
l++;
}
if (i1 >= ac1.length) {
boolean flag1 = false;
int k1 = method507(ac3, k, ac2);
int l1 = method508(ac3, ac, l - 1);
if (i == 1 && k1 > 0 && l1 > 0)
flag1 = true;
if (i == 2 && (k1 > 2 && l1 > 0 || k1 > 0 && l1 > 2))
flag1 = true;
if (i == 3 && k1 > 0 && l1 > 2)
flag1 = true;
if (flag1) {
int i2 = k;
int j2 = l - 1;
if (k1 > 2) {
if (k1 == 4) {
boolean flag2 = false;
for (int l2 = i2 - 1; l2 >= 0; l2--)
if (flag2) {
if (ac2[l2] != '*')
break;
i2 = l2;
} else if (ac2[l2] == '*') {
i2 = l2;
flag2 = true;
}
}
boolean flag3 = false;
for (int i3 = i2 - 1; i3 >= 0; i3--)
if (flag3) {
if (method517(ac3[i3]))
break;
i2 = i3;
} else if (!method517(ac3[i3])) {
flag3 = true;
i2 = i3;
}
}
if (l1 > 2) {
if (l1 == 4) {
boolean flag4 = false;
for (int j3 = j2 + 1; j3 < ac3.length; j3++)
if (flag4) {
if (ac[j3] != '*')
break;
j2 = j3;
} else if (ac[j3] == '*') {
j2 = j3;
flag4 = true;
}
}
boolean flag5 = false;
for (int k3 = j2 + 1; k3 < ac3.length; k3++)
if (flag5) {
if (method517(ac3[k3]))
break;
j2 = k3;
} else if (!method517(ac3[k3])) {
flag5 = true;
j2 = k3;
}
}
for (int k2 = i2; k2 <= j2; k2++)
ac3[k2] = '*';
}
}
}
}
private static int method507(char ac[], int j, char ac1[]) {
if (j == 0)
return 2;
for (int k = j - 1; k >= 0; k--) {
if (!method517(ac[k]))
break;
if (ac[k] == ',' || ac[k] == '.')
return 3;
}
int l = 0;
for (int i1 = j - 1; i1 >= 0; i1--) {
if (!method517(ac1[i1]))
break;
if (ac1[i1] == '*')
l++;
}
if (l >= 3)
return 4;
return !method517(ac[j - 1]) ? 0 : 1;
}
private static int method508(char ac[], char ac1[], int i) {
if (i + 1 == ac.length)
return 2;
for (int j = i + 1; j < ac.length; j++) {
if (!method517(ac[j]))
break;
if (ac[j] == '\\' || ac[j] == '/')
return 3;
}
int k = 0;
for (int l = i + 1; l < ac.length; l++) {
if (!method517(ac1[l]))
break;
if (ac1[l] == '*')
k++;
}
if (k >= 5)
return 4;
return !method517(ac[i + 1]) ? 0 : 1;
}
private static void method509(byte abyte0[][], char ac[], char ac1[]) {
if (ac1.length > ac.length)
return;
int j;
for (int k = 0; k <= ac.length - ac1.length; k += j) {
int l = k;
int i1 = 0;
int j1 = 0;
j = 1;
boolean flag1 = false;
boolean flag2 = false;
boolean flag3 = false;
while (l < ac.length && (!flag2 || !flag3)) {
int k1;
char c = ac[l];
char c2 = '\0';
if (l + 1 < ac.length)
c2 = ac[l + 1];
if (i1 < ac1.length && (k1 = method512(c2, c, ac1[i1])) > 0) {
if (k1 == 1 && isDigit(c))
flag2 = true;
if (k1 == 2 && (isDigit(c) || isDigit(c2)))
flag2 = true;
l += k1;
i1++;
continue;
}
if (i1 == 0)
break;
if ((k1 = method512(c2, c, ac1[i1 - 1])) > 0) {
l += k1;
if (i1 == 1)
j++;
continue;
}
if (i1 >= ac1.length || !method518(c))
break;
if (method517(c) && c != '\'')
flag1 = true;
if (isDigit(c))
flag3 = true;
l++;
if ((++j1 * 100) / (l - k) > 90)
break;
}
if (i1 >= ac1.length && (!flag2 || !flag3)) {
boolean flag4 = true;
if (!flag1) {
char c1 = ' ';
if (k - 1 >= 0)
c1 = ac[k - 1];
char c3 = ' ';
if (l < ac.length)
c3 = ac[l];
byte byte0 = method513(c1);
byte byte1 = method513(c3);
if (abyte0 != null && method510(byte0, abyte0, byte1))
flag4 = false;
} else {
boolean flag5 = false;
boolean flag6 = false;
if (k - 1 < 0 || method517(ac[k - 1]) && ac[k - 1] != '\'')
flag5 = true;
if (l >= ac.length || method517(ac[l]) && ac[l] != '\'')
flag6 = true;
if (!flag5 || !flag6) {
boolean flag7 = false;
int k2 = k - 2;
if (flag5)
k2 = k;
for (; !flag7 && k2 < l; k2++)
if (k2 >= 0 && (!method517(ac[k2]) || ac[k2] == '\'')) {
char ac2[] = new char[3];
int j3;
for (j3 = 0; j3 < 3; j3++) {
if (k2 + j3 >= ac.length || method517(ac[k2 + j3]) && ac[k2 + j3] != '\'')
break;
ac2[j3] = ac[k2 + j3];
}
boolean flag8 = true;
if (j3 == 0)
flag8 = false;
if (j3 < 3 && k2 - 1 >= 0 && (!method517(ac[k2 - 1]) || ac[k2 - 1] == '\''))
flag8 = false;
if (flag8 && !method523(ac2))
flag7 = true;
}
if (!flag7)
flag4 = false;
}
}
if (flag4) {
int l1 = 0;
int i2 = 0;
int j2 = -1;
for (int l2 = k; l2 < l; l2++)
if (isDigit(ac[l2]))
l1++;
else if (isLetter(ac[l2])) {
i2++;
j2 = l2;
}
if (j2 > -1)
l1 -= l - 1 - j2;
if (l1 <= i2) {
for (int i3 = k; i3 < l; i3++)
ac[i3] = '*';
} else {
j = 1;
}
}
}
}
}
private static boolean method510(byte byte0, byte abyte0[][], byte byte2) {
int i = 0;
if (abyte0[i][0] == byte0 && abyte0[i][1] == byte2)
return true;
int j = abyte0.length - 1;
if (abyte0[j][0] == byte0 && abyte0[j][1] == byte2)
return true;
do {
int k = (i + j) / 2;
if (abyte0[k][0] == byte0 && abyte0[k][1] == byte2)
return true;
if (byte0 < abyte0[k][0] || byte0 == abyte0[k][0] && byte2 < abyte0[k][1])
j = k;
else
i = k;
} while (i != j && i + 1 != j);
return false;
}
private static int method511(char c, char c1, char c2) {
if (c1 == c)
return 1;
if (c1 == 'o' && c == '0')
return 1;
if (c1 == 'o' && c == '(' && c2 == ')')
return 2;
if (c1 == 'c' && (c == '(' || c == '<' || c == '['))
return 1;
if (c1 == 'e' && c == '\u20AC')
return 1;
if (c1 == 's' && c == '$')
return 1;
return c1 != 'l' || c != 'i' ? 0 : 1;
}
private static int method512(char c, char c1, char c2) {
if (c2 == c1)
return 1;
if (c2 >= 'a' && c2 <= 'm') {
if (c2 == 'a') {
if (c1 == '4' || c1 == '@' || c1 == '^')
return 1;
return c1 != '/' || c != '\\' ? 0 : 2;
}
if (c2 == 'b') {
if (c1 == '6' || c1 == '8')
return 1;
return (c1 != '1' || c != '3') && (c1 != 'i' || c != '3') ? 0 : 2;
}
if (c2 == 'c')
return c1 != '(' && c1 != '<' && c1 != '{' && c1 != '[' ? 0 : 1;
if (c2 == 'd')
return (c1 != '[' || c != ')') && (c1 != 'i' || c != ')') ? 0 : 2;
if (c2 == 'e')
return c1 != '3' && c1 != '\u20AC' ? 0 : 1;
if (c2 == 'f') {
if (c1 == 'p' && c == 'h')
return 2;
return c1 != '\243' ? 0 : 1;
}
if (c2 == 'g')
return c1 != '9' && c1 != '6' && c1 != 'q' ? 0 : 1;
if (c2 == 'h')
return c1 != '#' ? 0 : 1;
if (c2 == 'i')
return c1 != 'y' && c1 != 'l' && c1 != 'j' && c1 != '1' && c1 != '!' && c1 != ':' && c1 != ';' && c1 != '|' ? 0 : 1;
if (c2 == 'j')
return 0;
if (c2 == 'k')
return 0;
if (c2 == 'l')
return c1 != '1' && c1 != '|' && c1 != 'i' ? 0 : 1;
if (c2 == 'm')
return 0;
}
if (c2 >= 'n' && c2 <= 'z') {
if (c2 == 'n')
return 0;
if (c2 == 'o') {
if (c1 == '0' || c1 == '*')
return 1;
return (c1 != '(' || c != ')') && (c1 != '[' || c != ']') && (c1 != '{' || c != '}') && (c1 != '<' || c != '>') ? 0 : 2;
}
if (c2 == 'p')
return 0;
if (c2 == 'q')
return 0;
if (c2 == 'r')
return 0;
if (c2 == 's')
return c1 != '5' && c1 != 'z' && c1 != '$' && c1 != '2' ? 0 : 1;
if (c2 == 't')
return c1 != '7' && c1 != '+' ? 0 : 1;
if (c2 == 'u') {
if (c1 == 'v')
return 1;
return (c1 != '\\' || c != '/') && (c1 != '\\' || c != '|') && (c1 != '|' || c != '/') ? 0 : 2;
}
if (c2 == 'v')
return (c1 != '\\' || c != '/') && (c1 != '\\' || c != '|') && (c1 != '|' || c != '/') ? 0 : 2;
if (c2 == 'w')
return c1 != 'v' || c != 'v' ? 0 : 2;
if (c2 == 'x')
return (c1 != ')' || c != '(') && (c1 != '}' || c != '{') && (c1 != ']' || c != '[') && (c1 != '>' || c != '<') ? 0 : 2;
if (c2 == 'y')
return 0;
if (c2 == 'z')
return 0;
}
if (c2 >= '0' && c2 <= '9') {
if (c2 == '0') {
if (c1 == 'o' || c1 == 'O')
return 1;
return (c1 != '(' || c != ')') && (c1 != '{' || c != '}') && (c1 != '[' || c != ']') ? 0 : 2;
}
if (c2 == '1')
return c1 != 'l' ? 0 : 1;
else
return 0;
}
if (c2 == ',')
return c1 != '.' ? 0 : 1;
if (c2 == '.')
return c1 != ',' ? 0 : 1;
if (c2 == '!')
return c1 != 'i' ? 0 : 1;
else
return 0;
}
private static byte method513(char c) {
if (c >= 'a' && c <= 'z')
return (byte) ((c - 97) + 1);
if (c == '\'')
return 28;
if (c >= '0' && c <= '9')
return (byte) ((c - 48) + 29);
else
return 27;
}
private static void method514(char ac[]) {
int j;
int k = 0;
int l = 0;
int i1 = 0;
while ((j = method515(ac, k)) != -1) {
boolean flag = false;
for (int j1 = k; j1 >= 0 && j1 < j && !flag; j1++)
if (!method517(ac[j1]) && !method518(ac[j1]))
flag = true;
if (flag)
l = 0;
if (l == 0)
i1 = j;
k = method516(ac, j);
int k1 = 0;
for (int l1 = j; l1 < k; l1++)
k1 = (k1 * 10 + ac[l1]) - 48;
if (k1 > 255 || k - j > 8)
l = 0;
else
l++;
if (l == 4) {
for (int i2 = i1; i2 < k; i2++)
ac[i2] = '*';
l = 0;
}
}
}
private static int method515(char ac[], int i) {
for (int k = i; k < ac.length && k >= 0; k++)
if (ac[k] >= '0' && ac[k] <= '9')
return k;
return -1;
}
private static int method516(char ac[], int j) {
for (int k = j; k < ac.length && k >= 0; k++)
if (ac[k] < '0' || ac[k] > '9')
return k;
return ac.length;
}
private static boolean method517(char c) {
return !isLetter(c) && !isDigit(c);
}
private static boolean method518(char c) {
return c < 'a' || c > 'z' || c == 'v' || c == 'x' || c == 'j' || c == 'q' || c == 'z';
}
private static boolean isLetter(char c) {
return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';
}
private static boolean isDigit(char c) {
return c >= '0' && c <= '9';
}
private static boolean isLowerCaseLetter(char c) {
return c >= 'a' && c <= 'z';
}
private static boolean isUpperCaseLetter(char c) {
return c >= 'A' && c <= 'Z';
}
private static boolean method523(char ac[]) {
boolean flag = true;
for (int i = 0; i < ac.length; i++)
if (!isDigit(ac[i]) && ac[i] != 0)
flag = false;
if (flag)
return true;
int j = method524(ac);
int k = 0;
int l = anIntArray620.length - 1;
if (j == anIntArray620[k] || j == anIntArray620[l])
return true;
do {
int i1 = (k + l) / 2;
if (j == anIntArray620[i1])
return true;
if (j < anIntArray620[i1])
l = i1;
else
k = i1;
} while (k != l && k + 1 != l);
return false;
}
private static int method524(char ac[]) {
if (ac.length > 6)
return 0;
int k = 0;
for (int l = 0; l < ac.length; l++) {
char c = ac[ac.length - l - 1];
if (c >= 'a' && c <= 'z')
k = k * 38 + ((c - 97) + 1);
else if (c == '\'')
k = k * 38 + 27;
else if (c >= '0' && c <= '9')
k = k * 38 + ((c - 48) + 28);
else if (c != 0)
return 0;
}
return k;
}
private static int[] anIntArray620;
private static char[][] aCharArrayArray621;
private static byte[][][] aByteArrayArrayArray622;
private static char[][] aCharArrayArray623;
private static char[][] aCharArrayArray624;
private static int[] anIntArray625;
private static final String[] exceptions = {
"cook", "cook's", "cooks", "seeks", "sheet", "woop", "woops", "faq", "noob", "noobs"
};
}