code: def first_instr(self, start, end, instr, target=None, exact=True):
          
          code = self.code
          assert(start >= 0 and end <= len(code))
  
          try:
              None in instr
          except:
              instr = [instr]
  
          result_offset = None
          current_distance = len(code)
          for offset in self.op_range(start, end):
              op = code[offset]
              if op in instr:
                  if target is None:
                      return offset
                  dest = self.get_target(offset)
                  if dest == target:
                      return offset
                  elif not exact:
                      new_distance = abs(target - dest)
                      if new_distance < current_distance:
                          current_distance = new_distance
                          result_offset = offset
          return result_offset
docs: Find the first <instr> in the block from start to end.
          <instr> is any python bytecode instruction or a list of opcodes
          If <instr> is an opcode with a target (like a jump), a target
          destination can be specified which must match precisely if exact
          is True, or if exact is False, the instruction which has a target
          closest to <target> will be returned.
  
          Return index to it or None if not found.