package com.l7tech.server.url;

import com.l7tech.common.mime.ContentTypeHeader;
import com.l7tech.gateway.common.audit.Audit;
import com.l7tech.util.TimeSource;
import java.io.IOException;
import java.text.ParseException;
import java.util.Iterator;
import java.util.concurrent.Executor;
import java.util.concurrent.locks.Lock;
import java.util.logging.Logger;

public abstract class AbstractUrlObjectCache<UT> implements UrlResolver<UT> {
   private final Logger a = Logger.getLogger(this.getClass().getName());
   public static final AbstractUrlObjectCache.WaitMode WAIT_NEVER;
   public static final AbstractUrlObjectCache.WaitMode WAIT_INITIAL;
   public static final AbstractUrlObjectCache.WaitMode WAIT_LATEST;
   public static final long STALE_CACHE_NO_EXPIRY = -1L;
   protected TimeSource clock = new TimeSource();
   protected final String resourceDescription;
   protected long maxCacheAge;
   protected final long maxStaleCacheAge;
   protected final AbstractUrlObjectCache.WaitMode defaultWaitMode;
   public static final int RESULT_DOWNLOAD_FAILED = 0;
   public static final int RESULT_DOWNLOADING_NOW = 1;
   public static final int RESULT_DOWNLOAD_SUCCESS = 2;
   public static final int RESULT_USED_CACHED = 3;
   private static final String[] k;

   protected AbstractUrlObjectCache(String var1, long var2, AbstractUrlObjectCache.WaitMode var4) {
      this(var1, var2, -1L, var4);
   }

   protected AbstractUrlObjectCache(String var1, long var2, long var4, AbstractUrlObjectCache.WaitMode var6) {
      this.resourceDescription = var1;
      this.maxCacheAge = var2;
      this.maxStaleCacheAge = var4;
      this.defaultWaitMode = var6 == null ? WAIT_INITIAL : var6;
   }

   protected abstract Lock getReadLock();

   protected abstract Lock getWriteLock();

   protected AbstractUrlObjectCache.AbstractCacheEntry<UT> newCacheEntry(String var1) {
      return new AbstractUrlObjectCache.AbstractCacheEntry<>(var1);
   }

   public void setMaxCacheAge(long var1) {
      this.maxCacheAge = var1;
   }

   protected abstract AbstractUrlObjectCache.AbstractCacheEntry<UT> cacheGet(String var1);

   protected abstract Iterator<AbstractUrlObjectCache.AbstractCacheEntry<UT>> cacheIterator();

   protected abstract void cachePut(String var1, AbstractUrlObjectCache.AbstractCacheEntry<UT> var2);

   protected abstract AbstractUrlObjectCache.AbstractCacheEntry<UT> cacheRemove(String var1);

   protected void onStaleEntryAboutToBeReplaced(AbstractUrlObjectCache.AbstractCacheEntry<UT> var1, String var2) {
   }

