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

Disassembly:
mov qword [rsp + 0x10], rbx
mov qword [rsp + 0x18], rsi
mov qword [rsp + 0x20], rdi
mov qword [rsp + 8], rcx
push rbp
push r12
push r13
push r14
push r15
lea rbp, [rsp - 0x90]
sub rsp, 0x190
mov rax, qword [0x1401b2190]
xor rax, rsp
mov qword [rbp + 0x80], rax
mov rsi, qword [rbp + 0xc0]
mov rdx, rsi
lea rcx, [rsp + 0x38]
call fcn.14006df30
nop
mov r14, qword [rsp + 0x48]
test r14, r14
je 0x140110a54
lea r13, [rsp + 0x38]
mov r15, qword [rsp + 0x38]
mov r12, qword [rsp + 0x50]
cmp r12, 0x10
cmovae r13, r15
lea rbx, [rsp + 0x38]
cmovae rbx, r15
add rbx, r14
lea rdi, [rsp + 0x38]
cmp r12, 0x10
cmovae rdi, r15
cmp rdi, rbx
je 0x140110344
sub r13, rdi
nop dword [rax + rax]
movsx ecx, byte [rdi]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_tolower]
mov byte [rdi + r13], al
inc rdi
cmp rdi, rbx
jne 0x140110320
mov r12, qword [rsp + 0x50]
mov r14, qword [rsp + 0x48]
mov r15, qword [rsp + 0x38]
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 3
lea r9, [0x140190968]
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x2c], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 7
lea r9, str.ryzen_3
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x2d], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 7
lea r9, str.ryzen_5
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x2e], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 7
lea r9, str.ryzen_7
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x2f], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 7
lea r9, str.ryzen_9
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x30], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 8
lea r9, str.qualcomm
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x31], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 5
lea r9, str.intel
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
mov rbx, rax
cmp rax, 0xffffffffffffffff
setne cl
mov byte [rsi + 0x32], cl
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 4
lea r9, str.xeon
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x34], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 2
lea r9, [0x1401909f4]
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x33], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 2
lea r9, [0x140190a08]
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x35], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 2
lea r9, [0x140190a10]
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x36], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 2
lea r9, [0x140190a1c]
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x37], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 4
lea r9, str.atom
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x38], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 7
lea r9, str.celeron
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x39], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 7
lea r9, str.pentium
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne al
mov byte [rsi + 0x3a], al
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 3
lea r9, [0x140190ccc]
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
mov rdi, rax
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 3
lea r9, [0x140190d14]
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
mov r13, rax
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 3
lea r9, [0x140190d18]
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rbx, 0xffffffffffffffff
je 0x1401106cf
cmp rdi, 0xffffffffffffffff
jne 0x1401106c9
cmp r13, rdi
jne 0x1401106c9
cmp rax, rdi
je 0x1401106cf
mov byte [rsi + 0x3e], 1
jmp 0x1401106dd
mov byte [rsi + 0x3e], 0
cmp rbx, 0xffffffffffffffff
je 0x1401107af
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 2
lea r9, [0x140190a40]
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
je 0x1401107af
mov byte [rsi + 0x3f], 1
lea rcx, [rsp + 0x38]
cmp r12, 0x10
cmovae rcx, r15
mov qword [rsp + 0x20], 2
lea r9, [0x140190a40]
xor r8d, r8d
mov rdx, r14
call fcn.14006ac20
mov r9d, 8
mov r8, rax
lea rdx, [rsp + 0x58]
lea rcx, [rsp + 0x38]
call fcn.140075c90
nop
lea rcx, [rsp + 0x58]
cmp qword [rsp + 0x70], 0x10
cmovae rcx, qword [rsp + 0x58]
mov qword [rsp + 0x20], 1
lea r9, [0x140190a50]
xor r8d, r8d
mov rdx, qword [rsp + 0x68]
call fcn.14006ac20
cmp rax, 0xffffffffffffffff
setne dil
mov byte [rsp + 0x31], dil
lea rcx, [rsp + 0x58]
call fcn.140069470
nop
movzx ecx, byte [rsi + 0x3f]
mov r12, qword [rsp + 0x50]
mov r14, qword [rsp + 0x48]
mov r15, qword [rsp + 0x38]
jmp 0x1401107bd
mov byte [rsi + 0x3f], 0
xor dil, dil
mov byte [rsp + 0x31], dil
xor cl, cl
mov byte [rsp + 0x30], cl
xor ebx, ebx
xor edx, edx
movzx eax, byte [rsi + 0x32]
test al, al
je 0x140110a13
test dil, dil
jne 0x140110924
xor r13d, r13d
test cl, cl
setne r13b
add r13, 4
lea rdi, [rsp + 0x38]
cmp r12, 0x10
cmovae rdi, r15
test r14, r14
je 0x140110835
mov r8d, 0x100
lea rcx, [rbp - 0x80]
call sub.VCRUNTIME140.dll_memset
mov byte [rbp - 0x53], 1
lea rcx, [r14 + rdi]
mov rdx, rdi
cmp rdi, rcx
jae 0x140110835
nop dword [rax + rax]
movzx eax, byte [rdx]
cmp byte [rbp + rax - 0x80], bl
jne 0x140110a8f
inc rdx
cmp rdx, rcx
jb 0x140110820
mov rdx, 0xffffffffffffffff
lea r9, [rdx + r13]
lea r11, [r14 - 1]
cmp r9, r11
cmovae r9, r11
lea r10, [rsp + 0x38]
cmp r12, 0x10
cmovae r10, r15
lea r8, [rdx + 1]
cmp r8, r9
ja 0x14011088b
movsx ecx, byte [r10 + r8]
lea ebx, [rbx + rbx*4]
add ebx, ebx
lea eax, [rcx - 0x30]
cmp al, 9
ja 0x140110877
add ebx, 0xffffffd0
add ebx, ecx
sub cl, 0x59
test cl, 0xdf
jne 0x140110883
mov byte [rsi + 0x3b], 1
inc r8
cmp r8, r9
jbe 0x140110861
xor eax, eax
cmp byte [rsp + 0x30], al
setne al
lea rcx, [rax + 5]
add rcx, rdx
cmp rcx, r11
cmovb r11, rcx
movzx ecx, byte [r10 + r11]
cmp cl, 0x79
je 0x1401108b1
cmp cl, 0x59
jne 0x1401108ba
mov byte [rsi + 0x3b], 1
movzx ecx, byte [r10 + r11]
lea eax, [rcx - 0x4d]
test al, 0xdf
je 0x1401108cf
movzx eax, byte [r10 + r11 - 1]
cmp al, 0x6d
je 0x1401108cf
cmp al, 0x4d
jne 0x1401108d8
mov byte [rsi + 0x3c], 1
movzx ecx, byte [r10 + r11]
sub cl, 0x55
test cl, 0xdf
je 0x1401108ec
movzx eax, byte [r10 + r11 - 1]
sub al, 0x55
test al, 0xdf
jne 0x1401108f0
mov byte [rsi + 0x3d], 1
mov eax, 0x66666667
imul ebx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + rdx*4]
add eax, eax
mov edx, ebx
sub edx, eax
movzx eax, byte [rsi + 0x32]
test al, al
je 0x140110a13
movzx edi, byte [rsp + 0x31]
test dil, dil
je 0x140110a13
lea rdi, [rsp + 0x38]
cmp r12, 0x10
cmovae rdi, r15
test r14, r14
je 0x140110976
xor edx, edx
mov r8d, 0x100
lea rcx, [rbp - 0x80]
call sub.VCRUNTIME140.dll_memset
mov byte [rbp - 0x53], 1
lea rdx, [r14 + rdi]
mov rcx, rdi
cmp rdi, rdx
jae 0x140110976
nop word [rax + rax]
movzx eax, byte [rcx]
cmp byte [rbp + rax - 0x80], 0
jne 0x140110a97
inc rcx
cmp rcx, rdx
jb 0x140110960
mov rcx, 0xffffffffffffffff
lea rax, [r14 - 1]
lea r9, [rcx + 4]
cmp r9, rax
cmovae r9, rax
lea r10, [rsp + 0x38]
cmp r12, 0x10
cmovae r10, r15
lea rdx, [rcx + 1]
cmp rdx, r9
ja 0x1401109c1
movsx r8d, byte [r10 + rdx]
lea eax, [r8 - 0x30]
cmp al, 9
ja 0x1401109b9
lea ebx, [rbx + rbx*4]
lea ebx, [rbx - 0x18]
lea ebx, [r8 + rbx*2]
inc rdx
cmp rdx, r9
jbe 0x1401109a2
mov eax, 0x51eb851f
imul ebx
sar edx, 5
mov ecx, edx
shr ecx, 0x1f
add edx, ecx
imul ecx, edx, 0x384
add ebx, ecx
mov eax, 0x66666667
imul ebx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + rdx*4]
add eax, eax
mov ecx, ebx
sub ecx, eax
cmp ecx, 5
setg al
mov byte [rsi + 0x3c], al
sete al
mov byte [rsi + 0x3d], al
test ecx, ecx
sete al
mov byte [rsi + 0x3b], al
xor edx, edx
cmp ecx, 5
cmovg edx, ecx
cmp byte [rsi + 0x3f], 0
je 0x140110a31
test ebx, ebx
jle 0x140110a31
nop dword [rax]
cmp ebx, 0x2710
jae 0x140110a31
lea ebx, [rbx + rbx*4]
add ebx, ebx
test ebx, ebx
jg 0x140110a20
mov dword [rsi + 0x44], ebx
mov dword [rsi + 0x48], edx
lea rdx, str._zlt_system_info__ParseCpuName
lea rcx, [rsp + 0x58]
call fcn.140068b90
nop
lea rcx, [rsp + 0x58]
call fcn.140069470
nop
lea rcx, [rsp + 0x38]
call fcn.140069470
nop
mov rcx, qword [rbp + 0x80]
xor rcx, rsp
call fcn.140126360
lea r11, [rsp + 0x190]
mov rbx, qword [r11 + 0x38]
mov rsi, qword [r11 + 0x40]
mov rdi, qword [r11 + 0x48]
mov rsp, r11
pop r15
pop r14
pop r13
pop r12
pop rbp
ret
sub rdx, rdi
jmp 0x14011083c
sub rcx, rdi
jmp 0x14011097d