// Path: common/src/main/java/io/apptik/multiview/common/Log.java
// public class Log {
// 
//     private static final int CALL_STACK_INDEX = 5;
//     private static final Pattern ANONYMOUS_CLASS = Pattern.compile("(\\$\\d+)+$");
//     private static boolean DEBUG = false;
// 
//     public static void on() {
//         DEBUG = true;
//     }
//     public static void off() {
//         DEBUG = false;
//     }
//     public static void v(String msg) {
//         if(DEBUG) {
//             android.util.Log.v(getTag(), msg);
//         }
//     }
// 
//     public static void d(String msg) {
//         if(DEBUG) {
//             android.util.Log.d(getTag(), msg);
//         }
//     }
// 
//     public static void i(String msg) {
//         if(DEBUG) {
//             android.util.Log.i(getTag(), msg);
//         }
//     }
// 
//     public static void w(String msg) {
//         if(DEBUG) {
//             android.util.Log.w(getTag(), msg);
//         }
//     }
// 
//     public static void e(String msg) {
//         if(DEBUG) {
//             android.util.Log.e(getTag(), msg);
//         }
//     }
// 
//     public static void wtf(String msg) {
//         if(DEBUG) {
//             android.util.Log.wtf(getTag(), msg);
//         }
//     }
// 
//     private static String getTag() {
//         StackTraceElement[] stackTrace = new Throwable().getStackTrace();
//         if (stackTrace.length <= CALL_STACK_INDEX) {
//             throw new IllegalStateException(
//                     "Synthetic stacktrace didn't have enough elements: are you using proguard?");
//         }
//         return createStackElementTag(stackTrace[CALL_STACK_INDEX]);
//     }
// 
//     protected static String createStackElementTag(StackTraceElement element) {
//         String tag = element.getClassName();
//         Matcher m = ANONYMOUS_CLASS.matcher(tag);
//         if (m.find()) {
//             tag = m.replaceAll("");
//         }
//         return tag.substring(tag.lastIndexOf('.') + 1);
//     }
// }


import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPropertyAnimatorListener;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.support.v7.widget.SimpleItemAnimator;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
import io.apptik.multiview.common.Log;
        }
        for (int i = mMovesList.size() - 1; i >= 0; i--) {
            ArrayList<MoveInfo> moves = mMovesList.get(i);
            for (int j = moves.size() - 1; j >= 0; j--) {
                MoveInfo moveInfo = moves.get(j);
                if (moveInfo.holder == item) {
//                    ViewCompat.setTranslationY(view, 0);
//                    ViewCompat.setTranslationX(view, 0);
                    dispatchMoveFinished(item);
                    moves.remove(j);
                    if (moves.isEmpty()) {
                        mMovesList.remove(i);
                    }
                    break;
                }
            }
        }
        for (int i = mAdditionsList.size() - 1; i >= 0; i--) {
            ArrayList<ViewHolder> additions = mAdditionsList.get(i);
            if (additions.remove(item)) {
//                ViewCompat.setAlpha(view, 1);
                dispatchAddFinished(item);
                if (additions.isEmpty()) {
                    mAdditionsList.remove(i);
                }
            }
        }

        // animations should be ended by the cancel above.
        if (mRemoveAnimations.remove(item) && DEBUG) {
// Path: common/src/main/java/io/apptik/multiview/common/Log.java
// public class Log {
// 
//     private static final int CALL_STACK_INDEX = 5;
//     private static final Pattern ANONYMOUS_CLASS = Pattern.compile("(\\$\\d+)+$");
//     private static boolean DEBUG = false;
// 
//     public static void on() {
//         DEBUG = true;
//     }
//     public static void off() {
//         DEBUG = false;
//     }
//     public static void v(String msg) {
//         if(DEBUG) {
//             android.util.Log.v(getTag(), msg);
//         }
//     }
// 
//     public static void d(String msg) {
//         if(DEBUG) {
//             android.util.Log.d(getTag(), msg);
//         }
//     }
// 
//     public static void i(String msg) {
//         if(DEBUG) {
//             android.util.Log.i(getTag(), msg);
//         }
//     }
// 
//     public static void w(String msg) {
//         if(DEBUG) {
//             android.util.Log.w(getTag(), msg);
//         }
//     }
// 
//     public static void e(String msg) {
//         if(DEBUG) {
//             android.util.Log.e(getTag(), msg);
//         }
//     }
// 
//     public static void wtf(String msg) {
//         if(DEBUG) {
//             android.util.Log.wtf(getTag(), msg);
//         }
//     }
// 
//     private static String getTag() {
//         StackTraceElement[] stackTrace = new Throwable().getStackTrace();
//         if (stackTrace.length <= CALL_STACK_INDEX) {
//             throw new IllegalStateException(
//                     "Synthetic stacktrace didn't have enough elements: are you using proguard?");
//         }
//         return createStackElementTag(stackTrace[CALL_STACK_INDEX]);
//     }
// 
//     protected static String createStackElementTag(StackTraceElement element) {
//         String tag = element.getClassName();
//         Matcher m = ANONYMOUS_CLASS.matcher(tag);
//         if (m.find()) {
//             tag = m.replaceAll("");
//         }
//         return tag.substring(tag.lastIndexOf('.') + 1);
//     }
// }


// Path: animators/src/main/java/io/apptik/multiview/animators/BaseItemAnimator.java
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPropertyAnimatorListener;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.support.v7.widget.SimpleItemAnimator;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
import io.apptik.multiview.common.Log;

        }
        for (int i = mMovesList.size() - 1; i >= 0; i--) {
            ArrayList<MoveInfo> moves = mMovesList.get(i);
            for (int j = moves.size() - 1; j >= 0; j--) {
                MoveInfo moveInfo = moves.get(j);
                if (moveInfo.holder == item) {
//                    ViewCompat.setTranslationY(view, 0);
//                    ViewCompat.setTranslationX(view, 0);
                    dispatchMoveFinished(item);
                    moves.remove(j);
                    if (moves.isEmpty()) {
                        mMovesList.remove(i);
                    }
                    break;
                }
            }
        }
        for (int i = mAdditionsList.size() - 1; i >= 0; i--) {
            ArrayList<ViewHolder> additions = mAdditionsList.get(i);
            if (additions.remove(item)) {
//                ViewCompat.setAlpha(view, 1);
                dispatchAddFinished(item);
                if (additions.isEmpty()) {
                    mAdditionsList.remove(i);
                }
            }
        }

        // animations should be ended by the cancel above.
        if (mRemoveAnimations.remove(item) && DEBUG) {
            Log.e("after animation is cancelled, item should not be in "