Function at 0x140104560
Capabilities:
Allocate thread local storage
Create thread
Get thread local storage value
Set thread local storage value

Disassembly:
mov qword [rsp + 8], rbx
push rsi
push rdi
push r12
push r14
push r15
sub rsp, 0x70
movzx ebx, cl
mov r14d, 1
cmp dword [0x14037a2e0], 0xffffffff
jne 0x1401045dc
mov rax, qword [0x140385770]
test rax, rax
jne 0x14010459a
lock cmpxchg qword [0x140385770], r14
je 0x1401045a6
lea rcx, [0x140385770]
call fcn.140107100
cmp dword [0x14037a2e0], 0xffffffff
je 0x1401045ce
xor r15d, r15d
mov rax, r14
lock cmpxchg qword [0x140385770], r15
je 0x1401045df
lea rcx, [0x140385770]
call fcn.1401076c0
jmp 0x1401045df
call qword [sym.imp.KERNEL32.dll_TlsAlloc]
mov dword [0x14037a2e0], eax
jmp 0x1401045af
xor r15d, r15d
mov ecx, dword [0x14037a2e0]
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov rsi, rax
test rax, rax
jne 0x14010469c
test bl, bl
je 0x14010469c
mov ecx, 0x98
call fcn.140214338
mov qword [rsp + 0xb0], rax
mov edx, r14d
mov rcx, rax
call fcn.1400ed540
mov rsi, rax
mov qword [rsp + 0x50], rax
mov rdx, rax
mov ecx, dword [0x14037a2e0]
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
nop
mov ecx, 0x10
call fcn.140214338
mov qword [rsp + 0xb0], rax
mov rdx, rsi
mov rcx, rax
call fcn.1400ed370
nop
mov qword [rsp + 0xb0], rax
mov rax, qword [rsp + 0xb0]
nop
nop
mov qword [rsi + 0x60], rax
mov rcx, rsi
call fcn.1400ee040
mov byte [rsi + 0x92], 1
call qword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
mov eax, eax
mov qword [rsi + 0x68], rax
mov rax, qword [0x1403855d8]
nop
test rax, rax
jne 0x1401046b4
mov rax, qword [rsi + 0x60]
nop
mov qword [0x1403855d8], rax
mov rax, rsi
mov rbx, qword [rsp + 0xa0]
add rsp, 0x70
pop r15
pop r14
pop r12
pop rdi
pop rsi
ret
mov qword [rsp + 0xa8], 0xffffffffffffffff
call qword [sym.imp.KERNEL32.dll_GetCurrentProcess]
mov rdi, rax
call qword [sym.imp.KERNEL32.dll_GetCurrentThread]
mov rbx, rax
call qword [sym.imp.KERNEL32.dll_GetCurrentProcess]
mov dword [rsp + 0x30], 2
mov dword [rsp + 0x28], r15d
mov dword [rsp + 0x20], r15d
lea r9, [rsp + 0xa8]
mov r8, rdi
mov rdx, rbx
mov rcx, rax
call qword [sym.imp.KERNEL32.dll_DuplicateHandle]
mov rdi, qword [rsi + 0x60]
nop
mov rbx, qword [rsp + 0xa8]
lea r12, [0x140385760]
mov qword [rsp + 0x58], r12
mov rax, qword [0x140385760]
test rax, rax
jne 0x140104731
lock cmpxchg qword [0x140385760], r14
je 0x140104739
mov rcx, r12
call fcn.140107100
mov byte [rsp + 0x60], 1
call qword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
cmp eax, dword [0x140385768]
jne 0x140104775
mov rcx, rbx
call qword [sym.imp.KERNEL32.dll_CloseHandle]
nop
mov rax, r14
lock cmpxchg qword [0x140385760], r15
je 0x14010469c
mov rcx, r12
call fcn.1401076c0
jmp 0x14010469c
mov qword [rsp + 0xb8], rbx
lea r8, [rsp + 0xb8]
mov rdx, qword [0x140385790]
lea rcx, [0x140385780]
call fcn.140097fb0
mov rax, qword [0x140385780]
test rax, rax
je 0x1401047ab
mov eax, dword [rax]
cmp eax, 1
jle 0x1401047bf
xor r9d, r9d
xor r8d, r8d
xor edx, edx
lea rcx, [0x140385780]
call fcn.1400a12a0
mov qword [rsp + 0x40], rdi
lea r8, [rsp + 0x40]
mov rdx, qword [0x1403857a8]
lea rcx, [0x140385798]
call fcn.140097fb0
mov rax, qword [0x140385798]
test rax, rax
je 0x1401047ef
mov eax, dword [rax]
cmp eax, 1
jle 0x140104803
xor r9d, r9d
xor r8d, r8d
xor edx, edx
lea rcx, [0x140385798]
call fcn.1400a12a0
cmp dword [0x140385768], 0
jne 0x140104872
cmp qword [0x1403857b0], 0
jne 0x140104845
xor r9d, r9d
xor r8d, r8d
xor edx, edx
xor ecx, ecx
call qword [sym.imp.KERNEL32.dll_CreateEventW]
mov qword [0x1403857b0], rax
mov qword [rsp + 0x48], rax
lea r8, [rsp + 0x48]
xor edx, edx
lea rcx, [0x140385780]
call fcn.140097fb0
lea rax, [0x140385768]
mov qword [rsp + 0x28], rax
mov dword [rsp + 0x20], r15d
xor r9d, r9d
lea r8, [0x140104ab0]
xor edx, edx
xor ecx, ecx
call qword [sym.imp.KERNEL32.dll_CreateThread]
mov rcx, rax
jmp 0x14010474f
mov rcx, qword [0x1403857b0]
call qword [sym.imp.KERNEL32.dll_SetEvent]
jmp 0x140104756