package com.l7tech.external.assertions.gatewaymanagement.server;

import com.l7tech.common.http.HttpMethod;
import com.l7tech.external.assertions.gatewaymanagement.RESTGatewayManagementAssertion;
import com.l7tech.gateway.common.audit.AssertionMessages;
import com.l7tech.gateway.rest.RestAgent;
import com.l7tech.message.Message;
import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.policy.assertion.PolicyAssertionException;
import com.l7tech.policy.assertion.TargetMessageType;
import com.l7tech.server.StashManagerFactory;
import com.l7tech.server.message.AuthenticationContext;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.policy.assertion.AbstractMessageTargetableServerAssertion;
import com.l7tech.util.ExceptionUtils;
import jakarta.inject.Inject;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.context.ApplicationContext;

public class ServerRESTGatewayManagementAssertion extends AbstractMessageTargetableServerAssertion<RESTGatewayManagementAssertion> {
   public static final String Version1_0_URI;
   @Inject
   private StashManagerFactory stashManagerFactory;
   private final RestAgent a;
   ApplicationContext b;
   private static final String[] d;

   public ServerRESTGatewayManagementAssertion(RESTGatewayManagementAssertion var1, ApplicationContext var2) throws PolicyAssertionException {
      super(var1);
      this.b = GatewayManagementApplicationContext.getAssertionApplicationContext(var2);
      this.a = (RestAgent)this.b.getBean(d[9], RestAgent.class);
   }

   ServerRESTGatewayManagementAssertion(RESTGatewayManagementAssertion var1, ApplicationContext var2, StashManagerFactory var3, RestAgent var4) {
      super(var1);
      this.b = var2;
      this.stashManagerFactory = var3;
      this.a = var4;
   }

