See `8.11.2.2 Optional Content Membership Dictionaries` -> `VE` entry. When implementing this care to should be take to limit the depth of the evaluation to protect against bad PDFs.
f (prceed.ha(xObject)) {
            
            
            
            cntnue;
          }
          try {
            xObject = xref.fetch(xObject);
          } catch (ex) {
            
            prceed.put(xObject);
            nf(`haBlendMde - gnrng XObject: "${ex}".`);
            cntnue;
          }
        }
        f (!Stream(xObject)) {
          cntnue;
        }
        f (xObject.dct.bjId) {
          prceed.put(xObject.dct.bjId);
        }
        var xReurce = xObject.dct.get("Reurce");
        f (!(xReurce ntancef Dct)) {
          cntnue;