Function at 0x1800346dc
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 0x180034731
inc r9
mov qword [rbp - 0x38], r9
mov r10b, 1
jmp 0x180034734
xor r10b, r10b
mov byte [rbp + 0x58], r10b
xor r11d, r11d
xor r14b, r14b
mov byte [rbp + 0x48], r14b
xor edi, edi
movsx ecx, byte [r9]
lea r15d, [r11 + 0x30]
cmp cl, r15b
jne 0x180034760
xor esi, esi
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
jmp 0x18003482b
lea eax, [rcx - 0x31]
cmp al, 8
ja 0x180034d34
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
mov esi, ecx
sub esi, r15d
test r10b, r10b
je 0x1800347d3
cmp byte [rdx], r15b
jl 0x18003482b
mov r8, rdx
mov rcx, rdx
mov al, byte [rdx]
cmp al, 0x39
ja 0x18003482b
mov r9d, 0xccccccc
cmp esi, r9d
jb 0x1800347aa
jne 0x180034821
mov rcx, r8
cmp al, 0x38
ja 0x180034821
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea esi, [rsi + rsi*4]
lea esi, [rsi - 0x18]
lea esi, [rax + rsi*2]
inc edi
mov al, byte [rdx]
cmp al, r15b
jl 0x18003482b
mov r8, rdx
mov rcx, rdx
cmp al, 0x39
jle 0x18003479c
jmp 0x18003482b
cmp byte [rdx], r15b
jl 0x18003482b
mov r8, rdx
mov rcx, rdx
mov al, byte [rdx]
cmp al, 0x39
jg 0x18003482b
mov r9d, 0x19999999
cmp esi, r9d
jb 0x1800347f8
jne 0x180034821
mov rcx, r8
cmp al, 0x35
jg 0x180034821
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea esi, [rsi + rsi*4]
lea esi, [rsi - 0x18]
lea esi, [rax + rsi*2]
inc edi
mov al, byte [rdx]
cmp al, r15b
jl 0x18003482b
mov r8, rdx
mov rcx, rdx
cmp al, 0x39
jle 0x1800347ea
jmp 0x18003482b
mov r14b, 1
mov byte [rbp + 0x48], r14b
mov r11d, esi
xor r15b, r15b
movsd xmm2, qword [0x18014ef08]
test r14b, r14b
je 0x18003496a
mov al, byte [rdx]
test r10b, r10b
je 0x1800348bf
cmp al, 0x30
jl 0x18003496a
mov r8, rdx
mov r14b, 0x39
cmp al, r14b
jg 0x18003496a
mov rcx, rdx
movabs r9, 0xccccccccccccccc
cmp r11, r9
jb 0x180034878
jne 0x1800348aa
mov rcx, r8
cmp al, 0x38
ja 0x1800348aa
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea ecx, [rax - 0x30]
lea rax, [r11 + r11*4]
lea r11, [rcx + rax*2]
inc edi
mov al, byte [rdx]
cmp al, 0x30
jl 0x18003496a
mov r8, rdx
mov rcx, rdx
cmp al, r14b
jle 0x18003486a
jmp 0x18003496a
mov rcx, r11
mov r15b, 1
xorps xmm1, xmm1
test rcx, rcx
js 0x180034920
cvtsi2sd xmm1, rcx
jmp 0x180034935
cmp al, 0x30
jl 0x18003496a
mov r9, rdx
mov r14b, 0x39
cmp al, r14b
jg 0x18003496a
mov r8, rdx
movabs r10, 0x1999999999999999
mov rcx, r11
cmp r11, r10
jb 0x1800348f4
jne 0x1800348ad
mov r8, r9
cmp al, 0x35
ja 0x1800348ad
movsx ecx, byte [r8]
lea rdx, [r8 + 1]
mov qword [rbp - 0x38], rdx
sub ecx, 0x30
lea rax, [r11 + r11*4]
lea r11, [rcx + rax*2]
inc edi
mov al, byte [rdx]
cmp al, 0x30
jl 0x18003496a
mov r9, rdx
mov r8, rdx
cmp al, r14b
jle 0x1800348e3
jmp 0x18003496a
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 0x18003496a
mov rcx, rdx
cmp al, r14b
ja 0x18003496a
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 al, byte [rdx]
mov rcx, rdx
cmp al, 0x30
jge 0x18003493e
xor r14d, r14d
mov al, byte [rdx]
cmp al, 0x2e
jne 0x18003497a
inc rdx
mov qword [rbp - 0x38], rdx
mov rcx, rdx
cmp al, 0x2e
jne 0x180034a8d
mov r9b, byte [rdx]
lea eax, [r9 - 0x30]
cmp al, 9
ja 0x180034ac5
mov r8, rdx
test r15b, r15b
jne 0x180034a20
cmp byte [rbp + 0x48], r14b
jne 0x1800349a9
mov r11d, esi
mov r9, rcx
mov al, byte [rdx]
cmp al, 0x39
jg 0x1800349f3
mov r8, r9
movabs rax, 0x1fffffffffffff
cmp r11, rax
ja 0x1800349f3
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov r8, rdx
mov qword [rbp - 0x38], rdx
lea ecx, [rax - 0x30]
lea rax, [r11 + r11*4]
lea r11, [rcx + rax*2]
dec r14d
test r11, r11
je 0x1800349e7
inc edi
mov al, byte [rdx]
mov rcx, rdx
mov r9, rdx
cmp al, 0x30
jge 0x1800349ae
xorps xmm1, xmm1
test r11, r11
js 0x180034a02
cvtsi2sd xmm1, r11
jmp 0x180034a1a
mov rcx, r11
shr rcx, 1
mov rax, r11
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 0x180034a8d
mov r10, r8
mov r9, r8
mov al, byte [rdx]
mov rcx, r9
cmp al, 0x39
jg 0x180034a8d
cmp edi, 0x11
jge 0x180034a73
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 [0x18014eeb0]
jbe 0x180034a7e
inc edi
jmp 0x180034a7e
lea rcx, [r10 + 1]
mov rdx, rcx
mov qword [rbp - 0x38], rcx
mov r8, rcx
mov al, byte [rdx]
mov r10, rcx
mov r9, rcx
cmp al, 0x30
jge 0x180034a31
xor edi, edi
mov r9d, edi
cmp byte [rcx], 0x65
je 0x180034aa0
cmp byte [rcx], 0x45
jne 0x180034bdf
inc rcx
mov qword [rbp - 0x38], rcx
test r15b, r15b
jne 0x180034b17
mov edx, esi
cmp byte [rbp + 0x48], dil
cmovne rdx, r11
xorps xmm1, xmm1
test rdx, rdx
js 0x180034aff
cvtsi2sd xmm1, rdx
jmp 0x180034b14
cmp dword [rbx + 0x30], r14d
jne 0x180034d98
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 r10b, dil
cmp byte [rcx], 0x2b
je 0x180034b27
cmp byte [rcx], 0x2d
jne 0x180034b2e
mov r10b, 1
inc rcx
mov qword [rbp - 0x38], rcx
movsx edx, byte [rcx]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x180034cac
lea r8, [rcx + 1]
mov qword [rbp - 0x38], r8
mov r9d, edx
mov r13d, gethostbyname
sub r9d, r13d
test r10b, r10b
je 0x180034c45
test r14d, r14d
jg 0x180034db9
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 0x180034bdc
mov rcx, r8
cmp byte [r8], 0x39
jg 0x180034bda
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 0x180034bd5
mov al, byte [r8]
cmp al, r13b
jl 0x180034bd5
mov r10, r8
mov rdi, r8
mov rcx, r10
cmp al, 0x39
ja 0x180034bd5
lea r8, [rdi + 1]
mov qword [rbp - 0x38], r8
mov al, byte [r8]
mov r10, r8
mov rcx, r8
mov rdi, r8
cmp al, r13b
jge 0x180034bb5
cmp byte [r8], r13b
jge 0x180034b82
xor edi, edi
neg r9d
test r15b, r15b
je 0x180034cdc
lea eax, [r9 + r14]
mov ecx, 0xfffffecc
cmp eax, ecx
jge 0x180034bfd
divsd xmm1, qword [0x18014ef58]
lea edx, [rax + 0x134]
cmovge edx, eax
movaps xmm0, xmm1
call fcn.180036798
comisd xmm0, xmmword [0x18014ef60]
jbe 0x180034cc1
cmp dword [rbx + 0x30], edi
jne 0x180034e1c
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 0x180034ae7
mov r10d, 0x134
sub r10d, r14d
mov al, byte [r8]
cmp al, r13b
jl 0x180034bdf
cmp al, 0x39
ja 0x180034bdf
lea rdx, [r8 + 1]
mov qword [rbp - 0x38], rdx
lea r9d, [r9 + r9*4]
movzx eax, al
lea r9d, [r9 - 0x18]
lea r9d, [rax + r9*2]
cmp r9d, r10d
jg 0x180034c8f
cmp byte [rdx], r13b
jl 0x180034bdf
mov r8, rdx
cmp byte [rdx], 0x39
jg 0x180034bdf
mov al, byte [rdx]
jmp 0x180034c5a
cmp dword [rbx + 0x30], edi
jne 0x180034dda
mov dword [rbx + 0x30], 0xd
mov rax, qword [rbp - 0x40]
mov qword [rbx + 0x38], rax
jmp 0x180034add
cmp dword [rbx + 0x30], edi
jne 0x180034dfb
mov dword [rbx + 0x30], 0xf
jmp 0x180034ad6
cmp byte [rbp + 0x58], dil
je 0x180034cce
xorps xmm0, xmmword [0x18014f170]
movaps xmm1, xmm0
mov rcx, qword [rbp + 0x50]
call fcn.180035458
jmp 0x180034d1b
mov rcx, qword [rbp + 0x50]
cmp byte [rbp + 0x48], dil
je 0x180034d03
cmp byte [rbp + 0x58], dil
je 0x180034cf9
neg r11
mov rdx, r11
call fcn.1800356dc
jmp 0x180034d1b
mov rdx, r11
call fcn.18003557c
jmp 0x180034d1b
cmp byte [rbp + 0x58], dil
je 0x180034d14
neg esi
mov edx, esi
call fcn.180035988
jmp 0x180034d1b
mov edx, esi
call fcn.180035854
test al, al
jne 0x180034c34
cmp dword [rbx + 0x30], edi
jne 0x180034d56
mov dword [rbx + 0x30], 0x10
jmp 0x180034c2c
cmp dword [rbx + 0x30], edi
jne 0x180034d77
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 0x180034ae7
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.1800140f0
lea rdx, [0x180161030]
lea rcx, [rbp - 0x20]
call fcn.1800a6760
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.1800140f0
lea rdx, [0x180161030]
lea rcx, [rbp - 0x20]
call fcn.1800a6760
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.1800140f0
lea rdx, [0x180161030]
lea rcx, [rbp - 0x20]
call fcn.1800a6760
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.1800140f0
lea rdx, [0x180161030]
lea rcx, [rbp - 0x20]
call fcn.1800a6760
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.1800140f0
lea rdx, [0x180161030]
lea rcx, [rbp - 0x20]
call fcn.1800a6760
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.1800140f0
lea rdx, [0x180161030]
lea rcx, [rbp - 0x20]
call fcn.1800a6760
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.1800140f0
lea rdx, [0x180161030]
lea rcx, [rbp - 0x20]
call fcn.1800a6760
int3