   public AbstractUrlObjectCache.FetchResult<UT> fetchCached(String param1, AbstractUrlObjectCache.WaitMode 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:
      // 000: invokestatic java/lang/Thread.currentThread ()Ljava/lang/Thread;
      // 003: invokevirtual java/lang/Thread.getId ()J
      // 006: lstore 3
      // 007: aload 2
      // 008: ifnonnull 010
      // 00b: aload 0
      // 00c: getfield com/l7tech/server/url/AbstractUrlObjectCache.defaultWaitMode Lcom/l7tech/server/url/AbstractUrlObjectCache$WaitMode;
      // 00f: astore 2
      // 010: bipush 0
      // 011: istore 6
      // 013: aload 0
      // 014: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.getWriteLock ()Ljava/util/concurrent/locks/Lock;
      // 017: astore 7
      // 019: aload 7
      // 01b: invokeinterface java/util/concurrent/locks/Lock.lock ()V 1
      // 020: aload 0
      // 021: aload 1
      // 022: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.cacheGet (Ljava/lang/String;)Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;
      // 025: astore 5
      // 027: aload 5
      // 029: ifnonnull 046
      // 02c: aload 0
      // 02d: aload 1
      // 02e: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.newCacheEntry (Ljava/lang/String;)Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;
      // 031: astore 5
      // 033: aload 5
      // 035: lload 3
      // 036: putfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.b J
      // 039: aload 0
      // 03a: aload 1
      // 03b: aload 5
      // 03d: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.cachePut (Ljava/lang/String;Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;)V
      // 040: bipush 1
      // 041: istore 6
      // 043: goto 098
      // 046: aload 5
      // 048: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.b J
      // 04b: lload 3
      // 04c: lcmp
      // 04d: ifne 098
      // 050: aload 0
      // 051: aload 1
      // 052: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.newCacheEntry (Ljava/lang/String;)Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;
      // 055: astore 5
      // 057: aload 5
      // 059: new java/io/IOException
      // 05c: dup
      // 05d: aload 1
      // 05e: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // 061: astore 11
      // 063: aload 11
      // 065: bipush 10
      // 067: aaload
      // 068: swap
      // 069: 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" ]
      // 06e: invokespecial java/io/IOException.<init> (Ljava/lang/String;)V
      // 071: putfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.i Ljava/io/IOException;
      // 074: aload 5
      // 076: aload 0
      // 077: getfield com/l7tech/server/url/AbstractUrlObjectCache.clock Lcom/l7tech/util/TimeSource;
      // 07a: invokevirtual com/l7tech/util/TimeSource.currentTimeMillis ()J
      // 07d: putfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.j J
      // 080: new com/l7tech/server/url/AbstractUrlObjectCache$FetchResult
      // 083: dup
      // 084: sipush 500
      // 087: aload 5
      // 089: invokespecial com/l7tech/server/url/AbstractUrlObjectCache$FetchResult.<init> (ILcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;)V
      // 08c: astore 8
      // 08e: aload 7
      // 090: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 095: aload 8
      // 097: areturn
      // 098: aload 7
      // 09a: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 09f: goto 0ae
      // 0a2: astore 9
      // 0a4: aload 7
      // 0a6: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 0ab: aload 9
      // 0ad: athrow
      // 0ae: getstatic com/l7tech/server/url/AbstractUrlObjectCache.b Z
      // 0b1: ifne 0cc
      // 0b4: aload 5
      // 0b6: ifnonnull 0cc
      // 0b9: goto 0c0
      // 0bc: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0bf: athrow
      // 0c0: new java/lang/AssertionError
      // 0c3: dup
      // 0c4: invokespecial java/lang/AssertionError.<init> ()V
      // 0c7: athrow
      // 0c8: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0cb: athrow
      // 0cc: getstatic com/l7tech/server/url/AbstractUrlObjectCache.b Z
      // 0cf: ifne 0ed
      // 0d2: aload 5
      // 0d4: invokestatic java/lang/Thread.holdsLock (Ljava/lang/Object;)Z
      // 0d7: ifeq 0ed
      // 0da: goto 0e1
      // 0dd: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0e0: athrow
      // 0e1: new java/lang/AssertionError
      // 0e4: dup
      // 0e5: invokespecial java/lang/AssertionError.<init> ()V
      // 0e8: athrow
      // 0e9: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0ec: athrow
      // 0ed: iload 6
      // 0ef: ifeq 12d
      // 0f2: aload 0
      // 0f3: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 0f6: getstatic java/util/logging/Level.FINE Ljava/util/logging/Level;
      // 0f9: invokevirtual java/util/logging/Logger.isLoggable (Ljava/util/logging/Level;)Z
      // 0fc: ifeq 125
      // 0ff: goto 106
      // 102: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 105: athrow
      // 106: aload 0
      // 107: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 10a: aload 1
      // 10b: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // 10e: bipush 4
      // 10f: aaload
      // 110: swap
      // 111: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // 114: bipush 2
      // 115: aaload
      // 116: invokedynamic makeConcatWithConstants (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" ]
      // 11b: invokevirtual java/util/logging/Logger.fine (Ljava/lang/String;)V
      // 11e: goto 125
      // 121: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 124: athrow
      // 125: aload 0
      // 126: aload 5
      // 128: aload 1
      // 129: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.a (Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;Ljava/lang/String;)Lcom/l7tech/server/url/AbstractUrlObjectCache$FetchResult;
      // 12c: areturn
      // 12d: getstatic com/l7tech/server/url/AbstractUrlObjectCache.b Z
      // 130: ifne 150
      // 133: aload 5
      // 135: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.b J
      // 138: lload 3
      // 139: lcmp
      // 13a: ifne 150
      // 13d: goto 144
      // 140: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 143: athrow
      // 144: new java/lang/AssertionError
      // 147: dup
      // 148: invokespecial java/lang/AssertionError.<init> ()V
      // 14b: athrow
      // 14c: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 14f: athrow
      // 150: aload 5
      // 152: dup
      // 153: astore 8
      // 155: monitorenter
      // 156: aload 5
      // 158: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.b J
      // 15b: lconst_0
      // 15c: lcmp
      // 15d: ifeq 255
      // 160: aload 2
      // 161: getstatic com/l7tech/server/url/AbstractUrlObjectCache.WAIT_LATEST Lcom/l7tech/server/url/AbstractUrlObjectCache$WaitMode;
      // 164: if_acmpeq 193
      // 167: aload 2
      // 168: getstatic com/l7tech/server/url/AbstractUrlObjectCache.WAIT_INITIAL Lcom/l7tech/server/url/AbstractUrlObjectCache$WaitMode;
      // 16b: if_acmpne 219
      // 16e: goto 175
      // 171: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 174: athrow
      // 175: aload 5
      // 177: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.g Ljava/lang/Object;
      // 17a: ifnonnull 219
      // 17d: goto 184
      // 180: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 183: athrow
      // 184: aload 5
      // 186: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.i Ljava/io/IOException;
      // 189: ifnonnull 219
      // 18c: goto 193
      // 18f: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 192: athrow
      // 193: aload 5
      // 195: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.b J
      // 198: lconst_0
      // 199: lcmp
      // 19a: ifeq 1fa
      // 19d: goto 1a4
      // 1a0: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1a3: athrow
      // 1a4: aload 0
      // 1a5: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 1a8: getstatic java/util/logging/Level.FINER Ljava/util/logging/Level;
      // 1ab: invokevirtual java/util/logging/Logger.isLoggable (Ljava/util/logging/Level;)Z
      // 1ae: ifeq 1ce
      // 1b1: aload 0
      // 1b2: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 1b5: aload 1
      // 1b6: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // 1b9: bipush 13
      // 1bb: aaload
      // 1bc: swap
      // 1bd: ldc "'"
      // 1bf: invokedynamic makeConcatWithConstants (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" ]
      // 1c4: invokevirtual java/util/logging/Logger.finer (Ljava/lang/String;)V
      // 1c7: goto 1ce
      // 1ca: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1cd: athrow
      // 1ce: aload 5
      // 1d0: invokevirtual java/lang/Object.wait ()V
      // 1d3: goto 193
      // 1d6: astore 9
      // 1d8: invokestatic java/lang/Thread.currentThread ()Ljava/lang/Thread;
      // 1db: invokevirtual java/lang/Thread.interrupt ()V
      // 1de: new java/lang/RuntimeException
      // 1e1: dup
      // 1e2: aload 1
      // 1e3: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // 1e6: astore 11
      // 1e8: aload 11
      // 1ea: bipush 1
      // 1eb: aaload
      // 1ec: swap
      // 1ed: ldc "'"
      // 1ef: invokedynamic makeConcatWithConstants (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" ]
      // 1f4: aload 9
      // 1f6: invokespecial java/lang/RuntimeException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // 1f9: athrow
      // 1fa: new com/l7tech/server/url/AbstractUrlObjectCache$FetchResult
      // 1fd: dup
      // 1fe: aconst_null
      // 1ff: aload 5
      // 201: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.i Ljava/io/IOException;
      // 204: if_acmpne 20f
      // 207: bipush 2
      // 208: goto 210
      // 20b: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 20e: athrow
      // 20f: bipush 0
      // 210: aload 5
      // 212: invokespecial com/l7tech/server/url/AbstractUrlObjectCache$FetchResult.<init> (ILcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;)V
      // 215: aload 8
      // 217: monitorexit
      // 218: areturn
      // 219: aload 0
      // 21a: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 21d: getstatic java/util/logging/Level.FINER Ljava/util/logging/Level;
      // 220: invokevirtual java/util/logging/Logger.isLoggable (Ljava/util/logging/Level;)Z
      // 223: ifeq 247
      // 226: aload 0
      // 227: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 22a: aload 1
      // 22b: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // 22e: bipush 14
      // 230: aaload
      // 231: swap
      // 232: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // 235: bipush 15
      // 237: aaload
      // 238: invokedynamic makeConcatWithConstants (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" ]
      // 23d: invokevirtual java/util/logging/Logger.finer (Ljava/lang/String;)V
      // 240: goto 247
      // 243: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 246: athrow
      // 247: new com/l7tech/server/url/AbstractUrlObjectCache$FetchResult
      // 24a: dup
      // 24b: bipush 1
      // 24c: aload 5
      // 24e: invokespecial com/l7tech/server/url/AbstractUrlObjectCache$FetchResult.<init> (ILcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;)V
      // 251: aload 8
      // 253: monitorexit
      // 254: areturn
      // 255: aload 0
      // 256: aload 5
      // 258: aload 0
      // 259: getfield com/l7tech/server/url/AbstractUrlObjectCache.clock Lcom/l7tech/util/TimeSource;
      // 25c: invokevirtual com/l7tech/util/TimeSource.currentTimeMillis ()J
      // 25f: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.a (Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;J)Z
      // 262: ifne 2b9
      // 265: aload 0
      // 266: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 269: getstatic java/util/logging/Level.FINE Ljava/util/logging/Level;
      // 26c: invokevirtual java/util/logging/Logger.isLoggable (Ljava/util/logging/Level;)Z
      // 26f: ifeq 295
      // 272: goto 279
      // 275: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 278: athrow
      // 279: aload 0
      // 27a: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 27d: aload 1
      // 27e: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // 281: bipush 0
      // 282: aaload
      // 283: swap
      // 284: ldc "'"
      // 286: invokedynamic makeConcatWithConstants (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" ]
      // 28b: invokevirtual java/util/logging/Logger.fine (Ljava/lang/String;)V
      // 28e: goto 295
      // 291: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 294: athrow
      // 295: aload 5
      // 297: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.a ()V
      // 29a: new com/l7tech/server/url/AbstractUrlObjectCache$FetchResult
      // 29d: dup
      // 29e: aconst_null
      // 29f: aload 5
      // 2a1: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.i Ljava/io/IOException;
      // 2a4: if_acmpne 2af
      // 2a7: bipush 3
      // 2a8: goto 2b0
      // 2ab: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2ae: athrow
      // 2af: bipush 0
      // 2b0: aload 5
      // 2b2: invokespecial com/l7tech/server/url/AbstractUrlObjectCache$FetchResult.<init> (ILcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;)V
      // 2b5: aload 8
      // 2b7: monitorexit
      // 2b8: areturn
      // 2b9: aload 5
      // 2bb: lload 3
      // 2bc: putfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.b J
      // 2bf: bipush 1
      // 2c0: istore 6
      // 2c2: aload 8
      // 2c4: monitorexit
      // 2c5: goto 2d0
      // 2c8: astore 10
      // 2ca: aload 8
      // 2cc: monitorexit
      // 2cd: aload 10
      // 2cf: athrow
      // 2d0: getstatic com/l7tech/server/url/AbstractUrlObjectCache.b Z
      // 2d3: ifne 2ee
      // 2d6: iload 6
      // 2d8: ifne 2ee
      // 2db: goto 2e2
      // 2de: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2e1: athrow
      // 2e2: new java/lang/AssertionError
      // 2e5: dup
      // 2e6: invokespecial java/lang/AssertionError.<init> ()V
      // 2e9: athrow
      // 2ea: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2ed: athrow
      // 2ee: aload 0
      // 2ef: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 2f2: getstatic java/util/logging/Level.FINE Ljava/util/logging/Level;
      // 2f5: invokevirtual java/util/logging/Logger.isLoggable (Ljava/util/logging/Level;)Z
      // 2f8: ifeq 31c
      // 2fb: aload 0
      // 2fc: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 2ff: aload 1
      // 300: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // 303: bipush 11
      // 305: aaload
      // 306: swap
      // 307: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // 30a: bipush 6
      // 30c: aaload
      // 30d: invokedynamic makeConcatWithConstants (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" ]
      // 312: invokevirtual java/util/logging/Logger.fine (Ljava/lang/String;)V
      // 315: goto 31c
      // 318: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 31b: athrow
      // 31c: aload 0
      // 31d: aload 1
      // 31e: aload 5
      // 320: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/String;Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;)Lcom/l7tech/server/url/AbstractUrlObjectCache$FetchResult;
      // 323: areturn
      // try (15 -> 68): 75 null
      // try (75 -> 76): 75 null
      // try (191 -> 206): 207 java/lang/InterruptedException
      // try (177 -> 188): 189 java/lang/InterruptedException
      // try (171 -> 180): 181 java/lang/InterruptedException
      // try (165 -> 174): 175 java/lang/InterruptedException
      // try (162 -> 168): 169 java/lang/InterruptedException
      // try (139 -> 151): 151 java/lang/InterruptedException
      // try (137 -> 144): 145 java/lang/InterruptedException
      // try (109 -> 129): 130 java/lang/InterruptedException
      // try (107 -> 114): 115 java/lang/InterruptedException
      // try (95 -> 105): 105 java/lang/InterruptedException
      // try (93 -> 98): 99 java/lang/InterruptedException
      // try (82 -> 91): 91 java/lang/InterruptedException
      // try (80 -> 84): 85 java/lang/InterruptedException
      // try (191 -> 211): 212 java/lang/InterruptedException
      // try (229 -> 237): 237 java/lang/InterruptedException
      // try (157 -> 244): 327 null
      // try (245 -> 262): 263 java/lang/InterruptedException
      // try (245 -> 272): 327 null
      // try (301 -> 311): 311 java/lang/InterruptedException
      // try (280 -> 298): 299 java/lang/InterruptedException
      // try (273 -> 285): 286 java/lang/InterruptedException
      // try (273 -> 318): 327 null
      // try (319 -> 326): 327 null
      // try (327 -> 330): 327 null
      // try (332 -> 336): 337 java/lang/InterruptedException
      // try (334 -> 343): 343 java/lang/InterruptedException
      // try (345 -> 362): 363 java/lang/InterruptedException
   }

