Function at 0x6902e1a0
Capabilities:
Access peb ldr_data
Get process heap flags

Disassembly:
lea ecx, [esp + 4]
and esp, 0xfffffff0
push dword [ecx - 4]
push ebp
mov ebp, esp
push edi
push esi
push ebx
push ecx
sub esp, 0xe8
mov eax, dword [ecx + 4]
test byte [0x6907a0c8], 8
mov edi, dword [ecx]
mov edx, dword [ecx + 0xc]
mov dword [ebp - 0x90], eax
mov eax, dword [ecx + 8]
mov ebx, dword [ecx + 0x18]
mov dword [ebp - 0x8c], eax
mov eax, dword [ecx + 0x10]
mov dword [ebp - 0x98], eax
mov eax, dword [ecx + 0x14]
mov dword [ebp - 0x94], eax
mov eax, dword [ecx + 0x1c]
mov dword [ebp - 0xc0], eax
jne 0x6902e678
test edi, edi
je 0x6902e660
mov eax, dword [ebp - 0x90]
test eax, eax
je 0x6902e660
mov eax, dword [ebp - 0x98]
test edx, edx
sete cl
test eax, eax
sete al
or cl, al
jne 0x6902e660
mov esi, dword [ebp - 0xc0]
test esi, esi
je 0x6902e660
cmp dword [ebp - 0x8c], 0xffffffff
je 0x6902e6f0
mov esi, dword [ebp - 0x8c]
test esi, esi
je 0x6902e620
mov eax, dword [ebp - 0x94]
and eax, 0xfffffffa
je 0x6902e268
test byte [0x6907a0c8], 1
jne 0x6902e7d0
mov dword [esp + 4], ebx
lea ecx, [ebp - 0x88]
mov eax, edi
mov dword [esp], 0
call sym._get_font_hfont.isra.0
mov dword [esp], 0
call dword [sym.imp.gdi32.dll_CreateCompatibleDC]
mov esi, eax
mov eax, dword [ebp - 0x88]
sub esp, 4
mov dword [esp], esi
mov dword [esp + 4], eax
call dword [sym.imp.gdi32.dll_SelectObject]
lea eax, [ebp - 0x54]
sub esp, 8
mov dword [esp + 4], eax
mov dword [esp], esi
call dword [sym.imp.gdi32.dll_GetTextMetricsW]
lea edx, [ebp - 0x84]
movss xmm0, dword [0x6907fba0]
mov dword [ebp - 0x84], 0
mov dword [ebp - 0x80], 0
movss dword [ebp - 0x7c], xmm0
movss dword [ebp - 0x70], xmm0
mov dword [ebp - 0x78], 0
sub esp, 8
test ebx, ebx
mov dword [ebp - 0x74], 0
je 0x6902e334
xor eax, eax
mov edx, dword [ebx + eax]
mov dword [ebp + eax - 0x6c], edx
add eax, 4
cmp eax, 0x18
jb 0x6902e2f8
lea edx, [ebp - 0x84]
mov eax, 3
mov dword [esp + 8], eax
lea eax, [ebp - 0x6c]
mov dword [esp + 4], edx
mov dword [esp], eax
mov dword [ebp - 0xa0], edx
call sym.gdiplus.dll_GdipTransformMatrixPoints
mov edx, dword [ebp - 0xa0]
sub esp, 0xc
mov dword [esp + 0xc], edx
xor eax, eax
mov ebx, 3
mov dword [esp + 8], eax
mov eax, 4
mov dword [esp + 0x10], ebx
mov dword [esp + 4], eax
mov dword [esp], edi
call sym._gdip_transform_points
movss xmm3, dword [ebp - 0x80]
movss xmm0, dword [ebp - 0x78]
movss xmm1, dword [ebp - 0x84]
movss xmm2, dword [ebp - 0x7c]
subss xmm0, xmm3
subss xmm2, xmm1
mulss xmm0, xmm0
mulss xmm2, xmm2
addss xmm0, xmm2
pxor xmm2, xmm2
cvtss2sd xmm0, xmm0
movupd xmm4, xmm0
ucomisd xmm2, xmm0
sqrtsd xmm4, xmm4
ja 0x6902e857
movss xmm0, dword [ebp - 0x70]
pxor xmm6, xmm6
cvtsd2ss xmm6, xmm4
movss dword [ebp - 0xa8], xmm6
subss xmm0, xmm3
movss xmm3, dword [ebp - 0x74]
mulss xmm0, xmm0
subss xmm3, xmm1
movups xmm1, xmm3
mulss xmm1, xmm3
addss xmm0, xmm1
cvtss2sd xmm0, xmm0
movupd xmm1, xmm0
ucomisd xmm2, xmm0
sqrtsd xmm1, xmm1
ja 0x6902e835
xor ecx, ecx
pxor xmm0, xmm0
cvtsd2ss xmm0, xmm1
test byte [ebp - 0x94], 1
mov dword [ebp - 0xc4], ecx
jne 0x6902e730
pxor xmm3, xmm3
cvtsi2ss xmm3, dword [ebp - 0x50]
mov ecx, dword [ebp - 0x8c]
mov eax, dword [ebp - 0x98]
divss xmm3, xmm0
test ecx, ecx
movss xmm1, dword [eax]
movss xmm2, dword [eax + 4]
movss dword [ebp - 0xac], xmm3
pxor xmm3, xmm3
cvtsi2ss xmm3, dword [ebp - 0x4c]
divss xmm3, xmm0
movss dword [ebp - 0xb0], xmm3
jle 0x6902e810
movss dword [ebp - 0x98], xmm2
mov ebx, dword [ebp - 0x94]
add eax, 4
movss dword [ebp - 0x94], xmm1
mov edi, eax
movss dword [ebp - 0x8c], xmm1
and ebx, 4
mov dword [ebp - 0xb8], ebx
mov ebx, dword [ebp - 0x90]
movss dword [ebp - 0x90], xmm2
lea eax, [ebx + ecx*2]
mov dword [ebp - 0xb4], eax
lea eax, [ebp - 0x6c]
mov dword [ebp - 0xbc], eax
mov eax, ebx
mov ebx, edi
mov edi, eax
lea esi, [esi]
mov ecx, dword [ebp - 0xb8]
test ecx, ecx
jne 0x6902e4b3
movss xmm1, dword [ebx - 4]
movss xmm2, dword [ebx]
movzx eax, word [edi]
add edi, 2
add ebx, 8
mov dword [esp], esi
mov edx, dword [ebp - 0xbc]
movss dword [ebp - 0xa4], xmm1
movss dword [ebp - 0xa0], xmm2
mov dword [esp + 8], eax
mov dword [esp + 0xc], edx
mov dword [esp + 4], eax
call dword [sym.imp.gdi32.dll_GetCharABCWidthsW]
mov eax, dword [ebp - 0x64]
movss xmm2, dword [ebp - 0xa0]
mov ecx, dword [ebp - 0x6c]
mov edx, dword [ebp - 0x68]
movups xmm0, xmm2
subss xmm0, dword [ebp - 0xac]
add eax, ecx
sub esp, 0x10
minss xmm0, dword [ebp - 0x90]
add eax, edx
movss xmm1, dword [ebp - 0xa4]
cmp dword [ebp - 0xb4], edi
movss dword [ebp - 0x90], xmm0
movss xmm0, dword [ebp - 0xb0]
movups xmm5, xmm1
minss xmm5, dword [ebp - 0x8c]
addss xmm0, xmm2
maxss xmm0, dword [ebp - 0x98]
movss dword [ebp - 0x8c], xmm5
movss dword [ebp - 0x98], xmm0
pxor xmm0, xmm0
cvtsi2ss xmm0, eax
divss xmm0, dword [ebp - 0xa8]
addss xmm1, xmm0
movups xmm6, xmm1
maxss xmm6, dword [ebp - 0x94]
movss dword [ebp - 0x94], xmm6
jne 0x6902e4a0
mov ebx, dword [ebp - 0xc4]
xor edx, edx
mov dword [esp + 4], edx
mov eax, dword fs:[0x18]
mov dword [esp + 8], ebx
mov eax, dword [eax + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_HeapFree]
sub esp, 0xc
mov dword [esp], esi
call dword [sym.imp.gdi32.dll_DeleteDC]
mov eax, dword [ebp - 0x88]
sub esp, 4
mov dword [esp], eax
call dword [sym.imp.gdi32.dll_DeleteObject]
mov eax, dword [ebp - 0xc0]
movss xmm6, dword [ebp - 0x8c]
movss xmm0, dword [ebp - 0x94]
movss xmm7, dword [ebp - 0x90]
movss dword [eax], xmm6
subss xmm0, xmm6
movss dword [eax + 4], xmm7
sub esp, 4
movss dword [eax + 8], xmm0
movss xmm0, dword [ebp - 0x98]
subss xmm0, xmm7
movss dword [eax + 0xc], xmm0
xor eax, eax
lea esp, [ebp - 0x10]
pop ecx
pop ebx
pop esi
pop edi
pop ebp
lea esp, [ecx - 4]
ret 0x20
mov eax, dword [ebp - 0xc0]
xor ecx, ecx
mov dword [ebp - 0x8c], ecx
mov dword [eax], 0
mov dword [eax + 4], 0
mov dword [eax + 8], 0
mov dword [eax + 0xc], 0
mov eax, dword [ebp - 0x94]
and eax, 0xfffffffa
je 0x6902e268
jmp 0x6902e25b
lea esp, [ebp - 0x10]
mov eax, 2
pop ecx
pop ebx
pop esi
pop edi
pop ebp
lea esp, [ecx - 4]
ret 0x20
mov dword [esp + 0x2c], eax
mov eax, dword [ebp - 0x94]
mov dword [esp + 0x1c], edx
mov dword [esp + 0x28], ebx
mov dword [esp + 0x10], edi
mov dword [esp + 0x24], eax
mov eax, dword [ebp - 0x98]
mov dword [esp], 3
mov dword [ebp - 0xa0], edx
mov dword [esp + 0x20], eax
mov eax, dword [ebp - 0x8c]
mov dword [esp + 0x18], eax
mov eax, dword [ebp - 0x90]
mov dword [esp + 0x14], eax
mov eax, str.__p__p__d__p__p__d__p__p__n
mov dword [esp + 0xc], eax
mov eax, str.GdipMeasureDriverString
mov dword [esp + 8], eax
mov eax, 0x6907a0c8
mov dword [esp + 4], eax
call sym._wine_dbg_log.constprop.0_4
mov edx, dword [ebp - 0xa0]
jmp 0x6902e1f9
mov eax, dword [ebp - 0x90]
cmp word [eax], 0
je 0x6902e620
add eax, 2
cmp word [eax], 0
jne 0x6902e700
mov ecx, dword [ebp - 0x90]
sub eax, ecx
sar eax, 1
mov dword [ebp - 0x8c], eax
mov esi, dword [ebp - 0x8c]
test esi, esi
jne 0x6902e250
jmp 0x6902e620
movss dword [ebp - 0xa0], xmm0
mov edx, dword [ebp - 0x8c]
mov eax, dword fs:[0x18]
add edx, edx
mov dword [esp + 8], edx
mov edx, 8
mov dword [esp + 4], edx
mov eax, dword [eax + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_HeapAlloc]
movss xmm0, dword [ebp - 0xa0]
mov dword [ebp - 0xc4], eax
sub esp, 0xc
test eax, eax
je 0x6902e88a
mov dword [esp], esi
mov eax, dword [ebp - 0x8c]
xor ebx, ebx
mov dword [esp + 0x10], ebx
mov ebx, dword [ebp - 0xc4]
movss dword [ebp - 0xa0], xmm0
mov dword [esp + 8], eax
mov eax, dword [ebp - 0x90]
mov dword [esp + 0xc], ebx
mov dword [esp + 4], eax
call dword [sym.imp.gdi32.dll_GetGlyphIndicesW]
movss xmm0, dword [ebp - 0xa0]
mov dword [ebp - 0x90], ebx
sub esp, 0x14
jmp 0x6902e401
mov dword [esp + 0x10], eax
mov eax, str.Ignoring_flags__x_n
mov dword [ebp - 0xa0], edx
mov edx, 0x6907a0c8
mov dword [esp + 0xc], eax
mov eax, str.GdipMeasureDriverString
mov dword [esp + 4], edx
mov dword [esp + 8], eax
mov dword [esp], 0
call sym._wine_dbg_log.constprop.0_4
mov edx, dword [ebp - 0xa0]
jmp 0x6902e268
movss dword [ebp - 0x98], xmm2
movss dword [ebp - 0x94], xmm1
movss dword [ebp - 0x90], xmm2
movss dword [ebp - 0x8c], xmm1
jmp 0x6902e584
movsd qword [ebp - 0xa0], xmm1
movsd qword [esp], xmm0
call dword [sym.imp.ucrtbase.dll_sqrt]
fstp st(0)
movsd xmm1, qword [ebp - 0xa0]
jmp 0x6902e3e4
movsd qword [ebp - 0xa0], xmm4
movsd qword [esp], xmm0
call dword [sym.imp.ucrtbase.dll_sqrt]
fstp st(0)
movss xmm3, dword [ebp - 0x80]
pxor xmm2, xmm2
movsd xmm4, qword [ebp - 0xa0]
movss xmm1, dword [ebp - 0x84]
jmp 0x6902e39d
mov dword [esp], esi
call dword [sym.imp.gdi32.dll_DeleteDC]
mov eax, dword [ebp - 0x88]
push esi
mov dword [esp], eax
call dword [sym.imp.gdi32.dll_DeleteObject]
mov eax, 3
push edi
jmp 0x6902e60d