Bayer systems may exchange multiple data frames in one string across surfaces such as crop-science, pharmaceuticals, and consumer-health. Parse the stream and return every payload belonging to a requested surface.
Each frame has this format:
BAYER/<surface>/<length>/<payload>
Frames are concatenated directly with no separator. The decimal length specifies the exact number of characters in payload, so the payload may contain /, spaces, or other frame-like text. A surface contains lowercase letters and hyphens. The prefix and separators are case-sensitive.
Implement extract_payloads(stream, surface) to return payloads in their original order. The input stream is guaranteed to contain only complete, well-formed frames, and surface is valid. Return an empty list when no frame matches.
def extract_payloads(stream, surface):