public class com.microsoft.sqlserver.jdbc.MaxResultBufferParser
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.microsoft.sqlserver.jdbc.MaxResultBufferParser
  super_class: java.lang.Object
{
  private static final java.util.logging.Logger logger;
    descriptor: Ljava/util/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String[] PERCENT_PHRASES;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String ERROR_MESSAGE;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "MaxResultBuffer property is badly formatted: {0}."

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         0: .line 19
            ldc "com.microsoft.sqlserver.jdbc.MaxResultBufferParser"
            invokestatic java.util.logging.Logger.getLogger:(Ljava/lang/String;)Ljava/util/logging/Logger;
            putstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.logger:Ljava/util/logging/Logger;
         1: .line 20
            iconst_3
            anewarray java.lang.String
            dup
            iconst_0
            ldc "percent"
            aastore
            dup
            iconst_1
            ldc "pct"
            aastore
            dup
            iconst_2
            ldc "p"
            aastore
            putstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.PERCENT_PHRASES:[Ljava/lang/String;
         2: .line 21
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.microsoft.sqlserver.jdbc.MaxResultBufferParser this
         0: .line 23
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.microsoft.sqlserver.jdbc.MaxResultBufferParser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/microsoft/sqlserver/jdbc/MaxResultBufferParser;

  public static long validateMaxResultBuffer(java.lang.String);
    descriptor: (Ljava/lang/String;)J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=9, args_size=1
        start local 0 // java.lang.String input
         0: .line 37
            ldc -1
            lstore 2 /* number */
        start local 2 // long number
         1: .line 40
            aload 0 /* input */
            invokestatic com.microsoft.sqlserver.jdbc.StringUtils.isEmpty:(Ljava/lang/CharSequence;)Z
            ifne 2
            aload 0 /* input */
            ldc "-1"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 3
         2: .line 41
      StackMap locals: java.lang.String top long
      StackMap stack:
            lload 2 /* number */
            lreturn
         3: .line 45
      StackMap locals:
      StackMap stack:
            aload 0 /* input */
            invokestatic com.microsoft.sqlserver.jdbc.StringUtils.isEmpty:(Ljava/lang/CharSequence;)Z
            ifne 11
            aload 0 /* input */
            ldc "-?\\d+(\\.\\d+)?"
            invokevirtual java.lang.String.matches:(Ljava/lang/String;)Z
            ifeq 11
         4: .line 47
            aload 0 /* input */
            invokestatic java.lang.Long.parseLong:(Ljava/lang/String;)J
            lstore 2 /* number */
         5: .line 48
            goto 10
      StackMap locals:
      StackMap stack: java.lang.NumberFormatException
         6: astore 4 /* e */
        start local 4 // java.lang.NumberFormatException e
         7: .line 49
            getstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 9
         8: .line 50
            getstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
            ldc "MaxResultBuffer property is badly formatted: {0}."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* input */
            aastore
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V
         9: .line 52
      StackMap locals: java.lang.NumberFormatException
      StackMap stack:
            aload 4 /* e */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* input */
            aastore
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.throwNewInvalidMaxResultBufferParameterException:(Ljava/lang/Throwable;[Ljava/lang/Object;)V
        end local 4 // java.lang.NumberFormatException e
        10: .line 54
      StackMap locals:
      StackMap stack:
            lload 2 /* number */
            lconst_1
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.adjustMemory:(JJ)J
            lreturn
        11: .line 57
      StackMap locals:
      StackMap stack:
            getstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.PERCENT_PHRASES:[Ljava/lang/String;
            dup
            astore 7
            arraylength
            istore 6
            iconst_0
            istore 5
            goto 23
      StackMap locals: java.lang.String top long top int int java.lang.String[]
      StackMap stack:
        12: aload 7
            iload 5
            aaload
            astore 4 /* percentPhrase */
        start local 4 // java.lang.String percentPhrase
        13: .line 58
            aload 0 /* input */
            aload 4 /* percentPhrase */
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 22
        14: .line 59
            aload 0 /* input */
            iconst_0
            aload 0 /* input */
            invokevirtual java.lang.String.length:()I
            aload 4 /* percentPhrase */
            invokevirtual java.lang.String.length:()I
            isub
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 1 /* numberString */
        start local 1 // java.lang.String numberString
        15: .line 61
            aload 1 /* numberString */
            invokestatic java.lang.Long.parseLong:(Ljava/lang/String;)J
            lstore 2 /* number */
        16: .line 62
            goto 21
      StackMap locals: java.lang.String java.lang.String long java.lang.String int int java.lang.String[]
      StackMap stack: java.lang.NumberFormatException
        17: astore 8 /* e */
        start local 8 // java.lang.NumberFormatException e
        18: .line 63
            getstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 20
        19: .line 64
            getstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
            ldc "MaxResultBuffer property is badly formatted: {0}."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* input */
            aastore
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V
        20: .line 66
      StackMap locals: java.lang.NumberFormatException
      StackMap stack:
            aload 8 /* e */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* numberString */
            aastore
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.throwNewInvalidMaxResultBufferParameterException:(Ljava/lang/Throwable;[Ljava/lang/Object;)V
        end local 8 // java.lang.NumberFormatException e
        21: .line 68
      StackMap locals:
      StackMap stack:
            lload 2 /* number */
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.adjustMemoryPercentage:(J)J
            lreturn
        end local 4 // java.lang.String percentPhrase
        end local 1 // java.lang.String numberString
        22: .line 57
      StackMap locals: java.lang.String top long top int int java.lang.String[]
      StackMap stack:
            iinc 5 1
      StackMap locals:
      StackMap stack:
        23: iload 5
            iload 6
            if_icmplt 12
        24: .line 73
            aload 0 /* input */
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.getMultiplier:(Ljava/lang/String;)J
            lstore 4 /* multiplier */
        start local 4 // long multiplier
        25: .line 74
            aload 0 /* input */
            iconst_0
            aload 0 /* input */
            invokevirtual java.lang.String.length:()I
            iconst_1
            isub
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 1 /* numberString */
        start local 1 // java.lang.String numberString
        26: .line 77
            aload 1 /* numberString */
            invokestatic java.lang.Long.parseLong:(Ljava/lang/String;)J
            lstore 2 /* number */
        27: .line 78
            goto 32
      StackMap locals: java.lang.String java.lang.String long long
      StackMap stack: java.lang.NumberFormatException
        28: astore 6 /* e */
        start local 6 // java.lang.NumberFormatException e
        29: .line 79
            getstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 31
        30: .line 80
            getstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
            ldc "MaxResultBuffer property is badly formatted: {0}."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* input */
            aastore
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V
        31: .line 82
      StackMap locals: java.lang.NumberFormatException
      StackMap stack:
            aload 6 /* e */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* numberString */
            aastore
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.throwNewInvalidMaxResultBufferParameterException:(Ljava/lang/Throwable;[Ljava/lang/Object;)V
        end local 6 // java.lang.NumberFormatException e
        32: .line 84
      StackMap locals:
      StackMap stack:
            lload 2 /* number */
            lload 4 /* multiplier */
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.adjustMemory:(JJ)J
            lreturn
        end local 4 // long multiplier
        end local 2 // long number
        end local 1 // java.lang.String numberString
        end local 0 // java.lang.String input
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   33     0          input  Ljava/lang/String;
           15   22     1   numberString  Ljava/lang/String;
           26   33     1   numberString  Ljava/lang/String;
            1   33     2         number  J
            7   10     4              e  Ljava/lang/NumberFormatException;
           13   22     4  percentPhrase  Ljava/lang/String;
           18   21     8              e  Ljava/lang/NumberFormatException;
           25   33     4     multiplier  J
           29   32     6              e  Ljava/lang/NumberFormatException;
      Exception table:
        from    to  target  type
           4     5       6  Class java.lang.NumberFormatException
          15    16      17  Class java.lang.NumberFormatException
          26    27      28  Class java.lang.NumberFormatException
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
       Name  Flags
      input  

  private static void checkForNegativeValue(long);
    descriptor: (J)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=4, args_size=1
        start local 0 // long value
         0: .line 89
            lload 0 /* value */
            lconst_0
            lcmp
            ifgt 10
         1: .line 90
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            lload 0 /* value */
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            aastore
            astore 2 /* objectToThrow */
        start local 2 // java.lang.Object[] objectToThrow
         2: .line 91
            new java.text.MessageFormat
            dup
         3: .line 92
            ldc "R_maxResultBufferNegativeParameterValue"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
         4: .line 91
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 3 /* form */
        start local 3 // java.text.MessageFormat form
         5: .line 93
            getstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 9
         6: .line 94
            getstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
            ldc "R_maxResultBufferNegativeParameterValue"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
         7: .line 95
            aload 2 /* objectToThrow */
         8: .line 94
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V
         9: .line 97
      StackMap locals: java.lang.Object[] java.text.MessageFormat
      StackMap stack:
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 3 /* form */
            aload 2 /* objectToThrow */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            new java.lang.Throwable
            dup
            invokespecial java.lang.Throwable.<init>:()V
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.text.MessageFormat form
        end local 2 // java.lang.Object[] objectToThrow
        10: .line 99
      StackMap locals:
      StackMap stack:
            return
        end local 0 // long value
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   11     0          value  J
            2   10     2  objectToThrow  [Ljava/lang/Object;
            5   10     3           form  Ljava/text/MessageFormat;
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
       Name  Flags
      value  

  private static long getMultiplier(java.lang.String);
    descriptor: (Ljava/lang/String;)J
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=7, locals=3, args_size=1
        start local 0 // java.lang.String input
         0: .line 102
            lconst_1
            lstore 1 /* multiplier */
        start local 1 // long multiplier
         1: .line 103
            aload 0 /* input */
            aload 0 /* input */
            invokevirtual java.lang.String.length:()I
            iconst_1
            isub
            invokevirtual java.lang.String.charAt:(I)C
            invokestatic java.lang.Character.toUpperCase:(C)C
            lookupswitch { // 4
                   71: 6
                   75: 2
                   77: 4
                   84: 8
              default: 10
          }
         2: .line 105
      StackMap locals: long
      StackMap stack:
            ldc 1000
            lstore 1 /* multiplier */
         3: .line 106
            goto 13
         4: .line 108
      StackMap locals:
      StackMap stack:
            ldc 1000000
            lstore 1 /* multiplier */
         5: .line 109
            goto 13
         6: .line 111
      StackMap locals:
      StackMap stack:
            ldc 1000000000
            lstore 1 /* multiplier */
         7: .line 112
            goto 13
         8: .line 114
      StackMap locals:
      StackMap stack:
            ldc 1000000000000
            lstore 1 /* multiplier */
         9: .line 115
            goto 13
        10: .line 117
      StackMap locals:
      StackMap stack:
            getstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 12
        11: .line 118
            getstatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
            ldc "MaxResultBuffer property is badly formatted: {0}."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* input */
            aastore
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V
        12: .line 120
      StackMap locals:
      StackMap stack:
            aconst_null
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* input */
            aastore
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.throwNewInvalidMaxResultBufferParameterException:(Ljava/lang/Throwable;[Ljava/lang/Object;)V
        13: .line 122
      StackMap locals:
      StackMap stack:
            lload 1 /* multiplier */
            lreturn
        end local 1 // long multiplier
        end local 0 // java.lang.String input
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   14     0       input  Ljava/lang/String;
            1   14     1  multiplier  J
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
       Name  Flags
      input  

  private static long adjustMemoryPercentage(long);
    descriptor: (J)J
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // long percentage
         0: .line 126
            lload 0 /* percentage */
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.checkForNegativeValue:(J)V
         1: .line 127
            lload 0 /* percentage */
            ldc 90
            lcmp
            ifle 3
         2: .line 128
            ldc 0.9
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.getMaxMemory:()J
            l2d
            dmul
            d2l
            lreturn
         3: .line 130
      StackMap locals:
      StackMap stack:
            lload 0 /* percentage */
            l2d
            ldc 100.0
            ddiv
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.getMaxMemory:()J
            l2d
            dmul
            d2l
            lreturn
        end local 0 // long percentage
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0  percentage  J
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
            Name  Flags
      percentage  

  private static long adjustMemory(long, long);
    descriptor: (JJ)J
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=6, locals=4, args_size=2
        start local 0 // long size
        start local 2 // long multiplier
         0: .line 134
            lload 0 /* size */
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.checkForNegativeValue:(J)V
         1: .line 135
            lload 0 /* size */
            lload 2 /* multiplier */
            lmul
            l2d
            ldc 0.9
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.getMaxMemory:()J
            l2d
            dmul
            dcmpl
            ifle 3
         2: .line 136
            ldc 0.9
            invokestatic com.microsoft.sqlserver.jdbc.MaxResultBufferParser.getMaxMemory:()J
            l2d
            dmul
            d2l
            lreturn
         3: .line 138
      StackMap locals:
      StackMap stack:
            lload 0 /* size */
            lload 2 /* multiplier */
            lmul
            lreturn
        end local 2 // long multiplier
        end local 0 // long size
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        size  J
            0    4     2  multiplier  J
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
            Name  Flags
      size        
      multiplier  

  private static long getMaxMemory();
    descriptor: ()J
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 142
            invokestatic java.lang.management.ManagementFactory.getMemoryMXBean:()Ljava/lang/management/MemoryMXBean;
            invokeinterface java.lang.management.MemoryMXBean.getHeapMemoryUsage:()Ljava/lang/management/MemoryUsage;
            invokevirtual java.lang.management.MemoryUsage.getMax:()J
            lreturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private static void throwNewInvalidMaxResultBufferParameterException(java.lang.Throwable, java.lang.Object[]);
    descriptor: (Ljava/lang/Throwable;[Ljava/lang/Object;)V
    flags: (0x008a) ACC_PRIVATE, ACC_STATIC, ACC_VARARGS
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // java.lang.Throwable cause
        start local 1 // java.lang.Object[] arguments
         0: .line 147
            new java.text.MessageFormat
            dup
            ldc "R_maxResultBufferInvalidSyntax"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 2 /* form */
        start local 2 // java.text.MessageFormat form
         1: .line 148
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 2 /* form */
            aload 1 /* arguments */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aload 0 /* cause */
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.text.MessageFormat form
        end local 1 // java.lang.Object[] arguments
        end local 0 // java.lang.Throwable cause
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0      cause  Ljava/lang/Throwable;
            0    2     1  arguments  [Ljava/lang/Object;
            1    2     2       form  Ljava/text/MessageFormat;
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
           Name  Flags
      cause      
      arguments  
}
SourceFile: "MaxResultBufferParser.java"