package com.l7tech.server.util;

import com.l7tech.common.io.ByteLimitInputStream;
import com.l7tech.util.IOUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Collection;
import java.util.logging.Logger;

public class ResourceClassLoader extends ClassLoader {
   private static final Logger a;
   private final Collection<String> b;
   private static final String[] c;

   public ResourceClassLoader(ClassLoader var1, Collection<String> var2) {
      super(var1);
      if (var2 == null) {
         throw new IllegalArgumentException(c[4]);
      }

      this.b = var2;
   }

   @Override
   protected synchronized Class<?> loadClass(String param1, boolean param2) throws ClassNotFoundException {
      // $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 0
      // 01: aload 1
      // 02: invokevirtual com/l7tech/server/util/ResourceClassLoader.a (Ljava/lang/String;)Z
      // 05: ifeq 49
      // 08: getstatic com/l7tech/server/util/ResourceClassLoader.a Ljava/util/logging/Logger;
      // 0b: getstatic java/util/logging/Level.FINER Ljava/util/logging/Level;
      // 0e: invokevirtual java/util/logging/Logger.isLoggable (Ljava/util/logging/Level;)Z
      // 11: ifeq 31
      // 14: goto 1b
      // 17: invokestatic com/l7tech/server/util/ResourceClassLoader.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1a: athrow
      // 1b: getstatic com/l7tech/server/util/ResourceClassLoader.a Ljava/util/logging/Logger;
      // 1e: getstatic java/util/logging/Level.FINER Ljava/util/logging/Level;
      // 21: getstatic com/l7tech/server/util/ResourceClassLoader.c [Ljava/lang/String;
      // 24: bipush 1
      // 25: aaload
      // 26: aload 1
      // 27: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
      // 2a: goto 31
      // 2d: invokestatic com/l7tech/server/util/ResourceClassLoader.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 30: athrow
      // 31: aload 0
      // 32: aload 1
      // 33: invokevirtual com/l7tech/server/util/ResourceClassLoader.findClass (Ljava/lang/String;)Ljava/lang/Class;
      // 36: astore 3
      // 37: iload 2
      // 38: ifeq 47
      // 3b: aload 0
      // 3c: aload 3
      // 3d: invokevirtual com/l7tech/server/util/ResourceClassLoader.resolveClass (Ljava/lang/Class;)V
      // 40: goto 47
      // 43: invokestatic com/l7tech/server/util/ResourceClassLoader.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 46: athrow
      // 47: aload 3
      // 48: areturn
      // 49: aload 0
      // 4a: invokevirtual com/l7tech/server/util/ResourceClassLoader.getParent ()Ljava/lang/ClassLoader;
      // 4d: astore 3
      // 4e: aload 3
      // 4f: ifnull 5c
      // 52: aload 3
      // 53: aload 1
      // 54: invokevirtual java/lang/ClassLoader.loadClass (Ljava/lang/String;)Ljava/lang/Class;
      // 57: areturn
      // 58: invokestatic com/l7tech/server/util/ResourceClassLoader.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 5b: athrow
      // 5c: new java/lang/ClassNotFoundException
      // 5f: dup
      // 60: aload 1
      // 61: invokespecial java/lang/ClassNotFoundException.<init> (Ljava/lang/String;)V
      // 64: athrow
      // try (0 -> 8): 9 java/lang/ClassNotFoundException
      // try (4 -> 18): 19 java/lang/ClassNotFoundException
      // try (25 -> 30): 31 java/lang/ClassNotFoundException
      // try (38 -> 44): 44 java/lang/ClassNotFoundException
   }

   @Override
   protected Class<?> findClass(String var1) throws ClassNotFoundException {
      try {
         String var10000 = var1.replace(".", "/");
         String[] var15 = c;
         String var2 = var10000.concat(var15[0]);
         ClassLoader var3 = this.getParent();

         label44: {
            try {
               if (var3 == null) {
                  var16 = null;
                  break label44;
               }
            } catch (IOException var13) {
               throw a(var13);
            }

            var16 = var3.getResource(var2);
         }

         URL var4 = var16;

         try {
            if (var4 == null) {
               throw new ClassNotFoundException(c[5] + var1 + c[3]);
            }
         } catch (IOException var12) {
            throw a(var12);
         }

         InputStream var5 = var4.openStream();
         byte[] var6 = IOUtils.slurpStream(new ByteLimitInputStream(var5, 1024, 102400L));
         int var7 = var1.lastIndexOf(46);
         if (var7 != -1) {
            String var8 = var1.substring(0, var7);
            Package var9 = this.getDefinedPackage(var8);

            try {
               if (var9 == null) {
                  this.definePackage(var8, null, null, null, null, null, null, null);
               }
            } catch (IOException var11) {
               throw a(var11);
            }
         }

         return this.defineClass(var1, var6, 0, var6.length);
      } catch (IOException var14) {
         String[] var10 = c;
         throw new ClassNotFoundException(var10[6] + var1 + var10[2], var14);
      }
   }

   private boolean a(String var1) {
      boolean var2 = false;

      for (String var4 : this.b) {
         if (var1.startsWith(var4)) {
            var2 = true;
            break;
         }
      }

      return var2;
   }

   static {
      String[] var5 = new String[7];
      int var3 = 0;
      String var2 = "H\u0014LuJF\"*\u0018ApP[^F\u0014LuJF\u0019AP[$D\u0012\u001eF\u0016S4KPJ\t\u0002Rw\\\u001b\u0002AY\u0002AY \u0014\u0012S{LGZ\u0003'Rq_\\AF\u001aUgM\u0015W\t\u0003\u0000v\\\u0015W\u0013\u001bL:";
      int var4 = "H\u0014LuJF\"*\u0018ApP[^F\u0014LuJF\u0019AP[$D\u0012\u001eF\u0016S4KPJ\t\u0002Rw\\\u001b\u0002AY\u0002AY \u0014\u0012S{LGZ\u0003'Rq_\\AF\u001aUgM\u0015W\t\u0003\u0000v\\\u0015W\u0013\u001bL:"
         .length();
      char var1 = 6;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 113;
         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) {
                     c = var5;
                     a = Logger.getLogger(ResourceClassLoader.class.getName());
                     return;
                  }

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

                  var2 = "?\u0019XpGLQ\b\\EpF\u001eT\u0002\tE{\u0012X]\u001f\\HsSMAM[\"(\u000eYp@\u001e^\u0002\u001dOv\\Y\u0012\u001f\u0019XpGLQ\b\\Mp@\u001eQ\u0001\u001dXl\u0012\u0019";
                  var4 = "?\u0019XpGLQ\b\\EpF\u001eT\u0002\tE{\u0012X]\u001f\\HsSMAM[\"(\u000eYp@\u001e^\u0002\u001dOv\\Y\u0012\u001f\u0019XpGLQ\b\\Mp@\u001eQ\u0001\u001dXl\u0012\u0019"
                     .length();
                  var1 = 30;
                  var7 = -1;
            }

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

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

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

      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 -> 23;
            case 1 -> 6;
            case 2 -> 81;
            case 3 -> 101;
            case 4 -> 72;
            case 5 -> 68;
            default -> 72;
         });
      }

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