diff --git a/Makefile b/Makefile index 237ba52..e2bbdf8 100644 --- a/Makefile +++ b/Makefile @@ -25,11 +25,14 @@ INPUT_REPORT := .run/p3-exe-info.tsv # reproduces the all-payload data baseline exactly. REGIONS := config/regions.tsv SYMBOLS := config/symbols.tsv +INVENTORY := config/function_inventory.tsv +EXTENTS := config/function_extents.tsv MATCH := tools/sf3_match +EXTENTS_TOOL := tools/sf3_extents CODE_OUT := build/code EXPECTED_SHA1 := e173426c157384ebf1b6caf8c6fea18a85a14af9 -.PHONY: all validate split assemble link binary code gate test check clean +.PHONY: all validate split assemble link binary code gate extents extents-verify test check clean all: binary @@ -84,12 +87,27 @@ gate: validate @"$(MATCH)" gate --exe "$(EXE)" --regions "$(REGIONS)" --symbols "$(SYMBOLS)" --out "$(CODE_OUT)" \ --expect-sha1 "$(EXPECTED_SHA1)" +# Function extents (Phase 7). `extents` regenerates the tracked table from the +# inventory; `extents-verify` re-derives it and requires every registered region +# to agree, so a region can never silently disagree with the derived extent. +extents: validate + @test -f "$(EXTENTS_TOOL)" + @test -f "$(INVENTORY)" + @"$(EXTENTS_TOOL)" scan --exe "$(EXE)" --inventory "$(INVENTORY)" --out "$(EXTENTS)" --force + +extents-verify: validate + @test -f "$(EXTENTS_TOOL)" + @test -f "$(INVENTORY)" + @test -f "$(EXTENTS)" + @"$(EXTENTS_TOOL)" verify --exe "$(EXE)" --inventory "$(INVENTORY)" \ + --extents "$(EXTENTS)" --regions "$(REGIONS)" + # Verification gates. `test` is synthetic-only and needs no game input; -# `check` adds the full-binary byte gate (which does). +# `check` adds the extents check and the full-binary byte gate (which do). test: @PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tools/tests -check: test gate +check: test extents-verify gate clean: @if test -e "$(BUILD)"; then \ diff --git a/config/function_extents.tsv b/config/function_extents.tsv new file mode 100644 index 0000000..c612ac3 --- /dev/null +++ b/config/function_extents.tsv @@ -0,0 +1,2884 @@ +# Syphon Filter 3 (USA) function extents. +# Columns: addressendsizenextgapgradeevidence. +# Grades: exact, fallthrough, indirect, escape, outside, runaway, +# contained, standalone. Addresses and sizes only; no bytes. +# A dash means the field does not apply (a non-function candidate). +# 'exact' is the only grade a match candidate should rely on; +# 'contained' is evidence a soft candidate is NOT a function start. +# Regenerate: ./tools/sf3_extents scan --exe '' \ +# --inventory config/function_inventory.tsv --out config/function_extents.tsv --force +0x80010010 0x8001029C 652 0x8001029C 0 exact term=jr_ra +0x8001029C 0x8001035C 192 0x8001035C 0 exact term=jr_ra +0x8001035C 0x80010418 188 0x80010418 0 exact term=jr_ra +0x80010418 0x80010444 44 0x80010444 0 exact term=jr_ra +0x80010444 0x80010654 528 0x80010654 0 exact term=jr_ra +0x80010654 0x80010698 68 0x80010698 0 exact term=jr_ra +0x80010698 0x8001072C 148 0x80010750 36 exact term=jr_ra +0x80010750 0x800107B4 100 0x800107B4 0 exact term=jr_ra +0x800107B4 0x80010810 92 0x80010810 0 exact term=jr_ra +0x80010810 0x8001084C 60 0x8001084C 0 exact term=jr_ra +0x8001084C 0x80010B14 712 0x80010B14 0 exact term=jr_ra +0x80010B14 0x80010C44 304 0x80010C44 0 exact term=jr_ra +0x80010C44 0x80010F30 748 0x80010F30 0 exact term=jr_ra +0x80010F30 0x80011084 340 0x80011084 0 exact term=jr_ra +0x80011084 0x800110E0 92 0x800110E0 0 exact term=jr_ra +0x800110E0 0x800111B0 208 0x800111B0 0 exact term=jr_ra +0x800111B0 0x80011284 212 0x80011384 256 exact term=jr_ra +0x8001132C - - - - standalone grades=ghidra +0x80011384 0x80011484 256 0x80011484 0 exact term=jr_ra +0x80011484 0x80011508 132 0x80011508 0 exact term=jr_ra +0x80011508 0x80012780 4728 0x80012780 0 exact term=jr_ra +0x80012780 0x8001278C 12 0x8001278C 0 exact term=jr_ra +0x8001278C 0x800127F0 100 0x800127F0 0 exact term=jr_ra +0x800127F0 0x8001281C 44 0x8001281C 0 exact term=jr_ra +0x8001281C 0x80012834 24 0x80012834 0 exact term=jr_ra +0x80012834 0x8001289C 104 0x8001289C 0 exact term=jr_ra +0x8001289C 0x800128E4 72 0x800128E4 0 exact term=jr_ra +0x800128E4 0x80012918 52 0x80012918 0 exact term=jr_ra +0x80012918 0x80012960 72 0x80012960 0 exact term=jr_ra +0x80012960 0x800129C8 104 0x800129C8 0 exact term=jr_ra +0x800129C8 0x80012A10 72 0x80012A10 0 exact term=jr_ra +0x80012A10 0x80012A48 56 0x80012A48 0 exact term=jr_ra +0x80012A48 0x80012A98 80 0x80012A98 0 exact term=jr_ra +0x80012A98 0x80012AE0 72 0x80012AE0 0 exact term=jr_ra +0x80012AE0 0x80012B20 64 0x80012B20 0 exact term=jr_ra +0x80012B20 0x80012B88 104 0x80012B88 0 exact term=jr_ra +0x80012B88 0x80012CFC 372 0x80012CFC 0 exact term=jr_ra +0x80012CFC 0x80012D54 88 0x80012D54 0 exact term=jr_ra +0x80012D54 0x80012D8C 56 0x80012D8C 0 exact term=jr_ra +0x80012D8C 0x80012DBC 48 0x80012DBC 0 exact term=jr_ra +0x80012DBC 0x80012DE8 44 0x80012DE8 0 exact term=jr_ra +0x80012DE8 0x80012E84 156 0x80012E84 0 exact term=jr_ra +0x80012E84 0x80012F24 160 0x80012F24 0 exact term=jr_ra +0x80012F24 0x80012F80 92 0x80012F80 0 exact term=jr_ra +0x80012F80 0x80013024 164 0x80013024 0 exact term=jr_ra +0x80013024 0x80013114 240 0x80013114 0 exact term=jr_ra +0x80013114 0x80013154 64 0x80013154 0 exact term=jr_ra +0x80013154 0x80013524 976 0x80013524 0 escape escape=branch@0x80013510->0x800135D0 +0x80013524 0x800137C8 676 0x800137C8 0 escape escape=j@0x8001347C->0x800135A4 +0x800137C8 0x800138CC 260 0x800138CC 0 exact term=jr_ra +0x800138CC 0x800139E4 280 0x800139E4 0 exact term=jr_ra +0x800138D8 - - - - contained inside=0x800138CC;grades=prologue +0x800139E4 0x80013AF0 268 0x80013AF0 0 exact term=jr_ra +0x80013AF0 0x80013B80 144 0x80013B80 0 exact term=jr_ra +0x80013B80 0x80013C88 264 0x80013C88 0 exact term=jr_ra +0x80013C88 0x80013C90 8 0x80013C90 0 exact term=jr_ra +0x80013C90 0x80013D04 116 0x80013D04 0 exact term=jr_ra +0x80013D04 0x80013D44 64 0x80013D44 0 exact term=jr_ra +0x80013D44 0x80014054 784 0x80014054 0 exact term=jr_ra +0x80014054 0x80014258 516 0x80014258 0 exact term=jr_ra +0x80014258 0x800142CC 116 0x800142F4 40 exact term=jr_ra +0x800142CC - - - - standalone grades=prologue +0x800142F4 0x80014FE8 3316 0x80014FE8 0 exact term=jr_ra +0x80014FE8 0x800150A0 184 0x800150A0 0 exact term=jr_ra +0x800150A0 0x800152AC 524 0x800152AC 0 exact term=jr_ra +0x800152AC 0x8001587C 1488 0x8001587C 0 exact term=jr_ra +0x800152B0 - - - - contained inside=0x800152AC;grades=prologue +0x8001587C 0x8001590C 144 0x8001590C 0 exact term=jr_ra +0x8001590C 0x80015950 68 0x80015950 0 exact term=jr_ra +0x80015950 0x80015A2C 220 0x80015A2C 0 exact term=jr_ra +0x80015A2C 0x80015B88 348 0x80015B88 0 exact term=jr_ra +0x80015B88 0x80015CC0 312 0x80015CC0 0 exact term=jr_ra +0x80015B8C - - - - contained inside=0x80015B88;grades=prologue +0x80015CC0 0x80015D50 144 0x80015D50 0 exact term=jr_ra +0x80015D50 0x80015DBC 108 0x80015DBC 0 exact term=jr_ra +0x80015DBC 0x80015FC8 524 0x80015FC8 0 exact term=jr_ra +0x80015FC8 0x800160E8 288 0x800160E8 0 exact term=jr_ra +0x800160E8 0x80016110 40 0x80016110 0 exact term=jr_ra +0x80016110 0x80016120 16 0x80016120 0 exact term=jr_ra +0x80016120 0x80016158 56 0x80016158 0 exact term=jr_ra +0x80016158 0x80016174 28 0x80016174 0 exact term=jr_ra +0x80016174 0x80016198 36 0x80016198 0 exact term=jr_ra +0x80016198 0x800161E0 72 0x800161E0 0 exact term=jr_ra +0x800161E0 0x80016224 68 0x80016224 0 exact term=jr_ra +0x80016224 0x80016268 68 0x80016268 0 exact term=jr_ra +0x80016268 0x800162B4 76 0x800162B4 0 exact term=jr_ra +0x800162B4 0x8001644C 408 0x8001644C 0 exact term=jr_ra +0x8001644C 0x800164EC 160 0x800164EC 0 exact term=jr_ra +0x800164EC 0x80016660 372 0x80016660 0 exact term=jr_ra +0x80016660 0x80016704 164 0x80016704 0 exact term=jr_ra +0x80016704 0x80016954 592 0x80016954 0 exact term=jr_ra +0x80016954 0x80016BD4 640 0x80016BD4 0 exact term=jr_ra +0x80016BD4 0x80016DCC 504 0x80016DCC 0 exact term=jr_ra +0x80016DCC 0x80016E24 88 0x80016E24 0 exact term=jr_ra +0x80016E24 0x80016E50 44 0x80016E50 0 exact term=jr_ra +0x80016E50 0x80016E68 24 0x80016E68 0 exact term=jr_ra +0x80016E68 0x80016F18 176 0x80016F18 0 exact term=jr_ra +0x80016F18 0x80016F80 104 0x80016F80 0 exact term=jr_ra +0x80016F80 0x8001701C 156 0x8001703C 32 exact term=jr_ra +0x80016F88 - - - - contained inside=0x80016F80;grades=prologue +0x8001703C 0x800170C0 132 0x800170C0 0 exact term=jr_ra +0x800170C0 0x80017108 72 0x80017108 0 exact term=jr_ra +0x80017108 0x800171D8 208 0x800171D8 0 exact term=jr_ra +0x800171D8 0x80017200 40 0x80017200 0 exact term=jr_ra +0x80017200 0x8001758C 908 0x8001758C 0 exact term=jr_ra +0x8001758C 0x8001761C 144 0x8001761C 0 exact term=jr_ra +0x8001761C 0x80017660 68 0x80017660 0 exact term=jr_ra +0x80017660 0x8001778C 300 0x8001778C 0 exact term=jr_ra +0x8001778C 0x800179B8 556 0x800179B8 0 exact term=jr_ra +0x800179B8 0x800179CC 20 0x800179CC 0 exact term=jr_ra +0x800179CC 0x800179D4 8 0x800179D4 0 exact term=jr_ra +0x800179D4 0x800179E0 12 0x800179E0 0 exact term=jr_ra +0x800179E0 0x80017A38 88 0x80017A38 0 exact term=jr_ra +0x80017A38 0x80017A80 72 0x80017A80 0 exact term=jr_ra +0x80017A80 0x80017AD4 84 0x80017AD4 0 exact term=jr_ra +0x80017AD4 0x80017AE8 20 0x80017AE8 0 exact term=jr_ra +0x80017AE8 0x80017AF8 16 0x80017AF8 0 exact term=jr_ra +0x80017AF8 0x80017B50 88 0x80017B50 0 exact term=jr_ra +0x80017B50 0x80017B98 72 0x80017B98 0 exact term=jr_ra +0x80017B98 0x80017C50 184 0x80017C50 0 exact term=jr_ra +0x80017C50 0x80017C60 16 0x80017C60 0 exact term=jr_ra +0x80017C60 0x80017C6C 12 0x80017C6C 0 exact term=jr_ra +0x80017C6C 0x80017D1C 176 0x80017D1C 0 exact term=jr_ra +0x80017D1C 0x80017D48 44 0x80017D48 0 exact term=jr_ra +0x80017D48 0x80017D88 64 0x80017D88 0 exact term=jr_ra +0x80017D88 0x80017DD0 72 0x80017DD0 0 exact term=jr_ra +0x80017DD0 0x80017DF0 32 0x80017DF0 0 exact term=jr_ra +0x80017DF0 0x80017E38 72 0x80017E38 0 exact term=jr_ra +0x80017E38 0x80017F7C 324 0x800180D8 348 exact term=jr_ra +0x80017F7C - - - - standalone grades=prologue +0x800180D8 0x80018210 312 0x80018210 0 exact term=jr_ra +0x80018210 0x80018264 84 0x80018284 32 exact term=jr_ra +0x80018284 0x800182D4 80 0x800182D4 0 exact term=jr_ra +0x800182D4 0x800182F4 32 0x800182F4 0 exact term=jr_ra +0x800182F4 0x80018384 144 0x80018384 0 exact term=jr_ra +0x80018384 0x800183B8 52 0x800183B8 0 exact term=jr_ra +0x800183B8 0x800183EC 52 0x800183EC 0 exact term=jr_ra +0x800183EC 0x80018458 108 0x80018458 0 exact term=jr_ra +0x80018458 0x80018560 264 0x80018560 0 exact term=jr_ra +0x80018560 0x80018728 456 0x80018728 0 exact term=jr_ra +0x80018728 0x8001896C 580 0x8001896C 0 exact term=jr_ra +0x8001896C 0x800189E8 124 0x800189E8 0 exact term=jr_ra +0x800189E8 0x80018CB0 712 0x80018CB0 0 exact term=jr_ra +0x80018CB0 0x80018D28 120 0x80018D28 0 exact term=jr_ra +0x80018D28 0x800192D8 1456 0x800192D8 0 exact term=jr_ra +0x800192D8 0x800194A8 464 0x800194A8 0 exact term=jr_ra +0x800194A8 0x800196B4 524 0x800196B4 0 exact term=jr_ra +0x800196B4 0x80019700 76 0x80019700 0 exact term=jr_ra +0x80019700 0x80019738 56 0x80019738 0 exact term=jr_ra +0x80019738 0x80019808 208 0x80019808 0 exact term=jr_ra +0x80019740 - - - - contained inside=0x80019738;grades=prologue +0x80019808 0x800198C0 184 0x800198C0 0 exact term=jr_ra +0x800198C0 0x800198F4 52 0x800198F4 0 exact term=jr_ra +0x800198F4 0x800199D0 220 0x800199D0 0 exact term=jr_ra +0x800199D0 0x80019B6C 412 0x80019B6C 0 exact term=jr_ra +0x80019B6C 0x80019B94 40 0x80019B94 0 exact term=jr_ra +0x80019B94 0x80019C04 112 0x80019C04 0 exact term=jr_ra +0x80019C04 0x80019C10 12 0x80019C10 0 exact term=jr_ra +0x80019C10 0x8001AA9C 3724 0x8001AA9C 0 exact term=jr_ra +0x8001AA9C 0x8001AAA8 12 0x8001AAA8 0 exact term=jr_ra +0x8001AAA8 0x8001AB24 124 0x8001AB24 0 exact term=jr_ra +0x8001AB24 0x8001AC10 236 0x8001AC10 0 exact term=jr_ra +0x8001AC10 0x8001ADC4 436 0x8001ADC4 0 exact term=jr_ra +0x8001ADC4 0x8001AE3C 120 0x8001AE3C 0 exact term=jr_ra +0x8001AE3C 0x8001AE50 20 0x8001AE50 0 exact term=jr_ra +0x8001AE50 0x8001B10C 700 0x8001B10C 0 exact term=jr_ra +0x8001B10C 0x8001B94C 2112 0x8001B94C 0 exact term=jr_ra +0x8001B94C 0x8001B994 72 0x8001B994 0 exact term=jr_ra +0x8001B994 0x8001BC50 700 0x8001BC50 0 exact term=jr_ra +0x8001BC50 0x8001C0B0 1120 0x8001C0B0 0 exact term=jr_ra +0x8001C0B0 0x8001C1EC 316 0x8001C1EC 0 exact term=jr_ra +0x8001C1EC 0x8001C434 584 0x8001C450 28 exact term=jr_ra +0x8001C450 0x8001C634 484 0x8001C634 0 exact term=jr_ra +0x8001C634 0x8001C8AC 632 0x8001C8AC 0 exact term=jr_ra +0x8001C8AC 0x8001CB38 652 0x8001CB3C 4 exact term=jr_ra +0x8001CB3C 0x8001CD9C 608 0x8001CDA0 4 exact term=jr_ra +0x8001CDA0 0x8001CE40 160 0x8001CE40 0 exact term=jr_ra +0x8001CE40 0x8001CE70 48 0x8001CE70 0 exact term=jr_ra +0x8001CE70 0x8001D7A0 2352 0x8001D7B0 16 exact term=jr_ra +0x8001D7B0 0x8001D98C 476 0x8001D98C 0 exact term=jr_ra +0x8001D98C 0x8001DB40 436 0x8001DB40 0 exact term=jr_ra +0x8001DB40 0x8001DC20 224 0x8001DC20 0 exact term=jr_ra +0x8001DC20 0x8001DC68 72 0x8001DC68 0 exact term=jr_ra +0x8001DC68 0x8001DD04 156 0x8001DD04 0 exact term=jr_ra +0x8001DD04 0x8001DECC 456 0x8001DECC 0 exact term=jr_ra +0x8001DD30 - - - - contained inside=0x8001DD04;grades=prologue +0x8001DDBC - - - - contained inside=0x8001DD04;grades=prologue +0x8001DECC 0x8001E07C 432 0x8001E07C 0 exact term=jr_ra +0x8001E07C 0x8001EAFC 2688 0x8001EAFC 0 escape escape=branch@0x8001E290->0x8001F868 +0x8001EAFC 0x8001EB08 12 0x8001F920 3608 exact term=tail_j:0x8001E9E4 +0x8001F4C0 - - - - standalone grades=ghidra +0x8001F920 0x8001F9BC 156 0x8001F9BC 0 exact term=jr_ra +0x8001F9BC 0x8001FAFC 320 0x8001FAFC 0 exact term=jr_ra +0x8001FAFC 0x8001FB90 148 0x8001FB90 0 exact term=jr_ra +0x8001FB90 0x8001FD30 416 0x8001FD38 8 exact term=jr_ra +0x8001FD38 0x8001FEB8 384 0x8001FECC 20 exact term=jr_ra +0x8001FECC 0x80020E6C 4000 0x80020E6C 0 exact term=jr_ra +0x80020E6C 0x80020F9C 304 0x80020F9C 0 exact term=jr_ra +0x80020F9C 0x800210A4 264 0x800210B0 12 exact term=jr_ra +0x800210B0 0x800213C8 792 0x800213C8 0 exact term=jr_ra +0x800213C8 0x80021588 448 0x80021588 0 exact term=jr_ra +0x80021588 0x80021B20 1432 0x80021B20 0 exact term=jr_ra +0x80021B20 0x80021BA8 136 0x80021BA8 0 exact term=jr_ra +0x80021BA8 0x80021C64 188 0x80021C64 0 exact term=jr_ra +0x80021BB0 - - - - contained inside=0x80021BA8;grades=prologue +0x80021C64 0x80021CDC 120 0x80021CDC 0 exact term=jr_ra +0x80021CDC 0x80021D90 180 0x80021D90 0 exact term=jr_ra +0x80021D90 0x80021E6C 220 0x80021E6C 0 exact term=jr_ra +0x80021E6C 0x80021F24 184 0x80021F24 0 exact term=jr_ra +0x80021E70 - - - - contained inside=0x80021E6C;grades=prologue +0x80021F24 0x80021F50 44 0x80021F50 0 exact term=jr_ra +0x80021F30 - - - - contained inside=0x80021F24;grades=prologue +0x80021F50 0x80021F64 20 0x80021F64 0 exact term=jr_ra +0x80021F64 0x80021F88 36 0x80021F88 0 exact term=jr_ra +0x80021F68 - - - - contained inside=0x80021F64;grades=prologue +0x80021F88 0x80021FA8 32 0x80021FA8 0 exact term=jr_ra +0x80021FA8 0x80021FF4 76 0x80021FF4 0 exact term=jr_ra +0x80021FF4 0x8002203C 72 0x8002203C 0 exact term=jr_ra +0x8002203C 0x800228D8 2204 0x800228D8 0 exact term=jr_ra +0x800228D8 0x80022A60 392 0x80022A60 0 exact term=jr_ra +0x80022A60 0x80022A98 56 0x80022A98 0 exact term=jr_ra +0x80022A98 0x80022BCC 308 0x80022BCC 0 exact term=jr_ra +0x80022BCC 0x80022E44 632 0x80022E44 0 indirect jr_reg=0x80022C00;lower_bound=0x80022D28 +0x80022D30 - - - - standalone grades=prologue +0x80022E44 0x80022E78 52 0x80022E78 0 exact term=jr_ra +0x80022E78 0x80022F20 168 0x80022F20 0 exact term=jr_ra +0x80022F20 0x80022FB8 152 0x80022FB8 0 exact term=jr_ra +0x80022FB8 0x80022FCC 20 0x80022FCC 0 exact term=jr_ra +0x80022FCC 0x80022FFC 48 0x80022FFC 0 exact term=jr_ra +0x80022FFC 0x80023080 132 0x80023080 0 exact term=jr_ra +0x80023080 0x800230E4 100 0x800230E4 0 exact term=jr_ra +0x800230E4 0x8002311C 56 0x8002311C 0 exact term=jr_ra +0x8002311C 0x800231BC 160 0x800231BC 0 exact term=jr_ra +0x800231BC 0x80023374 440 0x80023374 0 exact term=jr_ra +0x80023374 0x800235C0 588 0x800235C0 0 exact term=jr_ra +0x800235C0 0x800236F8 312 0x800236F8 0 exact term=jr_ra +0x800236F8 0x800237B4 188 0x800237B4 0 exact term=jr_ra +0x800237B4 0x800238BC 264 0x800238BC 0 exact term=jr_ra +0x800238BC 0x800239C4 264 0x800239C4 0 exact term=jr_ra +0x800239C4 0x80023A4C 136 0x80023A4C 0 exact term=jr_ra +0x80023A4C 0x80023AB0 100 0x80023AB0 0 exact term=jr_ra +0x80023AB0 0x80023BF4 324 0x80023BF4 0 exact term=jr_ra +0x80023BF4 0x80023CAC 184 0x80023CAC 0 exact term=jr_ra +0x80023CAC 0x80023D40 148 0x80023D40 0 exact term=jr_ra +0x80023D40 0x80023DA8 104 0x80023DA8 0 exact term=jr_ra +0x80023DA8 0x80024494 1772 0x80024494 0 exact term=jr_ra +0x80024494 0x800245D8 324 0x800245D8 0 exact term=jr_ra +0x800245D8 0x80024630 88 0x80024630 0 exact term=jr_ra +0x80024630 0x80024668 56 0x80024668 0 exact term=jr_ra +0x80024668 0x800247A4 316 0x800247A4 0 exact term=jr_ra +0x800247A4 0x80024838 148 0x80024838 0 exact term=jr_ra +0x80024838 0x80024894 92 0x80024894 0 exact term=jr_ra +0x80024894 0x8002497C 232 0x8002497C 0 exact term=jr_ra +0x8002497C 0x80024B28 428 0x80024B28 0 exact term=jr_ra +0x80024B28 0x80024C14 236 0x80024C14 0 exact term=jr_ra +0x80024C14 0x80024C34 32 0x80024C34 0 exact term=jr_ra +0x80024C34 0x80024E28 500 0x80024E28 0 exact term=jr_ra +0x80024E28 0x80024E80 88 0x80024E80 0 escape escape=branch@0x80024E40->0x80024E98 +0x80024E80 0x80024F6C 236 0x80024F6C 0 exact term=jr_ra +0x80024F6C 0x8002504C 224 0x80025070 36 exact term=jr_ra +0x8002504C - - - - standalone grades=prologue +0x80025070 0x800250AC 60 0x800250AC 0 exact term=jr_ra +0x800250AC 0x8002515C 176 0x8002515C 0 exact term=jr_ra +0x8002515C 0x80025198 60 0x80025198 0 exact term=jr_ra +0x80025198 0x800254B0 792 0x800254B0 0 exact term=jr_ra +0x800254B0 0x800254EC 60 0x800254EC 0 exact term=jr_ra +0x800254EC 0x800256F0 516 0x800256F0 0 exact term=jr_ra +0x800256F0 0x80025758 104 0x80025758 0 exact term=jr_ra +0x80025758 0x800257A8 80 0x800257A8 0 exact term=jr_ra +0x800257A8 0x800258D4 300 0x800258D4 0 exact term=jr_ra +0x800258D4 0x800259A0 204 0x800259A0 0 exact term=jr_ra +0x800259A0 0x800259DC 60 0x800259DC 0 exact term=jr_ra +0x800259DC 0x80025A2C 80 0x80025A2C 0 exact term=jr_ra +0x80025A2C 0x80025ADC 176 0x80025ADC 0 exact term=jr_ra +0x80025ADC 0x80025B64 136 0x80025B64 0 exact term=jr_ra +0x80025B64 0x80025D20 444 0x80025D20 0 exact term=jr_ra +0x80025D20 0x80025DC4 164 0x80025DC4 0 exact term=jr_ra +0x80025DC4 0x80025E54 144 0x80025E54 0 exact term=jr_ra +0x80025E54 0x80025EAC 88 0x80025EAC 0 exact term=jr_ra +0x80025EAC 0x80025F10 100 0x80025F10 0 exact term=jr_ra +0x80025F10 0x80025FE4 212 0x80025FE4 0 exact term=jr_ra +0x80025FE4 0x80026180 412 0x80026180 0 exact term=jr_ra +0x80026180 0x800261C0 64 0x800261C0 0 exact term=jr_ra +0x800261C0 0x8002622C 108 0x8002622C 0 exact term=jr_ra +0x8002622C 0x80026258 44 0x80026258 0 exact term=jr_ra +0x80026258 0x80026264 12 0x80026264 0 exact term=jr_ra +0x80026264 0x80026274 16 0x80026274 0 exact term=jr_ra +0x80026274 0x800262E0 108 0x800262E0 0 exact term=jr_ra +0x800262E0 0x800262EC 12 0x800262EC 0 exact term=jr_ra +0x800262EC 0x800262F8 12 0x800262F8 0 exact term=jr_ra +0x800262F8 0x80026304 12 0x80026304 0 exact term=jr_ra +0x80026304 0x800263A8 164 0x800263A8 0 exact term=jr_ra +0x800263A8 0x800263E8 64 0x800263E8 0 exact term=jr_ra +0x800263E8 0x80026460 120 0x80026460 0 exact term=jr_ra +0x80026460 0x800264C4 100 0x800264C4 0 exact term=jr_ra +0x800264C4 0x80026560 156 0x80026560 0 exact term=jr_ra +0x80026560 0x80026650 240 0x80026650 0 exact term=jr_ra +0x80026650 0x800266A8 88 0x800266A8 0 exact term=jr_ra +0x800266A8 0x800266EC 68 0x800266EC 0 exact term=jr_ra +0x800266EC 0x800267C0 212 0x800267C0 0 exact term=jr_ra +0x800267C0 0x800267CC 12 0x800267CC 0 exact term=jr_ra +0x800267CC 0x800268C4 248 0x800268C4 0 exact term=jr_ra +0x800267D0 - - - - contained inside=0x800267CC;grades=prologue +0x800268C4 0x800268F4 48 0x800268F4 0 exact term=jr_ra +0x800268F4 0x8002697C 136 0x8002697C 0 exact term=jr_ra +0x8002697C 0x80026A04 136 0x80026A04 0 exact term=jr_ra +0x80026A04 0x80026A9C 152 0x80026A9C 0 exact term=jr_ra +0x80026A9C 0x80026C2C 400 0x80026C2C 0 exact term=jr_ra +0x80026C2C 0x80026C7C 80 0x80026C7C 0 exact term=jr_ra +0x80026C7C 0x80026E10 404 0x80026E10 0 exact term=jr_ra +0x80026E10 0x80026E94 132 0x80026E94 0 exact term=jr_ra +0x80026E94 0x80026F14 128 0x80026F14 0 exact term=jr_ra +0x80026F14 0x80026F3C 40 0x800270D4 408 exact term=jr_ra +0x80026F3C - - - - standalone grades=prologue +0x8002705C - - - - standalone grades=prologue +0x800270D4 0x80027178 164 0x80027178 0 exact term=jr_ra +0x80027178 0x800272C8 336 0x800272C8 0 exact term=jr_ra +0x800272C8 0x80027430 360 0x80027430 0 exact term=jr_ra +0x80027430 0x8002753C 268 0x800275CC 144 exact term=jr_ra +0x8002753C - - - - standalone grades=prologue +0x800275CC 0x80027644 120 0x800276B0 108 exact term=jr_ra +0x80027644 - - - - standalone grades=prologue +0x800276B0 0x800276D4 36 0x800276D4 0 exact term=jr_ra +0x800276D4 0x80027744 112 0x80027744 0 exact term=jr_ra +0x80027744 0x800277AC 104 0x800277AC 0 exact term=jr_ra +0x800277AC 0x800278F8 332 0x800278F8 0 exact term=jr_ra +0x800278F8 0x800279E4 236 0x800279E4 0 exact term=jr_ra +0x800279E4 0x80027AB8 212 0x80027AB8 0 exact term=jr_ra +0x80027AB8 0x80027BE8 304 0x80027BE8 0 exact term=jr_ra +0x80027BE8 0x80027C44 92 0x80027C44 0 exact term=jr_ra +0x80027C44 0x80027CA0 92 0x80027CA0 0 exact term=jr_ra +0x80027CA0 0x80027D00 96 0x80027D00 0 exact term=jr_ra +0x80027D00 0x80027D88 136 0x80027D88 0 exact term=jr_ra +0x80027D88 0x80027E1C 148 0x80027E1C 0 exact term=jr_ra +0x80027E1C 0x80027ECC 176 0x80027ECC 0 exact term=jr_ra +0x80027ECC 0x80027FD4 264 0x80027FD4 0 exact term=jr_ra +0x80027FD4 0x800280DC 264 0x800280DC 0 exact term=jr_ra +0x800280DC 0x80028150 116 0x80028150 0 exact term=jr_ra +0x80028150 0x800281A4 84 0x800281A4 0 exact term=jr_ra +0x800281A4 0x800281E4 64 0x800281E4 0 exact term=jr_ra +0x800281E4 0x800282EC 264 0x800282EC 0 exact term=jr_ra +0x800282EC 0x80028344 88 0x80028344 0 exact term=jr_ra +0x80028344 0x800283F4 176 0x800283F4 0 exact term=jr_ra +0x800283F4 0x8002864C 600 0x8002864C 0 exact term=jr_ra +0x8002864C 0x80028698 76 0x80028698 0 exact term=jr_ra +0x80028698 0x80028750 184 0x80028750 0 exact term=jr_ra +0x80028750 0x80028844 244 0x80028844 0 exact term=jr_ra +0x80028844 0x800289B4 368 0x800289B4 0 exact term=jr_ra +0x800289B4 0x80028AD4 288 0x80028AD4 0 exact term=jr_ra +0x80028AD4 0x80028C34 352 0x80028C34 0 exact term=jr_ra +0x80028C34 0x80028CE0 172 0x80028CE0 0 exact term=jr_ra +0x80028CE0 0x80028DD4 244 0x80028DD4 0 exact term=jr_ra +0x80028DD4 0x80028F14 320 0x80029054 320 exact term=jr_ra +0x80029054 0x800290D0 124 0x800290D0 0 exact term=jr_ra +0x800290D0 0x800290F0 32 0x800290F0 0 exact term=jr_ra +0x800290F0 0x80029118 40 0x80029118 0 exact term=jr_ra +0x80029118 0x800292AC 404 0x800292AC 0 exact term=jr_ra +0x800292AC 0x800295D4 808 0x800295D4 0 exact term=jr_ra +0x800295D4 0x800297F4 544 0x800297F4 0 exact term=jr_ra +0x800297F4 0x800298C0 204 0x800298C0 0 exact term=jr_ra +0x800298C0 0x80029A48 392 0x80029A48 0 exact term=jr_ra +0x80029A48 0x80029C84 572 0x80029C84 0 exact term=jr_ra +0x80029C84 0x80029E88 516 0x80029E88 0 exact term=jr_ra +0x80029E88 0x80029ED8 80 0x80029ED8 0 exact term=jr_ra +0x80029ED8 0x80029FB8 224 0x80029FB8 0 exact term=jr_ra +0x80029FB8 0x8002A9D4 2588 0x8002A9D4 0 indirect jr_reg=0x8002A280;lower_bound=0x8002A9AC +0x8002A9D4 0x8002AA18 68 0x8002AAD8 192 exact term=jr_ra +0x8002AA18 - - - - standalone grades=prologue +0x8002AAD8 0x8002AC84 428 0x8002AC84 0 exact term=jr_ra +0x8002AAE0 - - - - contained inside=0x8002AAD8;grades=prologue +0x8002AC84 0x8002ACBC 56 0x8002ACBC 0 exact term=jr_ra +0x8002AC88 - - - - contained inside=0x8002AC84;grades=prologue +0x8002ACBC 0x8002AE80 452 0x8002AEAC 44 exact term=jr_ra +0x8002AE80 - - - - standalone grades=prologue +0x8002AEAC 0x8002B138 652 0x8002B138 0 exact term=jr_ra +0x8002B138 0x8002B608 1232 0x8002B608 0 exact term=jr_ra +0x8002B608 0x8002B924 796 0x8002B924 0 exact term=jr_ra +0x8002B924 0x8002BA50 300 0x8002BA50 0 exact term=jr_ra +0x8002BA50 0x8002BC20 464 0x8002BC20 0 exact term=jr_ra +0x8002BA54 - - - - contained inside=0x8002BA50;grades=prologue +0x8002BC20 0x8002BCE8 200 0x8002BCE8 0 exact term=jr_ra +0x8002BCE8 0x8002BD80 152 0x8002BD80 0 exact term=jr_ra +0x8002BD80 0x8002BE6C 236 0x8002BE6C 0 exact term=jr_ra +0x8002BE6C 0x8002C0D4 616 0x8002C22C 344 exact term=jr_ra +0x8002C22C 0x8002C30C 224 0x8002C30C 0 exact term=jr_ra +0x8002C30C 0x8002C3D0 196 0x8002C3F8 40 exact term=jr_ra +0x8002C314 - - - - contained inside=0x8002C30C;grades=prologue +0x8002C3D0 - - - - standalone grades=prologue +0x8002C3F8 0x8002C6EC 756 0x8002C6EC 0 indirect jr_reg=0x8002C488;lower_bound=0x8002C6EC +0x8002C6EC 0x8002C728 60 0x8002C728 0 exact term=jr_ra +0x8002C728 0x8002C764 60 0x8002C764 0 exact term=jr_ra +0x8002C72C - - - - contained inside=0x8002C728;grades=prologue +0x8002C764 0x8002C7BC 88 0x8002C7BC 0 exact term=jr_ra +0x8002C7BC 0x8002C7EC 48 0x8002C7EC 0 exact term=jr_ra +0x8002C7EC 0x8002C888 156 0x8002C888 0 exact term=jr_ra +0x8002C888 0x8002C894 12 0x8002C894 0 exact term=jr_ra +0x8002C894 0x8002C8A4 16 0x8002C930 140 exact term=jr_ra +0x8002C930 0x8002CB84 596 0x8002CB84 0 exact term=jr_ra +0x8002CB84 0x8002CC50 204 0x8002CC50 0 exact term=jr_ra +0x8002CC50 0x8002CD94 324 0x8002CD94 0 exact term=jr_ra +0x8002CD94 0x8002CED0 316 0x8002CED0 0 exact term=jr_ra +0x8002CD9C - - - - contained inside=0x8002CD94;grades=prologue +0x8002CED0 0x8002D014 324 0x8002D014 0 exact term=jr_ra +0x8002CED4 - - - - contained inside=0x8002CED0;grades=prologue +0x8002D014 0x8002D060 76 0x8002D060 0 exact term=jr_ra +0x8002D060 0x8002D0A8 72 0x8002D0A8 0 exact term=jr_ra +0x8002D0A8 0x8002D17C 212 0x8002D17C 0 exact term=jr_ra +0x8002D17C 0x8002D1F8 124 0x8002D1F8 0 exact term=jr_ra +0x8002D180 - - - - contained inside=0x8002D17C;grades=prologue +0x8002D1F8 0x8002D22C 52 0x8002D288 92 exact term=jr_ra +0x8002D22C - - - - standalone grades=prologue +0x8002D288 0x8002D2A0 24 0x8002D2A0 0 exact term=jr_ra +0x8002D2A0 0x8002D2BC 28 0x8002D2BC 0 exact term=jr_ra +0x8002D2BC 0x8002D2D4 24 0x8002D364 144 exact term=jr_ra +0x8002D2D4 - - - - standalone grades=prologue +0x8002D364 0x8002D3F4 144 0x8002D3F4 0 exact term=jr_ra +0x8002D3F4 0x8002D5C8 468 0x8002D5D0 8 exact term=jr_ra +0x8002D5D0 0x8002D608 56 0x8002D608 0 exact term=jr_ra +0x8002D608 0x8002D828 544 0x8002D828 0 exact term=jr_ra +0x8002D828 0x8002D9E0 440 0x8002D9E0 0 exact term=jr_ra +0x8002D82C - - - - contained inside=0x8002D828;grades=prologue +0x8002D9E0 0x8002DA48 104 0x8002DA48 0 exact term=jr_ra +0x8002DA48 0x8002DB40 248 0x8002DB40 0 exact term=jr_ra +0x8002DB40 0x8002DC5C 284 0x8002DCA8 76 exact term=jr_ra +0x8002DCA8 0x8002DD14 108 0x8002DD14 0 exact term=jr_ra +0x8002DD14 0x8002DE28 276 0x8002DE28 0 exact term=jr_ra +0x8002DE28 0x8002DEB4 140 0x8002DEB4 0 exact term=jr_ra +0x8002DEB4 0x8002DF1C 104 0x8002DF1C 0 exact term=jr_ra +0x8002DF1C 0x8002DF84 104 0x8002DF84 0 exact term=jr_ra +0x8002DF84 0x8002E028 164 0x8002E028 0 exact term=jr_ra +0x8002E028 0x8002E070 72 0x8002E070 0 exact term=jr_ra +0x8002E070 0x8002E0D8 104 0x8002E0D8 0 indirect jr_reg=0x8002E0BC;lower_bound=0x8002E0D8 +0x8002E0D8 0x8002E198 192 0x8002E198 0 exact term=jr_ra +0x8002E0E0 - - - - contained inside=0x8002E0D8;grades=prologue +0x8002E198 0x8002E24C 180 0x8002E24C 0 exact term=jr_ra +0x8002E24C 0x8002E3A8 348 0x8002E3A8 0 exact term=jr_ra +0x8002E254 - - - - contained inside=0x8002E24C;grades=prologue +0x8002E3A8 0x8002E3B8 16 0x8002E3FC 68 exact term=jr_ra +0x8002E3B8 - - - - standalone grades=prologue +0x8002E3FC 0x8002E44C 80 0x8002E44C 0 exact term=jr_ra +0x8002E44C 0x8002E4C8 124 0x8002E4C8 0 exact term=jr_ra +0x8002E454 - - - - contained inside=0x8002E44C;grades=prologue +0x8002E4C8 0x8002E4F0 40 0x8002E528 56 exact term=jr_ra +0x8002E4F8 - - - - standalone grades=prologue +0x8002E528 0x8002E7C4 668 0x8002E7C4 0 exact term=jr_ra +0x8002E530 - - - - contained inside=0x8002E528;grades=prologue +0x8002E7C4 0x8002E7E4 32 0x8002E870 140 exact term=jr_ra +0x8002E7E4 - - - - standalone grades=prologue +0x8002E870 0x8002E8EC 124 0x8002E8EC 0 exact term=jr_ra +0x8002E87C - - - - contained inside=0x8002E870;grades=prologue +0x8002E8EC 0x8002E968 124 0x8002E968 0 exact term=jr_ra +0x8002E968 0x8002E9AC 68 0x8002E9AC 0 exact term=jr_ra +0x8002E9AC 0x8002E9F4 72 0x8002E9F4 0 exact term=jr_ra +0x8002E9F4 0x8002EBC4 464 0x8002EBC4 0 exact term=jr_ra +0x8002E9FC - - - - contained inside=0x8002E9F4;grades=prologue +0x8002EBC4 0x8002EF54 912 0x8002EF54 0 exact term=jr_ra +0x8002EF54 0x8002F0D0 380 0x8002F0D0 0 exact term=jr_ra +0x8002F0D0 0x8002F118 72 0x8002F160 72 exact term=jr_ra +0x8002F160 0x8002F1A4 68 0x8002F1A4 0 exact term=jr_ra +0x8002F1A4 0x8002F1D8 52 0x8002F1D8 0 exact term=jr_ra +0x8002F1D8 0x8002F2EC 276 0x8002F2F8 12 exact term=jr_ra +0x8002F2F8 0x8002F300 8 0x8002F300 0 exact term=jr_ra +0x8002F300 0x8002F404 260 0x8002F404 0 exact term=jr_ra +0x8002F404 0x8002F450 76 0x8002F450 0 exact term=jr_ra +0x8002F450 0x8002FAB8 1640 0x8002FAB8 0 indirect jr_reg=0x8002F8A8;lower_bound=0x8002FAB8 +0x8002FAB8 0x8002FB54 156 0x8002FB54 0 exact term=jr_ra +0x8002FB54 0x8002FBC0 108 0x8002FBC0 0 exact term=jr_ra +0x8002FBC0 0x8002FCD0 272 0x8002FCD0 0 exact term=jr_ra +0x8002FCD0 0x8002FD4C 124 0x8002FD4C 0 exact term=jr_ra +0x8002FD4C 0x8002FDC8 124 0x8002FDC8 0 exact term=jr_ra +0x8002FDC8 0x8002FE3C 116 0x8002FE3C 0 exact term=jr_ra +0x8002FE3C 0x80030000 452 0x80030000 0 exact term=jr_ra +0x80030000 0x800301FC 508 0x800301FC 0 exact term=jr_ra +0x800301FC 0x8003022C 48 0x8003022C 0 exact term=jr_ra +0x8003022C 0x80030284 88 0x80030284 0 exact term=jr_ra +0x80030284 0x800302DC 88 0x800302DC 0 exact term=jr_ra +0x800302DC 0x80030358 124 0x80030358 0 exact term=jr_ra +0x80030358 0x80030390 56 0x80030390 0 exact term=jr_ra +0x80030390 0x80030414 132 0x80030414 0 exact term=jr_ra +0x80030414 0x800304D8 196 0x800304D8 0 exact term=jr_ra +0x800304D8 0x80030630 344 0x80030630 0 exact term=jr_ra +0x80030630 0x800307FC 460 0x800307FC 0 exact term=jr_ra +0x800307FC 0x80030858 92 0x80030858 0 exact term=jr_ra +0x80030858 0x800308C4 108 0x800308C4 0 exact term=jr_ra +0x800308C4 0x800309CC 264 0x800309CC 0 exact term=jr_ra +0x800309CC 0x80030B64 408 0x80030B64 0 exact term=jr_ra +0x80030B64 0x8003126C 1800 0x8003126C 0 exact term=jr_ra +0x8003126C 0x800313D8 364 0x800313D8 0 exact term=jr_ra +0x800313D8 0x80031684 684 0x80031684 0 exact term=jr_ra +0x80031684 0x800319F0 876 0x800319F0 0 exact term=jr_ra +0x800319F0 0x80031A48 88 0x80031A48 0 exact term=jr_ra +0x80031A48 0x80031B18 208 0x80031B18 0 exact term=jr_ra +0x80031B18 0x80031BBC 164 0x80031BBC 0 exact term=jr_ra +0x80031BBC 0x80031CC0 260 0x80031CC0 0 exact term=jr_ra +0x80031CC0 0x80031EBC 508 0x80031EBC 0 exact term=jr_ra +0x80031EBC 0x80031F2C 112 0x80031F2C 0 exact term=jr_ra +0x80031F2C 0x80031F78 76 0x80031F78 0 exact term=jr_ra +0x80031F78 0x80031FC4 76 0x80031FC4 0 exact term=jr_ra +0x80031FC4 0x800320D8 276 0x800320D8 0 exact term=jr_ra +0x800320D8 0x800321EC 276 0x800321EC 0 exact term=jr_ra +0x800321EC 0x800321F8 12 0x800321F8 0 exact term=jr_ra +0x800321F8 0x80032258 96 0x80032258 0 exact term=jr_ra +0x80032258 0x80032300 168 0x80032300 0 exact term=jr_ra +0x80032300 0x800323E4 228 0x800323E4 0 exact term=jr_ra +0x800323E4 0x800324B0 204 0x800324B0 0 exact term=jr_ra +0x800324B0 0x80032540 144 0x80032540 0 exact term=jr_ra +0x80032540 0x80033040 2816 0x80033040 0 indirect jr_reg=0x80032704;lower_bound=0x80033040 +0x80033040 0x800331D4 404 0x800331D4 0 exact term=jr_ra +0x800331D4 0x800335E8 1044 0x80033700 280 exact term=jr_ra +0x800335E8 - - - - standalone grades=prologue +0x80033700 0x80033ADC 988 0x80033ADC 0 exact term=jr_ra +0x80033ADC 0x80033DC8 748 0x80033DC8 0 exact term=jr_ra +0x80033DC8 0x80033F30 360 0x80033F30 0 exact term=jr_ra +0x80033F30 0x80034638 1800 0x80034638 0 exact term=jr_ra +0x80034638 0x80034A80 1096 0x80034A80 0 exact term=jr_ra +0x80034A80 0x80034ABC 60 0x80034ABC 0 exact term=jr_ra +0x80034ABC 0x80034E50 916 0x80034E50 0 exact term=jr_ra +0x80034E50 0x80034FCC 380 0x80034FCC 0 exact term=jr_ra +0x80034FCC 0x800354F8 1324 0x800354F8 0 exact term=jr_ra +0x800354F8 0x80035548 80 0x8003570C 452 exact term=jr_ra +0x80035548 - - - - standalone grades=prologue +0x8003570C 0x800357D4 200 0x800357D4 0 exact term=jr_ra +0x800357D4 0x80036134 2400 0x80036134 0 exact term=jr_ra +0x80036134 0x8003622C 248 0x80036278 76 exact term=jr_ra +0x8003622C - - - - standalone grades=prologue +0x80036278 0x80036308 144 0x80036308 0 exact term=jr_ra +0x80036308 0x80036328 32 0x80036328 0 exact term=jr_ra +0x80036328 0x8003636C 68 0x8003636C 0 exact term=jr_ra +0x8003636C 0x80036378 12 0x80036378 0 exact term=jr_ra +0x80036378 0x80036380 8 0x80036380 0 exact term=jr_ra +0x80036380 0x80036390 16 0x80036390 0 exact term=jr_ra +0x80036390 0x80036A0C 1660 0x80036A0C 0 exact term=jr_ra +0x80036A0C 0x80036A54 72 0x80036A54 0 exact term=jr_ra +0x80036A54 0x80036A9C 72 0x80036A9C 0 exact term=jr_ra +0x80036A9C 0x80036AD8 60 0x80036AD8 0 exact term=jr_ra +0x80036AD8 0x80036B14 60 0x80036B14 0 exact term=jr_ra +0x80036B14 0x80036DA4 656 0x80036DA4 0 exact term=jr_ra +0x80036DA4 0x80036F70 460 0x80036F70 0 exact term=jr_ra +0x80036F70 0x8003713C 460 0x8003713C 0 exact term=jr_ra +0x8003713C 0x800372A0 356 0x800372A0 0 indirect jr_reg=0x80037168;lower_bound=0x800372A0 +0x800372A0 0x800373C8 296 0x800373C8 0 exact term=jr_ra +0x800373C8 0x800374F8 304 0x800374F8 0 exact term=jr_ra +0x800374F8 0x80037684 396 0x8003768C 8 exact term=jr_ra +0x8003768C 0x800376CC 64 0x800376CC 0 exact term=jr_ra +0x800376CC 0x80037770 164 0x80037770 0 exact term=jr_ra +0x80037770 0x80037878 264 0x80037878 0 exact term=jr_ra +0x80037878 0x80037984 268 0x80037984 0 exact term=jr_ra +0x80037984 0x800379E0 92 0x800379E0 0 exact term=jr_ra +0x800379E0 0x80037A40 96 0x80037B98 344 exact term=jr_ra +0x80037A40 - - - - standalone grades=prologue +0x80037B44 - - - - standalone grades=prologue +0x80037B98 0x80037F94 1020 0x80037F94 0 exact term=jr_ra +0x80037F94 0x8003870C 1912 0x8003870C 0 exact term=jr_ra +0x8003870C 0x80038788 124 0x80038788 0 exact term=jr_ra +0x80038788 0x80038790 8 0x80038790 0 exact term=jr_ra +0x80038790 0x8003879C 12 0x8003879C 0 exact term=jr_ra +0x8003879C 0x80038BD4 1080 0x80038BD4 0 exact term=jr_ra +0x80038BD4 0x80038D48 372 0x80038D48 0 exact term=jr_ra +0x80038D48 0x80038DD8 144 0x80038DD8 0 exact term=jr_ra +0x80038DD8 0x80038F58 384 0x80038F58 0 exact term=jr_ra +0x80038F58 0x80039168 528 0x80039168 0 exact term=jr_ra +0x80039168 0x80039308 416 0x80039308 0 exact term=jr_ra +0x80039308 0x80039354 76 0x80039354 0 exact term=jr_ra +0x80039354 0x800393E0 140 0x800393E0 0 escape escape=branch@0x800393CC->0x80039408 +0x800393E0 0x80039534 340 0x80039534 0 exact term=jr_ra +0x80039534 0x8003993C 1032 0x80039AE4 424 exact term=jr_ra +0x8003993C - - - - standalone grades=prologue +0x800399E4 - - - - standalone grades=prologue +0x80039AE4 0x80039C18 308 0x8003A5F4 2524 exact term=jr_ra +0x80039C18 - - - - standalone grades=prologue +0x8003A5F4 0x8003A644 80 0x8003A644 0 exact term=jr_ra +0x8003A644 0x8003A6E0 156 0x8003A6E0 0 exact term=jr_ra +0x8003A6E0 0x8003A7F8 280 0x8003A7F8 0 exact term=jr_ra +0x8003A7F8 0x8003A9C8 464 0x8003A9C8 0 exact term=jr_ra +0x8003A9C8 0x8003AAB8 240 0x8003AAE8 48 exact term=jr_ra +0x8003AAE8 0x8003AB20 56 0x8003AB20 0 exact term=jr_ra +0x8003AB20 0x8003ABB4 148 0x8003ABB4 0 exact term=jr_ra +0x8003ABB4 0x8003AC00 76 0x8003B178 1400 exact term=jr_ra +0x8003AC00 - - - - standalone grades=prologue +0x8003AD70 - - - - standalone grades=prologue +0x8003B178 0x8003B284 268 0x8003B2F0 108 exact term=jr_ra +0x8003B2F0 0x8003B320 48 0x8003B320 0 exact term=jr_ra +0x8003B320 0x8003B34C 44 0x8003B34C 0 exact term=jr_ra +0x8003B34C 0x8003B488 316 0x8003C590 4360 exact term=jr_ra +0x8003B354 - - - - contained inside=0x8003B34C;grades=prologue +0x8003B488 - - - - standalone grades=prologue +0x8003C590 0x8003C7C0 560 0x8003C7C0 0 exact term=jr_ra +0x8003C7C0 0x8003CB3C 892 0x8003CB8C 80 exact term=jr_ra +0x8003CB3C - - - - standalone grades=prologue +0x8003CB64 - - - - standalone grades=prologue +0x8003CB8C 0x8003CBE4 88 0x8003CBE4 0 exact term=jr_ra +0x8003CBE4 0x8003D224 1600 0x8003D310 236 exact term=jr_ra +0x8003D224 - - - - standalone grades=prologue +0x8003D2A0 - - - - standalone grades=prologue +0x8003D310 0x8003D35C 76 0x8003D594 568 exact term=jr_ra +0x8003D4B8 - - - - standalone grades=prologue +0x8003D594 0x8003D708 372 0x8003DBE0 1240 exact term=jr_ra +0x8003D708 - - - - standalone grades=prologue +0x8003DBE0 0x8003DF80 928 0x8003EB18 2968 exact term=jr_ra +0x8003DF80 - - - - standalone grades=prologue +0x8003EA88 - - - - standalone grades=prologue +0x8003EB18 0x8003EB84 108 0x8003EBAC 40 exact term=jr_ra +0x8003EB84 - - - - standalone grades=prologue +0x8003EBAC 0x8003F010 1124 0x8003F010 0 exact term=jr_ra +0x8003F010 0x8003F190 384 0x8003F190 0 exact term=jr_ra +0x8003F190 0x8003F5BC 1068 0x8003F7CC 528 exact term=jr_ra +0x8003F5BC - - - - standalone grades=prologue +0x8003F700 - - - - standalone grades=prologue +0x8003F7CC 0x8003F9B8 492 0x8003F9B8 0 exact term=jr_ra +0x8003F9B8 0x8003FC28 624 0x8003FC78 80 exact term=jr_ra +0x8003FC78 0x8003FD00 136 0x8003FD00 0 exact term=jr_ra +0x8003FD00 0x80040884 2948 0x80040884 0 exact term=jr_ra +0x80040884 0x80040BFC 888 0x80041190 1428 exact term=jr_ra +0x80040E04 - - - - standalone grades=prologue +0x80041190 0x80041610 1152 0x80041610 0 exact term=jr_ra +0x80041610 0x80041688 120 0x80041688 0 exact term=jr_ra +0x80041688 0x800419D0 840 0x800419D0 0 exact term=jr_ra +0x800419D0 0x80041A24 84 0x80041A24 0 exact term=jr_ra +0x80041A24 0x80041A58 52 0x80041A58 0 exact term=jr_ra +0x80041A58 0x80041C00 424 0x80041DA0 416 exact term=jr_ra +0x80041DA0 0x80041FE4 580 0x80041FE4 0 exact term=jr_ra +0x80041DA8 - - - - contained inside=0x80041DA0;grades=prologue +0x80041FE4 0x80042088 164 0x80042088 0 exact term=jr_ra +0x80042088 0x80042090 8 0x80042138 168 exact term=jr_ra +0x80042090 - - - - standalone grades=prologue +0x80042138 0x800421BC 132 0x800421BC 0 exact term=jr_ra +0x800421BC 0x800422B8 252 0x80042964 1708 exact term=jr_ra +0x800422B8 - - - - standalone grades=prologue +0x8004247C - - - - standalone grades=prologue +0x800424EC - - - - standalone grades=prologue +0x80042964 0x800429B0 76 0x800429B0 0 exact term=jr_ra +0x8004296C - - - - contained inside=0x80042964;grades=prologue +0x800429B0 0x800429F0 64 0x80042A54 100 exact term=jr_ra +0x800429B8 - - - - contained inside=0x800429B0;grades=prologue +0x800429F0 - - - - standalone grades=prologue +0x80042A54 0x80042A90 60 0x80042A90 0 exact term=jr_ra +0x80042A90 0x80042BC0 304 0x80042CE0 288 exact term=jr_ra +0x80042BC0 - - - - standalone grades=prologue +0x80042CE0 0x80042D30 80 0x80042D64 52 exact term=jr_ra +0x80042D64 0x80042D88 36 0x80042D88 0 exact term=jr_ra +0x80042D88 0x80042DD4 76 0x80042DD4 0 exact term=jr_ra +0x80042DD4 0x80042E10 60 0x80042E10 0 exact term=jr_ra +0x80042E10 0x80042E68 88 0x80042E68 0 exact term=jr_ra +0x80042E68 0x80042EB4 76 0x80042FF0 316 exact term=jr_ra +0x80042EB4 - - - - standalone grades=prologue +0x80042FF0 0x8004331C 812 0x8004331C 0 escape escape=j@0x80042FB4->0x80043168 +0x8004331C 0x800433B0 148 0x800433B0 0 exact term=jr_ra +0x800433B0 0x80043404 84 0x80043404 0 escape escape=j@0x800433FC->0x80043448 +0x80043404 0x8004345C 88 0x8004345C 0 exact term=jr_ra +0x8004345C 0x80043554 248 0x80043554 0 exact term=jr_ra +0x80043554 0x800437CC 632 0x800437CC 0 exact term=jr_ra +0x800437CC 0x8004388C 192 0x8004388C 0 exact term=jr_ra +0x8004388C 0x800439D8 332 0x800439D8 0 exact term=jr_ra +0x800439D8 0x80043AE4 268 0x80043AE4 0 exact term=jr_ra +0x80043AE4 0x80043B80 156 0x80043B80 0 exact term=jr_ra +0x80043B80 0x80043D8C 524 0x80043D8C 0 exact term=jr_ra +0x80043D8C 0x80043DC4 56 0x80043DC4 0 exact term=jr_ra +0x80043DC4 0x80043E98 212 0x80043E98 0 exact term=jr_ra +0x80043E98 0x80044610 1912 0x80044610 0 exact term=jr_ra +0x80044610 0x800447B4 420 0x800447B4 0 exact term=jr_ra +0x800447B4 0x80044B90 988 0x80044B90 0 exact term=jr_ra +0x80044B90 0x80044C54 196 0x80044C54 0 exact term=jr_ra +0x80044C54 0x80044D20 204 0x80044D78 88 exact term=jr_ra +0x80044D78 0x80044F58 480 0x80044F58 0 exact term=jr_ra +0x80044F58 0x80044FA4 76 0x80044FA4 0 exact term=jr_ra +0x80044FA4 0x800450C4 288 0x800450C4 0 exact term=jr_ra +0x800450C4 0x80045110 76 0x80045110 0 exact term=jr_ra +0x80045110 0x80045230 288 0x80045230 0 exact term=jr_ra +0x80045230 0x80045388 344 0x80045388 0 exact term=jr_ra +0x80045388 0x800453C0 56 0x800453C0 0 exact term=jr_ra +0x800453C0 0x800453F8 56 0x800453F8 0 exact term=jr_ra +0x800453F8 0x800454C8 208 0x800454C8 0 exact term=jr_ra +0x800454C8 0x80045540 120 0x80045540 0 exact term=jr_ra +0x80045540 0x80045578 56 0x80045CA0 1832 exact term=jr_ra +0x800455CC - - - - standalone grades=prologue +0x80045748 - - - - standalone grades=prologue +0x80045948 - - - - standalone grades=prologue +0x80045A5C - - - - standalone grades=prologue +0x80045AC8 - - - - standalone grades=prologue +0x80045B6C - - - - standalone grades=prologue +0x80045CA0 0x80045D84 228 0x80045D84 0 exact term=jr_ra +0x80045CA8 - - - - contained inside=0x80045CA0;grades=prologue +0x80045D84 0x80045E48 196 0x80045E48 0 exact term=jr_ra +0x80045D8C - - - - contained inside=0x80045D84;grades=prologue +0x80045E48 0x80045F1C 212 0x80045F1C 0 exact term=jr_ra +0x80045F1C 0x80045FD8 188 0x80045FD8 0 exact term=jr_ra +0x80045FD8 0x80046050 120 0x800460AC 92 exact term=jr_ra +0x800460AC 0x800460D4 40 0x800460D4 0 exact term=jr_ra +0x800460D4 0x80046198 196 0x80046198 0 exact term=jr_ra +0x80046198 0x800461E8 80 0x800461E8 0 exact term=jr_ra +0x800461E8 0x80046278 144 0x80046278 0 exact term=jr_ra +0x80046278 0x80046348 208 0x80046348 0 exact term=jr_ra +0x80046348 0x800463F8 176 0x80046884 1164 exact term=jr_ra +0x800463F8 - - - - standalone grades=prologue +0x80046770 - - - - standalone grades=prologue +0x800467A4 - - - - standalone grades=prologue +0x80046884 0x80046A18 404 0x80046A18 0 exact term=jr_ra +0x8004688C - - - - contained inside=0x80046884;grades=prologue +0x80046A18 0x80046AD8 192 0x80046AD8 0 exact term=jr_ra +0x80046AD8 0x80046BCC 244 0x80046BCC 0 exact term=jr_ra +0x80046BCC 0x80046CCC 256 0x80046CCC 0 exact term=jr_ra +0x80046BD4 - - - - contained inside=0x80046BCC;grades=prologue +0x80046CCC 0x80046DBC 240 0x80046DBC 0 exact term=jr_ra +0x80046CD4 - - - - contained inside=0x80046CCC;grades=prologue +0x80046DBC 0x80046EE8 300 0x80046EE8 0 exact term=jr_ra +0x80046EE8 0x8004702C 324 0x8004702C 0 exact term=jr_ra +0x8004702C 0x80047190 356 0x80047190 0 exact term=jr_ra +0x80047190 0x800472E8 344 0x800472E8 0 exact term=jr_ra +0x800472E8 0x80047360 120 0x80047468 264 exact term=jr_ra +0x80047368 - - - - standalone grades=prologue +0x800473F4 - - - - standalone grades=prologue +0x80047468 0x800474B0 72 0x800474B0 0 exact term=jr_ra +0x800474B0 0x80047508 88 0x800475CC 196 exact term=jr_ra +0x800475CC 0x80047640 116 0x8004780C 460 exact term=jr_ra +0x80047640 - - - - standalone grades=prologue +0x8004780C 0x80047984 376 0x80047984 0 exact term=jr_ra +0x80047984 0x80047A14 144 0x80047A14 0 exact term=jr_ra +0x80047A14 0x80047DE0 972 0x80047DE0 0 exact term=jr_ra +0x80047DE0 0x80047F4C 364 0x80047F4C 0 exact term=jr_ra +0x80047F4C 0x80048128 476 0x80048128 0 exact term=jr_ra +0x80048128 0x80048180 88 0x80048180 0 exact term=jr_ra +0x80048180 0x8004820C 140 0x8004820C 0 exact term=jr_ra +0x8004820C 0x8004824C 64 0x80048350 260 exact term=jr_ra +0x8004824C - - - - standalone grades=prologue +0x8004832C - - - - standalone grades=prologue +0x80048350 0x80048394 68 0x8004857C 488 exact term=jr_ra +0x80048394 - - - - standalone grades=prologue +0x8004857C 0x800485E0 100 0x80048684 164 exact term=jr_ra +0x80048618 - - - - standalone grades=prologue +0x80048684 0x800489D8 852 0x800489D8 0 exact term=jr_ra +0x800489D8 0x80048B84 428 0x80048B84 0 exact term=jr_ra +0x800489E0 - - - - contained inside=0x800489D8;grades=prologue +0x80048B84 0x80048C20 156 0x80048DA8 392 exact term=jr_ra +0x80048C20 - - - - standalone grades=prologue +0x80048DA8 0x80048E20 120 0x80048E20 0 exact term=jr_ra +0x80048E20 0x80048E70 80 0x80048E70 0 exact term=jr_ra +0x80048E70 0x800491FC 908 0x800491FC 0 exact term=jr_ra +0x80048E78 - - - - contained inside=0x80048E70;grades=prologue +0x800491FC 0x80049298 156 0x80049298 0 exact term=jr_ra +0x80049298 0x800492E4 76 0x800496CC 1000 exact term=jr_ra +0x800496CC 0x8004970C 64 0x8004970C 0 exact term=jr_ra +0x8004970C 0x80049CB0 1444 0x80049CB0 0 indirect jr_reg=0x8004979C;lower_bound=0x80049CB0 +0x80049CB0 0x80049FE4 820 0x80049FE4 0 indirect jr_reg=0x80049D18;lower_bound=0x80049FE4 +0x80049FE4 0x8004A0E8 260 0x8004A0E8 0 exact term=jr_ra +0x8004A0E8 0x8004A1E0 248 0x8004A1E0 0 exact term=jr_ra +0x8004A1E0 0x8004A278 152 0x8004A278 0 exact term=jr_ra +0x8004A278 0x8004AAF0 2168 0x8004AAF0 0 exact term=jr_ra +0x8004AAF0 0x8004AC88 408 0x8004AC88 0 exact term=jr_ra +0x8004AC88 0x8004B438 1968 0x8004B438 0 exact term=jr_ra +0x8004B438 0x8004B64C 532 0x8004B64C 0 exact term=jr_ra +0x8004B64C 0x8004C000 2484 0x8004C000 0 escape escape=branch@0x8004BF6C->0x8004C02C +0x8004C000 0x8004C060 96 0x8004C060 0 exact term=jr_ra +0x8004C060 0x8004C090 48 0x8004C090 0 exact term=jr_ra +0x8004C090 0x8004C0AC 28 0x8004C0AC 0 exact term=jr_ra +0x8004C0AC 0x8004C0F0 68 0x8004C0F0 0 exact term=jr_ra +0x8004C0F0 0x8004C110 32 0x8004C3BC 684 exact term=jr_ra +0x8004C3BC 0x8004C400 68 0x8004C400 0 escape escape=branch@0x8004C3E4->0x8004C434 +0x8004C400 0x8004C708 776 0x8004C800 248 exact term=jr_ra +0x8004C800 0x8004CAD8 728 0x8004CEEC 1044 exact term=jr_ra +0x8004CAD8 - - - - standalone grades=prologue +0x8004CEEC 0x8004CF0C 32 0x8004CF0C 0 exact term=jr_ra +0x8004CF0C 0x8004D5CC 1728 0x8004D5CC 0 exact term=jr_ra +0x8004D5CC 0x8004D7C8 508 0x8004D7C8 0 exact term=jr_ra +0x8004D7C8 0x8004D8A4 220 0x8004D8A4 0 exact term=jr_ra +0x8004D8A4 0x8004DD74 1232 0x8004DD74 0 exact term=jr_ra +0x8004DD74 0x8004E24C 1240 0x8004E24C 0 exact term=jr_ra +0x8004DD7C - - - - contained inside=0x8004DD74;grades=prologue +0x8004E24C 0x8004E3FC 432 0x8004E3FC 0 exact term=jr_ra +0x8004E3FC 0x8004E440 68 0x8004ED90 2384 exact term=jr_ra +0x8004E440 - - - - standalone grades=prologue +0x8004EC04 - - - - standalone grades=prologue +0x8004ED90 0x8004F2F8 1384 0x8004F2F8 0 exact term=jr_ra +0x8004F2F8 0x8004FE38 2880 0x8004FE38 0 exact term=jr_ra +0x8004FE38 0x800501DC 932 0x800501DC 0 exact term=jr_ra +0x800501DC 0x80050494 696 0x800504E4 80 exact term=jr_ra +0x800504E4 0x80050548 100 0x80050548 0 exact term=jr_ra +0x80050548 0x80050604 188 0x80050604 0 exact term=jr_ra +0x80050604 0x80050674 112 0x80050674 0 exact term=jr_ra +0x80050674 0x800506E4 112 0x800506E4 0 exact term=jr_ra +0x800506E4 0x800507A0 188 0x800507A0 0 exact term=jr_ra +0x800507A0 0x8005085C 188 0x8005085C 0 exact term=jr_ra +0x8005085C 0x800508CC 112 0x800508CC 0 exact term=jr_ra +0x800508CC 0x80050998 204 0x80050998 0 exact term=jr_ra +0x80050998 0x80050BF4 604 0x80050BF4 0 exact term=jr_ra +0x80050BF4 0x80050CA8 180 0x80050CA8 0 exact term=jr_ra +0x80050CA8 0x80050D20 120 0x80050D48 40 exact term=jr_ra +0x80050D20 - - - - standalone grades=prologue +0x80050D48 0x80051628 2272 0x80051628 0 exact term=jr_ra +0x80051628 0x800516E0 184 0x800516E0 0 exact term=jr_ra +0x800516E0 0x800516FC 28 0x800516FC 0 exact term=jr_ra +0x800516FC 0x800517A0 164 0x800517A0 0 exact term=jr_ra +0x800517A0 0x8005182C 140 0x8005182C 0 exact term=jr_ra +0x8005182C 0x80051864 56 0x80051864 0 exact term=jr_ra +0x80051864 0x800518BC 88 0x800518BC 0 exact term=jr_ra +0x800518BC 0x80051914 88 0x80051914 0 exact term=jr_ra +0x80051914 0x800519A8 148 0x800519A8 0 exact term=jr_ra +0x8005191C - - - - contained inside=0x80051914;grades=prologue +0x800519A8 0x80051C4C 676 0x80051C4C 0 exact term=jr_ra +0x800519B0 - - - - contained inside=0x800519A8;grades=prologue +0x80051C4C 0x80051F50 772 0x80051F50 0 exact term=jr_ra +0x80051C54 - - - - contained inside=0x80051C4C;grades=prologue +0x80051F50 0x800520F0 416 0x800520F0 0 exact term=jr_ra +0x800520F0 0x800521E8 248 0x800521E8 0 exact term=jr_ra +0x800521E8 0x800522A8 192 0x800522A8 0 exact term=jr_ra +0x800522A8 0x80052424 380 0x80052424 0 exact term=jr_ra +0x80052424 0x8005260C 488 0x8005260C 0 exact term=jr_ra +0x8005260C 0x800526F0 228 0x800526F0 0 exact term=jr_ra +0x800526F0 0x800529A0 688 0x800529A0 0 exact term=jr_ra +0x800529A0 0x80052ABC 284 0x80052ABC 0 exact term=jr_ra +0x80052ABC 0x80052C98 476 0x80052C98 0 exact term=jr_ra +0x80052C98 0x80052CAC 20 0x80052CAC 0 exact term=jr_ra +0x80052CAC 0x80052FF4 840 0x80052FF4 0 exact term=jr_ra +0x80052FF4 0x80053064 112 0x80053064 0 exact term=jr_ra +0x80053064 0x80053954 2288 0x80053954 0 exact term=jr_ra +0x80053954 0x80054AF8 4516 0x80054AF8 0 exact term=jr_ra +0x80054AF8 0x80054BC4 204 0x80054BC4 0 exact term=jr_ra +0x80054BC4 0x80055108 1348 0x80055108 0 exact term=jr_ra +0x80055108 0x80055240 312 0x80055240 0 exact term=jr_ra +0x80055240 0x80055654 1044 0x80055654 0 exact term=jr_ra +0x80055654 0x800556E8 148 0x800556E8 0 exact term=jr_ra +0x800556E8 0x8005584C 356 0x8005584C 0 exact term=jr_ra +0x8005584C 0x800558BC 112 0x800558BC 0 exact term=jr_ra +0x800558BC 0x80055958 156 0x80055958 0 exact term=jr_ra +0x80055958 0x800559C4 108 0x800559C4 0 exact term=jr_ra +0x800559C4 0x80055B84 448 0x80055B84 0 exact term=jr_ra +0x80055B84 0x800564AC 2344 0x800564AC 0 exact term=jr_ra +0x800564AC 0x80056854 936 0x80056854 0 exact term=jr_ra +0x80056854 0x80056C88 1076 0x80056C88 0 exact term=jr_ra +0x80056C88 0x800571AC 1316 0x800571AC 0 exact term=jr_ra +0x800571AC 0x80057418 620 0x80057418 0 exact term=jr_ra +0x80057418 0x80057524 268 0x80057524 0 exact term=jr_ra +0x80057524 0x80057564 64 0x80057564 0 exact term=jr_ra +0x80057564 0x800575C4 96 0x800575C4 0 exact term=jr_ra +0x8005756C - - - - contained inside=0x80057564;grades=prologue +0x800575C4 0x80057664 160 0x80057664 0 exact term=jr_ra +0x80057664 0x80057748 228 0x80057748 0 exact term=jr_ra +0x80057748 0x80057798 80 0x80057798 0 exact term=jr_ra +0x80057798 0x800577E8 80 0x800577E8 0 exact term=jr_ra +0x800577E8 0x8005784C 100 0x8005784C 0 exact term=jr_ra +0x8005784C 0x8005789C 80 0x8005789C 0 exact term=jr_ra +0x8005789C 0x800578EC 80 0x800578EC 0 exact term=jr_ra +0x800578EC 0x80057950 100 0x80057950 0 exact term=jr_ra +0x80057950 0x800579A0 80 0x800579A0 0 exact term=jr_ra +0x800579A0 0x800579F0 80 0x800579F0 0 exact term=jr_ra +0x800579F0 0x80057A40 80 0x80057A40 0 exact term=jr_ra +0x80057A40 0x80057A90 80 0x80057AE0 80 exact term=jr_ra +0x80057AE0 0x80057B30 80 0x80057B30 0 exact term=jr_ra +0x80057B30 0x80057B84 84 0x80057B84 0 exact term=jr_ra +0x80057B84 0x80057BE8 100 0x80057BE8 0 exact term=jr_ra +0x80057BE8 0x80057C30 72 0x80057C30 0 exact term=jr_ra +0x80057C30 0x80057C80 80 0x80057C80 0 exact term=jr_ra +0x80057C80 0x80057CD0 80 0x80057CD0 0 exact term=jr_ra +0x80057CD0 0x80057DFC 300 0x80057DFC 0 exact term=jr_ra +0x80057DFC 0x80057E04 8 0x80057E04 0 exact term=jr_ra +0x80057E04 0x80057E7C 120 0x80057E7C 0 exact term=jr_ra +0x80057E7C 0x80057F08 140 0x80057F08 0 exact term=jr_ra +0x80057F08 0x80057F84 124 0x80057F84 0 exact term=jr_ra +0x80057F84 0x80058058 212 0x80058058 0 exact term=jr_ra +0x80058058 0x800580E4 140 0x800580E4 0 exact term=jr_ra +0x800580E4 0x80058190 172 0x80058190 0 exact term=jr_ra +0x80058190 0x80058230 160 0x80058230 0 exact term=jr_ra +0x80058230 0x80058288 88 0x80058288 0 exact term=jr_ra +0x80058288 0x800582AC 36 0x800582AC 0 exact term=jr_ra +0x800582AC 0x800582EC 64 0x800582EC 0 exact term=jr_ra +0x800582EC 0x80058424 312 0x80058424 0 exact term=jr_ra +0x80058424 0x80058524 256 0x80058524 0 exact term=jr_ra +0x80058524 0x80058608 228 0x80058608 0 exact term=jr_ra +0x80058608 0x800589E8 992 0x800589E8 0 exact term=jr_ra +0x800589E8 0x80058AA8 192 0x80058AA8 0 exact term=jr_ra +0x80058AA8 0x80058BA0 248 0x80058BA0 0 exact term=jr_ra +0x80058BA0 0x80058C10 112 0x80058C10 0 exact term=jr_ra +0x80058C10 0x80058CE8 216 0x80058CE8 0 exact term=jr_ra +0x80058CE8 0x80058DEC 260 0x80058DEC 0 exact term=jr_ra +0x80058DEC 0x80058EE4 248 0x80058EE4 0 exact term=jr_ra +0x80058EE4 0x80058FEC 264 0x800590D8 236 exact term=jr_ra +0x80058FEC - - - - standalone grades=prologue +0x800590D8 0x800592A4 460 0x800592A4 0 exact term=jr_ra +0x800592A4 0x8005934C 168 0x8005934C 0 exact term=jr_ra +0x8005934C 0x800593D0 132 0x800593D0 0 exact term=jr_ra +0x800593D0 0x80059504 308 0x80059504 0 exact term=jr_ra +0x80059504 0x80059730 556 0x80059730 0 exact term=jr_ra +0x80059730 0x80059AF0 960 0x80059AF0 0 exact term=jr_ra +0x80059AF0 0x80059DF8 776 0x80059DF8 0 exact term=jr_ra +0x80059DF8 0x80059FDC 484 0x80059FDC 0 exact term=jr_ra +0x80059FDC 0x8005A33C 864 0x8005A33C 0 exact term=jr_ra +0x8005A33C 0x8005A474 312 0x8005A474 0 exact term=jr_ra +0x8005A474 0x8005A5A4 304 0x8005A5A4 0 exact term=jr_ra +0x8005A5A4 0x8005A6D4 304 0x8005A6D4 0 exact term=jr_ra +0x8005A6D4 0x8005A78C 184 0x8005A78C 0 exact term=jr_ra +0x8005A78C 0x8005A81C 144 0x8005A81C 0 exact term=jr_ra +0x8005A81C 0x8005A8E8 204 0x8005A8E8 0 exact term=jr_ra +0x8005A8E8 0x8005AD44 1116 0x8005AD44 0 exact term=jr_ra +0x8005AD44 0x8005AE54 272 0x8005AE54 0 exact term=jr_ra +0x8005AE54 0x8005B638 2020 0x8005B638 0 exact term=jr_ra +0x8005B638 0x8005BB70 1336 0x8005BB70 0 indirect jr_reg=0x8005B8A8;lower_bound=0x8005BB70 +0x8005BB70 0x8005BE3C 716 0x8005BE3C 0 indirect jr_reg=0x8005BBE8;lower_bound=0x8005BE3C +0x8005BE3C 0x8005BF44 264 0x8005BF44 0 exact term=jr_ra +0x8005BF44 0x8005BFD0 140 0x8005BFD0 0 exact term=jr_ra +0x8005BFD0 0x8005C508 1336 0x8005C508 0 exact term=jr_ra +0x8005C508 0x8005CA30 1320 0x8005CA30 0 exact term=jr_ra +0x8005CA30 0x8005CDA0 880 0x8005CDA0 0 exact term=jr_ra +0x8005CDA0 0x8005D1B0 1040 0x8005D1B0 0 exact term=jr_ra +0x8005D1B0 0x8005D4C4 788 0x8005D4C4 0 exact term=jr_ra +0x8005D4C4 0x8005D620 348 0x8005D620 0 exact term=jr_ra +0x8005D620 0x8005D7A0 384 0x8005D7A0 0 exact term=jr_ra +0x8005D7A0 0x8005DC60 1216 0x8005DC60 0 indirect jr_reg=0x8005DB7C;lower_bound=0x8005DC60 +0x8005DC60 0x8005DDD0 368 0x8005DDD0 0 indirect jr_reg=0x8005DD5C;lower_bound=0x8005DDD0 +0x8005DDD0 0x8005DEF8 296 0x8005DEF8 0 exact term=jr_ra +0x8005DEF8 0x8005DF74 124 0x8005DF74 0 exact term=jr_ra +0x8005DF74 0x8005E070 252 0x8005E070 0 exact term=jr_ra +0x8005E070 0x8005E17C 268 0x8005E17C 0 exact term=jr_ra +0x8005E17C 0x8005E1E4 104 0x8005E1E4 0 exact term=jr_ra +0x8005E1E4 0x8005E29C 184 0x8005E29C 0 exact term=jr_ra +0x8005E29C 0x8005E340 164 0x8005E340 0 exact term=jr_ra +0x8005E340 0x8005E3D0 144 0x8005E3D0 0 exact term=jr_ra +0x8005E3D0 0x8005E3F4 36 0x8005E3F4 0 exact term=jr_ra +0x8005E3F4 0x8005E538 324 0x8005E538 0 exact term=jr_ra +0x8005E538 0x8005E590 88 0x8005E590 0 exact term=jr_ra +0x8005E590 0x8005E63C 172 0x8005E63C 0 exact term=jr_ra +0x8005E63C 0x8005E79C 352 0x8005E79C 0 exact term=jr_ra +0x8005E79C 0x8005E820 132 0x8005E820 0 exact term=jr_ra +0x8005E820 0x8005E8B8 152 0x8005E8B8 0 exact term=jr_ra +0x8005E8B8 0x8005ED6C 1204 0x8005ED6C 0 exact term=jr_ra +0x8005ED6C 0x8005EDBC 80 0x80062D10 16212 exact term=jr_ra +0x8005EDBC - - - - standalone grades=ghidra,prologue +0x8005F518 - - - - standalone grades=ghidra,prologue +0x8005F7A4 - - - - standalone grades=prologue +0x80060000 - - - - standalone grades=prologue +0x8006089C - - - - standalone grades=prologue +0x80060C70 - - - - standalone grades=prologue +0x80061780 - - - - standalone grades=prologue +0x80061D4C - - - - standalone grades=prologue +0x80062660 - - - - standalone grades=prologue +0x800626C0 - - - - standalone grades=prologue +0x80062740 - - - - standalone grades=prologue +0x80062B00 - - - - standalone grades=prologue +0x80062D10 0x80062E14 260 0x80062E14 0 exact term=jr_ra +0x80062E14 0x80063060 588 0x80063060 0 exact term=jr_ra +0x80063060 0x800630F0 144 0x800630F0 0 exact term=jr_ra +0x800630F0 0x80063224 308 0x80063224 0 exact term=jr_ra +0x80063224 0x80063358 308 0x80063358 0 exact term=jr_ra +0x80063358 0x800637DC 1156 0x800637DC 0 exact term=jr_ra +0x800637DC 0x80063870 148 0x80063870 0 exact term=jr_ra +0x80063870 0x80063900 144 0x80063900 0 exact term=jr_ra +0x80063900 0x80063B2C 556 0x80063B2C 0 exact term=jr_ra +0x80063B2C 0x80064230 1796 0x80064230 0 exact term=jr_ra +0x80064230 0x800645CC 924 0x800645CC 0 exact term=jr_ra +0x800645CC 0x80064664 152 0x80064664 0 exact term=jr_ra +0x80064664 0x80064858 500 0x80064858 0 exact term=jr_ra +0x80064858 0x8006496C 276 0x8006496C 0 exact term=jr_ra +0x8006496C 0x80064B4C 480 0x80064B4C 0 exact term=jr_ra +0x80064B4C 0x80064D2C 480 0x80064D2C 0 exact term=jr_ra +0x80064D2C 0x800652A0 1396 0x800652A0 0 exact term=jr_ra +0x80064D3C - - - - contained inside=0x80064D2C;grades=prologue +0x800652A0 0x80065494 500 0x80065494 0 exact term=jr_ra +0x80065494 0x800654E4 80 0x800654E4 0 exact term=jr_ra +0x800654E4 0x800655A8 196 0x800655A8 0 exact term=jr_ra +0x800655A8 0x80065670 200 0x80065670 0 exact term=jr_ra +0x80065670 0x80065700 144 0x80065700 0 exact term=jr_ra +0x80065700 0x80065794 148 0x80065794 0 exact term=jr_ra +0x80065794 0x800658FC 360 0x800658FC 0 exact term=jr_ra +0x800658FC 0x80065930 52 0x80065930 0 exact term=jr_ra +0x80065930 0x80065980 80 0x80065980 0 exact term=jr_ra +0x80065980 0x80065B6C 492 0x80065B6C 0 exact term=jr_ra +0x80065988 - - - - contained inside=0x80065980;grades=prologue +0x80065B6C 0x80065B8C 32 0x80065B8C 0 exact term=jr_ra +0x80065B8C 0x80065C34 168 0x80065C34 0 exact term=jr_ra +0x80065C34 0x80065D1C 232 0x80065D1C 0 exact term=jr_ra +0x80065D1C 0x80065E10 244 0x80065E10 0 exact term=jr_ra +0x80065E10 0x8006606C 604 0x8006606C 0 exact term=jr_ra +0x80065E18 - - - - contained inside=0x80065E10;grades=prologue +0x8006606C 0x80066208 412 0x80066208 0 exact term=jr_ra +0x80066208 0x80066738 1328 0x80066738 0 exact term=jr_ra +0x80066738 0x800667DC 164 0x800667DC 0 exact term=jr_ra +0x800667DC 0x800668A8 204 0x800668A8 0 exact term=jr_ra +0x800668A8 0x800668F0 72 0x800668F0 0 exact term=jr_ra +0x800668F0 0x80066DA0 1200 0x80066DA0 0 exact term=jr_ra +0x800668F8 - - - - contained inside=0x800668F0;grades=prologue +0x80066DA0 0x80066E2C 140 0x80066E2C 0 exact term=jr_ra +0x80066E2C 0x80066E58 44 0x80066E58 0 exact term=jr_ra +0x80066E58 0x80067D34 3804 0x80067D34 0 exact term=jr_ra +0x80067D34 0x80067E70 316 0x80067E70 0 exact term=jr_ra +0x80067E70 0x80068078 520 0x80068078 0 exact term=jr_ra +0x80068078 0x800681A4 300 0x800681A4 0 exact term=jr_ra +0x800681A4 0x800681E0 60 0x800681E0 0 exact term=jr_ra +0x800681E0 0x8006821C 60 0x8006821C 0 exact term=jr_ra +0x8006821C 0x800682F0 212 0x800682F0 0 exact term=jr_ra +0x800682F0 0x800683B0 192 0x800683B0 0 exact term=jr_ra +0x800683B0 0x800683E4 52 0x800683E4 0 exact term=jr_ra +0x800683E4 0x80068470 140 0x80068470 0 exact term=jr_ra +0x80068470 0x8006848C 28 0x80068754 712 exact term=jr_ra +0x8006848C - - - - standalone grades=prologue +0x80068754 0x80068874 288 0x80068874 0 exact term=jr_ra +0x80068874 0x80068910 156 0x80068910 0 exact term=jr_ra +0x80068910 0x800689DC 204 0x800689DC 0 exact term=jr_ra +0x800689DC 0x80068A64 136 0x80068A64 0 exact term=jr_ra +0x80068A64 0x80068D54 752 0x80068D54 0 indirect jr_reg=0x80068AB4;lower_bound=0x80068D54 +0x80068D54 0x80068D78 36 0x80068D78 0 exact term=jr_ra +0x80068D78 0x80068F40 456 0x80068F40 0 exact term=jr_ra +0x80068F40 0x80068F6C 44 0x80068F6C 0 exact term=jr_ra +0x80068F6C 0x80068F98 44 0x80068F98 0 exact term=jr_ra +0x80068F98 0x80068FA8 16 0x80068FA8 0 exact term=jr_ra +0x80068FA8 0x80069034 140 0x80069034 0 exact term=jr_ra +0x80069034 0x800690E4 176 0x800690E4 0 exact term=jr_ra +0x800690E4 0x80069128 68 0x80069128 0 exact term=jr_ra +0x80069128 0x80069398 624 0x80069398 0 exact term=jr_ra +0x80069398 0x80069580 488 0x80069580 0 exact term=jr_ra +0x80069580 0x800695D8 88 0x800695D8 0 exact term=jr_ra +0x800695D8 0x800697A4 460 0x800697A4 0 exact term=jr_ra +0x800697A4 0x800697C4 32 0x800697C4 0 exact term=jr_ra +0x800697C4 0x800697FC 56 0x800697FC 0 exact term=jr_ra +0x800697FC 0x80069A10 532 0x80069A10 0 exact term=jr_ra +0x80069A10 0x80069C90 640 0x80069C90 0 exact term=jr_ra +0x80069C90 0x8006A654 2500 0x8006A654 0 exact term=jr_ra +0x8006A654 0x8006A6F0 156 0x8006A6F0 0 exact term=jr_ra +0x8006A6F0 0x8006A98C 668 0x8006A98C 0 exact term=jr_ra +0x8006A98C 0x8006AA10 132 0x8006AA10 0 exact term=jr_ra +0x8006AA10 0x8006AA88 120 0x8006AA88 0 exact term=jr_ra +0x8006AA88 0x8006AB7C 244 0x8006AB7C 0 exact term=jr_ra +0x8006AB7C 0x8006AD5C 480 0x8006AD5C 0 exact term=jr_ra +0x8006AD5C 0x8006ADB0 84 0x8006ADB0 0 exact term=jr_ra +0x8006AD60 - - - - contained inside=0x8006AD5C;grades=prologue +0x8006ADB0 0x8006AE04 84 0x8006AE04 0 exact term=jr_ra +0x8006ADB4 - - - - contained inside=0x8006ADB0;grades=prologue +0x8006AE04 0x8006AE54 80 0x8006AE54 0 exact term=jr_ra +0x8006AE08 - - - - contained inside=0x8006AE04;grades=prologue +0x8006AE54 0x8006B0A8 596 0x8006B0A8 0 exact term=jr_ra +0x8006B0A8 0x8006B184 220 0x8006B184 0 exact term=jr_ra +0x8006B184 0x8006B1CC 72 0x8006B1CC 0 exact term=jr_ra +0x8006B188 - - - - contained inside=0x8006B184;grades=prologue +0x8006B1CC 0x8006B214 72 0x8006B214 0 exact term=jr_ra +0x8006B1D0 - - - - contained inside=0x8006B1CC;grades=prologue +0x8006B214 0x8006B270 92 0x8006B270 0 exact term=jr_ra +0x8006B218 - - - - contained inside=0x8006B214;grades=prologue +0x8006B270 0x8006B2D4 100 0x8006B2D4 0 exact term=jr_ra +0x8006B274 - - - - contained inside=0x8006B270;grades=prologue +0x8006B2D4 0x8006B328 84 0x8006B328 0 exact term=jr_ra +0x8006B2D8 - - - - contained inside=0x8006B2D4;grades=prologue +0x8006B328 0x8006B398 112 0x8006B398 0 exact term=jr_ra +0x8006B32C - - - - contained inside=0x8006B328;grades=prologue +0x8006B398 0x8006B470 216 0x8006B470 0 exact term=jr_ra +0x8006B470 0x8006B4C4 84 0x8006B4C4 0 exact term=jr_ra +0x8006B474 - - - - contained inside=0x8006B470;grades=prologue +0x8006B4C4 0x8006B5F0 300 0x8006B5F0 0 exact term=jr_ra +0x8006B4C8 - - - - contained inside=0x8006B4C4;grades=prologue +0x8006B5F0 0x8006B66C 124 0x8006B66C 0 exact term=jr_ra +0x8006B66C 0x8006B6BC 80 0x8006B6BC 0 exact term=jr_ra +0x8006B670 - - - - contained inside=0x8006B66C;grades=prologue +0x8006B6BC 0x8006B778 188 0x8006B778 0 exact term=jr_ra +0x8006B778 0x8006B7C0 72 0x8006B7C0 0 exact term=jr_ra +0x8006B77C - - - - contained inside=0x8006B778;grades=prologue +0x8006B7C0 0x8006B964 420 0x8006B964 0 exact term=jr_ra +0x8006B964 0x8006B9E0 124 0x8006B9E0 0 exact term=jr_ra +0x8006B9E0 0x8006BA3C 92 0x8006BA3C 0 exact term=jr_ra +0x8006BA3C 0x8006BB0C 208 0x8006BB0C 0 exact term=jr_ra +0x8006BB0C 0x8006BB88 124 0x8006BB88 0 exact term=jr_ra +0x8006BB88 0x8006BC08 128 0x8006BC08 0 exact term=jr_ra +0x8006BC08 0x8006BC34 44 0x8006BC34 0 exact term=jr_ra +0x8006BC34 0x8006BC74 64 0x8006BC74 0 exact term=jr_ra +0x8006BC74 0x8006BF30 700 0x8006BF30 0 exact term=jr_ra +0x8006BF30 0x8006C044 276 0x8006C044 0 exact term=jr_ra +0x8006C044 0x8006C324 736 0x8006C324 0 exact term=jr_ra +0x8006C324 0x8006CC54 2352 0x8006CC54 0 exact term=jr_ra +0x8006CC54 0x8006CFB0 860 0x8006CFB0 0 exact term=jr_ra +0x8006CFB0 0x8006D0B8 264 0x8006D148 144 exact term=jr_ra +0x8006CFB8 - - - - contained inside=0x8006CFB0;grades=prologue +0x8006D148 0x8006D1C4 124 0x8006D1C4 0 exact term=jr_ra +0x8006D14C - - - - contained inside=0x8006D148;grades=prologue +0x8006D1C4 0x8006D250 140 0x8006D250 0 exact term=jr_ra +0x8006D250 0x8006D2FC 172 0x8006D2FC 0 exact term=jr_ra +0x8006D2FC 0x8006D3B0 180 0x8006D3B0 0 exact term=jr_ra +0x8006D3B0 0x8006D470 192 0x8006D470 0 exact term=jr_ra +0x8006D470 0x8006D548 216 0x8006D884 828 exact term=jr_ra +0x8006D548 - - - - standalone grades=ghidra +0x8006D884 0x8006DB90 780 0x8006DB90 0 exact term=jr_ra +0x8006DB90 0x8006DEB4 804 0x8006E1B0 764 exact term=jr_ra +0x8006DEB4 - - - - standalone grades=ghidra +0x8006E1B0 0x8006E378 456 0x8006EBA0 2088 exact term=jr_ra +0x8006EBA0 0x8006EC94 244 0x8006EC94 0 exact term=jr_ra +0x8006EC94 0x8006ECD4 64 0x8006ECD4 0 exact term=jr_ra +0x8006ECD4 0x8006ED58 132 0x8006ED58 0 exact term=jr_ra +0x8006ED58 0x8006EE44 236 0x8006EE44 0 exact term=jr_ra +0x8006EE44 0x8006EFBC 376 0x8006EFBC 0 exact term=jr_ra +0x8006EE4C - - - - contained inside=0x8006EE44;grades=prologue +0x8006EFBC 0x8006F28C 720 0x8006F28C 0 exact term=jr_ra +0x8006F28C 0x8006F2F4 104 0x8006F2F4 0 exact term=jr_ra +0x8006F290 - - - - contained inside=0x8006F28C;grades=prologue +0x8006F2F4 0x8006F6BC 968 0x8006F6BC 0 exact term=jr_ra +0x8006F6BC 0x8006F6F4 56 0x8006F6F4 0 exact term=jr_ra +0x8006F6F4 0x8006F77C 136 0x8006F77C 0 exact term=jr_ra +0x8006F77C 0x8006F930 436 0x8006F930 0 exact term=jr_ra +0x8006F930 0x8006F944 20 0x8006F944 0 exact term=jr_ra +0x8006F944 0x8006F95C 24 0x8006F95C 0 exact term=jr_ra +0x8006F95C 0x8006F9B4 88 0x8006F9B4 0 exact term=jr_ra +0x8006F9B4 0x8006FA78 196 0x8006FA78 0 exact term=jr_ra +0x8006F9BC - - - - contained inside=0x8006F9B4;grades=prologue +0x8006FA78 0x8006FAA0 40 0x8006FAA0 0 exact term=jr_ra +0x8006FAA0 0x8006FAEC 76 0x8006FAEC 0 exact term=jr_ra +0x8006FAEC 0x8006FB44 88 0x8006FB44 0 exact term=jr_ra +0x8006FB44 0x80070270 1836 0x80070270 0 exact term=jr_ra +0x80070270 0x80070454 484 0x80070454 0 exact term=jr_ra +0x80070454 0x8007049C 72 0x8007049C 0 exact term=jr_ra +0x8007049C 0x800704BC 32 0x800704BC 0 exact term=jr_ra +0x800704BC 0x8007061C 352 0x8007061C 0 exact term=jr_ra +0x8007061C 0x80070938 796 0x800713D0 2712 exact term=jr_ra +0x80070624 - - - - contained inside=0x8007061C;grades=prologue +0x80070938 - - - - standalone grades=prologue +0x800713D0 0x80071C64 2196 0x80071C64 0 exact term=jr_ra +0x800713D8 - - - - contained inside=0x800713D0;grades=prologue +0x80071C64 0x80072048 996 0x80072048 0 exact term=jr_ra +0x80072048 0x80072360 792 0x80072360 0 exact term=jr_ra +0x80072360 0x80072680 800 0x80072680 0 exact term=jr_ra +0x80072680 0x80072914 660 0x80072914 0 exact term=jr_ra +0x80072914 0x80072BA8 660 0x80072BA8 0 exact term=jr_ra +0x80072BA8 0x80072BDC 52 0x80072BDC 0 exact term=jr_ra +0x80072BDC 0x80072D0C 304 0x80072D0C 0 exact term=jr_ra +0x80072D0C 0x80072D78 108 0x80072D78 0 exact term=jr_ra +0x80072D78 0x80072DF4 124 0x80072DF4 0 exact term=jr_ra +0x80072DF4 0x80073190 924 0x80073250 192 exact term=jr_ra +0x80073190 - - - - standalone grades=prologue +0x80073250 0x80073284 52 0x80073284 0 exact term=jr_ra +0x80073284 0x8007330C 136 0x80073364 88 exact term=jr_ra +0x8007330C - - - - standalone grades=prologue +0x80073364 0x800733C4 96 0x800733C4 0 exact term=jr_ra +0x800733C4 0x800734A4 224 0x800734A4 0 exact term=jr_ra +0x800734A4 0x800734DC 56 0x800734DC 0 exact term=jr_ra +0x800734DC 0x800735EC 272 0x800735EC 0 exact term=jr_ra +0x800735EC 0x8007374C 352 0x8007374C 0 exact term=jr_ra +0x8007374C 0x80073798 76 0x80073798 0 exact term=jr_ra +0x80073798 0x80073B74 988 0x80073B74 0 exact term=jr_ra +0x80073B74 0x80073D08 404 0x80073D08 0 exact term=jr_ra +0x80073D08 0x80073F78 624 0x80073F78 0 exact term=jr_ra +0x80073D0C - - - - contained inside=0x80073D08;grades=prologue +0x80073F78 0x8007405C 228 0x8007405C 0 exact term=jr_ra +0x8007405C 0x80074140 228 0x80074140 0 exact term=jr_ra +0x80074140 0x80074268 296 0x80074268 0 exact term=jr_ra +0x80074268 0x8007432C 196 0x8007432C 0 exact term=jr_ra +0x8007432C 0x80074394 104 0x80074394 0 exact term=jr_ra +0x80074394 0x80074570 476 0x80074570 0 exact term=jr_ra +0x80074570 0x80074658 232 0x80074658 0 exact term=jr_ra +0x80074658 0x80074734 220 0x80074734 0 exact term=jr_ra +0x80074734 0x800747E4 176 0x800747E4 0 exact term=jr_ra +0x800747E4 0x800748EC 264 0x800748EC 0 exact term=jr_ra +0x800748EC 0x80074C00 788 0x80074C00 0 exact term=jr_ra +0x80074C00 0x80074C74 116 0x80074C74 0 exact term=jr_ra +0x80074C74 0x80074F1C 680 0x80074F1C 0 exact term=jr_ra +0x80074F1C 0x800751E8 716 0x800751E8 0 exact term=jr_ra +0x800751E8 0x80075228 64 0x80075228 0 exact term=jr_ra +0x80075228 0x8007587C 1620 0x8007587C 0 exact term=jr_ra +0x8007587C 0x80076110 2196 0x80076110 0 exact term=jr_ra +0x80076110 0x80076778 1640 0x80076778 0 exact term=jr_ra +0x80076778 0x800768C8 336 0x80077088 1984 exact term=jr_ra +0x800768C8 - - - - standalone grades=prologue +0x80077088 0x80077250 456 0x80077250 0 exact term=jr_ra +0x8007708C - - - - contained inside=0x80077088;grades=prologue +0x80077250 0x8007759C 844 0x8007759C 0 exact term=jr_ra +0x80077254 - - - - contained inside=0x80077250;grades=prologue +0x8007759C 0x800775E4 72 0x80077D04 1824 exact term=jr_ra +0x800775E4 - - - - standalone grades=prologue +0x8007793C - - - - standalone grades=prologue +0x80077D04 0x80077D7C 120 0x80077D7C 0 exact term=jr_ra +0x80077D7C 0x80077ED0 340 0x800784A4 1492 exact term=jr_ra +0x80077D80 - - - - contained inside=0x80077D7C;grades=prologue +0x80077ED4 - - - - standalone grades=prologue +0x800784A4 0x800784F4 80 0x800784F4 0 escape escape=j@0x800784EC->0x80078554 +0x800784F4 0x80078564 112 0x80078B94 1584 exact term=jr_ra +0x80078564 - - - - standalone grades=prologue +0x800789BC - - - - standalone grades=prologue +0x80078B94 0x80078E94 768 0x80078E94 0 exact term=jr_ra +0x80078E94 0x80078FD0 316 0x80078FD0 0 exact term=jr_ra +0x80078E98 - - - - contained inside=0x80078E94;grades=prologue +0x80078FD0 0x800791AC 476 0x80079B34 2440 exact term=jr_ra +0x80078FD8 - - - - contained inside=0x80078FD0;grades=prologue +0x800791AC - - - - standalone grades=prologue +0x800799A8 - - - - standalone grades=prologue +0x80079B34 0x80079C90 348 0x80079C90 0 exact term=jr_ra +0x80079C90 0x80079D24 148 0x80079D24 0 exact term=jr_ra +0x80079D24 0x80079DDC 184 0x80079DDC 0 exact term=jr_ra +0x80079DDC 0x80079EEC 272 0x80079EEC 0 exact term=jr_ra +0x80079DE4 - - - - contained inside=0x80079DDC;grades=prologue +0x80079EEC 0x8007A080 404 0x8007A080 0 exact term=jr_ra +0x80079EF4 - - - - contained inside=0x80079EEC;grades=prologue +0x8007A080 0x8007A114 148 0x8007A114 0 exact term=jr_ra +0x8007A114 0x8007A16C 88 0x8007A16C 0 exact term=jr_ra +0x8007A16C 0x8007A2AC 320 0x8007A2AC 0 exact term=jr_ra +0x8007A174 - - - - contained inside=0x8007A16C;grades=prologue +0x8007A2AC 0x8007A324 120 0x8007A324 0 exact term=jr_ra +0x8007A324 0x8007A404 224 0x8007A404 0 exact term=jr_ra +0x8007A404 0x8007A428 36 0x8007A428 0 exact term=jr_ra +0x8007A428 0x8007A4FC 212 0x8007A4FC 0 exact term=jr_ra +0x8007A4FC 0x8007AB7C 1664 0x8007AB7C 0 exact term=jr_ra +0x8007AB7C 0x8007AC34 184 0x8007AC34 0 exact term=jr_ra +0x8007AC34 0x8007AD28 244 0x8007AD28 0 exact term=jr_ra +0x8007AD28 0x8007B00C 740 0x8007B00C 0 exact term=jr_ra +0x8007B00C 0x8007B0B8 172 0x8007B2A0 488 exact term=jr_ra +0x8007B168 - - - - standalone grades=prologue +0x8007B2A0 0x8007B83C 1436 0x8007B83C 0 exact term=jr_ra +0x8007B83C 0x8007B928 236 0x8007B928 0 exact term=jr_ra +0x8007B928 0x8007BA60 312 0x8007BA60 0 exact term=jr_ra +0x8007BA60 0x8007BC64 516 0x8007BC64 0 exact term=jr_ra +0x8007BC64 0x8007BD0C 168 0x8007BD0C 0 exact term=jr_ra +0x8007BD0C 0x8007C108 1020 0x8007C108 0 exact term=jr_ra +0x8007C108 0x8007C228 288 0x8007C228 0 exact term=jr_ra +0x8007C228 0x8007C2DC 180 0x8007C2DC 0 exact term=jr_ra +0x8007C2DC 0x8007C408 300 0x8007C408 0 exact term=jr_ra +0x8007C408 0x8007C4A8 160 0x8007C4A8 0 exact term=jr_ra +0x8007C4A8 0x8007C4EC 68 0x8007C4EC 0 exact term=jr_ra +0x8007C4EC 0x8007C524 56 0x8007C524 0 exact term=jr_ra +0x8007C524 0x8007C638 276 0x8007C664 44 exact term=jr_ra +0x8007C664 0x8007C6E0 124 0x8007C6E0 0 exact term=jr_ra +0x8007C6E0 0x8007C7CC 236 0x8007C7CC 0 exact term=jr_ra +0x8007C7CC 0x8007CFFC 2096 0x8007CFFC 0 exact term=jr_ra +0x8007CFFC 0x8007D20C 528 0x8007D20C 0 exact term=jr_ra +0x8007D20C 0x8007D2B0 164 0x8007D2B0 0 exact term=jr_ra +0x8007D2B0 0x8007D418 360 0x8007D418 0 exact term=jr_ra +0x8007D418 0x8007D5AC 404 0x8007D5AC 0 escape escape=branch@0x8007D440->0x8007D5DC +0x8007D41C - - - - standalone grades=prologue +0x8007D5AC 0x8007D5FC 80 0x8007D5FC 0 exact term=jr_ra +0x8007D5FC 0x8007D680 132 0x8007D680 0 exact term=jr_ra +0x8007D680 0x8007D718 152 0x8007D718 0 exact term=jr_ra +0x8007D718 0x8007DC40 1320 0x8007DC40 0 exact term=jr_ra +0x8007DC40 0x8007DC4C 12 0x8007DC4C 0 exact term=jr_ra +0x8007DC4C 0x8007DF00 692 0x8007DF00 0 exact term=jr_ra +0x8007DF00 0x8007DF34 52 0x8007DF34 0 exact term=jr_ra +0x8007DF34 0x8007E0A4 368 0x8007E0A4 0 exact term=jr_ra +0x8007E0A4 0x8007E12C 136 0x8007E12C 0 exact term=jr_ra +0x8007E12C 0x8007E228 252 0x8007E228 0 exact term=jr_ra +0x8007E228 0x8007E7C0 1432 0x8007E7FC 60 exact term=jr_ra +0x8007E7C0 - - - - standalone grades=prologue +0x8007E7FC 0x8007E85C 96 0x8007E85C 0 exact term=jr_ra +0x8007E85C 0x8007E8B8 92 0x8007E8B8 0 exact term=jr_ra +0x8007E8B8 0x8007E904 76 0x8007EB8C 648 exact term=jr_ra +0x8007E904 - - - - standalone grades=prologue +0x8007E948 - - - - standalone grades=prologue +0x8007E98C - - - - standalone grades=prologue +0x8007EA5C - - - - standalone grades=prologue +0x8007EB00 - - - - standalone grades=prologue +0x8007EB8C 0x8007EBEC 96 0x8007EBEC 0 exact term=jr_ra +0x8007EBEC 0x8007ED4C 352 0x8007ED4C 0 exact term=jr_ra +0x8007ED4C 0x8007ED8C 64 0x8007ED8C 0 exact term=jr_ra +0x8007ED8C 0x8007EF84 504 0x8007EF84 0 exact term=jr_ra +0x8007EF84 0x8007F07C 248 0x8007F07C 0 exact term=jr_ra +0x8007F07C 0x8007F2B8 572 0x8007F774 1212 exact term=jr_ra +0x8007F2B8 - - - - standalone grades=prologue +0x8007F51C - - - - standalone grades=prologue +0x8007F638 - - - - standalone grades=prologue +0x8007F774 0x8007F914 416 0x8007F9B0 156 exact term=jr_ra +0x8007F9B0 0x8007FA1C 108 0x8007FCCC 688 exact term=jr_ra +0x8007FA1C - - - - standalone grades=prologue +0x8007FB30 - - - - standalone grades=prologue +0x8007FC84 - - - - standalone grades=prologue +0x8007FCCC 0x8007FDB0 228 0x800800D0 800 exact term=jr_ra +0x8007FDB0 - - - - standalone grades=prologue +0x8007FF48 - - - - standalone grades=prologue +0x80080088 - - - - standalone grades=prologue +0x800800D0 0x800801B4 228 0x800801B4 0 exact term=jr_ra +0x800801B4 0x8008022C 120 0x8008022C 0 exact term=jr_ra +0x8008022C 0x800807E0 1460 0x800807E0 0 indirect jr_reg=0x80080354;lower_bound=0x800807E0 +0x800807E0 0x80080800 32 0x80080800 0 fallthrough hit=0x80080800 +0x800807E8 - - - - standalone grades=prologue +0x80080800 0x800809B8 440 0x800809B8 0 exact term=jr_ra +0x800809B8 0x80081174 1980 0x80081174 0 exact term=jr_ra +0x80081174 0x8008132C 440 0x8008132C 0 exact term=jr_ra +0x8008132C 0x80082750 5156 0x80082750 0 exact term=jr_ra +0x80082750 0x800827A8 88 0x800827A8 0 exact term=jr_ra +0x800827A8 0x800827C4 28 0x800827C4 0 exact term=jr_ra +0x800827C4 0x80082868 164 0x80082868 0 exact term=jr_ra +0x80082868 0x80082914 172 0x80082914 0 exact term=jr_ra +0x80082914 0x80082944 48 0x80082944 0 exact term=jr_ra +0x80082944 0x800829D8 148 0x800829D8 0 exact term=jr_ra +0x800829D8 0x80082A68 144 0x80082A68 0 exact term=jr_ra +0x80082A68 0x80082BAC 324 0x80082BAC 0 exact term=jr_ra +0x80082BAC 0x80082CF0 324 0x80082CF0 0 exact term=jr_ra +0x80082CF0 0x80083018 808 0x80083018 0 exact term=jr_ra +0x80083018 0x800830B4 156 0x800830B4 0 exact term=jr_ra +0x8008301C - - - - contained inside=0x80083018;grades=prologue +0x800830B4 0x800833CC 792 0x800833CC 0 exact term=jr_ra +0x800830B8 - - - - contained inside=0x800830B4;grades=prologue +0x800833CC 0x80083440 116 0x80083440 0 exact term=jr_ra +0x80083440 0x80083470 48 0x80083470 0 exact term=jr_ra +0x80083470 0x800834B8 72 0x800834B8 0 exact term=jr_ra +0x800834B8 0x80083504 76 0x80083504 0 exact term=jr_ra +0x80083504 0x8008352C 40 0x8008352C 0 exact term=jr_ra +0x8008352C 0x8008355C 48 0x8008355C 0 exact term=jr_ra +0x8008355C 0x80083878 796 0x80083878 0 exact term=jr_ra +0x80083878 0x800839E8 368 0x800839E8 0 exact term=jr_ra +0x800839E8 0x80083BAC 452 0x80083BAC 0 exact term=jr_ra +0x800839EC - - - - contained inside=0x800839E8;grades=prologue +0x80083BAC 0x80083C78 204 0x80083C78 0 exact term=jr_ra +0x80083C78 0x800844B8 2112 0x800844B8 0 exact term=jr_ra +0x800844B8 0x80084770 696 0x80084770 0 exact term=jr_ra +0x80084770 0x80084A48 728 0x80085494 2636 exact term=jr_ra +0x80084A48 - - - - standalone grades=prologue +0x80085494 0x800855D4 320 0x800855D4 0 exact term=jr_ra +0x800855D4 0x80085B44 1392 0x80085B44 0 exact term=jr_ra +0x80085B44 0x80085B80 60 0x80085B80 0 exact term=jr_ra +0x80085B80 0x80085B90 16 0x80085B90 0 exact term=jr_ra +0x80085B90 0x80085CDC 332 0x80085CDC 0 exact term=jr_ra +0x80085CDC 0x80086388 1708 0x80086388 0 exact term=jr_ra +0x80086388 0x800868E8 1376 0x800868E8 0 exact term=jr_ra +0x800868E8 0x80086CFC 1044 0x80086CFC 0 exact term=jr_ra +0x80086CFC 0x80086DBC 192 0x80086DBC 0 exact term=jr_ra +0x80086DBC 0x80086DFC 64 0x80086DFC 0 exact term=jr_ra +0x80086DFC 0x80088F38 8508 0x80088F38 0 exact term=jr_ra +0x80086E0C - - - - contained inside=0x80086DFC;grades=prologue +0x80088F38 0x80089314 988 0x80089314 0 exact term=jr_ra +0x80089314 0x80089338 36 0x80089338 0 exact term=jr_ra +0x80089338 0x800893E8 176 0x800893E8 0 exact term=jr_ra +0x800893E8 0x80089434 76 0x80089434 0 exact term=jr_ra +0x80089434 0x800897B8 900 0x800897B8 0 exact term=jr_ra +0x800897B8 0x80089B30 888 0x80089B30 0 exact term=jr_ra +0x80089B30 0x80089B88 88 0x80089B88 0 exact term=jr_ra +0x80089B88 0x80089C4C 196 0x80089C4C 0 exact term=jr_ra +0x80089C4C 0x80089C54 8 0x80089C54 0 exact term=jr_ra +0x80089C54 0x80089C64 16 0x80089C64 0 exact term=jr_ra +0x80089C64 0x80089C74 16 0x80089C74 0 exact term=jr_ra +0x80089C74 0x80089D14 160 0x80089D14 0 exact term=jr_ra +0x80089D14 0x80089D54 64 0x80089D54 0 exact term=jr_ra +0x80089D54 0x80089DE8 148 0x80089DE8 0 exact term=jr_ra +0x80089DE8 0x80089E74 140 0x80089E74 0 exact term=jr_ra +0x80089E74 0x80089E7C 8 0x80089E7C 0 exact term=jr_ra +0x80089E7C 0x80089FA0 292 0x80089FA0 0 exact term=jr_ra +0x80089FA0 0x8008A0E8 328 0x8008A0E8 0 exact term=jr_ra +0x80089FA8 - - - - contained inside=0x80089FA0;grades=prologue +0x8008A0E8 0x8008A198 176 0x8008A198 0 exact term=jr_ra +0x8008A198 0x8008A1D0 56 0x8008A1D0 0 exact term=jr_ra +0x8008A1D0 0x8008A400 560 0x8008A400 0 exact term=jr_ra +0x8008A1D4 - - - - contained inside=0x8008A1D0;grades=prologue +0x8008A400 0x8008A47C 124 0x8008A47C 0 exact term=jr_ra +0x8008A414 - - - - contained inside=0x8008A400;grades=prologue +0x8008A47C 0x8008A758 732 0x8008A758 0 exact term=jr_ra +0x8008A758 0x8008A7C0 104 0x8008A7C0 0 exact term=jr_ra +0x8008A7C0 0x8008B8D4 4372 0x8008B8D4 0 indirect jr_reg=0x8008A824;lower_bound=0x8008B8D4 +0x8008B8D4 0x8008B8E4 16 0x8008B8E4 0 exact term=jr_ra +0x8008B8E4 0x8008B8F4 16 0x8008B8F4 0 exact term=jr_ra +0x8008B8F4 0x8008B910 28 0x8008B910 0 exact term=jr_ra +0x8008B910 0x8008B960 80 0x8008B960 0 exact term=jr_ra +0x8008B960 0x8008BA80 288 0x8008BA80 0 exact term=jr_ra +0x8008BA80 0x8008BAE0 96 0x8008BAE0 0 exact term=jr_ra +0x8008BAE0 0x8008CC00 4384 0x8008CC00 0 escape escape=branch@0x8008C2E0->0x8008CC8C +0x8008CC00 0x8008CCC0 192 0x8008CCC0 0 exact term=jr_ra +0x8008CCC0 0x8008D5F8 2360 0x8008D5F8 0 exact term=jr_ra +0x8008D5F8 0x8008D6E0 232 0x8008D6E0 0 exact term=jr_ra +0x8008D6E0 0x8008D86C 396 0x8008D86C 0 exact term=jr_ra +0x8008D86C 0x8008D9AC 320 0x8008D9AC 0 exact term=jr_ra +0x8008D9AC 0x8008DA0C 96 0x8008DA0C 0 exact term=jr_ra +0x8008DA0C 0x8008DB44 312 0x8008DB44 0 exact term=jr_ra +0x8008DB44 0x8008DC04 192 0x8008DC04 0 exact term=jr_ra +0x8008DC04 0x8008DFE8 996 0x8008DFE8 0 escape escape=branch@0x8008DFAC->0x8008E084 +0x8008DFE8 0x8008E19C 436 0x8008E19C 0 exact term=jr_ra +0x8008E19C 0x8008E258 188 0x8008E258 0 exact term=jr_ra +0x8008E258 0x8008E2D0 120 0x8008E2D0 0 exact term=jr_ra +0x8008E2D0 0x8008E3E4 276 0x8008E3E4 0 exact term=jr_ra +0x8008E3E4 0x8008EBFC 2072 0x8008EBFC 0 exact term=jr_ra +0x8008EBFC 0x8008EFC4 968 0x8008F114 336 exact term=jr_ra +0x8008EFC4 - - - - standalone grades=prologue +0x8008F114 0x8008F2E0 460 0x8008F2E0 0 exact term=jr_ra +0x8008F2E0 0x8008F338 88 0x8008F338 0 exact term=jr_ra +0x8008F338 0x8008F478 320 0x8008F478 0 exact term=jr_ra +0x8008F344 - - - - contained inside=0x8008F338;grades=prologue +0x8008F478 0x8008F4A0 40 0x8008F4A0 0 exact term=jr_ra +0x8008F4A0 0x8008F4AC 12 0x8008F4AC 0 exact term=jr_ra +0x8008F4AC 0x8008F4F4 72 0x8008F4F4 0 exact term=jr_ra +0x8008F4F4 0x8008F508 20 0x8008F508 0 exact term=jr_ra +0x8008F508 0x8008F530 40 0x8008F530 0 exact term=jr_ra +0x8008F530 0x8008F60C 220 0x8008F60C 0 exact term=jr_ra +0x8008F534 - - - - contained inside=0x8008F530;grades=prologue +0x8008F60C 0x8008FA58 1100 0x8008FA58 0 exact term=jr_ra +0x8008FA58 0x8008FCD8 640 0x8008FCD8 0 exact term=jr_ra +0x8008FCD8 0x8008FDBC 228 0x8008FDBC 0 exact term=jr_ra +0x8008FDBC 0x8008FE98 220 0x8008FE98 0 exact term=jr_ra +0x8008FDC0 - - - - contained inside=0x8008FDBC;grades=prologue +0x8008FE98 0x8008FF58 192 0x8008FF58 0 exact term=jr_ra +0x8008FF58 0x8008FF84 44 0x8008FF84 0 exact term=jr_ra +0x8008FF84 0x8008FFC4 64 0x8008FFC4 0 exact term=jr_ra +0x8008FFC4 0x80090028 100 0x80090028 0 exact term=jr_ra +0x80090028 0x80090048 32 0x80090048 0 exact term=jr_ra +0x80090048 0x80090058 16 0x800900A0 72 exact term=jr_ra +0x800900A0 0x800900CC 44 0x80090408 828 exact term=jr_ra +0x800900CC - - - - standalone grades=prologue +0x80090374 - - - - standalone grades=prologue +0x80090408 0x800907A4 924 0x800907A4 0 exact term=jr_ra +0x80090410 - - - - contained inside=0x80090408;grades=prologue +0x800907A4 0x80090894 240 0x80090894 0 exact term=jr_ra +0x800907AC - - - - contained inside=0x800907A4;grades=prologue +0x80090894 0x800908E4 80 0x800908E4 0 exact term=jr_ra +0x800908E4 0x80090990 172 0x80090990 0 exact term=jr_ra +0x80090990 0x800909D8 72 0x800909D8 0 exact term=jr_ra +0x800909D8 0x80090A44 108 0x80090A44 0 exact term=jr_ra +0x80090A44 0x80090A70 44 0x80090A70 0 exact term=jr_ra +0x80090A70 0x80090B64 244 0x80090B64 0 exact term=jr_ra +0x80090B64 0x80090B7C 24 0x80090B7C 0 exact term=jr_ra +0x80090B7C 0x80090BB4 56 0x80090BB4 0 exact term=jr_ra +0x80090BB4 0x80090C8C 216 0x80090C8C 0 exact term=jr_ra +0x80090C8C 0x80090CAC 32 0x80090CAC 0 exact term=jr_ra +0x80090CAC 0x80090D00 84 0x80090D00 0 exact term=jr_ra +0x80090D00 0x80091070 880 0x8009107C 12 exact term=jr_ra +0x8009107C 0x800910B0 52 0x800910BC 12 exact term=jr_ra +0x800910BC 0x800911D4 280 0x800911D4 0 exact term=jr_ra +0x800911D4 0x800912D4 256 0x800912D4 0 exact term=jr_ra +0x800912D4 0x800912FC 40 0x800912FC 0 exact term=jr_ra +0x800912FC 0x8009132C 48 0x8009132C 0 exact term=jr_ra +0x8009132C 0x80091370 68 0x80091370 0 exact term=jr_ra +0x80091370 0x8009141C 172 0x8009141C 0 exact term=jr_ra +0x8009141C 0x80091490 116 0x80091490 0 exact term=jr_ra +0x80091490 0x800914E4 84 0x800914E4 0 exact term=jr_ra +0x800914E4 0x80091674 400 0x80091674 0 exact term=jr_ra +0x80091674 0x800916DC 104 0x800916DC 0 exact term=jr_ra +0x800916DC 0x800919BC 736 0x800919BC 0 exact term=jr_ra +0x800919BC 0x80091A7C 192 0x80091A7C 0 exact term=jr_ra +0x80091A7C 0x80091D88 780 0x80091D88 0 exact term=jr_ra +0x80091D88 0x80092068 736 0x80092068 0 exact term=jr_ra +0x80092068 0x80092088 32 0x80092088 0 exact term=jr_ra +0x80092088 0x800920BC 52 0x800920BC 0 exact term=jr_ra +0x800920BC 0x800920DC 32 0x800920DC 0 exact term=jr_ra +0x800920DC 0x80092104 40 0x80092104 0 exact term=jr_ra +0x80092104 0x80092130 44 0x80092130 0 exact term=jr_ra +0x80092130 0x8009214C 28 0x8009214C 0 exact term=jr_ra +0x8009214C 0x800921C0 116 0x800921C0 0 exact term=jr_ra +0x800921C0 0x800922D0 272 0x800922D0 0 exact term=jr_ra +0x800922D0 0x80092340 112 0x80092340 0 exact term=jr_ra +0x80092340 0x800923E8 168 0x800923E8 0 exact term=jr_ra +0x800923E8 0x80092460 120 0x80092460 0 exact term=jr_ra +0x80092460 0x80092898 1080 0x80092898 0 exact term=jr_ra +0x80092898 0x80092A48 432 0x80092A48 0 exact term=jr_ra +0x80092A48 0x80092B2C 228 0x80092B2C 0 exact term=jr_ra +0x80092B2C 0x80093330 2052 0x80093768 1080 exact term=jr_ra +0x80093330 - - - - standalone grades=prologue +0x80093768 0x80093A08 672 0x80093A08 0 exact term=jr_ra +0x80093A08 0x80093A64 92 0x80093A64 0 exact term=jr_ra +0x80093A64 0x80093A84 32 0x80093A84 0 exact term=jr_ra +0x80093A84 0x80093D80 764 0x80093D80 0 exact term=jr_ra +0x80093D80 0x80093E54 212 0x80093E54 0 exact term=jr_ra +0x80093E54 0x80094370 1308 0x80094370 0 exact term=jr_ra +0x80094370 0x800943C4 84 0x800943C4 0 exact term=jr_ra +0x800943C4 0x800943E0 28 0x800943E0 0 exact term=jr_ra +0x800943E0 0x80094670 656 0x80094670 0 exact term=jr_ra +0x80094670 0x80094988 792 0x80094988 0 exact term=jr_ra +0x80094988 0x80094F54 1484 0x80094F54 0 exact term=jr_ra +0x80094F54 0x80095364 1040 0x80095364 0 exact term=jr_ra +0x80095364 0x80095820 1212 0x80095820 0 exact term=jr_ra +0x80095820 0x80095BB0 912 0x80095BB0 0 exact term=jr_ra +0x80095BB0 0x80095CF8 328 0x80095CF8 0 exact term=jr_ra +0x80095CF8 0x80095D74 124 0x80095D74 0 exact term=jr_ra +0x80095D74 0x80096324 1456 0x80096324 0 exact term=jr_ra +0x80096324 0x80096364 64 0x80096364 0 exact term=jr_ra +0x80096364 0x800964F8 404 0x800964F8 0 exact term=jr_ra +0x800964F8 0x8009736C 3700 0x8009736C 0 exact term=jr_ra +0x8009736C 0x800975C4 600 0x800975C4 0 exact term=jr_ra +0x800975C4 0x8009829C 3288 0x8009829C 0 exact term=jr_ra +0x8009829C 0x800985A4 776 0x800985A4 0 exact term=jr_ra +0x800985A4 0x80098E18 2164 0x80098E18 0 exact term=jr_ra +0x80098E18 0x80099024 524 0x80099024 0 exact term=jr_ra +0x80099024 0x80099078 84 0x80099078 0 exact term=jr_ra +0x80099078 0x8009916C 244 0x8009916C 0 exact term=jr_ra +0x8009916C 0x80099420 692 0x80099420 0 exact term=jr_ra +0x80099420 0x80099A94 1652 0x80099A94 0 exact term=jr_ra +0x80099A94 0x80099AE4 80 0x80099AE4 0 exact term=jr_ra +0x80099AE4 0x80099BB0 204 0x80099BB0 0 exact term=jr_ra +0x80099BB0 0x80099C44 148 0x80099C44 0 exact term=jr_ra +0x80099C44 0x80099D14 208 0x80099D14 0 exact term=jr_ra +0x80099D14 0x80099D6C 88 0x80099DC4 88 exact term=jr_ra +0x80099DC4 0x80099E14 80 0x80099E14 0 exact term=jr_ra +0x80099E14 0x80099E34 32 0x80099E34 0 exact term=jr_ra +0x80099E34 0x80099E5C 40 0x80099E84 40 exact term=jr_ra +0x80099E5C - - - - standalone grades=prologue +0x80099E84 0x8009A050 460 0x8009A4AC 1116 exact term=jr_ra +0x8009A0D0 - - - - standalone grades=prologue +0x8009A4AC 0x8009A904 1112 0x8009A904 0 exact term=jr_ra +0x8009A904 0x8009AC08 772 0x8009AC08 0 exact term=jr_ra +0x8009A90C - - - - contained inside=0x8009A904;grades=prologue +0x8009AC08 0x8009AC28 32 0x8009AC28 0 exact term=jr_ra +0x8009AC28 0x8009AE2C 516 0x8009AE2C 0 exact term=jr_ra +0x8009AE2C 0x8009B074 584 0x8009B074 0 exact term=jr_ra +0x8009B074 0x8009B464 1008 0x8009B464 0 exact term=jr_ra +0x8009B464 0x8009B4A0 60 0x8009B4A0 0 exact term=jr_ra +0x8009B4A0 0x8009B56C 204 0x8009B56C 0 exact term=jr_ra +0x8009B56C 0x8009B638 204 0x8009B638 0 exact term=jr_ra +0x8009B638 0x8009B7A4 364 0x8009B7A4 0 exact term=jr_ra +0x8009B63C - - - - contained inside=0x8009B638;grades=prologue +0x8009B7A4 0x8009BDEC 1608 0x8009BDF0 4 exact term=jr_ra +0x8009BDF0 0x8009BF68 376 0x8009BF70 8 exact term=jr_ra +0x8009BF70 0x8009C56C 1532 0x8009C56C 0 exact term=jr_ra +0x8009C56C 0x8009C69C 304 0x8009C69C 0 exact term=jr_ra +0x8009C69C 0x8009C6D8 60 0x8009C6D8 0 exact term=jr_ra +0x8009C6D8 0x8009C750 120 0x8009C750 0 exact term=jr_ra +0x8009C750 0x8009C904 436 0x8009C904 0 exact term=jr_ra +0x8009C904 0x8009CB28 548 0x8009CB28 0 exact term=jr_ra +0x8009CB28 0x8009CE58 816 0x8009CE58 0 exact term=jr_ra +0x8009CE58 0x8009CFC8 368 0x8009CFC8 0 exact term=jr_ra +0x8009CFC8 0x8009D244 636 0x8009D244 0 exact term=jr_ra +0x8009D244 0x8009D47C 568 0x8009D47C 0 exact term=jr_ra +0x8009D47C 0x8009D69C 544 0x8009D69C 0 exact term=jr_ra +0x8009D69C 0x8009D798 252 0x8009D798 0 exact term=jr_ra +0x8009D798 0x8009D8A0 264 0x8009D8A0 0 exact term=jr_ra +0x8009D8A0 0x8009D8E0 64 0x8009D8E0 0 exact term=jr_ra +0x8009D8E0 0x8009DA98 440 0x8009DA98 0 exact term=jr_ra +0x8009DA98 0x8009E8D0 3640 0x8009E8D0 0 exact term=jr_ra +0x8009E8D0 0x8009E95C 140 0x8009E95C 0 exact term=jr_ra +0x8009E95C 0x8009F0E8 1932 0x8009F0E8 0 exact term=jr_ra +0x8009F0E8 0x8009F120 56 0x8009F120 0 exact term=jr_ra +0x8009F120 0x8009F264 324 0x8009F264 0 exact term=jr_ra +0x8009F264 0x8009F3A8 324 0x8009F3A8 0 exact term=jr_ra +0x8009F3A8 0x8009F4B4 268 0x8009F4B4 0 exact term=jr_ra +0x8009F4B4 0x8009F5AC 248 0x8009F5AC 0 exact term=jr_ra +0x8009F4B8 - - - - contained inside=0x8009F4B4;grades=prologue +0x8009F5AC 0x8009F6A0 244 0x8009F6A0 0 exact term=jr_ra +0x8009F5B0 - - - - contained inside=0x8009F5AC;grades=prologue +0x8009F6A0 0x8009F798 248 0x8009F798 0 exact term=jr_ra +0x8009F6A4 - - - - contained inside=0x8009F6A0;grades=prologue +0x8009F798 0x8009F890 248 0x8009F890 0 exact term=jr_ra +0x8009F79C - - - - contained inside=0x8009F798;grades=prologue +0x8009F890 0x8009F988 248 0x8009F988 0 exact term=jr_ra +0x8009F894 - - - - contained inside=0x8009F890;grades=prologue +0x8009F988 0x800A2684 11516 0x800A2684 0 exact term=jr_ra +0x800A2684 0x800A2B04 1152 0x800A2B04 0 exact term=jr_ra +0x800A2B04 0x800A2F20 1052 0x800A2F20 0 exact term=jr_ra +0x800A2F20 0x800A2F44 36 0x800A2F44 0 exact term=jr_ra +0x800A2F44 0x800A30D4 400 0x800A30D4 0 exact term=jr_ra +0x800A30D4 0x800A3358 644 0x800A3358 0 exact term=jr_ra +0x800A3358 0x800A3400 168 0x800A3400 0 exact term=jr_ra +0x800A3400 0x800A34E8 232 0x800A34E8 0 exact term=jr_ra +0x800A34E8 0x800A3540 88 0x800A3540 0 exact term=jr_ra +0x800A3540 0x800A3600 192 0x800A3600 0 exact term=jr_ra +0x800A3600 0x800A38B8 696 0x800A38B8 0 exact term=jr_ra +0x800A38B8 0x800A3D34 1148 0x800A3D34 0 exact term=jr_ra +0x800A3D34 0x800A44CC 1944 0x800A45E0 276 exact term=jr_ra +0x800A44CC - - - - standalone grades=prologue +0x800A45E0 0x800A466C 140 0x800A466C 0 exact term=jr_ra +0x800A466C 0x800A4764 248 0x800A4764 0 exact term=jr_ra +0x800A4674 - - - - contained inside=0x800A466C;grades=prologue +0x800A4764 0x800A47E0 124 0x800A47E0 0 exact term=jr_ra +0x800A47E0 0x800A4AC8 744 0x800A4AC8 0 exact term=jr_ra +0x800A4AC8 0x800A4B70 168 0x800A4B70 0 exact term=jr_ra +0x800A4B70 0x800A4CA8 312 0x800A4CA8 0 exact term=jr_ra +0x800A4CA8 0x800A4D1C 116 0x800A4D2C 16 exact term=jr_ra +0x800A4D2C 0x800A4E48 284 0x800A4E48 0 exact term=jr_ra +0x800A4E48 0x800A4F20 216 0x800A4F20 0 exact term=jr_ra +0x800A4E50 - - - - contained inside=0x800A4E48;grades=prologue +0x800A4F20 0x800A4F8C 108 0x800A4F8C 0 exact term=jr_ra +0x800A4F8C 0x800A5180 500 0x800A5180 0 exact term=jr_ra +0x800A5180 0x800A5228 168 0x800A5228 0 exact term=jr_ra +0x800A5228 0x800A5C1C 2548 0x800A5C1C 0 exact term=jr_ra +0x800A5C1C 0x800A5CC8 172 0x800A5CC8 0 exact term=jr_ra +0x800A5CC8 0x800A5CEC 36 0x800A5CEC 0 exact term=jr_ra +0x800A5CEC 0x800A5D24 56 0x800A5D24 0 exact term=jr_ra +0x800A5D24 0x800A5EBC 408 0x800A5EBC 0 exact term=jr_ra +0x800A5D34 - - - - contained inside=0x800A5D24;grades=prologue +0x800A5EBC 0x800A613C 640 0x800A613C 0 exact term=jr_ra +0x800A613C 0x800A623C 256 0x800A623C 0 exact term=jr_ra +0x800A623C 0x800A6268 44 0x800A6268 0 exact term=jr_ra +0x800A6268 0x800A6294 44 0x800A6294 0 exact term=jr_ra +0x800A6294 0x800A631C 136 0x800A631C 0 exact term=jr_ra +0x800A631C 0x800A63D0 180 0x800A63D0 0 exact term=jr_ra +0x800A6324 - - - - contained inside=0x800A631C;grades=prologue +0x800A63D0 0x800A648C 188 0x800A648C 0 exact term=jr_ra +0x800A648C 0x800A64C8 60 0x800A64C8 0 exact term=jr_ra +0x800A64C8 0x800A6574 172 0x800A6574 0 exact term=jr_ra +0x800A6574 0x800A6658 228 0x800A6658 0 exact term=jr_ra +0x800A6658 0x800A66B0 88 0x800A66B0 0 exact term=jr_ra +0x800A66B0 0x800A67E4 308 0x800A6840 92 exact term=jr_ra +0x800A67E4 - - - - standalone grades=prologue +0x800A6840 0x800A6880 64 0x800A6880 0 exact term=jr_ra +0x800A6880 0x800A6934 180 0x800A6934 0 exact term=jr_ra +0x800A6934 0x800A6998 100 0x800A6998 0 exact term=jr_ra +0x800A6998 0x800A6A18 128 0x800A6A18 0 exact term=jr_ra +0x800A6A18 0x800A6A70 88 0x800A6A70 0 exact term=jr_ra +0x800A6A70 0x800A6B38 200 0x800A6B38 0 exact term=jr_ra +0x800A6B38 0x800A6BA0 104 0x800A6BEC 76 exact term=jr_ra +0x800A6BEC 0x800A6C34 72 0x800A6C34 0 exact term=jr_ra +0x800A6C34 0x800A6C8C 88 0x800A6C8C 0 exact term=jr_ra +0x800A6C8C 0x800A6E9C 528 0x800A6E9C 0 exact term=jr_ra +0x800A6E9C 0x800A6FAC 272 0x800A6FAC 0 exact term=jr_ra +0x800A6FAC 0x800A745C 1200 0x800A745C 0 exact term=jr_ra +0x800A745C 0x800A74BC 96 0x800A74BC 0 exact term=jr_ra +0x800A7460 - - - - contained inside=0x800A745C;grades=prologue +0x800A74BC 0x800A74D0 20 0x800A74D0 0 exact term=jr_ra +0x800A74D0 0x800A75CC 252 0x800A75CC 0 exact term=jr_ra +0x800A74D8 - - - - contained inside=0x800A74D0;grades=prologue +0x800A75CC 0x800A76AC 224 0x800A76AC 0 exact term=jr_ra +0x800A76AC 0x800A7E68 1980 0x800A7E68 0 indirect jr_reg=0x800A79F0;lower_bound=0x800A7E68 +0x800A76B4 - - - - standalone grades=prologue +0x800A7E68 0x800A80B8 592 0x800A80B8 0 exact term=jr_ra +0x800A80B8 0x800A8138 128 0x800A8138 0 exact term=jr_ra +0x800A8138 0x800A8224 236 0x800A8224 0 exact term=jr_ra +0x800A813C - - - - contained inside=0x800A8138;grades=prologue +0x800A8224 0x800A82D0 172 0x800A82D0 0 exact term=jr_ra +0x800A82D0 0x800A8310 64 0x800A8310 0 exact term=jr_ra +0x800A8310 0x800A8464 340 0x800A8464 0 exact term=jr_ra +0x800A8464 0x800A84E8 132 0x800A84E8 0 exact term=jr_ra +0x800A84E8 0x800A8564 124 0x800A8564 0 exact term=jr_ra +0x800A8564 0x800A86B4 336 0x800A86B4 0 exact term=jr_ra +0x800A86B4 0x800A8700 76 0x800A8700 0 exact term=jr_ra +0x800A8700 0x800A88A0 416 0x800A88A0 0 exact term=jr_ra +0x800A88A0 0x800A8920 128 0x800A8920 0 exact term=jr_ra +0x800A8920 0x800A8984 100 0x800A8984 0 exact term=jr_ra +0x800A8984 0x800A8A40 188 0x800A8A40 0 exact term=jr_ra +0x800A8A40 0x800A8AEC 172 0x800A8AEC 0 exact term=jr_ra +0x800A8AEC 0x800A8B48 92 0x800A8B48 0 exact term=jr_ra +0x800A8B48 0x800A8B8C 68 0x800A8B8C 0 exact term=jr_ra +0x800A8B8C 0x800A8C34 168 0x800A8E00 460 exact term=jr_ra +0x800A8C34 - - - - standalone grades=prologue +0x800A8E00 0x800A8E58 88 0x800A8E58 0 exact term=jr_ra +0x800A8E58 0x800A8F18 192 0x800A8F18 0 exact term=jr_ra +0x800A8F18 0x800A96CC 1972 0x800A96CC 0 exact term=jr_ra +0x800A96CC 0x800A9768 156 0x800A9768 0 exact term=jr_ra +0x800A9768 0x800A98CC 356 0x800A98CC 0 exact term=jr_ra +0x800A98CC 0x800A9C24 856 0x800A9C24 0 exact term=jr_ra +0x800A9C24 0x800A9CC4 160 0x800A9CC4 0 exact term=jr_ra +0x800A9CC4 0x800A9D58 148 0x800A9D58 0 exact term=jr_ra +0x800A9D58 0x800A9D90 56 0x800A9D90 0 exact term=jr_ra +0x800A9D90 0x800A9E44 180 0x800A9E44 0 exact term=jr_ra +0x800A9E44 0x800A9EBC 120 0x800A9EF8 60 exact term=jr_ra +0x800A9EBC - - - - standalone grades=prologue +0x800A9EF8 0x800A9F7C 132 0x800A9F7C 0 exact term=jr_ra +0x800A9F7C 0x800A9FD4 88 0x800A9FD4 0 exact term=jr_ra +0x800A9FD4 0x800AA01C 72 0x800AA01C 0 exact term=jr_ra +0x800AA01C 0x800AA0A0 132 0x800AA0A0 0 exact term=jr_ra +0x800AA0A0 0x800AA10C 108 0x800AA10C 0 exact term=jr_ra +0x800AA10C 0x800AA2B4 424 0x800AA2B4 0 exact term=jr_ra +0x800AA2B4 0x800AA2F8 68 0x800AA2F8 0 exact term=jr_ra +0x800AA2F8 0x800AA4AC 436 0x800AA4F4 72 exact term=jr_ra +0x800AA4F4 0x800AA56C 120 0x800AA56C 0 exact term=jr_ra +0x800AA56C 0x800AA59C 48 0x800AA59C 0 exact term=jr_ra +0x800AA59C 0x800AA6AC 272 0x800AA6AC 0 exact term=jr_ra +0x800AA6AC 0x800AA808 348 0x800AA808 0 exact term=jr_ra +0x800AA6B4 - - - - contained inside=0x800AA6AC;grades=prologue +0x800AA808 0x800AAC44 1084 0x800AAC44 0 exact term=jr_ra +0x800AAC44 0x800AAC9C 88 0x800AAC9C 0 exact term=jr_ra +0x800AAC9C 0x800AB078 988 0x800AB078 0 exact term=jr_ra +0x800AB078 0x800AB0EC 116 0x800AB0EC 0 exact term=jr_ra +0x800AB0EC 0x800AB3CC 736 0x800AB3CC 0 exact term=jr_ra +0x800AB3CC 0x800AB504 312 0x800AB504 0 exact term=jr_ra +0x800AB504 0x800AB598 148 0x800AB598 0 exact term=jr_ra +0x800AB598 0x800AB6CC 308 0x800AB6CC 0 indirect jr_reg=0x800AB5BC;lower_bound=0x800AB6CC +0x800AB6CC 0x800AB858 396 0x800AB858 0 indirect jr_reg=0x800AB710;lower_bound=0x800AB858 +0x800AB858 0x800ABA28 464 0x800ABA28 0 indirect jr_reg=0x800AB888;lower_bound=0x800ABA28 +0x800ABA28 0x800ABB88 352 0x800ABB88 0 exact term=jr_ra +0x800ABA30 - - - - contained inside=0x800ABA28;grades=prologue +0x800ABB88 0x800ABF10 904 0x800ABF10 0 exact term=jr_ra +0x800ABF10 0x800AC2C4 948 0x800AC2C4 0 exact term=jr_ra +0x800AC2C4 0x800AC648 900 0x800AC648 0 exact term=jr_ra +0x800AC648 0x800AC694 76 0x800AC694 0 exact term=jr_ra +0x800AC694 0x800AC7A0 268 0x800AC7A0 0 exact term=jr_ra +0x800AC7A0 0x800AC818 120 0x800AC818 0 exact term=jr_ra +0x800AC818 0x800AC85C 68 0x800AC85C 0 exact term=jr_ra +0x800AC85C 0x800AC884 40 0x800AC884 0 exact term=jr_ra +0x800AC864 - - - - contained inside=0x800AC85C;grades=prologue +0x800AC884 0x800AC98C 264 0x800AC98C 0 exact term=jr_ra +0x800AC98C 0x800AC9D8 76 0x800AC9D8 0 exact term=jr_ra +0x800AC9D8 0x800ACA10 56 0x800ACA10 0 exact term=jr_ra +0x800ACA10 0x800ACAC8 184 0x800ACAC8 0 exact term=jr_ra +0x800ACAC8 0x800ACB34 108 0x800ACB34 0 exact term=jr_ra +0x800ACB34 0x800ACC00 204 0x800ACC00 0 exact term=jr_ra +0x800ACC00 0x800ACC20 32 0x800ACCD8 184 exact term=jr_ra +0x800ACCD8 0x800ACDAC 212 0x800ACDAC 0 exact term=jr_ra +0x800ACDAC 0x800ACED4 296 0x800ACED4 0 exact term=jr_ra +0x800ACED4 0x800ACFA8 212 0x800ACFA8 0 exact term=jr_ra +0x800ACFA8 0x800AD068 192 0x800AD068 0 exact term=jr_ra +0x800AD068 0x800AD104 156 0x800AD104 0 exact term=jr_ra +0x800AD104 0x800AD1C8 196 0x800AD1C8 0 exact term=jr_ra +0x800AD1C8 0x800AD258 144 0x800AD3D4 380 exact term=jr_ra +0x800AD258 - - - - standalone grades=prologue +0x800AD3D4 0x800AD484 176 0x800AD484 0 exact term=jr_ra +0x800AD484 0x800AD698 532 0x800AD698 0 exact term=jr_ra +0x800AD698 0x800AD7E8 336 0x800AD7E8 0 exact term=jr_ra +0x800AD6A0 - - - - contained inside=0x800AD698;grades=prologue +0x800AD7E8 0x800AD9A8 448 0x800AD9A8 0 exact term=jr_ra +0x800AD7F0 - - - - contained inside=0x800AD7E8;grades=prologue +0x800AD9A8 0x800ADA80 216 0x800ADB30 176 exact term=jr_ra +0x800ADA80 - - - - standalone grades=prologue +0x800ADB30 0x800ADC74 324 0x800ADC74 0 exact term=jr_ra +0x800ADB38 - - - - contained inside=0x800ADB30;grades=prologue +0x800ADC74 0x800ADDE8 372 0x800ADDE8 0 exact term=jr_ra +0x800ADDE8 0x800ADF18 304 0x800ADF18 0 exact term=jr_ra +0x800ADF18 0x800ADFA0 136 0x800AE0F4 340 exact term=jr_ra +0x800ADFA0 - - - - standalone grades=prologue +0x800AE0F4 0x800AE10C 24 0x800AE10C 0 exact term=jr_ra +0x800AE10C 0x800AE268 348 0x800AE268 0 exact term=jr_ra +0x800AE268 0x800AE358 240 0x800AE358 0 exact term=jr_ra +0x800AE358 0x800AE458 256 0x800AE458 0 exact term=jr_ra +0x800AE458 0x800AE4DC 132 0x800AE4DC 0 exact term=jr_ra +0x800AE45C - - - - contained inside=0x800AE458;grades=prologue +0x800AE4DC 0x800AE548 108 0x800AE548 0 exact term=jr_ra +0x800AE548 0x800AE574 44 0x800AE66C 248 exact term=jr_ra +0x800AE574 - - - - standalone grades=prologue +0x800AE66C 0x800AE6C0 84 0x800AE6C0 0 exact term=jr_ra +0x800AE6C0 0x800AE7A0 224 0x800AE7A0 0 exact term=jr_ra +0x800AE7A0 0x800AE8F0 336 0x800AE8F0 0 exact term=jr_ra +0x800AE7A8 - - - - contained inside=0x800AE7A0;grades=prologue +0x800AE8F0 0x800AE9E0 240 0x800AE9E0 0 exact term=jr_ra +0x800AE9E0 0x800AEBA0 448 0x800AEBA0 0 exact term=jr_ra +0x800AEBA0 0x800AEC48 168 0x800AEC48 0 exact term=jr_ra +0x800AEC48 0x800AF1FC 1460 0x800AF1FC 0 exact term=jr_ra +0x800AF1FC 0x800AF20C 16 0x800AF20C 0 exact term=jr_ra +0x800AF20C 0x800AF260 84 0x800AF260 0 exact term=jr_ra +0x800AF260 0x800AF31C 188 0x800AF3E8 204 exact term=jr_ra +0x800AF268 - - - - contained inside=0x800AF260;grades=prologue +0x800AF324 - - - - standalone grades=prologue +0x800AF3E8 0x800AF538 336 0x800AFACC 1428 exact term=jr_ra +0x800AF538 - - - - standalone grades=prologue +0x800AFACC 0x800AFB1C 80 0x800AFB1C 0 exact term=jr_ra +0x800AFB1C 0x800AFB6C 80 0x800AFB6C 0 exact term=jr_ra +0x800AFB6C 0x800AFDBC 592 0x800AFDBC 0 exact term=jr_ra +0x800AFDBC 0x800AFEB4 248 0x800AFEB4 0 exact term=jr_ra +0x800AFEB4 0x800AFFB8 260 0x800AFFB8 0 exact term=jr_ra +0x800AFFB8 0x800AFFE4 44 0x800B0550 1388 exact term=jr_ra +0x800AFFE4 - - - - standalone grades=prologue +0x800B0550 0x800B0940 1008 0x800B0940 0 exact term=jr_ra +0x800B0558 - - - - contained inside=0x800B0550;grades=prologue +0x800B0940 0x800B0B88 584 0x800B0B88 0 exact term=jr_ra +0x800B0B88 0x800B0BE0 88 0x800B0BE0 0 exact term=jr_ra +0x800B0BE0 0x800B0DE4 516 0x800B0E30 76 exact term=jr_ra +0x800B0E30 0x800B0E64 52 0x800B0E64 0 exact term=jr_ra +0x800B0E64 0x800B0ECC 104 0x800B0ECC 0 exact term=jr_ra +0x800B0ECC 0x800B107C 432 0x800B107C 0 exact term=jr_ra +0x800B107C 0x800B1114 152 0x800B1114 0 exact term=jr_ra +0x800B1114 0x800B129C 392 0x800B129C 0 exact term=jr_ra +0x800B129C 0x800B1A64 1992 0x800B1A64 0 exact term=jr_ra +0x800B1A64 0x800B1BB0 332 0x800B1BB0 0 exact term=jr_ra +0x800B1BB0 0x800B1C34 132 0x800B1C34 0 exact term=jr_ra +0x800B1C34 0x800B1D5C 296 0x800B1D5C 0 exact term=jr_ra +0x800B1D5C 0x800B1DD0 116 0x800B1DD0 0 exact term=jr_ra +0x800B1DD0 0x800B1E80 176 0x800B1E80 0 exact term=jr_ra +0x800B1E80 0x800B1F94 276 0x800B1F94 0 exact term=jr_ra +0x800B1F94 0x800B2048 180 0x800B2048 0 exact term=jr_ra +0x800B2048 0x800B2488 1088 0x800B2488 0 exact term=jr_ra +0x800B2488 0x800B24EC 100 0x800B24EC 0 exact term=jr_ra +0x800B24EC 0x800B2534 72 0x800B2534 0 exact term=jr_ra +0x800B2534 0x800B255C 40 0x800B255C 0 exact term=jr_ra +0x800B255C 0x800B25B8 92 0x800B2B70 1464 exact term=jr_ra +0x800B25F0 - - - - standalone grades=prologue +0x800B2860 - - - - standalone grades=prologue +0x800B2B70 0x800B3474 2308 0x800B3474 0 indirect jr_reg=0x800B2BC4;lower_bound=0x800B2F28 +0x800B2F54 - - - - standalone grades=prologue +0x800B3110 - - - - standalone grades=prologue +0x800B3130 - - - - standalone grades=prologue +0x800B3150 - - - - standalone grades=prologue +0x800B3218 - - - - standalone grades=prologue +0x800B340C - - - - standalone grades=prologue +0x800B3474 0x800B34A4 48 0x800B34A4 0 exact term=jr_ra +0x800B34A4 0x800B34FC 88 0x800B34FC 0 exact term=jr_ra +0x800B34FC 0x800B3554 88 0x800B58C8 9076 exact term=jr_ra +0x800B3554 - - - - standalone grades=prologue +0x800B3788 - - - - standalone grades=prologue +0x800B38F8 - - - - standalone grades=prologue +0x800B3AEC - - - - standalone grades=prologue +0x800B3B54 - - - - standalone grades=prologue +0x800B3D98 - - - - standalone grades=prologue +0x800B4060 - - - - standalone grades=prologue +0x800B422C - - - - standalone grades=prologue +0x800B44E4 - - - - standalone grades=prologue +0x800B4504 - - - - standalone grades=prologue +0x800B4740 - - - - standalone grades=prologue +0x800B4764 - - - - standalone grades=prologue +0x800B47C4 - - - - standalone grades=prologue +0x800B47E4 - - - - standalone grades=prologue +0x800B4804 - - - - standalone grades=prologue +0x800B4824 - - - - standalone grades=prologue +0x800B4858 - - - - standalone grades=prologue +0x800B4940 - - - - standalone grades=prologue +0x800B4BF4 - - - - standalone grades=prologue +0x800B51D8 - - - - standalone grades=prologue +0x800B5524 - - - - standalone grades=prologue +0x800B5544 - - - - standalone grades=prologue +0x800B55F4 - - - - standalone grades=prologue +0x800B56F8 - - - - standalone grades=prologue +0x800B5718 - - - - standalone grades=prologue +0x800B577C - - - - standalone grades=prologue +0x800B579C - - - - standalone grades=prologue +0x800B57D0 - - - - standalone grades=prologue +0x800B58C8 0x800B5924 92 0x800B5924 0 exact term=jr_ra +0x800B5924 0x800B5AA0 380 0x800B5AF0 80 exact term=jr_ra +0x800B5AA0 - - - - standalone grades=prologue +0x800B5AF0 0x800B5AF8 8 0x800B5AF8 0 exact term=jr_ra +0x800B5AF8 0x800B5C5C 356 0x800B5C5C 0 exact term=jr_ra +0x800B5C5C 0x800B5CB4 88 0x800B5CB4 0 exact term=jr_ra +0x800B5CB4 0x800B5CF8 68 0x800B5CF8 0 exact term=jr_ra +0x800B5CF8 0x800B5F5C 612 0x800B5FF0 148 exact term=jr_ra +0x800B5FF0 0x800B6090 160 0x800B6090 0 exact term=jr_ra +0x800B6090 0x800B62C8 568 0x800B62C8 0 exact term=jr_ra +0x800B62C8 0x800B6330 104 0x800B6330 0 exact term=jr_ra +0x800B6330 0x800B6754 1060 0x800B6754 0 exact term=jr_ra +0x800B6754 0x800B67B8 100 0x800B67B8 0 exact term=jr_ra +0x800B67B8 0x800B6838 128 0x800B6838 0 exact term=jr_ra +0x800B6838 0x800B6894 92 0x800B6894 0 exact term=jr_ra +0x800B6894 0x800B6AE0 588 0x800B6AE0 0 exact term=jr_ra +0x800B6AE0 0x800B6B50 112 0x800B6B50 0 exact term=jr_ra +0x800B6AE4 - - - - contained inside=0x800B6AE0;grades=prologue +0x800B6B50 0x800B6BDC 140 0x800B6BDC 0 exact term=jr_ra +0x800B6B54 - - - - contained inside=0x800B6B50;grades=prologue +0x800B6BDC 0x800B6C14 56 0x800B6C14 0 exact term=jr_ra +0x800B6C14 0x800B6C60 76 0x800B6C60 0 exact term=jr_ra +0x800B6C60 0x800B6CB4 84 0x800B6CB4 0 exact term=jr_ra +0x800B6CB4 0x800B6D00 76 0x800B6D00 0 exact term=jr_ra +0x800B6CB8 - - - - contained inside=0x800B6CB4;grades=prologue +0x800B6D00 0x800B6E5C 348 0x800B6E5C 0 exact term=jr_ra +0x800B6D04 - - - - contained inside=0x800B6D00;grades=prologue +0x800B6E5C 0x800B6F64 264 0x800B6F64 0 exact term=jr_ra +0x800B6F64 0x800B704C 232 0x800B704C 0 exact term=jr_ra +0x800B704C 0x800B7190 324 0x800B7190 0 exact term=jr_ra +0x800B7190 0x800B7230 160 0x800B7230 0 exact term=jr_ra +0x800B7230 0x800B7264 52 0x800B7264 0 exact term=jr_ra +0x800B7264 0x800B74D0 620 0x800B74D0 0 exact term=jr_ra +0x800B74D0 0x800B7524 84 0x800B7524 0 exact term=jr_ra +0x800B7524 0x800B78EC 968 0x800B78EC 0 exact term=jr_ra +0x800B78EC 0x800B7E14 1320 0x800B7E14 0 exact term=jr_ra +0x800B7E14 0x800B8958 2884 0x800B8958 0 exact term=jr_ra +0x800B8958 0x800B8DE4 1164 0x800B8DE4 0 exact term=jr_ra +0x800B8DE4 0x800B8E60 124 0x800B8E60 0 exact term=jr_ra +0x800B8E60 0x800B9C64 3588 0x800B9C64 0 exact term=jr_ra +0x800B9C64 0x800BA114 1200 0x800BA114 0 exact term=jr_ra +0x800BA114 0x800BA8D4 1984 0x800BA8D4 0 exact term=jr_ra +0x800BA8D4 0x800BAA48 372 0x800BAA48 0 exact term=jr_ra +0x800BAA48 0x800BAED4 1164 0x800BAED4 0 exact term=jr_ra +0x800BAED4 0x800BB1C4 752 0x800BB1C4 0 exact term=jr_ra +0x800BB1C4 0x800BB2AC 232 0x800BB2AC 0 exact term=jr_ra +0x800BB2AC 0x800BB9FC 1872 0x800BB9FC 0 exact term=jr_ra +0x800BB9FC 0x800BBAC8 204 0x800BBAC8 0 exact term=jr_ra +0x800BBAC8 0x800BBB10 72 0x800BBB10 0 exact term=jr_ra +0x800BBB10 0x800BBC1C 268 0x800BBC1C 0 exact term=jr_ra +0x800BBC1C 0x800BBDEC 464 0x800BBDEC 0 exact term=jr_ra +0x800BBDEC 0x800BBDF8 12 0x800BBDF8 0 exact term=jr_ra +0x800BBDF8 0x800BBE90 152 0x800BBE90 0 exact term=jr_ra +0x800BBE90 0x800BC054 452 0x800BC054 0 exact term=jr_ra +0x800BC054 0x800BC194 320 0x800BC194 0 exact term=jr_ra +0x800BC194 0x800BC658 1220 0x800BC658 0 exact term=jr_ra +0x800BC658 0x800BC6EC 148 0x800BC6EC 0 exact term=jr_ra +0x800BC6EC 0x800BC7D8 236 0x800BC7D8 0 exact term=jr_ra +0x800BC7D8 0x800BC8C4 236 0x800BC8C4 0 exact term=jr_ra +0x800BC8C4 0x800BC960 156 0x800BC960 0 exact term=jr_ra +0x800BC8C8 - - - - contained inside=0x800BC8C4;grades=prologue +0x800BC960 0x800BC9C4 100 0x800BC9C4 0 exact term=jr_ra +0x800BC9C4 0x800BCA14 80 0x800BCA14 0 exact term=jr_ra +0x800BCA14 0x800BCB14 256 0x800BCB14 0 exact term=jr_ra +0x800BCB14 0x800BCBBC 168 0x800BCBBC 0 exact term=jr_ra +0x800BCBBC 0x800BCE20 612 0x800BCE20 0 exact term=jr_ra +0x800BCE20 0x800BD298 1144 0x800BD298 0 exact term=jr_ra +0x800BD298 0x800BD5E8 848 0x800BD5E8 0 exact term=jr_ra +0x800BD5E8 0x800BD764 380 0x800BD764 0 exact term=jr_ra +0x800BD764 0x800BE6D8 3956 0x800BE6D8 0 exact term=jr_ra +0x800BE6D8 0x800BE780 168 0x800BE780 0 exact term=jr_ra +0x800BE780 0x800BE828 168 0x800BE828 0 exact term=jr_ra +0x800BE828 0x800BE9C8 416 0x800BE9C8 0 exact term=jr_ra +0x800BE9C8 0x800BEA28 96 0x800BEA28 0 exact term=jr_ra +0x800BEA28 0x800BF5A8 2944 0x800BF5A8 0 exact term=jr_ra +0x800BF5A8 0x800BF734 396 0x800BF734 0 exact term=jr_ra +0x800BF734 0x800BF968 564 0x800BF968 0 exact term=jr_ra +0x800BF968 0x800BFBAC 580 0x800BFBAC 0 exact term=jr_ra +0x800BFBAC 0x800BFCF4 328 0x800BFCF4 0 exact term=jr_ra +0x800BFCF4 0x800BFE80 396 0x800BFE80 0 exact term=jr_ra +0x800BFE80 0x800BFEA0 32 0x800BFEA0 0 exact term=jr_ra +0x800BFEA0 0x800BFEC0 32 0x800BFEC0 0 exact term=jr_ra +0x800BFEC0 0x800BFEE0 32 0x800BFEE0 0 exact term=jr_ra +0x800BFEE0 0x800BFF00 32 0x800BFF00 0 exact term=jr_ra +0x800BFF00 0x800BFF20 32 0x800BFF20 0 exact term=jr_ra +0x800BFF20 0x800C022C 780 0x800C022C 0 exact term=jr_ra +0x800C022C 0x800C03FC 464 0x800C03FC 0 exact term=jr_ra +0x800C03FC 0x800C0874 1144 0x800C0874 0 exact term=jr_ra +0x800C0874 0x800C0BFC 904 0x800C0BFC 0 indirect jr_reg=0x800C0AE8;lower_bound=0x800C0BFC +0x800C0BFC 0x800C0C88 140 0x800C0C88 0 exact term=jr_ra +0x800C0C88 0x800C1048 960 0x800C1048 0 indirect jr_reg=0x800C0DCC;lower_bound=0x800C1048 +0x800C1048 0x800C110C 196 0x800C110C 0 exact term=jr_ra +0x800C110C 0x800C1184 120 0x800C1304 384 exact term=jr_ra +0x800C1304 0x800C1424 288 0x800C1424 0 exact term=jr_ra +0x800C1424 0x800C14BC 152 0x800C14BC 0 exact term=jr_ra +0x800C14BC 0x800C1A58 1436 0x800C1A58 0 exact term=jr_ra +0x800C1A58 0x800C1E54 1020 0x800C1E54 0 exact term=jr_ra +0x800C1E54 0x800C1EA8 84 0x800C1EA8 0 exact term=jr_ra +0x800C1EA8 0x800C1F04 92 0x800C1F04 0 exact term=jr_ra +0x800C1F04 0x800C2054 336 0x800C2054 0 exact term=jr_ra +0x800C2054 0x800C29D4 2432 0x800C29D4 0 exact term=jr_ra +0x800C29D4 0x800C2C30 604 0x800C2C30 0 exact term=jr_ra +0x800C29DC - - - - contained inside=0x800C29D4;grades=prologue +0x800C2C30 0x800C2CE4 180 0x800C2CE4 0 exact term=jr_ra +0x800C2CE4 0x800C2D88 164 0x800C2D88 0 exact term=jr_ra +0x800C2D88 0x800C2E38 176 0x800C3490 1624 exact term=jr_ra +0x800C2E3C - - - - standalone grades=prologue +0x800C2F34 - - - - standalone grades=prologue +0x800C3038 - - - - standalone grades=prologue +0x800C313C - - - - standalone grades=prologue +0x800C3230 - - - - standalone grades=prologue +0x800C3328 - - - - standalone grades=prologue +0x800C3420 - - - - standalone grades=prologue +0x800C3490 0x800C3514 132 0x800C3514 0 exact term=jr_ra +0x800C3514 0x800C356C 88 0x800C356C 0 exact term=jr_ra +0x800C356C 0x800C3C4C 1760 0x800C3C4C 0 exact term=jr_ra +0x800C3C4C 0x800C417C 1328 0x800C417C 0 exact term=jr_ra +0x800C417C 0x800C49BC 2112 0x800C49BC 0 exact term=jr_ra +0x800C49BC 0x800C4A08 76 0x800C4A08 0 exact term=jr_ra +0x800C4A08 0x800C4B48 320 0x800C4B48 0 escape escape=branch@0x800C4ADC->0x800C4D70 +0x800C4B48 0x800C4CC4 380 0x800C4CC4 0 escape escape=branch@0x800C4B14->0x800C4BA4 +0x800C4CC4 0x800C4D70 172 0x800C4F10 416 exact term=tail_j:0x800C4B48 +0x800C4F10 0x800C5168 600 0x800C5168 0 exact term=jr_ra +0x800C5168 0x800C5278 272 0x800C5278 0 exact term=jr_ra +0x800C5278 0x800C52F4 124 0x800C52F4 0 exact term=jr_ra +0x800C52F4 0x800C54EC 504 0x800C54EC 0 exact term=jr_ra +0x800C54EC 0x800C583C 848 0x800C5AEC 688 exact term=jr_ra +0x800C583C - - - - standalone grades=prologue +0x800C5AEC 0x800C5C84 408 0x800C5C84 0 exact term=jr_ra +0x800C5C84 0x800C5CBC 56 0x800C5CD4 24 exact term=jr_ra +0x800C5CD4 0x800C6168 1172 0x800F2A50 182504 exact term=jr_ra +0x800C5CDC - - - - contained inside=0x800C5CD4;grades=prologue +0x800F2A50 0x800F2F08 1208 0x800F2F08 0 exact term=jr_ra +0x800F2F08 0x800F2F6C 100 0x800F2F6C 0 exact term=jr_ra +0x800F2F6C 0x800F2FB8 76 0x800F2FC0 8 exact term=jr_ra +0x800F2FC0 0x800F3134 372 0x800F3140 12 exact term=jr_ra +0x800F3140 0x800F3160 32 0x800F3160 0 exact term=jr_ra +0x800F3160 0x800F316C 12 0x800F3170 4 exact term=jr_ra +0x800F3170 0x800F3A00 2192 0x800F3A00 0 indirect jr_reg=0x800F342C;lower_bound=0x800F39F4 +0x800F317C - - - - standalone grades=prologue +0x800F3A00 0x800F3A24 36 0x800F3A30 12 exact term=jr_ra +0x800F3A30 0x800F3B08 216 0x800F3B10 8 exact term=jr_ra +0x800F3B10 0x800F3BB4 164 0x800F3BB4 0 exact term=jr_ra +0x800F3BB4 0x800F3C58 164 0x800F3C60 8 exact term=jr_ra +0x800F3C60 0x800F3DC0 352 0x800F3DC0 0 exact term=jr_ra +0x800F3DC0 0x800F3E18 88 0x800F3E18 0 exact term=jr_ra +0x800F3E18 0x800F3E70 88 0x800F3E70 0 exact term=jr_ra +0x800F3E70 0x800F3E88 24 0x800F3E8C 4 exact term=jr_ra +0x800F3E8C 0x800F4000 372 0x800F4000 0 exact term=jr_ra +0x800F4000 0x800F4098 152 0x800F4098 0 exact term=jr_ra +0x800F4098 0x800F4100 104 0x800F4100 0 exact term=jr_ra +0x800F40A0 - - - - contained inside=0x800F4098;grades=prologue +0x800F4100 0x800F421C 284 0x800F421C 0 exact term=jr_ra +0x800F421C 0x800F42AC 144 0x800F42AC 0 exact term=jr_ra +0x800F42AC 0x800F430C 96 0x800F436C 96 exact term=jr_ra +0x800F430C - - - - standalone grades=prologue +0x800F436C 0x800F4424 184 0x800F4424 0 exact term=jr_ra +0x800F4424 0x800F44D0 172 0x800F44D0 0 exact term=jr_ra +0x800F442C - - - - contained inside=0x800F4424;grades=prologue +0x800F44D0 0x800F452C 92 0x800F452C 0 exact term=jr_ra +0x800F452C 0x800F459C 112 0x800F459C 0 exact term=jr_ra +0x800F4534 - - - - contained inside=0x800F452C;grades=prologue +0x800F459C 0x800F465C 192 0x800F465C 0 exact term=jr_ra +0x800F465C 0x800F4B54 1272 0x800F4B54 0 exact term=jr_ra +0x800F4B54 0x800F4B88 52 0x800F4B88 0 exact term=jr_ra +0x800F4B88 0x800F4C08 128 0x800F4C08 0 exact term=jr_ra +0x800F4C08 0x800F4C48 64 0x800F4E40 504 exact term=jr_ra +0x800F4C48 - - - - standalone grades=prologue +0x800F4E40 0x800F50B0 624 0x800F50B0 0 exact term=jr_ra +0x800F50B0 0x800F50D0 32 0x800F50D0 0 exact term=jr_ra +0x800F50D0 0x800F5168 152 0x800F5168 0 exact term=jr_ra +0x800F5168 0x800F5200 152 0x800F5200 0 exact term=jr_ra +0x800F5200 0x800F521C 28 0x800F521C 0 exact term=jr_ra +0x800F521C 0x800F529C 128 0x800F5AF8 2140 exact term=jr_ra +0x800F52B4 - - - - standalone grades=ghidra,prologue +0x800F55C4 - - - - standalone grades=prologue +0x800F5800 - - - - standalone grades=prologue +0x800F5A80 - - - - standalone grades=ghidra +0x800F5AB8 - - - - standalone grades=ghidra +0x800F5AF8 0x800F5B40 72 0x800F5B40 0 exact term=jr_ra +0x800F5B40 0x800F5B70 48 0x800F5B94 36 exact term=jr_ra +0x800F5B70 - - - - standalone grades=prologue +0x800F5B94 0x800F5E44 688 0x800F5E44 0 exact term=jr_ra +0x800F5E44 0x800F60A4 608 0x800F60A4 0 exact term=jr_ra +0x800F5E4C - - - - contained inside=0x800F5E44;grades=prologue +0x800F60A4 0x800F61F4 336 0x800F6330 316 exact term=jr_ra +0x800F61F4 - - - - standalone grades=ghidra,prologue +0x800F6330 0x800F6364 52 0x800F6364 0 exact term=jr_ra +0x800F6364 0x800F64A8 324 0x800F64A8 0 exact term=jr_ra +0x800F64A8 0x800F6548 160 0x800F6570 40 exact term=jr_ra +0x800F6548 - - - - standalone grades=prologue +0x800F6570 0x800F6594 36 0x800F6598 4 exact term=jr_ra +0x800F6598 0x800F662C 148 0x800F6638 12 exact term=jr_ra +0x800F6638 0x800F66B4 124 0x800F66B8 4 exact term=jr_ra +0x800F66B8 0x800F6710 88 0x800F6718 8 exact term=jr_ra +0x800F6718 0x800F6894 380 0x800F6898 4 exact term=jr_ra +0x800F6898 0x800F693C 164 0x800F6948 12 exact term=jr_ra +0x800F68A0 - - - - contained inside=0x800F6898;grades=prologue +0x800F6948 0x800F69BC 116 0x800F69BC 0 exact term=jr_ra +0x800F69BC 0x800F6AD8 284 0x800F6AD8 0 exact term=jr_ra +0x800F6AD8 0x800F6B40 104 0x800F6B40 0 exact term=jr_ra +0x800F6B40 0x800F6D60 544 0x800F6D60 0 exact term=jr_ra +0x800F6D60 0x800F6DD0 112 0x800F6DD0 0 exact term=jr_ra +0x800F6DD0 0x800F6E50 128 0x800F6E50 0 exact term=jr_ra +0x800F6E50 0x800F6ED0 128 0x800F6ED0 0 exact term=jr_ra +0x800F6ED0 0x800F6EFC 44 0x800F6F00 4 exact term=jr_ra +0x800F6F00 0x800F6F10 16 0x800F6F10 0 indirect jr_reg=0x800F6F04;lower_bound=0x800F6F0C +0x800F6F10 0x800F6F20 16 0x800F6F20 0 indirect jr_reg=0x800F6F14;lower_bound=0x800F6F1C +0x800F6F20 0x800F6F5C 60 0x800F6F60 4 exact term=jr_ra +0x800F6F60 0x800F6F70 16 0x800F6F70 0 indirect jr_reg=0x800F6F64;lower_bound=0x800F6F6C +0x800F6F70 0x800F70D0 352 0x800F70D0 0 exact term=jr_ra +0x800F70D0 0x800F75C8 1272 0x800F75D0 8 exact term=jr_ra +0x800F75D0 0x800F760C 60 0x800F7610 4 exact term=jr_ra +0x800F7610 0x800F765C 76 0x800F7660 4 exact term=jr_ra +0x800F7660 0x800F77D8 376 0x800F77D8 0 exact term=jr_ra +0x800F7670 - - - - contained inside=0x800F7660;grades=prologue +0x800F77D8 0x800F7870 152 0x800F7870 0 exact term=jr_ra +0x800F7870 0x800F7924 180 0x800F7930 12 exact term=jr_ra +0x800F7930 0x800F7990 96 0x800F7990 0 exact term=jr_ra +0x800F7990 0x800F79C0 48 0x800F79C0 0 exact term=jr_ra +0x800F7998 - - - - contained inside=0x800F7990;grades=prologue +0x800F79C0 0x800F79F0 48 0x800F79F0 0 exact term=jr_ra +0x800F79C8 - - - - contained inside=0x800F79C0;grades=prologue +0x800F79F0 0x800F7A20 48 0x800F7A20 0 exact term=jr_ra +0x800F79F8 - - - - contained inside=0x800F79F0;grades=prologue +0x800F7A20 0x800F7A54 52 0x800F7A54 0 exact term=jr_ra +0x800F7A54 0x800F7A84 48 0x800F7A84 0 exact term=jr_ra +0x800F7A5C - - - - contained inside=0x800F7A54;grades=prologue +0x800F7A84 0x800F7A94 16 0x800F7A94 0 exact term=jr_ra +0x800F7A94 0x800F7AAC 24 0x800F7B84 216 exact term=jr_ra +0x800F7AAC - - - - standalone grades=ghidra,prologue +0x800F7B84 0x800F7D54 464 0x800F7FB4 608 exact term=jr_ra +0x800F7D54 - - - - standalone grades=ghidra,prologue +0x800F7E9C - - - - standalone grades=prologue +0x800F7F3C - - - - standalone grades=prologue +0x800F7FB4 0x800F7FD8 36 0x800F7FD8 0 exact term=jr_ra +0x800F7FD8 0x800F8138 352 0x800F8294 348 exact term=jr_ra +0x800F8294 0x800F82A4 16 0x800F8638 916 exact term=jr_ra +0x800F8360 - - - - standalone grades=prologue +0x800F8638 0x800F8658 32 0x800F8658 0 exact term=jr_ra +0x800F8658 0x800F8724 204 0x800F8724 0 exact term=jr_ra +0x800F8660 - - - - contained inside=0x800F8658;grades=prologue +0x800F8724 0x800F881C 248 0x800F88F0 212 exact term=jr_ra +0x800F872C - - - - contained inside=0x800F8724;grades=prologue +0x800F8824 - - - - standalone grades=prologue +0x800F88F0 0x800F8928 56 0x800F8928 0 exact term=jr_ra +0x800F88F8 - - - - contained inside=0x800F88F0;grades=prologue +0x800F8928 0x800F8970 72 0x800F897C 12 exact term=jr_ra +0x800F8930 - - - - contained inside=0x800F8928;grades=prologue +0x800F897C 0x800F8A0C 144 0x800F8A0C 0 exact term=jr_ra +0x800F8A0C 0x800F8A48 60 0x800F8ACC 132 exact term=jr_ra +0x800F8A48 - - - - standalone grades=prologue +0x800F8A70 - - - - standalone grades=prologue +0x800F8A98 - - - - standalone grades=prologue +0x800F8ACC 0x800F8ADC 16 0x800F8ADC 0 exact term=jr_ra +0x800F8ADC 0x800F8AEC 16 0x800F8AEC 0 exact term=jr_ra +0x800F8AEC 0x800F8AF8 12 0x800F8AF8 0 exact term=jr_ra +0x800F8AF8 0x800F8B18 32 0x800F8B18 0 exact term=jr_ra +0x800F8B18 0x800F8B38 32 0x800F8B38 0 exact term=jr_ra +0x800F8B38 0x800F8B58 32 0x800F8B58 0 exact term=jr_ra +0x800F8B58 0x800F8B6C 20 0x800F8B6C 0 exact term=jr_ra +0x800F8B6C 0x800F8B80 20 0x800F8B80 0 exact term=jr_ra +0x800F8B80 0x800F8CBC 316 0x800F8CBC 0 exact term=jr_ra +0x800F8CBC 0x800F8DF0 308 0x800F8DF0 0 exact term=jr_ra +0x800F8DF0 0x800F8F3C 332 0x800F8F3C 0 exact term=jr_ra +0x800F8F3C 0x800F8F5C 32 0x800F8F5C 0 exact term=jr_ra +0x800F8F5C 0x800F8F7C 32 0x800F8F7C 0 exact term=jr_ra +0x800F8F7C 0x800F8F9C 32 0x800F8F9C 0 exact term=jr_ra +0x800F8F9C 0x800F8FC0 36 0x800F8FC0 0 exact term=jr_ra +0x800F8FC0 0x800F8FE0 32 0x800F8FE4 4 exact term=jr_ra +0x800F8FE4 0x800F8FF8 20 0x800F8FF8 0 exact term=jr_ra +0x800F8FF8 0x800F9008 16 0x800F9014 12 exact term=jr_ra +0x800F9014 0x800F9088 116 0x800F9094 12 exact term=jr_ra +0x800F9094 0x800F912C 152 0x800F9134 8 exact term=jr_ra +0x800F9134 0x800F9174 64 0x800F9174 0 exact term=jr_ra +0x800F9174 0x800F91F8 132 0x800F9204 12 exact term=jr_ra +0x800F9204 0x800F9298 148 0x800F92A4 12 exact term=jr_ra +0x800F92A4 0x800F9344 160 0x800F9344 0 exact term=jr_ra +0x800F9344 0x800F9380 60 0x800F9380 0 exact term=jr_ra +0x800F9380 0x800F9410 144 0x800F9414 4 exact term=jr_ra +0x800F9414 0x800F95C4 432 0x800F95CC 8 exact term=jr_ra +0x800F95CC 0x800F96E8 284 0x800F96E8 0 exact term=jr_ra +0x800F96E8 0x800F9938 592 0x800F9938 0 exact term=jr_ra +0x800F9938 0x800F9BC4 652 0x800F9BC8 4 exact term=jr_ra +0x800F9BC8 0x800F9CD4 268 0x800F9CD8 4 exact term=jr_ra +0x800F9CD8 0x800F9DBC 228 0x800F9DC8 12 exact term=jr_ra +0x800F9DC8 0x800FA150 904 0x800FA150 0 indirect jr_reg=0x800F9DCC;lower_bound=0x800F9DD4 +0x800F9DD8 - - - - standalone grades=prologue +0x800F9E0C - - - - standalone grades=prologue +0x800FA080 - - - - standalone grades=prologue +0x800FA150 0x800FA338 488 0x800FA338 0 exact term=jr_ra +0x800FA338 0x800FA4D4 412 0x800FA4D4 0 exact term=jr_ra +0x800FA4D4 0x800FA5D8 260 0x800FA5D8 0 exact term=jr_ra +0x800FA5D8 0x800FA65C 132 0x800FA688 44 exact term=jr_ra +0x800FA65C - - - - standalone grades=prologue +0x800FA688 0x800FA960 728 0x800FA960 0 exact term=jr_ra +0x800FA698 - - - - contained inside=0x800FA688;grades=prologue +0x800FA960 0x800FA980 32 0x800FA980 0 exact term=jr_ra +0x800FA980 0x800FAC44 708 0x800FAC44 0 exact term=jr_ra +0x800FAC44 0x800FACE8 164 0x800FACE8 0 exact term=jr_ra +0x800FACE8 0x800FAF84 668 0x800FAF84 0 exact term=jr_ra +0x800FACF0 - - - - contained inside=0x800FACE8;grades=prologue +0x800FAF84 0x800FAFEC 104 0x800FAFF8 12 exact term=jr_ra +0x800FAFF8 0x800FB008 16 0x800FB008 0 indirect jr_reg=0x800FAFFC;lower_bound=0x800FB004 +0x800FB008 0x800FB018 16 0x800FB018 0 indirect jr_reg=0x800FB00C;lower_bound=0x800FB014 +0x800FB018 0x800FB028 16 0x800FB028 0 indirect jr_reg=0x800FB01C;lower_bound=0x800FB024 +0x800FB028 0x800FB038 16 0x800FB038 0 indirect jr_reg=0x800FB02C;lower_bound=0x800FB034 +0x800FB038 0x800FB13C 260 0x800FB13C 0 exact term=jr_ra +0x800FB13C 0x800FB1BC 128 0x800FB1C8 12 exact term=jr_ra +0x800FB1C8 0x800FB224 92 0x800FB228 4 exact term=jr_ra +0x800FB228 0x800FB360 312 0x800FB368 8 exact term=jr_ra +0x800FB368 0x800FB410 168 0x800FB410 0 exact term=break +0x800FB410 0x800FB480 112 0x800FB480 0 exact term=jr_ra +0x800FB418 - - - - contained inside=0x800FB410;grades=prologue +0x800FB480 0x800FB514 148 0x800FB54C 56 exact term=jr_ra +0x800FB54C 0x800FB5B4 104 0x800FB5B4 0 exact term=jr_ra +0x800FB5B4 0x800FB5C4 16 0x800FB5C4 0 indirect jr_reg=0x800FB5B8;lower_bound=0x800FB5C0 +0x800FB5C4 0x800FB5D4 16 0x800FB5D4 0 indirect jr_reg=0x800FB5C8;lower_bound=0x800FB5D0 +0x800FB5D4 0x800FB5DC 8 0x800FB5E4 8 exact term=jr_ra +0x800FB5E4 0x800FB5FC 24 0x800FB6C4 200 exact term=jr_ra +0x800FB600 - - - - standalone grades=prologue +0x800FB6C4 0x800FB6D8 20 0x800FB6D8 0 exact term=jr_ra +0x800FB6D8 0x800FB758 128 0x800FB758 0 exact term=jr_ra +0x800FB6DC - - - - contained inside=0x800FB6D8;grades=prologue +0x800FB758 0x800FB7C8 112 0x800FB7C8 0 exact term=jr_ra +0x800FB7C8 0x800FB8EC 292 0x800FB8EC 0 exact term=jr_ra +0x800FB8EC 0x800FBB20 564 0x800FBB20 0 exact term=jr_ra +0x800FBB20 0x800FBBA0 128 0x800FBBA0 0 exact term=jr_ra +0x800FBB24 - - - - contained inside=0x800FBB20;grades=prologue +0x800FBBA0 0x800FBD80 480 0x800FBD80 0 exact term=jr_ra +0x800FBBA4 - - - - contained inside=0x800FBBA0;grades=prologue +0x800FBD80 0x800FBDC0 64 0x800FBDC0 0 exact term=jr_ra +0x800FBDC0 0x800FBDF8 56 0x800FBDF8 0 exact term=jr_ra +0x800FBDF8 0x800FBE04 12 0x800FBE04 0 exact term=jr_ra +0x800FBE04 0x800FBE84 128 0x800FBE84 0 exact term=jr_ra +0x800FBE84 0x800FBF5C 216 0x800FBF5C 0 exact term=jr_ra +0x800FBF5C 0x800FBF94 56 0x800FC280 748 exact term=jr_ra +0x800FBF94 - - - - standalone grades=prologue +0x800FC280 0x800FC2CC 76 0x800FC2CC 0 exact term=jr_ra +0x800FC2CC 0x800FC2D8 12 0x800FC2D8 0 exact term=jr_ra +0x800FC2D8 0x800FC774 1180 0x800FC774 0 indirect jr_reg=0x800FC37C;lower_bound=0x800FC774 +0x800FC774 0x800FC8D0 348 0x800FC8D0 0 exact term=jr_ra +0x800FC8D0 0x800FC9F0 288 0x800FC9F0 0 exact term=jr_ra +0x800FC9F0 0x800FCA90 160 0x800FCA90 0 exact term=jr_ra +0x800FCA90 0x800FCB1C 140 0x800FCB4C 48 exact term=jr_ra +0x800FCB4C 0x800FCC30 228 0x800FCC30 0 exact term=jr_ra +0x800FCC30 0x800FCC48 24 0x800FCC48 0 exact term=jr_ra +0x800FCC48 0x800FCF60 792 0x800FCF60 0 exact term=jr_ra +0x800FCF60 0x800FCFDC 124 0x800FCFDC 0 exact term=jr_ra +0x800FCFDC 0x800FD120 324 0x800FD120 0 exact term=jr_ra +0x800FD120 0x800FD220 256 0x800FD220 0 exact term=jr_ra +0x800FD220 0x800FD278 88 0x800FD278 0 exact term=jr_ra +0x800FD278 0x800FD674 1020 0x800FD834 448 exact term=jr_ra +0x800FD674 - - - - standalone grades=prologue +0x800FD834 0x800FDAA0 620 0x800FDB08 104 exact term=jr_ra +0x800FDAA0 - - - - standalone grades=prologue +0x800FDB08 0x800FDB94 140 0x800FDB94 0 exact term=jr_ra +0x800FDB94 0x800FDC38 164 0x800FDE54 540 exact term=jr_ra +0x800FDC38 - - - - standalone grades=prologue +0x800FDE54 0x800FDE9C 72 0x800FDE9C 0 exact term=jr_ra +0x800FDE9C 0x800FE844 2472 0x800FE844 0 indirect jr_reg=0x800FDFB4;lower_bound=0x800FE844 +0x800FE844 0x800FE86C 40 0x800FE86C 0 exact term=jr_ra +0x800FE86C 0x800FE878 12 0x800FE878 0 exact term=jr_ra +0x800FE878 0x800FE970 248 0x800FE970 0 exact term=jr_ra +0x800FE970 0x800FE9C4 84 0x800FE9C4 0 exact term=jr_ra +0x800FE9C4 0x800FECF8 820 0x800FECF8 0 exact term=jr_ra +0x800FECF8 0x800FED84 140 0x800FED84 0 exact term=jr_ra +0x800FED84 0x800FEE3C 184 0x800FEE3C 0 exact term=jr_ra +0x800FEE3C 0x800FEEB8 124 0x800FEEB8 0 exact term=jr_ra +0x800FEEB8 0x800FEED0 24 0x800FEED0 0 exact term=jr_ra +0x800FEED0 0x800FEFFC 300 0x800FEFFC 0 exact term=jr_ra +0x800FEED4 - - - - contained inside=0x800FEED0;grades=prologue +0x800FEFFC 0x800FF008 12 0x800FF008 0 exact term=jr_ra +0x800FF008 0x800FF0E4 220 0x800FF0E4 0 exact term=jr_ra +0x800FF0E4 0x800FF184 160 0x800FF184 0 exact term=jr_ra +0x800FF184 0x800FF43C 696 0x800FF43C 0 exact term=jr_ra +0x800FF43C 0x800FF47C 64 0x800FF47C 0 exact term=jr_ra +0x800FF47C 0x800FF4BC 64 0x800FF4BC 0 exact term=jr_ra +0x800FF4BC 0x800FF5A8 236 0x800FF5A8 0 exact term=jr_ra +0x800FF5A8 0x800FF6A4 252 0x800FF6A4 0 exact term=jr_ra +0x800FF5AC - - - - contained inside=0x800FF5A8;grades=prologue +0x800FF6A4 0x800FF6DC 56 0x800FF6DC 0 exact term=jr_ra +0x800FF6DC 0x800FF728 76 0x800FF758 48 exact term=jr_ra +0x800FF72C - - - - standalone grades=prologue +0x800FF758 0x800FF800 168 0x800FF800 0 exact term=jr_ra +0x800FF800 0x800FFA8C 652 0x800FFB74 232 exact term=jr_ra +0x800FFA8C - - - - standalone grades=prologue +0x800FFB74 0x800FFBBC 72 0x800FFBBC 0 exact term=jr_ra +0x800FFBBC 0x800FFBEC 48 0x800FFBEC 0 exact term=jr_ra +0x800FFBEC 0x800FFC3C 80 0x800FFC3C 0 exact term=jr_ra +0x800FFBF0 - - - - contained inside=0x800FFBEC;grades=prologue +0x800FFC3C 0x800FFDB4 376 0x800FFDB4 0 exact term=jr_ra +0x800FFDB4 0x800FFF60 428 0x800FFF60 0 exact term=jr_ra +0x800FFF60 0x800FFFEC 140 0x800FFFEC 0 exact term=jr_ra +0x800FFFEC 0x80100038 76 0x80100038 0 exact term=jr_ra +0x80100038 0x801000A0 104 0x801000A0 0 exact term=jr_ra +0x801000A0 0x80100120 128 0x80100120 0 exact term=jr_ra +0x80100120 0x801001C4 164 0x801001C4 0 exact term=jr_ra +0x801001C4 0x80100254 144 0x80100254 0 exact term=jr_ra +0x80100254 0x80100318 196 0x80100318 0 exact term=jr_ra +0x80100318 0x80100334 28 0x80100334 0 exact term=jr_ra +0x80100334 0x8010036C 56 0x8010036C 0 exact term=jr_ra +0x8010036C 0x801003A4 56 0x801003A4 0 exact term=jr_ra +0x801003A4 0x80100438 148 0x80100438 0 exact term=jr_ra +0x80100438 0x80100508 208 0x80100508 0 exact term=jr_ra +0x80100508 0x80100598 144 0x80100598 0 exact term=jr_ra +0x80100598 0x80100660 200 0x80100660 0 exact term=jr_ra +0x80100660 0x80100740 224 0x80100740 0 exact term=jr_ra +0x80100740 0x801007E0 160 0x801007E0 0 exact term=jr_ra +0x801007E0 0x80100808 40 0x80100808 0 fallthrough hit=0x80100808 +0x80100808 0x8010080C 4 0x8010080C 0 fallthrough hit=0x8010080C +0x8010080C 0x801008DC 208 0x801008DC 0 exact term=jr_ra +0x801008DC 0x80100934 88 0x80100964 48 exact term=jr_ra +0x80100934 - - - - standalone grades=prologue +0x80100964 0x8010097C 24 0x8010097C 0 exact term=jr_ra +0x8010097C 0x80100998 28 0x80100998 0 exact term=jr_ra +0x80100998 0x801009E8 80 0x801009E8 0 exact term=jr_ra +0x801009E8 0x80100B10 296 0x80100B2C 28 exact term=jr_ra +0x801009EC - - - - contained inside=0x801009E8;grades=prologue +0x80100B2C 0x80101244 1816 0x80101244 0 exact term=jr_ra +0x80100B30 - - - - contained inside=0x80100B2C;grades=prologue +0x80101244 0x8010128C 72 0x8010128C 0 exact term=jr_ra +0x8010128C 0x80101678 1004 0x80101678 0 exact term=jr_ra +0x80101678 0x80101764 236 0x80101764 0 exact term=jr_ra +0x80101764 0x80101838 212 0x80101838 0 exact term=jr_ra +0x80101838 0x80101878 64 0x80101878 0 exact term=jr_ra +0x80101878 0x80101A54 476 0x80101C2C 472 exact term=jr_ra +0x80101A54 - - - - standalone grades=prologue +0x80101C2C 0x80101C54 40 0x80101C5C 8 exact term=jr_ra +0x80101C5C 0x80101C7C 32 0x80101C7C 0 exact term=jr_ra +0x80101C7C 0x80101CAC 48 0x80101CAC 0 exact term=jr_ra +0x80101CAC 0x80101CDC 48 0x80101CDC 0 exact term=jr_ra +0x80101CDC 0x80101E44 360 0x80101E50 12 exact term=jr_ra +0x80101E50 0x80101E9C 76 0x80101EA0 4 exact term=jr_ra +0x80101EA0 0x80101EB0 16 0x80101EB0 0 indirect jr_reg=0x80101EA4;lower_bound=0x80101EAC +0x80101EB0 0x801027CC 2332 0x801027CC 0 exact term=jr_ra +0x801027CC 0x801027F8 44 0x801027F8 0 exact term=jr_ra +0x801027F8 0x801029A0 424 0x801029A0 0 exact term=jr_ra +0x801029A0 0x80102A00 96 0x80102A00 0 exact term=jr_ra +0x80102A00 0x80102A80 128 0x80102A80 0 exact term=jr_ra +0x80102A80 0x80102B04 132 0x80102B10 12 exact term=jr_ra +0x80102B10 0x80102B2C 28 0x80102B30 4 exact term=jr_ra +0x80102B30 0x80102B5C 44 0x80102B60 4 exact term=jr_ra +0x80102B60 0x80102C18 184 0x80102C20 8 exact term=jr_ra +0x80102C20 0x80102CCC 172 0x80102CD0 4 exact term=jr_ra +0x80102CD0 0x80102E08 312 0x80102E10 8 exact term=jr_ra +0x80102E10 0x80102E20 16 0x80102E20 0 indirect jr_reg=0x80102E14;lower_bound=0x80102E1C +0x80102E20 0x80102F58 312 0x80102F58 0 exact term=jr_ra +0x80102E24 - - - - contained inside=0x80102E20;grades=prologue +0x80102F58 0x80102F94 60 0x80102F94 0 exact term=jr_ra +0x80102F5C - - - - contained inside=0x80102F58;grades=prologue +0x80102F94 0x80102FA4 16 0x80102FA4 0 indirect jr_reg=0x80102F98;lower_bound=0x80102FA0 +0x80102FA4 0x80102FD4 48 0x80102FD4 0 exact term=jr_ra +0x80102FD4 0x80102FE0 12 0x80102FE4 4 exact term=jr_ra +0x80102FE4 0x80103014 48 0x80103014 0 exact term=jr_ra +0x80103014 0x80103024 16 0x80103024 0 indirect jr_reg=0x80103018;lower_bound=0x80103020 +0x80103024 0x80103090 108 0x80103094 4 exact term=jr_ra +0x80103094 0x8010312C 152 0x80103134 8 exact term=jr_ra +0x80103134 0x80103144 16 0x80103144 0 indirect jr_reg=0x80103138;lower_bound=0x80103140 +0x80103144 0x801031BC 120 0x801031C4 8 exact term=jr_ra +0x801031C4 0x801032CC 264 0x801032D4 8 exact term=jr_ra +0x801031CC - - - - contained inside=0x801031C4;grades=prologue +0x801032D4 0x80103320 76 0x80103324 4 exact term=jr_ra +0x80103324 0x80103430 268 0x80103434 4 exact term=jr_ra +0x80103434 0x80103540 268 0x80103544 4 exact term=jr_ra +0x80103544 0x801037FC 696 0x80103804 8 exact term=jr_ra +0x80103804 0x80103A90 652 0x80103A94 4 exact term=jr_ra +0x80103A94 0x80103AA0 12 0x80103AA4 4 exact term=jr_ra +0x80103AA4 0x80103AC8 36 0x80103AD4 12 exact term=jr_ra +0x80103AD4 0x80103B4C 120 0x80103B54 8 exact term=jr_ra +0x80103B54 0x80103B60 12 0x80103B60 0 exact term=jr_ra +0x80103B60 0x80103B6C 12 0x80103B6C 0 exact term=jr_ra +0x80103B6C 0x80103B8C 32 0x80103B8C 0 exact term=jr_ra +0x80103B8C 0x80103BE4 88 0x80103C7C 152 exact term=jr_ra +0x80103BEC - - - - standalone grades=prologue +0x80103C7C 0x80103CA0 36 0x80103CB4 20 exact term=jr_ra +0x80103CB4 0x80103CCC 24 0x80103CCC 0 indirect jr_reg=0x80103CB8;lower_bound=0x80103CC0 +0x80103CCC 0x80103CDC 16 0x80103CDC 0 indirect jr_reg=0x80103CD0;lower_bound=0x80103CD8 +0x80103CDC 0x80103CEC 16 0x80103CEC 0 indirect jr_reg=0x80103CE0;lower_bound=0x80103CE8 +0x80103CEC 0x80103CFC 16 0x80103CFC 0 indirect jr_reg=0x80103CF0;lower_bound=0x80103CF8 +0x80103CFC 0x80103D0C 16 0x80103D0C 0 indirect jr_reg=0x80103D00;lower_bound=0x80103D08 +0x80103D0C 0x80103D58 76 0x80103F84 556 exact term=jr_ra +0x80103D60 - - - - standalone grades=prologue +0x80103F84 0x80103FA8 36 0x80103FB4 12 exact term=jr_ra +0x80103FB4 0x80103FCC 24 0x80103FCC 0 indirect jr_reg=0x80103FB8;lower_bound=0x80103FC0 +0x80103FCC 0x80103FD4 8 0x80103FDC 8 exact term=syscall +0x80103FDC 0x80103FEC 16 0x80103FEC 0 indirect jr_reg=0x80103FE0;lower_bound=0x80103FE8 +0x80103FEC 0x80103FF4 8 0x80103FFC 8 exact term=syscall +0x80103FFC 0x8010400C 16 0x8010400C 0 indirect jr_reg=0x80104000;lower_bound=0x80104008 +0x8010400C 0x80104038 44 0x80104230 504 exact term=jr_ra +0x80104040 - - - - standalone grades=prologue +0x801040A8 - - - - standalone grades=prologue +0x80104230 0x801042FC 204 0x801042FC 0 exact term=jr_ra +0x801042FC 0x80104630 820 0x80104630 0 exact term=jr_ra +0x80104630 0x80104720 240 0x80104720 0 exact term=jr_ra +0x80104720 0x80104930 528 0x80104930 0 exact term=jr_ra +0x80104930 0x80104BA8 632 0x80104BA8 0 exact term=jr_ra +0x80104BA8 0x80104C38 144 0x80104C38 0 exact term=jr_ra +0x80104C38 0x80104C60 40 0x80104C6C 12 exact term=jr_ra +0x80104C6C 0x80104CA0 52 0x80105014 884 exact term=jr_ra +0x80104CA0 - - - - standalone grades=prologue +0x80104DB0 - - - - standalone grades=prologue +0x80105014 0x801050F4 224 0x8010512C 56 exact term=jr_ra +0x8010512C 0x8010513C 16 0x8010513C 0 indirect jr_reg=0x80105130;lower_bound=0x80105138 +0x8010513C 0x80105148 12 0x80105148 0 exact term=jr_ra +0x80105148 0x801051CC 132 0x801051CC 0 exact term=jr_ra +0x801051CC 0x8010543C 624 0x8010543C 0 exact term=jr_ra +0x8010543C 0x80105474 56 0x80105474 0 exact term=jr_ra +0x80105474 0x80105548 212 0x801059E8 1184 exact term=jr_ra +0x80105548 - - - - standalone grades=prologue +0x801059E8 0x80105A50 104 0x80105B34 228 exact term=jr_ra +0x80105B34 0x80105B54 32 0x80105B54 0 exact term=jr_ra +0x80105B54 0x80105B68 20 0x80105B68 0 exact term=jr_ra +0x80105B68 0x80105B88 32 0x80105B88 0 exact term=jr_ra +0x80105B88 0x80105BA8 32 0x80105BA8 0 exact term=jr_ra +0x80105BA8 0x80105BC8 32 0x80105BC8 0 exact term=jr_ra +0x80105BC8 0x80105BDC 20 0x80105BE0 4 exact term=jr_ra +0x80105BE0 0x80105BF0 16 0x80105BF0 0 indirect jr_reg=0x80105BE4;lower_bound=0x80105BEC +0x80105BF0 0x80106154 1380 0x80106154 0 indirect jr_reg=0x80105E4C;lower_bound=0x80106154 +0x80106154 0x801063D4 640 0x801063D4 0 exact term=jr_ra +0x801063D4 0x8010669C 712 0x8010669C 0 exact term=jr_ra +0x8010669C 0x80106AA8 1036 0x80106AA8 0 exact term=jr_ra +0x801066A4 - - - - contained inside=0x8010669C;grades=prologue +0x80106AA8 0x80106B30 136 0x80106B30 0 exact term=jr_ra +0x80106B30 0x80106C04 212 0x80106C04 0 exact term=jr_ra +0x80106C04 0x80106CF4 240 0x80106CF4 0 exact term=jr_ra +0x80106CF4 0x80106ED4 480 0x80106ED4 0 exact term=jr_ra +0x80106ED4 0x8010703C 360 0x8010703C 0 exact term=jr_ra +0x8010703C 0x8010713C 256 0x8010713C 0 exact term=jr_ra +0x8010713C 0x80107228 236 0x80107314 236 exact term=jr_ra +0x8010723C - - - - standalone grades=prologue +0x80107314 0x80107338 36 0x80107338 0 indirect jr_reg=0x80107318;lower_bound=0x80107320 +0x80107338 0x80107368 48 0x80107398 48 exact term=jr_ra +0x80107398 0x80107458 192 0x80107458 0 exact term=jr_ra +0x80107458 0x801074E4 140 0x801074E4 0 exact term=jr_ra +0x80107468 - - - - contained inside=0x80107458;grades=prologue +0x801074E4 0x801074F4 16 0x801074F4 0 indirect jr_reg=0x801074E8;lower_bound=0x801074F0 +0x801074F4 0x80107874 896 0x80107874 0 indirect jr_reg=0x80107604;lower_bound=0x80107870 +0x80107874 0x8010789C 40 0x801078A4 8 exact term=jr_ra +0x801078A4 0x80107A94 496 0x80107A94 0 exact term=jr_ra +0x80107A94 0x80107AA0 12 0x80107AA0 0 exact term=jr_ra +0x80107AA0 0x80107AE0 64 0x80107AE0 0 exact term=jr_ra +0x80107AE0 0x80107B20 64 0x80107B20 0 exact term=jr_ra +0x80107B20 0x80107B38 24 0x80107B40 8 exact term=jr_ra +0x80107B40 0x80107B84 68 0x80107B84 0 exact term=jr_ra +0x80107B84 0x80107C5C 216 0x80107C5C 0 exact term=jr_ra +0x80107B88 - - - - contained inside=0x80107B84;grades=prologue +0x80107C5C 0x80107CCC 112 0x80107CCC 0 exact term=jr_ra +0x80107CCC 0x80107D18 76 0x80107D18 0 exact term=jr_ra +0x80107D18 0x80107D7C 100 0x80107D7C 0 exact term=jr_ra +0x80107D7C 0x80107DE8 108 0x80107DE8 0 exact term=jr_ra +0x80107DE8 0x80107E68 128 0x80107E68 0 exact term=jr_ra +0x80107E68 0x80107E74 12 0x80107E74 0 exact term=jr_ra +0x80107E74 0x80107E84 16 0x80107E84 0 exact term=jr_ra +0x80107E84 0x80107E90 12 0x80107E90 0 exact term=jr_ra +0x80107E90 0x80107F0C 124 0x80107F10 4 exact term=jr_ra +0x80107F10 0x80107FAC 156 0x80107FAC 0 exact term=jr_ra +0x80107FAC 0x80107FDC 48 0x80107FDC 0 exact term=jr_ra +0x80107FDC 0x80108010 52 0x80108014 4 exact term=jr_ra +0x80108014 0x80108024 16 0x80108024 0 indirect jr_reg=0x80108018;lower_bound=0x80108020 +0x80108024 0x80108034 16 0x80108034 0 exact term=jr_ra +0x80108034 0x8010804C 24 0x8010804C 0 exact term=jr_ra +0x8010804C 0x8010805C 16 0x8010805C 0 exact term=jr_ra +0x8010805C 0x8010806C 16 0x8010806C 0 indirect jr_reg=0x80108060;lower_bound=0x80108068 +0x8010806C 0x801080B8 76 0x801080B8 0 exact term=jr_ra +0x801080B8 0x80108168 176 0x80108168 0 exact term=jr_ra +0x80108168 0x80108284 284 0x80108284 0 exact term=jr_ra +0x80108284 0x80108434 432 0x80108434 0 exact term=jr_ra +0x80108434 0x801084EC 184 0x801084EC 0 exact term=jr_ra +0x801084EC 0x80108578 140 0x80108578 0 exact term=jr_ra +0x80108578 0x801085B0 56 0x801085B0 0 exact term=jr_ra +0x801085B0 0x801085D0 32 0x801085D0 0 exact term=jr_ra +0x801085D0 0x801085E0 16 0x801085E0 0 indirect jr_reg=0x801085D4;lower_bound=0x801085DC +0x801085E0 0x80108690 176 0x80108690 0 exact term=jr_ra +0x80108690 0x801086AC 28 0x801086B0 4 exact term=jr_ra +0x801086B0 0x8010870C 92 0x80108710 4 exact term=jr_ra +0x80108710 0x80108734 36 0x80108740 12 exact term=jr_ra +0x80108740 0x801087C8 136 0x801087D0 8 exact term=jr_ra +0x801087D0 0x8010898C 444 0x80108990 4 exact term=jr_ra +0x80108990 0x801089B4 36 0x801089C0 12 exact term=jr_ra +0x801089C0 0x80108FC0 1536 0x80108FC0 0 indirect jr_reg=0x80108BD4;lower_bound=0x80108FB8 +0x80108FC0 0x80108FD0 16 0x80108FD0 0 indirect jr_reg=0x80108FC4;lower_bound=0x80108FCC +0x80108FD0 0x80108FE0 16 0x80108FE0 0 indirect jr_reg=0x80108FD4;lower_bound=0x80108FDC +0x80108FE0 0x80108FF0 16 0x80108FF0 0 indirect jr_reg=0x80108FE4;lower_bound=0x80108FEC +0x80108FF0 0x80109000 16 0x80109000 0 indirect jr_reg=0x80108FF4;lower_bound=0x80108FFC +0x80109000 0x80109010 16 0x80109010 0 indirect jr_reg=0x80109004;lower_bound=0x8010900C +0x80109010 0x801091AC 412 0x801092B0 260 exact term=jr_ra +0x801091AC - - - - standalone grades=prologue +0x801092B0 0x801092C0 16 0x801092C0 0 indirect jr_reg=0x801092B4;lower_bound=0x801092BC +0x801092C0 0x801092F4 52 0x80109300 12 exact term=jr_ra +0x80109300 0x80109314 20 0x80109314 0 exact term=jr_ra +0x80109314 0x80109338 36 0x80109338 0 exact term=jr_ra +0x80109338 0x801094CC 404 0x801094D8 12 exact term=jr_ra +0x801094D8 0x801095A4 204 0x801095A8 4 exact term=jr_ra +0x801095A8 0x80109774 460 0x80109778 4 exact term=jr_ra +0x80109778 0x80109790 24 0x801097A0 16 exact term=jr_ra +0x801097A0 0x80109820 128 0x80109828 8 exact term=jr_ra +0x80109828 0x80109838 16 0x80109838 0 indirect jr_reg=0x8010982C;lower_bound=0x80109834 +0x80109838 0x80109848 16 0x80109848 0 indirect jr_reg=0x8010983C;lower_bound=0x80109844 +0x80109848 0x80109868 32 0x80109868 0 exact term=jr_ra +0x80109868 0x80109908 160 0x80109F38 1584 exact term=jr_ra +0x80109908 - - - - standalone grades=prologue +0x80109960 - - - - standalone grades=prologue +0x80109A30 - - - - standalone grades=prologue +0x80109AD4 - - - - standalone grades=prologue +0x80109BA0 - - - - standalone grades=prologue +0x80109F38 0x80109F48 16 0x80109F48 0 exact term=jr_ra +0x80109F48 0x8010A1C8 640 0x8010A1C8 0 exact term=jr_ra +0x8010A1C8 0x8010A388 448 0x8010A444 188 exact term=jr_ra +0x8010A1D8 - - - - contained inside=0x8010A1C8;grades=prologue +0x8010A444 0x8010A6C4 640 0x8010A6C4 0 exact term=jr_ra +0x8010A454 - - - - contained inside=0x8010A444;grades=prologue +0x8010A6C4 0x8010A748 132 0x8010A748 0 exact term=jr_ra +0x8010A6CC - - - - contained inside=0x8010A6C4;grades=prologue +0x8010A748 0x8010A78C 68 0x8010A78C 0 exact term=jr_ra +0x8010A78C 0x8010A830 164 0x8010A888 88 exact term=jr_ra +0x8010A888 0x8010A8B0 40 0x8010A8B0 0 exact term=jr_ra +0x8010A8B0 0x8010A8D8 40 0x8010A8D8 0 exact term=jr_ra +0x8010A8D8 0x8010A934 92 0x8010A940 12 exact term=jr_ra +0x8010A940 0x8010AA28 232 0x8010AA28 0 exact term=jr_ra +0x8010AA28 0x8010AA98 112 0x8010AAA0 8 exact term=jr_ra +0x8010AAA0 0x8010AABC 28 0x8010AAC0 4 exact term=jr_ra +0x8010AAC0 0x8010AAE4 36 0x8010AAF0 12 exact term=jr_ra +0x8010AAF0 0x8010ABC0 208 0x8010ABC0 0 exact term=jr_ra +0x8010ABC0 0x8010AE7C 700 0x8010AE80 4 exact term=jr_ra +0x8010AE80 0x8010AE90 16 0x8010AE90 0 indirect jr_reg=0x8010AE84;lower_bound=0x8010AE8C +0x8010AE90 0x8010AEA0 16 0x8010AEA0 0 indirect jr_reg=0x8010AE94;lower_bound=0x8010AE9C +0x8010AEA0 0x8010AEB0 16 0x8010AEB0 0 indirect jr_reg=0x8010AEA4;lower_bound=0x8010AEAC +0x8010AEB0 0x8010AF3C 140 0x8010AF40 4 exact term=jr_ra +0x8010AF40 0x8010AF50 16 0x8010AF50 0 indirect jr_reg=0x8010AF44;lower_bound=0x8010AF4C +0x8010AF50 0x8010B420 1232 0x8010B420 0 exact term=jr_ra +0x8010B420 0x8010B4CC 172 0x8010B500 52 exact term=jr_ra +0x8010B500 0x80140808 217864 0x80140808 0 indirect jr_reg=0x8010B504;lower_bound=0x8010B50C +0x80140808 0x8014080C 4 0x8014080C 0 fallthrough hit=0x8014080C +0x8014080C 0x80142A40 8756 0x80142A40 0 fallthrough hit=0x80142A40 +0x80142A40 0x80146C90 16976 0x80146C90 0 fallthrough hit=0x80146C90 +0x80146C90 0x80146D00 112 0x80146D00 0 fallthrough hit=0x80146D00 +0x80146D00 0x80146D50 80 0x80146D50 0 fallthrough hit=0x80146D50 +0x80146D50 0x80146FBC 620 0x80146FBC 0 fallthrough hit=0x80146FBC +0x80146FBC 0x801471CC 528 0x801471CC 0 fallthrough hit=0x801471CC +0x801471CC 0x80147248 124 0x80147248 0 fallthrough hit=0x80147248 +0x80147248 0x80147400 440 0x80147400 0 fallthrough hit=0x80147400 +0x80147400 0x80147538 312 0x80147538 0 fallthrough hit=0x80147538 +0x80147538 0x8014762C 244 0x8014762C 0 fallthrough hit=0x8014762C +0x8014762C 0x80147650 36 0x80147650 0 fallthrough hit=0x80147650 +0x80147650 0x80147660 16 0x80147660 0 fallthrough hit=0x80147660 +0x80147660 0x801478A8 584 0x801478A8 0 fallthrough hit=0x801478A8 +0x801478A8 0x801478C8 32 0x801478C8 0 fallthrough hit=0x801478C8 +0x801478C8 0x80147960 152 0x80147960 0 fallthrough hit=0x80147960 +0x80147960 0x80147BEC 652 0x80147BEC 0 fallthrough hit=0x80147BEC +0x80147BEC 0x80147C6C 128 0x80147C6C 0 fallthrough hit=0x80147C6C +0x80147C6C 0x80147CE0 116 0x80147CE0 0 fallthrough hit=0x80147CE0 +0x80147CE0 0x80147D40 96 0x80147D40 0 fallthrough hit=0x80147D40 +0x80147D40 0x80147D74 52 0x80147D74 0 fallthrough hit=0x80147D74 +0x80147D74 0x80147D80 12 0x80147D80 0 fallthrough hit=0x80147D80 +0x80147D80 0x80147DFC 124 0x80147DFC 0 fallthrough hit=0x80147DFC +0x80147DFC 0x80147E1C 32 0x80147E1C 0 fallthrough hit=0x80147E1C +0x80147E1C 0x80147E40 36 0x80147E40 0 fallthrough hit=0x80147E40 +0x80147E40 0x80147F30 240 0x80147F30 0 fallthrough hit=0x80147F30 +0x80147F30 0x80147FC0 144 0x80147FC0 0 fallthrough hit=0x80147FC0 +0x80147FC0 0x8014804C 140 0x8014804C 0 fallthrough hit=0x8014804C +0x8014804C 0x801480E0 148 0x801480E0 0 fallthrough hit=0x801480E0 +0x801480E0 0x8014818C 172 0x8014818C 0 fallthrough hit=0x8014818C +0x8014818C 0x80148210 132 0x80148210 0 fallthrough hit=0x80148210 +0x80148210 0x80148240 48 0x80148240 0 fallthrough hit=0x80148240 +0x80148240 0x801482B0 112 0x801482B0 0 fallthrough hit=0x801482B0 +0x801482B0 0x801482F0 64 0x801482F0 0 fallthrough hit=0x801482F0 +0x801482F0 0x80148674 900 0x80148674 0 fallthrough hit=0x80148674 +0x80148674 0x80148D6C 1784 0x80148D6C 0 fallthrough hit=0x80148D6C +0x80148D6C 0x80148FC4 600 0x80148FC4 0 fallthrough hit=0x80148FC4 +0x80148FC4 0x8014921C 600 0x8014921C 0 fallthrough hit=0x8014921C +0x8014921C 0x80149478 604 0x80149478 0 fallthrough hit=0x80149478 +0x80149478 0x8014948C 20 0x8014948C 0 fallthrough hit=0x8014948C +0x8014948C 0x801495A8 284 0x801495A8 0 fallthrough hit=0x801495A8 +0x801495A8 0x801496A4 252 0x801496A4 0 fallthrough hit=0x801496A4 +0x801496A4 0x801497CC 296 0x801497CC 0 fallthrough hit=0x801497CC +0x801497CC 0x801498CC 256 0x801498CC 0 fallthrough hit=0x801498CC +0x801498CC 0x80149928 92 0x80149928 0 fallthrough hit=0x80149928 +0x80149928 0x801499B8 144 0x801499B8 0 fallthrough hit=0x801499B8 +0x801499B8 0x80149A00 72 0x80149A00 0 fallthrough hit=0x80149A00 +0x80149A00 0x80149A10 16 0x80149A10 0 fallthrough hit=0x80149A10 +0x80149A10 0x80149A8C 124 0x80149A8C 0 fallthrough hit=0x80149A8C +0x80149A8C 0x80149AF8 108 0x80149AF8 0 fallthrough hit=0x80149AF8 +0x80149AF8 0x80149BB0 184 0x80149BB0 0 fallthrough hit=0x80149BB0 +0x80149BB0 0x80149D8C 476 0x80149D8C 0 fallthrough hit=0x80149D8C +0x80149D8C 0x80149E40 180 0x80149E40 0 fallthrough hit=0x80149E40 +0x80149E40 0x80149F48 264 0x80149F48 0 fallthrough hit=0x80149F48 +0x80149F48 0x8014A020 216 0x8014A020 0 fallthrough hit=0x8014A020 +0x8014A020 0x8014A0F8 216 0x8014A0F8 0 fallthrough hit=0x8014A0F8 +0x8014A0F8 0x8014A134 60 0x8014A134 0 fallthrough hit=0x8014A134 +0x8014A134 0x8014A170 60 0x8014A170 0 fallthrough hit=0x8014A170 +0x8014A170 0x8014A180 16 0x8014A180 0 fallthrough hit=0x8014A180 +0x8014A180 0x8014A1C0 64 0x8014A1C0 0 fallthrough hit=0x8014A1C0 +0x8014A1C0 0x8014A1D0 16 0x8014A1D0 0 fallthrough hit=0x8014A1D0 +0x8014A1D0 0x8014A5A0 976 0x8014A5A0 0 fallthrough hit=0x8014A5A0 +0x8014A5A0 0x8014AC60 1728 0x8014AC60 0 fallthrough hit=0x8014AC60 +0x8014AC60 0x8014AC70 16 0x8014AC70 0 fallthrough hit=0x8014AC70 +0x8014AC70 0x8014AC80 16 0x8014AC80 0 fallthrough hit=0x8014AC80 +0x8014AC80 0x8014AC90 16 0x8014AC90 0 fallthrough hit=0x8014AC90 +0x8014AC90 0x8014AD6C 220 0x8014AD6C 0 fallthrough hit=0x8014AD6C +0x8014AD6C 0x8014AE00 148 0x8014AE00 0 fallthrough hit=0x8014AE00 +0x8014AE00 0x8014AE70 112 0x8014AE70 0 fallthrough hit=0x8014AE70 +0x8014AE70 0x8014AEB0 64 0x8014AEB0 0 fallthrough hit=0x8014AEB0 +0x8014AEB0 0x8014AEC0 16 0x8014AEC0 0 fallthrough hit=0x8014AEC0 +0x8014AEC0 0x8014F07C 16828 0x8014F07C 0 fallthrough hit=0x8014F07C +0x8014F07C 0x8014F51C 1184 0x8014F51C 0 fallthrough hit=0x8014F51C +0x8014F51C 0x801509BC 5280 0x801509BC 0 fallthrough hit=0x801509BC +0x801509BC 0x80150EB0 1268 0x80150EB0 0 fallthrough hit=0x80150EB0 +0x80150EB0 0x80151098 488 0x80151098 0 fallthrough hit=0x80151098 +0x80151098 0x80151294 508 0x80151294 0 fallthrough hit=0x80151294 +0x80151294 0x801512D4 64 0x801512D4 0 fallthrough hit=0x801512D4 +0x801512D4 0x801513B0 220 0x801513B0 0 fallthrough hit=0x801513B0 +0x801513B0 0x801515F4 580 0x801515F4 0 fallthrough hit=0x801515F4 +0x801515F4 0x80151600 12 0x80151600 0 fallthrough hit=0x80151600 +0x80151600 0x80151660 96 0x80151660 0 fallthrough hit=0x80151660 +0x80151660 0x80151680 32 0x80151680 0 fallthrough hit=0x80151680 +0x80151680 0x80151968 744 0x80151968 0 fallthrough hit=0x80151968 +0x80151968 0x80151A08 160 0x80151A08 0 fallthrough hit=0x80151A08 +0x80151A08 0x80151AF4 236 0x80151AF4 0 fallthrough hit=0x80151AF4 +0x80151AF4 0x80151B64 112 0x80151B64 0 fallthrough hit=0x80151B64 +0x80151B64 0x80151C64 256 0x80151C64 0 fallthrough hit=0x80151C64 +0x80151C64 0x80151CEC 136 0x80151CEC 0 fallthrough hit=0x80151CEC +0x80151CEC 0x80151D80 148 0x80151D80 0 fallthrough hit=0x80151D80 +0x80151D80 0x801520AC 812 0x801520AC 0 fallthrough hit=0x801520AC +0x801520AC 0x80152144 152 0x80152144 0 fallthrough hit=0x80152144 +0x80152144 0x801521EC 168 0x801521EC 0 fallthrough hit=0x801521EC +0x801521EC 0x80152258 108 0x80152258 0 fallthrough hit=0x80152258 +0x80152258 0x801522D0 120 0x801522D0 0 fallthrough hit=0x801522D0 +0x801522D0 0x8015230C 60 0x8015230C 0 fallthrough hit=0x8015230C +0x8015230C 0x8015236C 96 0x8015236C 0 fallthrough hit=0x8015236C +0x8015236C 0x80152408 156 0x80152408 0 fallthrough hit=0x80152408 +0x80152408 0x801525B8 432 0x801525B8 0 fallthrough hit=0x801525B8 +0x801525B8 0x8015272C 372 0x8015272C 0 fallthrough hit=0x8015272C +0x8015272C 0x80152C88 1372 0x80152C88 0 fallthrough hit=0x80152C88 +0x80152C88 0x80152E3C 436 0x80152E3C 0 fallthrough hit=0x80152E3C +0x80152E3C 0x80152F68 300 0x80152F68 0 fallthrough hit=0x80152F68 +0x80152F68 0x80153034 204 0x80153034 0 fallthrough hit=0x80153034 +0x80153034 0x80153140 268 0x80153140 0 fallthrough hit=0x80153140 +0x80153140 0x801532A4 356 0x801532A4 0 fallthrough hit=0x801532A4 +0x801532A4 0x80153458 436 0x80153458 0 fallthrough hit=0x80153458 +0x80153458 0x801536E8 656 0x801536E8 0 fallthrough hit=0x801536E8 +0x801536E8 0x80153868 384 0x80153868 0 fallthrough hit=0x80153868 +0x80153868 0x801538D4 108 0x801538D4 0 fallthrough hit=0x801538D4 +0x801538D4 0x80153ABC 488 0x80153ABC 0 fallthrough hit=0x80153ABC +0x80153ABC 0x80153DD0 788 0x80153DD0 0 fallthrough hit=0x80153DD0 +0x80153DD0 0x80154060 656 0x80154060 0 fallthrough hit=0x80154060 +0x80154060 0x801540D4 116 0x801540D4 0 fallthrough hit=0x801540D4 +0x801540D4 0x801540FC 40 0x801540FC 0 fallthrough hit=0x801540FC +0x801540FC 0x801541AC 176 0x801541AC 0 fallthrough hit=0x801541AC +0x801541AC 0x8015450C 864 0x8015450C 0 fallthrough hit=0x8015450C +0x8015450C 0x80155678 4460 0x80155678 0 fallthrough hit=0x80155678 +0x80155678 0x80155F64 2284 0x80155F64 0 fallthrough hit=0x80155F64 +0x80155F64 0x80155FFC 152 0x80155FFC 0 fallthrough hit=0x80155FFC +0x80155FFC 0x80156328 812 0x80156328 0 fallthrough hit=0x80156328 +0x80156328 0x801564B4 396 0x801564B4 0 fallthrough hit=0x801564B4 +0x801564B4 0x80156548 148 0x80156548 0 fallthrough hit=0x80156548 +0x80156548 0x801569A0 1112 0x801569A0 0 fallthrough hit=0x801569A0 +0x801569A0 0x80156B24 388 0x80156B24 0 fallthrough hit=0x80156B24 +0x80156B24 0x80156D78 596 0x80156D78 0 fallthrough hit=0x80156D78 +0x80156D78 0x80156FD8 608 0x80156FD8 0 fallthrough hit=0x80156FD8 +0x80156FD8 0x80159DE8 11792 0x80159DE8 0 fallthrough hit=0x80159DE8 +0x80159DE8 0x80159FD0 488 0x80159FD0 0 fallthrough hit=0x80159FD0 +0x80159FD0 0x8015EE38 20072 0x8015EE38 0 fallthrough hit=0x8015EE38 +0x8015EE38 0x8015EE9C 100 0x8015EE9C 0 fallthrough hit=0x8015EE9C +0x8015EE9C 0x8015F200 868 0x8015F200 0 fallthrough hit=0x8015F200 +0x8015F200 0x8015F4AC 684 0x8015F4AC 0 fallthrough hit=0x8015F4AC +0x8015F4AC 0x8015F554 168 0x8015F554 0 fallthrough hit=0x8015F554 +0x8015F554 0x8015F590 60 0x8015F590 0 fallthrough hit=0x8015F590 +0x8015F590 0x801617F4 8804 0x801617F4 0 fallthrough hit=0x801617F4 +0x801617F4 0x80161924 304 0x80161924 0 fallthrough hit=0x80161924 +0x80161924 0x8016192C 8 0x8016192C 0 fallthrough hit=0x8016192C +0x8016192C 0x80161978 76 0x80161978 0 fallthrough hit=0x80161978 +0x80161978 0x80161A74 252 0x80161A74 0 fallthrough hit=0x80161A74 +0x80161A74 0x80161B70 252 0x80161B70 0 fallthrough hit=0x80161B70 +0x80161B70 0x80162070 1280 0x80162070 0 fallthrough hit=0x80162070 +0x80162070 0x80162690 1568 0x80162690 0 fallthrough hit=0x80162690 +0x80162690 0x80162830 416 0x80162830 0 fallthrough hit=0x80162830 +0x80162830 0x80162AA8 632 0x80162AA8 0 fallthrough hit=0x80162AA8 +0x80162AA8 0x80162B10 104 0x80162B10 0 fallthrough hit=0x80162B10 +0x80162B10 0x80162FCC 1212 0x80162FCC 0 fallthrough hit=0x80162FCC +0x80162FCC 0x80163034 104 0x80163034 0 fallthrough hit=0x80163034 +0x80163034 0x80163114 224 0x80163114 0 fallthrough hit=0x80163114 +0x80163114 0x80163CB8 2980 0x80163CB8 0 fallthrough hit=0x80163CB8 +0x80163CB8 0x80163D78 192 0x80163D78 0 fallthrough hit=0x80163D78 +0x80163D78 0x80163E24 172 0x80163E24 0 fallthrough hit=0x80163E24 +0x80163E24 0x801640B0 652 0x801640B0 0 fallthrough hit=0x801640B0 +0x801640B0 0x8016420C 348 0x8016420C 0 fallthrough hit=0x8016420C +0x8016420C 0x801643B0 420 0x801643B0 0 fallthrough hit=0x801643B0 +0x801643B0 0x801644AC 252 0x801644AC 0 fallthrough hit=0x801644AC +0x801644AC 0x80164568 188 0x80164568 0 fallthrough hit=0x80164568 +0x80164568 0x80164624 188 0x80164624 0 fallthrough hit=0x80164624 +0x80164624 0x80164824 512 0x80164824 0 fallthrough hit=0x80164824 +0x80164824 0x8016486C 72 0x8016486C 0 fallthrough hit=0x8016486C +0x8016486C 0x801648E8 124 0x801648E8 0 fallthrough hit=0x801648E8 +0x801648E8 0x8016498C 164 0x8016498C 0 fallthrough hit=0x8016498C +0x8016498C 0x80164AFC 368 0x80164AFC 0 fallthrough hit=0x80164AFC +0x80164AFC 0x80164B94 152 0x80164B94 0 fallthrough hit=0x80164B94 +0x80164B94 0x80164CF4 352 0x80164CF4 0 fallthrough hit=0x80164CF4 +0x80164CF4 0x80164DFC 264 0x80164DFC 0 fallthrough hit=0x80164DFC +0x80164DFC 0x80164F5C 352 0x80164F5C 0 fallthrough hit=0x80164F5C +0x80164F5C 0x80165058 252 0x80165058 0 fallthrough hit=0x80165058 +0x80165058 0x80165450 1016 0x80165450 0 fallthrough hit=0x80165450 +0x80165450 0x80165828 984 0x80165828 0 fallthrough hit=0x80165828 +0x80165828 0x80165FF8 2000 0x80165FF8 0 fallthrough hit=0x80165FF8 +0x80165FF8 0x80166088 144 0x80166088 0 fallthrough hit=0x80166088 +0x80166088 0x80166528 1184 0x80166528 0 fallthrough hit=0x80166528 +0x80166528 0x801665E4 188 0x801665E4 0 fallthrough hit=0x801665E4 +0x801665E4 0x80166A00 1052 0x80166A00 0 fallthrough hit=0x80166A00 +0x80166A00 0x80166BEC 492 0x80166BEC 0 fallthrough hit=0x80166BEC +0x80166BEC 0x80166EAC 704 0x80166EAC 0 fallthrough hit=0x80166EAC +0x80166EAC 0x80166FBC 272 0x80166FBC 0 fallthrough hit=0x80166FBC +0x80166FBC 0x80167174 440 0x80167174 0 fallthrough hit=0x80167174 +0x80167174 0x8016729C 296 0x8016729C 0 fallthrough hit=0x8016729C +0x8016729C 0x8016733C 160 0x8016733C 0 fallthrough hit=0x8016733C +0x8016733C 0x801679E0 1700 0x801679E0 0 fallthrough hit=0x801679E0 +0x801679E0 0x80167E68 1160 0x80167E68 0 fallthrough hit=0x80167E68 +0x80167E68 0x80167F38 208 0x80167F38 0 fallthrough hit=0x80167F38 +0x80167F38 0x80168288 848 0x80168288 0 fallthrough hit=0x80168288 +0x80168288 0x8016829C 20 0x8016829C 0 fallthrough hit=0x8016829C +0x8016829C 0x80168638 924 0x80168638 0 fallthrough hit=0x80168638 +0x80168638 0x801687B0 376 0x801687B0 0 fallthrough hit=0x801687B0 +0x801687B0 0x80168910 352 0x80168910 0 fallthrough hit=0x80168910 +0x80168910 0x80168A48 312 0x80168A48 0 fallthrough hit=0x80168A48 +0x80168A48 0x801690CC 1668 0x801690CC 0 fallthrough hit=0x801690CC +0x801690CC 0x80169374 680 0x80169374 0 fallthrough hit=0x80169374 +0x80169374 0x80169448 212 0x80169448 0 fallthrough hit=0x80169448 +0x80169448 0x8016946C 36 0x8016946C 0 fallthrough hit=0x8016946C +0x8016946C 0x80169490 36 0x80169490 0 fallthrough hit=0x80169490 +0x80169490 0x801694EC 92 0x801694EC 0 fallthrough hit=0x801694EC +0x801694EC 0x80169540 84 0x80169540 0 fallthrough hit=0x80169540 +0x80169540 0x801696A0 352 0x801696A0 0 fallthrough hit=0x801696A0 +0x801696A0 0x80169840 416 0x80169840 0 fallthrough hit=0x80169840 +0x80169840 0x80169944 260 0x80169944 0 fallthrough hit=0x80169944 +0x80169944 0x80169994 80 0x80169994 0 fallthrough hit=0x80169994 +0x80169994 0x801699F0 92 0x801699F0 0 fallthrough hit=0x801699F0 +0x801699F0 0x80169CD4 740 0x80169CD4 0 fallthrough hit=0x80169CD4 +0x80169CD4 0x8016A004 816 0x8016A004 0 fallthrough hit=0x8016A004 +0x8016A004 0x8016A05C 88 0x8016A05C 0 fallthrough hit=0x8016A05C +0x8016A05C 0x8016A830 2004 0x8016A830 0 fallthrough hit=0x8016A830 +0x8016A830 0x8016A974 324 0x8016A974 0 fallthrough hit=0x8016A974 +0x8016A974 0x8016AA20 172 0x8016AA20 0 fallthrough hit=0x8016AA20 +0x8016AA20 0x8016AAB4 148 0x8016AAB4 0 fallthrough hit=0x8016AAB4 +0x8016AAB4 0x8016ADA8 756 0x8016ADA8 0 fallthrough hit=0x8016ADA8 +0x8016ADA8 0x8016ADF0 72 0x8016ADF0 0 fallthrough hit=0x8016ADF0 +0x8016ADF0 0x8016AE30 64 0x8016AE30 0 fallthrough hit=0x8016AE30 +0x8016AE30 0x8016B298 1128 0x8016B298 0 fallthrough hit=0x8016B298 +0x8016B298 0x8016B348 176 0x8016B348 0 fallthrough hit=0x8016B348 +0x8016B348 0x8016B524 476 0x8016B524 0 fallthrough hit=0x8016B524 +0x8016B524 0x8016B564 64 0x8016B564 0 fallthrough hit=0x8016B564 +0x8016B564 0x8016B8F4 912 0x8016B8F4 0 fallthrough hit=0x8016B8F4 +0x8016B8F4 0x8016C0C4 2000 0x8016C0C4 0 fallthrough hit=0x8016C0C4 +0x8016C0C4 0x8016C164 160 0x8016C164 0 fallthrough hit=0x8016C164 +0x8016C164 0x8016C1C4 96 0x8016C1C4 0 fallthrough hit=0x8016C1C4 +0x8016C1C4 0x8016C27C 184 0x8016C27C 0 fallthrough hit=0x8016C27C +0x8016C27C 0x8016C324 168 0x8016C324 0 fallthrough hit=0x8016C324 +0x8016C324 0x8016C47C 344 0x8016C47C 0 fallthrough hit=0x8016C47C +0x8016C47C 0x8016C4D4 88 0x8016C4D4 0 fallthrough hit=0x8016C4D4 +0x8016C4D4 0x8016C75C 648 0x8016C75C 0 fallthrough hit=0x8016C75C +0x8016C75C 0x8016C808 172 0x8016C808 0 fallthrough hit=0x8016C808 +0x8016C808 0x8016C838 48 0x8016C838 0 fallthrough hit=0x8016C838 +0x8016C838 0x8016C850 24 0x8016C850 0 fallthrough hit=0x8016C850 +0x8016C850 0x8016C8E4 148 0x8016C8E4 0 fallthrough hit=0x8016C8E4 +0x8016C8E4 0x8016CA70 396 0x8016CA70 0 fallthrough hit=0x8016CA70 +0x8016CA70 0x8016CAA4 52 0x8016CAA4 0 fallthrough hit=0x8016CAA4 +0x8016CAA4 0x8016CD48 676 0x8016CD48 0 fallthrough hit=0x8016CD48 +0x8016CD48 0x8016CDEC 164 0x8016CDEC 0 fallthrough hit=0x8016CDEC +0x8016CDEC 0x8016CF84 408 0x8016CF84 0 fallthrough hit=0x8016CF84 +0x8016CF84 0x8016D090 268 0x8016D090 0 fallthrough hit=0x8016D090 +0x8016D090 0x8016D108 120 0x8016D108 0 fallthrough hit=0x8016D108 +0x8016D108 0x8016D1D0 200 0x8016D1D0 0 fallthrough hit=0x8016D1D0 +0x8016D1D0 0x8016D364 404 0x8016D364 0 fallthrough hit=0x8016D364 +0x8016D364 0x8016D3D8 116 0x8016D3D8 0 fallthrough hit=0x8016D3D8 +0x8016D3D8 0x8016D818 1088 0x8016D818 0 fallthrough hit=0x8016D818 +0x8016D818 0x8016D88C 116 0x8016D88C 0 fallthrough hit=0x8016D88C +0x8016D88C 0x8016D9AC 288 0x8016D9AC 0 fallthrough hit=0x8016D9AC +0x8016D9AC 0x8016DA80 212 0x8016DA80 0 fallthrough hit=0x8016DA80 +0x8016DA80 0x8016DDA8 808 0x8016DDA8 0 fallthrough hit=0x8016DDA8 +0x8016DDA8 0x8016DDE0 56 0x8016DDE0 0 fallthrough hit=0x8016DDE0 +0x8016DDE0 0x8016E2D8 1272 0x8016E2D8 0 fallthrough hit=0x8016E2D8 +0x8016E2D8 0x8016E32C 84 0x8016E32C 0 fallthrough hit=0x8016E32C +0x8016E32C 0x8016E494 360 0x8016E494 0 fallthrough hit=0x8016E494 +0x8016E494 0x8016E4DC 72 0x8016E4DC 0 fallthrough hit=0x8016E4DC +0x8016E4DC 0x8016E504 40 0x8016E504 0 fallthrough hit=0x8016E504 +0x8016E504 0x8016E60C 264 0x8016E60C 0 fallthrough hit=0x8016E60C +0x8016E60C 0x8016E93C 816 0x8016E93C 0 fallthrough hit=0x8016E93C +0x8016E93C 0x8017D5C0 60548 0x8017D5C0 0 indirect jr_reg=0x8017075C;lower_bound=0x80170764 +0x8017D5C0 0x8017D75C 412 0x801800C4 10600 exact term=syscall +0x801800C4 0x801801B8 244 0x80180808 1616 exact term=syscall +0x80180808 0x8018080C 4 0x8018080C 0 fallthrough hit=0x8018080C +0x8018080C 0x80180984 376 0x801BB450 240332 exact term=syscall +0x801AF338 - - - - standalone grades=prologue +0x801AF704 - - - - standalone grades=prologue +0x801AF99C - - - - standalone grades=prologue +0x801AFB10 - - - - standalone grades=prologue +0x801AFCD4 - - - - standalone grades=prologue +0x801AFF1C - - - - standalone grades=prologue +0x801B0098 - - - - standalone grades=prologue +0x801B01DC - - - - standalone grades=prologue +0x801B02E0 - - - - standalone grades=prologue +0x801B03E4 - - - - standalone grades=prologue +0x801B0504 - - - - standalone grades=prologue +0x801B0638 - - - - standalone grades=prologue +0x801B0754 - - - - standalone grades=prologue +0x801B0820 - - - - standalone grades=prologue +0x801B0924 - - - - standalone grades=prologue +0x801B0A28 - - - - standalone grades=prologue +0x801B0B04 - - - - standalone grades=prologue +0x801B0B94 - - - - standalone grades=prologue +0x801B0D1C - - - - standalone grades=prologue +0x801B0FCC - - - - standalone grades=prologue +0x801B1160 - - - - standalone grades=prologue +0x801B18EC - - - - standalone grades=prologue +0x801B1A6C - - - - standalone grades=prologue +0x801B1AB0 - - - - standalone grades=prologue +0x801B1BAC - - - - standalone grades=prologue +0x801B1CA8 - - - - standalone grades=prologue +0x801B21B0 - - - - standalone grades=prologue +0x801B27D0 - - - - standalone grades=prologue +0x801B2968 - - - - standalone grades=prologue +0x801B3104 - - - - standalone grades=prologue +0x801B316C - - - - standalone grades=prologue +0x801B324C - - - - standalone grades=prologue +0x801B3DF0 - - - - standalone grades=prologue +0x801B41E8 - - - - standalone grades=prologue +0x801B4344 - - - - standalone grades=prologue +0x801B44E8 - - - - standalone grades=prologue +0x801B49A4 - - - - standalone grades=prologue +0x801B4A20 - - - - standalone grades=prologue +0x801B4C34 - - - - standalone grades=prologue +0x801B4CCC - - - - standalone grades=prologue +0x801B4E2C - - - - standalone grades=prologue +0x801B4F34 - - - - standalone grades=prologue +0x801B5094 - - - - standalone grades=prologue +0x801B5190 - - - - standalone grades=prologue +0x801B54F8 - - - - standalone grades=prologue +0x801B568C - - - - standalone grades=prologue +0x801B57D8 - - - - standalone grades=prologue +0x801B5894 - - - - standalone grades=prologue +0x801B5A38 - - - - standalone grades=prologue +0x801B5BA8 - - - - standalone grades=prologue +0x801B5CF8 - - - - standalone grades=prologue +0x801B5EC8 - - - - standalone grades=prologue +0x801B6130 - - - - standalone grades=prologue +0x801B61C0 - - - - standalone grades=prologue +0x801B6200 - - - - standalone grades=prologue +0x801B6318 - - - - standalone grades=prologue +0x801B63E0 - - - - standalone grades=prologue +0x801B6660 - - - - standalone grades=prologue +0x801B6790 - - - - standalone grades=prologue +0x801B6984 - - - - standalone grades=prologue +0x801B6B38 - - - - standalone grades=prologue +0x801B6D24 - - - - standalone grades=prologue +0x801B6D74 - - - - standalone grades=prologue +0x801B6F54 - - - - standalone grades=prologue +0x801B70F4 - - - - standalone grades=prologue +0x801B72AC - - - - standalone grades=prologue +0x801B7474 - - - - standalone grades=prologue +0x801B7654 - - - - standalone grades=prologue +0x801B7768 - - - - standalone grades=prologue +0x801B79C8 - - - - standalone grades=prologue +0x801B7B18 - - - - standalone grades=prologue +0x801B7BF8 - - - - standalone grades=prologue +0x801B7DB8 - - - - standalone grades=prologue +0x801B7FA0 - - - - standalone grades=prologue +0x801B8070 - - - - standalone grades=prologue +0x801B80F8 - - - - standalone grades=prologue +0x801B816C - - - - standalone grades=prologue +0x801B83D4 - - - - standalone grades=prologue +0x801B88E8 - - - - standalone grades=prologue +0x801B8A48 - - - - standalone grades=prologue +0x801B8B80 - - - - standalone grades=prologue +0x801B9204 - - - - standalone grades=prologue +0x801B93C8 - - - - standalone grades=prologue +0x801B94AC - - - - standalone grades=prologue +0x801B9580 - - - - standalone grades=prologue +0x801B95A4 - - - - standalone grades=prologue +0x801B95C8 - - - - standalone grades=prologue +0x801B9678 - - - - standalone grades=prologue +0x801B97D8 - - - - standalone grades=prologue +0x801B9978 - - - - standalone grades=prologue +0x801B9A7C - - - - standalone grades=prologue +0x801B9B28 - - - - standalone grades=prologue +0x801B9E0C - - - - standalone grades=prologue +0x801BA194 - - - - standalone grades=prologue +0x801BAAAC - - - - standalone grades=prologue +0x801BAB58 - - - - standalone grades=prologue +0x801BAF68 - - - - standalone grades=prologue +0x801BB3D8 - - - - standalone grades=prologue +0x801BB450 0x801BB480 48 - - exact term=jr_ra +0x801BB480 - - - - standalone grades=prologue +0x801BB69C - - - - standalone grades=prologue +0x801BBA2C - - - - standalone grades=prologue +0x801BC29C - - - - standalone grades=prologue +0x801BC3B4 - - - - standalone grades=prologue +0x801BC45C - - - - standalone grades=prologue +0x801BC5B4 - - - - standalone grades=prologue +0x801BC60C - - - - standalone grades=prologue +0x801BC940 - - - - standalone grades=prologue +0x801BC990 - - - - standalone grades=prologue +0x801BCA24 - - - - standalone grades=prologue +0x801BCBDC - - - - standalone grades=prologue +0x801BCE80 - - - - standalone grades=prologue +0x801BCF24 - - - - standalone grades=prologue +0x801BD0BC - - - - standalone grades=prologue +0x801BD1C8 - - - - standalone grades=prologue +0x801BD310 - - - - standalone grades=prologue +0x801BD49C - - - - standalone grades=prologue +0x801BD9C4 - - - - standalone grades=prologue +0x801BDBB8 - - - - standalone grades=prologue +0x801BDF18 - - - - standalone grades=prologue +0x801BE464 - - - - standalone grades=prologue +0x801BE614 - - - - standalone grades=prologue +0x801BE63C - - - - standalone grades=prologue +0x801BE744 - - - - standalone grades=prologue +0x801BEA74 - - - - standalone grades=prologue +0x801C0BA8 - - - - standalone grades=prologue +0x801C0C10 - - - - standalone grades=prologue +0x801C0C60 - - - - standalone grades=prologue +0x801C0ECC - - - - standalone grades=prologue +0x801C10DC - - - - standalone grades=prologue +0x801C1158 - - - - standalone grades=prologue +0x801C1570 - - - - standalone grades=prologue +0x801C17B8 - - - - standalone grades=prologue +0x801C17E0 - - - - standalone grades=prologue +0x801C1878 - - - - standalone grades=prologue +0x801C1C50 - - - - standalone grades=prologue +0x801C1D0C - - - - standalone grades=prologue +0x801C1D2C - - - - standalone grades=prologue +0x801C1E40 - - - - standalone grades=prologue +0x801C1ED0 - - - - standalone grades=prologue +0x801C2120 - - - - standalone grades=prologue +0x801C2150 - - - - standalone grades=prologue +0x801C2268 - - - - standalone grades=prologue +0x801C25EC - - - - standalone grades=prologue +0x801C294C - - - - standalone grades=prologue +0x801C2B40 - - - - standalone grades=prologue +0x801C2C7C - - - - standalone grades=prologue +0x801C2D94 - - - - standalone grades=prologue +0x801C2ED4 - - - - standalone grades=prologue +0x801C2FEC - - - - standalone grades=prologue +0x801C312C - - - - standalone grades=prologue +0x801C34B8 - - - - standalone grades=prologue +0x801C3730 - - - - standalone grades=prologue +0x801C3838 - - - - standalone grades=prologue +0x801C38C8 - - - - standalone grades=prologue +0x801C3AC0 - - - - standalone grades=prologue +0x801C3C9C - - - - standalone grades=prologue +0x801C3D58 - - - - standalone grades=prologue +0x801C3E58 - - - - standalone grades=prologue +0x801C3F30 - - - - standalone grades=prologue +0x801C4090 - - - - standalone grades=prologue +0x801C40E0 - - - - standalone grades=prologue +0x801C44B0 - - - - standalone grades=prologue +0x801D3CA8 - - - - standalone grades=prologue +0x801D3E90 - - - - standalone grades=prologue +0x801D43F8 - - - - standalone grades=prologue +0x801D4458 - - - - standalone grades=prologue +0x801D4760 - - - - standalone grades=prologue +0x801D4808 - - - - standalone grades=prologue +0x801D4A5C - - - - standalone grades=prologue +0x801D4B78 - - - - standalone grades=prologue +0x801D4EA4 - - - - standalone grades=prologue +0x801D5164 - - - - standalone grades=prologue +0x801D5200 - - - - standalone grades=prologue +0x801D53B8 - - - - standalone grades=prologue +0x801D54DC - - - - standalone grades=prologue +0x801D5524 - - - - standalone grades=prologue +0x801D5818 - - - - standalone grades=prologue +0x801D5B78 - - - - standalone grades=prologue +0x801D5D28 - - - - standalone grades=prologue +0x801D5E2C - - - - standalone grades=prologue +0x801D5F38 - - - - standalone grades=prologue +0x801D609C - - - - standalone grades=prologue +0x801D6250 - - - - standalone grades=prologue +0x801D64E0 - - - - standalone grades=prologue +0x801D6660 - - - - standalone grades=prologue +0x801D66CC - - - - standalone grades=prologue +0x801D68B4 - - - - standalone grades=prologue +0x801D6BC8 - - - - standalone grades=prologue +0x801D6E58 - - - - standalone grades=prologue +0x801D6ECC - - - - standalone grades=prologue +0x801D6EF4 - - - - standalone grades=prologue +0x801D6FD8 - - - - standalone grades=prologue +0x801D7314 - - - - standalone grades=prologue +0x801D7478 - - - - standalone grades=prologue +0x801D75E8 - - - - standalone grades=prologue +0x801D7608 - - - - standalone grades=prologue +0x801D79A4 - - - - standalone grades=prologue +0x801D7A64 - - - - standalone grades=prologue +0x801D7B58 - - - - standalone grades=prologue +0x801D7C50 - - - - standalone grades=prologue +0x801D7D44 - - - - standalone grades=prologue +0x801D7F68 - - - - standalone grades=prologue +0x801D7FD0 - - - - standalone grades=prologue +0x801D8670 - - - - standalone grades=prologue +0x801D87A8 - - - - standalone grades=prologue +0x801D8CE8 - - - - standalone grades=prologue +0x801D8D38 - - - - standalone grades=prologue +0x801D8D64 - - - - standalone grades=prologue +0x801D8DF4 - - - - standalone grades=prologue +0x801D9120 - - - - standalone grades=prologue +0x801D9340 - - - - standalone grades=prologue +0x801D9798 - - - - standalone grades=prologue +0x801D991C - - - - standalone grades=prologue diff --git a/docs/PHASE7_EXTENTS.md b/docs/PHASE7_EXTENTS.md new file mode 100644 index 0000000..e58166a --- /dev/null +++ b/docs/PHASE7_EXTENTS.md @@ -0,0 +1,135 @@ +# Phase 7 — Evidence-Graded Function Extents + +**Scope:** P7-T2 — turn evidence-graded function **starts** into evidence-graded function +`[start, end)` **extents**, so a match target no longer needs its end derived by hand. +**Status:** complete. Tracked output: `config/function_extents.tsv`. Tool: `tools/sf3_extents` +(29 synthetic tests). + +## The problem this closes + +Phase 6 produced `config/function_inventory.tsv`: 2,875 candidate function **starts**, each labelled +with the evidence that supports it. It says nothing about where a function ends. Every end in +`config/regions.tsv` was therefore derived by hand, and a wrong end is only ever discovered as a +`LENGTH-MISMATCH` after the fact. That manual boundary step was the dominant per-function cost. + +## The model + +A **hard start** is a candidate graded `jal` or `entry` — a direct call target or the header entry. +A **soft start** is a `prologue`/`ghidra`-only candidate. + +Soft starts are **not** used as walk boundaries, and this is a measured decision, not a stylistic one. +A body's second instruction can itself look exactly like a prologue: at `0x800152AC` the real body is +`lw v1,8(gp)` / `addiu sp,sp,-176` / `sw ra,172(sp)`, and `0x800152B0` — the `addiu sp,sp,-176` — +satisfies the `prologue` grade exactly. Treating soft starts as boundaries made 155 of 416 walks stop +inside a real body. Soft starts are therefore recorded as candidates and classified, but never +enforced. + +From each hard start the tool explores **all** reachable paths (fall-through, branch and jump targets, +delay slots, calls returning to their return address) and records the highest reachable instruction. +It is a full reachability computation rather than a first-terminal search, because a function whose +paths return at different addresses must report the whole body; a first-terminal walk under-reports it. + +The walk stops at: + +| Stop | Meaning | +|---|---| +| `jr ra` | return; the delay slot is part of the body | +| `jr $rs` (rs ≠ ra) | register jump — a switch or jump table; targets cannot be followed statically | +| `syscall` / `break` | no delay slot; the body ends here | +| a tail `j` | target behind the start, or a known start: control leaves this function | +| another hard start | a boundary the walk may not cross | + +The extent end is the first byte after the last reachable instruction: for a call, the return address; +for a return, the instruction after the delay slot. + +## Grades + +| Grade | Meaning | Basis | Limit | +|---|---|---|---| +| `exact` | The walk terminated at a return, `syscall`, `break` or tail jump and stayed inside its own region. `end` is the function's own last byte + 1. | 1,940 candidates; **all 12 registered regions reproduce exactly**; Ghidra's independent body for `FUN_80017ad4` is `[80017ad4, 80017ae7]`, i.e. exclusive end `0x80017AE8`, equal to the derived end. | It is the reachable extent of a called entry, not proof that the entry is a game function: a shared tail block reached by `jal` would also be graded `exact`. | +| `fallthrough` | No terminal was reachable; the walk ran into the next hard start and the extent ends there. | 256 candidates. Typically a function that ends in a call to something that does not return. | The extent may include alignment padding between the body's last instruction and the next entry. | +| `indirect` | The walk hit `jr $rs`, so its result is a **lower bound**: switch case bodies are not statically reachable. The recorded end is the next hard start. | 73 candidates; 44 of 45 measured earlier were within 4 bytes of the next start. | The recorded end is the best available bound and is **not verified**. | +| `escape` | The walk crossed the next hard start, so control left this function's region. The extent is clipped to the next hard start and the crossing instruction is recorded. | 15 candidates; see the dossier below. | The cause is not determined per case (shared block, interleaved body, or bytes decoded as code). | +| `outside` / `runaway` | The walk left the declared payload, or exceeded the 128 KB size cap. | 0 candidates. | — | +| `contained` | A **soft** candidate lying inside an `exact` extent. | 153 candidates. Strong evidence the candidate is **not** a function start. | Only `exact` extents carry the inference; a candidate inside a `fallthrough`/`indirect`/`escape` extent is reported as `standalone` instead. | +| `standalone` | A soft candidate covered by no `exact` extent. | 438 candidates. | Unresolved: it may be a function reached only indirectly, or a false positive in data. No evidence class separates them yet. | + +`contained` and `standalone` candidates carry no extent: their `end`, `size`, `next` and `gap` fields +are `-`. + +## Results + +| Measure | Count | +|---|---| +| Candidates | 2,875 | +| Hard starts (`jal` + `entry`) | 2,284 | +| `exact` | 1,940 | +| of which packed against the next start (`gap=0`) | 1,666 | +| `fallthrough` | 256 | +| `indirect` | 73 | +| `escape` | 15 | +| `contained` (soft, provably not a start) | 153 | +| `standalone` (soft, unresolved) | 438 | +| Bytes covered by extents | 1,202,764 of 1,884,160 (63.8%) | + +The remaining payload is data, padding, and the unresolved `standalone` candidates. + +### The escape dossier + +Fifteen hard starts have control flow that crosses the next hard start. In the nine cases measured in +detail, the intervening start is a **self-contained function whose own walk ends at exactly the same +`jr ra`** as the outer walk — so the outer walk escaped into another function's body rather than +wrapping around it. The recorded crossing instructions are ordinary forward conditional branches +(`escape=branch@0x80013510->0x800135D0`) and one `j` (`escape=j@0x8001347C->0x800135A4`). One case is +sharper still: `0x80013524` is itself graded `escape` with a **backward** crossing +(`j@0x8001347C->0x800135A4`), i.e. its body jumps back before its own start — the signature of a shared +block that is called as if it were a function. + +Extents for these addresses are clipped to the next hard start, which is the conservative and +defensible bound; the underlying cause is recorded, not guessed. + +## Verification + +| Check | Command | Result | +|---|---|---| +| Registered regions agree | `make extents-verify` | `regions=12 disagreements=0`, `result=AGREE` | +| Synthetic suite | `python3 -m unittest discover -s tools/tests` | 115 tests pass (29 added this task) | +| Determinism | two `scan` runs, `cmp` | byte-identical | +| Independent oracle | `ghidra_analyze_function FUN_80017ad4` | body `[80017ad4, 80017ae7]` → end `0x80017AE8` = derived end | +| Firewall | table columns | addresses, sizes, grades and site addresses only — no instruction bytes | + +`make extents-verify` is part of `make check`, so the registered regions can never silently disagree +with the derived extents again. + +Regenerate the table: + +```bash +make extents +# or, explicitly: +./tools/sf3_extents scan --exe 'extracted/SCUS_946.40;1' \ + --inventory config/function_inventory.tsv --out config/function_extents.tsv --force +``` + +## What this does not establish + +- **Library versus game code** remains unresolved. No grade distinguishes a PsyQ library routine from + game code; `exact` means "the reachable extent of a called entry", which is equally true of both. +- An `exact` extent is not a *function identity* claim. Two entries that share a tail are two entries. +- `standalone` is not a verdict. 438 candidates are simply not covered by any `exact` extent. +- A `gap` is padding, not proof of a missing candidate; and `gap=0` is packing, not proof that the + neighbour is a separate function. +- Nothing here promotes a candidate to a match. A match still requires an instruction-identical + `sf3_match range` comparison and the clean full-binary gate. + +## Tooling notes + +Two defects were found and fixed while building this, both by writing the synthetic tests first: + +1. **Delay-slot accounting.** `reach` must be an *exclusive* end. Treating it as an address made every + extent 4 bytes short — which the registered-region check caught immediately (12/12 disagreements). +2. **A tail jump's delay slot must not continue linearly.** After a terminal `j`, enqueuing the delay + slot let the walk run past it into the next function, turning a clean tail call into a false + `escape`. + +Both are recorded because the same mistakes will otherwise be repeated when the walk is extended to +handle jump tables. diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md index b0c67b0..d68a2e9 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/CURRENT_PHASE.md @@ -10,7 +10,7 @@ function bodies, bringing the project past **thirty** distinct byte-identical fu ## Progress - [x] **P7-T1 — Phase control records, baseline revalidation, and open-item triage** (complete) -- [ ] **P7-T2 — Evidence-graded function extents** +- [x] **P7-T2 — Evidence-graded function extents** (complete) - [ ] **P7-T3 — Duplicate-body census** - [ ] **P7-T4 — Candidate triage worklist** - [ ] **Rules check** @@ -67,6 +67,54 @@ this is a scope statement for P7-T2..T7. | CRT entry `[0x800FB368,0x800FB410)` | `docs/PHASE5_FIRST_MATCH.md`; Phase 4 entry dossier | CRT startup, not compiler output. Stays in the data fallback; excluded from the worklist. | | Library versus game code | `docs/PHASE6_BOUNDARIES.md` §Library versus game code | **Unresolved.** Does not block a byte-level match (a library routine that is byte-identical is as matched as any other), but it does affect what "finished" means. Re-flagged for P7-T2/T3/T4; if those produce evidence, it is recorded, not acted on silently. | +## P7-T2 — Evidence-graded function extents (2026-09-23) + +**Delivered:** + +- `tools/sf3_extents` — derives an `[start, end)` extent for every candidate start by exploring all + reachable control flow from each **hard** start (`jal`/`entry`), with `scan` and `verify` + subcommands. Standard library only; 29 synthetic tests. +- `config/function_extents.tsv` — tracked table, `addressendsizenextgapgradeevidence`. + Addresses, sizes, grades and site addresses only — no instruction bytes. +- `make extents` (regenerate) and `make extents-verify` (re-derive and require agreement with + `config/regions.tsv`); `extents-verify` is now part of `make check`. +- `docs/PHASE7_EXTENTS.md` — the model, the grade table with basis and limits, the results census, + and the escape dossier. + +**Results:** 2,875 candidates → `exact` 1,940 (1,666 with `gap=0`), `fallthrough` 256, `indirect` 73, +`escape` 15, `contained` 153, `standalone` 438. Extents cover 1,202,764 of 1,884,160 payload bytes +(63.8%). + +**Key measured decisions:** + +- **Soft starts are not walk boundaries.** A body's second instruction can satisfy the `prologue` + grade exactly (`0x800152AC` is `lw v1,8(gp)` / `addiu sp,sp,-176` / `sw ra,172(sp)`, so `0x800152B0` + looks like a start). Enforcing soft boundaries stopped 155 of 416 walks inside a real body. +- **The walk is a full reachability computation, not a first-terminal search.** A function whose paths + return at different addresses must report the whole body. +- **`contained` is an inference, not a label.** Only `exact` extents are trusted to declare a soft + candidate a non-function. + +**Verification:** + +| Check | Command | Result | +|---|---|---| +| Registered regions agree | `make extents-verify` | `regions=12 disagreements=0`, `result=AGREE` | +| Synthetic suite | `python3 -m unittest discover -s tools/tests` | **115 tests pass** (29 added) | +| Determinism | two `scan` runs, `cmp` | byte-identical | +| Independent oracle | `ghidra_analyze_function FUN_80017ad4` | Ghidra body `[80017ad4, 80017ae7]` → exclusive end `0x80017AE8`, equal to the derived end | +| Integrated gate | `make check` | tests + `AGREE` + `c_regions=12`, 0 differing bytes, SHA-1 `e173426c…` | + +**Two defects were found and fixed while building this**, both caught by writing the synthetic tests +first: `reach` had to be an exclusive end (otherwise every extent is 4 bytes short — the +registered-region check caught all 12), and a terminal `j`'s delay slot must not continue linearly +(otherwise a clean tail call becomes a false `escape`). Both are recorded in the doc. + +**Limits:** library-versus-game-code stays unresolved (an `exact` extent means "the reachable extent +of a called entry", equally true of library and game code); `standalone` (438) is not a verdict; the +15 `escape` cases are clipped conservatively with the crossing instruction recorded but the cause not +determined per case; and nothing here promotes a candidate to a match. + ## Notes and limits - The four class items are the plan's P7-T2..T5 work; the single-function items are explicitly out of diff --git a/tools/sf3_extents b/tools/sf3_extents new file mode 100755 index 0000000..4ed766e --- /dev/null +++ b/tools/sf3_extents @@ -0,0 +1,615 @@ +#!/usr/bin/env python3 +"""Evidence-graded function **extents** for the USA executable. + +Phase 6 produced evidence-graded function *starts* (`config/function_inventory.tsv`) +and no evidence at all for where a function *ends*: every region end in +`config/regions.tsv` was derived by hand. This tool derives the end from the +payload's own control flow and states how much the result can be trusted. + +## The model + +A **hard start** is a candidate whose evidence is a direct call or the header +entry (`jal` or `entry` grade). A **soft start** is a `prologue`/`ghidra`-only +candidate. Phase 7 measurement showed soft starts are frequently *false +positives inside a real function body* -- e.g. a body's second instruction can +itself look like a prologue -- so soft starts are **not** used as walk +boundaries, and the walk is never stopped by them. + +From each hard start the tool walks control flow (linear fall-through, branch +and jump targets, delay slots, calls falling through to the return address) and +records the highest reachable instruction. The walk stops at: + + * a return (`jr ra`) -- the delay slot is included; + * a register jump (`jr $rs`, rs != ra), i.e. a switch/jump table, whose + targets cannot be followed statically; + * `syscall` / `break`; + * a tail `j` whose target is outside this function (behind its start, or a + known start); + * another **hard** start, which is a boundary the walk may not cross. + +The extent end is the first byte after the last reachable instruction. For a +call this is the return address; for a return, the instruction after the delay +slot. + +## Grades + + exact the walk terminated at a return / `syscall` / `break` / tail + jump and stayed inside its own region. This is the grade a match + candidate wants: the end is the function's own last byte + 1. + All 12 regions registered in Phase 6 reproduce at this grade. + fallthrough no terminal was reachable; the walk ran into the next hard + start. The extent ends there. Typically a function that ends in + a call to something that does not return. + indirect the walk hit a register jump (`jr $rs`), so its result is a + **lower bound**: the switch's case bodies are not reachable + statically. The recorded end is the next hard start, which is + the best available bound and is *not* verified. + escape the walk crossed the next hard start, so control left this + function's region (a shared tail block, an interleaved body, or + bytes decoded as code). The extent is clipped to the next hard + start and the crossing instruction is recorded as evidence. + outside the walk left the declared payload. + runaway the walk exceeded the size cap without terminating. + contained a **soft** candidate lying inside an `exact` extent. Strong + evidence that it is not an independent function. + standalone a soft candidate not covered by any `exact` extent. Unresolved: + it may be a function reached only indirectly, or a false + positive in data. + +`contained` and `standalone` candidates carry no extent: their `end`, `size`, +`next` and `gap` fields are `-`. + +## Output + +A sorted TSV of `addressendsizenextgapgradeevidence`: + + * `next` is the next hard start (the next row that has an extent); + * `gap` is `next - end` -- 0 means the function is packed against the next + one, which is what a registerable region needs; a positive gap is padding + (alignment) that must stay out of the region; + * `evidence` is a `;`-separated list of `key=value` tokens. + +It contains **addresses, sizes and grade names only -- never instruction bytes**. +The executable is read only from the caller-supplied path. + +Nothing here promotes a candidate to a match: a match still requires an +instruction-identical `sf3_match range` comparison and the clean full-binary +gate. + +Exit codes: 0 success, 1 verification disagreement, 2 usage or environment error. +""" + +from __future__ import annotations + +import argparse +import bisect +from pathlib import Path +import struct +import sys +from typing import Sequence + + +EXE_MAGIC = b"PS-X EXE" +HEADER_SIZE = 0x800 +PAYLOAD_LMA = 0x800 +MAX_FUNCTION_SIZE = 0x20000 + +HARD_GRADES = frozenset({"jal", "entry"}) + +# Grade order for reporting. +GRADES = ( + "exact", + "fallthrough", + "indirect", + "escape", + "outside", + "runaway", + "contained", + "standalone", +) + +HEADER_LINES = ( + "# Syphon Filter 3 (USA) function extents.", + "# Columns: addressendsizenextgapgradeevidence.", + "# Grades: exact, fallthrough, indirect, escape, outside, runaway,", + "# contained, standalone. Addresses and sizes only; no bytes.", + "# A dash means the field does not apply (a non-function candidate).", + "# 'exact' is the only grade a match candidate should rely on;", + "# 'contained' is evidence a soft candidate is NOT a function start.", + "# Regenerate: ./tools/sf3_extents scan --exe '' \\", + "# --inventory config/function_inventory.tsv --out config/function_extents.tsv --force", +) + + +class ToolError(Exception): + """A usage or environment problem; maps to exit code 2.""" + + +class Disagreement(Exception): + """A verification failure; maps to exit code 1.""" + + +# -------------------------------------------------------------------------- +# parsing helpers +# -------------------------------------------------------------------------- + + +def parse_hex(text: str, label: str) -> int: + try: + return int(text, 16) + except ValueError as exc: + raise ToolError(f"{label}: not a hex address: {text!r}") from exc + + +def require_file(path: Path, label: str) -> Path: + if not path.is_file(): + raise ToolError(f"{label} is not a regular file: {path}") + return path + + +def resolve_output(path: Path, force: bool) -> Path: + if path.exists() or path.is_symlink(): + if not force: + raise ToolError(f"output already exists (use --force to overwrite): {path}") + if not path.is_file() or path.is_symlink(): + raise ToolError(f"output is not a regular file: {path}") + return path + + +def parse_psx_exe(header: bytes) -> tuple[int, int, int]: + if len(header) < HEADER_SIZE: + raise ToolError("executable is smaller than a PS-X EXE header") + if header[:8] != EXE_MAGIC: + raise ToolError("executable does not carry the PS-X EXE magic") + entry, _gp, text_address, text_size = struct.unpack_from(" dict[int, set[str]]: + """Read `addressgrades` rows, skipping comments and blank lines.""" + grades: dict[int, set[str]] = {} + for number, raw in enumerate(path.read_text(encoding="utf-8").splitlines(), 1): + line = raw.split("#", 1)[0].strip() + if not line: + continue + fields = line.split("\t") + if len(fields) != 2: + raise ToolError(f"inventory line {number}: expected 'addressgrades'") + address = parse_hex(fields[0].strip(), f"inventory line {number}") + names = {name.strip() for name in fields[1].split(",") if name.strip()} + if not names: + raise ToolError(f"inventory line {number}: no grades") + if address in grades: + raise ToolError(f"inventory line {number}: duplicate address {fields[0]!r}") + grades[address] = names + if not grades: + raise ToolError("inventory is empty") + return grades + + +def load_regions(path: Path) -> list[tuple[int, int, str]]: + """Read `startendsource[overrides]` rows.""" + regions: list[tuple[int, int, str]] = [] + for number, raw in enumerate(path.read_text(encoding="utf-8").splitlines(), 1): + line = raw.split("#", 1)[0].strip() + if not line: + continue + fields = line.split("\t") + if len(fields) < 3: + raise ToolError(f"region line {number}: expected at least three fields") + start = parse_hex(fields[0].strip(), f"region line {number}") + end = parse_hex(fields[1].strip(), f"region line {number}") + if end <= start: + raise ToolError(f"region line {number}: end is not after start") + regions.append((start, end, fields[2].strip())) + return regions + + +# -------------------------------------------------------------------------- +# instruction decoding and the control-flow walk +# -------------------------------------------------------------------------- + + +class Walk: + """The result of walking one candidate start. + + `reach` is the highest reachable instruction address + 4: the whole + reachable body is explored, not just the first path that terminates, so a + function whose paths return at different addresses still reports its true + extent. `boundary` is the lowest **hard** start the walk ran into, which is + a boundary it may not cross. `escape_at` records the first branch or jump + whose target left the region, which is what distinguishes a function that + *falls through* into its neighbour from one that *jumps over* it. + """ + + __slots__ = ("reach", "boundary", "indirect_at", "terminals", "escape_at", "overflow") + + def __init__(self, reach: int, boundary: int | None, indirect_at: int | None, + terminals: list[tuple[str, int, int | None]], escape_at: tuple[int, int, str] | None, + overflow: tuple[str, int] | None) -> None: + self.reach = reach + self.boundary = boundary + self.indirect_at = indirect_at + self.terminals = terminals + self.escape_at = escape_at + self.overflow = overflow + + def terminal_evidence(self) -> str: + if not self.terminals: + return "term=none" + kind, _pc, target = self.terminals[0] + if kind == "tail_j" and target is not None: + return f"term=tail_j:0x{target:08X}" + return f"term={kind}" + + def escape_evidence(self) -> str: + assert self.escape_at is not None + pc, target, kind = self.escape_at + return f"escape={kind}@0x{pc:08X}->0x{target:08X}" + + +def signed16(value: int) -> int: + return value - 0x10000 if value & 0x8000 else value + + +def jump_target(pc: int, word: int) -> int: + return ((pc + 4) & 0xF0000000) | ((word & 0x03FFFFFF) << 2) + + +def branch_target(pc: int, word: int) -> int: + return pc + 4 + (signed16(word & 0xFFFF) << 2) + + +def is_branch(word: int) -> bool: + opcode = word >> 26 + if opcode in (0x04, 0x05, 0x06, 0x07): + return True + if opcode == 0x01: # REGIMM: bltz/bgez/bltzal/bgezal (+ likely) + return ((word >> 16) & 0x1F) in (0, 1, 2, 3, 16, 17, 18, 19) + if opcode == 0x10: # COP0: bc0f/bc0t + return ((word >> 21) & 0x1F) == 8 + return False + + +def walk(payload: bytes, text_address: int, start: int, hard: frozenset[int], + hard_sorted: Sequence[int]) -> Walk: + """Explore every path from `start` and report its reachable extent.""" + limit = text_address + len(payload) + pending = [start] + visited: set[int] = set() + reach = start - 4 + boundary: int | None = None + indirect_at: int | None = None + terminals: list[tuple[str, int, int | None]] = [] + escape_at: tuple[int, int, str] | None = None + overflow: tuple[str, int] | None = None + + def next_hard_after(pc: int) -> int | None: + index = bisect.bisect_right(hard_sorted, pc) + return hard_sorted[index] if index < len(hard_sorted) else None + + def note_escape(pc: int, target: int, kind: str) -> None: + nonlocal escape_at + following = next_hard_after(pc) + if escape_at is None and following is not None and target > following: + escape_at = (pc, target, kind) + + while pending: + pc = pending.pop() + while True: + if pc in visited: + break + if pc < text_address or pc + 4 > limit: + overflow = ("outside", pc) + break + if pc - start > MAX_FUNCTION_SIZE: + overflow = ("runaway", pc) + break + if pc != start and pc in hard: + if boundary is None or pc < boundary: + boundary = pc + break + visited.add(pc) + if pc + 4 > reach: + reach = pc + 4 + word = struct.unpack_from("> 26 + funct = word & 0x3F + + if opcode == 0 and funct == 0x08: # jr + if pc + 8 > reach: + reach = pc + 8 # the delay slot is part of the body + rs = (word >> 21) & 0x1F + if rs == 31: + terminals.append(("jr_ra", pc, None)) + else: + if indirect_at is None: + indirect_at = pc + break + if opcode == 0 and funct == 0x09: # jalr + pending.append(pc + 4) + pc += 8 + continue + if opcode == 0 and funct in (0x0C, 0x0D): # syscall / break + terminals.append(("syscall" if funct == 0x0C else "break", pc, None)) + break + if opcode == 0x02: # j + target = jump_target(pc, word) + # The delay slot executes and is part of the body, but control + # then leaves this instruction; it must not continue linearly. + if pc + 8 > reach: + reach = pc + 8 + if target < start or target in hard: + terminals.append(("tail_j", pc, target)) + break + note_escape(pc, target, "j") + pending.append(target) + break + if opcode == 0x03: # jal + pending.append(pc + 4) + pc += 8 + continue + if is_branch(word): + target = branch_target(pc, word) + note_escape(pc, target, "branch") + pending.append(pc + 4) + pending.append(target) + break + pc += 4 + return Walk(reach, boundary, indirect_at, terminals, escape_at, overflow) + + +# -------------------------------------------------------------------------- +# extent derivation +# -------------------------------------------------------------------------- + + +class Extent: + """A derived extent (or a classified non-function candidate).""" + + __slots__ = ("start", "end", "next", "grade", "evidence") + + def __init__(self, start: int, end: int | None, next_start: int | None, + grade: str, evidence: list[str]) -> None: + self.start = start + self.end = end + self.next = next_start + self.grade = grade + self.evidence = evidence + + @property + def size(self) -> int | None: + return None if self.end is None else self.end - self.start + + @property + def gap(self) -> int | None: + if self.end is None or self.next is None: + return None + return self.next - self.end + + +def derive_extents(payload: bytes, text_address: int, + grades: dict[int, set[str]]) -> list[Extent]: + """Derive an extent for every candidate start, in address order.""" + hard = frozenset(a for a, names in grades.items() if names & HARD_GRADES) + hard_sorted = sorted(hard) + following: dict[int, int | None] = {} + for index, address in enumerate(hard_sorted): + following[address] = (hard_sorted[index + 1] if index + 1 < len(hard_sorted) else None) + + extents: dict[int, Extent] = {} + for start in hard_sorted: + next_start = following[start] + result = walk(payload, text_address, start, hard, hard_sorted) + evidence: list[str] = [] + + # A hard start is another function's entry, so this function's extent + # cannot extend past it; `clip` is the boundary the result is bounded by. + clip = next_start if next_start is not None else result.boundary + escaped = result.escape_at is not None or (clip is not None and result.reach > clip) + + if result.overflow is not None: + kind, pc = result.overflow + grade = kind + end = clip if clip is not None else result.reach + evidence.append(f"pc=0x{pc:08X}") + elif escaped: + grade = "escape" + end = clip if clip is not None else result.reach + if result.escape_at is not None: + evidence.append(result.escape_evidence()) + else: + evidence.append(f"over=0x{result.reach:08X}") + elif result.boundary is not None: + grade = "fallthrough" + end = result.boundary + evidence.append(f"hit=0x{result.boundary:08X}") + elif result.indirect_at is not None: + grade = "indirect" + end = next_start if next_start is not None else result.reach + evidence.append(f"jr_reg=0x{result.indirect_at:08X}") + evidence.append(f"lower_bound=0x{result.reach:08X}") + else: + grade = "exact" + end = result.reach + evidence.append(result.terminal_evidence()) + extents[start] = Extent(start, end, next_start, grade, evidence) + + # Soft candidates: containment inside an `exact` extent is evidence that the + # candidate is not an independent function. Extents of other grades are not + # trustworthy enough to carry that inference. + exact_spans = sorted( + (extent.start, extent.end) for extent in extents.values() + if extent.grade == "exact" and extent.end is not None + ) + + def contained_by(address: int) -> int | None: + for span_start, span_end in exact_spans: + if span_start < address < span_end: + return span_start + if span_start > address: + break + return None + + for address in sorted(set(grades) - set(hard)): + names = ",".join(sorted(grades[address])) + owner = contained_by(address) + if owner is None: + extents[address] = Extent(address, None, None, "standalone", [f"grades={names}"]) + else: + extents[address] = Extent(address, None, None, "contained", + [f"inside=0x{owner:08X}", f"grades={names}"]) + + return [extents[address] for address in sorted(extents)] + + +def format_extents(extents: Sequence[Extent]) -> str: + lines = list(HEADER_LINES) + for extent in extents: + end = "-" if extent.end is None else f"0x{extent.end:08X}" + size = "-" if extent.size is None else str(extent.size) + next_start = "-" if extent.next is None else f"0x{extent.next:08X}" + gap = "-" if extent.gap is None else str(extent.gap) + evidence = ";".join(extent.evidence) + lines.append("\t".join(( + f"0x{extent.start:08X}", end, size, next_start, gap, extent.grade, evidence, + ))) + return "\n".join(lines) + "\n" + + +# -------------------------------------------------------------------------- +# subcommands +# -------------------------------------------------------------------------- + + +def load_payload(exe_path: Path) -> tuple[bytes, int]: + data = exe_path.read_bytes() + _entry, text_address, text_size = parse_psx_exe(data) + payload = data[PAYLOAD_LMA:PAYLOAD_LMA + text_size] + if len(payload) != text_size: + raise ToolError("executable is truncated: payload is shorter than the header declares") + return payload, text_address + + +def command_scan(args: argparse.Namespace) -> int: + exe_path = require_file(args.exe, "executable") + inventory_path = require_file(args.inventory, "function inventory") + out = resolve_output(args.out, args.force) + payload, text_address = load_payload(exe_path) + grades = load_inventory(inventory_path) + extents = derive_extents(payload, text_address, grades) + + counts = {grade: 0 for grade in GRADES} + for extent in extents: + counts[extent.grade] = counts.get(extent.grade, 0) + 1 + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(format_extents(extents), encoding="ascii") + + print(f"candidates={len(extents)}") + for grade in GRADES: + print(f"grade_{grade}={counts[grade]}") + print(f"output={out}") + return 0 + + +def command_verify(args: argparse.Namespace) -> int: + exe_path = require_file(args.exe, "executable") + inventory_path = require_file(args.inventory, "function inventory") + extents_path = require_file(args.extents, "function extents") + regions_path = require_file(args.regions, "region registry") + + payload, text_address = load_payload(exe_path) + grades = load_inventory(inventory_path) + derived = {extent.start: extent for extent in derive_extents(payload, text_address, grades)} + stored = load_inventory_extents(extents_path) + regions = load_regions(regions_path) + + failures: list[str] = [] + for start, end, source in regions: + if start not in stored: + failures.append(f"0x{start:08X} ({source}): absent from the extents table") + continue + if stored[start] != end: + failures.append( + f"0x{start:08X} ({source}): extents table says 0x{stored[start]:08X}, " + f"registry says 0x{end:08X}") + continue + extent = derived.get(start) + if extent is None: + failures.append(f"0x{start:08X} ({source}): not a candidate in the inventory") + continue + if extent.end != end: + failures.append( + f"0x{start:08X} ({source}): derived 0x{extent.end:08X} (grade {extent.grade}), " + f"registry says 0x{end:08X}") + + for failure in failures: + print(f"disagreement: {failure}", file=sys.stderr) + if failures: + print(f"regions={len(regions)} disagreements={len(failures)}") + return 1 + print(f"regions={len(regions)} disagreements=0") + print("result=AGREE") + return 0 + + +def load_inventory_extents(path: Path) -> dict[int, int]: + """Read back a generated extents table: address -> end (function rows only).""" + ends: dict[int, int] = {} + for number, raw in enumerate(path.read_text(encoding="utf-8").splitlines(), 1): + line = raw.split("#", 1)[0].strip() + if not line: + continue + fields = line.split("\t") + if len(fields) != 7: + raise ToolError(f"extents line {number}: expected seven fields") + address = parse_hex(fields[0], f"extents line {number}") + if fields[1] == "-": + continue + ends[address] = parse_hex(fields[1], f"extents line {number}") + return ends + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter + ) + subparsers = parser.add_subparsers(dest="command", required=True) + + scan_parser = subparsers.add_parser("scan", help="derive extents for every candidate") + scan_parser.add_argument("--exe", required=True, type=Path) + scan_parser.add_argument("--inventory", required=True, type=Path, + help="graded function-boundary inventory (addressgrades)") + scan_parser.add_argument("--out", required=True, type=Path) + scan_parser.add_argument("--force", action="store_true", + help="overwrite an existing output file") + scan_parser.set_defaults(handler=command_scan) + + verify_parser = subparsers.add_parser( + "verify", help="check derived extents against the registered regions") + verify_parser.add_argument("--exe", required=True, type=Path) + verify_parser.add_argument("--inventory", required=True, type=Path) + verify_parser.add_argument("--extents", required=True, type=Path) + verify_parser.add_argument("--regions", required=True, type=Path) + verify_parser.set_defaults(handler=command_verify) + + return parser + + +def main(argv: Sequence[str] | None = None) -> int: + parser = build_parser() + args = parser.parse_args(argv) + try: + return args.handler(args) + except ToolError as exc: + print(f"error: {exc}", file=sys.stderr) + return 2 + except OSError as exc: + print(f"error: {exc}", file=sys.stderr) + return 2 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tools/tests/test_sf3_extents.py b/tools/tests/test_sf3_extents.py new file mode 100644 index 0000000..1114d4f --- /dev/null +++ b/tools/tests/test_sf3_extents.py @@ -0,0 +1,411 @@ +"""Synthetic-only tests for the function-extent derivation tool. + +Fixtures are self-authored bytes in temporary directories. They never read the +local disc or the extracted game executable. +""" + +from __future__ import annotations + +import contextlib +import importlib.machinery +import importlib.util +import io +from pathlib import Path +import struct +import sys +import tempfile +import unittest + + +TOOL_PATH = Path(__file__).resolve().parents[1] / "sf3_extents" + + +def _load_tool() -> object: + loader = importlib.machinery.SourceFileLoader("sf3_extents_under_test", str(TOOL_PATH)) + spec = importlib.util.spec_from_loader(loader.name, loader) + if spec is None: + raise RuntimeError("could not create an import specification") + module = importlib.util.module_from_spec(spec) + sys.modules[spec.name] = module + loader.exec_module(module) + return module + + +sf3_extents = _load_tool() + +PAYLOAD = 0x80010000 + +# Addresses (payload-relative) used by the fixture below. +ENTRY = 0x00 +JAL_A = 0x20 +TWO_PATHS = 0x30 +TAIL_J = 0x48 +INDIRECT = 0x60 +FALLTHROUGH = 0x70 +PLAIN = 0x80 +SYSCALL_FN = 0x88 +ESCAPE = 0x98 +AFTER_ESCAPE = 0xA4 +FRAMED = 0xC0 +CONTAINS_SOFT = 0xE0 +SOFT_INSIDE = 0xE8 +SOFT_STANDALONE = 0x100 +LAST = 0x110 + +HARD_STARTS = (ENTRY, JAL_A, TWO_PATHS, TAIL_J, INDIRECT, FALLTHROUGH, PLAIN, + SYSCALL_FN, ESCAPE, AFTER_ESCAPE, FRAMED, CONTAINS_SOFT, LAST) +SOFT_STARTS = (SOFT_INSIDE, SOFT_STANDALONE) + + +def _r(opcode: int, rs: int, rt: int, immediate: int) -> int: + return (opcode << 26) | (rs << 21) | (rt << 16) | (immediate & 0xFFFF) + + +def _jr(rs: int = 31) -> int: + return (rs << 21) | 0x08 + + +def _jal(target: int) -> int: + return (0x03 << 26) | ((target >> 2) & 0x03FFFFFF) + + +def _j(target: int) -> int: + return (0x02 << 26) | ((target >> 2) & 0x03FFFFFF) + + +def _beq(offset_words: int) -> int: + return _r(0x04, 0, 0, offset_words & 0xFFFF) + + +def _addiu_sp(delta: int) -> int: + return _r(0x09, 29, 29, delta & 0xFFFF) + + +def _sw_sp(rt: int, offset: int) -> int: + return _r(0x2B, 29, rt, offset) + + +def _payload() -> bytes: + """A synthetic payload whose function layout is documented in the tests.""" + words: dict[int, int] = {} + + def put(offset: int, word: int) -> None: + words[offset] = word + + put(0x00, _jal(PAYLOAD + JAL_A)) + put(0x08, _jr()) + put(0x10, _jal(PAYLOAD + TWO_PATHS)) + put(0x18, _jr()) + # A framed function: prologue, return, stack restore in the delay slot. + put(JAL_A, _addiu_sp(-16)) + put(JAL_A + 4, _sw_sp(31, 12)) + put(JAL_A + 8, _jr()) + put(JAL_A + 12, _addiu_sp(16)) + # Two paths that return at different addresses: the extent must cover both. + put(TWO_PATHS, _beq(2)) + put(TWO_PATHS + 4, _jr()) + put(TWO_PATHS + 12, 0) + put(TWO_PATHS + 16, _jr()) + # A tail call to another function's entry. + put(TAIL_J, _jal(PAYLOAD + INDIRECT)) + put(TAIL_J + 8, _j(PAYLOAD + PLAIN)) + # A register jump: the walk cannot follow it. + put(INDIRECT, _jr(2)) + # No terminal: the body runs into the next hard start. + put(FALLTHROUGH, _jal(PAYLOAD + PLAIN)) + put(PLAIN, _jr()) + put(SYSCALL_FN, 0x0C) + # A branch whose target jumps over the next hard start. + put(ESCAPE, _beq(6)) + put(ESCAPE + 4, _jr()) + put(ESCAPE + 28, 0) + put(ESCAPE + 32, _jr()) + put(AFTER_ESCAPE, _jr()) + put(FRAMED, _jal(PAYLOAD + CONTAINS_SOFT)) + put(FRAMED + 8, _jr()) + # A framed function that contains a prologue-looking pair internally. + put(CONTAINS_SOFT, _addiu_sp(-32)) + put(CONTAINS_SOFT + 4, _sw_sp(31, 28)) + put(CONTAINS_SOFT + 8, _addiu_sp(-8)) + put(CONTAINS_SOFT + 12, _sw_sp(8, 4)) + put(CONTAINS_SOFT + 16, _jr()) + put(CONTAINS_SOFT + 20, _addiu_sp(8)) + # A standalone prologue-looking pair that no extent covers. + put(SOFT_STANDALONE, _addiu_sp(-16)) + put(SOFT_STANDALONE + 4, _sw_sp(31, 12)) + put(SOFT_STANDALONE + 8, _jr()) + put(LAST, _jr()) + + size = max(words) + 4 + return b"".join(struct.pack(" bytes: + header = bytearray(0x800) + header[:8] = b"PS-X EXE" + struct.pack_into(" str: + lines = ["# synthetic inventory"] + for address in HARD_STARTS: + lines.append(f"0x{PAYLOAD + address:08X}\tjal") + for address in SOFT_STARTS: + lines.append(f"0x{PAYLOAD + address:08X}\tprologue") + return "\n".join(lines) + "\n" + + +def _derive() -> dict[int, object]: + payload = _payload() + grades: dict[int, set[str]] = {} + for address in HARD_STARTS: + grades[PAYLOAD + address] = {"jal"} + grades[PAYLOAD] = {"entry", "jal"} + for address in SOFT_STARTS: + grades[PAYLOAD + address] = {"prologue"} + return {extent.start: extent for extent in sf3_extents.derive_extents(payload, PAYLOAD, grades)} + + +class ParseTests(unittest.TestCase): + def test_rejects_missing_magic(self) -> None: + with self.assertRaises(sf3_extents.ToolError): + sf3_extents.parse_psx_exe(bytes(0x800)) + + def test_rejects_empty_payload(self) -> None: + header = bytearray(0x800) + header[:8] = b"PS-X EXE" + with self.assertRaises(sf3_extents.ToolError): + sf3_extents.parse_psx_exe(bytes(header)) + + +class InventoryTests(unittest.TestCase): + def test_reads_grades_and_skips_comments(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "inventory.tsv" + path.write_text("# c\n0x80010000\tentry,jal\n\n0x80010010\tprologue\n", + encoding="ascii") + grades = sf3_extents.load_inventory(path) + self.assertEqual(grades[0x80010000], {"entry", "jal"}) + self.assertEqual(grades[0x80010010], {"prologue"}) + + def test_rejects_a_malformed_row(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "inventory.tsv" + path.write_text("0x80010000\n", encoding="ascii") + with self.assertRaises(sf3_extents.ToolError): + sf3_extents.load_inventory(path) + + def test_rejects_a_duplicate_address(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "inventory.tsv" + path.write_text("0x80010000\tjal\n0x80010000\tentry\n", encoding="ascii") + with self.assertRaises(sf3_extents.ToolError): + sf3_extents.load_inventory(path) + + def test_rejects_an_empty_inventory(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "inventory.tsv" + path.write_text("# nothing\n", encoding="ascii") + with self.assertRaises(sf3_extents.ToolError): + sf3_extents.load_inventory(path) + + +class ExtentTests(unittest.TestCase): + def setUp(self) -> None: + self.extents = _derive() + + def _extent(self, offset: int) -> object: + return self.extents[PAYLOAD + offset] + + def test_entry_extent_includes_its_return(self) -> None: + extent = self._extent(ENTRY) + self.assertEqual(extent.grade, "exact") + self.assertEqual(extent.end, PAYLOAD + 0x10) + self.assertEqual(extent.size, 0x10) + + def test_framed_extent_includes_the_delay_slot(self) -> None: + extent = self._extent(JAL_A) + self.assertEqual(extent.grade, "exact") + self.assertEqual(extent.end, PAYLOAD + JAL_A + 0x10) + self.assertIn("term=jr_ra", extent.evidence) + + def test_extent_covers_every_path_not_just_the_first_return(self) -> None: + extent = self._extent(TWO_PATHS) + self.assertEqual(extent.grade, "exact") + self.assertEqual(extent.end, PAYLOAD + 0x48) + + def test_tail_jump_is_a_terminal_and_names_its_target(self) -> None: + extent = self._extent(TAIL_J) + self.assertEqual(extent.grade, "exact") + self.assertEqual(extent.end, PAYLOAD + TAIL_J + 0x10) + self.assertIn(f"term=tail_j:0x{PAYLOAD + PLAIN:08X}", extent.evidence) + + def test_register_jump_is_indirect_and_bounded_by_the_next_start(self) -> None: + extent = self._extent(INDIRECT) + self.assertEqual(extent.grade, "indirect") + self.assertEqual(extent.end, PAYLOAD + FALLTHROUGH) + self.assertTrue(any(item.startswith("jr_reg=") for item in extent.evidence)) + + def test_fallthrough_ends_at_the_next_hard_start(self) -> None: + extent = self._extent(FALLTHROUGH) + self.assertEqual(extent.grade, "fallthrough") + self.assertEqual(extent.end, PAYLOAD + PLAIN) + + def test_syscall_is_a_terminal(self) -> None: + extent = self._extent(SYSCALL_FN) + self.assertEqual(extent.grade, "exact") + self.assertIn("term=syscall", extent.evidence) + + def test_escape_is_clipped_and_records_the_crossing_instruction(self) -> None: + extent = self._extent(ESCAPE) + self.assertEqual(extent.grade, "escape") + self.assertEqual(extent.end, PAYLOAD + AFTER_ESCAPE) + self.assertTrue(any(item.startswith("escape=branch@") for item in extent.evidence)) + + def test_padding_shows_as_a_positive_gap(self) -> None: + extent = self._extent(FRAMED) + self.assertEqual(extent.grade, "exact") + self.assertEqual(extent.end, PAYLOAD + 0xD0) + self.assertEqual(extent.gap, CONTAINS_SOFT - 0xD0) + + def test_last_start_has_no_next_and_no_gap(self) -> None: + extent = self._extent(LAST) + self.assertIsNone(extent.next) + self.assertIsNone(extent.gap) + + def test_soft_candidate_inside_an_exact_extent_is_contained(self) -> None: + extent = self._extent(SOFT_INSIDE) + self.assertEqual(extent.grade, "contained") + self.assertIsNone(extent.end) + self.assertIn(f"inside=0x{PAYLOAD + CONTAINS_SOFT:08X}", extent.evidence) + + def test_soft_candidate_with_no_covering_extent_is_standalone(self) -> None: + extent = self._extent(SOFT_STANDALONE) + self.assertEqual(extent.grade, "standalone") + self.assertIsNone(extent.end) + + def test_hard_starts_are_never_contained(self) -> None: + for address in HARD_STARTS: + self.assertNotEqual(self.extents[PAYLOAD + address].grade, "contained") + + def test_derivation_is_deterministic(self) -> None: + self.assertEqual( + sf3_extents.format_extents(list(_derive().values())), + sf3_extents.format_extents(list(_derive().values())), + ) + + +class FormatTests(unittest.TestCase): + def test_header_and_column_count(self) -> None: + text = sf3_extents.format_extents(list(_derive().values())) + lines = text.splitlines() + self.assertTrue(lines[0].startswith("#")) + body = [line for line in lines if not line.startswith("#")] + self.assertTrue(body) + for line in body: + self.assertEqual(len(line.split("\t")), 7) + + def test_non_function_rows_use_dashes(self) -> None: + text = sf3_extents.format_extents(list(_derive().values())) + row = [line for line in text.splitlines() + if line.startswith(f"0x{PAYLOAD + SOFT_INSIDE:08X}")][0] + self.assertEqual(row.split("\t")[1:5], ["-", "-", "-", "-"]) + + def test_evidence_is_key_value_tokens_only(self) -> None: + text = sf3_extents.format_extents(list(_derive().values())) + for line in text.splitlines(): + if line.startswith("#"): + continue + for token in line.split("\t")[6].split(";"): + self.assertRegex(token, r"^[a-z_]+=") + + def test_addresses_and_sizes_only(self) -> None: + text = sf3_extents.format_extents(list(_derive().values())) + for line in text.splitlines(): + if line.startswith("#"): + continue + fields = line.split("\t") + self.assertTrue(fields[0].startswith("0x")) + self.assertIn(fields[5], sf3_extents.GRADES) + if fields[2] != "-": + self.assertTrue(fields[2].isdigit()) + + +class MainTests(unittest.TestCase): + def _write_inputs(self, root: Path) -> tuple[Path, Path]: + exe = root / "synthetic.exe" + exe.write_bytes(_synthetic_exe(_payload(), PAYLOAD)) + inventory = root / "inventory.tsv" + inventory.write_text(_inventory_text(), encoding="ascii") + return exe, inventory + + def test_scan_writes_the_extents_table(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + exe, inventory = self._write_inputs(root) + out = root / "extents.tsv" + stdout = io.StringIO() + with contextlib.redirect_stdout(stdout): + rc = sf3_extents.main(["scan", "--exe", str(exe), + "--inventory", str(inventory), "--out", str(out)]) + self.assertEqual(rc, 0) + text = out.read_text(encoding="ascii") + self.assertIn(f"0x{PAYLOAD + JAL_A:08X}\t0x{PAYLOAD + JAL_A + 0x10:08X}", text) + self.assertIn("grade_exact=10", stdout.getvalue()) + + def test_scan_refuses_an_existing_output(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + exe, inventory = self._write_inputs(root) + out = root / "extents.tsv" + out.write_text("", encoding="ascii") + rc = sf3_extents.main(["scan", "--exe", str(exe), + "--inventory", str(inventory), "--out", str(out)]) + self.assertEqual(rc, 2) + + def test_scan_force_overwrites(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + exe, inventory = self._write_inputs(root) + out = root / "extents.tsv" + out.write_text("stale\n", encoding="ascii") + rc = sf3_extents.main(["scan", "--exe", str(exe), "--inventory", str(inventory), + "--out", str(out), "--force"]) + self.assertEqual(rc, 0) + self.assertNotIn("stale", out.read_text(encoding="ascii")) + + def test_verify_agrees_with_matching_regions(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + exe, inventory = self._write_inputs(root) + out = root / "extents.tsv" + sf3_extents.main(["scan", "--exe", str(exe), + "--inventory", str(inventory), "--out", str(out)]) + regions = root / "regions.tsv" + regions.write_text( + f"0x{PAYLOAD + JAL_A:08X}\t0x{PAYLOAD + JAL_A + 0x10:08X}\tsrc/f.c\n", + encoding="ascii") + rc = sf3_extents.main(["verify", "--exe", str(exe), "--inventory", str(inventory), + "--extents", str(out), "--regions", str(regions)]) + self.assertEqual(rc, 0) + + def test_verify_fails_on_a_disagreeing_region(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + exe, inventory = self._write_inputs(root) + out = root / "extents.tsv" + sf3_extents.main(["scan", "--exe", str(exe), + "--inventory", str(inventory), "--out", str(out)]) + regions = root / "regions.tsv" + regions.write_text( + f"0x{PAYLOAD + JAL_A:08X}\t0x{PAYLOAD + JAL_A + 0x14:08X}\tsrc/f.c\n", + encoding="ascii") + rc = sf3_extents.main(["verify", "--exe", str(exe), "--inventory", str(inventory), + "--extents", str(out), "--regions", str(regions)]) + self.assertEqual(rc, 1) + + +if __name__ == "__main__": + unittest.main()