docs: def BVS(self, name, size,
              min=None, max=None, stride=None,
              uninitialized=False,
              explicit_name=None, key=None, eternal=False,
              inspect=True, events=True,
              **kwargs): #pylint:disable=redefined-builtin
          """
          Creates a bit-vector symbol (i.e., a variable). Other keyword parameters are passed directly on to the
          constructor of claripy.ast.BV.
  
          :param name:            The name of the symbol.
          :param size:            The size (in bits) of the bit-vector.
          :param min:             The minimum value of the symbol. Note that this **only** work when using VSA.
          :param max:             The maximum value of the symbol. Note that this **only** work when using VSA.
          :param stride:          The stride of the symbol. Note that this **only** work when using VSA.
          :param uninitialized:   Whether this value should be counted as an "uninitialized" value in the course of an
                                  analysis.
          :param explicit_name:   Set to True to prevent an identifier from appended to the name to ensure uniqueness.
          :param key:             Set this to a tuple of increasingly specific identifiers (for example,
                                  ``('mem', 0xffbeff00)`` or ``('file', 4, 0x20)`` to cause it to be tracked, i.e.
                                  accessable through ``solver.get_variables``.
          :param eternal:         Set to True in conjunction with setting a key to cause all states with the same
                                  ancestry to retrieve the same symbol when trying to create the value. If False, a
                                  counter will be appended to the key.
          :param inspect:         Set to False to avoid firing SimInspect breakpoints
          :param events:          Set to False to avoid generating a SimEvent for the occasion
  
          :return:                A BV object representing this symbol.
          """
  
          # should this be locked for multithreading?
          if key is not None and eternal and key in self.eternal_tracked_variables:
              r = self.eternal_tracked_variables[key]
              # pylint: disable=too-many-boolean-expressions
              if size != r.length or min != r.args[1] or max != r.args[2] or stride != r.args[3] or uninitialized != r.args[4] or bool(explicit_name) ^ (r.args[0] == name):
                  l.warning("Variable %s being retrieved with differnt settings than it was tracked with", name)
          else:
              r = claripy.BVS(name, size, min=min, max=max, stride=stride, uninitialized=uninitialized, explicit_name=explicit_name, **kwargs)
              if key is not None:
                  self.register_variable(r, key, eternal)
  
          if inspect:
              self.state._inspect('symbolic_variable', BP_AFTER, symbolic_name=next(iter(r.variables)), symbolic_size=size, symbolic_expr=r)
          if events:
              self.state.history.add_event('unconstrained', name=next(iter(r.variables)), bits=size, **kwargs)
          if o.TRACK_SOLVER_VARIABLES in self.state.options:
              self.all_variables = list(self.all_variables)
              self.all_variables.append(r)
          return r