anchor.diff:  constructor TFLRECache.Create;
   begin
    inherited Create;
  + ParallelLock:=0;
    List:=TList.Create;
    HashMap:=TFLRECacheHashMap.Create;
   end;
  
positive.code:  for Index:=0 to length(ARegularExpressions)-1 do begin
    HashKey:=HashKey+#0#2#0+ARegularExpressions[Index];
   end;
   result:=HashMap.GetValue(HashKey);
   if not assigned(result) then begin
    result:=TFLRE.Create(ARegularExpressions,AFlags);
    List.Add(result);
    HashMap.Add(HashKey,result);
   end;
  end;
  
  
negative.code: procedure TFLRECache.Clear;
  var Index:longint;
  begin
   ParallelLockEnter(@ParallelLock);
   try
    for Index:=0 to List.Count-1 do begin
     TFLRE(List[Index]).Free;
    end;
    List.Clear;
    HashMap.Clear;
   finally
    ParallelLockLeave(@ParallelLock);
   end;
  end;
  
  function TFLRECache.Get(const ARegularExpression:TFLRERawByteString;const AFlags:TFLREFlags=[rfDELIMITERS]):TFLRE;
  var HashKey:TFLRERawByteString;
  begin
   HashKey:=PtrCopy(pointer(@AFlags),0,SizeOf(TFLREFlags))+#0#1#0+ARegularExpression;
   ParallelLockEnter(@ParallelLock);
   try
    result:=HashMap.GetValue(HashKey);
    if not assigned(result) then begin
     result:=TFLRE.Create(ARegularExpression,AFlags);
     List.Add(result);
     HashMap.Add(HashKey,result);
    end;
   finally
    ParallelLockLeave(@ParallelLock);
   end;
  end;
  
  