   private AbstractUrlObjectCache.FetchResult<UT> a(String var1, AbstractUrlObjectCache.AbstractCacheEntry<UT> var2) {
      boolean var3 = false;

      try {
         this.onStaleEntryAboutToBeReplaced(var2, var1);
         var3 = true;
      } finally {
         try {
            if (!var3) {
               this.b(var2, var1);
            }
         } catch (RuntimeException var8) {
            throw a(var8);
         }
      }

      return this.a(var2, var1);
   }

   public void serviceCache(Executor param1, long 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:
      // 000: aload 0
      // 001: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 004: getstatic java/util/logging/Level.FINEST Ljava/util/logging/Level;
      // 007: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // 00a: bipush 12
      // 00c: aaload
      // 00d: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;)V
      // 010: invokestatic java/lang/Thread.currentThread ()Ljava/lang/Thread;
      // 013: invokevirtual java/lang/Thread.getId ()J
      // 016: lstore 4
      // 018: aload 0
      // 019: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.getReadLock ()Ljava/util/concurrent/locks/Lock;
      // 01c: astore 6
      // 01e: aload 0
      // 01f: getfield com/l7tech/server/url/AbstractUrlObjectCache.clock Lcom/l7tech/util/TimeSource;
      // 022: invokevirtual com/l7tech/util/TimeSource.currentTimeMillis ()J
      // 025: lload 2
      // 026: ladd
      // 027: lstore 7
      // 029: new java/util/ArrayList
      // 02c: dup
      // 02d: invokespecial java/util/ArrayList.<init> ()V
      // 030: astore 9
      // 032: aload 6
      // 034: invokeinterface java/util/concurrent/locks/Lock.lock ()V 1
      // 039: aload 0
      // 03a: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.cacheIterator ()Ljava/util/Iterator;
      // 03d: astore 10
      // 03f: aload 10
      // 041: ifnull 0b2
      // 044: aload 10
      // 046: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 04b: ifeq 0b2
      // 04e: goto 055
      // 051: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 054: athrow
      // 055: aload 10
      // 057: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 05c: checkcast com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry
      // 05f: astore 11
      // 061: aload 11
      // 063: ifnull 0af
      // 066: aload 11
      // 068: dup
      // 069: astore 12
      // 06b: monitorenter
      // 06c: aload 11
      // 06e: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.b J
      // 071: lconst_0
      // 072: lcmp
      // 073: ifne 0a1
      // 076: aload 11
      // 078: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.c I
      // 07b: ifle 0a1
      // 07e: aload 0
      // 07f: aload 11
      // 081: lload 7
      // 083: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.a (Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;J)Z
      // 086: ifeq 0a1
      // 089: goto 090
      // 08c: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 08f: athrow
      // 090: aload 9
      // 092: aload 11
      // 094: invokeinterface java/util/Collection.add (Ljava/lang/Object;)Z 2
      // 099: pop
      // 09a: goto 0a1
      // 09d: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0a0: athrow
      // 0a1: aload 12
      // 0a3: monitorexit
      // 0a4: goto 0af
      // 0a7: astore 13
      // 0a9: aload 12
      // 0ab: monitorexit
      // 0ac: aload 13
      // 0ae: athrow
      // 0af: goto 044
      // 0b2: aload 6
      // 0b4: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 0b9: goto 0c8
      // 0bc: astore 14
      // 0be: aload 6
      // 0c0: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 0c5: aload 14
      // 0c7: athrow
      // 0c8: lload 7
      // 0ca: getstatic com/l7tech/util/TimeUnit.SECONDS Lcom/l7tech/util/TimeUnit;
      // 0cd: ldc2_w 30
      // 0d0: invokevirtual com/l7tech/util/TimeUnit.toMillis (J)J
      // 0d3: lsub
      // 0d4: lstore 10
      // 0d6: aload 9
      // 0d8: invokeinterface java/util/Collection.iterator ()Ljava/util/Iterator; 1
      // 0dd: astore 12
      // 0df: aload 12
      // 0e1: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 0e6: ifeq 10c
      // 0e9: aload 12
      // 0eb: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 0f0: checkcast com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry
      // 0f3: astore 13
      // 0f5: aload 1
      // 0f6: new com/l7tech/server/url/a
      // 0f9: dup
      // 0fa: aload 0
      // 0fb: lload 10
      // 0fd: aload 13
      // 0ff: lload 4
      // 101: invokespecial com/l7tech/server/url/a.<init> (Lcom/l7tech/server/url/AbstractUrlObjectCache;JLcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;J)V
      // 104: invokeinterface java/util/concurrent/Executor.execute (Ljava/lang/Runnable;)V 2
      // 109: goto 0df
      // 10c: return
      // try (54 -> 66): 67 java/lang/RuntimeException
      // try (51 -> 59): 60 java/lang/RuntimeException
      // try (28 -> 33): 34 java/lang/RuntimeException
      // try (46 -> 71): 72 null
      // try (72 -> 75): 72 null
      // try (25 -> 78): 81 null
      // try (81 -> 82): 81 null
   }

