Function at 0x407045
Capabilities:
Resolve function by parsing pe exports

Disassembly:
sub esp, 0x7c
push ebx
push ebp
mov ebp, dword [esp + 0x88]
xor ebx, ebx
push esi
push edi
push 0x18
lea esi, [ebp + 0x37e864]
pop ecx
lea edi, [esp + 0x2c]
rep movsd dword es:[edi], dword [esi]
lea esi, [ebp + 0x10]
movsx eax, byte [esi]
mov edi, esi
add eax, 0xfffffff5
mov dword [esp + 0x1c], esi
mov dword [esp + 0x14], edi
cmp eax, 0x12
ja case.0x407080.12
jmp dword [eax*4 + 0x4079c1]
push ebp
push 8
lea eax, [esp + 0x18]
mov byte [esi], 0xb
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
cmp dword [esp + 0x10], 0x17
jne 0x4070b0
mov byte [esi], 1
push 4
jmp 0x4072e2
cmp dword [esp + 0x10], 0x31
jne 0x4072e0
mov dword [ebp + 0x2c], ebx
push ebp
push 8
lea eax, [esp + 0x18]
mov byte [esi], 0xd
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov eax, dword [ebp + 0x2c]
shl eax, 8
or eax, dword [esp + 0x10]
mov dword [ebp + 0x2c], eax
push ebp
push 8
lea eax, [esp + 0x18]
mov byte [esi], 0xe
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov eax, dword [ebp + 0x2c]
shl eax, 8
or eax, dword [esp + 0x10]
mov dword [ebp + 0x2c], eax
push ebp
push 8
lea eax, [esp + 0x18]
mov byte [esi], 0xf
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov eax, dword [ebp + 0x2c]
shl eax, 8
or eax, dword [esp + 0x10]
mov dword [ebp + 0x2c], eax
jl 0x4072e0
cmp eax, 0xdbbaa
jg 0x4072e0
mov edi, ebx
jmp 0x40716e
mov edi, dword [esp + 0x2c]
push ebp
push 1
lea eax, [esp + 0x18]
mov byte [esi], 0x10
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
cmp dword [esp + 0x10], 1
sete al
mov byte [edi + ebp + 0x36fbbc], al
inc edi
mov dword [esp + 0x2c], edi
cmp edi, 0x10
jl 0x407146
push 0x100
lea eax, [ebp + 0x36fabc]
push ebx
push eax
call fcn.00407be4
add esp, 0xc
mov esi, ebx
jmp 0x4071d2
mov edi, dword [esp + 0x30]
mov esi, dword [esp + 0x2c]
push ebp
push 1
lea eax, [esp + 0x18]
mov byte [ebp + 0x10], 0x11
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
cmp dword [esp + 0x10], 1
jne 0x4071c7
mov eax, esi
shl eax, 4
add eax, edi
mov byte [eax + ebp + 0x36fabc], 1
inc edi
mov dword [esp + 0x30], edi
cmp edi, 0x10
jl 0x407198
inc esi
mov dword [esp + 0x2c], esi
cmp esi, 0x10
jge 0x4071e8
cmp byte [esi + ebp + 0x36fbbc], bl
je 0x4071d1
mov edi, ebx
jmp 0x4071c8
mov dword [ebp + 0x36fab8], ebx
mov ecx, ebx
mov eax, dword [ebp + 0x36fab8]
cmp byte [ecx + ebp + 0x36fabc], bl
je 0x407212
mov byte [eax + ebp + 0x36fbcc], cl
inc dword [ebp + 0x36fab8]
mov eax, dword [ebp + 0x36fab8]
inc ecx
cmp ecx, 0x100
jl 0x4071f0
test eax, eax
je 0x4072e0
mov edi, dword [esp + 0x14]
add eax, 2
mov dword [esp + 0x38], eax
push ebp
push 3
lea eax, [esp + 0x44]
mov byte [edi], 0x12
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
cmp dword [esp + 0x3c], 2
jl 0x4072e0
cmp dword [esp + 0x3c], 6
jg 0x4072e0
push ebp
push 0xf
lea eax, [esp + 0x48]
mov byte [edi], 0x13
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov ecx, dword [esp + 0x40]
cmp ecx, 1
jl 0x4072e0
mov esi, dword [esp + 0x14]
mov edi, ebx
mov eax, dword [esp + 0x3c]
mov dword [esp + 0x1c], esi
mov dword [esp + 0x18], eax
jmp 0x4072c7
mov eax, dword [esp + 0x3c]
mov edi, dword [esp + 0x2c]
mov dword [esp + 0x18], eax
push ebp
push 1
lea eax, [esp + 0x18]
mov byte [esi], 0x14
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov eax, dword [esp + 0x30]
cmp dword [esp + 0x10], ebx
jne 0x4072d5
mov ecx, dword [esp + 0x40]
mov byte [edi + ebp + 0x37535e], al
inc edi
mov eax, dword [esp + 0x3c]
mov dword [esp + 0x2c], edi
cmp edi, ecx
jge 0x4072fe
mov dword [esp + 0x30], ebx
jmp 0x407299
inc eax
mov dword [esp + 0x30], eax
cmp eax, dword [esp + 0x3c]
jl 0x407299
push 0xfffffffffffffffc
pop ebx
push 0x18
pop ecx
lea edi, [ebp + 0x37e864]
mov eax, ebx
lea esi, [esp + 0x2c]
rep movsd dword es:[edi], dword [esi]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x7c
ret 4
mov dl, bl
test eax, eax
jle 0x407313
mov edi, ebx
mov byte [esp + edi + 0x24], dl
inc dl
movzx edi, dl
cmp edi, eax
jl 0x407306
mov dword [esp + 0x2c], ebx
test ecx, ecx
jle 0x40735f
lea eax, [ebp + 0x370d0c]
mov dword [esp + 0x2c], ecx
mov ebp, eax
mov dl, byte [ebp + 0x4652]
lea edi, [esp + 0x24]
movzx eax, dl
add edi, eax
mov ah, byte [edi]
test dl, dl
je 0x407347
mov al, byte [edi - 1]
mov byte [edi], al
dec edi
sub dl, 1
jne 0x40733c
mov byte [ebp], ah
inc ebp
mov byte [esp + 0x24], ah
sub ecx, 1
jne 0x407327
mov ebp, dword [esp + 0x90]
mov eax, dword [esp + 0x3c]
mov ecx, dword [esp + 0x38]
mov edi, ebx
jmp 0x407432
mov edi, dword [esp + 0x34]
jmp 0x4073d8
mov edi, dword [esp + 0x34]
jmp 0x4073ba
push ebp
push 5
lea eax, [esp + 0x6c]
mov byte [esi], 0x15
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov edi, dword [esp + 0x34]
mov edx, ebx
mov ecx, dword [esp + 0x38]
mov dword [esp + 0x2c], edx
cmp edx, ecx
jge 0x407429
mov eax, dword [esp + 0x64]
cmp eax, 1
jl 0x4072e0
cmp eax, 0x14
jg 0x4072e0
push ebp
push 1
lea eax, [esp + 0x18]
mov byte [esi], 0x16
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
cmp dword [esp + 0x10], ebx
je 0x40740c
mov esi, dword [esp + 0x14]
lea eax, [esp + 0x10]
push ebp
push 1
push eax
mov byte [esi], 0x17
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov eax, dword [esp + 0x64]
cmp dword [esp + 0x10], ebx
jne 0x407409
inc eax
mov dword [esp + 0x64], eax
mov dword [esp + 0x1c], esi
jmp 0x4073a8
dec eax
jmp 0x4073ff
mov edx, dword [esp + 0x2c]
mov ecx, dword [esp + 0x64]
imul eax, edi, 0x102
add eax, edx
inc edx
mov byte [eax + ebp + 0x3799b0], cl
jmp 0x407394
mov eax, dword [esp + 0x3c]
inc edi
mov dword [esp + 0x18], eax
mov dword [esp + 0x34], edi
cmp edi, eax
jl case.0x407080.21
mov dword [esp + 0x34], ebx
test eax, eax
jle 0x4074e1
lea edx, [ebp + 0x37e84c]
mov dword [esp + 0x34], eax
mov dword [esp + 0x20], edx
lea esi, [ebp + 0x3799b0]
lea edx, [ebp + 0x37b7ec]
mov dword [esp + 0x10], edx
mov ebp, edx
mov edx, ebx
push 0x20
pop edi
test ecx, ecx
jle 0x40749a
mov ebx, esi
mov ebp, ecx
mov ecx, edi
mov eax, edx
movzx edi, byte [ebx]
cmp edi, eax
mov edx, edi
cmovle edx, eax
cmp edi, ecx
cmovge edi, ecx
inc ebx
sub ebp, 1
jne 0x407477
mov ecx, dword [esp + 0x38]
xor ebx, ebx
mov ebp, dword [esp + 0x10]
push ecx
push edx
push edi
push esi
lea eax, [ebp + 0x1830]
push eax
push ebp
lea eax, [ebp - 0x1830]
push eax
call fcn.00407aeb
mov eax, dword [esp + 0x20]
add ebp, 0x408
mov ecx, dword [esp + 0x38]
add esi, 0x102
mov dword [esp + 0x10], ebp
mov dword [eax], edi
add eax, 4
sub dword [esp + 0x18], 1
mov dword [esp + 0x20], eax
jne 0x40746a
mov ebp, dword [esp + 0x90]
mov eax, dword [ebp + 0x36fab8]
lea edi, [ebp + 0x30]
or dword [esp + 0x48], 0xffffffff
lea esi, [ebp + 0x370d08]
inc eax
mov dword [esp + 0x54], 0xdbba0
mov edx, 0x100
mov dword [esp + 0x44], eax
mov ecx, edx
mov dword [esp + 0x2c], edx
xor eax, eax
mov dword [esp + 0x4c], ebx
rep stosd dword es:[edi], eax
push 0xf
pop ecx
mov edx, 0x1000
mov ah, cl
lea edi, [ebp + 0x36fccb]
push 0xf
shl ah, 4
add edi, edx
pop ebx
sub edx, 0x10
mov al, bl
add al, ah
mov byte [edi], al
dec edi
sub ebx, 1
jns 0x407530
mov dword [esi], edx
sub esi, 4
sub ecx, 1
jns 0x40751d
push ebp
lea eax, [esp + 0x30]
xor ebx, ebx
push eax
mov dword [esp + 0x60], ebx
call fcn.00407a75
mov esi, dword [esp + 0x1c]
test eax, eax
jne 0x4072e0
push ebp
push dword [esp + 0x70]
lea eax, [esp + 0x78]
mov byte [esi], 0x18
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov edx, dword [esp + 0x70]
jmp 0x4075aa
push ebp
push 1
lea eax, [esp + 0x7c]
mov byte [esi], 0x19
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov eax, dword [esp + 0x70]
lea edx, [eax + eax]
or edx, dword [esp + 0x74]
mov dword [esp + 0x70], edx
mov ecx, dword [esp + 0x6c]
cmp ecx, 0x14
jg 0x4072e0
mov eax, dword [esp + 0x80]
cmp edx, dword [eax + ecx*4]
jle 0x4075ca
inc ecx
mov dword [esp + 0x6c], ecx
jmp case.0x407080.25
mov eax, dword [esp + 0x84]
sub edx, dword [eax + ecx*4]
js 0x4072e0
cmp edx, 0x102
jge 0x4072e0
mov eax, dword [esp + 0x88]
mov esi, dword [esp + 0x58]
mov edx, dword [eax + edx*4]
mov dword [esp + 0x50], edx
jmp 0x4076f4
push ebp
push dword [esp + 0x70]
lea eax, [esp + 0x78]
mov byte [edi], 0x1a
push eax
mov esi, edi
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov edx, dword [esp + 0x70]
mov ecx, dword [esp + 0x6c]
cmp ecx, 0x14
jg 0x4072e0
mov eax, dword [esp + 0x80]
cmp edx, dword [eax + ecx*4]
jle 0x407664
inc ecx
mov dword [esp + 0x6c], ecx
push ebp
push 1
lea eax, [esp + 0x7c]
mov byte [esi], 0x1b
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov eax, dword [esp + 0x70]
lea edx, [eax + eax]
or edx, dword [esp + 0x74]
mov dword [esp + 0x70], edx
jmp 0x40761d
mov eax, dword [esp + 0x84]
sub edx, dword [eax + ecx*4]
js 0x4072e0
cmp edx, 0x102
jge 0x4072e0
mov eax, dword [esp + 0x88]
mov ecx, dword [esp + 0x5c]
mov esi, dword [esp + 0x58]
mov edx, dword [eax + edx*4]
mov eax, dword [esp + 0x60]
mov dword [esp + 0x50], edx
test edx, edx
je 0x4078e0
cmp edx, 1
je 0x4078e6
mov eax, dword [ebp + 0x370ccc]
inc ecx
mov dword [esp + 0x5c], ecx
movzx eax, byte [eax + ebp + 0x36fccc]
movzx edi, byte [eax + ebp + 0x36fbcc]
add dword [ebp + edi*4 + 0x30], ecx
test ecx, ecx
jle 0x4076f4
lea eax, [esi*4 + 0xc38]
add eax, ebp
cmp esi, dword [esp + 0x54]
jge 0x4072e0
inc esi
mov dword [eax], edi
add eax, 4
mov dword [esp + 0x58], esi
dec ecx
mov dword [esp + 0x5c], ecx
test ecx, ecx
jg 0x4076d7
cmp edx, dword [esp + 0x44]
je 0x40790f
test edx, edx
je 0x4078c9
cmp edx, 1
je 0x4078c9
cmp esi, dword [esp + 0x54]
jge 0x4072e0
lea ecx, [edx - 1]
cmp ecx, 0x10
jae 0x407757
mov edi, dword [ebp + 0x370ccc]
lea edx, [ecx + 0x36fccc]
add edx, edi
add edx, ebp
movzx eax, byte [edx]
mov dword [esp + 0x10], eax
test ecx, ecx
je 0x40774b
mov al, byte [edx - 1]
mov byte [edx], al
dec edx
sub ecx, 1
jne 0x40773c
mov eax, dword [esp + 0x10]
mov byte [edi + ebp + 0x36fccc], al
jmp 0x407824
mov edi, ecx
lea eax, [ebp + 0x36fccc]
shr edi, 4
and ecx, 0xf
lea edx, [edi*4 + 0x370ccc]
add edx, ebp
add ecx, dword [edx]
add eax, ecx
mov dword [esp + 0x20], eax
movzx eax, byte [eax]
mov dword [esp + 0x10], eax
mov eax, dword [edx]
cmp ecx, eax
jle 0x40779e
mov ebp, dword [esp + 0x20]
mov al, byte [ebp - 1]
dec ecx
mov byte [ebp], al
dec ebp
cmp ecx, dword [edx]
jg 0x407787
mov ebp, dword [esp + 0x90]
xor ebx, ebx
mov eax, dword [edx]
inc eax
mov dword [edx], eax
test edi, edi
je 0x4077c2
dec dword [edx]
dec edi
mov eax, dword [edx - 4]
mov ecx, dword [edx]
lea edx, [edx - 4]
mov al, byte [eax + ebp + 0x36fcdb]
mov byte [ecx + ebp + 0x36fccc], al
test edi, edi
jg 0x4077a5
dec dword [ebp + 0x370ccc]
mov eax, dword [ebp + 0x370ccc]
mov ecx, dword [esp + 0x10]
mov byte [eax + ebp + 0x36fccc], cl
cmp dword [ebp + 0x370ccc], ebx
jne 0x407820
push 0xf
pop edi
mov edx, 0x1000
lea ecx, [ebp + 0x370d08]
lea esi, [ebp + 0x36fccb]
push 0xf
add esi, edx
sub edx, 0x10
pop ebx
mov eax, dword [ecx]
add eax, ebx
mov al, byte [eax + ebp + 0x36fccc]
mov byte [esi], al
dec esi
sub ebx, 1
jns 0x4077fd
mov dword [ecx], edx
sub ecx, 4
sub edi, 1
jns 0x4077ef
mov esi, dword [esp + 0x58]
xor ebx, ebx
mov eax, dword [esp + 0x10]
movzx eax, byte [eax + ebp + 0x36fbcc]
push ebp
inc dword [ebp + eax*4 + 0x30]
mov eax, dword [esp + 0x14]
movzx eax, byte [eax + ebp + 0x36fbcc]
mov dword [ebp + esi*4 + 0xc38], eax
lea eax, [esp + 0x30]
inc esi
push eax
mov dword [esp + 0x60], esi
call fcn.00407a75
test eax, eax
jne 0x4072e0
mov edi, dword [esp + 0x14]
push ebp
push dword [esp + 0x70]
lea eax, [esp + 0x78]
mov byte [ebp + 0x10], 0x1c
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov edx, dword [esp + 0x70]
mov ecx, dword [esp + 0x6c]
cmp ecx, 0x14
jg 0x4072e0
mov eax, dword [esp + 0x80]
cmp edx, dword [eax + ecx*4]
jle 0x4075ca
inc ecx
mov dword [esp + 0x6c], ecx
push ebp
push 1
lea eax, [esp + 0x7c]
mov byte [edi], 0x1d
push eax
call fcn.00407a0d
test eax, eax
jne case.0x407080.12
mov eax, dword [esp + 0x70]
lea edx, [eax + eax]
or edx, dword [esp + 0x74]
mov dword [esp + 0x70], edx
jmp 0x40787e
mov edi, dword [esp + 0x14]
or ecx, 0xffffffff
xor eax, eax
mov dword [esp + 0x5c], ecx
inc eax
mov dword [esp + 0x60], eax
jmp 0x40769a
add ecx, eax
mov dword [esp + 0x5c], ecx
add eax, eax
mov dword [esp + 0x60], eax
cmp edx, 1
jne 0x4078f7
add ecx, eax
mov dword [esp + 0x5c], ecx
push ebp
lea eax, [esp + 0x30]
push eax
call fcn.00407a75
test eax, eax
je case.0x407080.26
jmp 0x4072e0
cmp dword [ebp + 0x2c], 0
jl 0x4072e0
cmp dword [ebp + 0x2c], esi
jge 0x4072e0
mov dword [ebp + 0x14], ebx
lea ecx, [ebp + 0x30]
mov word [ebp + 0x10], 2
mov esi, 0x100
mov dword [ebp + 0x430], ebx
mov eax, dword [ecx + 0x400]
add eax, dword [ecx]
lea ecx, [ecx + 4]
mov dword [ecx + 0x400], eax
sub esi, 1
jne 0x407939
mov esi, dword [esp + 0x58]
mov edi, ebx
mov dword [esp + 0x2c], edi
test esi, esi
jle 0x40798e
lea ebx, [ebp + 0xc38]
movzx edx, byte [ebx]
mov eax, edi
shl eax, 8
lea ebx, [ebx + 4]
mov ecx, dword [ebp + edx*4 + 0x430]
or dword [ebp + ecx*4 + 0xc38], eax
inc dword [ebp + edx*4 + 0x430]
inc edi
cmp edi, esi
jl 0x407963
mov dword [esp + 0x2c], edi
xor ebx, ebx
mov eax, dword [ebp + 0x2c]
mov eax, dword [ebp + eax*4 + 0xc38]
shr eax, 8
mov dword [ebp + 0x20], eax
mov dword [ebp + 0x18], ebx
mov ecx, dword [ebp + eax*4 + 0xc38]
movzx eax, cl
shr ecx, 8
mov dword [ebp + 0x1c], eax
mov dword [ebp + 0x20], ecx
mov dword [ebp + 0x18], 1
jmp case.0x407080.12