// File: iamlouk[P]asbi/src/ast-optimize.cc
// Function: ast::InfixOperator::optimize()
Node* InfixOperator::optimize() {
	switch (type) {
	case InfixOperator::Add:{
		auto a = dynamic_cast<Number*>(lhs = lhs->optimize());
		auto b = dynamic_cast<Number*>(rhs = rhs->optimize());
		if (a != nullptr && b != nullptr) {
			auto res = a->value + b->value;
			delete this;
			return new ast::Number(res);
		}
		return this;
	}
	case InfixOperator::Sub:{
		auto a = dynamic_cast<Number*>(lhs = lhs->optimize());
		auto b = dynamic_cast<Number*>(rhs = rhs->optimize());
		if (a != nullptr && b != nullptr) {
			auto res = a->value - b->value;
			delete this;
			return new ast::Number(res);
		}
		return this;
	}
	case InfixOperator::Mul:{
		auto a = dynamic_cast<Number*>(lhs = lhs->optimize());
		auto b = dynamic_cast<Number*>(rhs = rhs->optimize());
		if (a != nullptr && b != nullptr) {
			auto res = a->value * b->value;
			delete this;
			return new ast::Number(res);
		}
		return this;
	}
	case InfixOperator::Div:{
		auto a = dynamic_cast<Number*>(lhs = lhs->optimize());
		auto b = dynamic_cast<Number*>(rhs = rhs->optimize());
		if (a != nullptr && b != nullptr) {
			auto res = a->value / b->value;
			delete this;
			return new ast::Number(res);
		}
		return this;
	}
	case InfixOperator::Or:{
		/*auto a = dynamic_cast<Bool*>(lhs = lhs->optimize());
		auto b = dynamic_cast<Bool*>(rhs = rhs->optimize());
		if (a != nullptr && b != nullptr) {
			auto res = a->value || b->value;
			delete this;
			return new ast::Bool(res);
		}*/
		lhs = lhs->optimize();
		rhs = rhs->optimize();
		return this;
	}
	case InfixOperator::And:{
		/*auto a = dynamic_cast<Bool*>(lhs = lhs->optimize());
		auto b = dynamic_cast<Bool*>(rhs = rhs->optimize());
		if (a != nullptr && b != nullptr) {
			auto res = a->value && b->value;
			delete this;
			return new ast::Bool(res);
		}*/
		lhs = lhs->optimize();
		rhs = rhs->optimize();
		return this;
	}
	case InfixOperator::Equals:{
		lhs = lhs->optimize();
		rhs = rhs->optimize();
		return this;
	}
	case InfixOperator::EqualsNot:{
		lhs = lhs->optimize();
		rhs = rhs->optimize();
		return this;
	}
	case InfixOperator::Bigger:{
		auto a = dynamic_cast<Number*>(lhs = lhs->optimize());
		auto b = dynamic_cast<Number*>(rhs = rhs->optimize());
		if (a != nullptr && b != nullptr) {
			auto res = a->value > b->value;
			delete this;
			return new ast::Bool(res);
		}
		return this;
	}
	case InfixOperator::BiggerOrEqual:{
		auto a = dynamic_cast<Number*>(lhs = lhs->optimize());
		auto b = dynamic_cast<Number*>(rhs = rhs->optimize());
		if (a != nullptr && b != nullptr) {
			auto res = a->value >= b->value;
			delete this;
			return new ast::Bool(res);
		}
		return this;
	}
	case InfixOperator::Smaller:{
		auto a = dynamic_cast<Number*>(lhs = lhs->optimize());
		auto b = dynamic_cast<Number*>(rhs = rhs->optimize());
		if (a != nullptr && b != nullptr) {
			auto res = a->value < b->value;
			delete this;
			return new ast::Bool(res);
		}
		return this;
	}
	case InfixOperator::SmallerOrEqual:{
		auto a = dynamic_cast<Number*>(lhs = lhs->optimize());
		auto b = dynamic_cast<Number*>(rhs = rhs->optimize());
		if (a != nullptr && b != nullptr) {
			auto res = a->value <= b->value;
			delete this;
			return new ast::Bool(res);
		}
		return this;
	}
	}
}

