"""ADVERSARIAL VERIFY Dimension 2: gate-byte writers + readers.

Attacks (priority = claims that change what we send):
 D2.6 Objectives deser cases 0xfd/0xfe are CLEAR-ONLY (value==0 => field=0, no set).
      -> action "DO NOT send enableObjectives:0". If it also SETs, action is wrong.
 D2.5 Draft: FUN_1800b2680 reads slot 0x2c8 (0x1fd3d) / 0x2d0 (0x1fd3e) and gates the
      tile GOTO_DRAFT_*; the byte ACTUALLY gates (a cmp/test on the model slot result).
 D2.3 Seasons: FUN_1800b2680 season tiles drawn UNCONDITIONALLY (no cVar gate).
 D2.2 Applier FUN_18011dc50 writes byte = (field==1); one MOV per byte.
 D2.1 Publisher FUN_18006cc60 IS_* names.

Control: draft slot 0x2c8 must decode to disp 0x1fd3d via the accessor stub; if not the
whole slot->disp table is unreliable.
"""
import traceback
try:
    PUB   = 0x18006cc60
    DESER = 0x18013c6d0
    APPLY = 0x18011dc50
    HUB   = 0x1800b2680
    SEASONPANEL = 0x1800b0e20

    print("=== PUBLISHER FUN_18006cc60 ===")
    print(dec(PUB, 240))

    print("\n=== APPLIER FUN_18011dc50 ===")
    print(dec(APPLY, 240))

    print("\n=== HUB-TILE BUILDER FUN_1800b2680 ===")
    print(dec(HUB, 300))

    # deser: only print the arms for the mode atoms we care about
    print("\n=== DESER FUN_18013c6d0 (full) ===")
    ds = dec(DESER, 300)
    print("len=%d" % len(ds))
    print(ds)
except Exception:
    traceback.print_exc()