   @Override
   public UT resolveUrl(Audit param1, String param2) throws IOException, ParseException {
      // $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 2
      // 02: aload 0
      // 03: getfield com/l7tech/server/url/AbstractUrlObjectCache.defaultWaitMode Lcom/l7tech/server/url/AbstractUrlObjectCache$WaitMode;
      // 06: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.fetchCached (Ljava/lang/String;Lcom/l7tech/server/url/AbstractUrlObjectCache$WaitMode;)Lcom/l7tech/server/url/AbstractUrlObjectCache$FetchResult;
      // 09: astore 3
      // 0a: aload 3
      // 0b: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache$FetchResult.getUserObject ()Ljava/lang/Object;
      // 0e: astore 4
      // 10: aload 4
      // 12: ifnull 7c
      // 15: aload 3
      // 16: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache$FetchResult.getException ()Ljava/io/IOException;
      // 19: astore 5
      // 1b: aload 5
      // 1d: ifnull 79
      // 20: aload 0
      // 21: getfield com/l7tech/server/url/AbstractUrlObjectCache.maxStaleCacheAge J
      // 24: ldc2_w -1
      // 27: lcmp
      // 28: ifeq 4d
      // 2b: goto 32
      // 2e: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 31: athrow
      // 32: aload 0
      // 33: getfield com/l7tech/server/url/AbstractUrlObjectCache.clock Lcom/l7tech/util/TimeSource;
      // 36: invokevirtual com/l7tech/util/TimeSource.currentTimeMillis ()J
      // 39: aload 3
      // 3a: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache$FetchResult.getUserObjectCreated ()J
      // 3d: lsub
      // 3e: aload 0
      // 3f: getfield com/l7tech/server/url/AbstractUrlObjectCache.maxStaleCacheAge J
      // 42: lcmp
      // 43: ifgt 7c
      // 46: goto 4d
      // 49: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 4c: athrow
      // 4d: aload 1
      // 4e: getstatic com/l7tech/gateway/common/audit/SystemMessages.URL_OBJECT_CACHE_REUSE Lcom/l7tech/gateway/common/audit/Messages$M;
      // 51: bipush 3
      // 52: anewarray 106
      // 55: dup
      // 56: bipush 0
      // 57: aload 0
      // 58: getfield com/l7tech/server/url/AbstractUrlObjectCache.resourceDescription Ljava/lang/String;
      // 5b: aastore
      // 5c: dup
      // 5d: bipush 1
      // 5e: aload 2
      // 5f: aastore
      // 60: dup
      // 61: bipush 2
      // 62: aload 5
      // 64: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
      // 67: aastore
      // 68: aload 5
      // 6a: invokestatic com/l7tech/util/ExceptionUtils.getDebugException (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 6d: invokeinterface com/l7tech/gateway/common/audit/Audit.logAndAudit (Lcom/l7tech/gateway/common/audit/AuditDetailMessage;[Ljava/lang/String;Ljava/lang/Throwable;)V 4
      // 72: aload 4
      // 74: areturn
      // 75: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 78: athrow
      // 79: aload 4
      // 7b: areturn
      // 7c: aload 3
      // 7d: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache$FetchResult.getException ()Ljava/io/IOException;
      // 80: astore 5
      // 82: aload 5
      // 84: ifnull a2
      // 87: aload 5
      // 89: ldc java/text/ParseException
      // 8b: invokestatic com/l7tech/util/ExceptionUtils.getCauseIfCausedBy (Ljava/lang/Throwable;Ljava/lang/Class;)Ljava/lang/Throwable;
      // 8e: checkcast java/text/ParseException
      // 91: astore 6
      // 93: aload 6
      // 95: ifnull 9f
      // 98: aload 6
      // 9a: athrow
      // 9b: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 9e: athrow
      // 9f: aload 5
      // a1: athrow
      // a2: new java/io/IOException
      // a5: dup
      // a6: aload 2
      // a7: getstatic com/l7tech/server/url/AbstractUrlObjectCache.k [Ljava/lang/String;
      // aa: bipush 9
      // ac: aaload
      // ad: swap
      // ae: 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" ]
      // b3: invokespecial java/io/IOException.<init> (Ljava/lang/String;)V
      // b6: athrow
      // try (14 -> 21): 22 java/io/IOException
      // try (16 -> 34): 35 java/io/IOException
      // try (24 -> 60): 60 java/io/IOException
      // try (74 -> 78): 78 java/io/IOException
   }

