Function at 0x6d103b64
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 0x6d103ba3
mov al, byte [rcx]
lea ecx, [rax - 0x2b]
and cl, 0xfd
jne 0x6d103ba3
cmp al, 0x2d
mov r11b, 1
movsd xmm2, qword [0x6d136cb0]
jne 0x6d103bb2
movsd xmm2, qword [0x6d136cb8]
jmp 0x6d103bb2
xor r11d, r11d
movsd xmm2, qword [0x6d136cb0]
xor ebx, ebx
jmp 0x6d103bb7
mov ebx, 1
lea rax, [rbx + 2]
cmp rax, rdx
jge 0x6d103c4b
mov al, byte [rsi + rbx]
mov rcx, rbx
and eax, 0xffffffdf
cmp al, 0x4e
je 0x6d103bdb
cmp al, 0x49
jne 0x6d103caf
jmp 0x6d103c56
mov al, byte [rsi + rbx + 1]
and eax, 0xffffffdf
cmp al, 0x41
jne 0x6d10401e
mov al, byte [rsi + rbx + 2]
and eax, 0xffffffdf
cmp al, 0x4e
jne 0x6d10401e
add rbx, 3
cmp rbx, rdx
jge 0x6d103c2b
mov al, byte [rsi + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x6d10401e
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x6d10401e
cmp al, 0x5f
je 0x6d10401e
movsd xmm0, qword [0x6d136cc0]
xorps xmm1, xmm1
mulsd xmm0, xmm0
cvtsd2ss xmm0, xmm0
mulss xmm0, xmm1
cvtss2sd xmm0, xmm0
jmp 0x6d103f00
or r8, 0xffffffffffffffff
cmp rbx, rdx
jge 0x6d103cc6
jmp 0x6d103caf
mov al, byte [rsi + rbx + 1]
and eax, 0xffffffdf
cmp al, 0x4e
jne 0x6d10401e
mov al, byte [rsi + rbx + 2]
and eax, 0xffffffdf
cmp al, 0x46
jne 0x6d10401e
add rbx, 3
cmp rbx, rdx
jge 0x6d103e74
mov al, byte [rsi + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x6d10401e
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x6d10401e
cmp al, 0x5f
je 0x6d10401e
jmp 0x6d103e74
mov al, byte [rsi + rbx]
or r8, 0xffffffffffffffff
lea ecx, [rax - 0x30]
cmp cl, 9
ja 0x6d103cc6
movzx r8d, al
sub r8, 0x30
xor r9d, r9d
xor r10d, r10d
cmp rbx, rdx
jge 0x6d103d89
movzx eax, byte [rsi + rbx]
lea ecx, [rax - 0x30]
cmp cl, 9
ja 0x6d103cfd
imul r9, r9, 0xa
inc r10
lea r9, [r9 + rax - 0x30]
inc rbx
cmp rbx, rdx
je 0x6d103ccc
cmp byte [rsi + rbx], 0x5f
je 0x6d103ced
jmp 0x6d103ccc
cmp al, 0x2e
jne 0x6d103d89
inc rbx
xor eax, eax
test r10, r10
jne 0x6d103d31
cmp rbx, rdx
jge 0x6d103d54
cmp byte [rsi + rbx], 0x30
jne 0x6d104022
inc rax
inc rbx
cmp rbx, rdx
je 0x6d103d0f
cmp byte [rsi + rbx], 0x5f
je 0x6d103d21
jmp 0x6d103d0f
cmp r8, 0xffffffffffffffff
jne 0x6d103d54
cmp rdx, rbx
jle 0x6d103d54
mov cl, byte [rsi + rbx]
or r8, 0xffffffffffffffff
lea edi, [rcx - 0x30]
cmp dil, 9
ja 0x6d103d54
movzx r8d, cl
sub r8, 0x30
xor ecx, ecx
lea r12, [rcx + rax]
cmp rbx, rdx
jge 0x6d103d8e
movzx edi, byte [rsi + rbx]
lea r13d, [rdi - 0x30]
cmp r13b, 9
ja 0x6d103d8e
imul r9, r9, 0xa
inc rcx
lea r9, [r9 + rdi - 0x30]
inc rbx
cmp rbx, rdx
je 0x6d103d56
cmp byte [rsi + rbx], 0x5f
je 0x6d103d79
jmp 0x6d103d56
xor r12d, r12d
xor ecx, ecx
mov r13, r10
add r13, rcx
jne 0x6d103dae
test rbx, rbx
je 0x6d104031
cmp rbx, 1
jne 0x6d103dae
test r11b, r11b
jne 0x6d10401e
lea rax, [rbx + 1]
cmp rax, rdx
jge 0x6d103e2b
mov r11b, byte [rsi + rbx]
and r11d, 0xffffffdf
cmp r11b, 0x45
jne 0x6d103e2b
mov r11b, byte [rsi + rax]
cmp r11b, 0x2b
je 0x6d103ddb
cmp r11b, 0x2d
jne 0x6d103de7
or r11, 0xffffffffffffffff
jmp 0x6d103de1
mov r11d, 1
add rbx, 2
jmp 0x6d103df0
mov rbx, rax
mov r11d, 1
mov al, byte [rsi + rbx]
sub eax, 0x30
cmp al, 9
ja 0x6d10401e
xor edi, edi
cmp rbx, rdx
jge 0x6d103e33
movzx r14d, byte [rsi + rbx]
lea eax, [r14 - 0x30]
cmp al, 9
ja 0x6d103e33
imul rax, rdi, 0xa
lea rdi, [rax + r14 - 0x30]
inc rbx
cmp rbx, rdx
je 0x6d103e00
cmp byte [rsi + rbx], 0x5f
je 0x6d103e1b
jmp 0x6d103e00
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 0x6d103e5b
cmp r13, 0xf
jg 0x6d103e91
jmp 0x6d103ea5
test r9, r9
je 0x6d103e67
test rdi, rdi
jns 0x6d103e74
jmp 0x6d103e85
mov qword [rbp], 0
jmp 0x6d104031
movsd xmm1, qword [0x6d136cb0]
xorps xmm0, xmm0
divsd xmm1, xmm0
jmp 0x6d103e88
xorps xmm1, xmm1
mulsd xmm1, xmm2
jmp 0x6d103f50
cmp r13, 0x10
jne 0x6d103f5a
cmp r8, 8
jg 0x6d103f5a
cmp r12, 0x16
jle 0x6d103ec4
mov eax, 0xf
sub rax, r10
sub rax, rcx
lea rdx, [rax + 0x16]
cmp rdx, r12
jge 0x6d103f10
jmp 0x6d103f5a
test r9, r9
js 0x6d103ed0
cvtsi2sd xmm0, r9
jmp 0x6d103ee6
mov rcx, r9
and r9d, 1
shr rcx, 1
or rcx, r9
cvtsi2sd xmm0, rcx
addsd xmm0, xmm0
lea rax, [0x6d135f80]
test rdi, rdi
mulsd xmm0, xmm2
movsd xmm1, qword [rax + r12*8]
js 0x6d103f0a
mulsd xmm0, xmm1
movsd qword [rbp], xmm0
jmp 0x6d104031
divsd xmm0, xmm1
jmp 0x6d103f00
test rdi, rdi
js 0x6d103f5a
test r9, r9
js 0x6d103f21
cvtsi2sd xmm1, r9
jmp 0x6d103f37
mov rcx, r9
and r9d, 1
shr rcx, 1
or rcx, r9
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
lea rcx, [0x6d135f80]
sub r12, rax
mulsd xmm1, xmm2
mulsd xmm1, qword [rcx + rax*8]
mulsd xmm1, qword [rcx + r12*8]
movsd qword [rbp], xmm1
jmp 0x6d104031
lea r13, [rsp + 0x2c]
mov edx, 0x1f4
mov rcx, r13
call fcn.6d1232ff
xor ecx, ecx
test rbx, rbx
je 0x6d103f97
xor eax, eax
cmp byte [rsi], 0x2e
sete al
cmp rbx, rax
jle 0x6d103f97
mov dl, byte [rsi + rax]
lea r8d, [rdx - 0x2b]
and r8b, 0xfd
je 0x6d103ff0
lea r8d, [rdx - 0x30]
cmp r8b, 9
jbe 0x6d103ff0
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.6d129300
jmp 0x6d103f00
cmp rcx, 0x1ed
jg 0x6d104000
mov byte [rsp + rcx + 0x2c], dl
inc rcx
inc rax
cmp rbx, rax
jle 0x6d103f7b
mov dl, byte [rsi + rax]
cmp dl, 0x2e
je 0x6d104000
cmp dl, 0x5f
je 0x6d104000
jmp 0x6d103f7b
xor ebx, ebx
jmp 0x6d104031
cmp r8, 0xffffffffffffffff
jne 0x6d103d54
jmp 0x6d103d3c
mov rax, rbx
add rsp, 0x220
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
ret