// File: /workspace/github_cpp_makefile_star2_O3/pixlark[P]Badge/src/compiler.cc
// Function: Compiler::compile_expr(Expr*)
void compile_expr(Expr * expr)
	{
		switch (expr->kind) {
		case EXPR_NOTHING:
			push(BC::create(BC_LOAD_CONST,
							Value::nothing(),
							expr->assoc));
			break;
		case EXPR_UNARY:
			compile_expr(expr->unary.expr);
			compile_operator(expr->unary.op, expr->assoc);
			break;
		case EXPR_BINARY:
			compile_expr(expr->binary.left);
			compile_expr(expr->binary.right);
			compile_operator(expr->binary.op, expr->assoc);
			break;
		case EXPR_INTEGER:
			push(BC::create(BC_LOAD_CONST,
							Value::raise(expr->integer),
							expr->assoc));
			break;
		case EXPR_STRING:
			push(BC::create(BC_LOAD_CONST,
							Value::raise(expr->string),
							expr->assoc));
			push(BC::create(BC_SYMBOL_TO_STRING,
							expr->assoc));
			break;
		case EXPR_VARIABLE:
			push(BC::create(BC_LOAD_CONST,
							Value::raise(expr->variable),
							expr->assoc));
			push(BC::create(BC_RESOLVE_BINDING,
							expr->assoc));
			break;
		case EXPR_SCOPE: {
			auto body = expr->scope.body;
			auto terminator = expr->scope.terminator;
			push(BC::create(BC_ENTER_SCOPE, expr->assoc));
			for (int i = 0; i < body.size; i++) {
				compile_stmt(body[i]);
			}
			if (terminator) {
				compile_expr(terminator);
			} else {
				push(BC::create(BC_LOAD_CONST,
								Value::nothing(),
								expr->assoc));
			}
			push(BC::create(BC_EXIT_SCOPE, expr->assoc));
		} break;
		case EXPR_LAMBDA: {
			auto params = expr->lambda.parameters;
			for (int i = 0; i < params.size; i++) {
				push(BC::create(BC_LOAD_CONST,
								Value::raise(params[i]),
								expr->assoc));
			}
			push(BC::create(BC_LOAD_CONST,
							Value::raise(params.size),
							expr->assoc));
			Compiler compiler;
			compiler.init(blocks);
			compiler.compile_expr(expr->lambda.body);
			compiler.finalize();
			compiler.destroy();
			
			push(BC::create(BC_CONSTRUCT_FUNCTION,
							compiler.block_reference,
							expr->assoc));
		} break;
		case EXPR_FUNCALL: {
			auto args = expr->funcall.args;
			// Args are pushed in reverse order
			for (int i = args.size - 1; i >= 0; i--) {
				compile_expr(args[i]);
			}
			push(BC::create(BC_LOAD_CONST,
							Value::raise(args.size),
							expr->assoc));
			compile_expr(expr->funcall.func);
			push(BC::create(BC_POP_AND_CALL_FUNCTION,
							expr->assoc));
		} break;
		case EXPR_IF: {
			List<int> end_jumps;
			end_jumps.alloc();

			auto _if = expr->if_expr;
			assert(_if.conditions.size == _if.expressions.size);
			for (int i = 0; i < _if.conditions.size; i++) {
				compile_expr(_if.conditions[i]);
				push(BC::create(BC_NOT, _if.conditions[i]->assoc));
				push(BC::create(BC_POP_JUMP, _if.conditions[i]->assoc));
				int skip_pos = bytecode.size - 1;
				compile_expr(_if.expressions[i]);
				push(BC::create(BC_JUMP, _if.conditions[i]->assoc));
				end_jumps.push(bytecode.size - 1);
				bytecode[skip_pos].arg.integer = bytecode.size;
			}
			if (_if.else_expr) {
				compile_expr(_if.else_expr);
			} else {
				push(BC::create(BC_LOAD_CONST,
								Value::nothing(),
								expr->assoc));
			}
			push(BC::create(BC_NOP, expr->assoc));
			for (int i = 0; i < end_jumps.size; i++) {
				assert(bytecode[end_jumps[i]].kind == BC_JUMP);
				bytecode[end_jumps[i]].arg.integer = bytecode.size - 1;
			}
			
			end_jumps.dealloc();
		} break;
		case EXPR_DIRECTIVE: {
			auto name = expr->directive.name;
			auto args = expr->directive.arguments;
			if (name == Intern::intern("builtin")) {
				// @builtin directive
				if (args.size != 1) {
					fatal_assoc(expr->assoc, "@builtin directive expects one argument");
				}
				// TODO(pixlark): This is a little bit hacky because
				// it's not really a variable, it's meant to be a
				// compile-time symbol. They are technically the same
				// thing but still it feels like we're trying to build
				// a directive-based DSL here out of an AST that was
				// parsed for something else. Maybe there should be a
				// new subtree type for compile-time expressions.
				if (args[0]->kind != EXPR_VARIABLE) {
					fatal_assoc(args[0]->assoc, "@builtin directive expects constant symbol");
				}
				auto builtin_symbol = args[0]->variable;
				// Builtin binding
				auto builtin = Builtins::get_builtin(builtin_symbol);
				Value value = Value::create(TYPE_BUILTIN);
				value.builtin = builtin;
				push(BC::create(BC_LOAD_CONST, value, expr->assoc));
			} else if (name == Intern::intern("struct")) {
				// @struct directive
				auto args = expr->directive.arguments;
				for (int i = args.size - 1; i >= 0; i--) {
					if (args[i]->kind != EXPR_VARIABLE) {
						fatal_assoc(args[i]->assoc, "@struct directive expects constant symbols");
					}
					push(BC::create(BC_LOAD_CONST, Value::raise(args[i]->variable), args[i]->assoc));
				}
				push(BC::create(BC_LOAD_CONST, Value::raise(args.size), expr->assoc));
				push(BC::create(BC_CONSTRUCT_CONSTRUCTOR, expr->assoc));
			} else if (name == Intern::intern("import")) {
				// @import directive
				if (args.size != 1) {
					fatal_assoc(expr->assoc, "@import directive expects one argument");
				}
				const char * path;
				if (args[0]->kind == EXPR_STRING) {
					auto filename = args[0]->string;
					path = Files::path_for_file(filename);
				} else if (args[0]->kind == EXPR_VARIABLE) {
					auto filename = args[0]->variable;
					path = Files::stdlib_file(filename);
				} else {
					fatal_assoc(args[0]->assoc, "@import directive expects constant string or symbol");
				}
				defer { free((void*) path); };
				// Compile file into our global Blocks
				size_t block_reference = blocks->upcoming_block();
				auto source = load_and_compile_file(blocks, path);
				if (!source) {
					fatal_assoc(args[0]->assoc, "Source file '%s' does not exist", path);
				}
				// @Warning: Implicit cast from size_t->int
				push(BC::create(BC_LOAD_CONST, Value::raise(block_reference), expr->assoc));
				push(BC::create(BC_RUN_FILE_UNIT, expr->assoc));
			} else if (name == Intern::intern("export")) {
				for (int i = 0; i < args.size; i++) {
					if (args[i]->kind != EXPR_VARIABLE) {
						fatal_assoc(args[i]->assoc, "@export directive expects constant symbols");
					}
					push(BC::create(BC_LOAD_CONST, Value::raise(args[i]->variable), args[i]->assoc));
					push(BC::create(BC_EXPORT_SYMBOL, args[i]->assoc));
				}
			} else {
				// No such directive
				fatal_assoc(expr->assoc, "No such directive as '%s'", name);
			}
		} break;
		case EXPR_THIS: {
			push(BC::create(BC_THIS_FUNCTION, expr->assoc));
		} break;
		case EXPR_FIELD: {
			compile_expr(expr->field.left);
			push(BC::create(BC_LOAD_CONST, Value::raise(expr->field.right), expr->assoc));
			push(BC::create(BC_RESOLVE_FIELD, expr->assoc));
		} break;
		case EXPR_LOOP: {
            int push_body_pos = bytecode.size;
            push(BC::create(BC_PUSH_BODY, expr->assoc));

			// Create a dummy value to be popped by first iteration
			push(BC::create(BC_LOAD_CONST, Value::nothing(), expr->assoc));
            int beginning = bytecode.size;

			push(BC::create(BC_POP_AND_DISCARD, expr->assoc));
            compile_expr(expr->loop.body);

			push(BC::create(BC_DUPLICATE, expr->assoc));
            push(BC::create(BC_NOT, expr->assoc));
            push(BC::create(BC_POP_JUMP, beginning, expr->assoc));
            //push(BC::create(BC_LOAD_CONST, Value::nothing(), expr->assoc));

            int exit_pos = bytecode.size;
            push(BC::create(BC_NOP, expr->assoc));
            bytecode[push_body_pos].arg.integer = exit_pos;
		} break;
		case EXPR_ON: {
			push(BC::create(BC_GET_CALL_FLAG, Value::raise(expr->on.to_bind), expr->assoc));
			push(BC::create(BC_NOT, expr->assoc));
			
			int jump_pos = bytecode.size;
			push(BC::create(BC_POP_JUMP, expr->assoc));
			
			push(BC::create(BC_LOAD_CONST, Value::raise(expr->on.to_bind), expr->assoc));
			push(BC::create(BC_CREATE_BINDING, expr->assoc));
			compile_expr(expr->on.body);
			
			int exit_pos = bytecode.size;
			push(BC::create(BC_NOP, expr->assoc));
			bytecode[jump_pos].arg.integer = exit_pos;
		} break;
		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xd8, %rsp
movl (%rsi), %eax
cmpq $0xe, %rax
ja 0x8751
movq %rdi, %rbx
leaq 0x437e(%rip), %rcx      # 0xb21c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
movq %rsi, -0x30(%rbp)
jmpq *%rax
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7e80
testq %rax, %rax
js 0x7e38
cvtsi2ss %rax, %xmm0
jmp 0x7e4d
movq 0x8(%rsi), %r14
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7743
testq %rax, %rax
js 0x76f7
cvtsi2ss %rax, %xmm0
jmp 0x770c
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7a09
testq %rax, %rax
js 0x79c1
cvtsi2ss %rax, %xmm0
jmp 0x79d6
movq %rsi, %r14
movq 0x10(%rsi), %rsi
movq %rbx, %rdi
callq 0x6e74
movl 0x4(%r14), %edx
movl 0x8(%r14), %esi
jmp 0x73d9
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rsi
movq %rbx, %rdi
callq 0x6e74
movq -0x30(%rbp), %rsi
movq 0x10(%rsi), %r14
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7a6c
testq %rax, %rax
js 0x7a20
cvtsi2ss %rax, %xmm0
jmp 0x7a35
movq $0x0, -0xa8(%rbp)
movq $0x4, -0xa0(%rbp)
movq 0x9020(%rip), %rax      # 0xffd0
movq %rax, -0x98(%rbp)
movq 0x900a(%rip), %rax      # 0xffc8
movq %rax, -0x90(%rbp)
movl $0x10, %edi
callq 0x1200
movq -0x30(%rbp), %rcx
movq %rax, -0xb0(%rbp)
movq 0x10(%rcx), %rdx
cmpq 0x38(%rcx), %rdx
jne 0x8a45
movq 0x58(%rcx), %rax
movq %rax, -0x40(%rbp)
testq %rdx, %rdx
je 0x720d
movq -0x30(%rbp), %rax
movq 0x8(%rax), %r15
movq 0x30(%rax), %rax
movq %rax, -0x38(%rbp)
xorl %r14d, %r14d
movq %rdx, -0x48(%rbp)
movq (%r15,%r14,8), %rsi
movq %rbx, %rdi
callq 0x6e74
movq (%r15,%r14,8), %rax
movl 0x4(%rax), %r12d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x708f
testq %rax, %rax
js 0x7044
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x705c
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3f90(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x19, (%rax,%rcx,8)
movl %r12d, 0x4(%rax,%rcx,8)
movq (%r15,%r14,8), %rax
movl 0x4(%rax), %r12d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7119
testq %rax, %rax
js 0x70ce
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x70e6
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3f06(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1b, (%rax,%rcx,8)
movl %r12d, 0x4(%rax,%rcx,8)
movq 0x8(%rbx), %r12
movq -0x38(%rbp), %rax
movq (%rax,%r14,8), %rsi
movq %rbx, %rdi
callq 0x6e74
movq (%r15,%r14,8), %rax
movl 0x4(%rax), %r13d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x71b7
testq %rax, %rax
js 0x716c
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7184
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3e68(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1a, (%rax,%rcx,8)
movl %r13d, 0x4(%rax,%rcx,8)
movl 0x8(%rbx), %esi
decl %esi
leaq -0xb0(%rbp), %rdi
callq 0x928e
movq 0x8(%rbx), %rax
decl %r12d
movslq %r12d, %rcx
cmpq %rcx, %rax
jbe 0x89d3
movq (%rbx), %rdx
leaq (%rcx,%rcx,2), %rcx
movl %eax, 0x8(%rdx,%rcx,8)
incq %r14
movq -0x48(%rbp), %rdx
cmpq %r14, %rdx
jne 0x7010
movq -0x40(%rbp), %rsi
testq %rsi, %rsi
je 0x76c4
movq %rbx, %rdi
callq 0x6e74
movq -0x30(%rbp), %rsi
jmp 0x8848
movq 0x8(%rsi), %r14
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7b5f
testq %rax, %rax
js 0x7b13
cvtsi2ss %rax, %xmm0
jmp 0x7b28
movq 0x8(%rsi), %r14
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7c52
testq %rax, %rax
js 0x7c06
cvtsi2ss %rax, %xmm0
jmp 0x7c1b
movq 0x10(%rsi), %r14
testq %r14, %r14
je 0x7354
movq 0x8(%rsi), %rdi
xorl %r12d, %r12d
movl $0x2, %r8d
movq %rdi, -0x38(%rbp)
movq (%rdi,%r12,8), %r15
movl 0x4(%rsi), %r13d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x732a
testq %rax, %rax
js 0x72d1
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x72e9
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3d03(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq -0x38(%rbp), %rdi
movl $0x2, %r8d
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl %r8d, (%rax,%rcx,8)
movl %r13d, 0x4(%rax,%rcx,8)
movl %r8d, 0x8(%rax,%rcx,8)
movq %r15, 0x10(%rax,%rcx,8)
incq %r12
cmpq %r12, %r14
jne 0x72a9
movl %r14d, %r14d
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7d44
testq %rax, %rax
js 0x7cf9
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7d11
movl 0x4(%rsi), %r15d
movl 0x8(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7ef5
testq %rax, %rax
js 0x7ead
cvtsi2ss %rax, %xmm0
jmp 0x7ec2
movq %rsi, %r14
movq 0x8(%rsi), %rsi
movq %rbx, %rdi
callq 0x6e74
movq 0x18(%r14), %rsi
movq %rbx, %rdi
callq 0x6e74
movl 0x4(%r14), %edx
movl 0x10(%r14), %esi
movq %rbx, %rdi
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x8ada
movq 0x8(%rbx), %r15
movq 0x10(%rbx), %rax
movl 0x4(%rsi), %r14d
leaq 0x1(%r15), %rcx
movq %r15, %rdx
cmpq %rcx, %rax
jae 0x7f6a
testq %rax, %rax
js 0x7f1e
cvtsi2ss %rax, %xmm0
jmp 0x7f33
movq 0x8(%rsi), %r14
movq 0x10(%rsi), %r12
movq 0x30(%rsi), %r15
movl 0x4(%rsi), %r13d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x834c
testq %rax, %rax
js 0x8304
cvtsi2ss %rax, %xmm0
jmp 0x8319
movq 0x8(%rsi), %r15
movq 0x10(%rsi), %r13
movq 0x18(%rsi), %r12
leaq 0x4458(%rip), %rdi      # 0xb8c4
callq 0x15dd
cmpq %rax, %r15
je 0x7671
leaq 0x449e(%rip), %rdi      # 0xb91f
callq 0x15dd
cmpq %rax, %r15
je 0x84d0
leaq 0x44bb(%rip), %rdi      # 0xb951
callq 0x15dd
cmpq %rax, %r15
je 0x8624
leaq 0x4528(%rip), %rdi      # 0xb9d3
callq 0x15dd
cmpq %rax, %r15
jne 0x8a80
testq %r12, %r12
je 0x8751
xorl %r15d, %r15d
movq (%r13,%r15,8), %rax
cmpl $0x3, (%rax)
jne 0x8a28
movq 0x8(%rax), %rsi
movl 0x4(%rax), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x754e
testq %rax, %rax
movq %rsi, -0x30(%rbp)
js 0x74ff
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7517
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3ad5(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, %edx
movl %edx, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl %edx, 0x8(%rax,%rcx,8)
movq %rsi, 0x10(%rax,%rcx,8)
movq (%r13,%r15,8), %rax
movl 0x4(%rax), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x75e3
testq %rax, %rax
js 0x7598
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x75b0
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3a3c(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x24, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
incq %r15
cmpq %r15, %r12
jne 0x74c5
jmp 0x8751
movq 0x18(%rsi), %r14
movl %r14d, %eax
decl %eax
js 0x763e
movq -0x30(%rbp), %rax
movq 0x10(%rax), %r15
movl %r14d, %r12d
decl %r12d
cmpq %r12, %r14
jbe 0x89ea
movq (%r15,%r12,8), %rsi
movq %rbx, %rdi
callq 0x6e74
testl %r12d, %r12d
jg 0x7621
movl %r14d, %r14d
movq -0x30(%rbp), %rsi
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x8417
testq %rax, %rax
js 0x83cb
cvtsi2ss %rax, %xmm0
jmp 0x83e0
cmpq $0x1, %r12
jne 0x8a64
movq (%r13), %rax
cmpl $0x3, (%rax)
jne 0x8a74
movq 0x8(%rax), %rdi
callq 0x4aba
movq %rax, %r15
movq -0x30(%rbp), %rax
movl 0x4(%rax), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x87ab
testq %rax, %rax
js 0x8763
cvtsi2ss %rax, %xmm0
jmp 0x8778
movq -0x30(%rbp), %rsi
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x8820
testq %rax, %rax
js 0x87d1
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x87e9
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x38e0(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x25, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl $0x2, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x77da
testq %rax, %rax
js 0x778b
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x77a3
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3849(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x19, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movq 0x8(%rbx), %r15
movq 0x10(%rbx), %rax
movl 0x4(%rsi), %r14d
leaq 0x1(%r15), %rcx
movq %r15, %rdx
cmpq %rcx, %rax
jae 0x7867
testq %rax, %rax
js 0x7818
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7830
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x37bc(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rdx
leaq 0x1(%rdx), %rcx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rcx, 0x8(%rbx)
leaq (%rdx,%rdx,2), %rcx
movl $0x1b, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movq 0x8(%rsi), %r14
movl 0x4(%rsi), %r12d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x78f5
testq %rax, %rax
js 0x78a6
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x78be
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x372e(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, %edx
movl %edx, (%rax,%rcx,8)
movl %r12d, 0x4(%rax,%rcx,8)
movl %edx, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7989
testq %rax, %rax
js 0x793a
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7952
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x369a(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x4, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movq %rsi, %r12
movq 0x10(%rsi), %rsi
movq %rbx, %rdi
callq 0x6e74
movq 0x8(%rbx), %r14
movq 0x10(%rbx), %rax
movl 0x4(%r12), %r12d
jmp 0x8269
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3616(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x15, (%rax,%rcx,8)
jmp 0x874c
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x35b7(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, %edx
movl %edx, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl %edx, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7afc
testq %rax, %rax
js 0x7ab1
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7ac9
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3523(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1f, (%rax,%rcx,8)
jmp 0x874c
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x34c4(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, %edx
movl %edx, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl %edx, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7bef
testq %rax, %rax
js 0x7ba4
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7bbc
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3430(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x16, (%rax,%rcx,8)
jmp 0x874c
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x33d1(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, %edx
movl %edx, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl %edx, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7ce2
testq %rax, %rax
js 0x7c97
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7caf
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x333d(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x6, (%rax,%rcx,8)
jmp 0x874c
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x32db(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl $0x1, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movq 0x28(%rbx), %rsi
leaq -0xb0(%rbp), %r15
movq %r15, %rdi
callq 0x5734
movq -0x30(%rbp), %r12
movq 0x30(%r12), %rsi
movq %r15, %rdi
callq 0x6e74
movq %r15, %rdi
callq 0x5de6
movq (%r15), %rdi
callq *0x20(%r15)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r15)
movq 0x30(%r15), %r14
movl 0x4(%r12), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7e17
testq %rax, %rax
js 0x7dcc
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7de4
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3208(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x12, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movq %r14, 0x8(%rax,%rcx,8)
jmp 0x8751
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x319f(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl $0x0, 0x8(%rax,%rcx,8)
movq $0x0, 0x10(%rax,%rcx,8)
jmp 0x8751
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x312a(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl $0x1, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
jmp 0x8751
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x30b9(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rdx
leaq 0x1(%rdx), %rcx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rcx, 0x8(%rbx)
leaq (%rdx,%rdx,2), %rcx
movl $0x21, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x7ff4
testq %rax, %rax
js 0x7fa5
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7fbd
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x302f(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl $0x0, 0x8(%rax,%rcx,8)
movq $0x0, 0x10(%rax,%rcx,8)
movq 0x8(%rbx), %r12
movq 0x10(%rbx), %rax
movl 0x4(%rsi), %r14d
leaq 0x1(%r12), %rcx
movq %r12, %rdx
cmpq %rcx, %rax
jae 0x808f
testq %rax, %rax
js 0x8044
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x805c
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2f90(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rdx
leaq 0x1(%rdx), %rcx
movq (%rbx), %rax
movq %rcx, 0x8(%rbx)
leaq (%rdx,%rdx,2), %rcx
movl $0x1, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rsi
movq %rbx, %rdi
callq 0x6e74
movq -0x30(%rbp), %rsi
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x812d
testq %rax, %rax
js 0x80de
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x80f6
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2ef6(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x3, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x81b7
testq %rax, %rax
js 0x8168
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x8180
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2e6c(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x19, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x8241
testq %rax, %rax
js 0x81f2
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x820a
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2de2(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1b, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl %r12d, 0x8(%rax,%rcx,8)
movq 0x8(%rbx), %r14
movq 0x10(%rbx), %rax
movl 0x4(%rsi), %r12d
leaq 0x1(%r14), %rcx
movq %r14, %rdx
cmpq %rcx, %rax
jae 0x82cf
testq %rax, %rax
js 0x8284
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x829c
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2d50(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rdx
leaq 0x1(%rdx), %rcx
movq (%rbx), %rax
movq %rcx, 0x8(%rbx)
leaq (%rdx,%rdx,2), %rcx
movl $0x0, (%rax,%rcx,8)
movl %r12d, 0x4(%rax,%rcx,8)
movslq %r15d, %rax
cmpq %rax, 0x8(%rbx)
jbe 0x89d3
movq (%rbx), %rcx
leaq (%rax,%rax,2), %rax
movl %r14d, 0x8(%rcx,%rax,8)
jmp 0x8751
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2cd3(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1c, (%rax,%rcx,8)
movl %r13d, 0x4(%rax,%rcx,8)
testq %r12, %r12
je 0x837f
xorl %r13d, %r13d
movq (%r14,%r13,8), %rsi
movq %rbx, %rdi
callq 0x579e
incq %r13
cmpq %r13, %r12
jne 0x836b
testq %r15, %r15
je 0x8398
movq %rbx, %rdi
movq %r15, %rsi
callq 0x6e74
movq -0x30(%rbp), %rsi
jmp 0x86cb
movq -0x30(%rbp), %rsi
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x86a3
testq %rax, %rax
js 0x8654
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x866c
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2c0c(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl $0x1, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movq %rsi, %r14
movq 0x8(%rsi), %rsi
movq %rbx, %rdi
callq 0x6e74
movl 0x4(%r14), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x84b9
testq %rax, %rax
js 0x846e
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x8486
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2b66(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x13, (%rax,%rcx,8)
jmp 0x874c
movq -0x30(%rbp), %rsi
movq 0x18(%rsi), %r14
movl %r14d, %eax
decl %eax
js 0x85b5
movq 0x10(%rsi), %rdi
movl $0x2, %r8d
movl %r14d, %r13d
movq %rdi, -0x38(%rbp)
decl %r13d
cmpq %r13, %r14
jbe 0x89ea
movq (%rdi,%r13,8), %rax
cmpl $0x3, (%rax)
jne 0x8a34
movq 0x8(%rax), %r15
movl 0x4(%rax), %r12d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x858e
testq %rax, %rax
js 0x8535
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x854d
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2a9f(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq -0x38(%rbp), %rdi
movl $0x2, %r8d
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl %r8d, (%rax,%rcx,8)
movl %r12d, 0x4(%rax,%rcx,8)
movl %r8d, 0x8(%rax,%rcx,8)
movq %r15, 0x10(%rax,%rcx,8)
testl %r13d, %r13d
jg 0x84f4
movl %r14d, %eax
movl 0x4(%rsi), %ecx
movl $0x2, -0x78(%rbp)
movl $0x1, -0x70(%rbp)
movq %rax, -0x68(%rbp)
movl %ecx, -0x74(%rbp)
movq -0x68(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x78(%rbp), %xmm0
movups %xmm0, (%rsp)
movq %rbx, %rdi
movq %rsi, %r14
callq 0x5d52
movl 0x4(%r14), %eax
movl $0x1e, -0xe0(%rbp)
movl %eax, -0xdc(%rbp)
movq -0xd0(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0xe0(%rbp), %xmm0
movups %xmm0, (%rsp)
movq %rbx, %rdi
callq 0x5d52
jmp 0x8751
cmpq $0x1, %r12
jne 0x8a90
movq (%r13), %rax
movl (%rax), %ecx
cmpl $0x3, %ecx
je 0x892a
cmpl $0x2, %ecx
jne 0x8ab8
movq 0x8(%rax), %rdi
callq 0x20a9
jmp 0x8933
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2980(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl $0x0, 0x8(%rax,%rcx,8)
movq $0x0, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x873a
testq %rax, %rax
js 0x86ef
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x8707
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x28e5(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1d, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2874(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl $0x3, 0x8(%rax,%rcx,8)
movq %r15, 0x10(%rax,%rcx,8)
jmp 0x8751
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2803(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl $0x0, 0x8(%rax,%rcx,8)
movq $0x0, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
leaq 0x1(%rcx), %rdx
cmpq %rdx, %rax
jae 0x88b7
testq %rax, %rax
js 0x886c
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x8884
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2768(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x937e
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq (%rbx), %rax
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x0, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
cmpq $0x0, -0xa8(%rbp)
je 0x8918
xorl %eax, %eax
movq -0xb0(%rbp), %rcx
movslq (%rcx,%rax,4), %rdx
movq 0x8(%rbx), %rcx
cmpq %rdx, %rcx
jbe 0x89d3
movq (%rbx), %rsi
leaq (%rdx,%rdx,2), %rdx
cmpl $0x1a, (%rsi,%rdx,8)
jne 0x8a09
leaq (%rsi,%rdx,8), %rdx
decl %ecx
movl %ecx, 0x8(%rdx)
incq %rax
cmpq %rax, -0xa8(%rbp)
ja 0x88da
movq -0xb0(%rbp), %rdi
callq *-0x90(%rbp)
jmp 0x8751
movq 0x8(%rax), %rdi
callq 0x1fe0
movq %rax, %r15
movq 0x28(%rbx), %rdi
movl 0x8(%rdi), %r14d
movq %rax, %rsi
callq 0x4b3d
testq %rax, %rax
movq -0x30(%rbp), %rax
je 0x8aa0
movl 0x4(%rax), %eax
movl $0x2, -0x60(%rbp)
movl $0x1, -0x58(%rbp)
movq %r14, -0x50(%rbp)
movl %eax, -0x5c(%rbp)
movq -0x50(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x60(%rbp), %xmm0
movups %xmm0, (%rsp)
movq %rbx, %rdi
callq 0x5d52
movq -0x30(%rbp), %rax
movl 0x4(%rax), %eax
movl $0x23, -0xc8(%rbp)
movl %eax, -0xc4(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0xc8(%rbp), %xmm0
movups %xmm0, (%rsp)
movq %rbx, %rdi
callq 0x5d52
movq %r15, %rdi
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x11f8
leaq 0x2d69(%rip), %rdi      # 0xb743
leaq 0x2d6f(%rip), %rsi      # 0xb750
leaq 0x3060(%rip), %rcx      # 0xba48
jmp 0x89ff
leaq 0x2d52(%rip), %rdi      # 0xb743
leaq 0x2d58(%rip), %rsi      # 0xb750
leaq 0x3859(%rip), %rcx      # 0xc258
movl $0x7b, %edx
callq 0x10d0
leaq 0x2e8d(%rip), %rdi      # 0xb89d
leaq 0x2e52(%rip), %rsi      # 0xb869
leaq 0x2e5b(%rip), %rcx      # 0xb879
movl $0xb8, %edx
callq 0x10d0
movl 0x4(%rax), %edi
leaq 0x2fa8(%rip), %rsi      # 0xb9da
jmp 0x8a3e
movl 0x4(%rax), %edi
leaq 0x2ee8(%rip), %rsi      # 0xb926
xorl %eax, %eax
callq 0x1c52
leaq 0x2df1(%rip), %rdi      # 0xb83d
leaq 0x2e16(%rip), %rsi      # 0xb869
leaq 0x2e1f(%rip), %rcx      # 0xb879
movl $0xa4, %edx
callq 0x10d0
movq -0x30(%rbp), %rax
movl 0x4(%rax), %edi
leaq 0x2e5a(%rip), %rsi      # 0xb8cc
jmp 0x8a3e
movl 0x4(%rax), %edi
leaq 0x2e76(%rip), %rsi      # 0xb8f4
jmp 0x8a3e
movq -0x30(%rbp), %rax
movl 0x4(%rax), %edi
leaq 0x2f77(%rip), %rsi      # 0xba05
jmp 0x8aae
movq -0x30(%rbp), %rax
movl 0x4(%rax), %edi
leaq 0x2eba(%rip), %rsi      # 0xb958
jmp 0x8a3e
movq (%r13), %rax
movl 0x4(%rax), %edi
leaq 0x2f05(%rip), %rsi      # 0xb9b3
movq %r15, %rdx
xorl %eax, %eax
callq 0x1c52
movl 0x4(%rax), %edi
leaq 0x2ebd(%rip), %rsi      # 0xb97f
jmp 0x8a3e
movq %rax, %rbx
movq %r15, %rdi
callq 0x11f8
movq %rbx, %rdi
callq 0x11c0