   public UT evict(String var1) {
      Lock var2 = this.getWriteLock();
      var2.lock();

      try {
         AbstractUrlObjectCache.AbstractCacheEntry var3 = this.cacheRemove(var1);

         try {
            if (var3 == null) {
               return null;
            }
         } catch (RuntimeException var8) {
            throw a(var8);
         }

         return var3.g;
      } finally {
         var2.unlock();
      }
   }

   private boolean a(AbstractUrlObjectCache.AbstractCacheEntry<UT> param1, long 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: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.g Ljava/lang/Object;
      // 04: ifnull 0f
      // 07: bipush 1
      // 08: goto 10
      // 0b: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0e: athrow
      // 0f: bipush 0
      // 10: istore 4
      // 12: aload 1
      // 13: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.i Ljava/io/IOException;
      // 16: ifnull 21
      // 19: bipush 1
      // 1a: goto 22
      // 1d: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 20: athrow
      // 21: bipush 0
      // 22: istore 5
      // 24: iload 4
      // 26: ifne 3b
      // 29: iload 5
      // 2b: ifne 3b
      // 2e: goto 35
      // 31: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 34: athrow
      // 35: bipush 1
      // 36: ireturn
      // 37: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3a: athrow
      // 3b: iload 4
      // 3d: ifeq 55
      // 40: lload 2
      // 41: aload 1
      // 42: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.h J
      // 45: lsub
      // 46: aload 0
      // 47: getfield com/l7tech/server/url/AbstractUrlObjectCache.maxCacheAge J
      // 4a: lcmp
      // 4b: iflt 5d
      // 4e: goto 55
      // 51: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 54: athrow
      // 55: bipush 1
      // 56: goto 5e
      // 59: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 5c: athrow
      // 5d: bipush 0
      // 5e: istore 6
      // 60: iload 5
      // 62: ifeq 7a
      // 65: lload 2
      // 66: aload 1
      // 67: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.j J
      // 6a: lsub
      // 6b: aload 0
      // 6c: getfield com/l7tech/server/url/AbstractUrlObjectCache.maxCacheAge J
      // 6f: lcmp
      // 70: iflt 82
      // 73: goto 7a
      // 76: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 79: athrow
      // 7a: bipush 1
      // 7b: goto 83
      // 7e: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 81: athrow
      // 82: bipush 0
      // 83: istore 7
      // 85: iload 7
      // 87: ifeq 9e
      // 8a: iload 6
      // 8c: ifeq 9e
      // 8f: goto 96
      // 92: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 95: athrow
      // 96: bipush 1
      // 97: goto 9f
      // 9a: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 9d: athrow
      // 9e: bipush 0
      // 9f: ireturn
      // try (0 -> 5): 5 java/lang/RuntimeException
      // try (9 -> 14): 14 java/lang/RuntimeException
      // try (18 -> 22): 23 java/lang/RuntimeException
      // try (20 -> 27): 27 java/lang/RuntimeException
      // try (29 -> 39): 40 java/lang/RuntimeException
      // try (31 -> 44): 44 java/lang/RuntimeException
      // try (48 -> 58): 59 java/lang/RuntimeException
      // try (50 -> 63): 63 java/lang/RuntimeException
      // try (67 -> 71): 72 java/lang/RuntimeException
      // try (69 -> 76): 76 java/lang/RuntimeException
   }

