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

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x228
xor esi, esi
mov r10, rcx
mov rbx, rdx
test rcx, rcx
je 0x140007584
mov rsi, qword [rcx]
cmp rsi, r8
jle 0x1400075b3
mov al, byte [r10 + r8 + 0x10]
lea edx, [rax - 0x2b]
and dl, 0xfd
jne 0x1400075b3
movsd xmm0, qword [0x1400a87a8]
cmp al, 0x2d
je 0x1400075aa
movsd xmm0, qword [0x1400a87a0]
lea r9, [r8 + 1]
mov r13b, 1
jmp 0x1400075c1
movsd xmm0, qword [0x1400a87a0]
mov r9, r8
xor r13d, r13d
lea rdx, [r9 + 2]
cmp rdx, rsi
jge 0x140007659
mov al, byte [r10 + r9 + 0x10]
and eax, 0xffffffdf
cmp al, 0x4e
je 0x1400075e3
cmp al, 0x49
jne 0x140007659
jmp 0x140007667
mov al, byte [r10 + r9 + 0x11]
xor r12d, r12d
and eax, 0xffffffdf
cmp al, 0x41
jne 0x140007a62
mov al, byte [r10 + rdx + 0x10]
and eax, 0xffffffdf
cmp al, 0x4e
jne 0x140007a62
add r9, 3
cmp r9, rsi
jge 0x140007639
mov al, byte [r10 + r9 + 0x10]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x140007a62
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x140007a4e
cmp al, 0x5f
je 0x140007a4e
movsd xmm0, qword [0x1400a87b0]
xorps xmm1, xmm1
mulsd xmm0, xmm0
cvtsd2ss xmm0, xmm0
mulss xmm0, xmm1
cvtss2sd xmm0, xmm0
jmp 0x14000793a
or rax, 0xffffffffffffffff
cmp r9, rsi
jl 0x1400076df
jmp 0x1400076f5
mov al, byte [r10 + r9 + 0x11]
xor r12d, r12d
and eax, 0xffffffdf
cmp al, 0x4e
jne 0x140007a62
mov al, byte [r10 + rdx + 0x10]
and eax, 0xffffffdf
cmp al, 0x46
jne 0x140007a62
add r9, 3
cmp r9, rsi
jge 0x1400076bd
mov al, byte [r10 + r9 + 0x10]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x140007a62
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x140007a4e
cmp al, 0x5f
je 0x140007a4e
movsd xmm1, qword [0x1400a87a0]
xorps xmm2, xmm2
divsd xmm1, xmm2
mulsd xmm1, xmm0
movsd qword [rbx], xmm1
sub r9, r8
mov r12, r9
jmp 0x140007a62
movzx edx, byte [r10 + r9 + 0x10]
or rax, 0xffffffffffffffff
lea ecx, [rdx - 0x30]
cmp cl, 9
ja 0x1400076f5
lea rax, [rdx - 0x30]
xor ebp, ebp
xor edx, edx
cmp r9, rsi
jge 0x1400077d0
movzx ecx, byte [r10 + r9 + 0x10]
lea r11d, [rcx - 0x30]
cmp r11b, 9
ja 0x140007730
imul rdx, rdx, 0xa
inc rbp
lea rdx, [rdx + rcx - 0x30]
inc r9
cmp r9, rsi
je 0x1400076f9
cmp byte [r10 + r9 + 0x10], 0x5f
je 0x14000771e
jmp 0x1400076f9
cmp cl, 0x2e
jne 0x1400077d0
inc r9
test rbp, rbp
jne 0x14000776c
xor ecx, ecx
mov r14, rcx
cmp r9, rsi
jge 0x14000776f
cmp byte [r10 + r9 + 0x10], 0x30
jne 0x140007a53
inc rcx
inc r9
cmp r9, rsi
je 0x140007743
cmp byte [r10 + r9 + 0x10], 0x5f
je 0x14000775a
jmp 0x140007743
xor r14d, r14d
cmp rax, 0xffffffffffffffff
jne 0x140007792
cmp r9, rsi
jge 0x140007792
movzx ecx, byte [r10 + r9 + 0x10]
or rax, 0xffffffffffffffff
lea r11d, [rcx - 0x30]
cmp r11b, 9
ja 0x140007792
lea rax, [rcx - 0x30]
xor r11d, r11d
lea rdi, [r14 + r11]
mov rcx, r11
cmp r9, rsi
jge 0x1400077d4
movzx r12d, byte [r10 + r9 + 0x10]
lea r15d, [r12 - 0x30]
cmp r15b, 9
ja 0x1400077d4
imul rdx, rdx, 0xa
inc r11
lea rdx, [rdx + r12 - 0x30]
inc r9
cmp r9, rsi
je 0x140007795
cmp byte [r10 + r9 + 0x10], 0x5f
je 0x1400077be
jmp 0x140007795
xor edi, edi
xor ecx, ecx
mov r12, rbp
add r12, rcx
jne 0x1400077f7
cmp r9, r8
je 0x140007a62
lea r11, [r8 + 1]
cmp r11, r9
jne 0x1400077f7
test r13b, r13b
jne 0x140007a62
lea r11, [r9 + 1]
cmp r11, rsi
jge 0x140007885
mov r13b, byte [r10 + r9 + 0x10]
and r13d, 0xffffffdf
cmp r13b, 0x45
jne 0x140007885
mov r13b, byte [r10 + r11 + 0x10]
cmp r13b, 0x2b
je 0x14000782a
cmp r13b, 0x2d
jne 0x140007836
or r13, 0xffffffffffffffff
jmp 0x140007830
mov r13d, 1
add r9, 2
jmp 0x14000783f
mov r9, r11
mov r13d, 1
mov r15b, byte [r10 + r9 + 0x10]
lea r11d, [r15 - 0x30]
cmp r11b, 9
ja 0x140007a4e
xor r11d, r11d
cmp r9, rsi
jge 0x14000788e
movzx r14d, byte [r10 + r9 + 0x10]
lea r15d, [r14 - 0x30]
cmp r15b, 9
ja 0x14000788e
imul r11, r11, 0xa
lea r11, [r11 + r14 - 0x30]
inc r9
cmp r9, rsi
je 0x140007855
cmp byte [r10 + r9 + 0x10], 0x5f
je 0x140007873
jmp 0x140007855
mov r13d, 1
xor r11d, r11d
imul r11, r13
sub r11, rdi
mov rdi, r11
neg rdi
cmovs rdi, r11
cmp rdi, 0x3e7
jg 0x1400078b0
cmp r12, 0xf
jg 0x1400078cd
jmp 0x1400078e1
xorps xmm1, xmm1
test r11, r11
js 0x1400078c7
movsd xmm1, qword [0x1400a87a0]
xorps xmm2, xmm2
divsd xmm1, xmm2
mulsd xmm0, xmm1
jmp 0x14000793a
cmp r12, 0x10
jne 0x140007990
cmp rax, 9
je 0x140007990
cmp rdi, 0x16
jle 0x140007900
mov eax, 0xf
sub rax, rbp
sub rax, rcx
lea rcx, [rax + 0x16]
cmp rcx, rdi
jge 0x140007943
jmp 0x140007990
test rdx, rdx
js 0x14000790c
cvtsi2sd xmm1, rdx
jmp 0x140007921
mov rax, rdx
and edx, 1
shr rax, 1
or rax, rdx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
lea rax, [0x1400a8200]
mulsd xmm0, xmm1
movsd xmm1, qword [rax + rdi*8]
test r11, r11
jns 0x1400078c7
divsd xmm0, xmm1
movsd qword [rbx], xmm0
jmp 0x1400076d4
test r11, r11
js 0x140007990
sub r9, r8
mov r12, r9
test rdx, rdx
js 0x14000795a
cvtsi2sd xmm1, rdx
jmp 0x14000796f
mov rcx, rdx
and edx, 1
shr rcx, 1
or rcx, rdx
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
lea rdx, [0x1400a8200]
mulsd xmm1, xmm0
sub rdi, rax
mulsd xmm1, qword [rdx + rax*8]
mulsd xmm1, qword [rdx + rdi*8]
movsd qword [rbx], xmm1
jmp 0x140007a62
lea r13, [rsp + 0x2c]
mov edx, 0x1f4
sub r9, r8
mov rcx, r13
mov r12, r9
call fcn.140003464
xor ecx, ecx
cmp rsi, r8
jle 0x1400079d6
cmp byte [r10 + r8 + 0x10], 0x2e
jne 0x1400079ba
inc r8
xor ecx, ecx
cmp r8, rsi
jge 0x1400079d6
mov al, byte [r10 + r8 + 0x10]
lea edx, [rax - 0x2b]
and dl, 0xfd
je 0x140007a24
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x140007a24
mov rax, rdi
mov r8d, 0xa
sar r11, 0x3f
mov byte [rsp + rcx + 0x2c], 0x45
cqo
and r11d, 2
idiv r8
add r11d, 0x2b
mov byte [rsp + rcx + 0x2d], r11b
add edx, 0x30
mov byte [rsp + rcx + 0x30], dl
cqo
idiv r8
add edx, 0x30
add eax, 0x30
mov byte [rsp + rcx + 0x2f], dl
xor edx, edx
mov byte [rsp + rcx + 0x2e], al
mov rcx, r13
call fcn.14009bc90
movsd qword [rbx], xmm0
jmp 0x140007a62
cmp rcx, 0x1ed
jg 0x140007a34
mov byte [rsp + rcx + 0x2c], al
inc rcx
inc r8
cmp r8, rsi
je 0x1400079bc
mov al, byte [r10 + r8 + 0x10]
cmp al, 0x2e
je 0x140007a34
cmp al, 0x5f
je 0x140007a34
jmp 0x1400079bc
xor r12d, r12d
jmp 0x140007a62
cmp rax, 0xffffffffffffffff
jne 0x140007792
jmp 0x14000777a
mov rax, r12
add rsp, 0x228
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret