code: def requires_swimlane_version(min_version=None, max_version=None):
      
  
      if min_version is None and max_version is None:
          raise ValueError('Must provide either min_version, max_version, or both')
  
      if min_version and max_version and compare_versions(min_version, max_version) < 0:
          raise ValueError('min_version must be <= max_version ({}, {})'.format(min_version, max_version))
  
      def decorator(func):
  
          @functools.wraps(func)
          def wrapper(self, *args, **kwargs):
              swimlane = self._swimlane
  
              if min_version and compare_versions(min_version, swimlane.build_version, True) < 0:
                  raise InvalidSwimlaneBuildVersion(swimlane, min_version, max_version)
  
              if max_version and compare_versions(swimlane.build_version, max_version, True) < 0:
                  raise InvalidSwimlaneBuildVersion(swimlane, min_version, max_version)
  
              return func(self, *args, **kwargs)
  
          return wrapper
  
      return decorator
docs: Decorator for SwimlaneResolver methods verifying Swimlane server build version is within a given inclusive range
  
      Raises:
          InvalidVersion: Raised before decorated method call if Swimlane server version is out of provided range
          ValueError: If neither min_version or max_version were provided, or if those values conflict (2.15 < 2.14)