method Base.<init>():void
{
	.src "entryHooks.java"
	.line 27
	.prologue_end
	.line 27
	    0| invoke-static/range {v2..v2}, Tracer.OnEntry(Base):void
	    3| move-object v0, v2
	.local v0, "this", Base
	    4| move-object v1, v0
	    5| invoke-direct {v1}, java.lang.Object.<init>():void
	    8| return-void
}

method Base.foo(int, java.lang.String):int
{
	.params "?", "?"
	.src "entryHooks.java"
	.line 31
	.prologue_end
	.line 31
	    0| invoke-static/range {v10..v12}, Tracer.OnEntry(Base, int, java.lang.String):void
	    3| move-object v0, v10
	.local v0, "this", Base
	    4| move v1, v11
	.local v1, "x", int
	    5| move-object v2, v12
	.local v2, "msg", java.lang.String
	    6| sget-object v3, java.lang.System.out
	    8| const-string v4, "Base.foo(%d, '%s')\n"
	   10| const/4 v5, #+2 (0x00000002 | 2.80260e-45)
	   11| new-array v5, v5, java.lang.Object[]
	   13| move-object v9, v5
	   14| move-object v5, v9
	   15| move-object v6, v9
	   16| const/4 v7, #+0 (0x00000000 | 0.00000)
	   17| move v8, v1
	   18| invoke-static {v8}, java.lang.Integer.valueOf(int):java.lang.Integer
	   21| move-result-object v8
	   22| aput-object v8, v6, v7
	   24| move-object v9, v5
	   25| move-object v5, v9
	   26| move-object v6, v9
	   27| const/4 v7, #+1 (0x00000001 | 1.40130e-45)
	   28| move-object v8, v2
	   29| aput-object v8, v6, v7
	   31| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
	   34| move-result-object v3
	.line 32
	   35| move v3, v1
	   36| move v0, v3
	.end_local v0
	   37| return v0
}

method Derived.<init>():void
{
	.src "entryHooks.java"
	.line 36
	.prologue_end
	.line 36
	    0| invoke-static/range {v2..v2}, Tracer.OnEntry(Derived):void
	    3| move-object v0, v2
	.local v0, "this", Derived
	    4| move-object v1, v0
	    5| invoke-direct {v1}, Base.<init>():void
	    8| return-void
}

method Derived.foo(int, java.lang.String):int
{
	.params "?", "?"
	.src "entryHooks.java"
	.line 40
	.prologue_end
	.line 40
	    0| invoke-static/range {v10..v12}, Tracer.OnEntry(Derived, int, java.lang.String):void
	    3| move-object v0, v10
	.local v0, "this", Derived
	    4| move v1, v11
	.local v1, "x", int
	    5| move-object v2, v12
	.local v2, "msg", java.lang.String
	    6| sget-object v3, java.lang.System.out
	    8| const-string v4, "Derived.foo(%d, '%s')\n"
	   10| const/4 v5, #+2 (0x00000002 | 2.80260e-45)
	   11| new-array v5, v5, java.lang.Object[]
	   13| move-object v9, v5
	   14| move-object v5, v9
	   15| move-object v6, v9
	   16| const/4 v7, #+0 (0x00000000 | 0.00000)
	   17| move v8, v1
	   18| invoke-static {v8}, java.lang.Integer.valueOf(int):java.lang.Integer
	   21| move-result-object v8
	   22| aput-object v8, v6, v7
	   24| move-object v9, v5
	   25| move-object v5, v9
	   26| move-object v6, v9
	   27| const/4 v7, #+1 (0x00000001 | 1.40130e-45)
	   28| move-object v8, v2
	   29| aput-object v8, v6, v7
	   31| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
	   34| move-result-object v3
	.line 41
	   35| move v3, v1
	   36| const/4 v4, #+2 (0x00000002 | 2.80260e-45)
	   37| mul-int/lit8 v3, v3, #+2 (0x00000002 | 2.80260e-45)
	   39| move v0, v3
	.end_local v0
	   40| return v0
}

method Target.<init>():void
{
	.src "entryHooks.java"
	.line 45
	.prologue_end
	.line 45
	    0| invoke-static/range {v2..v2}, Tracer.OnEntry(Target):void
	    3| move-object v0, v2
	.local v0, "this", Target
	    4| move-object v1, v0
	    5| invoke-direct {v1}, java.lang.Object.<init>():void
	    8| return-void
}

