Function at 0x180034e3c
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 0x180034e91
inc r9
mov qword [rbp - 0x38], r9
mov r10b, 1
jmp 0x180034e94
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 0x180034ec0
xor esi, esi
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
jmp 0x180034f8b
lea eax, [rcx - 0x31]
cmp al, 8
ja 0x180035494
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
mov esi, ecx
sub esi, r15d
test r10b, r10b
je 0x180034f33
cmp byte [rdx], r15b
jl 0x180034f8b
mov r8, rdx
mov rcx, rdx
mov al, byte [rdx]
cmp al, 0x39
ja 0x180034f8b
mov r9d, 0xccccccc
cmp esi, r9d
jb 0x180034f0a
jne 0x180034f81
mov rcx, r8
cmp al, 0x38
ja 0x180034f81
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 0x180034f8b
mov r8, rdx
mov rcx, rdx
cmp al, 0x39
jle 0x180034efc
jmp 0x180034f8b
cmp byte [rdx], r15b
jl 0x180034f8b
mov r8, rdx
mov rcx, rdx
mov al, byte [rdx]
cmp al, 0x39
jg 0x180034f8b
mov r9d, 0x19999999
cmp esi, r9d
jb 0x180034f58
jne 0x180034f81
mov rcx, r8
cmp al, 0x35
jg 0x180034f81
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 0x180034f8b
mov r8, rdx
mov rcx, rdx
cmp al, 0x39
jle 0x180034f4a
jmp 0x180034f8b
mov r14b, 1
mov byte [rbp + 0x48], r14b
mov r11d, esi
xor r15b, r15b
movsd xmm2, qword [0x18014efb8]
test r14b, r14b
je 0x1800350ca
mov al, byte [rdx]
test r10b, r10b
je 0x18003501f
cmp al, 0x30
jl 0x1800350ca
mov r8, rdx
mov r14b, 0x39
cmp al, r14b
jg 0x1800350ca
mov rcx, rdx
movabs r9, 0xccccccccccccccc
cmp r11, r9
jb 0x180034fd8
jne 0x18003500a
mov rcx, r8
cmp al, 0x38
ja 0x18003500a
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 0x1800350ca
mov r8, rdx
mov rcx, rdx
cmp al, r14b
jle 0x180034fca
jmp 0x1800350ca
mov rcx, r11
mov r15b, 1
xorps xmm1, xmm1
test rcx, rcx
js 0x180035080
cvtsi2sd xmm1, rcx
jmp 0x180035095
cmp al, 0x30
jl 0x1800350ca
mov r9, rdx
mov r14b, 0x39
cmp al, r14b
jg 0x1800350ca
mov r8, rdx
movabs r10, 0x1999999999999999
mov rcx, r11
cmp r11, r10
jb 0x180035054
jne 0x18003500d
mov r8, r9
cmp al, 0x35
ja 0x18003500d
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 0x1800350ca
mov r9, rdx
mov r8, rdx
cmp al, r14b
jle 0x180035043
jmp 0x1800350ca
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 0x1800350ca
mov rcx, rdx
cmp al, r14b
ja 0x1800350ca
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 0x18003509e
xor r14d, r14d
mov al, byte [rdx]
cmp al, 0x2e
jne 0x1800350da
inc rdx
mov qword [rbp - 0x38], rdx
mov rcx, rdx
cmp al, 0x2e
jne 0x1800351ed
mov r9b, byte [rdx]
lea eax, [r9 - 0x30]
cmp al, 9
ja 0x180035225
mov r8, rdx
test r15b, r15b
jne 0x180035180
cmp byte [rbp + 0x48], r14b
jne 0x180035109
mov r11d, esi
mov r9, rcx
mov al, byte [rdx]
cmp al, 0x39
jg 0x180035153
mov r8, r9
movabs rax, 0x1fffffffffffff
cmp r11, rax
ja 0x180035153
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 0x180035147
inc edi
mov al, byte [rdx]
mov rcx, rdx
mov r9, rdx
cmp al, 0x30
jge 0x18003510e
xorps xmm1, xmm1
test r11, r11
js 0x180035162
cvtsi2sd xmm1, r11
jmp 0x18003517a
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 0x1800351ed
mov r10, r8
mov r9, r8
mov al, byte [rdx]
mov rcx, r9
cmp al, 0x39
jg 0x1800351ed
cmp edi, 0x11
jge 0x1800351d3
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 [0x18014ef60]
jbe 0x1800351de
inc edi
jmp 0x1800351de
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 0x180035191
xor edi, edi
mov r9d, edi
cmp byte [rcx], 0x65
je 0x180035200
cmp byte [rcx], 0x45
jne 0x18003533f
inc rcx
mov qword [rbp - 0x38], rcx
test r15b, r15b
jne 0x180035277
mov edx, esi
cmp byte [rbp + 0x48], dil
cmovne rdx, r11
xorps xmm1, xmm1
test rdx, rdx
js 0x18003525f
cvtsi2sd xmm1, rdx
jmp 0x180035274
cmp dword [rbx + 0x30], r14d
jne 0x1800354f8
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 0x180035287
cmp byte [rcx], 0x2d
jne 0x18003528e
mov r10b, 1
inc rcx
mov qword [rbp - 0x38], rcx
movsx edx, byte [rcx]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x18003540c
lea r8, [rcx + 1]
mov qword [rbp - 0x38], r8
mov r9d, edx
mov r13d, gethostbyname
sub r9d, r13d
test r10b, r10b
je 0x1800353a5
test r14d, r14d
jg 0x180035519
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 0x18003533c
mov rcx, r8
cmp byte [r8], 0x39
jg 0x18003533a
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 0x180035335
mov al, byte [r8]
cmp al, r13b
jl 0x180035335
mov r10, r8
mov rdi, r8
mov rcx, r10
cmp al, 0x39
ja 0x180035335
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 0x180035315
cmp byte [r8], r13b
jge 0x1800352e2
xor edi, edi
neg r9d
test r15b, r15b
je 0x18003543c
lea eax, [r9 + r14]
mov ecx, 0xfffffecc
cmp eax, ecx
jge 0x18003535d
divsd xmm1, qword [0x18014f008]
lea edx, [rax + 0x134]
cmovge edx, eax
movaps xmm0, xmm1
call fcn.180036ef8
comisd xmm0, xmmword [0x18014f010]
jbe 0x180035421
cmp dword [rbx + 0x30], edi
jne 0x18003557c
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 0x180035247
mov r10d, 0x134
sub r10d, r14d
mov al, byte [r8]
cmp al, r13b
jl 0x18003533f
cmp al, 0x39
ja 0x18003533f
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 0x1800353ef
cmp byte [rdx], r13b
jl 0x18003533f
mov r8, rdx
cmp byte [rdx], 0x39
jg 0x18003533f
mov al, byte [rdx]
jmp 0x1800353ba
cmp dword [rbx + 0x30], edi
jne 0x18003553a
mov dword [rbx + 0x30], 0xd
mov rax, qword [rbp - 0x40]
mov qword [rbx + 0x38], rax
jmp 0x18003523d
cmp dword [rbx + 0x30], edi
jne 0x18003555b
mov dword [rbx + 0x30], 0xf
jmp 0x180035236
cmp byte [rbp + 0x58], dil
je 0x18003542e
xorps xmm0, xmmword [0x18014f220]
movaps xmm1, xmm0
mov rcx, qword [rbp + 0x50]
call fcn.180035bb8
jmp 0x18003547b
mov rcx, qword [rbp + 0x50]
cmp byte [rbp + 0x48], dil
je 0x180035463
cmp byte [rbp + 0x58], dil
je 0x180035459
neg r11
mov rdx, r11
call fcn.180035e3c
jmp 0x18003547b
mov rdx, r11
call fcn.180035cdc
jmp 0x18003547b
cmp byte [rbp + 0x58], dil
je 0x180035474
neg esi
mov edx, esi
call fcn.1800360e8
jmp 0x18003547b
mov edx, esi
call fcn.180035fb4
test al, al
jne 0x180035394
cmp dword [rbx + 0x30], edi
jne 0x1800354b6
mov dword [rbx + 0x30], 0x10
jmp 0x18003538c
cmp dword [rbx + 0x30], edi
jne 0x1800354d7
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 0x180035247
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180014200
lea rdx, [0x180161188]
lea rcx, [rbp - 0x20]
call fcn.1800a6da0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180014200
lea rdx, [0x180161188]
lea rcx, [rbp - 0x20]
call fcn.1800a6da0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180014200
lea rdx, [0x180161188]
lea rcx, [rbp - 0x20]
call fcn.1800a6da0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180014200
lea rdx, [0x180161188]
lea rcx, [rbp - 0x20]
call fcn.1800a6da0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180014200
lea rdx, [0x180161188]
lea rcx, [rbp - 0x20]
call fcn.1800a6da0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180014200
lea rdx, [0x180161188]
lea rcx, [rbp - 0x20]
call fcn.1800a6da0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.180014200
lea rdx, [0x180161188]
lea rcx, [rbp - 0x20]
call fcn.1800a6da0
int3