   protected AssertionStatus doCheckRequest(PolicyEnforcementContext param1, Message param2, String param3, AuthenticationContext param4) throws IOException, PolicyAssertionException {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 000: aload 1
      // 001: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.getResponse ()Lcom/l7tech/message/Message; 1
      // 006: astore 5
      // 008: aload 1
      // 009: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.getDefaultAuthenticationContext ()Lcom/l7tech/server/message/AuthenticationContext; 1
      // 00e: invokevirtual com/l7tech/server/message/AuthenticationContext.getLastAuthenticatedUser ()Lcom/l7tech/identity/User;
      // 011: astore 6
      // 013: aconst_null
      // 014: aload 6
      // 016: if_acmpne 02a
      // 019: new java/lang/IllegalStateException
      // 01c: dup
      // 01d: getstatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.d [Ljava/lang/String;
      // 020: bipush 4
      // 021: aaload
      // 022: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;)V
      // 025: athrow
      // 026: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 029: athrow
      // 02a: aconst_null
      // 02b: aload 1
      // 02c: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.getService ()Lcom/l7tech/gateway/common/service/PublishedService; 1
      // 031: if_acmpne 060
      // 034: aload 0
      // 035: getfield com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 038: checkcast com/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion
      // 03b: invokevirtual com/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion.getTarget ()Lcom/l7tech/policy/assertion/TargetMessageType;
      // 03e: getstatic com/l7tech/policy/assertion/TargetMessageType.OTHER Lcom/l7tech/policy/assertion/TargetMessageType;
      // 041: invokevirtual com/l7tech/policy/assertion/TargetMessageType.equals (Ljava/lang/Object;)Z
      // 044: ifne 060
      // 047: goto 04e
      // 04a: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 04d: athrow
      // 04e: new java/lang/IllegalStateException
      // 051: dup
      // 052: getstatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.d [Ljava/lang/String;
      // 055: bipush 13
      // 057: aaload
      // 058: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;)V
      // 05b: athrow
      // 05c: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 05f: athrow
      // 060: aload 1
      // 061: aload 0
      // 062: getfield com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 065: checkcast com/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion
      // 068: invokevirtual com/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion.getVariablesUsed ()[Ljava/lang/String;
      // 06b: aload 0
      // 06c: invokevirtual com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.getAudit ()Lcom/l7tech/gateway/common/audit/Audit;
      // 06f: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.getVariableMap ([Ljava/lang/String;Lcom/l7tech/gateway/common/audit/Audit;)Ljava/util/Map; 3
      // 074: astore 7
      // 076: aload 1
      // 077: aload 7
      // 079: aload 2
      // 07a: aload 0
      // 07b: getfield com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 07e: checkcast com/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion
      // 081: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.getURI (Lcom/l7tech/server/message/PolicyEnforcementContext;Ljava/util/Map;Lcom/l7tech/message/Message;Lcom/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion;)Ljava/net/URI;
      // 084: astore 8
      // 086: aload 1
      // 087: aload 2
      // 088: aload 0
      // 089: getfield com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 08c: checkcast com/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion
      // 08f: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.getBaseURI (Lcom/l7tech/server/message/PolicyEnforcementContext;Lcom/l7tech/message/Message;Lcom/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion;)Ljava/net/URI;
      // 092: astore 9
      // 094: aload 1
      // 095: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.getService ()Lcom/l7tech/gateway/common/service/PublishedService; 1
      // 09a: ifnonnull 0a5
      // 09d: aconst_null
      // 09e: goto 0ae
      // 0a1: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 0a4: athrow
      // 0a5: aload 1
      // 0a6: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.getService ()Lcom/l7tech/gateway/common/service/PublishedService; 1
      // 0ab: invokevirtual com/l7tech/gateway/common/service/PublishedService.getId ()Ljava/lang/String;
      // 0ae: astore 10
      // 0b0: aload 7
      // 0b2: aload 2
      // 0b3: aload 0
      // 0b4: getfield com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 0b7: checkcast com/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion
      // 0ba: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.getAction (Ljava/util/Map;Lcom/l7tech/message/Message;Lcom/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion;)Lcom/l7tech/common/http/HttpMethod;
      // 0bd: astore 11
      // 0bf: aload 0
      // 0c0: aload 2
      // 0c1: invokevirtual com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a (Lcom/l7tech/message/Message;)Ljava/lang/String;
      // 0c4: astore 12
      // 0c6: aload 1
      // 0c7: getstatic com/l7tech/policy/assertion/RoutingStatus.ATTEMPTED Lcom/l7tech/policy/assertion/RoutingStatus;
      // 0ca: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.setRoutingStatus (Lcom/l7tech/policy/assertion/RoutingStatus;)V 2
      // 0cf: new com/l7tech/external/assertions/gatewaymanagement/server/cz
      // 0d2: dup
      // 0d3: aload 0
      // 0d4: aload 6
      // 0d6: invokespecial com/l7tech/external/assertions/gatewaymanagement/server/cz.<init> (Lcom/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion;Lcom/l7tech/identity/User;)V
      // 0d9: astore 13
      // 0db: aload 0
      // 0dc: getfield com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a Lcom/l7tech/gateway/rest/RestAgent;
      // 0df: aload 2
      // 0e0: invokevirtual com/l7tech/message/Message.isHttpRequest ()Z
      // 0e3: ifeq 0f6
      // 0e6: aload 2
      // 0e7: invokevirtual com/l7tech/message/Message.getHttpRequestKnob ()Lcom/l7tech/message/HttpRequestKnob;
      // 0ea: invokeinterface com/l7tech/message/HttpRequestKnob.getRemoteHost ()Ljava/lang/String; 1
      // 0ef: goto 0f9
      // 0f2: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 0f5: athrow
      // 0f6: invokestatic com/l7tech/util/InetAddressUtil.getLocalHostAddress ()Ljava/lang/String;
      // 0f9: aload 9
      // 0fb: aload 8
      // 0fd: aload 11
      // 0ff: invokevirtual com/l7tech/common/http/HttpMethod.getProtocolName ()Ljava/lang/String;
      // 102: aload 12
      // 104: aload 2
      // 105: invokevirtual com/l7tech/message/Message.getMimeKnob ()Lcom/l7tech/message/MimeKnob;
      // 108: invokeinterface com/l7tech/message/MimeKnob.getEntireMessageBodyAsInputStream ()Ljava/io/InputStream; 1
      // 10d: aload 13
      // 10f: invokestatic com/l7tech/util/CollectionUtils$MapBuilder.builder ()Lcom/l7tech/util/CollectionUtils$MapBuilder;
      // 112: getstatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.d [Ljava/lang/String;
      // 115: astore 19
      // 117: aload 19
      // 119: bipush 5
      // 11a: aaload
      // 11b: aload 10
      // 11d: invokevirtual com/l7tech/util/CollectionUtils$MapBuilder.put (Ljava/lang/Object;Ljava/lang/Object;)Lcom/l7tech/util/CollectionUtils$MapBuilder;
      // 120: invokevirtual com/l7tech/util/CollectionUtils$MapBuilder.map ()Ljava/util/Map;
      // 123: aload 2
      // 124: invokevirtual com/l7tech/message/Message.getHeadersKnob ()Lcom/l7tech/message/HeadersKnob;
      // 127: aload 19
      // 129: bipush 19
      // 12b: aaload
      // 12c: invokeinterface com/l7tech/message/HeadersKnob.getHeaders (Ljava/lang/String;)Ljava/util/Collection; 2
      // 131: invokeinterface com/l7tech/gateway/rest/RestAgent.handleRequest (Ljava/lang/String;Ljava/net/URI;Ljava/net/URI;Ljava/lang/String;Ljava/lang/String;Ljava/io/InputStream;Ljakarta/ws/rs/core/SecurityContext;Ljava/util/Map;Ljava/util/Collection;)Lcom/l7tech/gateway/rest/RestResponse; 10
      // 136: astore 14
      // 138: aload 5
      // 13a: aload 0
      // 13b: getfield com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.stashManagerFactory Lcom/l7tech/server/StashManagerFactory;
      // 13e: invokeinterface com/l7tech/server/StashManagerFactory.createStashManager ()Lcom/l7tech/common/mime/StashManager; 1
      // 143: aload 14
      // 145: invokevirtual com/l7tech/gateway/rest/RestResponse.getContentType ()Ljava/lang/String;
      // 148: ifnonnull 155
      // 14b: getstatic com/l7tech/common/mime/ContentTypeHeader.NONE Lcom/l7tech/common/mime/ContentTypeHeader;
      // 14e: goto 15d
      // 151: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 154: athrow
      // 155: aload 14
      // 157: invokevirtual com/l7tech/gateway/rest/RestResponse.getContentType ()Ljava/lang/String;
      // 15a: invokestatic com/l7tech/common/mime/ContentTypeHeader.parseValue (Ljava/lang/String;)Lcom/l7tech/common/mime/ContentTypeHeader;
      // 15d: aload 14
      // 15f: invokevirtual com/l7tech/gateway/rest/RestResponse.getInputStream ()Ljava/io/InputStream;
      // 162: invokevirtual com/l7tech/message/Message.initialize (Lcom/l7tech/common/mime/StashManager;Lcom/l7tech/common/mime/ContentTypeHeader;Ljava/io/InputStream;)V
      // 165: aload 5
      // 167: invokevirtual com/l7tech/message/Message.getMimeKnob ()Lcom/l7tech/message/MimeKnob;
      // 16a: invokeinterface com/l7tech/message/MimeKnob.getContentLength ()J 1
      // 16f: pop2
      // 170: aload 5
      // 172: invokevirtual com/l7tech/message/Message.isHttpResponse ()Z
      // 175: ifeq 18e
      // 178: aload 5
      // 17a: invokevirtual com/l7tech/message/Message.getHttpResponseKnob ()Lcom/l7tech/message/HttpResponseKnob;
      // 17d: aload 14
      // 17f: invokevirtual com/l7tech/gateway/rest/RestResponse.getStatus ()I
      // 182: invokeinterface com/l7tech/message/HttpResponseKnob.setStatus (I)V 2
      // 187: goto 18e
      // 18a: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 18d: athrow
      // 18e: aload 1
      // 18f: aload 0
      // 190: getfield com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 193: checkcast com/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion
      // 196: invokevirtual com/l7tech/external/assertions/gatewaymanagement/RESTGatewayManagementAssertion.getVariablePrefix ()Ljava/lang/String;
      // 199: getstatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.d [Ljava/lang/String;
      // 19c: astore 19
      // 19e: aload 19
      // 1a0: bipush 10
      // 1a2: aaload
      // 1a3: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 1a8: aload 14
      // 1aa: invokevirtual com/l7tech/gateway/rest/RestResponse.getStatus ()I
      // 1ad: invokestatic java/lang/Integer.valueOf (I)Ljava/lang/Integer;
      // 1b0: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.setVariable (Ljava/lang/String;Ljava/lang/Object;)V 3
      // 1b5: aload 14
      // 1b7: invokevirtual com/l7tech/gateway/rest/RestResponse.getHeaders ()Ljakarta/ws/rs/core/MultivaluedMap;
      // 1ba: invokeinterface jakarta/ws/rs/core/MultivaluedMap.keySet ()Ljava/util/Set; 1
      // 1bf: invokeinterface java/util/Set.iterator ()Ljava/util/Iterator; 1
      // 1c4: astore 15
      // 1c6: aload 15
      // 1c8: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 1cd: ifeq 24a
      // 1d0: aload 15
      // 1d2: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 1d7: checkcast java/lang/String
      // 1da: astore 16
      // 1dc: aload 16
      // 1de: getstatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.d [Ljava/lang/String;
      // 1e1: astore 19
      // 1e3: aload 19
      // 1e5: bipush 1
      // 1e6: aaload
      // 1e7: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 1ea: ifne 1c6
      // 1ed: aload 16
      // 1ef: aload 19
      // 1f1: bipush 17
      // 1f3: aaload
      // 1f4: invokevirtual java/lang/String.equalsIgnoreCase (Ljava/lang/String;)Z
      // 1f7: ifeq 201
      // 1fa: goto 1c6
      // 1fd: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 200: athrow
      // 201: aload 14
      // 203: invokevirtual com/l7tech/gateway/rest/RestResponse.getHeaders ()Ljakarta/ws/rs/core/MultivaluedMap;
      // 206: aload 16
      // 208: invokeinterface jakarta/ws/rs/core/MultivaluedMap.get (Ljava/lang/Object;)Ljava/lang/Object; 2
      // 20d: checkcast java/util/List
      // 210: invokeinterface java/util/List.iterator ()Ljava/util/Iterator; 1
      // 215: astore 17
      // 217: aload 17
      // 219: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 21e: ifeq 247
      // 221: aload 17
      // 223: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 228: astore 18
      // 22a: aload 5
      // 22c: invokevirtual com/l7tech/message/Message.getHeadersKnob ()Lcom/l7tech/message/HeadersKnob;
      // 22f: aload 16
      // 231: aload 18
      // 233: invokevirtual java/lang/Object.toString ()Ljava/lang/String;
      // 236: getstatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.d [Ljava/lang/String;
      // 239: astore 19
      // 23b: aload 19
      // 23d: bipush 2
      // 23e: aaload
      // 23f: invokeinterface com/l7tech/message/HeadersKnob.addHeader (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/String;)V 4
      // 244: goto 217
      // 247: goto 1c6
      // 24a: aload 1
      // 24b: getstatic com/l7tech/policy/assertion/RoutingStatus.ROUTED Lcom/l7tech/policy/assertion/RoutingStatus;
      // 24e: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.setRoutingStatus (Lcom/l7tech/policy/assertion/RoutingStatus;)V 2
      // 253: bipush 3
      // 254: anewarray 459
      // 257: dup
      // 258: bipush 0
      // 259: sipush 200
      // 25c: invokestatic java/lang/Integer.valueOf (I)Ljava/lang/Integer;
      // 25f: aastore
      // 260: dup
      // 261: bipush 1
      // 262: sipush 201
      // 265: invokestatic java/lang/Integer.valueOf (I)Ljava/lang/Integer;
      // 268: aastore
      // 269: dup
      // 26a: bipush 2
      // 26b: sipush 204
      // 26e: invokestatic java/lang/Integer.valueOf (I)Ljava/lang/Integer;
      // 271: aastore
      // 272: invokestatic com/l7tech/util/CollectionUtils.list ([Ljava/lang/Object;)Ljava/util/List;
      // 275: aload 14
      // 277: invokevirtual com/l7tech/gateway/rest/RestResponse.getStatus ()I
      // 27a: invokestatic java/lang/Integer.valueOf (I)Ljava/lang/Integer;
      // 27d: invokeinterface java/util/List.contains (Ljava/lang/Object;)Z 2
      // 282: ifne 304
      // 285: aload 8
      // 287: invokevirtual java/net/URI.toString ()Ljava/lang/String;
      // 28a: getstatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.d [Ljava/lang/String;
      // 28d: bipush 22
      // 28f: aaload
      // 290: invokevirtual java/lang/String.matches (Ljava/lang/String;)Z
      // 293: ifne 304
      // 296: goto 29d
      // 299: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 29c: athrow
      // 29d: new java/io/ByteArrayOutputStream
      // 2a0: dup
      // 2a1: invokespecial java/io/ByteArrayOutputStream.<init> ()V
      // 2a4: astore 15
      // 2a6: aload 5
      // 2a8: invokevirtual com/l7tech/message/Message.getMimeKnob ()Lcom/l7tech/message/MimeKnob;
      // 2ab: invokeinterface com/l7tech/message/MimeKnob.getEntireMessageBodyAsInputStream ()Ljava/io/InputStream; 1
      // 2b0: astore 16
      // 2b2: aload 16
      // 2b4: aload 15
      // 2b6: invokestatic com/l7tech/util/IOUtils.copyStream (Ljava/io/InputStream;Ljava/io/OutputStream;)J
      // 2b9: pop2
      // 2ba: aload 16
      // 2bc: ifnull 2e2
      // 2bf: aload 16
      // 2c1: invokevirtual java/io/InputStream.close ()V
      // 2c4: goto 2e2
      // 2c7: astore 17
      // 2c9: aload 16
      // 2cb: ifnull 2df
      // 2ce: aload 16
      // 2d0: invokevirtual java/io/InputStream.close ()V
      // 2d3: goto 2df
      // 2d6: astore 18
      // 2d8: aload 17
      // 2da: aload 18
      // 2dc: invokevirtual java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
      // 2df: aload 17
      // 2e1: athrow
      // 2e2: aload 15
      // 2e4: getstatic com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.d [Ljava/lang/String;
      // 2e7: bipush 12
      // 2e9: aaload
      // 2ea: invokevirtual java/io/ByteArrayOutputStream.toString (Ljava/lang/String;)Ljava/lang/String;
      // 2ed: astore 16
      // 2ef: aload 0
      // 2f0: invokevirtual com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.getAudit ()Lcom/l7tech/gateway/common/audit/Audit;
      // 2f3: getstatic com/l7tech/gateway/common/audit/AssertionMessages.GATEWAYMANAGEMENT_ERROR Lcom/l7tech/gateway/common/audit/Messages$M;
      // 2f6: bipush 1
      // 2f7: anewarray 247
      // 2fa: dup
      // 2fb: bipush 0
      // 2fc: aload 16
      // 2fe: aastore
      // 2ff: invokeinterface com/l7tech/gateway/common/audit/Audit.logAndAudit (Lcom/l7tech/gateway/common/audit/AuditDetailMessage;[Ljava/lang/String;)V 3
      // 304: getstatic com/l7tech/policy/assertion/AssertionStatus.NONE Lcom/l7tech/policy/assertion/AssertionStatus;
      // 307: areturn
      // 308: astore 6
      // 30a: aload 0
      // 30b: aload 6
      // 30d: invokevirtual com/l7tech/external/assertions/gatewaymanagement/server/ServerRESTGatewayManagementAssertion.a (Ljava/lang/Exception;)I
      // 310: pop
      // 311: getstatic com/l7tech/policy/assertion/AssertionStatus.FAILED Lcom/l7tech/policy/assertion/AssertionStatus;
      // 314: areturn
      // try (237 -> 270): 271 java/lang/Throwable
      // try (202 -> 209): 209 java/lang/Throwable
      // try (149 -> 164): 165 java/lang/Throwable
      // try (135 -> 144): 144 java/lang/Throwable
      // try (97 -> 106): 106 java/lang/Throwable
      // try (66 -> 71): 71 java/lang/Throwable
      // try (23 -> 40): 40 java/lang/Throwable
      // try (19 -> 30): 31 java/lang/Throwable
      // try (7 -> 17): 17 java/lang/Throwable
      // try (281 -> 285): 290 java/lang/Throwable
      // try (293 -> 295): 296 java/lang/Throwable
      // try (3 -> 319): 320 java/lang/Exception
   }