// Assembly:
subq $0x238, %rsp            # imm = 0x238
movq %rdi, 0x228(%rsp)
movq 0x228(%rsp), %rax
movq %rax, 0x148(%rsp)
movl 0x8(%rax), %eax
movq %rax, 0x150(%rsp)
subq $0xb, %rax
ja 0x1988a
movq 0x150(%rsp), %rax
leaq 0x20135(%rip), %rcx     # 0x38b18
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0x140(%rsp)
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
je 0x18a41
movq 0x140(%rsp), %rdi
leaq 0x32b19(%rip), %rsi     # 0x4b540
leaq 0x32e22(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x138(%rsp)
jmp 0x18a4d
xorl %eax, %eax
movq %rax, 0x138(%rsp)
jmp 0x18a4d
movq 0x148(%rsp), %rax
movq 0x138(%rsp), %rcx
movq %rcx, 0x220(%rsp)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0x130(%rsp)
movq %rax, 0x18(%rcx)
cmpq $0x0, %rax
je 0x18ab2
movq 0x130(%rsp), %rdi
leaq 0x32aa8(%rip), %rsi     # 0x4b540
leaq 0x32db1(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x128(%rsp)
jmp 0x18abe
xorl %eax, %eax
movq %rax, 0x128(%rsp)
jmp 0x18abe
movq 0x128(%rsp), %rax
movq %rax, 0x218(%rsp)
cmpq $0x0, 0x220(%rsp)
je 0x18b93
cmpq $0x0, 0x218(%rsp)
je 0x18b93
movq 0x148(%rsp), %rax
movq 0x220(%rsp), %rcx
movsd 0x8(%rcx), %xmm0
movq 0x218(%rsp), %rcx
addsd 0x8(%rcx), %xmm0
movsd %xmm0, 0x210(%rsp)
cmpq $0x0, %rax
je 0x18b2b
movq 0x148(%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movl $0x10, %edi
callq 0x6460
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x120(%rsp)
movsd 0x210(%rsp), %xmm0
callq 0x124b0
jmp 0x18b53
movq 0x120(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x120(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
movl $0x10, %esi
callq 0x6470
jmp 0x1989c
movq 0x148(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0x118(%rsp)
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
je 0x18bfd
movq 0x118(%rsp), %rdi
leaq 0x3295d(%rip), %rsi     # 0x4b540
leaq 0x32c66(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x110(%rsp)
jmp 0x18c09
xorl %eax, %eax
movq %rax, 0x110(%rsp)
jmp 0x18c09
movq 0x148(%rsp), %rax
movq 0x110(%rsp), %rcx
movq %rcx, 0x1f8(%rsp)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0x108(%rsp)
movq %rax, 0x18(%rcx)
cmpq $0x0, %rax
je 0x18c6e
movq 0x108(%rsp), %rdi
leaq 0x328ec(%rip), %rsi     # 0x4b540
leaq 0x32bf5(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x100(%rsp)
jmp 0x18c7a
xorl %eax, %eax
movq %rax, 0x100(%rsp)
jmp 0x18c7a
movq 0x100(%rsp), %rax
movq %rax, 0x1f0(%rsp)
cmpq $0x0, 0x1f8(%rsp)
je 0x18d4f
cmpq $0x0, 0x1f0(%rsp)
je 0x18d4f
movq 0x148(%rsp), %rax
movq 0x1f8(%rsp), %rcx
movsd 0x8(%rcx), %xmm0
movq 0x1f0(%rsp), %rcx
subsd 0x8(%rcx), %xmm0
movsd %xmm0, 0x1e8(%rsp)
cmpq $0x0, %rax
je 0x18ce7
movq 0x148(%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movl $0x10, %edi
callq 0x6460
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0xf8(%rsp)
movsd 0x1e8(%rsp), %xmm0
callq 0x124b0
jmp 0x18d0f
movq 0xf8(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0xf8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
movl $0x10, %esi
callq 0x6470
jmp 0x1989c
movq 0x148(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0xf0(%rsp)
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
je 0x18db9
movq 0xf0(%rsp), %rdi
leaq 0x327a1(%rip), %rsi     # 0x4b540
leaq 0x32aaa(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0xe8(%rsp)
jmp 0x18dc5
xorl %eax, %eax
movq %rax, 0xe8(%rsp)
jmp 0x18dc5
movq 0x148(%rsp), %rax
movq 0xe8(%rsp), %rcx
movq %rcx, 0x1e0(%rsp)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0xe0(%rsp)
movq %rax, 0x18(%rcx)
cmpq $0x0, %rax
je 0x18e2a
movq 0xe0(%rsp), %rdi
leaq 0x32730(%rip), %rsi     # 0x4b540
leaq 0x32a39(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0xd8(%rsp)
jmp 0x18e36
xorl %eax, %eax
movq %rax, 0xd8(%rsp)
jmp 0x18e36
movq 0xd8(%rsp), %rax
movq %rax, 0x1d8(%rsp)
cmpq $0x0, 0x1e0(%rsp)
je 0x18f0b
cmpq $0x0, 0x1d8(%rsp)
je 0x18f0b
movq 0x148(%rsp), %rax
movq 0x1e0(%rsp), %rcx
movsd 0x8(%rcx), %xmm0
movq 0x1d8(%rsp), %rcx
mulsd 0x8(%rcx), %xmm0
movsd %xmm0, 0x1d0(%rsp)
cmpq $0x0, %rax
je 0x18ea3
movq 0x148(%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movl $0x10, %edi
callq 0x6460
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0xd0(%rsp)
movsd 0x1d0(%rsp), %xmm0
callq 0x124b0
jmp 0x18ecb
movq 0xd0(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0xd0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
movl $0x10, %esi
callq 0x6470
jmp 0x1989c
movq 0x148(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0xc8(%rsp)
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
je 0x18f75
movq 0xc8(%rsp), %rdi
leaq 0x325e5(%rip), %rsi     # 0x4b540
leaq 0x328ee(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0xc0(%rsp)
jmp 0x18f81
xorl %eax, %eax
movq %rax, 0xc0(%rsp)
jmp 0x18f81
movq 0x148(%rsp), %rax
movq 0xc0(%rsp), %rcx
movq %rcx, 0x1c8(%rsp)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0xb8(%rsp)
movq %rax, 0x18(%rcx)
cmpq $0x0, %rax
je 0x18fe6
movq 0xb8(%rsp), %rdi
leaq 0x32574(%rip), %rsi     # 0x4b540
leaq 0x3287d(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0xb0(%rsp)
jmp 0x18ff2
xorl %eax, %eax
movq %rax, 0xb0(%rsp)
jmp 0x18ff2
movq 0xb0(%rsp), %rax
movq %rax, 0x1c0(%rsp)
cmpq $0x0, 0x1c8(%rsp)
je 0x190c7
cmpq $0x0, 0x1c0(%rsp)
je 0x190c7
movq 0x148(%rsp), %rax
movq 0x1c8(%rsp), %rcx
movsd 0x8(%rcx), %xmm0
movq 0x1c0(%rsp), %rcx
divsd 0x8(%rcx), %xmm0
movsd %xmm0, 0x1b8(%rsp)
cmpq $0x0, %rax
je 0x1905f
movq 0x148(%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movl $0x10, %edi
callq 0x6460
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0xa8(%rsp)
movsd 0x1b8(%rsp), %xmm0
callq 0x124b0
jmp 0x19087
movq 0xa8(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0xa8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
movl $0x10, %esi
callq 0x6470
jmp 0x1989c
movq 0x148(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq %rax, %rcx
movq 0x148(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq %rax, %rcx
movq 0x148(%rsp), %rax
movq %rcx, 0x18(%rax)
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq %rax, %rcx
movq 0x148(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq %rax, %rcx
movq 0x148(%rsp), %rax
movq %rcx, 0x18(%rax)
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq %rax, %rcx
movq 0x148(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq %rax, %rcx
movq 0x148(%rsp), %rax
movq %rcx, 0x18(%rax)
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq %rax, %rcx
movq 0x148(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq %rax, %rcx
movq 0x148(%rsp), %rax
movq %rcx, 0x18(%rax)
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0xa0(%rsp)
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
je 0x1924d
movq 0xa0(%rsp), %rdi
leaq 0x3230d(%rip), %rsi     # 0x4b540
leaq 0x32616(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x98(%rsp)
jmp 0x19259
xorl %eax, %eax
movq %rax, 0x98(%rsp)
jmp 0x19259
movq 0x148(%rsp), %rax
movq 0x98(%rsp), %rcx
movq %rcx, 0x1b0(%rsp)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0x90(%rsp)
movq %rax, 0x18(%rcx)
cmpq $0x0, %rax
je 0x192be
movq 0x90(%rsp), %rdi
leaq 0x3229c(%rip), %rsi     # 0x4b540
leaq 0x325a5(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x88(%rsp)
jmp 0x192ca
xorl %eax, %eax
movq %rax, 0x88(%rsp)
jmp 0x192ca
movq 0x88(%rsp), %rax
movq %rax, 0x1a8(%rsp)
cmpq $0x0, 0x1b0(%rsp)
je 0x193a5
cmpq $0x0, 0x1a8(%rsp)
je 0x193a5
movq 0x148(%rsp), %rax
movq 0x1b0(%rsp), %rcx
movsd 0x8(%rcx), %xmm0
movq 0x1a8(%rsp), %rcx
ucomisd 0x8(%rcx), %xmm0
seta %cl
andb $0x1, %cl
movb %cl, 0x1a7(%rsp)
cmpq $0x0, %rax
je 0x1933b
movq 0x148(%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movl $0x10, %edi
callq 0x6460
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x80(%rsp)
movzbl 0x1a7(%rsp), %esi
andl $0x1, %esi
callq 0x124f0
jmp 0x19365
movq 0x80(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x80(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
movl $0x10, %esi
callq 0x6470
jmp 0x1989c
movq 0x148(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0x78(%rsp)
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
je 0x19406
movq 0x78(%rsp), %rdi
leaq 0x32151(%rip), %rsi     # 0x4b540
leaq 0x3245a(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x70(%rsp)
jmp 0x1940f
xorl %eax, %eax
movq %rax, 0x70(%rsp)
jmp 0x1940f
movq 0x148(%rsp), %rax
movq 0x70(%rsp), %rcx
movq %rcx, 0x198(%rsp)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0x68(%rsp)
movq %rax, 0x18(%rcx)
cmpq $0x0, %rax
je 0x19468
movq 0x68(%rsp), %rdi
leaq 0x320ef(%rip), %rsi     # 0x4b540
leaq 0x323f8(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x60(%rsp)
jmp 0x19471
xorl %eax, %eax
movq %rax, 0x60(%rsp)
jmp 0x19471
movq 0x60(%rsp), %rax
movq %rax, 0x190(%rsp)
cmpq $0x0, 0x198(%rsp)
je 0x19540
cmpq $0x0, 0x190(%rsp)
je 0x19540
movq 0x148(%rsp), %rax
movq 0x198(%rsp), %rcx
movsd 0x8(%rcx), %xmm0
movq 0x190(%rsp), %rcx
ucomisd 0x8(%rcx), %xmm0
setae %cl
andb $0x1, %cl
movb %cl, 0x18f(%rsp)
cmpq $0x0, %rax
je 0x194df
movq 0x148(%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movl $0x10, %edi
callq 0x6460
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x58(%rsp)
movzbl 0x18f(%rsp), %esi
andl $0x1, %esi
callq 0x124f0
jmp 0x19506
movq 0x58(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x58(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
movl $0x10, %esi
callq 0x6470
jmp 0x1989c
movq 0x148(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0x50(%rsp)
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
je 0x195a1
movq 0x50(%rsp), %rdi
leaq 0x31fb6(%rip), %rsi     # 0x4b540
leaq 0x322bf(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x48(%rsp)
jmp 0x195aa
xorl %eax, %eax
movq %rax, 0x48(%rsp)
jmp 0x195aa
movq 0x148(%rsp), %rax
movq 0x48(%rsp), %rcx
movq %rcx, 0x180(%rsp)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0x40(%rsp)
movq %rax, 0x18(%rcx)
cmpq $0x0, %rax
je 0x19603
movq 0x40(%rsp), %rdi
leaq 0x31f54(%rip), %rsi     # 0x4b540
leaq 0x3225d(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x38(%rsp)
jmp 0x1960c
xorl %eax, %eax
movq %rax, 0x38(%rsp)
jmp 0x1960c
movq 0x38(%rsp), %rax
movq %rax, 0x178(%rsp)
cmpq $0x0, 0x180(%rsp)
je 0x196df
cmpq $0x0, 0x178(%rsp)
je 0x196df
movq 0x148(%rsp), %rax
movq 0x180(%rsp), %rcx
movsd 0x8(%rcx), %xmm1
movq 0x178(%rsp), %rcx
movsd 0x8(%rcx), %xmm0
ucomisd %xmm1, %xmm0
seta %cl
andb $0x1, %cl
movb %cl, 0x177(%rsp)
cmpq $0x0, %rax
je 0x1967e
movq 0x148(%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movl $0x10, %edi
callq 0x6460
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x30(%rsp)
movzbl 0x177(%rsp), %esi
andl $0x1, %esi
callq 0x124f0
jmp 0x196a5
movq 0x30(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x30(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
movl $0x10, %esi
callq 0x6470
jmp 0x1989c
movq 0x148(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x148(%rsp), %rax
movq 0x10(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0x28(%rsp)
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
je 0x19740
movq 0x28(%rsp), %rdi
leaq 0x31e17(%rip), %rsi     # 0x4b540
leaq 0x32120(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x20(%rsp)
jmp 0x19749
xorl %eax, %eax
movq %rax, 0x20(%rsp)
jmp 0x19749
movq 0x148(%rsp), %rax
movq 0x20(%rsp), %rcx
movq %rcx, 0x168(%rsp)
movq 0x18(%rax), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x148(%rsp), %rcx
movq %rax, 0x18(%rsp)
movq %rax, 0x18(%rcx)
cmpq $0x0, %rax
je 0x197a2
movq 0x18(%rsp), %rdi
leaq 0x31db5(%rip), %rsi     # 0x4b540
leaq 0x320be(%rip), %rdx     # 0x4b850
xorl %eax, %eax
movl %eax, %ecx
callq 0x6520
movq %rax, 0x10(%rsp)
jmp 0x197ab
xorl %eax, %eax
movq %rax, 0x10(%rsp)
jmp 0x197ab
movq 0x10(%rsp), %rax
movq %rax, 0x160(%rsp)
cmpq $0x0, 0x168(%rsp)
je 0x19878
cmpq $0x0, 0x160(%rsp)
je 0x19878
movq 0x148(%rsp), %rax
movq 0x168(%rsp), %rcx
movsd 0x8(%rcx), %xmm1
movq 0x160(%rsp), %rcx
movsd 0x8(%rcx), %xmm0
ucomisd %xmm1, %xmm0
setae %cl
andb $0x1, %cl
movb %cl, 0x15f(%rsp)
cmpq $0x0, %rax
je 0x1981d
movq 0x148(%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movl $0x10, %edi
callq 0x6460
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x8(%rsp)
movzbl 0x15f(%rsp), %esi
andl $0x1, %esi
callq 0x124f0
jmp 0x19844
movq 0x8(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
movq 0x8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
movl $0x10, %esi
callq 0x6470
jmp 0x1989c
movq 0x148(%rsp), %rax
movq %rax, 0x230(%rsp)
jmp 0x1988c
ud2
movq 0x230(%rsp), %rax
addq $0x238, %rsp            # imm = 0x238
retq
movq 0x208(%rsp), %rdi
callq 0x67a0
nopl (%rax)