// Path: endpoints-control/src/main/java/com/google/api/control/util/StringUtils.java
// public final class StringUtils {
//   /**
//    * Strips the trailing slash from a string if it has a trailing slash; otherwise return the
//    * string unchanged.
//    */
//   public static String stripTrailingSlash(String s) {
//     return s == null ? null : CharMatcher.is('/').trimTrailingFrom(s);
//   }
// 
//   private StringUtils() { }
// }


import com.google.api.AuthRequirement;
import com.google.api.AuthenticationRule;
import com.google.api.HttpRule;
import com.google.api.MetricRule;
import com.google.api.Service;
import com.google.api.SystemParameter;
import com.google.api.SystemParameterRule;
import com.google.api.UsageRule;
import com.google.api.control.util.StringUtils;
import com.google.auto.value.AutoValue;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.flogger.FluentLogger;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
    i = new Info(selector, this.authInfos.get(selector), this.quotaInfos.get(selector));
    extractedMethods.put(selector, i);
    return i;
  }

  private static String httpMethodFrom(HttpRule r) {
    switch (r.getPatternCase()) {
      case CUSTOM:
        return r.getCustom().getKind().toLowerCase();
      case DELETE:
      case GET:
      case PATCH:
      case POST:
      case PUT:
        return r.getPatternCase().toString().toLowerCase();
      default:
        return null;
    }
  }

  private static String urlFrom(HttpRule r) {
    switch (r.getPatternCase()) {
      case CUSTOM:
        return r.getCustom().getKind();
      case DELETE:
        return r.getDelete();
      case GET:
        return r.getGet();
      case PATCH:
        return r.getPatch();
// Path: endpoints-control/src/main/java/com/google/api/control/util/StringUtils.java
// public final class StringUtils {
//   /**
//    * Strips the trailing slash from a string if it has a trailing slash; otherwise return the
//    * string unchanged.
//    */
//   public static String stripTrailingSlash(String s) {
//     return s == null ? null : CharMatcher.is('/').trimTrailingFrom(s);
//   }
// 
//   private StringUtils() { }
// }


// Path: endpoints-control/src/main/java/com/google/api/control/model/MethodRegistry.java
import com.google.api.AuthRequirement;
import com.google.api.AuthenticationRule;
import com.google.api.HttpRule;
import com.google.api.MetricRule;
import com.google.api.Service;
import com.google.api.SystemParameter;
import com.google.api.SystemParameterRule;
import com.google.api.UsageRule;
import com.google.api.control.util.StringUtils;
import com.google.auto.value.AutoValue;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.flogger.FluentLogger;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;

    i = new Info(selector, this.authInfos.get(selector), this.quotaInfos.get(selector));
    extractedMethods.put(selector, i);
    return i;
  }

  private static String httpMethodFrom(HttpRule r) {
    switch (r.getPatternCase()) {
      case CUSTOM:
        return r.getCustom().getKind().toLowerCase();
      case DELETE:
      case GET:
      case PATCH:
      case POST:
      case PUT:
        return r.getPatternCase().toString().toLowerCase();
      default:
        return null;
    }
  }

  private static String urlFrom(HttpRule r) {
    switch (r.getPatternCase()) {
      case CUSTOM:
        return r.getCustom().getKind();
      case DELETE:
        return r.getDelete();
      case GET:
        return r.getGet();
      case PATCH:
        return r.getPatch();
      case POST: