"""DIMENSION 3 SEASONS q5.
Q: is the GET /season (SEASONLIST) request reachable, and from where? Descriptor
row 69 handler is FUN_180124710. Get its callers and decompile it. Also decompile
the +0x7138 struct writer FUN_18011c2e0 and FUN_18011a830-area accessor to locate
the writer of the count short at +0x7138+0x96/+0x98. And decompile the three vtable
getter stubs (0x18011c150/+0x588, 0x18011b8a0/+0x898) via dec() on the address.
CONTROL: callers() proven working in q1 (returned [] for table-dispatched fns and
non-[] is expected for a normally-called fn); FUN_18011dc50 is a known
table/virtual-dispatched writer, use its caller set shape as sanity.
"""
import traceback
try:
    for name, a in [
        ("FUN_180124710 SEASONLIST handler", 0x180124710),
        ("FUN_18011c2e0 (+0x7138 accessor)", 0x18011c2e0),
    ]:
        print("=" * 60, name, hex(a))
        print("callers:", callers(a))
        d = dec(a); print("LEN", len(d)); print(d)

    print("=" * 60, "getter stub +0x588 @0x18011c150")
    print(dec(0x18011c150))
    print("=" * 60, "getter stub +0x898 @0x18011b8a0")
    print(dec(0x18011b8a0))
    print("=" * 60, "accessor @0x18011a822 area (fn 0x18011a830?)")
    print("fname 0x18011a822 ->", fname(0x18011a822))
    print(dec(0x18011a822)[:1200])

    # who calls the SeasonList RESPONSE deser's install? find xrefs to 0x180124710
    print("=" * 60, "xrefs_to FUN_180124710")
    for x in xrefs_to(0x180124710):
        print("   ", hex(x[0]), x[1], x[2], hex(x[3]))

    sys.stdout.flush()
    os._exit(0)
except Exception:
    traceback.print_exc()
    sys.stdout.flush()
    os._exit(0)
