// File: /workspace/github_cpp_makefile_star2_O2/kipa00[P]AplusB-mc/compiler/analyze.cpp
// Function: analyze(world const&, int, int, int, std::vector<int, std::allocator<int>>&)
int analyze(const world &w, int x, int y, int z, vector<int> &result) {
	byte this_block = w.getXYZ(x, y, z);
	if ((this_block & BLOCK_ONLY) == REDSTONE_WIRE) {
		vector<int> side;
		for (int i=0; i<wide_len; ++i) {
			const int nx = x + wide_dx[i], ny = y + wide_dy[i], nz = z + wide_dz[i];
			byte fetched = w.getXYZ(nx, ny, nz);
			if ((fetched & BLOCK_ONLY) == REDSTONE_WIRE) {
				if (wide_dy[i] == 0 && abs(wide_dx[i]) + abs(wide_dz[i]) <= 1) {
					side.push_back(pack(nx, ny, nz));
				} else if (wide_dy[i] == 1 && !is_opaque(w.getXYZ(x, y + 1, z))) {
					side.push_back(pack(nx, ny, nz));
				} else if (wide_dy[i] == -1 && !is_opaque(w.getXYZ(nx, ny + 1, nz))) {
					side.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == REDSTONE_TORCH || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
				if (
					abs(nx - x) + abs(ny - y) + abs(nz - z) <= 1 // direct connection
					|| (is_opaque(w.getXYZ(nx, ny + 1, nz)) && abs(nx - x) + abs(ny + 1 - y) + abs(nz - z) <= 1) // indirect connection
				) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if (is_repeater(fetched) || (fetched & BLOCK_ONLY) == COMPARATOR) {
				if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
					return
						(xx == x && yy == y && zz == z) // direct connection
						|| (is_opaque(w.getXYZ(xx, yy, zz)) && abs(xx - x) + abs(yy - y) + abs(zz - z) <= 1); // indirect connection
					})
				) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == LEVER) {
				if (
					abs(nx - x) + abs(ny - y) + abs(nz - z) <= 1 // direct connection
					|| test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
						return is_opaque(w.getXYZ(xx, yy, zz)) && abs(xx - x) + abs(yy - y) + abs(zz - z) <= 1;
					})
				) {
					result.push_back(pack(nx, ny, nz));
				}
			}
		}
		result.push_back(-1);
		for (const int &x : side) {
			result.push_back(x);
		}
		return 1;
	} else if ((this_block & BLOCK_ONLY) == REDSTONE_TORCH || (this_block & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
		int bx = x, by = y, bz = z;
		if ((this_block & BLOCK_ONLY) == REDSTONE_TORCH) --by;
		else switch (this_block & 3) {
			case EAST: --bx; break;
			case WEST: ++bx; break;
			case SOUTH: --bz; break;
			case NORTH: ++bz; break;
		}
		for (int i=0; i<wide_len; ++i) {
			const int nx = x + wide_dx[i], ny = y + wide_dy[i], nz = z + wide_dz[i];
			byte fetched = w.getXYZ(nx, ny, nz);
			if ((fetched & BLOCK_ONLY) == REDSTONE_WIRE) {
				if (redstone_into(w, nx, ny, nz, bx, by, bz)) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == REDSTONE_TORCH || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
				if (nx == bx && ny == by - 1 && nz == bz) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if (is_repeater(fetched) || (fetched & BLOCK_ONLY) == COMPARATOR) {
				if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
					return bx == xx && by == yy && bz == zz;
				})) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == LEVER) {
				if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
					return bx == xx && by == yy && bz == zz;
				})) {
					result.push_back(pack(nx, ny, nz));
				}
			}
		}
		return 2;
	} else if (is_repeater(this_block)) {
		test_facing(w, x, y, z, [&] (const world &w, int bx, int by, int bz) {
			byte facing = w.getXYZ(bx, by, bz);
			if (is_opaque(facing)) {
				for (int i=0; i<narrow_len; ++i) {
					const int nx = bx + narrow_dx[i], ny = by + narrow_dy[i], nz = bz + narrow_dz[i];
					byte fetched = w.getXYZ(nx, ny, nz);
					if ((fetched & BLOCK_ONLY) == REDSTONE_WIRE) {
						if (redstone_into(w, nx, ny, nz, bx, by, bz)) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if ((fetched & BLOCK_ONLY) == REDSTONE_TORCH || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
						if (ny - by == -1) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if (is_repeater(fetched) || (fetched & BLOCK_ONLY) == COMPARATOR) {
						if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
							return bx == xx && by == yy && bz == zz;
						})) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if ((fetched & BLOCK_ONLY) == LEVER) {
						if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
							return bx == xx && by == yy && bz == zz;
						})) {
							result.push_back(pack(nx, ny, nz));
						}
					}
				}
			} else switch (facing & BLOCK_ONLY) {
				case REDSTONE_WIRE:
				case REDSTONE_TORCH:
				case REDSTONE_WALL_TORCH:
				case LEVER:
					result.push_back(pack(bx, by, bz));
					break;
				default:
					if (is_repeater(facing) || (facing & BLOCK_ONLY) == COMPARATOR) {
						if ((facing & 3) == (this_block & 3)) {
							result.push_back(pack(bx, by, bz));
						}
					}
					break;
			}
			result.push_back(-1);
			int dsx = -1, dex = 1, dsz = -1, dez = 1;
			if (z == bz) {
				dsx = dex = 0;
			} else {
				dsz = dez = 0;
			}
			for (int dx = dsx; dx <= dex; dx += 2) {
				for (int dz = dsz; dz <= dez; dz += 2) {
					if (is_repeater(w.getXYZ(x + dx, y, z + dz)) && test_opposite_facing(w, x + dx, y, z + dz, [=] (const world &w, int bx, int by, int bz) {
						return bx == x && by == y && bz == z;
					})) {
						result.push_back(pack(x + dx, y, z + dz));
					}
				}
			}
			return true;
		});
		return 3 + ((this_block >> 3) & 3);
	} else if ((this_block & BLOCK_ONLY) == COMPARATOR) {
		test_facing(w, x, y, z, [&] (const world &w, int bx, int by, int bz) {
			byte facing = w.getXYZ(bx, by, bz);
			if (is_opaque(facing)) {
				for (int i=0; i<narrow_len; ++i) {
					const int nx = bx + narrow_dx[i], ny = by + narrow_dy[i], nz = bz + narrow_dz[i];
					byte fetched = w.getXYZ(nx, ny, nz);
					if ((fetched & BLOCK_ONLY) == REDSTONE_WIRE) {
						if (redstone_into(w, nx, ny, nz, bx, by, bz)) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if ((fetched & BLOCK_ONLY) == REDSTONE_TORCH || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
						if (ny - by == -1) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if (is_repeater(fetched) || (fetched & BLOCK_ONLY) == COMPARATOR) {
						if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
							return bx == xx && by == yy && bz == zz;
						})) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if ((fetched & BLOCK_ONLY) == LEVER) {
						if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
							return bx == xx && by == yy && bz == zz;
						})) {
							result.push_back(pack(nx, ny, nz));
						}
					}
				}
			} else switch (facing & BLOCK_ONLY) {
				case REDSTONE_WIRE:
				case REDSTONE_TORCH:
				case REDSTONE_WALL_TORCH:
				case LEVER:
					result.push_back(pack(bx, by, bz));
					break;
				default:
					if (is_repeater(facing) || (facing & BLOCK_ONLY) == COMPARATOR) {
						if ((facing & 3) == (this_block & 3)) {
							result.push_back(pack(bx, by, bz));
						}
					}
					break;
			}
			result.push_back(-1);
			int dsx = -1, dex = 1, dsz = -1, dez = 1;
			if (z == bz) {
				dsx = dex = 0;
			} else {
				dsz = dez = 0;
			}
			for (int dx = dsx; dx <= dex; dx += 2) {
				for (int dz = dsz; dz <= dez; dz += 2) {
					byte facing = w.getXYZ(x + dx, y, z + dz);
					if ((facing & BLOCK_ONLY) == REDSTONE_WIRE) {
						result.push_back(pack(x + dx, y, z + dz));
					} else if (is_repeater(facing) || (facing & BLOCK_ONLY) == COMPARATOR) {
						if (test_opposite_facing(w, x + dx, y, z + dz, [=] (const world &w, int bx, int by, int bz) {
							return bx == x && by == y && bz == z;
						})) {
							result.push_back(pack(x + dx, y, z + dz));
						}
					}
				}
			}
			return true;
		});
		return 7 + (this_block & SUBTRACT ? 1 : 0);
	} else if ((this_block & BLOCK_ONLY) == LEVER) {
		return 9;
	} else if ((this_block & BLOCK_ONLY) == REDSTONE_LAMP) {
		for (int i=0; i<narrow_len; ++i) {
			const int nx = x + narrow_dx[i], ny = y + narrow_dy[i], nz = z + narrow_dz[i];
			byte fetched = w.getXYZ(nx, ny, nz);
			if (is_opaque(fetched)) {
				for (int j=0; j<narrow_len; ++j) {
					const int bx = nx + narrow_dx[j], by = ny + narrow_dy[j], bz = nz + narrow_dz[j];
					byte facing = w.getXYZ(bx, by, bz);
					if ((facing & BLOCK_ONLY) == REDSTONE_WIRE) {
						if (redstone_into(w, bx, by, bz, nx, ny, nz)) {
							result.push_back(pack(bx, by, bz));
						}
					} else if ((facing & BLOCK_ONLY) == REDSTONE_TORCH || (facing & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
						if (by - ny == -1) {
							result.push_back(pack(bx, by, bz));
						}
					} else if (is_repeater(facing) || (facing & BLOCK_ONLY) == COMPARATOR) {
						if (test_opposite_facing(w, bx, by, bz, [=] (const world &w, int xx, int yy, int zz) {
							return nx == xx && ny == yy && nz == zz;
						})) {
							result.push_back(pack(bx, by, bz));
						}
					} else if ((facing & BLOCK_ONLY) == LEVER) {
						if (test_opposite_facing(w, bx, by, bz, [=] (const world &w, int xx, int yy, int zz) {
							return nx == xx && ny == yy && nz == zz;
						})) {
							result.push_back(pack(bx, by, bz));
						}
					}
				}
			} else if ((fetched & BLOCK_ONLY) == REDSTONE_WIRE) {
				if (redstone_into(w, nx, ny, nz, x, y, z)) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == REDSTONE_TORCH || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
				if (ny - y <= 0 || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if (is_repeater(fetched) || (fetched & BLOCK_ONLY) == COMPARATOR) {
				if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
					return x == xx && y == yy && z == zz;
				})) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == LEVER) {
				if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
					return x == xx && y == yy && z == zz;
				})) {
					result.push_back(pack(nx, ny, nz));
				}
			}
		}
		return 10;
	}
	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1b8, %rsp            # imm = 0x1B8
