package com.l7tech.server.admin;

import com.l7tech.gateway.common.security.rbac.Secured;
import com.l7tech.policy.assertion.ExtensionInterfaceBinding;
import com.l7tech.server.policy.module.AssertionModuleUnregistrationEvent;
import com.l7tech.server.util.PostStartupApplicationListener;
import com.l7tech.server.util.UnsupportedExceptionsThrowsAdvice;
import com.l7tech.util.ClassUtils;
import com.l7tech.util.Either;
import com.l7tech.util.Option;
import jakarta.inject.Inject;
import java.lang.annotation.Annotation;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.aopalliance.intercept.MethodInterceptor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.aop.PointcutAdvisor;
import org.springframework.context.ApplicationEvent;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.AnnotationTransactionAttributeSource;
import org.springframework.transaction.interceptor.TransactionInterceptor;

public class ExtensionInterfaceManager implements PostStartupApplicationListener {
   private final ReadWriteLock a = new ReentrantReadWriteLock();
   private final Map<String, Reference<Class>> b = new HashMap<>();
   private final Map<f, e> c = new HashMap<>();
   @Nullable
   private final PointcutAdvisor d;
   @Nullable
   private final MethodInterceptor e;
   @Nullable
   private final MethodInterceptor f;
   @Inject
   @Nullable
   private UnsupportedExceptionsThrowsAdvice unsupportedExceptionsThrowsAdvice;
   private static final String[] g;

   public ExtensionInterfaceManager(@Nullable MethodInterceptor var1, @Nullable PointcutAdvisor var2, @Nullable PlatformTransactionManager var3) {
      this.e = var1;
      this.d = var2;
      this.f = var3 == null ? null : new TransactionInterceptor(var3, new AnnotationTransactionAttributeSource());
   }