   private String a(Message var1) throws IOException {
      try {
         if (((RESTGatewayManagementAssertion)this.assertion).getTarget().equals(TargetMessageType.OTHER)) {
            return var1.getMimeKnob().getOuterContentType().getFullValue();
         }
      } catch (IOException var2) {
         throw a(var2);
      }

      return var1.getHttpRequestKnob().getHeaderSingleValue(d[8]);
   }

   protected static HttpMethod getAction(Map<String, Object> var0, Message var1, RESTGatewayManagementAssertion var2) throws IllegalArgumentException {
      if (var2.getTarget().equals(TargetMessageType.OTHER)) {
         String var10001 = var2.getVariablePrefix();
         String[] var4 = d;
         Object var3 = var0.get(var10001 + var4[15]);

         try {
            if (var3 == null) {
               throw new IllegalArgumentException(var2.getVariablePrefix() + var4[0]);
            }
         } catch (IllegalArgumentException var5) {
            throw a(var5);
         }

         return HttpMethod.valueOf(var3.toString().toUpperCase());
      } else {
         return var1.getHttpRequestKnob().getMethod();
      }
   }

   protected static URI getURI(PolicyEnforcementContext var0, Map<String, Object> var1, Message var2, RESTGatewayManagementAssertion var3) throws IllegalArgumentException, URISyntaxException {
      if (var3.getTarget().equals(TargetMessageType.OTHER)) {
         String var10001 = var3.getVariablePrefix();
         String[] var17 = d;
         Object var14 = var1.get(var10001 + var17[20]);

         try {
            if (var14 == null) {
               throw new IllegalArgumentException(var3.getVariablePrefix() + var17[18]);
            }
         } catch (IllegalArgumentException var11) {
            throw a(var11);
         }

         String var15 = var14.toString();
         if (var15.startsWith("/")) {
            var15 = var15.substring(1);
         }

         return new URI(var15);
      } else {
         String var5 = var2.getHttpRequestKnob().getRequestUri();
         String var6 = var0.getService().getRoutingUri();
         String[] var10 = d;
         Pattern var7 = Pattern.compile(var6.replace("*", var10[7]));
         Matcher var8 = var7.matcher(var5);

         label59: {
            try {
               if (!var8.matches() || var8.groupCount() <= 0) {
                  break label59;
               }
            } catch (IllegalArgumentException var13) {
               throw a(var13);
            }

            String var4 = var8.group(1);
            String var9 = var2.getHttpRequestKnob().getQueryString();
            if (var9 != null) {
               var4 = var4 + "?" + var9;
            }

            try {
               if (var4 == null) {
                  throw new IllegalArgumentException(d[14]);
               }
            } catch (IllegalArgumentException var12) {
               throw a(var12);
            }

            return new URI(var4);
         }

         var10 = d;
         throw new IllegalArgumentException(var10[16]);
      }
   }

