public MutableUserAgent hardCodedPostProcessing(MutableUserAgent userAgent) {
        // If it is really really bad ... then it is a Hacker.
        if ("true".equals(userAgent.getValue(SYNTAX_ERROR))) {
            if (userAgent.get(DEVICE_CLASS).getConfidence() == -1) {
                setAsHacker(userAgent, 10);
            }
        }

        // Calculate all fields that are constructed from the found ones.
        for (FieldCalculator fieldCalculator: fieldCalculators) {
            if (verbose) {
                LOG.info("Running FieldCalculator: {}", fieldCalculator);
            }
            fieldCalculator.calculate(userAgent);
        }

        return userAgent;
    }
Parses and analyzes the useragent string provided in the MutableUserAgent instance.
NOTE: This method is internally synchronized because the way the analyzer works is not reentrant.
@param userAgent The MutableUserAgent instance that is to be parsed and that gets all results
@return An ImmutableUserAgent copy of the results that is suitable for further usage and caching.
analyzer/src/main/java/nl/basjes/parse/useragent/analyze/UserAgentStringMatchMaker.java