Function at 0x1400156e0
Capabilities:
Allocate thread local storage
Check mutex on windows
Create thread
Initialize winsock library
Set thread local storage value

Disassembly:
push rbp
push rdi
push r12
push r13
lea rbp, [rsp - 0x1d8]
sub rsp, 0x2d8
mov rax, qword [0x140067008]
xor rax, rsp
mov qword [rbp + 0x1b0], rax
mov qword [rsp + 0x38], rcx
lea rdx, [rbp - 0x70]
xor edi, edi
mov ecx, 0x202
mov qword [rsp + 0x30], rdi
mov r12, r8
call qword [sym.imp.WS2_32.dll_WSAStartup]
mov edx, 0x680
lea ecx, [rdi + 1]
call fcn.140031998
mov r13, rax
test rax, rax
je 0x140015924
xorps xmm0, xmm0
movaps xmmword [rsp + 0x2c0], xmm6
movups xmmword [rbp - 0x80], xmm0
movsd xmm0, qword [0x14006a918]
xorps xmm6, xmm6
ucomisd xmm0, xmm6
jp 0x1400157b6
jne 0x1400157b6
lea rcx, [rsp + 0x78]
call qword [sym.imp.KERNEL32.dll_QueryPerformanceFrequency]
mov rcx, qword [rsp + 0x78]
xorps xmm1, xmm1
test rcx, rcx
js 0x14001577f
cvtsi2sd xmm1, rcx
jmp 0x140015794
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
movsd xmm0, qword [0x140060400]
divsd xmm0, xmm1
ucomisd xmm0, xmm6
movsd qword [0x14006a918], xmm0
jp 0x1400157b6
jne 0x1400157b6
mov r11d, dword [rbp - 0x78]
jmp 0x140015818
lea rcx, [rsp + 0x78]
call qword [sym.imp.KERNEL32.dll_QueryPerformanceCounter]
mov rcx, qword [rsp + 0x78]
xorps xmm1, xmm1
test rcx, rcx
js 0x1400157d5
cvtsi2sd xmm1, rcx
jmp 0x1400157ea
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
mulsd xmm1, qword [0x14006a918]
xorps xmm0, xmm0
cvttsd2si rax, xmm1
mov qword [rbp - 0x80], rax
cvtsi2sd xmm0, rax
subsd xmm1, xmm0
mulsd xmm1, qword [0x140060410]
cvttsd2si r11d, xmm1
mov dword [rbp - 0x78], r11d
mov rax, qword [0x14006a948]
movaps xmm6, xmmword [rsp + 0x2c0]
test rax, rax
jne 0x140015864
xor ecx, ecx
call fcn.1400315f0
movsxd r11, dword [rbp - 0x78]
lea r10, [rbp - 0x80]
mov rcx, qword [rbp - 0x80]
mov r9, rax
shl r9, 0xc
lea rax, [rbp - 0x80]
xor r9, qword [rbp - 0x80]
shl rcx, 0x19
shl r9, 0x15
add rcx, r11
xor r9, r11
add r10, rcx
xor r9, rax
jmp 0x1400158a8
mov r10, qword [0x14006a8f8]
lea r9, [rax + rax]
xor r9, rax
movabs rcx, 0x5851f42d4c957f2d
shl r9, 2
xor r9, rax
add r9, r9
xor r9, rax
shr rax, 1
imul r10, rcx
and r9, 0xfffffffffffffff0
movabs rcx, 0x14057b7ef767814f
add r10, rcx
shl r9, 0x3b
or r9, rax
movsxd rax, r11d
xor rax, r12
mov qword [0x14006a948], r9
xor rax, r10
mov qword [0x14006a8f8], r10
xor rax, r9
mov qword [r13 + 0x658], rax
mov eax, 1
lock xadd dword [0x14006aeb0], eax
inc eax
cmp eax, 1
jne 0x14001592b
lea rcx, [0x14006a920]
call qword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
call qword [sym.imp.KERNEL32.dll_TlsAlloc]
mov dword [0x14006aeb8], eax
cmp eax, 0xffffffff
jne 0x140015936
lock dec dword [0x14006aeb0]
lea rdx, str.Cannot_initialize_thread_local_storage
lea rcx, [0x14006a950]
mov qword [0x14006ade0], r13
call fcn.1400079a0
mov rcx, r13
call fcn.14002da28
xor eax, eax
jmp 0x140015bd0
mov ecx, 1
call qword [sym.imp.KERNEL32.dll_Sleep]
mov qword [rsp + 0x300], rbx
mov eax, 1
mov qword [rsp + 0x308], rsi
mov qword [rsp + 0x318], r14
mov qword [rsp + 0x2d0], r15
mov dword [rsp + 0x68], 0xffffffff
lock xadd dword [0x14006a908], eax
mov ecx, dword [0x14006aeb8]
lea rdx, [rsp + 0x68]
inc eax
mov qword [rsp + 0x70], rdi
mov dword [rsp + 0x6c], eax
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
xor r8d, r8d
xor edx, edx
xor ecx, ecx
call qword [sym.imp.KERNEL32.dll_CreateMutexA]
lea rcx, [r13 + 0x1c8]
mov qword [r13 + 0x1c0], rax
mov r15, rax
call qword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
mov edx, 8
mov dword [r13 + 0x1f0], edi
mov ecx, 0x10000
call fcn.140031998
lea rcx, [r13 + 0x600]
mov qword [r13 + 0x1f8], rax
mov r14, rax
call qword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
mov edx, 8
mov dword [r13 + 0x628], edi
mov ecx, 0x10000
call fcn.140031998
lea rcx, [r13 + 0x5c8]
mov qword [r13 + 0x630], rax
mov rsi, rax
call qword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
mov edx, 8
mov dword [r13 + 0x5f0], edi
mov ecx, 0x10000
call fcn.140031998
xor r8d, r8d
mov qword [r13 + 0x5f8], rax
xor edx, edx
xor ecx, ecx
mov rdi, rax
call qword [sym.imp.KERNEL32.dll_CreateMutexA]
xor edx, edx
mov qword [r13 + 0x660], rax
test r14, r14
mov r8, rax
setne dl
xor ecx, ecx
test r15, r15
setne cl
and edx, ecx
xor ecx, ecx
test rsi, rsi
cmovne ecx, edx
xor esi, esi
test rdi, rdi
mov eax, esi
setne al
and ecx, eax
mov eax, esi
test r8, r8
cmovne eax, ecx
test eax, eax
jne 0x140015a95
lea rdx, str.Cannot_initialize_thread_synchronization_objects
mov qword [0x14006ade0], r13
lea rcx, [0x14006a950]
call fcn.1400079a0
mov rcx, r13
call fcn.14002da28
jmp 0x140015ba0
mov rax, qword [rsp + 0x38]
test rax, rax
je 0x140015af6
movaps xmm0, xmmword [rax]
movaps xmm1, xmmword [rax + 0x10]
movups xmmword [r13 + 0x138], xmm0
movaps xmm0, xmmword [rax + 0x20]
movups xmmword [r13 + 0x148], xmm1
movaps xmm1, xmmword [rax + 0x30]
movups xmmword [r13 + 0x158], xmm0
movaps xmm0, xmmword [rax + 0x40]
movups xmmword [r13 + 0x168], xmm1
movaps xmm1, xmmword [rax + 0x50]
mov rax, qword [rax + 0x58]
movups xmmword [r13 + 0x178], xmm0
mov qword [rsp + 0x30], rax
movups xmmword [r13 + 0x188], xmm1
mov qword [r13 + 0x190], rsi
mov qword [r13 + 0x198], rsi
mov r15, 0xffffffffffffffff
mov qword [r13 + 0x678], rsi
lea r10, str.cgi_pattern
test r12, r12
je 0x140015cad
mov r9, qword [r12]
test r9, r9
je 0x140015cad
mov rax, qword [str.cgi_pattern]
mov rbx, rsi
test rax, rax
je 0x140015b7b
nop word [rax + rax]
mov r8, r9
sub r8, rax
nop word [rax + rax]
movzx edx, byte [rax]
movzx ecx, byte [rax + r8]
sub edx, ecx
jne 0x140015b63
inc rax
test ecx, ecx
jne 0x140015b50
test edx, edx
je 0x140015bed
inc rbx
lea rax, [rbx + rbx*2]
mov rax, qword [r10 + rax*8]
test rax, rax
jne 0x140015b40
mov qword [0x14006ade0], r13
lea rdx, str.Invalid_option:__s
mov r8, r9
lea rcx, [0x14006a950]
call fcn.1400079a0
mov rcx, r13
call fcn.140015510
mov ecx, dword [0x14006aeb8]
xor edx, edx
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
xor eax, eax
mov r14, qword [rsp + 0x318]
mov rsi, qword [rsp + 0x308]
mov rbx, qword [rsp + 0x300]
mov r15, qword [rsp + 0x2d0]
mov rcx, qword [rbp + 0x1b0]
xor rcx, rsp
call fcn.14002b5c0
add rsp, 0x2d8
pop r13
pop r12
pop rdi
pop rbp
ret
cmp rbx, r15
je 0x140015b7b
mov rdi, qword [r12 + 8]
add r12, 0x10
test rdi, rdi
je 0x140015c97
cmp qword [r13 + rbx*8 + 0x10], 0
je 0x140015c33
mov r8, r9
mov qword [0x14006ade0], r13
lea rdx, str.warning:__s:_duplicate_option
lea rcx, [0x14006a950]
call fcn.1400079a0
mov rcx, qword [r13 + rbx*8 + 0x10]
call fcn.14002da28
mov rax, r15
nop word [rax + rax]
cmp byte [rdi + rax + 1], 0
lea rax, [rax + 1]
jne 0x140015c40
lea rsi, [rax + 1]
mov rcx, rsi
call fcn.14002da3c
mov rdx, rax
test rax, rax
je 0x140015c8b
cmp byte [rdi], 0
mov rcx, rax
je 0x140015c88
sub rdi, rax
nop word [rax + rax]
cmp rsi, 1
jbe 0x140015c88
movzx eax, byte [rdi + rcx]
dec rsi
mov byte [rcx], al
inc rcx
cmp byte [rdi + rcx], 0
jne 0x140015c70
mov byte [rcx], 0
mov qword [r13 + rbx*8 + 0x10], rdx
xor esi, esi
jmp 0x140015b0b
mov qword [0x14006ade0], r13
lea rdx, str._s:_option_value_cannot_be_NULL
mov r8, r9
jmp 0x140015b8c
cmp qword [str.cgi_pattern], 0
mov r14d, esi
je 0x140015d42
xor eax, eax
cmp qword [r13 + rsi*8 + 0x10], 0
jne 0x140015d27
mov rbx, qword [rax + r10 + 0x10]
test rbx, rbx
je 0x140015d27
mov rax, r15
cmp byte [rbx + rax + 1], 0
lea rax, [rax + 1]
jne 0x140015cd5
lea rdi, [rax + 1]
mov rcx, rdi
call fcn.14002da3c
mov rdx, rax
test rax, rax
je 0x140015d1b
cmp byte [rbx], 0
mov rcx, rax
je 0x140015d18
sub rbx, rax
nop
cmp rdi, 1
jbe 0x140015d18
movzx eax, byte [rbx + rcx]
dec rdi
mov byte [rcx], al
inc rcx
cmp byte [rbx + rcx], 0
jne 0x140015d00
mov byte [rcx], 0
mov qword [r13 + rsi*8 + 0x10], rdx
lea r10, str.cgi_pattern
inc r14d
mov esi, r14d
lea rax, [r14 + r14*2]
lea rax, [rax*8]
cmp qword [rax + r10], 0
jne 0x140015cc0
xor esi, esi
call qword [sym.imp.KERNEL32.dll_GetVersion]
movzx r9d, ax
lea rdx, str.Windows__u._u
shr r9d, 8
lea rcx, [rbp + 0x130]
movzx r8d, al
call fcn.140006920
lea rcx, [rbp + 0x130]
mov rax, 0xffffffffffffffff
cmp byte [rcx + rax + 1], 0
lea rax, [rax + 1]
jne 0x140015d75
lea rbx, [rax + 1]
mov rcx, rbx
call fcn.14002da3c
mov r8, rax
test rax, rax
je 0x140015dcb
cmp byte [rbp + 0x130], 0
mov rcx, rax
je 0x140015dc8
lea rdx, [rbp + 0x130]
sub rdx, rax
nop word [rax + rax]
cmp rbx, 1
jbe 0x140015dc8
movzx eax, byte [rdx + rcx]
dec rbx
mov byte [rcx], al
inc rcx
cmp byte [rdx + rcx], 0
jne 0x140015db0
mov byte [rcx], 0
mov qword [r13 + 0x670], r8
xorps xmm0, xmm0
mov rbx, qword [r13 + 0x68]
mov qword [rsp + 0x40], rsi
mov qword [rsp + 0x58], rsi
mov qword [rsp + 0x60], 0
movdqu xmmword [rsp + 0x48], xmm0
test rbx, rbx
je 0x140015e48
lea r8, [rsp + 0x40]
mov qword [0x14006ade0], r13
mov rdx, rbx
lea rcx, [0x14006a950]
call fcn.140008f70
test eax, eax
jne 0x140015e48
mov qword [0x14006ade0], r13
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov ecx, eax
call fcn.14003d3fc
mov r9, rax
lea rdx, str.Cannot_open__s:__s
mov r8, rbx
lea rcx, [0x14006a950]
call fcn.1400079a0
jmp 0x140015b98
mov rcx, r13
call fcn.1400133b0
test eax, eax
je 0x140015b98
mov rcx, r13
call fcn.1400123f0
test eax, eax
je 0x140015b98
mov edx, 0x7f000001
mov rcx, r13
call fcn.140012cf0
cmp eax, 0xffffffff
je 0x140015b98
mov rcx, qword [r13 + 0xa8]
call fcn.140036e20
cmp eax, 0x10000
jle 0x140015eb0
lea rdx, str.Too_many_worker_threads
mov qword [0x14006ade0], r13
lea rcx, [0x14006a950]
call fcn.1400079a0
jmp 0x140015b98
test eax, eax
jle 0x140015ef2
mov ecx, eax
mov edx, 8
mov dword [r13 + 0x640], eax
call fcn.140031998
mov qword [r13 + 0x648], rax
test rax, rax
jne 0x140015ef2
lea rdx, str.Not_enough_memory_for_worker_thread_ID_array
mov qword [0x14006ade0], r13
lea rcx, [0x14006a950]
call fcn.1400079a0
jmp 0x140015b98
mov rax, qword [r13 + 0x180]
test rax, rax
je 0x140015f03
mov rcx, r13
call rax
mov rax, qword [rsp + 0x30]
lea r8, [0x140015500]
mov qword [rsp + 0x28], rsi
lea rbx, [r13 + 0x638]
mov r9, r13
mov qword [r13 + 0x190], rax
xor edx, edx
mov dword [r13 + 0x1a0], 1
xor ecx, ecx
mov dword [rsp + 0x20], esi
call fcn.14003374c
cmp rax, 0xffffffffffffffff
je 0x140015f4b
test rbx, rbx
je 0x140015f4b
mov qword [rbx], rax
cmp dword [r13 + 0x640], 0
mov ebx, esi
jbe 0x140015fd1
nop word [rax + rax]
mov rcx, qword [r13 + 0x1c0]
mov edx, 0xffffffff
call qword [sym.imp.KERNEL32.dll_WaitForSingleObject]
mov eax, dword [r13 + 0x1bc]
mov rcx, qword [r13 + 0x1c0]
inc eax
mov dword [r13 + 0x1bc], eax
call qword [sym.imp.KERNEL32.dll_ReleaseMutex]
mov rax, qword [r13 + 0x648]
lea r8, [0x140014c10]
mov ecx, ebx
mov r9, r13
mov qword [rsp + 0x28], rsi
xor edx, edx
mov dword [rsp + 0x20], esi
lea rdi, [rax + rcx*8]
xor ecx, ecx
call fcn.14003374c
cmp rax, 0xffffffffffffffff
je 0x140015fe7
test rdi, rdi
je 0x140015fe7
inc ebx
mov qword [rdi], rax
cmp ebx, dword [r13 + 0x640]
jb 0x140015f60
mov ecx, dword [0x14006aeb8]
xor edx, edx
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
mov rax, r13
jmp 0x140015bb0
mov rcx, qword [r13 + 0x1c0]
mov edx, 0xffffffff
call qword [sym.imp.KERNEL32.dll_WaitForSingleObject]
mov eax, dword [r13 + 0x1bc]
mov rcx, qword [r13 + 0x1c0]
dec eax
mov dword [r13 + 0x1bc], eax
call qword [sym.imp.KERNEL32.dll_ReleaseMutex]
mov qword [0x14006ade0], r13
call qword [sym.imp.KERNEL32.dll_GetLastError]
lea rcx, [0x14006a950]
test ebx, ebx
je 0x140016043
mov r9d, eax
lea r8d, [rbx + 1]
lea rdx, str.Cannot_start_worker_thread__i:_error__ld
call fcn.1400079a0
jmp 0x140015fd1
mov r8d, eax
lea rdx, str.Cannot_create_threads:_error__ld
call fcn.1400079a0
jmp 0x140015b98