   protected static URI getBaseURI(PolicyEnforcementContext var0, Message var1, RESTGatewayManagementAssertion var2) throws IllegalArgumentException, URISyntaxException {
      try {
         if (var2.getTarget().equals(TargetMessageType.OTHER)) {
            return new URI("/");
         }
      } catch (IllegalArgumentException var6) {
         throw a(var6);
      }

      String var10000;
      label27: {
         try {
            if (var1.getHttpRequestKnob().isSecure()) {
               var10000 = d[3];
               break label27;
            }
         } catch (IllegalArgumentException var7) {
            throw a(var7);
         }

         String[] var5 = d;
         var10000 = var5[21];
      }

      String var3 = var10000;
      var3 = var3 + var1.getTcpKnob().getLocalHost();
      var3 = var3 + ":" + var1.getTcpKnob().getLocalPort();
      String var4 = var0.getService().getRoutingUri();
      if (var4.endsWith("*")) {
         var3 = var3 + var4.substring(0, var4.length() - 1);
         return new URI(var3);
      } else {
         throw new IllegalArgumentException(d[11]);
      }
   }

   private int a(Exception var1) {
      short var2 = 500;
      if (var1 instanceof UnsupportedOperationException) {
         var2 = 405;
      }

      this.getAudit().logAndAudit(AssertionMessages.GATEWAYMANAGEMENT_ERROR, new String[]{var1.getMessage()}, ExceptionUtils.getDebugException(var1));
      return var2;
   }

