anchor.diff:          , LApplication.Parameters.ByName(TMARSToken.JWT_SECRET_PARAM, TMARSToken.JWT_SECRET_PARAM_DEFAULT).AsString
         );
         try
  -        DoBeforeHandleRequest(LApplication);
  -        LStopWatch := TStopwatch.StartNew;
  -        LApplication.HandleRequest(ARequest, AResponse, LURL);
  -        LStopWatch.Stop;
  -        DoAfterHandleRequest(LApplication, LStopWatch);
  +        if DoBeforeHandleRequest(LApplication) then begin
  +          LStopWatch := TStopwatch.StartNew;
  +          LApplication.HandleRequest(ARequest, AResponse, LURL);
  +          LStopWatch.Stop;
  +          DoAfterHandleRequest(LApplication, LStopWatch);
  +        end;
         finally
           FToken.Free;
         end;
  
positive.code:     LSubscriber.AfterHandleRequest(Self, AApplication, AStopWatch);
  end;
  
  procedure TMARSEngine.DoBeforeHandleRequest(const AApplication: TMARSApplication);
  var
    LSubscriber: IMARSHandleRequestEventListener;
  begin
    for LSubscriber in FSubscribers do
      LSubscriber.BeforeHandleRequest(Self, AApplication);
  end;
  
  procedure TMARSEngine.EnumerateApplications(
  
negative.code:   TMARSEngine = class;
  
    IMARSHandleRequestEventListener = interface
      procedure BeforeHandleRequest(const ASender: TMARSEngine; const AApplication: TMARSApplication; var AIsAllowed: Boolean);
      procedure AfterHandleRequest(const ASender: TMARSEngine; const AApplication: TMARSApplication; const AStopWatch: TStopWatch);
    end;
  
    TMARSEngineBeforeHandleRequestEvent = TFunc<TMARSEngine, TMARSURL, Boolean>;
  
    TMARSEngine = class
    private
  