   public <T> void registerInterface(@NotNull ExtensionInterfaceBinding<T> var1) {
      try {
         if (var1 == null) {
            a(0);
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }

      this.registerInterface(var1.getInterfaceClass(), var1.getInstanceIdentifier(), var1.getImplementationObject());
   }

   public <T> void registerInterface(@NotNull Class<T> var1, @Nullable String var2, @NotNull T var3) {
      try {
         if (var1 == null) {
            a(1);
         }
      } catch (IllegalArgumentException var4) {
         throw a(var4);
      }

      try {
         if (var3 == null) {
            a(2);
         }
      } catch (IllegalArgumentException var5) {
         throw a(var5);
      }

      this.registerInterface(var1, var2, var3, false);
   }

   public <T> void registerInterface(@NotNull Class<T> var1, @Nullable String var2, @NotNull T var3, boolean var4) {
      try {
         if (var1 == null) {
            a(3);
         }
      } catch (IllegalArgumentException var21) {
         throw a(var21);
      }

      try {
         if (var3 == null) {
            a(4);
         }
      } catch (IllegalArgumentException var16) {
         throw a(var16);
      }

      try {
         try {
            this.a.writeLock().lock();
            if (!var1.isAssignableFrom(var3.getClass())) {
               throw new IllegalArgumentException(g[1]);
            }
         } catch (IllegalArgumentException var19) {
            throw a(var19);
         }

         this.a(var1, var4);
         Class var5 = this.a(var1.getName());

         label86: {
            try {
               if (var5 == null) {
                  this.b.put(var1.getName(), new WeakReference<>(var1));
                  break label86;
               }
            } catch (IllegalArgumentException var17) {
               throw a(var17);
            }

            try {
               if (var5 != var1) {
                  throw new IllegalArgumentException(g[4] + var1.getName() + g[7]);
               }
            } catch (IllegalArgumentException var15) {
               throw a(var15);
            }
         }

         f var6 = new f(var1, var2);

         try {
            if (this.c.containsKey(var6)) {
               throw new IllegalArgumentException(g[30] + var1.getName() + g[6] + var2 + g[10]);
            }
         } catch (IllegalArgumentException var18) {
            throw a(var18);
         }

         this.c.put(var6, new e(var6, var3, var3));
      } finally {
         this.a.writeLock().unlock();
      }
   }

   private <T> void a(Class<T> var1, boolean var2) {
      try {
         if (!var2) {
            a(var1);
            b(var1);
         }
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }
   }

   private static <T> void a(Class<T> var0) {
      ArrayList var1 = new ArrayList();

      try {
         a(var0, var1);
         if (var1.size() < 1) {
            throw new IllegalArgumentException(g[2]);
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }
   }

   private static <T> void b(Class<T> var0) {
      Method[] var1 = var0.getMethods();

      for (Method var5 : var1) {
         Secured var6 = var5.getAnnotation(Secured.class);

         try {
            if (var6 == null) {
               throw new IllegalArgumentException(g[19] + ClassUtils.getMethodName(var5));
            }
         } catch (IllegalArgumentException var16) {
            throw a(var16);
         }

         int var7 = 0;
         Annotation[] var8 = var5.getAnnotations();

         for (Annotation var12 : var8) {
            try {
               if (var12 instanceof Secured) {
                  var7++;
               }
            } catch (IllegalArgumentException var15) {
               throw a(var15);
            }
         }

         try {
            if (var7 < 1) {
               throw new IllegalArgumentException(g[26] + ClassUtils.getMethodName(var5));
            }
         } catch (IllegalArgumentException var13) {
            throw a(var13);
         }

         try {
            if (var7 != 1) {
               throw new IllegalArgumentException(g[11] + ClassUtils.getMethodName(var5));
            }
         } catch (IllegalArgumentException var14) {
            throw a(var14);
         }
      }
   }

   private static void a(Class var0, List<Secured> var1) {
      Secured var2 = var0.getAnnotation(Secured.class);

      try {
         if (var2 != null) {
            var1.add(var2);
         }
      } catch (IllegalArgumentException var7) {
         throw a(var7);
      }

      for (Class var6 : var0.getInterfaces()) {
         a(var6, var1);
      }
   }

   public boolean isInterfaceRegistered(@NotNull String param1, @Nullable String param2) {
      // $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:
      // 00: aload 1
      // 01: ifnonnull 0f
      // 04: bipush 5
      // 05: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (I)V
      // 08: goto 0f
      // 0b: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0e: athrow
      // 0f: aload 0
      // 10: getfield com/l7tech/server/admin/ExtensionInterfaceManager.a Ljava/util/concurrent/locks/ReadWriteLock;
      // 13: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 18: invokeinterface java/util/concurrent/locks/Lock.lock ()V 1
      // 1d: aload 0
      // 1e: aload 1
      // 1f: invokevirtual com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/String;)Ljava/lang/Class;
      // 22: astore 3
      // 23: aload 3
      // 24: ifnull 4b
      // 27: aload 0
      // 28: getfield com/l7tech/server/admin/ExtensionInterfaceManager.c Ljava/util/Map;
      // 2b: new com/l7tech/server/admin/f
      // 2e: dup
      // 2f: aload 3
      // 30: aload 2
      // 31: invokespecial com/l7tech/server/admin/f.<init> (Ljava/lang/Class;Ljava/lang/String;)V
      // 34: invokeinterface java/util/Map.containsKey (Ljava/lang/Object;)Z 2
      // 39: ifeq 4b
      // 3c: goto 43
      // 3f: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 42: athrow
      // 43: bipush 1
      // 44: goto 4c
      // 47: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 4a: athrow
      // 4b: bipush 0
      // 4c: istore 4
      // 4e: aload 0
      // 4f: getfield com/l7tech/server/admin/ExtensionInterfaceManager.a Ljava/util/concurrent/locks/ReadWriteLock;
      // 52: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 57: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 5c: iload 4
      // 5e: ireturn
      // 5f: astore 5
      // 61: aload 0
      // 62: getfield com/l7tech/server/admin/ExtensionInterfaceManager.a Ljava/util/concurrent/locks/ReadWriteLock;
      // 65: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 6a: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 6f: aload 5
      // 71: athrow
      // try (17 -> 31): 31 java/lang/IllegalArgumentException
      // try (15 -> 26): 27 java/lang/IllegalArgumentException
      // try (0 -> 4): 5 java/lang/IllegalArgumentException
      // try (7 -> 35): 41 null
      // try (41 -> 42): 41 null
   }

   // $VF: Could not verify finally blocks. A semaphore variable has been added to preserve control flow.
   // 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!)
   @NotNull
   public Collection<ExtensionInterfaceBinding<?>> getRegisteredInterfaces() {
      ArrayList var1 = new ArrayList();
      boolean var7 = false /* VF: Semaphore variable */;

      ArrayList var10;
      try {
         var7 = true;
         this.a.readLock().lock();

         for (e var3 : this.c.values()) {
            var1.add(new ExtensionInterfaceBinding(var3.getKey().getInterfaceClass(), var3.getKey().getInstanceId(), var3.getRawImpl()));
         }

         var10 = var1;
         var7 = false;
      } finally {
         if (var7) {
            this.a.readLock().unlock();
         }
      }

      try {
         this.a.readLock().unlock();
         if (var10 == null) {
            a(6);
         }

         return var10;
      } catch (IllegalArgumentException var8) {
         throw a(var8);
      }
   }

   public boolean unRegisterInterface(@NotNull String param1, @Nullable String param2) {
      // $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:
      // 00: aload 1
      // 01: ifnonnull 10
      // 04: bipush 7
      // 06: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (I)V
      // 09: goto 10
      // 0c: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0f: athrow
      // 10: aload 0
      // 11: getfield com/l7tech/server/admin/ExtensionInterfaceManager.a Ljava/util/concurrent/locks/ReadWriteLock;
      // 14: invokeinterface java/util/concurrent/locks/ReadWriteLock.writeLock ()Ljava/util/concurrent/locks/Lock; 1
      // 19: invokeinterface java/util/concurrent/locks/Lock.lock ()V 1
      // 1e: aload 0
      // 1f: aload 1
      // 20: invokevirtual com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/String;)Ljava/lang/Class;
      // 23: astore 3
      // 24: aload 3
      // 25: ifnull 4c
      // 28: aload 0
      // 29: getfield com/l7tech/server/admin/ExtensionInterfaceManager.c Ljava/util/Map;
      // 2c: new com/l7tech/server/admin/f
      // 2f: dup
      // 30: aload 3
      // 31: aload 2
      // 32: invokespecial com/l7tech/server/admin/f.<init> (Ljava/lang/Class;Ljava/lang/String;)V
      // 35: invokeinterface java/util/Map.remove (Ljava/lang/Object;)Ljava/lang/Object; 2
      // 3a: ifnull 4c
      // 3d: goto 44
      // 40: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 43: athrow
      // 44: bipush 1
      // 45: goto 4d
      // 48: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 4b: athrow
      // 4c: bipush 0
      // 4d: istore 4
      // 4f: aload 0
      // 50: getfield com/l7tech/server/admin/ExtensionInterfaceManager.a Ljava/util/concurrent/locks/ReadWriteLock;
      // 53: invokeinterface java/util/concurrent/locks/ReadWriteLock.writeLock ()Ljava/util/concurrent/locks/Lock; 1
      // 58: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 5d: iload 4
      // 5f: ireturn
      // 60: astore 5
      // 62: aload 0
      // 63: getfield com/l7tech/server/admin/ExtensionInterfaceManager.a Ljava/util/concurrent/locks/ReadWriteLock;
      // 66: invokeinterface java/util/concurrent/locks/ReadWriteLock.writeLock ()Ljava/util/concurrent/locks/Lock; 1
      // 6b: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 70: aload 5
      // 72: athrow
      // try (17 -> 31): 31 java/lang/IllegalArgumentException
      // try (15 -> 26): 27 java/lang/IllegalArgumentException
      // try (0 -> 4): 5 java/lang/IllegalArgumentException
      // try (7 -> 35): 41 null
      // try (41 -> 42): 41 null
   }

   @NotNull
   public Either<Throwable, Option<Object>> invokeExtensionMethod(
      @NotNull String param1, @Nullable String param2, @NotNull String param3, @NotNull Class[] param4, @Nullable Object[] param5
   ) throws ClassNotFoundException, NoSuchMethodException {
      // $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: ifnonnull 010
      // 004: bipush 8
      // 006: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (I)V
      // 009: goto 010
      // 00c: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 00f: athrow
      // 010: aload 3
      // 011: ifnonnull 020
      // 014: bipush 9
      // 016: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (I)V
      // 019: goto 020
      // 01c: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 01f: athrow
      // 020: aload 4
      // 022: ifnonnull 031
      // 025: bipush 10
      // 027: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (I)V
      // 02a: goto 031
      // 02d: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 030: athrow
      // 031: aload 0
      // 032: getfield com/l7tech/server/admin/ExtensionInterfaceManager.a Ljava/util/concurrent/locks/ReadWriteLock;
      // 035: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 03a: invokeinterface java/util/concurrent/locks/Lock.lock ()V 1
      // 03f: aload 0
      // 040: aload 1
      // 041: invokevirtual com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/String;)Ljava/lang/Class;
      // 044: astore 6
      // 046: aload 6
      // 048: ifnonnull 064
      // 04b: new java/lang/ClassNotFoundException
      // 04e: dup
      // 04f: aload 1
      // 050: getstatic com/l7tech/server/admin/ExtensionInterfaceManager.g [Ljava/lang/String;
      // 053: bipush 27
      // 055: aaload
      // 056: swap
      // 057: 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" ]
      // 05c: invokespecial java/lang/ClassNotFoundException.<init> (Ljava/lang/String;)V
      // 05f: athrow
      // 060: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 063: athrow
      // 064: aload 0
      // 065: getfield com/l7tech/server/admin/ExtensionInterfaceManager.c Ljava/util/Map;
      // 068: new com/l7tech/server/admin/f
      // 06b: dup
      // 06c: aload 6
      // 06e: aload 2
      // 06f: invokespecial com/l7tech/server/admin/f.<init> (Ljava/lang/Class;Ljava/lang/String;)V
      // 072: invokeinterface java/util/Map.get (Ljava/lang/Object;)Ljava/lang/Object; 2
      // 077: checkcast com/l7tech/server/admin/e
      // 07a: astore 7
      // 07c: aload 7
      // 07e: ifnonnull 0a3
      // 081: new java/lang/ClassNotFoundException
      // 084: dup
      // 085: aload 1
      // 086: aload 2
      // 087: getstatic com/l7tech/server/admin/ExtensionInterfaceManager.g [Ljava/lang/String;
      // 08a: bipush 9
      // 08c: aaload
      // 08d: dup_x2
      // 08e: pop
      // 08f: getstatic com/l7tech/server/admin/ExtensionInterfaceManager.g [Ljava/lang/String;
      // 092: bipush 13
      // 094: aaload
      // 095: swap
      // 096: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;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\u0001\u0001" ]
      // 09b: invokespecial java/lang/ClassNotFoundException.<init> (Ljava/lang/String;)V
      // 09e: athrow
      // 09f: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0a2: athrow
      // 0a3: aload 6
      // 0a5: aload 3
      // 0a6: aload 4
      // 0a8: invokevirtual java/lang/Class.getMethod (Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
      // 0ab: astore 8
      // 0ad: new java/util/ArrayList
      // 0b0: dup
      // 0b1: invokespecial java/util/ArrayList.<init> ()V
      // 0b4: astore 9
      // 0b6: aload 0
      // 0b7: getfield com/l7tech/server/admin/ExtensionInterfaceManager.e Lorg/aopalliance/intercept/MethodInterceptor;
      // 0ba: ifnull 0ff
      // 0bd: aload 0
      // 0be: getfield com/l7tech/server/admin/ExtensionInterfaceManager.d Lorg/springframework/aop/PointcutAdvisor;
      // 0c1: ifnull 0ec
      // 0c4: goto 0cb
      // 0c7: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0ca: athrow
      // 0cb: aload 0
      // 0cc: getfield com/l7tech/server/admin/ExtensionInterfaceManager.d Lorg/springframework/aop/PointcutAdvisor;
      // 0cf: invokeinterface org/springframework/aop/PointcutAdvisor.getPointcut ()Lorg/springframework/aop/Pointcut; 1
      // 0d4: invokeinterface org/springframework/aop/Pointcut.getMethodMatcher ()Lorg/springframework/aop/MethodMatcher; 1
      // 0d9: aload 8
      // 0db: aload 6
      // 0dd: invokeinterface org/springframework/aop/MethodMatcher.matches (Ljava/lang/reflect/Method;Ljava/lang/Class;)Z 3
      // 0e2: ifeq 0ff
      // 0e5: goto 0ec
      // 0e8: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0eb: athrow
      // 0ec: aload 9
      // 0ee: aload 0
      // 0ef: getfield com/l7tech/server/admin/ExtensionInterfaceManager.e Lorg/aopalliance/intercept/MethodInterceptor;
      // 0f2: invokeinterface java/util/List.add (Ljava/lang/Object;)Z 2
      // 0f7: pop
      // 0f8: goto 0ff
      // 0fb: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0fe: athrow
      // 0ff: aload 0
      // 100: getfield com/l7tech/server/admin/ExtensionInterfaceManager.f Lorg/aopalliance/intercept/MethodInterceptor;
      // 103: ifnull 119
      // 106: aload 9
      // 108: aload 0
      // 109: getfield com/l7tech/server/admin/ExtensionInterfaceManager.f Lorg/aopalliance/intercept/MethodInterceptor;
      // 10c: invokeinterface java/util/List.add (Ljava/lang/Object;)Z 2
      // 111: pop
      // 112: goto 119
      // 115: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 118: athrow
      // 119: aload 0
      // 11a: getfield com/l7tech/server/admin/ExtensionInterfaceManager.unsupportedExceptionsThrowsAdvice Lcom/l7tech/server/util/UnsupportedExceptionsThrowsAdvice;
      // 11d: ifnull 137
      // 120: aload 9
      // 122: new com/l7tech/server/admin/d
      // 125: dup
      // 126: aload 0
      // 127: invokespecial com/l7tech/server/admin/d.<init> (Lcom/l7tech/server/admin/ExtensionInterfaceManager;)V
      // 12a: invokeinterface java/util/List.add (Ljava/lang/Object;)Z 2
      // 12f: pop
      // 130: goto 137
      // 133: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 136: athrow
      // 137: new com/l7tech/server/admin/w
      // 13a: dup
      // 13b: aload 0
      // 13c: aconst_null
      // 13d: aload 7
      // 13f: invokevirtual com/l7tech/server/admin/e.getWrappedImpl ()Ljava/lang/Object;
      // 142: aload 8
      // 144: aload 5
      // 146: aload 6
      // 148: aload 9
      // 14a: invokespecial com/l7tech/server/admin/w.<init> (Lcom/l7tech/server/admin/ExtensionInterfaceManager;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;Ljava/lang/Class;Ljava/util/List;)V
      // 14d: astore 10
      // 14f: aload 10
      // 151: invokeinterface org/aopalliance/intercept/MethodInvocation.proceed ()Ljava/lang/Object; 1
      // 156: astore 11
      // 158: aload 11
      // 15a: invokestatic com/l7tech/util/Either.rightOption (Ljava/lang/Object;)Lcom/l7tech/util/Either;
      // 15d: astore 12
      // 15f: aload 0
      // 160: getfield com/l7tech/server/admin/ExtensionInterfaceManager.a Ljava/util/concurrent/locks/ReadWriteLock;
      // 163: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 168: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 16d: aload 12
      // 16f: dup
      // 170: ifnonnull 17f
      // 173: bipush 11
      // 175: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (I)V
      // 178: goto 17f
      // 17b: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 17e: athrow
      // 17f: areturn
      // 180: astore 9
      // 182: new java/lang/NoSuchMethodException
      // 185: dup
      // 186: aload 3
      // 187: aload 9
      // 189: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
      // 18c: getstatic com/l7tech/server/admin/ExtensionInterfaceManager.g [Ljava/lang/String;
      // 18f: astore 14
      // 191: aload 14
      // 193: bipush 3
      // 194: aaload
      // 195: dup_x2
      // 196: pop
      // 197: aload 14
      // 199: bipush 16
      // 19b: aaload
      // 19c: swap
      // 19d: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;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\u0001\u0001" ]
      // 1a2: invokespecial java/lang/NoSuchMethodException.<init> (Ljava/lang/String;)V
      // 1a5: aload 9
      // 1a7: invokevirtual java/lang/NoSuchMethodException.initCause (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 1aa: checkcast java/lang/NoSuchMethodException
      // 1ad: athrow
      // 1ae: astore 9
      // 1b0: aload 9
      // 1b2: invokevirtual java/lang/reflect/InvocationTargetException.getTargetException ()Ljava/lang/Throwable;
      // 1b5: invokestatic com/l7tech/util/Either.left (Ljava/lang/Object;)Lcom/l7tech/util/Either;
      // 1b8: astore 10
      // 1ba: aload 0
      // 1bb: getfield com/l7tech/server/admin/ExtensionInterfaceManager.a Ljava/util/concurrent/locks/ReadWriteLock;
      // 1be: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 1c3: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 1c8: aload 10
      // 1ca: dup
      // 1cb: ifnonnull 1da
      // 1ce: bipush 12
      // 1d0: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (I)V
      // 1d3: goto 1da
      // 1d6: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1d9: athrow
      // 1da: areturn
      // 1db: astore 9
      // 1dd: aload 9
      // 1df: invokestatic com/l7tech/util/Either.left (Ljava/lang/Object;)Lcom/l7tech/util/Either;
      // 1e2: astore 10
      // 1e4: aload 0
      // 1e5: getfield com/l7tech/server/admin/ExtensionInterfaceManager.a Ljava/util/concurrent/locks/ReadWriteLock;
      // 1e8: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 1ed: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 1f2: aload 10
      // 1f4: dup
      // 1f5: ifnonnull 204
      // 1f8: bipush 13
      // 1fa: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (I)V
      // 1fd: goto 204
      // 200: invokestatic com/l7tech/server/admin/ExtensionInterfaceManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 203: athrow
      // 204: areturn
      // 205: astore 13
      // 207: aload 0
      // 208: getfield com/l7tech/server/admin/ExtensionInterfaceManager.a Ljava/util/concurrent/locks/ReadWriteLock;
      // 20b: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 210: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 215: aload 13
      // 217: athrow
      // try (121 -> 131): 132 java/lang/IllegalAccessException
      // try (110 -> 118): 119 java/lang/IllegalAccessException
      // try (91 -> 107): 108 java/lang/IllegalAccessException
      // try (85 -> 99): 100 java/lang/IllegalAccessException
      // try (82 -> 88): 89 java/lang/IllegalAccessException
      // try (53 -> 71): 71 java/lang/IllegalAccessException
      // try (29 -> 41): 41 java/lang/IllegalAccessException
      // try (14 -> 18): 19 java/lang/IllegalAccessException
      // try (7 -> 11): 12 java/lang/IllegalAccessException
      // try (0 -> 4): 5 java/lang/IllegalAccessException
      // try (78 -> 152): 165 java/lang/IllegalAccessException
      // try (78 -> 152): 188 java/lang/reflect/InvocationTargetException
      // try (78 -> 152): 206 java/lang/Throwable
      // try (21 -> 152): 223 null
      // try (152 -> 161): 162 java/lang/IllegalAccessException
      // try (165 -> 193): 223 null
      // try (193 -> 202): 203 java/lang/IllegalAccessException
      // try (206 -> 210): 223 null
      // try (210 -> 219): 220 java/lang/IllegalAccessException
      // try (223 -> 224): 223 null
   }

   @Override
   public void onApplicationEvent(ApplicationEvent var1) {
      if (var1 instanceof AssertionModuleUnregistrationEvent var2) {
         this.unregisterAllFromClassLoader(var2.getModuleClassLoader());
      }
   }

   private Class a(String var1) {
      Reference var2 = this.b.get(var1);

      try {
         if (var2 == null) {
            return null;
         }
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }

      return (Class)var2.get();
   }

   public void unregisterAllFromClassLoader(ClassLoader var1) {
      try {
         this.a.writeLock().lock();
         ArrayList var2 = new ArrayList();
         Iterator var3 = this.c.values().iterator();

         while (var3.hasNext()) {
            e var4 = (e)var3.next();

            try {
               if (var4.getRawImpl().getClass().getClassLoader() == var1) {
                  var3.remove();
                  var2.add(var4.getKey().getInterfaceClass().getName());
               }
            } catch (IllegalArgumentException var9) {
               throw a(var9);
            }
         }

         for (String var5 : var2) {
            this.b.remove(var5);
         }
      } finally {
         this.a.writeLock().unlock();
      }
   }

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

   static {
      String[] var5 = new String[31];
      int var3 = 0;
      String var2 = "P%G'0\nq?[!Y/<\ts\\8H70\u000bx\u0012#K)<\u0007b\u0012%Zc7\u000bb\u0012-Gc0\neF-G <DyTl]+<D\u007f\\8L1?\u0005uWlJ/8\u0017e@w4]&7\u0017\u007f]\"\t*7\u0010s@*H <D{G?]c=\u0001u^-[&y\u0007zS?Zn5\u0001`W \t\u0003\n\u0001uG>L'y\u0005x\\#]\"-\ry\\\u0007\u007f)]+6\u00006\u001bsl_&+\u0017\u007f]\"\t,?DbZ)\t*7\u0010s@*H <D\u000e[!Y/<\ts\\8H70\u000bx\u0013\u0012;@71D\u007f\\?]\"7\u0007s\u0012\u0005mc{3\u0012*[,4Dw\u0012(@%?\u0001dW\"]c:\bwA?E,8\u0000s@l@0y\u0005z@)H' DdW+@0-\u0001dW(\u000e[\"]&+\u0002wQ)j/8\u0017e%|#\t&!\u0010s\\?@,7D\u007f\\8L1?\u0005uWlO,+Du^-Z07\u0005{Wl\u0019\u0010l^\"*Dw^>L\"=\u001d6@)N**\u0010s@)Mm>w4]&7\u0017\u007f]\"\t*7\u0010s@*H <D{W8A,=D~S?\t.,\bb[<E&y$EW/\\1<\u00006S\"G,-\u0005b[#G0cD\u0015[\"_,2\u0001SJ8L-*\ry\\\u0001L71\u000br(\u0012%Zc+\u0001q[?]&+\u0001r\u0012;@71D\u007f\\?]\"7\u0007s\u0012%M&7\u0010\u007fT%L1y\u000eB-[\"4\u0001bW>}:)\u0001e\u0015[?`--\u0001dT-J&\u000b\u0001q[?]&+\u0001r\u0011\u0012\"F7y\u0005uQ)Z00\u0006zWv\t1Q#Dl5SbW/Al*\u0001dD)[l8\u0000{[\"\u0006\u0006!\u0010s\\?@,7-xF)[%8\u0007s\u007f-G\">\u0001d1Q#Dl5SbW/Al*\u0001dD)[l8\u0000{[\"\u0006\u0006!\u0010s\\?@,7-xF)[%8\u0007s\u007f-G\">\u0001d6w4]&7\u0017\u007f]\"\t*7\u0010s@*H <D{W8A,=DzS/B0y$EW/\\1<\u00006S\"G,-\u0005b[#Gyy\u0017U)]\u0011<\u0003\u007fA8L1<\u0000_\\8L1?\u0005uW?*r\u0002F7\u0017\u0011z^lD&-\fyVl\f0wAe\u0012!\\0-Dx]8\t1<\u0010c@\"\t-,\bz\u0011@)N**\u0010s@\u0005G7<\u0016pS/L\u0013G\"{&>\reF)[\n7\u0010s@*H <\u0015[\"_,2\u0001SJ8L-*\ry\\\u0001L71\u000br>s>N64\u0001xFlO,+DV|#]\r,\bz\u0012<H18\tsF)[c~Ae\u0015lF%yAe\u001ciZc4\u0011eFlG,-DtWlG65\b>w4]&7\u0017\u007f]\"\t*7\u0010s@*H <D{W8A,=DVa)J6+\u0001r\u0012-G-6\u0010wF%F-y\u0007yG\"]c0\u00176H)[,cD4|#\t&!\u0010s\\?@,7D\u007f\\8L1?\u0005uWl@0y\u0016sU%Z7<\u0016sVl^*-\f6Q H0*\nw_)\t\u0012[\"]&+\u0002wQ)j/8\u0017e\\-D&";
      int var4 = "P%G'0\nq?[!Y/<\ts\\8H70\u000bx\u0012#K)<\u0007b\u0012%Zc7\u000bb\u0012-Gc0\neF-G <DyTl]+<D\u007f\\8L1?\u0005uWlJ/8\u0017e@w4]&7\u0017\u007f]\"\t*7\u0010s@*H <D{G?]c=\u0001u^-[&y\u0007zS?Zn5\u0001`W \t\u0003\n\u0001uG>L'y\u0005x\\#]\"-\ry\\\u0007\u007f)]+6\u00006\u001bsl_&+\u0017\u007f]\"\t,?DbZ)\t*7\u0010s@*H <D\u000e[!Y/<\ts\\8H70\u000bx\u0013\u0012;@71D\u007f\\?]\"7\u0007s\u0012\u0005mc{3\u0012*[,4Dw\u0012(@%?\u0001dW\"]c:\bwA?E,8\u0000s@l@0y\u0005z@)H' DdW+@0-\u0001dW(\u000e[\"]&+\u0002wQ)j/8\u0017e%|#\t&!\u0010s\\?@,7D\u007f\\8L1?\u0005uWlO,+Du^-Z07\u0005{Wl\u0019\u0010l^\"*Dw^>L\"=\u001d6@)N**\u0010s@)Mm>w4]&7\u0017\u007f]\"\t*7\u0010s@*H <D{W8A,=D~S?\t.,\bb[<E&y$EW/\\1<\u00006S\"G,-\u0005b[#G0cD\u0015[\"_,2\u0001SJ8L-*\ry\\\u0001L71\u000br(\u0012%Zc+\u0001q[?]&+\u0001r\u0012;@71D\u007f\\?]\"7\u0007s\u0012%M&7\u0010\u007fT%L1y\u000eB-[\"4\u0001bW>}:)\u0001e\u0015[?`--\u0001dT-J&\u000b\u0001q[?]&+\u0001r\u0011\u0012\"F7y\u0005uQ)Z00\u0006zWv\t1Q#Dl5SbW/Al*\u0001dD)[l8\u0000{[\"\u0006\u0006!\u0010s\\?@,7-xF)[%8\u0007s\u007f-G\">\u0001d1Q#Dl5SbW/Al*\u0001dD)[l8\u0000{[\"\u0006\u0006!\u0010s\\?@,7-xF)[%8\u0007s\u007f-G\">\u0001d6w4]&7\u0017\u007f]\"\t*7\u0010s@*H <D{W8A,=DzS/B0y$EW/\\1<\u00006S\"G,-\u0005b[#Gyy\u0017U)]\u0011<\u0003\u007fA8L1<\u0000_\\8L1?\u0005uW?*r\u0002F7\u0017\u0011z^lD&-\fyVl\f0wAe\u0012!\\0-Dx]8\t1<\u0010c@\"\t-,\bz\u0011@)N**\u0010s@\u0005G7<\u0016pS/L\u0013G\"{&>\reF)[\n7\u0010s@*H <\u0015[\"_,2\u0001SJ8L-*\ry\\\u0001L71\u000br>s>N64\u0001xFlO,+DV|#]\r,\bz\u0012<H18\tsF)[c~Ae\u0015lF%yAe\u001ciZc4\u0011eFlG,-DtWlG65\b>w4]&7\u0017\u007f]\"\t*7\u0010s@*H <D{W8A,=DVa)J6+\u0001r\u0012-G-6\u0010wF%F-y\u0007yG\"]c0\u00176H)[,cD4|#\t&!\u0010s\\?@,7D\u007f\\8L1?\u0005uWl@0y\u0016sU%Z7<\u0016sVl^*-\f6Q H0*\nw_)\t\u0012[\"]&+\u0002wQ)j/8\u0017e\\-D&"
         .length();
      char var1 = 7;
      int var7 = -1;

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

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

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

                  var2 = "\u0016`\u0014b\u007fI\u0011\u001ah\u0005,:%\u0004cvK:\t`\u000e~0D2\u000bi\u0005guC+\u001aq\te~\r0\u001d%\u0014bu\r6\u0015q\u0005xvL<\u001e%";
                  var4 = "\u0016`\u0014b\u007fI\u0011\u001ah\u0005,:%\u0004cvK:\t`\u000e~0D2\u000bi\u0005guC+\u001aq\te~\r0\u001d%\u0014bu\r6\u0015q\u0005xvL<\u001e%"
                     .length();
                  var1 = '\n';
                  var7 = -1;
            }

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

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

      return var10000;
   }

   private static String a(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 -> 1;
            case 1 -> 127;
            case 2 -> 26;
            case 3 -> 112;
            case 4 -> 106;
            case 5 -> 87;
            default -> 37;
         });
      }

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