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

Disassembly:
push 0x3c
mov eax, 0xa73dad1
call fcn.0a707bc9
mov edx, ecx
mov dword [ebp - 0x2c], edx
mov eax, dword [ebp + 8]
lea edi, [ebp - 0x48]
mov esi, eax
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
mov dword [ebp - 0x3c], eax
mov eax, dword [ebp - 0x48]
xorps xmm1, xmm1
and dword [ebp - 4], 0
mov ecx, eax
sub ecx, dword [ebp - 0x40]
mov dword [ebp - 0x30], ecx
cmp byte [eax], 0x2d
jne 0xa690ce9
inc eax
mov byte [ebp - 0xf], 1
mov dword [ebp - 0x48], eax
jmp 0xa690ced
mov byte [ebp - 0xf], 0
mov cl, byte [eax]
xorps xmm0, xmm0
and dword [ebp - 0x1c], 0
movlpd qword [ebp - 0x38], xmm0
mov byte [ebp - 0xd], 0
cmp cl, 0x30
jne 0xa690d13
and dword [ebp - 0x28], 0
lea esi, [eax + 1]
mov dword [ebp - 0x48], esi
jmp 0xa690dbd
cmp cl, 0x31
jl 0xa6911f8
cmp cl, 0x39
jg 0xa6911f8
movsx ecx, cl
lea esi, [eax + 1]
mov al, byte [esi]
sub ecx, 0x30
cmp byte [ebp - 0xf], 0
mov dword [ebp - 0x48], esi
mov dword [ebp - 0x28], ecx
je 0xa690db1
cmp al, 0x30
jl 0xa690dbd
mov edi, esi
mov edx, esi
cmp al, 0x39
ja 0xa690dbd
cmp ecx, 0xccccccc
jb 0xa690d58
jne 0xa690d7f
mov edx, edi
cmp al, 0x38
ja 0xa690d7f
movsx eax, byte [edx]
lea esi, [edx + 1]
imul ecx, ecx, 0xa
mov dword [ebp - 0x48], esi
add ecx, 0xffffffd0
add ecx, eax
mov al, byte [esi]
inc dword [ebp - 0x1c]
mov dword [ebp - 0x28], ecx
cmp al, 0x30
jl 0xa690dbd
mov edi, esi
mov edx, esi
cmp al, 0x39
jle 0xa690d48
jmp 0xa690dbd
mov dl, 1
xor eax, eax
mov byte [ebp - 0xd], dl
jmp 0xa690dc6
cmp ecx, 0x19999999
jb 0xa690d98
jne 0xa690d7f
mov edx, edi
cmp al, 0x35
jg 0xa690d7f
movsx eax, byte [edx]
lea esi, [edx + 1]
imul ecx, ecx, 0xa
mov dword [ebp - 0x48], esi
add ecx, 0xffffffd0
add ecx, eax
inc dword [ebp - 0x1c]
mov al, byte [esi]
mov dword [ebp - 0x28], ecx
cmp al, 0x30
jl 0xa690dbd
mov edx, esi
mov edi, esi
cmp al, 0x39
jle 0xa690d88
mov ecx, dword [ebp - 0x38]
mov eax, dword [ebp - 0x34]
mov dl, byte [ebp - 0xd]
xor dh, dh
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x20], eax
mov byte [ebp - 0xe], dh
test dl, dl
je 0xa690f0b
mov dl, byte [esi]
cmp byte [ebp - 0xf], dh
je 0xa690e87
cmp dl, 0x30
jl 0xa690f08
mov edi, esi
cmp dl, 0x39
jg 0xa690f08
mov dword [ebp - 0x24], edi
cmp eax, 0xccccccc
jb 0xa690e23
ja 0xa690e0c
cmp ecx, 0xcccccccc
jb 0xa690e23
cmp ecx, 0xcccccccc
jne 0xa690e73
cmp eax, 0xccccccc
jne 0xa690e73
mov dword [ebp - 0x24], edi
cmp dl, 0x38
ja 0xa690e73
mov edx, dword [ebp - 0x24]
xor esi, esi
push 0xa
movsx edi, byte [edx]
lea ecx, [edx + 1]
mov dword [ebp - 0x48], ecx
sub edi, 0x30
pop ecx
mul ecx
push 0xa
mov ecx, eax
mov eax, dword [ebp - 0x18]
pop edx
mul edx
add ecx, edx
add edi, eax
adc esi, ecx
inc dword [ebp - 0x1c]
mov eax, esi
mov ecx, edi
mov esi, dword [ebp - 0x48]
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x20], eax
mov dl, byte [esi]
cmp dl, 0x30
jl 0xa690f05
mov dword [ebp - 0x24], esi
mov edi, esi
cmp dl, 0x39
jle 0xa690dfb
jmp 0xa690f05
mov edx, eax
call fcn.0a708400
mov dh, 1
movaps xmm1, xmm0
mov byte [ebp - 0xe], dh
jmp 0xa690f08
cmp dl, 0x30
jl 0xa690f08
mov edi, esi
cmp dl, 0x39
jg 0xa690f08
mov dword [ebp - 0x24], edi
cmp eax, 0x19999999
jb 0xa690ebe
ja 0xa690ea7
cmp ecx, 0x99999999
jb 0xa690ebe
cmp ecx, 0x99999999
jne 0xa690e73
cmp eax, 0x19999999
jne 0xa690e73
mov dword [ebp - 0x24], edi
cmp dl, 0x35
ja 0xa690e73
mov edx, dword [ebp - 0x24]
xor esi, esi
push 0xa
movsx edi, byte [edx]
lea ecx, [edx + 1]
mov dword [ebp - 0x48], ecx
sub edi, 0x30
pop ecx
mul ecx
push 0xa
mov ecx, eax
mov eax, dword [ebp - 0x18]
pop edx
mul edx
add ecx, edx
add edi, eax
adc esi, ecx
inc dword [ebp - 0x1c]
mov eax, esi
mov ecx, edi
mov esi, dword [ebp - 0x48]
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x20], eax
mov dl, byte [esi]
cmp dl, 0x30
jl 0xa690f05
mov dword [ebp - 0x24], esi
mov edi, esi
cmp dl, 0x39
jle 0xa690e96
mov dh, byte [ebp - 0xe]
mov dl, byte [ebp - 0xd]
test dh, dh
je 0xa690f43
mov al, byte [esi]
cmp al, 0x30
jl 0xa690f43
mov ecx, esi
cmp al, 0x39
ja 0xa690f40
movsx eax, byte [ecx]
lea esi, [ecx + 1]
mulsd xmm1, qword [0xa597c28]
sub eax, 0x30
mov ecx, esi
movd xmm0, eax
mov al, byte [esi]
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
cmp al, 0x30
jge 0xa690f17
mov dword [ebp - 0x48], esi
mov al, byte [esi]
and dword [ebp - 0x24], 0
cmp al, 0x2e
jne 0xa690f51
inc esi
mov dword [ebp - 0x48], esi
mov edi, esi
cmp al, 0x2e
jne 0xa690ffa
mov al, byte [edi]
cmp al, 0x30
jl 0xa691021
cmp al, 0x39
jg 0xa691021
test dh, dh
jne 0xa690f90
test dl, dl
je 0xa690f7d
mov ecx, dword [ebp - 0x18]
mov edx, dword [ebp - 0x20]
jmp 0xa690f82
mov ecx, dword [ebp - 0x28]
xor edx, edx
call fcn.0a708400
movaps xmm1, xmm0
mov byte [ebp - 0xe], 1
jmp 0xa690f93
mov byte [ebp - 0xe], dh
mov cl, byte [esi]
mov eax, edi
mov dword [ebp - 0x34], edi
mov edx, edi
mov esi, edi
mov edi, edx
cmp cl, 0x39
jg 0xa690ff7
mov edx, dword [ebp - 0x1c]
cmp edx, 0x11
jge 0xa690fe2
mulsd xmm1, qword [0xa597c28]
lea edi, [eax + 1]
movsx eax, byte [eax]
mov ecx, edi
sub eax, 0x30
mov dword [ebp - 0x48], ecx
dec dword [ebp - 0x24]
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
comisd xmm1, xmmword [0xa5940d8]
jbe 0xa690fea
inc edx
mov dword [ebp - 0x1c], edx
jmp 0xa690fea
lea edi, [esi + 1]
mov ecx, edi
mov dword [ebp - 0x48], ecx
mov cl, byte [ecx]
mov eax, edi
mov esi, eax
mov edx, eax
cmp cl, 0x30
jge 0xa690f9e
mov dh, byte [ebp - 0xe]
xor ecx, ecx
cmp byte [edi], 0x65
je 0xa69100a
cmp byte [edi], 0x45
jne 0xa691130
lea esi, [edi + 1]
mov dword [ebp - 0x48], esi
test dh, dh
jne 0xa691047
cmp byte [ebp - 0xd], cl
je 0xa691036
mov ecx, dword [ebp - 0x18]
mov edx, dword [ebp - 0x20]
jmp 0xa69103b
mov eax, dword [ebp - 0x2c]
sub edi, dword [ebp - 0x40]
mov dword [eax + 0x18], 0xe
mov dword [eax + 0x1c], edi
jmp 0xa691205
mov ecx, dword [ebp - 0x28]
xor edx, edx
call fcn.0a708400
movaps xmm1, xmm0
mov byte [ebp - 0xe], 1
xor dl, dl
cmp byte [esi], 0x2b
mov byte [ebp - 0x10], dl
je 0xa69105b
cmp byte [esi], 0x2d
jne 0xa69105f
inc dl
mov byte [ebp - 0x10], dl
inc esi
mov dword [ebp - 0x48], esi
mov cl, byte [esi]
mov al, cl
sub al, 0x30
cmp al, 9
ja 0xa69111b
inc esi
movsx ecx, cl
sub ecx, 0x30
mov dword [ebp - 0x48], esi
mov al, byte [esi]
mov byte [ebp - 0x11], al
test dl, dl
je 0xa6910df
mov eax, dword [ebp - 0x24]
add eax, 0x7ffffff7
push 0xa
pop edi
cdq
idiv edi
cmp byte [ebp - 0x11], 0x30
mov edi, eax
mov dword [ebp - 0x34], edi
jl 0xa69110e
mov dl, byte [esi]
cmp dl, 0x39
jg 0xa69110e
movsx eax, byte [esi]
lea edx, [esi + 1]
imul ecx, ecx, 0xa
mov esi, edx
mov dword [ebp - 0x48], edx
add ecx, 0xffffffd0
add ecx, eax
cmp ecx, edi
jle 0xa6910d6
mov al, byte [edx]
cmp al, 0x30
jl 0xa6910d6
mov edi, edx
cmp al, 0x39
ja 0xa6910d0
lea esi, [edi + 1]
mov edx, esi
mov edi, esi
mov al, byte [edx]
cmp al, 0x30
jge 0xa6910bf
mov edi, dword [ebp - 0x34]
mov dword [ebp - 0x48], edx
mov dl, byte [edx]
cmp dl, 0x30
jge 0xa69109b
jmp 0xa69110e
mov edx, dword [ebp - 0x24]
mov edi, 0x134
sub edi, edx
cmp al, 0x30
jl 0xa691133
cmp al, 0x39
jg 0xa691130
movsx eax, byte [esi]
lea edx, [esi + 1]
imul ecx, ecx, 0xa
mov dword [ebp - 0x48], edx
add ecx, 0xffffffd0
add ecx, eax
cmp ecx, edi
jg 0xa69115f
mov al, byte [edx]
mov esi, edx
cmp al, 0x30
jge 0xa6910ed
cmp byte [ebp - 0x10], 0
mov edx, dword [ebp - 0x24]
je 0xa691133
neg ecx
jmp 0xa691133
mov eax, dword [ebp - 0x2c]
sub esi, dword [ebp - 0x40]
mov dword [eax + 0x18], 0xf
mov dword [eax + 0x1c], esi
jmp 0xa691205
mov edx, dword [ebp - 0x24]
mov al, byte [ebp - 0xe]
test al, al
je 0xa691192
lea eax, [ecx + edx]
push eax
push ecx
push ecx
movsd qword [esp], xmm1
call fcn.0a692035
fstp qword [ebp - 0x38]
movsd xmm0, qword [ebp - 0x38]
add esp, 0xc
comisd xmm0, xmmword [0xa597c38]
jbe 0xa691174
mov eax, dword [ebp - 0x2c]
mov dword [eax + 0x18], 0xd
mov ecx, dword [ebp - 0x30]
mov dword [eax + 0x1c], ecx
jmp 0xa691205
cmp byte [ebp - 0xf], 0
je 0xa691181
xorps xmm0, xmmword [0xa597c50]
push ecx
push ecx
mov ecx, dword [ebp + 0xc]
movsd qword [esp], xmm0
call fcn.0a691967
jmp 0xa6911e5
cmp byte [ebp - 0xd], 0
je 0xa6911c7
cmp byte [ebp - 0xf], 0
je 0xa6911b7
mov ecx, dword [ebp - 0x18]
mov eax, dword [ebp - 0x20]
neg ecx
adc eax, 0
neg eax
push eax
push ecx
mov ecx, dword [ebp + 0xc]
call fcn.0a691a2d
jmp 0xa6911e5
push dword [ebp - 0x20]
mov ecx, dword [ebp + 0xc]
push dword [ebp - 0x18]
call fcn.0a69206c
jmp 0xa6911e5
cmp byte [ebp - 0xf], 0
mov ecx, dword [ebp + 0xc]
je 0xa6911dd
mov eax, dword [ebp - 0x28]
neg eax
push eax
call fcn.0a691a63
jmp 0xa6911e5
push dword [ebp - 0x28]
call fcn.0a6920a2
test al, al
jne 0xa691205
mov eax, dword [ebp - 0x2c]
mov dword [eax + 0x18], 0x10
jmp 0xa691169
sub eax, dword [ebp - 0x40]
mov dword [edx + 0x18], 3
mov dword [edx + 0x1c], eax
mov edi, dword [ebp + 8]
lea esi, [ebp - 0x48]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
call fcn.0a707b97
ret 8