'Constructs a new simulation manager.
:param thing:           Optional - What to put in the new SimulationManager\'s active stash (either a SimState or a list of SimStates).
:param kwargs:          Any additional keyword arguments will be passed to the SimulationManager constructor
:returns:               The new SimulationManager
:rtype:                 angr.manager.SimulationManager
Many different types can be passed to this method:
* If nothing is passed in, the SimulationManager is seeded with a state initialized for the program
entry point, i.e. :meth:`entry_state()`.
* If a :class:`SimState` is passed in, the SimulationManager is seeded with that state.
* If a list is passed in, the list must contain only SimStates and the whole list will be used to seed the SimulationManager.'

def simgr(self, thing=None, **kwargs):

    if (thing is None):
        thing = [self.entry_state()]
    elif isinstance(thing, (list, tuple)):
        if any(((not isinstance(val, SimState)) for val in thing)):
            raise AngrError('Bad    type    to    initialize    SimulationManager')
    elif isinstance(thing, SimState):
        thing = [thing]
    else:
        raise AngrError(('BadType    to    initialze    SimulationManager:    %s' % repr(thing)))
    return SimulationManager(self._project, active_states=thing, **kwargs)
