Function at 0x40dfb0
Capabilities:
Get common file path

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x4c6b37
mov eax, dword fs:[0]
push eax
sub esp, 0x36c
mov eax, dword [0x4f4de0]
xor eax, esp
mov dword [esp + 0x364], eax
push esi
push edi
mov eax, dword [0x4f4de0]
xor eax, esp
push eax
lea eax, [esp + 0x378]
mov dword fs:[0], eax
lea eax, [esp + 0x164]
push eax
push 0
push 0
push 0x1a
push 0
call dword [sym.imp.SHELL32.dll_SHGetFolderPathW]
test eax, eax
jne 0x40e31c
mov edx, dword [0x4fc0d8]
mov eax, dword [edx + 0xc]
mov ecx, 0x4fc0d8
call eax
add eax, 0x10
mov dword [esp + 0x10], eax
lea ecx, [esp + 0x164]
push ecx
lea edx, [esp + 0x14]
push str._sOpera_SoftwareOpera_Stable_tracking_user_agent.json
push edx
mov dword [esp + 0x38c], 0
call fcn.004048a0
add esp, 0xc
lea ecx, [esp + 0xd4]
call fcn.0042a030
push 0
lea ecx, [esp + 0x18]
mov byte [esp + 0x384], 1
call fcn.0042f440
mov byte [esp + 0x380], 2
mov esi, dword [esp + 0x10]
push esi
lea eax, [esp + 0x28]
push eax
call fcn.004112c0
push 1
lea ecx, [esp + 0x18]
push ecx
lea edx, [esp + 0x2c]
push edx
lea ecx, [esp + 0xe0]
mov byte [esp + 0x38c], 3
call fcn.0042a120
test al, al
jne 0x40e119
lea ecx, [esp + 0x7c]
mov byte [esp + 0x380], 2
call fcn.004113a0
lea eax, [esp + 0x7c]
push eax
mov dword [esp + 0x80], vtable.std::ios_base.0
call fcn.00496d50
add esp, 4
lea ecx, [esp + 0x14]
mov byte [esp + 0x380], 1
call fcn.0042f980
lea edi, [esp + 0xd4]
call fcn.0040e350
lea eax, [esi - 0x10]
mov dword [esp + 0x380], 0xffffffff
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40e31c
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
jmp 0x40e31c
lea ecx, [esp + 0xb8]
push ecx
push str.partner_id
lea ecx, [esp + 0x1c]
call fcn.0042ff00
mov ecx, eax
call fcn.0042fb90
lea edi, [esp + 0xb8]
mov ecx, str.edition_360
mov byte [esp + 0x380], 4
call fcn.00413fb0
test al, al
je 0x40e203
cmp dword [esp + 0xd0], 0x10
jb 0x40e171
mov edx, dword [esp + 0xbc]
push edx
call fcn.00493cb0
add esp, 4
lea ecx, [esp + 0x7c]
mov dword [esp + 0xd0], 0xf
mov dword [esp + 0xcc], 0
mov byte [esp + 0xbc], 0
mov byte [esp + 0x380], 2
call fcn.004113a0
lea eax, [esp + 0x7c]
push eax
mov dword [esp + 0x80], vtable.std::ios_base.0
call fcn.00496d50
add esp, 4
lea ecx, [esp + 0x14]
mov byte [esp + 0x380], 1
call fcn.0042f980
lea edi, [esp + 0xd4]
call fcn.0040e350
lea eax, [esi - 0x10]
mov dword [esp + 0x380], 0xffffffff
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40e1fc
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov al, 1
jmp 0x40e31e
lea edi, [esp + 0xb8]
mov ecx, 0x4d7610
call fcn.00413fb0
test al, al
je 0x40e262
lea ecx, [esp + 0xb8]
call fcn.004051f0
lea eax, [esp + 0x24]
mov byte [esp + 0x380], 2
call fcn.0040e3c0
lea ecx, [esp + 0x14]
mov byte [esp + 0x380], 1
call fcn.0042f980
lea edi, [esp + 0xd4]
call fcn.0040e350
lea ecx, [esp + 0x10]
call fcn.00404550
mov al, 1
jmp 0x40e31e
cmp dword [esp + 0xcc], 5
jne 0x40e2d9
cmp dword [esp + 0xd0], 0x10
mov ecx, dword [esp + 0xbc]
jae 0x40e284
lea ecx, [esp + 0xbc]
cmp dword [ecx], 0x2d303633
je 0x40e2b7
movzx eax, byte [ecx]
sub eax, 0x33
jne 0x40e2af
movzx eax, byte [ecx + 1]
sub eax, 0x36
jne 0x40e2af
movzx eax, byte [ecx + 2]
sub eax, 0x30
jne 0x40e2af
movzx eax, byte [ecx + 3]
sub eax, 0x2d
je 0x40e2b7
sar eax, 0x1f
or eax, 1
jne 0x40e2d9
push 4
lea ecx, [esp + 0xbc]
call fcn.004197b0
movsx ecx, byte [eax]
push ecx
call fcn.0049881a
add esp, 4
test eax, eax
jne 0x40e218
lea ecx, [esp + 0xb8]
call fcn.004051f0
lea eax, [esp + 0x24]
mov byte [esp + 0x380], 2
call fcn.0040e3c0
lea ecx, [esp + 0x14]
mov byte [esp + 0x380], 1
call fcn.0042f980
lea edi, [esp + 0xd4]
call fcn.0040e350
lea ecx, [esp + 0x10]
call fcn.00404550
xor al, al
mov ecx, dword [esp + 0x378]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
mov ecx, dword [esp + 0x364]
xor ecx, esp
call fcn.00497941
mov esp, ebp
pop ebp
ret