movq %r8, 0x48(%rsp)
movl %esi, 0x30(%rsp)
movl %edx, 0x1c(%rsp)
movl %ecx, 0x2c(%rsp)
movq %rdi, 0x40(%rsp)
movl %esi, 0x20(%rsp)
movq %rdx, %r14
movl %ecx, 0x38(%rsp)
callq 0x4dd2
movl %eax, %ebx
movb %al, 0x17(%rsp)
movzbl %al, %edi
andb $-0x10, %bl
cmpb $0x60, %bl
je 0x5787
movzbl %bl, %ebp
cmpl $0x50, %ebp
je 0x5787
cmpl $0x40, %ebp
jne 0x59b9
xorps %xmm0, %xmm0
leaq 0x50(%rsp), %rax
andq $0x0, 0x10(%rax)
movaps %xmm0, (%rax)
xorl %eax, %eax
xorl %ecx, %ecx
cmpq $0x19, %rcx
je 0x5a5d
movq %rcx, 0x20(%rsp)
leaq 0x336f(%rip), %rcx      # 0x8740
movl (%rax,%rcx), %ebx
movl 0x30(%rsp), %r13d
leaq 0x33c0(%rip), %rcx      # 0x87a0
movl (%rax,%rcx), %r15d
addl 0x1c(%rsp), %r15d
addl %ebx, %r13d
movq %rax, 0x38(%rsp)
leaq 0x3408(%rip), %rcx      # 0x8800
movl (%rax,%rcx), %r12d
movl 0x2c(%rsp), %ebp
addl %r12d, %ebp
movq 0x40(%rsp), %rdi
movl %r13d, %esi
movl %r15d, %edx
movl %ebp, %ecx
callq 0x4dd2
movl %eax, %r14d
andb $-0x10, %r14b
cmpb $0x60, %r14b
je 0x5488
movzbl %r14b, %ecx
cmpl $0x50, %ecx
je 0x5488
cmpl $0x40, %ecx
jne 0x5538
movl $0xb83c1d, %eax         # imm = 0xB83C1D
movq 0x20(%rsp), %rcx
btq %rcx, %rax
jae 0x55ed
movl %ebx, %eax
negl %eax
cmovsl %ebx, %eax
movl %r12d, %ecx
negl %ecx
cmovsl %r12d, %ecx
addl %eax, %ecx
cmpl $0x1, %ecx
ja 0x55ed
movl %r13d, %edi
movl %r15d, %esi
movl %ebp, %edx
callq 0x4ef8
movl %eax, 0x34(%rsp)
leaq 0x50(%rsp), %rdi
leaq 0x34(%rsp), %rsi
callq 0x6ddc
jmp 0x5771
movl %r13d, %eax
subl 0x30(%rsp), %eax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
movl %r15d, %eax
subl 0x1c(%rsp), %eax
movl %eax, %edx
negl %edx
cmovsl %eax, %edx
addl %ecx, %edx
movl %ebp, %eax
subl 0x2c(%rsp), %eax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
addl %edx, %ecx
cmpl $0x2, %ecx
jae 0x54df
movl %r13d, %edi
movl %r15d, %esi
movl %ebp, %edx
callq 0x4ef8
movl %eax, 0x34(%rsp)
movq 0x48(%rsp), %rdi
leaq 0x34(%rsp), %rsi
callq 0x6ddc
jmp 0x5771
leal 0x1(%r15), %ebx
movq 0x40(%rsp), %rdi
movl %r13d, %esi
movl %ebx, %edx
movl %ebp, %ecx
callq 0x4dd2
movzbl %al, %edi
callq 0x708a
testb %al, %al
je 0x5771
movl %r13d, %eax
subl 0x30(%rsp), %eax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
subl 0x1c(%rsp), %ebx
movl %ebx, %eax
negl %eax
cmovsl %ebx, %eax
movl %ebp, %edx
subl 0x2c(%rsp), %edx
movl %edx, %esi
negl %esi
cmovsl %edx, %esi
addl %ecx, %esi
addl %eax, %esi
cmpl $0x1, %esi
jbe 0x54ba
jmp 0x5771
movzbl %al, %edi
callq 0x707f
cmpb $0x70, %r14b
setne %cl
xorb $0x1, %al
testb %al, %cl
jne 0x5681
movl 0x30(%rsp), %eax
movl 0x1c(%rsp), %ecx
movl 0x2c(%rsp), %edx
andq $0x0, 0x158(%rsp)
movl %eax, 0x150(%rsp)
movl %ecx, 0x154(%rsp)
movl %edx, 0x158(%rsp)
leaq 0xaa6(%rip), %rax       # 0x6028
movq %rax, 0x168(%rsp)
leaq 0xb13(%rip), %rax       # 0x60a4
movq %rax, 0x160(%rsp)
movq 0x40(%rsp), %rdi
movl %r13d, %esi
movl %r15d, %edx
movl %ebp, %ecx
leaq 0x150(%rsp), %r14
movq %r14, %r8
callq 0x4f8e
movl %eax, %ebx
movq %r14, %rdi
callq 0x3028
testb %bl, %bl
je 0x5771
movl %r13d, %edi
movl %r15d, %esi
movl %ebp, %edx
callq 0x4ef8
movl %eax, 0x34(%rsp)
movq 0x48(%rsp), %rdi
leaq 0x34(%rsp), %rsi
callq 0x6ddc
jmp 0x5771
movl $0x41c020, %eax         # imm = 0x41C020
movq 0x20(%rsp), %rcx
btq %rcx, %rax
jae 0x562a
movl 0x30(%rsp), %esi
movl 0x1c(%rsp), %edx
incl %edx
movl 0x2c(%rsp), %ecx
movq 0x40(%rsp), %rdi
callq 0x4dd2
movzbl %al, %edi
callq 0x708a
testb %al, %al
movq 0x20(%rsp), %rcx
je 0x5751
movl $0x40382, %eax          # imm = 0x40382
btq %rcx, %rax
jae 0x5771
leal 0x1(%r15), %edx
movq 0x40(%rsp), %rdi
movl %r13d, %esi
movl %ebp, %ecx
callq 0x4dd2
movzbl %al, %edi
callq 0x708a
testb %al, %al
jne 0x5771
movl %r13d, %edi
movl %r15d, %esi
movl %ebp, %edx
callq 0x4ef8
movl %eax, 0x34(%rsp)
leaq 0x50(%rsp), %rdi
leaq 0x34(%rsp), %rsi
callq 0x6ddc
jmp 0x5771
cmpb $-0x50, %r14b
jne 0x5771
movl 0x30(%rsp), %eax
movl %r13d, %ecx
subl %eax, %ecx
movl %ecx, %edx
negl %edx
cmovsl %ecx, %edx
movl 0x1c(%rsp), %ecx
movl %r15d, %esi
subl %ecx, %esi
movl %esi, %edi
negl %edi
cmovsl %esi, %edi
addl %edx, %edi
movl 0x2c(%rsp), %edx
movl %ebp, %esi
subl %edx, %esi
movl %esi, %r8d
negl %r8d
cmovsl %esi, %r8d
addl %edi, %r8d
cmpl $0x2, %r8d
jb 0x572f
andq $0x0, 0x138(%rsp)
movl %eax, 0x130(%rsp)
movl %ecx, 0x134(%rsp)
movl %edx, 0x138(%rsp)
leaq 0x9e3(%rip), %rax       # 0x60d0
movq %rax, 0x148(%rsp)
leaq 0xa3c(%rip), %rax       # 0x6138
movq %rax, 0x140(%rsp)
movq 0x40(%rsp), %rdi
movl %r13d, %esi
movl %r15d, %edx
movl %ebp, %ecx
leaq 0x130(%rsp), %r14
movq %r14, %r8
callq 0x4f8e
movl %eax, %ebx
movq %r14, %rdi
callq 0x3028
testb %bl, %bl
je 0x5771
movl %r13d, %edi
movl %r15d, %esi
movl %ebp, %edx
callq 0x4ef8
movl %eax, 0x34(%rsp)
movq 0x48(%rsp), %rdi
leaq 0x34(%rsp), %rsi
callq 0x6ddc
jmp 0x5771
movl %r13d, %edi
movl %r15d, %esi
movl %ebp, %edx
callq 0x4ef8
movl %eax, 0x34(%rsp)
leaq 0x50(%rsp), %rdi
leaq 0x34(%rsp), %rsi
callq 0x6ddc
movq 0x20(%rsp), %rcx
incq %rcx
movq 0x38(%rsp), %rax
addq $0x4, %rax
jmp 0x53bb
movl %edi, %eax
andl $-0x10, %eax
cmpl $0x50, %eax
jne 0x599d
decl %r14d
movq %r14, 0x68(%rsp)
leal -0x1(%r14), %eax
movl %eax, 0x18(%rsp)
xorl %ebp, %ebp
cmpq $0x64, %rbp
je 0x5996
leaq 0x2f88(%rip), %rax      # 0x8740
movl (%rbp,%rax), %r15d
addl 0x30(%rsp), %r15d
leaq 0x2fd7(%rip), %rax      # 0x87a0
movl (%rbp,%rax), %r14d
addl 0x1c(%rsp), %r14d
leaq 0x3026(%rip), %rax      # 0x8800
movl (%rbp,%rax), %ebx
addl 0x2c(%rsp), %ebx
movq 0x40(%rsp), %rdi
movl %r15d, %esi
movl %r14d, %edx
movl %ebx, %ecx
callq 0x4dd2
movl %eax, %r13d
andb $-0x10, %r13b
cmpb $0x60, %r13b
je 0x583f
movzbl %r13b, %ecx
cmpl $0x50, %ecx
je 0x583f
cmpl $0x40, %ecx
jne 0x5870
movl 0x38(%rsp), %eax
movl %eax, (%rsp)
movq 0x40(%rsp), %rdi
movl %r15d, %esi
movl %r14d, %edx
movl %ebx, %ecx
movl 0x20(%rsp), %r8d
movq 0x68(%rsp), %r9
callq 0x4fe8
testb %al, %al
jne 0x596d
jmp 0x598d
cmpl 0x20(%rsp), %r15d
jne 0x598d
cmpl 0x18(%rsp), %r14d
jne 0x598d
cmpl 0x38(%rsp), %ebx
jne 0x598d
movl 0x20(%rsp), %edi
movl 0x18(%rsp), %esi
movl 0x38(%rsp), %edx
jmp 0x5975
movzbl %al, %edi
callq 0x707f
xorb $0x1, %al
cmpb $0x70, %r13b
setne %cl
testb %al, %cl
jne 0x58ed
andq $0x0, 0x118(%rsp)
movl 0x20(%rsp), %eax
movl %eax, 0x110(%rsp)
movq 0x68(%rsp), %rax
movl %eax, 0x114(%rsp)
movl 0x38(%rsp), %eax
movl %eax, 0x118(%rsp)
leaq 0x8ad(%rip), %rax       # 0x6164
movq %rax, 0x128(%rsp)
leaq 0x8b8(%rip), %rax       # 0x617e
movq %rax, 0x120(%rsp)
movq 0x40(%rsp), %rdi
movl %r15d, %esi
movl %r14d, %edx
movl %ebx, %ecx
leaq 0x110(%rsp), %r12
movq %r12, %r8
callq 0x4f8e
jmp 0x595d
cmpb $-0x50, %r13b
jne 0x598d
andq $0x0, 0xf8(%rsp)
movl 0x20(%rsp), %eax
movl %eax, 0xf0(%rsp)
movq 0x68(%rsp), %rax
movl %eax, 0xf4(%rsp)
movl 0x38(%rsp), %eax
movl %eax, 0xf8(%rsp)
leaq 0x881(%rip), %rax       # 0x61aa
movq %rax, 0x108(%rsp)
leaq 0x88c(%rip), %rax       # 0x61c4
movq %rax, 0x100(%rsp)
movq 0x40(%rsp), %rdi
movl %r15d, %esi
movl %r14d, %edx
movl %ebx, %ecx
leaq 0xf0(%rsp), %r12
movq %r12, %r8
callq 0x4f8e
movl %eax, %r13d
movq %r12, %rdi
callq 0x3028
testb %r13b, %r13b
je 0x598d
movl %r15d, %edi
movl %r14d, %esi
movl %ebx, %edx
callq 0x4ef8
movl %eax, 0x50(%rsp)
movq 0x48(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x6ddc
addq $0x4, %rbp
jmp 0x57a7
movb $0x2, %al
jmp 0x5a9d
andl $0x3, %edi
leaq 0x2d69(%rip), %rax      # 0x8710
movslq (%rax,%rdi,4), %rcx
addq %rax, %rcx
jmpq *%rcx
decl 0x20(%rsp)
jmp 0x5798
callq 0x707f
testb %al, %al
je 0x5ab2
xorps %xmm0, %xmm0
movaps %xmm0, 0x1a0(%rsp)
movaps %xmm0, 0x190(%rsp)
pushq $0x28
popq %rdi
callq 0x2150
movq 0x48(%rsp), %rcx
movq %rcx, (%rax)
leaq 0x17(%rsp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x2c(%rsp), %rcx
movq %rcx, 0x10(%rax)
leaq 0x30(%rsp), %rcx
movq %rcx, 0x18(%rax)
leaq 0x1c(%rsp), %rcx
movq %rcx, 0x20(%rax)
leaq 0x190(%rsp), %r8
movq %rax, (%r8)
leaq 0x7d1(%rip), %rax       # 0x61f0
movq %rax, 0x18(%r8)
leaq 0xbdc(%rip), %rax       # 0x6606
movq %rax, 0x10(%r8)
movq 0x40(%rsp), %rdi
movl 0x20(%rsp), %esi
movl %r14d, %edx
movl 0x38(%rsp), %ecx
callq 0x4f34
leaq 0x190(%rsp), %rdi
callq 0x3028
movb 0x17(%rsp), %al
shrb $0x3, %al
andb $0x3, %al
addb $0x3, %al
jmp 0x5a9d
leaq 0x34(%rsp), %rsi
orl $-0x1, (%rsi)
movq 0x48(%rsp), %rdi
callq 0x6ddc
movq 0x50(%rsp), %rbx
movq 0x58(%rsp), %r14
cmpq %r14, %rbx
je 0x5a91
movq 0x48(%rsp), %rdi
movq %rbx, %rsi
callq 0x300a
addq $0x4, %rbx
jmp 0x5a79
leaq 0x50(%rsp), %rdi
callq 0x3050
movb $0x1, %al
movzbl %al, %eax
addq $0x1b8, %rsp            # imm = 0x1B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
cmpb $0x70, %bl
je 0x5ec8
cmpl $0xb0, %ebp
je 0x5ec1
cmpl $0xa0, %ebp
jne 0x5f64
xorl %r15d, %r15d
leaq 0x70(%rsp), %r13
cmpq $0x6, %r15
je 0x5f6b
leaq 0x2d74(%rip), %rax      # 0x8860
movl (%rax,%r15,4), %esi
addl 0x30(%rsp), %esi
leaq 0x2d85(%rip), %rax      # 0x8880
movl (%rax,%r15,4), %edx
addl 0x1c(%rsp), %edx
leaq 0x2d96(%rip), %rax      # 0x88a0
movl (%rax,%r15,4), %ecx
addl 0x2c(%rsp), %ecx
movq 0x40(%rsp), %rdi
movl %esi, 0x18(%rsp)
movl %edx, 0x20(%rsp)
movl %ecx, 0x38(%rsp)
callq 0x4dd2
movl %eax, %ebx
movzbl %al, %r14d
movl %r14d, %edi
callq 0x708a
testb %al, %al
movq %r15, 0x68(%rsp)
je 0x5d11
xorl %r12d, %r12d
cmpq $0x18, %r12
je 0x5e99
leaq 0x2d09(%rip), %rax      # 0x8860
movl (%r12,%rax), %r14d
addl 0x18(%rsp), %r14d
leaq 0x2d19(%rip), %rax      # 0x8880
movl (%r12,%rax), %r15d
addl 0x20(%rsp), %r15d
leaq 0x2d29(%rip), %rax      # 0x88a0
movl (%r12,%rax), %ebx
addl 0x38(%rsp), %ebx
movq 0x40(%rsp), %rdi
movl %r14d, %esi
movl %r15d, %edx
movl %ebx, %ecx
callq 0x4dd2
movl %eax, %ebp
andb $-0x10, %bpl
cmpb $0x60, %bpl
je 0x5bd4
movzbl %bpl, %ecx
cmpl $0x50, %ecx
je 0x5bd4
cmpl $0x40, %ecx
jne 0x5c03
movl 0x38(%rsp), %eax
movl %eax, (%rsp)
movq 0x40(%rsp), %rdi
movl %r14d, %esi
movl %r15d, %edx
movl %ebx, %ecx
movl 0x18(%rsp), %r8d
movl 0x20(%rsp), %r9d
callq 0x4fe8
testb %al, %al
jne 0x5bda
jmp 0x5bfa
cmpq $0x4, %r12
jne 0x5bfa
movl %r14d, %edi
movl %r15d, %esi
movl %ebx, %edx
callq 0x4ef8
movl %eax, 0x50(%rsp)
movq 0x48(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x6ddc
addq $0x4, %r12
jmp 0x5b46
movzbl %al, %edi
callq 0x707f
xorb $0x1, %al
cmpb $0x70, %bpl
setne %cl
testb %al, %cl
jne 0x5c9e
andq $0x0, 0xd8(%rsp)
movl 0x18(%rsp), %eax
movl %eax, 0xd0(%rsp)
movl 0x20(%rsp), %eax
movl %eax, 0xd4(%rsp)
movl 0x38(%rsp), %eax
movl %eax, 0xd8(%rsp)
leaq 0x1043(%rip), %rax      # 0x6c90
movq %rax, 0xe8(%rsp)
leaq 0x104e(%rip), %rax      # 0x6caa
movq %rax, 0xe0(%rsp)
movq 0x40(%rsp), %rdi
movl %r14d, %esi
movl %r15d, %edx
movl %ebx, %ecx
leaq 0xd0(%rsp), %r13
movq %r13, %r8
callq 0x4f8e
movl %eax, %ebp
movq %r13, %rdi
callq 0x3028
testb %bpl, %bpl
leaq 0x70(%rsp), %r13
jne 0x5bda
jmp 0x5bfa
cmpb $-0x50, %bpl
jne 0x5bfa
andq $0x0, 0x78(%rsp)
movl 0x18(%rsp), %eax
movl %eax, 0x70(%rsp)
movl 0x20(%rsp), %eax
movl %eax, 0x74(%rsp)
movl 0x38(%rsp), %eax
movl %eax, 0x78(%rsp)
leaq 0x1009(%rip), %rax      # 0x6cd6
movq %rax, 0x88(%rsp)
leaq 0x1014(%rip), %rax      # 0x6cf0
movq %rax, 0x80(%rsp)
movq 0x40(%rsp), %rdi
movl %r14d, %esi
movl %r15d, %edx
movl %ebx, %ecx
movq %r13, %r8
callq 0x4f8e
movl %eax, %ebp
movq %r13, %rdi
callq 0x3028
testb %bpl, %bpl
jne 0x5bda
jmp 0x5bfa
andb $-0x10, %bl
cmpb $0x60, %bl
je 0x5d5a
movzbl %bl, %eax
cmpl $0x50, %eax
je 0x5d5a
cmpl $0x40, %eax
jne 0x5d76
movl 0x30(%rsp), %r8d
movl 0x1c(%rsp), %r9d
movl 0x2c(%rsp), %eax
movl %eax, (%rsp)
movq 0x40(%rsp), %rdi
movl 0x18(%rsp), %esi
movl 0x20(%rsp), %edx
movl 0x38(%rsp), %ecx
callq 0x4fe8
testb %al, %al
jne 0x5e75
jmp 0x5e99
cmpb $0x60, %bl
je 0x5e75
movl 0x20(%rsp), %eax
cmpl 0x1c(%rsp), %eax
jg 0x5e99
jmp 0x5e75
movl %r14d, %edi
callq 0x707f
xorb $0x1, %al
cmpb $0x70, %bl
setne %cl
testb %al, %cl
jne 0x5df5
movl 0x30(%rsp), %eax
movl 0x1c(%rsp), %ecx
movl 0x2c(%rsp), %edx
andq $0x0, 0xb8(%rsp)
movl %eax, 0xb0(%rsp)
movl %ecx, 0xb4(%rsp)
movl %edx, 0xb8(%rsp)
leaq 0xf61(%rip), %rax       # 0x6d1c
movq %rax, 0xc8(%rsp)
leaq 0xf6c(%rip), %rax       # 0x6d36
movq %rax, 0xc0(%rsp)
movq 0x40(%rsp), %rdi
movl 0x18(%rsp), %esi
movl 0x20(%rsp), %edx
movl 0x38(%rsp), %ecx
leaq 0xb0(%rsp), %r14
movq %r14, %r8
callq 0x4f8e
jmp 0x5e67
cmpb $-0x50, %bl
jne 0x5e99
movl 0x30(%rsp), %eax
movl 0x1c(%rsp), %ecx
movl 0x2c(%rsp), %edx
andq $0x0, 0x98(%rsp)
movl %eax, 0x90(%rsp)
movl %ecx, 0x94(%rsp)
movl %edx, 0x98(%rsp)
leaq 0xf33(%rip), %rax       # 0x6d62
movq %rax, 0xa8(%rsp)
leaq 0xf3e(%rip), %rax       # 0x6d7c
movq %rax, 0xa0(%rsp)
movq 0x40(%rsp), %rdi
movl 0x18(%rsp), %esi
movl 0x20(%rsp), %edx
movl 0x38(%rsp), %ecx
leaq 0x90(%rsp), %r14
movq %r14, %r8
callq 0x4f8e
movl %eax, %ebx
movq %r14, %rdi
callq 0x3028
testb %bl, %bl
je 0x5e99
movl 0x18(%rsp), %edi
movl 0x20(%rsp), %esi
movl 0x38(%rsp), %edx
callq 0x4ef8
movl %eax, 0x50(%rsp)
movq 0x48(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x6ddc
movq 0x68(%rsp), %r15
incq %r15
jmp 0x5adb
decl 0x38(%rsp)
jmp 0x5798
incl 0x20(%rsp)
jmp 0x5798
incl 0x38(%rsp)
jmp 0x5798
movb $0x9, %al
jmp 0x5a9d
xorps %xmm0, %xmm0
movaps %xmm0, 0x180(%rsp)
movaps %xmm0, 0x170(%rsp)
pushq $0x28
popq %rdi
callq 0x2150
movq 0x48(%rsp), %rcx
movq %rcx, (%rax)
leaq 0x17(%rsp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x2c(%rsp), %rcx
movq %rcx, 0x10(%rax)
leaq 0x30(%rsp), %rcx
movq %rcx, 0x18(%rax)
leaq 0x1c(%rsp), %rcx
movq %rcx, 0x20(%rax)
leaq 0x170(%rsp), %r8
movq %rax, (%r8)
leaq 0x821(%rip), %rax       # 0x6742
movq %rax, 0x18(%r8)
leaq 0xc28(%rip), %rax       # 0x6b54
movq %rax, 0x10(%r8)
movq 0x40(%rsp), %rdi
movl 0x20(%rsp), %esi
movl %r14d, %edx
movl 0x38(%rsp), %ecx
callq 0x4f34
leaq 0x170(%rsp), %rdi
callq 0x3028
movzbl 0x17(%rsp), %ecx
xorl %eax, %eax
btl $0x3, %ecx
adcb $0x7, %al
jmp 0x5a9d
xorl %eax, %eax
jmp 0x5a9d
movb $0xa, %al
jmp 0x5a9d
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
jmp 0x6007
jmp 0x5f84
movq %rax, %rbx
leaq 0x170(%rsp), %rdi
jmp 0x6007
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
jmp 0x6007
jmp 0x5fa0
movq %rax, %rbx
leaq 0x190(%rsp), %rdi
jmp 0x6007
movq %rax, %rbx
leaq 0x130(%rsp), %rdi
jmp 0x5fdb
jmp 0x6012
jmp 0x6012
jmp 0x6012
jmp 0x6012
jmp 0x6012
jmp 0x6012
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
jmp 0x6007
movq %rax, %rbx
leaq 0x150(%rsp), %rdi
callq 0x3028
jmp 0x6015
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
jmp 0x6007
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
jmp 0x6007
movq %rax, %rbx
leaq 0x110(%rsp), %rdi
callq 0x3028
jmp 0x601f
jmp 0x6012
jmp 0x6012
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x3050
movq %rbx, %rdi
callq 0x2240
nop