# live-conformance/audience-scte224 — SCTE 224 documents as blackouts The corpus of [`extensions/audience-decision.md`](../../extensions/audience-decision.md) §10. `vectors.json` holds: - `documents`: `Media` documents, each with the `programme` and `spans` it imports to (a span is a decision's `start`, `end` and `blackouts`), or the one reason it is `refused`. Each refused document is one edit from a document that imports. A limit (1,048,576 bytes, 64 elements deep, audiences 8 deep, 8,192 regions, 4,096 media points, 256 blackouts) has a document at it, which imports, and one past it. A document near a limit is stated by its pieces, `document_parts`, written one after another: a string; `{"repeat": s, "times": n}`, the string `n` times; or `{"counted": s, "times": n}`, the string once for each count from 0 to `n` − 1 with its `{n}` replaced by the count in three digits of base 36 (`0` to `9`, then `A` to `Z`). - `decisions` and `predicates`: a signed audience decision or sink predicate (`text`), the name of the `document` it is held to, the `location` of the session or the sink, and its outcome: `consistent` with the verdict and the programme shown in place, or the reason it is `refused`. - `keys`: the public keys, for a reader. Every key is from a fixed seed and attests nothing; every region is a user-assigned code and names no place. Written by `tests/audience_scte224.rs` (`WAI_AUDIENCE_SCTE224_WRITE=1 cargo test --features sink_predicate --test audience_scte224`), which declares each outcome by hand and requires the reference to reach it. The second implementation, written from the text: ``` python3 -I live-conformance/audience_scte224_verify.py live-conformance/audience-scte224 ``` It imports every document with a reader of its own, writes the exported document again byte for byte, holds each decision and predicate to its document, requires every changed copy of the corpus to fail, and switches off each of its own checks in turn: the corpus catches every one.