   private static Throwable a(Throwable var0) {
      return var0;
   }

   static {
      String[] var5 = new String[23];
      int var3 = 0;
      String var2 = " dh:)6\u0004.fd 4<\u0012z%}/20\u000blinn.6\u001e.cd;.=D\u000eMje:%7\u001e#In '-\u0002\u000bFQ_\u001e`\u0011\u000foan<\bfq\u007f>3cE!1Ok+/5-\u0002kk\u007f'#8\u001eka+;3<\u0018.lxn2<\u001b{ly+$y\b{q+ /-J~wn=%7\u001e\t]`y8):\u000fGa\u0004?+;a\u0004&+!g\fMje:%7\u001e#Qr>%\t|`x:\u0001>\u000f`q\u0007 v\u007f/4,\u0019OMj~\"$y\u0004aq+-!5\t{ij:%y\bovnn5+\u0003 %_&%y\u0019kw}'#<J``n*3y\u001ea%y+36\u0006x`+9)-\u0002.d+9)5\u000e.fj<$yB$,\u0005[QMcxDO%y+36\u0006x`on3<\u0018xlh+`0\u0019.wn?50\u0018ka+;.5\u000f}v+/`4\u000f}vj)%y\u001cowb/\"5\u000f.lxn48\u0018i`\u007f+$\u0016Zmnn5+\u0003.fj .6\u001e.gnn.,\u0006b\u0007 dh:)6\u0004\u0017Mj~\"$y\u0004aq+-!5\t{ij:%y\u001f|l\fMje:%7\u001e#Qr>%  py'`:\u0005`qn64y\u001cowb/\"5\u000f.kd:`?\u0005{ko`\u000bFQ_\u001e`\u0011\u000foan<\u0004 py'";
      int var4 = " dh:)6\u0004.fd 4<\u0012z%}/20\u000blinn.6\u001e.cd;.=D\u000eMje:%7\u001e#In '-\u0002\u000bFQ_\u001e`\u0011\u000foan<\bfq\u007f>3cE!1Ok+/5-\u0002kk\u007f'#8\u001eka+;3<\u0018.lxn2<\u001b{ly+$y\b{q+ /-J~wn=%7\u001e\t]`y8):\u000fGa\u0004?+;a\u0004&+!g\fMje:%7\u001e#Qr>%\t|`x:\u0001>\u000f`q\u0007 v\u007f/4,\u0019OMj~\"$y\u0004aq+-!5\t{ij:%y\bovnn5+\u0003 %_&%y\u0019kw}'#<J``n*3y\u001ea%y+36\u0006x`+9)-\u0002.d+9)5\u000e.fj<$yB$,\u0005[QMcxDO%y+36\u0006x`on3<\u0018xlh+`0\u0019.wn?50\u0018ka+;.5\u000f}v+/`4\u000f}vj)%y\u001cowb/\"5\u000f.lxn48\u0018i`\u007f+$\u0016Zmnn5+\u0003.fj .6\u001e.gnn.,\u0006b\u0007 dh:)6\u0004\u0017Mj~\"$y\u0004aq+-!5\t{ij:%y\u001f|l\fMje:%7\u001e#Qr>%  py'`:\u0005`qn64y\u001cowb/\"5\u000f.kd:`?\u0005{ko`\u000bFQ_\u001e`\u0011\u000foan<\u0004 py'"
         .length();
      char var1 = '#';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 85;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = c(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     d = var5;
                     Version1_0_URI = d[6];
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "avx9}qB\u0017'(n<):\u0001l^3gm*\bzv1=5+\b'(";
                  var4 = "avx9}qB\u0017'(n<):\u0001l^3gm*\bzv1=5+\b'(".length();
                  var1 = 7;
                  var7 = -1;
            }

            var10000 = 82;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static char[] a(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 63);
      }

      return var10000;
   }

   private static String c(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 91;
            case 1 -> 80;
            case 2 -> 94;
            case 3 -> 27;
            case 4 -> 21;
            case 5 -> 12;
            default -> 63;
         });
      }

      return new String(var10001).intern();
   }
}
