anchor.diff:  
     PerformanceStatus get status => parent.status;
     AnimationDirection get direction => parent.direction;
  -  AnimationDirection get curveDirection => parent.curveDirection;
   }
   
   abstract class Evaluatable<T> {
  
positive.code: 
    /// The current direction of the animation.
    AnimationDirection get direction;
  
    /// The direction used to select the current curve.
    ///
    /// The curve direction is only reset when we hit the beginning or the end of
    /// the timeline to avoid discontinuities in the value of any variables this
    /// performance is used to animate.
    AnimationDirection get curveDirection;
  
    /// Whether this animation is stopped at the beginning.
    bool get isDismissed => status == PerformanceStatus.dismissed;
  
negative.code:   /// If this field is null, uses [curve] in both directions.
    Curve reverseCurve;
  
    /// The direction used to select the current curve.
    ///
    /// The curve direction is only reset when we hit the beginning or the end of
    /// the timeline to avoid discontinuities in the value of any variables this
    /// performance is used to animate.
    AnimationDirection _curveDirection;
  
    void _handleStatusChanged(PerformanceStatus status) {
      switch (status) {
        case PerformanceStatus.dismissed:
        case PerformanceStatus.completed:
          _curveDirection = null;
          break;
        case PerformanceStatus.forward:
          _curveDirection ??= AnimationDirection.forward;
          break;
        case PerformanceStatus.reverse:
          _curveDirection ??= AnimationDirection.reverse;
          break;
      }
    }
  
    double get progress {
      final bool useForwardCurve = reverseCurve == null || (_curveDirection ?? parent.direction) == AnimationDirection.forward;
      Curve activeCurve = useForwardCurve ? curve : reverseCurve;
  
      double t = parent.progress;
  