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

Disassembly:
mov qword [rsp + 8], rbx
mov qword [rsp + 0x10], rbp
push rsi
push rdi
push r12
push r14
push r15
sub rsp, 0x30
mov r10, qword [r9]
mov r14, rcx
mov eax, dword [rsp + 0x80]
movabs rcx, 0x2386f26fc10000
movsxd rsi, dword [r9 + 8]
mov rdi, rdx
cmp r10, rcx
jb 0x1502b89dc
mov r9d, reloc.WS2_32.dll_recvfrom
jmp 0x1502b8b08
movabs rcx, 0x38d7ea4c68000
cmp r10, rcx
jb 0x1502b89f6
mov r9d, reloc.OLEAUT32.dll_SafeArrayGetDim
jmp 0x1502b8b08
movabs rcx, 0x5af3107a4000
cmp r10, rcx
jb 0x1502b8a10
mov r9d, reloc.OLEAUT32.dll_SafeArrayDestroy
jmp 0x1502b8b08
movabs rcx, 0x9184e72a000
cmp r10, rcx
jb 0x1502b8a2a
mov r9d, SafeArrayGetDim
jmp 0x1502b8b08
movabs rcx, 0xe8d4a51000
cmp r10, rcx
jb 0x1502b8a44
mov r9d, SafeArrayGetDim
jmp 0x1502b8b08
movabs rcx, 0x174876e800
cmp r10, rcx
jb 0x1502b8a5e
mov r9d, SafeArrayGetDim
jmp 0x1502b8b08
movabs rcx, 0x2540be400
cmp r10, rcx
jb 0x1502b8a78
mov r9d, SafeArrayGetDim
jmp 0x1502b8b08
cmp r10, 0x3b9aca00
jb 0x1502b8a89
mov r9d, 0xa
jmp 0x1502b8b08
cmp r10, 0x5f5e100
jb 0x1502b8a9a
mov r9d, 9
jmp 0x1502b8b08
cmp r10, 0x989680
jb 0x1502b8aab
mov r9d, 8
jmp 0x1502b8b08
cmp r10, 0xf4240
jb 0x1502b8abc
mov r9d, 7
jmp 0x1502b8b08
cmp r10, 0x186a0
jb 0x1502b8acd
mov r9d, 6
jmp 0x1502b8b08
cmp r10, 0x2710
jb 0x1502b8ade
mov r9d, 5
jmp 0x1502b8b08
cmp r10, 0x3e8
jb 0x1502b8aef
mov r9d, 4
jmp 0x1502b8b08
cmp r10, 0x64
jb 0x1502b8afd
mov r9d, 3
jmp 0x1502b8b08
cmp r10, 0xa
sbb r9d, r9d
add r9d, 2
lea ebp, [r9 + rsi]
mov r15d, 1
lea r11d, [rbp - 1]
mov dword [rsp + 0x80], r11d
test eax, eax
jne 0x1502b8b85
lea ecx, [rax - 3]
mov eax, ecx
sub eax, r9d
cmp r9d, r15d
cmovne ecx, eax
cmp ecx, esi
jg 0x1502b8b43
xor eax, eax
cmp r9d, r15d
setne al
add eax, 4
cmp esi, eax
jle 0x1502b8b9a
xor ecx, ecx
lea eax, [r11 + 0x63]
cmp eax, 0xc6
seta cl
xor eax, eax
add ecx, 4
cmp r9d, r15d
seta al
add ecx, eax
mov rax, r8
add ecx, r9d
sub rax, rdi
mov qword [rsp + 0x78], rcx
cmp rax, rcx
jge 0x1502b8dd1
mov qword [r14], r8
mov dword [r14 + 8], 0x84
jmp 0x1502b8ff9
cmp eax, 3
jne 0x1502b8b95
lea eax, [r11 + 4]
cmp eax, 9
ja 0x1502b8b43
jmp 0x1502b8b9a
cmp eax, 2
jne 0x1502b8b43
lea rbx, [0x150000000]
test esi, esi
js 0x1502b8bb8
mov ecx, ebp
cmp r10, r15
jne 0x1502b8bc9
movzx eax, byte [rsi + rbx + 0x177c40]
sub ecx, eax
jmp 0x1502b8bc9
test ebp, ebp
jle 0x1502b8bc2
lea ecx, [r9 + 1]
jmp 0x1502b8bc9
mov ecx, 2
sub ecx, esi
mov rax, r8
mov r15d, ecx
sub rax, rdi
cmp rax, r15
jl 0x1502b8b75
test esi, esi
jle 0x1502b8c14
cmp esi, 0x16
jg 0x1502b8bf9
bsf rcx, r10
mov rax, r10
shr rax, cl
cmp rax, qword [rbx + rsi*8 + 0x177d80]
ja 0x1502b8bf9
mov eax, r9d
jmp 0x1502b8c17
and dword [rsp + 0x20], 0
mov rcx, r14
movsd xmm3, qword [rsp + 0x88]
call fcn.1502b92cc
jmp 0x1502b8ff9
mov rax, r15
lea r11, [rax + rdx]
mov r12d, 0x51eb851f
movabs rax, 0xffffffff00000000
test rax, r10
je 0x1502b8d29
movabs rax, 0xabcc77118461cefd
mul r10
shr rdx, 0x1a
imul eax, edx, 0x5f5e100
sub r10d, eax
mov eax, 0xd1b71759
mov ecx, r10d
mov r10, rdx
mul ecx
mov r8d, edx
shr r8d, 0xd
imul eax, r8d, 0x2710
sub ecx, eax
mov eax, 0xd1b71759
mul r8d
shr edx, 0xd
imul eax, edx, 0x2710
sub r8d, eax
mov eax, r12d
mul ecx
shr edx, 5
imul eax, edx, 0x64
sub ecx, eax
add ecx, ecx
movzx eax, word [rcx + rbx + 0x178270]
mov word [r11 - 2], ax
lea eax, [rdx + rdx]
movzx eax, word [rax + rbx + 0x178270]
mov word [r11 - 4], ax
mov eax, r12d
mul r8d
shr edx, 5
imul eax, edx, 0x64
sub r8d, eax
add r8d, r8d
movzx eax, word [r8 + rbx + 0x178270]
mov word [r11 - 6], ax
sub r11, 8
lea eax, [rdx + rdx]
movzx eax, word [rax + rbx + 0x178270]
mov word [r11], ax
jmp 0x1502b8d29
mov eax, 0xd1b71759
mul r10d
shr edx, 0xd
imul eax, edx, 0x2710
sub r10d, eax
mov eax, r12d
mov ecx, r10d
mov r10d, edx
mul ecx
shr edx, 5
imul eax, edx, 0x64
sub ecx, eax
add ecx, ecx
movzx eax, word [rcx + rbx + 0x178270]
lea ecx, [rdx + rdx]
mov word [r11 - 2], ax
sub r11, 4
movzx ecx, word [rcx + rbx + 0x178270]
mov word [r11], cx
cmp r10d, 0x2710
jae 0x1502b8ce0
cmp r10d, 0x64
jb 0x1502b8d5e
mov eax, r12d
mul r10d
shr edx, 5
imul eax, edx, 0x64
sub r10d, eax
sub r11, 2
lea eax, [r10 + r10]
mov r10d, edx
movzx eax, word [rax + rbx + 0x178270]
mov word [r11], ax
cmp r10d, 0xa
jb 0x1502b8d77
lea eax, [r10 + r10]
movzx eax, word [rax + rbx + 0x178270]
mov word [r11 - 2], ax
jmp 0x1502b8d7f
add r10b, 0x30
mov byte [r11 - 1], r10b
test esi, esi
jle 0x1502b8d8e
mov ecx, r9d
mov r8, rsi
add rcx, rdi
jmp 0x1502b8dbe
je 0x1502b8dc8
test ebp, ebp
jle 0x1502b8dac
movsxd rbx, ebp
lea rdx, [rdi + 1]
mov r8, rbx
mov rcx, rdi
call fcn.15040d600
mov byte [rbx + rdi], 0x2e
jmp 0x1502b8dc8
neg ebp
mov word [rdi], 0x2e30
test ebp, ebp
jle 0x1502b8dc8
lea rcx, [rdi + 2]
movsxd r8, ebp
mov edx, gethostbyname
call fcn.15040dca0
lea rax, [r15 + rdi]
jmp 0x1502b8ff1
xor ebp, ebp
mov esi, r9d
movabs rax, 0xffffffff00000000
lea rbx, [0x150000000]
mov r12d, 0x51eb851f
test rax, r10
je 0x1502b8ef7
movabs rax, 0xabcc77118461cefd
mov ebp, 8
mul r10
shr rdx, 0x1a
imul eax, edx, 0x5f5e100
sub r10d, eax
mov eax, 0xd1b71759
mov ecx, r10d
mov r10, rdx
mul ecx
mov r8d, edx
shr r8d, 0xd
imul eax, r8d, 0x2710
sub ecx, eax
mov eax, 0xd1b71759
mul r8d
shr edx, 0xd
imul eax, edx, 0x2710
sub r8d, eax
mov eax, r12d
mul ecx
shr edx, 5
imul eax, edx, 0x64
sub ecx, eax
add ecx, ecx
movzx eax, word [rcx + rbx + 0x178270]
mov word [rsi + rdi - 1], ax
lea eax, [rdx + rdx]
movzx eax, word [rax + rbx + 0x178270]
mov word [rsi + rdi - 3], ax
mov eax, r12d
mul r8d
shr edx, 5
imul eax, edx, 0x64
sub r8d, eax
add r8d, r8d
movzx eax, word [r8 + rbx + 0x178270]
mov word [rsi + rdi - 5], ax
lea eax, [rdx + rdx]
movzx eax, word [rax + rbx + 0x178270]
mov word [rsi + rdi - 7], ax
jmp 0x1502b8ef7
mov eax, 0xd1b71759
mov r8, rsi
mul r10d
shr edx, 0xd
imul eax, edx, 0x2710
sub r10d, eax
mov eax, r12d
mov ecx, r10d
mov r10d, edx
mul ecx
mov eax, ebp
sub r8, rax
shr edx, 5
imul eax, edx, 0x64
sub ecx, eax
add ecx, ecx
add ebp, 4
movzx eax, word [rcx + rbx + 0x178270]
mov word [r8 + rdi - 1], ax
lea eax, [rdx + rdx]
movzx eax, word [rax + rbx + 0x178270]
mov word [r8 + rdi - 3], ax
cmp r10d, 0x2710
jae 0x1502b8ea4
cmp r10d, 0x64
jb 0x1502b8f2e
mov eax, r12d
mul r10d
shr edx, 5
imul eax, edx, 0x64
sub r10d, eax
mov eax, ebp
sub rsi, rax
lea ecx, [r10 + r10]
mov r10d, edx
movzx eax, word [rcx + rbx + 0x178270]
mov word [rsi + rdi - 1], ax
cmp r10d, 0xa
jb 0x1502b8f4f
lea ecx, [r10 + r10]
lea eax, [rcx + 1]
mov al, byte [rax + rbx + 0x178270]
mov byte [rdi + 2], al
mov r10b, byte [rcx + rbx + 0x178270]
jmp 0x1502b8f53
add r10b, 0x30
mov byte [rdi], r10b
cmp r9d, r15d
jbe 0x1502b8f63
mov byte [rdi + 1], 0x2e
lea r15d, [r9 + 1]
mov eax, r15d
mov byte [rax + rdi], 0x65
lea eax, [r15 + 1]
mov ecx, eax
lea r8d, [rax + 1]
test r11d, r11d
jns 0x1502b8f7c
neg r11d
cmp dword [rsp + 0x80], 0
mov eax, 0x2d
lea edx, [rax - 2]
cmovge eax, edx
mov byte [rcx + rdi], al
cmp r11d, 0x64
jl 0x1502b8fd6
mov eax, 0x66666667
imul r11d
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + rdx]
cdqe
movzx eax, word [rax + rbx + 0x178270]
mov word [r8 + rdi], ax
mov al, dl
shl dl, 2
add al, dl
add al, al
sub r11b, al
lea eax, [r8 + 2]
add r11b, 0x30
mov byte [rax + rdi], r11b
jmp 0x1502b8fe9
lea eax, [r11 + r11]
cdqe
movzx eax, word [rax + rbx + 0x178270]
mov word [r8 + rdi], ax
mov rax, qword [rsp + 0x78]
add rax, rdi
and dword [r14 + 8], 0
mov qword [r14], rax
mov rbx, qword [rsp + 0x60]
mov rax, r14
mov rbp, qword [rsp + 0x68]
add rsp, 0x30
pop r15
pop r14
pop r12
pop rdi
pop rsi
ret