anchor.diff:        MemBlock^.PrevEx := FLast;
         FLast := MemBlock;
       end;
  -
       Dec(len,MemBlock^.DataLen);
       Inc(buf,MemBlock^.DataLen);
  -    AddBuffer(buf,len);
  +    if Len > 0 then
  +      AddBuffer(buf,len);
     end;
   end;
   
  
positive.code:   else
      MPool := nil;
  
    if MPool <> nil then
    begin
      MemBlock := MPool.GetMemoryBlock;
  
negative.code:   else
    begin
      MemBlock := SuperLargeMemoryPool.GetMemoryBlock;
      MemBlock^.NextEx := nil;
      MemBlock^.PrevEx := nil;
      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
  