'Allow I{addition} with another L{SerialNumber} instance.
Serial numbers may be incremented by the addition of a positive
integer n, where n is taken from the range of integers
[0 .. (2^(SERIAL_BITS - 1) - 1)].  For a sequence number s, the
result of such an addition, s\', is defined as
s\' = (s + n) modulo (2 ^ SERIAL_BITS)
where the addition and modulus operations here act upon values that are
non-negative values of unbounded size in the usual ways of integer
arithmetic.
Addition of a value outside the range
[0 .. (2^(SERIAL_BITS - 1) - 1)] is undefined.
@see: U{http://tools.ietf.org/html/rfc1982#section-3.1}
@type other: L{SerialNumber}
@rtype: L{SerialNumber}
@raises: L{ArithmeticError} if C{other} is more than C{_maxAdd}
ie more than half the maximum value of this serial number.'

def __add__(self, other):

    other = self._convertOther(other)
    if (other._number <= self._maxAdd):
        return SerialNumber(((self._number + other._number) % self._modulo), serialBits=self._serialBits)
    else:
        raise ArithmeticError(('value    %r    outside    the    range    0    ..    %r' % (other._number, self._maxAdd)))
