def isChange(self, listIndex, changeType, newValue=None, isMd5=False, token=None):
<EOL>adjust  = <NUM_LIT:0>               <EOL>token   = token           <EOL>index   = int(listIndex)<EOL>ret     = index<EOL>changes = self._collapseChanges(self.baseline, self.current)<EOL>for cur in changes:<EOL><INDENT>if cur.index > index:<EOL><INDENT>if changeType != constants.ITEM_ADDED:<EOL><INDENT>return (ret, None)<EOL><DEDENT>if token is None or token[<NUM_LIT:0>] != index - adjust:<EOL><INDENT>token = (ret, <NUM_LIT:0>)<EOL><DEDENT>token = (ret, token[<NUM_LIT:1>] + <NUM_LIT:1>)<EOL>return (ret, token)<EOL><DEDENT>if cur.index != index:<EOL><INDENT>if cur.op == constants.ITEM_DELETED:<EOL><INDENT>index  += <NUM_LIT:1><EOL>adjust += <NUM_LIT:1><EOL><DEDENT>continue<EOL><DEDENT>if token is not None and token[<NUM_LIT:0>] == index - adjust:<EOL><INDENT>index += token[<NUM_LIT:1>]<EOL>continue<EOL><DEDENT>if changeType == constants.ITEM_DELETED:<EOL><INDENT>if cur.op == constants.ITEM_ADDED:<EOL><INDENT>return (None, None)<EOL><DEDENT>raise ConflictError(<EOL>'<STR_LIT>' % (index,))<EOL><DEDENT>if changeType == constants.ITEM_ADDED:<EOL><INDENT>if token is None:<EOL><INDENT>token = (ret, <NUM_LIT:0>)<EOL><DEDENT>token = (ret, token[<NUM_LIT:1>] + <NUM_LIT:1>)<EOL>if cur.op == constants.ITEM_DELETED:<EOL><INDENT>if isMd5Equal(newValue, isMd5, cur.ival, cur.md5):<EOL><INDENT>return (None, token)<EOL><DEDENT><DEDENT>return (ret, token)<EOL><DEDENT>if cur.op == constants.ITEM_DELETED:<EOL><INDENT>index  += <NUM_LIT:1><EOL>adjust += <NUM_LIT:1><EOL>continue<EOL><DEDENT>if cur.op == constants.ITEM_ADDED:<EOL><INDENT>raise ConflictError(<EOL>'<STR_LIT>' % (index,))<EOL><DEDENT>if isMd5Equal(newValue, isMd5, cur.ival, cur.md5):<EOL><INDENT>return (None, None)<EOL><DEDENT>raise ConflictError(<EOL>'<STR_LIT>' % (index,))<EOL><DEDENT>if changeType != constants.ITEM_ADDED:<EOL><INDENT>return (ret, None)<EOL><DEDENT>if token is None or token[<NUM_LIT:0>] != index - adjust:<EOL><INDENT>token = (ret, <NUM_LIT:0>)<EOL><DEDENT>token = (ret, token[<NUM_LIT:1>] + <NUM_LIT:1>)<EOL>return (ret, token)<EOL>
Implements as specified in :meth:`.ChangeTracker.isChange` where
the `changeObject` is a two-element tuple. The first element is
the index at which the change should be applied, and the second
element is an abstract token that should be passed back into this
method at every iteration.

IMPORTANT: unlike the AttributeChangeTracker, the
ListChangeTracker's `isChange()` method is sensitive to order
(which is why it uses the `changeObject` and `token`
mechanisms. Therefore, it is important to call `isChange()`
sequentially with all changes in the order that they occur in the
change list.