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

Disassembly:
push rbx
push rbp
push rsi
push r12
push r13
push r15
sub rsp, 0x28
mov r9, qword [rdx]
mov r13, rcx
mov r15, r8
mov r10, rdx
xorps xmm2, xmm2
xorps xmm1, xmm1
mov rax, qword [r9]
mov rcx, rax
sub rcx, qword [r9 + 8]
mov qword [rsp + 0x78], rcx
cmp rax, qword [r9 + 0x10]
je 0x140015a0b
cmp byte [rax], 0x2d
jne 0x140015a0b
inc rax
mov r12b, 1
mov qword [r9], rax
mov r9, qword [rdx]
mov rax, qword [r9]
jmp 0x140015a0e
xor r12b, r12b
xor ebp, ebp
mov qword [rsp + 0x60], rdi
xor sil, sil
mov qword [rsp + 0x20], r14
mov ebx, ebp
mov byte [rsp + 0x68], sil
mov r11d, ebp
cmp rax, qword [r9 + 0x10]
je 0x14001620e
movsx ecx, byte [rax]
movsd xmm3, qword [0x140151768]
cmp cl, 0x30
jne 0x140015b11
inc rax
mov edi, ebp
mov qword [r9], rax
mov rdx, qword [rdx]
xor r14b, r14b
mov rax, qword [rdx]
mov esi, ebp
cmp rax, qword [rdx + 0x10]
je 0x140015e07
cmp byte [rax], 0x2e
jne 0x140015e07
inc rax
mov qword [rdx], rax
mov rcx, qword [r10]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140015df6
movzx edx, byte [rax]
cmp dl, 0x30
jl 0x140015df6
cmp dl, 0x39
jg 0x140015df6
movzx r9d, byte [rsp + 0x68]
test r14b, r14b
jne 0x140015da0
test r9b, r9b
mov eax, edi
movabs r8, 0x1fffffffffffff
cmovne rax, rbx
mov rbx, rax
nop dword [rax + rax]
mov rdx, qword [r10]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140015d71
movsx ecx, byte [rax]
cmp cl, 0x30
jl 0x140015d71
cmp cl, 0x39
jg 0x140015d71
cmp rbx, r8
ja 0x140015d71
inc rax
sub ecx, 0x30
mov qword [rdx], rax
dec esi
lea rax, [rbx + rbx*4]
lea rbx, [rcx + rax*2]
lea eax, [r11 + 1]
test rbx, rbx
cmove eax, r11d
mov r11d, eax
jmp 0x140015ac0
cmp cl, 0x31
jl 0x14001620e
cmp cl, 0x39
jg 0x14001620e
inc rax
lea edi, [rcx - 0x30]
mov qword [r9], rax
mov rdx, qword [rdx]
test r12b, r12b
je 0x140015b8d
nop dword [rax]
nop dword [rax + rax]
mov rdx, qword [r10]
mov rcx, qword [rdx]
cmp rcx, qword [rdx + 0x10]
je 0x140015a50
movsx r8d, byte [rcx]
mov rax, rdx
cmp r8b, 0x30
jl 0x140015be3
cmp r8b, 0x39
jg 0x140015be3
cmp edi, 0xccccccc
jb 0x140015b77
jne 0x140015bd9
cmp r8b, 0x38
jg 0x140015bd9
lea edi, [rdi + rdi*4]
inc r11d
lea edi, [rdi - 0x18]
lea rax, [rcx + 1]
lea edi, [r8 + rdi*2]
mov qword [rdx], rax
jmp 0x140015b40
mov rcx, qword [rdx]
mov r9, rdx
cmp rcx, qword [rdx + 0x10]
je 0x140015a50
movsx r8d, byte [rcx]
mov rax, rdx
cmp r8b, 0x30
jl 0x140015be3
cmp r8b, 0x39
jg 0x140015be3
cmp edi, 0x19999999
jb 0x140015bc0
jne 0x140015bd9
cmp r8b, 0x35
jg 0x140015bd9
lea edi, [rdi + rdi*4]
inc r11d
lea rax, [rcx + 1]
lea edi, [rdi - 0x18]
mov qword [r9], rax
mov rdx, qword [r10]
lea edi, [r8 + rdi*2]
jmp 0x140015b8d
mov sil, 1
mov ebx, edi
mov byte [rsp + 0x68], sil
xor r14b, r14b
test sil, sil
je 0x140015c7c
test r12b, r12b
je 0x140015cd7
movabs r8, 0xccccccccccccccc
nop dword [rax]
nop word [rax + rax]
mov rdx, qword [r10]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140015a53
movsx ecx, byte [rax]
cmp cl, 0x30
jl 0x140015c79
cmp cl, 0x39
jg 0x140015c79
cmp rbx, r8
jb 0x140015c39
jne 0x140015c4f
cmp cl, 0x38
jg 0x140015c4f
inc rax
sub ecx, 0x30
mov qword [rdx], rax
inc r11d
lea rax, [rbx + rbx*4]
lea rbx, [rcx + rax*2]
jmp 0x140015c10
xorps xmm1, xmm1
test rbx, rbx
js 0x140015c5e
cvtsi2sd xmm1, rbx
jmp 0x140015c76
mov rax, rbx
mov rcx, rbx
shr rcx, 1
and eax, 1
or rcx, rax
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
mov r14b, 1
mov rax, rdx
mov rdx, rax
test r14b, r14b
je 0x140015a53
nop dword [rax + rax]
mov rcx, qword [r10]
mov rdx, rcx
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140015a53
movsx r8d, byte [rax]
cmp r8b, 0x30
jl 0x140015a53
cmp r8b, 0x39
jg 0x140015a53
inc rax
mulsd xmm1, xmm3
mov qword [rcx], rax
lea eax, [r8 - 0x30]
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
jmp 0x140015c90
movabs r9, 0x1999999999999999
nop dword [rax]
nop word [rax + rax]
mov rdx, qword [r10]
mov r8, qword [rdx]
cmp r8, qword [rdx + 0x10]
je 0x140015a53
movsx ecx, byte [r8]
mov rax, rdx
cmp cl, 0x30
jl 0x140015c7c
cmp cl, 0x39
jg 0x140015c7c
cmp rbx, r9
jb 0x140015d25
jne 0x140015d3c
cmp cl, 0x35
jg 0x140015d3c
lea rax, [r8 + 1]
sub ecx, 0x30
mov qword [rdx], rax
inc r11d
lea rax, [rbx + rbx*4]
lea rbx, [rcx + rax*2]
jmp 0x140015cf0
xorps xmm1, xmm1
test rbx, rbx
js 0x140015d51
cvtsi2sd xmm1, rbx
mov r14b, 1
jmp 0x140015c90
mov rax, rbx
mov rcx, rbx
shr rcx, 1
and eax, 1
or rcx, rax
mov r14b, 1
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
jmp 0x140015c90
xorps xmm1, xmm1
test rbx, rbx
js 0x140015d80
cvtsi2sd xmm1, rbx
jmp 0x140015d98
mov rax, rbx
mov rcx, rbx
shr rcx, 1
and eax, 1
or rcx, rax
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
mov r14b, 1
nop dword [rax + rax]
mov rcx, qword [r10]
mov rdx, rcx
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140015e0d
movsx r8d, byte [rax]
cmp r8b, 0x30
jl 0x140015e0d
cmp r8b, 0x39
jg 0x140015e0d
lea rdx, [rax + 1]
cmp r11d, 0x11
jge 0x140015df1
lea eax, [r8 - 0x30]
mulsd xmm1, xmm3
dec esi
movd xmm0, eax
lea eax, [r11 + 1]
cvtdq2pd xmm0, xmm0
addsd xmm0, xmm1
comisd xmm0, xmm2
movaps xmm1, xmm0
cmovbe eax, r11d
mov r11d, eax
mov qword [rcx], rdx
jmp 0x140015da0
sub rax, qword [rcx + 8]
mov dword [r13 + 0x30], 0xe
jmp 0x14001621a
movzx r9d, byte [rsp + 0x68]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140015f37
cmp byte [rax], 0x65
je 0x140015e28
cmp byte [rax], 0x45
jne 0x140015f37
inc rax
mov qword [rdx], rax
test r14b, r14b
jne 0x140015e66
test r9b, r9b
mov eax, edi
mov rcx, rbx
xorps xmm1, xmm1
cmove rcx, rax
test rcx, rcx
js 0x140015e4e
cvtsi2sd xmm1, rcx
jmp 0x140015e63
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
mov r14b, 1
mov rcx, qword [r10]
xor r8b, r8b
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x14001601c
cmp byte [rax], 0x2b
je 0x140015e86
cmp byte [rax], 0x2d
jne 0x140015e92
mov r8b, 1
inc rax
mov qword [rcx], rax
mov rcx, qword [r10]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x14001601c
movsx edx, byte [rax]
cmp dl, 0x30
jl 0x14001601c
cmp dl, 0x39
jg 0x14001601c
inc rax
lea ebp, [rdx - 0x30]
mov qword [rcx], rax
test r8b, r8b
je 0x140015fbf
mov r8, qword [r10]
lea ecx, [rsi + 0x7ffffff7]
mov eax, 0x66666667
imul ecx
mov r9d, edx
sar r9d, 2
mov eax, r9d
shr eax, 0x1f
add r9d, eax
mov rax, qword [r8]
cmp rax, qword [r8 + 0x10]
je 0x140015f35
movsx edx, byte [rax]
cmp dl, 0x30
jl 0x140015f35
cmp dl, 0x39
jg 0x140015f35
lea ebp, [rbp + rbp*4]
inc rax
lea ebp, [rbp - 0x18]
mov qword [r8], rax
mov r8, qword [r10]
lea ebp, [rdx + rbp*2]
cmp ebp, r9d
jle 0x140015ee3
mov rcx, r8
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140015ee3
movzx edx, byte [rax]
cmp dl, 0x30
jl 0x140015ee3
cmp dl, 0x39
jg 0x140015ee3
inc rax
mov qword [rcx], rax
mov r8, qword [r10]
jmp 0x140015f11
neg ebp
test r14b, r14b
je 0x140016054
lea ecx, [rsi + rbp]
cmp ecx, 0xfffffecc
jge 0x14001602d
divsd xmm1, qword [0x140151780]
lea eax, [rcx + 0x134]
cmp eax, 0xfffffecc
jl 0x140015f8e
movsxd rax, ecx
lea rax, [rax*8 + 0x9a0]
lea rcx, [0x14014f5a0]
movaps xmm2, xmm1
sub rcx, rax
divsd xmm2, qword [rcx]
comisd xmm2, xmmword [0x140151788]
ja 0x14001600a
test r12b, r12b
je 0x140015f9a
xorps xmm2, xmmword [0x1401517b0]
movaps xmm1, xmm2
mov rcx, r15
call fcn.14001a090
test al, al
jne 0x14001621e
mov rax, qword [rsp + 0x78]
mov dword [r13 + 0x30], 0x10
jmp 0x14001621a
mov r8d, 0x134
sub r8d, esi
nop dword [rax + rax]
mov rcx, qword [r10]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140015f37
movsx edx, byte [rax]
cmp dl, 0x30
jl 0x140015f37
cmp dl, 0x39
jg 0x140015f37
lea ebp, [rbp + rbp*4]
inc rax
lea ebp, [rbp - 0x18]
mov qword [rcx], rax
lea ebp, [rdx + rbp*2]
cmp ebp, r8d
jle 0x140015fd0
mov rax, qword [rsp + 0x78]
mov dword [r13 + 0x30], 0xd
jmp 0x14001621a
sub rax, qword [rcx + 8]
mov dword [r13 + 0x30], 0xf
jmp 0x14001621a
movsxd rax, ecx
lea rax, [rax*8]
test ecx, ecx
js 0x140015f6f
lea rcx, [0x14014f5a0]
movaps xmm2, xmm1
mulsd xmm2, qword [rax + rcx]
jmp 0x140015f80
cmp byte [rsp + 0x68], 0
mov rax, qword [r15 + 0x40]
je 0x14001617b
test r12b, r12b
je 0x140016103
mov rdx, qword [r15 + 0x38]
neg rbx
sub rax, rdx
cmp rax, 0x10
jge 0x14001608e
mov edx, 1
lea rcx, [r15 + 0x20]
call fcn.140015760
mov rdx, qword [r15 + 0x38]
lea rax, [rdx + 0x10]
xorps xmm0, xmm0
mov qword [r15 + 0x38], rax
mov eax, 0x96
movups xmmword [rdx], xmm0
mov word [rdx + 0xe], ax
mov qword [rdx], rbx
test rbx, rbx
js 0x1400160e8
movabs r8, 0xffffffff00000000
mov eax, 0x196
mov word [rdx + 0xe], ax
test r8, rbx
jne 0x1400160ce
mov eax, 0x1d6
mov word [rdx + 0xe], ax
test rbx, 0xffffffff80000000
jne 0x14001621e
or ax, 0x20
mov word [rdx + 0xe], ax
jmp 0x14001621e
cmp rbx, 0xffffffff80000000
jl 0x14001621e
mov eax, 0xb6
mov word [rdx + 0xe], ax
jmp 0x14001621e
mov rcx, qword [r15 + 0x38]
sub rax, rcx
cmp rax, 0x10
jge 0x140016122
mov edx, 1
lea rcx, [r15 + 0x20]
call fcn.140015760
mov rcx, qword [r15 + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [r15 + 0x38], rax
mov eax, 0x116
movups xmmword [rcx], xmm0
mov word [rcx + 0xe], ax
mov qword [rcx], rbx
test rbx, rbx
js 0x14001614a
mov eax, 0x196
mov word [rcx + 0xe], ax
movabs r8, 0xffffffff00000000
test r8, rbx
jne 0x140016161
or ax, 0x40
mov word [rcx + 0xe], ax
test rbx, 0xffffffff80000000
jne 0x14001621e
or ax, 0x20
mov word [rcx + 0xe], ax
jmp 0x14001621e
mov rcx, qword [r15 + 0x38]
sub rax, rcx
test r12b, r12b
je 0x1400161cb
neg edi
cmp rax, 0x10
jge 0x1400161a1
mov edx, 1
lea rcx, [r15 + 0x20]
call fcn.140015760
mov rcx, qword [r15 + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [r15 + 0x38], rax
test edi, edi
movsxd rax, edi
mov edx, 0x1f6
movups xmmword [rcx], xmm0
mov qword [rcx], rax
mov eax, 0xb6
cmovns ax, dx
mov word [rcx + 0xe], ax
jmp 0x14001621e
cmp rax, 0x10
jge 0x1400161e3
mov edx, 1
lea rcx, [r15 + 0x20]
call fcn.140015760
mov rcx, qword [r15 + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [r15 + 0x38], rax
mov eax, edi
shr edi, 0x1a
not di
movups xmmword [rcx], xmm0
mov qword [rcx], rax
and di, 0x20
mov eax, 0x1d6
or di, ax
mov word [rcx + 0xe], di
jmp 0x14001621e
sub rax, qword [r9 + 8]
mov dword [r13 + 0x30], 3
mov qword [r13 + 0x38], rax
mov r14, qword [rsp + 0x20]
mov rdi, qword [rsp + 0x60]
add rsp, 0x28
pop r15
pop r13
pop r12
pop rsi
pop rbp
pop rbx
ret
mov qword [rsp + 0x18], r8
push rbx
push rbp
push rsi
push rdi
push r12
push r13
sub rsp, 0x48
mov rsi, rdx
mov rbp, r8
mov rdx, qword [rdx]
mov r13, rcx
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x14001626c
inc rax
mov qword [rdx], rax
mov rdx, qword [r8 + 0x38]
lea r12, [r8 + 0x20]
mov rax, qword [r12 + 0x20]
sub rax, rdx
cmp rax, 0x10
jge 0x140016294
mov edx, 1
mov rcx, r12
call fcn.140015760
mov rdx, qword [r12 + 0x18]
lea rax, [rdx + 0x10]
xorps xmm0, xmm0
mov qword [r12 + 0x18], rax
mov ebx, 3
movups xmmword [rdx], xmm0
mov word [rdx + 0xe], bx
movabs rdi, 0x100002600
mov rcx, rsi
call fcn.14001a5f0
cmp al, 0x20
ja 0x1400162dc
bt rdi, rax
jae 0x1400162dc
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400162b6
inc rax
mov qword [rcx], rax
jmp 0x1400162b6
cmp dword [r13 + 0x30], 0
jne 0x140016806
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016329
cmp byte [rax], 0x7d
jne 0x140016329
inc rax
mov qword [rcx], rax
movabs rcx, 0xffff000000000000
mov rax, qword [rbp + 0x38]
mov word [rax - 2], bx
and qword [rax - 8], rcx
mov qword [rax - 0x10], 0
add rsp, 0x48
pop r13
pop r12
pop rdi
pop rsi
pop rbp
pop rbx
ret
mov qword [rsp + 0x80], r14
mov qword [rsp + 0x40], r15
mov dword [rsp + 0x88], 0
mov rcx, qword [rsi]
lea rbx, [0x140151660]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400167e9
cmp byte [rax], 0x22
jne 0x1400167e9
inc rax
mov qword [rsp + 0x20], r13
mov qword [rcx], rax
xor r15d, r15d
mov rbp, r13
mov dword [rsp + 0x28], r15d
mov rcx, rsi
call fcn.14001a5f0
mov rcx, qword [rsi]
cmp al, 0x5c
jne 0x1400164f0
mov rax, qword [rcx]
mov r14, rax
sub r14, qword [rcx + 8]
cmp rax, qword [rcx + 0x10]
je 0x1400163a0
inc rax
mov qword [rcx], rax
mov rcx, rsi
call fcn.14001a5f0
movzx edx, al
cmp byte [rdx + rbx], 0
je 0x1400163cc
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400163c3
inc rax
mov qword [rcx], rax
movzx ebx, byte [rdx + rbx]
jmp 0x140016516
cmp al, 0x75
jne 0x1400165cc
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400163e6
inc rax
mov qword [rcx], rax
xor ebx, ebx
xor edi, edi
nop word [rax + rax]
mov rcx, rsi
call fcn.14001a5f0
movsx edx, al
shl ebx, 4
add ebx, edx
lea ecx, [rdx - 0x30]
cmp cl, 9
ja 0x14001640d
add ebx, 0xffffffd0
jmp 0x140016428
lea eax, [rdx - 0x41]
cmp al, 5
ja 0x140016419
add ebx, 0xffffffc9
jmp 0x140016428
sub dl, 0x61
cmp dl, 5
ja 0x1400165c2
add ebx, 0xffffffa9
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x14001643a
inc rax
mov qword [rcx], rax
inc edi
cmp edi, 4
jl 0x1400163f0
cmp dword [r13 + 0x30], 0
jne 0x14001656e
lea edi, [rbx - 0xd800]
cmp edi, 0x3ff
ja 0x1400164ce
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016562
cmp byte [rax], 0x5c
jne 0x140016562
inc rax
mov qword [rcx], rax
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016562
cmp byte [rax], 0x75
jne 0x140016562
inc rax
mov r8, r14
mov qword [rcx], rax
mov rdx, rsi
mov rcx, r13
call fcn.140015910
cmp dword [r13 + 0x30], 0
jne 0x14001656e
add eax, 0xffff2400
cmp eax, 0x3ff
ja 0x140016551
mov ebx, edi
shl ebx, 0xa
or ebx, eax
add ebx, 0x10000
mov edx, ebx
lea rcx, [rsp + 0x20]
call fcn.140015510
mov r15d, dword [rsp + 0x28]
lea rbx, [0x140151660]
mov rbp, qword [rsp + 0x20]
jmp 0x140016377
cmp al, 0x22
je 0x14001660f
cmp al, 0x20
jb 0x1400165d6
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
jne 0x14001650d
xor bl, bl
jmp 0x140016516
movzx ebx, byte [rax]
inc rax
mov qword [rcx], rax
mov rcx, qword [rbp + 0x18]
mov rax, qword [rbp + 0x20]
sub rax, rcx
cmp rax, 1
jge 0x140016538
mov edx, 1
mov rcx, rbp
call fcn.1400156b0
mov rcx, qword [rbp + 0x18]
lea rax, [rcx + 1]
inc r15d
mov qword [rbp + 0x18], rax
mov byte [rcx], bl
lea rbx, [0x140151660]
jmp 0x140016372
mov dword [r13 + 0x30], 9
mov qword [r13 + 0x38], r14
jmp 0x14001664e
mov dword [r13 + 0x30], 9
mov qword [r13 + 0x38], r14
mov rbp, qword [rsp + 0x90]
cmp dword [r13 + 0x30], 0
jne 0x1400167f9
movabs rdi, 0x100002600
nop dword [rax + rax]
mov rcx, rsi
call fcn.14001a5f0
cmp al, 0x20
ja 0x1400166cf
movsx rax, al
bt rdi, rax
jae 0x1400166cf
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016590
inc rax
mov qword [rcx], rax
jmp 0x140016590
mov dword [r13 + 0x30], 8
jmp 0x14001656a
mov dword [r13 + 0x30], 0xa
jmp 0x14001656a
mov rbp, qword [rsp + 0x90]
test al, al
mov rax, qword [rcx]
jne 0x1400165fa
sub rax, qword [rcx + 8]
mov qword [r13 + 0x38], rax
mov dword [r13 + 0x30], 0xb
jmp 0x140016576
sub rax, qword [rcx + 8]
mov qword [r13 + 0x38], rax
mov dword [r13 + 0x30], 0xc
jmp 0x140016576
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x14001661e
inc rax
mov qword [rcx], rax
mov rcx, qword [rbp + 0x18]
mov rax, qword [rbp + 0x20]
sub rax, rcx
cmp rax, 1
jge 0x140016640
mov edx, 1
mov rcx, rbp
call fcn.1400156b0
mov rcx, qword [rbp + 0x18]
lea rax, [rcx + 1]
inc r15d
mov qword [rbp + 0x18], rax
mov byte [rcx], 0
mov eax, dword [r13 + 0x30]
test eax, eax
jne 0x14001656e
mov eax, r15d
lea edi, [r15 - 1]
sub qword [rbp + 0x18], rax
mov rcx, qword [r12 + 0x18]
mov rax, qword [r12 + 0x20]
mov rbx, qword [rbp + 0x18]
sub rax, rcx
cmp rax, 0x10
jge 0x14001668e
mov edx, 1
mov rcx, r12
call fcn.140015760
mov rcx, qword [r12 + 0x18]
mov rbp, qword [rsp + 0x90]
lea rax, [rcx + 0x10]
mov qword [r12 + 0x18], rax
lea rdx, [rsp + 0x30]
test rbx, rbx
mov dword [rsp + 0x38], edi
xorps xmm0, xmm0
lea rax, [0x140151490]
mov r8, qword [rbp + 0x10]
cmovne rax, rbx
mov qword [rsp + 0x30], rax
movups xmmword [rcx], xmm0
call fcn.14001a990
jmp 0x140016576
cmp dword [r13 + 0x30], 0
jne 0x1400167f9
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400167db
cmp byte [rax], 0x3a
jne 0x1400167db
inc rax
mov qword [rcx], rax
nop dword [rax]
mov rcx, rsi
call fcn.14001a5f0
cmp al, 0x20
ja 0x140016724
movsx rax, al
bt rdi, rax
jae 0x140016724
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016700
jmp 0x1400166f3
cmp dword [r13 + 0x30], 0
jne 0x1400167f9
mov r8, rbp
mov rdx, rsi
mov rcx, r13
call fcn.140016ce0
cmp dword [r13 + 0x30], 0
jne 0x1400167f9
mov rcx, rsi
call fcn.1400171d0
cmp dword [r13 + 0x30], 0
jne 0x1400167f9
mov rcx, qword [rsi]
mov ebx, dword [rsp + 0x88]
inc ebx
mov dword [rsp + 0x88], ebx
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400167cd
movzx edx, byte [rax]
cmp dl, 0x2c
jne 0x14001679c
inc rax
mov rdx, rsi
mov qword [rcx], rax
mov rcx, r13
call fcn.140017220
cmp dword [r13 + 0x30], 0
jne 0x1400167f9
jmp 0x140016341
cmp dl, 0x7d
jne 0x1400167cd
inc rax
mov edx, ebx
mov qword [rcx], rax
mov rcx, rbp
call fcn.14001a180
test al, al
jne 0x1400167f9
mov rax, qword [rsi]
mov rcx, qword [rax]
sub rcx, qword [rax + 8]
mov qword [r13 + 0x38], rcx
mov dword [r13 + 0x30], 0x10
jmp 0x1400167f9
sub rax, qword [rcx + 8]
mov dword [r13 + 0x30], 6
jmp 0x1400167f5
sub rax, qword [rcx + 8]
mov dword [r13 + 0x30], 5
jmp 0x1400167f5
sub rax, qword [rcx + 8]
mov dword [r13 + 0x30], 4
mov qword [r13 + 0x38], rax
mov r14, qword [rsp + 0x80]
mov r15, qword [rsp + 0x40]
add rsp, 0x48
pop r13
pop r12
pop rdi
pop rsi
pop rbp
pop rbx
ret
mov qword [rsp + 0x10], rbx
mov qword [rsp + 0x18], rsi
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0x30
mov r14, rcx
movzx r12d, r9b
mov rcx, qword [rdx]
mov r13, r8
mov rsi, rdx
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016a06
inc rax
mov qword [rcx], rax
mov rbx, r14
mov qword [rsp + 0x60], rbp
xor edi, edi
mov qword [rsp + 0x20], rbx
mov dword [rsp + 0x28], edi
lea r15, [0x140151660]
mov rcx, rsi
call fcn.14001a5f0
mov rcx, qword [rsi]
cmp al, 0x5c
jne 0x140016b4a
mov rax, qword [rcx]
mov rbp, rax
sub rbp, qword [rcx + 8]
cmp rax, qword [rcx + 0x10]
je 0x140016a49
inc rax
mov qword [rcx], rax
mov rcx, rsi
call fcn.14001a5f0
movzx edx, al
cmp byte [rdx + r15], 0
je 0x140016a77
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016a6d
inc rax
mov qword [rcx], rax
movzx ebp, byte [rdx + r15]
jmp 0x140016b71
cmp al, 0x75
jne 0x140016bcb
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016a91
inc rax
mov qword [rcx], rax
mov r8, rbp
mov rdx, rsi
mov rcx, r14
call fcn.140015910
cmp dword [r14 + 0x30], 0
jne 0x140016cb6
lea r15d, [rax - 0xd800]
cmp r15d, 0x3ff
ja 0x140016b30
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016bba
cmp byte [rax], 0x5c
jne 0x140016bba
inc rax
mov qword [rcx], rax
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016bba
cmp byte [rax], 0x75
jne 0x140016bba
inc rax
mov r8, rbp
mov qword [rcx], rax
mov rdx, rsi
mov rcx, r14
call fcn.140015910
cmp dword [r14 + 0x30], 0
jne 0x140016cb6
lea ecx, [rax - 0xdc00]
cmp ecx, 0x3ff
ja 0x140016ba9
mov eax, r15d
shl eax, 0xa
or eax, ecx
add eax, 0x10000
mov edx, eax
lea rcx, [rsp + 0x20]
call fcn.140015510
mov edi, dword [rsp + 0x28]
mov rbx, qword [rsp + 0x20]
jmp 0x140016a19
cmp al, 0x22
je 0x140016c0d
cmp al, 0x20
jb 0x140016bdc
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
jne 0x140016b68
xor bpl, bpl
jmp 0x140016b71
movzx ebp, byte [rax]
inc rax
mov qword [rcx], rax
mov rcx, qword [rbx + 0x18]
mov rax, qword [rbx + 0x20]
sub rax, rcx
cmp rax, 1
jge 0x140016b93
mov edx, 1
mov rcx, rbx
call fcn.1400156b0
mov rcx, qword [rbx + 0x18]
lea rax, [rcx + 1]
inc edi
mov qword [rbx + 0x18], rax
mov byte [rcx], bpl
mov dword [rsp + 0x28], edi
jmp 0x140016a20
mov dword [r14 + 0x30], 9
mov qword [r14 + 0x38], rbp
jmp 0x140016c4b
mov dword [r14 + 0x30], 9
mov qword [r14 + 0x38], rbp
jmp 0x140016cb6
mov dword [r14 + 0x30], 0xa
mov qword [r14 + 0x38], rbp
jmp 0x140016cb6
test al, al
mov rax, qword [rcx]
jne 0x140016bf8
sub rax, qword [rcx + 8]
mov qword [r14 + 0x38], rax
mov dword [r14 + 0x30], 0xb
jmp 0x140016cb6
sub rax, qword [rcx + 8]
mov qword [r14 + 0x38], rax
mov dword [r14 + 0x30], 0xc
jmp 0x140016cb6
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016c1c
inc rax
mov qword [rcx], rax
mov rcx, qword [rbx + 0x18]
mov rax, qword [rbx + 0x20]
sub rax, rcx
cmp rax, 1
jge 0x140016c3e
mov edx, 1
mov rcx, rbx
call fcn.1400156b0
mov rcx, qword [rbx + 0x18]
lea rax, [rcx + 1]
inc edi
mov qword [rbx + 0x18], rax
mov byte [rcx], 0
mov eax, dword [r14 + 0x30]
test eax, eax
jne 0x140016cb6
mov eax, edi
lea esi, [rdi - 1]
sub qword [rbx + 0x18], rax
mov rcx, qword [r13 + 0x38]
mov rax, qword [r13 + 0x40]
mov rbx, qword [rbx + 0x18]
sub rax, rcx
cmp rax, 0x10
jge 0x140016c83
mov edx, 1
lea rcx, [r13 + 0x20]
call fcn.140015760
mov rcx, qword [r13 + 0x38]
lea rax, [rcx + 0x10]
mov dword [rsp + 0x28], esi
mov qword [r13 + 0x38], rax
lea rdx, [rsp + 0x20]
mov r8, qword [r13 + 0x10]
lea rax, [0x140151490]
test rbx, rbx
xorps xmm0, xmm0
movups xmmword [rcx], xmm0
cmovne rax, rbx
mov qword [rsp + 0x20], rax
call fcn.14001a990
mov rbp, qword [rsp + 0x60]
mov rbx, qword [rsp + 0x68]
mov rsi, qword [rsp + 0x70]
add rsp, 0x30
pop r15
pop r14
pop r13
pop r12
pop rdi
ret
mov qword [rsp + 0x18], rbx
mov qword [rsp + 0x20], rbp
push rdi
sub rsp, 0x20
mov rbx, rdx
mov rbp, r8
mov rdx, qword [rdx]
mov rdi, rcx
mov r9, qword [rdx]
mov r10, qword [rdx + 0x10]
cmp r9, r10
jne 0x140016d0b
xor eax, eax
jmp 0x140016d0f
movzx eax, byte [r9]
movsx eax, al
add eax, 0xffffffde
cmp eax, 0x59
ja case.0x140016d3b.35
lea r8, [0x140000000]
cdqe
movzx eax, byte [r8 + rax + 0x17170]
mov ecx, dword [r8 + rax*4 + 0x17154]
add rcx, r8
jmp rcx
mov rcx, rdx
cmp r9, r10
je 0x140016d55
lea rax, [r9 + 1]
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rcx, rdx
mov r9, qword [rdx]
cmp r9, qword [rcx + 0x10]
je 0x140016dd7
cmp byte [r9], 0x75
jne 0x140016dd7
lea rax, [r9 + 1]
mov qword [rcx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016dd7
cmp byte [rax], 0x6c
jne 0x140016dd7
inc rax
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016dd7
cmp byte [rax], 0x6c
jne 0x140016dd7
inc rax
mov qword [rdx], rax
mov rcx, qword [rbp + 0x38]
mov rax, qword [rbp + 0x40]
sub rax, rcx
cmp rax, 0x10
jge 0x140016db9
mov edx, 1
lea rcx, [rbp + 0x20]
call fcn.140015760
mov rcx, qword [rbp + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [rbp + 0x38], rax
movups xmmword [rcx], xmm0
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
ret
mov rax, qword [rdx]
sub rax, qword [rdx + 8]
mov dword [rdi + 0x30], 3
mov qword [rdi + 0x38], rax
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
ret
mov rcx, rdx
cmp r9, r10
je 0x140016e11
lea rax, [r9 + 1]
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rcx, rdx
mov r9, qword [rdx]
cmp r9, qword [rcx + 0x10]
je 0x140016dd7
cmp byte [r9], 0x72
jne 0x140016dd7
lea rax, [r9 + 1]
mov qword [rcx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016dd7
cmp byte [rax], 0x75
jne 0x140016dd7
inc rax
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016dd7
cmp byte [rax], 0x65
jne 0x140016dd7
inc rax
mov qword [rdx], rax
mov dl, 1
mov rcx, rbp
call fcn.140019cc0
test al, al
jne 0x140017024
mov rax, qword [rbx]
mov rcx, qword [rax]
sub rcx, qword [rax + 8]
mov dword [rdi + 0x30], 0x10
mov qword [rdi + 0x38], rcx
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
ret
mov rcx, rdx
cmp r9, r10
je 0x140016ea1
lea rax, [r9 + 1]
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rcx, rdx
mov r9, qword [rdx]
cmp r9, qword [rcx + 0x10]
je 0x140016dd7
cmp byte [r9], 0x61
jne 0x140016dd7
lea rax, [r9 + 1]
mov qword [rcx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016dd7
cmp byte [rax], 0x6c
jne 0x140016dd7
inc rax
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016dd7
cmp byte [rax], 0x73
jne 0x140016dd7
inc rax
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016dd7
cmp byte [rax], 0x65
jne 0x140016dd7
inc rax
mov qword [rdx], rax
xor edx, edx
jmp 0x140016e54
xor r9d, r9d
mov r8, rbp
mov rdx, rbx
mov rcx, rdi
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
jmp 0x1400169d0
mov r8, rbp
mov rdx, rbx
mov rcx, rdi
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
jmp 0x140016240
mov qword [rsp + 0x30], rsi
mov qword [rsp + 0x38], r14
cmp r9, r10
je 0x140016f73
lea rax, [r9 + 1]
mov qword [rdx], rax
mov rcx, qword [rbp + 0x38]
mov rax, qword [rbp + 0x40]
sub rax, rcx
cmp rax, 0x10
jge 0x140016f96
mov edx, 1
lea rcx, [rbp + 0x20]
call fcn.140015760
mov rcx, qword [rbp + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [rbp + 0x38], rax
mov esi, 4
movups xmmword [rcx], xmm0
mov word [rcx + 0xe], si
movabs r14, 0x100002600
mov rcx, rbx
call fcn.14001a5f0
cmp al, 0x20
ja 0x140016fe1
movsx rax, al
bt r14, rax
jae 0x140016fe1
mov rcx, qword [rbx]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016fb7
inc rax
mov qword [rcx], rax
jmp 0x140016fb7
cmp dword [rdi + 0x30], 0
jne 0x14001701a
mov rcx, qword [rbx]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140017034
cmp byte [rax], 0x5d
jne 0x140017034
inc rax
mov qword [rcx], rax
movabs rcx, 0xffff000000000000
mov rax, qword [rbp + 0x38]
mov word [rax - 2], si
and qword [rax - 8], rcx
xor esi, esi
mov qword [rax - 0x10], rsi
mov rsi, qword [rsp + 0x30]
mov r14, qword [rsp + 0x38]
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
ret
mov r8, rbp
mov rdx, rbx
mov rcx, rdi
xor esi, esi
call fcn.140016ce0
cmp dword [rdi + 0x30], esi
jne 0x14001701a
nop dword [rax]
inc esi
mov rcx, rbx
call fcn.14001a5f0
cmp al, 0x20
ja 0x14001707c
movsx rax, al
bt r14, rax
jae 0x14001707c
mov rcx, qword [rbx]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140017052
inc rax
mov qword [rcx], rax
jmp 0x140017052
cmp dword [rdi + 0x30], 0
jne 0x14001701a
mov rcx, qword [rbx]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140017122
cmp byte [rax], 0x2c
jne 0x1400170eb
inc rax
mov qword [rcx], rax
nop dword [rax]
mov rcx, rbx
call fcn.14001a5f0
cmp al, 0x20
ja 0x1400170c4
movsx rax, al
bt r14, rax
jae 0x1400170c4
mov rcx, qword [rbx]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400170a0
jmp 0x140017097
cmp dword [rdi + 0x30], 0
jne 0x14001701a
mov r8, rbp
mov rdx, rbx
mov rcx, rdi
call fcn.140016ce0
cmp dword [rdi + 0x30], 0
je 0x140017050
jmp 0x14001701a
cmp byte [rax], 0x5d
jne 0x140017122
inc rax
mov edx, esi
mov qword [rcx], rax
mov rcx, rbp
call fcn.14001a0f0
test al, al
jne 0x14001701a
mov rax, qword [rbx]
mov rcx, qword [rax]
sub rcx, qword [rax + 8]
mov qword [rdi + 0x38], rcx
mov dword [rdi + 0x30], 0x10
jmp 0x14001701a
sub rax, qword [rcx + 8]
mov dword [rdi + 0x30], 7
mov qword [rdi + 0x38], rax
jmp 0x14001701a
mov r8, rbp
mov rdx, rbx
mov rcx, rdi
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
jmp 0x1400159c0