+ weiA ← readSTRef (dpWeightA dp)
+ let samA = 2 ⋅ a0 - a1
+ samA' = applyWeight weiA samA + tmpA
+ MV.unsafeWrite (dpSamplesA dp) 0 samA'
+ MV.unsafeWrite buffer (n ⋅ 2) samA'
+ writeSTRef (dpWeightA dp) $ updateWeight weiA (dpDelta dp) tmpA samA
+
+ b0 ← MV.unsafeRead (dpSamplesB dp) 0
+ b1 ← MV.unsafeRead (dpSamplesB dp) 1
+ MV.unsafeWrite (dpSamplesB dp) 1 b0
+ tmpB ← MV.unsafeRead buffer (n ⋅ 2 + 1)
+ weiB ← readSTRef (dpWeightB dp)
+ let samB = 2 ⋅ b0 - b1
+ samB' = applyWeight weiB samB + tmpB
+ MV.unsafeWrite (dpSamplesB dp) 0 samB'
+ MV.unsafeWrite buffer (n ⋅ 2 + 1) samB'
+ writeSTRef (dpWeightB dp) $ updateWeight weiB (dpDelta dp) tmpB samB