// File: zerolfx[P]P-Machine/out.cpp
// Function: Out::execute(StackMachine*)
void Out::execute(StackMachine *stack) 
{	
	switch(fType)
	{
		case integer:
		{
			StackInteger p1;
			if(typeid(p1) != typeid(*(stack->fStore[stack->fSP])))
				throw ExecutionError("instruction out: SP does not point to element of type integer.");
			
			cout << *stack->fStore[stack->fSP];
			
			// SP := SP + 1
			delete stack->fStore[stack->fSP];
			stack->fStore.pop_back();
			--stack->fSP;
		
			break;
		}
		case character:
		{
			StackCharacter p1;
			if(typeid(p1) != typeid(*(stack->fStore[stack->fSP])))
				throw ExecutionError("instruction out: SP does not point to element of type character.");
			
			cout << *stack->fStore[stack->fSP];
			
			// SP := SP + 1
			delete stack->fStore[stack->fSP];
			stack->fStore.pop_back();
			--stack->fSP;
		
			break;
		}
		case boolean:
		{
			StackBoolean p1;
			if(typeid(p1) != typeid(*(stack->fStore[stack->fSP])))
				throw ExecutionError("instruction out: SP does not point to element of type boolean.");
			
			cout << *stack->fStore[stack->fSP];
			
			// SP := SP + 1
			delete stack->fStore[stack->fSP];
			stack->fStore.pop_back();
			--stack->fSP;
		
			break;
		}
		case address:
		{
			StackAddress p1;
			if(typeid(p1) != typeid(*(stack->fStore[stack->fSP])))
				throw ExecutionError("instruction out: SP does not point to element of type boolean.");

			cout << *stack->fStore[stack->fSP];
			
			// SP := SP + 1
			delete stack->fStore[stack->fSP];
			stack->fStore.pop_back();
			--stack->fSP;
		
			break;
		}	
		case real:
		{
			StackInteger p1;
			StackReal p2;
				
			if(fPrecisionMarker)
			{
				// check if the two uppermost stackentries are of type integer and real respectively
				if(typeid(p1) != typeid(*(stack->fStore[stack->fSP])))
					throw ExecutionError("instruction out: SP does not point to element of type integer.");
				if(typeid(p2) != typeid(*(stack->fStore[stack->fSP - 1])))
					throw ExecutionError("instruction out: SP - 1 does not point to element of type real.");
								
				cout.precision(stack->fStore[stack->fSP]->getValue());
				cout << *stack->fStore[stack->fSP - 1];
				
				delete stack->fStore[stack->fSP];
				delete stack->fStore[stack->fSP - 1];
				stack->fStore.pop_back();
				stack->fStore.pop_back();
				stack->fSP -= 2;
			}
			else
			{
				if(typeid(p2) != typeid(*(stack->fStore[stack->fSP])))
					throw ExecutionError("instruction out: SP does not point to element of type real.");
				
				cout << *stack->fStore[stack->fSP];
				
				delete stack->fStore[stack->fSP];
				stack->fStore.pop_back();
				--stack->fSP;
			}			
			break;
		}
	}

	// adding cost of this instruction
	stack->fTime.count("out");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2d0, %rsp            # imm = 0x2D0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movl 0x8(%rax), %eax
movq %rax, -0x1c8(%rbp)
subq $0x4, %rax
ja 0x2516a
movq -0x1c8(%rbp), %rax
leaq 0x15cc0(%rip), %rcx     # 0x3a0c0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x27340
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x1d8(%rbp)
cmpq $0x0, %rax
jne 0x24443
callq 0x7300
jmp 0x24443
movq -0x1d8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x26698(%rip), %rdi     # 0x4aaf0
callq 0x9370
testb $0x1, %al
jne 0x24466
jmp 0x2452f
movb $0x1, -0x52(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x1e8(%rbp)
leaq -0x51(%rbp), %rdi
movq %rdi, -0x1e0(%rbp)
callq 0x74f0
movq -0x1e0(%rbp), %rdx
leaq 0x15c40(%rip), %rsi     # 0x3a0d9
leaq -0x50(%rbp), %rdi
callq 0x8940
jmp 0x244a4
movq -0x1e8(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x283d0
jmp 0x244b6
movq -0x1e8(%rbp), %rdi
movb $0x0, -0x52(%rbp)
leaq 0x255b8(%rip), %rsi     # 0x49a80
leaq 0x3f31(%rip), %rdx      # 0x28400
callq 0x74a0
jmp 0x25219
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x245ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x2450d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x7170
leaq -0x51(%rbp), %rdi
callq 0x72e0
testb $0x1, -0x52(%rbp)
jne 0x2451e
jmp 0x2452a
movq -0x1e8(%rbp), %rdi
callq 0x71c0
jmp 0x245ca
movq -0x10(%rbp), %rax
movq %rax, %rdi
addq $0x18, %rdi
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rsi
movq 0x26a70(%rip), %rdi     # 0x4afc0
callq 0x27170
jmp 0x24557
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x1f0(%rbp)
cmpq $0x0, %rax
je 0x2459c
movq -0x1f0(%rbp), %rdi
callq 0x26ca0
movq -0x1f0(%rbp), %rdi
movl $0x8, %esi
callq 0x7280
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
callq 0x8e90
movq -0x10(%rbp), %rax
movl 0xb4(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0xb4(%rax)
leaq -0x20(%rbp), %rdi
callq 0x27380
jmp 0x2516a
leaq -0x20(%rbp), %rdi
callq 0x27380
jmp 0x25210
leaq -0x68(%rbp), %rdi
movl $0x61, %esi
callq 0x28170
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x1f8(%rbp)
cmpq $0x0, %rax
jne 0x24615
callq 0x7300
jmp 0x24615
movq -0x1f8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x26736(%rip), %rdi     # 0x4ad60
callq 0x9370
testb $0x1, %al
jne 0x24638
jmp 0x24719
movb $0x1, -0x8a(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x208(%rbp)
leaq -0x89(%rbp), %rdi
movq %rdi, -0x200(%rbp)
callq 0x74f0
movq -0x200(%rbp), %rdx
leaq 0x15aa7(%rip), %rsi     # 0x3a118
leaq -0x88(%rbp), %rdi
callq 0x8940
jmp 0x2467f
movq -0x208(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x283d0
jmp 0x24694
movq -0x208(%rbp), %rdi
movb $0x0, -0x8a(%rbp)
leaq 0x253d7(%rip), %rsi     # 0x49a80
leaq 0x3d50(%rip), %rdx      # 0x28400
callq 0x74a0
jmp 0x25219
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x247b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x246f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x7170
leaq -0x89(%rbp), %rdi
callq 0x72e0
testb $0x1, -0x8a(%rbp)
jne 0x24708
jmp 0x24714
movq -0x208(%rbp), %rdi
callq 0x71c0
jmp 0x247b4
movq -0x10(%rbp), %rax
movq %rax, %rdi
addq $0x18, %rdi
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rsi
movq 0x26886(%rip), %rdi     # 0x4afc0
callq 0x27170
jmp 0x24741
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x210(%rbp)
cmpq $0x0, %rax
je 0x24786
movq -0x210(%rbp), %rdi
callq 0x26ca0
movq -0x210(%rbp), %rdi
movl $0x8, %esi
callq 0x7280
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
callq 0x8e90
movq -0x10(%rbp), %rax
movl 0xb4(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0xb4(%rax)
leaq -0x68(%rbp), %rdi
callq 0x281b0
jmp 0x2516a
leaq -0x68(%rbp), %rdi
callq 0x281b0
jmp 0x25210
leaq -0xa0(%rbp), %rdi
xorl %esi, %esi
callq 0x27d20
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x218(%rbp)
cmpq $0x0, %rax
jne 0x247ff
callq 0x7300
jmp 0x247ff
movq -0x218(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x2647c(%rip), %rdi     # 0x4ac90
callq 0x9370
testb $0x1, %al
jne 0x24822
jmp 0x24903
movb $0x1, -0xc2(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x228(%rbp)
leaq -0xc1(%rbp), %rdi
movq %rdi, -0x220(%rbp)
callq 0x74f0
movq -0x220(%rbp), %rdx
leaq 0x158fe(%rip), %rsi     # 0x3a159
leaq -0xc0(%rbp), %rdi
callq 0x8940
jmp 0x24869
movq -0x228(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x283d0
jmp 0x2487e
movq -0x228(%rbp), %rdi
movb $0x0, -0xc2(%rbp)
leaq 0x251ed(%rip), %rsi     # 0x49a80
leaq 0x3b66(%rip), %rdx      # 0x28400
callq 0x74a0
jmp 0x25219
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x249a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x248db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x7170
leaq -0xc1(%rbp), %rdi
callq 0x72e0
testb $0x1, -0xc2(%rbp)
jne 0x248f2
jmp 0x248fe
movq -0x228(%rbp), %rdi
callq 0x71c0
jmp 0x249a1
movq -0x10(%rbp), %rax
movq %rax, %rdi
addq $0x18, %rdi
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rsi
movq 0x2669c(%rip), %rdi     # 0x4afc0
callq 0x27170
jmp 0x2492b
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x230(%rbp)
cmpq $0x0, %rax
je 0x24970
movq -0x230(%rbp), %rdi
callq 0x26ca0
movq -0x230(%rbp), %rdi
movl $0x8, %esi
callq 0x7280
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
callq 0x8e90
movq -0x10(%rbp), %rax
movl 0xb4(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0xb4(%rax)
leaq -0xa0(%rbp), %rdi
callq 0x27d70
jmp 0x2516a
leaq -0xa0(%rbp), %rdi
callq 0x27d70
jmp 0x25210
leaq -0xd8(%rbp), %rdi
xorl %esi, %esi
callq 0x26800
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x238(%rbp)
cmpq $0x0, %rax
jne 0x249ef
callq 0x7300
jmp 0x249ef
movq -0x238(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x25f54(%rip), %rdi     # 0x4a958
callq 0x9370
testb $0x1, %al
jne 0x24a12
jmp 0x24af3
movb $0x1, -0xfa(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x248(%rbp)
leaq -0xf9(%rbp), %rdi
movq %rdi, -0x240(%rbp)
callq 0x74f0
movq -0x240(%rbp), %rdx
leaq 0x1570e(%rip), %rsi     # 0x3a159
leaq -0xf8(%rbp), %rdi
callq 0x8940
jmp 0x24a59
movq -0x248(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x283d0
jmp 0x24a6e
movq -0x248(%rbp), %rdi
movb $0x0, -0xfa(%rbp)
leaq 0x24ffd(%rip), %rsi     # 0x49a80
leaq 0x3976(%rip), %rdx      # 0x28400
callq 0x74a0
jmp 0x25219
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24b91
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24acb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x7170
leaq -0xf9(%rbp), %rdi
callq 0x72e0
testb $0x1, -0xfa(%rbp)
jne 0x24ae2
jmp 0x24aee
movq -0x248(%rbp), %rdi
callq 0x71c0
jmp 0x24b91
movq -0x10(%rbp), %rax
movq %rax, %rdi
addq $0x18, %rdi
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rsi
movq 0x264ac(%rip), %rdi     # 0x4afc0
callq 0x27170
jmp 0x24b1b
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x250(%rbp)
cmpq $0x0, %rax
je 0x24b60
movq -0x250(%rbp), %rdi
callq 0x26ca0
movq -0x250(%rbp), %rdi
movl $0x8, %esi
callq 0x7280
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
callq 0x8e90
movq -0x10(%rbp), %rax
movl 0xb4(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0xb4(%rax)
leaq -0xd8(%rbp), %rdi
callq 0x26840
jmp 0x2516a
leaq -0xd8(%rbp), %rdi
callq 0x26840
jmp 0x25210
leaq -0x110(%rbp), %rdi
xorl %esi, %esi
callq 0x27340
leaq -0x120(%rbp), %rdi
xorps %xmm0, %xmm0
callq 0x27840
jmp 0x24bc1
movq -0x1d0(%rbp), %rax
testb $0x1, 0xc(%rax)
je 0x24f84
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x258(%rbp)
cmpq $0x0, %rax
jne 0x24c01
callq 0x7300
jmp 0x24c01
movq -0x258(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x25eda(%rip), %rdi     # 0x4aaf0
callq 0x9370
testb $0x1, %al
jne 0x24c24
jmp 0x24d16
movb $0x1, -0x142(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x268(%rbp)
leaq -0x141(%rbp), %rdi
movq %rdi, -0x260(%rbp)
callq 0x74f0
movq -0x260(%rbp), %rdx
leaq 0x1547c(%rip), %rsi     # 0x3a0d9
leaq -0x140(%rbp), %rdi
callq 0x8940
jmp 0x24c6b
movq -0x268(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x283d0
jmp 0x24c80
movq -0x268(%rbp), %rdi
movb $0x0, -0x142(%rbp)
leaq 0x24deb(%rip), %rsi     # 0x49a80
leaq 0x3764(%rip), %rdx      # 0x28400
callq 0x74a0
jmp 0x25219
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x25159
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x2514d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24cee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x7170
leaq -0x141(%rbp), %rdi
callq 0x72e0
testb $0x1, -0x142(%rbp)
jne 0x24d05
jmp 0x24d11
movq -0x268(%rbp), %rdi
callq 0x71c0
jmp 0x2514d
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movl 0xb4(%rax), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x270(%rbp)
cmpq $0x0, %rax
jne 0x24d4a
callq 0x7300
jmp 0x24d4a
movq -0x270(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x25e61(%rip), %rdi     # 0x4abc0
callq 0x9370
testb $0x1, %al
jne 0x24d6d
jmp 0x24e3d
movb $0x1, -0x16a(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x280(%rbp)
leaq -0x169(%rbp), %rdi
movq %rdi, -0x278(%rbp)
callq 0x74f0
movq -0x278(%rbp), %rdx
leaq 0x153f2(%rip), %rsi     # 0x3a198
leaq -0x168(%rbp), %rdi
callq 0x8940
jmp 0x24db4
movq -0x280(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x283d0
jmp 0x24dc9
movq -0x280(%rbp), %rdi
movb $0x0, -0x16a(%rbp)
leaq 0x24ca2(%rip), %rsi     # 0x49a80
leaq 0x361b(%rip), %rdx      # 0x28400
callq 0x74a0
jmp 0x25219
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24e15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x7170
leaq -0x169(%rbp), %rdi
callq 0x72e0
testb $0x1, -0x16a(%rbp)
jne 0x24e2c
jmp 0x24e38
movq -0x280(%rbp), %rdi
callq 0x71c0
jmp 0x2514d
movq 0x2617c(%rip), %rax     # 0x4afc0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x290(%rbp)
movq -0x10(%rbp), %rax
movq %rax, %rdi
addq $0x18, %rdi
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rdi
movq (%rdi), %rax
movq 0x68(%rax), %rax
callq *%rax
movl %eax, -0x284(%rbp)
jmp 0x24e80
movq -0x290(%rbp), %rdi
movl -0x284(%rbp), %eax
movslq %eax, %rsi
callq 0x252c0
jmp 0x24e97
movq -0x10(%rbp), %rax
movq %rax, %rdi
addq $0x18, %rdi
movl 0xb4(%rax), %eax
decl %eax
movslq %eax, %rsi
callq 0x8e70
movq (%rax), %rsi
movq 0x26104(%rip), %rdi     # 0x4afc0
callq 0x27170
jmp 0x24ec3
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x298(%rbp)
cmpq $0x0, %rax
je 0x24f08
movq -0x298(%rbp), %rdi
callq 0x26ca0
movq -0x298(%rbp), %rdi
movl $0x8, %esi
callq 0x7280
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movl 0xb4(%rax), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x2a0(%rbp)
cmpq $0x0, %rax
je 0x24f52
movq -0x2a0(%rbp), %rdi
callq 0x26ca0
movq -0x2a0(%rbp), %rdi
movl $0x8, %esi
callq 0x7280
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
callq 0x8e90
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
callq 0x8e90
movq -0x10(%rbp), %rax
movl 0xb4(%rax), %ecx
subl $0x2, %ecx
movl %ecx, 0xb4(%rax)
jmp 0x25133
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x2a8(%rbp)
cmpq $0x0, %rax
jne 0x24fb3
callq 0x7300
jmp 0x24fb3
movq -0x2a8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x25bf8(%rip), %rdi     # 0x4abc0
callq 0x9370
testb $0x1, %al
jne 0x24fd6
jmp 0x250a6
movb $0x1, -0x192(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x2b8(%rbp)
leaq -0x191(%rbp), %rdi
movq %rdi, -0x2b0(%rbp)
callq 0x74f0
movq -0x2b0(%rbp), %rdx
leaq 0x151c9(%rip), %rsi     # 0x3a1d8
leaq -0x190(%rbp), %rdi
callq 0x8940
jmp 0x2501d
movq -0x2b8(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x283d0
jmp 0x25032
movq -0x2b8(%rbp), %rdi
movb $0x0, -0x192(%rbp)
leaq 0x24a39(%rip), %rsi     # 0x49a80
leaq 0x33b2(%rip), %rdx      # 0x28400
callq 0x74a0
jmp 0x25219
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x2507e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x7170
leaq -0x191(%rbp), %rdi
callq 0x72e0
testb $0x1, -0x192(%rbp)
jne 0x25095
jmp 0x250a1
movq -0x2b8(%rbp), %rdi
callq 0x71c0
jmp 0x2514d
movq -0x10(%rbp), %rax
movq %rax, %rdi
addq $0x18, %rdi
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rsi
movq 0x25ef9(%rip), %rdi     # 0x4afc0
callq 0x27170
jmp 0x250ce
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movq -0x10(%rbp), %rax
movslq 0xb4(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x2c0(%rbp)
cmpq $0x0, %rax
je 0x25113
movq -0x2c0(%rbp), %rdi
callq 0x26ca0
movq -0x2c0(%rbp), %rdi
movl $0x8, %esi
callq 0x7280
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
callq 0x8e90
movq -0x10(%rbp), %rax
movl 0xb4(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0xb4(%rax)
leaq -0x120(%rbp), %rdi
callq 0x27880
leaq -0x110(%rbp), %rdi
callq 0x27380
jmp 0x2516a
leaq -0x120(%rbp), %rdi
callq 0x27880
leaq -0x110(%rbp), %rdi
callq 0x27380
jmp 0x25210
movq -0x10(%rbp), %rax
addq $0x78, %rax
movq %rax, -0x2d0(%rbp)
leaq -0x1b9(%rbp), %rdi
movq %rdi, -0x2c8(%rbp)
callq 0x74f0
movq -0x2c8(%rbp), %rdx
leaq 0x1507a(%rip), %rsi     # 0x3a214
leaq -0x1b8(%rbp), %rdi
callq 0x8940
jmp 0x251a8
movq -0x2d0(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x2c4d0
jmp 0x251bd
leaq -0x1b8(%rbp), %rdi
callq 0x7170
leaq -0x1b9(%rbp), %rdi
callq 0x72e0
addq $0x2d0, %rsp            # imm = 0x2D0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x25204
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x1b8(%rbp), %rdi
callq 0x7170
leaq -0x1b9(%rbp), %rdi
callq 0x72e0
movq -0x28(%rbp), %rdi
callq 0x74e0
nopl (%rax)