Function at 0x140028bf0
Capabilities:
Get common file path

Disassembly:
push r15
push r14
push r12
push rsi
push rdi
push rbx
sub rsp, 0x288
mov ebx, r9d
mov rsi, r8
mov edi, edx
mov r14, rcx
mov rax, qword [0x1401b4040]
xor rax, rsp
mov qword [rsp + 0x280], rax
lea rcx, str.shell32.dll
call qword [sym.imp.KERNEL32.dll_GetModuleHandleW]
lea rdx, [0x1401846f4]
mov rcx, rax
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
test rax, rax
je 0x140028c7b
mov r15, rax
lea r9, [rsp + 0x68]
mov qword [r9], 0
mov rcx, r14
xor edx, edx
xor r8d, r8d
call qword [0x1401a61b0]
test eax, eax
setns cl
xor bl, 1
or bl, cl
je 0x140028d30
test eax, eax
jns 0x140028d53
xor edi, edi
jmp 0x140028e6b
lea r14, [rsp + 0x70]
mov r8d, 0x208
mov rcx, r14
mov dl, 0xaa
call fcn.1400fa470
mov word [r14], 0
mov qword [rsp + 0x20], r14
xor ecx, ecx
mov edx, edi
xor r8d, r8d
xor r9d, r9d
call qword [sym.imp.SHELL32.dll_SHGetFolderPathW]
test eax, eax
sets cl
cmp eax, 0x80070057
setne dl
and dl, cl
and dl, bl
cmp dl, 1
jne 0x140028cdc
or edi, 0xa000
mov qword [rsp + 0x20], r14
xor ecx, ecx
mov edx, edi
xor r8d, r8d
xor r9d, r9d
call qword [sym.imp.SHELL32.dll_SHGetFolderPathW]
test eax, eax
setns dil
js 0x140028e7b
lea rbx, [rsp + 0x30]
mov qword [rbx], r14
mov rcx, r14
call fcn.1400e0844
mov qword [rbx + 8], rax
lea r14, [rsp + 0x40]
mov rcx, r14
mov rdx, rbx
call fcn.14009b750
mov rcx, rsi
mov rdx, r14
call fcn.140047d70
mov rcx, r14
call fcn.14009b8a0
jmp 0x140028e7b
mov byte [rsp + 0x57], bl
mov rcx, r14
jmp 0x140028dd0
xor edi, edi
lea r9, [rsp + 0x68]
mov rcx, r14
mov edx, 0x8800
xor r8d, r8d
mov rax, r15
call qword [0x1401a61b0]
test eax, eax
js 0x140028e6b
mov rdi, qword [rsp + 0x68]
test rdi, rdi
je 0x140028ed3
movabs r15, 0x7ffffffffffffff7
mov rcx, rdi
call fcn.1400e0844
cmp rax, r15
ja 0x140028ec9
mov rbx, rax
lea r14, [rsp + 0x40]
cmp rax, 0xa
jbe 0x140028d24
lea rax, [r15 + 5]
and rax, rbx
add rax, 4
mov r12, rbx
or r12, 3
cmp r12, 0xb
cmove r12, rax
inc r12
js 0x140028ec4
lea rcx, [r12 + r12]
call fcn.1400c227c
mov rcx, rax
mov qword [rsp + 0x40], rax
lea rax, [r15 + r12]
add rax, 9
mov qword [rsp + 0x50], rax
mov qword [rsp + 0x48], rbx
lea r15, [rcx + rbx*2]
cmp rcx, rdi
seta al
cmp r15, rdi
setbe dl
or dl, al
je 0x140028ee6
test rbx, rbx
je 0x140028dfb
add rbx, rbx
mov rdx, rdi
mov r8, rbx
call fcn.1400f9dd0
mov word [r15], 0
movsx rax, byte [rsp + 0x57]
test rax, rax
cmovs rax, qword [rsp + 0x48]
cmovs r14, qword [rsp + 0x40]
mov qword [rsp + 0x58], r14
mov qword [rsp + 0x60], rax
test rax, rax
js 0x140028e9e
sete al
test r14, r14
setne cl
or cl, al
je 0x140028eb1
lea rdi, [rsp + 0x70]
lea rdx, [rsp + 0x58]
mov rcx, rdi
call fcn.14009b750
mov rcx, rsi
mov rdx, rdi
call fcn.140047d70
mov rcx, rdi
call fcn.14009b8a0
cmp byte [rsp + 0x57], 0
jns 0x140028e68
mov rcx, qword [rsp + 0x40]
call fcn.1400c22b8
mov dil, 1
mov rcx, qword [rsp + 0x68]
test rcx, rcx
je 0x140028e7b
call qword [sym.imp.ole32.dll_CoTaskMemFree]
mov rcx, qword [rsp + 0x280]
xor rcx, rsp
call fcn.1400c2d30
mov eax, edi
add rsp, 0x288
pop rbx
pop rdi
pop rsi
pop r12
pop r14
pop r15
ret
lea rcx, [0x140183d1d]
lea rdx, str....._third_partylibc_srcinclude_string_view:318:_assertion___len___static_cast_size_type__numeric_limits_difference_type_::max____failed:_string_view::string_view__CharT___size_t_:_length_does_not_fit_in_difference_type_n
call fcn.1400fc0a0
lea rcx, [0x140183d1d]
lea rdx, str....._third_partylibc_srcinclude_string_view:320:_assertion___len__0____s___nullptr_failed:_string_view::string_view__CharT___size_t_:_received_nullptr_n
call fcn.1400fc0a0
call fcn.1400fb4d0
lea rcx, [rsp + 0x40]
call fcn.1400fb370
lea rcx, [0x140183d1d]
lea rdx, str....._third_partylibc_srcinclude_string:973:_assertion___s___nullptr_failed:_basic_string_const_char__detected_nullptr_n
call fcn.1400fc0a0
lea rcx, [0x140183d1d]
lea rdx, str....._third_partylibc_srcinclude__stringchar_traits.h:222:_assertion__std::__is_pointer_in_range___s1____s1____n____s2__failed:_char_traits::copy:_source_and_destination_ranges_overlap_n
call fcn.1400fc0a0
int3