   private AbstractUrlObjectCache.FetchResult<UT> a(AbstractUrlObjectCache.AbstractCacheEntry<UT> param1, 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:
      // 000: aload 0
      // 001: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 004: getstatic java/util/logging/Level.FINER Ljava/util/logging/Level;
      // 007: aload 2
      // 008: invokedynamic get (Ljava/lang/String;)Ljava/util/function/Supplier; bsm=java/lang/invoke/LambdaMetafactory.metafactory (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; args=[ ()Ljava/lang/Object;, com/l7tech/server/url/AbstractUrlObjectCache.lambda$doPoll$0 (Ljava/lang/String;)Ljava/lang/String;, ()Ljava/lang/String; ]
      // 00d: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/util/function/Supplier;)V
      // 010: aload 0
      // 011: getfield com/l7tech/server/url/AbstractUrlObjectCache.clock Lcom/l7tech/util/TimeSource;
      // 014: invokevirtual com/l7tech/util/TimeSource.currentTimeMillis ()J
      // 017: lstore 3
      // 018: aload 1
      // 019: dup
      // 01a: astore 10
      // 01c: monitorenter
      // 01d: aload 1
      // 01e: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.g Ljava/lang/Object;
      // 021: astore 5
      // 023: aload 1
      // 024: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.e Ljava/lang/String;
      // 027: astore 6
      // 029: aload 1
      // 02a: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.d J
      // 02d: lstore 7
      // 02f: aload 1
      // 030: getfield com/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry.f Ljava/lang/String;
      // 033: astore 9
      // 035: aload 10
      // 037: monitorexit
      // 038: goto 043
      // 03b: astore 11
      // 03d: aload 10
      // 03f: monitorexit
      // 040: aload 11
      // 042: athrow
      // 043: bipush 0
      // 044: istore 10
      // 046: aload 0
      // 047: aload 2
      // 048: aload 6
      // 04a: lload 7
      // 04c: aload 9
      // 04e: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.doGet (Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;)Lcom/l7tech/server/url/AbstractUrlObjectCache$DatedUserObject;
      // 051: astore 11
      // 053: lload 3
      // 054: lstore 12
      // 056: aload 11
      // 058: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache$DatedUserObject.getLastModified ()Ljava/lang/String;
      // 05b: astore 14
      // 05d: aload 11
      // 05f: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache$DatedUserObject.getETag ()Ljava/lang/String;
      // 062: astore 15
      // 064: aload 11
      // 066: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache$DatedUserObject.getUserObject ()Ljava/lang/Object;
      // 069: astore 16
      // 06b: aload 16
      // 06d: ifnonnull 09c
      // 070: aload 5
      // 072: astore 16
      // 074: aload 6
      // 076: ifnull 09c
      // 079: aload 14
      // 07b: ifnull 09c
      // 07e: goto 085
      // 081: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 084: athrow
      // 085: aload 6
      // 087: aload 14
      // 089: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 08c: ifne 09c
      // 08f: goto 096
      // 092: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 095: athrow
      // 096: lconst_0
      // 097: lstore 12
      // 099: aconst_null
      // 09a: astore 14
      // 09c: aload 0
      // 09d: aload 1
      // 09e: lload 3
      // 09f: lload 12
      // 0a1: aload 14
      // 0a3: aload 15
      // 0a5: aload 16
      // 0a7: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.a (Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;JJLjava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Lcom/l7tech/server/url/AbstractUrlObjectCache$FetchResult;
      // 0aa: astore 17
      // 0ac: bipush 1
      // 0ad: istore 10
      // 0af: new java/util/Date
      // 0b2: dup
      // 0b3: lload 3
      // 0b4: invokespecial java/util/Date.<init> (J)V
      // 0b7: astore 18
      // 0b9: aload 0
      // 0ba: getfield com/l7tech/server/url/AbstractUrlObjectCache.a Ljava/util/logging/Logger;
      // 0bd: getstatic java/util/logging/Level.FINE Ljava/util/logging/Level;
      // 0c0: aload 1
      // 0c1: aload 18
      // 0c3: invokedynamic get (Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;Ljava/util/Date;)Ljava/util/function/Supplier; bsm=java/lang/invoke/LambdaMetafactory.metafactory (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; args=[ ()Ljava/lang/Object;, com/l7tech/server/url/AbstractUrlObjectCache.lambda$doPoll$1 (Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;Ljava/util/Date;)Ljava/lang/String;, ()Ljava/lang/String; ]
      // 0c8: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/util/function/Supplier;)V
      // 0cb: aload 17
      // 0cd: astore 19
      // 0cf: iload 10
      // 0d1: ifne 0e1
      // 0d4: aload 0
      // 0d5: aload 1
      // 0d6: aload 2
      // 0d7: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.b (Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;Ljava/lang/String;)V
      // 0da: goto 0e1
      // 0dd: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0e0: athrow
      // 0e1: aload 19
      // 0e3: areturn
      // 0e4: astore 11
      // 0e6: aload 0
      // 0e7: aload 1
      // 0e8: aload 11
      // 0ea: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.a (Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;Ljava/io/IOException;)Lcom/l7tech/server/url/AbstractUrlObjectCache$FetchResult;
      // 0ed: astore 12
      // 0ef: bipush 1
      // 0f0: istore 10
      // 0f2: aload 12
      // 0f4: astore 13
      // 0f6: iload 10
      // 0f8: ifne 108
      // 0fb: aload 0
      // 0fc: aload 1
      // 0fd: aload 2
      // 0fe: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.b (Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;Ljava/lang/String;)V
      // 101: goto 108
      // 104: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 107: athrow
      // 108: aload 13
      // 10a: areturn
      // 10b: astore 20
      // 10d: iload 10
      // 10f: ifne 11f
      // 112: aload 0
      // 113: aload 1
      // 114: aload 2
      // 115: invokevirtual com/l7tech/server/url/AbstractUrlObjectCache.b (Lcom/l7tech/server/url/AbstractUrlObjectCache$AbstractCacheEntry;Ljava/lang/String;)V
      // 118: goto 11f
      // 11b: invokestatic com/l7tech/server/url/AbstractUrlObjectCache.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 11e: athrow
      // 11f: aload 20
      // 121: athrow
      // try (14 -> 28): 29 null
      // try (29 -> 32): 29 null
      // try (60 -> 69): 70 java/io/IOException
      // try (58 -> 62): 63 java/io/IOException
      // try (36 -> 101): 112 java/io/IOException
      // try (36 -> 101): 133 null
      // try (101 -> 107): 108 java/io/IOException
      // try (112 -> 122): 133 null
      // try (122 -> 128): 129 java/io/IOException
      // try (133 -> 134): 133 null
      // try (134 -> 140): 141 java/io/IOException
   }

