implement list differencing completely client-side