Function at 0x40c160
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x4346b8
mov eax, dword fs:[0]
push eax
mov dword fs:[0], esp
sub esp, 0x914
push ebx
push ebp
push esi
push edi
mov ebp, ecx
xor edi, edi
lea esp, [esp]
mov ecx, dword [ebp + 0xc0a]
lea eax, [esp + 0x6c]
push eax
push ebp
push ecx
mov ecx, 0x44c1c1
call fcn.00415440
cmp eax, 0xffffffff
jne 0x40c1cb
mov ecx, dword [esp + 0x6c]
cmp ecx, 0x2746
jne 0x40c1bc
xor eax, eax
jmp 0x40c1cb
cmp ecx, edi
je 0x40c1cb
mov cl, byte [ebp + 4]
test cl, cl
je 0x40c2b6
mov cl, byte [ebp + 4]
test cl, cl
jne 0x40c2c4
cmp eax, edi
jg 0x40c190
lea ecx, [ebp + 0x7e9]
mov dword [esp + 0x28], edi
mov dword [esp + 0x2c], edi
mov dword [esp + 0x20], edi
call fcn.00404bc0
mov esi, eax
cmp esi, edi
je 0x40c323
jmp 0x40c200
mov eax, dword [esi + 0x25]
test eax, eax
jne 0x40c2dc
mov ecx, dword [esp + 0x2c]
mov eax, edi
or eax, ecx
jne 0x40c220
call fcn.00402150
mov edi, eax
mov dword [esp + 0x2c], edx
mov ecx, dword [esp + 0x2c]
push ecx
xor edx, edx
mov dl, byte [esi + 0x13]
push edi
push 1
lea ebx, [esi + 0xd]
mov eax, ebx
push edx
mov edx, dword [eax]
mov ax, word [eax + 4]
sub esp, 8
mov ecx, esp
mov dword [ecx], edx
mov edx, dword [esi + 8]
mov word [ecx + 4], ax
mov eax, dword [esi + 4]
xor ecx, ecx
mov cl, byte [esi + 0xc]
push ecx
mov ecx, dword [esi]
push edx
mov edx, dword [esi + 0x21]
push eax
push ecx
push edx
mov ecx, ebp
call fcn.00407900
test al, al
jne 0x40c270
mov eax, dword [esi + 0x21]
push eax
call fcn.0042489e
add esp, 4
mov eax, dword [esi + 0x14]
test eax, eax
je 0x40c301
push 0x43e244
mov ecx, ebx
call fcn.004026f0
test al, al
je 0x40c301
mov ecx, dword [ebx]
mov dx, word [ebx + 4]
push 1
push 1
sub esp, 8
mov eax, esp
mov dword [eax], ecx
mov ecx, ebp
mov word [eax + 4], dx
call fcn.00407790
test eax, eax
je 0x40c301
mov ecx, dword [esi + 0x14]
mov dword [eax + 0xc62], ecx
jmp 0x40c301
mov edx, dword [ebp]
push edi
push edi
mov ecx, ebp
mov byte [ebp + 4], 1
call dword [edx + 0x24]
xor al, al
mov ecx, dword [esp + 0x924]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret
xor edx, edx
mov dl, byte [esi + 0xc]
add esi, 0xd
mov ecx, dword [esi]
push edx
mov dx, word [esi + 4]
push 1
push 0
sub esp, 8
mov eax, esp
mov dword [eax], ecx
mov ecx, ebp
mov word [eax + 4], dx
call fcn.0040a030
lea esi, [ebp + 0x7e9]
mov ecx, esi
call fcn.00404be0
mov ecx, esi
call fcn.00404bc0
mov esi, eax
test esi, esi
jne 0x40c200
mov dword [esp + 0x28], edi
lea edi, [ebp + 0x3b9]
mov ecx, edi
call fcn.004049f0
test eax, eax
mov dword [esp + 0x3c], eax
mov esi, eax
je 0x40c40f
mov edi, edi
mov eax, dword [esp + 0x28]
or eax, dword [esp + 0x2c]
jne 0x40c369
call fcn.00402150
push 0
push 0x3e8
push edx
push eax
mov dword [esp + 0x38], eax
mov dword [esp + 0x3c], edx
call fcn.00425b00
mov dword [esp + 0x20], eax
mov ecx, dword [esp + 0x20]
cmp dword [esi + 6], ecx
jae 0x40c3ee
cmp byte [esi + 0xa], 6
push 0x43e244
mov ecx, esi
sete byte [esp + 0x14]
call fcn.004026c0
mov bl, al
mov al, byte [esp + 0x10]
dec bl
neg bl
sbb bl, bl
inc bl
test al, al
jne 0x40c432
test bl, bl
jne 0x40c432
inc byte [esi + 0xa]
mov edx, dword [esp + 0x20]
add edx, 0x3e8
mov dword [esi + 6], edx
mov ecx, dword [0x4435a8]
mov eax, dword [0x43e240]
xor eax, ecx
xor ecx, ecx
mov word [esp + 0x25], ax
mov byte [esp + 0x24], 0x18
mov cx, word [esi + 4]
mov edx, dword [esi]
lea eax, [esp + 0x24]
push ecx
mov ecx, dword [ebp + 0xc0a]
push edx
push 3
push eax
push ecx
mov ecx, 0x44c1c1
call fcn.004154f0
mov ecx, edi
call fcn.004049f0
mov esi, eax
test esi, esi
jne 0x40c340
mov eax, dword [esp + 0x3c]
test eax, eax
je 0x40c40f
push eax
mov ecx, edi
call fcn.00404a10
xor edi, edi
xor ebx, ebx
cmp word [ebp + 7], di
mov dword [esp + 0x28], ebx
mov dword [esp + 0x2c], edi
mov dword [esp + 0x20], edi
mov dword [esp + 0x24], edi
jbe 0x40d3f0
jmp 0x40c4f0
mov eax, dword [esi + 0xb]
test eax, eax
je 0x40c449
push eax
call fcn.0042489e
add esp, 4
mov dword [esi + 0xb], 0
mov al, byte [esp + 0x10]
test al, al
je 0x40c49f
test bl, bl
jne 0x40c49f
cmp dword [esi + 0x112], 1
jne 0x40c49f
push 1
call fcn.00403d80
mov ebx, eax
mov edx, dword [ebx + 0x10]
mov byte [edx], 0x1d
mov dword [ebx + 0xc], 8
mov eax, dword [esi]
mov dword [ebx + 2], eax
mov cx, word [esi + 4]
mov word [ebx + 6], cx
lea edi, [ebp + 0xdb6]
add esp, 4
mov ecx, edi
mov word [ebx], 0xffff
call fcn.00404d20
mov ecx, edi
mov dword [eax], ebx
call fcn.00404d60
cmp esi, dword [esp + 0x3c]
lea edi, [ebp + 0x3b9]
mov ecx, edi
jne 0x40c4c2
call fcn.00404a20
mov ecx, edi
call fcn.004049f0
mov dword [esp + 0x3c], eax
jmp 0x40c3f5
mov edx, dword [0x43e244]
mov dword [esi], edx
mov ax, word [0x43e248]
mov word [esi + 4], ax
jmp 0x40c3f0
mov ebx, dword [esp + 0x28]
mov edi, dword [esp + 0x2c]
jmp 0x40c4f0
mov ecx, dword [esp + 0x24]
mov edx, dword [ebp + 0x334]
imul ecx, ecx, 0xc69
mov al, byte [ecx + edx]
test al, al
lea esi, [ecx + edx]
mov dword [esp + 0x44], esi
je 0x40d3db
mov eax, dword [esi + 1]
mov dword [esp + 0x14], eax
mov cx, word [esi + 5]
mov edx, ebx
or edx, edi
mov word [esp + 0x18], cx
jne 0x40c54b
call fcn.00402150
push 0
mov edi, edx
push 0x3e8
mov ebx, eax
push edi
push ebx
mov dword [esp + 0x38], ebx
mov dword [esp + 0x3c], edi
call fcn.00425b00
mov dword [esp + 0x20], eax
mov eax, dword [esi + 0x738]
mov ecx, dword [esp + 0x20]
cmp ecx, eax
jbe 0x40c5c5
sub ecx, eax
cmp ecx, 0x1388
jbe 0x40c5c5
cmp dword [esi + 0xc62], 8
jne 0x40c5c5
lea ecx, [esi + 0xd]
push 0
call fcn.00410a30
mov ecx, dword [eax + 0x9c]
test ecx, ecx
jne 0x40c5c5
push edi
push ebx
push 0
push 0
sub esp, 8
mov ecx, esp
push 0
lea eax, [esi + 1]
mov edx, dword [eax]
mov ax, word [eax + 4]
push 8
mov dword [ecx], edx
push 3
mov word [ecx + 4], ax
push 8
lea ecx, [esp + 0x38]
push ecx
mov ecx, ebp
mov byte [esp + 0x3c], 0x17
call fcn.00407900
lea ecx, [esi + 0xd]
call fcn.0040da80
add eax, dword [esp + 0x20]
mov dword [esi + 0x738], eax
mov eax, dword [ebp + 0xc01]
lea edx, [ebp + 0x3ad]
push edx
push edi
push ebx
push eax
mov eax, dword [esp + 0x24]
sub esp, 8
mov edx, esp
mov dword [edx], eax
mov ax, word [esp + 0x30]
mov word [edx + 4], ax
mov edx, dword [ebp + 0xc0a]
lea ecx, [esi + 0xd]
push edx
call fcn.00412b20
lea ecx, [esi + 0xd]
call fcn.0040dca0
test al, al
jne 0x40c669
mov eax, dword [esi + 0xc62]
cmp eax, 1
je 0x40c614
cmp eax, 2
jne 0x40c620
lea ecx, [esi + 0xd]
call fcn.0040ff00
test al, al
je 0x40c669
cmp dword [esi + 0xc62], 3
jne 0x40c635
lea ecx, [esi + 0xd]
call fcn.0040ffa0
test al, al
je 0x40c669
mov eax, dword [esi + 0xc62]
cmp eax, 4
je 0x40c64f
cmp eax, 5
je 0x40c64f
cmp eax, 6
je 0x40c64f
cmp eax, 7
jne 0x40c6ad
mov eax, dword [esi + 0x84d]
mov edi, dword [esp + 0x20]
cmp edi, eax
jbe 0x40c6b1
mov ecx, edi
sub ecx, eax
cmp ecx, 0x2710
jbe 0x40c6b1
mov eax, dword [esi + 0xc62]
cmp eax, 8
je 0x40c687
cmp eax, 4
je 0x40c687
cmp eax, 1
je 0x40c687
cmp eax, 3
jne 0x40d3ba
push 1
call fcn.00403d80
mov esi, dword [esi + 0xc62]
add esp, 4
cmp esi, 4
mov ebx, eax
jne 0x40d372
mov eax, dword [ebx + 0x10]
mov byte [eax], 0x1d
jmp 0x40d385
mov edi, dword [esp + 0x20]
lea ebx, [esi + 0xd]
mov ecx, ebx
call fcn.0040dc90
test al, al
je 0x40c70b
push 1
call fcn.00403d80
mov esi, eax
mov edx, dword [esi + 0x10]
mov dword [esi + 0xc], 8
mov byte [edx], 0x26
mov eax, dword [esp + 0x18]
mov dx, word [esp + 0x28]
mov dword [esi + 2], eax
mov cx, word [esp + 0x1c]
mov word [esi + 6], cx
lea edi, [ebp + 0xdb6]
add esp, 4
mov ecx, edi
mov word [esi], dx
call fcn.00404d20
mov ecx, edi
mov dword [eax], esi
call fcn.00404d60
jmp 0x40d3db
cmp dword [esi + 0xc62], 8
jne 0x40c757
cmp edi, dword [esi + 0x734]
jbe 0x40c757
mov al, byte [ebp + 6]
test al, al
jne 0x40c72e
cmp word [esi + 0x732], 0xffff
jne 0x40c757
push 1
add edi, 0x1388
mov dword [esi + 0x734], edi
mov ecx, dword [esp + 0x18]
mov dx, word [esp + 0x1c]
sub esp, 8
mov eax, esp
mov dword [eax], ecx
mov ecx, ebp
mov word [eax + 4], dx
call fcn.00409f10
lea eax, [esp + 0x1c]
push eax
mov ecx, ebx
call fcn.0040e8a0
mov edi, eax
test edi, edi
mov dword [esp + 0x4c], edi
jle 0x40d3db
mov eax, dword [ebp + 0x7d1]
test eax, eax
je 0x40c8d5
push 0x240
lea ecx, [esp + 0x17c]
call fcn.00401090
lea ecx, [esp + 0x178]
mov dword [esp + 0x92c], 0
call fcn.00401190
mov ecx, dword [esp + 0x1c]
lea eax, [edi + 7]
sar eax, 3
push eax
push ecx
lea ecx, [esp + 0x180]
mov dword [esp + 0x3c], eax
call fcn.00401820
mov ecx, dword [esp + 0x178]
mov ebx, dword [ebp + 0x7dd]
lea eax, [ecx + 7]
sar eax, 3
add ebx, eax
test ecx, ecx
mov dword [ebp + 0x7dd], ebx
mov dword [esp + 0x40], ecx
jbe 0x40c8ba
push eax
call fcn.00424827
mov ecx, dword [esp + 0x17c]
mov esi, dword [esp + 0x188]
add ecx, 7
sar ecx, 3
mov edx, ecx
shr ecx, 2
mov ebx, eax
mov edi, ebx
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
add esp, 4
lea ecx, [esp + 0x178]
call fcn.00401190
mov ecx, dword [esp + 0x40]
lea eax, [esp + 0x178]
push eax
push ecx
mov ecx, dword [ebp + 0x7d1]
push ebx
call fcn.00401970
mov edx, dword [esp + 0x178]
mov edi, dword [ebp + 0x7e5]
add edx, 7
sar edx, 3
add edi, edx
push ebx
mov dword [ebp + 0x7e5], edi
call fcn.0042489e
mov ebx, dword [esp + 0x17c]
mov eax, dword [esp + 0x38]
add ebx, 7
sar ebx, 3
add esp, 4
cmp ebx, eax
jle 0x40c895
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x40c888
push eax
call fcn.0042489e
add esp, 4
push ebx
call fcn.00424827
add esp, 4
mov dword [esp + 0x1c], eax
mov esi, dword [esp + 0x184]
mov edi, dword [esp + 0x1c]
mov ecx, ebx
mov eax, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov esi, dword [esp + 0x44]
mov edi, dword [esp + 0x4c]
jmp 0x40c8bc
xor ebx, ebx
lea ecx, [esp + 0x178]
mov dword [esp + 0x92c], 0xffffffff
call fcn.00401170
jmp 0x40c8db
lea ebx, [edi + 7]
sar ebx, 3
mov edx, dword [esi + 0xc62]
cmp edx, 6
mov eax, dword [esp + 0x1c]
mov cl, byte [eax]
jne 0x40c9be
cmp cl, 0xb
jne 0x40c915
mov edx, dword [esp + 0x14]
push ebx
push eax
mov ax, word [esp + 0x20]
sub esp, 8
mov ecx, esp
mov dword [ecx], edx
mov word [ecx + 4], ax
push esi
mov ecx, ebp
call fcn.0040b7e0
jmp 0x40c98d
cmp cl, 0xc
jne 0x40c93b
mov edx, dword [esp + 0x14]
sub esp, 8
mov ecx, esp
mov dword [ecx], edx
mov dx, word [esp + 0x20]
push ebx
mov word [ecx + 4], dx
push eax
mov ecx, ebp
call fcn.00404750
test al, al
jne 0x40c98d
mov ecx, dword [esp + 0x14]
mov dx, word [esp + 0x18]
push 0
push 1
push 0
sub esp, 8
mov eax, esp
mov dword [eax], ecx
mov ecx, ebp
mov word [eax + 4], dx
call fcn.0040a030
mov edi, dword [ebp]
lea ecx, [esi + 0xd]
call fcn.0040da80
mov edx, dword [esp + 0x14]
push eax
mov eax, dword [ebp]
sub esp, 8
mov ecx, esp
mov dword [ecx], edx
mov dx, word [esp + 0x24]
mov word [ecx + 4], dx
mov ecx, ebp
call dword [eax + 0xb8]
push eax
mov ecx, ebp
call dword [edi + 0x64]
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x40c99e
push eax
call fcn.0042489e
add esp, 4
lea edx, [esp + 0x1c]
push edx
lea ecx, [esi + 0xd]
call fcn.0040e8a0
mov edi, eax
test edi, edi
mov dword [esp + 0x4c], edi
jg 0x40c771
jmp 0x40d3db
cmp cl, 0xb
jne 0x40c9e8
cmp edx, 8
je 0x40c991
mov ecx, dword [esp + 0x14]
mov dx, word [esp + 0x18]
push ebx
push eax
sub esp, 8
mov eax, esp
mov dword [eax], ecx
push esi
mov ecx, ebp
mov word [eax + 4], dx
call fcn.0040b7e0
jmp 0x40c98d
cmp cl, 0xc
jne 0x40ca40
push eax
push ebx
call fcn.00403da0
mov edi, eax
lea eax, [ebx*8]
mov dword [edi + 0xc], eax
mov ecx, dword [esp + 0x1c]
add esp, 8
mov dword [edi + 2], ecx
mov dx, word [esp + 0x18]
push 1
mov word [edi + 6], dx
mov ecx, dword [esp + 0x18]
mov dx, word [esp + 0x1c]
sub esp, 8
mov eax, esp
mov dword [eax], ecx
mov ecx, ebp
mov word [eax + 4], dx
call fcn.004076e0
push edi
mov ecx, ebp
mov word [edi], ax
call fcn.004060c0
jmp 0x40c99e
cmp cl, 0x1e
jne 0x40cb6d
cmp ebx, 7
jne 0x40cb6d
cmp edx, 5
je 0x40ca73
cmp edx, ebx
je 0x40ca73
lea eax, [ebp + 0x22d]
push eax
lea ecx, [esp + 0x18]
call fcn.004026c0
test al, al
je 0x40c98d
push 1
mov dword [esi + 0xc62], 8
mov edx, dword [esp + 0x18]
mov ax, word [esp + 0x1c]
sub esp, 8
mov ecx, esp
mov dword [ecx], edx
mov word [ecx + 4], ax
mov ecx, ebp
call fcn.00409f10
mov edx, dword [esp + 0x14]
mov ax, word [esp + 0x18]
push 1
sub esp, 8
mov ecx, esp
mov dword [ecx], edx
mov word [ecx + 4], ax
mov ecx, ebp
call fcn.00409da0
mov ecx, dword [esp + 0x1c]
push 0
push 7
push ecx
lea ecx, [esp + 0x5e4]
call fcn.004010f0
push 8
lea ecx, [esp + 0x5dc]
mov dword [esp + 0x930], 1
call fcn.004014c0
push 1
push 0x20
lea edx, [esp + 0x60]
push edx
lea ecx, [esp + 0x5e4]
call fcn.00401230
push 1
push 0x10
lea eax, [esp + 0x64]
push eax
lea ecx, [esp + 0x5e4]
call fcn.00401230
mov ecx, dword [esp + 0x58]
mov dx, word [esp + 0x5c]
mov dword [esi + 7], ecx
mov word [esi + 0xb], dx
mov eax, dword [esp + 0x1c]
push eax
push 7
call fcn.00403da0
mov dword [eax + 0xc], edi
mov ecx, dword [esp + 0x1c]
mov dword [eax + 2], ecx
mov dx, word [esp + 0x20]
mov cx, word [esp + 0x2c]
add esp, 8
mov word [eax + 6], dx
mov word [eax], cx
push eax
mov ecx, ebp
call fcn.004060c0
lea ecx, [esp + 0x5d8]
mov dword [esp + 0x92c], 0xffffffff
call fcn.00401170
jmp 0x40c99e
cmp cl, 9
jne 0x40ccbf
cmp ebx, 9
jne 0x40ccbf
push 0
push ebx
push eax
lea ecx, [esp + 0x6fc]
call fcn.004010f0
push 8
lea ecx, [esp + 0x6f4]
mov dword [esp + 0x930], 2
call fcn.004014c0
push 1
push 0x20
lea edx, [esp + 0x50]
push edx
lea ecx, [esp + 0x6fc]
call fcn.00401230
push 1
push 0x20
lea eax, [esp + 0x6c]
push eax
lea ecx, [esp + 0x6fc]
call fcn.00401230
call fcn.00402150
push 0
push 0x3e8
push edx
push eax
mov dword [esp + 0x38], eax
mov dword [esp + 0x3c], edx
call fcn.00425b00
mov edx, dword [esp + 0x48]
mov ecx, eax
cmp ecx, edx
mov dword [esp + 0x20], ecx
jbe 0x40cbff
sub eax, edx
jmp 0x40cc01
xor eax, eax
mov edx, dword [esi + 0x72e]
lea edx, [edx + edx*2]
movzx edi, word [esi + edx*2 + 0x710]
test edi, edi
lea edx, [esi + edx*2 + 0x710]
jbe 0x40cc2b
lea edi, [edi + edi*2]
cmp eax, edi
jae 0x40cc92
cmp eax, 0x4b0
jae 0x40cc92
mov word [edx], ax
mov edx, dword [esp + 0x48]
mov edi, dword [esp + 0x64]
add edx, ecx
mov ecx, dword [esi + 0x72e]
shr edx, 1
sub edi, edx
lea ecx, [ecx + ecx*2]
mov dword [esi + ecx*2 + 0x712], edi
mov cx, word [esi + 0x732]
cmp cx, 0xffff
je 0x40cc61
movzx edx, cx
cmp edx, eax
jle 0x40cc68
mov word [esi + 0x732], ax
movzx eax, ax
push eax
lea ecx, [esi + 0xd]
call fcn.0040eff0
mov ecx, dword [esi + 0x72e]
inc ecx
mov eax, ecx
cmp eax, 5
mov dword [esi + 0x72e], ecx
jne 0x40cc92
mov dword [esi + 0x72e], 0
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x40cca3
push eax
call fcn.0042489e
add esp, 4
lea ecx, [esp + 0x6f0]
mov dword [esp + 0x92c], 0xffffffff
call fcn.00401170
jmp 0x40c99e
cmp cl, 6
jne 0x40ce04
cmp ebx, 5
jne 0x40ce04
push 0
push ebx
push eax
lea ecx, [esp + 0x814]
call fcn.004010f0
push 8
lea ecx, [esp + 0x80c]
mov dword [esp + 0x930], 3
call fcn.004014c0
push 1
push 0x20
lea ecx, [esp + 0x70]
push ecx
lea ecx, [esp + 0x814]
call fcn.00401230
lea ecx, [esp + 0x3a8]
call fcn.00401060
push 1
push 8
lea edx, [esp + 0x18]
push edx
lea ecx, [esp + 0x3b4]
mov byte [esp + 0x938], 4
mov byte [esp + 0x1c], 9
call fcn.004016f0
mov eax, dword [esp + 0x68]
push 1
push 0x20
lea ecx, [esp + 0x3c]
push ecx
lea ecx, [esp + 0x3b4]
mov dword [esp + 0x40], eax
call fcn.004016f0
call fcn.004020f0
mov edi, eax
mov dword [esp + 0x20], edi
call fcn.00402150
push 1
mov dword [esp + 0x30], edx
push 0x20
lea edx, [esp + 0x3c]
push edx
lea ecx, [esp + 0x3b4]
mov dword [esp + 0x34], eax
mov dword [esp + 0x40], edi
call fcn.004016f0
mov ecx, dword [esp + 0x14]
mov dx, word [esp + 0x18]
push 0
push edi
push 0
push 0
sub esp, 8
mov eax, esp
push 0
mov dword [eax], ecx
mov ecx, dword [esp + 0x3d0]
push 6
mov word [eax + 4], dx
mov eax, dword [esp + 0x3c8]
push 0
push eax
push ecx
mov ecx, ebp
call fcn.00407900
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x40cdd4
push eax
call fcn.0042489e
add esp, 4
lea ecx, [esp + 0x3a8]
mov byte [esp + 0x92c], 3
call fcn.00401170
lea ecx, [esp + 0x808]
mov dword [esp + 0x92c], 0xffffffff
call fcn.00401170
jmp 0x40c99e
cmp cl, 0x20
jne 0x40ce18
mov dword [esi + 0xc62], 3
jmp 0x40c98d
cmp cl, 0x11
je 0x40c995
cmp cl, 0xa
jne 0x40ce48
mov eax, dword [esp + 0x14]
mov cx, word [esp + 0x18]
push 1
sub esp, 8
mov edx, esp
mov dword [edx], eax
mov word [edx + 4], cx
mov ecx, ebp
call fcn.00409da0
jmp 0x40c98d
cmp cl, 0x29
jne 0x40cea3
lea ecx, [esi + 0x73c]
call fcn.00401190
mov eax, dword [esp + 0x1c]
lea edx, [ebx - 1]
push edx
inc eax
push eax
lea ecx, [esi + 0x73c]
call fcn.004017a0
mov ecx, dword [esp + 0x1c]
push ecx
push ebx
call fcn.00403da0
mov dword [eax + 0xc], edi
mov edx, dword [esp + 0x1c]
mov dword [eax + 2], edx
mov cx, word [esp + 0x20]
mov dx, word [esp + 0x2c]
add esp, 8
mov word [eax + 6], cx
push eax
mov ecx, ebp
mov word [eax], dx
call fcn.004060c0
jmp 0x40c99e
cmp cl, 0xf
jne 0x40cebb
cmp ebx, 0x39
jne 0x40cebb
push eax
push esi
mov ecx, ebp
call fcn.0040bd60
jmp 0x40c98d
cmp cl, 0x10
jne 0x40d0bc
cmp ebx, 0x35
jne 0x40d0bc
lea ecx, [esp + 0xa0]
call fcn.00415230
lea ecx, [esp + 0xa0]
mov dword [esp + 0x92c], 5
call fcn.00413400
push 4
lea eax, [esp + 0x18]
push eax
lea ecx, [esp + 0xa8]
call fcn.00415050
push 2
lea ecx, [esp + 0x1c]
push ecx
lea ecx, [esp + 0xa8]
call fcn.00415050
push 0x14
lea edx, [ebp + 0xd85]
push edx
lea ecx, [esp + 0xa8]
call fcn.00415050
lea ecx, [esp + 0xa0]
call fcn.00415120
mov edi, dword [esp + 0x1c]
lea ecx, [esp + 0xa0]
inc edi
call fcn.00415220
mov esi, eax
mov ecx, 5
xor eax, eax
repe cmpsd dword [esi], dword es:[edi]
je 0x40cfca
lea ecx, [esp + 0xa0]
call fcn.00413400
push 4
lea ecx, [esp + 0x18]
push ecx
lea ecx, [esp + 0xa8]
call fcn.00415050
push 2
lea edx, [esp + 0x1c]
push edx
lea ecx, [esp + 0xa8]
call fcn.00415050
push 0x14
lea eax, [ebp + 0xd99]
push eax
lea ecx, [esp + 0xa8]
call fcn.00415050
lea ecx, [esp + 0xa0]
call fcn.00415120
mov edi, dword [esp + 0x1c]
lea ecx, [esp + 0xa0]
inc edi
call fcn.00415220
mov esi, eax
mov ecx, 5
xor edx, edx
repe cmpsd dword [esi], dword es:[edi]
jne 0x40d08f
mov esi, dword [esp + 0x1c]
add esi, 0x15
mov ecx, 8
lea edi, [esp + 0x158]
rep movsd dword es:[edi], dword [esi]
lea eax, [esp + 0x80]
push eax
lea ecx, [esp + 0x15c]
push ecx
lea ecx, [ebp + 0xc2a]
call fcn.0040b970
mov ecx, dword [esp + 0x1c]
lea esi, [esp + 0x81]
sub esi, ecx
mov dword [esp + 0x34], esi
lea esi, [esp + 0x71]
sub esi, ecx
mov dword [esp + 0x40], esi
lea edi, [esp + 0x80]
lea edx, [esp + 0x70]
mov esi, 0xfffffffe
sub edi, ecx
sub edx, ecx
lea eax, [ecx + 2]
sub esi, ecx
mov edi, edi
lea ecx, [eax + esi]
mov bl, byte [esp + ecx + 0x80]
xor bl, byte [eax - 1]
add eax, 4
mov byte [esp + ecx + 0x70], bl
mov bl, byte [esp + ecx + 0x81]
xor bl, byte [eax - 4]
mov byte [esp + ecx + 0x71], bl
mov bl, byte [eax - 3]
mov cl, byte [eax + edi - 4]
xor cl, bl
mov bl, byte [eax - 2]
mov byte [eax + edx - 4], cl
mov ecx, dword [esp + 0x34]
mov cl, byte [eax + ecx - 4]
xor cl, bl
mov ebx, dword [esp + 0x40]
mov byte [eax + ebx - 4], cl
lea ecx, [eax + esi]
cmp ecx, 0x10
jl 0x40d030
mov eax, dword [esp + 0x44]
push 1
lea edx, [esp + 0x74]
push edx
push eax
mov ecx, ebp
call fcn.00409710
mov ecx, dword [esp + 0x1c]
push ecx
call fcn.0042489e
add esp, 4
lea ecx, [esp + 0xa0]
mov dword [esp + 0x92c], 0xffffffff
call fcn.00415240
mov esi, dword [esp + 0x44]
jmp 0x40c99e
cmp cl, 0x17
jne 0x40d0ca
cmp ebx, 1
je 0x40c995
cmp cl, 0x22
jne 0x40d337
cmp ebx, 0xd
jne 0x40d337
cmp edx, 5
je 0x40d0f4
cmp edx, 4
je 0x40d0f4
mov cl, byte [ebp + 0xdad]
test cl, cl
jne 0x40d0f4
xor cl, cl
jmp 0x40d0f6
mov cl, 1
cmp edx, 5
sete bl
test cl, cl
mov byte [esp + 0x3b], bl
push 0
je 0x40d315
push 0xd
push eax
lea ecx, [esp + 0x4cc]
call fcn.004010f0
push 8
lea ecx, [esp + 0x4c4]
mov dword [esp + 0x930], 6
call fcn.004014c0
push 1
push 0x20
lea edx, [esp + 0x58]
push edx
lea ecx, [esp + 0x4cc]
call fcn.00401230
push 1
push 0x10
lea eax, [esp + 0x5c]
push eax
lea ecx, [esp + 0x4cc]
call fcn.00401230
push 1
push 0x10
lea ecx, [esp + 0x44]
push ecx
lea ecx, [esp + 0x4cc]
call fcn.00401230
test bl, bl
mov edx, dword [esp + 0x50]
mov ax, word [esp + 0x54]
mov dword [esi + 7], edx
mov word [esi + 0xb], ax
mov dword [esi + 0xc62], 8
jne 0x40d1ac
mov al, byte [esi + 0x861]
test al, al
je 0x40d1a2
lea ecx, [esi + 0x851]
push ecx
jmp 0x40d1a4
push 0
lea ecx, [esi + 0xd]
call fcn.0040da50
mov edx, dword [esp + 0x1c]
push edx
push 0xd
call fcn.00403da0
mov ebx, eax
mov dword [ebx + 0xc], 0x68
mov eax, dword [esp + 0x1c]
add esp, 8
mov dword [ebx + 2], eax
mov cx, word [esp + 0x18]
push 1
mov word [ebx + 6], cx
mov eax, dword [esp + 0x18]
mov cx, word [esp + 0x1c]
sub esp, 8
mov edx, esp
mov dword [edx], eax
mov word [edx + 4], cx
mov ecx, ebp
call fcn.004076e0
push ebx
mov ecx, ebp
mov word [ebx], ax
call fcn.004060c0
push 7
lea ecx, [esp + 0x294]
call fcn.00401090
push 1
push 8
lea edx, [esp + 0x18]
push edx
lea ecx, [esp + 0x29c]
mov byte [esp + 0x938], 7
mov byte [esp + 0x1c], 0x1e
call fcn.004016f0
mov eax, dword [esp + 0x14]
push 1
push 0x20
lea ecx, [esp + 0x3c]
push ecx
lea ecx, [esp + 0x29c]
mov dword [esp + 0x40], eax
call fcn.004016f0
mov edx, dword [esp + 0x18]
push 1
push 0x10
lea eax, [esp + 0x68]
push eax
lea ecx, [esp + 0x29c]
mov dword [esp + 0x6c], edx
call fcn.004016f0
mov ebx, dword [esp + 0x290]
mov edi, dword [esp + 0x29c]
call fcn.004020f0
mov edx, dword [esp + 0x14]
push 0
push eax
mov ax, word [esp + 0x20]
push 0
push 0
sub esp, 8
mov ecx, esp
push 0
push 8
push 0
mov dword [ecx], edx
push ebx
mov word [ecx + 4], ax
push edi
mov ecx, ebp
call fcn.00407900
mov al, byte [esp + 0x3b]
test al, al
jne 0x40d2e5
mov edx, dword [esp + 0x14]
mov ax, word [esp + 0x18]
push 1
sub esp, 8
mov ecx, esp
mov dword [ecx], edx
mov word [ecx + 4], ax
mov ecx, ebp
call fcn.00409f10
mov edx, dword [esp + 0x14]
mov ax, word [esp + 0x18]
push 1
sub esp, 8
mov ecx, esp
mov dword [ecx], edx
mov word [ecx + 4], ax
mov ecx, ebp
call fcn.00409da0
lea ecx, [esp + 0x290]
mov byte [esp + 0x92c], 6
call fcn.00401170
lea ecx, [esp + 0x4c0]
mov dword [esp + 0x92c], 0xffffffff
call fcn.00401170
jmp 0x40c99e
mov edx, dword [esp + 0x18]
mov ax, word [esp + 0x1c]
push 1
sub esp, 8
mov ecx, esp
mov dword [ecx], edx
mov word [ecx + 4], ax
mov ecx, ebp
call fcn.00409890
jmp 0x40c98d
cmp cl, 0x14
jb 0x40c995
push eax
push ebx
call fcn.00403da0
mov dword [eax + 0xc], edi
mov ecx, dword [esp + 0x1c]
mov dword [eax + 2], ecx
mov dx, word [esp + 0x20]
mov cx, word [esp + 0x2c]
add esp, 8
mov word [eax + 6], dx
mov word [eax], cx
push eax
mov ecx, ebp
call fcn.004060c0
jmp 0x40c99e
cmp esi, 8
jne 0x40d37f
mov ecx, dword [ebx + 0x10]
mov byte [ecx], 0x21
jmp 0x40d385
mov edx, dword [ebx + 0x10]
mov byte [edx], 0x20
mov dx, word [esp + 0x24]
mov dword [ebx + 0xc], 8
mov eax, dword [esp + 0x14]
mov dword [ebx + 2], eax
mov cx, word [esp + 0x18]
mov word [ebx + 6], cx
lea esi, [ebp + 0xdb6]
mov ecx, esi
mov word [ebx], dx
call fcn.00404d20
mov ecx, esi
mov dword [eax], ebx
call fcn.00404d60
mov ecx, dword [esp + 0x14]
mov dx, word [esp + 0x18]
push 0
push 1
push 0
sub esp, 8
mov eax, esp
mov dword [eax], ecx
mov ecx, ebp
mov word [eax + 4], dx
call fcn.0040a030
mov eax, dword [esp + 0x24]
movzx ecx, word [ebp + 7]
inc eax
cmp eax, ecx
mov dword [esp + 0x24], eax
jb 0x40c4d9
mov ecx, dword [esp + 0x924]
pop edi
mov al, 1
mov dword fs:[0], ecx
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret