'Explores the path space until a block containing a specified address is found.
:param project:
The following parameters are optional :
:param start:
:param max_concurrency:
:param max_active:
:param pickle_paths:
:param find:                A tuple containing the addresses to search for.
:param avoid:               A tuple containing the addresses to avoid.
:param restrict:            A tuple containing the addresses to restrict the analysis to (avoid all others).
:param min_depth:           The minimum number of SimRuns in the resulting path.
:param max_depth:           The maximum number of SimRuns in the resulting path.
:param num_find:            The minimum number of paths to find. (default: 1)
:param num_avoid:           The minimum number of paths to avoid. (default: infinite)
:param num_deviate:         The minimum number of paths to deviate. (default: infinite)
:param num_loop:            The minimum number of paths to loop (default: infinite)
:param cfg:                 A CFG to use to cut any paths that have no chance of going to the target.
:param enable_veritesting:  Whether Veritesting should be enabled or not.
:param veritesting_options: Options that should be passed to Veritesting.'

def __init__(self, project, start=None, max_concurrency=None, max_active=None, pickle_paths=None, find=None, avoid=None, restrict=None, min_depth=0, max_depth=None, max_repeats=10000000, num_find=1, num_avoid=None, num_deviate=1, num_loop=None, cfg=None, enable_veritesting=None, veritesting_options=None, keep_pruned=None):

    Surveyor.__init__(self, project, start=start, max_concurrency=max_concurrency, max_active=max_active, pickle_paths=pickle_paths, enable_veritesting=enable_veritesting, veritesting_options=veritesting_options, keep_pruned=keep_pruned)
    self._instruction_counter = collections.Counter()
    self._find = (find if (not isinstance(find, (int, long))) else [find])
    self._avoid = avoid
    self._restrict = restrict
    self._max_repeats = max_repeats
    self._max_depth = max_depth
    self._min_depth = min_depth
    self.found = []
    self.avoided = []
    self.deviating = []
    self.looping = []
    self.lost = []
    self._num_find = num_find
    self._num_avoid = num_avoid
    self._num_deviate = num_deviate
    self._num_loop = num_loop
    self._cfg = cfg
    if ((self._cfg is not None) and isinstance(self._find, (tuple, set, list))):
        good_find = set()
        for f in self._find:
            if (self._cfg.get_any_irsb(f) is None):
                l.warning('No    node    0x%x    in    CFG.    This    will    be    automatically    cut.', f)
            else:
                good_find.add(f)
        self._find = good_find
    if self._project.arch.name.startswith('ARM'):
        self._find = ([(x & (~ 1)) for x in self._find] + [(x | 1) for x in self._find])
