import sys,collections
sys.path.insert(0,'/tmp/claude-0/-root-ants/f0a0d69c-fbe4-4887-8c0d-a5302a0da398/scratchpad')
from calls import *
img={S(im[0]):(im[2],im[3]) for im in IMAGES}
TARGETS={0x1544164:'Dataset.Execute',0x1540cfc:'Dataset.GetSection',0x154096c:'Dataset.CreateSection'}
res=collections.defaultdict(list)
for asm in ['Assembly-CSharp.dll','Assembly-CSharp-firstpass.dll']:
    st,ct=img[asm]
    for i in range(st,st+ct):
        t=TYPES[i]; ns,nm=S(t[1]),S(t[0]); cls=(ns+'.' if ns else '')+nm
        for k in range(t[20]):
            m=METHODS[t[13]+k]
            a=method_addr(m[6]); sz=fn_size(a)
            if sz<=0: continue
            cs=[c for c in callees(a,sz) if c in TARGETS]
            if not cs: continue
            ls=method_lits(a,sz)
            for c in cs: res[TARGETS[c]].append(('%s::%s'%(cls,S(m[0])),ls))
for kind in res:
    print('\n############ callers of %s (%d) ############'%(kind,len(res[kind])))
    for fn,ls in sorted(res[kind]):
        print('  %s'%fn)
        for s in ls[:14]: print('        %r'%s[:100])
