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

Disassembly:
mov qword [rsp + 8], rbx
mov qword [rsp + 0x18], r8
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
mov rbp, rsp
sub rsp, 0x60
mov r12, rdx
mov rbx, rcx
movups xmm0, xmmword [rdx]
movups xmmword [rbp - 0x38], xmm0
mov qword [rbp - 0x28], rdx
movq r9, xmm0
mov rax, r9
mov r13, qword [rdx + 8]
sub rax, r13
mov qword [rbp - 0x40], rax
xorps xmm1, xmm1
cmp byte [r9], 0x2d
jne 0x1800369d1
inc r9
mov qword [rbp - 0x38], r9
mov r11b, 1
jmp 0x1800369d4
xor r11b, r11b
mov byte [rbp + 0x58], r11b
xor r10d, r10d
xor r14b, r14b
mov byte [rbp + 0x48], r14b
xor edi, edi
movsx ecx, byte [r9]
cmp cl, 0x30
jne 0x1800369fc
xor esi, esi
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
jmp 0x180036abb
lea eax, [rcx - 0x31]
cmp al, 8
ja 0x180036f9c
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
lea esi, [rcx - 0x30]
test r11b, r11b
je 0x180036a68
cmp byte [rdx], 0x30
jl 0x180036abb
mov rcx, rdx
mov r8, rdx
mov al, byte [rdx]
mov r9d, 0xccccccc
cmp al, 0x39
ja 0x180036abb
cmp esi, r9d
jb 0x180036a44
jne 0x180036ab1
mov rcx, r8
cmp al, 0x38
ja 0x180036ab1
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea ecx, [rsi - 6]
lea ecx, [rsi + rcx*4]
lea esi, [rax + rcx*2]
inc edi
mov al, byte [rdx]
mov rcx, rdx
mov r8, rdx
cmp al, 0x30
jge 0x180036a2e
jmp 0x180036abb
cmp byte [rdx], 0x30
jl 0x180036abb
mov rcx, rdx
mov r8, rdx
mov al, byte [rdx]
mov r9d, 0x19999999
cmp al, 0x39
jg 0x180036abb
cmp esi, r9d
jb 0x180036a8d
jne 0x180036ab1
mov rcx, r8
cmp al, 0x35
jg 0x180036ab1
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea ecx, [rsi - 6]
lea ecx, [rsi + rcx*4]
lea esi, [rax + rcx*2]
inc edi
mov al, byte [rdx]
mov rcx, rdx
mov r8, rdx
cmp al, 0x30
jge 0x180036a7b
jmp 0x180036abb
mov r14b, 1
mov byte [rbp + 0x48], r14b
mov r10d, esi
xor r15b, r15b
movsd xmm2, qword [0x18014a570]
test r14b, r14b
je 0x180036bdf
mov al, byte [rdx]
test r11b, r11b
je 0x180036b42
cmp al, 0x30
jl 0x180036bdf
mov rcx, rdx
mov r8, rdx
movabs r9, 0xccccccccccccccc
cmp al, 0x39
ja 0x180036bdf
cmp r10, r9
jb 0x180036b04
jne 0x180036b2d
mov rcx, r8
cmp al, 0x38
ja 0x180036b2d
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea ecx, [rax - 0x30]
lea rax, [r10 + r10*4]
lea r10, [rcx + rax*2]
inc edi
mov rcx, rdx
mov r8, rdx
mov al, byte [rdx]
cmp al, 0x30
jge 0x180036aee
jmp 0x180036bdf
mov rcx, r10
mov r15b, 1
xorps xmm1, xmm1
test rcx, rcx
js 0x180036b96
cvtsi2sd xmm1, rcx
jmp 0x180036bab
cmp al, 0x30
jl 0x180036bdf
mov r8, rdx
mov r9, rdx
movabs r11, 0x1999999999999999
mov rcx, r10
cmp al, 0x39
ja 0x180036bdf
cmp r10, r11
jb 0x180036b6f
jne 0x180036b30
mov r8, r9
cmp al, 0x35
ja 0x180036b30
movsx ecx, byte [r8]
lea rdx, [r8 + 1]
mov qword [rbp - 0x38], rdx
sub ecx, 0x30
lea rax, [r10 + r10*4]
lea r10, [rcx + rax*2]
inc edi
mov r8, rdx
mov r9, rdx
mov al, byte [rdx]
cmp al, 0x30
jge 0x180036b5a
jmp 0x180036bdf
mov rax, rcx
shr rax, 1
and ecx, 1
or rax, rcx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
mov al, byte [rdx]
cmp al, 0x30
jl 0x180036bdf
mov rcx, rdx
cmp al, 0x39
ja 0x180036bdf
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
sub eax, 0x30
movd xmm0, eax
cvtdq2pd xmm0, xmm0
mulsd xmm1, xmm2
addsd xmm1, xmm0
mov rcx, rdx
mov al, byte [rdx]
cmp al, 0x30
jge 0x180036bb4
xor r14d, r14d
mov al, byte [rdx]
cmp al, 0x2e
jne 0x180036bef
inc rdx
mov qword [rbp - 0x38], rdx
mov rcx, rdx
cmp al, 0x2e
jne 0x180036d02
mov r9b, byte [rdx]
lea eax, [r9 - 0x30]
cmp al, 9
ja 0x180036d3a
mov r8, rdx
test r15b, r15b
jne 0x180036c95
cmp byte [rbp + 0x48], r14b
jne 0x180036c1e
mov r10d, esi
mov r9, rcx
mov al, byte [rdx]
cmp al, 0x39
jg 0x180036c68
mov r8, r9
movabs rax, 0x1fffffffffffff
cmp r10, rax
ja 0x180036c68
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov r8, rdx
mov qword [rbp - 0x38], rdx
lea ecx, [rax - 0x30]
lea rax, [r10 + r10*4]
lea r10, [rcx + rax*2]
dec r14d
test r10, r10
je 0x180036c5c
inc edi
mov al, byte [rdx]
mov rcx, rdx
mov r9, rdx
cmp al, 0x30
jge 0x180036c23
xorps xmm1, xmm1
test r10, r10
js 0x180036c77
cvtsi2sd xmm1, r10
jmp 0x180036c8f
mov rcx, r10
shr rcx, 1
mov rax, r10
and eax, 1
or rcx, rax
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
mov r15b, 1
mov r9b, byte [r8]
mov rcx, r8
cmp r9b, 0x30
jl 0x180036d02
mov r11, r8
mov r9, r8
mov al, byte [rdx]
mov rcx, r9
cmp al, 0x39
jg 0x180036d02
cmp edi, 0x11
jge 0x180036ce8
movsx eax, byte [r8]
lea rcx, [r8 + 1]
mov rdx, rcx
mov qword [rbp - 0x38], rcx
sub eax, 0x30
movd xmm0, eax
cvtdq2pd xmm0, xmm0
mulsd xmm1, xmm2
addsd xmm0, xmm1
movaps xmm1, xmm0
dec r14d
comisd xmm0, xmmword [0x18014a510]
jbe 0x180036cf3
inc edi
jmp 0x180036cf3
lea rcx, [r11 + 1]
mov rdx, rcx
mov qword [rbp - 0x38], rcx
mov r8, rcx
mov al, byte [rdx]
mov r11, rcx
mov r9, rcx
cmp al, 0x30
jge 0x180036ca6
xor edi, edi
mov r9d, edi
cmp byte [rcx], 0x65
je 0x180036d15
cmp byte [rcx], 0x45
jne 0x180036e54
inc rcx
mov qword [rbp - 0x38], rcx
test r15b, r15b
jne 0x180036d8c
mov edx, esi
cmp byte [rbp + 0x48], dil
cmovne rdx, r10
xorps xmm1, xmm1
test rdx, rdx
js 0x180036d74
cvtsi2sd xmm1, rdx
jmp 0x180036d89
cmp dword [rbx + 0x30], r14d
jne 0x180037000
mov dword [rbx + 0x30], 0xe
sub rcx, r13
mov qword [rbx + 0x38], rcx
movups xmm0, xmmword [rbp - 0x38]
movdqu xmmword [r12], xmm0
mov rbx, qword [rsp + 0xa0]
add rsp, 0x60
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret
mov rax, rdx
shr rax, 1
and edx, 1
or rax, rdx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
mov r15b, 1
mov r11b, dil
cmp byte [rcx], 0x2b
je 0x180036d9c
cmp byte [rcx], 0x2d
jne 0x180036da3
mov r11b, 1
inc rcx
mov qword [rbp - 0x38], rcx
movsx edx, byte [rcx]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x180036f14
lea r8, [rcx + 1]
mov qword [rbp - 0x38], r8
mov r9d, edx
mov r13d, gethostbyname
sub r9d, r13d
test r11b, r11b
je 0x180036eba
test r14d, r14d
jg 0x180037021
lea ecx, [r14 + 0x7ffffff7]
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
cmp byte [r8], r13b
jl 0x180036e51
mov rcx, r8
cmp byte [r8], 0x39
jg 0x180036e4f
movsx eax, byte [rcx]
lea r8, [rcx + 1]
mov qword [rbp - 0x38], r8
lea ecx, [r9 - 6]
lea ecx, [r9 + rcx*4]
lea r9d, [rax + rcx*2]
mov rcx, r8
cmp r9d, edx
jle 0x180036e4a
mov al, byte [r8]
cmp al, r13b
jl 0x180036e4a
mov r11, r8
mov rdi, r8
mov rcx, r11
cmp al, 0x39
ja 0x180036e4a
lea r8, [rdi + 1]
mov qword [rbp - 0x38], r8
mov al, byte [r8]
mov r11, r8
mov rcx, r8
mov rdi, r8
cmp al, r13b
jge 0x180036e2a
cmp byte [r8], r13b
jge 0x180036df7
xor edi, edi
neg r9d
test r15b, r15b
je 0x180036f44
lea eax, [r9 + r14]
mov ecx, 0xfffffecc
cmp eax, ecx
jge 0x180036e72
divsd xmm1, qword [0x18014a5c8]
lea edx, [rax + 0x134]
cmovge edx, eax
movaps xmm0, xmm1
call fcn.180038a08
comisd xmm0, xmmword [0x18014a5d0]
jbe 0x180036f29
cmp dword [rbx + 0x30], edi
jne 0x180037084
mov dword [rbx + 0x30], 0xd
mov rax, qword [rbp - 0x40]
mov qword [rbx + 0x38], rax
movups xmm0, xmmword [rbp - 0x38]
mov rax, qword [rbp - 0x28]
movdqu xmmword [rax], xmm0
jmp 0x180036d5c
mov edx, 0x134
sub edx, r14d
cmp byte [r8], r13b
jl 0x180036e54
mov al, byte [r8]
cmp al, 0x39
jg 0x180036e54
movsx eax, byte [r8]
inc r8
mov qword [rbp - 0x38], r8
lea r9d, [r9 + r9*4]
lea r9d, [r9 - 0x18]
lea r9d, [rax + r9*2]
cmp r9d, edx
jg 0x180036ef7
mov al, byte [r8]
cmp al, r13b
jge 0x180036eca
jmp 0x180036e54
cmp dword [rbx + 0x30], edi
jne 0x180037042
mov dword [rbx + 0x30], 0xd
mov rax, qword [rbp - 0x40]
mov qword [rbx + 0x38], rax
jmp 0x180036d52
cmp dword [rbx + 0x30], edi
jne 0x180037063
mov dword [rbx + 0x30], 0xf
jmp 0x180036d4b
cmp byte [rbp + 0x58], dil
je 0x180036f36
xorps xmm0, xmmword [0x18014a7b0]
movaps xmm1, xmm0
mov rcx, qword [rbp + 0x50]
call fcn.1800376c8
jmp 0x180036f83
mov rcx, qword [rbp + 0x50]
cmp byte [rbp + 0x48], dil
je 0x180036f6b
cmp byte [rbp + 0x58], dil
je 0x180036f61
neg r10
mov rdx, r10
call fcn.18003794c
jmp 0x180036f83
mov rdx, r10
call fcn.1800377ec
jmp 0x180036f83
cmp byte [rbp + 0x58], dil
je 0x180036f7c
neg esi
mov edx, esi
call fcn.180037bf8
jmp 0x180036f83
mov edx, esi
call fcn.180037ac4
test al, al
jne 0x180036ea9
cmp dword [rbx + 0x30], edi
jne 0x180036fbe
mov dword [rbx + 0x30], 0x10
jmp 0x180036ea1
cmp dword [rbx + 0x30], edi
jne 0x180036fdf
mov rax, r9
sub rax, r13
mov dword [rbx + 0x30], 3
mov qword [rbx + 0x38], rax
mov qword [rdx], r9
mov qword [rdx + 8], r13
jmp 0x180036d5c
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180013ec4
lea rdx, [0x18015cd58]
lea rcx, [rbp - 0x20]
call fcn.1800a1860
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180013ec4
lea rdx, [0x18015cd58]
lea rcx, [rbp - 0x20]
call fcn.1800a1860
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180013ec4
lea rdx, [0x18015cd58]
lea rcx, [rbp - 0x20]
call fcn.1800a1860
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180013ec4
lea rdx, [0x18015cd58]
lea rcx, [rbp - 0x20]
call fcn.1800a1860
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180013ec4
lea rdx, [0x18015cd58]
lea rcx, [rbp - 0x20]
call fcn.1800a1860
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180013ec4
lea rdx, [0x18015cd58]
lea rcx, [rbp - 0x20]
call fcn.1800a1860
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180013ec4
lea rdx, [0x18015cd58]
lea rcx, [rbp - 0x20]
call fcn.1800a1860
int3