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

Disassembly:
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x220
test rdx, rdx
mov rsi, rcx
mov rbp, r8
jle 0x6cfc3a76
mov al, byte [rcx]
lea ecx, [rax - 0x2b]
and cl, 0xfd
jne 0x6cfc3a76
cmp al, 0x2d
mov r11b, 1
movsd xmm2, qword [0x6d00d9b0]
jne 0x6cfc3a85
movsd xmm2, qword [0x6d00d9b8]
jmp 0x6cfc3a85
xor r11d, r11d
movsd xmm2, qword [0x6d00d9b0]
xor ebx, ebx
jmp 0x6cfc3a8a
mov ebx, 1
lea rax, [rbx + 2]
cmp rax, rdx
jge 0x6cfc3b1e
mov al, byte [rsi + rbx]
mov rcx, rbx
and eax, 0xffffffdf
cmp al, 0x4e
je 0x6cfc3aae
cmp al, 0x49
jne 0x6cfc3b82
jmp 0x6cfc3b29
mov al, byte [rsi + rbx + 1]
and eax, 0xffffffdf
cmp al, 0x41
jne 0x6cfc3ef1
mov al, byte [rsi + rbx + 2]
and eax, 0xffffffdf
cmp al, 0x4e
jne 0x6cfc3ef1
add rbx, 3
cmp rbx, rdx
jge 0x6cfc3afe
mov al, byte [rsi + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x6cfc3ef1
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x6cfc3ef1
cmp al, 0x5f
je 0x6cfc3ef1
movsd xmm0, qword [0x6d00d9c0]
xorps xmm1, xmm1
mulsd xmm0, xmm0
cvtsd2ss xmm0, xmm0
mulss xmm0, xmm1
cvtss2sd xmm0, xmm0
jmp 0x6cfc3dd3
or r8, 0xffffffffffffffff
cmp rbx, rdx
jge 0x6cfc3b99
jmp 0x6cfc3b82
mov al, byte [rsi + rbx + 1]
and eax, 0xffffffdf
cmp al, 0x4e
jne 0x6cfc3ef1
mov al, byte [rsi + rbx + 2]
and eax, 0xffffffdf
cmp al, 0x46
jne 0x6cfc3ef1
add rbx, 3
cmp rbx, rdx
jge 0x6cfc3d47
mov al, byte [rsi + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x6cfc3ef1
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x6cfc3ef1
cmp al, 0x5f
je 0x6cfc3ef1
jmp 0x6cfc3d47
mov al, byte [rsi + rbx]
or r8, 0xffffffffffffffff
lea ecx, [rax - 0x30]
cmp cl, 9
ja 0x6cfc3b99
movzx r8d, al
sub r8, 0x30
xor r9d, r9d
xor r10d, r10d
cmp rbx, rdx
jge 0x6cfc3c5c
movzx eax, byte [rsi + rbx]
lea ecx, [rax - 0x30]
cmp cl, 9
ja 0x6cfc3bd0
imul r9, r9, 0xa
inc r10
lea r9, [r9 + rax - 0x30]
inc rbx
cmp rbx, rdx
je 0x6cfc3b9f
cmp byte [rsi + rbx], 0x5f
je 0x6cfc3bc0
jmp 0x6cfc3b9f
cmp al, 0x2e
jne 0x6cfc3c5c
inc rbx
xor eax, eax
test r10, r10
jne 0x6cfc3c04
cmp rbx, rdx
jge 0x6cfc3c27
cmp byte [rsi + rbx], 0x30
jne 0x6cfc3ef5
inc rax
inc rbx
cmp rbx, rdx
je 0x6cfc3be2
cmp byte [rsi + rbx], 0x5f
je 0x6cfc3bf4
jmp 0x6cfc3be2
cmp r8, 0xffffffffffffffff
jne 0x6cfc3c27
cmp rdx, rbx
jle 0x6cfc3c27
mov cl, byte [rsi + rbx]
or r8, 0xffffffffffffffff
lea edi, [rcx - 0x30]
cmp dil, 9
ja 0x6cfc3c27
movzx r8d, cl
sub r8, 0x30
xor ecx, ecx
lea r12, [rcx + rax]
cmp rbx, rdx
jge 0x6cfc3c61
movzx edi, byte [rsi + rbx]
lea r13d, [rdi - 0x30]
cmp r13b, 9
ja 0x6cfc3c61
imul r9, r9, 0xa
inc rcx
lea r9, [r9 + rdi - 0x30]
inc rbx
cmp rbx, rdx
je 0x6cfc3c29
cmp byte [rsi + rbx], 0x5f
je 0x6cfc3c4c
jmp 0x6cfc3c29
xor r12d, r12d
xor ecx, ecx
mov r13, r10
add r13, rcx
jne 0x6cfc3c81
test rbx, rbx
je 0x6cfc3f04
cmp rbx, 1
jne 0x6cfc3c81
test r11b, r11b
jne 0x6cfc3ef1
lea rax, [rbx + 1]
cmp rax, rdx
jge 0x6cfc3cfe
mov r11b, byte [rsi + rbx]
and r11d, 0xffffffdf
cmp r11b, 0x45
jne 0x6cfc3cfe
mov r11b, byte [rsi + rax]
cmp r11b, 0x2b
je 0x6cfc3cae
cmp r11b, 0x2d
jne 0x6cfc3cba
or r11, 0xffffffffffffffff
jmp 0x6cfc3cb4
mov r11d, 1
add rbx, 2
jmp 0x6cfc3cc3
mov rbx, rax
mov r11d, 1
mov al, byte [rsi + rbx]
sub eax, 0x30
cmp al, 9
ja 0x6cfc3ef1
xor edi, edi
cmp rbx, rdx
jge 0x6cfc3d06
movzx r14d, byte [rsi + rbx]
lea eax, [r14 - 0x30]
cmp al, 9
ja 0x6cfc3d06
imul rax, rdi, 0xa
lea rdi, [rax + r14 - 0x30]
inc rbx
cmp rbx, rdx
je 0x6cfc3cd3
cmp byte [rsi + rbx], 0x5f
je 0x6cfc3cee
jmp 0x6cfc3cd3
mov r11d, 1
xor edi, edi
imul rdi, r11
sub rdi, r12
mov rax, rdi
sar rax, 0x3f
mov r12, rax
xor r12, rdi
sub r12, rax
cmp r12, 0x3e7
jg 0x6cfc3d2e
cmp r13, 0xf
jg 0x6cfc3d64
jmp 0x6cfc3d78
test r9, r9
je 0x6cfc3d3a
test rdi, rdi
jns 0x6cfc3d47
jmp 0x6cfc3d58
mov qword [rbp], 0
jmp 0x6cfc3f04
movsd xmm1, qword [0x6d00d9b0]
xorps xmm0, xmm0
divsd xmm1, xmm0
jmp 0x6cfc3d5b
xorps xmm1, xmm1
mulsd xmm1, xmm2
jmp 0x6cfc3e23
cmp r13, 0x10
jne 0x6cfc3e2d
cmp r8, 8
jg 0x6cfc3e2d
cmp r12, 0x16
jle 0x6cfc3d97
mov eax, 0xf
sub rax, r10
sub rax, rcx
lea rdx, [rax + 0x16]
cmp rdx, r12
jge 0x6cfc3de3
jmp 0x6cfc3e2d
test r9, r9
js 0x6cfc3da3
cvtsi2sd xmm0, r9
jmp 0x6cfc3db9
mov rcx, r9
and r9d, 1
shr rcx, 1
or rcx, r9
cvtsi2sd xmm0, rcx
addsd xmm0, xmm0
lea rax, [0x6d00d080]
test rdi, rdi
mulsd xmm0, xmm2
movsd xmm1, qword [rax + r12*8]
js 0x6cfc3ddd
mulsd xmm0, xmm1
movsd qword [rbp], xmm0
jmp 0x6cfc3f04
divsd xmm0, xmm1
jmp 0x6cfc3dd3
test rdi, rdi
js 0x6cfc3e2d
test r9, r9
js 0x6cfc3df4
cvtsi2sd xmm1, r9
jmp 0x6cfc3e0a
mov rcx, r9
and r9d, 1
shr rcx, 1
or rcx, r9
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
lea rcx, [0x6d00d080]
sub r12, rax
mulsd xmm1, xmm2
mulsd xmm1, qword [rcx + rax*8]
mulsd xmm1, qword [rcx + r12*8]
movsd qword [rbp], xmm1
jmp 0x6cfc3f04
lea r13, [rsp + 0x2c]
mov edx, 0x1f4
mov rcx, r13
call fcn.6cff9544
xor ecx, ecx
test rbx, rbx
je 0x6cfc3e6a
xor eax, eax
cmp byte [rsi], 0x2e
sete al
cmp rbx, rax
jle 0x6cfc3e6a
mov dl, byte [rsi + rax]
lea r8d, [rdx - 0x2b]
and r8b, 0xfd
je 0x6cfc3ec3
lea r8d, [rdx - 0x30]
cmp r8b, 9
jbe 0x6cfc3ec3
mov rax, r12
mov r8d, 0xa
sar rdi, 0x3f
mov byte [rsp + rcx + 0x2c], 0x45
cqo
and edi, 2
idiv r8
add edx, 0x30
add edi, 0x2b
mov byte [rsp + rcx + 0x30], dl
cqo
idiv r8
mov rax, r12
add edx, 0x30
mov r8d, 0x64
mov byte [rsp + rcx + 0x2f], dl
cqo
idiv r8
add eax, 0x30
mov byte [rsp + rcx + 0x2d], dil
xor edx, edx
mov byte [rsp + rcx + 0x2e], al
mov rcx, r13
call fcn.6d000740
jmp 0x6cfc3dd3
cmp rcx, 0x1ed
jg 0x6cfc3ed3
mov byte [rsp + rcx + 0x2c], dl
inc rcx
inc rax
cmp rbx, rax
jle 0x6cfc3e4e
mov dl, byte [rsi + rax]
cmp dl, 0x2e
je 0x6cfc3ed3
cmp dl, 0x5f
je 0x6cfc3ed3
jmp 0x6cfc3e4e
xor ebx, ebx
jmp 0x6cfc3f04
cmp r8, 0xffffffffffffffff
jne 0x6cfc3c27
jmp 0x6cfc3c0f
mov rax, rbx
add rsp, 0x220
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
ret