method Target.main(java.lang.String[]):void
{
	.params "?"
	.src "entryHooks.java"
	.line 51
	.prologue_end
	.line 51
	    0| invoke-static/range {v8..v8}, Tracer.OnEntry(java.lang.String[]):void
	    3| move-object v0, v8
	.local v0, "args", java.lang.String[]
	    4| sget-object v1, java.lang.System.out
	    6| const-string v2, "Hello, world!"
	    8| invoke-virtual {v1,v2}, java.io.PrintStream.println(java.lang.String):void
	.line 52
	   11| sget-object v1, java.lang.System.out
	   13| const-string v2, "final = %d\n"
	   15| const/4 v3, #+1 (0x00000001 | 1.40130e-45)
	   16| new-array v3, v3, java.lang.Object[]
	   18| move-object v7, v3
	   19| move-object v3, v7
	   20| move-object v4, v7
	   21| const/4 v5, #+0 (0x00000000 | 0.00000)
	   22| invoke-static {}, Target.test():int
	   25| move-result v6
	   26| invoke-static {v6}, java.lang.Integer.valueOf(int):java.lang.Integer
	   29| move-result-object v6
	   30| aput-object v6, v4, v5
	   32| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
	   35| move-result-object v1
	.line 53
	   36| sget-object v1, java.lang.System.out
	   38| const-string v2, "Good bye!"
	   40| invoke-virtual {v1,v2}, java.io.PrintStream.println(java.lang.String):void
	.line 54
	   43| return-void
}

method Target.test():int
{
	.src "entryHooks.java"
	.line 58
	.prologue_end
	.line 58
	    0| invoke-static/range {}, Tracer.OnEntry():void
	    3| new-instance v1, Target
	    5| move-object v4, v1
	    6| move-object v1, v4
	    7| move-object v2, v4
	    8| invoke-direct {v2}, Target.<init>():void
	   11| move-object v0, v1
	.line 59
	.local v0, "obj", Target
	   12| move-object v1, v0
	   13| new-instance v2, Derived
	   15| move-object v4, v2
	   16| move-object v2, v4
	   17| move-object v3, v4
	   18| invoke-direct {v3}, Derived.<init>():void
	   21| iput-object v2, v1, Target.test
	.line 60
	   23| move-object v1, v0
	   24| const/4 v2, #+3 (0x00000003 | 4.20390e-45)
	   25| const-string v3, "Testing..."
	   27| invoke-virtual {v1,v2,v3}, Target.foo(int, java.lang.String):int
	   30| move-result v1
	   31| move v0, v1
	.end_local v0
	   32| return v0
}

method Target.foo(int):int
{
	.params "?"
	.src "entryHooks.java"
	.line 74
	.prologue_end
	.line 74
	    0| invoke-static/range {v3..v4}, Tracer.OnEntry(Target, int):void
	    3| move-object v0, v3
	.local v0, "this", Target
	    4| move v1, v4
	.local v1, "x", int
	    5| const/4 v2, #+1 (0x00000001 | 1.40130e-45)
	    6| move v0, v2
	.end_local v0
	    7| return v0
}

method Target.foo(int, int):int
{
	.params "?", "?"
	.src "entryHooks.java"
	.line 75
	.prologue_end
	.line 75
	    0| invoke-static/range {v4..v6}, Tracer.OnEntry(Target, int, int):void
	    3| move-object v0, v4
	.local v0, "this", Target
	    4| move v1, v5
	.local v1, "x", int
	    5| move v2, v6
	.local v2, "y", int
	    6| const/4 v3, #+2 (0x00000002 | 2.80260e-45)
	    7| move v0, v3
	.end_local v0
	    8| return v0
}

method Target.foo(int, java.lang.String):int
{
	.params "?", "?"
	.src "entryHooks.java"
	.line 65
	.prologue_end
	.line 65
	    0| invoke-static/range {v9..v11}, Tracer.OnEntry(Target, int, java.lang.String):void
	    3| move-object v0, v9
	.local v0, "this", Target
	    4| move v1, v10
	.local v1, "x", int
	    5| move-object v2, v11
	.local v2, "msg", java.lang.String
	    6| const/4 v5, #+0 (0x00000000 | 0.00000)
	    7| move v3, v5
	.line 66
	.local v3, "sum", int
	    8| const/4 v5, #+0 (0x00000000 | 0.00000)
	    9| move v4, v5
Label_1:
	.local v4, "i", int
	   10| move v5, v4
	   11| move v6, v1
	   12| if-ge v5, v6, Label_2
	.line 68
	   14| move v5, v3
	   15| move-object v6, v0
	   16| iget-object v6, v6, Target.test
	   18| move v7, v4
	   19| move-object v8, v2
	   20| invoke-virtual {v6,v7,v8}, Base.foo(int, java.lang.String):int
	   23| move-result v6
	   24| add-int/2addr v5, v6
	   25| move v3, v5
	.line 66
	   26| add-int/lit8 v4, v4, #+1 (0x00000001 | 1.40130e-45)
	   28| goto/16 Label_1
Label_2:
	.line 70
	   30| move v5, v3
	   31| move v0, v5
	.end_local v0
	   32| return v0
}

method Target.foo(int, java.lang.String, java.lang.String):int
{
	.params "?", "?", "?"
	.src "entryHooks.java"
	.line 76
	.prologue_end
	.line 76
	    0| invoke-static/range {v5..v8}, Tracer.OnEntry(Target, int, java.lang.String, java.lang.String):void
	    3| move-object v0, v5
	.local v0, "this", Target
	    4| move v1, v6
	.local v1, "x", int
	    5| move-object v2, v7
	.local v2, "msg", java.lang.String
	    6| move-object v3, v8
	.local v3, "msg2", java.lang.String
	    7| const/4 v4, #+3 (0x00000003 | 4.20390e-45)
	    8| move v0, v4
	.end_local v0
	    9| return v0
}

method Target.foo(int, java.lang.String[]):int
{
	.params "?", "?"
	.src "entryHooks.java"
	.line 77
	.prologue_end
	.line 77
	    0| invoke-static/range {v4..v6}, Tracer.OnEntry(Target, int, java.lang.String[]):void
	    3| move-object v0, v4
	.local v0, "this", Target
	    4| move v1, v5
	.local v1, "x", int
	    5| move-object v2, v6
	.local v2, "msgs", java.lang.String[]
	    6| const/4 v3, #+4 (0x00000004 | 5.60519e-45)
	    7| move v0, v3
	.end_local v0
	    8| return v0
}

method Target.foo(int, java.lang.String[][]):java.lang.Integer
{
	.params "?", "?"
	.src "entryHooks.java"
	.line 78
	.prologue_end
	.line 78
	    0| invoke-static/range {v4..v6}, Tracer.OnEntry(Target, int, java.lang.String[][]):void
	    3| move-object v0, v4
	.local v0, "this", Target
	    4| move v1, v5
	.local v1, "x", int
	    5| move-object v2, v6
	.local v2, "msgs", java.lang.String[][]
	    6| const/4 v3, #+5 (0x00000005 | 7.00649e-45)
	    7| invoke-static {v3}, java.lang.Integer.valueOf(int):java.lang.Integer
	   10| move-result-object v3
	   11| move-object v0, v3
	.end_local v0
	   12| return-object v0
}

method Target.foo():void
{
	.src "entryHooks.java"
	.line 73
	.prologue_end
	.line 73
	    0| invoke-static/range {v0..v0}, Tracer.OnEntry(Target):void
	    3| return-void
}

method Tracer.<init>():void
{
	.src "entryHooks.java"
	.line 2
	.prologue_end
	.line 2
	    0| invoke-static/range {v2..v2}, Tracer.OnEntry(Tracer):void
	    3| move-object v0, v2
	.local v0, "this", Tracer
	    4| move-object v1, v0
	    5| invoke-direct {v1}, java.lang.Object.<init>():void
	    8| return-void
}

method Tracer.onEntry(java.lang.String):void
{
	.params "?"
	.src "entryHooks.java"
	.line 6
	.prologue_end
	.line 6
	    0| invoke-static/range {v5..v5}, Tracer.OnEntry(java.lang.String):void
	    3| move-object v0, v5
	.local v0, "methodName", java.lang.String
	    4| sget-object v1, java.lang.System.out
	    6| new-instance v2, java.lang.StringBuilder
	    8| move-object v4, v2
	    9| move-object v2, v4
	   10| move-object v3, v4
	   11| invoke-direct {v3}, java.lang.StringBuilder.<init>():void
	   14| const-string v3, "OnEntry("
	   16| invoke-virtual {v2,v3}, java.lang.StringBuilder.append(java.lang.String):java.lang.StringBuilder
	   19| move-result-object v2
	   20| move-object v3, v0
	   21| invoke-virtual {v2,v3}, java.lang.StringBuilder.append(java.lang.String):java.lang.StringBuilder
	   24| move-result-object v2
	   25| const-string v3, ")"
	   27| invoke-virtual {v2,v3}, java.lang.StringBuilder.append(java.lang.String):java.lang.StringBuilder
	   30| move-result-object v2
	   31| invoke-virtual {v2}, java.lang.StringBuilder.toString():java.lang.String
	   34| move-result-object v2
	   35| invoke-virtual {v1,v2}, java.io.PrintStream.println(java.lang.String):void
	.line 7
	   38| return-void
}

