boolean verify() {
        if (!isValid()) {
            return false;
        }
        int start = _buffer.getKeyBlockStart();
        int end = _buffer.getKeyBlockEnd();
        //
        // This is the index of a Findex array entry that needs to be fixed up
        // with its true count.
        //

        int ebc0;
        int ebc = -1;
        int ebc2 = Buffer.decodeKeyBlockEbc(_buffer.getInt(start));
        int faultAt = -1;

        for (int i = 0, p = start; p < end; i++, p += Buffer.KEYBLOCK_LENGTH) {
            ebc0 = ebc;
            ebc = ebc2;
            ebc2 = p + Buffer.KEYBLOCK_LENGTH < end ? Buffer.decodeKeyBlockEbc(_buffer.getInt(p
                    + Buffer.KEYBLOCK_LENGTH)) : 0;
            if (ebc2 > ebc) {
                if (getRunCount(i) >= 0) {
                    if (faultAt < 0) {
                        faultAt = i;
                    }
                    return false;
                }
            } else if (ebc > ebc0) {
                if (getRunCount(i) < 0) {
                    if (faultAt < 0) {
                        faultAt = i;
                    }
                    return false;
                }
            }
        }
        return true;
    }