private void handle(boolean sv, SyncPDU m) throws Exception {
        SyncPeer f = m.getFrom();
        SyncPeer t = m.getTo();
        byte[] sid = m.getSetID();
        int mB     = m.getSetsize();
        long begin = m.getBegin();
        long end   = m.getEnd();
        long[] eB  = m.getRecVector();
        
        if (!(t.equals(self) || t.anyHost())) {System.out.println ("not for me"); return;}
        if (!stor.sameSet(sid)) {System.out.println("not same set"); return;}

        long[] dA  = stor.keySetArray(begin, end);
        int mA     = dA.length;
        long[] eA  = Reconciler.syncArray(sv, dA);
               
        Vector<long[]> deltas = new Vector<long[]>();
        boolean success       = Reconciler.reconcile(sv, eA, eB, mA, mB, deltas);
        System.out.println("SV: "  + sv  + " " +
                "eA: "  + eA.length + " " + "eB: "  + eB.length + " " +
                "mA: "  + mA + " " + "mB: "  + mB + " " +
                "success: " + success + " " + "deltas : " + 
                (success ? deltas.get(0).length + "," + deltas.get(1).length : "0,0"));
        
        if (success) handleDeltas(f, deltas.get(0), deltas.get(1));
        deltas.clear();       
        
        if (!success && end - begin <= bulkThresh) { // go postal
            System.out.println("going bulk");
            goBulk(f, begin, end);
            success = true;
        }

        long[] n = Partition.partition(begin, end, 0, Reconciler.getDatamax());
        Partition.next(success, n, n);
        SyncPeer sndc = t.anyHost() ? t : f;
        if (!Partition.isDone(n)) send(requestSyncMessage(sndc, n));       
    }