     }
 
     /**
-     * @private
+     *  @private
      * 
-     * Calculates the <code>timeFraction</code> values for
-     * each KeyFrame in a MotionPath KeyFrame sequence.
-     * To calculate these values, the time on each KeyFrame
-     * is divided by the supplied <code>duration</code> parameter.
-     * 
-     * @param duration the duration of the animation that the
-     * keyframes should be scaled against.
+     *  Calculates the <code>timeFraction</code> values for
+     *  each KeyFrame in a MotionPath KeyFrame sequence.
+     *  To calculate these values, the time on each KeyFrame
+     *  is divided by the supplied <code>duration</code> parameter.
+     *  
+     *  @param duration the duration of the animation that the
+     *  keyframes should be scaled against.
      */
     mx_internal function scaleKeyframes(duration:Number):void
     {

    //--------------------------------------------------------------------------

    /**
     * Constructor. 
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10

    //--------------------------------------------------------------------------

    /**
     *  The name of the property on the effect target to be animated.
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    public var property:String;
     
    /**
     *  The interpolator determines how in-between values in an animation
     *  are calculated. By default, the MotionPath class assumes that the values are
     *  of type Number and can calculate in-between Number values automatically.
     *  If the MotionPath class is given keyframes with non-Number values, or if the
     *  desired behavior should use a different approach to interpolation
     *  (such as per-channel color interpolation), then an interpolator
     *  should be supplied.
     *
     *  <p>Flex supplies predefined interpolators in the spark.effects.interpolation package.</p>
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    public var interpolator:IInterpolator = NumberInterpolator.getInstance();
    
    [Inspectable(category="General", arrayType="spark.effects.KeyFrame")]
    /**
     *  A sequence of KeyFrame objects that represent the time/value pairs
     *  that the property takes during the animation. Each successive
     *  pair of keyframes controls the animation during the time interval
     *  between them.
     *  The optional <code>easer</code> and <code>valueBy</code>
     *  properties of the later keyframe are used to determine the behavior
     *  during that interval. The sequence of keyframes must be sorted in 
     *  order of increasing time values.
     * 
     *  <p>Animations always start at time=0 and will last for a duration
     *  equal to the <code>time</code> value in the final keyframe. 
     *  If no keyframe is defined at time=0, 
     *  that keyframe is implicit, using the value of the
     *  target property at the time the animation begins. </p>
     *
     *  <p>Because keyframes explicitly define the times involved in an animation, 
     *  the duration for an effect using keyframes is set according to the maximum time
     *  of the final keyframe of all MotionPaths in the effect.
     *  For example, if an effect has keyframes
     *  at times 0, 500, 1000, and 2000, then the effective duration of that
     *  effect will be 2000 ms, regardless of any <code>duration</code> property set on the
     *  effect itself. 
     *  Because the final keyframe determines the duration, there
     *  must always be a final keyframe in any MotionPath. That is, 
     *  it is implicit that the time in the final keyframe is the 
     *  duration of the MotionPath.</p>
     * 
     *  <p>Any keyframe may leave its <code>value</code> undefined (either unset, set to 
     *  <code>null</code>, or set to <code>NaN</code>).
     *  In that case, the value is determined dynamically when the animation starts.
     *  Any undefined value is determined as follows: </p>
     *  <ol>
     *    <li>If it is the first keyframe, it is calculated from the next keyframe
     *      if that keyframe has both a <code>value</code> and <code>valueBy</code> property set,
     *      as the difference of those values. Otherwise it gets the
     *      current value of the property from the target.</li>
     *    <li>If it is the final keyframe and the animation is running in a transition, it 
     *      uses the value in the destination view state of the transition.</li>
     *    <li>Otherwise, any keyframe calculates its <code>value</code> by using the previous
     *      keyframe's <code>value</code> and adding the current keyframe's <code>valueBy</code>
     *      to it, if <code>valueBy</code> is set.</li>
     *  </ol>
     *  
     *  @see KeyFrame
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    public var keyframes:Array;
    

    /**
     *  Returns a copy of this MotionPath object, including copies
     *  of each keyframe
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    public function clone():MotionPath
    {
