'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.
:param max:             The maximum value of the symbol.
:param stride:          The stride of the symbol.
:param uninitialized:   Whether this value should be counted as an "uninitialized" value in the course of an
analysis.
:param explicit_name:   If False, an identifier is appended to the name to ensure uniqueness.
:return:                A BV object representing this symbol.'

def BVS(self, name, size, min=None, max=None, stride=None, uninitialized=False, explicit_name=None, **kwargs):

    r = claripy.BVS(name, size, min=min, max=max, stride=stride, uninitialized=uninitialized, explicit_name=explicit_name, **kwargs)
    self.state._inspect('symbolic_variable', BP_AFTER, symbolic_name=next(iter(r.variables)), symbolic_size=size, symbolic_expr=r)
    self.state.history.add_event('unconstrained', name=iter(r.variables).next(), 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
