<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def fast_forward(self, start_dt):
 """ Fast-forward file to given start_dt datetime obj using binary search. Only fast for files. Streams need to be forwarded manually, and it will miss the first line that would otherwise match (as it consumes the log line). """

        if self.from_stdin:
            # skip lines until start_dt is reached
            return

        else:
            # fast bisection path
            max_mark = self.filesize
            step_size = max_mark

            # check if start_dt is already smaller than first datetime
            self.filehandle.seek(0)
            le = self.next()
            if le.datetime and le.datetime >= start_dt:
                self.filehandle.seek(0)
                return

            le = None
            self.filehandle.seek(0)

            # search for lower bound
            while abs(step_size) > 100:
                step_size = ceil(step_size / 2.)

                self.filehandle.seek(step_size, 1)
                le = self._find_curr_line()
                if not le:
                    break

                if le.datetime >= start_dt:
                    step_size = -abs(step_size)
                else:
                    step_size = abs(step_size)

            if not le:
                return

            # now walk backwards until we found a truly smaller line
            while self.filehandle.tell() >= 2 and (le.datetime is None or
                                                   le.datetime >= start_dt):
                self.filehandle.seek(-2, 1)

                le = self._find_curr_line(prev=True)