method Tracer.onFooEntry(Target, int, java.lang.String):void
{
	.params "?", "?", "?"
	.src "entryHooks.java"
	.line 11
	.prologue_end
	.line 11
	    0| invoke-static/range {v10..v12}, Tracer.OnEntry(Target, int, java.lang.String):void
	    3| move-object v0, v10
	.local v0, "__this", Target
	    4| move v1, v11
	.local v1, "x", int
	    5| move-object v2, v12
	.local v2, "msg", java.lang.String
	    6| sget-object v3, java.lang.System.out
	    8| const-string v4, ">>> onFooEntry(%s, %d, %s)\n"
	   10| const/4 v5, #+3 (0x00000003 | 4.20390e-45)
	   11| new-array v5, v5, java.lang.Object[]
	   13| move-object v9, v5
	   14| move-object v5, v9
	   15| move-object v6, v9
	   16| const/4 v7, #+0 (0x00000000 | 0.00000)
	   17| move-object v8, v0
	   18| aput-object v8, v6, v7
	   20| move-object v9, v5
	   21| move-object v5, v9
	   22| move-object v6, v9
	   23| const/4 v7, #+1 (0x00000001 | 1.40130e-45)
	   24| move v8, v1
	   25| invoke-static {v8}, java.lang.Integer.valueOf(int):java.lang.Integer
	   28| move-result-object v8
	   29| aput-object v8, v6, v7
	   31| move-object v9, v5
	   32| move-object v5, v9
	   33| move-object v6, v9
	   34| const/4 v7, #+2 (0x00000002 | 2.80260e-45)
	   35| move-object v8, v2
	   36| aput-object v8, v6, v7
	   38| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
	   41| move-result-object v3
	.line 12
	   42| return-void
}

method Tracer.onFooExit(int):int
{
	.params "?"
	.src "entryHooks.java"
	.line 16
	.prologue_end
	.line 16
	    0| invoke-static/range {v8..v8}, Tracer.OnEntry(int):void
	    3| move v0, v8
	.local v0, "retValue", int
	    4| sget-object v1, java.lang.System.out
	    6| const-string v2, ">>> onFooExit(%d)\n"
	    8| const/4 v3, #+1 (0x00000001 | 1.40130e-45)
	    9| new-array v3, v3, java.lang.Object[]
	   11| move-object v7, v3
	   12| move-object v3, v7
	   13| move-object v4, v7
	   14| const/4 v5, #+0 (0x00000000 | 0.00000)
	   15| move v6, v0
	   16| invoke-static {v6}, java.lang.Integer.valueOf(int):java.lang.Integer
	   19| move-result-object v6
	   20| aput-object v6, v4, v5
	   22| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
	   25| move-result-object v1
	.line 17
	   26| move v1, v0
	   27| const/16 v2, #+100 (0x00000064 | 1.40130e-43)
	   29| add-int/lit8 v1, v1, #+100 (0x00000064 | 1.40130e-43)
	   31| move v0, v1
	.end_local v0
	   32| return v0
}

method Tracer.wrapFoo(Base, int, java.lang.String):int
{
	.params "?", "?", "?"
	.src "entryHooks.java"
	.line 22
	.prologue_end
	.line 22
	    0| invoke-static/range {v10..v12}, Tracer.OnEntry(Base, int, java.lang.String):void
	    3| move-object v0, v10
	.local v0, "_this", Base
	    4| move v1, v11
	.local v1, "x", int
	    5| move-object v2, v12
	.local v2, "msg", java.lang.String
	    6| sget-object v3, java.lang.System.out
	    8| const-string v4, ">>> %s.test(%d, %s)\n"
	   10| const/4 v5, #+3 (0x00000003 | 4.20390e-45)
	   11| new-array v5, v5, java.lang.Object[]
	   13| move-object v9, v5
	   14| move-object v5, v9
	   15| move-object v6, v9
	   16| const/4 v7, #+0 (0x00000000 | 0.00000)
	   17| move-object v8, v0
	   18| invoke-virtual {v8}, java.lang.Object.getClass():java.lang.Class
	   21| move-result-object v8
	   22| invoke-virtual {v8}, java.lang.Class.getName():java.lang.String
	   25| move-result-object v8
	   26| aput-object v8, v6, v7
	   28| move-object v9, v5
	   29| move-object v5, v9
	   30| move-object v6, v9
	   31| const/4 v7, #+1 (0x00000001 | 1.40130e-45)
	   32| move v8, v1
	   33| invoke-static {v8}, java.lang.Integer.valueOf(int):java.lang.Integer
	   36| move-result-object v8
	   37| aput-object v8, v6, v7
	   39| move-object v9, v5
	   40| move-object v5, v9
	   41| move-object v6, v9
	   42| const/4 v7, #+2 (0x00000002 | 2.80260e-45)
	   43| move-object v8, v2
	   44| aput-object v8, v6, v7
	   46| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
	   49| move-result-object v3
	.line 23
	   50| move-object v3, v0
	   51| move v4, v1
	   52| move-object v5, v2
	   53| invoke-virtual {v3,v4,v5}, Base.foo(int, java.lang.String):int
	   56| move-result v3
	   57| const/16 v4, #+10 (0x0000000a | 1.40130e-44)
	   59| add-int/lit8 v3, v3, #+10 (0x0000000a | 1.40130e-44)
	   61| move v0, v3
	.end_local v0
	   62| return v0
}