code: def scopeMatch(assumedScopes, requiredScopeSets):
      
      for scopeSet in requiredScopeSets:
          for requiredScope in scopeSet:
              for scope in assumedScopes:
                  if scope == requiredScope:
                      # requiredScope satisifed, no need to check more scopes
                      break
                  if scope.endswith("*") and requiredScope.startswith(scope[:-1]):
                      # requiredScope satisifed, no need to check more scopes
                      break
              else:
                  # requiredScope not satisfied, stop checking scopeSet
                  break
          else:
              # scopeSet satisfied, so we're happy
              return True
      # none of the requiredScopeSets were satisfied
      return False
docs: Take a list of a assumed scopes, and a list of required scope sets on
          disjunctive normal form, and check if any of the required scope sets are
          satisfied.
  
          Example:
  
              requiredScopeSets = [
                  ["scopeA", "scopeB"],
                  ["scopeC"]
              ]
  
          In this case assumed_scopes must contain, either:
          "scopeA" AND "scopeB", OR just "scopeC".