Function at 0x46bc96
Capabilities:
Encrypt data using speck

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x20c
test byte [eax + 0x448], 0x10
mov edi, dword [esp + 0x224]
mov ebp, dword [esp + 0x228]
mov ebx, dword [esp + 0x22c]
mov esi, dword [esp + 0x220]
mov dword [esp + 0x60], edi
mov edi, dword [esp + 0x230]
mov dword [esp + 0x64], ebp
mov dword [esp + 0x94], ebx
mov dword [esp + 0x98], edi
jne 0x46cb17
mov dword [esp + 0x40], eax
mov eax, dword [edx + 0xb0]
mov ebp, edx
mov dword [esp + 0x44], ecx
cmp dword [eax], 0
mov ebx, dword [eax + 4]
mov dword [esp + 0x80], ebx
jne 0x46bdff
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 0x10]
lea eax, [edx - 0x80000000]
or eax, ecx
je 0x46bdff
cmp edx, dword [esi + 0xc]
jne 0x46bdc0
cmp ecx, dword [esi + 8]
jne 0x46bdc0
mov ebx, dword [ebp + 0x2a4]
mov edi, dword [ebp + 0x2a0]
lea eax, [ebx - 0x80000000]
or eax, edi
je 0x46bdc0
cmp edx, ebx
jl 0x46bd57
jg 0x46bd4f
cmp ecx, edi
jb 0x46bd57
inc byte [ebp + 0x2a8]
jmp 0x46bd94
cmp byte [ebp + 0x2a9], 1
mov dword [esp + 0x14], edi
mov dword [esp + 0x18], ebx
mov dword [esp + 0xc], ecx
mov dword [esp + 0x10], edx
mov dword [esp + 8], 0x6d868c
sbb eax, eax
and eax, 0xffffffe8
add eax, 0x30
mov dword [esp + 4], eax
mov eax, dword [esp + 0x40]
mov dword [esp], eax
call fcn.00647705
inc byte [ebp + 0x2a9]
movzx ebx, byte [ebp + 0x2a8]
movzx ecx, byte [ebp + 0x2a9]
mov eax, ecx
add ecx, ebx
mov edx, ebx
cmp ecx, 0xfa
jle 0x46bdc0
shr dl, 1
shr al, 1
mov byte [ebp + 0x2a8], dl
mov byte [ebp + 0x2a9], al
movzx eax, byte [ebp + 0x2a9]
movzx ebx, byte [ebp + 0x2a8]
mov edx, dword [esi + 0x10]
mov ecx, dword [esi + 0x14]
shl eax, 3
mov dword [ebp + 0x2a0], edx
mov dword [ebp + 0x2a4], ecx
cmp ebx, eax
jge 0x46bdff
cmp ecx, dword [esi + 0xc]
jne 0x46bdff
cmp edx, dword [esi + 8]
jne 0x46bdff
mov dword [esi + 0x10], 0
mov dword [esi + 0x14], 0x80000000
mov eax, dword [esp + 0x40]
test byte [eax + 0x448], 8
je 0x46be27
mov eax, dword [esi + 0xc]
add eax, 0x80000000
or eax, dword [esi + 8]
je 0x46be27
mov dword [esi + 0x10], 0
mov dword [esi + 0x14], 0x80000000
cmp dword [esp + 0x44], 0
mov eax, dword [ebp + 0x2b8]
je 0x46be54
mov edi, dword [esp + 0x44]
cmp dword [edi + 0x20], 3
jne 0x46be54
mov edx, dword [eax + 0x10]
cmp dword [edx + 0x8c], 0
jne 0x46be54
mov dword [edx + 0x8c], 1
mov eax, dword [eax + 0x10]
cmp dword [esp + 0x44], 0
mov eax, dword [eax + 0x8c]
setne byte [esp + 0x87]
test eax, eax
mov dword [esp + 0x50], eax
je 0x46be90
cmp byte [esp + 0x87], 0
je 0x46be90
mov eax, dword [esp + 0x44]
cmp dword [eax + 0x20], 3
setne al
movzx eax, al
mov dword [esp + 0x54], eax
jmp 0x46be98
mov dword [esp + 0x54], 0
mov eax, dword [esi + 8]
mov edx, dword [esi + 0xc]
mov dword [esp + 0x48], eax
mov dword [esp + 0x4c], edx
mov eax, dword [esp + 0x4c]
add eax, 0x80000000
or eax, dword [esp + 0x48]
je 0x46bf85
mov eax, dword [esi + 0x10]
mov edx, dword [esi + 0x14]
mov dword [esp + 0x58], eax
mov dword [esp + 0x5c], edx
mov eax, dword [esp + 0x5c]
lea ecx, [eax - 0x80000000]
or ecx, dword [esp + 0x58]
je 0x46c01e
mov edi, dword [ebp + 0xb8]
cmp edi, 0x3e
jg 0x46bf85
lea ebx, [edi - 1]
xor eax, eax
xor edx, edx
test bl, 0x20
mov ecx, ebx
mov ebx, dword [esp + 0x5c]
sete al
setne dl
shl edx, cl
shl eax, cl
mov ecx, dword [esp + 0x58]
sub ecx, eax
sbb ebx, edx
cmp dword [esp + 0x4c], ebx
jg 0x46bf85
jl 0x46bf1a
cmp dword [esp + 0x48], ecx
jae 0x46bf85
mov eax, dword [ebp + 0xc8]
mov edx, eax
mov eax, dword [ebp + 0xcc]
cmp eax, 0x7ffdffff
jg 0x46bf60
cmp ebx, eax
jg 0x46bf60
jl 0x46bf39
cmp ecx, edx
ja 0x46bf60
mov ecx, edi
xor eax, eax
xor edx, edx
test cl, 0x20
sete al
setne dl
shl eax, cl
shl edx, cl
mov ecx, eax
add ecx, dword [esp + 0x48]
mov ebx, edx
adc ebx, dword [esp + 0x4c]
mov dword [esi + 8], ecx
mov dword [esi + 0xc], ebx
jmp 0x46bf85
mov ecx, edi
xor eax, eax
xor edx, edx
test cl, 0x20
mov ebx, dword [esp + 0x5c]
sete al
setne dl
shl edx, cl
shl eax, cl
mov ecx, dword [esp + 0x58]
sub ecx, eax
sbb ebx, edx
mov dword [esi + 0x10], ecx
mov dword [esi + 0x14], ebx
cmp dword [esp + 0x50], 1
jne 0x46c01e
mov ebx, dword [esi + 0x10]
mov eax, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov edx, dword [esi + 0xc]
xor ecx, ebx
xor edx, eax
or ecx, edx
lea edx, [eax - 0x80000000]
sete cl
or edx, ebx
setne dl
test cl, dl
je 0x46c01e
test byte [esp + 0x54], 1
je 0x46c01e
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x40]
mov dword [esp + 0xc], ebx
mov dword [esp + 8], 0x6d86aa
mov dword [esp + 4], 0x30
mov dword [esp], eax
call fcn.00647705
mov eax, dword [esp + 0x40]
mov eax, dword [eax + 4]
mov ebx, dword [eax]
mov dword [esp + 4], 0x6d86cc
mov dword [esp], ebx
call fcn.00697ef7
test eax, eax
je 0x46c01e
mov dword [esp + 4], 0x6d86e4
mov dword [esp], ebx
call fcn.00697ef7
test eax, eax
je 0x46c01e
mov dword [esi + 0x10], 0
mov dword [esi + 0x14], 0x80000000
mov edi, dword [esi + 0x30]
mov eax, dword [ebp + 0x10]
mov edx, dword [ebp + 0x14]
mov ebx, dword [esi + 0x34]
mov dword [esp + 4], 1
mov dword [esp + 8], eax
mov dword [esp], edi
mov dword [esp + 0xc], edx
call fcn.0064f6c4
or ebx, edi
mov dword [esp + 0x78], eax
mov dword [esp + 0x7c], edx
jne 0x46c0f4
mov eax, dword [esp + 0x44]
mov dword [esp + 0x14], esi
mov dword [esp + 0xc], ebp
mov dword [esp + 0x10], eax
lea eax, [esp + 0xbc]
mov dword [esp + 8], eax
lea eax, [esp + 0xb8]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x40]
mov dword [esp], eax
call fcn.0046b995
mov eax, dword [esp + 0xbc]
test eax, eax
je 0x46c0e6
mov edx, dword [esp + 0xb8]
test edx, edx
je 0x46c0e6
mov dword [esp + 0x7c], eax
mov eax, dword [ebp + 0x10]
mov dword [esp + 0x78], edx
mov dword [esp + 0x18], 2
mov dword [esp + 0x48], eax
imul dword [esp + 0x7c]
mov dword [esp + 0x10], eax
mov dword [esp + 0x14], edx
mov eax, dword [esp + 0x78]
imul dword [ebp + 0x14]
mov dword [esp], 1
mov dword [esp + 4], 0
mov dword [esp + 8], eax
mov dword [esp + 0xc], edx
call fcn.00647a1a
mov dword [esi + 0x30], eax
mov dword [esi + 0x34], edx
mov edi, dword [esi + 0x30]
mov eax, edi
or eax, dword [esi + 0x34]
je 0x46c499
mov eax, dword [esp + 0x40]
mov eax, dword [eax + 0x50c]
mov ecx, dword [eax + 4]
mov dword [esp + 0x58], eax
test ecx, ecx
jne 0x46c113
cmp dword [eax + 0x20], 0
je 0x46c499
mov eax, dword [esi + 0x20]
test ecx, ecx
mov ebx, ecx
mov dword [esp + 0x88], eax
jne 0x46c12a
mov eax, dword [esp + 0x58]
mov ebx, dword [eax + 0x20]
mov eax, dword [ebp + 0xc0]
mov dword [esp + 0x68], eax
mov eax, dword [ebp + 0xc4]
mov dword [esp + 0x70], eax
add eax, 0x80000000
or eax, dword [esp + 0x68]
je 0x46c325
cmp dword [ebp + 0x1fc], 0
jne 0x46c499
mov eax, dword [esp + 0x68]
mov dword [ebp + 0x1fc], 1
mov dword [esp + 0xa0], edi
mov dword [esp + 0x48], eax
mov eax, dword [esp + 0x70]
mov dword [esp + 0x4c], eax
mov eax, edi
sar eax, 0x1f
mov dword [esp + 0xa4], eax
mov eax, dword [esp + 0x40]
add eax, 0x50c
mov dword [esp + 0xac], eax
test ebx, ebx
je 0x46c455
mov eax, dword [esp + 0x88]
cmp eax, dword [ebx + 0x20]
jne 0x46c225
mov eax, dword [ebx + 8]
mov dword [esp + 0x8c], eax
mov eax, dword [ebx + 0xc]
mov dword [esp + 0x90], eax
mov eax, dword [ebx + 0x10]
mov dword [esp + 0x74], eax
mov eax, dword [ebx + 0x14]
lea edx, [eax - 0x80000000]
or edx, dword [esp + 0x74]
jne 0x46c242
mov edx, dword [esp + 0x74]
xor edx, dword [esp + 0x8c]
mov dword [esp + 0x9c], edx
mov edx, dword [esp + 0x90]
xor edx, eax
mov dword [esp + 0xa8], edx
mov edx, dword [esp + 0x9c]
or edx, dword [esp + 0xa8]
jne 0x46c242
mov eax, dword [ebx + 0x34]
or eax, dword [ebx + 0x30]
jne 0x46c24c
mov eax, dword [esp + 0xa0]
sub dword [esp + 0x48], eax
mov edx, dword [esp + 0xa4]
sbb dword [esp + 0x4c], edx
mov eax, dword [esp + 0xac]
mov edx, ebx
mov dword [esp + 0x74], ecx
call fcn.0046a5f5
mov ecx, dword [esp + 0x74]
mov ebx, eax
jmp 0x46c197
cmp dword [esp + 0x70], eax
je 0x46caca
mov eax, dword [ebx + 0x30]
mov edx, dword [ebx + 0x34]
lea edi, [esp + 0x1e0]
mov ecx, 8
mov dword [esp + 0x48], eax
xor eax, eax
mov dword [esp + 0x4c], edx
rep stosd dword es:[edi], eax
mov edx, dword [esp + 0x8c]
mov ecx, dword [esp + 0x90]
lea eax, [esp + 0x1e0]
lea edi, [esp + 0x1c0]
call fcn.0046ae05
mov dword [esp + 0x58], eax
mov eax, dword [ebx + 0x10]
mov ecx, 8
mov edx, dword [ebx + 0x14]
mov dword [esp + 0x68], eax
xor eax, eax
mov dword [esp + 0x6c], edx
mov edx, dword [esp + 0x68]
rep stosd dword es:[edi], eax
mov ecx, dword [esp + 0x6c]
lea eax, [esp + 0x1c0]
lea edi, [esp + 0x1a0]
call fcn.0046ae05
mov ecx, 8
mov ebx, eax
xor eax, eax
rep stosd dword es:[edi], eax
mov edx, dword [ebp + 0xc0]
mov ecx, dword [ebp + 0xc4]
lea eax, [esp + 0x1a0]
call fcn.0046ae05
mov edx, dword [esp + 0x48]
mov ecx, dword [esp + 0x4c]
mov edi, dword [esp + 0x58]
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x40]
mov dword [esp + 0x10], ebx
mov dword [esp + 0x18], edx
mov dword [esp + 0x1c], ecx
mov dword [esp + 0x14], edi
mov dword [esp + 8], 0x6d86e8
mov dword [esp + 4], 0x30
mov dword [esp], eax
call fcn.00647705
jmp 0x46c499
cmp dword [ebp + 0xcc], 0x7ffeffff
jne 0x46c499
cmp dword [ebp + 0xc8], 0xffffffff
jne 0x46c499
mov dword [esp + 0x48], 0xffffffff
mov dword [esp + 0x4c], 0x7ffeffff
mov eax, dword [esp + 0x40]
mov dword [esp + 0x68], edi
sar edi, 0x1f
mov dword [esp + 0x6c], edi
add eax, 0x50c
mov dword [esp + 0x8c], eax
test ebx, ebx
je 0x46cafe
mov eax, dword [esp + 0x88]
cmp eax, dword [ebx + 0x20]
jne 0x46c440
mov edi, dword [ebx + 8]
mov edx, dword [ebx + 0x10]
mov eax, dword [ebx + 0xc]
mov ecx, edi
xor ecx, edx
mov dword [esp + 0x58], eax
mov eax, dword [ebx + 0x14]
mov dword [esp + 0x70], ecx
mov ecx, dword [esp + 0x58]
xor ecx, eax
mov dword [esp + 0x74], ecx
mov ecx, dword [esp + 0x70]
or ecx, dword [esp + 0x74]
je 0x46c3c3
mov ecx, dword [esp + 0x58]
add ecx, 0x80000000
or edi, ecx
jne 0x46c499
lea ecx, [eax - 0x80000000]
or ecx, edx
je 0x46c3f0
mov edi, dword [ebp + 0xc0]
mov ecx, dword [ebp + 0xc4]
xor edi, edx
xor ecx, eax
or edi, ecx
je 0x46c3f0
not edx
xor eax, 0x7ffeffff
or edx, eax
jne 0x46c499
mov eax, dword [ebx + 0x34]
or eax, dword [ebx + 0x30]
jne 0x46c499
mov eax, dword [esp + 0x48]
mov edx, dword [esp + 0x4c]
mov dword [ebx + 0x10], eax
mov eax, dword [ebp + 0x2b8]
mov dword [ebx + 0x14], edx
mov eax, dword [eax + 0x10]
cmp dword [eax + 0x8c], 0
jne 0x46c42a
mov eax, dword [esp + 0x48]
mov edx, dword [esp + 0x4c]
mov dword [ebx + 8], eax
mov dword [ebx + 0xc], edx
mov eax, dword [esp + 0x68]
add dword [esp + 0x48], eax
mov edx, dword [esp + 0x6c]
adc dword [esp + 0x4c], edx
mov dword [ebx + 0x30], eax
mov dword [ebx + 0x34], edx
mov eax, dword [esp + 0x8c]
mov edx, ebx
call fcn.0046a5f5
mov ebx, eax
jmp 0x46c36d
lea edi, [esp + 0x180]
mov eax, ebx
mov ecx, 8
mov edx, dword [esp + 0x68]
rep stosd dword es:[edi], eax
mov ecx, dword [esp + 0x70]
lea eax, [esp + 0x180]
call fcn.0046ae05
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x40]
mov dword [esp + 8], 0x6d87bd
mov dword [esp + 4], 0x30
mov dword [esp], eax
call fcn.00647705
cmp dword [esp + 0x44], 0
je 0x46c519
cmp dword [ebp + 0xe4], 3
jne 0x46c519
mov eax, dword [esi + 0x1c]
test eax, eax
je 0x46c519
mov dword [esp + 0x10], eax
sar eax, 0x1f
mov dword [esp + 0x14], eax
mov eax, dword [esi + 0x30]
mov edx, dword [esi + 0x34]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x44]
mov dword [esp + 0xc], edx
mov edx, dword [eax + 0xbc]
mov eax, dword [eax + 0xb8]
mov dword [esp + 4], edx
mov dword [esp], eax
call fcn.00647e5c
mov ebx, dword [esi + 0xc]
mov ecx, dword [esi + 8]
lea edi, [ebx - 0x80000000]
or edi, ecx
je 0x46c4ff
add ecx, eax
adc ebx, edx
mov dword [esi + 8], ecx
mov dword [esi + 0xc], ebx
mov ebx, dword [esi + 0x14]
mov ecx, dword [esi + 0x10]
lea edi, [ebx - 0x80000000]
or edi, ecx
je 0x46c54e
add eax, ecx
adc edx, ebx
mov dword [esi + 0x10], eax
mov dword [esi + 0x14], edx
mov ebx, dword [esi + 0x14]
mov ecx, dword [esi + 0x10]
lea eax, [ebx - 0x80000000]
or eax, ecx
je 0x46c54e
mov eax, dword [esi + 0xc]
mov edx, dword [esi + 8]
cmp ebx, eax
jl 0x46c539
jg 0x46c54e
cmp ecx, edx
jae 0x46c54e
add eax, 0x80000000
or edx, eax
mov eax, 1
cmove eax, dword [esp + 0x54]
mov dword [esp + 0x54], eax
cmp dword [esp + 0x80], 0x1b
setne dl
cmp dword [esp + 0x80], 0xad
setne al
and edx, eax
mov eax, dword [esp + 0x40]
mov byte [esp + 0x48], dl
test byte [eax + 0x4a8], 1
je 0x46c66a
mov eax, dword [esi + 0x30]
mov edx, dword [esi + 0x34]
lea edi, [esp + 0x100]
mov ecx, 8
mov dword [esp + 0x58], eax
mov eax, dword [esi + 0x20]
mov dword [esp + 0x5c], edx
mov edx, dword [ebp + 0xc8]
mov dword [esp + 0x68], eax
xor eax, eax
rep stosd dword es:[edi], eax
mov ecx, dword [ebp + 0xcc]
lea eax, [esp + 0x100]
lea edi, [esp + 0xe0]
call fcn.0046ae05
mov ecx, 8
mov dword [esp + 0x70], eax
xor eax, eax
rep stosd dword es:[edi], eax
mov edx, dword [esi + 0x10]
mov ecx, dword [esi + 0x14]
lea eax, [esp + 0xe0]
lea edi, [esp + 0xc0]
call fcn.0046ae05
mov ecx, 8
mov ebx, eax
xor eax, eax
rep stosd dword es:[edi], eax
mov edx, dword [esi + 8]
mov ecx, dword [esi + 0xc]
lea eax, [esp + 0xc0]
call fcn.0046ae05
mov edi, dword [esp + 0x50]
movzx edx, byte [esp + 0x48]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x54]
mov ecx, dword [esp + 0x5c]
mov dword [esp + 0x14], ebx
mov dword [esp + 0x2c], edi
mov edi, dword [esp + 0x44]
mov dword [esp + 0x30], edx
mov dword [esp + 0xc], eax
mov edx, dword [esp + 0x58]
mov eax, dword [esp + 0x40]
mov dword [esp + 0x20], edi
mov edi, dword [esp + 0x68]
mov dword [esp + 0x28], ecx
mov dword [esp + 8], 0x6d8735
mov dword [esp + 0x24], edx
mov dword [esp + 4], 0x30
mov dword [esp + 0x1c], edi
mov edi, dword [esp + 0x70]
mov dword [esp], eax
mov dword [esp + 0x18], edi
call fcn.00647705
cmp dword [esp + 0x50], 0
je 0x46c68a
cmp dword [esp + 0x50], 1
jne 0x46c8c4
cmp byte [esp + 0x87], 0
je 0x46c8c4
cmp byte [esp + 0x48], 0
je 0x46c8c4
cmp dword [esp + 0x54], 0
je 0x46c7ee
mov eax, dword [esi + 0x14]
add eax, 0x80000000
or eax, dword [esi + 0x10]
jne 0x46c6bf
mov eax, dword [ebp + 0xd0]
mov edx, dword [ebp + 0xd4]
mov dword [esi + 0x10], eax
mov dword [esi + 0x14], edx
lea eax, [esi + 0x24]
mov edx, dword [esi + 0x20]
mov dword [esp + 0x10], eax
mov ecx, dword [esi + 8]
mov ebx, dword [esi + 0xc]
mov eax, dword [esp + 0x40]
mov dword [esp + 8], ecx
mov dword [esp + 0xc], ebx
mov ecx, dword [esi + 0x10]
mov ebx, dword [esi + 0x14]
mov dword [esp], ecx
mov dword [esp + 4], ebx
call fcn.0046ab8a
mov eax, dword [esi + 0x14]
add eax, 0x80000000
or eax, dword [esi + 0x10]
jne 0x46c70c
mov eax, dword [ebp + 0xc8]
mov edx, dword [ebp + 0xcc]
mov dword [esi + 0x10], eax
mov dword [esi + 0x14], edx
cmp dword [ebp + 0xd8], 0
jne 0x46c72b
cmp dword [esi + 0x34], 0
mov eax, dword [esi + 0x30]
jne 0x46c72b
cmp eax, 0x7fffffff
ja 0x46c72b
mov dword [ebp + 0xd8], eax
mov ebx, dword [esi + 0x14]
mov ecx, dword [esi + 0x10]
lea eax, [ebx - 0x80000000]
or eax, ecx
je 0x46c7c1
mov edi, dword [ebp + 0xd8]
mov eax, edi
cdq
add eax, ecx
adc edx, ebx
mov ebx, dword [esi + 0xc]
mov dword [ebp + 0xc8], eax
mov dword [ebp + 0xcc], edx
lea ecx, [ebx - 0x80000000]
or ecx, dword [esi + 8]
jne 0x46c7c1
test edi, edi
jle 0x46c7c1
add eax, 1
adc edx, 0
sub eax, dword [esp + 0x60]
sbb edx, dword [esp + 0x64]
cmp edx, 0
ja 0x46c7c1
cmp eax, 2
ja 0x46c7c1
mov edx, dword [esp + 0x60]
mov eax, dword [esp + 0x64]
xor edx, dword [esp + 0x94]
xor eax, dword [esp + 0x98]
or edx, eax
je 0x46c7c1
mov eax, dword [esp + 0x98]
mov ebx, dword [esp + 0x94]
add eax, 0x80000000
or ebx, eax
je 0x46c7c1
mov eax, dword [esp + 0x60]
mov edx, dword [esp + 0x64]
mov dword [esi + 8], eax
mov dword [esi + 0xc], edx
cmp dword [esi + 0x34], 0
mov eax, dword [esi + 0x30]
jne 0x46c7d7
cmp eax, 0x7fffffff
ja 0x46c7d7
mov dword [ebp + 0xd8], eax
mov eax, dword [esi + 8]
mov edx, dword [esi + 0xc]
mov dword [ebp + 0xd0], eax
mov dword [ebp + 0xd4], edx
jmp 0x46c8c4
mov eax, dword [esi + 0xc]
add eax, 0x80000000
or eax, dword [esi + 8]
jne 0x46c81d
mov eax, dword [esi + 0x14]
mov edx, dword [esi + 0x10]
lea ecx, [eax - 0x80000000]
or ecx, edx
jne 0x46c817
mov ecx, dword [esi + 0x34]
or ecx, dword [esi + 0x30]
je 0x46c967
mov dword [esi + 8], edx
mov dword [esi + 0xc], eax
lea eax, [esi + 0x24]
mov ecx, dword [esi + 8]
mov ebx, dword [esi + 0xc]
mov edx, dword [esi + 0x20]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x40]
mov dword [esp + 8], ecx
mov dword [esp + 0xc], ebx
mov dword [esp], ecx
mov dword [esp + 4], ebx
call fcn.0046ab8a
mov eax, dword [esi + 0xc]
add eax, 0x80000000
or eax, dword [esi + 8]
jne 0x46c864
mov eax, dword [ebp + 0xc8]
mov edx, dword [ebp + 0xcc]
mov dword [esi + 8], eax
mov dword [esi + 0xc], edx
mov eax, dword [esi + 0xc]
mov edx, dword [esi + 8]
lea ecx, [eax - 0x80000000]
mov dword [esi + 0x10], edx
mov dword [esi + 0x14], eax
or ecx, edx
je 0x46c967
mov ebx, dword [esp + 0x78]
mov dword [esp + 0x18], 1
mov dword [esp + 0x1c], 0
mov dword [esp + 8], edx
mov dword [esp + 0xc], eax
mov dword [esp + 0x10], ebx
mov ebx, dword [esp + 0x7c]
mov dword [esp + 0x14], ebx
mov eax, dword [ebp + 0x10]
mov edx, dword [ebp + 0x14]
mov dword [esp], eax
mov dword [esp + 4], edx
call fcn.006483ec
mov dword [ebp + 0xc8], eax
mov dword [ebp + 0xcc], edx
cmp dword [esp + 0x50], 0x10
mov edx, dword [esi + 8]
mov eax, dword [esi + 0xc]
jg 0x46c967
lea ecx, [eax - 0x80000000]
or ecx, edx
je 0x46c967
mov dword [ebp + 0x104], eax
mov dword [ebp + 0x100], edx
xor eax, eax
cmp eax, dword [esp + 0x50]
jge 0x46c93c
mov ebx, dword [ebp + eax*8 + 0x104]
mov ecx, dword [ebp + eax*8 + 0x100]
inc eax
mov edi, dword [ebp + eax*8 + 0x104]
mov edx, dword [ebp + eax*8 + 0x100]
cmp ebx, edi
jle 0x46c936
mov dword [ebp + eax*8 + 0x100], ecx
mov dword [ebp + eax*8 + 0x104], ebx
mov dword [ebp + eax*8 + 0xf8], edx
mov dword [ebp + eax*8 + 0xfc], edi
jmp 0x46c8f1
jl 0x46c93c
cmp ecx, edx
ja 0x46c918
mov eax, ebp
call fcn.0046aafa
test eax, eax
je 0x46c967
mov ecx, dword [esi + 0x10]
mov ebx, dword [esi + 0x14]
lea edx, [ebp + 0x100]
mov eax, ebp
mov dword [esp], ecx
mov dword [esp + 4], ebx
call fcn.00469eba
mov dword [esi + 0x10], eax
mov dword [esi + 0x14], edx
cmp byte [esp + 0x48], 0
jne 0x46c99c
lea eax, [esi + 0x24]
mov edx, dword [esi + 0x20]
mov dword [esp + 0x10], eax
mov ecx, dword [esi + 8]
mov ebx, dword [esi + 0xc]
mov eax, dword [esp + 0x40]
mov dword [esp + 8], ecx
mov dword [esp + 0xc], ebx
mov ecx, dword [esi + 0x10]
mov ebx, dword [esi + 0x14]
mov dword [esp], ecx
mov dword [esp + 4], ebx
call fcn.0046ab8a
mov eax, dword [esi + 0x14]
cmp eax, dword [ebp + 0xcc]
mov edx, dword [esi + 0x10]
jl 0x46c9c0
jg 0x46c9b4
cmp edx, dword [ebp + 0xc8]
jbe 0x46c9c0
mov dword [ebp + 0xc8], edx
mov dword [ebp + 0xcc], eax
mov eax, dword [esp + 0x40]
test byte [eax + 0x4a8], 1
je 0x46ca7f
lea edi, [esp + 0x160]
xor eax, eax
mov ecx, 8
mov edx, dword [ebp + 0xc8]
rep stosd dword es:[edi], eax
mov ecx, dword [ebp + 0xcc]
lea eax, [esp + 0x160]
lea edi, [esp + 0x140]
call fcn.0046ae05
mov ecx, 8
mov dword [esp + 0x48], eax
xor eax, eax
rep stosd dword es:[edi], eax
mov edx, dword [esi + 0x10]
mov ecx, dword [esi + 0x14]
lea eax, [esp + 0x140]
lea edi, [esp + 0x120]
call fcn.0046ae05
mov ecx, 8
mov ebx, eax
xor eax, eax
rep stosd dword es:[edi], eax
mov edx, dword [esi + 8]
mov ecx, dword [esi + 0xc]
lea eax, [esp + 0x120]
call fcn.0046ae05
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x50]
mov edi, dword [esp + 0x48]
mov dword [esp + 0x18], ebx
mov dword [esp + 8], 0x6d8791
mov dword [esp + 4], 0x30
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x54]
mov dword [esp + 0x1c], edi
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x40]
mov dword [esp], eax
call fcn.00647705
mov eax, dword [ebp + 0xb0]
cmp dword [eax], 2
jne 0x46ca90
or dword [esi + 0x24], 1
jmp 0x46caab
mov eax, dword [eax + 4]
mov dword [esp], eax
call fcn.0047e47c
test eax, eax
je 0x46caab
cmp dword [eax + 4], 0
jne 0x46ca8a
test byte [eax + 0x10], 1
jne 0x46ca8a
cmp dword [esp + 0x44], 0
je 0x46cb17
mov eax, dword [esp + 0x44]
mov edx, dword [eax + 0xec]
mov eax, dword [eax + 0xe8]
mov dword [esi + 0x44], edx
mov dword [esi + 0x40], eax
jmp 0x46cb17
mov edx, dword [esp + 0x74]
cmp dword [esp + 0x68], edx
jne 0x46c24c
test ecx, ecx
jne 0x46cae3
mov eax, dword [esp + 0x58]
mov ecx, dword [eax + 0x20]
mov eax, dword [esp + 0x48]
mov edx, dword [esp + 0x4c]
mov ebx, ecx
mov dword [ebp + 0xc0], eax
mov dword [ebp + 0xc4], edx
jmp 0x46c352
mov eax, dword [esp + 0x48]
mov edx, dword [esp + 0x4c]
mov dword [ebp + 0xc8], eax
mov dword [ebp + 0xcc], edx
jmp 0x46c499
add esp, 0x20c
pop ebx
pop esi
pop edi
pop ebp
ret