Function at 0x40e260
Capabilities:
Validate payment card number using luhn algorithm

Disassembly:
sub esp, 0xdb4
mov eax, dword [0x4537b0]
xor eax, esp
mov dword [esp + 0xdb0], eax
push edi
mov edi, dword [esp + 0xdbc]
push 0x40
push str.70c2441db366d92ea7be1342b3bf629026ba92bb675f06e684bdd34511097434
push 0xffffffffffffffff
call fcn.00412910
cmp eax, 0x26e831b8
je 0x40e2ab
xor al, al
pop edi
mov ecx, dword [esp + 0xdb0]
xor ecx, esp
call fcn.0043e316
add esp, 0xdb4
ret 8
push ebx
push 0x604
push 0
push 0x45cdf8
call fcn.0043e830
add esp, 0xc
push 0x400
lea eax, [esp + 0x13c]
push eax
mov ecx, edi
call fcn.00435880
test al, al
je 0x40e301
mov bl, 0x23
lea ebx, [ebx]
cmp byte [esp + 0x138], bl
jne 0x40e301
push 0x400
lea ecx, [esp + 0x13c]
push ecx
mov ecx, edi
call fcn.00435880
test al, al
jne 0x40e2e0
push esi
push pe_nt_image_headers32
push 0x45cdf8
mov ecx, edi
call fcn.00435880
push pe_nt_image_headers32
push 0x45cef8
mov ecx, edi
call fcn.00435880
push 0x80
lea edx, [esp + 0x940]
push edx
mov ecx, edi
call fcn.00435880
xor esi, esi
lea ebx, [ebx]
mov eax, 0x400
sub eax, esi
push eax
lea ecx, [esp + esi + 0x140]
push ecx
mov ecx, edi
call fcn.00435880
add esi, 0x36
cmp esi, 0x17a
jl 0x40e340
xor edi, edi
xor esi, esi
jmp 0x40e370
movsx edx, byte [esp + esi + 0x13c]
push edx
call fcn.0043f50f
add esp, 4
test eax, eax
je 0x40e39a
movsx ecx, byte [esp + esi + 0x13c]
inc esi
cmp esi, 2
lea eax, [edi + edi*4]
lea edi, [ecx + eax*2 - 0x30]
jl 0x40e370
push ebp
xor ebp, ebp
mov dword [esp + 0x18], edi
xor esi, esi
jmp 0x40e3b0
movsx edx, byte [esp + esi + 0x142]
push edx
call fcn.0043f50f
add esp, 4
test eax, eax
je 0x40e3db
movsx ecx, byte [esp + esi + 0x142]
inc esi
cmp esi, 3
lea eax, [ebp + ebp*4]
lea ebp, [ecx + eax*2 - 0x30]
jl 0x40e3b0
xor ebx, ebx
mov dword [esp + 0x14], ebp
xor esi, esi
jmp 0x40e3f0
movsx edx, byte [esp + esi + 0x145]
push edx
call fcn.0043f50f
add esp, 4
test eax, eax
je 0x40e41a
movsx ecx, byte [esp + esi + 0x145]
inc esi
cmp esi, 3
lea eax, [ebx + ebx*4]
lea ebx, [ecx + eax*2 - 0x30]
jl 0x40e3f0
xor edi, edi
xor esi, esi
mov edi, edi
movsx edx, byte [esp + esi + 0x148]
push edx
call fcn.0043f50f
add esp, 4
test eax, eax
je 0x40e44a
movsx ecx, byte [esp + esi + 0x148]
inc esi
cmp esi, 2
lea eax, [edi + edi*4]
lea edi, [ecx + eax*2 - 0x30]
jl 0x40e420
cmp ebp, 0x100
jg 0x40e69c
cmp ebx, 0x100
jg 0x40e69c
mov ebp, 0x452228
xor esi, esi
lea esp, [esp]
push 8
lea edx, [esp + 0x44]
push edx
push ebp
call fcn.004350f0
push 8
lea eax, [esp + 0x44]
push eax
lea ecx, [esp + 0x152]
push ecx
call fcn.00434f60
test eax, eax
je 0x40e69c
add esi, 8
add ebp, 8
cmp esi, 0x8f0
jb 0x40e470
xor esi, esi
lea esp, [esp]
lea edx, [esp + 0x40]
push edx
call fcn.00434bf0
mov eax, 0x45cdf8
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x40e4c2
push 1
sub eax, edx
push eax
push 0x45cdf8
lea eax, [esp + 0x4c]
push eax
call fcn.00434c30
push 1
lea ecx, [esp + 0x20]
push ecx
lea edx, [esp + 0x48]
push edx
call fcn.00434cf0
mov eax, dword [esp + 0x1c]
cmp eax, dword [esi + 0x4521e8]
jne 0x40e50a
mov ecx, dword [esp + 0x20]
cmp ecx, dword [esi + 0x4521ec]
je 0x40e69c
add esi, 8
cmp esi, 0x40
jb 0x40e4b0
mov esi, dword [esp + 0x18]
push esi
lea edx, [esp + 0x14e]
push edx
push 0x45cff8
call fcn.0043f180
mov ebp, dword [esp + 0x20]
push ebp
lea esi, [esp + esi + 0x15a]
push esi
push 0x45d2f8
call fcn.0043f180
push ebx
add esi, ebp
push esi
push 0x45d1f8
call fcn.0043f180
push edi
add esi, ebx
push esi
push 0x45d0f8
call fcn.0043f180
push 0xa
push 0
add edi, esi
push edi
call fcn.0043f81c
mov dword [0x45d3f8], eax
mov eax, 0x45cef8
add esp, 0x3c
lea ecx, [eax + 1]
mov dl, byte [eax]
inc eax
test dl, dl
jne 0x40e578
sub eax, ecx
push eax
push 0x45cef8
push 0xffffffffffffffff
call fcn.00412910
mov ecx, 0x45cdf8
lea esi, [ecx + 1]
mov dl, byte [ecx]
inc ecx
test dl, dl
jne 0x40e596
sub ecx, esi
push ecx
push 0x45cdf8
push eax
call fcn.00412910
mov ecx, 0x45cff8
lea esi, [ecx + 1]
mov dl, byte [ecx]
inc ecx
test dl, dl
jne 0x40e5b3
sub ecx, esi
push ecx
push 0x45cff8
push eax
call fcn.00412910
mov ecx, 0x45d2f8
lea esi, [ecx + 1]
mov dl, byte [ecx]
inc ecx
test dl, dl
jne 0x40e5d0
sub ecx, esi
push ecx
push 0x45d2f8
push eax
call fcn.00412910
mov ecx, 0x45d1f8
lea esi, [ecx + 1]
lea ecx, [ecx]
mov dl, byte [ecx]
inc ecx
test dl, dl
jne 0x40e5f0
sub ecx, esi
push ecx
push 0x45d1f8
push eax
call fcn.00412910
mov ecx, 0x45d0f8
lea esi, [ecx + 1]
lea ecx, [ecx]
mov dl, byte [ecx]
inc ecx
test dl, dl
jne 0x40e610
sub ecx, esi
push ecx
push 0x45d0f8
push eax
call fcn.00412910
cmp eax, dword [0x45d3f8]
jne 0x40e69c
cmp byte [0x45cef8], 0
je 0x40e7f8
mov ebp, 0x45cf01
mov dword [esp + 0x14], ebp
push 9
push str.Version:
lea ebx, [ebp - 9]
push ebx
call fcn.00434f60
test eax, eax
je 0x40e66c
push 9
push str.VersMax:
push ebx
call fcn.00434f60
test eax, eax
jne 0x40e728
cmp byte [ebp], 0
mov byte [esp + 0x13], 0
mov esi, ebp
je 0x40e69c
lea esp, [esp]
cmp byte [esi - 1], 0x20
jne 0x40e696
movsx eax, byte [esi]
push eax
call fcn.0043f50f
add esp, 4
test eax, eax
jne 0x40e6b9
inc esi
cmp byte [esi], 0
jne 0x40e680
xor al, al
mov ecx, dword [esp + 0xdc0]
pop ebp
pop esi
pop ebx
pop edi
xor ecx, esp
call fcn.0043e316
add esp, 0xdb4
ret 8
push esi
call fcn.0043f5c1
push 0x2e
push esi
mov edi, eax
call fcn.0043f380
add esp, 0xc
test eax, eax
je 0x40e6e3
inc eax
cmp byte [eax], 0x2a
je 0x40e6e3
push eax
call fcn.0043f5c1
add esp, 4
mov ecx, eax
jmp 0x40e6e6
or ecx, 0xffffffff
cmp edi, 3
jne 0x40e70a
cmp ecx, 0xffffffff
je 0x40e706
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add eax, edx
cmp eax, 9
jne 0x40e70a
mov al, 1
jmp 0x40e70e
mov al, byte [esp + 0x13]
cmp byte [ebp - 5], 0x4d
jne 0x40e720
cmp edi, 3
jg 0x40e728
jne 0x40e720
cmp ecx, 0x5a
jge 0x40e728
test al, al
je 0x40e69c
push 9
push str.DateMax:
push ebx
call fcn.00434f60
test eax, eax
jne 0x40e7e5
mov esi, ebp
cmp byte [ebp], al
je 0x40e69c
cmp byte [esi - 1], 0x20
jne 0x40e75e
movsx ecx, byte [esi]
push ecx
call fcn.0043f50f
add esp, 4
test eax, eax
jne 0x40e769
inc esi
cmp byte [esi], 0
jne 0x40e748
jmp 0x40e69c
mov edi, 1
push esi
mov ebx, edi
call fcn.0043f5c1
push 0x2e
push esi
mov ebp, eax
call fcn.0043f380
add esp, 0xc
test eax, eax
je 0x40e7ad
lea esi, [eax + 1]
push esi
call fcn.0043f5c1
push 0x2e
push esi
mov edi, eax
call fcn.0043f380
add esp, 0xc
test eax, eax
je 0x40e7ad
inc eax
push eax
call fcn.0043f5c1
add esp, 4
mov ebx, eax
lea ecx, [esp + 0x1c]
call fcn.00436170
lea ecx, [esp + 0x1c]
call fcn.00436430
mov eax, dword [esp + 0x1c]
cmp ebp, eax
ja 0x40e7e5
jne 0x40e69c
mov eax, dword [esp + 0x20]
cmp edi, eax
ja 0x40e7e5
jne 0x40e69c
cmp ebx, dword [esp + 0x24]
jb 0x40e69c
mov ebp, dword [esp + 0x14]
inc ebp
cmp byte [ebp - 9], 0
mov dword [esp + 0x14], ebp
jne 0x40e643
cmp byte [esp + 0xdcc], 0
je 0x40e943
mov eax, 0x45cef8
lea edx, [eax + 1]
mov edi, edi
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x40e810
push 0x45d2f8
push str.70c2441db366d92ea7be1342b3bf629026ba92bb675f06e684bdd34511097434
sub eax, edx
push eax
push 0x45cef8
call fcn.00415ba0
test eax, eax
je 0x40e69c
xor eax, eax
jmp 0x40e840
mov cl, byte [eax + 0x45cdf8]
mov byte [esp + eax + 0x540], cl
inc eax
test cl, cl
jne 0x40e840
mov eax, 0x45cff8
mov edx, eax
lea esp, [esp]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x40e860
lea edi, [esp + 0x540]
sub eax, edx
dec edi
mov cl, byte [edi + 1]
inc edi
test cl, cl
jne 0x40e871
mov ecx, eax
shr ecx, 2
mov esi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
xor eax, eax
jmp 0x40e890
mov cl, byte [esp + eax + 0x540]
mov byte [esp + eax + 0x9c0], cl
inc eax
test cl, cl
jne 0x40e890
lea eax, [esp + 0x540]
lea edx, [eax + 1]
lea ecx, [ecx]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x40e8b0
push 0x45d1f8
sub eax, edx
push str.70c2441db366d92ea7be1342b3bf629026ba92bb675f06e684bdd34511097434
mov esi, eax
push esi
lea edx, [esp + 0x54c]
push edx
call fcn.00415ba0
test eax, eax
je 0x40e69c
xor eax, eax
lea ecx, [ecx]
mov cl, byte [esp + eax + 0x9c0]
mov byte [esp + eax + 0x540], cl
inc eax
test cl, cl
jne 0x40e8e0
lea eax, [esp + 0x40]
push eax
push 0x45d0f8
push esi
lea ecx, [esp + 0x54c]
push ecx
call fcn.004159a0
xor eax, eax
lea ecx, [ecx]
mov cl, byte [esp + eax + 0x9c0]
mov byte [esp + eax + 0x540], cl
inc eax
test cl, cl
jne 0x40e910
lea edx, [esp + 0x40]
push edx
push 0x45cff8
push esi
lea eax, [esp + 0x54c]
push eax
call fcn.00415ba0
test eax, eax
je 0x40e69c
mov al, 1
jmp 0x40e69e