public static function verifyMd5Hash($secretKey = null, $urlProvider = null, $queryStringPrefix = null)
 {
     global $defaultQueryStringPrefix, $defaultSecretKey, $defaultUrlProviderFactory;
     if ($urlProvider == null) {
         $urlProvider = $defaultUrlProviderFactory();
     }
     if ($secretKey == null) {
         $secretKey = $defaultSecretKey;
     }
     if ($queryStringPrefix == null) {
         $queryStringPrefix = $defaultQueryStringPrefix;
     }
     if ($secretKey == null) {
         throw new InvalidArgumentException("Secret key is null");
     }
     try {
         if ($urlProvider->getQueueId($queryStringPrefix) == null && $urlProvider->getPlaceInQueue($queryStringPrefix) == null && $urlProvider->getTimeStamp($queryStringPrefix) == null) {
             return null;
         }
         if ($urlProvider->getQueueId($queryStringPrefix) == null || $urlProvider->getPlaceInQueue($queryStringPrefix) == null || $urlProvider->getTimeStamp($queryStringPrefix) == null) {
             throw new InvalidKnownUserUrlException();
         }
         KnownUserFactory::verifyUrl($urlProvider->getUrl(), $secretKey);
         return new Md5KnownUser($urlProvider->getQueueId($queryStringPrefix), KnownUserFactory::decryptPlaceInQueue($urlProvider->getPlaceInQueue($queryStringPrefix)), KnownUserFactory::decodeTimestamp($urlProvider->getTimeStamp($queryStringPrefix)), $urlProvider->getCustomerId($queryStringPrefix), $urlProvider->getEventId($queryStringPrefix), KnownUserFactory::decodeRedirectType($urlProvider->getRedirectType($queryStringPrefix)), $urlProvider->getOriginalUrl($queryStringPrefix));
     } catch (KnownUserException $e) {
         $e->setValidationUrl($urlProvider->getUrl());
         $e->setOriginalUrl($urlProvider->getOriginalUrl($queryStringPrefix));
         throw $e;
     }
 }