final class com.oracle.truffle.polyglot.HostClassLoader$JarLoader implements com.oracle.truffle.polyglot.HostClassLoader$Loader
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.polyglot.HostClassLoader$JarLoader
  super_class: java.lang.Object
{
  private final com.oracle.truffle.api.TruffleFile root;
    descriptor: Lcom/oracle/truffle/api/TruffleFile;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private volatile java.nio.channels.SeekableByteChannel channel;
    descriptor: Ljava/nio/channels/SeekableByteChannel;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private volatile java.util.Map<java.lang.String, java.util.Map<java.lang.String, com.oracle.truffle.polyglot.HostClassLoader$JarLoader$ZipUtils$Info>> content;
    descriptor: Ljava/util/Map;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE
    Signature: Ljava/util/Map<Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader$ZipUtils$Info;>;>;

  void <init>(com.oracle.truffle.api.TruffleFile);
    descriptor: (Lcom/oracle/truffle/api/TruffleFile;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader this
        start local 1 // com.oracle.truffle.api.TruffleFile root
         0: .line 343
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 344
            aload 0 /* this */
            aload 1 /* root */
            putfield com.oracle.truffle.polyglot.HostClassLoader$JarLoader.root:Lcom/oracle/truffle/api/TruffleFile;
         2: .line 345
            return
        end local 1 // com.oracle.truffle.api.TruffleFile root
        end local 0 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader;
            0    3     1  root  Lcom/oracle/truffle/api/TruffleFile;
    MethodParameters:
      Name  Flags
      root  

  public com.oracle.truffle.polyglot.HostClassLoader$Resource findResource(java.lang.String);
    descriptor: (Ljava/lang/String;)Lcom/oracle/truffle/polyglot/HostClassLoader$Resource;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader this
        start local 1 // java.lang.String name
         0: .line 349
            aload 1 /* name */
            invokestatic com.oracle.truffle.polyglot.HostClassLoader$JarLoader.split:(Ljava/lang/String;)[Ljava/lang/String;
            astore 2 /* parts */
        start local 2 // java.lang.String[] parts
         1: .line 351
            aload 0 /* this */
            invokevirtual com.oracle.truffle.polyglot.HostClassLoader$JarLoader.getResourceMap:()Ljava/util/Map;
            aload 2 /* parts */
            iconst_0
            aaload
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 3 /* folderContent */
        start local 3 // java.util.Map folderContent
         2: .line 352
            aload 3 /* folderContent */
            ifnonnull 4
         3: .line 353
            aconst_null
            areturn
         4: .line 355
      StackMap locals: java.lang.String[] java.util.Map
      StackMap stack:
            aload 3 /* folderContent */
            aload 2 /* parts */
            iconst_1
            aaload
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.polyglot.HostClassLoader$JarLoader$ZipUtils$Info
            astore 4 /* info */
        start local 4 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader$ZipUtils$Info info
         5: .line 356
            aload 4 /* info */
            ifnonnull 7
         6: .line 357
            aconst_null
            areturn
         7: .line 360
      StackMap locals: com.oracle.truffle.polyglot.HostClassLoader$JarLoader$ZipUtils$Info
      StackMap stack:
            new com.oracle.truffle.polyglot.HostClassLoader$JarLoader$1
            dup
            aload 0 /* this */
            aload 1 /* name */
            aload 4 /* info */
            invokespecial com.oracle.truffle.polyglot.HostClassLoader$JarLoader$1.<init>:(Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader;Ljava/lang/String;Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader$ZipUtils$Info;)V
         8: areturn
        end local 4 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader$ZipUtils$Info info
        end local 3 // java.util.Map folderContent
         9: .line 391
      StackMap locals: com.oracle.truffle.polyglot.HostClassLoader$JarLoader java.lang.String java.lang.String[]
      StackMap stack: java.io.IOException
            pop
        10: .line 392
            aconst_null
            areturn
        end local 2 // java.lang.String[] parts
        end local 1 // java.lang.String name
        end local 0 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   11     0           this  Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader;
            0   11     1           name  Ljava/lang/String;
            1   11     2          parts  [Ljava/lang/String;
            2    9     3  folderContent  Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader$ZipUtils$Info;>;
            5    9     4           info  Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader$ZipUtils$Info;
      Exception table:
        from    to  target  type
           1     3       9  Class java.io.IOException
           4     6       9  Class java.io.IOException
           7     8       9  Class java.io.IOException
    MethodParameters:
      Name  Flags
      name  

  public synchronized void close();
    descriptor: ()V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader this
         0: .line 398
            aload 0 /* this */
            getfield com.oracle.truffle.polyglot.HostClassLoader$JarLoader.channel:Ljava/nio/channels/SeekableByteChannel;
            ifnull 2
         1: .line 399
            aload 0 /* this */
            getfield com.oracle.truffle.polyglot.HostClassLoader$JarLoader.channel:Ljava/nio/channels/SeekableByteChannel;
            invokeinterface java.nio.channels.SeekableByteChannel.close:()V
         2: .line 401
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader;
    Exceptions:
      throws java.io.IOException

  private java.nio.channels.SeekableByteChannel getChannel();
    descriptor: ()Ljava/nio/channels/SeekableByteChannel;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader this
         0: .line 404
            aload 0 /* this */
            getfield com.oracle.truffle.polyglot.HostClassLoader$JarLoader.channel:Ljava/nio/channels/SeekableByteChannel;
            astore 1 /* res */
        start local 1 // java.nio.channels.SeekableByteChannel res
         1: .line 405
            aload 1 /* res */
            ifnonnull 11
         2: .line 406
            aload 0 /* this */
            dup
            astore 2
            monitorenter
         3: .line 407
            aload 0 /* this */
            getfield com.oracle.truffle.polyglot.HostClassLoader$JarLoader.channel:Ljava/nio/channels/SeekableByteChannel;
            astore 1 /* res */
         4: .line 408
            aload 1 /* res */
            ifnonnull 7
         5: .line 409
            aload 0 /* this */
            getfield com.oracle.truffle.polyglot.HostClassLoader$JarLoader.root:Lcom/oracle/truffle/api/TruffleFile;
            getstatic java.nio.file.StandardOpenOption.READ:Ljava/nio/file/StandardOpenOption;
            invokestatic java.util.EnumSet.of:(Ljava/lang/Enum;)Ljava/util/EnumSet;
            iconst_0
            anewarray java.nio.file.attribute.FileAttribute
            invokevirtual com.oracle.truffle.api.TruffleFile.newByteChannel:(Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;
            astore 1 /* res */
         6: .line 410
            aload 0 /* this */
            aload 1 /* res */
            putfield com.oracle.truffle.polyglot.HostClassLoader$JarLoader.channel:Ljava/nio/channels/SeekableByteChannel;
         7: .line 406
      StackMap locals: java.nio.channels.SeekableByteChannel com.oracle.truffle.polyglot.HostClassLoader$JarLoader
      StackMap stack:
            aload 2
            monitorexit
         8: goto 11
      StackMap locals:
      StackMap stack: java.lang.Throwable
         9: aload 2
            monitorexit
        10: athrow
        11: .line 414
      StackMap locals:
      StackMap stack:
            aload 1 /* res */
            areturn
        end local 1 // java.nio.channels.SeekableByteChannel res
        end local 0 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   12     0  this  Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader;
            1   12     1   res  Ljava/nio/channels/SeekableByteChannel;
      Exception table:
        from    to  target  type
           3     8       9  any
           9    10       9  any
    Exceptions:
      throws java.io.IOException

  private java.util.Map<java.lang.String, java.util.Map<java.lang.String, com.oracle.truffle.polyglot.HostClassLoader$JarLoader$ZipUtils$Info>> getResourceMap();
    descriptor: ()Ljava/util/Map;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader this
         0: .line 418
            aload 0 /* this */
            getfield com.oracle.truffle.polyglot.HostClassLoader$JarLoader.content:Ljava/util/Map;
            astore 1 /* res */
        start local 1 // java.util.Map res
         1: .line 419
            aload 1 /* res */
            ifnonnull 11
         2: .line 420
            aload 0 /* this */
            dup
            astore 2
            monitorenter
         3: .line 421
            aload 0 /* this */
            getfield com.oracle.truffle.polyglot.HostClassLoader$JarLoader.content:Ljava/util/Map;
            astore 1 /* res */
         4: .line 422
            aload 1 /* res */
            ifnonnull 7
         5: .line 423
            aload 0 /* this */
            invokevirtual com.oracle.truffle.polyglot.HostClassLoader$JarLoader.getChannel:()Ljava/nio/channels/SeekableByteChannel;
            invokestatic com.oracle.truffle.polyglot.HostClassLoader$JarLoader$ZipUtils.readEntries:(Ljava/nio/channels/SeekableByteChannel;)Ljava/util/Map;
            astore 1 /* res */
         6: .line 424
            aload 0 /* this */
            aload 1 /* res */
            putfield com.oracle.truffle.polyglot.HostClassLoader$JarLoader.content:Ljava/util/Map;
         7: .line 420
      StackMap locals: java.util.Map com.oracle.truffle.polyglot.HostClassLoader$JarLoader
      StackMap stack:
            aload 2
            monitorexit
         8: goto 11
      StackMap locals:
      StackMap stack: java.lang.Throwable
         9: aload 2
            monitorexit
        10: athrow
        11: .line 428
      StackMap locals:
      StackMap stack:
            aload 1 /* res */
            areturn
        end local 1 // java.util.Map res
        end local 0 // com.oracle.truffle.polyglot.HostClassLoader$JarLoader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   12     0  this  Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader;
            1   12     1   res  Ljava/util/Map<Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader$ZipUtils$Info;>;>;
      Exception table:
        from    to  target  type
           3     8       9  any
           9    10       9  any
    Exceptions:
      throws java.io.IOException
    Signature: ()Ljava/util/Map<Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/polyglot/HostClassLoader$JarLoader$ZipUtils$Info;>;>;

  private static java.lang.String[] split(java.lang.String);
    descriptor: (Ljava/lang/String;)[Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=6, locals=2, args_size=1
        start local 0 // java.lang.String resourceName
         0: .line 438
            aload 0 /* resourceName */
            bipush 47
            invokevirtual java.lang.String.lastIndexOf:(I)I
            istore 1 /* index */
        start local 1 // int index
         1: .line 439
            iload 1 /* index */
            ifge 3
         2: .line 440
            iconst_2
            anewarray java.lang.String
            dup
            iconst_0
            ldc ""
            aastore
            dup
            iconst_1
            aload 0 /* resourceName */
            aastore
            areturn
         3: .line 442
      StackMap locals: int
      StackMap stack:
            iconst_2
            anewarray java.lang.String
            dup
            iconst_0
         4: .line 443
            aload 0 /* resourceName */
            iconst_0
            iload 1 /* index */
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            aastore
            dup
            iconst_1
         5: .line 444
            aload 0 /* resourceName */
            iload 1 /* index */
            iconst_1
            iadd
            aload 0 /* resourceName */
            invokevirtual java.lang.String.length:()I
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            aastore
         6: .line 442
            areturn
        end local 1 // int index
        end local 0 // java.lang.String resourceName
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    7     0  resourceName  Ljava/lang/String;
            1    7     1         index  I
    MethodParameters:
              Name  Flags
      resourceName  
}
SourceFile: "HostClassLoader.java"
NestHost: com.oracle.truffle.polyglot.HostClassLoader
InnerClasses:
  private final JarLoader = com.oracle.truffle.polyglot.HostClassLoader$JarLoader of com.oracle.truffle.polyglot.HostClassLoader
  com.oracle.truffle.polyglot.HostClassLoader$JarLoader$1
  final ZipUtils = com.oracle.truffle.polyglot.HostClassLoader$JarLoader$ZipUtils of com.oracle.truffle.polyglot.HostClassLoader$JarLoader
  final Info = com.oracle.truffle.polyglot.HostClassLoader$JarLoader$ZipUtils$Info of com.oracle.truffle.polyglot.HostClassLoader$JarLoader$ZipUtils
  private abstract Loader = com.oracle.truffle.polyglot.HostClassLoader$Loader of com.oracle.truffle.polyglot.HostClassLoader
  private abstract Resource = com.oracle.truffle.polyglot.HostClassLoader$Resource of com.oracle.truffle.polyglot.HostClassLoader