Function at 0x40e470
Capabilities:
Get common file path

Disassembly:
push 0xffffffffffffffff
push 0x489246
mov eax, dword fs:[0]
push eax
sub esp, 0x63c
mov eax, dword [0x504a70]
xor eax, esp
mov dword [esp + 0x638], eax
push ebx
push ebp
push esi
push edi
mov eax, dword [0x504a70]
xor eax, esp
push eax
lea eax, [esp + 0x650]
mov dword fs:[0], eax
mov esi, ecx
mov edi, edx
mov dword [esp + 0x20], edi
call fcn.0045e8af
xor ecx, ecx
test eax, eax
setne cl
test ecx, ecx
jne 0x40e4cd
push 0x80004005
call fcn.00401440
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
add eax, 0x10
mov dword [esp + 0x1c], eax
test esi, esi
mov dword [esp + 0x658], 0
mov ecx, dword [0x507158]
mov eax, dword [ecx + 0x18]
jl 0x40f1a7
cmp esi, dword [eax + 8]
jge 0x40f1a7
mov edx, dword [eax + 4]
mov ebp, dword [edx + esi*4]
lea esi, [edx + esi*4]
mov dword [edi + 0x24], ebp
movzx eax, byte [ebp + 9]
movzx ecx, byte [ebp + 8]
mov bl, byte [ebp + 0xa]
push eax
push ecx
call fcn.00410b40
push 0x3ff
lea edx, [esp + 0x251]
push 0
push edx
mov byte [esp + 0x258], 0
call fcn.0046ac40
add esp, 0xc
xor esi, esi
mov ecx, dword [ebp + 0x80]
push esi
call fcn.0042d210
mov byte [esp + esi + 0x24c], al
add esi, 1
cmp esi, 0x400
jl 0x40e541
push 0x400
lea eax, [esp + 0x250]
push eax
lea ecx, [esp + 0x1c]
push ecx
call fcn.0041f160
add esp, 0xc
mov byte [esp + 0x658], 1
mov edx, dword [eax]
push edx
push str._nBIOS:_n_s_n_n
push 0x54a128
call fcn.0040d1b0
mov byte [esp + 0x664], 0
mov eax, dword [esp + 0x20]
add eax, 0xfffffff0
add esp, 0xc
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40e5be
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
push 0x400
lea ecx, [esp + 0x250]
push ecx
lea edx, [esp + 0x1c]
mov esi, 0x158
push edx
mov dword [esp + 0x38], esi
mov dword [esp + 0x3c], 0x4018
mov dword [esp + 0x40], 0x5428
mov dword [esp + 0x44], 0xf8
mov dword [esp + 0x48], 0x140
mov dword [esp + 0x4c], 0xffffffff
call fcn.0041f160
add esp, 0xc
mov byte [esp + 0x658], 2
mov eax, dword [eax]
push eax
push str._nRegisters:_n
push 0x54a128
call fcn.0040d1b0
mov byte [esp + 0x664], 0
mov eax, dword [esp + 0x20]
add eax, 0xfffffff0
add esp, 0xc
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40e64e
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
xor ebx, ebx
push esi
mov ecx, ebp
call fcn.00422bf0
push eax
push esi
push str._08X:__08X_n
push 0x54a128
call fcn.0040d1b0
mov esi, dword [esp + ebx*4 + 0x40]
add ebx, 1
add esp, 0x10
cmp esi, 0xffffffff
jne 0x40e650
push 2
push 0x4f2158
mov ecx, 0x54a128
call fcn.00407d00
mov esi, dword [ebp + 0x34]
push ecx
mov ecx, dword [esi - 0x10]
mov edx, dword [ecx]
mov eax, dword [edx + 0x10]
sub esi, 0x10
mov dword [esp + 0x1c], esp
mov edi, esp
call eax
cmp dword [esi + 0xc], 0
lea edx, [esi + 0xc]
jl 0x40e6ba
cmp eax, dword [esi]
jne 0x40e6ba
mov ebx, esi
mov ecx, 1
lock xadd dword [edx], ecx
jmp 0x40e6f6
mov ecx, dword [esi + 4]
mov edx, dword [eax]
mov edx, dword [edx]
push 2
push ecx
mov ecx, eax
call edx
mov ebx, eax
test ebx, ebx
jne 0x40e6d3
jmp fcn.00404c00
mov eax, dword [esi + 4]
mov dword [ebx + 4], eax
mov eax, dword [esi + 4]
lea ecx, [eax + eax + 2]
push ecx
add esi, 0x10
lea edx, [eax + eax + 2]
push esi
push edx
lea eax, [ebx + 0x10]
push eax
call fcn.0046925a
add esp, 0x10
add ebx, 0x10
mov dword [edi], ebx
push ecx
mov byte [esp + 0x660], 3
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.CardName
call fcn.00403e00
mov edi, dword [esp + 0x28]
mov ecx, edi
mov byte [esp + 0x660], 0
call fcn.0040cf00
mov esi, dword [ebp + 0x30]
push ecx
mov ecx, dword [esi - 0x10]
mov edx, dword [ecx]
mov eax, dword [edx + 0x10]
sub esi, 0x10
mov dword [esp + 0x1c], esp
mov dword [esp + 0x18], esp
call eax
cmp dword [esi + 0xc], 0
lea edx, [esi + 0xc]
jl 0x40e75a
cmp eax, dword [esi]
jne 0x40e75a
mov ebx, esi
mov ecx, 1
lock xadd dword [edx], ecx
jmp 0x40e796
mov ecx, dword [esi + 4]
mov edx, dword [eax]
mov edx, dword [edx]
push 2
push ecx
mov ecx, eax
call edx
mov ebx, eax
test ebx, ebx
jne 0x40e773
jmp fcn.00404c00
mov eax, dword [esi + 4]
mov dword [ebx + 4], eax
mov eax, dword [esi + 4]
lea ecx, [eax + eax + 2]
push ecx
add esi, 0x10
lea edx, [eax + eax + 2]
push esi
push edx
lea eax, [ebx + 0x10]
push eax
call fcn.0046925a
add esp, 0x10
mov ecx, dword [esp + 0x18]
add ebx, 0x10
mov dword [ecx], ebx
push ecx
mov byte [esp + 0x660], 4
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.GPUName
call fcn.00403e00
mov ecx, edi
mov byte [esp + 0x660], 0
call fcn.0040cf00
mov eax, dword [ebp + 0xf0]
test eax, eax
jbe 0x40e80d
push ecx
mov esi, esp
mov dword [esp + 0x1c], esp
push eax
push 0x4f2b98
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 5
mov ecx, esp
mov dword [esp + 0x1c], esp
push 0x4f21d0
call fcn.00403e00
mov ecx, edi
mov byte [esp + 0x660], 0
call fcn.0040cf00
mov eax, dword [ebp + 0xf4]
test eax, eax
jbe 0x40e853
push ecx
mov esi, esp
mov dword [esp + 0x1c], esp
push eax
push 0x4f2b98
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 6
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.DieSize
call fcn.00403e00
mov ecx, edi
mov byte [esp + 0x660], 0
call fcn.0040cf00
push ecx
mov ecx, dword [ebp + 0x80]
mov edx, esp
mov dword [esp + 0x1c], esp
push edx
call fcn.0042d970
push ecx
mov byte [esp + 0x660], 7
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.BIOSVersion
call fcn.00403e00
mov ecx, edi
mov byte [esp + 0x660], 0
call fcn.0040cf00
movzx eax, word [ebp + 0x14]
push ecx
mov esi, esp
mov dword [esp + 0x1c], esp
push eax
push str._04X
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 8
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.DeviceID
call fcn.00403e00
mov ecx, edi
mov byte [esp + 0x660], 0
call fcn.0040cf00
mov di, word [ebp + 0x10]
push ecx
mov eax, esp
mov dword [esp + 0x1c], esp
call fcn.0040d330
push ecx
mov byte [esp + 0x660], 9
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.Vendor
call fcn.00403e00
mov ebx, dword [esp + 0x28]
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
movzx ecx, word [ebp + 0x10]
push ecx
mov esi, esp
mov dword [esp + 0x1c], esp
push ecx
push str._04X
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 0xa
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.VendorID
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
movzx edx, byte [ebp + 0xa]
movzx eax, byte [ebp + 9]
movzx ecx, byte [ebp + 8]
push 0x2c
push edx
push eax
push ecx
mov ecx, dword [0x50715c]
call fcn.00421420
push ecx
mov dword [esp + 0x1c], esp
mov edi, eax
mov eax, esp
call fcn.0040d330
push ecx
mov byte [esp + 0x660], 0xb
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.Subvendor
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
movzx edx, byte [ebp + 0xa]
movzx eax, byte [ebp + 9]
movzx ecx, byte [ebp + 8]
push 0x2c
push edx
push eax
push ecx
mov ecx, dword [0x50715c]
call fcn.00421420
push ecx
movzx edx, ax
mov esi, esp
mov dword [esp + 0x1c], esp
push edx
push str._04X
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 0xc
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.SubvendorID
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
movzx eax, byte [ebp + 0xa]
movzx ecx, byte [ebp + 9]
movzx edx, byte [ebp + 8]
push 0x2e
push eax
push ecx
mov ecx, dword [0x50715c]
push edx
call fcn.00421420
push ecx
movzx eax, ax
mov esi, esp
mov dword [esp + 0x1c], esp
push eax
push str._04X
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 0xd
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.SubsysID
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
movzx edx, byte [ebp + 0xa]
movzx eax, byte [ebp + 9]
push ecx
mov ecx, esp
mov dword [esp + 0x1c], esp
push edx
movzx edx, byte [ebp + 8]
push eax
push edx
push ecx
call fcn.00410c80
push ecx
mov byte [esp + 0x660], 0xe
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.BusInterface
call fcn.00403e00
mov byte [esp + 0x660], 0
mov ecx, ebx
call fcn.0040cf00
cmp word [ebp + 0xe6], 0
je 0x40eb17
movzx eax, word [ebp + 0xe0]
push ecx
mov esi, esp
mov dword [esp + 0x1c], esp
push eax
push 0x4f2b98
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 0xf
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.NumROPs
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
movzx ecx, word [ebp + 0xe6]
push ecx
mov esi, esp
mov dword [esp + 0x1c], esp
push ecx
push 0x4f2b98
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 0x10
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.NumShadersUnified
jmp 0x40ebcf
mov ecx, ebp
call fcn.00423b10
push ecx
movzx edx, ax
mov esi, esp
mov dword [esp + 0x1c], esp
push edx
push 0x4f2b98
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 0x11
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.NumROPs
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
movzx eax, word [ebp + 0xe4]
push ecx
mov esi, esp
mov dword [esp + 0x1c], esp
push eax
push 0x4f2b98
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 0x12
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.NumShadersPixel
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
movzx ecx, word [ebp + 0xe2]
push ecx
mov esi, esp
mov dword [esp + 0x1c], esp
push ecx
push 0x4f2b98
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 0x13
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.NumShadersVertex
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
push ecx
lea edx, [ebp + 0x108]
mov esi, esp
mov dword [esp + 0x1c], esp
push edx
push 0x4f20e4
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 0x14
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.DirectXSupport
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
push ecx
lea eax, [ebp + 0xf8]
mov esi, esp
mov dword [esp + 0x1c], esp
push eax
push 0x4f20e4
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 0x15
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.ShaderModel
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
push ecx
mov ecx, esp
mov dword [esp + 0x1c], esp
push ecx
mov ecx, ebp
call fcn.00425f40
push ecx
mov byte [esp + 0x660], 0x16
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.MemType
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
movzx edx, word [ebp + 0x20]
push ecx
mov esi, esp
mov dword [esp + 0x1c], esp
push edx
push 0x4f2b98
call fcn.00412cd0
add esp, 4
mov byte [esp + 0x660], 0x17
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.MemBusWidth
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
mov eax, dword [ebp + 0x1c]
push ecx
shr eax, 0x14
mov esi, esp
mov dword [esp + 0x1c], esp
push eax
push 0x4f2b98
call fcn.00412cd0
mov byte [esp + 0x664], 0x18
add esp, 4
mov ecx, esp
mov dword [esp + 0x1c], esp
push str.MemSize
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0
call fcn.0040cf00
push 0x4f1164
lea ecx, [esp + 0x28]
call fcn.00403e00
mov byte [esp + 0x658], 0x19
mov eax, dword [ebp + 0x7c]
mov ecx, 0x4f1164
mov edi, edi
mov dx, word [eax]
cmp dx, word [ecx]
jne 0x40ed66
test dx, dx
je 0x40ed62
mov dx, word [eax + 2]
cmp dx, word [ecx + 2]
jne 0x40ed66
add eax, 4
add ecx, 4
test dx, dx
jne 0x40ed40
xor eax, eax
jmp 0x40ed6b
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
setne al
test al, al
je 0x40ed8a
mov ecx, dword [ebp + 0x7c]
push ecx
lea edx, [esp + 0x28]
push str._Catalyst__s_
push edx
call fcn.00405230
add esp, 0xc
push 0x104
lea eax, [esp + 0x48]
push eax
call dword [sym.imp.KERNEL32.DLL_GetWindowsDirectoryW]
call fcn.00420f20
test al, al
je 0x40eed7
push str._system32_atiumdag.dll
lea ecx, [esp + 0x48]
push 0x104
push ecx
call fcn.00469966
add esp, 0xc
lea edx, [esp + 0x44]
push edx
lea eax, [esp + 0x24]
push eax
call fcn.004225b0
add esp, 8
mov byte [esp + 0x658], 0x1a
mov ecx, dword [eax]
mov esi, dword [esp + 0x1c]
lea eax, [ecx - 0x10]
add esi, 0xfffffff0
cmp eax, esi
je 0x40ee35
cmp dword [esi + 0xc], 0
lea edi, [esi + 0xc]
jl 0x40ee27
mov edx, dword [eax]
cmp edx, dword [esi]
jne 0x40ee27
push eax
call fcn.00404c60
mov dword [esp + 0x18], eax
add esp, 4
or eax, 0xffffffff
lock xadd dword [edi], eax
dec eax
test eax, eax
jg 0x40ee1a
mov ecx, dword [esi]
mov edx, dword [ecx]
mov eax, dword [edx + 4]
push esi
call eax
mov ecx, dword [esp + 0x14]
add ecx, 0x10
mov dword [esp + 0x1c], ecx
jmp 0x40ee35
mov eax, dword [ecx - 0xc]
push eax
push ecx
lea ecx, [esp + 0x24]
call fcn.00404b60
mov byte [esp + 0x658], 0x19
mov eax, dword [esp + 0x20]
add eax, 0xfffffff0
lea edx, [eax + 0xc]
or ecx, 0xffffffff
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x40ee5d
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
lea ecx, [esp + 0x14]
push ecx
call fcn.0040d3a0
mov byte [esp + 0x65c], 0x1b
mov edx, dword [eax]
mov eax, dword [esp + 0x28]
mov ecx, dword [esp + 0x20]
mov esi, esp
mov dword [esp + 0x1c], esp
push edx
push eax
push ecx
push str.atiumdag__s__s____s
call fcn.00412cd0
add esp, 0xc
mov byte [esp + 0x660], 0x1c
mov ecx, esp
mov dword [esp + 0x28], esp
push str.DriverVersion
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0x1b
call fcn.0040cf00
mov byte [esp + 0x658], 0x19
mov eax, dword [esp + 0x14]
add eax, 0xfffffff0
lea edx, [eax + 0xc]
or ecx, 0xffffffff
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jmp 0x40f083
mov dword [esp + 0x14], 0
call fcn.00420ee0
test al, al
je 0x40eef5
lea ecx, [esp + 0x14]
push ecx
call fcn.00421670
add esp, 4
push str._system32drivers_ati2mtag.sys
lea edx, [esp + 0x48]
push 0x104
push edx
call fcn.00469966
add esp, 0xc
lea eax, [esp + 0x44]
push eax
lea ecx, [esp + 0x1c]
push ecx
call fcn.004225b0
add esp, 8
mov byte [esp + 0x658], 0x1d
mov ecx, dword [eax]
mov esi, dword [esp + 0x1c]
lea eax, [ecx - 0x10]
add esi, 0xfffffff0
cmp eax, esi
je 0x40ef83
cmp dword [esi + 0xc], 0
lea edi, [esi + 0xc]
jl 0x40ef75
mov edx, dword [eax]
cmp edx, dword [esi]
jne 0x40ef75
push eax
call fcn.00404c60
mov dword [esp + 0x24], eax
add esp, 4
or eax, 0xffffffff
lock xadd dword [edi], eax
dec eax
test eax, eax
jg 0x40ef68
mov ecx, dword [esi]
mov edx, dword [ecx]
mov eax, dword [edx + 4]
push esi
call eax
mov ecx, dword [esp + 0x20]
add ecx, 0x10
mov dword [esp + 0x1c], ecx
jmp 0x40ef83
mov eax, dword [ecx - 0xc]
push eax
push ecx
lea ecx, [esp + 0x24]
call fcn.00404b60
mov byte [esp + 0x658], 0x19
mov eax, dword [esp + 0x18]
add eax, 0xfffffff0
lea edx, [eax + 0xc]
or ecx, 0xffffffff
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x40efab
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, dword [esp + 0x1c]
mov ecx, 0x4f1164
mov dx, word [eax]
cmp dx, word [ecx]
jne 0x40efda
test dx, dx
je 0x40efd6
mov dx, word [eax + 2]
cmp dx, word [ecx + 2]
jne 0x40efda
add eax, 4
add ecx, 4
test dx, dx
jne 0x40efb4
xor eax, eax
jmp 0x40efdf
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
sete al
test al, al
je 0x40eff8
push 9
push str._unknown_
lea ecx, [esp + 0x24]
call fcn.00404b60
call fcn.00420ee0
test al, al
je 0x40f00e
lea ecx, [esp + 0x14]
push ecx
call fcn.004216a0
add esp, 4
lea edx, [esp + 0x18]
push edx
call fcn.0040d3a0
mov byte [esp + 0x65c], 0x1e
mov eax, dword [eax]
mov ecx, dword [esp + 0x28]
mov edx, dword [esp + 0x20]
mov esi, esp
mov dword [esp + 0x24], esp
push eax
push ecx
push edx
push str.ati2mtag__s__s____s
call fcn.00412cd0
add esp, 0xc
mov byte [esp + 0x660], 0x1f
mov ecx, esp
mov dword [esp + 0x30], esp
push str.DriverVersion
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0x1e
call fcn.0040cf00
mov byte [esp + 0x658], 0x19
mov eax, dword [esp + 0x18]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40f08f
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
push ebx
call fcn.0040f1b0
fld qword [ebp + 0x138]
push ecx
mov esi, esp
mov dword [esp + 0x2c], esp
sub esp, 8
fstp qword [esp]
push str._.0f
call fcn.00412cd0
add esp, 8
mov byte [esp + 0x660], 0x20
mov ecx, esp
mov dword [esp + 0x28], esp
push str.ClockGPUDefault
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0x19
call fcn.0040cf00
fld qword [ebp + 0x140]
push ecx
mov esi, esp
mov dword [esp + 0x2c], esp
sub esp, 8
fstp qword [esp]
push str._.0f
call fcn.00412cd0
add esp, 8
mov byte [esp + 0x660], 0x21
mov ecx, esp
mov dword [esp + 0x28], esp
push str.ClockMemDefault
call fcn.00403e00
mov ecx, ebx
mov byte [esp + 0x660], 0x19
call fcn.0040cf00
mov edx, dword [ebp]
mov eax, dword [edx]
mov ecx, ebp
call eax
mov byte [esp + 0x658], 0
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40f154
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov dword [esp + 0x658], 0xffffffff
mov eax, dword [esp + 0x1c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40f17f
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov ecx, dword [esp + 0x650]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebp
pop ebx
mov ecx, dword [esp + 0x638]
xor ecx, esp
call fcn.0046875c
add esp, 0x648
ret
jmp fcn.0045d951