Function at 0x4f9a20
Capabilities:
Execute anti-debugging instructions
Get thread local storage value

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
sub esp, 0x58
mov eax, dword [sym.imp.KERNEL32.dll_TlsGetValue]
push esi
mov esi, ecx
mov dword [esp + 0x2c], 0
push edi
mov dword [esp + 0x14], esi
mov edi, dword [esi + 0x48]
mov dword [esp + 0x1c], edi
mov dword [esp + 0x3c], edi
test edi, edi
je 0x4f9a92
push dword [0x884adc]
call eax
lea ecx, [edi*4 + 0x7f]
and ecx, 0xffffff80
mov edi, dword [eax + 0xc]
mov dword [esp + 0x18], edi
lea edx, [ecx + edi]
cmp ecx, dword [eax + 8]
jg 0x4f9a7d
cmp edx, dword [eax + 0x10]
ja 0x4f9a7d
mov dword [eax + 0xc], edx
mov eax, dword [sym.imp.KERNEL32.dll_TlsGetValue]
jmp 0x4f9a98
push ecx
mov ecx, eax
call fcn.0046a3c0
mov edi, eax
mov eax, dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov dword [esp + 0x18], edi
jmp 0x4f9a98
xor edi, edi
mov dword [esp + 0x18], edi
mov ecx, dword [esp + 0x1c]
push dword [0x884c50]
or ecx, 0x80000000
mov dword [esp + 0x30], edi
cmp byte [esi + 0x24], 0
mov dword [esp + 0x28], ecx
mov dword [esp + 0x38], ecx
mov dword [esp + 0x3c], edi
mov byte [esp + 0x17], 0
je 0x4f9da0
call eax
mov edi, eax
mov ecx, dword [edi + 4]
cmp ecx, dword [edi + 0xc]
jae 0x4f9af3
mov dword [ecx], str.LtIncrementalBuild
mov dword [ecx + 0xc], str.StClear_Tree
rdtsc
mov dword [esp + 0x20], eax
mov eax, dword [esp + 0x20]
mov dword [ecx + 4], eax
lea eax, [ecx + 0x10]
mov dword [edi + 4], eax
push dword [0x884c50]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov dword [esp + 0x28], eax
mov edi, dword [eax + 4]
cmp edi, dword [eax + 0xc]
jae 0x4f9b28
mov dword [edi], str.StFind_Inactivated
rdtsc
mov dword [esp + 0x20], eax
mov ecx, dword [esp + 0x20]
lea eax, [edi + 0xc]
mov dword [edi + 4], ecx
mov ecx, dword [esp + 0x28]
mov dword [ecx + 4], eax
cmp byte [esi + 0x69], 0
je 0x4f9c23
lea eax, [esp + 0x2c]
mov ecx, esi
push eax
call fcn.004fa1a0
push dword [0x884c50]
mov byte [esp + 0x17], al
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov dword [esp + 0x24], eax
mov edi, dword [eax + 4]
cmp edi, dword [eax + 0xc]
jae 0x4f9b77
mov dword [edi], str.StUpdate_Inactive_Tree
rdtsc
mov dword [esp + 0x28], eax
mov ecx, dword [esp + 0x28]
lea eax, [edi + 0xc]
mov dword [edi + 4], ecx
mov ecx, dword [esp + 0x24]
mov dword [ecx + 4], eax
mov eax, dword [esi + 0xc]
xor edi, edi
mov dword [esp + 0x28], eax
mov eax, dword [esp + 0x2c]
mov dword [esp + 0x18], eax
cmp dword [esp + 0x30], edi
jle 0x4f9c0f
jmp 0x4f9b98
mov eax, dword [esp + 0x18]
mov edx, dword [eax + edi*4]
lea esi, [esp + 0x40]
push esi
mov dword [esp + 0x28], edx
mov ecx, dword [edx]
push ecx
mov dword [esp], 0
push dword [edx + 8]
mov eax, dword [ecx]
call dword [eax + 0x1c]
push dword [0x884c50]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov esi, dword [esp + 0x28]
mov ecx, dword [eax + 4]
cmp ecx, dword [eax + 0xc]
jae 0x4f9be1
mov dword [ecx], str.MiNum_of_Added_Nodes
mov dword [ecx + 4], 0x3f800000
add ecx, 8
mov dword [eax + 4], ecx
push dword [esp + 0x24]
lea eax, [esp + 0x44]
mov ecx, esi
push eax
call fcn.00665790
movzx eax, ax
push eax
mov eax, dword [esp + 0x1c]
push dword [eax + edi*4]
call fcn.004f9a00
inc edi
add esp, 8
cmp edi, dword [esp + 0x30]
jl 0x4f9b94
mov esi, dword [esp + 0x14]
mov eax, dword [esp + 0x3c]
mov ecx, dword [esp + 0x34]
mov byte [esi + 0x69], 0
mov dword [esp + 0x1c], eax
mov dword [esp + 0x24], ecx
push dword [0x884c50]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov dword [esp + 0x20], eax
mov edi, dword [eax + 4]
cmp edi, dword [eax + 0xc]
jae 0x4f9c58
mov dword [edi], str.StFind_Activated
rdtsc
mov dword [esp + 0x28], eax
mov ecx, dword [esp + 0x28]
lea eax, [edi + 0xc]
mov dword [edi + 4], ecx
mov ecx, dword [esp + 0x20]
mov dword [ecx + 4], eax
mov ecx, dword [esi + 0x58]
xor edi, edi
mov eax, dword [esi + 0xc]
mov dword [esp + 0x28], eax
test ecx, ecx
js 0x4f9c7d
mov eax, dword [esi + 0x50]
nop dword [eax + eax]
cmp dword [eax], 0xffffffff
jne 0x4f9c7d
inc edi
add eax, 8
cmp edi, ecx
jle 0x4f9c70
cmp edi, ecx
jg 0x4f9d2d
mov eax, dword [esi + 0x50]
mov ecx, dword [eax + edi*8]
mov esi, dword [eax + edi*8 + 4]
mov dword [esp + 0x20], ecx
push ecx
mov ecx, dword [esp + 0x18]
call fcn.004f99e0
movzx eax, ax
cmp esi, 1
jne 0x4f9d06
mov ecx, 0xffff
cmp ax, cx
je 0x4f9d06
mov esi, dword [esp + 0x20]
cmp byte [esi + 0x18], 1
jne 0x4f9d06
push dword [0x884c50]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov ecx, dword [eax + 4]
cmp ecx, dword [eax + 0xc]
jae 0x4f9ce0
mov dword [ecx], str.MiNum_of_Removed_Nodes
mov dword [ecx + 4], 0x3f800000
add ecx, 8
mov dword [eax + 4], ecx
push esi
mov esi, dword [esp + 0x18]
mov ecx, esi
call fcn.004f99e0
mov ecx, dword [esp + 0x28]
movzx eax, ax
push eax
call fcn.0066ad10
push dword [esp + 0x20]
mov ecx, esi
call fcn.004fa2f0
jmp 0x4f9d0a
mov esi, dword [esp + 0x14]
mov ecx, dword [esi + 0x58]
inc edi
cmp edi, ecx
jg 0x4f9d2d
mov eax, dword [esi + 0x50]
lea eax, [eax + edi*8]
cmp dword [eax], 0xffffffff
jne 0x4f9d25
inc edi
add eax, 8
cmp edi, ecx
jle 0x4f9d18
cmp edi, ecx
jle 0x4f9c85
push dword [0x884c50]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov dword [esp + 0x20], eax
mov edi, dword [eax + 4]
cmp edi, dword [eax + 0xc]
jae 0x4f9d62
mov dword [edi], str.StUpdate_Active
rdtsc
mov dword [esp + 0x28], eax
mov ecx, dword [esp + 0x28]
lea eax, [edi + 0xc]
mov dword [edi + 4], ecx
mov ecx, dword [esp + 0x20]
mov dword [ecx + 4], eax
push dword [ebp + 0xc]
lea eax, [esi + 0x44]
mov ecx, esi
push dword [ebp + 8]
push eax
call fcn.004f8e80
push dword [0x884c50]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov dword [esp + 0x20], eax
mov edi, dword [eax + 4]
cmp edi, dword [eax + 0xc]
jae 0x4f9e99
mov dword [edi], 0x77f784
rdtsc
mov dword [esp + 0x28], eax
jmp 0x4f9e88
call eax
mov edi, eax
mov ecx, dword [edi + 4]
cmp ecx, dword [edi + 0xc]
jae 0x4f9dcc
mov dword [ecx], str.LtDynamicBuild
mov dword [ecx + 0xc], str.StGather
rdtsc
mov dword [esp + 0x28], eax
mov eax, dword [esp + 0x28]
mov dword [ecx + 4], eax
lea eax, [ecx + 0x10]
mov dword [edi + 4], eax
push dword [esi + 0x28]
lea eax, [esi + 0x44]
mov dword [esi + 0x48], 0
push eax
call fcn.004f8bf0
add esp, 8
push dword [0x884c50]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov dword [esp + 0x20], eax
mov edi, dword [eax + 4]
cmp edi, dword [eax + 0xc]
jae 0x4f9e17
mov dword [edi], str.StClear
rdtsc
mov dword [esp + 0x28], eax
mov ecx, dword [esp + 0x28]
lea eax, [edi + 0xc]
mov dword [edi + 4], ecx
mov ecx, dword [esp + 0x20]
mov dword [ecx + 4], eax
push dword [0x884c50]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov dword [esp + 0x20], eax
mov edi, dword [eax + 4]
cmp edi, dword [eax + 0xc]
jae 0x4f9e4c
mov dword [edi], str.StRebuild
rdtsc
mov dword [esp + 0x28], eax
mov ecx, dword [esp + 0x28]
lea eax, [edi + 0xc]
mov dword [edi + 4], ecx
mov ecx, dword [esp + 0x20]
mov dword [ecx + 4], eax
push dword [ebp + 0xc]
lea eax, [esi + 0x44]
mov ecx, esi
push dword [ebp + 8]
push dword [esi + 0x28]
push eax
lea eax, [esi + 0x10]
push eax
call fcn.004f9450
push dword [0x884c50]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov dword [esp + 0x20], eax
mov edi, dword [eax + 4]
cmp edi, dword [eax + 0xc]
jae 0x4f9e99
mov dword [edi], 0x77f784
rdtsc
mov dword [esp + 0x28], eax
mov ecx, dword [esp + 0x28]
lea eax, [edi + 0xc]
mov dword [edi + 4], ecx
mov ecx, dword [esp + 0x20]
mov dword [ecx + 4], eax
mov ecx, esi
call fcn.004f99a0
cmp byte [esp + 0x13], 0
je 0x4f9eab
mov byte [esi + 0x69], 1
mov eax, dword [esp + 0x1c]
push dword [0x884adc]
lea esi, [eax*4 + 0x7f]
and esi, 0xffffff80
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
lea edx, [esi + 0xf]
and edx, 0xfffffff0
cmp esi, dword [eax + 8]
mov esi, dword [esp + 0x38]
jg 0x4f9ee6
lea ecx, [esi + edx]
cmp ecx, dword [eax + 0xc]
jne 0x4f9ee6
cmp dword [eax + 0x14], esi
je 0x4f9ee6
mov dword [eax + 0xc], esi
jmp 0x4f9eef
push edx
push esi
mov ecx, eax
call fcn.0046a590
mov eax, dword [esp + 0x24]
test eax, eax
js 0x4f9f11
and eax, 0x3fffffff
mov ecx, 0x7d8954
shl eax, 2
push eax
mov eax, dword [0x7d8954]
push dword [esp + 0x1c]
call dword [eax + 0x10]
pop edi
pop esi
mov esp, ebp
pop ebp
ret 8