Parse the output of the tool and extract the verification result.
        This method always needs to be overridden.
        If the tool gave a result, this method needs to return one of the
        benchexec.result.RESULT_* strings.
        Otherwise an arbitrary string can be returned that will be shown to the user
        and should give some indication of the failure reason
        (e.g., "CRASH", "OUT_OF_MEMORY", etc.).

def determine_result(self, returncode, returnsignal, output, isTimeout):
        """
        Parse the output of the tool and extract the verification result.
        This method always needs to be overridden.
        If the tool gave a result, this method needs to return one of the
        benchexec.result.RESULT_* strings.
        Otherwise an arbitrary string can be returned that will be shown to the user
        and should give some indication of the failure reason
        (e.g., "CRASH", "OUT_OF_MEMORY", etc.).
        """

        join_output = '\n'.join(output)

        if isTimeout:
            return 'TIMEOUT'

        if returncode == 2:
            return 'ERROR - Pre-run'

        if join_output is None:
            return 'ERROR - no output'
        elif 'Safe.'in join_output:
            return result.RESULT_TRUE_PROP
        elif 'Error state' in join_output:
            return result.RESULT_FALSE_REACH
        else:
            return result.RESULT_UNKNOWN