Function at 0x1000118c
Capabilities:
Modify service

Disassembly:
push ebp
mov ebp, esp
sub esp, 0xf4
push ebx
push esi
mov esi, edx
push edi
mov dword [ebp - 0x14], esi
cmp byte [esi], 0x50
jne 0x10001afc
cmp byte [esi + 1], 0x4b
jne 0x10001afc
xor ecx, ecx
mov dword [ebp - 4], 0xdf1febae
mov dword [ebp - 4], ecx
jmp 0x100011cf
mov eax, dword [ebp - 4]
mov dword [ebp + eax*4 - 0xcc], 0xffffffff
inc dword [ebp - 4]
cmp dword [ebp - 4], 2
jl 0x100011be
xor edi, edi
mov dword [ebp - 4], ecx
inc edi
jmp 0x100011f3
mov byte [ebp - 9], cl
cmp byte [ebp - 9], 0
je 0x100011f0
push ecx
push ecx
call dword [sym.imp.KERNEL32.dll_FileTimeToSystemTime]
xor ecx, ecx
inc dword [ebp - 4]
cmp dword [ebp - 4], edi
jle 0x100011dd
mov bl, byte [esi + 2]
mov dword [ebp - 8], ecx
mov dword [ebp - 0x18], 0x914cc5c6
mov dword [ebp - 0x1c], 0xffffffff
mov dword [ebp - 0x24], 0xf2ddfdaf
mov dword [ebp - 4], ecx
jmp 0x10001226
mov eax, dword [ebp - 4]
mov dword [ebp + eax*4 - 0x2c], 0xfffffff9
inc dword [ebp - 4]
cmp dword [ebp - 4], 2
jl 0x10001218
mov eax, dword [ebp - 8]
mov eax, dword [ebp - 8]
mov dword [ebp - 0x18], 0xffff
mov eax, dword [ebp - 0x18]
mov eax, dword [ebp - 8]
mov eax, dword [ebp - 8]
dec eax
neg eax
sbb eax, eax
neg eax
mov dword [ebp - 0x1c], eax
mov eax, dword [ebp - 0x1c]
mov eax, dword [ebp - 8]
sub eax, 0x864cb83
je 0x10001260
cmp dword [ebp - 0x2c], ecx
je 0x10001260
mov ecx, edi
mov eax, dword [ebp - 0x2c]
xor edx, edx
add eax, ecx
cmp eax, 0xacc0
mov eax, dword [ebp - 8]
setg dl
xor ecx, ecx
cmp eax, edx
setg cl
imul ecx, dword [ebp - 8]
mov dword [ebp - 8], ecx
cmp dword [ebp - 0x2c], 0xfffffffc
jg 0x10001290
cmp dword [ebp - 0x2c], 0
je 0x10001290
mov ecx, edi
jmp 0x10001292
xor ecx, ecx
mov eax, dword [ebp - 0x2c]
xor edx, edx
add ecx, eax
mov eax, dword [ebp - 0x24]
cmp ecx, eax
setg dl
imul edx, dword [ebp - 0x28]
test edx, edx
je 0x100012b3
cmp dword [ebp - 0x1c], 0
je 0x100012b3
mov edx, edi
jmp 0x100012b5
xor edx, edx
mov eax, dword [ebp - 0x2c]
xor ecx, ecx
cmp edx, eax
mov eax, dword [ebp - 0x2c]
setg cl
xor edx, edx
add ecx, eax
mov eax, dword [ebp - 0x2c]
cmp ecx, eax
setne dl
xor ecx, ecx
cmp edx, dword [ebp - 0x2c]
jle 0x100012fe
mov byte [ebp - 9], cl
cmp byte [ebp - 9], cl
je 0x10001347
push ecx
push ecx
push ecx
push ecx
push ecx
push ecx
push ecx
push 0x1a61
push 0x4ae
push 0x1133
push ecx
call dword [sym.imp.ADVAPI32.dll_ChangeServiceConfigW]
xor ecx, ecx
jmp 0x10001347
mov dword [ebp - 0x18], 0xb5d06de2
mov eax, dword [ebp - 0x1c]
mov dword [ebp - 0x18], eax
mov dword [ebp - 8], ecx
jmp 0x10001341
mov byte [ebp - 9], cl
cmp byte [ebp - 9], 0
je 0x1000132c
push ecx
push 0x1e1c
push 0x1b40
call dword [sym.imp.GDI32.dll_CreatePen]
xor ecx, ecx
mov byte [ebp - 9], cl
cmp byte [ebp - 9], 0
je 0x1000133e
push ecx
call dword [sym.imp.USER32.dll_SetKeyboardState]
xor ecx, ecx
dec dword [ebp - 8]
cmp dword [ebp - 8], 0xfffffffc
jne 0x10001310
mov bh, byte [esi + 3]
mov dword [ebp - 8], 0x51c7
mov dword [ebp - 0x10], ecx
mov dword [ebp - 0x18], 0xfffffffb
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x18], 0xb748abb7
movzx eax, bl
mov dword [ebp - 0x18], 0xcd021aa2
add eax, 4
mov dword [ebp - 0x18], 8
mov dword [ebp - 0x20], eax
mov dword [ebp - 4], ecx
jmp 0x10001392
mov eax, dword [ebp - 4]
mov dword [ebp + eax*4 - 0xa4], 0x69be541
inc dword [ebp - 4]
cmp dword [ebp - 4], 3
jl 0x10001381
mov eax, dword [ebp - 8]
xor edx, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x10]
mov eax, dword [ebp - 8]
cmp ecx, eax
mov ecx, dword [ebp - 0x18]
setl dl
dec ecx
neg ecx
sbb ecx, ecx
xor eax, eax
neg ecx
cmp edx, ecx
setg al
xor ecx, ecx
mov dword [ebp - 0x18], eax
mov eax, dword [ebp - 0x18]
mov eax, dword [ebp - 0x10]
mov eax, dword [ebp - 8]
mov dword [ebp - 0xa0], edi
mov eax, dword [ebp - 0x10]
cmp eax, edi
setg cl
xor eax, eax
mov dword [ebp - 0x18], ecx
mov ecx, dword [ebp - 0x18]
imul ecx, dword [ebp - 0x10]
neg ecx
cmp ecx, 0x9b8b
setle al
cmp dword [ebp - 8], eax
jg 0x10001401
cmp dword [ebp - 0xa0], 0
jne 0x10001401
xor edx, edx
jmp 0x10001403
mov edx, edi
mov eax, dword [ebp - 0x10]
xor ecx, ecx
cmp edx, eax
setl cl
imul eax, ecx, 0xa8d7
sub eax, dword [ebp - 8]
mov dword [ebp - 0x18], eax
mov dword [ebp - 0x24], edi
mov dword [ebp - 0x1c], 0x6b3e713e
mov dword [ebp - 4], 0
jmp 0x1000143a
mov eax, dword [ebp - 4]
mov dword [ebp + eax*4 - 0x68], 0x1b055cc2
inc dword [ebp - 4]
cmp dword [ebp - 4], 4
jl 0x1000142c
mov eax, dword [ebp - 0x68]
cmp dword [ebp - 0x60], 0
ja 0x1000144c
mov eax, dword [ebp - 0x64]
mov eax, dword [ebp - 0x68]
mov dword [ebp - 0x68], eax
test eax, eax
jne 0x1000145f
cmp dword [ebp - 0x64], eax
jne 0x1000145f
xor edx, edx
jmp 0x10001461
mov edx, edi
dec dword [ebp - 0x24]
xor ecx, ecx
mov eax, dword [ebp - 0x1c]
cmp edx, eax
mov esi, dword [sym.imp.USER32.dll_GetDesktopWindow]
mov eax, 0xfff8
setne cl
cmp eax, ecx
mov eax, dword [ebp - 0x1c]
sbb ecx, ecx
xor edx, edx
inc ecx
cmp ecx, eax
mov eax, dword [ebp - 0x24]
setge dl
xor ecx, ecx
cmp eax, edx
setge cl
mov dword [ebp - 0x1c], ecx
mov byte [ebp - 9], 0
cmp byte [ebp - 9], 0
je 0x100014b6
push 0
push 0
push 0x1376
push 0x193f
call esi
push eax
call dword [sym.imp.USER32.dll_SendDlgItemMessageW]
movzx edi, bh
mov ebx, dword [ebp - 0x20]
add edi, 0x18
mov dword [ebp - 0x20], 0xe80c6548
add edi, ebx
mov dword [ebp - 4], 0
jmp 0x100014df
mov eax, dword [ebp - 4]
mov dword [ebp + eax*4 - 0x3c], 0x22124f84
inc dword [ebp - 4]
cmp dword [ebp - 4], 1
jl 0x100014d1
mov byte [ebp - 9], 0
cmp byte [ebp - 9], 0
je 0x100014f5
call dword [sym.imp.USER32.dll_ReleaseCapture]
cmp dword [ebp - 0x3c], 0
je 0x10001509
cmp dword [ebp - 0x3c], 0x847d
je 0x10001509
xor ecx, ecx
inc ecx
jmp 0x1000150b
xor ecx, ecx
xor eax, eax
cmp ecx, 1
setl al
mov dword [ebp - 0x3c], eax
mov dword [ebp - 0x20], eax
mov eax, dword [ebp - 0x14]
mov ecx, dword [ebx + eax + 0x14]
mov edx, dword [ebx + eax]
call fcn.10001180
mov dword [ebp - 0x24], eax
xor edx, edx
mov eax, 0x847dfa86
mov dword [ebp - 0x4c], eax
mov dword [ebp - 0x48], eax
mov dword [ebp - 0x44], eax
mov dword [ebp - 0x40], eax
mov dword [ebp - 0x10], 0xf0b96ca2
mov dword [ebp - 0x20], 1
mov dword [ebp - 4], edx
jmp 0x1000155f
mov eax, dword [ebp - 4]
mov dword [ebp + eax*4 - 0x38], 0xfffffffd
inc dword [ebp - 4]
cmp dword [ebp - 4], 2
jl 0x10001551
mov dword [ebp - 0x10], 3
cmp dword [ebp - 0x10], edx
jl 0x100016c9
mov dword [ebp - 8], 7
mov dword [ebp - 0x18], 0xffffffff
mov dword [ebp - 4], edx
jmp 0x10001596
mov eax, dword [ebp - 4]
mov dword [ebp + eax*4 - 0x70], 0xfffffffc
inc dword [ebp - 4]
cmp dword [ebp - 4], 2
jl 0x10001588
mov dword [ebp - 8], edx
jmp 0x1000160b
mov dword [ebp - 0x20], edx
mov dword [ebp - 4], edx
jmp 0x100015ba
mov eax, dword [ebp - 4]
mov dword [ebp + eax*4 - 0xb4], 0xb3bfa32a
inc dword [ebp - 4]
cmp dword [ebp - 4], 4
jl 0x100015a9
mov eax, dword [ebp - 0x10]
xor ecx, ecx
mov eax, dword [ebp + eax*4 - 0x4c]
cmp eax, 0x4163
sete cl
mov dword [ebp - 0xa8], ecx
test ecx, ecx
je 0x100015e7
mov eax, dword [ebp - 0x10]
mov dword [ebp - 0x38], eax
mov eax, dword [ebp - 0xa8]
mov eax, dword [ebp - 0x10]
mov eax, dword [ebp + eax*4 - 0x4c]
mov eax, dword [ebp - 8]
mov eax, dword [ebp - 0x10]
mov eax, dword [ebp + eax*4 - 0x4c]
mov eax, dword [ebp - 8]
mov ecx, dword [ebp - 0x4c]
mov eax, dword [ebp - 8]
mov dword [ebp + eax*4 - 0x4c], ecx
mov dword [ebp - 0x20], ecx
inc dword [ebp - 8]
cmp dword [ebp - 8], 3
jle 0x100015a1
mov dword [ebp - 8], 1
cmp dword [ebp - 8], edx
jl 0x100016c0
mov dword [ebp - 0x1c], 0xfffffffb
mov dword [ebp - 0x20], 0xbe1552b9
mov eax, dword [ebp - 8]
inc eax
jne 0x10001638
mov eax, dword [ebp - 0x1c]
mov eax, dword [ebp - 8]
xor ecx, ecx
mov edx, dword [ebp + eax*4 - 0x38]
mov eax, dword [ebp - 8]
cmp eax, 0x44ed25e4
setle cl
cmp ecx, edx
jl 0x10001653
mov eax, dword [ebp - 0x10]
mov eax, dword [ebp - 8]
xor edx, edx
mov ecx, dword [ebp + eax*4 - 0x38]
mov eax, dword [ebp - 0x1c]
cmp eax, ecx
setg dl
mov dword [ebp - 0x1c], edx
cmp dword [ebp - 8], 0
jne 0x10001670
mov eax, dword [ebp - 0x44]
mov eax, dword [ebp - 0x34]
mov eax, dword [ebp - 0x18]
mov eax, dword [ebp - 8]
imul ecx, dword [ebp + eax*4 - 0x38], 0x5604
mov eax, dword [ebp - 8]
cmp ecx, dword [ebp + eax*4 - 0x38]
jl 0x1000168d
mov eax, dword [ebp - 0x38]
mov eax, dword [ebp - 8]
xor edx, edx
mov ecx, dword [ebp + eax*4 - 0x38]
mov eax, dword [ebp - 0x4c]
cmp ecx, eax
setne dl
add edx, 0x418d0dca
mov dword [ebp - 0x6c], edx
cmp dword [ebp - 0x1c], 0xcf62392e
sbb eax, eax
neg eax
mov dword [ebp - 0x6c], eax
dec dword [ebp - 8]
jns 0x10001621
xor edx, edx
dec dword [ebp - 0x10]
jns 0x10001575
mov byte [ebp - 9], dl
cmp byte [ebp - 9], 0
je 0x100016e7
push 0x22e
push 0x184
call esi
push eax
call dword [sym.imp.USER32.dll_CheckDlgButton]
xor edx, edx
add edi, dword [ebp - 0x14]
mov dword [ebp - 0x10], 0x4e064826
mov dword [ebp - 0x10], edx
jmp 0x100016fe
cmp dword [ebp - 0x10], edx
jne 0x10001704
inc dword [ebp - 0x10]
cmp dword [ebp - 0x10], 0x15
jne 0x100016f6
mov byte [ebp - 9], dl
cmp byte [ebp - 9], 0
je 0x10001718
call esi
push eax
call dword [sym.imp.USER32.dll_GetParent]
xor edx, edx
mov eax, dword [ebp + 8]
xor esi, esi
mov ecx, dword [ebp - 0x24]
mov dword [eax], ecx
shr ecx, 2
mov dword [ebp - 0x10], edx
inc ecx
mov dword [ebp - 8], 0xbefcdf11
inc esi
mov dword [ebp - 0x1c], 0xe856dfc9
mov dword [ebp - 0x18], esi
mov dword [ebp - 0x24], ecx
mov dword [ebp - 4], edx
jmp 0x1000174d
mov eax, dword [ebp - 4]
mov dword [ebp + eax*4 - 0x30], esi
inc dword [ebp - 4]
cmp dword [ebp - 4], esi
jl 0x10001743
mov dword [ebp - 0x10], edx
jmp 0x100017ad
mov dword [ebp - 4], edx
jmp 0x1000176a
mov eax, dword [ebp - 4]
mov dword [ebp + eax*4 - 0x58], 0x398070ad
inc dword [ebp - 4]
cmp dword [ebp - 4], 3
jl 0x1000175c
mov dword [ebp - 0x50], edx
jmp 0x10001783
mov eax, dword [ebp - 0x50]
mov dword [ebp + eax*4 - 0x30], 0xffffffff
inc dword [ebp - 0x50]
cmp dword [ebp - 0x50], esi
jl 0x10001775
mov byte [ebp - 9], dl
cmp byte [ebp - 9], 0
je 0x100017aa
push 0x244f
push 0xce5
push esi
push edx
push 0x5fe
call dword [sym.imp.USER32.dll_MsgWaitForMultipleObjects]
xor edx, edx
inc dword [ebp - 0x10]
cmp dword [ebp - 0x10], edx
jle 0x10001757
cmp dword [ebp - 0x30], edx
jne 0x100017ea
mov eax, dword [ebp - 0x30]
xor ecx, ecx
cmp eax, 0xffffffff
setl cl
xor edx, edx
mov dword [ebp - 8], ecx
mov ecx, dword [ebp - 8]
mov eax, dword [ebp - 0x10]
cmp ecx, eax
setle dl
neg edx
mov dword [ebp - 0x1c], edx
mov eax, dword [ebp - 0x1c]
cmp eax, dword [ebp - 0x10]
jg 0x100017e2
mov eax, dword [ebp - 8]
cmp dword [ebp - 0x30], esi
jg 0x100017ea
mov eax, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x18]
xor edx, edx
mov eax, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x18]
mov ecx, dword [ebp - 8]
mov eax, dword [ebp - 0x10]
cmp eax, ecx
mov ecx, dword [ebp - 0x14]
setle dl
mov dword [ebp - 0x10], edx
xor edx, edx
mov eax, dword [ebx + ecx]
mov dword [ebp - 0x80], eax
mov eax, dword [ebx + ecx + 4]
mov dword [ebp - 0x7c], eax
mov eax, dword [ebx + ecx + 8]
mov dword [ebp - 0x78], eax
mov eax, dword [ebx + ecx + 0xc]
mov dword [ebp - 0x74], eax
mov dword [ebp - 8], 0xfffffff8
mov dword [ebp - 4], edx
jmp 0x10001840
mov eax, dword [ebp - 4]
mov dword [ebp + eax*4 - 0x8c], 0x313dd33a
inc dword [ebp - 4]
cmp dword [ebp - 4], 3
jl 0x1000182f
push 2
mov dword [ebp - 8], edx
pop ebx
jmp 0x10001891
mov dword [ebp - 4], 0x888adae8
mov eax, dword [ebp - 8]
cmp dword [ebp + eax*4 - 0x8c], edx
jne 0x10001896
mov dword [ebp - 4], edx
jmp 0x10001889
mov dword [ebp - 0x10], 0xa20bd035
mov dword [ebp - 0x10], edx
jmp 0x10001881
mov eax, dword [ebp - 0x10]
cmp dword [ebp + eax*4 - 0x8c], edx
jne 0x10001886
inc dword [ebp - 0x10]
cmp dword [ebp - 0x10], ebx
jle 0x10001872
inc dword [ebp - 4]
cmp dword [ebp - 4], ebx
jle 0x10001866
inc dword [ebp - 8]
cmp dword [ebp - 8], ebx
jle 0x1000184e
mov esi, edx
cmp dword [ebp - 0x24], edx
jbe 0x10001b01
sub ecx, edi
mov ebx, ecx
mov dword [ebp - 0x10], 0xfffffff8
mov dword [ebp - 8], 0x5466bc65
mov dword [ebp - 0x20], edx
mov dword [ebp - 0x20], 2
mov dword [ebp - 0x20], 0x61ea52fa
mov dword [ebp - 0x14], edx
jmp 0x100018da
mov eax, dword [ebp - 0x14]
mov dword [ebp + eax*4 - 0xe4], 8
inc dword [ebp - 0x14]
cmp dword [ebp - 0x14], 3
jl 0x100018c9
mov dword [ebp - 0x10], edx
jmp 0x10001acd
mov dword [ebp - 4], 3
mov dword [ebp - 0x1c], 0x3d3b
mov dword [ebp - 0x20], 1
mov dword [ebp - 0x20], 0x1f7ee045
mov dword [ebp - 0x20], 0xd68e480b
mov dword [ebp - 0x18], 0x42a2
mov dword [ebp - 0x14], edx
jmp 0x10001924
mov eax, dword [ebp - 0x14]
mov dword [ebp + eax*4 - 0xf4], edx
inc dword [ebp - 0x14]
cmp dword [ebp - 0x14], 4
jl 0x10001917
mov eax, dword [ebp - 4]
xor edx, edx
mov eax, dword [ebp - 4]
mov dword [ebp - 8], eax
mov eax, dword [ebp - 8]
mov eax, dword [ebp - 4]
mov eax, dword [ebp - 4]
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x10]
cmp ecx, eax
setg dl
cmp edx, 0xffffffff
jle 0x1000195c
cmp dword [ebp - 8], 0
je 0x1000195c
xor edx, edx
inc edx
jmp 0x1000195e
xor edx, edx
mov eax, dword [ebp - 0x10]
xor ecx, ecx
sub edx, eax
mov eax, dword [ebp - 0x10]
cmp eax, edx
push 9
setge cl
xor edx, edx
imul ecx, dword [ebp - 4]
pop eax
sub eax, ecx
je 0x10001a63
mov dword [ebp - 0x18], 0x7c76
mov dword [ebp - 0x14], edx
jmp 0x1000199b
mov eax, dword [ebp - 0x14]
mov dword [ebp + eax*4 - 0x98], 0x3c8d3fd9
inc dword [ebp - 0x14]
cmp dword [ebp - 0x14], 2
jl 0x1000198a
mov dword [ebp - 8], edx
jmp 0x10001a57
mov dword [ebp - 0x14], 0xc35cf455
mov dword [ebp - 0x20], 0x657a772b
mov dword [ebp - 0x14], edx
jmp 0x100019cd
mov eax, dword [ebp - 0x14]
mov dword [ebp + eax*4 - 0xc4], 0x7dcc3592
inc dword [ebp - 0x14]
cmp dword [ebp - 0x14], 4
jl 0x100019bc
cmp dword [ebp - 0x1c], edx
je 0x100019e2
cmp dword [ebp - 0x18], edx
je 0x100019e2
xor ecx, ecx
inc ecx
jmp 0x100019e4
mov ecx, edx
xor eax, eax
cmp ecx, 1
setge al
cmp eax, dword [ebp - 0x18]
je 0x100019fb
cmp dword [ebp - 0x1c], edx
je 0x100019fb
xor ecx, ecx
inc ecx
jmp 0x100019fd
mov ecx, edx
xor eax, eax
test ecx, ecx
setne al
add eax, dword [ebp - 8]
jne 0x10001a12
cmp dword [ebp - 8], edx
jne 0x10001a12
mov eax, edx
jmp 0x10001a15
xor eax, eax
inc eax
xor edx, edx
cmp eax, 0x1c1d
mov eax, dword [ebp - 0xbc]
setl dl
xor ecx, ecx
imul edx, eax
mov eax, dword [ebp - 0x10]
cmp edx, eax
setge cl
xor edx, edx
mov dword [ebp - 0x14], ecx
cmp dword [ebp - 0x14], edx
je 0x10001a49
cmp dword [ebp - 0xbc], edx
je 0x10001a49
xor eax, eax
inc eax
jmp 0x10001a4b
mov eax, edx
mov dword [ebp - 0x20], eax
mov dword [ebp - 0x98], edx
inc dword [ebp - 8]
cmp dword [ebp - 8], 3
je 0x100019a9
jmp 0x10001aca
mov dword [ebp - 0x20], 0xf33d48a2
mov dword [ebp - 0x20], 0x194e4064
mov dword [ebp - 8], edx
jmp 0x10001a87
mov eax, dword [ebp - 8]
mov dword [ebp + eax*4 - 0x90], 0x2db60270
inc dword [ebp - 8]
cmp dword [ebp - 8], 1
jl 0x10001a76
mov dword [ebp - 8], edx
jmp 0x10001a9f
mov eax, dword [ebp - 8]
mov dword [ebp + eax*4 - 0xd8], edx
inc dword [ebp - 8]
cmp dword [ebp - 8], 3
jl 0x10001a92
mov ecx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x18]
neg ecx
sbb ecx, ecx
neg ecx
inc dword [ebp - 0x18]
cmp ecx, eax
jl 0x10001abb
xor edx, edx
inc edx
mov eax, dword [ebp - 4]
xor ecx, ecx
cmp eax, edx
setl cl
xor edx, edx
mov dword [ebp - 0x20], ecx
dec dword [ebp - 0x10]
cmp dword [ebp - 0x10], 0xfffffff7
jl 0x100018e8
mov ecx, dword [edi]
mov edx, esi
and edx, 3
mov edx, dword [ebp + edx*4 - 0x80]
call fcn.10001180
mov dword [ebx + edi], eax
add edi, 4
inc esi
push 0
pop edx
cmp esi, dword [ebp - 0x24]
jb 0x100018a5
jmp 0x10001b01
mov eax, dword [ebp + 8]
mov dword [eax], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret