Function at 0x4d39e0
Capabilities:
Authenticate hmac
Encode data using xor
Read file on windows
Validate payment card number using luhn algorithm

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x214
mov eax, dword [0x641a90]
xor eax, ebp
mov dword [ebp - 4], eax
xor eax, eax
push edi
mov edi, ecx
push 0x1e0
push eax
mov dword [edi + 0x388], 0xffffffff
mov dword [edi + 0x245d4], 0xffffffff
mov dword [edi + 0x245d8], 0xffffffff
mov word [edi + 0x24544], ax
mov dword [edi + 0x3bc], eax
mov word [edi + 0x44b6], ax
mov dword [edi + 0x44a4], eax
mov dword [edi + 0x44ac], eax
mov dword [edi + 0x44a8], eax
mov dword [edi + 0x43f4], eax
mov byte [edi + 0x291], al
mov byte [edi + 0x251], al
mov byte [edi + 0x211], al
mov byte [edi + 0x2d1], al
mov byte [edi + 0x11], al
mov byte [edi + 0xc], al
mov dword [edi + 0x390], eax
mov dword [edi + 0x370], eax
mov dword [edi + 0x36c], eax
mov dword [edi + 0x368], eax
mov dword [edi + 0x364], eax
mov dword [edi + 0x3c8], eax
lea eax, [edi + 0x4f854]
push eax
call fcn.00595760
push 0x80
lea eax, [edi + 0x4420]
push 0
push eax
call fcn.00595760
push 0x4018
lea eax, [edi + 0x3dc]
push 0
push eax
call fcn.00595760
push 0x80
lea eax, [edi + 0x44c4]
push 0
push eax
call fcn.00595760
push 0x80
lea eax, [edi + 0x24554]
push 0
push eax
call fcn.00595760
movsd xmm0, qword [0x62d3c8]
add esp, 0x3c
xor eax, eax
mov dword [edi + 0x446c8], 0x4d9180
mov dword [edi + 0x44b8], eax
mov dword [edi + 0x3a8], eax
mov dword [edi + 0x39c], eax
mov dword [edi + 0x446cc], eax
mov dword [edi + 0x446c4], eax
mov dword [edi + 0x3d4], eax
mov dword [edi + 0x3d0], eax
mov dword [edi + 0x3ac], eax
mov dword [edi + 0x3a0], eax
mov dword [edi + 0x398], eax
mov dword [edi + 0x44a0], eax
mov dword [edi + 0x440c], eax
mov dword [edi + 0x4404], eax
mov dword [edi + 0x384], eax
mov dword [edi + 0x4410], eax
mov dword [edi + 0x3d8], eax
mov dword [edi + 0x3cc], eax
mov dword [edi + 0x380], eax
mov dword [edi + 0x378], eax
mov dword [edi + 0x37c], eax
mov dword [edi + 0x4400], eax
mov dword [edi + 0x4414], eax
mov dword [edi + 0x3b0], eax
mov dword [edi + 0x43f8], eax
mov dword [edi + 0x43fc], 1
mov dword [edi + 0x4408], 1
movsd qword [edi + 0x245e0], xmm0
mov dword [edi + 0x441c], eax
lea ecx, [edi + 0x24654]
mov dword [edi + 0x4418], eax
xor edx, edx
lea esp, [esp]
xor eax, eax
lea ecx, [ecx + 4]
cmp edx, 1
sete al
movd xmm0, eax
xor eax, eax
cvtdq2ps xmm0, xmm0
cmp edx, 3
setl al
movss dword [ecx - 0x14], xmm0
movd xmm0, eax
xor eax, eax
cvtdq2ps xmm0, xmm0
test edx, edx
sete al
movss dword [ecx - 4], xmm0
movd xmm0, eax
xor eax, eax
cvtdq2ps xmm0, xmm0
cmp edx, 1
mov dword [ecx + 0xc], 0
mov dword [ecx + 0x1c], 0
sete al
mov dword [ecx + 0x2c], 0
movss dword [ecx + 0x3c], xmm0
movd xmm0, eax
xor eax, eax
cvtdq2ps xmm0, xmm0
cmp edx, 2
sete al
inc edx
movss dword [ecx + 0x4c], xmm0
movd xmm0, eax
cvtdq2ps xmm0, xmm0
movss dword [ecx + 0x5c], xmm0
cmp edx, 4
jl 0x4d3bc0
mov dword [edi + 0x245dc], 3
lea ecx, [edi + 0x4544]
xor eax, eax
mov word [ecx], ax
lea ecx, [ecx + 2]
inc eax
cmp eax, 0x10000
jl 0x4d3c57
push ebx
push esi
mov ecx, edi
call fcn.004d29d0
mov ecx, edi
mov word [edi], ax
call fcn.004d2a10
push 0
push 0
push dword [edi + 0x4fa58]
mov ebx, eax
call fcn.00595cb4
push dword [edi + 0x4fa58]
lea eax, [ebp - 0x24]
push 0x20
push 1
push eax
call fcn.00595b79
push 2
push 0
push dword [edi + 0x4fa58]
call fcn.00595cb4
push dword [edi + 0x4fa58]
call fcn.005960c7
push 4
push str.MMMM
mov dword [ebp - 0x208], eax
mov dword [ebp - 0x20c], eax
lea eax, [ebp - 0x24]
push 0x20
push eax
call fcn.004dcab0
mov esi, eax
add esp, 0x3c
test esi, esi
jne 0x4d4588
push 4
push str.IIII
lea eax, [ebp - 0x24]
push 0x20
push eax
call fcn.004dcab0
mov esi, eax
add esp, 0x10
test esi, esi
jne 0x4d4588
movzx eax, word [edi]
mov esi, 0x4949
cmp ax, si
je 0x4d454f
mov ecx, 0x4d4d
cmp ax, cx
je 0x4d454f
lea eax, [ebp - 0x24]
cmp dword [eax], 0xe1ffd8ff
jne 0x4d3d95
lea eax, [ebp - 0x1e]
cmp dword [eax], 0x66697845
jne 0x4d3d95
push 0
push 4
push dword [edi + 0x4fa58]
call fcn.00595cb4
add esp, 0xc
mov ecx, edi
call fcn.004d29d0
movzx eax, ax
add eax, 4
push 0
push eax
push dword [edi + 0x4fa58]
mov dword [edi + 0x398], eax
call fcn.00595cb4
push dword [edi + 0x4fa58]
call fcn.00597fff
add esp, 0x10
cmp eax, 0xff
je 0x4d3d86
push 0xc
mov ecx, edi
call fcn.004e39d0
mov dword [edi + 0x39c], 0
jmp 0x4d45ad
lea ecx, [ebp - 0xb]
cmp dword [ecx], 0x43455241
jne 0x4d3e69
cmp word [ecx + 4], 0x594f
jne 0x4d3e69
cmp byte [ecx + 6], 0x4b
jne 0x4d3e69
mov eax, dword [str.Contax]
mov dword [edi + 0x211], eax
movzx eax, word [0x5e8808]
mov word [edi + 0x215], ax
mov al, byte [0x5e880a]
mov byte [edi + 0x217], al
movq xmm0, qword [str.N_Digital]
push 0
movq qword [edi + 0x251], xmm0
movzx eax, word [0x5e8814]
push 0x21
push dword [edi + 0x4fa58]
mov word [edi + 0x259], ax
call fcn.00595cb4
add esp, 0xc
mov ecx, edi
push 1
call fcn.004d2df0
push 0
push 0x3c
push dword [edi + 0x4fa58]
call fcn.00595cb4
add esp, 0xc
xor esi, esi
jmp 0x4d3e30
mov ecx, edi
call fcn.004d2a10
movd xmm0, eax
cvtdq2pd xmm0, xmm0
shr eax, 0x1f
addsd xmm0, qword [eax*8 + 0x62d480]
mov eax, esi
sar eax, 1
xor eax, esi
inc esi
cvtpd2ps xmm0, xmm0
movss dword [edi + eax*4 + 0x24644], xmm0
cmp esi, 4
jl 0x4d3e30
jmp 0x4d45ad
mov ecx, 0x5e8818
lea eax, [ebp - 0x24]
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d3e91
test dl, dl
je 0x4d3e8d
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d3e91
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d3e71
xor eax, eax
jmp 0x4d3e96
sbb eax, eax
or eax, 1
test eax, eax
jne 0x4d3ecc
movq xmm0, qword [str.Logitech]
lea ecx, [edi + 0x251]
movq qword [edi + 0x211], xmm0
mov al, byte [0x5e8824]
mov byte [edi + 0x219], al
movdqu xmm0, xmmword [str.Fotoman_Pixtura]
movdqu xmmword [ecx], xmm0
jmp 0x4d45b3
mov ecx, str.qktk
lea eax, [ebp - 0x24]
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d3ef4
test dl, dl
je 0x4d3ef0
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d3ef4
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d3ed4
xor eax, eax
jmp 0x4d3ef9
sbb eax, eax
or eax, 1
test eax, eax
jne 0x4d3f4a
mov eax, dword [str.Apple]
lea ecx, [edi + 0x251]
mov dword [edi + 0x211], eax
movzx eax, word [0x5e8844]
mov word [edi + 0x215], ax
movq xmm0, qword [str.QuickTake_100]
movq qword [ecx], xmm0
mov eax, dword [0x5e8850]
mov dword [ecx + 8], eax
movzx eax, word [0x5e8854]
mov word [ecx + 0xc], ax
mov dword [edi + 0x446c4], 0x4e8800
jmp 0x4d45b3
mov ecx, str.qktn
lea eax, [ebp - 0x24]
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d3f72
test dl, dl
je 0x4d3f6e
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d3f72
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d3f52
xor eax, eax
jmp 0x4d3f77
sbb eax, eax
or eax, 1
test eax, eax
jne 0x4d3fc8
mov eax, dword [str.Apple]
lea ecx, [edi + 0x251]
mov dword [edi + 0x211], eax
movzx eax, word [0x5e8844]
mov word [edi + 0x215], ax
movq xmm0, qword [str.QuickTake_150]
movq qword [ecx], xmm0
mov eax, dword [0x5e8868]
mov dword [ecx + 8], eax
movzx eax, word [0x5e886c]
mov word [ecx + 0xc], ax
mov dword [edi + 0x446c4], 0x4d9190
jmp 0x4d45b3
lea eax, [ebp - 0x24]
cmp dword [eax], 0x494a5546
jne 0x4d40dc
cmp dword [eax + 4], 0x4d4c4946
jne 0x4d40dc
push 0
push 0x54
push dword [edi + 0x4fa58]
call fcn.00595cb4
add esp, 0xc
mov ecx, edi
call fcn.004d2a10
mov ecx, edi
mov dword [edi + 0x39c], eax
call fcn.004d2a10
push 0
push 0x5c
push dword [edi + 0x4fa58]
mov dword [edi + 0x3a8], eax
call fcn.00595cb4
add esp, 0xc
mov ecx, edi
call fcn.004d2a10
push eax
mov ecx, edi
call fcn.004dfde0
cmp dword [edi + 0x39c], 0x78
jle 0x4d407a
push 0
push 0x78
push dword [edi + 0x4fa58]
call fcn.00595cb4
add esp, 0xc
mov ecx, edi
call fcn.004d2a10
xor ecx, ecx
test eax, eax
setne cl
add dword [edi + 0x4408], ecx
cmp dword [edi + 0x4408], 2
jne 0x4d407a
cmp dword [edi + 0x3c0], 0
je 0x4d407a
push eax
mov ecx, edi
call fcn.004dfde0
xor eax, eax
mov dword [edi + 0x446c4], 0x4ec5e0
cmp eax, dword [edi + 0x3c0]
push 0
sbb ecx, ecx
neg ecx
lea eax, [ecx*8]
sub eax, ecx
lea eax, [eax*4 + 0x64]
push eax
push dword [edi + 0x4fa58]
call fcn.00595cb4
add esp, 0xc
mov ecx, edi
call fcn.004d2a10
push eax
mov ecx, edi
mov dword [edi + 0x398], eax
call fcn.004e39d0
mov eax, dword [edi + 0x39c]
mov ecx, edi
add eax, 0xc
push eax
call fcn.004e39d0
jmp 0x4d45a6
lea eax, [ebp - 0x24]
cmp dword [eax], 0x46464952
jne 0x4d4105
push 0
push 0
push dword [edi + 0x4fa58]
call fcn.00595cb4
add esp, 0xc
mov ecx, edi
call fcn.004e3020
jmp 0x4d45ad
lea eax, [ebp - 0x20]
cmp dword [eax], 0x70797466
jne 0x4d414d
cmp dword [eax + 4], 0x20207471
jne 0x4d414d
cmp byte [eax + 8], 0x20
jne 0x4d414d
push 0
push 0
push dword [edi + 0x4fa58]
call fcn.00595cb4
add esp, 0xc
mov ecx, edi
push dword [ebp - 0x208]
call fcn.004e2da0
mov dword [edi + 0x4408], 0
jmp 0x4d45ad
lea eax, [ebp - 0x24]
cmp dword [eax], 0x1000100
jne 0x4d4208
cmp word [eax + 4], 0x4000
jne 0x4d4208
push 0
push 6
push dword [edi + 0x4fa58]
call fcn.00595cb4
push dword [edi + 0x4fa58]
lea eax, [edi + 0x211]
push 8
push 1
push eax
call fcn.00595b79
push dword [edi + 0x4fa58]
lea eax, [edi + 0x251]
push 8
push 1
push eax
call fcn.00595b79
push dword [edi + 0x4fa58]
lea eax, [edi + 0x291]
push 0x10
push 1
push eax
call fcn.00595b79
add esp, 0x3c
mov ecx, edi
call fcn.004d29d0
movzx eax, ax
mov ecx, edi
mov dword [edi + 0x398], eax
call fcn.004d29d0
mov ecx, edi
call fcn.004d29d0
mov ecx, edi
mov word [edi + 0x44a6], ax
call fcn.004d29d0
mov word [edi + 0x44a4], ax
mov dword [edi + 0x446c4], 0x4dd3a0
mov dword [edi + 0x388], 0x61616161
jmp 0x4d45ad
lea eax, [ebp - 0x24]
cmp dword [eax], 0x494b4f4e
jne 0x4d4305
cmp dword [eax + 4], 0x57415241
jne 0x4d4305
mov eax, dword [str.NOKIA]
push 0
mov dword [edi + 0x211], eax
mov ax, word [0x5e8874]
push 0x12c
push dword [edi + 0x4fa58]
mov word [edi + 0x215], ax
mov word [edi], si
call fcn.00595cb4
add esp, 0xc
mov ecx, edi
call fcn.004d2a10
mov ecx, edi
mov dword [edi + 0x398], eax
call fcn.004d2a10
mov ecx, edi
mov ebx, eax
call fcn.004d29d0
mov ecx, edi
mov word [edi + 0x44aa], ax
call fcn.004d29d0
movzx esi, ax
movzx eax, word [edi + 0x44aa]
mov ecx, esi
imul ecx, eax
lea eax, [ebx*8]
cdq
mov word [edi + 0x44a8], si
idiv ecx
mov ecx, eax
mov dword [edi + 0x3d0], ecx
sub eax, 8
je 0x4d42bd
sub eax, 2
jne 0x4d42c7
mov dword [edi + 0x446c4], 0x4dd3a0
jmp 0x4d42c7
mov dword [edi + 0x446c4], 0x4cdd90
movzx eax, word [edi + 0x44aa]
xor edx, edx
imul ecx, eax
mov eax, ebx
shr ecx, 3
div ecx
sub eax, esi
mov word [edi + 0x44ac], ax
add eax, esi
mov word [edi + 0x44a4], ax
mov dword [edi + 0x24560], 1
mov dword [edi + 0x388], 0x61616161
jmp 0x4d45ad
lea eax, [ebp - 0x24]
cmp dword [eax], 0x49525241
jne 0x4d43b3
push 0
push 0x14
push dword [edi + 0x4fa58]
mov word [edi], si
call fcn.00595cb4
add esp, 0xc
mov ecx, edi
call fcn.004d2a10
mov ecx, edi
mov word [edi + 0x44aa], ax
call fcn.004d2a10
mov word [edi + 0x44a8], ax
mov eax, dword [str.ARRI]
push 0
mov dword [edi + 0x211], eax
mov al, byte [0x5e887c]
push 0x29c
push dword [edi + 0x4fa58]
mov byte [edi + 0x215], al
call fcn.00595cb4
push dword [edi + 0x4fa58]
lea eax, [edi + 0x251]
push 0x40
push 1
push eax
call fcn.00595b79
add esp, 0x1c
mov dword [edi + 0x398], 0x1000
mov dword [edi + 0x446c4], 0x4dda50
mov dword [edi + 0x44a0], 0x58
mov dword [edi + 0x388], 0x61616161
jmp 0x4d45ad
lea eax, [ebp - 0x24]
cmp dword [eax], 0x53445058
jne 0x4d4474
push 0
push 0x800
push dword [edi + 0x4fa58]
mov word [edi], si
call fcn.00595cb4
push dword [edi + 0x4fa58]
lea eax, [edi + 0x211]
push 0x29
push 1
push eax
call fcn.00595b79
add esp, 0x1c
mov ecx, edi
call fcn.004d29d0
mov ecx, edi
mov word [edi + 0x44a4], ax
call fcn.004d29d0
push 1
push 0x38
push dword [edi + 0x4fa58]
mov word [edi + 0x44a6], ax
call fcn.00595cb4
push dword [edi + 0x4fa58]
lea eax, [edi + 0x251]
push 0x1e
push 1
push eax
call fcn.00595b79
movsd xmm0, qword [0x5e91c0]
add esp, 0x1c
mov ecx, edi
mov dword [edi + 0x398], 0x10000
mov dword [edi + 0x446c4], 0x4cbd50
push 0x3ff
push 1
sub esp, 0x10
movsd qword [esp + 8], xmm0
xorps xmm0, xmm0
movsd qword [esp], xmm0
call fcn.004d25c0
jmp 0x4d45ad
lea eax, [ebp - 0x20]
cmp dword [eax], 0x31444552
jne 0x4d44cf
mov ecx, edi
mov dword [edi + 0x211], 0x646552
mov dword [edi + 0x251], 0x656e4f
call fcn.004e2e90
movaps xmm0, xmmword [0x5e9300]
mov ecx, edi
push 0xfff
push 1
sub esp, 0x10
mov dword [edi + 0x446c4], 0x4d9180
movups xmmword [esp], xmm0
call fcn.004d25c0
mov dword [edi + 0x388], 0x49494949
jmp 0x4d45ad
lea eax, [ebp - 0x24]
cmp dword [eax], 0x2d435344
jne 0x4d44f5
cmp dword [eax + 4], 0x67616d49
jne 0x4d44f5
cmp byte [eax + 8], 0x65
jne 0x4d44f5
mov ecx, edi
call fcn.004e32c0
jmp 0x4d45ad
lea eax, [ebp - 0x24]
cmp dword [eax], 0x44415750
jne 0x4d450c
mov ecx, edi
call fcn.004e3650
jmp 0x4d45ad
lea eax, [ebp - 0x24]
cmp dword [eax], 0x4d524d00
jne 0x4d4525
push 0
mov ecx, edi
call fcn.004e2140
jmp 0x4d45ad
lea eax, [ebp - 0x24]
cmp dword [eax], 0x62564f46
jne 0x4d4539
mov ecx, edi
call fcn.004df780
jmp 0x4d45ad
lea ecx, [ebp - 0x24]
mov eax, 0x4943
cmp word [ecx], ax
jne 0x4d45ad
mov ecx, edi
call fcn.004deeb0
jmp 0x4d45ad
lea eax, [ebp - 0x1e]
cmp dword [eax], 0x50414548
jne 0x4d4599
cmp dword [eax + 4], 0x52444343
jne 0x4d4599
mov eax, dword [ebp - 0x208]
mov ecx, edi
push 0
sub eax, ebx
mov dword [edi + 0x398], ebx
push eax
push ebx
call fcn.004ddf90
mov dword [edi + 0x446c4], 0x4cb980
jmp 0x4d45ad
lea eax, [ebp - 0x24]
mov ecx, edi
sub esi, eax
push esi
call fcn.004e2880
test esi, esi
je 0x4d45ad
push 0
mov ecx, edi
call fcn.004e39d0
test eax, eax
je 0x4d45ad
mov ecx, edi
call fcn.004c9b30
lea ecx, [edi + 0x251]
cmp byte [edi + 0x211], 0
lea eax, [edi + 0x211]
jne 0x4d47f5
mov edx, ecx
mov esi, eax
mov ecx, dword [ebp - 0x208]
mov ebx, 0x5e74b0
sub edx, str.F_080C
mov eax, 0x65
sub esi, ebx
mov dword [ebp - 0x210], edx
mov dword [ebp - 0x214], esi
mov dword [ebp - 0x204], eax
cmp ecx, dword [ebx - 0x10]
jne 0x4d47cb
mov ecx, ebx
nop
mov al, byte [ecx]
lea ecx, [ecx + 1]
mov byte [ecx + esi - 1], al
test al, al
jne 0x4d4600
lea ecx, [ebx + 0xa]
mov al, byte [ecx]
lea ecx, [ecx + 1]
mov byte [ecx + edx - 1], al
test al, al
jne 0x4d4610
movzx eax, byte [ebx - 1]
shr eax, 2
mov dword [edi + 0x245d4], eax
movzx eax, byte [ebx - 1]
and eax, 2
mov dword [edi + 0x4400], eax
movzx eax, word [ebx + 0x1e]
mov dword [edi + 0x398], eax
movzx eax, word [ebx - 0xc]
mov word [edi + 0x44a6], ax
movzx eax, word [ebx - 0xa]
movzx esi, word [edi + 0x44a6]
mov word [edi + 0x44a4], ax
mov cx, si
movzx eax, byte [ebx - 8]
movzx edx, word [edi + 0x44a4]
mov word [edi + 0x44ae], ax
movzx eax, byte [ebx - 7]
mov word [edi + 0x44ac], ax
movzx eax, byte [ebx - 6]
sub cx, ax
sub cx, word [edi + 0x44ae]
mov word [edi + 0x44aa], cx
mov cx, dx
movzx eax, byte [ebx - 5]
sub cx, ax
sub cx, word [edi + 0x44ac]
mov word [edi + 0x44a8], cx
movzx eax, byte [ebx - 3]
imul eax, eax, 0x1010101
mov ecx, eax
mov dword [edi + 0x388], eax
shr ecx, 1
and ecx, eax
mov eax, 4
and ecx, 0x5555
neg ecx
sbb ecx, ecx
inc ecx
sub eax, ecx
mov ecx, edx
mov dword [edi + 0x245dc], eax
movzx eax, byte [ebx - 4]
mov dword [edi + 0x44a0], eax
mov eax, dword [ebp - 0x208]
sub eax, dword [edi + 0x398]
imul ecx, esi
shl eax, 3
cdq
idiv ecx
mov edx, eax
mov dword [edi + 0x3d0], edx
lea ecx, [edx - 6]
cmp ecx, 0xa
ja case.0x4d4715.7
movzx ecx, byte [ecx + 0x4d85f4]
jmp dword [ecx*4 + 0x4d85e0]
mov dword [edi + 0x446c4], 0x4dc840
jmp case.0x4d4715.7
mov dword [edi + 0x446c4], 0x4cdd90
jmp case.0x4d4715.7
or dword [edi + 0x44a0], 0x80
mov dword [edi + 0x446c4], 0x4dda50
jmp case.0x4d4715.7
mov ax, word [edi + 0x44a0]
mov ecx, 0x404
and ax, 1
mov dword [edi + 0x446c4], 0x4ec5e0
imul ax, cx
mov ecx, 0x4949
or ax, cx
mov ecx, dword [edi + 0x44a0]
mov word [edi], ax
mov eax, ecx
shr eax, 4
shr ecx, 1
sub edx, eax
and ecx, 7
mov dword [edi + 0x3d0], edx
sub dword [edi + 0x3d0], ecx
mov dword [edi + 0x44a0], ecx
mov cl, byte [ebx - 2]
mov eax, 1
mov esi, dword [ebp - 0x214]
mov edx, eax
shl edx, cl
mov ecx, dword [edi + 0x3d0]
shl eax, cl
mov ecx, dword [ebp - 0x208]
sub eax, edx
mov edx, dword [ebp - 0x210]
mov dword [edi + 0x43f4], eax
mov eax, dword [ebp - 0x204]
sub esi, 0x30
sub edx, 0x30
add ebx, 0x30
mov dword [ebp - 0x214], esi
dec eax
mov dword [ebp - 0x210], edx
mov dword [ebp - 0x204], eax
jne 0x4d45f4
lea eax, [edi + 0x211]
jmp 0x4d47fd
xor ebx, ebx
mov dword [ebp - 0x208], ebx
cmp byte [eax], 0
jne 0x4d494b
push dword [ebp - 0x20c]
mov ecx, edi
push 0
call fcn.004e3850
cmp byte [edi + 0x211], 0
lea eax, [edi + 0x211]
jne 0x4d494b
push 0
mov ecx, edi
call fcn.004e0150
push 2
push 0x5e8880
lea esi, [edi + 0x251]
push esi
call fcn.00596360
add esp, 0xc
test eax, eax
je 0x4d4863
push 5
push str.RP_OV
push esi
call fcn.00596360
add esp, 0xc
test eax, eax
jne 0x4d4941
push 2
push 0xff9e4800
push dword [edi + 0x4fa58]
call fcn.00595cb4
add esp, 0xc
test eax, eax
jne 0x4d4941
push dword [edi + 0x4fa58]
lea eax, [ebp - 0x24]
push 0x20
push 1
push eax
call fcn.00595b79
add esp, 0x10
test eax, eax
je 0x4d4941
mov ecx, str.BRCMn
lea eax, [ebp - 0x24]
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d48c6
test dl, dl
je 0x4d48c2
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d48c6
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d48a6
xor eax, eax
jmp 0x4d48cb
sbb eax, eax
or eax, 1
test eax, eax
jne 0x4d4941
movq xmm0, qword [str.OmniVision]
push dword [edi + 0x4fa58]
movq qword [edi + 0x211], xmm0
movzx eax, word [0x5df09c]
mov word [edi + 0x219], ax
mov al, byte [0x5df09e]
mov byte [edi + 0x21b], al
call fcn.005960c7
add esp, 4
mov dword [edi + 0x446c4], 0x4dd3a0
add eax, 0x7fe0
mov dword [edi + 0x388], 0x16161616
mov dword [edi + 0x398], eax
movzx eax, word [edi + 0x44a6]
mov word [edi + 0x44aa], ax
mov eax, 0xa33
mov word [edi + 0x44a6], ax
jmp 0x4d494b
mov dword [edi + 0x4408], 0
xor esi, esi
lea ebx, [edi + 0x211]
push dword [esi + 0x63a988]
push ebx
call fcn.004dcb30
add esp, 8
test eax, eax
je 0x4d497d
mov ecx, dword [esi + 0x63a988]
mov edx, ebx
sub edx, ecx
mov al, byte [ecx]
lea ecx, [ecx + 1]
mov byte [edx + ecx - 1], al
test al, al
jne 0x4d4970
add esi, 4
cmp esi, 0x54
jb 0x4d4953
mov eax, ebx
mov ecx, 0x5e02b4
mov ebx, dword [ebp - 0x208]
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d49b2
test dl, dl
je 0x4d49ae
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d49b2
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d4992
xor eax, eax
jmp 0x4d49b7
sbb eax, eax
or eax, 1
test eax, eax
je 0x4d49ef
mov ecx, str.Leica
lea eax, [edi + 0x211]
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d49e6
test dl, dl
je 0x4d49e2
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d49e6
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d49c6
xor eax, eax
jmp 0x4d49eb
sbb eax, eax
or eax, 1
test eax, eax
jne 0x4d4a1e
push str._DIGITAL_CAMERA
lea esi, [edi + 0x251]
push esi
call fcn.004dcb30
add esp, 8
test eax, eax
jne 0x4d4a19
push str.FILE_VERSION
push esi
call fcn.00596770
add esp, 8
test eax, eax
je 0x4d4a24
mov byte [eax], 0
jmp 0x4d4a24
lea esi, [edi + 0x251]
push 6
push 0x5c34d4
push esi
call fcn.005996f5
add esp, 0xc
lea ecx, [edi + 0x211]
test eax, eax
jne 0x4d4a57
mov eax, dword [0x5c3500]
mov dword [ecx], eax
mov ax, word [0x5c3504]
mov word [ecx + 4], ax
mov al, byte [0x5c3506]
mov byte [ecx + 6], al
lea edx, [ecx + 1]
lea ebx, [ebx]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x4d4a60
sub ecx, edx
lea eax, [edi + 0x210]
add eax, ecx
cmp byte [eax], 0x20
jne 0x4d4a81
mov byte [eax], 0
lea eax, [eax - 1]
cmp byte [eax], 0x20
je 0x4d4a76
mov ecx, esi
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x4d4a86
sub ecx, edx
lea eax, [edi + 0x250]
add eax, ecx
cmp byte [eax], 0x20
jne 0x4d4aab
lea esp, [esp]
mov byte [eax], 0
lea eax, [eax - 1]
cmp byte [eax], 0x20
je 0x4d4aa0
lea edx, [edi + 0x211]
mov esi, edx
lea ecx, [esi + 1]
mov al, byte [esi]
inc esi
test al, al
jne 0x4d4ab6
sub esi, ecx
lea eax, [edi + 0x251]
push esi
push edx
push eax
call fcn.005996f5
add esp, 0xc
test eax, eax
jne 0x4d4b02
mov al, byte [edi + esi + 0x251]
inc esi
cmp al, 0x20
jne 0x4d4b02
mov eax, 0x40
sub eax, esi
push eax
lea eax, [edi + 0x251]
add eax, esi
lea esi, [edi + 0x251]
push eax
push esi
call fcn.00593440
add esp, 0xc
jmp 0x4d4b08
lea esi, [edi + 0x251]
push 8
push str.FinePix
push esi
call fcn.00596360
add esp, 0xc
test eax, eax
jne 0x4d4b33
lea ecx, [edi + 0x259]
mov edx, esi
sub edx, ecx
mov al, byte [ecx]
lea ecx, [ecx + 1]
mov byte [edx + ecx - 1], al
test al, al
jne 0x4d4b26
push 0xf
push str.Digital_Camera
push esi
call fcn.00596360
add esp, 0xc
test eax, eax
jne 0x4d4b5e
lea ecx, [edi + 0x260]
mov edx, esi
sub edx, ecx
mov al, byte [ecx]
lea ecx, [ecx + 1]
mov byte [edx + ecx - 1], al
test al, al
jne 0x4d4b51
mov byte [edi + 0x2d0], 0
mov byte [edi + 0x290], 0
mov byte [edi + 0x250], 0
mov byte [edi + 0x310], 0
mov byte [edi + 0x210], 0
cmp dword [edi + 0x4408], 0
je 0x4d85a9
cmp word [edi + 0x44a8], 0
jne 0x4d4ba6
mov ax, word [edi + 0x44a4]
mov word [edi + 0x44a8], ax
cmp word [edi + 0x44aa], 0
jne 0x4d4bbe
mov ax, word [edi + 0x44a6]
mov word [edi + 0x44aa], ax
mov eax, 0xa40
cmp word [edi + 0x44a8], ax
jne 0x4d4be4
mov eax, 0xf60
cmp word [edi + 0x44aa], ax
jne 0x4d4be4
mov dword [edi + 0x44a8], 0xf380a38
mov eax, 0xc40
cmp word [edi + 0x44a8], ax
jne 0x4d4c14
mov eax, 0x1300
cmp word [edi + 0x44aa], ax
jne 0x4d4c14
mov dword [edi + 0x44a8], 0x12500c34
mov dword [edi + 0x388], 0x16161616
mov eax, 0x1100
cmp word [edi + 0x44aa], ax
jne 0x4d4c9f
mov ecx, 0x5e88d0
mov eax, esi
lea esp, [esp]
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d4c50
test dl, dl
je 0x4d4c4c
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d4c50
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d4c30
xor eax, eax
jmp 0x4d4c55
sbb eax, eax
or eax, 1
test eax, eax
je 0x4d4c89
mov ecx, 0x5e88d4
mov eax, esi
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d4c80
test dl, dl
je 0x4d4c7c
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d4c80
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d4c60
xor eax, eax
jmp 0x4d4c85
sbb eax, eax
or eax, 1
test eax, eax
jne 0x4d4c9f
mov eax, 0x10d5
mov dword [edi + 0x388], 0x16161616
mov word [edi + 0x44aa], ax
mov eax, 0x1360
cmp word [edi + 0x44aa], ax
jb 0x4d4ce3
push 3
push 0x5e88d8
push esi
call fcn.00596360
add esp, 0xc
test eax, eax
jne 0x4d4ce3
mov eax, 0xa
mov dword [edi + 0x388], 0x16161616
mov word [edi + 0x44ae], ax
mov eax, 0x1356
mov word [edi + 0x44aa], ax
mov eax, 0x1280
cmp word [edi + 0x44aa], ax
jne 0x4d4d41
mov ecx, 0x5e88dc
mov eax, esi
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d4d18
test dl, dl
je 0x4d4d14
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d4d18
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d4cf8
xor eax, eax
jmp 0x4d4d1d
sbb eax, eax
or eax, 1
test eax, eax
jne 0x4d4d41
mov eax, 2
mov dword [edi + 0x44a8], 0x124c0c32
mov dword [edi + 0x388], 0x16161616
mov word [edi + 0x44ac], ax
mov eax, 0x17c0
cmp word [edi + 0x44aa], ax
jne 0x4d4d97
mov ecx, 0x5e88e0
mov eax, esi
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d4d76
test dl, dl
je 0x4d4d72
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d4d76
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d4d56
xor eax, eax
jmp 0x4d4d7b
sbb eax, eax
or eax, 1
test eax, eax
jne 0x4d4d97
mov eax, 4
mov word [edi + 0x44ae], ax
mov eax, 0x1798
mov word [edi + 0x44aa], ax
mov eax, 0x1d00
cmp word [edi + 0x44aa], ax
jne 0x4d4df7
mov ecx, str.645D
mov eax, esi
lea esp, [esp]
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d4dd0
test dl, dl
je 0x4d4dcc
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d4dd0
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d4db0
xor eax, eax
jmp 0x4d4dd5
sbb eax, eax
or eax, 1
test eax, eax
jne 0x4d4df7
mov dword [edi + 0x44a8], 0x1ca0157e
mov dword [edi + 0x388], 0x61616161
mov dword [edi + 0x44ac], 0x30001d
mov eax, 0xbc6
mov ecx, 0x1000
cmp word [edi + 0x44a8], ax
jne 0x4d4e1f
cmp word [edi + 0x44aa], cx
jne 0x4d4e1f
mov eax, 0xfae
mov word [edi + 0x44aa], ax
cmp dword [edi + 0x440c], 0
je 0x4d4ed6
cmp dword [edi + 0x388], 0xffffffff
jne 0x4d4e3f
mov dword [edi + 0x388], 0
cmp dword [edi + 0x388], 0
je 0x4d4e5d
mov eax, dword [edi + 0x4408]
imul eax, dword [edi + 0x3cc]
mov dword [edi + 0x4408], eax
jmp 0x4d4e69
mov eax, dword [edi + 0x3cc]
mov dword [edi + 0x245dc], eax
mov eax, dword [edi + 0x3d4]
cmp eax, 7
ja 0x4d4ea5
je 0x4d4e90
cmp eax, 1
ja 0x4d4eac
mov dword [edi + 0x446c4], 0x4dd940
lea ebx, [edi + 0x251]
jmp 0x4d639c
mov dword [edi + 0x446c4], 0x4dbf20
lea ebx, [edi + 0x251]
jmp 0x4d639c
cmp eax, 0x884c
je 0x4d4ec1
mov dword [edi + 0x446c4], 0
lea ebx, [edi + 0x251]
jmp 0x4d639c
mov dword [edi + 0x446c4], fcn.004d9180
lea ebx, [edi + 0x251]
jmp 0x4d639c
mov ecx, 0x5c34f8
lea eax, [edi + 0x211]
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x4d4f01
test dl, dl
je 0x4d4efd
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x4d4f01
add eax, 2
add ecx, 2
test dl, dl
jne 0x4d4ee1
xor eax, eax
jmp 0x4d4f06
sbb eax, eax
or eax, 1
test eax, eax
jne 0x4d5027
test ebx, ebx
jne 0x4d5027
cmp dword [edi + 0x3d0], 0xf
je 0x4d5027
cmp dword [edi + 0x446c4], ebx
jne 0x4d4f35
mov dword [edi + 0x446c4], 0x4dc260
xor edx, edx
jmp 0x4d4f40
movzx ebx, word [edi + 0x44a6]
cmp bx, word [edx + 0x5e6830]
jne 0x4d4ff6
movzx esi, word [edi + 0x44a4]
cmp si, word [edx + 0x5e6832]
jne 0x4d4ff6
movzx eax, word [edx + 0x5e6834]
movzx ecx, word [edx + 0x5e6836]
sub bx, word [edx + 0x5e6838]
sub si, word [edx + 0x5e683a]
sub bx, ax
mov word [edi + 0x44ae], ax
sub si, cx
movzx eax, word [edx + 0x5e683c]
mov word [edi + 0x44ac], cx
mov word [edi + 0x44aa], bx
mov word [edi + 0x44a8], si
mov dword [edi + 0x24558], eax
movzx eax, word [edx + 0x5e683e]
neg eax
mov dword [edi + 0x24560], eax
movzx eax, word [edx + 0x5e6840]
mov dword [edi + 0x24568], eax
movzx eax, word [edx + 0x5e6842]
neg eax
mov dword [edi + 0x24570], eax
movzx eax, word [edx + 0x5e6844]
test ax, ax
je 0x4d4ff6
imul eax, eax, 0x1010101
mov dword [edi + 0x388], eax
add edx, 0x16
cmp edx, 0x3b2
jb 0x4d4f40
mov eax, dword [edi + 0x390]
lea esi, [edi + 0x251]
or eax, 0x20000
cmp eax, 0x2720000
jne 0x4d5027
mov dword [edi + 0x44ac], 0x80010
mov ebx, str.EOS_10D
mov dword [ebp - 0x204], 0x2b
sub esi, ebx
jmp 0x4d5040
movzx eax, word [ebx - 2]
sub eax, 0x80000000
cmp dword [edi + 0x390], eax
jne 0x4d508d
push ebx
push 0x5c34f8
mov ecx, edi
call fcn.004c8b20
cmp byte [edi + 0x255], 0x4b
jne 0x4d508d
lea ecx, [edi + 0x251]
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x4d5070
sub ecx, edx
cmp ecx, 8
jne 0x4d508d
mov ecx, ebx
mov al, byte [ecx]
lea ecx, [ecx + 1]
mov byte [ecx + esi - 1], al
test al, al
jne 0x4d5080
sub esi, 0x16
invalid