text: /**
   * Hilo 1.1.11 for cmd
   * Copyright 2016 alibaba.com
   * Licensed under the MIT License
   */
  define(function(require, exports, module){
  
  
  
  /**
   * @language=en
   * @class Ease class provides multiple easing functions for Tween.
   * @module hilo/tween/Ease
   * @static
   */
  var Ease = (function(){
  
  function createEase(obj, easeInFn, easeOutFn, easeInOutFn, easeNoneFn){
      obj = obj || {};
      easeInFn && (obj.EaseIn = easeInFn);
      easeOutFn && (obj.EaseOut = easeOutFn);
      easeInOutFn && (obj.EaseInOut = easeInOutFn);
      easeNoneFn && (obj.EaseNone = easeNoneFn);
      return obj;
  }
  
  /**
   * @language=en
   * Linear easing function.Include EaseNone.
   */
  var Linear = createEase(null, null, null, null, function(k){
      return k;
  });
  
  /**
   * @language=en
   * Quad easing function.Include EaseIn, EaseOut, EaseInOut.
   */
  var Quad = createEase(null,
      function(k){
          return k * k;
      },
  
      function(k){
          return - k * (k - 2);
      },
  
      function(k){
          return ((k *= 2) < 1) ? 0.5 * k * k : -0.5 * (--k * (k - 2) - 1);
      }
  );
  
  /**
   * @language=en
   * Cubic easing function.Include EaseIn, EaseOut, EaseInOut.
   */
  var Cubic = createEase(null,
      function(k){
          return k * k * k;
      },
  
      function(k){
          return --k * k * k + 1;
      },
  
      function(k){
          return ((k *= 2) < 1) ? 0.5 * k * k * k : 0.5 * ((k -= 2) * k * k + 2);
      }
  );
  
  /**
   * @language=en
   * Quart easing function.Include EaseIn, EaseOut, EaseInOut.
   */
  var Quart = createEase(null,
      function(k){
          return k * k * k * k;
      },
  
      function(k){
          return -(--k * k * k * k - 1);
      },
  
      function(k){
          return ((k *= 2) < 1) ? 0.5 * k * k * k * k : - 0.5 * ((k -= 2) * k * k * k - 2);
      }
  );
  
  /**
   * @language=en
   * Quint easing function.Include EaseIn, EaseOut, EaseInOut.
   */
  var Quint = createEase(null,
      function(k){
          return k * k * k * k * k;
      },
  
      function(k){
          return (k = k - 1) * k * k * k * k + 1;
      },
  
      function(k){
          return ((k *= 2) < 1) ? 0.5 * k * k * k * k * k : 0.5 * ((k -= 2) * k * k * k * k + 2);
      }
  );
  
  var math = Math,
      PI = math.PI, HALF_PI = PI * 0.5,
      sin = math.sin, cos = math.cos,
      pow = math.pow, sqrt = math.sqrt;
  
  /**
   * @language=en
   * Sine easing function.Include EaseIn, EaseOut, EaseInOut.
   */
  var Sine = createEase(null,
      function(k){
          return -cos(k * HALF_PI) + 1;
      },
  
      function(k){
          return sin(k * HALF_PI);
      },
  
      function(k){
          return -0.5 * (cos(PI * k) - 1);
      }
  );
  
  /**
   * @language=en
   * Expo easing function.Include EaseIn, EaseOut, EaseInOut.
   */
  var Expo = createEase(null,
      function(k){
          return k == 0 ? 0 : pow(2, 10 * (k - 1));
      },
  
      function(k){
          return k == 1 ? 1 : -pow(2, -10 * k) + 1;
      },
  
      function(k){
          if(k == 0 || k == 1) return k;
          if((k *= 2) < 1) return 0.5 * pow(2, 10 * (k - 1));
          return 0.5 * (-pow(2, - 10 * (k - 1)) + 2);
      }
  );
  
  /**
   * @language=en
   * Circ easing function.Include EaseIn, EaseOut, EaseInOut.
   */
  var Circ = createEase(null,
      function(k){
          return -(sqrt(1 - k * k) - 1);
      },
  
      function(k){
          return sqrt(1 - (--k * k));
      },
  
      function(k){
          if((k /= 0.5) < 1) return - 0.5 * (sqrt(1 - k * k) - 1);
          return 0.5 * (sqrt(1 - (k -= 2) * k) + 1);
      }
  );
  
  /**
   * @language=en
   * Elastic easing function.Include EaseIn, EaseOut, EaseInOut.
   */
  var Elastic = createEase(
      {
          a: 1,
          p: 0.4,
          s: 0.1,
  
          config: function(amplitude, period){
              Elastic.a = amplitude;
              Elastic.p = period;
              Elastic.s = period / (2 * PI) * Math.asin(1 / amplitude) || 0;
          }
      },
  
      function(k){
          return -(Elastic.a * pow(2, 10 * (k -= 1)) * sin((k - Elastic.s) * (2 * PI) / Elastic.p));
      },
  
      function(k){
          return (Elastic.a * pow(2, -10 * k) * sin((k - Elastic.s) * (2 * PI) / Elastic.p) + 1);
      },
  
      function(k){
          return ((k *= 2) < 1) ? -0.5 * (Elastic.a * pow(2, 10 * (k -= 1)) * sin((k - Elastic.s) * (2 * PI) / Elastic.p)) :
                 Elastic.a * pow(2, -10 * (k -= 1)) * sin((k - Elastic.s) * (2 * PI) / Elastic.p) * 0.5 + 1;
      }
  );
  
  /**
   * @language=en
   * Back easing function.Include EaseIn, EaseOut, EaseInOut.
   */
  var Back = createEase(
      {
          o: 1.70158,
          s: 2.59491,
  
          config: function(overshoot){
              Back.o = overshoot;
              Back.s = overshoot * 1.525;
          }
      },
  
      function(k){
          return k * k * ((Back.o + 1) * k - Back.o);
      },
  
      function(k){
          return (k = k - 1) * k * ((Back.o + 1) * k + Back.o) + 1;
      },
  
      function(k){
          return ((k *= 2) < 1) ? 0.5 * (k * k * ((Back.s + 1) * k - Back.s)) : 0.5 * ((k -= 2) * k * ((Back.s + 1) * k + Back.s) + 2);
      }
  );
  
  /**
   * @language=en
   * Bounce easing function.Include EaseIn, EaseOut, EaseInOut.
   */
  var Bounce = createEase(null,
      function(k){
          return 1 - Bounce.EaseOut(1 - k);
      },
  
      function(k){
          if((k /= 1) < 0.36364){
              return 7.5625 * k * k;
          }else if(k < 0.72727){
              return 7.5625 * (k -= 0.54545) * k + 0.75;
          }else if(k < 0.90909){
              return 7.5625 * (k -= 0.81818) * k + 0.9375;
          }else{
              return 7.5625 * (k -= 0.95455) * k + 0.984375;
          }
      },
  
      function(k){
          return k < 0.5 ? Bounce.EaseIn(k * 2) * 0.5 : Bounce.EaseOut(k * 2 - 1) * 0.5 + 0.5;
      }
  );
  
  return {
      Linear: Linear,
      Quad: Quad,
      Cubic: Cubic,
      Quart: Quart,
      Quint: Quint,
      Sine: Sine,
      Expo: Expo,
      Circ: Circ,
      Elastic: Elastic,
      Back: Back,
      Bounce: Bounce
  };
  
  })();
  
  return Ease;
  
  });