   protected abstract AbstractUrlObjectCache.DatedUserObject<UT> doGet(String var1, String var2, long var3, String var5) throws IOException;

   private AbstractUrlObjectCache.FetchResult<UT> a(AbstractUrlObjectCache.AbstractCacheEntry<UT> var1, IOException var2) {
      synchronized (var1) {
         var1.c = 0;
         var1.i = var2;
         var1.j = this.clock.currentTimeMillis();
         var1.b = 0L;
         var1.notifyAll();
         return new AbstractUrlObjectCache.FetchResult<>(0, var1);
      }
   }

   private void b(AbstractUrlObjectCache.AbstractCacheEntry<UT> var1, String var2) {
      synchronized (var1) {
         var1.c = 0;
         if (var1.i == null) {
            var1.i = new IOException(k[5] + var2);
            var1.j = this.clock.currentTimeMillis();
         }

         var1.b = 0L;
         var1.notifyAll();
      }
   }

   private AbstractUrlObjectCache.FetchResult<UT> a(AbstractUrlObjectCache.AbstractCacheEntry<UT> var1, long var2, long var4, String var6, String var7, UT var8) {
      synchronized (var1) {
         var1.c = 0;
         var1.d = var4;
         var1.e = var6;
         var1.f = var7;
         var1.i = null;
         var1.j = 0L;
         var1.g = (UT)var8;
         var1.h = var2;
         var1.b = 0L;
         var1.notifyAll();
         return new AbstractUrlObjectCache.FetchResult<>(2, var1);
      }
   }

