<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _resolve_access(self, addr, size):
 """ Resolves a memory access of a certain size. Returns a sequence of the bases, offsets, and sizes of the accesses required to fulfil this. """


        # if we fit in one word
        first_offset = addr % self.width
        first_base = addr - first_offset
        if first_offset + size <= self.width:
            return [ (first_base, first_offset, size) ]

        last_size = (addr + size) % self.width
        last_base = addr + size - last_size

        accesses = [ ]
        accesses.append((first_base, first_offset, self.width - first_offset))
        accesses.extend((a, 0, self.width) for a in range(first_base+self.width, last_base, self.width))
        if last_size != 0:
            accesses.append((last_base, 0, last_size))

        return accesses