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

Disassembly:
mov qword [rsp + 0x10], rbx
mov qword [rsp + 0x18], rbp
push rsi
push rdi
push r15
sub rsp, 0x20
mov r15, r9
mov rbp, r8
mov rsi, rdx
mov rbx, rcx
test r8, r8
jne 0x14002ee87
xor edx, edx
jmp 0x14002eef8
cmp byte [r8], 0
mov rcx, rbp
je 0x14002eed0
movzx eax, byte [rcx + 1]
test al, al
je 0x14002eed0
cmp byte [rcx], 0x5c
jne 0x14002eec9
sub al, 0x30
cmp al, 9
ja 0x14002eebc
movzx eax, byte [rcx + 2]
sub al, 0x30
cmp al, 9
ja 0x14002eebc
movzx eax, byte [rcx + 3]
sub al, 0x30
cmp al, 9
mov eax, 4
jbe 0x14002eec1
mov eax, 2
add rcx, rax
movzx eax, byte [rcx]
jmp 0x14002eecc
inc rcx
test al, al
jne 0x14002ee90
mov rax, 0xffffffffffffffff
nop word [rax + rax]
inc rax
cmp byte [rax + r8], 0
jne 0x14002eee0
xor edx, edx
cmp byte [rcx], 0x2e
sete dl
sub rax, rdx
mov rdx, rax
mov qword [rsp + 0x40], r14
lea rdi, [rbx + 0x3ed]
cmp rdx, 6
jb 0x14002f0c1
test r15, r15
je 0x14002f0c1
cmp byte [r9], 0
je 0x14002f0c1
lea r14, [rdx + r8]
mov r8d, 4
lea rcx, [r14 - 4]
lea rdx, [0x14014729c]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll__strnicmp]
test eax, eax
je 0x14002ef5f
mov r8d, 4
lea rdx, [0x1401472a4]
lea rcx, [r14 - 4]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll__strnicmp]
test eax, eax
jne 0x14002f0c1
test rsi, rsi
je 0x14002f046
movzx r8d, byte [rsi]
test r8b, r8b
je 0x14002f046
lea r9, [rbx + 2]
lea r10, [rbx + 1]
lea r11, [rbx + 4]
lea rsi, [rsi + 1]
cmp r8b, 0x20
ja 0x14002eff5
cmp r11, rdi
jae 0x14002f0be
movzx r8d, r8b
mov eax, 0x51eb851f
mul r8d
mov byte [rbx], 0x5c
mov eax, 0xcccccccd
shr edx, 5
add r11, 3
add dl, 0x30
add r10, 3
mov byte [rbx + 1], dl
add r9, 3
mul r8d
mov ecx, edx
shr ecx, 3
lea eax, [rcx + rcx*4]
add eax, eax
sub r8d, eax
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + rdx*4]
add eax, eax
sub ecx, eax
add cl, 0x30
mov byte [rbx + 2], cl
add rbx, 3
add r8b, 0x30
jmp 0x14002f024
cmp r8b, 0x2e
je 0x14002f00c
cmp r8b, 0x5c
je 0x14002f00c
cmp r10, rdi
jae 0x14002f0be
jmp 0x14002f024
cmp r9, rdi
jae 0x14002f0be
mov byte [rbx], 0x5c
inc r11
inc rbx
inc r10
inc r9
mov byte [rbx], r8b
inc r11
movzx r8d, byte [rsi]
inc rbx
inc r10
inc r9
test r8b, r8b
jne 0x14002ef81
mov byte [rbx], 0x2e
inc rbx
cmp byte [rbp], 0
je 0x14002f06a
mov rdx, rbp
sub rdx, rbx
lea rcx, [rbx + 1]
cmp rcx, rdi
jae 0x14002f0be
movzx eax, byte [rdx + rbx]
mov byte [rbx], al
mov rbx, rcx
cmp byte [rdx + rcx], 0
jne 0x14002f052
mov rcx, rbp
call fcn.14002f0f0
test eax, eax
jne 0x14002f085
lea rax, [rbx + 1]
cmp rax, rdi
jae 0x14002f0be
mov byte [rbx], 0x2e
mov rbx, rax
cmp byte [r15], 0
je 0x14002f0a9
mov rdx, r15
sub rdx, rbx
lea rcx, [rbx + 1]
cmp rcx, rdi
jae 0x14002f0be
movzx eax, byte [rdx + rbx]
mov byte [rbx], al
mov rbx, rcx
cmp byte [rdx + rcx], 0
jne 0x14002f091
mov rcx, r15
call fcn.14002f0f0
test eax, eax
jne 0x14002f0e4
lea rax, [rbx + 1]
cmp rax, rdi
jb 0x14002f0de
mov byte [rbx], 0
mov eax, 0xfffefffc
mov r14, qword [rsp + 0x40]
mov rbx, qword [rsp + 0x48]
mov rbp, qword [rsp + 0x50]
add rsp, 0x20
pop r15
pop rdi
pop rsi
ret
mov byte [rbx], 0x2e
mov rbx, rax
mov byte [rbx], 0
xor eax, eax
jmp 0x14002f0c6