   static {
      String[] var5 = new String[16];
      int var3 = 0;
      String var2 = "y]ZL?/\u0001E_\u000eZ,\"\u0000N\\\u000e\\#5\u001aR\u0018HV?a=yt\u000e\u001eFbVZ\\?3\u001d[LK]m6\u0000BTK\u0019: \u0001_Q@^m'\u0007Y\u0018AM%$\u001a\u000bLFK( \f\u000bLA\u0019+(\u0006BKF\u0019).\u001fETAX)(\u0006L\u0018{k\u0001aO(\f\u0018GJm/\u0007_\u0018GWm5\u0000N\u0018MX.)\r\u0010\u0018MV#5\tHLGW*a\u001bNJX\\?\u001dy]HK(2\u0000N\\\u000eM%$HHYMQ(%HNVZK4aR\u000b\u0005~jb\u0019jJ~VKA=$\u000b_]J\u0019$/\u001cNJ@X!a\rYJAKm6\u0000BTK\u0019,5\u001cNU^M$/\u000f\u000bLA\u0019).\u001fETAX)a\rSLKK# \u0004\u000bJKJ\"4\u001aH]\u0014\u0019\u001f\f\u0018GJm5\u0007D\u0018AU)zHHW@M,\"\u001cBVI\u0019>$\u001a]]\\\u0004\u000bYZ\u0019\u0012{WBU$/\u000f\u000bLF\\m\u0014:g\u0018\u0014\u0019!eW\u000eL>$\u001a\u000bWLS(\"\u001c\u000bYXX$-\tITK\u0019+.\u001a\u000bM\\Um$y]ML?2\u0001]]\u000eV?a\u000bBJML! \u001a\u000b^KM.)HD^\u000el\u001f\rR\u000b\u0015hYMQ(a\rEL\\@m'\u0007Y\u0018{k\u0001aO\u001c{JAZ(2\u001bBVI\u00199)\r\u000b[OZ%$HY]HK(2\u00004|YGM$/\u000f\u000b^AKm.\u001cC]\\\u00199)\u001aNYJ\u00199.HHW@M,\"\u001c\u000bKKK;$\u001a\u000b^AKm\u0014:g\u0018\t";
      int var4 = "y]ZL?/\u0001E_\u000eZ,\"\u0000N\\\u000e\\#5\u001aR\u0018HV?a=yt\u000e\u001eFbVZ\\?3\u001d[LK]m6\u0000BTK\u0019: \u0001_Q@^m'\u0007Y\u0018AM%$\u001a\u000bLFK( \f\u000bLA\u0019+(\u0006BKF\u0019).\u001fETAX)(\u0006L\u0018{k\u0001aO(\f\u0018GJm/\u0007_\u0018GWm5\u0000N\u0018MX.)\r\u0010\u0018MV#5\tHLGW*a\u001bNJX\\?\u001dy]HK(2\u0000N\\\u000eM%$HHYMQ(%HNVZK4aR\u000b\u0005~jb\u0019jJ~VKA=$\u000b_]J\u0019$/\u001cNJ@X!a\rYJAKm6\u0000BTK\u0019,5\u001cNU^M$/\u000f\u000bLA\u0019).\u001fETAX)a\rSLKK# \u0004\u000bJKJ\"4\u001aH]\u0014\u0019\u001f\f\u0018GJm5\u0007D\u0018AU)zHHW@M,\"\u001cBVI\u0019>$\u001a]]\\\u0004\u000bYZ\u0019\u0012{WBU$/\u000f\u000bLF\\m\u0014:g\u0018\u0014\u0019!eW\u000eL>$\u001a\u000bWLS(\"\u001c\u000bYXX$-\tITK\u0019+.\u001a\u000bM\\Um$y]ML?2\u0001]]\u000eV?a\u000bBJML! \u001a\u000b^KM.)HD^\u000el\u001f\rR\u000b\u0015hYMQ(a\rEL\\@m'\u0007Y\u0018{k\u0001aO\u001c{JAZ(2\u001bBVI\u00199)\r\u000b[OZ%$HY]HK(2\u00004|YGM$/\u000f\u000b^AKm.\u001cC]\\\u00199)\u001aNYJ\u00199.HHW@M,\"\u001c\u000bKKK;$\u001a\u000b^AKm\u0014:g\u0018\t"
         .length();
      char var1 = ' ';
      int var8 = -1;

      label39:
      while (true) {
         byte var10000 = 120;
         String var10001 = var2.substring(++var8, var8 + var1);
         byte var10002 = -1;

         while (true) {
            String var9 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var9;
                  if ((var8 += var1) >= var4) {
                     k = var5;

                     label26: {
                        try {
                           if (!AbstractUrlObjectCache.class.desiredAssertionStatus()) {
                              var10 = true;
                              break label26;
                           }
                        } catch (RuntimeException var6) {
                           throw a(var6);
                        }

                        var10 = false;
                     }

                     b = var10;
                     WAIT_NEVER = new AbstractUrlObjectCache.WaitMode();
                     WAIT_INITIAL = new AbstractUrlObjectCache.WaitMode();
                     WAIT_LATEST = new AbstractUrlObjectCache.WaitMode();
                     return;
                  }

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

                  var2 = "Njm{\b\u00186rh9m\u001b\u00157yk9k\u0014\u0002-e/\u007fa\bV\nNC9)\";/ng\u000e\u001e0i{9y\u001b\u001f+ua~.\u001c\u0019-<`mf\u001f\u0004\u007fhgkk\u001b\u0012";
                  var4 = "Njm{\b\u00186rh9m\u001b\u00157yk9k\u0014\u0002-e/\u007fa\bV\nNC9)\";/ng\u000e\u001e0i{9y\u001b\u001f+ua~.\u001c\u0019-<`mf\u001f\u0004\u007fhgkk\u001b\u0012"
                     .length();
                  var1 = ' ';
                  var8 = -1;
            }

            var10000 = 79;
            var10001 = var2.substring(++var8, var8 + var1);
            var10002 = 0;
         }
      }
   }

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

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

      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 -> 83;
            case 1 -> 64;
            case 2 -> 86;
            case 3 -> 65;
            case 4 -> 53;
            case 5 -> 57;
            default -> 16;
         });
      }

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

   protected static class AbstractCacheEntry<UT> {
      private final String a;
      private long b;
      private int c;
      private long d;
      private String e;
      private String f;
      private UT g;
      private long h;
      private IOException i;
      private long j;

      private AbstractCacheEntry(String var1) {
         this.a = var1;
      }

      public UT getUserObject() {
         return this.g;
      }

      private void a() {
         if (this.c < Integer.MAX_VALUE) {
            this.c++;
         }
      }
   }

   protected static final class DatedUserObject<UT> {
      private final String a;
      private final String b;
      private final UT c;

      public DatedUserObject(UT var1, String var2, String var3) {
         this.a = var2;
         this.c = (UT)var1;
         this.b = var3;
      }

      public String getLastModified() {
         return this.a;
      }

      public String getETag() {
         return this.b;
      }

      public UT getUserObject() {
         return this.c;
      }
   }

   public static class FetchResult<UT> {
      private final int a;
      private final UT b;
      private final long c;
      private final IOException d;
      private final long e;

      public FetchResult(int var1, AbstractUrlObjectCache.AbstractCacheEntry<UT> var2) {
         this.a = var1;
         this.b = var2.g;
         this.c = var2.h;
         this.d = var2.i;
         this.e = var2.j;
      }

      public int getResult() {
         return this.a;
      }

      public UT getUserObject() {
         return this.b;
      }

      public long getUserObjectCreated() {
         return this.c;
      }

      public IOException getException() {
         return this.d;
      }

      public long getExceptionCreated() {
         return this.e;
      }
   }

   public interface UserObjectFactory<UT> {
      UT createUserObject(String var1, AbstractUrlObjectCache.UserObjectSource var2) throws IOException;
   }

   public interface UserObjectSource {
      ContentTypeHeader getContentType();

      String getString(boolean var1) throws IOException;

      byte[] getBytes() throws IOException;
   }

   public static class WaitMode {
      private WaitMode() {
      }
   }
}
