<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _read_mode_utopt(self, size, kind):
 """Read User Timeout option. Positional arguments: * size - int, length of option * kind - int, 28 (User Timeout Option) Returns: * dict -- extracted User Timeout (TIMEOUT) option Structure of TCP TIMEOUT [RFC 5482]: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Kind = 28 | Length = 4 |G| User Timeout | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Octets Bits Name Description 0 0 tcp.timeout.kind Kind (28) 1 8 tcp.timeout.length Length (4) 2 16 tcp.timeout.granularity Granularity 2 17 tcp.timeout.timeout User Timeout """

        temp = self._read_fileng(size)

        data = dict(
            kind=kind,
            length=size,
            granularity='minutes' if int(temp[0]) else 'seconds',
            timeout=bytes(chr(int(temp[0:], base=2)), encoding='utf-8'),
        )

        return data