"""DIMENSION 3 SEASONS q1.
HYPOTHESIS: the Seasons refusal is decided in the front-end SCRIPT layer, not in
CardsDLL. If so, the CardsDLL season loaders make no network call, only read a
u16 count, and the CompetitionManager mode setters have ZERO in-DLL callers
(driven from outside). Prove or refute by enumerating callers of the mode setters,
decompiling the loader chain, and tracing the NOSEASONS event.
CONTROL: for the "zero callers" claim, a control with KNOWN callers must be in the
same batch -- I use FUN_180057560 (LoadOfflineSeasons) itself, which per prior work
is reached from the RPC dispatch, so callers() must be NON-empty for it if the
mechanism is sound; if callers() returns [] for a function I know is called, the
query form is broken and no absence claim is valid.
"""
import traceback
try:
    targets = {
        "FUN_180101680 (CompMgr mode set A)": 0x180101680,
        "FUN_1801016c0 (CompMgr mode set B)": 0x1801016c0,
        "FUN_180057560 LoadOfflineSeasons": 0x180057560,
        "FUN_1800576b0 LoadSeasons": 0x1800576b0,
        "FUN_180057230 LoadCurrentOfflineSeason": 0x180057230,
        "FUN_180057330 (NOSEASONS fire?)": 0x180057330,
    }
    for name, a in targets.items():
        print("=" * 70)
        print(name, hex(a))
        try:
            cs = callers(a)
        except Exception as e:
            cs = "ERR %r" % e
        print("  callers:", cs)

    # NOSEASONS literal
    print("=" * 70)
    print("NOSEASONS literal search")
    for lit in (b"NOSEASONS\x00", b"NOSEASONS"):
        hits = find_all(lit)
        print("  ", lit, "->", [hex(h) for h in hits])
    # xrefs to the reported literal addr
    print("  xrefs to 0x1801f92c0:")
    for x in xrefs_to(0x1801f92c0):
        print("    ", hex(x[0]), x[1], x[2], hex(x[3]))

    # CompetitionManager singleton
    print("=" * 70)
    print("DAT_1802e6328 (CompetitionManager singleton) xrefs:")
    for x in xrefs_to(0x1802e6328):
        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)
