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

Disassembly:
mov qword [rsp + 0x18], rbx
push rsi
push rdi
push r14
sub rsp, 0x50
mov rax, qword [0x180e681c0]
xor rax, rsp
mov qword [rsp + 0x48], rax
xorps xmm0, xmm0
xor eax, eax
movups xmmword [rsp + 0x20], xmm0
mov dword [rsp + 0x40], eax
mov r14, rdx
movups xmmword [rsp + 0x30], xmm0
mov r8, rcx
mov rsi, 0xffffffffffffffff
nop dword [rax]
movzx eax, byte [r8]
cmp al, 0x20
je 0x18020fd3c
cmp al, 9
jne 0x18020fd41
inc r8
jmp 0x18020fd30
xor r10d, r10d
mov rbx, r8
mov edi, r10d
mov r9d, 0xfff
test r9d, r9d
je 0x18020fd8f
movsx edx, byte [rbx]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x18020fd8f
lea edi, [rdi + rdi*4]
mov eax, 0x66666667
lea edi, [rdi - 0x18]
inc rbx
lea edi, [rdx + rdi*2]
imul r9d
mov r9d, edx
sar r9d, 2
mov eax, r9d
shr eax, 0x1f
add r9d, eax
lea eax, [rdi + rdi*4]
add eax, eax
cmp eax, 0xfff
jle 0x18020fd50
cmp rbx, r8
je 0x180210010
lea eax, [rdi - 0x62f]
cmp eax, 0x9d0
ja 0x180210010
movzx eax, byte [rbx]
inc rbx
mov dword [rsp + 0x34], edi
cmp al, 0x2d
jne 0x180210010
mov r11d, r10d
mov r8, rbx
mov r9d, 0xc
test r9d, r9d
je 0x18020fe09
movsx edx, byte [r8]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x18020fe09
lea r11d, [r11 + r11*4]
mov eax, 0x66666667
lea r11d, [r11 - 0x18]
inc r8
lea r11d, [rdx + r11*2]
imul r9d
mov r9d, edx
sar r9d, 2
mov eax, r9d
shr eax, 0x1f
add r9d, eax
lea eax, [r11 + r11*4]
add eax, eax
cmp eax, 0xc
jle 0x18020fdc7
cmp r8, rbx
je 0x18021000d
lea eax, [r11 - 1]
cmp eax, 0xb
ja 0x18021000d
cmp byte [r8], 0x2d
lea rbx, [r8 + 1]
mov dword [rsp + 0x30], r11d
jne 0x180210010
mov ecx, r10d
mov r8, rbx
mov r9d, 0x1f
nop
test r9d, r9d
je 0x18020fe7e
movsx edx, byte [r8]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x18020fe7e
lea ecx, [rcx + rcx*4]
mov eax, 0x66666667
lea ecx, [rcx - 0x18]
inc r8
lea ecx, [rdx + rcx*2]
imul r9d
mov r9d, edx
sar r9d, 2
mov eax, r9d
shr eax, 0x1f
add r9d, eax
lea eax, [rcx + rcx*4]
add eax, eax
cmp eax, 0x1f
jle 0x18020fe40
cmp r8, rbx
je 0x18021000d
lea eax, [rcx - 1]
cmp eax, 0x1e
ja 0x18021000d
cmp byte [r8], 0x54
lea rbx, [r8 + 1]
mov dword [rsp + 0x2c], ecx
jne 0x180210010
mov ecx, r10d
mov r8, rbx
mov r9d, 0x17
test r9d, r9d
je 0x18020feef
movsx edx, byte [r8]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x18020feef
lea ecx, [rcx + rcx*4]
mov eax, 0x66666667
lea ecx, [rcx - 0x18]
inc r8
lea ecx, [rdx + rcx*2]
imul r9d
mov r9d, edx
sar r9d, 2
mov eax, r9d
shr eax, 0x1f
add r9d, eax
lea eax, [rcx + rcx*4]
add eax, eax
cmp eax, 0x17
jle 0x18020feb1
cmp r8, rbx
je 0x18021000d
cmp ecx, 0x17
ja 0x18021000d
cmp byte [r8], 0x3a
lea rbx, [r8 + 1]
mov dword [rsp + 0x28], ecx
jne 0x180210010
mov ecx, r10d
mov r8, rbx
mov r9d, 0x3b
nop
test r9d, r9d
je 0x18020ff5e
movsx edx, byte [r8]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x18020ff5e
lea ecx, [rcx + rcx*4]
mov eax, 0x66666667
lea ecx, [rcx - 0x18]
inc r8
lea ecx, [rdx + rcx*2]
imul r9d
mov r9d, edx
sar r9d, 2
mov eax, r9d
shr eax, 0x1f
add r9d, eax
lea eax, [rcx + rcx*4]
add eax, eax
cmp eax, 0x3b
jle 0x18020ff20
cmp r8, rbx
je 0x18021000d
cmp ecx, 0x3b
ja 0x18021000d
cmp byte [r8], 0x3a
lea rbx, [r8 + 1]
mov dword [rsp + 0x24], ecx
jne 0x180210010
mov r8, rbx
mov r9d, 0x3c
nop dword [rax + rax]
test r9d, r9d
je 0x18020ffd2
movsx edx, byte [r8]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x18020ffd2
lea r10d, [r10 + r10*4]
mov eax, 0x66666667
lea r10d, [r10 - 0x18]
inc r8
lea r10d, [rdx + r10*2]
imul r9d
mov r9d, edx
sar r9d, 2
mov eax, r9d
shr eax, 0x1f
add r9d, eax
lea eax, [r10 + r10*4]
add eax, eax
cmp eax, 0x3c
jle 0x18020ff90
cmp r8, rbx
je 0x18021000d
cmp r10d, 0x3c
ja 0x18021000d
cmp byte [r8], 0x5a
lea rbx, [r8 + 1]
mov dword [rsp + 0x20], r10d
jne 0x180210010
lea eax, [rdi - 0x76c]
mov dword [rsp + 0x34], eax
lea rcx, [rsp + 0x20]
lea eax, [r11 - 1]
mov dword [rsp + 0x30], eax
call fcn.180268180
mov rsi, rax
jmp 0x180210010
mov rbx, r8
mov rax, rsi
test r14, r14
je 0x18021001b
mov qword [r14], rbx
mov rcx, qword [rsp + 0x48]
xor rcx, rsp
call fcn.18024b290
mov rbx, qword [rsp + 0x80]
add rsp, 0x50
pop r14
pop rdi
pop rsi
ret