anchor.diff:   end;
   end;
   
  -function TFLREThreadLocalStorageInstance.DFAProcessNextState(State:PFLREDFAState;const CurrentChar:ansichar;const Reversed:boolean):PFLREDFAState;
  +procedure TFLREThreadLocalStorageInstance.DFAFullAddInstructionThread(const State:PFLREDFAState;Instruction:PFLREInstruction;const Flags:longword);
  +var StackPointer:longint;
  +    Stack:PPFLREInstructionsStatic;
  +begin
  + Stack:=@DFAStackInstructions[0];
  + StackPointer:=0;
  + Stack^[StackPointer]:=Instruction;
  + inc(StackPointer);
  + while StackPointer>0 do begin
  +  dec(StackPointer);
  +  Instruction:=Stack[StackPointer];
  +  while assigned(Instruction) and (InstructionGenerations[Instruction^.IndexAndOpcode shr 8]<>Generation) do begin
  +   InstructionGenerations[Instruction^.IndexAndOpcode shr 8]:=Generation;
  +   case Instruction^.IndexAndOpcode and $ff of
  +    opJMP:begin
  +     Instruction:=Instruction^.Next;
  +    end;
  +    opSAVE:begin
  +{    if Instruction^.Value=0 then begin
  +      State.Flags:=State.Flags or sfDFAMatchBegins;
  +     end;{}
  +     Instruction:=Instruction^.Next;
  +    end;
  +    opSPLIT:begin
  +     Stack^[StackPointer]:=Instruction^.OtherNext;
  +     inc(StackPointer);
  +     Instruction:=Instruction^.Next;
  +    end;
  +    opBOL,opEOL,opBOT,opEOT,opBRK,opNBRK,opLOOKBEHINDNEGATIVE,opLOOKBEHINDPOSITIVE,opLOOKAHEADNEGATIVE,opLOOKAHEADPOSITIVE,opBACKREFERENCE,opBACKREFERENCEIGNORECASE:begin
  +     // No-ops at DFA
  +     Instruction:=Instruction^.Next;
  +    end;
  +    else begin
  +     if State.CountInstructions>=length(State.Instructions) then begin
  +      SetLength(State.Instructions,(State.CountInstructions+1)*2);
  +     end;
  +     State.Instructions[State.CountInstructions]:=Instruction;
  +     inc(State.CountInstructions);
  +     case Instruction^.IndexAndOpcode and $ff of
  +      opMATCH:begin
  +       State.Flags:=State.Flags or sfDFAMatchWins;
  +      end;
  +     end;
  +     break;
  +    end;
  +   end;
  +  end;
  + end;
  +end;
  +
  +function TFLREThreadLocalStorageInstance.DFAFastProcessNextState(State:PFLREDFAState;const CurrentChar:ansichar;const Reversed:boolean):PFLREDFAState;
   var Counter:longint;
       Instruction:PFLREInstruction;
   begin
  
positive.code:        procedure ParallelNFAAddThread(const ThreadList:PFLREThreadList;Instruction:PFLREInstruction;State:PFLREParallelNFAState;const Position:longint);
  
         function DFACacheState(const State:PFLREDFAState):PFLREDFAState; {$ifdef caninline}inline;{$endif}
         procedure DFAAddInstructionThread(const State:PFLREDFAState;Instruction:PFLREInstruction);
         function DFAProcessNextState(State:PFLREDFAState;const CurrentChar:ansichar;const Reversed:boolean):PFLREDFAState;
         procedure DFADestroyStatePool(var StatePool:PFLREDFAStatePool);
         procedure DFAFreeUsedStatePool;
         function DFAAllocateNewStatePool:PFLREDFAStatePool;
  
negative.code:   inc(Generation);
    GetMem(DFADeadState,DFAStateSize);
    FillChar(DFADeadState^,DFAStateSize,AnsiChar(#0));
    DFAFastAddInstructionThread(DFADeadState,Instance.AnchoredStartInstruction);
    DFADeadState^.Flags:=DFADeadState^.Flags or sfDFADead;
    DFAStateCache.Add(DFADeadState);
    inc(DFACountStatesCached);
  