anchor.diff:         property NamedGroupIndices:TFLREStringIntegerPairHashMap read NamedGroupStringIntegerPairHashMap;
   
        end;
  +
  +function FLREGetVersion:longword; {$ifdef win32}{$ifdef cpu386}stdcall;{$endif}{$endif}
  +function FLREGetVersionString:pansichar; {$ifdef win32}{$ifdef cpu386}stdcall;{$endif}{$endif}
  +function FLRECreate(const RegularExpression:PAnsiChar;const Flags:longword;const Error:PPAnsiChar):pointer; {$ifdef win32}{$ifdef cpu386}stdcall;{$endif}{$endif}
  +procedure FLREDestroy(const Instance:pointer); {$ifdef win32}{$ifdef cpu386}stdcall;{$endif}{$endif}
  +procedure FLREFree(const Data:pointer); {$ifdef win32}{$ifdef cpu386}stdcall;{$endif}{$endif}
  +function FLREGetRange(const Instance:pointer;const LowRange,HighRange:PPAnsiChar;const LowRangeLength,HighRangeLength:PLongint):longint; {$ifdef win32}{$ifdef cpu386}stdcall;{$endif}{$endif}
   
   implementation
   
  
positive.code:  result:=PtrReplaceAll(pansichar(@AInput[1]),length(AInput),pansichar(@AReplacement[1]),length(AReplacement),StartPosition-1,Limit);
  end;
  
  function TFLRE.GetRangeLow:ansistring;
  begin
   CriticalSection.Enter;
   try
    if not HasRange then begin
     CompileRange;
    end;
    result:=RangeLow;
   finally
    CriticalSection.Leave;
   end;
  end;
  
  function TFLRE.GetRangeHigh:ansistring;
  begin
   CriticalSection.Enter;
   try
    if not HasRange then begin
     CompileRange;
    end;
    result:=RangeHigh;
   finally
    CriticalSection.Leave;
   end;
  
negative.code:   BitStateNFAReady:=(CountForwardInstructions>0) and (CountForwardInstructions<512);
  
    BeginningWildcardLoop:=BeginningJump and BeginningSplit and BeginningWildcard;
    if rfSAFE in Flags then begin
     DoUnanchoredStart:=false;
    end else if rfFAST in Flags then begin
     DoUnanchoredStart:=not BeginningAnchor;
    end else begin
     DoUnanchoredStart:=(FixedStringLength=0) and (CountObviousPrefixCharClasses<CountPrefixCharClasses) and not BeginningAnchor;
  