code: def load_slice(self, state, start, end):
          
          keys = list(self._storage.irange(start, end-1))
          if not keys or keys[0] != start:
              try:
                  key = next(self._storage.irange(maximum=start, reverse=True))
              except StopIteration:
                  pass
              else:
                  if self._storage[key].includes(start):
                      keys.insert(0, key)
          return [(max(start, key), self._storage[key]) for key in keys]
docs: Return the memory objects overlapping with the provided slice.
  
          :param start: the start address
          :param end: the end address (non-inclusive)
          :returns: tuples of (starting_addr, memory_object)