private void insertNodeAll( Node<K, V> node, Node<K, V> parent, boolean left ) {
        mAllCount++;
        mModCount++;

        if( parent == null ) {
            mAllRoot = node;
            node.mAllColor = BLACK;
            return;
        }

        node.mAllParent = parent;

        if( left ) {
            parent.mAllLeft = node;
        } else {
            parent.mAllRight = node;
        }

        while( true ) {
            if( parent == null ) {
                node.mAllColor = BLACK;
                return;
            }

            node.mAllColor = RED;

            if( parent.mAllColor == BLACK ) {
                return;
            }

            Node<K, V> grandParent = parent.mAllParent;
            Node<K, V> uncle       = (grandParent.mAllLeft == parent ? grandParent.mAllRight : grandParent.mAllLeft);

            if( uncle != null && uncle.mAllColor == RED ) {
                parent.mAllColor = BLACK;
                uncle.mAllColor = BLACK;
                grandParent.mAllColor = RED;

                node = grandParent;
                parent = grandParent.mAllParent;
                left = (parent == null || parent.mAllLeft == node);

                continue;
            }


            if( !left && parent == grandParent.mAllLeft ) {
                rotateLeftAll( parent );
                parent = node;
                node = parent.mAllLeft;
                left = true;

            } else if( left && parent == grandParent.mAllRight ) {
                rotateRightAll( parent );
                parent = node;
                node = parent.mAllRight;
                left = false;
            }

            parent.mAllColor = BLACK;
            grandParent.mAllColor = RED;

            if( left ) {
                rotateRightAll( grandParent );
            } else {
                rotateLeftAll( grandParent );
            }

            break;
        }
    }