anchor.diff:  const Cubic easeInOut = const Cubic(0.42, 0.0, 0.58, 1.0);
   const ParabolicRise parabolicRise = const ParabolicRise();
   const ParabolicFall parabolicFall = const ParabolicFall();
  +const BounceInCurve bounceIn = const BounceInCurve();
  +const BounceOutCurve bounceOut = const BounceOutCurve();
  +const BounceInOutCurve bounceInOut = const BounceInOutCurve();
  +const ElasticInCurve elasticIn = const ElasticInCurve();
  +const ElasticOutCurve elasticOut = const ElasticOutCurve();
  +const ElasticInOutCurve elasticInOut = const ElasticInOutCurve();
  
positive.code: // Copyright 2015 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  double _evaluateCubic(double a, double b, double m) {
    // TODO(abarth): Would Math.pow be faster?
  
negative.code:   }
  }
  
  double _bounce(double t)
  {
    if (t < 1.0 / 2.75) {
      return 7.5625 * t * t;
    } else if (t < 2 / 2.75) {
      t -= 1.5 / 2.75;
      return 7.5625 * t * t + 0.75;
    } else if (t < 2.5 / 2.75) {
      t -= 2.25 / 2.75;
      return 7.5625 * t * t + 0.9375;
    }
    t -= 2.625 / 2.75;
    return 7.5625 * t * t + 0.984375;
  }
  
  class BounceInCurve implements Curve {
    const BounceInCurve();
  
    double transform(double t) {
      return 1.0 - _bounce(1.0 - t);
    }
  }
  
  class BounceOutCurve implements Curve {
    const BounceOutCurve();
  
    double transform(double t) {
      return _bounce(t);
    }
  }
  
  class BounceInOutCurve implements Curve {
    const BounceInOutCurve();
  
    double transform(double t) {
      if (t < 0.5)
        return (1.0 - _bounce(1.0 - t)) * 0.5;
      else
        return _bounce(t * 2.0 - 1.0) * 0.5 + 0.5;
    }
  }
  
  class ElasticInCurve implements Curve {
    const ElasticInCurve([this.period = 0.4]);
    final double period;
  
    double transform(double t) {
      double s = period / 4.0;
      t = t - 1.0;
      return -math.pow(2.0, 10.0 * t) * math.sin((t - s) * (math.PI * 2.0) / period);
    }
  }
  
  class ElasticOutCurve implements Curve {
    const ElasticOutCurve([this.period = 0.4]);
    final double period;
  
    double transform(double t) {
      double s = period / 4.0;
      return math.pow(2.0, -10 * t) * math.sin((t - s) * (math.PI * 2.0) / period) + 1.0;
    }
  }
  
  class ElasticInOutCurve implements Curve {
    const ElasticInOutCurve([this.period = 0.4]);
    final double period;
  
    double transform(double t) {
      t = t * 2;
      double s = period / 4.0;
      t = t - 1.0;
      if (t < 0.0)
        return -0.5 * math.pow(2.0, 10.0 * t) * math.sin((t - s) * (math.PI * 2.0) / period);
      else
        return math.pow(2.0, -10.0 * t) * math.sin((t - s) * (math.PI * 2.0) / period) * 0.5 + 1.0;
    }
  }
  
  const Linear linear = const Linear();
  const Cubic ease = const Cubic(0.25, 0.1, 0.25, 1.0);
  const Cubic easeIn = const Cubic(0.42, 0.0, 1.0, 1.0);
  