anchor.diff:    else
     begin
       MemBlock := SuperLargeMemoryPool.GetMemoryBlock;
  -    MemBlock^.DataLen := SuperMemoryPool.FBlockSize;
       MemBlock^.NextEx := nil;
       MemBlock^.PrevEx := nil;
  -    Move(buf^,MemBlock^.Memory^,MemBlock^.DataLen);
  +    if SuperLargeMemoryPool.FBlockSize <= Len then
  +    begin
  +      MemBlock^.DataLen := SuperLargeMemoryPool.FBlockSize;
  +      Move(buf^,MemBlock^.Memory^,MemBlock^.DataLen)
  +    end
  +    else
  +    begin
  +      MemBlock^.DataLen := Len;
  +      Move(buf^,MemBlock^.Memory^,len);
  +    end;
       if FHead = nil then
         FHead := MemBlock;
       if FLast = nil then
  
positive.code:   else
      MPool := nil;
  
    if MPool <> nil then
    begin
      MemBlock := MPool.GetMemoryBlock;
  
negative.code:       MemBlock^.PrevEx := FLast;
        FLast := MemBlock;
      end;
      Dec(len,MemBlock^.DataLen);
      Inc(buf,MemBlock^.DataLen);
      if Len > 0 then
        AddBuffer(buf,len);
    end;
  end;
  
  