Function at 0x180037d40
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 0x180037d95
inc r9
mov qword [rbp - 0x38], r9
mov r11b, 1
jmp 0x180037d98
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 0x180037dc0
xor esi, esi
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
jmp 0x180037e7f
lea eax, [rcx - 0x31]
cmp al, 8
ja 0x180038360
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
lea esi, [rcx - 0x30]
test r11b, r11b
je 0x180037e2c
cmp byte [rdx], 0x30
jl 0x180037e7f
mov rcx, rdx
mov r8, rdx
mov al, byte [rdx]
mov r9d, 0xccccccc
cmp al, 0x39
ja 0x180037e7f
cmp esi, r9d
jb 0x180037e08
jne 0x180037e75
mov rcx, r8
cmp al, 0x38
ja 0x180037e75
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 0x180037df2
jmp 0x180037e7f
cmp byte [rdx], 0x30
jl 0x180037e7f
mov rcx, rdx
mov r8, rdx
mov al, byte [rdx]
mov r9d, 0x19999999
cmp al, 0x39
jg 0x180037e7f
cmp esi, r9d
jb 0x180037e51
jne 0x180037e75
mov rcx, r8
cmp al, 0x35
jg 0x180037e75
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 0x180037e3f
jmp 0x180037e7f
mov r14b, 1
mov byte [rbp + 0x48], r14b
mov r10d, esi
xor r15b, r15b
movsd xmm2, qword [0x18014cac0]
test r14b, r14b
je 0x180037fa3
mov al, byte [rdx]
test r11b, r11b
je 0x180037f06
cmp al, 0x30
jl 0x180037fa3
mov rcx, rdx
mov r8, rdx
movabs r9, 0xccccccccccccccc
cmp al, 0x39
ja 0x180037fa3
cmp r10, r9
jb 0x180037ec8
jne 0x180037ef1
mov rcx, r8
cmp al, 0x38
ja 0x180037ef1
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 0x180037eb2
jmp 0x180037fa3
mov rcx, r10
mov r15b, 1
xorps xmm1, xmm1
test rcx, rcx
js 0x180037f5a
cvtsi2sd xmm1, rcx
jmp 0x180037f6f
cmp al, 0x30
jl 0x180037fa3
mov r8, rdx
mov r9, rdx
movabs r11, 0x1999999999999999
mov rcx, r10
cmp al, 0x39
ja 0x180037fa3
cmp r10, r11
jb 0x180037f33
jne 0x180037ef4
mov r8, r9
cmp al, 0x35
ja 0x180037ef4
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 0x180037f1e
jmp 0x180037fa3
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 0x180037fa3
mov rcx, rdx
cmp al, 0x39
ja 0x180037fa3
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 0x180037f78
xor r14d, r14d
mov al, byte [rdx]
cmp al, 0x2e
jne 0x180037fb3
inc rdx
mov qword [rbp - 0x38], rdx
mov rcx, rdx
cmp al, 0x2e
jne 0x1800380c6
mov r9b, byte [rdx]
lea eax, [r9 - 0x30]
cmp al, 9
ja 0x1800380fe
mov r8, rdx
test r15b, r15b
jne 0x180038059
cmp byte [rbp + 0x48], r14b
jne 0x180037fe2
mov r10d, esi
mov r9, rcx
mov al, byte [rdx]
cmp al, 0x39
jg 0x18003802c
mov r8, r9
movabs rax, 0x1fffffffffffff
cmp r10, rax
ja 0x18003802c
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 0x180038020
inc edi
mov al, byte [rdx]
mov rcx, rdx
mov r9, rdx
cmp al, 0x30
jge 0x180037fe7
xorps xmm1, xmm1
test r10, r10
js 0x18003803b
cvtsi2sd xmm1, r10
jmp 0x180038053
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 0x1800380c6
mov r11, r8
mov r9, r8
mov al, byte [rdx]
mov rcx, r9
cmp al, 0x39
jg 0x1800380c6
cmp edi, 0x11
jge 0x1800380ac
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 [0x18014ca60]
jbe 0x1800380b7
inc edi
jmp 0x1800380b7
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 0x18003806a
xor edi, edi
mov r9d, edi
cmp byte [rcx], 0x65
je 0x1800380d9
cmp byte [rcx], 0x45
jne 0x180038218
inc rcx
mov qword [rbp - 0x38], rcx
test r15b, r15b
jne 0x180038150
mov edx, esi
cmp byte [rbp + 0x48], dil
cmovne rdx, r10
xorps xmm1, xmm1
test rdx, rdx
js 0x180038138
cvtsi2sd xmm1, rdx
jmp 0x18003814d
cmp dword [rbx + 0x30], r14d
jne 0x1800383c4
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 0x180038160
cmp byte [rcx], 0x2d
jne 0x180038167
mov r11b, 1
inc rcx
mov qword [rbp - 0x38], rcx
movsx edx, byte [rcx]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x1800382d8
lea r8, [rcx + 1]
mov qword [rbp - 0x38], r8
mov r9d, edx
mov r13d, gethostbyname
sub r9d, r13d
test r11b, r11b
je 0x18003827e
test r14d, r14d
jg 0x1800383e5
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 0x180038215
mov rcx, r8
cmp byte [r8], 0x39
jg 0x180038213
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 0x18003820e
mov al, byte [r8]
cmp al, r13b
jl 0x18003820e
mov r11, r8
mov rdi, r8
mov rcx, r11
cmp al, 0x39
ja 0x18003820e
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 0x1800381ee
cmp byte [r8], r13b
jge 0x1800381bb
xor edi, edi
neg r9d
test r15b, r15b
je 0x180038308
lea eax, [r9 + r14]
mov ecx, 0xfffffecc
cmp eax, ecx
jge 0x180038236
divsd xmm1, qword [0x18014cb18]
lea edx, [rax + 0x134]
cmovge edx, eax
movaps xmm0, xmm1
call fcn.180039dcc
comisd xmm0, xmmword [0x18014cb20]
jbe 0x1800382ed
cmp dword [rbx + 0x30], edi
jne 0x180038448
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 0x180038120
mov edx, 0x134
sub edx, r14d
cmp byte [r8], r13b
jl 0x180038218
mov al, byte [r8]
cmp al, 0x39
jg 0x180038218
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 0x1800382bb
mov al, byte [r8]
cmp al, r13b
jge 0x18003828e
jmp 0x180038218
cmp dword [rbx + 0x30], edi
jne 0x180038406
mov dword [rbx + 0x30], 0xd
mov rax, qword [rbp - 0x40]
mov qword [rbx + 0x38], rax
jmp 0x180038116
cmp dword [rbx + 0x30], edi
jne 0x180038427
mov dword [rbx + 0x30], 0xf
jmp 0x18003810f
cmp byte [rbp + 0x58], dil
je 0x1800382fa
xorps xmm0, xmmword [0x18014cd20]
movaps xmm1, xmm0
mov rcx, qword [rbp + 0x50]
call fcn.180038a8c
jmp 0x180038347
mov rcx, qword [rbp + 0x50]
cmp byte [rbp + 0x48], dil
je 0x18003832f
cmp byte [rbp + 0x58], dil
je 0x180038325
neg r10
mov rdx, r10
call fcn.180038d10
jmp 0x180038347
mov rdx, r10
call fcn.180038bb0
jmp 0x180038347
cmp byte [rbp + 0x58], dil
je 0x180038340
neg esi
mov edx, esi
call fcn.180038fbc
jmp 0x180038347
mov edx, esi
call fcn.180038e88
test al, al
jne 0x18003826d
cmp dword [rbx + 0x30], edi
jne 0x180038382
mov dword [rbx + 0x30], 0x10
jmp 0x180038265
cmp dword [rbx + 0x30], edi
jne 0x1800383a3
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 0x180038120
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180015764
lea rdx, [0x18015f6c8]
lea rcx, [rbp - 0x20]
call fcn.1800a32f0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180015764
lea rdx, [0x18015f6c8]
lea rcx, [rbp - 0x20]
call fcn.1800a32f0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180015764
lea rdx, [0x18015f6c8]
lea rcx, [rbp - 0x20]
call fcn.1800a32f0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180015764
lea rdx, [0x18015f6c8]
lea rcx, [rbp - 0x20]
call fcn.1800a32f0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180015764
lea rdx, [0x18015f6c8]
lea rcx, [rbp - 0x20]
call fcn.1800a32f0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180015764
lea rdx, [0x18015f6c8]
lea rcx, [rbp - 0x20]
call fcn.1800a32f0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180015764
lea rdx, [0x18015f6c8]
lea rcx, [rbp - 0x20]
call fcn.1800a32f0
int3